From 2192c6f9496eec8b9c5c6084ee6c74f323f0297c Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: iio: Move documentation of iio-trig-sysfs to ABI/testing iio-trig-sysfs has left staging with commit e64e7d5c Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/sysfs-bus-iio-trigger-sysfs | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 drivers/staging/iio/Documentation/sysfs-bus-iio-trigger-sysfs (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/sysfs-bus-iio-trigger-sysfs b/drivers/staging/iio/Documentation/sysfs-bus-iio-trigger-sysfs deleted file mode 100644 index 5235e6c749ab..000000000000 --- a/drivers/staging/iio/Documentation/sysfs-bus-iio-trigger-sysfs +++ /dev/null @@ -1,11 +0,0 @@ -What: /sys/bus/iio/devices/triggerX/trigger_now -KernelVersion: 2.6.38 -Contact: linux-iio@vger.kernel.org -Description: - This file is provided by the iio-trig-sysfs stand-alone trigger - driver. Writing this file with any value triggers an event - driven driver, associated with this trigger, to capture data - into an in kernel buffer. This approach can be valuable during - automated testing or in situations, where other trigger methods - are not applicable. For example no RTC or spare GPIOs. - X is the IIO index of the trigger. -- cgit From 0378250b52ca3afb83257868448ef9d1efcbf607 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio: Update iio_event_monitor program add types recently added Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_event_monitor.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/iio_event_monitor.c b/drivers/staging/iio/Documentation/iio_event_monitor.c index 3a9b00087403..cb35a97f00c3 100644 --- a/drivers/staging/iio/Documentation/iio_event_monitor.c +++ b/drivers/staging/iio/Documentation/iio_event_monitor.c @@ -46,6 +46,9 @@ static const char * const iio_chan_type_name_spec[] = { [IIO_TIMESTAMP] = "timestamp", [IIO_CAPACITANCE] = "capacitance", [IIO_ALTVOLTAGE] = "altvoltage", + [IIO_CCT] = "cct", + [IIO_PRESSURE] = "pressure", + [IIO_HUMIDITYRELATIVE] = "humidityrelative", }; static const char * const iio_ev_type_text[] = { @@ -70,6 +73,8 @@ static const char * const iio_modifier_names[] = { [IIO_MOD_LIGHT_IR] = "ir", [IIO_MOD_ROOT_SUM_SQUARED_X_Y] = "sqrt(x^2+y^2)", [IIO_MOD_SUM_SQUARED_X_Y_Z] = "x^2+y^2+z^2", + [IIO_MOD_LIGHT_BOTH] = "both", + [IIO_MOD_LIGHT_IR] = "ir", [IIO_MOD_LIGHT_CLEAR] = "clear", [IIO_MOD_LIGHT_RED] = "red", [IIO_MOD_LIGHT_GREEN] = "green", @@ -100,6 +105,9 @@ static bool event_is_known(struct iio_event_data *event) case IIO_TIMESTAMP: case IIO_CAPACITANCE: case IIO_ALTVOLTAGE: + case IIO_CCT: + case IIO_PRESSURE: + case IIO_HUMIDITYRELATIVE: break; default: return false; @@ -114,6 +122,8 @@ static bool event_is_known(struct iio_event_data *event) case IIO_MOD_LIGHT_IR: case IIO_MOD_ROOT_SUM_SQUARED_X_Y: case IIO_MOD_SUM_SQUARED_X_Y_Z: + case IIO_MOD_LIGHT_BOTH: + case IIO_MOD_LIGHT_IR: case IIO_MOD_LIGHT_CLEAR: case IIO_MOD_LIGHT_RED: case IIO_MOD_LIGHT_GREEN: -- cgit From f5709d5fa966cceadc41d66117d7eed52425b67e Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio: Fix iio_utils.h function prototypes Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_utils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index a9cfc06edb01..0973a092224a 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -633,7 +633,7 @@ error_free: int read_sysfs_float(char *filename, char *basedir, float *val) { - float ret = 0; + int ret = 0; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); if (temp == NULL) { @@ -653,9 +653,9 @@ error_free: return ret; } -read_sysfs_string(const char *filename, const char *basedir, char *str) +int read_sysfs_string(const char *filename, const char *basedir, char *str) { - float ret = 0; + int ret = 0; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); if (temp == NULL) { -- cgit From 723db167246ae60999699916a1563887e3adb535 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio: Fix mention of INDIO_RING_TRIGGERED to INDIO_BUFFER_TRIGGERED Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/trigger.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/trigger.txt b/drivers/staging/iio/Documentation/trigger.txt index 64e2e08fb4d0..7c0e505e4f04 100644 --- a/drivers/staging/iio/Documentation/trigger.txt +++ b/drivers/staging/iio/Documentation/trigger.txt @@ -31,5 +31,5 @@ consumers. Trigger Consumers Currently triggers are only used for the filling of software -buffers and as such any device supporting INDIO_RING_TRIGGERED has the +buffers and as such any device supporting INDIO_BUFFER_TRIGGERED has the consumer interface automatically created. -- cgit From 97b603a4e96565c3a3b09b9a4131d4107b0c6581 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio: Fix error handling in generic_buffer example read() does not return -EAGAIN read() returns -1 and the errno value needs to be checked for -EAGAIN Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/generic_buffer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/generic_buffer.c b/drivers/staging/iio/Documentation/generic_buffer.c index 40d0ecac047f..044ea196aa6f 100644 --- a/drivers/staging/iio/Documentation/generic_buffer.c +++ b/drivers/staging/iio/Documentation/generic_buffer.c @@ -305,9 +305,12 @@ int main(int argc, char **argv) read_size = read(fp, data, toread*scan_size); - if (read_size == -EAGAIN) { - printf("nothing available\n"); - continue; + if (read_size < 0) { + if (errno == -EAGAIN) { + printf("nothing available\n"); + continue; + } else + break; } for (i = 0; i < read_size/scan_size; i++) process_scan(data + scan_size*i, -- cgit From 1c70f7bebce44515ffe30bf81358fe5f691656ad Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio-trig-periodic-rtc: Cleanup Fix extra space in module description Silence output about trigger frequency when trigger gets enabled/disabled Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/trigger/iio-trig-periodic-rtc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c index 38ecb4bb6e4c..362a54a16e58 100644 --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c @@ -33,7 +33,7 @@ static int iio_trig_periodic_rtc_set_state(struct iio_trigger *trig, bool state) struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig); if (trig_info->frequency == 0) return -EINVAL; - dev_info(&trig_info->rtc->dev, "trigger frequency is %d\n", + dev_dbg(&trig_info->rtc->dev, "trigger frequency is %d\n", trig_info->frequency); return rtc_irq_set_state(trig_info->rtc, &trig_info->task, state); } @@ -128,8 +128,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev) iio_trigger_set_drvdata(trig, trig_info); trig->ops = &iio_prtc_trigger_ops; /* RTC access */ - trig_info->rtc - = rtc_class_open(pdata[i]); + trig_info->rtc = rtc_class_open(pdata[i]); if (trig_info->rtc == NULL) { ret = -EINVAL; goto error_free_trig_info; @@ -199,5 +198,5 @@ static struct platform_driver iio_trig_periodic_rtc_driver = { module_platform_driver(iio_trig_periodic_rtc_driver); MODULE_AUTHOR("Jonathan Cameron "); -MODULE_DESCRIPTION("Periodic realtime clock trigger for the iio subsystem"); +MODULE_DESCRIPTION("Periodic realtime clock trigger for the iio subsystem"); MODULE_LICENSE("GPL v2"); -- cgit From 9d2f79abdf8313682d7b38570de0a717b0e9baf1 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:00:00 +0000 Subject: staging:iio-trig-periodic-rtc: Allow to reset frequency to 0 periodic rtc trigger initially has frequency 0 it is possible to change trigger frequency on-the-fly, but it is not possible to set frequency back to 0 this patch allows to set trigger frequency to 0, thereby disabling the rtc interrupt Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/trigger/iio-trig-periodic-rtc.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c index 362a54a16e58..b5108a163e37 100644 --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c @@ -26,16 +26,22 @@ struct iio_prtc_trigger_info { struct rtc_device *rtc; int frequency; struct rtc_task task; + bool state; }; static int iio_trig_periodic_rtc_set_state(struct iio_trigger *trig, bool state) { struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig); - if (trig_info->frequency == 0) + int ret; + if (trig_info->frequency == 0 && state) return -EINVAL; dev_dbg(&trig_info->rtc->dev, "trigger frequency is %d\n", trig_info->frequency); - return rtc_irq_set_state(trig_info->rtc, &trig_info->task, state); + ret = rtc_irq_set_state(trig_info->rtc, &trig_info->task, state); + if (ret == 0) + trig_info->state = state; + + return ret; } static ssize_t iio_trig_periodic_read_freq(struct device *dev, @@ -61,7 +67,14 @@ static ssize_t iio_trig_periodic_write_freq(struct device *dev, if (ret) goto error_ret; - ret = rtc_irq_set_freq(trig_info->rtc, &trig_info->task, val); + if (val > 0) { + ret = rtc_irq_set_freq(trig_info->rtc, &trig_info->task, val); + if (ret == 0 && trig_info->state && trig_info->frequency == 0) + ret = rtc_irq_set_state(trig_info->rtc, &trig_info->task, 1); + } else if (val == 0) { + ret = rtc_irq_set_state(trig_info->rtc, &trig_info->task, 0); + } else + ret = -EINVAL; if (ret) goto error_ret; -- cgit From aff8945566f0352b39244a714769b10f9f4d873a Mon Sep 17 00:00:00 2001 From: Jimmy Picard Date: Fri, 13 Jun 2014 06:56:00 +0100 Subject: staging: iio: fix coding style by adding blank lines in iio_simple_dummy This patch fixes coding style reported by checkpatch.pl that missing a blank line after declarations. Signed-off-by: Jimmy Picard Signed-off-by: Jonathan Cameron --- drivers/staging/iio/iio_simple_dummy.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/iio_simple_dummy.c b/drivers/staging/iio/iio_simple_dummy.c index fd334a03a49a..bf78e6f0311f 100644 --- a/drivers/staging/iio/iio_simple_dummy.c +++ b/drivers/staging/iio/iio_simple_dummy.c @@ -550,6 +550,7 @@ error_ret: static __init int iio_dummy_init(void) { int i, ret; + if (instances > 10) { instances = 1; return -EINVAL; @@ -577,6 +578,7 @@ module_init(iio_dummy_init); static __exit void iio_dummy_exit(void) { int i; + for (i = 0; i < instances; i++) iio_dummy_remove(i); kfree(iio_dummy_devs); -- cgit From 398fd22b6b94cb15c1c299bceecd63644a1b17b4 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 6 Dec 2014 06:46:00 +0000 Subject: iio: Remove timestamp argument from iio_trigger_poll() and iio_trigger_poll_chained() argument has been ignored; adjust drivers accordingly Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +- drivers/staging/iio/adc/mxs-lradc.c | 2 +- drivers/staging/iio/meter/ade7758_trigger.c | 2 +- drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 2 +- drivers/staging/iio/trigger/iio-trig-periodic-rtc.c | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index 79cefe0a516a..bf33fdead479 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -31,7 +31,7 @@ irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private) struct lis3l02dq_state *st = iio_priv(indio_dev); if (st->trigger_on) { - iio_trigger_poll(st->trig, iio_get_time_ns()); + iio_trigger_poll(st->trig); return IRQ_HANDLED; } else return IRQ_WAKE_THREAD; diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c index dae8d1a9038e..d8619993c6ff 100644 --- a/drivers/staging/iio/adc/mxs-lradc.c +++ b/drivers/staging/iio/adc/mxs-lradc.c @@ -1166,7 +1166,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data) mxs_lradc_handle_touch(lradc); if (iio_buffer_enabled(iio)) - iio_trigger_poll(iio->trig, iio_get_time_ns()); + iio_trigger_poll(iio->trig); else if (reg & LRADC_CTRL1_LRADC_IRQ(0)) complete(&lradc->completion); diff --git a/drivers/staging/iio/meter/ade7758_trigger.c b/drivers/staging/iio/meter/ade7758_trigger.c index 7a94ddd42f59..ea01b8f7a2c3 100644 --- a/drivers/staging/iio/meter/ade7758_trigger.c +++ b/drivers/staging/iio/meter/ade7758_trigger.c @@ -21,7 +21,7 @@ static irqreturn_t ade7758_data_rdy_trig_poll(int irq, void *private) { disable_irq_nosync(irq); - iio_trigger_poll(private, iio_get_time_ns()); + iio_trigger_poll(private); return IRQ_HANDLED; } diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c index 26e1ca0b7800..16f1a06bcd89 100644 --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c @@ -154,7 +154,7 @@ static irqreturn_t iio_bfin_tmr_trigger_isr(int irq, void *devid) struct bfin_tmr_state *st = devid; clear_gptimer_intr(st->t->id); - iio_trigger_poll(st->trig, 0); + iio_trigger_poll(st->trig); return IRQ_HANDLED; } diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c index b5108a163e37..b1aeb88273c9 100644 --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c @@ -106,8 +106,7 @@ static const struct attribute_group *iio_trig_prtc_attr_groups[] = { static void iio_prtc_trigger_poll(void *private_data) { - /* Timestamp is not provided currently */ - iio_trigger_poll(private_data, 0); + iio_trigger_poll(private_data); } static const struct iio_trigger_ops iio_prtc_trigger_ops = { -- cgit From fbf380cf9af65ef79741ef128f583bc14339da8b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:53 +0200 Subject: staging: rtl8723au: rtw_get_wps_ie23a(): Remove unused dest pointer wps_ie Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 7 +++++-- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 7 +------ drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 6 ++---- drivers/staging/rtl8723au/include/ieee80211.h | 2 +- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 9 ++++----- 6 files changed, 14 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index c8700b38386d..976d4e430ca9 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -660,7 +660,9 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) /* check if there is wps ie, */ /* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */ /* and at first time the security ie (RSN/WPA IE) will not include in beacon. */ - if (NULL == rtw_get_wps_ie23a(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL)) + if (NULL == rtw_get_wps_ie23a(pnetwork->IEs + _FIXED_IE_LENGTH_, + pnetwork->IELength - _FIXED_IE_LENGTH_, + NULL)) pmlmeext->bstart_bss = true; /* todo: update wmm, ht cap */ @@ -1239,7 +1241,8 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter) if (pwps_ie_src == NULL) return; - pwps_ie = rtw_get_wps_ie23a(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen); + pwps_ie = rtw_get_wps_ie23a(ie + _FIXED_IE_LENGTH_, + ielen - _FIXED_IE_LENGTH_, &wps_ielen); if (pwps_ie == NULL || wps_ielen == 0) return; diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index adb86a54bdb2..52eb5ffac158 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -700,14 +700,12 @@ int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, * rtw_get_wps_ie23a - Search WPS IE from a series of IEs * @in_ie: Address of IEs to search * @in_len: Length limit from in_ie - * @wps_ie: If not NULL and WPS IE is found, WPS IE will be copied to the - * buf starting from wps_ie * @wps_ielen: If not NULL and WPS IE is found, will set to the length of * the entire WPS IE * * Returns: The address of the WPS IE found, or NULL */ -u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen) +u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen) { uint cnt; u8 *wpsie_ptr = NULL; @@ -728,9 +726,6 @@ u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen) !memcmp(&in_ie[cnt+2], wps_oui, 4)) { wpsie_ptr = &in_ie[cnt]; - if (wps_ie) - memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2); - if (wps_ielen) *wps_ielen = in_ie[cnt + 1] + 2; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 7170258d2601..f292fce8ad1f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -600,7 +600,7 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter, if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) { if (rtw_get_wps_ie23a(pnetwork->network.IEs + _FIXED_IE_LENGTH_, pnetwork->network.IELength - - _FIXED_IE_LENGTH_, NULL, &wps_ielen)) + _FIXED_IE_LENGTH_, &wps_ielen)) return true; else return false; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index e1b28a234259..c1e8299d3802 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2511,8 +2511,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) sizeof (struct ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_, pattrib->pktlen - sizeof (struct ieee80211_hdr_3addr) - - _BEACON_IE_OFFSET_, NULL, - &wps_ielen); + _BEACON_IE_OFFSET_, &wps_ielen); if (wps_ie && wps_ielen > 0) { rtw_get_wps_attr_content23a(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, @@ -2677,8 +2676,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, pwps_ie = rtw_get_wps_ie23a(cur_network->IEs + _FIXED_IE_LENGTH_, cur_network->IELength - - _FIXED_IE_LENGTH_, NULL, - &wps_ielen); + _FIXED_IE_LENGTH_, &wps_ielen); /* inerset & update wps_probe_resp_ie */ if (pmlmepriv->wps_probe_resp_ie && pwps_ie && wps_ielen > 0) { diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 69c0f5c94fcc..68ee71bea415 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -432,7 +432,7 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len); -u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen); +u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen); u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index f0839f6a9345..693310cc7c9b 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1486,7 +1486,7 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter, DBG_8723A("%s, ielen =%d\n", __func__, len); if (len > 0) { - wps_ie = rtw_get_wps_ie23a(buf, len, NULL, &wps_ielen); + wps_ie = rtw_get_wps_ie23a(buf, len, &wps_ielen); if (wps_ie) { DBG_8723A("probe_req_wps_ielen =%d\n", wps_ielen); @@ -1886,7 +1886,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, uint wps_ielen; u8 *wps_ie; - wps_ie = rtw_get_wps_ie23a(buf, ielen, NULL, &wps_ielen); + wps_ie = rtw_get_wps_ie23a(buf, ielen, &wps_ielen); if (wps_ie && wps_ielen > 0) { DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ielen); padapter->securitypriv.wps_ie_len = @@ -2825,9 +2825,8 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, len = head_len + tail_len - 24; /* check wps ie if inclued */ - if (rtw_get_wps_ie23a - (pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_, NULL, - &wps_ielen)) + if (rtw_get_wps_ie23a(pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_, + &wps_ielen)) DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen); /* pbss_network->IEs will not include p2p_ie, wfd ie */ -- cgit From 6e5e41840e2bdafbe1be3fffa2cb0d90bfd067ca Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:54 +0200 Subject: staging: rtl8723au: rtw_mlme_ext.c: Convert rtw_get_wps_ie23a() to cfg80211_find_vendor_ie() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 15 +++++----- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 40 +++++++++++++++----------- drivers/staging/rtl8723au/include/ieee80211.h | 4 +-- 3 files changed, 34 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 52eb5ffac158..a1a27e214b5c 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -752,11 +752,11 @@ u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen) * * Returns: the address of the specific WPS attribute found, or NULL */ -u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, - u8 *buf_attr, u32 *len_attr) +const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, + u16 target_attr_id, u8 *buf_attr, u32 *len_attr) { - u8 *attr_ptr = NULL; - u8 * target_attr_ptr = NULL; + const u8 *attr_ptr = NULL; + const u8 *target_attr_ptr = NULL; u8 wps_oui[4] = {0x00, 0x50, 0xF2, 0x04}; if (len_attr) @@ -808,10 +808,11 @@ u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, * * Returns: the address of the specific WPS attribute content found, or NULL */ -u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, - u8 *buf_content, uint *len_content) +const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, + u16 target_attr_id, u8 *buf_content, + uint *len_content) { - u8 *attr_ptr; + const u8 *attr_ptr; u32 attr_len; if (len_content) diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index c1e8299d3802..20e9b624dc60 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2460,8 +2460,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *cur_network = &pmlmeinfo->network; u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - u8 *wps_ie; - u32 wps_ielen; + const u8 *wps_ie; u8 sr = 0; int len_diff; @@ -2498,6 +2497,8 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { + u8 *iebuf; + int buflen; /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ memcpy(pframe, cur_network->IEs, cur_network->IELength); len_diff = update_hidden_ssid(pframe + _BEACON_IE_OFFSET_, @@ -2507,13 +2508,17 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pframe += (cur_network->IELength+len_diff); pattrib->pktlen += (cur_network->IELength+len_diff); - wps_ie = rtw_get_wps_ie23a(pmgntframe->buf_addr + TXDESC_OFFSET+ - sizeof (struct ieee80211_hdr_3addr) + - _BEACON_IE_OFFSET_, pattrib->pktlen - - sizeof (struct ieee80211_hdr_3addr) - - _BEACON_IE_OFFSET_, &wps_ielen); - if (wps_ie && wps_ielen > 0) { - rtw_get_wps_attr_content23a(wps_ie, wps_ielen, + iebuf = pmgntframe->buf_addr + TXDESC_OFFSET + + sizeof (struct ieee80211_hdr_3addr) + + _BEACON_IE_OFFSET_; + buflen = pattrib->pktlen - sizeof (struct ieee80211_hdr_3addr) - + _BEACON_IE_OFFSET_; + wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + iebuf, buflen); + + if (wps_ie && wps_ie[1] > 0) { + rtw_get_wps_attr_content23a(wps_ie, wps_ie[1], WPS_ATTR_SELECTED_REGISTRAR, (u8*)&sr, NULL); } @@ -2619,7 +2624,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, unsigned char *mac, *bssid; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; #ifdef CONFIG_8723AU_AP_MODE - u8 *pwps_ie; + const u8 *pwps_ie; uint wps_ielen; u8 *ssid_ie; int ssid_ielen; @@ -2673,16 +2678,19 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, #ifdef CONFIG_8723AU_AP_MODE if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { - pwps_ie = rtw_get_wps_ie23a(cur_network->IEs + - _FIXED_IE_LENGTH_, - cur_network->IELength - - _FIXED_IE_LENGTH_, &wps_ielen); + pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + cur_network->IEs + + _FIXED_IE_LENGTH_, + cur_network->IELength - + _FIXED_IE_LENGTH_); /* inerset & update wps_probe_resp_ie */ - if (pmlmepriv->wps_probe_resp_ie && pwps_ie && wps_ielen > 0) { + if (pmlmepriv->wps_probe_resp_ie && pwps_ie && pwps_ie[1] > 0) { uint wps_offset, remainder_ielen; - u8 *premainder_ie; + const u8 *premainder_ie; + wps_ielen = pwps_ie[1]; wps_offset = (uint)(pwps_ie - cur_network->IEs); premainder_ie = pwps_ie + wps_ielen; diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 68ee71bea415..e023e05cbb55 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -433,8 +433,8 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len); u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen); -u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); -u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); +const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); +const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); uint rtw_get_rateset_len23a(u8 *rateset); -- cgit From 9c40e1230ec57a8ff7261681feeec6cbe72bbfb2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:55 +0200 Subject: staging: rtl8723au: rtw_mlme.c: Convert rtw_get_wps_ie23a() to cfg80211_find_vendor_ie() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index f292fce8ad1f..0b9fd3a91598 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -588,19 +588,18 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter, struct mlme_priv *pmlmepriv = &adapter->mlmepriv; u32 desired_encmode; u32 privacy; - - /* u8 wps_ie[512]; */ - uint wps_ielen; - int bselected = true; desired_encmode = psecuritypriv->ndisencryptstatus; privacy = pnetwork->network.Privacy; if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) { - if (rtw_get_wps_ie23a(pnetwork->network.IEs + _FIXED_IE_LENGTH_, - pnetwork->network.IELength - - _FIXED_IE_LENGTH_, &wps_ielen)) + if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPA, + pnetwork->network.IEs + + _FIXED_IE_LENGTH_, + pnetwork->network.IELength - + _FIXED_IE_LENGTH_)) return true; else return false; -- cgit From d3797af488780e4f83d92ea0a3dc0a6381b566f3 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:56 +0200 Subject: staging: rtl8723au: ioctl_cfg80211.c: Convert rtw_get_wps_ie23a() to cfg80211_find_vendor_ie() Given that the IE len is stored in a u8, there is no point having a 512 buffer to store it, nor check if the size exceeds this size. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/ieee80211.h | 2 +- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 48 +++++++++++------------ 2 files changed, 24 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index e023e05cbb55..43ad669d3b2a 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -317,7 +317,7 @@ struct ieee80211_snap_hdr { #define MAX_CHANNEL_NUMBER 161 #define MAX_WPA_IE_LEN 256 -#define MAX_WPS_IE_LEN 512 +#define MAX_WPS_IE_LEN 256 #define MAX_P2P_IE_LEN 256 #define MAX_WFD_IE_LEN 128 diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 693310cc7c9b..d2fa9b20260d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1479,16 +1479,17 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter, char *buf, int len) { int ret = 0; - uint wps_ielen = 0; - u8 *wps_ie; + const u8 *wps_ie; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; DBG_8723A("%s, ielen =%d\n", __func__, len); if (len > 0) { - wps_ie = rtw_get_wps_ie23a(buf, len, &wps_ielen); + wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + buf, len); if (wps_ie) { - DBG_8723A("probe_req_wps_ielen =%d\n", wps_ielen); + DBG_8723A("probe_req_wps_ielen =%d\n", wps_ie[1]); if (pmlmepriv->wps_probe_req_ie) { pmlmepriv->wps_probe_req_ie_len = 0; @@ -1496,15 +1497,14 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter, pmlmepriv->wps_probe_req_ie = NULL; } - pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie, - wps_ielen, + pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie, wps_ie[1], GFP_KERNEL); if (pmlmepriv->wps_probe_req_ie == NULL) { DBG_8723A("%s()-%d: kmalloc() ERROR!\n", __func__, __LINE__); return -EINVAL; } - pmlmepriv->wps_probe_req_ie_len = wps_ielen; + pmlmepriv->wps_probe_req_ie_len = wps_ie[1]; } } @@ -1751,6 +1751,7 @@ static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, size_t ielen) { + const u8 *wps_ie; u8 *buf = NULL; int group_cipher = 0, pairwise_cipher = 0; int ret = 0; @@ -1882,22 +1883,17 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, break; } - { /* handle wps_ie */ - uint wps_ielen; - u8 *wps_ie; - - wps_ie = rtw_get_wps_ie23a(buf, ielen, &wps_ielen); - if (wps_ie && wps_ielen > 0) { - DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ielen); - padapter->securitypriv.wps_ie_len = - wps_ielen < - MAX_WPS_IE_LEN ? wps_ielen : MAX_WPS_IE_LEN; - memcpy(padapter->securitypriv.wps_ie, wps_ie, - padapter->securitypriv.wps_ie_len); - set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS); - } else { - _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS); - } + wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + buf, ielen); + if (wps_ie && wps_ie[1] > 0) { + DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ie[1]); + padapter->securitypriv.wps_ie_len = wps_ie[1]; + memcpy(padapter->securitypriv.wps_ie, wps_ie, + padapter->securitypriv.wps_ie_len); + set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS); + } else { + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS); } /* TKIP and AES disallow multicast packets until installing group key */ @@ -2825,8 +2821,10 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, len = head_len + tail_len - 24; /* check wps ie if inclued */ - if (rtw_get_wps_ie23a(pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_, - &wps_ielen)) + if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + pbuf + _FIXED_IE_LENGTH_, + len - _FIXED_IE_LENGTH_)) DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen); /* pbss_network->IEs will not include p2p_ie, wfd ie */ -- cgit From 715a8a749310e78d6ca34d85229407db7a7775ec Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:57 +0200 Subject: staging: rtl8723au: rtw_ap.c: Convert from rtw_get_wps_ie23a() to cfg80211_find_vendor_ie() Some of this is hackish, but so was the original code. This needs to be cleaned up eventually. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 976d4e430ca9..d03bb3eee4e2 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -660,9 +660,11 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) /* check if there is wps ie, */ /* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */ /* and at first time the security ie (RSN/WPA IE) will not include in beacon. */ - if (NULL == rtw_get_wps_ie23a(pnetwork->IEs + _FIXED_IE_LENGTH_, - pnetwork->IELength - _FIXED_IE_LENGTH_, - NULL)) + if (NULL == cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + pnetwork->IEs + _FIXED_IE_LENGTH_, + pnetwork->IELength - + _FIXED_IE_LENGTH_)) pmlmeext->bstart_bss = true; /* todo: update wmm, ht cap */ @@ -1226,7 +1228,8 @@ static void update_bcn_wmm_ie(struct rtw_adapter *padapter) static void update_bcn_wps_ie(struct rtw_adapter *padapter) { - u8 *pwps_ie = NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie = NULL; + const u8 *pwps_ie, *premainder_ie; + u8 *pwps_ie_src, *pbackup_remainder_ie = NULL; uint wps_ielen = 0, wps_offset, remainder_ielen; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; @@ -1241,12 +1244,15 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter) if (pwps_ie_src == NULL) return; - pwps_ie = rtw_get_wps_ie23a(ie + _FIXED_IE_LENGTH_, - ielen - _FIXED_IE_LENGTH_, &wps_ielen); + pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPS, + ie + _FIXED_IE_LENGTH_, + ielen - _FIXED_IE_LENGTH_); - if (pwps_ie == NULL || wps_ielen == 0) + if (pwps_ie == NULL || pwps_ie[1] == 0) return; + wps_ielen = pwps_ie[1]; wps_offset = (uint)(pwps_ie-ie); premainder_ie = pwps_ie + wps_ielen; @@ -1263,11 +1269,12 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter) wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */ if ((wps_offset+wps_ielen+2+remainder_ielen)<= MAX_IE_SZ) { - memcpy(pwps_ie, pwps_ie_src, wps_ielen+2); + memcpy(ie + wps_offset, pwps_ie_src, wps_ielen + 2); pwps_ie += (wps_ielen+2); if (pbackup_remainder_ie) - memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen); + memcpy(ie + wps_offset + wps_ielen + 2, + pbackup_remainder_ie, remainder_ielen); /* update IELength */ pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen; -- cgit From 4aea177681d809cb64ff97a3f10ed49780a9de99 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:58 +0200 Subject: staging: rtl8723au: Remove obsolete rtw_get_wps_ie23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 44 -------------------------- drivers/staging/rtl8723au/include/ieee80211.h | 1 - 2 files changed, 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index a1a27e214b5c..3dc9119c0694 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -696,50 +696,6 @@ int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, return *rsn_len + *wpa_len; } -/** - * rtw_get_wps_ie23a - Search WPS IE from a series of IEs - * @in_ie: Address of IEs to search - * @in_len: Length limit from in_ie - * @wps_ielen: If not NULL and WPS IE is found, will set to the length of - * the entire WPS IE - * - * Returns: The address of the WPS IE found, or NULL - */ -u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen) -{ - uint cnt; - u8 *wpsie_ptr = NULL; - u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; - - if (wps_ielen) - *wps_ielen = 0; - - if (!in_ie || in_len <= 0) - return wpsie_ptr; - - cnt = 0; - - while (cnt < in_len) { - eid = in_ie[cnt]; - - if (eid == WLAN_EID_VENDOR_SPECIFIC && - !memcmp(&in_ie[cnt+2], wps_oui, 4)) { - wpsie_ptr = &in_ie[cnt]; - - if (wps_ielen) - *wps_ielen = in_ie[cnt + 1] + 2; - - cnt += in_ie[cnt + 1] + 2; - - break; - } else { - cnt += in_ie[cnt + 1] + 2; /* goto next */ - } - } - - return wpsie_ptr; -} - /** * rtw_get_wps_attr23a - Search a specific WPS attribute from a given WPS IE * @wps_ie: Address of WPS IE to search diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 43ad669d3b2a..bb645cfa5a39 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -432,7 +432,6 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len); -u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen); const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); -- cgit From 6601e31fdf7100fa38910d2e05dfe00905cee2f3 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:11 +0200 Subject: staging: rtl8723au: Request correct firmware file for A-cut parts The filename requested by the driver didn't match what we had sitting in /lib/firmware/ Reported-by: Ben Hutchings Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index 0acacab95a48..46f5abcbaeeb 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -298,7 +298,7 @@ int rtl8723a_FirmwareDownload(struct rtw_adapter *padapter) RT_TRACE(_module_hal_init_c_, _drv_info_, ("+%s\n", __func__)); if (IS_8723A_A_CUT(pHalData->VersionID)) { - fw_name = "rtlwifi/rtl8723aufw.bin"; + fw_name = "rtlwifi/rtl8723aufw_A.bin"; RT_TRACE(_module_hal_init_c_, _drv_info_, ("rtl8723a_FirmwareDownload: R8723FwImageArray_UMC " "for RTL8723A A CUT\n")); -- cgit From 0c248b621b8b87a456558509d1cfc0d96d2d6860 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:12 +0200 Subject: staging: rtl8723au: Reference correct firmwarefiles with MODULE_FIRMWARE() Add missing firmware references, and request the correct one. Reported-by: Larry Finger Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/os_intfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index 4e32003a4437..1fb34386a4e5 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -29,7 +29,9 @@ MODULE_AUTHOR("Realtek Semiconductor Corp."); MODULE_AUTHOR("Larry Finger "); MODULE_AUTHOR("Jes Sorensen "); MODULE_VERSION(DRIVERVERSION); -MODULE_FIRMWARE("rtlwifi/rtl8821aefw.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8723aufw_A.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8723aufw_B.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8723aufw_B_NoBT.bin"); /* module param defaults */ static int rtw_chip_version = 0x00; -- cgit From da87dba81716adccec405470a76c8cc8b930aad8 Mon Sep 17 00:00:00 2001 From: Wahib Faizi Date: Thu, 12 Jun 2014 23:40:18 +0400 Subject: staging: usbip: usbip_host_driver.c: avoid assignment in if Fix coding style issue "do not use assignment in if condition" detected by checkpatch.pl in usbip_host_driver.c. Signed-off-by: Wahib Faizi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c index 92caef7474c7..32b8f52ace21 100644 --- a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c +++ b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c @@ -47,7 +47,8 @@ static int32_t read_attr_usbip_status(struct usbip_usb_device *udev) snprintf(status_attr_path, SYSFS_PATH_MAX, "%s/usbip_status", udev->path); - if ((fd = open(status_attr_path, O_RDONLY)) < 0) { + fd = open(status_attr_path, O_RDONLY); + if (fd < 0) { err("error opening attribute %s", status_attr_path); return -1; } -- cgit From 25da2290ea9cab53d7865b4aaa3d7a31f2a65a94 Mon Sep 17 00:00:00 2001 From: Wahib Faizi Date: Thu, 12 Jun 2014 23:40:19 +0400 Subject: staging: usbip: usbip_host_driver.c: fix line over 80 characters Fix coding style issue "line over 80 characters" detected by checkpatch.pl in usbip_host_driver.c. Signed-off-by: Wahib Faizi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c index 32b8f52ace21..bef08d5c44e8 100644 --- a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c +++ b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c @@ -88,8 +88,8 @@ struct usbip_exported_device *usbip_exported_device_new(const char *sdevpath) goto err; /* reallocate buffer to include usb interface data */ - size = sizeof(struct usbip_exported_device) + edev->udev.bNumInterfaces * - sizeof(struct usbip_usb_interface); + size = sizeof(struct usbip_exported_device) + + edev->udev.bNumInterfaces * sizeof(struct usbip_usb_interface); edev_old = edev; edev = realloc(edev, size); -- cgit From d54239a4856cf447a4ba0cbbb4b4f35f4715e4f4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:08 +0200 Subject: staging: rtl8723au: rtw_mlme_ext.c: Fix up some of the bad formatting Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 274 +++++++++++++++----------- 1 file changed, 160 insertions(+), 114 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 20e9b624dc60..7a117c00e010 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -107,12 +107,12 @@ static u8 null_addr[ETH_ALEN]= {0, 0, 0, 0, 0, 0}; OUI definitions for the vendor specific IE ***************************************************/ unsigned char WMM_OUI23A[] = {0x00, 0x50, 0xf2, 0x02}; -unsigned char WPS_OUI23A[] = {0x00, 0x50, 0xf2, 0x04}; -unsigned char P2P_OUI23A[] = {0x50, 0x6F, 0x9A, 0x09}; -unsigned char WFD_OUI23A[] = {0x50, 0x6F, 0x9A, 0x0A}; +unsigned char WPS_OUI23A[] = {0x00, 0x50, 0xf2, 0x04}; +unsigned char P2P_OUI23A[] = {0x50, 0x6F, 0x9A, 0x09}; +unsigned char WFD_OUI23A[] = {0x50, 0x6F, 0x9A, 0x0A}; -unsigned char WMM_INFO_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01}; -unsigned char WMM_PARA_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01}; +unsigned char WMM_INFO_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01}; +unsigned char WMM_PARA_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01}; static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20}; @@ -120,49 +120,87 @@ static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20}; MCS rate definitions *********************************************************/ unsigned char MCS_rate_2R23A[16] = { - 0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; + 0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; unsigned char MCS_rate_1R23A[16] = { - 0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; + 0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; /******************************************************** ChannelPlan definitions *********************************************************/ -static struct rt_channel_plan_2g RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = { - {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, /* 0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */ - {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, /* 0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */ - {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11}, /* 0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */ - {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14}, /* 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */ - {{10, 11, 12, 13}, 4}, /* 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */ - {{}, 0}, /* 0x05, RT_CHANNEL_DOMAIN_2G_NULL */ +static struct rt_channel_plan_2g RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = { + /* 0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */ + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, + /* 0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */ + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, + /* 0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */ + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11}, + /* 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */ + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14}, + /* 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */ + {{10, 11, 12, 13}, 4}, + /* 0x05, RT_CHANNEL_DOMAIN_2G_NULL */ + {{}, 0}, }; -static struct rt_channel_plan_5g RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = { - {{}, 0}, /* 0x00, RT_CHANNEL_DOMAIN_5G_NULL */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 19}, /* 0x01, RT_CHANNEL_DOMAIN_5G_ETSI1 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, /* 0x02, RT_CHANNEL_DOMAIN_5G_ETSI2 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 149, 153, 157, 161, 165}, 22}, /* 0x03, RT_CHANNEL_DOMAIN_5G_ETSI3 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, /* 0x04, RT_CHANNEL_DOMAIN_5G_FCC1 */ - {{36, 40, 44, 48, 149, 153, 157, 161, 165}, 9}, /* 0x05, RT_CHANNEL_DOMAIN_5G_FCC2 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 13}, /* 0x06, RT_CHANNEL_DOMAIN_5G_FCC3 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161}, 12}, /* 0x07, RT_CHANNEL_DOMAIN_5G_FCC4 */ - {{149, 153, 157, 161, 165}, 5}, /* 0x08, RT_CHANNEL_DOMAIN_5G_FCC5 */ - {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, /* 0x09, RT_CHANNEL_DOMAIN_5G_FCC6 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}, 20}, /* 0x0A, RT_CHANNEL_DOMAIN_5G_FCC7_IC1 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 149, 153, 157, 161, 165}, 20}, /* 0x0B, RT_CHANNEL_DOMAIN_5G_KCC1 */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 19}, /* 0x0C, RT_CHANNEL_DOMAIN_5G_MKK1 */ - {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, /* 0x0D, RT_CHANNEL_DOMAIN_5G_MKK2 */ - {{100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 11}, /* 0x0E, RT_CHANNEL_DOMAIN_5G_MKK3 */ - {{56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}, 15}, /* 0x0F, RT_CHANNEL_DOMAIN_5G_NCC1 */ - {{56, 60, 64, 149, 153, 157, 161, 165}, 8}, /* 0x10, RT_CHANNEL_DOMAIN_5G_NCC2 */ - - /* Driver self defined for old channel plan Compatible , Remember to modify if have new channel plan definition ===== */ - {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165}, 21}, /* 0x11, RT_CHANNEL_DOMAIN_5G_FCC */ - {{36, 40, 44, 48}, 4}, /* 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS */ - {{36, 40, 44, 48, 149, 153, 157, 161}, 8}, /* 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS */ +static struct rt_channel_plan_5g RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = { + /* 0x00, RT_CHANNEL_DOMAIN_5G_NULL */ + {{}, 0}, + /* 0x01, RT_CHANNEL_DOMAIN_5G_ETSI1 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 128, 132, 136, 140}, 19}, + /* 0x02, RT_CHANNEL_DOMAIN_5G_ETSI2 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, + /* 0x03, RT_CHANNEL_DOMAIN_5G_ETSI3 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 128, 132, 149, 153, 157, 161, 165}, 22}, + /* 0x04, RT_CHANNEL_DOMAIN_5G_FCC1 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, + /* 0x05, RT_CHANNEL_DOMAIN_5G_FCC2 */ + {{36, 40, 44, 48, 149, 153, 157, 161, 165}, 9}, + /* 0x06, RT_CHANNEL_DOMAIN_5G_FCC3 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 13}, + /* 0x07, RT_CHANNEL_DOMAIN_5G_FCC4 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161}, 12}, + /* 0x08, RT_CHANNEL_DOMAIN_5G_FCC5 */ + {{149, 153, 157, 161, 165}, 5}, + /* 0x09, RT_CHANNEL_DOMAIN_5G_FCC6 */ + {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, + /* 0x0A, RT_CHANNEL_DOMAIN_5G_FCC7_IC1 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 136, 140, 149, 153, 157, 161, 165}, 20}, + /* 0x0B, RT_CHANNEL_DOMAIN_5G_KCC1 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 149, 153, 157, 161, 165}, 20}, + /* 0x0C, RT_CHANNEL_DOMAIN_5G_MKK1 */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 120, 124, 128, 132, 136, 140}, 19}, + /* 0x0D, RT_CHANNEL_DOMAIN_5G_MKK2 */ + {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, + /* 0x0E, RT_CHANNEL_DOMAIN_5G_MKK3 */ + {{100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 11}, + /* 0x0F, RT_CHANNEL_DOMAIN_5G_NCC1 */ + {{56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, + 153, 157, 161, 165}, 15}, + /* 0x10, RT_CHANNEL_DOMAIN_5G_NCC2 */ + {{56, 60, 64, 149, 153, 157, 161, 165}, 8}, + + /* Driver self defined for old channel plan Compatible, + Remember to modify if have new channel plan definition ===== */ + /* 0x11, RT_CHANNEL_DOMAIN_5G_FCC */ + {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, + 116, 132, 136, 140, 149, 153, 157, 161, 165}, 21}, + /* 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS */ + {{36, 40, 44, 48}, 4}, + /* 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS */ + {{36, 40, 44, 48, 149, 153, 157, 161}, 8}, }; -static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = { +static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = { /* 0x00 ~ 0x1F , Old Define ===== */ {0x02, 0x11}, /* 0x00, RT_CHANNEL_DOMAIN_FCC */ {0x02, 0x0A}, /* 0x01, RT_CHANNEL_DOMAIN_IC */ @@ -233,7 +271,8 @@ static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = { {0x03, 0x00}, /* 0x41, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G */ }; -static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03, 0x02}; /* use the conbination for max channel numbers */ +static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = +{0x03, 0x02}; /* use the conbination for max channel numbers */ static void dummy_event_callback(struct rtw_adapter *adapter, const u8 *pbuf) { @@ -250,8 +289,7 @@ static struct fwevent wlanevents[] = {0, NULL}, {0, NULL}, {0, &rtw_survey_event_cb23a}, /*8*/ - {sizeof (struct surveydone_event), &rtw_surveydone_event_callback23a}, /*9*/ - + {sizeof (struct surveydone_event), &rtw_surveydone_event_callback23a}, {0, &rtw23a_joinbss_event_cb}, /*10*/ {sizeof(struct stassoc_event), &rtw_stassoc_event_callback23a}, {sizeof(struct stadel_event), &rtw_stadel_event_callback23a}, @@ -309,7 +347,7 @@ Following are the initialization functions for WiFi MLME int init_hw_mlme_ext23a(struct rtw_adapter *padapter) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); @@ -318,7 +356,7 @@ int init_hw_mlme_ext23a(struct rtw_adapter *padapter) static void init_mlme_ext_priv23a_value(struct rtw_adapter* padapter) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; unsigned char mixed_datarate[NumRates] = { _1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_, @@ -391,8 +429,8 @@ static int has_channel(struct rt_channel_info *channel_set, static void init_channel_list(struct rtw_adapter *padapter, struct rt_channel_info *channel_set, u8 chanset_size, - struct p2p_channels *channel_list) { - + struct p2p_channels *channel_list) +{ struct p2p_oper_class_map op_class[] = { { IEEE80211G, 81, 1, 13, 1, BW20 }, { IEEE80211G, 82, 14, 14, 1, BW20 }, @@ -526,7 +564,7 @@ static u8 init_channel_set(struct rtw_adapter* padapter, u8 cplan, int init_mlme_ext_priv23a(struct rtw_adapter* padapter) { - int res = _SUCCESS; + int res = _SUCCESS; struct registry_priv* pregistrypriv = &padapter->registrypriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -1920,7 +1958,7 @@ OnDeAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) static int OnDisassoc23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) { - unsigned short reason; + unsigned short reason; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -2835,17 +2873,17 @@ static int _issue_probereq(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, u8 *da, int wait_ack) { int ret = _FAIL; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; - unsigned char *mac; - unsigned char bssrate[NumRates]; + struct xmit_frame *pmgntframe; + struct pkt_attrib *pattrib; + unsigned char *pframe; + struct ieee80211_hdr *pwlanhdr; + unsigned char *mac; + unsigned char bssrate[NumRates]; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - int bssrate_len = 0; - u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + int bssrate_len = 0; + u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, ("+%s\n", __func__)); @@ -4297,7 +4335,7 @@ int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr) struct sta_priv *pstapriv = &padapter->stapriv; struct sta_info *psta = NULL; /* struct recv_reorder_ctrl *preorder_ctrl; */ - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; u16 tid; @@ -4334,8 +4372,8 @@ int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr) int send_beacon23a(struct rtw_adapter *padapter) { - bool bxmitok; - int issue = 0; + bool bxmitok; + int issue = 0; int poll = 0; unsigned long start = jiffies; unsigned int passing_time; @@ -4383,9 +4421,10 @@ bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel) int i = 0; u8 Channel_5G[45] = {36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, - 60, 62, 64, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, - 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, 155, 157, 159, - 161, 163, 165}; + 60, 62, 64, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, + 134, 136, 138, 140, 149, 151, 153, 155, 157, 159, + 161, 163, 165}; for (i = 0; i < sizeof(Channel_5G); i++) if (channel == Channel_5G[i]) return true; @@ -4396,7 +4435,7 @@ static void rtw_site_survey(struct rtw_adapter *padapter) { unsigned char survey_channel = 0; enum rt_scan_type ScanType = SCAN_PASSIVE; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct rtw_ieee80211_channel *ch; @@ -4659,8 +4698,8 @@ int collect_bss_info23a(struct rtw_adapter *padapter, static void start_create_ibss(struct rtw_adapter* padapter) { - unsigned short caps; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + unsigned short caps; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; pmlmeext->cur_channel = (u8)pnetwork->DSConfig; @@ -4711,9 +4750,9 @@ static void start_create_ibss(struct rtw_adapter* padapter) static void start_clnt_join(struct rtw_adapter* padapter) { - unsigned short caps; - u8 val8; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + unsigned short caps; + u8 val8; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; int beacon_timeout; @@ -4771,7 +4810,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) static void start_clnt_auth(struct rtw_adapter* padapter) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; del_timer_sync(&pmlmeext->link_timer); @@ -4789,8 +4828,10 @@ static void start_clnt_auth(struct rtw_adapter* padapter) /* AP may: 1)not response auth or 2)deauth us after link is complete */ /* issue deauth before issuing auth to deal with the situation */ /* Commented by Albert 2012/07/21 */ - /* For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it. */ - issue_deauth23a(padapter, (&pmlmeinfo->network)->MacAddress, WLAN_REASON_DEAUTH_LEAVING); + /* For the Win8 P2P connection, it will be hard to have a + successful connection if this Wi-Fi doesn't connect to it. */ + issue_deauth23a(padapter, (&pmlmeinfo->network)->MacAddress, + WLAN_REASON_DEAUTH_LEAVING); DBG_8723A_LEVEL(_drv_always_, "start auth\n"); issue_auth(padapter, NULL, 0); @@ -4800,7 +4841,7 @@ static void start_clnt_auth(struct rtw_adapter* padapter) static void start_clnt_assoc(struct rtw_adapter* padapter) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; del_timer_sync(&pmlmeext->link_timer); @@ -4816,7 +4857,7 @@ static void start_clnt_assoc(struct rtw_adapter* padapter) int receive_disconnect23a(struct rtw_adapter *padapter, unsigned char *MacAddr, unsigned short reason) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; /* check A3 */ @@ -5074,12 +5115,13 @@ Following are the functions to report events *****************************************************************************/ -void report_survey_event23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) +void report_survey_event23a(struct rtw_adapter *padapter, + struct recv_frame *precv_frame) { struct cmd_obj *pcmd_obj; - u8 *pevtcmd; + u8 *pevtcmd; u32 cmdsz; - struct survey_event *psurvey_evt; + struct survey_event *psurvey_evt; struct C2HEvent_Header *pc2h_evt_hdr; struct mlme_ext_priv *pmlmeext; struct cmd_priv *pcmdpriv; @@ -5134,11 +5176,11 @@ void report_survey_event23a(struct rtw_adapter *padapter, struct recv_frame *pre void report_surveydone_event23a(struct rtw_adapter *padapter) { struct cmd_obj *pcmd_obj; - u8 *pevtcmd; + u8 *pevtcmd; u32 cmdsz; struct surveydone_event *psurveydone_evt; - struct C2HEvent_Header *pc2h_evt_hdr; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct C2HEvent_Header *pc2h_evt_hdr; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), @@ -5178,7 +5220,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter) void report_join_res23a(struct rtw_adapter *padapter, int res) { struct cmd_obj *pcmd_obj; - u8 *pevtcmd; + u8 *pevtcmd; u32 cmdsz; struct joinbss_event *pjoinbss_evt; struct C2HEvent_Header *pc2h_evt_hdr; @@ -5224,16 +5266,17 @@ void report_join_res23a(struct rtw_adapter *padapter, int res) return; } -void report_del_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAddr, unsigned short reason) +void report_del_sta_event23a(struct rtw_adapter *padapter, + unsigned char* MacAddr, unsigned short reason) { struct cmd_obj *pcmd_obj; - u8 *pevtcmd; + u8 *pevtcmd; u32 cmdsz; struct sta_info *psta; - int mac_id; - struct stadel_event *pdel_sta_evt; - struct C2HEvent_Header *pc2h_evt_hdr; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + int mac_id; + struct stadel_event *pdel_sta_evt; + struct C2HEvent_Header *pc2h_evt_hdr; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), @@ -5280,14 +5323,15 @@ void report_del_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAdd return; } -void report_add_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAddr, int cam_idx) +void report_add_sta_event23a(struct rtw_adapter *padapter, + unsigned char* MacAddr, int cam_idx) { struct cmd_obj *pcmd_obj; - u8 *pevtcmd; + u8 *pevtcmd; u32 cmdsz; - struct stassoc_event *padd_sta_evt; - struct C2HEvent_Header *pc2h_evt_hdr; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct stassoc_event *padd_sta_evt; + struct C2HEvent_Header *pc2h_evt_hdr; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), @@ -5335,8 +5379,8 @@ Following are the event callback functions void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; /* ERP */ VCS_update23a(padapter, psta); @@ -5377,13 +5421,14 @@ void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta) psta->state = _FW_LINKED; } -void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, int join_res) +void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, + int join_res) { - struct sta_info *psta, *psta_bmc; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct sta_info *psta, *psta_bmc; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *cur_network = &pmlmeinfo->network; - struct sta_priv *pstapriv = &padapter->stapriv; + struct sta_priv *pstapriv = &padapter->stapriv; if (join_res < 0) { hw_var_set_mlme_join(padapter, 1); @@ -5459,7 +5504,8 @@ exit_mlmeext_joinbss_event_callback23a: DBG_8723A("=>%s\n", __func__); } -void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, struct sta_info *psta) +void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, + struct sta_info *psta) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -5732,7 +5778,7 @@ static void link_timer_hdl(unsigned long data) /* static unsigned int rx_pkt = 0; */ /* static u64 tx_cnt = 0; */ /* struct xmit_priv *pxmitpriv = &padapter->xmitpriv; */ - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; /* struct sta_priv *pstapriv = &padapter->stapriv; */ @@ -5779,7 +5825,7 @@ static void link_timer_hdl(unsigned long data) static void addba_timer_hdl(unsigned long data) { struct sta_info *psta = (struct sta_info *)data; - struct ht_priv *phtpriv; + struct ht_priv *phtpriv; if (!psta) return; @@ -5800,7 +5846,7 @@ void init_addba_retry_timer23a(struct sta_info *psta) void init_mlme_ext_timer23a(struct rtw_adapter *padapter) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; setup_timer(&pmlmeext->survey_timer, survey_timer_hdl, (unsigned long)padapter); @@ -5851,7 +5897,7 @@ int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) { - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf; @@ -6069,7 +6115,7 @@ int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) rtw_free_uc_swdec_pending_queue23a(padapter); - return H2C_SUCCESS; + return H2C_SUCCESS; } static int @@ -6080,7 +6126,7 @@ rtw_scan_ch_decision(struct rtw_adapter *padapter, int i, j; int scan_ch_num = 0; int set_idx; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; /* clear out first */ memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num); @@ -6233,7 +6279,7 @@ int setauth_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) if (pparm->mode < 4) pmlmeinfo->auth_algo = pparm->mode; - return H2C_SUCCESS; + return H2C_SUCCESS; } int setkey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) @@ -6358,7 +6404,7 @@ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) psta = rtw_get_stainfo23a(&padapter->stapriv, pparm->addr); if (!psta) - return H2C_SUCCESS; + return H2C_SUCCESS; if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && pmlmeinfo->HT_enable) || @@ -6370,15 +6416,15 @@ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) } else psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid); - return H2C_SUCCESS; + return H2C_SUCCESS; } int set_tx_beacon_cmd23a(struct rtw_adapter* padapter) { struct cmd_obj *ph2c; - struct Tx_Beacon_param *ptxBeacon_parm; + struct Tx_Beacon_param *ptxBeacon_parm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; u8 res = _SUCCESS; int len_diff = 0; @@ -6518,7 +6564,7 @@ int tx_beacon_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) { const struct set_ch_parm *set_ch_parm; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; if (!pbuf) return H2C_PARAMETERS_ERROR; @@ -6536,13 +6582,13 @@ int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) set_channel_bwmode23a(padapter, set_ch_parm->ch, set_ch_parm->ch_offset, set_ch_parm->bw); - return H2C_SUCCESS; + return H2C_SUCCESS; } int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) { const struct SetChannelPlan_param *setChannelPlan_param; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; if (!pbuf) return H2C_PARAMETERS_ERROR; @@ -6555,7 +6601,7 @@ int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list); - return H2C_SUCCESS; + return H2C_SUCCESS; } int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) @@ -6567,12 +6613,12 @@ int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) ledBlink_param = (struct LedBlink_param *)pbuf; - return H2C_SUCCESS; + return H2C_SUCCESS; } int set_csa_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) { - return H2C_REJECTED; + return H2C_REJECTED; } /* TDLS_WRCR : write RCR DATA BIT */ -- cgit From 8b3d9cde7d8a50ae7bf7902cbf966adf856350d1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:09 +0200 Subject: staging: rtl8723au: rtw_mlme.c: Remove some tab and parenthesis abuse Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 0b9fd3a91598..47a1df013d46 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -29,7 +29,7 @@ static void rtw_init_mlme_timer(struct rtw_adapter *padapter) { - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; setup_timer(&pmlmepriv->assoc_timer, rtw23a_join_to_handler, (unsigned long)padapter); @@ -369,11 +369,10 @@ int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst) return ((src->Ssid.ssid_len == dst->Ssid.ssid_len) && /* (src->DSConfig == dst->DSConfig) && */ ether_addr_equal(src->MacAddress, dst->MacAddress) && - ((!memcmp(src->Ssid.ssid, dst->Ssid.ssid, src->Ssid.ssid_len))) && - ((s_cap & WLAN_CAPABILITY_IBSS) == - (d_cap & WLAN_CAPABILITY_IBSS)) && - ((s_cap & WLAN_CAPABILITY_ESS) == - (d_cap & WLAN_CAPABILITY_ESS))); + !memcmp(src->Ssid.ssid, dst->Ssid.ssid, src->Ssid.ssid_len) && + (s_cap & WLAN_CAPABILITY_IBSS) == + (d_cap & WLAN_CAPABILITY_IBSS) && + (s_cap & WLAN_CAPABILITY_ESS) == (d_cap & WLAN_CAPABILITY_ESS)); } struct wlan_network * @@ -611,8 +610,7 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter, bselected = false; } - if (desired_encmode != Ndis802_11EncryptionDisabled && - privacy == 0) { + if (desired_encmode != Ndis802_11EncryptionDisabled && privacy == 0) { DBG_8723A("desired_encmode: %d, privacy: %d\n", desired_encmode, privacy); bselected = false; @@ -639,7 +637,7 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) { u32 len; struct wlan_bssid_ex *pnetwork; - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; pnetwork = (struct wlan_bssid_ex *)pbuf; @@ -698,7 +696,7 @@ exit: void rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) { - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; struct wlan_bssid_ex *pdev_network; u8 *pibss; @@ -937,7 +935,7 @@ void rtw_indicate_connect23a(struct rtw_adapter *padapter) */ void rtw_indicate_disconnect23a(struct rtw_adapter *padapter) { - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("+rtw_indicate_disconnect23a\n")); @@ -1538,12 +1536,12 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) void rtw23a_join_to_handler (unsigned long data) { struct rtw_adapter *adapter = (struct rtw_adapter *)data; - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; int do_join_r; DBG_8723A("%s, fw_state=%x\n", __func__, get_fwstate(pmlmepriv)); - if (adapter->bDriverStopped ||adapter->bSurpriseRemoved) + if (adapter->bDriverStopped || adapter->bSurpriseRemoved) return; spin_lock_bh(&pmlmepriv->lock); @@ -1589,7 +1587,7 @@ void rtw23a_join_to_handler (unsigned long data) void rtw_scan_timeout_handler23a(unsigned long data) { struct rtw_adapter *adapter = (struct rtw_adapter *)data; - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; DBG_8723A("%s(%s): fw_state =%x\n", __func__, adapter->pnetdev->name, get_fwstate(pmlmepriv)); -- cgit From 198e95d548ac741e91521f1e638aa8221bb0f468 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:10 +0200 Subject: staging: rtl8723au: Use struct ieee80211_mcs_info to describe MCS information The original RTL code defined the MCS information as a 16 byte array and blindly applied it's masking over the full array, ignoring the fact that only the first 10 bytes describe the rx_mask and the rest are different fields. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 52 +++++++++++++------------- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +-- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 +- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 12 +++--- drivers/staging/rtl8723au/include/ieee80211.h | 3 +- drivers/staging/rtl8723au/include/wifi.h | 2 +- 7 files changed, 40 insertions(+), 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 3dc9119c0694..47ac4e917f2d 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -924,69 +924,69 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) /* show MCS rate, unit: 100Kbps */ u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, - unsigned char * MCS_rate) + struct ieee80211_mcs_info *mcs) { u16 max_rate = 0; if (rf_type == RF_1T1R) { - if (MCS_rate[0] & BIT(7)) + if (mcs->rx_mask[0] & BIT(7)) max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350): ((short_GI_20)?722:650); - else if (MCS_rate[0] & BIT(6)) + else if (mcs->rx_mask[0] & BIT(6)) max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215): ((short_GI_20)?650:585); - else if (MCS_rate[0] & BIT(5)) + else if (mcs->rx_mask[0] & BIT(5)) max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080): ((short_GI_20)?578:520); - else if (MCS_rate[0] & BIT(4)) + else if (mcs->rx_mask[0] & BIT(4)) max_rate = (bw_40MHz) ? ((short_GI_40)?900:810): ((short_GI_20)?433:390); - else if (MCS_rate[0] & BIT(3)) + else if (mcs->rx_mask[0] & BIT(3)) max_rate = (bw_40MHz) ? ((short_GI_40)?600:540): ((short_GI_20)?289:260); - else if (MCS_rate[0] & BIT(2)) + else if (mcs->rx_mask[0] & BIT(2)) max_rate = (bw_40MHz) ? ((short_GI_40)?450:405): ((short_GI_20)?217:195); - else if (MCS_rate[0] & BIT(1)) + else if (mcs->rx_mask[0] & BIT(1)) max_rate = (bw_40MHz) ? ((short_GI_40)?300:270): ((short_GI_20)?144:130); - else if (MCS_rate[0] & BIT(0)) + else if (mcs->rx_mask[0] & BIT(0)) max_rate = (bw_40MHz) ? ((short_GI_40)?150:135): ((short_GI_20)?72:65); } else { - if (MCS_rate[1]) { - if (MCS_rate[1] & BIT(7)) + if (mcs->rx_mask[1]) { + if (mcs->rx_mask[1] & BIT(7)) max_rate = (bw_40MHz) ? ((short_GI_40)?3000:2700):((short_GI_20)?1444:1300); - else if (MCS_rate[1] & BIT(6)) + else if (mcs->rx_mask[1] & BIT(6)) max_rate = (bw_40MHz) ? ((short_GI_40)?2700:2430):((short_GI_20)?1300:1170); - else if (MCS_rate[1] & BIT(5)) + else if (mcs->rx_mask[1] & BIT(5)) max_rate = (bw_40MHz) ? ((short_GI_40)?2400:2160):((short_GI_20)?1156:1040); - else if (MCS_rate[1] & BIT(4)) + else if (mcs->rx_mask[1] & BIT(4)) max_rate = (bw_40MHz) ? ((short_GI_40)?1800:1620):((short_GI_20)?867:780); - else if (MCS_rate[1] & BIT(3)) + else if (mcs->rx_mask[1] & BIT(3)) max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520); - else if (MCS_rate[1] & BIT(2)) + else if (mcs->rx_mask[1] & BIT(2)) max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390); - else if (MCS_rate[1] & BIT(1)) + else if (mcs->rx_mask[1] & BIT(1)) max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260); - else if (MCS_rate[1] & BIT(0)) + else if (mcs->rx_mask[1] & BIT(0)) max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130); } else { - if (MCS_rate[0] & BIT(7)) + if (mcs->rx_mask[0] & BIT(7)) max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650); - else if (MCS_rate[0] & BIT(6)) + else if (mcs->rx_mask[0] & BIT(6)) max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585); - else if (MCS_rate[0] & BIT(5)) + else if (mcs->rx_mask[0] & BIT(5)) max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520); - else if (MCS_rate[0] & BIT(4)) + else if (mcs->rx_mask[0] & BIT(4)) max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390); - else if (MCS_rate[0] & BIT(3)) + else if (mcs->rx_mask[0] & BIT(3)) max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260); - else if (MCS_rate[0] & BIT(2)) + else if (mcs->rx_mask[0] & BIT(2)) max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195); - else if (MCS_rate[0] & BIT(1)) + else if (mcs->rx_mask[0] & BIT(1)) max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130); - else if (MCS_rate[0] & BIT(0)) + else if (mcs->rx_mask[0] & BIT(0)) max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65); } } diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index cf897c723f4a..30474f513b86 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -406,7 +406,7 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & pregistrypriv->cbw40_enable, short_GI_20, short_GI_40, - pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate + &pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info ); } } else { diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 47a1df013d46..ab59ab72d041 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2328,11 +2328,11 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) rf_type = rtl8723a_get_rf_type(padapter); /* update the MCS rates */ - for (i = 0; i < 16; i++) { + for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) { if (rf_type == RF_1T1R || rf_type == RF_1T2R) - pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R23A[i]; + pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i]; else - pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R23A[i]; + pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i]; } /* switch to the 40M Hz mode accoring to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 7a117c00e010..6249ab2cf8f1 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3498,7 +3498,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) if (pregpriv->rx_stbc) pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100); - memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R23A, 16); + memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_1R23A, 16); break; case RF_2T2R: @@ -3519,7 +3519,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) "STBC\n"); pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */ } - memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R23A, 16); + memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_2R23A, 16); break; } pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 579a4a8c8276..b63248bd7f8d 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -762,13 +762,11 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p) rf_type = rtl8723a_get_rf_type(padapter); /* update the MCS rates */ - for (i = 0; i < 16; i++) { + for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) { if (rf_type == RF_1T1R || rf_type == RF_1T2R) - pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= - MCS_rate_1R23A[i]; + pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i]; else - pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= - MCS_rate_2R23A[i]; + pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i]; } return; } @@ -1344,8 +1342,8 @@ unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps) { unsigned int mask = 0; - mask = pHT_caps->u.HT_cap_element.MCS_rate[0] << 12 | - pHT_caps->u.HT_cap_element.MCS_rate[1] << 20; + mask = pHT_caps->u.HT_cap_element.mcs_info.rx_mask[0] << 12 | + pHT_caps->u.HT_cap_element.mcs_info.rx_mask[1] << 20; return mask; } diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index bb645cfa5a39..6f42d2db9ea1 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -447,7 +447,8 @@ int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel); void rtw_get_bcn_info23a(struct wlan_network *pnetwork); -u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate); +u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, + struct ieee80211_mcs_info *mcs); const char *action_public_str23a(u8 action); diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index cccea6a50b3a..f731833566ba 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -81,7 +81,7 @@ struct HT_caps_element { struct { unsigned short HT_caps_info; unsigned char AMPDU_para; - unsigned char MCS_rate[16]; + struct ieee80211_mcs_info mcs_info; unsigned short HT_ext_caps; unsigned int Beamforming_caps; unsigned char ASEL_caps; -- cgit From 65be27da4953163c638a006542d279f5b1f346ea Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:11 +0200 Subject: staging: rtl8723au: Use struct ieee80211_ht_cap and associated #defines Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 9 ++-- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 11 ++-- drivers/staging/rtl8723au/core/rtw_mlme.c | 14 +++-- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 42 ++++++++------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 60 ++++++++++++---------- .../staging/rtl8723au/hal/rtl8723a_bt-coexist.c | 4 +- drivers/staging/rtl8723au/hal/usb_halinit.c | 4 +- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 6 +-- drivers/staging/rtl8723au/include/wifi.h | 14 ----- 9 files changed, 84 insertions(+), 80 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index d03bb3eee4e2..83be27fdea9b 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -623,15 +623,18 @@ static void update_hw_ht_param(struct rtw_adapter *padapter) AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k AMPDU_para [4:2]:Min MPDU Start Spacing */ - max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03; + max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_FACTOR; - min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2; + min_MPDU_spacing = (pmlmeinfo->ht_cap.ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2; rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing); rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len); /* Config SM Power Save setting */ - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2; + pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) & + IEEE80211_HT_CAP_SM_PS) >> 2; if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC) DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__); } diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 30474f513b86..e9f46a688895 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -399,15 +399,18 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ - short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0; - short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0; + short_GI_20 = + (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0; + short_GI_40 = + (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0; rf_type = rtl8723a_get_rf_type(adapter); max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & pregistrypriv->cbw40_enable, short_GI_20, short_GI_40, - &pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info - ); + &pmlmeinfo->ht_cap.mcs); } } else { while ((pcur_bss->SupportedRates[i] != 0) && diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index ab59ab72d041..19b891f9b55b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2320,7 +2320,8 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) /* update cur_bwmode & cur_ch_offset */ if (pregistrypriv->cbw40_enable && - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1) && + pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40) && pmlmeinfo->HT_info.infos[0] & BIT(2)) { int i; u8 rf_type; @@ -2330,9 +2331,11 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) /* update the MCS rates */ for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) { if (rf_type == RF_1T1R || rf_type == RF_1T2R) - pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i]; + pmlmeinfo->ht_cap.mcs.rx_mask[i] &= + MCS_rate_1R23A[i]; else - pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i]; + pmlmeinfo->ht_cap.mcs.rx_mask[i] &= + MCS_rate_2R23A[i]; } /* switch to the 40M Hz mode accoring to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; @@ -2356,8 +2359,9 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) /* */ /* Config SM Power Save setting */ /* */ - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & - 0x0C) >> 2; + pmlmeinfo->SM_PS = + (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) & + IEEE80211_HT_CAP_SM_PS) >> IEEE80211_HT_CAP_SM_PS_SHIFT; if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC) DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 6249ab2cf8f1..b5f1d40eea07 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3476,19 +3476,22 @@ static void issue_assocreq(struct rtw_adapter *padapter) p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len); if (p && !is_ap_in_tkip23a(padapter)) { - memcpy(&pmlmeinfo->HT_caps, p + 2, - sizeof(struct HT_caps_element)); + struct ieee80211_ht_cap *cap = &pmlmeinfo->ht_cap; + + memcpy(cap, p + 2, sizeof(struct ieee80211_ht_cap)); /* to disable 40M Hz support while gd_bw_40MHz_en = 0 */ if (pregpriv->cbw40_enable == 0) { - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1))); + cap->cap_info &= ~cpu_to_le16( + IEEE80211_HT_CAP_SGI_40 | + IEEE80211_HT_CAP_SUP_WIDTH_20_40); } else { - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= BIT(1); + cap->cap_info |= cpu_to_le16( + IEEE80211_HT_CAP_SUP_WIDTH_20_40); } /* todo: disable SM power save mode */ - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= - 0x000c; + cap->cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SM_PS); rf_type = rtl8723a_get_rf_type(padapter); /* switch (pregpriv->rf_config) */ @@ -3496,9 +3499,9 @@ static void issue_assocreq(struct rtw_adapter *padapter) case RF_1T1R: /* RX STBC One spatial stream */ if (pregpriv->rx_stbc) - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100); + cap->cap_info |= cpu_to_le16(1 << IEEE80211_HT_CAP_RX_STBC_SHIFT); - memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_1R23A, 16); + memcpy(&cap->mcs, MCS_rate_1R23A, 16); break; case RF_2T2R: @@ -3517,23 +3520,23 @@ static void issue_assocreq(struct rtw_adapter *padapter) pregpriv->wifi_spec == 1) { DBG_8723A("declare supporting RX " "STBC\n"); - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */ + /* RX STBC two spatial stream */ + cap->cap_info |= cpu_to_le16(2 << IEEE80211_HT_CAP_RX_STBC_SHIFT); } - memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_2R23A, 16); + memcpy(&cap->mcs, MCS_rate_2R23A, 16); break; } - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = - cpu_to_le16(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info); if (rtl8723a_BT_coexist(padapter) && rtl8723a_BT_using_antenna_1(padapter)) { /* set to 8K */ - pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para &= (u8)~IEEE80211_HT_AMPDU_PARM_FACTOR; -/* pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para |= MAX_AMPDU_FACTOR_8K */ + cap->ampdu_params_info &= + ~IEEE80211_HT_AMPDU_PARM_FACTOR; +/* cap->ampdu_params_info |= MAX_AMPDU_FACTOR_8K */ } pframe = rtw_set_ie23a(pframe, WLAN_EID_HT_CAPABILITY, - p[1], (u8 *)&pmlmeinfo->HT_caps, + p[1], (u8 *)&pmlmeinfo->ht_cap, &pattrib->pktlen); } } @@ -4679,10 +4682,11 @@ int collect_bss_info23a(struct rtw_adapter *padapter, bssid->IEs + ie_offset, bssid->IELength - ie_offset); if (p && p[1] > 0) { - struct HT_caps_element *pHT_caps; - pHT_caps = (struct HT_caps_element *)(p + 2); + struct ieee80211_ht_cap *pHT_caps; + pHT_caps = (struct ieee80211_ht_cap *)(p + 2); - if (pHT_caps->u.HT_cap_element.HT_caps_info & BIT(14)) + if (pHT_caps->cap_info & + cpu_to_le16(IEEE80211_HT_CAP_40MHZ_INTOLERANT)) pmlmepriv->num_FortyMHzIntolerant++; } else pmlmepriv->num_sta_no_ht++; @@ -5392,7 +5396,7 @@ void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta) psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable; - if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps)) + if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap)) psta->htpriv.sgi = true; psta->qos_option = true; diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index b63248bd7f8d..1194a6e5be42 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -720,6 +720,8 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct ht_priv *phtpriv = &pmlmepriv->htpriv; + struct ieee80211_ht_cap *cap; + u8 *dstcap; if (!p) return; @@ -729,44 +731,44 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p) pmlmeinfo->HT_caps_enable = 1; + cap = &pmlmeinfo->ht_cap; + dstcap = (u8 *)cap; for (i = 0; i < p[1]; i++) { if (i != 2) { - /* Commented by Albert 2010/07/12 */ - /* Got the endian issue here. */ - pmlmeinfo->HT_caps.u.HT_cap[i] &= p[i + 2]; + dstcap[i] &= p[i + 2]; } else { /* modify from fw by Thomas 2010/11/17 */ - if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3) > (p[i + 2] & 0x3)) - max_AMPDU_len = p[i + 2] & 0x3; + if ((cap->ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_FACTOR) > + (p[i + 2] & IEEE80211_HT_AMPDU_PARM_FACTOR)) + max_AMPDU_len = p[i + 2] & + IEEE80211_HT_AMPDU_PARM_FACTOR; else - max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3; - - if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) > (p[i + 2] & 0x1c)) - min_MPDU_spacing = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c; + max_AMPDU_len = cap->ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_FACTOR; + + if ((cap->ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_DENSITY) > + (p[i + 2] & IEEE80211_HT_AMPDU_PARM_DENSITY)) + min_MPDU_spacing = cap->ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_DENSITY; else - min_MPDU_spacing = p[i + 2] & 0x1c; + min_MPDU_spacing = p[i + 2] & + IEEE80211_HT_AMPDU_PARM_DENSITY; - pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para = + cap->ampdu_params_info = max_AMPDU_len | min_MPDU_spacing; } } - /* Commented by Albert 2010/07/12 */ - /* Have to handle the endian issue after copying. */ - /* HT_ext_caps didn't be used yet. */ - pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = - le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info); - pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps = - le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps); - rf_type = rtl8723a_get_rf_type(padapter); /* update the MCS rates */ for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) { if (rf_type == RF_1T1R || rf_type == RF_1T2R) - pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i]; + cap->mcs.rx_mask[i] &= MCS_rate_1R23A[i]; else - pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i]; + cap->mcs.rx_mask[i] &= MCS_rate_2R23A[i]; } return; } @@ -816,10 +818,12 @@ void HTOnAssocRsp23a(struct rtw_adapter *padapter) AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k AMPDU_para [4:2]:Min MPDU Start Spacing */ - max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03; + max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_FACTOR; min_MPDU_spacing = - (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2; + (pmlmeinfo->ht_cap.ampdu_params_info & + IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2; rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing); rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len); @@ -1338,18 +1342,18 @@ unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz) return mask; } -unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps) +unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *pHT_caps) { unsigned int mask = 0; - mask = pHT_caps->u.HT_cap_element.mcs_info.rx_mask[0] << 12 | - pHT_caps->u.HT_cap_element.mcs_info.rx_mask[1] << 20; + mask = pHT_caps->mcs.rx_mask[0] << 12 | + pHT_caps->mcs.rx_mask[1] << 20; return mask; } int support_short_GI23a(struct rtw_adapter *padapter, - struct HT_caps_element *pHT_caps) + struct ieee80211_ht_cap *pHT_caps) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -1361,7 +1365,7 @@ int support_short_GI23a(struct rtw_adapter *padapter, return _FAIL; bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5; - if (pHT_caps->u.HT_cap_element.HT_caps_info & (0x1 << bit_offset)) + if (pHT_caps->cap_info & cpu_to_le16(0x1 << bit_offset)) return _SUCCESS; else return _FAIL; diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c index c00105389090..bb869868b891 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c @@ -5871,8 +5871,8 @@ btdm_1AntUpdateHalRAMask(struct rtw_adapter *padapter, u32 mac_id, u32 filter) mask = update_supported_rate23a(cur_network->SupportedRates, supportRateNum); mask |= (pmlmeinfo->HT_enable) ? - update_MSC_rate23a(&pmlmeinfo->HT_caps):0; - if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps)) + update_MSC_rate23a(&pmlmeinfo->ht_cap):0; + if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap)) shortGIrate = true; break; case 1:/* for broadcast/multicast */ diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 6a7fb28e03da..d3d72898edec 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -1532,9 +1532,9 @@ void rtl8723a_update_ramask(struct rtw_adapter *padapter, mask = update_supported_rate23a(cur_network->SupportedRates, supportRateNum); mask |= (pmlmeinfo->HT_enable) ? - update_MSC_rate23a(&pmlmeinfo->HT_caps) : 0; + update_MSC_rate23a(&pmlmeinfo->ht_cap) : 0; - if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps)) + if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap)) shortGIrate = true; break; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index badbce09559d..57622fbc6acc 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -366,7 +366,7 @@ struct mlme_ext_info struct ADDBA_request ADDBA_req; struct WMM_para_element WMM_param; - struct HT_caps_element HT_caps; + struct ieee80211_ht_cap ht_cap; struct HT_info_element HT_info; struct wlan_bssid_ex network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */ struct FW_Sta_Info FW_sta_info[NUM_STA]; @@ -536,7 +536,7 @@ int update_sta_support_rate23a(struct rtw_adapter *padapter, u8* pvar_ie, void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta); unsigned int update_basic_rate23a(unsigned char *ptn, unsigned int ptn_sz); unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz); -unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps); +unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *ht_cap); void Update_RA_Entry23a(struct rtw_adapter *padapter, struct sta_info *psta); void set_sta_rate23a(struct rtw_adapter *padapter, struct sta_info *psta); @@ -545,7 +545,7 @@ int receive_disconnect23a(struct rtw_adapter *padapter, unsigned char get_highest_rate_idx23a(u32 mask); int support_short_GI23a(struct rtw_adapter *padapter, - struct HT_caps_element *pHT_caps); + struct ieee80211_ht_cap *ht_cap); bool is_ap_in_tkip23a(struct rtw_adapter *padapter); bool is_ap_in_wep23a(struct rtw_adapter *padapter); bool should_forbid_n_rate23a(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index f731833566ba..d0a8c8638b0d 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -76,20 +76,6 @@ struct ieee80211_ht_addt_info { unsigned char basic_set[16]; } __packed; -struct HT_caps_element { - union { - struct { - unsigned short HT_caps_info; - unsigned char AMPDU_para; - struct ieee80211_mcs_info mcs_info; - unsigned short HT_ext_caps; - unsigned int Beamforming_caps; - unsigned char ASEL_caps; - } HT_cap_element; - unsigned char HT_cap[26]; - } u; -} __packed; - struct HT_info_element { unsigned char primary_channel; unsigned char infos[5]; -- cgit From 6594c965ca8c07ba2c152bfa3c23700650d2969b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:12 +0200 Subject: staging: rtl8723au: Use correct struct for WLAN_EID_HT_CAPABILITY WLAN_EID_HT_CAPABILITY carries a struct ieee80211_ht_operation - use the right struct instead of a self invented one. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +++--- drivers/staging/rtl8723au/include/wifi.h | 8 -------- 2 files changed, 3 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 19b891f9b55b..297e2e47ea54 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2249,7 +2249,7 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, in_ie + 12, in_len -12); - if (p && (p[1] == sizeof(struct ieee80211_ht_addt_info))) { + if (p && (p[1] == sizeof(struct ieee80211_ht_operation))) { out_len = *pout_len; pframe = rtw_set_ie23a(out_ie + out_len, WLAN_EID_HT_OPERATION, @@ -2266,7 +2266,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) u8 max_ampdu_sz; const u8 *p; struct ieee80211_ht_cap *pht_capie; - struct ieee80211_ht_addt_info *pht_addtinfo; + struct ieee80211_ht_operation *pht_addtinfo; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct ht_priv *phtpriv = &pmlmepriv->htpriv; struct registry_priv *pregistrypriv = &padapter->registrypriv; @@ -2314,7 +2314,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, ie_len); if (p && p[1] > 0) { - pht_addtinfo = (struct ieee80211_ht_addt_info *)(p + 2); + pht_addtinfo = (struct ieee80211_ht_operation *)(p + 2); /* todo: */ } diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index d0a8c8638b0d..6d221dfc48c5 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -68,14 +68,6 @@ * This structure refers to "HT information element" as * described in 802.11n draft section 7.3.2.53 */ -struct ieee80211_ht_addt_info { - unsigned char control_chan; - unsigned char ht_param; - unsigned short operation_mode; - unsigned short stbc_param; - unsigned char basic_set[16]; -} __packed; - struct HT_info_element { unsigned char primary_channel; unsigned char infos[5]; -- cgit From 4dc5f8bab2663b902b9cb0be29198dbbf38aa3fb Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:13 +0200 Subject: staging: rtl8723au: Eliminate struct HT_info_element Yet another duplicate version of struct ieee80211_ht_operation Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 14 +++++++------ drivers/staging/rtl8723au/core/rtw_ieee80211.c | 6 +++--- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 4 ++-- drivers/staging/rtl8723au/core/rtw_mlme.c | 14 +++++++------ drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 23 +++++++++++----------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 25 ++++++++++++------------ drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 2 +- drivers/staging/rtl8723au/include/rtw_rf.h | 11 ----------- drivers/staging/rtl8723au/include/wifi.h | 11 ----------- 9 files changed, 47 insertions(+), 63 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 83be27fdea9b..d67a5f1bfc44 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -652,7 +652,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network; - struct HT_info_element *pht_info = NULL; + struct ieee80211_ht_operation *pht_info = NULL; int bcn_fixed_size; bcn_interval = (u16)pnetwork->BeaconPeriod; @@ -736,18 +736,20 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) pnetwork->IEs + bcn_fixed_size, pnetwork->IELength - bcn_fixed_size); if (p && p[1]) { - pht_info = (struct HT_info_element *)(p + 2); + pht_info = (struct ieee80211_ht_operation *)(p + 2); - if (pregpriv->cbw40_enable && pht_info->infos[0] & BIT(2)) { + if (pregpriv->cbw40_enable && pht_info->ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) { /* switch to the 40M Hz mode */ cur_bwmode = HT_CHANNEL_WIDTH_40; - switch (pht_info->infos[0] & 0x3) { - case 1: + switch (pht_info->ht_param & + IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { + case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: /* pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; */ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; break; - case 3: + case IEEE80211_HT_PARAM_CHA_SEC_BELOW: cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER; break; default: diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 47ac4e917f2d..69d2423ac176 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -859,7 +859,7 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) u8 bencrypt = 0; /* u8 wpa_ie[255], rsn_ie[255]; */ u16 wpa_len = 0, rsn_len = 0; - struct HT_info_element *pht_info; + struct ieee80211_ht_operation *pht_info; struct ieee80211_ht_cap *pht_cap; const u8 *p; @@ -916,8 +916,8 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) pnetwork->network.IEs + _FIXED_IE_LENGTH_, pnetwork->network.IELength - _FIXED_IE_LENGTH_); if (p && p[1] > 0) { - pht_info = (struct HT_info_element *)(p + 2); - pnetwork->BcnInfo.ht_info_infos_0 = pht_info->infos[0]; + pht_info = (struct ieee80211_ht_operation *)(p + 2); + pnetwork->BcnInfo.ht_info_infos_0 = pht_info->ht_param; } else pnetwork->BcnInfo.ht_info_infos_0 = 0; } diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index e9f46a688895..1d2ea4e1737c 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -394,8 +394,8 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) /* cur_bwmod is updated by beacon, pmlmeinfo is updated by association response */ bw_40MHz = (pmlmeext->cur_bwmode && - (IEEE80211_HT_PARAM_CHAN_WIDTH_ANY & - pmlmeinfo->HT_info.infos[0])) ? 1:0; + (pmlmeinfo->HT_info.ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0; /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 297e2e47ea54..99828863eed4 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2322,7 +2322,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) if (pregistrypriv->cbw40_enable && pmlmeinfo->ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40) && - pmlmeinfo->HT_info.infos[0] & BIT(2)) { + pmlmeinfo->HT_info.ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) { int i; u8 rf_type; @@ -2339,13 +2339,13 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) } /* switch to the 40M Hz mode accoring to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; - switch ((pmlmeinfo->HT_info.infos[0] & 0x3)) - { - case HT_EXTCHNL_OFFSET_UPPER: + switch (pmlmeinfo->HT_info.ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) { + case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; break; - case HT_EXTCHNL_OFFSET_LOWER: + case IEEE80211_HT_PARAM_CHA_SEC_BELOW: pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER; break; @@ -2368,7 +2368,9 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) /* */ /* Config current HT Protection mode. */ /* */ - pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3; + pmlmeinfo->HT_protection = + le16_to_cpu(pmlmeinfo->HT_info.operation_mode) & + IEEE80211_HT_OP_MODE_PROTECTION; } void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter, diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index b5f1d40eea07..0dc49d3552ea 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4640,9 +4640,9 @@ int collect_bss_info23a(struct rtw_adapter *padapter, bssid->IEs + ie_offset, bssid->IELength - ie_offset); if (p) { - struct HT_info_element *HT_info = - (struct HT_info_element *)(p + 2); - bssid->DSConfig = HT_info->primary_channel; + struct ieee80211_ht_operation *HT_info = + (struct ieee80211_ht_operation *)(p + 2); + bssid->DSConfig = HT_info->primary_chan; } else /* use current channel */ bssid->DSConfig = rtw_get_oper_ch23a(padapter); } @@ -5959,7 +5959,7 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf; - struct HT_info_element *pht_info; + struct ieee80211_ht_operation *pht_info; u32 i; int bcn_fixed_size; u8 *p; @@ -6028,20 +6028,21 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) /* spec case only for cisco's ap because cisco's ap * issue assoc rsp using mcs rate @40MHz or @20MHz */ - pht_info = (struct HT_info_element *)(p + 2); + pht_info = (struct ieee80211_ht_operation *)(p + 2); - if ((pregpriv->cbw40_enable) && - (pht_info->infos[0] & BIT(2))) { + if (pregpriv->cbw40_enable && + (pht_info->ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) { /* switch to the 40M Hz mode according to AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; - switch (pht_info->infos[0] & 0x3) - { - case 1: + switch (pht_info->ht_param & + IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { + case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; break; - case 3: + case IEEE80211_HT_PARAM_CHA_SEC_BELOW: pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER; break; diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 1194a6e5be42..6d69811b904c 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -635,7 +635,7 @@ void WMMOnAssocRsp23a(struct rtw_adapter *padapter) static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p) { - struct HT_info_element *pHT_info; + struct ieee80211_ht_operation *pHT_info; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -648,19 +648,20 @@ static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p) return; if (!phtpriv->ht_option) return; - if (p[1] > sizeof(struct HT_info_element)) + if (p[1] != sizeof(struct ieee80211_ht_operation)) return; - pHT_info = (struct HT_info_element *)(p + 2); + pHT_info = (struct ieee80211_ht_operation *)(p + 2); - if ((pHT_info->infos[0] & BIT(2)) && pregistrypriv->cbw40_enable) { + if ((pHT_info->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) && + pregistrypriv->cbw40_enable) { new_bwmode = HT_CHANNEL_WIDTH_40; - switch (pHT_info->infos[0] & 0x3) { - case 1: + switch (pHT_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET){ + case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: new_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; break; - case 3: + case IEEE80211_HT_PARAM_CHA_SEC_BELOW: new_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER; break; default: @@ -786,7 +787,7 @@ void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p) if (phtpriv->ht_option == false) return; - if (p[1] > sizeof(struct HT_info_element)) + if (p[1] != sizeof(struct ieee80211_ht_operation)) return; pmlmeinfo->HT_info_enable = 1; @@ -883,7 +884,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, struct ieee80211_mgmt *mgmt, u32 pkt_len) { struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network; - struct HT_info_element *pht_info; + struct ieee80211_ht_operation *pht_info; struct ieee80211_ht_cap *pht_cap; struct wlan_bssid_ex *bssid; unsigned short val16; @@ -952,8 +953,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, /* parsing HT_INFO_IE */ p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len); if (p && p[1] > 0) { - pht_info = (struct HT_info_element *)(p + 2); - ht_info_infos_0 = pht_info->infos[0]; + pht_info = (struct ieee80211_ht_operation *)(p + 2); + ht_info_infos_0 = pht_info->ht_param; } else { pht_info = NULL; ht_info_infos_0 = 0; @@ -985,7 +986,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len); if (pht_info) - bcn_channel = pht_info->primary_channel; + bcn_channel = pht_info->primary_chan; else { /* we don't find channel IE, so don't check it */ DBG_8723A("Oops: %s we don't find channel IE, so don't " "check it\n", __func__); diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index 57622fbc6acc..368e57d255f6 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -367,7 +367,7 @@ struct mlme_ext_info struct ADDBA_request ADDBA_req; struct WMM_para_element WMM_param; struct ieee80211_ht_cap ht_cap; - struct HT_info_element HT_info; + struct ieee80211_ht_operation HT_info; struct wlan_bssid_ex network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */ struct FW_Sta_Info FW_sta_info[NUM_STA]; }; diff --git a/drivers/staging/rtl8723au/include/rtw_rf.h b/drivers/staging/rtl8723au/include/rtw_rf.h index 91a0a22a2709..a7de714137b8 100644 --- a/drivers/staging/rtl8723au/include/rtw_rf.h +++ b/drivers/staging/rtl8723au/include/rtw_rf.h @@ -89,17 +89,6 @@ enum ht_channel_width { HT_CHANNEL_WIDTH_10 = 4, }; -/* */ -/* Represent Extention Channel Offset in HT Capabilities */ -/* This is available only in 40Mhz mode. */ -/* */ -enum { - HT_EXTCHNL_OFFSET_NO_EXT = 0, - HT_EXTCHNL_OFFSET_UPPER = 1, - HT_EXTCHNL_OFFSET_NO_DEF = 2, - HT_EXTCHNL_OFFSET_LOWER = 3, -}; - /* 2007/11/15 MH Define different RF type. */ enum { RF_1T2R = 0, diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 6d221dfc48c5..4ab28e59f8ba 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -63,17 +63,6 @@ Below is the definition for 802.11n ------------------------------------------------------------------------------*/ -/* struct rtw_ieee80211_ht_cap - HT additional information - * - * This structure refers to "HT information element" as - * described in 802.11n draft section 7.3.2.53 - */ -struct HT_info_element { - unsigned char primary_channel; - unsigned char infos[5]; - unsigned char MCS_rate[16]; -} __packed; - struct AC_param { unsigned char ACI_AIFSN; unsigned char CW; -- cgit From ed08b4de7c26a898b9deb65ee46c5d7eaf2bdd62 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:14 +0200 Subject: staging: rtl8723au: Don't carry ht_cap_info and ht_param in struct wlan_bcn_info These were just stored to check whether the beacon info had changed and print a debug message in this case. If we ever need this again, we can determine this change differently. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 22 ------------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 43 ++----------------------- drivers/staging/rtl8723au/include/wlan_bssdef.h | 2 -- 3 files changed, 3 insertions(+), 64 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 69d2423ac176..2740639ade94 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -859,9 +859,6 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) u8 bencrypt = 0; /* u8 wpa_ie[255], rsn_ie[255]; */ u16 wpa_len = 0, rsn_len = 0; - struct ieee80211_ht_operation *pht_info; - struct ieee80211_ht_cap *pht_cap; - const u8 *p; cap = get_unaligned_le16( rtw_get_capability23a_from_ie(pnetwork->network.IEs)); @@ -901,25 +898,6 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) rtw_get_cipher_info(pnetwork); /* get bwmode and ch_offset */ - /* parsing HT_CAP_IE */ - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - pnetwork->network.IEs + _FIXED_IE_LENGTH_, - pnetwork->network.IELength - _FIXED_IE_LENGTH_); - if (p && p[1] > 0) { - pht_cap = (struct ieee80211_ht_cap *)(p + 2); - pnetwork->BcnInfo.ht_cap_info = pht_cap->cap_info; - } else - pnetwork->BcnInfo.ht_cap_info = 0; - - /* parsing HT_INFO_IE */ - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, - pnetwork->network.IEs + _FIXED_IE_LENGTH_, - pnetwork->network.IELength - _FIXED_IE_LENGTH_); - if (p && p[1] > 0) { - pht_info = (struct ieee80211_ht_operation *)(p + 2); - pnetwork->BcnInfo.ht_info_infos_0 = pht_info->ht_param; - } else - pnetwork->BcnInfo.ht_info_infos_0 = 0; } /* show MCS rate, unit: 100Kbps */ diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 6d69811b904c..8c007cddd4b9 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -885,15 +885,12 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, { struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network; struct ieee80211_ht_operation *pht_info; - struct ieee80211_ht_cap *pht_cap; struct wlan_bssid_ex *bssid; unsigned short val16; u16 wpa_len = 0, rsn_len = 0; u8 encryp_protocol; int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r; u32 bcn_channel; - unsigned short ht_cap_info; - unsigned char ht_info_infos_0; int len, pie_len, ie_offset; const u8 *p; u8 *pie; @@ -941,41 +938,6 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, pie = bssid->IEs + ie_offset; pie_len = pkt_len - ie_offset; - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len); - if (p && p[1] > 0) { - pht_cap = (struct ieee80211_ht_cap *)(p + 2); - ht_cap_info = pht_cap->cap_info; - } else { - pht_cap = NULL; - ht_cap_info = 0; - } - - /* parsing HT_INFO_IE */ - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len); - if (p && p[1] > 0) { - pht_info = (struct ieee80211_ht_operation *)(p + 2); - ht_info_infos_0 = pht_info->ht_param; - } else { - pht_info = NULL; - ht_info_infos_0 = 0; - } - - if (ht_cap_info != cur_network->BcnInfo.ht_cap_info || - ((ht_info_infos_0 & 0x03) != - (cur_network->BcnInfo.ht_info_infos_0 & 0x03))) { - DBG_8723A("%s bcn now: ht_cap_info:%x ht_info_infos_0:%x\n", - __func__, ht_cap_info, ht_info_infos_0); - DBG_8723A("%s bcn link: ht_cap_info:%x ht_info_infos_0:%x\n", - __func__, cur_network->BcnInfo.ht_cap_info, - cur_network->BcnInfo.ht_info_infos_0); - DBG_8723A("%s bw mode change, disconnect\n", __func__); - /* bcn_info_update */ - cur_network->BcnInfo.ht_cap_info = ht_cap_info; - cur_network->BcnInfo.ht_info_infos_0 = ht_info_infos_0; - /* to do : need to check that whether modify related - register of BB or not */ - } - /* Checking for channel */ p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, pie, pie_len); if (p) @@ -985,9 +947,10 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, info for channel */ p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len); - if (pht_info) + if (p && p[1] > 0) { + pht_info = (struct ieee80211_ht_operation *)(p + 2); bcn_channel = pht_info->primary_chan; - else { /* we don't find channel IE, so don't check it */ + } else { /* we don't find channel IE, so don't check it */ DBG_8723A("Oops: %s we don't find channel IE, so don't " "check it\n", __func__); bcn_channel = Adapter->mlmeextpriv.cur_channel; diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h index 664015d049e8..b7176874c396 100644 --- a/drivers/staging/rtl8723au/include/wlan_bssdef.h +++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h @@ -83,8 +83,6 @@ struct wlan_bcn_info { int is_8021x; /* bwmode 20/40 and ch_offset UP/LOW */ - unsigned short ht_cap_info; - unsigned char ht_info_infos_0; }; struct wlan_bssid_ex { -- cgit From a665bcc2441fcf30636c2792c125a4d07d44d617 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:15 +0200 Subject: staging: rtl8723au: rtw_check_bcn_info23a(): Use capability bit define Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 8c007cddd4b9..67fb7ece7e35 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -995,7 +995,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, /* check encryption info */ val16 = rtw_get_capability23a(bssid); - if (val16 & BIT(4)) + if (val16 & WLAN_CAPABILITY_PRIVACY) bssid->Privacy = 1; else bssid->Privacy = 0; -- cgit From e3916153ea15f97a343e463c4b69bd819229d41a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:16 +0200 Subject: staging: rtl8723au: Remmove buddy-adapter linking This sort of stuff should be handled by the bonding driver Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 16 ---------------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 25 ------------------------- drivers/staging/rtl8723au/include/drv_types.h | 3 --- drivers/staging/rtl8723au/os_dep/os_intfs.c | 5 ----- drivers/staging/rtl8723au/os_dep/usb_intf.c | 12 ++---------- 5 files changed, 2 insertions(+), 59 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c index dbd01b652e02..7dc7c90eba0e 100644 --- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c @@ -114,7 +114,6 @@ int ips_leave23a(struct rtw_adapter * padapter) static bool rtw_pwr_unassociated_idle(struct rtw_adapter *adapter) { - struct rtw_adapter *buddy = adapter->pbuddy_adapter; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct xmit_priv *pxmit_priv = &adapter->xmitpriv; @@ -130,21 +129,6 @@ static bool rtw_pwr_unassociated_idle(struct rtw_adapter *adapter) goto exit; } - /* consider buddy, if exist */ - if (buddy) { - struct mlme_priv *b_pmlmepriv = &buddy->mlmepriv; - - if (check_fwstate(b_pmlmepriv, - WIFI_ASOC_STATE|WIFI_SITE_MONITOR) || - check_fwstate(b_pmlmepriv, - WIFI_UNDER_LINKING|WIFI_UNDER_WPS) || - check_fwstate(b_pmlmepriv, WIFI_AP_STATE) || - check_fwstate(b_pmlmepriv, - WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)) { - goto exit; - } - } - if (pxmit_priv->free_xmitbuf_cnt != NR_XMITBUFF || pxmit_priv->free_xmit_extbuf_cnt != NR_XMIT_EXTBUFF) { DBG_8723A_LEVEL(_drv_always_, diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 67fb7ece7e35..a9fa109ed1d0 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -1644,28 +1644,3 @@ void process_addba_req23a(struct rtw_adapter *padapter, true : false; } } - -static struct rtw_adapter *pbuddy_padapter; - -int rtw_handle_dualmac23a(struct rtw_adapter *adapter, bool init) -{ - int status = _SUCCESS; - - if (init) { - if (pbuddy_padapter == NULL) { - pbuddy_padapter = adapter; - DBG_8723A("%s(): pbuddy_padapter == NULL, " - "Set pbuddy_padapter\n", __func__); - } else { - adapter->pbuddy_adapter = pbuddy_padapter; - pbuddy_padapter->pbuddy_adapter = adapter; - /* clear global value */ - pbuddy_padapter = NULL; - DBG_8723A("%s(): pbuddy_padapter exist, " - "Exchange Information\n", __func__); - } - } else - pbuddy_padapter = NULL; - - return status; -} diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h index a94857df2def..3ef9d7a045f2 100644 --- a/drivers/staging/rtl8723au/include/drv_types.h +++ b/drivers/staging/rtl8723au/include/drv_types.h @@ -259,7 +259,6 @@ struct rtw_adapter { u8 bWritePortCancel; /* The driver will show the desired chan nor when this flag is 1. */ u8 bNotifyChannelChange; - struct rtw_adapter *pbuddy_adapter; /* extend to support multi interface */ /* IFACE_ID0 is equals to PRIMARY_ADAPTER */ @@ -269,8 +268,6 @@ struct rtw_adapter { #define adapter_to_dvobj(adapter) (adapter->dvobj) -int rtw_handle_dualmac23a(struct rtw_adapter *adapter, bool init); - static inline u8 *myid(struct eeprom_priv *peepriv) { return peepriv->mac_addr; diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index 1fb34386a4e5..ee3d62cc1ab0 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -584,11 +584,6 @@ int rtw_free_drv_sw23a(struct rtw_adapter *padapter) kfree(padapter->HalData); padapter->HalData = NULL; - RT_TRACE(_module_os_intfs_c_, _drv_info_, ("<== rtw_free_drv_sw23a\n")); - - /* clear pbuddy_adapter to avoid access wrong pointer. */ - if (padapter->pbuddy_adapter != NULL) - padapter->pbuddy_adapter->pbuddy_adapter = NULL; RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_free_drv_sw23a\n")); return _SUCCESS; } diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index 8b25c1aa2025..d0a3a1e6f5aa 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -572,7 +572,7 @@ static struct rtw_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, pnetdev = rtw_init_netdev23a(padapter); if (!pnetdev) - goto handle_dualmac; + goto free_adapter; padapter = netdev_priv(pnetdev); padapter->dvobj = dvobj; @@ -583,13 +583,10 @@ static struct rtw_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, rtl8723au_set_hw_type(padapter); - if (rtw_handle_dualmac23a(padapter, 1) != _SUCCESS) - goto free_adapter; - SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj)); if (rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj))) - goto handle_dualmac; + goto free_adapter; /* step 2. allocate HalData */ padapter->HalData = kzalloc(sizeof(struct hal_data_8723a), GFP_KERNEL); @@ -650,9 +647,6 @@ free_wdev: rtw_wdev_unregister(padapter->rtw_wdev); rtw_wdev_free(padapter->rtw_wdev); } -handle_dualmac: - if (status != _SUCCESS) - rtw_handle_dualmac23a(padapter, 0); free_adapter: if (status != _SUCCESS) { if (pnetdev) @@ -684,8 +678,6 @@ static void rtw_usb_if1_deinit(struct rtw_adapter *if1) DBG_8723A("+r871xu_dev_remove, hw_init_completed =%d\n", if1->hw_init_completed); - rtw_handle_dualmac23a(if1, 0); - if (if1->rtw_wdev) { rtw_wdev_unregister(if1->rtw_wdev); rtw_wdev_free(if1->rtw_wdev); -- cgit From 7882ef454c613c8e79700ca1c81274357e1286ff Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:17 +0200 Subject: staging: rtl8723au: Rewrite update_beacon23a_info() tto use cfg80211_find_ie() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 5 ++-- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 38 ++++++++++-------------- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 9 +++--- 3 files changed, 22 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 0dc49d3552ea..bf0d62e53ffd 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -789,7 +789,6 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) struct sta_priv *pstapriv = &padapter->stapriv; struct sk_buff *skb = precv_frame->pkt; struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data; - u8 *pframe = skb->data; int pkt_len = skb->len; struct wlan_bssid_ex *pbss; int ret = _SUCCESS; @@ -869,7 +868,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) the number of the beacon received */ if ((sta_rx_pkts(psta) & 0xf) == 0) { /* DBG_8723A("update_bcn_info\n"); */ - update_beacon23a_info(padapter, pframe, + update_beacon23a_info(padapter, mgmt, pkt_len, psta); } } @@ -881,7 +880,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) number of the beacon received */ if ((sta_rx_pkts(psta) & 0xf) == 0) { /* DBG_8723A("update_bcn_info\n"); */ - update_beacon23a_info(padapter, pframe, + update_beacon23a_info(padapter, mgmt, pkt_len, psta); } } else { diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index a9fa109ed1d0..82904d067b2e 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -633,7 +633,7 @@ void WMMOnAssocRsp23a(struct rtw_adapter *padapter) return; } -static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p) +static void bwmode_update_check(struct rtw_adapter *padapter, const u8 *p) { struct ieee80211_ht_operation *pHT_info; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -774,7 +774,7 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p) return; } -void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p) +void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -830,7 +830,7 @@ void HTOnAssocRsp23a(struct rtw_adapter *padapter) rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len); } -void ERP_IE_handler23a(struct rtw_adapter *padapter, u8 *p) +void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -1091,32 +1091,24 @@ _mismatch: return _FAIL; } -void update_beacon23a_info(struct rtw_adapter *padapter, u8 *pframe, +void update_beacon23a_info(struct rtw_adapter *padapter, + struct ieee80211_mgmt *mgmt, uint pkt_len, struct sta_info *psta) { - unsigned int i; unsigned int len; - u8 *p; + const u8 *p; - len = pkt_len - - (_BEACON_IE_OFFSET_ + sizeof(struct ieee80211_hdr_3addr)); + len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable); - for (i = 0; i < len;) { - p = (u8 *)(pframe + (_BEACON_IE_OFFSET_ + sizeof(struct ieee80211_hdr_3addr)) + i); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, mgmt->u.beacon.variable, + len); + if (p) + bwmode_update_check(padapter, p); - switch (p[0]) { - case WLAN_EID_HT_OPERATION: /* HT info */ - /* HT_info_handler23a(padapter, pIE); */ - bwmode_update_check(padapter, p); - break; - case WLAN_EID_ERP_INFO: - ERP_IE_handler23a(padapter, p); - VCS_update23a(padapter, psta); - break; - default: - break; - } - i += (p[1] + 2); + p = cfg80211_find_ie(WLAN_EID_ERP_INFO, mgmt->u.beacon.variable, len); + if (p) { + ERP_IE_handler23a(padapter, p); + VCS_update23a(padapter, psta); } } diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index 368e57d255f6..b8a108bc80de 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -514,14 +514,15 @@ int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p); void WMMOnAssocRsp23a(struct rtw_adapter *padapter); void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p); -void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p); +void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p); void HTOnAssocRsp23a(struct rtw_adapter *padapter); -void ERP_IE_handler23a(struct rtw_adapter *padapter, u8 *p); +void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p); void VCS_update23a(struct rtw_adapter *padapter, struct sta_info *psta); -void update_beacon23a_info(struct rtw_adapter *padapter, u8 *pframe, uint len, - struct sta_info *psta); +void update_beacon23a_info(struct rtw_adapter *padapter, + struct ieee80211_mgmt *mgmt, uint len, + struct sta_info *psta); int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, struct ieee80211_mgmt *mgmt, u32 packet_len); void update_IOT_info23a(struct rtw_adapter *padapter); -- cgit From 5b124b1aa2979b1319d6434464c318ef0111ceb4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:18 +0200 Subject: staging: rtl8723au: collect_bss_info23a(): Collect beacon_interval correct Only retrieve beacon_interval from frames where it is present. This avoids setting BeaconPeriod to garbage for other frame types. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index bf0d62e53ffd..fde8a32b2301 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4547,20 +4547,28 @@ int collect_bss_info23a(struct rtw_adapter *padapter, bssid->reserved = 1; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); capab_info = mgmt->u.beacon.capab_info; + bssid->BeaconPeriod = + get_unaligned_le16(&mgmt->u.beacon.beacon_int); } else if (ieee80211_is_probe_req(mgmt->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, u.probe_req.variable); bssid->reserved = 2; capab_info = 0; + bssid->BeaconPeriod = + padapter->registrypriv.dev_network.BeaconPeriod; } else if (ieee80211_is_probe_resp(mgmt->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); bssid->reserved = 3; capab_info = mgmt->u.probe_resp.capab_info; + bssid->BeaconPeriod = + get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); } else { bssid->reserved = 0; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); capab_info = mgmt->u.beacon.capab_info; + bssid->BeaconPeriod = + padapter->registrypriv.dev_network.BeaconPeriod; } ie_offset -= offsetof(struct ieee80211_mgmt, u); @@ -4654,9 +4662,6 @@ int collect_bss_info23a(struct rtw_adapter *padapter, return _SUCCESS; } - bssid->BeaconPeriod = get_unaligned_le16( - rtw_get_beacon_interval23a_from_ie(bssid->IEs)); - if (capab_info & BIT(0)) { bssid->ifmode = NL80211_IFTYPE_STATION; ether_addr_copy(bssid->MacAddress, mgmt->sa); -- cgit From c2b8047aff855bfbcb5a2ff478465c01bb82fda5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 31 May 2014 18:05:19 +0200 Subject: staging: rtl8723au: collect_bss_info23a(): ieee80211_mgmt capab_info is little endian Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index fde8a32b2301..1c22d1bd5237 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4546,7 +4546,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter, if (ieee80211_is_beacon(mgmt->frame_control)) { bssid->reserved = 1; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); - capab_info = mgmt->u.beacon.capab_info; + capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.beacon.beacon_int); } else if (ieee80211_is_probe_req(mgmt->frame_control)) { @@ -4560,13 +4560,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter, ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); bssid->reserved = 3; - capab_info = mgmt->u.probe_resp.capab_info; + capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); } else { bssid->reserved = 0; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); - capab_info = mgmt->u.beacon.capab_info; + capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = padapter->registrypriv.dev_network.BeaconPeriod; } @@ -4662,7 +4662,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter, return _SUCCESS; } - if (capab_info & BIT(0)) { + if (capab_info & WLAN_CAPABILITY_ESS) { bssid->ifmode = NL80211_IFTYPE_STATION; ether_addr_copy(bssid->MacAddress, mgmt->sa); } else { @@ -4670,7 +4670,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter, ether_addr_copy(bssid->MacAddress, mgmt->bssid); } - if (capab_info & BIT(4)) + if (capab_info & WLAN_CAPABILITY_PRIVACY) bssid->Privacy = 1; else bssid->Privacy = 0; -- cgit From b2775415844e89d528a0c40f81caedd6aad595f7 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 3 Jun 2014 23:41:22 +0200 Subject: staging: rtl8723au: rtw_update_ht_cap23a(): Use correct mask when determining 40MHz channel location commit 4dc5f8bab2663b902b9cb0be29198dbbf38aa3fb Author: Jes Sorensen Date: Tue May 27 13:43:12 2014 +0200 staging: rtl8723au: Eliminate struct HT_info_element Yet another duplicate version of struct ieee80211_ht_operation Signed-off-by: Jes Sorensen introduced a bad error, applying the wrong value as the mask when determining the location of the 40MHz channel, effectively making it always determining it as not present. This caused hangs and delays when running in 40MHz channel mode. This should get it right. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 99828863eed4..76e1797c8f2b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2340,7 +2340,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) /* switch to the 40M Hz mode accoring to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; switch (pmlmeinfo->HT_info.ht_param & - IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) { + IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; break; -- cgit From 54ddd2266a429e801382a32733177ec33384c8a0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:15:59 +0200 Subject: staging: rtl8723au: rtw_get_bcn_info23a(): Use cfg80211_* to obtain crypto info Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 2740639ade94..484272e66177 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -857,8 +857,9 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) { unsigned short cap; u8 bencrypt = 0; - /* u8 wpa_ie[255], rsn_ie[255]; */ - u16 wpa_len = 0, rsn_len = 0; + int pie_len, ie_offset; + u8 *pie; + const u8 *p; cap = get_unaligned_le16( rtw_get_capability23a_from_ie(pnetwork->network.IEs)); @@ -868,24 +869,22 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) } else pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS; - rtw_get_sec_ie23a(pnetwork->network.IEs, pnetwork->network.IELength, - NULL, &rsn_len, NULL, &wpa_len); RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_bcn_info23a: ssid =%s\n", pnetwork->network.Ssid.ssid)); - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: wpa_len =%d rsn_len =%d\n", - wpa_len, rsn_len)); - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: ssid =%s\n", pnetwork->network.Ssid.ssid)); - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: wpa_len =%d rsn_len =%d\n", - wpa_len, rsn_len)); - if (rsn_len > 0) + ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - + offsetof(struct ieee80211_mgmt, u); + pie = pnetwork->network.IEs + ie_offset; + pie_len = pnetwork->network.IELength - ie_offset; + + p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); + if (p && p[1]) { pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA2; - else if (wpa_len > 0) + } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPA, + pie, pie_len)) { pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA; - else { + } else { if (bencrypt) pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WEP; } -- cgit From 77953edfac8dfc2c5b0d2007fdc64839c736e7a1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:00 +0200 Subject: staging: rtl8723au: rtw_wlan_util.c: Use cfg80211_* to determine crypto Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 82904d067b2e..043ba40fadf0 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -887,7 +887,6 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, struct ieee80211_ht_operation *pht_info; struct wlan_bssid_ex *bssid; unsigned short val16; - u16 wpa_len = 0, rsn_len = 0; u8 encryp_protocol; int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r; u32 bcn_channel; @@ -1009,14 +1008,14 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, goto _mismatch; } - rtw_get_sec_ie23a(bssid->IEs, bssid->IELength, NULL, &rsn_len, NULL, - &wpa_len); - - if (rsn_len > 0) + p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); + if (p && p[1]) { encryp_protocol = ENCRYP_PROTOCOL_WPA2; - else if (wpa_len > 0) + } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WPA, + pie, pie_len)) { encryp_protocol = ENCRYP_PROTOCOL_WPA; - else { + } else { if (bssid->Privacy) encryp_protocol = ENCRYP_PROTOCOL_WEP; else -- cgit From 0b548a5c4d55058393b27c888a5cd04610c95ee3 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:01 +0200 Subject: staging: rtl8723au: Remove obsolete rtw_get_sec_ie23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 75 -------------------------- drivers/staging/rtl8723au/include/ieee80211.h | 2 - 2 files changed, 77 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 484272e66177..cbb1b85bd727 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -621,81 +621,6 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher, return ret; } -int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, - u8 *wpa_ie, u16 *wpa_len) -{ - u8 authmode, sec_idx, i; - uint cnt; - - - /* Search required WPA or WPA2 IE and copy to sec_ie[ ] */ - - cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_); - - sec_idx = 0; - - while(cnt < in_len) { - authmode = in_ie[cnt]; - - if ((authmode == WLAN_EID_VENDOR_SPECIFIC) && - !memcmp(&in_ie[cnt+2], RTW_WPA_OUI23A_TYPE, 4)) { - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("\n rtw_get_wpa_ie23a: sec_idx =%d " - "in_ie[cnt+1]+2 =%d\n", - sec_idx, in_ie[cnt + 1] + 2)); - - if (wpa_ie) { - memcpy(wpa_ie, &in_ie[cnt], in_ie[cnt+1]+2); - - for (i = 0; i < (in_ie[cnt + 1] + 2); i = i + 8) { - RT_TRACE(_module_rtl871x_mlme_c_, - _drv_info_, - ("\n %2x,%2x,%2x,%2x,%2x,%2x," - "%2x,%2x\n", wpa_ie[i], - wpa_ie[i + 1], wpa_ie[i + 2], - wpa_ie[i + 3], wpa_ie[i + 4], - wpa_ie[i + 5], wpa_ie[i + 6], - wpa_ie[i + 7])); - } - } - - *wpa_len = in_ie[cnt + 1] + 2; - cnt += in_ie[cnt + 1] + 2; /* get next */ - } else { - if (authmode == _WPA2_IE_ID_) { - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("\n get_rsn_ie: sec_idx =%d in_ie" - "[cnt+1]+2 =%d\n", sec_idx, - in_ie[cnt + 1] + 2)); - - if (rsn_ie) { - memcpy(rsn_ie, &in_ie[cnt], in_ie[cnt + 1] + 2); - - for (i = 0; i < (in_ie[cnt + 1] + 2); i = i + 8) { - RT_TRACE(_module_rtl871x_mlme_c_, - _drv_info_, - ("\n %2x,%2x,%2x,%2x,%2x,%2x," - "%2x,%2x\n", rsn_ie[i], - rsn_ie[i + 1], rsn_ie[i + 2], - rsn_ie[i + 3], rsn_ie[i + 4], - rsn_ie[i + 5], rsn_ie[i + 6], - rsn_ie[i + 7])); - } - } - - *rsn_len = in_ie[cnt + 1] + 2; - cnt += in_ie[cnt + 1] + 2; /* get next */ - } else { - cnt += in_ie[cnt + 1] + 2; /* get next */ - } - } - } - - - - return *rsn_len + *wpa_len; -} - /** * rtw_get_wps_attr23a - Search a specific WPS attribute from a given WPS IE * @wps_ie: Address of WPS IE to search diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 6f42d2db9ea1..373897831f8a 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -430,8 +430,6 @@ int rtw_get_wpa2_cipher_suite23a(const u8 *s); int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); -int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len); - const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); -- cgit From 0cac3f9ee447e42c01a38a795c4f6eccd2868084 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:02 +0200 Subject: staging: rtl8723au: Declare rtw_get_wpa{2, }_cipher_suite() static Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 12 ++++++------ drivers/staging/rtl8723au/include/ieee80211.h | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index cbb1b85bd727..fa3ca9e68b34 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -436,7 +436,7 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv) return sz; } -int rtw_get_wpa_cipher_suite23a(const u8 *s) +static int rtw_get_wpa_cipher_suite(const u8 *s) { if (!memcmp(s, WPA_CIPHER_SUITE_NONE23A, WPA_SELECTOR_LEN)) return WPA_CIPHER_NONE; @@ -452,7 +452,7 @@ int rtw_get_wpa_cipher_suite23a(const u8 *s) return 0; } -int rtw_get_wpa2_cipher_suite23a(const u8 *s) +static int rtw_get_wpa2_cipher_suite(const u8 *s) { if (!memcmp(s, RSN_CIPHER_SUITE_NONE23A, RSN_SELECTOR_LEN)) return WPA_CIPHER_NONE; @@ -490,7 +490,7 @@ int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int /* group_cipher */ if (left >= WPA_SELECTOR_LEN) { - *group_cipher = rtw_get_wpa_cipher_suite23a(pos); + *group_cipher = rtw_get_wpa_cipher_suite(pos); pos += WPA_SELECTOR_LEN; left -= WPA_SELECTOR_LEN; @@ -518,7 +518,7 @@ int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int } for (i = 0; i < count; i++) { - *pairwise_cipher |= rtw_get_wpa_cipher_suite23a(pos); + *pairwise_cipher |= rtw_get_wpa_cipher_suite(pos); pos += WPA_SELECTOR_LEN; left -= WPA_SELECTOR_LEN; @@ -567,7 +567,7 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher, /* group_cipher */ if (left >= RSN_SELECTOR_LEN) { - *group_cipher = rtw_get_wpa2_cipher_suite23a(pos); + *group_cipher = rtw_get_wpa2_cipher_suite(pos); pos += RSN_SELECTOR_LEN; left -= RSN_SELECTOR_LEN; @@ -594,7 +594,7 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher, } for (i = 0; i < count; i++) { - *pairwise_cipher |= rtw_get_wpa2_cipher_suite23a(pos); + *pairwise_cipher |= rtw_get_wpa2_cipher_suite(pos); pos += RSN_SELECTOR_LEN; left -= RSN_SELECTOR_LEN; diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 373897831f8a..0ef6e79c0386 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -425,8 +425,6 @@ int rtw_ies_remove_ie23a(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u void rtw_set_supported_rate23a(u8* SupportedRates, uint mode) ; -int rtw_get_wpa_cipher_suite23a(const u8 *s); -int rtw_get_wpa2_cipher_suite23a(const u8 *s); int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); -- cgit From 3cdf27730ac7a005cc0ca15bea5743389e136030 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:03 +0200 Subject: staging: rtl8723au: Make WMM_param_handler23a() and HT_caps_handler23a() take a const u8 * Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 4 ++-- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 043ba40fadf0..b9ca08870d2f 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -504,7 +504,7 @@ void flush_all_cam_entry23a(struct rtw_adapter *padapter) memset(pmlmeinfo->FW_sta_info, 0, sizeof(pmlmeinfo->FW_sta_info)); } -int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p) +int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p) { /* struct registry_priv *pregpriv = &padapter->registrypriv; */ struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -712,7 +712,7 @@ static void bwmode_update_check(struct rtw_adapter *padapter, const u8 *p) } } -void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p) +void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p) { unsigned int i; u8 rf_type; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index b8a108bc80de..eb61012042df 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -510,10 +510,10 @@ bool is_IBSS_empty23a(struct rtw_adapter *padapter); unsigned char check_assoc_AP23a(u8 *pframe, uint len); -int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p); +int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p); void WMMOnAssocRsp23a(struct rtw_adapter *padapter); -void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p); +void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p); void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p); void HTOnAssocRsp23a(struct rtw_adapter *padapter); -- cgit From e1d143b49521e5c5859c3b7dd48ac301720000af Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:04 +0200 Subject: staging: rtl8723au: OnAssocRsp23a(): Use cfg80211_* to parse IEs Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 66 +++++++++++++++------------ 1 file changed, 37 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 1c22d1bd5237..e32df7545a00 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1805,11 +1805,12 @@ OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct sk_buff *skb = precv_frame->pkt; struct ieee80211_mgmt *pmgmt = (struct ieee80211_mgmt *) skb->data; - int res, i; + int res; unsigned short status; - u8 *p; + const u8 *p, *pie; u8 *pframe = skb->data; int pkt_len = skb->len; + int pielen; DBG_8723A("%s\n", __func__); @@ -1843,38 +1844,45 @@ OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) /* AID */ res = pmlmeinfo->aid = le16_to_cpu(pmgmt->u.assoc_resp.aid) & 0x3fff; - /* following are moved to join event callback function */ - /* to handle HT, WMM, rate adaptive, update MAC reg */ - /* for not to handle the synchronous IO in the tasklet */ - for (i = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); - i < pkt_len;) { - p = pframe + i; - - switch (p[0]) - { - case WLAN_EID_VENDOR_SPECIFIC: - if (!memcmp(p + 2, WMM_PARA_OUI23A, 6))/* WMM */ - WMM_param_handler23a(padapter, p); - break; - - case WLAN_EID_HT_CAPABILITY: /* HT caps */ - HT_caps_handler23a(padapter, p); + pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); + pielen = pkt_len - + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); + + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, + pmgmt->u.assoc_resp.variable, pielen); + if (p && p[1]) + HT_caps_handler23a(padapter, p); + + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, + pmgmt->u.assoc_resp.variable, pielen); + if (p && p[1]) + HT_info_handler23a(padapter, p); + + p = cfg80211_find_ie(WLAN_EID_ERP_INFO, + pmgmt->u.assoc_resp.variable, pielen); + if (p && p[1]) + ERP_IE_handler23a(padapter, p); + + pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); + while (true) { + p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WMM, + pie, pframe + pkt_len - pie); + if (!p) break; - case WLAN_EID_HT_OPERATION: /* HT info */ - HT_info_handler23a(padapter, p); + pie = p + p[1] + 2; + /* if this IE is too short, try the next */ + if (p[1] <= 4) + continue; + /* if this IE is WMM params, we found what we wanted */ + if (p[6] == 1) break; - - case WLAN_EID_ERP_INFO: - ERP_IE_handler23a(padapter, p); - - default: - break; - } - - i += (p[1] + 2); } + if (p && p[1]) + WMM_param_handler23a(padapter, p); + pmlmeinfo->state &= ~WIFI_FW_ASSOC_STATE; pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS; -- cgit From c9324c88533fbb15ec59de8e0d4b9d0c9d100026 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:05 +0200 Subject: staging: rtl8723au: Remove WMM_ defines Only one is used, and only describes the size of an array defined in a local function. Use sizeof() in the local function to deobfuscate it. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 7 ++++--- drivers/staging/rtl8723au/include/wifi.h | 7 ------- 2 files changed, 4 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 76e1797c8f2b..a3174c0d42f9 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2197,7 +2197,7 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, unsigned char *pframe; const u8 *p; struct ieee80211_ht_cap ht_capie; - unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; + u8 WMM_IE[7] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct ht_priv *phtpriv = &pmlmepriv->htpriv; @@ -2210,8 +2210,9 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, if (pmlmepriv->qos_option == 0) { out_len = *pout_len; pframe = rtw_set_ie23a(out_ie + out_len, - WLAN_EID_VENDOR_SPECIFIC, - _WMM_IE_Length_, WMM_IE, pout_len); + WLAN_EID_VENDOR_SPECIFIC, + sizeof(WMM_IE), WMM_IE, + pout_len); pmlmepriv->qos_option = 1; } diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 4ab28e59f8ba..07ea4c63e71b 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -52,13 +52,6 @@ #define _STATUS_CODE_ 2 #define _TIMESTAMP_ 8 -/*----------------------------------------------------------------------------- - Below is the definition for WMM -------------------------------------------------------------------------------*/ -#define _WMM_IE_Length_ 7 /* for WMM STA */ -#define _WMM_Para_Element_Length_ 24 - - /*----------------------------------------------------------------------------- Below is the definition for 802.11n ------------------------------------------------------------------------------*/ -- cgit From 6f765c20ca85b4d11d9f1e4b81d0d3251f5a4321 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:06 +0200 Subject: staging: rtl8723au: Make struct ht_priv.ht_option a bool Match the return type of rtw_restructure_ht_ie23a() accordingly Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++-- drivers/staging/rtl8723au/include/rtw_ht.h | 2 +- drivers/staging/rtl8723au/include/rtw_mlme.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index a3174c0d42f9..d48b986c06d8 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2189,8 +2189,8 @@ void rtw_joinbss_reset23a(struct rtw_adapter *padapter) } /* the fucntion is >= passive_level */ -unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, - u8 *out_ie, uint in_len, uint *pout_len) +bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, + u8 *out_ie, uint in_len, uint *pout_len) { u32 out_len; int max_rx_ampdu_factor; diff --git a/drivers/staging/rtl8723au/include/rtw_ht.h b/drivers/staging/rtl8723au/include/rtw_ht.h index 86ce86b6b69b..f0863765f74e 100644 --- a/drivers/staging/rtl8723au/include/rtw_ht.h +++ b/drivers/staging/rtl8723au/include/rtw_ht.h @@ -21,7 +21,7 @@ struct ht_priv { - u32 ht_option; + bool ht_option; u32 ampdu_enable;/* for enable Tx A-MPDU */ /* u8 baddbareq_issued[16]; */ u32 tx_amsdu_enable;/* for enable Tx A-MSDU */ diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index 4d327ba775b0..a11b5bd9e7af 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -356,8 +356,8 @@ __le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie); void rtw_joinbss_reset23a(struct rtw_adapter *padapter); -unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, - u8 *out_ie, uint in_len, uint *pout_len); +bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, + u8 *out_ie, uint in_len, uint *pout_len); void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len); void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter, -- cgit From 6a5f657db5cb7e0ced04d085154d7f96296488e6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:07 +0200 Subject: staging: rtl8723au: Be consistent in how htpriv.ht_option is checked Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 6 +++--- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 6 +++--- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index d67a5f1bfc44..a52662e8a2f6 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -1391,7 +1391,7 @@ static int rtw_ht_operation_update(struct rtw_adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv; - if (pmlmepriv->htpriv.ht_option == true) + if (pmlmepriv->htpriv.ht_option) return 0; /* if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed) */ @@ -1627,7 +1627,7 @@ void bss_cap_update_on_sta_join23a(struct rtw_adapter *padapter, struct sta_info psta->no_ht_set = 1; pmlmepriv->num_sta_no_ht++; } - if (pmlmepriv->htpriv.ht_option == true) { + if (pmlmepriv->htpriv.ht_option) { DBG_8723A("%s STA " MAC_FMT " - no HT, num of non-HT stations %d\n", __func__, MAC_ARG(psta->hwaddr), @@ -1865,7 +1865,7 @@ void sta_info_update23a(struct rtw_adapter *padapter, struct sta_info *psta) psta->htpriv.ht_option = false; } - if (pmlmepriv->htpriv.ht_option == false) + if (!pmlmepriv->htpriv.ht_option) psta->htpriv.ht_option = false; update_sta_info23a_apmode23a(padapter, psta); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index d48b986c06d8..31c414ab4109 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2409,7 +2409,7 @@ void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter, phtpriv = &psta->htpriv; - if (phtpriv->ht_option == true && phtpriv->ampdu_enable == true) { + if (phtpriv->ht_option && phtpriv->ampdu_enable == true) { issued = (phtpriv->agg_enable_bitmap>>priority)&0x1; issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index e32df7545a00..ae8d38f7bfbb 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1666,7 +1666,7 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) } else pstat->flags &= ~WLAN_STA_HT; - if (pmlmepriv->htpriv.ht_option == false && pstat->flags & WLAN_STA_HT){ + if (!pmlmepriv->htpriv.ht_option && pstat->flags & WLAN_STA_HT){ status = WLAN_STATUS_UNSPECIFIED_FAILURE; goto OnAssocReq23aFail; } @@ -3479,7 +3479,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) &pattrib->pktlen); /* HT caps */ - if (padapter->mlmepriv.htpriv.ht_option == true) { + if (padapter->mlmepriv.htpriv.ht_option) { p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len); if (p && !is_ap_in_tkip23a(padapter)) { @@ -5848,7 +5848,7 @@ static void addba_timer_hdl(unsigned long data) phtpriv = &psta->htpriv; - if (phtpriv->ht_option == true && phtpriv->ampdu_enable == true) { + if (phtpriv->ht_option && phtpriv->ampdu_enable == true) { if (phtpriv->candidate_tid_bitmap) phtpriv->candidate_tid_bitmap = 0x0; } diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index b9ca08870d2f..3195b444e3bc 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -727,7 +727,7 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p) if (!p) return; - if (phtpriv->ht_option == false) + if (!phtpriv->ht_option) return; pmlmeinfo->HT_caps_enable = 1; @@ -784,7 +784,7 @@ void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p) if (!p) return; - if (phtpriv->ht_option == false) + if (!phtpriv->ht_option) return; if (p[1] != sizeof(struct ieee80211_ht_operation)) -- cgit From 47e5d2f26d86d8bf1b5ecff2994f939e4283ffeb Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:08 +0200 Subject: staging: rtl8723au: Make struct htpriv.ampdu_enable a bool Be consistent in parsing it's value Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++--- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- drivers/staging/rtl8723au/include/rtw_ht.h | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 31c414ab4109..4a33e7d5d412 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2291,8 +2291,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) ie_len -= bcn_fixed_size; /* maybe needs check if ap supports rx ampdu. */ - if (phtpriv->ampdu_enable == false && - pregistrypriv->ampdu_enable == 1) { + if (!phtpriv->ampdu_enable && pregistrypriv->ampdu_enable == 1) { if (pregistrypriv->wifi_spec == 1) phtpriv->ampdu_enable = false; else @@ -2409,7 +2408,7 @@ void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter, phtpriv = &psta->htpriv; - if (phtpriv->ht_option && phtpriv->ampdu_enable == true) { + if (phtpriv->ht_option && phtpriv->ampdu_enable) { issued = (phtpriv->agg_enable_bitmap>>priority)&0x1; issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index ae8d38f7bfbb..9b8566c25f7c 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -5848,7 +5848,7 @@ static void addba_timer_hdl(unsigned long data) phtpriv = &psta->htpriv; - if (phtpriv->ht_option && phtpriv->ampdu_enable == true) { + if (phtpriv->ht_option && phtpriv->ampdu_enable) { if (phtpriv->candidate_tid_bitmap) phtpriv->candidate_tid_bitmap = 0x0; } diff --git a/drivers/staging/rtl8723au/include/rtw_ht.h b/drivers/staging/rtl8723au/include/rtw_ht.h index f0863765f74e..cfc947daf08b 100644 --- a/drivers/staging/rtl8723au/include/rtw_ht.h +++ b/drivers/staging/rtl8723au/include/rtw_ht.h @@ -22,7 +22,7 @@ struct ht_priv { bool ht_option; - u32 ampdu_enable;/* for enable Tx A-MPDU */ + bool ampdu_enable;/* for enable Tx A-MPDU */ /* u8 baddbareq_issued[16]; */ u32 tx_amsdu_enable;/* for enable Tx A-MSDU */ u32 tx_amdsu_maxlen; /* 1: 8k, 0:4k ; default:8k, for tx */ -- cgit From 88e06f020083d7d276fda6df331f96469f1517c8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:09 +0200 Subject: staging: rtl8723au: issue_auth(): Convert to using struct ieee80211_mgmt This reduces the dependency of rtw_set_fixed_ie23a() which is scheduled to go away. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 101 +++++++++++--------------- 1 file changed, 44 insertions(+), 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 9b8566c25f7c..616bb7c1ad21 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3036,9 +3036,10 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; unsigned int val32; unsigned short val16; + u16 auth_algo; int use_shared_key = 0; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; @@ -3055,23 +3056,20 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_AUTH); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); + pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.auth.variable); if (psta) { /* for AP mode */ #ifdef CONFIG_8723AU_AP_MODE - - ether_addr_copy(pwlanhdr->addr1, psta->hwaddr); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->da, psta->hwaddr); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, myid(&padapter->eeprompriv)); /* setting auth algo number */ val16 = (u16)psta->authalg; @@ -3079,29 +3077,19 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, if (status != WLAN_STATUS_SUCCESS) val16 = 0; - if (val16) { - val16 = cpu_to_le16(val16); + if (val16) use_shared_key = 1; - } - pframe = rtw_set_fixed_ie23a(pframe, _AUTH_ALGM_NUM_, - (unsigned char *)&val16, - &pattrib->pktlen); + mgmt->u.auth.auth_alg = cpu_to_le16(val16); /* setting auth seq number */ - val16 = (u16)psta->auth_seq; - val16 = cpu_to_le16(val16); - pframe = rtw_set_fixed_ie23a(pframe, _AUTH_SEQ_NUM_, - (unsigned char *)&val16, - &pattrib->pktlen); + mgmt->u.auth.auth_transaction = + cpu_to_le16((u16)psta->auth_seq); /* setting status code... */ - val16 = status; - val16 = cpu_to_le16(val16); - pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_, - (unsigned char *)&val16, - &pattrib->pktlen); + mgmt->u.auth.status_code = cpu_to_le16(status); + pframe = mgmt->u.auth.variable; /* added challenging text... */ if ((psta->auth_seq == 2) && (psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) @@ -3109,19 +3097,21 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, psta->chg_txt, &pattrib->pktlen); #endif } else { - ether_addr_copy(pwlanhdr->addr1, - get_my_bssid23a(&pmlmeinfo->network)); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, + struct ieee80211_mgmt *iv_mgmt; + + ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); /* setting auth algo number */ /* 0:OPEN System, 1:Shared key */ - val16 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)? 1: 0; - if (val16) { - val16 = cpu_to_le16(val16); + if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) { use_shared_key = 1; - } + auth_algo = WLAN_AUTH_SHARED_KEY; + } else + auth_algo = WLAN_AUTH_OPEN; + /* DBG_8723A("%s auth_algo = %s auth_seq =%d\n", __func__, (pmlmeinfo->auth_algo == 0)?"OPEN":"SHARED", pmlmeinfo->auth_seq); */ @@ -3130,35 +3120,32 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) { + u32 *piv = (u32 *)&mgmt->u.auth; + + iv_mgmt = (struct ieee80211_mgmt *)(pframe + 4); /* DBG_8723A("==> iv(%d), key_index(%d)\n", pmlmeinfo->iv, pmlmeinfo->key_index); */ - val32 = ((pmlmeinfo->iv++) | - (pmlmeinfo->key_index << 30)); - val32 = cpu_to_le32(val32); - pframe = rtw_set_fixed_ie23a(pframe, 4, - (unsigned char *)&val32, - &pattrib->pktlen); + val32 = (pmlmeinfo->iv & 0x3fffffff) | + (pmlmeinfo->key_index << 30); + pmlmeinfo->iv++; + put_unaligned_le32(val32, piv); + + pattrib->pktlen += 4; pattrib->iv_len = IEEE80211_WEP_IV_LEN; - } + } else + iv_mgmt = mgmt; - pframe = rtw_set_fixed_ie23a(pframe, _AUTH_ALGM_NUM_, - (unsigned char *)&val16, - &pattrib->pktlen); + iv_mgmt->u.auth.auth_alg = cpu_to_le16(auth_algo); /* setting auth seq number */ - val16 = pmlmeinfo->auth_seq; - val16 = cpu_to_le16(val16); - pframe = rtw_set_fixed_ie23a(pframe, _AUTH_SEQ_NUM_, - (unsigned char *)&val16, - &pattrib->pktlen); + iv_mgmt->u.auth.auth_transaction = + cpu_to_le16(pmlmeinfo->auth_seq); /* setting status code... */ - val16 = status; - val16 = cpu_to_le16(val16); - pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_, - (unsigned char *)&val16, - &pattrib->pktlen); + iv_mgmt->u.auth.status_code = cpu_to_le16(status); + + pframe = iv_mgmt->u.auth.variable; /* then checking to see if sending challenging text... */ if ((pmlmeinfo->auth_seq == 3) && @@ -3168,7 +3155,7 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, pmlmeinfo->chg_txt, &pattrib->pktlen); - pwlanhdr->frame_control |= + mgmt->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr); -- cgit From c144c3bbd50b0a900d7f952333e5cf76377d0109 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:10 +0200 Subject: staging: rtl8723au: issue_assocrsp(): Use struct ieee80211_mgmt instead of rtw_set_fixed_ie23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 33 +++++++++++---------------- 1 file changed, 13 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 616bb7c1ad21..e5df86a93a3f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3182,7 +3182,7 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, struct sta_info *pstat, u16 pkt_type) { struct xmit_frame *pmgntframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; struct pkt_attrib *pattrib; unsigned char *pframe; unsigned short val; @@ -3207,37 +3207,30 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | pkt_type); + mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | pkt_type); - ether_addr_copy(pwlanhdr->addr1, pstat->hwaddr); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->da, pstat->hwaddr); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen += pattrib->hdrlen; - pframe += pattrib->hdrlen; + pattrib->pktlen = + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); /* capability */ val = *(unsigned short *)rtw_get_capability23a_from_ie(ie); - pframe = rtw_set_fixed_ie23a(pframe, _CAPABILITY_, - (unsigned char *)&val, &pattrib->pktlen); + mgmt->u.assoc_resp.capab_info = val; + mgmt->u.assoc_resp.status_code = cpu_to_le16(status); + mgmt->u.assoc_resp.aid = cpu_to_le16(pstat->aid | BIT(14) | BIT(15)); - status = cpu_to_le16(status); - pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_, - (unsigned char *)&status, - &pattrib->pktlen); - - val = cpu_to_le16(pstat->aid | BIT(14) | BIT(15)); - pframe = rtw_set_fixed_ie23a(pframe, _ASOC_ID_, (unsigned char *)&val, - &pattrib->pktlen); + pframe = mgmt->u.assoc_resp.variable; if (pstat->bssratelen <= 8) { pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES, -- cgit From f89547b651d842035c982f43d4303c0e7b890191 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:13 +0200 Subject: staging: rtl8723au: _issue_deauth(): Use struct ieee80211_mgmt to build frame Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index e5df86a93a3f..d1092565014c 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3840,8 +3840,7 @@ static int _issue_deauth(struct rtw_adapter *padapter, unsigned char *da, { struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; - unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -3860,27 +3859,21 @@ static int _issue_deauth(struct rtw_adapter *padapter, unsigned char *da, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET); - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_DEAUTH); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH); - ether_addr_copy(pwlanhdr->addr1, da); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->da, da); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); + pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 2; - reason = cpu_to_le16(reason); - pframe = rtw_set_fixed_ie23a(pframe, WLAN_REASON_PREV_AUTH_NOT_VALID, - (unsigned char *)&reason, - &pattrib->pktlen); + mgmt->u.deauth.reason_code = cpu_to_le16(reason); pattrib->last_txcmdsz = pattrib->pktlen; -- cgit From 7ed61b5b305d107ccb627d7c285a240574b86864 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:14 +0200 Subject: staging: rtl8723au: issue_action_spct_ch_switch23a(): Use struct ieee80211_mgmt Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 32 +++++++++++---------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index d1092565014c..b397029c937e 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3946,10 +3946,9 @@ void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter, struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - u8 category, action; DBG_8723A("%s(%s): ra ="MAC_FMT", ch:%u, offset:%u\n", __func__, padapter->pnetdev->name, MAC_ARG(ra), new_ch, ch_offset); @@ -3964,29 +3963,24 @@ void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET); - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); - ether_addr_copy(pwlanhdr->addr1, ra); /* RA */ - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); /* TA */ - ether_addr_copy(pwlanhdr->addr3, ra); /* DA = RA */ + ether_addr_copy(mgmt->da, ra); /* RA */ + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); /* TA */ + ether_addr_copy(mgmt->bssid, ra); /* DA = RA */ - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); - - /* category, action */ - category = WLAN_CATEGORY_SPECTRUM_MGMT; - action = WLAN_ACTION_SPCT_CHL_SWITCH; + mgmt->u.action.category = WLAN_CATEGORY_SPECTRUM_MGMT; + mgmt->u.action.u.chan_switch.action_code = WLAN_ACTION_SPCT_CHL_SWITCH; - pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen); - pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen); + pframe = mgmt->u.action.u.chan_switch.variable; + pattrib->pktlen = offsetof(struct ieee80211_mgmt, + u.action.u.chan_switch.variable); pframe = rtw_set_ie23a_ch_switch (pframe, &pattrib->pktlen, 0, new_ch, 0); -- cgit From 85d5120d5234f5655662b4eda697c0b1af72bca4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:15 +0200 Subject: staging: rtl8723au: issue_action_BSSCoexistPacket(): Use struct ieee80211_mgmt This gets rid of the rtw_set_fixed_ie23a() usage here. Note that this abuses ieee80211_mgmt.u.action.u.chan_switch for now, since the correct defines are currently missing, and this one matches. Need to fix up the definitions in ieee80211.h and afterwards fix it up here. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 35 ++++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index b397029c937e..eedac9a3ebaa 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4177,11 +4177,10 @@ out: static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter) { struct list_head *plist, *phead, *ptmp; - unsigned char category, action; struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; u8 *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; struct wlan_network *pnetwork; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -4201,9 +4200,6 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter) DBG_8723A("%s\n", __func__); - category = WLAN_CATEGORY_PUBLIC; - action = ACT_PUBLIC_BSSCOEXIST; - pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); if (!pmgntframe) return; @@ -4215,24 +4211,29 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter) memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); - ether_addr_copy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network)); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); + mgmt->u.action.category = WLAN_CATEGORY_PUBLIC; + /* + * This is cheating, but as there is currently no coexist_action + * defined in struct struct ieee80211_mgmt, abuse chan_switch + * for now, since it matches. + */ + mgmt->u.action.u.chan_switch.action_code = ACT_PUBLIC_BSSCOEXIST; - pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen); - pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen); + pframe = mgmt->u.action.u.chan_switch.variable; + pattrib->pktlen = offsetof(struct ieee80211_mgmt, + u.action.u.chan_switch.variable); if (pmlmepriv->num_FortyMHzIntolerant > 0) { u8 iedata = BIT(2);/* 20 MHz BSS Width Request */ -- cgit From 372713a942c7eee27fe67a661902c6e30c014930 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:16 +0200 Subject: staging: rtl8723au: Do not xmit BSS Coexistence management action frames The driver should not be issuing BSS Coexistence management action frames when scanning. This isn't required by the spec, and if needed, these should come from wpa_s instead. Recommended by Johannes Berg. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 138 -------------------------- 1 file changed, 138 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index eedac9a3ebaa..051ea49aa18e 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4174,140 +4174,6 @@ out: dump_mgntframe23a(padapter, pmgntframe); } -static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter) -{ - struct list_head *plist, *phead, *ptmp; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - u8 *pframe; - struct ieee80211_mgmt *mgmt; - struct wlan_network *pnetwork; - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - struct rtw_queue *queue = &pmlmepriv->scanned_queue; - u8 InfoContent[16] = {0}; - u8 ICS[8][15]; - int i; - - if (pmlmepriv->num_FortyMHzIntolerant == 0 || - pmlmepriv->num_sta_no_ht == 0) - return; - - if (pmlmeinfo->bwmode_updated) - return; - - DBG_8723A("%s\n", __func__); - - pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); - if (!pmgntframe) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib23a(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET; - mgmt = (struct ieee80211_mgmt *)pframe; - - mgmt->frame_control = - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); - - ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network)); - ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); - ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - - mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); - pmlmeext->mgnt_seq++; - - mgmt->u.action.category = WLAN_CATEGORY_PUBLIC; - /* - * This is cheating, but as there is currently no coexist_action - * defined in struct struct ieee80211_mgmt, abuse chan_switch - * for now, since it matches. - */ - mgmt->u.action.u.chan_switch.action_code = ACT_PUBLIC_BSSCOEXIST; - - pframe = mgmt->u.action.u.chan_switch.variable; - pattrib->pktlen = offsetof(struct ieee80211_mgmt, - u.action.u.chan_switch.variable); - - if (pmlmepriv->num_FortyMHzIntolerant > 0) { - u8 iedata = BIT(2);/* 20 MHz BSS Width Request */ - - pframe = rtw_set_ie23a(pframe, WLAN_EID_BSS_COEX_2040, 1, - &iedata, &pattrib->pktlen); - } - - if (pmlmepriv->num_sta_no_ht <= 0) - goto out; - - memset(ICS, 0, sizeof(ICS)); - - spin_lock_bh(&pmlmepriv->scanned_queue.lock); - - phead = get_list_head(queue); - plist = phead->next; - - list_for_each_safe(plist, ptmp, phead) { - const u8 *p; - struct wlan_bssid_ex *pbss_network; - - pnetwork = container_of(plist, struct wlan_network, list); - - pbss_network = &pnetwork->network; - - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - pbss_network->IEs + _FIXED_IE_LENGTH_, - pbss_network->IELength -_FIXED_IE_LENGTH_); - if (!p || !p[1]) { /* non-HT */ - if (pbss_network->DSConfig <= 0 || - pbss_network->DSConfig > 14) - continue; - - ICS[0][pbss_network->DSConfig] = 1; - - if (ICS[0][0] == 0) - ICS[0][0] = 1; - } - - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - for (i = 0; i < 8;i++) { - if (ICS[i][0] == 1) { - int j, k = 0; - - InfoContent[k] = i; - /* SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent, i); */ - k++; - - for (j = 1; j <= 14; j++) { - if (ICS[i][j] == 1) { - if (k < 16) { - /* channel number */ - InfoContent[k] = j; - k++; - } - } - } - - pframe = rtw_set_ie23a(pframe, - EID_BSSIntolerantChlReport, k, - InfoContent, &pattrib->pktlen); - } - } - -out: - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe23a(padapter, pmgntframe); -} - int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr) { struct sta_priv *pstapriv = &padapter->stapriv; @@ -4485,10 +4351,6 @@ static void rtw_site_survey(struct rtw_adapter *padapter) pmlmeext->chan_scan_time = SURVEY_TO; pmlmeext->sitesurvey_res.state = SCAN_DISABLE; - - issue_action_BSSCoexistPacket(padapter); - issue_action_BSSCoexistPacket(padapter); - issue_action_BSSCoexistPacket(padapter); } return; -- cgit From 2e74d336edb945b4a1f851e821001093e4094729 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:17 +0200 Subject: staging: rtl8723au: Let cfg80211 handle public action management frames The driver shouldn't be dealing with public action management frames. Let these go directly to the cfg80211 layer which can defer them to userland if needed. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 26 ---- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 132 +++------------------ drivers/staging/rtl8723au/include/ieee80211.h | 23 +--- drivers/staging/rtl8723au/include/ioctl_cfg80211.h | 3 - drivers/staging/rtl8723au/include/wifi.h | 1 - drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 43 +------ 6 files changed, 18 insertions(+), 210 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index fa3ca9e68b34..9f6dd779b694 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -894,29 +894,3 @@ u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, } return max_rate; } - -static const char *_action_public_str23a[] = { - "ACT_PUB_BSSCOEXIST", - "ACT_PUB_DSE_ENABLE", - "ACT_PUB_DSE_DEENABLE", - "ACT_PUB_DSE_REG_LOCATION", - "ACT_PUB_EXT_CHL_SWITCH", - "ACT_PUB_DSE_MSR_REQ", - "ACT_PUB_DSE_MSR_RPRT", - "ACT_PUB_MP", - "ACT_PUB_DSE_PWR_CONSTRAINT", - "ACT_PUB_VENDOR", - "ACT_PUB_GAS_INITIAL_REQ", - "ACT_PUB_GAS_INITIAL_RSP", - "ACT_PUB_GAS_COMEBACK_REQ", - "ACT_PUB_GAS_COMEBACK_RSP", - "ACT_PUB_TDLS_DISCOVERY_RSP", - "ACT_PUB_LOCATION_TRACK", - "ACT_PUB_RSVD", -}; - -const char *action_public_str23a(u8 action) -{ - action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action; - return _action_public_str23a[action]; -} diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 051ea49aa18e..80a822cc8bff 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2135,136 +2135,32 @@ static int OnAction23a_back23a(struct rtw_adapter *padapter, return _SUCCESS; } -static int rtw_action_public_decache(struct recv_frame *recv_frame, s32 token) -{ - struct rtw_adapter *adapter = recv_frame->adapter; - struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv; - struct sk_buff *skb = recv_frame->pkt; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u16 seq_ctrl; - - seq_ctrl = ((recv_frame->attrib.seq_num&0xffff) << 4) | - (recv_frame->attrib.frag_num & 0xf); - - if (ieee80211_has_retry(hdr->frame_control)) { - if (token >= 0) { - if ((seq_ctrl == mlmeext->action_public_rxseq) && - (token == mlmeext->action_public_dialog_token)) { - DBG_8723A("%s(%s): seq_ctrl = 0x%x, " - "rxseq = 0x%x, token:%d\n", __func__, - adapter->pnetdev->name, seq_ctrl, - mlmeext->action_public_rxseq, token); - return _FAIL; - } - } else { - if (seq_ctrl == mlmeext->action_public_rxseq) { - DBG_8723A("%s(%s): seq_ctrl = 0x%x, " - "rxseq = 0x%x\n", __func__, - adapter->pnetdev->name, seq_ctrl, - mlmeext->action_public_rxseq); - return _FAIL; - } - } - } - - mlmeext->action_public_rxseq = seq_ctrl; - - if (token >= 0) - mlmeext->action_public_dialog_token = token; - - return _SUCCESS; -} - -static int on_action_public23a_p2p(struct recv_frame *precv_frame) -{ - struct sk_buff *skb = precv_frame->pkt; - u8 *pframe = skb->data; - u8 *frame_body; - u8 dialogToken = 0; - - frame_body = (unsigned char *) - (pframe + sizeof(struct ieee80211_hdr_3addr)); - - dialogToken = frame_body[7]; - - if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL) - return _FAIL; - - return _SUCCESS; -} - -static int on_action_public23a_vendor(struct recv_frame *precv_frame) -{ - unsigned int ret = _FAIL; - struct sk_buff *skb = precv_frame->pkt; - u8 *pframe = skb->data; - u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr); - - if (!memcmp(frame_body + 2, P2P_OUI23A, 4)) { - ret = on_action_public23a_p2p(precv_frame); - } - - return ret; -} - -static unsigned int -on_action_public23a_default(struct recv_frame *precv_frame, u8 action) -{ - unsigned int ret = _FAIL; - struct sk_buff *skb = precv_frame->pkt; - u8 *pframe = skb->data; - uint frame_len = skb->len; - u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr); - u8 token; - struct rtw_adapter *adapter = precv_frame->adapter; - int cnt = 0; - char msg[64]; - - token = frame_body[2]; - - if (rtw_action_public_decache(precv_frame, token) == _FAIL) - goto exit; - - cnt += sprintf((msg+cnt), "%s(token:%u)", - action_public_str23a(action), token); - rtw_cfg80211_rx_action(adapter, pframe, frame_len, msg); - - ret = _SUCCESS; - -exit: - return ret; -} - static int on_action_public23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) { - int ret = _FAIL; struct sk_buff *skb = precv_frame->pkt; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; u8 *pframe = skb->data; - u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr); - u8 category, action; + int freq, channel; /* check RA matches or not */ if (!ether_addr_equal(myid(&padapter->eeprompriv), hdr->addr1)) - goto exit; + return _FAIL; - category = frame_body[0]; - if (category != WLAN_CATEGORY_PUBLIC) - goto exit; + channel = rtw_get_oper_ch23a(padapter); - action = frame_body[1]; - switch (action) { - case ACT_PUBLIC_VENDOR: - ret = on_action_public23a_vendor(precv_frame); - break; - default: - ret = on_action_public23a_default(precv_frame, action); - break; - } + if (channel <= RTW_CH_MAX_2G_CHANNEL) + freq = ieee80211_channel_to_frequency(channel, + IEEE80211_BAND_2GHZ); + else + freq = ieee80211_channel_to_frequency(channel, + IEEE80211_BAND_5GHZ); -exit: - return ret; + if (cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pframe, + skb->len, 0, GFP_ATOMIC)) + return _SUCCESS; + + return _FAIL; } static int diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 0ef6e79c0386..f6e982e3c728 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -315,6 +315,7 @@ struct ieee80211_snap_hdr { #define MAX_RATES_LENGTH 12 #define MAX_RATES_EX_LENGTH 16 #define MAX_CHANNEL_NUMBER 161 +#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */ #define MAX_WPA_IE_LEN 256 #define MAX_WPS_IE_LEN 256 @@ -335,26 +336,6 @@ join_res: #define MAXTID 16 -enum _PUBLIC_ACTION{ - ACT_PUBLIC_BSSCOEXIST = 0, /* 20/40 BSS Coexistence */ - ACT_PUBLIC_DSE_ENABLE = 1, - ACT_PUBLIC_DSE_DEENABLE = 2, - ACT_PUBLIC_DSE_REG_LOCATION = 3, - ACT_PUBLIC_EXT_CHL_SWITCH = 4, - ACT_PUBLIC_DSE_MSR_REQ = 5, - ACT_PUBLIC_DSE_MSR_RPRT = 6, - ACT_PUBLIC_MP = 7, /* Measurement Pilot */ - ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8, - ACT_PUBLIC_VENDOR = 9, /* for WIFI_DIRECT */ - ACT_PUBLIC_GAS_INITIAL_REQ = 10, - ACT_PUBLIC_GAS_INITIAL_RSP = 11, - ACT_PUBLIC_GAS_COMEBACK_REQ = 12, - ACT_PUBLIC_GAS_COMEBACK_RSP = 13, - ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14, - ACT_PUBLIC_LOCATION_TRACK = 15, - ACT_PUBLIC_MAX -}; - #define WME_OUI_TYPE 2 #define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0 #define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1 @@ -446,6 +427,4 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork); u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, struct ieee80211_mcs_info *mcs); -const char *action_public_str23a(u8 action); - #endif /* IEEE80211_H */ diff --git a/drivers/staging/rtl8723au/include/ioctl_cfg80211.h b/drivers/staging/rtl8723au/include/ioctl_cfg80211.h index 63e921f921d3..3a4ead54f948 100644 --- a/drivers/staging/rtl8723au/include/ioctl_cfg80211.h +++ b/drivers/staging/rtl8723au/include/ioctl_cfg80211.h @@ -61,9 +61,6 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter, unsigned char *da, unsigned short reason); #endif /* CONFIG_8723AU_AP_MODE */ -void rtw_cfg80211_rx_action(struct rtw_adapter *adapter, u8 *frame, - uint frame_len, const char*msg); - bool rtw_cfg80211_pwr_mgmt(struct rtw_adapter *adapter); #endif /* __IOCTL_CFG80211_H__ */ diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 07ea4c63e71b..3f64546ef807 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -32,7 +32,6 @@ #define _AUTH_IE_OFFSET_ 6 #define _DEAUTH_IE_OFFSET_ 0 #define _BEACON_IE_OFFSET_ 12 -#define _PUBLIC_ACTION_IE_OFFSET_ 8 #define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index d2fa9b20260d..0d581c88f17c 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -26,8 +26,6 @@ #define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 /* ms */ #define RTW_MAX_NUM_PMKIDS 4 -#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */ - static const u32 rtw_cipher_suites[] = { WLAN_CIPHER_SUITE_WEP40, WLAN_CIPHER_SUITE_WEP104, @@ -2593,11 +2591,8 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, MAC_ARG(mgmt->da), __func__, ndev->name); category = mgmt->u.action.category; action = mgmt->u.action.u.wme_action.action_code; - if (mgmt->u.action.category == WLAN_CATEGORY_PUBLIC) - DBG_8723A("RTW_Tx:%s\n", action_public_str23a(action)); - else - DBG_8723A("RTW_Tx:category(%u), action(%u)\n", category, - action); + DBG_8723A("RTW_Tx:category(%u), action(%u)\n", + category, action); /* starting alloc mgmt frame to dump it */ pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); @@ -3011,34 +3006,6 @@ static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev, } #endif /* CONFIG_8723AU_AP_MODE */ -void rtw_cfg80211_rx_action(struct rtw_adapter *adapter, u8 *frame, - uint frame_len, const char *msg) -{ - struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *)frame; - s32 freq; - int channel; - - channel = rtw_get_oper_ch23a(adapter); - - DBG_8723A("RTW_Rx:cur_ch =%d\n", channel); - if (msg) - DBG_8723A("RTW_Rx:%s\n", msg); - else - DBG_8723A("RTW_Rx:category(%u), action(%u)\n", - hdr->u.action.category, - hdr->u.action.u.wme_action.action_code); - - if (channel <= RTW_CH_MAX_2G_CHANNEL) - freq = ieee80211_channel_to_frequency(channel, - IEEE80211_BAND_2GHZ); - else - freq = ieee80211_channel_to_frequency(channel, - IEEE80211_BAND_5GHZ); - - cfg80211_rx_mgmt(adapter->rtw_wdev, freq, 0, frame, frame_len, - 0, GFP_ATOMIC); -} - static int _cfg80211_rtw_mgmt_tx(struct rtw_adapter *padapter, u8 tx_ch, const u8 *buf, size_t len) { @@ -3145,11 +3112,7 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, MAC_ARG(hdr->da)); category = hdr->u.action.category; action = hdr->u.action.u.wme_action.action_code; - if (category == WLAN_CATEGORY_PUBLIC) - DBG_8723A("RTW_Tx:%s\n", action_public_str23a(action)); - else - DBG_8723A("RTW_Tx:category(%u), action(%u)\n", - category, action); + DBG_8723A("RTW_Tx:category(%u), action(%u)\n", category, action); do { dump_cnt++; -- cgit From cc531f6154167893f1cf8ab084871fe06b38fb2b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:18 +0200 Subject: staging: rtl8723au: ioctl_cfg80211.c: Use struct ieee80211_mgmt to build mgmt frame Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 30 ++++++++--------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 0d581c88f17c..2fdc2b58312b 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2437,17 +2437,15 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter, { s32 freq; int channel; - u8 *pmgmt_frame; uint frame_len; - struct ieee80211_hdr *pwlanhdr; - u8 mgmt_buf[128]; + struct ieee80211_mgmt mgmt; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct net_device *ndev = padapter->pnetdev; DBG_8723A("%s(padapter =%p,%s)\n", __func__, padapter, ndev->name); - memset(mgmt_buf, 0, 128); + memset(&mgmt, 0, sizeof(struct ieee80211_mgmt)); #if defined(RTW_USE_CFG80211_STA_EVENT) cfg80211_del_sta(ndev, da, GFP_ATOMIC); @@ -2460,29 +2458,21 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter, freq = ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); - pmgmt_frame = mgmt_buf; - pwlanhdr = (struct ieee80211_hdr *)pmgmt_frame; - - pwlanhdr->frame_control = + mgmt.frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH); - ether_addr_copy(pwlanhdr->addr1, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr2, da); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt.da, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt.sa, da); + ether_addr_copy(mgmt.bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt.seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pmgmt_frame += sizeof(struct ieee80211_hdr_3addr); - frame_len = sizeof(struct ieee80211_hdr_3addr); + mgmt.u.disassoc.reason_code = cpu_to_le16(reason); - reason = cpu_to_le16(reason); - pmgmt_frame = rtw_set_fixed_ie23a(pmgmt_frame, - WLAN_REASON_PREV_AUTH_NOT_VALID, - (unsigned char *)&reason, &frame_len); + frame_len = sizeof(struct ieee80211_hdr_3addr) + 2; - cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, mgmt_buf, frame_len, + cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, (u8 *)&mgmt, frame_len, 0, GFP_ATOMIC); #endif /* defined(RTW_USE_CFG80211_STA_EVENT) */ } -- cgit From a491548d6641f2dc4a83bb6ab337cccfdd53afe4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:19 +0200 Subject: staging: rtl8723au: issue_action_BA23a(): Use struct ieee80211_mgmt to build action frames Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 149 +++++++++++++------------- 1 file changed, 74 insertions(+), 75 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 80a822cc8bff..ff0800e836e3 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3892,17 +3892,15 @@ void issue_action_BA23a(struct rtw_adapter *padapter, const unsigned char *raddr, unsigned char action, unsigned short status) { - u8 category = WLAN_CATEGORY_BACK; u16 start_seq; u16 BA_para_set; - u16 reason_code; u16 BA_timeout_value; u16 BA_starting_seqctrl; + u16 BA_para; int max_rx_ampdu_factor; struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; - u8 *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -3911,8 +3909,7 @@ void issue_action_BA23a(struct rtw_adapter *padapter, struct registry_priv *pregpriv = &padapter->registrypriv; u8 tendaAPMac[] = {0xC8, 0x3A, 0x35}; - DBG_8723A("%s, category =%d, action =%d, status =%d\n", - __func__, category, action, status); + DBG_8723A("%s, action =%d, status =%d\n", __func__, action, status); pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); if (!pmgntframe) @@ -3924,40 +3921,36 @@ void issue_action_BA23a(struct rtw_adapter *padapter, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET); - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); - /* memcpy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN); */ - ether_addr_copy(pwlanhdr->addr1, raddr); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->da, raddr); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); + mgmt->u.action.category = WLAN_CATEGORY_BACK; - pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen); - pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen); + pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 1; status = cpu_to_le16(status); - if (category != 3) - goto out; + switch (action) { + case WLAN_ACTION_ADDBA_REQ: + pattrib->pktlen += sizeof(mgmt->u.action.u.addba_req); + + mgmt->u.action.u.addba_req.action_code = action; - switch (action) - { - case 0: /* ADDBA req */ do { pmlmeinfo->dialogToken++; } while (pmlmeinfo->dialogToken == 0); - pframe = rtw_set_fixed_ie23a(pframe, 1, &pmlmeinfo->dialogToken, - &pattrib->pktlen); + + mgmt->u.action.u.addba_req.dialog_token = + pmlmeinfo->dialogToken; if (rtl8723a_BT_coexist(padapter) && rtl8723a_BT_using_antenna_1(padapter) && @@ -3978,51 +3971,60 @@ void issue_action_BA23a(struct rtw_adapter *padapter, /* immediate ack & 64 buffer size */ BA_para_set = (0x1002 | ((status & 0xf) << 2)); } - BA_para_set = cpu_to_le16(BA_para_set); - pframe = rtw_set_fixed_ie23a(pframe, 2, - (unsigned char *)&BA_para_set, - &pattrib->pktlen); + + put_unaligned_le16(BA_para_set, + &mgmt->u.action.u.addba_req.capab); BA_timeout_value = 5000;/* 5ms */ BA_timeout_value = cpu_to_le16(BA_timeout_value); - pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *) - &BA_timeout_value, - &pattrib->pktlen); + put_unaligned_le16(BA_timeout_value, + &mgmt->u.action.u.addba_req.timeout); + + psta = rtw_get_stainfo23a(pstapriv, raddr); + if (psta) { + int idx; - /* if ((psta = rtw_get_stainfo23a(pstapriv, - pmlmeinfo->network.MacAddress)) != NULL) */ - if ((psta = rtw_get_stainfo23a(pstapriv, raddr))) { - start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1; + idx = status & 0x07; + start_seq = + (psta->sta_xmitpriv.txseq_tid[idx] & 0xfff) + 1; DBG_8723A("BA_starting_seqctrl = %d for TID =%d\n", - start_seq, status & 0x07); + start_seq, idx); - psta->BA_starting_seqctrl[status & 0x07] = start_seq; + psta->BA_starting_seqctrl[idx] = start_seq; BA_starting_seqctrl = start_seq << 4; - } + } else + BA_starting_seqctrl = 0; + + put_unaligned_le16(BA_starting_seqctrl, + &mgmt->u.action.u.addba_req.start_seq_num); - BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl); - pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *)&BA_starting_seqctrl, &pattrib->pktlen); break; - case 1: /* ADDBA rsp */ - pframe = rtw_set_fixed_ie23a(pframe, 1, &pmlmeinfo->ADDBA_req.dialog_token, &pattrib->pktlen); - pframe = rtw_set_fixed_ie23a(pframe, 2, - (unsigned char *)&status, - &pattrib->pktlen); + case WLAN_ACTION_ADDBA_RESP: + pattrib->pktlen += sizeof(mgmt->u.action.u.addba_resp); + + mgmt->u.action.u.addba_resp.action_code = action; + mgmt->u.action.u.addba_resp.dialog_token = + pmlmeinfo->ADDBA_req.dialog_token; + put_unaligned_le16(status, + &mgmt->u.action.u.addba_resp.status); + GetHalDefVar8192CUsb(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR, &max_rx_ampdu_factor); + + BA_para = le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f; if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_64K) - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */ + BA_para_set = BA_para | 0x1000; /* 64 buffer size */ else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_32K) - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0800); /* 32 buffer size */ + BA_para_set = BA_para | 0x0800; /* 32 buffer size */ else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_16K) - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0400); /* 16 buffer size */ + BA_para_set = BA_para | 0x0400; /* 16 buffer size */ else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_8K) - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0200); /* 8 buffer size */ + BA_para_set = BA_para | 0x0200; /* 8 buffer size */ else - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */ + BA_para_set = BA_para | 0x1000; /* 64 buffer size */ if (rtl8723a_BT_coexist(padapter) && rtl8723a_BT_using_antenna_1(padapter) && @@ -4035,36 +4037,33 @@ void issue_action_BA23a(struct rtw_adapter *padapter, } if (pregpriv->ampdu_amsdu == 0)/* disabled */ - BA_para_set = cpu_to_le16(BA_para_set & ~BIT(0)); + BA_para_set &= ~BIT(0); else if (pregpriv->ampdu_amsdu == 1)/* enabled */ - BA_para_set = cpu_to_le16(BA_para_set | BIT(0)); - else /* auto */ - BA_para_set = cpu_to_le16(BA_para_set); - - pframe = rtw_set_fixed_ie23a(pframe, 2, - (unsigned char *)&BA_para_set, - &pattrib->pktlen); - pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *)&pmlmeinfo->ADDBA_req.BA_timeout_value, &pattrib->pktlen); + BA_para_set |= BIT(0); + + put_unaligned_le16(BA_para_set, + &mgmt->u.action.u.addba_resp.capab); + + put_unaligned_le16(pmlmeinfo->ADDBA_req.BA_timeout_value, + &mgmt->u.action.u.addba_resp.timeout); + + pattrib->pktlen += 8; break; - case 2:/* DELBA */ + case WLAN_ACTION_DELBA: + pattrib->pktlen += sizeof(mgmt->u.action.u.delba); + + mgmt->u.action.u.delba.action_code = action; BA_para_set = (status & 0x1F) << 3; - BA_para_set = cpu_to_le16(BA_para_set); - pframe = rtw_set_fixed_ie23a(pframe, 2, - (unsigned char *)&BA_para_set, - &pattrib->pktlen); - - reason_code = 37;/* Requested from peer STA as it does not - want to use the mechanism */ - reason_code = cpu_to_le16(reason_code); - pframe = rtw_set_fixed_ie23a(pframe, 2, - (unsigned char *)&reason_code, - &pattrib->pktlen); + mgmt->u.action.u.delba.params = cpu_to_le16(BA_para_set); + mgmt->u.action.u.delba.reason_code = + cpu_to_le16(WLAN_REASON_QSTA_NOT_USE); + + pattrib->pktlen += 5; break; default: break; } -out: pattrib->last_txcmdsz = pattrib->pktlen; dump_mgntframe23a(padapter, pmgntframe); -- cgit From 2a907fe46b861f16135c58580ce222c7abb02c2d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:20 +0200 Subject: staging: rtl8723au: Remove obsolete rtw_set_fixed_ie23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 8 -------- drivers/staging/rtl8723au/include/ieee80211.h | 1 - 2 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 9f6dd779b694..922b45e3b42a 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -124,14 +124,6 @@ int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel) } } -u8 *rtw_set_fixed_ie23a(unsigned char *pbuf, unsigned int len, - unsigned char *source, unsigned int *frlen) -{ - memcpy((void *)pbuf, (void *)source, len); - *frlen = *frlen + len; - return pbuf + len; -} - /* rtw_set_ie23a will update frame length */ u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen) { diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index f6e982e3c728..9e03d411c2c4 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -388,7 +388,6 @@ struct rtw_ieee80211_channel { /*, (channel)->orig_mag*/ \ /*, (channel)->orig_mpwr*/ \ -u8 *rtw_set_fixed_ie23a(unsigned char *pbuf, unsigned int len, unsigned char *source, unsigned int *frlen); u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen); enum secondary_ch_offset { -- cgit From bf51cb6780a17b2ab64b6e6c0eacfc1b882a5d54 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:21 +0200 Subject: staging: rtl8723au: Remove duplicate defines of IEEE80211_HT_PARAM_CHA_SEC_* Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 10 ++++------ drivers/staging/rtl8723au/include/ieee80211.h | 5 ----- 2 files changed, 4 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 922b45e3b42a..9d0662cb96d0 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -153,14 +153,12 @@ inline u8 *rtw_set_ie23a_ch_switch (u8 *buf, u32 *buf_len, u8 ch_switch_mode, inline u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset) { - if (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE) - return SCN; - else if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER) - return SCB; + if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER) + return IEEE80211_HT_PARAM_CHA_SEC_BELOW; else if (ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER) - return SCA; + return IEEE80211_HT_PARAM_CHA_SEC_ABOVE; - return SCN; + return IEEE80211_HT_PARAM_CHA_SEC_NONE; } inline u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len, diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 9e03d411c2c4..cb3f4fa8c01d 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -390,11 +390,6 @@ struct rtw_ieee80211_channel { u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen); -enum secondary_ch_offset { - SCN = 0, /* no secondary channel */ - SCA = 1, /* secondary channel above */ - SCB = 3, /* secondary channel below */ -}; u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset); u8 *rtw_set_ie23a_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode, u8 new_ch, u8 ch_switch_cnt); u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset); -- cgit From e0ea5c8e665f14b1d018bc3f6e8f2f2f1d8a4b1d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:22 +0200 Subject: staging: rtl8723au: Remove unused #defines WEP_KEY_LEN and MGMT_QUEUE_NUM Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/ieee80211.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index cb3f4fa8c01d..7d22825db510 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -27,8 +27,6 @@ #endif -#define MGMT_QUEUE_NUM 5 - #ifdef CONFIG_8723AU_AP_MODE /* STA flags */ @@ -305,7 +303,6 @@ struct ieee80211_snap_hdr { #define IEEE80211_OFDM_SHIFT_MASK_A 4 #define WEP_KEYS 4 -#define WEP_KEY_LEN 13 /* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs -- cgit From 51dacaa7baa95b00f7369a687295f59d4e963d64 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:23 +0200 Subject: staging: rtl8723au: Remove some unused 80211 header parsing macros Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/ieee80211.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 7d22825db510..c2c57c7b2337 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -219,20 +219,10 @@ struct ieee80211_snap_hdr { #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) -#define WLAN_FC_GET_TYPE(fc) (fc & IEEE80211_FCTL_FTYPE) -#define WLAN_FC_GET_STYPE(fc) (fc & IEEE80211_FCTL_STYPE) - -#define WLAN_QC_GET_TID(qc) (qc & 0x0f) - -#define WLAN_GET_SEQ_FRAG(seq) (seq & RTW_IEEE80211_SCTL_FRAG) -#define WLAN_GET_SEQ_SEQ(seq) (seq & RTW_IEEE80211_SCTL_SEQ) - - #define WLAN_REASON_JOIN_WRONG_CHANNEL 65534 #define WLAN_REASON_EXPIRATION_CHK 65535 - #define IEEE80211_STATMASK_SIGNAL (1<<0) #define IEEE80211_STATMASK_RSSI (1<<1) #define IEEE80211_STATMASK_NOISE (1<<2) -- cgit From 0c45e6170d65332e9f314dbc36468884a650b412 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:24 +0200 Subject: staging: rtl8723au: rtw_check_bcn_info23a(): Use ether_addr_equal() to check BSSID Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 3195b444e3bc..a2c249fd88b5 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -910,10 +910,9 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, return _FAIL; } - if (memcmp(cur_network->network.MacAddress, mgmt->bssid, 6)) { - DBG_8723A("Oops: rtw_check_network_encrypt linked but recv " - "other bssid bcn\n" MAC_FMT MAC_FMT, - MAC_ARG(mgmt->bssid), + if (!ether_addr_equal(cur_network->network.MacAddress, mgmt->bssid)) { + DBG_8723A("%s: linked but recv other bssid bcn" + MAC_FMT MAC_FMT "\n", __func__, MAC_ARG(mgmt->bssid), MAC_ARG(cur_network->network.MacAddress)); return true; } -- cgit From 17b19396a675659e04eac6dbdbe57b2a9e462950 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:25 +0200 Subject: staging: rtl8723au: rtw_check_bcn_info23a(): Don't make a local copy of beacon just to parse it In addition be consistent with return values and parsing them. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 88 +++++++++----------------- 2 files changed, 32 insertions(+), 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index ff0800e836e3..693a1a484072 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -857,7 +857,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) psta = rtw_get_stainfo23a(pstapriv, mgmt->sa); if (psta) { ret = rtw_check_bcn_info23a(padapter, mgmt, pkt_len); - if (!ret) { + if (ret != _SUCCESS) { DBG_8723A_LEVEL(_drv_always_, "ap has changed, " "disconnect now\n"); receive_disconnect23a(padapter, pmlmeinfo->network.MacAddress, 65535); diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index a2c249fd88b5..17b04c20541d 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -885,28 +885,19 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, { struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network; struct ieee80211_ht_operation *pht_info; - struct wlan_bssid_ex *bssid; unsigned short val16; u8 encryp_protocol; int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r; u32 bcn_channel; - int len, pie_len, ie_offset; - const u8 *p; - u8 *pie; + int pie_len, ie_offset, ssid_len, privacy; + const u8 *p, *ssid; if (is_client_associated_to_ap23a(Adapter) == false) - return true; + return _SUCCESS; if (unlikely(!ieee80211_is_beacon(mgmt->frame_control))) { printk(KERN_WARNING "%s: received a non beacon frame!\n", __func__); - return false; - } - - len = pkt_len - sizeof(struct ieee80211_hdr_3addr); - - if (len > MAX_IE_SZ) { - DBG_8723A("%s IE too long for survey event\n", __func__); return _FAIL; } @@ -914,36 +905,25 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, DBG_8723A("%s: linked but recv other bssid bcn" MAC_FMT MAC_FMT "\n", __func__, MAC_ARG(mgmt->bssid), MAC_ARG(cur_network->network.MacAddress)); - return true; - } - - bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); - if (!bssid) return _FAIL; - - bssid->reserved = 1; - - bssid->Length = offsetof(struct wlan_bssid_ex, IEs) + len; - - /* below is to copy the information element */ - bssid->IELength = len; - memcpy(bssid->IEs, &mgmt->u, len); + } /* check bw and channel offset */ /* parsing HT_CAP_IE */ ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - offsetof(struct ieee80211_mgmt, u); - pie = bssid->IEs + ie_offset; - pie_len = pkt_len - ie_offset; + pie_len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable); /* Checking for channel */ - p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, pie, pie_len); + p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, mgmt->u.beacon.variable, + pie_len); if (p) bcn_channel = p[2]; else { /* In 5G, some ap do not have DSSET IE checking HT info for channel */ - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, + mgmt->u.beacon.variable, pie_len); if (p && p[1] > 0) { pht_info = (struct ieee80211_ht_operation *)(p + 2); @@ -962,60 +942,55 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, } /* checking SSID */ - p = cfg80211_find_ie(WLAN_EID_SSID, pie, pie_len); + p = cfg80211_find_ie(WLAN_EID_SSID, mgmt->u.beacon.variable, pie_len); if (p && p[1]) { - memcpy(bssid->Ssid.ssid, p + 2, p[1]); - bssid->Ssid.ssid_len = p[1]; + ssid = p + 2; + ssid_len = p[1]; } else { DBG_8723A("%s marc: cannot find SSID for survey event\n", __func__); - bssid->Ssid.ssid_len = 0; - bssid->Ssid.ssid[0] = '\0'; + ssid = NULL; + ssid_len = 0; } RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("%s bssid.Ssid.Ssid:%s bssid.Ssid.SsidLength:%d " "cur_network->network.Ssid.Ssid:%s len:%d\n", __func__, - bssid->Ssid.ssid, bssid->Ssid.ssid_len, - cur_network->network.Ssid.ssid, + ssid, ssid_len, cur_network->network.Ssid.ssid, cur_network->network.Ssid.ssid_len)); - if (memcmp(bssid->Ssid.ssid, cur_network->network.Ssid.ssid, 32) || - bssid->Ssid.ssid_len != cur_network->network.Ssid.ssid_len) { - if (bssid->Ssid.ssid[0] != '\0' && - bssid->Ssid.ssid_len != 0) { /* not hidden ssid */ - DBG_8723A("%s(), SSID is not match return FAIL\n", - __func__); - goto _mismatch; - } + if (ssid_len != cur_network->network.Ssid.ssid_len || ssid_len > 32 || + (ssid_len && + memcmp(ssid, cur_network->network.Ssid.ssid, ssid_len))) { + DBG_8723A("%s(), SSID is not match return FAIL\n", __func__); + goto _mismatch; } /* check encryption info */ - val16 = rtw_get_capability23a(bssid); + val16 = le16_to_cpu(mgmt->u.beacon.capab_info); if (val16 & WLAN_CAPABILITY_PRIVACY) - bssid->Privacy = 1; + privacy = 1; else - bssid->Privacy = 0; + privacy = 0; RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("%s(): cur_network->network.Privacy is %d, bssid.Privacy " - "is %d\n", __func__, cur_network->network.Privacy, - bssid->Privacy)); - if (cur_network->network.Privacy != bssid->Privacy) { + "is %d\n", __func__, cur_network->network.Privacy, privacy)); + if (cur_network->network.Privacy != privacy) { DBG_8723A("%s(), privacy is not match return FAIL\n", __func__); goto _mismatch; } - p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); + p = cfg80211_find_ie(WLAN_EID_RSN, mgmt->u.beacon.variable, pie_len); if (p && p[1]) { encryp_protocol = ENCRYP_PROTOCOL_WPA2; } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, - pie, pie_len)) { + mgmt->u.beacon.variable, pie_len)) { encryp_protocol = ENCRYP_PROTOCOL_WPA; } else { - if (bssid->Privacy) + if (privacy) encryp_protocol = ENCRYP_PROTOCOL_WEP; else encryp_protocol = ENCRYP_PROTOCOL_OPENSYS; @@ -1030,7 +1005,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, encryp_protocol == ENCRYP_PROTOCOL_WPA2) { p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, - pie, pie_len); + mgmt->u.beacon.variable, pie_len); if (p && p[1] > 0) { r = rtw_parse_wpa_ie23a(p, p[1] + 2, &group_cipher, &pairwise_cipher, &is_8021x); @@ -1041,7 +1016,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, "%d\n", __func__, pairwise_cipher, group_cipher, is_8021x)); } else { - p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); + p = cfg80211_find_ie(WLAN_EID_RSN, + mgmt->u.beacon.variable, pie_len); if (p && p[1] > 0) { r = rtw_parse_wpa2_ie23a(p, p[1] + 2, @@ -1080,11 +1056,9 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, } } - kfree(bssid); return _SUCCESS; _mismatch: - kfree(bssid); return _FAIL; } -- cgit From bbf5fdbd56f8a97ccfe25621057771742725c3b0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:26 +0200 Subject: staging: rtl8723au: rtw_check_bcn_info23a(): Don't search for WPA/WPA2 info twice Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 63 ++++++++++---------------- 1 file changed, 25 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 17b04c20541d..5aaff130d55d 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -886,9 +886,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network; struct ieee80211_ht_operation *pht_info; unsigned short val16; - u8 encryp_protocol; + u8 crypto, bcn_channel; int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r; - u32 bcn_channel; int pie_len, ie_offset, ssid_len, privacy; const u8 *p, *ssid; @@ -984,29 +983,23 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, p = cfg80211_find_ie(WLAN_EID_RSN, mgmt->u.beacon.variable, pie_len); if (p && p[1]) { - encryp_protocol = ENCRYP_PROTOCOL_WPA2; - } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, - WLAN_OUI_TYPE_MICROSOFT_WPA, - mgmt->u.beacon.variable, pie_len)) { - encryp_protocol = ENCRYP_PROTOCOL_WPA; + crypto = ENCRYP_PROTOCOL_WPA2; + if (p && p[1]) { + r = rtw_parse_wpa2_ie23a(p, p[1] + 2, &group_cipher, + &pairwise_cipher, &is_8021x); + if (r == _SUCCESS) + RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, + ("%s pnetwork->pairwise_cipher: %d, " + "pnetwork->group_cipher: %d, is_802x " + ": %d\n", __func__, pairwise_cipher, + group_cipher, is_8021x)); + } } else { - if (privacy) - encryp_protocol = ENCRYP_PROTOCOL_WEP; - else - encryp_protocol = ENCRYP_PROTOCOL_OPENSYS; - } - - if (cur_network->BcnInfo.encryp_protocol != encryp_protocol) { - DBG_8723A("%s(): enctyp is not match, return FAIL\n", __func__); - goto _mismatch; - } - - if (encryp_protocol == ENCRYP_PROTOCOL_WPA || - encryp_protocol == ENCRYP_PROTOCOL_WPA2) { p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, mgmt->u.beacon.variable, pie_len); - if (p && p[1] > 0) { + if (p && p[1]) { + crypto = ENCRYP_PROTOCOL_WPA; r = rtw_parse_wpa_ie23a(p, p[1] + 2, &group_cipher, &pairwise_cipher, &is_8021x); if (r == _SUCCESS) @@ -1016,25 +1009,19 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, "%d\n", __func__, pairwise_cipher, group_cipher, is_8021x)); } else { - p = cfg80211_find_ie(WLAN_EID_RSN, - mgmt->u.beacon.variable, pie_len); - - if (p && p[1] > 0) { - r = rtw_parse_wpa2_ie23a(p, p[1] + 2, - &group_cipher, - &pairwise_cipher, - &is_8021x); - if (r == _SUCCESS) - RT_TRACE(_module_rtl871x_mlme_c_, - _drv_info_, - ("%s pnetwork->pairwise_cipher" - ": %d, pnetwork->group_cipher" - " is %d, is_802x is %d\n", - __func__, pairwise_cipher, - group_cipher, is_8021x)); - } + if (privacy) + crypto = ENCRYP_PROTOCOL_WEP; + else + crypto = ENCRYP_PROTOCOL_OPENSYS; } + } + + if (cur_network->BcnInfo.encryp_protocol != crypto) { + DBG_8723A("%s(): encryption mismatch, return FAIL\n", __func__); + goto _mismatch; + } + if (crypto == ENCRYP_PROTOCOL_WPA || crypto == ENCRYP_PROTOCOL_WPA2) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("%s cur_network->group_cipher is %d: %d\n", __func__, cur_network->BcnInfo.group_cipher, group_cipher)); -- cgit From 8ab7bdba0ddb0f6a9ca93562f2d6065b1350802e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:27 +0200 Subject: staging: rtl8723au: Declare rtw_update_scanned_network() static Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +++--- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 4a33e7d5d412..44a524975949 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -487,8 +487,8 @@ static void update_current_network(struct rtw_adapter *adapter, Caller must hold pmlmepriv->lock first. */ -void rtw_update_scanned_network23a(struct rtw_adapter *adapter, - struct wlan_bssid_ex *target) +static void rtw_update_scanned_network(struct rtw_adapter *adapter, + struct wlan_bssid_ex *target) { struct list_head *plist, *phead; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; @@ -571,7 +571,7 @@ static void rtw_add_network(struct rtw_adapter *adapter, struct wlan_bssid_ex *pnetwork) { update_current_network(adapter, pnetwork); - rtw_update_scanned_network23a(adapter, pnetwork); + rtw_update_scanned_network(adapter, pnetwork); } /* select the desired network based on the capability of the (i)bss. */ diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index a11b5bd9e7af..baac8da23c8f 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -308,8 +308,6 @@ static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state) } u16 rtw_get_capability23a(struct wlan_bssid_ex *bss); -void rtw_update_scanned_network23a(struct rtw_adapter *adapter, - struct wlan_bssid_ex *target); void rtw_disconnect_hdl23a_under_linked(struct rtw_adapter *adapter, struct sta_info *psta, u8 free_assoc); void rtw_generate_random_ibss23a(u8 *pibss); -- cgit From 7195dc0e1a9982eb950b614e07abc5ba3068e95d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:28 +0200 Subject: staging: rtl8723au: rtw_survey_event_cb23a(): Use the correct types for the received arguments Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 44a524975949..639dfca9fe2f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -638,8 +638,9 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) u32 len; struct wlan_bssid_ex *pnetwork; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct survey_event *survey = (struct survey_event *)pbuf; - pnetwork = (struct wlan_bssid_ex *)pbuf; + pnetwork = &survey->bss; RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_, ("rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid)); -- cgit From 246879640e636256326221e70df8e1c3ef84ece0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:29 +0200 Subject: staging: rtl8723au: Do not embed struct wlan_bssid_ex in struct survey_event Instead allocate it separately and reference it from survey_event. This will allow for us to pass it on later without having to copy it. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++++- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 9 +++++++-- drivers/staging/rtl8723au/include/rtw_event.h | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 639dfca9fe2f..71ff753b0d59 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -640,7 +640,7 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct survey_event *survey = (struct survey_event *)pbuf; - pnetwork = &survey->bss; + pnetwork = survey->bss; RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_, ("rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid)); @@ -691,6 +691,9 @@ exit: spin_unlock_bh(&pmlmepriv->lock); + kfree(survey->bss); + survey->bss = NULL; + return; } diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 693a1a484072..9b6d918df3dd 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4898,14 +4898,19 @@ void report_survey_event23a(struct rtw_adapter *padapter, pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq); psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); + psurvey_evt->bss = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); + if (!psurvey_evt->bss) { + kfree(pcmd_obj); + kfree(pevtcmd); + } - if (collect_bss_info23a(padapter, precv_frame, &psurvey_evt->bss) == _FAIL) { + if (collect_bss_info23a(padapter, precv_frame, psurvey_evt->bss) == _FAIL) { kfree(pcmd_obj); kfree(pevtcmd); return; } - process_80211d(padapter, &psurvey_evt->bss); + process_80211d(padapter, psurvey_evt->bss); rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj); diff --git a/drivers/staging/rtl8723au/include/rtw_event.h b/drivers/staging/rtl8723au/include/rtw_event.h index 807cc83bc710..4557aeccc604 100644 --- a/drivers/staging/rtl8723au/include/rtw_event.h +++ b/drivers/staging/rtl8723au/include/rtw_event.h @@ -22,7 +22,7 @@ Used to report a bss has been scanned */ struct survey_event { - struct wlan_bssid_ex bss; + struct wlan_bssid_ex *bss; }; /* -- cgit From 1bebe756269a020add3e128c93b2edf1ef66362f Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:30 +0200 Subject: staging: rtl8723au: Allocate struct wlan_bssid_ex in collect_bss_info() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 52 ++++++++++++------------ drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 3 -- 2 files changed, 25 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 9b6d918df3dd..02180fc6650b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -61,6 +61,8 @@ static void start_clnt_assoc(struct rtw_adapter *padapter); static void start_clnt_auth(struct rtw_adapter *padapter); static void start_clnt_join(struct rtw_adapter *padapter); static void start_create_ibss(struct rtw_adapter *padapter); +static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, + struct recv_frame *precv_frame); #ifdef CONFIG_8723AU_AP_MODE static int OnAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame); @@ -825,16 +827,11 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) { /* we should update current network before auth, or some IE is wrong */ - pbss = (struct wlan_bssid_ex *) - kmalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); + pbss = collect_bss_info(padapter, precv_frame); if (pbss) { - if (collect_bss_info23a(padapter, precv_frame, pbss) == - _SUCCESS) { - update_network23a( - &pmlmepriv->cur_network.network, pbss, - padapter, true); - rtw_get_bcn_info23a(&pmlmepriv->cur_network); - } + update_network23a(&pmlmepriv->cur_network.network, pbss, + padapter, true); + rtw_get_bcn_info23a(&pmlmepriv->cur_network); kfree(pbss); } @@ -4252,9 +4249,8 @@ static void rtw_site_survey(struct rtw_adapter *padapter) } /* collect bss info from Beacon and Probe request/response frames. */ -int collect_bss_info23a(struct rtw_adapter *padapter, - struct recv_frame *precv_frame, - struct wlan_bssid_ex *bssid) +static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, + struct recv_frame *precv_frame) { int i; const u8 *p; @@ -4265,16 +4261,19 @@ int collect_bss_info23a(struct rtw_adapter *padapter, struct registry_priv *pregistrypriv = &padapter->registrypriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; + struct wlan_bssid_ex *bssid; u16 capab_info; length = skb->len - sizeof(struct ieee80211_hdr_3addr); if (length > MAX_IE_SZ) { /* DBG_8723A("IE too long for survey event\n"); */ - return _FAIL; + return NULL; } - memset(bssid, 0, sizeof(struct wlan_bssid_ex)); + bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); + if (!bssid) + return NULL; if (ieee80211_is_beacon(mgmt->frame_control)) { bssid->reserved = 1; @@ -4325,13 +4324,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter, if (!p) { DBG_8723A("marc: cannot find SSID for survey event\n"); - return _FAIL; + goto fail; } if (p[1] > IEEE80211_MAX_SSID_LEN) { DBG_8723A("%s()-%d: IE too long (%d) for survey " "event\n", __func__, __LINE__, p[1]); - return _FAIL; + goto fail; } memcpy(bssid->Ssid.ssid, p + 2, p[1]); bssid->Ssid.ssid_len = p[1]; @@ -4346,7 +4345,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter, if (p[1] > NDIS_802_11_LENGTH_RATES_EX) { DBG_8723A("%s()-%d: IE too long (%d) for survey " "event\n", __func__, __LINE__, p[1]); - return _FAIL; + goto fail; } memcpy(bssid->SupportedRates, p + 2, p[1]); i = p[1]; @@ -4358,13 +4357,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter, if (p[1] > (NDIS_802_11_LENGTH_RATES_EX-i)) { DBG_8723A("%s()-%d: IE too long (%d) for survey " "event\n", __func__, __LINE__, p[1]); - return _FAIL; + goto fail; } memcpy(bssid->SupportedRates + i, p + 2, p[1]); } if (bssid->IELength < 12) - return _FAIL; + goto fail; /* Checking for DSConfig */ p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bssid->IEs + ie_offset, @@ -4392,7 +4391,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter, bssid->ifmode = NL80211_IFTYPE_STATION; ether_addr_copy(bssid->MacAddress, mgmt->sa); bssid->Privacy = 1; - return _SUCCESS; + return bssid; } if (capab_info & WLAN_CAPABILITY_ESS) { @@ -4434,7 +4433,10 @@ int collect_bss_info23a(struct rtw_adapter *padapter, if (bssid->DSConfig != rtw_get_oper_ch23a(padapter)) bssid->PhyInfo.SignalQuality = 101; - return _SUCCESS; + return bssid; +fail: + kfree (bssid); + return NULL; } static void start_create_ibss(struct rtw_adapter* padapter) @@ -4898,13 +4900,9 @@ void report_survey_event23a(struct rtw_adapter *padapter, pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq); psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); - psurvey_evt->bss = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); - if (!psurvey_evt->bss) { - kfree(pcmd_obj); - kfree(pevtcmd); - } - if (collect_bss_info23a(padapter, precv_frame, psurvey_evt->bss) == _FAIL) { + psurvey_evt->bss = collect_bss_info(padapter, precv_frame); + if (!psurvey_evt->bss) { kfree(pcmd_obj); kfree(pevtcmd); return; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index eb61012042df..0219aa14291a 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -495,9 +495,6 @@ void flush_all_cam_entry23a(struct rtw_adapter *padapter); bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel); -int collect_bss_info23a(struct rtw_adapter *padapter, - struct recv_frame *precv_frame, - struct wlan_bssid_ex *bssid); void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src, struct rtw_adapter *padapter, bool update_ie); -- cgit From 8d7fb1b874988b663d796f5b3b328cc50e99c1e2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:31 +0200 Subject: staging: rtl8723au: collect_bss_info(): Don't memset() what we just kzalloc()'d Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 02180fc6650b..14193b4319b5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4335,8 +4335,6 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, memcpy(bssid->Ssid.ssid, p + 2, p[1]); bssid->Ssid.ssid_len = p[1]; - memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX); - /* checking rate info... */ i = 0; p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, bssid->IEs + ie_offset, -- cgit From 46805acb89edec720493e5779459ae8d0ccc680d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:32 +0200 Subject: staging: rtl8723au: free_scanqueue(): Use _rtw_free_network23a() Use _rtw_free_network23() so elements are freed in one place. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 71ff753b0d59..7c99c37f3df7 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -831,9 +831,9 @@ static void free_scanqueue(struct mlme_priv *pmlmepriv) phead = get_list_head(scan_queue); list_for_each_safe(plist, ptemp, phead) { - list_del_init(plist); pnetwork = container_of(plist, struct wlan_network, list); - kfree(pnetwork); + pnetwork->fixed = false; + _rtw_free_network23a(pmlmepriv, pnetwork); } spin_unlock_bh(&scan_queue->lock); -- cgit From 1ae17bf1690d6781d260db96952b8a937a204570 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:33 +0200 Subject: staging: rtl8723au: rtw_stadel_event_callback23a(): Remove superfluous memset() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 7c99c37f3df7..bcc6893577c4 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1506,8 +1506,6 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) memcpy(pdev_network, &tgt_network->network, get_wlan_bssid_ex_sz(&tgt_network->network)); - memset(&pdev_network->Ssid, 0, - sizeof(struct cfg80211_ssid)); memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct cfg80211_ssid)); -- cgit From ded7a20f827164bb7efc602f6f11e70cfa3e73e4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:34 +0200 Subject: staging: rtl8723au: OnAuth23a(): Use ether_addr_copy() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 14193b4319b5..bed7eb764a51 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1087,7 +1087,7 @@ auth_fail: pstat = &stat; memset((char *)pstat, '\0', sizeof(stat)); pstat->auth_seq = 2; - memcpy(pstat->hwaddr, sa, 6); + ether_addr_copy(pstat->hwaddr, sa); issue_auth(padapter, pstat, (unsigned short)status); -- cgit From 7b2e06a159a2398c6b03d38d5e023f98da8c53c6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:35 +0200 Subject: staging: rtl8723au: Get rid of IW_ESSID_MAX_SIZE Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 3 ++- drivers/staging/rtl8723au/include/ieee80211.h | 2 -- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index bed7eb764a51..59047ad89b31 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -5945,7 +5945,8 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) { if (pparm->ssid[i].ssid_len) { memcpy(pmlmeext->sitesurvey_res.ssid[i].ssid, - pparm->ssid[i].ssid, IW_ESSID_MAX_SIZE); + pparm->ssid[i].ssid, + IEEE80211_MAX_SSID_LEN); pmlmeext->sitesurvey_res.ssid[i].ssid_len = pparm->ssid[i].ssid_len; } else { diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index c2c57c7b2337..43f002db937c 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -309,8 +309,6 @@ struct ieee80211_snap_hdr { #define MAX_P2P_IE_LEN 256 #define MAX_WFD_IE_LEN 128 -#define IW_ESSID_MAX_SIZE 32 - /* join_res: -1: authentication fail diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 2fdc2b58312b..5e0513409214 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2020,7 +2020,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, goto exit; } - if (sme->ssid_len > IW_ESSID_MAX_SIZE) { + if (sme->ssid_len > IEEE80211_MAX_SSID_LEN) { ret = -E2BIG; goto exit; } -- cgit From ec36ce29ca8e935d747ec0eddfa813da9324ee6d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:36 +0200 Subject: staging: rtl8723au: Make rtw_is_same_ibss23a() return bool Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 44 ++++++++++++++++---------- drivers/staging/rtl8723au/core/rtw_mlme.c | 6 ++-- drivers/staging/rtl8723au/include/rtw_mlme.h | 4 +-- 3 files changed, 33 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 1d2ea4e1737c..8d7674893e96 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -188,26 +188,38 @@ int rtw_set_802_11_ssid23a(struct rtw_adapter* padapter, !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid, ssid->ssid_len)) { if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("Set SSID is the same ssid, fw_state = 0x%08x\n", - get_fwstate(pmlmepriv))); + RT_TRACE(_module_rtl871x_ioctl_set_c_, + _drv_err_, ("New SSID is same SSID, " + "fw_state = 0x%08x\n", + get_fwstate(pmlmepriv))); + + if (rtw_is_same_ibss23a(padapter, pnetwork)) { + /* + * it means driver is in + * WIFI_ADHOC_MASTER_STATE, we needn't + * create bss again. + */ + goto release_mlme_lock; + } - if (rtw_is_same_ibss23a(padapter, pnetwork) == false) - { - /* if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again */ - rtw_disassoc_cmd23a(padapter, 0, true); + /* + * if in WIFI_ADHOC_MASTER_STATE | + * WIFI_ADHOC_STATE, create bss or + * rejoin again + */ + rtw_disassoc_cmd23a(padapter, 0, true); - if (check_fwstate(pmlmepriv, _FW_LINKED)) - rtw_indicate_disconnect23a(padapter); + if (check_fwstate(pmlmepriv, _FW_LINKED)) + rtw_indicate_disconnect23a(padapter); - rtw_free_assoc_resources23a(padapter, 1); + rtw_free_assoc_resources23a(padapter, 1); - if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { - _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); - set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); - } - } else { - goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */ + if (check_fwstate(pmlmepriv, + WIFI_ADHOC_MASTER_STATE)) { + _clr_fwstate_(pmlmepriv, + WIFI_ADHOC_MASTER_STATE); + set_fwstate(pmlmepriv, + WIFI_ADHOC_STATE); } } else { rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_JOINBSS, 1); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index bcc6893577c4..2a0c43aceaa9 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -334,10 +334,10 @@ static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, _rtw_free_network23a(pmlmepriv, pnetwork); } -int rtw_is_same_ibss23a(struct rtw_adapter *adapter, - struct wlan_network *pnetwork) +bool rtw_is_same_ibss23a(struct rtw_adapter *adapter, + struct wlan_network *pnetwork) { - int ret = true; + int ret; struct security_priv *psecuritypriv = &adapter->securitypriv; if (psecuritypriv->dot11PrivacyAlgrthm != 0 && diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index baac8da23c8f..c8e82bfb3f75 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -361,8 +361,8 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe); -int rtw_is_same_ibss23a(struct rtw_adapter *adapter, - struct wlan_network *pnetwork); +bool rtw_is_same_ibss23a(struct rtw_adapter *adapter, + struct wlan_network *pnetwork); int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst); void rtw23a_roaming(struct rtw_adapter *adapter, -- cgit From 7c0e0636753ed98941eb4f904a03b2c6b5e5614d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:37 +0200 Subject: staging: rtl8723au: cfg80211_rtw_connect(): Check correct return value from rtw_set_802_11_ssid23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 5e0513409214..c116b21a3ce0 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2204,7 +2204,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ - if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) == false) { + if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) != _SUCCESS) { ret = -1; goto exit; } -- cgit From 39dbc446a7168e4d7542d6523132ee44189d0ba2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:38 +0200 Subject: staging: rtl8723au: Fold rtw_set_802_11_authentication_mode23a() into cfg80211_rtw_connect() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 24 ----------------------- drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 2 -- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 10 +++++++--- 3 files changed, 7 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 8d7674893e96..5c3b5615410f 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -343,30 +343,6 @@ exit: return res; } -int rtw_set_802_11_authentication_mode23a(struct rtw_adapter* padapter, - enum ndis_802_11_auth_mode authmode) -{ - struct security_priv *psecuritypriv = &padapter->securitypriv; - int res; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("set_802_11_auth.mode(): mode =%x\n", authmode)); - - psecuritypriv->ndisauthtype = authmode; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("rtw_set_802_11_authentication_mode23a:" - "psecuritypriv->ndisauthtype =%d", - psecuritypriv->ndisauthtype)); - - if (psecuritypriv->ndisauthtype > 3) - psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X; - - res = rtw_set_auth23a(padapter, psecuritypriv); - - return res; -} - /* * rtw_get_cur_max_rate23a - * @adapter: pointer to _adapter structure diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h index 040543bff1b2..bc5805a4013a 100644 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h @@ -17,8 +17,6 @@ #include -int rtw_set_802_11_authentication_mode23a(struct rtw_adapter *pdapter, - enum ndis_802_11_auth_mode authmode); int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, int ssid_max_num); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index c116b21a3ce0..062841674fe8 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1987,7 +1987,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, int ret = 0; struct list_head *phead, *plist, *ptmp; struct wlan_network *pnetwork = NULL; - enum ndis_802_11_auth_mode authmode; struct cfg80211_ssid ndis_ssid; u8 *dst_ssid; u8 *src_ssid; @@ -2198,8 +2197,13 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, goto exit; } - authmode = psecuritypriv->ndisauthtype; - rtw_set_802_11_authentication_mode23a(padapter, authmode); + if (psecuritypriv->ndisauthtype > 3) + psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X; + + if (rtw_set_auth23a(padapter, psecuritypriv) != _SUCCESS) { + ret = -EBUSY; + goto exit; + } /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ -- cgit From 97c4361d50e833a0c178cf425590a15e9663f3d0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:39 +0200 Subject: staging: rtl8723au: Move rtw_set_802_11_ssid23a() to ioctl_cfg80211.c Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 135 ---------------------- drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 2 - drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 134 ++++++++++++++++++++- 3 files changed, 132 insertions(+), 139 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 5c3b5615410f..7b0d3dba8cec 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -151,141 +151,6 @@ exit: return ret; } -int rtw_set_802_11_ssid23a(struct rtw_adapter* padapter, - struct cfg80211_ssid *ssid) -{ - int status = _SUCCESS; - u32 cur_time = 0; - - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct wlan_network *pnetwork = &pmlmepriv->cur_network; - - - - DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n", - ssid->ssid, get_fwstate(pmlmepriv)); - - if (padapter->hw_init_completed == false) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("set_ssid: hw_init_completed == false =>exit!!!\n")); - status = _FAIL; - goto exit; - } - - spin_lock_bh(&pmlmepriv->lock); - - DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv)); - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) - goto handle_tkip_countermeasure; - else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) - goto release_mlme_lock; - - if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n")); - - if ((pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len) && - !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid, - ssid->ssid_len)) { - if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, - _drv_err_, ("New SSID is same SSID, " - "fw_state = 0x%08x\n", - get_fwstate(pmlmepriv))); - - if (rtw_is_same_ibss23a(padapter, pnetwork)) { - /* - * it means driver is in - * WIFI_ADHOC_MASTER_STATE, we needn't - * create bss again. - */ - goto release_mlme_lock; - } - - /* - * if in WIFI_ADHOC_MASTER_STATE | - * WIFI_ADHOC_STATE, create bss or - * rejoin again - */ - rtw_disassoc_cmd23a(padapter, 0, true); - - if (check_fwstate(pmlmepriv, _FW_LINKED)) - rtw_indicate_disconnect23a(padapter); - - rtw_free_assoc_resources23a(padapter, 1); - - if (check_fwstate(pmlmepriv, - WIFI_ADHOC_MASTER_STATE)) { - _clr_fwstate_(pmlmepriv, - WIFI_ADHOC_MASTER_STATE); - set_fwstate(pmlmepriv, - WIFI_ADHOC_STATE); - } - } else { - rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_JOINBSS, 1); - } - } else { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("Set SSID not the same ssid\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("set_ssid =[%s] len = 0x%x\n", ssid->ssid, - (unsigned int)ssid->ssid_len)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("assoc_ssid =[%s] len = 0x%x\n", - pmlmepriv->assoc_ssid.ssid, - (unsigned int)pmlmepriv->assoc_ssid.ssid_len)); - - rtw_disassoc_cmd23a(padapter, 0, true); - - if (check_fwstate(pmlmepriv, _FW_LINKED)) - rtw_indicate_disconnect23a(padapter); - - rtw_free_assoc_resources23a(padapter, 1); - - if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { - _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); - set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); - } - } - } - -handle_tkip_countermeasure: - - if (padapter->securitypriv.btkip_countermeasure == true) { - cur_time = jiffies; - - if ((cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ) - { - padapter->securitypriv.btkip_countermeasure = false; - padapter->securitypriv.btkip_countermeasure_time = 0; - } - else - { - status = _FAIL; - goto release_mlme_lock; - } - } - - memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid)); - pmlmepriv->assoc_by_bssid = false; - - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) - pmlmepriv->to_join = true; - else - status = rtw_do_join23a(padapter); - -release_mlme_lock: - spin_unlock_bh(&pmlmepriv->lock); - -exit: - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("-rtw_set_802_11_ssid23a: status =%d\n", status)); - - - - return status; -} - int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, int ssid_max_num) diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h index bc5805a4013a..14a36f5049df 100644 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h @@ -20,8 +20,6 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, int ssid_max_num); -int rtw_set_802_11_ssid23a(struct rtw_adapter * padapter, - struct cfg80211_ssid * ssid); u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter); s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 062841674fe8..30473d0cb0bf 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1981,6 +1981,136 @@ exit: return res; } +static int rtw_set_ssid(struct rtw_adapter* padapter, + struct cfg80211_ssid *ssid) +{ + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + struct wlan_network *pnetwork = &pmlmepriv->cur_network; + int status = _SUCCESS; + u32 cur_time = 0; + + DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n", + ssid->ssid, get_fwstate(pmlmepriv)); + + if (padapter->hw_init_completed == false) { + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, + ("set_ssid: hw_init_completed == false =>exit!!!\n")); + status = _FAIL; + goto exit; + } + + spin_lock_bh(&pmlmepriv->lock); + + DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv)); + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) + goto handle_tkip_countermeasure; + else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) + goto release_mlme_lock; + + if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) { + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, + ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n")); + + if (pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len && + !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid, + ssid->ssid_len)) { + if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { + RT_TRACE(_module_rtl871x_ioctl_set_c_, + _drv_err_, ("New SSID is same SSID, " + "fw_state = 0x%08x\n", + get_fwstate(pmlmepriv))); + + if (rtw_is_same_ibss23a(padapter, pnetwork)) { + /* + * it means driver is in + * WIFI_ADHOC_MASTER_STATE, we needn't + * create bss again. + */ + goto release_mlme_lock; + } + + /* + * if in WIFI_ADHOC_MASTER_STATE | + * WIFI_ADHOC_STATE, create bss or + * rejoin again + */ + rtw_disassoc_cmd23a(padapter, 0, true); + + if (check_fwstate(pmlmepriv, _FW_LINKED)) + rtw_indicate_disconnect23a(padapter); + + rtw_free_assoc_resources23a(padapter, 1); + + if (check_fwstate(pmlmepriv, + WIFI_ADHOC_MASTER_STATE)) { + _clr_fwstate_(pmlmepriv, + WIFI_ADHOC_MASTER_STATE); + set_fwstate(pmlmepriv, + WIFI_ADHOC_STATE); + } + } else { + rtw_lps_ctrl_wk_cmd23a(padapter, + LPS_CTRL_JOINBSS, 1); + } + } else { + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, + ("Set SSID not the same ssid\n")); + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, + ("set_ssid =[%s] len = 0x%x\n", ssid->ssid, + ssid->ssid_len)); + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, + ("assoc_ssid =[%s] len = 0x%x\n", + pmlmepriv->assoc_ssid.ssid, + pmlmepriv->assoc_ssid.ssid_len)); + + rtw_disassoc_cmd23a(padapter, 0, true); + + if (check_fwstate(pmlmepriv, _FW_LINKED)) + rtw_indicate_disconnect23a(padapter); + + rtw_free_assoc_resources23a(padapter, 1); + + if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { + _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); + set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); + } + } + } + +handle_tkip_countermeasure: + + if (padapter->securitypriv.btkip_countermeasure == true) { + cur_time = jiffies; + + if ((cur_time - + padapter->securitypriv.btkip_countermeasure_time) > + 60 * HZ) { + padapter->securitypriv.btkip_countermeasure = false; + padapter->securitypriv.btkip_countermeasure_time = 0; + } else { + status = _FAIL; + goto release_mlme_lock; + } + } + + memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid)); + pmlmepriv->assoc_by_bssid = false; + + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) + pmlmepriv->to_join = true; + else + status = rtw_do_join23a(padapter); + +release_mlme_lock: + spin_unlock_bh(&pmlmepriv->lock); + +exit: + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, + ("-%s: status =%d\n", __func__, status)); + + return status; +} + static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, struct cfg80211_connect_params *sme) { @@ -2208,8 +2338,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ - if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) != _SUCCESS) { - ret = -1; + if (rtw_set_ssid(padapter, &ndis_ssid) != _SUCCESS) { + ret = -EBUSY; goto exit; } -- cgit From c5178b0bc2ea2e72d45a90ae346a9b2fda0b5f08 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:40 +0200 Subject: staging: rtl8723au: cfg80211_rtw_connect(): Clean up various bits Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 53 +++++++++-------------- 1 file changed, 20 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 30473d0cb0bf..b0d959e4a92d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2117,11 +2117,9 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, int ret = 0; struct list_head *phead, *plist, *ptmp; struct wlan_network *pnetwork = NULL; - struct cfg80211_ssid ndis_ssid; + struct cfg80211_ssid ssid; u8 *dst_ssid; - u8 *src_ssid; u8 *dst_bssid; - const u8 *src_bssid; /* u8 matched_by_bssid = false; */ /* u8 matched_by_ssid = false; */ u8 matched = false; @@ -2144,21 +2142,13 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, goto exit; } - if (!sme->ssid || !sme->ssid_len) { + if (!sme->ssid || !sme->ssid_len || + sme->ssid_len > IEEE80211_MAX_SSID_LEN) { ret = -EINVAL; goto exit; } - if (sme->ssid_len > IEEE80211_MAX_SSID_LEN) { - ret = -E2BIG; - goto exit; - } - - memset(&ndis_ssid, 0, sizeof(struct cfg80211_ssid)); - ndis_ssid.ssid_len = sme->ssid_len; - memcpy(ndis_ssid.ssid, sme->ssid, sme->ssid_len); - - DBG_8723A("ssid =%s, len =%zu\n", ndis_ssid.ssid, sme->ssid_len); + DBG_8723A("ssid =%s, len =%zu\n", sme->ssid, sme->ssid_len); if (sme->bssid) DBG_8723A("bssid =" MAC_FMT "\n", MAC_ARG(sme->bssid)); @@ -2173,6 +2163,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, rtw_scan_abort23a(padapter); } + memset(ssid.ssid, 0, sizeof(struct cfg80211_ssid)); + spin_lock_bh(&queue->lock); phead = get_list_head(queue); @@ -2197,28 +2189,24 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, } if (sme->bssid) { - src_bssid = sme->bssid; - - if (ether_addr_equal(dst_bssid, src_bssid)) { + if (ether_addr_equal(dst_bssid, sme->bssid)) { DBG_8723A("matched by bssid\n"); - ndis_ssid.ssid_len = - pnetwork->network.Ssid.ssid_len; - memcpy(ndis_ssid.ssid, - pnetwork->network.Ssid.ssid, + memcpy(ssid.ssid, pnetwork->network.Ssid.ssid, pnetwork->network.Ssid.ssid_len); + ssid.ssid_len = pnetwork->network.Ssid.ssid_len; matched = true; break; } - } else if (sme->ssid && sme->ssid_len) { - src_ssid = ndis_ssid.ssid; - - if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.ssid_len)) && - (pnetwork->network.Ssid.ssid_len == - ndis_ssid.ssid_len)) { + if (!memcmp(dst_ssid, sme->ssid, sme->ssid_len) && + pnetwork->network.Ssid.ssid_len == sme->ssid_len) { DBG_8723A("matched by ssid\n"); + + memcpy(ssid.ssid, sme->ssid, sme->ssid_len); + ssid.ssid_len = sme->ssid_len; + matched = true; break; } @@ -2227,7 +2215,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, spin_unlock_bh(&queue->lock); - if (!matched || (pnetwork == NULL)) { + if (!matched || !pnetwork) { ret = -ENOENT; DBG_8723A("connect, matched == false, goto exit\n"); goto exit; @@ -2245,9 +2233,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen; - ret = - rtw_cfg80211_set_wpa_version(psecuritypriv, - sme->crypto.wpa_versions); + ret = rtw_cfg80211_set_wpa_version(psecuritypriv, + sme->crypto.wpa_versions); if (ret < 0) goto exit; @@ -2318,7 +2305,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.cipher_group, false); if (ret < 0) - return ret; + goto exit; if (sme->crypto.n_akm_suites) { ret = rtw_cfg80211_set_key_mgt(psecuritypriv, @@ -2338,7 +2325,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ - if (rtw_set_ssid(padapter, &ndis_ssid) != _SUCCESS) { + if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) { ret = -EBUSY; goto exit; } -- cgit From 9ab98d42401d50d6ab5f6ef59e1d63c486391f1c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:41 +0200 Subject: staging: rtl8723au: cfg80211_rtw_connect(): Remove obfuscating pointers dst_ssid and dst_bssid were just obfuscating that we were in fact looking at pnetwork. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index b0d959e4a92d..281b48c590fe 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2118,8 +2118,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, struct list_head *phead, *plist, *ptmp; struct wlan_network *pnetwork = NULL; struct cfg80211_ssid ssid; - u8 *dst_ssid; - u8 *dst_bssid; /* u8 matched_by_bssid = false; */ /* u8 matched_by_ssid = false; */ u8 matched = false; @@ -2172,9 +2170,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, list_for_each_safe(plist, ptmp, phead) { pnetwork = container_of(plist, struct wlan_network, list); - dst_ssid = pnetwork->network.Ssid.ssid; - dst_bssid = pnetwork->network.MacAddress; - if (sme->bssid) { if (!ether_addr_equal(pnetwork->network.MacAddress, sme->bssid)) @@ -2189,7 +2184,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, } if (sme->bssid) { - if (ether_addr_equal(dst_bssid, sme->bssid)) { + if (ether_addr_equal(pnetwork->network.MacAddress, + sme->bssid)) { DBG_8723A("matched by bssid\n"); memcpy(ssid.ssid, pnetwork->network.Ssid.ssid, @@ -2200,7 +2196,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, break; } } else if (sme->ssid && sme->ssid_len) { - if (!memcmp(dst_ssid, sme->ssid, sme->ssid_len) && + if (!memcmp(pnetwork->network.Ssid.ssid, + sme->ssid, sme->ssid_len) && pnetwork->network.Ssid.ssid_len == sme->ssid_len) { DBG_8723A("matched by ssid\n"); -- cgit From 9cb08ff32c386cda497f83635817cd328478a308 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:42 +0200 Subject: staging: rtl8723au: cfg80211_rtw_connect(): Simplify ssid preparation Since we just matched sme->{ssid,ssid_len} to pnetwork->network.Ssid.{ssid,ssid_len} we can simplify the copy and move it to just before the call to rtw_set_ssid(). Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 281b48c590fe..0a6922d6a119 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2188,10 +2188,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, sme->bssid)) { DBG_8723A("matched by bssid\n"); - memcpy(ssid.ssid, pnetwork->network.Ssid.ssid, - pnetwork->network.Ssid.ssid_len); - ssid.ssid_len = pnetwork->network.Ssid.ssid_len; - matched = true; break; } @@ -2201,9 +2197,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, pnetwork->network.Ssid.ssid_len == sme->ssid_len) { DBG_8723A("matched by ssid\n"); - memcpy(ssid.ssid, sme->ssid, sme->ssid_len); - ssid.ssid_len = sme->ssid_len; - matched = true; break; } @@ -2322,6 +2315,10 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ + memcpy(ssid.ssid, pnetwork->network.Ssid.ssid, + pnetwork->network.Ssid.ssid_len); + ssid.ssid_len = pnetwork->network.Ssid.ssid_len; + if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) { ret = -EBUSY; goto exit; -- cgit From e73d82efa4583e5ecaf598d85341403806a16e62 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:43 +0200 Subject: staging: rtl8723au: Pass a struct wlan_network to rtw_set_ssid() There is no point copying the ssid out of struct wlan_network when we can just pass on the whole struct. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 32 +++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 0a6922d6a119..c03181dbc35b 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1981,8 +1981,8 @@ exit: return res; } -static int rtw_set_ssid(struct rtw_adapter* padapter, - struct cfg80211_ssid *ssid) +static int rtw_set_ssid(struct rtw_adapter *padapter, + struct wlan_network *newnetwork) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_network *pnetwork = &pmlmepriv->cur_network; @@ -1990,7 +1990,7 @@ static int rtw_set_ssid(struct rtw_adapter* padapter, u32 cur_time = 0; DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n", - ssid->ssid, get_fwstate(pmlmepriv)); + newnetwork->network.Ssid.ssid, get_fwstate(pmlmepriv)); if (padapter->hw_init_completed == false) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, @@ -2011,9 +2011,11 @@ static int rtw_set_ssid(struct rtw_adapter* padapter, RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n")); - if (pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len && - !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid, - ssid->ssid_len)) { + if (pmlmepriv->assoc_ssid.ssid_len == + newnetwork->network.Ssid.ssid_len && + !memcmp(&pmlmepriv->assoc_ssid.ssid, + newnetwork->network.Ssid.ssid, + newnetwork->network.Ssid.ssid_len)) { if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("New SSID is same SSID, " @@ -2056,8 +2058,9 @@ static int rtw_set_ssid(struct rtw_adapter* padapter, RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("Set SSID not the same ssid\n")); RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("set_ssid =[%s] len = 0x%x\n", ssid->ssid, - ssid->ssid_len)); + ("set_ssid =[%s] len = 0x%x\n", + newnetwork->network.Ssid.ssid, + newnetwork->network.Ssid.ssid_len)); RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("assoc_ssid =[%s] len = 0x%x\n", pmlmepriv->assoc_ssid.ssid, @@ -2093,7 +2096,9 @@ handle_tkip_countermeasure: } } - memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid)); + memcpy(&pmlmepriv->assoc_ssid, &newnetwork->network.Ssid, + sizeof(struct cfg80211_ssid)); + pmlmepriv->assoc_by_bssid = false; if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) @@ -2117,7 +2122,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, int ret = 0; struct list_head *phead, *plist, *ptmp; struct wlan_network *pnetwork = NULL; - struct cfg80211_ssid ssid; /* u8 matched_by_bssid = false; */ /* u8 matched_by_ssid = false; */ u8 matched = false; @@ -2161,8 +2165,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, rtw_scan_abort23a(padapter); } - memset(ssid.ssid, 0, sizeof(struct cfg80211_ssid)); - spin_lock_bh(&queue->lock); phead = get_list_head(queue); @@ -2315,11 +2317,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */ - memcpy(ssid.ssid, pnetwork->network.Ssid.ssid, - pnetwork->network.Ssid.ssid_len); - ssid.ssid_len = pnetwork->network.Ssid.ssid_len; - - if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) { + if (rtw_set_ssid(padapter, pnetwork) != _SUCCESS) { ret = -EBUSY; goto exit; } -- cgit From 70fbc1a8a191bb97c4a38ea105a92dd6cd20a140 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:44 +0200 Subject: staging: rtl8723au: rtw_set_ssid(): This is never called with _FW_UNDER_LINKING Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index c03181dbc35b..5a8b88c968b1 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2004,8 +2004,6 @@ static int rtw_set_ssid(struct rtw_adapter *padapter, DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv)); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) goto handle_tkip_countermeasure; - else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) - goto release_mlme_lock; if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, -- cgit From 4d9c63bbd207b20ae648bd6bd3ebcf6e52619616 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:45 +0200 Subject: staging: rtl8723au: rtw_cfg80211_add_wep(): Use WLAN_KEY_LEN_* Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 5a8b88c968b1..9c36f6cbd4a8 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1931,12 +1931,12 @@ static int rtw_cfg80211_add_wep(struct rtw_adapter *padapter, } switch (wep->keylen) { - case 5: + case WLAN_KEY_LEN_WEP40: psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("%s:wep->KeyLength = 5\n", __func__)); break; - case 13: + case WLAN_KEY_LEN_WEP104: psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("%s:wep->KeyLength = 13\n", __func__)); -- cgit From be82728e9c10542688dfc0810afa38fd47f4a06b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:46 +0200 Subject: staging: rtl8723au: rtw_do_join23a(): Use correct error return values Don't mix true/fail with _SUCCESS/_FAIL as return value Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 7b0d3dba8cec..28cfea53b175 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -109,7 +109,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter) _drv_err_, ("***Error =>do_goin: rtw_creat" "ebss_cmd status FAIL***\n")); - ret = false; + ret = _FAIL; goto exit; } -- cgit From 2febc8679edbe1f885bd2aedc548ff383853465b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:47 +0200 Subject: staging: rtl8723au: Minor debug message fixup Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 2a0c43aceaa9..31cf1ac2fd2d 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1771,7 +1771,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) pnetwork = container_of(plist, struct wlan_network, list); if (!pnetwork) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, - ("%s return _FAIL:(pnetwork == NULL)\n", + ("%s: return _FAIL:(pnetwork == NULL)\n", __func__)); ret = _FAIL; goto exit; @@ -1793,8 +1793,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) /* check for situation of _FW_LINKED */ if (check_fwstate(pmlmepriv, _FW_LINKED)) { - DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!!!\n", - __func__); + DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__); rtw_disassoc_cmd23a(adapter, 0, true); rtw_indicate_disconnect23a(adapter); -- cgit From fa862a7f799fcf60f9e0aed9c04fbfdeae518668 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:48 +0200 Subject: staging: rtl8723au: Don't prepend debug console messages with 'ERROR ' Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/rtw_debug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/rtw_debug.h b/drivers/staging/rtl8723au/include/rtw_debug.h index a69d6e215b8b..b6b01732a725 100644 --- a/drivers/staging/rtl8723au/include/rtw_debug.h +++ b/drivers/staging/rtl8723au/include/rtw_debug.h @@ -146,7 +146,7 @@ #define DBG_8723A_LEVEL(_level, fmt, arg...) \ do { \ if (_level <= GlobalDebugLevel23A) \ - pr_info(DRIVER_PREFIX"ERROR " fmt, ##arg);\ + pr_info(DRIVER_PREFIX fmt, ##arg);\ } while (0) #define DBG_8723A(...) \ -- cgit From 0e634a029b4397c5a045f1d26fad6b7458386738 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:49 +0200 Subject: staging: rtl8723au: Introduce rtw_select_candidate_from_queue() This splits a portion of rtw_select_and_join_from_scanned_queue23a() into rtw_select_candidate_from_queue() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 31cf1ac2fd2d..9248f4834d6f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -27,6 +27,9 @@ #include #include +static struct wlan_network * +rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv); + static void rtw_init_mlme_timer(struct rtw_adapter *padapter) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -1754,18 +1757,15 @@ pmlmepriv->lock */ -int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) +static struct wlan_network * +rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv) { - int ret; - struct list_head *phead, *plist, *ptmp; - struct rtw_adapter *adapter; + struct wlan_network *pnetwork, *candidate = NULL; struct rtw_queue *queue = &pmlmepriv->scanned_queue; - struct wlan_network *pnetwork; - struct wlan_network *candidate = NULL; + struct list_head *phead, *plist, *ptmp; spin_lock_bh(&pmlmepriv->scanned_queue.lock); phead = get_list_head(queue); - adapter = pmlmepriv->nic_hdl; list_for_each_safe(plist, ptmp, phead) { pnetwork = container_of(plist, struct wlan_network, list); @@ -1773,13 +1773,26 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("%s: return _FAIL:(pnetwork == NULL)\n", __func__)); - ret = _FAIL; goto exit; } rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork); } +exit: + spin_unlock_bh(&pmlmepriv->scanned_queue.lock); + return candidate; +} + +int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) +{ + struct rtw_adapter *adapter; + struct wlan_network *candidate = NULL; + int ret; + + adapter = pmlmepriv->nic_hdl; + + candidate = rtw_select_candidate_from_queue(pmlmepriv); if (!candidate) { DBG_8723A("%s: return _FAIL(candidate == NULL)\n", __func__); ret = _FAIL; @@ -1803,8 +1816,6 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) ret = rtw_joinbss_cmd23a(adapter, candidate); exit: - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - return ret; } -- cgit From b66dad2d502080d05320b74f38d247bf1a9993fa Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:50 +0200 Subject: staging: rtl8723au: Introduce rtw_do_join_network() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 -- drivers/staging/rtl8723au/core/rtw_mlme.c | 46 ++++++++++++++++---------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 ++ 3 files changed, 30 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 28cfea53b175..d2ed9d15ad9d 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -79,8 +79,6 @@ int rtw_do_join23a(struct rtw_adapter *padapter) select_ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); if (select_ret == _SUCCESS) { pmlmepriv->to_join = false; - mod_timer(&pmlmepriv->assoc_timer, - jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); } else { if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { struct wlan_bssid_ex *pdev_network; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 9248f4834d6f..4a146fbc86ca 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -739,8 +739,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) if (rtw_select_and_join_from_scanned_queue23a( pmlmepriv) == _SUCCESS) { - mod_timer(&pmlmepriv->assoc_timer, - jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); } else { pdev_network = &adapter->registrypriv.dev_network; pibss = adapter->registrypriv.dev_network.MacAddress; @@ -782,14 +780,10 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) pmlmepriv->to_join = false; ret = rtw_select_and_join_from_scanned_queue23a( pmlmepriv); - if (ret == _SUCCESS) { - unsigned long e; - e = msecs_to_jiffies(MAX_JOIN_TIMEOUT); - mod_timer(&pmlmepriv->assoc_timer, jiffies + e); - } else if (ret == 2) {/* there is no need to wait */ + if (ret == 2) {/* there is no need to wait */ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); rtw_indicate_connect23a(adapter); - } else { + } else if (ret != _SUCCESS) { DBG_8723A("try_to_join, but select scanning " "queue fail, to_roaming:%d\n", adapter->mlmepriv.to_roaming); @@ -1784,6 +1778,31 @@ exit: return candidate; } + +int rtw_do_join_network(struct rtw_adapter *adapter, + struct wlan_network *candidate) +{ + int ret; + + /* check for situation of _FW_LINKED */ + if (check_fwstate(&adapter->mlmepriv, _FW_LINKED)) { + DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__); + + rtw_disassoc_cmd23a(adapter, 0, true); + rtw_indicate_disconnect23a(adapter); + rtw_free_assoc_resources23a(adapter, 0); + } + set_fwstate(&adapter->mlmepriv, _FW_UNDER_LINKING); + + ret = rtw_joinbss_cmd23a(adapter, candidate); + + if (ret == _SUCCESS) + mod_timer(&adapter->mlmepriv.assoc_timer, + jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); + + return ret; +} + int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) { struct rtw_adapter *adapter; @@ -1804,16 +1823,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) candidate->network.DSConfig); } - /* check for situation of _FW_LINKED */ - if (check_fwstate(pmlmepriv, _FW_LINKED)) { - DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__); - - rtw_disassoc_cmd23a(adapter, 0, true); - rtw_indicate_disconnect23a(adapter); - rtw_free_assoc_resources23a(adapter, 0); - } - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - ret = rtw_joinbss_cmd23a(adapter, candidate); + ret = rtw_do_join_network(adapter, candidate); exit: return ret; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index c8e82bfb3f75..e48518f4b1bc 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -240,6 +240,8 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *adapter); void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv); +int rtw_do_join_network(struct rtw_adapter *adapter, + struct wlan_network *candidate); int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv); int rtw_set_key23a(struct rtw_adapter *adapter, struct security_priv *psecuritypriv, int keyid, u8 set_tx); -- cgit From 557f9a452df4e0388fa48402b0e2673c45a579f8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:51 +0200 Subject: staging: rtl8723au: rtw_do_join23a(): Use __func__ to get function name in debug messages Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index d2ed9d15ad9d..f3dd9959a9c6 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -35,8 +35,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter) plist = phead->next; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("\n rtw_do_join23a: phead = %p; plist = %p\n\n\n", - phead, plist)); + ("%s: phead = %p; plist = %p\n\n\n", __func__, phead, plist)); pmlmepriv->cur_network.join_res = -2; @@ -55,8 +54,8 @@ int rtw_do_join23a(struct rtw_adapter *padapter) if (pmlmepriv->LinkDetectInfo.bBusyTraffic == false || padapter->mlmepriv.to_roaming > 0) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("rtw_do_join23a(): site survey if scanned_queue " - "is empty\n.")); + ("%s: site survey if scanned_queue is empty\n", + __func__)); /* submit site_survey23a_cmd */ ret = rtw_sitesurvey_cmd23a(padapter, &pmlmepriv->assoc_ssid, 1, @@ -64,8 +63,8 @@ int rtw_do_join23a(struct rtw_adapter *padapter) if (ret != _SUCCESS) { pmlmepriv->to_join = false; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_do_join23a(): site survey return " - "error\n.")); + ("%s: site survey return error\n", + __func__)); } } else { pmlmepriv->to_join = false; @@ -134,7 +133,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter) ret = rtw_sitesurvey_cmd23a(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0); if (ret != _SUCCESS) { pmlmepriv->to_join = false; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("do_join(): site survey return error\n.")); + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("%s: site survey return error\n", __func__)); } } else { ret = _FAIL; -- cgit From ca3504be633315cb19b433bada574d109065e2fa Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:52 +0200 Subject: staging: rtl8723au: rtw_surveydone_event_callback23a(): Remove superfluous memset() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 4a146fbc86ca..77a0a4aa2bbd 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -751,8 +751,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) ("switching to adhoc " "master\n")); - memset(&pdev_network->Ssid, 0, - sizeof(struct cfg80211_ssid)); memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct cfg80211_ssid)); -- cgit From fcc6020ae8915eedf8f9bd584f32a6f731ff1d14 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:53 +0200 Subject: staging: rtl8723au: Consolidate duplicate adhoc joining code into rtw_do_join_adhoc() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 40 +---------- drivers/staging/rtl8723au/core/rtw_mlme.c | 93 ++++++++++---------------- drivers/staging/rtl8723au/include/rtw_mlme.h | 1 + 3 files changed, 41 insertions(+), 93 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index f3dd9959a9c6..a994893eddea 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -25,7 +25,6 @@ int rtw_do_join23a(struct rtw_adapter *padapter) { struct list_head *plist, *phead; - u8* pibss = NULL; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct rtw_queue *queue = &pmlmepriv->scanned_queue; int ret = _SUCCESS; @@ -80,43 +79,10 @@ int rtw_do_join23a(struct rtw_adapter *padapter) pmlmepriv->to_join = false; } else { if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - struct wlan_bssid_ex *pdev_network; - /* submit createbss_cmd to change to a - ADHOC_MASTER */ - - /* pmlmepriv->lock has been acquired by - caller... */ - pdev_network = - &padapter->registrypriv.dev_network; - - pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE; - - pibss = padapter->registrypriv.dev_network.MacAddress; - - memcpy(&pdev_network->Ssid, - &pmlmepriv->assoc_ssid, - sizeof(struct cfg80211_ssid)); - - rtw_update_registrypriv_dev_network23a(padapter); - - rtw_generate_random_ibss23a(pibss); - - if (rtw_createbss_cmd23a(padapter) != _SUCCESS) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, - _drv_err_, - ("***Error =>do_goin: rtw_creat" - "ebss_cmd status FAIL***\n")); - ret = _FAIL; + /* switch to ADHOC_MASTER */ + ret = rtw_do_join_adhoc(padapter); + if (ret != _SUCCESS) goto exit; - } - - pmlmepriv->to_join = false; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, - _drv_info_, - ("***Error => rtw_select_and_join_from" - "_scanned_queue FAIL under STA_Mode" - "***\n ")); } else { /* can't associate ; reset under-linking */ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 77a0a4aa2bbd..81693c1983cb 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -705,8 +705,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) { struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; - struct wlan_bssid_ex *pdev_network; - u8 *pibss; spin_lock_bh(&pmlmepriv->lock); @@ -738,39 +736,8 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) set_fwstate(pmlmepriv, _FW_UNDER_LINKING); if (rtw_select_and_join_from_scanned_queue23a( - pmlmepriv) == _SUCCESS) { - } else { - pdev_network = &adapter->registrypriv.dev_network; - pibss = adapter->registrypriv.dev_network.MacAddress; - - _clr_fwstate_(pmlmepriv, - _FW_UNDER_SURVEY); - - RT_TRACE(_module_rtl871x_mlme_c_, - _drv_err_, - ("switching to adhoc " - "master\n")); - - memcpy(&pdev_network->Ssid, - &pmlmepriv->assoc_ssid, - sizeof(struct cfg80211_ssid)); - - rtw_update_registrypriv_dev_network23a( - adapter); - rtw_generate_random_ibss23a(pibss); - - pmlmepriv->fw_state = - WIFI_ADHOC_MASTER_STATE; - - if (rtw_createbss_cmd23a(adapter) != - _SUCCESS) - RT_TRACE(_module_rtl871x_mlme_c_, - _drv_err_, - ("Error =>rtw_createbss_cmd23a" - " status FAIL\n")); - - pmlmepriv->to_join = false; - } + pmlmepriv) != _SUCCESS) + rtw_do_join_adhoc(adapter); } } else { int ret; @@ -1425,7 +1392,6 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) struct sta_info *psta; struct wlan_network* pwlan; struct wlan_bssid_ex *pdev_network; - u8 *pibss; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct stadel_event *pstadel = (struct stadel_event *)pbuf; struct sta_priv *pstapriv = &adapter->stapriv; @@ -1496,30 +1462,11 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) spin_unlock_bh(&pmlmepriv->scanned_queue.lock); /* re-create ibss */ pdev_network = &adapter->registrypriv.dev_network; - pibss = adapter->registrypriv.dev_network.MacAddress; memcpy(pdev_network, &tgt_network->network, get_wlan_bssid_ex_sz(&tgt_network->network)); - memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, - sizeof(struct cfg80211_ssid)); - - rtw_update_registrypriv_dev_network23a(adapter); - - rtw_generate_random_ibss23a(pibss); - - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - set_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE); - _clr_fwstate_(pmlmepriv, WIFI_ADHOC_STATE); - } - - if (rtw_createbss_cmd23a(adapter) != _SUCCESS) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, - _drv_err_, - ("***Error =>stadel_event_callback: " - "rtw_createbss_cmd23a status " - "FAIL***\n")); - } + rtw_do_join_adhoc(adapter); } } @@ -1777,6 +1724,40 @@ exit: } +int rtw_do_join_adhoc(struct rtw_adapter *adapter) +{ + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct wlan_bssid_ex *pdev_network; + u8 *ibss; + int ret; + + pdev_network = &adapter->registrypriv.dev_network; + ibss = adapter->registrypriv.dev_network.MacAddress; + + _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); + + RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, + ("switching to adhoc master\n")); + + memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, + sizeof(struct cfg80211_ssid)); + + rtw_update_registrypriv_dev_network23a(adapter); + rtw_generate_random_ibss23a(ibss); + + pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE; + + ret = rtw_createbss_cmd23a(adapter); + if (ret != _SUCCESS) { + RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, + ("Error =>rtw_createbss_cmd23a status FAIL\n")); + } else { + pmlmepriv->to_join = false; + } + + return ret; +} + int rtw_do_join_network(struct rtw_adapter *adapter, struct wlan_network *candidate) { diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index e48518f4b1bc..79c3b3dec991 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -240,6 +240,7 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *adapter); void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv); +int rtw_do_join_adhoc(struct rtw_adapter *adapter); int rtw_do_join_network(struct rtw_adapter *adapter, struct wlan_network *candidate); int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv); -- cgit From 3221bb536d92967ac204424140699a4fc23e0ac5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:54 +0200 Subject: staging: rtl8723au: Remove no-op rtw_get_encrypt_decrypt_from_registrypriv23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 7 ------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 -- 2 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 81693c1983cb..efb2161e5827 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1151,8 +1151,6 @@ void rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf) ("joinbss event call back received with res=%d\n", pnetwork->join_res)); - rtw_get_encrypt_decrypt_from_registrypriv23a(adapter); - if (pmlmepriv->assoc_ssid.ssid_len == 0) { RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_, ("@@@@@ joinbss event call back for Any SSid\n")); @@ -2155,11 +2153,6 @@ void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter) /* pdev_network->IELength = cpu_to_le32(sz); */ } -void rtw_get_encrypt_decrypt_from_registrypriv23a(struct rtw_adapter* adapter) -{ - -} - /* the fucntion is at passive_level */ void rtw_joinbss_reset23a(struct rtw_adapter *padapter) { diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index 79c3b3dec991..bc420ec6f436 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -331,8 +331,6 @@ void rtw_init_registrypriv_dev_network23a(struct rtw_adapter *adapter); void rtw_update_registrypriv_dev_network23a(struct rtw_adapter *adapter); -void rtw_get_encrypt_decrypt_from_registrypriv23a(struct rtw_adapter *adapter); - void rtw_scan_timeout_handler23a(unsigned long data); void rtw_dynamic_check_timer_handler(unsigned long data); -- cgit From e5c4db0959fd604baf95508e5ac6c62b72bf2c7a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:55 +0200 Subject: staging: rtl8723au: to_join will no be true if _FW_LINKED is set Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index efb2161e5827..06dc89796aaa 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -705,6 +705,7 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) { struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; + int ret; spin_lock_bh(&pmlmepriv->lock); @@ -732,15 +733,13 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) if (pmlmepriv->to_join == true) { if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - if (!check_fwstate(pmlmepriv, _FW_LINKED)) { - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); + set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - if (rtw_select_and_join_from_scanned_queue23a( - pmlmepriv) != _SUCCESS) - rtw_do_join_adhoc(adapter); - } + ret = rtw_select_and_join_from_scanned_queue23a( + pmlmepriv); + if (ret != _SUCCESS) + rtw_do_join_adhoc(adapter); } else { - int ret; set_fwstate(pmlmepriv, _FW_UNDER_LINKING); pmlmepriv->to_join = false; ret = rtw_select_and_join_from_scanned_queue23a( -- cgit From 66ed1bc999eaa4357bd2d7098386e2284439098c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:56 +0200 Subject: staging: rtl8723au: rtw_surveydone_event_callback23a(): We always set _FW_UNDER_LINKING Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 06dc89796aaa..d2b38f7abca3 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -732,15 +732,13 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) rtw_set_signal_stat_timer(&adapter->recvpriv); if (pmlmepriv->to_join == true) { + set_fwstate(pmlmepriv, _FW_UNDER_LINKING); if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - ret = rtw_select_and_join_from_scanned_queue23a( pmlmepriv); if (ret != _SUCCESS) rtw_do_join_adhoc(adapter); } else { - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); pmlmepriv->to_join = false; ret = rtw_select_and_join_from_scanned_queue23a( pmlmepriv); -- cgit From 85b3c5e48e6bd5e29272f9b1a4c1e2fd03eb21ab Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:57 +0200 Subject: staging: rtl8723au: rtw_select_and_join_from_scanned_queue23a() never returns 2 Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index d2b38f7abca3..1557088f8cee 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -742,10 +742,7 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) pmlmepriv->to_join = false; ret = rtw_select_and_join_from_scanned_queue23a( pmlmepriv); - if (ret == 2) {/* there is no need to wait */ - _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - rtw_indicate_connect23a(adapter); - } else if (ret != _SUCCESS) { + if (ret != _SUCCESS) { DBG_8723A("try_to_join, but select scanning " "queue fail, to_roaming:%d\n", adapter->mlmepriv.to_roaming); -- cgit From 72795e9de7deae0952d1174cfb37cb869b582d29 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:58 +0200 Subject: staging: rtl8723au: rtw_set_ssid(): Use rtw_do_join_network() We already have the wlan_network we wish to join, hence it's pointless to go back to the scanned_queue and pull it out of there, before running the join logic. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 25 +++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 9c36f6cbd4a8..e75e078425c7 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2099,11 +2099,28 @@ handle_tkip_countermeasure: pmlmepriv->assoc_by_bssid = false; - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) - pmlmepriv->to_join = true; - else - status = rtw_do_join23a(padapter); + pmlmepriv->to_join = true; + + if (!check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) { + pmlmepriv->cur_network.join_res = -2; + status = rtw_do_join_network(padapter, newnetwork); + if (status == _SUCCESS) { + pmlmepriv->to_join = false; + } else { + if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { + /* switch to ADHOC_MASTER */ + status = rtw_do_join_adhoc(padapter); + if (status != _SUCCESS) + goto release_mlme_lock; + } else { + /* can't associate ; reset under-linking */ + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); + status = _FAIL; + pmlmepriv->to_join = false; + } + } + } release_mlme_lock: spin_unlock_bh(&pmlmepriv->lock); -- cgit From e89c05505ff6f2796a044931d622b6565f416e18 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:59 +0200 Subject: staging: rtl8723au: rtw_do_join23a(): Don't start scanning if network isn't found Don't start running network scans if trying to connect to a network not in our cache. Let the 802.11 stack do it's job instead. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 85 ++++---------------------- 1 file changed, 13 insertions(+), 72 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index a994893eddea..4f6d7f542953 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -24,17 +24,8 @@ int rtw_do_join23a(struct rtw_adapter *padapter) { - struct list_head *plist, *phead; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct rtw_queue *queue = &pmlmepriv->scanned_queue; - int ret = _SUCCESS; - - spin_lock_bh(&pmlmepriv->scanned_queue.lock); - phead = get_list_head(queue); - plist = phead->next; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("%s: phead = %p; plist = %p\n\n\n", __func__, phead, plist)); + int ret; pmlmepriv->cur_network.join_res = -2; @@ -42,75 +33,25 @@ int rtw_do_join23a(struct rtw_adapter *padapter) pmlmepriv->to_join = true; - if (list_empty(&queue->queue)) { - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - - /* when set_ssid/set_bssid for rtw_do_join23a(), but - scanning queue is empty */ - /* we try to issue sitesurvey firstly */ - - if (pmlmepriv->LinkDetectInfo.bBusyTraffic == false || - padapter->mlmepriv.to_roaming > 0) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("%s: site survey if scanned_queue is empty\n", - __func__)); - /* submit site_survey23a_cmd */ - ret = rtw_sitesurvey_cmd23a(padapter, - &pmlmepriv->assoc_ssid, 1, - NULL, 0); - if (ret != _SUCCESS) { - pmlmepriv->to_join = false; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("%s: site survey return error\n", - __func__)); - } + ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); + if (ret == _SUCCESS) { + pmlmepriv->to_join = false; + } else { + if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { + /* switch to ADHOC_MASTER */ + ret = rtw_do_join_adhoc(padapter); + if (ret != _SUCCESS) + goto exit; } else { - pmlmepriv->to_join = false; - ret = _FAIL; - } + /* can't associate ; reset under-linking */ + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - goto exit; - } else { - int select_ret; - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - select_ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); - if (select_ret == _SUCCESS) { + ret = _FAIL; pmlmepriv->to_join = false; - } else { - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - /* switch to ADHOC_MASTER */ - ret = rtw_do_join_adhoc(padapter); - if (ret != _SUCCESS) - goto exit; - } else { - /* can't associate ; reset under-linking */ - _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - - /* when set_ssid/set_bssid for rtw_do_join23a(), - but there are no desired bss in scanning - queue */ - /* we try to issue sitesurvey firstly */ - if (pmlmepriv->LinkDetectInfo.bBusyTraffic == - false || padapter->mlmepriv.to_roaming > 0){ - /* DBG_8723A("rtw_do_join23a() when no " - "desired bss in scanning queue\n"); - */ - ret = rtw_sitesurvey_cmd23a(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0); - if (ret != _SUCCESS) { - pmlmepriv->to_join = false; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("%s: site survey return error\n", __func__)); - } - } else { - ret = _FAIL; - pmlmepriv->to_join = false; - } - } } } exit: - return ret; } -- cgit From e007b4c77cd70c087929c1493cc4207dd5163748 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:00 +0200 Subject: staging: rtl8723au: Move rtw_do_join23a() to rtw_mlme.c and declare it static Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 33 -------------------- drivers/staging/rtl8723au/core/rtw_mlme.c | 38 +++++++++++++++++++++-- drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 1 - 3 files changed, 36 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 4f6d7f542953..77835fc80a52 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -22,39 +22,6 @@ #include #include -int rtw_do_join23a(struct rtw_adapter *padapter) -{ - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - int ret; - - pmlmepriv->cur_network.join_res = -2; - - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - - pmlmepriv->to_join = true; - - ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); - if (ret == _SUCCESS) { - pmlmepriv->to_join = false; - } else { - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { - /* switch to ADHOC_MASTER */ - ret = rtw_do_join_adhoc(padapter); - if (ret != _SUCCESS) - goto exit; - } else { - /* can't associate ; reset under-linking */ - _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - - ret = _FAIL; - pmlmepriv->to_join = false; - } - } - -exit: - return ret; -} - int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, int ssid_max_num) diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 1557088f8cee..bdebde784f16 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -29,6 +29,7 @@ static struct wlan_network * rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv); +static int rtw_do_join(struct rtw_adapter *padapter); static void rtw_init_mlme_timer(struct rtw_adapter *padapter) { @@ -280,7 +281,7 @@ static void _rtw_roaming(struct rtw_adapter *padapter, pmlmepriv->assoc_by_bssid = false; while (1) { - do_join_r = rtw_do_join23a(padapter); + do_join_r = rtw_do_join(padapter); if (do_join_r == _SUCCESS) break; else { @@ -1489,7 +1490,7 @@ void rtw23a_join_to_handler (unsigned long data) if (adapter->mlmepriv.to_roaming != 0) { /* try another */ DBG_8723A("%s try another roaming\n", __func__); - do_join_r = rtw_do_join23a(adapter); + do_join_r = rtw_do_join(adapter); if (do_join_r != _SUCCESS) { DBG_8723A("%s roaming do_join return " "%d\n", __func__ , do_join_r); @@ -1688,6 +1689,39 @@ pmlmepriv->lock */ +static int rtw_do_join(struct rtw_adapter *padapter) +{ + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + int ret; + + pmlmepriv->cur_network.join_res = -2; + + set_fwstate(pmlmepriv, _FW_UNDER_LINKING); + + pmlmepriv->to_join = true; + + ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); + if (ret == _SUCCESS) { + pmlmepriv->to_join = false; + } else { + if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { + /* switch to ADHOC_MASTER */ + ret = rtw_do_join_adhoc(padapter); + if (ret != _SUCCESS) + goto exit; + } else { + /* can't associate ; reset under-linking */ + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); + + ret = _FAIL; + pmlmepriv->to_join = false; + } + } + +exit: + return ret; +} + static struct wlan_network * rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv) { diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h index 14a36f5049df..e84a42286400 100644 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h @@ -23,6 +23,5 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter); s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); -int rtw_do_join23a(struct rtw_adapter *padapter); #endif -- cgit From 8f9558b906bed222231fcfaed89cca36d0b56f01 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:01 +0200 Subject: staging: rtl8723au: rtw_get_cur_max_rate23a(): Remove duplicate fwstate checks Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 77835fc80a52..481f94cdb3fa 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -100,10 +100,6 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0; u16 mcs_rate = 0; - if (!check_fwstate(pmlmepriv, _FW_LINKED) && - !check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) - return 0; - if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) { p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12], -- cgit From 023b40d882d7bfee65612115fd736bafd285e8dc Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:02 +0200 Subject: staging: rtl8723au: rtw_get_cur_max_rate23a(): We are in N mode if WLAN_EID_HT_CAPABILITY is present Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 63 ++++++++++++-------------- 1 file changed, 29 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 481f94cdb3fa..e2c40a6faf0b 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -100,41 +100,36 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0; u16 mcs_rate = 0; - if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) { - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - &pcur_bss->IEs[12], - pcur_bss->IELength - 12); - if (p && p[1] > 0) { - pht_capie = (struct ieee80211_ht_cap *)(p + 2); - - memcpy(&mcs_rate, &pht_capie->mcs, 2); - - /* bw_40MHz = (pht_capie->cap_info& - IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */ - /* cur_bwmod is updated by beacon, pmlmeinfo is - updated by association response */ - bw_40MHz = (pmlmeext->cur_bwmode && - (pmlmeinfo->HT_info.ht_param & - IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0; - - /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP - _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ - short_GI_20 = - (pmlmeinfo->ht_cap.cap_info & - cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0; - short_GI_40 = - (pmlmeinfo->ht_cap.cap_info & - cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0; - - rf_type = rtl8723a_get_rf_type(adapter); - max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & - pregistrypriv->cbw40_enable, - short_GI_20, short_GI_40, - &pmlmeinfo->ht_cap.mcs); - } + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12], + pcur_bss->IELength - 12); + if (p && p[1] > 0) { + pht_capie = (struct ieee80211_ht_cap *)(p + 2); + + memcpy(&mcs_rate, &pht_capie->mcs, 2); + + /* bw_40MHz = (pht_capie->cap_info& + IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */ + /* cur_bwmod is updated by beacon, pmlmeinfo is + updated by association response */ + bw_40MHz = (pmlmeext->cur_bwmode && + (pmlmeinfo->HT_info.ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0; + + /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP + _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ + short_GI_20 = (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0; + short_GI_40 = (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0; + + rf_type = rtl8723a_get_rf_type(adapter); + max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & + pregistrypriv->cbw40_enable, + short_GI_20, short_GI_40, + &pmlmeinfo->ht_cap.mcs); } else { - while ((pcur_bss->SupportedRates[i] != 0) && - (pcur_bss->SupportedRates[i] != 0xFF)) { + while (pcur_bss->SupportedRates[i] != 0 && + pcur_bss->SupportedRates[i] != 0xFF) { rate = pcur_bss->SupportedRates[i] & 0x7F; if (rate>max_rate) max_rate = rate; -- cgit From 27fd731ece203c37f0a3708cafc95e9cead8cd2d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:03 +0200 Subject: staging: rtl8723au: Move rtw_get_cur_max_rate23a() to ioctl_cfg80211.c This function has only one caller, so move it home and declare it static Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 63 ----------------------- drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 1 - drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 59 ++++++++++++++++++++- 3 files changed, 58 insertions(+), 65 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index e2c40a6faf0b..b58cd9e99958 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -78,66 +78,3 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, exit: return res; } - -/* -* rtw_get_cur_max_rate23a - -* @adapter: pointer to _adapter structure -* -* Return 0 or 100Kbps -*/ -u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter) -{ - int i = 0; - const u8 *p; - u16 rate = 0, max_rate = 0; - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - struct registry_priv *pregistrypriv = &adapter->registrypriv; - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; - struct ieee80211_ht_cap *pht_capie; - u8 rf_type = 0; - u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0; - u16 mcs_rate = 0; - - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12], - pcur_bss->IELength - 12); - if (p && p[1] > 0) { - pht_capie = (struct ieee80211_ht_cap *)(p + 2); - - memcpy(&mcs_rate, &pht_capie->mcs, 2); - - /* bw_40MHz = (pht_capie->cap_info& - IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */ - /* cur_bwmod is updated by beacon, pmlmeinfo is - updated by association response */ - bw_40MHz = (pmlmeext->cur_bwmode && - (pmlmeinfo->HT_info.ht_param & - IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0; - - /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP - _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ - short_GI_20 = (pmlmeinfo->ht_cap.cap_info & - cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0; - short_GI_40 = (pmlmeinfo->ht_cap.cap_info & - cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0; - - rf_type = rtl8723a_get_rf_type(adapter); - max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & - pregistrypriv->cbw40_enable, - short_GI_20, short_GI_40, - &pmlmeinfo->ht_cap.mcs); - } else { - while (pcur_bss->SupportedRates[i] != 0 && - pcur_bss->SupportedRates[i] != 0xFF) { - rate = pcur_bss->SupportedRates[i] & 0x7F; - if (rate>max_rate) - max_rate = rate; - i++; - } - - max_rate = max_rate * 10 / 2; - } - - return max_rate; -} diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h index e84a42286400..855fc40bae25 100644 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h @@ -21,7 +21,6 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, struct cfg80211_ssid *pssid, int ssid_max_num); -u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter); s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); #endif diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index e75e078425c7..a29718db68aa 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1223,6 +1223,63 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy, return 0; } +static u16 rtw_get_cur_max_rate(struct rtw_adapter *adapter) +{ + int i = 0; + const u8 *p; + u16 rate = 0, max_rate = 0; + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; + struct registry_priv *pregistrypriv = &adapter->registrypriv; + struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; + struct ieee80211_ht_cap *pht_capie; + u8 rf_type = 0; + u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0; + u16 mcs_rate = 0; + + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12], + pcur_bss->IELength - 12); + if (p && p[1] > 0) { + pht_capie = (struct ieee80211_ht_cap *)(p + 2); + + memcpy(&mcs_rate, &pht_capie->mcs, 2); + + /* bw_40MHz = (pht_capie->cap_info& + IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */ + /* cur_bwmod is updated by beacon, pmlmeinfo is + updated by association response */ + bw_40MHz = (pmlmeext->cur_bwmode && + (pmlmeinfo->HT_info.ht_param & + IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0; + + /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP + _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */ + short_GI_20 = (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0; + short_GI_40 = (pmlmeinfo->ht_cap.cap_info & + cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0; + + rf_type = rtl8723a_get_rf_type(adapter); + max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz & + pregistrypriv->cbw40_enable, + short_GI_20, short_GI_40, + &pmlmeinfo->ht_cap.mcs); + } else { + while (pcur_bss->SupportedRates[i] != 0 && + pcur_bss->SupportedRates[i] != 0xFF) { + rate = pcur_bss->SupportedRates[i] & 0x7F; + if (rate>max_rate) + max_rate = rate; + i++; + } + + max_rate = max_rate * 10 / 2; + } + + return max_rate; +} + static int cfg80211_rtw_get_station(struct wiphy *wiphy, struct net_device *ndev, const u8 *mac, struct station_info *sinfo) @@ -1267,7 +1324,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy, signal_strength); sinfo->filled |= STATION_INFO_TX_BITRATE; - sinfo->txrate.legacy = rtw_get_cur_max_rate23a(padapter); + sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter); sinfo->filled |= STATION_INFO_RX_PACKETS; sinfo->rx_packets = sta_rx_data_pkts(psta); -- cgit From e9bb5ad46d85aa81036913b938d2f4410beceb85 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:04 +0200 Subject: staging: rtl8723au: rtw_set_802_11_bssid23a_list_scan(): Use __func__ to print function name Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index b58cd9e99958..30287af816f2 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -30,8 +30,7 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, int res = _SUCCESS; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("+rtw_set_802_11_bssid23a_list_scan(), fw_state =%x\n", - get_fwstate(pmlmepriv))); + ("+%s: fw_state =%x\n", __func__, get_fwstate(pmlmepriv))); if (!padapter) { res = _FAIL; @@ -40,8 +39,7 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, if (padapter->hw_init_completed == false) { res = _FAIL; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n === rtw_set_802_11_bssid23a_list_scan:" - "hw_init_completed == false ===\n")); + ("%s: hw_init_completed == false ===\n", __func__)); goto exit; } @@ -49,8 +47,8 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, (pmlmepriv->LinkDetectInfo.bBusyTraffic == true)) { /* Scan or linking is in progress, do nothing. */ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_set_802_11_bssid23a_list_scan fail since fw_state " - "= %x\n", get_fwstate(pmlmepriv))); + ("%s fail since fw_state = %x\n", __func__, + get_fwstate(pmlmepriv))); if (check_fwstate(pmlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) { -- cgit From 073c9d47c33e549bfad1935d986710f1d1e57279 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:05 +0200 Subject: staging: rtl8723au: Don't run regular scans in the driver, the stack handles that Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/Makefile | 1 - drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 78 ----------------------- drivers/staging/rtl8723au/core/rtw_mlme.c | 21 ------ drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 4 -- 4 files changed, 104 deletions(-) delete mode 100644 drivers/staging/rtl8723au/core/rtw_ioctl_set.c (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/Makefile b/drivers/staging/rtl8723au/Makefile index a6316af94b79..6f76c7b2adbc 100644 --- a/drivers/staging/rtl8723au/Makefile +++ b/drivers/staging/rtl8723au/Makefile @@ -1,7 +1,6 @@ r8723au-y := \ core/rtw_cmd.o \ core/rtw_efuse.o \ - core/rtw_ioctl_set.o \ core/rtw_ieee80211.o \ core/rtw_led.o \ core/rtw_mlme.o \ diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c deleted file mode 100644 index 30287af816f2..000000000000 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek 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. - * - ******************************************************************************/ -#define _RTW_IOCTL_SET_C_ - -#include -#include -#include -#include - -#include -#include - -int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, - struct cfg80211_ssid *pssid, - int ssid_max_num) -{ - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - int res = _SUCCESS; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("+%s: fw_state =%x\n", __func__, get_fwstate(pmlmepriv))); - - if (!padapter) { - res = _FAIL; - goto exit; - } - if (padapter->hw_init_completed == false) { - res = _FAIL; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("%s: hw_init_completed == false ===\n", __func__)); - goto exit; - } - - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) || - (pmlmepriv->LinkDetectInfo.bBusyTraffic == true)) { - /* Scan or linking is in progress, do nothing. */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("%s fail since fw_state = %x\n", __func__, - get_fwstate(pmlmepriv))); - - if (check_fwstate(pmlmepriv, - (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n###_FW_UNDER_SURVEY|_FW_UNDER_LINKING\n")); - } else { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n###pmlmepriv->sitesurveyctrl.traffic_" - "busy == true\n")); - } - } else { - if (rtw_is_scan_deny(padapter)) { - DBG_8723A("%s(%s): scan deny\n", - __func__, padapter->pnetdev->name); - return _SUCCESS; - } - - spin_lock_bh(&pmlmepriv->lock); - - res = rtw_sitesurvey_cmd23a(padapter, pssid, ssid_max_num, - NULL, 0); - - spin_unlock_bh(&pmlmepriv->lock); - } -exit: - return res; -} diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index bdebde784f16..e89d0198d82d 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1538,26 +1538,9 @@ void rtw_scan_timeout_handler23a(unsigned long data) rtw_cfg80211_indicate_scan_done(wdev_to_priv(adapter->rtw_wdev), true); } -static void rtw_auto_scan_handler(struct rtw_adapter *padapter) -{ - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - /* auto site survey per 60sec */ - if (pmlmepriv->scan_interval > 0) { - pmlmepriv->scan_interval--; - if (pmlmepriv->scan_interval == 0) { - DBG_8723A("%s\n", __func__); - rtw_set_802_11_bssid23a_list_scan(padapter, NULL, 0); - /* 30*2 sec = 60sec */ - pmlmepriv->scan_interval = SCAN_INTERVAL; - } - } -} - void rtw_dynamic_check_timer_handler(unsigned long data) { struct rtw_adapter *adapter = (struct rtw_adapter *)data; - struct registry_priv *pregistrypriv = &adapter->registrypriv; if (adapter->hw_init_completed == false) goto out; @@ -1571,10 +1554,6 @@ void rtw_dynamic_check_timer_handler(unsigned long data) rtw_dynamic_chk_wk_cmd23a(adapter); - if (pregistrypriv->wifi_spec == 1) { - /* auto site survey */ - rtw_auto_scan_handler(adapter); - } out: mod_timer(&adapter->mlmepriv.dynamic_chk_timer, jiffies + msecs_to_jiffies(2000)); diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h index 855fc40bae25..6c102dc97d42 100644 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h @@ -17,10 +17,6 @@ #include -int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter, - struct cfg80211_ssid *pssid, - int ssid_max_num); - s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); #endif -- cgit From da23732c6320dd1dfe802191532072da8e967833 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:06 +0200 Subject: staging: rtl8723au: Quiet unused variable warning when building with CONFIG_8723AU_AP_MODE=n Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 59047ad89b31..0d5269945323 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2931,7 +2931,6 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, unsigned char *pframe; struct ieee80211_mgmt *mgmt; unsigned int val32; - unsigned short val16; u16 auth_algo; int use_shared_key = 0; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; @@ -2960,6 +2959,7 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta, if (psta) { /* for AP mode */ #ifdef CONFIG_8723AU_AP_MODE + unsigned short val16; ether_addr_copy(mgmt->da, psta->hwaddr); ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); ether_addr_copy(mgmt->bssid, myid(&padapter->eeprompriv)); -- cgit From 379878662637a1247f19caf938a22918d702b14b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:07 +0200 Subject: staging: rtl8723au: Move FillH2CCmd() prototype to rtl8723a_cmd.h where it really belongs As an added bonus, remove the now obsolete rtw_ioctl_set.h Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 1 - .../staging/rtl8723au/hal/rtl8723a_bt-coexist.c | 1 - drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 1 - drivers/staging/rtl8723au/include/rtl8723a_cmd.h | 2 ++ drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 22 ---------------------- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 1 - drivers/staging/rtl8723au/os_dep/mlme_linux.c | 1 - 7 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 drivers/staging/rtl8723au/include/rtw_ioctl_set.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index e89d0198d82d..ab95ef0d80fb 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -24,7 +24,6 @@ #include #include #include -#include #include static struct wlan_network * diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c index bb869868b891..9054a987f06b 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c @@ -14,7 +14,6 @@ ******************************************************************************/ #include #include -#include #include #define DIS_PS_RX_BCN diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index e8737916c7ba..6e1fed2e70dd 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h index 900baccc3c24..e1ecbd049574 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h @@ -155,4 +155,6 @@ void rtl8723a_add_rateatid(struct rtw_adapter *padapter, u32 bitmap, u8 arg, u8 void CheckFwRsvdPageContent23a(struct rtw_adapter *padapter); +int FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); + #endif diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h deleted file mode 100644 index 6c102dc97d42..000000000000 --- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h +++ /dev/null @@ -1,22 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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. - * - ******************************************************************************/ -#ifndef __RTW_IOCTL_SET_H_ -#define __RTW_IOCTL_SET_H_ - -#include - -s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); - -#endif diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index a29718db68aa..5f0a6c7831c1 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -16,7 +16,6 @@ #include #include -#include #include #include "ioctl_cfg80211.h" diff --git a/drivers/staging/rtl8723au/os_dep/mlme_linux.c b/drivers/staging/rtl8723au/os_dep/mlme_linux.c index ac618fb8b762..ca24369f1208 100644 --- a/drivers/staging/rtl8723au/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8723au/os_dep/mlme_linux.c @@ -18,7 +18,6 @@ #include #include #include -#include static struct rt_pmkid_list backupPMKIDList[NUM_PMKID_CACHE]; -- cgit From 7579a7e47d6572455c48f822dd47bd1993ec9d95 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:17:08 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_wpa_ie(): Avoid pointless memcpy There is no point copying a buffer, just to scan it and then free it again. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 5f0a6c7831c1..9ad049ce3dab 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1806,7 +1806,6 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, size_t ielen) { const u8 *wps_ie; - u8 *buf = NULL; int group_cipher = 0, pairwise_cipher = 0; int ret = 0; const u8 *pwpa, *pwpa2; @@ -1822,19 +1821,14 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, ret = -EINVAL; goto exit; } - buf = kmemdup(pie, ielen, GFP_KERNEL); - if (buf == NULL) { - ret = -ENOMEM; - goto exit; - } /* dump */ DBG_8723A("set wpa_ie(length:%zu):\n", ielen); for (i = 0; i < ielen; i = i + 8) - DBG_8723A("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n", - buf[i], buf[i + 1], - buf[i + 2], buf[i + 3], buf[i + 4], - buf[i + 5], buf[i + 6], buf[i + 7]); + DBG_8723A("0x%.2x 0x%.2x 0x%.2x 0x%.2x " + "0x%.2x 0x%.2x 0x%.2x 0x%.2x\n", + pie[i], pie[i + 1], pie[i + 2], pie[i + 3], + pie[i + 4], pie[i + 5], pie[i + 6], pie[i + 7]); if (ielen < RSN_HEADER_LEN) { RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("Ie len too short %d\n", (int)ielen)); @@ -1844,7 +1838,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, pwpa = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, - buf, ielen); + pie, ielen); if (pwpa && pwpa[1] > 0) { if (rtw_parse_wpa_ie23a(pwpa, pwpa[1] + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) { @@ -1859,7 +1853,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, } } - pwpa2 = cfg80211_find_ie(WLAN_EID_RSN, buf, ielen); + pwpa2 = cfg80211_find_ie(WLAN_EID_RSN, pie, ielen); if (pwpa2 && pwpa2[1] > 0) { if (rtw_parse_wpa2_ie23a (pwpa2, pwpa2[1] + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) { @@ -1939,7 +1933,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, - buf, ielen); + pie, ielen); if (wps_ie && wps_ie[1] > 0) { DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ie[1]); padapter->securitypriv.wps_ie_len = wps_ie[1]; @@ -1967,7 +1961,6 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie, padapter->securitypriv.ndisauthtype)); exit: - kfree(buf); if (ret) _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS); return ret; -- cgit From ee264346fa08395aa6e846b72e7b3987e959f053 Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven Date: Wed, 11 Jun 2014 16:57:46 +0200 Subject: staging: rtl8723au: Add compiler check for -Wtype-limits Gcc versions before 4.3 do not support -Wtype-limits: cc1: error: unrecognized command line option "-Wtype-limits" Signed-off-by: Geert Uytterhoeven Acked-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/Makefile b/drivers/staging/rtl8723au/Makefile index 6f76c7b2adbc..a9aae2163639 100644 --- a/drivers/staging/rtl8723au/Makefile +++ b/drivers/staging/rtl8723au/Makefile @@ -52,4 +52,5 @@ r8723au-$(CONFIG_8723AU_AP_MODE) += core/rtw_ap.o obj-$(CONFIG_R8723AU) := r8723au.o -ccflags-y += -Wtype-limits -D__CHECK_ENDIAN__ -I$(src)/include +ccflags-y += $(call cc-option,-Wtype-limits,) +ccflags-y += -D__CHECK_ENDIAN__ -I$(src)/include -- cgit From a06a24d2b7c1e17dafd63a793cf9ec243985bbd1 Mon Sep 17 00:00:00 2001 From: Alexey Tulia Date: Fri, 13 Jun 2014 11:35:13 +0300 Subject: staging: usbip: fixed a coding-style warning This fixes the following warning: - WARNING: __constant_cpu_to_le32 should be cpu_to_le32 Signed-off-by: Alexey Tulia Signed-off-by: Greg Kroah-Hartman --- drivers/staging/usbip/vhci_hcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c index 0007d30e45bd..e21c1b4d09ed 100644 --- a/drivers/staging/usbip/vhci_hcd.c +++ b/drivers/staging/usbip/vhci_hcd.c @@ -304,7 +304,7 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, break; case GetHubStatus: usbip_dbg_vhci_rh(" GetHubStatus\n"); - *(__le32 *) buf = __constant_cpu_to_le32(0); + *(__le32 *) buf = cpu_to_le32(0); break; case GetPortStatus: usbip_dbg_vhci_rh(" GetPortStatus port %x\n", wIndex); -- cgit From 248c95915277edbe632ab171b0b082c2ba1af935 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Thu, 29 May 2014 17:05:18 +0530 Subject: staging: rtl8723au: Remove redundant casting in rtw_mlme_ext.c Casting value returned by kzalloc is useless. Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 0d5269945323..84ca06b81222 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4873,8 +4873,7 @@ void report_survey_event23a(struct rtw_adapter *padapter, pmlmeext = &padapter->mlmeextpriv; pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!pcmd_obj) return; @@ -4925,8 +4924,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!pcmd_obj) return; @@ -4970,8 +4968,7 @@ void report_join_res23a(struct rtw_adapter *padapter, int res) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!pcmd_obj) return; @@ -5021,8 +5018,7 @@ void report_del_sta_event23a(struct rtw_adapter *padapter, struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!pcmd_obj) return; @@ -5076,8 +5072,7 @@ void report_add_sta_event23a(struct rtw_adapter *padapter, struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!pcmd_obj) return; @@ -5493,13 +5488,12 @@ static void survey_timer_hdl(unsigned long data) pmlmeext->scan_abort = false;/* reset */ } - ph2c = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), - GFP_ATOMIC); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!ph2c) goto exit_survey_timer_hdl; - psurveyPara = (struct sitesurvey_parm*) - kzalloc(sizeof(struct sitesurvey_parm), GFP_ATOMIC); + psurveyPara = kzalloc(sizeof(struct sitesurvey_parm), + GFP_ATOMIC); if (!psurveyPara) { kfree(ph2c); goto exit_survey_timer_hdl; @@ -6173,14 +6167,13 @@ int set_tx_beacon_cmd23a(struct rtw_adapter* padapter) u8 res = _SUCCESS; int len_diff = 0; - ph2c = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (!ph2c) { res = _FAIL; goto exit; } - ptxBeacon_parm = (struct Tx_Beacon_param *) - kzalloc(sizeof(struct Tx_Beacon_param), GFP_ATOMIC); + ptxBeacon_parm = kzalloc(sizeof(struct Tx_Beacon_param), GFP_ATOMIC); if (!ptxBeacon_parm) { kfree(ph2c); res = _FAIL; -- cgit From db5767a3f9715540411d9c1cf2dfb4aeec366893 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Thu, 29 May 2014 17:05:19 +0530 Subject: staging: rtl8723au: Remove redundant casting in rtw_mlme.c Casting value returned by kzalloc is useless. Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index ab95ef0d80fb..799338b95afc 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1820,7 +1820,7 @@ int rtw_set_auth23a(struct rtw_adapter * adapter, struct cmd_priv *pcmdpriv = &adapter->cmdpriv; int res = _SUCCESS; - pcmd = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (!pcmd) { res = _FAIL; /* try again */ goto exit; -- cgit From 806c4879e04408e66ae35d7d0af37ec3c050e456 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Thu, 29 May 2014 17:05:20 +0530 Subject: staging: bcm: Remove redundant casting in Bcmchar.c Casting value returned by kzalloc is useless. Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Bcmchar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c index 606d5f5e9216..c1e01f7d64ba 100644 --- a/drivers/staging/bcm/Bcmchar.c +++ b/drivers/staging/bcm/Bcmchar.c @@ -1648,7 +1648,7 @@ static int bcm_char_ioctl_flash2x_section_read(void __user *argp, ReadOffset = sFlash2xRead.offset; OutPutBuff = IoBuffer.OutputBuffer; - pReadBuff = (PCHAR)kzalloc(BuffSize , GFP_KERNEL); + pReadBuff = kzalloc(BuffSize , GFP_KERNEL); if (pReadBuff == NULL) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, -- cgit From f5985867ff22e8dd572b9d361cc714abe10bc46c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:24 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 1 Move ni_8255_callback() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 28 ++++++++++++-------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 7ffdcc07ef92..ae941db6cb72 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -271,8 +271,6 @@ static void shutdown_ai_command(struct comedi_device *dev); static int ni_ao_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trignum); -static int ni_8255_callback(int dir, int port, int data, unsigned long arg); - #ifdef PCIDMA static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s); static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s); @@ -4159,6 +4157,19 @@ static int ni_alloc_private(struct comedi_device *dev) return 0; }; +static int ni_8255_callback(int dir, int port, int data, unsigned long arg) +{ + struct comedi_device *dev = (struct comedi_device *)arg; + struct ni_private *devpriv __maybe_unused = dev->private; + + if (dir) { + ni_writeb(data, Port_A + 2 * port); + return 0; + } else { + return ni_readb(Port_A + 2 * port); + } +} + static int ni_E_init(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -4489,19 +4500,6 @@ static int ni_E_init(struct comedi_device *dev) return 0; } -static int ni_8255_callback(int dir, int port, int data, unsigned long arg) -{ - struct comedi_device *dev = (struct comedi_device *)arg; - struct ni_private *devpriv __maybe_unused = dev->private; - - if (dir) { - ni_writeb(data, Port_A + 2 * port); - return 0; - } else { - return ni_readb(Port_A + 2 * port); - } -} - /* presents the EEPROM as a subdevice */ -- cgit From 36adeee19ef91a3aebac626cedbb3b0c323c6f4f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:25 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 2 Move the eeprom read functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 110 +++++++++++-------------- 1 file changed, 47 insertions(+), 63 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index ae941db6cb72..aa1f1938b8fb 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -228,14 +228,6 @@ static int ni_calib_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -static int ni_eeprom_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_m_series_eeprom_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data); - static int ni_pfi_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); @@ -254,7 +246,6 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data); static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s); -static int ni_read_eeprom(struct comedi_device *dev, int addr); #ifndef PCIDMA static void ni_handle_fifo_half_full(struct comedi_device *dev); @@ -4170,6 +4161,53 @@ static int ni_8255_callback(int dir, int port, int data, unsigned long arg) } } +static int ni_read_eeprom(struct comedi_device *dev, int addr) +{ + struct ni_private *devpriv __maybe_unused = dev->private; + int bit; + int bitstring; + + bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); + ni_writeb(0x04, Serial_Command); + for (bit = 0x8000; bit; bit >>= 1) { + ni_writeb(0x04 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); + ni_writeb(0x05 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); + } + bitstring = 0; + for (bit = 0x80; bit; bit >>= 1) { + ni_writeb(0x04, Serial_Command); + ni_writeb(0x05, Serial_Command); + bitstring |= ((ni_readb(XXX_Status) & PROMOUT) ? bit : 0); + } + ni_writeb(0x00, Serial_Command); + + return bitstring; +} + +static int ni_eeprom_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + data[0] = ni_read_eeprom(dev, CR_CHAN(insn->chanspec)); + + return 1; +} + +static int ni_m_series_eeprom_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + + data[0] = devpriv->eeprom_buffer[CR_CHAN(insn->chanspec)]; + + return 1; +} + static int ni_E_init(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -4500,60 +4538,6 @@ static int ni_E_init(struct comedi_device *dev) return 0; } -/* - presents the EEPROM as a subdevice -*/ - -static int ni_eeprom_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - data[0] = ni_read_eeprom(dev, CR_CHAN(insn->chanspec)); - - return 1; -} - -/* - reads bytes out of eeprom -*/ - -static int ni_read_eeprom(struct comedi_device *dev, int addr) -{ - struct ni_private *devpriv __maybe_unused = dev->private; - int bit; - int bitstring; - - bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); - ni_writeb(0x04, Serial_Command); - for (bit = 0x8000; bit; bit >>= 1) { - ni_writeb(0x04 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); - ni_writeb(0x05 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); - } - bitstring = 0; - for (bit = 0x80; bit; bit >>= 1) { - ni_writeb(0x04, Serial_Command); - ni_writeb(0x05, Serial_Command); - bitstring |= ((ni_readb(XXX_Status) & PROMOUT) ? bit : 0); - } - ni_writeb(0x00, Serial_Command); - - return bitstring; -} - -static int ni_m_series_eeprom_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - - data[0] = devpriv->eeprom_buffer[CR_CHAN(insn->chanspec)]; - - return 1; -} - static int ni_get_pwm_config(struct comedi_device *dev, unsigned int *data) { struct ni_private *devpriv = dev->private; -- cgit From 1e49c5da48cdfcc7b46d219f0fd3e83843539b30 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:26 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 3 Move the pwm config functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 295 ++++++++++++------------- 1 file changed, 145 insertions(+), 150 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index aa1f1938b8fb..b63c793afebe 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -278,13 +278,6 @@ static int cs5529_ai_insn_read(struct comedi_device *dev, static void cs5529_config_write(struct comedi_device *dev, unsigned int value, unsigned int reg_select_bits); -static int ni_m_series_pwm_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_6143_pwm_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); - static int ni_set_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns); static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status); @@ -4161,6 +4154,151 @@ static int ni_8255_callback(int dir, int port, int data, unsigned long arg) } } +static int ni_get_pwm_config(struct comedi_device *dev, unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + + data[1] = devpriv->pwm_up_count * devpriv->clock_ns; + data[2] = devpriv->pwm_down_count * devpriv->clock_ns; + return 3; +} + +static int ni_m_series_pwm_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + unsigned up_count, down_count; + + switch (data[0]) { + case INSN_CONFIG_PWM_OUTPUT: + switch (data[1]) { + case TRIG_ROUND_NEAREST: + up_count = + (data[2] + + devpriv->clock_ns / 2) / devpriv->clock_ns; + break; + case TRIG_ROUND_DOWN: + up_count = data[2] / devpriv->clock_ns; + break; + case TRIG_ROUND_UP: + up_count = + (data[2] + devpriv->clock_ns - + 1) / devpriv->clock_ns; + break; + default: + return -EINVAL; + break; + } + switch (data[3]) { + case TRIG_ROUND_NEAREST: + down_count = + (data[4] + + devpriv->clock_ns / 2) / devpriv->clock_ns; + break; + case TRIG_ROUND_DOWN: + down_count = data[4] / devpriv->clock_ns; + break; + case TRIG_ROUND_UP: + down_count = + (data[4] + devpriv->clock_ns - + 1) / devpriv->clock_ns; + break; + default: + return -EINVAL; + break; + } + if (up_count * devpriv->clock_ns != data[2] || + down_count * devpriv->clock_ns != data[4]) { + data[2] = up_count * devpriv->clock_ns; + data[4] = down_count * devpriv->clock_ns; + return -EAGAIN; + } + ni_writel(MSeries_Cal_PWM_High_Time_Bits(up_count) | + MSeries_Cal_PWM_Low_Time_Bits(down_count), + M_Offset_Cal_PWM); + devpriv->pwm_up_count = up_count; + devpriv->pwm_down_count = down_count; + return 5; + break; + case INSN_CONFIG_GET_PWM_OUTPUT: + return ni_get_pwm_config(dev, data); + break; + default: + return -EINVAL; + break; + } + return 0; +} + +static int ni_6143_pwm_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + unsigned up_count, down_count; + + switch (data[0]) { + case INSN_CONFIG_PWM_OUTPUT: + switch (data[1]) { + case TRIG_ROUND_NEAREST: + up_count = + (data[2] + + devpriv->clock_ns / 2) / devpriv->clock_ns; + break; + case TRIG_ROUND_DOWN: + up_count = data[2] / devpriv->clock_ns; + break; + case TRIG_ROUND_UP: + up_count = + (data[2] + devpriv->clock_ns - + 1) / devpriv->clock_ns; + break; + default: + return -EINVAL; + break; + } + switch (data[3]) { + case TRIG_ROUND_NEAREST: + down_count = + (data[4] + + devpriv->clock_ns / 2) / devpriv->clock_ns; + break; + case TRIG_ROUND_DOWN: + down_count = data[4] / devpriv->clock_ns; + break; + case TRIG_ROUND_UP: + down_count = + (data[4] + devpriv->clock_ns - + 1) / devpriv->clock_ns; + break; + default: + return -EINVAL; + break; + } + if (up_count * devpriv->clock_ns != data[2] || + down_count * devpriv->clock_ns != data[4]) { + data[2] = up_count * devpriv->clock_ns; + data[4] = down_count * devpriv->clock_ns; + return -EAGAIN; + } + ni_writel(up_count, Calibration_HighTime_6143); + devpriv->pwm_up_count = up_count; + ni_writel(down_count, Calibration_LowTime_6143); + devpriv->pwm_down_count = down_count; + return 5; + break; + case INSN_CONFIG_GET_PWM_OUTPUT: + return ni_get_pwm_config(dev, data); + default: + return -EINVAL; + break; + } + return 0; +} + static int ni_read_eeprom(struct comedi_device *dev, int addr) { struct ni_private *devpriv __maybe_unused = dev->private; @@ -4538,149 +4676,6 @@ static int ni_E_init(struct comedi_device *dev) return 0; } -static int ni_get_pwm_config(struct comedi_device *dev, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - - data[1] = devpriv->pwm_up_count * devpriv->clock_ns; - data[2] = devpriv->pwm_down_count * devpriv->clock_ns; - return 3; -} - -static int ni_m_series_pwm_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - unsigned up_count, down_count; - - switch (data[0]) { - case INSN_CONFIG_PWM_OUTPUT: - switch (data[1]) { - case TRIG_ROUND_NEAREST: - up_count = - (data[2] + - devpriv->clock_ns / 2) / devpriv->clock_ns; - break; - case TRIG_ROUND_DOWN: - up_count = data[2] / devpriv->clock_ns; - break; - case TRIG_ROUND_UP: - up_count = - (data[2] + devpriv->clock_ns - - 1) / devpriv->clock_ns; - break; - default: - return -EINVAL; - break; - } - switch (data[3]) { - case TRIG_ROUND_NEAREST: - down_count = - (data[4] + - devpriv->clock_ns / 2) / devpriv->clock_ns; - break; - case TRIG_ROUND_DOWN: - down_count = data[4] / devpriv->clock_ns; - break; - case TRIG_ROUND_UP: - down_count = - (data[4] + devpriv->clock_ns - - 1) / devpriv->clock_ns; - break; - default: - return -EINVAL; - break; - } - if (up_count * devpriv->clock_ns != data[2] || - down_count * devpriv->clock_ns != data[4]) { - data[2] = up_count * devpriv->clock_ns; - data[4] = down_count * devpriv->clock_ns; - return -EAGAIN; - } - ni_writel(MSeries_Cal_PWM_High_Time_Bits(up_count) | - MSeries_Cal_PWM_Low_Time_Bits(down_count), - M_Offset_Cal_PWM); - devpriv->pwm_up_count = up_count; - devpriv->pwm_down_count = down_count; - return 5; - break; - case INSN_CONFIG_GET_PWM_OUTPUT: - return ni_get_pwm_config(dev, data); - break; - default: - return -EINVAL; - break; - } - return 0; -} - -static int ni_6143_pwm_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - unsigned up_count, down_count; - - switch (data[0]) { - case INSN_CONFIG_PWM_OUTPUT: - switch (data[1]) { - case TRIG_ROUND_NEAREST: - up_count = - (data[2] + - devpriv->clock_ns / 2) / devpriv->clock_ns; - break; - case TRIG_ROUND_DOWN: - up_count = data[2] / devpriv->clock_ns; - break; - case TRIG_ROUND_UP: - up_count = - (data[2] + devpriv->clock_ns - - 1) / devpriv->clock_ns; - break; - default: - return -EINVAL; - break; - } - switch (data[3]) { - case TRIG_ROUND_NEAREST: - down_count = - (data[4] + - devpriv->clock_ns / 2) / devpriv->clock_ns; - break; - case TRIG_ROUND_DOWN: - down_count = data[4] / devpriv->clock_ns; - break; - case TRIG_ROUND_UP: - down_count = - (data[4] + devpriv->clock_ns - - 1) / devpriv->clock_ns; - break; - default: - return -EINVAL; - break; - } - if (up_count * devpriv->clock_ns != data[2] || - down_count * devpriv->clock_ns != data[4]) { - data[2] = up_count * devpriv->clock_ns; - data[4] = down_count * devpriv->clock_ns; - return -EAGAIN; - } - ni_writel(up_count, Calibration_HighTime_6143); - devpriv->pwm_up_count = up_count; - ni_writel(down_count, Calibration_LowTime_6143); - devpriv->pwm_down_count = down_count; - return 5; - break; - case INSN_CONFIG_GET_PWM_OUTPUT: - return ni_get_pwm_config(dev, data); - default: - return -EINVAL; - break; - } - return 0; -} - static void ni_write_caldac(struct comedi_device *dev, int addr, int val); /* calibration subdevice -- cgit From 9e7cb171de7db458a20aefeff5f485212c0d040c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:27 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 4 Move the caldac "packbits" callbacks to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 101 ++++++++++++------------- 1 file changed, 47 insertions(+), 54 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index b63c793afebe..85eaeb9df42f 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -4700,12 +4700,53 @@ static int ni_calib_insn_read(struct comedi_device *dev, return 1; } -static int pack_mb88341(int addr, int val, int *bitstring); -static int pack_dac8800(int addr, int val, int *bitstring); -static int pack_dac8043(int addr, int val, int *bitstring); -static int pack_ad8522(int addr, int val, int *bitstring); -static int pack_ad8804(int addr, int val, int *bitstring); -static int pack_ad8842(int addr, int val, int *bitstring); +static int pack_mb88341(int addr, int val, int *bitstring) +{ + /* + Fujitsu MB 88341 + Note that address bits are reversed. Thanks to + Ingo Keen for noticing this. + + Note also that the 88341 expects address values from + 1-12, whereas we use channel numbers 0-11. The NI + docs use 1-12, also, so be careful here. + */ + addr++; + *bitstring = ((addr & 0x1) << 11) | + ((addr & 0x2) << 9) | + ((addr & 0x4) << 7) | ((addr & 0x8) << 5) | (val & 0xff); + return 12; +} + +static int pack_dac8800(int addr, int val, int *bitstring) +{ + *bitstring = ((addr & 0x7) << 8) | (val & 0xff); + return 11; +} + +static int pack_dac8043(int addr, int val, int *bitstring) +{ + *bitstring = val & 0xfff; + return 12; +} + +static int pack_ad8522(int addr, int val, int *bitstring) +{ + *bitstring = (val & 0xfff) | (addr ? 0xc000 : 0xa000); + return 16; +} + +static int pack_ad8804(int addr, int val, int *bitstring) +{ + *bitstring = ((addr & 0xf) << 8) | (val & 0xff); + return 12; +} + +static int pack_ad8842(int addr, int val, int *bitstring) +{ + *bitstring = ((addr + 1) << 8) | (val & 0xff); + return 12; +} struct caldac_struct { int n_chans; @@ -4814,54 +4855,6 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) ni_writeb(0, Serial_Command); } -static int pack_mb88341(int addr, int val, int *bitstring) -{ - /* - Fujitsu MB 88341 - Note that address bits are reversed. Thanks to - Ingo Keen for noticing this. - - Note also that the 88341 expects address values from - 1-12, whereas we use channel numbers 0-11. The NI - docs use 1-12, also, so be careful here. - */ - addr++; - *bitstring = ((addr & 0x1) << 11) | - ((addr & 0x2) << 9) | - ((addr & 0x4) << 7) | ((addr & 0x8) << 5) | (val & 0xff); - return 12; -} - -static int pack_dac8800(int addr, int val, int *bitstring) -{ - *bitstring = ((addr & 0x7) << 8) | (val & 0xff); - return 11; -} - -static int pack_dac8043(int addr, int val, int *bitstring) -{ - *bitstring = val & 0xfff; - return 12; -} - -static int pack_ad8522(int addr, int val, int *bitstring) -{ - *bitstring = (val & 0xfff) | (addr ? 0xc000 : 0xa000); - return 16; -} - -static int pack_ad8804(int addr, int val, int *bitstring) -{ - *bitstring = ((addr & 0xf) << 8) | (val & 0xff); - return 12; -} - -static int pack_ad8842(int addr, int val, int *bitstring) -{ - *bitstring = ((addr + 1) << 8) | (val & 0xff); - return 12; -} - #if 0 /* * Read the GPCTs current value. -- cgit From 62c2bce0229c15c14dab42c84897fb8299f7e368 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:28 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 5 Move the calibration subdevice functions and helpers to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 365 ++++++++++++------------- 1 file changed, 177 insertions(+), 188 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 85eaeb9df42f..0bce283eb72b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -221,13 +221,6 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, unsigned char data_out, unsigned char *data_in); -static int ni_calib_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_calib_insn_write(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); - static int ni_pfi_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); @@ -245,8 +238,6 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s); - #ifndef PCIDMA static void ni_handle_fifo_half_full(struct comedi_device *dev); static int ni_ao_fifo_half_empty(struct comedi_device *dev, @@ -4299,6 +4290,183 @@ static int ni_6143_pwm_config(struct comedi_device *dev, return 0; } +static int pack_mb88341(int addr, int val, int *bitstring) +{ + /* + Fujitsu MB 88341 + Note that address bits are reversed. Thanks to + Ingo Keen for noticing this. + + Note also that the 88341 expects address values from + 1-12, whereas we use channel numbers 0-11. The NI + docs use 1-12, also, so be careful here. + */ + addr++; + *bitstring = ((addr & 0x1) << 11) | + ((addr & 0x2) << 9) | + ((addr & 0x4) << 7) | ((addr & 0x8) << 5) | (val & 0xff); + return 12; +} + +static int pack_dac8800(int addr, int val, int *bitstring) +{ + *bitstring = ((addr & 0x7) << 8) | (val & 0xff); + return 11; +} + +static int pack_dac8043(int addr, int val, int *bitstring) +{ + *bitstring = val & 0xfff; + return 12; +} + +static int pack_ad8522(int addr, int val, int *bitstring) +{ + *bitstring = (val & 0xfff) | (addr ? 0xc000 : 0xa000); + return 16; +} + +static int pack_ad8804(int addr, int val, int *bitstring) +{ + *bitstring = ((addr & 0xf) << 8) | (val & 0xff); + return 12; +} + +static int pack_ad8842(int addr, int val, int *bitstring) +{ + *bitstring = ((addr + 1) << 8) | (val & 0xff); + return 12; +} + +struct caldac_struct { + int n_chans; + int n_bits; + int (*packbits)(int, int, int *); +}; + +static struct caldac_struct caldacs[] = { + [mb88341] = {12, 8, pack_mb88341}, + [dac8800] = {8, 8, pack_dac8800}, + [dac8043] = {1, 12, pack_dac8043}, + [ad8522] = {2, 12, pack_ad8522}, + [ad8804] = {12, 8, pack_ad8804}, + [ad8842] = {8, 8, pack_ad8842}, + [ad8804_debug] = {16, 8, pack_ad8804}, +}; + +static void ni_write_caldac(struct comedi_device *dev, int addr, int val) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + unsigned int loadbit = 0, bits = 0, bit, bitstring = 0; + int i; + int type; + + /* printk("ni_write_caldac: chan=%d val=%d\n",addr,val); */ + if (devpriv->caldacs[addr] == val) + return; + devpriv->caldacs[addr] = val; + + for (i = 0; i < 3; i++) { + type = board->caldac[i]; + if (type == caldac_none) + break; + if (addr < caldacs[type].n_chans) { + bits = caldacs[type].packbits(addr, val, &bitstring); + loadbit = SerDacLd(i); + /* printk("caldac: using i=%d addr=%d %x\n",i,addr,bitstring); */ + break; + } + addr -= caldacs[type].n_chans; + } + + for (bit = 1 << (bits - 1); bit; bit >>= 1) { + ni_writeb(((bit & bitstring) ? 0x02 : 0), Serial_Command); + udelay(1); + ni_writeb(1 | ((bit & bitstring) ? 0x02 : 0), Serial_Command); + udelay(1); + } + ni_writeb(loadbit, Serial_Command); + udelay(1); + ni_writeb(0, Serial_Command); +} + +static int ni_calib_insn_write(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + ni_write_caldac(dev, CR_CHAN(insn->chanspec), data[0]); + + return 1; +} + +static int ni_calib_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + + data[0] = devpriv->caldacs[CR_CHAN(insn->chanspec)]; + + return 1; +} + +static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + int i, j; + int n_dacs; + int n_chans = 0; + int n_bits; + int diffbits = 0; + int type; + int chan; + + type = board->caldac[0]; + if (type == caldac_none) + return; + n_bits = caldacs[type].n_bits; + for (i = 0; i < 3; i++) { + type = board->caldac[i]; + if (type == caldac_none) + break; + if (caldacs[type].n_bits != n_bits) + diffbits = 1; + n_chans += caldacs[type].n_chans; + } + n_dacs = i; + s->n_chan = n_chans; + + if (diffbits) { + unsigned int *maxdata_list; + + if (n_chans > MAX_N_CALDACS) + printk("BUG! MAX_N_CALDACS too small\n"); + s->maxdata_list = maxdata_list = devpriv->caldac_maxdata_list; + chan = 0; + for (i = 0; i < n_dacs; i++) { + type = board->caldac[i]; + for (j = 0; j < caldacs[type].n_chans; j++) { + maxdata_list[chan] = + (1 << caldacs[type].n_bits) - 1; + chan++; + } + } + + for (chan = 0; chan < s->n_chan; chan++) + ni_write_caldac(dev, i, s->maxdata_list[i] / 2); + } else { + type = board->caldac[0]; + s->maxdata = (1 << caldacs[type].n_bits) - 1; + + for (chan = 0; chan < s->n_chan; chan++) + ni_write_caldac(dev, i, s->maxdata / 2); + } +} + static int ni_read_eeprom(struct comedi_device *dev, int addr) { struct ni_private *devpriv __maybe_unused = dev->private; @@ -4676,185 +4844,6 @@ static int ni_E_init(struct comedi_device *dev) return 0; } -static void ni_write_caldac(struct comedi_device *dev, int addr, int val); -/* - calibration subdevice -*/ -static int ni_calib_insn_write(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - ni_write_caldac(dev, CR_CHAN(insn->chanspec), data[0]); - - return 1; -} - -static int ni_calib_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - - data[0] = devpriv->caldacs[CR_CHAN(insn->chanspec)]; - - return 1; -} - -static int pack_mb88341(int addr, int val, int *bitstring) -{ - /* - Fujitsu MB 88341 - Note that address bits are reversed. Thanks to - Ingo Keen for noticing this. - - Note also that the 88341 expects address values from - 1-12, whereas we use channel numbers 0-11. The NI - docs use 1-12, also, so be careful here. - */ - addr++; - *bitstring = ((addr & 0x1) << 11) | - ((addr & 0x2) << 9) | - ((addr & 0x4) << 7) | ((addr & 0x8) << 5) | (val & 0xff); - return 12; -} - -static int pack_dac8800(int addr, int val, int *bitstring) -{ - *bitstring = ((addr & 0x7) << 8) | (val & 0xff); - return 11; -} - -static int pack_dac8043(int addr, int val, int *bitstring) -{ - *bitstring = val & 0xfff; - return 12; -} - -static int pack_ad8522(int addr, int val, int *bitstring) -{ - *bitstring = (val & 0xfff) | (addr ? 0xc000 : 0xa000); - return 16; -} - -static int pack_ad8804(int addr, int val, int *bitstring) -{ - *bitstring = ((addr & 0xf) << 8) | (val & 0xff); - return 12; -} - -static int pack_ad8842(int addr, int val, int *bitstring) -{ - *bitstring = ((addr + 1) << 8) | (val & 0xff); - return 12; -} - -struct caldac_struct { - int n_chans; - int n_bits; - int (*packbits)(int, int, int *); -}; - -static struct caldac_struct caldacs[] = { - [mb88341] = {12, 8, pack_mb88341}, - [dac8800] = {8, 8, pack_dac8800}, - [dac8043] = {1, 12, pack_dac8043}, - [ad8522] = {2, 12, pack_ad8522}, - [ad8804] = {12, 8, pack_ad8804}, - [ad8842] = {8, 8, pack_ad8842}, - [ad8804_debug] = {16, 8, pack_ad8804}, -}; - -static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - int i, j; - int n_dacs; - int n_chans = 0; - int n_bits; - int diffbits = 0; - int type; - int chan; - - type = board->caldac[0]; - if (type == caldac_none) - return; - n_bits = caldacs[type].n_bits; - for (i = 0; i < 3; i++) { - type = board->caldac[i]; - if (type == caldac_none) - break; - if (caldacs[type].n_bits != n_bits) - diffbits = 1; - n_chans += caldacs[type].n_chans; - } - n_dacs = i; - s->n_chan = n_chans; - - if (diffbits) { - unsigned int *maxdata_list; - - if (n_chans > MAX_N_CALDACS) - printk("BUG! MAX_N_CALDACS too small\n"); - s->maxdata_list = maxdata_list = devpriv->caldac_maxdata_list; - chan = 0; - for (i = 0; i < n_dacs; i++) { - type = board->caldac[i]; - for (j = 0; j < caldacs[type].n_chans; j++) { - maxdata_list[chan] = - (1 << caldacs[type].n_bits) - 1; - chan++; - } - } - - for (chan = 0; chan < s->n_chan; chan++) - ni_write_caldac(dev, i, s->maxdata_list[i] / 2); - } else { - type = board->caldac[0]; - s->maxdata = (1 << caldacs[type].n_bits) - 1; - - for (chan = 0; chan < s->n_chan; chan++) - ni_write_caldac(dev, i, s->maxdata / 2); - } -} - -static void ni_write_caldac(struct comedi_device *dev, int addr, int val) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - unsigned int loadbit = 0, bits = 0, bit, bitstring = 0; - int i; - int type; - - /* printk("ni_write_caldac: chan=%d val=%d\n",addr,val); */ - if (devpriv->caldacs[addr] == val) - return; - devpriv->caldacs[addr] = val; - - for (i = 0; i < 3; i++) { - type = board->caldac[i]; - if (type == caldac_none) - break; - if (addr < caldacs[type].n_chans) { - bits = caldacs[type].packbits(addr, val, &bitstring); - loadbit = SerDacLd(i); - /* printk("caldac: using i=%d addr=%d %x\n",i,addr,bitstring); */ - break; - } - addr -= caldacs[type].n_chans; - } - - for (bit = 1 << (bits - 1); bit; bit >>= 1) { - ni_writeb(((bit & bitstring) ? 0x02 : 0), Serial_Command); - udelay(1); - ni_writeb(1 | ((bit & bitstring) ? 0x02 : 0), Serial_Command); - udelay(1); - } - ni_writeb(loadbit, Serial_Command); - udelay(1); - ni_writeb(0, Serial_Command); -} - #if 0 /* * Read the GPCTs current value. -- cgit From c8508a1d7bfcef2fa557770ef94f481b5d70c9a6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:29 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 6 Move the ni_gpct_cmd() and ni_gpct_cancel() functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 68 ++++++++++++-------------- 1 file changed, 31 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 0bce283eb72b..2b997ef0f97c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -253,10 +253,6 @@ static void shutdown_ai_command(struct comedi_device *dev); static int ni_ao_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trignum); -#ifdef PCIDMA -static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s); -static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s); -#endif static void handle_gpct_interrupt(struct comedi_device *dev, unsigned short counter_index); @@ -4514,6 +4510,37 @@ static int ni_m_series_eeprom_insn_read(struct comedi_device *dev, return 1; } +#ifdef PCIDMA +static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) +{ + struct ni_gpct *counter = s->private; + int retval; + + retval = ni_request_gpct_mite_channel(dev, counter->counter_index, + COMEDI_INPUT); + if (retval) { + comedi_error(dev, + "no dma channel available for use by counter"); + return retval; + } + ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); + ni_e_series_enable_second_irq(dev, counter->counter_index, 1); + + return ni_tio_cmd(dev, s); +} + +static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s) +{ + struct ni_gpct *counter = s->private; + int retval; + + retval = ni_tio_cancel(counter); + ni_e_series_enable_second_irq(dev, counter->counter_index, 0); + ni_release_gpct_mite_channel(dev, counter->counter_index); + return retval; +} +#endif + static int ni_E_init(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -4933,39 +4960,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) #endif -#ifdef PCIDMA -static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) -{ - struct ni_gpct *counter = s->private; - int retval; - - retval = ni_request_gpct_mite_channel(dev, counter->counter_index, - COMEDI_INPUT); - if (retval) { - comedi_error(dev, - "no dma channel available for use by counter"); - return retval; - } - ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); - ni_e_series_enable_second_irq(dev, counter->counter_index, 1); - - return ni_tio_cmd(dev, s); -} -#endif - -#ifdef PCIDMA -static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s) -{ - struct ni_gpct *counter = s->private; - int retval; - - retval = ni_tio_cancel(counter); - ni_e_series_enable_second_irq(dev, counter->counter_index, 0); - ni_release_gpct_mite_channel(dev, counter->counter_index); - return retval; -} -#endif - /* * * Programmable Function Inputs -- cgit From 4187a79a8416cbbb37354d6e64d013db0f131646 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:30 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 7 Move the programmable function inputs subdevice functions and helpers to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 372 ++++++++++++------------- 1 file changed, 179 insertions(+), 193 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 2b997ef0f97c..55eadf43728b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -221,15 +221,6 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, unsigned char data_out, unsigned char *data_in); -static int ni_pfi_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_pfi_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, - unsigned chan); - static void ni_rtsi_init(struct comedi_device *dev); static int ni_rtsi_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, @@ -4510,6 +4501,185 @@ static int ni_m_series_eeprom_insn_read(struct comedi_device *dev, return 1; } +static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, + unsigned chan) +{ + /* pre-m-series boards have fixed signals on pfi pins */ + switch (chan) { + case 0: + return NI_PFI_OUTPUT_AI_START1; + break; + case 1: + return NI_PFI_OUTPUT_AI_START2; + break; + case 2: + return NI_PFI_OUTPUT_AI_CONVERT; + break; + case 3: + return NI_PFI_OUTPUT_G_SRC1; + break; + case 4: + return NI_PFI_OUTPUT_G_GATE1; + break; + case 5: + return NI_PFI_OUTPUT_AO_UPDATE_N; + break; + case 6: + return NI_PFI_OUTPUT_AO_START1; + break; + case 7: + return NI_PFI_OUTPUT_AI_START_PULSE; + break; + case 8: + return NI_PFI_OUTPUT_G_SRC0; + break; + case 9: + return NI_PFI_OUTPUT_G_GATE0; + break; + default: + printk("%s: bug, unhandled case in switch.\n", __func__); + break; + } + return 0; +} + +static int ni_old_set_pfi_routing(struct comedi_device *dev, + unsigned chan, unsigned source) +{ + /* pre-m-series boards have fixed signals on pfi pins */ + if (source != ni_old_get_pfi_routing(dev, chan)) + return -EINVAL; + return 2; +} + +static unsigned ni_m_series_get_pfi_routing(struct comedi_device *dev, + unsigned chan) +{ + struct ni_private *devpriv = dev->private; + const unsigned array_offset = chan / 3; + + return MSeries_PFI_Output_Select_Source(chan, + devpriv->pfi_output_select_reg[array_offset]); +} + +static int ni_m_series_set_pfi_routing(struct comedi_device *dev, + unsigned chan, unsigned source) +{ + struct ni_private *devpriv = dev->private; + unsigned pfi_reg_index; + unsigned array_offset; + + if ((source & 0x1f) != source) + return -EINVAL; + pfi_reg_index = 1 + chan / 3; + array_offset = pfi_reg_index - 1; + devpriv->pfi_output_select_reg[array_offset] &= + ~MSeries_PFI_Output_Select_Mask(chan); + devpriv->pfi_output_select_reg[array_offset] |= + MSeries_PFI_Output_Select_Bits(chan, source); + ni_writew(devpriv->pfi_output_select_reg[array_offset], + M_Offset_PFI_Output_Select(pfi_reg_index)); + return 2; +} + +static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan) +{ + const struct ni_board_struct *board = comedi_board(dev); + + if (board->reg_type & ni_reg_m_series_mask) + return ni_m_series_get_pfi_routing(dev, chan); + else + return ni_old_get_pfi_routing(dev, chan); +} + +static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan, + unsigned source) +{ + const struct ni_board_struct *board = comedi_board(dev); + + if (board->reg_type & ni_reg_m_series_mask) + return ni_m_series_set_pfi_routing(dev, chan, source); + else + return ni_old_set_pfi_routing(dev, chan, source); +} + +static int ni_config_filter(struct comedi_device *dev, + unsigned pfi_channel, + enum ni_pfi_filter_select filter) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv __maybe_unused = dev->private; + unsigned bits; + + if ((board->reg_type & ni_reg_m_series_mask) == 0) + return -ENOTSUPP; + bits = ni_readl(M_Offset_PFI_Filter); + bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); + bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); + ni_writel(bits, M_Offset_PFI_Filter); + return 0; +} + +static int ni_pfi_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + unsigned int chan; + + if (insn->n < 1) + return -EINVAL; + + chan = CR_CHAN(insn->chanspec); + + switch (data[0]) { + case COMEDI_OUTPUT: + ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 1); + break; + case COMEDI_INPUT: + ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 0); + break; + case INSN_CONFIG_DIO_QUERY: + data[1] = + (devpriv->io_bidirection_pin_reg & (1 << chan)) ? + COMEDI_OUTPUT : COMEDI_INPUT; + return 0; + break; + case INSN_CONFIG_SET_ROUTING: + return ni_set_pfi_routing(dev, chan, data[1]); + break; + case INSN_CONFIG_GET_ROUTING: + data[1] = ni_get_pfi_routing(dev, chan); + break; + case INSN_CONFIG_FILTER: + return ni_config_filter(dev, chan, data[1]); + break; + default: + return -EINVAL; + } + return 0; +} + +static int ni_pfi_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv __maybe_unused = dev->private; + + if (!(board->reg_type & ni_reg_m_series_mask)) + return -ENOTSUPP; + + if (comedi_dio_update_state(s, data)) + ni_writew(s->state, M_Offset_PFI_DO); + + data[1] = ni_readw(M_Offset_PFI_DI); + + return insn->n; +} + #ifdef PCIDMA static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -4960,190 +5130,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) #endif -/* - * - * Programmable Function Inputs - * - */ - -static int ni_m_series_set_pfi_routing(struct comedi_device *dev, unsigned chan, - unsigned source) -{ - struct ni_private *devpriv = dev->private; - unsigned pfi_reg_index; - unsigned array_offset; - - if ((source & 0x1f) != source) - return -EINVAL; - pfi_reg_index = 1 + chan / 3; - array_offset = pfi_reg_index - 1; - devpriv->pfi_output_select_reg[array_offset] &= - ~MSeries_PFI_Output_Select_Mask(chan); - devpriv->pfi_output_select_reg[array_offset] |= - MSeries_PFI_Output_Select_Bits(chan, source); - ni_writew(devpriv->pfi_output_select_reg[array_offset], - M_Offset_PFI_Output_Select(pfi_reg_index)); - return 2; -} - -static int ni_old_set_pfi_routing(struct comedi_device *dev, unsigned chan, - unsigned source) -{ - /* pre-m-series boards have fixed signals on pfi pins */ - if (source != ni_old_get_pfi_routing(dev, chan)) - return -EINVAL; - return 2; -} - -static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan, - unsigned source) -{ - const struct ni_board_struct *board = comedi_board(dev); - - if (board->reg_type & ni_reg_m_series_mask) - return ni_m_series_set_pfi_routing(dev, chan, source); - else - return ni_old_set_pfi_routing(dev, chan, source); -} - -static unsigned ni_m_series_get_pfi_routing(struct comedi_device *dev, - unsigned chan) -{ - struct ni_private *devpriv = dev->private; - const unsigned array_offset = chan / 3; - - return MSeries_PFI_Output_Select_Source(chan, - devpriv-> - pfi_output_select_reg - [array_offset]); -} - -static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, unsigned chan) -{ - /* pre-m-series boards have fixed signals on pfi pins */ - switch (chan) { - case 0: - return NI_PFI_OUTPUT_AI_START1; - break; - case 1: - return NI_PFI_OUTPUT_AI_START2; - break; - case 2: - return NI_PFI_OUTPUT_AI_CONVERT; - break; - case 3: - return NI_PFI_OUTPUT_G_SRC1; - break; - case 4: - return NI_PFI_OUTPUT_G_GATE1; - break; - case 5: - return NI_PFI_OUTPUT_AO_UPDATE_N; - break; - case 6: - return NI_PFI_OUTPUT_AO_START1; - break; - case 7: - return NI_PFI_OUTPUT_AI_START_PULSE; - break; - case 8: - return NI_PFI_OUTPUT_G_SRC0; - break; - case 9: - return NI_PFI_OUTPUT_G_GATE0; - break; - default: - printk("%s: bug, unhandled case in switch.\n", __func__); - break; - } - return 0; -} - -static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan) -{ - const struct ni_board_struct *board = comedi_board(dev); - - if (board->reg_type & ni_reg_m_series_mask) - return ni_m_series_get_pfi_routing(dev, chan); - else - return ni_old_get_pfi_routing(dev, chan); -} - -static int ni_config_filter(struct comedi_device *dev, unsigned pfi_channel, - enum ni_pfi_filter_select filter) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; - unsigned bits; - - if ((board->reg_type & ni_reg_m_series_mask) == 0) - return -ENOTSUPP; - bits = ni_readl(M_Offset_PFI_Filter); - bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); - bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); - ni_writel(bits, M_Offset_PFI_Filter); - return 0; -} - -static int ni_pfi_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; - - if (!(board->reg_type & ni_reg_m_series_mask)) - return -ENOTSUPP; - - if (comedi_dio_update_state(s, data)) - ni_writew(s->state, M_Offset_PFI_DO); - - data[1] = ni_readw(M_Offset_PFI_DI); - - return insn->n; -} - -static int ni_pfi_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - unsigned int chan; - - if (insn->n < 1) - return -EINVAL; - - chan = CR_CHAN(insn->chanspec); - - switch (data[0]) { - case COMEDI_OUTPUT: - ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 1); - break; - case COMEDI_INPUT: - ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 0); - break; - case INSN_CONFIG_DIO_QUERY: - data[1] = - (devpriv->io_bidirection_pin_reg & (1 << chan)) ? - COMEDI_OUTPUT : COMEDI_INPUT; - return 0; - break; - case INSN_CONFIG_SET_ROUTING: - return ni_set_pfi_routing(dev, chan, data[1]); - break; - case INSN_CONFIG_GET_ROUTING: - data[1] = ni_get_pfi_routing(dev, chan); - break; - case INSN_CONFIG_FILTER: - return ni_config_filter(dev, chan, data[1]); - break; - default: - return -EINVAL; - } - return 0; -} - /* * * NI RTSI Bus Functions -- cgit From 24e7c352ba019653c9fbe006dc3fe4c0162fa3a7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:31 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 8 Move the cs5529 calibration subdevice functions and helpers to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 280 ++++++++++++------------- 1 file changed, 136 insertions(+), 144 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 55eadf43728b..ffb5a846aeb5 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -247,15 +247,6 @@ static int ni_ao_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, static void handle_gpct_interrupt(struct comedi_device *dev, unsigned short counter_index); -static int init_cs5529(struct comedi_device *dev); -static int cs5529_do_conversion(struct comedi_device *dev, - unsigned short *data); -static int cs5529_ai_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static void cs5529_config_write(struct comedi_device *dev, unsigned int value, - unsigned int reg_select_bits); - static int ni_set_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns); static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status); @@ -4680,6 +4671,142 @@ static int ni_pfi_insn_bits(struct comedi_device *dev, return insn->n; } +static int cs5529_wait_for_idle(struct comedi_device *dev) +{ + unsigned short status; + const int timeout = HZ; + int i; + + for (i = 0; i < timeout; i++) { + status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); + if ((status & CSS_ADC_BUSY) == 0) + break; + set_current_state(TASK_INTERRUPTIBLE); + if (schedule_timeout(1)) + return -EIO; + } +/* printk("looped %i times waiting for idle\n", i); */ + if (i == timeout) { + printk("%s: %s: timeout\n", __FILE__, __func__); + return -ETIME; + } + return 0; +} + +static void cs5529_command(struct comedi_device *dev, unsigned short value) +{ + static const int timeout = 100; + int i; + + ni_ao_win_outw(dev, value, CAL_ADC_Command_67xx); + /* give time for command to start being serially clocked into cs5529. + * this insures that the CSS_ADC_BUSY bit will get properly + * set before we exit this function. + */ + for (i = 0; i < timeout; i++) { + if ((ni_ao_win_inw(dev, CAL_ADC_Status_67xx) & CSS_ADC_BUSY)) + break; + udelay(1); + } +/* printk("looped %i times writing command to cs5529\n", i); */ + if (i == timeout) + comedi_error(dev, "possible problem - never saw adc go busy?"); +} + +static int cs5529_do_conversion(struct comedi_device *dev, + unsigned short *data) +{ + int retval; + unsigned short status; + + cs5529_command(dev, CSCMD_COMMAND | CSCMD_SINGLE_CONVERSION); + retval = cs5529_wait_for_idle(dev); + if (retval) { + comedi_error(dev, + "timeout or signal in cs5529_do_conversion()"); + return -ETIME; + } + status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); + if (status & CSS_OSC_DETECT) { + printk + ("ni_mio_common: cs5529 conversion error, status CSS_OSC_DETECT\n"); + return -EIO; + } + if (status & CSS_OVERRANGE) { + printk + ("ni_mio_common: cs5529 conversion error, overrange (ignoring)\n"); + } + if (data) { + *data = ni_ao_win_inw(dev, CAL_ADC_Data_67xx); + /* cs5529 returns 16 bit signed data in bipolar mode */ + *data ^= (1 << 15); + } + return 0; +} + +static int cs5529_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + int n, retval; + unsigned short sample; + unsigned int channel_select; + const unsigned int INTERNAL_REF = 0x1000; + + /* Set calibration adc source. Docs lie, reference select bits 8 to 11 + * do nothing. bit 12 seems to chooses internal reference voltage, bit + * 13 causes the adc input to go overrange (maybe reads external reference?) */ + if (insn->chanspec & CR_ALT_SOURCE) + channel_select = INTERNAL_REF; + else + channel_select = CR_CHAN(insn->chanspec); + ni_ao_win_outw(dev, channel_select, AO_Calibration_Channel_Select_67xx); + + for (n = 0; n < insn->n; n++) { + retval = cs5529_do_conversion(dev, &sample); + if (retval < 0) + return retval; + data[n] = sample; + } + return insn->n; +} + +static void cs5529_config_write(struct comedi_device *dev, unsigned int value, + unsigned int reg_select_bits) +{ + ni_ao_win_outw(dev, ((value >> 16) & 0xff), + CAL_ADC_Config_Data_High_Word_67xx); + ni_ao_win_outw(dev, (value & 0xffff), + CAL_ADC_Config_Data_Low_Word_67xx); + reg_select_bits &= CSCMD_REGISTER_SELECT_MASK; + cs5529_command(dev, CSCMD_COMMAND | reg_select_bits); + if (cs5529_wait_for_idle(dev)) + comedi_error(dev, "time or signal in cs5529_config_write()"); +} + +static int init_cs5529(struct comedi_device *dev) +{ + unsigned int config_bits = + CSCFG_PORT_MODE | CSCFG_WORD_RATE_2180_CYCLES; + +#if 1 + /* do self-calibration */ + cs5529_config_write(dev, config_bits | CSCFG_SELF_CAL_OFFSET_GAIN, + CSCMD_CONFIG_REGISTER); + /* need to force a conversion for calibration to run */ + cs5529_do_conversion(dev, NULL); +#else + /* force gain calibration to 1 */ + cs5529_config_write(dev, 0x400000, CSCMD_GAIN_REGISTER); + cs5529_config_write(dev, config_bits | CSCFG_SELF_CAL_OFFSET, + CSCMD_CONFIG_REGISTER); + if (cs5529_wait_for_idle(dev)) + comedi_error(dev, "timeout or signal in init_cs5529()\n"); +#endif + return 0; +} + #ifdef PCIDMA static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -5542,138 +5669,3 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, } return 1; } - -static int cs5529_wait_for_idle(struct comedi_device *dev) -{ - unsigned short status; - const int timeout = HZ; - int i; - - for (i = 0; i < timeout; i++) { - status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); - if ((status & CSS_ADC_BUSY) == 0) - break; - set_current_state(TASK_INTERRUPTIBLE); - if (schedule_timeout(1)) - return -EIO; - } -/* printk("looped %i times waiting for idle\n", i); */ - if (i == timeout) { - printk("%s: %s: timeout\n", __FILE__, __func__); - return -ETIME; - } - return 0; -} - -static void cs5529_command(struct comedi_device *dev, unsigned short value) -{ - static const int timeout = 100; - int i; - - ni_ao_win_outw(dev, value, CAL_ADC_Command_67xx); - /* give time for command to start being serially clocked into cs5529. - * this insures that the CSS_ADC_BUSY bit will get properly - * set before we exit this function. - */ - for (i = 0; i < timeout; i++) { - if ((ni_ao_win_inw(dev, CAL_ADC_Status_67xx) & CSS_ADC_BUSY)) - break; - udelay(1); - } -/* printk("looped %i times writing command to cs5529\n", i); */ - if (i == timeout) - comedi_error(dev, "possible problem - never saw adc go busy?"); -} - -/* write to cs5529 register */ -static void cs5529_config_write(struct comedi_device *dev, unsigned int value, - unsigned int reg_select_bits) -{ - ni_ao_win_outw(dev, ((value >> 16) & 0xff), - CAL_ADC_Config_Data_High_Word_67xx); - ni_ao_win_outw(dev, (value & 0xffff), - CAL_ADC_Config_Data_Low_Word_67xx); - reg_select_bits &= CSCMD_REGISTER_SELECT_MASK; - cs5529_command(dev, CSCMD_COMMAND | reg_select_bits); - if (cs5529_wait_for_idle(dev)) - comedi_error(dev, "time or signal in cs5529_config_write()"); -} - -static int cs5529_do_conversion(struct comedi_device *dev, unsigned short *data) -{ - int retval; - unsigned short status; - - cs5529_command(dev, CSCMD_COMMAND | CSCMD_SINGLE_CONVERSION); - retval = cs5529_wait_for_idle(dev); - if (retval) { - comedi_error(dev, - "timeout or signal in cs5529_do_conversion()"); - return -ETIME; - } - status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); - if (status & CSS_OSC_DETECT) { - printk - ("ni_mio_common: cs5529 conversion error, status CSS_OSC_DETECT\n"); - return -EIO; - } - if (status & CSS_OVERRANGE) { - printk - ("ni_mio_common: cs5529 conversion error, overrange (ignoring)\n"); - } - if (data) { - *data = ni_ao_win_inw(dev, CAL_ADC_Data_67xx); - /* cs5529 returns 16 bit signed data in bipolar mode */ - *data ^= (1 << 15); - } - return 0; -} - -static int cs5529_ai_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - int n, retval; - unsigned short sample; - unsigned int channel_select; - const unsigned int INTERNAL_REF = 0x1000; - - /* Set calibration adc source. Docs lie, reference select bits 8 to 11 - * do nothing. bit 12 seems to chooses internal reference voltage, bit - * 13 causes the adc input to go overrange (maybe reads external reference?) */ - if (insn->chanspec & CR_ALT_SOURCE) - channel_select = INTERNAL_REF; - else - channel_select = CR_CHAN(insn->chanspec); - ni_ao_win_outw(dev, channel_select, AO_Calibration_Channel_Select_67xx); - - for (n = 0; n < insn->n; n++) { - retval = cs5529_do_conversion(dev, &sample); - if (retval < 0) - return retval; - data[n] = sample; - } - return insn->n; -} - -static int init_cs5529(struct comedi_device *dev) -{ - unsigned int config_bits = - CSCFG_PORT_MODE | CSCFG_WORD_RATE_2180_CYCLES; - -#if 1 - /* do self-calibration */ - cs5529_config_write(dev, config_bits | CSCFG_SELF_CAL_OFFSET_GAIN, - CSCMD_CONFIG_REGISTER); - /* need to force a conversion for calibration to run */ - cs5529_do_conversion(dev, NULL); -#else - /* force gain calibration to 1 */ - cs5529_config_write(dev, 0x400000, CSCMD_GAIN_REGISTER); - cs5529_config_write(dev, config_bits | CSCFG_SELF_CAL_OFFSET, - CSCMD_CONFIG_REGISTER); - if (cs5529_wait_for_idle(dev)) - comedi_error(dev, "timeout or signal in init_cs5529()\n"); -#endif - return 0; -} -- cgit From 12db14163e6beb20398499d523685c05d3fb07f0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:32 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 9 Move ni_rtsi_insn_bits() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index ffb5a846aeb5..a1ed6c19fbad 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -222,9 +222,6 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, unsigned char *data_in); static void ni_rtsi_init(struct comedi_device *dev); -static int ni_rtsi_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); @@ -4807,6 +4804,16 @@ static int init_cs5529(struct comedi_device *dev) return 0; } +static int ni_rtsi_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + data[1] = 0; + + return insn->n; +} + #ifdef PCIDMA static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -5302,15 +5309,6 @@ static void ni_rtsi_init(struct comedi_device *dev) */ } -static int ni_rtsi_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - data[1] = 0; - - return insn->n; -} - /* Find best multiplier/divider to try and get the PLL running at 80 MHz * given an arbitrary frequency input clock */ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, -- cgit From 9a0c81a2be4bdc5e1557000712a469ebacc2eb96 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:33 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 10 These forward declarations are not needed. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index a1ed6c19fbad..d37c063d8f8a 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,24 +194,12 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -static int ni_dio_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_dio_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); -static int ni_cdio_cmdtest(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_cmd *cmd); -static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s); static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static void handle_cdio_interrupt(struct comedi_device *dev); static int ni_cdo_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trignum); -static int ni_serial_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); static int ni_serial_hw_readwrite8(struct comedi_device *dev, struct comedi_subdevice *s, unsigned char data_out, @@ -238,9 +226,6 @@ static void ni_load_channelgain_list(struct comedi_device *dev, unsigned int n_chan, unsigned int *list); static void shutdown_ai_command(struct comedi_device *dev); -static int ni_ao_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned int trignum); - static void handle_gpct_interrupt(struct comedi_device *dev, unsigned short counter_index); -- cgit From 0792928fd61dd5371a0dab64b6cbee40fbbbdc14 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:34 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 11 Move ni_cdio_cmd() to remove the need for the forward declaration of ni_cdo_inttrig(). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 80 +++++++++++++------------- 1 file changed, 39 insertions(+), 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index d37c063d8f8a..e8409b0d58bc 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -197,8 +197,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static void handle_cdio_interrupt(struct comedi_device *dev); -static int ni_cdo_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned int trignum); static int ni_serial_hw_readwrite8(struct comedi_device *dev, struct comedi_subdevice *s, @@ -3441,45 +3439,6 @@ static int ni_cdio_cmdtest(struct comedi_device *dev, return 0; } -static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) -{ - struct ni_private *devpriv __maybe_unused = dev->private; - const struct comedi_cmd *cmd = &s->async->cmd; - unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; - int retval; - - ni_writel(CDO_Reset_Bit, M_Offset_CDIO_Command); - switch (cmd->scan_begin_src) { - case TRIG_EXT: - cdo_mode_bits |= - CR_CHAN(cmd->scan_begin_arg) & - CDO_Sample_Source_Select_Mask; - break; - default: - BUG(); - break; - } - if (cmd->scan_begin_arg & CR_INVERT) - cdo_mode_bits |= CDO_Polarity_Bit; - ni_writel(cdo_mode_bits, M_Offset_CDO_Mode); - if (s->io_bits) { - ni_writel(s->state, M_Offset_CDO_FIFO_Data); - ni_writel(CDO_SW_Update_Bit, M_Offset_CDIO_Command); - ni_writel(s->io_bits, M_Offset_CDO_Mask_Enable); - } else { - comedi_error(dev, - "attempted to run digital output command with no lines configured as outputs"); - return -EIO; - } - retval = ni_request_cdo_mite_channel(dev); - if (retval < 0) - return retval; - - s->async->inttrig = ni_cdo_inttrig; - - return 0; -} - static int ni_cdo_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trig_num) @@ -3535,6 +3494,45 @@ static int ni_cdo_inttrig(struct comedi_device *dev, return retval; } +static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) +{ + struct ni_private *devpriv __maybe_unused = dev->private; + const struct comedi_cmd *cmd = &s->async->cmd; + unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; + int retval; + + ni_writel(CDO_Reset_Bit, M_Offset_CDIO_Command); + switch (cmd->scan_begin_src) { + case TRIG_EXT: + cdo_mode_bits |= + CR_CHAN(cmd->scan_begin_arg) & + CDO_Sample_Source_Select_Mask; + break; + default: + BUG(); + break; + } + if (cmd->scan_begin_arg & CR_INVERT) + cdo_mode_bits |= CDO_Polarity_Bit; + ni_writel(cdo_mode_bits, M_Offset_CDO_Mode); + if (s->io_bits) { + ni_writel(s->state, M_Offset_CDO_FIFO_Data); + ni_writel(CDO_SW_Update_Bit, M_Offset_CDIO_Command); + ni_writel(s->io_bits, M_Offset_CDO_Mask_Enable); + } else { + comedi_error(dev, + "attempted to run digital output command with no lines configured as outputs"); + return -EIO; + } + retval = ni_request_cdo_mite_channel(dev); + if (retval < 0) + return retval; + + s->async->inttrig = ni_cdo_inttrig; + + return 0; +} + static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { struct ni_private *devpriv __maybe_unused = dev->private; -- cgit From fed37a1e70df88f020db1e53403d70ce67f0802f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:35 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 12 Remove the need for the forward declaration of ni_cdio_cancel() by indirectly calling it using the subdevice (*cancel). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e8409b0d58bc..a6edb9442a38 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,8 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -static int ni_cdio_cancel(struct comedi_device *dev, - struct comedi_subdevice *s); static void handle_cdio_interrupt(struct comedi_device *dev); static int ni_serial_hw_readwrite8(struct comedi_device *dev, @@ -3485,7 +3483,7 @@ static int ni_cdo_inttrig(struct comedi_device *dev, } if (i == timeout) { comedi_error(dev, "dma failed to fill cdo fifo!"); - ni_cdio_cancel(dev, s); + s->cancel(dev, s); return -EIO; } ni_writel(CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | -- cgit From 189e173681d8b4a84e2e071816fe30b64710efaa Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:36 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 13 Move ni_serial_insn_config() to remove the need for some forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 192 ++++++++++++------------- 1 file changed, 92 insertions(+), 100 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index a6edb9442a38..9897f320325d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -196,15 +196,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { static void handle_cdio_interrupt(struct comedi_device *dev); -static int ni_serial_hw_readwrite8(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned char data_out, - unsigned char *data_in); -static int ni_serial_sw_readwrite8(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned char data_out, - unsigned char *data_in); - static void ni_rtsi_init(struct comedi_device *dev); static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, @@ -3590,97 +3581,6 @@ static void handle_cdio_interrupt(struct comedi_device *dev) cfc_handle_events(dev, s); } -static int ni_serial_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - int err = insn->n; - unsigned char byte_out, byte_in = 0; - - if (insn->n != 2) - return -EINVAL; - - switch (data[0]) { - case INSN_CONFIG_SERIAL_CLOCK: - devpriv->serial_hw_mode = 1; - devpriv->dio_control |= DIO_HW_Serial_Enable; - - if (data[1] == SERIAL_DISABLED) { - devpriv->serial_hw_mode = 0; - devpriv->dio_control &= ~(DIO_HW_Serial_Enable | - DIO_Software_Serial_Control); - data[1] = SERIAL_DISABLED; - devpriv->serial_interval_ns = data[1]; - } else if (data[1] <= SERIAL_600NS) { - /* Warning: this clock speed is too fast to reliably - control SCXI. */ - devpriv->dio_control &= ~DIO_HW_Serial_Timebase; - devpriv->clock_and_fout |= Slow_Internal_Timebase; - devpriv->clock_and_fout &= ~DIO_Serial_Out_Divide_By_2; - data[1] = SERIAL_600NS; - devpriv->serial_interval_ns = data[1]; - } else if (data[1] <= SERIAL_1_2US) { - devpriv->dio_control &= ~DIO_HW_Serial_Timebase; - devpriv->clock_and_fout |= Slow_Internal_Timebase | - DIO_Serial_Out_Divide_By_2; - data[1] = SERIAL_1_2US; - devpriv->serial_interval_ns = data[1]; - } else if (data[1] <= SERIAL_10US) { - devpriv->dio_control |= DIO_HW_Serial_Timebase; - devpriv->clock_and_fout |= Slow_Internal_Timebase | - DIO_Serial_Out_Divide_By_2; - /* Note: DIO_Serial_Out_Divide_By_2 only affects - 600ns/1.2us. If you turn divide_by_2 off with the - slow clock, you will still get 10us, except then - all your delays are wrong. */ - data[1] = SERIAL_10US; - devpriv->serial_interval_ns = data[1]; - } else { - devpriv->dio_control &= ~(DIO_HW_Serial_Enable | - DIO_Software_Serial_Control); - devpriv->serial_hw_mode = 0; - data[1] = (data[1] / 1000) * 1000; - devpriv->serial_interval_ns = data[1]; - } - - devpriv->stc_writew(dev, devpriv->dio_control, - DIO_Control_Register); - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); - return 1; - - break; - - case INSN_CONFIG_BIDIRECTIONAL_DATA: - - if (devpriv->serial_interval_ns == 0) - return -EINVAL; - - byte_out = data[1] & 0xFF; - - if (devpriv->serial_hw_mode) { - err = ni_serial_hw_readwrite8(dev, s, byte_out, - &byte_in); - } else if (devpriv->serial_interval_ns > 0) { - err = ni_serial_sw_readwrite8(dev, s, byte_out, - &byte_in); - } else { - printk("ni_serial_insn_config: serial disabled!\n"); - return -EINVAL; - } - if (err < 0) - return err; - data[1] = byte_in & 0xFF; - return insn->n; - - break; - default: - return -EINVAL; - } - -} - static int ni_serial_hw_readwrite8(struct comedi_device *dev, struct comedi_subdevice *s, unsigned char data_out, @@ -3781,6 +3681,98 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, return 0; } +static int ni_serial_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct ni_private *devpriv = dev->private; + int err = insn->n; + unsigned char byte_out, byte_in = 0; + + if (insn->n != 2) + return -EINVAL; + + switch (data[0]) { + case INSN_CONFIG_SERIAL_CLOCK: + devpriv->serial_hw_mode = 1; + devpriv->dio_control |= DIO_HW_Serial_Enable; + + if (data[1] == SERIAL_DISABLED) { + devpriv->serial_hw_mode = 0; + devpriv->dio_control &= ~(DIO_HW_Serial_Enable | + DIO_Software_Serial_Control); + data[1] = SERIAL_DISABLED; + devpriv->serial_interval_ns = data[1]; + } else if (data[1] <= SERIAL_600NS) { + /* Warning: this clock speed is too fast to reliably + control SCXI. */ + devpriv->dio_control &= ~DIO_HW_Serial_Timebase; + devpriv->clock_and_fout |= Slow_Internal_Timebase; + devpriv->clock_and_fout &= ~DIO_Serial_Out_Divide_By_2; + data[1] = SERIAL_600NS; + devpriv->serial_interval_ns = data[1]; + } else if (data[1] <= SERIAL_1_2US) { + devpriv->dio_control &= ~DIO_HW_Serial_Timebase; + devpriv->clock_and_fout |= Slow_Internal_Timebase | + DIO_Serial_Out_Divide_By_2; + data[1] = SERIAL_1_2US; + devpriv->serial_interval_ns = data[1]; + } else if (data[1] <= SERIAL_10US) { + devpriv->dio_control |= DIO_HW_Serial_Timebase; + devpriv->clock_and_fout |= Slow_Internal_Timebase | + DIO_Serial_Out_Divide_By_2; + /* Note: DIO_Serial_Out_Divide_By_2 only affects + 600ns/1.2us. If you turn divide_by_2 off with the + slow clock, you will still get 10us, except then + all your delays are wrong. */ + data[1] = SERIAL_10US; + devpriv->serial_interval_ns = data[1]; + } else { + devpriv->dio_control &= ~(DIO_HW_Serial_Enable | + DIO_Software_Serial_Control); + devpriv->serial_hw_mode = 0; + data[1] = (data[1] / 1000) * 1000; + devpriv->serial_interval_ns = data[1]; + } + + devpriv->stc_writew(dev, devpriv->dio_control, + DIO_Control_Register); + devpriv->stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); + return 1; + + break; + + case INSN_CONFIG_BIDIRECTIONAL_DATA: + + if (devpriv->serial_interval_ns == 0) + return -EINVAL; + + byte_out = data[1] & 0xFF; + + if (devpriv->serial_hw_mode) { + err = ni_serial_hw_readwrite8(dev, s, byte_out, + &byte_in); + } else if (devpriv->serial_interval_ns > 0) { + err = ni_serial_sw_readwrite8(dev, s, byte_out, + &byte_in); + } else { + printk("ni_serial_insn_config: serial disabled!\n"); + return -EINVAL; + } + if (err < 0) + return err; + data[1] = byte_in & 0xFF; + return insn->n; + + break; + default: + return -EINVAL; + } + +} + static void mio_common_detach(struct comedi_device *dev) { struct ni_private *devpriv = dev->private; -- cgit From f8246dfadb8a9661d0f79138115370df6c81bd56 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:37 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 14 Move shutdown_ai_command() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 31 +++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 9897f320325d..e5463c9253aa 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -211,7 +211,6 @@ static int ni_ai_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trignum); static void ni_load_channelgain_list(struct comedi_device *dev, unsigned int n_chan, unsigned int *list); -static void shutdown_ai_command(struct comedi_device *dev); static void handle_gpct_interrupt(struct comedi_device *dev, unsigned short counter_index); @@ -822,8 +821,22 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) } return 0; } - #endif /* PCIDMA */ + +static void shutdown_ai_command(struct comedi_device *dev) +{ + struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + +#ifdef PCIDMA + ni_ai_drain_dma(dev); +#endif + ni_handle_fifo_dregs(dev); + get_last_sample_611x(dev); + get_last_sample_6143(dev); + + s->async->events |= COMEDI_CB_EOA; +} + static void ni_handle_eos(struct comedi_device *dev, struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; @@ -849,20 +862,6 @@ static void ni_handle_eos(struct comedi_device *dev, struct comedi_subdevice *s) shutdown_ai_command(dev); } -static void shutdown_ai_command(struct comedi_device *dev) -{ - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; - -#ifdef PCIDMA - ni_ai_drain_dma(dev); -#endif - ni_handle_fifo_dregs(dev); - get_last_sample_611x(dev); - get_last_sample_6143(dev); - - s->async->events |= COMEDI_CB_EOA; -} - static void handle_gpct_interrupt(struct comedi_device *dev, unsigned short counter_index) { -- cgit From 8511b8582378c7dbf8f75015fae5570a6a46250a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:38 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 15 Move ni_ai_inttrig() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 36 ++++++++++++-------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e5463c9253aa..d520417fc0dc 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -207,8 +207,6 @@ static int ni_ao_fifo_half_empty(struct comedi_device *dev, struct comedi_subdevice *s); #endif static void ni_handle_fifo_dregs(struct comedi_device *dev); -static int ni_ai_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned int trignum); static void ni_load_channelgain_list(struct comedi_device *dev, unsigned int n_chan, unsigned int *list); @@ -2151,6 +2149,23 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, return 0; } +static int ni_ai_inttrig(struct comedi_device *dev, + struct comedi_subdevice *s, + unsigned int trig_num) +{ + struct ni_private *devpriv = dev->private; + struct comedi_cmd *cmd = &s->async->cmd; + + if (trig_num != cmd->start_arg) + return -EINVAL; + + devpriv->stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, + AI_Command_2_Register); + s->async->inttrig = NULL; + + return 1; +} + static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { const struct ni_board_struct *board = comedi_board(dev); @@ -2446,23 +2461,6 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int ni_ai_inttrig(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int trig_num) -{ - struct ni_private *devpriv = dev->private; - struct comedi_cmd *cmd = &s->async->cmd; - - if (trig_num != cmd->start_arg) - return -EINVAL; - - devpriv->stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, - AI_Command_2_Register); - s->async->inttrig = NULL; - - return 1; -} - static int ni_ai_config_analog_trig(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, -- cgit From d2a577c0226c98ad5c6d8ca6cc3e08879dac49d9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:39 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 16 Move ni_ai_insn_config() to remove the need for a forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 115 ++++++++++++------------- 1 file changed, 55 insertions(+), 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index d520417fc0dc..65c20c98dd94 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2461,66 +2461,6 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int ni_ai_config_analog_trig(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data); - -static int ni_ai_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - - if (insn->n < 1) - return -EINVAL; - - switch (data[0]) { - case INSN_CONFIG_ANALOG_TRIG: - return ni_ai_config_analog_trig(dev, s, insn, data); - case INSN_CONFIG_ALT_SOURCE: - if (board->reg_type & ni_reg_m_series_mask) { - if (data[1] & ~(MSeries_AI_Bypass_Cal_Sel_Pos_Mask | - MSeries_AI_Bypass_Cal_Sel_Neg_Mask | - MSeries_AI_Bypass_Mode_Mux_Mask | - MSeries_AO_Bypass_AO_Cal_Sel_Mask)) { - return -EINVAL; - } - devpriv->ai_calib_source = data[1]; - } else if (board->reg_type == ni_reg_6143) { - unsigned int calib_source; - - calib_source = data[1] & 0xf; - - if (calib_source > 0xF) - return -EINVAL; - - devpriv->ai_calib_source = calib_source; - ni_writew(calib_source, Calibration_Channel_6143); - } else { - unsigned int calib_source; - unsigned int calib_source_adjust; - - calib_source = data[1] & 0xf; - calib_source_adjust = (data[1] >> 4) & 0xff; - - if (calib_source >= 8) - return -EINVAL; - devpriv->ai_calib_source = calib_source; - if (board->reg_type == ni_reg_611x) { - ni_writeb(calib_source_adjust, - Cal_Gain_Select_611x); - } - } - return 2; - default: - break; - } - - return -EINVAL; -} - static int ni_ai_config_analog_trig(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -2621,6 +2561,61 @@ static int ni_ai_config_analog_trig(struct comedi_device *dev, return 5; } +static int ni_ai_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, unsigned int *data) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + + if (insn->n < 1) + return -EINVAL; + + switch (data[0]) { + case INSN_CONFIG_ANALOG_TRIG: + return ni_ai_config_analog_trig(dev, s, insn, data); + case INSN_CONFIG_ALT_SOURCE: + if (board->reg_type & ni_reg_m_series_mask) { + if (data[1] & ~(MSeries_AI_Bypass_Cal_Sel_Pos_Mask | + MSeries_AI_Bypass_Cal_Sel_Neg_Mask | + MSeries_AI_Bypass_Mode_Mux_Mask | + MSeries_AO_Bypass_AO_Cal_Sel_Mask)) { + return -EINVAL; + } + devpriv->ai_calib_source = data[1]; + } else if (board->reg_type == ni_reg_6143) { + unsigned int calib_source; + + calib_source = data[1] & 0xf; + + if (calib_source > 0xF) + return -EINVAL; + + devpriv->ai_calib_source = calib_source; + ni_writew(calib_source, Calibration_Channel_6143); + } else { + unsigned int calib_source; + unsigned int calib_source_adjust; + + calib_source = data[1] & 0xf; + calib_source_adjust = (data[1] >> 4) & 0xff; + + if (calib_source >= 8) + return -EINVAL; + devpriv->ai_calib_source = calib_source; + if (board->reg_type == ni_reg_611x) { + ni_writeb(calib_source_adjust, + Cal_Gain_Select_611x); + } + } + return 2; + default: + break; + } + + return -EINVAL; +} + /* munge data from unsigned to 2's complement for analog output bipolar modes */ static void ni_ao_munge(struct comedi_device *dev, struct comedi_subdevice *s, void *data, unsigned int num_bytes, -- cgit From f8f6d91d8e65cf5eaaa861eb842f466aab30a9a6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:40 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 17 Move the get_last_sample_*() helpers to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 84 +++++++++++++------------- 1 file changed, 41 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 65c20c98dd94..2a592a4d6e8c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -274,8 +274,6 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, unsigned ai_mite_status); static void handle_b_interrupt(struct comedi_device *dev, unsigned short status, unsigned ao_mite_status); -static void get_last_sample_611x(struct comedi_device *dev); -static void get_last_sample_6143(struct comedi_device *dev); static inline void ni_set_bitfield(struct comedi_device *dev, int reg, unsigned bit_mask, unsigned bit_values) @@ -821,6 +819,47 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) } #endif /* PCIDMA */ +static void get_last_sample_611x(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv __maybe_unused = dev->private; + struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + unsigned short data; + u32 dl; + + if (board->reg_type != ni_reg_611x) + return; + + /* Check if there's a single sample stuck in the FIFO */ + if (ni_readb(XXX_Status) & 0x80) { + dl = ni_readl(ADC_FIFO_Data_611x); + data = (dl & 0xffff); + cfc_write_to_buffer(s, data); + } +} + +static void get_last_sample_6143(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv __maybe_unused = dev->private; + struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + unsigned short data; + u32 dl; + + if (board->reg_type != ni_reg_6143) + return; + + /* Check if there's a single sample stuck in the FIFO */ + if (ni_readl(AIFIFO_Status_6143) & 0x01) { + ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ + dl = ni_readl(AIFIFO_Data_6143); + + /* This may get the hi/lo data in the wrong order */ + data = (dl >> 16) & 0xffff; + cfc_write_to_buffer(s, data); + } +} + static void shutdown_ai_command(struct comedi_device *dev) { struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; @@ -1338,47 +1377,6 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) } } -static void get_last_sample_611x(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; - unsigned short data; - u32 dl; - - if (board->reg_type != ni_reg_611x) - return; - - /* Check if there's a single sample stuck in the FIFO */ - if (ni_readb(XXX_Status) & 0x80) { - dl = ni_readl(ADC_FIFO_Data_611x); - data = (dl & 0xffff); - cfc_write_to_buffer(s, data); - } -} - -static void get_last_sample_6143(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; - unsigned short data; - u32 dl; - - if (board->reg_type != ni_reg_6143) - return; - - /* Check if there's a single sample stuck in the FIFO */ - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); - - /* This may get the hi/lo data in the wrong order */ - data = (dl >> 16) & 0xffff; - cfc_write_to_buffer(s, data); - } -} - static void ni_ai_munge(struct comedi_device *dev, struct comedi_subdevice *s, void *data, unsigned int num_bytes, unsigned int chan_index) -- cgit From 2655c8a1d7305ce0f80c748a37efbb8252dc01ae Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:41 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 18 Move ni_ai_drain_dma() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 73 ++++++++++++-------------- 1 file changed, 35 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 2a592a4d6e8c..5a33b24f464b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -321,8 +321,6 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, } #ifdef PCIDMA -static int ni_ai_drain_dma(struct comedi_device *dev); - /* DMA channel setup */ /* negative channel means no channel */ @@ -783,6 +781,41 @@ static void ni_sync_ai_dma(struct comedi_device *dev) spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); } +static int ni_ai_drain_dma(struct comedi_device *dev) +{ + struct ni_private *devpriv = dev->private; + int i; + static const int timeout = 10000; + unsigned long flags; + int retval = 0; + + spin_lock_irqsave(&devpriv->mite_channel_lock, flags); + if (devpriv->ai_mite_chan) { + for (i = 0; i < timeout; i++) { + if ((devpriv->stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St) + && mite_bytes_in_transit(devpriv->ai_mite_chan) == + 0) + break; + udelay(5); + } + if (i == timeout) { + printk("ni_mio_common: wait for dma drain timed out\n"); + printk + ("mite_bytes_in_transit=%i, AI_Status1_Register=0x%x\n", + mite_bytes_in_transit(devpriv->ai_mite_chan), + devpriv->stc_readw(dev, AI_Status_1_Register)); + retval = -1; + } + } + spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); + + ni_sync_ai_dma(dev); + + return retval; +} + static void mite_handle_b_linkc(struct mite_struct *mite, struct comedi_device *dev) { @@ -1272,42 +1305,6 @@ static void ni_handle_fifo_half_full(struct comedi_device *dev) } #endif -#ifdef PCIDMA -static int ni_ai_drain_dma(struct comedi_device *dev) -{ - struct ni_private *devpriv = dev->private; - int i; - static const int timeout = 10000; - unsigned long flags; - int retval = 0; - - spin_lock_irqsave(&devpriv->mite_channel_lock, flags); - if (devpriv->ai_mite_chan) { - for (i = 0; i < timeout; i++) { - if ((devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St) - && mite_bytes_in_transit(devpriv->ai_mite_chan) == - 0) - break; - udelay(5); - } - if (i == timeout) { - printk("ni_mio_common: wait for dma drain timed out\n"); - printk - ("mite_bytes_in_transit=%i, AI_Status1_Register=0x%x\n", - mite_bytes_in_transit(devpriv->ai_mite_chan), - devpriv->stc_readw(dev, AI_Status_1_Register)); - retval = -1; - } - } - spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - - ni_sync_ai_dma(dev); - - return retval; -} -#endif /* Empties the AI fifo */ -- cgit From c75527fbf688efb40aa58da08eb622af40cb8841 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:42 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 19 Move ni_E_interrupt() to remove the need for some forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 130 +++++++++++-------------- 1 file changed, 59 insertions(+), 71 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 5a33b24f464b..0c2ef4c25a48 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,8 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -static void handle_cdio_interrupt(struct comedi_device *dev); - static void ni_rtsi_init(struct comedi_device *dev); static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, @@ -210,13 +208,8 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev); static void ni_load_channelgain_list(struct comedi_device *dev, unsigned int n_chan, unsigned int *list); -static void handle_gpct_interrupt(struct comedi_device *dev, - unsigned short counter_index); - static int ni_set_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns); -static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status); -static void ack_b_interrupt(struct comedi_device *dev, unsigned short b_status); enum aimodes { AIMODE_NONE = 0, @@ -270,11 +263,6 @@ enum timebase_nanoseconds { static const int num_adc_stages_611x = 3; -static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, - unsigned ai_mite_status); -static void handle_b_interrupt(struct comedi_device *dev, unsigned short status, - unsigned ao_mite_status); - static inline void ni_set_bitfield(struct comedi_device *dev, int reg, unsigned bit_mask, unsigned bit_values) { @@ -709,65 +697,6 @@ static inline void ni_set_bits(struct comedi_device *dev, int reg, ni_set_bitfield(dev, reg, bits, bit_values); } -static irqreturn_t ni_E_interrupt(int irq, void *d) -{ - struct comedi_device *dev = d; - struct ni_private *devpriv = dev->private; - unsigned short a_status; - unsigned short b_status; - unsigned int ai_mite_status = 0; - unsigned int ao_mite_status = 0; - unsigned long flags; -#ifdef PCIDMA - struct mite_struct *mite = devpriv->mite; -#endif - - if (!dev->attached) - return IRQ_NONE; - smp_mb(); /* make sure dev->attached is checked before handler does anything else. */ - - /* lock to avoid race with comedi_poll */ - spin_lock_irqsave(&dev->spinlock, flags); - a_status = devpriv->stc_readw(dev, AI_Status_1_Register); - b_status = devpriv->stc_readw(dev, AO_Status_1_Register); -#ifdef PCIDMA - if (mite) { - unsigned long flags_too; - - spin_lock_irqsave(&devpriv->mite_channel_lock, flags_too); - if (devpriv->ai_mite_chan) { - ai_mite_status = mite_get_status(devpriv->ai_mite_chan); - if (ai_mite_status & CHSR_LINKC) - writel(CHOR_CLRLC, - devpriv->mite->mite_io_addr + - MITE_CHOR(devpriv-> - ai_mite_chan->channel)); - } - if (devpriv->ao_mite_chan) { - ao_mite_status = mite_get_status(devpriv->ao_mite_chan); - if (ao_mite_status & CHSR_LINKC) - writel(CHOR_CLRLC, - mite->mite_io_addr + - MITE_CHOR(devpriv-> - ao_mite_chan->channel)); - } - spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags_too); - } -#endif - ack_a_interrupt(dev, a_status); - ack_b_interrupt(dev, b_status); - if ((a_status & Interrupt_A_St) || (ai_mite_status & CHSR_INT)) - handle_a_interrupt(dev, a_status, ai_mite_status); - if ((b_status & Interrupt_B_St) || (ao_mite_status & CHSR_INT)) - handle_b_interrupt(dev, b_status, ao_mite_status); - handle_gpct_interrupt(dev, 0); - handle_gpct_interrupt(dev, 1); - handle_cdio_interrupt(dev); - - spin_unlock_irqrestore(&dev->spinlock, flags); - return IRQ_HANDLED; -} - #ifdef PCIDMA static void ni_sync_ai_dma(struct comedi_device *dev) { @@ -4805,6 +4734,65 @@ static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s) } #endif +static irqreturn_t ni_E_interrupt(int irq, void *d) +{ + struct comedi_device *dev = d; + struct ni_private *devpriv = dev->private; + unsigned short a_status; + unsigned short b_status; + unsigned int ai_mite_status = 0; + unsigned int ao_mite_status = 0; + unsigned long flags; +#ifdef PCIDMA + struct mite_struct *mite = devpriv->mite; +#endif + + if (!dev->attached) + return IRQ_NONE; + smp_mb(); /* make sure dev->attached is checked before handler does anything else. */ + + /* lock to avoid race with comedi_poll */ + spin_lock_irqsave(&dev->spinlock, flags); + a_status = devpriv->stc_readw(dev, AI_Status_1_Register); + b_status = devpriv->stc_readw(dev, AO_Status_1_Register); +#ifdef PCIDMA + if (mite) { + unsigned long flags_too; + + spin_lock_irqsave(&devpriv->mite_channel_lock, flags_too); + if (devpriv->ai_mite_chan) { + ai_mite_status = mite_get_status(devpriv->ai_mite_chan); + if (ai_mite_status & CHSR_LINKC) + writel(CHOR_CLRLC, + devpriv->mite->mite_io_addr + + MITE_CHOR(devpriv-> + ai_mite_chan->channel)); + } + if (devpriv->ao_mite_chan) { + ao_mite_status = mite_get_status(devpriv->ao_mite_chan); + if (ao_mite_status & CHSR_LINKC) + writel(CHOR_CLRLC, + mite->mite_io_addr + + MITE_CHOR(devpriv-> + ao_mite_chan->channel)); + } + spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags_too); + } +#endif + ack_a_interrupt(dev, a_status); + ack_b_interrupt(dev, b_status); + if ((a_status & Interrupt_A_St) || (ai_mite_status & CHSR_INT)) + handle_a_interrupt(dev, a_status, ai_mite_status); + if ((b_status & Interrupt_B_St) || (ao_mite_status & CHSR_INT)) + handle_b_interrupt(dev, b_status, ao_mite_status); + handle_gpct_interrupt(dev, 0); + handle_gpct_interrupt(dev, 1); + handle_cdio_interrupt(dev); + + spin_unlock_irqrestore(&dev->spinlock, flags); + return IRQ_HANDLED; +} + static int ni_E_init(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); -- cgit From 3d129c3e5fa73391d7af5d091ce2d9ca4226d81a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:43 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 20 Move ni_ai_insn_read() to remove the need for a forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 201 ++++++++++++------------- 1 file changed, 100 insertions(+), 101 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 0c2ef4c25a48..e88d8ffe03b1 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -205,8 +205,6 @@ static int ni_ao_fifo_half_empty(struct comedi_device *dev, struct comedi_subdevice *s); #endif static void ni_handle_fifo_dregs(struct comedi_device *dev); -static void ni_load_channelgain_list(struct comedi_device *dev, - unsigned int n_chan, unsigned int *list); static int ni_set_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns); @@ -1525,105 +1523,6 @@ static int ni_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s) return count; } -static int ni_ai_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, - unsigned int *data) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - int i, n; - const unsigned int mask = (1 << board->adbits) - 1; - unsigned signbits; - unsigned short d; - unsigned long dl; - - ni_load_channelgain_list(dev, 1, &insn->chanspec); - - ni_clear_ai_fifo(dev); - - signbits = devpriv->ai_offset[0]; - if (board->reg_type == ni_reg_611x) { - for (n = 0; n < num_adc_stages_611x; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - udelay(1); - } - for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - /* The 611x has screwy 32-bit FIFOs. */ - d = 0; - for (i = 0; i < NI_TIMEOUT; i++) { - if (ni_readb(XXX_Status) & 0x80) { - d = (ni_readl(ADC_FIFO_Data_611x) >> 16) - & 0xffff; - break; - } - if (!(devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St)) { - d = ni_readl(ADC_FIFO_Data_611x) & - 0xffff; - break; - } - } - if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in 611x ni_ai_insn_read\n"); - return -ETIME; - } - d += signbits; - data[n] = d; - } - } else if (board->reg_type == ni_reg_6143) { - for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - - /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ - dl = 0; - for (i = 0; i < NI_TIMEOUT; i++) { - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); - break; - } - } - if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in 6143 ni_ai_insn_read\n"); - return -ETIME; - } - data[n] = (((dl >> 16) & 0xFFFF) + signbits) & 0xFFFF; - } - } else { - for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - for (i = 0; i < NI_TIMEOUT; i++) { - if (!(devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St)) - break; - } - if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in ni_ai_insn_read\n"); - return -ETIME; - } - if (board->reg_type & ni_reg_m_series_mask) { - data[n] = - ni_readl(M_Offset_AI_FIFO_Data) & mask; - } else { - d = ni_readw(ADC_FIFO_Data_Register); - d += signbits; /* subtle: needs to be short addition */ - data[n] = d; - } - } - } - return insn->n; -} - static void ni_prime_channelgain_list(struct comedi_device *dev) { struct ni_private *devpriv = dev->private; @@ -1870,6 +1769,106 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } } +static int ni_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + int i, n; + const unsigned int mask = (1 << board->adbits) - 1; + unsigned signbits; + unsigned short d; + unsigned long dl; + + ni_load_channelgain_list(dev, 1, &insn->chanspec); + + ni_clear_ai_fifo(dev); + + signbits = devpriv->ai_offset[0]; + if (board->reg_type == ni_reg_611x) { + for (n = 0; n < num_adc_stages_611x; n++) { + devpriv->stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + udelay(1); + } + for (n = 0; n < insn->n; n++) { + devpriv->stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + /* The 611x has screwy 32-bit FIFOs. */ + d = 0; + for (i = 0; i < NI_TIMEOUT; i++) { + if (ni_readb(XXX_Status) & 0x80) { + d = (ni_readl(ADC_FIFO_Data_611x) >> 16) + & 0xffff; + break; + } + if (!(devpriv->stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St)) { + d = ni_readl(ADC_FIFO_Data_611x) & + 0xffff; + break; + } + } + if (i == NI_TIMEOUT) { + printk + ("ni_mio_common: timeout in 611x ni_ai_insn_read\n"); + return -ETIME; + } + d += signbits; + data[n] = d; + } + } else if (board->reg_type == ni_reg_6143) { + for (n = 0; n < insn->n; n++) { + devpriv->stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + + /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ + dl = 0; + for (i = 0; i < NI_TIMEOUT; i++) { + if (ni_readl(AIFIFO_Status_6143) & 0x01) { + ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ + dl = ni_readl(AIFIFO_Data_6143); + break; + } + } + if (i == NI_TIMEOUT) { + printk + ("ni_mio_common: timeout in 6143 ni_ai_insn_read\n"); + return -ETIME; + } + data[n] = (((dl >> 16) & 0xFFFF) + signbits) & 0xFFFF; + } + } else { + for (n = 0; n < insn->n; n++) { + devpriv->stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + for (i = 0; i < NI_TIMEOUT; i++) { + if (!(devpriv->stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St)) + break; + } + if (i == NI_TIMEOUT) { + printk + ("ni_mio_common: timeout in ni_ai_insn_read\n"); + return -ETIME; + } + if (board->reg_type & ni_reg_m_series_mask) { + data[n] = + ni_readl(M_Offset_AI_FIFO_Data) & mask; + } else { + d = ni_readw(ADC_FIFO_Data_Register); + d += signbits; /* subtle: needs to be short addition */ + data[n] = d; + } + } + } + return insn->n; +} + static int ni_ns_to_timer(const struct comedi_device *dev, unsigned nanosec, int round_mode) { -- cgit From 892885eafaf2ff88a6cddf21bba0edc7c6dd6e4f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:44 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 21 Move ni_rtsi_init() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 86 ++++++++++++-------------- 1 file changed, 40 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e88d8ffe03b1..77fda821efa4 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,7 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -static void ni_rtsi_init(struct comedi_device *dev); static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); @@ -4702,6 +4701,46 @@ static int ni_rtsi_insn_bits(struct comedi_device *dev, return insn->n; } +static void ni_rtsi_init(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + + /* Initialises the RTSI bus signal switch to a default state */ + + /* Set clock mode to internal */ + devpriv->clock_and_fout2 = MSeries_RTSI_10MHz_Bit; + if (ni_set_master_clock(dev, NI_MIO_INTERNAL_CLOCK, 0) < 0) + printk("ni_set_master_clock failed, bug?"); + /* default internal lines routing to RTSI bus lines */ + devpriv->rtsi_trig_a_output_reg = + RTSI_Trig_Output_Bits(0, + NI_RTSI_OUTPUT_ADR_START1) | + RTSI_Trig_Output_Bits(1, + NI_RTSI_OUTPUT_ADR_START2) | + RTSI_Trig_Output_Bits(2, + NI_RTSI_OUTPUT_SCLKG) | + RTSI_Trig_Output_Bits(3, NI_RTSI_OUTPUT_DACUPDN); + devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, + RTSI_Trig_A_Output_Register); + devpriv->rtsi_trig_b_output_reg = + RTSI_Trig_Output_Bits(4, + NI_RTSI_OUTPUT_DA_START1) | + RTSI_Trig_Output_Bits(5, + NI_RTSI_OUTPUT_G_SRC0) | + RTSI_Trig_Output_Bits(6, NI_RTSI_OUTPUT_G_GATE0); + if (board->reg_type & ni_reg_m_series_mask) + devpriv->rtsi_trig_b_output_reg |= + RTSI_Trig_Output_Bits(7, NI_RTSI_OUTPUT_RTSI_OSC); + devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, + RTSI_Trig_B_Output_Register); + +/* +* Sets the source and direction of the 4 on board lines +* devpriv->stc_writew(dev, 0x0000, RTSI_Board_Register); +*/ +} + #ifdef PCIDMA static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -5211,51 +5250,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) #endif -/* - * - * NI RTSI Bus Functions - * - */ -static void ni_rtsi_init(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - - /* Initialises the RTSI bus signal switch to a default state */ - - /* Set clock mode to internal */ - devpriv->clock_and_fout2 = MSeries_RTSI_10MHz_Bit; - if (ni_set_master_clock(dev, NI_MIO_INTERNAL_CLOCK, 0) < 0) - printk("ni_set_master_clock failed, bug?"); - /* default internal lines routing to RTSI bus lines */ - devpriv->rtsi_trig_a_output_reg = - RTSI_Trig_Output_Bits(0, - NI_RTSI_OUTPUT_ADR_START1) | - RTSI_Trig_Output_Bits(1, - NI_RTSI_OUTPUT_ADR_START2) | - RTSI_Trig_Output_Bits(2, - NI_RTSI_OUTPUT_SCLKG) | - RTSI_Trig_Output_Bits(3, NI_RTSI_OUTPUT_DACUPDN); - devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, - RTSI_Trig_A_Output_Register); - devpriv->rtsi_trig_b_output_reg = - RTSI_Trig_Output_Bits(4, - NI_RTSI_OUTPUT_DA_START1) | - RTSI_Trig_Output_Bits(5, - NI_RTSI_OUTPUT_G_SRC0) | - RTSI_Trig_Output_Bits(6, NI_RTSI_OUTPUT_G_GATE0); - if (board->reg_type & ni_reg_m_series_mask) - devpriv->rtsi_trig_b_output_reg |= - RTSI_Trig_Output_Bits(7, NI_RTSI_OUTPUT_RTSI_OSC); - devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, - RTSI_Trig_B_Output_Register); - -/* -* Sets the source and direction of the 4 on board lines -* devpriv->stc_writew(dev, 0x0000, RTSI_Board_Register); -*/ -} - /* Find best multiplier/divider to try and get the PLL running at 80 MHz * given an arbitrary frequency input clock */ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, -- cgit From ae43763d347cd87f195bb63daf56dcbb3557c86b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:45 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 22 Move ni_rtsi_insn_config() and its helper functions to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 333 ++++++++++++------------- 1 file changed, 165 insertions(+), 168 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 77fda821efa4..ba876dee1922 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,10 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -static int ni_rtsi_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); - #ifndef PCIDMA static void ni_handle_fifo_half_full(struct comedi_device *dev); static int ni_ao_fifo_half_empty(struct comedi_device *dev, @@ -4691,6 +4687,171 @@ static int init_cs5529(struct comedi_device *dev) return 0; } +static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + + if (board->reg_type & ni_reg_m_series_mask) + return 8; + else + return 7; +} + +static int ni_valid_rtsi_output_source(struct comedi_device *dev, + unsigned chan, unsigned source) +{ + const struct ni_board_struct *board = comedi_board(dev); + + if (chan >= num_configurable_rtsi_channels(dev)) { + if (chan == old_RTSI_clock_channel) { + if (source == NI_RTSI_OUTPUT_RTSI_OSC) + return 1; + else { + printk + ("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", + __func__, chan, old_RTSI_clock_channel); + return 0; + } + } + return 0; + } + switch (source) { + case NI_RTSI_OUTPUT_ADR_START1: + case NI_RTSI_OUTPUT_ADR_START2: + case NI_RTSI_OUTPUT_SCLKG: + case NI_RTSI_OUTPUT_DACUPDN: + case NI_RTSI_OUTPUT_DA_START1: + case NI_RTSI_OUTPUT_G_SRC0: + case NI_RTSI_OUTPUT_G_GATE0: + case NI_RTSI_OUTPUT_RGOUT0: + case NI_RTSI_OUTPUT_RTSI_BRD_0: + return 1; + break; + case NI_RTSI_OUTPUT_RTSI_OSC: + if (board->reg_type & ni_reg_m_series_mask) + return 1; + else + return 0; + break; + default: + return 0; + break; + } +} + +static int ni_set_rtsi_routing(struct comedi_device *dev, + unsigned chan, unsigned source) +{ + struct ni_private *devpriv = dev->private; + + if (ni_valid_rtsi_output_source(dev, chan, source) == 0) + return -EINVAL; + if (chan < 4) { + devpriv->rtsi_trig_a_output_reg &= ~RTSI_Trig_Output_Mask(chan); + devpriv->rtsi_trig_a_output_reg |= + RTSI_Trig_Output_Bits(chan, source); + devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, + RTSI_Trig_A_Output_Register); + } else if (chan < 8) { + devpriv->rtsi_trig_b_output_reg &= ~RTSI_Trig_Output_Mask(chan); + devpriv->rtsi_trig_b_output_reg |= + RTSI_Trig_Output_Bits(chan, source); + devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, + RTSI_Trig_B_Output_Register); + } + return 2; +} + +static unsigned ni_get_rtsi_routing(struct comedi_device *dev, unsigned chan) +{ + struct ni_private *devpriv = dev->private; + + if (chan < 4) { + return RTSI_Trig_Output_Source(chan, + devpriv->rtsi_trig_a_output_reg); + } else if (chan < num_configurable_rtsi_channels(dev)) { + return RTSI_Trig_Output_Source(chan, + devpriv->rtsi_trig_b_output_reg); + } else { + if (chan == old_RTSI_clock_channel) + return NI_RTSI_OUTPUT_RTSI_OSC; + printk("%s: bug! should never get here?\n", __func__); + return 0; + } +} + +static int ni_rtsi_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); + + switch (data[0]) { + case INSN_CONFIG_DIO_OUTPUT: + if (chan < num_configurable_rtsi_channels(dev)) { + devpriv->rtsi_trig_direction_reg |= + RTSI_Output_Bit(chan, + (board->reg_type & ni_reg_m_series_mask) != 0); + } else if (chan == old_RTSI_clock_channel) { + devpriv->rtsi_trig_direction_reg |= + Drive_RTSI_Clock_Bit; + } + devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); + break; + case INSN_CONFIG_DIO_INPUT: + if (chan < num_configurable_rtsi_channels(dev)) { + devpriv->rtsi_trig_direction_reg &= + ~RTSI_Output_Bit(chan, + (board->reg_type & ni_reg_m_series_mask) != 0); + } else if (chan == old_RTSI_clock_channel) { + devpriv->rtsi_trig_direction_reg &= + ~Drive_RTSI_Clock_Bit; + } + devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); + break; + case INSN_CONFIG_DIO_QUERY: + if (chan < num_configurable_rtsi_channels(dev)) { + data[1] = + (devpriv->rtsi_trig_direction_reg & + RTSI_Output_Bit(chan, + (board->reg_type & ni_reg_m_series_mask) != 0)) + ? INSN_CONFIG_DIO_OUTPUT + : INSN_CONFIG_DIO_INPUT; + } else if (chan == old_RTSI_clock_channel) { + data[1] = + (devpriv->rtsi_trig_direction_reg & + Drive_RTSI_Clock_Bit) + ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; + } + return 2; + break; + case INSN_CONFIG_SET_CLOCK_SRC: + return ni_set_master_clock(dev, data[1], data[2]); + break; + case INSN_CONFIG_GET_CLOCK_SRC: + data[1] = devpriv->clock_source; + data[2] = devpriv->clock_ns; + return 3; + break; + case INSN_CONFIG_SET_ROUTING: + return ni_set_rtsi_routing(dev, chan, data[1]); + break; + case INSN_CONFIG_GET_ROUTING: + data[1] = ni_get_rtsi_routing(dev, chan); + return 2; + break; + default: + return -EINVAL; + break; + } + return 1; +} + static int ni_rtsi_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -5295,16 +5456,6 @@ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, return 0; } -static inline unsigned num_configurable_rtsi_channels(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - - if (board->reg_type & ni_reg_m_series_mask) - return 8; - else - return 7; -} - static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns) { @@ -5454,157 +5605,3 @@ static int ni_set_master_clock(struct comedi_device *dev, unsigned source, } return 3; } - -static int ni_valid_rtsi_output_source(struct comedi_device *dev, unsigned chan, - unsigned source) -{ - const struct ni_board_struct *board = comedi_board(dev); - - if (chan >= num_configurable_rtsi_channels(dev)) { - if (chan == old_RTSI_clock_channel) { - if (source == NI_RTSI_OUTPUT_RTSI_OSC) - return 1; - else { - printk - ("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", - __func__, chan, old_RTSI_clock_channel); - return 0; - } - } - return 0; - } - switch (source) { - case NI_RTSI_OUTPUT_ADR_START1: - case NI_RTSI_OUTPUT_ADR_START2: - case NI_RTSI_OUTPUT_SCLKG: - case NI_RTSI_OUTPUT_DACUPDN: - case NI_RTSI_OUTPUT_DA_START1: - case NI_RTSI_OUTPUT_G_SRC0: - case NI_RTSI_OUTPUT_G_GATE0: - case NI_RTSI_OUTPUT_RGOUT0: - case NI_RTSI_OUTPUT_RTSI_BRD_0: - return 1; - break; - case NI_RTSI_OUTPUT_RTSI_OSC: - if (board->reg_type & ni_reg_m_series_mask) - return 1; - else - return 0; - break; - default: - return 0; - break; - } -} - -static int ni_set_rtsi_routing(struct comedi_device *dev, unsigned chan, - unsigned source) -{ - struct ni_private *devpriv = dev->private; - - if (ni_valid_rtsi_output_source(dev, chan, source) == 0) - return -EINVAL; - if (chan < 4) { - devpriv->rtsi_trig_a_output_reg &= ~RTSI_Trig_Output_Mask(chan); - devpriv->rtsi_trig_a_output_reg |= - RTSI_Trig_Output_Bits(chan, source); - devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, - RTSI_Trig_A_Output_Register); - } else if (chan < 8) { - devpriv->rtsi_trig_b_output_reg &= ~RTSI_Trig_Output_Mask(chan); - devpriv->rtsi_trig_b_output_reg |= - RTSI_Trig_Output_Bits(chan, source); - devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, - RTSI_Trig_B_Output_Register); - } - return 2; -} - -static unsigned ni_get_rtsi_routing(struct comedi_device *dev, unsigned chan) -{ - struct ni_private *devpriv = dev->private; - - if (chan < 4) { - return RTSI_Trig_Output_Source(chan, - devpriv->rtsi_trig_a_output_reg); - } else if (chan < num_configurable_rtsi_channels(dev)) { - return RTSI_Trig_Output_Source(chan, - devpriv->rtsi_trig_b_output_reg); - } else { - if (chan == old_RTSI_clock_channel) - return NI_RTSI_OUTPUT_RTSI_OSC; - printk("%s: bug! should never get here?\n", __func__); - return 0; - } -} - -static int ni_rtsi_insn_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - unsigned int chan = CR_CHAN(insn->chanspec); - - switch (data[0]) { - case INSN_CONFIG_DIO_OUTPUT: - if (chan < num_configurable_rtsi_channels(dev)) { - devpriv->rtsi_trig_direction_reg |= - RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0); - } else if (chan == old_RTSI_clock_channel) { - devpriv->rtsi_trig_direction_reg |= - Drive_RTSI_Clock_Bit; - } - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); - break; - case INSN_CONFIG_DIO_INPUT: - if (chan < num_configurable_rtsi_channels(dev)) { - devpriv->rtsi_trig_direction_reg &= - ~RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0); - } else if (chan == old_RTSI_clock_channel) { - devpriv->rtsi_trig_direction_reg &= - ~Drive_RTSI_Clock_Bit; - } - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); - break; - case INSN_CONFIG_DIO_QUERY: - if (chan < num_configurable_rtsi_channels(dev)) { - data[1] = - (devpriv->rtsi_trig_direction_reg & - RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0)) - ? INSN_CONFIG_DIO_OUTPUT - : INSN_CONFIG_DIO_INPUT; - } else if (chan == old_RTSI_clock_channel) { - data[1] = - (devpriv->rtsi_trig_direction_reg & - Drive_RTSI_Clock_Bit) - ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; - } - return 2; - break; - case INSN_CONFIG_SET_CLOCK_SRC: - return ni_set_master_clock(dev, data[1], data[2]); - break; - case INSN_CONFIG_GET_CLOCK_SRC: - data[1] = devpriv->clock_source; - data[2] = devpriv->clock_ns; - return 3; - break; - case INSN_CONFIG_SET_ROUTING: - return ni_set_rtsi_routing(dev, chan, data[1]); - break; - case INSN_CONFIG_GET_ROUTING: - data[1] = ni_get_rtsi_routing(dev, chan); - return 2; - break; - default: - return -EINVAL; - break; - } - return 1; -} -- cgit From 624b161f7e3f94b23d17c884539e3b4dcc8e0392 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:46 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 23 Move ni_set_master_clock() and its helper functions to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 395 ++++++++++++------------- 1 file changed, 197 insertions(+), 198 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index ba876dee1922..c174eac47f7e 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -201,9 +201,6 @@ static int ni_ao_fifo_half_empty(struct comedi_device *dev, #endif static void ni_handle_fifo_dregs(struct comedi_device *dev); -static int ni_set_master_clock(struct comedi_device *dev, unsigned source, - unsigned period_ns); - enum aimodes { AIMODE_NONE = 0, AIMODE_HALF_FULL = 1, @@ -4687,6 +4684,203 @@ static int init_cs5529(struct comedi_device *dev) return 0; } +/* + * Find best multiplier/divider to try and get the PLL running at 80 MHz + * given an arbitrary frequency input clock. + */ +static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, + unsigned *freq_divider, + unsigned *freq_multiplier, + unsigned *actual_period_ns) +{ + unsigned div; + unsigned best_div = 1; + static const unsigned max_div = 0x10; + unsigned mult; + unsigned best_mult = 1; + static const unsigned max_mult = 0x100; + static const unsigned pico_per_nano = 1000; + + const unsigned reference_picosec = reference_period_ns * pico_per_nano; + /* m-series wants the phased-locked loop to output 80MHz, which is divided by 4 to + * 20 MHz for most timing clocks */ + static const unsigned target_picosec = 12500; + static const unsigned fudge_factor_80_to_20Mhz = 4; + int best_period_picosec = 0; + for (div = 1; div <= max_div; ++div) { + for (mult = 1; mult <= max_mult; ++mult) { + unsigned new_period_ps = + (reference_picosec * div) / mult; + if (abs(new_period_ps - target_picosec) < + abs(best_period_picosec - target_picosec)) { + best_period_picosec = new_period_ps; + best_div = div; + best_mult = mult; + } + } + } + if (best_period_picosec == 0) { + printk("%s: bug, failed to find pll parameters\n", __func__); + return -EIO; + } + *freq_divider = best_div; + *freq_multiplier = best_mult; + *actual_period_ns = + (best_period_picosec * fudge_factor_80_to_20Mhz + + (pico_per_nano / 2)) / pico_per_nano; + return 0; +} + +static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, + unsigned source, unsigned period_ns) +{ + struct ni_private *devpriv = dev->private; + static const unsigned min_period_ns = 50; + static const unsigned max_period_ns = 1000; + static const unsigned timeout = 1000; + unsigned pll_control_bits; + unsigned freq_divider; + unsigned freq_multiplier; + unsigned i; + int retval; + + if (source == NI_MIO_PLL_PXI10_CLOCK) + period_ns = 100; + /* these limits are somewhat arbitrary, but NI advertises 1 to 20MHz range so we'll use that */ + if (period_ns < min_period_ns || period_ns > max_period_ns) { + printk + ("%s: you must specify an input clock frequency between %i and %i nanosec " + "for the phased-lock loop.\n", __func__, + min_period_ns, max_period_ns); + return -EINVAL; + } + devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; + devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); + pll_control_bits = + MSeries_PLL_Enable_Bit | MSeries_PLL_VCO_Mode_75_150MHz_Bits; + devpriv->clock_and_fout2 |= + MSeries_Timebase1_Select_Bit | MSeries_Timebase3_Select_Bit; + devpriv->clock_and_fout2 &= ~MSeries_PLL_In_Source_Select_Mask; + switch (source) { + case NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK: + devpriv->clock_and_fout2 |= + MSeries_PLL_In_Source_Select_Star_Trigger_Bits; + retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, + &freq_multiplier, + &devpriv->clock_ns); + if (retval < 0) + return retval; + break; + case NI_MIO_PLL_PXI10_CLOCK: + /* pxi clock is 10MHz */ + devpriv->clock_and_fout2 |= + MSeries_PLL_In_Source_Select_PXI_Clock10; + retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, + &freq_multiplier, + &devpriv->clock_ns); + if (retval < 0) + return retval; + break; + default: + { + unsigned rtsi_channel; + static const unsigned max_rtsi_channel = 7; + for (rtsi_channel = 0; rtsi_channel <= max_rtsi_channel; + ++rtsi_channel) { + if (source == + NI_MIO_PLL_RTSI_CLOCK(rtsi_channel)) { + devpriv->clock_and_fout2 |= + MSeries_PLL_In_Source_Select_RTSI_Bits + (rtsi_channel); + break; + } + } + if (rtsi_channel > max_rtsi_channel) + return -EINVAL; + retval = ni_mseries_get_pll_parameters(period_ns, + &freq_divider, + &freq_multiplier, + &devpriv-> + clock_ns); + if (retval < 0) + return retval; + } + break; + } + ni_writew(devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); + pll_control_bits |= + MSeries_PLL_Divisor_Bits(freq_divider) | + MSeries_PLL_Multiplier_Bits(freq_multiplier); + + /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", + * freq_divider, freq_multiplier, pll_control_bits); */ + /* printk("clock_ns=%d\n", devpriv->clock_ns); */ + ni_writew(pll_control_bits, M_Offset_PLL_Control); + devpriv->clock_source = source; + /* it seems to typically take a few hundred microseconds for PLL to lock */ + for (i = 0; i < timeout; ++i) { + if (ni_readw(M_Offset_PLL_Status) & MSeries_PLL_Locked_Bit) + break; + udelay(1); + } + if (i == timeout) { + printk + ("%s: timed out waiting for PLL to lock to reference clock source %i with period %i ns.\n", + __func__, source, period_ns); + return -ETIMEDOUT; + } + return 3; +} + +static int ni_set_master_clock(struct comedi_device *dev, + unsigned source, unsigned period_ns) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + + if (source == NI_MIO_INTERNAL_CLOCK) { + devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; + devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); + devpriv->clock_ns = TIMEBASE_1_NS; + if (board->reg_type & ni_reg_m_series_mask) { + devpriv->clock_and_fout2 &= + ~(MSeries_Timebase1_Select_Bit | + MSeries_Timebase3_Select_Bit); + ni_writew(devpriv->clock_and_fout2, + M_Offset_Clock_and_Fout2); + ni_writew(0, M_Offset_PLL_Control); + } + devpriv->clock_source = source; + } else { + if (board->reg_type & ni_reg_m_series_mask) { + return ni_mseries_set_pll_master_clock(dev, source, + period_ns); + } else { + if (source == NI_MIO_RTSI_CLOCK) { + devpriv->rtsi_trig_direction_reg |= + Use_RTSI_Clock_Bit; + devpriv->stc_writew(dev, + devpriv-> + rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); + if (period_ns == 0) { + printk + ("%s: we don't handle an unspecified clock period correctly yet, returning error.\n", + __func__); + return -EINVAL; + } else { + devpriv->clock_ns = period_ns; + } + devpriv->clock_source = source; + } else + return -EINVAL; + } + } + return 3; +} + static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -5410,198 +5604,3 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) } #endif - -/* Find best multiplier/divider to try and get the PLL running at 80 MHz - * given an arbitrary frequency input clock */ -static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, - unsigned *freq_divider, - unsigned *freq_multiplier, - unsigned *actual_period_ns) -{ - unsigned div; - unsigned best_div = 1; - static const unsigned max_div = 0x10; - unsigned mult; - unsigned best_mult = 1; - static const unsigned max_mult = 0x100; - static const unsigned pico_per_nano = 1000; - - const unsigned reference_picosec = reference_period_ns * pico_per_nano; - /* m-series wants the phased-locked loop to output 80MHz, which is divided by 4 to - * 20 MHz for most timing clocks */ - static const unsigned target_picosec = 12500; - static const unsigned fudge_factor_80_to_20Mhz = 4; - int best_period_picosec = 0; - for (div = 1; div <= max_div; ++div) { - for (mult = 1; mult <= max_mult; ++mult) { - unsigned new_period_ps = - (reference_picosec * div) / mult; - if (abs(new_period_ps - target_picosec) < - abs(best_period_picosec - target_picosec)) { - best_period_picosec = new_period_ps; - best_div = div; - best_mult = mult; - } - } - } - if (best_period_picosec == 0) { - printk("%s: bug, failed to find pll parameters\n", __func__); - return -EIO; - } - *freq_divider = best_div; - *freq_multiplier = best_mult; - *actual_period_ns = - (best_period_picosec * fudge_factor_80_to_20Mhz + - (pico_per_nano / 2)) / pico_per_nano; - return 0; -} - -static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, - unsigned source, unsigned period_ns) -{ - struct ni_private *devpriv = dev->private; - static const unsigned min_period_ns = 50; - static const unsigned max_period_ns = 1000; - static const unsigned timeout = 1000; - unsigned pll_control_bits; - unsigned freq_divider; - unsigned freq_multiplier; - unsigned i; - int retval; - - if (source == NI_MIO_PLL_PXI10_CLOCK) - period_ns = 100; - /* these limits are somewhat arbitrary, but NI advertises 1 to 20MHz range so we'll use that */ - if (period_ns < min_period_ns || period_ns > max_period_ns) { - printk - ("%s: you must specify an input clock frequency between %i and %i nanosec " - "for the phased-lock loop.\n", __func__, - min_period_ns, max_period_ns); - return -EINVAL; - } - devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); - pll_control_bits = - MSeries_PLL_Enable_Bit | MSeries_PLL_VCO_Mode_75_150MHz_Bits; - devpriv->clock_and_fout2 |= - MSeries_Timebase1_Select_Bit | MSeries_Timebase3_Select_Bit; - devpriv->clock_and_fout2 &= ~MSeries_PLL_In_Source_Select_Mask; - switch (source) { - case NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK: - devpriv->clock_and_fout2 |= - MSeries_PLL_In_Source_Select_Star_Trigger_Bits; - retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, - &freq_multiplier, - &devpriv->clock_ns); - if (retval < 0) - return retval; - break; - case NI_MIO_PLL_PXI10_CLOCK: - /* pxi clock is 10MHz */ - devpriv->clock_and_fout2 |= - MSeries_PLL_In_Source_Select_PXI_Clock10; - retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, - &freq_multiplier, - &devpriv->clock_ns); - if (retval < 0) - return retval; - break; - default: - { - unsigned rtsi_channel; - static const unsigned max_rtsi_channel = 7; - for (rtsi_channel = 0; rtsi_channel <= max_rtsi_channel; - ++rtsi_channel) { - if (source == - NI_MIO_PLL_RTSI_CLOCK(rtsi_channel)) { - devpriv->clock_and_fout2 |= - MSeries_PLL_In_Source_Select_RTSI_Bits - (rtsi_channel); - break; - } - } - if (rtsi_channel > max_rtsi_channel) - return -EINVAL; - retval = ni_mseries_get_pll_parameters(period_ns, - &freq_divider, - &freq_multiplier, - &devpriv-> - clock_ns); - if (retval < 0) - return retval; - } - break; - } - ni_writew(devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); - pll_control_bits |= - MSeries_PLL_Divisor_Bits(freq_divider) | - MSeries_PLL_Multiplier_Bits(freq_multiplier); - - /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", - * freq_divider, freq_multiplier, pll_control_bits); */ - /* printk("clock_ns=%d\n", devpriv->clock_ns); */ - ni_writew(pll_control_bits, M_Offset_PLL_Control); - devpriv->clock_source = source; - /* it seems to typically take a few hundred microseconds for PLL to lock */ - for (i = 0; i < timeout; ++i) { - if (ni_readw(M_Offset_PLL_Status) & MSeries_PLL_Locked_Bit) - break; - udelay(1); - } - if (i == timeout) { - printk - ("%s: timed out waiting for PLL to lock to reference clock source %i with period %i ns.\n", - __func__, source, period_ns); - return -ETIMEDOUT; - } - return 3; -} - -static int ni_set_master_clock(struct comedi_device *dev, unsigned source, - unsigned period_ns) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - - if (source == NI_MIO_INTERNAL_CLOCK) { - devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); - devpriv->clock_ns = TIMEBASE_1_NS; - if (board->reg_type & ni_reg_m_series_mask) { - devpriv->clock_and_fout2 &= - ~(MSeries_Timebase1_Select_Bit | - MSeries_Timebase3_Select_Bit); - ni_writew(devpriv->clock_and_fout2, - M_Offset_Clock_and_Fout2); - ni_writew(0, M_Offset_PLL_Control); - } - devpriv->clock_source = source; - } else { - if (board->reg_type & ni_reg_m_series_mask) { - return ni_mseries_set_pll_master_clock(dev, source, - period_ns); - } else { - if (source == NI_MIO_RTSI_CLOCK) { - devpriv->rtsi_trig_direction_reg |= - Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, - devpriv-> - rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); - if (period_ns == 0) { - printk - ("%s: we don't handle an unspecified clock period correctly yet, returning error.\n", - __func__); - return -EINVAL; - } else { - devpriv->clock_ns = period_ns; - } - devpriv->clock_source = source; - } else - return -EINVAL; - } - } - return 3; -} -- cgit From 2ffb247691f6e0ecb299ca526d54b868b5338fa0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:47 -0700 Subject: staging: comedi: ni_mio_common: remove forward declaration 24 Move some functions to remove the need for the remaining forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 513 ++++++++++++------------- 1 file changed, 253 insertions(+), 260 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index c174eac47f7e..93bc362e8329 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -194,13 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { [ai_gain_6143] = &range_bipolar5 }; -#ifndef PCIDMA -static void ni_handle_fifo_half_full(struct comedi_device *dev); -static int ni_ao_fifo_half_empty(struct comedi_device *dev, - struct comedi_subdevice *s); -#endif -static void ni_handle_fifo_dregs(struct comedi_device *dev); - enum aimodes { AIMODE_NONE = 0, AIMODE_HALF_FULL = 1, @@ -771,6 +764,259 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) } #endif /* PCIDMA */ +#ifndef PCIDMA + +static void ni_ao_fifo_load(struct comedi_device *dev, + struct comedi_subdevice *s, int n) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct comedi_async *async = s->async; + struct comedi_cmd *cmd = &async->cmd; + int chan; + int i; + unsigned short d; + u32 packed_data; + int range; + int err = 1; + + chan = async->cur_chan; + for (i = 0; i < n; i++) { + err &= comedi_buf_get(s, &d); + if (err == 0) + break; + + range = CR_RANGE(cmd->chanlist[chan]); + + if (board->reg_type & ni_reg_6xxx_mask) { + packed_data = d & 0xffff; + /* 6711 only has 16 bit wide ao fifo */ + if (board->reg_type != ni_reg_6711) { + err &= comedi_buf_get(s, &d); + if (err == 0) + break; + chan++; + i++; + packed_data |= (d << 16) & 0xffff0000; + } + ni_writel(packed_data, DAC_FIFO_Data_611x); + } else { + ni_writew(d, DAC_FIFO_Data); + } + chan++; + chan %= cmd->chanlist_len; + } + async->cur_chan = chan; + if (err == 0) + async->events |= COMEDI_CB_OVERFLOW; +} + +/* + * There's a small problem if the FIFO gets really low and we + * don't have the data to fill it. Basically, if after we fill + * the FIFO with all the data available, the FIFO is _still_ + * less than half full, we never clear the interrupt. If the + * IRQ is in edge mode, we never get another interrupt, because + * this one wasn't cleared. If in level mode, we get flooded + * with interrupts that we can't fulfill, because nothing ever + * gets put into the buffer. + * + * This kind of situation is recoverable, but it is easier to + * just pretend we had a FIFO underrun, since there is a good + * chance it will happen anyway. This is _not_ the case for + * RT code, as RT code might purposely be running close to the + * metal. Needs to be fixed eventually. + */ +static int ni_ao_fifo_half_empty(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + const struct ni_board_struct *board = comedi_board(dev); + int n; + + n = comedi_buf_read_n_available(s); + if (n == 0) { + s->async->events |= COMEDI_CB_OVERFLOW; + return 0; + } + + n /= sizeof(short); + if (n > board->ao_fifo_depth / 2) + n = board->ao_fifo_depth / 2; + + ni_ao_fifo_load(dev, s, n); + + s->async->events |= COMEDI_CB_BLOCK; + + return 1; +} + +static int ni_ao_prep_fifo(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + int n; + + /* reset fifo */ + devpriv->stc_writew(dev, 1, DAC_FIFO_Clear); + if (board->reg_type & ni_reg_6xxx_mask) + ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); + + /* load some data */ + n = comedi_buf_read_n_available(s); + if (n == 0) + return 0; + + n /= sizeof(short); + if (n > board->ao_fifo_depth) + n = board->ao_fifo_depth; + + ni_ao_fifo_load(dev, s, n); + + return n; +} + +static void ni_ai_fifo_read(struct comedi_device *dev, + struct comedi_subdevice *s, int n) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + struct comedi_async *async = s->async; + int i; + + if (board->reg_type == ni_reg_611x) { + unsigned short data[2]; + u32 dl; + + for (i = 0; i < n / 2; i++) { + dl = ni_readl(ADC_FIFO_Data_611x); + /* This may get the hi/lo data in the wrong order */ + data[0] = (dl >> 16) & 0xffff; + data[1] = dl & 0xffff; + cfc_write_array_to_buffer(s, data, sizeof(data)); + } + /* Check if there's a single sample stuck in the FIFO */ + if (n % 2) { + dl = ni_readl(ADC_FIFO_Data_611x); + data[0] = dl & 0xffff; + cfc_write_to_buffer(s, data[0]); + } + } else if (board->reg_type == ni_reg_6143) { + unsigned short data[2]; + u32 dl; + + /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ + for (i = 0; i < n / 2; i++) { + dl = ni_readl(AIFIFO_Data_6143); + + data[0] = (dl >> 16) & 0xffff; + data[1] = dl & 0xffff; + cfc_write_array_to_buffer(s, data, sizeof(data)); + } + if (n % 2) { + /* Assume there is a single sample stuck in the FIFO */ + ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ + dl = ni_readl(AIFIFO_Data_6143); + data[0] = (dl >> 16) & 0xffff; + cfc_write_to_buffer(s, data[0]); + } + } else { + if (n > sizeof(devpriv->ai_fifo_buffer) / + sizeof(devpriv->ai_fifo_buffer[0])) { + comedi_error(dev, "bug! ai_fifo_buffer too small"); + async->events |= COMEDI_CB_ERROR; + return; + } + for (i = 0; i < n; i++) { + devpriv->ai_fifo_buffer[i] = + ni_readw(ADC_FIFO_Data_Register); + } + cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, + n * + sizeof(devpriv->ai_fifo_buffer[0])); + } +} + +static void ni_handle_fifo_half_full(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + int n; + + n = board->ai_fifo_depth / 2; + + ni_ai_fifo_read(dev, s, n); +} +#endif + +/* + Empties the AI fifo +*/ +static void ni_handle_fifo_dregs(struct comedi_device *dev) +{ + const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; + struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + unsigned short data[2]; + u32 dl; + unsigned short fifo_empty; + int i; + + if (board->reg_type == ni_reg_611x) { + while ((devpriv->stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St) == 0) { + dl = ni_readl(ADC_FIFO_Data_611x); + + /* This may get the hi/lo data in the wrong order */ + data[0] = (dl >> 16); + data[1] = (dl & 0xffff); + cfc_write_array_to_buffer(s, data, sizeof(data)); + } + } else if (board->reg_type == ni_reg_6143) { + i = 0; + while (ni_readl(AIFIFO_Status_6143) & 0x04) { + dl = ni_readl(AIFIFO_Data_6143); + + /* This may get the hi/lo data in the wrong order */ + data[0] = (dl >> 16); + data[1] = (dl & 0xffff); + cfc_write_array_to_buffer(s, data, sizeof(data)); + i += 2; + } + /* Check if stranded sample is present */ + if (ni_readl(AIFIFO_Status_6143) & 0x01) { + ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ + dl = ni_readl(AIFIFO_Data_6143); + data[0] = (dl >> 16) & 0xffff; + cfc_write_to_buffer(s, data[0]); + } + + } else { + fifo_empty = + devpriv->stc_readw(dev, + AI_Status_1_Register) & AI_FIFO_Empty_St; + while (fifo_empty == 0) { + for (i = 0; + i < + sizeof(devpriv->ai_fifo_buffer) / + sizeof(devpriv->ai_fifo_buffer[0]); i++) { + fifo_empty = + devpriv->stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St; + if (fifo_empty) + break; + devpriv->ai_fifo_buffer[i] = + ni_readw(ADC_FIFO_Data_Register); + } + cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, + i * + sizeof(devpriv-> + ai_fifo_buffer[0])); + } + } +} + static void get_last_sample_611x(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -1040,259 +1286,6 @@ static void handle_b_interrupt(struct comedi_device *dev, cfc_handle_events(dev, s); } -#ifndef PCIDMA - -static void ni_ao_fifo_load(struct comedi_device *dev, - struct comedi_subdevice *s, int n) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct comedi_async *async = s->async; - struct comedi_cmd *cmd = &async->cmd; - int chan; - int i; - unsigned short d; - u32 packed_data; - int range; - int err = 1; - - chan = async->cur_chan; - for (i = 0; i < n; i++) { - err &= comedi_buf_get(s, &d); - if (err == 0) - break; - - range = CR_RANGE(cmd->chanlist[chan]); - - if (board->reg_type & ni_reg_6xxx_mask) { - packed_data = d & 0xffff; - /* 6711 only has 16 bit wide ao fifo */ - if (board->reg_type != ni_reg_6711) { - err &= comedi_buf_get(s, &d); - if (err == 0) - break; - chan++; - i++; - packed_data |= (d << 16) & 0xffff0000; - } - ni_writel(packed_data, DAC_FIFO_Data_611x); - } else { - ni_writew(d, DAC_FIFO_Data); - } - chan++; - chan %= cmd->chanlist_len; - } - async->cur_chan = chan; - if (err == 0) - async->events |= COMEDI_CB_OVERFLOW; -} - -/* - * There's a small problem if the FIFO gets really low and we - * don't have the data to fill it. Basically, if after we fill - * the FIFO with all the data available, the FIFO is _still_ - * less than half full, we never clear the interrupt. If the - * IRQ is in edge mode, we never get another interrupt, because - * this one wasn't cleared. If in level mode, we get flooded - * with interrupts that we can't fulfill, because nothing ever - * gets put into the buffer. - * - * This kind of situation is recoverable, but it is easier to - * just pretend we had a FIFO underrun, since there is a good - * chance it will happen anyway. This is _not_ the case for - * RT code, as RT code might purposely be running close to the - * metal. Needs to be fixed eventually. - */ -static int ni_ao_fifo_half_empty(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - const struct ni_board_struct *board = comedi_board(dev); - int n; - - n = comedi_buf_read_n_available(s); - if (n == 0) { - s->async->events |= COMEDI_CB_OVERFLOW; - return 0; - } - - n /= sizeof(short); - if (n > board->ao_fifo_depth / 2) - n = board->ao_fifo_depth / 2; - - ni_ao_fifo_load(dev, s, n); - - s->async->events |= COMEDI_CB_BLOCK; - - return 1; -} - -static int ni_ao_prep_fifo(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - int n; - - /* reset fifo */ - devpriv->stc_writew(dev, 1, DAC_FIFO_Clear); - if (board->reg_type & ni_reg_6xxx_mask) - ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); - - /* load some data */ - n = comedi_buf_read_n_available(s); - if (n == 0) - return 0; - - n /= sizeof(short); - if (n > board->ao_fifo_depth) - n = board->ao_fifo_depth; - - ni_ao_fifo_load(dev, s, n); - - return n; -} - -static void ni_ai_fifo_read(struct comedi_device *dev, - struct comedi_subdevice *s, int n) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - struct comedi_async *async = s->async; - int i; - - if (board->reg_type == ni_reg_611x) { - unsigned short data[2]; - u32 dl; - - for (i = 0; i < n / 2; i++) { - dl = ni_readl(ADC_FIFO_Data_611x); - /* This may get the hi/lo data in the wrong order */ - data[0] = (dl >> 16) & 0xffff; - data[1] = dl & 0xffff; - cfc_write_array_to_buffer(s, data, sizeof(data)); - } - /* Check if there's a single sample stuck in the FIFO */ - if (n % 2) { - dl = ni_readl(ADC_FIFO_Data_611x); - data[0] = dl & 0xffff; - cfc_write_to_buffer(s, data[0]); - } - } else if (board->reg_type == ni_reg_6143) { - unsigned short data[2]; - u32 dl; - - /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ - for (i = 0; i < n / 2; i++) { - dl = ni_readl(AIFIFO_Data_6143); - - data[0] = (dl >> 16) & 0xffff; - data[1] = dl & 0xffff; - cfc_write_array_to_buffer(s, data, sizeof(data)); - } - if (n % 2) { - /* Assume there is a single sample stuck in the FIFO */ - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); - data[0] = (dl >> 16) & 0xffff; - cfc_write_to_buffer(s, data[0]); - } - } else { - if (n > sizeof(devpriv->ai_fifo_buffer) / - sizeof(devpriv->ai_fifo_buffer[0])) { - comedi_error(dev, "bug! ai_fifo_buffer too small"); - async->events |= COMEDI_CB_ERROR; - return; - } - for (i = 0; i < n; i++) { - devpriv->ai_fifo_buffer[i] = - ni_readw(ADC_FIFO_Data_Register); - } - cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, - n * - sizeof(devpriv->ai_fifo_buffer[0])); - } -} - -static void ni_handle_fifo_half_full(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; - int n; - - n = board->ai_fifo_depth / 2; - - ni_ai_fifo_read(dev, s, n); -} -#endif - -/* - Empties the AI fifo -*/ -static void ni_handle_fifo_dregs(struct comedi_device *dev) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; - unsigned short data[2]; - u32 dl; - unsigned short fifo_empty; - int i; - - if (board->reg_type == ni_reg_611x) { - while ((devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St) == 0) { - dl = ni_readl(ADC_FIFO_Data_611x); - - /* This may get the hi/lo data in the wrong order */ - data[0] = (dl >> 16); - data[1] = (dl & 0xffff); - cfc_write_array_to_buffer(s, data, sizeof(data)); - } - } else if (board->reg_type == ni_reg_6143) { - i = 0; - while (ni_readl(AIFIFO_Status_6143) & 0x04) { - dl = ni_readl(AIFIFO_Data_6143); - - /* This may get the hi/lo data in the wrong order */ - data[0] = (dl >> 16); - data[1] = (dl & 0xffff); - cfc_write_array_to_buffer(s, data, sizeof(data)); - i += 2; - } - /* Check if stranded sample is present */ - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); - data[0] = (dl >> 16) & 0xffff; - cfc_write_to_buffer(s, data[0]); - } - - } else { - fifo_empty = - devpriv->stc_readw(dev, - AI_Status_1_Register) & AI_FIFO_Empty_St; - while (fifo_empty == 0) { - for (i = 0; - i < - sizeof(devpriv->ai_fifo_buffer) / - sizeof(devpriv->ai_fifo_buffer[0]); i++) { - fifo_empty = - devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St; - if (fifo_empty) - break; - devpriv->ai_fifo_buffer[i] = - ni_readw(ADC_FIFO_Data_Register); - } - cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, - i * - sizeof(devpriv-> - ai_fifo_buffer[0])); - } - } -} - static void ni_ai_munge(struct comedi_device *dev, struct comedi_subdevice *s, void *data, unsigned int num_bytes, unsigned int chan_index) -- cgit From 849590f75945903f4330f4533f3a76688af3eb71 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:48 -0700 Subject: staging: comedi: ni_mio_common: move disabled GPCT functions I have not determined if the code in these functions is actually usable. For now just move the disabled code closer to the working gpct functions. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 177 ++++++++++++------------- 1 file changed, 88 insertions(+), 89 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 93bc362e8329..556e88573de7 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5120,6 +5120,94 @@ static int ni_gpct_cancel(struct comedi_device *dev, struct comedi_subdevice *s) } #endif +#if 0 +/* + * Read the GPCTs current value. + */ +static int GPCT_G_Watch(struct comedi_device *dev, int chan) +{ + unsigned int hi1, hi2, lo; + + devpriv->gpct_command[chan] &= ~G_Save_Trace; + devpriv->stc_writew(dev, devpriv->gpct_command[chan], + G_Command_Register(chan)); + + devpriv->gpct_command[chan] |= G_Save_Trace; + devpriv->stc_writew(dev, devpriv->gpct_command[chan], + G_Command_Register(chan)); + + /* This procedure is used because the two registers cannot + * be read atomically. */ + do { + hi1 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); + lo = devpriv->stc_readw(dev, G_Save_Register_Low(chan)); + hi2 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); + } while (hi1 != hi2); + + return (hi1 << 16) | lo; +} + +static void GPCT_Reset(struct comedi_device *dev, int chan) +{ + int temp_ack_reg = 0; + + /* printk("GPCT_Reset..."); */ + devpriv->gpct_cur_operation[chan] = GPCT_RESET; + + switch (chan) { + case 0: + devpriv->stc_writew(dev, G0_Reset, Joint_Reset_Register); + ni_set_bits(dev, Interrupt_A_Enable_Register, + G0_TC_Interrupt_Enable, 0); + ni_set_bits(dev, Interrupt_A_Enable_Register, + G0_Gate_Interrupt_Enable, 0); + temp_ack_reg |= G0_Gate_Error_Confirm; + temp_ack_reg |= G0_TC_Error_Confirm; + temp_ack_reg |= G0_TC_Interrupt_Ack; + temp_ack_reg |= G0_Gate_Interrupt_Ack; + devpriv->stc_writew(dev, temp_ack_reg, + Interrupt_A_Ack_Register); + + /* problem...this interferes with the other ctr... */ + devpriv->an_trig_etc_reg |= GPFO_0_Output_Enable; + devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, + Analog_Trigger_Etc_Register); + break; + case 1: + devpriv->stc_writew(dev, G1_Reset, Joint_Reset_Register); + ni_set_bits(dev, Interrupt_B_Enable_Register, + G1_TC_Interrupt_Enable, 0); + ni_set_bits(dev, Interrupt_B_Enable_Register, + G0_Gate_Interrupt_Enable, 0); + temp_ack_reg |= G1_Gate_Error_Confirm; + temp_ack_reg |= G1_TC_Error_Confirm; + temp_ack_reg |= G1_TC_Interrupt_Ack; + temp_ack_reg |= G1_Gate_Interrupt_Ack; + devpriv->stc_writew(dev, temp_ack_reg, + Interrupt_B_Ack_Register); + + devpriv->an_trig_etc_reg |= GPFO_1_Output_Enable; + devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, + Analog_Trigger_Etc_Register); + break; + } + + devpriv->gpct_mode[chan] = 0; + devpriv->gpct_input_select[chan] = 0; + devpriv->gpct_command[chan] = 0; + + devpriv->gpct_command[chan] |= G_Synchronized_Gate; + + devpriv->stc_writew(dev, devpriv->gpct_mode[chan], + G_Mode_Register(chan)); + devpriv->stc_writew(dev, devpriv->gpct_input_select[chan], + G_Input_Select_Register(chan)); + devpriv->stc_writew(dev, 0, G_Autoincrement_Register(chan)); + + /* printk("exit GPCT_Reset\n"); */ +} +#endif + static irqreturn_t ni_E_interrupt(int irq, void *d) { struct comedi_device *dev = d; @@ -5508,92 +5596,3 @@ static int ni_E_init(struct comedi_device *dev) return 0; } - -#if 0 -/* - * Read the GPCTs current value. - */ -static int GPCT_G_Watch(struct comedi_device *dev, int chan) -{ - unsigned int hi1, hi2, lo; - - devpriv->gpct_command[chan] &= ~G_Save_Trace; - devpriv->stc_writew(dev, devpriv->gpct_command[chan], - G_Command_Register(chan)); - - devpriv->gpct_command[chan] |= G_Save_Trace; - devpriv->stc_writew(dev, devpriv->gpct_command[chan], - G_Command_Register(chan)); - - /* This procedure is used because the two registers cannot - * be read atomically. */ - do { - hi1 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); - lo = devpriv->stc_readw(dev, G_Save_Register_Low(chan)); - hi2 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); - } while (hi1 != hi2); - - return (hi1 << 16) | lo; -} - -static void GPCT_Reset(struct comedi_device *dev, int chan) -{ - int temp_ack_reg = 0; - - /* printk("GPCT_Reset..."); */ - devpriv->gpct_cur_operation[chan] = GPCT_RESET; - - switch (chan) { - case 0: - devpriv->stc_writew(dev, G0_Reset, Joint_Reset_Register); - ni_set_bits(dev, Interrupt_A_Enable_Register, - G0_TC_Interrupt_Enable, 0); - ni_set_bits(dev, Interrupt_A_Enable_Register, - G0_Gate_Interrupt_Enable, 0); - temp_ack_reg |= G0_Gate_Error_Confirm; - temp_ack_reg |= G0_TC_Error_Confirm; - temp_ack_reg |= G0_TC_Interrupt_Ack; - temp_ack_reg |= G0_Gate_Interrupt_Ack; - devpriv->stc_writew(dev, temp_ack_reg, - Interrupt_A_Ack_Register); - - /* problem...this interferes with the other ctr... */ - devpriv->an_trig_etc_reg |= GPFO_0_Output_Enable; - devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, - Analog_Trigger_Etc_Register); - break; - case 1: - devpriv->stc_writew(dev, G1_Reset, Joint_Reset_Register); - ni_set_bits(dev, Interrupt_B_Enable_Register, - G1_TC_Interrupt_Enable, 0); - ni_set_bits(dev, Interrupt_B_Enable_Register, - G0_Gate_Interrupt_Enable, 0); - temp_ack_reg |= G1_Gate_Error_Confirm; - temp_ack_reg |= G1_TC_Error_Confirm; - temp_ack_reg |= G1_TC_Interrupt_Ack; - temp_ack_reg |= G1_Gate_Interrupt_Ack; - devpriv->stc_writew(dev, temp_ack_reg, - Interrupt_B_Ack_Register); - - devpriv->an_trig_etc_reg |= GPFO_1_Output_Enable; - devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, - Analog_Trigger_Etc_Register); - break; - } - - devpriv->gpct_mode[chan] = 0; - devpriv->gpct_input_select[chan] = 0; - devpriv->gpct_command[chan] = 0; - - devpriv->gpct_command[chan] |= G_Synchronized_Gate; - - devpriv->stc_writew(dev, devpriv->gpct_mode[chan], - G_Mode_Register(chan)); - devpriv->stc_writew(dev, devpriv->gpct_input_select[chan], - G_Input_Select_Register(chan)); - devpriv->stc_writew(dev, 0, G_Autoincrement_Register(chan)); - - /* printk("exit GPCT_Reset\n"); */ -} - -#endif -- cgit From 2832b1831cac1ed64e7d106b85972e57516c21b2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:49 -0700 Subject: staging: comedi: ni_mio_common: move externally called functions to EOF This source file is included by the ni_atmio, ni_mio_cs, and ni_pcmio drivers to support the common hardware on National Instruments DAQ-STC based boards. The only functions actually used by the external source files are ni_E_interrupt(), ni_alloc_private(), ni_E_init(), and mio_common_detach(). The rest of the functions in this file are only used locally. For aesthetics, move all the externally called functions to the end of the file. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 50 +++++++++++++------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 556e88573de7..8b2178af858c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3673,16 +3673,6 @@ static int ni_serial_insn_config(struct comedi_device *dev, } -static void mio_common_detach(struct comedi_device *dev) -{ - struct ni_private *devpriv = dev->private; - - if (devpriv) { - if (devpriv->counter_dev) - ni_gpct_device_destroy(devpriv->counter_dev); - } -} - static void init_ao_67xx(struct comedi_device *dev, struct comedi_subdevice *s) { int i; @@ -3965,21 +3955,6 @@ static int ni_freq_out_insn_config(struct comedi_device *dev, return -EINVAL; } -static int ni_alloc_private(struct comedi_device *dev) -{ - struct ni_private *devpriv; - - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - - spin_lock_init(&devpriv->window_lock); - spin_lock_init(&devpriv->soft_reg_copy_lock); - spin_lock_init(&devpriv->mite_channel_lock); - - return 0; -}; - static int ni_8255_callback(int dir, int port, int data, unsigned long arg) { struct comedi_device *dev = (struct comedi_device *)arg; @@ -5267,6 +5242,21 @@ static irqreturn_t ni_E_interrupt(int irq, void *d) return IRQ_HANDLED; } +static int ni_alloc_private(struct comedi_device *dev) +{ + struct ni_private *devpriv; + + devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); + if (!devpriv) + return -ENOMEM; + + spin_lock_init(&devpriv->window_lock); + spin_lock_init(&devpriv->soft_reg_copy_lock); + spin_lock_init(&devpriv->mite_channel_lock); + + return 0; +} + static int ni_E_init(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); @@ -5596,3 +5586,13 @@ static int ni_E_init(struct comedi_device *dev) return 0; } + +static void mio_common_detach(struct comedi_device *dev) +{ + struct ni_private *devpriv = dev->private; + + if (devpriv) { + if (devpriv->counter_dev) + ni_gpct_device_destroy(devpriv->counter_dev); + } +} -- cgit From 5dce16e51aaf6e948d982a310f0338a1b395b6ca Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:50 -0700 Subject: staging: comedi: ni_mio_common: use dev->read_subdev The (*attach) in ni_E_init() sets the dev->read_subdev to the analog input subdevice. Use that instead of accessing the dev->subdevices array directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 8b2178af858c..7083af267e2d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -684,7 +684,7 @@ static inline void ni_set_bits(struct comedi_device *dev, int reg, static void ni_sync_ai_dma(struct comedi_device *dev) { struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; unsigned long flags; spin_lock_irqsave(&devpriv->mite_channel_lock, flags); @@ -939,7 +939,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, static void ni_handle_fifo_half_full(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; int n; n = board->ai_fifo_depth / 2; @@ -955,7 +955,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; unsigned short data[2]; u32 dl; unsigned short fifo_empty; @@ -1021,7 +1021,7 @@ static void get_last_sample_611x(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv __maybe_unused = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1040,7 +1040,7 @@ static void get_last_sample_6143(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv __maybe_unused = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1060,7 +1060,7 @@ static void get_last_sample_6143(struct comedi_device *dev) static void shutdown_ai_command(struct comedi_device *dev) { - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; #ifdef PCIDMA ni_ai_drain_dma(dev); @@ -1134,7 +1134,7 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, unsigned ai_mite_status) { struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; /* 67xx boards don't have ai subdevice, but their gpct0 might generate an a interrupt */ if (s->type == COMEDI_SUBD_UNUSED) @@ -1320,7 +1320,7 @@ static int ni_ai_setup_MITE_dma(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV]; + struct comedi_subdevice *s = dev->read_subdev; int retval; unsigned long flags; -- cgit From e879c315c3050a1b422291e5a7509dc24ec2c7d1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:51 -0700 Subject: staging: comedi: ni_mio_common: use dev->write_subdev The (*attach) in ni_E_init() sets the dev->write_subdev to the analog output subdevice. Use that instead of accessing the dev->subdevices array directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 7083af267e2d..0bffc56b73cc 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -732,7 +732,7 @@ static void mite_handle_b_linkc(struct mite_struct *mite, struct comedi_device *dev) { struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AO_SUBDEV]; + struct comedi_subdevice *s = dev->write_subdev; unsigned long flags; spin_lock_irqsave(&devpriv->mite_channel_lock, flags); @@ -1238,7 +1238,7 @@ static void handle_b_interrupt(struct comedi_device *dev, unsigned short b_status, unsigned ao_mite_status) { struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AO_SUBDEV]; + struct comedi_subdevice *s = dev->write_subdev; /* unsigned short ack=0; */ #ifdef PCIDMA @@ -1361,7 +1361,7 @@ static int ni_ao_setup_MITE_dma(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s = &dev->subdevices[NI_AO_SUBDEV]; + struct comedi_subdevice *s = dev->write_subdev; int retval; unsigned long flags; -- cgit From e63dabd00ba02921933a2f7bd46f72874d07dc01 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:52 -0700 Subject: staging: comedi: ni_mio_common: absorb helpers into ni_freq_out_insn_config() Absorb the helper functions that handle the INSN_CONFIG_SET_CLOCK_SRC and INSN_CONFIG_GET_CLOCK_SRC comedi instructions. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 67 ++++++++++---------------- 1 file changed, 26 insertions(+), 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 0bffc56b73cc..6536d68eb716 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3903,56 +3903,41 @@ static int ni_freq_out_insn_write(struct comedi_device *dev, return insn->n; } -static int ni_set_freq_out_clock(struct comedi_device *dev, - unsigned int clock_source) -{ - struct ni_private *devpriv = dev->private; - - switch (clock_source) { - case NI_FREQ_OUT_TIMEBASE_1_DIV_2_CLOCK_SRC: - devpriv->clock_and_fout &= ~FOUT_Timebase_Select; - break; - case NI_FREQ_OUT_TIMEBASE_2_CLOCK_SRC: - devpriv->clock_and_fout |= FOUT_Timebase_Select; - break; - default: - return -EINVAL; - } - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); - return 3; -} - -static void ni_get_freq_out_clock(struct comedi_device *dev, - unsigned int *clock_source, - unsigned int *clock_period_ns) -{ - struct ni_private *devpriv = dev->private; - - if (devpriv->clock_and_fout & FOUT_Timebase_Select) { - *clock_source = NI_FREQ_OUT_TIMEBASE_2_CLOCK_SRC; - *clock_period_ns = TIMEBASE_2_NS; - } else { - *clock_source = NI_FREQ_OUT_TIMEBASE_1_DIV_2_CLOCK_SRC; - *clock_period_ns = TIMEBASE_1_NS * 2; - } -} - static int ni_freq_out_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { + struct ni_private *devpriv = dev->private; + switch (data[0]) { case INSN_CONFIG_SET_CLOCK_SRC: - return ni_set_freq_out_clock(dev, data[1]); + switch (data[1]) { + case NI_FREQ_OUT_TIMEBASE_1_DIV_2_CLOCK_SRC: + devpriv->clock_and_fout &= ~FOUT_Timebase_Select; + break; + case NI_FREQ_OUT_TIMEBASE_2_CLOCK_SRC: + devpriv->clock_and_fout |= FOUT_Timebase_Select; + break; + default: + return -EINVAL; + } + devpriv->stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); break; case INSN_CONFIG_GET_CLOCK_SRC: - ni_get_freq_out_clock(dev, &data[1], &data[2]); - return 3; - default: + if (devpriv->clock_and_fout & FOUT_Timebase_Select) { + data[1] = NI_FREQ_OUT_TIMEBASE_2_CLOCK_SRC; + data[2] = TIMEBASE_2_NS; + } else { + data[1] = NI_FREQ_OUT_TIMEBASE_1_DIV_2_CLOCK_SRC; + data[2] = TIMEBASE_1_NS * 2; + } break; + default: + return -EINVAL; } - return -EINVAL; + return insn->n; } static int ni_8255_callback(int dir, int port, int data, unsigned long arg) -- cgit From 00a92c03be9ff392383e18ba222d480fc34d568c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:53 -0700 Subject: staging: comedi: ni_mio_common: fix the (*insn_write) for the freq_out counter The (*insn_write) functions are supposed to write insn->n data values and return the number of values written. For this subdevice it only makes sense to write the last data value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 6536d68eb716..69be8eaff7ac 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3888,18 +3888,24 @@ static int ni_freq_out_insn_read(struct comedi_device *dev, static int ni_freq_out_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct ni_private *devpriv = dev->private; - devpriv->clock_and_fout &= ~FOUT_Enable; - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); - devpriv->clock_and_fout &= ~FOUT_Divider_mask; - devpriv->clock_and_fout |= FOUT_Divider(data[0]); - devpriv->clock_and_fout |= FOUT_Enable; - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + if (insn->n) { + devpriv->clock_and_fout &= ~FOUT_Enable; + devpriv->stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); + devpriv->clock_and_fout &= ~FOUT_Divider_mask; + + /* use the last data value to set the fout divider */ + devpriv->clock_and_fout |= FOUT_Divider(data[insn->n - 1]); + + devpriv->clock_and_fout |= FOUT_Enable; + devpriv->stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); + } return insn->n; } -- cgit From d9c4261f6a35bf9067ba0fdaf8ed4775ee0c5cea Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:26:54 -0700 Subject: staging: comedi: ni_mio_common: fix the (*insn_read) for the freq_out counter The (*insn_read) functions are supposed to "read" insn->n data values and return the number of values read. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 69be8eaff7ac..68cd92bf17c6 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3878,12 +3878,17 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, static int ni_freq_out_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct ni_private *devpriv = dev->private; + unsigned int val = devpriv->clock_and_fout & FOUT_Divider_mask; + int i; - data[0] = devpriv->clock_and_fout & FOUT_Divider_mask; - return 1; + for (i = 0; i < insn->n; i++) + data[i] = val; + + return insn->n; } static int ni_freq_out_insn_write(struct comedi_device *dev, -- cgit From f93b399b137062b9108b2bd4cbc5f849d983c19f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:47 -0700 Subject: staging: comedi: adq12b: fix ctreg (ai channel/range) programming This driver only updates the ctreg (ai channel/range) register if the desired channel or range has changed since the last analog input read operation. It does this becuase the hardware requires an udelay to allow the multiplexor to settle. Unfortunatly the current code never updates the 'last_channel' and 'last_range' in the private data so the ctreg gets updated every time. Fix this and simplify it a bit by just storing the last ctreg value in the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index b4ea37704eaf..e5b236d5f78a 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -116,8 +116,7 @@ static const struct comedi_lrange range_adq12b_ai_unipolar = { struct adq12b_private { int unipolar; /* option 2 of comedi_config (1 is iobase) */ int differential; /* option 3 of comedi_config */ - int last_channel; - int last_range; + unsigned int last_ctreg; }; static int adq12b_ai_eoc(struct comedi_device *dev, @@ -134,20 +133,23 @@ static int adq12b_ai_eoc(struct comedi_device *dev, } static int adq12b_ai_rinsn(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, + struct comedi_subdevice *s, + struct comedi_insn *insn, unsigned int *data) { struct adq12b_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int range = CR_RANGE(insn->chanspec); + unsigned int val; int n; - int range, channel; unsigned char hi, lo, status; int ret; /* change channel and range only if it is different from the previous */ - range = CR_RANGE(insn->chanspec); - channel = CR_CHAN(insn->chanspec); - if (channel != devpriv->last_channel || range != devpriv->last_range) { - outb((range << 4) | channel, dev->iobase + ADQ12B_CTREG); + val = (range << 4) | chan; + if (val != devpriv->last_ctreg) { + outb(val, dev->iobase + ADQ12B_CTREG); + devpriv->last_ctreg = val; udelay(50); /* wait for the mux to settle */ } @@ -226,12 +228,7 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) devpriv->unipolar = it->options[1]; devpriv->differential = it->options[2]; - /* - * initialize channel and range to -1 so we make sure we - * always write at least once to the CTREG in the instruction - */ - devpriv->last_channel = -1; - devpriv->last_range = -1; + devpriv->last_ctreg = -1; /* force ctreg update */ ret = comedi_alloc_subdevices(dev, 3); if (ret) -- cgit From d8dc10bf6888b586e284bca3e9f1a9da40590874 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:48 -0700 Subject: staging: comedi: adq12b: tidy up adq12b_ai_rinsn() For aesthetics, rename this function. Clean up the local variables by reusing 'val' instead of using separate variables for the: 'status' - use once to trigger the first A/D conversion 'hi' and 'lo' - used to read the A/D conversion result For aesthetics, change the final return to insn->n and remove the comment. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index e5b236d5f78a..4a0bbd7b3f2d 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -132,18 +132,17 @@ static int adq12b_ai_eoc(struct comedi_device *dev, return -EBUSY; } -static int adq12b_ai_rinsn(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) +static int adq12b_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { struct adq12b_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int range = CR_RANGE(insn->chanspec); unsigned int val; - int n; - unsigned char hi, lo, status; int ret; + int i; /* change channel and range only if it is different from the previous */ val = (range << 4) | chan; @@ -153,27 +152,20 @@ static int adq12b_ai_rinsn(struct comedi_device *dev, udelay(50); /* wait for the mux to settle */ } - /* trigger conversion */ - status = inb(dev->iobase + ADQ12B_ADLOW); + val = inb(dev->iobase + ADQ12B_ADLOW); /* trigger A/D */ - /* convert n samples */ - for (n = 0; n < insn->n; n++) { - - /* wait for end of conversion */ + for (i = 0; i < insn->n; i++) { ret = comedi_timeout(dev, s, insn, adq12b_ai_eoc, 0); if (ret) return ret; - /* read data */ - hi = inb(dev->iobase + ADQ12B_ADHIG); - lo = inb(dev->iobase + ADQ12B_ADLOW); - - data[n] = (hi << 8) | lo; + val = inb(dev->iobase + ADQ12B_ADHIG) << 8; + val |= inb(dev->iobase + ADQ12B_ADLOW); /* retriggers A/D */ + data[i] = val; } - /* return the number of samples read/written */ - return n; + return insn->n; } static int adq12b_di_insn_bits(struct comedi_device *dev, @@ -254,7 +246,7 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->len_chanlist = 4; /* This is the maximum chanlist length that the board can handle */ - s->insn_read = adq12b_ai_rinsn; + s->insn_read = adq12b_ai_insn_read; s = &dev->subdevices[1]; /* digital input subdevice */ -- cgit From 16b4775006e29fa9873881aca1d7091f93f61349 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:49 -0700 Subject: staging: comedi: adq12b: remove 'unipolar' from private data This member of the private data is only used during the attach to determine which range table to use for the analog inputs. Remove the member and use the comedi_devconfig option directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index 4a0bbd7b3f2d..40e91d718d38 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -114,7 +114,6 @@ static const struct comedi_lrange range_adq12b_ai_unipolar = { }; struct adq12b_private { - int unipolar; /* option 2 of comedi_config (1 is iobase) */ int differential; /* option 3 of comedi_config */ unsigned int last_ctreg; }; @@ -218,7 +217,6 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!devpriv) return -ENOMEM; - devpriv->unipolar = it->options[1]; devpriv->differential = it->options[2]; devpriv->last_ctreg = -1; /* force ctreg update */ @@ -237,10 +235,8 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->n_chan = 16; } - if (devpriv->unipolar) - s->range_table = &range_adq12b_ai_unipolar; - else - s->range_table = &range_adq12b_ai_bipolar; + s->range_table = it->options[1] ? &range_adq12b_ai_unipolar + : &range_adq12b_ai_bipolar; s->maxdata = 0xfff; -- cgit From bc778ef526ed4daa027368cc5d8b8ad893b3af0c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:50 -0700 Subject: staging: comedi: adq12b: remove 'differential' from private data This member of the private data is only used during the attach to determine if there are 8 differential or 16 single-ended analog inputs. Remove the member and use the comedi_devconfig option directly. Also, fix the subdev_flags when differential analog inputs are used. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index 40e91d718d38..67003206e832 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -114,7 +114,6 @@ static const struct comedi_lrange range_adq12b_ai_unipolar = { }; struct adq12b_private { - int differential; /* option 3 of comedi_config */ unsigned int last_ctreg; }; @@ -217,7 +216,6 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!devpriv) return -ENOMEM; - devpriv->differential = it->options[2]; devpriv->last_ctreg = -1; /* force ctreg update */ ret = comedi_alloc_subdevices(dev, 3); @@ -227,8 +225,8 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) s = &dev->subdevices[0]; /* analog input subdevice */ s->type = COMEDI_SUBD_AI; - if (devpriv->differential) { - s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF; + if (it->options[2]) { + s->subdev_flags = SDF_READABLE | SDF_DIFF; s->n_chan = 8; } else { s->subdev_flags = SDF_READABLE | SDF_GROUND; -- cgit From 9fc4f9f531c6ace14108e70c45540376cbb63804 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:51 -0700 Subject: staging: comedi: adq12b: remove ADQ12B_SIZE define This define is only used in the comedi_request_region() call to specify the I/O resource size. Remove it and just open code the value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index 67003206e832..c5d752dd3ec5 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -79,8 +79,6 @@ If you do not specify any options, they will default to #include "../comedidev.h" /* address scheme (page 2.17 of the manual) */ -#define ADQ12B_SIZE 16 - #define ADQ12B_CTREG 0x00 #define ADQ12B_STINR 0x00 #define ADQ12B_OUTBR 0x04 @@ -208,7 +206,7 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], ADQ12B_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; -- cgit From 11c4e2db8ef149e36471f4bbb3c296b48533f28f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:52 -0700 Subject: staging: comedi: adq12b: remove 's->len_chanlist' init for analog inputs This driver does not support async commands so the len_chanlist init is unnecessary. Remove it and allow the core to default the value to '1'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index c5d752dd3ec5..10f34867d07e 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -235,9 +235,6 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) : &range_adq12b_ai_bipolar; s->maxdata = 0xfff; - - s->len_chanlist = 4; /* This is the maximum chanlist length that - the board can handle */ s->insn_read = adq12b_ai_insn_read; s = &dev->subdevices[1]; -- cgit From 521a0a6c44c1de93a18a2078d546aa0546983089 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:53 -0700 Subject: staging: comedi: adq12b: tidy up the subdevice init For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 52 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index 10f34867d07e..2e36aeea8fb6 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -220,40 +220,38 @@ static int adq12b_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; + /* Analog Input subdevice */ s = &dev->subdevices[0]; - /* analog input subdevice */ - s->type = COMEDI_SUBD_AI; + s->type = COMEDI_SUBD_AI; if (it->options[2]) { - s->subdev_flags = SDF_READABLE | SDF_DIFF; - s->n_chan = 8; + s->subdev_flags = SDF_READABLE | SDF_DIFF; + s->n_chan = 8; } else { - s->subdev_flags = SDF_READABLE | SDF_GROUND; - s->n_chan = 16; + s->subdev_flags = SDF_READABLE | SDF_GROUND; + s->n_chan = 16; } + s->maxdata = 0xfff; + s->range_table = it->options[1] ? &range_adq12b_ai_unipolar + : &range_adq12b_ai_bipolar; + s->insn_read = adq12b_ai_insn_read; - s->range_table = it->options[1] ? &range_adq12b_ai_unipolar - : &range_adq12b_ai_bipolar; - - s->maxdata = 0xfff; - s->insn_read = adq12b_ai_insn_read; - + /* Digital Input subdevice */ s = &dev->subdevices[1]; - /* digital input subdevice */ - s->type = COMEDI_SUBD_DI; - s->subdev_flags = SDF_READABLE; - s->n_chan = 5; - s->maxdata = 1; - s->range_table = &range_digital; - s->insn_bits = adq12b_di_insn_bits; - + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE; + s->n_chan = 5; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = adq12b_di_insn_bits; + + /* Digital Output subdevice */ s = &dev->subdevices[2]; - /* digital output subdevice */ - s->type = COMEDI_SUBD_DO; - s->subdev_flags = SDF_WRITABLE; - s->n_chan = 8; - s->maxdata = 1; - s->range_table = &range_digital; - s->insn_bits = adq12b_do_insn_bits; + s->type = COMEDI_SUBD_DO; + s->subdev_flags = SDF_WRITABLE; + s->n_chan = 8; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = adq12b_do_insn_bits; return 0; } -- cgit From 6822fc79a7b5ff36b5e53c52074f8ac49d59ed42 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 28 May 2014 16:34:54 -0700 Subject: staging: comedi: adq12b: tidy up the register map defines Cleanup the existing defines and add some missing bit defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adq12b.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adq12b.c b/drivers/staging/comedi/drivers/adq12b.c index 2e36aeea8fb6..8b15cbec9891 100644 --- a/drivers/staging/comedi/drivers/adq12b.c +++ b/drivers/staging/comedi/drivers/adq12b.c @@ -79,18 +79,20 @@ If you do not specify any options, they will default to #include "../comedidev.h" /* address scheme (page 2.17 of the manual) */ -#define ADQ12B_CTREG 0x00 -#define ADQ12B_STINR 0x00 -#define ADQ12B_OUTBR 0x04 -#define ADQ12B_ADLOW 0x08 -#define ADQ12B_ADHIG 0x09 -#define ADQ12B_CONT0 0x0c -#define ADQ12B_CONT1 0x0d -#define ADQ12B_CONT2 0x0e -#define ADQ12B_COWORD 0x0f - -/* mask of the bit at STINR to check end of conversion */ -#define ADQ12B_EOC 0x20 +#define ADQ12B_CTREG 0x00 +#define ADQ12B_CTREG_MSKP (1 << 7) /* enable pacer interrupt */ +#define ADQ12B_CTREG_GTP (1 << 6) /* enable pacer */ +#define ADQ12B_CTREG_RANGE(x) ((x) << 4) +#define ADQ12B_CTREG_CHAN(x) ((x) << 0) +#define ADQ12B_STINR 0x00 +#define ADQ12B_STINR_OUT2 (1 << 7) /* timer 2 output state */ +#define ADQ12B_STINR_OUTP (1 << 6) /* pacer output state */ +#define ADQ12B_STINR_EOC (1 << 5) /* A/D end-of-conversion */ +#define ADQ12B_STINR_IN_MASK (0x1f << 0) +#define ADQ12B_OUTBR 0x04 +#define ADQ12B_ADLOW 0x08 +#define ADQ12B_ADHIG 0x09 +#define ADQ12B_TIMER_BASE 0x0c /* available ranges through the PGA gains */ static const struct comedi_lrange range_adq12b_ai_bipolar = { @@ -123,7 +125,7 @@ static int adq12b_ai_eoc(struct comedi_device *dev, unsigned char status; status = inb(dev->iobase + ADQ12B_STINR); - if (status & ADQ12B_EOC) + if (status & ADQ12B_STINR_EOC) return 0; return -EBUSY; } @@ -141,7 +143,7 @@ static int adq12b_ai_insn_read(struct comedi_device *dev, int i; /* change channel and range only if it is different from the previous */ - val = (range << 4) | chan; + val = ADQ12B_CTREG_RANGE(range) | ADQ12B_CTREG_CHAN(chan); if (val != devpriv->last_ctreg) { outb(val, dev->iobase + ADQ12B_CTREG); devpriv->last_ctreg = val; @@ -170,7 +172,7 @@ static int adq12b_di_insn_bits(struct comedi_device *dev, { /* only bits 0-4 have information about digital inputs */ - data[1] = (inb(dev->iobase + ADQ12B_STINR) & (0x1f)); + data[1] = (inb(dev->iobase + ADQ12B_STINR) & ADQ12B_STINR_IN_MASK); return insn->n; } -- cgit From 5a07983d8d0ccef2eb30ae972b55b71dc540706a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Thu, 29 May 2014 12:15:46 +0100 Subject: staging: comedi: ni_daq_700: update driver comment Reformat the comment describing this comedi driver to use the usual block comment format. Also remove reference to digital I/O emulating an 8255, because it doesn't, and remove "DIO only" from the "Description:" line as it also supports analog inputs. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_daq_700.c | 51 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index 728bf7f14f7b..4eedefdff688 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -18,32 +18,31 @@ */ /* -Driver: ni_daq_700 -Description: National Instruments PCMCIA DAQCard-700 DIO only -Author: Fred Brooks , - based on ni_daq_dio24 by Daniel Vecino Castel -Devices: [National Instruments] PCMCIA DAQ-Card-700 (ni_daq_700) -Status: works -Updated: Wed, 19 Sep 2012 12:07:20 +0000 - -The daqcard-700 appears in Comedi as a digital I/O subdevice (0) with -16 channels and a analog input subdevice (1) with 16 single-ended channels. - -Digital: The channel 0 corresponds to the daqcard-700's output -port, bit 0; channel 8 corresponds to the input port, bit 0. - -Digital direction configuration: channels 0-7 output, 8-15 input (8225 device -emu as port A output, port B input, port C N/A). - -Analog: The input range is 0 to 4095 for -10 to +10 volts -IRQ is assigned but not used. - -Version 0.1 Original DIO only driver -Version 0.2 DIO and basic AI analog input support on 16 se channels - -Manuals: Register level: http://www.ni.com/pdf/manuals/340698.pdf - User Manual: http://www.ni.com/pdf/manuals/320676d.pdf -*/ + * Driver: ni_daq_700 + * Description: National Instruments PCMCIA DAQCard-700 + * Author: Fred Brooks , + * based on ni_daq_dio24 by Daniel Vecino Castel + * Devices: [National Instruments] PCMCIA DAQ-Card-700 (ni_daq_700) + * Status: works + * Updated: Wed, 19 Sep 2012 12:07:20 +0000 + * + * The daqcard-700 appears in Comedi as a digital I/O subdevice (0) with + * 16 channels and a analog input subdevice (1) with 16 single-ended channels. + * + * Digital: The channel 0 corresponds to the daqcard-700's output + * port, bit 0; channel 8 corresponds to the input port, bit 0. + * + * Digital direction configuration: channels 0-7 output, 8-15 input. + * + * Analog: The input range is 0 to 4095 for -10 to +10 volts + * IRQ is assigned but not used. + * + * Version 0.1 Original DIO only driver + * Version 0.2 DIO and basic AI analog input support on 16 se channels + * + * Manuals: Register level: http://www.ni.com/pdf/manuals/340698.pdf + * User Manual: http://www.ni.com/pdf/manuals/320676d.pdf + */ #include #include -- cgit From 301b1ffcbe8f4282e1717fdf21f3fefce94cda7e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:00 -0700 Subject: staging: comedi: addi_common.h: remove 'b_SingleDiff' from private data This member is set but never used. Just remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/addi_common.c | 10 +++------- drivers/staging/comedi/drivers/addi-data/addi_common.h | 1 - drivers/staging/comedi/drivers/addi_apci_3120.c | 7 ++----- 3 files changed, 5 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.c b/drivers/staging/comedi/drivers/addi-data/addi_common.c index dc87df032203..de5843ab01ae 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.c +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.c @@ -157,14 +157,10 @@ static int addi_auto_attach(struct comedi_device *dev, s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND | SDF_DIFF; - if (devpriv->s_EeParameters.i_NbrAiChannel) { - s->n_chan = - devpriv->s_EeParameters.i_NbrAiChannel; - devpriv->b_SingelDiff = 0; - } else { + if (devpriv->s_EeParameters.i_NbrAiChannel) + s->n_chan = devpriv->s_EeParameters.i_NbrAiChannel; + else s->n_chan = this_board->i_NbrAiChannelDiff; - devpriv->b_SingelDiff = 1; - } s->maxdata = devpriv->s_EeParameters.i_AiMaxdata; s->len_chanlist = this_board->i_AiChannelList; s->range_table = this_board->pr_AiRangelist; diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 5c6a11c35ded..080bb6b2edcc 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -141,7 +141,6 @@ struct addi_private { unsigned char b_InterruptMode; /* eoc eos or dma */ unsigned char b_EocEosInterrupt; /* Enable disable eoc eos interrupt */ unsigned int ui_EocEosConversionTime; - unsigned char b_SingelDiff; unsigned char b_ExttrigEnable; /* To enable or disable external trigger */ /* Pointer to the current process */ diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c b/drivers/staging/comedi/drivers/addi_apci_3120.c index 0cfb12fa1cbc..cc4f586ba20d 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3120.c +++ b/drivers/staging/comedi/drivers/addi_apci_3120.c @@ -125,13 +125,10 @@ static int apci3120_auto_attach(struct comedi_device *dev, s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND | SDF_DIFF; - if (this_board->i_NbrAiChannel) { + if (this_board->i_NbrAiChannel) s->n_chan = this_board->i_NbrAiChannel; - devpriv->b_SingelDiff = 0; - } else { + else s->n_chan = this_board->i_NbrAiChannelDiff; - devpriv->b_SingelDiff = 1; - } s->maxdata = this_board->i_AiMaxdata; s->len_chanlist = this_board->i_AiChannelList; s->range_table = &range_apci3120_ai; -- cgit From f7f7b10439e64797677de7ee1f96da88f7e738e9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:01 -0700 Subject: staging: comedi: addi_common.h: remove APCI1710_SAVE_INTERRUPT define This define is not used. Remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/addi_common.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 080bb6b2edcc..8ccd399d21b7 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -23,7 +23,6 @@ #define ADDI_ENABLE 1 #define ADDI_DISABLE 0 -#define APCI1710_SAVE_INTERRUPT 1 #define ADDIDATA_EEPROM 1 #define ADDIDATA_NO_EEPROM 0 -- cgit From 223a6402c51c066537b976a7302028c8579ebe09 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:02 -0700 Subject: staging: comedi: addi_common.h: remove ADDI_{EN, DIS}ABLE defines These defines don't add any additional clarity to the addi_data drivers. They are also only used in the addi_apci_3120 driver. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/addi_common.h | 3 --- drivers/staging/comedi/drivers/addi_apci_3120.c | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 8ccd399d21b7..289083153ec6 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -21,9 +21,6 @@ #define LOWORD(W) (unsigned short)((W) & 0xFFFF) #define HIWORD(W) (unsigned short)(((W) >> 16) & 0xFFFF) -#define ADDI_ENABLE 1 -#define ADDI_DISABLE 0 - #define ADDIDATA_EEPROM 1 #define ADDIDATA_NO_EEPROM 0 #define ADDIDATA_93C76 "93C76" diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c b/drivers/staging/comedi/drivers/addi_apci_3120.c index cc4f586ba20d..0b77f1012d47 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3120.c +++ b/drivers/staging/comedi/drivers/addi_apci_3120.c @@ -88,7 +88,7 @@ static int apci3120_auto_attach(struct comedi_device *dev, dev->irq = pcidev->irq; } - devpriv->us_UseDma = ADDI_ENABLE; + devpriv->us_UseDma = 1; /* Allocate DMA buffers */ devpriv->b_DmaDoubleBuffer = 0; @@ -109,7 +109,7 @@ static int apci3120_auto_attach(struct comedi_device *dev, } } if (!devpriv->ul_DmaBufferVirtual[0]) - devpriv->us_UseDma = ADDI_DISABLE; + devpriv->us_UseDma = 0; if (devpriv->ul_DmaBufferVirtual[1]) devpriv->b_DmaDoubleBuffer = 1; -- cgit From 02dc1e78a238627a0876695b8c84deca78e4435a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:03 -0700 Subject: staging: comedi: addi_common.h: remove ADDIDATA_{EN, DIS}ABLE defines These defines don't add any additional clarity to the addi_data drivers. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- .../staging/comedi/drivers/addi-data/addi_common.h | 7 -- .../comedi/drivers/addi-data/hwdrv_apci035.c | 9 +- .../comedi/drivers/addi-data/hwdrv_apci1564.c | 10 +- .../comedi/drivers/addi-data/hwdrv_apci3200.c | 109 +++++---------------- 4 files changed, 31 insertions(+), 104 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 289083153ec6..1a0bafcf983f 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -26,13 +26,6 @@ #define ADDIDATA_93C76 "93C76" #define ADDIDATA_S5920 "S5920" -/* ADDIDATA Enable Disable */ -#define ADDIDATA_ENABLE 1 -#define ADDIDATA_DISABLE 0 - -/* Structures */ - -/* structure for the boardtype */ struct addi_board { const char *pc_DriverName; /* driver name */ int i_IorangeBase1; diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c index 28450f65a134..cad33f1a04fe 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c @@ -177,8 +177,7 @@ static int apci035_timer_config(struct comedi_device *dev, /* Disable the hardware trigger */ ui_Command = ui_Command & 0xFFFFF89FUL; - if (data[4] == ADDIDATA_ENABLE) { - + if (data[4] == 1) { /* Set the hardware trigger level */ ui_Command = ui_Command | (data[5] << 5); } @@ -188,8 +187,7 @@ static int apci035_timer_config(struct comedi_device *dev, /* Disable the hardware gate */ ui_Command = ui_Command & 0xFFFFF87FUL; - if (data[6] == ADDIDATA_ENABLE) { - + if (data[6] == 1) { /* Set the hardware gate level */ ui_Command = ui_Command | (data[7] << 7); } @@ -203,8 +201,7 @@ static int apci035_timer_config(struct comedi_device *dev, /* Set the hardware output level */ ui_Command = ui_Command | (data[8] << 2); outl(ui_Command, devpriv->iobase + ((i_WatchdogNbr - 1) * 32) + 12); - if (data[9] == ADDIDATA_ENABLE) { - + if (data[9] == 1) { /* Set the reload value */ outl(data[11], devpriv->iobase + ((i_WatchdogNbr - 1) * 32) + 24); diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 0ba5385226ae..7fa4346f6184 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -111,7 +111,7 @@ static int apci1564_di_config(struct comedi_device *dev, devpriv->tsk_Current = current; /* Set the digital input logic */ - if (data[0] == ADDIDATA_ENABLE) { + if (data[0] == 1) { data[2] = data[2] << 4; data[3] = data[3] << 4; outl(data[2], devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE1_REG); @@ -150,16 +150,16 @@ static int apci1564_do_config(struct comedi_device *dev, } if (data[0]) - devpriv->b_OutputMemoryStatus = ADDIDATA_ENABLE; + devpriv->b_OutputMemoryStatus = 1; else - devpriv->b_OutputMemoryStatus = ADDIDATA_DISABLE; + devpriv->b_OutputMemoryStatus = 0; - if (data[1] == ADDIDATA_ENABLE) + if (data[1] == 1) ul_Command = ul_Command | 0x1; else ul_Command = ul_Command & 0xFFFFFFFE; - if (data[2] == ADDIDATA_ENABLE) + if (data[2] == 1) ul_Command = ul_Command | 0x2; else ul_Command = ul_Command & 0xFFFFFFFD; diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c index f540394d17b0..a3026a229e85 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c @@ -689,17 +689,11 @@ static int i_APCI3200_Read1AnalogInputChannel(struct comedi_device *dev, ui_CommandRegister = ui_ChannelNo | (ui_ChannelNo << 8) | 0x80000; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - /************************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /* Enable the interrupt */ - /************************/ ui_CommandRegister = ui_CommandRegister | 0x00100000; - } /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ + } /******************************/ /* Write the command register */ @@ -712,11 +706,8 @@ static int i_APCI3200_Read1AnalogInputChannel(struct comedi_device *dev, outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /*****************************/ /*Test if interrupt is enable */ - /*****************************/ - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*************************/ /*Read the EOC Status bit */ @@ -738,7 +729,7 @@ static int i_APCI3200_Read1AnalogInputChannel(struct comedi_device *dev, s_BoardInfos[dev->minor].i_Offset + 28); /* END JK 06.07.04: Management of sevrals boards */ - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -800,20 +791,11 @@ static int i_APCI3200_ReadCalibrationOffsetValue(struct comedi_device *dev, ui_CommandRegister = 0; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - - /**********************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /*Enable the interrupt */ - /**********************/ - ui_CommandRegister = ui_CommandRegister | 0x00100000; - - } /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ + } /**********************/ /*Start the conversion */ @@ -830,13 +812,8 @@ static int i_APCI3200_ReadCalibrationOffsetValue(struct comedi_device *dev, outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /*****************************/ /*Test if interrupt is enable */ - /*****************************/ - - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { - + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*******************/ /*Read the EOC flag */ @@ -856,7 +833,7 @@ static int i_APCI3200_ReadCalibrationOffsetValue(struct comedi_device *dev, data[0] = inl(devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 28); - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -915,20 +892,11 @@ static int i_APCI3200_ReadCalibrationGainValue(struct comedi_device *dev, ui_CommandRegister = 0; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - - /**********************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /*Enable the interrupt */ - /**********************/ - ui_CommandRegister = ui_CommandRegister | 0x00100000; - - } /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ + } /**********************/ /*Start the conversion */ @@ -945,13 +913,8 @@ static int i_APCI3200_ReadCalibrationGainValue(struct comedi_device *dev, outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /*****************************/ /*Test if interrupt is enable */ - /*****************************/ - - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { - + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*******************/ @@ -973,7 +936,7 @@ static int i_APCI3200_ReadCalibrationGainValue(struct comedi_device *dev, inl(devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 28); - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -1020,14 +983,9 @@ static int i_APCI3200_ReadCJCValue(struct comedi_device *dev, /*Initialise dw_CommandRegister */ /*******************************/ ui_CommandRegister = 0; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - /**********************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /*Enable the interrupt */ - /**********************/ ui_CommandRegister = ui_CommandRegister | 0x00100000; } @@ -1047,12 +1005,8 @@ static int i_APCI3200_ReadCJCValue(struct comedi_device *dev, outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /*****************************/ /*Test if interrupt is enable */ - /*****************************/ - - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*******************/ @@ -1073,8 +1027,7 @@ static int i_APCI3200_ReadCJCValue(struct comedi_device *dev, data[0] = inl(devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 28); - - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -1128,17 +1081,10 @@ static int i_APCI3200_ReadCJCCalOffset(struct comedi_device *dev, /*Initialise ui_CommandRegister */ /*******************************/ ui_CommandRegister = 0; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - /**********************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /*Enable the interrupt */ - /**********************/ ui_CommandRegister = ui_CommandRegister | 0x00100000; - } /**********************/ @@ -1154,8 +1100,7 @@ static int i_APCI3200_ReadCJCCalOffset(struct comedi_device *dev, /* outl(ui_CommandRegister,devpriv->iobase+i_Offset + 8); */ outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*******************/ /*Read the EOC flag */ @@ -1172,7 +1117,7 @@ static int i_APCI3200_ReadCJCCalOffset(struct comedi_device *dev, data[0] = inl(devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 28); - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -1224,14 +1169,9 @@ static int i_APCI3200_ReadCJCCalGain(struct comedi_device *dev, /*Initialise dw_CommandRegister */ /*******************************/ ui_CommandRegister = 0; - /*********************************/ /*Test if the interrupt is enable */ - /*********************************/ - /* if (i_InterruptFlag == ADDIDATA_ENABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_ENABLE) { - /**********************/ + if (s_BoardInfos[dev->minor].i_InterruptFlag == 1) { /*Enable the interrupt */ - /**********************/ ui_CommandRegister = ui_CommandRegister | 0x00100000; } /**********************/ @@ -1247,8 +1187,7 @@ static int i_APCI3200_ReadCJCCalGain(struct comedi_device *dev, /* outl(ui_CommandRegister ,devpriv->iobase+i_Offset + 8); */ outl(ui_CommandRegister, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 8); - /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ - if (s_BoardInfos[dev->minor].i_InterruptFlag == ADDIDATA_DISABLE) { + if (s_BoardInfos[dev->minor].i_InterruptFlag == 0) { do { /*******************/ /*Read the EOC flag */ @@ -1264,7 +1203,7 @@ static int i_APCI3200_ReadCJCCalGain(struct comedi_device *dev, data[0] = inl(devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 28); - } /* if (i_InterruptFlag == ADDIDATA_DISABLE) */ + } return 0; } @@ -2136,8 +2075,7 @@ static int apci3200_ai_bits_test(struct comedi_device *dev, i_ADDIDATAConversionTimeUnit= 1; */ /* i_Temp= i_InterruptFlag ; */ i_Temp = s_BoardInfos[dev->minor].i_InterruptFlag; - /* i_InterruptFlag = ADDIDATA_DISABLE; */ - s_BoardInfos[dev->minor].i_InterruptFlag = ADDIDATA_DISABLE; + s_BoardInfos[dev->minor].i_InterruptFlag = 0; i_APCI3200_Read1AnalogInputChannel(dev, s, insn, data); /* if(i_AutoCalibration == FALSE) */ if (s_BoardInfos[dev->minor].i_AutoCalibration == FALSE) { @@ -2176,8 +2114,7 @@ static int apci3200_ai_bits_test(struct comedi_device *dev, i_ADDIDATAConversionTimeUnit= 1; */ /* i_Temp= i_InterruptFlag ; */ i_Temp = s_BoardInfos[dev->minor].i_InterruptFlag; - /* i_InterruptFlag = ADDIDATA_DISABLE; */ - s_BoardInfos[dev->minor].i_InterruptFlag = ADDIDATA_DISABLE; + s_BoardInfos[dev->minor].i_InterruptFlag = 0; i_APCI3200_Read1AnalogInputChannel(dev, s, insn, data); /* if(i_AutoCalibration == FALSE) */ if (s_BoardInfos[dev->minor].i_AutoCalibration == FALSE) { -- cgit From c6b004d216d33366498103a960e809ee72c4eaa4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:04 -0700 Subject: staging: comedi: addi_common.h: remove {LO, HI}WORD macros These macros don't add any additional clarity to the addi_data drivers. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/addi_common.h | 3 --- .../staging/comedi/drivers/addi-data/hwdrv_apci3120.c | 16 ++++++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 1a0bafcf983f..0138e00d1522 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -18,9 +18,6 @@ #include #include -#define LOWORD(W) (unsigned short)((W) & 0xFFFF) -#define HIWORD(W) (unsigned short)(((W) >> 16) & 0xFFFF) - #define ADDIDATA_EEPROM 1 #define ADDIDATA_NO_EEPROM 0 #define ADDIDATA_93C76 "93C76" diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c index 764c8f17f8fa..bfa154d3fea6 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c @@ -1051,7 +1051,7 @@ static int apci3120_cyclic_ai(int mode, b_DigitalOutputRegister) & 0xF0) | APCI3120_SELECT_TIMER_2_LOW_WORD; outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); - outw(LOWORD(ui_TimerValue2), + outw(ui_TimerValue2 & 0xffff, dev->iobase + APCI3120_TIMER_VALUE); /* Writing HIGH unsigned short */ @@ -1059,7 +1059,7 @@ static int apci3120_cyclic_ai(int mode, b_DigitalOutputRegister) & 0xF0) | APCI3120_SELECT_TIMER_2_HIGH_WORD; outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); - outw(HIWORD(ui_TimerValue2), + outw((ui_TimerValue2 >> 16) & 0xffff, dev->iobase + APCI3120_TIMER_VALUE); /* (2) Reset FC_TIMER BIT Clearing timer status register */ @@ -1805,7 +1805,7 @@ static int apci3120_config_insn_timer(struct comedi_device *dev, b_DigitalOutputRegister) & 0xF0) | APCI3120_SELECT_TIMER_2_LOW_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(LOWORD(ui_Timervalue2), + outw(ui_Timervalue2 & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); /* Writing HIGH unsigned short */ @@ -1813,7 +1813,7 @@ static int apci3120_config_insn_timer(struct comedi_device *dev, b_DigitalOutputRegister) & 0xF0) | APCI3120_SELECT_TIMER_2_HIGH_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(HIWORD(ui_Timervalue2), + outw((ui_Timervalue2 >> 16) & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); /* timer2 in Timer mode enabled */ devpriv->b_Timer2Mode = APCI3120_TIMER; @@ -1841,7 +1841,7 @@ static int apci3120_config_insn_timer(struct comedi_device *dev, b_DigitalOutputRegister) & 0xF0) | APCI3120_SELECT_TIMER_2_LOW_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(LOWORD(ui_Timervalue2), + outw(ui_Timervalue2 & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); /* Writing HIGH unsigned short */ @@ -1850,7 +1850,7 @@ static int apci3120_config_insn_timer(struct comedi_device *dev, APCI3120_SELECT_TIMER_2_HIGH_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(HIWORD(ui_Timervalue2), + outw((ui_Timervalue2 >> 16) & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); /* watchdog enabled */ devpriv->b_Timer2Mode = APCI3120_WATCHDOG; @@ -2017,7 +2017,7 @@ static int apci3120_write_insn_timer(struct comedi_device *dev, APCI3120_SELECT_TIMER_2_LOW_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(LOWORD(ui_Timervalue2), + outw(ui_Timervalue2 & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); /* Writing HIGH unsigned short */ @@ -2026,7 +2026,7 @@ static int apci3120_write_insn_timer(struct comedi_device *dev, APCI3120_SELECT_TIMER_2_HIGH_WORD; outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); - outw(HIWORD(ui_Timervalue2), + outw((ui_Timervalue2 >> 16) & 0xffff, devpriv->iobase + APCI3120_TIMER_VALUE); break; -- cgit From 952091f123008fbd0563a462c37f77fe0aa84b2d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:30:05 -0700 Subject: staging: comedi: addi_common.h: remove ADDIDATA_* defines These defines don't add any additional clarity to the addi_data drivers. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/addi_common.h | 5 ----- drivers/staging/comedi/drivers/addi_apci_035.c | 2 +- drivers/staging/comedi/drivers/addi_apci_1500.c | 2 +- drivers/staging/comedi/drivers/addi_apci_3200.c | 8 ++++---- 4 files changed, 6 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index 0138e00d1522..a7400a25f620 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -18,11 +18,6 @@ #include #include -#define ADDIDATA_EEPROM 1 -#define ADDIDATA_NO_EEPROM 0 -#define ADDIDATA_93C76 "93C76" -#define ADDIDATA_S5920 "S5920" - struct addi_board { const char *pc_DriverName; /* driver name */ int i_IorangeBase1; diff --git a/drivers/staging/comedi/drivers/addi_apci_035.c b/drivers/staging/comedi/drivers/addi_apci_035.c index 4da9db35b8e2..af70c8401880 100644 --- a/drivers/staging/comedi/drivers/addi_apci_035.c +++ b/drivers/staging/comedi/drivers/addi_apci_035.c @@ -18,7 +18,7 @@ static const struct addi_board apci035_boardtypes[] = { .pc_DriverName = "apci035", .i_IorangeBase1 = APCI035_ADDRESS_RANGE, .i_PCIEeprom = 1, - .pc_EepromChip = ADDIDATA_S5920, + .pc_EepromChip = "S5920", .i_NbrAiChannel = 16, .i_NbrAiChannelDiff = 8, .i_AiChannelList = 16, diff --git a/drivers/staging/comedi/drivers/addi_apci_1500.c b/drivers/staging/comedi/drivers/addi_apci_1500.c index eab75eb26478..b7a284ac6649 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1500.c +++ b/drivers/staging/comedi/drivers/addi_apci_1500.c @@ -15,7 +15,7 @@ static const struct addi_board apci1500_boardtypes[] = { { .pc_DriverName = "apci1500", .i_IorangeBase1 = APCI1500_ADDRESS_RANGE, - .i_PCIEeprom = ADDIDATA_NO_EEPROM, + .i_PCIEeprom = 0, .i_NbrDiChannel = 16, .i_NbrDoChannel = 16, .i_DoMaxdata = 0xffff, diff --git a/drivers/staging/comedi/drivers/addi_apci_3200.c b/drivers/staging/comedi/drivers/addi_apci_3200.c index f0f891a482a3..fe6897eff3db 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3200.c +++ b/drivers/staging/comedi/drivers/addi_apci_3200.c @@ -32,8 +32,8 @@ static const struct addi_board apci3200_boardtypes[] = { [BOARD_APCI3200] = { .pc_DriverName = "apci3200", .i_IorangeBase1 = 256, - .i_PCIEeprom = ADDIDATA_EEPROM, - .pc_EepromChip = ADDIDATA_S5920, + .i_PCIEeprom = 1, + .pc_EepromChip = "S5920", .i_NbrAiChannel = 16, .i_NbrAiChannelDiff = 8, .i_AiChannelList = 16, @@ -58,8 +58,8 @@ static const struct addi_board apci3200_boardtypes[] = { [BOARD_APCI3300] = { .pc_DriverName = "apci3300", .i_IorangeBase1 = 256, - .i_PCIEeprom = ADDIDATA_EEPROM, - .pc_EepromChip = ADDIDATA_S5920, + .i_PCIEeprom = 1, + .pc_EepromChip = "S5920", .i_NbrAiChannelDiff = 8, .i_AiChannelList = 8, .i_AiMaxdata = 0x3ffff, -- cgit From 757c1fa9e1f18feaace0243ae590077e25d69cdd Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:42:22 -0700 Subject: staging: comedi: pcl730: add support for Diamond Systems IR104-PBF module The Diamond Systems IR104-PBF board is a PC/104 module with 20 optoisolated inputs and 20 relay outputs. This board can be supported by the pcl730 driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 1 + drivers/staging/comedi/drivers/pcl730.c | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 5d56428d508a..0ce4fba17964 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -172,6 +172,7 @@ config COMEDI_PCL730 Advantech PCL-734 iso - 32 out Diamond Systems OPMM-1616-XT iso - 16 in/16 out Diamond Systems PEARL-MM-P iso - 16 out + Diamond Systems IR104-PBF iso - 20 in/20 out To compile this driver as a module, choose M here: the module will be called pcl730. diff --git a/drivers/staging/comedi/drivers/pcl730.c b/drivers/staging/comedi/drivers/pcl730.c index 7fb044ce399b..4eef4b46cf6b 100644 --- a/drivers/staging/comedi/drivers/pcl730.c +++ b/drivers/staging/comedi/drivers/pcl730.c @@ -19,6 +19,7 @@ * (Advantech) PCL-734 [pcl734] * (Diamond Systems) OPMM-1616-XT [opmm-1616-xt] * (Diamond Systems) PEARL-MM-P [prearl-mm-p] + * (Diamond Systems) IR104-PBF [ir104-pbf] * Author: José Luis Sánchez (jsanchezv@teleline.es) * Status: untested * @@ -93,6 +94,15 @@ * * BASE+0 Isolated outputs 0-7 (write) * BASE+1 Isolated outputs 8-15 (write) + * + * The ir104-pbf board has this register mapping: + * + * BASE+0 Isolated outputs 0-7 (write) (read back) + * BASE+1 Isolated outputs 8-15 (write) (read back) + * BASE+2 Isolated outputs 16-19 (write) (read back) + * BASE+4 Isolated inputs 0-7 (read) + * BASE+5 Isolated inputs 8-15 (read) + * BASE+6 Isolated inputs 16-19 (read) */ struct pcl730_board { @@ -100,6 +110,7 @@ struct pcl730_board { unsigned int io_range; unsigned is_pcl725:1; unsigned is_acl7225b:1; + unsigned is_ir104:1; unsigned has_readback:1; unsigned has_ttl_io:1; int n_subdevs; @@ -194,6 +205,13 @@ static const struct pcl730_board pcl730_boards[] = { .io_range = 0x02, .n_subdevs = 1, .n_iso_out_chan = 16, + }, { + .name = "ir104-pbf", + .io_range = 0x08, + .is_ir104 = 1, + .has_readback = 1, + .n_iso_out_chan = 20, + .n_iso_in_chan = 20, }, }; @@ -292,7 +310,8 @@ static int pcl730_attach(struct comedi_device *dev, s->maxdata = 1; s->range_table = &range_digital; s->insn_bits = pcl730_di_insn_bits; - s->private = board->is_acl7225b ? (void *)2 : + s->private = board->is_ir104 ? (void*)4 : + board->is_acl7225b ? (void *)2 : board->is_pcl725 ? (void *)1 : (void *)0; } -- cgit From 55e51bad3559ed0166be3dd3c8b236204cc730b4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:42:23 -0700 Subject: staging: comedi: pcl724: add support for Diamond Systems ONYX-MM-DIO module The Diamond Systems ONYX-MM-DIO board is a PC/104 module with two 8255 chips providing 48 digital I/O channels. This board can be supported by the pcl724 driver. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 15 ++++++++------- drivers/staging/comedi/drivers/pcl724.c | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 0ce4fba17964..3a07f0b9afd5 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -135,13 +135,14 @@ config COMEDI_PCL724 support driver. Supported boards include: - Advantech PCL-724 24 channels - Advantech PCL-722 144 (or 96) channels - Advantech PCL-731 48 channels - ADlink ACL-7122 144 (or 96) channels - ADlink ACL-7124 24 channels - ADlink PET-48DIO 48 channels - WinSystems PCM-IO48 48 channels (PC/104) + Advantech PCL-724 24 channels + Advantech PCL-722 144 (or 96) channels + Advantech PCL-731 48 channels + ADlink ACL-7122 144 (or 96) channels + ADlink ACL-7124 24 channels + ADlink PET-48DIO 48 channels + WinSystems PCM-IO48 48 channels (PC/104) + Diamond Systems ONYX-MM-DIO 48 channels (PC/104) To compile this driver as a module, choose M here: the module will be called pcl724. diff --git a/drivers/staging/comedi/drivers/pcl724.c b/drivers/staging/comedi/drivers/pcl724.c index 8af13e790ad1..655bac42f6f0 100644 --- a/drivers/staging/comedi/drivers/pcl724.c +++ b/drivers/staging/comedi/drivers/pcl724.c @@ -15,6 +15,7 @@ * (ADLink) ACL-7124 [acl7124] * (ADLink) PET-48DIO [pet48dio] * (WinSystems) PCM-IO48 [pcmio48] + * (Diamond Systems) ONYX-MM-DIO [onyx-mm-dio] * Author: Michal Dobes * Status: untested * @@ -73,6 +74,10 @@ static const struct pcl724_board boardtypes[] = { .name = "pcmio48", .io_range = 0x08, .numofports = 2, /* 48 DIO channels */ + }, { + .name = "onyx-mm-dio", + .io_range = 0x10, + .numofports = 2, /* 48 DIO channels */ }, }; -- cgit From 64b99c4c40845dcc96a154e9014505d14ca9a283 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:35:08 -0700 Subject: staging: comedi: adl_pci9111: remove PCI9111_DRIVER_NAME define This define is only used in a comedi_error() message. The addition of the driver name to the message is not necessary. Remove the define. For aesthetics, convert the comedi_error() into a dev_dbg(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9111.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c index 584fd57ecb70..d005faadde48 100644 --- a/drivers/staging/comedi/drivers/adl_pci9111.c +++ b/drivers/staging/comedi/drivers/adl_pci9111.c @@ -75,7 +75,6 @@ TODO: #include "plx9052.h" #include "comedi_fc.h" -#define PCI9111_DRIVER_NAME "adl_pci9111" #define PCI9111_HR_DEVICE_ID 0x9111 #define PCI9111_FIFO_HALF_SIZE 512 @@ -630,7 +629,7 @@ static irqreturn_t pci9111_interrupt(int irq, void *p_device) /* '0' means FIFO is full, data may have been lost */ if (!(status & PCI9111_AI_STAT_FF_FF)) { spin_unlock_irqrestore(&dev->spinlock, irq_flags); - comedi_error(dev, PCI9111_DRIVER_NAME " fifo overflow"); + dev_dbg(dev->class_dev, "fifo overflow\n"); outb(0, dev->iobase + PCI9111_INT_CLR_REG); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); -- cgit From d76fdfcc6d774c2465e90bb7aa2e5ad7d1ff08cf Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:35:09 -0700 Subject: staging: comedi: adl_pci9111: remove PCI9111_HR_DEVICE_ID define This define is only used in the pci_device_id table and doesn't add any additional clarity to the code. Remove the define and just open code the value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9111.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c index d005faadde48..53c61de1d047 100644 --- a/drivers/staging/comedi/drivers/adl_pci9111.c +++ b/drivers/staging/comedi/drivers/adl_pci9111.c @@ -75,8 +75,6 @@ TODO: #include "plx9052.h" #include "comedi_fc.h" -#define PCI9111_HR_DEVICE_ID 0x9111 - #define PCI9111_FIFO_HALF_SIZE 512 #define PCI9111_AI_ACQUISITION_PERIOD_MIN_NS 10000 @@ -883,7 +881,7 @@ static int pci9111_pci_probe(struct pci_dev *dev, } static const struct pci_device_id pci9111_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, PCI9111_HR_DEVICE_ID) }, + { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, 0x9111) }, /* { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, PCI9111_HG_DEVICE_ID) }, */ { 0 } }; -- cgit From 3e18c5284ad4ba93eafd1f1f528bff21a962e5d0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:35:10 -0700 Subject: staging: comedi: adl_pci9111: simplify A/D trigger selection code The functions pci9111_trigger_source_set(), pci9111_pretrigger_set(), and pci9111_autoscan_set() are all used to select the A/D trigger type. They all do a read/mask/set/write of the A/D Trigger Mode Control register. Simplify the code by removing these helper functions and combining all the trigger bits so that a single write can be used to set the register. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9111.c | 94 ++++------------------------ 1 file changed, 13 insertions(+), 81 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c index 53c61de1d047..51edfebb952a 100644 --- a/drivers/staging/comedi/drivers/adl_pci9111.c +++ b/drivers/staging/comedi/drivers/adl_pci9111.c @@ -186,68 +186,6 @@ static void pci9111_timer_set(struct comedi_device *dev) i8254_write(timer_base, 1, 1, dev_private->div1); } -enum pci9111_trigger_sources { - software, - timer_pacer, - external -}; - -static void pci9111_trigger_source_set(struct comedi_device *dev, - enum pci9111_trigger_sources source) -{ - int flags; - - /* Read the current trigger mode control bits */ - flags = inb(dev->iobase + PCI9111_AI_TRIG_CTRL_REG); - /* Mask off the EITS and TPST bits */ - flags &= 0x9; - - switch (source) { - case software: - break; - - case timer_pacer: - flags |= PCI9111_AI_TRIG_CTRL_TPST; - break; - - case external: - flags |= PCI9111_AI_TRIG_CTRL_ETIS; - break; - } - - outb(flags, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); -} - -static void pci9111_pretrigger_set(struct comedi_device *dev, bool pretrigger) -{ - int flags; - - /* Read the current trigger mode control bits */ - flags = inb(dev->iobase + PCI9111_AI_TRIG_CTRL_REG); - /* Mask off the PTRG bit */ - flags &= 0x7; - - if (pretrigger) - flags |= PCI9111_AI_TRIG_CTRL_PTRG; - - outb(flags, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); -} - -static void pci9111_autoscan_set(struct comedi_device *dev, bool autoscan) -{ - int flags; - - /* Read the current trigger mode control bits */ - flags = inb(dev->iobase + PCI9111_AI_TRIG_CTRL_REG); - /* Mask off the ASCAN bit */ - flags &= 0xe; - - if (autoscan) - flags |= PCI9111_AI_TRIG_CTRL_ASCAN; - - outb(flags, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); -} - enum pci9111_ISC0_sources { irq_on_eoc, irq_on_fifo_half_full @@ -300,9 +238,8 @@ static int pci9111_ai_cancel(struct comedi_device *dev, plx9050_interrupt_control(dev_private->lcr_io_base, true, true, true, true, false); - pci9111_trigger_source_set(dev, software); - - pci9111_autoscan_set(dev, false); + /* disable A/D triggers (software trigger mode) and auto scan off */ + outb(0, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); pci9111_fifo_reset(dev); @@ -451,20 +388,17 @@ static int pci9111_ai_do_cmd(struct comedi_device *dev, { struct pci9111_private_data *dev_private = dev->private; struct comedi_cmd *cmd = &s->async->cmd; + unsigned int last_chan = CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1]); + unsigned int trig = 0; /* Set channel scan limit */ /* PCI9111 allows only scanning from channel 0 to channel n */ /* TODO: handle the case of an external multiplexer */ - if (cmd->chanlist_len > 1) { - outb(cmd->chanlist_len - 1, - dev->iobase + PCI9111_AI_CHANNEL_REG); - pci9111_autoscan_set(dev, true); - } else { - outb(CR_CHAN(cmd->chanlist[0]), - dev->iobase + PCI9111_AI_CHANNEL_REG); - pci9111_autoscan_set(dev, false); - } + if (cmd->chanlist_len > 1) + trig |= PCI9111_AI_TRIG_CTRL_ASCAN; + + outb(last_chan, dev->iobase + PCI9111_AI_CHANNEL_REG); /* Set gain */ /* This is the same gain on every channel */ @@ -481,12 +415,11 @@ static int pci9111_ai_do_cmd(struct comedi_device *dev, /* Set timer pacer */ dev_private->scan_delay = 0; if (cmd->convert_src == TRIG_TIMER) { - pci9111_trigger_source_set(dev, software); + trig |= PCI9111_AI_TRIG_CTRL_TPST; pci9111_timer_set(dev); pci9111_fifo_reset(dev); pci9111_interrupt_source_set(dev, irq_on_fifo_half_full, irq_on_timer_tick); - pci9111_trigger_source_set(dev, timer_pacer); plx9050_interrupt_control(dev_private->lcr_io_base, true, true, false, true, true); @@ -495,14 +428,14 @@ static int pci9111_ai_do_cmd(struct comedi_device *dev, (cmd->convert_arg * cmd->chanlist_len)) - 1; } } else { /* TRIG_EXT */ - pci9111_trigger_source_set(dev, external); + trig |= PCI9111_AI_TRIG_CTRL_ETIS; pci9111_fifo_reset(dev); pci9111_interrupt_source_set(dev, irq_on_fifo_half_full, irq_on_timer_tick); plx9050_interrupt_control(dev_private->lcr_io_base, true, true, false, true, true); - } + outb(trig, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); dev_private->stop_counter *= (1 + dev_private->scan_delay); dev_private->chunk_counter = 0; @@ -768,9 +701,8 @@ static int pci9111_reset(struct comedi_device *dev) plx9050_interrupt_control(dev_private->lcr_io_base, true, true, true, true, false); - pci9111_trigger_source_set(dev, software); - pci9111_pretrigger_set(dev, false); - pci9111_autoscan_set(dev, false); + /* disable A/D triggers (software trigger mode) and auto scan off */ + outb(0, dev->iobase + PCI9111_AI_TRIG_CTRL_REG); /* Reset 8254 chip */ dev_private->div1 = 0; -- cgit From f40c283a170a2c817b4eb3616adb3f86b4577f49 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:45:52 -0700 Subject: staging: comedi: ke_counter: add ability to select counter clock source Add an (*insn_config) to the counter subdevice to allow the user to select the clock source for the counters using the INSN_CONFIG_SET_CLOCK_SRC instruction. The current selection can be queried with the instruction INSN_CONFIG_GET_CLOCK_SRC. Also, handle the INSN_CONFIG_RESET instruction to reset all the counters. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ke_counter.c | 57 +++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ke_counter.c b/drivers/staging/comedi/drivers/ke_counter.c index ec43c38958de..ed873c45e011 100644 --- a/drivers/staging/comedi/drivers/ke_counter.c +++ b/drivers/staging/comedi/drivers/ke_counter.c @@ -93,6 +93,58 @@ static int ke_counter_insn_read(struct comedi_device *dev, return insn->n; } +static void ke_counter_reset(struct comedi_device *dev) +{ + unsigned int chan; + + for (chan = 0; chan < 3; chan++) + outb(0, dev->iobase + KE_RESET_REG(chan)); +} + +static int ke_counter_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + switch (data[0]) { + case INSN_CONFIG_SET_CLOCK_SRC: + switch (data[1]) { + case KE_OSC_SEL_EXT: /* Pin 21 on D-sub */ + case KE_OSC_SEL_4MHZ: /* option */ + case KE_OSC_SEL_20MHZ: /* default */ + break; + default: + return -EINVAL; + } + outb(data[1], dev->iobase + KE_OSC_SEL_REG); + break; + case INSN_CONFIG_GET_CLOCK_SRC: + data[1] = inb(dev->iobase + KE_OSC_SEL_REG); + switch (data[1]) { + case KE_OSC_SEL_EXT: + data[2] = 0; /* Unknown */ + break; + case KE_OSC_SEL_4MHZ: + data[2] = 250; /* 250ns */ + break; + case KE_OSC_SEL_20MHZ: + data[2] = 50; /* 50ns */ + break; + default: + data[2] = 0; /* Invalid? */ + break; + } + break; + case INSN_CONFIG_RESET: + ke_counter_reset(dev); + break; + default: + return -EINVAL; + } + + return insn->n; +} + static int ke_counter_do_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -130,6 +182,7 @@ static int ke_counter_auto_attach(struct comedi_device *dev, s->range_table = &range_unknown; s->insn_read = ke_counter_insn_read; s->insn_write = ke_counter_insn_write; + s->insn_config = ke_counter_insn_config; s = &dev->subdevices[1]; s->type = COMEDI_SUBD_DO; @@ -141,9 +194,7 @@ static int ke_counter_auto_attach(struct comedi_device *dev, outb(KE_OSC_SEL_20MHZ, dev->iobase + KE_OSC_SEL_REG); - outb(0, dev->iobase + KE_RESET_REG(0)); - outb(0, dev->iobase + KE_RESET_REG(1)); - outb(0, dev->iobase + KE_RESET_REG(2)); + ke_counter_reset(dev); return 0; } -- cgit From ffd0a782bae3ac8355963a1c2e8028a73c666018 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:56:30 -0700 Subject: staging: comedi: ni_stc.h: remove NI_PRIVATE_COMMON macro This macro is used to create the private data structure that is used by the ni_atmio, ni_mio_cs, and ni_pcimio drivers. These drivers all include the ni_mio_common.c source to provide most of the driver functionality. The only driver specific information needed to convert the macro into a proper struct definition is the MAX_N_CALDACS define. This define is used to size a couple array members in the struct. The ni_atmio and ni_mio_cs drivers both define MAX_N_CALDACS as 32. The ni_pcimio driver defines it as (16+16+2). The ni_mio_common file only uses this define to sanity check that the struct members are large enough for the number of channels in the calibration subdevice. Move the MAX_N_CALDACS define to ni_stc.h and set it to the largest number of caldacs (34). The ni_atmio and ni_mio_cs drivers also add one additional member to the private data struct before using the NI_PRIVATE_COMMON macro. For the ni_atmio driver, the struct pnp_dev pointer can be saved in the comedi_device as the 'hw_dev'. The (*detach) of this driver can then use to_pnp_dev() to get it back when detaching the pnp device. In the ni_mio_cs driver, the struct pcmia_device pointer is not used so it can simply be removed. The NI_PRIVATE_COMMON macro can then be converted into a proper struct definition. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 18 +-- drivers/staging/comedi/drivers/ni_mio_cs.c | 8 -- drivers/staging/comedi/drivers/ni_pcimio.c | 5 - drivers/staging/comedi/drivers/ni_stc.h | 174 +++++++++++++++-------------- 4 files changed, 94 insertions(+), 111 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index d03935257b97..5b54a49c84b2 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -107,8 +107,6 @@ are not supported. #define NI_SIZE 0x20 -#define MAX_N_CALDACS 32 - static const struct ni_board_struct ni_boards[] = { {.device_id = 44, .isapnp_id = 0x0000, /* XXX unknown */ @@ -272,12 +270,6 @@ static const int ni_irqpin[] = { #define NI_E_IRQ_FLAGS 0 -struct ni_private { - struct pnp_dev *isapnp_dev; - NI_PRIVATE_COMMON - -}; - /* How we access registers */ #define ni_writel(a, b) (outl((a), (b)+dev->iobase)) @@ -428,7 +420,7 @@ static int ni_atmio_attach(struct comedi_device *dev, iobase = pnp_port_start(isapnp_dev, 0); irq = pnp_irq(isapnp_dev, 0); - devpriv->isapnp_dev = isapnp_dev; + comedi_set_hw_dev(dev, &isapnp_dev->dev); } ret = comedi_request_region(dev, iobase, NI_SIZE); @@ -477,12 +469,14 @@ static int ni_atmio_attach(struct comedi_device *dev, static void ni_atmio_detach(struct comedi_device *dev) { - struct ni_private *devpriv = dev->private; + struct pnp_dev *isapnp_dev; mio_common_detach(dev); comedi_legacy_detach(dev); - if (devpriv->isapnp_dev) - pnp_device_detach(devpriv->isapnp_dev); + + isapnp_dev = dev->hw_dev ? to_pnp_dev(dev->hw_dev) : NULL; + if (isapnp_dev) + pnp_device_detach(isapnp_dev); } static struct comedi_driver ni_atmio_driver = { diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index de421486b758..e0945f72a869 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -56,8 +56,6 @@ See the notes in the ni_atmio.o driver. #define NI_SIZE 0x20 -#define MAX_N_CALDACS 32 - static const struct ni_board_struct ni_boards[] = { { .device_id = 0x010d, @@ -143,12 +141,6 @@ static const struct ni_board_struct ni_boards[] = { #define IRQ_POLARITY 1 -struct ni_private { - - struct pcmcia_device *link; - -NI_PRIVATE_COMMON}; - /* How we access registers */ #define ni_writel(a, b) (outl((a), (b)+dev->iobase)) diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 89300dc78e35..cfe97345dd47 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -121,8 +121,6 @@ Bugs: #define PCIMIO 1 #undef ATMIO -#define MAX_N_CALDACS (16+16+2) - #define DRV_NAME "ni_pcimio" /* These are not all the possible ao ranges for 628x boards. @@ -1044,9 +1042,6 @@ static const struct ni_board_struct ni_boards[] = { }, }; -struct ni_private { -NI_PRIVATE_COMMON}; - /* How we access registers */ #define ni_writel(a, b) (writel((a), devpriv->mite->daq_io_addr + (b))) diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index f0630b7897b5..a09f3cd48923 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1416,92 +1416,94 @@ struct ni_board_struct { enum caldac_enum caldac[3]; }; -#define MAX_N_AO_CHAN 8 -#define NUM_GPCT 2 - -#define NI_PRIVATE_COMMON \ - uint16_t (*stc_readw)(struct comedi_device *dev, int register); \ - uint32_t (*stc_readl)(struct comedi_device *dev, int register); \ - void (*stc_writew)(struct comedi_device *dev, uint16_t value, int register); \ - void (*stc_writel)(struct comedi_device *dev, uint32_t value, int register); \ - \ - unsigned short dio_output; \ - unsigned short dio_control; \ - int ao0p, ao1p; \ - int lastchan; \ - int last_do; \ - int rt_irq; \ - int irqmask; \ - int aimode; \ - int ai_continuous; \ - int blocksize; \ - int n_left; \ - unsigned int ai_calib_source; \ - unsigned int ai_calib_source_enabled; \ - spinlock_t window_lock; \ - spinlock_t soft_reg_copy_lock; \ - spinlock_t mite_channel_lock; \ - \ - int changain_state; \ - unsigned int changain_spec; \ - \ - unsigned int caldac_maxdata_list[MAX_N_CALDACS]; \ - unsigned short ao[MAX_N_AO_CHAN]; \ - unsigned short caldacs[MAX_N_CALDACS]; \ - \ - unsigned short ai_cmd2; \ - \ - unsigned short ao_conf[MAX_N_AO_CHAN]; \ - unsigned short ao_mode1; \ - unsigned short ao_mode2; \ - unsigned short ao_mode3; \ - unsigned short ao_cmd1; \ - unsigned short ao_cmd2; \ - unsigned short ao_cmd3; \ - unsigned short ao_trigger_select; \ - \ - struct ni_gpct_device *counter_dev; \ - unsigned short an_trig_etc_reg; \ - \ - unsigned ai_offset[512]; \ - \ - unsigned long serial_interval_ns; \ - unsigned char serial_hw_mode; \ - unsigned short clock_and_fout; \ - unsigned short clock_and_fout2; \ - \ - unsigned short int_a_enable_reg; \ - unsigned short int_b_enable_reg; \ - unsigned short io_bidirection_pin_reg; \ - unsigned short rtsi_trig_direction_reg; \ - unsigned short rtsi_trig_a_output_reg; \ - unsigned short rtsi_trig_b_output_reg; \ - unsigned short pfi_output_select_reg[NUM_PFI_OUTPUT_SELECT_REGS]; \ - unsigned short ai_ao_select_reg; \ - unsigned short g0_g1_select_reg; \ - unsigned short cdio_dma_select_reg; \ - \ - unsigned clock_ns; \ - unsigned clock_source; \ - \ - unsigned short atrig_mode; \ - unsigned short atrig_high; \ - unsigned short atrig_low; \ - \ - unsigned short pwm_up_count; \ - unsigned short pwm_down_count; \ - \ - unsigned short ai_fifo_buffer[0x2000]; \ - uint8_t eeprom_buffer[M_SERIES_EEPROM_SIZE]; \ - uint32_t serial_number; \ - \ - struct mite_struct *mite; \ - struct mite_channel *ai_mite_chan; \ - struct mite_channel *ao_mite_chan;\ - struct mite_channel *cdo_mite_chan;\ - struct mite_dma_descriptor_ring *ai_mite_ring; \ - struct mite_dma_descriptor_ring *ao_mite_ring; \ - struct mite_dma_descriptor_ring *cdo_mite_ring; \ +#define MAX_N_CALDACS 34 +#define MAX_N_AO_CHAN 8 +#define NUM_GPCT 2 + +struct ni_private { + uint16_t (*stc_readw)(struct comedi_device *, int reg); + uint32_t (*stc_readl)(struct comedi_device *, int reg); + void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); + void (*stc_writel)(struct comedi_device *, uint32_t value, int reg); + + unsigned short dio_output; + unsigned short dio_control; + int ao0p, ao1p; + int lastchan; + int last_do; + int rt_irq; + int irqmask; + int aimode; + int ai_continuous; + int blocksize; + int n_left; + unsigned int ai_calib_source; + unsigned int ai_calib_source_enabled; + spinlock_t window_lock; + spinlock_t soft_reg_copy_lock; + spinlock_t mite_channel_lock; + + int changain_state; + unsigned int changain_spec; + + unsigned int caldac_maxdata_list[MAX_N_CALDACS]; + unsigned short ao[MAX_N_AO_CHAN]; + unsigned short caldacs[MAX_N_CALDACS]; + + unsigned short ai_cmd2; + + unsigned short ao_conf[MAX_N_AO_CHAN]; + unsigned short ao_mode1; + unsigned short ao_mode2; + unsigned short ao_mode3; + unsigned short ao_cmd1; + unsigned short ao_cmd2; + unsigned short ao_cmd3; + unsigned short ao_trigger_select; + + struct ni_gpct_device *counter_dev; + unsigned short an_trig_etc_reg; + + unsigned ai_offset[512]; + + unsigned long serial_interval_ns; + unsigned char serial_hw_mode; + unsigned short clock_and_fout; + unsigned short clock_and_fout2; + + unsigned short int_a_enable_reg; + unsigned short int_b_enable_reg; + unsigned short io_bidirection_pin_reg; + unsigned short rtsi_trig_direction_reg; + unsigned short rtsi_trig_a_output_reg; + unsigned short rtsi_trig_b_output_reg; + unsigned short pfi_output_select_reg[NUM_PFI_OUTPUT_SELECT_REGS]; + unsigned short ai_ao_select_reg; + unsigned short g0_g1_select_reg; + unsigned short cdio_dma_select_reg; + + unsigned clock_ns; + unsigned clock_source; + + unsigned short atrig_mode; + unsigned short atrig_high; + unsigned short atrig_low; + + unsigned short pwm_up_count; + unsigned short pwm_down_count; + + unsigned short ai_fifo_buffer[0x2000]; + uint8_t eeprom_buffer[M_SERIES_EEPROM_SIZE]; + uint32_t serial_number; + + struct mite_struct *mite; + struct mite_channel *ai_mite_chan; + struct mite_channel *ao_mite_chan; + struct mite_channel *cdo_mite_chan; + struct mite_dma_descriptor_ring *ai_mite_ring; + struct mite_dma_descriptor_ring *ao_mite_ring; + struct mite_dma_descriptor_ring *cdo_mite_ring; struct mite_dma_descriptor_ring *gpct_mite_ring[NUM_GPCT]; +}; #endif /* _COMEDI_NI_STC_H */ -- cgit From 9588fa8fe908c5501de5076de9a0c9d44ef737ec Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:56:31 -0700 Subject: staging: comedi: ni_stc.h: remove unused members from struct ni_private Remove all the unsed members from the private data for the ni mio drivers. The ao0p and ao1p members are only used in the ni_ao_reset() function and the code is commented out. Remove them, and the commented out code, as well. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 6 ------ drivers/staging/comedi/drivers/ni_stc.h | 8 -------- 2 files changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 68cd92bf17c6..45c42089f690 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3136,12 +3136,6 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - /* devpriv->ao0p=0x0000; */ - /* ni_writew(devpriv->ao0p,AO_Configuration); */ - - /* devpriv->ao1p=AO_Channel(1); */ - /* ni_writew(devpriv->ao1p,AO_Configuration); */ - ni_release_ao_mite_channel(dev); devpriv->stc_writew(dev, AO_Configuration_Start, Joint_Reset_Register); diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index a09f3cd48923..1cc035ba9c93 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1428,15 +1428,8 @@ struct ni_private { unsigned short dio_output; unsigned short dio_control; - int ao0p, ao1p; - int lastchan; - int last_do; - int rt_irq; - int irqmask; int aimode; int ai_continuous; - int blocksize; - int n_left; unsigned int ai_calib_source; unsigned int ai_calib_source_enabled; spinlock_t window_lock; @@ -1458,7 +1451,6 @@ struct ni_private { unsigned short ao_mode3; unsigned short ao_cmd1; unsigned short ao_cmd2; - unsigned short ao_cmd3; unsigned short ao_trigger_select; struct ni_gpct_device *counter_dev; -- cgit From 9c340ac934dbbfd46e776465b08391baac32d486 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 29 May 2014 10:56:32 -0700 Subject: staging: comedi: ni_stc.h: add read/write callbacks to struct ni_private The {read,write}[bwl] macros used to access the registers in the ni_atmio, ni_mio_cs, and ni_pcimio drivers and the included ni_mio_common.c file all rely on a local variable having a specific name. They also require some of the ni_mio_common code to need a __maybe_unused tag on the devpriv local variable. Remove all the macros by converting them into private functions and storing the callbacks in the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 62 ++-- drivers/staging/comedi/drivers/ni_mio_common.c | 379 +++++++++++++------------ drivers/staging/comedi/drivers/ni_mio_cs.c | 55 +++- drivers/staging/comedi/drivers/ni_pcimio.c | 118 +++++--- drivers/staging/comedi/drivers/ni_stc.h | 7 + 5 files changed, 384 insertions(+), 237 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 5b54a49c84b2..ae9ace9ee99b 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -272,12 +272,35 @@ static const int ni_irqpin[] = { /* How we access registers */ -#define ni_writel(a, b) (outl((a), (b)+dev->iobase)) -#define ni_readl(a) (inl((a)+dev->iobase)) -#define ni_writew(a, b) (outw((a), (b)+dev->iobase)) -#define ni_readw(a) (inw((a)+dev->iobase)) -#define ni_writeb(a, b) (outb((a), (b)+dev->iobase)) -#define ni_readb(a) (inb((a)+dev->iobase)) +static uint8_t ni_atmio_inb(struct comedi_device *dev, int reg) +{ + return inb(dev->iobase + reg); +} + +static uint16_t ni_atmio_inw(struct comedi_device *dev, int reg) +{ + return inw(dev->iobase + reg); +} + +static uint32_t ni_atmio_inl(struct comedi_device *dev, int reg) +{ + return inl(dev->iobase + reg); +} + +static void ni_atmio_outb(struct comedi_device *dev, uint8_t val, int reg) +{ + outb(val, dev->iobase + reg); +} + +static void ni_atmio_outw(struct comedi_device *dev, uint16_t val, int reg) +{ + outw(val, dev->iobase + reg); +} + +static void ni_atmio_outl(struct comedi_device *dev, uint32_t val, int reg) +{ + outl(val, dev->iobase + reg); +} /* How we access windowed registers */ @@ -292,10 +315,10 @@ static void ni_atmio_win_out(struct comedi_device *dev, uint16_t data, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if ((addr) < 8) { - ni_writew(data, addr * 2); + devpriv->writew(dev, data, addr * 2); } else { - ni_writew(addr, Window_Address); - ni_writew(data, Window_Data); + devpriv->writew(dev, addr, Window_Address); + devpriv->writew(dev, data, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -308,10 +331,10 @@ static uint16_t ni_atmio_win_in(struct comedi_device *dev, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - ret = ni_readw(addr * 2); + ret = devpriv->readw(dev, addr * 2); } else { - ni_writew(addr, Window_Address); - ret = ni_readw(Window_Data); + devpriv->writew(dev, addr, Window_Address); + ret = devpriv->readw(dev, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); @@ -405,10 +428,17 @@ static int ni_atmio_attach(struct comedi_device *dev, return ret; devpriv = dev->private; - devpriv->stc_writew = &ni_atmio_win_out; - devpriv->stc_readw = &ni_atmio_win_in; - devpriv->stc_writel = &win_out2; - devpriv->stc_readl = &win_in2; + devpriv->readb = ni_atmio_inb; + devpriv->readw = ni_atmio_inw; + devpriv->readl = ni_atmio_inl; + devpriv->writeb = ni_atmio_outb; + devpriv->writew = ni_atmio_outw; + devpriv->writel = ni_atmio_outl; + + devpriv->stc_writew = ni_atmio_win_out; + devpriv->stc_readw = ni_atmio_win_in; + devpriv->stc_writel = win_out2; + devpriv->stc_readl = win_in2; iobase = it->options[0]; irq = it->options[1]; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 45c42089f690..7632bd6cafc1 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -275,12 +275,12 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, case AI_AO_Select: devpriv->ai_ao_select_reg &= ~bit_mask; devpriv->ai_ao_select_reg |= bit_values & bit_mask; - ni_writeb(devpriv->ai_ao_select_reg, AI_AO_Select); + devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); break; case G0_G1_Select: devpriv->g0_g1_select_reg &= ~bit_mask; devpriv->g0_g1_select_reg |= bit_values & bit_mask; - ni_writeb(devpriv->g0_g1_select_reg, G0_G1_Select); + devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); break; default: printk("Warning %s() called with invalid register\n", __func__); @@ -356,7 +356,7 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, (ni_stc_dma_channel_select_bitfield(mite_channel) << CDO_DMA_Select_Shift) & CDO_DMA_Select_Mask; } - ni_writeb(devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); + devpriv->writeb(dev, devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); mmiowb(); spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags); } @@ -572,11 +572,11 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) if (board->reg_type == ni_reg_6143) { /* Flush the 6143 data FIFO */ - ni_writel(0x10, AIFIFO_Control_6143); /* Flush fifo */ - ni_writel(0x00, AIFIFO_Control_6143); /* Flush fifo */ + devpriv->writel(dev, 0x10, AIFIFO_Control_6143); + devpriv->writel(dev, 0x00, AIFIFO_Control_6143); /* Wait for complete */ for (i = 0; i < timeout; i++) { - if (!(ni_readl(AIFIFO_Status_6143) & 0x10)) + if (!(devpriv->readl(dev, AIFIFO_Status_6143) & 0x10)) break; udelay(1); } @@ -586,8 +586,8 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) } else { devpriv->stc_writew(dev, 1, ADC_FIFO_Clear); if (board->reg_type == ni_reg_625x) { - ni_writeb(0, M_Offset_Static_AI_Control(0)); - ni_writeb(1, M_Offset_Static_AI_Control(0)); + devpriv->writeb(dev, 0, M_Offset_Static_AI_Control(0)); + devpriv->writeb(dev, 1, M_Offset_Static_AI_Control(0)); #if 0 /* the NI example code does 3 convert pulses for 625x boards, but that appears to be wrong in practice. */ @@ -628,8 +628,8 @@ static inline void ni_ao_win_outw(struct comedi_device *dev, uint16_t data, unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(addr, AO_Window_Address_611x); - ni_writew(data, AO_Window_Data_611x); + devpriv->writew(dev, addr, AO_Window_Address_611x); + devpriv->writew(dev, data, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -640,8 +640,8 @@ static inline void ni_ao_win_outl(struct comedi_device *dev, uint32_t data, unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(addr, AO_Window_Address_611x); - ni_writel(data, AO_Window_Data_611x); + devpriv->writew(dev, addr, AO_Window_Address_611x); + devpriv->writel(dev, data, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -652,8 +652,8 @@ static inline unsigned short ni_ao_win_inw(struct comedi_device *dev, int addr) unsigned short data; spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(addr, AO_Window_Address_611x); - data = ni_readw(AO_Window_Data_611x); + devpriv->writew(dev, addr, AO_Window_Address_611x); + data = devpriv->readw(dev, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); return data; } @@ -770,6 +770,7 @@ static void ni_ao_fifo_load(struct comedi_device *dev, struct comedi_subdevice *s, int n) { const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; int chan; @@ -798,9 +799,9 @@ static void ni_ao_fifo_load(struct comedi_device *dev, i++; packed_data |= (d << 16) & 0xffff0000; } - ni_writel(packed_data, DAC_FIFO_Data_611x); + devpriv->writel(dev, packed_data, DAC_FIFO_Data_611x); } else { - ni_writew(d, DAC_FIFO_Data); + devpriv->writew(dev, d, DAC_FIFO_Data); } chan++; chan %= cmd->chanlist_len; @@ -888,7 +889,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, u32 dl; for (i = 0; i < n / 2; i++) { - dl = ni_readl(ADC_FIFO_Data_611x); + dl = devpriv->readl(dev, ADC_FIFO_Data_611x); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16) & 0xffff; data[1] = dl & 0xffff; @@ -896,7 +897,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } /* Check if there's a single sample stuck in the FIFO */ if (n % 2) { - dl = ni_readl(ADC_FIFO_Data_611x); + dl = devpriv->readl(dev, ADC_FIFO_Data_611x); data[0] = dl & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -906,7 +907,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ for (i = 0; i < n / 2; i++) { - dl = ni_readl(AIFIFO_Data_6143); + dl = devpriv->readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; data[1] = dl & 0xffff; @@ -914,8 +915,9 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } if (n % 2) { /* Assume there is a single sample stuck in the FIFO */ - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); + /* Get stranded sample into FIFO */ + devpriv->writel(dev, 0x01, AIFIFO_Control_6143); + dl = devpriv->readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -928,7 +930,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } for (i = 0; i < n; i++) { devpriv->ai_fifo_buffer[i] = - ni_readw(ADC_FIFO_Data_Register); + devpriv->readw(dev, ADC_FIFO_Data_Register); } cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, n * @@ -965,7 +967,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) while ((devpriv->stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St) == 0) { - dl = ni_readl(ADC_FIFO_Data_611x); + dl = devpriv->readl(dev, ADC_FIFO_Data_611x); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16); @@ -974,8 +976,8 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) } } else if (board->reg_type == ni_reg_6143) { i = 0; - while (ni_readl(AIFIFO_Status_6143) & 0x04) { - dl = ni_readl(AIFIFO_Data_6143); + while (devpriv->readl(dev, AIFIFO_Status_6143) & 0x04) { + dl = devpriv->readl(dev, AIFIFO_Data_6143); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16); @@ -984,9 +986,10 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) i += 2; } /* Check if stranded sample is present */ - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); + if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { + /* Get stranded sample into FIFO */ + devpriv->writel(dev, 0x01, AIFIFO_Control_6143); + dl = devpriv->readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -1007,7 +1010,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) if (fifo_empty) break; devpriv->ai_fifo_buffer[i] = - ni_readw(ADC_FIFO_Data_Register); + devpriv->readw(dev, ADC_FIFO_Data_Register); } cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, i * @@ -1020,7 +1023,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) static void get_last_sample_611x(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1029,8 +1032,8 @@ static void get_last_sample_611x(struct comedi_device *dev) return; /* Check if there's a single sample stuck in the FIFO */ - if (ni_readb(XXX_Status) & 0x80) { - dl = ni_readl(ADC_FIFO_Data_611x); + if (devpriv->readb(dev, XXX_Status) & 0x80) { + dl = devpriv->readl(dev, ADC_FIFO_Data_611x); data = (dl & 0xffff); cfc_write_to_buffer(s, data); } @@ -1039,7 +1042,7 @@ static void get_last_sample_611x(struct comedi_device *dev) static void get_last_sample_6143(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1048,9 +1051,10 @@ static void get_last_sample_6143(struct comedi_device *dev) return; /* Check if there's a single sample stuck in the FIFO */ - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); + if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { + /* Get stranded sample into FIFO */ + devpriv->writel(dev, 0x01, AIFIFO_Control_6143); + dl = devpriv->readl(dev, AIFIFO_Data_6143); /* This may get the hi/lo data in the wrong order */ data = (dl >> 16) & 0xffff; @@ -1416,7 +1420,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_clear_ai_fifo(dev); if (board->reg_type != ni_reg_6143) - ni_writeb(0, Misc_Command); + devpriv->writeb(dev, 0, Misc_Command); devpriv->stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ devpriv->stc_writew(dev, @@ -1560,9 +1564,10 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, bypass_bits |= MSeries_AI_Bypass_Dither_Bit; /* don't use 2's complement encoding */ bypass_bits |= MSeries_AI_Bypass_Polarity_Bit; - ni_writel(bypass_bits, M_Offset_AI_Config_FIFO_Bypass); + devpriv->writel(dev, bypass_bits, + M_Offset_AI_Config_FIFO_Bypass); } else { - ni_writel(0, M_Offset_AI_Config_FIFO_Bypass); + devpriv->writel(dev, 0, M_Offset_AI_Config_FIFO_Bypass); } offset = 0; for (i = 0; i < n_chan; i++) { @@ -1600,7 +1605,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, config_bits |= MSeries_AI_Config_Dither_Bit; /* don't use 2's complement encoding */ config_bits |= MSeries_AI_Config_Polarity_Bit; - ni_writew(config_bits, M_Offset_AI_Config_FIFO_Data); + devpriv->writew(dev, config_bits, M_Offset_AI_Config_FIFO_Data); } ni_prime_channelgain_list(dev); } @@ -1669,21 +1674,21 @@ static void ni_load_channelgain_list(struct comedi_device *dev, if ((list[0] & CR_ALT_SOURCE) && !devpriv->ai_calib_source_enabled) { /* Strobe Relay enable bit */ - ni_writew(devpriv->ai_calib_source | - Calibration_Channel_6143_RelayOn, - Calibration_Channel_6143); - ni_writew(devpriv->ai_calib_source, - Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOn, + Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source, + Calibration_Channel_6143); devpriv->ai_calib_source_enabled = 1; msleep_interruptible(100); /* Allow relays to change */ } else if (!(list[0] & CR_ALT_SOURCE) && devpriv->ai_calib_source_enabled) { /* Strobe Relay disable bit */ - ni_writew(devpriv->ai_calib_source | - Calibration_Channel_6143_RelayOff, - Calibration_Channel_6143); - ni_writew(devpriv->ai_calib_source, - Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOff, + Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source, + Calibration_Channel_6143); devpriv->ai_calib_source_enabled = 0; msleep_interruptible(100); /* Allow relays to change */ } @@ -1711,8 +1716,8 @@ static void ni_load_channelgain_list(struct comedi_device *dev, hi = 0; if ((list[i] & CR_ALT_SOURCE)) { if (board->reg_type == ni_reg_611x) - ni_writew(CR_CHAN(list[i]) & 0x0003, - Calibration_Channel_Select_611x); + devpriv->writew(dev, CR_CHAN(list[i]) & 0x0003, + Calibration_Channel_Select_611x); } else { if (board->reg_type == ni_reg_611x) aref = AREF_DIFF; @@ -1734,7 +1739,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } hi |= AI_CONFIG_CHANNEL(chan); - ni_writew(hi, Configuration_Memory_High); + devpriv->writew(dev, hi, Configuration_Memory_High); if (board->reg_type != ni_reg_6143) { lo = range; @@ -1743,7 +1748,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, if (dither) lo |= AI_DITHER; - ni_writew(lo, Configuration_Memory_Low); + devpriv->writew(dev, lo, Configuration_Memory_Low); } } @@ -1784,16 +1789,19 @@ static int ni_ai_insn_read(struct comedi_device *dev, /* The 611x has screwy 32-bit FIFOs. */ d = 0; for (i = 0; i < NI_TIMEOUT; i++) { - if (ni_readb(XXX_Status) & 0x80) { - d = (ni_readl(ADC_FIFO_Data_611x) >> 16) - & 0xffff; + if (devpriv->readb(dev, XXX_Status) & 0x80) { + d = devpriv->readl(dev, + ADC_FIFO_Data_611x); + d >>= 16; + d &= 0xffff; break; } if (!(devpriv->stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St)) { - d = ni_readl(ADC_FIFO_Data_611x) & - 0xffff; + d = devpriv->readl(dev, + ADC_FIFO_Data_611x); + d &= 0xffff; break; } } @@ -1813,9 +1821,13 @@ static int ni_ai_insn_read(struct comedi_device *dev, /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ dl = 0; for (i = 0; i < NI_TIMEOUT; i++) { - if (ni_readl(AIFIFO_Status_6143) & 0x01) { - ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ - dl = ni_readl(AIFIFO_Data_6143); + if (devpriv->readl(dev, AIFIFO_Status_6143) & + 0x01) { + /* Get stranded sample into FIFO */ + devpriv->writel(dev, 0x01, + AIFIFO_Control_6143); + dl = devpriv->readl(dev, + AIFIFO_Data_6143); break; } } @@ -1842,10 +1854,11 @@ static int ni_ai_insn_read(struct comedi_device *dev, return -ETIME; } if (board->reg_type & ni_reg_m_series_mask) { - data[n] = - ni_readl(M_Offset_AI_FIFO_Data) & mask; + dl = devpriv->readl(dev, M_Offset_AI_FIFO_Data); + dl &= mask; + data[n] = dl; } else { - d = ni_readw(ADC_FIFO_Data_Register); + d = devpriv->readw(dev, ADC_FIFO_Data_Register); d += signbits; /* subtle: needs to be short addition */ data[n] = d; } @@ -2500,7 +2513,8 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; devpriv->ai_calib_source = calib_source; - ni_writew(calib_source, Calibration_Channel_6143); + devpriv->writew(dev, calib_source, + Calibration_Channel_6143); } else { unsigned int calib_source; unsigned int calib_source_adjust; @@ -2512,8 +2526,8 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; devpriv->ai_calib_source = calib_source; if (board->reg_type == ni_reg_611x) { - ni_writeb(calib_source_adjust, - Cal_Gain_Select_611x); + devpriv->writeb(dev, calib_source_adjust, + Cal_Gain_Select_611x); } } return 2; @@ -2566,9 +2580,10 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, if (timed) { for (i = 0; i < board->n_aochan; ++i) { devpriv->ao_conf[i] &= ~MSeries_AO_Update_Timed_Bit; - ni_writeb(devpriv->ao_conf[i], - M_Offset_AO_Config_Bank(i)); - ni_writeb(0xf, M_Offset_AO_Waveform_Order(i)); + devpriv->writeb(dev, devpriv->ao_conf[i], + M_Offset_AO_Config_Bank(i)); + devpriv->writeb(dev, 0xf, + M_Offset_AO_Waveform_Order(i)); } } for (i = 0; i < n_chans; i++) { @@ -2581,21 +2596,23 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, switch (krange->max - krange->min) { case 20000000: conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; - ni_writeb(0, M_Offset_AO_Reference_Attenuation(chan)); + devpriv->writeb(dev, 0, + M_Offset_AO_Reference_Attenuation(chan)); break; case 10000000: conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; - ni_writeb(0, M_Offset_AO_Reference_Attenuation(chan)); + devpriv->writeb(dev, 0, + M_Offset_AO_Reference_Attenuation(chan)); break; case 4000000: conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; - ni_writeb(MSeries_Attenuate_x5_Bit, - M_Offset_AO_Reference_Attenuation(chan)); + devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, + M_Offset_AO_Reference_Attenuation(chan)); break; case 2000000: conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; - ni_writeb(MSeries_Attenuate_x5_Bit, - M_Offset_AO_Reference_Attenuation(chan)); + devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, + M_Offset_AO_Reference_Attenuation(chan)); break; default: printk("%s: bug! unhandled ao reference voltage\n", @@ -2616,9 +2633,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, } if (timed) conf |= MSeries_AO_Update_Timed_Bit; - ni_writeb(conf, M_Offset_AO_Config_Bank(chan)); + devpriv->writeb(dev, conf, M_Offset_AO_Config_Bank(chan)); devpriv->ao_conf[chan] = conf; - ni_writeb(i, M_Offset_AO_Waveform_Order(chan)); + devpriv->writeb(dev, i, M_Offset_AO_Waveform_Order(chan)); } return invert; } @@ -2664,7 +2681,7 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, conf |= (CR_AREF(chanspec[i]) == AREF_OTHER) ? AO_Ground_Ref : 0; - ni_writew(conf, AO_Configuration); + devpriv->writew(dev, conf, AO_Configuration); devpriv->ao_conf[chan] = conf; } return invert; @@ -2709,10 +2726,10 @@ static int ni_ao_insn_write(struct comedi_device *dev, devpriv->ao[chan] = data[0]; if (board->reg_type & ni_reg_m_series_mask) { - ni_writew(data[0], M_Offset_DAC_Direct_Data(chan)); + devpriv->writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); } else - ni_writew(data[0] ^ invert, - (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); + devpriv->writew(dev, data[0] ^ invert, + (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); return 1; } @@ -3225,14 +3242,14 @@ static int ni_m_series_dio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); if (ret) return ret; - ni_writel(s->io_bits, M_Offset_DIO_Direction); + devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); return insn->n; } @@ -3242,12 +3259,12 @@ static int ni_m_series_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; if (comedi_dio_update_state(s, data)) - ni_writel(s->state, M_Offset_Static_Digital_Output); + devpriv->writel(dev, s->state, M_Offset_Static_Digital_Output); - data[1] = ni_readl(M_Offset_Static_Digital_Input); + data[1] = devpriv->readl(dev, M_Offset_Static_Digital_Input); return insn->n; } @@ -3326,14 +3343,14 @@ static int ni_cdo_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trig_num) { -#ifdef PCIDMA struct ni_private *devpriv = dev->private; - unsigned long flags; -#endif struct comedi_cmd *cmd = &s->async->cmd; + const unsigned timeout = 1000; int retval = 0; unsigned i; - const unsigned timeout = 1000; +#ifdef PCIDMA + unsigned long flags; +#endif if (trig_num != cmd->start_arg) return -EINVAL; @@ -3358,11 +3375,12 @@ static int ni_cdo_inttrig(struct comedi_device *dev, #endif /* * XXX not sure what interrupt C group does -* ni_writeb(Interrupt_Group_C_Enable_Bit, +* devpriv->writeb(dev, Interrupt_Group_C_Enable_Bit, * M_Offset_Interrupt_C_Enable); wait for dma to fill output fifo */ for (i = 0; i < timeout; ++i) { - if (ni_readl(M_Offset_CDIO_Status) & CDO_FIFO_Full_Bit) + if (devpriv->readl(dev, M_Offset_CDIO_Status) & + CDO_FIFO_Full_Bit) break; udelay(10); } @@ -3371,20 +3389,20 @@ static int ni_cdo_inttrig(struct comedi_device *dev, s->cancel(dev, s); return -EIO; } - ni_writel(CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | - CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, - M_Offset_CDIO_Command); + devpriv->writel(dev, CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | + CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, + M_Offset_CDIO_Command); return retval; } static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; const struct comedi_cmd *cmd = &s->async->cmd; unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; int retval; - ni_writel(CDO_Reset_Bit, M_Offset_CDIO_Command); + devpriv->writel(dev, CDO_Reset_Bit, M_Offset_CDIO_Command); switch (cmd->scan_begin_src) { case TRIG_EXT: cdo_mode_bits |= @@ -3397,11 +3415,11 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } if (cmd->scan_begin_arg & CR_INVERT) cdo_mode_bits |= CDO_Polarity_Bit; - ni_writel(cdo_mode_bits, M_Offset_CDO_Mode); + devpriv->writel(dev, cdo_mode_bits, M_Offset_CDO_Mode); if (s->io_bits) { - ni_writel(s->state, M_Offset_CDO_FIFO_Data); - ni_writel(CDO_SW_Update_Bit, M_Offset_CDIO_Command); - ni_writel(s->io_bits, M_Offset_CDO_Mask_Enable); + devpriv->writel(dev, s->state, M_Offset_CDO_FIFO_Data); + devpriv->writel(dev, CDO_SW_Update_Bit, M_Offset_CDIO_Command); + devpriv->writel(dev, s->io_bits, M_Offset_CDO_Mask_Enable); } else { comedi_error(dev, "attempted to run digital output command with no lines configured as outputs"); @@ -3418,17 +3436,18 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; - ni_writel(CDO_Disarm_Bit | CDO_Error_Interrupt_Enable_Clear_Bit | - CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | - CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, - M_Offset_CDIO_Command); + devpriv->writel(dev, CDO_Disarm_Bit | + CDO_Error_Interrupt_Enable_Clear_Bit | + CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | + CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, + M_Offset_CDIO_Command); /* -* XXX not sure what interrupt C group does ni_writeb(0, +* XXX not sure what interrupt C group does devpriv->writeb(dev, 0, * M_Offset_Interrupt_C_Enable); */ - ni_writel(0, M_Offset_CDO_Mask_Enable); + devpriv->writel(dev, 0, M_Offset_CDO_Mask_Enable); ni_release_cdo_mite_channel(dev); return 0; } @@ -3436,7 +3455,7 @@ static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) static void handle_cdio_interrupt(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; unsigned cdio_status; struct comedi_subdevice *s = &dev->subdevices[NI_DIO_SUBDEV]; #ifdef PCIDMA @@ -3460,16 +3479,18 @@ static void handle_cdio_interrupt(struct comedi_device *dev) spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); #endif - cdio_status = ni_readl(M_Offset_CDIO_Status); + cdio_status = devpriv->readl(dev, M_Offset_CDIO_Status); if (cdio_status & (CDO_Overrun_Bit | CDO_Underflow_Bit)) { /* printk("cdio error: statux=0x%x\n", cdio_status); */ - ni_writel(CDO_Error_Interrupt_Confirm_Bit, M_Offset_CDIO_Command); /* XXX just guessing this is needed and does something useful */ + /* XXX just guessing this is needed and does something useful */ + devpriv->writel(dev, CDO_Error_Interrupt_Confirm_Bit, + M_Offset_CDIO_Command); s->async->events |= COMEDI_CB_OVERFLOW; } if (cdio_status & CDO_FIFO_Empty_Bit) { /* printk("cdio fifo empty\n"); */ - ni_writel(CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, - M_Offset_CDIO_Command); + devpriv->writel(dev, CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, + M_Offset_CDIO_Command); /* s->async->events |= COMEDI_CB_EOA; */ } cfc_handle_events(dev, s); @@ -3786,28 +3807,28 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, switch (reg) { /* m-series-only registers */ case NITIO_G0_CNT_MODE: - ni_writew(bits, M_Offset_G0_Counting_Mode); + devpriv->writew(dev, bits, M_Offset_G0_Counting_Mode); break; case NITIO_G1_CNT_MODE: - ni_writew(bits, M_Offset_G1_Counting_Mode); + devpriv->writew(dev, bits, M_Offset_G1_Counting_Mode); break; case NITIO_G0_GATE2: - ni_writew(bits, M_Offset_G0_Second_Gate); + devpriv->writew(dev, bits, M_Offset_G0_Second_Gate); break; case NITIO_G1_GATE2: - ni_writew(bits, M_Offset_G1_Second_Gate); + devpriv->writew(dev, bits, M_Offset_G1_Second_Gate); break; case NITIO_G0_DMA_CFG: - ni_writew(bits, M_Offset_G0_DMA_Config); + devpriv->writew(dev, bits, M_Offset_G0_DMA_Config); break; case NITIO_G1_DMA_CFG: - ni_writew(bits, M_Offset_G1_DMA_Config); + devpriv->writew(dev, bits, M_Offset_G1_DMA_Config); break; case NITIO_G0_ABZ: - ni_writew(bits, M_Offset_G0_MSeries_ABZ); + devpriv->writew(dev, bits, M_Offset_G0_MSeries_ABZ); break; case NITIO_G1_ABZ: - ni_writew(bits, M_Offset_G1_MSeries_ABZ); + devpriv->writew(dev, bits, M_Offset_G1_MSeries_ABZ); break; /* 32 bit registers */ @@ -3849,9 +3870,9 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, switch (reg) { /* m-series only registers */ case NITIO_G0_DMA_STATUS: - return ni_readw(M_Offset_G0_DMA_Status); + return devpriv->readw(dev, M_Offset_G0_DMA_Status); case NITIO_G1_DMA_STATUS: - return ni_readw(M_Offset_G1_DMA_Status); + return devpriv->readw(dev, M_Offset_G1_DMA_Status); /* 32 bit registers */ case NITIO_G0_HW_SAVE: @@ -3948,13 +3969,13 @@ static int ni_freq_out_insn_config(struct comedi_device *dev, static int ni_8255_callback(int dir, int port, int data, unsigned long arg) { struct comedi_device *dev = (struct comedi_device *)arg; - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; if (dir) { - ni_writeb(data, Port_A + 2 * port); + devpriv->writeb(dev, data, Port_A + 2 * port); return 0; } else { - return ni_readb(Port_A + 2 * port); + return devpriv->readb(dev, Port_A + 2 * port); } } @@ -4019,9 +4040,9 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, data[4] = down_count * devpriv->clock_ns; return -EAGAIN; } - ni_writel(MSeries_Cal_PWM_High_Time_Bits(up_count) | - MSeries_Cal_PWM_Low_Time_Bits(down_count), - M_Offset_Cal_PWM); + devpriv->writel(dev, MSeries_Cal_PWM_High_Time_Bits(up_count) | + MSeries_Cal_PWM_Low_Time_Bits(down_count), + M_Offset_Cal_PWM); devpriv->pwm_up_count = up_count; devpriv->pwm_down_count = down_count; return 5; @@ -4088,9 +4109,9 @@ static int ni_6143_pwm_config(struct comedi_device *dev, data[4] = down_count * devpriv->clock_ns; return -EAGAIN; } - ni_writel(up_count, Calibration_HighTime_6143); + devpriv->writel(dev, up_count, Calibration_HighTime_6143); devpriv->pwm_up_count = up_count; - ni_writel(down_count, Calibration_LowTime_6143); + devpriv->writel(dev, down_count, Calibration_LowTime_6143); devpriv->pwm_down_count = down_count; return 5; break; @@ -4194,14 +4215,16 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) } for (bit = 1 << (bits - 1); bit; bit >>= 1) { - ni_writeb(((bit & bitstring) ? 0x02 : 0), Serial_Command); + devpriv->writeb(dev, ((bit & bitstring) ? 0x02 : 0), + Serial_Command); udelay(1); - ni_writeb(1 | ((bit & bitstring) ? 0x02 : 0), Serial_Command); + devpriv->writeb(dev, 1 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); udelay(1); } - ni_writeb(loadbit, Serial_Command); + devpriv->writeb(dev, loadbit, Serial_Command); udelay(1); - ni_writeb(0, Serial_Command); + devpriv->writeb(dev, 0, Serial_Command); } static int ni_calib_insn_write(struct comedi_device *dev, @@ -4282,25 +4305,26 @@ static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) static int ni_read_eeprom(struct comedi_device *dev, int addr) { - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; int bit; int bitstring; bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); - ni_writeb(0x04, Serial_Command); + devpriv->writeb(dev, 0x04, Serial_Command); for (bit = 0x8000; bit; bit >>= 1) { - ni_writeb(0x04 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); - ni_writeb(0x05 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); + devpriv->writeb(dev, 0x04 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); + devpriv->writeb(dev, 0x05 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); } bitstring = 0; for (bit = 0x80; bit; bit >>= 1) { - ni_writeb(0x04, Serial_Command); - ni_writeb(0x05, Serial_Command); - bitstring |= ((ni_readb(XXX_Status) & PROMOUT) ? bit : 0); + devpriv->writeb(dev, 0x04, Serial_Command); + devpriv->writeb(dev, 0x05, Serial_Command); + bitstring |= ((devpriv->readb(dev, XXX_Status) & PROMOUT) + ? bit : 0); } - ni_writeb(0x00, Serial_Command); + devpriv->writeb(dev, 0x00, Serial_Command); return bitstring; } @@ -4403,8 +4427,8 @@ static int ni_m_series_set_pfi_routing(struct comedi_device *dev, ~MSeries_PFI_Output_Select_Mask(chan); devpriv->pfi_output_select_reg[array_offset] |= MSeries_PFI_Output_Select_Bits(chan, source); - ni_writew(devpriv->pfi_output_select_reg[array_offset], - M_Offset_PFI_Output_Select(pfi_reg_index)); + devpriv->writew(dev, devpriv->pfi_output_select_reg[array_offset], + M_Offset_PFI_Output_Select(pfi_reg_index)); return 2; } @@ -4434,15 +4458,15 @@ static int ni_config_filter(struct comedi_device *dev, enum ni_pfi_filter_select filter) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; unsigned bits; if ((board->reg_type & ni_reg_m_series_mask) == 0) return -ENOTSUPP; - bits = ni_readl(M_Offset_PFI_Filter); + bits = devpriv->readl(dev, M_Offset_PFI_Filter); bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); - ni_writel(bits, M_Offset_PFI_Filter); + devpriv->writel(dev, bits, M_Offset_PFI_Filter); return 0; } @@ -4493,15 +4517,15 @@ static int ni_pfi_insn_bits(struct comedi_device *dev, unsigned int *data) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv __maybe_unused = dev->private; + struct ni_private *devpriv = dev->private; if (!(board->reg_type & ni_reg_m_series_mask)) return -ENOTSUPP; if (comedi_dio_update_state(s, data)) - ni_writew(s->state, M_Offset_PFI_DO); + devpriv->writew(dev, s->state, M_Offset_PFI_DO); - data[1] = ni_readw(M_Offset_PFI_DI); + data[1] = devpriv->readw(dev, M_Offset_PFI_DI); return insn->n; } @@ -4766,7 +4790,8 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, } break; } - ni_writew(devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); + devpriv->writew(dev, devpriv->clock_and_fout2, + M_Offset_Clock_and_Fout2); pll_control_bits |= MSeries_PLL_Divisor_Bits(freq_divider) | MSeries_PLL_Multiplier_Bits(freq_multiplier); @@ -4774,11 +4799,12 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", * freq_divider, freq_multiplier, pll_control_bits); */ /* printk("clock_ns=%d\n", devpriv->clock_ns); */ - ni_writew(pll_control_bits, M_Offset_PLL_Control); + devpriv->writew(dev, pll_control_bits, M_Offset_PLL_Control); devpriv->clock_source = source; /* it seems to typically take a few hundred microseconds for PLL to lock */ for (i = 0; i < timeout; ++i) { - if (ni_readw(M_Offset_PLL_Status) & MSeries_PLL_Locked_Bit) + if (devpriv->readw(dev, M_Offset_PLL_Status) & + MSeries_PLL_Locked_Bit) break; udelay(1); } @@ -4806,9 +4832,9 @@ static int ni_set_master_clock(struct comedi_device *dev, devpriv->clock_and_fout2 &= ~(MSeries_Timebase1_Select_Bit | MSeries_Timebase3_Select_Bit); - ni_writew(devpriv->clock_and_fout2, - M_Offset_Clock_and_Fout2); - ni_writew(0, M_Offset_PLL_Control); + devpriv->writew(dev, devpriv->clock_and_fout2, + M_Offset_Clock_and_Fout2); + devpriv->writew(dev, 0, M_Offset_PLL_Control); } devpriv->clock_source = source; } else { @@ -5355,13 +5381,15 @@ static int ni_E_init(struct comedi_device *dev) s->async_dma_dir = DMA_BIDIRECTIONAL; s->len_chanlist = s->n_chan; - ni_writel(CDO_Reset_Bit | CDI_Reset_Bit, M_Offset_CDIO_Command); - ni_writel(s->io_bits, M_Offset_DIO_Direction); + devpriv->writel(dev, CDO_Reset_Bit | CDI_Reset_Bit, + M_Offset_CDIO_Command); + devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); } else { s->insn_bits = &ni_dio_insn_bits; s->insn_config = &ni_dio_insn_config; devpriv->dio_control = DIO_Pins_Dir(s->io_bits); - ni_writew(devpriv->dio_control, DIO_Control_Register); + devpriv->writew(dev, devpriv->dio_control, + DIO_Control_Register); } /* 8255 device */ @@ -5388,7 +5416,7 @@ static int ni_E_init(struct comedi_device *dev) s->insn_config = &ni_m_series_pwm_config; s->n_chan = 1; s->maxdata = 0; - ni_writel(0x0, M_Offset_Cal_PWM); + devpriv->writel(dev, 0x0, M_Offset_Cal_PWM); } else if (board->reg_type == ni_reg_6143) { /* internal PWM analog output used for AI nonlinearity calibration */ s->subdev_flags = SDF_INTERNAL; @@ -5422,10 +5450,10 @@ static int ni_E_init(struct comedi_device *dev) if (board->reg_type & ni_reg_m_series_mask) { unsigned i; s->n_chan = 16; - ni_writew(s->state, M_Offset_PFI_DO); + devpriv->writew(dev, s->state, M_Offset_PFI_DO); for (i = 0; i < NUM_PFI_OUTPUT_SELECT_REGS; ++i) { - ni_writew(devpriv->pfi_output_select_reg[i], - M_Offset_PFI_Output_Select(i + 1)); + devpriv->writew(dev, devpriv->pfi_output_select_reg[i], + M_Offset_PFI_Output_Select(i + 1)); } } else { s->n_chan = 10; @@ -5559,19 +5587,20 @@ static int ni_E_init(struct comedi_device *dev) } /* DMA setup */ - ni_writeb(devpriv->ai_ao_select_reg, AI_AO_Select); - ni_writeb(devpriv->g0_g1_select_reg, G0_G1_Select); + devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); + devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); if (board->reg_type & ni_reg_6xxx_mask) { - ni_writeb(0, Magic_611x); + devpriv->writeb(dev, 0, Magic_611x); } else if (board->reg_type & ni_reg_m_series_mask) { int channel; for (channel = 0; channel < board->n_aochan; ++channel) { - ni_writeb(0xf, M_Offset_AO_Waveform_Order(channel)); - ni_writeb(0x0, - M_Offset_AO_Reference_Attenuation(channel)); + devpriv->writeb(dev, 0xf, + M_Offset_AO_Waveform_Order(channel)); + devpriv->writeb(dev, 0x0, + M_Offset_AO_Reference_Attenuation(channel)); } - ni_writeb(0x0, M_Offset_AO_Calibration); + devpriv->writeb(dev, 0x0, M_Offset_AO_Calibration); } return 0; diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index e0945f72a869..d61baffb4bf0 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -143,12 +143,35 @@ static const struct ni_board_struct ni_boards[] = { /* How we access registers */ -#define ni_writel(a, b) (outl((a), (b)+dev->iobase)) -#define ni_readl(a) (inl((a)+dev->iobase)) -#define ni_writew(a, b) (outw((a), (b)+dev->iobase)) -#define ni_readw(a) (inw((a)+dev->iobase)) -#define ni_writeb(a, b) (outb((a), (b)+dev->iobase)) -#define ni_readb(a) (inb((a)+dev->iobase)) +static uint8_t mio_cs_inb(struct comedi_device *dev, int reg) +{ + return inb(dev->iobase + reg); +} + +static uint16_t mio_cs_inw(struct comedi_device *dev, int reg) +{ + return inw(dev->iobase + reg); +} + +static uint32_t mio_cs_inl(struct comedi_device *dev, int reg) +{ + return inl(dev->iobase + reg); +} + +static void mio_cs_outb(struct comedi_device *dev, uint8_t val, int reg) +{ + outb(val, dev->iobase + reg); +} + +static void mio_cs_outw(struct comedi_device *dev, uint16_t val, int reg) +{ + outw(val, dev->iobase + reg); +} + +static void mio_cs_outl(struct comedi_device *dev, uint32_t val, int reg) +{ + outl(val, dev->iobase + reg); +} /* How we access windowed registers */ @@ -163,10 +186,10 @@ static void mio_cs_win_out(struct comedi_device *dev, uint16_t data, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - ni_writew(data, addr * 2); + devpriv->writew(dev, data, addr * 2); } else { - ni_writew(addr, Window_Address); - ni_writew(data, Window_Data); + devpriv->writew(dev, addr, Window_Address); + devpriv->writew(dev, data, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -179,10 +202,10 @@ static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - ret = ni_readw(addr * 2); + ret = devpriv->readw(dev, addr * 2); } else { - ni_writew(addr, Window_Address); - ret = ni_readw(Window_Data); + devpriv->writew(dev, addr, Window_Address); + ret = devpriv->readw(dev, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); @@ -252,6 +275,14 @@ static int mio_cs_auto_attach(struct comedi_device *dev, return ret; devpriv = dev->private; + + devpriv->readb = mio_cs_inb; + devpriv->readw = mio_cs_inw; + devpriv->readl = mio_cs_inl; + devpriv->writeb = mio_cs_outb; + devpriv->writew = mio_cs_outw; + devpriv->writel = mio_cs_outl; + devpriv->stc_writew = mio_cs_win_out; devpriv->stc_readw = mio_cs_win_in; devpriv->stc_writel = win_out2; diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index cfe97345dd47..c1c2730cf3e1 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1044,12 +1044,47 @@ static const struct ni_board_struct ni_boards[] = { /* How we access registers */ -#define ni_writel(a, b) (writel((a), devpriv->mite->daq_io_addr + (b))) -#define ni_readl(a) (readl(devpriv->mite->daq_io_addr + (a))) -#define ni_writew(a, b) (writew((a), devpriv->mite->daq_io_addr + (b))) -#define ni_readw(a) (readw(devpriv->mite->daq_io_addr + (a))) -#define ni_writeb(a, b) (writeb((a), devpriv->mite->daq_io_addr + (b))) -#define ni_readb(a) (readb(devpriv->mite->daq_io_addr + (a))) +static uint8_t pcimio_readb(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return readb(devpriv->mite->daq_io_addr + reg); +} + +static uint16_t pcimio_readw(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return readw(devpriv->mite->daq_io_addr + reg); +} + +static uint32_t pcimio_readl(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return readl(devpriv->mite->daq_io_addr + reg); +} + +static void pcimio_writeb(struct comedi_device *dev, uint8_t val, int reg) +{ + struct ni_private *devpriv = dev->private; + + writeb(val, devpriv->mite->daq_io_addr + reg); +} + +static void pcimio_writew(struct comedi_device *dev, uint16_t val, int reg) +{ + struct ni_private *devpriv = dev->private; + + writew(val, devpriv->mite->daq_io_addr + reg); +} + +static void pcimio_writel(struct comedi_device *dev, uint32_t val, int reg) +{ + struct ni_private *devpriv = dev->private; + + writel(val, devpriv->mite->daq_io_addr + reg); +} /* How we access STC registers */ @@ -1067,8 +1102,8 @@ static void e_series_win_out(struct comedi_device *dev, uint16_t data, int reg) unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(reg, Window_Address); - ni_writew(data, Window_Data); + devpriv->writew(dev, reg, Window_Address); + devpriv->writew(dev, data, Window_Data); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -1079,8 +1114,8 @@ static uint16_t e_series_win_in(struct comedi_device *dev, int reg) uint16_t ret; spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(reg, Window_Address); - ret = ni_readw(Window_Data); + devpriv->writew(dev, reg, Window_Address); + ret = devpriv->readw(dev, Window_Data); spin_unlock_irqrestore(&devpriv->window_lock, flags); return ret; @@ -1119,12 +1154,12 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, break; case AI_SI2_Load_A_Register: /* this is actually a 32 bit register on m series boards */ - ni_writel(data, M_Offset_AI_SI2_Load_A); + devpriv->writel(dev, data, M_Offset_AI_SI2_Load_A); return; break; case AI_SI2_Load_B_Register: /* this is actually a 32 bit register on m series boards */ - ni_writel(data, M_Offset_AI_SI2_Load_B); + devpriv->writel(dev, data, M_Offset_AI_SI2_Load_B); return; break; case AI_START_STOP_Select_Register: @@ -1242,7 +1277,7 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, return; break; } - ni_writew(data, offset); + devpriv->writew(dev, data, offset); } static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) @@ -1261,7 +1296,7 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) offset = M_Offset_AO_Status_2; break; case DIO_Serial_Input_Register: - return ni_readb(M_Offset_SCXI_Serial_Data_In); + return devpriv->readb(dev, M_Offset_SCXI_Serial_Data_In); break; case Joint_Status_1_Register: offset = M_Offset_Joint_Status_1; @@ -1280,7 +1315,7 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) return 0; break; } - return ni_readw(offset); + return devpriv->readw(dev, offset); } static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, @@ -1325,7 +1360,7 @@ static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, return; break; } - ni_writel(data, offset); + devpriv->writel(dev, data, offset); } static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) @@ -1354,7 +1389,7 @@ static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) return 0; break; } - return ni_readl(offset); + return devpriv->readl(dev, offset); } #define interrupt_pin(a) 0 @@ -1403,12 +1438,14 @@ static void m_series_init_eeprom_buffer(struct comedi_device *dev) BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number)); for (i = 0; i < serial_number_eeprom_length; ++i) { char *byte_ptr = (char *)&devpriv->serial_number + i; - *byte_ptr = ni_readb(serial_number_eeprom_offset + i); + *byte_ptr = devpriv->readb(dev, + serial_number_eeprom_offset + i); } devpriv->serial_number = be32_to_cpu(devpriv->serial_number); for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) - devpriv->eeprom_buffer[i] = ni_readb(Start_Cal_EEPROM + i); + devpriv->eeprom_buffer[i] = devpriv->readb(dev, + Start_Cal_EEPROM + i); writel(old_iodwbsr1_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR_1); writel(old_iodwbsr_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR); @@ -1425,18 +1462,24 @@ static void init_6143(struct comedi_device *dev) devpriv->stc_writew(dev, 0, Interrupt_Control_Register); /* Initialise 6143 AI specific bits */ - ni_writeb(0x00, Magic_6143); /* Set G0,G1 DMA mode to E series version */ - ni_writeb(0x80, PipelineDelay_6143); /* Set EOCMode, ADCMode and pipelinedelay */ - ni_writeb(0x00, EOC_Set_6143); /* Set EOC Delay */ + + /* Set G0,G1 DMA mode to E series version */ + devpriv->writeb(dev, 0x00, Magic_6143); + /* Set EOCMode, ADCMode and pipelinedelay */ + devpriv->writeb(dev, 0x80, PipelineDelay_6143); + /* Set EOC Delay */ + devpriv->writeb(dev, 0x00, EOC_Set_6143); /* Set the FIFO half full level */ - ni_writel(board->ai_fifo_depth / 2, AIFIFO_Flag_6143); + devpriv->writel(dev, board->ai_fifo_depth / 2, AIFIFO_Flag_6143); /* Strobe Relay disable bit */ devpriv->ai_calib_source_enabled = 0; - ni_writew(devpriv->ai_calib_source | Calibration_Channel_6143_RelayOff, - Calibration_Channel_6143); - ni_writew(devpriv->ai_calib_source, Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOff, + Calibration_Channel_6143); + devpriv->writew(dev, devpriv->ai_calib_source, + Calibration_Channel_6143); } static void pcimio_detach(struct comedi_device *dev) @@ -1489,16 +1532,23 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (!devpriv->mite) return -ENOMEM; + devpriv->readb = pcimio_readb; + devpriv->readw = pcimio_readw; + devpriv->readl = pcimio_readl; + devpriv->writeb = pcimio_writeb; + devpriv->writew = pcimio_writew; + devpriv->writel = pcimio_writel; + if (board->reg_type & ni_reg_m_series_mask) { - devpriv->stc_writew = &m_series_stc_writew; - devpriv->stc_readw = &m_series_stc_readw; - devpriv->stc_writel = &m_series_stc_writel; - devpriv->stc_readl = &m_series_stc_readl; + devpriv->stc_writew = m_series_stc_writew; + devpriv->stc_readw = m_series_stc_readw; + devpriv->stc_writel = m_series_stc_writel; + devpriv->stc_readl = m_series_stc_readl; } else { - devpriv->stc_writew = &e_series_win_out; - devpriv->stc_readw = &e_series_win_in; - devpriv->stc_writel = &win_out2; - devpriv->stc_readl = &win_in2; + devpriv->stc_writew = e_series_win_out; + devpriv->stc_readw = e_series_win_in; + devpriv->stc_writel = win_out2; + devpriv->stc_readl = win_in2; } ret = mite_setup(devpriv->mite); diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 1cc035ba9c93..a93ef6b488e1 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1421,6 +1421,13 @@ struct ni_board_struct { #define NUM_GPCT 2 struct ni_private { + uint8_t (*readb)(struct comedi_device *, int reg); + uint16_t (*readw)(struct comedi_device *, int reg); + uint32_t (*readl)(struct comedi_device *, int reg); + void (*writeb)(struct comedi_device *, uint8_t value, int reg); + void (*writew)(struct comedi_device *, uint16_t value, int reg); + void (*writel)(struct comedi_device *, uint32_t value, int reg); + uint16_t (*stc_readw)(struct comedi_device *, int reg); uint32_t (*stc_readl)(struct comedi_device *, int reg); void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); -- cgit From 92271551b60318da442a5f22c5d9c6b99b98fba4 Mon Sep 17 00:00:00 2001 From: Hoang Tran Date: Mon, 16 Jun 2014 15:18:37 +0800 Subject: staging: goldfish: fix coding style. Using an else following a break or return can unnecessarily indent code blocks. This patch fixes coding style reported by checkpatch.pl, a part of eudyptula challenge. Signed-off-by: Hoang Tran Signed-off-by: Greg Kroah-Hartman --- drivers/staging/goldfish/goldfish_audio.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/goldfish/goldfish_audio.c b/drivers/staging/goldfish/goldfish_audio.c index cbd456770af0..a166424b3478 100644 --- a/drivers/staging/goldfish/goldfish_audio.c +++ b/drivers/staging/goldfish/goldfish_audio.c @@ -203,10 +203,10 @@ static int goldfish_audio_open(struct inode *ip, struct file *fp) AUDIO_INT_WRITE_BUFFER_2_EMPTY); AUDIO_WRITE(audio_data, AUDIO_INT_ENABLE, AUDIO_INT_MASK); return 0; - } else { - atomic_dec(&open_count); - return -EBUSY; } + + atomic_dec(&open_count); + return -EBUSY; } static int goldfish_audio_release(struct inode *ip, struct file *fp) @@ -223,8 +223,8 @@ static long goldfish_audio_ioctl(struct file *fp, unsigned int cmd, /* temporary workaround, until we switch to the ALSA API */ if (cmd == 315) return -1; - else - return 0; + + return 0; } static irqreturn_t goldfish_audio_interrupt(int irq, void *dev_id) -- cgit From f4a8f5288929e11c0e393d14e59eee1cca2c8ae4 Mon Sep 17 00:00:00 2001 From: Wolfgang Ocker Date: Mon, 2 Jun 2014 22:48:06 +0200 Subject: staging: comedi: style - use kmalloc_array(n, s, ...) instead of kmalloc(n*s, ...) Fix a style issue reported by checkpatch.pl for the Eudyptula challenge Signed-off-by: Wolfgang Ocker Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 9d99fb3c18a6..c54ed42f8310 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -1295,7 +1295,7 @@ static int do_insnlist_ioctl(struct comedi_device *dev, if (copy_from_user(&insnlist, arg, sizeof(insnlist))) return -EFAULT; - data = kmalloc(sizeof(unsigned int) * MAX_SAMPLES, GFP_KERNEL); + data = kmalloc_array(MAX_SAMPLES, sizeof(unsigned int), GFP_KERNEL); if (!data) { ret = -ENOMEM; goto error; @@ -1376,7 +1376,7 @@ static int do_insn_ioctl(struct comedi_device *dev, unsigned int *data = NULL; int ret = 0; - data = kmalloc(sizeof(unsigned int) * MAX_SAMPLES, GFP_KERNEL); + data = kmalloc_array(MAX_SAMPLES, sizeof(unsigned int), GFP_KERNEL); if (!data) { ret = -ENOMEM; goto error; -- cgit From cee49b3cfb4be8da81b346c9ed405cc5bae056c6 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Wed, 4 Jun 2014 00:23:39 +0200 Subject: staging: tidspbridge: pmgr: dspapi.c: Cleaning up uninitialized variable There is a risk that the variables will be used without being initialized. Has also improved error handling, after an email proposal from Dan Carpenter. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/pmgr/dspapi.c | 64 +++++++++++++++---------------- 1 file changed, 31 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/pmgr/dspapi.c b/drivers/staging/tidspbridge/pmgr/dspapi.c index b7d5c8cbb2a1..c4ccf17d21c0 100644 --- a/drivers/staging/tidspbridge/pmgr/dspapi.c +++ b/drivers/staging/tidspbridge/pmgr/dspapi.c @@ -340,23 +340,23 @@ int api_init_complete2(void) u32 mgrwrap_enum_node_info(union trapped_args *args, void *pr_ctxt) { u8 *pndb_props; - u32 num_nodes; - int status = 0; + u32 num_nodes = 0; + int status; u32 size = args->args_mgr_enumnode_info.ndb_props_size; if (size < sizeof(struct dsp_ndbprops)) return -EINVAL; + size = sizeof(struct dsp_ndbprops); pndb_props = kmalloc(size, GFP_KERNEL); if (pndb_props == NULL) - status = -ENOMEM; + return -ENOMEM; + + status = + mgr_enum_node_info(args->args_mgr_enumnode_info.node_id, + (struct dsp_ndbprops *)pndb_props, size, + &num_nodes); - if (!status) { - status = - mgr_enum_node_info(args->args_mgr_enumnode_info.node_id, - (struct dsp_ndbprops *)pndb_props, size, - &num_nodes); - } CP_TO_USR(args->args_mgr_enumnode_info.ndb_props, pndb_props, status, size); CP_TO_USR(args->args_mgr_enumnode_info.num_nodes, &num_nodes, status, @@ -372,24 +372,26 @@ u32 mgrwrap_enum_node_info(union trapped_args *args, void *pr_ctxt) u32 mgrwrap_enum_proc_info(union trapped_args *args, void *pr_ctxt) { u8 *processor_info; - u8 num_procs; - int status = 0; + u8 num_procs = 0; + int status; u32 size = args->args_mgr_enumproc_info.processor_info_size; if (size < sizeof(struct dsp_processorinfo)) return -EINVAL; - processor_info = kmalloc(size, GFP_KERNEL); + if (size > sizeof(struct mgr_processorextinfo)) + size = sizeof(struct mgr_processorextinfo); + + processor_info = kzalloc(size, GFP_KERNEL); if (processor_info == NULL) - status = -ENOMEM; + return -ENOMEM; + + status = + mgr_enum_processor_info(args->args_mgr_enumproc_info. + processor_id, + (struct dsp_processorinfo *) + processor_info, size, &num_procs); - if (!status) { - status = - mgr_enum_processor_info(args->args_mgr_enumproc_info. - processor_id, - (struct dsp_processorinfo *) - processor_info, size, &num_procs); - } CP_TO_USR(args->args_mgr_enumproc_info.processor_info, processor_info, status, size); CP_TO_USR(args->args_mgr_enumproc_info.num_procs, &num_procs, @@ -475,11 +477,11 @@ u32 mgrwrap_wait_for_bridge_events(union trapped_args *args, void *pr_ctxt) int status = 0; struct dsp_notification *anotifications[MAX_EVENTS]; struct dsp_notification notifications[MAX_EVENTS]; - u32 index, i; + u32 index = 0, i; u32 count = args->args_mgr_wait.count; if (count > MAX_EVENTS) - status = -EINVAL; + return -EINVAL; /* get the array of pointers to user structures */ CP_FM_USR(anotifications, args->args_mgr_wait.anotifications, @@ -487,19 +489,15 @@ u32 mgrwrap_wait_for_bridge_events(union trapped_args *args, void *pr_ctxt) /* get the events */ for (i = 0; i < count; i++) { CP_FM_USR(¬ifications[i], anotifications[i], status, 1); - if (status || !notifications[i].handle) { - status = -EINVAL; - break; - } + if (status || !notifications[i].handle) + return -EINVAL; /* set the array of pointers to kernel structures */ anotifications[i] = ¬ifications[i]; } - if (!status) { - status = mgr_wait_for_bridge_events(anotifications, count, - &index, - args->args_mgr_wait. - timeout); - } + status = mgr_wait_for_bridge_events(anotifications, count, + &index, + args->args_mgr_wait. + timeout); CP_TO_USR(args->args_mgr_wait.index, &index, status, 1); return status; } @@ -1755,7 +1753,7 @@ u32 strmwrap_register_notify(union trapped_args *args, void *pr_ctxt) */ u32 strmwrap_select(union trapped_args *args, void *pr_ctxt) { - u32 mask; + u32 mask = 0; struct strm_object *strm_tab[MAX_STREAMS]; int status = 0; struct strm_res_object *strm_res; -- cgit From cc0be81f00472d782804293766ddd9d1c2b4ebd1 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Wed, 4 Jun 2014 11:07:54 +0200 Subject: staging: tidspbridge: use safer test on the result of find_first_zero_bit Find_first_zero_bit considers BITS_PER_LONG bits at a time, and thus may return a larger number than the maximum position argument if that position is not a multiple of BITS_PER_LONG. The semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // @@ expression e1,e2,e3; statement S1,S2; @@ e1 = find_first_zero_bit(e2,e3) ... if (e1 - == + >= e3) S1 else S2 // Signed-off-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/rmgr/node.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c index 9d3044a384ee..305f3a60db71 100644 --- a/drivers/staging/tidspbridge/rmgr/node.c +++ b/drivers/staging/tidspbridge/rmgr/node.c @@ -935,7 +935,7 @@ int node_connect(struct node_object *node1, u32 stream1, node2_type == NODE_DAISSOCKET)) { /* Find available pipe */ pipe_id = find_first_zero_bit(hnode_mgr->pipe_map, MAXPIPES); - if (pipe_id == MAXPIPES) { + if (pipe_id >= MAXPIPES) { status = -ECONNREFUSED; goto out_unlock; } @@ -1008,7 +1008,7 @@ int node_connect(struct node_object *node1, u32 stream1, status = -EINVAL; goto out_unlock; } - if (chnl_id == CHNL_MAXCHANNELS) { + if (chnl_id >= CHNL_MAXCHANNELS) { status = -ECONNREFUSED; goto out_unlock; } -- cgit From d734c05f081852a4e1a733440b9dceed64a9488e Mon Sep 17 00:00:00 2001 From: Mathias Engan Date: Thu, 12 Jun 2014 20:58:12 +0200 Subject: staging: keucr: usb.c: add blank lines after declarations Add blank line after declarations in eucr_suspend and eucr_resume as reported by checkpatch. Signed-off-by: Mathias Engan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/keucr/usb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/keucr/usb.c b/drivers/staging/keucr/usb.c index 12ebde7315cd..1e2073b28f0f 100644 --- a/drivers/staging/keucr/usb.c +++ b/drivers/staging/keucr/usb.c @@ -37,6 +37,7 @@ MODULE_DEVICE_TABLE(usb, eucr_usb_ids); static int eucr_suspend(struct usb_interface *iface, pm_message_t message) { struct us_data *us = usb_get_intfdata(iface); + pr_info("--- eucr_suspend ---\n"); /* Wait until no command is running */ mutex_lock(&us->dev_mutex); @@ -51,8 +52,8 @@ static int eucr_suspend(struct usb_interface *iface, pm_message_t message) static int eucr_resume(struct usb_interface *iface) { u8 tmp = 0; - struct us_data *us = usb_get_intfdata(iface); + pr_info("--- eucr_resume---\n"); mutex_lock(&us->dev_mutex); -- cgit From e22a955ca736d811e4014992cb88b59079f4d7c3 Mon Sep 17 00:00:00 2001 From: Radek Dostal Date: Sat, 14 Jun 2014 16:13:08 +0200 Subject: staging/fwserial: (coding style) add blank line after every declaration Style-only modifications to make checkpatch.pl -f a bit happier. Fixes warning: "Missing a blank line after declarations" Signed-off-by: Radek Dostal Signed-off-by: Greg Kroah-Hartman --- drivers/staging/fwserial/fwserial.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c index 384758b11e3c..61eb304860e1 100644 --- a/drivers/staging/fwserial/fwserial.c +++ b/drivers/staging/fwserial/fwserial.c @@ -785,6 +785,7 @@ static int fwtty_tx(struct fwtty_port *port, bool drain) len = dma_fifo_out_level(&port->tx_fifo); if (len) { unsigned long delay = (n == -ENOMEM) ? HZ : 1; + schedule_delayed_work(&port->drain, delay); } len = dma_fifo_level(&port->tx_fifo); @@ -1995,6 +1996,7 @@ static struct fwtty_peer *__fwserial_peer_by_node_id(struct fw_card *card, list_for_each_entry_rcu(peer, &serial->peer_list, list) { int g = peer->generation; + smp_rmb(); if (generation == g && id == peer->node_id) return peer; @@ -2015,6 +2017,7 @@ static void __dump_peer_list(struct fw_card *card) list_for_each_entry_rcu(peer, &serial->peer_list, list) { int g = peer->generation; + smp_rmb(); fwtty_dbg(card, "peer(%d:%x) guid: %016llx\n", g, peer->node_id, (unsigned long long) peer->guid); @@ -2120,6 +2123,7 @@ static int fwserial_add_peer(struct fw_serial *serial, struct fw_unit *unit) serial->self = peer; if (create_loop_dev) { struct fwtty_port *port; + port = fwserial_claim_port(peer, num_ttys); if (!IS_ERR(port)) { struct virt_plug_params params; -- cgit From 9c079f7cdd87ca069ab157e7de95231b8b14baa8 Mon Sep 17 00:00:00 2001 From: Radek Dostal Date: Sat, 14 Jun 2014 16:13:09 +0200 Subject: staging/fwserial: (coding style) remove not needed return statements Style-only modifications to make checkpatch.pl -f a bit happier. Fixes warning: "void function return statements are not generally useful" Signed-off-by: Radek Dostal Signed-off-by: Greg Kroah-Hartman --- drivers/staging/fwserial/fwserial.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c index 61eb304860e1..af0c3878358c 100644 --- a/drivers/staging/fwserial/fwserial.c +++ b/drivers/staging/fwserial/fwserial.c @@ -2615,7 +2615,6 @@ cleanup: if (port) fwserial_release_port(port, false); kfree(pkt); - return; } static void fwserial_handle_unplug_req(struct work_struct *work) @@ -2667,7 +2666,6 @@ cleanup: if (port) fwserial_release_port(port, true); kfree(pkt); - return; } static int fwserial_parse_mgmt_write(struct fwtty_peer *peer, -- cgit From f2a53f47ee7c932c0584a178e65e59600498242e Mon Sep 17 00:00:00 2001 From: Jeff Oczek Date: Sat, 14 Jun 2014 09:21:16 -0400 Subject: staging: tidspbridge: Add parameter names to function ptrs in struct dbll_attrs Add more descriptive names to function pointers in definition of struct dbll_attrs Signed-off-by: Jeff Oczek Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/include/dspbridge/dblldefs.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h index 30e0aa0540de..c66f23970e61 100644 --- a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h +++ b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h @@ -168,11 +168,11 @@ struct dbll_attrs { * These file manipulation functions should be compatible with the * "C" run time library functions of the same name. */ - s32(*fread) (void *, size_t, size_t, void *); - s32(*fseek) (void *, long, int); - s32(*ftell) (void *); - s32(*fclose) (void *); - void *(*fopen) (const char *, const char *); + s32 (*fread)(void *ptr, size_t size, size_t count, void *filp); + s32 (*fseek)(void *filp, long offset, int origin); + s32 (*ftell)(void *filp); + s32 (*fclose)(void *filp); + void *(*fopen)(const char *path, const char *mode); }; /* -- cgit From c79386368edab72ae54c639150a1390e4e7c7a3e Mon Sep 17 00:00:00 2001 From: Jeff Oczek Date: Sat, 14 Jun 2014 09:21:17 -0400 Subject: staging: tidspbridge: Fix whitespace for pointers in function headers Change style in function headers from 'type * ptr' to 'type *ptr' Signed-off-by: Jeff Oczek Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/include/dspbridge/dblldefs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h index c66f23970e61..a19e07809ff6 100644 --- a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h +++ b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h @@ -130,7 +130,7 @@ typedef s32(*dbll_seek_fxn) (void *, long, int); * FALSE: Failed to find symbol. */ typedef bool(*dbll_sym_lookup) (void *handle, void *parg, void *rmm_handle, - const char *name, struct dbll_sym_val ** sym); + const char *name, struct dbll_sym_val **sym); /* * ======== dbll_tell_fxn ======== @@ -309,7 +309,7 @@ typedef bool(*dbll_get_c_addr_fxn) (struct dbll_library_obj *lib, char *name, * Ensures: */ typedef int(*dbll_get_sect_fxn) (struct dbll_library_obj *lib, - char *name, u32 * addr, u32 * size); + char *name, u32 *addr, u32 *size); /* * ======== dbll_init ======== -- cgit From 6eaf07883cb0513f1ecdafbbc73feacb62895a3e Mon Sep 17 00:00:00 2001 From: Tair Rzayev Date: Sat, 31 May 2014 23:33:59 +0300 Subject: staging: wlan-ng: cfg80211.c: Fix sparse warnings Include necessary header files to avoid "should be static" sparse warning Signed-off-by: Tair Rzayev Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/cfg80211.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/cfg80211.c b/drivers/staging/wlan-ng/cfg80211.c index 723319ee08f3..3727f6d25cf1 100644 --- a/drivers/staging/wlan-ng/cfg80211.c +++ b/drivers/staging/wlan-ng/cfg80211.c @@ -1,4 +1,6 @@ /* cfg80211 Interface for prism2_usb module */ +#include "hfa384x.h" +#include "prism2mgmt.h" /* Prism2 channel/frequency/bitrate declarations */ -- cgit From add260430bcd57026bbf099404ab45b6e0ed57be Mon Sep 17 00:00:00 2001 From: Honggang Li Date: Thu, 12 Jun 2014 15:13:38 +0800 Subject: lustre/osc/osc_dev.c remove space between sizeof and open parenthesis Signed-off-by: Honggang Li Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/osc/osc_dev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/osc/osc_dev.c b/drivers/staging/lustre/lustre/osc/osc_dev.c index a7c1ec0d56fe..5249e6689dfc 100644 --- a/drivers/staging/lustre/lustre/osc/osc_dev.c +++ b/drivers/staging/lustre/lustre/osc/osc_dev.c @@ -61,32 +61,32 @@ struct lu_kmem_descr osc_caches[] = { { .ckd_cache = &osc_lock_kmem, .ckd_name = "osc_lock_kmem", - .ckd_size = sizeof (struct osc_lock) + .ckd_size = sizeof(struct osc_lock) }, { .ckd_cache = &osc_object_kmem, .ckd_name = "osc_object_kmem", - .ckd_size = sizeof (struct osc_object) + .ckd_size = sizeof(struct osc_object) }, { .ckd_cache = &osc_thread_kmem, .ckd_name = "osc_thread_kmem", - .ckd_size = sizeof (struct osc_thread_info) + .ckd_size = sizeof(struct osc_thread_info) }, { .ckd_cache = &osc_session_kmem, .ckd_name = "osc_session_kmem", - .ckd_size = sizeof (struct osc_session) + .ckd_size = sizeof(struct osc_session) }, { .ckd_cache = &osc_req_kmem, .ckd_name = "osc_req_kmem", - .ckd_size = sizeof (struct osc_req) + .ckd_size = sizeof(struct osc_req) }, { .ckd_cache = &osc_extent_kmem, .ckd_name = "osc_extent_kmem", - .ckd_size = sizeof (struct osc_extent) + .ckd_size = sizeof(struct osc_extent) }, { .ckd_cache = &osc_quota_kmem, -- cgit From 4e1a6d2e2c3bb42aa28404d28ca636ee7dbd40a1 Mon Sep 17 00:00:00 2001 From: Honggang Li Date: Thu, 12 Jun 2014 15:13:39 +0800 Subject: lustre/osc/osc_dev.c add a blank line after declarations Signed-off-by: Honggang Li Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/osc/osc_dev.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/osc/osc_dev.c b/drivers/staging/lustre/lustre/osc/osc_dev.c index 5249e6689dfc..048a5a5cf7f5 100644 --- a/drivers/staging/lustre/lustre/osc/osc_dev.c +++ b/drivers/staging/lustre/lustre/osc/osc_dev.c @@ -132,6 +132,7 @@ static void osc_key_fini(const struct lu_context *ctx, struct lu_context_key *key, void *data) { struct osc_thread_info *info = data; + OBD_SLAB_FREE_PTR(info, osc_thread_kmem); } @@ -156,6 +157,7 @@ static void osc_session_fini(const struct lu_context *ctx, struct lu_context_key *key, void *data) { struct osc_session *info = data; + OBD_SLAB_FREE_PTR(info, osc_session_kmem); } -- cgit From 24008203f8d8b9f3ccf449458550aa78c9021041 Mon Sep 17 00:00:00 2001 From: John Church Date: Mon, 2 Jun 2014 14:31:10 +0100 Subject: staging: lustre: fix sparse warnings for undeclared symbols This patch fixes the following sparse warnings for drivers/staging/lustre/lnet/lnet/router.c: router.c:139:1: warning: symbol 'lnet_ni_notify_locked' was not declared. Should it be static? router.c:277:1: warning: symbol 'lnet_add_route_to_rnet' was not declared. Should it be static? Signed-off-by: John Church Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/lnet/router.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 926923a104c5..6e598add9c71 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -135,7 +135,7 @@ lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, cfs_time_t when) CDEBUG(D_NET, "set %s %d\n", libcfs_nid2str(lp->lp_nid), alive); } -void +static void lnet_ni_notify_locked(lnet_ni_t *ni, lnet_peer_t *lp) { int alive; @@ -273,7 +273,7 @@ static void lnet_shuffle_seed(void) } /* NB expects LNET_LOCK held */ -void +static void lnet_add_route_to_rnet (lnet_remotenet_t *rnet, lnet_route_t *route) { unsigned int len = 0; -- cgit From 4fad177c6f2bccdb567f104eea870535fa554880 Mon Sep 17 00:00:00 2001 From: Marc Fite Date: Thu, 12 Jun 2014 19:28:16 +0200 Subject: staging: lustre: removed spaces at the start of a line This is a patch in order to remove 2 lines with spaces at the start of the line. Signed-off-by: Marc Fite Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdecho/lproc_echo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c index 8fe9245a8aad..c972eb48b10a 100644 --- a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c +++ b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c @@ -51,7 +51,7 @@ static struct lprocfs_vars lprocfs_echo_module_vars[] = { void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) { - lvars->module_vars = lprocfs_echo_module_vars; - lvars->obd_vars = lprocfs_echo_obd_vars; + lvars->module_vars = lprocfs_echo_module_vars; + lvars->obd_vars = lprocfs_echo_obd_vars; } #endif /* LPROCFS */ -- cgit From cab80d98f50bbacb7df79bd267d0b2b008b2d84f Mon Sep 17 00:00:00 2001 From: Vitaly Osipov Date: Sat, 14 Jun 2014 17:29:51 +1000 Subject: staging: lustre: remove memset(0) after LIBCFS_ALLOC Joe Perches mentioned on driverdev-devel that memset after LIBCFS_ALLOC is not necessary as it is already done during LIBCFS_ALLOC_POST. This commit removes these unnecessary memsets. Based on the results of running a cocci patch along the lines of: @@ expression E1, E2; @@ LIBCFS_ALLOC (E1,E2); ... - memset(E1,0,E2); Signed-off-by: Vitaly Osipov Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 5 ----- drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c | 4 ---- drivers/staging/lustre/lnet/lnet/router.c | 1 - drivers/staging/lustre/lnet/selftest/console.c | 10 ---------- drivers/staging/lustre/lnet/selftest/framework.c | 2 -- drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c | 2 -- 6 files changed, 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 892c41991f83..1a4c9e625641 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -2430,8 +2430,6 @@ kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev) return -ENOMEM; } - memset(hdev->ibh_mrs, 0, sizeof(*hdev->ibh_mrs) * hdev->ibh_nmrs); - for (i = 0; i < hdev->ibh_nmrs; i++) { struct ib_phys_buf ipb; __u64 iova; @@ -2704,7 +2702,6 @@ kiblnd_create_dev(char *ifname) if (dev == NULL) return NULL; - memset(dev, 0, sizeof(*dev)); netdev = dev_get_by_name(&init_net, ifname); if (netdev == NULL) { dev->ibd_can_failover = 0; @@ -3088,8 +3085,6 @@ kiblnd_startup (lnet_ni_t *ni) if (net == NULL) goto failed; - memset(net, 0, sizeof(*net)); - do_gettimeofday(&tv); net->ibn_incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 775dcd29c200..f528b65cd513 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -113,8 +113,6 @@ ksocknal_create_peer (ksock_peer_t **peerp, lnet_ni_t *ni, lnet_process_id_t id) if (peer == NULL) return -ENOMEM; - memset (peer, 0, sizeof (*peer)); /* NULL pointers/clear flags etc */ - peer->ksnp_ni = ni; peer->ksnp_id = id; atomic_set (&peer->ksnp_refcount, 1); /* 1 ref for caller */ @@ -1040,8 +1038,6 @@ ksocknal_create_conn (lnet_ni_t *ni, ksock_route_t *route, goto failed_0; } - memset (conn, 0, sizeof (*conn)); - conn->ksnc_peer = NULL; conn->ksnc_route = NULL; conn->ksnc_sock = sock; diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 6e598add9c71..53d1c7e4f59d 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -866,7 +866,6 @@ lnet_create_rc_data_locked(lnet_peer_t *gateway) if (pi == NULL) goto out; - memset(pi, 0, LNET_PINGINFO_SIZE); for (i = 0; i < LNET_MAX_RTR_NIS; i++) { pi->pi_ni[i].ns_nid = LNET_NID_ANY; pi->pi_ni[i].ns_status = LNET_NI_STATUS_INVALID; diff --git a/drivers/staging/lustre/lnet/selftest/console.c b/drivers/staging/lustre/lnet/selftest/console.c index 352fc96398d2..2aeebbfdc0e3 100644 --- a/drivers/staging/lustre/lnet/selftest/console.c +++ b/drivers/staging/lustre/lnet/selftest/console.c @@ -204,9 +204,6 @@ lstcon_group_alloc(char *name, lstcon_group_t **grpp) if (grp == NULL) return -ENOMEM; - memset(grp, 0, offsetof(lstcon_group_t, - grp_ndl_hash[LST_NODE_HASHSIZE])); - grp->grp_ref = 1; if (name != NULL) strcpy(grp->grp_name, name); @@ -815,8 +812,6 @@ lstcon_group_info(char *name, lstcon_ndlist_ent_t *gents_p, return -ENOMEM; } - memset(gentp, 0, sizeof(lstcon_ndlist_ent_t)); - list_for_each_entry(ndl, &grp->grp_ndl_list, ndl_link) LST_NODE_STATE_COUNTER(ndl->ndl_node, gentp); @@ -971,8 +966,6 @@ lstcon_batch_info(char *name, lstcon_test_batch_ent_t *ent_up, int server, if (entp == NULL) return -ENOMEM; - memset(entp, 0, sizeof(lstcon_test_batch_ent_t)); - if (test == NULL) { entp->u.tbe_batch.bae_ntest = bat->bat_ntest; entp->u.tbe_batch.bae_state = bat->bat_state; @@ -1319,7 +1312,6 @@ lstcon_test_add(char *batch_name, int type, int loop, goto out; } - memset(test, 0, offsetof(lstcon_test_t, tes_param[paramlen])); test->tes_hdr.tsb_id = batch->bat_hdr.tsb_id; test->tes_batch = batch; test->tes_type = type; @@ -1789,8 +1781,6 @@ lstcon_session_info(lst_sid_t *sid_up, int *key_up, unsigned *featp, if (entp == NULL) return -ENOMEM; - memset(entp, 0, sizeof(*entp)); - list_for_each_entry(ndl, &console_session.ses_ndl_list, ndl_link) LST_NODE_STATE_COUNTER(ndl->ndl_node, entp); diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c index 050723a0243a..b2b63e93cc50 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c @@ -149,7 +149,6 @@ sfw_register_test (srpc_service_t *service, sfw_test_client_ops_t *cliops) if (tsc == NULL) return -ENOMEM; - memset(tsc, 0, sizeof(sfw_test_case_t)); tsc->tsc_cli_ops = cliops; tsc->tsc_srv_service = service; @@ -747,7 +746,6 @@ sfw_add_test_instance (sfw_batch_t *tsb, srpc_server_rpc_t *rpc) return -ENOMEM; } - memset(tsi, 0, sizeof(*tsi)); spin_lock_init(&tsi->tsi_lock); atomic_set(&tsi->tsi_nactive, 0); INIT_LIST_HEAD(&tsi->tsi_units); diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c index ac3a444a918d..a21b42687d8a 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c @@ -183,8 +183,6 @@ libcfs_ipif_enumerate (char ***namesp) rc = -ENOMEM; goto out1; } - /* NULL out all names[i] */ - memset (names, 0, nfound * sizeof(*names)); for (i = 0; i < nfound; i++) { -- cgit From e72f412b747cb252e3441fd9463e076c883cbeb5 Mon Sep 17 00:00:00 2001 From: Scott Weir Date: Mon, 16 Jun 2014 20:44:51 +1000 Subject: staging: lustre: Fix sparse warnings for undeclared symbols This patch fixes the sparse warnings in drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c: sec_lproc.c:58:6: warning: symbol 'sec_flags2str' was not declared. Should it be static? Signed-off-by: Scott Weir Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c index 1213621ca5aa..1928bf57222f 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c @@ -55,7 +55,7 @@ struct proc_dir_entry *sptlrpc_proc_root = NULL; EXPORT_SYMBOL(sptlrpc_proc_root); -char *sec_flags2str(unsigned long flags, char *buf, int bufsize) +static char *sec_flags2str(unsigned long flags, char *buf, int bufsize) { buf[0] = '\0'; -- cgit From df47bd43f7d2deebb6a3eef92be7dbf7fab8019c Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:49 +1000 Subject: staging: lustre: lclient: glimpse.c fixing coding style issues Fixed "ERROR: need consistent spacing around '+' (ctx:WxV)" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/glimpse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/glimpse.c b/drivers/staging/lustre/lustre/lclient/glimpse.c index 7bbca4bf6b82..f669645473a5 100644 --- a/drivers/staging/lustre/lustre/lclient/glimpse.c +++ b/drivers/staging/lustre/lustre/lclient/glimpse.c @@ -177,7 +177,7 @@ static int cl_io_get(struct inode *inode, struct lu_env **envout, io->ci_obj = clob; *envout = env; *ioout = io; - result = +1; + result = 1; } else result = PTR_ERR(env); } else -- cgit From 641cff7773807c1c0b1be273556dec0c6808abfb Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:50 +1000 Subject: staging: lustre: lclient: glimpse.c fixing coding style issues fixed "WARNING: labels should not be indented" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/glimpse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/glimpse.c b/drivers/staging/lustre/lustre/lclient/glimpse.c index f669645473a5..a658116daf2b 100644 --- a/drivers/staging/lustre/lustre/lclient/glimpse.c +++ b/drivers/staging/lustre/lustre/lclient/glimpse.c @@ -204,7 +204,7 @@ int cl_glimpse_size0(struct inode *inode, int agl) result = cl_io_get(inode, &env, &io, &refcheck); if (result > 0) { - again: +again: io->ci_verify_layout = 1; result = cl_io_init(env, io, CIT_MISC, io->ci_obj); if (result > 0) -- cgit From 2df2b3a8be2acd461036283354b42b6436a349e1 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:51 +1000 Subject: staging: lustre: lclient: lcommon_misc.c fixing coding style issues fixed warning: * WARNING: min() should probably be min_t(__u32, desc.ld_tgt_count, LOV_MAX_STRIPE_COUNT) Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c index 21de1cd2afba..367bdadee162 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c @@ -63,7 +63,7 @@ int cl_init_ea_size(struct obd_export *md_exp, struct obd_export *dt_exp) if (rc) return rc; - stripes = min(desc.ld_tgt_count, (__u32)LOV_MAX_STRIPE_COUNT); + stripes = min_t(__u32, desc.ld_tgt_count, LOV_MAX_STRIPE_COUNT); lsm.lsm_stripe_count = stripes; easize = obd_size_diskmd(dt_exp, &lsm); -- cgit From 772f34f582fa3bef3c21cf76562e035e5e8b5b9b Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:52 +1000 Subject: staging: lustre: lclient: lcommon_cl.c fixing coding style issues fixed: WARNING: Missing a blank line after declarations Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 1b0c216bc568..1f39219c43e0 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -126,6 +126,7 @@ void ccc_key_fini(const struct lu_context *ctx, struct lu_context_key *key, void *data) { struct ccc_thread_info *info = data; + OBD_SLAB_FREE_PTR(info, ccc_thread_kmem); } @@ -144,6 +145,7 @@ void ccc_session_key_fini(const struct lu_context *ctx, struct lu_context_key *key, void *data) { struct ccc_session *session = data; + OBD_SLAB_FREE_PTR(session, ccc_session_kmem); } @@ -572,6 +574,7 @@ void ccc_lock_delete(const struct lu_env *env, void ccc_lock_fini(const struct lu_env *env, struct cl_lock_slice *slice) { struct ccc_lock *clk = cl2ccc_lock(slice); + OBD_SLAB_FREE_PTR(clk, ccc_lock_kmem); } @@ -733,6 +736,7 @@ int ccc_io_one_lock(const struct lu_env *env, struct cl_io *io, loff_t start, loff_t end) { struct cl_object *obj = io->ci_obj; + return ccc_io_one_lock_index(env, io, enqflags, mode, cl_index(obj, start), cl_index(obj, end)); } -- cgit From 847d47faa33b446d8b7e0a31fe95497c4b0ecca1 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:53 +1000 Subject: staging: lustre: lclient: lcommon_cl.c fixing coding style issues fixed: ERROR: do not initialise statics to 0 or NULL Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 1f39219c43e0..de0ad37e8521 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -266,7 +266,7 @@ int ccc_req_init(const struct lu_env *env, struct cl_device *dev, * fails. Access to this environment is serialized by ccc_inode_fini_guard * mutex. */ -static struct lu_env *ccc_inode_fini_env = NULL; +static struct lu_env *ccc_inode_fini_env; /** * A mutex serializing calls to slp_inode_fini() under extreme memory -- cgit From 60dc39b4d858190ed94c0f269c503f96ca71bb38 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:54 +1000 Subject: staging: lustre: lclient: lcommon_cl.c fixing coding style issues fixed: ERROR: inline keyword should sit between storage class and type Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index de0ad37e8521..2f51b7667b23 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -1273,7 +1273,7 @@ struct lov_stripe_md *ccc_inode_lsm_get(struct inode *inode) return lov_lsm_get(cl_i2info(inode)->lli_clob); } -void inline ccc_inode_lsm_put(struct inode *inode, struct lov_stripe_md *lsm) +inline void ccc_inode_lsm_put(struct inode *inode, struct lov_stripe_md *lsm) { lov_lsm_put(cl_i2info(inode)->lli_clob, lsm); } -- cgit From 81851d4646111faa32417281eb00aa6233231350 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:55 +1000 Subject: staging: lustre: lclient: lcommon_cl.c fixing coding style issues fixed: WARNING: line over 80 characters, used a new variable 'size_index' to store the offset. Replaced "unsigned long" with "loff_t" type for 'cur_index'. Removed the parenthesis around the second part of the if statement following the '||' as its not required. Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 2f51b7667b23..b8552abc6a63 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -821,10 +821,11 @@ int ccc_prep_size(const struct lu_env *env, struct cl_object *obj, * linux-2.6.18-128.1.1 miss to do that. * --bug 17336 */ loff_t size = cl_isize_read(inode); - unsigned long cur_index = start >> PAGE_CACHE_SHIFT; + loff_t cur_index = start >> PAGE_CACHE_SHIFT; + loff_t size_index = ((size - 1) >> PAGE_CACHE_SHIFT); if ((size == 0 && cur_index != 0) || - (((size - 1) >> PAGE_CACHE_SHIFT) < cur_index)) + size_index < cur_index) *exceed = 1; } return result; -- cgit From 98e11370052aa88a38c2d5d1693a5ec2966c4f81 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 18 Jun 2014 18:23:56 +1000 Subject: staging: lustre: lclient: lcommon_cl.c fixing coding style issues fixed: WARNING: suspect code indent for conditional statements (32, 32) Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index b8552abc6a63..08d6fbdf6ed9 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -826,7 +826,7 @@ int ccc_prep_size(const struct lu_env *env, struct cl_object *obj, if ((size == 0 && cur_index != 0) || size_index < cur_index) - *exceed = 1; + *exceed = 1; } return result; } else { -- cgit From 8a3adc24806060b4ade2bc6bd172077a57455f98 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:16 +0200 Subject: staging: rtl8723au: rtw_cfg80211_inform_bss(): timestamp isn't used Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 9ad049ce3dab..f102e030e78c 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -249,7 +249,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, /* struct ieee80211_supported_band *band; */ u16 channel; u32 freq; - u64 notify_timestamp; u16 notify_capability; u16 notify_interval; u8 *notify_ie; @@ -280,8 +279,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, notify_channel = ieee80211_get_channel(wiphy, freq); - notify_timestamp = jiffies_to_msecs(jiffies) * 1000; /* uSec */ - notify_interval = get_unaligned_le16( rtw_get_beacon_interval23a_from_ie(pnetwork->network.IEs)); -- cgit From 4062f7aa8f867e515267aeec62a152d2cf763a1c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:17 +0200 Subject: staging: rtl8723au: rtw_cfg80211_inform_bss(): Use cfg80211_inform_bss() There is no point in creating a fake beacon frame to call cfg80211_inform_bss_frame() when we can just call cfg80211_inform_bss() with the parameters we were sticking into the fake frame. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 47 +++-------------------- 1 file changed, 5 insertions(+), 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index f102e030e78c..0a0c58d98457 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -239,14 +239,12 @@ rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { }, }; -#define MAX_BSSINFO_LEN 1000 static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, struct wlan_network *pnetwork) { int ret = 0; struct ieee80211_channel *notify_channel; struct cfg80211_bss *bss; - /* struct ieee80211_supported_band *band; */ u16 channel; u32 freq; u16 notify_capability; @@ -254,21 +252,10 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, u8 *notify_ie; size_t notify_ielen; s32 notify_signal; - u8 buf[MAX_BSSINFO_LEN], *pbuf; - size_t len; - struct ieee80211_hdr *pwlanhdr; struct wireless_dev *wdev = padapter->rtw_wdev; struct wiphy *wiphy = wdev->wiphy; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - /* DBG_8723A("%s\n", __func__); */ - - if (pnetwork->network.IELength > MAX_IE_SZ) { - DBG_8723A("%s IE Length too long > %d byte\n", __func__, - MAX_IE_SZ); - goto exit; - } - channel = pnetwork->network.DSConfig; if (channel <= RTW_CH_MAX_2G_CHANNEL) freq = ieee80211_channel_to_frequency(channel, @@ -299,35 +286,12 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, } else { notify_signal = 100 * translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength); /* dbm */ } - pbuf = buf; - - pwlanhdr = (struct ieee80211_hdr *)pbuf; - - pwlanhdr->seq_ctrl = 0; - - if (pnetwork->network.reserved == 1) { /* WIFI_BEACON */ - eth_broadcast_addr(pwlanhdr->addr1); - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_BEACON); - } else { - ether_addr_copy(pwlanhdr->addr1, myid(&padapter->eeprompriv)); - pwlanhdr->frame_control = - cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_PROBE_RESP); - } - - ether_addr_copy(pwlanhdr->addr2, pnetwork->network.MacAddress); - ether_addr_copy(pwlanhdr->addr3, pnetwork->network.MacAddress); - pbuf += sizeof(struct ieee80211_hdr_3addr); - len = sizeof(struct ieee80211_hdr_3addr); - - memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength); - len += pnetwork->network.IELength; - - bss = cfg80211_inform_bss_frame(wiphy, notify_channel, - (struct ieee80211_mgmt *)buf, len, - notify_signal, GFP_ATOMIC); + bss = cfg80211_inform_bss(wiphy, notify_channel, + pnetwork->network.MacAddress, 0, + notify_capability, notify_interval, + notify_ie, notify_ielen, + notify_signal, GFP_ATOMIC); if (unlikely(!bss)) { DBG_8723A("rtw_cfg80211_inform_bss error\n"); @@ -336,7 +300,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, cfg80211_put_bss(wiphy, bss); -exit: return ret; } -- cgit From 993c52ba61a72a8c669c8091fa75c9514776b3f7 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:18 +0200 Subject: staging: rtl8723au: Save timestamp for network in collect_bss_info() and report it to the stack Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 ++++ drivers/staging/rtl8723au/include/wlan_bssdef.h | 1 + drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 84ca06b81222..823489b01f19 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4281,6 +4281,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.beacon.beacon_int); + bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); } else if (ieee80211_is_probe_req(mgmt->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, u.probe_req.variable); @@ -4288,6 +4289,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, capab_info = 0; bssid->BeaconPeriod = padapter->registrypriv.dev_network.BeaconPeriod; + bssid->tsf = 0; } else if (ieee80211_is_probe_resp(mgmt->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); @@ -4295,12 +4297,14 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); + bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp); } else { bssid->reserved = 0; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = padapter->registrypriv.dev_network.BeaconPeriod; + bssid->tsf = 0; } ie_offset -= offsetof(struct ieee80211_mgmt, u); diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h index b7176874c396..60455e6e0b23 100644 --- a/drivers/staging/rtl8723au/include/wlan_bssdef.h +++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h @@ -93,6 +93,7 @@ struct wlan_bssid_ex { u32 Privacy; long Rssi;/* in dBM, raw data , get from PHY) */ u16 BeaconPeriod; /* units are Kusec */ + u64 tsf; u32 ATIMWindow; /* units are Kusec */ u32 DSConfig; /* Frequency, units are kHz */ enum nl80211_iftype ifmode; diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 0a0c58d98457..2621a0ea7c89 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -288,7 +288,8 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, } bss = cfg80211_inform_bss(wiphy, notify_channel, - pnetwork->network.MacAddress, 0, + pnetwork->network.MacAddress, + pnetwork->network.tsf, notify_capability, notify_interval, notify_ie, notify_ielen, notify_signal, GFP_ATOMIC); -- cgit From 2620e339e84320814eb9b4c46d9295703ada1010 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:19 +0200 Subject: staging: rtl8723au: rtw_cfg80211_inform_bss(): Report the beacon interval already retrieved Use the beacon interval we already retreived in collect_bss_info() instead of pulling it out of the saved IE array again. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 2621a0ea7c89..ff838fcfea31 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -248,7 +248,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, u16 channel; u32 freq; u16 notify_capability; - u16 notify_interval; u8 *notify_ie; size_t notify_ielen; s32 notify_signal; @@ -266,9 +265,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, notify_channel = ieee80211_get_channel(wiphy, freq); - notify_interval = - get_unaligned_le16( - rtw_get_beacon_interval23a_from_ie(pnetwork->network.IEs)); notify_capability = get_unaligned_le16( rtw_get_capability23a_from_ie(pnetwork->network.IEs)); @@ -290,7 +286,8 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, bss = cfg80211_inform_bss(wiphy, notify_channel, pnetwork->network.MacAddress, pnetwork->network.tsf, - notify_capability, notify_interval, + notify_capability, + pnetwork->network.BeaconPeriod, notify_ie, notify_ielen, notify_signal, GFP_ATOMIC); -- cgit From 53c660006766aef0c4d423cd0990ead2537bed6a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:20 +0200 Subject: staging: rtl8723au: collect_bss_info(): Save capability in struct wlan_bssid_ex Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 16 +++++++++------- drivers/staging/rtl8723au/include/wlan_bssdef.h | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 823489b01f19..a91198f85154 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4262,7 +4262,6 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *bssid; - u16 capab_info; length = skb->len - sizeof(struct ieee80211_hdr_3addr); @@ -4278,7 +4277,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, if (ieee80211_is_beacon(mgmt->frame_control)) { bssid->reserved = 1; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); - capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); + bssid->capability = + get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.beacon.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); @@ -4286,7 +4286,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, ie_offset = offsetof(struct ieee80211_mgmt, u.probe_req.variable); bssid->reserved = 2; - capab_info = 0; + bssid->capability = 0; bssid->BeaconPeriod = padapter->registrypriv.dev_network.BeaconPeriod; bssid->tsf = 0; @@ -4294,14 +4294,16 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); bssid->reserved = 3; - capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info); + bssid->capability = + get_unaligned_le16(&mgmt->u.probe_resp.capab_info); bssid->BeaconPeriod = get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp); } else { bssid->reserved = 0; ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); - capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info); + bssid->capability = + get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->BeaconPeriod = padapter->registrypriv.dev_network.BeaconPeriod; bssid->tsf = 0; @@ -4396,7 +4398,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, return bssid; } - if (capab_info & WLAN_CAPABILITY_ESS) { + if (bssid->capability & WLAN_CAPABILITY_ESS) { bssid->ifmode = NL80211_IFTYPE_STATION; ether_addr_copy(bssid->MacAddress, mgmt->sa); } else { @@ -4404,7 +4406,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, ether_addr_copy(bssid->MacAddress, mgmt->bssid); } - if (capab_info & WLAN_CAPABILITY_PRIVACY) + if (bssid->capability & WLAN_CAPABILITY_PRIVACY) bssid->Privacy = 1; else bssid->Privacy = 0; diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h index 60455e6e0b23..c43c85591df5 100644 --- a/drivers/staging/rtl8723au/include/wlan_bssdef.h +++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h @@ -93,6 +93,7 @@ struct wlan_bssid_ex { u32 Privacy; long Rssi;/* in dBM, raw data , get from PHY) */ u16 BeaconPeriod; /* units are Kusec */ + u16 capability; u64 tsf; u32 ATIMWindow; /* units are Kusec */ u32 DSConfig; /* Frequency, units are kHz */ -- cgit From 11a80e8877bf2db8a13b68018049b48e367bd76e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:21 +0200 Subject: staging: rtl8723au: rtw_cfg80211_inform_bss(): Use the capability info we already saved No point in pulling capability info out of the IE array when it's already stored in struct wlan_bssid_ex Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index ff838fcfea31..4eef40830191 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -247,7 +247,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, struct cfg80211_bss *bss; u16 channel; u32 freq; - u16 notify_capability; u8 *notify_ie; size_t notify_ielen; s32 notify_signal; @@ -265,10 +264,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, notify_channel = ieee80211_get_channel(wiphy, freq); - notify_capability = - get_unaligned_le16( - rtw_get_capability23a_from_ie(pnetwork->network.IEs)); - notify_ie = pnetwork->network.IEs + _FIXED_IE_LENGTH_; notify_ielen = pnetwork->network.IELength - _FIXED_IE_LENGTH_; @@ -286,7 +281,7 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, bss = cfg80211_inform_bss(wiphy, notify_channel, pnetwork->network.MacAddress, pnetwork->network.tsf, - notify_capability, + pnetwork->network.capability, pnetwork->network.BeaconPeriod, notify_ie, notify_ielen, notify_signal, GFP_ATOMIC); -- cgit From 143ced27acaa948cbcf34cafe0bca3c926fd35fc Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:22 +0200 Subject: staging: rtl8723au: struct wlan_bssid_ex: Rename BeaconPeriod to beacon_interval This is to be more consistent mapping the names in wlan_bssid_ex to those in struct ieee80211_mgmt. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 4 ++-- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 12 ++++++------ drivers/staging/rtl8723au/include/wlan_bssdef.h | 2 +- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index a52662e8a2f6..73161b943b30 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -655,7 +655,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) struct ieee80211_ht_operation *pht_info = NULL; int bcn_fixed_size; - bcn_interval = (u16)pnetwork->BeaconPeriod; + bcn_interval = (u16)pnetwork->beacon_interval; cur_channel = pnetwork->DSConfig; cur_bwmode = HT_CHANNEL_WIDTH_20;; cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE; @@ -847,7 +847,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, /* beacon interval */ /* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */ pbeacon = rtw_get_beacon_interval23a_from_ie(ie); - pbss_network->BeaconPeriod = get_unaligned_le16(pbeacon); + pbss_network->beacon_interval = get_unaligned_le16(pbeacon); /* capability */ cap = get_unaligned_le16(ie); diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 9d0662cb96d0..442bdef47572 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -360,7 +360,7 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv) /* beacon interval : 2bytes */ /* BCN_INTERVAL; */ - *(u16*)ie = cpu_to_le16(pdev_network->BeaconPeriod); + *(u16*)ie = cpu_to_le16(pdev_network->beacon_interval); sz += 2; ie += 2; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 799338b95afc..567be5ef36e4 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2117,7 +2117,7 @@ void rtw_init_registrypriv_dev_network23a(struct rtw_adapter* adapter) memcpy(&pdev_network->Ssid, &pregistrypriv->ssid, sizeof(struct cfg80211_ssid)); - pdev_network->BeaconPeriod = 100; + pdev_network->beacon_interval = 100; } void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter) diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index a91198f85154..f40b73305196 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4279,7 +4279,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); bssid->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); - bssid->BeaconPeriod = + bssid->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); } else if (ieee80211_is_probe_req(mgmt->frame_control)) { @@ -4287,8 +4287,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, u.probe_req.variable); bssid->reserved = 2; bssid->capability = 0; - bssid->BeaconPeriod = - padapter->registrypriv.dev_network.BeaconPeriod; + bssid->beacon_interval = + padapter->registrypriv.dev_network.beacon_interval; bssid->tsf = 0; } else if (ieee80211_is_probe_resp(mgmt->frame_control)) { ie_offset = offsetof(struct ieee80211_mgmt, @@ -4296,7 +4296,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, bssid->reserved = 3; bssid->capability = get_unaligned_le16(&mgmt->u.probe_resp.capab_info); - bssid->BeaconPeriod = + bssid->beacon_interval = get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp); } else { @@ -4304,8 +4304,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); bssid->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); - bssid->BeaconPeriod = - padapter->registrypriv.dev_network.BeaconPeriod; + bssid->beacon_interval = + padapter->registrypriv.dev_network.beacon_interval; bssid->tsf = 0; } ie_offset -= offsetof(struct ieee80211_mgmt, u); diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h index c43c85591df5..96e8074a7c18 100644 --- a/drivers/staging/rtl8723au/include/wlan_bssdef.h +++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h @@ -92,7 +92,7 @@ struct wlan_bssid_ex { struct cfg80211_ssid Ssid; u32 Privacy; long Rssi;/* in dBM, raw data , get from PHY) */ - u16 BeaconPeriod; /* units are Kusec */ + u16 beacon_interval; u16 capability; u64 tsf; u32 ATIMWindow; /* units are Kusec */ diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 4eef40830191..638e833e67af 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -282,7 +282,7 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, pnetwork->network.MacAddress, pnetwork->network.tsf, pnetwork->network.capability, - pnetwork->network.BeaconPeriod, + pnetwork->network.beacon_interval, notify_ie, notify_ielen, notify_signal, GFP_ATOMIC); -- cgit From db97812c2c5e8a18d7cf3eb679a4cfdd6125f748 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:23 +0200 Subject: staging: rtl8723au: rtw_add_beacon(): Replace magic constant with appropriate struct size Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 638e833e67af..80d5fe7bf00b 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2912,7 +2912,7 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len) { int ret = 0; - u8 *pbuf = NULL; + u8 *pbuf; uint len, wps_ielen = 0; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; /* struct sta_priv *pstapriv = &padapter->stapriv; */ @@ -2923,17 +2923,19 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) return -EINVAL; - if (head_len < 24) + if (head_len < sizeof(struct ieee80211_hdr_3addr)) return -EINVAL; pbuf = kzalloc(head_len + tail_len, GFP_KERNEL); if (!pbuf) return -ENOMEM; /* 24 = beacon header len. */ - memcpy(pbuf, (void *)head + 24, head_len - 24); - memcpy(pbuf + head_len - 24, (void *)tail, tail_len); + memcpy(pbuf, (void *)head + sizeof(struct ieee80211_hdr_3addr), + head_len - sizeof(struct ieee80211_hdr_3addr)); + memcpy(pbuf + head_len - sizeof(struct ieee80211_hdr_3addr), + (void *)tail, tail_len); - len = head_len + tail_len - 24; + len = head_len + tail_len - sizeof(struct ieee80211_hdr_3addr); /* check wps ie if inclued */ if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, -- cgit From ddf5c2bd1044d923ad82f519c68cdf12a055a568 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:24 +0200 Subject: staging: rtl8723au: Update bss beacon info in rtw_add_beacon() Pull out the core info beacon_interval, capability, and tsf and update cur_network.network with the info in rtw_add_beacon() instead of relying on it being in ->IEs. This will help later when getting rid of the beacon struct info from ->IEs and only carrying the actual IEs there. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 6 ------ drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 9 ++++++++- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 73161b943b30..e943b6be6496 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -798,7 +798,6 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, u8 *pHT_caps_ie = NULL; u8 *pHT_info_ie = NULL; struct sta_info *psta = NULL; - __le16 *pbeacon; u16 cap, ht_cap = false; uint ie_len = 0; int group_cipher, pairwise_cipher; @@ -844,11 +843,6 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, memcpy(pbss_network->MacAddress, myid(&padapter->eeprompriv), ETH_ALEN); - /* beacon interval */ - /* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */ - pbeacon = rtw_get_beacon_interval23a_from_ie(ie); - pbss_network->beacon_interval = get_unaligned_le16(pbeacon); - /* capability */ cap = get_unaligned_le16(ie); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 80d5fe7bf00b..6c06d5772cb4 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2915,6 +2915,8 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, u8 *pbuf; uint len, wps_ielen = 0; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; + struct wlan_bssid_ex *bss = &pmlmepriv->cur_network.network; + const struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)head; /* struct sta_priv *pstapriv = &padapter->stapriv; */ DBG_8723A("%s beacon_head_len =%zu, beacon_tail_len =%zu\n", @@ -2923,12 +2925,17 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) return -EINVAL; - if (head_len < sizeof(struct ieee80211_hdr_3addr)) + if (head_len < offsetof(struct ieee80211_mgmt, u.beacon.variable)) return -EINVAL; pbuf = kzalloc(head_len + tail_len, GFP_KERNEL); if (!pbuf) return -ENOMEM; + + bss->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int); + bss->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); + bss->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); + /* 24 = beacon header len. */ memcpy(pbuf, (void *)head + sizeof(struct ieee80211_hdr_3addr), head_len - sizeof(struct ieee80211_hdr_3addr)); -- cgit From ccb1bdcb485864dde708b059a9437f2a481a8282 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:25 +0200 Subject: staging: rtl8723au: is_same_network23a(): Use the capability info from wlan_bssid_ex We already have the capability info in struct wlan_bssid_ex, no point in searching for it once again. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 567be5ef36e4..2119dfb9bbab 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -366,8 +366,8 @@ int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst) { u16 s_cap, d_cap; - s_cap = get_unaligned_le16(rtw_get_capability23a_from_ie(src->IEs)); - d_cap = get_unaligned_le16(rtw_get_capability23a_from_ie(dst->IEs)); + s_cap = src->capability; + d_cap = dst->capability; return ((src->Ssid.ssid_len == dst->Ssid.ssid_len) && /* (src->DSConfig == dst->DSConfig) && */ -- cgit From 0b46cfdd0320534b0064529c242c4ba324b21dc1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:26 +0200 Subject: staging: rtl8723au: ConstructBeacon(): Use struct ieee80211_mgmt to build beacon This gets rid of a bunch of hard coded offsets and reduces the dependency of the ugly rtw_get_*_from_ie() functions. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 37 +++++++++++----------------- 1 file changed, 15 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index 6e1fed2e70dd..ae1562456a94 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -200,9 +200,10 @@ void rtl8723a_set_FwPwrMode_cmd(struct rtw_adapter *padapter, u8 Mode) } -static void ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) +static void +ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) { - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; u32 rate_len, pktlen; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -212,36 +213,28 @@ static void ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLeng /* DBG_8723A("%s\n", __func__); */ - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; - pwlanhdr->frame_control = + mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); - memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN); - memcpy(pwlanhdr->addr3, get_my_bssid23a(cur_network), ETH_ALEN); + ether_addr_copy(mgmt->da, bc_addr); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(cur_network)); /* A Beacon frame shouldn't have fragment bits set */ - pwlanhdr->seq_ctrl = 0; - - pframe += sizeof(struct ieee80211_hdr_3addr); - pktlen = sizeof (struct ieee80211_hdr_3addr); + mgmt->seq_ctrl = 0; /* timestamp will be inserted by hardware */ - pframe += 8; - pktlen += 8; - - /* beacon interval: 2 bytes */ - memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval23a_from_ie(cur_network->IEs)), 2); - pframe += 2; - pktlen += 2; + put_unaligned_le16(cur_network->beacon_interval, + &mgmt->u.beacon.beacon_int); - /* capability info: 2 bytes */ - memcpy(pframe, (unsigned char *)(rtw_get_capability23a_from_ie(cur_network->IEs)), 2); + put_unaligned_le16(cur_network->capability, + &mgmt->u.beacon.capab_info); - pframe += 2; - pktlen += 2; + pframe = mgmt->u.beacon.variable; + pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable); if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { bcn_fixed_size = -- cgit From b81d36cbee8650d42cc30cdf390d7ef28faae83d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:27 +0200 Subject: staging: rtl8723au: issue_beacon23a(): Do not copy IEs in front of beacon data Not sure how this happened, but one should never copy the IEs in front of the beacon frame info. This could lead to some nasty corrupted beacon frames hitting the wire if running AP mode - ouf! Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index f40b73305196..265fd2a09759 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2434,7 +2434,29 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pframe += sizeof(struct ieee80211_hdr_3addr); pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); - if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { + /* below for ad-hoc mode */ + + /* timestamp will be inserted by hardware */ + pframe += 8; + pattrib->pktlen += 8; + + /* beacon interval: 2 bytes */ + + memcpy(pframe, (unsigned char *) + rtw_get_beacon_interval23a_from_ie(cur_network->IEs), 2); + + pframe += 2; + pattrib->pktlen += 2; + + /* capability info: 2 bytes */ + + memcpy(pframe, (unsigned char *) + rtw_get_capability23a_from_ie(cur_network->IEs), 2); + + pframe += 2; + pattrib->pktlen += 2; + + if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { u8 *iebuf; int buflen; /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ @@ -2468,28 +2490,6 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) goto _issue_bcn; } - /* below for ad-hoc mode */ - - /* timestamp will be inserted by hardware */ - pframe += 8; - pattrib->pktlen += 8; - - /* beacon interval: 2 bytes */ - - memcpy(pframe, (unsigned char *) - rtw_get_beacon_interval23a_from_ie(cur_network->IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; - - /* capability info: 2 bytes */ - - memcpy(pframe, (unsigned char *) - rtw_get_capability23a_from_ie(cur_network->IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; - /* SSID */ pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID, cur_network->Ssid.ssid_len, -- cgit From 5d43182bc35c055408fac06dc31da88f8ce33886 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:28 +0200 Subject: staging: rtl8723au: issue_beacon23a(): Use struct ieee80211_mgmt to build beacon Why on Earth we have two functions in the driver constructing beacon frames is beyond me ... but one step at a time Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 42 +++++++++------------------ 1 file changed, 14 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 265fd2a09759..9b83a701ccb2 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2390,7 +2390,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; unsigned int rate_len; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -2421,40 +2421,26 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; - - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_BEACON); - pwlanhdr->seq_ctrl = 0; - - ether_addr_copy(pwlanhdr->addr1, bc_addr); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(cur_network)); + mgmt = (struct ieee80211_mgmt *)pframe; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); + mgmt->seq_ctrl = 0; - /* below for ad-hoc mode */ + ether_addr_copy(mgmt->da, bc_addr); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(cur_network)); /* timestamp will be inserted by hardware */ - pframe += 8; - pattrib->pktlen += 8; - - /* beacon interval: 2 bytes */ - memcpy(pframe, (unsigned char *) - rtw_get_beacon_interval23a_from_ie(cur_network->IEs), 2); + put_unaligned_le16(cur_network->beacon_interval, + &mgmt->u.beacon.beacon_int); - pframe += 2; - pattrib->pktlen += 2; + put_unaligned_le16(cur_network->capability, + &mgmt->u.beacon.capab_info); - /* capability info: 2 bytes */ - - memcpy(pframe, (unsigned char *) - rtw_get_capability23a_from_ie(cur_network->IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; + pframe = mgmt->u.beacon.variable; + pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable); if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { u8 *iebuf; -- cgit From 08519034b3f75e030582724b9f1a280a5b0cfb73 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:29 +0200 Subject: staging: rtl8723au: issue_probersp(): Do not copy the IEs in front of probe_resp data Another case where the driver was copying IEs in front of the probe_resp data in the management frame, when running in AP mode. This would result in badly corrupted frames hitting the wire - ouf ouf ouf! Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 59 +++++++++++---------------- 1 file changed, 23 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 9b83a701ccb2..d2a09c653e72 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2544,7 +2544,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; unsigned char *pframe; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; unsigned char *mac, *bssid; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; #ifdef CONFIG_8723AU_AP_MODE @@ -2564,6 +2564,9 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, /* DBG_8723A("%s\n", __func__); */ + if (cur_network->IELength > MAX_IE_SZ) + return; + pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); if (!pmgntframe) { DBG_8723A("%s, alloc mgnt frame fail\n", __func__); @@ -2577,28 +2580,35 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; mac = myid(&padapter->eeprompriv); bssid = cur_network->MacAddress; - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_PROBE_RESP); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); - ether_addr_copy(pwlanhdr->addr1, da); - ether_addr_copy(pwlanhdr->addr2, mac); - ether_addr_copy(pwlanhdr->addr3, bssid); + ether_addr_copy(mgmt->da, da); + ether_addr_copy(mgmt->sa, mac); + ether_addr_copy(mgmt->bssid, bssid); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = pattrib->hdrlen; - pframe += pattrib->hdrlen; - if (cur_network->IELength > MAX_IE_SZ) - return; + /* timestamp will be inserted by hardware */ + put_unaligned_le16(cur_network->beacon_interval, + &mgmt->u.probe_resp.beacon_int); + + put_unaligned_le16(cur_network->capability, + &mgmt->u.probe_resp.capab_info); + + pframe = mgmt->u.probe_resp.variable; + pattrib->pktlen = + offsetof(struct ieee80211_mgmt, u.probe_resp.variable); + + /* below for ad-hoc mode */ #ifdef CONFIG_8723AU_AP_MODE if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { @@ -2682,29 +2692,6 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, } else #endif { - - /* timestamp will be inserted by hardware */ - pframe += 8; - pattrib->pktlen += 8; - - /* beacon interval: 2 bytes */ - - memcpy(pframe, (unsigned char *) - rtw_get_beacon_interval23a_from_ie(cur_network->IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; - - /* capability info: 2 bytes */ - - memcpy(pframe, (unsigned char *) - rtw_get_capability23a_from_ie(cur_network->IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; - - /* below for ad-hoc mode */ - /* SSID */ pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID, cur_network->Ssid.ssid_len, -- cgit From 5376badca02fabc7ca3ffa9e7dd5e795a4250486 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:30 +0200 Subject: staging: rtl8723au: issue_assocrsp(): Use capability from struct wlan_bssid_ex Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index d2a09c653e72..a8bc12c1fe39 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3051,7 +3051,6 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, struct ieee80211_mgmt *mgmt; struct pkt_attrib *pattrib; unsigned char *pframe; - unsigned short val; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; @@ -3089,10 +3088,7 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); - /* capability */ - val = *(unsigned short *)rtw_get_capability23a_from_ie(ie); - - mgmt->u.assoc_resp.capab_info = val; + mgmt->u.assoc_resp.capab_info = cpu_to_le16(pnetwork->capability); mgmt->u.assoc_resp.status_code = cpu_to_le16(status); mgmt->u.assoc_resp.aid = cpu_to_le16(pstat->aid | BIT(14) | BIT(15)); -- cgit From 92af4499c69e57827bee8dfcdf6c65d4c5394179 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:31 +0200 Subject: staging: rtl8723au: issue_assocreq(): Use struct ieee80211_mgmt to build assoc_req frame Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 38 +++++++++++---------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index a8bc12c1fe39..f7ddd6a19026 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3185,7 +3185,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) struct pkt_attrib *pattrib; unsigned char *pframe; const u8 *p; - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; unsigned int i, j, index = 0; unsigned char rf_type, bssrate[NumRates], sta_bssrate[NumRates]; struct registry_priv *pregpriv = &padapter->registrypriv; @@ -3207,34 +3207,26 @@ static void issue_assocreq(struct rtw_adapter *padapter) memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET; - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; - pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ASSOC_REQ); + mgmt->frame_control = + cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_REQ); - ether_addr_copy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network)); - ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); - ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network)); + ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); + ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network)); - pwlanhdr->seq_ctrl = - cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); + mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq)); pmlmeext->mgnt_seq++; - pframe += sizeof(struct ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr); - /* caps */ - memcpy(pframe, - rtw_get_capability23a_from_ie(pmlmeinfo->network.IEs), 2); - - pframe += 2; - pattrib->pktlen += 2; - - /* listen interval */ + put_unaligned_le16(pmlmeinfo->network.capability, + &mgmt->u.assoc_req.capab_info); /* todo: listen interval for power saving */ - put_unaligned_le16(3, pframe); - pframe += 2; - pattrib->pktlen += 2; + put_unaligned_le16(3, &mgmt->u.assoc_req.listen_interval); + + pframe = mgmt->u.assoc_req.variable; + pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.assoc_req.variable); /* SSID */ pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID, @@ -3437,7 +3429,7 @@ exit: kfree(pmlmepriv->assoc_req); pmlmepriv->assoc_req = kmalloc(pattrib->pktlen, GFP_ATOMIC); if (pmlmepriv->assoc_req) { - memcpy(pmlmepriv->assoc_req, pwlanhdr, pattrib->pktlen); + memcpy(pmlmepriv->assoc_req, mgmt, pattrib->pktlen); pmlmepriv->assoc_req_len = pattrib->pktlen; } } else -- cgit From 9ce73e2e6aafde2915d2210e644de94203212a04 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:32 +0200 Subject: staging: rtl8723au: rtw_get_bcn_info23a(): Use capability from wlan_bssid_ex This eliminates yet another user of rtw_get_capability23a_from_ie() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 442bdef47572..d60fb3c06f9c 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -770,15 +770,12 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork) void rtw_get_bcn_info23a(struct wlan_network *pnetwork) { - unsigned short cap; u8 bencrypt = 0; int pie_len, ie_offset; u8 *pie; const u8 *p; - cap = get_unaligned_le16( - rtw_get_capability23a_from_ie(pnetwork->network.IEs)); - if (cap & WLAN_CAPABILITY_PRIVACY) { + if (pnetwork->network.capability & WLAN_CAPABILITY_PRIVACY) { bencrypt = 1; pnetwork->network.Privacy = 1; } else -- cgit From 0396416f541075315c67fe8817105122b75b5317 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:33 +0200 Subject: staging: rtl8723au: rtw_get_bcn_info23a(): Use __func__ in debug prints Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index d60fb3c06f9c..f2c4a0e89ed4 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -782,7 +782,7 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS; RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: ssid =%s\n", pnetwork->network.Ssid.ssid)); + ("%s: ssid =%s\n", __func__, pnetwork->network.Ssid.ssid)); ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - offsetof(struct ieee80211_mgmt, u); @@ -801,10 +801,10 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WEP; } RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: pnetwork->encryp_protocol is %x\n", + ("%s: pnetwork->encryp_protocol is %x\n", __func__, pnetwork->BcnInfo.encryp_protocol)); RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, - ("rtw_get_bcn_info23a: pnetwork->encryp_protocol is %x\n", + ("%s: pnetwork->encryp_protocol is %x\n", __func__, pnetwork->BcnInfo.encryp_protocol)); rtw_get_cipher_info(pnetwork); -- cgit From a94e12b18331194d2ac9fe37da9da6c5c3b244d4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:34 +0200 Subject: staging: rtl8723au: Remove last users of rtw_get_capability*() functions Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme.c | 14 -------------- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 ++-- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 6 +++--- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 -- 5 files changed, 6 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index e943b6be6496..2a960b1ba066 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -773,7 +773,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) update_wireless_mode23a(padapter); /* udpate capability after cur_wireless_mode updated */ - update_capinfo23a(padapter, rtw_get_capability23a(pnetwork)); + update_capinfo23a(padapter, pnetwork->capability); /* let pnetwork_mlmeext == pnetwork_mlme. */ memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 2119dfb9bbab..776068de545a 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -312,20 +312,6 @@ void rtw23a_roaming(struct rtw_adapter *padapter, spin_unlock_bh(&pmlmepriv->lock); } -__le16 *rtw_get_capability23a_from_ie(u8 *ie) -{ - return (__le16 *)(ie + 8 + 2); -} - -u16 rtw_get_capability23a(struct wlan_bssid_ex *bss) -{ - u16 val; - - memcpy(&val, rtw_get_capability23a_from_ie(bss->IEs), 2); - - return le16_to_cpu(val); -} - __le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie) { return (__le16 *)(ie + 8); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index f7ddd6a19026..d058178e793f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4417,7 +4417,7 @@ static void start_create_ibss(struct rtw_adapter* padapter) update_wireless_mode23a(padapter); /* udpate capability */ - caps = rtw_get_capability23a(pnetwork); + caps = pnetwork->capability; update_capinfo23a(padapter, caps); if (caps & WLAN_CAPABILITY_IBSS) { /* adhoc master */ rtl8723a_set_sec_cfg(padapter, 0xcf); @@ -4472,7 +4472,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) update_wireless_mode23a(padapter); /* udpate capability */ - caps = rtw_get_capability23a(pnetwork); + caps = pnetwork->capability; update_capinfo23a(padapter, caps); if (caps & WLAN_CAPABILITY_ESS) { /* switch channel */ diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 5aaff130d55d..b07c13b2acee 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -1083,7 +1083,7 @@ bool is_ap_in_tkip23a(struct rtw_adapter *padapter) bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - offsetof(struct ieee80211_mgmt, u.beacon); - if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) { + if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) { p = pmlmeinfo->network.IEs + i; @@ -1118,7 +1118,7 @@ bool should_forbid_n_rate23a(struct rtw_adapter * padapter) bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - offsetof(struct ieee80211_mgmt, u.beacon); - if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) { + if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { for (i = bcn_fixed_size; i < cur_network->IELength;) { p = cur_network->IEs + i; @@ -1161,7 +1161,7 @@ bool is_ap_in_wep23a(struct rtw_adapter *padapter) bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - offsetof(struct ieee80211_mgmt, u.beacon); - if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) { + if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) { p = pmlmeinfo->network.IEs + i; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index bc420ec6f436..039e697e1ecd 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -310,7 +310,6 @@ static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state) spin_unlock_bh(&pmlmepriv->lock); } -u16 rtw_get_capability23a(struct wlan_bssid_ex *bss); void rtw_disconnect_hdl23a_under_linked(struct rtw_adapter *adapter, struct sta_info *psta, u8 free_assoc); void rtw_generate_random_ibss23a(u8 *pibss); @@ -349,7 +348,6 @@ int rtw_if_up23a(struct rtw_adapter *padapter); int rtw_linked_check(struct rtw_adapter *padapter); -__le16 *rtw_get_capability23a_from_ie(u8 *ie); __le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie); -- cgit From 0fd90b74cb270d03d5d651a921092e12c9e2b87e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 19 Jun 2014 11:37:35 +0200 Subject: staging: rtl8723au: Eliminate last rtw_get_beacon_interval*() usage Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ----- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 ++-- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 8 -------- drivers/staging/rtl8723au/include/rtw_mlme.h | 3 --- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 1 - 5 files changed, 2 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 776068de545a..9a8c9ffd1837 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -312,11 +312,6 @@ void rtw23a_roaming(struct rtw_adapter *padapter, spin_unlock_bh(&pmlmepriv->lock); } -__le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie) -{ - return (__le16 *)(ie + 8); -} - static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork) { diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index d058178e793f..4047f6dadff2 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4411,7 +4411,7 @@ static void start_create_ibss(struct rtw_adapter* padapter) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; pmlmeext->cur_channel = (u8)pnetwork->DSConfig; - pmlmeinfo->bcn_interval = get_beacon_interval23a(pnetwork); + pmlmeinfo->bcn_interval = pnetwork->beacon_interval; /* update wireless mode */ update_wireless_mode23a(padapter); @@ -4466,7 +4466,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) int beacon_timeout; pmlmeext->cur_channel = (u8)pnetwork->DSConfig; - pmlmeinfo->bcn_interval = get_beacon_interval23a(pnetwork); + pmlmeinfo->bcn_interval = pnetwork->beacon_interval; /* update wireless mode */ update_wireless_mode23a(padapter); diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index b07c13b2acee..dbca440beed4 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -399,14 +399,6 @@ inline u8 *get_my_bssid23a(struct wlan_bssid_ex *pnetwork) return pnetwork->MacAddress; } -u16 get_beacon_interval23a(struct wlan_bssid_ex *bss) -{ - unsigned short val; - memcpy(&val, rtw_get_beacon_interval23a_from_ie(bss->IEs), 2); - - return le16_to_cpu(val); -} - bool is_client_associated_to_ap23a(struct rtw_adapter *padapter) { struct mlme_ext_priv *pmlmeext; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index 039e697e1ecd..a67954569d3e 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -348,9 +348,6 @@ int rtw_if_up23a(struct rtw_adapter *padapter); int rtw_linked_check(struct rtw_adapter *padapter); -__le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie); - - void rtw_joinbss_reset23a(struct rtw_adapter *padapter); bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index 0219aa14291a..7fd249f573b5 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -499,7 +499,6 @@ void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src, struct rtw_adapter *padapter, bool update_ie); u8 *get_my_bssid23a(struct wlan_bssid_ex *pnetwork); -u16 get_beacon_interval23a(struct wlan_bssid_ex *bss); bool is_client_associated_to_ap23a(struct rtw_adapter *padapter); bool is_client_associated_to_ibss23a(struct rtw_adapter *padapter); -- cgit From 17733219fb577912520c478b9548ba2963c8500a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:32 -0700 Subject: staging: comedi: ni_stc.h: add a 'is_m_series' flag to private data The (board->reg_type & ni_reg_m_series_mask) test is commonly used in ni_mio_common.c to detect if the driver is being used with a National Instruments "M series" DAQ board. Simplify the code a bit by adding an 'is_m_series' bit-field flag to the private data. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 92 ++++++++++++-------------- drivers/staging/comedi/drivers/ni_pcimio.c | 4 +- drivers/staging/comedi/drivers/ni_stc.h | 2 + 3 files changed, 46 insertions(+), 52 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 7632bd6cafc1..6da1424866e6 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -532,10 +532,9 @@ static void ni_release_cdo_mite_channel(struct comedi_device *dev) static void ni_e_series_enable_second_irq(struct comedi_device *dev, unsigned gpct_index, short enable) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return; switch (gpct_index) { case 0: @@ -1650,7 +1649,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, unsigned offset; unsigned int dither; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { ni_m_series_load_channelgain_list(dev, n_chan, list); return; } @@ -1853,7 +1852,7 @@ static int ni_ai_insn_read(struct comedi_device *dev, ("ni_mio_common: timeout in ni_ai_insn_read\n"); return -ETIME; } - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { dl = devpriv->readl(dev, M_Offset_AI_FIFO_Data); dl &= mask; data[n] = dl; @@ -2496,7 +2495,7 @@ static int ni_ai_insn_config(struct comedi_device *dev, case INSN_CONFIG_ANALOG_TRIG: return ni_ai_config_analog_trig(dev, s, insn, data); case INSN_CONFIG_ALT_SOURCE: - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { if (data[1] & ~(MSeries_AI_Bypass_Cal_Sel_Pos_Mask | MSeries_AI_Bypass_Cal_Sel_Neg_Mask | MSeries_AI_Bypass_Mode_Mux_Mask | @@ -2692,9 +2691,9 @@ static int ni_ao_config_chanlist(struct comedi_device *dev, unsigned int chanspec[], unsigned int n_chans, int timed) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return ni_m_series_ao_config_chanlist(dev, s, chanspec, n_chans, timed); else @@ -2716,7 +2715,6 @@ static int ni_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int invert; @@ -2725,7 +2723,7 @@ static int ni_ao_insn_write(struct comedi_device *dev, devpriv->ao[chan] = data[0]; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { devpriv->writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); } else devpriv->writew(dev, data[0] ^ invert, @@ -2938,7 +2936,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); switch (cmd->stop_src) { case TRIG_COUNT: - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { /* this is how the NI example code does it for m-series boards, verified correct with 6259 */ devpriv->stc_writel(dev, cmd->stop_arg - 1, AO_UC_Load_A_Register); @@ -3006,8 +3004,8 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned bits; devpriv->ao_mode1 &= ~AO_Multiple_Channels; bits = AO_UPDATE_Output_Select(AO_Update_Output_High_Z); - if (board->reg_type & - (ni_reg_m_series_mask | ni_reg_6xxx_mask)) { + if (devpriv->is_m_series || + board->reg_type & ni_reg_6xxx_mask) { bits |= AO_Number_Of_Channels(0); } else { bits |= @@ -3041,7 +3039,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) #if 0 /* F Hess: windows driver does not set AO_Number_Of_DAC_Packages bit for 6281, verified with bus analyzer. */ - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) bits |= AO_Number_Of_DAC_Packages; #endif devpriv->stc_writew(dev, bits, AO_Personal_Register); @@ -3172,7 +3170,7 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); devpriv->ao_mode2 = 0; devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) devpriv->ao_mode3 = AO_Last_Gate_Disable; else devpriv->ao_mode3 = 0; @@ -3454,7 +3452,6 @@ static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) static void handle_cdio_interrupt(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned cdio_status; struct comedi_subdevice *s = &dev->subdevices[NI_DIO_SUBDEV]; @@ -3462,7 +3459,7 @@ static void handle_cdio_interrupt(struct comedi_device *dev) unsigned long flags; #endif - if ((board->reg_type & ni_reg_m_series_mask) == 0) + if (!devpriv->is_m_series) return; #ifdef PCIDMA spin_lock_irqsave(&devpriv->mite_channel_lock, flags); @@ -4434,9 +4431,9 @@ static int ni_m_series_set_pfi_routing(struct comedi_device *dev, static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return ni_m_series_get_pfi_routing(dev, chan); else return ni_old_get_pfi_routing(dev, chan); @@ -4445,9 +4442,9 @@ static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan) static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan, unsigned source) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return ni_m_series_set_pfi_routing(dev, chan, source); else return ni_old_set_pfi_routing(dev, chan, source); @@ -4457,12 +4454,12 @@ static int ni_config_filter(struct comedi_device *dev, unsigned pfi_channel, enum ni_pfi_filter_select filter) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned bits; - if ((board->reg_type & ni_reg_m_series_mask) == 0) + if (!devpriv->is_m_series) return -ENOTSUPP; + bits = devpriv->readl(dev, M_Offset_PFI_Filter); bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); @@ -4516,10 +4513,9 @@ static int ni_pfi_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - if (!(board->reg_type & ni_reg_m_series_mask)) + if (!devpriv->is_m_series) return -ENOTSUPP; if (comedi_dio_update_state(s, data)) @@ -4820,7 +4816,6 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, static int ni_set_master_clock(struct comedi_device *dev, unsigned source, unsigned period_ns) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; if (source == NI_MIO_INTERNAL_CLOCK) { @@ -4828,7 +4823,7 @@ static int ni_set_master_clock(struct comedi_device *dev, devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, RTSI_Trig_Direction_Register); devpriv->clock_ns = TIMEBASE_1_NS; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { devpriv->clock_and_fout2 &= ~(MSeries_Timebase1_Select_Bit | MSeries_Timebase3_Select_Bit); @@ -4838,7 +4833,7 @@ static int ni_set_master_clock(struct comedi_device *dev, } devpriv->clock_source = source; } else { - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { return ni_mseries_set_pll_master_clock(dev, source, period_ns); } else { @@ -4867,9 +4862,9 @@ static int ni_set_master_clock(struct comedi_device *dev, static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return 8; else return 7; @@ -4878,7 +4873,7 @@ static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) static int ni_valid_rtsi_output_source(struct comedi_device *dev, unsigned chan, unsigned source) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; if (chan >= num_configurable_rtsi_channels(dev)) { if (chan == old_RTSI_clock_channel) { @@ -4906,7 +4901,7 @@ static int ni_valid_rtsi_output_source(struct comedi_device *dev, return 1; break; case NI_RTSI_OUTPUT_RTSI_OSC: - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) return 1; else return 0; @@ -4963,7 +4958,6 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); @@ -4971,8 +4965,7 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, case INSN_CONFIG_DIO_OUTPUT: if (chan < num_configurable_rtsi_channels(dev)) { devpriv->rtsi_trig_direction_reg |= - RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0); + RTSI_Output_Bit(chan, devpriv->is_m_series); } else if (chan == old_RTSI_clock_channel) { devpriv->rtsi_trig_direction_reg |= Drive_RTSI_Clock_Bit; @@ -4983,8 +4976,7 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, case INSN_CONFIG_DIO_INPUT: if (chan < num_configurable_rtsi_channels(dev)) { devpriv->rtsi_trig_direction_reg &= - ~RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0); + ~RTSI_Output_Bit(chan, devpriv->is_m_series); } else if (chan == old_RTSI_clock_channel) { devpriv->rtsi_trig_direction_reg &= ~Drive_RTSI_Clock_Bit; @@ -4996,8 +4988,7 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, if (chan < num_configurable_rtsi_channels(dev)) { data[1] = (devpriv->rtsi_trig_direction_reg & - RTSI_Output_Bit(chan, - (board->reg_type & ni_reg_m_series_mask) != 0)) + RTSI_Output_Bit(chan, devpriv->is_m_series)) ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; } else if (chan == old_RTSI_clock_channel) { @@ -5042,7 +5033,6 @@ static int ni_rtsi_insn_bits(struct comedi_device *dev, static void ni_rtsi_init(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; /* Initialises the RTSI bus signal switch to a default state */ @@ -5068,7 +5058,7 @@ static void ni_rtsi_init(struct comedi_device *dev) RTSI_Trig_Output_Bits(5, NI_RTSI_OUTPUT_G_SRC0) | RTSI_Trig_Output_Bits(6, NI_RTSI_OUTPUT_G_GATE0); - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) devpriv->rtsi_trig_b_output_reg |= RTSI_Trig_Output_Bits(7, NI_RTSI_OUTPUT_RTSI_OSC); devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, @@ -5303,7 +5293,7 @@ static int ni_E_init(struct comedi_device *dev) s->subdev_flags |= SDF_GROUND | SDF_COMMON | SDF_OTHER; if (board->adbits > 16) s->subdev_flags |= SDF_LSAMPL; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) s->subdev_flags |= SDF_SOFT_CALIBRATED; s->n_chan = board->n_adchan; s->len_chanlist = 512; @@ -5329,7 +5319,7 @@ static int ni_E_init(struct comedi_device *dev) if (board->n_aochan) { s->type = COMEDI_SUBD_AO; s->subdev_flags = SDF_WRITABLE | SDF_DEGLITCH | SDF_GROUND; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) s->subdev_flags |= SDF_SOFT_CALIBRATED; s->n_chan = board->n_aochan; s->maxdata = (1 << board->aobits) - 1; @@ -5351,7 +5341,7 @@ static int ni_E_init(struct comedi_device *dev) s->do_cmd = &ni_ao_cmd; s->do_cmdtest = &ni_ao_cmdtest; s->len_chanlist = board->n_aochan; - if ((board->reg_type & ni_reg_m_series_mask) == 0) + if (!devpriv->is_m_series) s->munge = ni_ao_munge; } s->cancel = &ni_ao_reset; @@ -5370,7 +5360,7 @@ static int ni_E_init(struct comedi_device *dev) s->io_bits = 0; /* all bits input */ s->range_table = &range_digital; s->n_chan = board->num_p0_dio_channels; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { s->subdev_flags |= SDF_LSAMPL | SDF_CMD_WRITE /* | SDF_CMD_READ */; s->insn_bits = &ni_m_series_dio_insn_bits; @@ -5410,7 +5400,7 @@ static int ni_E_init(struct comedi_device *dev) /* calibration subdevice -- ai and ao */ s = &dev->subdevices[NI_CALIBRATION_SUBDEV]; s->type = COMEDI_SUBD_CALIB; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { /* internal PWM analog output used for AI nonlinearity calibration */ s->subdev_flags = SDF_INTERNAL; s->insn_config = &ni_m_series_pwm_config; @@ -5435,7 +5425,7 @@ static int ni_E_init(struct comedi_device *dev) s->type = COMEDI_SUBD_MEMORY; s->subdev_flags = SDF_READABLE | SDF_INTERNAL; s->maxdata = 0xff; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { s->n_chan = M_SERIES_EEPROM_SIZE; s->insn_read = &ni_m_series_eeprom_insn_read; } else { @@ -5447,7 +5437,7 @@ static int ni_E_init(struct comedi_device *dev) s = &dev->subdevices[NI_PFI_DIO_SUBDEV]; s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_INTERNAL; - if (board->reg_type & ni_reg_m_series_mask) { + if (devpriv->is_m_series) { unsigned i; s->n_chan = 16; devpriv->writew(dev, s->state, M_Offset_PFI_DO); @@ -5459,7 +5449,7 @@ static int ni_E_init(struct comedi_device *dev) s->n_chan = 10; } s->maxdata = 1; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) s->insn_bits = &ni_pfi_insn_bits; s->insn_config = &ni_pfi_insn_config; ni_set_bits(dev, IO_Bidirection_Pin_Register, ~0, 0); @@ -5500,7 +5490,7 @@ static int ni_E_init(struct comedi_device *dev) s->insn_config = ni_rtsi_insn_config; ni_rtsi_init(dev); - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) counter_variant = ni_gpct_variant_m_series; else counter_variant = ni_gpct_variant_e_series; @@ -5518,7 +5508,7 @@ static int ni_E_init(struct comedi_device *dev) s->type = COMEDI_SUBD_COUNTER; s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_LSAMPL; s->n_chan = 3; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) s->maxdata = 0xffffffff; else s->maxdata = 0xffffff; @@ -5592,7 +5582,7 @@ static int ni_E_init(struct comedi_device *dev) if (board->reg_type & ni_reg_6xxx_mask) { devpriv->writeb(dev, 0, Magic_611x); - } else if (board->reg_type & ni_reg_m_series_mask) { + } else if (devpriv->is_m_series) { int channel; for (channel = 0; channel < board->n_aochan; ++channel) { devpriv->writeb(dev, 0xf, diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index c1c2730cf3e1..f152b3862101 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1540,6 +1540,8 @@ static int pcimio_auto_attach(struct comedi_device *dev, devpriv->writel = pcimio_writel; if (board->reg_type & ni_reg_m_series_mask) { + devpriv->is_m_series = 1; + devpriv->stc_writew = m_series_stc_writew; devpriv->stc_readw = m_series_stc_readw; devpriv->stc_writel = m_series_stc_writel; @@ -1573,7 +1575,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (devpriv->gpct_mite_ring[1] == NULL) return -ENOMEM; - if (board->reg_type & ni_reg_m_series_mask) + if (devpriv->is_m_series) m_series_init_eeprom_buffer(dev); if (board->reg_type == ni_reg_6143) init_6143(dev); diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index a93ef6b488e1..38ce3ce6480f 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1503,6 +1503,8 @@ struct ni_private { struct mite_dma_descriptor_ring *ao_mite_ring; struct mite_dma_descriptor_ring *cdo_mite_ring; struct mite_dma_descriptor_ring *gpct_mite_ring[NUM_GPCT]; + + unsigned int is_m_series:1; }; #endif /* _COMEDI_NI_STC_H */ -- cgit From 5f315520315b8db6c5a784b6d8a71756301af0ce Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:33 -0700 Subject: staging: comedi: ni_stc.h: cleanup ni_e_series_enable_second_irq() This function is used to enable/disable the second irq on NI e-series boards. This irq used used to generate dma requests for the counters. There are only 2 counters (NUM_GPCT) so the default case of the switch can never occur. Tidy up this function and remove the unreachable BUG(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 41 +++++++++++--------------- 1 file changed, 17 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 6da1424866e6..aa1ee9624ce0 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -527,38 +527,31 @@ static void ni_release_cdo_mite_channel(struct comedi_device *dev) #endif /* PCIDMA */ } -/* e-series boards use the second irq signals to generate dma requests for their counters */ #ifdef PCIDMA static void ni_e_series_enable_second_irq(struct comedi_device *dev, unsigned gpct_index, short enable) { struct ni_private *devpriv = dev->private; + uint16_t val = 0; + int reg; - if (devpriv->is_m_series) + if (devpriv->is_m_series || gpct_index > 1) return; - switch (gpct_index) { - case 0: - if (enable) { - devpriv->stc_writew(dev, G0_Gate_Second_Irq_Enable, - Second_IRQ_A_Enable_Register); - } else { - devpriv->stc_writew(dev, 0, - Second_IRQ_A_Enable_Register); - } - break; - case 1: - if (enable) { - devpriv->stc_writew(dev, G1_Gate_Second_Irq_Enable, - Second_IRQ_B_Enable_Register); - } else { - devpriv->stc_writew(dev, 0, - Second_IRQ_B_Enable_Register); - } - break; - default: - BUG(); - break; + + /* + * e-series boards use the second irq signals to generate + * dma requests for their counters + */ + if (gpct_index == 0) { + reg = Second_IRQ_A_Enable_Register; + if (enable) + val = G0_Gate_Second_Irq_Enable; + } else { + reg = Second_IRQ_B_Enable_Register; + if (enable) + val = G1_Gate_Second_Irq_Enable; } + devpriv->stc_writew(dev, val, reg); } #endif /* PCIDMA */ -- cgit From 00b14b1dfb79cffaf53c5a05e13af644641cdc21 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:34 -0700 Subject: staging: comedi: ni_mio_common.c: wrap the stc_read/write operations The ni_atmio, ni_pcimio, and ni_mio_cs drivers all include this source file to handle the common functionality of the drivers. Each of those drivers set some function pointers in the private data to handle the read/write operations to the stc registers. Wrap these operations with some helper functions to clarify the code a bit and make it easier to read and maintain. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 689 +++++++++++++------------ 1 file changed, 352 insertions(+), 337 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index aa1ee9624ce0..e54c016ea6a4 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -246,6 +246,34 @@ enum timebase_nanoseconds { static const int num_adc_stages_611x = 3; +static void ni_stc_writel(struct comedi_device *dev, uint32_t data, int reg) +{ + struct ni_private *devpriv = dev->private; + + devpriv->stc_writel(dev, data, reg); +} + +static void ni_stc_writew(struct comedi_device *dev, uint16_t data, int reg) +{ + struct ni_private *devpriv = dev->private; + + devpriv->stc_writew(dev, data, reg); +} + +static uint32_t ni_stc_readl(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return devpriv->stc_readl(dev, reg); +} + +static uint16_t ni_stc_readw(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return devpriv->stc_readw(dev, reg); +} + static inline void ni_set_bitfield(struct comedi_device *dev, int reg, unsigned bit_mask, unsigned bit_values) { @@ -257,20 +285,20 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, case Interrupt_A_Enable_Register: devpriv->int_a_enable_reg &= ~bit_mask; devpriv->int_a_enable_reg |= bit_values & bit_mask; - devpriv->stc_writew(dev, devpriv->int_a_enable_reg, - Interrupt_A_Enable_Register); + ni_stc_writew(dev, devpriv->int_a_enable_reg, + Interrupt_A_Enable_Register); break; case Interrupt_B_Enable_Register: devpriv->int_b_enable_reg &= ~bit_mask; devpriv->int_b_enable_reg |= bit_values & bit_mask; - devpriv->stc_writew(dev, devpriv->int_b_enable_reg, - Interrupt_B_Enable_Register); + ni_stc_writew(dev, devpriv->int_b_enable_reg, + Interrupt_B_Enable_Register); break; case IO_Bidirection_Pin_Register: devpriv->io_bidirection_pin_reg &= ~bit_mask; devpriv->io_bidirection_pin_reg |= bit_values & bit_mask; - devpriv->stc_writew(dev, devpriv->io_bidirection_pin_reg, - IO_Bidirection_Pin_Register); + ni_stc_writew(dev, devpriv->io_bidirection_pin_reg, + IO_Bidirection_Pin_Register); break; case AI_AO_Select: devpriv->ai_ao_select_reg &= ~bit_mask; @@ -551,7 +579,7 @@ static void ni_e_series_enable_second_irq(struct comedi_device *dev, if (enable) val = G1_Gate_Second_Irq_Enable; } - devpriv->stc_writew(dev, val, reg); + ni_stc_writew(dev, val, reg); } #endif /* PCIDMA */ @@ -576,19 +604,19 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) comedi_error(dev, "FIFO flush timeout."); } } else { - devpriv->stc_writew(dev, 1, ADC_FIFO_Clear); + ni_stc_writew(dev, 1, ADC_FIFO_Clear); if (board->reg_type == ni_reg_625x) { devpriv->writeb(dev, 0, M_Offset_Static_AI_Control(0)); devpriv->writeb(dev, 1, M_Offset_Static_AI_Control(0)); #if 0 /* the NI example code does 3 convert pulses for 625x boards, but that appears to be wrong in practice. */ - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); #endif } } @@ -596,19 +624,16 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) static void win_out2(struct comedi_device *dev, uint32_t data, int reg) { - struct ni_private *devpriv = dev->private; - - devpriv->stc_writew(dev, data >> 16, reg); - devpriv->stc_writew(dev, data & 0xffff, reg + 1); + ni_stc_writew(dev, data >> 16, reg); + ni_stc_writew(dev, data & 0xffff, reg + 1); } static uint32_t win_in2(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; uint32_t bits; - bits = devpriv->stc_readw(dev, reg) << 16; - bits |= devpriv->stc_readw(dev, reg + 1); + bits = ni_stc_readw(dev, reg) << 16; + bits |= ni_stc_readw(dev, reg + 1); return bits; } @@ -696,8 +721,7 @@ static int ni_ai_drain_dma(struct comedi_device *dev) spin_lock_irqsave(&devpriv->mite_channel_lock, flags); if (devpriv->ai_mite_chan) { for (i = 0; i < timeout; i++) { - if ((devpriv->stc_readw(dev, - AI_Status_1_Register) & + if ((ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St) && mite_bytes_in_transit(devpriv->ai_mite_chan) == 0) @@ -709,7 +733,7 @@ static int ni_ai_drain_dma(struct comedi_device *dev) printk ("mite_bytes_in_transit=%i, AI_Status1_Register=0x%x\n", mite_bytes_in_transit(devpriv->ai_mite_chan), - devpriv->stc_readw(dev, AI_Status_1_Register)); + ni_stc_readw(dev, AI_Status_1_Register)); retval = -1; } } @@ -735,13 +759,12 @@ static void mite_handle_b_linkc(struct mite_struct *mite, static int ni_ao_wait_for_dma_load(struct comedi_device *dev) { - struct ni_private *devpriv = dev->private; static const int timeout = 10000; int i; for (i = 0; i < timeout; i++) { unsigned short b_status; - b_status = devpriv->stc_readw(dev, AO_Status_1_Register); + b_status = ni_stc_readw(dev, AO_Status_1_Register); if (b_status & AO_FIFO_Half_Full_St) break; /* if we poll too often, the pci bus activity seems @@ -846,11 +869,10 @@ static int ni_ao_prep_fifo(struct comedi_device *dev, struct comedi_subdevice *s) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; int n; /* reset fifo */ - devpriv->stc_writew(dev, 1, DAC_FIFO_Clear); + ni_stc_writew(dev, 1, DAC_FIFO_Clear); if (board->reg_type & ni_reg_6xxx_mask) ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); @@ -956,8 +978,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) int i; if (board->reg_type == ni_reg_611x) { - while ((devpriv->stc_readw(dev, - AI_Status_1_Register) & + while ((ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St) == 0) { dl = devpriv->readl(dev, ADC_FIFO_Data_611x); @@ -987,18 +1008,16 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) } } else { - fifo_empty = - devpriv->stc_readw(dev, - AI_Status_1_Register) & AI_FIFO_Empty_St; + fifo_empty = ni_stc_readw(dev, AI_Status_1_Register) & + AI_FIFO_Empty_St; while (fifo_empty == 0) { for (i = 0; i < sizeof(devpriv->ai_fifo_buffer) / sizeof(devpriv->ai_fifo_buffer[0]); i++) { - fifo_empty = - devpriv->stc_readw(dev, - AI_Status_1_Register) & - AI_FIFO_Empty_St; + fifo_empty = ni_stc_readw(dev, + AI_Status_1_Register) & + AI_FIFO_Empty_St; if (fifo_empty) break; devpriv->ai_fifo_buffer[i] = @@ -1110,7 +1129,6 @@ static void handle_gpct_interrupt(struct comedi_device *dev, static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status) { - struct ni_private *devpriv = dev->private; unsigned short ack = 0; if (a_status & AI_SC_TC_St) @@ -1123,7 +1141,7 @@ static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status) /* not sure why we used to ack the START here also, instead of doing it independently. Frank Hess 2007-07-06 */ ack |= AI_STOP_Interrupt_Ack /*| AI_START_Interrupt_Ack */; if (ack) - devpriv->stc_writew(dev, ack, Interrupt_A_Ack_Register); + ni_stc_writew(dev, ack, Interrupt_A_Ack_Register); } static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, @@ -1193,8 +1211,7 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, *fail to get the fifo less than half full, so loop to be sure.*/ for (i = 0; i < timeout; ++i) { ni_handle_fifo_half_full(dev); - if ((devpriv->stc_readw(dev, - AI_Status_1_Register) & + if ((ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Half_Full_St) == 0) break; } @@ -1209,7 +1226,6 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, static void ack_b_interrupt(struct comedi_device *dev, unsigned short b_status) { - struct ni_private *devpriv = dev->private; unsigned short ack = 0; if (b_status & AO_BC_TC_St) @@ -1227,20 +1243,22 @@ static void ack_b_interrupt(struct comedi_device *dev, unsigned short b_status) if (b_status & AO_UPDATE_St) ack |= AO_UPDATE_Interrupt_Ack; if (ack) - devpriv->stc_writew(dev, ack, Interrupt_B_Ack_Register); + ni_stc_writew(dev, ack, Interrupt_B_Ack_Register); } static void handle_b_interrupt(struct comedi_device *dev, unsigned short b_status, unsigned ao_mite_status) { - struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->write_subdev; /* unsigned short ack=0; */ #ifdef PCIDMA /* Currently, mite.c requires us to handle LINKC */ - if (ao_mite_status & CHSR_LINKC) + if (ao_mite_status & CHSR_LINKC) { + struct ni_private *devpriv = dev->private; + mite_handle_b_linkc(devpriv->mite, dev); + } if (ao_mite_status & ~(CHSR_INT | CHSR_LINKC | CHSR_DONE | CHSR_MRDY | CHSR_DRDY | CHSR_DRQ1 | CHSR_DRQ0 | CHSR_ERROR | @@ -1257,7 +1275,7 @@ static void handle_b_interrupt(struct comedi_device *dev, if (b_status & AO_Overrun_St) { printk ("ni_mio_common: AO FIFO underrun status=0x%04x status2=0x%04x\n", - b_status, devpriv->stc_readw(dev, AO_Status_2_Register)); + b_status, ni_stc_readw(dev, AO_Status_2_Register)); s->async->events |= COMEDI_CB_OVERFLOW; } @@ -1400,8 +1418,8 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_release_ai_mite_channel(dev); /* ai configuration */ - devpriv->stc_writew(dev, AI_Configuration_Start | AI_Reset, - Joint_Reset_Register); + ni_stc_writew(dev, AI_Configuration_Start | AI_Reset, + Joint_Reset_Register); ni_set_bits(dev, Interrupt_A_Enable_Register, AI_SC_TC_Interrupt_Enable | AI_START1_Interrupt_Enable | @@ -1414,47 +1432,48 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) if (board->reg_type != ni_reg_6143) devpriv->writeb(dev, 0, Misc_Command); - devpriv->stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ - devpriv->stc_writew(dev, - AI_Start_Stop | AI_Mode_1_Reserved - /*| AI_Trigger_Once */ , - AI_Mode_1_Register); - devpriv->stc_writew(dev, 0x0000, AI_Mode_2_Register); + ni_stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ + ni_stc_writew(dev, AI_Start_Stop | AI_Mode_1_Reserved + /*| AI_Trigger_Once */, + AI_Mode_1_Register); + ni_stc_writew(dev, 0x0000, AI_Mode_2_Register); /* generate FIFO interrupts on non-empty */ - devpriv->stc_writew(dev, (0 << 6) | 0x0000, AI_Mode_3_Register); + ni_stc_writew(dev, (0 << 6) | 0x0000, AI_Mode_3_Register); if (board->reg_type == ni_reg_611x) { - devpriv->stc_writew(dev, AI_SHIFTIN_Pulse_Width | - AI_SOC_Polarity | - AI_LOCALMUX_CLK_Pulse_Width, - AI_Personal_Register); - devpriv->stc_writew(dev, - AI_SCAN_IN_PROG_Output_Select(3) | - AI_EXTMUX_CLK_Output_Select(0) | - AI_LOCALMUX_CLK_Output_Select(2) | - AI_SC_TC_Output_Select(3) | - AI_CONVERT_Output_Select - (AI_CONVERT_Output_Enable_High), - AI_Output_Control_Register); + ni_stc_writew(dev, + AI_SHIFTIN_Pulse_Width | + AI_SOC_Polarity | + AI_LOCALMUX_CLK_Pulse_Width, + AI_Personal_Register); + ni_stc_writew(dev, + AI_SCAN_IN_PROG_Output_Select(3) | + AI_EXTMUX_CLK_Output_Select(0) | + AI_LOCALMUX_CLK_Output_Select(2) | + AI_SC_TC_Output_Select(3) | + AI_CONVERT_Output_Select + (AI_CONVERT_Output_Enable_High), + AI_Output_Control_Register); } else if (board->reg_type == ni_reg_6143) { - devpriv->stc_writew(dev, AI_SHIFTIN_Pulse_Width | - AI_SOC_Polarity | - AI_LOCALMUX_CLK_Pulse_Width, - AI_Personal_Register); - devpriv->stc_writew(dev, - AI_SCAN_IN_PROG_Output_Select(3) | - AI_EXTMUX_CLK_Output_Select(0) | - AI_LOCALMUX_CLK_Output_Select(2) | - AI_SC_TC_Output_Select(3) | - AI_CONVERT_Output_Select - (AI_CONVERT_Output_Enable_Low), - AI_Output_Control_Register); + ni_stc_writew(dev, AI_SHIFTIN_Pulse_Width | + AI_SOC_Polarity | + AI_LOCALMUX_CLK_Pulse_Width, + AI_Personal_Register); + ni_stc_writew(dev, + AI_SCAN_IN_PROG_Output_Select(3) | + AI_EXTMUX_CLK_Output_Select(0) | + AI_LOCALMUX_CLK_Output_Select(2) | + AI_SC_TC_Output_Select(3) | + AI_CONVERT_Output_Select + (AI_CONVERT_Output_Enable_Low), + AI_Output_Control_Register); } else { unsigned ai_output_control_bits; - devpriv->stc_writew(dev, AI_SHIFTIN_Pulse_Width | - AI_SOC_Polarity | - AI_CONVERT_Pulse_Width | - AI_LOCALMUX_CLK_Pulse_Width, - AI_Personal_Register); + ni_stc_writew(dev, + AI_SHIFTIN_Pulse_Width | + AI_SOC_Polarity | + AI_CONVERT_Pulse_Width | + AI_LOCALMUX_CLK_Pulse_Width, + AI_Personal_Register); ai_output_control_bits = AI_SCAN_IN_PROG_Output_Select(3) | AI_EXTMUX_CLK_Output_Select(0) | @@ -1468,8 +1487,8 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ai_output_control_bits |= AI_CONVERT_Output_Select (AI_CONVERT_Output_Enable_Low); - devpriv->stc_writew(dev, ai_output_control_bits, - AI_Output_Control_Register); + ni_stc_writew(dev, ai_output_control_bits, + AI_Output_Control_Register); } /* the following registers should not be changed, because there * are no backup registers in devpriv. If you want to change @@ -1479,9 +1498,17 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) * AI_Personal_Register * AI_Output_Control_Register */ - devpriv->stc_writew(dev, AI_SC_TC_Error_Confirm | AI_START_Interrupt_Ack | AI_START2_Interrupt_Ack | AI_START1_Interrupt_Ack | AI_SC_TC_Interrupt_Ack | AI_Error_Interrupt_Ack | AI_STOP_Interrupt_Ack, Interrupt_A_Ack_Register); /* clear interrupts */ - - devpriv->stc_writew(dev, AI_Configuration_End, Joint_Reset_Register); + ni_stc_writew(dev, + AI_SC_TC_Error_Confirm | + AI_START_Interrupt_Ack | + AI_START2_Interrupt_Ack | + AI_START1_Interrupt_Ack | + AI_SC_TC_Interrupt_Ack | + AI_Error_Interrupt_Ack | + AI_STOP_Interrupt_Ack, + Interrupt_A_Ack_Register); /* clear interrupts */ + + ni_stc_writew(dev, AI_Configuration_End, Joint_Reset_Register); return 0; } @@ -1506,15 +1533,13 @@ static int ni_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s) static void ni_prime_channelgain_list(struct comedi_device *dev) { - struct ni_private *devpriv = dev->private; int i; - devpriv->stc_writew(dev, AI_CONVERT_Pulse, AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, AI_Command_1_Register); for (i = 0; i < NI_TIMEOUT; ++i) { - if (!(devpriv->stc_readw(dev, - AI_Status_1_Register) & + if (!(ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St)) { - devpriv->stc_writew(dev, 1, ADC_FIFO_Clear); + ni_stc_writew(dev, 1, ADC_FIFO_Clear); return; } udelay(1); @@ -1534,7 +1559,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, unsigned int dither; unsigned range_code; - devpriv->stc_writew(dev, 1, Configuration_Memory_Clear); + ni_stc_writew(dev, 1, Configuration_Memory_Clear); /* offset = 1 << (board->adbits - 1); */ if ((list[0] & CR_ALT_SOURCE)) { @@ -1659,7 +1684,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, devpriv->changain_state = 0; } - devpriv->stc_writew(dev, 1, Configuration_Memory_Clear); + ni_stc_writew(dev, 1, Configuration_Memory_Clear); /* Set up Calibration mode if required */ if (board->reg_type == ni_reg_6143) { @@ -1771,13 +1796,13 @@ static int ni_ai_insn_read(struct comedi_device *dev, signbits = devpriv->ai_offset[0]; if (board->reg_type == ni_reg_611x) { for (n = 0; n < num_adc_stages_611x; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); udelay(1); } for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); /* The 611x has screwy 32-bit FIFOs. */ d = 0; for (i = 0; i < NI_TIMEOUT; i++) { @@ -1788,8 +1813,7 @@ static int ni_ai_insn_read(struct comedi_device *dev, d &= 0xffff; break; } - if (!(devpriv->stc_readw(dev, - AI_Status_1_Register) & + if (!(ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St)) { d = devpriv->readl(dev, ADC_FIFO_Data_611x); @@ -1807,8 +1831,8 @@ static int ni_ai_insn_read(struct comedi_device *dev, } } else if (board->reg_type == ni_reg_6143) { for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ dl = 0; @@ -1832,11 +1856,10 @@ static int ni_ai_insn_read(struct comedi_device *dev, } } else { for (n = 0; n < insn->n; n++) { - devpriv->stc_writew(dev, AI_CONVERT_Pulse, - AI_Command_1_Register); + ni_stc_writew(dev, AI_CONVERT_Pulse, + AI_Command_1_Register); for (i = 0; i < NI_TIMEOUT; i++) { - if (!(devpriv->stc_readw(dev, - AI_Status_1_Register) & + if (!(ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St)) break; } @@ -2072,8 +2095,8 @@ static int ni_ai_inttrig(struct comedi_device *dev, if (trig_num != cmd->start_arg) return -EINVAL; - devpriv->stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, - AI_Command_2_Register); + ni_stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, + AI_Command_2_Register); s->async->inttrig = NULL; return 1; @@ -2100,21 +2123,22 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) ni_load_channelgain_list(dev, cmd->chanlist_len, cmd->chanlist); /* start configuration */ - devpriv->stc_writew(dev, AI_Configuration_Start, Joint_Reset_Register); + ni_stc_writew(dev, AI_Configuration_Start, Joint_Reset_Register); /* disable analog triggering for now, since it * interferes with the use of pfi0 */ devpriv->an_trig_etc_reg &= ~Analog_Trigger_Enable; - devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, - Analog_Trigger_Etc_Register); + ni_stc_writew(dev, devpriv->an_trig_etc_reg, + Analog_Trigger_Etc_Register); switch (cmd->start_src) { case TRIG_INT: case TRIG_NOW: - devpriv->stc_writew(dev, AI_START2_Select(0) | - AI_START1_Sync | AI_START1_Edge | - AI_START1_Select(0), - AI_Trigger_Select_Register); + ni_stc_writew(dev, + AI_START2_Select(0) | + AI_START1_Sync | AI_START1_Edge | + AI_START1_Select(0), + AI_Trigger_Select_Register); break; case TRIG_EXT: { @@ -2126,8 +2150,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) bits |= AI_START1_Polarity; if (cmd->start_arg & CR_EDGE) bits |= AI_START1_Edge; - devpriv->stc_writew(dev, bits, - AI_Trigger_Select_Register); + ni_stc_writew(dev, bits, AI_Trigger_Select_Register); break; } } @@ -2135,7 +2158,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) mode2 &= ~AI_Pre_Trigger; mode2 &= ~AI_SC_Initial_Load_Source; mode2 &= ~AI_SC_Reload_Mode; - devpriv->stc_writew(dev, mode2, AI_Mode_2_Register); + ni_stc_writew(dev, mode2, AI_Mode_2_Register); if (cmd->chanlist_len == 1 || (board->reg_type == ni_reg_611x) || (board->reg_type == ni_reg_6143)) { @@ -2145,8 +2168,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } else { start_stop_select |= AI_STOP_Select(19); /* ai configuration memory */ } - devpriv->stc_writew(dev, start_stop_select, - AI_START_STOP_Select_Register); + ni_stc_writew(dev, start_stop_select, AI_START_STOP_Select_Register); devpriv->ai_cmd2 = 0; switch (cmd->stop_src) { @@ -2158,12 +2180,12 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) stop_count += num_adc_stages_611x; } /* stage number of scans */ - devpriv->stc_writel(dev, stop_count, AI_SC_Load_A_Registers); + ni_stc_writel(dev, stop_count, AI_SC_Load_A_Registers); mode1 |= AI_Start_Stop | AI_Mode_1_Reserved | AI_Trigger_Once; - devpriv->stc_writew(dev, mode1, AI_Mode_1_Register); + ni_stc_writew(dev, mode1, AI_Mode_1_Register); /* load SC (Scan Count) */ - devpriv->stc_writew(dev, AI_SC_Load, AI_Command_1_Register); + ni_stc_writew(dev, AI_SC_Load, AI_Command_1_Register); devpriv->ai_continuous = 0; if (stop_count == 0) { @@ -2177,13 +2199,13 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) break; case TRIG_NONE: /* stage number of scans */ - devpriv->stc_writel(dev, 0, AI_SC_Load_A_Registers); + ni_stc_writel(dev, 0, AI_SC_Load_A_Registers); mode1 |= AI_Start_Stop | AI_Mode_1_Reserved | AI_Continuous; - devpriv->stc_writew(dev, mode1, AI_Mode_1_Register); + ni_stc_writew(dev, mode1, AI_Mode_1_Register); /* load SC (Scan Count) */ - devpriv->stc_writew(dev, AI_SC_Load, AI_Command_1_Register); + ni_stc_writew(dev, AI_SC_Load, AI_Command_1_Register); devpriv->ai_continuous = 1; @@ -2207,20 +2229,20 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) AI_STOP_Select=19 external pin (configuration mem) */ start_stop_select |= AI_START_Edge | AI_START_Sync; - devpriv->stc_writew(dev, start_stop_select, - AI_START_STOP_Select_Register); + ni_stc_writew(dev, start_stop_select, + AI_START_STOP_Select_Register); mode2 |= AI_SI_Reload_Mode(0); /* AI_SI_Initial_Load_Source=A */ mode2 &= ~AI_SI_Initial_Load_Source; /* mode2 |= AI_SC_Reload_Mode; */ - devpriv->stc_writew(dev, mode2, AI_Mode_2_Register); + ni_stc_writew(dev, mode2, AI_Mode_2_Register); /* load SI */ timer = ni_ns_to_timer(dev, cmd->scan_begin_arg, TRIG_ROUND_NEAREST); - devpriv->stc_writel(dev, timer, AI_SI_Load_A_Registers); - devpriv->stc_writew(dev, AI_SI_Load, AI_Command_1_Register); + ni_stc_writel(dev, timer, AI_SI_Load_A_Registers); + ni_stc_writew(dev, AI_SI_Load, AI_Command_1_Register); break; case TRIG_EXT: if (cmd->scan_begin_arg & CR_EDGE) @@ -2234,7 +2256,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) start_stop_select |= AI_START_Sync; start_stop_select |= AI_START_Select(1 + CR_CHAN(cmd->scan_begin_arg)); - devpriv->stc_writew(dev, start_stop_select, + ni_stc_writew(dev, start_stop_select, AI_START_STOP_Select_Register); break; } @@ -2247,31 +2269,32 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) else timer = ni_ns_to_timer(dev, cmd->convert_arg, TRIG_ROUND_NEAREST); - devpriv->stc_writew(dev, 1, AI_SI2_Load_A_Register); /* 0,0 does not work. */ - devpriv->stc_writew(dev, timer, AI_SI2_Load_B_Register); + /* 0,0 does not work */ + ni_stc_writew(dev, 1, AI_SI2_Load_A_Register); + ni_stc_writew(dev, timer, AI_SI2_Load_B_Register); /* AI_SI2_Reload_Mode = alternate */ /* AI_SI2_Initial_Load_Source = A */ mode2 &= ~AI_SI2_Initial_Load_Source; mode2 |= AI_SI2_Reload_Mode; - devpriv->stc_writew(dev, mode2, AI_Mode_2_Register); + ni_stc_writew(dev, mode2, AI_Mode_2_Register); /* AI_SI2_Load */ - devpriv->stc_writew(dev, AI_SI2_Load, AI_Command_1_Register); + ni_stc_writew(dev, AI_SI2_Load, AI_Command_1_Register); mode2 |= AI_SI2_Reload_Mode; /* alternate */ mode2 |= AI_SI2_Initial_Load_Source; /* B */ - devpriv->stc_writew(dev, mode2, AI_Mode_2_Register); + ni_stc_writew(dev, mode2, AI_Mode_2_Register); break; case TRIG_EXT: mode1 |= AI_CONVERT_Source_Select(1 + cmd->convert_arg); if ((cmd->convert_arg & CR_INVERT) == 0) mode1 |= AI_CONVERT_Source_Polarity; - devpriv->stc_writew(dev, mode1, AI_Mode_1_Register); + ni_stc_writew(dev, mode1, AI_Mode_1_Register); mode2 |= AI_Start_Stop_Gate_Enable | AI_SC_Gate_Enable; - devpriv->stc_writew(dev, mode2, AI_Mode_2_Register); + ni_stc_writew(dev, mode2, AI_Mode_2_Register); break; } @@ -2298,25 +2321,25 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) case AIMODE_HALF_FULL: /*generate FIFO interrupts and DMA requests on half-full */ #ifdef PCIDMA - devpriv->stc_writew(dev, AI_FIFO_Mode_HF_to_E, - AI_Mode_3_Register); + ni_stc_writew(dev, AI_FIFO_Mode_HF_to_E, + AI_Mode_3_Register); #else - devpriv->stc_writew(dev, AI_FIFO_Mode_HF, - AI_Mode_3_Register); + ni_stc_writew(dev, AI_FIFO_Mode_HF, + AI_Mode_3_Register); #endif break; case AIMODE_SAMPLE: /*generate FIFO interrupts on non-empty */ - devpriv->stc_writew(dev, AI_FIFO_Mode_NE, - AI_Mode_3_Register); + ni_stc_writew(dev, AI_FIFO_Mode_NE, + AI_Mode_3_Register); break; case AIMODE_SCAN: #ifdef PCIDMA - devpriv->stc_writew(dev, AI_FIFO_Mode_NE, - AI_Mode_3_Register); + ni_stc_writew(dev, AI_FIFO_Mode_NE, + AI_Mode_3_Register); #else - devpriv->stc_writew(dev, AI_FIFO_Mode_HF, - AI_Mode_3_Register); + ni_stc_writew(dev, AI_FIFO_Mode_HF, + AI_Mode_3_Register); #endif interrupt_a_enable |= AI_STOP_Interrupt_Enable; break; @@ -2324,7 +2347,16 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) break; } - devpriv->stc_writew(dev, AI_Error_Interrupt_Ack | AI_STOP_Interrupt_Ack | AI_START_Interrupt_Ack | AI_START2_Interrupt_Ack | AI_START1_Interrupt_Ack | AI_SC_TC_Interrupt_Ack | AI_SC_TC_Error_Confirm, Interrupt_A_Ack_Register); /* clear interrupts */ + /* clear interrupts */ + ni_stc_writew(dev, + AI_Error_Interrupt_Ack | + AI_STOP_Interrupt_Ack | + AI_START_Interrupt_Ack | + AI_START2_Interrupt_Ack | + AI_START1_Interrupt_Ack | + AI_SC_TC_Interrupt_Ack | + AI_SC_TC_Error_Confirm, + Interrupt_A_Ack_Register); ni_set_bits(dev, Interrupt_A_Enable_Register, interrupt_a_enable, 1); @@ -2336,19 +2368,19 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } /* end configuration */ - devpriv->stc_writew(dev, AI_Configuration_End, Joint_Reset_Register); + ni_stc_writew(dev, AI_Configuration_End, Joint_Reset_Register); switch (cmd->scan_begin_src) { case TRIG_TIMER: - devpriv->stc_writew(dev, - AI_SI2_Arm | AI_SI_Arm | AI_DIV_Arm | - AI_SC_Arm, AI_Command_1_Register); + ni_stc_writew(dev, + AI_SI2_Arm | AI_SI_Arm | AI_DIV_Arm | AI_SC_Arm, + AI_Command_1_Register); break; case TRIG_EXT: /* XXX AI_SI_Arm? */ - devpriv->stc_writew(dev, - AI_SI2_Arm | AI_SI_Arm | AI_DIV_Arm | - AI_SC_Arm, AI_Command_1_Register); + ni_stc_writew(dev, + AI_SI2_Arm | AI_SI_Arm | AI_DIV_Arm | AI_SC_Arm, + AI_Command_1_Register); break; } @@ -2362,8 +2394,8 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (cmd->start_src == TRIG_NOW) { /* AI_START1_Pulse */ - devpriv->stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, - AI_Command_2_Register); + ni_stc_writew(dev, AI_START1_Pulse | devpriv->ai_cmd2, + AI_Command_2_Register); s->async->inttrig = NULL; } else if (cmd->start_src == TRIG_EXT) { s->async->inttrig = NULL; @@ -2799,7 +2831,7 @@ static int ni_ao_inttrig(struct comedi_device *dev, AO_FIFO_Interrupt_Enable | AO_Error_Interrupt_Enable, 0); interrupt_b_bits = AO_Error_Interrupt_Enable; #ifdef PCIDMA - devpriv->stc_writew(dev, 1, DAC_FIFO_Clear); + ni_stc_writew(dev, 1, DAC_FIFO_Clear); if (board->reg_type & ni_reg_6xxx_mask) ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); ret = ni_ao_setup_MITE_dma(dev); @@ -2816,14 +2848,13 @@ static int ni_ao_inttrig(struct comedi_device *dev, interrupt_b_bits |= AO_FIFO_Interrupt_Enable; #endif - devpriv->stc_writew(dev, devpriv->ao_mode3 | AO_Not_An_UPDATE, - AO_Mode_3_Register); - devpriv->stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); + ni_stc_writew(dev, devpriv->ao_mode3 | AO_Not_An_UPDATE, + AO_Mode_3_Register); + ni_stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); /* wait for DACs to be loaded */ for (i = 0; i < timeout; i++) { udelay(1); - if ((devpriv->stc_readw(dev, - Joint_Status_2_Register) & + if ((ni_stc_readw(dev, Joint_Status_2_Register) & AO_TMRDACWRs_In_Progress_St) == 0) break; } @@ -2832,19 +2863,21 @@ static int ni_ao_inttrig(struct comedi_device *dev, "timed out waiting for AO_TMRDACWRs_In_Progress_St to clear"); return -EIO; } - /* stc manual says we are need to clear error interrupt after AO_TMRDACWRs_In_Progress_St clears */ - devpriv->stc_writew(dev, AO_Error_Interrupt_Ack, - Interrupt_B_Ack_Register); + /* + * stc manual says we are need to clear error interrupt after + * AO_TMRDACWRs_In_Progress_St clears + */ + ni_stc_writew(dev, AO_Error_Interrupt_Ack, Interrupt_B_Ack_Register); ni_set_bits(dev, Interrupt_B_Enable_Register, interrupt_b_bits, 1); - devpriv->stc_writew(dev, - devpriv->ao_cmd1 | AO_UI_Arm | AO_UC_Arm | AO_BC_Arm - | AO_DAC1_Update_Mode | AO_DAC0_Update_Mode, - AO_Command_1_Register); + ni_stc_writew(dev, devpriv->ao_cmd1 | + AO_UI_Arm | AO_UC_Arm | AO_BC_Arm | + AO_DAC1_Update_Mode | AO_DAC0_Update_Mode, + AO_Command_1_Register); - devpriv->stc_writew(dev, devpriv->ao_cmd2 | AO_START1_Pulse, - AO_Command_2_Register); + ni_stc_writew(dev, devpriv->ao_cmd2 | AO_START1_Pulse, + AO_Command_2_Register); return 0; } @@ -2863,9 +2896,9 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return -EIO; } - devpriv->stc_writew(dev, AO_Configuration_Start, Joint_Reset_Register); + ni_stc_writew(dev, AO_Configuration_Start, Joint_Reset_Register); - devpriv->stc_writew(dev, AO_Disarm, AO_Command_1_Register); + ni_stc_writew(dev, AO_Disarm, AO_Command_1_Register); if (board->reg_type & ni_reg_6xxx_mask) { ao_win_out(CLEAR_WG, AO_Misc_611x); @@ -2890,15 +2923,15 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ao_mode1 &= ~AO_Continuous; devpriv->ao_mode1 |= AO_Trigger_Once; } - devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); + ni_stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); switch (cmd->start_src) { case TRIG_INT: case TRIG_NOW: devpriv->ao_trigger_select &= ~(AO_START1_Polarity | AO_START1_Select(-1)); devpriv->ao_trigger_select |= AO_START1_Edge | AO_START1_Sync; - devpriv->stc_writew(dev, devpriv->ao_trigger_select, - AO_Trigger_Select_Register); + ni_stc_writew(dev, devpriv->ao_trigger_select, + AO_Trigger_Select_Register); break; case TRIG_EXT: devpriv->ao_trigger_select = @@ -2907,52 +2940,50 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ao_trigger_select |= AO_START1_Polarity; /* 0=active high, 1=active low. see daq-stc 3-24 (p186) */ if (cmd->start_arg & CR_EDGE) devpriv->ao_trigger_select |= AO_START1_Edge; /* 0=edge detection disabled, 1=enabled */ - devpriv->stc_writew(dev, devpriv->ao_trigger_select, - AO_Trigger_Select_Register); + ni_stc_writew(dev, devpriv->ao_trigger_select, + AO_Trigger_Select_Register); break; default: BUG(); break; } devpriv->ao_mode3 &= ~AO_Trigger_Length; - devpriv->stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); + ni_stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); - devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); + ni_stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); devpriv->ao_mode2 &= ~AO_BC_Initial_Load_Source; - devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); + ni_stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); if (cmd->stop_src == TRIG_NONE) - devpriv->stc_writel(dev, 0xffffff, AO_BC_Load_A_Register); + ni_stc_writel(dev, 0xffffff, AO_BC_Load_A_Register); else - devpriv->stc_writel(dev, 0, AO_BC_Load_A_Register); - devpriv->stc_writew(dev, AO_BC_Load, AO_Command_1_Register); + ni_stc_writel(dev, 0, AO_BC_Load_A_Register); + ni_stc_writew(dev, AO_BC_Load, AO_Command_1_Register); devpriv->ao_mode2 &= ~AO_UC_Initial_Load_Source; - devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); + ni_stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); switch (cmd->stop_src) { case TRIG_COUNT: if (devpriv->is_m_series) { /* this is how the NI example code does it for m-series boards, verified correct with 6259 */ - devpriv->stc_writel(dev, cmd->stop_arg - 1, - AO_UC_Load_A_Register); - devpriv->stc_writew(dev, AO_UC_Load, - AO_Command_1_Register); + ni_stc_writel(dev, cmd->stop_arg - 1, + AO_UC_Load_A_Register); + ni_stc_writew(dev, AO_UC_Load, AO_Command_1_Register); } else { - devpriv->stc_writel(dev, cmd->stop_arg, - AO_UC_Load_A_Register); - devpriv->stc_writew(dev, AO_UC_Load, - AO_Command_1_Register); - devpriv->stc_writel(dev, cmd->stop_arg - 1, - AO_UC_Load_A_Register); + ni_stc_writel(dev, cmd->stop_arg, + AO_UC_Load_A_Register); + ni_stc_writew(dev, AO_UC_Load, AO_Command_1_Register); + ni_stc_writel(dev, cmd->stop_arg - 1, + AO_UC_Load_A_Register); } break; case TRIG_NONE: - devpriv->stc_writel(dev, 0xffffff, AO_UC_Load_A_Register); - devpriv->stc_writew(dev, AO_UC_Load, AO_Command_1_Register); - devpriv->stc_writel(dev, 0xffffff, AO_UC_Load_A_Register); + ni_stc_writel(dev, 0xffffff, AO_UC_Load_A_Register); + ni_stc_writew(dev, AO_UC_Load, AO_Command_1_Register); + ni_stc_writel(dev, 0xffffff, AO_UC_Load_A_Register); break; default: - devpriv->stc_writel(dev, 0, AO_UC_Load_A_Register); - devpriv->stc_writew(dev, AO_UC_Load, AO_Command_1_Register); - devpriv->stc_writel(dev, cmd->stop_arg, AO_UC_Load_A_Register); + ni_stc_writel(dev, 0, AO_UC_Load_A_Register); + ni_stc_writew(dev, AO_UC_Load, AO_Command_1_Register); + ni_stc_writel(dev, cmd->stop_arg, AO_UC_Load_A_Register); } devpriv->ao_mode1 &= @@ -2964,9 +2995,9 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) trigvar = ni_ns_to_timer(dev, cmd->scan_begin_arg, TRIG_ROUND_NEAREST); - devpriv->stc_writel(dev, 1, AO_UI_Load_A_Register); - devpriv->stc_writew(dev, AO_UI_Load, AO_Command_1_Register); - devpriv->stc_writel(dev, trigvar, AO_UI_Load_A_Register); + ni_stc_writel(dev, 1, AO_UI_Load_A_Register); + ni_stc_writew(dev, AO_UI_Load, AO_Command_1_Register); + ni_stc_writel(dev, trigvar, AO_UI_Load_A_Register); break; case TRIG_EXT: devpriv->ao_mode1 |= @@ -2979,20 +3010,18 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) BUG(); break; } - devpriv->stc_writew(dev, devpriv->ao_cmd2, AO_Command_2_Register); - devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); + ni_stc_writew(dev, devpriv->ao_cmd2, AO_Command_2_Register); + ni_stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); devpriv->ao_mode2 &= ~(AO_UI_Reload_Mode(3) | AO_UI_Initial_Load_Source); - devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); + ni_stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); if (cmd->scan_end_arg > 1) { devpriv->ao_mode1 |= AO_Multiple_Channels; - devpriv->stc_writew(dev, - AO_Number_Of_Channels(cmd->scan_end_arg - - 1) | - AO_UPDATE_Output_Select - (AO_Update_Output_High_Z), - AO_Output_Control_Register); + ni_stc_writew(dev, + AO_Number_Of_Channels(cmd->scan_end_arg - 1) | + AO_UPDATE_Output_Select(AO_Update_Output_High_Z), + AO_Output_Control_Register); } else { unsigned bits; devpriv->ao_mode1 &= ~AO_Multiple_Channels; @@ -3004,15 +3033,15 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) bits |= AO_Number_Of_Channels(CR_CHAN(cmd->chanlist[0])); } - devpriv->stc_writew(dev, bits, AO_Output_Control_Register); + ni_stc_writew(dev, bits, AO_Output_Control_Register); } - devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); + ni_stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); - devpriv->stc_writew(dev, AO_DAC0_Update_Mode | AO_DAC1_Update_Mode, - AO_Command_1_Register); + ni_stc_writew(dev, AO_DAC0_Update_Mode | AO_DAC1_Update_Mode, + AO_Command_1_Register); devpriv->ao_mode3 |= AO_Stop_On_Overrun_Error; - devpriv->stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); + ni_stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); devpriv->ao_mode2 &= ~AO_FIFO_Mode_Mask; #ifdef PCIDMA @@ -3021,7 +3050,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ao_mode2 |= AO_FIFO_Mode_HF; #endif devpriv->ao_mode2 &= ~AO_FIFO_Retransmit_Enable; - devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); + ni_stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); bits = AO_BC_Source_Select | AO_UPDATE_Pulse_Width | AO_TMRDACWR_Pulse_Width; @@ -3035,15 +3064,15 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->is_m_series) bits |= AO_Number_Of_DAC_Packages; #endif - devpriv->stc_writew(dev, bits, AO_Personal_Register); + ni_stc_writew(dev, bits, AO_Personal_Register); /* enable sending of ao dma requests */ - devpriv->stc_writew(dev, AO_AOFREQ_Enable, AO_Start_Select_Register); + ni_stc_writew(dev, AO_AOFREQ_Enable, AO_Start_Select_Register); - devpriv->stc_writew(dev, AO_Configuration_End, Joint_Reset_Register); + ni_stc_writew(dev, AO_Configuration_End, Joint_Reset_Register); if (cmd->stop_src == TRIG_COUNT) { - devpriv->stc_writew(dev, AO_BC_TC_Interrupt_Ack, - Interrupt_B_Ack_Register); + ni_stc_writew(dev, AO_BC_TC_Interrupt_Ack, + Interrupt_B_Ack_Register); ni_set_bits(dev, Interrupt_B_Enable_Register, AO_BC_TC_Interrupt_Enable, 1); } @@ -3146,31 +3175,31 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_release_ao_mite_channel(dev); - devpriv->stc_writew(dev, AO_Configuration_Start, Joint_Reset_Register); - devpriv->stc_writew(dev, AO_Disarm, AO_Command_1_Register); + ni_stc_writew(dev, AO_Configuration_Start, Joint_Reset_Register); + ni_stc_writew(dev, AO_Disarm, AO_Command_1_Register); ni_set_bits(dev, Interrupt_B_Enable_Register, ~0, 0); - devpriv->stc_writew(dev, AO_BC_Source_Select, AO_Personal_Register); - devpriv->stc_writew(dev, 0x3f98, Interrupt_B_Ack_Register); - devpriv->stc_writew(dev, AO_BC_Source_Select | AO_UPDATE_Pulse_Width | - AO_TMRDACWR_Pulse_Width, AO_Personal_Register); - devpriv->stc_writew(dev, 0, AO_Output_Control_Register); - devpriv->stc_writew(dev, 0, AO_Start_Select_Register); + ni_stc_writew(dev, AO_BC_Source_Select, AO_Personal_Register); + ni_stc_writew(dev, 0x3f98, Interrupt_B_Ack_Register); + ni_stc_writew(dev, AO_BC_Source_Select | AO_UPDATE_Pulse_Width | + AO_TMRDACWR_Pulse_Width, AO_Personal_Register); + ni_stc_writew(dev, 0, AO_Output_Control_Register); + ni_stc_writew(dev, 0, AO_Start_Select_Register); devpriv->ao_cmd1 = 0; - devpriv->stc_writew(dev, devpriv->ao_cmd1, AO_Command_1_Register); + ni_stc_writew(dev, devpriv->ao_cmd1, AO_Command_1_Register); devpriv->ao_cmd2 = 0; - devpriv->stc_writew(dev, devpriv->ao_cmd2, AO_Command_2_Register); + ni_stc_writew(dev, devpriv->ao_cmd2, AO_Command_2_Register); devpriv->ao_mode1 = 0; - devpriv->stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); + ni_stc_writew(dev, devpriv->ao_mode1, AO_Mode_1_Register); devpriv->ao_mode2 = 0; - devpriv->stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); + ni_stc_writew(dev, devpriv->ao_mode2, AO_Mode_2_Register); if (devpriv->is_m_series) devpriv->ao_mode3 = AO_Last_Gate_Disable; else devpriv->ao_mode3 = 0; - devpriv->stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); + ni_stc_writew(dev, devpriv->ao_mode3, AO_Mode_3_Register); devpriv->ao_trigger_select = 0; - devpriv->stc_writew(dev, devpriv->ao_trigger_select, - AO_Trigger_Select_Register); + ni_stc_writew(dev, devpriv->ao_trigger_select, + AO_Trigger_Select_Register); if (board->reg_type & ni_reg_6xxx_mask) { unsigned immediate_bits = 0; unsigned i; @@ -3179,7 +3208,7 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) ao_win_out(immediate_bits, AO_Immediate_671x); ao_win_out(CLEAR_WG, AO_Misc_611x); } - devpriv->stc_writew(dev, AO_Configuration_End, Joint_Reset_Register); + ni_stc_writew(dev, AO_Configuration_End, Joint_Reset_Register); return 0; } @@ -3200,7 +3229,7 @@ static int ni_dio_insn_config(struct comedi_device *dev, devpriv->dio_control &= ~DIO_Pins_Dir_Mask; devpriv->dio_control |= DIO_Pins_Dir(s->io_bits); - devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); return insn->n; } @@ -3219,11 +3248,10 @@ static int ni_dio_insn_bits(struct comedi_device *dev, if (comedi_dio_update_state(s, data)) { devpriv->dio_output &= ~DIO_Parallel_Data_Mask; devpriv->dio_output |= DIO_Parallel_Data_Out(s->state); - devpriv->stc_writew(dev, devpriv->dio_output, - DIO_Output_Register); + ni_stc_writew(dev, devpriv->dio_output, DIO_Output_Register); } - data[1] = devpriv->stc_readw(dev, DIO_Parallel_Input_Register); + data[1] = ni_stc_readw(dev, DIO_Parallel_Input_Register); return insn->n; } @@ -3497,22 +3525,20 @@ static int ni_serial_hw_readwrite8(struct comedi_device *dev, devpriv->dio_output &= ~DIO_Serial_Data_Mask; devpriv->dio_output |= DIO_Serial_Data_Out(data_out); - devpriv->stc_writew(dev, devpriv->dio_output, DIO_Output_Register); + ni_stc_writew(dev, devpriv->dio_output, DIO_Output_Register); - status1 = devpriv->stc_readw(dev, Joint_Status_1_Register); + status1 = ni_stc_readw(dev, Joint_Status_1_Register); if (status1 & DIO_Serial_IO_In_Progress_St) { err = -EBUSY; goto Error; } devpriv->dio_control |= DIO_HW_Serial_Start; - devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); devpriv->dio_control &= ~DIO_HW_Serial_Start; /* Wait until STC says we're done, but don't loop infinitely. */ - while ((status1 = - devpriv->stc_readw(dev, - Joint_Status_1_Register)) & + while ((status1 = ni_stc_readw(dev, Joint_Status_1_Register)) & DIO_Serial_IO_In_Progress_St) { /* Delay one bit per loop */ udelay((devpriv->serial_interval_ns + 999) / 1000); @@ -3529,10 +3555,10 @@ static int ni_serial_hw_readwrite8(struct comedi_device *dev, udelay((devpriv->serial_interval_ns + 999) / 1000); if (data_in != NULL) - *data_in = devpriv->stc_readw(dev, DIO_Serial_Input_Register); + *data_in = ni_stc_readw(dev, DIO_Serial_Input_Register); Error: - devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); return err; } @@ -3555,27 +3581,23 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, devpriv->dio_output &= ~DIO_SDOUT; if (data_out & mask) devpriv->dio_output |= DIO_SDOUT; - devpriv->stc_writew(dev, devpriv->dio_output, - DIO_Output_Register); + ni_stc_writew(dev, devpriv->dio_output, DIO_Output_Register); /* Assert SDCLK (active low, inverted), wait for half of the delay, deassert SDCLK, and wait for the other half. */ devpriv->dio_control |= DIO_Software_Serial_Control; - devpriv->stc_writew(dev, devpriv->dio_control, - DIO_Control_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); udelay((devpriv->serial_interval_ns + 999) / 2000); devpriv->dio_control &= ~DIO_Software_Serial_Control; - devpriv->stc_writew(dev, devpriv->dio_control, - DIO_Control_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); udelay((devpriv->serial_interval_ns + 999) / 2000); /* Input current bit */ - if (devpriv->stc_readw(dev, - DIO_Parallel_Input_Register) & DIO_SDIN) { - /* printk("DIO_P_I_R: 0x%x\n", devpriv->stc_readw(dev, DIO_Parallel_Input_Register)); */ + if (ni_stc_readw(dev, DIO_Parallel_Input_Register) & DIO_SDIN) { + /* printk("DIO_P_I_R: 0x%x\n", ni_stc_readw(dev, DIO_Parallel_Input_Register)); */ input |= mask; } } @@ -3641,10 +3663,9 @@ static int ni_serial_insn_config(struct comedi_device *dev, devpriv->serial_interval_ns = data[1]; } - devpriv->stc_writew(dev, devpriv->dio_control, - DIO_Control_Register); - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + ni_stc_writew(dev, devpriv->dio_control, DIO_Control_Register); + ni_stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); return 1; break; @@ -3827,7 +3848,7 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, case NITIO_G0_LOADB: case NITIO_G1_LOADB: stc_register = ni_gpct_to_stc_register(reg); - devpriv->stc_writel(dev, bits, stc_register); + ni_stc_writel(dev, bits, stc_register); break; /* 16 bit registers */ @@ -3846,7 +3867,7 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, /* fall-through */ default: stc_register = ni_gpct_to_stc_register(reg); - devpriv->stc_writew(dev, bits, stc_register); + ni_stc_writew(dev, bits, stc_register); } } @@ -3870,12 +3891,12 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, case NITIO_G0_SW_SAVE: case NITIO_G1_SW_SAVE: stc_register = ni_gpct_to_stc_register(reg); - return devpriv->stc_readl(dev, stc_register); + return ni_stc_readl(dev, stc_register); /* 16 bit registers */ default: stc_register = ni_gpct_to_stc_register(reg); - return devpriv->stc_readw(dev, stc_register); + return ni_stc_readw(dev, stc_register); break; } return 0; @@ -3905,16 +3926,16 @@ static int ni_freq_out_insn_write(struct comedi_device *dev, if (insn->n) { devpriv->clock_and_fout &= ~FOUT_Enable; - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + ni_stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); devpriv->clock_and_fout &= ~FOUT_Divider_mask; /* use the last data value to set the fout divider */ devpriv->clock_and_fout |= FOUT_Divider(data[insn->n - 1]); devpriv->clock_and_fout |= FOUT_Enable; - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + ni_stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); } return insn->n; } @@ -3938,8 +3959,8 @@ static int ni_freq_out_insn_config(struct comedi_device *dev, default: return -EINVAL; } - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + ni_stc_writew(dev, devpriv->clock_and_fout, + Clock_and_FOUT_Register); break; case INSN_CONFIG_GET_CLOCK_SRC: if (devpriv->clock_and_fout & FOUT_Timebase_Select) { @@ -4726,8 +4747,8 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, return -EINVAL; } devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); pll_control_bits = MSeries_PLL_Enable_Bit | MSeries_PLL_VCO_Mode_75_150MHz_Bits; devpriv->clock_and_fout2 |= @@ -4813,8 +4834,8 @@ static int ni_set_master_clock(struct comedi_device *dev, if (source == NI_MIO_INTERNAL_CLOCK) { devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); devpriv->clock_ns = TIMEBASE_1_NS; if (devpriv->is_m_series) { devpriv->clock_and_fout2 &= @@ -4833,10 +4854,9 @@ static int ni_set_master_clock(struct comedi_device *dev, if (source == NI_MIO_RTSI_CLOCK) { devpriv->rtsi_trig_direction_reg |= Use_RTSI_Clock_Bit; - devpriv->stc_writew(dev, - devpriv-> - rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); + ni_stc_writew(dev, + devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); if (period_ns == 0) { printk ("%s: we don't handle an unspecified clock period correctly yet, returning error.\n", @@ -4916,14 +4936,14 @@ static int ni_set_rtsi_routing(struct comedi_device *dev, devpriv->rtsi_trig_a_output_reg &= ~RTSI_Trig_Output_Mask(chan); devpriv->rtsi_trig_a_output_reg |= RTSI_Trig_Output_Bits(chan, source); - devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, - RTSI_Trig_A_Output_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_a_output_reg, + RTSI_Trig_A_Output_Register); } else if (chan < 8) { devpriv->rtsi_trig_b_output_reg &= ~RTSI_Trig_Output_Mask(chan); devpriv->rtsi_trig_b_output_reg |= RTSI_Trig_Output_Bits(chan, source); - devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, - RTSI_Trig_B_Output_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_b_output_reg, + RTSI_Trig_B_Output_Register); } return 2; } @@ -4963,8 +4983,8 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, devpriv->rtsi_trig_direction_reg |= Drive_RTSI_Clock_Bit; } - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); break; case INSN_CONFIG_DIO_INPUT: if (chan < num_configurable_rtsi_channels(dev)) { @@ -4974,8 +4994,8 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, devpriv->rtsi_trig_direction_reg &= ~Drive_RTSI_Clock_Bit; } - devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, - RTSI_Trig_Direction_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_direction_reg, + RTSI_Trig_Direction_Register); break; case INSN_CONFIG_DIO_QUERY: if (chan < num_configurable_rtsi_channels(dev)) { @@ -5043,8 +5063,8 @@ static void ni_rtsi_init(struct comedi_device *dev) RTSI_Trig_Output_Bits(2, NI_RTSI_OUTPUT_SCLKG) | RTSI_Trig_Output_Bits(3, NI_RTSI_OUTPUT_DACUPDN); - devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, - RTSI_Trig_A_Output_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_a_output_reg, + RTSI_Trig_A_Output_Register); devpriv->rtsi_trig_b_output_reg = RTSI_Trig_Output_Bits(4, NI_RTSI_OUTPUT_DA_START1) | @@ -5054,12 +5074,12 @@ static void ni_rtsi_init(struct comedi_device *dev) if (devpriv->is_m_series) devpriv->rtsi_trig_b_output_reg |= RTSI_Trig_Output_Bits(7, NI_RTSI_OUTPUT_RTSI_OSC); - devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, - RTSI_Trig_B_Output_Register); + ni_stc_writew(dev, devpriv->rtsi_trig_b_output_reg, + RTSI_Trig_B_Output_Register); /* * Sets the source and direction of the 4 on board lines -* devpriv->stc_writew(dev, 0x0000, RTSI_Board_Register); +* ni_stc_writew(dev, 0x0000, RTSI_Board_Register); */ } @@ -5103,19 +5123,19 @@ static int GPCT_G_Watch(struct comedi_device *dev, int chan) unsigned int hi1, hi2, lo; devpriv->gpct_command[chan] &= ~G_Save_Trace; - devpriv->stc_writew(dev, devpriv->gpct_command[chan], - G_Command_Register(chan)); + ni_stc_writew(dev, devpriv->gpct_command[chan], + G_Command_Register(chan)); devpriv->gpct_command[chan] |= G_Save_Trace; - devpriv->stc_writew(dev, devpriv->gpct_command[chan], - G_Command_Register(chan)); + ni_stc_writew(dev, devpriv->gpct_command[chan], + G_Command_Register(chan)); /* This procedure is used because the two registers cannot * be read atomically. */ do { - hi1 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); - lo = devpriv->stc_readw(dev, G_Save_Register_Low(chan)); - hi2 = devpriv->stc_readw(dev, G_Save_Register_High(chan)); + hi1 = ni_stc_readw(dev, G_Save_Register_High(chan)); + lo = ni_stc_readw(dev, G_Save_Register_Low(chan)); + hi2 = ni_stc_readw(dev, G_Save_Register_High(chan)); } while (hi1 != hi2); return (hi1 << 16) | lo; @@ -5130,7 +5150,7 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) switch (chan) { case 0: - devpriv->stc_writew(dev, G0_Reset, Joint_Reset_Register); + ni_stc_writew(dev, G0_Reset, Joint_Reset_Register); ni_set_bits(dev, Interrupt_A_Enable_Register, G0_TC_Interrupt_Enable, 0); ni_set_bits(dev, Interrupt_A_Enable_Register, @@ -5139,16 +5159,15 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) temp_ack_reg |= G0_TC_Error_Confirm; temp_ack_reg |= G0_TC_Interrupt_Ack; temp_ack_reg |= G0_Gate_Interrupt_Ack; - devpriv->stc_writew(dev, temp_ack_reg, - Interrupt_A_Ack_Register); + ni_stc_writew(dev, temp_ack_reg, Interrupt_A_Ack_Register); /* problem...this interferes with the other ctr... */ devpriv->an_trig_etc_reg |= GPFO_0_Output_Enable; - devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, - Analog_Trigger_Etc_Register); + ni_stc_writew(dev, devpriv->an_trig_etc_reg, + Analog_Trigger_Etc_Register); break; case 1: - devpriv->stc_writew(dev, G1_Reset, Joint_Reset_Register); + ni_stc_writew(dev, G1_Reset, Joint_Reset_Register); ni_set_bits(dev, Interrupt_B_Enable_Register, G1_TC_Interrupt_Enable, 0); ni_set_bits(dev, Interrupt_B_Enable_Register, @@ -5157,12 +5176,11 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) temp_ack_reg |= G1_TC_Error_Confirm; temp_ack_reg |= G1_TC_Interrupt_Ack; temp_ack_reg |= G1_Gate_Interrupt_Ack; - devpriv->stc_writew(dev, temp_ack_reg, - Interrupt_B_Ack_Register); + ni_stc_writew(dev, temp_ack_reg, Interrupt_B_Ack_Register); devpriv->an_trig_etc_reg |= GPFO_1_Output_Enable; - devpriv->stc_writew(dev, devpriv->an_trig_etc_reg, - Analog_Trigger_Etc_Register); + ni_stc_writew(dev, devpriv->an_trig_etc_reg, + Analog_Trigger_Etc_Register); break; } @@ -5172,11 +5190,10 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) devpriv->gpct_command[chan] |= G_Synchronized_Gate; - devpriv->stc_writew(dev, devpriv->gpct_mode[chan], - G_Mode_Register(chan)); - devpriv->stc_writew(dev, devpriv->gpct_input_select[chan], - G_Input_Select_Register(chan)); - devpriv->stc_writew(dev, 0, G_Autoincrement_Register(chan)); + ni_stc_writew(dev, devpriv->gpct_mode[chan], G_Mode_Register(chan)); + ni_stc_writew(dev, devpriv->gpct_input_select[chan], + G_Input_Select_Register(chan)); + ni_stc_writew(dev, 0, G_Autoincrement_Register(chan)); /* printk("exit GPCT_Reset\n"); */ } @@ -5185,13 +5202,13 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) static irqreturn_t ni_E_interrupt(int irq, void *d) { struct comedi_device *dev = d; - struct ni_private *devpriv = dev->private; unsigned short a_status; unsigned short b_status; unsigned int ai_mite_status = 0; unsigned int ao_mite_status = 0; unsigned long flags; #ifdef PCIDMA + struct ni_private *devpriv = dev->private; struct mite_struct *mite = devpriv->mite; #endif @@ -5201,10 +5218,11 @@ static irqreturn_t ni_E_interrupt(int irq, void *d) /* lock to avoid race with comedi_poll */ spin_lock_irqsave(&dev->spinlock, flags); - a_status = devpriv->stc_readw(dev, AI_Status_1_Register); - b_status = devpriv->stc_readw(dev, AO_Status_1_Register); + a_status = ni_stc_readw(dev, AI_Status_1_Register); + b_status = ni_stc_readw(dev, AO_Status_1_Register); #ifdef PCIDMA if (mite) { + struct ni_private *devpriv = dev->private; unsigned long flags_too; spin_lock_irqsave(&devpriv->mite_channel_lock, flags_too); @@ -5550,23 +5568,20 @@ static int ni_E_init(struct comedi_device *dev) Slow_Internal_Timebase | Clock_To_Board_Divide_By_2 | Clock_To_Board; } - devpriv->stc_writew(dev, devpriv->clock_and_fout, - Clock_and_FOUT_Register); + ni_stc_writew(dev, devpriv->clock_and_fout, Clock_and_FOUT_Register); /* analog output configuration */ s = &dev->subdevices[NI_AO_SUBDEV]; ni_ao_reset(dev, s); if (dev->irq) { - devpriv->stc_writew(dev, - (IRQ_POLARITY ? Interrupt_Output_Polarity : - 0) | (Interrupt_Output_On_3_Pins & 0) | - Interrupt_A_Enable | Interrupt_B_Enable | - Interrupt_A_Output_Select(interrupt_pin - (dev->irq)) | - Interrupt_B_Output_Select(interrupt_pin - (dev->irq)), - Interrupt_Control_Register); + ni_stc_writew(dev, + (IRQ_POLARITY ? Interrupt_Output_Polarity : 0) | + (Interrupt_Output_On_3_Pins & 0) | + Interrupt_A_Enable | Interrupt_B_Enable | + Interrupt_A_Output_Select(interrupt_pin(dev->irq)) | + Interrupt_B_Output_Select(interrupt_pin(dev->irq)), + Interrupt_Control_Register); } /* DMA setup */ -- cgit From 5a92cac5dc3b48a4ae176045e1f13ecde5a7b586 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:35 -0700 Subject: staging: comedi: ni_mio_common.c: wrap the read/write operations The ni_atmio, ni_pcimio, and ni_mio_cs drivers all include this source file to handle the common functionality of the drivers. Each of those drivers set some function pointers in the private data to handle the read/write operations to the normal registers. Like done for the stc register operations, wrap these operations with some helper functions to clarify the code a bit and make it easier to read and maintain. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 401 +++++++++++++------------ 1 file changed, 207 insertions(+), 194 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e54c016ea6a4..040afba980c1 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -246,6 +246,48 @@ enum timebase_nanoseconds { static const int num_adc_stages_611x = 3; +static void ni_writel(struct comedi_device *dev, uint32_t data, int reg) +{ + struct ni_private *devpriv = dev->private; + + devpriv->writel(dev, data, reg); +} + +static void ni_writew(struct comedi_device *dev, uint16_t data, int reg) +{ + struct ni_private *devpriv = dev->private; + + devpriv->writew(dev, data, reg); +} + +static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg) +{ + struct ni_private *devpriv = dev->private; + + devpriv->writeb(dev, data, reg); +} + +static uint32_t ni_readl(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return devpriv->readl(dev, reg); +} + +static uint16_t ni_readw(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return devpriv->readw(dev, reg); +} + +static uint8_t ni_readb(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + + return devpriv->readb(dev, reg); +} + static void ni_stc_writel(struct comedi_device *dev, uint32_t data, int reg) { struct ni_private *devpriv = dev->private; @@ -303,12 +345,12 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, case AI_AO_Select: devpriv->ai_ao_select_reg &= ~bit_mask; devpriv->ai_ao_select_reg |= bit_values & bit_mask; - devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); + ni_writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); break; case G0_G1_Select: devpriv->g0_g1_select_reg &= ~bit_mask; devpriv->g0_g1_select_reg |= bit_values & bit_mask; - devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); + ni_writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); break; default: printk("Warning %s() called with invalid register\n", __func__); @@ -384,7 +426,7 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, (ni_stc_dma_channel_select_bitfield(mite_channel) << CDO_DMA_Select_Shift) & CDO_DMA_Select_Mask; } - devpriv->writeb(dev, devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); + ni_writeb(dev, devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); mmiowb(); spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags); } @@ -586,17 +628,16 @@ static void ni_e_series_enable_second_irq(struct comedi_device *dev, static void ni_clear_ai_fifo(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; static const int timeout = 10000; int i; if (board->reg_type == ni_reg_6143) { /* Flush the 6143 data FIFO */ - devpriv->writel(dev, 0x10, AIFIFO_Control_6143); - devpriv->writel(dev, 0x00, AIFIFO_Control_6143); + ni_writel(dev, 0x10, AIFIFO_Control_6143); + ni_writel(dev, 0x00, AIFIFO_Control_6143); /* Wait for complete */ for (i = 0; i < timeout; i++) { - if (!(devpriv->readl(dev, AIFIFO_Status_6143) & 0x10)) + if (!(ni_readl(dev, AIFIFO_Status_6143) & 0x10)) break; udelay(1); } @@ -606,8 +647,8 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) } else { ni_stc_writew(dev, 1, ADC_FIFO_Clear); if (board->reg_type == ni_reg_625x) { - devpriv->writeb(dev, 0, M_Offset_Static_AI_Control(0)); - devpriv->writeb(dev, 1, M_Offset_Static_AI_Control(0)); + ni_writeb(dev, 0, M_Offset_Static_AI_Control(0)); + ni_writeb(dev, 1, M_Offset_Static_AI_Control(0)); #if 0 /* the NI example code does 3 convert pulses for 625x boards, but that appears to be wrong in practice. */ @@ -645,8 +686,8 @@ static inline void ni_ao_win_outw(struct comedi_device *dev, uint16_t data, unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - devpriv->writew(dev, addr, AO_Window_Address_611x); - devpriv->writew(dev, data, AO_Window_Data_611x); + ni_writew(dev, addr, AO_Window_Address_611x); + ni_writew(dev, data, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -657,8 +698,8 @@ static inline void ni_ao_win_outl(struct comedi_device *dev, uint32_t data, unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - devpriv->writew(dev, addr, AO_Window_Address_611x); - devpriv->writel(dev, data, AO_Window_Data_611x); + ni_writew(dev, addr, AO_Window_Address_611x); + ni_writel(dev, data, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -669,8 +710,8 @@ static inline unsigned short ni_ao_win_inw(struct comedi_device *dev, int addr) unsigned short data; spin_lock_irqsave(&devpriv->window_lock, flags); - devpriv->writew(dev, addr, AO_Window_Address_611x); - data = devpriv->readw(dev, AO_Window_Data_611x); + ni_writew(dev, addr, AO_Window_Address_611x); + data = ni_readw(dev, AO_Window_Data_611x); spin_unlock_irqrestore(&devpriv->window_lock, flags); return data; } @@ -785,7 +826,6 @@ static void ni_ao_fifo_load(struct comedi_device *dev, struct comedi_subdevice *s, int n) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; int chan; @@ -814,9 +854,9 @@ static void ni_ao_fifo_load(struct comedi_device *dev, i++; packed_data |= (d << 16) & 0xffff0000; } - devpriv->writel(dev, packed_data, DAC_FIFO_Data_611x); + ni_writel(dev, packed_data, DAC_FIFO_Data_611x); } else { - devpriv->writew(dev, d, DAC_FIFO_Data); + ni_writew(dev, d, DAC_FIFO_Data); } chan++; chan %= cmd->chanlist_len; @@ -903,7 +943,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, u32 dl; for (i = 0; i < n / 2; i++) { - dl = devpriv->readl(dev, ADC_FIFO_Data_611x); + dl = ni_readl(dev, ADC_FIFO_Data_611x); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16) & 0xffff; data[1] = dl & 0xffff; @@ -911,7 +951,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } /* Check if there's a single sample stuck in the FIFO */ if (n % 2) { - dl = devpriv->readl(dev, ADC_FIFO_Data_611x); + dl = ni_readl(dev, ADC_FIFO_Data_611x); data[0] = dl & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -921,7 +961,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ for (i = 0; i < n / 2; i++) { - dl = devpriv->readl(dev, AIFIFO_Data_6143); + dl = ni_readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; data[1] = dl & 0xffff; @@ -930,8 +970,8 @@ static void ni_ai_fifo_read(struct comedi_device *dev, if (n % 2) { /* Assume there is a single sample stuck in the FIFO */ /* Get stranded sample into FIFO */ - devpriv->writel(dev, 0x01, AIFIFO_Control_6143); - dl = devpriv->readl(dev, AIFIFO_Data_6143); + ni_writel(dev, 0x01, AIFIFO_Control_6143); + dl = ni_readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -944,7 +984,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } for (i = 0; i < n; i++) { devpriv->ai_fifo_buffer[i] = - devpriv->readw(dev, ADC_FIFO_Data_Register); + ni_readw(dev, ADC_FIFO_Data_Register); } cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, n * @@ -980,7 +1020,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) if (board->reg_type == ni_reg_611x) { while ((ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St) == 0) { - dl = devpriv->readl(dev, ADC_FIFO_Data_611x); + dl = ni_readl(dev, ADC_FIFO_Data_611x); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16); @@ -989,8 +1029,8 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) } } else if (board->reg_type == ni_reg_6143) { i = 0; - while (devpriv->readl(dev, AIFIFO_Status_6143) & 0x04) { - dl = devpriv->readl(dev, AIFIFO_Data_6143); + while (ni_readl(dev, AIFIFO_Status_6143) & 0x04) { + dl = ni_readl(dev, AIFIFO_Data_6143); /* This may get the hi/lo data in the wrong order */ data[0] = (dl >> 16); @@ -999,10 +1039,10 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) i += 2; } /* Check if stranded sample is present */ - if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { + if (ni_readl(dev, AIFIFO_Status_6143) & 0x01) { /* Get stranded sample into FIFO */ - devpriv->writel(dev, 0x01, AIFIFO_Control_6143); - dl = devpriv->readl(dev, AIFIFO_Data_6143); + ni_writel(dev, 0x01, AIFIFO_Control_6143); + dl = ni_readl(dev, AIFIFO_Data_6143); data[0] = (dl >> 16) & 0xffff; cfc_write_to_buffer(s, data[0]); } @@ -1021,7 +1061,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) if (fifo_empty) break; devpriv->ai_fifo_buffer[i] = - devpriv->readw(dev, ADC_FIFO_Data_Register); + ni_readw(dev, ADC_FIFO_Data_Register); } cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, i * @@ -1034,7 +1074,6 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) static void get_last_sample_611x(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1043,8 +1082,8 @@ static void get_last_sample_611x(struct comedi_device *dev) return; /* Check if there's a single sample stuck in the FIFO */ - if (devpriv->readb(dev, XXX_Status) & 0x80) { - dl = devpriv->readl(dev, ADC_FIFO_Data_611x); + if (ni_readb(dev, XXX_Status) & 0x80) { + dl = ni_readl(dev, ADC_FIFO_Data_611x); data = (dl & 0xffff); cfc_write_to_buffer(s, data); } @@ -1053,7 +1092,6 @@ static void get_last_sample_611x(struct comedi_device *dev) static void get_last_sample_6143(struct comedi_device *dev) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; @@ -1062,10 +1100,10 @@ static void get_last_sample_6143(struct comedi_device *dev) return; /* Check if there's a single sample stuck in the FIFO */ - if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { + if (ni_readl(dev, AIFIFO_Status_6143) & 0x01) { /* Get stranded sample into FIFO */ - devpriv->writel(dev, 0x01, AIFIFO_Control_6143); - dl = devpriv->readl(dev, AIFIFO_Data_6143); + ni_writel(dev, 0x01, AIFIFO_Control_6143); + dl = ni_readl(dev, AIFIFO_Data_6143); /* This may get the hi/lo data in the wrong order */ data = (dl >> 16) & 0xffff; @@ -1414,7 +1452,6 @@ static int ni_ao_setup_MITE_dma(struct comedi_device *dev) static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) { const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; ni_release_ai_mite_channel(dev); /* ai configuration */ @@ -1430,7 +1467,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_clear_ai_fifo(dev); if (board->reg_type != ni_reg_6143) - devpriv->writeb(dev, 0, Misc_Command); + ni_writeb(dev, 0, Misc_Command); ni_stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ ni_stc_writew(dev, AI_Start_Stop | AI_Mode_1_Reserved @@ -1581,10 +1618,9 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, bypass_bits |= MSeries_AI_Bypass_Dither_Bit; /* don't use 2's complement encoding */ bypass_bits |= MSeries_AI_Bypass_Polarity_Bit; - devpriv->writel(dev, bypass_bits, - M_Offset_AI_Config_FIFO_Bypass); + ni_writel(dev, bypass_bits, M_Offset_AI_Config_FIFO_Bypass); } else { - devpriv->writel(dev, 0, M_Offset_AI_Config_FIFO_Bypass); + ni_writel(dev, 0, M_Offset_AI_Config_FIFO_Bypass); } offset = 0; for (i = 0; i < n_chan; i++) { @@ -1622,7 +1658,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, config_bits |= MSeries_AI_Config_Dither_Bit; /* don't use 2's complement encoding */ config_bits |= MSeries_AI_Config_Polarity_Bit; - devpriv->writew(dev, config_bits, M_Offset_AI_Config_FIFO_Data); + ni_writew(dev, config_bits, M_Offset_AI_Config_FIFO_Data); } ni_prime_channelgain_list(dev); } @@ -1691,21 +1727,21 @@ static void ni_load_channelgain_list(struct comedi_device *dev, if ((list[0] & CR_ALT_SOURCE) && !devpriv->ai_calib_source_enabled) { /* Strobe Relay enable bit */ - devpriv->writew(dev, devpriv->ai_calib_source | - Calibration_Channel_6143_RelayOn, - Calibration_Channel_6143); - devpriv->writew(dev, devpriv->ai_calib_source, - Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOn, + Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source, + Calibration_Channel_6143); devpriv->ai_calib_source_enabled = 1; msleep_interruptible(100); /* Allow relays to change */ } else if (!(list[0] & CR_ALT_SOURCE) && devpriv->ai_calib_source_enabled) { /* Strobe Relay disable bit */ - devpriv->writew(dev, devpriv->ai_calib_source | - Calibration_Channel_6143_RelayOff, - Calibration_Channel_6143); - devpriv->writew(dev, devpriv->ai_calib_source, - Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOff, + Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source, + Calibration_Channel_6143); devpriv->ai_calib_source_enabled = 0; msleep_interruptible(100); /* Allow relays to change */ } @@ -1733,8 +1769,8 @@ static void ni_load_channelgain_list(struct comedi_device *dev, hi = 0; if ((list[i] & CR_ALT_SOURCE)) { if (board->reg_type == ni_reg_611x) - devpriv->writew(dev, CR_CHAN(list[i]) & 0x0003, - Calibration_Channel_Select_611x); + ni_writew(dev, CR_CHAN(list[i]) & 0x0003, + Calibration_Channel_Select_611x); } else { if (board->reg_type == ni_reg_611x) aref = AREF_DIFF; @@ -1756,7 +1792,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } hi |= AI_CONFIG_CHANNEL(chan); - devpriv->writew(dev, hi, Configuration_Memory_High); + ni_writew(dev, hi, Configuration_Memory_High); if (board->reg_type != ni_reg_6143) { lo = range; @@ -1765,7 +1801,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, if (dither) lo |= AI_DITHER; - devpriv->writew(dev, lo, Configuration_Memory_Low); + ni_writew(dev, lo, Configuration_Memory_Low); } } @@ -1806,17 +1842,15 @@ static int ni_ai_insn_read(struct comedi_device *dev, /* The 611x has screwy 32-bit FIFOs. */ d = 0; for (i = 0; i < NI_TIMEOUT; i++) { - if (devpriv->readb(dev, XXX_Status) & 0x80) { - d = devpriv->readl(dev, - ADC_FIFO_Data_611x); + if (ni_readb(dev, XXX_Status) & 0x80) { + d = ni_readl(dev, ADC_FIFO_Data_611x); d >>= 16; d &= 0xffff; break; } if (!(ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St)) { - d = devpriv->readl(dev, - ADC_FIFO_Data_611x); + d = ni_readl(dev, ADC_FIFO_Data_611x); d &= 0xffff; break; } @@ -1837,13 +1871,11 @@ static int ni_ai_insn_read(struct comedi_device *dev, /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ dl = 0; for (i = 0; i < NI_TIMEOUT; i++) { - if (devpriv->readl(dev, AIFIFO_Status_6143) & - 0x01) { + if (ni_readl(dev, AIFIFO_Status_6143) & 0x01) { /* Get stranded sample into FIFO */ - devpriv->writel(dev, 0x01, - AIFIFO_Control_6143); - dl = devpriv->readl(dev, - AIFIFO_Data_6143); + ni_writel(dev, 0x01, + AIFIFO_Control_6143); + dl = ni_readl(dev, AIFIFO_Data_6143); break; } } @@ -1869,11 +1901,11 @@ static int ni_ai_insn_read(struct comedi_device *dev, return -ETIME; } if (devpriv->is_m_series) { - dl = devpriv->readl(dev, M_Offset_AI_FIFO_Data); + dl = ni_readl(dev, M_Offset_AI_FIFO_Data); dl &= mask; data[n] = dl; } else { - d = devpriv->readw(dev, ADC_FIFO_Data_Register); + d = ni_readw(dev, ADC_FIFO_Data_Register); d += signbits; /* subtle: needs to be short addition */ data[n] = d; } @@ -2537,8 +2569,7 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; devpriv->ai_calib_source = calib_source; - devpriv->writew(dev, calib_source, - Calibration_Channel_6143); + ni_writew(dev, calib_source, Calibration_Channel_6143); } else { unsigned int calib_source; unsigned int calib_source_adjust; @@ -2550,8 +2581,8 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; devpriv->ai_calib_source = calib_source; if (board->reg_type == ni_reg_611x) { - devpriv->writeb(dev, calib_source_adjust, - Cal_Gain_Select_611x); + ni_writeb(dev, calib_source_adjust, + Cal_Gain_Select_611x); } } return 2; @@ -2604,10 +2635,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, if (timed) { for (i = 0; i < board->n_aochan; ++i) { devpriv->ao_conf[i] &= ~MSeries_AO_Update_Timed_Bit; - devpriv->writeb(dev, devpriv->ao_conf[i], - M_Offset_AO_Config_Bank(i)); - devpriv->writeb(dev, 0xf, - M_Offset_AO_Waveform_Order(i)); + ni_writeb(dev, devpriv->ao_conf[i], + M_Offset_AO_Config_Bank(i)); + ni_writeb(dev, 0xf, M_Offset_AO_Waveform_Order(i)); } } for (i = 0; i < n_chans; i++) { @@ -2620,23 +2650,23 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, switch (krange->max - krange->min) { case 20000000: conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; - devpriv->writeb(dev, 0, - M_Offset_AO_Reference_Attenuation(chan)); + ni_writeb(dev, 0, + M_Offset_AO_Reference_Attenuation(chan)); break; case 10000000: conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; - devpriv->writeb(dev, 0, - M_Offset_AO_Reference_Attenuation(chan)); + ni_writeb(dev, 0, + M_Offset_AO_Reference_Attenuation(chan)); break; case 4000000: conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; - devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, - M_Offset_AO_Reference_Attenuation(chan)); + ni_writeb(dev, MSeries_Attenuate_x5_Bit, + M_Offset_AO_Reference_Attenuation(chan)); break; case 2000000: conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; - devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, - M_Offset_AO_Reference_Attenuation(chan)); + ni_writeb(dev, MSeries_Attenuate_x5_Bit, + M_Offset_AO_Reference_Attenuation(chan)); break; default: printk("%s: bug! unhandled ao reference voltage\n", @@ -2657,9 +2687,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, } if (timed) conf |= MSeries_AO_Update_Timed_Bit; - devpriv->writeb(dev, conf, M_Offset_AO_Config_Bank(chan)); + ni_writeb(dev, conf, M_Offset_AO_Config_Bank(chan)); devpriv->ao_conf[chan] = conf; - devpriv->writeb(dev, i, M_Offset_AO_Waveform_Order(chan)); + ni_writeb(dev, i, M_Offset_AO_Waveform_Order(chan)); } return invert; } @@ -2705,7 +2735,7 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, conf |= (CR_AREF(chanspec[i]) == AREF_OTHER) ? AO_Ground_Ref : 0; - devpriv->writew(dev, conf, AO_Configuration); + ni_writew(dev, conf, AO_Configuration); devpriv->ao_conf[chan] = conf; } return invert; @@ -2749,10 +2779,10 @@ static int ni_ao_insn_write(struct comedi_device *dev, devpriv->ao[chan] = data[0]; if (devpriv->is_m_series) { - devpriv->writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); + ni_writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); } else - devpriv->writew(dev, data[0] ^ invert, - (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); + ni_writew(dev, data[0] ^ invert, + (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); return 1; } @@ -3261,14 +3291,13 @@ static int ni_m_series_dio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); if (ret) return ret; - devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); + ni_writel(dev, s->io_bits, M_Offset_DIO_Direction); return insn->n; } @@ -3278,12 +3307,10 @@ static int ni_m_series_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - devpriv->writel(dev, s->state, M_Offset_Static_Digital_Output); + ni_writel(dev, s->state, M_Offset_Static_Digital_Output); - data[1] = devpriv->readl(dev, M_Offset_Static_Digital_Input); + data[1] = ni_readl(dev, M_Offset_Static_Digital_Input); return insn->n; } @@ -3362,12 +3389,12 @@ static int ni_cdo_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trig_num) { - struct ni_private *devpriv = dev->private; struct comedi_cmd *cmd = &s->async->cmd; const unsigned timeout = 1000; int retval = 0; unsigned i; #ifdef PCIDMA + struct ni_private *devpriv = dev->private; unsigned long flags; #endif @@ -3394,12 +3421,11 @@ static int ni_cdo_inttrig(struct comedi_device *dev, #endif /* * XXX not sure what interrupt C group does -* devpriv->writeb(dev, Interrupt_Group_C_Enable_Bit, +* ni_writeb(dev, Interrupt_Group_C_Enable_Bit, * M_Offset_Interrupt_C_Enable); wait for dma to fill output fifo */ for (i = 0; i < timeout; ++i) { - if (devpriv->readl(dev, M_Offset_CDIO_Status) & - CDO_FIFO_Full_Bit) + if (ni_readl(dev, M_Offset_CDIO_Status) & CDO_FIFO_Full_Bit) break; udelay(10); } @@ -3408,20 +3434,19 @@ static int ni_cdo_inttrig(struct comedi_device *dev, s->cancel(dev, s); return -EIO; } - devpriv->writel(dev, CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | - CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, - M_Offset_CDIO_Command); + ni_writel(dev, CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | + CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, + M_Offset_CDIO_Command); return retval; } static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_private *devpriv = dev->private; const struct comedi_cmd *cmd = &s->async->cmd; unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; int retval; - devpriv->writel(dev, CDO_Reset_Bit, M_Offset_CDIO_Command); + ni_writel(dev, CDO_Reset_Bit, M_Offset_CDIO_Command); switch (cmd->scan_begin_src) { case TRIG_EXT: cdo_mode_bits |= @@ -3434,11 +3459,11 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } if (cmd->scan_begin_arg & CR_INVERT) cdo_mode_bits |= CDO_Polarity_Bit; - devpriv->writel(dev, cdo_mode_bits, M_Offset_CDO_Mode); + ni_writel(dev, cdo_mode_bits, M_Offset_CDO_Mode); if (s->io_bits) { - devpriv->writel(dev, s->state, M_Offset_CDO_FIFO_Data); - devpriv->writel(dev, CDO_SW_Update_Bit, M_Offset_CDIO_Command); - devpriv->writel(dev, s->io_bits, M_Offset_CDO_Mask_Enable); + ni_writel(dev, s->state, M_Offset_CDO_FIFO_Data); + ni_writel(dev, CDO_SW_Update_Bit, M_Offset_CDIO_Command); + ni_writel(dev, s->io_bits, M_Offset_CDO_Mask_Enable); } else { comedi_error(dev, "attempted to run digital output command with no lines configured as outputs"); @@ -3455,18 +3480,15 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_private *devpriv = dev->private; - - devpriv->writel(dev, CDO_Disarm_Bit | - CDO_Error_Interrupt_Enable_Clear_Bit | - CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | - CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, - M_Offset_CDIO_Command); + ni_writel(dev, CDO_Disarm_Bit | CDO_Error_Interrupt_Enable_Clear_Bit | + CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | + CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, + M_Offset_CDIO_Command); /* -* XXX not sure what interrupt C group does devpriv->writeb(dev, 0, +* XXX not sure what interrupt C group does ni_writeb(dev, 0, * M_Offset_Interrupt_C_Enable); */ - devpriv->writel(dev, 0, M_Offset_CDO_Mask_Enable); + ni_writel(dev, 0, M_Offset_CDO_Mask_Enable); ni_release_cdo_mite_channel(dev); return 0; } @@ -3497,18 +3519,18 @@ static void handle_cdio_interrupt(struct comedi_device *dev) spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); #endif - cdio_status = devpriv->readl(dev, M_Offset_CDIO_Status); + cdio_status = ni_readl(dev, M_Offset_CDIO_Status); if (cdio_status & (CDO_Overrun_Bit | CDO_Underflow_Bit)) { /* printk("cdio error: statux=0x%x\n", cdio_status); */ /* XXX just guessing this is needed and does something useful */ - devpriv->writel(dev, CDO_Error_Interrupt_Confirm_Bit, - M_Offset_CDIO_Command); + ni_writel(dev, CDO_Error_Interrupt_Confirm_Bit, + M_Offset_CDIO_Command); s->async->events |= COMEDI_CB_OVERFLOW; } if (cdio_status & CDO_FIFO_Empty_Bit) { /* printk("cdio fifo empty\n"); */ - devpriv->writel(dev, CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, - M_Offset_CDIO_Command); + ni_writel(dev, CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, + M_Offset_CDIO_Command); /* s->async->events |= COMEDI_CB_EOA; */ } cfc_handle_events(dev, s); @@ -3806,7 +3828,6 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, enum ni_gpct_register reg) { struct comedi_device *dev = counter->counter_dev->dev; - struct ni_private *devpriv = dev->private; unsigned stc_register; /* bits in the join reset register which are relevant to counters */ static const unsigned gpct_joint_reset_mask = G0_Reset | G1_Reset; @@ -3818,28 +3839,28 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, switch (reg) { /* m-series-only registers */ case NITIO_G0_CNT_MODE: - devpriv->writew(dev, bits, M_Offset_G0_Counting_Mode); + ni_writew(dev, bits, M_Offset_G0_Counting_Mode); break; case NITIO_G1_CNT_MODE: - devpriv->writew(dev, bits, M_Offset_G1_Counting_Mode); + ni_writew(dev, bits, M_Offset_G1_Counting_Mode); break; case NITIO_G0_GATE2: - devpriv->writew(dev, bits, M_Offset_G0_Second_Gate); + ni_writew(dev, bits, M_Offset_G0_Second_Gate); break; case NITIO_G1_GATE2: - devpriv->writew(dev, bits, M_Offset_G1_Second_Gate); + ni_writew(dev, bits, M_Offset_G1_Second_Gate); break; case NITIO_G0_DMA_CFG: - devpriv->writew(dev, bits, M_Offset_G0_DMA_Config); + ni_writew(dev, bits, M_Offset_G0_DMA_Config); break; case NITIO_G1_DMA_CFG: - devpriv->writew(dev, bits, M_Offset_G1_DMA_Config); + ni_writew(dev, bits, M_Offset_G1_DMA_Config); break; case NITIO_G0_ABZ: - devpriv->writew(dev, bits, M_Offset_G0_MSeries_ABZ); + ni_writew(dev, bits, M_Offset_G0_MSeries_ABZ); break; case NITIO_G1_ABZ: - devpriv->writew(dev, bits, M_Offset_G1_MSeries_ABZ); + ni_writew(dev, bits, M_Offset_G1_MSeries_ABZ); break; /* 32 bit registers */ @@ -3875,15 +3896,14 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, enum ni_gpct_register reg) { struct comedi_device *dev = counter->counter_dev->dev; - struct ni_private *devpriv = dev->private; unsigned stc_register; switch (reg) { /* m-series only registers */ case NITIO_G0_DMA_STATUS: - return devpriv->readw(dev, M_Offset_G0_DMA_Status); + return ni_readw(dev, M_Offset_G0_DMA_Status); case NITIO_G1_DMA_STATUS: - return devpriv->readw(dev, M_Offset_G1_DMA_Status); + return ni_readw(dev, M_Offset_G1_DMA_Status); /* 32 bit registers */ case NITIO_G0_HW_SAVE: @@ -3980,13 +4000,12 @@ static int ni_freq_out_insn_config(struct comedi_device *dev, static int ni_8255_callback(int dir, int port, int data, unsigned long arg) { struct comedi_device *dev = (struct comedi_device *)arg; - struct ni_private *devpriv = dev->private; if (dir) { - devpriv->writeb(dev, data, Port_A + 2 * port); + ni_writeb(dev, data, Port_A + 2 * port); return 0; } else { - return devpriv->readb(dev, Port_A + 2 * port); + return ni_readb(dev, Port_A + 2 * port); } } @@ -4051,9 +4070,9 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, data[4] = down_count * devpriv->clock_ns; return -EAGAIN; } - devpriv->writel(dev, MSeries_Cal_PWM_High_Time_Bits(up_count) | - MSeries_Cal_PWM_Low_Time_Bits(down_count), - M_Offset_Cal_PWM); + ni_writel(dev, MSeries_Cal_PWM_High_Time_Bits(up_count) | + MSeries_Cal_PWM_Low_Time_Bits(down_count), + M_Offset_Cal_PWM); devpriv->pwm_up_count = up_count; devpriv->pwm_down_count = down_count; return 5; @@ -4120,9 +4139,9 @@ static int ni_6143_pwm_config(struct comedi_device *dev, data[4] = down_count * devpriv->clock_ns; return -EAGAIN; } - devpriv->writel(dev, up_count, Calibration_HighTime_6143); + ni_writel(dev, up_count, Calibration_HighTime_6143); devpriv->pwm_up_count = up_count; - devpriv->writel(dev, down_count, Calibration_LowTime_6143); + ni_writel(dev, down_count, Calibration_LowTime_6143); devpriv->pwm_down_count = down_count; return 5; break; @@ -4226,16 +4245,15 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) } for (bit = 1 << (bits - 1); bit; bit >>= 1) { - devpriv->writeb(dev, ((bit & bitstring) ? 0x02 : 0), - Serial_Command); + ni_writeb(dev, ((bit & bitstring) ? 0x02 : 0), Serial_Command); udelay(1); - devpriv->writeb(dev, 1 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); + ni_writeb(dev, 1 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); udelay(1); } - devpriv->writeb(dev, loadbit, Serial_Command); + ni_writeb(dev, loadbit, Serial_Command); udelay(1); - devpriv->writeb(dev, 0, Serial_Command); + ni_writeb(dev, 0, Serial_Command); } static int ni_calib_insn_write(struct comedi_device *dev, @@ -4316,26 +4334,24 @@ static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) static int ni_read_eeprom(struct comedi_device *dev, int addr) { - struct ni_private *devpriv = dev->private; int bit; int bitstring; bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); - devpriv->writeb(dev, 0x04, Serial_Command); + ni_writeb(dev, 0x04, Serial_Command); for (bit = 0x8000; bit; bit >>= 1) { - devpriv->writeb(dev, 0x04 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); - devpriv->writeb(dev, 0x05 | ((bit & bitstring) ? 0x02 : 0), - Serial_Command); + ni_writeb(dev, 0x04 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); + ni_writeb(dev, 0x05 | ((bit & bitstring) ? 0x02 : 0), + Serial_Command); } bitstring = 0; for (bit = 0x80; bit; bit >>= 1) { - devpriv->writeb(dev, 0x04, Serial_Command); - devpriv->writeb(dev, 0x05, Serial_Command); - bitstring |= ((devpriv->readb(dev, XXX_Status) & PROMOUT) - ? bit : 0); + ni_writeb(dev, 0x04, Serial_Command); + ni_writeb(dev, 0x05, Serial_Command); + bitstring |= ((ni_readb(dev, XXX_Status) & PROMOUT) ? bit : 0); } - devpriv->writeb(dev, 0x00, Serial_Command); + ni_writeb(dev, 0x00, Serial_Command); return bitstring; } @@ -4438,8 +4454,8 @@ static int ni_m_series_set_pfi_routing(struct comedi_device *dev, ~MSeries_PFI_Output_Select_Mask(chan); devpriv->pfi_output_select_reg[array_offset] |= MSeries_PFI_Output_Select_Bits(chan, source); - devpriv->writew(dev, devpriv->pfi_output_select_reg[array_offset], - M_Offset_PFI_Output_Select(pfi_reg_index)); + ni_writew(dev, devpriv->pfi_output_select_reg[array_offset], + M_Offset_PFI_Output_Select(pfi_reg_index)); return 2; } @@ -4474,10 +4490,10 @@ static int ni_config_filter(struct comedi_device *dev, if (!devpriv->is_m_series) return -ENOTSUPP; - bits = devpriv->readl(dev, M_Offset_PFI_Filter); + bits = ni_readl(dev, M_Offset_PFI_Filter); bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); - devpriv->writel(dev, bits, M_Offset_PFI_Filter); + ni_writel(dev, bits, M_Offset_PFI_Filter); return 0; } @@ -4533,9 +4549,9 @@ static int ni_pfi_insn_bits(struct comedi_device *dev, return -ENOTSUPP; if (comedi_dio_update_state(s, data)) - devpriv->writew(dev, s->state, M_Offset_PFI_DO); + ni_writew(dev, s->state, M_Offset_PFI_DO); - data[1] = devpriv->readw(dev, M_Offset_PFI_DI); + data[1] = ni_readw(dev, M_Offset_PFI_DI); return insn->n; } @@ -4800,8 +4816,7 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, } break; } - devpriv->writew(dev, devpriv->clock_and_fout2, - M_Offset_Clock_and_Fout2); + ni_writew(dev, devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); pll_control_bits |= MSeries_PLL_Divisor_Bits(freq_divider) | MSeries_PLL_Multiplier_Bits(freq_multiplier); @@ -4809,12 +4824,11 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", * freq_divider, freq_multiplier, pll_control_bits); */ /* printk("clock_ns=%d\n", devpriv->clock_ns); */ - devpriv->writew(dev, pll_control_bits, M_Offset_PLL_Control); + ni_writew(dev, pll_control_bits, M_Offset_PLL_Control); devpriv->clock_source = source; /* it seems to typically take a few hundred microseconds for PLL to lock */ for (i = 0; i < timeout; ++i) { - if (devpriv->readw(dev, M_Offset_PLL_Status) & - MSeries_PLL_Locked_Bit) + if (ni_readw(dev, M_Offset_PLL_Status) & MSeries_PLL_Locked_Bit) break; udelay(1); } @@ -4841,9 +4855,9 @@ static int ni_set_master_clock(struct comedi_device *dev, devpriv->clock_and_fout2 &= ~(MSeries_Timebase1_Select_Bit | MSeries_Timebase3_Select_Bit); - devpriv->writew(dev, devpriv->clock_and_fout2, - M_Offset_Clock_and_Fout2); - devpriv->writew(dev, 0, M_Offset_PLL_Control); + ni_writew(dev, devpriv->clock_and_fout2, + M_Offset_Clock_and_Fout2); + ni_writew(dev, 0, M_Offset_PLL_Control); } devpriv->clock_source = source; } else { @@ -5382,15 +5396,14 @@ static int ni_E_init(struct comedi_device *dev) s->async_dma_dir = DMA_BIDIRECTIONAL; s->len_chanlist = s->n_chan; - devpriv->writel(dev, CDO_Reset_Bit | CDI_Reset_Bit, - M_Offset_CDIO_Command); - devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); + ni_writel(dev, CDO_Reset_Bit | CDI_Reset_Bit, + M_Offset_CDIO_Command); + ni_writel(dev, s->io_bits, M_Offset_DIO_Direction); } else { s->insn_bits = &ni_dio_insn_bits; s->insn_config = &ni_dio_insn_config; devpriv->dio_control = DIO_Pins_Dir(s->io_bits); - devpriv->writew(dev, devpriv->dio_control, - DIO_Control_Register); + ni_writew(dev, devpriv->dio_control, DIO_Control_Register); } /* 8255 device */ @@ -5417,7 +5430,7 @@ static int ni_E_init(struct comedi_device *dev) s->insn_config = &ni_m_series_pwm_config; s->n_chan = 1; s->maxdata = 0; - devpriv->writel(dev, 0x0, M_Offset_Cal_PWM); + ni_writel(dev, 0x0, M_Offset_Cal_PWM); } else if (board->reg_type == ni_reg_6143) { /* internal PWM analog output used for AI nonlinearity calibration */ s->subdev_flags = SDF_INTERNAL; @@ -5451,10 +5464,10 @@ static int ni_E_init(struct comedi_device *dev) if (devpriv->is_m_series) { unsigned i; s->n_chan = 16; - devpriv->writew(dev, s->state, M_Offset_PFI_DO); + ni_writew(dev, s->state, M_Offset_PFI_DO); for (i = 0; i < NUM_PFI_OUTPUT_SELECT_REGS; ++i) { - devpriv->writew(dev, devpriv->pfi_output_select_reg[i], - M_Offset_PFI_Output_Select(i + 1)); + ni_writew(dev, devpriv->pfi_output_select_reg[i], + M_Offset_PFI_Output_Select(i + 1)); } } else { s->n_chan = 10; @@ -5585,20 +5598,20 @@ static int ni_E_init(struct comedi_device *dev) } /* DMA setup */ - devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); - devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); + ni_writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); + ni_writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); if (board->reg_type & ni_reg_6xxx_mask) { - devpriv->writeb(dev, 0, Magic_611x); + ni_writeb(dev, 0, Magic_611x); } else if (devpriv->is_m_series) { int channel; for (channel = 0; channel < board->n_aochan; ++channel) { - devpriv->writeb(dev, 0xf, - M_Offset_AO_Waveform_Order(channel)); - devpriv->writeb(dev, 0x0, - M_Offset_AO_Reference_Attenuation(channel)); + ni_writeb(dev, 0xf, + M_Offset_AO_Waveform_Order(channel)); + ni_writeb(dev, 0x0, + M_Offset_AO_Reference_Attenuation(channel)); } - devpriv->writeb(dev, 0x0, M_Offset_AO_Calibration); + ni_writeb(dev, 0x0, M_Offset_AO_Calibration); } return 0; -- cgit From ac63baf5517cb7c22d63e2c5d269994f3002c7e0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:36 -0700 Subject: staging: comedi: ni_stc.h: remove read/write callbacks from ni_private The drivers that include ni_mio_common.c set the read/write callbacks to private functions that handle the read/write operations in the correct manner for the hardware. The ni_atmio and ni_mio_cs drivers use ioport register access and the ni_pcimio driver uses memory mapped register access. The memory mapped base address is stored in the 'mite' pointer in the private data which is only allocated and initialized by the ni_pcimio driver. Detect the need for memory mapped register access by checking if the 'mite' pointer is set in the private data and remove the callbacks from the private data. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 53 ++---------- drivers/staging/comedi/drivers/ni_mio_common.c | 30 +++++-- drivers/staging/comedi/drivers/ni_mio_cs.c | 53 ++---------- drivers/staging/comedi/drivers/ni_pcimio.c | 108 ++++++------------------- drivers/staging/comedi/drivers/ni_stc.h | 7 -- 5 files changed, 63 insertions(+), 188 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index ae9ace9ee99b..f0fb4a7b4a64 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -270,37 +270,7 @@ static const int ni_irqpin[] = { #define NI_E_IRQ_FLAGS 0 -/* How we access registers */ - -static uint8_t ni_atmio_inb(struct comedi_device *dev, int reg) -{ - return inb(dev->iobase + reg); -} - -static uint16_t ni_atmio_inw(struct comedi_device *dev, int reg) -{ - return inw(dev->iobase + reg); -} - -static uint32_t ni_atmio_inl(struct comedi_device *dev, int reg) -{ - return inl(dev->iobase + reg); -} - -static void ni_atmio_outb(struct comedi_device *dev, uint8_t val, int reg) -{ - outb(val, dev->iobase + reg); -} - -static void ni_atmio_outw(struct comedi_device *dev, uint16_t val, int reg) -{ - outw(val, dev->iobase + reg); -} - -static void ni_atmio_outl(struct comedi_device *dev, uint32_t val, int reg) -{ - outl(val, dev->iobase + reg); -} +#include "ni_mio_common.c" /* How we access windowed registers */ @@ -315,10 +285,10 @@ static void ni_atmio_win_out(struct comedi_device *dev, uint16_t data, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if ((addr) < 8) { - devpriv->writew(dev, data, addr * 2); + ni_writew(dev, data, addr * 2); } else { - devpriv->writew(dev, addr, Window_Address); - devpriv->writew(dev, data, Window_Data); + ni_writew(dev, addr, Window_Address); + ni_writew(dev, data, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -331,10 +301,10 @@ static uint16_t ni_atmio_win_in(struct comedi_device *dev, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - ret = devpriv->readw(dev, addr * 2); + ret = ni_readw(dev, addr * 2); } else { - devpriv->writew(dev, addr, Window_Address); - ret = devpriv->readw(dev, Window_Data); + ni_writew(dev, addr, Window_Address); + ret = ni_readw(dev, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); @@ -352,8 +322,6 @@ static struct pnp_device_id device_ids[] = { MODULE_DEVICE_TABLE(pnp, device_ids); -#include "ni_mio_common.c" - static int ni_isapnp_find_board(struct pnp_dev **dev) { struct pnp_dev *isapnp_dev = NULL; @@ -428,13 +396,6 @@ static int ni_atmio_attach(struct comedi_device *dev, return ret; devpriv = dev->private; - devpriv->readb = ni_atmio_inb; - devpriv->readw = ni_atmio_inw; - devpriv->readl = ni_atmio_inl; - devpriv->writeb = ni_atmio_outb; - devpriv->writew = ni_atmio_outw; - devpriv->writel = ni_atmio_outl; - devpriv->stc_writew = ni_atmio_win_out; devpriv->stc_readw = ni_atmio_win_in; devpriv->stc_writel = win_out2; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 040afba980c1..5db40eacfe78 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -250,42 +250,60 @@ static void ni_writel(struct comedi_device *dev, uint32_t data, int reg) { struct ni_private *devpriv = dev->private; - devpriv->writel(dev, data, reg); + if (devpriv->mite) + writel(data, devpriv->mite->daq_io_addr + reg); + else + outl(data, dev->iobase + reg); } static void ni_writew(struct comedi_device *dev, uint16_t data, int reg) { struct ni_private *devpriv = dev->private; - devpriv->writew(dev, data, reg); + if (devpriv->mite) + writew(data, devpriv->mite->daq_io_addr + reg); + else + outw(data, dev->iobase + reg); } static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg) { struct ni_private *devpriv = dev->private; - devpriv->writeb(dev, data, reg); + if (devpriv->mite) + writeb(data, devpriv->mite->daq_io_addr + reg); + else + outb(data, dev->iobase + reg); } static uint32_t ni_readl(struct comedi_device *dev, int reg) { struct ni_private *devpriv = dev->private; - return devpriv->readl(dev, reg); + if (devpriv->mite) + return readl(devpriv->mite->daq_io_addr + reg); + else + return inl(dev->iobase + reg); } static uint16_t ni_readw(struct comedi_device *dev, int reg) { struct ni_private *devpriv = dev->private; - return devpriv->readw(dev, reg); + if (devpriv->mite) + return readw(devpriv->mite->daq_io_addr + reg); + else + return inw(dev->iobase + reg); } static uint8_t ni_readb(struct comedi_device *dev, int reg) { struct ni_private *devpriv = dev->private; - return devpriv->readb(dev, reg); + if (devpriv->mite) + return readb(devpriv->mite->daq_io_addr + reg); + else + return inb(dev->iobase + reg); } static void ni_stc_writel(struct comedi_device *dev, uint32_t data, int reg) diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index d61baffb4bf0..775b9d7dea5c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -141,37 +141,7 @@ static const struct ni_board_struct ni_boards[] = { #define IRQ_POLARITY 1 -/* How we access registers */ - -static uint8_t mio_cs_inb(struct comedi_device *dev, int reg) -{ - return inb(dev->iobase + reg); -} - -static uint16_t mio_cs_inw(struct comedi_device *dev, int reg) -{ - return inw(dev->iobase + reg); -} - -static uint32_t mio_cs_inl(struct comedi_device *dev, int reg) -{ - return inl(dev->iobase + reg); -} - -static void mio_cs_outb(struct comedi_device *dev, uint8_t val, int reg) -{ - outb(val, dev->iobase + reg); -} - -static void mio_cs_outw(struct comedi_device *dev, uint16_t val, int reg) -{ - outw(val, dev->iobase + reg); -} - -static void mio_cs_outl(struct comedi_device *dev, uint32_t val, int reg) -{ - outl(val, dev->iobase + reg); -} +#include "ni_mio_common.c" /* How we access windowed registers */ @@ -186,10 +156,10 @@ static void mio_cs_win_out(struct comedi_device *dev, uint16_t data, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - devpriv->writew(dev, data, addr * 2); + ni_writew(dev, data, addr * 2); } else { - devpriv->writew(dev, addr, Window_Address); - devpriv->writew(dev, data, Window_Data); + ni_writew(dev, addr, Window_Address); + ni_writew(dev, data, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -202,18 +172,16 @@ static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr) spin_lock_irqsave(&devpriv->window_lock, flags); if (addr < 8) { - ret = devpriv->readw(dev, addr * 2); + ret = ni_readw(dev, addr * 2); } else { - devpriv->writew(dev, addr, Window_Address); - ret = devpriv->readw(dev, Window_Data); + ni_writew(dev, addr, Window_Address); + ret = ni_readw(dev, Window_Data); } spin_unlock_irqrestore(&devpriv->window_lock, flags); return ret; } -#include "ni_mio_common.c" - static const void *ni_getboardtype(struct comedi_device *dev, struct pcmcia_device *link) { @@ -276,13 +244,6 @@ static int mio_cs_auto_attach(struct comedi_device *dev, devpriv = dev->private; - devpriv->readb = mio_cs_inb; - devpriv->readw = mio_cs_inw; - devpriv->readl = mio_cs_inl; - devpriv->writeb = mio_cs_outb; - devpriv->writew = mio_cs_outw; - devpriv->writel = mio_cs_outl; - devpriv->stc_writew = mio_cs_win_out; devpriv->stc_readw = mio_cs_win_in; devpriv->stc_writel = win_out2; diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index f152b3862101..200a805fdaef 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1042,49 +1042,12 @@ static const struct ni_board_struct ni_boards[] = { }, }; -/* How we access registers */ - -static uint8_t pcimio_readb(struct comedi_device *dev, int reg) -{ - struct ni_private *devpriv = dev->private; - - return readb(devpriv->mite->daq_io_addr + reg); -} - -static uint16_t pcimio_readw(struct comedi_device *dev, int reg) -{ - struct ni_private *devpriv = dev->private; - - return readw(devpriv->mite->daq_io_addr + reg); -} - -static uint32_t pcimio_readl(struct comedi_device *dev, int reg) -{ - struct ni_private *devpriv = dev->private; - - return readl(devpriv->mite->daq_io_addr + reg); -} - -static void pcimio_writeb(struct comedi_device *dev, uint8_t val, int reg) -{ - struct ni_private *devpriv = dev->private; - - writeb(val, devpriv->mite->daq_io_addr + reg); -} - -static void pcimio_writew(struct comedi_device *dev, uint16_t val, int reg) -{ - struct ni_private *devpriv = dev->private; - - writew(val, devpriv->mite->daq_io_addr + reg); -} +#define interrupt_pin(a) 0 +#define IRQ_POLARITY 1 -static void pcimio_writel(struct comedi_device *dev, uint32_t val, int reg) -{ - struct ni_private *devpriv = dev->private; +#define NI_E_IRQ_FLAGS IRQF_SHARED - writel(val, devpriv->mite->daq_io_addr + reg); -} +#include "ni_mio_common.c" /* How we access STC registers */ @@ -1102,8 +1065,8 @@ static void e_series_win_out(struct comedi_device *dev, uint16_t data, int reg) unsigned long flags; spin_lock_irqsave(&devpriv->window_lock, flags); - devpriv->writew(dev, reg, Window_Address); - devpriv->writew(dev, data, Window_Data); + ni_writew(dev, reg, Window_Address); + ni_writew(dev, data, Window_Data); spin_unlock_irqrestore(&devpriv->window_lock, flags); } @@ -1114,8 +1077,8 @@ static uint16_t e_series_win_in(struct comedi_device *dev, int reg) uint16_t ret; spin_lock_irqsave(&devpriv->window_lock, flags); - devpriv->writew(dev, reg, Window_Address); - ret = devpriv->readw(dev, Window_Data); + ni_writew(dev, reg, Window_Address); + ret = ni_readw(dev, Window_Data); spin_unlock_irqrestore(&devpriv->window_lock, flags); return ret; @@ -1124,7 +1087,6 @@ static uint16_t e_series_win_in(struct comedi_device *dev, int reg) static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, int reg) { - struct ni_private *devpriv = dev->private; unsigned offset; switch (reg) { @@ -1154,12 +1116,12 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, break; case AI_SI2_Load_A_Register: /* this is actually a 32 bit register on m series boards */ - devpriv->writel(dev, data, M_Offset_AI_SI2_Load_A); + ni_writel(dev, data, M_Offset_AI_SI2_Load_A); return; break; case AI_SI2_Load_B_Register: /* this is actually a 32 bit register on m series boards */ - devpriv->writel(dev, data, M_Offset_AI_SI2_Load_B); + ni_writel(dev, data, M_Offset_AI_SI2_Load_B); return; break; case AI_START_STOP_Select_Register: @@ -1277,12 +1239,11 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, return; break; } - devpriv->writew(dev, data, offset); + ni_writew(dev, data, offset); } static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; unsigned offset; switch (reg) { @@ -1296,7 +1257,7 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) offset = M_Offset_AO_Status_2; break; case DIO_Serial_Input_Register: - return devpriv->readb(dev, M_Offset_SCXI_Serial_Data_In); + return ni_readb(dev, M_Offset_SCXI_Serial_Data_In); break; case Joint_Status_1_Register: offset = M_Offset_Joint_Status_1; @@ -1315,13 +1276,12 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) return 0; break; } - return devpriv->readw(dev, offset); + return ni_readw(dev, offset); } static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, int reg) { - struct ni_private *devpriv = dev->private; unsigned offset; switch (reg) { @@ -1360,12 +1320,11 @@ static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, return; break; } - devpriv->writel(dev, data, offset); + ni_writel(dev, data, offset); } static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; unsigned offset; switch (reg) { @@ -1389,16 +1348,9 @@ static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) return 0; break; } - return devpriv->readl(dev, offset); + return ni_readl(dev, offset); } -#define interrupt_pin(a) 0 -#define IRQ_POLARITY 1 - -#define NI_E_IRQ_FLAGS IRQF_SHARED - -#include "ni_mio_common.c" - static int pcimio_ai_change(struct comedi_device *dev, struct comedi_subdevice *s, unsigned long new_size); static int pcimio_ao_change(struct comedi_device *dev, @@ -1438,14 +1390,12 @@ static void m_series_init_eeprom_buffer(struct comedi_device *dev) BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number)); for (i = 0; i < serial_number_eeprom_length; ++i) { char *byte_ptr = (char *)&devpriv->serial_number + i; - *byte_ptr = devpriv->readb(dev, - serial_number_eeprom_offset + i); + *byte_ptr = ni_readb(dev, serial_number_eeprom_offset + i); } devpriv->serial_number = be32_to_cpu(devpriv->serial_number); for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) - devpriv->eeprom_buffer[i] = devpriv->readb(dev, - Start_Cal_EEPROM + i); + devpriv->eeprom_buffer[i] = ni_readb(dev, Start_Cal_EEPROM + i); writel(old_iodwbsr1_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR_1); writel(old_iodwbsr_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR); @@ -1464,22 +1414,21 @@ static void init_6143(struct comedi_device *dev) /* Initialise 6143 AI specific bits */ /* Set G0,G1 DMA mode to E series version */ - devpriv->writeb(dev, 0x00, Magic_6143); + ni_writeb(dev, 0x00, Magic_6143); /* Set EOCMode, ADCMode and pipelinedelay */ - devpriv->writeb(dev, 0x80, PipelineDelay_6143); + ni_writeb(dev, 0x80, PipelineDelay_6143); /* Set EOC Delay */ - devpriv->writeb(dev, 0x00, EOC_Set_6143); + ni_writeb(dev, 0x00, EOC_Set_6143); /* Set the FIFO half full level */ - devpriv->writel(dev, board->ai_fifo_depth / 2, AIFIFO_Flag_6143); + ni_writel(dev, board->ai_fifo_depth / 2, AIFIFO_Flag_6143); /* Strobe Relay disable bit */ devpriv->ai_calib_source_enabled = 0; - devpriv->writew(dev, devpriv->ai_calib_source | - Calibration_Channel_6143_RelayOff, - Calibration_Channel_6143); - devpriv->writew(dev, devpriv->ai_calib_source, - Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source | + Calibration_Channel_6143_RelayOff, + Calibration_Channel_6143); + ni_writew(dev, devpriv->ai_calib_source, Calibration_Channel_6143); } static void pcimio_detach(struct comedi_device *dev) @@ -1532,13 +1481,6 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (!devpriv->mite) return -ENOMEM; - devpriv->readb = pcimio_readb; - devpriv->readw = pcimio_readw; - devpriv->readl = pcimio_readl; - devpriv->writeb = pcimio_writeb; - devpriv->writew = pcimio_writew; - devpriv->writel = pcimio_writel; - if (board->reg_type & ni_reg_m_series_mask) { devpriv->is_m_series = 1; diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 38ce3ce6480f..82d4e264c5dd 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1421,13 +1421,6 @@ struct ni_board_struct { #define NUM_GPCT 2 struct ni_private { - uint8_t (*readb)(struct comedi_device *, int reg); - uint16_t (*readw)(struct comedi_device *, int reg); - uint32_t (*readl)(struct comedi_device *, int reg); - void (*writeb)(struct comedi_device *, uint8_t value, int reg); - void (*writew)(struct comedi_device *, uint16_t value, int reg); - void (*writel)(struct comedi_device *, uint32_t value, int reg); - uint16_t (*stc_readw)(struct comedi_device *, int reg); uint32_t (*stc_readl)(struct comedi_device *, int reg); void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); -- cgit From b30f0d0caa1ffc1051c82cfb42014e084b6ac4c3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 19 Jun 2014 10:20:37 -0700 Subject: staging: comedi: ni_stc.h: remove stc read/write callbacks from ni_private The drivers that include ni_mio_common.c set the stc register read/write callbacks to private functions that handle the read/write operations in the correct manner for the hardware. The ni_atmio and ni_mio_cs drivers use identical code to handle the operations. The ni_pcimio driver is a bit different due to the non-windowed setup of the stc registers on the m series boards. For the other boards supported by the ni_pcimio driver, the direct access of the first 8 STC registers is also disabled due to a difference on the 611x devices. These differences can all be handled in the ni_stc_{read,write}[lw]() helpers. Refactor the helpers and remove the callbacks from the private data. Also, move the helper functions the handle the mapping of the windowed STC register offsets to M series register offset from ni_pcimio.c to ni_mio_common.c. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 44 ---- drivers/staging/comedi/drivers/ni_mio_common.c | 342 +++++++++++++++++++++++-- drivers/staging/comedi/drivers/ni_mio_cs.c | 44 ---- drivers/staging/comedi/drivers/ni_pcimio.c | 317 +---------------------- drivers/staging/comedi/drivers/ni_stc.h | 5 - 5 files changed, 322 insertions(+), 430 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index f0fb4a7b4a64..5c6c06791b88 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -272,45 +272,6 @@ static const int ni_irqpin[] = { #include "ni_mio_common.c" -/* How we access windowed registers */ - -/* We automatically take advantage of STC registers that can be - * read/written directly in the I/O space of the board. The - * AT-MIO devices map the low 8 STC registers to iobase+addr*2. */ - -static void ni_atmio_win_out(struct comedi_device *dev, uint16_t data, int addr) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - - spin_lock_irqsave(&devpriv->window_lock, flags); - if ((addr) < 8) { - ni_writew(dev, data, addr * 2); - } else { - ni_writew(dev, addr, Window_Address); - ni_writew(dev, data, Window_Data); - } - spin_unlock_irqrestore(&devpriv->window_lock, flags); -} - -static uint16_t ni_atmio_win_in(struct comedi_device *dev, int addr) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - uint16_t ret; - - spin_lock_irqsave(&devpriv->window_lock, flags); - if (addr < 8) { - ret = ni_readw(dev, addr * 2); - } else { - ni_writew(dev, addr, Window_Address); - ret = ni_readw(dev, Window_Data); - } - spin_unlock_irqrestore(&devpriv->window_lock, flags); - - return ret; -} - static struct pnp_device_id device_ids[] = { {.id = "NIC1900", .driver_data = 0}, {.id = "NIC2400", .driver_data = 0}, @@ -396,11 +357,6 @@ static int ni_atmio_attach(struct comedi_device *dev, return ret; devpriv = dev->private; - devpriv->stc_writew = ni_atmio_win_out; - devpriv->stc_readw = ni_atmio_win_in; - devpriv->stc_writel = win_out2; - devpriv->stc_readl = win_in2; - iobase = it->options[0]; irq = it->options[1]; isapnp_dev = NULL; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 5db40eacfe78..7737749d3b2c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -306,32 +306,345 @@ static uint8_t ni_readb(struct comedi_device *dev, int reg) return inb(dev->iobase + reg); } -static void ni_stc_writel(struct comedi_device *dev, uint32_t data, int reg) +/* + * We automatically take advantage of STC registers that can be + * read/written directly in the I/O space of the board. + * + * The AT-MIO and DAQCard devices map the low 8 STC registers to + * iobase+reg*2. + * + * Most PCIMIO devices also map the low 8 STC registers but the + * 611x devices map the read registers to iobase+(addr-1)*2. + * For now non-windowed STC access is disabled if a PCIMIO device + * is detected (devpriv->mite has been initialized). + * + * The M series devices do not used windowed registers for the + * STC registers. The functions below handle the mapping of the + * windowed STC registers to the m series register offsets. + */ + +static void m_series_stc_writel(struct comedi_device *dev, + uint32_t data, int reg) { - struct ni_private *devpriv = dev->private; + unsigned offset; - devpriv->stc_writel(dev, data, reg); + switch (reg) { + case AI_SC_Load_A_Registers: + offset = M_Offset_AI_SC_Load_A; + break; + case AI_SI_Load_A_Registers: + offset = M_Offset_AI_SI_Load_A; + break; + case AO_BC_Load_A_Register: + offset = M_Offset_AO_BC_Load_A; + break; + case AO_UC_Load_A_Register: + offset = M_Offset_AO_UC_Load_A; + break; + case AO_UI_Load_A_Register: + offset = M_Offset_AO_UI_Load_A; + break; + case G_Load_A_Register(0): + offset = M_Offset_G0_Load_A; + break; + case G_Load_A_Register(1): + offset = M_Offset_G1_Load_A; + break; + case G_Load_B_Register(0): + offset = M_Offset_G0_Load_B; + break; + case G_Load_B_Register(1): + offset = M_Offset_G1_Load_B; + break; + default: + dev_warn(dev->class_dev, + "%s: bug! unhandled register=0x%x in switch\n", + __func__, reg); + return; + } + ni_writel(dev, data, offset); +} + +static void m_series_stc_writew(struct comedi_device *dev, + uint16_t data, int reg) +{ + unsigned offset; + + switch (reg) { + case ADC_FIFO_Clear: + offset = M_Offset_AI_FIFO_Clear; + break; + case AI_Command_1_Register: + offset = M_Offset_AI_Command_1; + break; + case AI_Command_2_Register: + offset = M_Offset_AI_Command_2; + break; + case AI_Mode_1_Register: + offset = M_Offset_AI_Mode_1; + break; + case AI_Mode_2_Register: + offset = M_Offset_AI_Mode_2; + break; + case AI_Mode_3_Register: + offset = M_Offset_AI_Mode_3; + break; + case AI_Output_Control_Register: + offset = M_Offset_AI_Output_Control; + break; + case AI_Personal_Register: + offset = M_Offset_AI_Personal; + break; + case AI_SI2_Load_A_Register: + /* this is a 32 bit register on m series boards */ + ni_writel(dev, data, M_Offset_AI_SI2_Load_A); + return; + case AI_SI2_Load_B_Register: + /* this is a 32 bit register on m series boards */ + ni_writel(dev, data, M_Offset_AI_SI2_Load_B); + return; + case AI_START_STOP_Select_Register: + offset = M_Offset_AI_START_STOP_Select; + break; + case AI_Trigger_Select_Register: + offset = M_Offset_AI_Trigger_Select; + break; + case Analog_Trigger_Etc_Register: + offset = M_Offset_Analog_Trigger_Etc; + break; + case AO_Command_1_Register: + offset = M_Offset_AO_Command_1; + break; + case AO_Command_2_Register: + offset = M_Offset_AO_Command_2; + break; + case AO_Mode_1_Register: + offset = M_Offset_AO_Mode_1; + break; + case AO_Mode_2_Register: + offset = M_Offset_AO_Mode_2; + break; + case AO_Mode_3_Register: + offset = M_Offset_AO_Mode_3; + break; + case AO_Output_Control_Register: + offset = M_Offset_AO_Output_Control; + break; + case AO_Personal_Register: + offset = M_Offset_AO_Personal; + break; + case AO_Start_Select_Register: + offset = M_Offset_AO_Start_Select; + break; + case AO_Trigger_Select_Register: + offset = M_Offset_AO_Trigger_Select; + break; + case Clock_and_FOUT_Register: + offset = M_Offset_Clock_and_FOUT; + break; + case Configuration_Memory_Clear: + offset = M_Offset_Configuration_Memory_Clear; + break; + case DAC_FIFO_Clear: + offset = M_Offset_AO_FIFO_Clear; + break; + case DIO_Control_Register: + dev_dbg(dev->class_dev, + "%s: FIXME: register 0x%x does not map cleanly on to m-series boards\n", + __func__, reg); + return; + case G_Autoincrement_Register(0): + offset = M_Offset_G0_Autoincrement; + break; + case G_Autoincrement_Register(1): + offset = M_Offset_G1_Autoincrement; + break; + case G_Command_Register(0): + offset = M_Offset_G0_Command; + break; + case G_Command_Register(1): + offset = M_Offset_G1_Command; + break; + case G_Input_Select_Register(0): + offset = M_Offset_G0_Input_Select; + break; + case G_Input_Select_Register(1): + offset = M_Offset_G1_Input_Select; + break; + case G_Mode_Register(0): + offset = M_Offset_G0_Mode; + break; + case G_Mode_Register(1): + offset = M_Offset_G1_Mode; + break; + case Interrupt_A_Ack_Register: + offset = M_Offset_Interrupt_A_Ack; + break; + case Interrupt_A_Enable_Register: + offset = M_Offset_Interrupt_A_Enable; + break; + case Interrupt_B_Ack_Register: + offset = M_Offset_Interrupt_B_Ack; + break; + case Interrupt_B_Enable_Register: + offset = M_Offset_Interrupt_B_Enable; + break; + case Interrupt_Control_Register: + offset = M_Offset_Interrupt_Control; + break; + case IO_Bidirection_Pin_Register: + offset = M_Offset_IO_Bidirection_Pin; + break; + case Joint_Reset_Register: + offset = M_Offset_Joint_Reset; + break; + case RTSI_Trig_A_Output_Register: + offset = M_Offset_RTSI_Trig_A_Output; + break; + case RTSI_Trig_B_Output_Register: + offset = M_Offset_RTSI_Trig_B_Output; + break; + case RTSI_Trig_Direction_Register: + offset = M_Offset_RTSI_Trig_Direction; + break; + /* + * FIXME: DIO_Output_Register (16 bit reg) is replaced by + * M_Offset_Static_Digital_Output (32 bit) and + * M_Offset_SCXI_Serial_Data_Out (8 bit) + */ + default: + dev_warn(dev->class_dev, + "%s: bug! unhandled register=0x%x in switch\n", + __func__, reg); + return; + } + ni_writew(dev, data, offset); +} + +static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) +{ + unsigned offset; + + switch (reg) { + case G_HW_Save_Register(0): + offset = M_Offset_G0_HW_Save; + break; + case G_HW_Save_Register(1): + offset = M_Offset_G1_HW_Save; + break; + case G_Save_Register(0): + offset = M_Offset_G0_Save; + break; + case G_Save_Register(1): + offset = M_Offset_G1_Save; + break; + default: + dev_warn(dev->class_dev, + "%s: bug! unhandled register=0x%x in switch\n", + __func__, reg); + return 0; + } + return ni_readl(dev, offset); +} + +static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) +{ + unsigned offset; + + switch (reg) { + case AI_Status_1_Register: + offset = M_Offset_AI_Status_1; + break; + case AO_Status_1_Register: + offset = M_Offset_AO_Status_1; + break; + case AO_Status_2_Register: + offset = M_Offset_AO_Status_2; + break; + case DIO_Serial_Input_Register: + return ni_readb(dev, M_Offset_SCXI_Serial_Data_In); + case Joint_Status_1_Register: + offset = M_Offset_Joint_Status_1; + break; + case Joint_Status_2_Register: + offset = M_Offset_Joint_Status_2; + break; + case G_Status_Register: + offset = M_Offset_G01_Status; + break; + default: + dev_warn(dev->class_dev, + "%s: bug! unhandled register=0x%x in switch\n", + __func__, reg); + return 0; + } + return ni_readw(dev, offset); } static void ni_stc_writew(struct comedi_device *dev, uint16_t data, int reg) { struct ni_private *devpriv = dev->private; + unsigned long flags; - devpriv->stc_writew(dev, data, reg); + if (devpriv->is_m_series) { + m_series_stc_writew(dev, data, reg); + } else { + spin_lock_irqsave(&devpriv->window_lock, flags); + if (!devpriv->mite && reg < 8) { + ni_writew(dev, data, reg * 2); + } else { + ni_writew(dev, reg, Window_Address); + ni_writew(dev, data, Window_Data); + } + spin_unlock_irqrestore(&devpriv->window_lock, flags); + } } -static uint32_t ni_stc_readl(struct comedi_device *dev, int reg) +static void ni_stc_writel(struct comedi_device *dev, uint32_t data, int reg) { struct ni_private *devpriv = dev->private; - return devpriv->stc_readl(dev, reg); + if (devpriv->is_m_series) { + m_series_stc_writel(dev, data, reg); + } else { + ni_stc_writew(dev, data >> 16, reg); + ni_stc_writew(dev, data & 0xffff, reg + 1); + } } static uint16_t ni_stc_readw(struct comedi_device *dev, int reg) { struct ni_private *devpriv = dev->private; + unsigned long flags; + uint16_t val; - return devpriv->stc_readw(dev, reg); + if (devpriv->is_m_series) { + val = m_series_stc_readw(dev, reg); + } else { + spin_lock_irqsave(&devpriv->window_lock, flags); + if (!devpriv->mite && reg < 8) { + val = ni_readw(dev, reg * 2); + } else { + ni_writew(dev, reg, Window_Address); + val = ni_readw(dev, Window_Data); + } + spin_unlock_irqrestore(&devpriv->window_lock, flags); + } + return val; +} + +static uint32_t ni_stc_readl(struct comedi_device *dev, int reg) +{ + struct ni_private *devpriv = dev->private; + uint32_t val; + + if (devpriv->is_m_series) { + val = m_series_stc_readl(dev, reg); + } else { + val = ni_stc_readw(dev, reg) << 16; + val |= ni_stc_readw(dev, reg + 1); + } + return val; } static inline void ni_set_bitfield(struct comedi_device *dev, int reg, @@ -681,21 +994,6 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) } } -static void win_out2(struct comedi_device *dev, uint32_t data, int reg) -{ - ni_stc_writew(dev, data >> 16, reg); - ni_stc_writew(dev, data & 0xffff, reg + 1); -} - -static uint32_t win_in2(struct comedi_device *dev, int reg) -{ - uint32_t bits; - - bits = ni_stc_readw(dev, reg) << 16; - bits |= ni_stc_readw(dev, reg + 1); - return bits; -} - #define ao_win_out(data, addr) ni_ao_win_outw(dev, data, addr) static inline void ni_ao_win_outw(struct comedi_device *dev, uint16_t data, int addr) diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index 775b9d7dea5c..ae82813070bd 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -143,45 +143,6 @@ static const struct ni_board_struct ni_boards[] = { #include "ni_mio_common.c" -/* How we access windowed registers */ - -/* We automatically take advantage of STC registers that can be - * read/written directly in the I/O space of the board. The - * DAQCard devices map the low 8 STC registers to iobase+addr*2. */ - -static void mio_cs_win_out(struct comedi_device *dev, uint16_t data, int addr) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - - spin_lock_irqsave(&devpriv->window_lock, flags); - if (addr < 8) { - ni_writew(dev, data, addr * 2); - } else { - ni_writew(dev, addr, Window_Address); - ni_writew(dev, data, Window_Data); - } - spin_unlock_irqrestore(&devpriv->window_lock, flags); -} - -static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - uint16_t ret; - - spin_lock_irqsave(&devpriv->window_lock, flags); - if (addr < 8) { - ret = ni_readw(dev, addr * 2); - } else { - ni_writew(dev, addr, Window_Address); - ret = ni_readw(dev, Window_Data); - } - spin_unlock_irqrestore(&devpriv->window_lock, flags); - - return ret; -} - static const void *ni_getboardtype(struct comedi_device *dev, struct pcmcia_device *link) { @@ -244,11 +205,6 @@ static int mio_cs_auto_attach(struct comedi_device *dev, devpriv = dev->private; - devpriv->stc_writew = mio_cs_win_out; - devpriv->stc_readw = mio_cs_win_in; - devpriv->stc_writel = win_out2; - devpriv->stc_readl = win_in2; - return ni_E_init(dev); } diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 200a805fdaef..177947c09117 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1049,308 +1049,6 @@ static const struct ni_board_struct ni_boards[] = { #include "ni_mio_common.c" -/* How we access STC registers */ - -/* We automatically take advantage of STC registers that can be - * read/written directly in the I/O space of the board. Most - * PCIMIO devices map the low 8 STC registers to iobase+addr*2. - * The 611x devices map the write registers to iobase+addr*2, and - * the read registers to iobase+(addr-1)*2. */ -/* However, the 611x boards still aren't working, so I'm disabling - * non-windowed STC access temporarily */ - -static void e_series_win_out(struct comedi_device *dev, uint16_t data, int reg) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - - spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(dev, reg, Window_Address); - ni_writew(dev, data, Window_Data); - spin_unlock_irqrestore(&devpriv->window_lock, flags); -} - -static uint16_t e_series_win_in(struct comedi_device *dev, int reg) -{ - struct ni_private *devpriv = dev->private; - unsigned long flags; - uint16_t ret; - - spin_lock_irqsave(&devpriv->window_lock, flags); - ni_writew(dev, reg, Window_Address); - ret = ni_readw(dev, Window_Data); - spin_unlock_irqrestore(&devpriv->window_lock, flags); - - return ret; -} - -static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, - int reg) -{ - unsigned offset; - - switch (reg) { - case ADC_FIFO_Clear: - offset = M_Offset_AI_FIFO_Clear; - break; - case AI_Command_1_Register: - offset = M_Offset_AI_Command_1; - break; - case AI_Command_2_Register: - offset = M_Offset_AI_Command_2; - break; - case AI_Mode_1_Register: - offset = M_Offset_AI_Mode_1; - break; - case AI_Mode_2_Register: - offset = M_Offset_AI_Mode_2; - break; - case AI_Mode_3_Register: - offset = M_Offset_AI_Mode_3; - break; - case AI_Output_Control_Register: - offset = M_Offset_AI_Output_Control; - break; - case AI_Personal_Register: - offset = M_Offset_AI_Personal; - break; - case AI_SI2_Load_A_Register: - /* this is actually a 32 bit register on m series boards */ - ni_writel(dev, data, M_Offset_AI_SI2_Load_A); - return; - break; - case AI_SI2_Load_B_Register: - /* this is actually a 32 bit register on m series boards */ - ni_writel(dev, data, M_Offset_AI_SI2_Load_B); - return; - break; - case AI_START_STOP_Select_Register: - offset = M_Offset_AI_START_STOP_Select; - break; - case AI_Trigger_Select_Register: - offset = M_Offset_AI_Trigger_Select; - break; - case Analog_Trigger_Etc_Register: - offset = M_Offset_Analog_Trigger_Etc; - break; - case AO_Command_1_Register: - offset = M_Offset_AO_Command_1; - break; - case AO_Command_2_Register: - offset = M_Offset_AO_Command_2; - break; - case AO_Mode_1_Register: - offset = M_Offset_AO_Mode_1; - break; - case AO_Mode_2_Register: - offset = M_Offset_AO_Mode_2; - break; - case AO_Mode_3_Register: - offset = M_Offset_AO_Mode_3; - break; - case AO_Output_Control_Register: - offset = M_Offset_AO_Output_Control; - break; - case AO_Personal_Register: - offset = M_Offset_AO_Personal; - break; - case AO_Start_Select_Register: - offset = M_Offset_AO_Start_Select; - break; - case AO_Trigger_Select_Register: - offset = M_Offset_AO_Trigger_Select; - break; - case Clock_and_FOUT_Register: - offset = M_Offset_Clock_and_FOUT; - break; - case Configuration_Memory_Clear: - offset = M_Offset_Configuration_Memory_Clear; - break; - case DAC_FIFO_Clear: - offset = M_Offset_AO_FIFO_Clear; - break; - case DIO_Control_Register: - dev_dbg(dev->class_dev, - "%s: FIXME: register 0x%x does not map cleanly on to m-series boards.\n", - __func__, reg); - return; - break; - case G_Autoincrement_Register(0): - offset = M_Offset_G0_Autoincrement; - break; - case G_Autoincrement_Register(1): - offset = M_Offset_G1_Autoincrement; - break; - case G_Command_Register(0): - offset = M_Offset_G0_Command; - break; - case G_Command_Register(1): - offset = M_Offset_G1_Command; - break; - case G_Input_Select_Register(0): - offset = M_Offset_G0_Input_Select; - break; - case G_Input_Select_Register(1): - offset = M_Offset_G1_Input_Select; - break; - case G_Mode_Register(0): - offset = M_Offset_G0_Mode; - break; - case G_Mode_Register(1): - offset = M_Offset_G1_Mode; - break; - case Interrupt_A_Ack_Register: - offset = M_Offset_Interrupt_A_Ack; - break; - case Interrupt_A_Enable_Register: - offset = M_Offset_Interrupt_A_Enable; - break; - case Interrupt_B_Ack_Register: - offset = M_Offset_Interrupt_B_Ack; - break; - case Interrupt_B_Enable_Register: - offset = M_Offset_Interrupt_B_Enable; - break; - case Interrupt_Control_Register: - offset = M_Offset_Interrupt_Control; - break; - case IO_Bidirection_Pin_Register: - offset = M_Offset_IO_Bidirection_Pin; - break; - case Joint_Reset_Register: - offset = M_Offset_Joint_Reset; - break; - case RTSI_Trig_A_Output_Register: - offset = M_Offset_RTSI_Trig_A_Output; - break; - case RTSI_Trig_B_Output_Register: - offset = M_Offset_RTSI_Trig_B_Output; - break; - case RTSI_Trig_Direction_Register: - offset = M_Offset_RTSI_Trig_Direction; - break; - /* FIXME: DIO_Output_Register (16 bit reg) is replaced by M_Offset_Static_Digital_Output (32 bit) - and M_Offset_SCXI_Serial_Data_Out (8 bit) */ - default: - dev_warn(dev->class_dev, - "%s: bug! unhandled register=0x%x in switch.\n", - __func__, reg); - BUG(); - return; - break; - } - ni_writew(dev, data, offset); -} - -static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) -{ - unsigned offset; - - switch (reg) { - case AI_Status_1_Register: - offset = M_Offset_AI_Status_1; - break; - case AO_Status_1_Register: - offset = M_Offset_AO_Status_1; - break; - case AO_Status_2_Register: - offset = M_Offset_AO_Status_2; - break; - case DIO_Serial_Input_Register: - return ni_readb(dev, M_Offset_SCXI_Serial_Data_In); - break; - case Joint_Status_1_Register: - offset = M_Offset_Joint_Status_1; - break; - case Joint_Status_2_Register: - offset = M_Offset_Joint_Status_2; - break; - case G_Status_Register: - offset = M_Offset_G01_Status; - break; - default: - dev_warn(dev->class_dev, - "%s: bug! unhandled register=0x%x in switch.\n", - __func__, reg); - BUG(); - return 0; - break; - } - return ni_readw(dev, offset); -} - -static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, - int reg) -{ - unsigned offset; - - switch (reg) { - case AI_SC_Load_A_Registers: - offset = M_Offset_AI_SC_Load_A; - break; - case AI_SI_Load_A_Registers: - offset = M_Offset_AI_SI_Load_A; - break; - case AO_BC_Load_A_Register: - offset = M_Offset_AO_BC_Load_A; - break; - case AO_UC_Load_A_Register: - offset = M_Offset_AO_UC_Load_A; - break; - case AO_UI_Load_A_Register: - offset = M_Offset_AO_UI_Load_A; - break; - case G_Load_A_Register(0): - offset = M_Offset_G0_Load_A; - break; - case G_Load_A_Register(1): - offset = M_Offset_G1_Load_A; - break; - case G_Load_B_Register(0): - offset = M_Offset_G0_Load_B; - break; - case G_Load_B_Register(1): - offset = M_Offset_G1_Load_B; - break; - default: - dev_warn(dev->class_dev, - "%s: bug! unhandled register=0x%x in switch.\n", - __func__, reg); - BUG(); - return; - break; - } - ni_writel(dev, data, offset); -} - -static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) -{ - unsigned offset; - - switch (reg) { - case G_HW_Save_Register(0): - offset = M_Offset_G0_HW_Save; - break; - case G_HW_Save_Register(1): - offset = M_Offset_G1_HW_Save; - break; - case G_Save_Register(0): - offset = M_Offset_G0_Save; - break; - case G_Save_Register(1): - offset = M_Offset_G1_Save; - break; - default: - dev_warn(dev->class_dev, - "%s: bug! unhandled register=0x%x in switch.\n", - __func__, reg); - BUG(); - return 0; - break; - } - return ni_readl(dev, offset); -} - static int pcimio_ai_change(struct comedi_device *dev, struct comedi_subdevice *s, unsigned long new_size); static int pcimio_ao_change(struct comedi_device *dev, @@ -1409,7 +1107,7 @@ static void init_6143(struct comedi_device *dev) struct ni_private *devpriv = dev->private; /* Disable interrupts */ - devpriv->stc_writew(dev, 0, Interrupt_Control_Register); + ni_stc_writew(dev, 0, Interrupt_Control_Register); /* Initialise 6143 AI specific bits */ @@ -1481,20 +1179,9 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (!devpriv->mite) return -ENOMEM; - if (board->reg_type & ni_reg_m_series_mask) { + if (board->reg_type & ni_reg_m_series_mask) devpriv->is_m_series = 1; - devpriv->stc_writew = m_series_stc_writew; - devpriv->stc_readw = m_series_stc_readw; - devpriv->stc_writel = m_series_stc_writel; - devpriv->stc_readl = m_series_stc_readl; - } else { - devpriv->stc_writew = e_series_win_out; - devpriv->stc_readw = e_series_win_in; - devpriv->stc_writel = win_out2; - devpriv->stc_readl = win_in2; - } - ret = mite_setup(devpriv->mite); if (ret < 0) { pr_warn("error setting up mite\n"); diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 82d4e264c5dd..7cb591a80146 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1421,11 +1421,6 @@ struct ni_board_struct { #define NUM_GPCT 2 struct ni_private { - uint16_t (*stc_readw)(struct comedi_device *, int reg); - uint32_t (*stc_readl)(struct comedi_device *, int reg); - void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); - void (*stc_writel)(struct comedi_device *, uint32_t value, int reg); - unsigned short dio_output; unsigned short dio_control; int aimode; -- cgit From 22b5371412f91ea0e1bf5e1c1dd527eb3eed6dc2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 19 Jun 2014 13:18:06 -0700 Subject: Revert "staging: tidspbridge: use safer test on the result of find_first_zero_bit" This reverts commit cc0be81f00472d782804293766ddd9d1c2b4ebd1, it was incorrect. Reported-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/rmgr/node.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c index 305f3a60db71..9d3044a384ee 100644 --- a/drivers/staging/tidspbridge/rmgr/node.c +++ b/drivers/staging/tidspbridge/rmgr/node.c @@ -935,7 +935,7 @@ int node_connect(struct node_object *node1, u32 stream1, node2_type == NODE_DAISSOCKET)) { /* Find available pipe */ pipe_id = find_first_zero_bit(hnode_mgr->pipe_map, MAXPIPES); - if (pipe_id >= MAXPIPES) { + if (pipe_id == MAXPIPES) { status = -ECONNREFUSED; goto out_unlock; } @@ -1008,7 +1008,7 @@ int node_connect(struct node_object *node1, u32 stream1, status = -EINVAL; goto out_unlock; } - if (chnl_id >= CHNL_MAXCHANNELS) { + if (chnl_id == CHNL_MAXCHANNELS) { status = -ECONNREFUSED; goto out_unlock; } -- cgit From 33aa8d45a4fea3dc5d90338aad0867a66e0c38d5 Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Fri, 6 Jun 2014 19:44:17 +0900 Subject: staging: emxx_udc: Add Emma Mobile USB Gadget driver Add the emxx_udc driver to staging based on an old linux-2.6.35.7 android tree. The driver has been brushed up slightly to complile but it is still in great need of cleanup. At this point DT bindings are clearly lacking and I doubt that the driver even can run with multiple instances (global variables, hurray!). Signed-off-by: Magnus Damm Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 + drivers/staging/Makefile | 1 + drivers/staging/emxx_udc/Kconfig | 10 + drivers/staging/emxx_udc/Makefile | 1 + drivers/staging/emxx_udc/emxx_udc.c | 3559 +++++++++++++++++++++++++++++++++++ drivers/staging/emxx_udc/emxx_udc.h | 662 +++++++ 6 files changed, 4235 insertions(+) create mode 100644 drivers/staging/emxx_udc/Kconfig create mode 100644 drivers/staging/emxx_udc/Makefile create mode 100644 drivers/staging/emxx_udc/emxx_udc.c create mode 100644 drivers/staging/emxx_udc/emxx_udc.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 4f38fc000a37..a511efc1b3c7 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -90,6 +90,8 @@ source "drivers/staging/tidspbridge/Kconfig" source "drivers/staging/quickstart/Kconfig" +source "drivers/staging/emxx_udc/Kconfig" + source "drivers/staging/keucr/Kconfig" source "drivers/staging/bcm/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 1e97ad2177de..e5039056266d 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -39,6 +39,7 @@ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/ obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/ +obj-$(CONFIG_USB_EMXX) += emxx_udc/ obj-$(CONFIG_USB_ENESTORAGE) += keucr/ obj-$(CONFIG_BCM_WIMAX) += bcm/ obj-$(CONFIG_FT1000) += ft1000/ diff --git a/drivers/staging/emxx_udc/Kconfig b/drivers/staging/emxx_udc/Kconfig new file mode 100644 index 000000000000..9bc6d3db86d9 --- /dev/null +++ b/drivers/staging/emxx_udc/Kconfig @@ -0,0 +1,10 @@ +config USB_EMXX + boolean "EMXX USB Function Device Controller" + depends on USB_GADGET && (ARCH_SHMOBILE || (ARM && COMPILE_TEST)) + help + The Emma Mobile series of SoCs from Renesas Electronics and + former NEC Electronics include USB Function hardware. + + Say "y" to link the driver statically, or "m" to build a + dynamically linked module called "emxx_udc" and force all + gadget drivers to also be dynamically linked. diff --git a/drivers/staging/emxx_udc/Makefile b/drivers/staging/emxx_udc/Makefile new file mode 100644 index 000000000000..6352724c0b57 --- /dev/null +++ b/drivers/staging/emxx_udc/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_USB_EMXX) := emxx_udc.o diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c new file mode 100644 index 000000000000..b89c4115e570 --- /dev/null +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -0,0 +1,3559 @@ +/* + * drivers/usb/gadget/emxx_udc.c + * EMXX FCD (Function Controller Driver) for USB. + * + * Copyright (C) 2010 Renesas Electronics Corporation + * + * 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include "emxx_udc.h" + +#define DRIVER_DESC "EMXX UDC driver" +#define DMA_ADDR_INVALID (~(dma_addr_t)0) + +static const char driver_name[] = "emxx_udc"; +static const char driver_desc[] = DRIVER_DESC; + +/*===========================================================================*/ +/* Prototype */ +static void _nbu2ss_ep_dma_abort(struct nbu2ss_udc *, struct nbu2ss_ep *); +static void _nbu2ss_ep0_enable(struct nbu2ss_udc *); +/*static void _nbu2ss_ep0_disable(struct nbu2ss_udc *);*/ +static void _nbu2ss_ep_done(struct nbu2ss_ep *, struct nbu2ss_req *, int); +static void _nbu2ss_set_test_mode(struct nbu2ss_udc *, u32 mode); +static void _nbu2ss_endpoint_toggle_reset(struct nbu2ss_udc *udc, u8 ep_adrs); + +static int _nbu2ss_pullup(struct nbu2ss_udc *, int); +static void _nbu2ss_fifo_flush(struct nbu2ss_udc *, struct nbu2ss_ep *); + +/*===========================================================================*/ +/* Macro */ +#define _nbu2ss_zero_len_pkt(udc, epnum) \ + _nbu2ss_ep_in_end(udc, epnum, 0, 0) + + +/*===========================================================================*/ +/* Global */ +struct nbu2ss_udc udc_controller; + + +/*-------------------------------------------------------------------------*/ +/* Read */ +static inline u32 _nbu2ss_readl(void *address) +{ + return __raw_readl(address) ; +} + +/*-------------------------------------------------------------------------*/ +/* Write */ +static inline void _nbu2ss_writel(void *address, u32 udata) +{ + __raw_writel(udata, address) ; +} + +/*-------------------------------------------------------------------------*/ +/* Set Bit */ +static inline void _nbu2ss_bitset(void *address, u32 udata) +{ + u32 reg_dt = __raw_readl(address) | (udata); + __raw_writel(reg_dt, address) ; +} + +/*-------------------------------------------------------------------------*/ +/* Clear Bit */ +static inline void _nbu2ss_bitclr(void *address, u32 udata) +{ + u32 reg_dt = __raw_readl(address) & ~(udata); + __raw_writel(reg_dt, address) ; +} + +#ifdef UDC_DEBUG_DUMP +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_dump_register(struct nbu2ss_udc *udc) +{ + int i; + u32 reg_data; + + pr_info("=== %s()\n", __func__); + + if (udc == NULL) { + ERR("%s udc == NULL\n", __func__); + return; + } + + spin_unlock(&udc->lock); + + printk(KERN_DEBUG "\n-USB REG-\n"); + for (i = 0x0 ; i < USB_BASE_SIZE ; i += 16) { + reg_data = _nbu2ss_readl( + (u32 *)IO_ADDRESS(USB_BASE_ADDRESS + i)); + printk(KERN_DEBUG "USB%04x =%08x", i, (int)reg_data); + + reg_data = _nbu2ss_readl( + (u32 *)IO_ADDRESS(USB_BASE_ADDRESS + i + 4)); + printk(KERN_DEBUG " %08x", (int)reg_data); + + reg_data = _nbu2ss_readl( + (u32 *)IO_ADDRESS(USB_BASE_ADDRESS + i + 8)); + printk(KERN_DEBUG " %08x", (int)reg_data); + + reg_data = _nbu2ss_readl( + (u32 *)IO_ADDRESS(USB_BASE_ADDRESS + i + 12)); + printk(KERN_DEBUG " %08x\n", (int)reg_data); + + } + + spin_lock(&udc->lock); +} +#endif /* UDC_DEBUG_DUMP */ + +/*-------------------------------------------------------------------------*/ +/* Endpoint 0 Callback (Complete) */ +static void _nbu2ss_ep0_complete(struct usb_ep *_ep, struct usb_request *_req) +{ + u8 recipient; + u16 selector; + u32 test_mode; + struct usb_ctrlrequest *p_ctrl; + struct nbu2ss_udc *udc; + + if ((_ep == NULL) || (_req == NULL)) + return; + + udc = (struct nbu2ss_udc *)_req->context; + p_ctrl = &udc->ctrl; + if ((p_ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { + + if (p_ctrl->bRequest == USB_REQ_SET_FEATURE) { + /*-------------------------------------------------*/ + /* SET_FEATURE */ + recipient = (u8)(p_ctrl->bRequestType & USB_RECIP_MASK); + selector = p_ctrl->wValue; + if ((recipient == USB_RECIP_DEVICE) && + (selector == USB_DEVICE_TEST_MODE)) { + test_mode = (u32)(p_ctrl->wIndex >> 8); + _nbu2ss_set_test_mode(udc, test_mode); + } + } + } +} + +/*-------------------------------------------------------------------------*/ +/* Initialization usb_request */ +static void _nbu2ss_create_ep0_packet( + struct nbu2ss_udc *udc, + void *p_buf, + unsigned length +) +{ + udc->ep0_req.req.buf = p_buf; + udc->ep0_req.req.length = length; + udc->ep0_req.req.dma = 0; + udc->ep0_req.req.zero = TRUE; + udc->ep0_req.req.complete = _nbu2ss_ep0_complete; + udc->ep0_req.req.status = -EINPROGRESS; + udc->ep0_req.req.context = udc; + udc->ep0_req.req.actual = 0; +} + +/*-------------------------------------------------------------------------*/ +/* Acquisition of the first address of RAM(FIFO) */ +static u32 _nbu2ss_get_begin_ram_address(struct nbu2ss_udc *udc) +{ + u32 num, buf_type; + u32 data, last_ram_adr, use_ram_size; + + PT_EP_REGS p_ep_regs; + + last_ram_adr = (D_RAM_SIZE_CTRL / sizeof(u32)) * 2; + use_ram_size = 0; + + for (num = 0; num < NUM_ENDPOINTS - 1; num++) { + p_ep_regs = &udc->p_regs->EP_REGS[num]; + data = _nbu2ss_readl(&p_ep_regs->EP_PCKT_ADRS); + buf_type = _nbu2ss_readl(&p_ep_regs->EP_CONTROL) & EPn_BUF_TYPE; + if (buf_type == 0) { + /* Single Buffer */ + use_ram_size += (data & EPn_MPKT) / sizeof(u32); + } else { + /* Double Buffer */ + use_ram_size += ((data & EPn_MPKT) / sizeof(u32)) * 2; + } + + if ((data >> 16) > last_ram_adr) + last_ram_adr = data>>16; + } + + return last_ram_adr + use_ram_size; +} + +/*-------------------------------------------------------------------------*/ +/* Construction of Endpoint */ +static int _nbu2ss_ep_init(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + u32 num; + u32 data; + u32 begin_adrs; + + if (ep->epnum == 0) + return -EINVAL; + + num = ep->epnum - 1; + + /*-------------------------------------------------------------*/ + /* RAM Transfer Address */ + begin_adrs = _nbu2ss_get_begin_ram_address(udc); + data = (begin_adrs << 16) | ep->ep.maxpacket; + _nbu2ss_writel(&udc->p_regs->EP_REGS[num].EP_PCKT_ADRS, data); + + /*-------------------------------------------------------------*/ + /* Interrupt Enable */ + data = 1 << (ep->epnum + 8); + _nbu2ss_bitset(&udc->p_regs->USB_INT_ENA, data); + + /*-------------------------------------------------------------*/ + /* Endpoint Type(Mode) */ + /* Bulk, Interrupt, ISO */ + switch (ep->ep_type) { + case USB_ENDPOINT_XFER_BULK: + data = EPn_BULK; + break; + + case USB_ENDPOINT_XFER_INT: + data = EPn_BUF_SINGLE | EPn_INTERRUPT; + break; + + case USB_ENDPOINT_XFER_ISOC: + data = EPn_ISO; + break; + + default: + data = 0; + break; + } + + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + _nbu2ss_endpoint_toggle_reset(udc, (ep->epnum|ep->direct)); + + if (ep->direct == USB_DIR_OUT) { + /*---------------------------------------------------------*/ + /* OUT */ + data = EPn_EN | EPn_BCLR | EPn_DIR0; + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = (EPn_ONAK | EPn_OSTL_EN | EPn_OSTL); + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = (EPn_OUT_EN | EPn_OUT_END_EN); + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_INT_ENA, data); + } else { + /*---------------------------------------------------------*/ + /* IN */ + data = (EPn_EN | EPn_BCLR | EPn_AUTO); + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = (EPn_ISTL); + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = (EPn_IN_EN | EPn_IN_END_EN); + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_INT_ENA, data); + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +/* Release of Endpoint */ +static int _nbu2ss_epn_exit(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + u32 num; + u32 data; + + if ((ep->epnum == 0) || (udc->vbus_active == 0)) + return -EINVAL; + + num = ep->epnum - 1; + + /*-------------------------------------------------------------*/ + /* RAM Transfer Address */ + _nbu2ss_writel(&udc->p_regs->EP_REGS[num].EP_PCKT_ADRS, 0); + + /*-------------------------------------------------------------*/ + /* Interrupt Disable */ + data = 1 << (ep->epnum + 8); + _nbu2ss_bitclr(&udc->p_regs->USB_INT_ENA, data); + + if (ep->direct == USB_DIR_OUT) { + /*---------------------------------------------------------*/ + /* OUT */ + data = EPn_ONAK | EPn_BCLR; + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = EPn_EN | EPn_DIR0; + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = EPn_OUT_EN | EPn_OUT_END_EN; + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_INT_ENA, data); + } else { + /*---------------------------------------------------------*/ + /* IN */ + data = EPn_BCLR; + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = EPn_EN | EPn_AUTO; + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); + + data = EPn_IN_EN | EPn_IN_END_EN; + _nbu2ss_bitclr(&udc->p_regs->EP_REGS[num].EP_INT_ENA, data); + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +/* DMA setting (without Endpoint 0) */ +static void _nbu2ss_ep_dma_init(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + u32 num; + u32 data; + + data = _nbu2ss_readl(&udc->p_regs->USBSSCONF); + if (((ep->epnum == 0) || (data & (1 << ep->epnum)) == 0)) + return; /* Not Support DMA */ + + num = ep->epnum - 1; + + if (ep->direct == USB_DIR_OUT) { + /*---------------------------------------------------------*/ + /* OUT */ + data = ep->ep.maxpacket; + _nbu2ss_writel(&udc->p_regs->EP_DCR[num].EP_DCR2, data); + + /*---------------------------------------------------------*/ + /* Transfer Direct */ + data = DCR1_EPn_DIR0; + _nbu2ss_bitset(&udc->p_regs->EP_DCR[num].EP_DCR1, data); + + /*---------------------------------------------------------*/ + /* DMA Mode etc. */ + data = EPn_STOP_MODE | EPn_STOP_SET | EPn_DMAMODE0; + _nbu2ss_writel(&udc->p_regs->EP_REGS[num].EP_DMA_CTRL, data); + } else { + /*---------------------------------------------------------*/ + /* IN */ + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, EPn_AUTO); + + /*---------------------------------------------------------*/ + /* DMA Mode etc. */ + data = EPn_BURST_SET | EPn_DMAMODE0; + _nbu2ss_writel(&udc->p_regs->EP_REGS[num].EP_DMA_CTRL, data); + } +} + +/*-------------------------------------------------------------------------*/ +/* DMA setting release */ +static void _nbu2ss_ep_dma_exit(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + u32 num; + u32 data; + PT_FC_REGS preg = udc->p_regs; + + if (udc->vbus_active == 0) + return; /* VBUS OFF */ + + data = _nbu2ss_readl(&preg->USBSSCONF); + if ((ep->epnum == 0) || ((data & (1 << ep->epnum)) == 0)) + return; /* Not Support DMA */ + + num = ep->epnum - 1; + + _nbu2ss_ep_dma_abort(udc, ep); + + if (ep->direct == USB_DIR_OUT) { + /*---------------------------------------------------------*/ + /* OUT */ + _nbu2ss_writel(&preg->EP_DCR[num].EP_DCR2, 0); + _nbu2ss_bitclr(&preg->EP_DCR[num].EP_DCR1, DCR1_EPn_DIR0); + _nbu2ss_writel(&preg->EP_REGS[num].EP_DMA_CTRL, 0); + } else { + /*---------------------------------------------------------*/ + /* IN */ + _nbu2ss_bitclr(&preg->EP_REGS[num].EP_CONTROL, EPn_AUTO); + _nbu2ss_writel(&preg->EP_REGS[num].EP_DMA_CTRL, 0); + } +} + +/*-------------------------------------------------------------------------*/ +/* Abort DMA */ +static void _nbu2ss_ep_dma_abort(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + PT_FC_REGS preg = udc->p_regs; + + _nbu2ss_bitclr(&preg->EP_DCR[ep->epnum-1].EP_DCR1, DCR1_EPn_REQEN); + mdelay(DMA_DISABLE_TIME); /* DCR1_EPn_REQEN Clear */ + _nbu2ss_bitclr(&preg->EP_REGS[ep->epnum-1].EP_DMA_CTRL, EPn_DMA_EN); +} + +/*-------------------------------------------------------------------------*/ +/* Start IN Transfer */ +static void _nbu2ss_ep_in_end( + struct nbu2ss_udc *udc, + u32 epnum, + u32 data32, + u32 length +) +{ + u32 data; + u32 num; + PT_FC_REGS preg = udc->p_regs; + + if (length >= sizeof(u32)) + return; + + if (epnum == 0) { + _nbu2ss_bitclr(&preg->EP0_CONTROL, EP0_AUTO); + + /* Writing of 1-4 bytes */ + if (length) + _nbu2ss_writel(&preg->EP0_WRITE, data32); + + data = ((length << 5) & EP0_DW) | EP0_DEND; + _nbu2ss_writel(&preg->EP0_CONTROL, data); + + _nbu2ss_bitset(&preg->EP0_CONTROL, EP0_AUTO); + } else { + num = epnum - 1; + + _nbu2ss_bitclr(&preg->EP_REGS[num].EP_CONTROL, EPn_AUTO); + + /* Writing of 1-4 bytes */ + if (length) + _nbu2ss_writel(&preg->EP_REGS[num].EP_WRITE, data32); + + data = (((((u32)length) << 5) & EPn_DW) | EPn_DEND); + _nbu2ss_bitset(&preg->EP_REGS[num].EP_CONTROL, data); + + _nbu2ss_bitset(&preg->EP_REGS[num].EP_CONTROL, EPn_AUTO); + } + + return; +} + +#ifdef USE_DMA +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_dma_map_single( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u8 direct +) +{ + if (req->req.dma == DMA_ADDR_INVALID) { + if (req->unaligned) + req->req.dma = ep->phys_buf; + else { + req->req.dma = dma_map_single( + udc->gadget.dev.parent, + req->req.buf, + req->req.length, + (direct == USB_DIR_IN) + ? DMA_TO_DEVICE : DMA_FROM_DEVICE); + } + req->mapped = 1; + } else { + if (!req->unaligned) + dma_sync_single_for_device( + udc->gadget.dev.parent, + req->req.dma, + req->req.length, + (direct == USB_DIR_IN) + ? DMA_TO_DEVICE : DMA_FROM_DEVICE); + + req->mapped = 0; + } +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_dma_unmap_single( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u8 direct +) +{ + u8 data[4]; + u8 *p; + u32 count = 0; + + if (direct == USB_DIR_OUT) { + count = req->req.actual % 4; + if (count) { + p = req->req.buf; + p += (req->req.actual - count); + memcpy(data, p, count); + } + } + + if (req->mapped) { + if (req->unaligned) { + if (direct == USB_DIR_OUT) + memcpy(req->req.buf, ep->virt_buf, + req->req.actual & 0xfffffffc); + } else + dma_unmap_single(udc->gadget.dev.parent, + req->req.dma, req->req.length, + (direct == USB_DIR_IN) + ? DMA_TO_DEVICE + : DMA_FROM_DEVICE); + req->req.dma = DMA_ADDR_INVALID; + req->mapped = 0; + } else { + if (!req->unaligned) + dma_sync_single_for_cpu(udc->gadget.dev.parent, + req->req.dma, req->req.length, + (direct == USB_DIR_IN) + ? DMA_TO_DEVICE + : DMA_FROM_DEVICE); + } + + if (count) { + p = req->req.buf; + p += (req->req.actual - count); + memcpy(p, data, count); + } +} +#endif + +/*-------------------------------------------------------------------------*/ +/* Endpoint 0 OUT Transfer (PIO) */ +static int EP0_out_PIO(struct nbu2ss_udc *udc, u8* pBuf, u32 length) +{ + u32 i; + int nret = 0; + u32 iWordLength = 0; + USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + + /*------------------------------------------------------------*/ + /* Read Length */ + iWordLength = length / sizeof(u32); + + /*------------------------------------------------------------*/ + /* PIO Read */ + if (iWordLength) { + for (i = 0; i < iWordLength; i++) { + pBuf32->dw = _nbu2ss_readl(&udc->p_regs->EP0_READ); + pBuf32++; + } + nret = iWordLength * sizeof(u32); + } + + return nret; +} + +/*-------------------------------------------------------------------------*/ +/* Endpoint 0 OUT Transfer (PIO, OverBytes) */ +static int EP0_out_OverBytes(struct nbu2ss_udc *udc, u8* pBuf, u32 length) +{ + u32 i; + u32 iReadSize = 0; + USB_REG_ACCESS Temp32; + USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + + if ((0 < length) && (length < sizeof(u32))) { + Temp32.dw = _nbu2ss_readl(&udc->p_regs->EP0_READ); + for (i = 0 ; i < length ; i++) + pBuf32->byte.DATA[i] = Temp32.byte.DATA[i]; + iReadSize += length; + } + + return iReadSize; +} + +/*-------------------------------------------------------------------------*/ +/* Endpoint 0 IN Transfer (PIO) */ +static int EP0_in_PIO(struct nbu2ss_udc *udc, u8 *pBuf, u32 length) +{ + u32 i; + u32 iMaxLength = EP0_PACKETSIZE; + u32 iWordLength = 0; + u32 iWriteLength = 0; + USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + + /*------------------------------------------------------------*/ + /* Transfer Length */ + if (iMaxLength < length) + iWordLength = iMaxLength / sizeof(u32); + else + iWordLength = length / sizeof(u32); + + /*------------------------------------------------------------*/ + /* PIO */ + for (i = 0; i < iWordLength; i++) { + _nbu2ss_writel(&udc->p_regs->EP0_WRITE, pBuf32->dw); + pBuf32++; + iWriteLength += sizeof(u32); + } + + return iWriteLength; +} + +/*-------------------------------------------------------------------------*/ +/* Endpoint 0 IN Transfer (PIO, OverBytes) */ +static int EP0_in_OverBytes(struct nbu2ss_udc *udc, u8 *pBuf, u32 iRemainSize) +{ + u32 i; + USB_REG_ACCESS Temp32; + USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + + if ((0 < iRemainSize) && (iRemainSize < sizeof(u32))) { + for (i = 0 ; i < iRemainSize ; i++) + Temp32.byte.DATA[i] = pBuf32->byte.DATA[i]; + _nbu2ss_ep_in_end(udc, 0, Temp32.dw, iRemainSize); + + return iRemainSize; + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +/* Transfer NULL Packet (Epndoint 0) */ +static int EP0_send_NULL(struct nbu2ss_udc *udc, bool pid_flag) +{ + u32 data; + + data = _nbu2ss_readl(&udc->p_regs->EP0_CONTROL); + data &= ~(u32)EP0_INAK; + + if (pid_flag) + data |= (EP0_INAK_EN | EP0_PIDCLR | EP0_DEND); + else + data |= (EP0_INAK_EN | EP0_DEND); + + _nbu2ss_writel(&udc->p_regs->EP0_CONTROL, data); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +/* Receive NULL Packet (Endpoint 0) */ +static int EP0_receive_NULL(struct nbu2ss_udc *udc, bool pid_flag) +{ + u32 data; + + data = _nbu2ss_readl(&udc->p_regs->EP0_CONTROL); + data &= ~(u32)EP0_ONAK; + + if (pid_flag) + data |= EP0_PIDCLR; + + _nbu2ss_writel(&udc->p_regs->EP0_CONTROL, data); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_ep0_in_transfer( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req +) +{ + u8 *pBuffer; /* IN Data Buffer */ + u32 data; + u32 iRemainSize = 0; + int result = 0; + + /*-------------------------------------------------------------*/ + /* End confirmation */ + if (req->req.actual == req->req.length) { + if ((req->req.actual % EP0_PACKETSIZE) == 0) { + if (req->zero) { + req->zero = 0; + EP0_send_NULL(udc, FALSE); + return 1; + } + } + + return 0; /* Transfer End */ + } + + /*-------------------------------------------------------------*/ + /* NAK release */ + data = _nbu2ss_readl(&udc->p_regs->EP0_CONTROL); + data |= EP0_INAK_EN; + data &= ~(u32)EP0_INAK; + _nbu2ss_writel(&udc->p_regs->EP0_CONTROL, data); + + iRemainSize = req->req.length - req->req.actual; + pBuffer = (u8 *)req->req.buf; + pBuffer += req->req.actual; + + /*-------------------------------------------------------------*/ + /* Data transfer */ + result = EP0_in_PIO(udc, pBuffer, iRemainSize); + + req->div_len = result; + iRemainSize -= result; + + if (iRemainSize == 0) { + EP0_send_NULL(udc, FALSE); + return result; + } + + if ((iRemainSize < sizeof(u32)) && (result != EP0_PACKETSIZE)) { + pBuffer += result; + result += EP0_in_OverBytes(udc, pBuffer, iRemainSize); + req->div_len = result; + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_ep0_out_transfer( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req +) +{ + u8 *pBuffer; + u32 iRemainSize; + u32 iRecvLength; + int result = 0; + int fRcvZero; + + /*-------------------------------------------------------------*/ + /* Receive data confirmation */ + iRecvLength = _nbu2ss_readl(&udc->p_regs->EP0_LENGTH) & EP0_LDATA; + if (iRecvLength != 0) { + + fRcvZero = 0; + + iRemainSize = req->req.length - req->req.actual; + pBuffer = (u8 *)req->req.buf; + pBuffer += req->req.actual; + + result = EP0_out_PIO(udc, pBuffer + , min(iRemainSize, iRecvLength)); + if (result < 0) + return result; + + req->req.actual += result; + iRecvLength -= result; + + if ((0 < iRecvLength) && (iRecvLength < sizeof(u32))) { + pBuffer += result; + iRemainSize -= result; + + result = EP0_out_OverBytes(udc, pBuffer + , min(iRemainSize, iRecvLength)); + req->req.actual += result; + } + } else { + fRcvZero = 1; + } + + /*-------------------------------------------------------------*/ + /* End confirmation */ + if (req->req.actual == req->req.length) { + if ((req->req.actual % EP0_PACKETSIZE) == 0) { + if (req->zero) { + req->zero = 0; + EP0_receive_NULL(udc, FALSE); + return 1; + } + } + + return 0; /* Transfer End */ + } + + if ((req->req.actual % EP0_PACKETSIZE) != 0) + return 0; /* Short Packet Transfer End */ + + if (req->req.actual > req->req.length) { + ERR(" *** Overrun Error\n"); + return -EOVERFLOW; + } + + if (fRcvZero != 0) { + iRemainSize = _nbu2ss_readl(&udc->p_regs->EP0_CONTROL); + if (iRemainSize & EP0_ONAK) { + /*---------------------------------------------------*/ + /* NACK release */ + _nbu2ss_bitclr(&udc->p_regs->EP0_CONTROL, EP0_ONAK); + } + result = 1; + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_out_dma( + struct nbu2ss_udc *udc, + struct nbu2ss_req *req, + u32 num, + u32 length +) +{ + u8 *pBuffer; + u32 mpkt; + u32 lmpkt; + u32 dmacnt; + u32 burst = 1; + u32 data; + int result = -EINVAL; + PT_FC_REGS preg = udc->p_regs; + + if (req->dma_flag) + return 1; /* DMA is forwarded */ + + req->dma_flag = TRUE; + pBuffer = (u8 *)req->req.dma; + pBuffer += req->req.actual; + + /* DMA Address */ + _nbu2ss_writel(&preg->EP_DCR[num].EP_TADR, (u32)pBuffer); + + /* Number of transfer packets */ + mpkt = _nbu2ss_readl(&preg->EP_REGS[num].EP_PCKT_ADRS) & EPn_MPKT; + dmacnt = (length / mpkt); + lmpkt = (length % mpkt) & ~(u32)0x03; + + if (DMA_MAX_COUNT < dmacnt) { + dmacnt = DMA_MAX_COUNT; + lmpkt = 0; + } else if (0 != lmpkt) { + if (0 == dmacnt) + burst = 0; /* Burst OFF */ + dmacnt++; + } + + data = mpkt | (lmpkt << 16); + _nbu2ss_writel(&preg->EP_DCR[num].EP_DCR2, data); + + data = ((dmacnt & 0xff) << 16) | DCR1_EPn_DIR0 | DCR1_EPn_REQEN; + _nbu2ss_writel(&preg->EP_DCR[num].EP_DCR1, data); + + if (0 == burst) { + _nbu2ss_writel(&preg->EP_REGS[num].EP_LEN_DCNT, 0); + _nbu2ss_bitclr(&preg->EP_REGS[num].EP_DMA_CTRL, EPn_BURST_SET); + } else { + _nbu2ss_writel(&preg->EP_REGS[num].EP_LEN_DCNT + , (dmacnt << 16)); + _nbu2ss_bitset(&preg->EP_REGS[num].EP_DMA_CTRL, EPn_BURST_SET); + } + _nbu2ss_bitset(&preg->EP_REGS[num].EP_DMA_CTRL, EPn_DMA_EN); + + result = length & ~(u32)0x03; + req->div_len = result; + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_out_pio( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u32 length +) +{ + u8 *pBuffer; + u32 i; + u32 data; + u32 iWordLength; + USB_REG_ACCESS Temp32; + USB_REG_ACCESS *pBuf32; + int result = 0; + PT_FC_REGS preg = udc->p_regs; + + if (req->dma_flag) + return 1; /* DMA is forwarded */ + + if (length == 0) + return 0; + + pBuffer = (u8 *)req->req.buf; + pBuf32 = (USB_REG_ACCESS *)(pBuffer + req->req.actual); + + iWordLength = length / sizeof(u32); + if (iWordLength > 0) { + /*---------------------------------------------------------*/ + /* Copy of every four bytes */ + for (i = 0; i < iWordLength; i++) { + pBuf32->dw = + _nbu2ss_readl(&preg->EP_REGS[ep->epnum-1].EP_READ); + pBuf32++; + } + result = iWordLength * sizeof(u32); + } + + data = length - result; + if (data > 0) { + /*---------------------------------------------------------*/ + /* Copy of fraction byte */ + Temp32.dw = _nbu2ss_readl(&preg->EP_REGS[ep->epnum-1].EP_READ); + for (i = 0 ; i < data ; i++) + pBuf32->byte.DATA[i] = Temp32.byte.DATA[i]; + result += data; + } + + req->req.actual += result; + + if ((req->req.actual == req->req.length) + || ((req->req.actual % ep->ep.maxpacket) != 0)) { + + result = 0; + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_out_data( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u32 data_size +) +{ + u32 num; + u32 iBufSize; + int nret = 1; + + if (ep->epnum == 0) + return -EINVAL; + + num = ep->epnum - 1; + + iBufSize = min((req->req.length - req->req.actual), data_size); + + if ((ep->ep_type != USB_ENDPOINT_XFER_INT) + && (req->req.dma != 0) + && (iBufSize >= sizeof(u32))) { + nret = _nbu2ss_out_dma(udc, req, num, iBufSize); + } else { + iBufSize = min(iBufSize, (u32)ep->ep.maxpacket); + nret = _nbu2ss_epn_out_pio(udc, ep, req, iBufSize); + } + + return nret; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_out_transfer( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req +) +{ + u32 num; + u32 iRecvLength; + int result = 1; + PT_FC_REGS preg = udc->p_regs; + + if (ep->epnum == 0) + return -EINVAL; + + num = ep->epnum - 1; + + /*-------------------------------------------------------------*/ + /* Receive Length */ + iRecvLength + = _nbu2ss_readl(&preg->EP_REGS[num].EP_LEN_DCNT) & EPn_LDATA; + + if (iRecvLength != 0) { + result = _nbu2ss_epn_out_data(udc, ep, req, iRecvLength); + if (iRecvLength < ep->ep.maxpacket) { + if (iRecvLength == result) { + req->req.actual += result; + result = 0; + } + } + } else { + if ((req->req.actual == req->req.length) + || ((req->req.actual % ep->ep.maxpacket) != 0)) { + + result = 0; + } + } + + if (result == 0) { + if ((req->req.actual % ep->ep.maxpacket) == 0) { + if (req->zero) { + req->zero = 0; + return 1; + } + } + } + + if (req->req.actual > req->req.length) { + ERR(" *** Overrun Error\n"); + ERR(" *** actual = %d, length = %d\n", + req->req.actual, req->req.length); + result = -EOVERFLOW; + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_in_dma( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u32 num, + u32 length +) +{ + u8 *pBuffer; + u32 mpkt; /* MaxPacketSize */ + u32 lmpkt; /* Last Packet Data Size */ + u32 dmacnt; /* IN Data Size */ + u32 iWriteLength; + u32 data; + int result = -EINVAL; + PT_FC_REGS preg = udc->p_regs; + + if (req->dma_flag) + return 1; /* DMA is forwarded */ + +#ifdef USE_DMA + if (req->req.actual == 0) + _nbu2ss_dma_map_single(udc, ep, req, USB_DIR_IN); +#endif + req->dma_flag = TRUE; + + /* MAX Packet Size */ + mpkt = _nbu2ss_readl(&preg->EP_REGS[num].EP_PCKT_ADRS) & EPn_MPKT; + + if ((DMA_MAX_COUNT * mpkt) < length) + iWriteLength = DMA_MAX_COUNT * mpkt; + else + iWriteLength = length; + + /*------------------------------------------------------------*/ + /* Number of transmission packets */ + if (mpkt < iWriteLength) { + dmacnt = iWriteLength / mpkt; + lmpkt = (iWriteLength % mpkt) & ~(u32)0x3; + if (lmpkt != 0) + dmacnt++; + else + lmpkt = mpkt & ~(u32)0x3; + + } else { + dmacnt = 1; + lmpkt = iWriteLength & ~(u32)0x3; + } + + /* Packet setting */ + data = mpkt | (lmpkt << 16); + _nbu2ss_writel(&preg->EP_DCR[num].EP_DCR2, data); + + /* Address setting */ + pBuffer = (u8 *)req->req.dma; + pBuffer += req->req.actual; + _nbu2ss_writel(&preg->EP_DCR[num].EP_TADR, (u32)pBuffer); + + /* Packet and DMA setting */ + data = ((dmacnt & 0xff) << 16) | DCR1_EPn_REQEN; + _nbu2ss_writel(&preg->EP_DCR[num].EP_DCR1, data); + + /* Packet setting of EPC */ + data = dmacnt << 16; + _nbu2ss_writel(&preg->EP_REGS[num].EP_LEN_DCNT, data); + + /*DMA setting of EPC */ + _nbu2ss_bitset(&preg->EP_REGS[num].EP_DMA_CTRL, EPn_DMA_EN); + + result = iWriteLength & ~(u32)0x3; + req->div_len = result; + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_in_pio( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u32 length +) +{ + u8 *pBuffer; + u32 i; + u32 data; + u32 iWordLength; + USB_REG_ACCESS Temp32; + USB_REG_ACCESS *pBuf32 = NULL; + int result = 0; + PT_FC_REGS preg = udc->p_regs; + + if (req->dma_flag) + return 1; /* DMA is forwarded */ + + if (length > 0) { + pBuffer = (u8 *)req->req.buf; + pBuf32 = (USB_REG_ACCESS *)(pBuffer + req->req.actual); + + iWordLength = length / sizeof(u32); + if (iWordLength > 0) { + for (i = 0; i < iWordLength; i++) { + _nbu2ss_writel( + &preg->EP_REGS[ep->epnum-1].EP_WRITE + , pBuf32->dw + ); + + pBuf32++; + } + result = iWordLength * sizeof(u32); + } + } + + if (result != ep->ep.maxpacket) { + data = length - result; + Temp32.dw = 0; + for (i = 0 ; i < data ; i++) + Temp32.byte.DATA[i] = pBuf32->byte.DATA[i]; + + _nbu2ss_ep_in_end(udc, ep->epnum, Temp32.dw, data); + result += data; + } + + req->div_len = result; + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_in_data( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + u32 data_size +) +{ + u32 num; + int nret = 1; + + if (ep->epnum == 0) + return -EINVAL; + + num = ep->epnum - 1; + + if ((ep->ep_type != USB_ENDPOINT_XFER_INT) + && (req->req.dma != 0) + && (data_size >= sizeof(u32))) { + nret = _nbu2ss_in_dma(udc, ep, req, num, data_size); + } else { + data_size = min(data_size, (u32)ep->ep.maxpacket); + nret = _nbu2ss_epn_in_pio(udc, ep, req, data_size); + } + + return nret; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_epn_in_transfer( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req +) +{ + u32 num; + u32 iBufSize; + int result = 0; + u32 status; + + if (ep->epnum == 0) + return -EINVAL; + + num = ep->epnum - 1; + + status = _nbu2ss_readl(&udc->p_regs->EP_REGS[num].EP_STATUS); + + /*-------------------------------------------------------------*/ + /* State confirmation of FIFO */ + if (req->req.actual == 0) { + if ((status & EPn_IN_EMPTY) == 0) + return 1; /* Not Empty */ + + } else { + if ((status & EPn_IN_FULL) != 0) + return 1; /* Not Empty */ + } + + /*-------------------------------------------------------------*/ + /* Start tranfer */ + iBufSize = req->req.length - req->req.actual; + if (iBufSize > 0) + result = _nbu2ss_epn_in_data(udc, ep, req, iBufSize); + else if (req->req.length == 0) + _nbu2ss_zero_len_pkt(udc, ep->epnum); + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_start_transfer( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + bool bflag) +{ + int nret = -EINVAL; + + req->dma_flag = FALSE; + req->div_len = 0; + + if (req->req.length == 0) + req->zero = 0; + else { + if ((req->req.length % ep->ep.maxpacket) == 0) + req->zero = req->req.zero; + else + req->zero = 0; + } + + if (ep->epnum == 0) { + /* EP0 */ + switch (udc->ep0state) { + case EP0_IN_DATA_PHASE: + nret = _nbu2ss_ep0_in_transfer(udc, ep, req); + break; + + case EP0_OUT_DATA_PHASE: + nret = _nbu2ss_ep0_out_transfer(udc, ep, req); + break; + + case EP0_IN_STATUS_PHASE: + nret = EP0_send_NULL(udc, TRUE); + break; + + default: + break; + } + + } else { + /* EPn */ + if (ep->direct == USB_DIR_OUT) { + /* OUT */ + if (bflag == FALSE) + nret = _nbu2ss_epn_out_transfer(udc, ep, req); + } else { + /* IN */ + nret = _nbu2ss_epn_in_transfer(udc, ep, req); + } + } + + return nret; +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_restert_transfer(struct nbu2ss_ep *ep) +{ + u32 length; + bool bflag = FALSE; + struct nbu2ss_req *req; + + if (list_empty(&ep->queue)) + req = NULL; + else + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + + if (req == NULL) + return; + + if (ep->epnum > 0) { + length = _nbu2ss_readl( + &ep->udc->p_regs->EP_REGS[ep->epnum-1].EP_LEN_DCNT); + + length &= EPn_LDATA; + if (length < ep->ep.maxpacket) + bflag = TRUE; + } + + _nbu2ss_start_transfer(ep->udc, ep, req, bflag); +} + +/*-------------------------------------------------------------------------*/ +/* Endpoint Toggle Reset */ +static void _nbu2ss_endpoint_toggle_reset( + struct nbu2ss_udc *udc, + u8 ep_adrs) +{ + u8 num; + u32 data; + + if ((ep_adrs == 0) || (ep_adrs == 0x80)) + return; + + num = (ep_adrs & 0x7F) - 1; + + if (ep_adrs & USB_DIR_IN) + data = EPn_IPIDCLR; + else + data = EPn_BCLR | EPn_OPIDCLR; + + _nbu2ss_bitset(&udc->p_regs->EP_REGS[num].EP_CONTROL, data); +} + +/*-------------------------------------------------------------------------*/ +/* Endpoint STALL set */ +static void _nbu2ss_set_endpoint_stall( + struct nbu2ss_udc *udc, + u8 ep_adrs, + bool bstall) +{ + u8 num, epnum; + u32 data; + struct nbu2ss_ep *ep; + PT_FC_REGS preg = udc->p_regs; + + if ((ep_adrs == 0) || (ep_adrs == 0x80)) { + if (bstall) { + /* Set STALL */ + _nbu2ss_bitset(&preg->EP0_CONTROL, EP0_STL); + } else { + /* Clear STALL */ + _nbu2ss_bitclr(&preg->EP0_CONTROL, EP0_STL); + } + } else { + epnum = ep_adrs & USB_ENDPOINT_NUMBER_MASK; + num = epnum - 1; + ep = &udc->ep[epnum]; + + if (bstall) { + /* Set STALL */ + ep->halted = TRUE; + + if (ep_adrs & USB_DIR_IN) + data = EPn_BCLR | EPn_ISTL; + else + data = EPn_OSTL_EN | EPn_OSTL; + + _nbu2ss_bitset(&preg->EP_REGS[num].EP_CONTROL, data); + } else { + /* Clear STALL */ + ep->stalled = FALSE; + if (ep_adrs & USB_DIR_IN) { + _nbu2ss_bitclr(&preg->EP_REGS[num].EP_CONTROL + , EPn_ISTL); + } else { + data = + _nbu2ss_readl(&preg->EP_REGS[num].EP_CONTROL); + + data &= ~EPn_OSTL; + data |= EPn_OSTL_EN; + + _nbu2ss_writel(&preg->EP_REGS[num].EP_CONTROL + , data); + } + + ep->stalled = FALSE; + if (ep->halted) { + ep->halted = FALSE; + _nbu2ss_restert_transfer(ep); + } + } + } + + return; +} + + +/*-------------------------------------------------------------------------*/ +/* Device Descriptor */ +static struct usb_device_descriptor device_desc = { + .bLength = sizeof(device_desc), + .bDescriptorType = USB_DT_DEVICE, + .bcdUSB = __constant_cpu_to_le16(0x0200), + .bDeviceClass = USB_CLASS_VENDOR_SPEC, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = 64, + .idVendor = __constant_cpu_to_le16 (0x0409), + .idProduct = __constant_cpu_to_le16 (0xfff0), + .bcdDevice = 0xffff, + .iManufacturer = 0x00, + .iProduct = 0x00, + .iSerialNumber = 0x00, + .bNumConfigurations = 0x01, +}; + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_set_test_mode(struct nbu2ss_udc *udc, u32 mode) +{ + u32 data; + + if (mode > MAX_TEST_MODE_NUM) + return; + + pr_info("SET FEATURE : test mode = %d\n", mode); + + data = _nbu2ss_readl(&udc->p_regs->USB_CONTROL); + data &= ~TEST_FORCE_ENABLE; + data |= mode << TEST_MODE_SHIFT; + + _nbu2ss_writel(&udc->p_regs->USB_CONTROL, data); + _nbu2ss_bitset(&udc->p_regs->TEST_CONTROL, CS_TESTMODEEN); +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_set_feature_device( + struct nbu2ss_udc *udc, + u16 selector, + u16 wIndex +) +{ + int result = -EOPNOTSUPP; + + switch (selector) { + case USB_DEVICE_REMOTE_WAKEUP: + if (0x0000 == wIndex) { + udc->remote_wakeup = U2F_ENABLE; + result = 0; + } + break; + + case USB_DEVICE_TEST_MODE: + wIndex = wIndex >> 8; + if (wIndex <= MAX_TEST_MODE_NUM) + result = 0; + break; + + default: + break; + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_get_ep_stall(struct nbu2ss_udc *udc, u8 ep_adrs) +{ + u8 epnum; + u32 data = 0, bit_data; + PT_FC_REGS preg = udc->p_regs; + + epnum = ep_adrs & ~USB_ENDPOINT_DIR_MASK; + if (epnum == 0) { + data = _nbu2ss_readl(&preg->EP0_CONTROL); + bit_data = EP0_STL; + + } else { + data = _nbu2ss_readl(&preg->EP_REGS[epnum-1].EP_CONTROL); + if ((data & EPn_EN) == 0) + return -1; + + if (ep_adrs & USB_ENDPOINT_DIR_MASK) + bit_data = EPn_ISTL; + else + bit_data = EPn_OSTL; + } + + if ((data & bit_data) == 0) + return 0; + else + return 1; +} + +/*-------------------------------------------------------------------------*/ +static inline int _nbu2ss_req_feature(struct nbu2ss_udc *udc, bool bset) +{ + u8 recipient = (u8)(udc->ctrl.bRequestType & USB_RECIP_MASK); + u8 direction = (u8)(udc->ctrl.bRequestType & USB_DIR_IN); + u16 selector = udc->ctrl.wValue; + u16 wIndex = udc->ctrl.wIndex; + u8 ep_adrs; + int result = -EOPNOTSUPP; + + if ((0x0000 != udc->ctrl.wLength) || + (USB_DIR_OUT != direction)) { + return -EINVAL; + } + + switch (recipient) { + case USB_RECIP_DEVICE: + if (bset) + result = + _nbu2ss_set_feature_device(udc, selector, wIndex); + break; + + case USB_RECIP_ENDPOINT: + if (0x0000 == (wIndex & 0xFF70)) { + if (USB_ENDPOINT_HALT == selector) { + ep_adrs = wIndex & 0xFF; + if (bset == FALSE) { + _nbu2ss_endpoint_toggle_reset( + udc, ep_adrs); + } + + _nbu2ss_set_endpoint_stall( + udc, ep_adrs, bset); + + result = 0; + } + } + break; + + default: + break; + } + + if (result >= 0) + _nbu2ss_create_ep0_packet(udc, udc->ep0_buf, 0); + + return result; +} + +/*-------------------------------------------------------------------------*/ +static inline enum usb_device_speed _nbu2ss_get_speed(struct nbu2ss_udc *udc) +{ + u32 data; + enum usb_device_speed speed = USB_SPEED_FULL; + + data = _nbu2ss_readl(&udc->p_regs->USB_STATUS); + if (data & HIGH_SPEED) + speed = USB_SPEED_HIGH; + + return speed; +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_epn_set_stall( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep +) +{ + u8 ep_adrs; + u32 regdata; + int limit_cnt = 0; + + PT_FC_REGS preg = udc->p_regs; + + if (ep->direct == USB_DIR_IN) { + for (limit_cnt = 0 + ; limit_cnt < IN_DATA_EMPTY_COUNT + ; limit_cnt++) { + + regdata = _nbu2ss_readl( + &preg->EP_REGS[ep->epnum-1].EP_STATUS); + + if ((regdata & EPn_IN_DATA) == 0) + break; + + mdelay(1); + } + } + + ep_adrs = ep->epnum | ep->direct; + _nbu2ss_set_endpoint_stall(udc, ep_adrs, 1); +} + +/*-------------------------------------------------------------------------*/ +static int std_req_get_status(struct nbu2ss_udc *udc) +{ + u32 length; + u16 status_data = 0; + u8 recipient = (u8)(udc->ctrl.bRequestType & USB_RECIP_MASK); + u8 direction = (u8)(udc->ctrl.bRequestType & USB_DIR_IN); + u8 ep_adrs; + int result = -EINVAL; + + if ((0x0000 != udc->ctrl.wValue) + || (USB_DIR_IN != direction)) { + + return result; + } + + length = min(udc->ctrl.wLength, (u16)sizeof(status_data)); + + switch (recipient) { + case USB_RECIP_DEVICE: + if (udc->ctrl.wIndex == 0x0000) { + if (udc->self_powered) + status_data |= (1 << USB_DEVICE_SELF_POWERED); + + if (udc->remote_wakeup) + status_data |= (1 << USB_DEVICE_REMOTE_WAKEUP); + + result = 0; + } + break; + + case USB_RECIP_ENDPOINT: + if (0x0000 == (udc->ctrl.wIndex & 0xFF70)) { + ep_adrs = (u8)(udc->ctrl.wIndex & 0xFF); + result = _nbu2ss_get_ep_stall(udc, ep_adrs); + + if (result > 0) + status_data |= (1 << USB_ENDPOINT_HALT); + } + break; + + default: + break; + } + + if (result >= 0) { + memcpy(udc->ep0_buf, &status_data, length); + _nbu2ss_create_ep0_packet(udc, udc->ep0_buf, length); + _nbu2ss_ep0_in_transfer(udc, &udc->ep[0], &udc->ep0_req); + + } else { + ERR("*** Error GET_STATUS\n"); + } + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int std_req_clear_feature(struct nbu2ss_udc *udc) +{ + return _nbu2ss_req_feature(udc, FALSE); +} + +/*-------------------------------------------------------------------------*/ +static int std_req_set_feature(struct nbu2ss_udc *udc) +{ + return _nbu2ss_req_feature(udc, TRUE); +} + +/*-------------------------------------------------------------------------*/ +static int std_req_set_address(struct nbu2ss_udc *udc) +{ + int result = 0; + u32 wValue = udc->ctrl.wValue; + + if ((0x00 != udc->ctrl.bRequestType) || + (0x0000 != udc->ctrl.wIndex) || + (0x0000 != udc->ctrl.wLength)) { + return -EINVAL; + } + + if (wValue != (wValue & 0x007F)) + return -EINVAL; + + wValue = wValue << USB_ADRS_SHIFT; + + _nbu2ss_writel(&udc->p_regs->USB_ADDRESS, wValue); + _nbu2ss_create_ep0_packet(udc, udc->ep0_buf, 0); + + return result; +} + +/*-------------------------------------------------------------------------*/ +static int std_req_set_configuration(struct nbu2ss_udc *udc) +{ + u32 ConfigValue = (u32)(udc->ctrl.wValue & 0x00ff); + + if ((0x0000 != udc->ctrl.wIndex) || + (0x0000 != udc->ctrl.wLength) || + (0x00 != udc->ctrl.bRequestType)) { + return -EINVAL; + } + + udc->curr_config = ConfigValue; + + if (ConfigValue > 0) { + _nbu2ss_bitset(&udc->p_regs->USB_CONTROL, CONF); + udc->devstate = USB_STATE_CONFIGURED; + + } else { + _nbu2ss_bitclr(&udc->p_regs->USB_CONTROL, CONF); + udc->devstate = USB_STATE_ADDRESS; + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_read_request_data(struct nbu2ss_udc *udc, u32 *pdata) +{ + if ((udc == NULL) && (pdata == NULL)) + return; + + *pdata = _nbu2ss_readl(&udc->p_regs->SETUP_DATA0); + pdata++; + *pdata = _nbu2ss_readl(&udc->p_regs->SETUP_DATA1); +} + +/*-------------------------------------------------------------------------*/ +static inline int _nbu2ss_decode_request(struct nbu2ss_udc *udc) +{ + bool bcall_back = TRUE; + int nret = -EINVAL; + struct usb_ctrlrequest *p_ctrl; + + p_ctrl = &udc->ctrl; + _nbu2ss_read_request_data(udc, (u32 *)p_ctrl); + + /* ep0 state control */ + if (p_ctrl->wLength == 0) { + udc->ep0state = EP0_IN_STATUS_PHASE; + + } else { + if (p_ctrl->bRequestType & USB_DIR_IN) + udc->ep0state = EP0_IN_DATA_PHASE; + else + udc->ep0state = EP0_OUT_DATA_PHASE; + } + + if ((p_ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { + switch (p_ctrl->bRequest) { + case USB_REQ_GET_STATUS: + nret = std_req_get_status(udc); + bcall_back = FALSE; + break; + + case USB_REQ_CLEAR_FEATURE: + nret = std_req_clear_feature(udc); + bcall_back = FALSE; + break; + + case USB_REQ_SET_FEATURE: + nret = std_req_set_feature(udc); + bcall_back = FALSE; + break; + + case USB_REQ_SET_ADDRESS: + nret = std_req_set_address(udc); + bcall_back = FALSE; + break; + + case USB_REQ_SET_CONFIGURATION: + nret = std_req_set_configuration(udc); + break; + + default: + break; + } + } + + if (bcall_back == FALSE) { + if (udc->ep0state == EP0_IN_STATUS_PHASE) { + if (nret >= 0) { + /*--------------------------------------*/ + /* Status Stage */ + nret = EP0_send_NULL(udc, TRUE); + } + } + + } else { + spin_unlock(&udc->lock); + nret = udc->driver->setup(&udc->gadget, &udc->ctrl); + spin_lock(&udc->lock); + } + + if (nret < 0) + udc->ep0state = EP0_IDLE; + + return nret; +} + +/*-------------------------------------------------------------------------*/ +static inline int _nbu2ss_ep0_in_data_stage(struct nbu2ss_udc *udc) +{ + int nret; + struct nbu2ss_req *req; + struct nbu2ss_ep *ep = &udc->ep[0]; + + if (list_empty(&ep->queue)) + req = NULL; + else + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + + if (req == NULL) + req = &udc->ep0_req; + + req->req.actual += req->div_len; + req->div_len = 0; + + nret = _nbu2ss_ep0_in_transfer(udc, ep, req); + if (nret == 0) { + udc->ep0state = EP0_OUT_STATUS_PAHSE; + EP0_receive_NULL(udc, TRUE); + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static inline int _nbu2ss_ep0_out_data_stage(struct nbu2ss_udc *udc) +{ + int nret; + struct nbu2ss_req *req; + struct nbu2ss_ep *ep = &udc->ep[0]; + + if (list_empty(&ep->queue)) + req = NULL; + else + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + + if (req == NULL) + req = &udc->ep0_req; + + nret = _nbu2ss_ep0_out_transfer(udc, ep, req); + if (nret == 0) { + udc->ep0state = EP0_IN_STATUS_PHASE; + EP0_send_NULL(udc, TRUE); + + } else if (nret < 0) { + _nbu2ss_bitset(&udc->p_regs->EP0_CONTROL, EP0_BCLR); + req->req.status = nret; + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static inline int _nbu2ss_ep0_status_stage(struct nbu2ss_udc *udc) +{ + struct nbu2ss_req *req; + struct nbu2ss_ep *ep = &udc->ep[0]; + + if (list_empty(&ep->queue)) + req = NULL; + else + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + + if (req == NULL) { + req = &udc->ep0_req; + if (req->req.complete) + req->req.complete(&ep->ep, &req->req); + + } else { + if (req->req.complete) + _nbu2ss_ep_done(ep, req, 0); + } + + udc->ep0state = EP0_IDLE; + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_ep0_int(struct nbu2ss_udc *udc) +{ + int i; + u32 status; + u32 intr; + int nret = -1; + + status = _nbu2ss_readl(&udc->p_regs->EP0_STATUS); + intr = status & EP0_STATUS_RW_BIT; + _nbu2ss_writel(&udc->p_regs->EP0_STATUS, ~(u32)intr); + + status &= (SETUP_INT | EP0_IN_INT | EP0_OUT_INT + | STG_END_INT | EP0_OUT_NULL_INT); + + if (status == 0) { + pr_info("--- %s Not Decode Interrupt\n", __func__); + pr_info("--- EP0_STATUS = 0x%08x\n", intr); + return; + } + + if (udc->gadget.speed == USB_SPEED_UNKNOWN) + udc->gadget.speed = _nbu2ss_get_speed(udc); + + for (i = 0; i < EP0_END_XFER; i++) { + switch (udc->ep0state) { + case EP0_IDLE: + if (status & SETUP_INT) { + status = 0; + nret = _nbu2ss_decode_request(udc); + } + break; + + case EP0_IN_DATA_PHASE: + if (status & EP0_IN_INT) { + status &= ~EP0_IN_INT; + nret = _nbu2ss_ep0_in_data_stage(udc); + } + break; + + case EP0_OUT_DATA_PHASE: + if (status & EP0_OUT_INT) { + status &= ~EP0_OUT_INT; + nret = _nbu2ss_ep0_out_data_stage(udc); + } + break; + + case EP0_IN_STATUS_PHASE: + if ((status & STG_END_INT) || (status & SETUP_INT)) { + status &= ~(STG_END_INT | EP0_IN_INT); + nret = _nbu2ss_ep0_status_stage(udc); + } + break; + + case EP0_OUT_STATUS_PAHSE: + if ((status & STG_END_INT) + || (status & SETUP_INT) + || (status & EP0_OUT_NULL_INT)) { + status &= ~(STG_END_INT + | EP0_OUT_INT + | EP0_OUT_NULL_INT); + + nret = _nbu2ss_ep0_status_stage(udc); + } + + break; + + default: + status = 0; + break; + } + + if (status == 0) + break; + } + + if (nret < 0) { + /* Send Stall */ + _nbu2ss_set_endpoint_stall(udc, 0, TRUE); + } +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_ep_done( + struct nbu2ss_ep *ep, + struct nbu2ss_req *req, + int status) +{ + struct nbu2ss_udc *udc = ep->udc; + + list_del_init(&req->queue); + + if (status == -ECONNRESET) + _nbu2ss_fifo_flush(udc, ep); + + if (likely(req->req.status == -EINPROGRESS)) + req->req.status = status; + + if (ep->stalled) + _nbu2ss_epn_set_stall(udc, ep); + else { + if (!list_empty(&ep->queue)) + _nbu2ss_restert_transfer(ep); + } + +#ifdef USE_DMA + if ((ep->direct == USB_DIR_OUT) && (ep->epnum > 0) && + (req->req.dma != 0)) + _nbu2ss_dma_unmap_single(udc, ep, req, USB_DIR_OUT); +#endif + + spin_unlock(&udc->lock); + req->req.complete(&ep->ep, &req->req); + spin_lock(&udc->lock); +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_epn_in_int( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req) +{ + int result = 0; + u32 status; + + PT_FC_REGS preg = udc->p_regs; + + if (req->dma_flag) + return; /* DMA is forwarded */ + + req->req.actual += req->div_len; + req->div_len = 0; + + if (req->req.actual != req->req.length) { + /*---------------------------------------------------------*/ + /* remainder of data */ + result = _nbu2ss_epn_in_transfer(udc, ep, req); + + } else { + if ((req->zero != 0) + && ((req->req.actual % ep->ep.maxpacket) == 0)) { + + status = + _nbu2ss_readl(&preg->EP_REGS[ep->epnum-1].EP_STATUS); + + if ((status & EPn_IN_FULL) == 0) { + /*-----------------------------------------*/ + /* 0 Length Packet */ + req->zero = 0; + _nbu2ss_zero_len_pkt(udc, ep->epnum); + } + return; + } + } + + if (result <= 0) { + /*---------------------------------------------------------*/ + /* Complete */ + _nbu2ss_ep_done(ep, req, result); + } +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_epn_out_int( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req) +{ + int result; + + result = _nbu2ss_epn_out_transfer(udc, ep, req); + if (result <= 0) + _nbu2ss_ep_done(ep, req, result); + + return; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_epn_in_dma_int( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req) +{ + u32 mpkt; + u32 size; + struct usb_request *preq; + + preq = &req->req; + + if (req->dma_flag == FALSE) + return; + + preq->actual += req->div_len; + req->div_len = 0; + req->dma_flag = FALSE; + +#ifdef USE_DMA + _nbu2ss_dma_unmap_single(udc, ep, req, USB_DIR_IN); +#endif + + if (preq->actual != preq->length) { + _nbu2ss_epn_in_transfer(udc, ep, req); + } else { + mpkt = ep->ep.maxpacket; + size = preq->actual % mpkt; + if (size > 0) { + if (((preq->actual & 0x03) == 0) && (size < mpkt)) + _nbu2ss_ep_in_end(udc, ep->epnum, 0, 0); + } else { + _nbu2ss_epn_in_int(udc, ep, req); + } + } + + return; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_epn_out_dma_int( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + struct nbu2ss_req *req) +{ + int i; + u32 num; + u32 dmacnt, ep_dmacnt; + u32 mpkt; + PT_FC_REGS preg = udc->p_regs; + + num = ep->epnum - 1; + + if (req->req.actual == req->req.length) { + if ((req->req.length % ep->ep.maxpacket) + && (req->zero == 0)) { + req->div_len = 0; + req->dma_flag = FALSE; + _nbu2ss_ep_done(ep, req, 0); + return; + } + } + + ep_dmacnt = _nbu2ss_readl(&preg->EP_REGS[num].EP_LEN_DCNT) + & EPn_DMACNT; + ep_dmacnt >>= 16; + + for (i = 0; i < EPC_PLL_LOCK_COUNT; i++) { + dmacnt = _nbu2ss_readl(&preg->EP_DCR[num].EP_DCR1) + & DCR1_EPn_DMACNT; + dmacnt >>= 16; + if (ep_dmacnt == dmacnt) + break; + } + + _nbu2ss_bitclr(&preg->EP_DCR[num].EP_DCR1, DCR1_EPn_REQEN); + + if (dmacnt != 0) { + mpkt = ep->ep.maxpacket; + if ((req->div_len % mpkt) == 0) + req->div_len -= mpkt * dmacnt; + } + + if ((req->req.actual % ep->ep.maxpacket) > 0) { + if (req->req.actual == req->div_len) { + req->div_len = 0; + req->dma_flag = FALSE; + _nbu2ss_ep_done(ep, req, 0); + return; + } + } + + req->req.actual += req->div_len; + req->div_len = 0; + req->dma_flag = FALSE; + + _nbu2ss_epn_out_int(udc, ep, req); +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_epn_int(struct nbu2ss_udc *udc, u32 epnum) +{ + u32 num; + u32 status; + + struct nbu2ss_req *req; + struct nbu2ss_ep *ep = &udc->ep[epnum]; + + num = epnum - 1; + + /* Interrupt Status */ + status = _nbu2ss_readl(&udc->p_regs->EP_REGS[num].EP_STATUS); + + /* Interrupt Clear */ + _nbu2ss_writel(&udc->p_regs->EP_REGS[num].EP_STATUS, ~(u32)status); + + if (list_empty(&ep->queue)) + req = NULL; + else + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + + if (req == NULL) { + /* pr_warning("=== %s(%d) req == NULL\n", __func__, epnum); */ + return; + } + + if (status & EPn_OUT_END_INT) { + status &= ~EPn_OUT_INT; + _nbu2ss_epn_out_dma_int(udc, ep, req); + } + + if (status & EPn_OUT_INT) + _nbu2ss_epn_out_int(udc, ep, req); + + if (status & EPn_IN_END_INT) { + status &= ~EPn_IN_INT; + _nbu2ss_epn_in_dma_int(udc, ep, req); + } + + if (status & EPn_IN_INT) + _nbu2ss_epn_in_int(udc, ep, req); +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_ep_int(struct nbu2ss_udc *udc, u32 epnum) +{ + if (epnum == 0) + _nbu2ss_ep0_int(udc); + else + _nbu2ss_epn_int(udc, epnum); +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_ep0_enable(struct nbu2ss_udc *udc) +{ + _nbu2ss_bitset(&udc->p_regs->EP0_CONTROL, (EP0_AUTO | EP0_BCLR)); + _nbu2ss_writel(&udc->p_regs->EP0_INT_ENA, EP0_INT_EN_BIT); + + return; +} + +#if 0 +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_ep0_disable(struct nbu2ss_udc *udc) +{ + _nbu2ss_bitclr(&udc->p_regs->EP0_INT_ENA, EP0_INT_EN_BIT); + + _nbu2ss_bitset(&udc->p_regs->EP0_CONTROL + , (EP0_BCLR | EP0_INAK | EP0_ONAK | EP0_BCLR)); + + _nbu2ss_bitclr(&udc->p_regs->EP0_CONTROL, EP0_AUTO); + + return; +} +#endif + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_nuke(struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + int status) +{ + struct nbu2ss_req *req; + + /* Endpoint Disable */ + _nbu2ss_epn_exit(udc, ep); + + /* DMA Disable */ + _nbu2ss_ep_dma_exit(udc, ep); + + if (list_empty(&ep->queue)) + return 0; + + /* called with irqs blocked */ + while (!list_empty(&ep->queue)) { + req = list_entry(ep->queue.next, struct nbu2ss_req, queue); + _nbu2ss_ep_done(ep, req, status); + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_quiesce(struct nbu2ss_udc *udc) +{ + struct nbu2ss_ep *ep; + + udc->gadget.speed = USB_SPEED_UNKNOWN; + + _nbu2ss_nuke(udc, &udc->ep[0], -ESHUTDOWN); + + /* Endpoint n */ + list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { + _nbu2ss_nuke(udc, ep, -ESHUTDOWN); + } +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_pullup(struct nbu2ss_udc *udc, int is_on) +{ + u32 reg_dt; + + if (!udc) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + if (udc->vbus_active == 0) + return -ESHUTDOWN; + + if (is_on) { + /* D+ Pullup */ +/* INFO(" --- D+ Pullup\n"); */ + + if (udc->driver) { + reg_dt = (_nbu2ss_readl(&udc->p_regs->USB_CONTROL) + | PUE2) & ~(u32)CONNECTB; + + _nbu2ss_writel(&udc->p_regs->USB_CONTROL, reg_dt); + } + + } else { + /* D+ Pulldown */ +/* INFO(" --- D+ Pulldown\n"); */ + + reg_dt = (_nbu2ss_readl(&udc->p_regs->USB_CONTROL) | CONNECTB) + & ~(u32)PUE2; + + _nbu2ss_writel(&udc->p_regs->USB_CONTROL, reg_dt); + udc->gadget.speed = USB_SPEED_UNKNOWN; + } + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_fifo_flush(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep) +{ + PT_FC_REGS p = udc->p_regs; + + if (udc->vbus_active == 0) + return; + + if (ep->epnum == 0) { + /* EP0 */ + _nbu2ss_bitset(&p->EP0_CONTROL, EP0_BCLR); + + } else { + /* EPn */ + _nbu2ss_ep_dma_abort(udc, ep); + _nbu2ss_bitset(&p->EP_REGS[ep->epnum - 1].EP_CONTROL, EPn_BCLR); + } +} + +/*-------------------------------------------------------------------------*/ +static int _nbu2ss_enable_controller(struct nbu2ss_udc *udc) +{ + int waitcnt = 0; + + if (udc->udc_enabled) + return 0; + +#if 0 + emxx_open_clockgate(EMXX_CLK_USB1); + /* emxx_clkctrl_off(EMXX_CLKCTRL_USB1); */ + /* emxx_clkctrl_on(EMXX_CLKCTRL_USB1); */ + emxx_unreset_device(EMXX_RST_USB1); +#endif + /* + Reset + */ + _nbu2ss_bitset(&udc->p_regs->EPCTR, (DIRPD | EPC_RST)); + udelay(EPC_RST_DISABLE_TIME); /* 1us wait */ + + _nbu2ss_bitclr(&udc->p_regs->EPCTR, DIRPD); + mdelay(EPC_DIRPD_DISABLE_TIME); /* 1ms wait */ + + _nbu2ss_bitclr(&udc->p_regs->EPCTR, EPC_RST); + + _nbu2ss_writel(&udc->p_regs->AHBSCTR, WAIT_MODE); + +#if 0 + /* DMA Mode Setting */ + if ((system_rev & EMXX_REV_MASK) == EMXX_REV_ES1) { + _nbu2ss_bitset(&udc->p_regs->AHBMCTR, BURST_TYPE); + _nbu2ss_bitclr(&udc->p_regs->AHBMCTR, HTRANS_MODE); + } else +#endif + _nbu2ss_writel(&udc->p_regs->AHBMCTR, + HBUSREQ_MODE | HTRANS_MODE | WBURST_TYPE); + + while (!(_nbu2ss_readl(&udc->p_regs->EPCTR) & PLL_LOCK)) { + waitcnt++; + udelay(1); /* 1us wait */ + if (waitcnt == EPC_PLL_LOCK_COUNT) { + ERR("*** Reset Cancel failed\n"); + return -EINVAL; + } + }; + +#if 0 + if ((system_rev & EMXX_REV_MASK) < EMXX_REV_ES3) +#endif + _nbu2ss_bitset(&udc->p_regs->UTMI_CHARACTER_1, USB_SQUSET); + + _nbu2ss_bitset(&udc->p_regs->USB_CONTROL, (INT_SEL | SOF_RCV)); + + /* EP0 */ + _nbu2ss_ep0_enable(udc); + + /* USB Interrupt Enable */ + _nbu2ss_bitset(&udc->p_regs->USB_INT_ENA, USB_INT_EN_BIT); + + udc->udc_enabled = TRUE; + + return 0; +} + + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_reset_controller(struct nbu2ss_udc *udc) +{ + _nbu2ss_bitset(&udc->p_regs->EPCTR, EPC_RST); + _nbu2ss_bitclr(&udc->p_regs->EPCTR, EPC_RST); +} + +/*-------------------------------------------------------------------------*/ +static void _nbu2ss_disable_controller(struct nbu2ss_udc *udc) +{ + if (udc->udc_enabled) { + udc->udc_enabled = FALSE; + _nbu2ss_reset_controller(udc); + _nbu2ss_bitset(&udc->p_regs->EPCTR, (DIRPD | EPC_RST)); + } +#if 0 + emxx_reset_device(EMXX_RST_USB1); + /* emxx_clkctrl_on(EMXX_CLKCTRL_USB1); */ + emxx_close_clockgate(EMXX_CLK_USB1); +#endif +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_check_vbus(struct nbu2ss_udc *udc) +{ + int nret; + u32 reg_dt; + + /* chattering */ + mdelay(VBUS_CHATTERING_MDELAY); /* wait (ms) */ + + /* VBUS ON Check*/ + reg_dt = gpio_get_value(VBUS_VALUE); + if (reg_dt == 0) { + + udc->linux_suspended = 0; + + _nbu2ss_reset_controller(udc); + pr_info(" ----- VBUS OFF\n"); + + if (udc->vbus_active == 1) { + /* VBUS OFF */ + udc->vbus_active = 0; + if (udc->usb_suspended) { + udc->usb_suspended = 0; + /* _nbu2ss_reset_controller(udc); */ + } + udc->devstate = USB_STATE_NOTATTACHED; + + _nbu2ss_quiesce(udc); + if (udc->driver) { + spin_unlock(&udc->lock); + udc->driver->disconnect(&udc->gadget); + spin_lock(&udc->lock); + } + + _nbu2ss_disable_controller(udc); + } + } else { + mdelay(5); /* wait (5ms) */ + reg_dt = gpio_get_value(VBUS_VALUE); + if (reg_dt == 0) + return; + + pr_info(" ----- VBUS ON\n"); + + if (udc->linux_suspended) + return; + + if (udc->vbus_active == 0) { + /* VBUS ON */ + udc->vbus_active = 1; + udc->devstate = USB_STATE_POWERED; + + nret = _nbu2ss_enable_controller(udc); + if (nret < 0) { + _nbu2ss_disable_controller(udc); + udc->vbus_active = 0; + return; + } + + _nbu2ss_pullup(udc, 1); + +#ifdef UDC_DEBUG_DUMP + _nbu2ss_dump_register(udc); +#endif /* UDC_DEBUG_DUMP */ + + } else { + if (udc->devstate == USB_STATE_POWERED) + _nbu2ss_pullup(udc, 1); + } + } + + return; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_int_bus_reset(struct nbu2ss_udc *udc) +{ + udc->devstate = USB_STATE_DEFAULT; + udc->remote_wakeup = 0; + + _nbu2ss_quiesce(udc); + + udc->ep0state = EP0_IDLE; +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_int_usb_resume(struct nbu2ss_udc *udc) +{ + if (udc->usb_suspended == 1) { + udc->usb_suspended = 0; + if (udc->driver && udc->driver->resume) { + spin_unlock(&udc->lock); + udc->driver->resume(&udc->gadget); + spin_lock(&udc->lock); + } + } +} + +/*-------------------------------------------------------------------------*/ +static inline void _nbu2ss_int_usb_suspend(struct nbu2ss_udc *udc) +{ + u32 reg_dt; + + if (udc->usb_suspended == 0) { + reg_dt = gpio_get_value(VBUS_VALUE); + + if (reg_dt == 0) + return; + + udc->usb_suspended = 1; + if (udc->driver && udc->driver->suspend) { + spin_unlock(&udc->lock); + udc->driver->suspend(&udc->gadget); + spin_lock(&udc->lock); + } + + _nbu2ss_bitset(&udc->p_regs->USB_CONTROL, SUSPEND); + } +} + +/*-------------------------------------------------------------------------*/ +/* VBUS (GPIO153) Interrupt */ +static irqreturn_t _nbu2ss_vbus_irq(int irq, void *_udc) +{ + struct nbu2ss_udc *udc = (struct nbu2ss_udc *)_udc; + + spin_lock(&udc->lock); + _nbu2ss_check_vbus(udc); + spin_unlock(&udc->lock); + + return IRQ_HANDLED; +} + +/*-------------------------------------------------------------------------*/ +/* Interrupt (udc) */ +static irqreturn_t _nbu2ss_udc_irq(int irq, void *_udc) +{ + u8 suspend_flag = 0; + u32 status; + u32 epnum, int_bit; + + struct nbu2ss_udc *udc = (struct nbu2ss_udc *)_udc; + PT_FC_REGS preg = udc->p_regs; + + if (gpio_get_value(VBUS_VALUE) == 0) { + _nbu2ss_writel(&preg->USB_INT_STA, ~USB_INT_STA_RW); + _nbu2ss_writel(&preg->USB_INT_ENA, 0); + return IRQ_HANDLED; + } + + spin_lock(&udc->lock); + + for (;;) { + if (gpio_get_value(VBUS_VALUE) == 0) { + _nbu2ss_writel(&preg->USB_INT_STA, ~USB_INT_STA_RW); + _nbu2ss_writel(&preg->USB_INT_ENA, 0); + status = 0; + } else + status = _nbu2ss_readl(&preg->USB_INT_STA); + + if (status == 0) + break; + + _nbu2ss_writel(&preg->USB_INT_STA, ~(status & USB_INT_STA_RW)); + + if (status & USB_RST_INT) { + /* USB Reset */ + _nbu2ss_int_bus_reset(udc); + } + + if (status & RSUM_INT) { + /* Resume */ + _nbu2ss_int_usb_resume(udc); + } + + if (status & SPND_INT) { + /* Suspend */ + suspend_flag = 1; + } + + if (status & EPn_INT) { + /* EP INT */ + int_bit = status >> 8; + + for (epnum = 0; epnum < NUM_ENDPOINTS; epnum++) { + + if (0x01 & int_bit) + _nbu2ss_ep_int(udc, epnum); + + int_bit >>= 1; + + if (int_bit == 0) + break; + } + } + } + + if (suspend_flag) + _nbu2ss_int_usb_suspend(udc); + + spin_unlock(&udc->lock); + + return IRQ_HANDLED; +} + +/*-------------------------------------------------------------------------*/ +/* usb_ep_ops */ +static int nbu2ss_ep_enable( + struct usb_ep *_ep, + const struct usb_endpoint_descriptor *desc) +{ + u8 ep_type; + unsigned long flags; + + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + + if ((_ep == NULL) || (desc == NULL)) { + ERR(" *** %s, bad param\n", __func__); + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if ((ep == NULL) || (ep->udc == NULL)) { + ERR(" *** %s, ep == NULL !!\n", __func__); + return -EINVAL; + } + + ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; + if ((ep_type == USB_ENDPOINT_XFER_CONTROL) + || (ep_type == USB_ENDPOINT_XFER_ISOC)) { + + ERR(" *** %s, bat bmAttributes\n", __func__); + return -EINVAL; + } + + udc = ep->udc; + if (udc->vbus_active == 0) + return -ESHUTDOWN; + + if ((udc->driver == NULL) + || (udc->gadget.speed == USB_SPEED_UNKNOWN)) { + + ERR(" *** %s, udc !!\n", __func__); + return -ESHUTDOWN; + } + + spin_lock_irqsave(&udc->lock, flags); + + ep->desc = desc; + ep->epnum = desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; + ep->direct = desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK; + ep->ep_type = ep_type; + ep->wedged = 0; + ep->halted = FALSE; + ep->stalled = FALSE; + + ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize); + + /* DMA setting */ + _nbu2ss_ep_dma_init(udc, ep); + + /* Endpoint setting */ + _nbu2ss_ep_init(udc, ep); + + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_ep_disable(struct usb_ep *_ep) +{ + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + unsigned long flags; + + if (_ep == NULL) { + ERR(" *** %s, bad param\n", __func__); + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if ((ep == NULL) || (ep->udc == NULL)) { + ERR(" *** %s, ep == NULL !!\n", __func__); + return -EINVAL; + } + + udc = ep->udc; + if (udc->vbus_active == 0) + return -ESHUTDOWN; + + spin_lock_irqsave(&udc->lock, flags); + _nbu2ss_nuke(udc, ep, -EINPROGRESS); /* dequeue request */ + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static struct usb_request *nbu2ss_ep_alloc_request( + struct usb_ep *ep, + gfp_t gfp_flags) +{ + struct nbu2ss_req *req; + + req = kzalloc(sizeof(*req), gfp_flags); + if (!req) + return 0; + +#ifdef USE_DMA + req->req.dma = DMA_ADDR_INVALID; +#endif + INIT_LIST_HEAD(&req->queue); + + return &req->req; +} + +/*-------------------------------------------------------------------------*/ +static void nbu2ss_ep_free_request( + struct usb_ep *_ep, + struct usb_request *_req) +{ + struct nbu2ss_req *req; + + if (_req != NULL) { + req = container_of(_req, struct nbu2ss_req, req); + + if (req != NULL) + kfree(req); + } +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_ep_queue( + struct usb_ep *_ep, + struct usb_request *_req, + gfp_t gfp_flags) +{ + struct nbu2ss_req *req; + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + unsigned long flags; + bool bflag; + int result = -EINVAL; + + /* catch various bogus parameters */ + if ((_ep == NULL) || (_req == NULL)) { + if (_ep == NULL) + ERR("*** %s --- _ep == NULL\n", __func__); + + if (_req == NULL) + ERR("*** %s --- _req == NULL\n", __func__); + + return -EINVAL; + } + + req = container_of(_req, struct nbu2ss_req, req); + if (unlikely + (!_req->complete || !_req->buf + || !list_empty(&req->queue))) { + + if (!_req->complete) + ERR("*** %s --- !_req->complete\n", __func__); + + if (!_req->buf) + ERR("*** %s --- !_req->buf\n", __func__); + + if (!list_empty(&req->queue)) + ERR("*** %s --- !list_empty(&req->queue)\n", __func__); + + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + udc = ep->udc; + +/* INFO("=== %s(ep%d), zero=%d\n", __func__, ep->epnum, _req->zero); */ + + if (udc->vbus_active == 0) { + pr_info("Can't ep_queue (VBUS OFF)\n"); + return -ESHUTDOWN; + } + + if (unlikely(!udc->driver)) { + ERR("%s, bogus device state %p\n", __func__, udc->driver); + return -ESHUTDOWN; + } + + spin_lock_irqsave(&udc->lock, flags); + +#ifdef USE_DMA + if ((u32)req->req.buf & 0x3) + req->unaligned = TRUE; + else + req->unaligned = FALSE; + + if (req->unaligned) { + if (ep->virt_buf == NULL) + ep->virt_buf = (u8 *)dma_alloc_coherent( + NULL, PAGE_SIZE, + &ep->phys_buf, GFP_KERNEL | GFP_DMA); + if (ep->epnum > 0) { + if (ep->direct == USB_DIR_IN) + memcpy(ep->virt_buf, req->req.buf, + req->req.length); + } + } + + if ((ep->epnum > 0) && (ep->direct == USB_DIR_OUT) && + (req->req.dma != 0)) + _nbu2ss_dma_map_single(udc, ep, req, USB_DIR_OUT); +#endif + + _req->status = -EINPROGRESS; + _req->actual = 0; + + bflag = list_empty(&ep->queue); + list_add_tail(&req->queue, &ep->queue); + + if ((bflag != FALSE) && (ep->stalled == FALSE)) { + + result = _nbu2ss_start_transfer(udc, ep, req, FALSE); + if (result < 0) { + ERR(" *** %s, result = %d\n", __func__, result); + list_del(&req->queue); + } else if ((ep->epnum > 0) && (ep->direct == USB_DIR_OUT)) { +#ifdef USE_DMA + if (req->req.length < 4 && + req->req.length == req->req.actual) +#else + if (req->req.length == req->req.actual) +#endif + _nbu2ss_ep_done(ep, req, result); + } + } + + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_ep_dequeue( + struct usb_ep *_ep, + struct usb_request *_req) +{ + struct nbu2ss_req *req; + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + unsigned long flags; + + /*INFO("=== %s()\n", __func__);*/ + + /* catch various bogus parameters */ + if ((_ep == NULL) || (_req == NULL)) { + /* ERR("%s, bad param(1)\n", __func__); */ + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if (!ep) { + ERR("%s, ep == NULL !!\n", __func__); + return -EINVAL; + } + + udc = ep->udc; + if (udc == NULL) + return -EINVAL; + + spin_lock_irqsave(&udc->lock, flags); + + /* make sure it's actually queued on this endpoint */ + list_for_each_entry(req, &ep->queue, queue) { + if (&req->req == _req) + break; + } + if (&req->req != _req) { + spin_unlock_irqrestore(&udc->lock, flags); + pr_debug("%s no queue(EINVAL)\n", __func__); + return -EINVAL; + } + + _nbu2ss_ep_done(ep, req, -ECONNRESET); + + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_ep_set_halt(struct usb_ep *_ep, int value) +{ + u8 ep_adrs; + unsigned long flags; + + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + +/* INFO("=== %s()\n", __func__); */ + + if (!_ep) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if (!ep) { + ERR("%s, bad ep\n", __func__); + return -EINVAL; + } + + udc = ep->udc; + if (!udc) { + ERR(" *** %s, bad udc\n", __func__); + return -EINVAL; + } + + spin_lock_irqsave(&udc->lock, flags); + + ep_adrs = ep->epnum | ep->direct; + if (value == 0) { + _nbu2ss_set_endpoint_stall(udc, ep_adrs, value); + ep->stalled = FALSE; + } else { + if (list_empty(&ep->queue)) + _nbu2ss_epn_set_stall(udc, ep); + else + ep->stalled = TRUE; + } + + if (value == 0) + ep->wedged = 0; + + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +static int nbu2ss_ep_set_wedge(struct usb_ep *_ep) +{ + return nbu2ss_ep_set_halt(_ep, 1); +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_ep_fifo_status(struct usb_ep *_ep) +{ + u32 data; + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + unsigned long flags; + PT_FC_REGS preg; + +/* INFO("=== %s()\n", __func__); */ + + if (!_ep) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if (!ep) { + ERR("%s, bad ep\n", __func__); + return -EINVAL; + } + + udc = ep->udc; + if (!udc) { + ERR("%s, bad udc\n", __func__); + return -EINVAL; + } + + preg = udc->p_regs; + + data = gpio_get_value(VBUS_VALUE); + if (data == 0) + return -EINVAL; + + spin_lock_irqsave(&udc->lock, flags); + + if (ep->epnum == 0) { + data = _nbu2ss_readl(&preg->EP0_LENGTH) & EP0_LDATA; + + } else { + data = _nbu2ss_readl(&preg->EP_REGS[ep->epnum-1].EP_LEN_DCNT) + & EPn_LDATA; + } + + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static void nbu2ss_ep_fifo_flush(struct usb_ep *_ep) +{ + u32 data; + struct nbu2ss_ep *ep; + struct nbu2ss_udc *udc; + unsigned long flags; + +/* INFO("=== %s()\n", __func__); */ + + if (!_ep) { + ERR("%s, bad param\n", __func__); + return; + } + + ep = container_of(_ep, struct nbu2ss_ep, ep); + if (!_ep) { + ERR("%s, bad ep\n", __func__); + return; + } + + udc = ep->udc; + if (!udc) { + ERR("%s, bad udc\n", __func__); + return; + } + + data = gpio_get_value(VBUS_VALUE); + if (data == 0) + return; + + spin_lock_irqsave(&udc->lock, flags); + _nbu2ss_fifo_flush(udc, ep); + spin_unlock_irqrestore(&udc->lock, flags); +} + +/*-------------------------------------------------------------------------*/ +static struct usb_ep_ops nbu2ss_ep_ops = { + .enable = nbu2ss_ep_enable, + .disable = nbu2ss_ep_disable, + + .alloc_request = nbu2ss_ep_alloc_request, + .free_request = nbu2ss_ep_free_request, + + .queue = nbu2ss_ep_queue, + .dequeue = nbu2ss_ep_dequeue, + + .set_halt = nbu2ss_ep_set_halt, + .set_wedge = nbu2ss_ep_set_wedge, + + .fifo_status = nbu2ss_ep_fifo_status, + .fifo_flush = nbu2ss_ep_fifo_flush, +}; + + +/*-------------------------------------------------------------------------*/ +/* usb_gadget_ops */ + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_get_frame(struct usb_gadget *pgadget) +{ + u32 data; + struct nbu2ss_udc *udc; + +/* INFO("=== %s()\n", __func__); */ + + if (pgadget == NULL) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + udc = container_of(pgadget, struct nbu2ss_udc, gadget); + if (udc == NULL) { + ERR("%s, udc == NULL\n", __func__); + return -EINVAL; + } + + data = gpio_get_value(VBUS_VALUE); + if (data == 0) + return -EINVAL; + + data = _nbu2ss_readl(&udc->p_regs->USB_ADDRESS) & FRAME; + + return data; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_wakeup(struct usb_gadget *pgadget) +{ + int i; + u32 data; + + struct nbu2ss_udc *udc; + +/* INFO("=== %s()\n", __func__); */ + + if (pgadget == NULL) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + udc = container_of(pgadget, struct nbu2ss_udc, gadget); + if (udc == NULL) { + ERR("%s, udc == NULL\n", __func__); + return -EINVAL; + } + + data = gpio_get_value(VBUS_VALUE); + if (data == 0) { + pr_warning("VBUS LEVEL = %d\n", data); + return -EINVAL; + } + + _nbu2ss_bitset(&udc->p_regs->EPCTR, PLL_RESUME); + + for (i = 0; i < EPC_PLL_LOCK_COUNT; i++) { + data = _nbu2ss_readl(&udc->p_regs->EPCTR); + + if (data & PLL_LOCK) + break; + } + + _nbu2ss_bitclr(&udc->p_regs->EPCTR, PLL_RESUME); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_set_selfpowered(struct usb_gadget *pgadget, + int is_selfpowered) +{ + struct nbu2ss_udc *udc; + unsigned long flags; + +/* INFO("=== %s()\n", __func__); */ + + if (pgadget == NULL) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + udc = container_of(pgadget, struct nbu2ss_udc, gadget); + + spin_lock_irqsave(&udc->lock, flags); + udc->self_powered = (is_selfpowered != 0); + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_vbus_session(struct usb_gadget *pgadget, int is_active) +{ +/* INFO("=== %s()\n", __func__); */ + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_vbus_draw(struct usb_gadget *pgadget, unsigned mA) +{ + struct nbu2ss_udc *udc; + unsigned long flags; + +/* INFO("=== %s()\n", __func__); */ + + if (pgadget == NULL) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + udc = container_of(pgadget, struct nbu2ss_udc, gadget); + + spin_lock_irqsave(&udc->lock, flags); + udc->mA = mA; + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_pullup(struct usb_gadget *pgadget, int is_on) +{ + struct nbu2ss_udc *udc; + unsigned long flags; + +/* INFO("=== %s()\n", __func__); */ + + if (pgadget == NULL) { + ERR("%s, bad param\n", __func__); + return -EINVAL; + } + + udc = container_of(pgadget, struct nbu2ss_udc, gadget); + + if (udc->driver == NULL) { + pr_warning("%s, Not Regist Driver\n", __func__); + return -EINVAL; + } + + if (udc->vbus_active == 0) + return -ESHUTDOWN; + + spin_lock_irqsave(&udc->lock, flags); + _nbu2ss_pullup(udc, is_on); + spin_unlock_irqrestore(&udc->lock, flags); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_gad_ioctl( + struct usb_gadget *pgadget, + unsigned code, + unsigned long param) +{ +/* INFO("=== %s()\n", __func__); */ + return 0; +} + + +static const struct usb_gadget_ops nbu2ss_gadget_ops = { + .get_frame = nbu2ss_gad_get_frame, + .wakeup = nbu2ss_gad_wakeup, + .set_selfpowered = nbu2ss_gad_set_selfpowered, + .vbus_session = nbu2ss_gad_vbus_session, + .vbus_draw = nbu2ss_gad_vbus_draw, + .pullup = nbu2ss_gad_pullup, + .ioctl = nbu2ss_gad_ioctl, +}; + +static char g_ep0_name[] = "ep0"; +static char g_ep1_name[] = "ep1-bulk"; +static char g_ep2_name[] = "ep2-bulk"; +static char g_ep3_name[] = "ep3in-int"; +static char g_ep4_name[] = "ep4-iso"; +static char g_ep5_name[] = "ep5-iso"; +static char g_ep6_name[] = "ep6-bulk"; +static char g_ep7_name[] = "ep7-bulk"; +static char g_ep8_name[] = "ep8in-int"; +static char g_ep9_name[] = "ep9-iso"; +static char g_epa_name[] = "epa-iso"; +static char g_epb_name[] = "epb-bulk"; +static char g_epc_name[] = "epc-nulk"; +static char g_epd_name[] = "epdin-int"; + +static char *gp_ep_name[NUM_ENDPOINTS] = { + g_ep0_name, + g_ep1_name, + g_ep2_name, + g_ep3_name, + g_ep4_name, + g_ep5_name, + g_ep6_name, + g_ep7_name, + g_ep8_name, + g_ep9_name, + g_epa_name, + g_epb_name, + g_epc_name, + g_epd_name, +}; + +/*-------------------------------------------------------------------------*/ +static void __init nbu2ss_drv_set_ep_info( + struct nbu2ss_udc *udc, + struct nbu2ss_ep *ep, + u8 *name) +{ + ep->udc = udc; + ep->desc = NULL; + + ep->ep.driver_data = NULL; + ep->ep.name = name; + ep->ep.ops = &nbu2ss_ep_ops; + + if (isdigit(name[2])) { + + long num; + int res; + char tempbuf[2]; + + tempbuf[0] = name[2]; + tempbuf[1] = '\0'; + res = strict_strtol(tempbuf, 16, &num); + + if (num == 0) + ep->ep.maxpacket = EP0_PACKETSIZE; + else + ep->ep.maxpacket = EP_PACKETSIZE; + + } else { + ep->ep.maxpacket = EP_PACKETSIZE; + } + + list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); + INIT_LIST_HEAD(&ep->queue); +} + +/*-------------------------------------------------------------------------*/ +static void __init nbu2ss_drv_ep_init(struct nbu2ss_udc *udc) +{ + int i; + + INIT_LIST_HEAD(&udc->gadget.ep_list); + udc->gadget.ep0 = &udc->ep[0].ep; + + + for (i = 0; i < NUM_ENDPOINTS; i++) + nbu2ss_drv_set_ep_info(udc, &udc->ep[i], gp_ep_name[i]); + + list_del_init(&udc->ep[0].ep.ep_list); +} + +/*-------------------------------------------------------------------------*/ +/* platform_driver */ +static int __init nbu2ss_drv_contest_init( + struct platform_device *pdev, + struct nbu2ss_udc *udc) +{ + spin_lock_init(&udc->lock); + udc->dev = &pdev->dev; + + udc->self_powered = 1; + udc->devstate = USB_STATE_NOTATTACHED; + udc->pdev = pdev; + udc->mA = 0; + + udc->pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); + + /* init Endpoint */ + nbu2ss_drv_ep_init(udc); + + /* init Gadget */ + udc->gadget.ops = &nbu2ss_gadget_ops; + udc->gadget.ep0 = &udc->ep[0].ep; + udc->gadget.speed = USB_SPEED_UNKNOWN; + udc->gadget.name = driver_name; + //udc->gadget.is_dualspeed = 1; + + device_initialize(&udc->gadget.dev); + + dev_set_name(&udc->gadget.dev, "gadget"); + udc->gadget.dev.parent = &pdev->dev; + udc->gadget.dev.dma_mask = pdev->dev.dma_mask; + + return 0; +} + +/* + * probe - binds to the platform device + */ +static int nbu2ss_drv_probe(struct platform_device *pdev) +{ + int status = -ENODEV; + struct nbu2ss_udc *udc; + + udc = &udc_controller; + memset(udc, 0, sizeof(struct nbu2ss_udc)); + + platform_set_drvdata(pdev, udc); + + /* IO Memory Region */ + if (!request_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE + , driver_name)) { + + ERR("request_mem_region failed\n"); + return -EBUSY; + } + + /* IO Memory */ + udc->p_regs = (PT_FC_REGS)ioremap(USB_BASE_ADDRESS, USB_BASE_SIZE); + if (!udc->p_regs) { + ERR("request_io_mem failed\n"); + goto cleanup3; + } + + /* USB Function Controller Interrupt */ + status = request_irq(USB_UDC_IRQ_1, + _nbu2ss_udc_irq, + IRQF_DISABLED, + driver_name, + udc); + + if (status != 0) { + ERR("request_irq(USB_UDC_IRQ_1) failed\n"); + goto cleanup2; + } + + /* Driver Initialization */ + status = nbu2ss_drv_contest_init(pdev, udc); + if (status < 0) { + /* Error */ + goto cleanup1; + } + + /* VBUS Interrupt */ + irq_set_irq_type(INT_VBUS, IRQ_TYPE_EDGE_BOTH); + status = request_irq(INT_VBUS, + _nbu2ss_vbus_irq, + IRQF_SHARED, + driver_name, + udc); + + if (status != 0) { + ERR("request_irq(INT_VBUS) failed\n"); + goto cleanup1; + } + + return status; + +cleanup1: + /* Interrupt Handler - Release */ + free_irq(USB_UDC_IRQ_1, udc); + +cleanup2: + /* IO Memory - Release */ + if (udc->p_regs) + iounmap(udc->p_regs); + +cleanup3: + /* IO Memory Region - Release */ + release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE); + + return status; +} + +/*-------------------------------------------------------------------------*/ +static void nbu2ss_drv_shutdown(struct platform_device *pdev) +{ + struct nbu2ss_udc *udc; + + udc = platform_get_drvdata(pdev); + if (udc == NULL) + return; + + _nbu2ss_disable_controller(udc); +} + +/*-------------------------------------------------------------------------*/ +static int __exit nbu2ss_drv_remove(struct platform_device *pdev) +{ + struct nbu2ss_udc *udc; + struct nbu2ss_ep *ep; + int i; + + udc = &udc_controller; + + for (i = 0; i < NUM_ENDPOINTS; i++) { + ep = &udc->ep[i]; + if (ep->virt_buf) + dma_free_coherent(NULL, PAGE_SIZE, + (void *)ep->virt_buf, ep->phys_buf); + } + + /* Interrupt Handler - Release */ + free_irq(USB_UDC_IRQ_1, udc); + + /* Interrupt Handler - Release */ + free_irq(INT_VBUS, udc); + + /* IO Memory - Release */ + if (udc->p_regs) + iounmap(udc->p_regs); + + /* IO Memory Region - Release */ + release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_drv_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct nbu2ss_udc *udc; + + udc = platform_get_drvdata(pdev); + if (udc == NULL) + return 0; + + if (udc->vbus_active) { + udc->vbus_active = 0; + udc->devstate = USB_STATE_NOTATTACHED; + udc->linux_suspended = 1; + + if (udc->usb_suspended) { + udc->usb_suspended = 0; + _nbu2ss_reset_controller(udc); + } + + _nbu2ss_quiesce(udc); + } + _nbu2ss_disable_controller(udc); + + return 0; +} + +/*-------------------------------------------------------------------------*/ +static int nbu2ss_drv_resume(struct platform_device *pdev) +{ + u32 data; + struct nbu2ss_udc *udc; + + udc = platform_get_drvdata(pdev); + if (udc == NULL) + return 0; + + data = gpio_get_value(VBUS_VALUE); + if (data) { + udc->vbus_active = 1; + udc->devstate = USB_STATE_POWERED; + _nbu2ss_enable_controller(udc); + _nbu2ss_pullup(udc, 1); + } + + udc->linux_suspended = 0; + + return 0; +} + + +static struct platform_driver udc_driver = { + .probe = nbu2ss_drv_probe, + .shutdown = nbu2ss_drv_shutdown, + .remove = __exit_p(nbu2ss_drv_remove), + .suspend = nbu2ss_drv_suspend, + .resume = nbu2ss_drv_resume, + .driver = { + .owner = THIS_MODULE, + .name = driver_name, + }, +}; + + + +/*-------------------------------------------------------------------------*/ +/* module */ + +/*-------------------------------------------------------------------------*/ +static int __init udc_init(void) +{ + return platform_driver_register(&udc_driver); +} +module_init(udc_init); + +/*-------------------------------------------------------------------------*/ +static void __exit udc_exit(void) +{ + platform_driver_unregister(&udc_driver); +} +module_exit(udc_exit); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR("Renesas Electronics Corporation"); +MODULE_LICENSE("GPL"); + + diff --git a/drivers/staging/emxx_udc/emxx_udc.h b/drivers/staging/emxx_udc/emxx_udc.h new file mode 100644 index 000000000000..cc5a7d88048d --- /dev/null +++ b/drivers/staging/emxx_udc/emxx_udc.h @@ -0,0 +1,662 @@ +/* + * EMXX FCD (Function Controller Driver) for USB. + * + * Copyright (C) 2010 Renesas Electronics Corporation + * + * 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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. + */ + + + + +#ifndef _LINUX_EMXX_H +#define _LINUX_EMXX_H + + + +/*---------------------------------------------------------------------------*/ +/*----------------- Default undef */ +#if 0 +#define DEBUG +#define UDC_DEBUG_DUMP +#endif + +/* #define USE_INT_COUNT_OVER */ + +/*----------------- Default define */ +#define USE_DMA 1 +#define USE_SUSPEND_WAIT 1 + + + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + + +/*------------ Board dependence(Resource) */ +#define USB_BASE_ADDRESS EMXX_USBS1_BASE +#define USB_BASE_SIZE 0x2000 + +#define USB_UDC_IRQ_0 INT_USBF0 +#define USB_UDC_IRQ_1 INT_USBF1 +#define VBUS_VALUE GPIO_VBUS + +/* below hacked up for staging integration */ +#define GPIO_VBUS 0 /* GPIO_P153 on KZM9D */ +#define INT_VBUS 0 /* IRQ for GPIO_P153 */ +#define INT_USBF0 158 +#define INT_USBF1 159 +#define EMXX_USBS0_BASE 0xe2700000 +#define EMXX_USBS1_BASE 0xe2800000 + +/*------------ Board dependence(Wait) */ + +/* CHATTERING wait time ms */ +#define VBUS_CHATTERING_MDELAY 1 +/* DMA Abort wait time ms */ +#define DMA_DISABLE_TIME 10 + + + +/*------------ Controller dependence */ +#define NUM_ENDPOINTS 14 /* Endpoint */ +#define REG_EP_NUM 15 /* Endpoint Register */ +#define DMA_MAX_COUNT 256 /* DMA Block */ + + + +#define EPC_RST_DISABLE_TIME 1 /* 1 usec */ +#define EPC_DIRPD_DISABLE_TIME 1 /* 1 msec */ +#define EPC_PLL_LOCK_COUNT 1000 /* 1000 */ +#define IN_DATA_EMPTY_COUNT 1000 /* 1000 */ + +#define CHATGER_TIME 700 /* 700msec */ +#define USB_SUSPEND_TIME 2000 /* 2 sec */ + + +/* U2F FLAG */ +#define U2F_ENABLE 1 +#define U2F_DISABLE 0 + + +/*------- BIT */ +#define BIT00 0x00000001 +#define BIT01 0x00000002 +#define BIT02 0x00000004 +#define BIT03 0x00000008 +#define BIT04 0x00000010 +#define BIT05 0x00000020 +#define BIT06 0x00000040 +#define BIT07 0x00000080 +#define BIT08 0x00000100 +#define BIT09 0x00000200 +#define BIT10 0x00000400 +#define BIT11 0x00000800 +#define BIT12 0x00001000 +#define BIT13 0x00002000 +#define BIT14 0x00004000 +#define BIT15 0x00008000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +#if 0 +/*------- (0x0000) USB Control Register */ +#define USBTESTMODE (BIT18+BIT17+BIT16) +#define TEST_J BIT16 +#define TEST_K BIT17 +#define TEST_SE0_NAK (BIT17+BIT16) +#define TEST_PACKET BIT18 +#endif +#define TEST_FORCE_ENABLE (BIT18+BIT16) + +#define INT_SEL BIT10 +#define CONSTFS BIT09 +#define SOF_RCV BIT08 +#define RSUM_IN BIT07 +#define SUSPEND BIT06 +#define CONF BIT05 +#define DEFAULT BIT04 +#define CONNECTB BIT03 +#define PUE2 BIT02 + +#define MAX_TEST_MODE_NUM 0x05 +#define TEST_MODE_SHIFT 16 + +/*------- (0x0004) USB Status Register */ +#define SPEED_MODE BIT06 +#define HIGH_SPEED BIT06 + +#define CONF BIT05 +#define DEFAULT BIT04 +#define USB_RST BIT03 +#define SPND_OUT BIT02 +#define RSUM_OUT BIT01 + +/*------- (0x0008) USB Address Register */ +#define USB_ADDR 0x007F0000 +#define SOF_STATUS BIT15 +#define UFRAME (BIT14+BIT13+BIT12) +#define FRAME 0x000007FF + +#define USB_ADRS_SHIFT 16 + +/*------- (0x000C) UTMI Characteristic 1 Register */ +#define SQUSET (BIT07+BIT06+BIT05+BIT04) + +#define USB_SQUSET (BIT06+BIT05+BIT04) + +/*------- (0x0010) TEST Control Register */ +#define FORCEHS BIT02 +#define CS_TESTMODEEN BIT01 +#define LOOPBACK BIT00 + +/*------- (0x0018) Setup Data 0 Register */ +/*------- (0x001C) Setup Data 1 Register */ + +/*------- (0x0020) USB Interrupt Status Register */ +#define EPn_INT 0x00FFFF00 +#define EP15_INT BIT23 +#define EP14_INT BIT22 +#define EP13_INT BIT21 +#define EP12_INT BIT20 +#define EP11_INT BIT19 +#define EP10_INT BIT18 +#define EP9_INT BIT17 +#define EP8_INT BIT16 +#define EP7_INT BIT15 +#define EP6_INT BIT14 +#define EP5_INT BIT13 +#define EP4_INT BIT12 +#define EP3_INT BIT11 +#define EP2_INT BIT10 +#define EP1_INT BIT09 +#define EP0_INT BIT08 +#define SPEED_MODE_INT BIT06 +#define SOF_ERROR_INT BIT05 +#define SOF_INT BIT04 +#define USB_RST_INT BIT03 +#define SPND_INT BIT02 +#define RSUM_INT BIT01 + +#define USB_INT_STA_RW 0x7E + +/*------- (0x0024) USB Interrupt Enable Register */ +#define EP15_0_EN 0x00FFFF00 +#define EP15_EN BIT23 +#define EP14_EN BIT22 +#define EP13_EN BIT21 +#define EP12_EN BIT20 +#define EP11_EN BIT19 +#define EP10_EN BIT18 +#define EP9_EN BIT17 +#define EP8_EN BIT16 +#define EP7_EN BIT15 +#define EP6_EN BIT14 +#define EP5_EN BIT13 +#define EP4_EN BIT12 +#define EP3_EN BIT11 +#define EP2_EN BIT10 +#define EP1_EN BIT09 +#define EP0_EN BIT08 +#define SPEED_MODE_EN BIT06 +#define SOF_ERROR_EN BIT05 +#define SOF_EN BIT04 +#define USB_RST_EN BIT03 +#define SPND_EN BIT02 +#define RSUM_EN BIT01 + +#define USB_INT_EN_BIT \ + (EP0_EN|SPEED_MODE_EN|USB_RST_EN|SPND_EN|RSUM_EN) + +/*------- (0x0028) EP0 Control Register */ +#define EP0_STGSEL BIT18 +#define EP0_OVERSEL BIT17 +#define EP0_AUTO BIT16 +#define EP0_PIDCLR BIT09 +#define EP0_BCLR BIT08 +#define EP0_DEND BIT07 +#define EP0_DW (BIT06+BIT05) +#define EP0_DW4 0 +#define EP0_DW3 (BIT06+BIT05) +#define EP0_DW2 BIT06 +#define EP0_DW1 BIT05 + +#define EP0_INAK_EN BIT04 +#define EP0_PERR_NAK_CLR BIT03 +#define EP0_STL BIT02 +#define EP0_INAK BIT01 +#define EP0_ONAK BIT00 + +/*------- (0x002C) EP0 Status Register */ +#define EP0_PID BIT18 +#define EP0_PERR_NAK BIT17 +#define EP0_PERR_NAK_INT BIT16 +#define EP0_OUT_NAK_INT BIT15 +#define EP0_OUT_NULL BIT14 +#define EP0_OUT_FULL BIT13 +#define EP0_OUT_EMPTY BIT12 +#define EP0_IN_NAK_INT BIT11 +#define EP0_IN_DATA BIT10 +#define EP0_IN_FULL BIT09 +#define EP0_IN_EMPTY BIT08 +#define EP0_OUT_NULL_INT BIT07 +#define EP0_OUT_OR_INT BIT06 +#define EP0_OUT_INT BIT05 +#define EP0_IN_INT BIT04 +#define EP0_STALL_INT BIT03 +#define STG_END_INT BIT02 +#define STG_START_INT BIT01 +#define SETUP_INT BIT00 + +#define EP0_STATUS_RW_BIT (BIT16|BIT15|BIT11|0xFF) + +/*------- (0x0030) EP0 Interrupt Enable Register */ +#define EP0_PERR_NAK_EN BIT16 +#define EP0_OUT_NAK_EN BIT15 + +#define EP0_IN_NAK_EN BIT11 + +#define EP0_OUT_NULL_EN BIT07 +#define EP0_OUT_OR_EN BIT06 +#define EP0_OUT_EN BIT05 +#define EP0_IN_EN BIT04 +#define EP0_STALL_EN BIT03 +#define STG_END_EN BIT02 +#define STG_START_EN BIT01 +#define SETUP_EN BIT00 + +#define EP0_INT_EN_BIT \ + (EP0_OUT_OR_EN|EP0_OUT_EN|EP0_IN_EN|STG_END_EN|SETUP_EN) + +/*------- (0x0034) EP0 Length Register */ +#define EP0_LDATA 0x0000007F + +/*------- (0x0038) EP0 Read Register */ +/*------- (0x003C) EP0 Write Register */ + +/*------- (0x0040:) EPn Control Register */ +#define EPn_EN BIT31 +#define EPn_BUF_TYPE BIT30 +#define EPn_BUF_SINGLE BIT30 + +#define EPn_DIR0 BIT26 +#define EPn_MODE (BIT25+BIT24) +#define EPn_BULK 0 +#define EPn_INTERRUPT BIT24 +#define EPn_ISO BIT25 + +#define EPn_OVERSEL BIT17 +#define EPn_AUTO BIT16 + +#define EPn_IPIDCLR BIT11 +#define EPn_OPIDCLR BIT10 +#define EPn_BCLR BIT09 +#define EPn_CBCLR BIT08 +#define EPn_DEND BIT07 +#define EPn_DW (BIT06+BIT05) +#define EPn_DW4 0 +#define EPn_DW3 (BIT06+BIT05) +#define EPn_DW2 BIT06 +#define EPn_DW1 BIT05 + +#define EPn_OSTL_EN BIT04 +#define EPn_ISTL BIT03 +#define EPn_OSTL BIT02 + +#define EPn_ONAK BIT00 + +/*------- (0x0044:) EPn Status Register */ +#define EPn_ISO_PIDERR BIT29 /* R */ +#define EPn_OPID BIT28 /* R */ +#define EPn_OUT_NOTKN BIT27 /* R */ +#define EPn_ISO_OR BIT26 /* R */ + +#define EPn_ISO_CRC BIT24 /* R */ +#define EPn_OUT_END_INT BIT23 /* RW */ +#define EPn_OUT_OR_INT BIT22 /* RW */ +#define EPn_OUT_NAK_ERR_INT BIT21 /* RW */ +#define EPn_OUT_STALL_INT BIT20 /* RW */ +#define EPn_OUT_INT BIT19 /* RW */ +#define EPn_OUT_NULL_INT BIT18 /* RW */ +#define EPn_OUT_FULL BIT17 /* R */ +#define EPn_OUT_EMPTY BIT16 /* R */ + +#define EPn_IPID BIT10 /* R */ +#define EPn_IN_NOTKN BIT09 /* R */ +#define EPn_ISO_UR BIT08 /* R */ +#define EPn_IN_END_INT BIT07 /* RW */ + +#define EPn_IN_NAK_ERR_INT BIT05 /* RW */ +#define EPn_IN_STALL_INT BIT04 /* RW */ +#define EPn_IN_INT BIT03 /* RW */ +#define EPn_IN_DATA BIT02 /* R */ +#define EPn_IN_FULL BIT01 /* R */ +#define EPn_IN_EMPTY BIT00 /* R */ + +#define EPn_INT_EN \ + (EPn_OUT_END_INT|EPn_OUT_INT|EPn_IN_END_INT|EPn_IN_INT) + +/*------- (0x0048:) EPn Interrupt Enable Register */ +#define EPn_OUT_END_EN BIT23 /* RW */ +#define EPn_OUT_OR_EN BIT22 /* RW */ +#define EPn_OUT_NAK_ERR_EN BIT21 /* RW */ +#define EPn_OUT_STALL_EN BIT20 /* RW */ +#define EPn_OUT_EN BIT19 /* RW */ +#define EPn_OUT_NULL_EN BIT18 /* RW */ + +#define EPn_IN_END_EN BIT07 /* RW */ + +#define EPn_IN_NAK_ERR_EN BIT05 /* RW */ +#define EPn_IN_STALL_EN BIT04 /* RW */ +#define EPn_IN_EN BIT03 /* RW */ + +/*------- (0x004C:) EPn Interrupt Enable Register */ +#define EPn_STOP_MODE BIT11 +#define EPn_DEND_SET BIT10 +#define EPn_BURST_SET BIT09 +#define EPn_STOP_SET BIT08 + +#define EPn_DMA_EN BIT04 + +#define EPn_DMAMODE0 BIT00 + +/*------- (0x0050:) EPn MaxPacket & BaseAddress Register */ +#define EPn_BASEAD 0x1FFF0000 +#define EPn_MPKT 0x000007FF + +/*------- (0x0054:) EPn Length & DMA Count Register */ +#define EPn_DMACNT 0x01FF0000 +#define EPn_LDATA 0x000007FF + +/*------- (0x0058:) EPn Read Register */ +/*------- (0x005C:) EPn Write Register */ + +/*------- (0x1000) AHBSCTR Register */ +#define WAIT_MODE BIT00 + +/*------- (0x1004) AHBMCTR Register */ +#define ARBITER_CTR BIT31 /* RW */ +#define MCYCLE_RST BIT12 /* RW */ + +#define ENDIAN_CTR (BIT09+BIT08) /* RW */ +#define ENDIAN_BYTE_SWAP BIT09 +#define ENDIAN_HALF_WORD_SWAP ENDIAN_CTR + +#define HBUSREQ_MODE BIT05 /* RW */ +#define HTRANS_MODE BIT04 /* RW */ + +#define WBURST_TYPE BIT02 /* RW */ +#define BURST_TYPE (BIT01+BIT00) /* RW */ +#define BURST_MAX_16 0 +#define BURST_MAX_8 BIT00 +#define BURST_MAX_4 BIT01 +#define BURST_SINGLE BURST_TYPE + +/*------- (0x1008) AHBBINT Register */ +#define DMA_ENDINT 0xFFFE0000 /* RW */ + +#define AHB_VBUS_INT BIT13 /* RW */ + +#define MBUS_ERRINT BIT06 /* RW */ + +#define SBUS_ERRINT0 BIT04 /* RW */ +#define ERR_MASTER 0x0000000F /* R */ + +/*------- (0x100C) AHBBINTEN Register */ +#define DMA_ENDINTEN 0xFFFE0000 /* RW */ + +#define VBUS_INTEN BIT13 /* RW */ + +#define MBUS_ERRINTEN BIT06 /* RW */ + +#define SBUS_ERRINT0EN BIT04 /* RW */ + +/*------- (0x1010) EPCTR Register */ +#define DIRPD BIT12 /* RW */ + +#define VBUS_LEVEL BIT08 /* R */ + +#define PLL_RESUME BIT05 /* RW */ +#define PLL_LOCK BIT04 /* R */ + +#ifdef CONFIG_MACH_EMGR +#define PLL_RST BIT02 /* RW */ +#endif + +#define EPC_RST BIT00 /* RW */ + +/*------- (0x1014) USBF_EPTEST Register */ +#define LINESTATE (BIT09+BIT08) /* R */ +#define DM_LEVEL BIT09 /* R */ +#define DP_LEVEL BIT08 /* R */ + +#define PHY_TST BIT01 /* RW */ +#define PHY_TSTCLK BIT00 /* RW */ + +/*------- (0x1020) USBSSVER Register */ +#define AHBB_VER 0x00FF0000 /* R */ +#define EPC_VER 0x0000FF00 /* R */ +#define SS_VER 0x000000FF /* R */ + +/*------- (0x1024) USBSSCONF Register */ +#define EP_AVAILABLE 0xFFFF0000 /* R */ +#define DMA_AVAILABLE 0x0000FFFF /* R */ + +/*------- (0x1110:) EPnDCR1 Register */ +#define DCR1_EPn_DMACNT 0x00FF0000 /* RW */ + +#define DCR1_EPn_DIR0 BIT01 /* RW */ +#define DCR1_EPn_REQEN BIT00 /* RW */ + +/*------- (0x1114:) EPnDCR2 Register */ +#define DCR2_EPn_LMPKT 0x07FF0000 /* RW */ + +#define DCR2_EPn_MPKT 0x000007FF /* RW */ + +/*------- (0x1118:) EPnTADR Register */ +#define EPn_TADR 0xFFFFFFFF /* RW */ + + + +/*===========================================================================*/ +/* Struct */ +/*------- T_EP_REGS */ +typedef struct _T_EP_REGS { + u32 EP_CONTROL; /* EP Control */ + u32 EP_STATUS; /* EP Status */ + u32 EP_INT_ENA; /* EP Interrupt Enable */ + u32 EP_DMA_CTRL; /* EP DMA Control */ + u32 EP_PCKT_ADRS; /* EP Maxpacket & BaseAddress */ + u32 EP_LEN_DCNT; /* EP Length & DMA count */ + u32 EP_READ; /* EP Read */ + u32 EP_WRITE; /* EP Write */ +} T_EP_REGS, *PT_EP_REGS; + +/*------- T_EP_DCR */ +typedef struct _T_EP_DCR { + u32 EP_DCR1; /* EP_DCR1 */ + u32 EP_DCR2; /* EP_DCR2 */ + u32 EP_TADR; /* EP_TADR */ + u32 Reserved; /* Reserved */ +} T_EP_DCR, *PT_EP_DCR; + +/*------- Function Registers */ +typedef struct _T_FC_REGS { + u32 USB_CONTROL; /* (0x0000) USB Control */ + u32 USB_STATUS; /* (0x0004) USB Status */ + u32 USB_ADDRESS; /* (0x0008) USB Address */ + u32 UTMI_CHARACTER_1; /* (0x000C) UTMI Setting */ + u32 TEST_CONTROL; /* (0x0010) TEST Control */ + u32 Reserved_14; /* (0x0014) Reserved */ + u32 SETUP_DATA0; /* (0x0018) Setup Data0 */ + u32 SETUP_DATA1; /* (0x001C) Setup Data1 */ + u32 USB_INT_STA; /* (0x0020) USB Interrupt Status */ + u32 USB_INT_ENA; /* (0x0024) USB Interrupt Enable */ + u32 EP0_CONTROL; /* (0x0028) EP0 Control */ + u32 EP0_STATUS; /* (0x002C) EP0 Status */ + u32 EP0_INT_ENA; /* (0x0030) EP0 Interrupt Enable */ + u32 EP0_LENGTH; /* (0x0034) EP0 Length */ + u32 EP0_READ; /* (0x0038) EP0 Read */ + u32 EP0_WRITE; /* (0x003C) EP0 Write */ + + T_EP_REGS EP_REGS[REG_EP_NUM]; /* Endpoint Register */ + + u8 Reserved220[0x1000-0x220]; /* (0x0220:0x0FFF) Reserved */ + + u32 AHBSCTR; /* (0x1000) AHBSCTR */ + u32 AHBMCTR; /* (0x1004) AHBMCTR */ + u32 AHBBINT; /* (0x1008) AHBBINT */ + u32 AHBBINTEN; /* (0x100C) AHBBINTEN */ + u32 EPCTR; /* (0x1010) EPCTR */ + u32 USBF_EPTEST; /* (0x1014) USBF_EPTEST */ + + u8 Reserved1018[0x20-0x18]; /* (0x1018:0x101F) Reserved */ + + u32 USBSSVER; /* (0x1020) USBSSVER */ + u32 USBSSCONF; /* (0x1024) USBSSCONF */ + + u8 Reserved1028[0x110-0x28]; /* (0x1028:0x110F) Reserved */ + + T_EP_DCR EP_DCR[REG_EP_NUM]; /* */ + + u8 Reserved1200[0x1000-0x200]; /* Reserved */ + +} __attribute__ ((aligned(32))) T_FC_REGS, *PT_FC_REGS; + + + + + + + + +#define EP0_PACKETSIZE 64 +#define EP_PACKETSIZE 1024 + +/* EPn RAM SIZE */ +#define D_RAM_SIZE_CTRL 64 + +/* EPn Bulk Endpoint Max Packet Size */ +#define D_FS_RAM_SIZE_BULK 64 +#define D_HS_RAM_SIZE_BULK 512 + + +struct nbu2ss_udc; + + +enum ep0_state { + EP0_IDLE, + EP0_IN_DATA_PHASE, + EP0_OUT_DATA_PHASE, + EP0_IN_STATUS_PHASE, + EP0_OUT_STATUS_PAHSE, + EP0_END_XFER, + EP0_SUSPEND, + EP0_STALL, +}; + +struct nbu2ss_req { + struct usb_request req; + struct list_head queue; + + u32 div_len; + bool dma_flag; + bool zero; + + bool unaligned; + + unsigned mapped:1; +}; + +struct nbu2ss_ep { + struct usb_ep ep; + struct list_head queue; + + struct nbu2ss_udc *udc; + + const struct usb_endpoint_descriptor *desc; + + u8 epnum; + u8 direct; + u8 ep_type; + + unsigned wedged:1; + unsigned halted:1; + unsigned stalled:1; + + u8 *virt_buf; + dma_addr_t phys_buf; +}; + + +struct nbu2ss_udc { + struct usb_gadget gadget; + struct usb_gadget_driver *driver; + struct platform_device *pdev; + struct device *dev; + spinlock_t lock; + struct completion *pdone; + + enum ep0_state ep0state; + enum usb_device_state devstate; + struct usb_ctrlrequest ctrl; + struct nbu2ss_req ep0_req; + u8 ep0_buf[EP0_PACKETSIZE]; + + struct nbu2ss_ep ep[NUM_ENDPOINTS]; + + unsigned softconnect:1; + unsigned vbus_active:1; + unsigned linux_suspended:1; + unsigned linux_resume:1; + unsigned usb_suspended:1; + unsigned self_powered:1; + unsigned remote_wakeup:1; + unsigned udc_enabled:1; + + unsigned mA; + + u32 curr_config; /* Current Configuration Number */ + + PT_FC_REGS p_regs; +}; + +/* USB register access structure */ +typedef volatile union { + struct { + unsigned char DATA[4]; + } byte; + unsigned int dw; +} USB_REG_ACCESS; + +/*-------------------------------------------------------------------------*/ +#define ERR(stuff...) printk(KERN_ERR "udc: " stuff) + +#endif /* _LINUX_EMXX_H */ -- cgit From 96b29cacc7afebec8476759ece29eb6519ef152a Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Fri, 6 Jun 2014 19:44:26 +0900 Subject: staging: emxx_udc: I/O memory and IRQ resource support Adjust the emxx_udc driver to make use of the standard driver model to pass I/O memory and IRQ as resources instead of hard coding those things in the driver. Needs more work - the VBUS signal is yet not handled. Signed-off-by: Magnus Damm Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/emxx_udc.c | 57 ++++++++++++------------------------- drivers/staging/emxx_udc/emxx_udc.h | 9 ------ 2 files changed, 18 insertions(+), 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c index b89c4115e570..c92ded8b5b3e 100644 --- a/drivers/staging/emxx_udc/emxx_udc.c +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -3356,37 +3356,38 @@ static int nbu2ss_drv_probe(struct platform_device *pdev) { int status = -ENODEV; struct nbu2ss_udc *udc; + struct resource *r; + int irq; + void __iomem *mmio_base; udc = &udc_controller; memset(udc, 0, sizeof(struct nbu2ss_udc)); platform_set_drvdata(pdev, udc); - /* IO Memory Region */ - if (!request_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE - , driver_name)) { + /* require I/O memory and IRQ to be provided as resources */ + r = platform_get_resource(pdev, IORESOURCE_MEM, 0); + mmio_base = devm_request_and_ioremap(&pdev->dev, r); + if (IS_ERR(mmio_base)) { + dev_err(&pdev->dev, "failed to map I/O memory\n"); + return PTR_ERR(mmio_base); + } - ERR("request_mem_region failed\n"); - return -EBUSY; + irq = platform_get_irq(pdev, 0); + if (irq < 0) { + dev_err(&pdev->dev, "failed to get IRQ\n"); + return irq; } + status = devm_request_irq(&pdev->dev, irq, _nbu2ss_udc_irq, + 0, driver_name, udc); /* IO Memory */ - udc->p_regs = (PT_FC_REGS)ioremap(USB_BASE_ADDRESS, USB_BASE_SIZE); - if (!udc->p_regs) { - ERR("request_io_mem failed\n"); - goto cleanup3; - } + udc->p_regs = (PT_FC_REGS)mmio_base; /* USB Function Controller Interrupt */ - status = request_irq(USB_UDC_IRQ_1, - _nbu2ss_udc_irq, - IRQF_DISABLED, - driver_name, - udc); - if (status != 0) { ERR("request_irq(USB_UDC_IRQ_1) failed\n"); - goto cleanup2; + goto cleanup1; } /* Driver Initialization */ @@ -3412,18 +3413,6 @@ static int nbu2ss_drv_probe(struct platform_device *pdev) return status; cleanup1: - /* Interrupt Handler - Release */ - free_irq(USB_UDC_IRQ_1, udc); - -cleanup2: - /* IO Memory - Release */ - if (udc->p_regs) - iounmap(udc->p_regs); - -cleanup3: - /* IO Memory Region - Release */ - release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE); - return status; } @@ -3455,19 +3444,9 @@ static int __exit nbu2ss_drv_remove(struct platform_device *pdev) (void *)ep->virt_buf, ep->phys_buf); } - /* Interrupt Handler - Release */ - free_irq(USB_UDC_IRQ_1, udc); - /* Interrupt Handler - Release */ free_irq(INT_VBUS, udc); - /* IO Memory - Release */ - if (udc->p_regs) - iounmap(udc->p_regs); - - /* IO Memory Region - Release */ - release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE); - return 0; } diff --git a/drivers/staging/emxx_udc/emxx_udc.h b/drivers/staging/emxx_udc/emxx_udc.h index cc5a7d88048d..578fdcfed5e9 100644 --- a/drivers/staging/emxx_udc/emxx_udc.h +++ b/drivers/staging/emxx_udc/emxx_udc.h @@ -47,20 +47,11 @@ /*------------ Board dependence(Resource) */ -#define USB_BASE_ADDRESS EMXX_USBS1_BASE -#define USB_BASE_SIZE 0x2000 - -#define USB_UDC_IRQ_0 INT_USBF0 -#define USB_UDC_IRQ_1 INT_USBF1 #define VBUS_VALUE GPIO_VBUS /* below hacked up for staging integration */ #define GPIO_VBUS 0 /* GPIO_P153 on KZM9D */ #define INT_VBUS 0 /* IRQ for GPIO_P153 */ -#define INT_USBF0 158 -#define INT_USBF1 159 -#define EMXX_USBS0_BASE 0xe2700000 -#define EMXX_USBS1_BASE 0xe2800000 /*------------ Board dependence(Wait) */ -- cgit From 8a62956efdee95e4f2236e5da7c4dd725e68862f Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Fri, 6 Jun 2014 19:44:35 +0900 Subject: staging: emxx_udc: Add TODO file Add a TODO file for emxx_udc to show what is left to do. Signed-off-by: Magnus Damm Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/TODO | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 drivers/staging/emxx_udc/TODO (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/TODO b/drivers/staging/emxx_udc/TODO new file mode 100644 index 000000000000..1319379beb7e --- /dev/null +++ b/drivers/staging/emxx_udc/TODO @@ -0,0 +1,4 @@ +* add clock framework support (platform device with CCF needs special care) +* break out board-specific VBUS GPIO to work with multiplatform +* DT bindings +* move driver into drivers/usb/gadget/ -- cgit From 382063d91e15434ea3c7103934d47dcb480e0562 Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Fri, 6 Jun 2014 19:44:43 +0900 Subject: staging: board: Initial board staging support Add staging board base support to allow continuous upstream in-tree development and integration of platform devices. Helps developers integrate devices as platform devices for device drivers that only provide platform device bindings. This in turn allows for incremental development of both hardware feature support and DT binding work in parallel. Two separate pieces of board staging functionality is provided to ease per-board staging board support: - The board_staging() macro allows easy per-board callbacks - The board_staging_dt_node_available() provides DT node checking Tested on the KZM9D board with the emxx_udc staging driver. Signed-off-by: Magnus Damm Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 ++ drivers/staging/Makefile | 1 + drivers/staging/board/Kconfig | 8 ++++++++ drivers/staging/board/Makefile | 1 + drivers/staging/board/TODO | 2 ++ drivers/staging/board/board.c | 41 +++++++++++++++++++++++++++++++++++++++++ drivers/staging/board/board.h | 20 ++++++++++++++++++++ 7 files changed, 75 insertions(+) create mode 100644 drivers/staging/board/Kconfig create mode 100644 drivers/staging/board/Makefile create mode 100644 drivers/staging/board/TODO create mode 100644 drivers/staging/board/board.c create mode 100644 drivers/staging/board/board.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index a511efc1b3c7..4030a0575172 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -110,6 +110,8 @@ source "drivers/staging/media/Kconfig" source "drivers/staging/android/Kconfig" +source "drivers/staging/board/Kconfig" + source "drivers/staging/ozwpan/Kconfig" source "drivers/staging/gdm72xx/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index e5039056266d..93bd37ed5e8e 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -48,6 +48,7 @@ obj-$(CONFIG_TOUCHSCREEN_CLEARPAD_TM1217) += cptm1217/ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) += ste_rmi4/ obj-$(CONFIG_MFD_NVEC) += nvec/ obj-$(CONFIG_ANDROID) += android/ +obj-$(CONFIG_STAGING_BOARD) += board/ obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/ obj-$(CONFIG_WIMAX_GDM72XX) += gdm72xx/ obj-$(CONFIG_LTE_GDM724X) += gdm724x/ diff --git a/drivers/staging/board/Kconfig b/drivers/staging/board/Kconfig new file mode 100644 index 000000000000..09d94b48c9c9 --- /dev/null +++ b/drivers/staging/board/Kconfig @@ -0,0 +1,8 @@ +config STAGING_BOARD + boolean "Staging Board Support" + depends on OF_ADDRESS + help + Select to enable per-board staging support code. + + If in doubt, say N here. + diff --git a/drivers/staging/board/Makefile b/drivers/staging/board/Makefile new file mode 100644 index 000000000000..1550b5f5f16e --- /dev/null +++ b/drivers/staging/board/Makefile @@ -0,0 +1 @@ +obj-y := board.o diff --git a/drivers/staging/board/TODO b/drivers/staging/board/TODO new file mode 100644 index 000000000000..8db70e10aa67 --- /dev/null +++ b/drivers/staging/board/TODO @@ -0,0 +1,2 @@ +* replace platform device code with DT nodes once the driver supports DT +* remove staging board code when no more platform devices are needed diff --git a/drivers/staging/board/board.c b/drivers/staging/board/board.c new file mode 100644 index 000000000000..6050fbdfd31f --- /dev/null +++ b/drivers/staging/board/board.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include +#include "board.h" + +static bool find_by_address(u64 base_address) +{ + struct device_node *dn = of_find_all_nodes(NULL); + struct resource res; + + while (dn) { + if (of_can_translate_address(dn) + && !of_address_to_resource(dn, 0, &res)) { + if (res.start == base_address) { + of_node_put(dn); + return true; + } + } + dn = of_find_all_nodes(dn); + } + + return false; +} + +bool __init board_staging_dt_node_available(const struct resource *resource, + unsigned int num_resources) +{ + unsigned int i; + + for (i = 0; i < num_resources; i++) { + const struct resource *r = resource + i; + + if (resource_type(r) == IORESOURCE_MEM) + if (find_by_address(r->start)) + return true; /* DT node available */ + } + + return false; /* Nothing found */ +} diff --git a/drivers/staging/board/board.h b/drivers/staging/board/board.h new file mode 100644 index 000000000000..2390ed6c31a4 --- /dev/null +++ b/drivers/staging/board/board.h @@ -0,0 +1,20 @@ +#ifndef __BOARD_H__ +#define __BOARD_H__ +#include +#include + +bool board_staging_dt_node_available(const struct resource *resource, + unsigned int num_resources); + +#define board_staging(str, fn) \ +static int __init runtime_board_check(void) \ +{ \ + if (of_machine_is_compatible(str)) \ + fn(); \ + \ + return 0; \ +} \ + \ +late_initcall(runtime_board_check) + +#endif /* __BOARD_H__ */ -- cgit From f22f4ea5c63fbc6ee7a3f7240c84a276eba96d76 Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Fri, 6 Jun 2014 19:44:52 +0900 Subject: staging: board: kzm9d: Board staging support for emxx_udc Add staging board support for the KZM9D board and add an emxx_udc platform device to allow in-tree continous development of the driver on the KZM9D board. When DT bindings are ready for the emxx_udc driver then the platform device in the KZM9D staging board code can easily be removed. Until then we use platform devices to continously improve the driver and integration code. Signed-off-by: Magnus Damm Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/board/Makefile | 1 + drivers/staging/board/kzm9d.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 drivers/staging/board/kzm9d.c (limited to 'drivers/staging') diff --git a/drivers/staging/board/Makefile b/drivers/staging/board/Makefile index 1550b5f5f16e..65d39ecfad63 100644 --- a/drivers/staging/board/Makefile +++ b/drivers/staging/board/Makefile @@ -1 +1,2 @@ obj-y := board.o +obj-$(CONFIG_ARCH_EMEV2) += kzm9d.o diff --git a/drivers/staging/board/kzm9d.c b/drivers/staging/board/kzm9d.c new file mode 100644 index 000000000000..533f3026e17a --- /dev/null +++ b/drivers/staging/board/kzm9d.c @@ -0,0 +1,19 @@ +/* Staging board support for KZM9D. Enable not-yet-DT-capable devices here. */ + +#include +#include +#include "board.h" + +static const struct resource usbs1_res[] __initconst = { + DEFINE_RES_MEM(0xe2800000, 0x2000), + DEFINE_RES_IRQ(159), +}; + +static void __init kzm9d_init(void) +{ + if (!board_staging_dt_node_available(usbs1_res, ARRAY_SIZE(usbs1_res))) + platform_device_register_simple("emxx_udc", -1, usbs1_res, + ARRAY_SIZE(usbs1_res)); +} + +board_staging("renesas,kzm9d", kzm9d_init); -- cgit From 2808a02332b8249324a78565421abf1059b4be9d Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 29 May 2014 13:45:18 -0700 Subject: Staging: rtl8192u: r8192U_wx.c removed commented dead code Removed dead code, commented out printks and DMESG. Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index 675a12d6aa8c..7dc2a96488ad 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -341,10 +341,8 @@ static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a, if (wrqu->data.flags & IW_SCAN_THIS_ESSID) { struct iw_scan_req *req = (struct iw_scan_req *)b; if (req->essid_len) { - //printk("==**&*&*&**===>scan set ssid:%s\n", req->essid); ieee->current_network.ssid_len = req->essid_len; memcpy(ieee->current_network.ssid, req->essid, req->essid_len); - //printk("=====>network ssid:%s\n", ieee->current_network.ssid); } } @@ -703,7 +701,6 @@ static int r8192_wx_get_retry(struct net_device *dev, wrqu->retry.flags = IW_RETRY_LIMIT | IW_RETRY_MIN; wrqu->retry.value = priv->retry_data; } - //printk("returning %d",wrqu->retry.value); return 0; @@ -730,7 +727,6 @@ static int r8192_wx_set_sens(struct net_device *dev, short err = 0; down(&priv->wx_sem); - //DMESG("attempt to set sensivity to %ddb",wrqu->sens.value); if (priv->rf_set_sens == NULL) { err = -1; /* we have not this support for this radio */ goto exit; @@ -754,7 +750,6 @@ static int r8192_wx_set_enc_ext(struct net_device *dev, int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); struct ieee80211_device *ieee = priv->ieee80211; - //printk("===>%s()\n", __func__); down(&priv->wx_sem); @@ -828,7 +823,6 @@ static int r8192_wx_set_auth(struct net_device *dev, union iwreq_data *data, char *extra) { int ret = 0; - //printk("====>%s()\n", __func__); struct r8192_priv *priv = ieee80211_priv(dev); down(&priv->wx_sem); ret = ieee80211_wx_set_auth(priv->ieee80211, info, &(data->param), extra); @@ -840,7 +834,6 @@ static int r8192_wx_set_mlme(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - //printk("====>%s()\n", __func__); int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); @@ -855,13 +848,11 @@ static int r8192_wx_set_gen_ie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *data, char *extra) { - //printk("====>%s(), len:%d\n", __func__, data->length); int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); down(&priv->wx_sem); ret = ieee80211_wx_set_gen_ie(priv->ieee80211, extra, data->data.length); up(&priv->wx_sem); - //printk("<======%s(), ret:%d\n", __func__, ret); return ret; @@ -992,7 +983,6 @@ struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev) tmp_level = (&ieee->current_network)->stats.rssi; tmp_qual = (&ieee->current_network)->stats.signal; tmp_noise = (&ieee->current_network)->stats.noise; - //printk("level:%d, qual:%d, noise:%d\n", tmp_level, tmp_qual, tmp_noise); wstats->qual.level = tmp_level; wstats->qual.qual = tmp_qual; -- cgit From 0bb927cf40544ee8c84e3e7c7fc6e0e1497fdafd Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 29 May 2014 13:45:19 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Removed all C99 comments To address the error - ERROR: do not use C99 // comments Removed all C99 comments. Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 130 +++++++++++++++++------------------ 1 file changed, 65 insertions(+), 65 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index 7dc2a96488ad..b533784eac8f 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -180,8 +180,8 @@ static int r8192_wx_set_crcmon(struct net_device *dev, priv->crcmon ? "accepted" : "rejected"); if (prev != priv->crcmon && priv->up) { - //rtl8180_down(dev); - //rtl8180_up(dev); + /* rtl8180_down(dev); */ + /* rtl8180_up(dev); */ } up(&priv->wx_sem); @@ -249,15 +249,15 @@ static int rtl8180_wx_get_range(struct net_device *dev, /* ~5 Mb/s real (802.11b) */ range->throughput = 5 * 1000 * 1000; - // TODO: Not used in 802.11b? -// range->min_nwid; /* Minimal NWID we are able to set */ - // TODO: Not used in 802.11b? -// range->max_nwid; /* Maximal NWID we are able to set */ + /* TODO: Not used in 802.11b? */ + /* range->min_nwid; */ /* Minimal NWID we are able to set */ + /* TODO: Not used in 802.11b? */ + /* range->max_nwid; */ /* Maximal NWID we are able to set */ /* Old Frequency (backward compat - moved lower ) */ -// range->old_num_channels; -// range->old_num_frequency; -// range->old_freq[6]; /* Filler to keep "version" at the same offset */ + /* range->old_num_channels; */ + /* range->old_num_frequency; */ + /* range->old_freq[6]; */ /* Filler to keep "version" at the same offset */ if (priv->rf_set_sens != NULL) range->sensitivity = priv->max_sens; /* signal level threshold range */ @@ -292,26 +292,26 @@ static int rtl8180_wx_get_range(struct net_device *dev, range->we_version_compiled = WIRELESS_EXT; range->we_version_source = 16; -// range->retry_capa; /* What retry options are supported */ -// range->retry_flags; /* How to decode max/min retry limit */ -// range->r_time_flags; /* How to decode max/min retry life */ -// range->min_retry; /* Minimal number of retries */ -// range->max_retry; /* Maximal number of retries */ -// range->min_r_time; /* Minimal retry lifetime */ -// range->max_r_time; /* Maximal retry lifetime */ + /* range->retry_capa; */ /* What retry options are supported */ + /* range->retry_flags; */ /* How to decode max/min retry limit */ + /* range->r_time_flags; */ /* How to decode max/min retry life */ + /* range->min_retry; */ /* Minimal number of retries */ + /* range->max_retry; */ /* Maximal number of retries */ + /* range->min_r_time; */ /* Minimal retry lifetime */ + /* range->max_r_time; */ /* Maximal retry lifetime */ for (i = 0, val = 0; i < 14; i++) { - // Include only legal frequencies for some countries + /* Include only legal frequencies for some countries */ if ((GET_DOT11D_INFO(priv->ieee80211)->channel_map)[i+1]) { range->freq[val].i = i + 1; range->freq[val].m = ieee80211_wlan_frequencies[i] * 100000; range->freq[val].e = 1; val++; } else { - // FIXME: do we need to set anything for channels - // we don't use ? + /* FIXME: do we need to set anything for channels */ + /* we don't use ? */ } if (val == IW_MAX_FREQUENCIES) @@ -478,7 +478,7 @@ static int r8192_wx_set_wap(struct net_device *dev, int ret; struct r8192_priv *priv = ieee80211_priv(dev); -// struct sockaddr *temp = (struct sockaddr *)awrq; + /* struct sockaddr *temp = (struct sockaddr *)awrq; */ down(&priv->wx_sem); ret = ieee80211_wx_set_wap(priv->ieee80211, info, awrq, extra); @@ -517,11 +517,11 @@ static int r8192_wx_set_enc(struct net_device *dev, struct ieee80211_device *ieee = priv->ieee80211; int ret; - //u32 TargetContent; + /* u32 TargetContent; */ u32 hwkey[4] = {0, 0, 0, 0}; u8 mask = 0xff; u32 key_idx = 0; - //u8 broadcast_addr[6] ={ 0xff,0xff,0xff,0xff,0xff,0xff}; + /* u8 broadcast_addr[6] ={ 0xff,0xff,0xff,0xff,0xff,0xff}; */ u8 zero_addr[4][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, @@ -540,7 +540,7 @@ static int r8192_wx_set_enc(struct net_device *dev, - //sometimes, the length is zero while we do not type key value + /* sometimes, the length is zero while we do not type key value */ if (wrqu->encoding.length != 0) { for (i = 0; i < 4; i++) { @@ -582,12 +582,12 @@ static int r8192_wx_set_enc(struct net_device *dev, EnableHWSecurityConfig8192(dev); setKey(dev, - key_idx, //EntryNo - key_idx, //KeyIndex - KEY_TYPE_WEP40, //KeyType + key_idx, /* EntryNo */ + key_idx, /* KeyIndex */ + KEY_TYPE_WEP40, /* KeyType */ zero_addr[key_idx], - 0, //DefaultKey - hwkey); //KeyContent + 0, /* DefaultKey */ + hwkey); /* KeyContent */ } @@ -596,12 +596,12 @@ static int r8192_wx_set_enc(struct net_device *dev, EnableHWSecurityConfig8192(dev); setKey(dev, - key_idx, //EntryNo - key_idx, //KeyIndex - KEY_TYPE_WEP104, //KeyType + key_idx, /* EntryNo */ + key_idx, /* KeyIndex */ + KEY_TYPE_WEP104, /* KeyType */ zero_addr[key_idx], - 0, //DefaultKey - hwkey); //KeyContent + 0, /* DefaultKey */ + hwkey); /* KeyContent */ } else { printk("wrong type in WEP, not WEP40 and WEP104\n"); @@ -742,7 +742,7 @@ exit: return err; } -//hw security need to reorganized. +/* hw security need to reorganized. */ static int r8192_wx_set_enc_ext(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) @@ -763,10 +763,10 @@ static int r8192_wx_set_enc_ext(struct net_device *dev, struct iw_point *encoding = &wrqu->encoding; u8 idx = 0, alg = 0, group = 0; if ((encoding->flags & IW_ENCODE_DISABLED) || ext->alg == IW_ENCODE_ALG_NONE) - //none is not allowed to use hwsec WB 2008.07.01 + /* none is not allowed to use hwsec WB 2008.07.01 */ goto end_hw_sec; - // as IW_ENCODE_ALG_CCMP is defined to be 3 and KEY_TYPE_CCMP is defined to 4; + /* as IW_ENCODE_ALG_CCMP is defined to be 3 and KEY_TYPE_CCMP is defined to 4; */ alg = (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; idx = encoding->flags & IW_ENCODE_INDEX; if (idx) @@ -779,34 +779,34 @@ static int r8192_wx_set_enc_ext(struct net_device *dev, ieee->pairwise_key_type = alg; EnableHWSecurityConfig8192(dev); } - memcpy((u8 *)key, ext->key, 16); //we only get 16 bytes key.why? WB 2008.7.1 + memcpy((u8 *)key, ext->key, 16); /* we only get 16 bytes key.why? WB 2008.7.1 */ if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode != 2)) { setKey(dev, - idx,//EntryNo - idx, //KeyIndex - alg, //KeyType - zero, //MacAddr - 0, //DefaultKey - key); //KeyContent + idx, /* EntryNao */ + idx, /* KeyIndex */ + alg, /* KeyType */ + zero, /* MacAddr */ + 0, /* DefaultKey */ + key); /* KeyContent */ } else if (group) { ieee->group_key_type = alg; setKey(dev, - idx,//EntryNo - idx, //KeyIndex - alg, //KeyType - broadcast_addr, //MacAddr - 0, //DefaultKey - key); //KeyContent - } else {//pairwise key + idx, /* EntryNo */ + idx, /* KeyIndex */ + alg, /* KeyType */ + broadcast_addr, /* MacAddr */ + 0, /* DefaultKey */ + key); /* KeyContent */ + } else { /* pairwise key */ setKey(dev, - 4,//EntryNo - idx, //KeyIndex - alg, //KeyType - (u8 *)ieee->ap_mac_addr, //MacAddr - 0, //DefaultKey - key); //KeyContent + 4, /* EntryNo */ + idx, /* KeyIndex */ + alg, /* KeyType */ + (u8 *)ieee->ap_mac_addr,/* MacAddr */ + 0, /* DefaultKey */ + key); /* KeyContent */ } @@ -914,13 +914,13 @@ static iw_handler r8192_wx_handlers[] = { r8192_wx_get_power, /* SIOCGIWPOWER */ NULL, /*---hole---*/ NULL, /*---hole---*/ - r8192_wx_set_gen_ie,//NULL, /* SIOCSIWGENIE */ + r8192_wx_set_gen_ie, /* NULL, */ /* SIOCSIWGENIE */ NULL, /* SIOCSIWGENIE */ - r8192_wx_set_auth,//NULL, /* SIOCSIWAUTH */ - NULL,//r8192_wx_get_auth,//NULL, /* SIOCSIWAUTH */ + r8192_wx_set_auth,/* NULL, */ /* SIOCSIWAUTH */ + NULL,/* r8192_wx_get_auth, */ /* NULL, */ /* SIOCSIWAUTH */ r8192_wx_set_enc_ext, /* SIOCSIWENCODEEXT */ - NULL,//r8192_wx_get_enc_ext,//NULL, /* SIOCSIWENCODEEXT */ + NULL,/* r8192_wx_get_enc_ext, *//* NULL, */ /* SIOCSIWENCODEEXT */ NULL, /* SIOCSIWPMKSA */ NULL, /*---hole---*/ @@ -953,14 +953,14 @@ static const struct iw_priv_args r8192_private_args[] = { static iw_handler r8192_private_handler[] = { -// r8192_wx_set_monitor, /* SIOCIWFIRSTPRIV */ + /* r8192_wx_set_monitor, */ /* SIOCIWFIRSTPRIV */ r8192_wx_set_crcmon, /*SIOCIWSECONDPRIV*/ -// r8192_wx_set_forceassociate, -// r8192_wx_set_beaconinterval, -// r8192_wx_set_monitor_type, + /* r8192_wx_set_forceassociate, */ + /* r8192_wx_set_beaconinterval, */ + /* r8192_wx_set_monitor_type, */ r8192_wx_set_scan_type, r8192_wx_set_rawtx, - //r8192_wx_null, + /* r8192_wx_null, */ r8192_wx_force_reset, }; -- cgit From 31c207f4afac85d1dabfb0bc98b21f2db4825ccb Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 29 May 2014 13:45:20 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Added a single space for code-style issue Added a space around '|' to address: ERROR: need consistent spacing around '|' (ctx:VxW) Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index b533784eac8f..09b1e81aa636 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -987,7 +987,7 @@ struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev) wstats->qual.level = tmp_level; wstats->qual.qual = tmp_qual; wstats->qual.noise = tmp_noise; - wstats->qual.updated = IW_QUAL_ALL_UPDATED| IW_QUAL_DBM; + wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; return wstats; } -- cgit From c284e1da6d5d369d84deabc237fc4a130b03e442 Mon Sep 17 00:00:00 2001 From: Paul Bolle Date: Fri, 30 May 2014 14:52:18 +0200 Subject: staging: rtl8192u: remove checks for CONFIG_IEEE80211_CRYPT_TKIP Ever since rtl8192u was added as a staging driver in v2.6.33 it contained checks for CONFIG_IEEE80211_CRYPT_TKIP. But the Kconfig symbol IEEE80211_CRYPT_TKIP was renamed to LIB80211_CRYPT_TKIP in v2.6.29. So these checks have always evaluated to false. And these checks were rather odd to begin with, since rtl8192u comes with its own ieee80211 stack, which has support for TKIP built in. Now the safe and easy thing to do here would be to remove these checks and the code they hide. But it turns out that with some minor cleanup the code currently hidden behind these checks builds cleanly. And by building it we allow the people actually running this code to test whether it is any good. That minor cleanup is needed because ieee80211_encrypt_fragment() accesses struct sk_buff's data member as if it is a struct ieee80211_hdr. It's not. See, in ieee80211_xmit() a struct ieee80211_hdr_3addrqos is skb_put() into the sk_buff with which ieee80211_encrypt_fragment() will be called. So switch from ieee80211_hdr to ieee80211_hdr_3addrqos here. Signed-off-by: Paul Bolle Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 2 -- drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c | 8 ++++---- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c index d9a8299c48eb..73410ccfb1ec 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c @@ -352,7 +352,6 @@ ieee80211_rx_frame_decrypt(struct ieee80211_device *ieee, struct sk_buff *skb, hdr = (struct ieee80211_hdr_4addr *) skb->data; hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); -#ifdef CONFIG_IEEE80211_CRYPT_TKIP if (ieee->tkip_countermeasures && strcmp(crypt->ops->name, "TKIP") == 0) { if (net_ratelimit()) { @@ -362,7 +361,6 @@ ieee80211_rx_frame_decrypt(struct ieee80211_device *ieee, struct sk_buff *skb, } return -1; } -#endif atomic_inc(&crypt->refcnt); res = crypt->ops->decrypt_mpdu(skb, hdrlen, crypt->priv); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c index 029a97651797..7f9e655f9eb8 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c @@ -191,20 +191,20 @@ int ieee80211_encrypt_fragment( printk("=========>%s(), crypt is null\n", __func__); return -1; } -#ifdef CONFIG_IEEE80211_CRYPT_TKIP - struct ieee80211_hdr *header; if (ieee->tkip_countermeasures && crypt && crypt->ops && strcmp(crypt->ops->name, "TKIP") == 0) { - header = (struct ieee80211_hdr *) frag->data; if (net_ratelimit()) { + struct ieee80211_hdr_3addrqos *header; + + header = (struct ieee80211_hdr_3addrqos *)frag->data; printk(KERN_DEBUG "%s: TKIP countermeasures: dropped " "TX packet to %pM\n", ieee->dev->name, header->addr1); } return -1; } -#endif + /* To encrypt, frame format is: * IV (4 bytes), clear payload (including SNAP), ICV (4 bytes) */ -- cgit From 69eb976bd980c8fe5463cfbc21d57fd7de7c0ad1 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Mon, 2 Jun 2014 09:11:45 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Removed some more commented out dead code Removed dead code from the file. Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index 09b1e81aa636..ceb06d835dad 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -516,12 +516,9 @@ static int r8192_wx_set_enc(struct net_device *dev, struct r8192_priv *priv = ieee80211_priv(dev); struct ieee80211_device *ieee = priv->ieee80211; int ret; - - /* u32 TargetContent; */ u32 hwkey[4] = {0, 0, 0, 0}; u8 mask = 0xff; u32 key_idx = 0; - /* u8 broadcast_addr[6] ={ 0xff,0xff,0xff,0xff,0xff,0xff}; */ u8 zero_addr[4][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, @@ -667,14 +664,6 @@ static int r8192_wx_set_retry(struct net_device *dev, */ rtl8192_commit(dev); - /* - if(priv->up){ - rtl8180_rtx_disable(dev); - rtl8180_rx_enable(dev); - rtl8180_tx_enable(dev); - - } - */ exit: up(&priv->wx_sem); @@ -953,14 +942,9 @@ static const struct iw_priv_args r8192_private_args[] = { static iw_handler r8192_private_handler[] = { - /* r8192_wx_set_monitor, */ /* SIOCIWFIRSTPRIV */ - r8192_wx_set_crcmon, /*SIOCIWSECONDPRIV*/ - /* r8192_wx_set_forceassociate, */ - /* r8192_wx_set_beaconinterval, */ - /* r8192_wx_set_monitor_type, */ + r8192_wx_set_crcmon, r8192_wx_set_scan_type, r8192_wx_set_rawtx, - /* r8192_wx_null, */ r8192_wx_force_reset, }; -- cgit From b6b0789fec2555606cf1143bcb3a462a427ce3c5 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 5 Jun 2014 13:25:56 -0700 Subject: Staging: rtl8192u: r8192U_core.c Added a space after ',' Added spaces after ',' to fix the following warning: ERROR: space required after that ',' (ctx:VxV) Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 24272c51bc9d..2a9150daec52 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -166,17 +166,17 @@ typedef struct _CHANNEL_LIST { } CHANNEL_LIST, *PCHANNEL_LIST; static CHANNEL_LIST ChannelPlan[] = { - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,149,153,157,161,165},24}, //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},13}, //Spain. Change to ETSI. - {{1,2,3,4,5,6,7,8,9,10,11,12,13},13}, //France. Change to ETSI. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, //MKK //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},13}, //Israel. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, // For 11a , TELEC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64}, 22}, //MIC - {{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, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 24}, //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}, 13}, //Spain. Change to ETSI. + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, //France. Change to ETSI. + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, 56, 60, 64}, 22}, //MKK //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}, 13}, //Israel. + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, 56, 60, 64}, 22}, // For 11a , TELEC + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, 56, 60, 64}, 22}, //MIC + {{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_set_channel_map(u8 channel_plan, struct r8192_priv *priv) -- cgit From f93b4685bec610f150dd0719aba940d2f9fc1d8f Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 5 Jun 2014 13:25:57 -0700 Subject: Staging: rtl8192u: r8192U_core.c Rearranged statements to fix code-style errors Rearranged statements around if and switch statements to address the following error: ERROR: trailing statements should be on next line Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 553 ++++++++++++++++++++++++--------- 1 file changed, 402 insertions(+), 151 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 2a9150daec52..a9922dda5a85 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -905,7 +905,8 @@ inline u16 ieeerate2rtlrate(int rate) static u16 rtl_rate[] = {10, 20, 55, 110, 60, 90, 120, 180, 240, 360, 480, 540}; inline u16 rtl8192_rate2rate(short rate) { - if (rate > 11) return 0; + if (rate > 11) + return 0; return rtl_rate[rate]; } @@ -1114,7 +1115,8 @@ struct sk_buff *DrvAggr_Aggregation(struct net_device *dev, struct ieee80211_drv tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) {//AMPDU enabled + if (tcb_desc->bAMPDUEnable) + {//AMPDU enabled tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ tx_fwinfo->RxMF = tcb_desc->ampdu_factor; @@ -1329,36 +1331,87 @@ static void rtl8192_config_rate(struct net_device *dev, u16 *rate_config) for (i = 0; i < net->rates_len; i++) { basic_rate = net->rates[i]&0x7f; - switch (basic_rate) { - case MGN_1M: *rate_config |= RRSR_1M; break; - case MGN_2M: *rate_config |= RRSR_2M; break; - case MGN_5_5M: *rate_config |= RRSR_5_5M; break; - case MGN_11M: *rate_config |= RRSR_11M; break; - case MGN_6M: *rate_config |= RRSR_6M; break; - case MGN_9M: *rate_config |= RRSR_9M; break; - case MGN_12M: *rate_config |= RRSR_12M; break; - case MGN_18M: *rate_config |= RRSR_18M; break; - case MGN_24M: *rate_config |= RRSR_24M; break; - case MGN_36M: *rate_config |= RRSR_36M; break; - case MGN_48M: *rate_config |= RRSR_48M; break; - case MGN_54M: *rate_config |= RRSR_54M; break; + switch (basic_rate) + { + case MGN_1M: + *rate_config |= RRSR_1M; + break; + case MGN_2M: + *rate_config |= RRSR_2M; + break; + case MGN_5_5M: + *rate_config |= RRSR_5_5M; + break; + case MGN_11M: + *rate_config |= RRSR_11M; + break; + case MGN_6M: + *rate_config |= RRSR_6M; + break; + case MGN_9M: + *rate_config |= RRSR_9M; + break; + case MGN_12M: + *rate_config |= RRSR_12M; + break; + case MGN_18M: + *rate_config |= RRSR_18M; + break; + case MGN_24M: + *rate_config |= RRSR_24M; + break; + case MGN_36M: + *rate_config |= RRSR_36M; + break; + case MGN_48M: + *rate_config |= RRSR_48M; + break; + case MGN_54M: + *rate_config |= RRSR_54M; + break; } } - for (i = 0; i < net->rates_ex_len; i++) { + for (i = 0; i < net->rates_ex_len; i++) + { basic_rate = net->rates_ex[i]&0x7f; - switch (basic_rate) { - case MGN_1M: *rate_config |= RRSR_1M; break; - case MGN_2M: *rate_config |= RRSR_2M; break; - case MGN_5_5M: *rate_config |= RRSR_5_5M; break; - case MGN_11M: *rate_config |= RRSR_11M; break; - case MGN_6M: *rate_config |= RRSR_6M; break; - case MGN_9M: *rate_config |= RRSR_9M; break; - case MGN_12M: *rate_config |= RRSR_12M; break; - case MGN_18M: *rate_config |= RRSR_18M; break; - case MGN_24M: *rate_config |= RRSR_24M; break; - case MGN_36M: *rate_config |= RRSR_36M; break; - case MGN_48M: *rate_config |= RRSR_48M; break; - case MGN_54M: *rate_config |= RRSR_54M; break; + switch (basic_rate) + { + case MGN_1M: + *rate_config |= RRSR_1M; + break; + case MGN_2M: + *rate_config |= RRSR_2M; + break; + case MGN_5_5M: + *rate_config |= RRSR_5_5M; + break; + case MGN_11M: + *rate_config |= RRSR_11M; + break; + case MGN_6M: + *rate_config |= RRSR_6M; + break; + case MGN_9M: + *rate_config |= RRSR_9M; + break; + case MGN_12M: + *rate_config |= RRSR_12M; + break; + case MGN_18M: + *rate_config |= RRSR_18M; + break; + case MGN_24M: + *rate_config |= RRSR_24M; + break; + case MGN_36M: + *rate_config |= RRSR_36M; + break; + case MGN_48M: + *rate_config |= RRSR_48M; + break; + case MGN_54M: + *rate_config |= RRSR_54M; + break; } } } @@ -1432,7 +1485,8 @@ inline u8 rtl8192_IsWirelessBMode(u16 rate) { if (((rate <= 110) && (rate != 60) && (rate != 90)) || (rate == 220)) return 1; - else return 0; + else + return 0; } u16 N_DBPSOfRate(u16 DataRate); @@ -1444,7 +1498,8 @@ u16 ComputeTxTime(u16 FrameLength, u16 DataRate, u8 bManagementFrame, u16 N_DBPS; u16 Ceiling; - if (rtl8192_IsWirelessBMode(DataRate)) { + if (rtl8192_IsWirelessBMode(DataRate)) + { if (bManagementFrame || !bShortPreamble || DataRate == 10) // long preamble FrameTime = (u16)(144+48+(FrameLength*8/(DataRate/10))); else // Short preamble @@ -1616,40 +1671,100 @@ static u8 MRateToHwRate8190Pci(u8 rate) { u8 ret = DESC90_RATE1M; - switch (rate) { - case MGN_1M: ret = DESC90_RATE1M; break; - case MGN_2M: ret = DESC90_RATE2M; break; - case MGN_5_5M: ret = DESC90_RATE5_5M; break; - case MGN_11M: ret = DESC90_RATE11M; break; - case MGN_6M: ret = DESC90_RATE6M; break; - case MGN_9M: ret = DESC90_RATE9M; break; - case MGN_12M: ret = DESC90_RATE12M; break; - case MGN_18M: ret = DESC90_RATE18M; break; - case MGN_24M: ret = DESC90_RATE24M; break; - case MGN_36M: ret = DESC90_RATE36M; break; - case MGN_48M: ret = DESC90_RATE48M; break; - case MGN_54M: ret = DESC90_RATE54M; break; - - // HT rate since here - case MGN_MCS0: ret = DESC90_RATEMCS0; break; - case MGN_MCS1: ret = DESC90_RATEMCS1; break; - case MGN_MCS2: ret = DESC90_RATEMCS2; break; - case MGN_MCS3: ret = DESC90_RATEMCS3; break; - case MGN_MCS4: ret = DESC90_RATEMCS4; break; - case MGN_MCS5: ret = DESC90_RATEMCS5; break; - case MGN_MCS6: ret = DESC90_RATEMCS6; break; - case MGN_MCS7: ret = DESC90_RATEMCS7; break; - case MGN_MCS8: ret = DESC90_RATEMCS8; break; - case MGN_MCS9: ret = DESC90_RATEMCS9; break; - case MGN_MCS10: ret = DESC90_RATEMCS10; break; - case MGN_MCS11: ret = DESC90_RATEMCS11; break; - case MGN_MCS12: ret = DESC90_RATEMCS12; break; - case MGN_MCS13: ret = DESC90_RATEMCS13; break; - case MGN_MCS14: ret = DESC90_RATEMCS14; break; - case MGN_MCS15: ret = DESC90_RATEMCS15; break; - case (0x80|0x20): ret = DESC90_RATEMCS32; break; - - default: break; + switch (rate) + { + case MGN_1M: + ret = DESC90_RATE1M; + break; + case MGN_2M: + ret = DESC90_RATE2M; + break; + case MGN_5_5M: + ret = DESC90_RATE5_5M; + break; + case MGN_11M: + ret = DESC90_RATE11M; + break; + case MGN_6M: + ret = DESC90_RATE6M; + break; + case MGN_9M: + ret = DESC90_RATE9M; + break; + case MGN_12M: + ret = DESC90_RATE12M; + break; + case MGN_18M: + ret = DESC90_RATE18M; + break; + case MGN_24M: + ret = DESC90_RATE24M; + break; + case MGN_36M: + ret = DESC90_RATE36M; + break; + case MGN_48M: + ret = DESC90_RATE48M; + break; + case MGN_54M: + ret = DESC90_RATE54M; + break; + + // HT rate since here + case MGN_MCS0: + ret = DESC90_RATEMCS0; + break; + case MGN_MCS1: + ret = DESC90_RATEMCS1; + break; + case MGN_MCS2: + ret = DESC90_RATEMCS2; + break; + case MGN_MCS3: + ret = DESC90_RATEMCS3; + break; + case MGN_MCS4: + ret = DESC90_RATEMCS4; + break; + case MGN_MCS5: + ret = DESC90_RATEMCS5; + break; + case MGN_MCS6: + ret = DESC90_RATEMCS6; + break; + case MGN_MCS7: + ret = DESC90_RATEMCS7; + break; + case MGN_MCS8: + ret = DESC90_RATEMCS8; + break; + case MGN_MCS9: + ret = DESC90_RATEMCS9; + break; + case MGN_MCS10: + ret = DESC90_RATEMCS10; + break; + case MGN_MCS11: + ret = DESC90_RATEMCS11; + break; + case MGN_MCS12: + ret = DESC90_RATEMCS12; + break; + case MGN_MCS13: + ret = DESC90_RATEMCS13; + break; + case MGN_MCS14: + ret = DESC90_RATEMCS14; + break; + case MGN_MCS15: + ret = DESC90_RATEMCS15; + break; + case (0x80|0x20): + ret = DESC90_RATEMCS32; + break; + + default: + break; } return ret; } @@ -1712,7 +1827,8 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb) tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) {//AMPDU enabled + if (tcb_desc->bAMPDUEnable) //AMPDU enabled + { tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ tx_fwinfo->RxMF = tcb_desc->ampdu_factor; @@ -2198,7 +2314,8 @@ void rtl8192_update_ratr_table(struct net_device *dev) break; case IEEE_N_24G: case IEEE_N_5G: - if (ieee->pHTInfo->PeerMimoPs == 0) {//MIMO_PS_STATIC + if (ieee->pHTInfo->PeerMimoPs == 0) //MIMO_PS_STATIC + { ratr_value &= 0x0007F007; } else { if (priv->rf_type == RF_1T2R) @@ -2582,7 +2699,8 @@ static void rtl8192_read_eeprom_info(struct net_device *dev) else priv->EEPROM_Def_Ver = 1; RT_TRACE(COMP_EPROM, "EEPROM_DEF_VER:%d\n", priv->EEPROM_Def_Ver); - if (priv->EEPROM_Def_Ver == 0) { //old eeprom definition + if (priv->EEPROM_Def_Ver == 0) //old eeprom definition + { int i; if (bLoad_From_EEPOM) priv->EEPROMTxPowerLevelCCK = (eprom_read(dev, (EEPROM_TxPwIndex_CCK>>1))&0xff) >> 8; @@ -2993,13 +3111,15 @@ static bool rtl8192_adapter_start(struct net_device *dev) // #ifdef TO_DO_LIST if (Adapter->ResetProgress == RESET_TYPE_NORESET) { - if (pMgntInfo->RegRfOff == TRUE) { // User disable RF via registry. + if (pMgntInfo->RegRfOff == TRUE) // User disable RF via registry. + { RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RegRfOff ----------\n")); MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW); // Those actions will be discard in MgntActSet_RF_State because of the same state for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); - } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) { // H/W or S/W RF OFF before sleep. + } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) // H/W or S/W RF OFF before sleep. + { RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RfOffReason(%d) ----------\n", pMgntInfo->RfOffReason)); MgntActSet_RF_State(Adapter, eRfOff, pMgntInfo->RfOffReason); } else { @@ -3008,7 +3128,8 @@ static bool rtl8192_adapter_start(struct net_device *dev) RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): RF is on ----------\n")); } } else { - if (pHalData->eRFPowerState == eRfOff) { + if (pHalData->eRFPowerState == eRfOff) + { MgntActSet_RF_State(Adapter, eRfOff, pMgntInfo->RfOffReason); // Those actions will be discard in MgntActSet_RF_State because of the same state for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) @@ -3017,7 +3138,8 @@ static bool rtl8192_adapter_start(struct net_device *dev) } #endif //config RF. - if (priv->ResetProgress == RESET_TYPE_NORESET) { + if (priv->ResetProgress == RESET_TYPE_NORESET) + { rtl8192_phy_RFConfig(dev); RT_TRACE(COMP_INIT, "%s():after phy RF config\n", __func__); } @@ -3525,7 +3647,8 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) } 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 + (!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", __func__, priv->force_reset, priv->ResetProgress, priv->bForcedSilentReset, priv->bDisableNormalResetCheck, ResetType); rtl819x_ifsilentreset(dev); } @@ -3586,7 +3709,8 @@ int rtl8192_up(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); - if (priv->up == 1) return -1; + if (priv->up == 1) + return -1; return _rtl8192_up(dev); } @@ -3612,7 +3736,8 @@ int rtl8192_down(struct net_device *dev) struct r8192_priv *priv = ieee80211_priv(dev); int i; - if (priv->up == 0) return -1; + if (priv->up == 0) + return -1; priv->up = 0; priv->ieee80211->ieee_up = 0; @@ -3650,7 +3775,8 @@ void rtl8192_commit(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); int reset_status = 0; - if (priv->up == 0) return; + if (priv->up == 0) + return; priv->up = 0; rtl8192_cancel_deferred_work(priv); @@ -3802,50 +3928,110 @@ static u8 HwRateToMRate90(bool bIsHT, u8 rate) u8 ret_rate = 0xff; if (!bIsHT) { - switch (rate) { - case DESC90_RATE1M: ret_rate = MGN_1M; break; - case DESC90_RATE2M: ret_rate = MGN_2M; break; - case DESC90_RATE5_5M: ret_rate = MGN_5_5M; break; - case DESC90_RATE11M: ret_rate = MGN_11M; break; - case DESC90_RATE6M: ret_rate = MGN_6M; break; - case DESC90_RATE9M: ret_rate = MGN_9M; break; - case DESC90_RATE12M: ret_rate = MGN_12M; break; - case DESC90_RATE18M: ret_rate = MGN_18M; break; - case DESC90_RATE24M: ret_rate = MGN_24M; break; - case DESC90_RATE36M: ret_rate = MGN_36M; break; - case DESC90_RATE48M: ret_rate = MGN_48M; break; - case DESC90_RATE54M: ret_rate = MGN_54M; break; + switch (rate) + { + case DESC90_RATE1M: + ret_rate = MGN_1M; + break; + case DESC90_RATE2M: + ret_rate = MGN_2M; + break; + case DESC90_RATE5_5M: + ret_rate = MGN_5_5M; + break; + case DESC90_RATE11M: + ret_rate = MGN_11M; + break; + case DESC90_RATE6M: + ret_rate = MGN_6M; + break; + case DESC90_RATE9M: + ret_rate = MGN_9M; + break; + case DESC90_RATE12M: + ret_rate = MGN_12M; + break; + case DESC90_RATE18M: + ret_rate = MGN_18M; + break; + case DESC90_RATE24M: + ret_rate = MGN_24M; + break; + case DESC90_RATE36M: + ret_rate = MGN_36M; + break; + case DESC90_RATE48M: + ret_rate = MGN_48M; + break; + case DESC90_RATE54M: + ret_rate = MGN_54M; + break; - default: - ret_rate = 0xff; - RT_TRACE(COMP_RECV, "HwRateToMRate90(): Non supported Rate [%x], bIsHT = %d!!!\n", rate, bIsHT); - break; + default: + ret_rate = 0xff; + RT_TRACE(COMP_RECV, "HwRateToMRate90(): Non supported Rate [%x], bIsHT = %d!!!\n", rate, bIsHT); + break; } } else { - switch (rate) { - case DESC90_RATEMCS0: ret_rate = MGN_MCS0; break; - case DESC90_RATEMCS1: ret_rate = MGN_MCS1; break; - case DESC90_RATEMCS2: ret_rate = MGN_MCS2; break; - case DESC90_RATEMCS3: ret_rate = MGN_MCS3; break; - case DESC90_RATEMCS4: ret_rate = MGN_MCS4; break; - case DESC90_RATEMCS5: ret_rate = MGN_MCS5; break; - case DESC90_RATEMCS6: ret_rate = MGN_MCS6; break; - case DESC90_RATEMCS7: ret_rate = MGN_MCS7; break; - case DESC90_RATEMCS8: ret_rate = MGN_MCS8; break; - case DESC90_RATEMCS9: ret_rate = MGN_MCS9; break; - case DESC90_RATEMCS10: ret_rate = MGN_MCS10; break; - case DESC90_RATEMCS11: ret_rate = MGN_MCS11; break; - case DESC90_RATEMCS12: ret_rate = MGN_MCS12; break; - case DESC90_RATEMCS13: ret_rate = MGN_MCS13; break; - case DESC90_RATEMCS14: ret_rate = MGN_MCS14; break; - case DESC90_RATEMCS15: ret_rate = MGN_MCS15; break; - case DESC90_RATEMCS32: ret_rate = (0x80|0x20); break; + switch (rate) + { + case DESC90_RATEMCS0: + ret_rate = MGN_MCS0; + break; + case DESC90_RATEMCS1: + ret_rate = MGN_MCS1; + break; + case DESC90_RATEMCS2: + ret_rate = MGN_MCS2; + break; + case DESC90_RATEMCS3: + ret_rate = MGN_MCS3; + break; + case DESC90_RATEMCS4: + ret_rate = MGN_MCS4; + break; + case DESC90_RATEMCS5: + ret_rate = MGN_MCS5; + break; + case DESC90_RATEMCS6: + ret_rate = MGN_MCS6; + break; + case DESC90_RATEMCS7: + ret_rate = MGN_MCS7; + break; + case DESC90_RATEMCS8: + ret_rate = MGN_MCS8; + break; + case DESC90_RATEMCS9: + ret_rate = MGN_MCS9; + break; + case DESC90_RATEMCS10: + ret_rate = MGN_MCS10; + break; + case DESC90_RATEMCS11: + ret_rate = MGN_MCS11; + break; + case DESC90_RATEMCS12: + ret_rate = MGN_MCS12; + break; + case DESC90_RATEMCS13: + ret_rate = MGN_MCS13; + break; + case DESC90_RATEMCS14: + ret_rate = MGN_MCS14; + break; + case DESC90_RATEMCS15: + ret_rate = MGN_MCS15; + break; + case DESC90_RATEMCS32: + ret_rate = (0x80|0x20); + break; - default: - ret_rate = 0xff; - RT_TRACE(COMP_RECV, "HwRateToMRate90(): Non supported Rate [%x], bIsHT = %d!!!\n", rate, bIsHT); - break; + default: + ret_rate = 0xff; + RT_TRACE(COMP_RECV, "HwRateToMRate90(): Non supported Rate [%x], bIsHT = %d!!!\n", rate, bIsHT); + break; } } @@ -3872,7 +4058,8 @@ static void UpdateRxPktTimeStamp8190(struct net_device *dev, { struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); - if (stats->bIsAMPDU && !stats->bFirstMPDU) { + if (stats->bIsAMPDU && !stats->bFirstMPDU) + { stats->mac_time[0] = priv->LastRxDescTSFLow; stats->mac_time[1] = priv->LastRxDescTSFHigh; } else { @@ -4063,8 +4250,10 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer, } // <2> Showed on UI for engineering - if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) { - for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) { // 2 spatial stream + if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) + { + for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) // 2 spatial stream + { if (pprevious_stats->RxMIMOSignalQuality[nspatial_stream] != -1) { if (priv->stats.rx_evm_percentage[nspatial_stream] == 0) // initialize priv->stats.rx_evm_percentage[nspatial_stream] = pprevious_stats->RxMIMOSignalQuality[nspatial_stream]; @@ -4487,45 +4676,104 @@ UpdateReceivedRateHistogramStatistics8190(struct net_device *dev, else preamble_guardinterval = 0;// long - switch (stats->rate) { + switch (stats->rate) + { // // CCK rate // - case MGN_1M: rateIndex = 0; break; - case MGN_2M: rateIndex = 1; break; - case MGN_5_5M: rateIndex = 2; break; - case MGN_11M: rateIndex = 3; break; + case MGN_1M: + rateIndex = 0; + break; + case MGN_2M: + rateIndex = 1; + break; + case MGN_5_5M: + rateIndex = 2; + break; + case MGN_11M: + rateIndex = 3; + break; // // Legacy OFDM rate // - case MGN_6M: rateIndex = 4; break; - case MGN_9M: rateIndex = 5; break; - case MGN_12M: rateIndex = 6; break; - case MGN_18M: rateIndex = 7; break; - case MGN_24M: rateIndex = 8; break; - case MGN_36M: rateIndex = 9; break; - case MGN_48M: rateIndex = 10; break; - case MGN_54M: rateIndex = 11; break; + case MGN_6M: + rateIndex = 4; + break; + case MGN_9M: + rateIndex = 5; + break; + case MGN_12M: + rateIndex = 6; + break; + case MGN_18M: + rateIndex = 7; + break; + case MGN_24M: + rateIndex = 8; + break; + case MGN_36M: + rateIndex = 9; + break; + case MGN_48M: + rateIndex = 10; + break; + case MGN_54M: + rateIndex = 11; + break; // // 11n High throughput rate // - case MGN_MCS0: rateIndex = 12; break; - case MGN_MCS1: rateIndex = 13; break; - case MGN_MCS2: rateIndex = 14; break; - case MGN_MCS3: rateIndex = 15; break; - case MGN_MCS4: rateIndex = 16; break; - case MGN_MCS5: rateIndex = 17; break; - case MGN_MCS6: rateIndex = 18; break; - case MGN_MCS7: rateIndex = 19; break; - case MGN_MCS8: rateIndex = 20; break; - case MGN_MCS9: rateIndex = 21; break; - case MGN_MCS10: rateIndex = 22; break; - case MGN_MCS11: rateIndex = 23; break; - case MGN_MCS12: rateIndex = 24; break; - case MGN_MCS13: rateIndex = 25; break; - case MGN_MCS14: rateIndex = 26; break; - case MGN_MCS15: rateIndex = 27; break; - default: rateIndex = 28; break; + case MGN_MCS0: + rateIndex = 12; + break; + case MGN_MCS1: + rateIndex = 13; + break; + case MGN_MCS2: + rateIndex = 14; + break; + case MGN_MCS3: + rateIndex = 15; + break; + case MGN_MCS4: + rateIndex = 16; + break; + case MGN_MCS5: + rateIndex = 17; + break; + case MGN_MCS6: + rateIndex = 18; + break; + case MGN_MCS7: + rateIndex = 19; + break; + case MGN_MCS8: + rateIndex = 20; + break; + case MGN_MCS9: + rateIndex = 21; + break; + case MGN_MCS10: + rateIndex = 22; + break; + case MGN_MCS11: + rateIndex = 23; + break; + case MGN_MCS12: + rateIndex = 24; + break; + case MGN_MCS13: + rateIndex = 25; + break; + case MGN_MCS14: + rateIndex = 26; + break; + case MGN_MCS15: + rateIndex = 27; + break; + default: + rateIndex = 28; + break; } priv->stats.received_preamble_GI[preamble_guardinterval][rateIndex]++; priv->stats.received_rate_histogram[0][rateIndex]++; //total @@ -5146,7 +5394,8 @@ void EnableHWSecurityConfig8192(struct net_device *dev) ieee->hwsec_active = 1; - if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) { //add hwsec_support flag to totol control hw_sec on/off + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) //add hwsec_support flag to totol control hw_sec on/off + { ieee->hwsec_active = 0; SECR_value &= ~SCR_RxDecEnable; } @@ -5178,14 +5427,16 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, TargetCommand = i+CAM_CONTENT_COUNT*EntryNo; TargetCommand |= BIT31|BIT16; - if (i == 0) { //MAC|Config + if (i == 0) //MAC|Config + { TargetContent = (u32)(*(MacAddr+0)) << 16| (u32)(*(MacAddr+1)) << 24| (u32)usConfig; write_nic_dword(dev, WCAMI, TargetContent); write_nic_dword(dev, RWCAM, TargetCommand); - } else if (i == 1) { //MAC + } else if (i == 1) //MAC + { TargetContent = (u32)(*(MacAddr+2)) | (u32)(*(MacAddr+3)) << 8| (u32)(*(MacAddr+4)) << 16| -- cgit From 92e216165c5a8e33008e6f16b3c1f3233c1f6f42 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Thu, 5 Jun 2014 13:25:58 -0700 Subject: Staging: rtl8192u: r8192U_core.c Converted some C99 comments to fix code-style errors Converted some C99 warnings to fix the following error: ERROR: trailing statements should be on next line Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index a9922dda5a85..9dba99ddd2d4 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -1433,7 +1433,7 @@ static void rtl8192_update_cap(struct net_device *dev, u16 cap) if (net->mode & (IEEE_G|IEEE_N_24G)) { u8 slot_time = 0; - if ((cap & WLAN_CAPABILITY_SHORT_SLOT) && (!priv->ieee80211->pHTInfo->bCurrentRT2RTLongSlotTime)) //short slot time + if ((cap & WLAN_CAPABILITY_SHORT_SLOT) && (!priv->ieee80211->pHTInfo->bCurrentRT2RTLongSlotTime)) /* short slot time */ slot_time = SHORT_SLOT_TIME; else //long slot time slot_time = NON_SHORT_SLOT_TIME; @@ -1500,11 +1500,11 @@ u16 ComputeTxTime(u16 FrameLength, u16 DataRate, u8 bManagementFrame, if (rtl8192_IsWirelessBMode(DataRate)) { - if (bManagementFrame || !bShortPreamble || DataRate == 10) // long preamble + if (bManagementFrame || !bShortPreamble || DataRate == 10) /* long preamble */ FrameTime = (u16)(144+48+(FrameLength*8/(DataRate/10))); else // Short preamble FrameTime = (u16)(72+24+(FrameLength*8/(DataRate/10))); - if ((FrameLength*8 % (DataRate/10)) != 0) //Get the Ceilling + if ((FrameLength*8 % (DataRate/10)) != 0) /* Get the Ceilling */ FrameTime++; } else { //802.11g DSSS-OFDM PLCP length field calculation. N_DBPS = N_DBPSOfRate(DataRate); @@ -1827,7 +1827,7 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb) tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) //AMPDU enabled + if (tcb_desc->bAMPDUEnable) /* AMPDU enabled */ { tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ @@ -2314,7 +2314,7 @@ void rtl8192_update_ratr_table(struct net_device *dev) break; case IEEE_N_24G: case IEEE_N_5G: - if (ieee->pHTInfo->PeerMimoPs == 0) //MIMO_PS_STATIC + if (ieee->pHTInfo->PeerMimoPs == 0) /* MIMO_PS_STATIC */ { ratr_value &= 0x0007F007; } else { @@ -2699,7 +2699,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev) else priv->EEPROM_Def_Ver = 1; RT_TRACE(COMP_EPROM, "EEPROM_DEF_VER:%d\n", priv->EEPROM_Def_Ver); - if (priv->EEPROM_Def_Ver == 0) //old eeprom definition + if (priv->EEPROM_Def_Ver == 0) /* old eeprom definition */ { int i; if (bLoad_From_EEPOM) @@ -3111,14 +3111,14 @@ static bool rtl8192_adapter_start(struct net_device *dev) // #ifdef TO_DO_LIST if (Adapter->ResetProgress == RESET_TYPE_NORESET) { - if (pMgntInfo->RegRfOff == TRUE) // User disable RF via registry. + if (pMgntInfo->RegRfOff == TRUE) /* User disable RF via registry. */ { RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RegRfOff ----------\n")); MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW); // Those actions will be discard in MgntActSet_RF_State because of the same state for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); - } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) // H/W or S/W RF OFF before sleep. + } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) /* H/W or S/W RF OFF before sleep. */ { RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RfOffReason(%d) ----------\n", pMgntInfo->RfOffReason)); MgntActSet_RF_State(Adapter, eRfOff, pMgntInfo->RfOffReason); @@ -3647,7 +3647,7 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) } 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 + (!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", __func__, priv->force_reset, priv->ResetProgress, priv->bForcedSilentReset, priv->bDisableNormalResetCheck, ResetType); rtl819x_ifsilentreset(dev); @@ -4209,7 +4209,7 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer, if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) { - if (priv->undecorated_smoothed_pwdb < 0) // initialize + if (priv->undecorated_smoothed_pwdb < 0) /* initialize */ priv->undecorated_smoothed_pwdb = pprevious_stats->RxPWDBAll; if (pprevious_stats->RxPWDBAll > (u32)priv->undecorated_smoothed_pwdb) { priv->undecorated_smoothed_pwdb = @@ -4252,10 +4252,10 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer, // <2> Showed on UI for engineering if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) { - for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) // 2 spatial stream + for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) /* 2 spatial stream */ { if (pprevious_stats->RxMIMOSignalQuality[nspatial_stream] != -1) { - if (priv->stats.rx_evm_percentage[nspatial_stream] == 0) // initialize + if (priv->stats.rx_evm_percentage[nspatial_stream] == 0) /* initialize */ priv->stats.rx_evm_percentage[nspatial_stream] = pprevious_stats->RxMIMOSignalQuality[nspatial_stream]; priv->stats.rx_evm_percentage[nspatial_stream] = ((priv->stats.rx_evm_percentage[nspatial_stream]* (Rx_Smooth_Factor-1)) + @@ -4550,7 +4550,7 @@ static void rtl8192_query_rxphystatus(struct r8192_priv *priv, rx_evmX /= 2; //dbm evm = rtl819x_evm_dbtopercentage(rx_evmX); - if (i == 0) // Fill value in RFD, Get the first spatial stream only + if (i == 0) /* Fill value in RFD, Get the first spatial stream only */ pstats->SignalQuality = precord_stats->SignalQuality = (u8)(evm & 0xff); pstats->RxMIMOSignalQuality[i] = precord_stats->RxMIMOSignalQuality[i] = (u8)(evm & 0xff); } @@ -4559,7 +4559,7 @@ static void rtl8192_query_rxphystatus(struct r8192_priv *priv, /* record rx statistics for debug */ rxsc_sgien_exflg = pofdm_buf->rxsc_sgien_exflg; prxsc = (phy_ofdm_rx_status_rxsc_sgien_exintfflag *)&rxsc_sgien_exflg; - if (pdrvinfo->BW) //40M channel + if (pdrvinfo->BW) /* 40M channel */ priv->stats.received_bwtype[1+prxsc->rxsc]++; else //20M channel priv->stats.received_bwtype[0]++; @@ -5394,7 +5394,7 @@ void EnableHWSecurityConfig8192(struct net_device *dev) ieee->hwsec_active = 1; - if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) //add hwsec_support flag to totol control hw_sec on/off + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) /* add hwsec_support flag to totol control hw_sec on/off */ { ieee->hwsec_active = 0; SECR_value &= ~SCR_RxDecEnable; @@ -5427,7 +5427,7 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, TargetCommand = i+CAM_CONTENT_COUNT*EntryNo; TargetCommand |= BIT31|BIT16; - if (i == 0) //MAC|Config + if (i == 0) /* MAC|Config */ { TargetContent = (u32)(*(MacAddr+0)) << 16| (u32)(*(MacAddr+1)) << 24| @@ -5435,7 +5435,7 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, write_nic_dword(dev, WCAMI, TargetContent); write_nic_dword(dev, RWCAM, TargetCommand); - } else if (i == 1) //MAC + } else if (i == 1) /* MAC */ { TargetContent = (u32)(*(MacAddr+2)) | (u32)(*(MacAddr+3)) << 8| -- cgit From 81669597159952928f5fedc83062e7d9fa281ecb Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Wed, 11 Jun 2014 10:26:43 -0700 Subject: Staging: rtl8192u: r8192U_core.c Fixed open brace { placement Fixed open brace placement to address the following code-style errors: ERROR: that open brace { should be on the previous line Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 69 ++++++++++++---------------------- 1 file changed, 23 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 9dba99ddd2d4..512bf5cf4063 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -1115,8 +1115,7 @@ struct sk_buff *DrvAggr_Aggregation(struct net_device *dev, struct ieee80211_drv tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) - {//AMPDU enabled + if (tcb_desc->bAMPDUEnable) {//AMPDU enabled tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ tx_fwinfo->RxMF = tcb_desc->ampdu_factor; @@ -1331,8 +1330,7 @@ static void rtl8192_config_rate(struct net_device *dev, u16 *rate_config) for (i = 0; i < net->rates_len; i++) { basic_rate = net->rates[i]&0x7f; - switch (basic_rate) - { + switch (basic_rate) { case MGN_1M: *rate_config |= RRSR_1M; break; @@ -1371,11 +1369,9 @@ static void rtl8192_config_rate(struct net_device *dev, u16 *rate_config) break; } } - for (i = 0; i < net->rates_ex_len; i++) - { + for (i = 0; i < net->rates_ex_len; i++) { basic_rate = net->rates_ex[i]&0x7f; - switch (basic_rate) - { + switch (basic_rate) { case MGN_1M: *rate_config |= RRSR_1M; break; @@ -1498,8 +1494,7 @@ u16 ComputeTxTime(u16 FrameLength, u16 DataRate, u8 bManagementFrame, u16 N_DBPS; u16 Ceiling; - if (rtl8192_IsWirelessBMode(DataRate)) - { + if (rtl8192_IsWirelessBMode(DataRate)) { if (bManagementFrame || !bShortPreamble || DataRate == 10) /* long preamble */ FrameTime = (u16)(144+48+(FrameLength*8/(DataRate/10))); else // Short preamble @@ -1671,8 +1666,7 @@ static u8 MRateToHwRate8190Pci(u8 rate) { u8 ret = DESC90_RATE1M; - switch (rate) - { + switch (rate) { case MGN_1M: ret = DESC90_RATE1M; break; @@ -1827,8 +1821,7 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb) tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) /* AMPDU enabled */ - { + if (tcb_desc->bAMPDUEnable) { /* AMPDU enabled */ tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ tx_fwinfo->RxMF = tcb_desc->ampdu_factor; @@ -2314,8 +2307,7 @@ void rtl8192_update_ratr_table(struct net_device *dev) break; case IEEE_N_24G: case IEEE_N_5G: - if (ieee->pHTInfo->PeerMimoPs == 0) /* MIMO_PS_STATIC */ - { + if (ieee->pHTInfo->PeerMimoPs == 0) { /* MIMO_PS_STATIC */ ratr_value &= 0x0007F007; } else { if (priv->rf_type == RF_1T2R) @@ -2699,8 +2691,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev) else priv->EEPROM_Def_Ver = 1; RT_TRACE(COMP_EPROM, "EEPROM_DEF_VER:%d\n", priv->EEPROM_Def_Ver); - if (priv->EEPROM_Def_Ver == 0) /* old eeprom definition */ - { + if (priv->EEPROM_Def_Ver == 0) { /* old eeprom definition */ int i; if (bLoad_From_EEPOM) priv->EEPROMTxPowerLevelCCK = (eprom_read(dev, (EEPROM_TxPwIndex_CCK>>1))&0xff) >> 8; @@ -3111,15 +3102,13 @@ static bool rtl8192_adapter_start(struct net_device *dev) // #ifdef TO_DO_LIST if (Adapter->ResetProgress == RESET_TYPE_NORESET) { - if (pMgntInfo->RegRfOff == TRUE) /* User disable RF via registry. */ - { + if (pMgntInfo->RegRfOff == TRUE) { /* User disable RF via registry. */ RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RegRfOff ----------\n")); MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW); // Those actions will be discard in MgntActSet_RF_State because of the same state for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); - } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) /* H/W or S/W RF OFF before sleep. */ - { + } else if (pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) { /* H/W or S/W RF OFF before sleep. */ RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RfOffReason(%d) ----------\n", pMgntInfo->RfOffReason)); MgntActSet_RF_State(Adapter, eRfOff, pMgntInfo->RfOffReason); } else { @@ -3128,8 +3117,7 @@ static bool rtl8192_adapter_start(struct net_device *dev) RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): RF is on ----------\n")); } } else { - if (pHalData->eRFPowerState == eRfOff) - { + if (pHalData->eRFPowerState == eRfOff) { MgntActSet_RF_State(Adapter, eRfOff, pMgntInfo->RfOffReason); // Those actions will be discard in MgntActSet_RF_State because of the same state for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) @@ -3138,8 +3126,7 @@ static bool rtl8192_adapter_start(struct net_device *dev) } #endif //config RF. - if (priv->ResetProgress == RESET_TYPE_NORESET) - { + if (priv->ResetProgress == RESET_TYPE_NORESET) { rtl8192_phy_RFConfig(dev); RT_TRACE(COMP_INIT, "%s():after phy RF config\n", __func__); } @@ -3647,8 +3634,7 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) } 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 */ - { + (!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", __func__, priv->force_reset, priv->ResetProgress, priv->bForcedSilentReset, priv->bDisableNormalResetCheck, ResetType); rtl819x_ifsilentreset(dev); } @@ -3928,8 +3914,7 @@ static u8 HwRateToMRate90(bool bIsHT, u8 rate) u8 ret_rate = 0xff; if (!bIsHT) { - switch (rate) - { + switch (rate) { case DESC90_RATE1M: ret_rate = MGN_1M; break; @@ -3974,8 +3959,7 @@ static u8 HwRateToMRate90(bool bIsHT, u8 rate) } } else { - switch (rate) - { + switch (rate) { case DESC90_RATEMCS0: ret_rate = MGN_MCS0; break; @@ -4058,8 +4042,7 @@ static void UpdateRxPktTimeStamp8190(struct net_device *dev, { struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); - if (stats->bIsAMPDU && !stats->bFirstMPDU) - { + if (stats->bIsAMPDU && !stats->bFirstMPDU) { stats->mac_time[0] = priv->LastRxDescTSFLow; stats->mac_time[1] = priv->LastRxDescTSFHigh; } else { @@ -4250,10 +4233,8 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer, } // <2> Showed on UI for engineering - if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) - { - for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) /* 2 spatial stream */ - { + if (pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) { + for (nspatial_stream = 0; nspatial_stream < 2; nspatial_stream++) { /* 2 spatial stream */ if (pprevious_stats->RxMIMOSignalQuality[nspatial_stream] != -1) { if (priv->stats.rx_evm_percentage[nspatial_stream] == 0) /* initialize */ priv->stats.rx_evm_percentage[nspatial_stream] = pprevious_stats->RxMIMOSignalQuality[nspatial_stream]; @@ -4676,8 +4657,7 @@ UpdateReceivedRateHistogramStatistics8190(struct net_device *dev, else preamble_guardinterval = 0;// long - switch (stats->rate) - { + switch (stats->rate) { // // CCK rate // @@ -5394,8 +5374,7 @@ void EnableHWSecurityConfig8192(struct net_device *dev) ieee->hwsec_active = 1; - if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) /* add hwsec_support flag to totol control hw_sec on/off */ - { + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) { /* add hwsec_support flag to totol control hw_sec on/off */ ieee->hwsec_active = 0; SECR_value &= ~SCR_RxDecEnable; } @@ -5427,16 +5406,14 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, TargetCommand = i+CAM_CONTENT_COUNT*EntryNo; TargetCommand |= BIT31|BIT16; - if (i == 0) /* MAC|Config */ - { + if (i == 0) { /* MAC|Config */ TargetContent = (u32)(*(MacAddr+0)) << 16| (u32)(*(MacAddr+1)) << 24| (u32)usConfig; write_nic_dword(dev, WCAMI, TargetContent); write_nic_dword(dev, RWCAM, TargetCommand); - } else if (i == 1) /* MAC */ - { + } else if (i == 1) { /* MAC */ TargetContent = (u32)(*(MacAddr+2)) | (u32)(*(MacAddr+3)) << 8| (u32)(*(MacAddr+4)) << 16| -- cgit From 2fb1cccc328c80e6370c90624cd7898995294916 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Wed, 11 Jun 2014 10:26:44 -0700 Subject: Staging: rtl8192u: r8192U_core.c Converted a C99 comment to fix code-style error Converted a C99 comment to fix the following error: ERROR: trailing statements should be on next line Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 512bf5cf4063..67c5918b206d 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -1115,7 +1115,7 @@ struct sk_buff *DrvAggr_Aggregation(struct net_device *dev, struct ieee80211_drv tx_fwinfo->TxRate = MRateToHwRate8190Pci(tcb_desc->data_rate); tx_fwinfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur; tx_fwinfo->Short = QueryIsShort(tx_fwinfo->TxHT, tx_fwinfo->TxRate, tcb_desc); - if (tcb_desc->bAMPDUEnable) {//AMPDU enabled + if (tcb_desc->bAMPDUEnable) { /* AMPDU enabled */ tx_fwinfo->AllowAggregation = 1; /* DWORD 1 */ tx_fwinfo->RxMF = tcb_desc->ampdu_factor; -- cgit From 3fe563249374de417618a9fc829a8d95a6ac1631 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sun, 15 Jun 2014 17:14:06 +0200 Subject: staging: rtl8192u: r8192U_core.c: Cleaning up unclear and confusing code Removes confusing and unclear code. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 67c5918b206d..b2731c70db35 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -1237,12 +1237,11 @@ u8 DrvAggr_GetAggregatibleList(struct net_device *dev, struct sk_buff *skb, static void rtl8192_tx_isr(struct urb *tx_urb) { struct sk_buff *skb = (struct sk_buff *)tx_urb->context; - struct net_device *dev = NULL; + struct net_device *dev = (struct net_device *)(skb->cb); struct r8192_priv *priv = NULL; cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); u8 queue_index = tcb_desc->queue_index; - memcpy(&dev, (struct net_device *)(skb->cb), sizeof(struct net_device *)); priv = ieee80211_priv(dev); if (tcb_desc->queue_index != TXCMD_QUEUE) { @@ -1448,7 +1447,7 @@ static void rtl8192_net_update(struct net_device *dev) net = &priv->ieee80211->current_network; rtl8192_config_rate(dev, &rate_config); - priv->basic_rate = rate_config &= 0x15f; + priv->basic_rate = rate_config & 0x15f; write_nic_dword(dev, BSSIDR, ((u32 *)net->bssid)[0]); write_nic_word(dev, BSSIDR+4, ((u16 *)net->bssid)[2]); -- cgit From 836bf241d8062490698e9238e805f7847f3fb179 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 29 May 2014 18:10:27 +0900 Subject: staging: dgap: remove useless dgap_probe1() function The dgap_probe1() function is just calling dgap_found_board(). So it is removed and dgap_found_board() is called directly. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 170d6f3e4221..af78f6f057a9 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -76,7 +76,6 @@ static void dgap_poll_handler(ulong dummy); static int dgap_init_pci(void); static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); static void dgap_remove_one(struct pci_dev *dev); -static int dgap_probe1(struct pci_dev *pdev, int card_type); static int dgap_do_remap(struct board_t *brd); static irqreturn_t dgap_intr(int irq, void *voidbrd); @@ -577,7 +576,7 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return -EIO; - rc = dgap_probe1(pdev, ent->driver_data); + rc = dgap_found_board(pdev, ent->driver_data); if (rc) return rc; @@ -585,11 +584,6 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) return dgap_firmware_load(pdev, ent->driver_data); } -static int dgap_probe1(struct pci_dev *pdev, int card_type) -{ - return dgap_found_board(pdev, card_type); -} - static void dgap_remove_one(struct pci_dev *dev) { /* Do Nothing */ -- cgit From f86c55c9654da49d0bd401634cf679f410dfeb8d Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 29 May 2014 18:11:09 +0900 Subject: staging: dgap: unwind on error in dgap_found_board() Adds a label for "kfree(brd)". And also remove a state value as BOARD_FAILED in brd when dgap_do_remap() is failed. Because "brd" will free after failure. Signed-off-by: Daeseok Youn Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index af78f6f057a9..5556a6ec8a12 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -673,6 +673,7 @@ static int dgap_found_board(struct pci_dev *pdev, int id) struct board_t *brd; unsigned int pci_irq; int i; + int ret; /* get the board structure and prep it */ brd = kzalloc(sizeof(struct board_t), GFP_KERNEL); @@ -728,8 +729,10 @@ static int dgap_found_board(struct pci_dev *pdev, int id) brd->membase_end = pci_resource_end(pdev, 0); } - if (!brd->membase) - return -ENODEV; + if (!brd->membase) { + ret = -ENODEV; + goto free_brd; + } if (brd->membase & 1) brd->membase &= ~3; @@ -770,14 +773,20 @@ static int dgap_found_board(struct pci_dev *pdev, int id) tasklet_init(&brd->helper_tasklet, dgap_poll_tasklet, (unsigned long) brd); - i = dgap_do_remap(brd); - if (i) - brd->state = BOARD_FAILED; + ret = dgap_do_remap(brd); + if (ret) + goto free_brd; pr_info("dgap: board %d: %s (rev %d), irq %ld\n", dgap_numboards, brd->name, brd->rev, brd->irq); return 0; + +free_brd: + kfree(brd); + dgap_board[dgap_numboards] = NULL; + + return ret; } -- cgit From e74c2ddcbbc3ecfc55c246b3da3c5320fe46d8e3 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Mon, 2 Jun 2014 14:06:53 +0900 Subject: staging: dgap: remove bogus null test in dgap_tty_init() - The channels array were set to NULL in dgap_found_board(). - Removes redundant null check for channels array in for loop, if one of the channel cannot be allocated, dgap_tty_init() just returns an error. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 5556a6ec8a12..fcfa061cb5e2 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -1379,12 +1379,10 @@ static int dgap_tty_init(struct board_t *brd) * when the driver was first loaded. */ for (i = 0; i < brd->nasync; i++) { - if (!brd->channels[i]) { - brd->channels[i] = - kzalloc(sizeof(struct channel_t), GFP_KERNEL); - if (!brd->channels[i]) - return -ENOMEM; - } + brd->channels[i] = + kzalloc(sizeof(struct channel_t), GFP_KERNEL); + if (!brd->channels[i]) + return -ENOMEM; } ch = brd->channels[0]; @@ -1398,9 +1396,6 @@ static int dgap_tty_init(struct board_t *brd) /* Set up channel variables */ for (i = 0; i < brd->nasync; i++, ch = brd->channels[i], bs++) { - if (!brd->channels[i]) - continue; - spin_lock_init(&ch->ch_lock); /* Store all our magic numbers */ -- cgit From 551a9d73942b0ffa6cb9fe3bb35936dcc7172281 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Mon, 2 Jun 2014 14:07:46 +0900 Subject: staging: dgap: unwind on error in dgap_tty_init() If the kzalloc() fails for channels, it need to handle that error. It should free channels which were already allocated. And also removes the call to dgap_tty_uninit() in dgap_firmware_load(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index fcfa061cb5e2..8580f4bd229f 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -957,10 +957,8 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) * Do tty device initialization. */ ret = dgap_tty_init(brd); - if (ret < 0) { - dgap_tty_uninit(brd); + if (ret < 0) return ret; - } ret = dgap_tty_register_ports(brd); if (ret) @@ -1330,6 +1328,7 @@ static int dgap_tty_init(struct board_t *brd) struct channel_t *ch; struct bs_t __iomem *bs; struct cm_t __iomem *cm; + int ret; if (!brd) return -EIO; @@ -1381,8 +1380,10 @@ static int dgap_tty_init(struct board_t *brd) for (i = 0; i < brd->nasync; i++) { brd->channels[i] = kzalloc(sizeof(struct channel_t), GFP_KERNEL); - if (!brd->channels[i]) - return -ENOMEM; + if (!brd->channels[i]) { + ret = -ENOMEM; + goto free_chan; + } } ch = brd->channels[0]; @@ -1478,6 +1479,13 @@ static int dgap_tty_init(struct board_t *brd) } return 0; + +free_chan: + while (--i >= 0) { + kfree(brd->channels[i]); + brd->channels[i] = NULL; + } + return ret; } /* -- cgit From 72d0f6fc63fa42ef3b956b2f02f3a10dca1225fe Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Mon, 2 Jun 2014 14:08:24 +0900 Subject: staging: dgap: unwind on error in dgap_tty_register_ports() - The dgap_tty_register_ports() needs to handle if the tty_port_register_device() fails. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 8580f4bd229f..3e716feea5f6 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -4143,6 +4143,7 @@ static int dgap_tty_register_ports(struct board_t *brd) { struct channel_t *ch; int i; + int ret; brd->serial_ports = kcalloc(brd->nasync, sizeof(*brd->serial_ports), GFP_KERNEL); @@ -4152,8 +4153,8 @@ static int dgap_tty_register_ports(struct board_t *brd) brd->printer_ports = kcalloc(brd->nasync, sizeof(*brd->printer_ports), GFP_KERNEL); if (!brd->printer_ports) { - kfree(brd->serial_ports); - return -ENOMEM; + ret = -ENOMEM; + goto free_serial_ports; } for (i = 0; i < brd->nasync; i++) { @@ -4170,6 +4171,11 @@ static int dgap_tty_register_ports(struct board_t *brd) brd->serial_driver, brd->firstminor + i, NULL); + if (IS_ERR(classp)) { + ret = PTR_ERR(classp); + goto unregister_ttys; + } + dgap_create_tty_sysfs(&ch->ch_tun, classp); ch->ch_tun.un_sysfs = classp; @@ -4177,12 +4183,46 @@ static int dgap_tty_register_ports(struct board_t *brd) brd->print_driver, brd->firstminor + i, NULL); + if (IS_ERR(classp)) { + ret = PTR_ERR(classp); + goto unregister_ttys; + } + dgap_create_tty_sysfs(&ch->ch_pun, classp); ch->ch_pun.un_sysfs = classp; } dgap_create_ports_sysfiles(brd); return 0; + +unregister_ttys: + while (i >= 0) { + ch = brd->channels[i]; + if (ch->ch_tun.un_sysfs) { + dgap_remove_tty_sysfs(ch->ch_tun.un_sysfs); + tty_unregister_device(brd->serial_driver, i); + } + + if (ch->ch_pun.un_sysfs) { + dgap_remove_tty_sysfs(ch->ch_pun.un_sysfs); + tty_unregister_device(brd->print_driver, i); + } + i--; + } + + for (i = 0; i < brd->nasync; i++) { + tty_port_destroy(&brd->serial_ports[i]); + tty_port_destroy(&brd->printer_ports[i]); + } + + kfree(brd->printer_ports); + brd->printer_ports = NULL; + +free_serial_ports: + kfree(brd->serial_ports); + brd->serial_ports = NULL; + + return ret; } /* -- cgit From 67987aeb448dcdab08b9a2f09044480828a1f54e Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Mon, 2 Jun 2014 14:09:04 +0900 Subject: staging: dgap: make dgap_config_buf a local buffer The dgap_config_buf is only used in dgap_firmware_load(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 3e716feea5f6..c78c8e2b0882 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -211,7 +211,6 @@ static const struct file_operations dgap_board_fops = { static uint dgap_numboards; static struct board_t *dgap_board[MAXBOARDS]; static ulong dgap_poll_counter; -static char *dgap_config_buf; static int dgap_driver_state = DRIVER_INITIALIZED; static wait_queue_head_t dgap_dl_wait; static int dgap_poll_tick = 20; /* Poll interval - 20 ms */ @@ -823,11 +822,12 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) const struct firmware *fw; char *tmp_ptr; int ret; + char *dgap_config_buf; dgap_get_vpd(brd); dgap_do_reset_board(brd); - if ((fw_info[card_type].conf_name) && !dgap_config_buf) { + if (fw_info[card_type].conf_name) { ret = request_firmware(&fw, fw_info[card_type].conf_name, &pdev->dev); if (ret) { -- cgit From efd96189398626914a2ee016dfece6609bb9d481 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 3 Jun 2014 15:26:53 +0900 Subject: staging: dgap: pass "dgap_numboards" as a paramter to dgap_found_board() - Pass "dgap_numboards" to dgap_found_board() instead of using a global variable. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index c78c8e2b0882..9501a5e45871 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -70,7 +70,7 @@ MODULE_SUPPORTED_DEVICE("dgap"); static int dgap_start(void); static void dgap_init_globals(void); -static int dgap_found_board(struct pci_dev *pdev, int id); +static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum); static void dgap_cleanup_board(struct board_t *brd); static void dgap_poll_handler(ulong dummy); static int dgap_init_pci(void); @@ -575,7 +575,7 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return -EIO; - rc = dgap_found_board(pdev, ent->driver_data); + rc = dgap_found_board(pdev, ent->driver_data, dgap_numboards); if (rc) return rc; @@ -667,7 +667,7 @@ static void dgap_cleanup_board(struct board_t *brd) * * A board has been found, init it. */ -static int dgap_found_board(struct pci_dev *pdev, int id) +static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum) { struct board_t *brd; unsigned int pci_irq; @@ -679,11 +679,11 @@ static int dgap_found_board(struct pci_dev *pdev, int id) if (!brd) return -ENOMEM; - dgap_board[dgap_numboards] = brd; + dgap_board[boardnum] = brd; /* store the info for the board we've found */ brd->magic = DGAP_BOARD_MAGIC; - brd->boardnum = dgap_numboards; + brd->boardnum = boardnum; brd->firstminor = 0; brd->vendor = dgap_pci_tbl[id].vendor; brd->device = dgap_pci_tbl[id].device; @@ -777,13 +777,13 @@ static int dgap_found_board(struct pci_dev *pdev, int id) goto free_brd; pr_info("dgap: board %d: %s (rev %d), irq %ld\n", - dgap_numboards, brd->name, brd->rev, brd->irq); + boardnum, brd->name, brd->rev, brd->irq); return 0; free_brd: kfree(brd); - dgap_board[dgap_numboards] = NULL; + dgap_board[boardnum] = NULL; return ret; } -- cgit From 8148f37b332a7248fbb58dd1ffbcd5dee5627704 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 3 Jun 2014 17:01:31 +0900 Subject: staging: dgap: pass "brd" as a paramter to dgap_after_config_loaded() Pass "brd" to dgap_after_config_loaded() instead of passing "dgap_numboards" and looking up brd again. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 9501a5e45871..358718109767 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -187,7 +187,7 @@ static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len); #ifdef DIGI_CONCENTRATORS_SUPPORTED static void dgap_do_conc_load(struct board_t *brd, u8 *uaddr, int len); #endif -static int dgap_after_config_loaded(int board); +static int dgap_after_config_loaded(struct board_t *brd); static int dgap_finalize_board_init(struct board_t *brd); static void dgap_get_vpd(struct board_t *brd); @@ -859,7 +859,7 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) kfree(dgap_config_buf); } - ret = dgap_after_config_loaded(brd->boardnum); + ret = dgap_after_config_loaded(brd); if (ret) return ret; /* @@ -4113,23 +4113,23 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, } } -static int dgap_after_config_loaded(int board) +static int dgap_after_config_loaded(struct board_t *brd) { /* * Initialize KME waitqueues... */ - init_waitqueue_head(&(dgap_board[board]->kme_wait)); + init_waitqueue_head(&brd->kme_wait); /* * allocate flip buffer for board. */ - dgap_board[board]->flipbuf = kmalloc(MYFLIPLEN, GFP_KERNEL); - if (!dgap_board[board]->flipbuf) + brd->flipbuf = kmalloc(MYFLIPLEN, GFP_KERNEL); + if (!brd->flipbuf) return -ENOMEM; - dgap_board[board]->flipflagbuf = kmalloc(MYFLIPLEN, GFP_KERNEL); - if (!dgap_board[board]->flipflagbuf) { - kfree(dgap_board[board]->flipbuf); + brd->flipflagbuf = kmalloc(MYFLIPLEN, GFP_KERNEL); + if (!brd->flipflagbuf) { + kfree(brd->flipbuf); return -ENOMEM; } -- cgit From f19eda73eaa7eca4804becd96babe630ecf21ed7 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 3 Jun 2014 15:28:08 +0900 Subject: staging: dgap: rename dgap_finalize_board_init() to dgap_request_irq() Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 358718109767..5c149ee3a333 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -188,7 +188,7 @@ static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len); static void dgap_do_conc_load(struct board_t *brd, u8 *uaddr, int len); #endif static int dgap_after_config_loaded(struct board_t *brd); -static int dgap_finalize_board_init(struct board_t *brd); +static int dgap_request_irq(struct board_t *brd); static void dgap_get_vpd(struct board_t *brd); static void dgap_do_reset_board(struct board_t *brd); @@ -789,7 +789,7 @@ free_brd: } -static int dgap_finalize_board_init(struct board_t *brd) +static int dgap_request_irq(struct board_t *brd) { int rc; @@ -887,7 +887,7 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) if (ret) return ret; - ret = dgap_finalize_board_init(brd); + ret = dgap_request_irq(brd); if (ret) return ret; -- cgit From 7bf0a4ccdcc0f961b1185f96efddbfa81e593b56 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 3 Jun 2014 15:28:42 +0900 Subject: staging: dgap: rename dgap_tty_uninit() to dgap_cleanup_tty() - dgap_tty_uninit() doesn't match dgap_tty_init() at all. so rename it. It is just used for cleanup when this module is exited or failed to initialize by dgap_init_module. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 5c149ee3a333..38749d00d316 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -123,7 +123,7 @@ static void dgap_tty_send_xchar(struct tty_struct *tty, char ch); static int dgap_tty_register(struct board_t *brd); static int dgap_tty_init(struct board_t *); -static void dgap_tty_uninit(struct board_t *); +static void dgap_cleanup_tty(struct board_t *); static void dgap_carrier(struct channel_t *ch); static void dgap_input(struct channel_t *ch); @@ -613,7 +613,7 @@ static void dgap_cleanup_module(void) for (i = 0; i < dgap_numboards; ++i) { dgap_remove_ports_sysfiles(dgap_board[i]); - dgap_tty_uninit(dgap_board[i]); + dgap_cleanup_tty(dgap_board[i]); dgap_cleanup_board(dgap_board[i]); } @@ -1489,12 +1489,12 @@ free_chan: } /* - * dgap_tty_uninit() + * dgap_cleanup_tty() * * Uninitialize the TTY portion of this driver. Free all memory and * resources. */ -static void dgap_tty_uninit(struct board_t *brd) +static void dgap_cleanup_tty(struct board_t *brd) { struct device *dev; int i; -- cgit From c7873665bb7c15945e1c2f6a868389ae9975e85f Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:18:04 +0900 Subject: staging: dgap: remove unused paramter in dgap_parsefile() "remove" parameter is not used in dgap_parsefile(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 38749d00d316..c1f2798f4437 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -174,7 +174,7 @@ static void dgap_remove_tty_sysfs(struct device *c); /* * Function prototypes from dgap_parse.h */ -static int dgap_parsefile(char **in, int remove); +static int dgap_parsefile(char **in); static struct cnode *dgap_find_config(int type, int bus, int slot); static uint dgap_config_get_num_prts(struct board_t *bd); static char *dgap_create_config_string(struct board_t *bd, char *string); @@ -852,7 +852,7 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) */ tmp_ptr = dgap_config_buf; - if (dgap_parsefile(&tmp_ptr, TRUE) != 0) { + if (dgap_parsefile(&tmp_ptr) != 0) { kfree(dgap_config_buf); return -EINVAL; } @@ -6427,7 +6427,7 @@ static void dgap_remove_tty_sysfs(struct device *c) /* * Parse a configuration file read into memory as a string. */ -static int dgap_parsefile(char **in, int remove) +static int dgap_parsefile(char **in) { struct cnode *p, *brd, *line, *conc; int rc; -- cgit From 219a40d0992a6aaf9da6f974b9023f1a711dc582 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:19:03 +0900 Subject: staging: dgap: get rid of brd->firstminor because it is 0 firstminor in struct borad_t is always zero, so it can be removed. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 9 ++++----- drivers/staging/dgap/dgap.h | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index c1f2798f4437..352eb1b92db8 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -684,7 +684,6 @@ static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum) /* store the info for the board we've found */ brd->magic = DGAP_BOARD_MAGIC; brd->boardnum = boardnum; - brd->firstminor = 0; brd->vendor = dgap_pci_tbl[id].vendor; brd->device = dgap_pci_tbl[id].device; brd->pdev = pdev; @@ -4168,8 +4167,8 @@ static int dgap_tty_register_ports(struct board_t *brd) struct device *classp; classp = tty_port_register_device(&brd->serial_ports[i], - brd->serial_driver, - brd->firstminor + i, NULL); + brd->serial_driver, + i, NULL); if (IS_ERR(classp)) { ret = PTR_ERR(classp); @@ -4180,8 +4179,8 @@ static int dgap_tty_register_ports(struct board_t *brd) ch->ch_tun.un_sysfs = classp; classp = tty_port_register_device(&brd->printer_ports[i], - brd->print_driver, - brd->firstminor + i, NULL); + brd->print_driver, + i, NULL); if (IS_ERR(classp)) { ret = PTR_ERR(classp); diff --git a/drivers/staging/dgap/dgap.h b/drivers/staging/dgap/dgap.h index 03c020e35f88..c00b2e2ddc8d 100644 --- a/drivers/staging/dgap/dgap.h +++ b/drivers/staging/dgap/dgap.h @@ -529,7 +529,6 @@ struct macounter { struct board_t { int magic; /* Board Magic number. */ int boardnum; /* Board number: 0-3 */ - int firstminor; /* First minor, e.g. 0, 30, 60 */ int type; /* Type of board */ char *name; /* Product Name */ -- cgit From 08f53f61afd1fdba7f50409e6da10b7484c24aa6 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:19:55 +0900 Subject: staging: dgap: introduce dgap_tty_free() for freeing channels. It should be called after dgap_tty_register_ports() is failed. So channels which are allocated in dgap_tty_init() will be freed. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 352eb1b92db8..eab8fd56f55b 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -123,6 +123,7 @@ static void dgap_tty_send_xchar(struct tty_struct *tty, char ch); static int dgap_tty_register(struct board_t *brd); static int dgap_tty_init(struct board_t *); +static void dgap_tty_free(struct board_t *); static void dgap_cleanup_tty(struct board_t *); static void dgap_carrier(struct channel_t *ch); static void dgap_input(struct channel_t *ch); @@ -960,8 +961,10 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) return ret; ret = dgap_tty_register_ports(brd); - if (ret) + if (ret) { + dgap_tty_free(brd); return ret; + } brd->state = BOARD_READY; brd->dpastatus = BD_RUNNING; @@ -1487,6 +1490,18 @@ free_chan: return ret; } +/* + * dgap_tty_free() + * + * Free the channles which are allocated in dgap_tty_init(). + */ +static void dgap_tty_free(struct board_t *brd) +{ + int i; + + for (i = 0; i < brd->nasync; i++) + kfree(brd->channels[i]); +} /* * dgap_cleanup_tty() * -- cgit From 78a7966ec8f3f5d0d7b02fd01af04e960800342e Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:21:04 +0900 Subject: staging: dgap: introduce dgap_free_irq() dgap_free_irq() will free the irq which is requested in dgap_request_irq(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index eab8fd56f55b..497e6f375c05 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -190,6 +190,7 @@ static void dgap_do_conc_load(struct board_t *brd, u8 *uaddr, int len); #endif static int dgap_after_config_loaded(struct board_t *brd); static int dgap_request_irq(struct board_t *brd); +static void dgap_free_irq(struct board_t *brd); static void dgap_get_vpd(struct board_t *brd); static void dgap_do_reset_board(struct board_t *brd); @@ -634,8 +635,7 @@ static void dgap_cleanup_board(struct board_t *brd) if (!brd || brd->magic != DGAP_BOARD_MAGIC) return; - if (brd->intr_used && brd->irq) - free_irq(brd->irq, brd); + dgap_free_irq(brd); tasklet_kill(&brd->helper_tasklet); @@ -816,6 +816,12 @@ static int dgap_request_irq(struct board_t *brd) return 0; } +static void dgap_free_irq(struct board_t *brd) +{ + if (brd->intr_used && brd->irq) + free_irq(brd->irq, brd); +} + static int dgap_firmware_load(struct pci_dev *pdev, int card_type) { struct board_t *brd = dgap_board[dgap_numboards - 1]; -- cgit From 3f7fa94b68a337e7047544c13b1e0a1bfa061644 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:22:05 +0900 Subject: staging: dgap: rename dgap_after_config_loaded() to dgap_alloc_flipbuf() dgap_after_config_loaded() as function name doesn't tell what it does. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 497e6f375c05..721404f1feaf 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -188,7 +188,7 @@ static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len); #ifdef DIGI_CONCENTRATORS_SUPPORTED static void dgap_do_conc_load(struct board_t *brd, u8 *uaddr, int len); #endif -static int dgap_after_config_loaded(struct board_t *brd); +static int dgap_alloc_flipbuf(struct board_t *brd); static int dgap_request_irq(struct board_t *brd); static void dgap_free_irq(struct board_t *brd); @@ -865,7 +865,7 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) kfree(dgap_config_buf); } - ret = dgap_after_config_loaded(brd); + ret = dgap_alloc_flipbuf(brd); if (ret) return ret; /* @@ -4133,7 +4133,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, } } -static int dgap_after_config_loaded(struct board_t *brd) +static int dgap_alloc_flipbuf(struct board_t *brd) { /* * Initialize KME waitqueues... -- cgit From 3c3befef8f5269a23ad44dde0818dbf0b2b0d393 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:22:40 +0900 Subject: staging: dgap: move unrelated functions in dgap_firmware_load() The dgap_firmware_load() has a lot of stuff which are unrelated with loading firmware. So just moved to dgap_init_one(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 70 +++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 721404f1feaf..2ccbd546b623 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -197,7 +197,8 @@ static void dgap_do_reset_board(struct board_t *brd); static int dgap_test_bios(struct board_t *brd); static int dgap_test_fep(struct board_t *brd); static int dgap_tty_register_ports(struct board_t *brd); -static int dgap_firmware_load(struct pci_dev *pdev, int card_type); +static int dgap_firmware_load(struct pci_dev *pdev, int card_type, + struct board_t* brd); static void dgap_cleanup_module(void); @@ -569,6 +570,7 @@ static int dgap_init_pci(void) static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int rc; + struct board_t* brd; if (dgap_numboards >= MAXBOARDS) return -EPERM; @@ -581,8 +583,40 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return rc; - dgap_numboards++; - return dgap_firmware_load(pdev, ent->driver_data); + brd = dgap_board[dgap_numboards++]; + rc = dgap_firmware_load(pdev, ent->driver_data, brd); + if (rc) + return rc; + + rc = dgap_alloc_flipbuf(brd); + if (rc) + return rc; + + rc = dgap_tty_register(brd); + if (rc) + return rc; + + rc = dgap_request_irq(brd); + if (rc) + return rc; + + /* + * Do tty device initialization. + */ + rc = dgap_tty_init(brd); + if (rc < 0) + return rc; + + rc = dgap_tty_register_ports(brd); + if (rc) { + dgap_tty_free(brd); + return rc; + } + + brd->state = BOARD_READY; + brd->dpastatus = BD_RUNNING; + + return 0; } static void dgap_remove_one(struct pci_dev *dev) @@ -822,9 +856,9 @@ static void dgap_free_irq(struct board_t *brd) free_irq(brd->irq, brd); } -static int dgap_firmware_load(struct pci_dev *pdev, int card_type) +static int dgap_firmware_load(struct pci_dev *pdev, int card_type, + struct board_t* brd) { - struct board_t *brd = dgap_board[dgap_numboards - 1]; const struct firmware *fw; char *tmp_ptr; int ret; @@ -865,9 +899,6 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) kfree(dgap_config_buf); } - ret = dgap_alloc_flipbuf(brd); - if (ret) - return ret; /* * Match this board to a config the user created for us. */ @@ -889,14 +920,6 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) return -EINVAL; } - ret = dgap_tty_register(brd); - if (ret) - return ret; - - ret = dgap_request_irq(brd); - if (ret) - return ret; - if (fw_info[card_type].bios_name) { ret = request_firmware(&fw, fw_info[card_type].bios_name, &pdev->dev); @@ -959,21 +982,6 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) release_firmware(fw); } #endif - /* - * Do tty device initialization. - */ - ret = dgap_tty_init(brd); - if (ret < 0) - return ret; - - ret = dgap_tty_register_ports(brd); - if (ret) { - dgap_tty_free(brd); - return ret; - } - - brd->state = BOARD_READY; - brd->dpastatus = BD_RUNNING; return 0; } -- cgit From 91177d53a394a982735262428d2c876df0aaa38d Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 13 Jun 2014 18:23:15 +0900 Subject: staging: dgap: unwind on error in dgap_init_one() The dgap_init_one() needs to handle error properly if one of functions in dgap_init_one() is failed. Introduce some functions for handling error in dgap_init_one() - dgap_tty_unregister() : unregister tty driver - dgap_free_flipbuf() : free flip buffer - dgap_release_remap() : release memory region and unmapped memory. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 53 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 2ccbd546b623..5c8e62201c8d 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -77,6 +77,7 @@ static int dgap_init_pci(void); static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); static void dgap_remove_one(struct pci_dev *dev); static int dgap_do_remap(struct board_t *brd); +static void dgap_release_remap(struct board_t *brd); static irqreturn_t dgap_intr(int irq, void *voidbrd); static int dgap_tty_open(struct tty_struct *tty, struct file *file); @@ -122,6 +123,7 @@ static int dgap_tty_put_char(struct tty_struct *tty, unsigned char c); static void dgap_tty_send_xchar(struct tty_struct *tty, char ch); static int dgap_tty_register(struct board_t *brd); +static void dgap_tty_unregister(struct board_t *brd); static int dgap_tty_init(struct board_t *); static void dgap_tty_free(struct board_t *); static void dgap_cleanup_tty(struct board_t *); @@ -189,6 +191,7 @@ static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len); static void dgap_do_conc_load(struct board_t *brd, u8 *uaddr, int len); #endif static int dgap_alloc_flipbuf(struct board_t *brd); +static void dgap_free_flipbuf(struct board_t *brd); static int dgap_request_irq(struct board_t *brd); static void dgap_free_irq(struct board_t *brd); @@ -586,37 +589,49 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) brd = dgap_board[dgap_numboards++]; rc = dgap_firmware_load(pdev, ent->driver_data, brd); if (rc) - return rc; + goto cleanup_brd; rc = dgap_alloc_flipbuf(brd); if (rc) - return rc; + goto cleanup_brd; rc = dgap_tty_register(brd); if (rc) - return rc; + goto free_flipbuf; rc = dgap_request_irq(brd); if (rc) - return rc; + goto unregister_tty; /* * Do tty device initialization. */ rc = dgap_tty_init(brd); if (rc < 0) - return rc; + goto free_irq; rc = dgap_tty_register_ports(brd); - if (rc) { - dgap_tty_free(brd); - return rc; - } + if (rc) + goto tty_free; brd->state = BOARD_READY; brd->dpastatus = BD_RUNNING; return 0; + +tty_free: + dgap_tty_free(brd); +free_irq: + dgap_free_irq(brd); +unregister_tty: + dgap_tty_unregister(brd); +free_flipbuf: + dgap_free_flipbuf(brd); +cleanup_brd: + dgap_release_remap(brd); + kfree(brd); + dgap_board[--dgap_numboards] = NULL; + return rc; } static void dgap_remove_one(struct pci_dev *dev) @@ -1021,6 +1036,12 @@ static int dgap_do_remap(struct board_t *brd) return 0; } +static void dgap_release_remap(struct board_t *brd) +{ + release_mem_region(brd->membase, 0x200000); + release_mem_region(brd->membase + PCI_IO_OFFSET, 0x200000); + iounmap(brd->re_map_membase); +} /***************************************************************************** * * Function: @@ -1328,6 +1349,14 @@ free_serial_drv: return rc; } +static void dgap_tty_unregister(struct board_t *brd) +{ + tty_unregister_driver(brd->print_driver); + tty_unregister_driver(brd->serial_driver); + put_tty_driver(brd->print_driver); + put_tty_driver(brd->serial_driver); +} + /* * dgap_tty_init() * @@ -4164,6 +4193,12 @@ static int dgap_alloc_flipbuf(struct board_t *brd) return 0; } +static void dgap_free_flipbuf(struct board_t *brd) +{ + kfree(brd->flipbuf); + kfree(brd->flipflagbuf); +} + /* * Create pr and tty device entries */ -- cgit From ec3a2207c322e518f7f42c80e54b8ecaf8a6f03e Mon Sep 17 00:00:00 2001 From: David Daney Date: Thu, 29 May 2014 11:10:02 +0100 Subject: staging: octeon-ethernet: Move PHY activation to .ndo_open(). This prevents PHY not found types of errors for PHY drivers that are probed after the Ethernet driver is probed, because the ifconfig UP is done from userspace after all drivers have been probed. Also avoid the cvmx-helper-board.c PHY code if a real PHY driver is present, this allows a bootloader supplied device tree to specify the PHY information rather than having to modify the code for each different board. Tested-by: Alex Smith Signed-off-by: David Daney Signed-off-by: Alex Smith Cc: devel@driverdev.osuosl.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon/ethernet-mdio.c | 79 +++++++++++++++++++++-------- drivers/staging/octeon/ethernet-rgmii.c | 23 +++++++-- drivers/staging/octeon/ethernet-sgmii.c | 87 ++++++++++++++++++-------------- drivers/staging/octeon/ethernet-xaui.c | 83 ++++++++++++++++++------------ drivers/staging/octeon/ethernet.c | 2 +- drivers/staging/octeon/octeon-ethernet.h | 4 ++ 6 files changed, 181 insertions(+), 97 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c index 3f067f189b3d..ebfa9c9e71b1 100644 --- a/drivers/staging/octeon/ethernet-mdio.c +++ b/drivers/staging/octeon/ethernet-mdio.c @@ -116,7 +116,34 @@ int cvm_oct_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) return phy_mii_ioctl(priv->phydev, rq, cmd); } -static void cvm_oct_adjust_link(struct net_device *dev) +static void cvm_oct_note_carrier(struct octeon_ethernet *priv, + cvmx_helper_link_info_t li) +{ + if (li.s.link_up) { + pr_notice_ratelimited("%s: %u Mbps %s duplex, port %d\n", + netdev_name(priv->netdev), li.s.speed, + (li.s.full_duplex) ? "Full" : "Half", + priv->port); + } else { + pr_notice_ratelimited("%s: Link down\n", + netdev_name(priv->netdev)); + } +} + +void cvm_oct_set_carrier(struct octeon_ethernet *priv, + cvmx_helper_link_info_t link_info) +{ + cvm_oct_note_carrier(priv, link_info); + if (link_info.s.link_up) { + if (!netif_carrier_ok(priv->netdev)) + netif_carrier_on(priv->netdev); + } else { + if (netif_carrier_ok(priv->netdev)) + netif_carrier_off(priv->netdev); + } +} + +void cvm_oct_adjust_link(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); cvmx_helper_link_info_t link_info; @@ -127,28 +154,32 @@ static void cvm_oct_adjust_link(struct net_device *dev) link_info.s.link_up = priv->last_link ? 1 : 0; link_info.s.full_duplex = priv->phydev->duplex ? 1 : 0; link_info.s.speed = priv->phydev->speed; + cvmx_helper_link_set(priv->port, link_info); - if (priv->last_link) { - netif_carrier_on(dev); - if (priv->queue != -1) - printk_ratelimited("%s: %u Mbps %s duplex, " - "port %2d, queue %2d\n", dev->name, - priv->phydev->speed, - priv->phydev->duplex ? "Full" : "Half", - priv->port, priv->queue); - else - printk_ratelimited("%s: %u Mbps %s duplex, " - "port %2d, POW\n", dev->name, - priv->phydev->speed, - priv->phydev->duplex ? "Full" : "Half", - priv->port); - } else { - netif_carrier_off(dev); - printk_ratelimited("%s: Link down\n", dev->name); - } + cvm_oct_note_carrier(priv, link_info); } } +int cvm_oct_common_stop(struct net_device *dev) +{ + struct octeon_ethernet *priv = netdev_priv(dev); + cvmx_helper_link_info_t link_info; + + priv->poll = NULL; + + if (priv->phydev) + phy_disconnect(priv->phydev); + priv->phydev = NULL; + + if (priv->last_link) { + link_info.u64 = 0; + priv->last_link = 0; + + cvmx_helper_link_set(priv->port, link_info); + cvm_oct_note_carrier(priv, link_info); + } + return 0; +} /** * cvm_oct_phy_setup_device - setup the PHY @@ -163,11 +194,11 @@ int cvm_oct_phy_setup_device(struct net_device *dev) struct device_node *phy_node; if (!priv->of_node) - return 0; + goto no_phy; phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0); if (!phy_node) - return 0; + goto no_phy; priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0, PHY_INTERFACE_MODE_GMII); @@ -178,5 +209,11 @@ int cvm_oct_phy_setup_device(struct net_device *dev) priv->last_link = 0; phy_start_aneg(priv->phydev); + return 0; +no_phy: + /* If there is no phy, assume a direct MAC connection and that + * the link is up. + */ + netif_carrier_on(dev); return 0; } diff --git a/drivers/staging/octeon/ethernet-rgmii.c b/drivers/staging/octeon/ethernet-rgmii.c index 0ec0da328215..651be7e1a8a7 100644 --- a/drivers/staging/octeon/ethernet-rgmii.c +++ b/drivers/staging/octeon/ethernet-rgmii.c @@ -36,6 +36,7 @@ #include "ethernet-defines.h" #include "octeon-ethernet.h" #include "ethernet-util.h" +#include "ethernet-mdio.h" #include @@ -302,15 +303,28 @@ int cvm_oct_rgmii_open(struct net_device *dev) int interface = INTERFACE(priv->port); int index = INDEX(priv->port); cvmx_helper_link_info_t link_info; + int rv; + + rv = cvm_oct_phy_setup_device(dev); + if (rv) + return rv; gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); gmx_cfg.s.en = 1; cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); if (!octeon_is_simulation()) { - link_info = cvmx_helper_link_get(priv->port); - if (!link_info.s.link_up) - netif_carrier_off(dev); + if (priv->phydev) { + int r = phy_read_status(priv->phydev); + if (r == 0 && priv->phydev->link == 0) + netif_carrier_off(dev); + cvm_oct_adjust_link(dev); + } else { + link_info = cvmx_helper_link_get(priv->port); + if (!link_info.s.link_up) + netif_carrier_off(dev); + priv->poll = cvm_oct_rgmii_poll; + } } return 0; @@ -326,7 +340,7 @@ int cvm_oct_rgmii_stop(struct net_device *dev) gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); gmx_cfg.s.en = 0; cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); - return 0; + return cvm_oct_common_stop(dev); } static void cvm_oct_rgmii_immediate_poll(struct work_struct *work) @@ -384,7 +398,6 @@ int cvm_oct_rgmii_init(struct net_device *dev) gmx_rx_int_en.s.phy_spd = 1; cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index, interface), gmx_rx_int_en.u64); - priv->poll = cvm_oct_rgmii_poll; } } diff --git a/drivers/staging/octeon/ethernet-sgmii.c b/drivers/staging/octeon/ethernet-sgmii.c index d3e82430eba6..e1878449e683 100644 --- a/drivers/staging/octeon/ethernet-sgmii.c +++ b/drivers/staging/octeon/ethernet-sgmii.c @@ -24,6 +24,7 @@ * This file may also be available under a different license from Cavium. * Contact Cavium Networks for more information **********************************************************************/ +#include #include #include #include @@ -34,45 +35,12 @@ #include "ethernet-defines.h" #include "octeon-ethernet.h" #include "ethernet-util.h" +#include "ethernet-mdio.h" #include #include -int cvm_oct_sgmii_open(struct net_device *dev) -{ - union cvmx_gmxx_prtx_cfg gmx_cfg; - struct octeon_ethernet *priv = netdev_priv(dev); - int interface = INTERFACE(priv->port); - int index = INDEX(priv->port); - cvmx_helper_link_info_t link_info; - - gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); - gmx_cfg.s.en = 1; - cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); - - if (!octeon_is_simulation()) { - link_info = cvmx_helper_link_get(priv->port); - if (!link_info.s.link_up) - netif_carrier_off(dev); - } - - return 0; -} - -int cvm_oct_sgmii_stop(struct net_device *dev) -{ - union cvmx_gmxx_prtx_cfg gmx_cfg; - struct octeon_ethernet *priv = netdev_priv(dev); - int interface = INTERFACE(priv->port); - int index = INDEX(priv->port); - - gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); - gmx_cfg.s.en = 0; - cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); - return 0; -} - static void cvm_oct_sgmii_poll(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); @@ -109,13 +77,58 @@ static void cvm_oct_sgmii_poll(struct net_device *dev) } } -int cvm_oct_sgmii_init(struct net_device *dev) +int cvm_oct_sgmii_open(struct net_device *dev) { + union cvmx_gmxx_prtx_cfg gmx_cfg; struct octeon_ethernet *priv = netdev_priv(dev); + int interface = INTERFACE(priv->port); + int index = INDEX(priv->port); + cvmx_helper_link_info_t link_info; + int rv; + + rv = cvm_oct_phy_setup_device(dev); + if (rv) + return rv; + + gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); + gmx_cfg.s.en = 1; + cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); + + if (octeon_is_simulation()) + return 0; + + if (priv->phydev) { + int r = phy_read_status(priv->phydev); + if (r == 0 && priv->phydev->link == 0) + netif_carrier_off(dev); + cvm_oct_adjust_link(dev); + } else { + link_info = cvmx_helper_link_get(priv->port); + if (!link_info.s.link_up) + netif_carrier_off(dev); + priv->poll = cvm_oct_sgmii_poll; + cvm_oct_sgmii_poll(dev); + } + return 0; +} + +int cvm_oct_sgmii_stop(struct net_device *dev) +{ + union cvmx_gmxx_prtx_cfg gmx_cfg; + struct octeon_ethernet *priv = netdev_priv(dev); + int interface = INTERFACE(priv->port); + int index = INDEX(priv->port); + + gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); + gmx_cfg.s.en = 0; + cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); + return cvm_oct_common_stop(dev); +} + +int cvm_oct_sgmii_init(struct net_device *dev) +{ cvm_oct_common_init(dev); dev->netdev_ops->ndo_stop(dev); - if (!octeon_is_simulation() && priv->phydev == NULL) - priv->poll = cvm_oct_sgmii_poll; /* FIXME: Need autoneg logic */ return 0; diff --git a/drivers/staging/octeon/ethernet-xaui.c b/drivers/staging/octeon/ethernet-xaui.c index 419f8c34ecdf..20b3533ef95c 100644 --- a/drivers/staging/octeon/ethernet-xaui.c +++ b/drivers/staging/octeon/ethernet-xaui.c @@ -24,6 +24,7 @@ * This file may also be available under a different license from Cavium. * Contact Cavium Networks for more information **********************************************************************/ +#include #include #include #include @@ -34,44 +35,12 @@ #include "ethernet-defines.h" #include "octeon-ethernet.h" #include "ethernet-util.h" +#include "ethernet-mdio.h" #include #include -int cvm_oct_xaui_open(struct net_device *dev) -{ - union cvmx_gmxx_prtx_cfg gmx_cfg; - struct octeon_ethernet *priv = netdev_priv(dev); - int interface = INTERFACE(priv->port); - int index = INDEX(priv->port); - cvmx_helper_link_info_t link_info; - - gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); - gmx_cfg.s.en = 1; - cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); - - if (!octeon_is_simulation()) { - link_info = cvmx_helper_link_get(priv->port); - if (!link_info.s.link_up) - netif_carrier_off(dev); - } - return 0; -} - -int cvm_oct_xaui_stop(struct net_device *dev) -{ - union cvmx_gmxx_prtx_cfg gmx_cfg; - struct octeon_ethernet *priv = netdev_priv(dev); - int interface = INTERFACE(priv->port); - int index = INDEX(priv->port); - - gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); - gmx_cfg.s.en = 0; - cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); - return 0; -} - static void cvm_oct_xaui_poll(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); @@ -108,6 +77,54 @@ static void cvm_oct_xaui_poll(struct net_device *dev) } } +int cvm_oct_xaui_open(struct net_device *dev) +{ + union cvmx_gmxx_prtx_cfg gmx_cfg; + struct octeon_ethernet *priv = netdev_priv(dev); + int interface = INTERFACE(priv->port); + int index = INDEX(priv->port); + cvmx_helper_link_info_t link_info; + int rv; + + rv = cvm_oct_phy_setup_device(dev); + if (rv) + return rv; + + gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); + gmx_cfg.s.en = 1; + cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); + + if (octeon_is_simulation()) + return 0; + + if (priv->phydev) { + int r = phy_read_status(priv->phydev); + if (r == 0 && priv->phydev->link == 0) + netif_carrier_off(dev); + cvm_oct_adjust_link(dev); + } else { + link_info = cvmx_helper_link_get(priv->port); + if (!link_info.s.link_up) + netif_carrier_off(dev); + priv->poll = cvm_oct_xaui_poll; + cvm_oct_xaui_poll(dev); + } + return 0; +} + +int cvm_oct_xaui_stop(struct net_device *dev) +{ + union cvmx_gmxx_prtx_cfg gmx_cfg; + struct octeon_ethernet *priv = netdev_priv(dev); + int interface = INTERFACE(priv->port); + int index = INDEX(priv->port); + + gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface)); + gmx_cfg.s.en = 0; + cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); + return cvm_oct_common_stop(dev); +} + int cvm_oct_xaui_init(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c index da9dd6bc5660..2aa723562155 100644 --- a/drivers/staging/octeon/ethernet.c +++ b/drivers/staging/octeon/ethernet.c @@ -471,7 +471,6 @@ int cvm_oct_common_init(struct net_device *dev) dev->features |= NETIF_F_LLTX; dev->ethtool_ops = &cvm_oct_ethtool_ops; - cvm_oct_phy_setup_device(dev); cvm_oct_set_mac_filter(dev); dev->netdev_ops->ndo_change_mtu(dev, dev->mtu); @@ -722,6 +721,7 @@ static int cvm_oct_probe(struct platform_device *pdev) /* Initialize the device private structure. */ priv = netdev_priv(dev); + priv->netdev = dev; priv->of_node = cvm_oct_node_for_port(pip, interface, port_index); diff --git a/drivers/staging/octeon/octeon-ethernet.h b/drivers/staging/octeon/octeon-ethernet.h index 4cf3884070fa..d0e321119914 100644 --- a/drivers/staging/octeon/octeon-ethernet.h +++ b/drivers/staging/octeon/octeon-ethernet.h @@ -44,6 +44,8 @@ struct octeon_ethernet { int queue; /* Hardware fetch and add to count outstanding tx buffers */ int fau; + /* My netdev. */ + struct net_device *netdev; /* * Type of port. This is one of the enums in * cvmx_helper_interface_mode_t @@ -85,6 +87,8 @@ extern int cvm_oct_xaui_stop(struct net_device *dev); extern int cvm_oct_common_init(struct net_device *dev); extern void cvm_oct_common_uninit(struct net_device *dev); +void cvm_oct_adjust_link(struct net_device *dev); +int cvm_oct_common_stop(struct net_device *dev); extern int always_use_pow; extern int pow_send_group; -- cgit From 883d29e0a69aced93c84cb5e9242a31ab5debe75 Mon Sep 17 00:00:00 2001 From: Nicolas Koch Date: Tue, 3 Jun 2014 21:56:31 +0200 Subject: Staging: octeon: minor style cleanups Done as task 10 of the eudyptula challenge. Signed-off-by: Nicolas Koch Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon/ethernet-mem.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon/ethernet-mem.c b/drivers/staging/octeon/ethernet-mem.c index bf666b023190..964da860f4c4 100644 --- a/drivers/staging/octeon/ethernet-mem.c +++ b/drivers/staging/octeon/ethernet-mem.c @@ -46,9 +46,10 @@ static int cvm_oct_fill_hw_skbuff(int pool, int size, int elements) { int freed = elements; - while (freed) { + while (freed) { struct sk_buff *skb = dev_alloc_skb(size + 256); + if (unlikely(skb == NULL)) break; skb_reserve(skb, 256 - (((unsigned long)skb->data) & 0x7f)); @@ -81,10 +82,10 @@ static void cvm_oct_free_hw_skbuff(int pool, int size, int elements) if (elements < 0) pr_warn("Freeing of pool %u had too many skbuffs (%d)\n", - pool, elements); + pool, elements); else if (elements > 0) pr_warn("Freeing of pool %u is missing %d skbuffs\n", - pool, elements); + pool, elements); } /** @@ -115,7 +116,7 @@ static int cvm_oct_fill_hw_memory(int pool, int size, int elements) memory = kmalloc(size + 256, GFP_ATOMIC); if (unlikely(memory == NULL)) { pr_warn("Unable to allocate %u bytes for FPA pool %d\n", - elements * size, pool); + elements * size, pool); break; } fpa = (char *)(((unsigned long)memory + 256) & ~0x7fUL); @@ -136,6 +137,7 @@ static void cvm_oct_free_hw_memory(int pool, int size, int elements) { char *memory; char *fpa; + do { fpa = cvmx_fpa_alloc(pool); if (fpa) { @@ -157,6 +159,7 @@ static void cvm_oct_free_hw_memory(int pool, int size, int elements) int cvm_oct_mem_fill_fpa(int pool, int size, int elements) { int freed; + if (USE_SKBUFFS_IN_HW && pool == CVMX_FPA_PACKET_POOL) freed = cvm_oct_fill_hw_skbuff(pool, size, elements); else -- cgit From ed8d4a84a39774e2b030f20d684a6f164b61056f Mon Sep 17 00:00:00 2001 From: Fengguang Wu Date: Thu, 19 Jun 2014 15:26:29 -0700 Subject: staging: r8192ee: fix coccinelle warnings drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c:2491:3-4: Unneeded semicolon Removes unneeded semicolon. Generated by: /kbuild/src/linux/scripts/coccinelle/misc/semicolon.cocci CC: Larry Finger Signed-off-by: Fengguang Wu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c b/drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c index 7fb590739014..244d5599e0dc 100644 --- a/drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c +++ b/drivers/staging/rtl8192ee/btcoexist/halbtc8821a2ant.c @@ -2488,7 +2488,7 @@ static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) } else { sw_mechanism1(btcoexist, true, false, false, false); sw_mechanism2(btcoexist, false, false, false, 0x18); - }; + } } else { /* fw mechanism */ if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || -- cgit From d6158c2cea6a2810daae4c02262d0a6cb5a782b3 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:41 +0530 Subject: staging: rtl8188eu: Remove "silentreset_mutex" from struct sreset_priv silentreset_mutex initialized but not being used. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_sreset.c | 1 - drivers/staging/rtl8188eu/include/rtw_sreset.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index ee20d4ad004f..b7b787e3ba70 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -25,7 +25,6 @@ void sreset_init_value(struct adapter *padapter) struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); struct sreset_priv *psrtpriv = &pHalData->srestpriv; - mutex_init(&psrtpriv->silentreset_mutex); psrtpriv->silent_reset_inprogress = false; psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; psrtpriv->last_tx_time = 0; diff --git a/drivers/staging/rtl8188eu/include/rtw_sreset.h b/drivers/staging/rtl8188eu/include/rtw_sreset.h index 2a1244f75790..fbfdffb4713f 100644 --- a/drivers/staging/rtl8188eu/include/rtw_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtw_sreset.h @@ -24,7 +24,6 @@ #include struct sreset_priv { - struct mutex silentreset_mutex; u8 silent_reset_inprogress; u8 Wifi_Error_Status; unsigned long last_tx_time; -- cgit From b6d89f2fc3d5aa8c4e8b1f38ce2a63fec3a4ad99 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:42 +0530 Subject: staging: rtl8188eu:Remove "silent_reset_inprogress" from struct sreset_priv psrtpriv->silent_reset_inprogress is always false. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_sreset.c | 4 ---- drivers/staging/rtl8188eu/include/rtw_sreset.h | 1 - 2 files changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index b7b787e3ba70..434c4336f048 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -25,7 +25,6 @@ void sreset_init_value(struct adapter *padapter) struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); struct sreset_priv *psrtpriv = &pHalData->srestpriv; - psrtpriv->silent_reset_inprogress = false; psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; @@ -35,7 +34,6 @@ void sreset_reset_value(struct adapter *padapter) struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); struct sreset_priv *psrtpriv = &pHalData->srestpriv; - psrtpriv->silent_reset_inprogress = false; psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; @@ -49,8 +47,6 @@ u8 sreset_get_wifi_status(struct adapter *padapter) u8 status = WIFI_STATUS_SUCCESS; u32 val32 = 0; - if (psrtpriv->silent_reset_inprogress) - return status; val32 = rtw_read32(padapter, REG_TXDMA_STATUS); if (val32 == 0xeaeaeaea) { psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST; diff --git a/drivers/staging/rtl8188eu/include/rtw_sreset.h b/drivers/staging/rtl8188eu/include/rtw_sreset.h index fbfdffb4713f..8474180222bd 100644 --- a/drivers/staging/rtl8188eu/include/rtw_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtw_sreset.h @@ -24,7 +24,6 @@ #include struct sreset_priv { - u8 silent_reset_inprogress; u8 Wifi_Error_Status; unsigned long last_tx_time; unsigned long last_tx_complete_time; -- cgit From 6c9118340953ffcd95d937eb43b564d8716bfd88 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:43 +0530 Subject: staging: rtl8188eu: Use rtw_hal_sreset_init() in rtw_reset_drv_sw() We can replace rtw_hal_sreset_reset_value() with rtw_hal_sreset_init() because both function call sreset_reset_value() and sreset_init_value() respectively at the end of code path, and function defination of sreset_reset_value() and sreset_init_value() is identical. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 0e0c32d46431..6fe32f0bb9ff 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -837,8 +837,7 @@ u8 rtw_reset_drv_sw(struct adapter *padapter) pmlmepriv->LinkDetectInfo.bBusyTraffic = false; _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING); - - rtw_hal_sreset_reset_value(padapter); + rtw_hal_sreset_init(padapter); pwrctrlpriv->pwr_state_check_cnts = 0; /* mlmeextpriv */ -- cgit From 5712f087fa2cf24da4ebfe307b8f861800384537 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:44 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_hal_sreset_reset_value() Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 6 ------ drivers/staging/rtl8188eu/include/hal_intf.h | 1 - 2 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index d0ac4a183335..699775b5f1f1 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -380,12 +380,6 @@ void rtw_hal_sreset_reset(struct adapter *adapt) adapt->HalFunc.silentreset(adapt); } -void rtw_hal_sreset_reset_value(struct adapter *adapt) -{ - if (adapt->HalFunc.sreset_reset_value) - adapt->HalFunc.sreset_reset_value(adapt); -} - void rtw_hal_sreset_xmit_status_check(struct adapter *adapt) { if (adapt->HalFunc.sreset_xmit_status_check) diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index c59fccde39c5..fff349ffba99 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -369,7 +369,6 @@ void rtw_hal_antdiv_rssi_compared(struct adapter *padapter, void rtw_hal_sreset_init(struct adapter *padapter); void rtw_hal_sreset_reset(struct adapter *padapter); -void rtw_hal_sreset_reset_value(struct adapter *padapter); void rtw_hal_sreset_xmit_status_check(struct adapter *padapter); void rtw_hal_sreset_linked_status_check(struct adapter *padapter); u8 rtw_hal_sreset_get_wifi_status(struct adapter *padapter); -- cgit From 41dcb4f1db13ba3f38476ffbdc58e9bf066515d8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:45 +0530 Subject: staging: rtl8188eu: Remove unused function pointer ->sreset_reset_value Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 1 - drivers/staging/rtl8188eu/include/hal_intf.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 5a22c6df4d06..070b43cc9984 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1872,7 +1872,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; pHalFunc->sreset_init_value = &sreset_init_value; - pHalFunc->sreset_reset_value = &sreset_reset_value; pHalFunc->silentreset = &rtl8188e_silentreset_for_specific_platform; pHalFunc->sreset_xmit_status_check = &rtl8188e_sreset_xmit_status_check; pHalFunc->sreset_linked_status_check = &rtl8188e_sreset_linked_status_check; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index fff349ffba99..734e9357234c 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -252,7 +252,6 @@ struct hal_ops { u8 word_en, u8 *data, bool test); void (*sreset_init_value)(struct adapter *padapter); - void (*sreset_reset_value)(struct adapter *padapter); void (*silentreset)(struct adapter *padapter); void (*sreset_xmit_status_check)(struct adapter *padapter); void (*sreset_linked_status_check) (struct adapter *padapter); -- cgit From f23a80273b4dfa7accfd5937f188343f1eff05cb Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:46 +0530 Subject: staging: rtl8188eu: Remove unused function reset_reset_value() Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_sreset.c | 9 --------- drivers/staging/rtl8188eu/include/rtw_sreset.h | 1 - 2 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index 434c4336f048..5bc8fe008b9b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -29,15 +29,6 @@ void sreset_init_value(struct adapter *padapter) psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; } -void sreset_reset_value(struct adapter *padapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); - struct sreset_priv *psrtpriv = &pHalData->srestpriv; - - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; - psrtpriv->last_tx_time = 0; - psrtpriv->last_tx_complete_time = 0; -} u8 sreset_get_wifi_status(struct adapter *padapter) { diff --git a/drivers/staging/rtl8188eu/include/rtw_sreset.h b/drivers/staging/rtl8188eu/include/rtw_sreset.h index 8474180222bd..af01972b7979 100644 --- a/drivers/staging/rtl8188eu/include/rtw_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtw_sreset.h @@ -41,7 +41,6 @@ struct sreset_priv { #define WIFI_IF_NOT_EXIST BIT6 void sreset_init_value(struct adapter *padapter); -void sreset_reset_value(struct adapter *padapter); u8 sreset_get_wifi_status(struct adapter *padapter); void sreset_set_wifi_error_status(struct adapter *padapter, u32 status); -- cgit From 0d9c69b747f99e544d747a1c87d24d4591183d9f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:47 +0530 Subject: staging: rtl8188eu: Remove function rtw_hal_sreset_xmit_status_check() rtw_hal_sreset_xmit_status_check() is a wrapper to call rtl8188e_sreset_xmit_status_check(), which calls rtl8188e_silentreset_for_specific_platform() in case of transmission has stopped to do a silent reset and restore the transmission but rtl8188e_silentreset_for_specific_platform() has empty defination, so we can remove rtw_hal_sreset_xmit_status_check() because it doesn't serve its purpose. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 -- drivers/staging/rtl8188eu/hal/hal_intf.c | 6 ------ drivers/staging/rtl8188eu/include/hal_intf.h | 1 - 3 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 1e0b8b49fc12..25f1c36e59b0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1542,8 +1542,6 @@ static void dynamic_chk_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz) expire_timeout_chk(padapter); #endif - rtw_hal_sreset_xmit_status_check(padapter); - linked_status_chk(padapter); traffic_status_watchdog(padapter); diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 699775b5f1f1..cf03d9ce6333 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -380,12 +380,6 @@ void rtw_hal_sreset_reset(struct adapter *adapt) adapt->HalFunc.silentreset(adapt); } -void rtw_hal_sreset_xmit_status_check(struct adapter *adapt) -{ - if (adapt->HalFunc.sreset_xmit_status_check) - adapt->HalFunc.sreset_xmit_status_check(adapt); -} - void rtw_hal_sreset_linked_status_check(struct adapter *adapt) { if (adapt->HalFunc.sreset_linked_status_check) diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 734e9357234c..eb7df0e49d4c 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -368,7 +368,6 @@ void rtw_hal_antdiv_rssi_compared(struct adapter *padapter, void rtw_hal_sreset_init(struct adapter *padapter); void rtw_hal_sreset_reset(struct adapter *padapter); -void rtw_hal_sreset_xmit_status_check(struct adapter *padapter); void rtw_hal_sreset_linked_status_check(struct adapter *padapter); u8 rtw_hal_sreset_get_wifi_status(struct adapter *padapter); -- cgit From e654a532b470fe957be9b081d7fee6d254bbf092 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:48 +0530 Subject: staging: rtl8188eu: Remove unused function rtl8188e_sreset_xmit_status_check() Remove rtl8188e_sreset_xmit_status_check() and function pointer ->sreset_xmit_status_check pointing to it. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c | 35 ---------------------- drivers/staging/rtl8188eu/include/hal_intf.h | 1 - .../staging/rtl8188eu/include/rtl8188e_sreset.h | 1 - 4 files changed, 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 070b43cc9984..55eaf578b77a 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1873,7 +1873,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->silentreset = &rtl8188e_silentreset_for_specific_platform; - pHalFunc->sreset_xmit_status_check = &rtl8188e_sreset_xmit_status_check; pHalFunc->sreset_linked_status_check = &rtl8188e_sreset_linked_status_check; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c index 047b53482e67..fd114c1e14b9 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c @@ -26,41 +26,6 @@ void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter) { } -void rtl8188e_sreset_xmit_status_check(struct adapter *padapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); - struct sreset_priv *psrtpriv = &pHalData->srestpriv; - - unsigned long current_time; - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - unsigned int diff_time; - u32 txdma_status; - - txdma_status = rtw_read32(padapter, REG_TXDMA_STATUS); - if (txdma_status != 0x00) { - DBG_88E("%s REG_TXDMA_STATUS:0x%08x\n", __func__, txdma_status); - rtw_write32(padapter, REG_TXDMA_STATUS, txdma_status); - rtl8188e_silentreset_for_specific_platform(padapter); - } - /* total xmit irp = 4 */ - current_time = jiffies; - if (0 == pxmitpriv->free_xmitbuf_cnt) { - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_time); - - if (diff_time > 2000) { - if (psrtpriv->last_tx_complete_time == 0) { - psrtpriv->last_tx_complete_time = current_time; - } else { - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_complete_time); - if (diff_time > 4000) { - DBG_88E("%s tx hang\n", __func__); - rtl8188e_silentreset_for_specific_platform(padapter); - } - } - } - } -} - void rtl8188e_sreset_linked_status_check(struct adapter *padapter) { u32 rx_dma_status = 0; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index eb7df0e49d4c..85fd521c2092 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -253,7 +253,6 @@ struct hal_ops { void (*sreset_init_value)(struct adapter *padapter); void (*silentreset)(struct adapter *padapter); - void (*sreset_xmit_status_check)(struct adapter *padapter); void (*sreset_linked_status_check) (struct adapter *padapter); u8 (*sreset_get_wifi_status)(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h index a29e69519794..d4f0d7213e0d 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h @@ -25,7 +25,6 @@ #include void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter); -void rtl8188e_sreset_xmit_status_check(struct adapter *padapter); void rtl8188e_sreset_linked_status_check(struct adapter *padapter); #endif -- cgit From 5019fd1b59e7c49572db0e4e1f8e4c929670c914 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:49 +0530 Subject: staging:rtl8188eu: Remove function rtw_hal_sreset_linked_status_check() rtw_hal_sreset_linked_status_check() is a wrapper to call rtl8188e_sreset_linked_status_check(), which doesn't do anything useful. rtl8188e_sreset_linked_status_check() will also be removed later. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 2 -- drivers/staging/rtl8188eu/hal/hal_intf.c | 6 ------ drivers/staging/rtl8188eu/include/hal_intf.h | 1 - 3 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index f5b49f351a6a..b2a12512202a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -7549,8 +7549,6 @@ void linked_status_chk(struct adapter *padapter) if (padapter->bRxRSSIDisplay) _linked_rx_signal_strehgth_display(padapter); - rtw_hal_sreset_linked_status_check(padapter); - if (is_client_associated_to_ap(padapter)) { /* linked infrastructure client mode */ diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index cf03d9ce6333..7499ceb3a6e5 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -380,12 +380,6 @@ void rtw_hal_sreset_reset(struct adapter *adapt) adapt->HalFunc.silentreset(adapt); } -void rtw_hal_sreset_linked_status_check(struct adapter *adapt) -{ - if (adapt->HalFunc.sreset_linked_status_check) - adapt->HalFunc.sreset_linked_status_check(adapt); -} - u8 rtw_hal_sreset_get_wifi_status(struct adapter *adapt) { u8 status = 0; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 85fd521c2092..5d67e906b381 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -367,7 +367,6 @@ void rtw_hal_antdiv_rssi_compared(struct adapter *padapter, void rtw_hal_sreset_init(struct adapter *padapter); void rtw_hal_sreset_reset(struct adapter *padapter); -void rtw_hal_sreset_linked_status_check(struct adapter *padapter); u8 rtw_hal_sreset_get_wifi_status(struct adapter *padapter); int rtw_hal_iol_cmd(struct adapter *adapter, struct xmit_frame *xmit_frame, -- cgit From d5156e2aae988d9d14d9cea940154eb184e508fd Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:50 +0530 Subject: staging:rtl8188eu: Remove function rtl8188e_sreset_linked_status_check() Remove rtl8188e_sreset_linked_status_check() and function pointer ->sreset_linked_status_check pointing to it. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c | 17 ----------------- drivers/staging/rtl8188eu/include/hal_intf.h | 1 - drivers/staging/rtl8188eu/include/rtl8188e_sreset.h | 1 - 4 files changed, 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 55eaf578b77a..a0f517244d64 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1873,7 +1873,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->silentreset = &rtl8188e_silentreset_for_specific_platform; - pHalFunc->sreset_linked_status_check = &rtl8188e_sreset_linked_status_check; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; pHalFunc->GetHalODMVarHandler = &rtl8188e_GetHalODMVar; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c index fd114c1e14b9..7fb0f68640d7 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c @@ -26,20 +26,3 @@ void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter) { } -void rtl8188e_sreset_linked_status_check(struct adapter *padapter) -{ - u32 rx_dma_status = 0; - u8 fw_status = 0; - rx_dma_status = rtw_read32(padapter, REG_RXDMA_STATUS); - if (rx_dma_status != 0x00) { - DBG_88E("%s REG_RXDMA_STATUS:0x%08x\n", __func__, rx_dma_status); - rtw_write32(padapter, REG_RXDMA_STATUS, rx_dma_status); - } - fw_status = rtw_read8(padapter, REG_FMETHR); - if (fw_status != 0x00) { - if (fw_status == 1) - DBG_88E("%s REG_FW_STATUS (0x%02x), Read_Efuse_Fail !!\n", __func__, fw_status); - else if (fw_status == 2) - DBG_88E("%s REG_FW_STATUS (0x%02x), Condition_No_Match !!\n", __func__, fw_status); - } -} diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 5d67e906b381..c3f94d8ad2a5 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -253,7 +253,6 @@ struct hal_ops { void (*sreset_init_value)(struct adapter *padapter); void (*silentreset)(struct adapter *padapter); - void (*sreset_linked_status_check) (struct adapter *padapter); u8 (*sreset_get_wifi_status)(struct adapter *padapter); int (*IOL_exec_cmds_sync)(struct adapter *padapter, diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h index d4f0d7213e0d..eb884b7fd2c4 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h @@ -25,6 +25,5 @@ #include void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter); -void rtl8188e_sreset_linked_status_check(struct adapter *padapter); #endif -- cgit From b9e91a578bcfbcccfd8ce3962315c67bd894df1b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:51 +0530 Subject: staging: rtl8188eu: Remove function rtw_hal_sreset_reset() rtw_hal_sreset_reset() is a wrapper to call rtl8188e_silentreset_for_specific_platform(), which has empty defination. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 2 -- drivers/staging/rtl8188eu/hal/hal_intf.c | 6 ------ drivers/staging/rtl8188eu/include/hal_intf.h | 1 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 4 ---- 4 files changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 155282ef78fb..260243b6cb74 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -804,8 +804,6 @@ void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf) rtw_os_xmit_schedule(adapter); pmlmeext = &adapter->mlmeextpriv; - if (pmlmeext->sitesurvey_res.bss_cnt == 0) - rtw_hal_sreset_reset(adapter); } void rtw_dummy_event_callback(struct adapter *adapter , u8 *pbuf) diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 7499ceb3a6e5..1afc56690c3c 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -374,12 +374,6 @@ void rtw_hal_sreset_init(struct adapter *adapt) adapt->HalFunc.sreset_init_value(adapt); } -void rtw_hal_sreset_reset(struct adapter *adapt) -{ - if (adapt->HalFunc.silentreset) - adapt->HalFunc.silentreset(adapt); -} - u8 rtw_hal_sreset_get_wifi_status(struct adapter *adapt) { u8 status = 0; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index c3f94d8ad2a5..bed90354e92a 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -365,7 +365,6 @@ void rtw_hal_antdiv_rssi_compared(struct adapter *padapter, struct wlan_bssid_ex *src); void rtw_hal_sreset_init(struct adapter *padapter); -void rtw_hal_sreset_reset(struct adapter *padapter); u8 rtw_hal_sreset_get_wifi_status(struct adapter *padapter); int rtw_hal_iol_cmd(struct adapter *adapter, struct xmit_frame *xmit_frame, diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index f04aaa375f0e..97f8b3e0b418 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -4449,10 +4449,6 @@ static int rtw_dbg_port(struct net_device *dev, } break; case 0x0f: - if (extra_arg == 0) { - DBG_88E("###### silent reset test.......#####\n"); - rtw_hal_sreset_reset(padapter); - } break; case 0x15: { -- cgit From 5365edb331cf21e6ea81127d6da1f7100fc4610c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:52 +0530 Subject: staging: rtl8188eu: Remove function rtl8188e_silentreset_for_specific_platform() Remove rtl8188e_silentreset_for_specific_platform() and function pointer ->silentreset pointing to it. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c | 3 --- drivers/staging/rtl8188eu/include/hal_intf.h | 1 - drivers/staging/rtl8188eu/include/rtl8188e_sreset.h | 1 - 4 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index a0f517244d64..6a9c8e23f267 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1872,7 +1872,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; pHalFunc->sreset_init_value = &sreset_init_value; - pHalFunc->silentreset = &rtl8188e_silentreset_for_specific_platform; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; pHalFunc->GetHalODMVarHandler = &rtl8188e_GetHalODMVar; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c index 7fb0f68640d7..f907fe047b81 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c @@ -22,7 +22,4 @@ #include #include -void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter) -{ -} diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index bed90354e92a..ca29676d09df 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -252,7 +252,6 @@ struct hal_ops { u8 word_en, u8 *data, bool test); void (*sreset_init_value)(struct adapter *padapter); - void (*silentreset)(struct adapter *padapter); u8 (*sreset_get_wifi_status)(struct adapter *padapter); int (*IOL_exec_cmds_sync)(struct adapter *padapter, diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h index eb884b7fd2c4..cade6d77603d 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h @@ -24,6 +24,5 @@ #include #include -void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter); #endif -- cgit From a70e40344608610f2692e7fc865614795a1a6b73 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:53 +0530 Subject: staging: rtl8188eu: Remove empty files rtl8188e_sreset.[c|h] Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c | 25 ------------------- drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 3 +-- .../staging/rtl8188eu/include/rtl8188e_sreset.h | 28 ---------------------- 4 files changed, 1 insertion(+), 56 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c delete mode 100644 drivers/staging/rtl8188eu/include/rtl8188e_sreset.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 6a138ff699e9..260c635af645 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -44,7 +44,6 @@ r8188eu-y := \ hal/rtl8188e_phycfg.o \ hal/rtl8188e_rf6052.o \ hal/rtl8188e_rxdesc.o \ - hal/rtl8188e_sreset.o \ hal/rtl8188e_xmit.o \ hal/rtl8188eu_led.o \ hal/rtl8188eu_recv.o \ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c b/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c deleted file mode 100644 index f907fe047b81..000000000000 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_sreset.c +++ /dev/null @@ -1,25 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTL8188E_SRESET_C_ - -#include -#include - - diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index fe3b4545cdbb..c7fef7af9864 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -31,9 +31,8 @@ #include "rtl8188e_xmit.h" #include "rtl8188e_cmd.h" #include "Hal8188EPwrSeq.h" -#include "rtl8188e_sreset.h" #include "rtw_efuse.h" - +#include "rtw_sreset.h" #include "odm_precomp.h" /* Fw Array */ diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h b/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h deleted file mode 100644 index cade6d77603d..000000000000 --- a/drivers/staging/rtl8188eu/include/rtl8188e_sreset.h +++ /dev/null @@ -1,28 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTL8188E_SRESET_H_ -#define _RTL8188E_SRESET_H_ - -#include -#include -#include - - -#endif -- cgit From 5ceabcb2afc69f011bfad423fa17ec8179377217 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:54 +0530 Subject: staging: rtl8188eu: Remove "last_tx_time" from struct sreset_priv value stored in variable last_tx_time isn't being used by driver. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_sreset.c | 1 - drivers/staging/rtl8188eu/include/rtw_sreset.h | 1 - drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 6 +----- 3 files changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index 5bc8fe008b9b..cc21f3dbce59 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -26,7 +26,6 @@ void sreset_init_value(struct adapter *padapter) struct sreset_priv *psrtpriv = &pHalData->srestpriv; psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; - psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; } diff --git a/drivers/staging/rtl8188eu/include/rtw_sreset.h b/drivers/staging/rtl8188eu/include/rtw_sreset.h index af01972b7979..6cf792f95724 100644 --- a/drivers/staging/rtl8188eu/include/rtw_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtw_sreset.h @@ -25,7 +25,6 @@ struct sreset_priv { u8 Wifi_Error_Status; - unsigned long last_tx_time; unsigned long last_tx_complete_time; }; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index ba2a8ab80d77..4622efaf3e53 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -216,11 +216,7 @@ u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) pxmitbuf);/* context is pxmitbuf */ status = usb_submit_urb(purb, GFP_ATOMIC); - if (!status) { - struct hal_data_8188e *haldata = GET_HAL_DATA(padapter); - - haldata->srestpriv.last_tx_time = jiffies; - } else { + if (status) { rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR); DBG_88E("usb_write_port, status =%d\n", status); RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_write_port(): usb_submit_urb, status =%x\n", status)); -- cgit From a4027847f615a87c9bd20d3bc7c19eec571e28a3 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:55 +0530 Subject: staging: rtl8188eu: Remove "last_tx_complete_time" from struct sreset_priv value stored in variable last_tx_complete_time isn't being used by driver. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_sreset.c | 1 - drivers/staging/rtl8188eu/include/rtw_sreset.h | 1 - drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 5 ----- 3 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index cc21f3dbce59..3b846d3577c9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -26,7 +26,6 @@ void sreset_init_value(struct adapter *padapter) struct sreset_priv *psrtpriv = &pHalData->srestpriv; psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; - psrtpriv->last_tx_complete_time = 0; } u8 sreset_get_wifi_status(struct adapter *padapter) diff --git a/drivers/staging/rtl8188eu/include/rtw_sreset.h b/drivers/staging/rtl8188eu/include/rtw_sreset.h index 6cf792f95724..580e850511a7 100644 --- a/drivers/staging/rtl8188eu/include/rtw_sreset.h +++ b/drivers/staging/rtl8188eu/include/rtw_sreset.h @@ -25,7 +25,6 @@ struct sreset_priv { u8 Wifi_Error_Status; - unsigned long last_tx_complete_time; }; #include diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 4622efaf3e53..0b5fbb928018 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -71,8 +71,6 @@ static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs) struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context; struct adapter *padapter = pxmitbuf->padapter; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct hal_data_8188e *haldata; - switch (pxmitbuf->flags) { case VO_QUEUE_INX: @@ -137,9 +135,6 @@ static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs) } } - haldata = GET_HAL_DATA(padapter); - haldata->srestpriv.last_tx_complete_time = jiffies; - check_completion: rtw_sctx_done_err(&pxmitbuf->sctx, purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : -- cgit From 52519d3085c21a66d7f132423869042a8d21c54c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:56 +0530 Subject: staging: rtl8188eu: Remove Hal8188EReg.h file Driver doesn't need Hal8188EReg.h file. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/Hal8188EReg.h | 46 ------------------------- drivers/staging/rtl8188eu/include/odm_precomp.h | 1 - 2 files changed, 47 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/Hal8188EReg.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/Hal8188EReg.h b/drivers/staging/rtl8188eu/include/Hal8188EReg.h deleted file mode 100644 index d880b0cc803f..000000000000 --- a/drivers/staging/rtl8188eu/include/Hal8188EReg.h +++ /dev/null @@ -1,46 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -/* */ -/* File Name: Hal8188EReg.h */ -/* */ -/* Description: */ -/* */ -/* This file is for RTL8188E register definition. */ -/* */ -/* */ -/* */ -#ifndef __HAL_8188E_REG_H__ -#define __HAL_8188E_REG_H__ - -/* */ -/* Register Definition */ -/* */ -#define TRX_ANTDIV_PATH 0x860 -#define RX_ANTDIV_PATH 0xb2c -#define ODM_R_A_AGC_CORE1_8188E 0xc50 - - -/* */ -/* Bitmap Definition */ -/* */ -#define BIT_FA_RESET_8188E BIT0 - - -#endif diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h index 2eb769b3f35d..7cc2cc95d541 100644 --- a/drivers/staging/rtl8188eu/include/odm_precomp.h +++ b/drivers/staging/rtl8188eu/include/odm_precomp.h @@ -49,7 +49,6 @@ #include "HalHWImg8188E_MAC.h" #include "HalHWImg8188E_RF.h" #include "HalHWImg8188E_BB.h" -#include "Hal8188EReg.h" #include "odm_RegConfig8188E.h" #include "odm_RTL8188E.h" -- cgit From 5fd702b2ea1cb67f4a52994310a98a59d2a347c0 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:57 +0530 Subject: staging: rtl8188eu: Remove unused function declaration Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_osintf.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h index 9de99ca9799a..2dce3bf517a3 100644 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ b/drivers/staging/rtl8188eu/include/usb_osintf.h @@ -29,9 +29,6 @@ extern int rtw_mc2u_disable; #define USBD_HALTED(Status) ((u32)(Status) >> 30 == 3) -u8 usbvendorrequest(struct dvobj_priv *pdvobjpriv, enum bt_usb_request brequest, - enum rt_usb_wvalue wvalue, u8 windex, void *data, - u8 datalen, u8 isdirectionin); int pm_netdev_open(struct net_device *pnetdev, u8 bnormal); void netdev_br_init(struct net_device *netdev); void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb); -- cgit From 109709e142eb69c76c78176fe8cd70a4278410a0 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 29 May 2014 23:20:58 +0530 Subject: staging: rtl8188eu: Remove usb_vendor_req.h header file driver doesn't need usb_vendor_req.h. Signed-off-by: navin patidar Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_osintf.h | 1 - drivers/staging/rtl8188eu/include/usb_vendor_req.h | 52 ---------------------- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 1 - 3 files changed, 54 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/usb_vendor_req.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h index 2dce3bf517a3..292ded7c2bb3 100644 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ b/drivers/staging/rtl8188eu/include/usb_osintf.h @@ -22,7 +22,6 @@ #include #include -#include extern char *rtw_initmac; extern int rtw_mc2u_disable; diff --git a/drivers/staging/rtl8188eu/include/usb_vendor_req.h b/drivers/staging/rtl8188eu/include/usb_vendor_req.h deleted file mode 100644 index 7f26c8f2c78e..000000000000 --- a/drivers/staging/rtl8188eu/include/usb_vendor_req.h +++ /dev/null @@ -1,52 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _USB_VENDOR_REQUEST_H_ -#define _USB_VENDOR_REQUEST_H_ - -/* 4 Set/Get Register related wIndex/Data */ -#define RT_USB_RESET_MASK_OFF 0 -#define RT_USB_RESET_MASK_ON 1 -#define RT_USB_SLEEP_MASK_OFF 0 -#define RT_USB_SLEEP_MASK_ON 1 -#define RT_USB_LDO_ON 1 -#define RT_USB_LDO_OFF 0 - -/* 4 Set/Get SYSCLK related wValue or Data */ -#define RT_USB_SYSCLK_32KHZ 0 -#define RT_USB_SYSCLK_40MHZ 1 -#define RT_USB_SYSCLK_60MHZ 2 - - -enum bt_usb_request { - RT_USB_SET_REGISTER = 1, - RT_USB_SET_SYSCLK = 2, - RT_USB_GET_SYSCLK = 3, - RT_USB_GET_REGISTER = 4 -}; - -enum rt_usb_wvalue { - RT_USB_RESET_MASK = 1, - RT_USB_SLEEP_MASK = 2, - RT_USB_USB_HRCPWM = 3, - RT_USB_LDO = 4, - RT_USB_BOOT_TYPE = 5 -}; - -#endif diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 7526b989dcbf..05dce997e993 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -29,7 +29,6 @@ #include #include -#include #include #include #include -- cgit From 06bfa97eb782d737973036166c02c0a579771a0b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:27 +0530 Subject: staging: rtl8188eu: Remove function with empty defination ODM_ResetIQKResult() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/HalPhyRf.c | 8 -------- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 2 -- drivers/staging/rtl8188eu/include/HalPhyRf.h | 2 -- 3 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf.c b/drivers/staging/rtl8188eu/hal/HalPhyRf.c index 980f7da8ab3b..5dd25e5aa014 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf.c @@ -20,14 +20,6 @@ #include "odm_precomp.h" -/* 3============================================================ */ -/* 3 IQ Calibration */ -/* 3============================================================ */ - -void ODM_ResetIQKResult(struct odm_dm_struct *pDM_Odm) -{ -} - u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) { u8 channel_all[ODM_TARGET_CHNL_NUM_2G_5G] = { diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 7c22658ed0f1..2bcb39fac8df 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -455,8 +455,6 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( } if (delta_IQK >= 8) { /* Delta temperature is equal to or larger than 20 centigrade. */ - ODM_ResetIQKResult(dm_odm); - dm_odm->RFCalibrateInfo.ThermalValue_IQK = ThermalValue; PHY_IQCalibrate_8188E(Adapter, false); } diff --git a/drivers/staging/rtl8188eu/include/HalPhyRf.h b/drivers/staging/rtl8188eu/include/HalPhyRf.h index 1ec497100da1..8ca6ce6c81de 100644 --- a/drivers/staging/rtl8188eu/include/HalPhyRf.h +++ b/drivers/staging/rtl8188eu/include/HalPhyRf.h @@ -23,8 +23,6 @@ #define ODM_TARGET_CHNL_NUM_2G_5G 59 -void ODM_ResetIQKResult(struct odm_dm_struct *pDM_Odm); - u8 ODM_GetRightChnlPlaceforIQK(u8 chnl); #endif /* #ifndef __HAL_PHY_RF_H__ */ -- cgit From 91d16624385fbf63037d2c0b9feff90da6677d9c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:28 +0530 Subject: staging :rtl8188eu: Remove HalPhyRf.[h|c] files. Move ODM_GetRightChnlPlaceforIQK() from HalPhyRf.c to HalPhyRf_8188e.c. Move ODM_TARGET_CHNL_NUM_2G_5G from HalPhyRf.h to HalPhyRf_8188e.h. After the movement of function and macro HalPhyRf.[h|c] files are redundant. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/hal/HalPhyRf.c | 41 ---------------------- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 20 +++++++++++ drivers/staging/rtl8188eu/include/HalPhyRf.h | 28 --------------- drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h | 2 +- drivers/staging/rtl8188eu/include/odm_precomp.h | 1 - 6 files changed, 21 insertions(+), 72 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/hal/HalPhyRf.c delete mode 100644 drivers/staging/rtl8188eu/include/HalPhyRf.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 260c635af645..2ed35a0f7799 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -25,7 +25,6 @@ r8188eu-y := \ hal/HalHWImg8188E_MAC.o \ hal/HalHWImg8188E_BB.o \ hal/HalHWImg8188E_RF.o \ - hal/HalPhyRf.o \ hal/HalPhyRf_8188e.o \ hal/HalPwrSeqCmd.o \ hal/Hal8188EPwrSeq.o \ diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf.c b/drivers/staging/rtl8188eu/hal/HalPhyRf.c deleted file mode 100644 index 5dd25e5aa014..000000000000 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf.c +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #include "odm_precomp.h" - -u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) -{ - u8 channel_all[ODM_TARGET_CHNL_NUM_2G_5G] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, - 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, - 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, - 155, 157, 159, 161, 163, 165 - }; - u8 place = chnl; - - if (chnl > 14) { - for (place = 14; place < sizeof(channel_all); place++) { - if (channel_all[place] == chnl) - return place-13; - } - } - return 0; -} diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 2bcb39fac8df..fafb18c8ba31 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -27,6 +27,26 @@ /*---------------------------Define Local Constant---------------------------*/ +u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) +{ + u8 channel_all[ODM_TARGET_CHNL_NUM_2G_5G] = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, + 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, + 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, + 155, 157, 159, 161, 163, 165 + }; + u8 place = chnl; + + if (chnl > 14) { + for (place = 14; place < sizeof(channel_all); place++) { + if (channel_all[place] == chnl) + return place-13; + } + } + return 0; +} + /* 3============================================================ */ /* 3 Tx Power Tracking */ /* 3============================================================ */ diff --git a/drivers/staging/rtl8188eu/include/HalPhyRf.h b/drivers/staging/rtl8188eu/include/HalPhyRf.h deleted file mode 100644 index 8ca6ce6c81de..000000000000 --- a/drivers/staging/rtl8188eu/include/HalPhyRf.h +++ /dev/null @@ -1,28 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #ifndef __HAL_PHY_RF_H__ - #define __HAL_PHY_RF_H__ - -#define ODM_TARGET_CHNL_NUM_2G_5G 59 - -u8 ODM_GetRightChnlPlaceforIQK(u8 chnl); - -#endif /* #ifndef __HAL_PHY_RF_H__ */ diff --git a/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h b/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h index 287e9f9eae4a..90a26c119d97 100644 --- a/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h +++ b/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h @@ -25,7 +25,7 @@ #define IQK_DELAY_TIME_88E 10 /* ms */ #define index_mapping_NUM_88E 15 #define AVG_THERMAL_NUM_88E 4 - +#define ODM_TARGET_CHNL_NUM_2G_5G 59 void ODM_TxPwrTrackAdjust88E(struct odm_dm_struct *pDM_Odm, u8 Type, /* 0 = OFDM, 1 = CCK */ diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h index 7cc2cc95d541..38394636500c 100644 --- a/drivers/staging/rtl8188eu/include/odm_precomp.h +++ b/drivers/staging/rtl8188eu/include/odm_precomp.h @@ -39,7 +39,6 @@ #include "odm_RegDefine11AC.h" #include "odm_RegDefine11N.h" -#include "HalPhyRf.h" #include "HalPhyRf_8188e.h"/* for IQK,LCK,Power-tracking */ #include "Hal8188ERateAdaptive.h"/* for RA,Power training */ #include "rtl8188e_hal.h" -- cgit From fdc953747445bb44ab360f0ec2b42733c4ea8538 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:29 +0530 Subject: staging: rtl8188eu: Remove header file rtw_version.h Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 1 - drivers/staging/rtl8188eu/include/rtw_debug.h | 2 +- drivers/staging/rtl8188eu/include/rtw_version.h | 1 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 1 - 6 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/rtw_version.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index 2beb2695e0f2..995b74bfb44f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -20,7 +20,6 @@ #define _RTW_DEBUG_C_ #include -#include int proc_get_drv_version(char *page, char **start, off_t offset, int count, diff --git a/drivers/staging/rtl8188eu/include/rtw_debug.h b/drivers/staging/rtl8188eu/include/rtw_debug.h index ae05141f5ddf..a38616e3cad2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_debug.h +++ b/drivers/staging/rtl8188eu/include/rtw_debug.h @@ -23,7 +23,7 @@ #include #include - +#define DRIVERVERSION "v4.1.4_6773.20130222" #define _drv_always_ 1 #define _drv_emerg_ 2 #define _drv_alert_ 3 diff --git a/drivers/staging/rtl8188eu/include/rtw_version.h b/drivers/staging/rtl8188eu/include/rtw_version.h deleted file mode 100644 index 6d2d52cbb3d3..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_version.h +++ /dev/null @@ -1 +0,0 @@ -#define DRIVERVERSION "v4.1.4_6773.20130222" diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 97f8b3e0b418..897f03f11b7a 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 6fe32f0bb9ff..a220c579ab46 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 05dce997e993..d17218fec989 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include -- cgit From fc8b5ae9aa4ac551a8e33a2ac617c4e2fc102225 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:30 +0530 Subject: staging: rtl8188eu: Remove hw_init_mutex from struct rtw_usb_drv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 2 +- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 6 ++++-- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 6 +----- 3 files changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 10cc1a1bcab9..f40db1a24c2b 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -307,7 +307,7 @@ struct adapter { #endif struct adapter *pbuddy_adapter; - struct mutex *hw_init_mutex; + struct mutex hw_init_mutex; spinlock_t br_ext_lock; struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE]; diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index a220c579ab46..c9906e342888 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -997,6 +997,8 @@ u8 rtw_free_drv_sw(struct adapter *padapter) if (padapter->pbuddy_adapter != NULL) padapter->pbuddy_adapter->pbuddy_adapter = NULL; + mutex_destroy(&padapter->hw_init_mutex); + RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_free_drv_sw\n")); return _SUCCESS; @@ -1105,9 +1107,9 @@ int netdev_open(struct net_device *pnetdev) int ret; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev); - _enter_critical_mutex(padapter->hw_init_mutex, NULL); + _enter_critical_mutex(&padapter->hw_init_mutex, NULL); ret = _netdev_open(pnetdev); - mutex_unlock(padapter->hw_init_mutex); + mutex_unlock(&padapter->hw_init_mutex); return ret; } diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index d17218fec989..523d5009baef 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -63,7 +63,6 @@ MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); struct rtw_usb_drv { struct usb_driver usbdrv; int drv_registered; - struct mutex hw_init_mutex; }; static struct rtw_usb_drv rtl8188e_usb_drv = { @@ -537,7 +536,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, dvobj->if1 = padapter; padapter->bDriverStopped = true; - padapter->hw_init_mutex = &usb_drv->hw_init_mutex; + mutex_init(&padapter->hw_init_mutex); padapter->chip_type = RTL8188E; pnetdev = rtw_init_netdev(padapter); @@ -732,8 +731,6 @@ static int __init rtw_drv_entry(void) DBG_88E(DRV_NAME " driver version=%s\n", DRIVERVERSION); - mutex_init(&usb_drv->hw_init_mutex); - usb_drv->drv_registered = true; return usb_register(&usb_drv->usbdrv); } @@ -746,7 +743,6 @@ static void __exit rtw_drv_halt(void) usb_drv->drv_registered = false; usb_deregister(&usb_drv->usbdrv); - mutex_destroy(&usb_drv->hw_init_mutex); DBG_88E("-rtw_drv_halt\n"); } -- cgit From c824795caf5f78d18cbdc854befd8f78a94e48f3 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:31 +0530 Subject: staging: rtl8188eu: Use unregistering flag from struct usb_interface Use unregistering flag from struct usb_interface to find driver registration status. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 523d5009baef..1841d543d337 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -707,7 +707,7 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf) DBG_88E("+rtw_dev_remove\n"); RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+dev_remove()\n")); - if (usb_drv->drv_registered) + if (!pusb_intf->unregistering) padapter->bSurpriseRemoved = true; rtw_pm_set_ips(padapter, IPS_NONE); -- cgit From 7922fd1a5c6800bb55e4a8371acbd109a7b0b505 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:32 +0530 Subject: staging : rtl8188eu: Remove drv_registered from struct rtw_usb_drv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 1841d543d337..c99b9c2db132 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -62,7 +62,6 @@ MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); struct rtw_usb_drv { struct usb_driver usbdrv; - int drv_registered; }; static struct rtw_usb_drv rtl8188e_usb_drv = { @@ -731,7 +730,6 @@ static int __init rtw_drv_entry(void) DBG_88E(DRV_NAME " driver version=%s\n", DRIVERVERSION); - usb_drv->drv_registered = true; return usb_register(&usb_drv->usbdrv); } @@ -740,7 +738,6 @@ static void __exit rtw_drv_halt(void) RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_halt\n")); DBG_88E("+rtw_drv_halt\n"); - usb_drv->drv_registered = false; usb_deregister(&usb_drv->usbdrv); DBG_88E("-rtw_drv_halt\n"); -- cgit From 591207d9bf63fb419e35f06591ad8a35f2398945 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:33 +0530 Subject: staging: rtl8188eu: Remove struct rtw_usb_drv struct rtw_usb_drv contains only one member usb_driver structure, so no use of keeping it. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index c99b9c2db132..d33aeb9aa684 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -60,22 +60,16 @@ static struct usb_device_id rtw_usb_id_tbl[] = { MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); -struct rtw_usb_drv { - struct usb_driver usbdrv; +static struct usb_driver rtl8188e_usb_drv = { + .name = "r8188eu", + .probe = rtw_drv_init, + .disconnect = rtw_dev_remove, + .id_table = rtw_usb_id_tbl, + .suspend = rtw_suspend, + .resume = rtw_resume, + .reset_resume = rtw_resume, }; -static struct rtw_usb_drv rtl8188e_usb_drv = { - .usbdrv.name = "r8188eu", - .usbdrv.probe = rtw_drv_init, - .usbdrv.disconnect = rtw_dev_remove, - .usbdrv.id_table = rtw_usb_id_tbl, - .usbdrv.suspend = rtw_suspend, - .usbdrv.resume = rtw_resume, - .usbdrv.reset_resume = rtw_resume, -}; - -static struct rtw_usb_drv *usb_drv = &rtl8188e_usb_drv; - static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj) { u8 rst = _SUCCESS; @@ -730,7 +724,7 @@ static int __init rtw_drv_entry(void) DBG_88E(DRV_NAME " driver version=%s\n", DRIVERVERSION); - return usb_register(&usb_drv->usbdrv); + return usb_register(&rtl8188e_usb_drv); } static void __exit rtw_drv_halt(void) @@ -738,7 +732,7 @@ static void __exit rtw_drv_halt(void) RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_halt\n")); DBG_88E("+rtw_drv_halt\n"); - usb_deregister(&usb_drv->usbdrv); + usb_deregister(&rtl8188e_usb_drv); DBG_88E("-rtw_drv_halt\n"); } -- cgit From 774cce1ebc94bd31fb21123102b646571a98ddd8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:34 +0530 Subject: staging: rtl8188eu: Use module_usb_driver() macro Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index d33aeb9aa684..21bf74d41372 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -718,24 +718,4 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf) return; } -static int __init rtw_drv_entry(void) -{ - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_entry\n")); - - DBG_88E(DRV_NAME " driver version=%s\n", DRIVERVERSION); - - return usb_register(&rtl8188e_usb_drv); -} - -static void __exit rtw_drv_halt(void) -{ - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_halt\n")); - DBG_88E("+rtw_drv_halt\n"); - - usb_deregister(&rtl8188e_usb_drv); - - DBG_88E("-rtw_drv_halt\n"); -} - -module_init(rtw_drv_entry); -module_exit(rtw_drv_halt); +module_usb_driver(rtl8188e_usb_drv) -- cgit From 5e2b1f15145f0e29b7d40e8e14bb001d09c47e4c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:35 +0530 Subject: staging: rtl8188eu: Remove function declarations in usb_intf.c Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 21bf74d41372..45d26087edaa 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -35,14 +35,6 @@ int ui_pid[3] = {0, 0, 0}; -static int rtw_suspend(struct usb_interface *intf, pm_message_t message); -static int rtw_resume(struct usb_interface *intf); - - -static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid); -static void rtw_dev_remove(struct usb_interface *pusb_intf); - - #define USB_VENDER_ID_REALTEK 0x0bda /* DID_USB_v916_20130116 */ @@ -60,16 +52,6 @@ static struct usb_device_id rtw_usb_id_tbl[] = { MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); -static struct usb_driver rtl8188e_usb_drv = { - .name = "r8188eu", - .probe = rtw_drv_init, - .disconnect = rtw_dev_remove, - .id_table = rtw_usb_id_tbl, - .suspend = rtw_suspend, - .resume = rtw_resume, - .reset_resume = rtw_resume, -}; - static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj) { u8 rst = _SUCCESS; @@ -718,4 +700,14 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf) return; } +static struct usb_driver rtl8188e_usb_drv = { + .name = "r8188eu", + .probe = rtw_drv_init, + .disconnect = rtw_dev_remove, + .id_table = rtw_usb_id_tbl, + .suspend = rtw_suspend, + .resume = rtw_resume, + .reset_resume = rtw_resume, +}; + module_usb_driver(rtl8188e_usb_drv) -- cgit From 701accdc48d3f5f23afc9d23cf6624695872476c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:36 +0530 Subject: staging: rtl8188eu: Remove unused stucture defination struct specific_device_id Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index f40db1a24c2b..8cbdab5887d1 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -68,12 +68,6 @@ enum _NIC_VERSION { #define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4) #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5) -struct specific_device_id { - u32 flags; - u16 idVendor; - u16 idProduct; -}; - struct registry_priv { u8 chip_version; u8 rfintfs; -- cgit From 4ff3c250cb0fee280c5d4f2a426151dc0258feea Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:37 +0530 Subject: staging: rtl8188eu: Remove unused enum Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 8cbdab5887d1..d38f861dd511 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -54,13 +54,6 @@ #include #include -enum _NIC_VERSION { - RTL8711_NIC, - RTL8712_NIC, - RTL8713_NIC, - RTL8716_NIC -}; - #define SPEC_DEV_ID_NONE BIT(0) #define SPEC_DEV_ID_DISABLE_HT BIT(1) #define SPEC_DEV_ID_ENABLE_PS BIT(2) -- cgit From 5b485232e698d68f1cd36dd1145381a2d44f1a41 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:38 +0530 Subject: staging: rtl8188eu: Remove unused members of struct dvobj_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index d38f861dd511..318141880b7a 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -152,7 +152,6 @@ struct rt_firmware { struct dvobj_priv { struct adapter *if1; - struct adapter *if2; struct rt_firmware firmware; /* For 92D, DMDP have 2 interface. */ @@ -164,8 +163,6 @@ struct dvobj_priv { int RtOutPipe[3]; u8 Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */ - u8 irq_alloc; - /*-------- below is for USB INTERFACE --------*/ u8 nr_endpoint; @@ -173,7 +170,6 @@ struct dvobj_priv { u8 RtNumInPipes; u8 RtNumOutPipes; int ep_num[5]; /* endpoint number */ - int RegUsbSS; struct semaphore usb_suspend_sema; struct mutex usb_vendor_req_mutex; -- cgit From cf14b080834e52c599bc15fa6f3c21997c66b7bf Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:39 +0530 Subject: staging: rtl8188eu: Remove usb_suspend_sema from struct dvobj_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 318141880b7a..c441d46a77e2 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -170,7 +170,6 @@ struct dvobj_priv { u8 RtNumInPipes; u8 RtNumOutPipes; int ep_num[5]; /* endpoint number */ - struct semaphore usb_suspend_sema; struct mutex usb_vendor_req_mutex; u8 *usb_alloc_vendor_req_buf; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 45d26087edaa..2333fa648357 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -144,7 +144,6 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) if (rtw_init_intf_priv(pdvobjpriv) == _FAIL) goto free_dvobj; - sema_init(&(pdvobjpriv->usb_suspend_sema), 0); rtw_reset_continual_urb_error(pdvobjpriv); usb_get_dev(pusbd); -- cgit From 9864d792ada86c5dace723c2fc94e657154f1389 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:40 +0530 Subject: staging: rtl8188eu: Remove usb_alloc_vendor_req_buf from struct dvobj_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 17 +++++------------ 2 files changed, 5 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index c441d46a77e2..7586de71dcdc 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -172,7 +172,6 @@ struct dvobj_priv { int ep_num[5]; /* endpoint number */ struct mutex usb_vendor_req_mutex; - u8 *usb_alloc_vendor_req_buf; u8 *usb_vendor_req_buf; struct usb_interface *pusbintf; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 2333fa648357..1265a47da266 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -54,26 +54,19 @@ MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj) { - u8 rst = _SUCCESS; - mutex_init(&dvobj->usb_vendor_req_mutex); + dvobj->usb_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE); + if (!dvobj->usb_vendor_req_buf) + return _FAIL; - dvobj->usb_alloc_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE); - if (dvobj->usb_alloc_vendor_req_buf == NULL) { - DBG_88E("alloc usb_vendor_req_buf failed...\n"); - rst = _FAIL; - goto exit; - } - dvobj->usb_vendor_req_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(dvobj->usb_alloc_vendor_req_buf), ALIGNMENT_UNIT); -exit: - return rst; + return _SUCCESS; } static u8 rtw_deinit_intf_priv(struct dvobj_priv *dvobj) { u8 rst = _SUCCESS; - kfree(dvobj->usb_alloc_vendor_req_buf); + kfree(dvobj->usb_vendor_req_buf); mutex_destroy(&dvobj->usb_vendor_req_mutex); return rst; } -- cgit From ac674ad89e0de3e4810792a04051b9ce08b09e42 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:41 +0530 Subject: staging: rtl8188eu: Remove unused enum _ADAPTER_TYPE Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 7586de71dcdc..f7db55342d30 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -193,12 +193,6 @@ enum _IFACE_TYPE { MAX_IFACE_PORT, }; -enum _ADAPTER_TYPE { - PRIMARY_ADAPTER, - SECONDARY_ADAPTER, - MAX_ADAPTER, -}; - enum driver_state { DRIVER_NORMAL = 0, DRIVER_DISAPPEAR = 1, -- cgit From b1f4e0ae999a6f0cbffaea4a440e4475113829d7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:42 +0530 Subject: staging: rtl8188eu: Remove unused enum _IFACE_TYPE Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index f7db55342d30..9195cf336e64 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -187,12 +187,6 @@ static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj) return &dvobj->pusbintf->dev; }; -enum _IFACE_TYPE { - IFACE_PORT0, /* mapping to port0 for C/D series chips */ - IFACE_PORT1, /* mapping to port1 for C/D series chip */ - MAX_IFACE_PORT, -}; - enum driver_state { DRIVER_NORMAL = 0, DRIVER_DISAPPEAR = 1, -- cgit From 451f8742a21d124eab5998bfbe2e212fc8efa0ff Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:43 +0530 Subject: staging: rtl8188eu: Remove enum driver_state Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 6 ------ drivers/staging/rtl8188eu/os_dep/usb_intf.c | 10 ++++------ 2 files changed, 4 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 9195cf336e64..5fa2e172abb8 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -187,12 +187,6 @@ static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj) return &dvobj->pusbintf->dev; }; -enum driver_state { - DRIVER_NORMAL = 0, - DRIVER_DISAPPEAR = 1, - DRIVER_REPLACE_DONGLE = 2, -}; - struct adapter { int DriverState;/* for disable driver using module, use dongle toi * replace module. */ diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 1265a47da266..4ac67e225152 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -606,12 +606,10 @@ static void rtw_usb_if1_deinit(struct adapter *if1) free_mlme_ap_info(if1); #endif - if (if1->DriverState != DRIVER_DISAPPEAR) { - if (pnetdev) { - /* will call netdev_close() */ - unregister_netdev(pnetdev); - rtw_proc_remove_one(pnetdev); - } + if (pnetdev) { + /* will call netdev_close() */ + unregister_netdev(pnetdev); + rtw_proc_remove_one(pnetdev); } rtw_cancel_all_timer(if1); -- cgit From 84c2a1e3747b84cfac1024a42b964e40e651384f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:44 +0530 Subject: staging: rtl8188eu: Remove DriverState from struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 5fa2e172abb8..de3b70ca8a7b 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -188,8 +188,6 @@ static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj) }; struct adapter { - int DriverState;/* for disable driver using module, use dongle toi - * replace module. */ int pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */ int bDongle;/* build-in module or external dongle */ u16 chip_type; -- cgit From b95cb415968b88a503b4dce1612e7265a65d3836 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:45 +0530 Subject: staging: rtl8188eu: Remove unused function rtl8188e_clone_haldata() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 ----- drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 1 - 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 6a9c8e23f267..208b3739b644 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1815,11 +1815,6 @@ static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable } } -void rtl8188e_clone_haldata(struct adapter *dst_adapter, struct adapter *src_adapter) -{ - memcpy(dst_adapter->HalData, src_adapter->HalData, dst_adapter->hal_data_sz); -} - void rtl8188e_start_thread(struct adapter *padapter) { } diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index c7fef7af9864..4b59c8e392a9 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -463,7 +463,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc); /* register */ void SetBcnCtrlReg(struct adapter *padapter, u8 SetBits, u8 ClearBits); -void rtl8188e_clone_haldata(struct adapter *dst, struct adapter *src); void rtl8188e_start_thread(struct adapter *padapter); void rtl8188e_stop_thread(struct adapter *padapter); -- cgit From 51b19bca518f406f7e2289bf4655e7a91513b924 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:46 +0530 Subject: staging: rtl8188eu: Remove hal_data_sz from struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/usb_halinit.c | 1 - drivers/staging/rtl8188eu/include/drv_types.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 141f85ae5618..8831be534a6d 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -2234,7 +2234,6 @@ void rtl8188eu_set_hal_ops(struct adapter *adapt) adapt->HalData = rtw_zmalloc(sizeof(struct hal_data_8188e)); if (adapt->HalData == NULL) DBG_88E("cant not alloc memory for HAL DATA\n"); - adapt->hal_data_sz = sizeof(struct hal_data_8188e); halfunc->hal_power_on = rtl8188eu_InitPowerOn; halfunc->hal_init = &rtl8188eu_hal_init; diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index de3b70ca8a7b..9cdab6ae926f 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -215,7 +215,6 @@ struct adapter { struct wifidirect_info wdinfo; void *HalData; - u32 hal_data_sz; struct hal_ops HalFunc; s32 bDriverStopped; -- cgit From 525c6880399cac77213842e055c4c7243bed8497 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:47 +0530 Subject: staging: rtl8188eu: Remove unused member variable of struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 9cdab6ae926f..a459206d37de 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -189,7 +189,6 @@ static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj) struct adapter { int pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */ - int bDongle;/* build-in module or external dongle */ u16 chip_type; struct dvobj_priv *dvobj; @@ -221,19 +220,11 @@ struct adapter { s32 bSurpriseRemoved; s32 bCardDisableWOHSM; - u32 IsrContent; - u32 ImrContent; - u8 EepromAddressSize; u8 hw_init_completed; - u8 bDriverIsGoingToUnload; - u8 init_adpt_in_progress; - u8 bHaltInProgress; void *cmdThread; void *evtThread; - void *xmitThread; - void *recvThread; void (*intf_start)(struct adapter *adapter); void (*intf_stop)(struct adapter *adapter); struct net_device *pnetdev; @@ -253,7 +244,6 @@ struct adapter { int net_closed; u8 bFWReady; - u8 bBTFWReady; u8 bReadPortCancel; u8 bWritePortCancel; u8 bRxRSSIDisplay; -- cgit From 24e0bf42ecd2201872e765509d0846493585540d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:48 +0530 Subject: staging: rtl8188eu:Remove EepromAddressSize from struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/usb_halinit.c | 3 --- drivers/staging/rtl8188eu/include/drv_types.h | 1 - 2 files changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 8831be534a6d..e60b5e9ee317 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1203,9 +1203,6 @@ static int _ReadAdapterInfo8188EU(struct adapter *Adapter) static void ReadAdapterInfo8188EU(struct adapter *Adapter) { - /* Read EEPROM size before call any EEPROM function */ - Adapter->EepromAddressSize = GetEEPROMSize8188E(Adapter); - _ReadAdapterInfo8188EU(Adapter); } diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index a459206d37de..ec9ad4a89d27 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -220,7 +220,6 @@ struct adapter { s32 bSurpriseRemoved; s32 bCardDisableWOHSM; - u8 EepromAddressSize; u8 hw_init_completed; void *cmdThread; -- cgit From f3dd77bc44e90a856689ea070c3eba3a42386671 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:49 +0530 Subject: staging: rtl8188eu: Remove pbuddy_adapter from struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 19 ------------------- drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 4 ---- 3 files changed, 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 739e25041692..b8d66fa9e933 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -114,7 +114,6 @@ int ips_leave(struct adapter *padapter) static bool rtw_pwr_unassociated_idle(struct adapter *adapter) { - struct adapter *buddy = adapter->pbuddy_adapter; struct mlme_priv *pmlmepriv = &(adapter->mlmepriv); #ifdef CONFIG_88EU_P2P struct wifidirect_info *pwdinfo = &(adapter->wdinfo); @@ -136,24 +135,6 @@ static bool rtw_pwr_unassociated_idle(struct adapter *adapter) #endif goto exit; - /* consider buddy, if exist */ - if (buddy) { - struct mlme_priv *b_pmlmepriv = &(buddy->mlmepriv); - #ifdef CONFIG_88EU_P2P - struct wifidirect_info *b_pwdinfo = &(buddy->wdinfo); - #endif - - if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR) || - check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS) || - check_fwstate(b_pmlmepriv, WIFI_AP_STATE) || - check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE) || -#if defined(CONFIG_88EU_P2P) - !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)) -#else - 0) -#endif - goto exit; - } ret = true; exit: diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index ec9ad4a89d27..1676bb497042 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -254,7 +254,6 @@ struct adapter { * upper application reads it. */ u8 bShowGetP2PState; #endif - struct adapter *pbuddy_adapter; struct mutex hw_init_mutex; diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index c9906e342888..2df27c71c5df 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -993,10 +993,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter) padapter->rereg_nd_name_priv.old_pnetdev = NULL; } - /* clear pbuddystruct adapter to avoid access wrong pointer. */ - if (padapter->pbuddy_adapter != NULL) - padapter->pbuddy_adapter->pbuddy_adapter = NULL; - mutex_destroy(&padapter->hw_init_mutex); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_free_drv_sw\n")); -- cgit From 8843d7a4bc5805d160ca4e5a073747d07ebcef0f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:50 +0530 Subject: staging: rtl8188eu: Remove bCardDisableWOHSM from struct adapter driver doesn't use value stored in bCardDisableWOHSM. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 1 - drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 4 ---- 3 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index b8d66fa9e933..599f2b69873c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -160,7 +160,6 @@ void rtw_ps_processor(struct adapter *padapter) if (rfpwrstate == rf_off) { pwrpriv->change_rfpwrstate = rf_off; pwrpriv->brfoffbyhw = true; - padapter->bCardDisableWOHSM = true; rtw_hw_suspend(padapter); } else { pwrpriv->change_rfpwrstate = rf_on; diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 1676bb497042..974f12fdf508 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -218,7 +218,6 @@ struct adapter { s32 bDriverStopped; s32 bSurpriseRemoved; - s32 bCardDisableWOHSM; u8 hw_init_completed; diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 2df27c71c5df..1d961bdbc3c7 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -1042,7 +1042,6 @@ int _netdev_open(struct net_device *pnetdev) if (!padapter->bup) { padapter->bDriverStopped = false; padapter->bSurpriseRemoved = false; - padapter->bCardDisableWOHSM = false; status = rtw_hal_init(padapter); if (status == _FAIL) { @@ -1117,7 +1116,6 @@ static int ips_netdrv_open(struct adapter *padapter) padapter->bDriverStopped = false; padapter->bSurpriseRemoved = false; - padapter->bCardDisableWOHSM = false; status = rtw_hal_init(padapter); if (status == _FAIL) { @@ -1160,13 +1158,11 @@ void rtw_ips_pwr_down(struct adapter *padapter) u32 start_time = jiffies; DBG_88E("===> rtw_ips_pwr_down...................\n"); - padapter->bCardDisableWOHSM = true; padapter->net_closed = true; rtw_led_control(padapter, LED_CTL_POWER_OFF); rtw_ips_dev_unload(padapter); - padapter->bCardDisableWOHSM = false; DBG_88E("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time)); } -- cgit From 5aaa47f36ffed0180094b7243a39aa82689c01de Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 8 Jun 2014 19:34:33 +0530 Subject: staging: rtl8188eu: Remove unused function nat25_handle_frame() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_br_ext.c | 61 -------------------------- drivers/staging/rtl8188eu/include/recv_osdep.h | 1 - 2 files changed, 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c index f97f05f4165e..3f602bc2b647 100644 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_br_ext.c @@ -1042,67 +1042,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) return -1; } -int nat25_handle_frame(struct adapter *priv, struct sk_buff *skb) -{ - if (!(skb->data[0] & 1)) { - int is_vlan_tag = 0, i, retval = 0; - unsigned short vlan_hdr = 0; - unsigned short protocol; - - protocol = be16_to_cpu(*((__be16 *)(skb->data + 2 * ETH_ALEN))); - if (protocol == ETH_P_8021Q) { - is_vlan_tag = 1; - vlan_hdr = *((unsigned short *)(skb->data+ETH_ALEN*2+2)); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+ETH_ALEN*2+2-i*2)) = *((unsigned short *)(skb->data+ETH_ALEN*2-2-i*2)); - skb_pull(skb, 4); - } - - if (!priv->ethBrExtInfo.nat25_disable) { - spin_lock_bh(&priv->br_ext_lock); - /* - * This function look up the destination network address from - * the NAT2.5 database. Return value = -1 means that the - * corresponding network protocol is NOT support. - */ - if (!priv->ethBrExtInfo.nat25sc_disable && - (be16_to_cpu(*((__be16 *)(skb->data+ETH_ALEN*2))) == ETH_P_IP) && - !memcmp(priv->scdb_ip, skb->data+ETH_HLEN+16, 4)) { - memcpy(skb->data, priv->scdb_mac, ETH_ALEN); - - spin_unlock_bh(&priv->br_ext_lock); - } else { - spin_unlock_bh(&priv->br_ext_lock); - - retval = nat25_db_handle(priv, skb, NAT25_LOOKUP); - } - } else { - if (((be16_to_cpu(*((__be16 *)(skb->data+ETH_ALEN*2))) == ETH_P_IP) && - !memcmp(priv->br_ip, skb->data+ETH_HLEN+16, 4)) || - ((be16_to_cpu(*((__be16 *)(skb->data+ETH_ALEN*2))) == ETH_P_ARP) && - !memcmp(priv->br_ip, skb->data+ETH_HLEN+24, 4))) { - /* for traffic to upper TCP/IP */ - retval = nat25_db_handle(priv, skb, NAT25_LOOKUP); - } - } - - if (is_vlan_tag) { - skb_push(skb, 4); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2)); - *((__be16 *)(skb->data+ETH_ALEN*2)) = __constant_htons(ETH_P_8021Q); - *((unsigned short *)(skb->data+ETH_ALEN*2+2)) = vlan_hdr; - } - - if (retval == -1) { - /* DEBUG_ERR("NAT25: Lookup fail!\n"); */ - return -1; - } - } - - return 0; -} - #define SERVER_PORT 67 #define CLIENT_PORT 68 #define DHCP_MAGIC 0x63825363 diff --git a/drivers/staging/rtl8188eu/include/recv_osdep.h b/drivers/staging/rtl8188eu/include/recv_osdep.h index a4fd95798f00..a52a6960b8e1 100644 --- a/drivers/staging/rtl8188eu/include/recv_osdep.h +++ b/drivers/staging/rtl8188eu/include/recv_osdep.h @@ -46,7 +46,6 @@ int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf); void rtw_os_read_port(struct adapter *padapter, struct recv_buf *precvbuf); void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); -int nat25_handle_frame(struct adapter *priv, struct sk_buff *skb); int _netdev_open(struct net_device *pnetdev); int netdev_open(struct net_device *pnetdev); int netdev_close(struct net_device *pnetdev); -- cgit From e844e6d5b33907f2a12b1aa33ee63f65b452506c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 1 Jun 2014 17:46:52 +0530 Subject: staging: rtl8188eu: Remove function with empty defination() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_br_ext.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c index 3f602bc2b647..70b8f0719703 100644 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_br_ext.c @@ -431,10 +431,6 @@ static void __nat25_db_network_insert(struct adapter *priv, spin_unlock_bh(&priv->br_ext_lock); } -static void __nat25_db_print(struct adapter *priv) -{ -} - /* * NAT2.5 interface */ @@ -534,7 +530,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) /* record source IP address and , source mac address into db */ __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); return 0; case NAT25_LOOKUP: DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr); @@ -587,7 +582,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) sender = (unsigned int *)arp_ptr; __nat25_generate_ipv4_network_addr(networkAddr, sender); __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); return 0; case NAT25_LOOKUP: DEBUG_INFO("NAT25: Lookup ARP\n"); @@ -707,7 +701,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_source.net, ipx->ipx_source.node); } __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); return 0; case NAT25_LOOKUP: if (!memcmp(GET_MY_HWADDR(priv), ipx->ipx_dest.node, ETH_ALEN)) { @@ -752,7 +745,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); return 0; case NAT25_LOOKUP: DEBUG_INFO("NAT25: Lookup AARP, Source =%d,%d Destination =%d,%d\n", @@ -786,7 +778,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); return 0; case NAT25_LOOKUP: DEBUG_INFO("NAT25: Lookup DDP, Source =%d,%d Destination =%d,%d\n", @@ -879,7 +870,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); if (!priv->ethBrExtInfo.addPPPoETag && priv->pppoe_connection_in_progress && @@ -945,7 +935,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) DEBUG_INFO("NAT25: Lookup PPPoE, lookup session packet from %s\n", skb->dev->name); __nat25_generate_pppoe_network_addr(networkAddr, skb->data+ETH_ALEN, &(ph->sid)); __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - __nat25_db_print(priv); } else { return -1; } @@ -1009,7 +998,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) if (memcmp(&iph->saddr, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0", 16)) { __nat25_generate_ipv6_network_addr(networkAddr, (__be32 *)&iph->saddr); __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - __nat25_db_print(priv); if (iph->nexthdr == IPPROTO_ICMPV6 && skb->len > (ETH_HLEN + sizeof(*iph) + 4)) { -- cgit From 084c7593b030f3a89d311fa06f81beab62b6d28c Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sun, 1 Jun 2014 18:32:37 +0200 Subject: staging: rtl8188eu: os_dep: usb_intf.c: Cleaning up unnecessary code Removes unnecessary code that does not do anything useful. This was partly found using a static code analysis program called cppcheck. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 4ac67e225152..c2e5276853bf 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -424,14 +424,8 @@ static int rtw_resume(struct usb_interface *pusb_intf) { struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf); struct adapter *padapter = dvobj->if1; - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - int ret = 0; - if (pwrpriv->bInternalAutoSuspend) - ret = rtw_resume_process(padapter); - else - ret = rtw_resume_process(padapter); - return ret; + return rtw_resume_process(padapter); } int rtw_resume_process(struct adapter *padapter) -- cgit From a6ec8f29f10590f9a6eb1c671b88ee68bc9dbc57 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 22:54:33 +0530 Subject: staging: rtl8188eu: usb_halinit.c: Remove ReadAdapterInfo8188EU() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/usb_halinit.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index e60b5e9ee317..316c82192df7 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1187,7 +1187,7 @@ static void _ReadRFType(struct adapter *Adapter) haldata->rf_chip = RF_6052; } -static int _ReadAdapterInfo8188EU(struct adapter *Adapter) +static void _ReadAdapterInfo8188EU(struct adapter *Adapter) { u32 start = jiffies; @@ -1197,13 +1197,6 @@ static int _ReadAdapterInfo8188EU(struct adapter *Adapter) _ReadPROMContent(Adapter); MSG_88E("<==== %s in %d ms\n", __func__, rtw_get_passing_time_ms(start)); - - return _SUCCESS; -} - -static void ReadAdapterInfo8188EU(struct adapter *Adapter) -{ - _ReadAdapterInfo8188EU(Adapter); } #define GPIO_DEBUG_PORT_NUM 0 @@ -2249,7 +2242,7 @@ void rtl8188eu_set_hal_ops(struct adapter *adapt) halfunc->init_default_value = &rtl8188eu_init_default_value; halfunc->intf_chip_configure = &rtl8188eu_interface_configure; - halfunc->read_adapter_info = &ReadAdapterInfo8188EU; + halfunc->read_adapter_info = &_ReadAdapterInfo8188EU; halfunc->SetHwRegHandler = &SetHwReg8188EU; halfunc->GetHwRegHandler = &GetHwReg8188EU; -- cgit From f0e7a514e189071b47b968cee68d0c97c8960e05 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:10 +0530 Subject: staging: rtl8188eu: Remove rtw_deinit_intf_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index c2e5276853bf..f874270e0b10 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -62,15 +62,6 @@ static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj) return _SUCCESS; } -static u8 rtw_deinit_intf_priv(struct dvobj_priv *dvobj) -{ - u8 rst = _SUCCESS; - - kfree(dvobj->usb_vendor_req_buf); - mutex_destroy(&dvobj->usb_vendor_req_mutex); - return rst; -} - static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) { int i; @@ -175,7 +166,9 @@ static void usb_dvobj_deinit(struct usb_interface *usb_intf) usb_reset_device(interface_to_usbdev(usb_intf)); } } - rtw_deinit_intf_priv(dvobj); + + kfree(dvobj->usb_vendor_req_buf); + mutex_destroy(&dvobj->usb_vendor_req_mutex); kfree(dvobj); } -- cgit From 418f96424f7093acdb1b1c105dddc9268ea270f8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:11 +0530 Subject: staging: rtl8188eu: Remove rtw_init_intf_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index f874270e0b10..a84ee9796ce6 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -52,16 +52,6 @@ static struct usb_device_id rtw_usb_id_tbl[] = { MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl); -static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj) -{ - mutex_init(&dvobj->usb_vendor_req_mutex); - dvobj->usb_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE); - if (!dvobj->usb_vendor_req_buf) - return _FAIL; - - return _SUCCESS; -} - static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) { int i; @@ -125,7 +115,10 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) else pdvobjpriv->ishighspeed = false; - if (rtw_init_intf_priv(pdvobjpriv) == _FAIL) + mutex_init(&pdvobjpriv->usb_vendor_req_mutex); + pdvobjpriv->usb_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE); + + if (!pdvobjpriv->usb_vendor_req_buf) goto free_dvobj; rtw_reset_continual_urb_error(pdvobjpriv); -- cgit From 95311b478fea4c489603258549c16e5819c4c153 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:12 +0530 Subject: staging: rtl8188eu:Move rtw_hw_[suspend, resume]() to rtw_pwrctrl.c rtw_hw_[suspend,resume]() functions are used only in rtw_pwrctrl.c, so move these functions there. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 103 +++++++++++++++++++++++++ drivers/staging/rtl8188eu/include/osdep_intf.h | 2 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 102 ------------------------ 3 files changed, 103 insertions(+), 104 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 599f2b69873c..be4c0944f106 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -23,6 +23,109 @@ #include #include #include +#include + +static int rtw_hw_suspend(struct adapter *padapter) +{ + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; + struct net_device *pnetdev = padapter->pnetdev; + + + if ((!padapter->bup) || (padapter->bDriverStopped) || + (padapter->bSurpriseRemoved)) { + DBG_88E("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n", + padapter->bup, padapter->bDriverStopped, + padapter->bSurpriseRemoved); + goto error_exit; + } + + /* system suspend */ + LeaveAllPowerSaveMode(padapter); + + DBG_88E("==> rtw_hw_suspend\n"); + _enter_pwrlock(&pwrpriv->lock); + pwrpriv->bips_processing = true; + /* s1. */ + if (pnetdev) { + netif_carrier_off(pnetdev); + netif_tx_stop_all_queues(pnetdev); + } + + /* s2. */ + rtw_disassoc_cmd(padapter, 500, false); + + /* s2-2. indicate disconnect to os */ + { + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + + if (check_fwstate(pmlmepriv, _FW_LINKED)) { + _clr_fwstate_(pmlmepriv, _FW_LINKED); + + rtw_led_control(padapter, LED_CTL_NO_LINK); + + rtw_os_indicate_disconnect(padapter); + + /* donnot enqueue cmd */ + rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 0); + } + } + /* s2-3. */ + rtw_free_assoc_resources(padapter, 1); + + /* s2-4. */ + rtw_free_network_queue(padapter, true); + rtw_ips_dev_unload(padapter); + pwrpriv->rf_pwrstate = rf_off; + pwrpriv->bips_processing = false; + + _exit_pwrlock(&pwrpriv->lock); + + return 0; + +error_exit: + DBG_88E("%s, failed\n", __func__); + return -1; +} + +static int rtw_hw_resume(struct adapter *padapter) +{ + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; + struct net_device *pnetdev = padapter->pnetdev; + + + /* system resume */ + DBG_88E("==> rtw_hw_resume\n"); + _enter_pwrlock(&pwrpriv->lock); + pwrpriv->bips_processing = true; + rtw_reset_drv_sw(padapter); + + if (pm_netdev_open(pnetdev, false) != 0) { + _exit_pwrlock(&pwrpriv->lock); + goto error_exit; + } + + netif_device_attach(pnetdev); + netif_carrier_on(pnetdev); + + if (!netif_queue_stopped(pnetdev)) + netif_start_queue(pnetdev); + else + netif_wake_queue(pnetdev); + + pwrpriv->bkeepfwalive = false; + pwrpriv->brfoffbyhw = false; + + pwrpriv->rf_pwrstate = rf_on; + pwrpriv->bips_processing = false; + + _exit_pwrlock(&pwrpriv->lock); + + + return 0; +error_exit: + DBG_88E("%s, Open net dev failed\n", __func__); + return -1; +} void ips_enter(struct adapter *padapter) { diff --git a/drivers/staging/rtl8188eu/include/osdep_intf.h b/drivers/staging/rtl8188eu/include/osdep_intf.h index c4599c583b59..a5b3bd313202 100644 --- a/drivers/staging/rtl8188eu/include/osdep_intf.h +++ b/drivers/staging/rtl8188eu/include/osdep_intf.h @@ -77,7 +77,5 @@ void rtw_ips_dev_unload(struct adapter *padapter); int rtw_ips_pwr_up(struct adapter *padapter); void rtw_ips_pwr_down(struct adapter *padapter); -int rtw_hw_suspend(struct adapter *padapter); -int rtw_hw_resume(struct adapter *padapter); #endif /* _OSDEP_INTF_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index a84ee9796ce6..25a931ac1fe3 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -234,108 +234,6 @@ static void rtw_dev_unload(struct adapter *padapter) RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("-rtw_dev_unload\n")); } -int rtw_hw_suspend(struct adapter *padapter) -{ - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - struct net_device *pnetdev = padapter->pnetdev; - - - if ((!padapter->bup) || (padapter->bDriverStopped) || - (padapter->bSurpriseRemoved)) { - DBG_88E("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n", - padapter->bup, padapter->bDriverStopped, - padapter->bSurpriseRemoved); - goto error_exit; - } - - /* system suspend */ - LeaveAllPowerSaveMode(padapter); - - DBG_88E("==> rtw_hw_suspend\n"); - _enter_pwrlock(&pwrpriv->lock); - pwrpriv->bips_processing = true; - /* s1. */ - if (pnetdev) { - netif_carrier_off(pnetdev); - netif_tx_stop_all_queues(pnetdev); - } - - /* s2. */ - rtw_disassoc_cmd(padapter, 500, false); - - /* s2-2. indicate disconnect to os */ - { - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - if (check_fwstate(pmlmepriv, _FW_LINKED)) { - _clr_fwstate_(pmlmepriv, _FW_LINKED); - - rtw_led_control(padapter, LED_CTL_NO_LINK); - - rtw_os_indicate_disconnect(padapter); - - /* donnot enqueue cmd */ - rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 0); - } - } - /* s2-3. */ - rtw_free_assoc_resources(padapter, 1); - - /* s2-4. */ - rtw_free_network_queue(padapter, true); - rtw_ips_dev_unload(padapter); - pwrpriv->rf_pwrstate = rf_off; - pwrpriv->bips_processing = false; - - _exit_pwrlock(&pwrpriv->lock); - - return 0; - -error_exit: - DBG_88E("%s, failed\n", __func__); - return -1; -} - -int rtw_hw_resume(struct adapter *padapter) -{ - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - struct net_device *pnetdev = padapter->pnetdev; - - - /* system resume */ - DBG_88E("==> rtw_hw_resume\n"); - _enter_pwrlock(&pwrpriv->lock); - pwrpriv->bips_processing = true; - rtw_reset_drv_sw(padapter); - - if (pm_netdev_open(pnetdev, false) != 0) { - _exit_pwrlock(&pwrpriv->lock); - goto error_exit; - } - - netif_device_attach(pnetdev); - netif_carrier_on(pnetdev); - - if (!netif_queue_stopped(pnetdev)) - netif_start_queue(pnetdev); - else - netif_wake_queue(pnetdev); - - pwrpriv->bkeepfwalive = false; - pwrpriv->brfoffbyhw = false; - - pwrpriv->rf_pwrstate = rf_on; - pwrpriv->bips_processing = false; - - _exit_pwrlock(&pwrpriv->lock); - - - return 0; -error_exit: - DBG_88E("%s, Open net dev failed\n", __func__); - return -1; -} - static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message) { struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf); -- cgit From e86ebe3542a28a23e432850f7f5f5a8777df1f6e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:13 +0530 Subject: staging: rtl8188eu: Remove unused struct intf_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_intf.h | 33 -------------------------- 1 file changed, 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_intf.h b/drivers/staging/rtl8188eu/include/osdep_intf.h index a5b3bd313202..523141a9eab4 100644 --- a/drivers/staging/rtl8188eu/include/osdep_intf.h +++ b/drivers/staging/rtl8188eu/include/osdep_intf.h @@ -24,39 +24,6 @@ #include #include -struct intf_priv { - u8 *intf_dev; - u32 max_iosz; /* USB2.0: 128, USB1.1: 64, SDIO:64 */ - u32 max_xmitsz; /* USB2.0: unlimited, SDIO:512 */ - u32 max_recvsz; /* USB2.0: unlimited, SDIO:512 */ - - u8 *io_rwmem; - u8 *allocated_io_rwmem; - u32 io_wsz; /* unit: 4bytes */ - u32 io_rsz;/* unit: 4bytes */ - u8 intf_status; - - void (*_bus_io)(u8 *priv); - -/* -Under Sync. IRP (SDIO/USB) -A protection mechanism is necessary for the io_rwmem(read/write protocol) - -Under Async. IRP (SDIO/USB) -The protection mechanism is through the pending queue. -*/ - struct mutex ioctl_mutex; - /* when in USB, IO is through interrupt in/out endpoints */ - struct usb_device *udev; - struct urb *piorw_urb; - u8 io_irp_cnt; - u8 bio_irp_pending; - struct semaphore io_retevt; - struct timer_list io_timer; - u8 bio_irp_timeout; - u8 bio_timer_cancel; -}; - u8 rtw_init_drv_sw(struct adapter *padapter); u8 rtw_free_drv_sw(struct adapter *padapter); u8 rtw_reset_drv_sw(struct adapter *padapter); -- cgit From 4c9df71487a8099c2ed397e789695a28a780960d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:14 +0530 Subject: staging: rtl8188eu: Remove unused funtion _rtw_read_mem() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 15 --------------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 2 -- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 4 ---- 4 files changed, 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 7530532b3ff0..934370e0d5ff 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -177,21 +177,6 @@ int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -void _rtw_read_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) -{ - void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - - if (adapter->bDriverStopped || adapter->bSurpriseRemoved) { - RT_TRACE(_module_rtl871x_io_c_, _drv_info_, - ("rtw_read_mem:bDriverStopped(%d) OR bSurpriseRemoved(%d)", - adapter->bDriverStopped, adapter->bSurpriseRemoved)); - return; - } - _read_mem = pintfhdl->io_ops._read_mem; - _read_mem(pintfhdl, addr, cnt, pmem); -} void _rtw_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 3aadf560de00..c39dc0cec609 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -671,7 +671,6 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_read8 = &usb_read8; pops->_read16 = &usb_read16; pops->_read32 = &usb_read32; - pops->_read_mem = &usb_read_mem; pops->_read_port = &usb_read_port; pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index e8790f8f913e..04338ee95948 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -112,8 +112,6 @@ struct _io_ops { int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); - void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, - u8 *pmem); void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr); diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 0b5fbb928018..27dd7cda6554 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -39,10 +39,6 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) return pipe; } -void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem) -{ -} - void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) { } -- cgit From b14b9575e1f7d63de96216507dab13d38454a875 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:15 +0530 Subject: staging: rtl8188eu: Remove unused function _rtw_write_mem() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 14 -------------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 5 ----- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 4 ---- 4 files changed, 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 934370e0d5ff..292b6a1fee53 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -177,20 +177,6 @@ int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } - -void _rtw_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) -{ - void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - - - _write_mem = pintfhdl->io_ops._write_mem; - - _write_mem(pintfhdl, addr, cnt, pmem); - -} - void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index c39dc0cec609..6a1be6eb2e3b 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -676,7 +676,6 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; pops->_writeN = &usb_writeN; - pops->_write_mem = &usb_write_mem; pops->_write_port = &usb_write_port; pops->_read_port_cancel = &usb_read_port_cancel; pops->_write_port_cancel = &usb_write_port_cancel; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 04338ee95948..958fc5260cfc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -112,8 +112,6 @@ struct _io_ops { int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); - void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, - u8 *pmem); u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr); u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); @@ -254,7 +252,6 @@ int _rtw_write8_async(struct adapter *adapter, u32 addr, u8 val); int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val); -void _rtw_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); u32 _rtw_write_port_and_wait(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms); @@ -283,8 +280,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write16_async((adapter), (addr), (val)) #define rtw_write32_async(adapter, addr, val) \ _rtw_write32_async((adapter), (addr), (val)) -#define rtw_write_mem(adapter, addr, cnt, mem) \ - _rtw_write_mem((adapter), (addr), (cnt), (mem)) #define rtw_write_port(adapter, addr, cnt, mem) \ _rtw_write_port((adapter), (addr), (cnt), (mem)) #define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) \ diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 27dd7cda6554..5bac41473011 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -39,10 +39,6 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) return pipe; } -void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) -{ -} - void usb_read_port_cancel(struct intf_hdl *pintfhdl) { int i; -- cgit From 15b4159d7410bbb26af56e2f57da209b76963727 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:16 +0530 Subject: staging: rtl8188eu: Remove unused function declaration and macro Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_io.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 958fc5260cfc..e30b84bd48e2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -239,7 +239,6 @@ struct io_priv { u8 _rtw_read8(struct adapter *adapter, u32 addr); u16 _rtw_read16(struct adapter *adapter, u32 addr); u32 _rtw_read32(struct adapter *adapter, u32 addr); -void _rtw_read_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void _rtw_read_port_cancel(struct adapter *adapter); @@ -260,8 +259,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) -#define rtw_read_mem(adapter, addr, cnt, mem) \ - _rtw_read_mem((adapter), (addr), (cnt), (mem)) #define rtw_read_port(adapter, addr, cnt, mem) \ _rtw_read_port((adapter), (addr), (cnt), (mem)) #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) -- cgit From 38f946783bc869393b7d3d50a92bd3b36cf76a35 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:17 +0530 Subject: staging: rtl8188eu: rtw_io.h: Remove unused structures Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_io.h | 85 ------------------------------ 1 file changed, 85 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index e30b84bd48e2..e56c52b43d4d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -142,91 +142,6 @@ struct intf_hdl { struct _io_ops io_ops; }; -struct reg_protocol_rd { -#ifdef __LITTLE_ENDIAN - /* DW1 */ - u32 NumOfTrans:4; - u32 Reserved1:4; - u32 Reserved2:24; - /* DW2 */ - u32 ByteCount:7; - u32 WriteEnable:1; /* 0:read, 1:write */ - u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ - u32 BurstMode:1; - u32 Byte1Access:1; - u32 Byte2Access:1; - u32 Byte4Access:1; - u32 Reserved3:3; - u32 Reserved4:16; - /* DW3 */ - u32 BusAddress; - /* DW4 */ - /* u32 Value; */ -#else -/* DW1 */ - u32 Reserved1:4; - u32 NumOfTrans:4; - u32 Reserved2:24; - /* DW2 */ - u32 WriteEnable:1; - u32 ByteCount:7; - u32 Reserved3:3; - u32 Byte4Access:1; - - u32 Byte2Access:1; - u32 Byte1Access:1; - u32 BurstMode:1; - u32 FixOrContinuous:1; - u32 Reserved4:16; - /* DW3 */ - u32 BusAddress; - - /* DW4 */ -#endif -}; - -struct reg_protocol_wt { -#ifdef __LITTLE_ENDIAN - /* DW1 */ - u32 NumOfTrans:4; - u32 Reserved1:4; - u32 Reserved2:24; - /* DW2 */ - u32 ByteCount:7; - u32 WriteEnable:1; /* 0:read, 1:write */ - u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ - u32 BurstMode:1; - u32 Byte1Access:1; - u32 Byte2Access:1; - u32 Byte4Access:1; - u32 Reserved3:3; - u32 Reserved4:16; - /* DW3 */ - u32 BusAddress; - /* DW4 */ - u32 Value; -#else - /* DW1 */ - u32 Reserved1:4; - u32 NumOfTrans:4; - u32 Reserved2:24; - /* DW2 */ - u32 WriteEnable:1; - u32 ByteCount:7; - u32 Reserved3:3; - u32 Byte4Access:1; - u32 Byte2Access:1; - u32 Byte1Access:1; - u32 BurstMode:1; - u32 FixOrContinuous:1; - u32 Reserved4:16; - /* DW3 */ - u32 BusAddress; - /* DW4 */ - u32 Value; -#endif -}; - /* Below is the data structure used by _io_handler */ -- cgit From ef027d5749e0f0647b2ec74ac0fa4a365a3d39e5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:18 +0530 Subject: staging: rtl8188eu: HalPhyRf_8188e.c: Remove unused macro Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index fafb18c8ba31..5afaad2c7271 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -489,7 +489,6 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( /* 1 7. IQK */ #define MAX_TOLERANCE 5 -#define IQK_DELAY_TIME 1 /* ms */ static u8 /* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */ phy_PathA_IQK_8188E(struct adapter *adapt, bool configPathB) -- cgit From 6f33b2e1fd51641d8321b35cf60995e1cbbc9057 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 21:45:19 +0530 Subject: staging: rtl8188eu: HalPhyRf_8188e.c: Remove unnecessary comments Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 37 +++++--------------------- 1 file changed, 6 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 5afaad2c7271..c951616efdd6 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -1,5 +1,4 @@ - -/****************************************************************************** +/* * * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. * @@ -15,17 +14,13 @@ * 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 - * - * - ******************************************************************************/ + */ #include "odm_precomp.h" -/*---------------------------Define Local Constant---------------------------*/ /* 2010/04/25 MH Define the max tx power tracking tx agc power. */ #define ODM_TXPWRTRACK_MAX_IDX_88E 6 -/*---------------------------Define Local Constant---------------------------*/ u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) { @@ -47,27 +42,19 @@ u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) return 0; } -/* 3============================================================ */ /* 3 Tx Power Tracking */ -/* 3============================================================ */ -/*----------------------------------------------------------------------------- +/* * Function: ODM_TxPwrTrackAdjust88E() * * Overview: 88E we can not write 0xc80/c94/c4c/ 0xa2x. Instead of write TX agc. * No matter OFDM & CCK use the same method. * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * * Revised History: * When Who Remark * 04/23/2012 MHC Create Version 0. * 04/23/2012 MHC Adjust TX agc directly not throughput BB digital. * - *---------------------------------------------------------------------------*/ + */ void ODM_TxPwrTrackAdjust88E(struct odm_dm_struct *dm_odm, u8 Type,/* 0 = OFDM, 1 = CCK */ u8 *pDirection, /* 1 = +(increase) 2 = -(decrease) */ u32 *pOutWriteVal /* Tx tracking CCK/OFDM BB swing index adjust */ @@ -116,23 +103,12 @@ void ODM_TxPwrTrackAdjust88E(struct odm_dm_struct *dm_odm, u8 Type,/* 0 = OFDM, *pOutWriteVal = pwr_value | (pwr_value<<8) | (pwr_value<<16) | (pwr_value<<24); } /* ODM_TxPwrTrackAdjust88E */ -/*----------------------------------------------------------------------------- +/* * Function: odm_TxPwrTrackSetPwr88E() * * Overview: 88E change all channel tx power accordign to flag. * OFDM & CCK are all different. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 04/23/2012 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ + */ static void odm_TxPwrTrackSetPwr88E(struct odm_dm_struct *dm_odm) { if (dm_odm->BbSwingFlagOfdm || dm_odm->BbSwingFlagCck) { @@ -143,7 +119,6 @@ static void odm_TxPwrTrackSetPwr88E(struct odm_dm_struct *dm_odm) } } /* odm_TxPwrTrackSetPwr88E */ -/* 091212 chiyokolin */ void odm_TXPowerTrackingCallback_ThermalMeter_8188E( struct adapter *Adapter -- cgit From 1408d08c57753b51ae866ce486ae2bf023032ac1 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 22:34:28 +0530 Subject: staging: rtl8188eu: rtw_io.h: Remove unused macros Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_io.h | 57 ------------------------------ 1 file changed, 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index e56c52b43d4d..9c6384bb3aae 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -39,63 +39,6 @@ #define rtw_usb_buffer_free(dev, size, addr, dma) \ usb_free_coherent((dev), (size), (addr), (dma)) -#define NUM_IOREQ 8 - -#define MAX_PROT_SZ (64-16) - -#define _IOREADY 0 -#define _IO_WAIT_COMPLETE 1 -#define _IO_WAIT_RSP 2 - -/* IO COMMAND TYPE */ -#define _IOSZ_MASK_ (0x7F) -#define _IO_WRITE_ BIT(7) -#define _IO_FIXED_ BIT(8) -#define _IO_BURST_ BIT(9) -#define _IO_BYTE_ BIT(10) -#define _IO_HW_ BIT(11) -#define _IO_WORD_ BIT(12) -#define _IO_SYNC_ BIT(13) -#define _IO_CMDMASK_ (0x1F80) - -/* - For prompt mode accessing, caller shall free io_req - Otherwise, io_handler will free io_req -*/ - -/* IO STATUS TYPE */ -#define _IO_ERR_ BIT(2) -#define _IO_SUCCESS_ BIT(1) -#define _IO_DONE_ BIT(0) - -#define IO_RD32 (_IO_SYNC_ | _IO_WORD_) -#define IO_RD16 (_IO_SYNC_ | _IO_HW_) -#define IO_RD8 (_IO_SYNC_ | _IO_BYTE_) - -#define IO_RD32_ASYNC (_IO_WORD_) -#define IO_RD16_ASYNC (_IO_HW_) -#define IO_RD8_ASYNC (_IO_BYTE_) - -#define IO_WR32 (_IO_WRITE_ | _IO_SYNC_ | _IO_WORD_) -#define IO_WR16 (_IO_WRITE_ | _IO_SYNC_ | _IO_HW_) -#define IO_WR8 (_IO_WRITE_ | _IO_SYNC_ | _IO_BYTE_) - -#define IO_WR32_ASYNC (_IO_WRITE_ | _IO_WORD_) -#define IO_WR16_ASYNC (_IO_WRITE_ | _IO_HW_) -#define IO_WR8_ASYNC (_IO_WRITE_ | _IO_BYTE_) - -/* - Only Sync. burst accessing is provided. -*/ - -#define IO_WR_BURST(x) \ - (_IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) -#define IO_RD_BURST(x) \ - (_IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) - -/* below is for the intf_option bit defition... */ - -#define _INTF_ASYNC_ BIT(0) /* support async io */ struct intf_priv; struct intf_hdl; -- cgit From fb98c8a132da8cfc717ec898eaf8f526f9a7ee28 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 6 Jun 2014 23:13:18 +0530 Subject: staging: rtl8188eu: rtw_io.h: Remove unused members from struct _io_ops Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_io.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 9c6384bb3aae..bc36129093da 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -55,12 +55,10 @@ struct _io_ops { int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); - u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr); u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - u32 (*_write_scsi)(struct intf_hdl *pintfhdl, u32 cnt, u8 *pmem); void (*_read_port_cancel)(struct intf_hdl *pintfhdl); void (*_write_port_cancel)(struct intf_hdl *pintfhdl); }; -- cgit From c18e8c482d6b273b8317ea5318d883b955940628 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:20 +0530 Subject: staging: rtl8188eu: rtw_io.c: Remove unused function _rtw_write8_async() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 12 ------------ drivers/staging/rtl8188eu/include/rtw_io.h | 4 ---- 2 files changed, 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 292b6a1fee53..009dca5893d2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -138,18 +138,6 @@ int _rtw_writeN(struct adapter *adapter, u32 addr , u32 length , u8 *pdata) return RTW_STATUS_CODE(ret); } -int _rtw_write8_async(struct adapter *adapter, u32 addr, u8 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); - int ret; - _write8_async = pintfhdl->io_ops._write8_async; - - ret = _write8_async(pintfhdl, addr, val); - - return RTW_STATUS_CODE(ret); -} int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val) { diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index bc36129093da..546316408a5e 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -52,7 +52,6 @@ struct _io_ops { int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata); - int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, @@ -103,7 +102,6 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); -int _rtw_write8_async(struct adapter *adapter, u32 addr, u8 val); int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val); @@ -127,8 +125,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write32((adapter), (addr), (val)) #define rtw_writeN(adapter, addr, length, data) \ _rtw_writeN((adapter), (addr), (length), (data)) -#define rtw_write8_async(adapter, addr, val) \ - _rtw_write8_async((adapter), (addr), (val)) #define rtw_write16_async(adapter, addr, val) \ _rtw_write16_async((adapter), (addr), (val)) #define rtw_write32_async(adapter, addr, val) \ -- cgit From 006fe32c3ed39039841bb9cc29b3e47dc9b36b45 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:21 +0530 Subject: staging: rtl8188eu: rtw_io.c: Remove unused function rtw_write16_async() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 13 ------------- drivers/staging/rtl8188eu/include/rtw_io.h | 4 ---- 2 files changed, 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 009dca5893d2..420b84ebbf81 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -139,19 +139,6 @@ int _rtw_writeN(struct adapter *adapter, u32 addr , u32 length , u8 *pdata) return RTW_STATUS_CODE(ret); } -int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); - int ret; - - _write16_async = pintfhdl->io_ops._write16_async; - ret = _write16_async(pintfhdl, addr, val); - - return RTW_STATUS_CODE(ret); -} - int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val) { struct io_priv *pio_priv = &adapter->iopriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 546316408a5e..1943503950f1 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -52,7 +52,6 @@ struct _io_ops { int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata); - int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); @@ -102,7 +101,6 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); -int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val); u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); @@ -125,8 +123,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write32((adapter), (addr), (val)) #define rtw_writeN(adapter, addr, length, data) \ _rtw_writeN((adapter), (addr), (length), (data)) -#define rtw_write16_async(adapter, addr, val) \ - _rtw_write16_async((adapter), (addr), (val)) #define rtw_write32_async(adapter, addr, val) \ _rtw_write32_async((adapter), (addr), (val)) #define rtw_write_port(adapter, addr, cnt, mem) \ -- cgit From b47818474590ee90700d836ba58c817dab45f1b4 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:22 +0530 Subject: staging: rtl8188eu: rtw_io.c: Remove unused function _rtw_write32_async() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 13 ------------- drivers/staging/rtl8188eu/include/rtw_io.h | 5 ----- 2 files changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 420b84ebbf81..ed6cd2bed895 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -139,19 +139,6 @@ int _rtw_writeN(struct adapter *adapter, u32 addr , u32 length , u8 *pdata) return RTW_STATUS_CODE(ret); } -int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); - int ret; - - _write32_async = pintfhdl->io_ops._write32_async; - ret = _write32_async(pintfhdl, addr, val); - - return RTW_STATUS_CODE(ret); -} - void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 1943503950f1..e47d8192230a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -52,7 +52,6 @@ struct _io_ops { int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata); - int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, @@ -101,8 +100,6 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); -int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val); - u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); u32 _rtw_write_port_and_wait(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms); @@ -123,8 +120,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write32((adapter), (addr), (val)) #define rtw_writeN(adapter, addr, length, data) \ _rtw_writeN((adapter), (addr), (length), (data)) -#define rtw_write32_async(adapter, addr, val) \ - _rtw_write32_async((adapter), (addr), (val)) #define rtw_write_port(adapter, addr, cnt, mem) \ _rtw_write_port((adapter), (addr), (cnt), (mem)) #define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) \ -- cgit From dc955bcee4d3f8dced78d54c5f5d88dd09b1e9b7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:23 +0530 Subject: staging: rtl8188eu: rtw_io.c: Remove unused function _rtw_write_port_and_wait() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 17 ----------------- drivers/staging/rtl8188eu/include/rtw_io.h | 4 ---- 2 files changed, 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index ed6cd2bed895..a0a31e63cc74 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -187,23 +187,6 @@ u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) return ret; } -u32 _rtw_write_port_and_wait(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms) -{ - int ret = _SUCCESS; - struct xmit_buf *pxmitbuf = (struct xmit_buf *)pmem; - struct submit_ctx sctx; - - rtw_sctx_init(&sctx, timeout_ms); - pxmitbuf->sctx = &sctx; - - ret = _rtw_write_port(adapter, addr, cnt, pmem); - - if (ret == _SUCCESS) - ret = rtw_sctx_wait(&sctx); - - return ret; -} - void _rtw_write_port_cancel(struct adapter *adapter) { void (*_write_port_cancel)(struct intf_hdl *pintfhdl); diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index e47d8192230a..4c8a8c14baa9 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -101,8 +101,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -u32 _rtw_write_port_and_wait(struct adapter *adapter, u32 addr, u32 cnt, - u8 *pmem, int timeout_ms); void _rtw_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) @@ -122,8 +120,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_writeN((adapter), (addr), (length), (data)) #define rtw_write_port(adapter, addr, cnt, mem) \ _rtw_write_port((adapter), (addr), (cnt), (mem)) -#define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) \ - _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms)) #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) void rtw_write_scsi(struct adapter *adapter, u32 cnt, u8 *pmem); -- cgit From 6de25d05439a49554ede8f663bbae4900a6c0547 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:24 +0530 Subject: staging: rtl8188eu: rtw_io.h: Remove unused function declarations Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_io.h | 43 ------------------------------ 1 file changed, 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 4c8a8c14baa9..5c768152d849 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -122,51 +122,8 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write_port((adapter), (addr), (cnt), (mem)) #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) -void rtw_write_scsi(struct adapter *adapter, u32 cnt, u8 *pmem); - -/* ioreq */ -void ioreq_read8(struct adapter *adapter, u32 addr, u8 *pval); -void ioreq_read16(struct adapter *adapter, u32 addr, u16 *pval); -void ioreq_read32(struct adapter *adapter, u32 addr, u32 *pval); -void ioreq_write8(struct adapter *adapter, u32 addr, u8 val); -void ioreq_write16(struct adapter *adapter, u32 addr, u16 val); -void ioreq_write32(struct adapter *adapter, u32 addr, u32 val); - -uint async_read8(struct adapter *adapter, u32 addr, u8 *pbuff, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); -uint async_read16(struct adapter *adapter, u32 addr, u8 *pbuff, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); -uint async_read32(struct adapter *adapter, u32 addr, u8 *pbuff, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); - -void async_read_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void async_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); - -void async_write8(struct adapter *adapter, u32 addr, u8 val, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); -void async_write16(struct adapter *adapter, u32 addr, u16 val, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); -void async_write32(struct adapter *adapter, u32 addr, u32 val, - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, - u8 *cnxt), u8 *cnxt); - -void async_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void async_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); -void dev_power_down(struct adapter *Adapter, u8 bpwrup); - #endif /* _RTL8711_IO_H_ */ -- cgit From 3f5d24dcfa72fc641154dee38b280348ba637138 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:25 +0530 Subject: staging: rtl8188eu: Instead of intf_hdl pass adapter in read & write functions intf_hdl is passed in usb_[read,write][8,16,32]() functions, which is then passed to vender_request() there it's used to get adapter pointer, so instead of passing intf_hdl we can directly pass adapter. This change will also help in removing rtw_[read,write][8,16,32]() wrapper functions being used to call usb_[read,write][8,16,32]() functions. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 44 +++++++++++------------ drivers/staging/rtl8188eu/hal/usb_halinit.c | 4 +-- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 34 +++++++++--------- drivers/staging/rtl8188eu/include/rtw_io.h | 22 ++++++------ drivers/staging/rtl8188eu/include/usb_ops_linux.h | 6 ++-- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 9 ++--- 6 files changed, 57 insertions(+), 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index a0a31e63cc74..85306bff6662 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -57,10 +57,10 @@ u8 _rtw_read8(struct adapter *adapter, u32 addr) u8 r_val; struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr); + u8 (*_read8)(struct adapter *pintfhdl, u32 addr); _read8 = pintfhdl->io_ops._read8; - r_val = _read8(pintfhdl, addr); + r_val = _read8(adapter, addr); return r_val; } @@ -69,10 +69,10 @@ u16 _rtw_read16(struct adapter *adapter, u32 addr) u16 r_val; struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr); + u16 (*_read16)(struct adapter *pintfhdl, u32 addr); _read16 = pintfhdl->io_ops._read16; - r_val = _read16(pintfhdl, addr); + r_val = _read16(adapter, addr); return r_val; } @@ -81,10 +81,10 @@ u32 _rtw_read32(struct adapter *adapter, u32 addr) u32 r_val; struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr); + u32 (*_read32)(struct adapter *pintfhdl, u32 addr); _read32 = pintfhdl->io_ops._read32; - r_val = _read32(pintfhdl, addr); + r_val = _read32(adapter, addr); return r_val; } @@ -92,11 +92,11 @@ int _rtw_write8(struct adapter *adapter, u32 addr, u8 val) { struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); + int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int ret; _write8 = pintfhdl->io_ops._write8; - ret = _write8(pintfhdl, addr, val); + ret = _write8(adapter, addr, val); return RTW_STATUS_CODE(ret); } @@ -105,11 +105,11 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val) { struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); + int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); int ret; _write16 = pintfhdl->io_ops._write16; - ret = _write16(pintfhdl, addr, val); + ret = _write16(adapter, addr, val); return RTW_STATUS_CODE(ret); } @@ -117,11 +117,11 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) { struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); + int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); int ret; _write32 = pintfhdl->io_ops._write32; - ret = _write32(pintfhdl, addr, val); + ret = _write32(adapter, addr, val); return RTW_STATUS_CODE(ret); } @@ -130,18 +130,18 @@ int _rtw_writeN(struct adapter *adapter, u32 addr , u32 length , u8 *pdata) { struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = (struct intf_hdl *)(&(pio_priv->intf)); - int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata); + int (*_writeN)(struct adapter *pintfhdl, u32 addr, u32 length, u8 *pdata); int ret; _writeN = pintfhdl->io_ops._writeN; - ret = _writeN(pintfhdl, addr, length, pdata); + ret = _writeN(adapter, addr, length, pdata); return RTW_STATUS_CODE(ret); } void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { - u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); + u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); @@ -155,25 +155,25 @@ void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) _read_port = pintfhdl->io_ops._read_port; - _read_port(pintfhdl, addr, cnt, pmem); + _read_port(adapter, addr, cnt, pmem); } void _rtw_read_port_cancel(struct adapter *adapter) { - void (*_read_port_cancel)(struct intf_hdl *pintfhdl); + void (*_read_port_cancel)(struct adapter *pintfhdl); struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); _read_port_cancel = pintfhdl->io_ops._read_port_cancel; if (_read_port_cancel) - _read_port_cancel(pintfhdl); + _read_port_cancel(adapter); } u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { - u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); + u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); u32 ret = _SUCCESS; @@ -181,7 +181,7 @@ u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) _write_port = pintfhdl->io_ops._write_port; - ret = _write_port(pintfhdl, addr, cnt, pmem); + ret = _write_port(adapter, addr, cnt, pmem); return ret; @@ -189,14 +189,14 @@ u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) void _rtw_write_port_cancel(struct adapter *adapter) { - void (*_write_port_cancel)(struct intf_hdl *pintfhdl); + void (*_write_port_cancel)(struct adapter *pintfhdl); struct io_priv *pio_priv = &adapter->iopriv; struct intf_hdl *pintfhdl = &(pio_priv->intf); _write_port_cancel = pintfhdl->io_ops._write_port_cancel; if (_write_port_cancel) - _write_port_cancel(pintfhdl); + _write_port_cancel(adapter); } int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 316c82192df7..fdbc53a80fef 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1039,7 +1039,7 @@ static unsigned int rtl8188eu_inirp_init(struct adapter *Adapter) uint status; struct intf_hdl *pintfhdl = &Adapter->iopriv.intf; struct recv_priv *precvpriv = &(Adapter->recvpriv); - u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); + u32 (*_read_port)(struct adapter *padapter, u32 addr, u32 cnt, u8 *pmem); _read_port = pintfhdl->io_ops._read_port; @@ -1054,7 +1054,7 @@ static unsigned int rtl8188eu_inirp_init(struct adapter *Adapter) /* issue Rx irp to receive data */ precvbuf = (struct recv_buf *)precvpriv->precv_buf; for (i = 0; i < NR_RECVBUFF; i++) { - if (_read_port(pintfhdl, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf) == false) { + if (_read_port(Adapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf) == false) { RT_TRACE(_module_hci_hal_init_c_, _drv_err_, ("usb_rx_init: usb_read_port error\n")); status = _FAIL; goto exit; diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 6a1be6eb2e3b..d1f00db072c6 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -26,9 +26,8 @@ #include #include -static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype) +static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype) { - struct adapter *adapt = pintfhdl->padapter; struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt); struct usb_device *udev = dvobjpriv->pusbdev; unsigned int pipe; @@ -116,7 +115,7 @@ exit: return status; } -static u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr) +static u8 usb_read8(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -133,14 +132,14 @@ static u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr) wvalue = (u16)(addr&0x0000ffff); len = 1; - usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return data; } -static u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr) +static u16 usb_read16(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -154,12 +153,12 @@ static u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr) index = 0;/* n/a */ wvalue = (u16)(addr&0x0000ffff); len = 2; - usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return (u16)(le32_to_cpu(data)&0xffff); } -static u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr) +static u32 usb_read32(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -176,13 +175,13 @@ static u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr) wvalue = (u16)(addr&0x0000ffff); len = 4; - usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return le32_to_cpu(data); } -static int usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val) +static int usb_write8(struct adapter *adapter, u32 addr, u8 val) { u8 request; u8 requesttype; @@ -198,11 +197,11 @@ static int usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val) wvalue = (u16)(addr&0x0000ffff); len = 1; data = val; - ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return ret; } -static int usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val) +static int usb_write16(struct adapter *adapter, u32 addr, u16 val) { u8 request; u8 requesttype; @@ -222,13 +221,13 @@ static int usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val) data = cpu_to_le32(val & 0x0000ffff); - ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return ret; } -static int usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val) +static int usb_write32(struct adapter *adapter, u32 addr, u32 val) { u8 request; u8 requesttype; @@ -247,13 +246,13 @@ static int usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val) len = 4; data = cpu_to_le32(val); - ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype); + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); return ret; } -static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata) +static int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) { u8 request; u8 requesttype; @@ -272,7 +271,7 @@ static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata len = length; memcpy(buf, pdata, len); - ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, buf, len, requesttype); + ret = usbctrl_vendorreq(adapter, request, wvalue, index, buf, len, requesttype); return ret; @@ -565,11 +564,10 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) } } -static u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem) +static u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem) { struct urb *purb = NULL; struct recv_buf *precvbuf = (struct recv_buf *)rmem; - struct adapter *adapter = pintfhdl->padapter; struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter); struct recv_priv *precvpriv = &adapter->recvpriv; struct usb_device *pusbd = pdvobj->pusbdev; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 5c768152d849..f5a40b69bedc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -44,20 +44,20 @@ struct intf_priv; struct intf_hdl; struct _io_ops { - u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr); - u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr); - u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr); - int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); - int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); - int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); - int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, + u8 (*_read8)(struct adapter *pintfhdl, u32 addr); + u16 (*_read16)(struct adapter *pintfhdl, u32 addr); + u32 (*_read32)(struct adapter *pintfhdl, u32 addr); + int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); + int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); + int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); + int (*_writeN)(struct adapter *pintfhdl, u32 addr, u32 length, u8 *pdata); - u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, + u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, + u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - void (*_read_port_cancel)(struct intf_hdl *pintfhdl); - void (*_write_port_cancel)(struct intf_hdl *pintfhdl); + void (*_read_port_cancel)(struct adapter *pintfhdl); + void (*_write_port_cancel)(struct adapter *pintfhdl); }; struct io_req { diff --git a/drivers/staging/rtl8188eu/include/usb_ops_linux.h b/drivers/staging/rtl8188eu/include/usb_ops_linux.h index e5b758a81a5c..e722c455e6b6 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops_linux.h +++ b/drivers/staging/rtl8188eu/include/usb_ops_linux.h @@ -47,9 +47,9 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr); void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem); void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem); -void usb_read_port_cancel(struct intf_hdl *pintfhdl); +void usb_read_port_cancel(struct adapter *padapter); -u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem); -void usb_write_port_cancel(struct intf_hdl *pintfhdl); +u32 usb_write_port(struct adapter *padapter, u32 addr, u32 cnt, u8 *wmem); +void usb_write_port_cancel(struct adapter *padapter); #endif diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 5bac41473011..92c42e49a946 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -39,11 +39,10 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) return pipe; } -void usb_read_port_cancel(struct intf_hdl *pintfhdl) +void usb_read_port_cancel(struct adapter *padapter) { int i; struct recv_buf *precvbuf; - struct adapter *padapter = pintfhdl->padapter; precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf; DBG_88E("%s\n", __func__); @@ -137,14 +136,13 @@ check_completion: tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); } -u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) +u32 usb_write_port(struct adapter *padapter, u32 addr, u32 cnt, u8 *wmem) { unsigned long irqL; unsigned int pipe; int status; u32 ret = _FAIL; struct urb *purb = NULL; - struct adapter *padapter = (struct adapter *)pintfhdl->padapter; struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter); struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem; @@ -230,10 +228,9 @@ exit: return ret; } -void usb_write_port_cancel(struct intf_hdl *pintfhdl) +void usb_write_port_cancel(struct adapter *padapter) { int i, j; - struct adapter *padapter = pintfhdl->padapter; struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf; DBG_88E("%s\n", __func__); -- cgit From b9c74f3196bc417efc3c6a29498b77afed8fdc11 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:26 +0530 Subject: staging: rtl8188eu: Remove function _rtw_writeN() _rtw_writeN() is a wrapper function, being used to call usb_writeN(). Call usb_writeN() directly and drop _rtw_writeN(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 13 ------------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 4 ++-- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 5 ++--- drivers/staging/rtl8188eu/include/rtw_io.h | 6 +----- 4 files changed, 5 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 85306bff6662..ee1fadeab99f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -126,19 +126,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -int _rtw_writeN(struct adapter *adapter, u32 addr , u32 length , u8 *pdata) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = (struct intf_hdl *)(&(pio_priv->intf)); - int (*_writeN)(struct adapter *pintfhdl, u32 addr, u32 length, u8 *pdata); - int ret; - _writeN = pintfhdl->io_ops._writeN; - - ret = _writeN(adapter, addr, length, pdata); - - return RTW_STATUS_CODE(ret); -} - void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 208b3739b644..1a53a1678102 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -441,7 +441,7 @@ static int _BlockWrite(struct adapter *padapter, void *buffer, u32 buffSize) } for (i = 0; i < blockCount_p1; i++) { - ret = rtw_writeN(padapter, (FW_8188E_START_ADDRESS + i * blockSize_p1), blockSize_p1, (bufferPtr + i * blockSize_p1)); + ret = usb_writeN(padapter, (FW_8188E_START_ADDRESS + i * blockSize_p1), blockSize_p1, (bufferPtr + i * blockSize_p1)); if (ret == _FAIL) goto exit; } @@ -460,7 +460,7 @@ static int _BlockWrite(struct adapter *padapter, void *buffer, u32 buffSize) } for (i = 0; i < blockCount_p2; i++) { - ret = rtw_writeN(padapter, (FW_8188E_START_ADDRESS + offset + i*blockSize_p2), blockSize_p2, (bufferPtr + offset + i*blockSize_p2)); + ret = usb_writeN(padapter, (FW_8188E_START_ADDRESS + offset + i*blockSize_p2), blockSize_p2, (bufferPtr + offset + i*blockSize_p2)); if (ret == _FAIL) goto exit; diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index d1f00db072c6..24b347b08d1b 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -252,7 +252,7 @@ static int usb_write32(struct adapter *adapter, u32 addr, u32 val) return ret; } -static int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) +int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) { u8 request; u8 requesttype; @@ -274,7 +274,7 @@ static int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) ret = usbctrl_vendorreq(adapter, request, wvalue, index, buf, len, requesttype); - return ret; + return RTW_STATUS_CODE(ret); } static void interrupt_handler_8188eu(struct adapter *adapt, u16 pkt_len, u8 *pbuf) @@ -673,7 +673,6 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; - pops->_writeN = &usb_writeN; pops->_write_port = &usb_write_port; pops->_read_port_cancel = &usb_read_port_cancel; pops->_write_port_cancel = &usb_write_port_cancel; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index f5a40b69bedc..77193b564380 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -50,8 +50,6 @@ struct _io_ops { int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); - int (*_writeN)(struct adapter *pintfhdl, u32 addr, u32 length, - u8 *pdata); u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, @@ -98,7 +96,7 @@ void _rtw_read_port_cancel(struct adapter *adapter); int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); -int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); +int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void _rtw_write_port_cancel(struct adapter *adapter); @@ -116,8 +114,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write16((adapter), (addr), (val)) #define rtw_write32(adapter, addr, val) \ _rtw_write32((adapter), (addr), (val)) -#define rtw_writeN(adapter, addr, length, data) \ - _rtw_writeN((adapter), (addr), (length), (data)) #define rtw_write_port(adapter, addr, cnt, mem) \ _rtw_write_port((adapter), (addr), (cnt), (mem)) #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) -- cgit From 2478a1ce2e7a7d358875f79a4fb4a12ce10cd097 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:27 +0530 Subject: staging: rtl8188eu: Remove function _rtw_read_port() _rtw_read_port() is a wrapper function, being used to call usb_read_port(). use usb_read_port() directly and drop _rtw_read_port(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 20 -------------------- drivers/staging/rtl8188eu/hal/usb_halinit.c | 7 +------ drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 9 ++++----- drivers/staging/rtl8188eu/include/rtw_io.h | 6 +----- drivers/staging/rtl8188eu/os_dep/recv_linux.c | 2 +- 5 files changed, 7 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index ee1fadeab99f..4a3cd3dc8d15 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -126,26 +126,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) -{ - u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - - - if (adapter->bDriverStopped || adapter->bSurpriseRemoved) { - RT_TRACE(_module_rtl871x_io_c_, _drv_info_, - ("rtw_read_port:bDriverStopped(%d) OR bSurpriseRemoved(%d)", - adapter->bDriverStopped, adapter->bSurpriseRemoved)); - return; - } - - _read_port = pintfhdl->io_ops._read_port; - - _read_port(adapter, addr, cnt, pmem); - -} - void _rtw_read_port_cancel(struct adapter *adapter) { void (*_read_port_cancel)(struct adapter *pintfhdl); diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index fdbc53a80fef..0118b9dc9a86 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1037,12 +1037,7 @@ static unsigned int rtl8188eu_inirp_init(struct adapter *Adapter) u8 i; struct recv_buf *precvbuf; uint status; - struct intf_hdl *pintfhdl = &Adapter->iopriv.intf; struct recv_priv *precvpriv = &(Adapter->recvpriv); - u32 (*_read_port)(struct adapter *padapter, u32 addr, u32 cnt, u8 *pmem); - - - _read_port = pintfhdl->io_ops._read_port; status = _SUCCESS; @@ -1054,7 +1049,7 @@ static unsigned int rtl8188eu_inirp_init(struct adapter *Adapter) /* issue Rx irp to receive data */ precvbuf = (struct recv_buf *)precvpriv->precv_buf; for (i = 0; i < NR_RECVBUFF; i++) { - if (_read_port(Adapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf) == false) { + if (usb_read_port(Adapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf) == false) { RT_TRACE(_module_hci_hal_init_c_, _drv_err_, ("usb_rx_init: usb_read_port error\n")); status = _FAIL; goto exit; diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 24b347b08d1b..c41085ca9580 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -511,7 +511,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n")); precvbuf->reuse = true; - rtw_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); DBG_88E("%s()-%d: RX Warning!\n", __func__, __LINE__); } else { rtw_reset_continual_urb_error(adapter_to_dvobj(adapt)); @@ -524,7 +524,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) precvbuf->pskb = NULL; precvbuf->reuse = false; - rtw_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); } } else { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete : purb->status(%d) != 0\n", purb->status)); @@ -553,7 +553,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) haldata->srestpriv.Wifi_Error_Status = USB_READ_PORT_FAIL; } precvbuf->reuse = true; - rtw_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); break; case -EINPROGRESS: DBG_88E("ERROR: URB IS IN PROGRESS!\n"); @@ -564,7 +564,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) } } -static u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem) +u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem) { struct urb *purb = NULL; struct recv_buf *precvbuf = (struct recv_buf *)rmem; @@ -669,7 +669,6 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_read8 = &usb_read8; pops->_read16 = &usb_read16; pops->_read32 = &usb_read32; - pops->_read_port = &usb_read_port; pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 77193b564380..e68b40cca5b8 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -50,8 +50,6 @@ struct _io_ops { int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); - u32 (*_read_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, - u8 *pmem); u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); void (*_read_port_cancel)(struct adapter *pintfhdl); @@ -90,7 +88,7 @@ struct io_priv { u8 _rtw_read8(struct adapter *adapter, u32 addr); u16 _rtw_read16(struct adapter *adapter, u32 addr); u32 _rtw_read32(struct adapter *adapter, u32 addr); -void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); +u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void _rtw_read_port_cancel(struct adapter *adapter); int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); @@ -104,8 +102,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) -#define rtw_read_port(adapter, addr, cnt, mem) \ - _rtw_read_port((adapter), (addr), (cnt), (mem)) #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) #define rtw_write8(adapter, addr, val) \ diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index c0fa8fdb9d92..64dfc02ad08a 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -199,7 +199,7 @@ void rtw_os_read_port(struct adapter *padapter, struct recv_buf *precvbuf) dev_kfree_skb_any(precvbuf->pskb); precvbuf->pskb = NULL; precvbuf->reuse = false; - rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, + usb_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); } -- cgit From e81ffd89be17d7a43af51734c36f20070d4f9b13 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:28 +0530 Subject: staging: rtl8188eu: Remove function _rtw_read_port_cancel() _rtw_read_port_cancel() is a wrapper function, being used to call usb_read_port_cancel(). Call usb_read_port_cancel() directly and drop _rtw_read_port_cancel(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 12 ------------ drivers/staging/rtl8188eu/hal/usb_halinit.c | 2 +- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 4 +--- 4 files changed, 2 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 4a3cd3dc8d15..627a8521b658 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -126,18 +126,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -void _rtw_read_port_cancel(struct adapter *adapter) -{ - void (*_read_port_cancel)(struct adapter *pintfhdl); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - - _read_port_cancel = pintfhdl->io_ops._read_port_cancel; - - if (_read_port_cancel) - _read_port_cancel(adapter); -} - u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) { u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 0118b9dc9a86..88dbc955dc4b 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1071,7 +1071,7 @@ static unsigned int rtl8188eu_inirp_deinit(struct adapter *Adapter) { RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("\n ===> usb_rx_deinit\n")); - rtw_read_port_cancel(Adapter); + usb_read_port_cancel(Adapter); RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("\n <=== usb_rx_deinit\n")); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index c41085ca9580..95f6c10f4fa6 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -673,6 +673,5 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; pops->_write_port = &usb_write_port; - pops->_read_port_cancel = &usb_read_port_cancel; pops->_write_port_cancel = &usb_write_port_cancel; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index e68b40cca5b8..0ca46e80c159 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -52,7 +52,6 @@ struct _io_ops { int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - void (*_read_port_cancel)(struct adapter *pintfhdl); void (*_write_port_cancel)(struct adapter *pintfhdl); }; @@ -89,7 +88,7 @@ u8 _rtw_read8(struct adapter *adapter, u32 addr); u16 _rtw_read16(struct adapter *adapter, u32 addr); u32 _rtw_read32(struct adapter *adapter, u32 addr); u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void _rtw_read_port_cancel(struct adapter *adapter); +void usb_read_port_cancel(struct adapter *adapter); int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); @@ -102,7 +101,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) -#define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) #define rtw_write8(adapter, addr, val) \ _rtw_write8((adapter), (addr), (val)) -- cgit From 05fa5ec2d8d12892f9945beebd3fdbfde7853b91 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:29 +0530 Subject: staging: rtl8188eu: Remove function _rtw_write_port() _rtw_write_port() is a wrapper function, being used to call usb_write_port(). Call usb_write_port() directly and drop _rtw_write_port(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 16 ---------------- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 4 ++-- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 6 +----- 4 files changed, 3 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 627a8521b658..a0a395c40eff 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -126,22 +126,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem) -{ - u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, u8 *pmem); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - u32 ret = _SUCCESS; - - - _write_port = pintfhdl->io_ops._write_port; - - ret = _write_port(adapter, addr, cnt, pmem); - - - return ret; -} - void _rtw_write_port_cancel(struct adapter *adapter) { void (*_write_port_cancel)(struct adapter *pintfhdl); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 3476f8898330..4bc2ce0bb319 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -397,7 +397,7 @@ static s32 rtw_dump_xframe(struct adapter *adapt, struct xmit_frame *pxmitframe) } ff_hwaddr = rtw_get_ff_hwaddr(pxmitframe); - inner_ret = rtw_write_port(adapt, ff_hwaddr, w_sz, (unsigned char *)pxmitbuf); + inner_ret = usb_write_port(adapt, ff_hwaddr, w_sz, (unsigned char *)pxmitbuf); rtw_count_tx_stats(adapt, pxmitframe, sz); @@ -608,7 +608,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp /* 3 4. write xmit buffer to USB FIFO */ ff_hwaddr = rtw_get_ff_hwaddr(pfirstframe); - rtw_write_port(adapt, ff_hwaddr, pbuf_tail, (u8 *)pxmitbuf); + usb_write_port(adapt, ff_hwaddr, pbuf_tail, (u8 *)pxmitbuf); /* 3 5. update statisitc */ pbuf_tail -= (pfirstframe->agg_num * TXDESC_SIZE); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 95f6c10f4fa6..02ab5410fd60 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -672,6 +672,5 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; - pops->_write_port = &usb_write_port; pops->_write_port_cancel = &usb_write_port_cancel; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 0ca46e80c159..4f2409209be2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -50,8 +50,6 @@ struct _io_ops { int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); - u32 (*_write_port)(struct adapter *pintfhdl, u32 addr, u32 cnt, - u8 *pmem); void (*_write_port_cancel)(struct adapter *pintfhdl); }; @@ -95,7 +93,7 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); -u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); +u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void _rtw_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) @@ -108,8 +106,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write16((adapter), (addr), (val)) #define rtw_write32(adapter, addr, val) \ _rtw_write32((adapter), (addr), (val)) -#define rtw_write_port(adapter, addr, cnt, mem) \ - _rtw_write_port((adapter), (addr), (cnt), (mem)) #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) -- cgit From 14af3550a69b9356d81a14f277209e362c3a0024 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:30 +0530 Subject: staging: rtl8188eu: Remove function _rtw_write_port_cancel() _rtw_write_port_cancel() is a wrapper function, being used to call usb_write_port_cancel(). Call usb_write_port_cancel() directly and drop _rtw_write_port_cancel(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 12 ------------ drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 5 +---- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 +- 4 files changed, 2 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index a0a395c40eff..182074faa58a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -126,18 +126,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) return RTW_STATUS_CODE(ret); } -void _rtw_write_port_cancel(struct adapter *adapter) -{ - void (*_write_port_cancel)(struct adapter *pintfhdl); - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - - _write_port_cancel = pintfhdl->io_ops._write_port_cancel; - - if (_write_port_cancel) - _write_port_cancel(adapter); -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 02ab5410fd60..cfba5d6f1bfc 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -672,5 +672,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; pops->_write32 = &usb_write32; - pops->_write_port_cancel = &usb_write_port_cancel; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 4f2409209be2..9c34328f84ab 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -50,7 +50,6 @@ struct _io_ops { int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); - void (*_write_port_cancel)(struct adapter *pintfhdl); }; struct io_req { @@ -94,7 +93,7 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void _rtw_write_port_cancel(struct adapter *adapter); +void usb_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) @@ -106,8 +105,6 @@ void _rtw_write_port_cancel(struct adapter *adapter); _rtw_write16((adapter), (addr), (val)) #define rtw_write32(adapter, addr, val) \ _rtw_write32((adapter), (addr), (val)) -#define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 25a931ac1fe3..491d8e5a6ec0 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -194,7 +194,7 @@ static void usb_intf_stop(struct adapter *padapter) rtw_hal_inirp_deinit(padapter); /* cancel out irp */ - rtw_write_port_cancel(padapter); + usb_write_port_cancel(padapter); /* todo:cancel other irps */ -- cgit From fc1580795654c2011ee4c886a71900c1f3ce1365 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:31 +0530 Subject: staging: rtl8188eu: Remove function _rtw_write32() _rtw_write32() is a wrapper function, being used to call usb_write32(). Call usb_write32() directly and drop _rtw_write32(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_io.c | 12 --- drivers/staging/rtl8188eu/core/rtw_mp.c | 16 ++-- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 2 +- drivers/staging/rtl8188eu/hal/odm.c | 4 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 6 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 6 +- drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 2 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 94 +++++++++++------------ drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +- drivers/staging/rtl8188eu/include/rtw_io.h | 5 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 14 ++-- 13 files changed, 76 insertions(+), 92 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index 995b74bfb44f..eaf021208455 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -69,7 +69,7 @@ int proc_set_write_reg(struct file *file, const char __user *buffer, rtw_write16(padapter, addr, (u16)val); break; case 4: - rtw_write32(padapter, addr, val); + usb_write32(padapter, addr, val); break; default: DBG_88E("error write length =%d", len); diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 182074faa58a..ebbbbd6a0d08 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -113,18 +113,6 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val) return RTW_STATUS_CODE(ret); } -int _rtw_write32(struct adapter *adapter, u32 addr, u32 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); - int ret; - _write32 = pintfhdl->io_ops._write32; - - ret = _write32(adapter, addr, val); - - return RTW_STATUS_CODE(ret); -} int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 17427a68b66c..d1b2c54b56ee 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -56,7 +56,7 @@ void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz) rtw_write16(padapter, addr, (u16)val); break; case 4: - rtw_write32(padapter, addr, val); + usb_write32(padapter, addr, val); break; default: break; @@ -221,7 +221,7 @@ s32 MPT_InitializeAdapter(struct adapter *pAdapter, u8 Channel) /* */ /* Don't accept any packets */ - rtw_write32(pAdapter, REG_RCR, 0); + usb_write32(pAdapter, REG_RCR, 0); PHY_IQCalibrate(pAdapter, false); dm_CheckTXPowerTracking(&pHalData->odmpriv); /* trigger thermal meter */ @@ -788,12 +788,12 @@ void SetPacketRx(struct adapter *pAdapter, u8 bStartRx) pHalData->ReceiveConfig |= ACRC32; - rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig); + usb_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig); /* Accept all data frames */ rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF); } else { - rtw_write32(pAdapter, REG_RCR, 0); + usb_write32(pAdapter, REG_RCR, 0); } } @@ -805,7 +805,7 @@ void ResetPhyRxPktCount(struct adapter *pAdapter) phyrx_set = 0; phyrx_set |= _RXERR_RPT_SEL(i); /* select */ phyrx_set |= RXERR_RPT_RST; /* set counter to zero */ - rtw_write32(pAdapter, REG_RXERR_RPT, phyrx_set); + usb_write32(pAdapter, REG_RXERR_RPT, phyrx_set); } } @@ -815,7 +815,7 @@ static u32 GetPhyRxPktCounts(struct adapter *pAdapter, u32 selbit) u32 phyrx_set = 0, count = 0; phyrx_set = _RXERR_RPT_SEL(selbit & 0xF); - rtw_write32(pAdapter, REG_RXERR_RPT, phyrx_set); + usb_write32(pAdapter, REG_RXERR_RPT, phyrx_set); /* Read packet count */ count = rtw_read32(pAdapter, REG_RXERR_RPT) & RXERR_COUNTER_MASK; @@ -857,11 +857,11 @@ static u32 rtw_GetPSDData(struct adapter *pAdapter, u32 point) psd_val &= 0xFFBFFC00; psd_val |= point; - rtw_write32(pAdapter, 0x808, psd_val); + usb_write32(pAdapter, 0x808, psd_val); mdelay(1); psd_val |= 0x00400000; - rtw_write32(pAdapter, 0x808, psd_val); + usb_write32(pAdapter, 0x808, psd_val); mdelay(1); psd_val = rtw_read32(pAdapter, 0x8B4); diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index e783968b29ea..71b255d1b150 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -863,7 +863,7 @@ int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv) rtw_write16(padapter, offset, (u16)value); break; case 4: - rtw_write32(padapter, offset, value); + usb_write32(padapter, offset, value); break; default: status = NDIS_STATUS_NOT_ACCEPTED; diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index c951616efdd6..59bd94928eac 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -850,7 +850,7 @@ _PHY_ReloadMACRegisters( for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) { rtw_write8(adapt, MACReg[i], (u8)MACBackup[i]); } - rtw_write32(adapt, MACReg[i], MACBackup[i]); + usb_write32(adapt, MACReg[i], MACBackup[i]); } void diff --git a/drivers/staging/rtl8188eu/hal/odm.c b/drivers/staging/rtl8188eu/hal/odm.c index 2a0ac4ab23d2..dfab77e073d7 100644 --- a/drivers/staging/rtl8188eu/hal/odm.c +++ b/drivers/staging/rtl8188eu/hal/odm.c @@ -1363,7 +1363,7 @@ void odm_EdcaTurboCheckCE(struct odm_dm_struct *pDM_Odm) else edca_param = EDCAParam[HT_IOT_PEER_UNKNOWN][trafficIndex]; - rtw_write32(Adapter, REG_EDCA_BE_PARAM, edca_param); + usb_write32(Adapter, REG_EDCA_BE_PARAM, edca_param); pDM_Odm->DM_EDCA_Table.prv_traffic_idx = trafficIndex; } @@ -1373,7 +1373,7 @@ void odm_EdcaTurboCheckCE(struct odm_dm_struct *pDM_Odm) /* Turn Off EDCA turbo here. */ /* Restore original EDCA according to the declaration of AP. */ if (pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA) { - rtw_write32(Adapter, REG_EDCA_BE_PARAM, pHalData->AcParam_BE); + usb_write32(Adapter, REG_EDCA_BE_PARAM, pHalData->AcParam_BE); pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false; } } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 021e5879abcf..b14faac3f8b1 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -726,9 +726,9 @@ void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state) p2p_ps_offload->NoA1_En = 1; /* config P2P NoA Descriptor Register */ - rtw_write32(adapt, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]); - rtw_write32(adapt, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]); - rtw_write32(adapt, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]); + usb_write32(adapt, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]); + usb_write32(adapt, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]); + usb_write32(adapt, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]); rtw_write8(adapt, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 1a53a1678102..a0659fcdd0ae 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -372,7 +372,7 @@ void rtw_IOL_cmd_tx_pkt_buf_dump(struct adapter *Adapter, int data_len) rtw_write8(Adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); if (pbuf) { for (addr = 0; addr < data_cnts; addr++) { - rtw_write32(Adapter, 0x140, addr); + usb_write32(Adapter, 0x140, addr); msleep(1); loop = 0; do { @@ -563,7 +563,7 @@ static s32 _FWFreeToGo(struct adapter *padapter) value32 = rtw_read32(padapter, REG_MCUFWDL); value32 |= MCUFWDL_RDY; value32 &= ~WINTINI_RDY; - rtw_write32(padapter, REG_MCUFWDL, value32); + usb_write32(padapter, REG_MCUFWDL, value32); _8051Reset88E(padapter); @@ -1903,7 +1903,7 @@ static s32 _LLTWrite(struct adapter *padapter, u32 address, u32 data) u32 value = _LLT_INIT_ADDR(address) | _LLT_INIT_DATA(data) | _LLT_OP(_LLT_WRITE_ACCESS); u16 LLTReg = REG_LLT_INIT; - rtw_write32(padapter, LLTReg, value); + usb_write32(padapter, LLTReg, value); /* polling */ do { diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 941ff7467c3c..73e90e369187 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -129,7 +129,7 @@ void rtl8188e_PHY_SetBBReg(struct adapter *Adapter, u32 RegAddr, u32 BitMask, u3 Data = ((OriginalValue & (~BitMask)) | (Data << BitShift)); } - rtw_write32(Adapter, RegAddr, Data); + usb_write32(Adapter, RegAddr, Data); } diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 88dbc955dc4b..f4df6d46d5dd 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -139,14 +139,14 @@ static void _InitInterrupt(struct adapter *Adapter) struct hal_data_8188e *haldata = GET_HAL_DATA(Adapter); /* HISR write one to clear */ - rtw_write32(Adapter, REG_HISR_88E, 0xFFFFFFFF); + usb_write32(Adapter, REG_HISR_88E, 0xFFFFFFFF); /* HIMR - */ imr = IMR_PSTIMEOUT_88E | IMR_TBDER_88E | IMR_CPWM_88E | IMR_CPWM2_88E; - rtw_write32(Adapter, REG_HIMR_88E, imr); + usb_write32(Adapter, REG_HIMR_88E, imr); haldata->IntrMask[0] = imr; imr_ex = IMR_TXERR_88E | IMR_RXERR_88E | IMR_TXFOVW_88E | IMR_RXFOVW_88E; - rtw_write32(Adapter, REG_HIMRE_88E, imr_ex); + usb_write32(Adapter, REG_HIMRE_88E, imr_ex); haldata->IntrMask[1] = imr_ex; /* REG_USB_SPECIAL_OPTION - BIT(4) */ @@ -191,11 +191,11 @@ static void _InitQueueReservedPage(struct adapter *Adapter) /* TX DMA */ value32 = _HPQ(numHQ) | _LPQ(numLQ) | _PUBQ(numPubQ) | LD_RQPN; - rtw_write32(Adapter, REG_RQPN, value32); + usb_write32(Adapter, REG_RQPN, value32); } else { rtw_write16(Adapter, REG_RQPN_NPQ, 0x0000);/* Just follow MP Team,??? Georgia 03/28 */ rtw_write16(Adapter, REG_RQPN_NPQ, 0x0d); - rtw_write32(Adapter, REG_RQPN, 0x808E000d);/* reserve 7 page for LPS */ + usb_write32(Adapter, REG_RQPN, 0x808E000d);/* reserve 7 page for LPS */ } } @@ -345,7 +345,7 @@ static void _InitNetworkType(struct adapter *Adapter) /* TODO: use the other function to set network type */ value32 = (value32 & ~MASK_NETTYPE) | _NETTYPE(NT_LINK_AP); - rtw_write32(Adapter, REG_CR, value32); + usb_write32(Adapter, REG_CR, value32); } static void _InitTransferPageSize(struct adapter *Adapter) @@ -372,11 +372,11 @@ static void _InitWMACSetting(struct adapter *Adapter) RCR_APP_MIC | RCR_APP_PHYSTS; /* some REG_RCR will be modified later by phy_ConfigMACWithHeaderFile() */ - rtw_write32(Adapter, REG_RCR, haldata->ReceiveConfig); + usb_write32(Adapter, REG_RCR, haldata->ReceiveConfig); /* Accept all multicast address */ - rtw_write32(Adapter, REG_MAR, 0xFFFFFFFF); - rtw_write32(Adapter, REG_MAR + 4, 0xFFFFFFFF); + usb_write32(Adapter, REG_MAR, 0xFFFFFFFF); + usb_write32(Adapter, REG_MAR + 4, 0xFFFFFFFF); } static void _InitAdaptiveCtrl(struct adapter *Adapter) @@ -388,7 +388,7 @@ static void _InitAdaptiveCtrl(struct adapter *Adapter) value32 = rtw_read32(Adapter, REG_RRSR); value32 &= ~RATE_BITMAP_ALL; value32 |= RATE_RRSR_CCK_ONLY_1M; - rtw_write32(Adapter, REG_RRSR, value32); + usb_write32(Adapter, REG_RRSR, value32); /* CF-END Threshold */ @@ -414,10 +414,10 @@ static void _InitEDCA(struct adapter *Adapter) rtw_write16(Adapter, REG_SIFS_TRX, 0x100a); /* TXOP */ - rtw_write32(Adapter, REG_EDCA_BE_PARAM, 0x005EA42B); - rtw_write32(Adapter, REG_EDCA_BK_PARAM, 0x0000A44F); - rtw_write32(Adapter, REG_EDCA_VI_PARAM, 0x005EA324); - rtw_write32(Adapter, REG_EDCA_VO_PARAM, 0x002FA226); + usb_write32(Adapter, REG_EDCA_BE_PARAM, 0x005EA42B); + usb_write32(Adapter, REG_EDCA_BK_PARAM, 0x0000A44F); + usb_write32(Adapter, REG_EDCA_VI_PARAM, 0x005EA324); + usb_write32(Adapter, REG_EDCA_VO_PARAM, 0x002FA226); } static void _InitRDGSetting(struct adapter *Adapter) @@ -429,8 +429,8 @@ static void _InitRDGSetting(struct adapter *Adapter) static void _InitRxSetting(struct adapter *Adapter) { - rtw_write32(Adapter, REG_MACID, 0x87654321); - rtw_write32(Adapter, 0x0700, 0x87654321); + usb_write32(Adapter, REG_MACID, 0x87654321); + usb_write32(Adapter, 0x0700, 0x87654321); } static void _InitRetryFunction(struct adapter *Adapter) @@ -473,7 +473,7 @@ static void usb_AggSettingTxUpdate(struct adapter *Adapter) value32 = value32 & ~(BLK_DESC_NUM_MASK << BLK_DESC_NUM_SHIFT); value32 |= ((haldata->UsbTxAggDescNum & BLK_DESC_NUM_MASK) << BLK_DESC_NUM_SHIFT); - rtw_write32(Adapter, REG_TDECTRL, value32); + usb_write32(Adapter, REG_TDECTRL, value32); } } /* usb_AggSettingTxUpdate */ @@ -633,7 +633,7 @@ static void _InitAntenna_Selection(struct adapter *Adapter) return; DBG_88E("==> %s ....\n", __func__); - rtw_write32(Adapter, REG_LEDCFG0, rtw_read32(Adapter, REG_LEDCFG0)|BIT23); + usb_write32(Adapter, REG_LEDCFG0, rtw_read32(Adapter, REG_LEDCFG0)|BIT23); PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, BIT13, 0x01); if (PHY_QueryBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300) == Antenna_A) @@ -867,7 +867,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11); /* Disable BAR, suggested by Scott */ /* 2010.04.09 add by hpfan */ /* */ - rtw_write32(Adapter, REG_BAR_MODE_CTRL, 0x0201ffff); + usb_write32(Adapter, REG_BAR_MODE_CTRL, 0x0201ffff); /* HW SEQ CTRL */ /* set 0x0 to 0xFF by tynli. Default enable HW SEQ NUM. */ @@ -931,7 +931,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_LCK); rtw_write8(Adapter, REG_USB_HRPWM, 0); /* ack for xmit mgmt frames. */ - rtw_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); + usb_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); exit: HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_END); @@ -995,7 +995,7 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) rtw_write8(Adapter, REG_GPIO_IO_SEL, (val8<<4)); val8 = rtw_read8(Adapter, REG_GPIO_IO_SEL+1); rtw_write8(Adapter, REG_GPIO_IO_SEL+1, val8|0x0F);/* Reg0x43 */ - rtw_write32(Adapter, REG_BB_PAD_CTRL, 0x00080808);/* set LNA ,TRSW,EX_PA Pin to output mode */ + usb_write32(Adapter, REG_BB_PAD_CTRL, 0x00080808);/* set LNA ,TRSW,EX_PA Pin to output mode */ haldata->bMacPwrCtrlOn = false; Adapter->bFWReady = false; } @@ -1014,8 +1014,8 @@ static u32 rtl8188eu_hal_deinit(struct adapter *Adapter) DBG_88E("==> %s\n", __func__); - rtw_write32(Adapter, REG_HIMR_88E, IMR_DISABLED_88E); - rtw_write32(Adapter, REG_HIMRE_88E, IMR_DISABLED_88E); + usb_write32(Adapter, REG_HIMR_88E, IMR_DISABLED_88E); + usb_write32(Adapter, REG_HIMRE_88E, IMR_DISABLED_88E); DBG_88E("bkeepfwalive(%x)\n", Adapter->pwrctrlpriv.bkeepfwalive); if (Adapter->pwrctrlpriv.bkeepfwalive) { @@ -1257,7 +1257,7 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) rtw_write8(Adapter, REG_BCN_CTRL, 0x12); /* Set RCR */ - rtw_write32(Adapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0,reject ICV_ERR packet */ + usb_write32(Adapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0,reject ICV_ERR packet */ /* enable to rx data frame */ rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable to rx ps-poll */ @@ -1409,8 +1409,8 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) /* disable related TSF function */ rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3))); - rtw_write32(Adapter, REG_TSFTR, tsf); - rtw_write32(Adapter, REG_TSFTR+4, tsf>>32); + usb_write32(Adapter, REG_TSFTR, tsf); + usb_write32(Adapter, REG_TSFTR+4, tsf>>32); /* enable related TSF function */ rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3)); @@ -1421,7 +1421,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) break; case HW_VAR_CHECK_BSSID: if (*((u8 *)val)) { - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); } else { u32 val32; @@ -1429,7 +1429,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); - rtw_write32(Adapter, REG_RCR, val32); + usb_write32(Adapter, REG_RCR, val32); } break; case HW_VAR_MLME_DISCONNECT: @@ -1448,7 +1448,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) /* config RCR to receive different BSSID & not to receive data frame */ u32 v = rtw_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_BCN); - rtw_write32(Adapter, REG_RCR, v); + usb_write32(Adapter, REG_RCR, v); /* reject all data frame */ rtw_write16(Adapter, REG_RXFLTMAP2, 0x00); @@ -1471,14 +1471,14 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); } else { if (Adapter->in_cta_test) { u32 v = rtw_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ - rtw_write32(Adapter, REG_RCR, v); + usb_write32(Adapter, REG_RCR, v); } else { - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); } } } @@ -1496,9 +1496,9 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (Adapter->in_cta_test) { u32 v = rtw_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ - rtw_write32(Adapter, REG_RCR, v); + usb_write32(Adapter, REG_RCR, v); } else { - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); } if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) @@ -1607,36 +1607,36 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) ulCommand = CAM_CONTENT_COUNT*ucIndex+i; ulCommand = ulCommand | CAM_POLLINIG|CAM_WRITE; /* write content 0 is equall to mark invalid */ - rtw_write32(Adapter, WCAMI, ulContent); /* delay_ms(40); */ - rtw_write32(Adapter, RWCAM, ulCommand); /* delay_ms(40); */ + usb_write32(Adapter, WCAMI, ulContent); /* delay_ms(40); */ + usb_write32(Adapter, RWCAM, ulCommand); /* delay_ms(40); */ } } break; case HW_VAR_CAM_INVALID_ALL: - rtw_write32(Adapter, RWCAM, BIT(31)|BIT(30)); + usb_write32(Adapter, RWCAM, BIT(31)|BIT(30)); break; case HW_VAR_CAM_WRITE: { u32 cmd; u32 *cam_val = (u32 *)val; - rtw_write32(Adapter, WCAMI, cam_val[0]); + usb_write32(Adapter, WCAMI, cam_val[0]); cmd = CAM_POLLINIG | CAM_WRITE | cam_val[1]; - rtw_write32(Adapter, RWCAM, cmd); + usb_write32(Adapter, RWCAM, cmd); } break; case HW_VAR_AC_PARAM_VO: - rtw_write32(Adapter, REG_EDCA_VO_PARAM, ((u32 *)(val))[0]); + usb_write32(Adapter, REG_EDCA_VO_PARAM, ((u32 *)(val))[0]); break; case HW_VAR_AC_PARAM_VI: - rtw_write32(Adapter, REG_EDCA_VI_PARAM, ((u32 *)(val))[0]); + usb_write32(Adapter, REG_EDCA_VI_PARAM, ((u32 *)(val))[0]); break; case HW_VAR_AC_PARAM_BE: haldata->AcParam_BE = ((u32 *)(val))[0]; - rtw_write32(Adapter, REG_EDCA_BE_PARAM, ((u32 *)(val))[0]); + usb_write32(Adapter, REG_EDCA_BE_PARAM, ((u32 *)(val))[0]); break; case HW_VAR_AC_PARAM_BK: - rtw_write32(Adapter, REG_EDCA_BK_PARAM, ((u32 *)(val))[0]); + usb_write32(Adapter, REG_EDCA_BK_PARAM, ((u32 *)(val))[0]); break; case HW_VAR_ACM_CTRL: { @@ -1805,7 +1805,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (!pwrpriv->bkeepfwalive) { /* RX DMA stop */ - rtw_write32(Adapter, REG_RXPKT_NUM, (rtw_read32(Adapter, REG_RXPKT_NUM)|RW_RELEASE_EN)); + usb_write32(Adapter, REG_RXPKT_NUM, (rtw_read32(Adapter, REG_RXPKT_NUM)|RW_RELEASE_EN)); do { if (!(rtw_read32(Adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) break; @@ -1815,7 +1815,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) /* RQPN Load 0 */ rtw_write16(Adapter, REG_RQPN_NPQ, 0x0); - rtw_write32(Adapter, REG_RQPN, 0x80000000); + usb_write32(Adapter, REG_RQPN, 0x80000000); mdelay(10); } } @@ -2171,10 +2171,10 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) value32 = rtw_read32(adapt, REG_TCR); value32 &= ~TSFRST; - rtw_write32(adapt, REG_TCR, value32); + usb_write32(adapt, REG_TCR, value32); value32 |= TSFRST; - rtw_write32(adapt, REG_TCR, value32); + usb_write32(adapt, REG_TCR, value32); /* NOTE: Fix test chip's bug (about contention windows's randomness) */ rtw_write8(adapt, REG_RXTSF_OFFSET_CCK, 0x50); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index cfba5d6f1bfc..b3b1cf051ea5 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -227,7 +227,7 @@ static int usb_write16(struct adapter *adapter, u32 addr, u16 val) return ret; } -static int usb_write32(struct adapter *adapter, u32 addr, u32 val) +int usb_write32(struct adapter *adapter, u32 addr, u32 val) { u8 request; u8 requesttype; @@ -671,5 +671,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_read32 = &usb_read32; pops->_write8 = &usb_write8; pops->_write16 = &usb_write16; - pops->_write32 = &usb_write32; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 9c34328f84ab..f5dc069c86ad 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -49,7 +49,6 @@ struct _io_ops { u32 (*_read32)(struct adapter *pintfhdl, u32 addr); int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); - int (*_write32)(struct adapter *pintfhdl, u32 addr, u32 val); }; struct io_req { @@ -89,7 +88,7 @@ void usb_read_port_cancel(struct adapter *adapter); int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); -int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); +int usb_write32(struct adapter *adapter, u32 addr, u32 val); int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); @@ -103,8 +102,6 @@ void usb_write_port_cancel(struct adapter *adapter); _rtw_write8((adapter), (addr), (val)) #define rtw_write16(adapter, addr, val) \ _rtw_write16((adapter), (addr), (val)) -#define rtw_write32(adapter, addr, val) \ - _rtw_write32((adapter), (addr), (val)) int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 897f03f11b7a..89728f295023 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2230,7 +2230,7 @@ static int rtw_wx_write32(struct net_device *dev, DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%04X\n", __func__, addr, (u16)data32); break; case 4: - rtw_write32(padapter, addr, data32); + usb_write32(padapter, addr, data32); DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%08X\n", __func__, addr, data32); break; default: @@ -2376,7 +2376,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le rtw_write16(padapter, RegRWStruct->offset, (u16)RegRWStruct->value); break; case 4: - rtw_write32(padapter, RegRWStruct->offset, (u32)RegRWStruct->value); + usb_write32(padapter, RegRWStruct->offset, (u32)RegRWStruct->value); break; default: break; @@ -3948,12 +3948,12 @@ static int rtw_cta_test_start(struct net_device *dev, if (padapter->in_cta_test) { u32 v = rtw_read32(padapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ - rtw_write32(padapter, REG_RCR, v); + usb_write32(padapter, REG_RCR, v); DBG_88E("enable RCR_ADF\n"); } else { u32 v = rtw_read32(padapter, REG_RCR); v |= RCR_CBSSID_DATA | RCR_CBSSID_BCN;/* RCR_ADF */ - rtw_write32(padapter, REG_RCR, v); + usb_write32(padapter, REG_RCR, v); DBG_88E("disable RCR_ADF\n"); } return ret; @@ -4130,8 +4130,8 @@ static int rtw_dbg_port(struct net_device *dev, DBG_88E("rtw_write16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); break; case 4: - rtw_write32(padapter, arg, extra_arg); - DBG_88E("rtw_write32(0x%x) = 0x%08x\n", arg, rtw_read32(padapter, arg)); + usb_write32(padapter, arg, extra_arg); + DBG_88E("usb_write32(0x%x) = 0x%08x\n", arg, rtw_read32(padapter, arg)); break; } break; @@ -6426,7 +6426,7 @@ static int rtw_mp_write_reg(struct net_device *dev, break; case 'd': /* 4 bytes */ - rtw_write32(padapter, addr, data); + usb_write32(padapter, addr, data); break; default: ret = -EINVAL; -- cgit From 9764ed0405eab479d227a6bef7955876f667266a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:32 +0530 Subject: staging: rtl8188eu: Remove function _rtw_write16() _rtw_write16() is a wrapper function, being used to call usb_write16(). Call usb_write16() directly and drop _rtw_write16(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_io.c | 13 ---- drivers/staging/rtl8188eu/core/rtw_mp.c | 8 +-- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- .../staging/rtl8188eu/hal/Hal8188ERateAdaptive.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 8 +-- drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 4 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 76 +++++++++++----------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +- drivers/staging/rtl8188eu/include/rtw_io.h | 5 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 12 ++-- 12 files changed, 60 insertions(+), 77 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index eaf021208455..d13eed3f591f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -66,7 +66,7 @@ int proc_set_write_reg(struct file *file, const char __user *buffer, rtw_write8(padapter, addr, (u8)val); break; case 2: - rtw_write16(padapter, addr, (u16)val); + usb_write16(padapter, addr, (u16)val); break; case 4: usb_write32(padapter, addr, val); diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index ebbbbd6a0d08..8b11ac23bb0a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -101,19 +101,6 @@ int _rtw_write8(struct adapter *adapter, u32 addr, u8 val) return RTW_STATUS_CODE(ret); } -int _rtw_write16(struct adapter *adapter, u32 addr, u16 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); - int ret; - _write16 = pintfhdl->io_ops._write16; - - ret = _write16(adapter, addr, val); - - return RTW_STATUS_CODE(ret); -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index d1b2c54b56ee..5c5e20647954 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -53,7 +53,7 @@ void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz) rtw_write8(padapter, addr, (u8)val); break; case 2: - rtw_write16(padapter, addr, (u16)val); + usb_write16(padapter, addr, (u16)val); break; case 4: usb_write32(padapter, addr, val); @@ -234,8 +234,8 @@ s32 MPT_InitializeAdapter(struct adapter *pAdapter, u8 Channel) pMptCtx->backup0x52_RF_B = (u8)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0); /* set ant to wifi side in mp mode */ - rtw_write16(pAdapter, 0x870, 0x300); - rtw_write16(pAdapter, 0x860, 0x110); + usb_write16(pAdapter, 0x870, 0x300); + usb_write16(pAdapter, 0x860, 0x110); if (pAdapter->registrypriv.mp_mode == 1) pmlmepriv->fw_state = WIFI_MP_STATE; @@ -791,7 +791,7 @@ void SetPacketRx(struct adapter *pAdapter, u8 bStartRx) usb_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig); /* Accept all data frames */ - rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF); + usb_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF); } else { usb_write32(pAdapter, REG_RCR, 0); } diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index 71b255d1b150..8aac51514c39 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -860,7 +860,7 @@ int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv) status = NDIS_STATUS_NOT_ACCEPTED; break; } - rtw_write16(padapter, offset, (u16)value); + usb_write16(padapter, offset, (u16)value); break; case 4: usb_write32(padapter, offset, value); diff --git a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c index dea220b507ad..ea5ba280e3d0 100644 --- a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c +++ b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c @@ -670,7 +670,7 @@ void ODM_RA_Set_TxRPT_Time(struct odm_dm_struct *dm_odm, u16 minRptTime) { struct adapter *adapt = dm_odm->Adapter; - rtw_write16(adapt, REG_TX_RPT_TIME, minRptTime); + usb_write16(adapt, REG_TX_RPT_TIME, minRptTime); } void ODM_RA_TxRPT2Handle_8188E(struct odm_dm_struct *dm_odm, u8 *TxRPT_Buf, u16 TxRPT_Len, u32 macid_entry0, u32 macid_entry1) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index b14faac3f8b1..73277b9d6ad7 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -615,7 +615,7 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) if (mstatus == 1) { /* We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C. */ /* Suggested by filen. Added by tynli. */ - rtw_write16(adapt, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid)); + usb_write16(adapt, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid)); /* Do not set TSF again here or vWiFi beacon DMA INT will not work. */ /* Set REG_CR bit 8. DMA beacon by SW. */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index a0659fcdd0ae..5b627d107c66 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -236,7 +236,7 @@ static void efuse_read_phymap_from_txpktbuf( dbg_addr = bcnhead*128/8; /* 8-bytes addressing */ while (1) { - rtw_write16(adapter, REG_PKTBUF_DBG_ADDR, dbg_addr+i); + usb_write16(adapter, REG_PKTBUF_DBG_ADDR, dbg_addr+i); rtw_write8(adapter, REG_TXPKTBUF_DBG, 0); start = jiffies; @@ -766,20 +766,20 @@ hal_EfusePowerSwitch_RTL8188E( tmpV16 = rtw_read16(pAdapter, REG_SYS_ISO_CTRL); if (!(tmpV16 & PWC_EV12V)) { tmpV16 |= PWC_EV12V; - rtw_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16); + usb_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16); } /* Reset: 0x0000h[28], default valid */ tmpV16 = rtw_read16(pAdapter, REG_SYS_FUNC_EN); if (!(tmpV16 & FEN_ELDR)) { tmpV16 |= FEN_ELDR; - rtw_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16); + usb_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16); } /* Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock from ANA, default valid */ tmpV16 = rtw_read16(pAdapter, REG_SYS_CLKR); if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) { tmpV16 |= (LOADER_CLK_EN | ANA8M); - rtw_write16(pAdapter, REG_SYS_CLKR, tmpV16); + usb_write16(pAdapter, REG_SYS_CLKR, tmpV16); } if (bWrite) { diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 73e90e369187..178cf8b9c248 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -386,7 +386,7 @@ s32 PHY_MACConfig8188E(struct adapter *Adapter) rtStatus = _FAIL; /* 2010.07.13 AMPDU aggregation number B */ - rtw_write16(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM); + usb_write16(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM); return rtStatus; } @@ -604,7 +604,7 @@ PHY_BBConfig8188E( /* Enable BB and RF */ RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN); - rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1)); + usb_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1)); /* 20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF. */ diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index f4df6d46d5dd..3615a60747b4 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -117,7 +117,7 @@ static u32 rtl8188eu_InitPowerOn(struct adapter *adapt) /* Enable MAC DMA/WMAC/SCHEDULE/SEC block */ /* Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31. */ - rtw_write16(adapt, REG_CR, 0x00); /* suggseted by zhouzhou, by page, 20111230 */ + usb_write16(adapt, REG_CR, 0x00); /* suggseted by zhouzhou, by page, 20111230 */ /* Enable MAC DMA/WMAC/SCHEDULE/SEC block */ value16 = rtw_read16(adapt, REG_CR); @@ -125,7 +125,7 @@ static u32 rtl8188eu_InitPowerOn(struct adapter *adapt) | PROTOCOL_EN | SCHEDULE_EN | ENSEC | CALTMR_EN); /* for SDIO - Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31. */ - rtw_write16(adapt, REG_CR, value16); + usb_write16(adapt, REG_CR, value16); haldata->bMacPwrCtrlOn = true; return _SUCCESS; @@ -193,8 +193,8 @@ static void _InitQueueReservedPage(struct adapter *Adapter) value32 = _HPQ(numHQ) | _LPQ(numLQ) | _PUBQ(numPubQ) | LD_RQPN; usb_write32(Adapter, REG_RQPN, value32); } else { - rtw_write16(Adapter, REG_RQPN_NPQ, 0x0000);/* Just follow MP Team,??? Georgia 03/28 */ - rtw_write16(Adapter, REG_RQPN_NPQ, 0x0d); + usb_write16(Adapter, REG_RQPN_NPQ, 0x0000);/* Just follow MP Team,??? Georgia 03/28 */ + usb_write16(Adapter, REG_RQPN_NPQ, 0x0d); usb_write32(Adapter, REG_RQPN, 0x808E000d);/* reserve 7 page for LPS */ } } @@ -214,7 +214,7 @@ static void _InitPageBoundary(struct adapter *Adapter) /* */ u16 rxff_bndy = MAX_RX_DMA_BUFFER_SIZE_88E-1; - rtw_write16(Adapter, (REG_TRXFF_BNDY + 2), rxff_bndy); + usb_write16(Adapter, (REG_TRXFF_BNDY + 2), rxff_bndy); } static void _InitNormalChipRegPriority(struct adapter *Adapter, u16 beQ, @@ -227,7 +227,7 @@ static void _InitNormalChipRegPriority(struct adapter *Adapter, u16 beQ, _TXDMA_VIQ_MAP(viQ) | _TXDMA_VOQ_MAP(voQ) | _TXDMA_MGQ_MAP(mgtQ) | _TXDMA_HIQ_MAP(hiQ); - rtw_write16(Adapter, REG_TRXDMA_CTRL, value16); + usb_write16(Adapter, REG_TRXDMA_CTRL, value16); } static void _InitNormalChipOneOutEpPriority(struct adapter *Adapter) @@ -394,24 +394,24 @@ static void _InitAdaptiveCtrl(struct adapter *Adapter) /* SIFS (used in NAV) */ value16 = _SPEC_SIFS_CCK(0x10) | _SPEC_SIFS_OFDM(0x10); - rtw_write16(Adapter, REG_SPEC_SIFS, value16); + usb_write16(Adapter, REG_SPEC_SIFS, value16); /* Retry Limit */ value16 = _LRL(0x30) | _SRL(0x30); - rtw_write16(Adapter, REG_RL, value16); + usb_write16(Adapter, REG_RL, value16); } static void _InitEDCA(struct adapter *Adapter) { /* Set Spec SIFS (used in NAV) */ - rtw_write16(Adapter, REG_SPEC_SIFS, 0x100a); - rtw_write16(Adapter, REG_MAC_SPEC_SIFS, 0x100a); + usb_write16(Adapter, REG_SPEC_SIFS, 0x100a); + usb_write16(Adapter, REG_MAC_SPEC_SIFS, 0x100a); /* Set SIFS for CCK */ - rtw_write16(Adapter, REG_SIFS_CTX, 0x100a); + usb_write16(Adapter, REG_SIFS_CTX, 0x100a); /* Set SIFS for OFDM */ - rtw_write16(Adapter, REG_SIFS_TRX, 0x100a); + usb_write16(Adapter, REG_SIFS_TRX, 0x100a); /* TXOP */ usb_write32(Adapter, REG_EDCA_BE_PARAM, 0x005EA42B); @@ -423,7 +423,7 @@ static void _InitEDCA(struct adapter *Adapter) static void _InitRDGSetting(struct adapter *Adapter) { rtw_write8(Adapter, REG_RD_CTRL, 0xFF); - rtw_write16(Adapter, REG_RD_NAV_NXT, 0x200); + usb_write16(Adapter, REG_RD_NAV_NXT, 0x200); rtw_write8(Adapter, REG_RD_RESP_PKT_TH, 0x05); } @@ -587,16 +587,16 @@ static void _InitBeaconParameters(struct adapter *Adapter) { struct hal_data_8188e *haldata = GET_HAL_DATA(Adapter); - rtw_write16(Adapter, REG_BCN_CTRL, 0x1010); + usb_write16(Adapter, REG_BCN_CTRL, 0x1010); /* TODO: Remove these magic number */ - rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);/* ms */ + usb_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);/* ms */ rtw_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);/* 5ms */ rtw_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); /* 2ms */ /* Suggested by designer timchen. Change beacon AIFS to the largest number */ /* beacause test chip does not contension before sending beacon. by tynli. 2009.11.03 */ - rtw_write16(Adapter, REG_BCNTCFG, 0x660F); + usb_write16(Adapter, REG_BCNTCFG, 0x660F); haldata->RegBcnCtrlVal = rtw_read8(Adapter, REG_BCN_CTRL); haldata->RegTxPause = rtw_read8(Adapter, REG_TXPAUSE); @@ -837,12 +837,12 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter) /* Set MAX RPT MACID */ rtw_write8(Adapter, REG_TX_RPT_CTRL+1, 2);/* FOR sta mode ,0: bc/mc ,1:AP */ /* Tx RPT Timer. Unit: 32us */ - rtw_write16(Adapter, REG_TX_RPT_TIME, 0xCdf0); + usb_write16(Adapter, REG_TX_RPT_TIME, 0xCdf0); rtw_write8(Adapter, REG_EARLY_MODE_CONTROL, 0); - rtw_write16(Adapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ - rtw_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ + usb_write16(Adapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ + usb_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ /* Keep RfRegChnlVal for later use. */ haldata->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, (enum rf_radio_path)0, RF_CHNLBW, bRFRegOffsetMask); @@ -874,7 +874,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11); rtw_write8(Adapter, REG_HWSEQ_CTRL, 0xFF); if (pregistrypriv->wifi_spec) - rtw_write16(Adapter, REG_FAST_EDCA_CTRL, 0); + usb_write16(Adapter, REG_FAST_EDCA_CTRL, 0); /* Nav limit , suggest by scott */ rtw_write8(Adapter, 0x652, 0x0); @@ -902,10 +902,10 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM); rtw_write8(Adapter, REG_EARLY_MODE_CONTROL+3, 0x01);/* Pretx_en, for WEP/TKIP SEC */ /* tynli_test_tx_report. */ - rtw_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); + usb_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); /* enable tx DMA to drop the redundate data of packet */ - rtw_write16(Adapter, REG_TXDMA_OFFSET_CHK, (rtw_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); + usb_write16(Adapter, REG_TXDMA_OFFSET_CHK, (rtw_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_IQK); /* 2010/08/26 MH Merge from 8192CE. */ @@ -1006,7 +1006,7 @@ static void rtl8192cu_hw_power_down(struct adapter *adapt) /* Enable register area 0x0-0xc. */ rtw_write8(adapt, REG_RSV_CTRL, 0x0); - rtw_write16(adapt, REG_APS_FSMCO, 0x8812); + usb_write16(adapt, REG_APS_FSMCO, 0x8812); } static u32 rtl8188eu_hal_deinit(struct adapter *Adapter) @@ -1259,17 +1259,17 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) /* Set RCR */ usb_write32(Adapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0,reject ICV_ERR packet */ /* enable to rx data frame */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); + usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable to rx ps-poll */ - rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400); + usb_write16(Adapter, REG_RXFLTMAP1, 0x0400); /* Beacon Control related register for first time */ rtw_write8(Adapter, REG_BCNDMATIM, 0x02); /* 2ms */ rtw_write8(Adapter, REG_ATIMWND, 0x0a); /* 10ms */ - rtw_write16(Adapter, REG_BCNTCFG, 0x00); - rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04); - rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);/* +32767 (~32ms) */ + usb_write16(Adapter, REG_BCNTCFG, 0x00); + usb_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04); + usb_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);/* +32767 (~32ms) */ /* reset TSF */ rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0)); @@ -1435,7 +1435,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) case HW_VAR_MLME_DISCONNECT: /* Set RCR to not to receive data frame when NO LINK state */ /* reject all data frames */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0x00); + usb_write16(Adapter, REG_RXFLTMAP2, 0x00); /* reset TSF */ rtw_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1))); @@ -1450,7 +1450,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) v &= ~(RCR_CBSSID_BCN); usb_write32(Adapter, REG_RCR, v); /* reject all data frame */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0x00); + usb_write16(Adapter, REG_RXFLTMAP2, 0x00); /* disable update TSF */ rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); @@ -1461,12 +1461,12 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if ((is_client_associated_to_ap(Adapter)) || ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)) { /* enable to rx data frame */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); + usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } else if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); + usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } @@ -1491,7 +1491,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (type == 0) { /* prepare to join */ /* enable to rx data frame.Accept all data frame */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); + usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); if (Adapter->in_cta_test) { u32 v = rtw_read32(Adapter, REG_RCR); @@ -1507,7 +1507,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) RetryLimit = 0x7; } else if (type == 1) { /* joinbss_event call back when join res < 0 */ - rtw_write16(Adapter, REG_RXFLTMAP2, 0x00); + usb_write16(Adapter, REG_RXFLTMAP2, 0x00); } else if (type == 2) { /* sta add event call back */ /* enable update TSF */ @@ -1516,11 +1516,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) RetryLimit = 0x7; } - rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT); + usb_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT); } break; case HW_VAR_BEACON_INTERVAL: - rtw_write16(Adapter, REG_BCN_INTERVAL, *((u16 *)val)); + usb_write16(Adapter, REG_BCN_INTERVAL, *((u16 *)val)); break; case HW_VAR_SLOT_TIME: { @@ -1814,7 +1814,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) DBG_88E("Stop RX DMA failed......\n"); /* RQPN Load 0 */ - rtw_write16(Adapter, REG_RQPN_NPQ, 0x0); + usb_write16(Adapter, REG_RQPN_NPQ, 0x0); usb_write32(Adapter, REG_RQPN, 0x80000000); mdelay(10); } @@ -2162,7 +2162,7 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) /* reset TSF, enable update TSF, correcting TSF On Beacon */ /* BCN interval */ - rtw_write16(adapt, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval); + usb_write16(adapt, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval); rtw_write8(adapt, REG_ATIMWND, 0x02);/* 2ms */ _InitBeaconParameters(adapt); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index b3b1cf051ea5..f2aa3d5a9207 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -201,7 +201,7 @@ static int usb_write8(struct adapter *adapter, u32 addr, u8 val) return ret; } -static int usb_write16(struct adapter *adapter, u32 addr, u16 val) +int usb_write16(struct adapter *adapter, u32 addr, u16 val) { u8 request; u8 requesttype; @@ -670,5 +670,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_read16 = &usb_read16; pops->_read32 = &usb_read32; pops->_write8 = &usb_write8; - pops->_write16 = &usb_write16; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index f5dc069c86ad..24b3ee09aae6 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -48,7 +48,6 @@ struct _io_ops { u16 (*_read16)(struct adapter *pintfhdl, u32 addr); u32 (*_read32)(struct adapter *pintfhdl, u32 addr); int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); - int (*_write16)(struct adapter *pintfhdl, u32 addr, u16 val); }; struct io_req { @@ -87,7 +86,7 @@ u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_read_port_cancel(struct adapter *adapter); int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); -int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); +int usb_write16(struct adapter *adapter, u32 addr, u16 val); int usb_write32(struct adapter *adapter, u32 addr, u32 val); int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); @@ -100,8 +99,6 @@ void usb_write_port_cancel(struct adapter *adapter); #define rtw_write8(adapter, addr, val) \ _rtw_write8((adapter), (addr), (val)) -#define rtw_write16(adapter, addr, val) \ - _rtw_write16((adapter), (addr), (val)) int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 89728f295023..526978fab497 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2226,7 +2226,7 @@ static int rtw_wx_write32(struct net_device *dev, DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%02X\n", __func__, addr, (u8)data32); break; case 2: - rtw_write16(padapter, addr, (u16)data32); + usb_write16(padapter, addr, (u16)data32); DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%04X\n", __func__, addr, (u16)data32); break; case 4: @@ -2373,7 +2373,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le rtw_write8(padapter, RegRWStruct->offset, (u8)RegRWStruct->value); break; case 2: - rtw_write16(padapter, RegRWStruct->offset, (u16)RegRWStruct->value); + usb_write16(padapter, RegRWStruct->offset, (u16)RegRWStruct->value); break; case 4: usb_write32(padapter, RegRWStruct->offset, (u32)RegRWStruct->value); @@ -4126,8 +4126,8 @@ static int rtw_dbg_port(struct net_device *dev, DBG_88E("rtw_write8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); break; case 2: - rtw_write16(padapter, arg, extra_arg); - DBG_88E("rtw_write16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); + usb_write16(padapter, arg, extra_arg); + DBG_88E("usb_write16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); break; case 4: usb_write32(padapter, arg, extra_arg); @@ -4311,7 +4311,7 @@ static int rtw_dbg_port(struct net_device *dev, value = value | 0x10; write_value = value | (value << 5); - rtw_write16(padapter, 0x6d9, write_value); + usb_write16(padapter, 0x6d9, write_value); } break; case 0x7a: @@ -6422,7 +6422,7 @@ static int rtw_mp_write_reg(struct net_device *dev, ret = -EINVAL; break; } - rtw_write16(padapter, addr, data); + usb_write16(padapter, addr, data); break; case 'd': /* 4 bytes */ -- cgit From e76484d00c5147d2959e673faa858e7ace4567dd Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:33 +0530 Subject: staging: rtl8188eu: Remove function _rtw_write8() _rtw_write8() is a wrapper function, being used to call usb_write8(). Call usb_write8() directly and drop _rtw_write8(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_efuse.c | 26 +-- drivers/staging/rtl8188eu/core/rtw_io.c | 13 -- drivers/staging/rtl8188eu/core/rtw_mp.c | 6 +- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 18 +- drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c | 2 +- drivers/staging/rtl8188eu/hal/hal_com.c | 2 +- drivers/staging/rtl8188eu/hal/odm.c | 2 +- drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 28 +-- drivers/staging/rtl8188eu/hal/rtl8188e_dm.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 58 +++--- drivers/staging/rtl8188eu/hal/rtl8188e_mp.c | 32 +-- drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 10 +- drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_led.c | 8 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 216 ++++++++++----------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +- drivers/staging/rtl8188eu/include/rtw_io.h | 6 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 14 +- 21 files changed, 218 insertions(+), 236 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index d13eed3f591f..d2045377103c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -63,7 +63,7 @@ int proc_set_write_reg(struct file *file, const char __user *buffer, } switch (len) { case 1: - rtw_write8(padapter, addr, (u8)val); + usb_write8(padapter, addr, (u8)val); break; case 2: usb_write16(padapter, addr, (u16)val); diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 40afe48a12ef..513e9c67f747 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -181,13 +181,13 @@ ReadEFuseByte( } /* Write Address */ - rtw_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff)); + usb_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff)); readbyte = rtw_read8(Adapter, EFUSE_CTRL+2); - rtw_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc)); + usb_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc)); /* Write bit 32 0 */ readbyte = rtw_read8(Adapter, EFUSE_CTRL+3); - rtw_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f)); + usb_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f)); /* Check bit 32 read-ready */ retry = 0; @@ -263,16 +263,16 @@ u8 EFUSE_Read1Byte(struct adapter *Adapter, u16 Address) if (Address < contentLen) { /* E-fuse 512Byte */ /* Write E-fuse Register address bit0~7 */ temp = Address & 0xFF; - rtw_write8(Adapter, EFUSE_CTRL+1, temp); + usb_write8(Adapter, EFUSE_CTRL+1, temp); Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+2); /* Write E-fuse Register address bit8~9 */ temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC); - rtw_write8(Adapter, EFUSE_CTRL+2, temp); + usb_write8(Adapter, EFUSE_CTRL+2, temp); /* Write 0x30[31]= 0 */ Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3); temp = Bytetemp & 0x7F; - rtw_write8(Adapter, EFUSE_CTRL+3, temp); + usb_write8(Adapter, EFUSE_CTRL+3, temp); /* Wait Write-ready (0x30[31]= 1) */ Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3); @@ -304,11 +304,11 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data, bool pseudo) } /* -----------------e-fuse reg ctrl --------------------------------- */ /* address */ - rtw_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr & 0xff)); - rtw_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) & 0x03)) | + usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr & 0xff)); + usb_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) & 0x03)) | (rtw_read8(pAdapter, EFUSE_CTRL+2) & 0xFC)); - rtw_write8(pAdapter, EFUSE_CTRL+3, 0x72);/* read cmd */ + usb_write8(pAdapter, EFUSE_CTRL+3, 0x72);/* read cmd */ while (!(0x80 & rtw_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) tmpidx++; @@ -335,13 +335,13 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) /* -----------------e-fuse reg ctrl --------------------------------- */ /* address */ - rtw_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); - rtw_write8(pAdapter, EFUSE_CTRL+2, + usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); + usb_write8(pAdapter, EFUSE_CTRL+2, (rtw_read8(pAdapter, EFUSE_CTRL+2) & 0xFC) | (u8)((addr>>8) & 0x03)); - rtw_write8(pAdapter, EFUSE_CTRL, data);/* data */ + usb_write8(pAdapter, EFUSE_CTRL, data);/* data */ - rtw_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */ + usb_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */ while ((0x80 & rtw_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) tmpidx++; diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 8b11ac23bb0a..1da09363a8c0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -88,19 +88,6 @@ u32 _rtw_read32(struct adapter *adapter, u32 addr) return r_val; } -int _rtw_write8(struct adapter *adapter, u32 addr, u8 val) -{ - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); - int ret; - _write8 = pintfhdl->io_ops._write8; - - ret = _write8(adapter, addr, val); - - return RTW_STATUS_CODE(ret); -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 5c5e20647954..c19926837ec7 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -50,7 +50,7 @@ void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz) { switch (sz) { case 1: - rtw_write8(padapter, addr, (u8)val); + usb_write8(padapter, addr, (u8)val); break; case 2: usb_write16(padapter, addr, (u16)val); @@ -304,7 +304,7 @@ static void disable_dm(struct adapter *padapter) /* disable Power Training, Rate Adaptive */ v8 = rtw_read8(padapter, REG_BCN_CTRL); v8 &= ~EN_BCN_FUNCTION; - rtw_write8(padapter, REG_BCN_CTRL, v8); + usb_write8(padapter, REG_BCN_CTRL, v8); /* 3 2. disable driver dynamic mechanism */ /* disable Dynamic Initial Gain */ @@ -423,7 +423,7 @@ end_of_mp_start_test: /* set MSR to WIFI_FW_ADHOC_STATE */ val8 = rtw_read8(padapter, MSR) & 0xFC; /* 0x0102 */ val8 |= WIFI_FW_ADHOC_STATE; - rtw_write8(padapter, MSR, val8); /* Link in ad hoc network */ + usb_write8(padapter, MSR, val8); /* Link in ad hoc network */ } return res; } diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index 8aac51514c39..ebb97e829cfd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -853,7 +853,7 @@ int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv) status = NDIS_STATUS_NOT_ACCEPTED; break; } - rtw_write8(padapter, offset, (u8)value); + usb_write8(padapter, offset, (u8)value); break; case 2: if (value > 0xFFFF) { diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 59bd94928eac..514d325f159f 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -848,7 +848,7 @@ _PHY_ReloadMACRegisters( ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("Reload MAC parameters !\n")); for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) { - rtw_write8(adapt, MACReg[i], (u8)MACBackup[i]); + usb_write8(adapt, MACReg[i], (u8)MACBackup[i]); } usb_write32(adapt, MACReg[i], MACBackup[i]); } @@ -892,12 +892,12 @@ _PHY_MACSettingCalibration( ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("MAC settings for Calibration.\n")); - rtw_write8(adapt, MACReg[i], 0x3F); + usb_write8(adapt, MACReg[i], 0x3F); for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++) { - rtw_write8(adapt, MACReg[i], (u8)(MACBackup[i]&(~BIT3))); + usb_write8(adapt, MACReg[i], (u8)(MACBackup[i]&(~BIT3))); } - rtw_write8(adapt, MACReg[i], (u8)(MACBackup[i]&(~BIT5))); + usb_write8(adapt, MACReg[i], (u8)(MACBackup[i]&(~BIT5))); } void @@ -1208,9 +1208,9 @@ static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) tmpreg = rtw_read8(adapt, 0xd03); if ((tmpreg&0x70) != 0) /* Deal with contisuous TX case */ - rtw_write8(adapt, 0xd03, tmpreg&0x8F); /* disable all continuous TX */ + usb_write8(adapt, 0xd03, tmpreg&0x8F); /* disable all continuous TX */ else /* Deal with Packet TX case */ - rtw_write8(adapt, REG_TXPAUSE, 0xFF); /* block all queues */ + usb_write8(adapt, REG_TXPAUSE, 0xFF); /* block all queues */ if ((tmpreg&0x70) != 0) { /* 1. Read original RF mode */ @@ -1242,7 +1242,7 @@ static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) if ((tmpreg&0x70) != 0) { /* Deal with continuous TX case */ /* Path-A */ - rtw_write8(adapt, 0xd03, tmpreg); + usb_write8(adapt, 0xd03, tmpreg); PHY_SetRFReg(adapt, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode); /* Path-B */ @@ -1250,7 +1250,7 @@ static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) PHY_SetRFReg(adapt, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode); } else { /* Deal with Packet TX case */ - rtw_write8(adapt, REG_TXPAUSE, 0x00); + usb_write8(adapt, REG_TXPAUSE, 0x00); } } @@ -1447,7 +1447,7 @@ static void phy_setrfpathswitch_8188e(struct adapter *adapt, bool main, bool is2 if (!adapt->hw_init_completed) { u8 u1btmp; u1btmp = rtw_read8(adapt, REG_LEDCFG2) | BIT7; - rtw_write8(adapt, REG_LEDCFG2, u1btmp); + usb_write8(adapt, REG_LEDCFG2, u1btmp); PHY_SetBBReg(adapt, rFPGA0_XAB_RFParameter, BIT13, 0x01); } diff --git a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c index 50f951390695..d90c5442f0a5 100644 --- a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c +++ b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c @@ -86,7 +86,7 @@ u8 HalPwrSeqCmdParsing(struct adapter *padapter, u8 cut_vers, u8 fab_vers, value |= (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd)); /* Write the value back to system register */ - rtw_write8(padapter, offset, value); + usb_write8(padapter, offset, value); break; case PWR_CMD_POLLING: RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n")); diff --git a/drivers/staging/rtl8188eu/hal/hal_com.c b/drivers/staging/rtl8188eu/hal/hal_com.c index 829b900ee938..f69dbf97b823 100644 --- a/drivers/staging/rtl8188eu/hal/hal_com.c +++ b/drivers/staging/rtl8188eu/hal/hal_com.c @@ -328,7 +328,7 @@ void hal_init_macaddr(struct adapter *adapter) void c2h_evt_clear(struct adapter *adapter) { - rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); + usb_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); } s32 c2h_evt_read(struct adapter *adapter, u8 *buf) diff --git a/drivers/staging/rtl8188eu/hal/odm.c b/drivers/staging/rtl8188eu/hal/odm.c index dfab77e073d7..11101f355569 100644 --- a/drivers/staging/rtl8188eu/hal/odm.c +++ b/drivers/staging/rtl8188eu/hal/odm.c @@ -833,7 +833,7 @@ void ODM_Write_CCK_CCA_Thres(struct odm_dm_struct *pDM_Odm, u8 CurCCK_CCAThres) struct adapter *adapt = pDM_Odm->Adapter; if (pDM_DigTable->CurCCK_CCAThres != CurCCK_CCAThres) /* modify by Guo.Mingzhi 2012-01-03 */ - rtw_write8(adapt, ODM_REG_CCK_CCA_11N, CurCCK_CCAThres); + usb_write8(adapt, ODM_REG_CCK_CCA_11N, CurCCK_CCAThres); pDM_DigTable->PreCCK_CCAThres = pDM_DigTable->CurCCK_CCAThres; pDM_DigTable->CurCCK_CCAThres = CurCCK_CCAThres; } diff --git a/drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c b/drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c index a9886122b459..4d4978bee51d 100644 --- a/drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c +++ b/drivers/staging/rtl8188eu/hal/odm_RegConfig8188E.c @@ -68,7 +68,7 @@ void odm_ConfigMAC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u8 Data) { struct adapter *adapt = pDM_Odm->Adapter; - rtw_write8(adapt, Addr, Data); + usb_write8(adapt, Addr, Data); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data)); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 73277b9d6ad7..17ab11b6fa74 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -106,13 +106,13 @@ static s32 FillH2CCmd_88E(struct adapter *adapt, u8 ElementID, u32 CmdLen, u8 *p /* Write Ext command */ msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num * RTL88E_EX_MESSAGE_BOX_SIZE); for (cmd_idx = 0; cmd_idx < ext_cmd_len; cmd_idx++) { - rtw_write8(adapt, msgbox_ex_addr+cmd_idx, *((u8 *)(&h2c_cmd_ex)+cmd_idx)); + usb_write8(adapt, msgbox_ex_addr+cmd_idx, *((u8 *)(&h2c_cmd_ex)+cmd_idx)); } } /* Write command */ msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * RTL88E_MESSAGE_BOX_SIZE); for (cmd_idx = 0; cmd_idx < RTL88E_MESSAGE_BOX_SIZE; cmd_idx++) { - rtw_write8(adapt, msgbox_addr+cmd_idx, *((u8 *)(&h2c_cmd)+cmd_idx)); + usb_write8(adapt, msgbox_addr+cmd_idx, *((u8 *)(&h2c_cmd)+cmd_idx)); } bcmd_down = true; @@ -620,13 +620,13 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* Set REG_CR bit 8. DMA beacon by SW. */ haldata->RegCR_1 |= BIT0; - rtw_write8(adapt, REG_CR+1, haldata->RegCR_1); + usb_write8(adapt, REG_CR+1, haldata->RegCR_1); /* Disable Hw protection for a time which revserd for Hw sending beacon. */ /* Fix download reserved page packet fail that access collision with the protection time. */ /* 2010.05.11. Added by tynli. */ - rtw_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(3))); - rtw_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(4)); + usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(3))); + usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(4)); if (haldata->RegFwHwTxQCtrl&BIT6) { DBG_88E("HalDownloadRSVDPage(): There is an Adapter is sending beacon.\n"); @@ -634,7 +634,7 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) } /* Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame. */ - rtw_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl&(~BIT6))); + usb_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl&(~BIT6))); haldata->RegFwHwTxQCtrl &= (~BIT6); /* Clear beacon valid check bit. */ @@ -668,8 +668,8 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* */ /* Enable Bcn */ - rtw_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(3)); - rtw_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(3)); + usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(4))); /* To make sure that if there exists an adapter which would like to send beacon. */ /* If exists, the origianl value of 0x422[6] will be 1, we should check this to */ @@ -677,7 +677,7 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* the beacon cannot be sent by HW. */ /* 2010.06.23. Added by tynli. */ if (bSendBeacon) { - rtw_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl|BIT6)); + usb_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl|BIT6)); haldata->RegFwHwTxQCtrl |= BIT6; } @@ -690,7 +690,7 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* Do not enable HW DMA BCN or it will cause Pcie interface hang by timing issue. 2011.11.24. by tynli. */ /* Clear CR[8] or beacon packet will not be send to TxBuf anymore. */ haldata->RegCR_1 &= (~BIT0); - rtw_write8(adapt, REG_CR+1, haldata->RegCR_1); + usb_write8(adapt, REG_CR+1, haldata->RegCR_1); } } @@ -713,13 +713,13 @@ void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state) /* update CTWindow value. */ if (pwdinfo->ctwindow > 0) { p2p_ps_offload->CTWindow_En = 1; - rtw_write8(adapt, REG_P2P_CTWIN, pwdinfo->ctwindow); + usb_write8(adapt, REG_P2P_CTWIN, pwdinfo->ctwindow); } /* hw only support 2 set of NoA */ for (i = 0; i < pwdinfo->noa_num; i++) { /* To control the register setting for which NOA */ - rtw_write8(adapt, REG_NOA_DESC_SEL, (i << 4)); + usb_write8(adapt, REG_NOA_DESC_SEL, (i << 4)); if (i == 0) p2p_ps_offload->NoA0_En = 1; else @@ -729,12 +729,12 @@ void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state) usb_write32(adapt, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]); usb_write32(adapt, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]); usb_write32(adapt, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]); - rtw_write8(adapt, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]); + usb_write8(adapt, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]); } if ((pwdinfo->opp_ps == 1) || (pwdinfo->noa_num > 0)) { /* rst p2p circuit */ - rtw_write8(adapt, REG_DUAL_TSF_RST, BIT(4)); + usb_write8(adapt, REG_DUAL_TSF_RST, BIT(4)); p2p_ps_offload->Offload_En = 1; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c index d5cd30bcb3c7..65cf139f8bc0 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c @@ -39,7 +39,7 @@ static void dm_InitGPIOSetting(struct adapter *Adapter) tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG); tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT); - rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte); + usb_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte); } /* */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 5b627d107c66..71a2417ca664 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -37,7 +37,7 @@ static void iol_mode_enable(struct adapter *padapter, u8 enable) if (enable) { /* Enable initial offload */ reg_0xf0 = rtw_read8(padapter, REG_SYS_CFG); - rtw_write8(padapter, REG_SYS_CFG, reg_0xf0|SW_OFFLOAD_EN); + usb_write8(padapter, REG_SYS_CFG, reg_0xf0|SW_OFFLOAD_EN); if (!padapter->bFWReady) { DBG_88E("bFWReady == false call reset 8051...\n"); @@ -47,7 +47,7 @@ static void iol_mode_enable(struct adapter *padapter, u8 enable) } else { /* disable initial offload */ reg_0xf0 = rtw_read8(padapter, REG_SYS_CFG); - rtw_write8(padapter, REG_SYS_CFG, reg_0xf0 & ~SW_OFFLOAD_EN); + usb_write8(padapter, REG_SYS_CFG, reg_0xf0 & ~SW_OFFLOAD_EN); } } @@ -59,7 +59,7 @@ static s32 iol_execute(struct adapter *padapter, u8 control) control = control&0x0f; reg_0x88 = rtw_read8(padapter, REG_HMEBOX_E0); - rtw_write8(padapter, REG_HMEBOX_E0, reg_0x88|control); + usb_write8(padapter, REG_HMEBOX_E0, reg_0x88|control); start = jiffies; while ((reg_0x88 = rtw_read8(padapter, REG_HMEBOX_E0)) & control && @@ -78,7 +78,7 @@ static s32 iol_InitLLTTable(struct adapter *padapter, u8 txpktbuf_bndy) { s32 rst = _SUCCESS; iol_mode_enable(padapter, 1); - rtw_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); + usb_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); rst = iol_execute(padapter, CMD_INIT_LLT); iol_mode_enable(padapter, 0); return rst; @@ -231,14 +231,14 @@ static void efuse_read_phymap_from_txpktbuf( DBG_88E("%s bcnhead:%d\n", __func__, bcnhead); - rtw_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); + usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); dbg_addr = bcnhead*128/8; /* 8-bytes addressing */ while (1) { usb_write16(adapter, REG_PKTBUF_DBG_ADDR, dbg_addr+i); - rtw_write8(adapter, REG_TXPKTBUF_DBG, 0); + usb_write8(adapter, REG_TXPKTBUF_DBG, 0); start = jiffies; while (!(reg_0x143 = rtw_read8(adapter, REG_TXPKTBUF_DBG)) && (passing_time = rtw_get_passing_time_ms(start)) < 1000) { @@ -285,7 +285,7 @@ static void efuse_read_phymap_from_txpktbuf( break; i++; } - rtw_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, DISABLE_TRXPKT_BUF_ACCESS); + usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, DISABLE_TRXPKT_BUF_ACCESS); DBG_88E("%s read count:%u\n", __func__, count); *size = count; } @@ -296,9 +296,9 @@ static s32 iol_read_efuse(struct adapter *padapter, u8 txpktbuf_bndy, u16 offset u8 physical_map[512]; u16 size = 512; - rtw_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); + usb_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); _rtw_memset(physical_map, 0xFF, 512); - rtw_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); + usb_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); status = iol_execute(padapter, CMD_READ_EFUSE_MAP); if (status == _SUCCESS) efuse_read_phymap_from_txpktbuf(padapter, txpktbuf_bndy, physical_map, &size); @@ -326,7 +326,7 @@ static s32 iol_ioconfig(struct adapter *padapter, u8 iocfg_bndy) { s32 rst = _SUCCESS; - rtw_write8(padapter, REG_TDECTRL+1, iocfg_bndy); + usb_write8(padapter, REG_TDECTRL+1, iocfg_bndy); rst = iol_execute(padapter, CMD_IOCONFIG); return rst; } @@ -357,7 +357,7 @@ static int rtl8188e_IOL_exec_cmds_sync(struct adapter *adapter, struct xmit_fram iol_mode_enable(adapter, 0); exit: /* restore BCN_HEAD */ - rtw_write8(adapter, REG_TDECTRL+1, 0); + usb_write8(adapter, REG_TDECTRL+1, 0); return ret; } @@ -369,7 +369,7 @@ void rtw_IOL_cmd_tx_pkt_buf_dump(struct adapter *Adapter, int data_len) u8 *pbuf = vzalloc(data_len+10); DBG_88E("###### %s ######\n", __func__); - rtw_write8(Adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); + usb_write8(Adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); if (pbuf) { for (addr = 0; addr < data_cnts; addr++) { usb_write32(Adapter, 0x140, addr); @@ -400,18 +400,18 @@ static void _FWDownloadEnable(struct adapter *padapter, bool enable) if (enable) { /* MCU firmware download enable. */ tmp = rtw_read8(padapter, REG_MCUFWDL); - rtw_write8(padapter, REG_MCUFWDL, tmp | 0x01); + usb_write8(padapter, REG_MCUFWDL, tmp | 0x01); /* 8051 reset */ tmp = rtw_read8(padapter, REG_MCUFWDL+2); - rtw_write8(padapter, REG_MCUFWDL+2, tmp&0xf7); + usb_write8(padapter, REG_MCUFWDL+2, tmp&0xf7); } else { /* MCU firmware download disable. */ tmp = rtw_read8(padapter, REG_MCUFWDL); - rtw_write8(padapter, REG_MCUFWDL, tmp&0xfe); + usb_write8(padapter, REG_MCUFWDL, tmp&0xfe); /* Reserved for fw extension. */ - rtw_write8(padapter, REG_MCUFWDL+1, 0x00); + usb_write8(padapter, REG_MCUFWDL+1, 0x00); } } @@ -478,7 +478,7 @@ static int _BlockWrite(struct adapter *padapter, void *buffer, u32 buffSize) (buffSize-offset), blockSize_p3, blockCount_p3)); for (i = 0; i < blockCount_p3; i++) { - ret = rtw_write8(padapter, (FW_8188E_START_ADDRESS + offset + i), *(bufferPtr + offset + i)); + ret = usb_write8(padapter, (FW_8188E_START_ADDRESS + offset + i), *(bufferPtr + offset + i)); if (ret == _FAIL) goto exit; @@ -495,7 +495,7 @@ static int _PageWrite(struct adapter *padapter, u32 page, void *buffer, u32 size u8 u8Page = (u8)(page & 0x07); value8 = (rtw_read8(padapter, REG_MCUFWDL+2) & 0xF8) | u8Page; - rtw_write8(padapter, REG_MCUFWDL+2, value8); + usb_write8(padapter, REG_MCUFWDL+2, value8); return _BlockWrite(padapter, buffer, size); } @@ -537,8 +537,8 @@ void _8051Reset88E(struct adapter *padapter) u8 u1bTmp; u1bTmp = rtw_read8(padapter, REG_SYS_FUNC_EN+1); - rtw_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp&(~BIT2)); - rtw_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp|(BIT2)); + usb_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp&(~BIT2)); + usb_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp|(BIT2)); DBG_88E("=====> _8051Reset88E(): 8051 reset success .\n"); } @@ -667,7 +667,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) /* Suggested by Filen. If 8051 is running in RAM code, driver should inform Fw to reset by itself, */ /* or it will cause download Fw fail. 2010.02.01. by tynli. */ if (rtw_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) { /* 8051 RAM code */ - rtw_write8(padapter, REG_MCUFWDL, 0x00); + usb_write8(padapter, REG_MCUFWDL, 0x00); _8051Reset88E(padapter); } @@ -675,7 +675,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) fwdl_start_time = jiffies; while (1) { /* reset the FWDL chksum */ - rtw_write8(padapter, REG_MCUFWDL, rtw_read8(padapter, REG_MCUFWDL) | FWDL_ChkSum_rpt); + usb_write8(padapter, REG_MCUFWDL, rtw_read8(padapter, REG_MCUFWDL) | FWDL_ChkSum_rpt); rtStatus = _WriteFW(padapter, pFirmwareBuf, FirmwareLen); @@ -760,7 +760,7 @@ hal_EfusePowerSwitch_RTL8188E( u16 tmpV16; if (PwrState) { - rtw_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); + usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); /* 1.2V Power: From VDDON with Power Cut(0x0000h[15]), defualt valid */ tmpV16 = rtw_read16(pAdapter, REG_SYS_ISO_CTRL); @@ -787,15 +787,15 @@ hal_EfusePowerSwitch_RTL8188E( tempval = rtw_read8(pAdapter, EFUSE_TEST+3); tempval &= 0x0F; tempval |= (VOLTAGE_V25 << 4); - rtw_write8(pAdapter, EFUSE_TEST+3, (tempval | 0x80)); + usb_write8(pAdapter, EFUSE_TEST+3, (tempval | 0x80)); } } else { - rtw_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF); + usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF); if (bWrite) { /* Disable LDO 2.5V after read/write action */ tempval = rtw_read8(pAdapter, EFUSE_TEST+3); - rtw_write8(pAdapter, EFUSE_TEST+3, (tempval & 0x7F)); + usb_write8(pAdapter, EFUSE_TEST+3, (tempval & 0x7F)); } } } @@ -1827,10 +1827,10 @@ static void hal_notch_filter_8188e(struct adapter *adapter, bool enable) { if (enable) { DBG_88E("Enable notch filter\n"); - rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT1); + usb_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT1); } else { DBG_88E("Disable notch filter\n"); - rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1); + usb_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1); } } void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) @@ -2379,5 +2379,5 @@ void SetBcnCtrlReg(struct adapter *padapter, u8 SetBits, u8 ClearBits) pHalData->RegBcnCtrlVal |= SetBits; pHalData->RegBcnCtrlVal &= ~ClearBits; - rtw_write8(padapter, REG_BCN_CTRL, (u8)pHalData->RegBcnCtrlVal); + usb_write8(padapter, REG_BCN_CTRL, (u8)pHalData->RegBcnCtrlVal); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c b/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c index a4d057cf7db2..1e942501da20 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c @@ -201,23 +201,23 @@ void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *pAdapter, bool beven) CCK_index = 32; /* Adjust CCK according to gain index */ if (!pDM_Odm->RFCalibrateInfo.bCCKinCH14) { - rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]); - rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]); - rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]); - rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]); - rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]); - rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]); - rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]); - rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]); + usb_write8(pAdapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]); + usb_write8(pAdapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]); + usb_write8(pAdapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]); + usb_write8(pAdapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]); + usb_write8(pAdapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]); + usb_write8(pAdapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]); + usb_write8(pAdapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]); + usb_write8(pAdapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]); } else { - rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]); - rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]); - rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]); - rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]); - rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]); - rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]); - rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]); - rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]); + usb_write8(pAdapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]); + usb_write8(pAdapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]); + usb_write8(pAdapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]); + usb_write8(pAdapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]); + usb_write8(pAdapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]); + usb_write8(pAdapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]); + usb_write8(pAdapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]); + usb_write8(pAdapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]); } } } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 178cf8b9c248..e18a0106c099 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -608,9 +608,9 @@ PHY_BBConfig8188E( /* 20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF. */ - rtw_write8(Adapter, REG_RF_CTRL, RF_EN|RF_RSTB|RF_SDMRSTB); + usb_write8(Adapter, REG_RF_CTRL, RF_EN|RF_RSTB|RF_SDMRSTB); - rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB); + usb_write8(Adapter, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB); /* Config BB and AGC */ rtStatus = phy_BB8188E_Config_ParaFile(Adapter); @@ -799,14 +799,14 @@ _PHY_SetBWMode92C( case HT_CHANNEL_WIDTH_20: regBwOpMode |= BW_OPMODE_20MHZ; /* 2007/02/07 Mark by Emily because we have not verify whether this register works */ - rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode); + usb_write8(Adapter, REG_BWOPMODE, regBwOpMode); break; case HT_CHANNEL_WIDTH_40: regBwOpMode &= ~BW_OPMODE_20MHZ; /* 2007/02/07 Mark by Emily because we have not verify whether this register works */ - rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode); + usb_write8(Adapter, REG_BWOPMODE, regBwOpMode); regRRSR_RSC = (regRRSR_RSC&0x90) | (pHalData->nCur40MhzPrimeSC<<5); - rtw_write8(Adapter, REG_RRSR+2, regRRSR_RSC); + usb_write8(Adapter, REG_RRSR+2, regRRSR_RSC); break; default: break; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c b/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c index 52103da3e264..8ce9d0e4eeff 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c @@ -366,7 +366,7 @@ static void writeOFDMPowerReg88E(struct adapter *Adapter, u8 index, u32 *pValue) writeVal = (writeVal > 8) ? (writeVal-8) : 0; else writeVal = (writeVal > 6) ? (writeVal-6) : 0; - rtw_write8(Adapter, (u32)(regoffset+i), (u8)writeVal); + usb_write8(Adapter, (u32)(regoffset+i), (u8)writeVal); } } } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c index 77dce584f0db..3971b70f37b0 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c @@ -35,7 +35,7 @@ void SwLedOn(struct adapter *padapter, struct LED_871x *pLed) if (padapter->bSurpriseRemoved || padapter->bDriverStopped) return; LedCfg = rtw_read8(padapter, REG_LEDCFG2); - rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); /* SW control led0 on. */ + usb_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); /* SW control led0 on. */ pLed->bLedOn = true; } @@ -54,12 +54,12 @@ void SwLedOff(struct adapter *padapter, struct LED_871x *pLed) if (pHalData->bLedOpenDrain) { /* Open-drain arrangement for controlling the LED) */ LedCfg &= 0x90; /* Set to software control. */ - rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3)); + usb_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3)); LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG); LedCfg &= 0xFE; - rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg); + usb_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg); } else { - rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6)); + usb_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6)); } exit: pLed->bLedOn = false; diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 3615a60747b4..ef458177dfd4 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -159,7 +159,7 @@ static void _InitInterrupt(struct adapter *Adapter) else usb_opt = usb_opt | (INT_BULK_SEL); - rtw_write8(Adapter, REG_USB_SPECIAL_OPTION, usb_opt); + usb_write8(Adapter, REG_USB_SPECIAL_OPTION, usb_opt); } static void _InitQueueReservedPage(struct adapter *Adapter) @@ -185,7 +185,7 @@ static void _InitQueueReservedPage(struct adapter *Adapter) if (haldata->OutEpQueueSel & TX_SELE_NQ) numNQ = 0x1C; value8 = (u8)_NPQ(numNQ); - rtw_write8(Adapter, REG_RQPN_NPQ, value8); + usb_write8(Adapter, REG_RQPN_NPQ, value8); numPubQ = 0xA8 - numHQ - numLQ - numNQ; @@ -201,11 +201,11 @@ static void _InitQueueReservedPage(struct adapter *Adapter) static void _InitTxBufferBoundary(struct adapter *Adapter, u8 txpktbuf_bndy) { - rtw_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy); - rtw_write8(Adapter, REG_TXPKTBUF_MGQ_BDNY, txpktbuf_bndy); - rtw_write8(Adapter, REG_TXPKTBUF_WMAC_LBK_BF_HD, txpktbuf_bndy); - rtw_write8(Adapter, REG_TRXFF_BNDY, txpktbuf_bndy); - rtw_write8(Adapter, REG_TDECTRL+1, txpktbuf_bndy); + usb_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy); + usb_write8(Adapter, REG_TXPKTBUF_MGQ_BDNY, txpktbuf_bndy); + usb_write8(Adapter, REG_TXPKTBUF_WMAC_LBK_BF_HD, txpktbuf_bndy); + usb_write8(Adapter, REG_TRXFF_BNDY, txpktbuf_bndy); + usb_write8(Adapter, REG_TDECTRL+1, txpktbuf_bndy); } static void _InitPageBoundary(struct adapter *Adapter) @@ -354,12 +354,12 @@ static void _InitTransferPageSize(struct adapter *Adapter) u8 value8; value8 = _PSRX(PBP_128) | _PSTX(PBP_128); - rtw_write8(Adapter, REG_PBP, value8); + usb_write8(Adapter, REG_PBP, value8); } static void _InitDriverInfoSize(struct adapter *Adapter, u8 drvInfoSize) { - rtw_write8(Adapter, REG_RX_DRVINFO_SZ, drvInfoSize); + usb_write8(Adapter, REG_RX_DRVINFO_SZ, drvInfoSize); } static void _InitWMACSetting(struct adapter *Adapter) @@ -422,9 +422,9 @@ static void _InitEDCA(struct adapter *Adapter) static void _InitRDGSetting(struct adapter *Adapter) { - rtw_write8(Adapter, REG_RD_CTRL, 0xFF); + usb_write8(Adapter, REG_RD_CTRL, 0xFF); usb_write16(Adapter, REG_RD_NAV_NXT, 0x200); - rtw_write8(Adapter, REG_RD_RESP_PKT_TH, 0x05); + usb_write8(Adapter, REG_RD_RESP_PKT_TH, 0x05); } static void _InitRxSetting(struct adapter *Adapter) @@ -439,10 +439,10 @@ static void _InitRetryFunction(struct adapter *Adapter) value8 = rtw_read8(Adapter, REG_FWHW_TXQ_CTRL); value8 |= EN_AMPDU_RTY_NEW; - rtw_write8(Adapter, REG_FWHW_TXQ_CTRL, value8); + usb_write8(Adapter, REG_FWHW_TXQ_CTRL, value8); /* Set ACK timeout */ - rtw_write8(Adapter, REG_ACKTO, 0x40); + usb_write8(Adapter, REG_ACKTO, 0x40); } /*----------------------------------------------------------------------------- @@ -524,23 +524,23 @@ usb_AggSettingRxUpdate( break; } - rtw_write8(Adapter, REG_TRXDMA_CTRL, valueDMA); - rtw_write8(Adapter, REG_USB_SPECIAL_OPTION, valueUSB); + usb_write8(Adapter, REG_TRXDMA_CTRL, valueDMA); + usb_write8(Adapter, REG_USB_SPECIAL_OPTION, valueUSB); switch (haldata->UsbRxAggMode) { case USB_RX_AGG_DMA: - rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, haldata->UsbRxAggPageCount); - rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH+1, haldata->UsbRxAggPageTimeout); + usb_write8(Adapter, REG_RXDMA_AGG_PG_TH, haldata->UsbRxAggPageCount); + usb_write8(Adapter, REG_RXDMA_AGG_PG_TH+1, haldata->UsbRxAggPageTimeout); break; case USB_RX_AGG_USB: - rtw_write8(Adapter, REG_USB_AGG_TH, haldata->UsbRxAggBlockCount); - rtw_write8(Adapter, REG_USB_AGG_TO, haldata->UsbRxAggBlockTimeout); + usb_write8(Adapter, REG_USB_AGG_TH, haldata->UsbRxAggBlockCount); + usb_write8(Adapter, REG_USB_AGG_TO, haldata->UsbRxAggBlockTimeout); break; case USB_RX_AGG_MIX: - rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, haldata->UsbRxAggPageCount); - rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH+1, (haldata->UsbRxAggPageTimeout & 0x1F));/* 0x280[12:8] */ - rtw_write8(Adapter, REG_USB_AGG_TH, haldata->UsbRxAggBlockCount); - rtw_write8(Adapter, REG_USB_AGG_TO, haldata->UsbRxAggBlockTimeout); + usb_write8(Adapter, REG_RXDMA_AGG_PG_TH, haldata->UsbRxAggPageCount); + usb_write8(Adapter, REG_RXDMA_AGG_PG_TH+1, (haldata->UsbRxAggPageTimeout & 0x1F));/* 0x280[12:8] */ + usb_write8(Adapter, REG_USB_AGG_TH, haldata->UsbRxAggBlockCount); + usb_write8(Adapter, REG_USB_AGG_TO, haldata->UsbRxAggBlockTimeout); break; case USB_RX_AGG_DISABLE: default: @@ -591,8 +591,8 @@ static void _InitBeaconParameters(struct adapter *Adapter) /* TODO: Remove these magic number */ usb_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);/* ms */ - rtw_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);/* 5ms */ - rtw_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); /* 2ms */ + usb_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);/* 5ms */ + usb_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); /* 2ms */ /* Suggested by designer timchen. Change beacon AIFS to the largest number */ /* beacause test chip does not contension before sending beacon. by tynli. 2009.11.03 */ @@ -608,9 +608,9 @@ static void _InitBeaconParameters(struct adapter *Adapter) static void _BeaconFunctionEnable(struct adapter *Adapter, bool Enable, bool Linked) { - rtw_write8(Adapter, REG_BCN_CTRL, (BIT4 | BIT3 | BIT1)); + usb_write8(Adapter, REG_BCN_CTRL, (BIT4 | BIT3 | BIT1)); - rtw_write8(Adapter, REG_RD_CTRL+1, 0x6F); + usb_write8(Adapter, REG_RD_CTRL+1, 0x6F); } /* Set CCK and OFDM Block "ON" */ @@ -668,7 +668,7 @@ enum rt_rf_power_state RfOnOffDetect(struct adapter *adapt) DBG_88E("pwrdown, 0x5c(BIT7)=%02x\n", val8); rfpowerstate = (val8 & BIT7) ? rf_off : rf_on; } else { /* rf on/off */ - rtw_write8(adapt, REG_MAC_PINMUX_CFG, rtw_read8(adapt, REG_MAC_PINMUX_CFG)&~(BIT3)); + usb_write8(adapt, REG_MAC_PINMUX_CFG, rtw_read8(adapt, REG_MAC_PINMUX_CFG)&~(BIT3)); val8 = rtw_read8(adapt, REG_GPIO_IO_SEL); DBG_88E("GPIO_IN=%02x\n", val8); rfpowerstate = (val8 & BIT3) ? rf_on : rf_off; @@ -825,7 +825,7 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter) /* Enable MACTXEN/MACRXEN block */ value16 = rtw_read16(Adapter, REG_CR); value16 |= (MACTXEN | MACRXEN); - rtw_write8(Adapter, REG_CR, value16); + usb_write8(Adapter, REG_CR, value16); if (haldata->bRDGEnable) _InitRDGSetting(Adapter); @@ -833,13 +833,13 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter) /* Enable TX Report */ /* Enable Tx Report Timer */ value8 = rtw_read8(Adapter, REG_TX_RPT_CTRL); - rtw_write8(Adapter, REG_TX_RPT_CTRL, (value8|BIT1|BIT0)); + usb_write8(Adapter, REG_TX_RPT_CTRL, (value8|BIT1|BIT0)); /* Set MAX RPT MACID */ - rtw_write8(Adapter, REG_TX_RPT_CTRL+1, 2);/* FOR sta mode ,0: bc/mc ,1:AP */ + usb_write8(Adapter, REG_TX_RPT_CTRL+1, 2);/* FOR sta mode ,0: bc/mc ,1:AP */ /* Tx RPT Timer. Unit: 32us */ usb_write16(Adapter, REG_TX_RPT_TIME, 0xCdf0); - rtw_write8(Adapter, REG_EARLY_MODE_CONTROL, 0); + usb_write8(Adapter, REG_EARLY_MODE_CONTROL, 0); usb_write16(Adapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ usb_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */ @@ -871,13 +871,13 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11); /* HW SEQ CTRL */ /* set 0x0 to 0xFF by tynli. Default enable HW SEQ NUM. */ - rtw_write8(Adapter, REG_HWSEQ_CTRL, 0xFF); + usb_write8(Adapter, REG_HWSEQ_CTRL, 0xFF); if (pregistrypriv->wifi_spec) usb_write16(Adapter, REG_FAST_EDCA_CTRL, 0); /* Nav limit , suggest by scott */ - rtw_write8(Adapter, 0x652, 0x0); + usb_write8(Adapter, 0x652, 0x0); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM); rtl8188e_InitHalDm(Adapter); @@ -896,10 +896,10 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM); pwrctrlpriv->rf_pwrstate = rf_on; /* enable Tx report. */ - rtw_write8(Adapter, REG_FWHW_TXQ_CTRL+1, 0x0F); + usb_write8(Adapter, REG_FWHW_TXQ_CTRL+1, 0x0F); /* Suggested by SD1 pisa. Added by tynli. 2011.10.21. */ - rtw_write8(Adapter, REG_EARLY_MODE_CONTROL+3, 0x01);/* Pretx_en, for WEP/TKIP SEC */ + usb_write8(Adapter, REG_EARLY_MODE_CONTROL+3, 0x01);/* Pretx_en, for WEP/TKIP SEC */ /* tynli_test_tx_report. */ usb_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); @@ -928,7 +928,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_LCK); /* HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_PABIAS); */ /* _InitPABias(Adapter); */ - rtw_write8(Adapter, REG_USB_HRPWM, 0); + usb_write8(Adapter, REG_USB_HRPWM, 0); /* ack for xmit mgmt frames. */ usb_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); @@ -951,10 +951,10 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) /* Stop Tx Report Timer. 0x4EC[Bit1]=b'0 */ val8 = rtw_read8(Adapter, REG_TX_RPT_CTRL); - rtw_write8(Adapter, REG_TX_RPT_CTRL, val8&(~BIT1)); + usb_write8(Adapter, REG_TX_RPT_CTRL, val8&(~BIT1)); /* stop rx */ - rtw_write8(Adapter, REG_CR, 0x0); + usb_write8(Adapter, REG_CR, 0x0); /* Run LPS WL RFOFF flow */ HalPwrSeqCmdParsing(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, Rtl8188E_NIC_LPS_ENTER_FLOW); @@ -966,35 +966,35 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) /* Reset MCU 0x2[10]=0. */ val8 = rtw_read8(Adapter, REG_SYS_FUNC_EN+1); val8 &= ~BIT(2); /* 0x2[10], FEN_CPUEN */ - rtw_write8(Adapter, REG_SYS_FUNC_EN+1, val8); + usb_write8(Adapter, REG_SYS_FUNC_EN+1, val8); } /* reset MCU ready status */ - rtw_write8(Adapter, REG_MCUFWDL, 0); + usb_write8(Adapter, REG_MCUFWDL, 0); /* YJ,add,111212 */ /* Disable 32k */ val8 = rtw_read8(Adapter, REG_32K_CTRL); - rtw_write8(Adapter, REG_32K_CTRL, val8&(~BIT0)); + usb_write8(Adapter, REG_32K_CTRL, val8&(~BIT0)); /* Card disable power action flow */ HalPwrSeqCmdParsing(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, Rtl8188E_NIC_DISABLE_FLOW); /* Reset MCU IO Wrapper */ val8 = rtw_read8(Adapter, REG_RSV_CTRL+1); - rtw_write8(Adapter, REG_RSV_CTRL+1, (val8&(~BIT3))); + usb_write8(Adapter, REG_RSV_CTRL+1, (val8&(~BIT3))); val8 = rtw_read8(Adapter, REG_RSV_CTRL+1); - rtw_write8(Adapter, REG_RSV_CTRL+1, val8|BIT3); + usb_write8(Adapter, REG_RSV_CTRL+1, val8|BIT3); /* YJ,test add, 111207. For Power Consumption. */ val8 = rtw_read8(Adapter, GPIO_IN); - rtw_write8(Adapter, GPIO_OUT, val8); - rtw_write8(Adapter, GPIO_IO_SEL, 0xFF);/* Reg0x46 */ + usb_write8(Adapter, GPIO_OUT, val8); + usb_write8(Adapter, GPIO_IO_SEL, 0xFF);/* Reg0x46 */ val8 = rtw_read8(Adapter, REG_GPIO_IO_SEL); - rtw_write8(Adapter, REG_GPIO_IO_SEL, (val8<<4)); + usb_write8(Adapter, REG_GPIO_IO_SEL, (val8<<4)); val8 = rtw_read8(Adapter, REG_GPIO_IO_SEL+1); - rtw_write8(Adapter, REG_GPIO_IO_SEL+1, val8|0x0F);/* Reg0x43 */ + usb_write8(Adapter, REG_GPIO_IO_SEL+1, val8|0x0F);/* Reg0x43 */ usb_write32(Adapter, REG_BB_PAD_CTRL, 0x00080808);/* set LNA ,TRSW,EX_PA Pin to output mode */ haldata->bMacPwrCtrlOn = false; Adapter->bFWReady = false; @@ -1005,7 +1005,7 @@ static void rtl8192cu_hw_power_down(struct adapter *adapt) /* Then enable power down control bit of register 0x04 BIT4 and BIT15 as 1. */ /* Enable register area 0x0-0xc. */ - rtw_write8(adapt, REG_RSV_CTRL, 0x0); + usb_write8(adapt, REG_RSV_CTRL, 0x0); usb_write16(adapt, REG_APS_FSMCO, 0x8812); } @@ -1206,11 +1206,11 @@ static void ResumeTxBeacon(struct adapter *adapt) /* 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value */ /* which should be read from register to a global variable. */ - rtw_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl) | BIT6); + usb_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl) | BIT6); haldata->RegFwHwTxQCtrl |= BIT6; - rtw_write8(adapt, REG_TBTT_PROHIBIT+1, 0xff); + usb_write8(adapt, REG_TBTT_PROHIBIT+1, 0xff); haldata->RegReg542 |= BIT0; - rtw_write8(adapt, REG_TBTT_PROHIBIT+2, haldata->RegReg542); + usb_write8(adapt, REG_TBTT_PROHIBIT+2, haldata->RegReg542); } static void StopTxBeacon(struct adapter *adapt) @@ -1220,11 +1220,11 @@ static void StopTxBeacon(struct adapter *adapt) /* 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value */ /* which should be read from register to a global variable. */ - rtw_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl) & (~BIT6)); + usb_write8(adapt, REG_FWHW_TXQ_CTRL+2, (haldata->RegFwHwTxQCtrl) & (~BIT6)); haldata->RegFwHwTxQCtrl &= (~BIT6); - rtw_write8(adapt, REG_TBTT_PROHIBIT+1, 0x64); + usb_write8(adapt, REG_TBTT_PROHIBIT+1, 0x64); haldata->RegReg542 &= ~(BIT0); - rtw_write8(adapt, REG_TBTT_PROHIBIT+2, haldata->RegReg542); + usb_write8(adapt, REG_TBTT_PROHIBIT+2, haldata->RegReg542); /* todo: CheckFwRsvdPageContent(Adapter); 2010.06.23. Added by tynli. */ } @@ -1235,26 +1235,26 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) u8 mode = *((u8 *)val); /* disable Port0 TSF update */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); /* set net_type */ val8 = rtw_read8(Adapter, MSR)&0x0c; val8 |= mode; - rtw_write8(Adapter, MSR, val8); + usb_write8(Adapter, MSR, val8); DBG_88E("%s()-%d mode = %d\n", __func__, __LINE__, mode); if ((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_)) { StopTxBeacon(Adapter); - rtw_write8(Adapter, REG_BCN_CTRL, 0x19);/* disable atim wnd */ + usb_write8(Adapter, REG_BCN_CTRL, 0x19);/* disable atim wnd */ } else if ((mode == _HW_STATE_ADHOC_)) { ResumeTxBeacon(Adapter); - rtw_write8(Adapter, REG_BCN_CTRL, 0x1a); + usb_write8(Adapter, REG_BCN_CTRL, 0x1a); } else if (mode == _HW_STATE_AP_) { ResumeTxBeacon(Adapter); - rtw_write8(Adapter, REG_BCN_CTRL, 0x12); + usb_write8(Adapter, REG_BCN_CTRL, 0x12); /* Set RCR */ usb_write32(Adapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0,reject ICV_ERR packet */ @@ -1264,25 +1264,25 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP1, 0x0400); /* Beacon Control related register for first time */ - rtw_write8(Adapter, REG_BCNDMATIM, 0x02); /* 2ms */ + usb_write8(Adapter, REG_BCNDMATIM, 0x02); /* 2ms */ - rtw_write8(Adapter, REG_ATIMWND, 0x0a); /* 10ms */ + usb_write8(Adapter, REG_ATIMWND, 0x0a); /* 10ms */ usb_write16(Adapter, REG_BCNTCFG, 0x00); usb_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04); usb_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);/* +32767 (~32ms) */ /* reset TSF */ - rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0)); + usb_write8(Adapter, REG_DUAL_TSF_RST, BIT(0)); /* BIT3 - If set 0, hw will clr bcnq when tx becon ok/fail or port 0 */ - rtw_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM) | BIT(3) | BIT(4)); + usb_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM) | BIT(3) | BIT(4)); /* enable BCN0 Function for if1 */ /* don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received) */ - rtw_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | BIT(1))); + usb_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | BIT(1))); /* dis BCN1 ATIM WND if if2 is station */ - rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1) | BIT(0)); + usb_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1) | BIT(0)); } } @@ -1294,7 +1294,7 @@ static void hw_var_set_macaddr(struct adapter *Adapter, u8 variable, u8 *val) reg_macid = REG_MACID; for (idx = 0; idx < 6; idx++) - rtw_write8(Adapter, (reg_macid+idx), val[idx]); + usb_write8(Adapter, (reg_macid+idx), val[idx]); } static void hw_var_set_bssid(struct adapter *Adapter, u8 variable, u8 *val) @@ -1305,7 +1305,7 @@ static void hw_var_set_bssid(struct adapter *Adapter, u8 variable, u8 *val) reg_bssid = REG_BSSID; for (idx = 0; idx < 6; idx++) - rtw_write8(Adapter, (reg_bssid+idx), val[idx]); + usb_write8(Adapter, (reg_bssid+idx), val[idx]); } static void hw_var_set_bcn_func(struct adapter *Adapter, u8 variable, u8 *val) @@ -1315,9 +1315,9 @@ static void hw_var_set_bcn_func(struct adapter *Adapter, u8 variable, u8 *val) bcn_ctrl_reg = REG_BCN_CTRL; if (*((u8 *)val)) - rtw_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT)); + usb_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT)); else - rtw_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT))); + usb_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT))); } static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) @@ -1333,7 +1333,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) val8 = rtw_read8(Adapter, MSR)&0x0c; val8 |= *((u8 *)val); - rtw_write8(Adapter, MSR, val8); + usb_write8(Adapter, MSR, val8); } break; case HW_VAR_MEDIA_STATUS1: @@ -1342,7 +1342,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) val8 = rtw_read8(Adapter, MSR) & 0x03; val8 |= *((u8 *)val) << 2; - rtw_write8(Adapter, MSR, val8); + usb_write8(Adapter, MSR, val8); } break; case HW_VAR_SET_OPMODE: @@ -1376,9 +1376,9 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) BrateCfg |= 0x01; /* default enable 1M ACK rate */ /* Set RRSR rate table. */ - rtw_write8(Adapter, REG_RRSR, BrateCfg & 0xff); - rtw_write8(Adapter, REG_RRSR+1, (BrateCfg >> 8) & 0xff); - rtw_write8(Adapter, REG_RRSR+2, rtw_read8(Adapter, REG_RRSR+2)&0xf0); + usb_write8(Adapter, REG_RRSR, BrateCfg & 0xff); + usb_write8(Adapter, REG_RRSR+1, (BrateCfg >> 8) & 0xff); + usb_write8(Adapter, REG_RRSR+2, rtw_read8(Adapter, REG_RRSR+2)&0xf0); /* Set RTS initial rate */ while (BrateCfg > 0x1) { @@ -1386,11 +1386,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) RateIndex++; } /* Ziv - Check */ - rtw_write8(Adapter, REG_INIRTS_RATE_SEL, RateIndex); + usb_write8(Adapter, REG_INIRTS_RATE_SEL, RateIndex); } break; case HW_VAR_TXPAUSE: - rtw_write8(Adapter, REG_TXPAUSE, *((u8 *)val)); + usb_write8(Adapter, REG_TXPAUSE, *((u8 *)val)); break; case HW_VAR_BCN_FUNC: hw_var_set_bcn_func(Adapter, variable, val); @@ -1407,13 +1407,13 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) StopTxBeacon(Adapter); /* disable related TSF function */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3))); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3))); usb_write32(Adapter, REG_TSFTR, tsf); usb_write32(Adapter, REG_TSFTR+4, tsf>>32); /* enable related TSF function */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3)); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3)); if (((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)) ResumeTxBeacon(Adapter); @@ -1438,10 +1438,10 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0x00); /* reset TSF */ - rtw_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1))); + usb_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1))); /* disable update TSF */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); break; case HW_VAR_MLME_SITESURVEY: if (*((u8 *)val)) { /* under sitesurvey */ @@ -1453,7 +1453,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0x00); /* disable update TSF */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); } else { /* sitesurvey done */ struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -1464,11 +1464,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } else if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); @@ -1511,7 +1511,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) } else if (type == 2) { /* sta add event call back */ /* enable update TSF */ - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) RetryLimit = 0x7; @@ -1528,7 +1528,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - rtw_write8(Adapter, REG_SLOT, val[0]); + usb_write8(Adapter, REG_SLOT, val[0]); if (pmlmeinfo->WMM_enable == 0) { if (pmlmeext->cur_wireless_mode == WIRELESS_11B) @@ -1539,20 +1539,20 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) u1bAIFS = aSifsTime + (2 * pmlmeinfo->slotTime); /* Temporary removed, 2008.06.20. */ - rtw_write8(Adapter, REG_EDCA_VO_PARAM, u1bAIFS); - rtw_write8(Adapter, REG_EDCA_VI_PARAM, u1bAIFS); - rtw_write8(Adapter, REG_EDCA_BE_PARAM, u1bAIFS); - rtw_write8(Adapter, REG_EDCA_BK_PARAM, u1bAIFS); + usb_write8(Adapter, REG_EDCA_VO_PARAM, u1bAIFS); + usb_write8(Adapter, REG_EDCA_VI_PARAM, u1bAIFS); + usb_write8(Adapter, REG_EDCA_BE_PARAM, u1bAIFS); + usb_write8(Adapter, REG_EDCA_BK_PARAM, u1bAIFS); } } break; case HW_VAR_RESP_SIFS: /* RESP_SIFS for CCK */ - rtw_write8(Adapter, REG_R2T_SIFS, val[0]); /* SIFS_T2T_CCK (0x08) */ - rtw_write8(Adapter, REG_R2T_SIFS+1, val[1]); /* SIFS_R2T_CCK(0x08) */ + usb_write8(Adapter, REG_R2T_SIFS, val[0]); /* SIFS_T2T_CCK (0x08) */ + usb_write8(Adapter, REG_R2T_SIFS+1, val[1]); /* SIFS_R2T_CCK(0x08) */ /* RESP_SIFS for OFDM */ - rtw_write8(Adapter, REG_T2T_SIFS, val[2]); /* SIFS_T2T_OFDM (0x0a) */ - rtw_write8(Adapter, REG_T2T_SIFS+1, val[3]); /* SIFS_R2T_OFDM(0x0a) */ + usb_write8(Adapter, REG_T2T_SIFS, val[2]); /* SIFS_T2T_OFDM (0x0a) */ + usb_write8(Adapter, REG_T2T_SIFS+1, val[3]); /* SIFS_R2T_OFDM(0x0a) */ break; case HW_VAR_ACK_PREAMBLE: { @@ -1563,11 +1563,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (bShortPreamble) regTmp |= 0x80; - rtw_write8(Adapter, REG_RRSR+2, regTmp); + usb_write8(Adapter, REG_RRSR+2, regTmp); } break; case HW_VAR_SEC_CFG: - rtw_write8(Adapter, REG_SECCFG, *((u8 *)val)); + usb_write8(Adapter, REG_SECCFG, *((u8 *)val)); break; case HW_VAR_DM_FLAG: podmpriv->SupportAbility = *((u8 *)val); @@ -1662,7 +1662,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) AcmCtrl &= (~AcmHw_BeqEn); DBG_88E("[HW_VAR_ACM_CTRL] Write 0x%X\n", AcmCtrl); - rtw_write8(Adapter, REG_ACMHWCTRL, AcmCtrl); + usb_write8(Adapter, REG_ACMHWCTRL, AcmCtrl); } break; case HW_VAR_AMPDU_MIN_SPACE: @@ -1689,7 +1689,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) } if (MinSpacingToSet < SecMinSpace) MinSpacingToSet = SecMinSpace; - rtw_write8(Adapter, REG_AMPDU_MIN_SPACE, (rtw_read8(Adapter, REG_AMPDU_MIN_SPACE) & 0xf8) | MinSpacingToSet); + usb_write8(Adapter, REG_AMPDU_MIN_SPACE, (rtw_read8(Adapter, REG_AMPDU_MIN_SPACE) & 0xf8) | MinSpacingToSet); } } break; @@ -1714,7 +1714,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if ((pRegToSet[index] & 0x0f) > FactorToSet) pRegToSet[index] = (pRegToSet[index] & 0xf0) | (FactorToSet); - rtw_write8(Adapter, (REG_AGGLEN_LMT+index), pRegToSet[index]); + usb_write8(Adapter, (REG_AGGLEN_LMT+index), pRegToSet[index]); } } } @@ -1724,7 +1724,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) u8 threshold = *((u8 *)val); if (threshold == 0) threshold = haldata->UsbRxAggPageCount; - rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, threshold); + usb_write8(Adapter, REG_RXDMA_AGG_PG_TH, threshold); } break; case HW_VAR_SET_RPWM: @@ -1798,7 +1798,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) u8 trycnt = 100; /* pause tx */ - rtw_write8(Adapter, REG_TXPAUSE, 0xff); + usb_write8(Adapter, REG_TXPAUSE, 0xff); /* keep sn */ Adapter->xmitpriv.nqos_ssn = rtw_read16(Adapter, REG_NQOS_SEQ); @@ -1830,7 +1830,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) { u8 maxMacid = *val; DBG_88E("### MacID(%d),Set Max Tx RPT MID(%d)\n", maxMacid, maxMacid+1); - rtw_write8(Adapter, REG_TX_RPT_CTRL+1, maxMacid+1); + usb_write8(Adapter, REG_TX_RPT_CTRL+1, maxMacid+1); } break; case HW_VAR_H2C_MEDIA_STATUS_RPT: @@ -1838,7 +1838,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) break; case HW_VAR_BCN_VALID: /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw */ - rtw_write8(Adapter, REG_TDECTRL+2, rtw_read8(Adapter, REG_TDECTRL+2) | BIT0); + usb_write8(Adapter, REG_TDECTRL+2, rtw_read8(Adapter, REG_TDECTRL+2) | BIT0); break; default: break; @@ -2163,11 +2163,11 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) /* BCN interval */ usb_write16(adapt, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval); - rtw_write8(adapt, REG_ATIMWND, 0x02);/* 2ms */ + usb_write8(adapt, REG_ATIMWND, 0x02);/* 2ms */ _InitBeaconParameters(adapt); - rtw_write8(adapt, REG_SLOT, 0x09); + usb_write8(adapt, REG_SLOT, 0x09); value32 = rtw_read32(adapt, REG_TCR); value32 &= ~TSFRST; @@ -2177,14 +2177,14 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) usb_write32(adapt, REG_TCR, value32); /* NOTE: Fix test chip's bug (about contention windows's randomness) */ - rtw_write8(adapt, REG_RXTSF_OFFSET_CCK, 0x50); - rtw_write8(adapt, REG_RXTSF_OFFSET_OFDM, 0x50); + usb_write8(adapt, REG_RXTSF_OFFSET_CCK, 0x50); + usb_write8(adapt, REG_RXTSF_OFFSET_OFDM, 0x50); _BeaconFunctionEnable(adapt, true, true); ResumeTxBeacon(adapt); - rtw_write8(adapt, bcn_ctrl_reg, rtw_read8(adapt, bcn_ctrl_reg)|BIT(1)); + usb_write8(adapt, bcn_ctrl_reg, rtw_read8(adapt, bcn_ctrl_reg)|BIT(1)); } static void rtl8188eu_init_default_value(struct adapter *adapt) diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index f2aa3d5a9207..c38cb1152838 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -181,7 +181,7 @@ static u32 usb_read32(struct adapter *adapter, u32 addr) return le32_to_cpu(data); } -static int usb_write8(struct adapter *adapter, u32 addr, u8 val) +int usb_write8(struct adapter *adapter, u32 addr, u8 val) { u8 request; u8 requesttype; @@ -669,5 +669,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) pops->_read8 = &usb_read8; pops->_read16 = &usb_read16; pops->_read32 = &usb_read32; - pops->_write8 = &usb_write8; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 24b3ee09aae6..6c956f4c30e7 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -47,7 +47,6 @@ struct _io_ops { u8 (*_read8)(struct adapter *pintfhdl, u32 addr); u16 (*_read16)(struct adapter *pintfhdl, u32 addr); u32 (*_read32)(struct adapter *pintfhdl, u32 addr); - int (*_write8)(struct adapter *pintfhdl, u32 addr, u8 val); }; struct io_req { @@ -85,7 +84,7 @@ u32 _rtw_read32(struct adapter *adapter, u32 addr); u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_read_port_cancel(struct adapter *adapter); -int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); +int usb_write8(struct adapter *adapter, u32 addr, u8 val); int usb_write16(struct adapter *adapter, u32 addr, u16 val); int usb_write32(struct adapter *adapter, u32 addr, u32 val); int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); @@ -97,9 +96,6 @@ void usb_write_port_cancel(struct adapter *adapter); #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) -#define rtw_write8(adapter, addr, val) \ - _rtw_write8((adapter), (addr), (val)) - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 526978fab497..92e07a5f4fdd 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2222,7 +2222,7 @@ static int rtw_wx_write32(struct net_device *dev, switch (bytes) { case 1: - rtw_write8(padapter, addr, (u8)data32); + usb_write8(padapter, addr, (u8)data32); DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%02X\n", __func__, addr, (u8)data32); break; case 2: @@ -2370,7 +2370,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le RegRWStruct = (struct mp_rw_reg *)pdata; switch (RegRWStruct->width) { case 1: - rtw_write8(padapter, RegRWStruct->offset, (u8)RegRWStruct->value); + usb_write8(padapter, RegRWStruct->offset, (u8)RegRWStruct->value); break; case 2: usb_write16(padapter, RegRWStruct->offset, (u16)RegRWStruct->value); @@ -4122,8 +4122,8 @@ static int rtw_dbg_port(struct net_device *dev, case 0x71:/* write_reg */ switch (minor_cmd) { case 1: - rtw_write8(padapter, arg, extra_arg); - DBG_88E("rtw_write8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); + usb_write8(padapter, arg, extra_arg); + DBG_88E("usb_write8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); break; case 2: usb_write16(padapter, arg, extra_arg); @@ -4576,9 +4576,9 @@ static int rtw_dbg_port(struct net_device *dev, break; case 0xfd: - rtw_write8(padapter, 0xc50, arg); + usb_write8(padapter, 0xc50, arg); DBG_88E("wr(0xc50) = 0x%x\n", rtw_read8(padapter, 0xc50)); - rtw_write8(padapter, 0xc58, arg); + usb_write8(padapter, 0xc58, arg); DBG_88E("wr(0xc58) = 0x%x\n", rtw_read8(padapter, 0xc58)); break; case 0xfe: @@ -6414,7 +6414,7 @@ static int rtw_mp_write_reg(struct net_device *dev, ret = -EINVAL; break; } - rtw_write8(padapter, addr, data); + usb_write8(padapter, addr, data); break; case 'w': /* 2 bytes */ -- cgit From 99ecfb06f83ec7eaa9110fa887cef3f55d031bf4 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:34 +0530 Subject: staging: rtl8188eu: Remove function _rtw_read32() _rtw_read32() is a wrapper function, being used to call usb_read32(). Call usb_read32() directly and drop _rtw_read32(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 14 +++--- drivers/staging/rtl8188eu/core/rtw_efuse.c | 6 +-- drivers/staging/rtl8188eu/core/rtw_io.c | 12 ----- drivers/staging/rtl8188eu/core/rtw_mp.c | 8 +-- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 2 +- drivers/staging/rtl8188eu/core/rtw_sreset.c | 2 +- .../staging/rtl8188eu/hal/Hal8188ERateAdaptive.c | 8 +-- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 2 +- drivers/staging/rtl8188eu/hal/odm.c | 8 +-- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 20 ++++---- drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 4 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 36 +++++++------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +- drivers/staging/rtl8188eu/include/rtw_io.h | 4 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 58 +++++++++++----------- 16 files changed, 87 insertions(+), 102 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index d2045377103c..615a090562c9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -104,7 +104,7 @@ int proc_get_read_reg(char *page, char **start, len += snprintf(page + len, count - len, "rtw_read16(0x%x)=0x%x\n", proc_get_read_addr, rtw_read16(padapter, proc_get_read_addr)); break; case 4: - len += snprintf(page + len, count - len, "rtw_read32(0x%x)=0x%x\n", proc_get_read_addr, rtw_read32(padapter, proc_get_read_addr)); + len += snprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr)); break; default: len += snprintf(page + len, count - len, "error read length=%d\n", proc_get_read_len); @@ -326,7 +326,7 @@ int proc_get_mac_reg_dump1(char *page, char **start, for (i = 0x0; i < 0x300; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } @@ -349,7 +349,7 @@ int proc_get_mac_reg_dump2(char *page, char **start, for (i = 0x300; i < 0x600; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } @@ -372,7 +372,7 @@ int proc_get_mac_reg_dump3(char *page, char **start, for (i = 0x600; i < 0x800; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } @@ -394,7 +394,7 @@ int proc_get_bb_reg_dump1(char *page, char **start, for (i = 0x800; i < 0xB00; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } @@ -415,7 +415,7 @@ int proc_get_bb_reg_dump2(char *page, char **start, for (i = 0xB00; i < 0xE00; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } @@ -436,7 +436,7 @@ int proc_get_bb_reg_dump3(char *page, char **start, for (i = 0xE00; i < 0x1000; i += 4) { if (j%4 == 1) len += snprintf(page + len, count - len, "0x%02x", i); - len += snprintf(page + len, count - len, " 0x%08x ", rtw_read32(padapter, i)); + len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) len += snprintf(page + len, count - len, "\n"); } diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 513e9c67f747..2a1b1795f62b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -191,9 +191,9 @@ ReadEFuseByte( /* Check bit 32 read-ready */ retry = 0; - value32 = rtw_read32(Adapter, EFUSE_CTRL); + value32 = usb_read32(Adapter, EFUSE_CTRL); while (!(((value32 >> 24) & 0xff) & 0x80) && (retry < 10000)) { - value32 = rtw_read32(Adapter, EFUSE_CTRL); + value32 = usb_read32(Adapter, EFUSE_CTRL); retry++; } @@ -202,7 +202,7 @@ ReadEFuseByte( /* Designer says that there shall be some delay after ready bit is set, or the */ /* result will always stay on last data we read. */ udelay(50); - value32 = rtw_read32(Adapter, EFUSE_CTRL); + value32 = usb_read32(Adapter, EFUSE_CTRL); *pbuf = (u8)(value32 & 0xff); } diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 1da09363a8c0..9266d8fc37ad 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -76,18 +76,6 @@ u16 _rtw_read16(struct adapter *adapter, u32 addr) return r_val; } -u32 _rtw_read32(struct adapter *adapter, u32 addr) -{ - u32 r_val; - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - u32 (*_read32)(struct adapter *pintfhdl, u32 addr); - _read32 = pintfhdl->io_ops._read32; - - r_val = _read32(adapter, addr); - return r_val; -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index c19926837ec7..77134bc7ff28 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -36,7 +36,7 @@ u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz) val = rtw_read16(padapter, addr); break; case 4: - val = rtw_read32(padapter, addr); + val = usb_read32(padapter, addr); break; default: val = 0xffffffff; @@ -818,7 +818,7 @@ static u32 GetPhyRxPktCounts(struct adapter *pAdapter, u32 selbit) usb_write32(pAdapter, REG_RXERR_RPT, phyrx_set); /* Read packet count */ - count = rtw_read32(pAdapter, REG_RXERR_RPT) & RXERR_COUNTER_MASK; + count = usb_read32(pAdapter, REG_RXERR_RPT) & RXERR_COUNTER_MASK; return count; } @@ -853,7 +853,7 @@ static u32 rtw_GetPSDData(struct adapter *pAdapter, u32 point) int psd_val; - psd_val = rtw_read32(pAdapter, 0x808); + psd_val = usb_read32(pAdapter, 0x808); psd_val &= 0xFFBFFC00; psd_val |= point; @@ -863,7 +863,7 @@ static u32 rtw_GetPSDData(struct adapter *pAdapter, u32 point) usb_write32(pAdapter, 0x808, psd_val); mdelay(1); - psd_val = rtw_read32(pAdapter, 0x8B4); + psd_val = usb_read32(pAdapter, 0x8B4); psd_val &= 0x0000FFFF; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index ebb97e829cfd..2ba92e613cd3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -808,7 +808,7 @@ int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv) break; default: width = 4; - RegRWStruct->value = rtw_read32(Adapter, offset); + RegRWStruct->value = usb_read32(Adapter, offset); break; } RT_TRACE(_module_mp_, _drv_notice_, diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index be4c0944f106..51b246892789 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -203,7 +203,7 @@ int ips_leave(struct adapter *padapter) } } - DBG_88E("==> ips_leave.....LED(0x%08x)...\n", rtw_read32(padapter, 0x4c)); + DBG_88E("==> ips_leave.....LED(0x%08x)...\n", usb_read32(padapter, 0x4c)); pwrpriv->bips_processing = false; pwrpriv->bkeepfwalive = false; diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index 3b846d3577c9..22a35121830b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -36,7 +36,7 @@ u8 sreset_get_wifi_status(struct adapter *padapter) u8 status = WIFI_STATUS_SUCCESS; u32 val32 = 0; - val32 = rtw_read32(padapter, REG_TXDMA_STATUS); + val32 = usb_read32(padapter, REG_TXDMA_STATUS); if (val32 == 0xeaeaeaea) { psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST; } else if (val32 != 0) { diff --git a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c index ea5ba280e3d0..3c651d5c6824 100644 --- a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c +++ b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c @@ -358,19 +358,19 @@ static int odm_ARFBRefresh_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_inf pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0000000d; break; case 12: - MaskFromReg = rtw_read32(adapt, REG_ARFR0); + MaskFromReg = usb_read32(adapt, REG_ARFR0); pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; break; case 13: - MaskFromReg = rtw_read32(adapt, REG_ARFR1); + MaskFromReg = usb_read32(adapt, REG_ARFR1); pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; break; case 14: - MaskFromReg = rtw_read32(adapt, REG_ARFR2); + MaskFromReg = usb_read32(adapt, REG_ARFR2); pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; break; case 15: - MaskFromReg = rtw_read32(adapt, REG_ARFR3); + MaskFromReg = usb_read32(adapt, REG_ARFR3); pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; break; default: diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 514d325f159f..c4ee978d102a 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -821,7 +821,7 @@ static void _PHY_SaveMACRegisters( for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) { MACBackup[i] = rtw_read8(adapt, MACReg[i]); } - MACBackup[i] = rtw_read32(adapt, MACReg[i]); + MACBackup[i] = usb_read32(adapt, MACReg[i]); } static void reload_adda_reg(struct adapter *adapt, u32 *ADDAReg, u32 *ADDABackup, u32 RegiesterNum) diff --git a/drivers/staging/rtl8188eu/hal/odm.c b/drivers/staging/rtl8188eu/hal/odm.c index 11101f355569..60dbde70fc4a 100644 --- a/drivers/staging/rtl8188eu/hal/odm.c +++ b/drivers/staging/rtl8188eu/hal/odm.c @@ -1291,10 +1291,10 @@ void ODM_EdcaTurboInit(struct odm_dm_struct *pDM_Odm) pDM_Odm->DM_EDCA_Table.bIsCurRDLState = false; Adapter->recvpriv.bIsAnyNonBEPkts = false; - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial VO PARAM: 0x%x\n", rtw_read32(Adapter, ODM_EDCA_VO_PARAM))); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial VI PARAM: 0x%x\n", rtw_read32(Adapter, ODM_EDCA_VI_PARAM))); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial BE PARAM: 0x%x\n", rtw_read32(Adapter, ODM_EDCA_BE_PARAM))); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial BK PARAM: 0x%x\n", rtw_read32(Adapter, ODM_EDCA_BK_PARAM))); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial VO PARAM: 0x%x\n", usb_read32(Adapter, ODM_EDCA_VO_PARAM))); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial VI PARAM: 0x%x\n", usb_read32(Adapter, ODM_EDCA_VI_PARAM))); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial BE PARAM: 0x%x\n", usb_read32(Adapter, ODM_EDCA_BE_PARAM))); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("Orginial BK PARAM: 0x%x\n", usb_read32(Adapter, ODM_EDCA_BK_PARAM))); } /* ODM_InitEdcaTurbo */ void odm_EdcaTurboCheck(struct odm_dm_struct *pDM_Odm) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 71a2417ca664..7a7d7043dda1 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -246,8 +246,8 @@ static void efuse_read_phymap_from_txpktbuf( msleep(1); } - lo32 = rtw_read32(adapter, REG_PKTBUF_DBG_DATA_L); - hi32 = rtw_read32(adapter, REG_PKTBUF_DBG_DATA_H); + lo32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_L); + hi32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_H); if (i == 0) { u8 lenc[2]; @@ -376,12 +376,12 @@ void rtw_IOL_cmd_tx_pkt_buf_dump(struct adapter *Adapter, int data_len) msleep(1); loop = 0; do { - rstatus = (reg_140 = rtw_read32(Adapter, REG_PKTBUF_DBG_CTRL)&BIT24); + rstatus = (reg_140 = usb_read32(Adapter, REG_PKTBUF_DBG_CTRL)&BIT24); if (rstatus) { - fifo_data = rtw_read32(Adapter, REG_PKTBUF_DBG_DATA_L); + fifo_data = usb_read32(Adapter, REG_PKTBUF_DBG_DATA_L); memcpy(pbuf+(addr*8), &fifo_data, 4); - fifo_data = rtw_read32(Adapter, REG_PKTBUF_DBG_DATA_H); + fifo_data = usb_read32(Adapter, REG_PKTBUF_DBG_DATA_H); memcpy(pbuf+(addr*8+4), &fifo_data, 4); } msleep(1); @@ -549,7 +549,7 @@ static s32 _FWFreeToGo(struct adapter *padapter) /* polling CheckSum report */ do { - value32 = rtw_read32(padapter, REG_MCUFWDL); + value32 = usb_read32(padapter, REG_MCUFWDL); if (value32 & FWDL_ChkSum_rpt) break; } while (counter++ < POLLING_READY_TIMEOUT_COUNT); @@ -560,7 +560,7 @@ static s32 _FWFreeToGo(struct adapter *padapter) } DBG_88E("%s: Checksum report OK! REG_MCUFWDL:0x%08x\n", __func__, value32); - value32 = rtw_read32(padapter, REG_MCUFWDL); + value32 = usb_read32(padapter, REG_MCUFWDL); value32 |= MCUFWDL_RDY; value32 &= ~WINTINI_RDY; usb_write32(padapter, REG_MCUFWDL, value32); @@ -570,7 +570,7 @@ static s32 _FWFreeToGo(struct adapter *padapter) /* polling for FW ready */ counter = 0; do { - value32 = rtw_read32(padapter, REG_MCUFWDL); + value32 = usb_read32(padapter, REG_MCUFWDL); if (value32 & WINTINI_RDY) { DBG_88E("%s: Polling FW ready success!! REG_MCUFWDL:0x%08x\n", __func__, value32); return _SUCCESS; @@ -1743,7 +1743,7 @@ static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter) pHalData = GET_HAL_DATA(padapter); - value32 = rtw_read32(padapter, REG_SYS_CFG); + value32 = usb_read32(padapter, REG_SYS_CFG); ChipVersion.ICType = CHIP_8188E; ChipVersion.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP); @@ -1907,7 +1907,7 @@ static s32 _LLTWrite(struct adapter *padapter, u32 address, u32 data) /* polling */ do { - value = rtw_read32(padapter, LLTReg); + value = usb_read32(padapter, LLTReg); if (_LLT_NO_ACTIVE == _LLT_OP_VALUE(value)) break; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index e18a0106c099..2f53da85b24a 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -94,7 +94,7 @@ rtl8188e_PHY_QueryBBReg( { u32 ReturnValue = 0, OriginalValue, BitShift; - OriginalValue = rtw_read32(Adapter, RegAddr); + OriginalValue = usb_read32(Adapter, RegAddr); BitShift = phy_CalculateBitShift(BitMask); ReturnValue = (OriginalValue & BitMask) >> BitShift; return ReturnValue; @@ -124,7 +124,7 @@ void rtl8188e_PHY_SetBBReg(struct adapter *Adapter, u32 RegAddr, u32 BitMask, u3 u32 OriginalValue, BitShift; if (BitMask != bMaskDWord) { /* if not "double word" write */ - OriginalValue = rtw_read32(Adapter, RegAddr); + OriginalValue = usb_read32(Adapter, RegAddr); BitShift = phy_CalculateBitShift(BitMask); Data = ((OriginalValue & (~BitMask)) | (Data << BitShift)); } diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index ef458177dfd4..80600bd2d429 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -341,7 +341,7 @@ static void _InitNetworkType(struct adapter *Adapter) { u32 value32; - value32 = rtw_read32(Adapter, REG_CR); + value32 = usb_read32(Adapter, REG_CR); /* TODO: use the other function to set network type */ value32 = (value32 & ~MASK_NETTYPE) | _NETTYPE(NT_LINK_AP); @@ -385,7 +385,7 @@ static void _InitAdaptiveCtrl(struct adapter *Adapter) u32 value32; /* Response Rate Set */ - value32 = rtw_read32(Adapter, REG_RRSR); + value32 = usb_read32(Adapter, REG_RRSR); value32 &= ~RATE_BITMAP_ALL; value32 |= RATE_RRSR_CCK_ONLY_1M; usb_write32(Adapter, REG_RRSR, value32); @@ -469,7 +469,7 @@ static void usb_AggSettingTxUpdate(struct adapter *Adapter) haldata->UsbTxAggMode = false; if (haldata->UsbTxAggMode) { - value32 = rtw_read32(Adapter, REG_TDECTRL); + value32 = usb_read32(Adapter, REG_TDECTRL); value32 = value32 & ~(BLK_DESC_NUM_MASK << BLK_DESC_NUM_SHIFT); value32 |= ((haldata->UsbTxAggDescNum & BLK_DESC_NUM_MASK) << BLK_DESC_NUM_SHIFT); @@ -633,7 +633,7 @@ static void _InitAntenna_Selection(struct adapter *Adapter) return; DBG_88E("==> %s ....\n", __func__); - usb_write32(Adapter, REG_LEDCFG0, rtw_read32(Adapter, REG_LEDCFG0)|BIT23); + usb_write32(Adapter, REG_LEDCFG0, usb_read32(Adapter, REG_LEDCFG0)|BIT23); PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, BIT13, 0x01); if (PHY_QueryBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300) == Antenna_A) @@ -931,7 +931,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_LCK); usb_write8(Adapter, REG_USB_HRPWM, 0); /* ack for xmit mgmt frames. */ - usb_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); + usb_write32(Adapter, REG_FWHW_TXQ_CTRL, usb_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); exit: HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_END); @@ -1421,11 +1421,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) break; case HW_VAR_CHECK_BSSID: if (*((u8 *)val)) { - usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); } else { u32 val32; - val32 = rtw_read32(Adapter, REG_RCR); + val32 = usb_read32(Adapter, REG_RCR); val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); @@ -1446,7 +1446,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) case HW_VAR_MLME_SITESURVEY: if (*((u8 *)val)) { /* under sitesurvey */ /* config RCR to receive different BSSID & not to receive data frame */ - u32 v = rtw_read32(Adapter, REG_RCR); + u32 v = usb_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_BCN); usb_write32(Adapter, REG_RCR, v); /* reject all data frame */ @@ -1471,14 +1471,14 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { - usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); } else { if (Adapter->in_cta_test) { - u32 v = rtw_read32(Adapter, REG_RCR); + u32 v = usb_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ usb_write32(Adapter, REG_RCR, v); } else { - usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); } } } @@ -1494,11 +1494,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); if (Adapter->in_cta_test) { - u32 v = rtw_read32(Adapter, REG_RCR); + u32 v = usb_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ usb_write32(Adapter, REG_RCR, v); } else { - usb_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); + usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN); } if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) @@ -1805,9 +1805,9 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) if (!pwrpriv->bkeepfwalive) { /* RX DMA stop */ - usb_write32(Adapter, REG_RXPKT_NUM, (rtw_read32(Adapter, REG_RXPKT_NUM)|RW_RELEASE_EN)); + usb_write32(Adapter, REG_RXPKT_NUM, (usb_read32(Adapter, REG_RXPKT_NUM)|RW_RELEASE_EN)); do { - if (!(rtw_read32(Adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) + if (!(usb_read32(Adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) break; } while (trycnt--); if (trycnt == 0) @@ -1875,7 +1875,7 @@ static void GetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) val[0] = true; } else { u32 valRCR; - valRCR = rtw_read32(Adapter, REG_RCR); + valRCR = usb_read32(Adapter, REG_RCR); valRCR &= 0x00070000; if (valRCR) val[0] = false; @@ -1894,7 +1894,7 @@ static void GetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) *val = haldata->bMacPwrCtrlOn; break; case HW_VAR_CHK_HI_QUEUE_EMPTY: - *val = ((rtw_read32(Adapter, REG_HGQ_INFORMATION)&0x0000ff00) == 0) ? true : false; + *val = ((usb_read32(Adapter, REG_HGQ_INFORMATION)&0x0000ff00) == 0) ? true : false; break; default: break; @@ -2169,7 +2169,7 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) usb_write8(adapt, REG_SLOT, 0x09); - value32 = rtw_read32(adapt, REG_TCR); + value32 = usb_read32(adapt, REG_TCR); value32 &= ~TSFRST; usb_write32(adapt, REG_TCR, value32); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index c38cb1152838..9fd1c6630942 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -158,7 +158,7 @@ static u16 usb_read16(struct adapter *adapter, u32 addr) return (u16)(le32_to_cpu(data)&0xffff); } -static u32 usb_read32(struct adapter *adapter, u32 addr) +u32 usb_read32(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -668,5 +668,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) _rtw_memset((u8 *)pops, 0, sizeof(struct _io_ops)); pops->_read8 = &usb_read8; pops->_read16 = &usb_read16; - pops->_read32 = &usb_read32; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 6c956f4c30e7..a48c5f4bf06d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -46,7 +46,6 @@ struct intf_hdl; struct _io_ops { u8 (*_read8)(struct adapter *pintfhdl, u32 addr); u16 (*_read16)(struct adapter *pintfhdl, u32 addr); - u32 (*_read32)(struct adapter *pintfhdl, u32 addr); }; struct io_req { @@ -80,7 +79,7 @@ struct io_priv { u8 _rtw_read8(struct adapter *adapter, u32 addr); u16 _rtw_read16(struct adapter *adapter, u32 addr); -u32 _rtw_read32(struct adapter *adapter, u32 addr); +u32 usb_read32(struct adapter *adapter, u32 addr); u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_read_port_cancel(struct adapter *adapter); @@ -94,7 +93,6 @@ void usb_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) -#define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 92e07a5f4fdd..5119da30a716 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2187,7 +2187,7 @@ static int rtw_wx_read32(struct net_device *dev, sprintf(extra, "0x%04X", data32); break; case 4: - data32 = rtw_read32(padapter, addr); + data32 = usb_read32(padapter, addr); sprintf(extra, "0x%08X", data32); break; default: @@ -2359,7 +2359,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le RegRWStruct->value = rtw_read16(padapter, RegRWStruct->offset); break; case 4: - RegRWStruct->value = rtw_read32(padapter, RegRWStruct->offset); + RegRWStruct->value = usb_read32(padapter, RegRWStruct->offset); break; default: break; @@ -3946,12 +3946,12 @@ static int rtw_cta_test_start(struct net_device *dev, padapter->in_cta_test = 0; if (padapter->in_cta_test) { - u32 v = rtw_read32(padapter, REG_RCR); + u32 v = usb_read32(padapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ usb_write32(padapter, REG_RCR, v); DBG_88E("enable RCR_ADF\n"); } else { - u32 v = rtw_read32(padapter, REG_RCR); + u32 v = usb_read32(padapter, REG_RCR); v |= RCR_CBSSID_DATA | RCR_CBSSID_BCN;/* RCR_ADF */ usb_write32(padapter, REG_RCR, v); DBG_88E("disable RCR_ADF\n"); @@ -4025,14 +4025,14 @@ static void mac_reg_dump(struct adapter *padapter) for (i = 0x0; i < 0x300; i += 4) { if (j%4 == 1) pr_info("0x%02x", i); - pr_info(" 0x%08x ", rtw_read32(padapter, i)); + pr_info(" 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) pr_info("\n"); } for (i = 0x400; i < 0x800; i += 4) { if (j%4 == 1) pr_info("0x%02x", i); - pr_info(" 0x%08x ", rtw_read32(padapter, i)); + pr_info(" 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) pr_info("\n"); } @@ -4046,7 +4046,7 @@ static void bb_reg_dump(struct adapter *padapter) if (j%4 == 1) pr_info("0x%02x", i); - pr_info(" 0x%08x ", rtw_read32(padapter, i)); + pr_info(" 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) pr_info("\n"); } @@ -4115,7 +4115,7 @@ static int rtw_dbg_port(struct net_device *dev, DBG_88E("rtw_read16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); break; case 4: - DBG_88E("rtw_read32(0x%x) = 0x%08x\n", arg, rtw_read32(padapter, arg)); + DBG_88E("usb_read32(0x%x) = 0x%08x\n", arg, usb_read32(padapter, arg)); break; } break; @@ -4131,7 +4131,7 @@ static int rtw_dbg_port(struct net_device *dev, break; case 4: usb_write32(padapter, arg, extra_arg); - DBG_88E("usb_write32(0x%x) = 0x%08x\n", arg, rtw_read32(padapter, arg)); + DBG_88E("usb_write32(0x%x) = 0x%08x\n", arg, usb_read32(padapter, arg)); break; } break; @@ -4284,7 +4284,7 @@ static int rtw_dbg_port(struct net_device *dev, if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) ret = -EPERM; - final = rtw_read32(padapter, reg); + final = usb_read32(padapter, reg); if (start_value+write_num-1 == final) DBG_88E("continuous IOL_CMD_WD_REG to 0x%x %u times Success, start:%u, final:%u\n", reg, write_num, start_value, final); @@ -4586,30 +4586,30 @@ static int rtw_dbg_port(struct net_device *dev, DBG_88E("rd(0xc58) = 0x%x\n", rtw_read8(padapter, 0xc58)); break; case 0xff: - DBG_88E("dbg(0x210) = 0x%x\n", rtw_read32(padapter, 0x210)); - DBG_88E("dbg(0x608) = 0x%x\n", rtw_read32(padapter, 0x608)); - DBG_88E("dbg(0x280) = 0x%x\n", rtw_read32(padapter, 0x280)); - DBG_88E("dbg(0x284) = 0x%x\n", rtw_read32(padapter, 0x284)); - DBG_88E("dbg(0x288) = 0x%x\n", rtw_read32(padapter, 0x288)); + DBG_88E("dbg(0x210) = 0x%x\n", usb_read32(padapter, 0x210)); + DBG_88E("dbg(0x608) = 0x%x\n", usb_read32(padapter, 0x608)); + DBG_88E("dbg(0x280) = 0x%x\n", usb_read32(padapter, 0x280)); + DBG_88E("dbg(0x284) = 0x%x\n", usb_read32(padapter, 0x284)); + DBG_88E("dbg(0x288) = 0x%x\n", usb_read32(padapter, 0x288)); - DBG_88E("dbg(0x664) = 0x%x\n", rtw_read32(padapter, 0x664)); + DBG_88E("dbg(0x664) = 0x%x\n", usb_read32(padapter, 0x664)); DBG_88E("\n"); - DBG_88E("dbg(0x430) = 0x%x\n", rtw_read32(padapter, 0x430)); - DBG_88E("dbg(0x438) = 0x%x\n", rtw_read32(padapter, 0x438)); + DBG_88E("dbg(0x430) = 0x%x\n", usb_read32(padapter, 0x430)); + DBG_88E("dbg(0x438) = 0x%x\n", usb_read32(padapter, 0x438)); - DBG_88E("dbg(0x440) = 0x%x\n", rtw_read32(padapter, 0x440)); + DBG_88E("dbg(0x440) = 0x%x\n", usb_read32(padapter, 0x440)); - DBG_88E("dbg(0x458) = 0x%x\n", rtw_read32(padapter, 0x458)); + DBG_88E("dbg(0x458) = 0x%x\n", usb_read32(padapter, 0x458)); - DBG_88E("dbg(0x484) = 0x%x\n", rtw_read32(padapter, 0x484)); - DBG_88E("dbg(0x488) = 0x%x\n", rtw_read32(padapter, 0x488)); + DBG_88E("dbg(0x484) = 0x%x\n", usb_read32(padapter, 0x484)); + DBG_88E("dbg(0x488) = 0x%x\n", usb_read32(padapter, 0x488)); - DBG_88E("dbg(0x444) = 0x%x\n", rtw_read32(padapter, 0x444)); - DBG_88E("dbg(0x448) = 0x%x\n", rtw_read32(padapter, 0x448)); - DBG_88E("dbg(0x44c) = 0x%x\n", rtw_read32(padapter, 0x44c)); - DBG_88E("dbg(0x450) = 0x%x\n", rtw_read32(padapter, 0x450)); + DBG_88E("dbg(0x444) = 0x%x\n", usb_read32(padapter, 0x444)); + DBG_88E("dbg(0x448) = 0x%x\n", usb_read32(padapter, 0x448)); + DBG_88E("dbg(0x44c) = 0x%x\n", usb_read32(padapter, 0x44c)); + DBG_88E("dbg(0x450) = 0x%x\n", usb_read32(padapter, 0x450)); break; } break; @@ -6530,7 +6530,7 @@ static int rtw_mp_read_reg(struct net_device *dev, break; case 'd': /* 4 bytes */ - sprintf(data, "%08x", rtw_read32(padapter, addr)); + sprintf(data, "%08x", usb_read32(padapter, addr)); /* add read data format blank */ for (i = 0; i <= strlen(data); i++) { if (i%2 == 0) { @@ -7253,14 +7253,14 @@ static int rtw_mp_dump(struct net_device *dev, for (i = 0x0; i < 0x300; i += 4) { if (j%4 == 1) DBG_88E("0x%02x", i); - DBG_88E(" 0x%08x ", rtw_read32(padapter, i)); + DBG_88E(" 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) DBG_88E("\n"); } for (i = 0x400; i < 0x1000; i += 4) { if (j%4 == 1) DBG_88E("0x%02x", i); - DBG_88E(" 0x%08x ", rtw_read32(padapter, i)); + DBG_88E(" 0x%08x ", usb_read32(padapter, i)); if ((j++)%4 == 0) DBG_88E("\n"); } -- cgit From 551a397227e34e9f895182946365f63fbd8e4b8d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:35 +0530 Subject: staging: rtl8188eu: Remove function _rtw_read16() _rtw_read16() is a wrapper function, being used to call usb_read16(). Call usb_read16() directly and drop _rtw_read16(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_io.c | 12 ------------ drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 8 ++++---- drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 2 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 10 +++++----- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +-- drivers/staging/rtl8188eu/include/rtw_io.h | 4 +--- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 12 ++++++------ 10 files changed, 21 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index 615a090562c9..bf39b6439314 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -101,7 +101,7 @@ int proc_get_read_reg(char *page, char **start, len += snprintf(page + len, count - len, "rtw_read8(0x%x)=0x%x\n", proc_get_read_addr, rtw_read8(padapter, proc_get_read_addr)); break; case 2: - len += snprintf(page + len, count - len, "rtw_read16(0x%x)=0x%x\n", proc_get_read_addr, rtw_read16(padapter, proc_get_read_addr)); + len += snprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr)); break; case 4: len += snprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr)); diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 9266d8fc37ad..3ce1134fdaa0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -64,18 +64,6 @@ u8 _rtw_read8(struct adapter *adapter, u32 addr) return r_val; } -u16 _rtw_read16(struct adapter *adapter, u32 addr) -{ - u16 r_val; - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - u16 (*_read16)(struct adapter *pintfhdl, u32 addr); - _read16 = pintfhdl->io_ops._read16; - - r_val = _read16(adapter, addr); - return r_val; -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 77134bc7ff28..2f3d0ab1f4f2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -33,7 +33,7 @@ u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz) val = rtw_read8(padapter, addr); break; case 2: - val = rtw_read16(padapter, addr); + val = usb_read16(padapter, addr); break; case 4: val = usb_read32(padapter, addr); diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index 2ba92e613cd3..4f6e7e840c26 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -804,7 +804,7 @@ int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv) RegRWStruct->value = rtw_read8(Adapter, offset); break; case 2: - RegRWStruct->value = rtw_read16(Adapter, offset); + RegRWStruct->value = usb_read16(Adapter, offset); break; default: width = 4; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 7a7d7043dda1..bcce68848017 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -763,20 +763,20 @@ hal_EfusePowerSwitch_RTL8188E( usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); /* 1.2V Power: From VDDON with Power Cut(0x0000h[15]), defualt valid */ - tmpV16 = rtw_read16(pAdapter, REG_SYS_ISO_CTRL); + tmpV16 = usb_read16(pAdapter, REG_SYS_ISO_CTRL); if (!(tmpV16 & PWC_EV12V)) { tmpV16 |= PWC_EV12V; usb_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16); } /* Reset: 0x0000h[28], default valid */ - tmpV16 = rtw_read16(pAdapter, REG_SYS_FUNC_EN); + tmpV16 = usb_read16(pAdapter, REG_SYS_FUNC_EN); if (!(tmpV16 & FEN_ELDR)) { tmpV16 |= FEN_ELDR; usb_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16); } /* Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock from ANA, default valid */ - tmpV16 = rtw_read16(pAdapter, REG_SYS_CLKR); + tmpV16 = usb_read16(pAdapter, REG_SYS_CLKR); if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) { tmpV16 |= (LOADER_CLK_EN | ANA8M); usb_write16(pAdapter, REG_SYS_CLKR, tmpV16); @@ -1882,7 +1882,7 @@ u8 GetEEPROMSize8188E(struct adapter *padapter) u8 size = 0; u32 cr; - cr = rtw_read16(padapter, REG_9346CR); + cr = usb_read16(padapter, REG_9346CR); /* 6: EEPROM used is 93C46, 4: boot from E-Fuse. */ size = (cr & BOOT_FROM_EEPROM) ? 6 : 4; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 2f53da85b24a..868fa688a239 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -603,7 +603,7 @@ PHY_BBConfig8188E( /* Enable BB and RF */ - RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN); + RegVal = usb_read16(Adapter, REG_SYS_FUNC_EN); usb_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1)); /* 20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF. */ diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 80600bd2d429..4f4bf7f452f9 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -120,7 +120,7 @@ static u32 rtl8188eu_InitPowerOn(struct adapter *adapt) usb_write16(adapt, REG_CR, 0x00); /* suggseted by zhouzhou, by page, 20111230 */ /* Enable MAC DMA/WMAC/SCHEDULE/SEC block */ - value16 = rtw_read16(adapt, REG_CR); + value16 = usb_read16(adapt, REG_CR); value16 |= (HCI_TXDMA_EN | HCI_RXDMA_EN | TXDMA_EN | RXDMA_EN | PROTOCOL_EN | SCHEDULE_EN | ENSEC | CALTMR_EN); /* for SDIO - Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31. */ @@ -221,7 +221,7 @@ static void _InitNormalChipRegPriority(struct adapter *Adapter, u16 beQ, u16 bkQ, u16 viQ, u16 voQ, u16 mgtQ, u16 hiQ) { - u16 value16 = (rtw_read16(Adapter, REG_TRXDMA_CTRL) & 0x7); + u16 value16 = (usb_read16(Adapter, REG_TRXDMA_CTRL) & 0x7); value16 |= _TXDMA_BEQ_MAP(beQ) | _TXDMA_BKQ_MAP(bkQ) | _TXDMA_VIQ_MAP(viQ) | _TXDMA_VOQ_MAP(voQ) | @@ -823,7 +823,7 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter) /* Init CR MACTXEN, MACRXEN after setting RxFF boundary REG_TRXFF_BNDY to patch */ /* Hw bug which Hw initials RxFF boundary size to a value which is larger than the real Rx buffer size in 88E. */ /* Enable MACTXEN/MACRXEN block */ - value16 = rtw_read16(Adapter, REG_CR); + value16 = usb_read16(Adapter, REG_CR); value16 |= (MACTXEN | MACRXEN); usb_write8(Adapter, REG_CR, value16); @@ -905,7 +905,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM); usb_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); /* enable tx DMA to drop the redundate data of packet */ - usb_write16(Adapter, REG_TXDMA_OFFSET_CHK, (rtw_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); + usb_write16(Adapter, REG_TXDMA_OFFSET_CHK, (usb_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_IQK); /* 2010/08/26 MH Merge from 8192CE. */ @@ -1801,7 +1801,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write8(Adapter, REG_TXPAUSE, 0xff); /* keep sn */ - Adapter->xmitpriv.nqos_ssn = rtw_read16(Adapter, REG_NQOS_SEQ); + Adapter->xmitpriv.nqos_ssn = usb_read16(Adapter, REG_NQOS_SEQ); if (!pwrpriv->bkeepfwalive) { /* RX DMA stop */ diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 9fd1c6630942..d5d92881d960 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -139,7 +139,7 @@ static u8 usb_read8(struct adapter *adapter, u32 addr) } -static u16 usb_read16(struct adapter *adapter, u32 addr) +u16 usb_read16(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -667,5 +667,4 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops) { _rtw_memset((u8 *)pops, 0, sizeof(struct _io_ops)); pops->_read8 = &usb_read8; - pops->_read16 = &usb_read16; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index a48c5f4bf06d..63b1ff0a9faa 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -45,7 +45,6 @@ struct intf_hdl; struct _io_ops { u8 (*_read8)(struct adapter *pintfhdl, u32 addr); - u16 (*_read16)(struct adapter *pintfhdl, u32 addr); }; struct io_req { @@ -78,7 +77,7 @@ struct io_priv { }; u8 _rtw_read8(struct adapter *adapter, u32 addr); -u16 _rtw_read16(struct adapter *adapter, u32 addr); +u16 usb_read16(struct adapter *adapter, u32 addr); u32 usb_read32(struct adapter *adapter, u32 addr); u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_read_port_cancel(struct adapter *adapter); @@ -92,7 +91,6 @@ u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_write_port_cancel(struct adapter *adapter); #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) -#define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 5119da30a716..fd888cba0d23 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2183,7 +2183,7 @@ static int rtw_wx_read32(struct net_device *dev, sprintf(extra, "0x%02X", data32); break; case 2: - data32 = rtw_read16(padapter, addr); + data32 = usb_read16(padapter, addr); sprintf(extra, "0x%04X", data32); break; case 4: @@ -2356,7 +2356,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le RegRWStruct->value = rtw_read8(padapter, RegRWStruct->offset); break; case 2: - RegRWStruct->value = rtw_read16(padapter, RegRWStruct->offset); + RegRWStruct->value = usb_read16(padapter, RegRWStruct->offset); break; case 4: RegRWStruct->value = usb_read32(padapter, RegRWStruct->offset); @@ -4112,7 +4112,7 @@ static int rtw_dbg_port(struct net_device *dev, DBG_88E("rtw_read8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); break; case 2: - DBG_88E("rtw_read16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); + DBG_88E("usb_read16(0x%x) = 0x%04x\n", arg, usb_read16(padapter, arg)); break; case 4: DBG_88E("usb_read32(0x%x) = 0x%08x\n", arg, usb_read32(padapter, arg)); @@ -4127,7 +4127,7 @@ static int rtw_dbg_port(struct net_device *dev, break; case 2: usb_write16(padapter, arg, extra_arg); - DBG_88E("usb_write16(0x%x) = 0x%04x\n", arg, rtw_read16(padapter, arg)); + DBG_88E("usb_write16(0x%x) = 0x%04x\n", arg, usb_read16(padapter, arg)); break; case 4: usb_write32(padapter, arg, extra_arg); @@ -4256,7 +4256,7 @@ static int rtw_dbg_port(struct net_device *dev, if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) ret = -EPERM; - final = rtw_read16(padapter, reg); + final = usb_read16(padapter, reg); if (start_value+write_num-1 == final) DBG_88E("continuous IOL_CMD_WW_REG to 0x%x %u times Success, start:%u, final:%u\n", reg, write_num, start_value, final); else @@ -6499,7 +6499,7 @@ static int rtw_mp_read_reg(struct net_device *dev, break; case 'w': /* 2 bytes */ - sprintf(data, "%04x\n", rtw_read16(padapter, addr)); + sprintf(data, "%04x\n", usb_read16(padapter, addr)); for (i = 0; i <= strlen(data); i++) { if (i%2 == 0) { tmp[j] = ' '; -- cgit From c7b2e995a1226a09a30ad0f9dd6e922f21b3dd28 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:36 +0530 Subject: staging: rtl8188eu: Remove function _rtw_read8() _rtw_read8() is a wrapper function, being used to call usb_read8(). Call usb_read8() directly and drop _rtw_read8(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_efuse.c | 24 +++--- drivers/staging/rtl8188eu/core/rtw_io.c | 13 ---- drivers/staging/rtl8188eu/core/rtw_mp.c | 6 +- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 6 +- drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c | 4 +- drivers/staging/rtl8188eu/hal/hal_com.c | 8 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 10 +-- drivers/staging/rtl8188eu/hal/rtl8188e_dm.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 42 +++++------ drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c | 4 +- drivers/staging/rtl8188eu/hal/rtl8188eu_led.c | 6 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 90 +++++++++++------------ drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 3 +- drivers/staging/rtl8188eu/include/rtw_io.h | 4 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 22 +++--- 17 files changed, 116 insertions(+), 132 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index bf39b6439314..acd6d45ba79a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -98,7 +98,7 @@ int proc_get_read_reg(char *page, char **start, switch (proc_get_read_len) { case 1: - len += snprintf(page + len, count - len, "rtw_read8(0x%x)=0x%x\n", proc_get_read_addr, rtw_read8(padapter, proc_get_read_addr)); + len += snprintf(page + len, count - len, "usb_read8(0x%x)=0x%x\n", proc_get_read_addr, usb_read8(padapter, proc_get_read_addr)); break; case 2: len += snprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr)); diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 2a1b1795f62b..1da9d1e8963d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -182,11 +182,11 @@ ReadEFuseByte( /* Write Address */ usb_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff)); - readbyte = rtw_read8(Adapter, EFUSE_CTRL+2); + readbyte = usb_read8(Adapter, EFUSE_CTRL+2); usb_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc)); /* Write bit 32 0 */ - readbyte = rtw_read8(Adapter, EFUSE_CTRL+3); + readbyte = usb_read8(Adapter, EFUSE_CTRL+3); usb_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f)); /* Check bit 32 read-ready */ @@ -264,27 +264,27 @@ u8 EFUSE_Read1Byte(struct adapter *Adapter, u16 Address) /* Write E-fuse Register address bit0~7 */ temp = Address & 0xFF; usb_write8(Adapter, EFUSE_CTRL+1, temp); - Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+2); + Bytetemp = usb_read8(Adapter, EFUSE_CTRL+2); /* Write E-fuse Register address bit8~9 */ temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC); usb_write8(Adapter, EFUSE_CTRL+2, temp); /* Write 0x30[31]= 0 */ - Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3); + Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); temp = Bytetemp & 0x7F; usb_write8(Adapter, EFUSE_CTRL+3, temp); /* Wait Write-ready (0x30[31]= 1) */ - Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3); + Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); while (!(Bytetemp & 0x80)) { - Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3); + Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); k++; if (k == 1000) { k = 0; break; } } - data = rtw_read8(Adapter, EFUSE_CTRL); + data = usb_read8(Adapter, EFUSE_CTRL); return data; } else { return 0xFF; @@ -306,14 +306,14 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data, bool pseudo) /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr & 0xff)); usb_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) & 0x03)) | - (rtw_read8(pAdapter, EFUSE_CTRL+2) & 0xFC)); + (usb_read8(pAdapter, EFUSE_CTRL+2) & 0xFC)); usb_write8(pAdapter, EFUSE_CTRL+3, 0x72);/* read cmd */ - while (!(0x80 & rtw_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) + while (!(0x80 & usb_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) tmpidx++; if (tmpidx < 100) { - *data = rtw_read8(pAdapter, EFUSE_CTRL); + *data = usb_read8(pAdapter, EFUSE_CTRL); result = true; } else { *data = 0xff; @@ -337,13 +337,13 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); usb_write8(pAdapter, EFUSE_CTRL+2, - (rtw_read8(pAdapter, EFUSE_CTRL+2) & 0xFC) | + (usb_read8(pAdapter, EFUSE_CTRL+2) & 0xFC) | (u8)((addr>>8) & 0x03)); usb_write8(pAdapter, EFUSE_CTRL, data);/* data */ usb_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */ - while ((0x80 & rtw_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) + while ((0x80 & usb_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx < 100)) tmpidx++; if (tmpidx < 100) diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 3ce1134fdaa0..25b0a875d4a0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -51,19 +51,6 @@ jackson@realtek.com.tw #define rtw_cpu_to_le16(val) cpu_to_le16(val) #define rtw_cpu_to_le32(val) cpu_to_le32(val) - -u8 _rtw_read8(struct adapter *adapter, u32 addr) -{ - u8 r_val; - struct io_priv *pio_priv = &adapter->iopriv; - struct intf_hdl *pintfhdl = &(pio_priv->intf); - u8 (*_read8)(struct adapter *pintfhdl, u32 addr); - - _read8 = pintfhdl->io_ops._read8; - r_val = _read8(adapter, addr); - return r_val; -} - int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) { struct io_priv *piopriv = &padapter->iopriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 2f3d0ab1f4f2..fa8704d2d483 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -30,7 +30,7 @@ u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz) switch (sz) { case 1: - val = rtw_read8(padapter, addr); + val = usb_read8(padapter, addr); break; case 2: val = usb_read16(padapter, addr); @@ -302,7 +302,7 @@ static void disable_dm(struct adapter *padapter) /* 3 1. disable firmware dynamic mechanism */ /* disable Power Training, Rate Adaptive */ - v8 = rtw_read8(padapter, REG_BCN_CTRL); + v8 = usb_read8(padapter, REG_BCN_CTRL); v8 &= ~EN_BCN_FUNCTION; usb_write8(padapter, REG_BCN_CTRL, v8); @@ -421,7 +421,7 @@ end_of_mp_start_test: if (res == _SUCCESS) { /* set MSR to WIFI_FW_ADHOC_STATE */ - val8 = rtw_read8(padapter, MSR) & 0xFC; /* 0x0102 */ + val8 = usb_read8(padapter, MSR) & 0xFC; /* 0x0102 */ val8 |= WIFI_FW_ADHOC_STATE; usb_write8(padapter, MSR, val8); /* Link in ad hoc network */ } diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index 4f6e7e840c26..c06cd82020d2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -801,7 +801,7 @@ int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv) switch (width) { case 1: - RegRWStruct->value = rtw_read8(Adapter, offset); + RegRWStruct->value = usb_read8(Adapter, offset); break; case 2: RegRWStruct->value = usb_read16(Adapter, offset); diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index c4ee978d102a..3a7d35d2f08b 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -819,7 +819,7 @@ static void _PHY_SaveMACRegisters( struct odm_dm_struct *dm_odm = &pHalData->odmpriv; ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("Save MAC parameters.\n")); for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) { - MACBackup[i] = rtw_read8(adapt, MACReg[i]); + MACBackup[i] = usb_read8(adapt, MACReg[i]); } MACBackup[i] = usb_read32(adapt, MACReg[i]); } @@ -1205,7 +1205,7 @@ static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) u32 RF_Amode = 0, RF_Bmode = 0, LC_Cal; /* Check continuous TX and Packet TX */ - tmpreg = rtw_read8(adapt, 0xd03); + tmpreg = usb_read8(adapt, 0xd03); if ((tmpreg&0x70) != 0) /* Deal with contisuous TX case */ usb_write8(adapt, 0xd03, tmpreg&0x8F); /* disable all continuous TX */ @@ -1446,7 +1446,7 @@ static void phy_setrfpathswitch_8188e(struct adapter *adapt, bool main, bool is2 { if (!adapt->hw_init_completed) { u8 u1btmp; - u1btmp = rtw_read8(adapt, REG_LEDCFG2) | BIT7; + u1btmp = usb_read8(adapt, REG_LEDCFG2) | BIT7; usb_write8(adapt, REG_LEDCFG2, u1btmp); PHY_SetBBReg(adapt, rFPGA0_XAB_RFParameter, BIT13, 0x01); } diff --git a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c index d90c5442f0a5..1808d359d610 100644 --- a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c +++ b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c @@ -80,7 +80,7 @@ u8 HalPwrSeqCmdParsing(struct adapter *padapter, u8 cut_vers, u8 fab_vers, offset = GET_PWR_CFG_OFFSET(pwrcfgcmd); /* Read the value from system register */ - value = rtw_read8(padapter, offset); + value = usb_read8(padapter, offset); value &= ~(GET_PWR_CFG_MASK(pwrcfgcmd)); value |= (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd)); @@ -94,7 +94,7 @@ u8 HalPwrSeqCmdParsing(struct adapter *padapter, u8 cut_vers, u8 fab_vers, poll_bit = false; offset = GET_PWR_CFG_OFFSET(pwrcfgcmd); do { - value = rtw_read8(padapter, offset); + value = usb_read8(padapter, offset); value &= GET_PWR_CFG_MASK(pwrcfgcmd); if (value == (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd))) diff --git a/drivers/staging/rtl8188eu/hal/hal_com.c b/drivers/staging/rtl8188eu/hal/hal_com.c index f69dbf97b823..429de6988606 100644 --- a/drivers/staging/rtl8188eu/hal/hal_com.c +++ b/drivers/staging/rtl8188eu/hal/hal_com.c @@ -341,7 +341,7 @@ s32 c2h_evt_read(struct adapter *adapter, u8 *buf) if (buf == NULL) goto exit; - trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR); + trigger = usb_read8(adapter, REG_C2HEVT_CLEAR); if (trigger == C2H_EVT_HOST_CLOSE) goto exit; /* Not ready */ @@ -352,15 +352,15 @@ s32 c2h_evt_read(struct adapter *adapter, u8 *buf) _rtw_memset(c2h_evt, 0, 16); - *buf = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL); - *(buf+1) = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1); + *buf = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL); + *(buf+1) = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1); RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): ", &c2h_evt , sizeof(c2h_evt)); /* Read the content */ for (i = 0; i < c2h_evt->plen; i++) - c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + + c2h_evt->payload[i] = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL + sizeof(*c2h_evt) + i); RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 17ab11b6fa74..5c9d64e64c8d 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -41,7 +41,7 @@ static u8 _is_fw_read_cmd_down(struct adapter *adapt, u8 msgbox_num) u8 valid; do { - valid = rtw_read8(adapt, REG_HMETFR) & BIT(msgbox_num); + valid = usb_read8(adapt, REG_HMETFR) & BIT(msgbox_num); if (0 == valid) read_down = true; } while ((!read_down) && (retry_cnts--)); @@ -625,8 +625,8 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* Disable Hw protection for a time which revserd for Hw sending beacon. */ /* Fix download reserved page packet fail that access collision with the protection time. */ /* 2010.05.11. Added by tynli. */ - usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(3))); - usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(4)); + usb_write8(adapt, REG_BCN_CTRL, usb_read8(adapt, REG_BCN_CTRL)&(~BIT(3))); + usb_write8(adapt, REG_BCN_CTRL, usb_read8(adapt, REG_BCN_CTRL)|BIT(4)); if (haldata->RegFwHwTxQCtrl&BIT6) { DBG_88E("HalDownloadRSVDPage(): There is an Adapter is sending beacon.\n"); @@ -668,8 +668,8 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) /* */ /* Enable Bcn */ - usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)|BIT(3)); - usb_write8(adapt, REG_BCN_CTRL, rtw_read8(adapt, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(adapt, REG_BCN_CTRL, usb_read8(adapt, REG_BCN_CTRL)|BIT(3)); + usb_write8(adapt, REG_BCN_CTRL, usb_read8(adapt, REG_BCN_CTRL)&(~BIT(4))); /* To make sure that if there exists an adapter which would like to send beacon. */ /* If exists, the origianl value of 0x422[6] will be 1, we should check this to */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c index 65cf139f8bc0..917c60e153ee 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c @@ -36,7 +36,7 @@ static void dm_InitGPIOSetting(struct adapter *Adapter) { u8 tmp1byte; - tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG); + tmp1byte = usb_read8(Adapter, REG_GPIO_MUXCFG); tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT); usb_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index bcce68848017..58426ac6fc90 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -36,7 +36,7 @@ static void iol_mode_enable(struct adapter *padapter, u8 enable) if (enable) { /* Enable initial offload */ - reg_0xf0 = rtw_read8(padapter, REG_SYS_CFG); + reg_0xf0 = usb_read8(padapter, REG_SYS_CFG); usb_write8(padapter, REG_SYS_CFG, reg_0xf0|SW_OFFLOAD_EN); if (!padapter->bFWReady) { @@ -46,7 +46,7 @@ static void iol_mode_enable(struct adapter *padapter, u8 enable) } else { /* disable initial offload */ - reg_0xf0 = rtw_read8(padapter, REG_SYS_CFG); + reg_0xf0 = usb_read8(padapter, REG_SYS_CFG); usb_write8(padapter, REG_SYS_CFG, reg_0xf0 & ~SW_OFFLOAD_EN); } } @@ -58,16 +58,16 @@ static s32 iol_execute(struct adapter *padapter, u8 control) u32 start = 0, passing_time = 0; control = control&0x0f; - reg_0x88 = rtw_read8(padapter, REG_HMEBOX_E0); + reg_0x88 = usb_read8(padapter, REG_HMEBOX_E0); usb_write8(padapter, REG_HMEBOX_E0, reg_0x88|control); start = jiffies; - while ((reg_0x88 = rtw_read8(padapter, REG_HMEBOX_E0)) & control && + while ((reg_0x88 = usb_read8(padapter, REG_HMEBOX_E0)) & control && (passing_time = rtw_get_passing_time_ms(start)) < 1000) { ; } - reg_0x88 = rtw_read8(padapter, REG_HMEBOX_E0); + reg_0x88 = usb_read8(padapter, REG_HMEBOX_E0); status = (reg_0x88 & control) ? _FAIL : _SUCCESS; if (reg_0x88 & control<<4) status = _FAIL; @@ -227,7 +227,7 @@ static void efuse_read_phymap_from_txpktbuf( u8 *pos = content; if (bcnhead < 0) /* if not valid */ - bcnhead = rtw_read8(adapter, REG_TDECTRL+1); + bcnhead = usb_read8(adapter, REG_TDECTRL+1); DBG_88E("%s bcnhead:%d\n", __func__, bcnhead); @@ -240,9 +240,9 @@ static void efuse_read_phymap_from_txpktbuf( usb_write8(adapter, REG_TXPKTBUF_DBG, 0); start = jiffies; - while (!(reg_0x143 = rtw_read8(adapter, REG_TXPKTBUF_DBG)) && + while (!(reg_0x143 = usb_read8(adapter, REG_TXPKTBUF_DBG)) && (passing_time = rtw_get_passing_time_ms(start)) < 1000) { - DBG_88E("%s polling reg_0x143:0x%02x, reg_0x106:0x%02x\n", __func__, reg_0x143, rtw_read8(adapter, 0x106)); + DBG_88E("%s polling reg_0x143:0x%02x, reg_0x106:0x%02x\n", __func__, reg_0x143, usb_read8(adapter, 0x106)); msleep(1); } @@ -253,8 +253,8 @@ static void efuse_read_phymap_from_txpktbuf( u8 lenc[2]; u16 lenbak, aaabak; u16 aaa; - lenc[0] = rtw_read8(adapter, REG_PKTBUF_DBG_DATA_L); - lenc[1] = rtw_read8(adapter, REG_PKTBUF_DBG_DATA_L+1); + lenc[0] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L); + lenc[1] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L+1); aaabak = le16_to_cpup((__le16 *)lenc); lenbak = le16_to_cpu(*((__le16 *)lenc)); @@ -399,15 +399,15 @@ static void _FWDownloadEnable(struct adapter *padapter, bool enable) if (enable) { /* MCU firmware download enable. */ - tmp = rtw_read8(padapter, REG_MCUFWDL); + tmp = usb_read8(padapter, REG_MCUFWDL); usb_write8(padapter, REG_MCUFWDL, tmp | 0x01); /* 8051 reset */ - tmp = rtw_read8(padapter, REG_MCUFWDL+2); + tmp = usb_read8(padapter, REG_MCUFWDL+2); usb_write8(padapter, REG_MCUFWDL+2, tmp&0xf7); } else { /* MCU firmware download disable. */ - tmp = rtw_read8(padapter, REG_MCUFWDL); + tmp = usb_read8(padapter, REG_MCUFWDL); usb_write8(padapter, REG_MCUFWDL, tmp&0xfe); /* Reserved for fw extension. */ @@ -494,7 +494,7 @@ static int _PageWrite(struct adapter *padapter, u32 page, void *buffer, u32 size u8 value8; u8 u8Page = (u8)(page & 0x07); - value8 = (rtw_read8(padapter, REG_MCUFWDL+2) & 0xF8) | u8Page; + value8 = (usb_read8(padapter, REG_MCUFWDL+2) & 0xF8) | u8Page; usb_write8(padapter, REG_MCUFWDL+2, value8); return _BlockWrite(padapter, buffer, size); @@ -536,7 +536,7 @@ void _8051Reset88E(struct adapter *padapter) { u8 u1bTmp; - u1bTmp = rtw_read8(padapter, REG_SYS_FUNC_EN+1); + u1bTmp = usb_read8(padapter, REG_SYS_FUNC_EN+1); usb_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp&(~BIT2)); usb_write8(padapter, REG_SYS_FUNC_EN+1, u1bTmp|(BIT2)); DBG_88E("=====> _8051Reset88E(): 8051 reset success .\n"); @@ -666,7 +666,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) /* Suggested by Filen. If 8051 is running in RAM code, driver should inform Fw to reset by itself, */ /* or it will cause download Fw fail. 2010.02.01. by tynli. */ - if (rtw_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) { /* 8051 RAM code */ + if (usb_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) { /* 8051 RAM code */ usb_write8(padapter, REG_MCUFWDL, 0x00); _8051Reset88E(padapter); } @@ -675,7 +675,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) fwdl_start_time = jiffies; while (1) { /* reset the FWDL chksum */ - usb_write8(padapter, REG_MCUFWDL, rtw_read8(padapter, REG_MCUFWDL) | FWDL_ChkSum_rpt); + usb_write8(padapter, REG_MCUFWDL, usb_read8(padapter, REG_MCUFWDL) | FWDL_ChkSum_rpt); rtStatus = _WriteFW(padapter, pFirmwareBuf, FirmwareLen); @@ -784,7 +784,7 @@ hal_EfusePowerSwitch_RTL8188E( if (bWrite) { /* Enable LDO 2.5V before read/write action */ - tempval = rtw_read8(pAdapter, EFUSE_TEST+3); + tempval = usb_read8(pAdapter, EFUSE_TEST+3); tempval &= 0x0F; tempval |= (VOLTAGE_V25 << 4); usb_write8(pAdapter, EFUSE_TEST+3, (tempval | 0x80)); @@ -794,7 +794,7 @@ hal_EfusePowerSwitch_RTL8188E( if (bWrite) { /* Disable LDO 2.5V after read/write action */ - tempval = rtw_read8(pAdapter, EFUSE_TEST+3); + tempval = usb_read8(pAdapter, EFUSE_TEST+3); usb_write8(pAdapter, EFUSE_TEST+3, (tempval & 0x7F)); } } @@ -1827,10 +1827,10 @@ static void hal_notch_filter_8188e(struct adapter *adapter, bool enable) { if (enable) { DBG_88E("Enable notch filter\n"); - usb_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT1); + usb_write8(adapter, rOFDM0_RxDSP+1, usb_read8(adapter, rOFDM0_RxDSP+1) | BIT1); } else { DBG_88E("Disable notch filter\n"); - usb_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1); + usb_write8(adapter, rOFDM0_RxDSP+1, usb_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1); } } void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 868fa688a239..9f016a5401d8 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -792,8 +792,8 @@ _PHY_SetBWMode92C( /* 3<1>Set MAC register */ /* 3 */ - regBwOpMode = rtw_read8(Adapter, REG_BWOPMODE); - regRRSR_RSC = rtw_read8(Adapter, REG_RRSR+2); + regBwOpMode = usb_read8(Adapter, REG_BWOPMODE); + regRRSR_RSC = usb_read8(Adapter, REG_RRSR+2); switch (pHalData->CurrentChannelBW) { case HT_CHANNEL_WIDTH_20: diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c index 3971b70f37b0..ab07a6cf5fcf 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c @@ -34,7 +34,7 @@ void SwLedOn(struct adapter *padapter, struct LED_871x *pLed) if (padapter->bSurpriseRemoved || padapter->bDriverStopped) return; - LedCfg = rtw_read8(padapter, REG_LEDCFG2); + LedCfg = usb_read8(padapter, REG_LEDCFG2); usb_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); /* SW control led0 on. */ pLed->bLedOn = true; } @@ -49,13 +49,13 @@ void SwLedOff(struct adapter *padapter, struct LED_871x *pLed) if (padapter->bSurpriseRemoved || padapter->bDriverStopped) goto exit; - LedCfg = rtw_read8(padapter, REG_LEDCFG2);/* 0x4E */ + LedCfg = usb_read8(padapter, REG_LEDCFG2);/* 0x4E */ if (pHalData->bLedOpenDrain) { /* Open-drain arrangement for controlling the LED) */ LedCfg &= 0x90; /* Set to software control. */ usb_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3)); - LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG); + LedCfg = usb_read8(padapter, REG_MAC_PINMUX_CFG); LedCfg &= 0xFE; usb_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg); } else { diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 4f4bf7f452f9..03701ca5eb0c 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -152,7 +152,7 @@ static void _InitInterrupt(struct adapter *Adapter) /* REG_USB_SPECIAL_OPTION - BIT(4) */ /* 0; Use interrupt endpoint to upload interrupt pkt */ /* 1; Use bulk endpoint to upload interrupt pkt, */ - usb_opt = rtw_read8(Adapter, REG_USB_SPECIAL_OPTION); + usb_opt = usb_read8(Adapter, REG_USB_SPECIAL_OPTION); if (!adapter_to_dvobj(Adapter)->ishighspeed) usb_opt = usb_opt & (~INT_BULK_SEL); @@ -437,7 +437,7 @@ static void _InitRetryFunction(struct adapter *Adapter) { u8 value8; - value8 = rtw_read8(Adapter, REG_FWHW_TXQ_CTRL); + value8 = usb_read8(Adapter, REG_FWHW_TXQ_CTRL); value8 |= EN_AMPDU_RTY_NEW; usb_write8(Adapter, REG_FWHW_TXQ_CTRL, value8); @@ -501,8 +501,8 @@ usb_AggSettingRxUpdate( u8 valueDMA; u8 valueUSB; - valueDMA = rtw_read8(Adapter, REG_TRXDMA_CTRL); - valueUSB = rtw_read8(Adapter, REG_USB_SPECIAL_OPTION); + valueDMA = usb_read8(Adapter, REG_TRXDMA_CTRL); + valueUSB = usb_read8(Adapter, REG_USB_SPECIAL_OPTION); switch (haldata->UsbRxAggMode) { case USB_RX_AGG_DMA: @@ -598,11 +598,11 @@ static void _InitBeaconParameters(struct adapter *Adapter) /* beacause test chip does not contension before sending beacon. by tynli. 2009.11.03 */ usb_write16(Adapter, REG_BCNTCFG, 0x660F); - haldata->RegBcnCtrlVal = rtw_read8(Adapter, REG_BCN_CTRL); - haldata->RegTxPause = rtw_read8(Adapter, REG_TXPAUSE); - haldata->RegFwHwTxQCtrl = rtw_read8(Adapter, REG_FWHW_TXQ_CTRL+2); - haldata->RegReg542 = rtw_read8(Adapter, REG_TBTT_PROHIBIT+2); - haldata->RegCR_1 = rtw_read8(Adapter, REG_CR+1); + haldata->RegBcnCtrlVal = usb_read8(Adapter, REG_BCN_CTRL); + haldata->RegTxPause = usb_read8(Adapter, REG_TXPAUSE); + haldata->RegFwHwTxQCtrl = usb_read8(Adapter, REG_FWHW_TXQ_CTRL+2); + haldata->RegReg542 = usb_read8(Adapter, REG_TBTT_PROHIBIT+2); + haldata->RegCR_1 = usb_read8(Adapter, REG_CR+1); } static void _BeaconFunctionEnable(struct adapter *Adapter, @@ -664,12 +664,12 @@ enum rt_rf_power_state RfOnOffDetect(struct adapter *adapt) enum rt_rf_power_state rfpowerstate = rf_off; if (adapt->pwrctrlpriv.bHWPowerdown) { - val8 = rtw_read8(adapt, REG_HSISR); + val8 = usb_read8(adapt, REG_HSISR); DBG_88E("pwrdown, 0x5c(BIT7)=%02x\n", val8); rfpowerstate = (val8 & BIT7) ? rf_off : rf_on; } else { /* rf on/off */ - usb_write8(adapt, REG_MAC_PINMUX_CFG, rtw_read8(adapt, REG_MAC_PINMUX_CFG)&~(BIT3)); - val8 = rtw_read8(adapt, REG_GPIO_IO_SEL); + usb_write8(adapt, REG_MAC_PINMUX_CFG, usb_read8(adapt, REG_MAC_PINMUX_CFG)&~(BIT3)); + val8 = usb_read8(adapt, REG_GPIO_IO_SEL); DBG_88E("GPIO_IN=%02x\n", val8); rfpowerstate = (val8 & BIT3) ? rf_on : rf_off; } @@ -832,7 +832,7 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter) /* Enable TX Report */ /* Enable Tx Report Timer */ - value8 = rtw_read8(Adapter, REG_TX_RPT_CTRL); + value8 = usb_read8(Adapter, REG_TX_RPT_CTRL); usb_write8(Adapter, REG_TX_RPT_CTRL, (value8|BIT1|BIT0)); /* Set MAX RPT MACID */ usb_write8(Adapter, REG_TX_RPT_CTRL+1, 2);/* FOR sta mode ,0: bc/mc ,1:AP */ @@ -950,7 +950,7 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("CardDisableRTL8188EU\n")); /* Stop Tx Report Timer. 0x4EC[Bit1]=b'0 */ - val8 = rtw_read8(Adapter, REG_TX_RPT_CTRL); + val8 = usb_read8(Adapter, REG_TX_RPT_CTRL); usb_write8(Adapter, REG_TX_RPT_CTRL, val8&(~BIT1)); /* stop rx */ @@ -961,10 +961,10 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) /* 2. 0x1F[7:0] = 0 turn off RF */ - val8 = rtw_read8(Adapter, REG_MCUFWDL); + val8 = usb_read8(Adapter, REG_MCUFWDL); if ((val8 & RAM_DL_SEL) && Adapter->bFWReady) { /* 8051 RAM code */ /* Reset MCU 0x2[10]=0. */ - val8 = rtw_read8(Adapter, REG_SYS_FUNC_EN+1); + val8 = usb_read8(Adapter, REG_SYS_FUNC_EN+1); val8 &= ~BIT(2); /* 0x2[10], FEN_CPUEN */ usb_write8(Adapter, REG_SYS_FUNC_EN+1, val8); } @@ -974,26 +974,26 @@ static void CardDisableRTL8188EU(struct adapter *Adapter) /* YJ,add,111212 */ /* Disable 32k */ - val8 = rtw_read8(Adapter, REG_32K_CTRL); + val8 = usb_read8(Adapter, REG_32K_CTRL); usb_write8(Adapter, REG_32K_CTRL, val8&(~BIT0)); /* Card disable power action flow */ HalPwrSeqCmdParsing(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, Rtl8188E_NIC_DISABLE_FLOW); /* Reset MCU IO Wrapper */ - val8 = rtw_read8(Adapter, REG_RSV_CTRL+1); + val8 = usb_read8(Adapter, REG_RSV_CTRL+1); usb_write8(Adapter, REG_RSV_CTRL+1, (val8&(~BIT3))); - val8 = rtw_read8(Adapter, REG_RSV_CTRL+1); + val8 = usb_read8(Adapter, REG_RSV_CTRL+1); usb_write8(Adapter, REG_RSV_CTRL+1, val8|BIT3); /* YJ,test add, 111207. For Power Consumption. */ - val8 = rtw_read8(Adapter, GPIO_IN); + val8 = usb_read8(Adapter, GPIO_IN); usb_write8(Adapter, GPIO_OUT, val8); usb_write8(Adapter, GPIO_IO_SEL, 0xFF);/* Reg0x46 */ - val8 = rtw_read8(Adapter, REG_GPIO_IO_SEL); + val8 = usb_read8(Adapter, REG_GPIO_IO_SEL); usb_write8(Adapter, REG_GPIO_IO_SEL, (val8<<4)); - val8 = rtw_read8(Adapter, REG_GPIO_IO_SEL+1); + val8 = usb_read8(Adapter, REG_GPIO_IO_SEL+1); usb_write8(Adapter, REG_GPIO_IO_SEL+1, val8|0x0F);/* Reg0x43 */ usb_write32(Adapter, REG_BB_PAD_CTRL, 0x00080808);/* set LNA ,TRSW,EX_PA Pin to output mode */ haldata->bMacPwrCtrlOn = false; @@ -1164,7 +1164,7 @@ static void _ReadPROMContent( u8 eeValue; /* check system boot selection */ - eeValue = rtw_read8(Adapter, REG_9346CR); + eeValue = usb_read8(Adapter, REG_9346CR); eeprom->EepromOrEfuse = (eeValue & BOOT_FROM_EEPROM) ? true : false; eeprom->bautoload_fail_flag = (eeValue & EEPROM_EN) ? false : true; @@ -1235,10 +1235,10 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) u8 mode = *((u8 *)val); /* disable Port0 TSF update */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)|BIT(4)); /* set net_type */ - val8 = rtw_read8(Adapter, MSR)&0x0c; + val8 = usb_read8(Adapter, MSR)&0x0c; val8 |= mode; usb_write8(Adapter, MSR, val8); @@ -1275,14 +1275,14 @@ static void hw_var_set_opmode(struct adapter *Adapter, u8 variable, u8 *val) usb_write8(Adapter, REG_DUAL_TSF_RST, BIT(0)); /* BIT3 - If set 0, hw will clr bcnq when tx becon ok/fail or port 0 */ - usb_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM) | BIT(3) | BIT(4)); + usb_write8(Adapter, REG_MBID_NUM, usb_read8(Adapter, REG_MBID_NUM) | BIT(3) | BIT(4)); /* enable BCN0 Function for if1 */ /* don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received) */ usb_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | BIT(1))); /* dis BCN1 ATIM WND if if2 is station */ - usb_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1) | BIT(0)); + usb_write8(Adapter, REG_BCN_CTRL_1, usb_read8(Adapter, REG_BCN_CTRL_1) | BIT(0)); } } @@ -1317,7 +1317,7 @@ static void hw_var_set_bcn_func(struct adapter *Adapter, u8 variable, u8 *val) if (*((u8 *)val)) usb_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT)); else - usb_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT))); + usb_write8(Adapter, bcn_ctrl_reg, usb_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT))); } static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) @@ -1331,7 +1331,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) { u8 val8; - val8 = rtw_read8(Adapter, MSR)&0x0c; + val8 = usb_read8(Adapter, MSR)&0x0c; val8 |= *((u8 *)val); usb_write8(Adapter, MSR, val8); } @@ -1340,7 +1340,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) { u8 val8; - val8 = rtw_read8(Adapter, MSR) & 0x03; + val8 = usb_read8(Adapter, MSR) & 0x03; val8 |= *((u8 *)val) << 2; usb_write8(Adapter, MSR, val8); } @@ -1378,7 +1378,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) /* Set RRSR rate table. */ usb_write8(Adapter, REG_RRSR, BrateCfg & 0xff); usb_write8(Adapter, REG_RRSR+1, (BrateCfg >> 8) & 0xff); - usb_write8(Adapter, REG_RRSR+2, rtw_read8(Adapter, REG_RRSR+2)&0xf0); + usb_write8(Adapter, REG_RRSR+2, usb_read8(Adapter, REG_RRSR+2)&0xf0); /* Set RTS initial rate */ while (BrateCfg > 0x1) { @@ -1407,13 +1407,13 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) StopTxBeacon(Adapter); /* disable related TSF function */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3))); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)&(~BIT(3))); usb_write32(Adapter, REG_TSFTR, tsf); usb_write32(Adapter, REG_TSFTR+4, tsf>>32); /* enable related TSF function */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3)); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)|BIT(3)); if (((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)) ResumeTxBeacon(Adapter); @@ -1441,7 +1441,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1))); /* disable update TSF */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)|BIT(4)); break; case HW_VAR_MLME_SITESURVEY: if (*((u8 *)val)) { /* under sitesurvey */ @@ -1453,7 +1453,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0x00); /* disable update TSF */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)|BIT(4)); } else { /* sitesurvey done */ struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -1464,11 +1464,11 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } else if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF); /* enable update TSF */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); } if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); @@ -1511,7 +1511,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) } else if (type == 2) { /* sta add event call back */ /* enable update TSF */ - usb_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) RetryLimit = 0x7; @@ -1641,7 +1641,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) case HW_VAR_ACM_CTRL: { u8 acm_ctrl = *((u8 *)val); - u8 AcmCtrl = rtw_read8(Adapter, REG_ACMHWCTRL); + u8 AcmCtrl = usb_read8(Adapter, REG_ACMHWCTRL); if (acm_ctrl > 1) AcmCtrl = AcmCtrl | 0x1; @@ -1689,7 +1689,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) } if (MinSpacingToSet < SecMinSpace) MinSpacingToSet = SecMinSpace; - usb_write8(Adapter, REG_AMPDU_MIN_SPACE, (rtw_read8(Adapter, REG_AMPDU_MIN_SPACE) & 0xf8) | MinSpacingToSet); + usb_write8(Adapter, REG_AMPDU_MIN_SPACE, (usb_read8(Adapter, REG_AMPDU_MIN_SPACE) & 0xf8) | MinSpacingToSet); } } break; @@ -1838,7 +1838,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) break; case HW_VAR_BCN_VALID: /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw */ - usb_write8(Adapter, REG_TDECTRL+2, rtw_read8(Adapter, REG_TDECTRL+2) | BIT0); + usb_write8(Adapter, REG_TDECTRL+2, usb_read8(Adapter, REG_TDECTRL+2) | BIT0); break; default: break; @@ -1854,11 +1854,11 @@ static void GetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) case HW_VAR_BASIC_RATE: *((u16 *)(val)) = haldata->BasicRateSet; case HW_VAR_TXPAUSE: - val[0] = rtw_read8(Adapter, REG_TXPAUSE); + val[0] = usb_read8(Adapter, REG_TXPAUSE); break; case HW_VAR_BCN_VALID: /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2 */ - val[0] = (BIT0 & rtw_read8(Adapter, REG_TDECTRL+2)) ? true : false; + val[0] = (BIT0 & usb_read8(Adapter, REG_TDECTRL+2)) ? true : false; break; case HW_VAR_DM_FLAG: val[0] = podmpriv->SupportAbility; @@ -2032,7 +2032,7 @@ static u8 SetHalDefVar8188EUsb(struct adapter *Adapter, enum hal_def_variable eV } else if (dm_func == 6) {/* turn on all dynamic func */ if (!(podmpriv->SupportAbility & DYNAMIC_BB_DIG)) { struct rtw_dig *pDigTable = &podmpriv->DM_DigTable; - pDigTable->CurIGValue = rtw_read8(Adapter, 0xc50); + pDigTable->CurIGValue = usb_read8(Adapter, 0xc50); } podmpriv->SupportAbility = DYNAMIC_ALL_FUNC_ENABLE; DBG_88E("==> Turn on all dynamic function...\n"); @@ -2184,7 +2184,7 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt) ResumeTxBeacon(adapt); - usb_write8(adapt, bcn_ctrl_reg, rtw_read8(adapt, bcn_ctrl_reg)|BIT(1)); + usb_write8(adapt, bcn_ctrl_reg, usb_read8(adapt, bcn_ctrl_reg)|BIT(1)); } static void rtl8188eu_init_default_value(struct adapter *adapt) diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index d5d92881d960..d0c82dc6da91 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -115,7 +115,7 @@ exit: return status; } -static u8 usb_read8(struct adapter *adapter, u32 addr) +u8 usb_read8(struct adapter *adapter, u32 addr) { u8 request; u8 requesttype; @@ -666,5 +666,4 @@ void rtl8188eu_xmit_tasklet(void *priv) void rtl8188eu_set_intf_ops(struct _io_ops *pops) { _rtw_memset((u8 *)pops, 0, sizeof(struct _io_ops)); - pops->_read8 = &usb_read8; } diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 63b1ff0a9faa..ef865dad0f4d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -44,7 +44,6 @@ struct intf_priv; struct intf_hdl; struct _io_ops { - u8 (*_read8)(struct adapter *pintfhdl, u32 addr); }; struct io_req { @@ -76,7 +75,7 @@ struct io_priv { struct intf_hdl intf; }; -u8 _rtw_read8(struct adapter *adapter, u32 addr); +u8 usb_read8(struct adapter *adapter, u32 addr); u16 usb_read16(struct adapter *adapter, u32 addr); u32 usb_read32(struct adapter *adapter, u32 addr); u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); @@ -90,7 +89,6 @@ int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_write_port_cancel(struct adapter *adapter); -#define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index fd888cba0d23..11b71ec89f4f 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2179,7 +2179,7 @@ static int rtw_wx_read32(struct net_device *dev, switch (bytes) { case 1: - data32 = rtw_read8(padapter, addr); + data32 = usb_read8(padapter, addr); sprintf(extra, "0x%02X", data32); break; case 2: @@ -2353,7 +2353,7 @@ static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 le RegRWStruct = (struct mp_rw_reg *)pdata; switch (RegRWStruct->width) { case 1: - RegRWStruct->value = rtw_read8(padapter, RegRWStruct->offset); + RegRWStruct->value = usb_read8(padapter, RegRWStruct->offset); break; case 2: RegRWStruct->value = usb_read16(padapter, RegRWStruct->offset); @@ -4109,7 +4109,7 @@ static int rtw_dbg_port(struct net_device *dev, case 0x70:/* read_reg */ switch (minor_cmd) { case 1: - DBG_88E("rtw_read8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); + DBG_88E("usb_read8(0x%x) = 0x%02x\n", arg, usb_read8(padapter, arg)); break; case 2: DBG_88E("usb_read16(0x%x) = 0x%04x\n", arg, usb_read16(padapter, arg)); @@ -4123,7 +4123,7 @@ static int rtw_dbg_port(struct net_device *dev, switch (minor_cmd) { case 1: usb_write8(padapter, arg, extra_arg); - DBG_88E("usb_write8(0x%x) = 0x%02x\n", arg, rtw_read8(padapter, arg)); + DBG_88E("usb_write8(0x%x) = 0x%02x\n", arg, usb_read8(padapter, arg)); break; case 2: usb_write16(padapter, arg, extra_arg); @@ -4227,7 +4227,7 @@ static int rtw_dbg_port(struct net_device *dev, if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) ret = -EPERM; - final = rtw_read8(padapter, reg); + final = usb_read8(padapter, reg); if (start_value+write_num-1 == final) DBG_88E("continuous IOL_CMD_WB_REG to 0x%x %u times Success, start:%u, final:%u\n", reg, write_num, start_value, final); else @@ -4577,13 +4577,13 @@ static int rtw_dbg_port(struct net_device *dev, case 0xfd: usb_write8(padapter, 0xc50, arg); - DBG_88E("wr(0xc50) = 0x%x\n", rtw_read8(padapter, 0xc50)); + DBG_88E("wr(0xc50) = 0x%x\n", usb_read8(padapter, 0xc50)); usb_write8(padapter, 0xc58, arg); - DBG_88E("wr(0xc58) = 0x%x\n", rtw_read8(padapter, 0xc58)); + DBG_88E("wr(0xc58) = 0x%x\n", usb_read8(padapter, 0xc58)); break; case 0xfe: - DBG_88E("rd(0xc50) = 0x%x\n", rtw_read8(padapter, 0xc50)); - DBG_88E("rd(0xc58) = 0x%x\n", rtw_read8(padapter, 0xc58)); + DBG_88E("rd(0xc50) = 0x%x\n", usb_read8(padapter, 0xc50)); + DBG_88E("rd(0xc58) = 0x%x\n", usb_read8(padapter, 0xc58)); break; case 0xff: DBG_88E("dbg(0x210) = 0x%x\n", usb_read32(padapter, 0x210)); @@ -6494,7 +6494,7 @@ static int rtw_mp_read_reg(struct net_device *dev, switch (width) { case 'b': /* 1 byte */ - sprintf(extra, "%d\n", rtw_read8(padapter, addr)); + sprintf(extra, "%d\n", usb_read8(padapter, addr)); wrqu->length = strlen(extra); break; case 'w': @@ -7078,7 +7078,7 @@ static int rtw_mp_arx(struct net_device *dev, OFDM_FA = read_bbreg(padapter, 0xda4, 0x0000FFFF); OFDM_FA = read_bbreg(padapter, 0xda4, 0xFFFF0000); OFDM_FA = read_bbreg(padapter, 0xda8, 0x0000FFFF); - CCK_FA = (rtw_read8(padapter, 0xa5b)<<8) | (rtw_read8(padapter, 0xa5c)); + CCK_FA = (usb_read8(padapter, 0xa5b)<<8) | (usb_read8(padapter, 0xa5c)); sprintf(extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d", cckok+ofdmok+htok, cckcrc+ofdmcrc+htcrc, OFDM_FA+CCK_FA); } -- cgit From 8f7c67e3e113cd6e85c3aaf6b2e41155c9ecd1f2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:37 +0530 Subject: staging: rtl8188eu: Remove functions initialize rtw_[read,write] wrapper we have removed all rtw_[read,write]() function calls, so no need to initialize structures used to build rtw_[read,write] abstraction. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_io.c | 16 ---------------- drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 4 ---- drivers/staging/rtl8188eu/include/rtw_io.h | 4 ---- drivers/staging/rtl8188eu/include/usb_ops.h | 2 -- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 3 --- 5 files changed, 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c index 25b0a875d4a0..dd568967135c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ b/drivers/staging/rtl8188eu/core/rtw_io.c @@ -51,19 +51,3 @@ jackson@realtek.com.tw #define rtw_cpu_to_le16(val) cpu_to_le16(val) #define rtw_cpu_to_le32(val) cpu_to_le32(val) -int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)) -{ - struct io_priv *piopriv = &padapter->iopriv; - struct intf_hdl *pintf = &piopriv->intf; - - if (set_intf_ops == NULL) - return _FAIL; - - piopriv->padapter = padapter; - pintf->padapter = padapter; - pintf->pintf_dev = adapter_to_dvobj(padapter); - - set_intf_ops(&pintf->io_ops); - - return _SUCCESS; -} diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index d0c82dc6da91..1002ff07f321 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -663,7 +663,3 @@ void rtl8188eu_xmit_tasklet(void *priv) } } -void rtl8188eu_set_intf_ops(struct _io_ops *pops) -{ - _rtw_memset((u8 *)pops, 0, sizeof(struct _io_ops)); -} diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index ef865dad0f4d..86431b8ae861 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -89,8 +89,4 @@ int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); void usb_write_port_cancel(struct adapter *adapter); - -int rtw_init_io_priv(struct adapter *padapter, - void (*set_intf_ops)(struct _io_ops *pops)); - #endif /* _RTL8711_IO_H_ */ diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index a290e0ff3060..ff730f49bc4b 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -63,8 +63,6 @@ enum{ #include void rtl8188eu_set_hw_type(struct adapter *padapter); -void rtl8188eu_set_intf_ops(struct _io_ops *pops); -#define usb_set_intf_ops rtl8188eu_set_intf_ops /* * Increase and check if the continual_urb_error of this @param dvobjprivei diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 491d8e5a6ec0..c4a4880e7b8a 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -396,9 +396,6 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, padapter->intf_start = &usb_intf_start; padapter->intf_stop = &usb_intf_stop; - /* step init_io_priv */ - rtw_init_io_priv(padapter, usb_set_intf_ops); - /* step read_chip_version */ rtw_hal_read_chip_version(padapter); -- cgit From 0e105ec17ed98d42073b9142f4b82895a2d203fc Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:38 +0530 Subject: staging: rtl8188eu: usb_ops_linux.h: Remove unused function declarations Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_ops_linux.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_ops_linux.h b/drivers/staging/rtl8188eu/include/usb_ops_linux.h index e722c455e6b6..0a6e5d0a7c4b 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops_linux.h +++ b/drivers/staging/rtl8188eu/include/usb_ops_linux.h @@ -44,9 +44,6 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr); -void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem); -void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem); - void usb_read_port_cancel(struct adapter *padapter); u32 usb_write_port(struct adapter *padapter, u32 addr, u32 cnt, u8 *wmem); -- cgit From a17efdaff695ab9f483c75d42d3eeecf5f0330c2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:39 +0530 Subject: staging: rtl8188eu: rtw_io.h: Remove unused structures and macros Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 42 --------------------------- 2 files changed, 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 974f12fdf508..8063caaace44 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -196,7 +196,6 @@ struct adapter { struct mlme_ext_priv mlmeextpriv; struct cmd_priv cmdpriv; struct evt_priv evtpriv; - struct io_priv iopriv; struct xmit_priv xmitpriv; struct recv_priv recvpriv; struct sta_priv stapriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 86431b8ae861..41e3dd8bc7f2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -33,48 +33,6 @@ #include #include -#define rtw_usb_buffer_alloc(dev, size, dma) \ - usb_alloc_coherent((dev), (size), (in_interrupt() ? \ - GFP_ATOMIC : GFP_KERNEL), (dma)) -#define rtw_usb_buffer_free(dev, size, addr, dma) \ - usb_free_coherent((dev), (size), (addr), (dma)) - - -struct intf_priv; -struct intf_hdl; - -struct _io_ops { -}; - -struct io_req { - struct list_head list; - u32 addr; - u32 val; - u32 command; - u32 status; - u8 *pbuf; - struct semaphore sema; - - void (*_async_io_callback)(struct adapter *padater, - struct io_req *pio_req, u8 *cnxt); - u8 *cnxt; -}; - -struct intf_hdl { - struct adapter *padapter; - struct dvobj_priv *pintf_dev; - struct _io_ops io_ops; -}; - -/* -Below is the data structure used by _io_handler -*/ - -struct io_priv { - struct adapter *padapter; - struct intf_hdl intf; -}; - u8 usb_read8(struct adapter *adapter, u32 addr); u16 usb_read16(struct adapter *adapter, u32 addr); u32 usb_read32(struct adapter *adapter, u32 addr); -- cgit From e73fd15ea84a8b2411a70b62473a7bfcba74c207 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:40 +0530 Subject: staging: rtl8188eu: Move usb_[read, write]() declarations to usb_ops_linux.h Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_debug.c | 1 + drivers/staging/rtl8188eu/core/rtw_efuse.c | 3 +-- drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 2 +- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 1 + drivers/staging/rtl8188eu/core/rtw_sreset.c | 1 + drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c | 1 + drivers/staging/rtl8188eu/hal/rtl8188eu_led.c | 1 + drivers/staging/rtl8188eu/include/odm_precomp.h | 1 + drivers/staging/rtl8188eu/include/rtw_io.h | 14 -------------- drivers/staging/rtl8188eu/include/usb_ops_linux.h | 16 +++++++++++++--- 11 files changed, 22 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index acd6d45ba79a..dd1516388f9a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -20,6 +20,7 @@ #define _RTW_DEBUG_C_ #include +#include int proc_get_drv_version(char *page, char **start, off_t offset, int count, diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 1da9d1e8963d..31507e7a9b24 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -22,8 +22,7 @@ #include #include #include - - +#include /*------------------------Define local variable------------------------------*/ u8 fakeEfuseBank; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index fa8704d2d483..43765f8ec054 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -20,7 +20,7 @@ #define _RTW_MP_C_ #include - +#include #include "rtl8188e_hal.h" #include diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index c06cd82020d2..ad5599415d65 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -22,7 +22,7 @@ #include #include #include - +#include /* include */ #include diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 51b246892789..9b80c8aa00c1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/drivers/staging/rtl8188eu/core/rtw_sreset.c b/drivers/staging/rtl8188eu/core/rtw_sreset.c index 22a35121830b..cd4e344e6ffd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sreset.c +++ b/drivers/staging/rtl8188eu/core/rtw_sreset.c @@ -19,6 +19,7 @@ ******************************************************************************/ #include +#include void sreset_init_value(struct adapter *padapter) { diff --git a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c index 1808d359d610..caca535ac17d 100644 --- a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c +++ b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c @@ -35,6 +35,7 @@ Major Change History: --*/ #include +#include /* Description: */ /* This routine deals with the Power Configuration CMDs parsing diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c index ab07a6cf5fcf..81d691ddd6c6 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_led.c @@ -22,6 +22,7 @@ #include #include #include +#include /* LED object. */ diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h index 38394636500c..df61892a3dc0 100644 --- a/drivers/staging/rtl8188eu/include/odm_precomp.h +++ b/drivers/staging/rtl8188eu/include/odm_precomp.h @@ -30,6 +30,7 @@ #include #include #include +#include /* 2 OutSrc Header Files */ diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h index 41e3dd8bc7f2..a9a6d194b951 100644 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ b/drivers/staging/rtl8188eu/include/rtw_io.h @@ -33,18 +33,4 @@ #include #include -u8 usb_read8(struct adapter *adapter, u32 addr); -u16 usb_read16(struct adapter *adapter, u32 addr); -u32 usb_read32(struct adapter *adapter, u32 addr); -u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void usb_read_port_cancel(struct adapter *adapter); - -int usb_write8(struct adapter *adapter, u32 addr, u8 val); -int usb_write16(struct adapter *adapter, u32 addr, u16 val); -int usb_write32(struct adapter *adapter, u32 addr, u32 val); -int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); - -u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); -void usb_write_port_cancel(struct adapter *adapter); - #endif /* _RTL8711_IO_H_ */ diff --git a/drivers/staging/rtl8188eu/include/usb_ops_linux.h b/drivers/staging/rtl8188eu/include/usb_ops_linux.h index 0a6e5d0a7c4b..5fc4247dc9c0 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops_linux.h +++ b/drivers/staging/rtl8188eu/include/usb_ops_linux.h @@ -44,9 +44,19 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr); -void usb_read_port_cancel(struct adapter *padapter); +u8 usb_read8(struct adapter *adapter, u32 addr); +u16 usb_read16(struct adapter *adapter, u32 addr); +u32 usb_read32(struct adapter *adapter, u32 addr); -u32 usb_write_port(struct adapter *padapter, u32 addr, u32 cnt, u8 *wmem); -void usb_write_port_cancel(struct adapter *padapter); +u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); +void usb_read_port_cancel(struct adapter *adapter); + +int usb_write8(struct adapter *adapter, u32 addr, u8 val); +int usb_write16(struct adapter *adapter, u32 addr, u16 val); +int usb_write32(struct adapter *adapter, u32 addr, u32 val); +int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); + +u32 usb_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); +void usb_write_port_cancel(struct adapter *adapter); #endif -- cgit From 0a95a7f4482c96ec5d02fee1aa8d40a390a6503e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Wed, 11 Jun 2014 22:51:41 +0530 Subject: staging: rtl8188eu: Remove empty files rtw_io.[c,h] Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/core/rtw_io.c | 53 ------------------------ drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/include/rtw_io.h | 36 ---------------- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 + drivers/staging/rtl8188eu/os_dep/osdep_service.c | 1 + 6 files changed, 2 insertions(+), 91 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/core/rtw_io.c delete mode 100644 drivers/staging/rtl8188eu/include/rtw_io.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 2ed35a0f7799..b2030894b7be 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -5,7 +5,6 @@ r8188eu-y := \ core/rtw_debug.o \ core/rtw_efuse.o \ core/rtw_ieee80211.o \ - core/rtw_io.o \ core/rtw_ioctl_set.o \ core/rtw_iol.o \ core/rtw_led.o \ diff --git a/drivers/staging/rtl8188eu/core/rtw_io.c b/drivers/staging/rtl8188eu/core/rtw_io.c deleted file mode 100644 index dd568967135c..000000000000 --- a/drivers/staging/rtl8188eu/core/rtw_io.c +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -/* - -The purpose of rtw_io.c - -a. provides the API - -b. provides the protocol engine - -c. provides the software interface between caller and the hardware interface - - -Compiler Flag Option: - -USB: - a. USE_ASYNC_IRP: Both sync/async operations are provided. - -Only sync read/rtw_write_mem operations are provided. - -jackson@realtek.com.tw - -*/ - -#define _RTW_IO_C_ -#include -#include -#include -#include -#include - -#define rtw_le16_to_cpu(val) le16_to_cpu(val) -#define rtw_le32_to_cpu(val) le32_to_cpu(val) -#define rtw_cpu_to_le16(val) cpu_to_le16(val) -#define rtw_cpu_to_le32(val) cpu_to_le32(val) - diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 8063caaace44..9c3f905a2f11 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/staging/rtl8188eu/include/rtw_io.h b/drivers/staging/rtl8188eu/include/rtw_io.h deleted file mode 100644 index a9a6d194b951..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_io.h +++ /dev/null @@ -1,36 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef _RTW_IO_H_ -#define _RTW_IO_H_ - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#endif /* _RTL8711_IO_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 1d961bdbc3c7..34f73706e485 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -20,6 +20,7 @@ #define _OS_INTFS_C_ #include +#include #include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 2579a404a766..9b76e0844f9d 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -22,6 +22,7 @@ #define _OSDEP_SERVICE_C_ #include +#include #include #include #include -- cgit From dcea74721f7e5729b40598366defb6ee9fae7b26 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:38 +0530 Subject: staging: rtl8188eu: Remove function rtw_br_client_tx() rtw_br_client_tx() pass tx packet to functions responsible for building NAT table. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_xmit.c | 135 ------------------------------ 1 file changed, 135 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 1413ec8ad3bf..a113f0f12666 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1676,127 +1676,6 @@ void rtw_init_hwxmits(struct hw_xmit *phwxmit, int entry) phwxmit->accnt = 0; } -static int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb) -{ - struct sk_buff *skb = *pskb; - int res, is_vlan_tag = 0, i, do_nat25 = 1; - unsigned short vlan_hdr = 0; - void *br_port = NULL; - - rcu_read_lock(); - br_port = rcu_dereference(padapter->pnetdev->rx_handler_data); - rcu_read_unlock(); - spin_lock_bh(&padapter->br_ext_lock); - if (!(skb->data[0] & 1) && br_port && - memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) && - *((__be16 *)(skb->data+MACADDRLEN*2)) != __constant_htons(ETH_P_8021Q) && - *((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP) && - !memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN) && padapter->scdb_entry) { - memcpy(skb->data+MACADDRLEN, GET_MY_HWADDR(padapter), MACADDRLEN); - padapter->scdb_entry->ageing_timer = jiffies; - spin_unlock_bh(&padapter->br_ext_lock); - } else { - if (*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_8021Q)) { - is_vlan_tag = 1; - vlan_hdr = *((unsigned short *)(skb->data+MACADDRLEN*2+2)); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+MACADDRLEN*2+2-i*2)) = *((unsigned short *)(skb->data+MACADDRLEN*2-2-i*2)); - skb_pull(skb, 4); - } - if (!memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) && - (*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP))) - memcpy(padapter->br_ip, skb->data+WLAN_ETHHDR_LEN+12, 4); - - if (*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)) { - if (memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN)) { - padapter->scdb_entry = (struct nat25_network_db_entry *)scdb_findEntry(padapter, - skb->data+MACADDRLEN, skb->data+WLAN_ETHHDR_LEN+12); - if (padapter->scdb_entry) { - memcpy(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN); - memcpy(padapter->scdb_ip, skb->data+WLAN_ETHHDR_LEN+12, 4); - padapter->scdb_entry->ageing_timer = jiffies; - do_nat25 = 0; - } - } else { - if (padapter->scdb_entry) { - padapter->scdb_entry->ageing_timer = jiffies; - do_nat25 = 0; - } else { - memset(padapter->scdb_mac, 0, MACADDRLEN); - memset(padapter->scdb_ip, 0, 4); - } - } - } - spin_unlock_bh(&padapter->br_ext_lock); - if (do_nat25) { - if (nat25_db_handle(padapter, skb, NAT25_CHECK) == 0) { - struct sk_buff *newskb; - - if (is_vlan_tag) { - skb_push(skb, 4); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2)); - *((__be16 *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q); - *((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr; - } - - newskb = skb_copy(skb, GFP_ATOMIC); - if (newskb == NULL) { - DEBUG_ERR("TX DROP: skb_copy fail!\n"); - return -1; - } - dev_kfree_skb_any(skb); - - *pskb = skb = newskb; - if (is_vlan_tag) { - vlan_hdr = *((unsigned short *)(skb->data+MACADDRLEN*2+2)); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+MACADDRLEN*2+2-i*2)) = *((unsigned short *)(skb->data+MACADDRLEN*2-2-i*2)); - skb_pull(skb, 4); - } - } - - if (skb_is_nonlinear(skb)) - DEBUG_ERR("%s(): skb_is_nonlinear!!\n", __func__); - - res = skb_linearize(skb); - if (res < 0) { - DEBUG_ERR("TX DROP: skb_linearize fail!\n"); - return -1; - } - - res = nat25_db_handle(padapter, skb, NAT25_INSERT); - if (res < 0) { - if (res == -2) { - DEBUG_ERR("TX DROP: nat25_db_handle fail!\n"); - return -1; - } - return 0; - } - } - - memcpy(skb->data+MACADDRLEN, GET_MY_HWADDR(padapter), MACADDRLEN); - - dhcp_flag_bcast(padapter, skb); - - if (is_vlan_tag) { - skb_push(skb, 4); - for (i = 0; i < 6; i++) - *((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2)); - *((__be16 *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q); - *((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr; - } - } - - /* check if SA is equal to our MAC */ - if (memcmp(skb->data+MACADDRLEN, GET_MY_HWADDR(padapter), MACADDRLEN)) { - DEBUG_ERR("TX DROP: untransformed frame SA:%02X%02X%02X%02X%02X%02X!\n", - skb->data[6], skb->data[7], skb->data[8], skb->data[9], skb->data[10], skb->data[11]); - return -1; - } - return 0; -} - u32 rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe) { u32 addr; @@ -1856,8 +1735,6 @@ s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt) { struct xmit_priv *pxmitpriv = &padapter->xmitpriv; struct xmit_frame *pxmitframe = NULL; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - void *br_port = NULL; s32 res; pxmitframe = rtw_alloc_xmitframe(pxmitpriv); @@ -1867,18 +1744,6 @@ s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt) return -1; } - rcu_read_lock(); - br_port = rcu_dereference(padapter->pnetdev->rx_handler_data); - rcu_read_unlock(); - - if (br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE)) { - res = rtw_br_client_tx(padapter, ppkt); - if (res == -1) { - rtw_free_xmitframe(pxmitpriv, pxmitframe); - return -1; - } - } - res = update_attrib(padapter, *ppkt, &pxmitframe->attrib); if (res == _FAIL) { -- cgit From 2ace82d69246bbc07389109cfd89e539383707ea Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:39 +0530 Subject: staging: rtl8188eu: Remove unused functons defined in rtw_br_ext.c This patch removes some functions defined in rtw_br_ext.c, which have become obsolete after removal of rtw_br_client_tx(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_br_ext.c | 727 ------------------------- drivers/staging/rtl8188eu/include/usb_osintf.h | 1 - 2 files changed, 728 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c index 70b8f0719703..86899125ea59 100644 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_br_ext.c @@ -103,27 +103,6 @@ static inline int __nat25_add_pppoe_tag(struct sk_buff *skb, struct pppoe_tag *t return data_len; } -static int skb_pull_and_merge(struct sk_buff *skb, unsigned char *src, int len) -{ - int tail_len; - unsigned long end, tail; - - if ((src+len) > skb_tail_pointer(skb) || skb->len < len) - return -1; - - tail = (unsigned long)skb_tail_pointer(skb); - end = (unsigned long)src+len; - if (tail < end) - return -1; - - tail_len = (int)(tail-end); - if (tail_len > 0) - memmove(src, src+len, tail_len); - - skb_trim(skb, skb->len-len); - return 0; -} - static inline unsigned long __nat25_timeout(struct adapter *priv) { unsigned long timeout; @@ -196,91 +175,6 @@ static inline void __nat25_generate_pppoe_network_addr(unsigned char *networkAdd memcpy(networkAddr+3, (unsigned char *)ac_mac, 6); } -static void __nat25_generate_ipv6_network_addr(unsigned char *networkAddr, - __be32 *ipAddr) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_IPV6; - memcpy(networkAddr+1, (unsigned char *)ipAddr, 16); -} - -static unsigned char *scan_tlv(unsigned char *data, int len, unsigned char tag, unsigned char len8b) -{ - while (len > 0) { - if (*data == tag && *(data+1) == len8b && len >= len8b*8) - return data+2; - - len -= (*(data+1))*8; - data += (*(data+1))*8; - } - return NULL; -} - -static int update_nd_link_layer_addr(unsigned char *data, int len, unsigned char *replace_mac) -{ - struct icmp6hdr *icmphdr = (struct icmp6hdr *)data; - unsigned char *mac; - - if (icmphdr->icmp6_type == NDISC_ROUTER_SOLICITATION) { - if (len >= 8) { - mac = scan_tlv(&data[8], len-8, 1, 1); - if (mac) { - _DEBUG_INFO("Router Solicitation, replace MAC From: %02x:%02x:%02x:%02x:%02x:%02x, To: %02x:%02x:%02x:%02x:%02x:%02x\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], - replace_mac[0], replace_mac[1], replace_mac[2], replace_mac[3], replace_mac[4], replace_mac[5]); - memcpy(mac, replace_mac, 6); - return 1; - } - } - } else if (icmphdr->icmp6_type == NDISC_ROUTER_ADVERTISEMENT) { - if (len >= 16) { - mac = scan_tlv(&data[16], len-16, 1, 1); - if (mac) { - _DEBUG_INFO("Router Advertisement, replace MAC From: %02x:%02x:%02x:%02x:%02x:%02x, To: %02x:%02x:%02x:%02x:%02x:%02x\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], - replace_mac[0], replace_mac[1], replace_mac[2], replace_mac[3], replace_mac[4], replace_mac[5]); - memcpy(mac, replace_mac, 6); - return 1; - } - } - } else if (icmphdr->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) { - if (len >= 24) { - mac = scan_tlv(&data[24], len-24, 1, 1); - if (mac) { - _DEBUG_INFO("Neighbor Solicitation, replace MAC From: %02x:%02x:%02x:%02x:%02x:%02x, To: %02x:%02x:%02x:%02x:%02x:%02x\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], - replace_mac[0], replace_mac[1], replace_mac[2], replace_mac[3], replace_mac[4], replace_mac[5]); - memcpy(mac, replace_mac, 6); - return 1; - } - } - } else if (icmphdr->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT) { - if (len >= 24) { - mac = scan_tlv(&data[24], len-24, 2, 1); - if (mac) { - _DEBUG_INFO("Neighbor Advertisement, replace MAC From: %02x:%02x:%02x:%02x:%02x:%02x, To: %02x:%02x:%02x:%02x:%02x:%02x\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], - replace_mac[0], replace_mac[1], replace_mac[2], replace_mac[3], replace_mac[4], replace_mac[5]); - memcpy(mac, replace_mac, 6); - return 1; - } - } - } else if (icmphdr->icmp6_type == NDISC_REDIRECT) { - if (len >= 40) { - mac = scan_tlv(&data[40], len-40, 2, 1); - if (mac) { - _DEBUG_INFO("Redirect, replace MAC From: %02x:%02x:%02x:%02x:%02x:%02x, To: %02x:%02x:%02x:%02x:%02x:%02x\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], - replace_mac[0], replace_mac[1], replace_mac[2], replace_mac[3], replace_mac[4], replace_mac[5]); - memcpy(mac, replace_mac, 6); - return 1; - } - } - } - return 0; -} - static inline int __nat25_network_hash(unsigned char *networkAddr) { if (networkAddr[0] == NAT25_IPV4) { @@ -349,88 +243,6 @@ static inline void __network_hash_unlink(struct nat25_network_db_entry *ent) ent->pprev_hash = NULL; } -static int __nat25_db_network_lookup_and_replace(struct adapter *priv, - struct sk_buff *skb, unsigned char *networkAddr) -{ - struct nat25_network_db_entry *db; - spin_lock_bh(&priv->br_ext_lock); - - db = priv->nethash[__nat25_network_hash(networkAddr)]; - while (db != NULL) { - if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) { - if (!__nat25_has_expired(priv, db)) { - /* replace the destination mac address */ - memcpy(skb->data, db->macAddr, ETH_ALEN); - atomic_inc(&db->use_count); - - DEBUG_INFO("NAT25: Lookup M:%02x%02x%02x%02x%02x%02x N:%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x" - "%02x%02x%02x%02x%02x%02x\n", - db->macAddr[0], - db->macAddr[1], - db->macAddr[2], - db->macAddr[3], - db->macAddr[4], - db->macAddr[5], - db->networkAddr[0], - db->networkAddr[1], - db->networkAddr[2], - db->networkAddr[3], - db->networkAddr[4], - db->networkAddr[5], - db->networkAddr[6], - db->networkAddr[7], - db->networkAddr[8], - db->networkAddr[9], - db->networkAddr[10], - db->networkAddr[11], - db->networkAddr[12], - db->networkAddr[13], - db->networkAddr[14], - db->networkAddr[15], - db->networkAddr[16]); - } - spin_unlock_bh(&priv->br_ext_lock); - return 1; - } - db = db->next_hash; - } - spin_unlock_bh(&priv->br_ext_lock); - return 0; -} - -static void __nat25_db_network_insert(struct adapter *priv, - unsigned char *macAddr, unsigned char *networkAddr) -{ - struct nat25_network_db_entry *db; - int hash; - - spin_lock_bh(&priv->br_ext_lock); - hash = __nat25_network_hash(networkAddr); - db = priv->nethash[hash]; - while (db != NULL) { - if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) { - ether_addr_copy(db->macAddr, macAddr); - db->ageing_timer = jiffies; - spin_unlock_bh(&priv->br_ext_lock); - return; - } - db = db->next_hash; - } - db = (struct nat25_network_db_entry *) rtw_malloc(sizeof(*db)); - if (db == NULL) { - spin_unlock_bh(&priv->br_ext_lock); - return; - } - memcpy(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN); - ether_addr_copy(db->macAddr, macAddr); - atomic_set(&db->use_count, 1); - db->ageing_timer = jiffies; - - __network_hash_link(priv, db, hash); - - spin_unlock_bh(&priv->br_ext_lock); -} - /* * NAT2.5 interface */ @@ -491,545 +303,6 @@ void nat25_db_expire(struct adapter *priv) spin_unlock_bh(&priv->br_ext_lock); } -int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) -{ - unsigned short protocol; - unsigned char networkAddr[MAX_NETWORK_ADDR_LEN]; - unsigned int tmp; - - if (skb == NULL) - return -1; - - if ((method <= NAT25_MIN) || (method >= NAT25_MAX)) - return -1; - - protocol = be16_to_cpu(*((__be16 *)(skb->data + 2 * ETH_ALEN))); - - /*---------------------------------------------------*/ - /* Handle IP frame */ - /*---------------------------------------------------*/ - if (protocol == ETH_P_IP) { - struct iphdr *iph = (struct iphdr *)(skb->data + ETH_HLEN); - - if (((unsigned char *)(iph) + (iph->ihl<<2)) >= (skb->data + ETH_HLEN + skb->len)) { - DEBUG_WARN("NAT25: malformed IP packet !\n"); - return -1; - } - - switch (method) { - case NAT25_CHECK: - return -1; - case NAT25_INSERT: - /* some multicast with source IP is all zero, maybe other case is illegal */ - /* in class A, B, C, host address is all zero or all one is illegal */ - if (iph->saddr == 0) - return 0; - tmp = be32_to_cpu(iph->saddr); - DEBUG_INFO("NAT25: Insert IP, SA =%08x, DA =%08x\n", tmp, iph->daddr); - __nat25_generate_ipv4_network_addr(networkAddr, &tmp); - /* record source IP address and , source mac address into db */ - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - - return 0; - case NAT25_LOOKUP: - DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr); - tmp = be32_to_cpu(iph->daddr); - __nat25_generate_ipv4_network_addr(networkAddr, &tmp); - - if (!__nat25_db_network_lookup_and_replace(priv, skb, networkAddr)) { - if (*((unsigned char *)&iph->daddr + 3) == 0xff) { - /* L2 is unicast but L3 is broadcast, make L2 bacome broadcast */ - DEBUG_INFO("NAT25: Set DA as broadcast\n"); - memset(skb->data, 0xff, ETH_ALEN); - } else { - /* forward unknown IP packet to upper TCP/IP */ - DEBUG_INFO("NAT25: Replace DA with BR's MAC\n"); - if ((*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0) { - netdev_info(skb->dev, - "Re-init netdev_br_init() due to br_mac == 0!\n"); - netdev_br_init(priv->pnetdev); - } - memcpy(skb->data, priv->br_mac, ETH_ALEN); - } - } - return 0; - default: - return -1; - } - } else if (protocol == ETH_P_ARP) { - /*---------------------------------------------------*/ - /* Handle ARP frame */ - /*---------------------------------------------------*/ - struct arphdr *arp = (struct arphdr *)(skb->data + ETH_HLEN); - unsigned char *arp_ptr = (unsigned char *)(arp + 1); - unsigned int *sender, *target; - - if (arp->ar_pro != __constant_htons(ETH_P_IP)) { - DEBUG_WARN("NAT25: arp protocol unknown (%4x)!\n", be16_to_cpu(arp->ar_pro)); - return -1; - } - - switch (method) { - case NAT25_CHECK: - return 0; /* skb_copy for all ARP frame */ - case NAT25_INSERT: - DEBUG_INFO("NAT25: Insert ARP, MAC =%02x%02x%02x%02x%02x%02x\n", arp_ptr[0], - arp_ptr[1], arp_ptr[2], arp_ptr[3], arp_ptr[4], arp_ptr[5]); - - /* change to ARP sender mac address to wlan STA address */ - memcpy(arp_ptr, GET_MY_HWADDR(priv), ETH_ALEN); - arp_ptr += arp->ar_hln; - sender = (unsigned int *)arp_ptr; - __nat25_generate_ipv4_network_addr(networkAddr, sender); - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - return 0; - case NAT25_LOOKUP: - DEBUG_INFO("NAT25: Lookup ARP\n"); - - arp_ptr += arp->ar_hln; - sender = (unsigned int *)arp_ptr; - arp_ptr += (arp->ar_hln + arp->ar_pln); - target = (unsigned int *)arp_ptr; - __nat25_generate_ipv4_network_addr(networkAddr, target); - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - /* change to ARP target mac address to Lookup result */ - arp_ptr = (unsigned char *)(arp + 1); - arp_ptr += (arp->ar_hln + arp->ar_pln); - memcpy(arp_ptr, skb->data, ETH_ALEN); - return 0; - default: - return -1; - } - } else if ((protocol == ETH_P_IPX) || - (protocol <= ETH_FRAME_LEN)) { - /*---------------------------------------------------*/ - /* Handle IPX and Apple Talk frame */ - /*---------------------------------------------------*/ - unsigned char ipx_header[2] = {0xFF, 0xFF}; - struct ipxhdr *ipx = NULL; - struct elapaarp *ea = NULL; - struct ddpehdr *ddp = NULL; - unsigned char *framePtr = skb->data + ETH_HLEN; - - if (protocol == ETH_P_IPX) { - DEBUG_INFO("NAT25: Protocol = IPX (Ethernet II)\n"); - ipx = (struct ipxhdr *)framePtr; - } else if (protocol <= ETH_FRAME_LEN) { - if (!memcmp(ipx_header, framePtr, 2)) { - DEBUG_INFO("NAT25: Protocol = IPX (Ethernet 802.3)\n"); - ipx = (struct ipxhdr *)framePtr; - } else { - unsigned char ipx_8022_type = 0xE0; - unsigned char snap_8022_type = 0xAA; - - if (*framePtr == snap_8022_type) { - unsigned char ipx_snap_id[5] = {0x0, 0x0, 0x0, 0x81, 0x37}; /* IPX SNAP ID */ - unsigned char aarp_snap_id[5] = {0x00, 0x00, 0x00, 0x80, 0xF3}; /* Apple Talk AARP SNAP ID */ - unsigned char ddp_snap_id[5] = {0x08, 0x00, 0x07, 0x80, 0x9B}; /* Apple Talk DDP SNAP ID */ - - framePtr += 3; /* eliminate the 802.2 header */ - - if (!memcmp(ipx_snap_id, framePtr, 5)) { - framePtr += 5; /* eliminate the SNAP header */ - - DEBUG_INFO("NAT25: Protocol = IPX (Ethernet SNAP)\n"); - ipx = (struct ipxhdr *)framePtr; - } else if (!memcmp(aarp_snap_id, framePtr, 5)) { - framePtr += 5; /* eliminate the SNAP header */ - - ea = (struct elapaarp *)framePtr; - } else if (!memcmp(ddp_snap_id, framePtr, 5)) { - framePtr += 5; /* eliminate the SNAP header */ - - ddp = (struct ddpehdr *)framePtr; - } else { - DEBUG_WARN("NAT25: Protocol = Ethernet SNAP %02x%02x%02x%02x%02x\n", framePtr[0], - framePtr[1], framePtr[2], framePtr[3], framePtr[4]); - return -1; - } - } else if (*framePtr == ipx_8022_type) { - framePtr += 3; /* eliminate the 802.2 header */ - - if (!memcmp(ipx_header, framePtr, 2)) { - DEBUG_INFO("NAT25: Protocol = IPX (Ethernet 802.2)\n"); - ipx = (struct ipxhdr *)framePtr; - } else { - return -1; - } - } else { - return -1; - } - } - } else { - return -1; - } - - /* IPX */ - if (ipx != NULL) { - switch (method) { - case NAT25_CHECK: - if (!memcmp(skb->data+ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) - DEBUG_INFO("NAT25: Check IPX skb_copy\n"); - return 0; - case NAT25_INSERT: - DEBUG_INFO("NAT25: Insert IPX, Dest =%08x,%02x%02x%02x%02x%02x%02x,%04x Source =%08x,%02x%02x%02x%02x%02x%02x,%04x\n", - ipx->ipx_dest.net, - ipx->ipx_dest.node[0], - ipx->ipx_dest.node[1], - ipx->ipx_dest.node[2], - ipx->ipx_dest.node[3], - ipx->ipx_dest.node[4], - ipx->ipx_dest.node[5], - ipx->ipx_dest.sock, - ipx->ipx_source.net, - ipx->ipx_source.node[0], - ipx->ipx_source.node[1], - ipx->ipx_source.node[2], - ipx->ipx_source.node[3], - ipx->ipx_source.node[4], - ipx->ipx_source.node[5], - ipx->ipx_source.sock); - - if (!memcmp(skb->data+ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) { - DEBUG_INFO("NAT25: Use IPX Net, and Socket as network addr\n"); - - __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_source.net, &ipx->ipx_source.sock); - - /* change IPX source node addr to wlan STA address */ - memcpy(ipx->ipx_source.node, GET_MY_HWADDR(priv), ETH_ALEN); - } else { - __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_source.net, ipx->ipx_source.node); - } - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - return 0; - case NAT25_LOOKUP: - if (!memcmp(GET_MY_HWADDR(priv), ipx->ipx_dest.node, ETH_ALEN)) { - DEBUG_INFO("NAT25: Lookup IPX, Modify Destination IPX Node addr\n"); - - __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_dest.net, &ipx->ipx_dest.sock); - - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - - /* replace IPX destination node addr with Lookup destination MAC addr */ - memcpy(ipx->ipx_dest.node, skb->data, ETH_ALEN); - } else { - __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_dest.net, ipx->ipx_dest.node); - - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - } - return 0; - default: - return -1; - } - } else if (ea != NULL) { - /* Sanity check fields. */ - if (ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN) { - DEBUG_WARN("NAT25: Appletalk AARP Sanity check fail!\n"); - return -1; - } - - switch (method) { - case NAT25_CHECK: - return 0; - case NAT25_INSERT: - /* change to AARP source mac address to wlan STA address */ - memcpy(ea->hw_src, GET_MY_HWADDR(priv), ETH_ALEN); - - DEBUG_INFO("NAT25: Insert AARP, Source =%d,%d Destination =%d,%d\n", - ea->pa_src_net, - ea->pa_src_node, - ea->pa_dst_net, - ea->pa_dst_node); - - __nat25_generate_apple_network_addr(networkAddr, &ea->pa_src_net, &ea->pa_src_node); - - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - - return 0; - case NAT25_LOOKUP: - DEBUG_INFO("NAT25: Lookup AARP, Source =%d,%d Destination =%d,%d\n", - ea->pa_src_net, - ea->pa_src_node, - ea->pa_dst_net, - ea->pa_dst_node); - - __nat25_generate_apple_network_addr(networkAddr, &ea->pa_dst_net, &ea->pa_dst_node); - - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - - /* change to AARP destination mac address to Lookup result */ - memcpy(ea->hw_dst, skb->data, ETH_ALEN); - return 0; - default: - return -1; - } - } else if (ddp != NULL) { - switch (method) { - case NAT25_CHECK: - return -1; - case NAT25_INSERT: - DEBUG_INFO("NAT25: Insert DDP, Source =%d,%d Destination =%d,%d\n", - ddp->deh_snet, - ddp->deh_snode, - ddp->deh_dnet, - ddp->deh_dnode); - - __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_snet, &ddp->deh_snode); - - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - - return 0; - case NAT25_LOOKUP: - DEBUG_INFO("NAT25: Lookup DDP, Source =%d,%d Destination =%d,%d\n", - ddp->deh_snet, - ddp->deh_snode, - ddp->deh_dnet, - ddp->deh_dnode); - __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_dnet, &ddp->deh_dnode); - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - return 0; - default: - return -1; - } - } - - return -1; - } else if ((protocol == ETH_P_PPP_DISC) || - (protocol == ETH_P_PPP_SES)) { - /*---------------------------------------------------*/ - /* Handle PPPoE frame */ - /*---------------------------------------------------*/ - struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN); - __be16 *pMagic; - - switch (method) { - case NAT25_CHECK: - if (ph->sid == 0) - return 0; - return 1; - case NAT25_INSERT: - if (ph->sid == 0) { /* Discovery phase according to tag */ - if (ph->code == PADI_CODE || ph->code == PADR_CODE) { - if (priv->ethBrExtInfo.addPPPoETag) { - struct pppoe_tag *tag, *pOldTag; - unsigned char tag_buf[40]; - int old_tag_len = 0; - - tag = (struct pppoe_tag *)tag_buf; - pOldTag = (struct pppoe_tag *)__nat25_find_pppoe_tag(ph, ntohs(PTT_RELAY_SID)); - if (pOldTag) { /* if SID existed, copy old value and delete it */ - old_tag_len = ntohs(pOldTag->tag_len); - if (old_tag_len+TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN > sizeof(tag_buf)) { - DEBUG_ERR("SID tag length too long!\n"); - return -1; - } - - memcpy(tag->tag_data+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN, - pOldTag->tag_data, old_tag_len); - - if (skb_pull_and_merge(skb, (unsigned char *)pOldTag, TAG_HDR_LEN+old_tag_len) < 0) { - DEBUG_ERR("call skb_pull_and_merge() failed in PADI/R packet!\n"); - return -1; - } - ph->length = htons(ntohs(ph->length)-TAG_HDR_LEN-old_tag_len); - } - - tag->tag_type = PTT_RELAY_SID; - tag->tag_len = htons(MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN+old_tag_len); - - /* insert the magic_code+client mac in relay tag */ - pMagic = (__be16 *)tag->tag_data; - *pMagic = htons(MAGIC_CODE); - memcpy(tag->tag_data+MAGIC_CODE_LEN, skb->data+ETH_ALEN, ETH_ALEN); - - /* Add relay tag */ - if (__nat25_add_pppoe_tag(skb, tag) < 0) - return -1; - - DEBUG_INFO("NAT25: Insert PPPoE, forward %s packet\n", - (ph->code == PADI_CODE ? "PADI" : "PADR")); - } else { /* not add relay tag */ - if (priv->pppoe_connection_in_progress && - memcmp(skb->data+ETH_ALEN, priv->pppoe_addr, ETH_ALEN)) { - DEBUG_ERR("Discard PPPoE packet due to another PPPoE connection is in progress!\n"); - return -2; - } - - if (priv->pppoe_connection_in_progress == 0) - memcpy(priv->pppoe_addr, skb->data+ETH_ALEN, ETH_ALEN); - - priv->pppoe_connection_in_progress = WAIT_TIME_PPPOE; - } - } else { - return -1; - } - } else { /* session phase */ - DEBUG_INFO("NAT25: Insert PPPoE, insert session packet to %s\n", skb->dev->name); - - __nat25_generate_pppoe_network_addr(networkAddr, skb->data, &(ph->sid)); - - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - - - if (!priv->ethBrExtInfo.addPPPoETag && - priv->pppoe_connection_in_progress && - !memcmp(skb->data+ETH_ALEN, priv->pppoe_addr, ETH_ALEN)) - priv->pppoe_connection_in_progress = 0; - } - return 0; - case NAT25_LOOKUP: - if (ph->code == PADO_CODE || ph->code == PADS_CODE) { - if (priv->ethBrExtInfo.addPPPoETag) { - struct pppoe_tag *tag; - unsigned char *ptr; - unsigned short tagType, tagLen; - int offset = 0; - - ptr = __nat25_find_pppoe_tag(ph, ntohs(PTT_RELAY_SID)); - if (ptr == NULL) { - DEBUG_ERR("Fail to find PTT_RELAY_SID in FADO!\n"); - return -1; - } - - tag = (struct pppoe_tag *)ptr; - tagType = (unsigned short)((ptr[0] << 8) + ptr[1]); - tagLen = (unsigned short)((ptr[2] << 8) + ptr[3]); - - if ((tagType != ntohs(PTT_RELAY_SID)) || (tagLen < (MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN))) { - DEBUG_ERR("Invalid PTT_RELAY_SID tag length [%d]!\n", tagLen); - return -1; - } - - pMagic = (__be16 *)tag->tag_data; - if (ntohs(*pMagic) != MAGIC_CODE) { - DEBUG_ERR("Can't find MAGIC_CODE in %s packet!\n", - (ph->code == PADO_CODE ? "PADO" : "PADS")); - return -1; - } - - memcpy(skb->data, tag->tag_data+MAGIC_CODE_LEN, ETH_ALEN); - - if (tagLen > MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN) - offset = TAG_HDR_LEN; - - if (skb_pull_and_merge(skb, ptr+offset, TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset) < 0) { - DEBUG_ERR("call skb_pull_and_merge() failed in PADO packet!\n"); - return -1; - } - ph->length = htons(ntohs(ph->length)-(TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset)); - if (offset > 0) - tag->tag_len = htons(tagLen-MAGIC_CODE_LEN-RTL_RELAY_TAG_LEN); - - DEBUG_INFO("NAT25: Lookup PPPoE, forward %s Packet from %s\n", - (ph->code == PADO_CODE ? "PADO" : "PADS"), skb->dev->name); - } else { /* not add relay tag */ - if (!priv->pppoe_connection_in_progress) { - DEBUG_ERR("Discard PPPoE packet due to no connection in progress!\n"); - return -1; - } - memcpy(skb->data, priv->pppoe_addr, ETH_ALEN); - priv->pppoe_connection_in_progress = WAIT_TIME_PPPOE; - } - } else { - if (ph->sid != 0) { - DEBUG_INFO("NAT25: Lookup PPPoE, lookup session packet from %s\n", skb->dev->name); - __nat25_generate_pppoe_network_addr(networkAddr, skb->data+ETH_ALEN, &(ph->sid)); - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - } else { - return -1; - } - } - return 0; - default: - return -1; - } - } else if (protocol == 0x888e) { - /*---------------------------------------------------*/ - /* Handle EAP frame */ - /*---------------------------------------------------*/ - switch (method) { - case NAT25_CHECK: - return -1; - case NAT25_INSERT: - return 0; - case NAT25_LOOKUP: - return 0; - default: - return -1; - } - } else if ((protocol == 0xe2ae) || (protocol == 0xe2af)) { - /*---------------------------------------------------*/ - /* Handle C-Media proprietary frame */ - /*---------------------------------------------------*/ - switch (method) { - case NAT25_CHECK: - return -1; - case NAT25_INSERT: - return 0; - case NAT25_LOOKUP: - return 0; - default: - return -1; - } - } else if (protocol == ETH_P_IPV6) { - /*------------------------------------------------*/ - /* Handle IPV6 frame */ - /*------------------------------------------------*/ - struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + ETH_HLEN); - - if (sizeof(*iph) >= (skb->len - ETH_HLEN)) { - DEBUG_WARN("NAT25: malformed IPv6 packet !\n"); - return -1; - } - - switch (method) { - case NAT25_CHECK: - if (skb->data[0] & 1) - return 0; - return -1; - case NAT25_INSERT: - DEBUG_INFO("NAT25: Insert IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x," - " DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n", - iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3], - iph->saddr.s6_addr16[4], iph->saddr.s6_addr16[5], iph->saddr.s6_addr16[6], iph->saddr.s6_addr16[7], - iph->daddr.s6_addr16[0], iph->daddr.s6_addr16[1], iph->daddr.s6_addr16[2], iph->daddr.s6_addr16[3], - iph->daddr.s6_addr16[4], iph->daddr.s6_addr16[5], iph->daddr.s6_addr16[6], iph->daddr.s6_addr16[7]); - - if (memcmp(&iph->saddr, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0", 16)) { - __nat25_generate_ipv6_network_addr(networkAddr, (__be32 *)&iph->saddr); - __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr); - - if (iph->nexthdr == IPPROTO_ICMPV6 && - skb->len > (ETH_HLEN + sizeof(*iph) + 4)) { - if (update_nd_link_layer_addr(skb->data + ETH_HLEN + sizeof(*iph), - skb->len - ETH_HLEN - sizeof(*iph), GET_MY_HWADDR(priv))) { - struct icmp6hdr *hdr = (struct icmp6hdr *)(skb->data + ETH_HLEN + sizeof(*iph)); - hdr->icmp6_cksum = 0; - hdr->icmp6_cksum = csum_ipv6_magic(&iph->saddr, &iph->daddr, - be16_to_cpu(iph->payload_len), - IPPROTO_ICMPV6, - csum_partial((__u8 *)hdr, - be16_to_cpu(iph->payload_len), 0)); - } - } - } - return 0; - case NAT25_LOOKUP: - DEBUG_INFO("NAT25: Lookup IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x, DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n", - iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3], - iph->saddr.s6_addr16[4], iph->saddr.s6_addr16[5], iph->saddr.s6_addr16[6], iph->saddr.s6_addr16[7], - iph->daddr.s6_addr16[0], iph->daddr.s6_addr16[1], iph->daddr.s6_addr16[2], iph->daddr.s6_addr16[3], - iph->daddr.s6_addr16[4], iph->daddr.s6_addr16[5], iph->daddr.s6_addr16[6], iph->daddr.s6_addr16[7]); - __nat25_generate_ipv6_network_addr(networkAddr, (__be32 *)&iph->daddr); - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); - return 0; - default: - return -1; - } - } - return -1; -} - #define SERVER_PORT 67 #define CLIENT_PORT 68 #define DHCP_MAGIC 0x63825363 diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h index 292ded7c2bb3..8036c3873fda 100644 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ b/drivers/staging/rtl8188eu/include/usb_osintf.h @@ -34,7 +34,6 @@ void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb); void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, unsigned char *ipAddr); void nat25_db_expire(struct adapter *priv); -int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method); int rtw_resume_process(struct adapter *padapter); -- cgit From dc69f11cf1daecd6b602b6c49001207bef459ce4 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:40 +0530 Subject: staging: rtl8188eu: Remove function nat25_db_cleanup() We've removed the code which was responsible for building NAT table, so no use of keeping nat_db_cleanup(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_br_ext.c | 26 -------------------------- drivers/staging/rtl8188eu/core/rtw_cmd.c | 3 +-- drivers/staging/rtl8188eu/include/rtw_br_ext.h | 2 -- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 2 -- 4 files changed, 1 insertion(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c index 86899125ea59..b0b1af99e9c2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_br_ext.c @@ -247,32 +247,6 @@ static inline void __network_hash_unlink(struct nat25_network_db_entry *ent) * NAT2.5 interface */ -void nat25_db_cleanup(struct adapter *priv) -{ - int i; - - spin_lock_bh(&priv->br_ext_lock); - - for (i = 0; i < NAT25_HASH_SIZE; i++) { - struct nat25_network_db_entry *f; - f = priv->nethash[i]; - while (f != NULL) { - struct nat25_network_db_entry *g; - - g = f->next_hash; - if (priv->scdb_entry == f) { - memset(priv->scdb_mac, 0, ETH_ALEN); - memset(priv->scdb_ip, 0, 4); - priv->scdb_entry = NULL; - } - __network_hash_unlink(f); - kfree(f); - f = g; - } - } - spin_unlock_bh(&priv->br_ext_lock); -} - void nat25_db_expire(struct adapter *priv) { int i; diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 25f1c36e59b0..bb4c703c90e2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -2059,8 +2059,7 @@ void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd) RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\n ***Error: disconnect_cmd_callback Fail ***\n.")); return; - } else /* clear bridge database */ - nat25_db_cleanup(padapter); + } /* free cmd */ rtw_free_cmd_obj(pcmd); diff --git a/drivers/staging/rtl8188eu/include/rtw_br_ext.h b/drivers/staging/rtl8188eu/include/rtw_br_ext.h index f21e7a4515d0..f0b2a204bb9c 100644 --- a/drivers/staging/rtl8188eu/include/rtw_br_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_br_ext.h @@ -61,6 +61,4 @@ struct br_ext_info { unsigned int nat25sc_disable; }; -void nat25_db_cleanup(struct adapter *priv); - #endif /* _RTW_BR_EXT_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 34f73706e485..43eaba09edb2 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -1228,8 +1228,6 @@ int netdev_close(struct net_device *pnetdev) rtw_led_control(padapter, LED_CTL_POWER_OFF); } - nat25_db_cleanup(padapter); - #ifdef CONFIG_88EU_P2P rtw_p2p_enable(padapter, P2P_ROLE_DISABLE); #endif /* CONFIG_88EU_P2P */ -- cgit From 5605da1754b36a5d3552291b09f89817c12e0ab8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:41 +0530 Subject: staging: rtl8188eu: Remove pppoe_connection_in_progress from struct adapter Value stored in pppoe_connection_in_progress isn't being used by driver. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 7 ------- drivers/staging/rtl8188eu/include/drv_types.h | 1 - 2 files changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 260243b6cb74..e0e119cd11dd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1546,13 +1546,6 @@ void rtw_dynamic_check_timer_handlder(struct adapter *adapter) (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == true)) { /* expire NAT2.5 entry */ nat25_db_expire(adapter); - - if (adapter->pppoe_connection_in_progress > 0) - adapter->pppoe_connection_in_progress--; - - /* due to rtw_dynamic_check_timer_handlder() is called every 2 seconds */ - if (adapter->pppoe_connection_in_progress > 0) - adapter->pppoe_connection_in_progress--; } rcu_read_unlock(); diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 9c3f905a2f11..71b4af7c52cb 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -256,7 +256,6 @@ struct adapter { spinlock_t br_ext_lock; struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE]; - int pppoe_connection_in_progress; unsigned char pppoe_addr[MACADDRLEN]; unsigned char scdb_mac[MACADDRLEN]; unsigned char scdb_ip[4]; -- cgit From 7bf08a848d177b3395747892a405b1fbf480ec55 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:42 +0530 Subject: staging: rtl8188eu: Remove function nat25_db_expire() We've removed the code which was responsible for building NAT table, so no use of keeping nat_db_expire(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 11 ----------- drivers/staging/rtl8188eu/include/usb_osintf.h | 1 - 2 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index e0e119cd11dd..e73a784d5f17 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1516,7 +1516,6 @@ static void rtw_auto_scan_handler(struct adapter *padapter) void rtw_dynamic_check_timer_handlder(struct adapter *adapter) { - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct registry_priv *pregistrypriv = &adapter->registrypriv; if (!adapter) @@ -1539,16 +1538,6 @@ void rtw_dynamic_check_timer_handlder(struct adapter *adapter) rtw_auto_scan_handler(adapter); } } - - rcu_read_lock(); - - if (rcu_dereference(adapter->pnetdev->rx_handler_data) && - (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == true)) { - /* expire NAT2.5 entry */ - nat25_db_expire(adapter); - } - - rcu_read_unlock(); } #define RTW_SCAN_RESULT_EXPIRE 2000 diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h index 8036c3873fda..484411fd7411 100644 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ b/drivers/staging/rtl8188eu/include/usb_osintf.h @@ -33,7 +33,6 @@ void netdev_br_init(struct net_device *netdev); void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb); void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, unsigned char *ipAddr); -void nat25_db_expire(struct adapter *priv); int rtw_resume_process(struct adapter *padapter); -- cgit From 85955ec98a52d2aa706dbb227369cbe0109aef07 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:43 +0530 Subject: staging: rtl8188eu: Remove function netdev_br_init() netdev_br_init() tries to find MAC address of network interface named "br0", then that MAC address is assigned to adapter->br_netdev and used by driver's NAT implementation code. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_osintf.h | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 28 -------------------------- 2 files changed, 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h index 484411fd7411..85805cad682f 100644 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ b/drivers/staging/rtl8188eu/include/usb_osintf.h @@ -29,7 +29,6 @@ extern int rtw_mc2u_disable; #define USBD_HALTED(Status) ((u32)(Status) >> 30 == 3) int pm_netdev_open(struct net_device *pnetdev, u8 bnormal); -void netdev_br_init(struct net_device *netdev); void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb); void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, unsigned char *ipAddr); diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 43eaba09edb2..1c30f4c42184 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -36,7 +36,6 @@ MODULE_DESCRIPTION("Realtek Wireless Lan Driver"); MODULE_AUTHOR("Realtek Semiconductor Corp."); MODULE_VERSION(DRIVERVERSION); -#define CONFIG_BR_EXT_BRNAME "br0" #define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */ /* module param defaults */ @@ -1001,31 +1000,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter) return _SUCCESS; } -void netdev_br_init(struct net_device *netdev) -{ - struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev); - - rcu_read_lock(); - - if (rcu_dereference(adapter->pnetdev->rx_handler_data)) { - struct net_device *br_netdev; - struct net *devnet = NULL; - - devnet = dev_net(netdev); - br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME); - if (br_netdev) { - memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN); - dev_put(br_netdev); - } else { - pr_info("%s()-%d: dev_get_by_name(%s) failed!", - __func__, __LINE__, CONFIG_BR_EXT_BRNAME); - } - } - adapter->ethBrExtInfo.addPPPoETag = 1; - - rcu_read_unlock(); -} - int _netdev_open(struct net_device *pnetdev) { uint status; @@ -1082,8 +1056,6 @@ int _netdev_open(struct net_device *pnetdev) else netif_tx_wake_all_queues(pnetdev); - netdev_br_init(pnetdev); - netdev_open_normal_process: RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-88eu_drv - dev_open\n")); DBG_88E("-88eu_drv - drv_open, bup =%d\n", padapter->bup); -- cgit From a7f5f2777f4b1d98e4d6682458dbc13c1f9fe103 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:44 +0530 Subject: staging: rtl8188eu: core: Remove file rtw_br_ext.c functions defined in rtw_br_ext.c are not being used by driver anymore. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/core/rtw_br_ext.c | 365 ---------------------------- 2 files changed, 366 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/core/rtw_br_ext.c (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index b2030894b7be..74a032cf00d1 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -1,6 +1,5 @@ r8188eu-y := \ core/rtw_ap.o \ - core/rtw_br_ext.o \ core/rtw_cmd.o \ core/rtw_debug.o \ core/rtw_efuse.o \ diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c deleted file mode 100644 index b0b1af99e9c2..000000000000 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ /dev/null @@ -1,365 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTW_BR_EXT_C_ - -#include -#include -#include -#include -#include -#include - -#include -#include "rtw_br_ext.h" -#include -#include - -#ifndef csum_ipv6_magic -#include -#endif - -#include -#include -#include -#include - -#define NAT25_IPV4 01 -#define NAT25_IPV6 02 -#define NAT25_IPX 03 -#define NAT25_APPLE 04 -#define NAT25_PPPOE 05 - -#define RTL_RELAY_TAG_LEN (ETH_ALEN) -#define TAG_HDR_LEN 4 - -#define MAGIC_CODE 0x8186 -#define MAGIC_CODE_LEN 2 -#define WAIT_TIME_PPPOE 5 /* waiting time for pppoe server in sec */ - -/*----------------------------------------------------------------- - How database records network address: - 0 1 2 3 4 5 6 7 8 9 10 - |----|----|----|----|----|----|----|----|----|----|----| - IPv4 |type| | IP addr | - IPX |type| Net addr | Node addr | - IPX |type| Net addr |Sckt addr| - Apple |type| Network |node| - PPPoE |type| SID | AC MAC | ------------------------------------------------------------------*/ - - -/* Find a tag in pppoe frame and return the pointer */ -static inline unsigned char *__nat25_find_pppoe_tag(struct pppoe_hdr *ph, unsigned short type) -{ - unsigned char *cur_ptr, *start_ptr; - unsigned short tagLen, tagType; - - start_ptr = cur_ptr = (unsigned char *)ph->tag; - while ((cur_ptr - start_ptr) < ntohs(ph->length)) { - /* prevent un-alignment access */ - tagType = (unsigned short)((cur_ptr[0] << 8) + cur_ptr[1]); - tagLen = (unsigned short)((cur_ptr[2] << 8) + cur_ptr[3]); - if (tagType == type) - return cur_ptr; - cur_ptr = cur_ptr + TAG_HDR_LEN + tagLen; - } - return NULL; -} - - -static inline int __nat25_add_pppoe_tag(struct sk_buff *skb, struct pppoe_tag *tag) -{ - struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN); - int data_len; - - data_len = be16_to_cpu(tag->tag_len) + TAG_HDR_LEN; - if (skb_tailroom(skb) < data_len) { - _DEBUG_ERR("skb_tailroom() failed in add SID tag!\n"); - return -1; - } - - skb_put(skb, data_len); - /* have a room for new tag */ - memmove(((unsigned char *)ph->tag + data_len), (unsigned char *)ph->tag, ntohs(ph->length)); - ph->length = htons(ntohs(ph->length) + data_len); - memcpy((unsigned char *)ph->tag, tag, data_len); - return data_len; -} - -static inline unsigned long __nat25_timeout(struct adapter *priv) -{ - unsigned long timeout; - - timeout = jiffies - NAT25_AGEING_TIME*HZ; - - return timeout; -} - - -static inline int __nat25_has_expired(struct adapter *priv, - struct nat25_network_db_entry *fdb) -{ - if (time_before_eq(fdb->ageing_timer, __nat25_timeout(priv))) - return 1; - - return 0; -} - - -static inline void __nat25_generate_ipv4_network_addr(unsigned char *networkAddr, - unsigned int *ipAddr) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_IPV4; - memcpy(networkAddr+7, (unsigned char *)ipAddr, 4); -} - - -static inline void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr, - __be32 *ipxNetAddr, unsigned char *ipxNodeAddr) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_IPX; - memcpy(networkAddr+1, (unsigned char *)ipxNetAddr, 4); - memcpy(networkAddr+5, ipxNodeAddr, 6); -} - - -static inline void __nat25_generate_ipx_network_addr_with_socket(unsigned char *networkAddr, - __be32 *ipxNetAddr, __be16 *ipxSocketAddr) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_IPX; - memcpy(networkAddr+1, (unsigned char *)ipxNetAddr, 4); - memcpy(networkAddr+5, (unsigned char *)ipxSocketAddr, 2); -} - - -static inline void __nat25_generate_apple_network_addr(unsigned char *networkAddr, - __be16 *network, unsigned char *node) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_APPLE; - memcpy(networkAddr+1, (unsigned char *)network, 2); - networkAddr[3] = *node; -} - -static inline void __nat25_generate_pppoe_network_addr(unsigned char *networkAddr, - unsigned char *ac_mac, __be16 *sid) -{ - memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN); - - networkAddr[0] = NAT25_PPPOE; - memcpy(networkAddr+1, (unsigned char *)sid, 2); - memcpy(networkAddr+3, (unsigned char *)ac_mac, 6); -} - -static inline int __nat25_network_hash(unsigned char *networkAddr) -{ - if (networkAddr[0] == NAT25_IPV4) { - unsigned long x; - - x = networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10]; - - return x & (NAT25_HASH_SIZE - 1); - } else if (networkAddr[0] == NAT25_IPX) { - unsigned long x; - - x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^ - networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10]; - - return x & (NAT25_HASH_SIZE - 1); - } else if (networkAddr[0] == NAT25_APPLE) { - unsigned long x; - - x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3]; - - return x & (NAT25_HASH_SIZE - 1); - } else if (networkAddr[0] == NAT25_PPPOE) { - unsigned long x; - - x = networkAddr[0] ^ networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^ networkAddr[6] ^ networkAddr[7] ^ networkAddr[8]; - - return x & (NAT25_HASH_SIZE - 1); - } else if (networkAddr[0] == NAT25_IPV6) { - unsigned long x; - - x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^ - networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10] ^ - networkAddr[11] ^ networkAddr[12] ^ networkAddr[13] ^ networkAddr[14] ^ networkAddr[15] ^ - networkAddr[16]; - - return x & (NAT25_HASH_SIZE - 1); - } else { - unsigned long x = 0; - int i; - - for (i = 0; i < MAX_NETWORK_ADDR_LEN; i++) - x ^= networkAddr[i]; - - return x & (NAT25_HASH_SIZE - 1); - } -} - -static inline void __network_hash_link(struct adapter *priv, - struct nat25_network_db_entry *ent, int hash) -{ - /* Caller must spin_lock_bh already! */ - ent->next_hash = priv->nethash[hash]; - if (ent->next_hash != NULL) - ent->next_hash->pprev_hash = &ent->next_hash; - priv->nethash[hash] = ent; - ent->pprev_hash = &priv->nethash[hash]; -} - -static inline void __network_hash_unlink(struct nat25_network_db_entry *ent) -{ - /* Caller must spin_lock_bh already! */ - *(ent->pprev_hash) = ent->next_hash; - if (ent->next_hash != NULL) - ent->next_hash->pprev_hash = ent->pprev_hash; - ent->next_hash = NULL; - ent->pprev_hash = NULL; -} - -/* - * NAT2.5 interface - */ - -void nat25_db_expire(struct adapter *priv) -{ - int i; - spin_lock_bh(&priv->br_ext_lock); - - for (i = 0; i < NAT25_HASH_SIZE; i++) { - struct nat25_network_db_entry *f; - f = priv->nethash[i]; - - while (f != NULL) { - struct nat25_network_db_entry *g; - g = f->next_hash; - - if (__nat25_has_expired(priv, f)) { - if (atomic_dec_and_test(&f->use_count)) { - if (priv->scdb_entry == f) { - memset(priv->scdb_mac, 0, ETH_ALEN); - memset(priv->scdb_ip, 0, 4); - priv->scdb_entry = NULL; - } - __network_hash_unlink(f); - kfree(f); - } - } - f = g; - } - } - spin_unlock_bh(&priv->br_ext_lock); -} - -#define SERVER_PORT 67 -#define CLIENT_PORT 68 -#define DHCP_MAGIC 0x63825363 -#define BROADCAST_FLAG 0x8000 - -struct dhcpMessage { - u_int8_t op; - u_int8_t htype; - u_int8_t hlen; - u_int8_t hops; - __be32 xid; - __be16 secs; - __be16 flags; - __be32 ciaddr; - __be32 yiaddr; - __be32 siaddr; - __be32 giaddr; - u_int8_t chaddr[16]; - u_int8_t sname[64]; - u_int8_t file[128]; - __be32 cookie; - u_int8_t options[308]; /* 312 - cookie */ -}; - -void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb) -{ - if (skb == NULL) - return; - - if (!priv->ethBrExtInfo.dhcp_bcst_disable) { - __be16 protocol = *((__be16 *)(skb->data + 2 * ETH_ALEN)); - - if (protocol == __constant_htons(ETH_P_IP)) { /* IP */ - struct iphdr *iph = (struct iphdr *)(skb->data + ETH_HLEN); - - if (iph->protocol == IPPROTO_UDP) { /* UDP */ - struct udphdr *udph = (struct udphdr *)((size_t)iph + (iph->ihl << 2)); - - if ((udph->source == __constant_htons(CLIENT_PORT)) && - (udph->dest == __constant_htons(SERVER_PORT))) { /* DHCP request */ - struct dhcpMessage *dhcph = - (struct dhcpMessage *)((size_t)udph + sizeof(struct udphdr)); - u32 cookie = be32_to_cpu((__be32)dhcph->cookie); - - if (cookie == DHCP_MAGIC) { /* match magic word */ - if (!(dhcph->flags & htons(BROADCAST_FLAG))) { - /* if not broadcast */ - register int sum = 0; - - DEBUG_INFO("DHCP: change flag of DHCP request to broadcast.\n"); - /* or BROADCAST flag */ - dhcph->flags |= htons(BROADCAST_FLAG); - /* recalculate checksum */ - sum = ~(udph->check) & 0xffff; - sum += be16_to_cpu(dhcph->flags); - while (sum >> 16) - sum = (sum & 0xffff) + (sum >> 16); - udph->check = ~sum; - } - } - } - } - } - } -} - - -void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, - unsigned char *ipAddr) -{ - unsigned char networkAddr[MAX_NETWORK_ADDR_LEN]; - struct nat25_network_db_entry *db; - int hash; - - __nat25_generate_ipv4_network_addr(networkAddr, (unsigned int *)ipAddr); - hash = __nat25_network_hash(networkAddr); - db = priv->nethash[hash]; - while (db != NULL) { - if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) - return (void *)db; - - db = db->next_hash; - } - - return NULL; -} -- cgit From b0f63cf34bac35eb307ffb9fff7ec129eb719f51 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:45 +0530 Subject: staging: rtl8188eu: Remove unused members of struct adapter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 71b4af7c52cb..baafe3323f28 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -255,14 +255,6 @@ struct adapter { struct mutex hw_init_mutex; spinlock_t br_ext_lock; - struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE]; - unsigned char pppoe_addr[MACADDRLEN]; - unsigned char scdb_mac[MACADDRLEN]; - unsigned char scdb_ip[4]; - struct nat25_network_db_entry *scdb_entry; - unsigned char br_mac[MACADDRLEN]; - unsigned char br_ip[4]; - struct br_ext_info ethBrExtInfo; u8 fix_rate; -- cgit From 2b3cffc9314d1c3e60a0ebccc366df1ada6e524e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 16 Jun 2014 21:35:46 +0530 Subject: staging: rtl8188eu: Remove file rtw_br_ext.h driver doesn't need rtw_br_ext.h any more. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 1 - drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/include/rtw_br_ext.h | 64 -------------------------- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 - 4 files changed, 67 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/rtw_br_ext.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index bb4c703c90e2..238469544717 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -24,7 +24,6 @@ #include #include #include -#include #include /* diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index baafe3323f28..67501352fd66 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -51,7 +51,6 @@ #include #include #include -#include #define SPEC_DEV_ID_NONE BIT(0) #define SPEC_DEV_ID_DISABLE_HT BIT(1) diff --git a/drivers/staging/rtl8188eu/include/rtw_br_ext.h b/drivers/staging/rtl8188eu/include/rtw_br_ext.h deleted file mode 100644 index f0b2a204bb9c..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_br_ext.h +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_BR_EXT_H_ -#define _RTW_BR_EXT_H_ - -#define MACADDRLEN 6 -#define _DEBUG_ERR DBG_88E -#define _DEBUG_INFO DBG_88E -#define DEBUG_WARN DBG_88E -#define DEBUG_INFO DBG_88E -#define DEBUG_ERR DBG_88E -#define GET_MY_HWADDR(padapter) ((padapter)->eeprompriv.mac_addr) - -#define NAT25_HASH_BITS 4 -#define NAT25_HASH_SIZE (1 << NAT25_HASH_BITS) -#define NAT25_AGEING_TIME 300 - -#define MAX_NETWORK_ADDR_LEN 17 - -struct nat25_network_db_entry { - struct nat25_network_db_entry *next_hash; - struct nat25_network_db_entry **pprev_hash; - atomic_t use_count; - unsigned char macAddr[6]; - unsigned long ageing_timer; - unsigned char networkAddr[MAX_NETWORK_ADDR_LEN]; -}; - -enum NAT25_METHOD { - NAT25_MIN, - NAT25_CHECK, - NAT25_INSERT, - NAT25_LOOKUP, - NAT25_PARSE, - NAT25_MAX -}; - -struct br_ext_info { - unsigned int nat25_disable; - unsigned int macclone_enable; - unsigned int dhcp_bcst_disable; - int addPPPoETag; /* 1: Add PPPoE relay-SID, 0: disable */ - unsigned char nat25_dmzMac[MACADDRLEN]; - unsigned int nat25sc_disable; -}; - -#endif /* _RTW_BR_EXT_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 1c30f4c42184..e19ec25b09dc 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -29,7 +29,6 @@ #include #include -#include MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Realtek Wireless Lan Driver"); -- cgit From d10e4ffd64a19d88f085e92a4b0a2470aa336915 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 30 May 2014 10:26:27 +0900 Subject: staging: ion: remove order from struct page_info ION system heap uses an internal data structure, struct page_info, for tracking down the meta information of the pages allocated from the pool. Now that the pool returns compound pages, we don't need to store page order in struct page_info. Signed-off-by: Heesub Shin Reviewed-by: Mitchel Humpherys Tested-by: John Stultz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_system_heap.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c index cb7ae08a5e24..621b857eae6b 100644 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/ion_system_heap.c @@ -54,7 +54,6 @@ struct ion_system_heap { struct page_info { struct page *page; - unsigned int order; struct list_head list; }; @@ -123,7 +122,6 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap, continue; info->page = page; - info->order = orders[i]; return info; } kfree(info); @@ -160,8 +158,8 @@ static int ion_system_heap_allocate(struct ion_heap *heap, if (!info) goto free_pages; list_add_tail(&info->list, &pages); - size_remaining -= PAGE_SIZE << info->order; - max_order = info->order; + size_remaining -= PAGE_SIZE << compound_order(info->page); + max_order = compound_order(info->page); i++; } table = kmalloc(sizeof(struct sg_table), GFP_KERNEL); @@ -174,7 +172,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap, sg = table->sgl; list_for_each_entry_safe(info, tmp_info, &pages, list) { struct page *page = info->page; - sg_set_page(sg, page, PAGE_SIZE << info->order, 0); + sg_set_page(sg, page, PAGE_SIZE << compound_order(page), 0); sg = sg_next(sg); list_del(&info->list); kfree(info); @@ -187,7 +185,8 @@ free_table: kfree(table); free_pages: list_for_each_entry_safe(info, tmp_info, &pages, list) { - free_buffer_page(sys_heap, buffer, info->page, info->order); + free_buffer_page(sys_heap, buffer, info->page, + compound_order(info->page)); kfree(info); } return -ENOMEM; -- cgit From 7eb88bffbd883fa78944799ff3887da916159a59 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 30 May 2014 10:26:28 +0900 Subject: staging: ion: remove struct page_info ION system heap creates a temporary list of pages to build scatter/gather table, introducing an internal data type, page_info. Now that the order field has been removed from it, we do not need to depend on such data type anymore. Signed-off-by: Heesub Shin Reviewed-by: Mitchel Humpherys Tested-by: John Stultz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_system_heap.c | 47 +++++++++------------------ 1 file changed, 15 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c index 621b857eae6b..f3b9008f90cb 100644 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/ion_system_heap.c @@ -52,11 +52,6 @@ struct ion_system_heap { struct ion_page_pool **pools; }; -struct page_info { - struct page *page; - struct list_head list; -}; - static struct page *alloc_buffer_page(struct ion_system_heap *heap, struct ion_buffer *buffer, unsigned long order) @@ -98,19 +93,14 @@ static void free_buffer_page(struct ion_system_heap *heap, } -static struct page_info *alloc_largest_available(struct ion_system_heap *heap, - struct ion_buffer *buffer, - unsigned long size, - unsigned int max_order) +static struct page *alloc_largest_available(struct ion_system_heap *heap, + struct ion_buffer *buffer, + unsigned long size, + unsigned int max_order) { struct page *page; - struct page_info *info; int i; - info = kmalloc(sizeof(struct page_info), GFP_KERNEL); - if (!info) - return NULL; - for (i = 0; i < num_orders; i++) { if (size < order_to_size(orders[i])) continue; @@ -121,10 +111,8 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap, if (!page) continue; - info->page = page; - return info; + return page; } - kfree(info); return NULL; } @@ -140,7 +128,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap, struct sg_table *table; struct scatterlist *sg; struct list_head pages; - struct page_info *info, *tmp_info; + struct page *page, *tmp_page; int i = 0; unsigned long size_remaining = PAGE_ALIGN(size); unsigned int max_order = orders[0]; @@ -153,13 +141,13 @@ static int ion_system_heap_allocate(struct ion_heap *heap, INIT_LIST_HEAD(&pages); while (size_remaining > 0) { - info = alloc_largest_available(sys_heap, buffer, size_remaining, + page = alloc_largest_available(sys_heap, buffer, size_remaining, max_order); - if (!info) + if (!page) goto free_pages; - list_add_tail(&info->list, &pages); - size_remaining -= PAGE_SIZE << compound_order(info->page); - max_order = compound_order(info->page); + list_add_tail(&page->lru, &pages); + size_remaining -= PAGE_SIZE << compound_order(page); + max_order = compound_order(page); i++; } table = kmalloc(sizeof(struct sg_table), GFP_KERNEL); @@ -170,12 +158,10 @@ static int ion_system_heap_allocate(struct ion_heap *heap, goto free_table; sg = table->sgl; - list_for_each_entry_safe(info, tmp_info, &pages, list) { - struct page *page = info->page; + list_for_each_entry_safe(page, tmp_page, &pages, lru) { sg_set_page(sg, page, PAGE_SIZE << compound_order(page), 0); sg = sg_next(sg); - list_del(&info->list); - kfree(info); + list_del(&page->lru); } buffer->priv_virt = table; @@ -184,11 +170,8 @@ static int ion_system_heap_allocate(struct ion_heap *heap, free_table: kfree(table); free_pages: - list_for_each_entry_safe(info, tmp_info, &pages, list) { - free_buffer_page(sys_heap, buffer, info->page, - compound_order(info->page)); - kfree(info); - } + list_for_each_entry_safe(page, tmp_page, &pages, lru) + free_buffer_page(sys_heap, buffer, page, compound_order(page)); return -ENOMEM; } -- cgit From 06566f5dc3f30e74de9e7bee4da6aad9ca35f287 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 30 May 2014 10:26:29 +0900 Subject: staging: ion: remove order argument from free_buffer_page() Now that the pages returned from the pool are compound pages, we do not need to pass the order information to free_buffer_page(). Signed-off-by: Heesub Shin Reviewed-by: Mitchel Humpherys Tested-by: John Stultz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_system_heap.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c index f3b9008f90cb..e0a7e5491f59 100644 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/ion_system_heap.c @@ -78,9 +78,9 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap, } static void free_buffer_page(struct ion_system_heap *heap, - struct ion_buffer *buffer, struct page *page, - unsigned int order) + struct ion_buffer *buffer, struct page *page) { + unsigned int order = compound_order(page); bool cached = ion_buffer_cached(buffer); if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE)) { @@ -171,7 +171,7 @@ free_table: kfree(table); free_pages: list_for_each_entry_safe(page, tmp_page, &pages, lru) - free_buffer_page(sys_heap, buffer, page, compound_order(page)); + free_buffer_page(sys_heap, buffer, page); return -ENOMEM; } @@ -191,8 +191,7 @@ static void ion_system_heap_free(struct ion_buffer *buffer) ion_heap_buffer_zero(buffer); for_each_sg(table->sgl, sg, table->nents, i) - free_buffer_page(sys_heap, buffer, sg_page(sg), - get_order(sg->length)); + free_buffer_page(sys_heap, buffer, sg_page(sg)); sg_free_table(table); kfree(table); } -- cgit From 6944561ece14d865238d14e40da858efb29dc2e8 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 30 May 2014 10:26:30 +0900 Subject: staging: ion: optimize struct ion_system_heap struct ion_system_heap has an array for storing pointers to page pools and it is allocated separately from the containing structure. There is no point in allocating those two small objects individually, bothering slab allocator. Using a variable length array simplifies code lines and reduces overhead to the slab. Signed-off-by: Heesub Shin Reviewed-by: Mitchel Humpherys Tested-by: John Stultz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_system_heap.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c index e0a7e5491f59..c826b4c63861 100644 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/ion_system_heap.c @@ -49,7 +49,7 @@ static inline unsigned int order_to_size(int order) struct ion_system_heap { struct ion_heap heap; - struct ion_page_pool **pools; + struct ion_page_pool *pools[0]; }; static struct page *alloc_buffer_page(struct ion_system_heap *heap, @@ -264,16 +264,15 @@ struct ion_heap *ion_system_heap_create(struct ion_platform_heap *unused) struct ion_system_heap *heap; int i; - heap = kzalloc(sizeof(struct ion_system_heap), GFP_KERNEL); + heap = kzalloc(sizeof(struct ion_system_heap) + + sizeof(struct ion_page_pool *) * num_orders, + GFP_KERNEL); if (!heap) return ERR_PTR(-ENOMEM); heap->heap.ops = &system_heap_ops; heap->heap.type = ION_HEAP_TYPE_SYSTEM; heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE; - heap->pools = kzalloc(sizeof(struct ion_page_pool *) * num_orders, - GFP_KERNEL); - if (!heap->pools) - goto free_heap; + for (i = 0; i < num_orders; i++) { struct ion_page_pool *pool; gfp_t gfp_flags = low_order_gfp_flags; @@ -292,8 +291,6 @@ struct ion_heap *ion_system_heap_create(struct ion_platform_heap *unused) destroy_pools: while (i--) ion_page_pool_destroy(heap->pools[i]); - kfree(heap->pools); -free_heap: kfree(heap); return ERR_PTR(-ENOMEM); } -- cgit From 1e1b6a86670b60142e9662369debf861854e8900 Mon Sep 17 00:00:00 2001 From: Miguel Oliveira Date: Fri, 30 May 2014 17:44:26 +0100 Subject: staging: nokia_h4: nokia_core.c Fixed coding style Inserted a blank line after a declaration. Signed-off-by: Miguel Oliveira Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nokia_h4p/nokia_core.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/nokia_h4p/nokia_core.c b/drivers/staging/nokia_h4p/nokia_core.c index 5e19cd6ccda3..775e1d043230 100644 --- a/drivers/staging/nokia_h4p/nokia_core.c +++ b/drivers/staging/nokia_h4p/nokia_core.c @@ -756,6 +756,7 @@ static int hci_h4p_reset(struct hci_h4p_info *info) static int hci_h4p_hci_flush(struct hci_dev *hdev) { struct hci_h4p_info *info = hci_get_drvdata(hdev); + skb_queue_purge(&info->txq); return 0; -- cgit From 69b2b20e287870441f0a8f1a1e51b94c247986ae Mon Sep 17 00:00:00 2001 From: Tair Rzayev Date: Sat, 31 May 2014 22:47:42 +0300 Subject: staging: android: ion: ion_chunk_heap.c: Fix checkpatch warning Fix the over 80 character line Signed-off-by: Tair Rzayev Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_chunk_heap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_chunk_heap.c b/drivers/staging/android/ion/ion_chunk_heap.c index 3f2c12ba4d14..9c3e49aa204b 100644 --- a/drivers/staging/android/ion/ion_chunk_heap.c +++ b/drivers/staging/android/ion/ion_chunk_heap.c @@ -106,7 +106,7 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer) if (ion_buffer_cached(buffer)) dma_sync_sg_for_device(NULL, table->sgl, table->nents, - DMA_BIDIRECTIONAL); + DMA_BIDIRECTIONAL); for_each_sg(table->sgl, sg, table->nents, i) { gen_pool_free(chunk_heap->pool, page_to_phys(sg_page(sg)), -- cgit From 084fc8f31a9296a832ab1f81856955a35e47624e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:40 +0100 Subject: staging: vt6656: rename CARDbSetMediaChannel to vnt_set_channel Drop card and media and just use vnt_set_channel. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/main_usb.c | 3 ++- drivers/staging/vt6656/wcmd.c | 6 +++--- drivers/staging/vt6656/wmgr.c | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index d662e5431dad..f8ba75bcfc16 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -75,7 +75,7 @@ static const u16 cwRXBCNTSFOff[MAX_RATE] = * Out: * none */ -void CARDbSetMediaChannel(struct vnt_private *priv, u32 connection_channel) +void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) { if (priv->byBBType == BB_TYPE_11A) { diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index ac734714c7d1..06498ef82885 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -45,7 +45,7 @@ typedef enum _CARD_PHY_TYPE { struct vnt_private; -void CARDbSetMediaChannel(struct vnt_private *pDevice, u32 uConnectionChannel); +void vnt_set_channel(struct vnt_private *, u32); void CARDvSetRSPINF(struct vnt_private *, u8); void vUpdateIFS(struct vnt_private *); void CARDvUpdateBasicTopRate(struct vnt_private *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e18071f121c5..aca486dc391d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -500,7 +500,8 @@ static int device_init_registers(struct vnt_private *pDevice) pMgmt->eScanType = WMAC_SCAN_PASSIVE; pMgmt->uCurrChannel = pDevice->uChannel; pMgmt->uIBSSChannel = pDevice->uChannel; - CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel); + + vnt_set_channel(pDevice, pMgmt->uCurrChannel); /* get permanent network address */ memcpy(pDevice->abyPermanentNetAddr, init_rsp->net_addr, 6); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index da72d4df6fca..cec6fc6dc6b7 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -341,7 +341,7 @@ void vRunCommand(struct work_struct *work) } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning.... channel: [%d]\n", pMgmt->uScanChannel); // Set channel - CARDbSetMediaChannel(pDevice, pMgmt->uScanChannel); + vnt_set_channel(pDevice, pMgmt->uScanChannel); // Set Baseband to be more sensitive. BBvSetShortSlotTime(pDevice); @@ -387,7 +387,7 @@ void vRunCommand(struct work_struct *work) // Set channel back vAdHocBeaconRestart(pDevice); // Set channel back - CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel); + vnt_set_channel(pDevice, pMgmt->uCurrChannel); // Set Filter if (pMgmt->bCurrBSSIDFilterOn) { MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); @@ -876,7 +876,7 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_11H_CHSW_START: - CARDbSetMediaChannel(pDevice, pDevice->byNewChannel); + vnt_set_channel(pDevice, pDevice->byNewChannel); pDevice->bChannelSwitch = false; pMgmt->uCurrChannel = pDevice->byNewChannel; pDevice->bStopDataPkt = false; diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 18723eab93d2..c30782fefbd2 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2059,7 +2059,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) pMgmt->uIBSSChannel = DEFAULT_IBSS_CHANNEL; // set channel and clear NAV - CARDbSetMediaChannel(pDevice, pMgmt->uIBSSChannel); + vnt_set_channel(pDevice, pMgmt->uIBSSChannel); pMgmt->uCurrChannel = pMgmt->uIBSSChannel; pDevice->byPreambleType = pDevice->byShortPreamble; @@ -2642,7 +2642,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, } // set channel and clear NAV - CARDbSetMediaChannel(pDevice, pCurr->uChannel); + vnt_set_channel(pDevice, pCurr->uChannel); pMgmt->uCurrChannel = pCurr->uChannel; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "<----s_bSynchBSS Set Channel [%d]\n", pCurr->uChannel); -- cgit From 073d02eb9cec2de7964d6277a587cea847f16eb4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:41 +0100 Subject: staging: vt6656: rename swGetCCKControlRate to vnt_get_cck_rate Drop control and just use vnt_get_cck_rate. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index f8ba75bcfc16..b2dc8a8c3a66 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -128,7 +128,7 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) * Return Value: response Control frame rate * */ -static u16 swGetCCKControlRate(struct vnt_private *priv, u16 rate_idx) +static u16 vnt_get_cck_rate(struct vnt_private *priv, u16 rate_idx) { u16 ui = rate_idx; @@ -301,19 +301,19 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) /*RSPINF_b_1*/ BBvCalculateParameter(priv, 14, - swGetCCKControlRate(priv, RATE_1M), PK_TYPE_11B, &phy[0]); + vnt_get_cck_rate(priv, RATE_1M), PK_TYPE_11B, &phy[0]); /*RSPINF_b_2*/ BBvCalculateParameter(priv, 14, - swGetCCKControlRate(priv, RATE_2M), PK_TYPE_11B, &phy[1]); + vnt_get_cck_rate(priv, RATE_2M), PK_TYPE_11B, &phy[1]); /*RSPINF_b_5*/ BBvCalculateParameter(priv, 14, - swGetCCKControlRate(priv, RATE_5M), PK_TYPE_11B, &phy[2]); + vnt_get_cck_rate(priv, RATE_5M), PK_TYPE_11B, &phy[2]); /*RSPINF_b_11*/ BBvCalculateParameter(priv, 14, - swGetCCKControlRate(priv, RATE_11M), PK_TYPE_11B, &phy[3]); + vnt_get_cck_rate(priv, RATE_11M), PK_TYPE_11B, &phy[3]); /*RSPINF_a_6*/ -- cgit From 15fa7ce244ffba78acf0efecca5c7f6e07d5e2fe Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:42 +0100 Subject: staging: vt6656: rename swGetOFDMControlRate to vnt_get_ofdm_rate Drop control and rename vnt_get_ofdm_rate Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index b2dc8a8c3a66..695236bfa932 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -154,7 +154,7 @@ static u16 vnt_get_cck_rate(struct vnt_private *priv, u16 rate_idx) * Return Value: response Control frame rate * */ -static u16 swGetOFDMControlRate(struct vnt_private *priv, u16 rate_idx) +static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx) { u16 ui = rate_idx; @@ -337,19 +337,19 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) &tx_rate[4], &rsv_time[4]); /*RSPINF_a_36*/ - CARDvCalculateOFDMRParameter(swGetOFDMControlRate(priv, RATE_36M), + CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_36M), bb_type, &tx_rate[5], &rsv_time[5]); /*RSPINF_a_48*/ - CARDvCalculateOFDMRParameter(swGetOFDMControlRate(priv, RATE_48M), + CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_48M), bb_type, &tx_rate[6], &rsv_time[6]); /*RSPINF_a_54*/ - CARDvCalculateOFDMRParameter(swGetOFDMControlRate(priv, RATE_54M), + CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_54M), bb_type, &tx_rate[7], &rsv_time[7]); /*RSPINF_a_72*/ - CARDvCalculateOFDMRParameter(swGetOFDMControlRate(priv, RATE_54M), + CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_54M), bb_type, &tx_rate[8], &rsv_time[8]); put_unaligned(phy[0].len, (u16 *)&data[0]); -- cgit From c9a048771aa6011705e00d67669c2c5580c2f918 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:43 +0100 Subject: staging: vt6656: rename CARDvCalculateOFDMRParameter to vnt_calculate_ofdm_rate Drop card and Parameter. R is the rate to rename to vnt_calculate_ofdm_rate Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 695236bfa932..9c881349b8ff 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -197,7 +197,7 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx) * Return Value: none * */ -static void CARDvCalculateOFDMRParameter(u16 rate, u8 bb_type, +static void vnt_calculate_ofdm_rate(u16 rate, u8 bb_type, u8 *tx_rate, u8 *rsv_time) { @@ -317,39 +317,34 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) /*RSPINF_a_6*/ - CARDvCalculateOFDMRParameter(RATE_6M, bb_type, - &tx_rate[0], &rsv_time[0]); + vnt_calculate_ofdm_rate(RATE_6M, bb_type, &tx_rate[0], &rsv_time[0]); /*RSPINF_a_9*/ - CARDvCalculateOFDMRParameter(RATE_9M, bb_type, - &tx_rate[1], &rsv_time[1]); + vnt_calculate_ofdm_rate(RATE_9M, bb_type, &tx_rate[1], &rsv_time[1]); /*RSPINF_a_12*/ - CARDvCalculateOFDMRParameter(RATE_12M, bb_type, - &tx_rate[2], &rsv_time[2]); + vnt_calculate_ofdm_rate(RATE_12M, bb_type, &tx_rate[2], &rsv_time[2]); /*RSPINF_a_18*/ - CARDvCalculateOFDMRParameter(RATE_18M, bb_type, - &tx_rate[3], &rsv_time[3]); + vnt_calculate_ofdm_rate(RATE_18M, bb_type, &tx_rate[3], &rsv_time[3]); /*RSPINF_a_24*/ - CARDvCalculateOFDMRParameter(RATE_24M, bb_type, - &tx_rate[4], &rsv_time[4]); + vnt_calculate_ofdm_rate(RATE_24M, bb_type, &tx_rate[4], &rsv_time[4]); /*RSPINF_a_36*/ - CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_36M), + vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_36M), bb_type, &tx_rate[5], &rsv_time[5]); /*RSPINF_a_48*/ - CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_48M), + vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_48M), bb_type, &tx_rate[6], &rsv_time[6]); /*RSPINF_a_54*/ - CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_54M), + vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_54M), bb_type, &tx_rate[7], &rsv_time[7]); /*RSPINF_a_72*/ - CARDvCalculateOFDMRParameter(vnt_get_ofdm_rate(priv, RATE_54M), + vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_54M), bb_type, &tx_rate[8], &rsv_time[8]); put_unaligned(phy[0].len, (u16 *)&data[0]); -- cgit From c7ee9eeb47d46b2880a0e18974738c12419749fb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:44 +0100 Subject: staging: vt6656: rename vUpdateIFS to vnt_update_ifs Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.c | 4 ++-- drivers/staging/vt6656/card.c | 8 ++++---- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/wmgr.c | 13 +++++++------ 4 files changed, 14 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 8e9ce96442a0..fd7ed1de2fe7 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -959,12 +959,12 @@ void BSSvSecondCallBack(struct work_struct *work) if (pDevice->bShortSlotTime) { pDevice->bShortSlotTime = false; BBvSetShortSlotTime(pDevice); - vUpdateIFS((void *) pDevice); + vnt_update_ifs(pDevice); } } else if (!pDevice->bShortSlotTime) { pDevice->bShortSlotTime = true; BBvSetShortSlotTime(pDevice); - vUpdateIFS((void *) pDevice); + vnt_update_ifs(pDevice); } /* on/off barker long preamble mode */ diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 9c881349b8ff..b2192c1d8b3b 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -21,7 +21,7 @@ * Functions: * s_vSafeResetTx - Rest Tx * CARDvSetRSPINF - Set RSPINF - * vUpdateIFS - Update slotTime,SIFS,DIFS, and EIFS + * vnt_update_ifs - Update slotTime,SIFS,DIFS, and EIFS * CARDvUpdateBasicTopRate - Update BasicTopRate * CARDbAddBasicRate - Add to BasicRateSet * CARDbSetBasicRate - Set Basic Tx Rate @@ -41,7 +41,7 @@ * Revision History: * 06-10-2003 Bryan YC Fan: Re-write codes to support VT3253 spec. * 08-26-2003 Kyle Hsu: Modify the definition type of dwIoBase. - * 09-01-2003 Bryan YC Fan: Add vUpdateIFS(). + * 09-01-2003 Bryan YC Fan: Add vnt_update_ifs(). * */ @@ -384,7 +384,7 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) * Return Value: None. * */ -void vUpdateIFS(struct vnt_private *priv) +void vnt_update_ifs(struct vnt_private *priv) { u8 max_min = 0; u8 data[4]; @@ -845,7 +845,7 @@ void CARDvSetBSSMode(struct vnt_private *priv) else if (priv->byBBType == BB_TYPE_11G) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x08); - vUpdateIFS(priv); + vnt_update_ifs(priv); CARDvSetRSPINF(priv, (u8)priv->byBBType); if (priv->byBBType == BB_TYPE_11A) { diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 06498ef82885..0b5c11c31a33 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -47,7 +47,7 @@ struct vnt_private; void vnt_set_channel(struct vnt_private *, u32); void CARDvSetRSPINF(struct vnt_private *, u8); -void vUpdateIFS(struct vnt_private *); +void vnt_update_ifs(struct vnt_private *); void CARDvUpdateBasicTopRate(struct vnt_private *); void CARDbAddBasicRate(struct vnt_private *, u16); int CARDbIsOFDMinBasicRate(struct vnt_private *pDevice); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index c30782fefbd2..c1151b9acd34 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1659,7 +1659,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) } else { MACvDisableProtectMD(pDevice); } - vUpdateIFS(pDevice); + vnt_update_ifs(pDevice); } if ((pBSSList->sERP.byERP & WLAN_EID_ERP_NONERP_PRESENT) != pDevice->bNonERPPresent) {//0000 0001 pDevice->bNonERPPresent = (pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); @@ -1690,7 +1690,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) if (bShortSlotTime != pDevice->bShortSlotTime) { pDevice->bShortSlotTime = bShortSlotTime; BBvSetShortSlotTime(pDevice); - vUpdateIFS(pDevice); + vnt_update_ifs(pDevice); } } @@ -2337,7 +2337,8 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) RATEvParseMaxRate((void *)pDevice, pItemRates, pItemExtRates, true, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); - vUpdateIFS(pDevice); + + vnt_update_ifs(pDevice); // TODO: deal with if wCapInfo the privacy is on, but station WEP is off // TODO: deal with if wCapInfo the PS-Pollable is on. pMgmt->wCurrBeaconPeriod = pCurr->wBeaconInterval; @@ -2391,7 +2392,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) } else { MACvDisableProtectMD(pDevice); } - vUpdateIFS(pDevice); + vnt_update_ifs(pDevice); } if ((pCurr->sERP.byERP & WLAN_EID_ERP_NONERP_PRESENT) != pDevice->bNonERPPresent) {//0000 0001 pDevice->bNonERPPresent = (pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); @@ -2421,7 +2422,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) if (bShortSlotTime != pDevice->bShortSlotTime) { pDevice->bShortSlotTime = bShortSlotTime; BBvSetShortSlotTime(pDevice); - vUpdateIFS(pDevice); + vnt_update_ifs(pDevice); } } @@ -2480,7 +2481,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, true, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); - vUpdateIFS(pDevice); + vnt_update_ifs(pDevice); pMgmt->wCurrCapInfo = pCurr->wCapInfo; pMgmt->wCurrBeaconPeriod = pCurr->wBeaconInterval; memset(pMgmt->abyCurrSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN); -- cgit From 47203c49e1e28f9abfaea44365ab783962871d5a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:45 +0100 Subject: staging: vt6656: rename CARDvUpdateBasicTopRate to vnt_update_top_rates Drop card basic. The function updates the top rates vnt_update_top_rates Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 +++--- drivers/staging/vt6656/card.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index b2192c1d8b3b..7542b0dfa680 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -22,7 +22,7 @@ * s_vSafeResetTx - Rest Tx * CARDvSetRSPINF - Set RSPINF * vnt_update_ifs - Update slotTime,SIFS,DIFS, and EIFS - * CARDvUpdateBasicTopRate - Update BasicTopRate + * vnt_update_top_rates - Update BasicTopRate * CARDbAddBasicRate - Add to BasicRateSet * CARDbSetBasicRate - Set Basic Tx Rate * CARDbIsOFDMinBasicRate - Check if any OFDM rate is in BasicRateSet @@ -465,7 +465,7 @@ void vnt_update_ifs(struct vnt_private *priv) MESSAGE_REQUEST_MACREG, 1, &max_min); } -void CARDvUpdateBasicTopRate(struct vnt_private *priv) +void vnt_update_top_rates(struct vnt_private *priv) { u8 top_ofdm = RATE_24M, top_cck = RATE_1M; u8 i; @@ -511,7 +511,7 @@ void CARDbAddBasicRate(struct vnt_private *priv, u16 rate_idx) priv->wBasicRate |= (1 << rate_idx); /*Determines the highest basic rate.*/ - CARDvUpdateBasicTopRate(priv); + vnt_update_top_rates(priv); } int CARDbIsOFDMinBasicRate(struct vnt_private *priv) diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 0b5c11c31a33..f2afda433701 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -48,7 +48,7 @@ struct vnt_private; void vnt_set_channel(struct vnt_private *, u32); void CARDvSetRSPINF(struct vnt_private *, u8); void vnt_update_ifs(struct vnt_private *); -void CARDvUpdateBasicTopRate(struct vnt_private *); +void vnt_update_top_rates(struct vnt_private *); void CARDbAddBasicRate(struct vnt_private *, u16); int CARDbIsOFDMinBasicRate(struct vnt_private *pDevice); void CARDvAdjustTSF(struct vnt_private *pDevice, u8 byRxRate, -- cgit From 1a792943815f6af67bcabe9e2598b56396598b88 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:46 +0100 Subject: staging: vt6656: rename CARDvSetRSPINF to vnt_set_rspinf Drop card and rename to vnt_set_rspinf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 +++--- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/datarate.c | 2 +- drivers/staging/vt6656/wmgr.c | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 7542b0dfa680..cf46aa824187 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -20,7 +20,7 @@ * Purpose: Provide functions to setup NIC operation mode * Functions: * s_vSafeResetTx - Rest Tx - * CARDvSetRSPINF - Set RSPINF + * vnt_set_rspinf - Set RSPINF * vnt_update_ifs - Update slotTime,SIFS,DIFS, and EIFS * vnt_update_top_rates - Update BasicTopRate * CARDbAddBasicRate - Add to BasicRateSet @@ -291,7 +291,7 @@ static void vnt_calculate_ofdm_rate(u16 rate, u8 bb_type, * */ -void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) +void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type) { struct vnt_phy_field phy[4]; u8 tx_rate[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; /* For OFDM */ @@ -846,7 +846,7 @@ void CARDvSetBSSMode(struct vnt_private *priv) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x08); vnt_update_ifs(priv); - CARDvSetRSPINF(priv, (u8)priv->byBBType); + vnt_set_rspinf(priv, (u8)priv->byBBType); if (priv->byBBType == BB_TYPE_11A) { if (priv->byRFType == RF_AIROHA7230) { diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index f2afda433701..b52a8c245115 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -46,7 +46,7 @@ typedef enum _CARD_PHY_TYPE { struct vnt_private; void vnt_set_channel(struct vnt_private *, u32); -void CARDvSetRSPINF(struct vnt_private *, u8); +void vnt_set_rspinf(struct vnt_private *, u8); void vnt_update_ifs(struct vnt_private *); void vnt_update_top_rates(struct vnt_private *); void CARDbAddBasicRate(struct vnt_private *, u16); diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index 8032d6b5b383..e4a3ac24eee7 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -222,7 +222,7 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, else *pwMaxBasicRate = pDevice->byTopOFDMBasicRate; if (wOldBasicRate != pDevice->wBasicRate) - CARDvSetRSPINF((void *)pDevice, pDevice->byBBType); + vnt_set_rspinf(pDevice, pDevice->byBBType); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Exit ParseMaxRate\n"); } diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index c1151b9acd34..4751242e2a52 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1705,7 +1705,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) pDevice->byPreambleType = 0; } if (pDevice->byPreambleType != byOldPreambleType) - CARDvSetRSPINF(pDevice, (u8)pDevice->byBBType); + vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); // // Basic Rate Set may change dynamically // @@ -1930,7 +1930,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) pDevice->byPreambleType = 0; } if (pDevice->byPreambleType != byOldPreambleType) - CARDvSetRSPINF(pDevice, (u8)pDevice->byBBType); + vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); // MACvRegBitsOff(pDevice->PortOffset, MAC_REG_RCR, RCR_BSSID); // set highest basic rate @@ -2379,7 +2379,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) pDevice->byPreambleType = 0; } // Change PreambleType must set RSPINF again - CARDvSetRSPINF(pDevice, (u8)pDevice->byBBType); + vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Join ESS\n"); @@ -2510,7 +2510,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) pDevice->byPreambleType = 0; } // Change PreambleType must set RSPINF again - CARDvSetRSPINF(pDevice, (u8)pDevice->byBBType); + vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); // Prepare beacon bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); -- cgit From 9a2cffd438e44c1357eeae3fcd421d5997b8d16d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:47 +0100 Subject: staging: vt6656: rename CARDbAddBasicRate to vnt_add_basic_rate Drop card and rename to vnt_add_basic_rate Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/datarate.c | 4 ++-- drivers/staging/vt6656/main_usb.c | 4 ++-- drivers/staging/vt6656/wmgr.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index cf46aa824187..a90507694ea7 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -23,7 +23,7 @@ * vnt_set_rspinf - Set RSPINF * vnt_update_ifs - Update slotTime,SIFS,DIFS, and EIFS * vnt_update_top_rates - Update BasicTopRate - * CARDbAddBasicRate - Add to BasicRateSet + * vnt_add_basic_rate - Add to BasicRateSet * CARDbSetBasicRate - Set Basic Tx Rate * CARDbIsOFDMinBasicRate - Check if any OFDM rate is in BasicRateSet * CARDvSetLoopbackMode - Set Loopback mode @@ -505,7 +505,7 @@ void vnt_update_top_rates(struct vnt_private *priv) * Return Value: true if succeeded; false if failed. * */ -void CARDbAddBasicRate(struct vnt_private *priv, u16 rate_idx) +void vnt_add_basic_rate(struct vnt_private *priv, u16 rate_idx) { priv->wBasicRate |= (1 << rate_idx); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index b52a8c245115..ef5a671282a5 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -49,7 +49,7 @@ void vnt_set_channel(struct vnt_private *, u32); void vnt_set_rspinf(struct vnt_private *, u8); void vnt_update_ifs(struct vnt_private *); void vnt_update_top_rates(struct vnt_private *); -void CARDbAddBasicRate(struct vnt_private *, u16); +void vnt_add_basic_rate(struct vnt_private *, u16); int CARDbIsOFDMinBasicRate(struct vnt_private *pDevice); void CARDvAdjustTSF(struct vnt_private *pDevice, u8 byRxRate, u64 qwBSSTimestamp, u64 qwLocalTSF); diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index e4a3ac24eee7..517fbf7680ed 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -163,7 +163,7 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, * add to basic rate set, update pDevice->byTopCCKBasicRate and * pDevice->byTopOFDMBasicRate */ - CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); + vnt_add_basic_rate(pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); @@ -191,7 +191,7 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, * add to basic rate set, update pDevice->byTopCCKBasicRate and * pDevice->byTopOFDMBasicRate */ - CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); + vnt_add_basic_rate(pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index aca486dc391d..636afc2fdb17 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -517,10 +517,10 @@ static int device_init_registers(struct vnt_private *pDevice) * set Short Slot Time, xIFS, and RSPINF */ if (pDevice->byBBType == BB_TYPE_11A) { - CARDbAddBasicRate(pDevice, RATE_6M); + vnt_add_basic_rate(pDevice, RATE_6M); pDevice->bShortSlotTime = true; } else { - CARDbAddBasicRate(pDevice, RATE_1M); + vnt_add_basic_rate(pDevice, RATE_1M); pDevice->bShortSlotTime = false; } diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 4751242e2a52..652e8b682bdf 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2573,7 +2573,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, pDevice->byPreambleType = 0; pDevice->wBasicRate = 0; // Set Basic Rate - CARDbAddBasicRate((void *)pDevice, RATE_1M); + vnt_add_basic_rate(pDevice, RATE_1M); // calculate TSF offset // TSF Offset = Received Timestamp TSF - Marked Local's TSF -- cgit From cfa4d8d27e987e9a3a213fff82b567481f916e47 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:48 +0100 Subject: staging: vt6656: rename CARDbIsOFDMinBasicRate to vnt_ofdm_min_rate drop card and basic rename to vnt_ofdm_min_rate Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 8 ++++---- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/datarate.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index a90507694ea7..8e6158b9c4e3 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -25,7 +25,7 @@ * vnt_update_top_rates - Update BasicTopRate * vnt_add_basic_rate - Add to BasicRateSet * CARDbSetBasicRate - Set Basic Tx Rate - * CARDbIsOFDMinBasicRate - Check if any OFDM rate is in BasicRateSet + * vnt_ofdm_min_rate - Check if any OFDM rate is in BasicRateSet * CARDvSetLoopbackMode - Set Loopback mode * CARDbSoftwareReset - Sortware reset NIC * CARDqGetTSFOffset - Calculate TSFOffset @@ -161,7 +161,7 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx) dev_dbg(&priv->usb->dev, "%s basic rate: %d\n", __func__, priv->wBasicRate); - if (!CARDbIsOFDMinBasicRate(priv)) { + if (!vnt_ofdm_min_rate(priv)) { dev_dbg(&priv->usb->dev, "%s (NO OFDM) %d\n", __func__, rate_idx); if (rate_idx > RATE_24M) @@ -514,7 +514,7 @@ void vnt_add_basic_rate(struct vnt_private *priv, u16 rate_idx) vnt_update_top_rates(priv); } -int CARDbIsOFDMinBasicRate(struct vnt_private *priv) +int vnt_ofdm_min_rate(struct vnt_private *priv) { int ii; @@ -531,7 +531,7 @@ u8 CARDbyGetPktType(struct vnt_private *priv) if (priv->byBBType == BB_TYPE_11A || priv->byBBType == BB_TYPE_11B) return (u8)priv->byBBType; - else if (CARDbIsOFDMinBasicRate(priv)) + else if (vnt_ofdm_min_rate(priv)) return PK_TYPE_11GA; else return PK_TYPE_11GB; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index ef5a671282a5..41871e9fa70b 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -50,7 +50,7 @@ void vnt_set_rspinf(struct vnt_private *, u8); void vnt_update_ifs(struct vnt_private *); void vnt_update_top_rates(struct vnt_private *); void vnt_add_basic_rate(struct vnt_private *, u16); -int CARDbIsOFDMinBasicRate(struct vnt_private *pDevice); +int vnt_ofdm_min_rate(struct vnt_private *); void CARDvAdjustTSF(struct vnt_private *pDevice, u8 byRxRate, u64 qwBSSTimestamp, u64 qwLocalTSF); bool CARDbGetCurrentTSF(struct vnt_private *pDevice, u64 *pqwCurrTSF); diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index 517fbf7680ed..c44d3a0220ed 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -210,7 +210,7 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, } if ((pDevice->byPacketType == PK_TYPE_11GB) - && CARDbIsOFDMinBasicRate((void *)pDevice)) { + && vnt_ofdm_min_rate(pDevice)) { pDevice->byPacketType = PK_TYPE_11GA; } -- cgit From e809c96ee562a3e4541bcfc75f649d94de5f0940 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:49 +0100 Subject: staging: vt6656: rename CARDbyGetPktType to vnt_get_pkt_type drop card rename to vnt_get_pkt_type Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 8e6158b9c4e3..27ed88b54c59 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -526,7 +526,7 @@ int vnt_ofdm_min_rate(struct vnt_private *priv) return false; } -u8 CARDbyGetPktType(struct vnt_private *priv) +u8 vnt_get_pkt_type(struct vnt_private *priv) { if (priv->byBBType == BB_TYPE_11A || priv->byBBType == BB_TYPE_11B) @@ -836,7 +836,7 @@ void CARDvSetBSSMode(struct vnt_private *priv) else MACvSetBBType(priv, priv->byBBType); - priv->byPacketType = CARDbyGetPktType(priv); + priv->byPacketType = vnt_get_pkt_type(priv); if (priv->byBBType == BB_TYPE_11A) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x03); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 41871e9fa70b..7a844c34c5dc 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -62,7 +62,7 @@ u64 CARDqGetNextTBTT(u64 qwTSF, u16 wBeaconInterval); u64 CARDqGetTSFOffset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int CARDbRadioPowerOff(struct vnt_private *pDevice); int CARDbRadioPowerOn(struct vnt_private *pDevice); -u8 CARDbyGetPktType(struct vnt_private *pDevice); +u8 vnt_get_pkt_type(struct vnt_private *); void CARDvSetBSSMode(struct vnt_private *pDevice); #endif /* __CARD_H__ */ -- cgit From ecbc0a1e614b5a31ec38773f9054475cadac1f79 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:50 +0100 Subject: staging: vt6656: rename CARDqGetTSFOffset to vnt_get_tsf_offset drop card and rename to vnt_get_tsf_offset Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 +++--- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/wmgr.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 27ed88b54c59..3b51eaef5f78 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -28,7 +28,7 @@ * vnt_ofdm_min_rate - Check if any OFDM rate is in BasicRateSet * CARDvSetLoopbackMode - Set Loopback mode * CARDbSoftwareReset - Sortware reset NIC - * CARDqGetTSFOffset - Calculate TSFOffset + * vnt_get_tsf_offset - Calculate TSFOffset * CARDbGetCurrentTSF - Read Current NIC TSF counter * CARDqGetNextTBTT - Calculate Next Beacon TSF counter * CARDvSetFirstNextTBTT - Set NIC Beacon time @@ -552,7 +552,7 @@ u8 vnt_get_pkt_type(struct vnt_private *priv) * Return Value: TSF Offset value * */ -u64 CARDqGetTSFOffset(u8 rx_rate, u64 tsf1, u64 tsf2) +u64 vnt_get_tsf_offset(u8 rx_rate, u64 tsf1, u64 tsf2) { u64 tsf_offset = 0; u16 rx_bcn_offset = 0; @@ -587,7 +587,7 @@ void CARDvAdjustTSF(struct vnt_private *priv, u8 rx_rate, u64 tsf_offset = 0; u8 data[8]; - tsf_offset = CARDqGetTSFOffset(rx_rate, time_stamp, local_tsf); + tsf_offset = vnt_get_tsf_offset(rx_rate, time_stamp, local_tsf); data[0] = (u8)tsf_offset; data[1] = (u8)(tsf_offset >> 8); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 7a844c34c5dc..ffd655213e46 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -59,7 +59,7 @@ void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, u16 wBeaconInterval); u64 CARDqGetNextTBTT(u64 qwTSF, u16 wBeaconInterval); -u64 CARDqGetTSFOffset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); +u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int CARDbRadioPowerOff(struct vnt_private *pDevice); int CARDbRadioPowerOn(struct vnt_private *pDevice); u8 vnt_get_pkt_type(struct vnt_private *); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 652e8b682bdf..9381d6f1bbc6 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1750,10 +1750,10 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) bTSFOffsetPostive = false; if (bTSFOffsetPostive) { - qwTSFOffset = CARDqGetTSFOffset(pRxPacket->byRxRate, (qwTimestamp), (qwLocalTSF)); + qwTSFOffset = vnt_get_tsf_offset(pRxPacket->byRxRate, (qwTimestamp), (qwLocalTSF)); } else { - qwTSFOffset = CARDqGetTSFOffset(pRxPacket->byRxRate, (qwLocalTSF), (qwTimestamp)); + qwTSFOffset = vnt_get_tsf_offset(pRxPacket->byRxRate, (qwLocalTSF), (qwTimestamp)); } if (qwTSFOffset > TRIVIAL_SYNC_DIFFERENCE) -- cgit From 14c68c56695d9747a36a7ad0c462564719fddc03 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 16:27:51 +0100 Subject: staging: vt6656: rename CARDvAdjustTSF to vnt_adjust_tsf drop card and rename to vnt_adjust_tsf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/card.h | 3 +-- drivers/staging/vt6656/wmgr.c | 6 +++--- 3 files changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 3b51eaef5f78..24dd9f829262 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -581,7 +581,7 @@ u64 vnt_get_tsf_offset(u8 rx_rate, u64 tsf1, u64 tsf2) * Return Value: none * */ -void CARDvAdjustTSF(struct vnt_private *priv, u8 rx_rate, +void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate, u64 time_stamp, u64 local_tsf) { u64 tsf_offset = 0; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index ffd655213e46..75e4f5f9af79 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -51,8 +51,7 @@ void vnt_update_ifs(struct vnt_private *); void vnt_update_top_rates(struct vnt_private *); void vnt_add_basic_rate(struct vnt_private *, u16); int vnt_ofdm_min_rate(struct vnt_private *); -void CARDvAdjustTSF(struct vnt_private *pDevice, u8 byRxRate, - u64 qwBSSTimestamp, u64 qwLocalTSF); +void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); bool CARDbGetCurrentTSF(struct vnt_private *pDevice, u64 *pqwCurrTSF); bool CARDbClearCurrentTSF(struct vnt_private *pDevice); void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 9381d6f1bbc6..d5d227385a43 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1916,7 +1916,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rejoining to Other Adhoc group with same SSID........\n"); MACvWriteBeaconInterval(pDevice, pMgmt->wCurrBeaconPeriod); - CARDvAdjustTSF(pDevice, pRxPacket->byRxRate, qwTimestamp, pRxPacket->qwLocalTSF); + vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp, pRxPacket->qwLocalTSF); CARDvUpdateNextTBTT(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); // Turn off bssid filter to avoid filter others adhoc station which bssid is different. @@ -1945,7 +1945,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) // Update TSF if (bUpdateTSF) { CARDbGetCurrentTSF(pDevice, &qwCurrTSF); - CARDvAdjustTSF(pDevice, pRxPacket->byRxRate, qwTimestamp , pRxPacket->qwLocalTSF); + vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp , pRxPacket->qwLocalTSF); CARDbGetCurrentTSF(pDevice, &qwCurrTSF); CARDvUpdateNextTBTT(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); } @@ -2577,7 +2577,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, // calculate TSF offset // TSF Offset = Received Timestamp TSF - Marked Local's TSF - CARDvAdjustTSF(pDevice, pCurr->byRxRate, pCurr->qwBSSTimestamp, pCurr->qwLocalTSF); + vnt_adjust_tsf(pDevice, pCurr->byRxRate, pCurr->qwBSSTimestamp, pCurr->qwLocalTSF); // set HW beacon interval MACvWriteBeaconInterval(pDevice, pCurr->wBeaconInterval); -- cgit From 4a9f4c655cd7aeebd81714c4cd8af165657cf6ed Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:47 +0100 Subject: staging: vt6656: rename CARDbGetCurrentTSF to vnt_get_current_tsf Drop card and rename to vnt_get_current_tsf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/wmgr.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 24dd9f829262..c746677a9e7e 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -29,7 +29,7 @@ * CARDvSetLoopbackMode - Set Loopback mode * CARDbSoftwareReset - Sortware reset NIC * vnt_get_tsf_offset - Calculate TSFOffset - * CARDbGetCurrentTSF - Read Current NIC TSF counter + * vnt_get_current_tsf - Read Current NIC TSF counter * CARDqGetNextTBTT - Calculate Next Beacon TSF counter * CARDvSetFirstNextTBTT - Set NIC Beacon time * CARDvUpdateNextTBTT - Sync. NIC Beacon time @@ -614,7 +614,7 @@ void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate, * Return Value: true if success; otherwise false * */ -bool CARDbGetCurrentTSF(struct vnt_private *priv, u64 *current_tsf) +bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf) { *current_tsf = priv->qwCurrTSF; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 75e4f5f9af79..89bbc704c333 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -52,7 +52,7 @@ void vnt_update_top_rates(struct vnt_private *); void vnt_add_basic_rate(struct vnt_private *, u16); int vnt_ofdm_min_rate(struct vnt_private *); void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); -bool CARDbGetCurrentTSF(struct vnt_private *pDevice, u64 *pqwCurrTSF); +bool vnt_get_current_tsf(struct vnt_private *, u64 *); bool CARDbClearCurrentTSF(struct vnt_private *pDevice); void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index d5d227385a43..55b92fe1ec85 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1944,9 +1944,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) // endian issue ??? // Update TSF if (bUpdateTSF) { - CARDbGetCurrentTSF(pDevice, &qwCurrTSF); + vnt_get_current_tsf(pDevice, &qwCurrTSF); vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp , pRxPacket->qwLocalTSF); - CARDbGetCurrentTSF(pDevice, &qwCurrTSF); + vnt_get_current_tsf(pDevice, &qwCurrTSF); CARDvUpdateNextTBTT(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); } @@ -2044,7 +2044,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; MACvWriteBeaconInterval(pDevice, pMgmt->wIBSSBeaconPeriod); - CARDbGetCurrentTSF(pDevice, &qwCurrTSF); + vnt_get_current_tsf(pDevice, &qwCurrTSF); // clear TSF counter CARDbClearCurrentTSF(pDevice); -- cgit From dba066e9fee33671d1437e4a9d515e8134ecac38 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:48 +0100 Subject: staging: vt6656: rename CARDbClearCurrentTSF to vnt_clear_current_tsf Drop card and rename to vnt_clear_current_tsf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/wmgr.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index c746677a9e7e..fdc7cd52112f 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -633,7 +633,7 @@ bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf) * Return Value: true if success; otherwise false * */ -bool CARDbClearCurrentTSF(struct vnt_private *priv) +bool vnt_clear_current_tsf(struct vnt_private *priv) { MACvRegBitsOn(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); @@ -694,7 +694,7 @@ void CARDvSetFirstNextTBTT(struct vnt_private *priv, u16 beacon_interval) u64 next_tbtt = 0; u8 data[8]; - CARDbClearCurrentTSF(priv); + vnt_clear_current_tsf(priv); next_tbtt = CARDqGetNextTBTT(next_tbtt, beacon_interval); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 89bbc704c333..78ff81078d4c 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -53,7 +53,7 @@ void vnt_add_basic_rate(struct vnt_private *, u16); int vnt_ofdm_min_rate(struct vnt_private *); void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); bool vnt_get_current_tsf(struct vnt_private *, u64 *); -bool CARDbClearCurrentTSF(struct vnt_private *pDevice); +bool vnt_clear_current_tsf(struct vnt_private *); void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, u16 wBeaconInterval); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 55b92fe1ec85..5b2e9e57ef41 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2046,7 +2046,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) vnt_get_current_tsf(pDevice, &qwCurrTSF); // clear TSF counter - CARDbClearCurrentTSF(pDevice); + vnt_clear_current_tsf(pDevice); // enable TSF counter MACvRegBitsOn(pDevice,MAC_REG_TFTCTL,TFTCTL_TSFCNTREN); -- cgit From 75ef1b5195311993d148ca98e061f08f9f573d6d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:49 +0100 Subject: staging: vt6656: rename CARDqGetNextTBTT to vnt_get_next_tbtt Drop card and rename to vnt_get_next_tbtt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 8 ++++---- drivers/staging/vt6656/card.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index fdc7cd52112f..ee013a30d372 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -30,7 +30,7 @@ * CARDbSoftwareReset - Sortware reset NIC * vnt_get_tsf_offset - Calculate TSFOffset * vnt_get_current_tsf - Read Current NIC TSF counter - * CARDqGetNextTBTT - Calculate Next Beacon TSF counter + * vnt_get_next_tbtt - Calculate Next Beacon TSF counter * CARDvSetFirstNextTBTT - Set NIC Beacon time * CARDvUpdateNextTBTT - Sync. NIC Beacon time * CARDbRadioPowerOff - Turn Off NIC Radio Power @@ -657,7 +657,7 @@ bool vnt_clear_current_tsf(struct vnt_private *priv) * Return Value: TSF value of next Beacon * */ -u64 CARDqGetNextTBTT(u64 tsf, u16 beacon_interval) +u64 vnt_get_next_tbtt(u64 tsf, u16 beacon_interval) { u32 beacon_int; @@ -696,7 +696,7 @@ void CARDvSetFirstNextTBTT(struct vnt_private *priv, u16 beacon_interval) vnt_clear_current_tsf(priv); - next_tbtt = CARDqGetNextTBTT(next_tbtt, beacon_interval); + next_tbtt = vnt_get_next_tbtt(next_tbtt, beacon_interval); data[0] = (u8)next_tbtt; data[1] = (u8)(next_tbtt >> 8); @@ -733,7 +733,7 @@ void CARDvUpdateNextTBTT(struct vnt_private *priv, u64 tsf, { u8 data[8]; - tsf = CARDqGetNextTBTT(tsf, beacon_interval); + tsf = vnt_get_next_tbtt(tsf, beacon_interval); data[0] = (u8)tsf; data[1] = (u8)(tsf >> 8); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 78ff81078d4c..d39a0a51fcf5 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -57,7 +57,7 @@ bool vnt_clear_current_tsf(struct vnt_private *); void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, u16 wBeaconInterval); -u64 CARDqGetNextTBTT(u64 qwTSF, u16 wBeaconInterval); +u64 vnt_get_next_tbtt(u64, u16); u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int CARDbRadioPowerOff(struct vnt_private *pDevice); int CARDbRadioPowerOn(struct vnt_private *pDevice); -- cgit From 6964cd1215315477b1645d5cf2e2f09648d9a66a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:50 +0100 Subject: staging: vt6656: rename CARDvSetFirstNextTBTT to vnt_reset_next_tbtt Drop card, set and first. The device resets the next tbtt rename to vnt_reset_next_tbtt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/wmgr.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index ee013a30d372..7cb7bbc69fd6 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -31,7 +31,7 @@ * vnt_get_tsf_offset - Calculate TSFOffset * vnt_get_current_tsf - Read Current NIC TSF counter * vnt_get_next_tbtt - Calculate Next Beacon TSF counter - * CARDvSetFirstNextTBTT - Set NIC Beacon time + * vnt_reset_next_tbtt - Set NIC Beacon time * CARDvUpdateNextTBTT - Sync. NIC Beacon time * CARDbRadioPowerOff - Turn Off NIC Radio Power * CARDbRadioPowerOn - Turn On NIC Radio Power @@ -689,7 +689,7 @@ u64 vnt_get_next_tbtt(u64 tsf, u16 beacon_interval) * Return Value: none * */ -void CARDvSetFirstNextTBTT(struct vnt_private *priv, u16 beacon_interval) +void vnt_reset_next_tbtt(struct vnt_private *priv, u16 beacon_interval) { u64 next_tbtt = 0; u8 data[8]; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index d39a0a51fcf5..768515c2503d 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -54,7 +54,7 @@ int vnt_ofdm_min_rate(struct vnt_private *); void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); bool vnt_get_current_tsf(struct vnt_private *, u64 *); bool vnt_clear_current_tsf(struct vnt_private *); -void CARDvSetFirstNextTBTT(struct vnt_private *pDevice, u16 wBeaconInterval); +void vnt_reset_next_tbtt(struct vnt_private *, u16); void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, u16 wBeaconInterval); u64 vnt_get_next_tbtt(u64, u16); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 5b2e9e57ef41..28112ec8314c 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2051,7 +2051,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) // enable TSF counter MACvRegBitsOn(pDevice,MAC_REG_TFTCTL,TFTCTL_TSFCNTREN); // set Next TBTT - CARDvSetFirstNextTBTT(pDevice, pMgmt->wIBSSBeaconPeriod); + vnt_reset_next_tbtt(pDevice, pMgmt->wIBSSBeaconPeriod); pMgmt->uIBSSChannel = pDevice->uChannel; @@ -2584,7 +2584,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, // set Next TBTT // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval - CARDvSetFirstNextTBTT(pDevice, pCurr->wBeaconInterval); + vnt_reset_next_tbtt(pDevice, pCurr->wBeaconInterval); // set BSSID MACvWriteBSSIDAddress(pDevice, pCurr->abyBSSID); -- cgit From 88ec2f7e47d201a28acbbee407805234ca5ec8c9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:51 +0100 Subject: staging: vt6656: rename CARDvUpdateNextTBTT to vnt_update_next_tbtt Drop card and rename to vnt_update_next_tbtt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 3 +-- drivers/staging/vt6656/wmgr.c | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 7cb7bbc69fd6..9ecf189021d5 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -32,7 +32,7 @@ * vnt_get_current_tsf - Read Current NIC TSF counter * vnt_get_next_tbtt - Calculate Next Beacon TSF counter * vnt_reset_next_tbtt - Set NIC Beacon time - * CARDvUpdateNextTBTT - Sync. NIC Beacon time + * vnt_update_next_tbtt - Sync. NIC Beacon time * CARDbRadioPowerOff - Turn Off NIC Radio Power * CARDbRadioPowerOn - Turn On NIC Radio Power * CARDbSetWEPMode - Set NIC Wep mode @@ -728,7 +728,7 @@ void vnt_reset_next_tbtt(struct vnt_private *priv, u16 beacon_interval) * Return Value: none * */ -void CARDvUpdateNextTBTT(struct vnt_private *priv, u64 tsf, +void vnt_update_next_tbtt(struct vnt_private *priv, u64 tsf, u16 beacon_interval) { u8 data[8]; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 768515c2503d..d5f7c68c835d 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -55,8 +55,7 @@ void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); bool vnt_get_current_tsf(struct vnt_private *, u64 *); bool vnt_clear_current_tsf(struct vnt_private *); void vnt_reset_next_tbtt(struct vnt_private *, u16); -void CARDvUpdateNextTBTT(struct vnt_private *pDevice, u64 qwTSF, - u16 wBeaconInterval); +void vnt_update_next_tbtt(struct vnt_private *, u64, u16); u64 vnt_get_next_tbtt(u64, u16); u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int CARDbRadioPowerOff(struct vnt_private *pDevice); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 28112ec8314c..1646aafa774f 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1917,7 +1917,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) MACvWriteBeaconInterval(pDevice, pMgmt->wCurrBeaconPeriod); vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp, pRxPacket->qwLocalTSF); - CARDvUpdateNextTBTT(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); + vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); // Turn off bssid filter to avoid filter others adhoc station which bssid is different. MACvWriteBSSIDAddress(pDevice, pMgmt->abyCurrBSSID); @@ -1947,7 +1947,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) vnt_get_current_tsf(pDevice, &qwCurrTSF); vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp , pRxPacket->qwLocalTSF); vnt_get_current_tsf(pDevice, &qwCurrTSF); - CARDvUpdateNextTBTT(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); + vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); } return; -- cgit From fa26e0bd299c3eefbc507ce6b4ee7b71aa431ea6 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:52 +0100 Subject: staging: vt6656: rename CARDbRadioPowerOff to vnt_radio_power_off Drop card and rename to vnt_radio_power_off Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 9ecf189021d5..e2ed0f458066 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -33,7 +33,7 @@ * vnt_get_next_tbtt - Calculate Next Beacon TSF counter * vnt_reset_next_tbtt - Set NIC Beacon time * vnt_update_next_tbtt - Sync. NIC Beacon time - * CARDbRadioPowerOff - Turn Off NIC Radio Power + * vnt_radio_power_off - Turn Off NIC Radio Power * CARDbRadioPowerOn - Turn On NIC Radio Power * CARDbSetWEPMode - Set NIC Wep mode * CARDbSetTxPower - Set NIC tx power @@ -764,7 +764,7 @@ void vnt_update_next_tbtt(struct vnt_private *priv, u64 tsf, * Return Value: true if success; otherwise false * */ -int CARDbRadioPowerOff(struct vnt_private *priv) +int vnt_radio_power_off(struct vnt_private *priv) { int ret = true; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index d5f7c68c835d..614e6d6f0b27 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -58,7 +58,7 @@ void vnt_reset_next_tbtt(struct vnt_private *, u16); void vnt_update_next_tbtt(struct vnt_private *, u64, u16); u64 vnt_get_next_tbtt(u64, u16); u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); -int CARDbRadioPowerOff(struct vnt_private *pDevice); +int vnt_radio_power_off(struct vnt_private *); int CARDbRadioPowerOn(struct vnt_private *pDevice); u8 vnt_get_pkt_type(struct vnt_private *); void CARDvSetBSSMode(struct vnt_private *pDevice); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 636afc2fdb17..2378068a8908 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -560,7 +560,7 @@ static int device_init_registers(struct vnt_private *pDevice) if ((pDevice->bHWRadioOff == true) || (pDevice->bRadioControlOff == true)) { - CARDbRadioPowerOff(pDevice); + vnt_radio_power_off(pDevice); } else { CARDbRadioPowerOn(pDevice); } diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index cec6fc6dc6b7..d1d6cf28abf3 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -439,7 +439,7 @@ void vRunCommand(struct work_struct *work) } netif_stop_queue(pDevice->dev); if (pDevice->bNeedRadioOFF == true) - CARDbRadioPowerOff(pDevice); + vnt_radio_power_off(pDevice); break; @@ -798,7 +798,7 @@ void vRunCommand(struct work_struct *work) memset(pItemSSID->abySSID, 0, WLAN_SSID_MAXLEN); netif_stop_queue(pDevice->dev); - CARDbRadioPowerOff(pDevice); + vnt_radio_power_off(pDevice); MACvRegBitsOn(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_OFF); -- cgit From 8a5e6c8c67de72af991d29e498c4a210183375fc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:53 +0100 Subject: staging: vt6656: rename CARDbRadioPowerOn to vnt_radio_power_on Drop card and rename to vnt_radio_power_on Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index e2ed0f458066..366d7d5b37b9 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -34,7 +34,7 @@ * vnt_reset_next_tbtt - Set NIC Beacon time * vnt_update_next_tbtt - Sync. NIC Beacon time * vnt_radio_power_off - Turn Off NIC Radio Power - * CARDbRadioPowerOn - Turn On NIC Radio Power + * vnt_radio_power_on - Turn On NIC Radio Power * CARDbSetWEPMode - Set NIC Wep mode * CARDbSetTxPower - Set NIC tx power * @@ -801,7 +801,7 @@ int vnt_radio_power_off(struct vnt_private *priv) * Return Value: true if success; otherwise false * */ -int CARDbRadioPowerOn(struct vnt_private *priv) +int vnt_radio_power_on(struct vnt_private *priv) { int ret = true; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 614e6d6f0b27..150f870a2362 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -59,7 +59,7 @@ void vnt_update_next_tbtt(struct vnt_private *, u64, u16); u64 vnt_get_next_tbtt(u64, u16); u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int vnt_radio_power_off(struct vnt_private *); -int CARDbRadioPowerOn(struct vnt_private *pDevice); +int vnt_radio_power_on(struct vnt_private *); u8 vnt_get_pkt_type(struct vnt_private *); void CARDvSetBSSMode(struct vnt_private *pDevice); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 2378068a8908..09da861263c3 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -562,7 +562,7 @@ static int device_init_registers(struct vnt_private *pDevice) (pDevice->bRadioControlOff == true)) { vnt_radio_power_off(pDevice); } else { - CARDbRadioPowerOn(pDevice); + vnt_radio_power_on(pDevice); } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----INIbInitAdapter Exit\n"); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index d1d6cf28abf3..191e7887198f 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -807,7 +807,7 @@ void vRunCommand(struct work_struct *work) } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_RADIO_START_ON........................\n"); pDevice->bHWRadioOff = false; - CARDbRadioPowerOn(pDevice); + vnt_radio_power_on(pDevice); MACvRegBitsOff(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_ON); -- cgit From bc240f54e52fb1095ce86f86538eb2c30dffb154 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 30 May 2014 23:22:54 +0100 Subject: staging: vt6656: rename CARDvSetBSSMode to vnt_set_bss_mode drop card and rename to vnt_set_bss_mode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/card.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 6 +++--- drivers/staging/vt6656/wmgr.c | 10 +++++----- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 366d7d5b37b9..ffd6a01e609b 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -829,7 +829,7 @@ int vnt_radio_power_on(struct vnt_private *priv) return ret; } -void CARDvSetBSSMode(struct vnt_private *priv) +void vnt_set_bss_mode(struct vnt_private *priv) { if (priv->byRFType == RF_AIROHA7230 && priv->byBBType == BB_TYPE_11A) MACvSetBBType(priv, BB_TYPE_11G); diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 150f870a2362..8c6f67d5a967 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -61,6 +61,6 @@ u64 vnt_get_tsf_offset(u8 byRxRate, u64 qwTSF1, u64 qwTSF2); int vnt_radio_power_off(struct vnt_private *); int vnt_radio_power_on(struct vnt_private *); u8 vnt_get_pkt_type(struct vnt_private *); -void CARDvSetBSSMode(struct vnt_private *pDevice); +void vnt_set_bss_mode(struct vnt_private *); #endif /* __CARD_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 09da861263c3..bdb9de8b7440 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -525,7 +525,7 @@ static int device_init_registers(struct vnt_private *pDevice) } BBvSetShortSlotTime(pDevice); - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); pDevice->byBBVGACurrent = pDevice->abyBBVGA[0]; pDevice->byBBVGANew = pDevice->byBBVGACurrent; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 191e7887198f..acd5be76a60a 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -333,11 +333,11 @@ void vRunCommand(struct work_struct *work) if ((pDevice->byBBType != BB_TYPE_11A) && (pMgmt->uScanChannel > CB_MAX_CHANNEL_24G)) { pDevice->byBBType = BB_TYPE_11A; - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } else if ((pDevice->byBBType == BB_TYPE_11A) && (pMgmt->uScanChannel <= CB_MAX_CHANNEL_24G)) { pDevice->byBBType = BB_TYPE_11G; - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning.... channel: [%d]\n", pMgmt->uScanChannel); // Set channel @@ -377,7 +377,7 @@ void vRunCommand(struct work_struct *work) // Set Baseband's sensitivity back. if (pDevice->byBBType != pDevice->byScanBBType) { pDevice->byBBType = pDevice->byScanBBType; - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } BBvSetShortSlotTime(pDevice); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 1646aafa774f..0ba292c2e6e1 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2081,7 +2081,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) // vUpdateIFS() use pDevice->bShortSlotTime as parameter so it must be called // after setting ShortSlotTime. // CARDvSetBSSMode call vUpdateIFS() - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { MACvRegBitsOn(pDevice, MAC_REG_HOSTCR, HOSTCR_AP); @@ -2601,7 +2601,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, pMgmt->eCurrentPHYMode = PHY_TYPE_11A; pDevice->bShortSlotTime = true; BBvSetShortSlotTime(pDevice); - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } else { return; } @@ -2613,7 +2613,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, pMgmt->eCurrentPHYMode = PHY_TYPE_11B; pDevice->bShortSlotTime = false; BBvSetShortSlotTime(pDevice); - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } else { return; } @@ -2624,12 +2624,12 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, pMgmt->eCurrentPHYMode = PHY_TYPE_11G; pDevice->bShortSlotTime = true; BBvSetShortSlotTime(pDevice); - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } else if (pDevice->eConfigPHYMode == PHY_TYPE_11B) { pDevice->byBBType = BB_TYPE_11B; pDevice->bShortSlotTime = false; BBvSetShortSlotTime(pDevice); - CARDvSetBSSMode(pDevice); + vnt_set_bss_mode(pDevice); } else { return; } -- cgit From d10079105f00b2361571d9ee328e72a0015a923a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:36 +0100 Subject: staging: vt6656: rename MACvWriteMultiAddr to vnt_mac_set_filter The function sets the mac filter so rename to vnt_mac_set_filter Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index cadf7cd280c3..8c73f3628010 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -50,7 +50,7 @@ * Return Value: none * */ -void MACvWriteMultiAddr(struct vnt_private *priv, u64 mc_filter) +void vnt_mac_set_filter(struct vnt_private *priv, u64 mc_filter) { __le64 le_mc = cpu_to_le64(mc_filter); diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 986ca95f7204..b0e5d495a5aa 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -414,7 +414,7 @@ struct vnt_mac_set_key { u8 key[WLAN_KEY_LEN_CCMP]; } __packed; -void MACvWriteMultiAddr(struct vnt_private *, u64); +void vnt_mac_set_filter(struct vnt_private *, u64); void MACbShutdown(struct vnt_private *); void MACvSetBBType(struct vnt_private *, u8); void MACvDisableKeyEntry(struct vnt_private *, u8); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index bdb9de8b7440..b297f3afb5b4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1284,7 +1284,7 @@ void vnt_configure_filter(struct vnt_private *priv) } else if ((netdev_mc_count(dev) > priv->multicast_limit) || (dev->flags & IFF_ALLMULTI)) { mc_filter = ~0x0; - MACvWriteMultiAddr(priv, mc_filter); + vnt_mac_set_filter(priv, mc_filter); priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); } else { @@ -1294,7 +1294,7 @@ void vnt_configure_filter(struct vnt_private *priv) mc_filter |= 1ULL << (bit_nr & 0x3f); } - MACvWriteMultiAddr(priv, mc_filter); + vnt_mac_set_filter(priv, mc_filter); priv->byRxMode &= ~(RCR_UNICAST); priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); -- cgit From aa6907da1f6727711b0d58e24bbc8954d81289d0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:37 +0100 Subject: staging: vt6656: rename MACbShutdown to vnt_mac_shutdown Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/main_usb.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 8c73f3628010..5ee5376b2d99 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -69,7 +69,7 @@ void vnt_mac_set_filter(struct vnt_private *priv, u64 mc_filter) * * */ -void MACbShutdown(struct vnt_private *priv) +void vnt_mac_shutdown(struct vnt_private *priv) { vnt_control_out(priv, MESSAGE_TYPE_MACSHUTDOWN, 0, 0, 0, NULL); } diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index b0e5d495a5aa..9eee6d7da503 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -415,7 +415,7 @@ struct vnt_mac_set_key { } __packed; void vnt_mac_set_filter(struct vnt_private *, u64); -void MACbShutdown(struct vnt_private *); +void vnt_mac_shutdown(struct vnt_private *); void MACvSetBBType(struct vnt_private *, u8); void MACvDisableKeyEntry(struct vnt_private *, u8); void MACvSetKeyEntry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index b297f3afb5b4..11738dc4fb94 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1002,9 +1002,9 @@ static int device_close(struct net_device *dev) for (uu = 0; uu < MAX_KEY_TABLE; uu++) MACvDisableKeyEntry(pDevice,uu); - if ((pDevice->flags & DEVICE_FLAGS_UNPLUG) == false) { - MACbShutdown(pDevice); - } + if ((pDevice->flags & DEVICE_FLAGS_UNPLUG) == false) + vnt_mac_shutdown(pDevice); + netif_stop_queue(pDevice->dev); MP_SET_FLAG(pDevice, fMP_DISCONNECTED); MP_CLEAR_FLAG(pDevice, fMP_POST_WRITES); -- cgit From 05089fbc52ed1b1fa3da7d1e53d9423047466c5f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:38 +0100 Subject: staging: vt6656: rename MACvSetBBType to vnt_mac_set_bb_type Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index ffd6a01e609b..03b0cf3626e8 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -832,9 +832,9 @@ int vnt_radio_power_on(struct vnt_private *priv) void vnt_set_bss_mode(struct vnt_private *priv) { if (priv->byRFType == RF_AIROHA7230 && priv->byBBType == BB_TYPE_11A) - MACvSetBBType(priv, BB_TYPE_11G); + vnt_mac_set_bb_type(priv, BB_TYPE_11G); else - MACvSetBBType(priv, priv->byBBType); + vnt_mac_set_bb_type(priv, priv->byBBType); priv->byPacketType = vnt_get_pkt_type(priv); diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 5ee5376b2d99..136c2637dcb3 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -74,7 +74,7 @@ void vnt_mac_shutdown(struct vnt_private *priv) vnt_control_out(priv, MESSAGE_TYPE_MACSHUTDOWN, 0, 0, 0, NULL); } -void MACvSetBBType(struct vnt_private *priv, u8 type) +void vnt_mac_set_bb_type(struct vnt_private *priv, u8 type) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 9eee6d7da503..ac3d794e0021 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -416,7 +416,7 @@ struct vnt_mac_set_key { void vnt_mac_set_filter(struct vnt_private *, u64); void vnt_mac_shutdown(struct vnt_private *); -void MACvSetBBType(struct vnt_private *, u8); +void vnt_mac_set_bb_type(struct vnt_private *, u8); void MACvDisableKeyEntry(struct vnt_private *, u8); void MACvSetKeyEntry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void MACvRegBitsOff(struct vnt_private *, u8, u8); -- cgit From cd731941a09c0c32c0faa2a8572164df71aa704b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:39 +0100 Subject: staging: vt6656: rename MACvDisableKeyEntry to vnt_mac_disable_keyentry Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/iwctl.c | 2 +- drivers/staging/vt6656/key.c | 1 - drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wpactl.c | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index c43718d788c0..b45af4acb183 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -1224,7 +1224,7 @@ int iwctl_siwencode(struct net_device *dev, struct iw_request_info *info, pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; if (pDevice->flags & DEVICE_FLAGS_OPENED) { for (uu = 0; uu < MAX_KEY_TABLE; uu++) - MACvDisableKeyEntry(pDevice, uu); + vnt_mac_disable_keyentry(pDevice, uu); } } if (wrq->flags & IW_ENCODE_RESTRICTED) { diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 38ea67531d97..4b08654cc439 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -64,7 +64,6 @@ static void s_vCheckKeyTableValid(struct vnt_private *pDevice, pTable->KeyTable[i].wKeyCtl = 0; pTable->KeyTable[i].bSoftWEP = false; pbyData[wLength++] = (u8) i; - //MACvDisableKeyEntry(pDevice, i); } } diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 136c2637dcb3..fe6b4ace408b 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -99,7 +99,7 @@ void vnt_mac_set_bb_type(struct vnt_private *priv, u8 type) * Return Value: none * */ -void MACvDisableKeyEntry(struct vnt_private *priv, u8 entry_idx) +void vnt_mac_disable_keyentry(struct vnt_private *priv, u8 entry_idx) { vnt_control_out(priv, MESSAGE_TYPE_CLRKEYENTRY, 0, 0, sizeof(entry_idx), &entry_idx); diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index ac3d794e0021..a808794abbe9 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -417,7 +417,7 @@ struct vnt_mac_set_key { void vnt_mac_set_filter(struct vnt_private *, u64); void vnt_mac_shutdown(struct vnt_private *); void vnt_mac_set_bb_type(struct vnt_private *, u8); -void MACvDisableKeyEntry(struct vnt_private *, u8); +void vnt_mac_disable_keyentry(struct vnt_private *, u8); void MACvSetKeyEntry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void MACvRegBitsOff(struct vnt_private *, u8, u8); void MACvRegBitsOn(struct vnt_private *, u8, u8); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 11738dc4fb94..fea667fd8914 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1000,7 +1000,7 @@ static int device_close(struct net_device *dev) pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; for (uu = 0; uu < MAX_KEY_TABLE; uu++) - MACvDisableKeyEntry(pDevice,uu); + vnt_mac_disable_keyentry(pDevice, uu); if ((pDevice->flags & DEVICE_FLAGS_UNPLUG) == false) vnt_mac_shutdown(pDevice); diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 0a067151eca5..2b508beaa2c2 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -80,7 +80,7 @@ int wpa_set_keys(struct vnt_private *pDevice, void *ctx) pDevice->byKeyIndex = 0; pDevice->bTransmitKey = false; for (uu=0; uu Date: Sat, 31 May 2014 11:50:40 +0100 Subject: staging: vt6656: rename MACvSetKeyEntry to vnt_mac_set_keyentry Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/key.c | 12 ++++++------ drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 4b08654cc439..33e3e5aa76ac 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -238,8 +238,8 @@ int KeybSetKey(struct vnt_private *pDevice, PSKeyManagement pTable, pKey->abyKey[15] |= 0x80; } - MACvSetKeyEntry(pDevice, pTable->KeyTable[i].wKeyCtl, i, uKeyIdx, - pbyBSSID, pKey->abyKey); + vnt_mac_set_keyentry(pDevice, pTable->KeyTable[i].wKeyCtl, i, + uKeyIdx, pbyBSSID, pKey->abyKey); if ((dwKeyIndex & USE_KEYRSC) == 0) pKey->KeyRSC = 0; /* RSC set by NIC */ @@ -308,7 +308,7 @@ int KeybSetKey(struct vnt_private *pDevice, PSKeyManagement pTable, pKey->abyKey[15] |= 0x80; } - MACvSetKeyEntry(pDevice, pTable->KeyTable[j].wKeyCtl, j, uKeyIdx, + vnt_mac_set_keyentry(pDevice, pTable->KeyTable[j].wKeyCtl, j, uKeyIdx, pbyBSSID, pKey->abyKey); if ((dwKeyIndex & USE_KEYRSC) == 0) @@ -604,7 +604,7 @@ int KeybSetDefaultKey(struct vnt_private *pDevice, PSKeyManagement pTable, pKey->abyKey[15] |= 0x80; } - MACvSetKeyEntry(pDevice, pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl, + vnt_mac_set_keyentry(pDevice, pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl, MAX_KEY_TABLE-1, uKeyIdx, pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID, pKey->abyKey); @@ -700,8 +700,8 @@ int KeybSetAllGroupKey(struct vnt_private *pDevice, PSKeyManagement pTable, pKey->abyKey[15] |= 0x80; } - MACvSetKeyEntry(pDevice, pTable->KeyTable[i].wKeyCtl, i, uKeyIdx, - pTable->KeyTable[i].abyBSSID, pKey->abyKey); + vnt_mac_set_keyentry(pDevice, pTable->KeyTable[i].wKeyCtl, i, + uKeyIdx, pTable->KeyTable[i].abyBSSID, pKey->abyKey); if ((dwKeyIndex & USE_KEYRSC) == 0) pKey->KeyRSC = 0; /* RSC set by NIC */ diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index fe6b4ace408b..2d5121ab6d6d 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -119,7 +119,7 @@ void vnt_mac_disable_keyentry(struct vnt_private *priv, u8 entry_idx) * Return Value: none * */ -void MACvSetKeyEntry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx, +void vnt_mac_set_keyentry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx, u32 key_idx, u8 *addr, u8 *key) { struct vnt_mac_set_key set_key; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index a808794abbe9..331c75cd62ae 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -418,7 +418,7 @@ void vnt_mac_set_filter(struct vnt_private *, u64); void vnt_mac_shutdown(struct vnt_private *); void vnt_mac_set_bb_type(struct vnt_private *, u8); void vnt_mac_disable_keyentry(struct vnt_private *, u8); -void MACvSetKeyEntry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); +void vnt_mac_set_keyentry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void MACvRegBitsOff(struct vnt_private *, u8, u8); void MACvRegBitsOn(struct vnt_private *, u8, u8); void MACvWriteWord(struct vnt_private *, u8, u16); -- cgit From a9bed1df5b698eca071a583eb4d66336fc8550f5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:41 +0100 Subject: staging: vt6656: rename MACvRegBitsOff to vnt_mac_reg_bits_off Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 +++--- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/main_usb.c | 3 ++- drivers/staging/vt6656/power.c | 4 ++-- drivers/staging/vt6656/wcmd.c | 8 ++++---- drivers/staging/vt6656/wmgr.c | 5 ++--- 7 files changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 03b0cf3626e8..4e3f34a1c73a 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -92,7 +92,7 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) MACvRegBitsOn(priv, MAC_REG_MACCR, MACCR_CLRNAV); /* Set Channel[7] = 0 to tell H/W channel is changing now. */ - MACvRegBitsOff(priv, MAC_REG_CHANNEL, 0xb0); + vnt_mac_reg_bits_off(priv, MAC_REG_CHANNEL, 0xb0); vnt_control_out(priv, MESSAGE_TYPE_SELECT_CHANNLE, connection_channel, 0, 0, NULL); @@ -777,12 +777,12 @@ int vnt_radio_power_off(struct vnt_private *priv) case RF_VT3226: case RF_VT3226D0: case RF_VT3342A0: - MACvRegBitsOff(priv, MAC_REG_SOFTPWRCTL, + vnt_mac_reg_bits_off(priv, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3)); break; } - MACvRegBitsOff(priv, MAC_REG_HOSTCR, HOSTCR_RXON); + vnt_mac_reg_bits_off(priv, MAC_REG_HOSTCR, HOSTCR_RXON); BBvSetDeepSleep(priv); diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 2d5121ab6d6d..cf62ddfa41ea 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -147,7 +147,7 @@ void vnt_mac_set_keyentry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx, (u16)key_idx, sizeof(struct vnt_mac_set_key), (u8 *)&set_key); } -void MACvRegBitsOff(struct vnt_private *priv, u8 reg_ofs, u8 bits) +void vnt_mac_reg_bits_off(struct vnt_private *priv, u8 reg_ofs, u8 bits) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 331c75cd62ae..a12f88392694 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -419,7 +419,7 @@ void vnt_mac_shutdown(struct vnt_private *); void vnt_mac_set_bb_type(struct vnt_private *, u8); void vnt_mac_disable_keyentry(struct vnt_private *, u8); void vnt_mac_set_keyentry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); -void MACvRegBitsOff(struct vnt_private *, u8, u8); +void vnt_mac_reg_bits_off(struct vnt_private *, u8, u8); void MACvRegBitsOn(struct vnt_private *, u8, u8); void MACvWriteWord(struct vnt_private *, u8, u16); void MACvWriteBSSIDAddress(struct vnt_private *, u8 *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fea667fd8914..e8c5f973e203 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -546,7 +546,8 @@ static int device_init_registers(struct vnt_private *pDevice) pDevice->bHWRadioOff = true; MACvRegBitsOn(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); } else { - MACvRegBitsOff(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); + vnt_mac_reg_bits_off(pDevice, MAC_REG_GPIOCTL1, + GPIO3_INTMD); pDevice->bHWRadioOff = false; } diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index ddbd04695c99..fc7a29b4de00 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -88,7 +88,7 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) if (wListenInterval >= 2) { /* clear always listen beacon */ - MACvRegBitsOff(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); + vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); /* first time set listen next beacon */ MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); @@ -133,7 +133,7 @@ void PSvDisablePowerSaving(struct vnt_private *pDevice) 0, 0, NULL); /* clear AutoSleep */ - MACvRegBitsOff(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); + vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); /* set always listen beacon */ MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index acd5be76a60a..35cf0cf39d93 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -111,7 +111,7 @@ static void vAdHocBeaconStop(struct vnt_private *pDevice) if (bStop) { //PMESG(("STOP_BEACON: IBSSChannel = %u, ScanChannel = %u\n", // pMgmt->uIBSSChannel, pMgmt->uScanChannel)); - MACvRegBitsOff(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_off(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); } } /* vAdHocBeaconStop */ @@ -325,7 +325,7 @@ void vRunCommand(struct work_struct *work) pDevice->byScanBBType = pDevice->byBBType; //lucas pDevice->bStopDataPkt = true; // Turn off RCR_BSSID filter every time - MACvRegBitsOff(pDevice, MAC_REG_RCR, RCR_BSSID); + vnt_mac_reg_bits_off(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode &= ~RCR_BSSID; } //lucas @@ -647,7 +647,7 @@ void vRunCommand(struct work_struct *work) KERN_INFO "vMgrCreateOwnIBSS fail!\n"); } // always turn off unicast bit - MACvRegBitsOff(pDevice, MAC_REG_RCR, RCR_UNICAST); + vnt_mac_reg_bits_off(pDevice, MAC_REG_RCR, RCR_UNICAST); pDevice->byRxMode &= ~RCR_UNICAST; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wcmd: rx_mode = %x\n", pDevice->byRxMode); BSSvAddMulticastNode(pDevice); @@ -808,7 +808,7 @@ void vRunCommand(struct work_struct *work) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_RADIO_START_ON........................\n"); pDevice->bHWRadioOff = false; vnt_radio_power_on(pDevice); - MACvRegBitsOff(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); + vnt_mac_reg_bits_off(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_ON); } diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 0ba292c2e6e1..7827d792ea0c 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1932,7 +1932,6 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) if (pDevice->byPreambleType != byOldPreambleType) vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); - // MACvRegBitsOff(pDevice->PortOffset, MAC_REG_RCR, RCR_BSSID); // set highest basic rate // s_vSetHighestBasicRate(pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates); // Prepare beacon frame @@ -2561,7 +2560,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, // if previous mode is IBSS. if(pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - MACvRegBitsOff(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_off(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); } // Init the BSS informations @@ -2636,7 +2635,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, } if (uBSSMode == WMAC_MODE_ESS_STA) { - MACvRegBitsOff(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); + vnt_mac_reg_bits_off(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode |= RCR_BSSID; pMgmt->bCurrBSSIDFilterOn = true; -- cgit From 369575377e8d47a9f7592f24917556f0c9996eaa Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:42 +0100 Subject: staging: vt6656: rename MACvRegBitsOff to vnt_mac_reg_bits_off Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 8 ++++---- drivers/staging/vt6656/card.c | 8 ++++---- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/main_usb.c | 5 +++-- drivers/staging/vt6656/power.c | 20 ++++++++++---------- drivers/staging/vt6656/wcmd.c | 6 +++--- drivers/staging/vt6656/wmgr.c | 16 ++++++++-------- 8 files changed, 34 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 694e34a5ff90..aada8e79a15d 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -994,7 +994,7 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; /* Fix VT3226 DFC system timing issue */ - MACvRegBitsOn(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); + vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); } else if ((priv->byRFType == RF_VT3342A0)) { priv->byBBRxConf = abyVT3184_VT3226D0[10]; length = sizeof(abyVT3184_VT3226D0); @@ -1011,7 +1011,7 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; /* Fix VT3226 DFC system timing issue */ - MACvRegBitsOn(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); + vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); } else { return true; } @@ -1030,11 +1030,11 @@ int BBbVT3184Init(struct vnt_private *priv) (priv->byRFType == RF_VT3342A0)) { vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_ITRTMSET, 0x23); - MACvRegBitsOn(priv, MAC_REG_PAPEDELAY, 0x01); + vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01); } else if (priv->byRFType == RF_VT3226D0) { vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_ITRTMSET, 0x11); - MACvRegBitsOn(priv, MAC_REG_PAPEDELAY, 0x01); + vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01); } vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x04, 0x7f); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 4e3f34a1c73a..9794116a241b 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -89,7 +89,7 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) } /* clear NAV */ - MACvRegBitsOn(priv, MAC_REG_MACCR, MACCR_CLRNAV); + vnt_mac_reg_bits_on(priv, MAC_REG_MACCR, MACCR_CLRNAV); /* Set Channel[7] = 0 to tell H/W channel is changing now. */ vnt_mac_reg_bits_off(priv, MAC_REG_CHANNEL, 0xb0); @@ -636,7 +636,7 @@ bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf) bool vnt_clear_current_tsf(struct vnt_private *priv) { - MACvRegBitsOn(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); + vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); priv->qwCurrTSF = 0; @@ -812,7 +812,7 @@ int vnt_radio_power_on(struct vnt_private *priv) BBvExitDeepSleep(priv); - MACvRegBitsOn(priv, MAC_REG_HOSTCR, HOSTCR_RXON); + vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON); switch (priv->byRFType) { case RF_AL2230: @@ -821,7 +821,7 @@ int vnt_radio_power_on(struct vnt_private *priv) case RF_VT3226: case RF_VT3226D0: case RF_VT3342A0: - MACvRegBitsOn(priv, MAC_REG_SOFTPWRCTL, + vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3)); break; } diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index cf62ddfa41ea..58a1a0121afe 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -158,7 +158,7 @@ void vnt_mac_reg_bits_off(struct vnt_private *priv, u8 reg_ofs, u8 bits) reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvRegBitsOn(struct vnt_private *priv, u8 reg_ofs, u8 bits) +void vnt_mac_reg_bits_on(struct vnt_private *priv, u8 reg_ofs, u8 bits) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index a12f88392694..d41299c820c1 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -420,7 +420,7 @@ void vnt_mac_set_bb_type(struct vnt_private *, u8); void vnt_mac_disable_keyentry(struct vnt_private *, u8); void vnt_mac_set_keyentry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void vnt_mac_reg_bits_off(struct vnt_private *, u8, u8); -void MACvRegBitsOn(struct vnt_private *, u8, u8); +void vnt_mac_reg_bits_on(struct vnt_private *, u8, u8); void MACvWriteWord(struct vnt_private *, u8, u16); void MACvWriteBSSIDAddress(struct vnt_private *, u8 *); void MACvEnableProtectMD(struct vnt_private *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e8c5f973e203..ebb095553bf7 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -544,7 +544,8 @@ static int device_init_registers(struct vnt_private *pDevice) if ((byTmp & GPIO3_DATA) == 0) { pDevice->bHWRadioOff = true; - MACvRegBitsOn(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); + vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL1, + GPIO3_INTMD); } else { vnt_mac_reg_bits_off(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); @@ -557,7 +558,7 @@ static int device_init_registers(struct vnt_private *pDevice) vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - MACvRegBitsOn(pDevice, MAC_REG_GPIOCTL0, 0x01); + vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL0, 0x01); if ((pDevice->bHWRadioOff == true) || (pDevice->bRadioControlOff == true)) { diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index fc7a29b4de00..7c61da6cb04d 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -75,15 +75,15 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) * PSEN->AUTOSLEEP->GO2DOZE */ /* enable power saving hw function */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); /* Set AutoSleep */ - MACvRegBitsOn(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); /* Warren:MUST turn on this once before turn on AUTOSLEEP ,or the * AUTOSLEEP doesn't work */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); if (wListenInterval >= 2) { @@ -91,14 +91,14 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); /* first time set listen next beacon */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); pMgmt->wCountToWakeUp = wListenInterval; } else { /* always listen beacon */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); pMgmt->wCountToWakeUp = 0; } @@ -136,7 +136,7 @@ void PSvDisablePowerSaving(struct vnt_private *pDevice) vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); /* set always listen beacon */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); pDevice->bEnablePSMode = false; if (pDevice->op_mode == NL80211_IFTYPE_STATION) @@ -183,7 +183,7 @@ int PSbConsiderPowerDown(struct vnt_private *pDevice, int bCheckRxDMA, return false; /* Froce PSEN on */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) { if (bCheckCountToWakeUp && (pMgmt->wCountToWakeUp == 0 @@ -195,7 +195,7 @@ int PSbConsiderPowerDown(struct vnt_private *pDevice, int bCheckRxDMA, pDevice->bPSRxBeacon = true; /* no Tx, no Rx isr, now go to Doze */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Go to Doze ZZZZZZZZZZZZZZZ\n"); return true; } @@ -325,12 +325,12 @@ int PSbIsNextTBTTWakeUp(struct vnt_private *pDevice) if (pMgmt->wCountToWakeUp == 1) { /* Turn on wake up to listen next beacon */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); pDevice->bPSRxBeacon = false; bWakeUp = true; } else if (!pDevice->bPSRxBeacon) { /* Listen until RxBeacon */ - MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); } } return bWakeUp; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 35cf0cf39d93..ae773a6bb3de 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -142,7 +142,7 @@ static void vAdHocBeaconRestart(struct vnt_private *pDevice) if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState >= WMAC_STATE_STARTED)) { //PMESG(("RESTART_BEACON\n")); - MACvRegBitsOn(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); } } @@ -390,7 +390,7 @@ void vRunCommand(struct work_struct *work) vnt_set_channel(pDevice, pMgmt->uCurrChannel); // Set Filter if (pMgmt->bCurrBSSIDFilterOn) { - MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); + vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode |= RCR_BSSID; } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning, set back to channel: [%d]\n", pMgmt->uCurrChannel); @@ -799,7 +799,7 @@ void vRunCommand(struct work_struct *work) netif_stop_queue(pDevice->dev); vnt_radio_power_off(pDevice); - MACvRegBitsOn(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); + vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_OFF); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 7827d792ea0c..66548ffb6f8a 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2048,7 +2048,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) vnt_clear_current_tsf(pDevice); // enable TSF counter - MACvRegBitsOn(pDevice,MAC_REG_TFTCTL,TFTCTL_TSFCNTREN); + vnt_mac_reg_bits_on(pDevice, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); // set Next TBTT vnt_reset_next_tbtt(pDevice, pMgmt->wIBSSBeaconPeriod); @@ -2083,12 +2083,12 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) vnt_set_bss_mode(pDevice); if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - MACvRegBitsOn(pDevice, MAC_REG_HOSTCR, HOSTCR_AP); + vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_AP); pMgmt->eCurrMode = WMAC_MODE_ESS_AP; } if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA) { - MACvRegBitsOn(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); + vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); pMgmt->eCurrMode = WMAC_MODE_IBSS_STA; } @@ -2142,7 +2142,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) MACvWriteBSSIDAddress(pDevice, pMgmt->abyCurrBSSID); memcpy(pDevice->abyBSSID, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); - MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); + vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode |= RCR_BSSID; pMgmt->bCurrBSSIDFilterOn = true; @@ -2636,7 +2636,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, if (uBSSMode == WMAC_MODE_ESS_STA) { vnt_mac_reg_bits_off(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); - MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); + vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode |= RCR_BSSID; pMgmt->bCurrBSSIDFilterOn = true; } @@ -2658,8 +2658,8 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, // 2. In Infra mode : Supposed we already synchronized with AP right now. if (uBSSMode == WMAC_MODE_IBSS_STA) { - MACvRegBitsOn(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); - MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID); + vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); + vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); pDevice->byRxMode |= RCR_BSSID; pMgmt->bCurrBSSIDFilterOn = true; } @@ -4059,7 +4059,7 @@ int bMgrPrepareBeaconToSend(struct vnt_private *pDevice, spin_unlock_irqrestore(&pDevice->lock, flags); - MACvRegBitsOn(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); return true; } -- cgit From 57dc49a6c085643e69ed88aa99e8660000737989 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:43 +0100 Subject: staging: vt6656: rename MACvWriteWord to vnt_mac_write_word Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/power.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 58a1a0121afe..d0c3bd3a70ab 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -169,7 +169,7 @@ void vnt_mac_reg_bits_on(struct vnt_private *priv, u8 reg_ofs, u8 bits) reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvWriteWord(struct vnt_private *priv, u8 reg_ofs, u16 word) +void vnt_mac_write_word(struct vnt_private *priv, u8 reg_ofs, u16 word) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index d41299c820c1..fa591311e269 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -421,7 +421,7 @@ void vnt_mac_disable_keyentry(struct vnt_private *, u8); void vnt_mac_set_keyentry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void vnt_mac_reg_bits_off(struct vnt_private *, u8, u8); void vnt_mac_reg_bits_on(struct vnt_private *, u8, u8); -void MACvWriteWord(struct vnt_private *, u8, u16); +void vnt_mac_write_word(struct vnt_private *, u8, u16); void MACvWriteBSSIDAddress(struct vnt_private *, u8 *); void MACvEnableProtectMD(struct vnt_private *); void MACvDisableProtectMD(struct vnt_private *); diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 7c61da6cb04d..8cc259617338 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -64,11 +64,11 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) u16 wAID = pMgmt->wCurrAID | BIT14 | BIT15; /* set period of power up before TBTT */ - MACvWriteWord(pDevice, MAC_REG_PWBT, C_PWBT); + vnt_mac_write_word(pDevice, MAC_REG_PWBT, C_PWBT); if (pDevice->op_mode != NL80211_IFTYPE_ADHOC) { /* set AID */ - MACvWriteWord(pDevice, MAC_REG_AIDATIM, wAID); + vnt_mac_write_word(pDevice, MAC_REG_AIDATIM, wAID); } /* Warren:06-18-2004,the sequence must follow -- cgit From 1cd34eaa28dfca509f1713e327eaa0aaccbf0227 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:44 +0100 Subject: staging: vt6656: rename MACvWriteBSSIDAddress to vnt_mac_set_bssid_addr drop write for set and shorten address. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index d0c3bd3a70ab..1811d5f120b2 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -180,7 +180,7 @@ void vnt_mac_write_word(struct vnt_private *priv, u8 reg_ofs, u16 word) reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvWriteBSSIDAddress(struct vnt_private *priv, u8 *addr) +void vnt_mac_set_bssid_addr(struct vnt_private *priv, u8 *addr) { vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_BSSID0, MESSAGE_REQUEST_MACREG, ETH_ALEN, addr); diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index fa591311e269..d2a44070e86d 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -422,7 +422,7 @@ void vnt_mac_set_keyentry(struct vnt_private *, u16, u32, u32, u8 *, u8 *); void vnt_mac_reg_bits_off(struct vnt_private *, u8, u8); void vnt_mac_reg_bits_on(struct vnt_private *, u8, u8); void vnt_mac_write_word(struct vnt_private *, u8, u16); -void MACvWriteBSSIDAddress(struct vnt_private *, u8 *); +void vnt_mac_set_bssid_addr(struct vnt_private *, u8 *); void MACvEnableProtectMD(struct vnt_private *); void MACvDisableProtectMD(struct vnt_private *); void MACvEnableBarkerPreambleMd(struct vnt_private *); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 66548ffb6f8a..0ed7cefa02e0 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1920,7 +1920,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); // Turn off bssid filter to avoid filter others adhoc station which bssid is different. - MACvWriteBSSIDAddress(pDevice, pMgmt->abyCurrBSSID); + vnt_mac_set_bssid_addr(pDevice, pMgmt->abyCurrBSSID); byOldPreambleType = pDevice->byPreambleType; if (WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo)) { @@ -2139,7 +2139,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) } // set BSSID filter - MACvWriteBSSIDAddress(pDevice, pMgmt->abyCurrBSSID); + vnt_mac_set_bssid_addr(pDevice, pMgmt->abyCurrBSSID); memcpy(pDevice->abyBSSID, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); @@ -2586,7 +2586,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, vnt_reset_next_tbtt(pDevice, pCurr->wBeaconInterval); // set BSSID - MACvWriteBSSIDAddress(pDevice, pCurr->abyBSSID); + vnt_mac_set_bssid_addr(pDevice, pCurr->abyBSSID); memcpy(pMgmt->abyCurrBSSID, pCurr->abyBSSID, 6); -- cgit From ccbf4415d613d49036005394aeb13c795992ae85 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:45 +0100 Subject: staging: vt6656: rename MACvEnableProtectMD to vnt_mac_enable_protect_mode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.c | 2 +- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index fd7ed1de2fe7..e335a4db83d0 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -946,7 +946,7 @@ void BSSvSecondCallBack(struct work_struct *work) /* on/off protect mode */ if (WLAN_GET_ERP_USE_PROTECTION(pDevice->byERPFlag)) { if (!pDevice->bProtectMode) { - MACvEnableProtectMD(pDevice); + vnt_mac_enable_protect_mode(pDevice); pDevice->bProtectMode = true; } } else if (pDevice->bProtectMode) { diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 1811d5f120b2..1319b8ae66f2 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -186,7 +186,7 @@ void vnt_mac_set_bssid_addr(struct vnt_private *priv, u8 *addr) MESSAGE_REQUEST_MACREG, ETH_ALEN, addr); } -void MACvEnableProtectMD(struct vnt_private *priv) +void vnt_mac_enable_protect_mode(struct vnt_private *priv) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index d2a44070e86d..fa3cfc28a11a 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -423,7 +423,7 @@ void vnt_mac_reg_bits_off(struct vnt_private *, u8, u8); void vnt_mac_reg_bits_on(struct vnt_private *, u8, u8); void vnt_mac_write_word(struct vnt_private *, u8, u16); void vnt_mac_set_bssid_addr(struct vnt_private *, u8 *); -void MACvEnableProtectMD(struct vnt_private *); +void vnt_mac_enable_protect_mode(struct vnt_private *); void MACvDisableProtectMD(struct vnt_private *); void MACvEnableBarkerPreambleMd(struct vnt_private *); void MACvDisableBarkerPreambleMd(struct vnt_private *); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 0ed7cefa02e0..bb1242c14c2a 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1655,7 +1655,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) if ((pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION) != pDevice->bProtectMode) {//0000 0010 pDevice->bProtectMode = (pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); if (pDevice->bProtectMode) { - MACvEnableProtectMD(pDevice); + vnt_mac_enable_protect_mode(pDevice); } else { MACvDisableProtectMD(pDevice); } @@ -2387,7 +2387,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) if ((pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION) != pDevice->bProtectMode) {//0000 0010 pDevice->bProtectMode = (pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); if (pDevice->bProtectMode) { - MACvEnableProtectMD(pDevice); + vnt_mac_enable_protect_mode(pDevice); } else { MACvDisableProtectMD(pDevice); } -- cgit From 83a0ee45f5e5405893192aa1d206ddd29fa25478 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:46 +0100 Subject: staging: vt6656: rename MACvDisableProtectMD to vnt_mac_disable_protect_mode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.c | 2 +- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index e335a4db83d0..093b583eab0a 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -950,7 +950,7 @@ void BSSvSecondCallBack(struct work_struct *work) pDevice->bProtectMode = true; } } else if (pDevice->bProtectMode) { - MACvDisableProtectMD(pDevice); + vnt_mac_disable_protect_mode(pDevice); pDevice->bProtectMode = false; } /* on/off short slot time */ diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 1319b8ae66f2..96fff70d75f9 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -197,7 +197,7 @@ void vnt_mac_enable_protect_mode(struct vnt_private *priv) MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvDisableProtectMD(struct vnt_private *priv) +void vnt_mac_disable_protect_mode(struct vnt_private *priv) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index fa3cfc28a11a..effab75447e5 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -424,7 +424,7 @@ void vnt_mac_reg_bits_on(struct vnt_private *, u8, u8); void vnt_mac_write_word(struct vnt_private *, u8, u16); void vnt_mac_set_bssid_addr(struct vnt_private *, u8 *); void vnt_mac_enable_protect_mode(struct vnt_private *); -void MACvDisableProtectMD(struct vnt_private *); +void vnt_mac_disable_protect_mode(struct vnt_private *); void MACvEnableBarkerPreambleMd(struct vnt_private *); void MACvDisableBarkerPreambleMd(struct vnt_private *); void MACvWriteBeaconInterval(struct vnt_private *, u16); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index bb1242c14c2a..f35fdd8bd714 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1657,7 +1657,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) if (pDevice->bProtectMode) { vnt_mac_enable_protect_mode(pDevice); } else { - MACvDisableProtectMD(pDevice); + vnt_mac_disable_protect_mode(pDevice); } vnt_update_ifs(pDevice); } @@ -2031,7 +2031,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) // Disable Protect Mode pDevice->bProtectMode = 0; - MACvDisableProtectMD(pDevice); + vnt_mac_disable_protect_mode(pDevice); pDevice->bBarkerPreambleMd = 0; MACvDisableBarkerPreambleMd(pDevice); @@ -2389,7 +2389,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) if (pDevice->bProtectMode) { vnt_mac_enable_protect_mode(pDevice); } else { - MACvDisableProtectMD(pDevice); + vnt_mac_disable_protect_mode(pDevice); } vnt_update_ifs(pDevice); } @@ -2565,7 +2565,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, // Init the BSS informations pDevice->bProtectMode = false; - MACvDisableProtectMD(pDevice); + vnt_mac_disable_protect_mode(pDevice); pDevice->bBarkerPreambleMd = false; MACvDisableBarkerPreambleMd(pDevice); pDevice->bNonERPPresent = false; -- cgit From a085edc68245fd4ec9c761a4b8f0e543c18a1c09 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:47 +0100 Subject: staging: vt6656: rename MACvEnableBarkerPreambleMd to vnt_mac_enable_barker_preamble_mode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.c | 2 +- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 093b583eab0a..0a662e7c1d68 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -971,7 +971,7 @@ void BSSvSecondCallBack(struct work_struct *work) if (uLongPreambleSTACnt > 0) { if (!pDevice->bBarkerPreambleMd) { - MACvEnableBarkerPreambleMd(pDevice); + vnt_mac_enable_barker_preamble_mode(pDevice); pDevice->bBarkerPreambleMd = true; } } else if (pDevice->bBarkerPreambleMd) { diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 96fff70d75f9..94e9f95a436b 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -208,7 +208,7 @@ void vnt_mac_disable_protect_mode(struct vnt_private *priv) MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvEnableBarkerPreambleMd(struct vnt_private *priv) +void vnt_mac_enable_barker_preamble_mode(struct vnt_private *priv) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index effab75447e5..9b0cac42711e 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -425,7 +425,7 @@ void vnt_mac_write_word(struct vnt_private *, u8, u16); void vnt_mac_set_bssid_addr(struct vnt_private *, u8 *); void vnt_mac_enable_protect_mode(struct vnt_private *); void vnt_mac_disable_protect_mode(struct vnt_private *); -void MACvEnableBarkerPreambleMd(struct vnt_private *); +void vnt_mac_enable_barker_preamble_mode(struct vnt_private *); void MACvDisableBarkerPreambleMd(struct vnt_private *); void MACvWriteBeaconInterval(struct vnt_private *, u16); void vnt_mac_set_led(struct vnt_private *priv, u8, u8); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index f35fdd8bd714..7a5f6990b246 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1668,7 +1668,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) pDevice->bBarkerPreambleMd = (pBSSList->sERP.byERP & WLAN_EID_ERP_BARKER_MODE); //BarkerPreambleMd has higher priority than shortPreamble bit in Cap if (pDevice->bBarkerPreambleMd) { - MACvEnableBarkerPreambleMd(pDevice); + vnt_mac_enable_barker_preamble_mode(pDevice); } else { MACvDisableBarkerPreambleMd(pDevice); } @@ -2400,7 +2400,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) pDevice->bBarkerPreambleMd = (pCurr->sERP.byERP & WLAN_EID_ERP_BARKER_MODE); //BarkerPreambleMd has higher priority than shortPreamble bit in Cap if (pDevice->bBarkerPreambleMd) { - MACvEnableBarkerPreambleMd(pDevice); + vnt_mac_enable_barker_preamble_mode(pDevice); } else { MACvDisableBarkerPreambleMd(pDevice); } -- cgit From 05827c93df800e3c79c3703e5620dbad979c8e8c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:48 +0100 Subject: staging: vt6656: rename MACvDisableBarkerPreambleMd to vnt_mac_disable_barker_preamble_mode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.c | 2 +- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 0a662e7c1d68..997a20ebc626 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -975,7 +975,7 @@ void BSSvSecondCallBack(struct work_struct *work) pDevice->bBarkerPreambleMd = true; } } else if (pDevice->bBarkerPreambleMd) { - MACvDisableBarkerPreambleMd(pDevice); + vnt_mac_disable_barker_preamble_mode(pDevice); pDevice->bBarkerPreambleMd = false; } diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 94e9f95a436b..3275ee9fc2fd 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -219,7 +219,7 @@ void vnt_mac_enable_barker_preamble_mode(struct vnt_private *priv) MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvDisableBarkerPreambleMd(struct vnt_private *priv) +void vnt_mac_disable_barker_preamble_mode(struct vnt_private *priv) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 9b0cac42711e..dfeacbfe5e54 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -426,7 +426,7 @@ void vnt_mac_set_bssid_addr(struct vnt_private *, u8 *); void vnt_mac_enable_protect_mode(struct vnt_private *); void vnt_mac_disable_protect_mode(struct vnt_private *); void vnt_mac_enable_barker_preamble_mode(struct vnt_private *); -void MACvDisableBarkerPreambleMd(struct vnt_private *); +void vnt_mac_disable_barker_preamble_mode(struct vnt_private *); void MACvWriteBeaconInterval(struct vnt_private *, u16); void vnt_mac_set_led(struct vnt_private *priv, u8, u8); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 7a5f6990b246..73c6e9019f2d 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1670,7 +1670,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) if (pDevice->bBarkerPreambleMd) { vnt_mac_enable_barker_preamble_mode(pDevice); } else { - MACvDisableBarkerPreambleMd(pDevice); + vnt_mac_disable_barker_preamble_mode(pDevice); } } } @@ -2034,7 +2034,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) vnt_mac_disable_protect_mode(pDevice); pDevice->bBarkerPreambleMd = 0; - MACvDisableBarkerPreambleMd(pDevice); + vnt_mac_disable_barker_preamble_mode(pDevice); // Kyle Test 2003.11.04 @@ -2402,7 +2402,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) if (pDevice->bBarkerPreambleMd) { vnt_mac_enable_barker_preamble_mode(pDevice); } else { - MACvDisableBarkerPreambleMd(pDevice); + vnt_mac_disable_barker_preamble_mode(pDevice); } } } @@ -2567,7 +2567,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, pDevice->bProtectMode = false; vnt_mac_disable_protect_mode(pDevice); pDevice->bBarkerPreambleMd = false; - MACvDisableBarkerPreambleMd(pDevice); + vnt_mac_disable_barker_preamble_mode(pDevice); pDevice->bNonERPPresent = false; pDevice->byPreambleType = 0; pDevice->wBasicRate = 0; -- cgit From 4cada363eef28474483f0623590084f7d612891c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 11:50:49 +0100 Subject: staging: vt6656: rename MACvWriteBeaconInterval to vnt_mac_set_beacon_interval Drop write for set Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 2 +- drivers/staging/vt6656/mac.h | 2 +- drivers/staging/vt6656/wmgr.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 3275ee9fc2fd..b06436fdfbdd 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -230,7 +230,7 @@ void vnt_mac_disable_barker_preamble_mode(struct vnt_private *priv) MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvWriteBeaconInterval(struct vnt_private *priv, u16 interval) +void vnt_mac_set_beacon_interval(struct vnt_private *priv, u16 interval) { u8 data[2]; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index dfeacbfe5e54..eac2be793cb7 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -427,7 +427,7 @@ void vnt_mac_enable_protect_mode(struct vnt_private *); void vnt_mac_disable_protect_mode(struct vnt_private *); void vnt_mac_enable_barker_preamble_mode(struct vnt_private *); void vnt_mac_disable_barker_preamble_mode(struct vnt_private *); -void MACvWriteBeaconInterval(struct vnt_private *, u16); +void vnt_mac_set_beacon_interval(struct vnt_private *, u16); void vnt_mac_set_led(struct vnt_private *priv, u8, u8); #endif /* __MAC_H__ */ diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 73c6e9019f2d..a1b5307e6caf 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -1915,7 +1915,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) // set HW beacon interval and re-synchronizing.... DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rejoining to Other Adhoc group with same SSID........\n"); - MACvWriteBeaconInterval(pDevice, pMgmt->wCurrBeaconPeriod); + vnt_mac_set_beacon_interval(pDevice, pMgmt->wCurrBeaconPeriod); vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp, pRxPacket->qwLocalTSF); vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); @@ -2041,7 +2041,7 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) // set HW beacon interval if (pMgmt->wIBSSBeaconPeriod == 0) pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; - MACvWriteBeaconInterval(pDevice, pMgmt->wIBSSBeaconPeriod); + vnt_mac_set_beacon_interval(pDevice, pMgmt->wIBSSBeaconPeriod); vnt_get_current_tsf(pDevice, &qwCurrTSF); // clear TSF counter @@ -2579,7 +2579,7 @@ static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, vnt_adjust_tsf(pDevice, pCurr->byRxRate, pCurr->qwBSSTimestamp, pCurr->qwLocalTSF); // set HW beacon interval - MACvWriteBeaconInterval(pDevice, pCurr->wBeaconInterval); + vnt_mac_set_beacon_interval(pDevice, pCurr->wBeaconInterval); // set Next TBTT // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval -- cgit From c2c32da33fb7f1e738bf46bb28a3ca1bb99cbd9e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 13:34:57 +0100 Subject: staging: vt6656: rxtx move vnt_usb_send_context into tx structure. Replacing struct vnt_private. Where struct vnt_private is needed pointer to priv is added. This allows to move tx signaling into vnt_usb_send_context. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 108 +++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 44 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 704f4d3639be..fa048946d309 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -96,7 +96,7 @@ static void s_vSaveTxPktInfo(struct vnt_private *pDevice, u8 byPktNum, static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); -static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, +static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, int bNeedACK, struct ethhdr *psEthHeader, bool need_rts); @@ -119,11 +119,11 @@ static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate); -static u16 s_vFillCTSHead(struct vnt_private *pDevice, +static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, u16 wCurrentRate, u8 byFBOption); -static u16 s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType, +static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, struct ethhdr *psEthHeader, u16 wCurrentRate, u8 byFBOption); @@ -470,9 +470,13 @@ static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, return cpu_to_le16((u16)uDurTime); } -static u16 vnt_rxtx_datahead_g(struct vnt_private *priv, u8 pkt_type, u16 rate, - struct vnt_tx_datahead_g *buf, u32 frame_len, int need_ack) +static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, + u8 pkt_type, u16 rate, struct vnt_tx_datahead_g *buf, + u32 frame_len, int need_ack) { + + struct vnt_private *priv = tx_context->priv; + /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); BBvCalculateParameter(priv, frame_len, priv->byTopCCKBasicRate, @@ -489,10 +493,12 @@ static u16 vnt_rxtx_datahead_g(struct vnt_private *priv, u8 pkt_type, u16 rate, return le16_to_cpu(buf->duration_a); } -static u16 vnt_rxtx_datahead_g_fb(struct vnt_private *priv, u8 pkt_type, - u16 rate, struct vnt_tx_datahead_g_fb *buf, +static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, + u8 pkt_type, u16 rate, struct vnt_tx_datahead_g_fb *buf, u32 frame_len, int need_ack) { + struct vnt_private *priv = tx_context->priv; + /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); @@ -513,10 +519,12 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_private *priv, u8 pkt_type, return le16_to_cpu(buf->duration_a); } -static u16 vnt_rxtx_datahead_a_fb(struct vnt_private *priv, u8 pkt_type, - u16 rate, struct vnt_tx_datahead_a_fb *buf, +static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, + u8 pkt_type, u16 rate, struct vnt_tx_datahead_a_fb *buf, u32 frame_len, int need_ack) { + struct vnt_private *priv = tx_context->priv; + /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); /* Get Duration and TimeStampOff */ @@ -530,10 +538,12 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_private *priv, u8 pkt_type, return le16_to_cpu(buf->duration); } -static u16 vnt_rxtx_datahead_ab(struct vnt_private *priv, u8 pkt_type, - u16 rate, struct vnt_tx_datahead_ab *buf, +static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, + u8 pkt_type, u16 rate, struct vnt_tx_datahead_ab *buf, u32 frame_len, int need_ack) { + struct vnt_private *priv = tx_context->priv; + /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->ab); /* Get Duration and TimeStampOff */ @@ -566,11 +576,12 @@ static int vnt_fill_ieee80211_rts(struct vnt_private *priv, return 0; } -static u16 vnt_rxtx_rts_g_head(struct vnt_private *priv, +static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g *buf, struct ethhdr *eth_hdr, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { + struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; BBvCalculateParameter(priv, rts_frame_len, priv->byTopCCKBasicRate, @@ -587,15 +598,16 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_private *priv, vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); - return vnt_rxtx_datahead_g(priv, pkt_type, current_rate, + return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); } -static u16 vnt_rxtx_rts_g_fb_head(struct vnt_private *priv, +static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g_fb *buf, struct ethhdr *eth_hdr, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { + struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; BBvCalculateParameter(priv, rts_frame_len, priv->byTopCCKBasicRate, @@ -623,15 +635,16 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_private *priv, vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); - return vnt_rxtx_datahead_g_fb(priv, pkt_type, current_rate, + return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); } -static u16 vnt_rxtx_rts_ab_head(struct vnt_private *priv, +static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_ab *buf, struct ethhdr *eth_hdr, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { + struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; BBvCalculateParameter(priv, rts_frame_len, @@ -642,15 +655,16 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_private *priv, vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); - return vnt_rxtx_datahead_ab(priv, pkt_type, current_rate, + return vnt_rxtx_datahead_ab(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); } -static u16 vnt_rxtx_rts_a_fb_head(struct vnt_private *priv, +static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_a_fb *buf, struct ethhdr *eth_hdr, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { + struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; BBvCalculateParameter(priv, rts_frame_len, @@ -667,11 +681,11 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_private *priv, vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); - return vnt_rxtx_datahead_a_fb(priv, pkt_type, current_rate, + return vnt_rxtx_datahead_a_fb(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); } -static u16 s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType, +static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, struct ethhdr *psEthHeader, u16 wCurrentRate, u8 byFBOption) { @@ -688,23 +702,25 @@ static u16 s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType, case PK_TYPE_11GB: case PK_TYPE_11GA: if (byFBOption == AUTO_FB_NONE) - return vnt_rxtx_rts_g_head(pDevice, &head->rts_g, + return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, psEthHeader, byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); else - return vnt_rxtx_rts_g_fb_head(pDevice, &head->rts_g_fb, - psEthHeader, byPktType, cbFrameLength, - bNeedAck, wCurrentRate, byFBOption); + return vnt_rxtx_rts_g_fb_head(tx_context, + &head->rts_g_fb, psEthHeader, byPktType, + cbFrameLength, bNeedAck, wCurrentRate, + byFBOption); break; case PK_TYPE_11A: if (byFBOption) { - return vnt_rxtx_rts_a_fb_head(pDevice, &head->rts_a_fb, - psEthHeader, byPktType, cbFrameLength, - bNeedAck, wCurrentRate, byFBOption); + return vnt_rxtx_rts_a_fb_head(tx_context, + &head->rts_a_fb, psEthHeader, byPktType, + cbFrameLength, bNeedAck, wCurrentRate, + byFBOption); break; } case PK_TYPE_11B: - return vnt_rxtx_rts_ab_head(pDevice, &head->rts_ab, + return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, psEthHeader, byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); } @@ -712,10 +728,11 @@ static u16 s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType, return 0; } -static u16 s_vFillCTSHead(struct vnt_private *pDevice, +static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, u16 wCurrentRate, u8 byFBOption) { + struct vnt_private *pDevice = tx_context->priv; u32 uCTSFrameLen = 14; if (!head) @@ -745,8 +762,9 @@ static u16 s_vFillCTSHead(struct vnt_private *pDevice, memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); - return vnt_rxtx_datahead_g_fb(pDevice, byPktType, wCurrentRate, - &pBuf->data_head, cbFrameLength, bNeedAck); + return vnt_rxtx_datahead_g_fb(tx_context, byPktType, + wCurrentRate, &pBuf->data_head, cbFrameLength, + bNeedAck); } else { struct vnt_cts *pBuf = &head->cts_g; /* Get SignalField,ServiceField,Length */ @@ -763,7 +781,7 @@ static u16 s_vFillCTSHead(struct vnt_private *pDevice, memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); - return vnt_rxtx_datahead_g(pDevice, byPktType, wCurrentRate, + return vnt_rxtx_datahead_g(tx_context, byPktType, wCurrentRate, &pBuf->data_head, cbFrameLength, bNeedAck); } @@ -792,11 +810,12 @@ static u16 s_vFillCTSHead(struct vnt_private *pDevice, * -*/ -static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, +static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, int bNeedACK, struct ethhdr *psEthHeader, bool need_rts) { + struct vnt_private *pDevice = tx_context->priv; struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head; union vnt_tx_data_head *head = NULL; u16 wFifoCtl; @@ -837,7 +856,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, } /* Fill RTS */ - return s_vFillRTSHead(pDevice, byPktType, head, + return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, psEthHeader, wCurrentRate, byFBOption); @@ -863,7 +882,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, } /* Fill CTS */ - return s_vFillCTSHead(pDevice, byPktType, + return s_vFillCTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, wCurrentRate, byFBOption); } @@ -886,7 +905,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK); /* Fill RTS */ - return s_vFillRTSHead(pDevice, byPktType, head, + return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, psEthHeader, wCurrentRate, byFBOption); } else { @@ -897,7 +916,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, PK_TYPE_11A, cbFrameSize, wCurrentRate, bNeedACK); - return vnt_rxtx_datahead_a_fb(pDevice, byPktType, + return vnt_rxtx_datahead_a_fb(tx_context, byPktType, wCurrentRate, &head->data_head_a_fb, cbFrameSize, bNeedACK); } @@ -921,7 +940,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, bNeedACK); /* Fill RTS */ - return s_vFillRTSHead(pDevice, byPktType, head, + return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, psEthHeader, wCurrentRate, byFBOption); } else { @@ -932,7 +951,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, PK_TYPE_11B, cbFrameSize, wCurrentRate, bNeedACK); - return vnt_rxtx_datahead_ab(pDevice, byPktType, + return vnt_rxtx_datahead_ab(tx_context, byPktType, wCurrentRate, &head->data_head_ab, cbFrameSize, bNeedACK); } @@ -946,12 +965,13 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, unsigned int cbFragmentSize,//Hdr+payoad+FCS */ -static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType, - struct vnt_tx_buffer *tx_buffer, int bNeedEncryption, +static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, + u8 byPktType, struct vnt_tx_buffer *tx_buffer, int bNeedEncryption, u32 uSkbPacketLen, struct ethhdr *psEthHeader, u8 *pPacket, PSKeyItem pTransmitKey, u32 uNodeIndex, u16 wCurrentRate, u32 *pcbHeaderLen, u32 *pcbTotalLen) { + struct vnt_private *pDevice = tx_context->priv; struct vnt_tx_fifo_head *pTxBufHead = &tx_buffer->fifo_head; u32 cbFrameSize, cbFrameBodySize; u32 cb802_1_H_len; @@ -1146,7 +1166,7 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType, //pTxBufHead = (PSTxBufHead) &(pTxBufHead->adwTxKey[0]); /* Fill FIFO, RrvTime, RTS and CTS */ - uDuration = s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, + uDuration = s_vGenerateTxParameter(tx_context, byPktType, wCurrentRate, tx_buffer, &pMICHDR, cbMICHDR, cbFrameSize, bNeedACK, psEthHeader, bRTS); @@ -1518,7 +1538,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pTxBufHead->wFragCtl |= (u16)FRAGCTL_NONFRAG; /* Fill FIFO,RrvTime,RTS,and CTS */ - uDuration = s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, + uDuration = s_vGenerateTxParameter(pContext, byPktType, wCurrentRate, pTX_Buffer, &pMICHDR, 0, cbFrameSize, bNeedACK, &sEthHeader, false); @@ -2020,7 +2040,7 @@ int nsDMA_tx_packet(struct vnt_private *pDevice, struct sk_buff *skb) pTX_Buffer = (struct vnt_tx_buffer *)&pContext->data[0]; - fConvertedPacket = s_bPacketToWirelessUsb(pDevice, byPktType, + fConvertedPacket = s_bPacketToWirelessUsb(pContext, byPktType, pTX_Buffer, bNeedEncryption, skb->len, &pDevice->sTxEthHeader, (u8 *)skb->data, pTransmitKey, uNodeIndex, -- cgit From 1622c8fc5c88d64599130710537fe20977637962 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 13:34:58 +0100 Subject: staging: vt6656: rxtx add mac header to vnt_tx_datahead_* structures Add vnt_mac_hdr_pos to set mac header pointer and the calculate header size. Pass ieee80211 hdr pointer and tx_hdr_size in vnt_usb_send_context. Remove old pointer arithmetic and attach pMACHeader to hdr. cbHeaderLength/cbHeaderSize now uses the value of tx_hdr_size. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 + drivers/staging/vt6656/rxtx.c | 122 ++++++++++++++++------------------------ drivers/staging/vt6656/rxtx.h | 4 ++ 3 files changed, 55 insertions(+), 73 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 5b64ca7b62f3..11b863d4099d 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -241,7 +241,9 @@ struct vnt_usb_send_context { void *priv; struct sk_buff *skb; struct urb *urb; + struct ieee80211_hdr *hdr; unsigned int buf_len; + u16 tx_hdr_size; u8 type; bool in_use; unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index fa048946d309..e4cc1ff0f8a7 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -102,8 +102,9 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, int bNeedACK, struct ethhdr *psEthHeader, bool need_rts); static void s_vGenerateMACHeader(struct vnt_private *pDevice, - u8 *pbyBufferAddr, u16 wDuration, struct ethhdr *psEthHeader, - int bNeedEncrypt, u16 wFragType, u32 uFragIdx); + struct ieee80211_hdr *pMACHeader, u16 wDuration, + struct ethhdr *psEthHeader, int bNeedEncrypt, u16 wFragType, + u32 uFragIdx); static void s_vFillTxKey(struct vnt_private *pDevice, struct vnt_tx_fifo_head *fifo_head, u8 *pbyIVHead, @@ -151,6 +152,9 @@ static struct vnt_usb_send_context context->in_use = true; memset(context->data, 0, MAX_TOTAL_SIZE_WITH_ALL_HEADERS); + + context->hdr = NULL; + return context; } } @@ -470,6 +474,19 @@ static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, return cpu_to_le16((u16)uDurTime); } +static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, + struct ieee80211_hdr *hdr) +{ + u8 *head = tx_context->data + offsetof(struct vnt_tx_buffer, fifo_head); + u8 *hdr_pos = (u8 *)hdr; + + tx_context->hdr = hdr; + if (!tx_context->hdr) + return 0; + + return (u16)(hdr_pos - head); +} + static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, u8 pkt_type, u16 rate, struct vnt_tx_datahead_g *buf, u32 frame_len, int need_ack) @@ -490,6 +507,8 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, buf->time_stamp_off_b = vnt_time_stamp_off(priv, priv->byTopCCKBasicRate); + tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); + return le16_to_cpu(buf->duration_a); } @@ -516,6 +535,8 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, buf->time_stamp_off_b = vnt_time_stamp_off(priv, priv->byTopCCKBasicRate); + tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); + return le16_to_cpu(buf->duration_a); } @@ -535,6 +556,8 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, buf->time_stamp_off = vnt_time_stamp_off(priv, rate); + tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); + return le16_to_cpu(buf->duration); } @@ -551,6 +574,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, buf->time_stamp_off = vnt_time_stamp_off(priv, rate); + tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); + return le16_to_cpu(buf->duration); } @@ -979,7 +1004,7 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, u32 cbFCSlen = 4, cbMICHDR = 0; int bNeedACK; bool bRTS = false; - u8 *pbyType, *pbyMacHdr, *pbyIVHead, *pbyPayloadHead, *pbyTxBufferAddr; + u8 *pbyType, *pbyMacHdr, *pbyIVHead, *pbyPayloadHead; u8 abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; u8 abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; @@ -987,7 +1012,6 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, u32 cbHeaderLength = 0, uPadding = 0; struct vnt_mic_hdr *pMICHDR; u8 byFBOption = AUTO_FB_NONE, byFragType; - u16 wTxBufSize; u32 dwMICKey0, dwMICKey1, dwMIC_Priority; u32 *pdwMIC_L, *pdwMIC_R; int bSoftWEP = false; @@ -1106,58 +1130,6 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, pTxBufHead->wFIFOCtl |= (FIFOCTL_RTS | FIFOCTL_LRETRY); } - pbyTxBufferAddr = (u8 *) &(pTxBufHead->adwTxKey[0]); - wTxBufSize = sizeof(struct vnt_tx_fifo_head); - - if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet - if (byFBOption == AUTO_FB_NONE) { - if (bRTS == true) {//RTS_need - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_rts) + - cbMICHDR + sizeof(struct vnt_rts_g); - } - else { //RTS_needless - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_cts) + - cbMICHDR + sizeof(struct vnt_cts); - } - } else { - // Auto Fall Back - if (bRTS == true) {//RTS_need - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_rts) + - cbMICHDR + sizeof(struct vnt_rts_g_fb); - } - else if (bRTS == false) { //RTS_needless - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_cts) + - cbMICHDR + sizeof(struct vnt_cts_fb); - } - } // Auto Fall Back - } - else {//802.11a/b packet - if (byFBOption == AUTO_FB_NONE) { - if (bRTS == true) {//RTS_need - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_ab) + - cbMICHDR + sizeof(struct vnt_rts_ab); - } - else if (bRTS == false) { //RTS_needless, no MICHDR - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_ab) + - cbMICHDR + sizeof(struct vnt_tx_datahead_ab); - } - } else { - // Auto Fall Back - if (bRTS == true) {//RTS_need - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_ab) + - cbMICHDR + sizeof(struct vnt_rts_a_fb); - } - else if (bRTS == false) { //RTS_needless - cbHeaderLength = wTxBufSize + sizeof(struct vnt_rrv_time_ab) + - cbMICHDR + sizeof(struct vnt_tx_datahead_a_fb); - } - } // Auto Fall Back - } - - pbyMacHdr = (u8 *)(pbyTxBufferAddr + cbHeaderLength); - pbyIVHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding); - pbyPayloadHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding + cbIVlen); - //========================= // No Fragmentation //========================= @@ -1170,9 +1142,17 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, tx_buffer, &pMICHDR, cbMICHDR, cbFrameSize, bNeedACK, psEthHeader, bRTS); - // Generate TX MAC Header - s_vGenerateMACHeader(pDevice, pbyMacHdr, (u16)uDuration, psEthHeader, bNeedEncryption, - byFragType, 0); + cbHeaderLength = tx_context->tx_hdr_size; + if (!cbHeaderLength) + return false; + + pbyMacHdr = (u8 *)tx_context->hdr; + pbyIVHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding); + pbyPayloadHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding + cbIVlen); + + /* Generate TX MAC Header */ + s_vGenerateMACHeader(pDevice, tx_context->hdr, (u16)uDuration, + psEthHeader, bNeedEncryption, byFragType, 0); if (bNeedEncryption == true) { //Fill TXKEY @@ -1298,10 +1278,10 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, -*/ static void s_vGenerateMACHeader(struct vnt_private *pDevice, - u8 *pbyBufferAddr, u16 wDuration, struct ethhdr *psEthHeader, - int bNeedEncrypt, u16 wFragType, u32 uFragIdx) + struct ieee80211_hdr *pMACHeader, u16 wDuration, + struct ethhdr *psEthHeader, int bNeedEncrypt, u16 wFragType, + u32 uFragIdx) { - struct ieee80211_hdr *pMACHeader = (struct ieee80211_hdr *)pbyBufferAddr; pMACHeader->frame_control = TYPE_802_11_DATA; @@ -1516,16 +1496,6 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, } //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter() - //Set RrvTime/RTS/CTS Buffer - if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet - cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_cts) + - sizeof(struct vnt_cts); - } - else { // 802.11a/b packet - cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_ab) + - sizeof(struct vnt_tx_datahead_ab); - } - memcpy(&(sEthHeader.h_dest[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), ETH_ALEN); @@ -1542,7 +1512,13 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pTX_Buffer, &pMICHDR, 0, cbFrameSize, bNeedACK, &sEthHeader, false); - pMACHeader = (struct ieee80211_hdr *) (pbyTxBufferAddr + cbHeaderSize); + cbHeaderSize = pContext->tx_hdr_size; + if (!cbHeaderSize) { + pContext->in_use = false; + return CMD_STATUS_RESOURCES; + } + + pMACHeader = pContext->hdr; cbReqCount = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen + cbFrameBodySize; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 6db3337f1d1d..30e14379688d 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -81,6 +81,7 @@ struct vnt_tx_datahead_g { __le16 duration_a; __le16 time_stamp_off_b; __le16 time_stamp_off_a; + struct ieee80211_hdr hdr; } __packed; struct vnt_tx_datahead_g_fb { @@ -92,12 +93,14 @@ struct vnt_tx_datahead_g_fb { __le16 duration_a_f1; __le16 time_stamp_off_b; __le16 time_stamp_off_a; + struct ieee80211_hdr hdr; } __packed; struct vnt_tx_datahead_ab { struct vnt_phy_field ab; __le16 duration; __le16 time_stamp_off; + struct ieee80211_hdr hdr; } __packed; struct vnt_tx_datahead_a_fb { @@ -106,6 +109,7 @@ struct vnt_tx_datahead_a_fb { __le16 time_stamp_off; __le16 duration_f0; __le16 duration_f1; + struct ieee80211_hdr hdr; } __packed; /* RTS buffer header */ -- cgit From 3695c46c7fa88f9f846510ffb44006de2edfb8b3 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 13:34:59 +0100 Subject: staging: vt6656: rxtx s_vFillTxKey use vnt_usb_send_context Use struct vnt_usb_send_context to get mac header and priv pointers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index e4cc1ff0f8a7..26cc57e7ccd1 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -106,10 +106,9 @@ static void s_vGenerateMACHeader(struct vnt_private *pDevice, struct ethhdr *psEthHeader, int bNeedEncrypt, u16 wFragType, u32 uFragIdx); -static void s_vFillTxKey(struct vnt_private *pDevice, +static void s_vFillTxKey(struct vnt_usb_send_context *tx_context, struct vnt_tx_fifo_head *fifo_head, u8 *pbyIVHead, - PSKeyItem pTransmitKey, u8 *pbyHdrBuf, u16 wPayloadLen, - struct vnt_mic_hdr *mic_hdr); + PSKeyItem pTransmitKey, u16 wPayloadLen, struct vnt_mic_hdr *mic_hdr); static void s_vSWencryption(struct vnt_private *pDevice, PSKeyItem pTransmitKey, u8 *pbyPayloadHead, u16 wPayloadSize); @@ -177,15 +176,15 @@ static void s_vSaveTxPktInfo(struct vnt_private *pDevice, u8 byPktNum, stats->tx_bytes += wPktLength; } -static void s_vFillTxKey(struct vnt_private *pDevice, +static void s_vFillTxKey(struct vnt_usb_send_context *tx_context, struct vnt_tx_fifo_head *fifo_head, u8 *pbyIVHead, - PSKeyItem pTransmitKey, u8 *pbyHdrBuf, u16 wPayloadLen, - struct vnt_mic_hdr *mic_hdr) + PSKeyItem pTransmitKey, u16 wPayloadLen, struct vnt_mic_hdr *mic_hdr) { + struct vnt_private *pDevice = tx_context->priv; + struct ieee80211_hdr *pMACHeader = tx_context->hdr; u8 *pbyBuf = (u8 *)&fifo_head->adwTxKey[0]; __le32 *pdwIV = (__le32 *)pbyIVHead; __le32 *pdwExtIV = (__le32 *)((u8 *)pbyIVHead + 4); - struct ieee80211_hdr *pMACHeader = (struct ieee80211_hdr *)pbyHdrBuf; __le32 rev_iv_counter; /* Fill TXKEY */ @@ -1156,8 +1155,8 @@ static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, if (bNeedEncryption == true) { //Fill TXKEY - s_vFillTxKey(pDevice, pTxBufHead, pbyIVHead, pTransmitKey, - pbyMacHdr, (u16)cbFrameBodySize, pMICHDR); + s_vFillTxKey(tx_context, pTxBufHead, pbyIVHead, pTransmitKey, + (u16)cbFrameBodySize, pMICHDR); } /* 802.1H */ @@ -1556,8 +1555,8 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, } } while(false); //Fill TXKEY - s_vFillTxKey(pDevice, pTxBufHead, pbyIVHead, pTransmitKey, - (u8 *)pMACHeader, (u16)cbFrameBodySize, NULL); + s_vFillTxKey(pContext, pTxBufHead, pbyIVHead, pTransmitKey, + (u16)cbFrameBodySize, NULL); memcpy(pMACHeader, pPacket->p80211Header, cbMacHdLen); memcpy(pbyPayloadHead, ((u8 *)(pPacket->p80211Header) + cbMacHdLen), -- cgit From ab51f51b6e4f307a0f8e1ce67f4fa1b57cb61892 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 31 May 2014 13:35:00 +0100 Subject: staging: vt6656: rxtx replace adwTxKey[4] Replace with tx_key with size of WLAN_KEY_LEN_CCMP(16) Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 4 ++-- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 26cc57e7ccd1..22cb642915e2 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -182,7 +182,7 @@ static void s_vFillTxKey(struct vnt_usb_send_context *tx_context, { struct vnt_private *pDevice = tx_context->priv; struct ieee80211_hdr *pMACHeader = tx_context->hdr; - u8 *pbyBuf = (u8 *)&fifo_head->adwTxKey[0]; + u8 *pbyBuf = fifo_head->tx_key; __le32 *pdwIV = (__le32 *)pbyIVHead; __le32 *pdwExtIV = (__le32 *)((u8 *)pbyIVHead + 4); __le32 rev_iv_counter; @@ -1404,7 +1404,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pTX_Buffer = (struct vnt_tx_buffer *)&pContext->data[0]; cbFrameBodySize = pPacket->cbPayloadLen; pTxBufHead = &pTX_Buffer->fifo_head; - pbyTxBufferAddr = (u8 *)&pTxBufHead->adwTxKey[0]; + pbyTxBufferAddr = (u8 *)pTxBufHead; wTxBufSize = sizeof(struct vnt_tx_fifo_head); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 30e14379688d..95a4e2c6aa69 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -219,7 +219,7 @@ union vnt_tx_head { }; struct vnt_tx_fifo_head { - u32 adwTxKey[4]; + u8 tx_key[WLAN_KEY_LEN_CCMP]; u16 wFIFOCtl; __le16 time_stamp; u16 wFragCtl; -- cgit From 2bac6f98061a95580a9f4f79f029adc60863bda2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:21 +0100 Subject: staging: vt6656: PSvEnablePowerSaving remove camel case camel case changes pDevice -> priv wListenInterval -> listen_interval pMgmt -> mgmt wAID -> aid Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 8cc259617338..718443f90022 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -58,60 +58,60 @@ static int msglevel = MSG_LEVEL_INFO; * */ -void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) +void PSvEnablePowerSaving(struct vnt_private *priv, u16 listen_interval) { - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u16 wAID = pMgmt->wCurrAID | BIT14 | BIT15; + struct vnt_manager *mgmt = &priv->vnt_mgmt; + u16 aid = mgmt->wCurrAID | BIT14 | BIT15; /* set period of power up before TBTT */ - vnt_mac_write_word(pDevice, MAC_REG_PWBT, C_PWBT); + vnt_mac_write_word(priv, MAC_REG_PWBT, C_PWBT); - if (pDevice->op_mode != NL80211_IFTYPE_ADHOC) { + if (priv->op_mode != NL80211_IFTYPE_ADHOC) { /* set AID */ - vnt_mac_write_word(pDevice, MAC_REG_AIDATIM, wAID); + vnt_mac_write_word(priv, MAC_REG_AIDATIM, aid); } /* Warren:06-18-2004,the sequence must follow * PSEN->AUTOSLEEP->GO2DOZE */ /* enable power saving hw function */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_PSEN); /* Set AutoSleep */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); /* Warren:MUST turn on this once before turn on AUTOSLEEP ,or the * AUTOSLEEP doesn't work */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_GO2DOZE); - if (wListenInterval >= 2) { + if (listen_interval >= 2) { /* clear always listen beacon */ - vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); + vnt_mac_reg_bits_off(priv, MAC_REG_PSCTL, PSCTL_ALBCN); /* first time set listen next beacon */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); - pMgmt->wCountToWakeUp = wListenInterval; + mgmt->wCountToWakeUp = listen_interval; } else { /* always listen beacon */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); - pMgmt->wCountToWakeUp = 0; + mgmt->wCountToWakeUp = 0; } - pDevice->bEnablePSMode = true; + priv->bEnablePSMode = true; /* We don't send null pkt in ad hoc mode * since beacon will handle this. */ - if (pDevice->op_mode == NL80211_IFTYPE_STATION) - PSbSendNullPacket(pDevice); + if (priv->op_mode == NL80211_IFTYPE_STATION) + PSbSendNullPacket(priv); - pDevice->bPWBitOn = true; + priv->bPWBitOn = true; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable...\n"); } -- cgit From 38c7b5b597d22b5c469ce0ee48a521f206debf2e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:22 +0100 Subject: staging: vt6656: PSvDisablePowerSaving remove camel case pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 718443f90022..b7c2720827b5 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -125,24 +125,24 @@ void PSvEnablePowerSaving(struct vnt_private *priv, u16 listen_interval) * */ -void PSvDisablePowerSaving(struct vnt_private *pDevice) +void PSvDisablePowerSaving(struct vnt_private *priv) { /* disable power saving hw function */ - vnt_control_out(pDevice, MESSAGE_TYPE_DISABLE_PS, 0, + vnt_control_out(priv, MESSAGE_TYPE_DISABLE_PS, 0, 0, 0, NULL); /* clear AutoSleep */ - vnt_mac_reg_bits_off(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); + vnt_mac_reg_bits_off(priv, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); /* set always listen beacon */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); - pDevice->bEnablePSMode = false; + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); + priv->bEnablePSMode = false; - if (pDevice->op_mode == NL80211_IFTYPE_STATION) - PSbSendNullPacket(pDevice); + if (priv->op_mode == NL80211_IFTYPE_STATION) + PSbSendNullPacket(priv); - pDevice->bPWBitOn = false; + priv->bPWBitOn = false; } /* -- cgit From bedf4efa990a1d68e80658a21957a4708d10dee1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:23 +0100 Subject: staging: vt6656: PSbIsNextTBTTWakeUp remove camel case camel case changes pDevice -> priv pMgmt -> mgmt bWakeup -> wake_up Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index b7c2720827b5..7f603724ee9e 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -312,27 +312,27 @@ int PSbSendNullPacket(struct vnt_private *pDevice) * */ -int PSbIsNextTBTTWakeUp(struct vnt_private *pDevice) +int PSbIsNextTBTTWakeUp(struct vnt_private *priv) { - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int bWakeUp = false; + struct vnt_manager *mgmt = &priv->vnt_mgmt; + int wake_up = false; - if (pMgmt->wListenInterval >= 2) { - if (pMgmt->wCountToWakeUp == 0) - pMgmt->wCountToWakeUp = pMgmt->wListenInterval; + if (mgmt->wListenInterval >= 2) { + if (mgmt->wCountToWakeUp == 0) + mgmt->wCountToWakeUp = mgmt->wListenInterval; - pMgmt->wCountToWakeUp--; + mgmt->wCountToWakeUp--; - if (pMgmt->wCountToWakeUp == 1) { + if (mgmt->wCountToWakeUp == 1) { /* Turn on wake up to listen next beacon */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); - pDevice->bPSRxBeacon = false; - bWakeUp = true; - } else if (!pDevice->bPSRxBeacon) { + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); + priv->bPSRxBeacon = false; + wake_up = true; + } else if (!priv->bPSRxBeacon) { /* Listen until RxBeacon */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN); + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); } } - return bWakeUp; + return wake_up; } -- cgit From c1d45af9162ba599f6712c69734511c4b0059b7a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:24 +0100 Subject: staging: vt6656: rename PSvEnablePowerSaving to vnt_enable_power_saving Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/iwctl.c | 4 ++-- drivers/staging/vt6656/power.c | 4 ++-- drivers/staging/vt6656/power.h | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index b45af4acb183..73b779421052 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -1328,11 +1328,11 @@ int iwctl_siwpower(struct net_device *dev, struct iw_request_info *info, } if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); + vnt_enable_power_saving(pDevice, pMgmt->wListenInterval); } else if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); + vnt_enable_power_saving(pDevice, pMgmt->wListenInterval); } switch (wrq->flags & IW_POWER_MODE) { diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 7f603724ee9e..ae136b2c0e57 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -26,7 +26,7 @@ * Date: July 17, 2002 * * Functions: - * PSvEnablePowerSaving - Enable Power Saving Mode + * vnt_enable_power_saving - Enable Power Saving Mode * PSvDiasblePowerSaving - Disable Power Saving Mode * PSbConsiderPowerDown - Decide if we can Power Down * PSvSendPSPOLL - Send PS-POLL packet @@ -58,7 +58,7 @@ static int msglevel = MSG_LEVEL_INFO; * */ -void PSvEnablePowerSaving(struct vnt_private *priv, u16 listen_interval) +void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) { struct vnt_manager *mgmt = &priv->vnt_mgmt; u16 aid = mgmt->wCurrAID | BIT14 | BIT15; diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index 778358239437..0642f188cc8c 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -39,7 +39,7 @@ int PSbConsiderPowerDown(struct vnt_private *, int bCheckRxDMA, int bCheckCountToWakeUp); void PSvDisablePowerSaving(struct vnt_private *); -void PSvEnablePowerSaving(struct vnt_private *, u16 wListenInterval); +void vnt_enable_power_saving(struct vnt_private *, u16); void PSvSendPSPOLL(struct vnt_private *); int PSbSendNullPacket(struct vnt_private *); int PSbIsNextTBTTWakeUp(struct vnt_private *); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index ae773a6bb3de..55c55634e61b 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -593,7 +593,7 @@ void vRunCommand(struct work_struct *work) 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((void *) pDevice, + vnt_enable_power_saving(pDevice, pMgmt->wListenInterval); } /* -- cgit From 905dba5cbd669bc9113560565dbfa18007b949ff Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:25 +0100 Subject: staging: vt6656: rename PSvDisablePowerSaving to vnt_disable_power_saving Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/iwctl.c | 2 +- drivers/staging/vt6656/power.c | 2 +- drivers/staging/vt6656/power.h | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index 73b779421052..3e144ed96363 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -1323,7 +1323,7 @@ int iwctl_siwpower(struct net_device *dev, struct iw_request_info *info, if (wrq->disabled) { pDevice->ePSMode = WMAC_POWER_CAM; - PSvDisablePowerSaving(pDevice); + vnt_disable_power_saving(pDevice); return rc; } if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index ae136b2c0e57..e5462ed1a4d4 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -125,7 +125,7 @@ void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) * */ -void PSvDisablePowerSaving(struct vnt_private *priv) +void vnt_disable_power_saving(struct vnt_private *priv) { /* disable power saving hw function */ diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index 0642f188cc8c..ef669b70970d 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -38,7 +38,7 @@ int PSbConsiderPowerDown(struct vnt_private *, int bCheckRxDMA, int bCheckCountToWakeUp); -void PSvDisablePowerSaving(struct vnt_private *); +void vnt_disable_power_saving(struct vnt_private *); void vnt_enable_power_saving(struct vnt_private *, u16); void PSvSendPSPOLL(struct vnt_private *); int PSbSendNullPacket(struct vnt_private *); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 55c55634e61b..b2d7865a6f75 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -480,7 +480,7 @@ void vRunCommand(struct work_struct *work) // set initial state pMgmt->eCurrState = WMAC_STATE_IDLE; pMgmt->eCurrMode = WMAC_MODE_STANDBY; - PSvDisablePowerSaving((void *) pDevice); + vnt_disable_power_saving(pDevice); BSSvClearNodeDBTable(pDevice, 0); vMgrJoinBSSBegin((void *) pDevice, &Status); // if Infra mode -- cgit From bb73fd0428fec595966369786ff0c6a8a0964cd3 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:26 +0100 Subject: staging: vt6656: rename PSbIsNextTBTTWakeUp to vnt_next_tbtt_wakeup Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 4 ++-- drivers/staging/vt6656/power.h | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index e5462ed1a4d4..cc281922b30c 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -31,7 +31,7 @@ * PSbConsiderPowerDown - Decide if we can Power Down * PSvSendPSPOLL - Send PS-POLL packet * PSbSendNullPacket - Send Null packet - * PSbIsNextTBTTWakeUp - Decide if we need to wake up at next Beacon + * vnt_next_tbtt_wakeup - Decide if we need to wake up at next Beacon * * Revision History: * @@ -312,7 +312,7 @@ int PSbSendNullPacket(struct vnt_private *pDevice) * */ -int PSbIsNextTBTTWakeUp(struct vnt_private *priv) +int vnt_next_tbtt_wakeup(struct vnt_private *priv) { struct vnt_manager *mgmt = &priv->vnt_mgmt; int wake_up = false; diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index ef669b70970d..313f077434f4 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -42,6 +42,6 @@ void vnt_disable_power_saving(struct vnt_private *); void vnt_enable_power_saving(struct vnt_private *, u16); void PSvSendPSPOLL(struct vnt_private *); int PSbSendNullPacket(struct vnt_private *); -int PSbIsNextTBTTWakeUp(struct vnt_private *); +int vnt_next_tbtt_wakeup(struct vnt_private *); #endif /* __POWER_H__ */ diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index b2d7865a6f75..4c3790857d3d 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -826,7 +826,7 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_TBTT_WAKEUP_START: - PSbIsNextTBTTWakeUp(pDevice); + vnt_next_tbtt_wakeup(pDevice); break; case WLAN_CMD_BECON_SEND_START: -- cgit From da47d98f1ecc601ae11d1a9d1477e7dd4405058c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:27 +0100 Subject: staging: vt6656: FIRMWAREbDownload remove camel case camel case changes pDevice -> priv NdisStatus -> status pBuffer -> buffer wLength -> length Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 1159f0b34578..9e31e6c52f6d 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -43,14 +43,14 @@ static int msglevel = MSG_LEVEL_INFO; #define FIRMWARE_CHUNK_SIZE 0x400 -int FIRMWAREbDownload(struct vnt_private *pDevice) +int FIRMWAREbDownload(struct vnt_private *priv) { - struct device *dev = &pDevice->usb->dev; + struct device *dev = &priv->usb->dev; const struct firmware *fw; - int NdisStatus; - void *pBuffer = NULL; + int status; + void *buffer = NULL; bool result = false; - u16 wLength; + u16 length; int ii, rc; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Download firmware\n"); @@ -62,24 +62,24 @@ int FIRMWAREbDownload(struct vnt_private *pDevice) goto out; } - pBuffer = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL); - if (!pBuffer) + buffer = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL); + if (!buffer) goto out; for (ii = 0; ii < fw->size; ii += FIRMWARE_CHUNK_SIZE) { - wLength = min_t(int, fw->size - ii, FIRMWARE_CHUNK_SIZE); - memcpy(pBuffer, fw->data + ii, wLength); + length = min_t(int, fw->size - ii, FIRMWARE_CHUNK_SIZE); + memcpy(buffer, fw->data + ii, length); - NdisStatus = vnt_control_out(pDevice, + status = vnt_control_out(priv, 0, 0x1200+ii, 0x0000, - wLength, - pBuffer); + length, + buffer); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Download firmware...%d %zu\n", ii, fw->size); - if (NdisStatus != STATUS_SUCCESS) + if (status != STATUS_SUCCESS) goto free_fw; } @@ -88,7 +88,7 @@ free_fw: release_firmware(fw); out: - kfree(pBuffer); + kfree(buffer); return result; } -- cgit From e21a53c3a4e6fdcecd1059a8d6afb75abcc699c2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:28 +0100 Subject: staging: vt6656: FIRMWAREbBrach2Sram remove camel case camel case changes pDevice -> priv NdisStatus -> status Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 9e31e6c52f6d..7e66d8b2d254 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -94,19 +94,19 @@ out: } MODULE_FIRMWARE(FIRMWARE_NAME); -int FIRMWAREbBrach2Sram(struct vnt_private *pDevice) +int FIRMWAREbBrach2Sram(struct vnt_private *priv) { - int NdisStatus; + int status; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Branch to Sram\n"); - NdisStatus = vnt_control_out(pDevice, + status = vnt_control_out(priv, 1, 0x1200, 0x0000, 0, NULL); - if (NdisStatus != STATUS_SUCCESS) + if (status != STATUS_SUCCESS) return false; else return true; -- cgit From 0fe8b957a2c6b4a5262051dac0fdd5b7d0c72d43 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:29 +0100 Subject: staging: vt6656: FIRMWAREbCheckVersion remove camel case camel case changes pDevice -> priv ntStatus -> status Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 7e66d8b2d254..a74a42d3b5dd 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -112,32 +112,32 @@ int FIRMWAREbBrach2Sram(struct vnt_private *priv) return true; } -int FIRMWAREbCheckVersion(struct vnt_private *pDevice) +int FIRMWAREbCheckVersion(struct vnt_private *priv) { - int ntStatus; + int status; - ntStatus = vnt_control_in(pDevice, + status = vnt_control_in(priv, MESSAGE_TYPE_READ, 0, MESSAGE_REQUEST_VERSION, 2, - (u8 *) &(pDevice->wFirmwareVersion)); + (u8 *) &(priv->wFirmwareVersion)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", - pDevice->wFirmwareVersion); - if (ntStatus != STATUS_SUCCESS) { + priv->wFirmwareVersion); + if (status != STATUS_SUCCESS) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Invalid.\n"); return false; } - if (pDevice->wFirmwareVersion == 0xFFFF) { + if (priv->wFirmwareVersion == 0xFFFF) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"In Loader.\n"); return false; } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", - pDevice->wFirmwareVersion); - if (pDevice->wFirmwareVersion < FIRMWARE_VERSION) { + priv->wFirmwareVersion); + if (priv->wFirmwareVersion < FIRMWARE_VERSION) { /* branch to loader for download new firmware */ - FIRMWAREbBrach2Sram(pDevice); + FIRMWAREbBrach2Sram(priv); return false; } return true; -- cgit From 9197f35ba26d266bd8cf873782fc221f0a280743 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:30 +0100 Subject: staging: vt6656: firmware.c replace DBG_PRT debug messages Replace with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index a74a42d3b5dd..83680bc59105 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -35,9 +35,6 @@ #include "firmware.h" #include "usbpipe.h" -static int msglevel = MSG_LEVEL_INFO; -/* static int msglevel = MSG_LEVEL_DEBUG; */ - #define FIRMWARE_VERSION 0x133 /* version 1.51 */ #define FIRMWARE_NAME "vntwusb.fw" @@ -53,7 +50,7 @@ int FIRMWAREbDownload(struct vnt_private *priv) u16 length; int ii, rc; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Download firmware\n"); + dev_dbg(dev, "---->Download firmware\n"); rc = request_firmware(&fw, FIRMWARE_NAME, dev); if (rc) { @@ -77,8 +74,8 @@ int FIRMWAREbDownload(struct vnt_private *priv) length, buffer); - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO"Download firmware...%d %zu\n", ii, fw->size); + dev_dbg(dev, "Download firmware...%d %zu\n", ii, fw->size); + if (status != STATUS_SUCCESS) goto free_fw; } @@ -98,7 +95,7 @@ int FIRMWAREbBrach2Sram(struct vnt_private *priv) { int status; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Branch to Sram\n"); + dev_dbg(&priv->usb->dev, "---->Branch to Sram\n"); status = vnt_control_out(priv, 1, @@ -123,18 +120,21 @@ int FIRMWAREbCheckVersion(struct vnt_private *priv) 2, (u8 *) &(priv->wFirmwareVersion)); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", + dev_dbg(&priv->usb->dev, "Firmware Version [%04x]\n", priv->wFirmwareVersion); + if (status != STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Invalid.\n"); + dev_dbg(&priv->usb->dev, "Firmware Invalid.\n"); return false; } if (priv->wFirmwareVersion == 0xFFFF) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"In Loader.\n"); + dev_dbg(&priv->usb->dev, "In Loader.\n"); return false; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", + + dev_dbg(&priv->usb->dev, "Firmware Version [%04x]\n", priv->wFirmwareVersion); + if (priv->wFirmwareVersion < FIRMWARE_VERSION) { /* branch to loader for download new firmware */ FIRMWAREbBrach2Sram(priv); -- cgit From 6a86b77820c41d460146589d01b83a5e62e4d0a7 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:31 +0100 Subject: staging: vt6656: rename FIRMWAREbDownload to vnt_download_firmware Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 2 +- drivers/staging/vt6656/firmware.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 83680bc59105..3990698a305c 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -40,7 +40,7 @@ #define FIRMWARE_CHUNK_SIZE 0x400 -int FIRMWAREbDownload(struct vnt_private *priv) +int vnt_download_firmware(struct vnt_private *priv) { struct device *dev = &priv->usb->dev; const struct firmware *fw; diff --git a/drivers/staging/vt6656/firmware.h b/drivers/staging/vt6656/firmware.h index e3b08db6a734..961afb7486ad 100644 --- a/drivers/staging/vt6656/firmware.h +++ b/drivers/staging/vt6656/firmware.h @@ -32,7 +32,7 @@ #include "device.h" -int FIRMWAREbDownload(struct vnt_private *); +int vnt_download_firmware(struct vnt_private *); int FIRMWAREbBrach2Sram(struct vnt_private *); int FIRMWAREbCheckVersion(struct vnt_private *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ebb095553bf7..0c9eb604a721 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -288,7 +288,7 @@ static int device_init_registers(struct vnt_private *pDevice) memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, ETH_ALEN); if (!FIRMWAREbCheckVersion(pDevice)) { - if (FIRMWAREbDownload(pDevice) == true) { + if (vnt_download_firmware(pDevice) == true) { if (FIRMWAREbBrach2Sram(pDevice) == false) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " FIRMWAREbBrach2Sram fail\n"); -- cgit From 14321461256d04dd05fea70b96d352b9f7188495 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:32 +0100 Subject: staging: vt6656: rename FIRMWAREbBrach2Sram to vnt_firmware_branch_to_sram Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 4 ++-- drivers/staging/vt6656/firmware.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 3990698a305c..78e9283c3ca1 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -91,7 +91,7 @@ out: } MODULE_FIRMWARE(FIRMWARE_NAME); -int FIRMWAREbBrach2Sram(struct vnt_private *priv) +int vnt_firmware_branch_to_sram(struct vnt_private *priv) { int status; @@ -137,7 +137,7 @@ int FIRMWAREbCheckVersion(struct vnt_private *priv) if (priv->wFirmwareVersion < FIRMWARE_VERSION) { /* branch to loader for download new firmware */ - FIRMWAREbBrach2Sram(priv); + vnt_firmware_branch_to_sram(priv); return false; } return true; diff --git a/drivers/staging/vt6656/firmware.h b/drivers/staging/vt6656/firmware.h index 961afb7486ad..eb25932659db 100644 --- a/drivers/staging/vt6656/firmware.h +++ b/drivers/staging/vt6656/firmware.h @@ -33,7 +33,7 @@ #include "device.h" int vnt_download_firmware(struct vnt_private *); -int FIRMWAREbBrach2Sram(struct vnt_private *); +int vnt_firmware_branch_to_sram(struct vnt_private *); int FIRMWAREbCheckVersion(struct vnt_private *); #endif /* __FIRMWARE_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0c9eb604a721..c5adc346e97b 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -289,9 +289,9 @@ static int device_init_registers(struct vnt_private *pDevice) if (!FIRMWAREbCheckVersion(pDevice)) { if (vnt_download_firmware(pDevice) == true) { - if (FIRMWAREbBrach2Sram(pDevice) == false) { + if (vnt_firmware_branch_to_sram(pDevice) == false) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - " FIRMWAREbBrach2Sram fail\n"); + " vnt_firmware_branch_to_sram fail\n"); return false; } } else { -- cgit From 45d63f891ca5c03015dfac357ea60806ea0c50e5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:33 +0100 Subject: staging: vt6656: rename FIRMWAREbCheckVersion to vnt_check_firmware_version Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/firmware.c | 2 +- drivers/staging/vt6656/firmware.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 78e9283c3ca1..f2250ee81ffa 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -109,7 +109,7 @@ int vnt_firmware_branch_to_sram(struct vnt_private *priv) return true; } -int FIRMWAREbCheckVersion(struct vnt_private *priv) +int vnt_check_firmware_version(struct vnt_private *priv) { int status; diff --git a/drivers/staging/vt6656/firmware.h b/drivers/staging/vt6656/firmware.h index eb25932659db..d594dbe1c147 100644 --- a/drivers/staging/vt6656/firmware.h +++ b/drivers/staging/vt6656/firmware.h @@ -34,6 +34,6 @@ int vnt_download_firmware(struct vnt_private *); int vnt_firmware_branch_to_sram(struct vnt_private *); -int FIRMWAREbCheckVersion(struct vnt_private *); +int vnt_check_firmware_version(struct vnt_private *); #endif /* __FIRMWARE_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index c5adc346e97b..4662a3e03cce 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -287,7 +287,7 @@ static int device_init_registers(struct vnt_private *pDevice) memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, ETH_ALEN); memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, ETH_ALEN); - if (!FIRMWAREbCheckVersion(pDevice)) { + if (!vnt_check_firmware_version(pDevice)) { if (vnt_download_firmware(pDevice) == true) { if (vnt_firmware_branch_to_sram(pDevice) == false) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO -- cgit From 205056f35054a5590d5f69d76c9653b97d01d87f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:34 +0100 Subject: staging: vt6656: rename BBvCalculateParameter to vnt_get_phy_field The function returns the phy fields rename to vnt_get_phy_field Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/card.c | 8 ++++---- drivers/staging/vt6656/rxtx.c | 32 ++++++++++++++++---------------- 4 files changed, 23 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index aada8e79a15d..b74c412f4a4b 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -27,7 +27,7 @@ * * Functions: * BBuGetFrameTime - Calculate data frame transmitting time - * BBvCalculateParameter - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx + * vnt_get_phy_field - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx * BBbVT3184Init - VIA VT3184 baseband chip init code * * Revision History: @@ -705,7 +705,7 @@ unsigned int BBuGetFrameTime(u8 preamble_type, u8 pkt_type, * Return Value: none * */ -void BBvCalculateParameter(struct vnt_private *priv, u32 frame_length, +void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length, u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy) { u32 bit_count; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 3044d6c42050..002e58e627cc 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -91,7 +91,7 @@ struct vnt_phy_field { unsigned int BBuGetFrameTime(u8 preamble_type, u8 pkt_type, unsigned int frame_length, u16 tx_rate); -void BBvCalculateParameter(struct vnt_private *, u32 frame_length, +void vnt_get_phy_field(struct vnt_private *, u32 frame_length, u16 tx_rate, u8 pkt_type, struct vnt_phy_field *); void BBvSetShortSlotTime(struct vnt_private *); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 9794116a241b..8be3a89d5a68 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -300,19 +300,19 @@ void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type) int i; /*RSPINF_b_1*/ - BBvCalculateParameter(priv, 14, + vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_1M), PK_TYPE_11B, &phy[0]); /*RSPINF_b_2*/ - BBvCalculateParameter(priv, 14, + vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_2M), PK_TYPE_11B, &phy[1]); /*RSPINF_b_5*/ - BBvCalculateParameter(priv, 14, + vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_5M), PK_TYPE_11B, &phy[2]); /*RSPINF_b_11*/ - BBvCalculateParameter(priv, 14, + vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_11M), PK_TYPE_11B, &phy[3]); diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 22cb642915e2..9604b8ec6fc8 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -494,8 +494,8 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); - BBvCalculateParameter(priv, frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ @@ -518,9 +518,9 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); - BBvCalculateParameter(priv, frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ @@ -546,7 +546,7 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); /* Get Duration and TimeStampOff */ buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); @@ -567,7 +567,7 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->ab); + vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->ab); /* Get Duration and TimeStampOff */ buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); @@ -608,9 +608,9 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - BBvCalculateParameter(priv, rts_frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); - BBvCalculateParameter(priv, rts_frame_len, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, @@ -634,9 +634,9 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - BBvCalculateParameter(priv, rts_frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); - BBvCalculateParameter(priv, rts_frame_len, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); @@ -671,7 +671,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - BBvCalculateParameter(priv, rts_frame_len, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->ab); buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, @@ -691,7 +691,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - BBvCalculateParameter(priv, rts_frame_len, + vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, @@ -766,7 +766,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, /* Auto Fall back */ struct vnt_cts_fb *pBuf = &head->cts_g_fb; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(pDevice, uCTSFrameLen, + vnt_get_phy_field(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, @@ -792,7 +792,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, } else { struct vnt_cts *pBuf = &head->cts_g; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(pDevice, uCTSFrameLen, + vnt_get_phy_field(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); /* Get CTSDuration_ba */ pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, @@ -1651,7 +1651,7 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, wCurrentRate = RATE_6M; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate, + vnt_get_phy_field(pDevice, cbFrameSize, wCurrentRate, PK_TYPE_11A, &short_head->ab); /* Get Duration and TimeStampOff */ @@ -1664,7 +1664,7 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, short_head->fifo_ctl |= FIFOCTL_11B; /* Get SignalField,ServiceField,Length */ - BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate, + vnt_get_phy_field(pDevice, cbFrameSize, wCurrentRate, PK_TYPE_11B, &short_head->ab); /* Get Duration and TimeStampOff */ -- cgit From d38ee5b2a445e182e644c83cbadc7f33d24eef15 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 4 Jun 2014 18:25:35 +0100 Subject: staging: vt6656: rename BBuGetFrameTime to vnt_get_frame_time Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/rxtx.c | 42 +++++++++++++++++++-------------------- 3 files changed, 24 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index b74c412f4a4b..d99aae59afcb 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -26,7 +26,7 @@ * Date: Jun. 5, 2002 * * Functions: - * BBuGetFrameTime - Calculate data frame transmitting time + * vnt_get_frame_time - Calculate data frame transmitting time * vnt_get_phy_field - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx * BBbVT3184Init - VIA VT3184 baseband chip init code * @@ -646,7 +646,7 @@ static const u16 awcFrameTime[MAX_RATE] = * Return Value: FrameTime * */ -unsigned int BBuGetFrameTime(u8 preamble_type, u8 pkt_type, +unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type, unsigned int frame_length, u16 tx_rate) { unsigned int frame_time; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 002e58e627cc..4160695d6274 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -88,7 +88,7 @@ struct vnt_phy_field { __le16 len; } __packed; -unsigned int BBuGetFrameTime(u8 preamble_type, u8 pkt_type, +unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type, unsigned int frame_length, u16 tx_rate); void vnt_get_phy_field(struct vnt_private *, u32 frame_length, diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 9604b8ec6fc8..3c19288a6a01 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -344,15 +344,15 @@ static u32 s_uGetTxRsvTime(struct vnt_private *priv, u8 pkt_type, { u32 data_time, ack_time; - data_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + data_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, frame_length, rate); if (pkt_type == PK_TYPE_11B) - ack_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, 14, - (u16)priv->byTopCCKBasicRate); + ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + 14, (u16)priv->byTopCCKBasicRate); else - ack_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, 14, - (u16)priv->byTopOFDMBasicRate); + ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + 14, (u16)priv->byTopOFDMBasicRate); if (need_ack) return data_time + priv->uSIFS + ack_time; @@ -375,30 +375,30 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, rrv_time = rts_time = cts_time = ack_time = data_time = 0; - data_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + data_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, frame_length, current_rate); if (rsv_type == 0) { - rts_time = BBuGetFrameTime(priv->byPreambleType, + rts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 20, priv->byTopCCKBasicRate); - cts_time = ack_time = BBuGetFrameTime(priv->byPreambleType, + cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); } else if (rsv_type == 1) { - rts_time = BBuGetFrameTime(priv->byPreambleType, + rts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 20, priv->byTopCCKBasicRate); - cts_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); - ack_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); } else if (rsv_type == 2) { - rts_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + rts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 20, priv->byTopOFDMBasicRate); - cts_time = ack_time = BBuGetFrameTime(priv->byPreambleType, + cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); } else if (rsv_type == 3) { - cts_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); - ack_time = BBuGetFrameTime(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); rrv_time = cts_time + ack_time + data_time + 2 * priv->uSIFS; @@ -419,10 +419,10 @@ static __le16 s_uGetDataDuration(struct vnt_private *pDevice, if (bNeedAck) { if (byPktType == PK_TYPE_11B) - uAckTime = BBuGetFrameTime(pDevice->byPreambleType, + uAckTime = vnt_get_frame_time(pDevice->byPreambleType, byPktType, 14, pDevice->byTopCCKBasicRate); else - uAckTime = BBuGetFrameTime(pDevice->byPreambleType, + uAckTime = vnt_get_frame_time(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate); return cpu_to_le16((u16)(pDevice->uSIFS + uAckTime)); } @@ -442,8 +442,8 @@ static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, case RTSDUR_BA: case RTSDUR_BA_F0: case RTSDUR_BA_F1: - uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, - 14, pDevice->byTopCCKBasicRate); + uCTSTime = vnt_get_frame_time(pDevice->byPreambleType, + byPktType, 14, pDevice->byTopCCKBasicRate); uDurTime = uCTSTime + 2 * pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck); @@ -452,8 +452,8 @@ static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, case RTSDUR_AA: case RTSDUR_AA_F0: case RTSDUR_AA_F1: - uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, - 14, pDevice->byTopOFDMBasicRate); + uCTSTime = vnt_get_frame_time(pDevice->byPreambleType, + byPktType, 14, pDevice->byTopOFDMBasicRate); uDurTime = uCTSTime + 2 * pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck); -- cgit From 4e13d410e6bd2a472ba1e9c2675a42ea61c24ac9 Mon Sep 17 00:00:00 2001 From: Scott Weir Date: Sat, 31 May 2014 21:54:58 +1000 Subject: staging: gdm724x: Added blank lines after declarations in gdm_lte.c This patch fixes following checkpatch.pl warning: WARNING: Missing a blank line after declarations in gdm_lte.c Signed-off-by: Scott Weir Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/gdm_lte.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c index 64c55b99fda4..bc6d57419b28 100644 --- a/drivers/staging/gdm724x/gdm_lte.c +++ b/drivers/staging/gdm724x/gdm_lte.c @@ -447,6 +447,7 @@ static int gdm_lte_tx(struct sk_buff *skb, struct net_device *dev) */ if (nic_type & NIC_TYPE_F_VLAN) { struct vlan_ethhdr *vlan_eth = (struct vlan_ethhdr *)skb->data; + nic->vlan_id = ntohs(vlan_eth->h_vlan_TCI) & VLAN_VID_MASK; data_buf = skb->data + (VLAN_ETH_HLEN - ETH_HLEN); data_len = skb->len - (VLAN_ETH_HLEN - ETH_HLEN); @@ -505,6 +506,7 @@ static int gdm_lte_tx(struct sk_buff *skb, struct net_device *dev) static struct net_device_stats *gdm_lte_stats(struct net_device *dev) { struct nic *nic = netdev_priv(dev); + return &nic->stats; } -- cgit From ebc43d093b38262f1fc51018a50892ce3a144852 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sat, 31 May 2014 20:09:05 -0400 Subject: staging: vt6655: fix sparse warning "cast removes address space of expression" Add missing __user macro to second parameter of ethtool_ioctl(). This removes the need for the offending (void *) cast of the user space pointer rq->ifr_data. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 1d3908d044d0..23273863696b 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -302,7 +302,7 @@ static int device_dma0_tx_80211(struct sk_buff *skb, struct net_device *dev); //2008-0714by Mike Liu static bool device_release_WPADEV(PSDevice pDevice); -static int ethtool_ioctl(struct net_device *dev, void *useraddr); +static int ethtool_ioctl(struct net_device *dev, void __user *useraddr); static int device_rx_srv(PSDevice pDevice, unsigned int uIdx); static int device_tx_srv(PSDevice pDevice, unsigned int uIdx); static bool device_alloc_rx_buf(PSDevice pDevice, PSRxDesc pDesc); @@ -3067,7 +3067,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { break; case SIOCETHTOOL: - return ethtool_ioctl(dev, (void *)rq->ifr_data); + return ethtool_ioctl(dev, rq->ifr_data); // All other calls are currently unsupported default: @@ -3103,7 +3103,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { return rc; } -static int ethtool_ioctl(struct net_device *dev, void *useraddr) +static int ethtool_ioctl(struct net_device *dev, void __user *useraddr) { u32 ethcmd; -- cgit From 04d521970bd430b613a000a6b66c568d419b1ff3 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 20:26:55 -0400 Subject: staging: vt6655: fix sparse warning for static declarations This patch fixes the following sparse warnings: dpc.c:65:21: warning: symbol 'acbyRxRate' was not declared. Should it be static? dpc.c:272:9: warning: symbol 'MngWorkItem' was not declared. Should it be static? dpc.c:288:1: warning: symbol 'device_receive_frame' was not declared. Should it be static? Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/dpc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 7ddaf2603ba6..696564b44200 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -54,6 +54,7 @@ #include "rf.h" #include "iowpa.h" #include "aes_ccmp.h" +#include "dpc.h" /*--------------------- Static Definitions -------------------------*/ @@ -62,7 +63,7 @@ /*--------------------- Static Variables --------------------------*/ static int msglevel = MSG_LEVEL_INFO; -const unsigned char acbyRxRate[MAX_RATE] = +static const unsigned char acbyRxRate[MAX_RATE] = {2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108}; /*--------------------- Static Functions --------------------------*/ -- cgit From b47056707ed4c73b4f320b3049228b4bc1f51ad3 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 22:19:31 -0400 Subject: staging: vt6655: update out-of-date function declaration The function iwctl_siwscan() is defined in iwctl.c as: int iwctl_siwscan(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, char *extra) { ... This patch updates iwctl.h so that the type of the 3rd parameter (*wqr) in the function declaration matches the definition. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iwctl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iwctl.h b/drivers/staging/vt6655/iwctl.h index 871bd7c4e716..4ad5e48a025f 100644 --- a/drivers/staging/vt6655/iwctl.h +++ b/drivers/staging/vt6655/iwctl.h @@ -168,7 +168,7 @@ int iwctl_giwscan(struct net_device *dev, int iwctl_siwscan(struct net_device *dev, struct iw_request_info *info, - struct iw_param *wrq, + struct iw_point *wrq, char *extra); //2008-0409-07, by Einsn Liu -- cgit From 2c052d400064a589929e5059a02386421b155ff1 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 22:19:32 -0400 Subject: staging: vt6655: update iwctl_private_args extern declaration Update declaration of iwctl_private_args to match definition in iwctl.c Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iwctl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iwctl.h b/drivers/staging/vt6655/iwctl.h index 4ad5e48a025f..10564b4f6b2d 100644 --- a/drivers/staging/vt6655/iwctl.h +++ b/drivers/staging/vt6655/iwctl.h @@ -211,6 +211,6 @@ int iwctl_siwmlme(struct net_device *dev, //End Add -- //2008-0409-07, by Einsn Liu extern const struct iw_handler_def iwctl_handler_def; -extern const struct iw_priv_args iwctl_private_args; +extern struct iw_priv_args iwctl_private_args[]; #endif // __IWCTL_H__ -- cgit From 14257463f76bef4389d3db18e639d4f548147980 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 22:19:33 -0400 Subject: staging: vt6655: fix sparse warning for static declarations This patch fixes the following sparse warnings: iwctl.c:76:22: warning: symbol 'iwctl_get_wireless_stats' was not declared. Should it be static? iwctl.c:118:5: warning: symbol 'iwctl_giwname' was not declared. Should it be static? iwctl.c:131:5: warning: symbol 'iwctl_siwscan' was not declared. Should it be static? iwctl.c:192:5: warning: symbol 'iwctl_giwscan' was not declared. Should it be static? iwctl.c:344:5: warning: symbol 'iwctl_siwfreq' was not declared. Should it be static? iwctl.c:390:5: warning: symbol 'iwctl_giwfreq' was not declared. Should it be static? iwctl.c:420:5: warning: symbol 'iwctl_siwmode' was not declared. Should it be static? iwctl.c:486:5: warning: symbol 'iwctl_giwmode' was not declared. Should it be static? iwctl.c:520:5: warning: symbol 'iwctl_giwrange' was not declared. Should it be static? iwctl.c:626:5: warning: symbol 'iwctl_siwap' was not declared. Should it be static? iwctl.c:684:5: warning: symbol 'iwctl_giwap' was not declared. Should it be static? iwctl.c:711:5: warning: symbol 'iwctl_giwaplist' was not declared. Should it be static? iwctl.c:784:5: warning: symbol 'iwctl_siwessid' was not declared. Should it be static? iwctl.c:893:5: warning: symbol 'iwctl_giwessid' was not declared. Should it be static? iwctl.c:923:5: warning: symbol 'iwctl_siwrate' was not declared. Should it be static? iwctl.c:1004:5: warning: symbol 'iwctl_giwrate' was not declared. Should it be static? iwctl.c:1049:5: warning: symbol 'iwctl_siwrts' was not declared. Should it be static? iwctl.c:1077:5: warning: symbol 'iwctl_giwrts' was not declared. Should it be static? iwctl.c:1096:5: warning: symbol 'iwctl_siwfrag' was not declared. Should it be static? iwctl.c:1123:5: warning: symbol 'iwctl_giwfrag' was not declared. Should it be static? iwctl.c:1141:5: warning: symbol 'iwctl_siwretry' was not declared. Should it be static? iwctl.c:1176:5: warning: symbol 'iwctl_giwretry' was not declared. Should it be static? iwctl.c:1205:5: warning: symbol 'iwctl_siwencode' was not declared. Should it be static? iwctl.c:1336:5: warning: symbol 'iwctl_giwencode' was not declared. Should it be static? iwctl.c:1398:5: warning: symbol 'iwctl_siwpower' was not declared. Should it be static? iwctl.c:1448:5: warning: symbol 'iwctl_giwpower' was not declared. Should it be static? iwctl.c:1478:5: warning: symbol 'iwctl_giwsens' was not declared. Should it be static? iwctl.c:1502:5: warning: symbol 'iwctl_siwauth' was not declared. Should it be static? iwctl.c:1603:5: warning: symbol 'iwctl_giwauth' was not declared. Should it be static? iwctl.c:1611:5: warning: symbol 'iwctl_siwgenie' was not declared. Should it be static? iwctl.c:1644:5: warning: symbol 'iwctl_giwgenie' was not declared. Should it be static? iwctl.c:1669:5: warning: symbol 'iwctl_siwencodeext' was not declared. Should it be static? iwctl.c:1783:5: warning: symbol 'iwctl_giwencodeext' was not declared. Should it be static? iwctl.c:1791:5: warning: symbol 'iwctl_siwmlme' was not declared. Should it be static? iwctl.c:1900:21: warning: symbol 'iwctl_private_args' was not declared. Should it be static? iwctl.c:1906:33: warning: symbol 'iwctl_handler_def' was not declared. Should it be static? Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iwctl.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index ae2b87f177fb..ba50d7f9116d 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -33,6 +33,7 @@ #include "device.h" #include "ioctl.h" #include "iocmd.h" +#include "iwctl.h" #include "mac.h" #include "card.h" #include "hostap.h" -- cgit From 15974dce2eeb9e859b7600cd2eb4040e75806768 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 23:06:57 -0400 Subject: staging: vt6655: replace C99 style comments Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/baseband.c | 300 +++++++++++++++++++------------------- 1 file changed, 150 insertions(+), 150 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 6f95fb618dc3..490ca966b017 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -57,7 +57,7 @@ #include "rf.h" /*--------------------- Static Definitions -------------------------*/ -//static int msglevel =MSG_LEVEL_DEBUG; +/* static int msglevel =MSG_LEVEL_DEBUG; */ static int msglevel = MSG_LEVEL_INFO; /*--------------------- Static Classes ----------------------------*/ @@ -785,7 +785,7 @@ unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = { }; #define CB_VT3253B0_AGC_FOR_RFMD2959 195 -// For RFMD2959 +/* For RFMD2959 */ unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = { {0xF0, 0x00}, {0xF1, 0x3E}, @@ -985,7 +985,7 @@ unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = { }; #define CB_VT3253B0_INIT_FOR_AIROHA2230 256 -// For AIROHA +/* For AIROHA */ unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { {0x00, 0x31}, {0x01, 0x00}, @@ -1095,7 +1095,7 @@ unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { {0x69, 0x00}, {0x6a, 0x00}, {0x6b, 0x00}, - {0x6c, 0x00}, //RobertYu:20050125, request by JJSue + {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */ {0x6d, 0x03}, {0x6e, 0x01}, {0x6f, 0x00}, @@ -1246,7 +1246,7 @@ unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { }; #define CB_VT3253B0_INIT_FOR_UW2451 256 -//For UW2451 +/* For UW2451 */ unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { {0x00, 0x31}, {0x01, 0x00}, @@ -1356,7 +1356,7 @@ unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { {0x69, 0x00}, {0x6a, 0x00}, {0x6b, 0x00}, - {0x6c, 0x00}, //RobertYu:20050125, request by JJSue + {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */ {0x6d, 0x03}, {0x6e, 0x01}, {0x6f, 0x00}, @@ -1507,7 +1507,7 @@ unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { }; #define CB_VT3253B0_AGC 193 -// For AIROHA +/* For AIROHA */ unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = { {0xF0, 0x00}, {0xF1, 0x00}, @@ -1783,29 +1783,29 @@ BBuGetFrameTime( uRate = (unsigned int)awcFrameTime[uRateIdx]; - if (uRateIdx <= 3) { //CCK mode - if (byPreambleType == 1) //Short + if (uRateIdx <= 3) { /* CCK mode */ + if (byPreambleType == 1) /* Short */ uPreamble = 96; else uPreamble = 192; - uFrameTime = (cbFrameLength * 80) / uRate; //????? + uFrameTime = (cbFrameLength * 80) / uRate; /* ????? */ uTmp = (uFrameTime * uRate) / 80; if (cbFrameLength != uTmp) uFrameTime++; return uPreamble + uFrameTime; } else { - uFrameTime = (cbFrameLength * 8 + 22) / uRate; //???????? + uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */ uTmp = ((uFrameTime * uRate) - 22) / 8; if (cbFrameLength != uTmp) uFrameTime++; - uFrameTime = uFrameTime * 4; //??????? + uFrameTime = uFrameTime * 4; /* ??????? */ if (byPktType != PK_TYPE_11A) - uFrameTime += 6; //?????? + uFrameTime += 6; /* ?????? */ - return 20 + uFrameTime; //?????? + return 20 + uFrameTime; /* ?????? */ } } @@ -1856,7 +1856,7 @@ BBvCalculateParameter( cbUsCount = cbBitCount / 2; if (byPreambleType == 1) *pbyPhySgn = 0x09; - else // long preamble + else /* long preamble */ *pbyPhySgn = 0x01; break; @@ -1869,7 +1869,7 @@ BBvCalculateParameter( cbUsCount++; if (byPreambleType == 1) *pbyPhySgn = 0x0a; - else // long preamble + else /* long preamble */ *pbyPhySgn = 0x02; break; @@ -1886,79 +1886,79 @@ BBvCalculateParameter( } if (byPreambleType == 1) *pbyPhySgn = 0x0b; - else // long preamble + else /* long preamble */ *pbyPhySgn = 0x03; break; case RATE_6M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9B; //1001 1011 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8B; //1000 1011 + if (byPacketType == PK_TYPE_11A) { /*11a, 5GHZ */ + *pbyPhySgn = 0x9B; /* 1001 1011 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8B; /* 1000 1011 */ } break; case RATE_9M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9F; //1001 1111 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8F; //1000 1111 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9F; /* 1001 1111 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8F; /* 1000 1111 */ } break; case RATE_12M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9A; //1001 1010 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8A; //1000 1010 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9A; /* 1001 1010 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8A; /* 1000 1010 */ } break; case RATE_18M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9E; //1001 1110 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8E; //1000 1110 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9E; /* 1001 1110 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8E; /* 1000 1110 */ } break; case RATE_24M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x99; //1001 1001 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x89; //1000 1001 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x99; /* 1001 1001 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x89; /* 1000 1001 */ } break; case RATE_36M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9D; //1001 1101 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8D; //1000 1101 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9D; /* 1001 1101 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8D; /* 1000 1101 */ } break; case RATE_48M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x98; //1001 1000 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x88; //1000 1000 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x98; /* 1001 1000 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x88; /* 1000 1000 */ } break; case RATE_54M: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9C; //1001 1100 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8C; //1000 1100 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9C; /* 1001 1100 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8C; /* 1000 1100 */ } break; default: - if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ - *pbyPhySgn = 0x9C; //1001 1100 - } else {//11g, 2.4GHZ - *pbyPhySgn = 0x8C; //1000 1100 + if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */ + *pbyPhySgn = 0x9C; /* 1001 1100 */ + } else {/* 11g, 2.4GHZ */ + *pbyPhySgn = 0x8C; /* 1000 1100 */ } break; } @@ -1992,19 +1992,19 @@ bool BBbReadEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned ch unsigned short ww; unsigned char byValue; - // BB reg offset + /* BB reg offset */ VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr); - // turn on REGR + /* turn on REGR */ MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGR); - // W_MAX_TIMEOUT is the timeout period + /* W_MAX_TIMEOUT is the timeout period */ for (ww = 0; ww < W_MAX_TIMEOUT; ww++) { VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue); if (byValue & BBREGCTL_DONE) break; } - // get BB data + /* get BB data */ VNSvInPortB(dwIoBase + MAC_REG_BBREGDATA, pbyData); if (ww == W_MAX_TIMEOUT) { @@ -2034,14 +2034,14 @@ bool BBbWriteEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned c unsigned short ww; unsigned char byValue; - // BB reg offset + /* BB reg offset */ VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr); - // set BB data + /* set BB data */ VNSvOutPortB(dwIoBase + MAC_REG_BBREGDATA, byData); - // turn on BBREGCTL_REGW + /* turn on BBREGCTL_REGW */ MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGW); - // W_MAX_TIMEOUT is the timeout period + /* W_MAX_TIMEOUT is the timeout period */ for (ww = 0; ww < W_MAX_TIMEOUT; ww++) { VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue); if (byValue & BBREGCTL_DONE) @@ -2183,22 +2183,22 @@ bool BBbVT3253Init(PSDevice pDevice) for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++) bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]); - // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) - //bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41); - // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) - //bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28); - // Select VC1/VC2, CR215 = 0x02->0x06 + /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ + /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/ + /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ + /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/ + /* Select VC1/VC2, CR215 = 0x02->0x06 */ bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06); - //{{RobertYu:20050125, request by Jack + /* {{RobertYu:20050125, request by Jack */ bResult &= BBbWriteEmbedded(dwIoBase, 0x90, 0x20); bResult &= BBbWriteEmbedded(dwIoBase, 0x97, 0xeb); - //}} + /* }} */ - //{{RobertYu:20050221, request by Jack + /* {{RobertYu:20050221, request by Jack */ bResult &= BBbWriteEmbedded(dwIoBase, 0xa6, 0x00); bResult &= BBbWriteEmbedded(dwIoBase, 0xa8, 0x30); - //}} + /* }} */ bResult &= BBbWriteEmbedded(dwIoBase, 0xb0, 0x58); for (ii = 0; ii < CB_VT3253B0_AGC; ii++) @@ -2212,7 +2212,7 @@ bool BBbVT3253Init(PSDevice pDevice) pDevice->ldBmThreshold[1] = -50; pDevice->ldBmThreshold[2] = 0; pDevice->ldBmThreshold[3] = 0; - //}} RobertYu + /* }} RobertYu */ } else if (byRFType == RF_VT3226) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++) @@ -2229,22 +2229,22 @@ bool BBbVT3253Init(PSDevice pDevice) pDevice->ldBmThreshold[1] = -48; pDevice->ldBmThreshold[2] = 0; pDevice->ldBmThreshold[3] = 0; - // Fix VT3226 DFC system timing issue + /* Fix VT3226 DFC system timing issue */ MACvSetRFLE_LatchBase(dwIoBase); - //{{ RobertYu: 20050104 + /* {{ RobertYu: 20050104 */ } else if (byRFType == RF_AIROHA7230) { for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++) bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]); - //{{ RobertYu:20050223, request by JerryChung - // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) - //bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41); - // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) - //bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28); - // Select VC1/VC2, CR215 = 0x02->0x06 + /* {{ RobertYu:20050223, request by JerryChung */ + /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ + /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/ + /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */ + /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/ + /* Select VC1/VC2, CR215 = 0x02->0x06 */ bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06); - //}} + /* }} */ for (ii = 0; ii < CB_VT3253B0_AGC; ii++) bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]); @@ -2257,9 +2257,9 @@ bool BBbVT3253Init(PSDevice pDevice) pDevice->ldBmThreshold[1] = -48; pDevice->ldBmThreshold[2] = 0; pDevice->ldBmThreshold[3] = 0; - //}} RobertYu + /* }} RobertYu */ } else { - // No VGA Table now + /* No VGA Table now */ pDevice->bUpdateBBVGA = false; pDevice->abyBBVGA[0] = 0x1C; } @@ -2314,37 +2314,37 @@ void BBvLoopbackOn(PSDevice pDevice) unsigned char byData; unsigned long dwIoBase = pDevice->PortOffset; - //CR C9 = 0x00 - BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9);//CR201 + /* CR C9 = 0x00 */ + BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */ BBbWriteEmbedded(dwIoBase, 0xC9, 0); - BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d);//CR77 + BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d); /* CR77 */ BBbWriteEmbedded(dwIoBase, 0x4D, 0x90); - //CR 88 = 0x02(CCK), 0x03(OFDM) - BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88);//CR136 - - if (pDevice->uConnectionRate <= RATE_11M) { //CCK - // Enable internal digital loopback: CR33 |= 0000 0001 - BBbReadEmbedded(dwIoBase, 0x21, &byData);//CR33 - BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01));//CR33 - // CR154 = 0x00 - BBbWriteEmbedded(dwIoBase, 0x9A, 0); //CR154 - - BBbWriteEmbedded(dwIoBase, 0x88, 0x02);//CR239 - } else { //OFDM - // Enable internal digital loopback:CR154 |= 0000 0001 - BBbReadEmbedded(dwIoBase, 0x9A, &byData);//CR154 - BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01));//CR154 - // CR33 = 0x00 - BBbWriteEmbedded(dwIoBase, 0x21, 0); //CR33 - - BBbWriteEmbedded(dwIoBase, 0x88, 0x03);//CR239 + /* CR 88 = 0x02(CCK), 0x03(OFDM) */ + BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88); /* CR136 */ + + if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */ + /* Enable internal digital loopback: CR33 |= 0000 0001 */ + BBbReadEmbedded(dwIoBase, 0x21, &byData); /* CR33 */ + BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01)); /* CR33 */ + /* CR154 = 0x00 */ + BBbWriteEmbedded(dwIoBase, 0x9A, 0); /* CR154 */ + + BBbWriteEmbedded(dwIoBase, 0x88, 0x02); /* CR239 */ + } else { /* OFDM */ + /* Enable internal digital loopback:CR154 |= 0000 0001 */ + BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */ + BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01)); /* CR154 */ + /* CR33 = 0x00 */ + BBbWriteEmbedded(dwIoBase, 0x21, 0); /* CR33 */ + + BBbWriteEmbedded(dwIoBase, 0x88, 0x03); /* CR239 */ } - //CR14 = 0x00 - BBbWriteEmbedded(dwIoBase, 0x0E, 0);//CR14 + /* CR14 = 0x00 */ + BBbWriteEmbedded(dwIoBase, 0x0E, 0); /* CR14 */ - // Disable TX_IQUN + /* Disable TX_IQUN */ BBbReadEmbedded(pDevice->PortOffset, 0x09, &pDevice->byBBCR09); BBbWriteEmbedded(pDevice->PortOffset, 0x09, (unsigned char)(pDevice->byBBCR09 & 0xDE)); } @@ -2367,21 +2367,21 @@ void BBvLoopbackOff(PSDevice pDevice) unsigned char byData; unsigned long dwIoBase = pDevice->PortOffset; - BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9);//CR201 - BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88);//CR136 - BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09);//CR136 - BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d);//CR77 - - if (pDevice->uConnectionRate <= RATE_11M) { // CCK - // Set the CR33 Bit2 to disable internal Loopback. - BBbReadEmbedded(dwIoBase, 0x21, &byData);//CR33 - BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE));//CR33 - } else { // OFDM - BBbReadEmbedded(dwIoBase, 0x9A, &byData);//CR154 - BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE));//CR154 + BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */ + BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */ + BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09); /* CR136 */ + BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d); /* CR77 */ + + if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */ + /* Set the CR33 Bit2 to disable internal Loopback. */ + BBbReadEmbedded(dwIoBase, 0x21, &byData);/* CR33 */ + BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE)); /* CR33 */ + } else { /* OFDM */ + BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */ + BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE)); /* CR154 */ } - BBbReadEmbedded(dwIoBase, 0x0E, &byData);//CR14 - BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80));//CR14 + BBbReadEmbedded(dwIoBase, 0x0E, &byData); /* CR14 */ + BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80)); /* CR14 */ } /* @@ -2402,19 +2402,19 @@ BBvSetShortSlotTime(PSDevice pDevice) unsigned char byBBRxConf = 0; unsigned char byBBVGA = 0; - BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf);//CR10 + BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */ if (pDevice->bShortSlotTime) - byBBRxConf &= 0xDF;//1101 1111 + byBBRxConf &= 0xDF; /* 1101 1111 */ else - byBBRxConf |= 0x20;//0010 0000 + byBBRxConf |= 0x20; /* 0010 0000 */ - // patch for 3253B0 Baseband with Cardbus module + /* patch for 3253B0 Baseband with Cardbus module */ BBbReadEmbedded(pDevice->PortOffset, 0xE7, &byBBVGA); if (byBBVGA == pDevice->abyBBVGA[0]) - byBBRxConf |= 0x20;//0010 0000 + byBBRxConf |= 0x20; /* 0010 0000 */ - BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf);//CR10 + BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */ } void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData) @@ -2423,16 +2423,16 @@ void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData) BBbWriteEmbedded(pDevice->PortOffset, 0xE7, byData); - BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf);//CR10 - // patch for 3253B0 Baseband with Cardbus module + BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */ + /* patch for 3253B0 Baseband with Cardbus module */ if (byData == pDevice->abyBBVGA[0]) - byBBRxConf |= 0x20;//0010 0000 + byBBRxConf |= 0x20; /* 0010 0000 */ else if (pDevice->bShortSlotTime) - byBBRxConf &= 0xDF;//1101 1111 + byBBRxConf &= 0xDF; /* 1101 1111 */ else - byBBRxConf |= 0x20;//0010 0000 + byBBRxConf |= 0x20; /* 0010 0000 */ pDevice->byBBVGACurrent = byData; - BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf);//CR10 + BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */ } /* @@ -2519,18 +2519,18 @@ BBvSetTxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) { unsigned char byBBTxConf; - BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf);//CR09 + BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf); /* CR09 */ if (byAntennaMode == ANT_DIVERSITY) { - // bit 1 is diversity + /* bit 1 is diversity */ byBBTxConf |= 0x02; } else if (byAntennaMode == ANT_A) { - // bit 2 is ANTSEL - byBBTxConf &= 0xF9; // 1111 1001 + /* bit 2 is ANTSEL */ + byBBTxConf &= 0xF9; /* 1111 1001 */ } else if (byAntennaMode == ANT_B) { - byBBTxConf &= 0xFD; // 1111 1101 + byBBTxConf &= 0xFD; /* 1111 1101 */ byBBTxConf |= 0x04; } - BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf);//CR09 + BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf); /* CR09 */ } /* @@ -2552,17 +2552,17 @@ BBvSetRxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) { unsigned char byBBRxConf; - BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf);//CR10 + BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf); /* CR10 */ if (byAntennaMode == ANT_DIVERSITY) { byBBRxConf |= 0x01; } else if (byAntennaMode == ANT_A) { - byBBRxConf &= 0xFC; // 1111 1100 + byBBRxConf &= 0xFC; /* 1111 1100 */ } else if (byAntennaMode == ANT_B) { - byBBRxConf &= 0xFE; // 1111 1110 + byBBRxConf &= 0xFE; /* 1111 1110 */ byBBRxConf |= 0x02; } - BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf);//CR10 + BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf); /* CR10 */ } /* @@ -2580,15 +2580,15 @@ BBvSetRxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) void BBvSetDeepSleep(unsigned long dwIoBase, unsigned char byLocalID) { - BBbWriteEmbedded(dwIoBase, 0x0C, 0x17);//CR12 - BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9);//CR13 + BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */ + BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */ } void BBvExitDeepSleep(unsigned long dwIoBase, unsigned char byLocalID) { - BBbWriteEmbedded(dwIoBase, 0x0C, 0x00);//CR12 - BBbWriteEmbedded(dwIoBase, 0x0D, 0x01);//CR13 + BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */ + BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */ } static @@ -2599,7 +2599,7 @@ s_ulGetRatio(PSDevice pDevice) unsigned long ulMaxPacket; unsigned long ulPacketNum; - //This is a thousand-ratio + /* This is a thousand-ratio */ ulMaxPacket = pDevice->uNumSQ3[RATE_54M]; if (pDevice->uNumSQ3[RATE_54M] != 0) { ulPacketNum = pDevice->uNumSQ3[RATE_54M]; @@ -2751,7 +2751,7 @@ BBvAntennaDiversity(PSDevice pDevice, unsigned char byRxRate, unsigned char bySQ BBvClearAntDivSQ3Value(pDevice); } - } else { //byAntennaState == 1 + } else { /* byAntennaState == 1 */ if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) { del_timer(&pDevice->TimerSQ3Tmax1); @@ -2775,7 +2775,7 @@ BBvAntennaDiversity(PSDevice pDevice, unsigned char byRxRate, unsigned char bySQ pDevice->byAntennaState = 0; BBvClearAntDivSQ3Value(pDevice); } - } //byAntennaState + } /* byAntennaState */ } /*+ -- cgit From ff87dbc90616e525e8c7442bab30f5112e62de03 Mon Sep 17 00:00:00 2001 From: Martin Kepplinger Date: Mon, 16 Jun 2014 18:05:36 +0200 Subject: staging: vt6655: remove unnecessary typedef struct. Remove a totally unnecessary typedef and rename it to lowercase. This is more readable now. Signed-off-by: Martin Kepplinger Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.c | 2 +- drivers/staging/vt6655/device.h | 6 +++--- drivers/staging/vt6655/wmgr.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 05bf48a24f45..e21abd8ea787 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -998,7 +998,7 @@ CARDbAdd_PMKID_Candidate( ) { PSDevice pDevice = (PSDevice) pDeviceHandler; - PPMKID_CANDIDATE pCandidateList; + struct pmkid_candidate *pCandidateList; 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/vt6655/device.h b/drivers/staging/vt6655/device.h index 45fc8a0b9b5c..aab63ca25774 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -227,10 +227,10 @@ typedef enum _NDIS_802_11_STATUS_TYPE } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; //Added new types for PMKID Candidate lists. -typedef struct _PMKID_CANDIDATE { +struct pmkid_candidate { NDIS_802_11_MAC_ADDRESS BSSID; unsigned long Flags; -} PMKID_CANDIDATE, *PPMKID_CANDIDATE; +}; typedef struct _BSSID_INFO { @@ -248,7 +248,7 @@ typedef struct tagSPMKIDCandidateEvent { NDIS_802_11_STATUS_TYPE StatusType; unsigned long Version; // Version of the structure unsigned long NumCandidates; // No. of pmkid candidates - PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST]; + struct pmkid_candidate CandidateList[MAX_PMKIDLIST]; } SPMKIDCandidateEvent, *PSPMKIDCandidateEvent; //-- diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 67384782b702..cc4f5b9e0581 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -4438,7 +4438,7 @@ bAdd_PMKID_Candidate( ) { PSDevice pDevice = (PSDevice)hDeviceContext; - PPMKID_CANDIDATE pCandidateList; + struct pmkid_candidate *pCandidateList; unsigned int ii = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "bAdd_PMKID_Candidate START: (%d)\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); -- cgit From 5c3ddb3a4c3ef5edea7376ed80b032cf2e4afb71 Mon Sep 17 00:00:00 2001 From: Merlin Chlosta Date: Thu, 19 Jun 2014 19:59:32 +0200 Subject: staging: vt6655: coding style: use C89 comments fix coding style: use C89 comments, not C99 Signed-off-by: Merlin Chlosta Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/vntwifi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 7d61598563c7..085878eef4da 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -255,7 +255,7 @@ VNTWIFIbyGetACKTxRate( if (byRxDataRate <= RATE_11M) { byMaxAckRate = RATE_1M; } else { - // 24M is mandatory for 802.11a and 802.11g + /* 24M is mandatory for 802.11a and 802.11g */ byMaxAckRate = RATE_24M; } if (pSupportRateIEs) { @@ -491,7 +491,7 @@ VNTWIFIvUpdateNodeTxCounter( pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts++; if (bTxOk) { - // transmit success, TxAttempts at least plus one + /* transmit success, TxAttempts at least plus one */ pMgmt->sNodeDBTable[uNodeIndex].uTxOk[MAX_RATE]++; pMgmt->sNodeDBTable[uNodeIndex].uTxOk[wRate]++; } else { @@ -525,7 +525,7 @@ VNTWIFIvGetTxRate( if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) || (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) { - // Adhoc Tx rate decided from node DB + /* Adhoc Tx rate decided from node DB */ if (BSSDBbIsSTAInNodeDB(pMgmt, pbyDestAddress, &uNodeIndex)) { wTxDataRate = (pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate); pSupportRateIEs = (PWLAN_IE_SUPP_RATES) (pMgmt->sNodeDBTable[uNodeIndex].abyCurrSuppRates); @@ -539,7 +539,7 @@ VNTWIFIvGetTxRate( pSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates; pExtSupportRateIEs = (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates; } - } else { // Infrastructure: rate decided from AP Node, index = 0 + } else { /* Infrastructure: rate decided from AP Node, index = 0 */ wTxDataRate = (pMgmt->sNodeDBTable[0].wTxDataRate); #ifdef PLICE_DEBUG -- cgit From 5947956bdcf1aff31caba90f80f363340e18cb56 Mon Sep 17 00:00:00 2001 From: Thomas Vegas Date: Sun, 1 Jun 2014 14:34:39 +0200 Subject: staging: rtl8712: Fix oops on dongle removal if firmware is not available When firmware is not available, net device is not created. Upon disconnect, we must check for net device existence before trying to release net device private data. Signed-off-by: Thomas Vegas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/usb_intf.c | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c index ba743542babc..bec9d45499ad 100644 --- a/drivers/staging/rtl8712/usb_intf.c +++ b/drivers/staging/rtl8712/usb_intf.c @@ -607,31 +607,31 @@ error: static void r871xu_dev_remove(struct usb_interface *pusb_intf) { struct net_device *pnetdev = usb_get_intfdata(pusb_intf); - struct _adapter *padapter = netdev_priv(pnetdev); struct usb_device *udev = interface_to_usbdev(pusb_intf); - usb_set_intfdata(pusb_intf, NULL); - if (padapter->fw_found) - release_firmware(padapter->fw); - /* never exit with a firmware callback pending */ - wait_for_completion(&padapter->rtl8712_fw_ready); - if (drvpriv.drv_registered == true) - padapter->bSurpriseRemoved = true; - if (pnetdev != NULL) { - /* will call netdev_close() */ - unregister_netdev(pnetdev); + if (pnetdev) { + struct _adapter *padapter = netdev_priv(pnetdev); + + usb_set_intfdata(pusb_intf, NULL); + if (padapter->fw_found) + release_firmware(padapter->fw); + /* never exit with a firmware callback pending */ + wait_for_completion(&padapter->rtl8712_fw_ready); + if (drvpriv.drv_registered == true) + padapter->bSurpriseRemoved = true; + unregister_netdev(pnetdev); /* will call netdev_close() */ + flush_scheduled_work(); + udelay(1); + /* Stop driver mlme relation timer */ + if (padapter->fw_found) + r8712_stop_drv_timers(padapter); + r871x_dev_unload(padapter); + r8712_free_drv_sw(padapter); + + /* decrease the reference count of the usb device structure + * when disconnect */ + usb_put_dev(udev); } - flush_scheduled_work(); - udelay(1); - /*Stop driver mlme relation timer */ - if (padapter->fw_found) - r8712_stop_drv_timers(padapter); - r871x_dev_unload(padapter); - r8712_free_drv_sw(padapter); - usb_set_intfdata(pusb_intf, NULL); - /* decrease the reference count of the usb device structure - * when disconnect */ - usb_put_dev(udev); /* If we didn't unplug usb dongle and remove/insert module, driver * fails on sitesurvey for the first time when device is up. * Reset usb port for sitesurvey fail issue. */ -- cgit From 22649bb2b664ca241c8a14b4f886940c3a9cc998 Mon Sep 17 00:00:00 2001 From: Thomas Vegas Date: Sun, 1 Jun 2014 14:34:40 +0200 Subject: staging: rtl8712: Remove useless variable 'fw_found' The net device only exists when firmware is loaded successfully. Firmware presence variable is only used through r871xu_dev_remove() and this function already checks for net device existence. Signed-off-by: Thomas Vegas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/drv_types.h | 1 - drivers/staging/rtl8712/hal_init.c | 2 -- drivers/staging/rtl8712/os_intfs.c | 3 +-- drivers/staging/rtl8712/usb_intf.c | 6 ++---- 4 files changed, 3 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/drv_types.h b/drivers/staging/rtl8712/drv_types.h index 3362e5e32bcc..0168745ba191 100644 --- a/drivers/staging/rtl8712/drv_types.h +++ b/drivers/staging/rtl8712/drv_types.h @@ -160,7 +160,6 @@ struct _adapter { s32 bSurpriseRemoved; u32 IsrContent; u32 ImrContent; - bool fw_found; u8 EepromAddressSize; u8 hw_init_completed; struct task_struct *cmdThread; diff --git a/drivers/staging/rtl8712/hal_init.c b/drivers/staging/rtl8712/hal_init.c index 36de7e478f32..0556de3b8904 100644 --- a/drivers/staging/rtl8712/hal_init.c +++ b/drivers/staging/rtl8712/hal_init.c @@ -50,13 +50,11 @@ static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context) struct usb_device *udev = padapter->dvobjpriv.pusbdev; struct usb_interface *pusb_intf = padapter->pusb_intf; dev_err(&udev->dev, "r8712u: Firmware request failed\n"); - padapter->fw_found = false; usb_put_dev(udev); usb_set_intfdata(pusb_intf, NULL); return; } padapter->fw = firmware; - padapter->fw_found = true; /* firmware available - start netdev */ register_netdev(padapter->pnetdev); } diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c index 6bd08213cb70..13debb59ad97 100644 --- a/drivers/staging/rtl8712/os_intfs.c +++ b/drivers/staging/rtl8712/os_intfs.c @@ -345,8 +345,7 @@ u8 r8712_free_drv_sw(struct _adapter *padapter) r8712_free_mlme_priv(&padapter->mlmepriv); r8712_free_io_queue(padapter); _free_xmit_priv(&padapter->xmitpriv); - if (padapter->fw_found) - _r8712_free_sta_priv(&padapter->stapriv); + _r8712_free_sta_priv(&padapter->stapriv); _r8712_free_recv_priv(&padapter->recvpriv); mp871xdeinit(padapter); if (pnetdev) diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c index bec9d45499ad..beff69b3ff0c 100644 --- a/drivers/staging/rtl8712/usb_intf.c +++ b/drivers/staging/rtl8712/usb_intf.c @@ -613,8 +613,7 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf) struct _adapter *padapter = netdev_priv(pnetdev); usb_set_intfdata(pusb_intf, NULL); - if (padapter->fw_found) - release_firmware(padapter->fw); + release_firmware(padapter->fw); /* never exit with a firmware callback pending */ wait_for_completion(&padapter->rtl8712_fw_ready); if (drvpriv.drv_registered == true) @@ -623,8 +622,7 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf) flush_scheduled_work(); udelay(1); /* Stop driver mlme relation timer */ - if (padapter->fw_found) - r8712_stop_drv_timers(padapter); + r8712_stop_drv_timers(padapter); r871x_dev_unload(padapter); r8712_free_drv_sw(padapter); -- cgit From 0c9f3a65c5eb7fe1fc611a22eb8a8b71ea865998 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 5 Jun 2014 22:48:15 +0200 Subject: staging: rtl8712, rtl8712: avoid lots of build warnings The rtl8712 driver has an 'extern inline' function that contains an 'if', which causes lots of warnings with CONFIG_PROFILE_ALL_BRANCHES overriding the definition of 'if': drivers/staging/rtl8712/ieee80211.h:759:229: warning: '______f' is static but declared in inline function 'ieee80211_get_hdrlen' which is not static [enabled by default] This changes the driver to use 'static inline' instead, which happens to be the correct annotation anyway. Signed-off-by: Arnd Bergmann Cc: Larry Finger Cc: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/ieee80211/ieee80211.h | 10 +++++----- drivers/staging/rtl8712/ieee80211.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h index e0aa069fe9b1..1040bab9702a 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h @@ -2238,7 +2238,7 @@ static inline void *ieee80211_priv(struct net_device *dev) return ((struct ieee80211_device *)netdev_priv(dev))->priv; } -extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) +static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) { /* Single white space is for Linksys APs */ if (essid_len == 1 && essid[0] == ' ') @@ -2254,7 +2254,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) return 1; } -extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) +static inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) { /* * It is possible for both access points and our device to support @@ -2280,7 +2280,7 @@ extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mod return 0; } -extern inline int ieee80211_get_hdrlen(u16 fc) +static inline int ieee80211_get_hdrlen(u16 fc) { int hdrlen = IEEE80211_3ADDR_LEN; @@ -2564,12 +2564,12 @@ void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee); extern const long ieee80211_wlan_frequencies[]; -extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee) +static inline void ieee80211_increment_scans(struct ieee80211_device *ieee) { ieee->scans++; } -extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) +static inline int ieee80211_get_scans(struct ieee80211_device *ieee) { return ieee->scans; } diff --git a/drivers/staging/rtl8712/ieee80211.h b/drivers/staging/rtl8712/ieee80211.h index da4000e49da6..8269be80437a 100644 --- a/drivers/staging/rtl8712/ieee80211.h +++ b/drivers/staging/rtl8712/ieee80211.h @@ -734,7 +734,7 @@ enum ieee80211_state { #define IEEE_G (1<<2) #define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) -extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) +static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) { /* Single white space is for Linksys APs */ if (essid_len == 1 && essid[0] == ' ') @@ -748,7 +748,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) return 1; } -extern inline int ieee80211_get_hdrlen(u16 fc) +static inline int ieee80211_get_hdrlen(u16 fc) { int hdrlen = 24; -- cgit From 3ae70746d0569dd942cedd668f3a4a256c06fbe8 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sun, 15 Jun 2014 19:20:58 +0200 Subject: staging: rtl8712: rtl871x_ioctl_linux.c: Cleaning up useless if statement The same code regardless of the outcome of the if statement. And clean up another duplicate line of code. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index e147c4bfe124..6d6f15d1cc75 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c @@ -1459,17 +1459,12 @@ static int r8711_wx_get_rate(struct net_device *dev, RTL8712_RF_2T2R == rf_type) max_rate = (bw_40MHz) ? ((short_GI) ? 300 : 270) : ((short_GI) ? 144 : 130); - else if (mcs_rate & 0x0080) /* MCS7 */ - max_rate = (bw_40MHz) ? ((short_GI) ? 150 : - 135) : ((short_GI) ? 72 : 65); else /* default MCS7 */ max_rate = (bw_40MHz) ? ((short_GI) ? 150 : 135) : ((short_GI) ? 72 : 65); max_rate *= 2; /* Mbps/2 */ - wrqu->bitrate.value = max_rate * 500000; - } else { - wrqu->bitrate.value = max_rate * 500000; } + wrqu->bitrate.value = max_rate * 500000; } else return -ENOLINK; return 0; -- cgit From bd9dc62c365c0a6cf12d571ec0a2f10218a30c81 Mon Sep 17 00:00:00 2001 From: Vitaly Osipov Date: Sat, 14 Jun 2014 21:47:21 +1000 Subject: staging: rtl8712: replace kmalloc(..., sizeof(T)) As suggested by Andy Shevchenko on driverdev-devel, replace v = ... sizeof(struct type_of_v) -> sizeof(*v) Based on a cocci patch along the lines of @@ type T; expression E; identifier V; @@ T *V; ... - V = kmalloc(sizeof(T), E); + V = kmalloc(sizeof(*V), E); @@ type T; expression E; identifier V; @@ T *V; ... - V = kzalloc(sizeof(T), E); + V = kzalloc(sizeof(*V), E); Signed-off-by: Vitaly Osipov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/rtl871x_cmd.c | 94 ++++++++++++++++------------------ drivers/staging/rtl8712/rtl871x_io.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 8 +-- drivers/staging/rtl8712/rtl871x_mp.c | 4 +- 4 files changed, 51 insertions(+), 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index 7a252200e902..1775462e5330 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -227,10 +227,10 @@ u8 r8712_sitesurvey_cmd(struct _adapter *padapter, struct cmd_priv *pcmdpriv = &padapter->cmdpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psurveyPara = kmalloc(sizeof(struct sitesurvey_parm), GFP_ATOMIC); + psurveyPara = kmalloc(sizeof(*psurveyPara), GFP_ATOMIC); if (psurveyPara == NULL) { kfree((unsigned char *) ph2c); return _FAIL; @@ -259,11 +259,10 @@ u8 r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset) struct setdatarate_parm *pbsetdataratepara; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pbsetdataratepara = kmalloc(sizeof(struct setdatarate_parm), - GFP_ATOMIC); + pbsetdataratepara = kmalloc(sizeof(*pbsetdataratepara), GFP_ATOMIC); if (pbsetdataratepara == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -282,11 +281,10 @@ u8 r8712_set_chplan_cmd(struct _adapter *padapter, int chplan) struct SetChannelPlan_param *psetchplanpara; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetchplanpara = kmalloc(sizeof(struct SetChannelPlan_param), - GFP_ATOMIC); + psetchplanpara = kmalloc(sizeof(*psetchplanpara), GFP_ATOMIC); if (psetchplanpara == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -304,11 +302,10 @@ u8 r8712_setbasicrate_cmd(struct _adapter *padapter, u8 *rateset) struct setbasicrate_parm *pssetbasicratepara; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pssetbasicratepara = kmalloc(sizeof(struct setbasicrate_parm), - GFP_ATOMIC); + pssetbasicratepara = kmalloc(sizeof(*pssetbasicratepara), GFP_ATOMIC); if (pssetbasicratepara == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -327,10 +324,10 @@ u8 r8712_setptm_cmd(struct _adapter *padapter, u8 type) struct writePTM_parm *pwriteptmparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pwriteptmparm = kmalloc(sizeof(struct writePTM_parm), GFP_ATOMIC); + pwriteptmparm = kmalloc(sizeof(*pwriteptmparm), GFP_ATOMIC); if (pwriteptmparm == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -347,10 +344,10 @@ u8 r8712_setfwdig_cmd(struct _adapter *padapter, u8 type) struct writePTM_parm *pwriteptmparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pwriteptmparm = kmalloc(sizeof(struct writePTM_parm), GFP_ATOMIC); + pwriteptmparm = kmalloc(sizeof(*pwriteptmparm), GFP_ATOMIC); if (pwriteptmparm == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -367,10 +364,10 @@ u8 r8712_setfwra_cmd(struct _adapter *padapter, u8 type) struct writePTM_parm *pwriteptmparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pwriteptmparm = kmalloc(sizeof(struct writePTM_parm), GFP_ATOMIC); + pwriteptmparm = kmalloc(sizeof(*pwriteptmparm), GFP_ATOMIC); if (pwriteptmparm == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -387,10 +384,10 @@ u8 r8712_setrfreg_cmd(struct _adapter *padapter, u8 offset, u32 val) struct writeRF_parm *pwriterfparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pwriterfparm = kmalloc(sizeof(struct writeRF_parm), GFP_ATOMIC); + pwriterfparm = kmalloc(sizeof(*pwriterfparm), GFP_ATOMIC); if (pwriterfparm == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -408,10 +405,10 @@ u8 r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 *pval) struct readRF_parm *prdrfparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - prdrfparm = kmalloc(sizeof(struct readRF_parm), GFP_ATOMIC); + prdrfparm = kmalloc(sizeof(*prdrfparm), GFP_ATOMIC); if (prdrfparm == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -452,7 +449,7 @@ u8 r8712_createbss_cmd(struct _adapter *padapter) &padapter->registrypriv.dev_network; padapter->ledpriv.LedControlHandler(padapter, LED_CTL_START_TO_LINK); - pcmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return _FAIL; _init_listhead(&pcmd->list); @@ -486,7 +483,7 @@ u8 r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork) network.InfrastructureMode; padapter->ledpriv.LedControlHandler(padapter, LED_CTL_START_TO_LINK); - pcmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return _FAIL; t_len = sizeof(u32) + 6 * sizeof(unsigned char) + 2 + @@ -624,10 +621,10 @@ u8 r8712_disassoc_cmd(struct _adapter *padapter) /* for sta_mode */ struct disconnect_parm *pdisconnect; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pdisconnect_cmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pdisconnect_cmd = kmalloc(sizeof(*pdisconnect_cmd), GFP_ATOMIC); if (pdisconnect_cmd == NULL) return _FAIL; - pdisconnect = kmalloc(sizeof(struct disconnect_parm), GFP_ATOMIC); + pdisconnect = kmalloc(sizeof(*pdisconnect), GFP_ATOMIC); if (pdisconnect == NULL) { kfree((u8 *)pdisconnect_cmd); return _FAIL; @@ -646,10 +643,10 @@ u8 r8712_setopmode_cmd(struct _adapter *padapter, struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetop = kmalloc(sizeof(struct setopmode_parm), GFP_ATOMIC); + psetop = kmalloc(sizeof(*psetop), GFP_ATOMIC); if (psetop == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -670,15 +667,15 @@ u8 r8712_setstakey_cmd(struct _adapter *padapter, u8 *psta, u8 unicast_key) struct security_priv *psecuritypriv = &padapter->securitypriv; struct sta_info *sta = (struct sta_info *)psta; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetstakey_para = kmalloc(sizeof(struct set_stakey_parm), GFP_ATOMIC); + psetstakey_para = kmalloc(sizeof(*psetstakey_para), GFP_ATOMIC); if (psetstakey_para == NULL) { kfree((u8 *) ph2c); return _FAIL; } - psetstakey_rsp = kmalloc(sizeof(struct set_stakey_rsp), GFP_ATOMIC); + psetstakey_rsp = kmalloc(sizeof(*psetstakey_rsp), GFP_ATOMIC); if (psetstakey_rsp == NULL) { kfree((u8 *) ph2c); kfree((u8 *) psetstakey_para); @@ -710,10 +707,10 @@ u8 r8712_setrfintfs_cmd(struct _adapter *padapter, u8 mode) struct setrfintfs_parm *psetrfintfsparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetrfintfsparm = kmalloc(sizeof(struct setrfintfs_parm), GFP_ATOMIC); + psetrfintfsparm = kmalloc(sizeof(*psetrfintfsparm), GFP_ATOMIC); if (psetrfintfsparm == NULL) { kfree((unsigned char *) ph2c); return _FAIL; @@ -732,10 +729,10 @@ u8 r8712_setrttbl_cmd(struct _adapter *padapter, struct setratable_parm *psetrttblparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetrttblparm = kmalloc(sizeof(struct setratable_parm), GFP_ATOMIC); + psetrttblparm = kmalloc(sizeof(*psetrttblparm), GFP_ATOMIC); if (psetrttblparm == NULL) { kfree((unsigned char *)ph2c); return _FAIL; @@ -753,10 +750,10 @@ u8 r8712_gettssi_cmd(struct _adapter *padapter, u8 offset, u8 *pval) struct cmd_obj *ph2c; struct readTSSI_parm *prdtssiparm; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - prdtssiparm = kmalloc(sizeof(struct readTSSI_parm), GFP_ATOMIC); + prdtssiparm = kmalloc(sizeof(*prdtssiparm), GFP_ATOMIC); if (prdtssiparm == NULL) { kfree((unsigned char *) ph2c); return _FAIL; @@ -779,11 +776,10 @@ u8 r8712_setMacAddr_cmd(struct _adapter *padapter, u8 *mac_addr) struct cmd_obj *ph2c; struct SetMacAddr_param *psetMacAddr_para; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetMacAddr_para = kmalloc(sizeof(struct SetMacAddr_param), - GFP_ATOMIC); + psetMacAddr_para = kmalloc(sizeof(*psetMacAddr_para), GFP_ATOMIC); if (psetMacAddr_para == NULL) { kfree((u8 *) ph2c); return _FAIL; @@ -802,17 +798,15 @@ u8 r8712_setassocsta_cmd(struct _adapter *padapter, u8 *mac_addr) struct set_assocsta_parm *psetassocsta_para; struct set_assocsta_rsp *psetassocsta_rsp = NULL; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - psetassocsta_para = kmalloc(sizeof(struct set_assocsta_parm), - GFP_ATOMIC); + psetassocsta_para = kmalloc(sizeof(*psetassocsta_para), GFP_ATOMIC); if (psetassocsta_para == NULL) { kfree((u8 *) ph2c); return _FAIL; } - psetassocsta_rsp = kmalloc(sizeof(struct set_assocsta_rsp), - GFP_ATOMIC); + psetassocsta_rsp = kmalloc(sizeof(*psetassocsta_rsp), GFP_ATOMIC); if (psetassocsta_rsp == NULL) { kfree((u8 *)ph2c); kfree((u8 *)psetassocsta_para); @@ -832,10 +826,10 @@ u8 r8712_addbareq_cmd(struct _adapter *padapter, u8 tid) struct cmd_obj *ph2c; struct addBaReq_parm *paddbareq_parm; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - paddbareq_parm = kmalloc(sizeof(struct addBaReq_parm), GFP_ATOMIC); + paddbareq_parm = kmalloc(sizeof(*paddbareq_parm), GFP_ATOMIC); if (paddbareq_parm == NULL) { kfree((unsigned char *)ph2c); return _FAIL; @@ -853,10 +847,10 @@ u8 r8712_wdg_wk_cmd(struct _adapter *padapter) struct drvint_cmd_parm *pdrvintcmd_param; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - pdrvintcmd_param = kmalloc(sizeof(struct drvint_cmd_parm), GFP_ATOMIC); + pdrvintcmd_param = kmalloc(sizeof(*pdrvintcmd_param), GFP_ATOMIC); if (pdrvintcmd_param == NULL) { kfree((unsigned char *)ph2c); return _FAIL; @@ -1027,10 +1021,10 @@ u8 r8712_disconnectCtrlEx_cmd(struct _adapter *adapter, u32 enableDrvCtrl, struct DisconnectCtrlEx_param *param; struct cmd_priv *pcmdpriv = &adapter->cmdpriv; - ph2c = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); if (ph2c == NULL) return _FAIL; - param = kzalloc(sizeof(struct DisconnectCtrlEx_param), GFP_ATOMIC); + param = kzalloc(sizeof(*param), GFP_ATOMIC); if (param == NULL) { kfree((unsigned char *) ph2c); return _FAIL; diff --git a/drivers/staging/rtl8712/rtl871x_io.c b/drivers/staging/rtl8712/rtl871x_io.c index 37a841a14889..e881b0d9c34f 100644 --- a/drivers/staging/rtl8712/rtl871x_io.c +++ b/drivers/staging/rtl8712/rtl871x_io.c @@ -112,7 +112,7 @@ uint r8712_alloc_io_queue(struct _adapter *adapter) struct io_queue *pio_queue; struct io_req *pio_req; - pio_queue = kmalloc(sizeof(struct io_queue), GFP_ATOMIC); + pio_queue = kmalloc(sizeof(*pio_queue), GFP_ATOMIC); if (pio_queue == NULL) goto alloc_io_queue_fail; _init_listhead(&pio_queue->free_ioreqs); diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 02339e100014..26b8f3788fd3 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -1212,11 +1212,11 @@ sint r8712_set_auth(struct _adapter *adapter, struct cmd_obj *pcmd; struct setauth_parm *psetauthparm; - pcmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return _FAIL; - psetauthparm = kzalloc(sizeof(struct setauth_parm), GFP_ATOMIC); + psetauthparm = kzalloc(sizeof(*psetauthparm), GFP_ATOMIC); if (psetauthparm == NULL) { kfree((unsigned char *)pcmd); return _FAIL; @@ -1242,10 +1242,10 @@ sint r8712_set_key(struct _adapter *adapter, u8 keylen; sint ret = _SUCCESS; - pcmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return _FAIL; - psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_ATOMIC); + psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC); if (psetkeyparm == NULL) { ret = _FAIL; goto err_free_cmd; diff --git a/drivers/staging/rtl8712/rtl871x_mp.c b/drivers/staging/rtl8712/rtl871x_mp.c index 389062fe8eaf..e48486cdcca0 100644 --- a/drivers/staging/rtl8712/rtl871x_mp.c +++ b/drivers/staging/rtl8712/rtl871x_mp.c @@ -281,10 +281,10 @@ void r8712_SetChannel(struct _adapter *pAdapter) struct SetChannel_parm *pparm = NULL; u16 code = GEN_CMD_CODE(_SetChannel); - pcmd = kmalloc(sizeof(struct cmd_obj), GFP_ATOMIC); + pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return; - pparm = kmalloc(sizeof(struct SetChannel_parm), GFP_ATOMIC); + pparm = kmalloc(sizeof(*pparm), GFP_ATOMIC); if (pparm == NULL) { kfree(pcmd); return; -- cgit From 949c4ef0dbde37e7baaa993d35a5d04a7edab38a Mon Sep 17 00:00:00 2001 From: Marcus Farkas Date: Sun, 1 Jun 2014 17:18:26 +0200 Subject: staging: rtl8821ae: fix sparse warning for static declarations This commit fixes the following sparse warnings in ps.c: - 702: warning: symbol 'rtl_p2p_noa_ie' was not declared. Should it be static? - 802: warning: symbol 'rtl_p2p_action_ie' was not declared. Should it be static? Signed-off-by: Marcus Farkas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/ps.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/ps.c b/drivers/staging/rtl8821ae/ps.c index 5a9bbf025e25..db9a02fdb640 100644 --- a/drivers/staging/rtl8821ae/ps.c +++ b/drivers/staging/rtl8821ae/ps.c @@ -699,7 +699,8 @@ void rtl_swlps_wq_callback(void *data) } -void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data, unsigned int len) +static void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data, + unsigned int len) { struct rtl_priv *rtlpriv = rtl_priv(hw); struct ieee80211_mgmt *mgmt = (void *)data; @@ -799,7 +800,8 @@ void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data, unsigned int len) } } -void rtl_p2p_action_ie(struct ieee80211_hw *hw, void *data, unsigned int len) +static void rtl_p2p_action_ie(struct ieee80211_hw *hw, void *data, + unsigned int len) { struct rtl_priv *rtlpriv = rtl_priv(hw); struct ieee80211_mgmt *mgmt = (void *)data; -- cgit From df37d1ac58d934ec30d7e45a7f3a64535d686e9e Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 1 Jun 2014 20:07:35 -0400 Subject: staging: skein: fix sparse warning for static arrays This patch fixes the following sparse warnings: skein_iv.h:23:11: warning: symbol 'SKEIN_256_IV_128' was not declared. Should it be static? skein_iv.h:31:11: warning: symbol 'SKEIN_256_IV_160' was not declared. Should it be static? skein_iv.h:39:11: warning: symbol 'SKEIN_256_IV_224' was not declared. Should it be static? skein_iv.h:47:11: warning: symbol 'SKEIN_256_IV_256' was not declared. Should it be static? skein_iv.h:55:11: warning: symbol 'SKEIN_512_IV_128' was not declared. Should it be static? skein_iv.h:67:11: warning: symbol 'SKEIN_512_IV_160' was not declared. Should it be static? skein_iv.h:79:11: warning: symbol 'SKEIN_512_IV_224' was not declared. Should it be static? skein_iv.h:91:11: warning: symbol 'SKEIN_512_IV_256' was not declared. Should it be static? skein_iv.h:103:11: warning: symbol 'SKEIN_512_IV_384' was not declared. Should it be static? skein_iv.h:115:11: warning: symbol 'SKEIN_512_IV_512' was not declared. Should it be static? skein_iv.h:127:11: warning: symbol 'SKEIN_1024_IV_384' was not declared. Should it be static? skein_iv.h:147:11: warning: symbol 'SKEIN_1024_IV_512' was not declared. Should it be static? skein_iv.h:167:11: warning: symbol 'SKEIN_1024_IV_1024' was not declared. Should it be static? by declaring the initialization vectors in question as static. The header skein_iv.h is only included by skein.c Signed-off-by: James A Shackleford Acked-by: Jason Cooper Signed-off-by: Greg Kroah-Hartman --- drivers/staging/skein/skein_iv.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/skein/skein_iv.h b/drivers/staging/skein/skein_iv.h index a03703deeaf8..d9dc1d5ed551 100644 --- a/drivers/staging/skein/skein_iv.h +++ b/drivers/staging/skein/skein_iv.h @@ -20,7 +20,7 @@ #define MK_64 SKEIN_MK_64 /* blkSize = 256 bits. hashSize = 128 bits */ -const u64 SKEIN_256_IV_128[] = { +static const u64 SKEIN_256_IV_128[] = { MK_64(0xE1111906, 0x964D7260), MK_64(0x883DAAA7, 0x7C8D811C), MK_64(0x10080DF4, 0x91960F7A), @@ -28,7 +28,7 @@ const u64 SKEIN_256_IV_128[] = { }; /* blkSize = 256 bits. hashSize = 160 bits */ -const u64 SKEIN_256_IV_160[] = { +static const u64 SKEIN_256_IV_160[] = { MK_64(0x14202314, 0x72825E98), MK_64(0x2AC4E9A2, 0x5A77E590), MK_64(0xD47A5856, 0x8838D63E), @@ -36,7 +36,7 @@ const u64 SKEIN_256_IV_160[] = { }; /* blkSize = 256 bits. hashSize = 224 bits */ -const u64 SKEIN_256_IV_224[] = { +static const u64 SKEIN_256_IV_224[] = { MK_64(0xC6098A8C, 0x9AE5EA0B), MK_64(0x876D5686, 0x08C5191C), MK_64(0x99CB88D7, 0xD7F53884), @@ -44,7 +44,7 @@ const u64 SKEIN_256_IV_224[] = { }; /* blkSize = 256 bits. hashSize = 256 bits */ -const u64 SKEIN_256_IV_256[] = { +static const u64 SKEIN_256_IV_256[] = { MK_64(0xFC9DA860, 0xD048B449), MK_64(0x2FCA6647, 0x9FA7D833), MK_64(0xB33BC389, 0x6656840F), @@ -52,7 +52,7 @@ const u64 SKEIN_256_IV_256[] = { }; /* blkSize = 512 bits. hashSize = 128 bits */ -const u64 SKEIN_512_IV_128[] = { +static const u64 SKEIN_512_IV_128[] = { MK_64(0xA8BC7BF3, 0x6FBF9F52), MK_64(0x1E9872CE, 0xBD1AF0AA), MK_64(0x309B1790, 0xB32190D3), @@ -64,7 +64,7 @@ const u64 SKEIN_512_IV_128[] = { }; /* blkSize = 512 bits. hashSize = 160 bits */ -const u64 SKEIN_512_IV_160[] = { +static const u64 SKEIN_512_IV_160[] = { MK_64(0x28B81A2A, 0xE013BD91), MK_64(0xC2F11668, 0xB5BDF78F), MK_64(0x1760D8F3, 0xF6A56F12), @@ -76,7 +76,7 @@ const u64 SKEIN_512_IV_160[] = { }; /* blkSize = 512 bits. hashSize = 224 bits */ -const u64 SKEIN_512_IV_224[] = { +static const u64 SKEIN_512_IV_224[] = { MK_64(0xCCD06162, 0x48677224), MK_64(0xCBA65CF3, 0xA92339EF), MK_64(0x8CCD69D6, 0x52FF4B64), @@ -88,7 +88,7 @@ const u64 SKEIN_512_IV_224[] = { }; /* blkSize = 512 bits. hashSize = 256 bits */ -const u64 SKEIN_512_IV_256[] = { +static const u64 SKEIN_512_IV_256[] = { MK_64(0xCCD044A1, 0x2FDB3E13), MK_64(0xE8359030, 0x1A79A9EB), MK_64(0x55AEA061, 0x4F816E6F), @@ -100,7 +100,7 @@ const u64 SKEIN_512_IV_256[] = { }; /* blkSize = 512 bits. hashSize = 384 bits */ -const u64 SKEIN_512_IV_384[] = { +static const u64 SKEIN_512_IV_384[] = { MK_64(0xA3F6C6BF, 0x3A75EF5F), MK_64(0xB0FEF9CC, 0xFD84FAA4), MK_64(0x9D77DD66, 0x3D770CFE), @@ -112,7 +112,7 @@ const u64 SKEIN_512_IV_384[] = { }; /* blkSize = 512 bits. hashSize = 512 bits */ -const u64 SKEIN_512_IV_512[] = { +static const u64 SKEIN_512_IV_512[] = { MK_64(0x4903ADFF, 0x749C51CE), MK_64(0x0D95DE39, 0x9746DF03), MK_64(0x8FD19341, 0x27C79BCE), @@ -124,7 +124,7 @@ const u64 SKEIN_512_IV_512[] = { }; /* blkSize = 1024 bits. hashSize = 384 bits */ -const u64 SKEIN_1024_IV_384[] = { +static const u64 SKEIN_1024_IV_384[] = { MK_64(0x5102B6B8, 0xC1894A35), MK_64(0xFEEBC9E3, 0xFE8AF11A), MK_64(0x0C807F06, 0xE32BED71), @@ -144,7 +144,7 @@ const u64 SKEIN_1024_IV_384[] = { }; /* blkSize = 1024 bits. hashSize = 512 bits */ -const u64 SKEIN_1024_IV_512[] = { +static const u64 SKEIN_1024_IV_512[] = { MK_64(0xCAEC0E5D, 0x7C1B1B18), MK_64(0xA01B0E04, 0x5F03E802), MK_64(0x33840451, 0xED912885), @@ -164,7 +164,7 @@ const u64 SKEIN_1024_IV_512[] = { }; /* blkSize = 1024 bits. hashSize = 1024 bits */ -const u64 SKEIN_1024_IV_1024[] = { +static const u64 SKEIN_1024_IV_1024[] = { MK_64(0xD593DA07, 0x41E72355), MK_64(0x15B5E511, 0xAC73E00C), MK_64(0x5180E5AE, 0xBAF2C4F0), -- cgit From b6d8d3a72941883447a6100a547a3eb098ab392a Mon Sep 17 00:00:00 2001 From: Chuong Ngo Date: Fri, 6 Jun 2014 13:55:20 -0400 Subject: drivers/staging/bcm: Added a space after a comma. Signed-off-by: Chuong Ngo Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/CmHost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/CmHost.c b/drivers/staging/bcm/CmHost.c index fb1d932c5d79..3dbdf0eb49ac 100644 --- a/drivers/staging/bcm/CmHost.c +++ b/drivers/staging/bcm/CmHost.c @@ -1418,7 +1418,7 @@ static inline ULONG RestoreSFParam(struct bcm_mini_adapter *Adapter, ulAddrSFParamSet = ntohl(ulAddrSFParamSet); /* Read out the SF Param Set At the indicated Location */ - if (rdm(Adapter, ulAddrSFParamSet,(PUCHAR)pucDestBuffer, nBytesToRead) < 0) + if (rdm(Adapter, ulAddrSFParamSet, (PUCHAR)pucDestBuffer, nBytesToRead) < 0) return STATUS_FAILURE; return 1; -- cgit From be30e7ac4f02e11e81eb0047dcddaabcc053b717 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sun, 8 Jun 2014 23:45:28 +0200 Subject: staging: bcm: nvm.c: Cleaning up a array that is filled incompletely Array 'SigBuff' is filled incompletely. Someone forget to multiply for the sizeof type. This was partly found using a static code analysis program called cppcheck. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 63be3be62ebd..d56ca3b06b60 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -3591,7 +3591,7 @@ int BcmCopyISO(struct bcm_mini_adapter *Adapter, struct bcm_flash2x_copy_section if (IsThisHeaderSector == TRUE) { /* If this is header sector write 0xFFFFFFFF at the sig time and in last write sig */ - memcpy(SigBuff, Buff + sigOffset, MAX_RW_SIZE); + memcpy(SigBuff, Buff + sigOffset, sizeof(SigBuff)); for (i = 0; i < MAX_RW_SIZE; i++) *(Buff + sigOffset + i) = 0xFF; @@ -3704,7 +3704,7 @@ int BcmCopyISO(struct bcm_mini_adapter *Adapter, struct bcm_flash2x_copy_section if (IsThisHeaderSector == TRUE) { /* If this is header sector write 0xFFFFFFFF at the sig time and in last write sig */ - memcpy(SigBuff, Buff + sigOffset, MAX_RW_SIZE); + memcpy(SigBuff, Buff + sigOffset, sizeof(SigBuff)); for (i = 0; i < MAX_RW_SIZE; i++) *(Buff + sigOffset + i) = 0xFF; -- cgit From a2745cc17c90ea7feca174f5c7ecdd56826c2aa3 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 17 Jun 2014 23:48:54 +0900 Subject: staging: bcm: Remove unnecessary parentheses This patch remove unnecessary parentheses in PHSModule.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 07c5a0bae1ed..bd68c6f814af 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1253,7 +1253,7 @@ static int phs_decompress(unsigned char *in_buf, BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "====>\n"); *header_size = 0; - if ((decomp_phs_rules == NULL)) + if (decomp_phs_rules == NULL) return 0; tmp_memb = decomp_phs_rules; -- cgit From fe830733ba743ad7881ba3c2520e1b85aecd7e37 Mon Sep 17 00:00:00 2001 From: Robin Schroer Date: Mon, 16 Jun 2014 13:01:46 +0200 Subject: drivers/staging/bcm/Misc: style: added blank lines after declarations Signed-off-by: Robin Schroer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Misc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Misc.c b/drivers/staging/bcm/Misc.c index 7b2fa0f4a2e4..f2bc699886ce 100644 --- a/drivers/staging/bcm/Misc.c +++ b/drivers/staging/bcm/Misc.c @@ -28,6 +28,7 @@ int InitAdapter(struct bcm_mini_adapter *psAdapter) { int i = 0; int Status = STATUS_SUCCESS; + BCM_DEBUG_PRINT(psAdapter, DBG_TYPE_INITEXIT, MP_INIT, DBG_LVL_ALL, "Initialising Adapter = %p", psAdapter); if (psAdapter == NULL) { @@ -96,6 +97,7 @@ int InitAdapter(struct bcm_mini_adapter *psAdapter) void AdapterFree(struct bcm_mini_adapter *Adapter) { int count; + beceem_protocol_reset(Adapter); vendorextnExit(Adapter); @@ -158,6 +160,7 @@ static int create_worker_threads(struct bcm_mini_adapter *psAdapter) static struct file *open_firmware_file(struct bcm_mini_adapter *Adapter, const char *path) { struct file *flp = filp_open(path, O_RDONLY, S_IRWXU); + if (IS_ERR(flp)) { pr_err(DRV_NAME "Unable To Open File %s, err %ld", path, PTR_ERR(flp)); flp = NULL; @@ -402,6 +405,7 @@ int CopyBufferToControlPacket(struct bcm_mini_adapter *Adapter, void *ioBuffer) void LinkMessage(struct bcm_mini_adapter *Adapter) { struct bcm_link_request *pstLinkRequest = NULL; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LINK_UP_MSG, DBG_LVL_ALL, "=====>"); if (Adapter->LinkStatus == SYNC_UP_REQUEST && Adapter->AutoSyncup) { pstLinkRequest = kzalloc(sizeof(struct bcm_link_request), GFP_ATOMIC); @@ -534,6 +538,7 @@ void LinkControlResponseMessage(struct bcm_mini_adapter *Adapter, PUCHAR pucBuff } } else if (SET_MAC_ADDRESS_RESPONSE == *pucBuffer) { PUCHAR puMacAddr = (pucBuffer + 1); + Adapter->LinkStatus = SYNC_UP_REQUEST; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "MAC address response, sending SYNC_UP"); LinkMessage(Adapter); @@ -548,6 +553,7 @@ void SendIdleModeResponse(struct bcm_mini_adapter *Adapter) int status = 0, NVMAccess = 0, lowPwrAbortMsg = 0; struct timeval tv; struct bcm_link_request stIdleResponse = {{0} }; + memset(&tv, 0, sizeof(tv)); stIdleResponse.Leader.Status = IDLE_MESSAGE; stIdleResponse.Leader.PLength = IDLE_MODE_PAYLOAD_LENGTH; @@ -1224,6 +1230,7 @@ int rdmalt(struct bcm_mini_adapter *Adapter, unsigned int uiAddress, unsigned in int wrmWithLock(struct bcm_mini_adapter *Adapter, unsigned int uiAddress, PCHAR pucBuff, size_t sSize) { int status = STATUS_SUCCESS; + down(&Adapter->rdmwrmsync); if ((Adapter->IdleMode == TRUE) || @@ -1282,6 +1289,7 @@ exit: static void HandleShutDownModeWakeup(struct bcm_mini_adapter *Adapter) { int clear_abort_pattern = 0, Status = 0; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, MP_SHUTDOWN, DBG_LVL_ALL, "====>\n"); /* target has woken up From Shut Down */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, MP_SHUTDOWN, DBG_LVL_ALL, "Clearing Shut Down Software abort pattern\n"); @@ -1440,6 +1448,7 @@ void ResetCounters(struct bcm_mini_adapter *Adapter) struct bcm_classifier_rule *GetFragIPClsEntry(struct bcm_mini_adapter *Adapter, USHORT usIpIdentification, ULONG SrcIP) { unsigned int uiIndex = 0; + for (uiIndex = 0; uiIndex < MAX_FRAGMENTEDIP_CLASSIFICATION_ENTRIES; uiIndex++) { if ((Adapter->astFragmentedPktClassifierTable[uiIndex].bUsed) && (Adapter->astFragmentedPktClassifierTable[uiIndex].usIpIdentification == usIpIdentification) && @@ -1454,6 +1463,7 @@ struct bcm_classifier_rule *GetFragIPClsEntry(struct bcm_mini_adapter *Adapter, void AddFragIPClsEntry(struct bcm_mini_adapter *Adapter, struct bcm_fragmented_packet_info *psFragPktInfo) { unsigned int uiIndex = 0; + for (uiIndex = 0; uiIndex < MAX_FRAGMENTEDIP_CLASSIFICATION_ENTRIES; uiIndex++) { if (!Adapter->astFragmentedPktClassifierTable[uiIndex].bUsed) { memcpy(&Adapter->astFragmentedPktClassifierTable[uiIndex], psFragPktInfo, sizeof(struct bcm_fragmented_packet_info)); @@ -1465,6 +1475,7 @@ void AddFragIPClsEntry(struct bcm_mini_adapter *Adapter, struct bcm_fragmented_p void DelFragIPClsEntry(struct bcm_mini_adapter *Adapter, USHORT usIpIdentification, ULONG SrcIp) { unsigned int uiIndex = 0; + for (uiIndex = 0; uiIndex < MAX_FRAGMENTEDIP_CLASSIFICATION_ENTRIES; uiIndex++) { if ((Adapter->astFragmentedPktClassifierTable[uiIndex].bUsed) && (Adapter->astFragmentedPktClassifierTable[uiIndex].usIpIdentification == usIpIdentification) && @@ -1528,6 +1539,7 @@ void flush_queue(struct bcm_mini_adapter *Adapter, unsigned int iQIndex) { struct sk_buff *PacketToDrop = NULL; struct net_device_stats *netstats = &Adapter->dev->stats; + spin_lock_bh(&Adapter->PackInfo[iQIndex].SFQueueLock); while (Adapter->PackInfo[iQIndex].FirstTxQueue && atomic_read(&Adapter->TotalPacketCount)) { @@ -1551,6 +1563,7 @@ void flush_queue(struct bcm_mini_adapter *Adapter, unsigned int iQIndex) static void beceem_protocol_reset(struct bcm_mini_adapter *Adapter) { int i; + if (netif_msg_link(Adapter)) pr_notice(PFX "%s: protocol reset\n", Adapter->dev->name); -- cgit From 28c520a6c98edf52d85f5175044af6c5c1867db0 Mon Sep 17 00:00:00 2001 From: Robin Schroer Date: Mon, 16 Jun 2014 13:01:47 +0200 Subject: drivers/staging/bcm/Misc: style: removed duplicate parentheses Signed-off-by: Robin Schroer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Misc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Misc.c b/drivers/staging/bcm/Misc.c index f2bc699886ce..a0637eb27847 100644 --- a/drivers/staging/bcm/Misc.c +++ b/drivers/staging/bcm/Misc.c @@ -284,7 +284,7 @@ int CopyBufferToControlPacket(struct bcm_mini_adapter *Adapter, void *ioBuffer) pLeader->Status == CM_CONTROL_NEWDSX_MULTICLASSIFIER_REQ) { if ((pLeader->Status == LINK_UP_CONTROL_REQ) && (pLinkReq->szData[0] == LINK_DOWN_REQ_PAYLOAD)) { - if ((pLinkReq->szData[1] == LINK_SYNC_DOWN_SUBTYPE)) { + if (pLinkReq->szData[1] == LINK_SYNC_DOWN_SUBTYPE) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, "Link Down Sent in Idle Mode\n"); Adapter->usIdleModePattern = ABORT_IDLE_SYNCDOWN; /* LINK DOWN sent in Idle Mode */ } else { @@ -630,7 +630,7 @@ void SendIdleModeResponse(struct bcm_mini_adapter *Adapter) } status = CopyBufferToControlPacket(Adapter, &stIdleResponse); - if ((status != STATUS_SUCCESS)) { + if (status != STATUS_SUCCESS) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "fail to send the Idle mode Request\n"); Adapter->bPreparingForLowPowerMode = false; StartInterruptUrb((struct bcm_interface_adapter *)(Adapter->pvInterfaceAdapter)); @@ -1393,7 +1393,7 @@ static void SendShutModeResponse(struct bcm_mini_adapter *Adapter) } Status = CopyBufferToControlPacket(Adapter, &stShutdownResponse); - if ((Status != STATUS_SUCCESS)) { + if (Status != STATUS_SUCCESS) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, MP_SHUTDOWN, DBG_LVL_ALL, "fail to send the Idle mode Request\n"); Adapter->bPreparingForLowPowerMode = false; StartInterruptUrb((struct bcm_interface_adapter *)(Adapter->pvInterfaceAdapter)); -- cgit From a77bf72918e62cc6f7580d1fd4f9a25f6f451f6f Mon Sep 17 00:00:00 2001 From: Robin Schroer Date: Mon, 16 Jun 2014 13:01:48 +0200 Subject: drivers/staging/bcm/Misc: style: removed void returns Signed-off-by: Robin Schroer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Misc.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Misc.c b/drivers/staging/bcm/Misc.c index a0637eb27847..a1c833c47cdf 100644 --- a/drivers/staging/bcm/Misc.c +++ b/drivers/staging/bcm/Misc.c @@ -21,7 +21,6 @@ static void default_wimax_protocol_initialize(struct bcm_mini_adapter *Adapter) Adapter->LinkStatus = SYNC_UP_REQUEST; Adapter->TransferMode = IP_PACKET_ONLY_MODE; Adapter->usBestEffortQueueIndex = -1; - return; } int InitAdapter(struct bcm_mini_adapter *psAdapter) @@ -460,7 +459,6 @@ void StatisticsResponse(struct bcm_mini_adapter *Adapter, void *pvBuffer) Adapter->StatisticsPointer = ntohl(*(__be32 *)pvBuffer); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "Stats at %x", (unsigned int)Adapter->StatisticsPointer); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "%s <====", __func__); - return; } /********************************************************************** @@ -545,7 +543,6 @@ void LinkControlResponseMessage(struct bcm_mini_adapter *Adapter, PUCHAR pucBuff memcpy(Adapter->dev->dev_addr, puMacAddr, MAC_ADDRESS_SIZE); } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "%s <=====", __func__); - return; } void SendIdleModeResponse(struct bcm_mini_adapter *Adapter) @@ -776,8 +773,6 @@ void DumpPackInfo(struct bcm_mini_adapter *Adapter) for (uiLoopIndex = 0; uiLoopIndex < MIBS_MAX_HIST_ENTRIES; uiLoopIndex++) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "Adapter->aTxPktSizeHist[%x] = %x\n", uiLoopIndex, Adapter->aTxPktSizeHist[uiLoopIndex]); - - return; } int reset_card_proc(struct bcm_mini_adapter *ps_adapter) @@ -1426,7 +1421,6 @@ static void HandleShutDownModeRequest(struct bcm_mini_adapter *Adapter, PUCHAR p } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, MP_SHUTDOWN, DBG_LVL_ALL, "<====\n"); - return; } void ResetCounters(struct bcm_mini_adapter *Adapter) -- cgit From cfa880069d092fb9bd6a886430264f0e926eb40d Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 5 Jun 2014 22:48:13 +0200 Subject: staging: sn9c102 depends on USB If the USB code is a loadable module, this driver cannot be built-in. This adds an explicit dependency on CONFIG_USB so that Kconfig can force sn9c102 to be a module in this case. Signed-off-by: Arnd Bergmann Cc: Luca Risolia Cc: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org Cc: linux-usb@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/media/sn9c102/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/media/sn9c102/Kconfig b/drivers/staging/media/sn9c102/Kconfig index c9aba59258d9..10f586befce3 100644 --- a/drivers/staging/media/sn9c102/Kconfig +++ b/drivers/staging/media/sn9c102/Kconfig @@ -1,6 +1,6 @@ config USB_SN9C102 tristate "USB SN9C1xx PC Camera Controller support (DEPRECATED)" - depends on VIDEO_V4L2 && MEDIA_USB_SUPPORT + depends on VIDEO_V4L2 && MEDIA_USB_SUPPORT && USB ---help--- This driver is DEPRECATED, please use the gspca sonixb and sonixj modules instead. -- cgit From c72374ff0d4c66c548a68637d1f0adcd9a788c4a Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 5 Jun 2014 22:48:11 +0200 Subject: staging: lirc: remove sa1100 support The LIRC support for sa1100 appears to have never worked because it relies on header files that have never been present in git history. Actually trying to build the driver on an ARM sa1100 kernel fails, so let's just remove the broken support. Signed-off-by: Arnd Bergmann Cc: Jarod Wilson Cc: Mauro Carvalho Chehab Cc: Tuomas Tynkkynen Cc: linux-media@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/media/lirc/lirc_sir.c | 301 +--------------------------------- 1 file changed, 2 insertions(+), 299 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/media/lirc/lirc_sir.c b/drivers/staging/media/lirc/lirc_sir.c index e31cbb81f059..79da3adf1bd5 100644 --- a/drivers/staging/media/lirc/lirc_sir.c +++ b/drivers/staging/media/lirc/lirc_sir.c @@ -55,13 +55,6 @@ #include #include #include -#ifdef LIRC_ON_SA1100 -#include -#ifdef CONFIG_SA1100_COLLIE -#include -#include -#endif -#endif #include @@ -94,35 +87,6 @@ static void init_act200(void); static void init_act220(void); #endif -/*** SA1100 ***/ -#ifdef LIRC_ON_SA1100 -struct sa1100_ser2_registers { - /* HSSP control register */ - unsigned char hscr0; - /* UART registers */ - unsigned char utcr0; - unsigned char utcr1; - unsigned char utcr2; - unsigned char utcr3; - unsigned char utcr4; - unsigned char utdr; - unsigned char utsr0; - unsigned char utsr1; -} sr; - -static int irq = IRQ_Ser2ICP; - -#define LIRC_ON_SA1100_TRANSMITTER_LATENCY 0 - -/* pulse/space ratio of 50/50 */ -static unsigned long pulse_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY); -/* 1000000/freq-pulse_width */ -static unsigned long space_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY); -static unsigned int freq = 38000; /* modulation frequency */ -static unsigned int duty_cycle = 50; /* duty cycle of 50% */ - -#endif - #define RBUF_LEN 1024 #define WBUF_LEN 1024 @@ -205,17 +169,6 @@ static void drop_hardware(void); static int init_port(void); static void drop_port(void); -#ifdef LIRC_ON_SA1100 -static void on(void) -{ - PPSR |= PPC_TXD2; -} - -static void off(void) -{ - PPSR &= ~PPC_TXD2; -} -#else static inline unsigned int sinp(int offset) { return inb(io + offset); @@ -225,7 +178,6 @@ static inline void soutp(int offset, int value) { outb(value, io + offset); } -#endif #ifndef MAX_UDELAY_MS #define MAX_UDELAY_US 5000 @@ -305,10 +257,6 @@ static ssize_t lirc_write(struct file *file, const char __user *buf, size_t n, if (IS_ERR(tx_buf)) return PTR_ERR(tx_buf); i = 0; -#ifdef LIRC_ON_SA1100 - /* disable receiver */ - Ser2UTCR3 = 0; -#endif local_irq_save(flags); while (1) { if (i >= count) @@ -323,15 +271,6 @@ static ssize_t lirc_write(struct file *file, const char __user *buf, size_t n, i++; } local_irq_restore(flags); -#ifdef LIRC_ON_SA1100 - off(); - udelay(1000); /* wait 1ms for IR diode to recover */ - Ser2UTCR3 = 0; - /* clear status register to prevent unwanted interrupts */ - Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); - /* enable receiver */ - Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE; -#endif kfree(tx_buf); return count; } @@ -341,25 +280,12 @@ static long lirc_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) u32 __user *uptr = (u32 __user *)arg; int retval = 0; u32 value = 0; -#ifdef LIRC_ON_SA1100 - - if (cmd == LIRC_GET_FEATURES) - value = LIRC_CAN_SEND_PULSE | - LIRC_CAN_SET_SEND_DUTY_CYCLE | - LIRC_CAN_SET_SEND_CARRIER | - LIRC_CAN_REC_MODE2; - else if (cmd == LIRC_GET_SEND_MODE) - value = LIRC_MODE_PULSE; - else if (cmd == LIRC_GET_REC_MODE) - value = LIRC_MODE_MODE2; -#else if (cmd == LIRC_GET_FEATURES) value = LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2; else if (cmd == LIRC_GET_SEND_MODE) value = LIRC_MODE_PULSE; else if (cmd == LIRC_GET_REC_MODE) value = LIRC_MODE_MODE2; -#endif switch (cmd) { case LIRC_GET_FEATURES: @@ -372,37 +298,6 @@ static long lirc_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) case LIRC_SET_REC_MODE: retval = get_user(value, uptr); break; -#ifdef LIRC_ON_SA1100 - case LIRC_SET_SEND_DUTY_CYCLE: - retval = get_user(value, uptr); - if (retval) - return retval; - if (value <= 0 || value > 100) - return -EINVAL; - /* (value/100)*(1000000/freq) */ - duty_cycle = value; - pulse_width = (unsigned long) duty_cycle*10000/freq; - space_width = (unsigned long) 1000000L/freq-pulse_width; - if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) - pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; - if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) - space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; - break; - case LIRC_SET_SEND_CARRIER: - retval = get_user(value, uptr); - if (retval) - return retval; - if (value > 500000 || value < 20000) - return -EINVAL; - freq = value; - pulse_width = (unsigned long) duty_cycle*10000/freq; - space_width = (unsigned long) 1000000L/freq-pulse_width; - if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) - pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; - if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) - space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; - break; -#endif default: retval = -ENOIOCTLCMD; @@ -539,10 +434,8 @@ static void sir_timeout(unsigned long data) /* avoid interference with interrupt */ spin_lock_irqsave(&timer_lock, flags); if (last_value) { -#ifndef LIRC_ON_SA1100 /* clear unread bits in UART and restart */ outb(UART_FCR_CLEAR_RCVR, io + UART_FCR); -#endif /* determine 'virtual' pulse end: */ pulse_end = delta(&last_tv, &last_intr_tv); dprintk("timeout add %d for %lu usec\n", last_value, pulse_end); @@ -558,62 +451,6 @@ static irqreturn_t sir_interrupt(int irq, void *dev_id) unsigned char data; struct timeval curr_tv; static unsigned long deltv; -#ifdef LIRC_ON_SA1100 - int status; - static int n; - - status = Ser2UTSR0; - /* - * Deal with any receive errors first. The bytes in error may be - * the only bytes in the receive FIFO, so we do this first. - */ - while (status & UTSR0_EIF) { - int bstat; - - if (debug) { - dprintk("EIF\n"); - bstat = Ser2UTSR1; - - if (bstat & UTSR1_FRE) - dprintk("frame error\n"); - if (bstat & UTSR1_ROR) - dprintk("receive fifo overrun\n"); - if (bstat & UTSR1_PRE) - dprintk("parity error\n"); - } - - bstat = Ser2UTDR; - n++; - status = Ser2UTSR0; - } - - if (status & (UTSR0_RFS | UTSR0_RID)) { - do_gettimeofday(&curr_tv); - deltv = delta(&last_tv, &curr_tv); - do { - data = Ser2UTDR; - dprintk("%d data: %u\n", n, (unsigned int) data); - n++; - } while (status & UTSR0_RID && /* do not empty fifo in order to - * get UTSR0_RID in any case */ - Ser2UTSR1 & UTSR1_RNE); /* data ready */ - - if (status&UTSR0_RID) { - add_read_queue(0 , deltv - n * TIME_CONST); /*space*/ - add_read_queue(1, n * TIME_CONST); /*pulse*/ - n = 0; - last_tv = curr_tv; - } - } - - if (status & UTSR0_TFS) - pr_err("transmit fifo not full, shouldn't happen\n"); - - /* We must clear certain bits. */ - status &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); - if (status) - Ser2UTSR0 = status; -#else unsigned long deltintrtv; unsigned long flags; int iir, lsr; @@ -698,44 +535,9 @@ static irqreturn_t sir_interrupt(int irq, void *dev_id) break; } } -#endif return IRQ_RETVAL(IRQ_HANDLED); } -#ifdef LIRC_ON_SA1100 -static void send_pulse(unsigned long length) -{ - unsigned long k, delay; - int flag; - - if (length == 0) - return; - /* - * this won't give us the carrier frequency we really want - * due to integer arithmetic, but we can accept this inaccuracy - */ - - for (k = flag = 0; k < length; k += delay, flag = !flag) { - if (flag) { - off(); - delay = space_width; - } else { - on(); - delay = pulse_width; - } - safe_udelay(delay); - } - off(); -} - -static void send_space(unsigned long length) -{ - if (length == 0) - return; - off(); - safe_udelay(length); -} -#else static void send_space(unsigned long len) { safe_udelay(len); @@ -755,31 +557,6 @@ static void send_pulse(unsigned long len) ; } } -#endif - -#ifdef CONFIG_SA1100_COLLIE -static int sa1100_irda_set_power_collie(int state) -{ - if (state) { - /* - * 0 - off - * 1 - short range, lowest power - * 2 - medium range, medium power - * 3 - maximum range, high power - */ - ucb1200_set_io_direction(TC35143_GPIO_IR_ON, - TC35143_IODIR_OUTPUT); - ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_LOW); - udelay(100); - } else { - /* OFF */ - ucb1200_set_io_direction(TC35143_GPIO_IR_ON, - TC35143_IODIR_OUTPUT); - ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_HIGH); - } - return 0; -} -#endif static int init_hardware(void) { @@ -787,51 +564,7 @@ static int init_hardware(void) spin_lock_irqsave(&hardware_lock, flags); /* reset UART */ -#ifdef LIRC_ON_SA1100 -#ifdef CONFIG_SA1100_COLLIE - sa1100_irda_set_power_collie(3); /* power on */ -#endif - sr.hscr0 = Ser2HSCR0; - - sr.utcr0 = Ser2UTCR0; - sr.utcr1 = Ser2UTCR1; - sr.utcr2 = Ser2UTCR2; - sr.utcr3 = Ser2UTCR3; - sr.utcr4 = Ser2UTCR4; - - sr.utdr = Ser2UTDR; - sr.utsr0 = Ser2UTSR0; - sr.utsr1 = Ser2UTSR1; - - /* configure GPIO */ - /* output */ - PPDR |= PPC_TXD2; - PSDR |= PPC_TXD2; - /* set output to 0 */ - off(); - - /* Enable HP-SIR modulation, and ensure that the port is disabled. */ - Ser2UTCR3 = 0; - Ser2HSCR0 = sr.hscr0 & (~HSCR0_HSSP); - - /* clear status register to prevent unwanted interrupts */ - Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); - - /* 7N1 */ - Ser2UTCR0 = UTCR0_1StpBit|UTCR0_7BitData; - /* 115200 */ - Ser2UTCR1 = 0; - Ser2UTCR2 = 1; - /* use HPSIR, 1.6 usec pulses */ - Ser2UTCR4 = UTCR4_HPSIR|UTCR4_Z1_6us; - - /* enable receiver, receive fifo interrupt */ - Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE; - - /* clear status register to prevent unwanted interrupts */ - Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); - -#elif defined(LIRC_SIR_TEKRAM) +#if defined(LIRC_SIR_TEKRAM) /* disable FIFO */ soutp(UART_FCR, UART_FCR_CLEAR_RCVR| @@ -927,23 +660,9 @@ static void drop_hardware(void) spin_lock_irqsave(&hardware_lock, flags); -#ifdef LIRC_ON_SA1100 - Ser2UTCR3 = 0; - - Ser2UTCR0 = sr.utcr0; - Ser2UTCR1 = sr.utcr1; - Ser2UTCR2 = sr.utcr2; - Ser2UTCR4 = sr.utcr4; - Ser2UTCR3 = sr.utcr3; - - Ser2HSCR0 = sr.hscr0; -#ifdef CONFIG_SA1100_COLLIE - sa1100_irda_set_power_collie(0); /* power off */ -#endif -#else /* turn off interrupts */ outb(0, io + UART_IER); -#endif + spin_unlock_irqrestore(&hardware_lock, flags); } @@ -954,24 +673,18 @@ static int init_port(void) int retval; /* get I/O port access and IRQ line */ -#ifndef LIRC_ON_SA1100 if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) { pr_err("i/o port 0x%.4x already in use.\n", io); return -EBUSY; } -#endif retval = request_irq(irq, sir_interrupt, 0, LIRC_DRIVER_NAME, NULL); if (retval < 0) { -# ifndef LIRC_ON_SA1100 release_region(io, 8); -# endif pr_err("IRQ %d already in use.\n", irq); return retval; } -#ifndef LIRC_ON_SA1100 pr_info("I/O port 0x%.4x, IRQ %d.\n", io, irq); -#endif init_timer(&timerlist); timerlist.function = sir_timeout; @@ -984,9 +697,7 @@ static void drop_port(void) { free_irq(irq, NULL); del_timer_sync(&timerlist); -#ifndef LIRC_ON_SA1100 release_region(io, 8); -#endif } #ifdef LIRC_SIR_ACTISYS_ACT200L @@ -1284,9 +995,6 @@ module_exit(lirc_sir_exit); #ifdef LIRC_SIR_TEKRAM MODULE_DESCRIPTION("Infrared receiver driver for Tekram Irmate 210"); MODULE_AUTHOR("Christoph Bartelmus"); -#elif defined(LIRC_ON_SA1100) -MODULE_DESCRIPTION("LIRC driver for StrongARM SA1100 embedded microprocessor"); -MODULE_AUTHOR("Christoph Bartelmus"); #elif defined(LIRC_SIR_ACTISYS_ACT200L) MODULE_DESCRIPTION("LIRC driver for Actisys Act200L"); MODULE_AUTHOR("Karl Bongers"); @@ -1299,10 +1007,6 @@ MODULE_AUTHOR("Milan Pikula"); #endif MODULE_LICENSE("GPL"); -#ifdef LIRC_ON_SA1100 -module_param(irq, int, S_IRUGO); -MODULE_PARM_DESC(irq, "Interrupt (16)"); -#else module_param(io, int, S_IRUGO); MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)"); @@ -1311,7 +1015,6 @@ MODULE_PARM_DESC(irq, "Interrupt (4 or 3)"); module_param(threshold, int, S_IRUGO); MODULE_PARM_DESC(threshold, "space detection threshold (3)"); -#endif module_param(debug, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(debug, "Enable debugging messages"); -- cgit From 07d3bf6b5ee5c411573a2dacfaed4c9133255de9 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 5 Jun 2014 22:48:14 +0200 Subject: staging: wlags49_h2: avoid PROFILE_ALL_BRANCHES warnings Using an 'if()' inside of an 'extern inline' function causes a gcc warning when CONFIG_PROFILE_ALL_BRANCHES is set every time the function is called, which gets very noisy: In file included from /git/arm-soc/drivers/staging/wlags49_h2/wl_wext.c:73:0: drivers/staging/wlags49_h2/wl_internal.h:1035:216: warning: '______f' is static but declared in inline function 'wl_act_int_off' which is not static [enabled by default] if(lp->is_handling_int == WL_HANDLING_INT) { Fortunately there is a trivial workaround, so we can avoid the problem by making the functions in question 'static inline' rather than 'extern inline'. Signed-off-by: Arnd Bergmann Cc: Henk de Groot Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlags49_h2/wl_internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlags49_h2/wl_internal.h b/drivers/staging/wlags49_h2/wl_internal.h index 78129e93920f..1ecb5cb44bd5 100644 --- a/drivers/staging/wlags49_h2/wl_internal.h +++ b/drivers/staging/wlags49_h2/wl_internal.h @@ -1013,7 +1013,7 @@ static inline void wl_unlock(struct wl_private *lp, /* Interrupt enable disable functions */ /********************************************************************/ -extern inline void wl_act_int_on(struct wl_private *lp) +static inline void wl_act_int_on(struct wl_private *lp) { /* * Only do something when the driver is handling @@ -1025,7 +1025,7 @@ extern inline void wl_act_int_on(struct wl_private *lp) } } -extern inline void wl_act_int_off(struct wl_private *lp) +static inline void wl_act_int_off(struct wl_private *lp) { /* * Only do something when the driver is handling -- cgit From 07467e509b90c75a7c5962c0857857eae79e5c33 Mon Sep 17 00:00:00 2001 From: Vincent Heuken Date: Tue, 3 Jun 2014 05:41:33 -0700 Subject: Staging: dgnc: fixed brace coding style issue in dgnc_driver.c This is a patch to the dgnc_driver.c file that fixes the following error: ERROR: open brace '{' following function declarations go on the next line Signed-off-by: Vincent Heuken Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_driver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index 5af8300dfb0d..d52a9e84bd9d 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -710,7 +710,8 @@ failed: } -static int dgnc_finalize_board_init(struct dgnc_board *brd) { +static int dgnc_finalize_board_init(struct dgnc_board *brd) +{ int rc = 0; DPR_INIT(("dgnc_finalize_board_init() - start\n")); -- cgit From c7f268df3f4e80513271aea8e91f3fd0701aae1b Mon Sep 17 00:00:00 2001 From: Alexey Khoroshilov Date: Wed, 11 Jun 2014 00:22:50 +0400 Subject: staging: line6: do not return 0 from probe if no initialization done There is a strange "return 0" in line6_probe() before any initialization of the module is done. It can lead to NULL pointer dereference in other functions. The patch proposes to return -ENODEV in this case. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/line6/driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c index ef511c76a6e3..503b2d763595 100644 --- a/drivers/staging/line6/driver.c +++ b/drivers/staging/line6/driver.c @@ -663,7 +663,7 @@ static int line6_probe(struct usb_interface *interface, case LINE6_DEVID_POCKETPOD: switch (interface_number) { case 0: - return 0; /* this interface has no endpoints */ + return -ENODEV; /* this interface has no endpoints */ case 1: alternate = 0; break; -- cgit From 3d3cb1bffde15ee6e69532457bee20b5d424952b Mon Sep 17 00:00:00 2001 From: Robin Schroer Date: Fri, 13 Jun 2014 01:17:30 +0200 Subject: drivers/staging/speakup/main: fixed jiffie comparison speakup_key() used manual comparison of jiffies to determine the time since the last keypress, replaced it with time_after() Signed-off-by: Robin Schroer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/speakup/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c index 7de79d59a4cd..0cd3cdba8644 100644 --- a/drivers/staging/speakup/main.c +++ b/drivers/staging/speakup/main.c @@ -2067,7 +2067,7 @@ speakup_key(struct vc_data *vc, int shift_state, int keycode, u_short keysym, if (up_flag) goto out; if (last_keycode == keycode && - last_spk_jiffy + MAX_DELAY > jiffies) { + time_after(last_spk_jiffy + MAX_DELAY, jiffies)) { spk_close_press = 1; offset = spk_shift_table[shift_info + 32]; /* double press? */ -- cgit From 12df0c3542742e6ecd2365eb2426a0a0b5f3d2e1 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 17 Jun 2014 23:59:20 +0900 Subject: staging: unisys: Remove trailing semicolon from macro This patch removed trailing semicolon from macro in guestlinuxdebug.h Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/guestlinuxdebug.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/guestlinuxdebug.h b/drivers/staging/unisys/include/guestlinuxdebug.h index efc4005368b0..b4b479496069 100644 --- a/drivers/staging/unisys/include/guestlinuxdebug.h +++ b/drivers/staging/unisys/include/guestlinuxdebug.h @@ -168,15 +168,15 @@ do { \ /* MOST COMMON */ #define POSTCODE_LINUX_2(EVENT_PC, severity) \ - POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, 0x0000, severity); + POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, 0x0000, severity) #define POSTCODE_LINUX_3(EVENT_PC, pc32bit, severity) \ - POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, pc32bit, severity); + POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, pc32bit, severity) #define POSTCODE_LINUX_4(EVENT_PC, pc16bit1, pc16bit2, severity) \ POSTCODE_LINUX_B(CURRENT_FILE_PC, EVENT_PC, pc16bit1, \ - pc16bit2, severity); + pc16bit2, severity) #endif #endif -- cgit From 037526f1ae7eeff5cf27ad790ebfe30303eeebe8 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Tue, 10 Jun 2014 11:10:03 -0700 Subject: staging: r8192ee: avoid leaking format string This makes sure a format string cannot leak into the work queue name nor the printk buffer. Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/base.c | 2 +- drivers/staging/rtl8192ee/btcoexist/halbtcoutsrc.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/base.c b/drivers/staging/rtl8192ee/base.c index 64ade216a153..a7c69f704623 100644 --- a/drivers/staging/rtl8192ee/base.c +++ b/drivers/staging/rtl8192ee/base.c @@ -469,7 +469,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) rtl92e_easy_concurrent_retrytimer_callback, (unsigned long)hw); /* <2> work queue */ rtlpriv->works.hw = hw; - rtlpriv->works.rtl_wq = alloc_workqueue(rtlpriv->cfg->name, 0, 0); + rtlpriv->works.rtl_wq = alloc_workqueue("%s", 0, 0, rtlpriv->cfg->name); INIT_DELAYED_WORK(&rtlpriv->works.watchdog_wq, (void *)rtl92e_watchdog_wq_callback); INIT_DELAYED_WORK(&rtlpriv->works.ips_nic_off_wq, diff --git a/drivers/staging/rtl8192ee/btcoexist/halbtcoutsrc.h b/drivers/staging/rtl8192ee/btcoexist/halbtcoutsrc.h index c0a4286430a5..1231b16205f2 100644 --- a/drivers/staging/rtl8192ee/btcoexist/halbtcoutsrc.h +++ b/drivers/staging/rtl8192ee/btcoexist/halbtcoutsrc.h @@ -94,7 +94,7 @@ extern u32 btc_92edbg_type[]; #define CL_SPRINTF snprintf -#define CL_PRINTF printk +#define CL_PRINTF(buf) printk("%s", buf) #define BTC_PRINT(dbgtype, dbgflag, printstr, ...) \ do { \ -- cgit From eb5dd416fb54b87501b380eb46a22785ee2e49c5 Mon Sep 17 00:00:00 2001 From: A Raghavendra Rao Date: Wed, 11 Jun 2014 10:28:58 +0530 Subject: Staging: rtl8192e: dot11d: Fixed printk coding style issues Replaced 'printk' with 'netdev_' function Signed-off-by: A Raghavendra Rao Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192e/dot11d.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192e/dot11d.c b/drivers/staging/rtl8192e/dot11d.c index 53da61072992..bfcc935d48de 100644 --- a/drivers/staging/rtl8192e/dot11d.c +++ b/drivers/staging/rtl8192e/dot11d.c @@ -133,12 +133,12 @@ void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr, pTriple = (struct chnl_txpow_triple *)(pCoutryIe + 3); for (i = 0; i < NumTriples; i++) { if (MaxChnlNum >= pTriple->FirstChnl) { - printk(KERN_INFO "Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n"); + netdev_info(dev->dev, "Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n"); return; } if (MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + pTriple->NumChnls)) { - printk(KERN_INFO "Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n"); + netdev_info(dev->dev, "Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n"); return; } @@ -165,7 +165,7 @@ u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel) u8 MaxTxPwrInDbm = 255; if (MAX_CHANNEL_NUMBER < Channel) { - printk(KERN_INFO "DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n"); + netdev_info(dev->dev, "DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n"); return MaxTxPwrInDbm; } if (pDot11dInfo->channel_map[Channel]) @@ -204,7 +204,7 @@ int ToLegalChannel(struct rtllib_device *dev, u8 channel) } if (MAX_CHANNEL_NUMBER < channel) { - printk(KERN_ERR "%s(): Invalid Channel\n", __func__); + netdev_err(dev->dev, "%s(): Invalid Channel\n", __func__); return default_chn; } -- cgit From b82f412bcf6956d89117d6f561cfb0482371b016 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sun, 15 Jun 2014 00:56:32 +0200 Subject: staging: ced1401: userspace: use1401.c: Cleaning up if statement that always evaluates to true Unsigned variable can't be negative so it is unnecessary to test it. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/userspace/use1401.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/userspace/use1401.c b/drivers/staging/ced1401/userspace/use1401.c index 7b8a2227fe5b..9ebddbd07e8d 100644 --- a/drivers/staging/ced1401/userspace/use1401.c +++ b/drivers/staging/ced1401/userspace/use1401.c @@ -1744,13 +1744,8 @@ U14API(short) U14GetString(short hand, char* pBuffer, unsigned short wMaxLen) &dwBytes, NULL); if (iOK) /* Device IO control OK ? */ { - if (dwBytes >= 0) /* If driver OK */ - { - strcpy(pBuffer, tstr); - sErr = U14ERR_NOERROR; - } - else - sErr = U14ERR_DRIVCOMMS; + strcpy(pBuffer, tstr); + sErr = U14ERR_NOERROR; } else { -- cgit From 6c6871eb5a47c83c70a19260115ad7ceff308c1b Mon Sep 17 00:00:00 2001 From: Wolfgang Ocker Date: Sun, 15 Jun 2014 13:03:29 +0200 Subject: staging cxt1e1: refactored ring buffer dump functions to avoid sparse warnings Sparse spit out these warnings: drivers/staging/cxt1e1/musycc.c:68:1: warning: context imbalance in 'musycc_dump_rxbuffer_ring' - different lock contexts for basic block drivers/staging/cxt1e1/musycc.c:136:1: warning: context imbalance in 'musycc_dump_txbuffer_ring' - different lock contexts for basic block The new functions musycc_dump_[rt]xbuffer_ring_locked() assume that the lock is held. musycc_dump_[rt]xbuffer_ring() take the lock. Signed-off-by: Wolfgang Ocker Signed-off-by: Greg Kroah-Hartman --- drivers/staging/cxt1e1/musycc.c | 54 ++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/cxt1e1/musycc.c b/drivers/staging/cxt1e1/musycc.c index 0bcbd8a3fc84..9495c0b91966 100644 --- a/drivers/staging/cxt1e1/musycc.c +++ b/drivers/staging/cxt1e1/musycc.c @@ -65,10 +65,9 @@ void musycc_update_timeslots(mpi_t *); /*******************************************************************/ static int -musycc_dump_rxbuffer_ring(mch_t *ch, int lockit) +musycc_dump_rxbuffer_ring_locked(mch_t *ch) { struct mdesc *m; - unsigned long flags = 0; u_int32_t status; int n; @@ -77,8 +76,6 @@ musycc_dump_rxbuffer_ring(mch_t *ch, int lockit) u_int32_t *dp; int len = 0; #endif - if (lockit) - spin_lock_irqsave(&ch->ch_rxlock, flags); if (ch->rxd_num == 0) pr_info(" ZERO receive buffers allocated for this channel."); else { @@ -127,16 +124,26 @@ musycc_dump_rxbuffer_ring(mch_t *ch, int lockit) } pr_info("\n"); - if (lockit) - spin_unlock_irqrestore(&ch->ch_rxlock, flags); return 0; } static int -musycc_dump_txbuffer_ring(mch_t *ch, int lockit) +musycc_dump_rxbuffer_ring(mch_t *ch) { - struct mdesc *m; unsigned long flags = 0; + int ret; + + spin_lock_irqsave(&ch->ch_rxlock, flags); + ret = musycc_dump_rxbuffer_ring_locked(ch); + spin_unlock_irqrestore(&ch->ch_rxlock, flags); + + return ret; +} + +static int +musycc_dump_txbuffer_ring_locked(mch_t *ch) +{ + struct mdesc *m; u_int32_t status; int n; #ifdef RLD_DUMP_BUFDATA @@ -144,8 +151,6 @@ musycc_dump_txbuffer_ring(mch_t *ch, int lockit) int len = 0; #endif - if (lockit) - spin_lock_irqsave(&ch->ch_txlock, flags); if (ch->txd_num == 0) pr_info(" ZERO transmit buffers allocated for this channel."); else { @@ -188,11 +193,22 @@ musycc_dump_txbuffer_ring(mch_t *ch, int lockit) } /* -for- */ pr_info("\n"); - if (lockit) - spin_unlock_irqrestore(&ch->ch_txlock, flags); return 0; } +static int +musycc_dump_txbuffer_ring(mch_t *ch) +{ + unsigned long flags = 0; + int ret; + + spin_lock_irqsave(&ch->ch_txlock, flags); + ret = musycc_dump_txbuffer_ring_locked(ch); + spin_unlock_irqrestore(&ch->ch_txlock, flags); + + return ret; +} + /* * The following supports a backdoor debug facility which can be used to * display the state of a board's channel. @@ -234,11 +250,11 @@ musycc_dump_ring(ci_t *ci, unsigned int chan) 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); + musycc_dump_txbuffer_ring(ch); 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); + musycc_dump_rxbuffer_ring(ch); return SBE_DRVR_SUCCESS; } @@ -380,7 +396,7 @@ musycc_wq_chan_restart(void *arg) /* channel private structure */ ch->channum, ch->rxix_irq_srv, md, le32_to_cpu(md->status), ch->s.rx_packets); - musycc_dump_rxbuffer_ring(ch, 1); /* RLD DEBUG */ + musycc_dump_rxbuffer_ring(ch); /* RLD DEBUG */ #endif } #endif @@ -420,7 +436,7 @@ musycc_wq_chan_restart(void *arg) /* channel private structure */ ch->channum, md, le32_to_cpu(md->status), le32_to_cpu(md->data), ch->ch_start_tx); - musycc_dump_txbuffer_ring(ch, 0); + musycc_dump_txbuffer_ring_locked(ch); } #endif } @@ -903,7 +919,7 @@ musycc_bh_tx_eom(mpi_t *pi, int gchan) 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); + musycc_dump_txbuffer_ring_locked(ch); } break; /* Not our mdesc, done */ } else { @@ -1412,7 +1428,7 @@ musycc_intr_bh_tasklet(ci_t *ci) ch->tx_full, ch->txd_free, ch->p.chan_mode); - musycc_dump_txbuffer_ring(ch, 0); + musycc_dump_txbuffer_ring_locked(ch); } #endif } @@ -1432,7 +1448,7 @@ musycc_intr_bh_tasklet(ci_t *ci) ci->devname, ch->channum, ch->p.chan_mode); #ifdef RLD_DEBUG - musycc_dump_rxbuffer_ring(ch, 0); + musycc_dump_rxbuffer_ring_locked(ch); #endif } } -- cgit From dc5d8180ea26b96d9e6a19ec2bce8faef8b4eb0b Mon Sep 17 00:00:00 2001 From: Adithya Krishnamurthy Date: Thu, 19 Jun 2014 09:18:00 +0530 Subject: Staging:tidspbridge Fix minor checkpatch.pl warning Fixed checkpatch "WARNING: Missing a blank line after declarations" Signed-off-by: Adithya Krishnamurthy Signed-off-by: Greg Kroah-Hartman --- drivers/staging/tidspbridge/core/chnl_sm.c | 1 + drivers/staging/tidspbridge/core/io_sm.c | 1 + drivers/staging/tidspbridge/core/tiomap3430.c | 2 ++ drivers/staging/tidspbridge/core/tiomap_io.c | 2 ++ drivers/staging/tidspbridge/core/wdt.c | 1 + drivers/staging/tidspbridge/dynload/cload.c | 7 +++++++ drivers/staging/tidspbridge/dynload/reloc.c | 2 ++ drivers/staging/tidspbridge/pmgr/chnl.c | 1 + drivers/staging/tidspbridge/rmgr/dbdcd.c | 1 + drivers/staging/tidspbridge/rmgr/drv_interface.c | 2 ++ drivers/staging/tidspbridge/rmgr/nldr.c | 1 + drivers/staging/tidspbridge/rmgr/node.c | 2 ++ drivers/staging/tidspbridge/rmgr/proc.c | 3 +++ 13 files changed, 26 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/tidspbridge/core/chnl_sm.c b/drivers/staging/tidspbridge/core/chnl_sm.c index 16fa3462fbbe..c855992f5950 100644 --- a/drivers/staging/tidspbridge/core/chnl_sm.c +++ b/drivers/staging/tidspbridge/core/chnl_sm.c @@ -486,6 +486,7 @@ int bridge_chnl_get_info(struct chnl_object *chnl_obj, { int status = 0; struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; + if (channel_info != NULL) { if (pchnl) { /* Return the requested information: */ diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c index c2829aa7780f..42f94e157efd 100644 --- a/drivers/staging/tidspbridge/core/io_sm.c +++ b/drivers/staging/tidspbridge/core/io_sm.c @@ -249,6 +249,7 @@ int bridge_io_create(struct io_mgr **io_man, int bridge_io_destroy(struct io_mgr *hio_mgr) { int status = 0; + if (hio_mgr) { /* Free IO DPC object */ tasklet_kill(&hio_mgr->dpc_tasklet); diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c index 8945b4e3a2a6..bf952ef7e696 100644 --- a/drivers/staging/tidspbridge/core/tiomap3430.c +++ b/drivers/staging/tidspbridge/core/tiomap3430.c @@ -1057,6 +1057,7 @@ static int bridge_brd_mem_copy(struct bridge_dev_context *dev_ctxt, u32 total_bytes = ul_num_bytes; u8 host_buf[BUFFERSIZE]; struct bridge_dev_context *dev_context = dev_ctxt; + while (total_bytes > 0 && !status) { copy_bytes = total_bytes > BUFFERSIZE ? BUFFERSIZE : total_bytes; @@ -1094,6 +1095,7 @@ static int bridge_brd_mem_write(struct bridge_dev_context *dev_ctxt, struct bridge_dev_context *dev_context = dev_ctxt; u32 ul_remain_bytes = 0; u32 ul_bytes = 0; + ul_remain_bytes = ul_num_bytes; while (ul_remain_bytes > 0 && !status) { ul_bytes = diff --git a/drivers/staging/tidspbridge/core/tiomap_io.c b/drivers/staging/tidspbridge/core/tiomap_io.c index f53ed98d18c1..28364672c7f8 100644 --- a/drivers/staging/tidspbridge/core/tiomap_io.c +++ b/drivers/staging/tidspbridge/core/tiomap_io.c @@ -176,6 +176,7 @@ int write_dsp_data(struct bridge_dev_context *dev_context, struct cfg_hostres *resources = dev_context->resources; int status = 0; u32 base1, base2, base3; + base1 = OMAP_DSP_MEM1_SIZE; base2 = OMAP_DSP_MEM2_BASE - OMAP_DSP_MEM1_BASE; base3 = OMAP_DSP_MEM3_BASE - OMAP_DSP_MEM1_BASE; @@ -229,6 +230,7 @@ int write_ext_dsp_data(struct bridge_dev_context *dev_context, u32 ul_shm_offset_virt = 0; struct cfg_hostres *host_res = dev_context->resources; bool trace_load = false; + temp_byte1 = 0x0; temp_byte2 = 0x0; diff --git a/drivers/staging/tidspbridge/core/wdt.c b/drivers/staging/tidspbridge/core/wdt.c index c7ee467f0f12..b19f887dfd88 100644 --- a/drivers/staging/tidspbridge/core/wdt.c +++ b/drivers/staging/tidspbridge/core/wdt.c @@ -33,6 +33,7 @@ static struct dsp_wdt_setting dsp_wdt; void dsp_wdt_dpc(unsigned long data) { struct deh_mgr *deh_mgr; + dev_get_deh_mgr(dev_get_first(), &deh_mgr); if (deh_mgr) bridge_deh_notify(deh_mgr, DSP_WDTOVERFLOW, 0); diff --git a/drivers/staging/tidspbridge/dynload/cload.c b/drivers/staging/tidspbridge/dynload/cload.c index 9d54744805b8..83f2106ff8a7 100644 --- a/drivers/staging/tidspbridge/dynload/cload.c +++ b/drivers/staging/tidspbridge/dynload/cload.c @@ -160,6 +160,7 @@ int dynamic_load_module(struct dynamic_loader_stream *module, if (!dl_state.dload_errcount) { /* fix up entry point address */ unsigned sref = dl_state.dfile_hdr.df_entry_secn - 1; + if (sref < dl_state.allocated_secn_count) dl_state.dfile_hdr.df_entrypt += dl_state.ldr_sections[sref].run_addr; @@ -269,6 +270,7 @@ dynamic_open_module(struct dynamic_loader_stream *module, if (!dl_state.dload_errcount) { /* fix up entry point address */ unsigned sref = dl_state.dfile_hdr.df_entry_secn - 1; + if (sref < dl_state.allocated_secn_count) dl_state.dfile_hdr.df_entrypt += dl_state.ldr_sections[sref].run_addr; @@ -476,6 +478,7 @@ static void allocate_sections(struct dload_state *dlthis) struct doff_scnhdr_t *shp; struct ldr_section_info *asecs; struct my_handle *hndl; + nsecs = dlthis->dfile_hdr.df_no_scns; if (!nsecs) return; @@ -1089,6 +1092,7 @@ static int relocate_packet(struct dload_state *dlthis, unsigned rinbuf; int siz; struct reloc_record_t *rp, rrec[MY_RELOC_BUF_SIZ]; + rp = rrec; rinbuf = rnum > MY_RELOC_BUF_SIZ ? MY_RELOC_BUF_SIZ : rnum; siz = rinbuf * sizeof(struct reloc_record_t); @@ -1502,6 +1506,7 @@ static void swap_words(void *data, unsigned siz, unsigned bitmap) sp = (u16 *) data; do { register u16 tmp; + tmp = *sp; *sp++ = SWAP16BY8(tmp); } while ((i -= 1) > 0); @@ -1543,6 +1548,7 @@ static char *copy_tgt_strings(void *dstp, void *srcp, unsigned charcount) register tgt_au_t *src = (tgt_au_t *) srcp; register tgt_au_t *dst = (tgt_au_t *) dstp; register int cnt = charcount; + do { #if TARGET_AU_BITS <= BITS_PER_AU /* byte-swapping issues may exist for strings on target */ @@ -1598,6 +1604,7 @@ static void init_module_handle(struct dload_state *dlthis) struct modules_header mhdr; struct ldr_section_info dllview_info; struct dynload_symbol *debug_mirror_sym; + hndl = dlthis->myhandle; if (!hndl) return; /* must be errors detected, so forget it */ diff --git a/drivers/staging/tidspbridge/dynload/reloc.c b/drivers/staging/tidspbridge/dynload/reloc.c index 463abdb6392f..bb422b693290 100644 --- a/drivers/staging/tidspbridge/dynload/reloc.c +++ b/drivers/staging/tidspbridge/dynload/reloc.c @@ -135,6 +135,7 @@ int dload_repack(struct dload_state *dlthis, rvalue val, tgt_au_t *data, */ if (sgn) { unsigned tmp = (val >> fieldsz) + (sgn & 0x1); + if (tmp > ovf_limit[sgn - 1]) return 1; } @@ -403,6 +404,7 @@ void dload_relocate(struct dload_state *dlthis, tgt_au_t *data, case RACT_C6BASE: if (dlthis->bss_run_base == 0) { struct dynload_symbol *symp; + symp = dlthis->mysym->find_matching_symbol (dlthis->mysym, bsssymbol); /* lookup value of global BSS base */ diff --git a/drivers/staging/tidspbridge/pmgr/chnl.c b/drivers/staging/tidspbridge/pmgr/chnl.c index 4bd8686f2355..e03c32679aa5 100644 --- a/drivers/staging/tidspbridge/pmgr/chnl.c +++ b/drivers/staging/tidspbridge/pmgr/chnl.c @@ -75,6 +75,7 @@ int chnl_create(struct chnl_mgr **channel_mgr, if (!status) { struct bridge_drv_interface *intf_fxns; + dev_get_intf_fxns(hdev_obj, &intf_fxns); /* Let Bridge channel module finish the create: */ status = (*intf_fxns->chnl_create) (&hchnl_mgr, hdev_obj, diff --git a/drivers/staging/tidspbridge/rmgr/dbdcd.c b/drivers/staging/tidspbridge/rmgr/dbdcd.c index 2ae48c9a9362..c91d1d7d0884 100644 --- a/drivers/staging/tidspbridge/rmgr/dbdcd.c +++ b/drivers/staging/tidspbridge/rmgr/dbdcd.c @@ -489,6 +489,7 @@ int dcd_get_object_def(struct dcd_manager *hdcd_mgr, strncpy(sz_sect_name, ".", 2); do { char *uuid = strsep(&tmp, "-"); + if (!uuid) break; len -= strlen(uuid); diff --git a/drivers/staging/tidspbridge/rmgr/drv_interface.c b/drivers/staging/tidspbridge/rmgr/drv_interface.c index 74d31dabe832..e3918d2efa17 100644 --- a/drivers/staging/tidspbridge/rmgr/drv_interface.c +++ b/drivers/staging/tidspbridge/rmgr/drv_interface.c @@ -351,6 +351,7 @@ static void bridge_recover(struct work_struct *work) { struct dev_object *dev; struct cfg_devnode *dev_node; + if (atomic_read(&bridge_cref)) { reinit_completion(&bridge_comp); while (!wait_for_completion_timeout(&bridge_comp, @@ -638,6 +639,7 @@ int drv_remove_all_resources(void *process_ctxt) { int status = 0; struct process_context *ctxt = (struct process_context *)process_ctxt; + drv_remove_all_strm_res_elements(ctxt); drv_remove_all_node_res_elements(ctxt); drv_remove_all_dmm_res_elements(ctxt); diff --git a/drivers/staging/tidspbridge/rmgr/nldr.c b/drivers/staging/tidspbridge/rmgr/nldr.c index 5ac507ccd19d..900585ab059a 100644 --- a/drivers/staging/tidspbridge/rmgr/nldr.c +++ b/drivers/staging/tidspbridge/rmgr/nldr.c @@ -1542,6 +1542,7 @@ static int remote_alloc(void **ref, u16 mem_sect, u32 size, struct rmm_addr *rmm_addr_obj = (struct rmm_addr *)dsp_address; bool mem_load_req = false; int status = -ENOMEM; /* Set to fail */ + nldr_obj = hnode->nldr_obj; rmm = nldr_obj->rmm; /* Convert size to DSP words */ diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c index 9d3044a384ee..133f2dbc3762 100644 --- a/drivers/staging/tidspbridge/rmgr/node.c +++ b/drivers/staging/tidspbridge/rmgr/node.c @@ -273,6 +273,7 @@ static struct node_ldr_fxns nldr_fxns = { enum node_state node_get_state(void *hnode) { struct node_object *pnode = (struct node_object *)hnode; + if (!pnode) return -1; return pnode->node_state; @@ -2365,6 +2366,7 @@ static void delete_node(struct node_object *hnode, (struct proc_object *)hnode->processor; #endif int status; + if (!hnode) goto func_end; hnode_mgr = hnode->node_mgr; diff --git a/drivers/staging/tidspbridge/rmgr/proc.c b/drivers/staging/tidspbridge/rmgr/proc.c index cd5235a4f77c..23e5146989b1 100644 --- a/drivers/staging/tidspbridge/rmgr/proc.c +++ b/drivers/staging/tidspbridge/rmgr/proc.c @@ -200,6 +200,7 @@ static struct dmm_map_object *find_containing_mapping( u32 mpu_addr, u32 size) { struct dmm_map_object *map_obj; + pr_debug("%s: looking for mpu_addr 0x%x size 0x%x\n", __func__, mpu_addr, size); @@ -985,6 +986,7 @@ int proc_get_state(void *hprocessor, int proc_get_trace(void *hprocessor, u8 *pbuf, u32 max_size) { int status; + status = -ENOSYS; return status; } @@ -1737,6 +1739,7 @@ static int proc_monitor(struct proc_object *proc_obj) static s32 get_envp_count(char **envp) { s32 ret = 0; + if (envp) { while (*envp++) ret++; -- cgit From 9088f4af77c67b9a861d734bfd2b3e5f99b90f72 Mon Sep 17 00:00:00 2001 From: Benedict Boerger Date: Thu, 19 Jun 2014 20:18:51 +0200 Subject: staging: sep: Fix checkpatch.pl warnings Fix checkpatch.pl warnings: Missing blank line after Declarations Signed-off-by: Benedict Boerger Signed-off-by: Greg Kroah-Hartman --- drivers/staging/sep/sep_crypto.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/sep/sep_crypto.c b/drivers/staging/sep/sep_crypto.c index 415f8ec5276b..415322867581 100644 --- a/drivers/staging/sep/sep_crypto.c +++ b/drivers/staging/sep/sep_crypto.c @@ -244,6 +244,7 @@ static void sep_copy_sg( u32 count = 0; struct scatterlist *sg_src_tmp = sg_src; struct scatterlist *sg_dst_tmp = sg_dst; + in_offset = 0; out_offset = 0; @@ -1721,6 +1722,7 @@ static u32 hash_init_post_op(struct sep_device *sep) struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); + dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash init post op\n"); @@ -1756,6 +1758,7 @@ static u32 hash_update_post_op(struct sep_device *sep) struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); + dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash update post op\n"); @@ -1828,6 +1831,7 @@ static u32 hash_final_post_op(struct sep_device *sep) struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); + dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash final post op\n"); @@ -1876,6 +1880,7 @@ static u32 hash_digest_post_op(struct sep_device *sep) struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); + dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash digest post op\n"); @@ -2696,6 +2701,7 @@ static int sep_sha1_final(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha1 final\n"); ta_ctx->sep_used = sep_dev; @@ -2727,6 +2733,7 @@ static int sep_sha1_digest(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha1 digest\n"); /* Clear out task context */ @@ -2761,6 +2768,7 @@ static int sep_sha1_finup(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha1 finup\n"); ta_ctx->sep_used = sep_dev; @@ -2792,6 +2800,7 @@ static int sep_md5_init(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing md5 init\n"); /* Clear out task context */ @@ -2826,6 +2835,7 @@ static int sep_md5_update(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing md5 update\n"); ta_ctx->sep_used = sep_dev; @@ -2857,6 +2867,7 @@ static int sep_md5_final(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing md5 final\n"); ta_ctx->sep_used = sep_dev; @@ -2955,6 +2966,7 @@ static int sep_sha224_init(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha224 init\n"); /* Clear out task context */ @@ -2989,6 +3001,7 @@ static int sep_sha224_update(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha224 update\n"); ta_ctx->sep_used = sep_dev; @@ -3020,6 +3033,7 @@ static int sep_sha224_final(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha224 final\n"); ta_ctx->sep_used = sep_dev; @@ -3118,6 +3132,7 @@ static int sep_sha256_init(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha256 init\n"); /* Clear out task context */ @@ -3152,6 +3167,7 @@ static int sep_sha256_update(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha256 update\n"); ta_ctx->sep_used = sep_dev; @@ -3183,6 +3199,7 @@ static int sep_sha256_final(struct ahash_request *req) int error; int error1; struct this_task_ctx *ta_ctx = ahash_request_ctx(req); + pr_debug("sep - doing sha256 final\n"); ta_ctx->sep_used = sep_dev; -- cgit From 7a2d2e10232b54a65cb90cc776373e1a959cdc8a Mon Sep 17 00:00:00 2001 From: Paul Bolle Date: Wed, 18 Jun 2014 17:05:47 +0200 Subject: staging: Remove useless "default N" lines Two Kconfig entries default to (uppercase) "N". It was clearly intended to use "default n". But since (lowercase) "n" is the default anyway, these lines might as well be removed. Reported-by: Martin Walch Signed-off-by: Paul Bolle Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/Kconfig | 1 - drivers/staging/rtl8821ae/Kconfig | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/Kconfig b/drivers/staging/rtl8192ee/Kconfig index beb07ac24e80..8d77f28399d3 100644 --- a/drivers/staging/rtl8192ee/Kconfig +++ b/drivers/staging/rtl8192ee/Kconfig @@ -7,7 +7,6 @@ config R8192EE select EEPROM_93CX6 select CRYPTO select FW_LOADER - default N ---help--- This is the driver for Realtek RTL8192EE 802.11 PCIe wireless network adapters. diff --git a/drivers/staging/rtl8821ae/Kconfig b/drivers/staging/rtl8821ae/Kconfig index abccc9dabd65..1a89b25647ed 100644 --- a/drivers/staging/rtl8821ae/Kconfig +++ b/drivers/staging/rtl8821ae/Kconfig @@ -6,6 +6,5 @@ config R8821AE select WEXT_PRIV select EEPROM_93CX6 select CRYPTO - default N ---help--- If built as a module, it will be called r8821ae.ko. -- cgit From 260cdf5d409e66d5c2bf1ba44876fff571f931cd Mon Sep 17 00:00:00 2001 From: Andrey Skvortsov Date: Thu, 19 Jun 2014 11:24:11 +0400 Subject: staging: lustre: obdclass: linux-sysctl.c: fix pointer coding style issue Signed-off-by: Andrey Skvortsov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index c1ef0c9b5a1a..b87ca101a2a2 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -196,7 +196,7 @@ int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) } if (write) { rc = lprocfs_write_frac_helper(buffer, *lenp, - (unsigned int*)table->data, + (unsigned int *)table->data, 1 << (20 - PAGE_CACHE_SHIFT)); /* Don't allow them to let dirty pages exceed 90% of system * memory and set a hard minimum of 4MB. */ @@ -214,7 +214,7 @@ int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) int len; len = lprocfs_read_frac_helper(buf, sizeof(buf), - *(unsigned int*)table->data, + *(unsigned int *)table->data, 1 << (20 - PAGE_CACHE_SHIFT)); if (len > *lenp) len = *lenp; @@ -238,14 +238,14 @@ int LL_PROC_PROTO(proc_alloc_fail_rate) } if (write) { rc = lprocfs_write_frac_helper(buffer, *lenp, - (unsigned int*)table->data, + (unsigned int *)table->data, OBD_ALLOC_FAIL_MULT); } else { char buf[21]; int len; len = lprocfs_read_frac_helper(buf, 21, - *(unsigned int*)table->data, + *(unsigned int *)table->data, OBD_ALLOC_FAIL_MULT); if (len > *lenp) len = *lenp; -- cgit From 87822e41af8fd22676b89eee2455ed259987211b Mon Sep 17 00:00:00 2001 From: Andrey Skvortsov Date: Thu, 19 Jun 2014 11:24:12 +0400 Subject: staging: lustre: obdclass: linux-sysctl.c: fix checkpatch warnings about included headers Signed-off-by: Andrey Skvortsov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index b87ca101a2a2..4dcdfc247c73 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -42,8 +42,8 @@ #include #include #include -#include -#include +#include +#include #include #define DEBUG_SUBSYSTEM S_CLASS -- cgit From e4f3771f78cfa3aabad15e1b2be713ab6933288a Mon Sep 17 00:00:00 2001 From: Andrey Skvortsov Date: Thu, 19 Jun 2014 11:24:13 +0400 Subject: staging: lustre: obdclass: linux-sysctl.c: fix unnecessary spaces coding style issue Signed-off-by: Andrey Skvortsov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 4dcdfc247c73..140b5706d0fa 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -408,18 +408,18 @@ static ctl_table_t parent_table[] = { }; #endif -void obd_sysctl_init (void) +void obd_sysctl_init(void) { #ifdef CONFIG_SYSCTL - if ( !obd_table_header ) + if (!obd_table_header) obd_table_header = register_sysctl_table(parent_table); #endif } -void obd_sysctl_clean (void) +void obd_sysctl_clean(void) { #ifdef CONFIG_SYSCTL - if ( obd_table_header ) + if (obd_table_header) unregister_sysctl_table(obd_table_header); obd_table_header = NULL; #endif -- cgit From d1acbe57c71720a8ca03b378cfe53e43815b05ac Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 19 Jun 2014 17:29:01 +1000 Subject: staging : lustre : lustre : fid : lproc_fid.c: fixed warning fixed warning for line over 80 characters by moving the initilation onto a diff line. Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fid/lproc_fid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index 6f5674d1aa72..20078df5f377 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -98,9 +98,10 @@ static ssize_t lprocfs_fid_space_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct lu_client_seq *seq = ((struct seq_file *)file->private_data)->private; + struct lu_client_seq *seq; int rc; + seq = ((struct seq_file *)file->private_data)->private; LASSERT(seq != NULL); mutex_lock(&seq->lcs_mutex); @@ -135,10 +136,11 @@ static ssize_t lprocfs_fid_width_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct lu_client_seq *seq = ((struct seq_file *)file->private_data)->private; + struct lu_client_seq *seq; __u64 max; int rc, val; + seq = ((struct seq_file *)file->private_data)->private; LASSERT(seq != NULL); rc = lprocfs_write_helper(buffer, count, &val); -- cgit From bf050e55a3510eed6faf68dc277b0ef62ed805b1 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Fri, 20 Jun 2014 01:35:48 +1000 Subject: staging: lustre: ldlm: ldlm_resource.c removed unecessary braces - this fixed the "WARNING: braces {} are not necessary for single statement blocks" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index c55d72f79b26..e5171da18cfa 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -854,9 +854,8 @@ void ldlm_namespace_free_prior(struct ldlm_namespace *ns, { int rc; - if (!ns) { + if (!ns) return; - } spin_lock(&ns->ns_lock); ns->ns_stopping = 1; @@ -888,9 +887,8 @@ void ldlm_namespace_free_prior(struct ldlm_namespace *ns, */ void ldlm_namespace_free_post(struct ldlm_namespace *ns) { - if (!ns) { + if (!ns) return; - } /* Make sure that nobody can find this ns in its list. */ ldlm_namespace_unregister(ns, ns->ns_client); -- cgit From ae59720b3af7928bdfb6bb7bfb47315fea2f57e8 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Fri, 20 Jun 2014 01:02:08 +1000 Subject: staging: lustre: ldlm: ldlm_resource.c replace obsolete function with kstrtoul() - this change fixes the warning "WARNING: simple_strtoul is obsolete, use kstrtoul instead" - removed the unused var 'end' as this is no longer required for kstrtoul() Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index e5171da18cfa..25ce0e5f9892 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -194,9 +194,10 @@ static ssize_t lprocfs_lru_size_seq_write(struct file *file, const char *buffer, size_t count, loff_t *off) { struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private; - char dummy[MAX_STRING_SIZE + 1], *end; + char dummy[MAX_STRING_SIZE + 1]; unsigned long tmp; int lru_resize; + int err; dummy[MAX_STRING_SIZE] = '\0'; if (copy_from_user(dummy, buffer, MAX_STRING_SIZE)) @@ -228,8 +229,8 @@ static ssize_t lprocfs_lru_size_seq_write(struct file *file, const char *buffer, return count; } - tmp = simple_strtoul(dummy, &end, 0); - if (dummy == end) { + err = kstrtoul(dummy, 10, &tmp); + if (err != 0) { CERROR("invalid value written\n"); return -EINVAL; } -- cgit From 48f46e74dc7d1770a69b1dc9ef9a54ab7c3aedc0 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 19 Jun 2014 21:50:41 +1000 Subject: staging: lustre: lustre: fld: lproc_fld.c fixed warning fixed warning for line over 80 characters by moving the struct init onto a diff line. Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fld/lproc_fld.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fld/lproc_fld.c b/drivers/staging/lustre/lustre/fld/lproc_fld.c index 530adde46963..8b366356f77f 100644 --- a/drivers/staging/lustre/lustre/fld/lproc_fld.c +++ b/drivers/staging/lustre/lustre/fld/lproc_fld.c @@ -91,10 +91,11 @@ static ssize_t fld_proc_hash_seq_write(struct file *file, const char *buffer, size_t count, loff_t *off) { - struct lu_client_fld *fld = ((struct seq_file *)file->private_data)->private; + struct lu_client_fld *fld; struct lu_fld_hash *hash = NULL; int i; + fld = ((struct seq_file *)file->private_data)->private; LASSERT(fld != NULL); for (i = 0; fld_hash[i].fh_name != NULL; i++) { -- cgit From 13d6b73eaee502497be5c22f1573e92d829e82c4 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 19 Jun 2014 21:50:42 +1000 Subject: staging: lustre: lustre: fld: lproc_fld.c fixed warning fixed warning "WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fld/fld_request.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 1f8abba31428..211430d541c1 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -324,7 +324,6 @@ void fld_client_proc_fini(struct lu_client_fld *fld) return; } #endif - EXPORT_SYMBOL(fld_client_proc_fini); static inline int hash_is_sane(int hash) -- cgit From b7cfd6d4686a7b85aa3db2c40d53087fb1604969 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Fri, 20 Jun 2014 02:01:47 +1000 Subject: staging: lustre: lustre: ldlm: ldlm_lib.c - removed unnecessary braces - this change fixes "WARNING: braces {} are not necessary for single statement blocks" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index 8bb59155968f..5d69af5ad87c 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -74,9 +74,8 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid, if (create) { OBD_ALLOC(imp_conn, sizeof(*imp_conn)); - if (!imp_conn) { + if (!imp_conn) GOTO(out_put, rc = -ENOMEM); - } } spin_lock(&imp->imp_lock); @@ -662,9 +661,8 @@ void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id) struct ptlrpc_reply_state *rs; struct obd_export *exp; - if (req->rq_no_reply) { + if (req->rq_no_reply) return; - } svcpt = req->rq_rqbd->rqbd_svcpt; rs = req->rq_reply_state; -- cgit From 05dca37303c10c7fa5a58138e6f0c8fb6b5f4e17 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Fri, 20 Jun 2014 02:01:48 +1000 Subject: staging: lustre: ldlm: ldlm_lib.c removed unecessary space after function name - this fixes "WARNING: space prohibited between function name and open parenthesis '(" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index 5d69af5ad87c..d8ad808fc8dc 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -510,7 +510,7 @@ int client_connect_import(const struct lu_env *env, rc = ptlrpc_connect_import(imp); if (rc != 0) { - LASSERT (imp->imp_state == LUSTRE_IMP_DISCON); + LASSERT(imp->imp_state == LUSTRE_IMP_DISCON); GOTO(out_ldlm, rc); } LASSERT(*exp != NULL && (*exp)->exp_connection); @@ -668,25 +668,25 @@ void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id) rs = req->rq_reply_state; if (rs == NULL || !rs->rs_difficult) { /* no notifiers */ - target_send_reply_msg (req, rc, fail_id); + target_send_reply_msg(req, rc, fail_id); return; } /* must be an export if locks saved */ - LASSERT (req->rq_export != NULL); + LASSERT(req->rq_export != NULL); /* req/reply consistent */ LASSERT(rs->rs_svcpt == svcpt); /* "fresh" reply */ - LASSERT (!rs->rs_scheduled); - LASSERT (!rs->rs_scheduled_ever); - LASSERT (!rs->rs_handled); - LASSERT (!rs->rs_on_net); - LASSERT (rs->rs_export == NULL); - LASSERT (list_empty(&rs->rs_obd_list)); - LASSERT (list_empty(&rs->rs_exp_list)); - - exp = class_export_get (req->rq_export); + LASSERT(!rs->rs_scheduled); + LASSERT(!rs->rs_scheduled_ever); + LASSERT(!rs->rs_handled); + LASSERT(!rs->rs_on_net); + LASSERT(rs->rs_export == NULL); + LASSERT(list_empty(&rs->rs_obd_list)); + LASSERT(list_empty(&rs->rs_exp_list)); + + exp = class_export_get(req->rq_export); /* disable reply scheduling while I'm setting up */ rs->rs_scheduled = 1; -- cgit From 85da528df72cde1f25fe374c515dace9f0693e05 Mon Sep 17 00:00:00 2001 From: Stephan Gabert Date: Mon, 16 Jun 2014 16:50:49 +0200 Subject: staging/wlags49_h2: checkpatch: including instead of As warned by checkpatch.pl, one should use #include instead of #include and #include instead of #include . Signed-off-by: Stephan Gabert Signed-off-by: Nicolas Pfeiffer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlags49_h2/wl_cs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c index 3f7cf41a0e34..5c6e18c4ff98 100644 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ b/drivers/staging/wlags49_h2/wl_cs.c @@ -73,8 +73,8 @@ #include #include #include -#include -#include +#include +#include #include #include -- cgit From d141304842bc182270627b5a42e995a8d11af4aa Mon Sep 17 00:00:00 2001 From: Stephan Gabert Date: Mon, 16 Jun 2014 16:50:50 +0200 Subject: staging/wlags49_h2: checkpatch: added spaces around equal sign Hereby the checkpatch message ERROR: spaces required around that '=' (ctx:VxV) gets resolved and the neighboring equal signs are positioned in the same column. Signed-off-by: Stephan Gabert Signed-off-by: Nicolas Pfeiffer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlags49_h2/wl_cs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c index 5c6e18c4ff98..c79f1eddf395 100644 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ b/drivers/staging/wlags49_h2/wl_cs.c @@ -131,11 +131,11 @@ static int wl_adapter_attach(struct pcmcia_device *link) return -ENOMEM; } - link->resource[0]->end = HCF_NUM_IO_PORTS; - link->resource[0]->flags= IO_DATA_PATH_WIDTH_16; - link->config_flags |= CONF_ENABLE_IRQ; - link->config_index = 5; - link->config_regs = PRESENT_OPTION; + link->resource[0]->end = HCF_NUM_IO_PORTS; + link->resource[0]->flags = IO_DATA_PATH_WIDTH_16; + link->config_flags |= CONF_ENABLE_IRQ; + link->config_index = 5; + link->config_regs = PRESENT_OPTION; link->priv = dev; lp = wl_priv(dev); -- cgit From c03068852da3705d1953bcf75bfbfe322c40876d Mon Sep 17 00:00:00 2001 From: Stephan Gabert Date: Mon, 16 Jun 2014 16:50:53 +0200 Subject: staging/wlags49_h2: checkpatch: line over 80 characters Signed-off-by: Stephan Gabert Signed-off-by: Nicolas Pfeiffer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlags49_h2/wl_cs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c index c79f1eddf395..efbbefa1abc4 100644 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ b/drivers/staging/wlags49_h2/wl_cs.c @@ -340,8 +340,9 @@ static const struct pcmcia_device_id wl_adapter_ids[] = { 0x33103a9b, 0xe175b0dd), #else PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0004), - PCMCIA_DEVICE_PROD_ID12("Linksys", "WCF54G_Wireless-G_CompactFlash_Card", - 0x0733cc81, 0x98a599e1), + PCMCIA_DEVICE_PROD_ID12("Linksys", + "WCF54G_Wireless-G_CompactFlash_Card", 0x0733cc81, + 0x98a599e1), #endif /* (HCF_TYPE) & HCF_TYPE_HII5 */ PCMCIA_DEVICE_NULL, }; -- cgit From 2cf1ba40c6efb8654fa650efdec4d0773e1c8492 Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:13 +0200 Subject: wlan-ng/prism2mgmt:checkpatch: Fix long lines This patch fixes all warnings of checkpatch about lines over 80 characters. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de CC: Himangi Saraogi CC: Vitaly Osipov CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2mgmt.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c index d110b362c3bd..36a3e1a946d1 100644 --- a/drivers/staging/wlan-ng/prism2mgmt.c +++ b/drivers/staging/wlan-ng/prism2mgmt.c @@ -156,7 +156,8 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) HFA384x_ROAMMODE_HOSTSCAN_HOSTROAM); if (result) { netdev_err(wlandev->netdev, - "setconfig(ROAMINGMODE) failed. result=%d\n", result); + "setconfig(ROAMINGMODE) failed. result=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; goto exit; @@ -273,7 +274,8 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) result = hfa384x_drvr_enable(hw, 0); if (result) { netdev_err(wlandev->netdev, - "drvr_enable(0) failed. result=%d\n", result); + "drvr_enable(0) failed. result=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; goto exit; @@ -293,7 +295,8 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) sizeof(hfa384x_HostScanRequest_data_t)); if (result) { netdev_err(wlandev->netdev, - "setconfig(SCANREQUEST) failed. result=%d\n", result); + "setconfig(SCANREQUEST) failed. result=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; goto exit; @@ -315,7 +318,8 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) result = hfa384x_drvr_disable(hw, 0); if (result) { netdev_err(wlandev->netdev, - "drvr_disable(0) failed. result=%d\n", result); + "drvr_disable(0) failed. result=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; goto exit; @@ -654,7 +658,8 @@ int prism2mgmt_start(wlandevice_t *wlandev, void *msgp) result = hfa384x_drvr_setconfig16(hw, HFA384x_RID_TXRATECNTL, word); if (result) { - netdev_err(wlandev->netdev, "Failed to set txrates=%d.\n", word); + netdev_err(wlandev->netdev, "Failed to set txrates=%d.\n", + word); goto failed; } -- cgit From 17b375461672dc3cc4d495d838a9c93e6c8c9ed3 Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:14 +0200 Subject: wlan-ng/prism2mgmt:checkpatch: Fix string split This patch fixes all warnings of checkpatch about string splitting. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de CC: Himangi Saraogi CC: Vitaly Osipov CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Reviewed-by: Josh Triplett Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2mgmt.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c index 36a3e1a946d1..f90f7da41d68 100644 --- a/drivers/staging/wlan-ng/prism2mgmt.c +++ b/drivers/staging/wlan-ng/prism2mgmt.c @@ -178,8 +178,7 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) word); if (result) { netdev_warn(wlandev->netdev, - "Passive scan not supported with " - "current firmware. (<1.5.1)\n"); + "Passive scan not supported with current firmware. (<1.5.1)\n"); } } @@ -381,8 +380,7 @@ int prism2mgmt_scan_results(wlandevice_t *wlandev, void *msgp) if (!hw->scanresults) { netdev_err(wlandev->netdev, - "dot11req_scan_results can only be used after " - "a successful dot11req_scan.\n"); + "dot11req_scan_results can only be used after a successful dot11req_scan.\n"); result = 2; req->resultcode.data = P80211ENUM_resultcode_invalid_parameters; goto exit; @@ -733,8 +731,8 @@ int prism2mgmt_readpda(wlandevice_t *wlandev, void *msgp) HFA384x_PDA_LEN_MAX); if (result) { netdev_err(wlandev->netdev, - "hfa384x_drvr_readpda() failed, " - "result=%d\n", result); + "hfa384x_drvr_readpda() failed, result=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; @@ -782,8 +780,7 @@ int prism2mgmt_ramdl_state(wlandevice_t *wlandev, void *msgp) if (wlandev->msdstate != WLAN_MSD_FWLOAD) { netdev_err(wlandev->netdev, - "ramdl_state(): may only be called " - "in the fwload state.\n"); + "ramdl_state(): may only be called in the fwload state.\n"); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; msg->resultcode.status = P80211ENUM_msgitem_status_data_ok; @@ -841,8 +838,7 @@ int prism2mgmt_ramdl_write(wlandevice_t *wlandev, void *msgp) if (wlandev->msdstate != WLAN_MSD_FWLOAD) { netdev_err(wlandev->netdev, - "ramdl_write(): may only be called " - "in the fwload state.\n"); + "ramdl_write(): may only be called in the fwload state.\n"); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; msg->resultcode.status = P80211ENUM_msgitem_status_data_ok; @@ -901,8 +897,7 @@ int prism2mgmt_flashdl_state(wlandevice_t *wlandev, void *msgp) if (wlandev->msdstate != WLAN_MSD_FWLOAD) { netdev_err(wlandev->netdev, - "flashdl_state(): may only be called " - "in the fwload state.\n"); + "flashdl_state(): may only be called in the fwload state.\n"); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; msg->resultcode.status = P80211ENUM_msgitem_status_data_ok; @@ -936,8 +931,8 @@ int prism2mgmt_flashdl_state(wlandevice_t *wlandev, void *msgp) result = prism2sta_ifstate(wlandev, P80211ENUM_ifstate_fwload); if (result != P80211ENUM_resultcode_success) { netdev_err(wlandev->netdev, - "prism2sta_ifstate(fwload) failed," - "P80211ENUM_resultcode=%d\n", result); + "prism2sta_ifstate(fwload) failed, P80211ENUM_resultcode=%d\n", + result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; result = -1; @@ -975,8 +970,7 @@ int prism2mgmt_flashdl_write(wlandevice_t *wlandev, void *msgp) if (wlandev->msdstate != WLAN_MSD_FWLOAD) { netdev_err(wlandev->netdev, - "flashdl_write(): may only be called " - "in the fwload state.\n"); + "flashdl_write(): may only be called in the fwload state.\n"); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; msg->resultcode.status = P80211ENUM_msgitem_status_data_ok; -- cgit From 5d9c8d51c8d65dc050917b076ecb60bf99296992 Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:15 +0200 Subject: wlan-ng/prism2mgmt:checkpatch: Insert blank line This patch inserts a blank line after a declaration to avoid checkpatch warning. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de Meh-by: Josh Triplett CC: Himangi Saraogi CC: Vitaly Osipov CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2mgmt.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c index f90f7da41d68..e6a82d3303c1 100644 --- a/drivers/staging/wlan-ng/prism2mgmt.c +++ b/drivers/staging/wlan-ng/prism2mgmt.c @@ -190,6 +190,7 @@ int prism2mgmt_scan(wlandevice_t *wlandev, void *msgp) word = 0; for (i = 0; i < msg->channellist.data.len; i++) { u8 channel = msg->channellist.data.data[i]; + if (channel > 14) continue; /* channel 1 is BIT 0 ... channel 14 is BIT 13 */ -- cgit From 5a69d9212d0cd10331d79c8d7c4df49a8a58baa7 Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:16 +0200 Subject: wlan-ng/prism2mib:checkpatch: Fix string split This patch fixes a warning of checkpatch about string splitting. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de Reviewed-by: Josh Triplett CC: Vitaly Osipov CC: Himangi Saraogi CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2mib.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2mib.c b/drivers/staging/wlan-ng/prism2mib.c index 0fb42dfca2a4..bdd3b4c442d2 100644 --- a/drivers/staging/wlan-ng/prism2mib.c +++ b/drivers/staging/wlan-ng/prism2mib.c @@ -672,8 +672,8 @@ static int prism2mib_fragmentationthreshold(struct mibrec *mib, if (!isget) if ((*uint32) % 2) { - netdev_warn(wlandev->netdev, "Attempt to set odd number " - "FragmentationThreshold\n"); + netdev_warn(wlandev->netdev, + "Attempt to set odd number FragmentationThreshold\n"); msg->resultcode.data = P80211ENUM_resultcode_not_supported; return 0; -- cgit From 392cdc976872c2d0c23e729d2bfe871920a8fbec Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:19 +0200 Subject: wlan-ng/prism2sta:checkpatch: Fix string split This patch fixes a warning of checkpatch about string splitting. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de CC: Tugce Sirin Reviewed-by: Josh Triplett CC: Vitaly Osipov CC: Neil Armstrong CC: Paul Gortmaker CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2sta.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c index 278b6a1ef31f..54fa468cae6b 100644 --- a/drivers/staging/wlan-ng/prism2sta.c +++ b/drivers/staging/wlan-ng/prism2sta.c @@ -467,8 +467,7 @@ u32 prism2sta_ifstate(wlandevice_t *wlandev, u32 ifstate) break; case WLAN_MSD_RUNNING: netdev_warn(wlandev->netdev, - "Cannot enter fwload state from enable state," - "you must disable first.\n"); + "Cannot enter fwload state from enable state, you must disable first.\n"); result = P80211ENUM_resultcode_invalid_parameters; break; case WLAN_MSD_HWFAIL: -- cgit From f9d01751e7878c23a71f99bffd1688b9da72edf8 Mon Sep 17 00:00:00 2001 From: Johannes Stadlinger Date: Thu, 19 Jun 2014 21:20:20 +0200 Subject: wlan-ng/prism2sta:checkpatch: Insert blank lines This patch inserts blank lines after declarations to avoid checkpatch warnings. After our fixes in 'wlan-ng/prism2sta' there is still a checkpatch warning about prefering 'ether_addr_copy' instead of 'memcpy' remaining. Signed-off-by: Johannes Stadlinger Signed-off-by: Maximilian Eschenbacher CC: linux-kernel@i4.cs.fau.de Reviewed-by: Josh Triplett CC: Tugce Sirin CC: Himangi Saraogi CC: Paul Gortmaker CC: Vitaly Osipov CC: Neil Armstrong CC: devel@driverdev.osuosl.org CC: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2sta.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c index 54fa468cae6b..209e4db6979a 100644 --- a/drivers/staging/wlan-ng/prism2sta.c +++ b/drivers/staging/wlan-ng/prism2sta.c @@ -360,6 +360,7 @@ static int prism2sta_mlmerequest(wlandevice_t *wlandev, struct p80211msg *msg) case DIDmsg_lnxreq_ifstate: { struct p80211msg_lnxreq_ifstate *ifstatemsg; + pr_debug("Received mlme ifstate request\n"); ifstatemsg = (struct p80211msg_lnxreq_ifstate *) msg; result = @@ -1406,6 +1407,7 @@ void prism2sta_processing_defer(struct work_struct *data) */ if (hw->join_ap && --hw->join_retries > 0) { hfa384x_JoinRequest_data_t joinreq; + joinreq = hw->joinreq; /* Send the join request */ hfa384x_drvr_setconfig(hw, -- cgit From 32c3f470ec7e427db69d86a3061101ea4a5c681f Mon Sep 17 00:00:00 2001 From: Pramod Gurav Date: Fri, 13 Jun 2014 11:49:43 +0530 Subject: staging: alarm-dev: Support to Compile as Module Currently this alarm-dev can be compiles only as built in driver. This adds support to compile it as module as well which is in planned activity (See drivers/staging/android/TODO) CC: Brian Swetland Signed-off-by: Pramod Gurav Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/Kconfig b/drivers/staging/android/Kconfig index 99e484f845f2..c359317abadf 100644 --- a/drivers/staging/android/Kconfig +++ b/drivers/staging/android/Kconfig @@ -76,7 +76,7 @@ config ANDROID_LOW_MEMORY_KILLER Registers processes to be killed when memory is low config ANDROID_INTF_ALARM_DEV - bool "Android alarm driver" + tristate "Android alarm driver" depends on RTC_CLASS default n ---help--- -- cgit From 895ae8765726df407264dc661674e4e04eaf8664 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 20 Jun 2014 11:46:14 +0900 Subject: staging: ion: fixup invalid kfree() calls on heap destroy I've noticed that the last commit to ion_system_heap.c ('staging: ion: optimize struct ion_system_heap') has an omission, so an invalid kfree() gets called on ion_system_heap_destroy(). As ION system heap is never destroyed until system shutdown, it may not cause any harm, but should be fixed. I should have caught this before the merge, my bad. Signed-off-by: Heesub Shin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_system_heap.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c index c826b4c63861..6b77c5195b4d 100644 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/ion_system_heap.c @@ -304,7 +304,6 @@ void ion_system_heap_destroy(struct ion_heap *heap) for (i = 0; i < num_orders; i++) ion_page_pool_destroy(sys_heap->pools[i]); - kfree(sys_heap->pools); kfree(sys_heap); } -- cgit From 5c0ed8cdc4544a94fa6d1ea3797fcc6a4bd22010 Mon Sep 17 00:00:00 2001 From: Kristina Martšenko Date: Fri, 20 Jun 2014 17:49:59 +0300 Subject: staging: crystalhd: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't had significant work done on it for a long time. Broadcom has EOLed the hardware and is no longer selling it. There are probably very few people still using it. So remove the driver. Signed-off-by: Kristina Martšenko Cc: Naren Sankar Cc: Jarod Wilson Cc: Scott Davilla Cc: Manu Abraham Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/crystalhd/Kconfig | 6 - drivers/staging/crystalhd/Makefile | 6 - drivers/staging/crystalhd/TODO | 15 - drivers/staging/crystalhd/bc_dts_defs.h | 572 ------- drivers/staging/crystalhd/bc_dts_glob_lnx.h | 300 ---- drivers/staging/crystalhd/bcm_70012_regs.h | 758 --------- drivers/staging/crystalhd/crystalhd.h | 13 - drivers/staging/crystalhd/crystalhd_cmds.c | 1066 ------------ drivers/staging/crystalhd/crystalhd_cmds.h | 92 - drivers/staging/crystalhd/crystalhd_fw_if.h | 370 ---- drivers/staging/crystalhd/crystalhd_hw.c | 2458 --------------------------- drivers/staging/crystalhd/crystalhd_hw.h | 407 ----- drivers/staging/crystalhd/crystalhd_lnx.c | 782 --------- drivers/staging/crystalhd/crystalhd_lnx.h | 93 - drivers/staging/crystalhd/crystalhd_misc.c | 1044 ------------ drivers/staging/crystalhd/crystalhd_misc.h | 232 --- 18 files changed, 8217 deletions(-) delete mode 100644 drivers/staging/crystalhd/Kconfig delete mode 100644 drivers/staging/crystalhd/Makefile delete mode 100644 drivers/staging/crystalhd/TODO delete mode 100644 drivers/staging/crystalhd/bc_dts_defs.h delete mode 100644 drivers/staging/crystalhd/bc_dts_glob_lnx.h delete mode 100644 drivers/staging/crystalhd/bcm_70012_regs.h delete mode 100644 drivers/staging/crystalhd/crystalhd.h delete mode 100644 drivers/staging/crystalhd/crystalhd_cmds.c delete mode 100644 drivers/staging/crystalhd/crystalhd_cmds.h delete mode 100644 drivers/staging/crystalhd/crystalhd_fw_if.h delete mode 100644 drivers/staging/crystalhd/crystalhd_hw.c delete mode 100644 drivers/staging/crystalhd/crystalhd_hw.h delete mode 100644 drivers/staging/crystalhd/crystalhd_lnx.c delete mode 100644 drivers/staging/crystalhd/crystalhd_lnx.h delete mode 100644 drivers/staging/crystalhd/crystalhd_misc.c delete mode 100644 drivers/staging/crystalhd/crystalhd_misc.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 4030a0575172..52d7e8b63347 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -80,8 +80,6 @@ source "drivers/staging/wlags49_h2/Kconfig" source "drivers/staging/wlags49_h25/Kconfig" -source "drivers/staging/crystalhd/Kconfig" - source "drivers/staging/cxt1e1/Kconfig" source "drivers/staging/xgifb/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 93bd37ed5e8e..1b9e10c639e3 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -34,7 +34,6 @@ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ -obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/ diff --git a/drivers/staging/crystalhd/Kconfig b/drivers/staging/crystalhd/Kconfig deleted file mode 100644 index 56b414bca1a1..000000000000 --- a/drivers/staging/crystalhd/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ -config CRYSTALHD - tristate "Broadcom Crystal HD video decoder support" - depends on PCI - default n - help - Support for the Broadcom Crystal HD video decoder chipset diff --git a/drivers/staging/crystalhd/Makefile b/drivers/staging/crystalhd/Makefile deleted file mode 100644 index c31657a9335f..000000000000 --- a/drivers/staging/crystalhd/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -obj-$(CONFIG_CRYSTALHD) += crystalhd.o - -crystalhd-y := crystalhd_cmds.o \ - crystalhd_hw.o \ - crystalhd_lnx.o \ - crystalhd_misc.o diff --git a/drivers/staging/crystalhd/TODO b/drivers/staging/crystalhd/TODO deleted file mode 100644 index daca2d4d2a2f..000000000000 --- a/drivers/staging/crystalhd/TODO +++ /dev/null @@ -1,15 +0,0 @@ -- Testing -- Cleanup return codes -- Cleanup typedefs -- 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. - A somewhat similar device is the DXR2/3 - -Please send patches to: -Greg Kroah-Hartman -Naren Sankar -Jarod Wilson -Scott Davilla -Manu Abraham - diff --git a/drivers/staging/crystalhd/bc_dts_defs.h b/drivers/staging/crystalhd/bc_dts_defs.h deleted file mode 100644 index 647e116e10de..000000000000 --- a/drivers/staging/crystalhd/bc_dts_defs.h +++ /dev/null @@ -1,572 +0,0 @@ -/******************************************************************** - * Copyright(c) 2006-2009 Broadcom Corporation. - * - * Name: bc_dts_defs.h - * - * Description: Common definitions for all components. Only types - * is allowed to be included from this file. - * - * AU - * - * HISTORY: - * - ******************************************************************** - * This header is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 2.1 of the License. - * - * This header 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 Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public License - * along with this header. If not, see . - *******************************************************************/ - -#ifndef _BC_DTS_DEFS_H_ -#define _BC_DTS_DEFS_H_ - -#include - -/* BIT Mask */ -#define BC_BIT(_x) (1 << (_x)) - -enum BC_STATUS { - BC_STS_SUCCESS = 0, - BC_STS_INV_ARG = 1, - BC_STS_BUSY = 2, - BC_STS_NOT_IMPL = 3, - BC_STS_PGM_QUIT = 4, - BC_STS_NO_ACCESS = 5, - BC_STS_INSUFF_RES = 6, - BC_STS_IO_ERROR = 7, - BC_STS_NO_DATA = 8, - BC_STS_VER_MISMATCH = 9, - BC_STS_TIMEOUT = 10, - BC_STS_FW_CMD_ERR = 11, - BC_STS_DEC_NOT_OPEN = 12, - BC_STS_ERR_USAGE = 13, - BC_STS_IO_USER_ABORT = 14, - BC_STS_IO_XFR_ERROR = 15, - BC_STS_DEC_NOT_STARTED = 16, - BC_STS_FWHEX_NOT_FOUND = 17, - BC_STS_FMT_CHANGE = 18, - BC_STS_HIF_ACCESS = 19, - BC_STS_CMD_CANCELLED = 20, - BC_STS_FW_AUTH_FAILED = 21, - BC_STS_BOOTLOADER_FAILED = 22, - BC_STS_CERT_VERIFY_ERROR = 23, - BC_STS_DEC_EXIST_OPEN = 24, - BC_STS_PENDING = 25, - BC_STS_CLK_NOCHG = 26, - - /* Must be the last one.*/ - BC_STS_ERROR = -1 -}; - -/*------------------------------------------------------* - * Registry Key Definitions * - *------------------------------------------------------*/ -#define BC_REG_KEY_MAIN_PATH "Software\\Broadcom\\MediaPC\\70010" -#define BC_REG_KEY_FWPATH "FirmwareFilePath" -#define BC_REG_KEY_SEC_OPT "DbgOptions" - -/* - * Options: - * - * b[5] = Enable RSA KEY in EEPROM Support - * b[6] = Enable Old PIB scheme. (0 = Use PIB with video scheme) - * - * b[12] = Enable send message to NotifyIcon - * - */ - -enum BC_SW_OPTIONS { - BC_OPT_DOSER_OUT_ENCRYPT = BC_BIT(3), - BC_OPT_LINK_OUT_ENCRYPT = BC_BIT(29), -}; - -struct BC_REG_CONFIG { - uint32_t DbgOptions; -}; - -#if defined(__KERNEL__) || defined(__LINUX_USER__) -#else -/* Align data structures */ -#define ALIGN(x) __declspec(align(x)) -#endif - -/* mode - * b[0]..b[7] = _DtsDeviceOpenMode - * b[8] = Load new FW - * b[9] = Load file play back FW - * b[10] = Disk format (0 for HD DVD and 1 for BLU ray) - * b[11]-b[15] = default output resolution - * b[16] = Skip TX CPB Buffer Check - * b[17] = Adaptive Output Encrypt/Scramble Scheme - * b[18]-b[31] = reserved for future use - */ - -/* To allow multiple apps to open the device. */ -enum DtsDeviceOpenMode { - DTS_PLAYBACK_MODE = 0, - DTS_DIAG_MODE, - DTS_MONITOR_MODE, - DTS_HWINIT_MODE -}; - -/* To enable the filter to selectively enable/disable fixes or erratas */ -enum DtsDeviceFixMode { - DTS_LOAD_NEW_FW = BC_BIT(8), - DTS_LOAD_FILE_PLAY_FW = BC_BIT(9), - DTS_DISK_FMT_BD = BC_BIT(10), - /* b[11]-b[15] : Default output resolution */ - DTS_SKIP_TX_CHK_CPB = BC_BIT(16), - DTS_ADAPTIVE_OUTPUT_PER = BC_BIT(17), - DTS_INTELLIMAP = BC_BIT(18), - /* b[19]-b[21] : select clock frequency */ - DTS_PLAYBACK_DROP_RPT_MODE = BC_BIT(22) -}; - -#define DTS_DFLT_RESOLUTION(x) (x<<11) - -#define DTS_DFLT_CLOCK(x) (x<<19) - -/* F/W File Version corresponding to S/W Releases */ -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)) -}; - -/*------------------------------------------------------* - * Stream Types for DtsOpenDecoder() * - *------------------------------------------------------*/ -enum DtsOpenDecStreamTypes { - BC_STREAM_TYPE_ES = 0, - BC_STREAM_TYPE_PES = 1, - BC_STREAM_TYPE_TS = 2, - BC_STREAM_TYPE_ES_TSTAMP = 6, -}; - -/*------------------------------------------------------* - * Video Algorithms for DtsSetVideoParams() * - *------------------------------------------------------*/ -enum DtsSetVideoParamsAlgo { - BC_VID_ALGO_H264 = 0, - BC_VID_ALGO_MPEG2 = 1, - BC_VID_ALGO_VC1 = 4, - BC_VID_ALGO_VC1MP = 7, -}; - -/*------------------------------------------------------* - * MPEG Extension to the PPB * - *------------------------------------------------------*/ -#define BC_MPEG_VALID_PANSCAN (1) - -struct BC_PIB_EXT_MPEG { - uint32_t valid; - /* Always valid, defaults to picture size if no - * sequence display extension in the stream. */ - uint32_t display_horizontal_size; - uint32_t display_vertical_size; - - /* MPEG_VALID_PANSCAN - * Offsets are a copy values from the MPEG stream. */ - uint32_t offset_count; - int32_t horizontal_offset[3]; - int32_t vertical_offset[3]; -}; - -/*------------------------------------------------------* - * H.264 Extension to the PPB * - *------------------------------------------------------*/ -/* Bit definitions for 'other.h264.valid' field */ -#define H264_VALID_PANSCAN (1) -#define H264_VALID_SPS_CROP (2) -#define H264_VALID_VUI (4) - -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) - * is (are) not initialized. */ - uint32_t valid; - - /* H264_VALID_PANSCAN */ - uint32_t pan_scan_count; - int32_t pan_scan_left[3]; - int32_t pan_scan_right[3]; - int32_t pan_scan_top[3]; - int32_t pan_scan_bottom[3]; - - /* H264_VALID_SPS_CROP */ - int32_t sps_crop_left; - int32_t sps_crop_right; - int32_t sps_crop_top; - int32_t sps_crop_bottom; - - /* H264_VALID_VUI */ - uint32_t chroma_top; - uint32_t chroma_bottom; -}; - -/*------------------------------------------------------* - * VC1 Extension to the PPB * - *------------------------------------------------------*/ -#define VC1_VALID_PANSCAN (1) - -struct BC_PIB_EXT_VC1 { - uint32_t valid; - - /* Always valid, defaults to picture size if no - * sequence display extension in the stream. */ - uint32_t display_horizontal_size; - uint32_t display_vertical_size; - - /* VC1 pan scan windows */ - uint32_t num_panscan_windows; - int32_t ps_horiz_offset[4]; - int32_t ps_vert_offset[4]; - int32_t ps_width[4]; - int32_t ps_height[4]; -}; - -/*------------------------------------------------------* - * Picture Information Block * - *------------------------------------------------------*/ -#if defined(__LINUX_USER__) -/* Values for 'pulldown' field. '0' means no pulldown information - * was present for this picture. */ -enum { - vdecNoPulldownInfo = 0, - vdecTop = 1, - vdecBottom = 2, - vdecTopBottom = 3, - vdecBottomTop = 4, - vdecTopBottomTop = 5, - vdecBottomTopBottom = 6, - vdecFrame_X2 = 7, - vdecFrame_X3 = 8, - vdecFrame_X1 = 9, - vdecFrame_X4 = 10, -}; - -/* Values for the 'frame_rate' field. */ -enum { - vdecFrameRateUnknown = 0, - vdecFrameRate23_97, - vdecFrameRate24, - vdecFrameRate25, - vdecFrameRate29_97, - vdecFrameRate30, - vdecFrameRate50, - vdecFrameRate59_94, - vdecFrameRate60, -}; - -/* Values for the 'aspect_ratio' field. */ -enum { - vdecAspectRatioUnknown = 0, - vdecAspectRatioSquare, - vdecAspectRatio12_11, - vdecAspectRatio10_11, - vdecAspectRatio16_11, - vdecAspectRatio40_33, - vdecAspectRatio24_11, - vdecAspectRatio20_11, - vdecAspectRatio32_11, - vdecAspectRatio80_33, - vdecAspectRatio18_11, - vdecAspectRatio15_11, - vdecAspectRatio64_33, - vdecAspectRatio160_99, - vdecAspectRatio4_3, - vdecAspectRatio16_9, - vdecAspectRatio221_1, - vdecAspectRatioOther = 255, -}; - -/* Values for the 'colour_primaries' field. */ -enum { - vdecColourPrimariesUnknown = 0, - vdecColourPrimariesBT709, - vdecColourPrimariesUnspecified, - vdecColourPrimariesReserved, - vdecColourPrimariesBT470_2M = 4, - vdecColourPrimariesBT470_2BG, - vdecColourPrimariesSMPTE170M, - vdecColourPrimariesSMPTE240M, - vdecColourPrimariesGenericFilm, -}; -/** - * @vdecRESOLUTION_CUSTOM: custom - * @vdecRESOLUTION_480i: 480i - * @vdecRESOLUTION_1080i: 1080i (1920x1080, 60i) - * @vdecRESOLUTION_NTSC: NTSC (720x483, 60i) - * @vdecRESOLUTION_480p: 480p (720x480, 60p) - * @vdecRESOLUTION_720p: 720p (1280x720, 60p) - * @vdecRESOLUTION_PAL1: PAL_1 (720x576, 50i) - * @vdecRESOLUTION_1080i25: 1080i25 (1920x1080, 50i) - * @vdecRESOLUTION_720p50: 720p50 (1280x720, 50p) - * @vdecRESOLUTION_576p: 576p (720x576, 50p) - * @vdecRESOLUTION_1080i29_97: 1080i (1920x1080, 59.94i) - * @vdecRESOLUTION_720p59_94: 720p (1280x720, 59.94p) - * @vdecRESOLUTION_SD_DVD: SD DVD (720x483, 60i) - * @vdecRESOLUTION_480p656: 480p (720x480, 60p), - * output bus width 8 bit, clock 74.25MHz - * @vdecRESOLUTION_1080p23_976: 1080p23_976 (1920x1080, 23.976p) - * @vdecRESOLUTION_720p23_976: 720p23_976 (1280x720p, 23.976p) - * @vdecRESOLUTION_240p29_97: 240p (1440x240, 29.97p ) - * @vdecRESOLUTION_240p30: 240p (1440x240, 30p) - * @vdecRESOLUTION_288p25: 288p (1440x288p, 25p) - * @vdecRESOLUTION_1080p29_97: 1080p29_97 (1920x1080, 29.97p) - * @vdecRESOLUTION_1080p30: 1080p30 (1920x1080, 30p) - * @vdecRESOLUTION_1080p24: 1080p24 (1920x1080, 24p) - * @vdecRESOLUTION_1080p25: 1080p25 (1920x1080, 25p) - * @vdecRESOLUTION_720p24: 720p24 (1280x720, 25p) - * @vdecRESOLUTION_720p29_97: 720p29.97 (1280x720, 29.97p) - * @vdecRESOLUTION_480p23_976: 480p23.976 (720*480, 23.976) - * @vdecRESOLUTION_480p29_97: 480p29.976 (720*480, 29.97p) - * @vdecRESOLUTION_576p25: 576p25 (720*576, 25p) - * @vdecRESOLUTION_480p0: 480p (720x480, 0p) - * @vdecRESOLUTION_480i0: 480i (720x480, 0i) - * @vdecRESOLUTION_576p0: 576p (720x576, 0p) - * @vdecRESOLUTION_720p0: 720p (1280x720, 0p) - * @vdecRESOLUTION_1080p0: 1080p (1920x1080, 0p) - * @vdecRESOLUTION_1080i0: 1080i (1920x1080, 0i) - */ -enum { - vdecRESOLUTION_CUSTOM = 0x00000000, - vdecRESOLUTION_480i = 0x00000001, - vdecRESOLUTION_1080i = 0x00000002, - vdecRESOLUTION_NTSC = 0x00000003, - vdecRESOLUTION_480p = 0x00000004, - vdecRESOLUTION_720p = 0x00000005, - vdecRESOLUTION_PAL1 = 0x00000006, - vdecRESOLUTION_1080i25 = 0x00000007, - vdecRESOLUTION_720p50 = 0x00000008, - vdecRESOLUTION_576p = 0x00000009, - vdecRESOLUTION_1080i29_97 = 0x0000000A, - vdecRESOLUTION_720p59_94 = 0x0000000B, - vdecRESOLUTION_SD_DVD = 0x0000000C, - vdecRESOLUTION_480p656 = 0x0000000D, - vdecRESOLUTION_1080p23_976 = 0x0000000E, - vdecRESOLUTION_720p23_976 = 0x0000000F, - vdecRESOLUTION_240p29_97 = 0x00000010, - vdecRESOLUTION_240p30 = 0x00000011, - vdecRESOLUTION_288p25 = 0x00000012, - vdecRESOLUTION_1080p29_97 = 0x00000013, - vdecRESOLUTION_1080p30 = 0x00000014, - vdecRESOLUTION_1080p24 = 0x00000015, - vdecRESOLUTION_1080p25 = 0x00000016, - vdecRESOLUTION_720p24 = 0x00000017, - vdecRESOLUTION_720p29_97 = 0x00000018, - vdecRESOLUTION_480p23_976 = 0x00000019, - vdecRESOLUTION_480p29_97 = 0x0000001A, - vdecRESOLUTION_576p25 = 0x0000001B, - /* For Zero Frame Rate */ - vdecRESOLUTION_480p0 = 0x0000001C, - vdecRESOLUTION_480i0 = 0x0000001D, - vdecRESOLUTION_576p0 = 0x0000001E, - vdecRESOLUTION_720p0 = 0x0000001F, - vdecRESOLUTION_1080p0 = 0x00000020, - vdecRESOLUTION_1080i0 = 0x00000021, -}; - -/* Bit definitions for 'flags' field */ -#define VDEC_FLAG_EOS (0x0004) - -#define VDEC_FLAG_FRAME (0x0000) -#define VDEC_FLAG_FIELDPAIR (0x0008) -#define VDEC_FLAG_TOPFIELD (0x0010) -#define VDEC_FLAG_BOTTOMFIELD (0x0018) - -#define VDEC_FLAG_PROGRESSIVE_SRC (0x0000) -#define VDEC_FLAG_INTERLACED_SRC (0x0020) -#define VDEC_FLAG_UNKNOWN_SRC (0x0040) - -#define VDEC_FLAG_BOTTOM_FIRST (0x0080) -#define VDEC_FLAG_LAST_PICTURE (0x0100) - -#define VDEC_FLAG_PICTURE_META_DATA_PRESENT (0x40000) - -#endif /* __LINUX_USER__ */ - -enum _BC_OUTPUT_FORMAT { - MODE420 = 0x0, - MODE422_YUY2 = 0x1, - MODE422_UYVY = 0x2, -}; -/** - * struct BC_PIC_INFO_BLOCK - * @timeStam;: Timestamp - * @picture_number: Ordinal display number - * @width: pixels - * @height: pixels - * @chroma_format: 0x420, 0x422 or 0x444 - * @n_drop;: number of non-reference frames - * remaining to be dropped - */ -struct BC_PIC_INFO_BLOCK { - /* Common fields. */ - uint64_t timeStamp; - uint32_t picture_number; - uint32_t width; - uint32_t height; - uint32_t chroma_format; - uint32_t pulldown; - uint32_t flags; - uint32_t frame_rate; - uint32_t aspect_ratio; - uint32_t colour_primaries; - uint32_t picture_meta_payload; - uint32_t sess_num; - uint32_t ycom; - uint32_t custom_aspect_ratio_width_height; - uint32_t n_drop; /* number of non-reference frames - remaining to be dropped */ - - /* Protocol-specific extensions. */ - union { - struct BC_PIB_EXT_H264 h264; - struct BC_PIB_EXT_MPEG mpeg; - struct BC_PIB_EXT_VC1 vc1; - } other; - -}; - -/*------------------------------------------------------* - * ProcOut Info * - *------------------------------------------------------*/ - -/** - * enum POUT_OPTIONAL_IN_FLAGS - Optional flags for ProcOut Interface. - * @BC_POUT_FLAGS_YV12: Copy Data in YV12 format - * @BC_POUT_FLAGS_STRIDE: Stride size is valid. - * @BC_POUT_FLAGS_SIZE: Take size information from Application - * @BC_POUT_FLAGS_INTERLACED: copy only half the bytes - * @BC_POUT_FLAGS_INTERLEAVED: interleaved frame - * @: * @BC_POUT_FLAGS_FMT_CHANGE: Data is not VALID when this flag is set - * @BC_POUT_FLAGS_PIB_VALID: PIB Information valid - * @BC_POUT_FLAGS_ENCRYPTED: Data is encrypted. - * @BC_POUT_FLAGS_FLD_BOT: Bottom Field data - */ -enum POUT_OPTIONAL_IN_FLAGS_ { - /* Flags from App to Device */ - BC_POUT_FLAGS_YV12 = 0x01, - BC_POUT_FLAGS_STRIDE = 0x02, - BC_POUT_FLAGS_SIZE = 0x04, - BC_POUT_FLAGS_INTERLACED = 0x08, - BC_POUT_FLAGS_INTERLEAVED = 0x10, - - /* Flags from Device to APP */ - BC_POUT_FLAGS_FMT_CHANGE = 0x10000, - BC_POUT_FLAGS_PIB_VALID = 0x20000, - BC_POUT_FLAGS_ENCRYPTED = 0x40000, - BC_POUT_FLAGS_FLD_BOT = 0x80000, -}; - -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 */ - -/** - * struct BC_DTS_PROC_OUT - * @Ybuff: Caller Supplied buffer for Y data - * @YbuffSz: Caller Supplied Y buffer size - * @YBuffDoneSz: Transferred Y datasize - * @*UVbuff: Caller Supplied buffer for UV data - * @UVbuffSz: Caller Supplied UV buffer size - * @UVBuffDoneSz: Transferred UV data size - * @StrideSz: Caller supplied Stride Size - * @PoutFlags: Call IN Flags - * @discCnt: Picture discontinuity count - * @PicInfo: Picture Information Block Data - * @b422Mode: Picture output Mode - * @bPibEnc: PIB encrypted - */ -struct BC_DTS_PROC_OUT { - uint8_t *Ybuff; - uint32_t YbuffSz; - uint32_t YBuffDoneSz; - - uint8_t *UVbuff; - uint32_t UVbuffSz; - uint32_t UVBuffDoneSz; - - uint32_t StrideSz; - uint32_t PoutFlags; - - uint32_t discCnt; - - struct BC_PIC_INFO_BLOCK PicInfo; - - /* Line 21 Closed Caption */ - /* User Data */ - uint32_t UserDataSz; - uint8_t UserData[MAX_UD_SIZE]; - - void *hnd; - dts_pout_callback AppCallBack; - uint8_t DropFrames; - uint8_t b422Mode; - uint8_t bPibEnc; - uint8_t bRevertScramble; - -}; -/** - * struct BC_DTS_STATUS - * @ReadyListCount: Number of frames in ready list (reported by driver) - * @PowerStateChange: Number of active state power - * transitions (reported by driver) - * @FramesDropped: Number of frames dropped. (reported by DIL) - * @FramesCaptured: Number of frames captured. (reported by DIL) - * @FramesRepeated: Number of frames repeated. (reported by DIL) - * @InputCount: Times compressed video has been sent to the HW. - * i.e. Successful DtsProcInput() calls (reported by DIL) - * @InputTotalSize: Amount of compressed video that has been sent to the HW. - * (reported by DIL) - * @InputBusyCount: Times compressed video has attempted to be sent to the HW - * but the input FIFO was full. (reported by DIL) - * @PIBMissCount: Amount of times a PIB is invalid. (reported by DIL) - * @cpbEmptySize: supported only for H.264, specifically changed for - * Adobe. Report size of CPB buffer available. (reported by DIL) - * @NextTimeStamp: TimeStamp of the next picture that will be returned - * by a call to ProcOutput. Added for Adobe. Reported - * back from the driver - */ -struct BC_DTS_STATUS { - uint8_t ReadyListCount; - uint8_t FreeListCount; - uint8_t PowerStateChange; - uint8_t reserved_[1]; - uint32_t FramesDropped; - uint32_t FramesCaptured; - uint32_t FramesRepeated; - uint32_t InputCount; - uint64_t InputTotalSize; - uint32_t InputBusyCount; - uint32_t PIBMissCount; - uint32_t cpbEmptySize; - uint64_t NextTimeStamp; - uint8_t reserved__[16]; -}; - -#define BC_SWAP32(_v) \ - ((((_v) & 0xFF000000)>>24)| \ - (((_v) & 0x00FF0000)>>8)| \ - (((_v) & 0x0000FF00)<<8)| \ - (((_v) & 0x000000FF)<<24)) - -#define WM_AGENT_TRAYICON_DECODER_OPEN 10001 -#define WM_AGENT_TRAYICON_DECODER_CLOSE 10002 -#define WM_AGENT_TRAYICON_DECODER_START 10003 -#define WM_AGENT_TRAYICON_DECODER_STOP 10004 -#define WM_AGENT_TRAYICON_DECODER_RUN 10005 -#define WM_AGENT_TRAYICON_DECODER_PAUSE 10006 - - -#endif /* _BC_DTS_DEFS_H_ */ diff --git a/drivers/staging/crystalhd/bc_dts_glob_lnx.h b/drivers/staging/crystalhd/bc_dts_glob_lnx.h deleted file mode 100644 index 92b0cff248cb..000000000000 --- a/drivers/staging/crystalhd/bc_dts_glob_lnx.h +++ /dev/null @@ -1,300 +0,0 @@ -/******************************************************************** - * Copyright(c) 2006-2009 Broadcom Corporation. - * - * Name: bc_dts_glob_lnx.h - * - * Description: Wrapper to Windows dts_glob.h for Link-Linux usage. - * The idea is to define additional Linux related defs - * in this file to avoid changes to existing Windows - * glob file. - * - * AU - * - * HISTORY: - * - ******************************************************************** - * This header is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 2.1 of the License. - * - * This header 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 Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public License - * along with this header. If not, see . - *******************************************************************/ - -#ifndef _BC_DTS_GLOB_LNX_H_ -#define _BC_DTS_GLOB_LNX_H_ - -#ifdef __LINUX_USER__ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DRVIFLIB_INT_API - -#endif - -#include "crystalhd.h" - -#define CRYSTALHD_API_NAME "crystalhd" -#define CRYSTALHD_API_DEV_NAME "/dev/crystalhd" - -/* - * These are SW stack tunable parameters shared - * between the driver and the application. - */ -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 */ - BC_LINK_MAX_OPENS = 3, /* Maximum simultaneous opens*/ - BC_LINK_MAX_SGLS = 1024, /* Maximum SG elements 4M/4K */ - BC_TX_LIST_CNT = 2, /* Max Tx DMA Rings */ - BC_RX_LIST_CNT = 8, /* Max Rx DMA Rings*/ - BC_PROC_OUTPUT_TIMEOUT = 3000, /* Milliseconds */ - BC_INFIFO_THRESHOLD = 0x10000, -}; - -struct BC_CMD_REG_ACC { - uint32_t Offset; - uint32_t Value; -}; - -struct BC_CMD_DEV_MEM { - uint32_t StartOff; - uint32_t NumDwords; - uint32_t Rsrd; -}; - -/* FW Passthrough command structure */ -enum bc_fw_cmd_flags { - BC_FW_CMD_FLAGS_NONE = 0, - BC_FW_CMD_PIB_QS = 0x01, -}; - -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; -}; - -struct BC_HW_TYPE { - uint16_t PciDevId; - uint16_t PciVenId; - uint8_t HwRev; - uint8_t Align[3]; -}; - -struct BC_PCI_CFG { - uint32_t Size; - uint32_t Offset; - uint8_t pci_cfg_space[PCI_CFG_SIZE]; -}; - -struct BC_VERSION_INFO { - uint8_t DriverMajor; - uint8_t DriverMinor; - uint16_t DriverRevision; -}; - -struct BC_START_RX_CAP { - uint32_t Rsrd; - uint32_t StartDeliveryThsh; - uint32_t PauseThsh; - uint32_t ResumeThsh; -}; - -struct BC_FLUSH_RX_CAP { - uint32_t Rsrd; - uint32_t bDiscardOnly; -}; - -struct BC_DTS_STATS { - uint8_t drvRLL; - uint8_t drvFLL; - uint8_t eosDetected; - uint8_t pwr_state_change; - - /* Stats from App */ - uint32_t opFrameDropped; - uint32_t opFrameCaptured; - uint32_t ipSampleCnt; - uint64_t ipTotalSize; - uint32_t reptdFrames; - uint32_t pauseCount; - uint32_t pibMisses; - uint32_t discCounter; - - /* Stats from Driver */ - uint32_t TxFifoBsyCnt; - uint32_t intCount; - uint32_t DrvIgnIntrCnt; - uint32_t DrvTotalFrmDropped; - uint32_t DrvTotalHWErrs; - uint32_t DrvTotalPIBFlushCnt; - uint32_t DrvTotalFrmCaptured; - uint32_t DrvPIBMisses; - uint32_t DrvPauseTime; - uint32_t DrvRepeatedFrms; - uint32_t res1[13]; - -}; - -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 */ -}; - -struct BC_DEC_YUV_BUFFS { - uint32_t b422Mode; - uint8_t *YuvBuff; - uint32_t YuvBuffSz; - uint32_t UVbuffOffset; - uint32_t YBuffDoneSz; - uint32_t UVBuffDoneSz; - uint32_t RefCnt; -}; - -enum DECOUT_COMPLETION_FLAGS { - COMP_FLAG_NO_INFO = 0x00, - COMP_FLAG_FMT_CHANGE = 0x01, - COMP_FLAG_PIB_VALID = 0x02, - COMP_FLAG_DATA_VALID = 0x04, - COMP_FLAG_DATA_ENC = 0x08, - COMP_FLAG_DATA_BOT = 0x10, -}; - -struct BC_DEC_OUT_BUFF { - struct BC_DEC_YUV_BUFFS OutPutBuffs; - struct BC_PIC_INFO_BLOCK PibInfo; - uint32_t Flags; - uint32_t BadFrCnt; -}; - -struct BC_NOTIFY_MODE { - uint32_t Mode; - uint32_t Rsvr[3]; -}; - -struct BC_CLOCK { - uint32_t clk; - uint32_t Rsvr[3]; -}; - -struct BC_IOCTL_DATA { - enum BC_STATUS RetSts; - uint32_t IoctlDataSz; - uint32_t Timeout; - union { - 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; -}; - -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 */ - DRV_CMD_REG_WR, /* Write Device Register */ - DRV_CMD_FPGA_RD, /* Read FPGA Register */ - DRV_CMD_FPGA_WR, /* Write FPGA Register */ - DRV_CMD_MEM_RD, /* Read Device Memory */ - DRV_CMD_MEM_WR, /* Write Device Memory */ - DRV_CMD_RD_PCI_CFG, /* Read PCI Config Space */ - DRV_CMD_WR_PCI_CFG, /* Write the PCI Configuration Space*/ - DRV_CMD_FW_DOWNLOAD, /* Download Firmware */ - DRV_ISSUE_FW_CMD, /* Issue FW Cmd (pass through mode) */ - DRV_CMD_PROC_INPUT, /* Process Input Sample */ - DRV_CMD_ADD_RXBUFFS, /* Add Rx side buffers to driver pool */ - DRV_CMD_FETCH_RXBUFF, /* Get Rx DMAed buffer */ - DRV_CMD_START_RX_CAP, /* Start Rx Buffer Capture */ - DRV_CMD_FLUSH_RX_CAP, /* Stop the capture for now... - we will enhance this later*/ - DRV_CMD_GET_DRV_STAT, /* Get Driver Internal Statistics */ - DRV_CMD_RST_DRV_STAT, /* Reset Driver Internal Statistics */ - DRV_CMD_NOTIFY_MODE, /* Notify the Mode to driver - in which the application is Operating*/ - DRV_CMD_CHANGE_CLOCK, /* Change the core clock to either save power - or improve performance */ - - /* MUST be the last one.. */ - DRV_CMD_END, /* End of the List.. */ -}; - -#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 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) -#define BCM_IOC_REG_RD BC_IOC_IOWR(DRV_CMD_REG_RD, BC_IOCTL_MB) -#define BCM_IOC_REG_WR BC_IOC_IOWR(DRV_CMD_REG_WR, BC_IOCTL_MB) -#define BCM_IOC_MEM_RD BC_IOC_IOWR(DRV_CMD_MEM_RD, BC_IOCTL_MB) -#define BCM_IOC_MEM_WR BC_IOC_IOWR(DRV_CMD_MEM_WR, BC_IOCTL_MB) -#define BCM_IOC_FPGA_RD BC_IOC_IOWR(DRV_CMD_FPGA_RD, BC_IOCTL_MB) -#define BCM_IOC_FPGA_WR BC_IOC_IOWR(DRV_CMD_FPGA_WR, BC_IOCTL_MB) -#define BCM_IOC_RD_PCI_CFG BC_IOC_IOWR(DRV_CMD_RD_PCI_CFG, BC_IOCTL_MB) -#define BCM_IOC_WR_PCI_CFG BC_IOC_IOWR(DRV_CMD_WR_PCI_CFG, BC_IOCTL_MB) -#define BCM_IOC_PROC_INPUT BC_IOC_IOWR(DRV_CMD_PROC_INPUT, BC_IOCTL_MB) -#define BCM_IOC_ADD_RXBUFFS BC_IOC_IOWR(DRV_CMD_ADD_RXBUFFS, BC_IOCTL_MB) -#define BCM_IOC_FETCH_RXBUFF BC_IOC_IOWR(DRV_CMD_FETCH_RXBUFF, BC_IOCTL_MB) -#define BCM_IOC_FW_CMD BC_IOC_IOWR(DRV_ISSUE_FW_CMD, BC_IOCTL_MB) -#define BCM_IOC_START_RX_CAP BC_IOC_IOWR(DRV_CMD_START_RX_CAP, BC_IOCTL_MB) -#define BCM_IOC_FLUSH_RX_CAP BC_IOC_IOWR(DRV_CMD_FLUSH_RX_CAP, BC_IOCTL_MB) -#define BCM_IOC_GET_DRV_STAT BC_IOC_IOWR(DRV_CMD_GET_DRV_STAT, BC_IOCTL_MB) -#define BCM_IOC_RST_DRV_STAT BC_IOC_IOWR(DRV_CMD_RST_DRV_STAT, BC_IOCTL_MB) -#define BCM_IOC_NOTIFY_MODE BC_IOC_IOWR(DRV_CMD_NOTIFY_MODE, BC_IOCTL_MB) -#define BCM_IOC_FW_DOWNLOAD BC_IOC_IOWR(DRV_CMD_FW_DOWNLOAD, BC_IOCTL_MB) -#define BCM_IOC_CHG_CLK BC_IOC_IOWR(DRV_CMD_CHANGE_CLOCK, BC_IOCTL_MB) -#define BCM_IOC_END BC_IOC_VOID - -/* Wrapper for main IOCTL data */ -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 */ -}; - -enum crystalhd_kmod_ver { - crystalhd_kmod_major = 0, - crystalhd_kmod_minor = 9, - crystalhd_kmod_rev = 27, -}; - -#endif diff --git a/drivers/staging/crystalhd/bcm_70012_regs.h b/drivers/staging/crystalhd/bcm_70012_regs.h deleted file mode 100644 index da199ad8e27e..000000000000 --- a/drivers/staging/crystalhd/bcm_70012_regs.h +++ /dev/null @@ -1,758 +0,0 @@ -/*************************************************************************** - * Copyright (c) 1999-2009, Broadcom Corporation. - * - * Name: bcm_70012_regs.h - * - * Description: BCM70012 registers - * - ******************************************************************** - * This header is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 2.1 of the License. - * - * This header 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 Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public License - * along with this header. If not, see . - ***************************************************************************/ - -#ifndef MACFILE_H__ -#define MACFILE_H__ - -/** - * 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 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_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 */ - -/**************************************************************************** - * Core Enums. - ***************************************************************************/ -/**************************************************************************** - * Enums: AES_RGR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define AES_RGR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define AES_RGR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: CCE_RGR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define CCE_RGR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define CCE_RGR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: DBU_RGR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define DBU_RGR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define DBU_RGR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: DCI_RGR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define DCI_RGR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define DCI_RGR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: GISB_ARBITER_DEASSERT_ASSERT - ***************************************************************************/ -#define GISB_ARBITER_DEASSERT_ASSERT_DEASSERT 0 -#define GISB_ARBITER_DEASSERT_ASSERT_ASSERT 1 - -/**************************************************************************** - * Enums: GISB_ARBITER_UNMASK_MASK - ***************************************************************************/ -#define GISB_ARBITER_UNMASK_MASK_UNMASK 0 -#define GISB_ARBITER_UNMASK_MASK_MASK 1 - -/**************************************************************************** - * Enums: GISB_ARBITER_DISABLE_ENABLE - ***************************************************************************/ -#define GISB_ARBITER_DISABLE_ENABLE_DISABLE 0 -#define GISB_ARBITER_DISABLE_ENABLE_ENABLE 1 - -/**************************************************************************** - * Enums: I2C_GR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define I2C_GR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define I2C_GR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: MISC_GR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define MISC_GR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define MISC_GR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * Enums: OTP_GR_BRIDGE_RESET_CTRL - ***************************************************************************/ -#define OTP_GR_BRIDGE_RESET_CTRL_DEASSERT 0 -#define OTP_GR_BRIDGE_RESET_CTRL_ASSERT 1 - -/**************************************************************************** - * BCM70012_TGT_TOP_PCIE_CFG - ***************************************************************************/ -#define PCIE_CFG_DEVICE_VENDOR_ID 0x00000000 /* DEVICE_VENDOR_ID Register */ -#define PCIE_CFG_STATUS_COMMAND 0x00000004 /* STATUS_COMMAND Register */ -#define PCIE_CFG_PCI_CLASSCODE_AND_REVISION_ID 0x00000008 /* PCI_CLASSCODE_AND_REVISION_ID Register */ -#define PCIE_CFG_BIST_HEADER_TYPE_LATENCY_TIMER_CACHE_LINE_SIZE 0x0000000c /* BIST_HEADER_TYPE_LATENCY_TIMER_CACHE_LINE_SIZE Register */ -#define PCIE_CFG_BASE_ADDRESS_1 0x00000010 /* BASE_ADDRESS_1 Register */ -#define PCIE_CFG_BASE_ADDRESS_2 0x00000014 /* BASE_ADDRESS_2 Register */ -#define PCIE_CFG_BASE_ADDRESS_3 0x00000018 /* BASE_ADDRESS_3 Register */ -#define PCIE_CFG_BASE_ADDRESS_4 0x0000001c /* BASE_ADDRESS_4 Register */ -#define PCIE_CFG_CARDBUS_CIS_POINTER 0x00000028 /* CARDBUS_CIS_POINTER Register */ -#define PCIE_CFG_SUBSYSTEM_DEVICE_VENDOR_ID 0x0000002c /* SUBSYSTEM_DEVICE_VENDOR_ID Register */ -#define PCIE_CFG_EXPANSION_ROM_BASE_ADDRESS 0x00000030 /* EXPANSION_ROM_BASE_ADDRESS Register */ -#define PCIE_CFG_CAPABILITIES_POINTER 0x00000034 /* CAPABILITIES_POINTER Register */ -#define PCIE_CFG_INTERRUPT 0x0000003c /* INTERRUPT Register */ -#define PCIE_CFG_VPD_CAPABILITIES 0x00000040 /* VPD_CAPABILITIES Register */ -#define PCIE_CFG_VPD_DATA 0x00000044 /* VPD_DATA Register */ -#define PCIE_CFG_POWER_MANAGEMENT_CAPABILITY 0x00000048 /* POWER_MANAGEMENT_CAPABILITY Register */ -#define PCIE_CFG_POWER_MANAGEMENT_CONTROL_STATUS 0x0000004c /* POWER_MANAGEMENT_CONTROL_STATUS Register */ -#define PCIE_CFG_MSI_CAPABILITY_HEADER 0x00000050 /* MSI_CAPABILITY_HEADER Register */ -#define PCIE_CFG_MSI_LOWER_ADDRESS 0x00000054 /* MSI_LOWER_ADDRESS Register */ -#define PCIE_CFG_MSI_UPPER_ADDRESS_REGISTER 0x00000058 /* MSI_UPPER_ADDRESS_REGISTER Register */ -#define PCIE_CFG_MSI_DATA 0x0000005c /* MSI_DATA Register */ -#define PCIE_CFG_BROADCOM_VENDOR_SPECIFIC_CAPABILITY_HEADER 0x00000060 /* BROADCOM_VENDOR_SPECIFIC_CAPABILITY_HEADER Register */ -#define PCIE_CFG_RESET_COUNTERS_INITIAL_VALUES 0x00000064 /* RESET_COUNTERS_INITIAL_VALUES Register */ -#define PCIE_CFG_MISCELLANEOUS_HOST_CONTROL 0x00000068 /* MISCELLANEOUS_HOST_CONTROL Register */ -#define PCIE_CFG_SPARE 0x0000006c /* SPARE Register */ -#define PCIE_CFG_PCI_STATE 0x00000070 /* PCI_STATE Register */ -#define PCIE_CFG_CLOCK_CONTROL 0x00000074 /* CLOCK_CONTROL Register */ -#define PCIE_CFG_REGISTER_BASE 0x00000078 /* REGISTER_BASE Register */ -#define PCIE_CFG_MEMORY_BASE 0x0000007c /* MEMORY_BASE Register */ -#define PCIE_CFG_REGISTER_DATA 0x00000080 /* REGISTER_DATA Register */ -#define PCIE_CFG_MEMORY_DATA 0x00000084 /* MEMORY_DATA Register */ -#define PCIE_CFG_EXPANSION_ROM_BAR_SIZE 0x00000088 /* EXPANSION_ROM_BAR_SIZE Register */ -#define PCIE_CFG_EXPANSION_ROM_ADDRESS 0x0000008c /* EXPANSION_ROM_ADDRESS Register */ -#define PCIE_CFG_EXPANSION_ROM_DATA 0x00000090 /* EXPANSION_ROM_DATA Register */ -#define PCIE_CFG_VPD_INTERFACE 0x00000094 /* VPD_INTERFACE Register */ -#define PCIE_CFG_UNDI_RECEIVE_BD_STANDARD_PRODUCER_RING_PRODUCER_INDEX_MAILBOX_UPPER 0x00000098 /* UNDI_RECEIVE_BD_STANDARD_PRODUCER_RING_PRODUCER_INDEX_MAILBOX_UPPER Register */ -#define PCIE_CFG_UNDI_RECEIVE_BD_STANDARD_PRODUCER_RING_PRODUCER_INDEX_MAILBOX_LOWER 0x0000009c /* UNDI_RECEIVE_BD_STANDARD_PRODUCER_RING_PRODUCER_INDEX_MAILBOX_LOWER Register */ -#define PCIE_CFG_UNDI_RECEIVE_RETURN_RING_CONSUMER_INDEX_UPPER 0x000000a0 /* UNDI_RECEIVE_RETURN_RING_CONSUMER_INDEX_UPPER Register */ -#define PCIE_CFG_UNDI_RECEIVE_RETURN_RING_CONSUMER_INDEX_LOWER 0x000000a4 /* UNDI_RECEIVE_RETURN_RING_CONSUMER_INDEX_LOWER Register */ -#define PCIE_CFG_UNDI_SEND_BD_PRODUCER_INDEX_MAILBOX_UPPER 0x000000a8 /* UNDI_SEND_BD_PRODUCER_INDEX_MAILBOX_UPPER Register */ -#define PCIE_CFG_UNDI_SEND_BD_PRODUCER_INDEX_MAILBOX_LOWER 0x000000ac /* UNDI_SEND_BD_PRODUCER_INDEX_MAILBOX_LOWER Register */ -#define PCIE_CFG_INT_MAILBOX_UPPER 0x000000b0 /* INT_MAILBOX_UPPER Register */ -#define PCIE_CFG_INT_MAILBOX_LOWER 0x000000b4 /* INT_MAILBOX_LOWER Register */ -#define PCIE_CFG_PRODUCT_ID_AND_ASIC_REVISION 0x000000bc /* PRODUCT_ID_AND_ASIC_REVISION Register */ -#define PCIE_CFG_FUNCTION_EVENT 0x000000c0 /* FUNCTION_EVENT Register */ -#define PCIE_CFG_FUNCTION_EVENT_MASK 0x000000c4 /* FUNCTION_EVENT_MASK Register */ -#define PCIE_CFG_FUNCTION_PRESENT 0x000000c8 /* FUNCTION_PRESENT Register */ -#define PCIE_CFG_PCIE_CAPABILITIES 0x000000cc /* PCIE_CAPABILITIES Register */ -#define PCIE_CFG_DEVICE_CAPABILITIES 0x000000d0 /* DEVICE_CAPABILITIES Register */ -#define PCIE_CFG_DEVICE_STATUS_CONTROL 0x000000d4 /* DEVICE_STATUS_CONTROL Register */ -#define PCIE_CFG_LINK_CAPABILITY 0x000000d8 /* LINK_CAPABILITY Register */ -#define PCIE_CFG_LINK_STATUS_CONTROL 0x000000dc /* LINK_STATUS_CONTROL Register */ -#define PCIE_CFG_DEVICE_CAPABILITIES_2 0x000000f0 /* DEVICE_CAPABILITIES_2 Register */ -#define PCIE_CFG_DEVICE_STATUS_CONTROL_2 0x000000f4 /* DEVICE_STATUS_CONTROL_2 Register */ -#define PCIE_CFG_LINK_CAPABILITIES_2 0x000000f8 /* LINK_CAPABILITIES_2 Register */ -#define PCIE_CFG_LINK_STATUS_CONTROL_2 0x000000fc /* LINK_STATUS_CONTROL_2 Register */ -#define PCIE_CFG_ADVANCED_ERROR_REPORTING_ENHANCED_CAPABILITY_HEADER 0x00000100 /* ADVANCED_ERROR_REPORTING_ENHANCED_CAPABILITY_HEADER Register */ -#define PCIE_CFG_UNCORRECTABLE_ERROR_STATUS 0x00000104 /* UNCORRECTABLE_ERROR_STATUS Register */ -#define PCIE_CFG_UNCORRECTABLE_ERROR_MASK 0x00000108 /* UNCORRECTABLE_ERROR_MASK Register */ -#define PCIE_CFG_UNCORRECTABLE_ERROR_SEVERITY 0x0000010c /* UNCORRECTABLE_ERROR_SEVERITY Register */ -#define PCIE_CFG_CORRECTABLE_ERROR_STATUS 0x00000110 /* CORRECTABLE_ERROR_STATUS Register */ -#define PCIE_CFG_CORRECTABLE_ERROR_MASK 0x00000114 /* CORRECTABLE_ERROR_MASK Register */ -#define PCIE_CFG_ADVANCED_ERROR_CAPABILITIES_AND_CONTROL 0x00000118 /* ADVANCED_ERROR_CAPABILITIES_AND_CONTROL Register */ -#define PCIE_CFG_HEADER_LOG_1 0x0000011c /* HEADER_LOG_1 Register */ -#define PCIE_CFG_HEADER_LOG_2 0x00000120 /* HEADER_LOG_2 Register */ -#define PCIE_CFG_HEADER_LOG_3 0x00000124 /* HEADER_LOG_3 Register */ -#define PCIE_CFG_HEADER_LOG_4 0x00000128 /* HEADER_LOG_4 Register */ -#define PCIE_CFG_VIRTUAL_CHANNEL_ENHANCED_CAPABILITY_HEADER 0x0000013c /* VIRTUAL_CHANNEL_ENHANCED_CAPABILITY_HEADER Register */ -#define PCIE_CFG_PORT_VC_CAPABILITY 0x00000140 /* PORT_VC_CAPABILITY Register */ -#define PCIE_CFG_PORT_VC_CAPABILITY_2 0x00000144 /* PORT_VC_CAPABILITY_2 Register */ -#define PCIE_CFG_PORT_VC_STATUS_CONTROL 0x00000148 /* PORT_VC_STATUS_CONTROL Register */ -#define PCIE_CFG_VC_RESOURCE_CAPABILITY 0x0000014c /* VC_RESOURCE_CAPABILITY Register */ -#define PCIE_CFG_VC_RESOURCE_CONTROL 0x00000150 /* VC_RESOURCE_CONTROL Register */ -#define PCIE_CFG_VC_RESOURCE_STATUS 0x00000154 /* VC_RESOURCE_STATUS Register */ -#define PCIE_CFG_DEVICE_SERIAL_NO_ENHANCED_CAPABILITY_HEADER 0x00000160 /* DEVICE_SERIAL_NO_ENHANCED_CAPABILITY_HEADER Register */ -#define PCIE_CFG_DEVICE_SERIAL_NO_LOWER_DW 0x00000164 /* DEVICE_SERIAL_NO_LOWER_DW Register */ -#define PCIE_CFG_DEVICE_SERIAL_NO_UPPER_DW 0x00000168 /* DEVICE_SERIAL_NO_UPPER_DW Register */ -#define PCIE_CFG_POWER_BUDGETING_ENHANCED_CAPABILITY_HEADER 0x0000016c /* POWER_BUDGETING_ENHANCED_CAPABILITY_HEADER Register */ -#define PCIE_CFG_POWER_BUDGETING_DATA_SELECT 0x00000170 /* POWER_BUDGETING_DATA_SELECT Register */ -#define PCIE_CFG_POWER_BUDGETING_DATA 0x00000174 /* POWER_BUDGETING_DATA Register */ -#define PCIE_CFG_POWER_BUDGETING_CAPABILITY 0x00000178 /* POWER_BUDGETING_CAPABILITY Register */ -#define PCIE_CFG_FIRMWARE_POWER_BUDGETING_2_1 0x0000017c /* FIRMWARE_POWER_BUDGETING_2_1 Register */ -#define PCIE_CFG_FIRMWARE_POWER_BUDGETING_4_3 0x00000180 /* FIRMWARE_POWER_BUDGETING_4_3 Register */ -#define PCIE_CFG_FIRMWARE_POWER_BUDGETING_6_5 0x00000184 /* FIRMWARE_POWER_BUDGETING_6_5 Register */ -#define PCIE_CFG_FIRMWARE_POWER_BUDGETING_8_7 0x00000188 /* FIRMWARE_POWER_BUDGETING_8_7 Register */ -#define PCIE_CFG_PCIE_1_1_ADVISORY_NON_FATAL_ERROR_MASKING 0x0000018c /* PCIE_1_1_ADVISORY_NON_FATAL_ERROR_MASKING Register */ - - -/**************************************************************************** - * BCM70012_TGT_TOP_PCIE_TL - ***************************************************************************/ -#define PCIE_TL_TL_CONTROL 0x00000400 /* TL_CONTROL Register */ -#define PCIE_TL_TRANSACTION_CONFIGURATION 0x00000404 /* TRANSACTION_CONFIGURATION Register */ - - -/**************************************************************************** - * BCM70012_TGT_TOP_PCIE_DLL - ***************************************************************************/ -#define PCIE_DLL_DATA_LINK_CONTROL 0x00000500 /* DATA_LINK_CONTROL Register */ -#define PCIE_DLL_DATA_LINK_STATUS 0x00000504 /* DATA_LINK_STATUS Register */ - - -/**************************************************************************** - * BCM70012_TGT_TOP_INTR - ***************************************************************************/ -#define INTR_INTR_STATUS 0x00000700 /* Interrupt Status Register */ -#define INTR_INTR_SET 0x00000704 /* Interrupt Set Register */ -#define INTR_INTR_CLR_REG 0x00000708 /* Interrupt Clear Register */ -#define INTR_INTR_MSK_STS_REG 0x0000070c /* Interrupt Mask Status Register */ -#define INTR_INTR_MSK_SET_REG 0x00000710 /* Interrupt Mask Set Register */ -#define INTR_INTR_MSK_CLR_REG 0x00000714 /* Interrupt Mask Clear Register */ -#define INTR_EOI_CTRL 0x00000720 /* End of interrupt control register */ - - -/**************************************************************************** - * BCM70012_MISC_TOP_MISC1 - ***************************************************************************/ -#define MISC1_TX_FIRST_DESC_L_ADDR_LIST0 0x00000c00 /* Tx DMA Descriptor List0 First Descriptor lower Address */ -#define MISC1_TX_FIRST_DESC_U_ADDR_LIST0 0x00000c04 /* Tx DMA Descriptor List0 First Descriptor Upper Address */ -#define MISC1_TX_FIRST_DESC_L_ADDR_LIST1 0x00000c08 /* Tx DMA Descriptor List1 First Descriptor Lower Address */ -#define MISC1_TX_FIRST_DESC_U_ADDR_LIST1 0x00000c0c /* Tx DMA Descriptor List1 First Descriptor Upper Address */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS 0x00000c10 /* Tx DMA Software Descriptor List Control and Status */ -#define MISC1_TX_DMA_ERROR_STATUS 0x00000c18 /* Tx DMA Engine Error Status */ -#define MISC1_TX_DMA_LIST0_CUR_DESC_L_ADDR 0x00000c1c /* Tx DMA List0 Current Descriptor Lower Address */ -#define MISC1_TX_DMA_LIST0_CUR_DESC_U_ADDR 0x00000c20 /* Tx DMA List0 Current Descriptor Upper Address */ -#define MISC1_TX_DMA_LIST0_CUR_BYTE_CNT_REM 0x00000c24 /* Tx DMA List0 Current Descriptor Upper Address */ -#define MISC1_TX_DMA_LIST1_CUR_DESC_L_ADDR 0x00000c28 /* Tx DMA List1 Current Descriptor Lower Address */ -#define MISC1_TX_DMA_LIST1_CUR_DESC_U_ADDR 0x00000c2c /* Tx DMA List1 Current Descriptor Upper Address */ -#define MISC1_TX_DMA_LIST1_CUR_BYTE_CNT_REM 0x00000c30 /* Tx DMA List1 Current Descriptor Upper Address */ -#define MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST0 0x00000c34 /* Y Rx Descriptor List0 First Descriptor Lower Address */ -#define MISC1_Y_RX_FIRST_DESC_U_ADDR_LIST0 0x00000c38 /* Y Rx Descriptor List0 First Descriptor Upper Address */ -#define MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST1 0x00000c3c /* Y Rx Descriptor List1 First Descriptor Lower Address */ -#define MISC1_Y_RX_FIRST_DESC_U_ADDR_LIST1 0x00000c40 /* Y Rx Descriptor List1 First Descriptor Upper Address */ -#define MISC1_Y_RX_SW_DESC_LIST_CTRL_STS 0x00000c44 /* Y Rx Software Descriptor List Control and Status */ -#define MISC1_Y_RX_ERROR_STATUS 0x00000c4c /* Y Rx Engine Error Status */ -#define MISC1_Y_RX_LIST0_CUR_DESC_L_ADDR 0x00000c50 /* Y Rx List0 Current Descriptor Lower Address */ -#define MISC1_Y_RX_LIST0_CUR_DESC_U_ADDR 0x00000c54 /* Y Rx List0 Current Descriptor Upper Address */ -#define MISC1_Y_RX_LIST0_CUR_BYTE_CNT 0x00000c58 /* Y Rx List0 Current Descriptor Byte Count */ -#define MISC1_Y_RX_LIST1_CUR_DESC_L_ADDR 0x00000c5c /* Y Rx List1 Current Descriptor Lower address */ -#define MISC1_Y_RX_LIST1_CUR_DESC_U_ADDR 0x00000c60 /* Y Rx List1 Current Descriptor Upper address */ -#define MISC1_Y_RX_LIST1_CUR_BYTE_CNT 0x00000c64 /* Y Rx List1 Current Descriptor Byte Count */ -#define MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST0 0x00000c68 /* UV Rx Descriptor List0 First Descriptor lower Address */ -#define MISC1_UV_RX_FIRST_DESC_U_ADDR_LIST0 0x00000c6c /* UV Rx Descriptor List0 First Descriptor Upper Address */ -#define MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST1 0x00000c70 /* UV Rx Descriptor List1 First Descriptor Lower Address */ -#define MISC1_UV_RX_FIRST_DESC_U_ADDR_LIST1 0x00000c74 /* UV Rx Descriptor List1 First Descriptor Upper Address */ -#define MISC1_UV_RX_SW_DESC_LIST_CTRL_STS 0x00000c78 /* UV Rx Software Descriptor List Control and Status */ -#define MISC1_UV_RX_ERROR_STATUS 0x00000c7c /* UV Rx Engine Error Status */ -#define MISC1_UV_RX_LIST0_CUR_DESC_L_ADDR 0x00000c80 /* UV Rx List0 Current Descriptor Lower Address */ -#define MISC1_UV_RX_LIST0_CUR_DESC_U_ADDR 0x00000c84 /* UV Rx List0 Current Descriptor Upper Address */ -#define MISC1_UV_RX_LIST0_CUR_BYTE_CNT 0x00000c88 /* UV Rx List0 Current Descriptor Byte Count */ -#define MISC1_UV_RX_LIST1_CUR_DESC_L_ADDR 0x00000c8c /* UV Rx List1 Current Descriptor Lower Address */ -#define MISC1_UV_RX_LIST1_CUR_DESC_U_ADDR 0x00000c90 /* UV Rx List1 Current Descriptor Upper Address */ -#define MISC1_UV_RX_LIST1_CUR_BYTE_CNT 0x00000c94 /* UV Rx List1 Current Descriptor Byte Count */ -#define MISC1_DMA_DEBUG_OPTIONS_REG 0x00000c98 /* DMA Debug Options Register */ -#define MISC1_READ_CHANNEL_ERROR_STATUS 0x00000c9c /* Read Channel Error Status */ -#define MISC1_PCIE_DMA_CTRL 0x00000ca0 /* PCIE DMA Control Register */ - - -/**************************************************************************** - * BCM70012_MISC_TOP_MISC2 - ***************************************************************************/ -#define MISC2_GLOBAL_CTRL 0x00000d00 /* Global Control Register */ -#define MISC2_INTERNAL_STATUS 0x00000d04 /* Internal Status Register */ -#define MISC2_INTERNAL_STATUS_MUX_CTRL 0x00000d08 /* Internal Debug Mux Control */ -#define MISC2_DEBUG_FIFO_LENGTH 0x00000d0c /* Debug FIFO Length */ - - -/**************************************************************************** - * BCM70012_MISC_TOP_MISC3 - ***************************************************************************/ -#define MISC3_RESET_CTRL 0x00000e00 /* Reset Control Register */ -#define MISC3_BIST_CTRL 0x00000e04 /* BIST Control Register */ -#define MISC3_BIST_STATUS 0x00000e08 /* BIST Status Register */ -#define MISC3_RX_CHECKSUM 0x00000e0c /* Receive Checksum */ -#define MISC3_TX_CHECKSUM 0x00000e10 /* Transmit Checksum */ -#define MISC3_ECO_CTRL_CORE 0x00000e14 /* ECO Core Reset Control Register */ -#define MISC3_CSI_TEST_CTRL 0x00000e18 /* CSI Test Control Register */ -#define MISC3_HD_DVI_TEST_CTRL 0x00000e1c /* HD DVI Test Control Register */ - - -/**************************************************************************** - * BCM70012_MISC_TOP_MISC_PERST - ***************************************************************************/ -#define MISC_PERST_ECO_CTRL_PERST 0x00000e80 /* ECO PCIE Reset Control Register */ -#define MISC_PERST_DECODER_CTRL 0x00000e84 /* Decoder Control Register */ -#define MISC_PERST_CCE_STATUS 0x00000e88 /* Config Copy Engine Status */ -#define MISC_PERST_PCIE_DEBUG 0x00000e8c /* PCIE Debug Control Register */ -#define MISC_PERST_PCIE_DEBUG_STATUS 0x00000e90 /* PCIE Debug Status Register */ -#define MISC_PERST_VREG_CTRL 0x00000e94 /* Voltage Regulator Control Register */ -#define MISC_PERST_MEM_CTRL 0x00000e98 /* Memory Control Register */ -#define MISC_PERST_CLOCK_CTRL 0x00000e9c /* Clock Control Register */ - - -/**************************************************************************** - * BCM70012_MISC_TOP_GISB_ARBITER - ***************************************************************************/ -#define GISB_ARBITER_REVISION 0x00000f00 /* GISB ARBITER REVISION */ -#define GISB_ARBITER_SCRATCH 0x00000f04 /* GISB ARBITER Scratch Register */ -#define GISB_ARBITER_REQ_MASK 0x00000f08 /* GISB ARBITER Master Request Mask Register */ -#define GISB_ARBITER_TIMER 0x00000f0c /* GISB ARBITER Timer Value Register */ - - -/**************************************************************************** - * BCM70012_OTP_TOP_OTP - ***************************************************************************/ -#define OTP_CONFIG_INFO 0x00001400 /* OTP Configuration Register */ -#define OTP_CMD 0x00001404 /* OTP Command Register */ -#define OTP_STATUS 0x00001408 /* OTP Status Register */ -#define OTP_CONTENT_MISC 0x0000140c /* Content : Miscellaneous Register */ -#define OTP_CONTENT_AES_0 0x00001410 /* Content : AES Key 0 Register */ -#define OTP_CONTENT_AES_1 0x00001414 /* Content : AES Key 1 Register */ -#define OTP_CONTENT_AES_2 0x00001418 /* Content : AES Key 2 Register */ -#define OTP_CONTENT_AES_3 0x0000141c /* Content : AES Key 3 Register */ -#define OTP_CONTENT_SHA_0 0x00001420 /* Content : SHA Key 0 Register */ -#define OTP_CONTENT_SHA_1 0x00001424 /* Content : SHA Key 1 Register */ -#define OTP_CONTENT_SHA_2 0x00001428 /* Content : SHA Key 2 Register */ -#define OTP_CONTENT_SHA_3 0x0000142c /* Content : SHA Key 3 Register */ -#define OTP_CONTENT_SHA_4 0x00001430 /* Content : SHA Key 4 Register */ -#define OTP_CONTENT_SHA_5 0x00001434 /* Content : SHA Key 5 Register */ -#define OTP_CONTENT_SHA_6 0x00001438 /* Content : SHA Key 6 Register */ -#define OTP_CONTENT_SHA_7 0x0000143c /* Content : SHA Key 7 Register */ -#define OTP_CONTENT_CHECKSUM 0x00001440 /* Content : Checksum Register */ -#define OTP_PROG_CTRL 0x00001444 /* Programming Control Register */ -#define OTP_PROG_STATUS 0x00001448 /* Programming Status Register */ -#define OTP_PROG_PULSE 0x0000144c /* Program Pulse Width Register */ -#define OTP_VERIFY_PULSE 0x00001450 /* Verify Pulse Width Register */ -#define OTP_PROG_MASK 0x00001454 /* Program Mask Register */ -#define OTP_DATA_INPUT 0x00001458 /* Data Input Register */ -#define OTP_DATA_OUTPUT 0x0000145c /* Data Output Register */ - - -/**************************************************************************** - * BCM70012_AES_TOP_AES - ***************************************************************************/ -#define AES_CONFIG_INFO 0x00001800 /* AES Configuration Information Register */ -#define AES_CMD 0x00001804 /* AES Command Register */ -#define AES_STATUS 0x00001808 /* AES Status Register */ -#define AES_EEPROM_CONFIG 0x0000180c /* AES EEPROM Configuration Register */ -#define AES_EEPROM_DATA_0 0x00001810 /* AES EEPROM Data Register 0 */ -#define AES_EEPROM_DATA_1 0x00001814 /* AES EEPROM Data Register 1 */ -#define AES_EEPROM_DATA_2 0x00001818 /* AES EEPROM Data Register 2 */ -#define AES_EEPROM_DATA_3 0x0000181c /* AES EEPROM Data Register 3 */ - - -/**************************************************************************** - * BCM70012_DCI_TOP_DCI - ***************************************************************************/ -#define DCI_CMD 0x00001c00 /* DCI Command Register */ -#define DCI_STATUS 0x00001c04 /* DCI Status Register */ -#define DCI_DRAM_BASE_ADDR 0x00001c08 /* DRAM Base Address Register */ -#define DCI_FIRMWARE_ADDR 0x00001c0c /* Firmware Address Register */ -#define DCI_FIRMWARE_DATA 0x00001c10 /* Firmware Data Register */ -#define DCI_SIGNATURE_DATA_0 0x00001c14 /* Signature Data Register 0 */ -#define DCI_SIGNATURE_DATA_1 0x00001c18 /* Signature Data Register 1 */ -#define DCI_SIGNATURE_DATA_2 0x00001c1c /* Signature Data Register 2 */ -#define DCI_SIGNATURE_DATA_3 0x00001c20 /* Signature Data Register 3 */ -#define DCI_SIGNATURE_DATA_4 0x00001c24 /* Signature Data Register 4 */ -#define DCI_SIGNATURE_DATA_5 0x00001c28 /* Signature Data Register 5 */ -#define DCI_SIGNATURE_DATA_6 0x00001c2c /* Signature Data Register 6 */ -#define DCI_SIGNATURE_DATA_7 0x00001c30 /* Signature Data Register 7 */ - - -/**************************************************************************** - * BCM70012_TGT_TOP_INTR - ***************************************************************************/ -/**************************************************************************** - * INTR :: INTR_STATUS - ***************************************************************************/ -/* INTR :: INTR_STATUS :: reserved0 [31:26] */ -#define INTR_INTR_STATUS_reserved0_MASK 0xfc000000 -#define INTR_INTR_STATUS_reserved0_ALIGN 0 -#define INTR_INTR_STATUS_reserved0_BITS 6 -#define INTR_INTR_STATUS_reserved0_SHIFT 26 - -/* INTR :: INTR_STATUS :: PCIE_TGT_CA_ATTN [25:25] */ -#define INTR_INTR_STATUS_PCIE_TGT_CA_ATTN_MASK 0x02000000 -#define INTR_INTR_STATUS_PCIE_TGT_CA_ATTN_ALIGN 0 -#define INTR_INTR_STATUS_PCIE_TGT_CA_ATTN_BITS 1 -#define INTR_INTR_STATUS_PCIE_TGT_CA_ATTN_SHIFT 25 - -/* INTR :: INTR_STATUS :: PCIE_TGT_UR_ATTN [24:24] */ -#define INTR_INTR_STATUS_PCIE_TGT_UR_ATTN_MASK 0x01000000 -#define INTR_INTR_STATUS_PCIE_TGT_UR_ATTN_ALIGN 0 -#define INTR_INTR_STATUS_PCIE_TGT_UR_ATTN_BITS 1 -#define INTR_INTR_STATUS_PCIE_TGT_UR_ATTN_SHIFT 24 - -/* INTR :: INTR_STATUS :: reserved1 [23:14] */ -#define INTR_INTR_STATUS_reserved1_MASK 0x00ffc000 -#define INTR_INTR_STATUS_reserved1_ALIGN 0 -#define INTR_INTR_STATUS_reserved1_BITS 10 -#define INTR_INTR_STATUS_reserved1_SHIFT 14 - -/* INTR :: INTR_STATUS :: L1_UV_RX_DMA_ERR_INTR [13:13] */ -#define INTR_INTR_STATUS_L1_UV_RX_DMA_ERR_INTR_MASK 0x00002000 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_ERR_INTR_SHIFT 13 - -/* INTR :: INTR_STATUS :: L1_UV_RX_DMA_DONE_INTR [12:12] */ -#define INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_MASK 0x00001000 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_SHIFT 12 - -/* INTR :: INTR_STATUS :: L1_Y_RX_DMA_ERR_INTR [11:11] */ -#define INTR_INTR_STATUS_L1_Y_RX_DMA_ERR_INTR_MASK 0x00000800 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_ERR_INTR_SHIFT 11 - -/* INTR :: INTR_STATUS :: L1_Y_RX_DMA_DONE_INTR [10:10] */ -#define INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_MASK 0x00000400 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_SHIFT 10 - -/* INTR :: INTR_STATUS :: L1_TX_DMA_ERR_INTR [09:09] */ -#define INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_MASK 0x00000200 -#define INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_SHIFT 9 - -/* INTR :: INTR_STATUS :: L1_TX_DMA_DONE_INTR [08:08] */ -#define INTR_INTR_STATUS_L1_TX_DMA_DONE_INTR_MASK 0x00000100 -#define INTR_INTR_STATUS_L1_TX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L1_TX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L1_TX_DMA_DONE_INTR_SHIFT 8 - -/* INTR :: INTR_STATUS :: reserved2 [07:06] */ -#define INTR_INTR_STATUS_reserved2_MASK 0x000000c0 -#define INTR_INTR_STATUS_reserved2_ALIGN 0 -#define INTR_INTR_STATUS_reserved2_BITS 2 -#define INTR_INTR_STATUS_reserved2_SHIFT 6 - -/* INTR :: INTR_STATUS :: L0_UV_RX_DMA_ERR_INTR [05:05] */ -#define INTR_INTR_STATUS_L0_UV_RX_DMA_ERR_INTR_MASK 0x00000020 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_ERR_INTR_SHIFT 5 - -/* INTR :: INTR_STATUS :: L0_UV_RX_DMA_DONE_INTR [04:04] */ -#define INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_MASK 0x00000010 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_SHIFT 4 - -/* INTR :: INTR_STATUS :: L0_Y_RX_DMA_ERR_INTR [03:03] */ -#define INTR_INTR_STATUS_L0_Y_RX_DMA_ERR_INTR_MASK 0x00000008 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_ERR_INTR_SHIFT 3 - -/* INTR :: INTR_STATUS :: L0_Y_RX_DMA_DONE_INTR [02:02] */ -#define INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_MASK 0x00000004 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_SHIFT 2 - -/* INTR :: INTR_STATUS :: L0_TX_DMA_ERR_INTR [01:01] */ -#define INTR_INTR_STATUS_L0_TX_DMA_ERR_INTR_MASK 0x00000002 -#define INTR_INTR_STATUS_L0_TX_DMA_ERR_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_TX_DMA_ERR_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_TX_DMA_ERR_INTR_SHIFT 1 - -/* INTR :: INTR_STATUS :: L0_TX_DMA_DONE_INTR [00:00] */ -#define INTR_INTR_STATUS_L0_TX_DMA_DONE_INTR_MASK 0x00000001 -#define INTR_INTR_STATUS_L0_TX_DMA_DONE_INTR_ALIGN 0 -#define INTR_INTR_STATUS_L0_TX_DMA_DONE_INTR_BITS 1 -#define INTR_INTR_STATUS_L0_TX_DMA_DONE_INTR_SHIFT 0 - - -/**************************************************************************** - * MISC1 :: TX_SW_DESC_LIST_CTRL_STS - ***************************************************************************/ -/* MISC1 :: TX_SW_DESC_LIST_CTRL_STS :: reserved0 [31:04] */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_reserved0_MASK 0xfffffff0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_reserved0_ALIGN 0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_reserved0_BITS 28 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_reserved0_SHIFT 4 - -/* MISC1 :: TX_SW_DESC_LIST_CTRL_STS :: DMA_DATA_SERV_PTR [03:03] */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DMA_DATA_SERV_PTR_MASK 0x00000008 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DMA_DATA_SERV_PTR_ALIGN 0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DMA_DATA_SERV_PTR_BITS 1 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DMA_DATA_SERV_PTR_SHIFT 3 - -/* MISC1 :: TX_SW_DESC_LIST_CTRL_STS :: DESC_SERV_PTR [02:02] */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DESC_SERV_PTR_MASK 0x00000004 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DESC_SERV_PTR_ALIGN 0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DESC_SERV_PTR_BITS 1 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_DESC_SERV_PTR_SHIFT 2 - -/* MISC1 :: TX_SW_DESC_LIST_CTRL_STS :: TX_DMA_HALT_ON_ERROR [01:01] */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_HALT_ON_ERROR_MASK 0x00000002 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_HALT_ON_ERROR_ALIGN 0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_HALT_ON_ERROR_BITS 1 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_HALT_ON_ERROR_SHIFT 1 - -/* MISC1 :: TX_SW_DESC_LIST_CTRL_STS :: TX_DMA_RUN_STOP [00:00] */ -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_MASK 0x00000001 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_ALIGN 0 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_BITS 1 -#define MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_SHIFT 0 - - -/**************************************************************************** - * MISC1 :: TX_DMA_ERROR_STATUS - ***************************************************************************/ -/* MISC1 :: TX_DMA_ERROR_STATUS :: reserved0 [31:10] */ -#define MISC1_TX_DMA_ERROR_STATUS_reserved0_MASK 0xfffffc00 -#define MISC1_TX_DMA_ERROR_STATUS_reserved0_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_reserved0_BITS 22 -#define MISC1_TX_DMA_ERROR_STATUS_reserved0_SHIFT 10 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L1_DESC_TX_ABORT_ERRORS [09:09] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DESC_TX_ABORT_ERRORS_MASK 0x00000200 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DESC_TX_ABORT_ERRORS_SHIFT 9 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: reserved1 [08:08] */ -#define MISC1_TX_DMA_ERROR_STATUS_reserved1_MASK 0x00000100 -#define MISC1_TX_DMA_ERROR_STATUS_reserved1_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_reserved1_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_reserved1_SHIFT 8 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L0_DESC_TX_ABORT_ERRORS [07:07] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DESC_TX_ABORT_ERRORS_MASK 0x00000080 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DESC_TX_ABORT_ERRORS_SHIFT 7 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: reserved2 [06:06] */ -#define MISC1_TX_DMA_ERROR_STATUS_reserved2_MASK 0x00000040 -#define MISC1_TX_DMA_ERROR_STATUS_reserved2_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_reserved2_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_reserved2_SHIFT 6 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L1_DMA_DATA_TX_ABORT_ERRORS [05:05] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DMA_DATA_TX_ABORT_ERRORS_MASK 0x00000020 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DMA_DATA_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DMA_DATA_TX_ABORT_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_DMA_DATA_TX_ABORT_ERRORS_SHIFT 5 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L1_FIFO_FULL_ERRORS [04:04] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_MASK 0x00000010 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_SHIFT 4 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: reserved3 [03:03] */ -#define MISC1_TX_DMA_ERROR_STATUS_reserved3_MASK 0x00000008 -#define MISC1_TX_DMA_ERROR_STATUS_reserved3_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_reserved3_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_reserved3_SHIFT 3 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L0_DMA_DATA_TX_ABORT_ERRORS [02:02] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DMA_DATA_TX_ABORT_ERRORS_MASK 0x00000004 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DMA_DATA_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DMA_DATA_TX_ABORT_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_DMA_DATA_TX_ABORT_ERRORS_SHIFT 2 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: TX_L0_FIFO_FULL_ERRORS [01:01] */ -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_MASK 0x00000002 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_SHIFT 1 - -/* MISC1 :: TX_DMA_ERROR_STATUS :: reserved4 [00:00] */ -#define MISC1_TX_DMA_ERROR_STATUS_reserved4_MASK 0x00000001 -#define MISC1_TX_DMA_ERROR_STATUS_reserved4_ALIGN 0 -#define MISC1_TX_DMA_ERROR_STATUS_reserved4_BITS 1 -#define MISC1_TX_DMA_ERROR_STATUS_reserved4_SHIFT 0 - - -/**************************************************************************** - * MISC1 :: Y_RX_ERROR_STATUS - ***************************************************************************/ -/* MISC1 :: Y_RX_ERROR_STATUS :: reserved0 [31:14] */ -#define MISC1_Y_RX_ERROR_STATUS_reserved0_MASK 0xffffc000 -#define MISC1_Y_RX_ERROR_STATUS_reserved0_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_reserved0_BITS 18 -#define MISC1_Y_RX_ERROR_STATUS_reserved0_SHIFT 14 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L1_UNDERRUN_ERROR [13:13] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK 0x00002000 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_SHIFT 13 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L1_OVERRUN_ERROR [12:12] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_MASK 0x00001000 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_SHIFT 12 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L0_UNDERRUN_ERROR [11:11] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK 0x00000800 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_SHIFT 11 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L0_OVERRUN_ERROR [10:10] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_MASK 0x00000400 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_SHIFT 10 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L1_DESC_TX_ABORT_ERRORS [09:09] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_MASK 0x00000200 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_SHIFT 9 - -/* MISC1 :: Y_RX_ERROR_STATUS :: reserved1 [08:08] */ -#define MISC1_Y_RX_ERROR_STATUS_reserved1_MASK 0x00000100 -#define MISC1_Y_RX_ERROR_STATUS_reserved1_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_reserved1_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_reserved1_SHIFT 8 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L0_DESC_TX_ABORT_ERRORS [07:07] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_MASK 0x00000080 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_SHIFT 7 - -/* MISC1 :: Y_RX_ERROR_STATUS :: reserved2 [06:05] */ -#define MISC1_Y_RX_ERROR_STATUS_reserved2_MASK 0x00000060 -#define MISC1_Y_RX_ERROR_STATUS_reserved2_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_reserved2_BITS 2 -#define MISC1_Y_RX_ERROR_STATUS_reserved2_SHIFT 5 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L1_FIFO_FULL_ERRORS [04:04] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK 0x00000010 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_SHIFT 4 - -/* MISC1 :: Y_RX_ERROR_STATUS :: reserved3 [03:02] */ -#define MISC1_Y_RX_ERROR_STATUS_reserved3_MASK 0x0000000c -#define MISC1_Y_RX_ERROR_STATUS_reserved3_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_reserved3_BITS 2 -#define MISC1_Y_RX_ERROR_STATUS_reserved3_SHIFT 2 - -/* MISC1 :: Y_RX_ERROR_STATUS :: RX_L0_FIFO_FULL_ERRORS [01:01] */ -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK 0x00000002 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_SHIFT 1 - -/* MISC1 :: Y_RX_ERROR_STATUS :: reserved4 [00:00] */ -#define MISC1_Y_RX_ERROR_STATUS_reserved4_MASK 0x00000001 -#define MISC1_Y_RX_ERROR_STATUS_reserved4_ALIGN 0 -#define MISC1_Y_RX_ERROR_STATUS_reserved4_BITS 1 -#define MISC1_Y_RX_ERROR_STATUS_reserved4_SHIFT 0 - - -/**************************************************************************** - * MISC1 :: UV_RX_ERROR_STATUS - ***************************************************************************/ -/* MISC1 :: UV_RX_ERROR_STATUS :: reserved0 [31:14] */ -#define MISC1_UV_RX_ERROR_STATUS_reserved0_MASK 0xffffc000 -#define MISC1_UV_RX_ERROR_STATUS_reserved0_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_reserved0_BITS 18 -#define MISC1_UV_RX_ERROR_STATUS_reserved0_SHIFT 14 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L1_UNDERRUN_ERROR [13:13] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK 0x00002000 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_SHIFT 13 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L1_OVERRUN_ERROR [12:12] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_MASK 0x00001000 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_SHIFT 12 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L0_UNDERRUN_ERROR [11:11] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK 0x00000800 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_SHIFT 11 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L0_OVERRUN_ERROR [10:10] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_MASK 0x00000400 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_SHIFT 10 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L1_DESC_TX_ABORT_ERRORS [09:09] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_MASK 0x00000200 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_SHIFT 9 - -/* MISC1 :: UV_RX_ERROR_STATUS :: reserved1 [08:08] */ -#define MISC1_UV_RX_ERROR_STATUS_reserved1_MASK 0x00000100 -#define MISC1_UV_RX_ERROR_STATUS_reserved1_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_reserved1_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_reserved1_SHIFT 8 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L0_DESC_TX_ABORT_ERRORS [07:07] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_MASK 0x00000080 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_SHIFT 7 - -/* MISC1 :: UV_RX_ERROR_STATUS :: reserved2 [06:05] */ -#define MISC1_UV_RX_ERROR_STATUS_reserved2_MASK 0x00000060 -#define MISC1_UV_RX_ERROR_STATUS_reserved2_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_reserved2_BITS 2 -#define MISC1_UV_RX_ERROR_STATUS_reserved2_SHIFT 5 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L1_FIFO_FULL_ERRORS [04:04] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK 0x00000010 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_SHIFT 4 - -/* MISC1 :: UV_RX_ERROR_STATUS :: reserved3 [03:02] */ -#define MISC1_UV_RX_ERROR_STATUS_reserved3_MASK 0x0000000c -#define MISC1_UV_RX_ERROR_STATUS_reserved3_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_reserved3_BITS 2 -#define MISC1_UV_RX_ERROR_STATUS_reserved3_SHIFT 2 - -/* MISC1 :: UV_RX_ERROR_STATUS :: RX_L0_FIFO_FULL_ERRORS [01:01] */ -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK 0x00000002 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_SHIFT 1 - -/* MISC1 :: UV_RX_ERROR_STATUS :: reserved4 [00:00] */ -#define MISC1_UV_RX_ERROR_STATUS_reserved4_MASK 0x00000001 -#define MISC1_UV_RX_ERROR_STATUS_reserved4_ALIGN 0 -#define MISC1_UV_RX_ERROR_STATUS_reserved4_BITS 1 -#define MISC1_UV_RX_ERROR_STATUS_reserved4_SHIFT 0 - -/**************************************************************************** - * Datatype Definitions. - ***************************************************************************/ -#endif /* #ifndef MACFILE_H__ */ - -/* End of File */ - diff --git a/drivers/staging/crystalhd/crystalhd.h b/drivers/staging/crystalhd/crystalhd.h deleted file mode 100644 index b3a550bd5b06..000000000000 --- a/drivers/staging/crystalhd/crystalhd.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _CRYSTALHD_H_ -#define _CRYSTALHD_H_ - -#include "bc_dts_defs.h" -#include "crystalhd_misc.h" -#include "bc_dts_glob_lnx.h" -#include "crystalhd_hw.h" -#include "crystalhd_cmds.h" -#include "crystalhd_lnx.h" -#include "bcm_70012_regs.h" -#include "crystalhd_fw_if.h" - -#endif diff --git a/drivers/staging/crystalhd/crystalhd_cmds.c b/drivers/staging/crystalhd/crystalhd_cmds.c deleted file mode 100644 index 642f438793c3..000000000000 --- a/drivers/staging/crystalhd/crystalhd_cmds.c +++ /dev/null @@ -1,1066 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_cmds . c - * - * Description: - * BCM70010 Linux driver user command interfaces. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#include "crystalhd.h" - -static struct crystalhd_user *bc_cproc_get_uid(struct crystalhd_cmd *ctx) -{ - struct crystalhd_user *user = NULL; - int i; - - for (i = 0; i < BC_LINK_MAX_OPENS; i++) { - if (!ctx->user[i].in_use) { - user = &ctx->user[i]; - break; - } - } - - return user; -} - -static int bc_cproc_get_user_count(struct crystalhd_cmd *ctx) -{ - int i, count = 0; - - for (i = 0; i < BC_LINK_MAX_OPENS; i++) { - if (ctx->user[i].in_use) - count++; - } - - return count; -} - -static void bc_cproc_mark_pwr_state(struct crystalhd_cmd *ctx) -{ - int i; - - for (i = 0; i < BC_LINK_MAX_OPENS; i++) { - if (!ctx->user[i].in_use) - continue; - if (ctx->user[i].mode == DTS_DIAG_MODE || - ctx->user[i].mode == DTS_PLAYBACK_MODE) { - ctx->pwr_state_change = 1; - break; - } - } -} - -static enum BC_STATUS bc_cproc_notify_mode(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - int rc = 0, i = 0; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - if (ctx->user[idata->u_id].mode != DTS_MODE_INV) { - BCMLOG_ERR("Close the handle first..\n"); - return BC_STS_ERR_USAGE; - } - if (idata->udata.u.NotifyMode.Mode == DTS_MONITOR_MODE) { - ctx->user[idata->u_id].mode = idata->udata.u.NotifyMode.Mode; - return BC_STS_SUCCESS; - } - if (ctx->state != BC_LINK_INVALID) { - BCMLOG_ERR("Link invalid state %d\n", ctx->state); - return BC_STS_ERR_USAGE; - } - /* Check for duplicate playback sessions..*/ - for (i = 0; i < BC_LINK_MAX_OPENS; i++) { - if (ctx->user[i].mode == DTS_DIAG_MODE || - ctx->user[i].mode == DTS_PLAYBACK_MODE) { - BCMLOG_ERR("multiple playback sessions are not supported..\n"); - return BC_STS_ERR_USAGE; - } - } - ctx->cin_wait_exit = 0; - ctx->user[idata->u_id].mode = idata->udata.u.NotifyMode.Mode; - /* Setup mmap pool for uaddr sgl mapping..*/ - rc = crystalhd_create_dio_pool(ctx->adp, BC_LINK_MAX_SGLS); - if (rc) - return BC_STS_ERROR; - - /* Setup Hardware DMA rings */ - return crystalhd_hw_setup_dma_rings(&ctx->hw_ctx); -} - -static enum BC_STATUS bc_cproc_get_version(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - idata->udata.u.VerInfo.DriverMajor = crystalhd_kmod_major; - idata->udata.u.VerInfo.DriverMinor = crystalhd_kmod_minor; - idata->udata.u.VerInfo.DriverRevision = crystalhd_kmod_rev; - return BC_STS_SUCCESS; -} - - -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"); - return BC_STS_INV_ARG; - } - - crystalhd_pci_cfg_rd(ctx->adp, 0, 2, - (uint32_t *)&idata->udata.u.hwType.PciVenId); - crystalhd_pci_cfg_rd(ctx->adp, 2, 2, - (uint32_t *)&idata->udata.u.hwType.PciDevId); - crystalhd_pci_cfg_rd(ctx->adp, 8, 1, - (uint32_t *)&idata->udata.u.hwType.HwRev); - - return BC_STS_SUCCESS; -} - -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; - idata->udata.u.regAcc.Value = bc_dec_reg_rd(ctx->adp, - idata->udata.u.regAcc.Offset); - return BC_STS_SUCCESS; -} - -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; - - bc_dec_reg_wr(ctx->adp, idata->udata.u.regAcc.Offset, - idata->udata.u.regAcc.Value); - - return BC_STS_SUCCESS; -} - -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; - - idata->udata.u.regAcc.Value = crystalhd_reg_rd(ctx->adp, - idata->udata.u.regAcc.Offset); - return BC_STS_SUCCESS; -} - -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; - - crystalhd_reg_wr(ctx->adp, idata->udata.u.regAcc.Offset, - idata->udata.u.regAcc.Value); - - return BC_STS_SUCCESS; -} - -static enum BC_STATUS bc_cproc_mem_rd(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata || !idata->add_cdata) - return BC_STS_INV_ARG; - - if (idata->udata.u.devMem.NumDwords > (idata->add_cdata_sz / 4)) { - BCMLOG_ERR("insufficient buffer\n"); - return BC_STS_INV_ARG; - } - sts = crystalhd_mem_rd(ctx->adp, idata->udata.u.devMem.StartOff, - idata->udata.u.devMem.NumDwords, - (uint32_t *)idata->add_cdata); - return sts; - -} - -static enum BC_STATUS bc_cproc_mem_wr(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata || !idata->add_cdata) - return BC_STS_INV_ARG; - - if (idata->udata.u.devMem.NumDwords > (idata->add_cdata_sz / 4)) { - BCMLOG_ERR("insufficient buffer\n"); - return BC_STS_INV_ARG; - } - - sts = crystalhd_mem_wr(ctx->adp, idata->udata.u.devMem.StartOff, - idata->udata.u.devMem.NumDwords, - (uint32_t *)idata->add_cdata); - return sts; -} - -static enum BC_STATUS bc_cproc_cfg_rd(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - uint32_t ix, cnt, off, len; - enum BC_STATUS sts = BC_STS_SUCCESS; - uint32_t *temp; - - if (!ctx || !idata) - return BC_STS_INV_ARG; - - temp = (uint32_t *) idata->udata.u.pciCfg.pci_cfg_space; - off = idata->udata.u.pciCfg.Offset; - len = idata->udata.u.pciCfg.Size; - - if (len <= 4) - return crystalhd_pci_cfg_rd(ctx->adp, off, len, temp); - - /* Truncate to dword alignment..*/ - len = 4; - cnt = idata->udata.u.pciCfg.Size / len; - for (ix = 0; ix < cnt; ix++) { - sts = crystalhd_pci_cfg_rd(ctx->adp, off, len, &temp[ix]); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("config read : %d\n", sts); - return sts; - } - off += len; - } - - return sts; -} - -static enum BC_STATUS bc_cproc_cfg_wr(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - uint32_t ix, cnt, off, len; - enum BC_STATUS sts = BC_STS_SUCCESS; - uint32_t *temp; - - if (!ctx || !idata) - return BC_STS_INV_ARG; - - temp = (uint32_t *) idata->udata.u.pciCfg.pci_cfg_space; - off = idata->udata.u.pciCfg.Offset; - len = idata->udata.u.pciCfg.Size; - - if (len <= 4) - return crystalhd_pci_cfg_wr(ctx->adp, off, len, temp[0]); - - /* Truncate to dword alignment..*/ - len = 4; - cnt = idata->udata.u.pciCfg.Size / len; - for (ix = 0; ix < cnt; ix++) { - sts = crystalhd_pci_cfg_wr(ctx->adp, off, len, temp[ix]); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("config write : %d\n", sts); - return sts; - } - off += len; - } - - return sts; -} - -static enum BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata || !idata->add_cdata || !idata->add_cdata_sz) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - if (ctx->state != BC_LINK_INVALID) { - BCMLOG_ERR("Link invalid state %d\n", ctx->state); - return BC_STS_ERR_USAGE; - } - - sts = crystalhd_download_fw(ctx->adp, (uint8_t *)idata->add_cdata, - idata->add_cdata_sz); - - if (sts != BC_STS_SUCCESS) - BCMLOG_ERR("Firmware Download Failure!! - %d\n", sts); - else - ctx->state |= BC_LINK_INIT; - - return sts; -} - -/* - * We use the FW_CMD interface to sync up playback state with application - * and firmware. This function will perform the required pre and post - * processing of the Firmware commands. - * - * Pause - - * Disable capture after decoder pause. - * Resume - - * First enable capture and issue decoder resume command. - * Flush - - * Abort pending input transfers and issue decoder flush command. - * - */ -static enum BC_STATUS bc_cproc_do_fw_cmd(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - enum BC_STATUS sts; - uint32_t *cmd; - - if (!(ctx->state & BC_LINK_INIT)) { - BCMLOG_ERR("Link invalid state %d\n", ctx->state); - return BC_STS_ERR_USAGE; - } - - cmd = idata->udata.u.fwCmd.cmd; - - /* Pre-Process */ - if (cmd[0] == eCMD_C011_DEC_CHAN_PAUSE) { - if (!cmd[3]) { - ctx->state &= ~BC_LINK_PAUSED; - crystalhd_hw_unpause(&ctx->hw_ctx); - } - } else if (cmd[0] == eCMD_C011_DEC_CHAN_FLUSH) { - BCMLOG(BCMLOG_INFO, "Flush issued\n"); - if (cmd[3]) - ctx->cin_wait_exit = 1; - } - - sts = crystalhd_do_fw_cmd(&ctx->hw_ctx, &idata->udata.u.fwCmd); - - if (sts != BC_STS_SUCCESS) { - BCMLOG(BCMLOG_INFO, "fw cmd %x failed\n", cmd[0]); - return sts; - } - - /* Post-Process */ - if (cmd[0] == eCMD_C011_DEC_CHAN_PAUSE) { - if (cmd[3]) { - ctx->state |= BC_LINK_PAUSED; - crystalhd_hw_pause(&ctx->hw_ctx); - } - } - - return 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"); - return; - } - if (sts == BC_STS_IO_USER_ABORT) - return; - - dio_hnd->uinfo.comp_sts = sts; - dio_hnd->uinfo.ev_sts = 1; - crystalhd_set_event(event); -} - -static enum BC_STATUS bc_cproc_codein_sleep(struct crystalhd_cmd *ctx) -{ - wait_queue_head_t sleep_ev; - int rc = 0; - - if (ctx->state & BC_LINK_SUSPEND) - return BC_STS_IO_USER_ABORT; - - if (ctx->cin_wait_exit) { - ctx->cin_wait_exit = 0; - return BC_STS_CMD_CANCELLED; - } - crystalhd_create_event(&sleep_ev); - crystalhd_wait_on_event(&sleep_ev, 0, 100, rc, 0); - if (rc == -EINTR) - return BC_STS_IO_USER_ABORT; - - return BC_STS_SUCCESS; -} - -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; - enum BC_STATUS sts = BC_STS_SUCCESS; - wait_queue_head_t event; - int rc = 0; - - if (!ctx || !idata || !dio) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - crystalhd_create_event(&event); - - ctx->tx_list_id = 0; - /* msleep_interruptible(2000); */ - sts = crystalhd_hw_post_tx(&ctx->hw_ctx, dio, bc_proc_in_completion, - &event, &tx_listid, - idata->udata.u.ProcInput.Encrypted); - - while (sts == BC_STS_BUSY) { - sts = bc_cproc_codein_sleep(ctx); - if (sts != BC_STS_SUCCESS) - break; - sts = crystalhd_hw_post_tx(&ctx->hw_ctx, dio, - bc_proc_in_completion, - &event, &tx_listid, - idata->udata.u.ProcInput.Encrypted); - } - if (sts != BC_STS_SUCCESS) { - BCMLOG(BCMLOG_DBG, "_hw_txdma returning sts:%d\n", sts); - return sts; - } - if (ctx->cin_wait_exit) - ctx->cin_wait_exit = 0; - - ctx->tx_list_id = tx_listid; - - /* _post() succeeded.. wait for the completion. */ - crystalhd_wait_on_event(&event, (dio->uinfo.ev_sts), 3000, rc, 0); - ctx->tx_list_id = 0; - if (!rc) { - return dio->uinfo.comp_sts; - } else if (rc == -EBUSY) { - BCMLOG(BCMLOG_DBG, "_tx_post() T/O\n"); - sts = BC_STS_TIMEOUT; - } else if (rc == -EINTR) { - BCMLOG(BCMLOG_DBG, "Tx Wait Signal int.\n"); - sts = BC_STS_IO_USER_ABORT; - } else { - sts = BC_STS_IO_ERROR; - } - - /* We are cancelling the IO from the same context as the _post(). - * so no need to wait on the event again.. the return itself - * ensures the release of our resources. - */ - crystalhd_hw_cancel_tx(&ctx->hw_ctx, tx_listid); - - return sts; -} - -/* Helper function to check on user buffers */ -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) { - BCMLOG_ERR("%s->Invalid Arg %p %x\n", - ((pin) ? "TX" : "RX"), ubuff, ub_sz); - return BC_STS_INV_ARG; - } - - /* Check for alignment */ - if (((uintptr_t)ubuff) & 0x03) { - BCMLOG_ERR( - "%s-->Un-aligned address not implemented yet.. %p\n", - ((pin) ? "TX" : "RX"), ubuff); - return BC_STS_NOT_IMPL; - } - if (pin) - return BC_STS_SUCCESS; - - if (!en_422 && !uv_off) { - BCMLOG_ERR("Need UV offset for 420 mode.\n"); - return BC_STS_INV_ARG; - } - - if (en_422 && uv_off) { - BCMLOG_ERR("UV offset in 422 mode ??\n"); - return BC_STS_INV_ARG; - } - - return BC_STS_SUCCESS; -} - -static enum BC_STATUS bc_cproc_proc_input(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - void *ubuff; - uint32_t ub_sz; - struct crystalhd_dio_req *dio_hnd = NULL; - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - ubuff = idata->udata.u.ProcInput.pDmaBuff; - ub_sz = idata->udata.u.ProcInput.BuffSz; - - sts = bc_cproc_check_inbuffs(1, ubuff, ub_sz, 0, 0); - if (sts != BC_STS_SUCCESS) - return sts; - - 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); - return sts; - } - - if (!dio_hnd) - return BC_STS_ERROR; - - sts = bc_cproc_hw_txdma(ctx, idata, dio_hnd); - - crystalhd_unmap_dio(ctx->adp, dio_hnd); - - return sts; -} - -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; - struct crystalhd_dio_req *dio_hnd = NULL; - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - ubuff = idata->udata.u.RxBuffs.YuvBuff; - ub_sz = idata->udata.u.RxBuffs.YuvBuffSz; - uv_off = idata->udata.u.RxBuffs.UVbuffOffset; - en_422 = idata->udata.u.RxBuffs.b422Mode; - - sts = bc_cproc_check_inbuffs(0, ubuff, ub_sz, uv_off, en_422); - if (sts != BC_STS_SUCCESS) - return sts; - - 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); - return sts; - } - - if (!dio_hnd) - return BC_STS_ERROR; - - sts = crystalhd_hw_add_cap_buffer(&ctx->hw_ctx, dio_hnd, - (ctx->state == BC_LINK_READY)); - if ((sts != BC_STS_SUCCESS) && (sts != BC_STS_BUSY)) { - crystalhd_unmap_dio(ctx->adp, dio_hnd); - return sts; - } - - return BC_STS_SUCCESS; -} - -static enum BC_STATUS bc_cproc_fmt_change(struct crystalhd_cmd *ctx, - struct crystalhd_dio_req *dio) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - sts = crystalhd_hw_add_cap_buffer(&ctx->hw_ctx, dio, 0); - if (sts != BC_STS_SUCCESS) - return sts; - - ctx->state |= BC_LINK_FMT_CHG; - if (ctx->state == BC_LINK_READY) - sts = crystalhd_hw_start_capture(&ctx->hw_ctx); - - return sts; -} - -static enum BC_STATUS bc_cproc_fetch_frame(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - 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"); - return BC_STS_INV_ARG; - } - - if (!(ctx->state & BC_LINK_CAP_EN)) { - BCMLOG(BCMLOG_DBG, "Capture not enabled..%x\n", ctx->state); - return BC_STS_ERR_USAGE; - } - - frame = &idata->udata.u.DecOutData; - - sts = crystalhd_hw_get_cap_buffer(&ctx->hw_ctx, &frame->PibInfo, &dio); - if (sts != BC_STS_SUCCESS) - return (ctx->state & BC_LINK_SUSPEND) ? - BC_STS_IO_USER_ABORT : sts; - - frame->Flags = dio->uinfo.comp_flags; - - if (frame->Flags & COMP_FLAG_FMT_CHANGE) - return bc_cproc_fmt_change(ctx, dio); - - frame->OutPutBuffs.YuvBuff = dio->uinfo.xfr_buff; - frame->OutPutBuffs.YuvBuffSz = dio->uinfo.xfr_len; - frame->OutPutBuffs.UVbuffOffset = dio->uinfo.uv_offset; - frame->OutPutBuffs.b422Mode = dio->uinfo.b422mode; - - frame->OutPutBuffs.YBuffDoneSz = dio->uinfo.y_done_sz; - frame->OutPutBuffs.UVBuffDoneSz = dio->uinfo.uv_done_sz; - - crystalhd_unmap_dio(ctx->adp, dio); - - return BC_STS_SUCCESS; -} - -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) - return crystalhd_hw_start_capture(&ctx->hw_ctx); - - return BC_STS_SUCCESS; -} - -static enum BC_STATUS bc_cproc_flush_cap_buffs(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - 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) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - if (!(ctx->state & BC_LINK_CAP_EN)) - return BC_STS_ERR_USAGE; - - /* We should ack flush even when we are in paused/suspend state */ - if (!(ctx->state & BC_LINK_READY)) - return crystalhd_hw_stop_capture(&ctx->hw_ctx); - - ctx->state &= ~(BC_LINK_CAP_EN|BC_LINK_FMT_CHG); - - frame = &idata->udata.u.DecOutData; - for (count = 0; count < BC_RX_LIST_CNT; count++) { - - sts = crystalhd_hw_get_cap_buffer(&ctx->hw_ctx, - &frame->PibInfo, &dio); - if (sts != BC_STS_SUCCESS) - break; - - crystalhd_unmap_dio(ctx->adp, dio); - } - - return crystalhd_hw_stop_capture(&ctx->hw_ctx); -} - -static enum BC_STATUS bc_cproc_get_stats(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - struct BC_DTS_STATS *stats; - struct crystalhd_hw_stats hw_stats; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - crystalhd_hw_stats(&ctx->hw_ctx, &hw_stats); - - stats = &idata->udata.u.drvStat; - stats->drvRLL = hw_stats.rdyq_count; - stats->drvFLL = hw_stats.freeq_count; - stats->DrvTotalFrmDropped = hw_stats.rx_errors; - stats->DrvTotalHWErrs = hw_stats.rx_errors + hw_stats.tx_errors; - stats->intCount = hw_stats.num_interrupts; - stats->DrvIgnIntrCnt = hw_stats.num_interrupts - - hw_stats.dev_interrupts; - stats->TxFifoBsyCnt = hw_stats.cin_busy; - stats->pauseCount = hw_stats.pause_cnt; - - if (ctx->pwr_state_change) - stats->pwr_state_change = 1; - if (ctx->state & BC_LINK_PAUSED) - stats->DrvPauseTime = 1; - - return BC_STS_SUCCESS; -} - -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 enum BC_STATUS bc_cproc_chg_clk(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - struct BC_CLOCK *clock; - uint32_t oldClk; - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - clock = &idata->udata.u.clockValue; - oldClk = ctx->hw_ctx.core_clock_mhz; - ctx->hw_ctx.core_clock_mhz = clock->clk; - - if (ctx->state & BC_LINK_READY) { - sts = crystalhd_hw_set_core_clock(&ctx->hw_ctx); - if (sts == BC_STS_CLK_NOCHG) - ctx->hw_ctx.core_clock_mhz = oldClk; - } - - clock->clk = ctx->hw_ctx.core_clock_mhz; - - return sts; -} - -/*=============== Cmd Proc Table.. ======================================*/ -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}, - { BCM_IOC_REG_WR, bc_cproc_reg_wr, 0}, - { BCM_IOC_FPGA_RD, bc_cproc_link_reg_rd, 0}, - { BCM_IOC_FPGA_WR, bc_cproc_link_reg_wr, 0}, - { BCM_IOC_MEM_RD, bc_cproc_mem_rd, 0}, - { BCM_IOC_MEM_WR, bc_cproc_mem_wr, 0}, - { BCM_IOC_RD_PCI_CFG, bc_cproc_cfg_rd, 0}, - { BCM_IOC_WR_PCI_CFG, bc_cproc_cfg_wr, 1}, - { BCM_IOC_FW_DOWNLOAD, bc_cproc_download_fw, 1}, - { BCM_IOC_FW_CMD, bc_cproc_do_fw_cmd, 1}, - { BCM_IOC_PROC_INPUT, bc_cproc_proc_input, 1}, - { BCM_IOC_ADD_RXBUFFS, bc_cproc_add_cap_buff, 1}, - { BCM_IOC_FETCH_RXBUFF, bc_cproc_fetch_frame, 1}, - { BCM_IOC_START_RX_CAP, bc_cproc_start_capture, 1}, - { BCM_IOC_FLUSH_RX_CAP, bc_cproc_flush_cap_buffs, 1}, - { BCM_IOC_GET_DRV_STAT, bc_cproc_get_stats, 0}, - { BCM_IOC_RST_DRV_STAT, bc_cproc_reset_stats, 0}, - { BCM_IOC_NOTIFY_MODE, bc_cproc_notify_mode, 0}, - { BCM_IOC_CHG_CLK, bc_cproc_chg_clk, 0}, - { BCM_IOC_END, NULL}, -}; - -/*=============== Cmd Proc Functions.. ===================================*/ - -/** - * crystalhd_suspend - Power management suspend request. - * @ctx: Command layer context. - * @idata: Iodata - required for internal use. - * - * Return: - * status - * - * 1. Set the state to Suspend. - * 2. Flush the Rx Buffers it will unmap all the buffers and - * stop the RxDMA engine. - * 3. Cancel The TX Io and Stop Dma Engine. - * 4. Put the DDR in to deep sleep. - * 5. Stop the hardware putting it in to Reset State. - * - * Current gstreamer frame work does not provide any power management - * related notification to user mode decoder plug-in. As a work-around - * we pass on the power management notification to our plug-in by completing - * all outstanding requests with BC_STS_IO_USER_ABORT return code. - */ -enum BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, - struct crystalhd_ioctl_data *idata) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!ctx || !idata) { - BCMLOG_ERR("Invalid Parameters\n"); - return BC_STS_ERROR; - } - - if (ctx->state & BC_LINK_SUSPEND) - return BC_STS_SUCCESS; - - if (ctx->state == BC_LINK_INVALID) { - BCMLOG(BCMLOG_DBG, "Nothing To Do Suspend Success\n"); - return BC_STS_SUCCESS; - } - - ctx->state |= BC_LINK_SUSPEND; - - bc_cproc_mark_pwr_state(ctx); - - if (ctx->state & BC_LINK_CAP_EN) { - sts = bc_cproc_flush_cap_buffs(ctx, idata); - if (sts != BC_STS_SUCCESS) - return sts; - } - - if (ctx->tx_list_id) { - sts = crystalhd_hw_cancel_tx(&ctx->hw_ctx, ctx->tx_list_id); - if (sts != BC_STS_SUCCESS) - return sts; - } - - sts = crystalhd_hw_suspend(&ctx->hw_ctx); - if (sts != BC_STS_SUCCESS) - return sts; - - BCMLOG(BCMLOG_DBG, "BCM70012 suspend success\n"); - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_resume - Resume frame capture. - * @ctx: Command layer contextx. - * - * Return: - * status - * - * - * Resume frame capture. - * - * PM_Resume can't resume the playback state back to pre-suspend state - * because we don't keep video clip related information within driver. - * To get back to the pre-suspend state App will re-open the device and - * start a new playback session from the pre-suspend clip position. - * - */ -enum BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx) -{ - BCMLOG(BCMLOG_DBG, "crystalhd_resume Success %x\n", ctx->state); - - bc_cproc_mark_pwr_state(ctx); - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_user_open - Create application handle. - * @ctx: Command layer contextx. - * @user_ctx: User ID context. - * - * Return: - * status - * - * Creates an application specific UID and allocates - * application specific resources. HW layer initialization - * is done for the first open request. - */ -enum BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, - struct crystalhd_user **user_ctx) -{ - struct crystalhd_user *uc; - - if (!ctx || !user_ctx) { - BCMLOG_ERR("Invalid arg..\n"); - return BC_STS_INV_ARG; - } - - uc = bc_cproc_get_uid(ctx); - if (!uc) { - BCMLOG(BCMLOG_INFO, "No free user context...\n"); - return BC_STS_BUSY; - } - - BCMLOG(BCMLOG_INFO, "Opening new user[%x] handle\n", uc->uid); - - crystalhd_hw_open(&ctx->hw_ctx, ctx->adp); - - uc->in_use = 1; - - *user_ctx = uc; - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_user_close - Close application handle. - * @ctx: Command layer contextx. - * @uc: User ID context. - * - * Return: - * status - * - * Closer application handle and release app specific - * resources. - */ -enum BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, - struct crystalhd_user *uc) -{ - uint32_t mode = uc->mode; - - ctx->user[uc->uid].mode = DTS_MODE_INV; - ctx->user[uc->uid].in_use = 0; - ctx->cin_wait_exit = 1; - ctx->pwr_state_change = 0; - - BCMLOG(BCMLOG_INFO, "Closing user[%x] handle\n", uc->uid); - - if ((mode == DTS_DIAG_MODE) || (mode == DTS_PLAYBACK_MODE)) { - crystalhd_hw_free_dma_rings(&ctx->hw_ctx); - crystalhd_destroy_dio_pool(ctx->adp); - } else if (bc_cproc_get_user_count(ctx)) { - return BC_STS_SUCCESS; - } - - crystalhd_hw_close(&ctx->hw_ctx); - - ctx->state = BC_LINK_INVALID; - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_setup_cmd_context - Setup Command layer resources. - * @ctx: Command layer contextx. - * @adp: Adapter context - * - * Return: - * status - * - * Called at the time of driver load. - */ -enum BC_STATUS crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, - struct crystalhd_adp *adp) -{ - int i = 0; - - if (!ctx || !adp) { - BCMLOG_ERR("Invalid arg!!\n"); - return BC_STS_INV_ARG; - } - - if (ctx->adp) - BCMLOG(BCMLOG_DBG, "Resetting Cmd context delete missing..\n"); - - ctx->adp = adp; - for (i = 0; i < BC_LINK_MAX_OPENS; i++) { - ctx->user[i].uid = i; - ctx->user[i].in_use = 0; - ctx->user[i].mode = DTS_MODE_INV; - } - - /*Open and Close the Hardware to put it in to sleep state*/ - crystalhd_hw_open(&ctx->hw_ctx, ctx->adp); - crystalhd_hw_close(&ctx->hw_ctx); - return BC_STS_SUCCESS; -} - -/** - * crystalhd_delete_cmd_context - Release Command layer resources. - * @ctx: Command layer contextx. - * - * Return: - * status - * - * Called at the time of driver un-load. - */ -enum BC_STATUS crystalhd_delete_cmd_context(struct crystalhd_cmd *ctx) -{ - BCMLOG(BCMLOG_DBG, "Deleting Command context..\n"); - - ctx->adp = NULL; - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_get_cmd_proc - Cproc table lookup. - * @ctx: Command layer contextx. - * @cmd: IOCTL command code. - * @uc: User ID context. - * - * Return: - * command proc function pointer - * - * This function checks the process context, application's - * mode of operation and returns the function pointer - * from the cproc table. - */ -crystalhd_cmd_proc crystalhd_get_cmd_proc(struct crystalhd_cmd *ctx, - uint32_t cmd, struct crystalhd_user *uc) -{ - crystalhd_cmd_proc cproc = NULL; - unsigned int i, tbl_sz; - - if (!ctx) { - BCMLOG_ERR("Invalid arg.. Cmd[%d]\n", cmd); - return NULL; - } - - if ((cmd != BCM_IOC_GET_DRV_STAT) && (ctx->state & BC_LINK_SUSPEND)) { - BCMLOG_ERR("Invalid State [suspend Set].. Cmd[%d]\n", cmd); - return NULL; - } - - 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) && - (g_crystalhd_cproc_tbl[i].block_mon)) { - BCMLOG(BCMLOG_INFO, "Blocking cmd %d\n", cmd); - break; - } - cproc = g_crystalhd_cproc_tbl[i].cmd_proc; - break; - } - } - - return cproc; -} - -/** - * crystalhd_cmd_interrupt - ISR entry point - * @ctx: Command layer contextx. - * - * Return: - * TRUE: If interrupt from bcm70012 device. - * - * - * ISR entry point from OS layer. - */ -bool crystalhd_cmd_interrupt(struct crystalhd_cmd *ctx) -{ - if (!ctx) { - BCMLOG_ERR("Invalid arg..\n"); - return false; - } - - return crystalhd_hw_interrupt(ctx->adp, &ctx->hw_ctx); -} diff --git a/drivers/staging/crystalhd/crystalhd_cmds.h b/drivers/staging/crystalhd/crystalhd_cmds.h deleted file mode 100644 index b5bf59dbcde9..000000000000 --- a/drivers/staging/crystalhd/crystalhd_cmds.h +++ /dev/null @@ -1,92 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_cmds . h - * - * Description: - * BCM70010 Linux driver user command interfaces. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#ifndef _CRYSTALHD_CMDS_H_ -#define _CRYSTALHD_CMDS_H_ - -/* - * NOTE:: This is the main interface file between the Linux layer - * and the hardware layer. This file will use the definitions - * from _dts_glob and dts_defs etc.. which are defined for - * windows. - */ - -#include "crystalhd.h" - -enum crystalhd_state { - BC_LINK_INVALID = 0x00, - BC_LINK_INIT = 0x01, - BC_LINK_CAP_EN = 0x02, - BC_LINK_FMT_CHG = 0x04, - BC_LINK_SUSPEND = 0x10, - BC_LINK_PAUSED = 0x20, - BC_LINK_READY = (BC_LINK_INIT | BC_LINK_CAP_EN | BC_LINK_FMT_CHG), -}; - -struct crystalhd_user { - uint32_t uid; - uint32_t in_use; - uint32_t mode; -}; - -#define DTS_MODE_INV (-1) - -struct crystalhd_cmd { - uint32_t state; - struct crystalhd_adp *adp; - struct crystalhd_user user[BC_LINK_MAX_OPENS]; - - spinlock_t ctx_lock; - uint32_t tx_list_id; - uint32_t cin_wait_exit; - uint32_t pwr_state_change; - struct crystalhd_hw hw_ctx; -}; - -typedef enum BC_STATUS(*crystalhd_cmd_proc)(struct crystalhd_cmd *, - struct crystalhd_ioctl_data *); - -struct crystalhd_cmd_tbl { - uint32_t cmd_id; - const crystalhd_cmd_proc cmd_proc; - uint32_t block_mon; -}; - -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); -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 deleted file mode 100644 index 05615e2a231a..000000000000 --- a/drivers/staging/crystalhd/crystalhd_fw_if.h +++ /dev/null @@ -1,370 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_fw_if . h - * - * Description: - * BCM70012 Firmware interface definitions. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#ifndef _CRYSTALHD_FW_IF_H_ -#define _CRYSTALHD_FW_IF_H_ - -/* TBD: Pull in only required defs into this file.. */ - -/* User Data Header */ -struct user_data { - struct user_data *next; - uint32_t type; - uint32_t size; -}; - -/*------------------------------------------------------* - * MPEG Extension to the PPB * - *------------------------------------------------------*/ -struct ppb_mpeg { - uint32_t to_be_defined; - uint32_t valid; - - /* Always valid, defaults to picture size if no - sequence display extension in the stream. */ - uint32_t display_horizontal_size; - uint32_t display_vertical_size; - - /* MPEG_VALID_PANSCAN - Offsets are a copy values from the MPEG stream. */ - uint32_t offset_count; - int32_t horizontal_offset[3]; - int32_t vertical_offset[3]; - - /* MPEG_VALID_USERDATA - User data is in the form of a linked list. */ - int32_t userDataSize; - struct user_data *userData; - -}; - - -/*------------------------------------------------------* - * VC1 Extension to the PPB * - *------------------------------------------------------*/ -struct ppb_vc1 { - uint32_t to_be_defined; - uint32_t valid; - - /* Always valid, defaults to picture size if no - sequence display extension in the stream. */ - uint32_t display_horizontal_size; - uint32_t display_vertical_size; - - /* VC1 pan scan windows */ - uint32_t num_panscan_windows; - int32_t ps_horiz_offset[4]; - int32_t ps_vert_offset[4]; - int32_t ps_width[4]; - int32_t ps_height[4]; - - /* VC1_VALID_USERDATA - User data is in the form of a linked list. */ - int32_t userDataSize; - struct user_data *userData; - -}; - -/*------------------------------------------------------* - * H.264 Extension to the PPB * - *------------------------------------------------------*/ - -/** - * @brief Film grain SEI message. - * - * Content of the film grain SEI message. - */ - -/* maximum number of model-values as for Thomson spec(standard says 5) */ -#define MAX_FGT_MODEL_VALUE (3) - -/* maximum number of intervals(as many as 256 intervals?) */ -#define MAX_FGT_VALUE_INTERVAL (256) - -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]; - - unsigned char cancel_flag; /* Cancel flag: 1 no film grain. */ - unsigned char model_id; /* Model id. */ - - /* +unused SE based on Thomson spec */ - unsigned char color_desc_flag; /* Separate color description flag. */ - unsigned char bit_depth_luma; /* Bit depth luma minus 8. */ - unsigned char bit_depth_chroma; /* Bit depth chroma minus 8. */ - unsigned char full_range_flag; /* Full range flag. */ - unsigned char color_primaries; /* Color primaries. */ - unsigned char transfer_charact; /* Transfer characteristics. */ - unsigned char matrix_coeff; /*< Matrix coefficients. */ - /* -unused SE based on Thomson spec */ - - unsigned char blending_mode_id; /* Blending mode. */ - unsigned char log2_scale_factor; /* Log2 scale factor (2-7). */ - unsigned char comp_flag[3]; /* Components [0,2] - parameters present flag. */ - unsigned char num_intervals_minus1[3]; /* Number of - intensity level intervals. */ - unsigned char num_model_values[3]; /* Number of model values. */ - uint16_t repetition_period; /* Repetition period (0-16384) */ - -}; - -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) - * is (are) not initialized. */ - uint32_t valid; - - int32_t poc_top; /* POC for Top Field/Frame */ - int32_t poc_bottom; /* POC for Bottom Field */ - uint32_t idr_pic_id; - - /* H264_VALID_PANSCAN */ - uint32_t pan_scan_count; - int32_t pan_scan_left[3]; - int32_t pan_scan_right[3]; - int32_t pan_scan_top[3]; - int32_t pan_scan_bottom[3]; - - /* H264_VALID_CT_TYPE */ - uint32_t ct_type_count; - uint32_t ct_type[3]; - - /* H264_VALID_SPS_CROP */ - int32_t sps_crop_left; - int32_t sps_crop_right; - int32_t sps_crop_top; - int32_t sps_crop_bottom; - - /* H264_VALID_VUI */ - uint32_t chroma_top; - uint32_t chroma_bottom; - - /* H264_VALID_USER */ - uint32_t user_data_size; - struct user_data *user_data; - - /* H264 VALID FGT */ - struct fgt_sei *pfgt; - -}; - -struct ppb { - /* Common fields. */ - uint32_t picture_number; /* Ordinal display number */ - uint32_t video_buffer; /* Video (picbuf) number */ - uint32_t video_address; /* Address of picbuf Y */ - uint32_t video_address_uv; /* Address of picbuf UV */ - uint32_t video_stripe; /* Picbuf stripe */ - uint32_t video_width; /* Picbuf width */ - uint32_t video_height; /* Picbuf height */ - - uint32_t channel_id; /* Decoder channel ID */ - uint32_t status; /* reserved */ - uint32_t width; /* pixels */ - uint32_t height; /* pixels */ - uint32_t chroma_format; /* see above */ - uint32_t pulldown; /* see above */ - uint32_t flags; /* see above */ - uint32_t pts; /* 32 LSBs of PTS */ - uint32_t protocol; /* protocolXXX (above) */ - - uint32_t frame_rate; /* see above */ - uint32_t matrix_coeff; /* see above */ - uint32_t aspect_ratio; /* see above */ - uint32_t colour_primaries; /* see above */ - uint32_t transfer_char; /* see above */ - uint32_t pcr_offset; /* 45kHz if PCR type; else 27MHz */ - uint32_t n_drop; /* Number of pictures to be dropped */ - - uint32_t custom_aspect_ratio_width_height; - /* upper 16-bits is Y and lower 16-bits is X */ - - uint32_t picture_tag; /* Indexing tag from BUD packets */ - uint32_t picture_done_payload; - uint32_t picture_meta_payload; - uint32_t reserved[1]; - - /* Protocol-specific extensions. */ - union { - struct ppb_h264 h264; - struct ppb_mpeg mpeg; - struct ppb_vc1 vc1; - } other; - -}; - -struct c011_pib { - uint32_t bFormatChange; - uint32_t resolution; - uint32_t channelId; - uint32_t ppbPtr; - int32_t ptsStcOffset; - uint32_t zeroPanscanValid; - uint32_t dramOutBufAddr; - uint32_t yComponent; - struct ppb ppb; - -}; - -struct dec_rsp_channel_start_video { - uint32_t command; - uint32_t sequence; - uint32_t status; - uint32_t picBuf; - uint32_t picRelBuf; - uint32_t picInfoDeliveryQ; - uint32_t picInfoReleaseQ; - uint32_t channelStatus; - uint32_t userDataDeliveryQ; - uint32_t userDataReleaseQ; - uint32_t transportStreamCaptureAddr; - uint32_t asyncEventQ; - -}; - -#define eCMD_C011_CMD_BASE (0x73763000) - -/* host commands */ -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 */ - - /* New API commands */ - /* General commands */ - eCMD_C011_INIT = eCMD_C011_CMD_BASE + 0x01, - eCMD_C011_RESET = eCMD_C011_CMD_BASE + 0x02, - eCMD_C011_SELF_TEST = eCMD_C011_CMD_BASE + 0x03, - eCMD_C011_GET_VERSION = eCMD_C011_CMD_BASE + 0x04, - eCMD_C011_GPIO = eCMD_C011_CMD_BASE + 0x05, - eCMD_C011_DEBUG_SETUP = eCMD_C011_CMD_BASE + 0x06, - - /* Decoding commands */ - eCMD_C011_DEC_CHAN_OPEN = eCMD_C011_CMD_BASE + 0x100, - eCMD_C011_DEC_CHAN_CLOSE = eCMD_C011_CMD_BASE + 0x101, - eCMD_C011_DEC_CHAN_ACTIVATE = eCMD_C011_CMD_BASE + 0x102, - eCMD_C011_DEC_CHAN_STATUS = eCMD_C011_CMD_BASE + 0x103, - eCMD_C011_DEC_CHAN_FLUSH = eCMD_C011_CMD_BASE + 0x104, - eCMD_C011_DEC_CHAN_TRICK_PLAY = eCMD_C011_CMD_BASE + 0x105, - eCMD_C011_DEC_CHAN_TS_PIDS = eCMD_C011_CMD_BASE + 0x106, - eCMD_C011_DEC_CHAN_PS_STREAM_ID = eCMD_C011_CMD_BASE + 0x107, - eCMD_C011_DEC_CHAN_INPUT_PARAMS = eCMD_C011_CMD_BASE + 0x108, - eCMD_C011_DEC_CHAN_VIDEO_OUTPUT = eCMD_C011_CMD_BASE + 0x109, - eCMD_C011_DEC_CHAN_OUTPUT_FORMAT = eCMD_C011_CMD_BASE + 0x10A, - eCMD_C011_DEC_CHAN_SCALING_FILTERS = eCMD_C011_CMD_BASE + 0x10B, - eCMD_C011_DEC_CHAN_OSD_MODE = eCMD_C011_CMD_BASE + 0x10D, - eCMD_C011_DEC_CHAN_DROP = eCMD_C011_CMD_BASE + 0x10E, - eCMD_C011_DEC_CHAN_RELEASE = eCMD_C011_CMD_BASE + 0x10F, - eCMD_C011_DEC_CHAN_STREAM_SETTINGS = eCMD_C011_CMD_BASE + 0x110, - eCMD_C011_DEC_CHAN_PAUSE_OUTPUT = eCMD_C011_CMD_BASE + 0x111, - eCMD_C011_DEC_CHAN_CHANGE = eCMD_C011_CMD_BASE + 0x112, - eCMD_C011_DEC_CHAN_SET_STC = eCMD_C011_CMD_BASE + 0x113, - eCMD_C011_DEC_CHAN_SET_PTS = eCMD_C011_CMD_BASE + 0x114, - eCMD_C011_DEC_CHAN_CC_MODE = eCMD_C011_CMD_BASE + 0x115, - eCMD_C011_DEC_CREATE_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x116, - eCMD_C011_DEC_COPY_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x117, - eCMD_C011_DEC_DELETE_AUDIO_CONTEXT = eCMD_C011_CMD_BASE + 0x118, - eCMD_C011_DEC_CHAN_SET_DECYPTION = eCMD_C011_CMD_BASE + 0x119, - eCMD_C011_DEC_CHAN_START_VIDEO = eCMD_C011_CMD_BASE + 0x11A, - eCMD_C011_DEC_CHAN_STOP_VIDEO = eCMD_C011_CMD_BASE + 0x11B, - eCMD_C011_DEC_CHAN_PIC_CAPTURE = eCMD_C011_CMD_BASE + 0x11C, - eCMD_C011_DEC_CHAN_PAUSE = eCMD_C011_CMD_BASE + 0x11D, - eCMD_C011_DEC_CHAN_PAUSE_STATE = eCMD_C011_CMD_BASE + 0x11E, - eCMD_C011_DEC_CHAN_SET_SLOWM_RATE = eCMD_C011_CMD_BASE + 0x11F, - eCMD_C011_DEC_CHAN_GET_SLOWM_RATE = eCMD_C011_CMD_BASE + 0x120, - eCMD_C011_DEC_CHAN_SET_FF_RATE = eCMD_C011_CMD_BASE + 0x121, - eCMD_C011_DEC_CHAN_GET_FF_RATE = eCMD_C011_CMD_BASE + 0x122, - eCMD_C011_DEC_CHAN_FRAME_ADVANCE = eCMD_C011_CMD_BASE + 0x123, - eCMD_C011_DEC_CHAN_SET_SKIP_PIC_MODE = eCMD_C011_CMD_BASE + 0x124, - eCMD_C011_DEC_CHAN_GET_SKIP_PIC_MODE = eCMD_C011_CMD_BASE + 0x125, - eCMD_C011_DEC_CHAN_FILL_PIC_BUF = eCMD_C011_CMD_BASE + 0x126, - eCMD_C011_DEC_CHAN_SET_CONTINUITY_CHECK = eCMD_C011_CMD_BASE + 0x127, - eCMD_C011_DEC_CHAN_GET_CONTINUITY_CHECK = eCMD_C011_CMD_BASE + 0x128, - eCMD_C011_DEC_CHAN_SET_BRCM_TRICK_MODE = eCMD_C011_CMD_BASE + 0x129, - eCMD_C011_DEC_CHAN_GET_BRCM_TRICK_MODE = eCMD_C011_CMD_BASE + 0x12A, - eCMD_C011_DEC_CHAN_REVERSE_FIELD_STATUS = eCMD_C011_CMD_BASE + 0x12B, - eCMD_C011_DEC_CHAN_I_PICTURE_FOUND = eCMD_C011_CMD_BASE + 0x12C, - eCMD_C011_DEC_CHAN_SET_PARAMETER = eCMD_C011_CMD_BASE + 0x12D, - eCMD_C011_DEC_CHAN_SET_USER_DATA_MODE = eCMD_C011_CMD_BASE + 0x12E, - eCMD_C011_DEC_CHAN_SET_PAUSE_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x12F, - eCMD_C011_DEC_CHAN_SET_SLOW_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x130, - eCMD_C011_DEC_CHAN_SET_FF_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x131, - eCMD_C011_DEC_CHAN_SET_DISPLAY_TIMING_MODE = eCMD_C011_CMD_BASE + - 0x132, - eCMD_C011_DEC_CHAN_SET_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x133, - eCMD_C011_DEC_CHAN_GET_DISPLAY_MODE = eCMD_C011_CMD_BASE + 0x134, - eCMD_C011_DEC_CHAN_SET_REVERSE_FIELD = eCMD_C011_CMD_BASE + 0x135, - eCMD_C011_DEC_CHAN_STREAM_OPEN = eCMD_C011_CMD_BASE + 0x136, - eCMD_C011_DEC_CHAN_SET_PCR_PID = eCMD_C011_CMD_BASE + 0x137, - eCMD_C011_DEC_CHAN_SET_VID_PID = eCMD_C011_CMD_BASE + 0x138, - eCMD_C011_DEC_CHAN_SET_PAN_SCAN_MODE = eCMD_C011_CMD_BASE + 0x139, - eCMD_C011_DEC_CHAN_START_DISPLAY_AT_PTS = eCMD_C011_CMD_BASE + 0x140, - eCMD_C011_DEC_CHAN_STOP_DISPLAY_AT_PTS = eCMD_C011_CMD_BASE + 0x141, - eCMD_C011_DEC_CHAN_SET_DISPLAY_ORDER = eCMD_C011_CMD_BASE + 0x142, - eCMD_C011_DEC_CHAN_GET_DISPLAY_ORDER = eCMD_C011_CMD_BASE + 0x143, - eCMD_C011_DEC_CHAN_SET_HOST_TRICK_MODE = eCMD_C011_CMD_BASE + 0x144, - eCMD_C011_DEC_CHAN_SET_OPERATION_MODE = eCMD_C011_CMD_BASE + 0x145, - eCMD_C011_DEC_CHAN_DISPLAY_PAUSE_UNTO_PTS = eCMD_C011_CMD_BASE + 0x146, - eCMD_C011_DEC_CHAN_SET_PTS_STC_DIFF_THRESHOLD = eCMD_C011_CMD_BASE + - 0x147, - eCMD_C011_DEC_CHAN_SEND_COMPRESSED_BUF = eCMD_C011_CMD_BASE + 0x148, - eCMD_C011_DEC_CHAN_SET_CLIPPING = eCMD_C011_CMD_BASE + 0x149, - eCMD_C011_DEC_CHAN_SET_PARAMETERS_FOR_HARD_RESET_INTERRUPT_TO_HOST - = eCMD_C011_CMD_BASE + 0x150, - - /* Decoder RevD commands */ - eCMD_C011_DEC_CHAN_SET_CSC = eCMD_C011_CMD_BASE + 0x180, /* color - space conversion */ - eCMD_C011_DEC_CHAN_SET_RANGE_REMAP = eCMD_C011_CMD_BASE + 0x181, - eCMD_C011_DEC_CHAN_SET_FGT = eCMD_C011_CMD_BASE + 0x182, - /* Note: 0x183 not implemented yet in Rev D main */ - eCMD_C011_DEC_CHAN_SET_LASTPICTURE_PADDING = eCMD_C011_CMD_BASE + - 0x183, - - /* Decoder 7412 commands (7412-only) */ - eCMD_C011_DEC_CHAN_SET_CONTENT_KEY = eCMD_C011_CMD_BASE + 0x190, - eCMD_C011_DEC_CHAN_SET_SESSION_KEY = eCMD_C011_CMD_BASE + 0x191, - eCMD_C011_DEC_CHAN_FMT_CHANGE_ACK = eCMD_C011_CMD_BASE + 0x192, - - eCMD_C011_DEC_CHAN_CUSTOM_VIDOUT = eCMD_C011_CMD_BASE + 0x1FF, - - /* Encoding commands */ - eCMD_C011_ENC_CHAN_OPEN = eCMD_C011_CMD_BASE + 0x200, - eCMD_C011_ENC_CHAN_CLOSE = eCMD_C011_CMD_BASE + 0x201, - eCMD_C011_ENC_CHAN_ACTIVATE = eCMD_C011_CMD_BASE + 0x202, - eCMD_C011_ENC_CHAN_CONTROL = eCMD_C011_CMD_BASE + 0x203, - eCMD_C011_ENC_CHAN_STATISTICS = eCMD_C011_CMD_BASE + 0x204, - - eNOTIFY_C011_ENC_CHAN_EVENT = eCMD_C011_CMD_BASE + 0x210, - -}; - -#endif diff --git a/drivers/staging/crystalhd/crystalhd_hw.c b/drivers/staging/crystalhd/crystalhd_hw.c deleted file mode 100644 index 4765d528279b..000000000000 --- a/drivers/staging/crystalhd/crystalhd_hw.c +++ /dev/null @@ -1,2458 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_hw . c - * - * Description: - * BCM70010 Linux driver HW layer. - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#include "crystalhd.h" - -#include -#include -#include - -/* Functions internal to this file */ - -static void crystalhd_enable_uarts(struct crystalhd_adp *adp) -{ - bc_dec_reg_wr(adp, UartSelectA, BSVS_UART_STREAM); - bc_dec_reg_wr(adp, UartSelectB, BSVS_UART_DEC_OUTER); -} - - -static void crystalhd_start_dram(struct crystalhd_adp *adp) -{ - bc_dec_reg_wr(adp, SDRAM_PARAM, ((40 / 5 - 1) << 0) | - /* tras (40ns tras)/(5ns period) -1 ((15/5 - 1) << 4) | // trcd */ - ((15 / 5 - 1) << 7) | /* trp */ - ((10 / 5 - 1) << 10) | /* trrd */ - ((15 / 5 + 1) << 12) | /* twr */ - ((2 + 1) << 16) | /* twtr */ - ((70 / 5 - 2) << 19) | /* trfc */ - (0 << 23)); - - bc_dec_reg_wr(adp, SDRAM_PRECHARGE, 0); - bc_dec_reg_wr(adp, SDRAM_EXT_MODE, 2); - bc_dec_reg_wr(adp, SDRAM_MODE, 0x132); - bc_dec_reg_wr(adp, SDRAM_PRECHARGE, 0); - bc_dec_reg_wr(adp, SDRAM_REFRESH, 0); - bc_dec_reg_wr(adp, SDRAM_REFRESH, 0); - bc_dec_reg_wr(adp, SDRAM_MODE, 0x32); - /* setting the refresh rate here */ - bc_dec_reg_wr(adp, SDRAM_REF_PARAM, ((1 << 12) | 96)); -} - - -static bool crystalhd_bring_out_of_rst(struct crystalhd_adp *adp) -{ - union link_misc_perst_deco_ctrl rst_deco_cntrl; - union link_misc_perst_clk_ctrl rst_clk_cntrl; - uint32_t temp; - - /* - * Link clocks: MISC_PERST_CLOCK_CTRL Clear PLL power down bit, - * delay to allow PLL to lock Clear alternate clock, stop clock bits - */ - rst_clk_cntrl.whole_reg = crystalhd_reg_rd(adp, MISC_PERST_CLOCK_CTRL); - rst_clk_cntrl.pll_pwr_dn = 0; - crystalhd_reg_wr(adp, MISC_PERST_CLOCK_CTRL, rst_clk_cntrl.whole_reg); - msleep_interruptible(50); - - rst_clk_cntrl.whole_reg = crystalhd_reg_rd(adp, MISC_PERST_CLOCK_CTRL); - rst_clk_cntrl.stop_core_clk = 0; - rst_clk_cntrl.sel_alt_clk = 0; - - crystalhd_reg_wr(adp, MISC_PERST_CLOCK_CTRL, rst_clk_cntrl.whole_reg); - msleep_interruptible(50); - - /* - * Bus Arbiter Timeout: GISB_ARBITER_TIMER - * Set internal bus arbiter timeout to 40us based on core clock speed - * (63MHz * 40us = 0x9D8) - */ - crystalhd_reg_wr(adp, GISB_ARBITER_TIMER, 0x9D8); - - /* - * Decoder clocks: MISC_PERST_DECODER_CTRL - * Enable clocks while 7412 reset is asserted, delay - * De-assert 7412 reset - */ - rst_deco_cntrl.whole_reg = crystalhd_reg_rd(adp, - MISC_PERST_DECODER_CTRL); - rst_deco_cntrl.stop_bcm_7412_clk = 0; - rst_deco_cntrl.bcm7412_rst = 1; - crystalhd_reg_wr(adp, MISC_PERST_DECODER_CTRL, - rst_deco_cntrl.whole_reg); - msleep_interruptible(10); - - rst_deco_cntrl.whole_reg = crystalhd_reg_rd(adp, - MISC_PERST_DECODER_CTRL); - rst_deco_cntrl.bcm7412_rst = 0; - crystalhd_reg_wr(adp, MISC_PERST_DECODER_CTRL, - rst_deco_cntrl.whole_reg); - msleep_interruptible(50); - - /* Disable OTP_CONTENT_MISC to 0 to disable all secure modes */ - crystalhd_reg_wr(adp, OTP_CONTENT_MISC, 0); - - /* Clear bit 29 of 0x404 */ - temp = crystalhd_reg_rd(adp, PCIE_TL_TRANSACTION_CONFIGURATION); - temp &= ~BC_BIT(29); - crystalhd_reg_wr(adp, PCIE_TL_TRANSACTION_CONFIGURATION, temp); - - /* 2.5V regulator must be set to 2.6 volts (+6%) */ - /* FIXME: jarod: what's the point of this reg read? */ - temp = crystalhd_reg_rd(adp, MISC_PERST_VREG_CTRL); - crystalhd_reg_wr(adp, MISC_PERST_VREG_CTRL, 0xF3); - - return true; -} - -static bool crystalhd_put_in_reset(struct crystalhd_adp *adp) -{ - union link_misc_perst_deco_ctrl rst_deco_cntrl; - union link_misc_perst_clk_ctrl rst_clk_cntrl; - uint32_t temp; - - /* - * Decoder clocks: MISC_PERST_DECODER_CTRL - * Assert 7412 reset, delay - * Assert 7412 stop clock - */ - rst_deco_cntrl.whole_reg = crystalhd_reg_rd(adp, - MISC_PERST_DECODER_CTRL); - rst_deco_cntrl.stop_bcm_7412_clk = 1; - crystalhd_reg_wr(adp, MISC_PERST_DECODER_CTRL, - rst_deco_cntrl.whole_reg); - msleep_interruptible(50); - - /* Bus Arbiter Timeout: GISB_ARBITER_TIMER - * Set internal bus arbiter timeout to 40us based on core clock speed - * (6.75MHZ * 40us = 0x10E) - */ - crystalhd_reg_wr(adp, GISB_ARBITER_TIMER, 0x10E); - - /* Link clocks: MISC_PERST_CLOCK_CTRL - * Stop core clk, delay - * Set alternate clk, delay, set PLL power down - */ - rst_clk_cntrl.whole_reg = crystalhd_reg_rd(adp, MISC_PERST_CLOCK_CTRL); - rst_clk_cntrl.stop_core_clk = 1; - rst_clk_cntrl.sel_alt_clk = 1; - crystalhd_reg_wr(adp, MISC_PERST_CLOCK_CTRL, rst_clk_cntrl.whole_reg); - msleep_interruptible(50); - - rst_clk_cntrl.whole_reg = crystalhd_reg_rd(adp, MISC_PERST_CLOCK_CTRL); - rst_clk_cntrl.pll_pwr_dn = 1; - crystalhd_reg_wr(adp, MISC_PERST_CLOCK_CTRL, rst_clk_cntrl.whole_reg); - - /* - * Read and restore the Transaction Configuration Register - * after core reset - */ - temp = crystalhd_reg_rd(adp, PCIE_TL_TRANSACTION_CONFIGURATION); - - /* - * Link core soft reset: MISC3_RESET_CTRL - * - Write BIT[0]=1 and read it back for core reset to take place - */ - crystalhd_reg_wr(adp, MISC3_RESET_CTRL, 1); - rst_deco_cntrl.whole_reg = crystalhd_reg_rd(adp, MISC3_RESET_CTRL); - msleep_interruptible(50); - - /* restore the transaction configuration register */ - crystalhd_reg_wr(adp, PCIE_TL_TRANSACTION_CONFIGURATION, temp); - - return true; -} - -static void crystalhd_disable_interrupts(struct crystalhd_adp *adp) -{ - 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; - intr_mask.mask_pcie_rgr_bridge = 1; - intr_mask.mask_rx_done = 1; - intr_mask.mask_rx_err = 1; - intr_mask.mask_tx_done = 1; - intr_mask.mask_tx_err = 1; - crystalhd_reg_wr(adp, INTR_INTR_MSK_SET_REG, intr_mask.whole_reg); - - return; -} - -static void crystalhd_enable_interrupts(struct crystalhd_adp *adp) -{ - 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; - intr_mask.mask_pcie_rgr_bridge = 1; - intr_mask.mask_rx_done = 1; - intr_mask.mask_rx_err = 1; - intr_mask.mask_tx_done = 1; - intr_mask.mask_tx_err = 1; - crystalhd_reg_wr(adp, INTR_INTR_MSK_CLR_REG, intr_mask.whole_reg); - - return; -} - -static void crystalhd_clear_errors(struct crystalhd_adp *adp) -{ - uint32_t reg; - - /* FIXME: jarod: wouldn't we want to write a 0 to the reg? - Or does the write clear the bits specified? */ - reg = crystalhd_reg_rd(adp, MISC1_Y_RX_ERROR_STATUS); - if (reg) - crystalhd_reg_wr(adp, MISC1_Y_RX_ERROR_STATUS, reg); - - reg = crystalhd_reg_rd(adp, MISC1_UV_RX_ERROR_STATUS); - if (reg) - crystalhd_reg_wr(adp, MISC1_UV_RX_ERROR_STATUS, reg); - - reg = crystalhd_reg_rd(adp, MISC1_TX_DMA_ERROR_STATUS); - if (reg) - crystalhd_reg_wr(adp, MISC1_TX_DMA_ERROR_STATUS, reg); -} - -static void crystalhd_clear_interrupts(struct crystalhd_adp *adp) -{ - uint32_t intr_sts = crystalhd_reg_rd(adp, INTR_INTR_STATUS); - - if (intr_sts) { - crystalhd_reg_wr(adp, INTR_INTR_CLR_REG, intr_sts); - - /* Write End Of Interrupt for PCIE */ - crystalhd_reg_wr(adp, INTR_EOI_CTRL, 1); - } -} - -static void crystalhd_soft_rst(struct crystalhd_adp *adp) -{ - uint32_t val; - - /* Assert c011 soft reset*/ - bc_dec_reg_wr(adp, DecHt_HostSwReset, 0x00000001); - msleep_interruptible(50); - - /* Release c011 soft reset*/ - bc_dec_reg_wr(adp, DecHt_HostSwReset, 0x00000000); - - /* Disable Stuffing..*/ - val = crystalhd_reg_rd(adp, MISC2_GLOBAL_CTRL); - val |= BC_BIT(8); - crystalhd_reg_wr(adp, MISC2_GLOBAL_CTRL, val); -} - -static bool crystalhd_load_firmware_config(struct crystalhd_adp *adp) -{ - uint32_t i = 0, reg; - - crystalhd_reg_wr(adp, DCI_DRAM_BASE_ADDR, (BC_DRAM_FW_CFG_ADDR >> 19)); - - crystalhd_reg_wr(adp, AES_CMD, 0); - crystalhd_reg_wr(adp, AES_CONFIG_INFO, - (BC_DRAM_FW_CFG_ADDR & 0x7FFFF)); - crystalhd_reg_wr(adp, AES_CMD, 0x1); - - /* FIXME: jarod: I've seen this fail, - and introducing extra delays helps... */ - for (i = 0; i < 100; ++i) { - reg = crystalhd_reg_rd(adp, AES_STATUS); - if (reg & 0x1) - return true; - msleep_interruptible(10); - } - - return false; -} - - -static bool crystalhd_start_device(struct crystalhd_adp *adp) -{ - uint32_t dbg_options, glb_cntrl = 0, reg_pwrmgmt = 0; - - BCMLOG(BCMLOG_INFO, "Starting BCM70012 Device\n"); - - reg_pwrmgmt = crystalhd_reg_rd(adp, PCIE_DLL_DATA_LINK_CONTROL); - reg_pwrmgmt &= ~ASPM_L1_ENABLE; - - crystalhd_reg_wr(adp, PCIE_DLL_DATA_LINK_CONTROL, reg_pwrmgmt); - - if (!crystalhd_bring_out_of_rst(adp)) { - BCMLOG_ERR("Failed To Bring Link Out Of Reset\n"); - return false; - } - - crystalhd_disable_interrupts(adp); - - crystalhd_clear_errors(adp); - - crystalhd_clear_interrupts(adp); - - crystalhd_enable_interrupts(adp); - - /* Enable the option for getting the total no. of DWORDS - * that have been transferred by the RXDMA engine - */ - dbg_options = crystalhd_reg_rd(adp, MISC1_DMA_DEBUG_OPTIONS_REG); - dbg_options |= 0x10; - crystalhd_reg_wr(adp, MISC1_DMA_DEBUG_OPTIONS_REG, dbg_options); - - /* Enable PCI Global Control options */ - glb_cntrl = crystalhd_reg_rd(adp, MISC2_GLOBAL_CTRL); - glb_cntrl |= 0x100; - glb_cntrl |= 0x8000; - crystalhd_reg_wr(adp, MISC2_GLOBAL_CTRL, glb_cntrl); - - crystalhd_enable_interrupts(adp); - - crystalhd_soft_rst(adp); - crystalhd_start_dram(adp); - crystalhd_enable_uarts(adp); - - return true; -} - -static bool crystalhd_stop_device(struct crystalhd_adp *adp) -{ - uint32_t reg; - - BCMLOG(BCMLOG_INFO, "Stopping BCM70012 Device\n"); - /* Clear and disable interrupts */ - crystalhd_disable_interrupts(adp); - crystalhd_clear_errors(adp); - crystalhd_clear_interrupts(adp); - - if (!crystalhd_put_in_reset(adp)) - BCMLOG_ERR("Failed to Put Link To Reset State\n"); - - reg = crystalhd_reg_rd(adp, PCIE_DLL_DATA_LINK_CONTROL); - reg |= ASPM_L1_ENABLE; - crystalhd_reg_wr(adp, PCIE_DLL_DATA_LINK_CONTROL, reg); - - /* Set PCI Clk Req */ - reg = crystalhd_reg_rd(adp, PCIE_CLK_REQ_REG); - reg |= PCI_CLK_REQ_ENABLE; - crystalhd_reg_wr(adp, PCIE_CLK_REQ_REG, reg); - - return true; -} - -static struct crystalhd_rx_dma_pkt *crystalhd_hw_alloc_rx_pkt( - struct crystalhd_hw *hw) -{ - unsigned long flags = 0; - struct crystalhd_rx_dma_pkt *temp = NULL; - - if (!hw) - return NULL; - - spin_lock_irqsave(&hw->lock, flags); - temp = hw->rx_pkt_pool_head; - if (temp) { - hw->rx_pkt_pool_head = hw->rx_pkt_pool_head->next; - temp->dio_req = NULL; - temp->pkt_tag = 0; - temp->flags = 0; - } - spin_unlock_irqrestore(&hw->lock, flags); - - return temp; -} - -static void crystalhd_hw_free_rx_pkt(struct crystalhd_hw *hw, - struct crystalhd_rx_dma_pkt *pkt) -{ - unsigned long flags = 0; - - if (!hw || !pkt) - return; - - spin_lock_irqsave(&hw->lock, flags); - pkt->next = hw->rx_pkt_pool_head; - hw->rx_pkt_pool_head = pkt; - spin_unlock_irqrestore(&hw->lock, flags); -} - -/* - * Call back from TX - IOQ deletion. - * - * This routine will release the TX DMA rings allocated - * during setup_dma rings interface. - * - * Memory is allocated per DMA ring basis. This is just - * a place holder to be able to create the dio queues. - */ -static void crystalhd_tx_desc_rel_call_back(void *context, void *data) -{ -} - -/* - * Rx Packet release callback.. - * - * Release All user mapped capture buffers and Our DMA packets - * back to our free pool. The actual cleanup of the DMA - * ring descriptors happen during dma ring release. - */ -static void crystalhd_rx_pkt_rel_call_back(void *context, void *data) -{ - struct crystalhd_hw *hw = (struct crystalhd_hw *)context; - struct crystalhd_rx_dma_pkt *pkt = (struct crystalhd_rx_dma_pkt *)data; - - if (!pkt || !hw) { - BCMLOG_ERR("Invalid arg - %p %p\n", hw, pkt); - return; - } - - if (pkt->dio_req) - crystalhd_unmap_dio(hw->adp, pkt->dio_req); - else - BCMLOG_ERR("Missing dio_req: 0x%x\n", pkt->pkt_tag); - - crystalhd_hw_free_rx_pkt(hw, pkt); -} - -#define crystalhd_hw_delete_ioq(adp, q) \ -do { \ - if (q) { \ - crystalhd_delete_dioq(adp, q); \ - q = NULL; \ - } \ -} while (0) - -static void crystalhd_hw_delete_ioqs(struct crystalhd_hw *hw) -{ - if (!hw) - return; - - 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); - crystalhd_hw_delete_ioq(hw->adp, hw->rx_freeq); - crystalhd_hw_delete_ioq(hw->adp, hw->rx_rdyq); -} - -#define crystalhd_hw_create_ioq(sts, hw, q, cb) \ -do { \ - sts = crystalhd_create_dioq(hw->adp, &q, cb, hw); \ - if (sts != BC_STS_SUCCESS) \ - goto hw_create_ioq_err; \ -} while (0) - -/* - * Create IOQs.. - * - * TX - Active & Free - * RX - Active, Ready and Free. - */ -static enum BC_STATUS crystalhd_hw_create_ioqs(struct crystalhd_hw *hw) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!hw) { - BCMLOG_ERR("Invalid Arg!!\n"); - return BC_STS_INV_ARG; - } - - crystalhd_hw_create_ioq(sts, hw, hw->tx_freeq, - crystalhd_tx_desc_rel_call_back); - crystalhd_hw_create_ioq(sts, hw, hw->tx_actq, - crystalhd_tx_desc_rel_call_back); - - crystalhd_hw_create_ioq(sts, hw, hw->rx_freeq, - crystalhd_rx_pkt_rel_call_back); - crystalhd_hw_create_ioq(sts, hw, hw->rx_rdyq, - crystalhd_rx_pkt_rel_call_back); - crystalhd_hw_create_ioq(sts, hw, hw->rx_actq, - crystalhd_rx_pkt_rel_call_back); - - return sts; - -hw_create_ioq_err: - crystalhd_hw_delete_ioqs(hw); - - return sts; -} - - -static bool crystalhd_code_in_full(struct crystalhd_adp *adp, - uint32_t needed_sz, bool b_188_byte_pkts, uint8_t flags) -{ - uint32_t base, end, writep, readp; - uint32_t cpbSize, cpbFullness, fifoSize; - - if (flags & 0x02) { /* ASF Bit is set */ - base = bc_dec_reg_rd(adp, REG_Dec_TsAudCDB2Base); - end = bc_dec_reg_rd(adp, REG_Dec_TsAudCDB2End); - writep = bc_dec_reg_rd(adp, REG_Dec_TsAudCDB2Wrptr); - readp = bc_dec_reg_rd(adp, REG_Dec_TsAudCDB2Rdptr); - } else if (b_188_byte_pkts) { /*Encrypted 188 byte packets*/ - base = bc_dec_reg_rd(adp, REG_Dec_TsUser0Base); - end = bc_dec_reg_rd(adp, REG_Dec_TsUser0End); - writep = bc_dec_reg_rd(adp, REG_Dec_TsUser0Wrptr); - readp = bc_dec_reg_rd(adp, REG_Dec_TsUser0Rdptr); - } else { - base = bc_dec_reg_rd(adp, REG_DecCA_RegCinBase); - end = bc_dec_reg_rd(adp, REG_DecCA_RegCinEnd); - writep = bc_dec_reg_rd(adp, REG_DecCA_RegCinWrPtr); - readp = bc_dec_reg_rd(adp, REG_DecCA_RegCinRdPtr); - } - - cpbSize = end - base; - if (writep >= readp) - cpbFullness = writep - readp; - else - cpbFullness = (end - base) - (readp - writep); - - fifoSize = cpbSize - cpbFullness; - - if (fifoSize < BC_INFIFO_THRESHOLD) - return true; - - if (needed_sz > (fifoSize - BC_INFIFO_THRESHOLD)) - return true; - - return false; -} - -static enum BC_STATUS crystalhd_hw_tx_req_complete(struct crystalhd_hw *hw, - uint32_t list_id, enum BC_STATUS cs) -{ - struct tx_dma_pkt *tx_req; - - if (!hw || !list_id) { - BCMLOG_ERR("Invalid Arg..\n"); - return BC_STS_INV_ARG; - } - - hw->pwr_lock--; - - 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"); - return BC_STS_NO_DATA; - } - - if (tx_req->call_back) { - tx_req->call_back(tx_req->dio_req, tx_req->cb_event, cs); - tx_req->dio_req = NULL; - tx_req->cb_event = NULL; - tx_req->call_back = NULL; - } else { - BCMLOG(BCMLOG_DBG, "Missing Tx Callback - %X\n", - tx_req->list_tag); - } - - /* Now put back the tx_list back in FreeQ */ - tx_req->list_tag = 0; - - return crystalhd_dioq_add(hw->tx_freeq, tx_req, false, 0); -} - -static bool crystalhd_tx_list0_handler(struct crystalhd_hw *hw, - uint32_t err_sts) -{ - uint32_t err_mask, tmp; - unsigned long flags = 0; - - err_mask = MISC1_TX_DMA_ERROR_STATUS_TX_L0_DESC_TX_ABORT_ERRORS_MASK | - MISC1_TX_DMA_ERROR_STATUS_TX_L0_DMA_DATA_TX_ABORT_ERRORS_MASK | - MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_MASK; - - if (!(err_sts & err_mask)) - return false; - - BCMLOG_ERR("Error on Tx-L0 %x\n", err_sts); - - tmp = err_mask; - - if (err_sts & MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_MASK) - tmp &= ~MISC1_TX_DMA_ERROR_STATUS_TX_L0_FIFO_FULL_ERRORS_MASK; - - if (tmp) { - spin_lock_irqsave(&hw->lock, flags); - /* reset list index.*/ - hw->tx_list_post_index = 0; - spin_unlock_irqrestore(&hw->lock, flags); - } - - tmp = err_sts & err_mask; - crystalhd_reg_wr(hw->adp, MISC1_TX_DMA_ERROR_STATUS, tmp); - - return true; -} - -static bool crystalhd_tx_list1_handler(struct crystalhd_hw *hw, - uint32_t err_sts) -{ - uint32_t err_mask, tmp; - unsigned long flags = 0; - - err_mask = MISC1_TX_DMA_ERROR_STATUS_TX_L1_DESC_TX_ABORT_ERRORS_MASK | - MISC1_TX_DMA_ERROR_STATUS_TX_L1_DMA_DATA_TX_ABORT_ERRORS_MASK | - MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_MASK; - - if (!(err_sts & err_mask)) - return false; - - BCMLOG_ERR("Error on Tx-L1 %x\n", err_sts); - - tmp = err_mask; - - if (err_sts & MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_MASK) - tmp &= ~MISC1_TX_DMA_ERROR_STATUS_TX_L1_FIFO_FULL_ERRORS_MASK; - - if (tmp) { - spin_lock_irqsave(&hw->lock, flags); - /* reset list index.*/ - hw->tx_list_post_index = 0; - spin_unlock_irqrestore(&hw->lock, flags); - } - - tmp = err_sts & err_mask; - crystalhd_reg_wr(hw->adp, MISC1_TX_DMA_ERROR_STATUS, tmp); - - return true; -} - -static void crystalhd_tx_isr(struct crystalhd_hw *hw, uint32_t int_sts) -{ - uint32_t err_sts; - - if (int_sts & INTR_INTR_STATUS_L0_TX_DMA_DONE_INTR_MASK) - crystalhd_hw_tx_req_complete(hw, hw->tx_ioq_tag_seed + 0, - BC_STS_SUCCESS); - - if (int_sts & INTR_INTR_STATUS_L1_TX_DMA_DONE_INTR_MASK) - crystalhd_hw_tx_req_complete(hw, hw->tx_ioq_tag_seed + 1, - 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; - } - - /* Handle Tx errors. */ - err_sts = crystalhd_reg_rd(hw->adp, MISC1_TX_DMA_ERROR_STATUS); - - if (crystalhd_tx_list0_handler(hw, err_sts)) - crystalhd_hw_tx_req_complete(hw, hw->tx_ioq_tag_seed + 0, - BC_STS_ERROR); - - if (crystalhd_tx_list1_handler(hw, err_sts)) - crystalhd_hw_tx_req_complete(hw, hw->tx_ioq_tag_seed + 1, - BC_STS_ERROR); - - hw->stats.tx_errors++; -} - -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; - - if (!p_dma_desc || !cnt) - return; - - /* FIXME: jarod: perhaps a modparam desc_debug to enable this, - rather than setting ll (log level, I presume) to non-zero? */ - if (!ll) - return; - - for (ix = ul_desc_index; ix < (ul_desc_index + cnt); ix++) { - BCMLOG(ll, - "%s[%d] Buff[%x:%x] Next:[%x:%x] XferSz:%x Intr:%x,Last:%x\n", - ((p_dma_desc[ul_desc_index].dma_dir) ? "TDesc" : "RDesc"), - ul_desc_index, - p_dma_desc[ul_desc_index].buff_addr_high, - p_dma_desc[ul_desc_index].buff_addr_low, - p_dma_desc[ul_desc_index].next_desc_addr_high, - p_dma_desc[ul_desc_index].next_desc_addr_low, - p_dma_desc[ul_desc_index].xfer_size, - p_dma_desc[ul_desc_index].intr_enable, - p_dma_desc[ul_desc_index].last_rec_indicator); - } - -} - -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; - union addr_64 addr_temp; - - if (!ioreq || !desc || !desc_paddr_base || !xfr_sz || - (!sg_cnt && !ioreq->uinfo.dir_tx)) { - BCMLOG_ERR("Invalid Args\n"); - return BC_STS_INV_ARG; - } - - for (ix = 0; ix < sg_cnt; ix++) { - - /* Setup SGLE index. */ - sg_ix = ix + sg_st_ix; - - /* Get SGLE length */ - len = crystalhd_get_sgle_len(ioreq, sg_ix); - if (len % 4) { - BCMLOG_ERR(" len in sg %d %d %d\n", len, sg_ix, - sg_cnt); - return BC_STS_NOT_IMPL; - } - /* Setup DMA desc with Phy addr & Length at current index. */ - addr_temp.full_addr = crystalhd_get_sgle_paddr(ioreq, sg_ix); - if (sg_ix == sg_st_ix) { - addr_temp.full_addr += sg_st_off; - len -= sg_st_off; - } - memset(&desc[ix], 0, sizeof(desc[ix])); - desc[ix].buff_addr_low = addr_temp.low_part; - desc[ix].buff_addr_high = addr_temp.high_part; - desc[ix].dma_dir = ioreq->uinfo.dir_tx; - - /* Chain 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; - - if ((count + len) > xfr_sz) - len = xfr_sz - count; - - /* Debug.. */ - if ((!len) || (len > crystalhd_get_sgle_len(ioreq, sg_ix))) { - BCMLOG_ERR( - "inv-len(%x) Ix(%d) count:%x xfr_sz:%x sg_cnt:%d\n", - len, ix, count, xfr_sz, sg_cnt); - return BC_STS_ERROR; - } - /* Length expects Multiple of 4 */ - desc[ix].xfer_size = (len / 4); - - crystalhd_hw_dump_desc(desc, ix, 1); - - count += len; - desc_phy_addr += sizeof(struct dma_descriptor); - } - - last_desc_ix = ix - 1; - - if (ioreq->fb_size) { - memset(&desc[ix], 0, sizeof(desc[ix])); - addr_temp.full_addr = ioreq->fb_pa; - desc[ix].buff_addr_low = addr_temp.low_part; - desc[ix].buff_addr_high = addr_temp.high_part; - desc[ix].dma_dir = ioreq->uinfo.dir_tx; - desc[ix].xfer_size = 1; - desc[ix].fill_bytes = 4 - ioreq->fb_size; - count += ioreq->fb_size; - last_desc_ix++; - } - - /* setup last descriptor..*/ - desc[last_desc_ix].last_rec_indicator = 1; - desc[last_desc_ix].next_desc_addr_low = 0; - desc[last_desc_ix].next_desc_addr_high = 0; - desc[last_desc_ix].intr_enable = 1; - - crystalhd_hw_dump_desc(desc, last_desc_ix, 1); - - if (count != xfr_sz) { - BCMLOG_ERR("internal error sz curr:%x exp:%x\n", count, xfr_sz); - return BC_STS_ERROR; - } - - return BC_STS_SUCCESS; -} - -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) -{ - 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; - enum BC_STATUS sts = BC_STS_SUCCESS; - - /* Check params.. */ - if (!ioreq || !pdesc_mem || !uv_desc_index) { - BCMLOG_ERR("Invalid Args\n"); - return BC_STS_INV_ARG; - } - - if (!pdesc_mem->sz || !pdesc_mem->pdma_desc_start || - !ioreq->sg || (!ioreq->sg_cnt && !ioreq->uinfo.dir_tx)) { - BCMLOG_ERR("Invalid Args\n"); - return BC_STS_INV_ARG; - } - - if ((ioreq->uinfo.dir_tx) && (ioreq->uinfo.uv_offset)) { - BCMLOG_ERR("UV offset for TX??\n"); - return BC_STS_INV_ARG; - - } - - desc = pdesc_mem->pdma_desc_start; - desc_paddr_base = pdesc_mem->phy_addr; - - if (ioreq->uinfo.dir_tx || (ioreq->uinfo.uv_offset == 0)) { - sg_cnt = ioreq->sg_cnt; - xfr_sz = ioreq->uinfo.xfr_len; - } else { - sg_cnt = ioreq->uinfo.uv_sg_ix + 1; - xfr_sz = ioreq->uinfo.uv_offset; - } - - sts = crystalhd_hw_fill_desc(ioreq, desc, desc_paddr_base, sg_cnt, - sg_st_ix, sg_st_off, xfr_sz); - - if ((sts != BC_STS_SUCCESS) || !ioreq->uinfo.uv_offset) - return sts; - - /* Prepare for UV mapping.. */ - desc = &pdesc_mem->pdma_desc_start[sg_cnt]; - desc_paddr_base = pdesc_mem->phy_addr + - (sg_cnt * sizeof(struct dma_descriptor)); - - /* Done with desc addr.. now update sg stuff.*/ - sg_cnt = ioreq->sg_cnt - ioreq->uinfo.uv_sg_ix; - xfr_sz = ioreq->uinfo.xfr_len - ioreq->uinfo.uv_offset; - sg_st_ix = ioreq->uinfo.uv_sg_ix; - sg_st_off = ioreq->uinfo.uv_sg_off; - - sts = crystalhd_hw_fill_desc(ioreq, desc, desc_paddr_base, sg_cnt, - sg_st_ix, sg_st_off, xfr_sz); - if (sts != BC_STS_SUCCESS) - return sts; - - *uv_desc_index = sg_st_ix; - - return sts; -} - -static void crystalhd_start_tx_dma_engine(struct crystalhd_hw *hw) -{ - uint32_t dma_cntrl; - - dma_cntrl = crystalhd_reg_rd(hw->adp, MISC1_TX_SW_DESC_LIST_CTRL_STS); - if (!(dma_cntrl & DMA_START_BIT)) { - dma_cntrl |= DMA_START_BIT; - crystalhd_reg_wr(hw->adp, MISC1_TX_SW_DESC_LIST_CTRL_STS, - dma_cntrl); - } - - return; -} - -/* _CHECK_THIS_ - * - * Verify if the Stop generates a completion interrupt or not. - * if it does not generate an interrupt, then add polling here. - */ -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; - unsigned long flags = 0; - - dma_cntrl = crystalhd_reg_rd(hw->adp, MISC1_TX_SW_DESC_LIST_CTRL_STS); - - BCMLOG(BCMLOG_DBG, "Stopping TX DMA Engine..\n"); - - if (!(dma_cntrl & DMA_START_BIT)) { - BCMLOG(BCMLOG_DBG, "Already Stopped\n"); - return BC_STS_SUCCESS; - } - - crystalhd_disable_interrupts(hw->adp); - - /* Issue stop to HW */ - /* This bit when set gave problems. Please check*/ - dma_cntrl &= ~DMA_START_BIT; - crystalhd_reg_wr(hw->adp, MISC1_TX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - - BCMLOG(BCMLOG_DBG, "Cleared the DMA Start bit\n"); - - /* Poll for 3seconds (30 * 100ms) on both the lists..*/ - while ((l1 || l2) && cnt) { - - if (l1) { - l1 = crystalhd_reg_rd(hw->adp, - MISC1_TX_FIRST_DESC_L_ADDR_LIST0); - l1 &= DMA_START_BIT; - } - - if (l2) { - l2 = crystalhd_reg_rd(hw->adp, - MISC1_TX_FIRST_DESC_L_ADDR_LIST1); - l2 &= DMA_START_BIT; - } - - msleep_interruptible(100); - - cnt--; - } - - if (!cnt) { - BCMLOG_ERR("Failed to stop TX DMA.. l1 %d, l2 %d\n", l1, l2); - crystalhd_enable_interrupts(hw->adp); - return BC_STS_ERROR; - } - - spin_lock_irqsave(&hw->lock, flags); - hw->tx_list_post_index = 0; - spin_unlock_irqrestore(&hw->lock, flags); - BCMLOG(BCMLOG_DBG, "stopped TX DMA..\n"); - crystalhd_enable_interrupts(hw->adp); - - return BC_STS_SUCCESS; -} - -static uint32_t crystalhd_get_pib_avail_cnt(struct crystalhd_hw *hw) -{ - /* - * Position of the PIB Entries can be found at - * 0th and the 1st location of the Circular list. - */ - uint32_t Q_addr; - uint32_t pib_cnt, r_offset, w_offset; - - Q_addr = hw->pib_del_Q_addr; - - /* Get the Read Pointer */ - crystalhd_mem_rd(hw->adp, Q_addr, 1, &r_offset); - - /* Get the Write Pointer */ - crystalhd_mem_rd(hw->adp, Q_addr + sizeof(uint32_t), 1, &w_offset); - - if (r_offset == w_offset) - return 0; /* Queue is empty */ - - if (w_offset > r_offset) - pib_cnt = w_offset - r_offset; - else - pib_cnt = (w_offset + MAX_PIB_Q_DEPTH) - - (r_offset + MIN_PIB_Q_DEPTH); - - if (pib_cnt > MAX_PIB_Q_DEPTH) { - BCMLOG_ERR("Invalid PIB Count (%u)\n", pib_cnt); - return 0; - } - - return pib_cnt; -} - -static uint32_t crystalhd_get_addr_from_pib_Q(struct crystalhd_hw *hw) -{ - uint32_t Q_addr; - uint32_t addr_entry, r_offset, w_offset; - - Q_addr = hw->pib_del_Q_addr; - - /* Get the Read Pointer 0Th Location is Read Pointer */ - crystalhd_mem_rd(hw->adp, Q_addr, 1, &r_offset); - - /* Get the Write Pointer 1st Location is Write pointer */ - crystalhd_mem_rd(hw->adp, Q_addr + sizeof(uint32_t), 1, &w_offset); - - /* Queue is empty */ - if (r_offset == w_offset) - return 0; - - if ((r_offset < MIN_PIB_Q_DEPTH) || (r_offset >= MAX_PIB_Q_DEPTH)) - return 0; - - /* Get the Actual Address of the PIB */ - crystalhd_mem_rd(hw->adp, Q_addr + (r_offset * sizeof(uint32_t)), - 1, &addr_entry); - - /* Increment the Read Pointer */ - r_offset++; - - if (MAX_PIB_Q_DEPTH == r_offset) - r_offset = MIN_PIB_Q_DEPTH; - - /* Write back the read pointer to It's Location */ - crystalhd_mem_wr(hw->adp, Q_addr, 1, &r_offset); - - return addr_entry; -} - -static bool crystalhd_rel_addr_to_pib_Q(struct crystalhd_hw *hw, - uint32_t addr_to_rel) -{ - uint32_t Q_addr; - uint32_t r_offset, w_offset, n_offset; - - Q_addr = hw->pib_rel_Q_addr; - - /* Get the Read Pointer */ - crystalhd_mem_rd(hw->adp, Q_addr, 1, &r_offset); - - /* Get the Write Pointer */ - crystalhd_mem_rd(hw->adp, Q_addr + sizeof(uint32_t), 1, &w_offset); - - if ((r_offset < MIN_PIB_Q_DEPTH) || - (r_offset >= MAX_PIB_Q_DEPTH)) - return false; - - n_offset = w_offset + 1; - - if (MAX_PIB_Q_DEPTH == n_offset) - n_offset = MIN_PIB_Q_DEPTH; - - if (r_offset == n_offset) - return false; /* should never happen */ - - /* Write the DRAM ADDR to the Queue at Next Offset */ - crystalhd_mem_wr(hw->adp, Q_addr + (w_offset * sizeof(uint32_t)), - 1, &addr_to_rel); - - /* Put the New value of the write pointer in Queue */ - crystalhd_mem_wr(hw->adp, Q_addr + sizeof(uint32_t), 1, &n_offset); - - return true; -} - -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"); - return; - } - - dst_pib->timeStamp = 0; - dst_pib->picture_number = src_pib->ppb.picture_number; - dst_pib->width = src_pib->ppb.width; - dst_pib->height = src_pib->ppb.height; - dst_pib->chroma_format = src_pib->ppb.chroma_format; - dst_pib->pulldown = src_pib->ppb.pulldown; - dst_pib->flags = src_pib->ppb.flags; - dst_pib->sess_num = src_pib->ptsStcOffset; - dst_pib->aspect_ratio = src_pib->ppb.aspect_ratio; - dst_pib->colour_primaries = src_pib->ppb.colour_primaries; - dst_pib->picture_meta_payload = src_pib->ppb.picture_meta_payload; - dst_pib->frame_rate = src_pib->resolution; - return; -} - -static void crystalhd_hw_proc_pib(struct crystalhd_hw *hw) -{ - unsigned int cnt; - struct c011_pib src_pib; - uint32_t pib_addr, pib_cnt; - struct BC_PIC_INFO_BLOCK *AppPib; - struct crystalhd_rx_dma_pkt *rx_pkt = NULL; - - pib_cnt = crystalhd_get_pib_avail_cnt(hw); - - if (!pib_cnt) - return; - - for (cnt = 0; cnt < pib_cnt; cnt++) { - - pib_addr = crystalhd_get_addr_from_pib_Q(hw); - crystalhd_mem_rd(hw->adp, pib_addr, sizeof(struct c011_pib) / 4, - (uint32_t *)&src_pib); - - if (src_pib.bFormatChange) { - rx_pkt = (struct crystalhd_rx_dma_pkt *) - crystalhd_dioq_fetch(hw->rx_freeq); - if (!rx_pkt) - return; - rx_pkt->flags = 0; - rx_pkt->flags |= COMP_FLAG_PIB_VALID | - COMP_FLAG_FMT_CHANGE; - AppPib = &rx_pkt->pib; - cpy_pib_to_app(&src_pib, AppPib); - - BCMLOG(BCMLOG_DBG, - "App PIB:%x %x %x %x %x %x %x %x %x %x\n", - rx_pkt->pib.picture_number, - rx_pkt->pib.aspect_ratio, - rx_pkt->pib.chroma_format, - rx_pkt->pib.colour_primaries, - rx_pkt->pib.frame_rate, - rx_pkt->pib.height, - rx_pkt->pib.height, - rx_pkt->pib.n_drop, - rx_pkt->pib.pulldown, - rx_pkt->pib.ycom); - - crystalhd_dioq_add(hw->rx_rdyq, (void *)rx_pkt, true, - rx_pkt->pkt_tag); - - } - - crystalhd_rel_addr_to_pib_Q(hw, pib_addr); - } -} - -static void crystalhd_start_rx_dma_engine(struct crystalhd_hw *hw) -{ - uint32_t dma_cntrl; - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS); - if (!(dma_cntrl & DMA_START_BIT)) { - dma_cntrl |= DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS); - if (!(dma_cntrl & DMA_START_BIT)) { - dma_cntrl |= DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - - return; -} - -static void crystalhd_stop_rx_dma_engine(struct crystalhd_hw *hw) -{ - uint32_t dma_cntrl = 0, count = 30; - uint32_t l0y = 1, l0uv = 1, l1y = 1, l1uv = 1; - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS); - if ((dma_cntrl & DMA_START_BIT)) { - dma_cntrl &= ~DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS); - if ((dma_cntrl & DMA_START_BIT)) { - dma_cntrl &= ~DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - - /* Poll for 3seconds (30 * 100ms) on both the lists..*/ - while ((l0y || l0uv || l1y || l1uv) && count) { - - if (l0y) { - l0y = crystalhd_reg_rd(hw->adp, - MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST0); - l0y &= DMA_START_BIT; - 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) - 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) - 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) - hw->rx_list_sts[1] &= ~rx_waiting_uv_intr; - } - msleep_interruptible(100); - count--; - } - - hw->rx_list_post_index = 0; - - BCMLOG(BCMLOG_SSTEP, "Capture Stop: %d List0:Sts:%x List1:Sts:%x\n", - count, hw->rx_list_sts[0], hw->rx_list_sts[1]); -} - -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; - union addr_64 desc_addr; - unsigned long flags; - - if (!hw || !rx_pkt) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - if (hw->rx_list_post_index >= DMA_ENGINE_CNT) { - BCMLOG_ERR("List Out Of bounds %x\n", hw->rx_list_post_index); - return BC_STS_INV_ARG; - } - - spin_lock_irqsave(&hw->rx_lock, flags); - /* FIXME: jarod: sts_free is an enum for 0, - in crystalhd_hw.h... yuk... */ - if (sts_free != hw->rx_list_sts[hw->rx_list_post_index]) { - spin_unlock_irqrestore(&hw->rx_lock, flags); - return BC_STS_BUSY; - } - - if (!hw->rx_list_post_index) { - y_low_addr_reg = MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST0; - y_high_addr_reg = MISC1_Y_RX_FIRST_DESC_U_ADDR_LIST0; - uv_low_addr_reg = MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST0; - uv_high_addr_reg = MISC1_UV_RX_FIRST_DESC_U_ADDR_LIST0; - } else { - y_low_addr_reg = MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST1; - y_high_addr_reg = MISC1_Y_RX_FIRST_DESC_U_ADDR_LIST1; - uv_low_addr_reg = MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST1; - uv_high_addr_reg = MISC1_UV_RX_FIRST_DESC_U_ADDR_LIST1; - } - rx_pkt->pkt_tag = hw->rx_pkt_tag_seed + hw->rx_list_post_index; - hw->rx_list_sts[hw->rx_list_post_index] |= rx_waiting_y_intr; - if (rx_pkt->uv_phy_addr) - hw->rx_list_sts[hw->rx_list_post_index] |= rx_waiting_uv_intr; - hw->rx_list_post_index = (hw->rx_list_post_index + 1) % DMA_ENGINE_CNT; - spin_unlock_irqrestore(&hw->rx_lock, flags); - - crystalhd_dioq_add(hw->rx_actq, (void *)rx_pkt, false, - rx_pkt->pkt_tag); - - crystalhd_start_rx_dma_engine(hw); - /* Program the Y descriptor */ - desc_addr.full_addr = rx_pkt->desc_mem.phy_addr; - crystalhd_reg_wr(hw->adp, y_high_addr_reg, desc_addr.high_part); - crystalhd_reg_wr(hw->adp, y_low_addr_reg, desc_addr.low_part | 0x01); - - if (rx_pkt->uv_phy_addr) { - /* Program the UV descriptor */ - desc_addr.full_addr = rx_pkt->uv_phy_addr; - crystalhd_reg_wr(hw->adp, uv_high_addr_reg, - desc_addr.high_part); - crystalhd_reg_wr(hw->adp, uv_low_addr_reg, - desc_addr.low_part | 0x01); - } - - return BC_STS_SUCCESS; -} - -static enum BC_STATUS crystalhd_hw_post_cap_buff(struct crystalhd_hw *hw, - struct crystalhd_rx_dma_pkt *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, - false, rx_pkt->pkt_tag); - - return sts; -} - -static void crystalhd_get_dnsz(struct crystalhd_hw *hw, uint32_t list_index, - uint32_t *y_dw_dnsz, uint32_t *uv_dw_dnsz) -{ - uint32_t y_dn_sz_reg, uv_dn_sz_reg; - - if (!list_index) { - y_dn_sz_reg = MISC1_Y_RX_LIST0_CUR_BYTE_CNT; - uv_dn_sz_reg = MISC1_UV_RX_LIST0_CUR_BYTE_CNT; - } else { - y_dn_sz_reg = MISC1_Y_RX_LIST1_CUR_BYTE_CNT; - uv_dn_sz_reg = MISC1_UV_RX_LIST1_CUR_BYTE_CNT; - } - - *y_dw_dnsz = crystalhd_reg_rd(hw->adp, y_dn_sz_reg); - *uv_dw_dnsz = crystalhd_reg_rd(hw->adp, uv_dn_sz_reg); -} - -/* - * This function should be called only after making sure that the two DMA - * lists are free. This function does not check if DMA's are active, before - * turning off the DMA. - */ -static void crystalhd_hw_finalize_pause(struct crystalhd_hw *hw) -{ - uint32_t dma_cntrl, aspm; - - hw->stop_pending = 0; - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS); - if (dma_cntrl & DMA_START_BIT) { - dma_cntrl &= ~DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_Y_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - - dma_cntrl = crystalhd_reg_rd(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS); - if (dma_cntrl & DMA_START_BIT) { - dma_cntrl &= ~DMA_START_BIT; - crystalhd_reg_wr(hw->adp, - MISC1_UV_RX_SW_DESC_LIST_CTRL_STS, dma_cntrl); - } - hw->rx_list_post_index = 0; - - aspm = crystalhd_reg_rd(hw->adp, PCIE_DLL_DATA_LINK_CONTROL); - aspm |= ASPM_L1_ENABLE; - /* NAREN BCMLOG(BCMLOG_INFO, "aspm on\n"); */ - crystalhd_reg_wr(hw->adp, PCIE_DLL_DATA_LINK_CONTROL, aspm); -} - -static enum BC_STATUS crystalhd_rx_pkt_done(struct crystalhd_hw *hw, - uint32_t list_index, enum BC_STATUS comp_sts) -{ - struct crystalhd_rx_dma_pkt *rx_pkt = NULL; - uint32_t y_dw_dnsz, uv_dw_dnsz; - enum BC_STATUS sts = BC_STS_SUCCESS; - - if (!hw || list_index >= DMA_ENGINE_CNT) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - rx_pkt = crystalhd_dioq_find_and_fetch(hw->rx_actq, - hw->rx_pkt_tag_seed + list_index); - if (!rx_pkt) { - BCMLOG_ERR( - "Act-Q:PostIx:%x L0Sts:%x L1Sts:%x current L:%x tag:%x comp:%x\n", - hw->rx_list_post_index, hw->rx_list_sts[0], - hw->rx_list_sts[1], list_index, - hw->rx_pkt_tag_seed + list_index, comp_sts); - return BC_STS_INV_ARG; - } - - if (comp_sts == BC_STS_SUCCESS) { - crystalhd_get_dnsz(hw, list_index, &y_dw_dnsz, &uv_dw_dnsz); - rx_pkt->dio_req->uinfo.y_done_sz = y_dw_dnsz; - rx_pkt->flags = COMP_FLAG_DATA_VALID; - if (rx_pkt->uv_phy_addr) - rx_pkt->dio_req->uinfo.uv_done_sz = uv_dw_dnsz; - crystalhd_dioq_add(hw->rx_rdyq, rx_pkt, true, - hw->rx_pkt_tag_seed + list_index); - return sts; - } - - /* Check if we can post this DIO again. */ - return crystalhd_hw_post_cap_buff(hw, rx_pkt); -} - -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; - enum list_sts tmp_lsts; - - if (!(y_err_sts & GET_Y0_ERR_MSK) && !(uv_err_sts & GET_UV0_ERR_MSK)) - return false; - - tmp_lsts = hw->rx_list_sts[0]; - - /* Y0 - DMA */ - tmp = y_err_sts & GET_Y0_ERR_MSK; - if (int_sts & INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_MASK) - hw->rx_list_sts[0] &= ~rx_waiting_y_intr; - - if (y_err_sts & MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK) { - hw->rx_list_sts[0] &= ~rx_waiting_y_intr; - tmp &= ~MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK; - } - - if (y_err_sts & MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK) { - hw->rx_list_sts[0] &= ~rx_y_mask; - hw->rx_list_sts[0] |= rx_y_error; - tmp &= ~MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK; - } - - if (tmp) { - hw->rx_list_sts[0] &= ~rx_y_mask; - hw->rx_list_sts[0] |= rx_y_error; - hw->rx_list_post_index = 0; - } - - /* UV0 - DMA */ - tmp = uv_err_sts & GET_UV0_ERR_MSK; - if (int_sts & INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_MASK) - hw->rx_list_sts[0] &= ~rx_waiting_uv_intr; - - if (uv_err_sts & MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK) { - hw->rx_list_sts[0] &= ~rx_waiting_uv_intr; - tmp &= ~MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK; - } - - if (uv_err_sts & - MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK) { - hw->rx_list_sts[0] &= ~rx_uv_mask; - hw->rx_list_sts[0] |= rx_uv_error; - tmp &= ~MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK; - } - - if (tmp) { - hw->rx_list_sts[0] &= ~rx_uv_mask; - hw->rx_list_sts[0] |= rx_uv_error; - hw->rx_list_post_index = 0; - } - - if (y_err_sts & GET_Y0_ERR_MSK) { - tmp = y_err_sts & GET_Y0_ERR_MSK; - crystalhd_reg_wr(hw->adp, MISC1_Y_RX_ERROR_STATUS, tmp); - } - - if (uv_err_sts & GET_UV0_ERR_MSK) { - tmp = uv_err_sts & GET_UV0_ERR_MSK; - crystalhd_reg_wr(hw->adp, MISC1_UV_RX_ERROR_STATUS, tmp); - } - - return tmp_lsts != hw->rx_list_sts[0]; -} - -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; - enum list_sts tmp_lsts; - - if (!(y_err_sts & GET_Y1_ERR_MSK) && !(uv_err_sts & GET_UV1_ERR_MSK)) - return false; - - tmp_lsts = hw->rx_list_sts[1]; - - /* Y1 - DMA */ - tmp = y_err_sts & GET_Y1_ERR_MSK; - if (int_sts & INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_MASK) - hw->rx_list_sts[1] &= ~rx_waiting_y_intr; - - if (y_err_sts & MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK) { - hw->rx_list_sts[1] &= ~rx_waiting_y_intr; - tmp &= ~MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK; - } - - if (y_err_sts & MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK) { - /* Add retry-support..*/ - hw->rx_list_sts[1] &= ~rx_y_mask; - hw->rx_list_sts[1] |= rx_y_error; - tmp &= ~MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK; - } - - if (tmp) { - hw->rx_list_sts[1] &= ~rx_y_mask; - hw->rx_list_sts[1] |= rx_y_error; - hw->rx_list_post_index = 0; - } - - /* UV1 - DMA */ - tmp = uv_err_sts & GET_UV1_ERR_MSK; - 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; - tmp &= ~MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK; - } - - if (uv_err_sts & MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK) { - /* Add retry-support*/ - hw->rx_list_sts[1] &= ~rx_uv_mask; - hw->rx_list_sts[1] |= rx_uv_error; - tmp &= ~MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK; - } - - if (tmp) { - hw->rx_list_sts[1] &= ~rx_uv_mask; - hw->rx_list_sts[1] |= rx_uv_error; - hw->rx_list_post_index = 0; - } - - if (y_err_sts & GET_Y1_ERR_MSK) { - tmp = y_err_sts & GET_Y1_ERR_MSK; - crystalhd_reg_wr(hw->adp, MISC1_Y_RX_ERROR_STATUS, tmp); - } - - if (uv_err_sts & GET_UV1_ERR_MSK) { - tmp = uv_err_sts & GET_UV1_ERR_MSK; - crystalhd_reg_wr(hw->adp, MISC1_UV_RX_ERROR_STATUS, tmp); - } - - return tmp_lsts != hw->rx_list_sts[1]; -} - - -static void crystalhd_rx_isr(struct crystalhd_hw *hw, uint32_t intr_sts) -{ - unsigned long flags; - uint32_t i, list_avail = 0; - 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 = false; - - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return; - } - - if (!(intr_sts & GET_RX_INTR_MASK)) - return; - - y_err_sts = crystalhd_reg_rd(hw->adp, MISC1_Y_RX_ERROR_STATUS); - uv_err_sts = crystalhd_reg_rd(hw->adp, MISC1_UV_RX_ERROR_STATUS); - - for (i = 0; i < DMA_ENGINE_CNT; i++) { - /* Update States..*/ - spin_lock_irqsave(&hw->rx_lock, flags); - if (i == 0) - ret = crystalhd_rx_list0_handler(hw, intr_sts, - y_err_sts, uv_err_sts); - else - ret = crystalhd_rx_list1_handler(hw, intr_sts, - y_err_sts, uv_err_sts); - if (ret) { - switch (hw->rx_list_sts[i]) { - case sts_free: - comp_sts = BC_STS_SUCCESS; - list_avail = 1; - break; - case rx_y_error: - case rx_uv_error: - case rx_sts_error: - /* We got error on both or Y or uv. */ - hw->stats.rx_errors++; - crystalhd_get_dnsz(hw, i, &y_dn_sz, &uv_dn_sz); - /* FIXME: jarod: this is where - my mini pci-e card is tripping up */ - BCMLOG(BCMLOG_DBG, "list_index:%x rx[%d] Y:%x UV:%x Int:%x YDnSz:%x UVDnSz:%x\n", - i, hw->stats.rx_errors, y_err_sts, - uv_err_sts, intr_sts, y_dn_sz, - uv_dn_sz); - hw->rx_list_sts[i] = sts_free; - comp_sts = BC_STS_ERROR; - break; - default: - /* Wait for completion..*/ - comp_sts = BC_STS_NO_DATA; - break; - } - } - spin_unlock_irqrestore(&hw->rx_lock, flags); - - /* handle completion...*/ - if (comp_sts != BC_STS_NO_DATA) { - crystalhd_rx_pkt_done(hw, i, comp_sts); - comp_sts = BC_STS_NO_DATA; - } - } - - if (list_avail) { - if (hw->stop_pending) { - if ((hw->rx_list_sts[0] == sts_free) && - (hw->rx_list_sts[1] == sts_free)) - crystalhd_hw_finalize_pause(hw); - } else { - crystalhd_hw_start_capture(hw); - } - } -} - -static enum BC_STATUS crystalhd_fw_cmd_post_proc(struct crystalhd_hw *hw, - struct BC_FW_CMD *fw_cmd) -{ - 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 = (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", - hw->pib_del_Q_addr, hw->pib_rel_Q_addr); - break; - case eCMD_C011_INIT: - if (!(crystalhd_load_firmware_config(hw->adp))) { - BCMLOG_ERR("Invalid Params.\n"); - sts = BC_STS_FW_AUTH_FAILED; - } - break; - default: - break; - } - return sts; -} - -static enum BC_STATUS crystalhd_put_ddr2sleep(struct crystalhd_hw *hw) -{ - uint32_t 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); - - rst_cntrl_reg.bcm_7412_rst = 1; - crystalhd_reg_wr(hw->adp, MISC_PERST_DECODER_CTRL, - rst_cntrl_reg.whole_reg); - msleep_interruptible(50); - - rst_cntrl_reg.bcm_7412_rst = 0; - crystalhd_reg_wr(hw->adp, MISC_PERST_DECODER_CTRL, - rst_cntrl_reg.whole_reg); - - /* Close all banks, put DDR in idle */ - bc_dec_reg_wr(hw->adp, SDRAM_PRECHARGE, 0); - - /* Set bit 25 (drop CKE pin of DDR) */ - reg = bc_dec_reg_rd(hw->adp, SDRAM_PARAM); - reg |= 0x02000000; - bc_dec_reg_wr(hw->adp, SDRAM_PARAM, reg); - - /* Reset the audio block */ - bc_dec_reg_wr(hw->adp, AUD_DSP_MISC_SOFT_RESET, 0x1); - - /* Power down Raptor PLL */ - reg = bc_dec_reg_rd(hw->adp, DecHt_PllCCtl); - reg |= 0x00008000; - bc_dec_reg_wr(hw->adp, DecHt_PllCCtl, reg); - - /* Power down all Audio PLL */ - bc_dec_reg_wr(hw->adp, AIO_MISC_PLL_RESET, 0x1); - - /* Power down video clock (75MHz) */ - reg = bc_dec_reg_rd(hw->adp, DecHt_PllECtl); - reg |= 0x00008000; - bc_dec_reg_wr(hw->adp, DecHt_PllECtl, reg); - - /* Power down video clock (75MHz) */ - reg = bc_dec_reg_rd(hw->adp, DecHt_PllDCtl); - reg |= 0x00008000; - bc_dec_reg_wr(hw->adp, DecHt_PllDCtl, reg); - - /* Power down core clock (200MHz) */ - reg = bc_dec_reg_rd(hw->adp, DecHt_PllACtl); - reg |= 0x00008000; - bc_dec_reg_wr(hw->adp, DecHt_PllACtl, reg); - - /* Power down core clock (200MHz) */ - reg = bc_dec_reg_rd(hw->adp, DecHt_PllBCtl); - reg |= 0x00008000; - bc_dec_reg_wr(hw->adp, DecHt_PllBCtl, reg); - - return BC_STS_SUCCESS; -} - -/************************************************ -** -*************************************************/ - -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; - uint32_t dram_offset = BC_FWIMG_ST_ADDR, sig_reg; - - - if (!adp || !buffer || !sz) { - BCMLOG_ERR("Invalid Params.\n"); - return BC_STS_INV_ARG; - } - - reg_data = crystalhd_reg_rd(adp, OTP_CMD); - if (!(reg_data & 0x02)) { - BCMLOG_ERR("Invalid hw config.. otp not programmed\n"); - return BC_STS_ERROR; - } - - reg_data = 0; - crystalhd_reg_wr(adp, DCI_CMD, 0); - reg_data |= BC_BIT(0); - crystalhd_reg_wr(adp, DCI_CMD, reg_data); - - reg_data = 0; - cnt = 1000; - msleep_interruptible(10); - - while (reg_data != BC_BIT(4)) { - reg_data = crystalhd_reg_rd(adp, DCI_STATUS); - reg_data &= BC_BIT(4); - if (--cnt == 0) { - BCMLOG_ERR("Firmware Download RDY Timeout.\n"); - return BC_STS_TIMEOUT; - } - } - - msleep_interruptible(10); - /* Load the FW to the FW_ADDR field in the DCI_FIRMWARE_ADDR */ - crystalhd_reg_wr(adp, DCI_FIRMWARE_ADDR, dram_offset); - temp_buff = (uint32_t *)buffer; - for (cnt = 0; cnt < (sz - fw_sig_len); cnt += 4) { - crystalhd_reg_wr(adp, DCI_DRAM_BASE_ADDR, (dram_offset >> 19)); - crystalhd_reg_wr(adp, DCI_FIRMWARE_DATA, *temp_buff); - dram_offset += 4; - temp_buff++; - } - msleep_interruptible(10); - - temp_buff++; - - sig_reg = (uint32_t)DCI_SIGNATURE_DATA_7; - for (cnt = 0; cnt < 8; cnt++) { - uint32_t swapped_data = *temp_buff; - swapped_data = bswap_32_1(swapped_data); - crystalhd_reg_wr(adp, sig_reg, swapped_data); - sig_reg -= 4; - temp_buff++; - } - msleep_interruptible(10); - - reg_data = 0; - reg_data |= BC_BIT(1); - crystalhd_reg_wr(adp, DCI_CMD, reg_data); - msleep_interruptible(10); - - reg_data = 0; - reg_data = crystalhd_reg_rd(adp, DCI_STATUS); - - if ((reg_data & BC_BIT(9)) == BC_BIT(9)) { - cnt = 1000; - while ((reg_data & BC_BIT(0)) != BC_BIT(0)) { - reg_data = crystalhd_reg_rd(adp, DCI_STATUS); - reg_data &= BC_BIT(0); - if (!(--cnt)) - break; - msleep_interruptible(10); - } - reg_data = 0; - reg_data = crystalhd_reg_rd(adp, DCI_CMD); - reg_data |= BC_BIT(4); - crystalhd_reg_wr(adp, DCI_CMD, reg_data); - - } else { - BCMLOG_ERR("F/w Signature mismatch\n"); - return BC_STS_FW_AUTH_FAILED; - } - - BCMLOG(BCMLOG_INFO, "Firmware Downloaded Successfully\n"); - return BC_STS_SUCCESS; -} - -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; - enum BC_STATUS sts; - - crystalhd_create_event(&fw_cmd_event); - - if (!hw || !fw_cmd) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - cmd_buff = fw_cmd->cmd; - res_buff = fw_cmd->rsp; - - if (!cmd_buff || !res_buff) { - BCMLOG_ERR("Invalid Parameters for F/W Command\n"); - return BC_STS_INV_ARG; - } - - hw->pwr_lock++; - - hw->fwcmd_evt_sts = 0; - hw->pfw_cmd_event = &fw_cmd_event; - - /*Write the command to the memory*/ - crystalhd_mem_wr(hw->adp, TS_Host2CpuSnd, FW_CMD_BUFF_SZ, cmd_buff); - - /*Memory Read for memory arbitrator flush*/ - crystalhd_mem_rd(hw->adp, TS_Host2CpuSnd, 1, &cnt); - - /* Write the command address to mailbox */ - bc_dec_reg_wr(hw->adp, Hst2CpuMbx1, TS_Host2CpuSnd); - msleep_interruptible(50); - - crystalhd_wait_on_event(&fw_cmd_event, hw->fwcmd_evt_sts, 20000, rc, 0); - - if (!rc) { - sts = BC_STS_SUCCESS; - } else if (rc == -EBUSY) { - BCMLOG_ERR("Firmware command T/O\n"); - sts = BC_STS_TIMEOUT; - } else if (rc == -EINTR) { - BCMLOG(BCMLOG_DBG, "FwCmd Wait Signal int.\n"); - sts = BC_STS_IO_USER_ABORT; - } else { - BCMLOG_ERR("FwCmd IO Error.\n"); - sts = BC_STS_IO_ERROR; - } - - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("FwCmd Failed.\n"); - hw->pwr_lock--; - return sts; - } - - /*Get the Response Address*/ - cmd_res_addr = bc_dec_reg_rd(hw->adp, Cpu2HstMbx1); - - /*Read the Response*/ - crystalhd_mem_rd(hw->adp, cmd_res_addr, FW_CMD_BUFF_SZ, res_buff); - - hw->pwr_lock--; - - if (res_buff[2] != C011_RET_SUCCESS) { - BCMLOG_ERR("res_buff[2] != C011_RET_SUCCESS\n"); - return BC_STS_FW_CMD_ERR; - } - - sts = crystalhd_fw_cmd_post_proc(hw, fw_cmd); - if (sts != BC_STS_SUCCESS) - BCMLOG_ERR("crystalhd_fw_cmd_post_proc Failed.\n"); - - return sts; -} - -bool crystalhd_hw_interrupt(struct crystalhd_adp *adp, struct crystalhd_hw *hw) -{ - uint32_t intr_sts = 0; - uint32_t deco_intr = 0; - bool rc = false; - - if (!adp || !hw->dev_started) - return rc; - - hw->stats.num_interrupts++; - hw->pwr_lock++; - - deco_intr = bc_dec_reg_rd(adp, Stream2Host_Intr_Sts); - intr_sts = crystalhd_reg_rd(adp, INTR_INTR_STATUS); - - if (intr_sts) { - /* let system know we processed interrupt..*/ - rc = true; - hw->stats.dev_interrupts++; - } - - if (deco_intr && (deco_intr != 0xdeaddead)) { - - if (deco_intr & 0x80000000) { - /*Set the Event and the status flag*/ - if (hw->pfw_cmd_event) { - hw->fwcmd_evt_sts = 1; - crystalhd_set_event(hw->pfw_cmd_event); - } - } - - if (deco_intr & BC_BIT(1)) - crystalhd_hw_proc_pib(hw); - - bc_dec_reg_wr(adp, Stream2Host_Intr_Sts, deco_intr); - /* FIXME: jarod: No udelay? might this be - the real reason mini pci-e cards were stalling out? */ - bc_dec_reg_wr(adp, Stream2Host_Intr_Sts, 0); - rc = true; - } - - /* Rx interrupts */ - crystalhd_rx_isr(hw, intr_sts); - - /* Tx interrupts*/ - crystalhd_tx_isr(hw, intr_sts); - - /* Clear interrupts */ - if (rc) { - if (intr_sts) - crystalhd_reg_wr(adp, INTR_INTR_CLR_REG, intr_sts); - - crystalhd_reg_wr(adp, INTR_EOI_CTRL, 1); - } - - hw->pwr_lock--; - - return rc; -} - -enum BC_STATUS crystalhd_hw_open(struct crystalhd_hw *hw, - struct crystalhd_adp *adp) -{ - if (!hw || !adp) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - if (hw->dev_started) - return BC_STS_SUCCESS; - - memset(hw, 0, sizeof(struct crystalhd_hw)); - - hw->adp = adp; - spin_lock_init(&hw->lock); - spin_lock_init(&hw->rx_lock); - /* FIXME: jarod: what are these magic numbers?!? */ - hw->tx_ioq_tag_seed = 0x70023070; - hw->rx_pkt_tag_seed = 0x70029070; - - hw->stop_pending = 0; - crystalhd_start_device(hw->adp); - hw->dev_started = true; - - /* set initial core clock */ - hw->core_clock_mhz = CLOCK_PRESET; - hw->prev_n = 0; - hw->pwr_lock = 0; - crystalhd_hw_set_core_clock(hw); - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw) -{ - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - if (!hw->dev_started) - return BC_STS_SUCCESS; - - /* Stop and DDR sleep will happen in here */ - crystalhd_hw_suspend(hw); - hw->dev_started = false; - - return BC_STS_SUCCESS; -} - -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; - enum BC_STATUS sts = BC_STS_SUCCESS; - struct crystalhd_rx_dma_pkt *rpkt; - - if (!hw || !hw->adp) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - sts = crystalhd_hw_create_ioqs(hw); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("Failed to create IOQs..\n"); - return sts; - } - - 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); - if (mem) { - memset(mem, 0, mem_len); - } else { - BCMLOG_ERR("Insufficient Memory For TX\n"); - crystalhd_hw_free_dma_rings(hw); - return BC_STS_INSUFF_RES; - } - /* rx_pkt_pool -- static memory allocation */ - 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(struct dma_descriptor); - hw->tx_pkt_pool[i].list_tag = 0; - - /* Add TX dma requests to Free Queue..*/ - sts = crystalhd_dioq_add(hw->tx_freeq, - &hw->tx_pkt_pool[i], false, 0); - if (sts != BC_STS_SUCCESS) { - crystalhd_hw_free_dma_rings(hw); - return sts; - } - } - - for (i = 0; i < BC_RX_LIST_CNT; i++) { - rpkt = kzalloc(sizeof(*rpkt), GFP_KERNEL); - if (!rpkt) { - BCMLOG_ERR("Insufficient Memory For RX\n"); - crystalhd_hw_free_dma_rings(hw); - return BC_STS_INSUFF_RES; - } - - mem = bc_kern_dma_alloc(hw->adp, mem_len, &phy_addr); - if (mem) { - memset(mem, 0, mem_len); - } else { - BCMLOG_ERR("Insufficient Memory For RX\n"); - crystalhd_hw_free_dma_rings(hw); - kfree(rpkt); - return BC_STS_INSUFF_RES; - } - rpkt->desc_mem.pdma_desc_start = mem; - rpkt->desc_mem.phy_addr = phy_addr; - 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); - } - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *hw) -{ - unsigned int i; - struct crystalhd_rx_dma_pkt *rpkt = NULL; - - if (!hw || !hw->adp) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - /* Delete all IOQs.. */ - crystalhd_hw_delete_ioqs(hw); - - for (i = 0; i < BC_TX_LIST_CNT; i++) { - if (hw->tx_pkt_pool[i].desc_mem.pdma_desc_start) { - bc_kern_dma_free(hw->adp, - hw->tx_pkt_pool[i].desc_mem.sz, - hw->tx_pkt_pool[i].desc_mem.pdma_desc_start, - hw->tx_pkt_pool[i].desc_mem.phy_addr); - - hw->tx_pkt_pool[i].desc_mem.pdma_desc_start = NULL; - } - } - - BCMLOG(BCMLOG_DBG, "Releasing RX Pkt pool\n"); - do { - rpkt = crystalhd_hw_alloc_rx_pkt(hw); - if (!rpkt) - break; - bc_kern_dma_free(hw->adp, rpkt->desc_mem.sz, - rpkt->desc_mem.pdma_desc_start, - rpkt->desc_mem.phy_addr); - kfree(rpkt); - } while (rpkt); - - return BC_STS_SUCCESS; -} - -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) -{ - struct tx_dma_pkt *tx_dma_packet = NULL; - uint32_t first_desc_u_addr, first_desc_l_addr; - uint32_t low_addr, high_addr; - union addr_64 desc_addr; - enum BC_STATUS sts, add_sts; - uint32_t dummy_index = 0; - unsigned long flags; - bool rc; - - if (!hw || !ioreq || !call_back || !cb_event || !list_id) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - /* - * Since we hit code in busy condition very frequently, - * we will check the code in status first before - * checking the availability of free elem. - * - * This will avoid the Q fetch/add in normal condition. - */ - rc = crystalhd_code_in_full(hw->adp, ioreq->uinfo.xfr_len, - false, data_flags); - if (rc) { - hw->stats.cin_busy++; - return BC_STS_BUSY; - } - - /* Get a list from TxFreeQ */ - 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; - } - - sts = crystalhd_xlat_sgl_to_dma_desc(ioreq, - &tx_dma_packet->desc_mem, - &dummy_index); - if (sts != BC_STS_SUCCESS) { - add_sts = crystalhd_dioq_add(hw->tx_freeq, tx_dma_packet, - false, 0); - if (add_sts != BC_STS_SUCCESS) - BCMLOG_ERR("double fault..\n"); - - return sts; - } - - hw->pwr_lock++; - - desc_addr.full_addr = tx_dma_packet->desc_mem.phy_addr; - low_addr = desc_addr.low_part; - high_addr = desc_addr.high_part; - - tx_dma_packet->call_back = call_back; - tx_dma_packet->cb_event = cb_event; - tx_dma_packet->dio_req = ioreq; - - spin_lock_irqsave(&hw->lock, flags); - - if (hw->tx_list_post_index == 0) { - first_desc_u_addr = MISC1_TX_FIRST_DESC_U_ADDR_LIST0; - first_desc_l_addr = MISC1_TX_FIRST_DESC_L_ADDR_LIST0; - } else { - first_desc_u_addr = MISC1_TX_FIRST_DESC_U_ADDR_LIST1; - first_desc_l_addr = MISC1_TX_FIRST_DESC_L_ADDR_LIST1; - } - - *list_id = tx_dma_packet->list_tag = hw->tx_ioq_tag_seed + - hw->tx_list_post_index; - - hw->tx_list_post_index = (hw->tx_list_post_index + 1) % DMA_ENGINE_CNT; - - spin_unlock_irqrestore(&hw->lock, flags); - - - /* Insert in Active Q..*/ - crystalhd_dioq_add(hw->tx_actq, tx_dma_packet, false, - tx_dma_packet->list_tag); - - /* - * Interrupt will come as soon as you write - * the valid bit. So be ready for that. All - * the initialization should happen before that. - */ - crystalhd_start_tx_dma_engine(hw); - crystalhd_reg_wr(hw->adp, first_desc_u_addr, desc_addr.high_part); - - crystalhd_reg_wr(hw->adp, first_desc_l_addr, desc_addr.low_part | - 0x01); - /* Be sure we set the valid bit ^^^^ */ - - return BC_STS_SUCCESS; -} - -/* - * This is a force cancel and we are racing with ISR. - * - * Will try to remove the req from ActQ before ISR gets it. - * If ISR gets it first then the completion happens in the - * normal path and we will return _STS_NO_DATA from here. - * - * FIX_ME: Not Tested the actual condition.. - */ -enum BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, - uint32_t list_id) -{ - if (!hw || !list_id) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - crystalhd_stop_tx_dma_engine(hw); - crystalhd_hw_tx_req_complete(hw, list_id, BC_STS_IO_USER_ABORT); - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, - struct crystalhd_dio_req *ioreq, bool en_post) -{ - struct crystalhd_rx_dma_pkt *rpkt; - uint32_t tag, uv_desc_ix = 0; - enum BC_STATUS sts; - - if (!hw || !ioreq) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - rpkt = crystalhd_hw_alloc_rx_pkt(hw); - if (!rpkt) { - BCMLOG_ERR("Insufficient resources\n"); - return BC_STS_INSUFF_RES; - } - - rpkt->dio_req = ioreq; - tag = rpkt->pkt_tag; - - sts = crystalhd_xlat_sgl_to_dma_desc(ioreq, &rpkt->desc_mem, - &uv_desc_ix); - if (sts != BC_STS_SUCCESS) - return sts; - - rpkt->uv_phy_addr = 0; - - /* 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(struct dma_descriptor) * (uv_desc_ix + 1)); - - if (en_post) - sts = crystalhd_hw_post_cap_buff(hw, rpkt); - else - sts = crystalhd_dioq_add(hw->rx_freeq, rpkt, false, tag); - - return sts; -} - -enum BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, - struct BC_PIC_INFO_BLOCK *pib, - struct crystalhd_dio_req **ioreq) -{ - struct crystalhd_rx_dma_pkt *rpkt; - uint32_t timeout = BC_PROC_OUTPUT_TIMEOUT / 1000; - uint32_t sig_pending = 0; - - - if (!hw || !ioreq || !pib) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - rpkt = crystalhd_dioq_fetch_wait(hw->rx_rdyq, timeout, &sig_pending); - if (!rpkt) { - if (sig_pending) { - BCMLOG(BCMLOG_INFO, "wait on frame time out %d\n", - sig_pending); - return BC_STS_IO_USER_ABORT; - } else { - return BC_STS_TIMEOUT; - } - } - - rpkt->dio_req->uinfo.comp_flags = rpkt->flags; - - if (rpkt->flags & COMP_FLAG_PIB_VALID) - memcpy(pib, &rpkt->pib, sizeof(*pib)); - - *ioreq = rpkt->dio_req; - - crystalhd_hw_free_rx_pkt(hw, rpkt); - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw) -{ - struct crystalhd_rx_dma_pkt *rx_pkt; - enum BC_STATUS sts; - uint32_t i; - - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - /* This is start of capture.. Post to both the lists.. */ - for (i = 0; i < DMA_ENGINE_CNT; i++) { - rx_pkt = crystalhd_dioq_fetch(hw->rx_freeq); - if (!rx_pkt) - return BC_STS_NO_DATA; - sts = crystalhd_hw_post_cap_buff(hw, rx_pkt); - if (BC_STS_SUCCESS != sts) - break; - - } - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw) -{ - void *temp = NULL; - - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - crystalhd_stop_rx_dma_engine(hw); - - do { - temp = crystalhd_dioq_fetch(hw->rx_freeq); - if (temp) - crystalhd_rx_pkt_rel_call_back(hw, temp); - } while (temp); - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw) -{ - hw->stats.pause_cnt++; - hw->stop_pending = 1; - - if ((hw->rx_list_sts[0] == sts_free) && - (hw->rx_list_sts[1] == sts_free)) - crystalhd_hw_finalize_pause(hw); - - return BC_STS_SUCCESS; -} - -enum BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw) -{ - enum BC_STATUS sts; - uint32_t aspm; - - hw->stop_pending = 0; - - aspm = crystalhd_reg_rd(hw->adp, PCIE_DLL_DATA_LINK_CONTROL); - aspm &= ~ASPM_L1_ENABLE; -/* NAREN BCMLOG(BCMLOG_INFO, "aspm off\n"); */ - crystalhd_reg_wr(hw->adp, PCIE_DLL_DATA_LINK_CONTROL, aspm); - - sts = crystalhd_hw_start_capture(hw); - return sts; -} - -enum BC_STATUS crystalhd_hw_suspend(struct crystalhd_hw *hw) -{ - enum BC_STATUS sts; - - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - sts = crystalhd_put_ddr2sleep(hw); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("Failed to Put DDR To Sleep!!\n"); - return BC_STS_ERROR; - } - - if (!crystalhd_stop_device(hw->adp)) { - BCMLOG_ERR("Failed to Stop Device!!\n"); - return BC_STS_ERROR; - } - - return BC_STS_SUCCESS; -} - -void crystalhd_hw_stats(struct crystalhd_hw *hw, - struct crystalhd_hw_stats *stats) -{ - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return; - } - - /* if called w/NULL stats, its a req to zero out the stats */ - if (!stats) { - memset(&hw->stats, 0, sizeof(hw->stats)); - return; - } - - hw->stats.freeq_count = crystalhd_dioq_count(hw->rx_freeq); - hw->stats.rdyq_count = crystalhd_dioq_count(hw->rx_rdyq); - memcpy(stats, &hw->stats, sizeof(*stats)); -} - -enum BC_STATUS crystalhd_hw_set_core_clock(struct crystalhd_hw *hw) -{ - uint32_t reg, n, i; - uint32_t vco_mg, refresh_reg; - - if (!hw) { - BCMLOG_ERR("Invalid Arguments\n"); - return BC_STS_INV_ARG; - } - - /* FIXME: jarod: wha? */ - /*n = (hw->core_clock_mhz * 3) / 20 + 1; */ - n = hw->core_clock_mhz/5; - - if (n == hw->prev_n) - return BC_STS_CLK_NOCHG; - - if (hw->pwr_lock > 0) { - /* BCMLOG(BCMLOG_INFO,"pwr_lock is %u\n", hw->pwr_lock) */ - return BC_STS_CLK_NOCHG; - } - - i = n * 27; - if (i < 560) - vco_mg = 0; - else if (i < 900) - vco_mg = 1; - else if (i < 1030) - vco_mg = 2; - else - vco_mg = 3; - - reg = bc_dec_reg_rd(hw->adp, DecHt_PllACtl); - - reg &= 0xFFFFCFC0; - reg |= n; - reg |= vco_mg << 12; - - BCMLOG(BCMLOG_INFO, "clock is moving to %d with n %d with vco_mg %d\n", - hw->core_clock_mhz, n, vco_mg); - - /* Change the DRAM refresh rate to accommodate the new frequency */ - /* refresh reg = ((refresh_rate * clock_rate)/16) - 1; rounding up*/ - refresh_reg = (7 * hw->core_clock_mhz / 16); - bc_dec_reg_wr(hw->adp, SDRAM_REF_PARAM, ((1 << 12) | refresh_reg)); - - bc_dec_reg_wr(hw->adp, DecHt_PllACtl, reg); - - i = 0; - - for (i = 0; i < 10; i++) { - reg = bc_dec_reg_rd(hw->adp, DecHt_PllACtl); - - if (reg & 0x00020000) { - hw->prev_n = n; - /* FIXME: jarod: outputting - a random "C" is... confusing... */ - BCMLOG(BCMLOG_INFO, "C"); - return BC_STS_SUCCESS; - } else { - msleep_interruptible(10); - } - } - BCMLOG(BCMLOG_INFO, "clk change failed\n"); - return BC_STS_CLK_NOCHG; -} diff --git a/drivers/staging/crystalhd/crystalhd_hw.h b/drivers/staging/crystalhd/crystalhd_hw.h deleted file mode 100644 index d5cb68dfe695..000000000000 --- a/drivers/staging/crystalhd/crystalhd_hw.h +++ /dev/null @@ -1,407 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_hw . h - * - * Description: - * BCM70012 Linux driver hardware layer. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#ifndef _CRYSTALHD_HW_H_ -#define _CRYSTALHD_HW_H_ - -#include "crystalhd.h" - -/* HW constants..*/ -#define DMA_ENGINE_CNT 2 -#define MAX_PIB_Q_DEPTH 64 -#define MIN_PIB_Q_DEPTH 2 -#define WR_POINTER_OFF 4 - -#define ASPM_L1_ENABLE (BC_BIT(27)) - -/************************************************* - 7412 Decoder Registers. -**************************************************/ -#define FW_CMD_BUFF_SZ 64 -#define TS_Host2CpuSnd 0x00000100 -#define Hst2CpuMbx1 0x00100F00 -#define Cpu2HstMbx1 0x00100F04 -#define MbxStat1 0x00100F08 -#define Stream2Host_Intr_Sts 0x00100F24 -#define C011_RET_SUCCESS 0x0 /* Return status of firmware command. */ - -/* TS input status register */ -#define TS_StreamAFIFOStatus 0x0010044C -#define TS_StreamBFIFOStatus 0x0010084C - -/*UART Selection definitions*/ -#define UartSelectA 0x00100300 -#define UartSelectB 0x00100304 - -#define BSVS_UART_DEC_NONE 0x00 -#define BSVS_UART_DEC_OUTER 0x01 -#define BSVS_UART_DEC_INNER 0x02 -#define BSVS_UART_STREAM 0x03 - -/* Code-In fifo */ -#define REG_DecCA_RegCinCTL 0xa00 -#define REG_DecCA_RegCinBase 0xa0c -#define REG_DecCA_RegCinEnd 0xa10 -#define REG_DecCA_RegCinWrPtr 0xa04 -#define REG_DecCA_RegCinRdPtr 0xa08 - -#define REG_Dec_TsUser0Base 0x100864 -#define REG_Dec_TsUser0Rdptr 0x100868 -#define REG_Dec_TsUser0Wrptr 0x10086C -#define REG_Dec_TsUser0End 0x100874 - -/* ASF Case ...*/ -#define REG_Dec_TsAudCDB2Base 0x10036c -#define REG_Dec_TsAudCDB2Rdptr 0x100378 -#define REG_Dec_TsAudCDB2Wrptr 0x100374 -#define REG_Dec_TsAudCDB2End 0x100370 - -/* DRAM bringup Registers */ -#define SDRAM_PARAM 0x00040804 -#define SDRAM_PRECHARGE 0x000408B0 -#define SDRAM_EXT_MODE 0x000408A4 -#define SDRAM_MODE 0x000408A0 -#define SDRAM_REFRESH 0x00040890 -#define SDRAM_REF_PARAM 0x00040808 - -#define DecHt_PllACtl 0x34000C -#define DecHt_PllBCtl 0x340010 -#define DecHt_PllCCtl 0x340014 -#define DecHt_PllDCtl 0x340034 -#define DecHt_PllECtl 0x340038 -#define AUD_DSP_MISC_SOFT_RESET 0x00240104 -#define AIO_MISC_PLL_RESET 0x0026000C -#define PCIE_CLK_REQ_REG 0xDC -#define PCI_CLK_REQ_ENABLE (BC_BIT(8)) - -/************************************************* - F/W Copy engine definitions.. -**************************************************/ -#define BC_FWIMG_ST_ADDR 0x00000000 -/* FIXME: jarod: there's a kernel function that'll do this for us... */ -#define rotr32_1(x, n) (((x) >> n) | ((x) << (32 - n))) -#define bswap_32_1(x) ((rotr32_1((x), 24) & 0x00ff00ff) | (rotr32_1((x), 8) & 0xff00ff00)) - -#define DecHt_HostSwReset 0x340000 -#define BC_DRAM_FW_CFG_ADDR 0x001c2000 - -union addr_64 { - struct { - uint32_t low_part; - uint32_t high_part; - }; - - uint64_t full_addr; - -}; - -union intr_mask_reg { - struct { - uint32_t mask_tx_done:1; - uint32_t mask_tx_err:1; - uint32_t mask_rx_done:1; - uint32_t mask_rx_err:1; - uint32_t mask_pcie_err:1; - uint32_t mask_pcie_rbusmast_err:1; - uint32_t mask_pcie_rgr_bridge:1; - uint32_t reserved:25; - }; - - uint32_t whole_reg; - -}; - -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*/ - uint32_t stop_bcm_7412_clk:1; /* 1 ->Stops branch of - 27MHz clk used to clk BCM7412*/ - uint32_t reserved1:27; /* Reserved. No Effect*/ - }; - - uint32_t whole_reg; - -}; - -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 */ - uint32_t pll_pwr_dn:1; /* When set, powers down the - main PLL. The alternate clock bit should be set to - select an alternate clock before setting this bit.*/ - uint32_t reserved0:5; /* Reserved */ - uint32_t pll_mult:8; /* This setting controls - the multiplier for the PLL. */ - uint32_t pll_div:4; /* This setting controls - the divider for the PLL. */ - uint32_t reserved1:12; /* Reserved */ - }; - - uint32_t whole_reg; - -}; - -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*/ - uint32_t stop_7412_clk:1; /* 1 ->Stops branch of 27MHz - clk used to clk BCM7412*/ - uint32_t res1:27; /* Reserved. No Effect */ - }; - - uint32_t whole_reg; - -}; - -union desc_low_addr_reg { - struct { - uint32_t list_valid:1; - uint32_t reserved:4; - uint32_t low_addr:27; - }; - - uint32_t whole_reg; - -}; - -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 */ - - /* 1st u32 */ - uint32_t buff_addr_low; /* 1 buffer address low */ - uint32_t buff_addr_high; /* 2 buffer address high */ - - /* 3rd u32 */ - uint32_t res2:2; /* 0-1 - Reserved */ - uint32_t xfer_size:23; /* 2-24 = Xfer size in words */ - uint32_t res3:6; /* 25-30 reserved */ - uint32_t intr_enable:1; /* 31 - Interrupt After this desc */ - - /* 4th u32 */ - uint32_t endian_xlat_align:2; /* 0-1 Endian Translation */ - uint32_t next_desc_cont:1; /* 2 - Next desc is in contig memory */ - uint32_t res4:25; /* 3 - 27 Reserved bits */ - uint32_t fill_bytes:2; /* 28-29 Bits Fill Bytes */ - uint32_t dma_dir:1; /* 30 bit DMA Direction */ - uint32_t last_rec_indicator:1; /* 31 bit Last Record Indicator */ - - /* 5th u32 */ - uint32_t next_desc_addr_low; /* 32-bits Next Desc Addr lower */ - - /* 6th u32 */ - uint32_t next_desc_addr_high; /* 32-bits Next Desc Addr Higher */ - - /* 7th u32 */ - uint32_t res8; /* Last 32bits reserved */ - -}; - -/* - * 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. - */ -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 */ - -}; - -enum list_sts { - sts_free = 0, - - /* RX-Y Bits 0:7 */ - rx_waiting_y_intr = 0x00000001, - rx_y_error = 0x00000004, - - /* RX-UV Bits 8:16 */ - rx_waiting_uv_intr = 0x0000100, - rx_uv_error = 0x0000400, - - rx_sts_waiting = (rx_waiting_y_intr|rx_waiting_uv_intr), - rx_sts_error = (rx_y_error|rx_uv_error), - - rx_y_mask = 0x000000FF, - rx_uv_mask = 0x0000FF00, -}; - -struct tx_dma_pkt { - struct dma_desc_mem desc_mem; - hw_comp_callback call_back; - struct crystalhd_dio_req *dio_req; - wait_queue_head_t *cb_event; - uint32_t list_tag; -}; - -struct crystalhd_rx_dma_pkt { - struct dma_desc_mem desc_mem; - struct crystalhd_dio_req *dio_req; - uint32_t pkt_tag; - uint32_t flags; - struct BC_PIC_INFO_BLOCK pib; - dma_addr_t uv_phy_addr; - struct crystalhd_rx_dma_pkt *next; -}; - -struct crystalhd_hw_stats { - uint32_t rx_errors; - uint32_t tx_errors; - uint32_t freeq_count; - uint32_t rdyq_count; - uint32_t num_interrupts; - uint32_t dev_interrupts; - uint32_t cin_busy; - uint32_t pause_cnt; -}; - -struct crystalhd_hw { - 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; - - struct crystalhd_rx_dma_pkt *rx_pkt_pool_head; - uint32_t rx_pkt_tag_seed; - - bool dev_started; - void *adp; - - wait_queue_head_t *pfw_cmd_event; - int fwcmd_evt_sts; - - uint32_t pib_del_Q_addr; - uint32_t pib_rel_Q_addr; - - 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; - 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.. */ - struct crystalhd_hw_stats stats; - - /* Core clock in MHz */ - uint32_t core_clock_mhz; - uint32_t prev_n; - uint32_t pwr_lock; -}; - -/* Clock defines for power control */ -#define CLOCK_PRESET 175 - -/* DMA engine register BIT mask wrappers.. */ -#define DMA_START_BIT MISC1_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_MASK - -#define GET_RX_INTR_MASK (INTR_INTR_STATUS_L1_UV_RX_DMA_ERR_INTR_MASK | \ - INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_MASK | \ - INTR_INTR_STATUS_L1_Y_RX_DMA_ERR_INTR_MASK | \ - INTR_INTR_STATUS_L1_Y_RX_DMA_DONE_INTR_MASK | \ - INTR_INTR_STATUS_L0_UV_RX_DMA_ERR_INTR_MASK | \ - INTR_INTR_STATUS_L0_UV_RX_DMA_DONE_INTR_MASK | \ - INTR_INTR_STATUS_L0_Y_RX_DMA_ERR_INTR_MASK | \ - INTR_INTR_STATUS_L0_Y_RX_DMA_DONE_INTR_MASK) - -#define GET_Y0_ERR_MSK (MISC1_Y_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK) - -#define GET_UV0_ERR_MSK (MISC1_UV_RX_ERROR_STATUS_RX_L0_OVERRUN_ERROR_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L0_UNDERRUN_ERROR_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L0_DESC_TX_ABORT_ERRORS_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L0_FIFO_FULL_ERRORS_MASK) - -#define GET_Y1_ERR_MSK (MISC1_Y_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_MASK | \ - MISC1_Y_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK) - -#define GET_UV1_ERR_MSK (MISC1_UV_RX_ERROR_STATUS_RX_L1_OVERRUN_ERROR_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L1_DESC_TX_ABORT_ERRORS_MASK | \ - MISC1_UV_RX_ERROR_STATUS_RX_L1_FIFO_FULL_ERRORS_MASK) - - -/**** API Exposed to the other layers ****/ -enum BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, - void *buffer, uint32_t sz); -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); -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 *); - - -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); - -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 */ -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 deleted file mode 100644 index e6fb331c6735..000000000000 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ /dev/null @@ -1,782 +0,0 @@ -/*************************************************************************** - BCM70010 Linux driver - Copyright (c) 2005-2009, Broadcom Corporation. - - This driver 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, version 2 of the License. - - This driver 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 driver. If not, see . -***************************************************************************/ - -#include "crystalhd.h" - -#include -#include - - -static DEFINE_MUTEX(chd_dec_mutex); -static struct class *crystalhd_class; - -static struct crystalhd_adp *g_adp_info; - -static irqreturn_t chd_dec_isr(int irq, void *arg) -{ - struct crystalhd_adp *adp = arg; - int rc = 0; - if (adp) - rc = crystalhd_cmd_interrupt(&adp->cmds); - - return IRQ_RETVAL(rc); -} - -static int chd_dec_enable_int(struct crystalhd_adp *adp) -{ - int rc = 0; - - if (!adp || !adp->pdev) { - BCMLOG_ERR("Invalid arg!!\n"); - return -EINVAL; - } - - if (adp->pdev->msi_enabled) - adp->msi = 1; - else - adp->msi = pci_enable_msi(adp->pdev); - - rc = request_irq(adp->pdev->irq, chd_dec_isr, IRQF_SHARED, - adp->name, (void *)adp); - if (rc) { - BCMLOG_ERR("Interrupt request failed..\n"); - pci_disable_msi(adp->pdev); - } - - return rc; -} - -static int chd_dec_disable_int(struct crystalhd_adp *adp) -{ - if (!adp || !adp->pdev) { - BCMLOG_ERR("Invalid arg!!\n"); - return -EINVAL; - } - - free_irq(adp->pdev->irq, adp); - - if (adp->msi) - pci_disable_msi(adp->pdev); - - return 0; -} - -static struct -crystalhd_ioctl_data *chd_dec_alloc_iodata(struct crystalhd_adp *adp, - bool isr) -{ - unsigned long flags = 0; - struct crystalhd_ioctl_data *temp; - - if (!adp) - return NULL; - - spin_lock_irqsave(&adp->lock, flags); - - temp = adp->idata_free_head; - if (temp) { - adp->idata_free_head = adp->idata_free_head->next; - memset(temp, 0, sizeof(*temp)); - } - - spin_unlock_irqrestore(&adp->lock, flags); - return temp; -} - -static void chd_dec_free_iodata(struct crystalhd_adp *adp, - struct crystalhd_ioctl_data *iodata, bool isr) -{ - unsigned long flags = 0; - - if (!adp || !iodata) - return; - - spin_lock_irqsave(&adp->lock, flags); - iodata->next = adp->idata_free_head; - adp->idata_free_head = iodata; - spin_unlock_irqrestore(&adp->lock, flags); -} - -static inline int crystalhd_user_data(void __user *ud, void *dr, - int size, int set) -{ - int rc; - - if (!ud || !dr) { - BCMLOG_ERR("Invalid arg\n"); - return -EINVAL; - } - - if (set) - rc = copy_to_user(ud, dr, size); - else - rc = copy_from_user(dr, ud, size); - - if (rc) { - BCMLOG_ERR("Invalid args for command\n"); - rc = -EFAULT; - } - - return rc; -} - -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; - int rc = 0; - - if (!adp || !io || !ua || !m_sz) { - BCMLOG_ERR("Invalid Arg!!\n"); - return -EINVAL; - } - - io->add_cdata = vmalloc(m_sz); - if (!io->add_cdata) { - BCMLOG_ERR("kalloc fail for sz:%x\n", m_sz); - return -ENOMEM; - } - - io->add_cdata_sz = m_sz; - ua_off = ua + sizeof(io->udata); - rc = crystalhd_user_data((void __user *)ua_off, io->add_cdata, - io->add_cdata_sz, 0); - if (rc) { - BCMLOG_ERR("failed to pull add_cdata sz:%x ua_off:%x\n", - io->add_cdata_sz, (unsigned int)ua_off); - vfree(io->add_cdata); - io->add_cdata = NULL; - return -ENODATA; - } - - return rc; -} - -static int chd_dec_release_cdata(struct crystalhd_adp *adp, - struct crystalhd_ioctl_data *io, - unsigned long ua) -{ - unsigned long ua_off; - int rc; - - if (!adp || !io || !ua) { - BCMLOG_ERR("Invalid Arg!!\n"); - return -EINVAL; - } - - if (io->cmd != BCM_IOC_FW_DOWNLOAD) { - ua_off = ua + sizeof(io->udata); - rc = crystalhd_user_data((void __user *)ua_off, io->add_cdata, - io->add_cdata_sz, 1); - if (rc) { - BCMLOG_ERR( - "failed to push add_cdata sz:%x ua_off:%x\n", - io->add_cdata_sz, (unsigned int)ua_off); - return -ENODATA; - } - } - - if (io->add_cdata) { - vfree(io->add_cdata); - io->add_cdata = NULL; - } - - return 0; -} - -static int chd_dec_proc_user_data(struct crystalhd_adp *adp, - struct crystalhd_ioctl_data *io, - unsigned long ua, int set) -{ - int rc; - uint32_t m_sz = 0; - - if (!adp || !io || !ua) { - BCMLOG_ERR("Invalid Arg!!\n"); - return -EINVAL; - } - - rc = crystalhd_user_data((void __user *)ua, &io->udata, - sizeof(io->udata), set); - if (rc) { - BCMLOG_ERR("failed to %s iodata\n", (set ? "set" : "get")); - return rc; - } - - switch (io->cmd) { - case BCM_IOC_MEM_RD: - case BCM_IOC_MEM_WR: - case BCM_IOC_FW_DOWNLOAD: - m_sz = io->udata.u.devMem.NumDwords * 4; - if (set) - rc = chd_dec_release_cdata(adp, io, ua); - else - rc = chd_dec_fetch_cdata(adp, io, m_sz, ua); - break; - default: - break; - } - - return rc; -} - -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; - struct crystalhd_ioctl_data *temp; - enum BC_STATUS sts = BC_STS_SUCCESS; - - temp = chd_dec_alloc_iodata(adp, 0); - if (!temp) { - BCMLOG_ERR("Failed to get iodata..\n"); - return -EINVAL; - } - - temp->u_id = uid; - temp->cmd = cmd; - - rc = chd_dec_proc_user_data(adp, temp, ua, 0); - if (!rc) { - sts = func(&adp->cmds, temp); - if (sts == BC_STS_PENDING) - sts = BC_STS_NOT_IMPL; - temp->udata.RetSts = sts; - rc = chd_dec_proc_user_data(adp, temp, ua, 1); - } - - chd_dec_free_iodata(adp, temp, 0); - - return rc; -} - -/* API interfaces */ -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"); - return -EINVAL; - } - - uc = fd->private_data; - if (!uc) { - BCMLOG_ERR("Failed to get uc\n"); - return -ENODATA; - } - - mutex_lock(&chd_dec_mutex); - cproc = crystalhd_get_cmd_proc(&adp->cmds, cmd, uc); - if (!cproc) { - BCMLOG_ERR("Unhandled command: %d\n", cmd); - mutex_unlock(&chd_dec_mutex); - return -EINVAL; - } - - ret = chd_dec_api_cmd(adp, ua, uc->uid, cmd, cproc); - mutex_unlock(&chd_dec_mutex); - return ret; -} - -static int chd_dec_open(struct inode *in, struct file *fd) -{ - struct crystalhd_adp *adp = chd_get_adp(); - int rc = 0; - enum BC_STATUS sts = BC_STS_SUCCESS; - struct crystalhd_user *uc = NULL; - - if (!adp) { - BCMLOG_ERR("Invalid adp\n"); - return -EINVAL; - } - - if (adp->cfg_users >= BC_LINK_MAX_OPENS) { - BCMLOG(BCMLOG_INFO, "Already in use.%d\n", adp->cfg_users); - return -EBUSY; - } - - sts = crystalhd_user_open(&adp->cmds, &uc); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("cmd_user_open - %d\n", sts); - rc = -EBUSY; - } - - adp->cfg_users++; - - fd->private_data = uc; - - return rc; -} - -static int chd_dec_close(struct inode *in, struct file *fd) -{ - struct crystalhd_adp *adp = chd_get_adp(); - struct crystalhd_user *uc; - - if (!adp) { - BCMLOG_ERR("Invalid adp\n"); - return -EINVAL; - } - - uc = fd->private_data; - if (!uc) { - BCMLOG_ERR("Failed to get uc\n"); - return -ENODATA; - } - - crystalhd_user_close(&adp->cmds, uc); - - adp->cfg_users--; - - return 0; -} - -static const struct file_operations chd_dec_fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = chd_dec_ioctl, - .open = chd_dec_open, - .release = chd_dec_close, - .llseek = noop_llseek, -}; - -static int chd_dec_init_chdev(struct crystalhd_adp *adp) -{ - struct crystalhd_ioctl_data *temp; - struct device *dev; - int rc = -ENODEV, i = 0; - - if (!adp) - goto fail; - - adp->chd_dec_major = register_chrdev(0, CRYSTALHD_API_NAME, - &chd_dec_fops); - if (adp->chd_dec_major < 0) { - BCMLOG_ERR("Failed to create config dev\n"); - rc = adp->chd_dec_major; - goto fail; - } - - /* register crystalhd class */ - crystalhd_class = class_create(THIS_MODULE, "crystalhd"); - if (IS_ERR(crystalhd_class)) { - rc = PTR_ERR(crystalhd_class); - BCMLOG_ERR("failed to create class\n"); - goto class_create_fail; - } - - dev = device_create(crystalhd_class, NULL, - MKDEV(adp->chd_dec_major, 0), NULL, "crystalhd"); - if (IS_ERR(dev)) { - rc = PTR_ERR(dev); - BCMLOG_ERR("failed to create device\n"); - goto device_create_fail; - } - - rc = crystalhd_create_elem_pool(adp, BC_LINK_ELEM_POOL_SZ); - if (rc) { - BCMLOG_ERR("failed to create device\n"); - goto elem_pool_fail; - } - - /* Allocate general purpose ioctl pool. */ - for (i = 0; i < CHD_IODATA_POOL_SZ; i++) { - temp = kzalloc(sizeof(*temp), GFP_KERNEL); - if (!temp) { - BCMLOG_ERR("ioctl data pool kzalloc failed\n"); - rc = -ENOMEM; - goto kzalloc_fail; - } - /* Add to global pool.. */ - chd_dec_free_iodata(adp, temp, 0); - } - - return 0; - -kzalloc_fail: - crystalhd_delete_elem_pool(adp); -elem_pool_fail: - device_destroy(crystalhd_class, MKDEV(adp->chd_dec_major, 0)); -device_create_fail: - class_destroy(crystalhd_class); -class_create_fail: - unregister_chrdev(adp->chd_dec_major, CRYSTALHD_API_NAME); -fail: - return rc; -} - -static void chd_dec_release_chdev(struct crystalhd_adp *adp) -{ - struct crystalhd_ioctl_data *temp = NULL; - if (!adp) - return; - - if (adp->chd_dec_major > 0) { - /* unregister crystalhd class */ - device_destroy(crystalhd_class, MKDEV(adp->chd_dec_major, 0)); - unregister_chrdev(adp->chd_dec_major, CRYSTALHD_API_NAME); - BCMLOG(BCMLOG_INFO, "released api device - %d\n", - adp->chd_dec_major); - class_destroy(crystalhd_class); - } - adp->chd_dec_major = 0; - - /* Clear iodata pool.. */ - do { - temp = chd_dec_alloc_iodata(adp, 0); - kfree(temp); - } while (temp); - - crystalhd_delete_elem_pool(adp); -} - -static int chd_pci_reserve_mem(struct crystalhd_adp *pinfo) -{ - int rc; - unsigned long bar2 = pci_resource_start(pinfo->pdev, 2); - uint32_t mem_len = pci_resource_len(pinfo->pdev, 2); - unsigned long bar0 = pci_resource_start(pinfo->pdev, 0); - uint32_t i2o_len = pci_resource_len(pinfo->pdev, 0); - - BCMLOG(BCMLOG_SSTEP, "bar2:0x%lx-0x%08x bar0:0x%lx-0x%08x\n", - bar2, mem_len, bar0, i2o_len); - - rc = check_mem_region(bar2, mem_len); - if (rc) { - BCMLOG_ERR("No valid mem region...\n"); - return -ENOMEM; - } - - pinfo->addr = ioremap_nocache(bar2, mem_len); - if (!pinfo->addr) { - BCMLOG_ERR("Failed to remap mem region...\n"); - return -ENOMEM; - } - - pinfo->pci_mem_start = bar2; - pinfo->pci_mem_len = mem_len; - - rc = check_mem_region(bar0, i2o_len); - if (rc) { - BCMLOG_ERR("No valid mem region...\n"); - return -ENOMEM; - } - - pinfo->i2o_addr = ioremap_nocache(bar0, i2o_len); - if (!pinfo->i2o_addr) { - BCMLOG_ERR("Failed to remap mem region...\n"); - return -ENOMEM; - } - - pinfo->pci_i2o_start = bar0; - pinfo->pci_i2o_len = i2o_len; - - rc = pci_request_regions(pinfo->pdev, pinfo->name); - if (rc < 0) { - BCMLOG_ERR("Region request failed: %d\n", rc); - return rc; - } - - BCMLOG(BCMLOG_SSTEP, "Mapped addr:0x%08lx i2o_addr:0x%08lx\n", - (unsigned long)pinfo->addr, (unsigned long)pinfo->i2o_addr); - - return 0; -} - -static void chd_pci_release_mem(struct crystalhd_adp *pinfo) -{ - if (!pinfo) - return; - - if (pinfo->addr) - iounmap(pinfo->addr); - - if (pinfo->i2o_addr) - iounmap(pinfo->i2o_addr); - - pci_release_regions(pinfo->pdev); -} - - -static void chd_dec_pci_remove(struct pci_dev *pdev) -{ - struct crystalhd_adp *pinfo; - enum BC_STATUS sts = BC_STS_SUCCESS; - - pinfo = pci_get_drvdata(pdev); - if (!pinfo) { - BCMLOG_ERR("could not get adp\n"); - return; - } - - sts = crystalhd_delete_cmd_context(&pinfo->cmds); - if (sts != BC_STS_SUCCESS) - BCMLOG_ERR("cmd delete :%d\n", sts); - - chd_dec_release_chdev(pinfo); - - chd_dec_disable_int(pinfo); - - chd_pci_release_mem(pinfo); - pci_disable_device(pinfo->pdev); - - kfree(pinfo); - g_adp_info = NULL; -} - -static int chd_dec_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *entry) -{ - struct crystalhd_adp *pinfo; - int rc; - 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", - pdev->vendor, pdev->device, pdev->subsystem_vendor, - pdev->subsystem_device); - - pinfo = kzalloc(sizeof(*pinfo), GFP_KERNEL); - if (!pinfo) { - BCMLOG_ERR("Failed to allocate memory\n"); - return -ENOMEM; - } - - pinfo->pdev = pdev; - - rc = pci_enable_device(pdev); - if (rc) { - BCMLOG_ERR("Failed to enable PCI device\n"); - goto err; - } - - snprintf(pinfo->name, sizeof(pinfo->name), "crystalhd_pci_e:%d:%d:%d", - pdev->bus->number, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn)); - - rc = chd_pci_reserve_mem(pinfo); - if (rc) { - BCMLOG_ERR("Failed to setup memory regions.\n"); - pci_disable_device(pdev); - rc = -ENOMEM; - goto err; - } - - pinfo->present = 1; - pinfo->drv_data = entry->driver_data; - - /* Setup adapter level lock.. */ - spin_lock_init(&pinfo->lock); - - /* setup api stuff.. */ - chd_dec_init_chdev(pinfo); - rc = chd_dec_enable_int(pinfo); - if (rc) { - BCMLOG_ERR("_enable_int err:%d\n", rc); - pci_disable_device(pdev); - rc = -ENODEV; - goto err; - } - - /* Set dma mask... */ - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { - pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); - pinfo->dmabits = 64; - } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { - pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); - pinfo->dmabits = 32; - } else { - BCMLOG_ERR("Unabled to setup DMA %d\n", rc); - pci_disable_device(pdev); - rc = -ENODEV; - goto err; - } - - sts = crystalhd_setup_cmd_context(&pinfo->cmds, pinfo); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("cmd setup :%d\n", sts); - pci_disable_device(pdev); - rc = -ENODEV; - goto err; - } - - pci_set_master(pdev); - - pci_set_drvdata(pdev, pinfo); - - g_adp_info = pinfo; - - return 0; - -err: - kfree(pinfo); - return rc; -} - -#ifdef CONFIG_PM -static int chd_dec_pci_suspend(struct pci_dev *pdev, pm_message_t state) -{ - struct crystalhd_adp *adp; - struct crystalhd_ioctl_data *temp; - enum BC_STATUS sts = BC_STS_SUCCESS; - - adp = pci_get_drvdata(pdev); - if (!adp) { - BCMLOG_ERR("could not get adp\n"); - return -ENODEV; - } - - temp = chd_dec_alloc_iodata(adp, false); - if (!temp) { - BCMLOG_ERR("could not get ioctl data\n"); - return -ENODEV; - } - - sts = crystalhd_suspend(&adp->cmds, temp); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("BCM70012 Suspend %d\n", sts); - return -ENODEV; - } - - chd_dec_free_iodata(adp, temp, false); - chd_dec_disable_int(adp); - pci_save_state(pdev); - - /* Disable IO/bus master/irq router */ - pci_disable_device(pdev); - pci_set_power_state(pdev, pci_choose_state(pdev, state)); - return 0; -} - -static int chd_dec_pci_resume(struct pci_dev *pdev) -{ - struct crystalhd_adp *adp; - enum BC_STATUS sts = BC_STS_SUCCESS; - int rc; - - adp = pci_get_drvdata(pdev); - if (!adp) { - BCMLOG_ERR("could not get adp\n"); - return -ENODEV; - } - - pci_set_power_state(pdev, PCI_D0); - pci_restore_state(pdev); - - /* device's irq possibly is changed, driver should take care */ - if (pci_enable_device(pdev)) { - BCMLOG_ERR("Failed to enable PCI device\n"); - return 1; - } - - pci_set_master(pdev); - - rc = chd_dec_enable_int(adp); - if (rc) { - BCMLOG_ERR("_enable_int err:%d\n", rc); - pci_disable_device(pdev); - return -ENODEV; - } - - sts = crystalhd_resume(&adp->cmds); - if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("BCM70012 Resume %d\n", sts); - pci_disable_device(pdev); - return -ENODEV; - } - - return 0; -} -#endif - -static const struct pci_device_id chd_dec_pci_id_table[] = { - { PCI_VDEVICE(BROADCOM, 0x1612), 8 }, - { 0, }, -}; -MODULE_DEVICE_TABLE(pci, chd_dec_pci_id_table); - -static struct pci_driver bc_chd_70012_driver = { - .name = "Broadcom 70012 Decoder", - .probe = chd_dec_pci_probe, - .remove = chd_dec_pci_remove, - .id_table = chd_dec_pci_id_table, -#ifdef CONFIG_PM - .suspend = chd_dec_pci_suspend, - .resume = chd_dec_pci_resume -#endif -}; - -void chd_set_log_level(struct crystalhd_adp *adp, char *arg) -{ - if ((!arg) || (strlen(arg) < 3)) - g_linklog_level = BCMLOG_ERROR | BCMLOG_DATA; - else if (!strncmp(arg, "sstep", 5)) - g_linklog_level = BCMLOG_INFO | BCMLOG_DATA | BCMLOG_DBG | - BCMLOG_SSTEP | BCMLOG_ERROR; - else if (!strncmp(arg, "info", 4)) - g_linklog_level = BCMLOG_ERROR | BCMLOG_DATA | BCMLOG_INFO; - else if (!strncmp(arg, "debug", 5)) - g_linklog_level = BCMLOG_ERROR | BCMLOG_DATA | BCMLOG_INFO | - BCMLOG_DBG; - else if (!strncmp(arg, "pball", 5)) - g_linklog_level = 0xFFFFFFFF & ~(BCMLOG_SPINLOCK); - else if (!strncmp(arg, "silent", 6)) - g_linklog_level = 0; - else - g_linklog_level = 0; -} - -struct crystalhd_adp *chd_get_adp(void) -{ - return g_adp_info; -} - -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", - 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); - - return rc; -} -module_init(chd_dec_module_init); - -static void __exit chd_dec_module_cleanup(void) -{ - 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); -} -module_exit(chd_dec_module_cleanup); - -MODULE_AUTHOR("Naren Sankar "); -MODULE_AUTHOR("Prasad Bolisetty "); -MODULE_DESCRIPTION(CRYSTAL_HD_NAME); -MODULE_LICENSE("GPL"); -MODULE_ALIAS("bcm70012"); diff --git a/drivers/staging/crystalhd/crystalhd_lnx.h b/drivers/staging/crystalhd/crystalhd_lnx.h deleted file mode 100644 index 49e1ef3a19af..000000000000 --- a/drivers/staging/crystalhd/crystalhd_lnx.h +++ /dev/null @@ -1,93 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_lnx . h - * - * Description: - * BCM70012 Linux driver - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#ifndef _CRYSTALHD_LNX_H_ -#define _CRYSTALHD_LNX_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "crystalhd.h" - -#define CRYSTAL_HD_NAME "Broadcom Crystal HD Decoder (BCM70012) Driver" - -/* OS specific PCI information structure and adapter information. */ -struct crystalhd_adp { - /* Hardware board/PCI specifics */ - char name[32]; - struct pci_dev *pdev; - - unsigned long pci_mem_start; - uint32_t pci_mem_len; - void __iomem *addr; - - unsigned long pci_i2o_start; - uint32_t pci_i2o_len; - void __iomem *i2o_addr; - - unsigned int drv_data; - unsigned int dmabits; /* 32 | 64 */ - unsigned int registered; - unsigned int present; - unsigned int msi; - - spinlock_t lock; - - /* API Related */ - int chd_dec_major; - unsigned int cfg_users; - - struct crystalhd_ioctl_data *idata_free_head; /* ioctl data pool */ - struct crystalhd_elem *elem_pool_head; /* Queue element pool */ - - struct crystalhd_cmd cmds; - - struct crystalhd_dio_req *ua_map_free_head; - struct pci_pool *fill_byte_pool; -}; - - -struct crystalhd_adp *chd_get_adp(void); -void chd_set_log_level(struct crystalhd_adp *adp, char *arg); - -#endif - diff --git a/drivers/staging/crystalhd/crystalhd_misc.c b/drivers/staging/crystalhd/crystalhd_misc.c deleted file mode 100644 index 3aabf75b7d97..000000000000 --- a/drivers/staging/crystalhd/crystalhd_misc.c +++ /dev/null @@ -1,1044 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_misc . c - * - * Description: - * BCM70012 Linux driver misc routines. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#include "crystalhd.h" - -#include - -uint32_t g_linklog_level; - -static inline uint32_t crystalhd_dram_rd(struct crystalhd_adp *adp, - uint32_t mem_off) -{ - crystalhd_reg_wr(adp, DCI_DRAM_BASE_ADDR, (mem_off >> 19)); - return bc_dec_reg_rd(adp, (0x00380000 | (mem_off & 0x0007FFFF))); -} - -static inline void crystalhd_dram_wr(struct crystalhd_adp *adp, - uint32_t mem_off, uint32_t val) -{ - crystalhd_reg_wr(adp, DCI_DRAM_BASE_ADDR, (mem_off >> 19)); - bc_dec_reg_wr(adp, (0x00380000 | (mem_off & 0x0007FFFF)), val); -} - -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 struct crystalhd_dio_req *crystalhd_alloc_dio(struct crystalhd_adp *adp) -{ - unsigned long flags = 0; - struct crystalhd_dio_req *temp = NULL; - - if (!adp) { - BCMLOG_ERR("Invalid Arg!!\n"); - return temp; - } - - spin_lock_irqsave(&adp->lock, flags); - temp = adp->ua_map_free_head; - if (temp) - adp->ua_map_free_head = adp->ua_map_free_head->next; - spin_unlock_irqrestore(&adp->lock, flags); - - return temp; -} - -static void crystalhd_free_dio(struct crystalhd_adp *adp, - struct crystalhd_dio_req *dio) -{ - unsigned long flags = 0; - - if (!adp || !dio) - return; - spin_lock_irqsave(&adp->lock, flags); - dio->sig = crystalhd_dio_inv; - dio->page_cnt = 0; - dio->fb_size = 0; - memset(&dio->uinfo, 0, sizeof(dio->uinfo)); - dio->next = adp->ua_map_free_head; - adp->ua_map_free_head = dio; - spin_unlock_irqrestore(&adp->lock, flags); -} - -static struct crystalhd_elem *crystalhd_alloc_elem(struct crystalhd_adp *adp) -{ - unsigned long flags = 0; - struct crystalhd_elem *temp = NULL; - - if (!adp) - return temp; - spin_lock_irqsave(&adp->lock, flags); - temp = adp->elem_pool_head; - if (temp) { - adp->elem_pool_head = adp->elem_pool_head->flink; - memset(temp, 0, sizeof(*temp)); - } - spin_unlock_irqrestore(&adp->lock, flags); - - return temp; -} -static void crystalhd_free_elem(struct crystalhd_adp *adp, - struct crystalhd_elem *elem) -{ - unsigned long flags = 0; - - if (!adp || !elem) - return; - spin_lock_irqsave(&adp->lock, flags); - elem->flink = adp->elem_pool_head; - adp->elem_pool_head = elem; - spin_unlock_irqrestore(&adp->lock, flags); -} - -static inline void crystalhd_set_sg(struct scatterlist *sg, struct page *page, - unsigned int len, unsigned int offset) -{ - sg_set_page(sg, page, len, offset); -#ifdef CONFIG_X86_64 - sg->dma_length = len; -#endif -} - -static inline void crystalhd_init_sg(struct scatterlist *sg, - unsigned int entries) -{ - /* http://lkml.org/lkml/2007/11/27/68 */ - sg_init_table(sg, entries); -} - -/*========================== Extern ========================================*/ -/** - * bc_dec_reg_rd - Read 7412's device register. - * @adp: Adapter instance - * @reg_off: Register offset. - * - * Return: - * 32bit value read - * - * 7412's device register read routine. This interface use - * 7412's device access range mapped from BAR-2 (4M) of PCIe - * configuration space. - */ -uint32_t bc_dec_reg_rd(struct crystalhd_adp *adp, uint32_t reg_off) -{ - if (!adp || (reg_off > adp->pci_mem_len)) { - BCMLOG_ERR("dec_rd_reg_off outof range: 0x%08x\n", reg_off); - return 0; - } - - return readl(adp->addr + reg_off); -} - -/** - * bc_dec_reg_wr - Write 7412's device register - * @adp: Adapter instance - * @reg_off: Register offset. - * @val: Dword value to be written. - * - * Return: - * none. - * - * 7412's device register write routine. This interface use - * 7412's device access range mapped from BAR-2 (4M) of PCIe - * configuration space. - */ -void bc_dec_reg_wr(struct crystalhd_adp *adp, uint32_t reg_off, uint32_t val) -{ - if (!adp || (reg_off > adp->pci_mem_len)) { - BCMLOG_ERR("dec_wr_reg_off outof range: 0x%08x\n", reg_off); - return; - } - writel(val, adp->addr + reg_off); - udelay(8); -} - -/** - * crystalhd_reg_rd - Read Link's device register. - * @adp: Adapter instance - * @reg_off: Register offset. - * - * Return: - * 32bit value read - * - * Link device register read routine. This interface use - * Link's device access range mapped from BAR-1 (64K) of PCIe - * configuration space. - * - */ -uint32_t crystalhd_reg_rd(struct crystalhd_adp *adp, uint32_t reg_off) -{ - if (!adp || (reg_off > adp->pci_i2o_len)) { - BCMLOG_ERR("link_rd_reg_off outof range: 0x%08x\n", reg_off); - return 0; - } - return readl(adp->i2o_addr + reg_off); -} - -/** - * crystalhd_reg_wr - Write Link's device register - * @adp: Adapter instance - * @reg_off: Register offset. - * @val: Dword value to be written. - * - * Return: - * none. - * - * Link device register write routine. This interface use - * Link's device access range mapped from BAR-1 (64K) of PCIe - * configuration space. - * - */ -void crystalhd_reg_wr(struct crystalhd_adp *adp, uint32_t reg_off, - uint32_t val) -{ - if (!adp || (reg_off > adp->pci_i2o_len)) { - BCMLOG_ERR("link_wr_reg_off outof range: 0x%08x\n", reg_off); - return; - } - writel(val, adp->i2o_addr + reg_off); -} - -/** - * crystalhd_mem_rd - Read data from 7412's DRAM area. - * @adp: Adapter instance - * @start_off: Start offset. - * @dw_cnt: Count in dwords. - * @rd_buff: Buffer to copy the data from dram. - * - * Return: - * Status. - * - * 7412's Dram read routine. - */ -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; - - if (!adp || !rd_buff || - (bc_chk_dram_range(adp, start_off, dw_cnt) != BC_STS_SUCCESS)) { - BCMLOG_ERR("Invalid arg\n"); - return BC_STS_INV_ARG; - } - for (ix = 0; ix < dw_cnt; ix++) - rd_buff[ix] = crystalhd_dram_rd(adp, (start_off + (ix * 4))); - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_mem_wr - Write data to 7412's DRAM area. - * @adp: Adapter instance - * @start_off: Start offset. - * @dw_cnt: Count in dwords. - * @wr_buff: Data Buffer to be written. - * - * Return: - * Status. - * - * 7412's Dram write routine. - */ -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; - - if (!adp || !wr_buff || - (bc_chk_dram_range(adp, start_off, dw_cnt) != BC_STS_SUCCESS)) { - BCMLOG_ERR("Invalid arg\n"); - return BC_STS_INV_ARG; - } - - for (ix = 0; ix < dw_cnt; ix++) - crystalhd_dram_wr(adp, (start_off + (ix * 4)), wr_buff[ix]); - - return BC_STS_SUCCESS; -} -/** - * crystalhd_pci_cfg_rd - PCIe config read - * @adp: Adapter instance - * @off: PCI config space offset. - * @len: Size -- Byte, Word & dword. - * @val: Value read - * - * Return: - * Status. - * - * Get value from Link's PCIe config space. - */ -enum BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, - uint32_t len, uint32_t *val) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - int rc = 0; - - if (!adp || !val) { - BCMLOG_ERR("Invalid arg\n"); - return BC_STS_INV_ARG; - } - - switch (len) { - case 1: - rc = pci_read_config_byte(adp->pdev, off, (u8 *)val); - break; - case 2: - rc = pci_read_config_word(adp->pdev, off, (u16 *)val); - break; - case 4: - rc = pci_read_config_dword(adp->pdev, off, (u32 *)val); - break; - default: - rc = -EINVAL; - sts = BC_STS_INV_ARG; - BCMLOG_ERR("Invalid len:%d\n", len); - } - - if (rc && (sts == BC_STS_SUCCESS)) - sts = BC_STS_ERROR; - - return sts; -} - -/** - * crystalhd_pci_cfg_wr - PCIe config write - * @adp: Adapter instance - * @off: PCI config space offset. - * @len: Size -- Byte, Word & dword. - * @val: Value to be written - * - * Return: - * Status. - * - * Set value to Link's PCIe config space. - */ -enum BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *adp, uint32_t off, - uint32_t len, uint32_t val) -{ - enum BC_STATUS sts = BC_STS_SUCCESS; - int rc = 0; - - if (!adp || !val) { - BCMLOG_ERR("Invalid arg\n"); - return BC_STS_INV_ARG; - } - - switch (len) { - case 1: - rc = pci_write_config_byte(adp->pdev, off, (u8)val); - break; - case 2: - rc = pci_write_config_word(adp->pdev, off, (u16)val); - break; - case 4: - rc = pci_write_config_dword(adp->pdev, off, val); - break; - default: - rc = -EINVAL; - sts = BC_STS_INV_ARG; - BCMLOG_ERR("Invalid len:%d\n", len); - } - - if (rc && (sts == BC_STS_SUCCESS)) - sts = BC_STS_ERROR; - - return sts; -} - -/** - * bc_kern_dma_alloc - Allocate memory for Dma rings - * @adp: Adapter instance - * @sz: Size of the memory to allocate. - * @phy_addr: Physical address of the memory allocated. - * Typedef to system's dma_addr_t (u64) - * - * Return: - * Pointer to allocated memory.. - * - * Wrapper to Linux kernel interface. - * - */ -void *bc_kern_dma_alloc(struct crystalhd_adp *adp, uint32_t sz, - dma_addr_t *phy_addr) -{ - void *temp = NULL; - - if (!adp || !sz || !phy_addr) { - BCMLOG_ERR("Invalid Arg..\n"); - return temp; - } - - temp = pci_alloc_consistent(adp->pdev, sz, phy_addr); - if (temp) - memset(temp, 0, sz); - - return temp; -} - -/** - * bc_kern_dma_free - Release Dma ring memory. - * @adp: Adapter instance - * @sz: Size of the memory to allocate. - * @ka: Kernel virtual address returned during _dio_alloc() - * @phy_addr: Physical address of the memory allocated. - * Typedef to system's dma_addr_t (u64) - * - * Return: - * none. - */ -void bc_kern_dma_free(struct crystalhd_adp *adp, uint32_t sz, void *ka, - dma_addr_t phy_addr) -{ - if (!adp || !ka || !sz || !phy_addr) { - BCMLOG_ERR("Invalid Arg..\n"); - return; - } - - pci_free_consistent(adp->pdev, sz, ka, phy_addr); -} - -/** - * crystalhd_create_dioq - Create Generic DIO queue - * @adp: Adapter instance - * @dioq_hnd: Handle to the dio queue created - * @cb : Optional - Call back To free the element. - * @cbctx: Context to pass to callback. - * - * Return: - * status - * - * Initialize Generic DIO queue to hold any data. Callback - * will be used to free elements while deleting the queue. - */ -enum BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *adp, - struct crystalhd_dioq **dioq_hnd, - crystalhd_data_free_cb cb, void *cbctx) -{ - struct crystalhd_dioq *dioq = NULL; - - if (!adp || !dioq_hnd) { - BCMLOG_ERR("Invalid arg!!\n"); - return BC_STS_INV_ARG; - } - - dioq = kzalloc(sizeof(*dioq), GFP_KERNEL); - if (!dioq) - return BC_STS_INSUFF_RES; - - spin_lock_init(&dioq->lock); - dioq->sig = BC_LINK_DIOQ_SIG; - 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; - dioq->cb_context = cbctx; - *dioq_hnd = dioq; - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_delete_dioq - Delete Generic DIO queue - * @adp: Adapter instance - * @dioq: DIOQ instance.. - * - * Return: - * None. - * - * Release Generic DIO queue. This function will remove - * all the entries from the Queue and will release data - * by calling the call back provided during creation. - * - */ -void crystalhd_delete_dioq(struct crystalhd_adp *adp, - struct crystalhd_dioq *dioq) -{ - void *temp; - - if (!dioq || (dioq->sig != BC_LINK_DIOQ_SIG)) - return; - - do { - temp = crystalhd_dioq_fetch(dioq); - if (temp && dioq->data_rel_cb) - dioq->data_rel_cb(dioq->cb_context, temp); - } while (temp); - dioq->sig = 0; - kfree(dioq); -} - -/** - * crystalhd_dioq_add - Add new DIO request element. - * @ioq: DIO queue instance - * @t: DIO request to be added. - * @wake: True - Wake up suspended process. - * @tag: Special tag to assign - For search and get. - * - * Return: - * Status. - * - * Insert new element to Q tail. - */ -enum BC_STATUS crystalhd_dioq_add(struct crystalhd_dioq *ioq, void *data, - bool wake, uint32_t tag) -{ - unsigned long flags = 0; - struct crystalhd_elem *tmp; - - if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG) || !data) { - BCMLOG_ERR("Invalid arg!!\n"); - return BC_STS_INV_ARG; - } - - tmp = crystalhd_alloc_elem(ioq->adp); - if (!tmp) { - BCMLOG_ERR("No free elements.\n"); - return BC_STS_INSUFF_RES; - } - - tmp->data = data; - tmp->tag = tag; - spin_lock_irqsave(&ioq->lock, flags); - tmp->flink = (struct crystalhd_elem *)&ioq->head; - tmp->blink = ioq->tail; - tmp->flink->blink = tmp; - tmp->blink->flink = tmp; - ioq->count++; - spin_unlock_irqrestore(&ioq->lock, flags); - - if (wake) - crystalhd_set_event(&ioq->event); - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_dioq_fetch - Fetch element from head. - * @ioq: DIO queue instance - * - * Return: - * data element from the head.. - * - * Remove an element from Queue. - */ -void *crystalhd_dioq_fetch(struct crystalhd_dioq *ioq) -{ - unsigned long flags = 0; - struct crystalhd_elem *tmp; - struct crystalhd_elem *ret = NULL; - void *data = NULL; - - if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG)) { - BCMLOG_ERR("Invalid arg!!\n"); - return data; - } - - spin_lock_irqsave(&ioq->lock, flags); - tmp = ioq->head; - if (tmp != (struct crystalhd_elem *)&ioq->head) { - ret = tmp; - tmp->flink->blink = tmp->blink; - tmp->blink->flink = tmp->flink; - ioq->count--; - } - spin_unlock_irqrestore(&ioq->lock, flags); - if (ret) { - data = ret->data; - crystalhd_free_elem(ioq->adp, ret); - } - - return data; -} -/** - * crystalhd_dioq_find_and_fetch - Search the tag and Fetch element - * @ioq: DIO queue instance - * @tag: Tag to search for. - * - * Return: - * element from the head.. - * - * Search TAG and remove the element. - */ -void *crystalhd_dioq_find_and_fetch(struct crystalhd_dioq *ioq, uint32_t tag) -{ - unsigned long flags = 0; - struct crystalhd_elem *tmp; - struct crystalhd_elem *ret = NULL; - void *data = NULL; - - if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG)) { - BCMLOG_ERR("Invalid arg!!\n"); - return data; - } - - spin_lock_irqsave(&ioq->lock, flags); - tmp = ioq->head; - while (tmp != (struct crystalhd_elem *)&ioq->head) { - if (tmp->tag == tag) { - ret = tmp; - tmp->flink->blink = tmp->blink; - tmp->blink->flink = tmp->flink; - ioq->count--; - break; - } - tmp = tmp->flink; - } - spin_unlock_irqrestore(&ioq->lock, flags); - - if (ret) { - data = ret->data; - crystalhd_free_elem(ioq->adp, ret); - } - - return data; -} - -/** - * crystalhd_dioq_fetch_wait - Fetch element from Head. - * @ioq: DIO queue instance - * @to_secs: Wait timeout in seconds.. - * - * Return: - * element from the head.. - * - * 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(struct crystalhd_dioq *ioq, uint32_t to_secs, - uint32_t *sig_pend) -{ - unsigned long flags = 0; - int rc = 0, count; - void *tmp = NULL; - - if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG) || !to_secs || !sig_pend) { - BCMLOG_ERR("Invalid arg!!\n"); - return tmp; - } - - count = to_secs; - spin_lock_irqsave(&ioq->lock, flags); - while ((ioq->count == 0) && count) { - spin_unlock_irqrestore(&ioq->lock, flags); - - crystalhd_wait_on_event(&ioq->event, - (ioq->count > 0), 1000, rc, 0); - if (rc == 0) { - goto out; - } else if (rc == -EINTR) { - BCMLOG(BCMLOG_INFO, "Cancelling fetch wait\n"); - *sig_pend = 1; - return tmp; - } - spin_lock_irqsave(&ioq->lock, flags); - count--; - } - spin_unlock_irqrestore(&ioq->lock, flags); - -out: - return crystalhd_dioq_fetch(ioq); -} - -/** - * crystalhd_map_dio - Map user address for DMA - * @adp: Adapter instance - * @ubuff: User buffer to map. - * @ubuff_sz: User buffer size. - * @uv_offset: UV buffer offset. - * @en_422mode: TRUE:422 FALSE:420 Capture mode. - * @dir_tx: TRUE for Tx (To device from host) - * @dio_hnd: Handle to mapped DIO request. - * - * Return: - * Status. - * - * This routine maps user address and lock pages for DMA. - * - */ -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, - struct crystalhd_dio_req **dio_hnd) -{ - 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; - 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"); - return BC_STS_INV_ARG; - } - /* Compute pages */ - uaddr = (unsigned long)ubuff; - count = (unsigned long)ubuff_sz; - end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT; - start = uaddr >> PAGE_SHIFT; - nr_pages = end - start; - - if (!count || ((uaddr + count) < uaddr)) { - BCMLOG_ERR("User addr overflow!!\n"); - return BC_STS_INV_ARG; - } - - dio = crystalhd_alloc_dio(adp); - if (!dio) { - BCMLOG_ERR("dio pool empty..\n"); - return BC_STS_INSUFF_RES; - } - - if (dir_tx) { - rw = WRITE; - dio->direction = DMA_TO_DEVICE; - } else { - rw = READ; - dio->direction = DMA_FROM_DEVICE; - } - - if (nr_pages > dio->max_pages) { - BCMLOG_ERR("max_pages(%d) exceeded(%d)!!\n", - dio->max_pages, nr_pages); - crystalhd_unmap_dio(adp, dio); - return BC_STS_INSUFF_RES; - } - - if (uv_offset) { - uv_start = (uaddr + (unsigned long)uv_offset) >> PAGE_SHIFT; - dio->uinfo.uv_sg_ix = uv_start - start; - dio->uinfo.uv_sg_off = ((uaddr + (unsigned long)uv_offset) & - ~PAGE_MASK); - } - - dio->fb_size = ubuff_sz & 0x03; - if (dio->fb_size) { - res = copy_from_user(dio->fb_va, - (void __user *)(uaddr + count - dio->fb_size), - dio->fb_size); - if (res) { - BCMLOG_ERR("failed %d to copy %u fill bytes from %p\n", - res, dio->fb_size, - (void *)(uaddr + count-dio->fb_size)); - crystalhd_unmap_dio(adp, dio); - return BC_STS_INSUFF_RES; - } - } - - down_read(¤t->mm->mmap_sem); - res = get_user_pages(current, current->mm, uaddr, nr_pages, rw == READ, - 0, dio->pages, NULL); - up_read(¤t->mm->mmap_sem); - - /* Save for release..*/ - dio->sig = crystalhd_dio_locked; - if (res < nr_pages) { - BCMLOG_ERR("get pages failed: %d-%d\n", nr_pages, res); - dio->page_cnt = res; - crystalhd_unmap_dio(adp, dio); - return BC_STS_ERROR; - } - - dio->page_cnt = nr_pages; - /* Get scatter/gather */ - crystalhd_init_sg(dio->sg, dio->page_cnt); - crystalhd_set_sg(&dio->sg[0], dio->pages[0], 0, uaddr & ~PAGE_MASK); - if (nr_pages > 1) { - dio->sg[0].length = PAGE_SIZE - dio->sg[0].offset; - -#ifdef CONFIG_X86_64 - dio->sg[0].dma_length = dio->sg[0].length; -#endif - count -= dio->sg[0].length; - for (i = 1; i < nr_pages; i++) { - if (count < 4) { - spsz = count; - skip_fb_sg = 1; - } else { - spsz = (count < PAGE_SIZE) ? - (count & ~0x03) : PAGE_SIZE; - } - crystalhd_set_sg(&dio->sg[i], dio->pages[i], spsz, 0); - count -= spsz; - } - } else { - if (count < 4) { - dio->sg[0].length = count; - skip_fb_sg = 1; - } else { - dio->sg[0].length = count - dio->fb_size; - } -#ifdef CONFIG_X86_64 - dio->sg[0].dma_length = dio->sg[0].length; -#endif - } - 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); - crystalhd_unmap_dio(adp, dio); - return BC_STS_ERROR; - } - if (dio->sg_cnt && skip_fb_sg) - dio->sg_cnt -= 1; - dio->sig = crystalhd_dio_sg_mapped; - /* Fill in User info.. */ - dio->uinfo.xfr_len = ubuff_sz; - dio->uinfo.xfr_buff = ubuff; - dio->uinfo.uv_offset = uv_offset; - dio->uinfo.b422mode = en_422mode; - dio->uinfo.dir_tx = dir_tx; - - *dio_hnd = dio; - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_unmap_sgl - Release mapped resources - * @adp: Adapter instance - * @dio: DIO request instance - * - * Return: - * Status. - * - * This routine is to unmap the user buffer pages. - */ -enum BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *adp, - struct crystalhd_dio_req *dio) -{ - struct page *page = NULL; - int j = 0; - - if (!adp || !dio) { - BCMLOG_ERR("Invalid arg\n"); - return BC_STS_INV_ARG; - } - - if ((dio->page_cnt > 0) && (dio->sig != crystalhd_dio_inv)) { - for (j = 0; j < dio->page_cnt; j++) { - page = dio->pages[j]; - if (page) { - if (!PageReserved(page) && - (dio->direction == DMA_FROM_DEVICE)) - SetPageDirty(page); - page_cache_release(page); - } - } - } - if (dio->sig == crystalhd_dio_sg_mapped) - pci_unmap_sg(adp->pdev, dio->sg, dio->page_cnt, - dio->direction); - - crystalhd_free_dio(adp, dio); - - return BC_STS_SUCCESS; -} - -/** - * crystalhd_create_dio_pool - Allocate mem pool for DIO management. - * @adp: Adapter instance - * @max_pages: Max pages for size calculation. - * - * Return: - * system error. - * - * This routine creates a memory pool to hold dio context for - * for HW Direct IO operation. - */ -int crystalhd_create_dio_pool(struct crystalhd_adp *adp, uint32_t max_pages) -{ - uint32_t asz = 0, i = 0; - uint8_t *temp; - struct crystalhd_dio_req *dio; - - if (!adp || !max_pages) { - BCMLOG_ERR("Invalid Arg!!\n"); - return -EINVAL; - } - - /* Get dma memory for fill byte handling..*/ - adp->fill_byte_pool = pci_pool_create("crystalhd_fbyte", - adp->pdev, 8, 8, 0); - if (!adp->fill_byte_pool) { - BCMLOG_ERR("failed to create fill byte pool\n"); - return -ENOMEM; - } - - /* Get the max size from user based on 420/422 modes */ - asz = (sizeof(*dio->pages) * max_pages) + - (sizeof(*dio->sg) * max_pages) + sizeof(*dio); - - BCMLOG(BCMLOG_DBG, "Initializing Dio pool %d %d %x %p\n", - BC_LINK_SG_POOL_SZ, max_pages, asz, adp->fill_byte_pool); - - for (i = 0; i < BC_LINK_SG_POOL_SZ; i++) { - temp = kzalloc(asz, GFP_KERNEL); - if ((temp) == NULL) { - BCMLOG_ERR("Failed to alloc %d mem\n", asz); - return -ENOMEM; - } - - dio = (struct crystalhd_dio_req *)temp; - temp += sizeof(*dio); - dio->pages = (struct page **)temp; - temp += (sizeof(*dio->pages) * max_pages); - dio->sg = (struct scatterlist *)temp; - dio->max_pages = max_pages; - dio->fb_va = pci_pool_alloc(adp->fill_byte_pool, GFP_KERNEL, - &dio->fb_pa); - if (!dio->fb_va) { - BCMLOG_ERR("fill byte alloc failed.\n"); - return -ENOMEM; - } - - crystalhd_free_dio(adp, dio); - } - - return 0; -} - -/** - * crystalhd_destroy_dio_pool - Release DIO mem pool. - * @adp: Adapter instance - * - * Return: - * none. - * - * This routine releases dio memory pool during close. - */ -void crystalhd_destroy_dio_pool(struct crystalhd_adp *adp) -{ - struct crystalhd_dio_req *dio; - int count = 0; - - if (!adp) { - BCMLOG_ERR("Invalid Arg!!\n"); - return; - } - - do { - dio = crystalhd_alloc_dio(adp); - if (dio) { - if (dio->fb_va) - pci_pool_free(adp->fill_byte_pool, - dio->fb_va, dio->fb_pa); - count++; - kfree(dio); - } - } while (dio); - - if (adp->fill_byte_pool) { - pci_pool_destroy(adp->fill_byte_pool); - adp->fill_byte_pool = NULL; - } - - BCMLOG(BCMLOG_DBG, "Released dio pool %d\n", count); -} - -/** - * crystalhd_create_elem_pool - List element pool creation. - * @adp: Adapter instance - * @pool_size: Number of elements in the pool. - * - * Return: - * 0 - success, <0 error - * - * Create general purpose list element pool to hold pending, - * and active requests. - */ -int crystalhd_create_elem_pool(struct crystalhd_adp *adp, - uint32_t pool_size) -{ - uint32_t i; - struct crystalhd_elem *temp; - - if (!adp || !pool_size) - return -EINVAL; - - for (i = 0; i < pool_size; i++) { - temp = kzalloc(sizeof(*temp), GFP_KERNEL); - if (!temp) { - BCMLOG_ERR("kalloc failed\n"); - return -ENOMEM; - } - crystalhd_free_elem(adp, temp); - } - BCMLOG(BCMLOG_DBG, "allocated %d elem\n", pool_size); - return 0; -} - -/** - * crystalhd_delete_elem_pool - List element pool deletion. - * @adp: Adapter instance - * - * Return: - * none - * - * Delete general purpose list element pool. - */ -void crystalhd_delete_elem_pool(struct crystalhd_adp *adp) -{ - struct crystalhd_elem *temp; - int dbg_cnt = 0; - - if (!adp) - return; - - do { - temp = crystalhd_alloc_elem(adp); - if (temp) { - kfree(temp); - dbg_cnt++; - } - } while (temp); - - BCMLOG(BCMLOG_DBG, "released %d elem\n", dbg_cnt); -} - -/*================ Debug support routines.. ================================*/ -void crystalhd_show_buffer(uint32_t off, uint8_t *buff, uint32_t dwcount) -{ - uint32_t i, k = 1; - - for (i = 0; i < dwcount; i++) { - if (k == 1) - BCMLOG(BCMLOG_DATA, "0x%08X : ", off); - - BCMLOG(BCMLOG_DATA, " 0x%08X ", *((uint32_t *)buff)); - - buff += sizeof(uint32_t); - off += sizeof(uint32_t); - k++; - if ((i == dwcount - 1) || (k > 4)) { - BCMLOG(BCMLOG_DATA, "\n"); - k = 1; - } - } -} diff --git a/drivers/staging/crystalhd/crystalhd_misc.h b/drivers/staging/crystalhd/crystalhd_misc.h deleted file mode 100644 index 0f63827acfb4..000000000000 --- a/drivers/staging/crystalhd/crystalhd_misc.h +++ /dev/null @@ -1,232 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005-2009, Broadcom Corporation. - * - * Name: crystalhd_misc . h - * - * Description: - * BCM70012 Linux driver general purpose routines. - * Includes reg/mem read and write routines. - * - * HISTORY: - * - ********************************************************************** - * This file is part of the crystalhd device driver. - * - * This driver 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, version 2 of the License. - * - * This driver 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 driver. If not, see . - **********************************************************************/ - -#ifndef _CRYSTALHD_MISC_H_ -#define _CRYSTALHD_MISC_H_ - -#include "crystalhd.h" - -#include -#include -#include -#include -#include -#include -#include -#include "bc_dts_glob_lnx.h" - -/* Global log level variable defined in crystal_misc.c file */ -extern uint32_t g_linklog_level; - -/* Global element pool for all Queue management. - * TX: Active = BC_TX_LIST_CNT, Free = BC_TX_LIST_CNT. - * RX: Free = BC_RX_LIST_CNT, Active = 2 - * FW-CMD: 4 - */ -#define BC_LINK_ELEM_POOL_SZ ((BC_TX_LIST_CNT * 2) + BC_RX_LIST_CNT + 2 + 4) - -/* Driver's IODATA pool count */ -#define CHD_IODATA_POOL_SZ (BC_IOCTL_DATA_POOL_SIZE * BC_LINK_MAX_OPENS) - -/* 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 { - crystalhd_dio_inv = 0, - crystalhd_dio_locked, - crystalhd_dio_sg_mapped, -}; - -struct crystalhd_dio_user_info { - void *xfr_buff; - uint32_t xfr_len; - uint32_t uv_offset; - bool dir_tx; - - uint32_t uv_sg_ix; - uint32_t uv_sg_off; - int comp_sts; - int ev_sts; - uint32_t y_done_sz; - uint32_t uv_done_sz; - uint32_t comp_flags; - bool b422mode; -}; - -struct crystalhd_dio_req { - uint32_t sig; - uint32_t max_pages; - struct page **pages; - struct scatterlist *sg; - int sg_cnt; - int page_cnt; - int direction; - struct crystalhd_dio_user_info uinfo; - void *fb_va; - uint32_t fb_size; - dma_addr_t fb_pa; - struct crystalhd_dio_req *next; -}; - -#define BC_LINK_DIOQ_SIG (0x09223280) - -struct crystalhd_elem { - struct crystalhd_elem *flink; - struct crystalhd_elem *blink; - void *data; - uint32_t tag; -}; - -typedef void (*crystalhd_data_free_cb)(void *context, void *data); - -struct crystalhd_dioq { - uint32_t sig; - struct crystalhd_adp *adp; - 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; -}; - -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); -void bc_dec_reg_wr(struct crystalhd_adp *, uint32_t, uint32_t); - -/*========= Link (70012) register access routines.. =================*/ -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..=================*/ -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.================*/ -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 *); -void bc_kern_dma_free(struct crystalhd_adp *, uint32_t, - void *, dma_addr_t); -#define crystalhd_create_event(_ev) init_waitqueue_head(_ev) -#define crystalhd_set_event(_ev) wake_up_interruptible(_ev) -#define crystalhd_wait_on_event(ev, condition, timeout, ret, nosig) \ -do { \ - DECLARE_WAITQUEUE(entry, current); \ - unsigned long end = jiffies + ((timeout * HZ) / 1000); \ - ret = 0; \ - add_wait_queue(ev, &entry); \ - for (;;) { \ - __set_current_state(TASK_INTERRUPTIBLE); \ - if (condition) { \ - break; \ - } \ - if (time_after_eq(jiffies, end)) { \ - ret = -EBUSY; \ - break; \ - } \ - schedule_timeout((HZ / 100 > 1) ? HZ / 100 : 1); \ - if (!nosig && signal_pending(current)) { \ - ret = -EINTR; \ - break; \ - } \ - } \ - __set_current_state(TASK_RUNNING); \ - remove_wait_queue(ev, &entry); \ -} while (0) - -/*================ 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 enum BC_STATUS crystalhd_map_dio(struct crystalhd_adp *, void *, - uint32_t, uint32_t, bool, bool, struct crystalhd_dio_req**); - -extern enum BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *, - struct crystalhd_dio_req*); -#define crystalhd_get_sgle_paddr(_dio, _ix) (sg_dma_address(&_dio->sg[_ix])) -#define crystalhd_get_sgle_len(_dio, _ix) (sg_dma_len(&_dio->sg[_ix])) - -/*================ General Purpose Queues ==================*/ -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) - -extern int crystalhd_create_elem_pool(struct crystalhd_adp *, uint32_t); -extern void crystalhd_delete_elem_pool(struct crystalhd_adp *); - - -/*================ Debug routines/macros .. ================================*/ -extern void crystalhd_show_buffer(uint32_t off, uint8_t *buff, - uint32_t dwcount); - -enum _chd_log_levels { - BCMLOG_ERROR = 0x80000000, /* Don't disable this option */ - BCMLOG_DATA = 0x40000000, /* Data, enable by default */ - BCMLOG_SPINLOCK = 0x20000000, /* Special case for Spin locks*/ - - /* Following are allowed only in debug mode */ - BCMLOG_INFO = 0x00000001, /* Generic informational */ - BCMLOG_DBG = 0x00000002, /* First level Debug info */ - BCMLOG_SSTEP = 0x00000004, /* Stepping information */ -}; - - -#define BCMLOG(trace, fmt, args...) \ -do { \ - if (g_linklog_level & trace) \ - printk(fmt, ##args); \ -} while (0) - - -#define BCMLOG_ERR(fmt, args...) \ -do { \ - if (g_linklog_level & BCMLOG_ERROR) \ - pr_err("*ERR*:%s:%d: "fmt, \ - __FILE__, __LINE__, ##args); \ -} while (0) - -#endif -- cgit From 2a838c6484e13da6f1bfe093d7300d02daca80d1 Mon Sep 17 00:00:00 2001 From: Pramod Gurav Date: Fri, 20 Jun 2014 14:13:59 +0530 Subject: staging: alarm-dev: Set the license to GPL Adding "GPL" license to fix a warning while compiling as module. CC: Brian Swetland Signed-off-by: Pramod Gurav Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/alarm-dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/alarm-dev.c b/drivers/staging/android/alarm-dev.c index f200e8a84325..ff4b3e8758a7 100644 --- a/drivers/staging/android/alarm-dev.c +++ b/drivers/staging/android/alarm-dev.c @@ -443,4 +443,4 @@ static void __exit alarm_dev_exit(void) module_init(alarm_dev_init); module_exit(alarm_dev_exit); - +MODULE_LICENSE("GPL"); -- cgit From 55a4ea71ca4225f723cca1c44da569bd4de9d739 Mon Sep 17 00:00:00 2001 From: Evgeny Budilovsky Date: Fri, 20 Jun 2014 11:22:14 +0300 Subject: staging/cptm1217: fix checkpatch warnings about else clause Signed-off-by: Evgeny Budilovsky Signed-off-by: Greg Kroah-Hartman --- drivers/staging/cptm1217/clearpad_tm1217.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/cptm1217/clearpad_tm1217.c b/drivers/staging/cptm1217/clearpad_tm1217.c index ca4c2c67dd88..edf9ff2ea25b 100644 --- a/drivers/staging/cptm1217/clearpad_tm1217.c +++ b/drivers/staging/cptm1217/clearpad_tm1217.c @@ -147,12 +147,11 @@ static int cp_tm1217_read(struct cp_tm1217_device *ts, msleep(WAIT_FOR_RESPONSE); for (i = 0; i < MAX_RETRIES; i++) { retval = i2c_master_recv(ts->client, &req[1], size); - if (retval == size) { + if (retval == size) break; - } else { - msleep(INCREMENTAL_DELAY); - dev_dbg(ts->dev, "cp_tm1217: Retry count is %d\n", i); - } + + msleep(INCREMENTAL_DELAY); + dev_dbg(ts->dev, "cp_tm1217: Retry count is %d\n", i); } if (retval != size) dev_err(ts->dev, "cp_tm1217: Read from device failed\n"); @@ -288,11 +287,11 @@ static irqreturn_t cp_tm1217_sample_thread(int irq, void *handle) if (ts->thread_running == 1) { mutex_unlock(&ts->thread_mutex); return IRQ_HANDLED; - } else { - ts->thread_running = 1; - mutex_unlock(&ts->thread_mutex); } + ts->thread_running = 1; + mutex_unlock(&ts->thread_mutex); + /* Mask the interrupts */ retval = cp_tm1217_mask_interrupt(ts); -- cgit From 7bc26a68ed6f7c5949526ab884439b86a6b28350 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 20 Jun 2014 18:21:50 +0900 Subject: staging: dgap: make dgap_found_board() return a brd pointer Make dgap_found_board() return a brd pointer and that brd pointer assign to dgap_board[] in the end of the dgap_init_one(). Signed-off-by: Daeseok Youn Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 5c8e62201c8d..d4f80afe947d 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -70,7 +70,8 @@ MODULE_SUPPORTED_DEVICE("dgap"); static int dgap_start(void); static void dgap_init_globals(void); -static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum); +static struct board_t *dgap_found_board(struct pci_dev *pdev, int id, + int boardnum); static void dgap_cleanup_board(struct board_t *brd); static void dgap_poll_handler(ulong dummy); static int dgap_init_pci(void); @@ -582,11 +583,10 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return -EIO; - rc = dgap_found_board(pdev, ent->driver_data, dgap_numboards); - if (rc) - return rc; + brd = dgap_found_board(pdev, ent->driver_data, dgap_numboards); + if (IS_ERR(brd)) + return PTR_ERR(brd); - brd = dgap_board[dgap_numboards++]; rc = dgap_firmware_load(pdev, ent->driver_data, brd); if (rc) goto cleanup_brd; @@ -617,6 +617,8 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) brd->state = BOARD_READY; brd->dpastatus = BD_RUNNING; + dgap_board[dgap_numboards++] = brd; + return 0; tty_free: @@ -630,7 +632,7 @@ free_flipbuf: cleanup_brd: dgap_release_remap(brd); kfree(brd); - dgap_board[--dgap_numboards] = NULL; + return rc; } @@ -717,7 +719,8 @@ static void dgap_cleanup_board(struct board_t *brd) * * A board has been found, init it. */ -static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum) +static struct board_t *dgap_found_board(struct pci_dev *pdev, int id, + int boardnum) { struct board_t *brd; unsigned int pci_irq; @@ -727,9 +730,7 @@ static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum) /* get the board structure and prep it */ brd = kzalloc(sizeof(struct board_t), GFP_KERNEL); if (!brd) - return -ENOMEM; - - dgap_board[boardnum] = brd; + return ERR_PTR(-ENOMEM); /* store the info for the board we've found */ brd->magic = DGAP_BOARD_MAGIC; @@ -828,13 +829,12 @@ static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum) pr_info("dgap: board %d: %s (rev %d), irq %ld\n", boardnum, brd->name, brd->rev, brd->irq); - return 0; + return brd; free_brd: kfree(brd); - dgap_board[boardnum] = NULL; - return ret; + return ERR_PTR(ret); } -- cgit From cf695df834efc718b2ed17e9c83e127fd63c9033 Mon Sep 17 00:00:00 2001 From: Fred Brooks Date: Fri, 20 Jun 2014 12:53:15 +0100 Subject: staging: comedi: ni_daq_700: add AI range and input mode switching Add support for switching the input range and the single-ended/ differential input mode for the AI subdevice. We needed to clear the FIFO of data before the conversion to handle card mode switching glitches. [ Minor whitespace fixes and driver comment reformatting. - Ian ] Signed-off-by: Fred Brooks Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_daq_700.c | 51 ++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index 4eedefdff688..3d841d4eb552 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -24,21 +24,30 @@ * based on ni_daq_dio24 by Daniel Vecino Castel * Devices: [National Instruments] PCMCIA DAQ-Card-700 (ni_daq_700) * Status: works - * Updated: Wed, 19 Sep 2012 12:07:20 +0000 + * Updated: Wed, 21 May 2014 12:07:20 +0000 * * The daqcard-700 appears in Comedi as a digital I/O subdevice (0) with - * 16 channels and a analog input subdevice (1) with 16 single-ended channels. + * 16 channels and a analog input subdevice (1) with 16 single-ended channels + * or 8 differential channels, and three input ranges. * * Digital: The channel 0 corresponds to the daqcard-700's output * port, bit 0; channel 8 corresponds to the input port, bit 0. * * Digital direction configuration: channels 0-7 output, 8-15 input. * - * Analog: The input range is 0 to 4095 for -10 to +10 volts + * Analog: The input range is 0 to 4095 with a default of -10 to +10 volts. + * Valid ranges: + * 0 for -10 to 10V bipolar + * 1 for -5 to 5V bipolar + * 2 for -2.5 to 2.5V bipolar + * * IRQ is assigned but not used. * * Version 0.1 Original DIO only driver * Version 0.2 DIO and basic AI analog input support on 16 se channels + * Version 0.3 Add SE or DIFF mode and range switching +-10,+-5,+-2.5 + * Clear the FIFO of data before the conversion to handle card + * mode switching glitches. * * Manuals: Register level: http://www.ni.com/pdf/manuals/340698.pdf * User Manual: http://www.ni.com/pdf/manuals/320676d.pdf @@ -68,6 +77,17 @@ #define CDA_R2 0x0A /* RW 8bit */ #define CMO_R 0x0B /* RO 8bit */ #define TIC_R 0x06 /* WO 8bit */ +/* daqcard700 modes */ +#define CMD_R3_DIFF 0x04 /* diff mode */ + +static const struct comedi_lrange range_daq700_ai = { + 3, + { + BIP_RANGE(10), + BIP_RANGE(5), + BIP_RANGE(2.5) + } +}; static int daq700_dio_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, @@ -130,11 +150,22 @@ static int daq700_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - int n, chan; + int n; int d; int ret; + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int aref = CR_AREF(insn->chanspec); + unsigned int range = CR_RANGE(insn->chanspec); + unsigned int r3_bits = 0; + + /* set channel input modes */ + if (aref == AREF_DIFF) + r3_bits |= CMD_R3_DIFF; + /* write channel mode/range */ + if (range >= 1) + range++; /* convert range to hardware value */ + outb(r3_bits | (range & 0x03), dev->iobase + CMD_R3); - chan = CR_CHAN(insn->chanspec); /* write channel to multiplexer */ /* set mask scan bit high to disable scanning */ outb(chan | 0x80, dev->iobase + CMD_R1); @@ -146,6 +177,9 @@ static int daq700_ai_rinsn(struct comedi_device *dev, /* trigger conversion with out0 L to H */ outb(0x00, dev->iobase + CMD_R2); /* enable ADC conversions */ outb(0x30, dev->iobase + CMO_R); /* mode 0 out0 L, from H */ + outb(0x00, dev->iobase + ADCLEAR_R); /* clear the ADC FIFO */ + /* read 16bit junk from FIFO to clear */ + inw(dev->iobase + ADFIFO_R); /* mode 1 out0 H, L to H, start conversion */ outb(0x32, dev->iobase + CMO_R); @@ -221,11 +255,10 @@ static int daq700_auto_attach(struct comedi_device *dev, /* DAQCard-700 ai */ s = &dev->subdevices[1]; s->type = COMEDI_SUBD_AI; - /* we support single-ended (ground) */ - s->subdev_flags = SDF_READABLE | SDF_GROUND; + s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF; s->n_chan = 16; s->maxdata = (1 << 12) - 1; - s->range_table = &range_bipolar10; + s->range_table = &range_daq700_ai; s->insn_read = daq700_ai_rinsn; daq700_ai_config(dev, s); @@ -262,5 +295,5 @@ module_comedi_pcmcia_driver(daq700_driver, daq700_cs_driver); MODULE_AUTHOR("Fred Brooks "); MODULE_DESCRIPTION( "Comedi driver for National Instruments PCMCIA DAQCard-700 DIO/AI"); -MODULE_VERSION("0.2.00"); +MODULE_VERSION("0.3.00"); MODULE_LICENSE("GPL"); -- cgit From aea36590b3f221136b85ba52fe5fcf690eaa042b Mon Sep 17 00:00:00 2001 From: Toralf Förster Date: Fri, 20 Jun 2014 16:14:37 +0200 Subject: v2 staging: translates 3 comments into english in HalBtc8812a1Ant.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Toralf Förster Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/btcoexist/HalBtc8812a1Ant.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/btcoexist/HalBtc8812a1Ant.c b/drivers/staging/rtl8821ae/btcoexist/HalBtc8812a1Ant.c index 5a54bb10698c..cf8c38292cd8 100644 --- a/drivers/staging/rtl8821ae/btcoexist/HalBtc8812a1Ant.c +++ b/drivers/staging/rtl8821ae/btcoexist/HalBtc8812a1Ant.c @@ -1670,7 +1670,7 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl( if (dn <= 0) dn = 0; - if(up >= n) // if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration + if(up >= n) // Google translated: if consecutive n-2 seconds retry count is 0, width-modulated WiFi duration { wait_count = 0; n = 3; @@ -1688,14 +1688,14 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl( if (up <= 0) up = 0; - if (dn == 2) // if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration + if (dn == 2) // Google translated: if 2 consecutive two seconds retry count <3, then tune narrow WiFi duration { if (wait_count <= 2) - m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^ + m++; // Google translated: Avoid been back and forth in the two level else m = 1; - if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration. + if ( m >= 20) // Google translated: m max = 20 'Max 120 seconds recheck whether to adjust WiFi duration. m = 20; n = 3*m; @@ -1706,14 +1706,14 @@ halbtc8812a1ant_TdmaDurationAdjustForAcl( BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n")); } } - else //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration + else // Google translated: retry count> 3, as long as a second retry count> 3, then tune narrow WiFi duration { if (wait_count == 1) - m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^ + m++; // Google translated: Avoid been back and forth in the two level else m = 1; - if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration. + if ( m >= 20) // Google translated: m max = 20 'Max 120 seconds recheck whether to adjust WiFi duration. m = 20; n = 3*m; -- cgit From 0bf22be0da8ea74bc7ccc5b07d7855830be16eca Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Fri, 20 Jun 2014 14:23:28 +0200 Subject: staging/lustre: disable virtual block device for 64K pages The lustre virtual block device cannot handle 64K pages and fails at compile time. To avoid running into this error, let's disable the Kconfig option for this driver in cases it doesn't support. Reported-by: Dann Frazier Signed-off-by: Arnd Bergmann Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/Kconfig | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/Kconfig b/drivers/staging/lustre/lustre/Kconfig index 209e4c7e6f8a..4f65ba1158bf 100644 --- a/drivers/staging/lustre/lustre/Kconfig +++ b/drivers/staging/lustre/lustre/Kconfig @@ -57,4 +57,5 @@ config LUSTRE_TRANSLATE_ERRNOS config LUSTRE_LLITE_LLOOP tristate "Lustre virtual block device" depends on LUSTRE_FS && BLOCK + depends on !PPC_64K_PAGES && !ARM64_64K_PAGES default m -- cgit From 684ff4f987a22b551c2b1f27a367a9ee4d79b653 Mon Sep 17 00:00:00 2001 From: Vincent Heuken Date: Fri, 20 Jun 2014 06:08:07 -0700 Subject: Staging: serqt_usb2: fixed blank line style warning in serqt_usb2.c This is a patch to the serqt_usb2.c file that fixes the following warning: WARNING: Missing a blank line after declarations Signed-off-by: Vincent Heuken Signed-off-by: Greg Kroah-Hartman --- drivers/staging/serqt_usb2/serqt_usb2.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c index 998c3845421d..5e97726d4d66 100644 --- a/drivers/staging/serqt_usb2/serqt_usb2.c +++ b/drivers/staging/serqt_usb2/serqt_usb2.c @@ -257,6 +257,7 @@ static void process_modem_status(struct quatech_port *qt_port, static void process_rx_char(struct usb_serial_port *port, unsigned char data) { struct urb *urb = port->read_urb; + if (urb->actual_length) tty_insert_flip_char(&port->port, data, TTY_NORMAL); } -- cgit From 55d128bf999e355098630836c1add6119b9f2522 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 20 Jun 2014 14:15:04 +0100 Subject: staging: comedi: describe struct comedi_async Describe `struct comedi_async` in kerneldoc format. Expand on the members involved in reading/writing the buffer. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedidev.h | 117 +++++++++++++++++++++++++++++-------- 1 file changed, 92 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 8f4e44bfbe00..71851bdd4273 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -107,43 +107,110 @@ struct comedi_buf_map { struct kref refcount; }; +/** + * struct comedi_async - control data for asynchronous comedi commands + * @prealloc_buf: preallocated buffer + * @prealloc_bufsz: buffer size (in bytes) + * @buf_map: map of buffer pages + * @max_bufsize: maximum buffer size (in bytes) + * @buf_write_count: "write completed" count (in bytes, modulo 2**32) + * @buf_write_alloc_count: "allocated for writing" count (in bytes, + * modulo 2**32) + * @buf_read_count: "read completed" count (in bytes, modulo 2**32) + * @buf_read_alloc_count: "allocated for reading" count (in bytes, + * modulo 2**32) + * @buf_write_ptr: buffer position for writer + * @buf_read_ptr: buffer position for reader + * @cur_chan: current position in chanlist for scan (for those + * drivers that use it) + * @scan_progress: amount received or sent for current scan (in bytes) + * @munge_chan: current position in chanlist for "munging" + * @munge_count: "munge" count (in bytes, modulo 2**32) + * @munge_ptr: buffer position for "munging" + * @events: bit-vector of events that have occurred + * @cmd: details of comedi command in progress + * @wait_head: task wait queue for file reader or writer + * @cb_mask: bit-vector of events that should wake waiting tasks + * @inttrig: software trigger function for command, or NULL + * + * Note about the ..._count and ..._ptr members: + * + * Think of the _Count values being integers of unlimited size, indexing + * into a buffer of infinite length (though only an advancing portion + * of the buffer of fixed length prealloc_bufsz is accessible at any time). + * Then: + * + * Buf_Read_Count <= Buf_Read_Alloc_Count <= Munge_Count <= + * Buf_Write_Count <= Buf_Write_Alloc_Count <= + * (Buf_Read_Count + prealloc_bufsz) + * + * (Those aren't the actual members, apart from prealloc_bufsz.) When + * the buffer is reset, those _Count values start at 0 and only increase + * in value, maintaining the above inequalities until the next time the + * buffer is reset. The buffer is divided into the following regions by + * the inequalities: + * + * [0, Buf_Read_Count): + * old region no longer accessible + * [Buf_Read_Count, Buf_Read_Alloc_Count): + * filled and munged region allocated for reading but not yet read + * [Buf_Read_Alloc_Count, Munge_Count): + * filled and munged region not yet allocated for reading + * [Munge_Count, Buf_Write_Count): + * filled region not yet munged + * [Buf_Write_Count, Buf_Write_Alloc_Count): + * unfilled region allocated for writing but not yet written + * [Buf_Write_Alloc_Count, Buf_Read_Count + prealloc_bufsz): + * unfilled region not yet allocated for writing + * [Buf_Read_Count + prealloc_bufsz, infinity): + * unfilled region not yet accessible + * + * Data needs to be written into the buffer before it can be read out, + * and may need to be converted (or "munged") between the two + * operations. Extra unfilled buffer space may need to allocated for + * writing (advancing Buf_Write_Alloc_Count) before new data is written. + * After writing new data, the newly filled space needs to be released + * (advancing Buf_Write_Count). This also results in the new data being + * "munged" (advancing Munge_Count). Before data is read out of the + * buffer, extra space may need to be allocated for reading (advancing + * Buf_Read_Alloc_Count). After the data has been read out, the space + * needs to be released (advancing Buf_Read_Count). + * + * The actual members, buf_read_count, buf_read_alloc_count, + * munge_count, buf_write_count, and buf_write_alloc_count take the + * value of the corresponding capitalized _Count values modulo 2^32 + * (UINT_MAX+1). Subtracting a "higher" _count value from a "lower" + * _count value gives the same answer as subtracting a "higher" _Count + * value from a lower _Count value because prealloc_bufsz < UINT_MAX+1. + * The modulo operation is done implicitly. + * + * The buf_read_ptr, munge_ptr, and buf_write_ptr members take the value + * of the corresponding capitalized _Count values modulo prealloc_bufsz. + * These correspond to byte indices in the physical buffer. The modulo + * operation is done by subtracting prealloc_bufsz when the value + * exceeds prealloc_bufsz (assuming prealloc_bufsz plus the increment is + * less than or equal to UINT_MAX). + */ struct comedi_async { - void *prealloc_buf; /* pre-allocated buffer */ - unsigned int prealloc_bufsz; /* buffer size, in bytes */ - struct comedi_buf_map *buf_map; /* map of buffer pages */ - - unsigned int max_bufsize; /* maximum buffer size, bytes */ - - /* byte count for writer (write completed) */ + void *prealloc_buf; + unsigned int prealloc_bufsz; + struct comedi_buf_map *buf_map; + unsigned int max_bufsize; unsigned int buf_write_count; - /* byte count for writer (allocated for writing) */ unsigned int buf_write_alloc_count; - /* byte count for reader (read completed) */ unsigned int buf_read_count; - /* byte count for reader (allocated for reading) */ unsigned int buf_read_alloc_count; - - unsigned int buf_write_ptr; /* buffer marker for writer */ - unsigned int buf_read_ptr; /* buffer marker for reader */ - - unsigned int cur_chan; /* useless channel marker for interrupt */ - /* number of bytes that have been received for current scan */ + unsigned int buf_write_ptr; + unsigned int buf_read_ptr; + unsigned int cur_chan; unsigned int scan_progress; - /* keeps track of where we are in chanlist as for munging */ unsigned int munge_chan; - /* number of bytes that have been munged */ unsigned int munge_count; - /* buffer marker for munging */ unsigned int munge_ptr; - - unsigned int events; /* events that have occurred */ - + unsigned int events; struct comedi_cmd cmd; - wait_queue_head_t wait_head; - unsigned int cb_mask; - int (*inttrig)(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int x); }; -- cgit From ffc7c9f45029f4eacd5530ac3ccdc08c93c61704 Mon Sep 17 00:00:00 2001 From: Martin Gumbrecht Date: Fri, 20 Jun 2014 17:37:58 +0200 Subject: Staging: bcm: Prototypes.h: fix checkpatch errors: blank lines This patch improves coding style in Prototypes.h: Exactly one blank line after each declaration Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Prototypes.h | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Prototypes.h b/drivers/staging/bcm/Prototypes.h index fb53a00591eb..a8ddc6a389ed 100644 --- a/drivers/staging/bcm/Prototypes.h +++ b/drivers/staging/bcm/Prototypes.h @@ -34,9 +34,10 @@ INT SearchSfid(struct bcm_mini_adapter *Adapter,UINT uiSfid); USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter,struct sk_buff* skb); bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule,USHORT ushSrcPort); + bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule,USHORT ushSrcPort); -bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule,UCHAR ucProtocol); +bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule,UCHAR ucProtocol); INT SetupNextSend(struct bcm_mini_adapter *Adapter, /** Date: Fri, 20 Jun 2014 17:37:59 +0200 Subject: Staging: bcm: Prototypes.h: fix checkpatch errors: whitespaces This patch improves coding style in Prototypes.h: Whitespaces according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Prototypes.h | 58 ++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Prototypes.h b/drivers/staging/bcm/Prototypes.h index a8ddc6a389ed..1ddc8b2539f6 100644 --- a/drivers/staging/bcm/Prototypes.h +++ b/drivers/staging/bcm/Prototypes.h @@ -3,13 +3,13 @@ VOID LinkControlResponseMessage(struct bcm_mini_adapter *Adapter, PUCHAR pucBuffer); -VOID StatisticsResponse(struct bcm_mini_adapter *Adapter,PVOID pvBuffer); +VOID StatisticsResponse(struct bcm_mini_adapter *Adapter, PVOID pvBuffer); -VOID IdleModeResponse(struct bcm_mini_adapter *Adapter,PUINT puiBuffer); +VOID IdleModeResponse(struct bcm_mini_adapter *Adapter, PUINT puiBuffer); -int control_packet_handler (struct bcm_mini_adapter *Adapter); +int control_packet_handler(struct bcm_mini_adapter *Adapter); -VOID DeleteAllClassifiersForSF(struct bcm_mini_adapter *Adapter,UINT uiSearchRuleIndex); +VOID DeleteAllClassifiersForSF(struct bcm_mini_adapter *Adapter, UINT uiSearchRuleIndex); VOID flush_all_queues(struct bcm_mini_adapter *Adapter); @@ -29,19 +29,19 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter); VOID PruneQueueAllSF(struct bcm_mini_adapter *Adapter); -INT SearchSfid(struct bcm_mini_adapter *Adapter,UINT uiSfid); +INT SearchSfid(struct bcm_mini_adapter *Adapter, UINT uiSfid); -USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter,struct sk_buff* skb); +USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb); -bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule,USHORT ushSrcPort); +bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushSrcPort); -bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule,USHORT ushSrcPort); +bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushSrcPort); -bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule,UCHAR ucProtocol); +bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, UCHAR ucProtocol); INT SetupNextSend(struct bcm_mini_adapter *Adapter, /** Date: Fri, 20 Jun 2014 17:38:00 +0200 Subject: Staging: bcm: Queue.h: fix checkpatch errors: comments This patch improves coding style in Queue.h Comments according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Queue.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Queue.h b/drivers/staging/bcm/Queue.h index e1f1da2bb6d4..ebc7222932f1 100644 --- a/drivers/staging/bcm/Queue.h +++ b/drivers/staging/bcm/Queue.h @@ -1,5 +1,5 @@ /************************************* -* Queue.h +* Queue.h **************************************/ #ifndef __QUEUE_H__ #define __QUEUE_H__ @@ -28,4 +28,4 @@ do \ Head = Head->next; \ } \ }while(0) -#endif //__QUEUE_H__ +#endif /* __QUEUE_H__ */ -- cgit From 585f8b2cc03aa3789375596107e30b64fa035702 Mon Sep 17 00:00:00 2001 From: Martin Gumbrecht Date: Fri, 20 Jun 2014 17:38:01 +0200 Subject: Staging: bcm: Queue.h: fix checkpatch errors: brackets This patch improves coding style in Queue.h: Brackets according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Queue.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Queue.h b/drivers/staging/bcm/Queue.h index ebc7222932f1..b6f8468e9d52 100644 --- a/drivers/staging/bcm/Queue.h +++ b/drivers/staging/bcm/Queue.h @@ -7,11 +7,10 @@ #define ENQUEUEPACKET(_Head, _Tail,_Packet) \ -do \ -{ \ +do { \ if (!_Head) { \ _Head = _Packet; \ - } \ + } \ else { \ (_Tail)->next = _Packet; \ } \ @@ -19,13 +18,12 @@ do \ _Tail = _Packet; \ }while(0) #define DEQUEUEPACKET(Head, Tail ) \ -do \ -{ if(Head) \ - { \ +do { \ + if (Head) { \ if (!Head->next) { \ Tail = NULL; \ } \ Head = Head->next; \ - } \ -}while(0) + } \ +} while (0) #endif /* __QUEUE_H__ */ -- cgit From dc87a84e316b486d7a24f744b79459c2fab6dc95 Mon Sep 17 00:00:00 2001 From: Martin Gumbrecht Date: Fri, 20 Jun 2014 17:38:02 +0200 Subject: Staging: bcm: Queue.h: fix checkpatch errors: whitespaces This patch improves coding style in Queue.h Whitespaces according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Queue.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Queue.h b/drivers/staging/bcm/Queue.h index b6f8468e9d52..460c0aee67f6 100644 --- a/drivers/staging/bcm/Queue.h +++ b/drivers/staging/bcm/Queue.h @@ -6,24 +6,24 @@ -#define ENQUEUEPACKET(_Head, _Tail,_Packet) \ +#define ENQUEUEPACKET(_Head, _Tail, _Packet) \ do { \ - if (!_Head) { \ - _Head = _Packet; \ - } \ - else { \ - (_Tail)->next = _Packet; \ - } \ - (_Packet)->next = NULL; \ - _Tail = _Packet; \ -}while(0) -#define DEQUEUEPACKET(Head, Tail ) \ + if (!_Head) { \ + _Head = _Packet; \ + } \ + else { \ + (_Tail)->next = _Packet; \ + } \ + (_Packet)->next = NULL; \ + _Tail = _Packet; \ +} while (0) +#define DEQUEUEPACKET(Head, Tail) \ do { \ if (Head) { \ - if (!Head->next) { \ - Tail = NULL; \ - } \ - Head = Head->next; \ - } \ + if (!Head->next) { \ + Tail = NULL; \ + } \ + Head = Head->next; \ + } \ } while (0) #endif /* __QUEUE_H__ */ -- cgit From 7e4a90003056b01c13e4de013ef17af1e920751c Mon Sep 17 00:00:00 2001 From: Martin Gumbrecht Date: Fri, 20 Jun 2014 17:38:03 +0200 Subject: Staging: bcm: Qos.c: fix checkpatch errors: comments This patch improves coding style in Qos.c Comments according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 88 +++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 0c742da8c6b5..f9c57ee748a1 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -1,6 +1,6 @@ /** -@file Qos.C -This file contains the routines related to Quality of Service. + * @file Qos.C + * This file contains the routines related to Quality of Service. */ #include "headers.h" @@ -191,9 +191,9 @@ bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushDest return false; } /** -@ingroup tx_functions -Compares IPV4 Ip address and port number -@return Queue Index. + * @ingroup tx_functions + * Compares IPV4 Ip address and port number + * @return Queue Index. */ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, struct iphdr *iphd, @@ -211,7 +211,7 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, pstClassifierRule->ucDirection, pstClassifierRule->usVCID_Value); - //Checking classifier validity + /* Checking classifier validity */ if (!pstClassifierRule->bUsed || pstClassifierRule->ucDirection == DOWNLINK_DIR) break; @@ -219,7 +219,7 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, if (pstClassifierRule->bIpv6Protocol) break; - //**************Checking IP header parameter**************************// + /* Checking IP header parameter */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to match Source IP Address"); if (!MatchSrcIpAddress(pstClassifierRule, iphd->saddr)) break; @@ -239,12 +239,15 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, break; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol Matched"); - //if protocol is not TCP or UDP then no need of comparing source port and destination port + /* + * if protocol is not TCP or UDP then no + * need of comparing source port and destination port + */ if (iphd->protocol != TCP && iphd->protocol != UDP) { bClassificationSucceed = TRUE; break; } - //******************Checking Transport Layer Header field if present *****************// + /* Checking Transport Layer Header field if present */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source Port %04x", (iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source); @@ -292,12 +295,12 @@ VOID PruneQueueAllSF(struct bcm_mini_adapter *Adapter) /** -@ingroup tx_functions -This function checks if the max queue size for a queue -is less than number of bytes in the queue. If so - -drops packets from the Head till the number of bytes is -less than or equal to max queue size for the queue. -*/ + * @ingroup tx_functions + * This function checks if the max queue size for a queue + * is less than number of bytes in the queue. If so - + * drops packets from the Head till the number of bytes is + * less than or equal to max queue size for the queue. + */ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) { struct sk_buff* PacketToDrop = NULL; @@ -341,11 +344,11 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) DEQUEUEPACKET(Adapter->PackInfo[iIndex].FirstTxQueue, Adapter->PackInfo[iIndex].LastTxQueue); - /// update current bytes and packets count + /* update current bytes and packets count */ Adapter->PackInfo[iIndex].uiCurrentBytesOnHost -= PacketToDrop->len; Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost--; - /// update dropped bytes and packets counts + /* update dropped bytes and packets counts */ Adapter->PackInfo[iIndex].uiDroppedCountBytes += PacketToDrop->len; Adapter->PackInfo[iIndex].uiDroppedCountPackets++; dev_kfree_skb(PacketToDrop); @@ -393,11 +396,11 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) /* Free the skb */ dev_kfree_skb(PacketToDrop); - /// update current bytes and packets count + /* update current bytes and packets count */ Adapter->PackInfo[iQIndex].uiCurrentBytesOnHost -= uiTotalPacketLength; Adapter->PackInfo[iQIndex].uiCurrentPacketsOnHost--; - /// update dropped bytes and packets counts + /* update dropped bytes and packets counts */ Adapter->PackInfo[iQIndex].uiDroppedCountBytes += uiTotalPacketLength; Adapter->PackInfo[iQIndex].uiDroppedCountPackets++; @@ -461,14 +464,14 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) bFragmentedPkt = TRUE; if (bFragmentedPkt) { - //Fragmented Packet. Get Frag Classifier Entry. + /* Fragmented Packet. Get Frag Classifier Entry. */ pstClassifierRule = GetFragIPClsEntry(Adapter, pIpHeader->id, pIpHeader->saddr); if (pstClassifierRule) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "It is next Fragmented pkt"); bClassificationSucceed = TRUE; } if (!(ntohs(pIpHeader->frag_off) & IP_MF)) { - //Fragmented Last packet . Remove Frag Classifier Entry + /* Fragmented Last packet . Remove Frag Classifier Entry */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "This is the last fragmented Pkt"); DelFragIPClsEntry(Adapter, pIpHeader->id, pIpHeader->saddr); } @@ -478,8 +481,10 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) for (uiLoopIndex = MAX_CLASSIFIERS - 1; uiLoopIndex >= 0; uiLoopIndex--) { if (bClassificationSucceed) break; - //Iterate through all classifiers which are already in order of priority - //to classify the packet until match found + /* + * Iterate through all classifiers which are already in order of priority + * to classify the packet until match found + */ do { if (false == Adapter->astClassifierTable[uiLoopIndex].bUsed) { bClassificationSucceed = false; @@ -488,8 +493,8 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Adapter->PackInfo[%d].bvalid=True\n", uiLoopIndex); if (0 == Adapter->astClassifierTable[uiLoopIndex].ucDirection) { - bClassificationSucceed = false;//cannot be processed for classification. - break; // it is a down link connection + bClassificationSucceed = false; /* cannot be processed for classification. */ + break; /* it is a down link connection */ } pstClassifierRule = &Adapter->astClassifierTable[uiLoopIndex]; @@ -517,7 +522,7 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Ethernet CS Classification Failed\n"); break; } - } else { // No ETH Supported on this SF + } else { /* No ETH Supported on this SF */ if (eEthOtherFrame != stEthCsPktInfo.eNwpktEthFrameType) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a 802.3 Ethernet Frame... hence not allowed over non-ETH CS SF\n"); bClassificationSucceed = false; @@ -549,7 +554,7 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) if (bClassificationSucceed == TRUE) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "CF id : %d, SF ID is =%lu", pstClassifierRule->uiClassifierRuleIndex, pstClassifierRule->ulSFID); - //Store The matched Classifier in SKB + /* Store The matched Classifier in SKB */ *((UINT32*)(skb->cb)+SKB_CB_CLASSIFICATION_OFFSET) = pstClassifierRule->uiClassifierRuleIndex; if ((TCP == pIpHeader->protocol) && !bFragmentedPkt && (ETH_AND_IP_HEADER_LEN + TCP_HEADER_LEN <= skb->len)) { IpHeaderLength = pIpHeader->ihl; @@ -564,9 +569,16 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) usIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "index is =%d", usIndex); - //If this is the first fragment of a Fragmented pkt, add this CF. Only This CF should be used for all other fragment of this Pkt. + /* + * If this is the first fragment of a Fragmented pkt, + * add this CF. Only This CF should be used for all other + * fragment of this Pkt. + */ if (bFragmentedPkt && (usCurrFragment == 0)) { - //First Fragment of Fragmented Packet. Create Frag CLS Entry + /* + * First Fragment of Fragmented Packet. + * Create Frag CLS Entry + */ struct bcm_fragmented_packet_info stFragPktInfo; stFragPktInfo.bUsed = TRUE; stFragPktInfo.ulSrcIpAddress = pIpHeader->saddr; @@ -659,7 +671,10 @@ static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, s BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s CLS UserPrio:%x CLS VLANID:%x\n", __func__, ntohs(*((USHORT *)pstClassifierRule->usUserPriority)), pstClassifierRule->usVLANID); - /* In case FW didn't receive the TLV, the priority field should be ignored */ + /* + * In case FW didn't receive the TLV, + * the priority field should be ignored + */ if (pstClassifierRule->usValidityBitMap & (1<eNwpktEthFrameType != eEth802QVLANFrame) return false; @@ -714,15 +729,14 @@ static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, struct sk_buff* s return false; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS DestMAC Matched\n"); - //classify on ETHType/802.2SAP TLV + /* classify on ETHType/802.2SAP TLV */ bClassificationSucceed = EthCSMatchEThTypeSAP(pstClassifierRule, skb, pstEthCsPktInfo); if (!bClassificationSucceed) return false; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS EthType/802.2SAP Matched\n"); - //classify on 802.1VLAN Header Parameters - + /* classify on 802.1VLAN Header Parameters */ bClassificationSucceed = EthCSMatchVLANRules(pstClassifierRule, skb, pstEthCsPktInfo); if (!bClassificationSucceed) return false; @@ -739,9 +753,9 @@ static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCSGetPktInfo : Eth Hdr Type : %X\n", u16Etype); if (u16Etype > 0x5dc) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCSGetPktInfo : ETH2 Frame\n"); - //ETH2 Frame + /* ETH2 Frame */ if (u16Etype == ETHERNET_FRAMETYPE_802QVLAN) { - //802.1Q VLAN Header + /* 802.1Q VLAN Header */ pstEthCsPktInfo->eNwpktEthFrameType = eEth802QVLANFrame; u16Etype = ((struct bcm_eth_q_frame *)pvEthPayload)->EthType; //((ETH_CS_802_Q_FRAME*)pvEthPayload)->UserPriority @@ -750,12 +764,12 @@ static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload u16Etype = ntohs(u16Etype); } } else { - //802.2 LLC + /* 802.2 LLC */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "802.2 LLC Frame\n"); pstEthCsPktInfo->eNwpktEthFrameType = eEth802LLCFrame; pstEthCsPktInfo->ucDSAP = ((struct bcm_eth_llc_frame *)pvEthPayload)->DSAP; if (pstEthCsPktInfo->ucDSAP == 0xAA && ((struct bcm_eth_llc_frame *)pvEthPayload)->SSAP == 0xAA) { - //SNAP Frame + /* SNAP Frame */ pstEthCsPktInfo->eNwpktEthFrameType = eEth802LLCSNAPFrame; u16Etype = ((struct bcm_eth_llc_snap_frame *)pvEthPayload)->usEtherType; } -- cgit From f6e1206b35535419bf185ed7b4f933a7efefaec1 Mon Sep 17 00:00:00 2001 From: Martin Gumbrecht Date: Fri, 20 Jun 2014 17:38:04 +0200 Subject: Staging: bcm: Qos.c: fix checkpatch errors: whitespaces This patch improves coding style in Qos.c Whitespaces according to the coding guideline Signed-off-by: Martin Gumbrecht Signed-off-by: Christian Bay Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index f9c57ee748a1..42c135144e1d 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -303,7 +303,7 @@ VOID PruneQueueAllSF(struct bcm_mini_adapter *Adapter) */ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) { - struct sk_buff* PacketToDrop = NULL; + struct sk_buff *PacketToDrop = NULL; struct net_device_stats *netstats; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "=====> Index %d", iIndex); @@ -371,9 +371,9 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) VOID flush_all_queues(struct bcm_mini_adapter *Adapter) { - INT iQIndex; - UINT uiTotalPacketLength; - struct sk_buff* PacketToDrop = NULL; + INT iQIndex; + UINT uiTotalPacketLength; + struct sk_buff *PacketToDrop = NULL; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "=====>"); @@ -415,24 +415,24 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "<====="); } -USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) +USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) { - INT uiLoopIndex = 0; + INT uiLoopIndex = 0; struct bcm_classifier_rule *pstClassifierRule = NULL; struct bcm_eth_packet_info stEthCsPktInfo; PVOID pvEThPayload = NULL; struct iphdr *pIpHeader = NULL; - INT uiSfIndex = 0; - USHORT usIndex = Adapter->usBestEffortQueueIndex; - bool bFragmentedPkt = false, bClassificationSucceed = false; - USHORT usCurrFragment = 0; + INT uiSfIndex = 0; + USHORT usIndex = Adapter->usBestEffortQueueIndex; + bool bFragmentedPkt = false, bClassificationSucceed = false; + USHORT usCurrFragment = 0; struct bcm_tcp_header *pTcpHeader; UCHAR IpHeaderLength; UCHAR TcpHeaderLength; pvEThPayload = skb->data; - *((UINT32*) (skb->cb) +SKB_CB_TCPACK_OFFSET) = 0; + *((UINT32 *) (skb->cb) + SKB_CB_TCPACK_OFFSET) = 0; EThCSGetPktInfo(Adapter, pvEThPayload, &stEthCsPktInfo); switch (stEthCsPktInfo.eNwpktEthFrameType) { @@ -555,15 +555,15 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff* skb) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "CF id : %d, SF ID is =%lu", pstClassifierRule->uiClassifierRuleIndex, pstClassifierRule->ulSFID); /* Store The matched Classifier in SKB */ - *((UINT32*)(skb->cb)+SKB_CB_CLASSIFICATION_OFFSET) = pstClassifierRule->uiClassifierRuleIndex; + *((UINT32 *)(skb->cb)+SKB_CB_CLASSIFICATION_OFFSET) = pstClassifierRule->uiClassifierRuleIndex; if ((TCP == pIpHeader->protocol) && !bFragmentedPkt && (ETH_AND_IP_HEADER_LEN + TCP_HEADER_LEN <= skb->len)) { - IpHeaderLength = pIpHeader->ihl; - pTcpHeader = (struct bcm_tcp_header *)(((PUCHAR)pIpHeader)+(IpHeaderLength*4)); - TcpHeaderLength = GET_TCP_HEADER_LEN(pTcpHeader->HeaderLength); + IpHeaderLength = pIpHeader->ihl; + pTcpHeader = (struct bcm_tcp_header *)(((PUCHAR)pIpHeader)+(IpHeaderLength*4)); + TcpHeaderLength = GET_TCP_HEADER_LEN(pTcpHeader->HeaderLength); if ((pTcpHeader->ucFlags & TCP_ACK) && (ntohs(pIpHeader->tot_len) == (IpHeaderLength*4)+(TcpHeaderLength*4))) - *((UINT32*) (skb->cb) + SKB_CB_TCPACK_OFFSET) = TCP_ACK; + *((UINT32 *) (skb->cb) + SKB_CB_TCPACK_OFFSET) = TCP_ACK; } usIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); @@ -629,7 +629,7 @@ static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRu return TRUE; } -static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff* skb, struct bcm_eth_packet_info *pstEthCsPktInfo) +static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo) { struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if ((pstClassifierRule->ucEtherTypeLen == 0) || @@ -662,7 +662,7 @@ static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, } -static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff* skb, struct bcm_eth_packet_info *pstEthCsPktInfo) +static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo) { bool bClassificationSucceed = false; USHORT usVLANID; @@ -713,7 +713,7 @@ static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, s } -static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, struct sk_buff* skb, +static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo, struct bcm_classifier_rule *pstClassifierRule, B_UINT8 EthCSCupport) -- cgit From 16489350a516e88b57a71b5d3dffafb3d0057691 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:07 +0530 Subject: staging: rtl8188eu: Rename hal_EfusePowerSwitch_RTL8188E() Rename hal_EfusePowerSwitch_RTL8188E() to rtl8188e_EfusePowerSwitch() and remove original rtl8188e_EfusePowerSwitch(), so that driver can call hal_EfusePowerSwitch_RTL8188E() directly without going through rtl8188e_EfusePowerSwitch(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 58426ac6fc90..fdf2acb6a830 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -751,7 +751,7 @@ hal_EfusePgPacketWriteData( bool bPseudoTest); static void -hal_EfusePowerSwitch_RTL8188E( +rtl8188e_EfusePowerSwitch( struct adapter *pAdapter, u8 bWrite, u8 PwrState) @@ -800,16 +800,6 @@ hal_EfusePowerSwitch_RTL8188E( } } -static void -rtl8188e_EfusePowerSwitch( - struct adapter *pAdapter, - u8 bWrite, - u8 PwrState) -{ - hal_EfusePowerSwitch_RTL8188E(pAdapter, bWrite, PwrState); -} - - static void Hal_EfuseReadEFuse88E(struct adapter *Adapter, u16 _offset, u16 _size_byte, -- cgit From 559803f98a1f9aba4bb5faeaadd579685570b93c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:08 +0530 Subject: staging: rtl8188eu: Remove rtl8188e_ReadEFuse() rtl8188e_ReadEFuse() checks bool bPseudoTest and then calls suitable function to read Fuse, ReadEFuseByIC() also does same thing. So use ReadEFuseByIC() and drop rtl8188e_ReadEFuse(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index fdf2acb6a830..1d6224a4a534 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -961,16 +961,6 @@ static void ReadEFuse_Pseudo(struct adapter *Adapter, u8 efuseType, u16 _offset, Hal_EfuseReadEFuse88E(Adapter, _offset, _size_byte, pbuf, bPseudoTest); } -static void rtl8188e_ReadEFuse(struct adapter *Adapter, u8 efuseType, - u16 _offset, u16 _size_byte, u8 *pbuf, - bool bPseudoTest) -{ - if (bPseudoTest) - ReadEFuse_Pseudo (Adapter, efuseType, _offset, _size_byte, pbuf, bPseudoTest); - else - ReadEFuseByIC(Adapter, efuseType, _offset, _size_byte, pbuf, bPseudoTest); -} - /* Do not support BT */ static void Hal_EFUSEGetEfuseDefinition88E(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) { @@ -1849,7 +1839,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) /* Efuse related function */ pHalFunc->EfusePowerSwitch = &rtl8188e_EfusePowerSwitch; - pHalFunc->ReadEFuse = &rtl8188e_ReadEFuse; + pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->EFUSEGetEfuseDefinition = &rtl8188e_EFUSE_GetEfuseDefinition; pHalFunc->EfuseGetCurrentSize = &rtl8188e_EfuseGetCurrentSize; pHalFunc->Efuse_PgPacketRead = &rtl8188e_Efuse_PgPacketRead; -- cgit From 68ebc91a9acf629bbcf6d79bbe9ae49bdf93133d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:09 +0530 Subject: staging: rtl8188eu: Remove unused function ReadEFuse_Pseudo() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 1d6224a4a534..b7066cbd75f7 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -956,11 +956,6 @@ exit: return; } -static void ReadEFuse_Pseudo(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest) -{ - Hal_EfuseReadEFuse88E(Adapter, _offset, _size_byte, pbuf, bPseudoTest); -} - /* Do not support BT */ static void Hal_EFUSEGetEfuseDefinition88E(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) { -- cgit From 1df2d1cfc765df3c3b10679410a879f82f1386f9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:10 +0530 Subject: staging: rtl8188eu: Remove rtl8188e_EfuseGetCurrentSize() rtl8188e_EfuseGetCurrentSize() checks bool bPseudoTest and then calls suitable function to get efuse size, hal_EfuseGetCurrentSize_8188e() also does same thing. So use hal_EfuseGetCurrentSize_8188e() and drop rtl8188e_EfuseGetCurrentSize(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 5 ++--- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 17 +++-------------- drivers/staging/rtl8188eu/include/hal_intf.h | 2 +- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 4 files changed, 7 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 31507e7a9b24..b4504585d27a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -128,12 +128,11 @@ Efuse_PowerSwitch( u16 Efuse_GetCurrentSize( struct adapter *pAdapter, - u8 efuseType, bool pseudo) { u16 ret = 0; - ret = pAdapter->HalFunc.EfuseGetCurrentSize(pAdapter, efuseType, pseudo); + ret = pAdapter->HalFunc.EfuseGetCurrentSize(pAdapter, pseudo); return ret; } @@ -490,7 +489,7 @@ u16 efuse_GetMaxSize(struct adapter *padapter) u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size) { Efuse_PowerSwitch(padapter, false, true); - *size = Efuse_GetCurrentSize(padapter, EFUSE_WIFI, false); + *size = Efuse_GetCurrentSize(padapter, false); Efuse_PowerSwitch(padapter, false, false); return _SUCCESS; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index b7066cbd75f7..84393aaf68d5 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1215,17 +1215,6 @@ static u16 Hal_EfuseGetCurrentSize_Pseudo(struct adapter *pAdapter, bool bPseudo return ret; } -static u16 rtl8188e_EfuseGetCurrentSize(struct adapter *pAdapter, u8 efuseType, bool bPseudoTest) -{ - u16 ret = 0; - - if (bPseudoTest) - ret = Hal_EfuseGetCurrentSize_Pseudo(pAdapter, bPseudoTest); - else - ret = hal_EfuseGetCurrentSize_8188e(pAdapter, bPseudoTest); - return ret; -} - static int hal_EfusePgPacketRead_8188e(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) { u8 ReadState = PG_STATE_HEADER; @@ -1357,7 +1346,7 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st if (!PgWriteSuccess) return false; else - efuse_addr = Efuse_GetCurrentSize(pAdapter, efuseType, bPseudoTest); + efuse_addr = Efuse_GetCurrentSize(pAdapter, bPseudoTest); } else { efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; } @@ -1646,7 +1635,7 @@ hal_EfusePgCheckAvailableAddr( /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len, false); - if (Efuse_GetCurrentSize(pAdapter, efuseType, bPseudoTest) >= efuse_max_available_len) + if (Efuse_GetCurrentSize(pAdapter, bPseudoTest) >= efuse_max_available_len) return false; return true; } @@ -1836,7 +1825,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->EfusePowerSwitch = &rtl8188e_EfusePowerSwitch; pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->EFUSEGetEfuseDefinition = &rtl8188e_EFUSE_GetEfuseDefinition; - pHalFunc->EfuseGetCurrentSize = &rtl8188e_EfuseGetCurrentSize; + pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; pHalFunc->Efuse_PgPacketRead = &rtl8188e_Efuse_PgPacketRead; pHalFunc->Efuse_PgPacketWrite = &rtl8188e_Efuse_PgPacketWrite; pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index ca29676d09df..ecc92a6a60c2 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -239,7 +239,7 @@ struct hal_ops { u16 _size_byte, u8 *pbuf, bool bPseudoTest); void (*EFUSEGetEfuseDefinition)(struct adapter *padapter, u8 efuseType, u8 type, void *pOut, bool bPseudoTest); - u16 (*EfuseGetCurrentSize)(struct adapter *padapter, u8 efuseType, + u16 (*EfuseGetCurrentSize)(struct adapter *padapter, bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, u8 *data, bool bPseudoTest); diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index df51355e0f32..cc19e191481b 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -127,7 +127,7 @@ u8 rtw_BT_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_BT_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -u16 Efuse_GetCurrentSize(struct adapter *adapter, u8 efusetype, bool test); +u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, -- cgit From 71f889f3f9f688fe72cd6e229d4a3b5439e4b767 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:11 +0530 Subject: staging: rtl8188eu: Remove unused function Hal_EfuseGetCurrentSize_Pseudo() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 84393aaf68d5..8bd7205e0760 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1207,14 +1207,6 @@ static u16 hal_EfuseGetCurrentSize_8188e(struct adapter *pAdapter, bool bPseudoT return efuse_addr; } -static u16 Hal_EfuseGetCurrentSize_Pseudo(struct adapter *pAdapter, bool bPseudoTest) -{ - u16 ret = 0; - - ret = hal_EfuseGetCurrentSize_8188e(pAdapter, bPseudoTest); - return ret; -} - static int hal_EfusePgPacketRead_8188e(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) { u8 ReadState = PG_STATE_HEADER; -- cgit From 0b7469e552afb4c4fbbbb2ad26c0e97be393bc55 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:12 +0530 Subject: staging: rtl8188eu: Remove function Hal_EFUSEGetEfuseDefinition_Pseudo88E() Definition of Hal_EFUSEGetEfuseDefinition_Pseudo88E() is identical to Hal_EFUSEGetEfuseDefinition88E(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 65 ----------------------- 1 file changed, 65 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 8bd7205e0760..9dda5f65d675 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1019,73 +1019,8 @@ static void Hal_EFUSEGetEfuseDefinition88E(struct adapter *pAdapter, u8 efuseTyp } } -static void Hal_EFUSEGetEfuseDefinition_Pseudo88E(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) -{ - switch (type) { - case TYPE_EFUSE_MAX_SECTION: - { - u8 *pMax_section; - pMax_section = (u8 *)pOut; - *pMax_section = EFUSE_MAX_SECTION_88E; - } - break; - case TYPE_EFUSE_REAL_CONTENT_LEN: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; - } - break; - case TYPE_EFUSE_CONTENT_LEN_BANK: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; - } - break; - case TYPE_AVAILABLE_EFUSE_BYTES_BANK: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - case TYPE_EFUSE_MAP_LEN: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)EFUSE_MAP_LEN_88E; - } - break; - case TYPE_EFUSE_PROTECT_BYTES_BANK: - { - u8 *pu1Tmp; - pu1Tmp = (u8 *)pOut; - *pu1Tmp = (u8)(EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - default: - { - u8 *pu1Tmp; - pu1Tmp = (u8 *)pOut; - *pu1Tmp = 0; - } - break; - } -} - static void rtl8188e_EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut, bool bPseudoTest) { - if (bPseudoTest) - Hal_EFUSEGetEfuseDefinition_Pseudo88E(pAdapter, efuseType, type, pOut); - else Hal_EFUSEGetEfuseDefinition88E(pAdapter, efuseType, type, pOut); } -- cgit From 186e4257074d8fe5797144163171c25e94a969cf Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:13 +0530 Subject: staging: rtl8188eu: Rename Hal_EFUSEGetEfuseDefinition88E() Rename Hal_EFUSEGetEfuseDefinition88E() to rtl8188e_EFUSE_GetEfuseDefinition() and remove original rtl8188e_EFUSE_GetEfuseDefinition(), so that driver can call Hal_EFUSEGetEfuseDefinition88E() directly without going through rtl8188e_EFUSE_GetEfuseDefinition(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 7 +------ drivers/staging/rtl8188eu/include/hal_intf.h | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index b4504585d27a..7752efd33ad1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -229,7 +229,7 @@ static void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut, bool pseudo ) { - pAdapter->HalFunc.EFUSEGetEfuseDefinition(pAdapter, efuseType, type, pOut, pseudo); + pAdapter->HalFunc.EFUSEGetEfuseDefinition(pAdapter, efuseType, type, pOut); } /*----------------------------------------------------------------------------- diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 9dda5f65d675..7c05bbe657ce 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -957,7 +957,7 @@ exit: } /* Do not support BT */ -static void Hal_EFUSEGetEfuseDefinition88E(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) +static void rtl8188e_EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) { switch (type) { case TYPE_EFUSE_MAX_SECTION: @@ -1019,11 +1019,6 @@ static void Hal_EFUSEGetEfuseDefinition88E(struct adapter *pAdapter, u8 efuseTyp } } -static void rtl8188e_EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut, bool bPseudoTest) -{ - Hal_EFUSEGetEfuseDefinition88E(pAdapter, efuseType, type, pOut); -} - static u8 Hal_EfuseWordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) { u16 tmpaddr = 0; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index ecc92a6a60c2..d971e6e0e558 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -238,7 +238,7 @@ struct hal_ops { void (*ReadEFuse)(struct adapter *padapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); void (*EFUSEGetEfuseDefinition)(struct adapter *padapter, u8 efuseType, - u8 type, void *pOut, bool bPseudoTest); + u8 type, void *pOut); u16 (*EfuseGetCurrentSize)(struct adapter *padapter, bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, -- cgit From 41e321e099f5299509ea8a7ebcb3f1994f2859b0 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:14 +0530 Subject: staging: rtl8188eu: assign hal_EfusePgPacketRead_8188e() to ->Efuse_PgPacketRead assign hal_EfusePgPacketRead_8188e() to ->Efuse_PgPacketRead directly instead of going through many functions. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 29 +---------------------- 1 file changed, 1 insertion(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 7c05bbe657ce..c5bbb087f887 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1223,33 +1223,6 @@ static int hal_EfusePgPacketRead_8188e(struct adapter *pAdapter, u8 offset, u8 * return true; } -static int Hal_EfusePgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) -{ - int ret; - - ret = hal_EfusePgPacketRead_8188e(pAdapter, offset, data, bPseudoTest); - return ret; -} - -static int Hal_EfusePgPacketRead_Pseudo(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) -{ - int ret; - - ret = hal_EfusePgPacketRead_8188e(pAdapter, offset, data, bPseudoTest); - return ret; -} - -static int rtl8188e_Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) -{ - int ret; - - if (bPseudoTest) - ret = Hal_EfusePgPacketRead_Pseudo (pAdapter, offset, data, bPseudoTest); - else - ret = Hal_EfusePgPacketRead(pAdapter, offset, data, bPseudoTest); - return ret; -} - static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, struct pgpkt *pFixPkt, u16 *pAddr, bool bPseudoTest) { u8 originaldata[8], badworden = 0; @@ -1748,7 +1721,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->EFUSEGetEfuseDefinition = &rtl8188e_EFUSE_GetEfuseDefinition; pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; - pHalFunc->Efuse_PgPacketRead = &rtl8188e_Efuse_PgPacketRead; + pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &rtl8188e_Efuse_PgPacketWrite; pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; -- cgit From fa713a41e97055bc4b14abee193a1e72debf3695 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:15 +0530 Subject: staging:rtl8188eu:assign hal_EfusePgPacketWrite_8188e() to ->Efuse_PgPacketWrite assign hal_EfusePgPacketWrite_8188e() to ->Efuse_PgPacketWrite directly instead of going through many functions. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 29 +---------------------- drivers/staging/rtl8188eu/include/hal_intf.h | 2 +- 2 files changed, 2 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index c5bbb087f887..7c53ea2775e1 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1567,33 +1567,6 @@ static bool hal_EfusePgPacketWrite_8188e(struct adapter *pAdapter, u8 offset, u8 return true; } -static int Hal_EfusePgPacketWrite_Pseudo(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest) -{ - int ret; - - ret = hal_EfusePgPacketWrite_8188e(pAdapter, offset, word_en, data, bPseudoTest); - return ret; -} - -static int Hal_EfusePgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest) -{ - int ret = 0; - ret = hal_EfusePgPacketWrite_8188e(pAdapter, offset, word_en, data, bPseudoTest); - - return ret; -} - -static int rtl8188e_Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest) -{ - int ret; - - if (bPseudoTest) - ret = Hal_EfusePgPacketWrite_Pseudo (pAdapter, offset, word_en, data, bPseudoTest); - else - ret = Hal_EfusePgPacketWrite(pAdapter, offset, word_en, data, bPseudoTest); - return ret; -} - static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter) { u32 value32; @@ -1722,7 +1695,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->EFUSEGetEfuseDefinition = &rtl8188e_EFUSE_GetEfuseDefinition; pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; - pHalFunc->Efuse_PgPacketWrite = &rtl8188e_Efuse_PgPacketWrite; + pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; pHalFunc->sreset_init_value = &sreset_init_value; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index d971e6e0e558..f4f644306032 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -243,7 +243,7 @@ struct hal_ops { bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, u8 *data, bool bPseudoTest); - int (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, + bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest); u8 (*Efuse_WordEnableDataWrite)(struct adapter *padapter, u16 efuse_addr, u8 word_en, -- cgit From 39b9d54f548adcdaaa58e5cb4a9a5e9bc280bbce Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:16 +0530 Subject: staging:rtl8188eu: Assign rtl8188e_Efuse_WordEnableDataWrite() to ->Efuse_WordEnableDataWrite Assign rtl8188e_Efuse_WordEnableDataWrite() to ->Efuse_WordEnableDataWrite instead of going through many functions. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 7c53ea2775e1..b3bc12584d89 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1071,25 +1071,6 @@ static u8 Hal_EfuseWordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, return badworden; } -static u8 Hal_EfuseWordEnableDataWrite_Pseudo(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) -{ - u8 ret; - - ret = Hal_EfuseWordEnableDataWrite(pAdapter, efuse_addr, word_en, data, bPseudoTest); - return ret; -} - -static u8 rtl8188e_Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) -{ - u8 ret = 0; - - if (bPseudoTest) - ret = Hal_EfuseWordEnableDataWrite_Pseudo (pAdapter, efuse_addr, word_en, data, bPseudoTest); - else - ret = Hal_EfuseWordEnableDataWrite(pAdapter, efuse_addr, word_en, data, bPseudoTest); - return ret; -} - static u16 hal_EfuseGetCurrentSize_8188e(struct adapter *pAdapter, bool bPseudoTest) { int bContinual = true; @@ -1696,7 +1677,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; - pHalFunc->Efuse_WordEnableDataWrite = &rtl8188e_Efuse_WordEnableDataWrite; + pHalFunc->Efuse_WordEnableDataWrite = &Hal_EfuseWordEnableDataWrite; pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; -- cgit From fcb24cda3e87396b05b97cae2cc684057be68b2f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:17 +0530 Subject: staging: rtl8188eu: rtw_efuse.c: Remove unnecessary function declaration Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 7752efd33ad1..bae0fca8e304 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -47,16 +47,10 @@ u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN] = {0}; #define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ /* */ -bool -Efuse_Read1ByteFromFakeContent( +static bool Efuse_Read1ByteFromFakeContent( struct adapter *pAdapter, u16 Offset, - u8 *Value); -bool -Efuse_Read1ByteFromFakeContent( - struct adapter *pAdapter, - u16 Offset, - u8 *Value) + u8 *Value) { if (Offset >= EFUSE_MAX_HW_SIZE) return false; -- cgit From 9dec254a80f9839a4d765d0339c412a6ff62f616 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:18 +0530 Subject: staging: rtl8188eu: Rename rtl8188e_EFUSE_GetEfuseDefinition() Rename rtl8188e_EFUSE_GetEfuseDefinition() to EFUSE_GetEfuseDefinition() and remove original EFUSE_GetEfuseDefinition() function, so that driver can call rtl8188e_EFUSE_GetEfuseDefinition() directly without going through EFUSE_GetEfuseDefinition(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 26 +++++++++-------------- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 6 +++--- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 13 ++++++------ drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 22 +++++++++---------- 6 files changed, 31 insertions(+), 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index bae0fca8e304..4c6ed3babf35 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -220,12 +220,6 @@ static void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, Adapter->HalFunc.ReadEFuse(Adapter, efuseType, _offset, _size_byte, pbuf, pseudo); } -void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut, bool pseudo - ) -{ - pAdapter->HalFunc.EFUSEGetEfuseDefinition(pAdapter, efuseType, type, pOut); -} - /*----------------------------------------------------------------------------- * Function: EFUSE_Read1Byte * @@ -250,7 +244,7 @@ u8 EFUSE_Read1Byte(struct adapter *Adapter, u16 Address) u32 k = 0; u16 contentLen = 0; - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI , TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&contentLen, false); + EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI , TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&contentLen); if (Address < contentLen) { /* E-fuse 512Byte */ /* Write E-fuse Register address bit0~7 */ @@ -440,8 +434,8 @@ u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 cnts u8 res = _FAIL; u8 (*rw8)(struct adapter *, u16, u8*); - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&real_content_len, false); - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&real_content_len); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if (start_addr > real_content_len) return _FAIL; @@ -476,7 +470,7 @@ u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 cnts u16 efuse_GetMaxSize(struct adapter *padapter) { u16 max_size; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size); return max_size; } /* */ @@ -493,7 +487,7 @@ u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u16 mapLen = 0; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if ((addr + cnts) > mapLen) return _FAIL; @@ -511,7 +505,7 @@ u8 rtw_BT_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u16 mapLen = 0; - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if ((addr + cnts) > mapLen) return _FAIL; @@ -534,7 +528,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) u8 ret = _SUCCESS; u16 mapLen = 0; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if ((addr + cnts) > mapLen) return _FAIL; @@ -626,7 +620,7 @@ u8 rtw_BT_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data u8 ret = _SUCCESS; u16 mapLen = 0; - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if ((addr + cnts) > mapLen) return _FAIL; @@ -795,7 +789,7 @@ static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse, Efuse_PowerSwitch(pAdapter, false, true); - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, pseudo); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); efuse_ReadEFuse(pAdapter, efuseType, 0, mapLen, Efuse, pseudo); @@ -826,7 +820,7 @@ void EFUSE_ShadowMapUpdate( struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); u16 mapLen = 0; - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, pseudo); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if (pEEPROM->bautoload_fail_flag) _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen); diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index ad5599415d65..e62cca8ded26 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -1099,7 +1099,7 @@ int rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv) ("+rtl8188eu_oid_rt_pro_read_efuse_hd: buf_len=%d addr=%d cnts=%d\n", poid_par_priv->information_buf_len, addr, cnts)); - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { RT_TRACE(_module_mp_, _drv_err_, ("!rtl8188eu_oid_rt_pro_read_efuse_hdl: parameter error!\n")); @@ -1141,7 +1141,7 @@ int rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv) ("+rtl8188eu_oid_rt_pro_write_efuse_hdl: buf_len=%d addr=0x%04x cnts=%d\n", poid_par_priv->information_buf_len, addr, cnts)); - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { RT_TRACE(_module_mp_, _drv_err_, ("!rtl8188eu_oid_rt_pro_write_efuse_hdl: parameter error")); @@ -1284,7 +1284,7 @@ int rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv) RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_efuse_map_hdl\n")); - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&maplen, false); + EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&maplen); *poid_par_priv->bytes_rw = 0; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index b3bc12584d89..80cb54d9b9ae 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -957,7 +957,7 @@ exit: } /* Do not support BT */ -static void rtl8188e_EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) +void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) { switch (type) { case TYPE_EFUSE_MAX_SECTION: @@ -1131,7 +1131,7 @@ static int hal_EfusePgPacketRead_8188e(struct adapter *pAdapter, u8 offset, u8 * u8 max_section = 0; u8 tmp_header = 0; - EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAX_SECTION, (void *)&max_section, bPseudoTest); + EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAX_SECTION, (void *)&max_section); if (data == NULL) return false; @@ -1240,7 +1240,7 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse u8 pg_header = 0, tmp_header = 0, pg_header_temp = 0; u8 repeatcnt = 0; - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len, bPseudoTest); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); while (efuse_addr < efuse_max_available_len) { pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F; @@ -1420,8 +1420,8 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u u16 startAddr = 0, efuse_max_available_len = 0, efuse_max = 0; struct pgpkt curPkt; - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len, bPseudoTest); - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max, bPseudoTest); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max); if (efuseType == EFUSE_WIFI) { if (bPseudoTest) { @@ -1509,7 +1509,7 @@ hal_EfusePgCheckAvailableAddr( u16 efuse_max_available_len = 0; /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len, false); + EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len); if (Efuse_GetCurrentSize(pAdapter, bPseudoTest) >= efuse_max_available_len) return false; @@ -1673,7 +1673,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) /* Efuse related function */ pHalFunc->EfusePowerSwitch = &rtl8188e_EfusePowerSwitch; pHalFunc->ReadEFuse = &ReadEFuseByIC; - pHalFunc->EFUSEGetEfuseDefinition = &rtl8188e_EFUSE_GetEfuseDefinition; pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index f4f644306032..d9b0e7127164 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -237,8 +237,6 @@ struct hal_ops { u8 PwrState); void (*ReadEFuse)(struct adapter *padapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); - void (*EFUSEGetEfuseDefinition)(struct adapter *padapter, u8 efuseType, - u8 type, void *pOut); u16 (*EfuseGetCurrentSize)(struct adapter *padapter, bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index cc19e191481b..7d1f28f83c2a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -131,7 +131,7 @@ u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, - void *out, bool bPseudoTest); + void *out); u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data, bool test); u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data, bool test); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 11b71ec89f4f..c43322d281d0 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -5800,7 +5800,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, } DBG_88E("%s: cnts =%d\n", __func__, cnts); - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EINVAL; @@ -5839,7 +5839,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, } else if (strcmp(tmp[0], "mac") == 0) { cnts = 6; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { DBG_88E("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -5861,7 +5861,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, } else if (strcmp(tmp[0], "vidpid") == 0) { cnts = 4; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { DBG_88E("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -5938,7 +5938,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, } DBG_88E("%s: cnts =%d\n", __func__, cnts); - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr + cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -6094,7 +6094,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -6169,7 +6169,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk + 1]); /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -6207,7 +6207,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk + 1]); - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -6246,7 +6246,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); err = -EFAULT; @@ -6301,7 +6301,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, } else if (strcmp(tmp[0], "btfk2map") == 0) { memcpy(pEfuseHal->BTEfuseModifiedMap, pEfuseHal->fakeBTEfuseModifiedMap, EFUSE_BT_MAX_MAP_LEN); - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if (max_available_size < 1) { err = -EFAULT; goto exit; @@ -6313,7 +6313,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, goto exit; } } else if (strcmp(tmp[0], "wlfk2map") == 0) { - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if (max_available_size < 1) { err = -EFAULT; goto exit; @@ -7198,7 +7198,7 @@ static int rtw_mp_thermal(struct net_device *dev, Hal_GetThermalMeter(padapter, &val); if (bwrite == 0) { - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false); + EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if (2 > max_available_size) { DBG_88E("no available efuse!\n"); return -EFAULT; -- cgit From 585688c957e73dded5f92eaf60b1f9a43d491f14 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:19 +0530 Subject: staging: rtl8188eu: Rename hal_EfuseGetCurrentSize_8188e() Rename hal_EfuseGetCurrentSize_8188e() to Efuse_GetCurrentSize() and remove original Efuse_GetCurrentSize() function, so that driver can call hal_EfuseGetCurrentSize_8188e() directly without going through Efuse_GetCurrentSize(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 28 ----------------------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 3 +-- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- 3 files changed, 1 insertion(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 4c6ed3babf35..5cf5a30bd985 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -103,34 +103,6 @@ Efuse_PowerSwitch( pAdapter->HalFunc.EfusePowerSwitch(pAdapter, write, PwrState); } -/*----------------------------------------------------------------------------- - * Function: efuse_GetCurrentSize - * - * Overview: Get current efuse size!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/16/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -u16 -Efuse_GetCurrentSize( - struct adapter *pAdapter, - bool pseudo) -{ - u16 ret = 0; - - ret = pAdapter->HalFunc.EfuseGetCurrentSize(pAdapter, pseudo); - - return ret; -} - /* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ u8 Efuse_CalculateWordCnts(u8 word_en) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 80cb54d9b9ae..507e62ba54ab 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1071,7 +1071,7 @@ static u8 Hal_EfuseWordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, return badworden; } -static u16 hal_EfuseGetCurrentSize_8188e(struct adapter *pAdapter, bool bPseudoTest) +u16 Efuse_GetCurrentSize(struct adapter *pAdapter, bool bPseudoTest) { int bContinual = true; u16 efuse_addr = 0; @@ -1673,7 +1673,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) /* Efuse related function */ pHalFunc->EfusePowerSwitch = &rtl8188e_EfusePowerSwitch; pHalFunc->ReadEFuse = &ReadEFuseByIC; - pHalFunc->EfuseGetCurrentSize = &hal_EfuseGetCurrentSize_8188e; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; pHalFunc->Efuse_WordEnableDataWrite = &Hal_EfuseWordEnableDataWrite; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index d9b0e7127164..adf3847740d8 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -237,8 +237,6 @@ struct hal_ops { u8 PwrState); void (*ReadEFuse)(struct adapter *padapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); - u16 (*EfuseGetCurrentSize)(struct adapter *padapter, - bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, -- cgit From f98440f48bea7a98f95d91993210792c0ee399b7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:20 +0530 Subject: staging: rtl8188eu: Rename rtl8188e_EfusePowerSwitch() to Efuse_PowerSwitch() Rename rtl8188e_EfusePowerSwitch() to Efuse_PowerSwitch() and remove original Efuse_PowerSwitch() function, so that driver can call rtl8188e_EfusePowerSwitch() directly without going through Efuse_PowerSwitch(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 27 ----------------------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 12 +++++++--- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- 3 files changed, 9 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 5cf5a30bd985..7adb7b4202db 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -76,33 +76,6 @@ Efuse_Write1ByteToFakeContent( return true; } -/*----------------------------------------------------------------------------- - * Function: Efuse_PowerSwitch - * - * Overview: When we want to enable write operation, we should change to - * pwr on state. When we stop write, we should switch to 500k mode - * and disable LDO 2.5V. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/17/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -void -Efuse_PowerSwitch( - struct adapter *pAdapter, - u8 write, - u8 PwrState) -{ - pAdapter->HalFunc.EfusePowerSwitch(pAdapter, write, PwrState); -} - /* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ u8 Efuse_CalculateWordCnts(u8 word_en) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 507e62ba54ab..525973f090ad 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -750,8 +750,15 @@ hal_EfusePgPacketWriteData( struct pgpkt *pTargetPkt, bool bPseudoTest); -static void -rtl8188e_EfusePowerSwitch( +/* + * Function: Efuse_PowerSwitch + * + * Overview: When we want to enable write operation, we should change to + * pwr on state. When we stop write, we should switch to 500k mode + * and disable LDO 2.5V. + */ + +void Efuse_PowerSwitch( struct adapter *pAdapter, u8 bWrite, u8 PwrState) @@ -1671,7 +1678,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->write_rfreg = &rtl8188e_PHY_SetRFReg; /* Efuse related function */ - pHalFunc->EfusePowerSwitch = &rtl8188e_EfusePowerSwitch; pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index adf3847740d8..38285d645979 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -233,8 +233,6 @@ struct hal_ops { enum rf_radio_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data); - void (*EfusePowerSwitch)(struct adapter *padapter, u8 bWrite, - u8 PwrState); void (*ReadEFuse)(struct adapter *padapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, -- cgit From 7b61ace1ffc4696fb3dfdc1755234cf3608dba9e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:21 +0530 Subject: staging: rtl8188eu: Rename function Hal_EfuseWordEnableDataWrite() Rename Hal_EfuseWordEnableDataWrite() to Efuse_WordEnableDataWrite() and remove original EFUSE_GetEfuseDefinition() function, so that driver can call Hal_EfuseWordEnableDataWrite() directly without going through Efuse_WordEnableDataWrite(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 9 --------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 3 +-- drivers/staging/rtl8188eu/include/hal_intf.h | 3 --- 3 files changed, 1 insertion(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 7adb7b4202db..f2d374d5a764 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -350,15 +350,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) } } -u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool pseudo) -{ - u8 ret = 0; - - ret = pAdapter->HalFunc.Efuse_WordEnableDataWrite(pAdapter, efuse_addr, word_en, data, pseudo); - - return ret; -} - static u8 efuse_read8(struct adapter *padapter, u16 address, u8 *value) { return efuse_OneByteRead(padapter, address, value, false); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 525973f090ad..8e93d4825338 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1026,7 +1026,7 @@ void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, v } } -static u8 Hal_EfuseWordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) +u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) { u16 tmpaddr = 0; u16 start_addr = efuse_addr; @@ -1681,7 +1681,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; - pHalFunc->Efuse_WordEnableDataWrite = &Hal_EfuseWordEnableDataWrite; pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 38285d645979..a7cad6ff07cf 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -239,9 +239,6 @@ struct hal_ops { u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest); - u8 (*Efuse_WordEnableDataWrite)(struct adapter *padapter, - u16 efuse_addr, u8 word_en, - u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite_BT)(struct adapter *padapter, u8 offset, u8 word_en, u8 *data, bool test); -- cgit From b0c8d7af0e60aeb5cc75fbf58f163540f287e619 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:22 +0530 Subject: staging: rtl8188eu: Remove function Hal_EfuseReadEFuse88E() Hal_EfuseReadEFuse88E() is called in ReadEFuseByIC(), when bPseudoTest is true but it's always false. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 136 ---------------------- 1 file changed, 136 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 8e93d4825338..abf66e75784c 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -807,141 +807,6 @@ void Efuse_PowerSwitch( } } -static void Hal_EfuseReadEFuse88E(struct adapter *Adapter, - u16 _offset, - u16 _size_byte, - u8 *pbuf, - bool bPseudoTest - ) -{ - u8 *efuseTbl = NULL; - u8 rtemp8[1]; - u16 eFuse_Addr = 0; - u8 offset, wren; - u16 i, j; - u16 **eFuseWord = NULL; - u16 efuse_utilized = 0; - u8 u1temp = 0; - - /* */ - /* Do NOT excess total size of EFuse table. Added by Roger, 2008.11.10. */ - /* */ - if ((_offset + _size_byte) > EFUSE_MAP_LEN_88E) {/* total E-Fuse table is 512bytes */ - DBG_88E("Hal_EfuseReadEFuse88E(): Invalid offset(%#x) with read bytes(%#x)!!\n", _offset, _size_byte); - goto exit; - } - - efuseTbl = (u8 *)rtw_zmalloc(EFUSE_MAP_LEN_88E); - if (efuseTbl == NULL) { - DBG_88E("%s: alloc efuseTbl fail!\n", __func__); - goto exit; - } - - eFuseWord = (u16 **)rtw_malloc2d(EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); - if (eFuseWord == NULL) { - DBG_88E("%s: alloc eFuseWord fail!\n", __func__); - goto exit; - } - - /* 0. Refresh efuse init map as all oxFF. */ - for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) - for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) - eFuseWord[i][j] = 0xFFFF; - - /* */ - /* 1. Read the first byte to check if efuse is empty!!! */ - /* */ - /* */ - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - if (*rtemp8 != 0xFF) { - efuse_utilized++; - eFuse_Addr++; - } else { - DBG_88E("EFUSE is empty efuse_Addr-%d efuse_data =%x\n", eFuse_Addr, *rtemp8); - goto exit; - } - - /* */ - /* 2. Read real efuse content. Filter PG header and every section data. */ - /* */ - while ((*rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { - /* Check PG header for section num. */ - if ((*rtemp8 & 0x1F) == 0x0F) { /* extended header */ - u1temp = ((*rtemp8 & 0xE0) >> 5); - - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - - if ((*rtemp8 & 0x0F) == 0x0F) { - eFuse_Addr++; - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - - if (*rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) - eFuse_Addr++; - continue; - } else { - offset = ((*rtemp8 & 0xF0) >> 1) | u1temp; - wren = (*rtemp8 & 0x0F); - eFuse_Addr++; - } - } else { - offset = ((*rtemp8 >> 4) & 0x0f); - wren = (*rtemp8 & 0x0f); - } - - if (offset < EFUSE_MAX_SECTION_88E) { - /* Get word enable value from PG header */ - - for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) { - /* Check word enable condition in the section */ - if (!(wren & 0x01)) { - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - eFuse_Addr++; - efuse_utilized++; - eFuseWord[offset][i] = (*rtemp8 & 0xff); - if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) - break; - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - eFuse_Addr++; - efuse_utilized++; - eFuseWord[offset][i] |= (((u16)*rtemp8 << 8) & 0xff00); - if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) - break; - } - wren >>= 1; - } - } - - /* Read next PG header */ - ReadEFuseByte(Adapter, eFuse_Addr, rtemp8, bPseudoTest); - - if (*rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { - efuse_utilized++; - eFuse_Addr++; - } - } - - /* 3. Collect 16 sections and 4 word unit into Efuse map. */ - for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) { - for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) { - efuseTbl[(i*8)+(j*2)] = (eFuseWord[i][j] & 0xff); - efuseTbl[(i*8)+((j*2)+1)] = ((eFuseWord[i][j] >> 8) & 0xff); - } - } - - /* 4. Copy from Efuse map to output pointer memory!!! */ - for (i = 0; i < _size_byte; i++) - pbuf[i] = efuseTbl[_offset+i]; - - /* 5. Calculate Efuse utilization. */ - rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&eFuse_Addr); - -exit: - kfree(efuseTbl); - - if (eFuseWord) - rtw_mfree2d((void *)eFuseWord, EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); -} - static void ReadEFuseByIC(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest) { if (!bPseudoTest) { @@ -957,7 +822,6 @@ static void ReadEFuseByIC(struct adapter *Adapter, u8 efuseType, u16 _offset, u1 goto exit; } } - Hal_EfuseReadEFuse88E(Adapter, _offset, _size_byte, pbuf, bPseudoTest); exit: return; -- cgit From 93282a668ae6998837c6c8fce876564067a88733 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:23 +0530 Subject: staging: rtl8188eu: Rename function ReadEFuseByIC() to efuse_ReadEFuse() Rename ReadEFuseByIC() to efuse_ReadEFuse() and remove original efuse_ReadEFuse() function, so that driver can call ReadEFuseByIC() directly without going through efuse_ReadEFuse(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 21 --------------------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 3 +-- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 ++ 4 files changed, 3 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index f2d374d5a764..ac77184bfb9b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -144,27 +144,6 @@ ReadEFuseByte( *pbuf = (u8)(value32 & 0xff); } -/* Description: - * 1. Execute E-Fuse read byte operation according as map offset and - * save to E-Fuse table. - * 2. Referred from SD1 Richard. - * Assumption: - * 1. Boot from E-Fuse and successfully auto-load. - * 2. PASSIVE_LEVEL (USB interface) - * Created by Roger, 2008.10.21. - * 2008/12/12 MH - * 1. Reorganize code flow and reserve bytes. and add description. - * 2. Add efuse utilization collect. - * 2008/12/22 MH - * Read Efuse must check if we write section 1 data again!!! - * Sec1 write addr must be after sec5. - */ - -static void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool pseudo) -{ - Adapter->HalFunc.ReadEFuse(Adapter, efuseType, _offset, _size_byte, pbuf, pseudo); -} - /*----------------------------------------------------------------------------- * Function: EFUSE_Read1Byte * diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index abf66e75784c..75151028e534 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -807,7 +807,7 @@ void Efuse_PowerSwitch( } } -static void ReadEFuseByIC(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest) +void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest) { if (!bPseudoTest) { int ret = _FAIL; @@ -1542,7 +1542,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->write_rfreg = &rtl8188e_PHY_SetRFReg; /* Efuse related function */ - pHalFunc->ReadEFuse = &ReadEFuseByIC; pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index a7cad6ff07cf..5e64df7416ff 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -233,8 +233,6 @@ struct hal_ops { enum rf_radio_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data); - void (*ReadEFuse)(struct adapter *padapter, u8 efuseType, u16 _offset, - u16 _size_byte, u8 *pbuf, bool bPseudoTest); int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 7d1f28f83c2a..63a6c6ee3245 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -135,6 +135,8 @@ void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data, bool test); u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data, bool test); +void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, + u16 _size_byte, u8 *pbuf, bool bPseudoTest); void Efuse_PowerSwitch(struct adapter *adapt, u8 bWrite, u8 PwrState); int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data, bool test); int Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, -- cgit From 5896c378e22aa34c8d480ca54a6b9acf11719511 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:24 +0530 Subject: staging: rtl8188eu: Rename hal_EfusePgPacketRead_8188e() to Efuse_PgPacketRead() Rename hal_EfusePgPacketRead_8188e() to Efuse_PgPacketRead() and remove original EFUSE_GetEfuseDefinition() function, so that driver can call hal_EfusePgPacketRead_8188e() directly without going through Efuse_PgPacketRead(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 9 --------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 3 +-- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- 3 files changed, 1 insertion(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index ac77184bfb9b..e15784e4c66a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -264,15 +264,6 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) return result; } -int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool pseudo) -{ - int ret = 0; - - ret = pAdapter->HalFunc.Efuse_PgPacketRead(pAdapter, offset, data, pseudo); - - return ret; -} - int Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool pseudo) { int ret; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 75151028e534..24d3993e63c6 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -989,7 +989,7 @@ u16 Efuse_GetCurrentSize(struct adapter *pAdapter, bool bPseudoTest) return efuse_addr; } -static int hal_EfusePgPacketRead_8188e(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) +int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) { u8 ReadState = PG_STATE_HEADER; int bContinual = true; @@ -1542,7 +1542,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->write_rfreg = &rtl8188e_PHY_SetRFReg; /* Efuse related function */ - pHalFunc->Efuse_PgPacketRead = &hal_EfusePgPacketRead_8188e; pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; pHalFunc->sreset_init_value = &sreset_init_value; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 5e64df7416ff..9597c35c35a2 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -233,8 +233,6 @@ struct hal_ops { enum rf_radio_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data); - int (*Efuse_PgPacketRead)(struct adapter *adapter, u8 offset, - u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, u8 word_en, u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite_BT)(struct adapter *padapter, u8 offset, -- cgit From a602fd073f271c875e13e60aa8c86f86629eb820 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:25 +0530 Subject: staging: rtl8188eu: Rename hal_EfusePgPacketWrite_8188e() Rename hal_EfusePgPacketWrite_8188e() to Efuse_PgPacketWrite() and remove original Efuse_PgPacketWrite() function, so that driver can call hal_EfusePgPacketWrite_8188e() directly without going through Efuse_PgPacketWrite(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 10 ---------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 +---- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 4 files changed, 2 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index e15784e4c66a..de211a7ac5c9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -264,16 +264,6 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) return result; } -int Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool pseudo) -{ - int ret; - - ret = pAdapter->HalFunc.Efuse_PgPacketWrite(pAdapter, offset, word_en, data, pseudo); - - return ret; -} - - static int Efuse_PgPacketWrite_BT(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool pseudo) { int ret; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 24d3993e63c6..1e9ece2def56 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1396,7 +1396,7 @@ static void hal_EfuseConstructPGPkt(u8 offset, u8 word_en, u8 *pData, struct pgp pTargetPkt->word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); } -static bool hal_EfusePgPacketWrite_8188e(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData, bool bPseudoTest) +bool Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData, bool bPseudoTest) { struct pgpkt targetPkt; u16 startAddr = 0; @@ -1541,9 +1541,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->read_rfreg = &rtl8188e_PHY_QueryRFReg; pHalFunc->write_rfreg = &rtl8188e_PHY_SetRFReg; - /* Efuse related function */ - pHalFunc->Efuse_PgPacketWrite = &hal_EfusePgPacketWrite_8188e; - pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 9597c35c35a2..cacf9df545ba 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -233,8 +233,6 @@ struct hal_ops { enum rf_radio_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data); - bool (*Efuse_PgPacketWrite)(struct adapter *padapter, u8 offset, - u8 word_en, u8 *data, bool bPseudoTest); bool (*Efuse_PgPacketWrite_BT)(struct adapter *padapter, u8 offset, u8 word_en, u8 *data, bool test); diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 63a6c6ee3245..dba8296b3724 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -139,7 +139,7 @@ void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); void Efuse_PowerSwitch(struct adapter *adapt, u8 bWrite, u8 PwrState); int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data, bool test); -int Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, +bool Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, bool test); void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata); u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, -- cgit From 98e0ef38d4c67508a68bd186e268c775ed414af8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:26 +0530 Subject: staging: rtl8188eu: Remove function Efuse_Write1ByteToFakeContent() Efuse_Write1ByteToFakeContent() is used only in efuse_OneByteWrite(), when pseudo is true, but pseudo is always false. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index de211a7ac5c9..f6205c9cb6ee 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -61,21 +61,6 @@ static bool Efuse_Read1ByteFromFakeContent( return true; } -static bool -Efuse_Write1ByteToFakeContent( - struct adapter *pAdapter, - u16 Offset, - u8 Value) -{ - if (Offset >= EFUSE_MAX_HW_SIZE) - return false; - if (fakeEfuseBank == 0) - fakeEfuseContent[Offset] = Value; - else - fakeBTEfuseContent[fakeEfuseBank-1][Offset] = Value; - return true; -} - /* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ u8 Efuse_CalculateWordCnts(u8 word_en) @@ -238,11 +223,6 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) u8 tmpidx = 0; u8 result; - if (pseudo) { - result = Efuse_Write1ByteToFakeContent(pAdapter, addr, data); - return result; - } - /* -----------------e-fuse reg ctrl --------------------------------- */ /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); -- cgit From 1898cb9a007c133a58912684892e4905f7157d6d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:27 +0530 Subject: staging: rtl8188eu: Remove function Efuse_Read1ByteFromFakeContent() Efuse_Read1ByteFromFakeContent() is never called because pseudo is always false in Efuse_CalculateWordCnts() and efuse_OneByteRead(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index f6205c9cb6ee..937ebcef233d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -47,20 +47,6 @@ u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN] = {0}; #define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ /* */ -static bool Efuse_Read1ByteFromFakeContent( - struct adapter *pAdapter, - u16 Offset, - u8 *Value) -{ - if (Offset >= EFUSE_MAX_HW_SIZE) - return false; - if (fakeEfuseBank == 0) - *Value = fakeEfuseContent[Offset]; - else - *Value = fakeBTEfuseContent[fakeEfuseBank-1][Offset]; - return true; -} - /* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ u8 Efuse_CalculateWordCnts(u8 word_en) @@ -97,11 +83,6 @@ ReadEFuseByte( u8 readbyte; u16 retry; - if (pseudo) { - Efuse_Read1ByteFromFakeContent(Adapter, _offset, pbuf); - return; - } - /* Write Address */ usb_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff)); readbyte = usb_read8(Adapter, EFUSE_CTRL+2); @@ -193,10 +174,6 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data, bool pseudo) u8 tmpidx = 0; u8 result; - if (pseudo) { - result = Efuse_Read1ByteFromFakeContent(pAdapter, addr, data); - return result; - } /* -----------------e-fuse reg ctrl --------------------------------- */ /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr & 0xff)); -- cgit From 052deb5d1f6b706b8c50407656cda8a32cd7b784 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:28 +0530 Subject: staging: rtl8188eu: Remove function rtw_BT_efuse_map_write() rtl8188eu is not a wifi/bluetooth combo device, so remove bluetooth related code. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 97 -------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 10 --- 3 files changed, 109 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 937ebcef233d..93215463a961 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -463,103 +463,6 @@ exit: return ret; } -/* */ -u8 rtw_BT_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) -{ - u8 offset, word_en; - u8 *map; - u8 newdata[PGPKT_DATA_SIZE + 1]; - s32 i, idx; - u8 ret = _SUCCESS; - u16 mapLen = 0; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); - - if ((addr + cnts) > mapLen) - return _FAIL; - - map = rtw_zmalloc(mapLen); - if (map == NULL) - return _FAIL; - - ret = rtw_BT_efuse_map_read(padapter, 0, mapLen, map); - if (ret == _FAIL) - goto exit; - - Efuse_PowerSwitch(padapter, true, true); - - offset = (addr >> 3); - word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); - i = addr & 0x7; /* index of one package */ - idx = 0; /* data index */ - - if (i & 0x1) { - /* odd start */ - if (data[idx] != map[addr+idx]) { - word_en &= ~BIT(i >> 1); - newdata[i-1] = map[addr+idx-1]; - newdata[i] = data[idx]; - } - i++; - idx++; - } - do { - for (; i < PGPKT_DATA_SIZE; i += 2) { - if (cnts == idx) - break; - if ((cnts - idx) == 1) { - if (data[idx] != map[addr+idx]) { - word_en &= ~BIT(i >> 1); - newdata[i] = data[idx]; - newdata[i+1] = map[addr+idx+1]; - } - idx++; - break; - } else { - if ((data[idx] != map[addr+idx]) || - (data[idx+1] != map[addr+idx+1])) { - word_en &= ~BIT(i >> 1); - newdata[i] = data[idx]; - newdata[i+1] = data[idx + 1]; - } - idx += 2; - } - if (idx == cnts) - break; - } - - if (word_en != 0xF) { - DBG_88E("%s: offset=%#X\n", __func__, offset); - DBG_88E("%s: word_en=%#X\n", __func__, word_en); - DBG_88E("%s: data=", __func__); - for (i = 0; i < PGPKT_DATA_SIZE; i++) - DBG_88E("0x%02X ", newdata[i]); - DBG_88E("\n"); - - ret = Efuse_PgPacketWrite_BT(padapter, offset, word_en, newdata, false); - if (ret == _FAIL) - break; - } - - if (idx == cnts) - break; - - offset++; - i = 0; - word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE); - } while (1); - - Efuse_PowerSwitch(padapter, true, false); - -exit: - - kfree(map); - - return ret; -} - /*----------------------------------------------------------------------------- * Function: efuse_ShadowRead1Byte * efuse_ShadowRead2Byte diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index dba8296b3724..7df04416569b 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -125,8 +125,6 @@ u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_BT_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -u8 rtw_BT_efuse_map_write(struct adapter *adapter, u16 addr, - u16 cnts, u8 *data); u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index c43322d281d0..79a1ac44bdee 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -6253,11 +6253,6 @@ static int rtw_mp_efuse_set(struct net_device *dev, goto exit; } - if (rtw_BT_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) { - DBG_88E("%s: rtw_BT_efuse_map_write error!!\n", __func__); - err = -EFAULT; - goto exit; - } } else if (strcmp(tmp[0], "btwfake") == 0) { if ((tmp[1] == NULL) || (tmp[2] == NULL)) { err = -EINVAL; @@ -6307,11 +6302,6 @@ static int rtw_mp_efuse_set(struct net_device *dev, goto exit; } - if (rtw_BT_efuse_map_write(padapter, 0x00, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeBTEfuseModifiedMap) == _FAIL) { - DBG_88E("%s: rtw_BT_efuse_map_write error!\n", __func__); - err = -EFAULT; - goto exit; - } } else if (strcmp(tmp[0], "wlfk2map") == 0) { EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if (max_available_size < 1) { -- cgit From 2accfc761d4198143990f7144e3cb562ba301578 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:29 +0530 Subject: staging: rtl8188eu: Remove unused function Efuse_PgPacketWrite_BT() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 9 --------- drivers/staging/rtl8188eu/include/hal_intf.h | 3 --- 2 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 93215463a961..f2ca6d44a65b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -221,15 +221,6 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) return result; } -static int Efuse_PgPacketWrite_BT(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *data, bool pseudo) -{ - int ret; - - ret = pAdapter->HalFunc.Efuse_PgPacketWrite_BT(pAdapter, offset, word_en, data, pseudo); - - return ret; -} - /*----------------------------------------------------------------------------- * Function: efuse_WordEnableDataRead * diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index cacf9df545ba..a86b3f848396 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -233,9 +233,6 @@ struct hal_ops { enum rf_radio_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data); - bool (*Efuse_PgPacketWrite_BT)(struct adapter *padapter, u8 offset, - u8 word_en, u8 *data, bool test); - void (*sreset_init_value)(struct adapter *padapter); u8 (*sreset_get_wifi_status)(struct adapter *padapter); -- cgit From 800072c67eac0967f1cf430ffa2aa6baf73eebae Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:30 +0530 Subject: staging: rtl8188eu: Remove function rtw_BT_efuse_map_read() rtl8188eu is not a wifi/bluetooth combo device, so remove bluetooth related code. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 17 ------ drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 78 -------------------------- 3 files changed, 97 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index f2ca6d44a65b..7e126cebc276 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -345,23 +345,6 @@ u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) return _SUCCESS; } -u8 rtw_BT_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) -{ - u16 mapLen = 0; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); - - if ((addr + cnts) > mapLen) - return _FAIL; - - Efuse_PowerSwitch(padapter, false, true); - - efuse_ReadEFuse(padapter, EFUSE_BT, addr, cnts, data, false); - - Efuse_PowerSwitch(padapter, false, false); - - return _SUCCESS; -} /* */ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 7df04416569b..41d6cf2356cd 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -123,8 +123,6 @@ u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, u16 cnts, u8 *data); u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -u8 rtw_BT_efuse_map_read(struct adapter *adapter, u16 addr, - u16 cnts, u8 *data); u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 79a1ac44bdee..56e24fa3a89e 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -5883,77 +5883,6 @@ static int rtw_mp_efuse_get(struct net_device *dev, efuse_GetCurrentSize(padapter, &raw_cursize); raw_maxsize = efuse_GetMaxSize(padapter); sprintf(extra, "[available raw size] = %d bytes", raw_maxsize-raw_cursize); - } else if (strcmp(tmp[0], "btfmap") == 0) { - mapLen = EFUSE_BT_MAX_MAP_LEN; - if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL) { - DBG_88E("%s: rtw_BT_efuse_map_read Fail!!\n", __func__); - err = -EFAULT; - goto exit; - } - - sprintf(extra, "\n"); - for (i = 0; i < 512; i += 16) { - /* set 512 because the iwpriv's extra size have limit 0x7FF */ - sprintf(extra, "%s0x%03x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "btbmap") == 0) { - mapLen = EFUSE_BT_MAX_MAP_LEN; - if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL) { - DBG_88E("%s: rtw_BT_efuse_map_read Fail!!\n", __func__); - err = -EFAULT; - goto exit; - } - - sprintf(extra, "\n"); - for (i = 512; i < 1024; i += 16) { - sprintf(extra, "%s0x%03x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "btrmap") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - /* rmap addr cnts */ - addr = simple_strtoul(tmp[1], &ptmp, 16); - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - - cnts = simple_strtoul(tmp[2], &ptmp, 10); - if (cnts == 0) { - DBG_88E("%s: btrmap Fail!! cnts error!\n", __func__); - err = -EINVAL; - goto exit; - } - DBG_88E("%s: cnts =%d\n", __func__, cnts); - - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr + cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - if (rtw_BT_efuse_map_read(padapter, addr, cnts, data) == _FAIL) { - DBG_88E("%s: rtw_BT_efuse_map_read error!!\n", __func__); - err = -EFAULT; - goto exit; - } - - *extra = 0; - for (i = 0; i < cnts; i++) - sprintf(extra, "%s 0x%02X ", extra, data[i]); } else if (strcmp(tmp[0], "btffake") == 0) { sprintf(extra, "\n"); for (i = 0; i < 512; i += 16) { @@ -6279,13 +6208,6 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) pEfuseHal->fakeBTEfuseModifiedMap[addr+jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); - } else if (strcmp(tmp[0], "btdumpfake") == 0) { - if (rtw_BT_efuse_map_read(padapter, 0, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeBTEfuseModifiedMap) == _SUCCESS) { - DBG_88E("%s: BT read all map success\n", __func__); - } else { - DBG_88E("%s: BT read all map Fail!\n", __func__); - err = -EFAULT; - } } else if (strcmp(tmp[0], "wldumpfake") == 0) { if (rtw_efuse_map_read(padapter, 0, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeEfuseModifiedMap) == _SUCCESS) { DBG_88E("%s: BT read all map success\n", __func__); -- cgit From bd46e7f0c5cd8631d0832be3abd284e2bd46f170 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:31 +0530 Subject: staging: rtl8188eu: Remove unused function ReadEFuseByte() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 47 --------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 1 - 2 files changed, 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 7e126cebc276..16377f61856b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -63,53 +63,6 @@ Efuse_CalculateWordCnts(u8 word_en) return word_cnts; } -/* - * Description: - * Execute E-Fuse read byte operation. - * Referred from SD1 Richard. - * Assumption: - * 1. Boot from E-Fuse and successfully auto-load. - * 2. PASSIVE_LEVEL (USB interface) - * Created by Roger, 2008.10.21. - */ -void -ReadEFuseByte( - struct adapter *Adapter, - u16 _offset, - u8 *pbuf, - bool pseudo) -{ - u32 value32; - u8 readbyte; - u16 retry; - - /* Write Address */ - usb_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff)); - readbyte = usb_read8(Adapter, EFUSE_CTRL+2); - usb_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc)); - - /* Write bit 32 0 */ - readbyte = usb_read8(Adapter, EFUSE_CTRL+3); - usb_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f)); - - /* Check bit 32 read-ready */ - retry = 0; - value32 = usb_read32(Adapter, EFUSE_CTRL); - while (!(((value32 >> 24) & 0xff) & 0x80) && (retry < 10000)) { - value32 = usb_read32(Adapter, EFUSE_CTRL); - retry++; - } - - /* 20100205 Joseph: Add delay suggested by SD1 Victor. */ - /* This fix the problem that Efuse read error in high temperature condition. */ - /* Designer says that there shall be some delay after ready bit is set, or the */ - /* result will always stay on last data we read. */ - udelay(50); - value32 = usb_read32(Adapter, EFUSE_CTRL); - - *pbuf = (u8)(value32 & 0xff); -} - /*----------------------------------------------------------------------------- * Function: EFUSE_Read1Byte * diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 41d6cf2356cd..d8be20dfb284 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -125,7 +125,6 @@ u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); -void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf, bool test); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, void *out); u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data, bool test); -- cgit From 6ebd7cefc3c8d49a9ead3bde73f527641700415f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:32 +0530 Subject: staging: rtl8188eu: Remove unused function EFUSE_Read1Byte() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 59 --------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 1 - 2 files changed, 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 16377f61856b..dc82973e2597 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -63,65 +63,6 @@ Efuse_CalculateWordCnts(u8 word_en) return word_cnts; } -/*----------------------------------------------------------------------------- - * Function: EFUSE_Read1Byte - * - * Overview: Copy from WMAC fot EFUSE read 1 byte. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 09/23/2008 MHC Copy from WMAC. - * - *---------------------------------------------------------------------------*/ -u8 EFUSE_Read1Byte(struct adapter *Adapter, u16 Address) -{ - u8 data; - u8 Bytetemp = {0x00}; - u8 temp = {0x00}; - u32 k = 0; - u16 contentLen = 0; - - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI , TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&contentLen); - - if (Address < contentLen) { /* E-fuse 512Byte */ - /* Write E-fuse Register address bit0~7 */ - temp = Address & 0xFF; - usb_write8(Adapter, EFUSE_CTRL+1, temp); - Bytetemp = usb_read8(Adapter, EFUSE_CTRL+2); - /* Write E-fuse Register address bit8~9 */ - temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC); - usb_write8(Adapter, EFUSE_CTRL+2, temp); - - /* Write 0x30[31]= 0 */ - Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); - temp = Bytetemp & 0x7F; - usb_write8(Adapter, EFUSE_CTRL+3, temp); - - /* Wait Write-ready (0x30[31]= 1) */ - Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); - while (!(Bytetemp & 0x80)) { - Bytetemp = usb_read8(Adapter, EFUSE_CTRL+3); - k++; - if (k == 1000) { - k = 0; - break; - } - } - data = usb_read8(Adapter, EFUSE_CTRL); - return data; - } else { - return 0xFF; - } - -} /* EFUSE_Read1Byte */ - -/* 11/16/2008 MH Read one byte from real Efuse. */ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data, bool pseudo) { u8 tmpidx = 0; diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index d8be20dfb284..0849f85ab265 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -140,7 +140,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata); u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, u8 word_en, u8 *data, bool test); -u8 EFUSE_Read1Byte(struct adapter *adapter, u16 address); void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype, bool test); void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val); -- cgit From 7881055601dd8cbdac9803ddb6c9a4b51d1cebf4 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:33 +0530 Subject: staging: rtl8188eu: efuse_OneByteRead():Remove unused parameter bool test Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 4 +-- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 44 +++++++++++------------ drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index dc82973e2597..6ba8cbfad4bd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -63,7 +63,7 @@ Efuse_CalculateWordCnts(u8 word_en) return word_cnts; } -u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data, bool pseudo) +u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data) { u8 tmpidx = 0; u8 result; @@ -154,7 +154,7 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) static u8 efuse_read8(struct adapter *padapter, u16 address, u8 *value) { - return efuse_OneByteRead(padapter, address, value, false); + return efuse_OneByteRead(padapter, address, value); } static u8 efuse_write8(struct adapter *padapter, u16 address, u8 *value) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 1e9ece2def56..8d769465b181 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -904,8 +904,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e efuse_OneByteWrite(pAdapter, start_addr++, data[0], bPseudoTest); efuse_OneByteWrite(pAdapter, start_addr++, data[1], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[0], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[1], bPseudoTest); + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[0]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[1]); if ((data[0] != tmpdata[0]) || (data[1] != tmpdata[1])) badworden &= (~BIT0); } @@ -914,8 +914,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e efuse_OneByteWrite(pAdapter, start_addr++, data[2], bPseudoTest); efuse_OneByteWrite(pAdapter, start_addr++, data[3], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr , &tmpdata[2], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[3], bPseudoTest); + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[2]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[3]); if ((data[2] != tmpdata[2]) || (data[3] != tmpdata[3])) badworden &= (~BIT1); } @@ -924,8 +924,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e efuse_OneByteWrite(pAdapter, start_addr++, data[4], bPseudoTest); efuse_OneByteWrite(pAdapter, start_addr++, data[5], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[4], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[5], bPseudoTest); + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[4]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[5]); if ((data[4] != tmpdata[4]) || (data[5] != tmpdata[5])) badworden &= (~BIT2); } @@ -934,8 +934,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e efuse_OneByteWrite(pAdapter, start_addr++, data[6], bPseudoTest); efuse_OneByteWrite(pAdapter, start_addr++, data[7], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[6], bPseudoTest); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[7], bPseudoTest); + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[6]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[7]); if ((data[6] != tmpdata[6]) || (data[7] != tmpdata[7])) badworden &= (~BIT3); } @@ -955,13 +955,13 @@ u16 Efuse_GetCurrentSize(struct adapter *pAdapter, bool bPseudoTest) rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); while (bContinual && - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data, bPseudoTest) && + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && AVAILABLE_EFUSE_ADDR(efuse_addr)) { if (efuse_data != 0xFF) { if ((efuse_data&0x1F) == 0x0F) { /* extended header */ hoffset = efuse_data; efuse_addr++; - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); if ((efuse_data & 0x0F) == 0x0F) { efuse_addr++; continue; @@ -1018,11 +1018,11 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseu while (bContinual && AVAILABLE_EFUSE_ADDR(efuse_addr)) { /* Header Read ------------- */ if (ReadState & PG_STATE_HEADER) { - if (efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data, bPseudoTest) && (efuse_data != 0xFF)) { + if (efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && (efuse_data != 0xFF)) { if (EXT_HEADER(efuse_data)) { tmp_header = efuse_data; efuse_addr++; - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); if (!ALL_WORDS_DISABLED(efuse_data)) { hoffset = ((tmp_header & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); hworden = efuse_data & 0x0F; @@ -1040,7 +1040,7 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseu if (hoffset == offset) { for (tmpidx = 0; tmpidx < word_cnts*2; tmpidx++) { - if (efuse_OneByteRead(pAdapter, efuse_addr+1+tmpidx, &efuse_data, bPseudoTest)) { + if (efuse_OneByteRead(pAdapter, efuse_addr+1+tmpidx, &efuse_data)) { tmpdata[tmpidx] = efuse_data; if (efuse_data != 0xff) bDataEmpty = false; @@ -1116,14 +1116,14 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse while (efuse_addr < efuse_max_available_len) { pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } /* to write ext_header */ @@ -1133,14 +1133,14 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse pg_header = ((pTargetPkt->offset & 0x78) << 1) | pTargetPkt->word_en; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } if ((tmp_header & 0x0F) == 0x0F) { /* word_en PG fail */ @@ -1181,13 +1181,13 @@ static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuse pg_header = ((pTargetPkt->offset << 4) & 0xf0) | pTargetPkt->word_en; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } if (pg_header == tmp_header) { @@ -1277,7 +1277,7 @@ static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, u8 i, efuse_data; for (i = 0; i < (word_cnts*2); i++) { - if (efuse_OneByteRead(pAdapter, (startAddr+i), &efuse_data, bPseudoTest) && (efuse_data != 0xFF)) + if (efuse_OneByteRead(pAdapter, (startAddr+i), &efuse_data) && (efuse_data != 0xFF)) bRet = true; } return bRet; @@ -1314,11 +1314,11 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u break; } - if (efuse_OneByteRead(pAdapter, startAddr, &efuse_data, bPseudoTest) && (efuse_data != 0xFF)) { + if (efuse_OneByteRead(pAdapter, startAddr, &efuse_data) && (efuse_data != 0xFF)) { if (EXT_HEADER(efuse_data)) { cur_header = efuse_data; startAddr++; - efuse_OneByteRead(pAdapter, startAddr, &efuse_data, bPseudoTest); + efuse_OneByteRead(pAdapter, startAddr, &efuse_data); if (ALL_WORDS_DISABLED(efuse_data)) { bRet = false; break; diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 0849f85ab265..f9bc50da9983 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -127,7 +127,7 @@ u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); u8 Efuse_CalculateWordCnts(u8 word_en); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, void *out); -u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data, bool test); +u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data); u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data, bool test); void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, -- cgit From 20f3b6c87c868ae9daf857910690626c603e7368 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:34 +0530 Subject: staging: rtl8188eu: efuse_OneByteWrite(): Remove unused parameter bool test Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 4 ++-- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 28 +++++++++++------------ drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 6ba8cbfad4bd..951988855815 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -89,7 +89,7 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data) } /* 11/16/2008 MH Write one byte to reald Efuse. */ -u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data, bool pseudo) +u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data) { u8 tmpidx = 0; u8 result; @@ -159,7 +159,7 @@ static u8 efuse_read8(struct adapter *padapter, u16 address, u8 *value) static u8 efuse_write8(struct adapter *padapter, u16 address, u8 *value) { - return efuse_OneByteWrite(padapter, address, *value, false); + return efuse_OneByteWrite(padapter, address, *value); } /* diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 8d769465b181..ff5dfff4ed39 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -901,8 +901,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e if (!(word_en&BIT0)) { tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[0], bPseudoTest); - efuse_OneByteWrite(pAdapter, start_addr++, data[1], bPseudoTest); + efuse_OneByteWrite(pAdapter, start_addr++, data[0]); + efuse_OneByteWrite(pAdapter, start_addr++, data[1]); efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[0]); efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[1]); @@ -911,8 +911,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e } if (!(word_en&BIT1)) { tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[2], bPseudoTest); - efuse_OneByteWrite(pAdapter, start_addr++, data[3], bPseudoTest); + efuse_OneByteWrite(pAdapter, start_addr++, data[2]); + efuse_OneByteWrite(pAdapter, start_addr++, data[3]); efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[2]); efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[3]); @@ -921,8 +921,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e } if (!(word_en&BIT2)) { tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[4], bPseudoTest); - efuse_OneByteWrite(pAdapter, start_addr++, data[5], bPseudoTest); + efuse_OneByteWrite(pAdapter, start_addr++, data[4]); + efuse_OneByteWrite(pAdapter, start_addr++, data[5]); efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[4]); efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[5]); @@ -931,8 +931,8 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e } if (!(word_en&BIT3)) { tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[6], bPseudoTest); - efuse_OneByteWrite(pAdapter, start_addr++, data[7], bPseudoTest); + efuse_OneByteWrite(pAdapter, start_addr++, data[6]); + efuse_OneByteWrite(pAdapter, start_addr++, data[7]); efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[6]); efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[7]); @@ -1115,14 +1115,14 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse while (efuse_addr < efuse_max_available_len) { pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } @@ -1132,14 +1132,14 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse pg_header_temp = pg_header; pg_header = ((pTargetPkt->offset & 0x78) << 1) | pTargetPkt->word_en; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } @@ -1180,13 +1180,13 @@ static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuse pg_header = ((pTargetPkt->offset << 4) & 0xf0) | pTargetPkt->word_en; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); while (tmp_header == 0xFF) { if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) return false; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest); + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); } diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index f9bc50da9983..cd96366c11ff 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -128,7 +128,7 @@ u8 Efuse_CalculateWordCnts(u8 word_en); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, void *out); u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data); -u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data, bool test); +u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data); void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest); -- cgit From 142547b3fc776a111830efffcc7d7b2e8bd98cf7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:35 +0530 Subject: staging: rtl8188eu: efuse_ReadEFuse(): Remove parameter bool bPseudoTest bPseudoTest is always false. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 4 ++-- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 20 ++++++-------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 3 files changed, 9 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 951988855815..ecfd311175f4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -232,7 +232,7 @@ u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) Efuse_PowerSwitch(padapter, false, true); - efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data, false); + efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data); Efuse_PowerSwitch(padapter, false, false); @@ -415,7 +415,7 @@ static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse, EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); - efuse_ReadEFuse(pAdapter, efuseType, 0, mapLen, Efuse, pseudo); + efuse_ReadEFuse(pAdapter, efuseType, 0, mapLen, Efuse); Efuse_PowerSwitch(pAdapter, false, false); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index ff5dfff4ed39..7ef23130f11d 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -807,23 +807,15 @@ void Efuse_PowerSwitch( } } -void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, bool bPseudoTest) +void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf) { - if (!bPseudoTest) { - int ret = _FAIL; - if (rtw_IOL_applied(Adapter)) { - rtw_hal_power_on(Adapter); - iol_mode_enable(Adapter, 1); - ret = iol_read_efuse(Adapter, 0, _offset, _size_byte, pbuf); - iol_mode_enable(Adapter, 0); - - if (_SUCCESS == ret) - goto exit; - } + if (rtw_IOL_applied(Adapter)) { + rtw_hal_power_on(Adapter); + iol_mode_enable(Adapter, 1); + iol_read_efuse(Adapter, 0, _offset, _size_byte, pbuf); + iol_mode_enable(Adapter, 0); } - -exit: return; } diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index cd96366c11ff..fc873887c174 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -131,7 +131,7 @@ u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data); u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data); void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, - u16 _size_byte, u8 *pbuf, bool bPseudoTest); + u16 _size_byte, u8 *pbuf); void Efuse_PowerSwitch(struct adapter *adapt, u8 bWrite, u8 PwrState); int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data, bool test); bool Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, -- cgit From c4f6cf0e7769bf274d0fad338972418530e5b3a2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:36 +0530 Subject: staging: rtl8188eu: Efuse_GetCurrentSize(): Remove parameter bool test test is always false. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 16 +++++----------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index ecfd311175f4..dfbb774c2a6d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -215,7 +215,7 @@ u16 efuse_GetMaxSize(struct adapter *padapter) u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size) { Efuse_PowerSwitch(padapter, false, true); - *size = Efuse_GetCurrentSize(padapter, false); + *size = Efuse_GetCurrentSize(padapter); Efuse_PowerSwitch(padapter, false, false); return _SUCCESS; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 7ef23130f11d..61bff1a806b8 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -934,17 +934,14 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e return badworden; } -u16 Efuse_GetCurrentSize(struct adapter *pAdapter, bool bPseudoTest) +u16 Efuse_GetCurrentSize(struct adapter *pAdapter) { int bContinual = true; u16 efuse_addr = 0; u8 hoffset = 0, hworden = 0; u8 efuse_data, word_cnts = 0; - if (bPseudoTest) - efuse_addr = (u16)(fakeEfuseUsedBytes); - else - rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); while (bContinual && efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && @@ -973,10 +970,7 @@ u16 Efuse_GetCurrentSize(struct adapter *pAdapter, bool bPseudoTest) } } - if (bPseudoTest) - fakeEfuseUsedBytes = efuse_addr; - else - rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); + rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); return efuse_addr; } @@ -1085,7 +1079,7 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st if (!PgWriteSuccess) return false; else - efuse_addr = Efuse_GetCurrentSize(pAdapter, bPseudoTest); + efuse_addr = Efuse_GetCurrentSize(pAdapter); } else { efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; } @@ -1374,7 +1368,7 @@ hal_EfusePgCheckAvailableAddr( /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len); - if (Efuse_GetCurrentSize(pAdapter, bPseudoTest) >= efuse_max_available_len) + if (Efuse_GetCurrentSize(pAdapter) >= efuse_max_available_len) return false; return true; } diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index fc873887c174..23a0168d79db 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -123,7 +123,7 @@ u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, u16 cnts, u8 *data); u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -u16 Efuse_GetCurrentSize(struct adapter *adapter, bool test); +u16 Efuse_GetCurrentSize(struct adapter *adapter); u8 Efuse_CalculateWordCnts(u8 word_en); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, void *out); -- cgit From 0d1c84d6cb17938159a1e95f84f4ec7c2a20a3c9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:37 +0530 Subject: staging: rtl8188eu: Efuse_ReadAllMap(): Remove unused parameter bool test Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index dfbb774c2a6d..c7ea214aca8c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -407,7 +407,7 @@ efuse_ShadowRead4Byte( * 11/11/2008 MHC Create Version 0. * *---------------------------------------------------------------------------*/ -static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse, bool pseudo) +static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse) { u16 mapLen = 0; @@ -449,7 +449,7 @@ void EFUSE_ShadowMapUpdate( if (pEEPROM->bautoload_fail_flag) _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen); else - Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data, pseudo); + Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data); } /* EFUSE_ShadowMapUpdate */ /*----------------------------------------------------------------------------- -- cgit From b0d255c7beba8bf8cf5617f4b79d13f6864ce6f1 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:38 +0530 Subject: staging: rtl8188eu: EFUSE_ShadowMapUpdate():Remove unused parameter bool test Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 3 +-- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 4 ++-- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index c7ea214aca8c..bfa65880bcb6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -438,8 +438,7 @@ static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse) *---------------------------------------------------------------------------*/ void EFUSE_ShadowMapUpdate( struct adapter *pAdapter, - u8 efuseType, - bool pseudo) + u8 efuseType) { struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); u16 mapLen = 0; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 61bff1a806b8..b895d369cd66 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1629,13 +1629,13 @@ Hal_InitPGData88E(struct adapter *padapter) if (!pEEPROM->bautoload_fail_flag) { /* autoload OK. */ if (!is_boot_from_eeprom(padapter)) { /* Read EFUSE real map to shadow. */ - EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, false); + EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI); } } else {/* autoload fail */ RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("AutoLoad Fail reported from CR9346!!\n")); /* update to default value 0xFF */ if (!is_boot_from_eeprom(padapter)) - EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI, false); + EFUSE_ShadowMapUpdate(padapter, EFUSE_WIFI); } } diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 23a0168d79db..1de6fa7677e0 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -140,7 +140,7 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata); u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, u8 word_en, u8 *data, bool test); -void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype, bool test); +void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype); void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val); #endif -- cgit From b09d75490c2a52ad51936be2a48ddfd604ecf414 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:39 +0530 Subject: staging: rtl8188eu: Efuse_WordEnableDataWrite(): Remove unused parameter test Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 8 ++++---- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index b895d369cd66..1945099c0213 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -882,7 +882,7 @@ void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, v } } -u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data, bool bPseudoTest) +u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data) { u16 tmpaddr = 0; u16 start_addr = efuse_addr; @@ -1071,7 +1071,7 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata, bPseudoTest)) { /* check if data exist */ - badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata, bPseudoTest); + badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata); if (badworden != 0xf) { /* write fail */ PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata, bPseudoTest); @@ -1198,7 +1198,7 @@ static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u u32 PgWriteSuccess = 0; badworden = 0x0f; - badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pTargetPkt->word_en, pTargetPkt->data, bPseudoTest); + badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pTargetPkt->word_en, pTargetPkt->data); if (badworden == 0x0F) { /* write ok */ return true; @@ -1325,7 +1325,7 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u (!hal_EfuseCheckIfDatafollowed(pAdapter, curPkt.word_cnts, startAddr+1, bPseudoTest)) && wordEnMatched(pTargetPkt, &curPkt, &matched_wden)) { /* Here to write partial data */ - badworden = Efuse_WordEnableDataWrite(pAdapter, startAddr+1, matched_wden, pTargetPkt->data, bPseudoTest); + badworden = Efuse_WordEnableDataWrite(pAdapter, startAddr+1, matched_wden, pTargetPkt->data); if (badworden != 0x0F) { u32 PgWriteSuccess = 0; /* if write fail on some words, write these bad words again */ diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 1de6fa7677e0..f8737a4f0349 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -138,7 +138,7 @@ bool Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, bool test); void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata); u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, - u8 word_en, u8 *data, bool test); + u8 word_en, u8 *data); void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype); void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val); -- cgit From 3a2bb3b60e216a218b0898e040c11343abd8f6b2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:40 +0530 Subject: staging: rtl8188eu: hal_EfuseCheckIfDatafollowed(): Remove unused parameter Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 1945099c0213..ed9e42c92144 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1257,7 +1257,7 @@ static bool wordEnMatched(struct pgpkt *pTargetPkt, struct pgpkt *pCurPkt, return false; } -static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, u16 startAddr, bool bPseudoTest) +static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, u16 startAddr) { bool bRet = false; u8 i, efuse_data; -- cgit From e9ecc553d1a044f9483db2d219cebd0228e417e5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:41 +0530 Subject: staging: rtl8188eu: Remove bool bPseudoTest parameter from efuse functions In most of the functions bPseudoTest is not used and in remaining ones it's always false. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 4 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 68 ++++++++++------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 5 +- 4 files changed, 33 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index bfa65880bcb6..a0204ed5b20d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -306,7 +306,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) } if (word_en != 0xF) { - ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata, false); + ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata); DBG_88E("offset=%x\n", offset); DBG_88E("word_en=%x\n", word_en); diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c index e62cca8ded26..10c9b6d22742 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c @@ -1179,7 +1179,7 @@ int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv) ppgpkt->offset)); Efuse_PowerSwitch(Adapter, false, true); - if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, false) == true) + if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data) == true) *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; else status = NDIS_STATUS_FAILURE; @@ -1190,7 +1190,7 @@ int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv) ppgpkt->offset, ppgpkt->word_en)); Efuse_PowerSwitch(Adapter, true, true); - if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, false) == true) + if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data) == true) *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; else status = NDIS_STATUS_FAILURE; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index ed9e42c92144..0de4a915a488 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -733,22 +733,19 @@ hal_EfusePgPacketWrite2ByteHeader( struct adapter *pAdapter, u8 efuseType, u16 *pAddr, - struct pgpkt *pTargetPkt, - bool bPseudoTest); + struct pgpkt *pTargetPkt); static bool hal_EfusePgPacketWrite1ByteHeader( struct adapter *pAdapter, u8 efuseType, u16 *pAddr, - struct pgpkt *pTargetPkt, - bool bPseudoTest); + struct pgpkt *pTargetPkt); static bool hal_EfusePgPacketWriteData( struct adapter *pAdapter, u8 efuseType, u16 *pAddr, - struct pgpkt *pTargetPkt, - bool bPseudoTest); + struct pgpkt *pTargetPkt); /* * Function: Efuse_PowerSwitch @@ -975,7 +972,7 @@ u16 Efuse_GetCurrentSize(struct adapter *pAdapter) return efuse_addr; } -int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseudoTest) +int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data) { u8 ReadState = PG_STATE_HEADER; int bContinual = true; @@ -1061,7 +1058,7 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data, bool bPseu return true; } -static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, struct pgpkt *pFixPkt, u16 *pAddr, bool bPseudoTest) +static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, struct pgpkt *pFixPkt, u16 *pAddr) { u8 originaldata[8], badworden = 0; u16 efuse_addr = *pAddr; @@ -1069,12 +1066,12 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st _rtw_memset((void *)originaldata, 0xff, 8); - if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata, bPseudoTest)) { + if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata)) { /* check if data exist */ badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata); if (badworden != 0xf) { /* write fail */ - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata, bPseudoTest); + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata); if (!PgWriteSuccess) return false; @@ -1090,7 +1087,7 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st return true; } -static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt, bool bPseudoTest) +static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) { bool bRet = false; u16 efuse_addr = *pAddr, efuse_max_available_len = 0; @@ -1141,7 +1138,7 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse fixPkt.offset = ((pg_header_temp & 0xE0) >> 5) | ((tmp_header & 0xF0) >> 1); fixPkt.word_en = tmp_header & 0x0F; fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); - if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr, bPseudoTest)) + if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) return false; } else { bRet = true; @@ -1157,7 +1154,7 @@ static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuse return bRet; } -static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt, bool bPseudoTest) +static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) { bool bRet = false; u8 pg_header = 0, tmp_header = 0; @@ -1183,7 +1180,7 @@ static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuse fixPkt.offset = (tmp_header>>4) & 0x0F; fixPkt.word_en = tmp_header & 0x0F; fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); - if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr, bPseudoTest)) + if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) return false; } @@ -1191,7 +1188,7 @@ static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuse return bRet; } -static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt, bool bPseudoTest) +static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) { u16 efuse_addr = *pAddr; u8 badworden = 0; @@ -1204,7 +1201,7 @@ static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u return true; } else { /* reorganize other pg packet */ - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data, bPseudoTest); + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); if (!PgWriteSuccess) return false; else @@ -1217,15 +1214,14 @@ hal_EfusePgPacketWriteHeader( struct adapter *pAdapter, u8 efuseType, u16 *pAddr, - struct pgpkt *pTargetPkt, - bool bPseudoTest) + struct pgpkt *pTargetPkt) { bool bRet = false; if (pTargetPkt->offset >= EFUSE_MAX_SECTION_BASE) - bRet = hal_EfusePgPacketWrite2ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt, bPseudoTest); + bRet = hal_EfusePgPacketWrite2ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); else - bRet = hal_EfusePgPacketWrite1ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt, bPseudoTest); + bRet = hal_EfusePgPacketWrite1ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); return bRet; } @@ -1269,7 +1265,7 @@ static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, return bRet; } -static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt, bool bPseudoTest) +static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) { bool bRet = false; u8 i, efuse_data = 0, cur_header = 0; @@ -1281,17 +1277,10 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max); if (efuseType == EFUSE_WIFI) { - if (bPseudoTest) { - startAddr = (u16)(fakeEfuseUsedBytes%EFUSE_REAL_CONTENT_LEN); - } else { - rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); - startAddr %= EFUSE_REAL_CONTENT_LEN; - } + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); + startAddr %= EFUSE_REAL_CONTENT_LEN; } else { - if (bPseudoTest) - startAddr = (u16)(fakeBTEfuseUsedBytes%EFUSE_REAL_CONTENT_LEN); - else - startAddr = (u16)(BTEfuseUsedBytes%EFUSE_REAL_CONTENT_LEN); + startAddr = (u16)(BTEfuseUsedBytes%EFUSE_REAL_CONTENT_LEN); } while (1) { @@ -1322,7 +1311,7 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u /* if same header is found but no data followed */ /* write some part of data followed by the header. */ if ((curPkt.offset == pTargetPkt->offset) && - (!hal_EfuseCheckIfDatafollowed(pAdapter, curPkt.word_cnts, startAddr+1, bPseudoTest)) && + (!hal_EfuseCheckIfDatafollowed(pAdapter, curPkt.word_cnts, startAddr+1)) && wordEnMatched(pTargetPkt, &curPkt, &matched_wden)) { /* Here to write partial data */ badworden = Efuse_WordEnableDataWrite(pAdapter, startAddr+1, matched_wden, pTargetPkt->data); @@ -1330,7 +1319,7 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u u32 PgWriteSuccess = 0; /* if write fail on some words, write these bad words again */ - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data, bPseudoTest); + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); if (!PgWriteSuccess) { bRet = false; /* write fail, return */ @@ -1359,8 +1348,7 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u static bool hal_EfusePgCheckAvailableAddr( struct adapter *pAdapter, - u8 efuseType, - bool bPseudoTest + u8 efuseType ) { u16 efuse_max_available_len = 0; @@ -1382,24 +1370,24 @@ static void hal_EfuseConstructPGPkt(u8 offset, u8 word_en, u8 *pData, struct pgp pTargetPkt->word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); } -bool Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData, bool bPseudoTest) +bool Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData) { struct pgpkt targetPkt; u16 startAddr = 0; u8 efuseType = EFUSE_WIFI; - if (!hal_EfusePgCheckAvailableAddr(pAdapter, efuseType, bPseudoTest)) + if (!hal_EfusePgCheckAvailableAddr(pAdapter, efuseType)) return false; hal_EfuseConstructPGPkt(offset, word_en, pData, &targetPkt); - if (!hal_EfusePartialWriteCheck(pAdapter, efuseType, &startAddr, &targetPkt, bPseudoTest)) + if (!hal_EfusePartialWriteCheck(pAdapter, efuseType, &startAddr, &targetPkt)) return false; - if (!hal_EfusePgPacketWriteHeader(pAdapter, efuseType, &startAddr, &targetPkt, bPseudoTest)) + if (!hal_EfusePgPacketWriteHeader(pAdapter, efuseType, &startAddr, &targetPkt)) return false; - if (!hal_EfusePgPacketWriteData(pAdapter, efuseType, &startAddr, &targetPkt, bPseudoTest)) + if (!hal_EfusePgPacketWriteData(pAdapter, efuseType, &startAddr, &targetPkt)) return false; return true; diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index f8737a4f0349..00f8797c3b61 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -133,9 +133,8 @@ u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data); void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf); void Efuse_PowerSwitch(struct adapter *adapt, u8 bWrite, u8 PwrState); -int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data, bool test); -bool Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data, - bool test); +int Efuse_PgPacketRead(struct adapter *adapt, u8 offset, u8 *data); +bool Efuse_PgPacketWrite(struct adapter *adapter, u8 offset, u8 word, u8 *data); void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata); u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, u8 word_en, u8 *data); -- cgit From 84ce31cae388440bea6e75292c210d3d68813a81 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:42 +0530 Subject: staging: rtl8188eu: rtl8188e_hal_init.c: Remove forward declarations Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 19 ------------------- 1 file changed, 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 0de4a915a488..cf94e4675f1c 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -728,25 +728,6 @@ enum{ LDOE25_SHIFT = 28 , }; -static bool -hal_EfusePgPacketWrite2ByteHeader( - struct adapter *pAdapter, - u8 efuseType, - u16 *pAddr, - struct pgpkt *pTargetPkt); -static bool -hal_EfusePgPacketWrite1ByteHeader( - struct adapter *pAdapter, - u8 efuseType, - u16 *pAddr, - struct pgpkt *pTargetPkt); -static bool -hal_EfusePgPacketWriteData( - struct adapter *pAdapter, - u8 efuseType, - u16 *pAddr, - struct pgpkt *pTargetPkt); - /* * Function: Efuse_PowerSwitch * -- cgit From 802329605729d07a520ee1c63d91e5f55a2fc0d8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:43 +0530 Subject: staging: rtl8188eu: hal_EfusePartialWriteCheck(): Remove bluetooth specific code Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index cf94e4675f1c..10ff404dc04a 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1257,12 +1257,8 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max); - if (efuseType == EFUSE_WIFI) { - rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); - startAddr %= EFUSE_REAL_CONTENT_LEN; - } else { - startAddr = (u16)(BTEfuseUsedBytes%EFUSE_REAL_CONTENT_LEN); - } + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); + startAddr %= EFUSE_REAL_CONTENT_LEN; while (1) { if (startAddr >= efuse_max_available_len) { -- cgit From a2bf6a4505ee44e455ba1fb1c56268dcec15818a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:44 +0530 Subject: staging: rtl8188eu: rtw_efuse.c: Remove unused global variables Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_efuse.h | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 00f8797c3b61..b608b92bd22c 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -99,24 +99,6 @@ struct efuse_hal { u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; }; -/*------------------------Export global variable----------------------------*/ -extern u8 fakeEfuseBank; -extern u32 fakeEfuseUsedBytes; -extern u8 fakeEfuseContent[]; -extern u8 fakeEfuseInitMap[]; -extern u8 fakeEfuseModifiedMap[]; - -extern u32 BTEfuseUsedBytes; -extern u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -extern u8 BTEfuseInitMap[]; -extern u8 BTEfuseModifiedMap[]; - -extern u32 fakeBTEfuseUsedBytes; -extern u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -extern u8 fakeBTEfuseInitMap[]; -extern u8 fakeBTEfuseModifiedMap[]; -/*------------------------Export global variable----------------------------*/ - u8 efuse_GetCurrentSize(struct adapter *adapter, u16 *size); u16 efuse_GetMaxSize(struct adapter *adapter); u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, -- cgit From 1bc7bab5bb65b2158d2ef9d94204d146a867438a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:45 +0530 Subject: staging: rtl8188eu: rtw_efuse.c: Remove unused local variables Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index a0204ed5b20d..26d1d51001da 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -24,24 +24,6 @@ #include #include -/*------------------------Define local variable------------------------------*/ -u8 fakeEfuseBank; -u32 fakeEfuseUsedBytes; -u8 fakeEfuseContent[EFUSE_MAX_HW_SIZE] = {0}; -u8 fakeEfuseInitMap[EFUSE_MAX_MAP_LEN] = {0}; -u8 fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN] = {0}; - -u32 BTEfuseUsedBytes; -u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -u8 BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN] = {0}; -u8 BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN] = {0}; - -u32 fakeBTEfuseUsedBytes; -u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -u8 fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN] = {0}; -u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN] = {0}; -/*------------------------Define local variable------------------------------*/ - /* */ #define REG_EFUSE_CTRL 0x0030 #define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ -- cgit From 756850c6dc61534a2c174e111265fa5bacf5dd0e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:46 +0530 Subject: staging: rtl8188eu: rtw_efuse.c: Remove unnecessary comments Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 125 ++++++----------------------- 1 file changed, 24 insertions(+), 101 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 26d1d51001da..7eb89465d8a8 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -24,14 +24,10 @@ #include #include -/* */ #define REG_EFUSE_CTRL 0x0030 #define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ -/* */ -/* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ -u8 -Efuse_CalculateWordCnts(u8 word_en) +u8 Efuse_CalculateWordCnts(u8 word_en) { u8 word_cnts = 0; if (!(word_en & BIT(0))) @@ -50,8 +46,6 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data) u8 tmpidx = 0; u8 result; - /* -----------------e-fuse reg ctrl --------------------------------- */ - /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr & 0xff)); usb_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) & 0x03)) | (usb_read8(pAdapter, EFUSE_CTRL+2) & 0xFC)); @@ -70,14 +64,11 @@ u8 efuse_OneByteRead(struct adapter *pAdapter, u16 addr, u8 *data) return result; } -/* 11/16/2008 MH Write one byte to reald Efuse. */ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data) { u8 tmpidx = 0; u8 result; - /* -----------------e-fuse reg ctrl --------------------------------- */ - /* address */ usb_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); usb_write8(pAdapter, EFUSE_CTRL+2, (usb_read8(pAdapter, EFUSE_CTRL+2) & 0xFC) | @@ -97,23 +88,9 @@ u8 efuse_OneByteWrite(struct adapter *pAdapter, u16 addr, u8 data) return result; } -/*----------------------------------------------------------------------------- - * Function: efuse_WordEnableDataRead - * - * Overview: Read allowed word in current efuse section data. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/16/2008 MHC Create Version 0. - * 11/21/2008 MHC Fix Write bug when we only enable late word. - * - *---------------------------------------------------------------------------*/ +/* + * Overview: Read allowed word in current efuse section data. + */ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) { if (!(word_en&BIT(0))) { @@ -186,14 +163,14 @@ u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 cnts return res; } -/* */ + u16 efuse_GetMaxSize(struct adapter *padapter) { u16 max_size; EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size); return max_size; } -/* */ + u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size) { Efuse_PowerSwitch(padapter, false, true); @@ -202,7 +179,7 @@ u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size) return _SUCCESS; } -/* */ + u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u16 mapLen = 0; @@ -221,7 +198,6 @@ u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) return _SUCCESS; } -/* */ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u8 offset, word_en; @@ -313,24 +289,13 @@ exit: return ret; } -/*----------------------------------------------------------------------------- - * Function: efuse_ShadowRead1Byte - * efuse_ShadowRead2Byte - * efuse_ShadowRead4Byte - * - * Overview: Read from efuse init map by one/two/four bytes !!!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/12/2008 MHC Create Version 0. +/* + * Function: efuse_ShadowRead1Byte + * efuse_ShadowRead2Byte + * efuse_ShadowRead4Byte * - *---------------------------------------------------------------------------*/ + * Overview: Read from efuse init map by one/two/four bytes !!!!! + */ static void efuse_ShadowRead1Byte( struct adapter *pAdapter, @@ -341,9 +306,8 @@ efuse_ShadowRead1Byte( *Value = pEEPROM->efuse_eeprom_data[Offset]; -} /* EFUSE_ShadowRead1Byte */ +} -/* Read Two Bytes */ static void efuse_ShadowRead2Byte( struct adapter *pAdapter, @@ -355,9 +319,8 @@ efuse_ShadowRead2Byte( *Value = pEEPROM->efuse_eeprom_data[Offset]; *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8; -} /* EFUSE_ShadowRead2Byte */ +} -/* Read Four Bytes */ static void efuse_ShadowRead4Byte( struct adapter *pAdapter, @@ -371,24 +334,11 @@ efuse_ShadowRead4Byte( *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16; *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24; -} /* efuse_ShadowRead4Byte */ +} -/*----------------------------------------------------------------------------- - * Function: Efuse_ReadAllMap - * +/* * Overview: Read All Efuse content - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/11/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ + */ static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse) { u16 mapLen = 0; @@ -402,22 +352,9 @@ static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse) Efuse_PowerSwitch(pAdapter, false, false); } -/*----------------------------------------------------------------------------- - * Function: EFUSE_ShadowMapUpdate - * +/* * Overview: Transfer current EFUSE content to shadow init and modify map. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/13/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ + */ void EFUSE_ShadowMapUpdate( struct adapter *pAdapter, u8 efuseType) @@ -431,24 +368,11 @@ void EFUSE_ShadowMapUpdate( _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen); else Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data); -} /* EFUSE_ShadowMapUpdate */ +} -/*----------------------------------------------------------------------------- - * Function: EFUSE_ShadowRead - * +/* * Overview: Read from efuse init map !!!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/12/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ + */ void EFUSE_ShadowRead(struct adapter *pAdapter, u8 Type, u16 Offset, u32 *Value) { if (Type == 1) @@ -457,5 +381,4 @@ void EFUSE_ShadowRead(struct adapter *pAdapter, u8 Type, u16 Offset, u32 *Value) efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value); else if (Type == 4) efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value); - -} /* EFUSE_ShadowRead */ +} -- cgit From ee5f8a431ead8f334f4c04f91ecafa34cb9d52ca Mon Sep 17 00:00:00 2001 From: navin patidar Date: Fri, 20 Jun 2014 20:29:47 +0530 Subject: staging: rtl8188eu: Move all efuse related code to rtw_efuse.c Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 871 +++++++++++++++++++++ drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 875 +--------------------- drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 2 + 3 files changed, 875 insertions(+), 873 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 7eb89465d8a8..672bfed3c428 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -23,10 +23,881 @@ #include #include #include +#include +#include #define REG_EFUSE_CTRL 0x0030 #define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ +enum{ + VOLTAGE_V25 = 0x03, + LDOE25_SHIFT = 28 , + }; + +/* + * Function: Efuse_PowerSwitch + * + * Overview: When we want to enable write operation, we should change to + * pwr on state. When we stop write, we should switch to 500k mode + * and disable LDO 2.5V. + */ + +void Efuse_PowerSwitch( + struct adapter *pAdapter, + u8 bWrite, + u8 PwrState) +{ + u8 tempval; + u16 tmpV16; + + if (PwrState) { + usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); + + /* 1.2V Power: From VDDON with Power Cut(0x0000h[15]), defualt valid */ + tmpV16 = usb_read16(pAdapter, REG_SYS_ISO_CTRL); + if (!(tmpV16 & PWC_EV12V)) { + tmpV16 |= PWC_EV12V; + usb_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16); + } + /* Reset: 0x0000h[28], default valid */ + tmpV16 = usb_read16(pAdapter, REG_SYS_FUNC_EN); + if (!(tmpV16 & FEN_ELDR)) { + tmpV16 |= FEN_ELDR; + usb_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16); + } + + /* Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock from ANA, default valid */ + tmpV16 = usb_read16(pAdapter, REG_SYS_CLKR); + if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) { + tmpV16 |= (LOADER_CLK_EN | ANA8M); + usb_write16(pAdapter, REG_SYS_CLKR, tmpV16); + } + + if (bWrite) { + /* Enable LDO 2.5V before read/write action */ + tempval = usb_read8(pAdapter, EFUSE_TEST+3); + tempval &= 0x0F; + tempval |= (VOLTAGE_V25 << 4); + usb_write8(pAdapter, EFUSE_TEST+3, (tempval | 0x80)); + } + } else { + usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF); + + if (bWrite) { + /* Disable LDO 2.5V after read/write action */ + tempval = usb_read8(pAdapter, EFUSE_TEST+3); + usb_write8(pAdapter, EFUSE_TEST+3, (tempval & 0x7F)); + } + } +} + +static void +efuse_phymap_to_logical(u8 *phymap, u16 _offset, u16 _size_byte, u8 *pbuf) +{ + u8 *efuseTbl = NULL; + u8 rtemp8; + u16 eFuse_Addr = 0; + u8 offset, wren; + u16 i, j; + u16 **eFuseWord = NULL; + u16 efuse_utilized = 0; + u8 u1temp = 0; + + efuseTbl = (u8 *)rtw_zmalloc(EFUSE_MAP_LEN_88E); + if (efuseTbl == NULL) { + DBG_88E("%s: alloc efuseTbl fail!\n", __func__); + goto exit; + } + + eFuseWord = (u16 **)rtw_malloc2d(EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); + if (eFuseWord == NULL) { + DBG_88E("%s: alloc eFuseWord fail!\n", __func__); + goto exit; + } + + /* 0. Refresh efuse init map as all oxFF. */ + for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) + for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) + eFuseWord[i][j] = 0xFFFF; + + /* */ + /* 1. Read the first byte to check if efuse is empty!!! */ + /* */ + /* */ + rtemp8 = *(phymap+eFuse_Addr); + if (rtemp8 != 0xFF) { + efuse_utilized++; + eFuse_Addr++; + } else { + DBG_88E("EFUSE is empty efuse_Addr-%d efuse_data =%x\n", eFuse_Addr, rtemp8); + goto exit; + } + + /* */ + /* 2. Read real efuse content. Filter PG header and every section data. */ + /* */ + while ((rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { + /* Check PG header for section num. */ + if ((rtemp8 & 0x1F) == 0x0F) { /* extended header */ + u1temp = ((rtemp8 & 0xE0) >> 5); + rtemp8 = *(phymap+eFuse_Addr); + if ((rtemp8 & 0x0F) == 0x0F) { + eFuse_Addr++; + rtemp8 = *(phymap+eFuse_Addr); + + if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) + eFuse_Addr++; + continue; + } else { + offset = ((rtemp8 & 0xF0) >> 1) | u1temp; + wren = (rtemp8 & 0x0F); + eFuse_Addr++; + } + } else { + offset = ((rtemp8 >> 4) & 0x0f); + wren = (rtemp8 & 0x0f); + } + + if (offset < EFUSE_MAX_SECTION_88E) { + /* Get word enable value from PG header */ + for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) { + /* Check word enable condition in the section */ + if (!(wren & 0x01)) { + rtemp8 = *(phymap+eFuse_Addr); + eFuse_Addr++; + efuse_utilized++; + eFuseWord[offset][i] = (rtemp8 & 0xff); + if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) + break; + rtemp8 = *(phymap+eFuse_Addr); + eFuse_Addr++; + efuse_utilized++; + eFuseWord[offset][i] |= (((u16)rtemp8 << 8) & 0xff00); + + if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) + break; + } + wren >>= 1; + } + } + /* Read next PG header */ + rtemp8 = *(phymap+eFuse_Addr); + + if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { + efuse_utilized++; + eFuse_Addr++; + } + } + + /* */ + /* 3. Collect 16 sections and 4 word unit into Efuse map. */ + /* */ + for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) { + for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) { + efuseTbl[(i*8)+(j*2)] = (eFuseWord[i][j] & 0xff); + efuseTbl[(i*8)+((j*2)+1)] = ((eFuseWord[i][j] >> 8) & 0xff); + } + } + + /* */ + /* 4. Copy from Efuse map to output pointer memory!!! */ + /* */ + for (i = 0; i < _size_byte; i++) + pbuf[i] = efuseTbl[_offset+i]; + + /* */ + /* 5. Calculate Efuse utilization. */ + /* */ + +exit: + kfree(efuseTbl); + + if (eFuseWord) + rtw_mfree2d((void *)eFuseWord, EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); +} + +static void efuse_read_phymap_from_txpktbuf( + struct adapter *adapter, + int bcnhead, /* beacon head, where FW store len(2-byte) and efuse physical map. */ + u8 *content, /* buffer to store efuse physical map */ + u16 *size /* for efuse content: the max byte to read. will update to byte read */ + ) +{ + u16 dbg_addr = 0; + u32 start = 0, passing_time = 0; + u8 reg_0x143 = 0; + u32 lo32 = 0, hi32 = 0; + u16 len = 0, count = 0; + int i = 0; + u16 limit = *size; + + u8 *pos = content; + + if (bcnhead < 0) /* if not valid */ + bcnhead = usb_read8(adapter, REG_TDECTRL+1); + + DBG_88E("%s bcnhead:%d\n", __func__, bcnhead); + + usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); + + dbg_addr = bcnhead*128/8; /* 8-bytes addressing */ + + while (1) { + usb_write16(adapter, REG_PKTBUF_DBG_ADDR, dbg_addr+i); + + usb_write8(adapter, REG_TXPKTBUF_DBG, 0); + start = jiffies; + while (!(reg_0x143 = usb_read8(adapter, REG_TXPKTBUF_DBG)) && + (passing_time = rtw_get_passing_time_ms(start)) < 1000) { + DBG_88E("%s polling reg_0x143:0x%02x, reg_0x106:0x%02x\n", __func__, reg_0x143, usb_read8(adapter, 0x106)); + msleep(1); + } + + lo32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_L); + hi32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_H); + + if (i == 0) { + u8 lenc[2]; + u16 lenbak, aaabak; + u16 aaa; + lenc[0] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L); + lenc[1] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L+1); + + aaabak = le16_to_cpup((__le16 *)lenc); + lenbak = le16_to_cpu(*((__le16 *)lenc)); + aaa = le16_to_cpup((__le16 *)&lo32); + len = le16_to_cpu(*((__le16 *)&lo32)); + + limit = (len-2 < limit) ? len-2 : limit; + + DBG_88E("%s len:%u, lenbak:%u, aaa:%u, aaabak:%u\n", __func__, len, lenbak, aaa, aaabak); + + memcpy(pos, ((u8 *)&lo32)+2, (limit >= count+2) ? 2 : limit-count); + count += (limit >= count+2) ? 2 : limit-count; + pos = content+count; + + } else { + memcpy(pos, ((u8 *)&lo32), (limit >= count+4) ? 4 : limit-count); + count += (limit >= count+4) ? 4 : limit-count; + pos = content+count; + } + + if (limit > count && len-2 > count) { + memcpy(pos, (u8 *)&hi32, (limit >= count+4) ? 4 : limit-count); + count += (limit >= count+4) ? 4 : limit-count; + pos = content+count; + } + + if (limit <= count || len-2 <= count) + break; + i++; + } + usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, DISABLE_TRXPKT_BUF_ACCESS); + DBG_88E("%s read count:%u\n", __func__, count); + *size = count; +} + +static s32 iol_read_efuse(struct adapter *padapter, u8 txpktbuf_bndy, u16 offset, u16 size_byte, u8 *logical_map) +{ + s32 status = _FAIL; + u8 physical_map[512]; + u16 size = 512; + + usb_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); + _rtw_memset(physical_map, 0xFF, 512); + usb_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); + status = iol_execute(padapter, CMD_READ_EFUSE_MAP); + if (status == _SUCCESS) + efuse_read_phymap_from_txpktbuf(padapter, txpktbuf_bndy, physical_map, &size); + efuse_phymap_to_logical(physical_map, offset, size_byte, logical_map); + return status; +} + +void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf) +{ + + if (rtw_IOL_applied(Adapter)) { + rtw_hal_power_on(Adapter); + iol_mode_enable(Adapter, 1); + iol_read_efuse(Adapter, 0, _offset, _size_byte, pbuf); + iol_mode_enable(Adapter, 0); + } + return; +} + +/* Do not support BT */ +void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) +{ + switch (type) { + case TYPE_EFUSE_MAX_SECTION: + { + u8 *pMax_section; + pMax_section = (u8 *)pOut; + *pMax_section = EFUSE_MAX_SECTION_88E; + } + break; + case TYPE_EFUSE_REAL_CONTENT_LEN: + { + u16 *pu2Tmp; + pu2Tmp = (u16 *)pOut; + *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; + } + break; + case TYPE_EFUSE_CONTENT_LEN_BANK: + { + u16 *pu2Tmp; + pu2Tmp = (u16 *)pOut; + *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; + } + break; + case TYPE_AVAILABLE_EFUSE_BYTES_BANK: + { + u16 *pu2Tmp; + pu2Tmp = (u16 *)pOut; + *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); + } + break; + case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL: + { + u16 *pu2Tmp; + pu2Tmp = (u16 *)pOut; + *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); + } + break; + case TYPE_EFUSE_MAP_LEN: + { + u16 *pu2Tmp; + pu2Tmp = (u16 *)pOut; + *pu2Tmp = (u16)EFUSE_MAP_LEN_88E; + } + break; + case TYPE_EFUSE_PROTECT_BYTES_BANK: + { + u8 *pu1Tmp; + pu1Tmp = (u8 *)pOut; + *pu1Tmp = (u8)(EFUSE_OOB_PROTECT_BYTES_88E); + } + break; + default: + { + u8 *pu1Tmp; + pu1Tmp = (u8 *)pOut; + *pu1Tmp = 0; + } + break; + } +} + +u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data) +{ + u16 tmpaddr = 0; + u16 start_addr = efuse_addr; + u8 badworden = 0x0F; + u8 tmpdata[8]; + + _rtw_memset((void *)tmpdata, 0xff, PGPKT_DATA_SIZE); + + if (!(word_en&BIT0)) { + tmpaddr = start_addr; + efuse_OneByteWrite(pAdapter, start_addr++, data[0]); + efuse_OneByteWrite(pAdapter, start_addr++, data[1]); + + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[0]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[1]); + if ((data[0] != tmpdata[0]) || (data[1] != tmpdata[1])) + badworden &= (~BIT0); + } + if (!(word_en&BIT1)) { + tmpaddr = start_addr; + efuse_OneByteWrite(pAdapter, start_addr++, data[2]); + efuse_OneByteWrite(pAdapter, start_addr++, data[3]); + + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[2]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[3]); + if ((data[2] != tmpdata[2]) || (data[3] != tmpdata[3])) + badworden &= (~BIT1); + } + if (!(word_en&BIT2)) { + tmpaddr = start_addr; + efuse_OneByteWrite(pAdapter, start_addr++, data[4]); + efuse_OneByteWrite(pAdapter, start_addr++, data[5]); + + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[4]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[5]); + if ((data[4] != tmpdata[4]) || (data[5] != tmpdata[5])) + badworden &= (~BIT2); + } + if (!(word_en&BIT3)) { + tmpaddr = start_addr; + efuse_OneByteWrite(pAdapter, start_addr++, data[6]); + efuse_OneByteWrite(pAdapter, start_addr++, data[7]); + + efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[6]); + efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[7]); + if ((data[6] != tmpdata[6]) || (data[7] != tmpdata[7])) + badworden &= (~BIT3); + } + return badworden; +} + +u16 Efuse_GetCurrentSize(struct adapter *pAdapter) +{ + int bContinual = true; + u16 efuse_addr = 0; + u8 hoffset = 0, hworden = 0; + u8 efuse_data, word_cnts = 0; + + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); + + while (bContinual && + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && + AVAILABLE_EFUSE_ADDR(efuse_addr)) { + if (efuse_data != 0xFF) { + if ((efuse_data&0x1F) == 0x0F) { /* extended header */ + hoffset = efuse_data; + efuse_addr++; + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); + if ((efuse_data & 0x0F) == 0x0F) { + efuse_addr++; + continue; + } else { + hoffset = ((hoffset & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); + hworden = efuse_data & 0x0F; + } + } else { + hoffset = (efuse_data>>4) & 0x0F; + hworden = efuse_data & 0x0F; + } + word_cnts = Efuse_CalculateWordCnts(hworden); + /* read next header */ + efuse_addr = efuse_addr + (word_cnts*2)+1; + } else { + bContinual = false; + } + } + + rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); + + return efuse_addr; +} + +int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data) +{ + u8 ReadState = PG_STATE_HEADER; + int bContinual = true; + int bDataEmpty = true; + u8 efuse_data, word_cnts = 0; + u16 efuse_addr = 0; + u8 hoffset = 0, hworden = 0; + u8 tmpidx = 0; + u8 tmpdata[8]; + u8 max_section = 0; + u8 tmp_header = 0; + + EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAX_SECTION, (void *)&max_section); + + if (data == NULL) + return false; + if (offset > max_section) + return false; + + _rtw_memset((void *)data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + _rtw_memset((void *)tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + + /* Efuse has been pre-programmed dummy 5Bytes at the end of Efuse by CP. */ + /* Skip dummy parts to prevent unexpected data read from Efuse. */ + /* By pass right now. 2009.02.19. */ + while (bContinual && AVAILABLE_EFUSE_ADDR(efuse_addr)) { + /* Header Read ------------- */ + if (ReadState & PG_STATE_HEADER) { + if (efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && (efuse_data != 0xFF)) { + if (EXT_HEADER(efuse_data)) { + tmp_header = efuse_data; + efuse_addr++; + efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); + if (!ALL_WORDS_DISABLED(efuse_data)) { + hoffset = ((tmp_header & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); + hworden = efuse_data & 0x0F; + } else { + DBG_88E("Error, All words disabled\n"); + efuse_addr++; + continue; + } + } else { + hoffset = (efuse_data>>4) & 0x0F; + hworden = efuse_data & 0x0F; + } + word_cnts = Efuse_CalculateWordCnts(hworden); + bDataEmpty = true; + + if (hoffset == offset) { + for (tmpidx = 0; tmpidx < word_cnts*2; tmpidx++) { + if (efuse_OneByteRead(pAdapter, efuse_addr+1+tmpidx, &efuse_data)) { + tmpdata[tmpidx] = efuse_data; + if (efuse_data != 0xff) + bDataEmpty = false; + } + } + if (bDataEmpty == false) { + ReadState = PG_STATE_DATA; + } else {/* read next header */ + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + } else {/* read next header */ + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + } else { + bContinual = false; + } + } else if (ReadState & PG_STATE_DATA) { + /* Data section Read ------------- */ + efuse_WordEnableDataRead(hworden, tmpdata, data); + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + + } + + if ((data[0] == 0xff) && (data[1] == 0xff) && (data[2] == 0xff) && (data[3] == 0xff) && + (data[4] == 0xff) && (data[5] == 0xff) && (data[6] == 0xff) && (data[7] == 0xff)) + return false; + else + return true; +} + +static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, struct pgpkt *pFixPkt, u16 *pAddr) +{ + u8 originaldata[8], badworden = 0; + u16 efuse_addr = *pAddr; + u32 PgWriteSuccess = 0; + + _rtw_memset((void *)originaldata, 0xff, 8); + + if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata)) { + /* check if data exist */ + badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata); + + if (badworden != 0xf) { /* write fail */ + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata); + + if (!PgWriteSuccess) + return false; + else + efuse_addr = Efuse_GetCurrentSize(pAdapter); + } else { + efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; + } + } else { + efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; + } + *pAddr = efuse_addr; + return true; +} + +static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) +{ + bool bRet = false; + u16 efuse_addr = *pAddr, efuse_max_available_len = 0; + u8 pg_header = 0, tmp_header = 0, pg_header_temp = 0; + u8 repeatcnt = 0; + + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); + + while (efuse_addr < efuse_max_available_len) { + pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F; + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + + while (tmp_header == 0xFF) { + if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) + return false; + + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + } + + /* to write ext_header */ + if (tmp_header == pg_header) { + efuse_addr++; + pg_header_temp = pg_header; + pg_header = ((pTargetPkt->offset & 0x78) << 1) | pTargetPkt->word_en; + + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + + while (tmp_header == 0xFF) { + if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) + return false; + + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + } + + if ((tmp_header & 0x0F) == 0x0F) { /* word_en PG fail */ + if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) { + return false; + } else { + efuse_addr++; + continue; + } + } else if (pg_header != tmp_header) { /* offset PG fail */ + struct pgpkt fixPkt; + fixPkt.offset = ((pg_header_temp & 0xE0) >> 5) | ((tmp_header & 0xF0) >> 1); + fixPkt.word_en = tmp_header & 0x0F; + fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); + if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) + return false; + } else { + bRet = true; + break; + } + } else if ((tmp_header & 0x1F) == 0x0F) { /* wrong extended header */ + efuse_addr += 2; + continue; + } + } + + *pAddr = efuse_addr; + return bRet; +} + +static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) +{ + bool bRet = false; + u8 pg_header = 0, tmp_header = 0; + u16 efuse_addr = *pAddr; + u8 repeatcnt = 0; + + pg_header = ((pTargetPkt->offset << 4) & 0xf0) | pTargetPkt->word_en; + + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + + while (tmp_header == 0xFF) { + if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) + return false; + efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); + efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); + } + + if (pg_header == tmp_header) { + bRet = true; + } else { + struct pgpkt fixPkt; + fixPkt.offset = (tmp_header>>4) & 0x0F; + fixPkt.word_en = tmp_header & 0x0F; + fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); + if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) + return false; + } + + *pAddr = efuse_addr; + return bRet; +} + +static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) +{ + u16 efuse_addr = *pAddr; + u8 badworden = 0; + u32 PgWriteSuccess = 0; + + badworden = 0x0f; + badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pTargetPkt->word_en, pTargetPkt->data); + if (badworden == 0x0F) { + /* write ok */ + return true; + } else { + /* reorganize other pg packet */ + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); + if (!PgWriteSuccess) + return false; + else + return true; + } +} + +static bool +hal_EfusePgPacketWriteHeader( + struct adapter *pAdapter, + u8 efuseType, + u16 *pAddr, + struct pgpkt *pTargetPkt) +{ + bool bRet = false; + + if (pTargetPkt->offset >= EFUSE_MAX_SECTION_BASE) + bRet = hal_EfusePgPacketWrite2ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); + else + bRet = hal_EfusePgPacketWrite1ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); + + return bRet; +} + +static bool wordEnMatched(struct pgpkt *pTargetPkt, struct pgpkt *pCurPkt, + u8 *pWden) +{ + u8 match_word_en = 0x0F; /* default all words are disabled */ + + /* check if the same words are enabled both target and current PG packet */ + if (((pTargetPkt->word_en & BIT0) == 0) && + ((pCurPkt->word_en & BIT0) == 0)) + match_word_en &= ~BIT0; /* enable word 0 */ + if (((pTargetPkt->word_en & BIT1) == 0) && + ((pCurPkt->word_en & BIT1) == 0)) + match_word_en &= ~BIT1; /* enable word 1 */ + if (((pTargetPkt->word_en & BIT2) == 0) && + ((pCurPkt->word_en & BIT2) == 0)) + match_word_en &= ~BIT2; /* enable word 2 */ + if (((pTargetPkt->word_en & BIT3) == 0) && + ((pCurPkt->word_en & BIT3) == 0)) + match_word_en &= ~BIT3; /* enable word 3 */ + + *pWden = match_word_en; + + if (match_word_en != 0xf) + return true; + else + return false; +} + +static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, u16 startAddr) +{ + bool bRet = false; + u8 i, efuse_data; + + for (i = 0; i < (word_cnts*2); i++) { + if (efuse_OneByteRead(pAdapter, (startAddr+i), &efuse_data) && (efuse_data != 0xFF)) + bRet = true; + } + return bRet; +} + +static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) +{ + bool bRet = false; + u8 i, efuse_data = 0, cur_header = 0; + u8 matched_wden = 0, badworden = 0; + u16 startAddr = 0, efuse_max_available_len = 0, efuse_max = 0; + struct pgpkt curPkt; + + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); + EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max); + + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); + startAddr %= EFUSE_REAL_CONTENT_LEN; + + while (1) { + if (startAddr >= efuse_max_available_len) { + bRet = false; + break; + } + + if (efuse_OneByteRead(pAdapter, startAddr, &efuse_data) && (efuse_data != 0xFF)) { + if (EXT_HEADER(efuse_data)) { + cur_header = efuse_data; + startAddr++; + efuse_OneByteRead(pAdapter, startAddr, &efuse_data); + if (ALL_WORDS_DISABLED(efuse_data)) { + bRet = false; + break; + } else { + curPkt.offset = ((cur_header & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); + curPkt.word_en = efuse_data & 0x0F; + } + } else { + cur_header = efuse_data; + curPkt.offset = (cur_header>>4) & 0x0F; + curPkt.word_en = cur_header & 0x0F; + } + + curPkt.word_cnts = Efuse_CalculateWordCnts(curPkt.word_en); + /* if same header is found but no data followed */ + /* write some part of data followed by the header. */ + if ((curPkt.offset == pTargetPkt->offset) && + (!hal_EfuseCheckIfDatafollowed(pAdapter, curPkt.word_cnts, startAddr+1)) && + wordEnMatched(pTargetPkt, &curPkt, &matched_wden)) { + /* Here to write partial data */ + badworden = Efuse_WordEnableDataWrite(pAdapter, startAddr+1, matched_wden, pTargetPkt->data); + if (badworden != 0x0F) { + u32 PgWriteSuccess = 0; + /* if write fail on some words, write these bad words again */ + + PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); + + if (!PgWriteSuccess) { + bRet = false; /* write fail, return */ + break; + } + } + /* partial write ok, update the target packet for later use */ + for (i = 0; i < 4; i++) { + if ((matched_wden & (0x1<word_en |= (0x1<word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); + } + /* read from next header */ + startAddr = startAddr + (curPkt.word_cnts*2) + 1; + } else { + /* not used header, 0xff */ + *pAddr = startAddr; + bRet = true; + break; + } + } + return bRet; +} + +static bool +hal_EfusePgCheckAvailableAddr( + struct adapter *pAdapter, + u8 efuseType + ) +{ + u16 efuse_max_available_len = 0; + + /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ + EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len); + + if (Efuse_GetCurrentSize(pAdapter) >= efuse_max_available_len) + return false; + return true; +} + +static void hal_EfuseConstructPGPkt(u8 offset, u8 word_en, u8 *pData, struct pgpkt *pTargetPkt) +{ + _rtw_memset((void *)pTargetPkt->data, 0xFF, sizeof(u8)*8); + pTargetPkt->offset = offset; + pTargetPkt->word_en = word_en; + efuse_WordEnableDataRead(word_en, pData, pTargetPkt->data); + pTargetPkt->word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); +} + +bool Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData) +{ + struct pgpkt targetPkt; + u16 startAddr = 0; + u8 efuseType = EFUSE_WIFI; + + if (!hal_EfusePgCheckAvailableAddr(pAdapter, efuseType)) + return false; + + hal_EfuseConstructPGPkt(offset, word_en, pData, &targetPkt); + + if (!hal_EfusePartialWriteCheck(pAdapter, efuseType, &startAddr, &targetPkt)) + return false; + + if (!hal_EfusePgPacketWriteHeader(pAdapter, efuseType, &startAddr, &targetPkt)) + return false; + + if (!hal_EfusePgPacketWriteData(pAdapter, efuseType, &startAddr, &targetPkt)) + return false; + + return true; +} + u8 Efuse_CalculateWordCnts(u8 word_en) { u8 word_cnts = 0; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 10ff404dc04a..7ea0320c9141 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -30,7 +30,7 @@ #include -static void iol_mode_enable(struct adapter *padapter, u8 enable) +void iol_mode_enable(struct adapter *padapter, u8 enable) { u8 reg_0xf0 = 0; @@ -51,7 +51,7 @@ static void iol_mode_enable(struct adapter *padapter, u8 enable) } } -static s32 iol_execute(struct adapter *padapter, u8 control) +s32 iol_execute(struct adapter *padapter, u8 control) { s32 status = _FAIL; u8 reg_0x88 = 0; @@ -84,227 +84,6 @@ static s32 iol_InitLLTTable(struct adapter *padapter, u8 txpktbuf_bndy) return rst; } -static void -efuse_phymap_to_logical(u8 *phymap, u16 _offset, u16 _size_byte, u8 *pbuf) -{ - u8 *efuseTbl = NULL; - u8 rtemp8; - u16 eFuse_Addr = 0; - u8 offset, wren; - u16 i, j; - u16 **eFuseWord = NULL; - u16 efuse_utilized = 0; - u8 u1temp = 0; - - efuseTbl = (u8 *)rtw_zmalloc(EFUSE_MAP_LEN_88E); - if (efuseTbl == NULL) { - DBG_88E("%s: alloc efuseTbl fail!\n", __func__); - goto exit; - } - - eFuseWord = (u16 **)rtw_malloc2d(EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); - if (eFuseWord == NULL) { - DBG_88E("%s: alloc eFuseWord fail!\n", __func__); - goto exit; - } - - /* 0. Refresh efuse init map as all oxFF. */ - for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) - for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) - eFuseWord[i][j] = 0xFFFF; - - /* */ - /* 1. Read the first byte to check if efuse is empty!!! */ - /* */ - /* */ - rtemp8 = *(phymap+eFuse_Addr); - if (rtemp8 != 0xFF) { - efuse_utilized++; - eFuse_Addr++; - } else { - DBG_88E("EFUSE is empty efuse_Addr-%d efuse_data =%x\n", eFuse_Addr, rtemp8); - goto exit; - } - - /* */ - /* 2. Read real efuse content. Filter PG header and every section data. */ - /* */ - while ((rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { - /* Check PG header for section num. */ - if ((rtemp8 & 0x1F) == 0x0F) { /* extended header */ - u1temp = ((rtemp8 & 0xE0) >> 5); - rtemp8 = *(phymap+eFuse_Addr); - if ((rtemp8 & 0x0F) == 0x0F) { - eFuse_Addr++; - rtemp8 = *(phymap+eFuse_Addr); - - if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) - eFuse_Addr++; - continue; - } else { - offset = ((rtemp8 & 0xF0) >> 1) | u1temp; - wren = (rtemp8 & 0x0F); - eFuse_Addr++; - } - } else { - offset = ((rtemp8 >> 4) & 0x0f); - wren = (rtemp8 & 0x0f); - } - - if (offset < EFUSE_MAX_SECTION_88E) { - /* Get word enable value from PG header */ - for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) { - /* Check word enable condition in the section */ - if (!(wren & 0x01)) { - rtemp8 = *(phymap+eFuse_Addr); - eFuse_Addr++; - efuse_utilized++; - eFuseWord[offset][i] = (rtemp8 & 0xff); - if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) - break; - rtemp8 = *(phymap+eFuse_Addr); - eFuse_Addr++; - efuse_utilized++; - eFuseWord[offset][i] |= (((u16)rtemp8 << 8) & 0xff00); - - if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E) - break; - } - wren >>= 1; - } - } - /* Read next PG header */ - rtemp8 = *(phymap+eFuse_Addr); - - if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) { - efuse_utilized++; - eFuse_Addr++; - } - } - - /* */ - /* 3. Collect 16 sections and 4 word unit into Efuse map. */ - /* */ - for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) { - for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) { - efuseTbl[(i*8)+(j*2)] = (eFuseWord[i][j] & 0xff); - efuseTbl[(i*8)+((j*2)+1)] = ((eFuseWord[i][j] >> 8) & 0xff); - } - } - - /* */ - /* 4. Copy from Efuse map to output pointer memory!!! */ - /* */ - for (i = 0; i < _size_byte; i++) - pbuf[i] = efuseTbl[_offset+i]; - - /* */ - /* 5. Calculate Efuse utilization. */ - /* */ - -exit: - kfree(efuseTbl); - - if (eFuseWord) - rtw_mfree2d((void *)eFuseWord, EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); -} - -static void efuse_read_phymap_from_txpktbuf( - struct adapter *adapter, - int bcnhead, /* beacon head, where FW store len(2-byte) and efuse physical map. */ - u8 *content, /* buffer to store efuse physical map */ - u16 *size /* for efuse content: the max byte to read. will update to byte read */ - ) -{ - u16 dbg_addr = 0; - u32 start = 0, passing_time = 0; - u8 reg_0x143 = 0; - u32 lo32 = 0, hi32 = 0; - u16 len = 0, count = 0; - int i = 0; - u16 limit = *size; - - u8 *pos = content; - - if (bcnhead < 0) /* if not valid */ - bcnhead = usb_read8(adapter, REG_TDECTRL+1); - - DBG_88E("%s bcnhead:%d\n", __func__, bcnhead); - - usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); - - dbg_addr = bcnhead*128/8; /* 8-bytes addressing */ - - while (1) { - usb_write16(adapter, REG_PKTBUF_DBG_ADDR, dbg_addr+i); - - usb_write8(adapter, REG_TXPKTBUF_DBG, 0); - start = jiffies; - while (!(reg_0x143 = usb_read8(adapter, REG_TXPKTBUF_DBG)) && - (passing_time = rtw_get_passing_time_ms(start)) < 1000) { - DBG_88E("%s polling reg_0x143:0x%02x, reg_0x106:0x%02x\n", __func__, reg_0x143, usb_read8(adapter, 0x106)); - msleep(1); - } - - lo32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_L); - hi32 = usb_read32(adapter, REG_PKTBUF_DBG_DATA_H); - - if (i == 0) { - u8 lenc[2]; - u16 lenbak, aaabak; - u16 aaa; - lenc[0] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L); - lenc[1] = usb_read8(adapter, REG_PKTBUF_DBG_DATA_L+1); - - aaabak = le16_to_cpup((__le16 *)lenc); - lenbak = le16_to_cpu(*((__le16 *)lenc)); - aaa = le16_to_cpup((__le16 *)&lo32); - len = le16_to_cpu(*((__le16 *)&lo32)); - - limit = (len-2 < limit) ? len-2 : limit; - - DBG_88E("%s len:%u, lenbak:%u, aaa:%u, aaabak:%u\n", __func__, len, lenbak, aaa, aaabak); - - memcpy(pos, ((u8 *)&lo32)+2, (limit >= count+2) ? 2 : limit-count); - count += (limit >= count+2) ? 2 : limit-count; - pos = content+count; - - } else { - memcpy(pos, ((u8 *)&lo32), (limit >= count+4) ? 4 : limit-count); - count += (limit >= count+4) ? 4 : limit-count; - pos = content+count; - } - - if (limit > count && len-2 > count) { - memcpy(pos, (u8 *)&hi32, (limit >= count+4) ? 4 : limit-count); - count += (limit >= count+4) ? 4 : limit-count; - pos = content+count; - } - - if (limit <= count || len-2 <= count) - break; - i++; - } - usb_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, DISABLE_TRXPKT_BUF_ACCESS); - DBG_88E("%s read count:%u\n", __func__, count); - *size = count; -} - -static s32 iol_read_efuse(struct adapter *padapter, u8 txpktbuf_bndy, u16 offset, u16 size_byte, u8 *logical_map) -{ - s32 status = _FAIL; - u8 physical_map[512]; - u16 size = 512; - - usb_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); - _rtw_memset(physical_map, 0xFF, 512); - usb_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); - status = iol_execute(padapter, CMD_READ_EFUSE_MAP); - if (status == _SUCCESS) - efuse_read_phymap_from_txpktbuf(padapter, txpktbuf_bndy, physical_map, &size); - efuse_phymap_to_logical(physical_map, offset, size_byte, logical_map); - return status; -} s32 rtl8188e_iol_efuse_patch(struct adapter *padapter) { @@ -720,656 +499,6 @@ static void rtl8188e_free_hal_data(struct adapter *padapter) padapter->HalData = NULL; } -/* */ -/* Efuse related code */ -/* */ -enum{ - VOLTAGE_V25 = 0x03, - LDOE25_SHIFT = 28 , - }; - -/* - * Function: Efuse_PowerSwitch - * - * Overview: When we want to enable write operation, we should change to - * pwr on state. When we stop write, we should switch to 500k mode - * and disable LDO 2.5V. - */ - -void Efuse_PowerSwitch( - struct adapter *pAdapter, - u8 bWrite, - u8 PwrState) -{ - u8 tempval; - u16 tmpV16; - - if (PwrState) { - usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); - - /* 1.2V Power: From VDDON with Power Cut(0x0000h[15]), defualt valid */ - tmpV16 = usb_read16(pAdapter, REG_SYS_ISO_CTRL); - if (!(tmpV16 & PWC_EV12V)) { - tmpV16 |= PWC_EV12V; - usb_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16); - } - /* Reset: 0x0000h[28], default valid */ - tmpV16 = usb_read16(pAdapter, REG_SYS_FUNC_EN); - if (!(tmpV16 & FEN_ELDR)) { - tmpV16 |= FEN_ELDR; - usb_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16); - } - - /* Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock from ANA, default valid */ - tmpV16 = usb_read16(pAdapter, REG_SYS_CLKR); - if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) { - tmpV16 |= (LOADER_CLK_EN | ANA8M); - usb_write16(pAdapter, REG_SYS_CLKR, tmpV16); - } - - if (bWrite) { - /* Enable LDO 2.5V before read/write action */ - tempval = usb_read8(pAdapter, EFUSE_TEST+3); - tempval &= 0x0F; - tempval |= (VOLTAGE_V25 << 4); - usb_write8(pAdapter, EFUSE_TEST+3, (tempval | 0x80)); - } - } else { - usb_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF); - - if (bWrite) { - /* Disable LDO 2.5V after read/write action */ - tempval = usb_read8(pAdapter, EFUSE_TEST+3); - usb_write8(pAdapter, EFUSE_TEST+3, (tempval & 0x7F)); - } - } -} - -void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf) -{ - - if (rtw_IOL_applied(Adapter)) { - rtw_hal_power_on(Adapter); - iol_mode_enable(Adapter, 1); - iol_read_efuse(Adapter, 0, _offset, _size_byte, pbuf); - iol_mode_enable(Adapter, 0); - } - return; -} - -/* Do not support BT */ -void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut) -{ - switch (type) { - case TYPE_EFUSE_MAX_SECTION: - { - u8 *pMax_section; - pMax_section = (u8 *)pOut; - *pMax_section = EFUSE_MAX_SECTION_88E; - } - break; - case TYPE_EFUSE_REAL_CONTENT_LEN: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; - } - break; - case TYPE_EFUSE_CONTENT_LEN_BANK: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E; - } - break; - case TYPE_AVAILABLE_EFUSE_BYTES_BANK: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - case TYPE_EFUSE_MAP_LEN: - { - u16 *pu2Tmp; - pu2Tmp = (u16 *)pOut; - *pu2Tmp = (u16)EFUSE_MAP_LEN_88E; - } - break; - case TYPE_EFUSE_PROTECT_BYTES_BANK: - { - u8 *pu1Tmp; - pu1Tmp = (u8 *)pOut; - *pu1Tmp = (u8)(EFUSE_OOB_PROTECT_BYTES_88E); - } - break; - default: - { - u8 *pu1Tmp; - pu1Tmp = (u8 *)pOut; - *pu1Tmp = 0; - } - break; - } -} - -u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data) -{ - u16 tmpaddr = 0; - u16 start_addr = efuse_addr; - u8 badworden = 0x0F; - u8 tmpdata[8]; - - _rtw_memset((void *)tmpdata, 0xff, PGPKT_DATA_SIZE); - - if (!(word_en&BIT0)) { - tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[0]); - efuse_OneByteWrite(pAdapter, start_addr++, data[1]); - - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[0]); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[1]); - if ((data[0] != tmpdata[0]) || (data[1] != tmpdata[1])) - badworden &= (~BIT0); - } - if (!(word_en&BIT1)) { - tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[2]); - efuse_OneByteWrite(pAdapter, start_addr++, data[3]); - - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[2]); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[3]); - if ((data[2] != tmpdata[2]) || (data[3] != tmpdata[3])) - badworden &= (~BIT1); - } - if (!(word_en&BIT2)) { - tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[4]); - efuse_OneByteWrite(pAdapter, start_addr++, data[5]); - - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[4]); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[5]); - if ((data[4] != tmpdata[4]) || (data[5] != tmpdata[5])) - badworden &= (~BIT2); - } - if (!(word_en&BIT3)) { - tmpaddr = start_addr; - efuse_OneByteWrite(pAdapter, start_addr++, data[6]); - efuse_OneByteWrite(pAdapter, start_addr++, data[7]); - - efuse_OneByteRead(pAdapter, tmpaddr, &tmpdata[6]); - efuse_OneByteRead(pAdapter, tmpaddr+1, &tmpdata[7]); - if ((data[6] != tmpdata[6]) || (data[7] != tmpdata[7])) - badworden &= (~BIT3); - } - return badworden; -} - -u16 Efuse_GetCurrentSize(struct adapter *pAdapter) -{ - int bContinual = true; - u16 efuse_addr = 0; - u8 hoffset = 0, hworden = 0; - u8 efuse_data, word_cnts = 0; - - rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); - - while (bContinual && - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && - AVAILABLE_EFUSE_ADDR(efuse_addr)) { - if (efuse_data != 0xFF) { - if ((efuse_data&0x1F) == 0x0F) { /* extended header */ - hoffset = efuse_data; - efuse_addr++; - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); - if ((efuse_data & 0x0F) == 0x0F) { - efuse_addr++; - continue; - } else { - hoffset = ((hoffset & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); - hworden = efuse_data & 0x0F; - } - } else { - hoffset = (efuse_data>>4) & 0x0F; - hworden = efuse_data & 0x0F; - } - word_cnts = Efuse_CalculateWordCnts(hworden); - /* read next header */ - efuse_addr = efuse_addr + (word_cnts*2)+1; - } else { - bContinual = false; - } - } - - rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr); - - return efuse_addr; -} - -int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data) -{ - u8 ReadState = PG_STATE_HEADER; - int bContinual = true; - int bDataEmpty = true; - u8 efuse_data, word_cnts = 0; - u16 efuse_addr = 0; - u8 hoffset = 0, hworden = 0; - u8 tmpidx = 0; - u8 tmpdata[8]; - u8 max_section = 0; - u8 tmp_header = 0; - - EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAX_SECTION, (void *)&max_section); - - if (data == NULL) - return false; - if (offset > max_section) - return false; - - _rtw_memset((void *)data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); - _rtw_memset((void *)tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); - - /* Efuse has been pre-programmed dummy 5Bytes at the end of Efuse by CP. */ - /* Skip dummy parts to prevent unexpected data read from Efuse. */ - /* By pass right now. 2009.02.19. */ - while (bContinual && AVAILABLE_EFUSE_ADDR(efuse_addr)) { - /* Header Read ------------- */ - if (ReadState & PG_STATE_HEADER) { - if (efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data) && (efuse_data != 0xFF)) { - if (EXT_HEADER(efuse_data)) { - tmp_header = efuse_data; - efuse_addr++; - efuse_OneByteRead(pAdapter, efuse_addr, &efuse_data); - if (!ALL_WORDS_DISABLED(efuse_data)) { - hoffset = ((tmp_header & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); - hworden = efuse_data & 0x0F; - } else { - DBG_88E("Error, All words disabled\n"); - efuse_addr++; - continue; - } - } else { - hoffset = (efuse_data>>4) & 0x0F; - hworden = efuse_data & 0x0F; - } - word_cnts = Efuse_CalculateWordCnts(hworden); - bDataEmpty = true; - - if (hoffset == offset) { - for (tmpidx = 0; tmpidx < word_cnts*2; tmpidx++) { - if (efuse_OneByteRead(pAdapter, efuse_addr+1+tmpidx, &efuse_data)) { - tmpdata[tmpidx] = efuse_data; - if (efuse_data != 0xff) - bDataEmpty = false; - } - } - if (bDataEmpty == false) { - ReadState = PG_STATE_DATA; - } else {/* read next header */ - efuse_addr = efuse_addr + (word_cnts*2)+1; - ReadState = PG_STATE_HEADER; - } - } else {/* read next header */ - efuse_addr = efuse_addr + (word_cnts*2)+1; - ReadState = PG_STATE_HEADER; - } - } else { - bContinual = false; - } - } else if (ReadState & PG_STATE_DATA) { - /* Data section Read ------------- */ - efuse_WordEnableDataRead(hworden, tmpdata, data); - efuse_addr = efuse_addr + (word_cnts*2)+1; - ReadState = PG_STATE_HEADER; - } - - } - - if ((data[0] == 0xff) && (data[1] == 0xff) && (data[2] == 0xff) && (data[3] == 0xff) && - (data[4] == 0xff) && (data[5] == 0xff) && (data[6] == 0xff) && (data[7] == 0xff)) - return false; - else - return true; -} - -static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, struct pgpkt *pFixPkt, u16 *pAddr) -{ - u8 originaldata[8], badworden = 0; - u16 efuse_addr = *pAddr; - u32 PgWriteSuccess = 0; - - _rtw_memset((void *)originaldata, 0xff, 8); - - if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata)) { - /* check if data exist */ - badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata); - - if (badworden != 0xf) { /* write fail */ - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata); - - if (!PgWriteSuccess) - return false; - else - efuse_addr = Efuse_GetCurrentSize(pAdapter); - } else { - efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; - } - } else { - efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) + 1; - } - *pAddr = efuse_addr; - return true; -} - -static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) -{ - bool bRet = false; - u16 efuse_addr = *pAddr, efuse_max_available_len = 0; - u8 pg_header = 0, tmp_header = 0, pg_header_temp = 0; - u8 repeatcnt = 0; - - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); - - while (efuse_addr < efuse_max_available_len) { - pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - - while (tmp_header == 0xFF) { - if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) - return false; - - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - } - - /* to write ext_header */ - if (tmp_header == pg_header) { - efuse_addr++; - pg_header_temp = pg_header; - pg_header = ((pTargetPkt->offset & 0x78) << 1) | pTargetPkt->word_en; - - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - - while (tmp_header == 0xFF) { - if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) - return false; - - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - } - - if ((tmp_header & 0x0F) == 0x0F) { /* word_en PG fail */ - if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) { - return false; - } else { - efuse_addr++; - continue; - } - } else if (pg_header != tmp_header) { /* offset PG fail */ - struct pgpkt fixPkt; - fixPkt.offset = ((pg_header_temp & 0xE0) >> 5) | ((tmp_header & 0xF0) >> 1); - fixPkt.word_en = tmp_header & 0x0F; - fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); - if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) - return false; - } else { - bRet = true; - break; - } - } else if ((tmp_header & 0x1F) == 0x0F) { /* wrong extended header */ - efuse_addr += 2; - continue; - } - } - - *pAddr = efuse_addr; - return bRet; -} - -static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) -{ - bool bRet = false; - u8 pg_header = 0, tmp_header = 0; - u16 efuse_addr = *pAddr; - u8 repeatcnt = 0; - - pg_header = ((pTargetPkt->offset << 4) & 0xf0) | pTargetPkt->word_en; - - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - - while (tmp_header == 0xFF) { - if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) - return false; - efuse_OneByteWrite(pAdapter, efuse_addr, pg_header); - efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header); - } - - if (pg_header == tmp_header) { - bRet = true; - } else { - struct pgpkt fixPkt; - fixPkt.offset = (tmp_header>>4) & 0x0F; - fixPkt.word_en = tmp_header & 0x0F; - fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en); - if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr)) - return false; - } - - *pAddr = efuse_addr; - return bRet; -} - -static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) -{ - u16 efuse_addr = *pAddr; - u8 badworden = 0; - u32 PgWriteSuccess = 0; - - badworden = 0x0f; - badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr+1, pTargetPkt->word_en, pTargetPkt->data); - if (badworden == 0x0F) { - /* write ok */ - return true; - } else { - /* reorganize other pg packet */ - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); - if (!PgWriteSuccess) - return false; - else - return true; - } -} - -static bool -hal_EfusePgPacketWriteHeader( - struct adapter *pAdapter, - u8 efuseType, - u16 *pAddr, - struct pgpkt *pTargetPkt) -{ - bool bRet = false; - - if (pTargetPkt->offset >= EFUSE_MAX_SECTION_BASE) - bRet = hal_EfusePgPacketWrite2ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); - else - bRet = hal_EfusePgPacketWrite1ByteHeader(pAdapter, efuseType, pAddr, pTargetPkt); - - return bRet; -} - -static bool wordEnMatched(struct pgpkt *pTargetPkt, struct pgpkt *pCurPkt, - u8 *pWden) -{ - u8 match_word_en = 0x0F; /* default all words are disabled */ - - /* check if the same words are enabled both target and current PG packet */ - if (((pTargetPkt->word_en & BIT0) == 0) && - ((pCurPkt->word_en & BIT0) == 0)) - match_word_en &= ~BIT0; /* enable word 0 */ - if (((pTargetPkt->word_en & BIT1) == 0) && - ((pCurPkt->word_en & BIT1) == 0)) - match_word_en &= ~BIT1; /* enable word 1 */ - if (((pTargetPkt->word_en & BIT2) == 0) && - ((pCurPkt->word_en & BIT2) == 0)) - match_word_en &= ~BIT2; /* enable word 2 */ - if (((pTargetPkt->word_en & BIT3) == 0) && - ((pCurPkt->word_en & BIT3) == 0)) - match_word_en &= ~BIT3; /* enable word 3 */ - - *pWden = match_word_en; - - if (match_word_en != 0xf) - return true; - else - return false; -} - -static bool hal_EfuseCheckIfDatafollowed(struct adapter *pAdapter, u8 word_cnts, u16 startAddr) -{ - bool bRet = false; - u8 i, efuse_data; - - for (i = 0; i < (word_cnts*2); i++) { - if (efuse_OneByteRead(pAdapter, (startAddr+i), &efuse_data) && (efuse_data != 0xFF)) - bRet = true; - } - return bRet; -} - -static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt) -{ - bool bRet = false; - u8 i, efuse_data = 0, cur_header = 0; - u8 matched_wden = 0, badworden = 0; - u16 startAddr = 0, efuse_max_available_len = 0, efuse_max = 0; - struct pgpkt curPkt; - - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len); - EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max); - - rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr); - startAddr %= EFUSE_REAL_CONTENT_LEN; - - while (1) { - if (startAddr >= efuse_max_available_len) { - bRet = false; - break; - } - - if (efuse_OneByteRead(pAdapter, startAddr, &efuse_data) && (efuse_data != 0xFF)) { - if (EXT_HEADER(efuse_data)) { - cur_header = efuse_data; - startAddr++; - efuse_OneByteRead(pAdapter, startAddr, &efuse_data); - if (ALL_WORDS_DISABLED(efuse_data)) { - bRet = false; - break; - } else { - curPkt.offset = ((cur_header & 0xE0) >> 5) | ((efuse_data & 0xF0) >> 1); - curPkt.word_en = efuse_data & 0x0F; - } - } else { - cur_header = efuse_data; - curPkt.offset = (cur_header>>4) & 0x0F; - curPkt.word_en = cur_header & 0x0F; - } - - curPkt.word_cnts = Efuse_CalculateWordCnts(curPkt.word_en); - /* if same header is found but no data followed */ - /* write some part of data followed by the header. */ - if ((curPkt.offset == pTargetPkt->offset) && - (!hal_EfuseCheckIfDatafollowed(pAdapter, curPkt.word_cnts, startAddr+1)) && - wordEnMatched(pTargetPkt, &curPkt, &matched_wden)) { - /* Here to write partial data */ - badworden = Efuse_WordEnableDataWrite(pAdapter, startAddr+1, matched_wden, pTargetPkt->data); - if (badworden != 0x0F) { - u32 PgWriteSuccess = 0; - /* if write fail on some words, write these bad words again */ - - PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data); - - if (!PgWriteSuccess) { - bRet = false; /* write fail, return */ - break; - } - } - /* partial write ok, update the target packet for later use */ - for (i = 0; i < 4; i++) { - if ((matched_wden & (0x1<word_en |= (0x1<word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); - } - /* read from next header */ - startAddr = startAddr + (curPkt.word_cnts*2) + 1; - } else { - /* not used header, 0xff */ - *pAddr = startAddr; - bRet = true; - break; - } - } - return bRet; -} - -static bool -hal_EfusePgCheckAvailableAddr( - struct adapter *pAdapter, - u8 efuseType - ) -{ - u16 efuse_max_available_len = 0; - - /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len); - - if (Efuse_GetCurrentSize(pAdapter) >= efuse_max_available_len) - return false; - return true; -} - -static void hal_EfuseConstructPGPkt(u8 offset, u8 word_en, u8 *pData, struct pgpkt *pTargetPkt) -{ - _rtw_memset((void *)pTargetPkt->data, 0xFF, sizeof(u8)*8); - pTargetPkt->offset = offset; - pTargetPkt->word_en = word_en; - efuse_WordEnableDataRead(word_en, pData, pTargetPkt->data); - pTargetPkt->word_cnts = Efuse_CalculateWordCnts(pTargetPkt->word_en); -} - -bool Efuse_PgPacketWrite(struct adapter *pAdapter, u8 offset, u8 word_en, u8 *pData) -{ - struct pgpkt targetPkt; - u16 startAddr = 0; - u8 efuseType = EFUSE_WIFI; - - if (!hal_EfusePgCheckAvailableAddr(pAdapter, efuseType)) - return false; - - hal_EfuseConstructPGPkt(offset, word_en, pData, &targetPkt); - - if (!hal_EfusePartialWriteCheck(pAdapter, efuseType, &startAddr, &targetPkt)) - return false; - - if (!hal_EfusePgPacketWriteHeader(pAdapter, efuseType, &startAddr, &targetPkt)) - return false; - - if (!hal_EfusePgPacketWriteData(pAdapter, efuseType, &startAddr, &targetPkt)) - return false; - - return true; -} - static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter) { u32 value32; diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index 4b59c8e392a9..94a5f93af49b 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -467,6 +467,8 @@ void rtl8188e_start_thread(struct adapter *padapter); void rtl8188e_stop_thread(struct adapter *padapter); void rtw_IOL_cmd_tx_pkt_buf_dump(struct adapter *Adapter, int len); +s32 iol_execute(struct adapter *padapter, u8 control); +void iol_mode_enable(struct adapter *padapter, u8 enable); s32 rtl8188e_iol_efuse_patch(struct adapter *padapter); void rtw_cancel_all_timer(struct adapter *padapter); -- cgit From 2331ef89ef249b3e07594252eaec1bf1a483c1f1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:09 +0200 Subject: staging: rtl8723au: struct mlme_priv->wps_beacon_ie is never set Remove all code trying to use it Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 54 +-------------------------- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 - drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 25 ------------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 - 4 files changed, 1 insertion(+), 82 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 2a960b1ba066..8ba346f54bbb 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -1227,60 +1227,9 @@ static void update_bcn_wmm_ie(struct rtw_adapter *padapter) static void update_bcn_wps_ie(struct rtw_adapter *padapter) { - const u8 *pwps_ie, *premainder_ie; - u8 *pwps_ie_src, *pbackup_remainder_ie = NULL; - uint wps_ielen = 0, wps_offset, remainder_ielen; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network; - unsigned char *ie = pnetwork->IEs; - u32 ielen = pnetwork->IELength; - DBG_8723A("%s\n", __func__); - pwps_ie_src = pmlmepriv->wps_beacon_ie; - if (pwps_ie_src == NULL) - return; - - pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, - WLAN_OUI_TYPE_MICROSOFT_WPS, - ie + _FIXED_IE_LENGTH_, - ielen - _FIXED_IE_LENGTH_); - - if (pwps_ie == NULL || pwps_ie[1] == 0) - return; - - wps_ielen = pwps_ie[1]; - wps_offset = (uint)(pwps_ie-ie); - - premainder_ie = pwps_ie + wps_ielen; - - remainder_ielen = ielen - wps_offset - wps_ielen; - - if (remainder_ielen > 0) { - pbackup_remainder_ie = kmalloc(remainder_ielen, GFP_ATOMIC); - if (pbackup_remainder_ie) - memcpy(pbackup_remainder_ie, premainder_ie, - remainder_ielen); - } - - wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */ - if ((wps_offset+wps_ielen+2+remainder_ielen)<= MAX_IE_SZ) - { - memcpy(ie + wps_offset, pwps_ie_src, wps_ielen + 2); - pwps_ie += (wps_ielen+2); - - if (pbackup_remainder_ie) - memcpy(ie + wps_offset + wps_ielen + 2, - pbackup_remainder_ie, remainder_ielen); - - /* update IELength */ - pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen; - } - - if (pbackup_remainder_ie) - kfree(pbackup_remainder_ie); + return; } static void update_bcn_p2p_ie(struct rtw_adapter *padapter) @@ -1966,7 +1915,6 @@ void start_ap_mode23a(struct rtw_adapter *padapter) for (i = 0; ista_aid[i] = NULL; - pmlmepriv->wps_beacon_ie = NULL; pmlmepriv->wps_probe_resp_ie = NULL; pmlmepriv->wps_assoc_resp_ie = NULL; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 9a8c9ffd1837..eefe40a7a564 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -87,8 +87,6 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) #ifdef CONFIG_8723AU_AP_MODE kfree(pmlmepriv->assoc_req); kfree(pmlmepriv->assoc_rsp); - rtw_free_mlme_ie_data(&pmlmepriv->wps_beacon_ie, - &pmlmepriv->wps_beacon_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 4047f6dadff2..8590faa483fa 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1534,31 +1534,6 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) "Association Request - possible WPS use\n"); pstat->flags |= WLAN_STA_MAYBE_WPS; } - - /* AP support WPA/RSN, and sta is going to do WPS, but AP - is not ready */ - /* that the selected registrar of AP is _FLASE */ - if (psecuritypriv->wpa_psk > 0 && - pstat->flags & (WLAN_STA_WPS|WLAN_STA_MAYBE_WPS)) { - if (pmlmepriv->wps_beacon_ie) { - u8 selected_registrar = 0; - - rtw_get_wps_attr_content23a( - pmlmepriv->wps_beacon_ie, - pmlmepriv->wps_beacon_ie_len, - WPS_ATTR_SELECTED_REGISTRAR, - &selected_registrar, NULL); - - if (!selected_registrar) { - DBG_8723A("selected_registrar is false," - "or AP is not ready to do " - "WPS\n"); - - status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA; - goto OnAssocReq23aFail; - } - } - } } else { int copy_len; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index a67954569d3e..6dccfb045ffe 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -167,8 +167,6 @@ struct mlme_priv { u8 *wps_assoc_resp_ie; u8 *wps_probe_resp_ie; u32 wps_probe_resp_ie_len; - u8 *wps_beacon_ie; - u32 wps_beacon_ie_len; u32 p2p_go_probe_resp_ie_len; /* for GO */ u32 p2p_assoc_req_ie_len; u8 *p2p_beacon_ie; -- cgit From 302b1cd631cf495731194d15d69d670b5843ea20 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:10 +0200 Subject: staging: rtl8723au: Remove unused mlme_priv->wps_assoc_resp_ie and friends Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 1 - drivers/staging/rtl8723au/core/rtw_mlme.c | 2 -- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 10 ---------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 -- 4 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 8ba346f54bbb..76e23575b7e5 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -1916,7 +1916,6 @@ void start_ap_mode23a(struct rtw_adapter *padapter) pstapriv->sta_aid[i] = NULL; pmlmepriv->wps_probe_resp_ie = NULL; - pmlmepriv->wps_assoc_resp_ie = NULL; pmlmepriv->p2p_beacon_ie = NULL; pmlmepriv->p2p_probe_resp_ie = NULL; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index eefe40a7a564..c873cb3741f5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -91,8 +91,6 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) &pmlmepriv->wps_probe_req_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, &pmlmepriv->wps_probe_resp_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wps_assoc_resp_ie, - &pmlmepriv->wps_assoc_resp_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->p2p_beacon_ie, &pmlmepriv->p2p_beacon_ie_len); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 8590faa483fa..d995bec97675 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3137,16 +3137,6 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, REALTEK_96B_IE, &pattrib->pktlen); } - /* add WPS IE ie for wps 2.0 */ - if (pmlmepriv->wps_assoc_resp_ie && - pmlmepriv->wps_assoc_resp_ie_len > 0) { - memcpy(pframe, pmlmepriv->wps_assoc_resp_ie, - pmlmepriv->wps_assoc_resp_ie_len); - - pframe += pmlmepriv->wps_assoc_resp_ie_len; - pattrib->pktlen += pmlmepriv->wps_assoc_resp_ie_len; - } - pattrib->last_txcmdsz = pattrib->pktlen; dump_mgntframe23a(padapter, pmgntframe); diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index 6dccfb045ffe..c45a9f0da47e 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -163,8 +163,6 @@ struct mlme_priv { u32 assoc_req_len; u32 assoc_rsp_len; u8 *assoc_rsp; - u32 wps_assoc_resp_ie_len; - u8 *wps_assoc_resp_ie; u8 *wps_probe_resp_ie; u32 wps_probe_resp_ie_len; u32 p2p_go_probe_resp_ie_len; /* for GO */ -- cgit From 86bbac609dc6ebf51982506ac14aab091456b92d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:11 +0200 Subject: staging: rtl8723au: Remove unused struct mlme_priv->wps_probe_resp_ie Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 2 -- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 -- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 42 ++------------------------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 -- 4 files changed, 3 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 76e23575b7e5..753a0fe8b96b 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -1915,8 +1915,6 @@ void start_ap_mode23a(struct rtw_adapter *padapter) for (i = 0; ista_aid[i] = NULL; - pmlmepriv->wps_probe_resp_ie = NULL; - pmlmepriv->p2p_beacon_ie = NULL; pmlmepriv->p2p_probe_resp_ie = NULL; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index c873cb3741f5..0653f953cc6a 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -89,8 +89,6 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) kfree(pmlmepriv->assoc_rsp); rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, - &pmlmepriv->wps_probe_resp_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->p2p_beacon_ie, &pmlmepriv->p2p_beacon_ie_len); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index d995bec97675..d1c40ae46541 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2524,13 +2524,11 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, struct xmit_priv *pxmitpriv = &padapter->xmitpriv; #ifdef CONFIG_8723AU_AP_MODE const u8 *pwps_ie; - uint wps_ielen; u8 *ssid_ie; int ssid_ielen; int ssid_ielen_diff; u8 buf[MAX_IE_SZ]; u8 *ies; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; #endif struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -2594,43 +2592,9 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, cur_network->IELength - _FIXED_IE_LENGTH_); - /* inerset & update wps_probe_resp_ie */ - if (pmlmepriv->wps_probe_resp_ie && pwps_ie && pwps_ie[1] > 0) { - uint wps_offset, remainder_ielen; - const u8 *premainder_ie; - - wps_ielen = pwps_ie[1]; - wps_offset = (uint)(pwps_ie - cur_network->IEs); - - premainder_ie = pwps_ie + wps_ielen; - - remainder_ielen = cur_network->IELength - wps_offset - - wps_ielen; - - memcpy(pframe, cur_network->IEs, wps_offset); - pframe += wps_offset; - pattrib->pktlen += wps_offset; - - /* to get ie data len */ - wps_ielen = (uint)pmlmepriv->wps_probe_resp_ie[1]; - if (wps_offset + wps_ielen + 2 <= MAX_IE_SZ) { - memcpy(pframe, pmlmepriv->wps_probe_resp_ie, - wps_ielen+2); - pframe += wps_ielen+2; - pattrib->pktlen += wps_ielen+2; - } - - if (wps_offset + wps_ielen + 2 + remainder_ielen <= - MAX_IE_SZ) { - memcpy(pframe, premainder_ie, remainder_ielen); - pframe += remainder_ielen; - pattrib->pktlen += remainder_ielen; - } - } else { - memcpy(pframe, cur_network->IEs, cur_network->IELength); - pframe += cur_network->IELength; - pattrib->pktlen += cur_network->IELength; - } + memcpy(pframe, cur_network->IEs, cur_network->IELength); + pframe += cur_network->IELength; + pattrib->pktlen += cur_network->IELength; /* retrieve SSID IE from cur_network->Ssid */ ies = pmgntframe->buf_addr + TXDESC_OFFSET + diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index c45a9f0da47e..ef70e4aad74d 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -163,8 +163,6 @@ struct mlme_priv { u32 assoc_req_len; u32 assoc_rsp_len; u8 *assoc_rsp; - u8 *wps_probe_resp_ie; - u32 wps_probe_resp_ie_len; u32 p2p_go_probe_resp_ie_len; /* for GO */ u32 p2p_assoc_req_ie_len; u8 *p2p_beacon_ie; -- cgit From a8607ffcf2783662eb757477d3a7493d0f087ed2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:12 +0200 Subject: staging: rtl8723au: Remove obsolete mlme_priv->p2p_* entries Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 3 --- drivers/staging/rtl8723au/core/rtw_mlme.c | 11 ----------- drivers/staging/rtl8723au/include/rtw_mlme.h | 10 ---------- 3 files changed, 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 753a0fe8b96b..7f1c68778618 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -1915,9 +1915,6 @@ void start_ap_mode23a(struct rtw_adapter *padapter) for (i = 0; ista_aid[i] = NULL; - pmlmepriv->p2p_beacon_ie = NULL; - pmlmepriv->p2p_probe_resp_ie = NULL; - /* for ACL */ INIT_LIST_HEAD(&pacl_list->acl_node_q.queue); pacl_list->num = 0; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 0653f953cc6a..f9ead3ec34f7 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -90,17 +90,6 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->p2p_beacon_ie, - &pmlmepriv->p2p_beacon_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_req_ie, - &pmlmepriv->p2p_probe_req_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_resp_ie, - &pmlmepriv->p2p_probe_resp_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->p2p_go_probe_resp_ie, - &pmlmepriv->p2p_go_probe_resp_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->p2p_assoc_req_ie, - &pmlmepriv->p2p_assoc_req_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len); rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_req_ie, diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index ef70e4aad74d..be6099818c9b 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -163,16 +163,6 @@ struct mlme_priv { u32 assoc_req_len; u32 assoc_rsp_len; u8 *assoc_rsp; - u32 p2p_go_probe_resp_ie_len; /* for GO */ - u32 p2p_assoc_req_ie_len; - u8 *p2p_beacon_ie; - u8 *p2p_probe_req_ie; - u8 *p2p_probe_resp_ie; - u8 *p2p_go_probe_resp_ie; /* for GO */ - u8 *p2p_assoc_req_ie; - u32 p2p_beacon_ie_len; - u32 p2p_probe_req_ie_len; - u32 p2p_probe_resp_ie_len; u8 *wfd_assoc_req_ie; u32 wfd_assoc_req_ie_len; -- cgit From d4fc0213dd9a72611af586d2d6134807951111b2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:13 +0200 Subject: staging: rtl8723au: Remove unused struct mlme_priv->wfd_* entries Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 1 - drivers/staging/rtl8723au/core/rtw_mlme.c | 11 ----------- drivers/staging/rtl8723au/include/rtw_mlme.h | 12 ------------ 3 files changed, 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 7f1c68778618..18c9b307b4b4 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -24,7 +24,6 @@ extern unsigned char WMM_OUI23A[]; extern unsigned char WPS_OUI23A[]; extern unsigned char P2P_OUI23A[]; -extern unsigned char WFD_OUI23A[]; void init_mlme_ap_info23a(struct rtw_adapter *padapter) { diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index f9ead3ec34f7..77714fe259a2 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -89,17 +89,6 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) kfree(pmlmepriv->assoc_rsp); rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len); - - rtw_free_mlme_ie_data(&pmlmepriv->wfd_beacon_ie, - &pmlmepriv->wfd_beacon_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_req_ie, - &pmlmepriv->wfd_probe_req_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_resp_ie, - &pmlmepriv->wfd_probe_resp_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wfd_go_probe_resp_ie, - &pmlmepriv->wfd_go_probe_resp_ie_len); - rtw_free_mlme_ie_data(&pmlmepriv->wfd_assoc_req_ie, - &pmlmepriv->wfd_assoc_req_ie_len); #endif } diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index be6099818c9b..277d90b76608 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -163,8 +163,6 @@ struct mlme_priv { u32 assoc_req_len; u32 assoc_rsp_len; u8 *assoc_rsp; - u8 *wfd_assoc_req_ie; - u32 wfd_assoc_req_ie_len; #ifdef CONFIG_8723AU_AP_MODE /* Number of associated Non-ERP stations (i.e., stations using 802.11b @@ -197,16 +195,6 @@ struct mlme_priv { u8 update_bcn; #endif /* ifdef CONFIG_8723AU_AP_MODE */ - - u8 *wfd_beacon_ie; - u8 *wfd_probe_req_ie; - u8 *wfd_probe_resp_ie; - u8 *wfd_go_probe_resp_ie; /* for GO */ - - u32 wfd_beacon_ie_len; - u32 wfd_probe_req_ie_len; - u32 wfd_probe_resp_ie_len; - u32 wfd_go_probe_resp_ie_len; /* for GO */ }; void rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf); -- cgit From 2bd3b4fb370be0ad529975273399ccb60968a266 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:14 +0200 Subject: staging: rtl8723au: Remove write-only struct security_priv->authenticator_ie Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_cmd.c | 13 ------------- drivers/staging/rtl8723au/include/rtw_security.h | 1 - 2 files changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c index 1696cb8b17cb..35f879eaa665 100644 --- a/drivers/staging/rtl8723au/core/rtw_cmd.c +++ b/drivers/staging/rtl8723au/core/rtw_cmd.c @@ -464,7 +464,6 @@ exit: int rtw_joinbss_cmd23a(struct rtw_adapter *padapter, struct wlan_network *pnetwork) { - u8 *auth; int res = _SUCCESS; struct wlan_bssid_ex *psecnetwork; struct cmd_obj *pcmd; @@ -532,18 +531,6 @@ int rtw_joinbss_cmd23a(struct rtw_adapter *padapter, memcpy(psecnetwork, &pnetwork->network, get_wlan_bssid_ex_sz(&pnetwork->network)); - auth = &psecuritypriv->authenticator_ie[0]; - psecuritypriv->authenticator_ie[0] = - (unsigned char)psecnetwork->IELength; - - if ((psecnetwork->IELength-12) < (256-1)) { - memcpy(&psecuritypriv->authenticator_ie[1], - &psecnetwork->IEs[12], psecnetwork->IELength - 12); - } else { - memcpy(&psecuritypriv->authenticator_ie[1], - &psecnetwork->IEs[12], 256 - 1); - } - psecnetwork->IELength = 0; /* Added by Albert 2009/02/18 */ /* If the the driver wants to use the bssid to create the diff --git a/drivers/staging/rtl8723au/include/rtw_security.h b/drivers/staging/rtl8723au/include/rtw_security.h index 8b8433365e32..8ed7b2fd6d13 100644 --- a/drivers/staging/rtl8723au/include/rtw_security.h +++ b/drivers/staging/rtl8723au/include/rtw_security.h @@ -145,7 +145,6 @@ struct security_priv { u8 assoc_info[600]; u8 szofcapability[256]; /* for wpa2 usage */ u8 oidassociation[512]; /* for wpa/wpa2 usage */ - u8 authenticator_ie[256]; /* store ap security information element */ u8 supplicant_ie[256]; /* store sta security information element */ /* for tkip countermeasure */ -- cgit From a131aac3b67df908f185402cabbfcb38b891df43 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:15 +0200 Subject: staging: rtl8723au: Remove (hopefully) last duplicate define of WLAN_EID_RSN So much for thinking the removal of the previous 217 duplicate copies would suffice .... Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +++--- drivers/staging/rtl8723au/include/rtw_security.h | 2 -- 3 files changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index f2c4a0e89ed4..efad6f8ccfb8 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -547,7 +547,7 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher, return _FAIL; } - if (*rsn_ie != _WPA2_IE_ID_ || *(rsn_ie+1) != (u8)(rsn_ie_len - 2)) { + if (*rsn_ie != WLAN_EID_RSN || *(rsn_ie+1) != (u8)(rsn_ie_len - 2)) { return _FAIL; } diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 77714fe259a2..fc848316c3f5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -2031,7 +2031,7 @@ int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie, authmode = WLAN_EID_VENDOR_SPECIFIC; if (ndisauthmode == Ndis802_11AuthModeWPA2 || ndisauthmode == Ndis802_11AuthModeWPA2PSK) - authmode = _WPA2_IE_ID_; + authmode = WLAN_EID_RSN; if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) { memcpy(out_ie + ielength, psecuritypriv->wps_ie, @@ -2039,7 +2039,7 @@ int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie, ielength += psecuritypriv->wps_ie_len; } else if (authmode == WLAN_EID_VENDOR_SPECIFIC || - authmode == _WPA2_IE_ID_) { + authmode == WLAN_EID_RSN) { /* copy RSN or SSN */ memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0], psecuritypriv->supplicant_ie[1] + 2); @@ -2050,7 +2050,7 @@ int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie, if (iEntry < 0) return ielength; else { - if (authmode == _WPA2_IE_ID_) + if (authmode == WLAN_EID_RSN) ielength = rtw_append_pmkid(adapter, iEntry, out_ie, ielength); } diff --git a/drivers/staging/rtl8723au/include/rtw_security.h b/drivers/staging/rtl8723au/include/rtw_security.h index 8ed7b2fd6d13..624a9d788e45 100644 --- a/drivers/staging/rtl8723au/include/rtw_security.h +++ b/drivers/staging/rtl8723au/include/rtw_security.h @@ -23,8 +23,6 @@ #define is_wep_enc(alg) (alg == WLAN_CIPHER_SUITE_WEP40 || \ alg == WLAN_CIPHER_SUITE_WEP104) -#define _WPA2_IE_ID_ 0x30 - #define SHA256_MAC_LEN 32 #define AES_BLOCK_SIZE 16 #define AES_PRIV_SIZE (4 * 44) -- cgit From eb4f07bf859d412bf4662e65d4ed2fc06994f87b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:16 +0200 Subject: staging: rtl8723au: rtw_survey_event_cb23a(): Remember to clone beacon data We need to clone all the beacon information, not just the IE data, in particular as the long term goal is to stop carrying this information in the IE data. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index fc848316c3f5..c91ea8c64af0 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -621,6 +621,11 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) memcpy(pmlmepriv->cur_network.network.IEs, pnetwork->IEs, 8); + pmlmepriv->cur_network.network.beacon_interval = + pnetwork->beacon_interval; + pmlmepriv->cur_network.network.capability = + pnetwork->capability; + pmlmepriv->cur_network.network.tsf = pnetwork->tsf; spin_lock_bh(&pmlmepriv->scanned_queue.lock); ibss_wlan = rtw_find_network23a( &pmlmepriv->scanned_queue, @@ -628,6 +633,12 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) if (ibss_wlan) { memcpy(ibss_wlan->network.IEs, pnetwork->IEs, 8); + pmlmepriv->cur_network.network.beacon_interval = + ibss_wlan->network.beacon_interval; + pmlmepriv->cur_network.network.capability = + ibss_wlan->network.capability; + pmlmepriv->cur_network.network.tsf = + ibss_wlan->network.tsf; spin_unlock_bh(&pmlmepriv->scanned_queue.lock); goto exit; } -- cgit From 2bde0527538802d38b1bed939aefde999600c1ca Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:17 +0200 Subject: staging: rtl8723au: rtw_joinbss_update_network23a(): update beacon info as well We need to copy over the beacon info (interval, capability, tsf) as well as the IE data. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index c91ea8c64af0..b7a35288a1f0 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1035,6 +1035,10 @@ rtw_joinbss_update_network23a(struct rtw_adapter *padapter, memcpy(&cur_network->network.IEs[0], &ptarget_wlan->network.IEs[0], MAX_IE_SZ); + cur_network->network.capability = ptarget_wlan->network.capability; + cur_network->network.beacon_interval = + ptarget_wlan->network.beacon_interval; + cur_network->network.tsf = ptarget_wlan->network.tsf; cur_network->aid = pnetwork->join_res; rtw_set_signal_stat_timer(&padapter->recvpriv); -- cgit From d642a0a0b91d220f3c44bba84e54f8983b781fde Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:18 +0200 Subject: staging: rtl8723au: issue_probersp(): Don't insert beacon data twice In case of AP mode, we were inserting the beacon data twice in the probe_resp frame, leading to a corrupted on the wire frame. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index d1c40ae46541..4f9e5a918bb0 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2592,7 +2592,8 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, cur_network->IELength - _FIXED_IE_LENGTH_); - memcpy(pframe, cur_network->IEs, cur_network->IELength); + memcpy(pframe, cur_network->IEs + _FIXED_IE_LENGTH_, + cur_network->IELength - _FIXED_IE_LENGTH_); pframe += cur_network->IELength; pattrib->pktlen += cur_network->IELength; -- cgit From ad8686bc05adc2b8301d749f5958bd904f3a46ee Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sat, 21 Jun 2014 16:50:19 +0200 Subject: staging: rtl8723au: issue_probersp(): No need to calculate location of IEs, we know where they are Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 4f9e5a918bb0..03ced01ef82b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2528,7 +2528,6 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, int ssid_ielen; int ssid_ielen_diff; u8 buf[MAX_IE_SZ]; - u8 *ies; #endif struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; @@ -2598,12 +2597,10 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, pattrib->pktlen += cur_network->IELength; /* retrieve SSID IE from cur_network->Ssid */ - ies = pmgntframe->buf_addr + TXDESC_OFFSET + - sizeof(struct ieee80211_hdr_3addr); - ssid_ie = rtw_get_ie23a(ies + _FIXED_IE_LENGTH_, WLAN_EID_SSID, - &ssid_ielen, - pframe - ies - _FIXED_IE_LENGTH_); + ssid_ie = rtw_get_ie23a(mgmt->u.probe_resp.variable, + WLAN_EID_SSID, &ssid_ielen, + pframe - mgmt->u.probe_resp.variable); ssid_ielen_diff = cur_network->Ssid.ssid_len - ssid_ielen; -- cgit From 40954b63859f373ad83454a2598bc8d251973a34 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:16 +0200 Subject: staging: rtl8723au: Remove unused size defines for mgmt frame elements Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/wifi.h | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 3f64546ef807..bd581eca8015 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -38,19 +38,6 @@ #define EID_BSSIntolerantChlReport 73 -/* --------------------------------------------------------------------------- - Below is the fixed elements... ------------------------------------------------------------------------------*/ -#define _AUTH_ALGM_NUM_ 2 -#define _AUTH_SEQ_NUM_ 2 -#define _BEACON_ITERVAL_ 2 -#define _CAPABILITY_ 2 -#define _CURRENT_APADDR_ 6 -#define _LISTEN_INTERVAL_ 2 -#define _ASOC_ID_ 2 -#define _STATUS_CODE_ 2 -#define _TIMESTAMP_ 8 - /*----------------------------------------------------------------------------- Below is the definition for 802.11n ------------------------------------------------------------------------------*/ -- cgit From 60e78f3df4f5b9bc3fd61755fd00e69c4923ac1d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:17 +0200 Subject: staging: rtl8723au: Remove usage of _{RE, }ASOCREQ_IE_OFFSET_ Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 6c06d5772cb4..ebb98a04d5c8 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2535,16 +2535,18 @@ void rtw_cfg80211_indicate_sta_assoc(struct rtw_adapter *padapter, { struct station_info sinfo; u8 ie_offset; + if (ieee80211_is_assoc_req(hdr->frame_control)) - ie_offset = _ASOCREQ_IE_OFFSET_; + ie_offset = offsetof(struct ieee80211_mgmt, + u.assoc_req.variable); else /* WIFI_REASSOCREQ */ - ie_offset = _REASOCREQ_IE_OFFSET_; + ie_offset = offsetof(struct ieee80211_mgmt, + u.reassoc_req.variable); sinfo.filled = 0; sinfo.filled = STATION_INFO_ASSOC_REQ_IES; - sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset; - sinfo.assoc_req_ies_len = - frame_len - WLAN_HDR_A3_LEN - ie_offset; + sinfo.assoc_req_ies = pmgmt_frame + ie_offset; + sinfo.assoc_req_ies_len = frame_len - ie_offset; cfg80211_new_sta(ndev, hdr->addr2, &sinfo, GFP_ATOMIC); } #else /* defined(RTW_USE_CFG80211_STA_EVENT) */ -- cgit From 5b5cf9941fd01da487e3324668d2237226fdeb23 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:18 +0200 Subject: staging: rtl8723au: Remove unused IE offset #defines Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/wifi.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index bd581eca8015..d07fd12ed8c4 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -23,14 +23,6 @@ */ #define WiFiNavUpperUs 30000 /* 30 ms */ -#define _ASOCREQ_IE_OFFSET_ 4 /* excluding wlan_hdr */ -#define _ASOCRSP_IE_OFFSET_ 6 -#define _REASOCREQ_IE_OFFSET_ 10 -#define _REASOCRSP_IE_OFFSET_ 6 -#define _PROBEREQ_IE_OFFSET_ 0 -#define _PROBERSP_IE_OFFSET_ 12 -#define _AUTH_IE_OFFSET_ 6 -#define _DEAUTH_IE_OFFSET_ 0 #define _BEACON_IE_OFFSET_ 12 #define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ -- cgit From 1d33b0766385957c0e70ff32ec501d1f775c8316 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:19 +0200 Subject: staging: rtl8723au: rtw_get_cur_max_rate(): Use _FIXED_IE_LENGTH_ instead of hardcoded value Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index ebb98a04d5c8..9584688a5e9d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -1190,8 +1190,9 @@ static u16 rtw_get_cur_max_rate(struct rtw_adapter *adapter) u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0; u16 mcs_rate = 0; - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12], - pcur_bss->IELength - 12); + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, + &pcur_bss->IEs[_FIXED_IE_LENGTH_], + pcur_bss->IELength - _FIXED_IE_LENGTH_); if (p && p[1] > 0) { pht_capie = (struct ieee80211_ht_cap *)(p + 2); -- cgit From fb5fd46dbdd32faecd5f826f2d47e798732b7b4d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:20 +0200 Subject: staging: rtl8723au: rtw_add_beacon(): Construct a full beacon frame for validation Clean up and correct the beacon frame validation using a full beacon frame, and pass that to rtw_check_beacon_data23a(). Previous we went through hoops to construct the frame, minus the ieee80211_3addr header which just made it more complicated, and resulted in inconsistencies and bugs. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 8 +++++--- drivers/staging/rtl8723au/include/rtw_ap.h | 3 ++- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 24 +++++++++++------------ 3 files changed, 19 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 18c9b307b4b4..08e933a3b531 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -789,8 +789,8 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) update_bmc_sta(padapter); } -int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, - unsigned int len) +int rtw_check_beacon_data23a(struct rtw_adapter *padapter, + struct ieee80211_mgmt *mgmt, unsigned int len) { int ret = _SUCCESS; u8 *p; @@ -808,7 +808,9 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_bssid_ex *pbss_network = &pmlmepriv->cur_network.network; u8 *ie = pbss_network->IEs; - + u8 *pbuf = mgmt->u.beacon.variable - _FIXED_IE_LENGTH_; + len -= (offsetof(struct ieee80211_mgmt, u.beacon.variable) - + _FIXED_IE_LENGTH_); /* SSID */ /* Supported rates */ /* DS Params */ diff --git a/drivers/staging/rtl8723au/include/rtw_ap.h b/drivers/staging/rtl8723au/include/rtw_ap.h index 8d9be5a36eae..9f8d235c992f 100644 --- a/drivers/staging/rtl8723au/include/rtw_ap.h +++ b/drivers/staging/rtl8723au/include/rtw_ap.h @@ -32,7 +32,8 @@ void update_beacon23a(struct rtw_adapter *padapter, u8 ie_id, u8 *oui, u8 tx); void add_RATid23a(struct rtw_adapter *padapter, struct sta_info *psta, u8 rssi_level); void expire_timeout_chk23a(struct rtw_adapter *padapter); void update_sta_info23a_apmode23a(struct rtw_adapter *padapter, struct sta_info *psta); -int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf, unsigned int len); +int rtw_check_beacon_data23a(struct rtw_adapter *padapter, + struct ieee80211_mgmt *mgmt, unsigned int len); void rtw_ap_restore_network(struct rtw_adapter *padapter); void rtw_set_macaddr_acl23a(struct rtw_adapter *padapter, int mode); int rtw_acl_add_sta23a(struct rtw_adapter *padapter, u8 *addr); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 9584688a5e9d..2a4a696d46a7 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -2916,10 +2916,11 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, { int ret = 0; u8 *pbuf; - uint len, wps_ielen = 0; + uint len, ielen, wps_ielen = 0; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct wlan_bssid_ex *bss = &pmlmepriv->cur_network.network; const struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)head; + struct ieee80211_mgmt *tmpmgmt; /* struct sta_priv *pstapriv = &padapter->stapriv; */ DBG_8723A("%s beacon_head_len =%zu, beacon_tail_len =%zu\n", @@ -2934,33 +2935,32 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head, pbuf = kzalloc(head_len + tail_len, GFP_KERNEL); if (!pbuf) return -ENOMEM; + tmpmgmt = (struct ieee80211_mgmt *)pbuf; bss->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int); bss->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); bss->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); /* 24 = beacon header len. */ - memcpy(pbuf, (void *)head + sizeof(struct ieee80211_hdr_3addr), - head_len - sizeof(struct ieee80211_hdr_3addr)); - memcpy(pbuf + head_len - sizeof(struct ieee80211_hdr_3addr), - (void *)tail, tail_len); - - len = head_len + tail_len - sizeof(struct ieee80211_hdr_3addr); + memcpy(pbuf, (void *)head, head_len); + memcpy(pbuf + head_len, (void *)tail, tail_len); + len = head_len + tail_len; + ielen = len - offsetof(struct ieee80211_mgmt, u.beacon.variable); /* check wps ie if inclued */ if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, - pbuf + _FIXED_IE_LENGTH_, - len - _FIXED_IE_LENGTH_)) + tmpmgmt->u.beacon.variable, ielen)) DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen); /* pbss_network->IEs will not include p2p_ie, wfd ie */ - rtw_ies_remove_ie23a(pbuf, &len, _BEACON_IE_OFFSET_, + rtw_ies_remove_ie23a(tmpmgmt->u.beacon.variable, &ielen, 0, WLAN_EID_VENDOR_SPECIFIC, P2P_OUI23A, 4); - rtw_ies_remove_ie23a(pbuf, &len, _BEACON_IE_OFFSET_, + rtw_ies_remove_ie23a(tmpmgmt->u.beacon.variable, &ielen, 0, WLAN_EID_VENDOR_SPECIFIC, WFD_OUI23A, 4); - if (rtw_check_beacon_data23a(adapter, pbuf, len) == _SUCCESS) { + len = ielen + offsetof(struct ieee80211_mgmt, u.beacon.variable); + if (rtw_check_beacon_data23a(adapter, tmpmgmt, len) == _SUCCESS) { ret = 0; } else { ret = -EINVAL; -- cgit From 51a26d26feec3e8d41092f33fde6b111961d59b2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:21 +0200 Subject: staging: rtl8723au: rtw_check_beacon_data23a(): Capability is already uptodate in cur_network Beacon capability was already added to mlme_priv->cur_network before calling this function, so no need to retrieve it from the IE array again. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 08e933a3b531..c19ed951d103 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -797,7 +797,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pHT_caps_ie = NULL; u8 *pHT_info_ie = NULL; struct sta_info *psta = NULL; - u16 cap, ht_cap = false; + u16 ht_cap = false; uint ie_len = 0; int group_cipher, pairwise_cipher; u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX]; @@ -844,9 +844,6 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, memcpy(pbss_network->MacAddress, myid(&padapter->eeprompriv), ETH_ALEN); - /* capability */ - cap = get_unaligned_le16(ie); - /* SSID */ p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_SSID, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_)); @@ -894,7 +891,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, ERP_IE_handler23a(padapter, p); /* update privacy/security */ - if (cap & BIT(4)) + if (pbss_network->capability & BIT(4)) pbss_network->Privacy = 1; else pbss_network->Privacy = 0; -- cgit From e61fc7cf90c9eb6af8380e2b02e28c60d4ee0ef5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:22 +0200 Subject: staging: rtl8723au: Use _FIXED_IE_LEN_ instead of hard coded value This should help catching all the users once we stop carrying the fixed beacon elements in the IE array. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 14 ++++++++------ drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index b7a35288a1f0..66f24dcb20a8 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1929,7 +1929,7 @@ int rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie, unsigned int ielength = 0; unsigned int i, j; - i = 12; /* after the fixed IE */ + i = _FIXED_IE_LENGTH_; /* after the fixed IE */ while (i < in_len) { ielength = initial_out_len; @@ -2039,8 +2039,8 @@ int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie, "ndissecuritytype=%d\n", ndisauthmode, ndissecuritytype)); /* copy fixed ie only */ - memcpy(out_ie, in_ie, 12); - ielength = 12; + memcpy(out_ie, in_ie, _FIXED_IE_LENGTH_); + ielength = _FIXED_IE_LENGTH_; if (ndisauthmode == Ndis802_11AuthModeWPA || ndisauthmode == Ndis802_11AuthModeWPAPSK) authmode = WLAN_EID_VENDOR_SPECIFIC; @@ -2171,7 +2171,8 @@ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, phtpriv->ht_option = false; - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, in_ie + 12, in_len -12); + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, in_ie + _FIXED_IE_LENGTH_, + in_len - _FIXED_IE_LENGTH_); if (p && p[1] > 0) { u32 rx_packet_offset, max_recvbuf_sz; @@ -2216,8 +2217,9 @@ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, phtpriv->ht_option = true; - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, in_ie + 12, - in_len -12); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, + in_ie + _FIXED_IE_LENGTH_, + in_len - _FIXED_IE_LENGTH_); if (p && (p[1] == sizeof(struct ieee80211_ht_operation))) { out_len = *pout_len; pframe = rtw_set_ie23a(out_ie + out_len, diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 03ced01ef82b..6791ad7f9ade 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4254,7 +4254,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, memcpy(bssid->SupportedRates + i, p + 2, p[1]); } - if (bssid->IELength < 12) + if (bssid->IELength < _FIXED_IE_LENGTH_) goto fail; /* Checking for DSConfig */ -- cgit From a22301ec9600a5c1d6961b2e006c0b9d73975828 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:23 +0200 Subject: staging: rtl8723au: ConstructProbeRsp(): Use struct ieee80211_mgmt Use ieee80211_mgmt to construct the frame instead of relying on hard coded offsets. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 31 +++++++++++++++++----------- 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index ae1562456a94..ca1bea864c36 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -398,7 +398,7 @@ ConstructNullFunctionData(struct rtw_adapter *padapter, u8 *pframe, static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID) { - struct ieee80211_hdr *pwlanhdr; + struct ieee80211_mgmt *mgmt; u8 *mac, *bssid; u32 pktlen; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; @@ -407,29 +407,36 @@ static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, /* DBG_8723A("%s\n", __func__); */ - pwlanhdr = (struct ieee80211_hdr *)pframe; + mgmt = (struct ieee80211_mgmt *)pframe; mac = myid(&padapter->eeprompriv); bssid = cur_network->MacAddress; - pwlanhdr->frame_control = + mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); - pwlanhdr->seq_ctrl = 0; + mgmt->seq_ctrl = 0; + + memcpy(mgmt->da, StaAddr, ETH_ALEN); + memcpy(mgmt->sa, mac, ETH_ALEN); + memcpy(mgmt->bssid, bssid, ETH_ALEN); - memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, mac, ETH_ALEN); - memcpy(pwlanhdr->addr3, bssid, ETH_ALEN); + put_unaligned_le64(cur_network->tsf, + &mgmt->u.probe_resp.timestamp); + put_unaligned_le16(cur_network->beacon_interval, + &mgmt->u.probe_resp.beacon_int); + put_unaligned_le16(cur_network->capability, + &mgmt->u.probe_resp.capab_info); - pktlen = sizeof(struct ieee80211_hdr_3addr); - pframe += pktlen; + pktlen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); if (cur_network->IELength > MAX_IE_SZ) return; - memcpy(pframe, cur_network->IEs, cur_network->IELength); - pframe += cur_network->IELength; - pktlen += cur_network->IELength; + memcpy(mgmt->u.probe_resp.variable, + cur_network->IEs + _FIXED_IE_LENGTH_, + cur_network->IELength - _FIXED_IE_LENGTH_); + pktlen += (cur_network->IELength - _FIXED_IE_LENGTH_); *pLength = pktlen; } -- cgit From 559789d6cba66348072bbe2f372b6233945b011b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:24 +0200 Subject: staging: rtl8723au: Remove no-op CheckFwRsvdPageContent23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 5 ----- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 2 -- drivers/staging/rtl8723au/include/rtl8723a_cmd.h | 2 -- 3 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index ca1bea864c36..2d677626c079 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -441,11 +441,6 @@ static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, *pLength = pktlen; } -/* To check if reserved page content is destroyed by beacon beacuse beacon is too large. */ -void CheckFwRsvdPageContent23a(struct rtw_adapter *Adapter) -{ -} - /* */ /* Description: Fill the reserved packets that FW will use to RSVD page. */ /* Now we just send 4 types packet to rsvd page. */ diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index 46f5abcbaeeb..8b3473fd7102 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -1034,8 +1034,6 @@ static void StopTxBeacon(struct rtw_adapter *padapter) rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 1, 0x64); pHalData->RegReg542 &= ~BIT(0); rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 2, pHalData->RegReg542); - - CheckFwRsvdPageContent23a(padapter); /* 2010.06.23. Added by tynli. */ } static void _BeaconFunctionEnable(struct rtw_adapter *padapter, u8 Enable, diff --git a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h index e1ecbd049574..014c02edded6 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h @@ -153,8 +153,6 @@ int rtl8723a_set_rssi_cmd(struct rtw_adapter *padapter, u8 *param); int rtl8723a_set_raid_cmd(struct rtw_adapter *padapter, u32 mask, u8 arg); void rtl8723a_add_rateatid(struct rtw_adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level); -void CheckFwRsvdPageContent23a(struct rtw_adapter *padapter); - int FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); #endif -- cgit From 2131891c6ac7643859a01efe35f647835c003b00 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:25 +0200 Subject: staging: rtl8723au: Remove unused dump_txrpt_ccx_8723a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_xmit.c | 21 --------------------- drivers/staging/rtl8723au/include/rtl8723a_xmit.h | 1 - 2 files changed, 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_xmit.c b/drivers/staging/rtl8723au/hal/rtl8723a_xmit.c index d7612ccc47e9..6ea2f9efef64 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_xmit.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_xmit.c @@ -18,27 +18,6 @@ #include #include -void dump_txrpt_ccx_8723a(void *buf) -{ - struct txrpt_ccx_8723a *txrpt_ccx = buf; - - DBG_8723A("%s:\n" - "tag1:%u, rsvd:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n" - "mac_id:%u, pkt_drop:%u, pkt_ok:%u, bmc:%u\n" - "retry_cnt:%u, lifetime_over:%u, retry_over:%u\n" - "ccx_qtime:%u\n" - "final_data_rate:0x%02x\n" - "qsel:%u, sw:0x%03x\n" - , __func__ - , txrpt_ccx->tag1, txrpt_ccx->rsvd, txrpt_ccx->int_bt, txrpt_ccx->int_tri, txrpt_ccx->int_ccx - , txrpt_ccx->mac_id, txrpt_ccx->pkt_drop, txrpt_ccx->pkt_ok, txrpt_ccx->bmc - , txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over - , txrpt_ccx_qtime_8723a(txrpt_ccx) - , txrpt_ccx->final_data_rate - , txrpt_ccx->qsel, txrpt_ccx_sw_8723a(txrpt_ccx) - ); -} - void handle_txrpt_ccx_8723a(struct rtw_adapter *adapter, void *buf) { struct txrpt_ccx_8723a *txrpt_ccx = buf; diff --git a/drivers/staging/rtl8723au/include/rtl8723a_xmit.h b/drivers/staging/rtl8723au/include/rtl8723a_xmit.h index 79883d7b867d..815560c6e1d7 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_xmit.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_xmit.h @@ -211,7 +211,6 @@ struct txrpt_ccx_8723a { #define txrpt_ccx_sw_8723a(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8)) #define txrpt_ccx_qtime_8723a(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8)) -void dump_txrpt_ccx_8723a(void *buf); void handle_txrpt_ccx_8723a(struct rtw_adapter *adapter, void *buf); void rtl8723a_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem); void rtl8723a_fill_fake_txdesc(struct rtw_adapter *padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull); -- cgit From 89060370dbc34cffcce925712eb5b796c6731744 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:26 +0200 Subject: staging: rtl8723au: issue_beacon23a(): Fix another case issuing a corrupted beacon Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 6791ad7f9ade..cb882fb616e5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2420,6 +2420,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { u8 *iebuf; int buflen; + pframe -= _BEACON_IE_OFFSET_; /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ memcpy(pframe, cur_network->IEs, cur_network->IELength); len_diff = update_hidden_ssid(pframe + _BEACON_IE_OFFSET_, -- cgit From 0f728f10334f5ca6f9c28dffcfae96dcabd2a952 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:27 +0200 Subject: staging: rtl8723au: issue_beacon23a(): Determine ie buffer location using 80211_mgmt Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index cb882fb616e5..ebd37431097f 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2430,11 +2430,9 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pframe += (cur_network->IELength+len_diff); pattrib->pktlen += (cur_network->IELength+len_diff); - iebuf = pmgntframe->buf_addr + TXDESC_OFFSET + - sizeof (struct ieee80211_hdr_3addr) + - _BEACON_IE_OFFSET_; - buflen = pattrib->pktlen - sizeof (struct ieee80211_hdr_3addr) - - _BEACON_IE_OFFSET_; + iebuf = mgmt->u.beacon.variable; + buflen = pattrib->pktlen - + offsetof(struct ieee80211_mgmt, u.beacon.variable); wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, iebuf, buflen); -- cgit From a4cf0d65e584329bd85beca84f04325870e2ea69 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:28 +0200 Subject: staging: rtl8723au: rtw_generate_ie23a(): update network info as well as IE We need to make sure to update the network info as well as the IE array. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index efad6f8ccfb8..f235ae00db2d 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -351,8 +351,9 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv) int sz = 0, rateLen; struct wlan_bssid_ex* pdev_network = &pregistrypriv->dev_network; u8* ie = pdev_network->IEs; + u16 cap; - + pdev_network->tsf = 0; /* timestamp will be inserted by hardware */ sz += 8; @@ -368,13 +369,20 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv) *(u16*)ie = 0; *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS); + cap = WLAN_CAPABILITY_IBSS; - if (pregistrypriv->preamble == PREAMBLE_SHORT) + if (pregistrypriv->preamble == PREAMBLE_SHORT) { *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); + cap |= WLAN_CAPABILITY_SHORT_PREAMBLE; + } - if (pdev_network->Privacy) + if (pdev_network->Privacy) { *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + cap |= WLAN_CAPABILITY_PRIVACY; + + } + pdev_network->capability = cap; sz += 2; ie += 2; -- cgit From 68e6c79609fc2d2d1132fd293f4d9dd7bdd514b5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:29 +0200 Subject: staging: rtl8723au: Stop carrying half the beacon frame header in the stored IE array This gets rid of the odd carrying of half the beacon frame in the IE array stored for the network. Instead we rely on the relevant fields (timestamp, beacon_interval, and capability) stored in struct wlan_bssid_ex. Carrying only half the ieee80211_mgmt header led to a number of bugs and simply obfuscated the code. I have tried catching all instances relying on these three elements in the IEs array, but missed cases may still need to be tracked down. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 8 +-- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 41 +++---------- drivers/staging/rtl8723au/core/rtw_mlme.c | 27 +-------- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 83 +++++++++++--------------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 29 ++------- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 9 +-- drivers/staging/rtl8723au/include/wifi.h | 2 +- 7 files changed, 58 insertions(+), 141 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index c19ed951d103..5c30f7b269de 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -652,7 +652,6 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network; struct ieee80211_ht_operation *pht_info = NULL; - int bcn_fixed_size; bcn_interval = (u16)pnetwork->beacon_interval; cur_channel = pnetwork->DSConfig; @@ -728,12 +727,9 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) DYNAMIC_ALL_FUNC_ENABLE); } /* set channel, bwmode */ - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, - pnetwork->IEs + bcn_fixed_size, - pnetwork->IELength - bcn_fixed_size); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pnetwork->IEs, + pnetwork->IELength); if (p && p[1]) { pht_info = (struct ieee80211_ht_operation *)(p + 2); diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index f235ae00db2d..2cb8eed185d3 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -355,36 +355,15 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv) pdev_network->tsf = 0; - /* timestamp will be inserted by hardware */ - sz += 8; - ie += sz; - - /* beacon interval : 2bytes */ - /* BCN_INTERVAL; */ - *(u16*)ie = cpu_to_le16(pdev_network->beacon_interval); - sz += 2; - ie += 2; - - /* capability info */ - *(u16*)ie = 0; - - *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS); cap = WLAN_CAPABILITY_IBSS; - if (pregistrypriv->preamble == PREAMBLE_SHORT) { - *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); + if (pregistrypriv->preamble == PREAMBLE_SHORT) cap |= WLAN_CAPABILITY_SHORT_PREAMBLE; - } - if (pdev_network->Privacy) { - *(u16*)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + if (pdev_network->Privacy) cap |= WLAN_CAPABILITY_PRIVACY; - } - pdev_network->capability = cap; - sz += 2; - ie += 2; /* SSID */ ie = rtw_set_ie23a(ie, WLAN_EID_SSID, pdev_network->Ssid.ssid_len, @@ -718,13 +697,11 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork) const u8 *pbuf; int group_cipher = 0, pairwise_cipher = 0, is8021x = 0; int ret = _FAIL; - int r, offset, plen; + int r, plen; char *pie; - offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u); - pie = &pnetwork->network.IEs[offset]; - plen = pnetwork->network.IELength - offset; + pie = pnetwork->network.IEs; + plen = pnetwork->network.IELength; pbuf = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, pie, plen); @@ -779,7 +756,7 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork) void rtw_get_bcn_info23a(struct wlan_network *pnetwork) { u8 bencrypt = 0; - int pie_len, ie_offset; + int pie_len; u8 *pie; const u8 *p; @@ -792,10 +769,8 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork) RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("%s: ssid =%s\n", __func__, pnetwork->network.Ssid.ssid)); - ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u); - pie = pnetwork->network.IEs + ie_offset; - pie_len = pnetwork->network.IELength - ie_offset; + pie = pnetwork->network.IEs; + pie_len = pnetwork->network.IELength; p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); if (p && p[1]) { diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 66f24dcb20a8..1ccaa6f21d00 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -424,16 +424,11 @@ static void update_current_network(struct rtw_adapter *adapter, if (check_fwstate(pmlmepriv, _FW_LINKED) && is_same_network23a(&pmlmepriv->cur_network.network, pnetwork)) { - int bcn_size; update_network23a(&pmlmepriv->cur_network.network, pnetwork,adapter, true); - bcn_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - rtw_update_protection23a(adapter, - pmlmepriv->cur_network.network.IEs + - bcn_size, + pmlmepriv->cur_network.network.IEs, pmlmepriv->cur_network.network.IELength); } } @@ -619,8 +614,6 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) pnetwork->MacAddress)) { struct wlan_network* ibss_wlan; - memcpy(pmlmepriv->cur_network.network.IEs, - pnetwork->IEs, 8); pmlmepriv->cur_network.network.beacon_interval = pnetwork->beacon_interval; pmlmepriv->cur_network.network.capability = @@ -631,8 +624,6 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf) &pmlmepriv->scanned_queue, pnetwork->MacAddress); if (ibss_wlan) { - memcpy(ibss_wlan->network.IEs, - pnetwork->IEs, 8); pmlmepriv->cur_network.network.beacon_interval = ibss_wlan->network.beacon_interval; pmlmepriv->cur_network.network.capability = @@ -1019,7 +1010,6 @@ rtw_joinbss_update_network23a(struct rtw_adapter *padapter, { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_network *cur_network = &pmlmepriv->cur_network; - int bcn_size; DBG_8723A("%s\n", __func__); @@ -1076,11 +1066,8 @@ rtw_joinbss_update_network23a(struct rtw_adapter *padapter, break; } - bcn_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - - rtw_update_protection23a(padapter, cur_network->network.IEs + - bcn_size, cur_network->network.IELength); + rtw_update_protection23a(padapter, cur_network->network.IEs, + cur_network->network.IELength); rtw_update_ht_cap23a(padapter, cur_network->network.IEs, cur_network->network.IELength); @@ -2243,7 +2230,6 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) struct registry_priv *pregistrypriv = &padapter->registrypriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - int bcn_fixed_size; if (!phtpriv->ht_option) return; @@ -2253,13 +2239,6 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) DBG_8723A("+rtw_update_ht_cap23a()\n"); - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - - /* Adjust pie + ie_len for our searches */ - pie += bcn_fixed_size; - ie_len -= bcn_fixed_size; - /* maybe needs check if ap supports rx ampdu. */ if (!phtpriv->ampdu_enable && pregistrypriv->ampdu_enable == 1) { if (pregistrypriv->wifi_spec == 1) diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index ebd37431097f..c473e33c0b6b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -3119,7 +3119,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - int bssrate_len = 0, sta_bssrate_len = 0, pie_len, bcn_fixed_size; + int bssrate_len = 0, sta_bssrate_len = 0, pie_len; u8 *pie; pmgntframe = alloc_mgtxmitframe23a(pxmitpriv); @@ -3227,11 +3227,9 @@ static void issue_assocreq(struct rtw_adapter *padapter) bssrate_len, bssrate, &pattrib->pktlen); /* RSN */ - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - pie = pmlmeinfo->network.IEs + bcn_fixed_size; - pie_len = pmlmeinfo->network.IELength - bcn_fixed_size; + pie = pmlmeinfo->network.IEs; + pie_len = pmlmeinfo->network.IELength; p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len); if (p) @@ -3309,7 +3307,7 @@ static void issue_assocreq(struct rtw_adapter *padapter) } /* vendor specific IE, such as WPA, WMM, WPS */ - for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) { + for (i = 0; i < pmlmeinfo->network.IELength;) { p = pmlmeinfo->network.IEs + i; switch (p[0]) { @@ -4139,47 +4137,44 @@ static void rtw_site_survey(struct rtw_adapter *padapter) static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, struct recv_frame *precv_frame) { - int i; - const u8 *p; struct sk_buff *skb = precv_frame->pkt; struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data; - unsigned int length; - u8 ie_offset; struct registry_priv *pregistrypriv = &padapter->registrypriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *bssid; + const u8 *p; + u8 *pie; + unsigned int length; + int i; - length = skb->len - sizeof(struct ieee80211_hdr_3addr); - - if (length > MAX_IE_SZ) { - /* DBG_8723A("IE too long for survey event\n"); */ - return NULL; - } + length = skb->len; bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC); if (!bssid) return NULL; if (ieee80211_is_beacon(mgmt->frame_control)) { + length -= offsetof(struct ieee80211_mgmt, u.beacon.variable); + pie = mgmt->u.beacon.variable; bssid->reserved = 1; - ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); bssid->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp); - } else if (ieee80211_is_probe_req(mgmt->frame_control)) { - ie_offset = offsetof(struct ieee80211_mgmt, - u.probe_req.variable); + } else if (ieee80211_is_probe_req(mgmt->frame_control)) { + length -= offsetof(struct ieee80211_mgmt, u.probe_req.variable); + pie = mgmt->u.probe_req.variable; bssid->reserved = 2; bssid->capability = 0; bssid->beacon_interval = padapter->registrypriv.dev_network.beacon_interval; bssid->tsf = 0; } else if (ieee80211_is_probe_resp(mgmt->frame_control)) { - ie_offset = offsetof(struct ieee80211_mgmt, - u.probe_resp.variable); + length -= + offsetof(struct ieee80211_mgmt, u.probe_resp.variable); + pie = mgmt->u.probe_resp.variable; bssid->reserved = 3; bssid->capability = get_unaligned_le16(&mgmt->u.probe_resp.capab_info); @@ -4187,21 +4182,27 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, get_unaligned_le16(&mgmt->u.probe_resp.beacon_int); bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp); } else { + length -= offsetof(struct ieee80211_mgmt, u.beacon.variable); + pie = mgmt->u.beacon.variable; bssid->reserved = 0; - ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable); bssid->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info); bssid->beacon_interval = padapter->registrypriv.dev_network.beacon_interval; bssid->tsf = 0; } - ie_offset -= offsetof(struct ieee80211_mgmt, u); + + if (length > MAX_IE_SZ) { + /* DBG_8723A("IE too long for survey event\n"); */ + kfree(bssid); + return NULL; + } bssid->Length = offsetof(struct wlan_bssid_ex, IEs) + length; /* below is to copy the information element */ bssid->IELength = length; - memcpy(bssid->IEs, &mgmt->u, bssid->IELength); + memcpy(bssid->IEs, pie, bssid->IELength); /* get the signal strength */ /* in dBM.raw data */ @@ -4212,8 +4213,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, precv_frame->attrib.phy_info.SignalStrength;/* in percentage */ /* checking SSID */ - p = cfg80211_find_ie(WLAN_EID_SSID, bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_SSID, bssid->IEs, bssid->IELength); if (!p) { DBG_8723A("marc: cannot find SSID for survey event\n"); @@ -4230,8 +4230,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, /* checking rate info... */ i = 0; - p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, bssid->IEs, bssid->IELength); if (p) { if (p[1] > NDIS_802_11_LENGTH_RATES_EX) { DBG_8723A("%s()-%d: IE too long (%d) for survey " @@ -4242,8 +4241,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, i = p[1]; } - p = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, bssid->IEs, + bssid->IELength); if (p) { if (p[1] > (NDIS_802_11_LENGTH_RATES_EX-i)) { DBG_8723A("%s()-%d: IE too long (%d) for survey " @@ -4253,12 +4252,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, memcpy(bssid->SupportedRates + i, p + 2, p[1]); } - if (bssid->IELength < _FIXED_IE_LENGTH_) - goto fail; - /* Checking for DSConfig */ - p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bssid->IEs, bssid->IELength); bssid->DSConfig = 0; @@ -4266,9 +4261,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, bssid->DSConfig = p[2]; } else {/* In 5G, some ap do not have DSSET IE */ /* checking HT info for channel */ - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, - bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, bssid->IEs, + bssid->IELength); if (p) { struct ieee80211_ht_operation *HT_info = (struct ieee80211_ht_operation *)(p + 2); @@ -4305,9 +4299,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, pmlmeinfo->bwmode_updated == false) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - bssid->IEs + ie_offset, - bssid->IELength - ie_offset); + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, bssid->IEs, + bssid->IELength); if (p && p[1] > 0) { struct ieee80211_ht_cap *pHT_caps; pHT_caps = (struct ieee80211_ht_cap *)(p + 2); @@ -5586,7 +5579,6 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf; struct ieee80211_ht_operation *pht_info; u32 i; - int bcn_fixed_size; u8 *p; /* u32 initialgain; */ /* u32 acparm; */ @@ -5632,10 +5624,7 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) /* pmlmeinfo->assoc_AP_vendor = check_assoc_AP23a(pnetwork->IEs, pnetwork->IELength); */ - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - - for (i = bcn_fixed_size; i < pnetwork->IELength;) { + for (i = 0; i < pnetwork->IELength;) { p = pnetwork->IEs + i; switch (p[0]) { diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index dbca440beed4..66e72e267310 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -880,7 +880,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, unsigned short val16; u8 crypto, bcn_channel; int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r; - int pie_len, ie_offset, ssid_len, privacy; + int pie_len, ssid_len, privacy; const u8 *p, *ssid; if (is_client_associated_to_ap23a(Adapter) == false) @@ -901,8 +901,6 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter, /* check bw and channel offset */ /* parsing HT_CAP_IE */ - ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u); pie_len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable); /* Checking for channel */ @@ -1070,13 +1068,9 @@ bool is_ap_in_tkip23a(struct rtw_adapter *padapter) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *cur_network = &pmlmeinfo->network; const u8 *p; - int bcn_fixed_size; - - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { - for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) { + for (i = 0; i < pmlmeinfo->network.IELength;) { p = pmlmeinfo->network.IEs + i; switch (p[0]) { @@ -1105,13 +1099,9 @@ bool should_forbid_n_rate23a(struct rtw_adapter * padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_bssid_ex *cur_network = &pmlmepriv->cur_network.network; const u8 *p; - int bcn_fixed_size; - - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { - for (i = bcn_fixed_size; i < cur_network->IELength;) { + for (i = 0; i < cur_network->IELength;) { p = cur_network->IEs + i; switch (p[0]) { @@ -1148,13 +1138,9 @@ bool is_ap_in_wep23a(struct rtw_adapter *padapter) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *cur_network = &pmlmeinfo->network; const u8 *p; - int bcn_fixed_size; - - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) { - for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) { + for (i = 0; i < pmlmeinfo->network.IELength;) { p = pmlmeinfo->network.IEs + i; switch (p[0]) { @@ -1334,17 +1320,14 @@ void update_tx_basic_rate23a(struct rtw_adapter *padapter, u8 wirelessmode) unsigned char check_assoc_AP23a(u8 *pframe, uint len) { - int i, bcn_fixed_size; + int i; u8 epigram_vendor_flag; u8 ralink_vendor_flag; const u8 *p; epigram_vendor_flag = 0; ralink_vendor_flag = 0; - bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - - for (i = bcn_fixed_size; i < len;) { + for (i = 0; i < len;) { p = pframe + i; switch (p[0]) { diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index 2d677626c079..7a70e224efd9 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -209,7 +209,6 @@ ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct wlan_bssid_ex *cur_network = &pmlmeinfo->network; u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - int bcn_fixed_size; /* DBG_8723A("%s\n", __func__); */ @@ -237,13 +236,9 @@ ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable); if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { - bcn_fixed_size = - offsetof(struct ieee80211_mgmt, u.beacon.variable) - - offsetof(struct ieee80211_mgmt, u.beacon); - /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ - pktlen += cur_network->IELength - bcn_fixed_size; - memcpy(pframe, cur_network->IEs + bcn_fixed_size, pktlen); + pktlen += cur_network->IELength; + memcpy(pframe, cur_network->IEs, pktlen); goto _ConstructBeacon; } diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index d07fd12ed8c4..25081209c7fa 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -23,7 +23,7 @@ */ #define WiFiNavUpperUs 30000 /* 30 ms */ -#define _BEACON_IE_OFFSET_ 12 +#define _BEACON_IE_OFFSET_ 0 #define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ -- cgit From 1de65ccb1f90be71cd7deb3c963f7440560e4325 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:30 +0200 Subject: staging: rtl8723au: Get rid of obsolete _FIXED_IE_LENGTH_ + _BEACON_IE_OFFSET Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 68 +++++++++++------------ drivers/staging/rtl8723au/core/rtw_mlme.c | 19 ++----- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 41 +++++--------- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 7 +-- drivers/staging/rtl8723au/include/wifi.h | 5 -- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 +-- 6 files changed, 58 insertions(+), 89 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 5c30f7b269de..ab9a66ecb217 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -77,8 +77,8 @@ static void update_BCNTIM(struct rtw_adapter *padapter) tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap); - p = rtw_get_ie23a(pie + _FIXED_IE_LENGTH_, WLAN_EID_TIM, &tim_ielen, - pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_); + p = rtw_get_ie23a(pie, WLAN_EID_TIM, &tim_ielen, + pnetwork_mlmeext->IELength); if (p != NULL && tim_ielen>0) { tim_ielen += 2; @@ -94,19 +94,17 @@ static void update_BCNTIM(struct rtw_adapter *padapter) tim_ielen = 0; /* calulate head_len */ - offset = _FIXED_IE_LENGTH_; + offset = 0; /* get ssid_ie len */ - p = rtw_get_ie23a(pie + _BEACON_IE_OFFSET_, WLAN_EID_SSID, - &tmp_len, (pnetwork_mlmeext->IELength - - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(pie, WLAN_EID_SSID, + &tmp_len, pnetwork_mlmeext->IELength); if (p != NULL) offset += tmp_len+2; /* get supported rates len */ - p = rtw_get_ie23a(pie + _BEACON_IE_OFFSET_, WLAN_EID_SUPP_RATES, - &tmp_len, (pnetwork_mlmeext->IELength - - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(pie, WLAN_EID_SUPP_RATES, + &tmp_len, pnetwork_mlmeext->IELength); if (p != NULL) offset += tmp_len+2; @@ -663,9 +661,8 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) /* and at first time the security ie (RSN/WPA IE) will not include in beacon. */ if (NULL == cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, - pnetwork->IEs + _FIXED_IE_LENGTH_, - pnetwork->IELength - - _FIXED_IE_LENGTH_)) + pnetwork->IEs, + pnetwork->IELength)) pmlmeext->bstart_bss = true; /* todo: update wmm, ht cap */ @@ -804,9 +801,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_bssid_ex *pbss_network = &pmlmepriv->cur_network.network; u8 *ie = pbss_network->IEs; - u8 *pbuf = mgmt->u.beacon.variable - _FIXED_IE_LENGTH_; - len -= (offsetof(struct ieee80211_mgmt, u.beacon.variable) - - _FIXED_IE_LENGTH_); + u8 *pbuf = mgmt->u.beacon.variable; + len -= offsetof(struct ieee80211_mgmt, u.beacon.variable); /* SSID */ /* Supported rates */ /* DS Params */ @@ -841,8 +837,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, memcpy(pbss_network->MacAddress, myid(&padapter->eeprompriv), ETH_ALEN); /* SSID */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_SSID, &ie_len, - (pbss_network->IELength -_BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_SSID, &ie_len, pbss_network->IELength); if (p && ie_len > 0) { memset(&pbss_network->Ssid, 0, sizeof(struct cfg80211_ssid)); memcpy(pbss_network->Ssid.ssid, (p + 2), ie_len); @@ -851,8 +846,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, /* chnnel */ channel = 0; - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_DS_PARAMS, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_DS_PARAMS, &ie_len, + pbss_network->IELength); if (p && ie_len > 0) channel = *(p + 2); @@ -860,16 +855,16 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX); /* get supported rates */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_SUPP_RATES, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_SUPP_RATES, &ie_len, + pbss_network->IELength); if (p) { memcpy(supportRate, p+2, ie_len); supportRateNum = ie_len; } /* get ext_supported rates */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_EXT_SUPP_RATES, - &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_); + p = rtw_get_ie23a(ie, WLAN_EID_EXT_SUPP_RATES, + &ie_len, pbss_network->IELength); if (p) { memcpy(supportRate+supportRateNum, p+2, ie_len); supportRateNum += ie_len; @@ -881,8 +876,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, rtw_set_supported_rate23a(pbss_network->SupportedRates, network_type); /* parsing ERP_IE */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_ERP_INFO, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_ERP_INFO, &ie_len, + pbss_network->IELength); if (p && ie_len > 0) ERP_IE_handler23a(padapter, p); @@ -898,8 +893,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, group_cipher = 0; pairwise_cipher = 0; psecuritypriv->wpa2_group_cipher = 0; psecuritypriv->wpa2_pairwise_cipher = 0; - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_RSN, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_RSN, &ie_len, + pbss_network->IELength); if (p && ie_len > 0) { if (rtw_parse_wpa2_ie23a(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) { @@ -919,10 +914,9 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, pairwise_cipher = 0; psecuritypriv->wpa_group_cipher = 0; psecuritypriv->wpa_pairwise_cipher = 0; - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2)) { + for (p = ie; ;p += (ie_len + 2)) { p = rtw_get_ie23a(p, WLAN_EID_VENDOR_SPECIFIC, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_ - - (ie_len + 2))); + pbss_network->IELength - (ie_len + 2)); if ((p) && (!memcmp(p+2, RTW_WPA_OUI23A_TYPE, 4))) { if (rtw_parse_wpa_ie23a(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) { @@ -947,10 +941,10 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, ie_len = 0; pmlmepriv->qos_option = 0; if (pregistrypriv->wmm_enable) { - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2)) { + for (p = ie; ;p += (ie_len + 2)) { p = rtw_get_ie23a(p, WLAN_EID_VENDOR_SPECIFIC, &ie_len, (pbss_network->IELength - - _BEACON_IE_OFFSET_ - (ie_len + 2))); + (ie_len + 2))); if ((p) && !memcmp(p+2, WMM_PARA_IE, 6)) { pmlmepriv->qos_option = 1; @@ -970,8 +964,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, } } /* parsing HT_CAP_IE */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_HT_CAPABILITY, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_HT_CAPABILITY, &ie_len, + pbss_network->IELength); if (p && ie_len > 0) { u8 rf_type; @@ -1002,8 +996,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, } /* parsing HT_INFO_IE */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_HT_OPERATION, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_HT_OPERATION, &ie_len, + pbss_network->IELength); if (p && ie_len > 0) pHT_info_ie = p; @@ -1176,7 +1170,7 @@ static void update_bcn_erpinfo_ie(struct rtw_adapter *padapter) return; /* parsing ERP_IE */ - p = rtw_get_ie23a(ie + _BEACON_IE_OFFSET_, WLAN_EID_ERP_INFO, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_)); + p = rtw_get_ie23a(ie, WLAN_EID_ERP_INFO, &len, pnetwork->IELength); if (p && len > 0) { if (pmlmepriv->num_sta_non_erp == 1) p[2] |= WLAN_ERP_NON_ERP_PRESENT | diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 1ccaa6f21d00..b3db56ab3a66 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -546,10 +546,8 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter, if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) { if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, - pnetwork->network.IEs + - _FIXED_IE_LENGTH_, - pnetwork->network.IELength - - _FIXED_IE_LENGTH_)) + pnetwork->network.IEs, + pnetwork->network.IELength)) return true; else return false; @@ -1916,7 +1914,7 @@ int rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie, unsigned int ielength = 0; unsigned int i, j; - i = _FIXED_IE_LENGTH_; /* after the fixed IE */ + i = 0; /* after the fixed IE */ while (i < in_len) { ielength = initial_out_len; @@ -2025,9 +2023,7 @@ int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie, ("+rtw_restruct_sec_ie23a: ndisauthmode=%d " "ndissecuritytype=%d\n", ndisauthmode, ndissecuritytype)); - /* copy fixed ie only */ - memcpy(out_ie, in_ie, _FIXED_IE_LENGTH_); - ielength = _FIXED_IE_LENGTH_; + ielength = 0; if (ndisauthmode == Ndis802_11AuthModeWPA || ndisauthmode == Ndis802_11AuthModeWPAPSK) authmode = WLAN_EID_VENDOR_SPECIFIC; @@ -2158,8 +2154,7 @@ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, phtpriv->ht_option = false; - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, in_ie + _FIXED_IE_LENGTH_, - in_len - _FIXED_IE_LENGTH_); + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, in_ie, in_len); if (p && p[1] > 0) { u32 rx_packet_offset, max_recvbuf_sz; @@ -2204,9 +2199,7 @@ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, phtpriv->ht_option = true; - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, - in_ie + _FIXED_IE_LENGTH_, - in_len - _FIXED_IE_LENGTH_); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, in_ie, in_len); if (p && (p[1] == sizeof(struct ieee80211_ht_operation))) { out_len = *pout_len; pframe = rtw_set_ie23a(out_ie + out_len, diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index c473e33c0b6b..3a86b755dff4 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2420,12 +2420,9 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { u8 *iebuf; int buflen; - pframe -= _BEACON_IE_OFFSET_; /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ memcpy(pframe, cur_network->IEs, cur_network->IELength); - len_diff = update_hidden_ssid(pframe + _BEACON_IE_OFFSET_, - cur_network->IELength - - _BEACON_IE_OFFSET_, + len_diff = update_hidden_ssid(pframe, cur_network->IELength, pmlmeinfo->hidden_ssid_mode); pframe += (cur_network->IELength+len_diff); pattrib->pktlen += (cur_network->IELength+len_diff); @@ -2585,13 +2582,10 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, - cur_network->IEs + - _FIXED_IE_LENGTH_, - cur_network->IELength - - _FIXED_IE_LENGTH_); + cur_network->IEs, + cur_network->IELength); - memcpy(pframe, cur_network->IEs + _FIXED_IE_LENGTH_, - cur_network->IELength - _FIXED_IE_LENGTH_); + memcpy(pframe, cur_network->IEs, cur_network->IELength); pframe += cur_network->IELength; pattrib->pktlen += cur_network->IELength; @@ -3045,9 +3039,8 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, if (pstat->flags & WLAN_STA_HT && pmlmepriv->htpriv.ht_option) { /* FILL HT CAP INFO IE */ /* p = hostapd_eid_ht_capabilities_info(hapd, p); */ - p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - ie + _BEACON_IE_OFFSET_, - pnetwork->IELength -_BEACON_IE_OFFSET_); + p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, ie, + pnetwork->IELength); if (p && p[1]) { memcpy(pframe, p, p[1] + 2); pframe += (p[1] + 2); @@ -3056,9 +3049,8 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, /* FILL HT ADD INFO IE */ /* p = hostapd_eid_ht_operation(hapd, p); */ - p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, - ie + _BEACON_IE_OFFSET_, - pnetwork->IELength - _BEACON_IE_OFFSET_); + p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, ie, + pnetwork->IELength); if (p && p[1] > 0) { memcpy(pframe, p, p[1] + 2); pframe += (p[1] + 2); @@ -3072,10 +3064,9 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status, 0x01, 0x01}; int ie_len = 0; - for (p = ie + _BEACON_IE_OFFSET_; ; p += (ie_len + 2)) { + for (p = ie; ; p += (ie_len + 2)) { p = cfg80211_find_ie(WLAN_EID_VENDOR_SPECIFIC, p, - pnetwork->IELength - - _BEACON_IE_OFFSET_ - (ie_len + 2)); + pnetwork->IELength - (ie_len + 2)); if (p) ie_len = p[1]; else @@ -4534,9 +4525,8 @@ static void process_80211d(struct rtw_adapter *padapter, u8 noc; /* number of channel */ u8 j, k; - ie = cfg80211_find_ie(WLAN_EID_COUNTRY, - bssid->IEs + _FIXED_IE_LENGTH_, - bssid->IELength - _FIXED_IE_LENGTH_); + ie = cfg80211_find_ie(WLAN_EID_COUNTRY, bssid->IEs, + bssid->IELength); if (!ie || ie[1] < IEEE80211_COUNTRY_IE_MIN_LEN) return; @@ -6065,10 +6055,9 @@ int set_tx_beacon_cmd23a(struct rtw_adapter* padapter) memcpy(&ptxBeacon_parm->network, &pmlmeinfo->network, sizeof(struct wlan_bssid_ex)); - len_diff = update_hidden_ssid( - ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_, - ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_, - pmlmeinfo->hidden_ssid_mode); + len_diff = update_hidden_ssid(ptxBeacon_parm->network.IEs, + ptxBeacon_parm->network.IELength, + pmlmeinfo->hidden_ssid_mode); ptxBeacon_parm->network.IELength += len_diff; init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index 7a70e224efd9..66ece4942c02 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -428,10 +428,9 @@ static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, if (cur_network->IELength > MAX_IE_SZ) return; - memcpy(mgmt->u.probe_resp.variable, - cur_network->IEs + _FIXED_IE_LENGTH_, - cur_network->IELength - _FIXED_IE_LENGTH_); - pktlen += (cur_network->IELength - _FIXED_IE_LENGTH_); + memcpy(mgmt->u.probe_resp.variable, cur_network->IEs, + cur_network->IELength); + pktlen += (cur_network->IELength); *pLength = pktlen; } diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 25081209c7fa..23026e968ffb 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -23,11 +23,6 @@ */ #define WiFiNavUpperUs 30000 /* 30 ms */ -#define _BEACON_IE_OFFSET_ 0 - -#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ - - #define EID_BSSIntolerantChlReport 73 /*----------------------------------------------------------------------------- diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 2a4a696d46a7..5e8f7b3f0ef4 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -264,8 +264,8 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter, notify_channel = ieee80211_get_channel(wiphy, freq); - notify_ie = pnetwork->network.IEs + _FIXED_IE_LENGTH_; - notify_ielen = pnetwork->network.IELength - _FIXED_IE_LENGTH_; + notify_ie = pnetwork->network.IEs; + notify_ielen = pnetwork->network.IELength; /* We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: * signal strength in mBm (100*dBm) @@ -1191,8 +1191,7 @@ static u16 rtw_get_cur_max_rate(struct rtw_adapter *adapter) u16 mcs_rate = 0; p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, - &pcur_bss->IEs[_FIXED_IE_LENGTH_], - pcur_bss->IELength - _FIXED_IE_LENGTH_); + pcur_bss->IEs, pcur_bss->IELength); if (p && p[1] > 0) { pht_capie = (struct ieee80211_ht_cap *)(p + 2); -- cgit From 71b0956b16872c2ac93ab2d269e1af6685b78f8e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:31 +0200 Subject: staging: rtl8723au: Remove unused #define EID_BSSIntolerantChlReport Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/wifi.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index 23026e968ffb..b82b0d0d8f9f 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -23,8 +23,6 @@ */ #define WiFiNavUpperUs 30000 /* 30 ms */ -#define EID_BSSIntolerantChlReport 73 - /*----------------------------------------------------------------------------- Below is the definition for 802.11n ------------------------------------------------------------------------------*/ -- cgit From 7ef2a15a40aa87e0b0dab35044248c08df511044 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:32 +0200 Subject: staging: rtl8723au: Remove unused #define P80211CAPTURE_VERSION Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/wifi.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h index b82b0d0d8f9f..fd3da3b5cf31 100644 --- a/drivers/staging/rtl8723au/include/wifi.h +++ b/drivers/staging/rtl8723au/include/wifi.h @@ -15,8 +15,6 @@ #ifndef _WIFI_H_ #define _WIFI_H_ -#define P80211CAPTURE_VERSION 0x80211001 - /* This value is tested by WiFi 11n Test Plan 5.2.3. * This test verifies the WLAN NIC can update the NAV through sending * the CTS with large duration. -- cgit From c250e07e99ac8381e99a1a0c406a4342243df6ac Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:33 +0200 Subject: staging: rtl8723au: rtw_get_wps_attr_content23a(): Remove unused argument Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 9 +-------- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +- drivers/staging/rtl8723au/include/ieee80211.h | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 2cb8eed185d3..1f28ccae9aad 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -667,15 +667,11 @@ const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, * Returns: the address of the specific WPS attribute content found, or NULL */ const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, - u16 target_attr_id, u8 *buf_content, - uint *len_content) + u16 target_attr_id, u8 *buf_content) { const u8 *attr_ptr; u32 attr_len; - if (len_content) - *len_content = 0; - attr_ptr = rtw_get_wps_attr23a(wps_ie, wps_ielen, target_attr_id, NULL, &attr_len); @@ -683,9 +679,6 @@ const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, if (buf_content) memcpy(buf_content, attr_ptr + 4, attr_len - 4); - if (len_content) - *len_content = attr_len - 4; - return attr_ptr + 4; } diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 3a86b755dff4..4b769d55bb44 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2437,7 +2437,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) if (wps_ie && wps_ie[1] > 0) { rtw_get_wps_attr_content23a(wps_ie, wps_ie[1], WPS_ATTR_SELECTED_REGISTRAR, - (u8*)&sr, NULL); + (u8*)&sr); } if (sr != 0) set_fwstate(pmlmepriv, WIFI_UNDER_WPS); diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 43f002db937c..89c23aefc320 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -389,7 +389,7 @@ int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr); -const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content); +const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content); uint rtw_get_rateset_len23a(u8 *rateset); -- cgit From ef80f1f564e2337266f98c49646b55c54d95db98 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:34 +0200 Subject: staging: rtl8723au: Remove unused RSN_VERSION_BSD23A Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 1 - drivers/staging/rtl8723au/include/ieee80211.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 1f28ccae9aad..78a7b27ab69f 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -33,7 +33,6 @@ u8 WPA_CIPHER_SUITE_WRAP23A[] = { 0x00, 0x50, 0xf2, 3 }; u8 WPA_CIPHER_SUITE_CCMP23A[] = { 0x00, 0x50, 0xf2, 4 }; u8 WPA_CIPHER_SUITE_WEP10423A[] = { 0x00, 0x50, 0xf2, 5 }; -u16 RSN_VERSION_BSD23A = 1; u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X23A[] = { 0x00, 0x0f, 0xac, 1 }; u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[] = { 0x00, 0x0f, 0xac, 2 }; u8 RSN_CIPHER_SUITE_NONE23A[] = { 0x00, 0x0f, 0xac, 0 }; diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 89c23aefc320..0b17a7feaee7 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -79,7 +79,6 @@ extern u8 WPA_CIPHER_SUITE_WEP10423A[]; #define RSN_HEADER_LEN 4 #define RSN_SELECTOR_LEN 4 -extern u16 RSN_VERSION_BSD23A; extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X23A[]; extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[]; extern u8 RSN_CIPHER_SUITE_NONE23A[]; -- cgit From 5dab9e7d2af054ad1df60ef51e25b2dd5e85517b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:35 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): Use key_params->cipher to determine encryption Passing strings around for something we have defines for is just silly. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 47 +++++++++++++++-------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 5e8f7b3f0ef4..f44d0f4629d3 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -501,7 +501,8 @@ static int set_wep_key(struct rtw_adapter *padapter, u8 *key, u16 keylen, static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_param *param, - u32 param_len) + u32 param_len, + struct key_params *keyparms) { int ret = 0; u16 wep_key_len; @@ -549,7 +550,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, goto exit; } - if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta == NULL)) { + if (!psta && (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == WLAN_CIPHER_SUITE_WEP104)) { DBG_8723A("r871x_set_encryption, crypt.alg = WEP\n"); wep_key_idx = param->u.crypt.idx; @@ -598,7 +600,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, if (!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* group key */ if (param->u.crypt.set_tx == 0) { /* group key */ - if (strcmp(param->u.crypt.alg, "WEP") == 0) { + if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { DBG_8723A("%s, set group_key, WEP\n", __func__); memcpy(psecuritypriv-> @@ -613,7 +616,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, WLAN_CIPHER_SUITE_WEP104; } - } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { DBG_8723A("%s, set group_key, TKIP\n", __func__); @@ -638,8 +641,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->busetkipkey = 1; - } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { - DBG_8723A("%s, set group_key, CCMP\n", + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) { + DBG_8723A("%s, set group_key, CCMP\n", __func__); psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_CCMP; @@ -692,7 +695,10 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - if (!strcmp(param->u.crypt.alg, "WEP")) { + if (keyparms->cipher == + WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == + WLAN_CIPHER_SUITE_WEP104) { DBG_8723A("%s, set pairwise key, WEP\n", __func__); @@ -701,11 +707,13 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_WEP104; } - } else if (!strcmp(param->u.crypt.alg, "TKIP")) { + } else if (keyparms->cipher == + WLAN_CIPHER_SUITE_TKIP) { DBG_8723A("%s, set pairwise key, " "TKIP\n", __func__); - psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_TKIP; + psta->dot118021XPrivacy = + WLAN_CIPHER_SUITE_TKIP; /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ @@ -716,12 +724,13 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->busetkipkey = 1; - } else if (!strcmp(param->u.crypt.alg, "CCMP")) { - + } else if (keyparms->cipher == + WLAN_CIPHER_SUITE_CCMP) { DBG_8723A("%s, set pairwise key, " "CCMP\n", __func__); - psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_CCMP; + psta->dot118021XPrivacy = + WLAN_CIPHER_SUITE_CCMP; } else { DBG_8723A("%s, set pairwise key, " "none\n", __func__); @@ -735,7 +744,10 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psta->bpairwise_key_installed = true; } else { /* group key??? */ - if (!strcmp(param->u.crypt.alg, "WEP")) { + if (keyparms->cipher == + WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == + WLAN_CIPHER_SUITE_WEP104) { memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt. idx].skey, @@ -751,7 +763,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } - } else if (!strcmp(param->u.crypt.alg, "TKIP")) { + } else if (keyparms->cipher == + WLAN_CIPHER_SUITE_TKIP) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_TKIP; @@ -780,7 +793,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->busetkipkey = 1; - } else if (!strcmp(param->u.crypt.alg, "CCMP")) { + } else if (keyparms->cipher == + WLAN_CIPHER_SUITE_CCMP) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_CCMP; @@ -1099,7 +1113,8 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, if (mac_addr) ether_addr_copy(param->sta_addr, mac_addr); - ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len); + ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len, + params); #endif } else { DBG_8723A("error! fw_state = 0x%x, iftype =%d\n", -- cgit From 4e297c21bf2932178e7bdaeff654914b576e5f70 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:36 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption() is only called for WIFI_AP_STATE No point checking it again in here, twice! Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 237 ++++++++++------------ 1 file changed, 110 insertions(+), 127 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index f44d0f4629d3..bbc4ac50bf9b 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -509,7 +509,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 wep_key_idx; struct sta_info *psta = NULL, *pbcmc_sta = NULL; struct rtw_adapter *padapter = netdev_priv(dev); - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct security_priv *psecuritypriv = &padapter->securitypriv; struct sta_priv *pstapriv = &padapter->stapriv; @@ -598,7 +597,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, } - if (!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* group key */ + if (!psta) { /* group key */ if (param->u.crypt.set_tx == 0) { /* group key */ if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { @@ -620,7 +619,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, DBG_8723A("%s, set group_key, TKIP\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_TKIP; + psecuritypriv->dot118021XGrpPrivacy = + WLAN_CIPHER_SUITE_TKIP; memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt.idx]. @@ -645,7 +645,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, DBG_8723A("%s, set group_key, CCMP\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_CCMP; + psecuritypriv->dot118021XGrpPrivacy = + WLAN_CIPHER_SUITE_CCMP; memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt.idx]. @@ -685,151 +686,134 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, goto exit; } - if (psecuritypriv->dot11AuthAlgrthm == - dot11AuthAlgrthm_8021X && psta) { /* psk/802_1x */ - if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { - if (param->u.crypt.set_tx == 1) { - /* pairwise key */ - memcpy(psta->dot118021x_UncstKey.skey, - param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) { + /* psk/802_1x */ + if (param->u.crypt.set_tx == 1) { + /* pairwise key */ + memcpy(psta->dot118021x_UncstKey.skey, + param->u.crypt.key, + (param->u.crypt.key_len > + 16 ? 16 : param->u.crypt.key_len)); - if (keyparms->cipher == - WLAN_CIPHER_SUITE_WEP40 || - keyparms->cipher == - WLAN_CIPHER_SUITE_WEP104) { - DBG_8723A("%s, set pairwise key, WEP\n", - __func__); - - psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (param->u.crypt.key_len == 13) { - psta->dot118021XPrivacy = - WLAN_CIPHER_SUITE_WEP104; - } - } else if (keyparms->cipher == - WLAN_CIPHER_SUITE_TKIP) { - DBG_8723A("%s, set pairwise key, " - "TKIP\n", __func__); + if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { + DBG_8723A("%s, set pairwise key, WEP\n", + __func__); + psta->dot118021XPrivacy = + WLAN_CIPHER_SUITE_WEP40; + if (param->u.crypt.key_len == 13) { psta->dot118021XPrivacy = - WLAN_CIPHER_SUITE_TKIP; + WLAN_CIPHER_SUITE_WEP104; + } + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { + DBG_8723A("%s, set pairwise key, TKIP\n", + __func__); - /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ - /* set mic key */ - memcpy(psta->dot11tkiptxmickey.skey, - ¶m->u.crypt.key[16], 8); - memcpy(psta->dot11tkiprxmickey.skey, - ¶m->u.crypt.key[24], 8); + psta->dot118021XPrivacy = + WLAN_CIPHER_SUITE_TKIP; - psecuritypriv->busetkipkey = 1; + /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ + /* set mic key */ + memcpy(psta->dot11tkiptxmickey.skey, + ¶m->u.crypt.key[16], 8); + memcpy(psta->dot11tkiprxmickey.skey, + ¶m->u.crypt.key[24], 8); - } else if (keyparms->cipher == - WLAN_CIPHER_SUITE_CCMP) { - DBG_8723A("%s, set pairwise key, " - "CCMP\n", __func__); + psecuritypriv->busetkipkey = 1; - psta->dot118021XPrivacy = - WLAN_CIPHER_SUITE_CCMP; - } else { - DBG_8723A("%s, set pairwise key, " - "none\n", __func__); + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) { + DBG_8723A("%s, set pairwise key, CCMP\n", + __func__); - psta->dot118021XPrivacy = 0; - } + psta->dot118021XPrivacy = + WLAN_CIPHER_SUITE_CCMP; + } else { + DBG_8723A("%s, set pairwise key, none\n", + __func__); + + psta->dot118021XPrivacy = 0; + } - set_pairwise_key(padapter, psta); + set_pairwise_key(padapter, psta); - psta->ieee8021x_blocked = false; + psta->ieee8021x_blocked = false; - psta->bpairwise_key_installed = true; - } else { /* group key??? */ - if (keyparms->cipher == - WLAN_CIPHER_SUITE_WEP40 || - keyparms->cipher == - WLAN_CIPHER_SUITE_WEP104) { - memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, - param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt. - key_len)); + psta->bpairwise_key_installed = true; + } else { /* group key??? */ + if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { + memcpy(psecuritypriv-> + dot118021XGrpKey[param->u.crypt. + idx].skey, + param->u.crypt.key, + (param->u.crypt.key_len > + 16 ? 16 : param->u.crypt.key_len)); + psecuritypriv->dot118021XGrpPrivacy = + WLAN_CIPHER_SUITE_WEP40; + if (param->u.crypt.key_len == 13) { psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_WEP40; - if (param->u.crypt.key_len == 13) { - psecuritypriv-> - dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_WEP104; - } - } else if (keyparms->cipher == - WLAN_CIPHER_SUITE_TKIP) { - psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_TKIP; + WLAN_CIPHER_SUITE_WEP104; + } + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { + psecuritypriv->dot118021XGrpPrivacy = + WLAN_CIPHER_SUITE_TKIP; - memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, - param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt. - key_len)); + memcpy(psecuritypriv-> + dot118021XGrpKey[param->u.crypt. + idx].skey, + param->u.crypt.key, + (param->u.crypt.key_len > + 16 ? 16 : param->u.crypt.key_len)); - /* DEBUG_ERR("set key length :param->u" - ".crypt.key_len =%d\n", - param->u.crypt.key_len); */ - /* set mic key */ - memcpy(psecuritypriv-> - dot118021XGrptxmickey[param->u. - crypt.idx]. - skey, ¶m->u.crypt.key[16], - 8); - memcpy(psecuritypriv-> - dot118021XGrprxmickey[param->u. - crypt.idx]. - skey, ¶m->u.crypt.key[24], - 8); + /* DEBUG_ERR("set key length :param->u" + ".crypt.key_len =%d\n", + param->u.crypt.key_len); */ + /* set mic key */ + memcpy(psecuritypriv-> + dot118021XGrptxmickey[param->u. + crypt.idx].skey, + ¶m->u.crypt.key[16], 8); + memcpy(psecuritypriv-> + dot118021XGrprxmickey[param->u. + crypt.idx].skey, + ¶m->u.crypt.key[24], 8); - psecuritypriv->busetkipkey = 1; + psecuritypriv->busetkipkey = 1; - } else if (keyparms->cipher == - WLAN_CIPHER_SUITE_CCMP) { - psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_CCMP; + } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) { + psecuritypriv->dot118021XGrpPrivacy = + WLAN_CIPHER_SUITE_CCMP; - memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, - param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt. - key_len)); - } else { - psecuritypriv->dot118021XGrpPrivacy = - 0; - } + memcpy(psecuritypriv-> + dot118021XGrpKey[param->u.crypt. + idx].skey, + param->u.crypt.key, + (param->u.crypt.key_len > + 16 ? 16 : param->u.crypt.key_len)); + } else { + psecuritypriv->dot118021XGrpPrivacy = 0; + } - psecuritypriv->dot118021XGrpKeyid = - param->u.crypt.idx; + psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; - psecuritypriv->binstallGrpkey = 1; + psecuritypriv->binstallGrpkey = 1; - psecuritypriv->dot11PrivacyAlgrthm = - psecuritypriv->dot118021XGrpPrivacy; + psecuritypriv->dot11PrivacyAlgrthm = + psecuritypriv->dot118021XGrpPrivacy; - set_group_key(padapter, param->u.crypt.key, - psecuritypriv-> - dot118021XGrpPrivacy, - param->u.crypt.idx); + set_group_key(padapter, param->u.crypt.key, + psecuritypriv->dot118021XGrpPrivacy, + param->u.crypt.idx); - pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter); - if (pbcmc_sta) { - /* rx will use bmc_sta's - dot118021XPrivacy */ - pbcmc_sta->ieee8021x_blocked = false; - pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy; - } + pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter); + if (pbcmc_sta) { + /* rx will use bmc_sta's + dot118021XPrivacy */ + pbcmc_sta->ieee8021x_blocked = false; + pbcmc_sta->dot118021XPrivacy = + psecuritypriv->dot118021XGrpPrivacy; } } } @@ -837,7 +821,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, exit: return ret; - } #endif -- cgit From c36e122f6eba4e31c67d572c1e01ef845747010d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:37 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): Use key len from struct key_params Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 55 ++++++++++------------- 1 file changed, 24 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index bbc4ac50bf9b..0925d5694fd9 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -417,7 +417,7 @@ exit: return res; } -static int set_group_key(struct rtw_adapter *padapter, u8 *key, u32 alg, +static int set_group_key(struct rtw_adapter *padapter, const u8 *key, u32 alg, u8 keyid) { u8 keylen; @@ -480,7 +480,7 @@ exit: return res; } -static int set_wep_key(struct rtw_adapter *padapter, u8 *key, u16 keylen, +static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, u8 keyid) { u32 alg; @@ -505,7 +505,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct key_params *keyparms) { int ret = 0; - u16 wep_key_len; + int key_len; u8 wep_key_idx; struct sta_info *psta = NULL, *pbcmc_sta = NULL; struct rtw_adapter *padapter = netdev_priv(dev); @@ -549,23 +549,24 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, goto exit; } + key_len = keyparms->key_len; + if (!psta && (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104)) { DBG_8723A("r871x_set_encryption, crypt.alg = WEP\n"); wep_key_idx = param->u.crypt.idx; - wep_key_len = param->u.crypt.key_len; DBG_8723A("r871x_set_encryption, wep_key_idx =%d, len =%d\n", - wep_key_idx, wep_key_len); + wep_key_idx, key_len); - if ((wep_key_idx >= WEP_KEYS) || (wep_key_len <= 0)) { + if (wep_key_idx >= WEP_KEYS || key_len <= 0) { ret = -EINVAL; goto exit; } - if (wep_key_len > 0) { - wep_key_len = wep_key_len <= 5 ? 5 : 13; + if (key_len > 0) { + key_len = key_len <= 5 ? 5 : 13; } if (psecuritypriv->bWepDefaultKeyIdxSet == 0) { @@ -577,7 +578,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40; psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (wep_key_len == 13) { + if (key_len == 13) { psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104; psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } @@ -586,12 +587,11 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, } memcpy(&psecuritypriv->wep_key[wep_key_idx].key, - param->u.crypt.key, wep_key_len); + keyparms->key, key_len); - psecuritypriv->wep_key[wep_key_idx].keylen = wep_key_len; + psecuritypriv->wep_key[wep_key_idx].keylen = key_len; - set_wep_key(padapter, param->u.crypt.key, wep_key_len, - wep_key_idx); + set_wep_key(padapter, keyparms->key, key_len, wep_key_idx); goto exit; @@ -605,12 +605,11 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt.idx]. - skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + skey, keyparms->key, + (key_len > 16 ? 16 : key_len)); psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (param->u.crypt.key_len == 13) { + if (key_len == 13) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } @@ -625,8 +624,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt.idx]. skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ @@ -651,8 +649,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, memcpy(psecuritypriv-> dot118021XGrpKey[param->u.crypt.idx]. skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); } else { DBG_8723A("%s, set group_key, none\n", __func__); @@ -692,8 +689,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, /* pairwise key */ memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { @@ -702,7 +698,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (param->u.crypt.key_len == 13) { + if (key_len == 13) { psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_WEP104; } @@ -747,12 +743,11 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, dot118021XGrpKey[param->u.crypt. idx].skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (param->u.crypt.key_len == 13) { + if (key_len == 13) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } @@ -764,8 +759,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, dot118021XGrpKey[param->u.crypt. idx].skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); /* DEBUG_ERR("set key length :param->u" ".crypt.key_len =%d\n", @@ -790,8 +784,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, dot118021XGrpKey[param->u.crypt. idx].skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt.key_len)); + (key_len > 16 ? 16 : key_len)); } else { psecuritypriv->dot118021XGrpPrivacy = 0; } -- cgit From f84f97fd6a90080b89a7aa6ddd7b6b5b6d6c3898 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:38 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): Stop using param->u.crypt.alg Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 0925d5694fd9..ac13df1dc786 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -530,6 +530,17 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, ret = -EINVAL; goto exit; } + switch (keyparms->cipher) { + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: + case WLAN_CIPHER_SUITE_TKIP: + case WLAN_CIPHER_SUITE_CCMP: + break; + default: + ret = -EINVAL; + goto exit; + } + } else { psta = rtw_get_stainfo23a(pstapriv, param->sta_addr); if (!psta) { @@ -540,15 +551,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, } } - if (strcmp(param->u.crypt.alg, "none") == 0 && (psta == NULL)) { - /* todo:clear default encryption keys */ - - DBG_8723A("clear default encryption keys, keyid =%d\n", - param->u.crypt.idx); - - goto exit; - } - key_len = keyparms->key_len; if (!psta && (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || -- cgit From 55db5d02f81bd45c3a47f4ab4a917a70c6e13916 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:39 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): Use keyparms->cipher to set WEP size We already know which type of WEP we are using when we get here, no point trying to determine it from key_len. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 32 +++++------------------ 1 file changed, 7 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index ac13df1dc786..c0b0cb19c617 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -577,13 +577,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled; - psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40; - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - - if (key_len == 13) { - psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104; - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; - } + psecuritypriv->dot11PrivacyAlgrthm = keyparms->cipher; + psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher; psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx; } @@ -596,7 +591,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, set_wep_key(padapter, keyparms->key, key_len, wep_key_idx); goto exit; - } if (!psta) { /* group key */ @@ -610,12 +604,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, skey, keyparms->key, (key_len > 16 ? 16 : key_len)); - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (key_len == 13) { - psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_WEP104; - } - + psecuritypriv->dot118021XGrpPrivacy = + keyparms->cipher; } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { DBG_8723A("%s, set group_key, TKIP\n", __func__); @@ -698,12 +688,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, DBG_8723A("%s, set pairwise key, WEP\n", __func__); - psta->dot118021XPrivacy = - WLAN_CIPHER_SUITE_WEP40; - if (key_len == 13) { - psta->dot118021XPrivacy = - WLAN_CIPHER_SUITE_WEP104; - } + psecuritypriv->dot118021XGrpPrivacy = + keyparms->cipher; } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { DBG_8723A("%s, set pairwise key, TKIP\n", __func__); @@ -748,11 +734,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, (key_len > 16 ? 16 : key_len)); psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_WEP40; - if (key_len == 13) { - psecuritypriv->dot118021XGrpPrivacy = - WLAN_CIPHER_SUITE_WEP104; - } + keyparms->cipher; } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_TKIP; -- cgit From a9e346fb88d6daeef37c21a3c55ebd70f1501fd2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:40 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_encryption(): Pass additional struct key_params Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index c0b0cb19c617..7c3a58f89a6a 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -802,7 +802,8 @@ exit: #endif static int rtw_cfg80211_set_encryption(struct net_device *dev, - struct ieee_param *param, u32 param_len) + struct ieee_param *param, u32 param_len, + struct key_params *keyparms) { int ret = 0; u32 wep_key_idx; @@ -1067,7 +1068,8 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, } if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { - ret = rtw_cfg80211_set_encryption(ndev, param, param_len); + ret = rtw_cfg80211_set_encryption(ndev, param, param_len, + params); } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { #ifdef CONFIG_8723AU_AP_MODE if (mac_addr) -- cgit From d0dc266692d1bd4579fd9abd4a9b80f8d0ab5150 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:41 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_encryption(): Obtain key_len from struct key_params Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 28 +++++++++-------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 7c3a58f89a6a..5ea0fa102eb4 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -807,7 +807,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, { int ret = 0; u32 wep_key_idx; - u16 wep_key_len; + int key_len; struct rtw_adapter *padapter = netdev_priv(dev); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct security_priv *psecuritypriv = &padapter->securitypriv; @@ -817,9 +817,10 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, param->u.crypt.err = 0; param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; + key_len = keyparms->key_len; + if (param_len < - (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + - param->u.crypt.key_len) { + (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + key_len) { ret = -EINVAL; goto exit; } @@ -840,9 +841,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, DBG_8723A("wpa_set_encryption, crypt.alg = WEP\n"); wep_key_idx = param->u.crypt.idx; - wep_key_len = param->u.crypt.key_len; - if ((wep_key_idx > WEP_KEYS) || (wep_key_len <= 0)) { + if (wep_key_idx > WEP_KEYS || key_len <= 0) { ret = -EINVAL; goto exit; } @@ -851,14 +851,14 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, /* wep default key has not been set, so use this key index as default key. */ - wep_key_len = wep_key_len <= 5 ? 5 : 13; + key_len = key_len <= 5 ? 5 : 13; psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled; psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40; psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - if (wep_key_len == 13) { + if (key_len == 13) { psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104; psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } @@ -867,9 +867,9 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, } memcpy(&psecuritypriv->wep_key[wep_key_idx].key, - param->u.crypt.key, wep_key_len); + param->u.crypt.key, key_len); - psecuritypriv->wep_key[wep_key_idx].keylen = wep_key_len; + psecuritypriv->wep_key[wep_key_idx].keylen = key_len; rtw_set_key23a(padapter, psecuritypriv, wep_key_idx, 0); @@ -910,9 +910,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt. - key_len)); + (key_len > 16 ? 16 : key_len)); if (strcmp(param->u.crypt.alg, "TKIP") == 0) { @@ -938,9 +936,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, dot118021XGrpKey[param->u.crypt. idx].skey, param->u.crypt.key, - (param->u.crypt.key_len > - 16 ? 16 : param->u.crypt. - key_len)); + (key_len > 16 ? 16 : key_len)); memcpy(padapter->securitypriv. dot118021XGrptxmickey[param->u. crypt.idx]. @@ -953,8 +949,6 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, 8); padapter->securitypriv.binstallGrpkey = 1; - /* DEBUG_ERR((" param->u.crypt.key_len" - "=%d\n", param->u.crypt.key_len)); */ DBG_8723A (" ~~~~set sta key:groupkey\n"); -- cgit From 8188b1cb6165655d087edf89b6619e62021762d8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:42 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_encryption(): Use key_params->cipher Use key_params->cipher to determine WEP/TKIP Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 5ea0fa102eb4..2e21223b15be 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -835,7 +835,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, goto exit; } - if (strcmp(param->u.crypt.alg, "WEP") == 0) { + if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || + keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("wpa_set_encryption, crypt.alg = WEP\n")); DBG_8723A("wpa_set_encryption, crypt.alg = WEP\n"); @@ -912,8 +913,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, param->u.crypt.key, (key_len > 16 ? 16 : key_len)); - if (strcmp(param->u.crypt.alg, - "TKIP") == 0) { + if (keyparms->cipher == + WLAN_CIPHER_SUITE_TKIP) { memcpy(psta->dot11tkiptxmickey. skey, ¶m->u.crypt.key[16], -- cgit From e1343f90809ab29bd1ec286fef1d9e6fcc59b404 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:43 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_encryption(): Obtain key from key_params->key Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 2e21223b15be..e521c7792c4d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -868,7 +868,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, } memcpy(&psecuritypriv->wep_key[wep_key_idx].key, - param->u.crypt.key, key_len); + keyparms->key, key_len); psecuritypriv->wep_key[wep_key_idx].keylen = key_len; @@ -910,19 +910,17 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, " == 1\n", __func__); memcpy(psta->dot118021x_UncstKey.skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) { memcpy(psta->dot11tkiptxmickey. skey, - ¶m->u.crypt.key[16], - 8); + &keyparms->key[16], 8); memcpy(psta->dot11tkiprxmickey. skey, - ¶m->u.crypt.key[24], - 8); + &keyparms->key[24], 8); padapter->securitypriv. busetkipkey = 0; @@ -936,18 +934,16 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, memcpy(padapter->securitypriv. dot118021XGrpKey[param->u.crypt. idx].skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); memcpy(padapter->securitypriv. dot118021XGrptxmickey[param->u. crypt.idx]. - skey, ¶m->u.crypt.key[16], - 8); + skey, &keyparms->key[16], 8); memcpy(padapter->securitypriv. dot118021XGrprxmickey[param->u. crypt.idx]. - skey, ¶m->u.crypt.key[24], - 8); + skey, &keyparms->key[24], 8); padapter->securitypriv.binstallGrpkey = 1; DBG_8723A -- cgit From 5292a891979aab582cb66e5105fc2ab78ff2a070 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:44 +0200 Subject: staging: rtl8723au: rtw_cfg80211_set_encryption(): Pass key_index as argument Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 35 +++++++++-------------- 1 file changed, 14 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index e521c7792c4d..c5ac645e7942 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -801,12 +801,11 @@ exit: } #endif -static int rtw_cfg80211_set_encryption(struct net_device *dev, +static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, struct ieee_param *param, u32 param_len, struct key_params *keyparms) { int ret = 0; - u32 wep_key_idx; int key_len; struct rtw_adapter *padapter = netdev_priv(dev); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -826,7 +825,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, } if (is_broadcast_ether_addr(param->sta_addr)) { - if (param->u.crypt.idx >= WEP_KEYS) { + if (key_index >= WEP_KEYS) { ret = -EINVAL; goto exit; } @@ -841,9 +840,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, ("wpa_set_encryption, crypt.alg = WEP\n")); DBG_8723A("wpa_set_encryption, crypt.alg = WEP\n"); - wep_key_idx = param->u.crypt.idx; - - if (wep_key_idx > WEP_KEYS || key_len <= 0) { + if (key_index > WEP_KEYS || key_len <= 0) { ret = -EINVAL; goto exit; } @@ -864,15 +861,15 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; } - psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx; + psecuritypriv->dot11PrivacyKeyIndex = key_index; } - memcpy(&psecuritypriv->wep_key[wep_key_idx].key, + memcpy(&psecuritypriv->wep_key[key_index].key, keyparms->key, key_len); - psecuritypriv->wep_key[wep_key_idx].keylen = key_len; + psecuritypriv->wep_key[key_index].keylen = key_len; - rtw_set_key23a(padapter, psecuritypriv, wep_key_idx, 0); + rtw_set_key23a(padapter, psecuritypriv, key_index, 0); goto exit; } @@ -932,17 +929,14 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, true); } else { /* group key */ memcpy(padapter->securitypriv. - dot118021XGrpKey[param->u.crypt. - idx].skey, + dot118021XGrpKey[key_index].skey, keyparms->key, (key_len > 16 ? 16 : key_len)); memcpy(padapter->securitypriv. - dot118021XGrptxmickey[param->u. - crypt.idx]. + dot118021XGrptxmickey[key_index]. skey, &keyparms->key[16], 8); memcpy(padapter->securitypriv. - dot118021XGrprxmickey[param->u. - crypt.idx]. + dot118021XGrprxmickey[key_index]. skey, &keyparms->key[24], 8); padapter->securitypriv.binstallGrpkey = 1; @@ -950,12 +944,11 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, (" ~~~~set sta key:groupkey\n"); padapter->securitypriv. - dot118021XGrpKeyid = - param->u.crypt.idx; + dot118021XGrpKeyid = key_index; rtw_set_key23a(padapter, &padapter->securitypriv, - param->u.crypt.idx, 1); + key_index, 1); } } @@ -1059,8 +1052,8 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, } if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { - ret = rtw_cfg80211_set_encryption(ndev, param, param_len, - params); + ret = rtw_cfg80211_set_encryption(ndev, key_index, param, + param_len, params); } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { #ifdef CONFIG_8723AU_AP_MODE if (mac_addr) -- cgit From f7ce87cdb7b8e7a674fa66d3948c5f6986737377 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:45 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): Pass key_index argument Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 62 ++++++++++------------- 1 file changed, 26 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index c5ac645e7942..819573ff00eb 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -499,14 +499,13 @@ static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, return set_group_key(padapter, key, alg, keyid); } -static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, +static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, struct ieee_param *param, u32 param_len, struct key_params *keyparms) { int ret = 0; int key_len; - u8 wep_key_idx; struct sta_info *psta = NULL, *pbcmc_sta = NULL; struct rtw_adapter *padapter = netdev_priv(dev); struct security_priv *psecuritypriv = &padapter->securitypriv; @@ -526,7 +525,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, } if (is_broadcast_ether_addr(param->sta_addr)) { - if (param->u.crypt.idx >= WEP_KEYS) { + if (key_index >= WEP_KEYS) { ret = -EINVAL; goto exit; } @@ -557,12 +556,10 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, keyparms->cipher == WLAN_CIPHER_SUITE_WEP104)) { DBG_8723A("r871x_set_encryption, crypt.alg = WEP\n"); - wep_key_idx = param->u.crypt.idx; - DBG_8723A("r871x_set_encryption, wep_key_idx =%d, len =%d\n", - wep_key_idx, key_len); + key_index, key_len); - if (wep_key_idx >= WEP_KEYS || key_len <= 0) { + if (key_index >= WEP_KEYS || key_len <= 0) { ret = -EINVAL; goto exit; } @@ -580,15 +577,15 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, psecuritypriv->dot11PrivacyAlgrthm = keyparms->cipher; psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher; - psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx; + psecuritypriv->dot11PrivacyKeyIndex = key_index; } - memcpy(&psecuritypriv->wep_key[wep_key_idx].key, + memcpy(&psecuritypriv->wep_key[key_index].key, keyparms->key, key_len); - psecuritypriv->wep_key[wep_key_idx].keylen = key_len; + psecuritypriv->wep_key[key_index].keylen = key_len; - set_wep_key(padapter, keyparms->key, key_len, wep_key_idx); + set_wep_key(padapter, keyparms->key, key_len, key_index); goto exit; } @@ -600,8 +597,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, DBG_8723A("%s, set group_key, WEP\n", __func__); memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt.idx]. - skey, keyparms->key, + dot118021XGrpKey[key_index].skey, + keyparms->key, (key_len > 16 ? 16 : key_len)); psecuritypriv->dot118021XGrpPrivacy = @@ -614,19 +611,17 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, WLAN_CIPHER_SUITE_TKIP; memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt.idx]. - skey, param->u.crypt.key, + dot118021XGrpKey[key_index].skey, + param->u.crypt.key, (key_len > 16 ? 16 : key_len)); /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ memcpy(psecuritypriv-> - dot118021XGrptxmickey[param->u.crypt. - idx].skey, + dot118021XGrptxmickey[key_index].skey, ¶m->u.crypt.key[16], 8); memcpy(psecuritypriv-> - dot118021XGrprxmickey[param->u.crypt. - idx].skey, + dot118021XGrprxmickey[key_index].skey, ¶m->u.crypt.key[24], 8); psecuritypriv->busetkipkey = 1; @@ -639,7 +634,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, WLAN_CIPHER_SUITE_CCMP; memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt.idx]. + dot118021XGrpKey[key_index]. skey, param->u.crypt.key, (key_len > 16 ? 16 : key_len)); } else { @@ -650,7 +645,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, 0; } - psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; + psecuritypriv->dot118021XGrpKeyid = key_index; psecuritypriv->binstallGrpkey = 1; @@ -659,7 +654,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, - param->u.crypt.idx); + key_index); pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter); if (pbcmc_sta) { @@ -728,8 +723,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, + dot118021XGrpKey[key_index].skey, param->u.crypt.key, (key_len > 16 ? 16 : key_len)); @@ -740,8 +734,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, WLAN_CIPHER_SUITE_TKIP; memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, + dot118021XGrpKey[key_index].skey, param->u.crypt.key, (key_len > 16 ? 16 : key_len)); @@ -750,12 +743,10 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, param->u.crypt.key_len); */ /* set mic key */ memcpy(psecuritypriv-> - dot118021XGrptxmickey[param->u. - crypt.idx].skey, + dot118021XGrptxmickey[key_index].skey, ¶m->u.crypt.key[16], 8); memcpy(psecuritypriv-> - dot118021XGrprxmickey[param->u. - crypt.idx].skey, + dot118021XGrprxmickey[key_index].skey, ¶m->u.crypt.key[24], 8); psecuritypriv->busetkipkey = 1; @@ -765,15 +756,14 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, WLAN_CIPHER_SUITE_CCMP; memcpy(psecuritypriv-> - dot118021XGrpKey[param->u.crypt. - idx].skey, + dot118021XGrpKey[key_index].skey, param->u.crypt.key, (key_len > 16 ? 16 : key_len)); } else { psecuritypriv->dot118021XGrpPrivacy = 0; } - psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; + psecuritypriv->dot118021XGrpKeyid = key_index; psecuritypriv->binstallGrpkey = 1; @@ -782,7 +772,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, - param->u.crypt.idx); + key_index); pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter); if (pbcmc_sta) { @@ -1059,8 +1049,8 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, if (mac_addr) ether_addr_copy(param->sta_addr, mac_addr); - ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len, - params); + ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, param, + param_len, params); #endif } else { DBG_8723A("error! fw_state = 0x%x, iftype =%d\n", -- cgit From fd381874eb3efded6c088f649a03c03b9690d588 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:46 +0200 Subject: staging: rtl8723au: rtw_cfg80211_ap_set_encryption(): obtain key from key_params Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 31 +++++++++++------------ 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 819573ff00eb..f676ec63db5d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -612,17 +612,17 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ memcpy(psecuritypriv-> dot118021XGrptxmickey[key_index].skey, - ¶m->u.crypt.key[16], 8); + &keyparms->key[16], 8); memcpy(psecuritypriv-> dot118021XGrprxmickey[key_index].skey, - ¶m->u.crypt.key[24], 8); + &keyparms->key[24], 8); psecuritypriv->busetkipkey = 1; @@ -634,8 +634,8 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, WLAN_CIPHER_SUITE_CCMP; memcpy(psecuritypriv-> - dot118021XGrpKey[key_index]. - skey, param->u.crypt.key, + dot118021XGrpKey[key_index].skey, + keyparms->key, (key_len > 16 ? 16 : key_len)); } else { DBG_8723A("%s, set group_key, none\n", @@ -652,7 +652,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy; - set_group_key(padapter, param->u.crypt.key, + set_group_key(padapter, keyparms->key, psecuritypriv->dot118021XGrpPrivacy, key_index); @@ -675,8 +675,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, if (param->u.crypt.set_tx == 1) { /* pairwise key */ memcpy(psta->dot118021x_UncstKey.skey, - param->u.crypt.key, - (key_len > 16 ? 16 : key_len)); + keyparms->key, (key_len > 16 ? 16 : key_len)); if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { @@ -695,9 +694,9 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ memcpy(psta->dot11tkiptxmickey.skey, - ¶m->u.crypt.key[16], 8); + &keyparms->key[16], 8); memcpy(psta->dot11tkiprxmickey.skey, - ¶m->u.crypt.key[24], 8); + &keyparms->key[24], 8); psecuritypriv->busetkipkey = 1; @@ -724,7 +723,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); psecuritypriv->dot118021XGrpPrivacy = @@ -735,7 +734,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); /* DEBUG_ERR("set key length :param->u" @@ -744,10 +743,10 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, /* set mic key */ memcpy(psecuritypriv-> dot118021XGrptxmickey[key_index].skey, - ¶m->u.crypt.key[16], 8); + &keyparms->key[16], 8); memcpy(psecuritypriv-> dot118021XGrprxmickey[key_index].skey, - ¶m->u.crypt.key[24], 8); + &keyparms->key[24], 8); psecuritypriv->busetkipkey = 1; @@ -757,7 +756,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - param->u.crypt.key, + keyparms->key, (key_len > 16 ? 16 : key_len)); } else { psecuritypriv->dot118021XGrpPrivacy = 0; @@ -770,7 +769,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy; - set_group_key(padapter, param->u.crypt.key, + set_group_key(padapter, keyparms->key, psecuritypriv->dot118021XGrpPrivacy, key_index); -- cgit From 0996cf9c693fd58d116619005ac1e1382865e0db Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:47 +0200 Subject: staging: rtl8723au: rtw_cfg80211_{ap_}set_encryption(): Add set_tx argument Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 31 ++++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index f676ec63db5d..624966eada1f 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -500,6 +500,7 @@ static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, } static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, + int set_tx, struct ieee_param *param, u32 param_len, struct key_params *keyparms) @@ -591,7 +592,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, } if (!psta) { /* group key */ - if (param->u.crypt.set_tx == 0) { /* group key */ + if (set_tx == 0) { /* group key */ if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { DBG_8723A("%s, set group_key, WEP\n", __func__); @@ -672,7 +673,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) { /* psk/802_1x */ - if (param->u.crypt.set_tx == 1) { + if (set_tx == 1) { /* pairwise key */ memcpy(psta->dot118021x_UncstKey.skey, keyparms->key, (key_len > 16 ? 16 : key_len)); @@ -791,6 +792,7 @@ exit: #endif static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, + int set_tx, struct ieee_param *param, u32 param_len, struct key_params *keyparms) { @@ -890,10 +892,10 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, dot11PrivacyAlgrthm; } - if (param->u.crypt.set_tx == 1) { + if (set_tx == 1) { /* pairwise key */ - DBG_8723A("%s, : param->u.crypt.set_tx" - " == 1\n", __func__); + DBG_8723A("%s, : set_tx == 1\n", + __func__); memcpy(psta->dot118021x_UncstKey.skey, keyparms->key, @@ -977,7 +979,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, char *alg_name; u32 param_len; struct ieee_param *param; - int ret = 0; + int set_tx, ret = 0; struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy); struct rtw_adapter *padapter = wiphy_to_adapter(wiphy); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -1022,11 +1024,10 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN); - if (!mac_addr || is_broadcast_ether_addr(mac_addr)) { - param->u.crypt.set_tx = 0; /* for wpa/wpa2 group key */ - } else { - param->u.crypt.set_tx = 1; /* for wpa/wpa2 pairwise key */ - } + if (!mac_addr || is_broadcast_ether_addr(mac_addr)) + set_tx = 0; /* for wpa/wpa2 group key */ + else + set_tx = 1; /* for wpa/wpa2 pairwise key */ /* param->u.crypt.idx = key_index - 1; */ param->u.crypt.idx = key_index; @@ -1041,15 +1042,15 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, } if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { - ret = rtw_cfg80211_set_encryption(ndev, key_index, param, - param_len, params); + ret = rtw_cfg80211_set_encryption(ndev, key_index, set_tx, + param, param_len, params); } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { #ifdef CONFIG_8723AU_AP_MODE if (mac_addr) ether_addr_copy(param->sta_addr, mac_addr); - ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, param, - param_len, params); + ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, set_tx, + param, param_len, params); #endif } else { DBG_8723A("error! fw_state = 0x%x, iftype =%d\n", -- cgit From 6e6e2d633b7410953597eff63ccb210aa2aadd33 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:48 +0200 Subject: staging: rtl8723au: Stop setting ieee_parm arguments that aren't used Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 37 ----------------------- 1 file changed, 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 624966eada1f..7aaa3f8bda9d 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -514,17 +514,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("%s\n", __func__); - param->u.crypt.err = 0; - param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; - - /* sizeof(struct ieee_param) = 64 bytes; */ - /* if (param_len != (u32) ((u8 *) param->u.crypt.key - - (u8 *) param) + param->u.crypt.key_len) */ - if (param_len != sizeof(struct ieee_param) + param->u.crypt.key_len) { - ret = -EINVAL; - goto exit; - } - if (is_broadcast_ether_addr(param->sta_addr)) { if (key_index >= WEP_KEYS) { ret = -EINVAL; @@ -616,7 +605,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, keyparms->key, (key_len > 16 ? 16 : key_len)); - /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ memcpy(psecuritypriv-> dot118021XGrptxmickey[key_index].skey, @@ -692,7 +680,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psta->dot118021XPrivacy = WLAN_CIPHER_SUITE_TKIP; - /* DEBUG_ERR("set key length :param->u.crypt.key_len =%d\n", param->u.crypt.key_len); */ /* set mic key */ memcpy(psta->dot11tkiptxmickey.skey, &keyparms->key[16], 8); @@ -738,9 +725,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, keyparms->key, (key_len > 16 ? 16 : key_len)); - /* DEBUG_ERR("set key length :param->u" - ".crypt.key_len =%d\n", - param->u.crypt.key_len); */ /* set mic key */ memcpy(psecuritypriv-> dot118021XGrptxmickey[key_index].skey, @@ -804,17 +788,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("%s\n", __func__); - param->u.crypt.err = 0; - param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; - key_len = keyparms->key_len; - if (param_len < - (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + key_len) { - ret = -EINVAL; - goto exit; - } - if (is_broadcast_ether_addr(param->sta_addr)) { if (key_index >= WEP_KEYS) { ret = -EINVAL; @@ -1029,18 +1004,6 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, else set_tx = 1; /* for wpa/wpa2 pairwise key */ - /* param->u.crypt.idx = key_index - 1; */ - param->u.crypt.idx = key_index; - - if (params->seq_len && params->seq) { - memcpy(param->u.crypt.seq, params->seq, params->seq_len); - } - - if (params->key_len && params->key) { - param->u.crypt.key_len = params->key_len; - memcpy(param->u.crypt.key, params->key, params->key_len); - } - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { ret = rtw_cfg80211_set_encryption(ndev, key_index, set_tx, param, param_len, params); -- cgit From efd4216c2d558f2faf03284e95a9c1c1297d801a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:49 +0200 Subject: staging: rtl8723au: rtw_cfg80211_{ap_}set_encryption(): No more string parsing to determine cipher Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 37 ++++++++--------------- 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 7aaa3f8bda9d..7e34f890a3b3 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -855,7 +855,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, } else { /* Jeff: don't disable ieee8021x_blocked while clearing key */ - if (strcmp(param->u.crypt.alg, "none") != 0) + if (keyparms->cipher != IW_AUTH_CIPHER_NONE && + keyparms->cipher != 0) psta->ieee8021x_blocked = false; if ((padapter->securitypriv.ndisencryptstatus == @@ -922,7 +923,8 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, if (pbcmc_sta) { /* Jeff: don't disable ieee8021x_blocked while clearing key */ - if (strcmp(param->u.crypt.alg, "none") != 0) + if (keyparms->cipher != IW_AUTH_CIPHER_NONE && + keyparms->cipher != 0) pbcmc_sta->ieee8021x_blocked = false; if ((padapter->securitypriv.ndisencryptstatus == @@ -951,7 +953,6 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params) { - char *alg_name; u32 param_len; struct ieee_param *param; int set_tx, ret = 0; @@ -967,37 +968,25 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, DBG_8723A("key_index =%d\n", key_index); DBG_8723A("pairwise =%d\n", pairwise); - param_len = sizeof(struct ieee_param) + params->key_len; - param = kzalloc(param_len, GFP_KERNEL); - if (!param) - return -ENOMEM; - - param->cmd = IEEE_CMD_SET_ENCRYPTION; - eth_broadcast_addr(param->sta_addr); - switch (params->cipher) { case IW_AUTH_CIPHER_NONE: - /* todo: remove key */ - /* remove = 1; */ - alg_name = "none"; - break; case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: - alg_name = "WEP"; - break; case WLAN_CIPHER_SUITE_TKIP: - alg_name = "TKIP"; - break; case WLAN_CIPHER_SUITE_CCMP: - alg_name = "CCMP"; break; - default: ret = -ENOTSUPP; - goto addkey_end; + goto exit; } - strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN); + param_len = sizeof(struct ieee_param) + params->key_len; + param = kzalloc(param_len, GFP_KERNEL); + if (!param) + return -ENOMEM; + + param->cmd = IEEE_CMD_SET_ENCRYPTION; + eth_broadcast_addr(param->sta_addr); if (!mac_addr || is_broadcast_ether_addr(mac_addr)) set_tx = 0; /* for wpa/wpa2 group key */ @@ -1021,9 +1010,9 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, } -addkey_end: kfree(param); +exit: return ret; } -- cgit From f88ab54c10b1270257f39268e88c1949fd903fb2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:50 +0200 Subject: staging: rtl8723au: rtw_cfg80211_{ap_}set_encryption(): Add sta_addr argument Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 7e34f890a3b3..0cbf25529162 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -500,7 +500,7 @@ static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, } static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, - int set_tx, + int set_tx, const u8 *sta_addr, struct ieee_param *param, u32 param_len, struct key_params *keyparms) @@ -514,7 +514,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("%s\n", __func__); - if (is_broadcast_ether_addr(param->sta_addr)) { + if (is_broadcast_ether_addr(sta_addr)) { if (key_index >= WEP_KEYS) { ret = -EINVAL; goto exit; @@ -531,7 +531,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, } } else { - psta = rtw_get_stainfo23a(pstapriv, param->sta_addr); + psta = rtw_get_stainfo23a(pstapriv, sta_addr); if (!psta) { /* ret = -EINVAL; */ DBG_8723A("rtw_set_encryption(), sta has already " @@ -776,7 +776,7 @@ exit: #endif static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, - int set_tx, + int set_tx, const u8 *sta_addr, struct ieee_param *param, u32 param_len, struct key_params *keyparms) { @@ -790,7 +790,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, key_len = keyparms->key_len; - if (is_broadcast_ether_addr(param->sta_addr)) { + if (is_broadcast_ether_addr(sta_addr)) { if (key_index >= WEP_KEYS) { ret = -EINVAL; goto exit; @@ -959,6 +959,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy); struct rtw_adapter *padapter = wiphy_to_adapter(wiphy); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + u8 sta_addr[ETH_ALEN]; DBG_8723A("%s(%s): adding key for %pM\n", __func__, ndev->name, mac_addr); @@ -986,7 +987,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, return -ENOMEM; param->cmd = IEEE_CMD_SET_ENCRYPTION; - eth_broadcast_addr(param->sta_addr); + eth_broadcast_addr(sta_addr); if (!mac_addr || is_broadcast_ether_addr(mac_addr)) set_tx = 0; /* for wpa/wpa2 group key */ @@ -995,13 +996,15 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { ret = rtw_cfg80211_set_encryption(ndev, key_index, set_tx, + sta_addr, param, param_len, params); } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { #ifdef CONFIG_8723AU_AP_MODE if (mac_addr) - ether_addr_copy(param->sta_addr, mac_addr); + ether_addr_copy(sta_addr, mac_addr); ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, set_tx, + sta_addr, param, param_len, params); #endif } else { -- cgit From f0bf8dd53d1a1c952784f1e5cf0c076cb514bdaf Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:51 +0200 Subject: staging: rtl8723au: rtw_cfg80211_{ap_}set_encryption(): Stop passing ieee_parms argument struct ieee_parms is obsolete, so stop passing it on. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 0cbf25529162..f53189a41fd1 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -501,8 +501,6 @@ static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, int set_tx, const u8 *sta_addr, - struct ieee_param *param, - u32 param_len, struct key_params *keyparms) { int ret = 0; @@ -777,7 +775,6 @@ exit: static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, int set_tx, const u8 *sta_addr, - struct ieee_param *param, u32 param_len, struct key_params *keyparms) { int ret = 0; @@ -953,8 +950,6 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params) { - u32 param_len; - struct ieee_param *param; int set_tx, ret = 0; struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy); struct rtw_adapter *padapter = wiphy_to_adapter(wiphy); @@ -981,12 +976,6 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, goto exit; } - param_len = sizeof(struct ieee_param) + params->key_len; - param = kzalloc(param_len, GFP_KERNEL); - if (!param) - return -ENOMEM; - - param->cmd = IEEE_CMD_SET_ENCRYPTION; eth_broadcast_addr(sta_addr); if (!mac_addr || is_broadcast_ether_addr(mac_addr)) @@ -996,16 +985,14 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { ret = rtw_cfg80211_set_encryption(ndev, key_index, set_tx, - sta_addr, - param, param_len, params); + sta_addr, params); } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { #ifdef CONFIG_8723AU_AP_MODE if (mac_addr) ether_addr_copy(sta_addr, mac_addr); ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, set_tx, - sta_addr, - param, param_len, params); + sta_addr, params); #endif } else { DBG_8723A("error! fw_state = 0x%x, iftype =%d\n", @@ -1013,8 +1000,6 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, } - kfree(param); - exit: return ret; } -- cgit From 3e71669accfadd670aa745d7bdcabc179360d9cb Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:52 +0200 Subject: staging: rtl8723au: Remove obsolete struct ieee_parm Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/ieee80211.h | 50 --------------------------- 1 file changed, 50 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h index 0b17a7feaee7..e9f465f0bc2c 100644 --- a/drivers/staging/rtl8723au/include/ieee80211.h +++ b/drivers/staging/rtl8723au/include/ieee80211.h @@ -48,12 +48,6 @@ #endif -#define IEEE_CMD_SET_WPA_PARAM 1 -#define IEEE_CMD_SET_WPA_IE 2 -#define IEEE_CMD_SET_ENCRYPTION 3 - -#define IEEE_CRYPT_ALG_NAME_LEN 16 - #define WPA_CIPHER_NONE BIT(0) #define WPA_CIPHER_WEP40 BIT(1) #define WPA_CIPHER_WEP104 BIT(2) @@ -151,50 +145,6 @@ enum NETWORK_TYPE #define IsSupportedTxMCS(NetType) (NetType & (WIRELESS_11_24N|WIRELESS_11_5N) ? true : false) -struct ieee_param { - u32 cmd; - u8 sta_addr[ETH_ALEN]; - union { - struct { - u8 name; - u32 value; - } wpa_param; - struct { - u32 len; - u8 reserved[32]; - u8 data[0]; - } wpa_ie; - struct{ - int command; - int reason_code; - } mlme; - struct { - u8 alg[IEEE_CRYPT_ALG_NAME_LEN]; - u8 set_tx; - u32 err; - u8 idx; - u8 seq[8]; /* sequence counter (set: RX, get: TX) */ - u16 key_len; - u8 key[0]; - } crypt; -#ifdef CONFIG_8723AU_AP_MODE - struct { - u16 aid; - u16 capability; - int flags; - u8 tx_supp_rates[16]; - struct ieee80211_ht_cap ht_cap; - } add_sta; - struct { - u8 reserved[2];/* for set max_num_sta */ - u8 buf[0]; - } bcn_ie; -#endif - - } u; -}; - - #define MIN_FRAG_THRESHOLD 256U #define MAX_FRAG_THRESHOLD 2346U -- cgit From 7ef2743da1bb1edcad5cdfafe75652445fa3cc1b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:53 +0200 Subject: staging: rtl8723au: Validate keys in cfg80211_rtw_add_key() We validate the parameters in cfg80211_rtw_add_key() so no need to do it all again in rtw_cfg80211_{ap_}set_encryption() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 76 ++++++----------------- 1 file changed, 19 insertions(+), 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index f53189a41fd1..87f953c2eaec 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -512,23 +512,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("%s\n", __func__); - if (is_broadcast_ether_addr(sta_addr)) { - if (key_index >= WEP_KEYS) { - ret = -EINVAL; - goto exit; - } - switch (keyparms->cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - case WLAN_CIPHER_SUITE_TKIP: - case WLAN_CIPHER_SUITE_CCMP: - break; - default: - ret = -EINVAL; - goto exit; - } - - } else { + if (!is_broadcast_ether_addr(sta_addr)) { psta = rtw_get_stainfo23a(pstapriv, sta_addr); if (!psta) { /* ret = -EINVAL; */ @@ -547,15 +531,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("r871x_set_encryption, wep_key_idx =%d, len =%d\n", key_index, key_len); - if (key_index >= WEP_KEYS || key_len <= 0) { - ret = -EINVAL; - goto exit; - } - - if (key_len > 0) { - key_len = key_len <= 5 ? 5 : 13; - } - if (psecuritypriv->bWepDefaultKeyIdxSet == 0) { /* wep default key has not been set, so use this key index as default key. */ @@ -586,8 +561,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - keyparms->key, - (key_len > 16 ? 16 : key_len)); + keyparms->key, key_len); psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher; @@ -628,8 +602,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, DBG_8723A("%s, set group_key, none\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = - 0; + psecuritypriv->dot118021XGrpPrivacy = 0; } psecuritypriv->dot118021XGrpKeyid = key_index; @@ -709,8 +682,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { memcpy(psecuritypriv-> dot118021XGrpKey[key_index].skey, - keyparms->key, - (key_len > 16 ? 16 : key_len)); + keyparms->key, key_len); psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher; @@ -732,7 +704,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, &keyparms->key[24], 8); psecuritypriv->busetkipkey = 1; - } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) { psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_CCMP; @@ -787,42 +758,20 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index, key_len = keyparms->key_len; - if (is_broadcast_ether_addr(sta_addr)) { - if (key_index >= WEP_KEYS) { - ret = -EINVAL; - goto exit; - } - } else { - ret = -EINVAL; - goto exit; - } - if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 || keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) { RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("wpa_set_encryption, crypt.alg = WEP\n")); DBG_8723A("wpa_set_encryption, crypt.alg = WEP\n"); - if (key_index > WEP_KEYS || key_len <= 0) { - ret = -EINVAL; - goto exit; - } - if (psecuritypriv->bWepDefaultKeyIdxSet == 0) { /* wep default key has not been set, so use this key index as default key. */ - key_len = key_len <= 5 ? 5 : 13; - psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled; - psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40; - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40; - - if (key_len == 13) { - psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104; - psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104; - } + psecuritypriv->dot11PrivacyAlgrthm = keyparms->cipher; + psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher; psecuritypriv->dot11PrivacyKeyIndex = key_index; } @@ -967,7 +916,15 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, switch (params->cipher) { case IW_AUTH_CIPHER_NONE: case WLAN_CIPHER_SUITE_WEP40: + if (params->key_len != WLAN_KEY_LEN_WEP40) { + ret = -EINVAL; + goto exit; + } case WLAN_CIPHER_SUITE_WEP104: + if (params->key_len != WLAN_KEY_LEN_WEP104) { + ret = -EINVAL; + goto exit; + } case WLAN_CIPHER_SUITE_TKIP: case WLAN_CIPHER_SUITE_CCMP: break; @@ -976,6 +933,11 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, goto exit; } + if (key_index >= WEP_KEYS || params->key_len < 0) { + ret = -EINVAL; + goto exit; + } + eth_broadcast_addr(sta_addr); if (!mac_addr || is_broadcast_ether_addr(mac_addr)) -- cgit From 2dcf6b4c73a3b92774955b83e5bd7c5cec2c87e6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:54 +0200 Subject: staging: rtl8723au: Eliminate set_wep_key() and call set_group_key() directly This also eliminates another round of determine algorithm based on key length, followed by determine key length based on algorithm. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 45 +++-------------------- 1 file changed, 6 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c index 87f953c2eaec..93dc844a10b3 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c @@ -417,10 +417,9 @@ exit: return res; } -static int set_group_key(struct rtw_adapter *padapter, const u8 *key, u32 alg, - u8 keyid) +static int set_group_key(struct rtw_adapter *padapter, struct key_params *parms, + u32 alg, u8 keyid) { - u8 keylen; struct cmd_obj *pcmd; struct setkey_parm *psetkeyparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; @@ -453,20 +452,7 @@ static int set_group_key(struct rtw_adapter *padapter, const u8 *key, u32 alg, psetkeyparm->set_tx = 1; - switch (alg) { - case WLAN_CIPHER_SUITE_WEP40: - keylen = 5; - break; - case WLAN_CIPHER_SUITE_WEP104: - keylen = 13; - break; - case WLAN_CIPHER_SUITE_TKIP: - case WLAN_CIPHER_SUITE_CCMP: - default: - keylen = 16; - } - - memcpy(&psetkeyparm->key[0], key, keylen); + memcpy(&psetkeyparm->key, parms->key, parms->key_len); pcmd->cmdcode = _SetKey_CMD_; pcmd->parmbuf = (u8 *) psetkeyparm; @@ -480,25 +466,6 @@ exit: return res; } -static int set_wep_key(struct rtw_adapter *padapter, const u8 *key, u16 keylen, - u8 keyid) -{ - u32 alg; - - switch (keylen) { - case 5: - alg = WLAN_CIPHER_SUITE_WEP40; - break; - case 13: - alg = WLAN_CIPHER_SUITE_WEP104; - break; - default: - alg = 0; - } - - return set_group_key(padapter, key, alg, keyid); -} - static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, int set_tx, const u8 *sta_addr, struct key_params *keyparms) @@ -548,7 +515,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psecuritypriv->wep_key[key_index].keylen = key_len; - set_wep_key(padapter, keyparms->key, key_len, key_index); + set_group_key(padapter, keyparms, keyparms->cipher, key_index); goto exit; } @@ -612,7 +579,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy; - set_group_key(padapter, keyparms->key, + set_group_key(padapter, keyparms, psecuritypriv->dot118021XGrpPrivacy, key_index); @@ -723,7 +690,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index, psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy; - set_group_key(padapter, keyparms->key, + set_group_key(padapter, keyparms, psecuritypriv->dot118021XGrpPrivacy, key_index); -- cgit From 86184b93c52c21ad3bd56d185634a4704f9e98c9 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:55 +0200 Subject: staging: rtl8723au: rtw_restruct_wmm_ie23a(): Use cfg80211_find_vendor_ie() Rewrite rtw_restruct_wmm_ie23a() using cfg80211_find_vendor_ie() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 34 ++++++++++++------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index b3db56ab3a66..d0e9b660844b 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1909,33 +1909,25 @@ exit: /* adjust IEs for rtw_joinbss_cmd23a in WMM */ int rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie, - u8 *out_ie, uint in_len, uint initial_out_len) + u8 *out_ie, uint in_len, uint initial_out_len) { - unsigned int ielength = 0; - unsigned int i, j; + int ielength; + const u8 *p; - i = 0; /* after the fixed IE */ - while (i < in_len) { - ielength = initial_out_len; + ielength = initial_out_len; - /* WMM element ID and OUI */ - if (in_ie[i] == 0xDD && in_ie[i + 2] == 0x00 && - in_ie[i + 3] == 0x50 && in_ie[i + 4] == 0xF2 && - in_ie[i + 5] == 0x02 && i+5 < in_len) { + p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WMM, + in_ie, in_len); - /* Append WMM IE to the last index of out_ie */ - for (j = i; j < i + 9; j++) { - out_ie[ielength] = in_ie[j]; - ielength++; - } - out_ie[initial_out_len + 1] = 0x07; - out_ie[initial_out_len + 6] = 0x00; - out_ie[initial_out_len + 8] = 0x00; + if (p && p[1]) { + memcpy(out_ie + initial_out_len, p, 9); - break; - } + out_ie[initial_out_len + 1] = 7; + out_ie[initial_out_len + 6] = 0; + out_ie[initial_out_len + 8] = 0; - i += (in_ie[i + 1] + 2); /* to the next IE element */ + ielength += 9; } return ielength; -- cgit From 98f979f1f80cf2ef0188370ee8fec996c3ee7fd8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:56 +0200 Subject: staging: rtl8723au: rtw_append_pmkid(): Adjust for IEs array not arrying fixed elements Another case using hard coded offsets counting on the presence of fixed beacon elements in the IEs array. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index d0e9b660844b..c2e3777292a5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -1984,7 +1984,7 @@ static int rtw_append_pmkid(struct rtw_adapter *Adapter, int iEntry, { struct security_priv *psecuritypriv = &Adapter->securitypriv; - if (ie[13] <= 20) { + if (ie[1] <= 20) { /* The RSN IE didn't include the PMK ID, append the PMK information */ ie[ie_len] = 1; @@ -1995,7 +1995,7 @@ static int rtw_append_pmkid(struct rtw_adapter *Adapter, int iEntry, &psecuritypriv->PMKIDList[iEntry].PMKID, 16); ie_len += 16; - ie[13] += 18;/* PMKID length = 2+16 */ + ie[1] += 18;/* PMKID length = 2+16 */ } return ie_len; } -- cgit From 42282f4147e2bc5b89d6a050244a7c5475613d83 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:57 +0200 Subject: staging: rtl8723au: Only validate vendor specific ies, when they it is vendor specific Don't run rtw_validate_vendor_specific_ies() on anything but WLAN_EID_VENDOR_SPECIFIC. In addition use the proper WLAN_OUI_TYPE_MICROSOFT_* definitions. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 4b769d55bb44..88cf1fd065a5 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1204,11 +1204,11 @@ static int rtw_validate_vendor_specific_ies(const u8 *pos, int elen) /* Microsoft/Wi-Fi information elements are further typed and * subtyped */ switch (pos[3]) { - case 1: + case WLAN_OUI_TYPE_MICROSOFT_WPA: /* Microsoft OUI (00:50:F2) with OUI Type 1: * real WPA information element */ break; - case WME_OUI_TYPE: /* this is a Wi-Fi WME info. element */ + case WLAN_OUI_TYPE_MICROSOFT_WMM: if (elen < 5) { DBG_8723A("short WME information element " "ignored (len =%i)\n", elen); @@ -1227,7 +1227,7 @@ static int rtw_validate_vendor_specific_ies(const u8 *pos, int elen) return -EINVAL; } break; - case 4: + case WLAN_OUI_TYPE_MICROSOFT_WPS: /* Wi-Fi Protected Setup (WPS) IE */ break; default: @@ -1289,6 +1289,7 @@ static int rtw_validate_frame_ies(const u8 *start, uint len) case WLAN_EID_CHALLENGE: case WLAN_EID_ERP_INFO: case WLAN_EID_EXT_SUPP_RATES: + break; case WLAN_EID_VENDOR_SPECIFIC: if (rtw_validate_vendor_specific_ies(pos, elen)) unknown++; -- cgit From 7c3a8f2a5ec95e2b13704562f36321e20ddfc190 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 24 Jun 2014 15:03:58 +0200 Subject: staging: rtl8723au: OnAssocReq23a(): Use cfg80211_find_vendor_ie() to locate VMM Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 62 +++++++++++++-------------- 1 file changed, 30 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 88cf1fd065a5..09e5a59148fb 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -1327,7 +1327,6 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) u16 capab_info, listen_interval; struct sta_info *pstat; unsigned char reassoc; - unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01}; int i, wpa_ie_len, left; unsigned char supportRate[16]; int supportRateNum; @@ -1577,47 +1576,46 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) for (;;) { left = end - p; - p = cfg80211_find_ie(WLAN_EID_VENDOR_SPECIFIC, p, left); + p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, + WLAN_OUI_TYPE_MICROSOFT_WMM, + p, left); if (p) { - if (!memcmp(p + 2, WMM_IE, 6)) { - pstat->flags |= WLAN_STA_WME; + pstat->flags |= WLAN_STA_WME; - pstat->qos_option = 1; - pstat->qos_info = *(p + 8); + pstat->qos_option = 1; + pstat->qos_info = *(p + 8); - pstat->max_sp_len = - (pstat->qos_info >> 5) & 0x3; + pstat->max_sp_len = + (pstat->qos_info >> 5) & 0x3; - if ((pstat->qos_info & 0xf) != 0xf) - pstat->has_legacy_ac = true; - else - pstat->has_legacy_ac = false; - - if (pstat->qos_info & 0xf) { - if (pstat->qos_info & BIT(0)) - pstat->uapsd_vo = BIT(0)|BIT(1); - else - pstat->uapsd_vo = 0; + if ((pstat->qos_info & 0xf) != 0xf) + pstat->has_legacy_ac = true; + else + pstat->has_legacy_ac = false; - if (pstat->qos_info & BIT(1)) - pstat->uapsd_vi = BIT(0)|BIT(1); - else - pstat->uapsd_vi = 0; + if (pstat->qos_info & 0xf) { + if (pstat->qos_info & BIT(0)) + pstat->uapsd_vo = BIT(0)|BIT(1); + else + pstat->uapsd_vo = 0; - if (pstat->qos_info & BIT(2)) - pstat->uapsd_bk = BIT(0)|BIT(1); - else - pstat->uapsd_bk = 0; + if (pstat->qos_info & BIT(1)) + pstat->uapsd_vi = BIT(0)|BIT(1); + else + pstat->uapsd_vi = 0; - if (pstat->qos_info & BIT(3)) - pstat->uapsd_be = BIT(0)|BIT(1); - else - pstat->uapsd_be = 0; + if (pstat->qos_info & BIT(2)) + pstat->uapsd_bk = BIT(0)|BIT(1); + else + pstat->uapsd_bk = 0; - } + if (pstat->qos_info & BIT(3)) + pstat->uapsd_be = BIT(0)|BIT(1); + else + pstat->uapsd_be = 0; - break; } + break; } else { break; } -- cgit From 0b913529c7831d0244a602927e763ec8c4134747 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sat, 21 Jun 2014 04:42:10 -0400 Subject: staging: lustre: fix sparse warnings for static symbols This patch fixes the following sparse warnings: drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:46:20: warning: symbol 'the_ksocklnd' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:49:19: warning: symbol 'ksocknal_ip2iface' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:67:15: warning: symbol 'ksocknal_create_route' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:103:1: warning: symbol 'ksocknal_create_peer' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:218:1: warning: symbol 'ksocknal_unlink_peer_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:248:1: warning: symbol 'ksocknal_get_peer_info' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:323:1: warning: symbol 'ksocknal_associate_route_conn_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:368:1: warning: symbol 'ksocknal_add_route_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:409:1: warning: symbol 'ksocknal_del_route_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:511:1: warning: symbol 'ksocknal_del_peer_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:566:1: warning: symbol 'ksocknal_del_peer' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:624:14: warning: symbol 'ksocknal_get_conn_by_idx' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:661:15: warning: symbol 'ksocknal_choose_scheduler_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:685:1: warning: symbol 'ksocknal_local_ipvec' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:713:1: warning: symbol 'ksocknal_match_peerip' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:745:1: warning: symbol 'ksocknal_select_ips' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:847:1: warning: symbol 'ksocknal_create_routes' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:997:1: warning: symbol 'ksocknal_connecting' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:1853:1: warning: symbol 'ksocknal_push_peer' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:1886:1: warning: symbol 'ksocknal_push' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:1935:1: warning: symbol 'ksocknal_add_interface' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:1997:1: warning: symbol 'ksocknal_peer_del_interface_locked' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2038:1: warning: symbol 'ksocknal_del_interface' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2213:1: warning: symbol 'ksocknal_free_buffers' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2256:1: warning: symbol 'ksocknal_base_shutdown' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2349:1: warning: symbol 'ksocknal_new_incarnation' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2364:1: warning: symbol 'ksocknal_base_startup' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2496:1: warning: symbol 'ksocknal_debug_peerhash' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2603:1: warning: symbol 'ksocknal_enumerate_interfaces' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2660:1: warning: symbol 'ksocknal_search_new_ipif' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2702:1: warning: symbol 'ksocknal_start_schedulers' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2748:1: warning: symbol 'ksocknal_net_start_threads' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2860:1: warning: symbol 'ksocknal_module_fini' was not declared. Should it be static? drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c:2866:1: warning: symbol 'ksocknal_module_init' was not declared. Should it be static? Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 70 +++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index f528b65cd513..425c0fb17bc6 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -43,10 +43,10 @@ #include "socklnd.h" -lnd_t the_ksocklnd; -ksock_nal_data_t ksocknal_data; +static lnd_t the_ksocklnd; +ksock_nal_data_t ksocknal_data; -ksock_interface_t * +static ksock_interface_t * ksocknal_ip2iface(lnet_ni_t *ni, __u32 ip) { ksock_net_t *net = ni->ni_data; @@ -64,7 +64,7 @@ ksocknal_ip2iface(lnet_ni_t *ni, __u32 ip) return NULL; } -ksock_route_t * +static ksock_route_t * ksocknal_create_route (__u32 ipaddr, int port) { ksock_route_t *route; @@ -99,7 +99,7 @@ ksocknal_destroy_route (ksock_route_t *route) LIBCFS_FREE (route, sizeof (*route)); } -int +static int ksocknal_create_peer (ksock_peer_t **peerp, lnet_ni_t *ni, lnet_process_id_t id) { ksock_net_t *net = ni->ni_data; @@ -214,7 +214,7 @@ ksocknal_find_peer (lnet_ni_t *ni, lnet_process_id_t id) return peer; } -void +static void ksocknal_unlink_peer_locked (ksock_peer_t *peer) { int i; @@ -244,7 +244,7 @@ ksocknal_unlink_peer_locked (ksock_peer_t *peer) ksocknal_peer_decref(peer); } -int +static int ksocknal_get_peer_info (lnet_ni_t *ni, int index, lnet_process_id_t *id, __u32 *myip, __u32 *peer_ip, int *port, int *conn_count, int *share_count) @@ -319,7 +319,7 @@ ksocknal_get_peer_info (lnet_ni_t *ni, int index, return rc; } -void +static void ksocknal_associate_route_conn_locked(ksock_route_t *route, ksock_conn_t *conn) { ksock_peer_t *peer = route->ksnr_peer; @@ -364,7 +364,7 @@ ksocknal_associate_route_conn_locked(ksock_route_t *route, ksock_conn_t *conn) route->ksnr_retry_interval = 0; } -void +static void ksocknal_add_route_locked (ksock_peer_t *peer, ksock_route_t *route) { struct list_head *tmp; @@ -405,7 +405,7 @@ ksocknal_add_route_locked (ksock_peer_t *peer, ksock_route_t *route) } } -void +static void ksocknal_del_route_locked (ksock_route_t *route) { ksock_peer_t *peer = route->ksnr_peer; @@ -507,7 +507,7 @@ ksocknal_add_peer (lnet_ni_t *ni, lnet_process_id_t id, __u32 ipaddr, int port) return 0; } -void +static void ksocknal_del_peer_locked (ksock_peer_t *peer, __u32 ip) { ksock_conn_t *conn; @@ -562,7 +562,7 @@ ksocknal_del_peer_locked (ksock_peer_t *peer, __u32 ip) /* NB peer unlinks itself when last conn/route is removed */ } -int +static int ksocknal_del_peer (lnet_ni_t *ni, lnet_process_id_t id, __u32 ip) { LIST_HEAD (zombies); @@ -621,7 +621,7 @@ ksocknal_del_peer (lnet_ni_t *ni, lnet_process_id_t id, __u32 ip) return rc; } -ksock_conn_t * +static ksock_conn_t * ksocknal_get_conn_by_idx (lnet_ni_t *ni, int index) { ksock_peer_t *peer; @@ -658,7 +658,7 @@ ksocknal_get_conn_by_idx (lnet_ni_t *ni, int index) return NULL; } -ksock_sched_t * +static ksock_sched_t * ksocknal_choose_scheduler_locked(unsigned int cpt) { struct ksock_sched_info *info = ksocknal_data.ksnd_sched_info[cpt]; @@ -681,7 +681,7 @@ ksocknal_choose_scheduler_locked(unsigned int cpt) return sched; } -int +static int ksocknal_local_ipvec (lnet_ni_t *ni, __u32 *ipaddrs) { ksock_net_t *net = ni->ni_data; @@ -709,7 +709,7 @@ ksocknal_local_ipvec (lnet_ni_t *ni, __u32 *ipaddrs) return nip; } -int +static int ksocknal_match_peerip (ksock_interface_t *iface, __u32 *ips, int nips) { int best_netmatch = 0; @@ -741,7 +741,7 @@ ksocknal_match_peerip (ksock_interface_t *iface, __u32 *ips, int nips) return best; } -int +static int ksocknal_select_ips(ksock_peer_t *peer, __u32 *peerips, int n_peerips) { rwlock_t *global_lock = &ksocknal_data.ksnd_global_lock; @@ -843,7 +843,7 @@ ksocknal_select_ips(ksock_peer_t *peer, __u32 *peerips, int n_peerips) return n_ips; } -void +static void ksocknal_create_routes(ksock_peer_t *peer, int port, __u32 *peer_ipaddrs, int npeer_ipaddrs) { @@ -993,7 +993,7 @@ ksocknal_accept (lnet_ni_t *ni, socket_t *sock) return 0; } -int +static int ksocknal_connecting (ksock_peer_t *peer, __u32 ipaddr) { ksock_route_t *route; @@ -1849,7 +1849,7 @@ ksocknal_query (lnet_ni_t *ni, lnet_nid_t nid, cfs_time_t *when) return; } -void +static void ksocknal_push_peer (ksock_peer_t *peer) { int index; @@ -1882,7 +1882,7 @@ ksocknal_push_peer (ksock_peer_t *peer) } } -int +static int ksocknal_push (lnet_ni_t *ni, lnet_process_id_t id) { ksock_peer_t *peer; @@ -1931,7 +1931,7 @@ ksocknal_push (lnet_ni_t *ni, lnet_process_id_t id) return rc; } -int +static int ksocknal_add_interface(lnet_ni_t *ni, __u32 ipaddress, __u32 netmask) { ksock_net_t *net = ni->ni_data; @@ -1993,7 +1993,7 @@ ksocknal_add_interface(lnet_ni_t *ni, __u32 ipaddress, __u32 netmask) return rc; } -void +static void ksocknal_peer_del_interface_locked(ksock_peer_t *peer, __u32 ipaddr) { struct list_head *tmp; @@ -2034,7 +2034,7 @@ ksocknal_peer_del_interface_locked(ksock_peer_t *peer, __u32 ipaddr) } } -int +static int ksocknal_del_interface(lnet_ni_t *ni, __u32 ipaddress) { ksock_net_t *net = ni->ni_data; @@ -2209,7 +2209,7 @@ ksocknal_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg) /* not reached */ } -void +static void ksocknal_free_buffers (void) { LASSERT (atomic_read(&ksocknal_data.ksnd_nactive_txs) == 0); @@ -2252,7 +2252,7 @@ ksocknal_free_buffers (void) } } -void +static void ksocknal_base_shutdown(void) { struct ksock_sched_info *info; @@ -2345,7 +2345,7 @@ ksocknal_base_shutdown(void) module_put(THIS_MODULE); } -__u64 +static __u64 ksocknal_new_incarnation (void) { struct timeval tv; @@ -2360,7 +2360,7 @@ ksocknal_new_incarnation (void) return (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; } -int +static int ksocknal_base_startup(void) { struct ksock_sched_info *info; @@ -2492,7 +2492,7 @@ ksocknal_base_startup(void) return -ENETDOWN; } -void +static void ksocknal_debug_peerhash (lnet_ni_t *ni) { ksock_peer_t *peer = NULL; @@ -2599,7 +2599,7 @@ ksocknal_shutdown (lnet_ni_t *ni) ksocknal_base_shutdown(); } -int +static int ksocknal_enumerate_interfaces(ksock_net_t *net) { char **names; @@ -2656,7 +2656,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) return j; } -int +static int ksocknal_search_new_ipif(ksock_net_t *net) { int new_ipif = 0; @@ -2698,7 +2698,7 @@ ksocknal_search_new_ipif(ksock_net_t *net) return new_ipif; } -int +static int ksocknal_start_schedulers(struct ksock_sched_info *info) { int nthrs; @@ -2744,7 +2744,7 @@ ksocknal_start_schedulers(struct ksock_sched_info *info) return rc; } -int +static int ksocknal_net_start_threads(ksock_net_t *net, __u32 *cpts, int ncpts) { int newif = ksocknal_search_new_ipif(net); @@ -2856,13 +2856,13 @@ ksocknal_startup (lnet_ni_t *ni) } -void __exit +static void __exit ksocknal_module_fini (void) { lnet_unregister_lnd(&the_ksocklnd); } -int __init +static int __init ksocknal_module_init (void) { int rc; -- cgit From ee01e6334783297a91f4978c390a2a934cfa7a62 Mon Sep 17 00:00:00 2001 From: Vincent Heuken Date: Fri, 20 Jun 2014 09:49:51 -0700 Subject: Staging: serqt_usb2: fixed frivolous else statement warnings This is a patch to the serqt_usb2.c file that fixes three instances of the following checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: Vincent Heuken Signed-off-by: Greg Kroah-Hartman --- drivers/staging/serqt_usb2/serqt_usb2.c | 45 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c index 5e97726d4d66..999757de8fd5 100644 --- a/drivers/staging/serqt_usb2/serqt_usb2.c +++ b/drivers/staging/serqt_usb2/serqt_usb2.c @@ -982,9 +982,8 @@ static void qt_block_until_empty(struct tty_struct *tty, if (wait == 0) { dev_dbg(&qt_port->port->dev, "%s - TIMEOUT", __func__); return; - } else { - wait = 30; } + wait = 30; } } @@ -1120,6 +1119,7 @@ static int qt_ioctl(struct tty_struct *tty, struct usb_serial_port *port = tty->driver_data; struct quatech_port *qt_port = qt_get_port_private(port); unsigned int index; + char diff; dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd); @@ -1133,25 +1133,24 @@ static int qt_ioctl(struct tty_struct *tty, #endif if (signal_pending(current)) return -ERESTARTSYS; - else { - char diff = qt_port->diff_status; - - if (diff == 0) - return -EIO; /* no change => error */ - - /* Consume all events */ - qt_port->diff_status = 0; - - if (((arg & TIOCM_RNG) - && (diff & SERIAL_MSR_RI)) - || ((arg & TIOCM_DSR) - && (diff & SERIAL_MSR_DSR)) - || ((arg & TIOCM_CD) - && (diff & SERIAL_MSR_CD)) - || ((arg & TIOCM_CTS) - && (diff & SERIAL_MSR_CTS))) { - return 0; - } + + diff = qt_port->diff_status; + + if (diff == 0) + return -EIO; /* no change => error */ + + /* Consume all events */ + qt_port->diff_status = 0; + + if (((arg & TIOCM_RNG) + && (diff & SERIAL_MSR_RI)) + || ((arg & TIOCM_DSR) + && (diff & SERIAL_MSR_DSR)) + || ((arg & TIOCM_CD) + && (diff & SERIAL_MSR_CD)) + || ((arg & TIOCM_CTS) + && (diff & SERIAL_MSR_CTS))) { + return 0; } } return 0; @@ -1379,8 +1378,8 @@ static inline int qt_real_tiocmset(struct tty_struct *tty, box_set_register(port->serial, index, MODEM_CONTROL_REGISTER, mcr); if (status < 0) return -ESPIPE; - else - return 0; + + return 0; } static int qt_tiocmget(struct tty_struct *tty) -- cgit From a08d541a26e99aff2dba8788aac948479a0cd102 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Fri, 20 Jun 2014 10:49:54 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Fixed code-style warnings Fixed some of the following warning generated by checkpatch.pl: WARNING: Missing a blank line after declarations Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index ceb06d835dad..d061797b6f3d 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -57,6 +57,7 @@ static int r8192_wx_get_rate(struct net_device *dev, union iwreq_data *wrqu, char *extra) { struct r8192_priv *priv = ieee80211_priv(dev); + return ieee80211_wx_get_rate(priv->ieee80211, info, wrqu, extra); } @@ -100,6 +101,7 @@ static int r8192_wx_get_rts(struct net_device *dev, union iwreq_data *wrqu, char *extra) { struct r8192_priv *priv = ieee80211_priv(dev); + return ieee80211_wx_get_rts(priv->ieee80211, info, wrqu, extra); } @@ -124,6 +126,7 @@ static int r8192_wx_get_power(struct net_device *dev, union iwreq_data *wrqu, char *extra) { struct r8192_priv *priv = ieee80211_priv(dev); + return ieee80211_wx_get_power(priv->ieee80211, info, wrqu, extra); } @@ -194,6 +197,7 @@ static int r8192_wx_set_mode(struct net_device *dev, struct iw_request_info *a, { struct r8192_priv *priv = ieee80211_priv(dev); int ret; + down(&priv->wx_sem); ret = ieee80211_wx_set_mode(priv->ieee80211, a, wrqu, b); @@ -384,6 +388,7 @@ static int r8192_wx_set_essid(struct net_device *dev, { struct r8192_priv *priv = ieee80211_priv(dev); int ret; + down(&priv->wx_sem); ret = ieee80211_wx_set_essid(priv->ieee80211, a, wrqu, b); @@ -432,6 +437,7 @@ static int r8192_wx_get_name(struct net_device *dev, union iwreq_data *wrqu, char *extra) { struct r8192_priv *priv = ieee80211_priv(dev); + return ieee80211_wx_get_name(priv->ieee80211, info, wrqu, extra); } @@ -700,6 +706,7 @@ static int r8192_wx_get_sens(struct net_device *dev, union iwreq_data *wrqu, char *extra) { struct r8192_priv *priv = ieee80211_priv(dev); + if (priv->rf_set_sens == NULL) return -1; /* we have not this support for this radio */ wrqu->sens.value = priv->sens; @@ -713,8 +720,8 @@ static int r8192_wx_set_sens(struct net_device *dev, { struct r8192_priv *priv = ieee80211_priv(dev); - short err = 0; + down(&priv->wx_sem); if (priv->rf_set_sens == NULL) { err = -1; /* we have not this support for this radio */ @@ -813,6 +820,7 @@ static int r8192_wx_set_auth(struct net_device *dev, { int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); + down(&priv->wx_sem); ret = ieee80211_wx_set_auth(priv->ieee80211, info, &(data->param), extra); up(&priv->wx_sem); @@ -826,6 +834,7 @@ static int r8192_wx_set_mlme(struct net_device *dev, int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); + down(&priv->wx_sem); ret = ieee80211_wx_set_mlme(priv->ieee80211, info, wrqu, extra); @@ -839,6 +848,7 @@ static int r8192_wx_set_gen_ie(struct net_device *dev, { int ret = 0; struct r8192_priv *priv = ieee80211_priv(dev); + down(&priv->wx_sem); ret = ieee80211_wx_set_gen_ie(priv->ieee80211, extra, data->data.length); up(&priv->wx_sem); @@ -956,6 +966,7 @@ struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev) int tmp_level = 0; int tmp_qual = 0; int tmp_noise = 0; + if (ieee->state < IEEE80211_LINKED) { wstats->qual.qual = 0; wstats->qual.level = 0; -- cgit From 0b5b4e223a4de2a006bf58fc5303cfa75484374e Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Fri, 20 Jun 2014 10:49:55 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Fixed some more code-style warnings about spaces Fixed the following warnings issued by checkpatch.pl WARNING: please, no space before tabs Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index d061797b6f3d..cccc88bcbf39 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -299,7 +299,7 @@ static int rtl8180_wx_get_range(struct net_device *dev, /* range->retry_capa; */ /* What retry options are supported */ /* range->retry_flags; */ /* How to decode max/min retry limit */ /* range->r_time_flags; */ /* How to decode max/min retry life */ - /* range->min_retry; */ /* Minimal number of retries */ + /* range->min_retry; */ /* Minimal number of retries */ /* range->max_retry; */ /* Maximal number of retries */ /* range->min_r_time; */ /* Minimal retry lifetime */ /* range->max_r_time; */ /* Maximal retry lifetime */ @@ -802,7 +802,7 @@ static int r8192_wx_set_enc_ext(struct net_device *dev, alg, /* KeyType */ (u8 *)ieee->ap_mac_addr,/* MacAddr */ 0, /* DefaultKey */ - key); /* KeyContent */ + key); /* KeyContent */ } -- cgit From a2581a4a65d4263238c995c436debfffa2477a96 Mon Sep 17 00:00:00 2001 From: Chaitanya Hazarey Date: Fri, 20 Jun 2014 10:49:56 -0700 Subject: Staging: rtl8192u: r8192U_wx.c Fixed a code-style error about trailing whitespace Fixed the following error reported by running checkpatch.pl ERROR: trailing whitespace Signed-off-by: Chaitanya Hazarey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_wx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_wx.c b/drivers/staging/rtl8192u/r8192U_wx.c index cccc88bcbf39..6808e872296e 100644 --- a/drivers/staging/rtl8192u/r8192U_wx.c +++ b/drivers/staging/rtl8192u/r8192U_wx.c @@ -952,7 +952,7 @@ static const struct iw_priv_args r8192_private_args[] = { static iw_handler r8192_private_handler[] = { - r8192_wx_set_crcmon, + r8192_wx_set_crcmon, r8192_wx_set_scan_type, r8192_wx_set_rawtx, r8192_wx_force_reset, -- cgit From a90c6d530ea15b286feff464dde2e7d409091d8a Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Wed, 25 Jun 2014 14:20:58 +0200 Subject: staging: rtl8192u: r8192U_core.c: Cleaning up variable is set more than once A struct member variable is set to the same value more than once This was found using a static code analysis program called cppcheck. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8192U_core.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index b2731c70db35..76403864644c 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -2463,7 +2463,6 @@ static void rtl8192_init_priv_variable(struct net_device *dev) priv->ieee80211->FwRWRF = 0; //we don't use FW read/write RF until stable firmware is available. priv->ieee80211->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; - priv->ieee80211->iw_mode = IW_MODE_INFRA; priv->ieee80211->softmac_features = IEEE_SOFTMAC_SCAN | IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE | -- cgit From 49d74d7091364bcfdd3b35b1bda913351d543fed Mon Sep 17 00:00:00 2001 From: Himangi Saraogi Date: Sat, 21 Jun 2014 20:39:51 +0530 Subject: Staging: rtl8192e: adjust error handling This patch removes a test in error handling code by adding a return path. The Coccinelle semantic match that found the problem is: // @@ expression E,E1,E2; @@ E = alloc_etherdev(...) ... when != E = E1 if (...) { ... free_netdev(E); ... return ...; } ... when != E = E2 ( if (...) { ... when != free_netdev(E); return dev; } | * if (...) { ... when != free_netdev(E); return ...; } | register_netdev(E) ) // Signed-off-by: Himangi Saraogi Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192e/rtllib_module.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192e/rtllib_module.c b/drivers/staging/rtl8192e/rtllib_module.c index 136909eff6d5..ba95149fa42e 100644 --- a/drivers/staging/rtl8192e/rtllib_module.c +++ b/drivers/staging/rtl8192e/rtllib_module.c @@ -111,7 +111,7 @@ struct net_device *alloc_rtllib(int sizeof_priv) dev = alloc_etherdev(sizeof(struct rtllib_device) + sizeof_priv); if (!dev) { RTLLIB_ERROR("Unable to network device.\n"); - goto failed; + return NULL; } ieee = (struct rtllib_device *)netdev_priv_rsl(dev); memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv); @@ -180,8 +180,7 @@ struct net_device *alloc_rtllib(int sizeof_priv) return dev; failed: - if (dev) - free_netdev(dev); + free_netdev(dev); return NULL; } EXPORT_SYMBOL(alloc_rtllib); -- cgit From 5fc391853ea2a9070ae4161e21783e64c1b79f6c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 10:39:43 -0700 Subject: staging: comedi: ke_counter: expose clock source options to user space As pointed out by Ian Abbott, the INSN_CONFIG_SET_CLOCK_SRC options should be exposed in the user header comedi.h. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi.h | 11 ++++++++++ drivers/staging/comedi/drivers/ke_counter.c | 33 ++++++++++++++++++----------- 2 files changed, 32 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 6bbbe5b08954..dbaeba7469ac 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -976,4 +976,15 @@ enum amplc_dio_gate_source { AMPLC_DIO_GAT_NPAT_GONE /* negated "pattern gone away" */ }; +/* + * Values for setting a clock source with INSN_CONFIG_SET_CLOCK_SRC for + * the counter subdevice on the Kolter Electronic PCI-Counter board + * (ke_counter driver). + */ +enum ke_counter_clock_source { + KE_CLK_20MHZ, /* internal 20MHz (default) */ + KE_CLK_4MHZ, /* internal 4MHz (option) */ + KE_CLK_EXT /* external clock on pin 21 of D-Sub */ +}; + #endif /* _COMEDI_H */ diff --git a/drivers/staging/comedi/drivers/ke_counter.c b/drivers/staging/comedi/drivers/ke_counter.c index ed873c45e011..f46722c2648f 100644 --- a/drivers/staging/comedi/drivers/ke_counter.c +++ b/drivers/staging/comedi/drivers/ke_counter.c @@ -106,33 +106,42 @@ static int ke_counter_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { + unsigned char src; + switch (data[0]) { case INSN_CONFIG_SET_CLOCK_SRC: switch (data[1]) { - case KE_OSC_SEL_EXT: /* Pin 21 on D-sub */ - case KE_OSC_SEL_4MHZ: /* option */ - case KE_OSC_SEL_20MHZ: /* default */ + case KE_CLK_20MHZ: /* default */ + src = KE_OSC_SEL_20MHZ; + break; + case KE_CLK_4MHZ: /* option */ + src = KE_OSC_SEL_4MHZ; + break; + case KE_CLK_EXT: /* Pin 21 on D-sub */ + src = KE_OSC_SEL_EXT; break; default: return -EINVAL; } - outb(data[1], dev->iobase + KE_OSC_SEL_REG); + outb(src, dev->iobase + KE_OSC_SEL_REG); break; case INSN_CONFIG_GET_CLOCK_SRC: - data[1] = inb(dev->iobase + KE_OSC_SEL_REG); - switch (data[1]) { - case KE_OSC_SEL_EXT: - data[2] = 0; /* Unknown */ + src = inb(dev->iobase + KE_OSC_SEL_REG); + switch (src) { + case KE_OSC_SEL_20MHZ: + data[1] = KE_CLK_20MHZ; + data[2] = 50; /* 50ns */ break; case KE_OSC_SEL_4MHZ: + data[1] = KE_CLK_4MHZ; data[2] = 250; /* 250ns */ break; - case KE_OSC_SEL_20MHZ: - data[2] = 50; /* 50ns */ + case KE_OSC_SEL_EXT: + data[1] = KE_CLK_EXT; + data[2] = 0; /* Unknown */ break; default: - data[2] = 0; /* Invalid? */ - break; + return -EINVAL; } break; case INSN_CONFIG_RESET: -- cgit From f4f3f7cf27e7ae015672b59ec40c7deabeaf5d2e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 10:58:28 -0700 Subject: staging: comedi: introduce comedi_buf_n_bytes_ready() Introduce an inline helper to return the number of bytes that are ready to read from the comedi_async buffer. Use the helper in the comedi drivers that currently do the calculation as part of the (*poll) operation. Also, use the helper in comedi_fops where the calculation is used as part of the subdevice going nonbusy. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 5 ++--- drivers/staging/comedi/comedidev.h | 5 +++++ drivers/staging/comedi/drivers/das16m1.c | 2 +- drivers/staging/comedi/drivers/das1800.c | 2 +- drivers/staging/comedi/drivers/ni_mio_common.c | 2 +- drivers/staging/comedi/drivers/ni_pcidio.c | 2 +- drivers/staging/comedi/drivers/pcl812.c | 2 +- drivers/staging/comedi/drivers/pcl816.c | 2 +- 8 files changed, 13 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index c54ed42f8310..d4904cc50f77 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -997,7 +997,7 @@ static int do_bufinfo_ioctl(struct comedi_device *dev, comedi_buf_read_free(s, bi.bytes_read); if (comedi_is_subdevice_idle(s) && - async->buf_write_count == async->buf_read_count) { + comedi_buf_n_bytes_ready(s) == 0) { do_become_nonbusy(dev, s); } } @@ -2303,8 +2303,7 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, new_s = comedi_read_subdevice(dev, minor); if (dev->attached && old_detach_count == dev->detach_count && s == new_s && new_s->async == async) { - if (become_nonbusy || - async->buf_read_count - async->buf_write_count == 0) + if (become_nonbusy || comedi_buf_n_bytes_ready(s) == 0) do_become_nonbusy(dev, s); } mutex_unlock(&dev->mutex); diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 71851bdd4273..83fd1553ff93 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -400,6 +400,11 @@ static inline unsigned int bytes_per_sample(const struct comedi_subdevice *subd) */ int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev); +static inline unsigned int comedi_buf_n_bytes_ready(struct comedi_subdevice *s) +{ + return s->async->buf_write_count - s->async->buf_read_count; +} + unsigned int comedi_buf_write_alloc(struct comedi_subdevice *s, unsigned int n); unsigned int comedi_buf_write_free(struct comedi_subdevice *s, unsigned int n); diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c index ec039fbff0f9..c252ad22b1b4 100644 --- a/drivers/staging/comedi/drivers/das16m1.c +++ b/drivers/staging/comedi/drivers/das16m1.c @@ -477,7 +477,7 @@ static int das16m1_poll(struct comedi_device *dev, struct comedi_subdevice *s) das16m1_handler(dev, status); spin_unlock_irqrestore(&dev->spinlock, flags); - return s->async->buf_write_count - s->async->buf_read_count; + return comedi_buf_n_bytes_ready(s); } static irqreturn_t das16m1_interrupt(int irq, void *d) diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index 859519026c4c..b2f8391d5de1 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -696,7 +696,7 @@ static int das1800_ai_poll(struct comedi_device *dev, das1800_ai_handler(dev); spin_unlock_irqrestore(&dev->spinlock, flags); - return s->async->buf_write_count - s->async->buf_read_count; + return comedi_buf_n_bytes_ready(s); } static irqreturn_t das1800_interrupt(int irq, void *d) diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 7737749d3b2c..b2d6b1d1807d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -1878,7 +1878,7 @@ static int ni_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s) #else ni_sync_ai_dma(dev); #endif - count = s->async->buf_write_count - s->async->buf_read_count; + count = comedi_buf_n_bytes_ready(s); spin_unlock_irqrestore(&dev->spinlock, flags); return count; diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 5fc74d6ff6af..b03105ab0e50 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -361,7 +361,7 @@ static int ni_pcidio_poll(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->di_mite_chan) mite_sync_input_dma(devpriv->di_mite_chan, s); spin_unlock(&devpriv->mite_channel_lock); - count = s->async->buf_write_count - s->async->buf_read_count; + count = comedi_buf_n_bytes_ready(s); spin_unlock_irqrestore(&dev->spinlock, irq_flags); return count; } diff --git a/drivers/staging/comedi/drivers/pcl812.c b/drivers/staging/comedi/drivers/pcl812.c index 4c1b94706478..803e7790538c 100644 --- a/drivers/staging/comedi/drivers/pcl812.c +++ b/drivers/staging/comedi/drivers/pcl812.c @@ -985,7 +985,7 @@ static int pcl812_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s) spin_unlock_irqrestore(&dev->spinlock, flags); - return s->async->buf_write_count - s->async->buf_read_count; + return comedi_buf_n_bytes_ready(s); } static int pcl812_ai_cancel(struct comedi_device *dev, diff --git a/drivers/staging/comedi/drivers/pcl816.c b/drivers/staging/comedi/drivers/pcl816.c index d9ca7fe16c96..eda9986d9cf8 100644 --- a/drivers/staging/comedi/drivers/pcl816.c +++ b/drivers/staging/comedi/drivers/pcl816.c @@ -516,7 +516,7 @@ static int pcl816_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s) cfc_handle_events(dev, s); - return s->async->buf_write_count - s->async->buf_read_count; + return comedi_buf_n_bytes_ready(s); } static int pcl816_ai_cancel(struct comedi_device *dev, -- cgit From 935f0e8c2b127d0aaec12184718c7b3fc73b7787 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:34 -0700 Subject: staging: comedi: dt282x: remove forward declarations Move some of the functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 199 +++++++++++++++----------------- 1 file changed, 94 insertions(+), 105 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index c2a66dcf99fe..424eebb06a41 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -248,16 +248,101 @@ struct dt282x_private { */ #define chan_to_DAC(a) ((a)&1) -static int prep_ai_dma(struct comedi_device *dev, int chan, int size); -static int prep_ao_dma(struct comedi_device *dev, int chan, int size); -static int dt282x_ai_cancel(struct comedi_device *dev, - struct comedi_subdevice *s); -static int dt282x_ao_cancel(struct comedi_device *dev, - struct comedi_subdevice *s); -static int dt282x_ns_to_timer(int *nanosec, int round_mode); -static void dt282x_disable_dma(struct comedi_device *dev); +static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n) +{ + struct dt282x_private *devpriv = dev->private; + int dma_chan; + unsigned long dma_ptr; + unsigned long flags; + + if (!devpriv->ntrig) + return 0; + + if (n == 0) + n = devpriv->dma_maxsize; + if (n > devpriv->ntrig * 2) + n = devpriv->ntrig * 2; + devpriv->ntrig -= n / 2; + + devpriv->dma[dma_index].size = n; + dma_chan = devpriv->dma[dma_index].chan; + dma_ptr = virt_to_bus(devpriv->dma[dma_index].buf); + + set_dma_mode(dma_chan, DMA_MODE_READ); + flags = claim_dma_lock(); + clear_dma_ff(dma_chan); + set_dma_addr(dma_chan, dma_ptr); + set_dma_count(dma_chan, n); + release_dma_lock(flags); + + enable_dma(dma_chan); + + return n; +} + +static int prep_ao_dma(struct comedi_device *dev, int dma_index, int n) +{ + struct dt282x_private *devpriv = dev->private; + int dma_chan; + unsigned long dma_ptr; + unsigned long flags; + + devpriv->dma[dma_index].size = n; + dma_chan = devpriv->dma[dma_index].chan; + dma_ptr = virt_to_bus(devpriv->dma[dma_index].buf); + + set_dma_mode(dma_chan, DMA_MODE_WRITE); + flags = claim_dma_lock(); + clear_dma_ff(dma_chan); + set_dma_addr(dma_chan, dma_ptr); + set_dma_count(dma_chan, n); + release_dma_lock(flags); + + enable_dma(dma_chan); + + return n; +} + +static void dt282x_disable_dma(struct comedi_device *dev) +{ + struct dt282x_private *devpriv = dev->private; -static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2); + if (devpriv->usedma) { + disable_dma(devpriv->dma[0].chan); + disable_dma(devpriv->dma[1].chan); + } +} + +static int dt282x_ns_to_timer(int *nanosec, int round_mode) +{ + int prescale, base, divider; + + for (prescale = 0; prescale < 16; prescale++) { + if (prescale == 1) + continue; + base = 250 * (1 << prescale); + switch (round_mode) { + case TRIG_ROUND_NEAREST: + default: + divider = (*nanosec + base / 2) / base; + break; + case TRIG_ROUND_DOWN: + divider = (*nanosec) / base; + break; + case TRIG_ROUND_UP: + divider = (*nanosec + base - 1) / base; + break; + } + if (divider < 256) { + *nanosec = divider * base; + return (prescale << 8) | (255 - divider); + } + } + base = 250 * (1 << 15); + divider = 255; + *nanosec = divider * base; + return (15 << 8) | (255 - divider); +} static void dt282x_munge(struct comedi_device *dev, unsigned short *buf, unsigned int nbytes) @@ -365,61 +450,6 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) prep_ai_dma(dev, i, 0); } -static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n) -{ - struct dt282x_private *devpriv = dev->private; - int dma_chan; - unsigned long dma_ptr; - unsigned long flags; - - if (!devpriv->ntrig) - return 0; - - if (n == 0) - n = devpriv->dma_maxsize; - if (n > devpriv->ntrig * 2) - n = devpriv->ntrig * 2; - devpriv->ntrig -= n / 2; - - devpriv->dma[dma_index].size = n; - dma_chan = devpriv->dma[dma_index].chan; - dma_ptr = virt_to_bus(devpriv->dma[dma_index].buf); - - set_dma_mode(dma_chan, DMA_MODE_READ); - flags = claim_dma_lock(); - clear_dma_ff(dma_chan); - set_dma_addr(dma_chan, dma_ptr); - set_dma_count(dma_chan, n); - release_dma_lock(flags); - - enable_dma(dma_chan); - - return n; -} - -static int prep_ao_dma(struct comedi_device *dev, int dma_index, int n) -{ - struct dt282x_private *devpriv = dev->private; - int dma_chan; - unsigned long dma_ptr; - unsigned long flags; - - devpriv->dma[dma_index].size = n; - dma_chan = devpriv->dma[dma_index].chan; - dma_ptr = virt_to_bus(devpriv->dma[dma_index].buf); - - set_dma_mode(dma_chan, DMA_MODE_WRITE); - flags = claim_dma_lock(); - clear_dma_ff(dma_chan); - set_dma_addr(dma_chan, dma_ptr); - set_dma_count(dma_chan, n); - release_dma_lock(flags); - - enable_dma(dma_chan); - - return n; -} - static irqreturn_t dt282x_interrupt(int irq, void *d) { struct comedi_device *dev = d; @@ -710,16 +740,6 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static void dt282x_disable_dma(struct comedi_device *dev) -{ - struct dt282x_private *devpriv = dev->private; - - if (devpriv->usedma) { - disable_dma(devpriv->dma[0].chan); - disable_dma(devpriv->dma[1].chan); - } -} - static int dt282x_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -736,37 +756,6 @@ static int dt282x_ai_cancel(struct comedi_device *dev, return 0; } -static int dt282x_ns_to_timer(int *nanosec, int round_mode) -{ - int prescale, base, divider; - - for (prescale = 0; prescale < 16; prescale++) { - if (prescale == 1) - continue; - base = 250 * (1 << prescale); - switch (round_mode) { - case TRIG_ROUND_NEAREST: - default: - divider = (*nanosec + base / 2) / base; - break; - case TRIG_ROUND_DOWN: - divider = (*nanosec) / base; - break; - case TRIG_ROUND_UP: - divider = (*nanosec + base - 1) / base; - break; - } - if (divider < 256) { - *nanosec = divider * base; - return (prescale << 8) | (255 - divider); - } - } - base = 250 * (1 << 15); - divider = 255; - *nanosec = divider * base; - return (15 << 8) | (255 - divider); -} - /* * Analog output routine. Selects single channel conversion, * selects correct channel, converts from 2's compliment to -- cgit From 5aeb355fc7ebc0e8e50254193ddc830c059de33d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:35 -0700 Subject: staging: comedi: dt282x: move boardinfo declaration For asethetics, move the boardinfo declaration closer to the struct definition. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 260 ++++++++++++++++---------------- 1 file changed, 130 insertions(+), 130 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 424eebb06a41..aa6789dce7b1 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -216,6 +216,136 @@ struct dt282x_board { int dabits; }; +static const struct dt282x_board boardtypes[] = { + { + .name = "dt2821", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 20000, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2821-f", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 6500, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2821-g", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 4000, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2823", + .adbits = 16, + .adchan_se = 0, + .adchan_di = 4, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 2, + .dabits = 16, + }, { + .name = "dt2824-pgh", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 20000, + .ispgl = 0, + .dachan = 0, + .dabits = 0, + }, { + .name = "dt2824-pgl", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 20000, + .ispgl = 1, + .dachan = 0, + .dabits = 0, + }, { + .name = "dt2825", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 20000, + .ispgl = 1, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2827", + .adbits = 16, + .adchan_se = 0, + .adchan_di = 4, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2828", + .adbits = 12, + .adchan_se = 4, + .adchan_di = 0, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt2829", + .adbits = 16, + .adchan_se = 8, + .adchan_di = 0, + .ai_speed = 33250, + .ispgl = 0, + .dachan = 2, + .dabits = 16, + }, { + .name = "dt21-ez", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 2, + .dabits = 12, + }, { + .name = "dt23-ez", + .adbits = 16, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 0, + .dabits = 0, + }, { + .name = "dt24-ez", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 10000, + .ispgl = 0, + .dachan = 0, + .dabits = 0, + }, { + .name = "dt24-ez-pgl", + .adbits = 12, + .adchan_se = 16, + .adchan_di = 8, + .ai_speed = 10000, + .ispgl = 1, + .dachan = 0, + .dabits = 0, + }, +}; + struct dt282x_private { int ad_2scomp; /* we have 2's comp jumper set */ int da0_2scomp; /* same, for DAC0 */ @@ -1227,136 +1357,6 @@ static void dt282x_detach(struct comedi_device *dev) comedi_legacy_detach(dev); } -static const struct dt282x_board boardtypes[] = { - { - .name = "dt2821", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 20000, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2821-f", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 6500, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2821-g", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 4000, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2823", - .adbits = 16, - .adchan_se = 0, - .adchan_di = 4, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 2, - .dabits = 16, - }, { - .name = "dt2824-pgh", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 20000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, - }, { - .name = "dt2824-pgl", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 20000, - .ispgl = 1, - .dachan = 0, - .dabits = 0, - }, { - .name = "dt2825", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 20000, - .ispgl = 1, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2827", - .adbits = 16, - .adchan_se = 0, - .adchan_di = 4, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2828", - .adbits = 12, - .adchan_se = 4, - .adchan_di = 0, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt2829", - .adbits = 16, - .adchan_se = 8, - .adchan_di = 0, - .ai_speed = 33250, - .ispgl = 0, - .dachan = 2, - .dabits = 16, - }, { - .name = "dt21-ez", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 2, - .dabits = 12, - }, { - .name = "dt23-ez", - .adbits = 16, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, - }, { - .name = "dt24-ez", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 10000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, - }, { - .name = "dt24-ez-pgl", - .adbits = 12, - .adchan_se = 16, - .adchan_di = 8, - .ai_speed = 10000, - .ispgl = 1, - .dachan = 0, - .dabits = 0, - }, -}; - static struct comedi_driver dt282x_driver = { .driver_name = "dt282x", .module = THIS_MODULE, -- cgit From f11c4b6caef19f331a9ce4821602eed6b12f131f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:36 -0700 Subject: staging: comedi: dt282x: remove '= 0' boardinfo All unlisted members in the boardinfo declaraction will default to '0'. Remove the unnecessary code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 25 ------------------------- 1 file changed, 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index aa6789dce7b1..ea4abccdd202 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -223,7 +223,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { @@ -232,7 +231,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 6500, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { @@ -241,16 +239,13 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 4000, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { .name = "dt2823", .adbits = 16, - .adchan_se = 0, .adchan_di = 4, .ai_speed = 10000, - .ispgl = 0, .dachan = 2, .dabits = 16, }, { @@ -259,9 +254,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, }, { .name = "dt2824-pgl", .adbits = 12, @@ -269,8 +261,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 20000, .ispgl = 1, - .dachan = 0, - .dabits = 0, }, { .name = "dt2825", .adbits = 12, @@ -283,28 +273,22 @@ static const struct dt282x_board boardtypes[] = { }, { .name = "dt2827", .adbits = 16, - .adchan_se = 0, .adchan_di = 4, .ai_speed = 10000, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { .name = "dt2828", .adbits = 12, .adchan_se = 4, - .adchan_di = 0, .ai_speed = 10000, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { .name = "dt2829", .adbits = 16, .adchan_se = 8, - .adchan_di = 0, .ai_speed = 33250, - .ispgl = 0, .dachan = 2, .dabits = 16, }, { @@ -313,7 +297,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, - .ispgl = 0, .dachan = 2, .dabits = 12, }, { @@ -322,18 +305,12 @@ static const struct dt282x_board boardtypes[] = { .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, }, { .name = "dt24-ez", .adbits = 12, .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, - .ispgl = 0, - .dachan = 0, - .dabits = 0, }, { .name = "dt24-ez-pgl", .adbits = 12, @@ -341,8 +318,6 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 10000, .ispgl = 1, - .dachan = 0, - .dabits = 0, }, }; -- cgit From d839495b64d0ec599e1d2cc74ce3705043c2dae4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:37 -0700 Subject: staging: comedi: dt282x: convert 'adbits' boardinfo to 'ai_maxdata' This member of the boardinfo is the number of bits in the analog input data. Convert this member into the subdevice 'maxdata', (1 << board->adbits) - 1, to avoid needing to do the calculation. Use the subdevice 'maxdata' in the driver instead of using the boardinfo and use the comedi_offset_munge() helper to convert the two's complement data to the offset binary form that the comedi core expects. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 82 +++++++++++++++++---------------- 1 file changed, 42 insertions(+), 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index ea4abccdd202..523e8490fedc 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -207,7 +207,7 @@ static const struct comedi_lrange range_dt282x_ai_hi_unipolar = { struct dt282x_board { const char *name; - int adbits; + unsigned int ai_maxdata; int adchan_se; int adchan_di; int ai_speed; @@ -219,7 +219,7 @@ struct dt282x_board { static const struct dt282x_board boardtypes[] = { { .name = "dt2821", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, @@ -227,7 +227,7 @@ static const struct dt282x_board boardtypes[] = { .dabits = 12, }, { .name = "dt2821-f", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 6500, @@ -235,7 +235,7 @@ static const struct dt282x_board boardtypes[] = { .dabits = 12, }, { .name = "dt2821-g", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 4000, @@ -243,27 +243,27 @@ static const struct dt282x_board boardtypes[] = { .dabits = 12, }, { .name = "dt2823", - .adbits = 16, + .ai_maxdata = 0xffff, .adchan_di = 4, .ai_speed = 10000, .dachan = 2, .dabits = 16, }, { .name = "dt2824-pgh", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, }, { .name = "dt2824-pgl", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, .ispgl = 1, }, { .name = "dt2825", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 20000, @@ -272,28 +272,28 @@ static const struct dt282x_board boardtypes[] = { .dabits = 12, }, { .name = "dt2827", - .adbits = 16, + .ai_maxdata = 0xffff, .adchan_di = 4, .ai_speed = 10000, .dachan = 2, .dabits = 12, }, { .name = "dt2828", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 4, .ai_speed = 10000, .dachan = 2, .dabits = 12, }, { .name = "dt2829", - .adbits = 16, + .ai_maxdata = 0xffff, .adchan_se = 8, .ai_speed = 33250, .dachan = 2, .dabits = 16, }, { .name = "dt21-ez", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, @@ -301,19 +301,19 @@ static const struct dt282x_board boardtypes[] = { .dabits = 12, }, { .name = "dt23-ez", - .adbits = 16, + .ai_maxdata = 0xffff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, }, { .name = "dt24-ez", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, }, { .name = "dt24-ez-pgl", - .adbits = 12, + .ai_maxdata = 0x0fff, .adchan_se = 16, .adchan_di = 8, .ai_speed = 10000, @@ -449,26 +449,26 @@ static int dt282x_ns_to_timer(int *nanosec, int round_mode) return (15 << 8) | (255 - divider); } -static void dt282x_munge(struct comedi_device *dev, unsigned short *buf, +static void dt282x_munge(struct comedi_device *dev, + struct comedi_subdevice *s, + unsigned short *buf, unsigned int nbytes) { - const struct dt282x_board *board = comedi_board(dev); struct dt282x_private *devpriv = dev->private; - unsigned int i; - unsigned short mask = (1 << board->adbits) - 1; - unsigned short sign = 1 << (board->adbits - 1); - int n; - - if (devpriv->ad_2scomp) - sign = 1 << (board->adbits - 1); - else - sign = 0; + unsigned int val; + int i; if (nbytes % 2) comedi_error(dev, "bug! odd number of bytes from dma xfer"); - n = nbytes / 2; - for (i = 0; i < n; i++) - buf[i] = (buf[i] & mask) ^ sign; + + for (i = 0; i < nbytes / 2; i++) { + val = buf[i]; + val &= s->maxdata; + if (devpriv->ad_2scomp) + val = comedi_offset_munge(s, val); + + buf[i] = val; + } } static void dt282x_ao_dma_interrupt(struct comedi_device *dev) @@ -527,7 +527,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) devpriv->current_dma_index = 1 - i; - dt282x_munge(dev, ptr, size); + dt282x_munge(dev, s, ptr, size); ret = cfc_write_array_to_buffer(s, ptr, size); if (ret != size) { s->async->events |= COMEDI_CB_OVERFLOW; @@ -597,10 +597,10 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) unsigned short data; data = inw(dev->iobase + DT2821_ADDAT); - data &= (1 << board->adbits) - 1; - + data &= s->maxdata; if (devpriv->ad_2scomp) - data ^= 1 << (board->adbits - 1); + data = comedi_offset_munge(s, data); + ret = comedi_buf_put(s, data); if (ret == 0) @@ -671,10 +671,11 @@ static int dt282x_ai_timeout(struct comedi_device *dev, */ static int dt282x_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - const struct dt282x_board *board = comedi_board(dev); struct dt282x_private *devpriv = dev->private; + unsigned int val; int ret; int i; @@ -698,11 +699,12 @@ static int dt282x_ai_insn_read(struct comedi_device *dev, if (ret) return ret; - data[i] = - inw(dev->iobase + - DT2821_ADDAT) & ((1 << board->adbits) - 1); + val = inw(dev->iobase + DT2821_ADDAT); + val &= s->maxdata; if (devpriv->ad_2scomp) - data[i] ^= (1 << (board->adbits - 1)); + val = comedi_offset_munge(s, val); + + data[i] = val; } return i; @@ -1260,7 +1262,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->n_chan = (it->options[opt_diff]) ? board->adchan_di : board->adchan_se; s->insn_read = dt282x_ai_insn_read; - s->maxdata = (1 << board->adbits) - 1; + s->maxdata = board->ai_maxdata; s->range_table = opt_ai_range_lkup(board->ispgl, it->options[opt_ai_range]); devpriv->ad_2scomp = it->options[opt_ai_twos]; -- cgit From 58c8c47fda4aa37ec946ff7ad1a42b875b03da74 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:38 -0700 Subject: staging: comedi: dt282x: convert 'dabits' boardinfo to 'ao_maxdata' This member of the boardinfo is the number of bits in the analog output data. Convert this member into the subdevice 'maxdata', (1 << board->dabits) - 1, to avoid needing to do the calculation. Use the subdevice 'maxdata' in the driver instead of using the boardinfo and use the comedi_offset_munge() helper to convert the two's complement data to the offset binary form that the comedi core expects. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 523e8490fedc..3eaf26cb2218 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -213,7 +213,7 @@ struct dt282x_board { int ai_speed; int ispgl; int dachan; - int dabits; + unsigned int ao_maxdata; }; static const struct dt282x_board boardtypes[] = { @@ -224,7 +224,7 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 20000, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2821-f", .ai_maxdata = 0x0fff, @@ -232,7 +232,7 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 6500, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2821-g", .ai_maxdata = 0x0fff, @@ -240,14 +240,14 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 4000, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2823", .ai_maxdata = 0xffff, .adchan_di = 4, .ai_speed = 10000, .dachan = 2, - .dabits = 16, + .ao_maxdata = 0xffff, }, { .name = "dt2824-pgh", .ai_maxdata = 0x0fff, @@ -269,28 +269,28 @@ static const struct dt282x_board boardtypes[] = { .ai_speed = 20000, .ispgl = 1, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2827", .ai_maxdata = 0xffff, .adchan_di = 4, .ai_speed = 10000, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2828", .ai_maxdata = 0x0fff, .adchan_se = 4, .ai_speed = 10000, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt2829", .ai_maxdata = 0xffff, .adchan_se = 8, .ai_speed = 33250, .dachan = 2, - .dabits = 16, + .ao_maxdata = 0xffff, }, { .name = "dt21-ez", .ai_maxdata = 0x0fff, @@ -298,7 +298,7 @@ static const struct dt282x_board boardtypes[] = { .adchan_di = 8, .ai_speed = 10000, .dachan = 2, - .dabits = 12, + .ao_maxdata = 0x0fff, }, { .name = "dt23-ez", .ai_maxdata = 0xffff, @@ -884,14 +884,13 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - const struct dt282x_board *board = comedi_board(dev); struct dt282x_private *devpriv = dev->private; - unsigned short d; + unsigned int d; unsigned int chan; chan = CR_CHAN(insn->chanspec); d = data[0]; - d &= (1 << board->dabits) - 1; + d &= s->maxdata; devpriv->ao[chan] = d; devpriv->dacsr |= DT2821_SSEL; @@ -900,11 +899,11 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, /* select channel */ devpriv->dacsr |= DT2821_YSEL; if (devpriv->da0_2scomp) - d ^= (1 << (board->dabits - 1)); + d = comedi_offset_munge(s, d); } else { devpriv->dacsr &= ~DT2821_YSEL; if (devpriv->da1_2scomp) - d ^= (1 << (board->dabits - 1)); + d = comedi_offset_munge(s, d); } outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); @@ -1284,7 +1283,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->subdev_flags = SDF_WRITABLE; s->insn_read = dt282x_ao_insn_read; s->insn_write = dt282x_ao_insn_write; - s->maxdata = (1 << board->dabits) - 1; + s->maxdata = board->ao_maxdata; s->range_table_list = devpriv->darangelist; devpriv->darangelist[0] = opt_ao_range_lkup(it->options[opt_ao0_range]); -- cgit From 804ee9ac04c01946c5ba158b5e350b40ee515fed Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:39 -0700 Subject: staging: comedi: dt282x: fix dt282x_ao_insn_write() The (*insn_write) functions are expected to write 'insn->n' samples to the hardware. Fix this function so it works like the comedi core expects. The comedi core sanity checks that the samples are within the 'maxdata' range of the subdevice before calling the (*insn_write) so this function does not need to mask each sample by 's->maxdata'. Also, the wrong '*2scomp' flag in the private data was being checked to see if the sample needs to be munged before being written. Fix this. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 41 ++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 3eaf26cb2218..dcc4055bee71 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -882,37 +882,42 @@ static int dt282x_ao_insn_read(struct comedi_device *dev, static int dt282x_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct dt282x_private *devpriv = dev->private; - unsigned int d; - unsigned int chan; - - chan = CR_CHAN(insn->chanspec); - d = data[0]; - d &= s->maxdata; - devpriv->ao[chan] = d; + unsigned int chan = CR_CHAN(insn->chanspec); + bool munge = false; + unsigned int val; + int i; devpriv->dacsr |= DT2821_SSEL; - if (chan) { - /* select channel */ devpriv->dacsr |= DT2821_YSEL; - if (devpriv->da0_2scomp) - d = comedi_offset_munge(s, d); + if (devpriv->da1_2scomp) + munge = true; } else { devpriv->dacsr &= ~DT2821_YSEL; - if (devpriv->da1_2scomp) - d = comedi_offset_munge(s, d); + if (devpriv->da0_2scomp) + munge = true; } - outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); + for (i = 0; i < insn->n; i++) { + val = data[i]; + devpriv->ao[chan] = val; - outw(d, dev->iobase + DT2821_DADAT); + if (munge) + val = comedi_offset_munge(s, val); - outw(devpriv->supcsr | DT2821_DACON, dev->iobase + DT2821_SUPCSR); + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); - return 1; + outw(val, dev->iobase + DT2821_DADAT); + + outw(devpriv->supcsr | DT2821_DACON, + dev->iobase + DT2821_SUPCSR); + } + + return insn->n; } static int dt282x_ao_cmdtest(struct comedi_device *dev, -- cgit From ebf86ea9a68e2ebb366dc7640f916e233d614db1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:40 -0700 Subject: staging: comedi: dt282x: remove 'volatile' on private data variables As indicated by checkpatch.pl, "WARNING: Use of volatile is usually wrong: ...". The variables in the private data that are marked volatile don't need to be. Remove the volatile. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index dcc4055bee71..5ae15bcccb5e 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -330,21 +330,21 @@ struct dt282x_private { unsigned short ao[2]; - volatile int dacsr; /* software copies of registers */ - volatile int adcsr; - volatile int supcsr; + int dacsr; /* software copies of registers */ + int adcsr; + int supcsr; - volatile int ntrig; - volatile int nread; + int ntrig; + int nread; struct { int chan; unsigned short *buf; /* DMA buffer */ - volatile int size; /* size of current transfer */ + int size; /* size of current transfer */ } dma[2]; int dma_maxsize; /* max size of DMA transfer (in bytes) */ int usedma; /* driver uses DMA */ - volatile int current_dma_index; + int current_dma_index; int dma_dir; }; -- cgit From cb3d0d3996fe5c8c4fd7063b4bea890767469cb1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:41 -0700 Subject: staging: comedi: dt282x: IRQ and DMA are needed for async command support This driver requires an IRQ and 2 DMA channels in order to execute async commands. Modify the (*attach) so that command support is only hooked up if DMA is available. This allows removing the extra checks in the command support functions. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 112 +++++++++++++++----------------- 1 file changed, 52 insertions(+), 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 5ae15bcccb5e..cb12cca0f28f 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -343,7 +343,6 @@ struct dt282x_private { int size; /* size of current transfer */ } dma[2]; int dma_maxsize; /* max size of DMA transfer (in bytes) */ - int usedma; /* driver uses DMA */ int current_dma_index; int dma_dir; }; @@ -412,10 +411,8 @@ static void dt282x_disable_dma(struct comedi_device *dev) { struct dt282x_private *devpriv = dev->private; - if (devpriv->usedma) { - disable_dma(devpriv->dma[0].chan); - disable_dma(devpriv->dma[1].chan); - } + disable_dma(devpriv->dma[0].chan); + disable_dma(devpriv->dma[1].chan); } static int dt282x_ns_to_timer(int *nanosec, int round_mode) @@ -788,13 +785,6 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) int timer; int ret; - if (devpriv->usedma == 0) { - comedi_error(dev, - "driver requires 2 dma channels" - " to execute command"); - return -EIO; - } - dt282x_disable_dma(dev); if (cmd->convert_arg < board->ai_speed) @@ -1014,13 +1004,6 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) int timer; struct comedi_cmd *cmd = &s->async->cmd; - if (devpriv->usedma == 0) { - comedi_error(dev, - "driver requires 2 dma channels" - " to execute command"); - return -EIO; - } - dt282x_disable_dma(dev); devpriv->supcsr = DT2821_ERRINTEN | DT2821_DS1 | DT2821_DDMA; @@ -1155,21 +1138,6 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) struct dt282x_private *devpriv = dev->private; int ret; - devpriv->usedma = 0; - - if (!dma1 && !dma2) - return 0; - - if (dma1 == dma2 || dma1 < 5 || dma2 < 5 || dma1 > 7 || dma2 > 7) - return -EINVAL; - - if (dma2 < dma1) { - int i; - i = dma1; - dma1 = dma2; - dma2 = i; - } - ret = request_dma(dma1, "dt282x A"); if (ret) return -EBUSY; @@ -1186,11 +1154,27 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) if (!devpriv->dma[0].buf || !devpriv->dma[1].buf) return -ENOMEM; - devpriv->usedma = 1; - return 0; } +static void dt282x_free_dma(struct comedi_device *dev) +{ + struct dt282x_private *devpriv = dev->private; + int i; + + if (!devpriv) + return; + + for (i = 0; i < 2; i++) { + if (devpriv->dma[i].chan) + free_dma(devpriv->dma[i].chan); + if (devpriv->dma[i].buf) + free_page((unsigned long)devpriv->dma[i].buf); + devpriv->dma[i].chan = 0; + devpriv->dma[i].buf = NULL; + } +} + /* options: 0 i/o base @@ -1235,22 +1219,41 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) } /* should do board test */ - if (it->options[opt_irq] > 0) { - ret = request_irq(it->options[opt_irq], dt282x_interrupt, 0, - dev->board_name, dev); - if (ret == 0) - dev->irq = it->options[opt_irq]; - } - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) return -ENOMEM; - if (dev->irq) { - ret = dt282x_grab_dma(dev, it->options[opt_dma1], - it->options[opt_dma2]); - if (ret < 0) - return ret; + /* an IRQ and 2 DMA channels are required for async command support */ + if (it->options[opt_irq] && + it->options[opt_dma1] && it->options[opt_dma2]) { + unsigned int irq = it->options[opt_irq]; + unsigned int dma1 = it->options[opt_dma1]; + unsigned int dma2 = it->options[opt_dma2]; + + if (dma2 < dma1) { + unsigned int swap; + + swap = dma1; + dma1 = dma2; + dma2 = swap; + } + + if (dma1 != dma2 && + dma1 >= 5 && dma1 <= 7 && + dma2 >= 5 && dma2 <= 7) { + ret = request_irq(irq, dt282x_interrupt, 0, + dev->board_name, dev); + if (ret == 0) { + dev->irq = irq; + + ret = dt282x_grab_dma(dev, dma1, dma2); + if (ret < 0) { + dt282x_free_dma(dev); + free_irq(dev->irq, dev); + dev->irq = 0; + } + } + } } ret = comedi_alloc_subdevices(dev, 3); @@ -1323,18 +1326,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) static void dt282x_detach(struct comedi_device *dev) { - struct dt282x_private *devpriv = dev->private; - - if (dev->private) { - if (devpriv->dma[0].chan) - free_dma(devpriv->dma[0].chan); - if (devpriv->dma[1].chan) - free_dma(devpriv->dma[1].chan); - if (devpriv->dma[0].buf) - free_page((unsigned long)devpriv->dma[0].buf); - if (devpriv->dma[1].buf) - free_page((unsigned long)devpriv->dma[1].buf); - } + dt282x_free_dma(dev); comedi_legacy_detach(dev); } -- cgit From c53a62f64a072ea1ba31aa657e5962cf2a8f360e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:42 -0700 Subject: staging: comedi: dt282x: remove DT2821_SIZE define This define is only used in the comedi_request_region() call to specify the size of the I/O region. Remove it and just open code the value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index cb12cca0f28f..3276c0738573 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -63,8 +63,6 @@ Notes: #include "comedi_fc.h" -#define DT2821_SIZE 0x10 - /* * Registers in the DT282x */ @@ -1197,7 +1195,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) int ret; int i; - ret = comedi_request_region(dev, it->options[0], DT2821_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; -- cgit From 30dadbd208a480bb1ca919e395602adaafdbc449 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:43 -0700 Subject: staging: comedi: dt282x: convert private data flags to bit-fields Convert the '2scomp' flags in the private data into bit-fields to save a bit of space. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 3276c0738573..2e1c615c8105 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -320,9 +320,9 @@ static const struct dt282x_board boardtypes[] = { }; struct dt282x_private { - int ad_2scomp; /* we have 2's comp jumper set */ - int da0_2scomp; /* same, for DAC0 */ - int da1_2scomp; /* same, for DAC1 */ + unsigned int ad_2scomp:1; + unsigned int da0_2scomp:1; + unsigned int da1_2scomp:1; const struct comedi_lrange *darangelist[2]; @@ -1270,7 +1270,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->maxdata = board->ai_maxdata; s->range_table = opt_ai_range_lkup(board->ispgl, it->options[opt_ai_range]); - devpriv->ad_2scomp = it->options[opt_ai_twos]; + devpriv->ad_2scomp = it->options[opt_ai_twos] ? 1 : 0; if (dev->irq) { dev->read_subdev = s; s->subdev_flags |= SDF_CMD_READ; @@ -1295,8 +1295,8 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) opt_ao_range_lkup(it->options[opt_ao0_range]); devpriv->darangelist[1] = opt_ao_range_lkup(it->options[opt_ao1_range]); - devpriv->da0_2scomp = it->options[opt_ao0_twos]; - devpriv->da1_2scomp = it->options[opt_ao1_twos]; + devpriv->da0_2scomp = it->options[opt_ao0_twos] ? 1 : 0; + devpriv->da1_2scomp = it->options[opt_ao1_twos] ? 1 : 0; if (dev->irq) { dev->write_subdev = s; s->subdev_flags |= SDF_CMD_WRITE; -- cgit From 6ee9c91fbbcf9e29951fb741492b5e9e6b6ac0ef Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:44 -0700 Subject: staging: comedi: dt282x: remove unused chan_to_DAC() macro This macro is not used in the driver. Remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 2e1c615c8105..9527adf73ece 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -345,11 +345,6 @@ struct dt282x_private { int dma_dir; }; -/* - * Some useless abstractions - */ -#define chan_to_DAC(a) ((a)&1) - static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n) { struct dt282x_private *devpriv = dev->private; -- cgit From 198c15a63d016ce6e7b339e1b7e02e2595a75b00 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:45 -0700 Subject: staging: comedi: dt282x: rename the prep_{ai,ao}_dma() functions Rename these functions so they have namespace associated with the driver. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 9527adf73ece..e3f612315fe4 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -345,7 +345,7 @@ struct dt282x_private { int dma_dir; }; -static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n) +static int dt282x_prep_ai_dma(struct comedi_device *dev, int dma_index, int n) { struct dt282x_private *devpriv = dev->private; int dma_chan; @@ -377,7 +377,7 @@ static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n) return n; } -static int prep_ao_dma(struct comedi_device *dev, int dma_index, int n) +static int dt282x_prep_ao_dma(struct comedi_device *dev, int dma_index, int n) { struct dt282x_private *devpriv = dev->private; int dma_chan; @@ -489,7 +489,7 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev) s->async->events |= COMEDI_CB_OVERFLOW; return; } - prep_ao_dma(dev, i, size); + dt282x_prep_ao_dma(dev, i, size); return; } @@ -542,7 +542,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) } #endif /* restart the channel */ - prep_ai_dma(dev, i, 0); + dt282x_prep_ai_dma(dev, i, 0); } static irqreturn_t dt282x_interrupt(int irq, void *d) @@ -800,9 +800,9 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->dma_dir = DMA_MODE_READ; devpriv->current_dma_index = 0; - prep_ai_dma(dev, 0, 0); + dt282x_prep_ai_dma(dev, 0, 0); if (devpriv->ntrig) { - prep_ai_dma(dev, 1, 0); + dt282x_prep_ai_dma(dev, 1, 0); devpriv->supcsr |= DT2821_DDMA; outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR); } @@ -975,7 +975,7 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, dev_err(dev->class_dev, "AO underrun\n"); return -EPIPE; } - prep_ao_dma(dev, 0, size); + dt282x_prep_ao_dma(dev, 0, size); size = cfc_read_array_from_buffer(s, devpriv->dma[1].buf, devpriv->dma_maxsize); @@ -983,7 +983,7 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, dev_err(dev->class_dev, "AO underrun\n"); return -EPIPE; } - prep_ao_dma(dev, 1, size); + dt282x_prep_ao_dma(dev, 1, size); outw(devpriv->supcsr | DT2821_STRIG, dev->iobase + DT2821_SUPCSR); s->async->inttrig = NULL; -- cgit From f83cbc53dafb9755b0002976c3956052b089c4c6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:46 -0700 Subject: staging: comedi: dt282x: tidy up Digital I/O subdevice init For aesthetics, add some whitespace to the Digital I/O subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index e3f612315fe4..d2a519d7be43 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1304,15 +1304,15 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->type = COMEDI_SUBD_UNUSED; } + /* Digital I/O subdevice */ s = &dev->subdevices[2]; - /* dio subsystem */ - s->type = COMEDI_SUBD_DIO; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = 16; - s->insn_bits = dt282x_dio_insn_bits; - s->insn_config = dt282x_dio_insn_config; - s->maxdata = 1; - s->range_table = &range_digital; + s->type = COMEDI_SUBD_DIO; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE; + s->n_chan = 16; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = dt282x_dio_insn_bits; + s->insn_config = dt282x_dio_insn_config; return 0; } -- cgit From ecac148c60d341c9e50e2b65744d2ffde5b884cb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:47 -0700 Subject: staging: comedi: dt282x: remove sanity checks of 's->async->prealloc_buf' The comedi core sanity checks that the subdevice has a buffer allocated before allowing an async command to start. The helper functions in comedi_buf will also sanity check the buffer as a side effect of the 'alloc' helpers with reading or writing data for the buffer. Remove the unnecessary sanity checks in the ai/ao dma interrupt handlers. This will allow the handlers to disable the dma and then fail when they try to read/write the buffer. Currently dma is left enabled due to the sanity checks. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index d2a519d7be43..3071f11ba4f9 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -471,11 +471,6 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev) outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); - if (!s->async->prealloc_buf) { - dev_err(dev->class_dev, "no buffer in %s\n", __func__); - return; - } - i = devpriv->current_dma_index; ptr = devpriv->dma[i].buf; @@ -504,11 +499,6 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); - if (!s->async->prealloc_buf) { - dev_err(dev->class_dev, "no buffer in %s\n", __func__); - return; - } - i = devpriv->current_dma_index; ptr = devpriv->dma[i].buf; size = devpriv->dma[i].size; -- cgit From e6cff3990d53d93f5b1bf59984a4fe7816f02b63 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:48 -0700 Subject: staging: comedi: dt282x: tidy up dt282x_ao_dma_interrupt() The main interrupt handler already has the comedi_subdevice pointer needed in this function. Pass that subdevice pointer so that it does not need to be fetched as a local variable. Tidy up the function a bit. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 3071f11ba4f9..40c5794ec5c4 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -461,31 +461,27 @@ static void dt282x_munge(struct comedi_device *dev, } } -static void dt282x_ao_dma_interrupt(struct comedi_device *dev) +static void dt282x_ao_dma_interrupt(struct comedi_device *dev, + struct comedi_subdevice *s) { struct dt282x_private *devpriv = dev->private; - struct comedi_subdevice *s = dev->write_subdev; - void *ptr; + int cur_dma = devpriv->current_dma_index; + void *ptr = devpriv->dma[cur_dma].buf; int size; - int i; outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); - i = devpriv->current_dma_index; - ptr = devpriv->dma[i].buf; + disable_dma(devpriv->dma[cur_dma].chan); - disable_dma(devpriv->dma[i].chan); - - devpriv->current_dma_index = 1 - i; + devpriv->current_dma_index = 1 - cur_dma; size = cfc_read_array_from_buffer(s, ptr, devpriv->dma_maxsize); if (size == 0) { dev_err(dev->class_dev, "AO underrun\n"); s->async->events |= COMEDI_CB_OVERFLOW; - return; + } else { + dt282x_prep_ao_dma(dev, cur_dma, size); } - dt282x_prep_ao_dma(dev, i, size); - return; } static void dt282x_ai_dma_interrupt(struct comedi_device *dev) @@ -556,7 +552,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) if (devpriv->dma_dir == DMA_MODE_READ) dt282x_ai_dma_interrupt(dev); else - dt282x_ao_dma_interrupt(dev); + dt282x_ao_dma_interrupt(dev, s_ao); handled = 1; } if (adcsr & DT2821_ADERR) { -- cgit From de91bb97254cec30f24b4f770e10eab7da3f6be1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:49 -0700 Subject: staging: comedi: dt282x: tidy up dt282x_ai_dma_interrupt() The main interrupt handler already has the comedi_subdevice pointer needed in this function. Pass that subdevice pointer so that it does not need to be fetched as a local variable. Tidy up the function a bit. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 40c5794ec5c4..d4164ced8185 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -484,24 +484,20 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev, } } -static void dt282x_ai_dma_interrupt(struct comedi_device *dev) +static void dt282x_ai_dma_interrupt(struct comedi_device *dev, + struct comedi_subdevice *s) { struct dt282x_private *devpriv = dev->private; - struct comedi_subdevice *s = dev->read_subdev; - void *ptr; - int size; - int i; + int cur_dma = devpriv->current_dma_index; + void *ptr = devpriv->dma[cur_dma].buf; + int size = devpriv->dma[cur_dma].size; int ret; outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); - i = devpriv->current_dma_index; - ptr = devpriv->dma[i].buf; - size = devpriv->dma[i].size; - - disable_dma(devpriv->dma[i].chan); + disable_dma(devpriv->dma[cur_dma].chan); - devpriv->current_dma_index = 1 - i; + devpriv->current_dma_index = 1 - cur_dma; dt282x_munge(dev, s, ptr, size); ret = cfc_write_array_to_buffer(s, ptr, size); @@ -509,8 +505,8 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) s->async->events |= COMEDI_CB_OVERFLOW; return; } - devpriv->nread -= size / 2; + devpriv->nread -= size / 2; if (devpriv->nread < 0) { dev_info(dev->class_dev, "nread off by one\n"); devpriv->nread = 0; @@ -528,7 +524,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) } #endif /* restart the channel */ - dt282x_prep_ai_dma(dev, i, 0); + dt282x_prep_ai_dma(dev, cur_dma, 0); } static irqreturn_t dt282x_interrupt(int irq, void *d) @@ -550,7 +546,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) supcsr = inw(dev->iobase + DT2821_SUPCSR); if (supcsr & DT2821_DMAD) { if (devpriv->dma_dir == DMA_MODE_READ) - dt282x_ai_dma_interrupt(dev); + dt282x_ai_dma_interrupt(dev, s); else dt282x_ao_dma_interrupt(dev, s_ao); handled = 1; -- cgit From 9504be8a1b84d5139f7475c0e705bc0630e82dc9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:50 -0700 Subject: staging: comedi: dt282x: fix dt282x_ao_insn_read() The comedi core expects the (*insn_read) functions to return 'insn->n' samples. Fix this function to work like the core expects. For aesthetics, rename the private data 'ao' member to clarify its use. Also, remove the unnecessary comment. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index d4164ced8185..f248dbcc3c70 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -326,7 +326,7 @@ struct dt282x_private { const struct comedi_lrange *darangelist[2]; - unsigned short ao[2]; + unsigned short ao_readback[2]; int dacsr; /* software copies of registers */ int adcsr; @@ -828,21 +828,19 @@ static int dt282x_ai_cancel(struct comedi_device *dev, return 0; } -/* - * Analog output routine. Selects single channel conversion, - * selects correct channel, converts from 2's compliment to - * offset binary if necessary, loads the data into the DAC - * data register, and performs the conversion. - */ static int dt282x_ao_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct dt282x_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); + int i; - data[0] = devpriv->ao[CR_CHAN(insn->chanspec)]; + for (i = 0; i < insn->n; i++) + data[i] = devpriv->ao_readback[chan]; - return 1; + return insn->n; } static int dt282x_ao_insn_write(struct comedi_device *dev, @@ -869,7 +867,7 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { val = data[i]; - devpriv->ao[chan] = val; + devpriv->ao_readback[chan] = val; if (munge) val = comedi_offset_munge(s, val); -- cgit From f4af8d4991bd3575d8eb54b08d78fb0e498b8ec8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:51 -0700 Subject: staging: comedi: dt282x: factor board initialization out of (*attach) For aesthetics, factor the code that initializes the then checks to see if it is actually a DT2821 series board out of the (*attach). For clarity, remove the MASK and VAL defines used to check the board and jsut open code the values. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 62 +++++++++++++-------------------- 1 file changed, 24 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index f248dbcc3c70..f9679b919d18 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -76,26 +76,6 @@ Notes: #define DT2821_SUPCSR 0x0c /* Supervisor Control/Status */ #define DT2821_TMRCTR 0x0e /* Timer/Counter */ -/* - * At power up, some registers are in a well-known state. The - * masks and values are as follows: - */ - -#define DT2821_ADCSR_MASK 0xfff0 -#define DT2821_ADCSR_VAL 0x7c00 - -#define DT2821_CHANCSR_MASK 0xf0f0 -#define DT2821_CHANCSR_VAL 0x70f0 - -#define DT2821_DACSR_MASK 0x7c93 -#define DT2821_DACSR_VAL 0x7c90 - -#define DT2821_SUPCSR_MASK 0xf8ff -#define DT2821_SUPCSR_VAL 0x0000 - -#define DT2821_TMRCTR_MASK 0xff00 -#define DT2821_TMRCTR_VAL 0xf000 - /* * Bit fields of each register */ @@ -1148,6 +1128,27 @@ static void dt282x_free_dma(struct comedi_device *dev) } } +static int dt282x_initialize(struct comedi_device *dev) +{ + /* Initialize board */ + outw(DT2821_BDINIT, dev->iobase + DT2821_SUPCSR); + inw(dev->iobase + DT2821_ADCSR); + + /* + * At power up, some registers are in a well-known state. + * Check them to see if a DT2821 series board is present. + */ + if (((inw(dev->iobase + DT2821_ADCSR) & 0xfff0) != 0x7c00) || + ((inw(dev->iobase + DT2821_CHANCSR) & 0xf0f0) != 0x70f0) || + ((inw(dev->iobase + DT2821_DACSR) & 0x7c93) != 0x7c90) || + ((inw(dev->iobase + DT2821_SUPCSR) & 0xf8ff) != 0x0000) || + ((inw(dev->iobase + DT2821_TMRCTR) & 0xff00) != 0xf000)) { + dev_err(dev->class_dev, "board not found\n"); + return -EIO; + } + return 0; +} + /* options: 0 i/o base @@ -1168,29 +1169,14 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct dt282x_private *devpriv; struct comedi_subdevice *s; int ret; - int i; ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; - outw(DT2821_BDINIT, dev->iobase + DT2821_SUPCSR); - i = inw(dev->iobase + DT2821_ADCSR); - - if (((inw(dev->iobase + DT2821_ADCSR) & DT2821_ADCSR_MASK) - != DT2821_ADCSR_VAL) || - ((inw(dev->iobase + DT2821_CHANCSR) & DT2821_CHANCSR_MASK) - != DT2821_CHANCSR_VAL) || - ((inw(dev->iobase + DT2821_DACSR) & DT2821_DACSR_MASK) - != DT2821_DACSR_VAL) || - ((inw(dev->iobase + DT2821_SUPCSR) & DT2821_SUPCSR_MASK) - != DT2821_SUPCSR_VAL) || - ((inw(dev->iobase + DT2821_TMRCTR) & DT2821_TMRCTR_MASK) - != DT2821_TMRCTR_VAL)) { - dev_err(dev->class_dev, "board not found\n"); - return -EIO; - } - /* should do board test */ + ret = dt282x_initialize(dev); + if (ret) + return ret; devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) -- cgit From f8b987b4d35c37cf973c30871fc42b16c6272041 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:52 -0700 Subject: staging: comedi: dt282x: remove the 'opt_*' enum This enum is used to index the 'options' values that are passed by the user attaches to the driver. These options are identified in the comedi comment block. For aesthetics, remove the enum and just open code the index values. Refactor the Analog Input subdevice init so that the it->options[4], indicating differential inputs, does not have to be checked multiple times. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 43 ++++++++++++++------------------- 1 file changed, 18 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index f9679b919d18..326924fcf90b 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1079,13 +1079,6 @@ static const struct comedi_lrange *opt_ao_range_lkup(int x) return ao_range_table[x]; } -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 */ -}; - static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) { struct dt282x_private *devpriv = dev->private; @@ -1183,11 +1176,10 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) return -ENOMEM; /* an IRQ and 2 DMA channels are required for async command support */ - if (it->options[opt_irq] && - it->options[opt_dma1] && it->options[opt_dma2]) { - unsigned int irq = it->options[opt_irq]; - unsigned int dma1 = it->options[opt_dma1]; - unsigned int dma2 = it->options[opt_dma2]; + if (it->options[1] && it->options[2] && it->options[3]) { + unsigned int irq = it->options[1]; + unsigned int dma1 = it->options[2]; + unsigned int dma2 = it->options[3]; if (dma2 < dma1) { unsigned int swap; @@ -1223,15 +1215,18 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* ai subdevice */ s->type = COMEDI_SUBD_AI; - s->subdev_flags = SDF_READABLE | - ((it->options[opt_diff]) ? SDF_DIFF : SDF_COMMON); - s->n_chan = - (it->options[opt_diff]) ? board->adchan_di : board->adchan_se; + s->subdev_flags = SDF_READABLE; + if (it->options[4]) { + s->subdev_flags |= SDF_DIFF; + s->n_chan = board->adchan_di; + } else { + s->subdev_flags |= SDF_COMMON; + s->n_chan = board->adchan_se; + } s->insn_read = dt282x_ai_insn_read; s->maxdata = board->ai_maxdata; - s->range_table = - opt_ai_range_lkup(board->ispgl, it->options[opt_ai_range]); - devpriv->ad_2scomp = it->options[opt_ai_twos] ? 1 : 0; + s->range_table = opt_ai_range_lkup(board->ispgl, it->options[8]); + devpriv->ad_2scomp = it->options[5] ? 1 : 0; if (dev->irq) { dev->read_subdev = s; s->subdev_flags |= SDF_CMD_READ; @@ -1252,12 +1247,10 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->insn_write = dt282x_ao_insn_write; s->maxdata = board->ao_maxdata; s->range_table_list = devpriv->darangelist; - devpriv->darangelist[0] = - opt_ao_range_lkup(it->options[opt_ao0_range]); - devpriv->darangelist[1] = - opt_ao_range_lkup(it->options[opt_ao1_range]); - devpriv->da0_2scomp = it->options[opt_ao0_twos] ? 1 : 0; - devpriv->da1_2scomp = it->options[opt_ao1_twos] ? 1 : 0; + devpriv->darangelist[0] = opt_ao_range_lkup(it->options[9]); + devpriv->darangelist[1] = opt_ao_range_lkup(it->options[10]); + devpriv->da0_2scomp = it->options[6] ? 1 : 0; + devpriv->da1_2scomp = it->options[7] ? 1 : 0; if (dev->irq) { dev->write_subdev = s; s->subdev_flags |= SDF_CMD_WRITE; -- cgit From 9803bc096910ce4f012699d4dae07d91346c6d66 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:53 -0700 Subject: staging: comedi: dt282x: tidy up Analog Output subdevice init For aesthetics, add some whitespace to the Analog Output subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 326924fcf90b..c26ae86b3e2a 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1236,31 +1236,33 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->cancel = dt282x_ai_cancel; } + /* Analog Output subdevice */ s = &dev->subdevices[1]; + if (board->dachan) { + s->type = COMEDI_SUBD_AO; + s->subdev_flags = SDF_WRITABLE; + s->n_chan = board->dachan; + s->maxdata = board->ao_maxdata; - s->n_chan = board->dachan; - if (s->n_chan) { - /* ao subsystem */ - s->type = COMEDI_SUBD_AO; - s->subdev_flags = SDF_WRITABLE; - s->insn_read = dt282x_ao_insn_read; - s->insn_write = dt282x_ao_insn_write; - s->maxdata = board->ao_maxdata; + /* ranges are per-channel, set by jumpers on the board */ s->range_table_list = devpriv->darangelist; devpriv->darangelist[0] = opt_ao_range_lkup(it->options[9]); devpriv->darangelist[1] = opt_ao_range_lkup(it->options[10]); devpriv->da0_2scomp = it->options[6] ? 1 : 0; devpriv->da1_2scomp = it->options[7] ? 1 : 0; + + s->insn_read = dt282x_ao_insn_read; + s->insn_write = dt282x_ao_insn_write; if (dev->irq) { dev->write_subdev = s; - s->subdev_flags |= SDF_CMD_WRITE; - s->len_chanlist = 2; - s->do_cmdtest = dt282x_ao_cmdtest; - s->do_cmd = dt282x_ao_cmd; - s->cancel = dt282x_ao_cancel; + s->subdev_flags |= SDF_CMD_WRITE; + s->len_chanlist = s->n_chan; + s->do_cmdtest = dt282x_ao_cmdtest; + s->do_cmd = dt282x_ao_cmd; + s->cancel = dt282x_ao_cancel; } } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } /* Digital I/O subdevice */ -- cgit From 810c8a88b660b1a06bd9b8b7b0fa00c990c4e734 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:54 -0700 Subject: staging: comedi: dt282x: tidy up Analog Input subdevice init For aesthetics, add some whitespace to the Analog Input subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index c26ae86b3e2a..9c512dac6567 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1211,11 +1211,10 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; + /* Analog Input subdevice */ s = &dev->subdevices[0]; - - /* ai subdevice */ - s->type = COMEDI_SUBD_AI; - s->subdev_flags = SDF_READABLE; + s->type = COMEDI_SUBD_AI; + s->subdev_flags = SDF_READABLE; if (it->options[4]) { s->subdev_flags |= SDF_DIFF; s->n_chan = board->adchan_di; @@ -1223,17 +1222,19 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->subdev_flags |= SDF_COMMON; s->n_chan = board->adchan_se; } - s->insn_read = dt282x_ai_insn_read; - s->maxdata = board->ai_maxdata; + s->maxdata = board->ai_maxdata; + s->range_table = opt_ai_range_lkup(board->ispgl, it->options[8]); devpriv->ad_2scomp = it->options[5] ? 1 : 0; + + s->insn_read = dt282x_ai_insn_read; if (dev->irq) { dev->read_subdev = s; - s->subdev_flags |= SDF_CMD_READ; - s->len_chanlist = 16; - s->do_cmdtest = dt282x_ai_cmdtest; - s->do_cmd = dt282x_ai_cmd; - s->cancel = dt282x_ai_cancel; + s->subdev_flags |= SDF_CMD_READ; + s->len_chanlist = s->n_chan; + s->do_cmdtest = dt282x_ai_cmdtest; + s->do_cmd = dt282x_ai_cmd; + s->cancel = dt282x_ai_cancel; } /* Analog Output subdevice */ -- cgit From d5aa6b7c31d8f9667e743a8bb2a6677caf78cd31 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:55 -0700 Subject: staging: comedi: dt282x: fix Analog Input se/diff channel configuration Most of the boards supported by this driver can do either single-ended or differential Analog Input but there are a couple that can only do one or the other. On the boards that can do both the type of input is set with jumpers on the board. The 'it->options[4]' passed by the user during the board (*attach) is used to determine how the Analog Inputs are configured. This is used to set the subdevice flags and number of channels correctly. Fix the check of this option so that it only applies when the board can actually do differential input. Also, default to differential inputs if that is the only mode the board supports. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 9c512dac6567..66f15aa55b7e 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1215,7 +1215,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s = &dev->subdevices[0]; s->type = COMEDI_SUBD_AI; s->subdev_flags = SDF_READABLE; - if (it->options[4]) { + if ((it->options[4] && board->adchan_di) || board->adchan_se == 0) { s->subdev_flags |= SDF_DIFF; s->n_chan = board->adchan_di; } else { -- cgit From fc00fbc990871a17e0e0f31acc0876f83165cf53 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:56 -0700 Subject: staging: comedi: dt282x: cleanup analog output range table The DT2821 series boards do not have programmable analog output ranges. The range is set, per-channel, with jumpers on the board. Currently the user has to pass some configuration options when attaching to the driver in order to set the range for each channel. If they do not pass the range options they will default to 0. If they pass an invalid range option they will also default to 0. The 0 range option is bipolar 10V. If the user passes a range option that does not match the hardware setting it doesn't cause any problems in the driver it just causes the user space comedilib library to incorrectly convert the hardware values to physical values. Make the attach a bit simpler by deprecating these options and providing a range table with all the valid ranges for the analog outputs. The user can then select the correct range when they use the comedilib functions. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 46 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 66f15aa55b7e..6c799f0a5ffc 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -39,16 +39,18 @@ Configuration options: [6] - AO 0 jumpered for 0=straight binary, 1=2's complement [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] - [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], - 4=[-2.5,2.5] + [9] - AO channel 0 range (deprecated, see below) + [10]- AO channel 1 range (deprecated, see below) Notes: - AO commands might be broken. - If you try to run a command on both the AI and AO subdevices simultaneously, bad things will happen. The driver needs to be fixed to check for this situation and return an error. + - AO range is not programmable. The AO subdevice has a range_table + containing all the possible analog output ranges. Use the range + that matches your board configuration to convert between data + values and physical units. */ #include @@ -183,6 +185,21 @@ static const struct comedi_lrange range_dt282x_ai_hi_unipolar = { } }; +/* + * The Analog Output range is set per-channel using jumpers on the board. + * All of these ranges may not be available on some DT2821 series boards. + * The default jumper setting has both channels set for +/-10V output. + */ +static const struct comedi_lrange dt282x_ao_range = { + 5, { + BIP_RANGE(10), + BIP_RANGE(5), + BIP_RANGE(2.5), + UNI_RANGE(10), + UNI_RANGE(5), + } +}; + struct dt282x_board { const char *name; unsigned int ai_maxdata; @@ -304,8 +321,6 @@ struct dt282x_private { unsigned int da0_2scomp:1; unsigned int da1_2scomp:1; - const struct comedi_lrange *darangelist[2]; - unsigned short ao_readback[2]; int dacsr; /* software copies of registers */ @@ -1064,21 +1079,6 @@ static const struct comedi_lrange *opt_ai_range_lkup(int ispgl, int x) } } -static const struct comedi_lrange *const ao_range_table[] = { - &range_bipolar10, - &range_unipolar10, - &range_bipolar5, - &range_unipolar5, - &range_bipolar2_5 -}; - -static const struct comedi_lrange *opt_ao_range_lkup(int x) -{ - if (x < 0 || x >= 5) - x = 0; - return ao_range_table[x]; -} - static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) { struct dt282x_private *devpriv = dev->private; @@ -1246,9 +1246,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->maxdata = board->ao_maxdata; /* ranges are per-channel, set by jumpers on the board */ - s->range_table_list = devpriv->darangelist; - devpriv->darangelist[0] = opt_ao_range_lkup(it->options[9]); - devpriv->darangelist[1] = opt_ao_range_lkup(it->options[10]); + s->range_table = &dt282x_ao_range; devpriv->da0_2scomp = it->options[6] ? 1 : 0; devpriv->da1_2scomp = it->options[7] ? 1 : 0; -- cgit From 9c64ef47a7134d3da686b63f79761e05ac504950 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:57 -0700 Subject: staging: comedi: dt282x: tidy up multi-line comments Tidy up the multi-line comments at the beginning of the file to follow the CodingStyle. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 112 +++++++++++++++++--------------- 1 file changed, 61 insertions(+), 51 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 6c799f0a5ffc..15becb536589 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1,57 +1,67 @@ /* - comedi/drivers/dt282x.c - Hardware driver for Data Translation DT2821 series - - 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. + * dt282x.c + * Comedi driver for Data Translation DT2821 series + * + * 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. */ + /* -Driver: dt282x -Description: Data Translation DT2821 series (including DT-EZ) -Author: ds -Devices: [Data Translation] DT2821 (dt2821), - DT2821-F-16SE (dt2821-f), DT2821-F-8DI (dt2821-f), - DT2821-G-16SE (dt2821-f), DT2821-G-8DI (dt2821-g), - DT2823 (dt2823), - DT2824-PGH (dt2824-pgh), DT2824-PGL (dt2824-pgl), DT2825 (dt2825), - DT2827 (dt2827), DT2828 (dt2828), DT21-EZ (dt21-ez), DT23-EZ (dt23-ez), - DT24-EZ (dt24-ez), DT24-EZ-PGL (dt24-ez-pgl) -Status: complete -Updated: Wed, 22 Aug 2001 17:11:34 -0700 - -Configuration options: - [0] - I/O port base address - [1] - IRQ - [2] - DMA 1 - [3] - DMA 2 - [4] - AI jumpered for 0=single ended, 1=differential - [5] - AI jumpered for 0=straight binary, 1=2's complement - [6] - AO 0 jumpered for 0=straight binary, 1=2's complement - [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 channel 0 range (deprecated, see below) - [10]- AO channel 1 range (deprecated, see below) - -Notes: - - AO commands might be broken. - - If you try to run a command on both the AI and AO subdevices - simultaneously, bad things will happen. The driver needs to - be fixed to check for this situation and return an error. - - AO range is not programmable. The AO subdevice has a range_table - containing all the possible analog output ranges. Use the range - that matches your board configuration to convert between data - values and physical units. -*/ + * Driver: dt282x + * Description: Data Translation DT2821 series (including DT-EZ) + * Author: ds + * Devices: (Data Translation) DT2821 [dt2821] + * (Data Translation) DT2821-F-16SE [dt2821-f] + * (Data Translation) DT2821-F-8DI [dt2821-f] + * (Data Translation) DT2821-G-16SE [dt2821-g] + * (Data Translation) DT2821-G-8DI [dt2821-g] + * (Data Translation) DT2823 [dt2823] + * (Data Translation) DT2824-PGH [dt2824-pgh] + * (Data Translation) DT2824-PGL [dt2824-pgl] + * (Data Translation) DT2825 [dt2825] + * (Data Translation) DT2827 [dt2827] + * (Data Translation) DT2828 [dt2828] + * (Data Translation) DT2928 [dt2829] + * (Data Translation) DT21-EZ [dt21-ez] + * (Data Translation) DT23-EZ [dt23-ez] + * (Data Translation) DT24-EZ [dt24-ez] + * (Data Translation) DT24-EZ-PGL [dt24-ez-pgl] + * Status: complete + * Updated: Wed, 22 Aug 2001 17:11:34 -0700 + * + * Configuration options: + * [0] - I/O port base address + * [1] - IRQ (optional, required for async command support) + * [2] - DMA 1 (optional, required for async command support) + * [3] - DMA 2 (optional, required for async command support) + * [4] - AI jumpered for 0=single ended, 1=differential + * [5] - AI jumpered for 0=straight binary, 1=2's complement + * [6] - AO 0 jumpered for 0=straight binary, 1=2's complement + * [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 channel 0 range (deprecated, see below) + * [10]- AO channel 1 range (deprecated, see below) + * + * Notes: + * - AO commands might be broken. + * - If you try to run a command on both the AI and AO subdevices + * simultaneously, bad things will happen. The driver needs to + * be fixed to check for this situation and return an error. + * - AO range is not programmable. The AO subdevice has a range_table + * containing all the possible analog output ranges. Use the range + * that matches your board configuration to convert between data + * values and physical units. + */ #include #include "../comedidev.h" -- cgit From 7152f7d4b130a4b99c9a2dd1fc705a3b8ca8dcd5 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:58 -0700 Subject: staging: comedi: dt282x: update the MODULE_DESCRIPTION Change the MODULE_DESCRIPTION to something more useful than the generic "Comedi low-level driver". Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 15becb536589..28ee5a3c3f14 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1305,5 +1305,5 @@ static struct comedi_driver dt282x_driver = { module_comedi_driver(dt282x_driver); MODULE_AUTHOR("Comedi http://www.comedi.org"); -MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_DESCRIPTION("Comedi driver for Data Translation DT2821 series"); MODULE_LICENSE("GPL"); -- cgit From 3ec2e20274f5721949c27eac403e876f397db50e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:12:59 -0700 Subject: staging: comedi: dt282x: avoid calculating the timer divisor multiple times A common timer is used for analog input and output async commands. The (*do_cmdtest) for both subdevices calculates the divisor as part of Step 4 when validating the trigger arguments. The divisor is calculated again in the (*do_cmd) for both subdevices in order to set the timer. The comedi core only calls the (*do_cmd) is called after a successful (*do_cmdtest). Save the divisor from the (*do_cmdtest) in the private data and use that value in the (*do_cmd). The extra check of the cmd->convert_arg in dt282x_ai_cmd() is not necessary. The convert_arg was already checked in the (*do_cmdtest), and it's not used in the (*do_cmd). Tidy up dt282x_ns_to_timer(), the parameters are all unsigned int's and the mask of the 'flags' can be moved here to simplify the callers. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 41 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 28ee5a3c3f14..9d8b603cdf68 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -331,6 +331,8 @@ struct dt282x_private { unsigned int da0_2scomp:1; unsigned int da1_2scomp:1; + unsigned int divisor; + unsigned short ao_readback[2]; int dacsr; /* software copies of registers */ @@ -413,34 +415,34 @@ static void dt282x_disable_dma(struct comedi_device *dev) disable_dma(devpriv->dma[1].chan); } -static int dt282x_ns_to_timer(int *nanosec, int round_mode) +static unsigned int dt282x_ns_to_timer(unsigned int *ns, unsigned int flags) { - int prescale, base, divider; + unsigned int prescale, base, divider; for (prescale = 0; prescale < 16; prescale++) { if (prescale == 1) continue; base = 250 * (1 << prescale); - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: - divider = (*nanosec + base / 2) / base; + divider = (*ns + base / 2) / base; break; case TRIG_ROUND_DOWN: - divider = (*nanosec) / base; + divider = (*ns) / base; break; case TRIG_ROUND_UP: - divider = (*nanosec + base - 1) / base; + divider = (*ns + base - 1) / base; break; } if (divider < 256) { - *nanosec = divider * base; + *ns = divider * base; return (prescale << 8) | (255 - divider); } } base = 250 * (1 << 15); divider = 255; - *nanosec = divider * base; + *ns = divider * base; return (15 << 8) | (255 - divider); } @@ -688,9 +690,11 @@ static int dt282x_ai_insn_read(struct comedi_device *dev, } static int dt282x_ai_cmdtest(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_cmd *cmd) + struct comedi_subdevice *s, + struct comedi_cmd *cmd) { const struct dt282x_board *board = comedi_board(dev); + struct dt282x_private *devpriv = dev->private; int err = 0; unsigned int arg; @@ -748,7 +752,7 @@ static int dt282x_ai_cmdtest(struct comedi_device *dev, /* step 4: fix up any arguments */ arg = cmd->convert_arg; - dt282x_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + devpriv->divisor = dt282x_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (err) @@ -759,18 +763,13 @@ static int dt282x_ai_cmdtest(struct comedi_device *dev, static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - const struct dt282x_board *board = comedi_board(dev); struct dt282x_private *devpriv = dev->private; struct comedi_cmd *cmd = &s->async->cmd; - int timer; int ret; dt282x_disable_dma(dev); - if (cmd->convert_arg < board->ai_speed) - cmd->convert_arg = board->ai_speed; - timer = dt282x_ns_to_timer(&cmd->convert_arg, TRIG_ROUND_NEAREST); - outw(timer, dev->iobase + DT2821_TMRCTR); + outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR); if (cmd->scan_begin_src == TRIG_FOLLOW) { /* internal trigger */ @@ -889,8 +888,10 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, } static int dt282x_ao_cmdtest(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_cmd *cmd) + struct comedi_subdevice *s, + struct comedi_cmd *cmd) { + struct dt282x_private *devpriv = dev->private; int err = 0; unsigned int arg; @@ -933,7 +934,7 @@ static int dt282x_ao_cmdtest(struct comedi_device *dev, /* step 4: fix up any arguments */ arg = cmd->scan_begin_arg; - dt282x_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + devpriv->divisor = dt282x_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); if (err) @@ -979,7 +980,6 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { struct dt282x_private *devpriv = dev->private; - int timer; struct comedi_cmd *cmd = &s->async->cmd; dt282x_disable_dma(dev); @@ -994,8 +994,7 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->dma_dir = DMA_MODE_WRITE; devpriv->current_dma_index = 0; - timer = dt282x_ns_to_timer(&cmd->scan_begin_arg, TRIG_ROUND_NEAREST); - outw(timer, dev->iobase + DT2821_TMRCTR); + outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR); devpriv->dacsr = DT2821_SSEL | DT2821_DACLK | DT2821_IDARDY; outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); -- cgit From 0f8e8c5ab67a818ad56291007796d17f16d0fd6a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:13:00 -0700 Subject: staging: comedi: dt282x: tidy up the register map and bit defines For aesthetics, rename the register map defines so that the bit defines are associated with the registers. Also, convert all the bit defines into bit-shifts to make them clear. Remove all the verbose comments. All the registers and bits are named according to the User Manual for the DT2821 Series, Document UM-05073-G. That manual can be checked if necessary for the verbose information. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 302 ++++++++++++++++---------------- 1 file changed, 151 insertions(+), 151 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 9d8b603cdf68..6e813bb562e8 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -76,70 +76,52 @@ #include "comedi_fc.h" /* - * Registers in the DT282x + * Register map */ - -#define DT2821_ADCSR 0x00 /* A/D Control/Status */ -#define DT2821_CHANCSR 0x02 /* Channel Control/Status */ -#define DT2821_ADDAT 0x04 /* A/D data */ -#define DT2821_DACSR 0x06 /* D/A Control/Status */ -#define DT2821_DADAT 0x08 /* D/A data */ -#define DT2821_DIODAT 0x0a /* digital data */ -#define DT2821_SUPCSR 0x0c /* Supervisor Control/Status */ -#define DT2821_TMRCTR 0x0e /* Timer/Counter */ - -/* - * Bit fields of each register - */ - -/* ADCSR */ - -#define DT2821_ADERR 0x8000 /* (R) 1 for A/D error */ -#define DT2821_ADCLK 0x0200 /* (R/W) A/D clock enable */ - /* 0x7c00 read as 1's */ -#define DT2821_MUXBUSY 0x0100 /* (R) multiplexer busy */ -#define DT2821_ADDONE 0x0080 /* (R) A/D done */ -#define DT2821_IADDONE 0x0040 /* (R/W) interrupt on A/D done */ - /* 0x0030 gain select */ - /* 0x000f channel select */ - -/* CHANCSR */ - -#define DT2821_LLE 0x8000 /* (R/W) Load List Enable */ - /* 0x7000 read as 1's */ - /* 0x0f00 (R) present address */ - /* 0x00f0 read as 1's */ - /* 0x000f (R) number of entries - 1 */ - -/* DACSR */ - -#define DT2821_DAERR 0x8000 /* (R) D/A error */ -#define DT2821_YSEL 0x0200 /* (R/W) DAC 1 select */ -#define DT2821_SSEL 0x0100 /* (R/W) single channel select */ -#define DT2821_DACRDY 0x0080 /* (R) DAC ready */ -#define DT2821_IDARDY 0x0040 /* (R/W) interrupt on DAC ready */ -#define DT2821_DACLK 0x0020 /* (R/W) D/A clock enable */ -#define DT2821_HBOE 0x0002 /* (R/W) DIO high byte output enable */ -#define DT2821_LBOE 0x0001 /* (R/W) DIO low byte output enable */ - -/* SUPCSR */ - -#define DT2821_DMAD 0x8000 /* (R) DMA done */ -#define DT2821_ERRINTEN 0x4000 /* (R/W) interrupt on error */ -#define DT2821_CLRDMADNE 0x2000 /* (W) clear DMA done */ -#define DT2821_DDMA 0x1000 /* (R/W) dual DMA */ -#define DT2821_DS1 0x0800 /* (R/W) DMA select 1 */ -#define DT2821_DS0 0x0400 /* (R/W) DMA select 0 */ -#define DT2821_BUFFB 0x0200 /* (R/W) buffer B selected */ -#define DT2821_SCDN 0x0100 /* (R) scan done */ -#define DT2821_DACON 0x0080 /* (W) DAC single conversion */ -#define DT2821_ADCINIT 0x0040 /* (W) A/D initialize */ -#define DT2821_DACINIT 0x0020 /* (W) D/A initialize */ -#define DT2821_PRLD 0x0010 /* (W) preload multiplexer */ -#define DT2821_STRIG 0x0008 /* (W) software trigger */ -#define DT2821_XTRIG 0x0004 /* (R/W) external trigger enable */ -#define DT2821_XCLK 0x0002 /* (R/W) external clock enable */ -#define DT2821_BDINIT 0x0001 /* (W) initialize board */ +#define DT2821_ADCSR_REG 0x00 +#define DT2821_ADCSR_ADERR (1 << 15) +#define DT2821_ADCSR_ADCLK (1 << 9) +#define DT2821_ADCSR_MUXBUSY (1 << 8) +#define DT2821_ADCSR_ADDONE (1 << 7) +#define DT2821_ADCSR_IADDONE (1 << 6) +#define DT2821_ADCSR_GS(x) (((x) & 0x3) << 4) +#define DT2821_ADCSR_CHAN(x) (((x) & 0xf) << 0) +#define DT2821_CHANCSR_REG 0x02 +#define DT2821_CHANCSR_LLE (1 << 15) +#define DT2821_CHANCSR_PRESLA(x) (((x) & 0xf) >> 8) +#define DT2821_CHANCSR_NUMB(x) ((((x) - 1) & 0xf) << 0) +#define DT2821_ADDAT_REG 0x04 +#define DT2821_DACSR_REG 0x06 +#define DT2821_DACSR_DAERR (1 << 15) +#define DT2821_DACSR_YSEL(x) ((x) << 9) +#define DT2821_DACSR_SSEL (1 << 8) +#define DT2821_DACSR_DACRDY (1 << 7) +#define DT2821_DACSR_IDARDY (1 << 6) +#define DT2821_DACSR_DACLK (1 << 5) +#define DT2821_DACSR_HBOE (1 << 1) +#define DT2821_DACSR_LBOE (1 << 0) +#define DT2821_DADAT_REG 0x08 +#define DT2821_DIODAT_REG 0x0a +#define DT2821_SUPCSR_REG 0x0c +#define DT2821_SUPCSR_DMAD (1 << 15) +#define DT2821_SUPCSR_ERRINTEN (1 << 14) +#define DT2821_SUPCSR_CLRDMADNE (1 << 13) +#define DT2821_SUPCSR_DDMA (1 << 12) +#define DT2821_SUPCSR_DS_PIO (0 << 10) +#define DT2821_SUPCSR_DS_AD_CLK (1 << 10) +#define DT2821_SUPCSR_DS_DA_CLK (2 << 10) +#define DT2821_SUPCSR_DS_AD_TRIG (3 << 10) +#define DT2821_SUPCSR_BUFFB (1 << 9) +#define DT2821_SUPCSR_SCDN (1 << 8) +#define DT2821_SUPCSR_DACON (1 << 7) +#define DT2821_SUPCSR_ADCINIT (1 << 6) +#define DT2821_SUPCSR_DACINIT (1 << 5) +#define DT2821_SUPCSR_PRLD (1 << 4) +#define DT2821_SUPCSR_STRIG (1 << 3) +#define DT2821_SUPCSR_XTRIG (1 << 2) +#define DT2821_SUPCSR_XCLK (1 << 1) +#define DT2821_SUPCSR_BDINIT (1 << 0) +#define DT2821_TMRCTR_REG 0x0e static const struct comedi_lrange range_dt282x_ai_lo_bipolar = { 4, { @@ -476,7 +458,8 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev, void *ptr = devpriv->dma[cur_dma].buf; int size; - outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_CLRDMADNE, + dev->iobase + DT2821_SUPCSR_REG); disable_dma(devpriv->dma[cur_dma].chan); @@ -500,7 +483,8 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev, int size = devpriv->dma[cur_dma].size; int ret; - outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_CLRDMADNE, + dev->iobase + DT2821_SUPCSR_REG); disable_dma(devpriv->dma[cur_dma].chan); @@ -526,8 +510,8 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev, /* clear the dual dma flag, making this the last dma segment */ /* XXX probably wrong */ if (!devpriv->ntrig) { - devpriv->supcsr &= ~(DT2821_DDMA); - outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR); + devpriv->supcsr &= ~DT2821_SUPCSR_DDMA; + outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR_REG); } #endif /* restart the channel */ @@ -548,34 +532,34 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) return IRQ_HANDLED; } - adcsr = inw(dev->iobase + DT2821_ADCSR); - dacsr = inw(dev->iobase + DT2821_DACSR); - supcsr = inw(dev->iobase + DT2821_SUPCSR); - if (supcsr & DT2821_DMAD) { + adcsr = inw(dev->iobase + DT2821_ADCSR_REG); + dacsr = inw(dev->iobase + DT2821_DACSR_REG); + supcsr = inw(dev->iobase + DT2821_SUPCSR_REG); + if (supcsr & DT2821_SUPCSR_DMAD) { if (devpriv->dma_dir == DMA_MODE_READ) dt282x_ai_dma_interrupt(dev, s); else dt282x_ao_dma_interrupt(dev, s_ao); handled = 1; } - if (adcsr & DT2821_ADERR) { + if (adcsr & DT2821_ADCSR_ADERR) { if (devpriv->nread != 0) { comedi_error(dev, "A/D error"); s->async->events |= COMEDI_CB_ERROR; } handled = 1; } - if (dacsr & DT2821_DAERR) { + if (dacsr & DT2821_DACSR_DAERR) { comedi_error(dev, "D/A error"); s_ao->async->events |= COMEDI_CB_ERROR; handled = 1; } #if 0 - if (adcsr & DT2821_ADDONE) { + if (adcsr & DT2821_ADCSR_ADDONE) { int ret; unsigned short data; - data = inw(dev->iobase + DT2821_ADDAT); + data = inw(dev->iobase + DT2821_ADDAT_REG); data &= s->maxdata; if (devpriv->ad_2scomp) data = comedi_offset_munge(s, data); @@ -589,9 +573,9 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) if (!devpriv->nread) { s->async->events |= COMEDI_CB_EOA; } else { - if (supcsr & DT2821_SCDN) - outw(devpriv->supcsr | DT2821_STRIG, - dev->iobase + DT2821_SUPCSR); + if (supcsr & DT2821_SUPCSR_SCDN) + outw(devpriv->supcsr | DT2821_SUPCSR_STRIG, + dev->iobase + DT2821_SUPCSR_REG); } handled = 1; } @@ -606,17 +590,20 @@ static void dt282x_load_changain(struct comedi_device *dev, int n, unsigned int *chanlist) { struct dt282x_private *devpriv = dev->private; - unsigned int i; - unsigned int chan, range; + int i; - outw(DT2821_LLE | (n - 1), dev->iobase + DT2821_CHANCSR); + outw(DT2821_CHANCSR_LLE | DT2821_CHANCSR_NUMB(n), + dev->iobase + DT2821_CHANCSR_REG); for (i = 0; i < n; i++) { - chan = CR_CHAN(chanlist[i]); - range = CR_RANGE(chanlist[i]); - outw(devpriv->adcsr | (range << 4) | chan, - dev->iobase + DT2821_ADCSR); + unsigned int chan = CR_CHAN(chanlist[i]); + unsigned int range = CR_RANGE(chanlist[i]); + + outw(devpriv->adcsr | + DT2821_ADCSR_GS(range) | + DT2821_ADCSR_CHAN(chan), + dev->iobase + DT2821_ADCSR_REG); } - outw(n - 1, dev->iobase + DT2821_CHANCSR); + outw(DT2821_CHANCSR_NUMB(n), dev->iobase + DT2821_CHANCSR_REG); } static int dt282x_ai_timeout(struct comedi_device *dev, @@ -626,14 +613,14 @@ static int dt282x_ai_timeout(struct comedi_device *dev, { unsigned int status; - status = inw(dev->iobase + DT2821_ADCSR); + status = inw(dev->iobase + DT2821_ADCSR_REG); switch (context) { - case DT2821_MUXBUSY: - if ((status & DT2821_MUXBUSY) == 0) + case DT2821_ADCSR_MUXBUSY: + if ((status & DT2821_ADCSR_MUXBUSY) == 0) return 0; break; - case DT2821_ADDONE: - if (status & DT2821_ADDONE) + case DT2821_ADCSR_ADDONE: + if (status & DT2821_ADCSR_ADDONE) return 0; break; default: @@ -659,26 +646,28 @@ static int dt282x_ai_insn_read(struct comedi_device *dev, int i; /* XXX should we really be enabling the ad clock here? */ - devpriv->adcsr = DT2821_ADCLK; - outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR); + devpriv->adcsr = DT2821_ADCSR_ADCLK; + outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR_REG); dt282x_load_changain(dev, 1, &insn->chanspec); - outw(devpriv->supcsr | DT2821_PRLD, dev->iobase + DT2821_SUPCSR); - ret = comedi_timeout(dev, s, insn, dt282x_ai_timeout, DT2821_MUXBUSY); + outw(devpriv->supcsr | DT2821_SUPCSR_PRLD, + dev->iobase + DT2821_SUPCSR_REG); + ret = comedi_timeout(dev, s, insn, + dt282x_ai_timeout, DT2821_ADCSR_MUXBUSY); if (ret) return ret; for (i = 0; i < insn->n; i++) { - outw(devpriv->supcsr | DT2821_STRIG, - dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_STRIG, + dev->iobase + DT2821_SUPCSR_REG); - ret = comedi_timeout(dev, s, insn, dt282x_ai_timeout, - DT2821_ADDONE); + ret = comedi_timeout(dev, s, insn, + dt282x_ai_timeout, DT2821_ADCSR_ADDONE); if (ret) return ret; - val = inw(dev->iobase + DT2821_ADDAT); + val = inw(dev->iobase + DT2821_ADDAT_REG); val &= s->maxdata; if (devpriv->ad_2scomp) val = comedi_offset_munge(s, val); @@ -769,17 +758,18 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) dt282x_disable_dma(dev); - outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR); + outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR_REG); - if (cmd->scan_begin_src == TRIG_FOLLOW) { - /* internal trigger */ - devpriv->supcsr = DT2821_ERRINTEN | DT2821_DS0; - } else { - /* external trigger */ - devpriv->supcsr = DT2821_ERRINTEN | DT2821_DS0 | DT2821_DS1; - } - outw(devpriv->supcsr | DT2821_CLRDMADNE | DT2821_BUFFB | DT2821_ADCINIT, - dev->iobase + DT2821_SUPCSR); + devpriv->supcsr = DT2821_SUPCSR_ERRINTEN; + if (cmd->scan_begin_src == TRIG_FOLLOW) + devpriv->supcsr = DT2821_SUPCSR_DS_AD_CLK; + else + devpriv->supcsr = DT2821_SUPCSR_DS_AD_TRIG; + outw(devpriv->supcsr | + DT2821_SUPCSR_CLRDMADNE | + DT2821_SUPCSR_BUFFB | + DT2821_SUPCSR_ADCINIT, + dev->iobase + DT2821_SUPCSR_REG); devpriv->ntrig = cmd->stop_arg * cmd->scan_end_arg; devpriv->nread = devpriv->ntrig; @@ -789,28 +779,30 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) dt282x_prep_ai_dma(dev, 0, 0); if (devpriv->ntrig) { dt282x_prep_ai_dma(dev, 1, 0); - devpriv->supcsr |= DT2821_DDMA; - outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR); + devpriv->supcsr |= DT2821_SUPCSR_DDMA; + outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR_REG); } devpriv->adcsr = 0; dt282x_load_changain(dev, cmd->chanlist_len, cmd->chanlist); - devpriv->adcsr = DT2821_ADCLK | DT2821_IADDONE; - outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR); + devpriv->adcsr = DT2821_ADCSR_ADCLK | DT2821_ADCSR_IADDONE; + outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR_REG); - outw(devpriv->supcsr | DT2821_PRLD, dev->iobase + DT2821_SUPCSR); - ret = comedi_timeout(dev, s, NULL, dt282x_ai_timeout, DT2821_MUXBUSY); + outw(devpriv->supcsr | DT2821_SUPCSR_PRLD, + dev->iobase + DT2821_SUPCSR_REG); + ret = comedi_timeout(dev, s, NULL, + dt282x_ai_timeout, DT2821_ADCSR_MUXBUSY); if (ret) return ret; if (cmd->scan_begin_src == TRIG_FOLLOW) { - outw(devpriv->supcsr | DT2821_STRIG, - dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_STRIG, + dev->iobase + DT2821_SUPCSR_REG); } else { - devpriv->supcsr |= DT2821_XTRIG; - outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR); + devpriv->supcsr |= DT2821_SUPCSR_XTRIG; + outw(devpriv->supcsr, dev->iobase + DT2821_SUPCSR_REG); } return 0; @@ -824,10 +816,11 @@ static int dt282x_ai_cancel(struct comedi_device *dev, dt282x_disable_dma(dev); devpriv->adcsr = 0; - outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR); + outw(devpriv->adcsr, dev->iobase + DT2821_ADCSR_REG); devpriv->supcsr = 0; - outw(devpriv->supcsr | DT2821_ADCINIT, dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_ADCINIT, + dev->iobase + DT2821_SUPCSR_REG); return 0; } @@ -858,13 +851,11 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, unsigned int val; int i; - devpriv->dacsr |= DT2821_SSEL; + devpriv->dacsr |= DT2821_DACSR_SSEL | DT2821_DACSR_YSEL(chan); if (chan) { - devpriv->dacsr |= DT2821_YSEL; if (devpriv->da1_2scomp) munge = true; } else { - devpriv->dacsr &= ~DT2821_YSEL; if (devpriv->da0_2scomp) munge = true; } @@ -876,12 +867,12 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, if (munge) val = comedi_offset_munge(s, val); - outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); - outw(val, dev->iobase + DT2821_DADAT); + outw(val, dev->iobase + DT2821_DADAT_REG); - outw(devpriv->supcsr | DT2821_DACON, - dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_DACON, + dev->iobase + DT2821_SUPCSR_REG); } return insn->n; @@ -971,7 +962,8 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, } dt282x_prep_ao_dma(dev, 1, size); - outw(devpriv->supcsr | DT2821_STRIG, dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_STRIG, + dev->iobase + DT2821_SUPCSR_REG); s->async->inttrig = NULL; return 1; @@ -984,9 +976,14 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) dt282x_disable_dma(dev); - devpriv->supcsr = DT2821_ERRINTEN | DT2821_DS1 | DT2821_DDMA; - outw(devpriv->supcsr | DT2821_CLRDMADNE | DT2821_BUFFB | DT2821_DACINIT, - dev->iobase + DT2821_SUPCSR); + devpriv->supcsr = DT2821_SUPCSR_ERRINTEN | + DT2821_SUPCSR_DS_DA_CLK | + DT2821_SUPCSR_DDMA; + outw(devpriv->supcsr | + DT2821_SUPCSR_CLRDMADNE | + DT2821_SUPCSR_BUFFB | + DT2821_SUPCSR_DACINIT, + dev->iobase + DT2821_SUPCSR_REG); devpriv->ntrig = cmd->stop_arg * cmd->chanlist_len; devpriv->nread = devpriv->ntrig; @@ -994,10 +991,12 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->dma_dir = DMA_MODE_WRITE; devpriv->current_dma_index = 0; - outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR); + outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR_REG); - devpriv->dacsr = DT2821_SSEL | DT2821_DACLK | DT2821_IDARDY; - outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); + devpriv->dacsr = DT2821_DACSR_SSEL | + DT2821_DACSR_DACLK | + DT2821_DACSR_IDARDY; + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); s->async->inttrig = dt282x_ao_inttrig; @@ -1012,10 +1011,11 @@ static int dt282x_ao_cancel(struct comedi_device *dev, dt282x_disable_dma(dev); devpriv->dacsr = 0; - outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); devpriv->supcsr = 0; - outw(devpriv->supcsr | DT2821_DACINIT, dev->iobase + DT2821_SUPCSR); + outw(devpriv->supcsr | DT2821_SUPCSR_DACINIT, + dev->iobase + DT2821_SUPCSR_REG); return 0; } @@ -1026,9 +1026,9 @@ static int dt282x_dio_insn_bits(struct comedi_device *dev, unsigned int *data) { if (comedi_dio_update_state(s, data)) - outw(s->state, dev->iobase + DT2821_DIODAT); + outw(s->state, dev->iobase + DT2821_DIODAT_REG); - data[1] = inw(dev->iobase + DT2821_DIODAT); + data[1] = inw(dev->iobase + DT2821_DIODAT_REG); return insn->n; } @@ -1052,13 +1052,13 @@ static int dt282x_dio_insn_config(struct comedi_device *dev, if (ret) return ret; - devpriv->dacsr &= ~(DT2821_LBOE | DT2821_HBOE); + devpriv->dacsr &= ~(DT2821_DACSR_LBOE | DT2821_DACSR_HBOE); if (s->io_bits & 0x00ff) - devpriv->dacsr |= DT2821_LBOE; + devpriv->dacsr |= DT2821_DACSR_LBOE; if (s->io_bits & 0xff00) - devpriv->dacsr |= DT2821_HBOE; + devpriv->dacsr |= DT2821_DACSR_HBOE; - outw(devpriv->dacsr, dev->iobase + DT2821_DACSR); + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); return insn->n; } @@ -1133,18 +1133,18 @@ static void dt282x_free_dma(struct comedi_device *dev) static int dt282x_initialize(struct comedi_device *dev) { /* Initialize board */ - outw(DT2821_BDINIT, dev->iobase + DT2821_SUPCSR); - inw(dev->iobase + DT2821_ADCSR); + outw(DT2821_SUPCSR_BDINIT, dev->iobase + DT2821_SUPCSR_REG); + inw(dev->iobase + DT2821_ADCSR_REG); /* * At power up, some registers are in a well-known state. * Check them to see if a DT2821 series board is present. */ - if (((inw(dev->iobase + DT2821_ADCSR) & 0xfff0) != 0x7c00) || - ((inw(dev->iobase + DT2821_CHANCSR) & 0xf0f0) != 0x70f0) || - ((inw(dev->iobase + DT2821_DACSR) & 0x7c93) != 0x7c90) || - ((inw(dev->iobase + DT2821_SUPCSR) & 0xf8ff) != 0x0000) || - ((inw(dev->iobase + DT2821_TMRCTR) & 0xff00) != 0xf000)) { + if (((inw(dev->iobase + DT2821_ADCSR_REG) & 0xfff0) != 0x7c00) || + ((inw(dev->iobase + DT2821_CHANCSR_REG) & 0xf0f0) != 0x70f0) || + ((inw(dev->iobase + DT2821_DACSR_REG) & 0x7c93) != 0x7c90) || + ((inw(dev->iobase + DT2821_SUPCSR_REG) & 0xf8ff) != 0x0000) || + ((inw(dev->iobase + DT2821_TMRCTR_REG) & 0xff00) != 0xf000)) { dev_err(dev->class_dev, "board not found\n"); return -EIO; } -- cgit From c50d32de3707ee8165eaeaa319c5c13d12ea0669 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:13:01 -0700 Subject: staging: comedi: dt282x: fix bug where DIO direction is reset to inputs The direction of the 16 DIO channels is controlled with two bits in the DACSR register. The HBOE bit controls the direction of channels 15-8 and the LBOE bit channels 7-0. The DACSR register is also used to control the Analog Output async command support. Currently, starting or canceling an Analog Output command would also reset the DIO directions so that all channels were inputs. Fix the driver so that the DIO direction is not changed when starting or canceling an Analog Output async command. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 6e813bb562e8..e30a0646f4f1 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -993,9 +993,12 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) outw(devpriv->divisor, dev->iobase + DT2821_TMRCTR_REG); - devpriv->dacsr = DT2821_DACSR_SSEL | - DT2821_DACSR_DACLK | - DT2821_DACSR_IDARDY; + /* clear all bits but the DIO direction bits */ + devpriv->dacsr &= (DT2821_DACSR_LBOE | DT2821_DACSR_HBOE); + + devpriv->dacsr |= (DT2821_DACSR_SSEL | + DT2821_DACSR_DACLK | + DT2821_DACSR_IDARDY); outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); s->async->inttrig = dt282x_ao_inttrig; @@ -1010,7 +1013,9 @@ static int dt282x_ao_cancel(struct comedi_device *dev, dt282x_disable_dma(dev); - devpriv->dacsr = 0; + /* clear all bits but the DIO direction bits */ + devpriv->dacsr &= (DT2821_DACSR_LBOE | DT2821_DACSR_HBOE); + outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); devpriv->supcsr = 0; -- cgit From d7b6c574d17fed09a0d9fa4bc7674c13fa156805 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:13:02 -0700 Subject: staging: comedi: dt282x: automatically handle D/A data format The DT2821 series board have jumpers that set the output range for the two Analog Output channels. The range_table for the Analog Output subdevice provides all possible ranges to the user. When a unipolar range is selected the board expects the data to be in a straight binary format. When a bipolar range is select the data should be in two's complement format. Currently, the user passes some configuration options when attaching to the driver to select the data format for each channel. If the user does not pass the config options, the data format is assumed to be straight binary. The Analog Output subdevice now has a range_table that provides the user will all possible ranges. Use the range information to determine if the data values need to be munged into two's complememnt values and deprecate the config options. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index e30a0646f4f1..27a8bb18bcd5 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -46,8 +46,8 @@ * [3] - DMA 2 (optional, required for async command support) * [4] - AI jumpered for 0=single ended, 1=differential * [5] - AI jumpered for 0=straight binary, 1=2's complement - * [6] - AO 0 jumpered for 0=straight binary, 1=2's complement - * [7] - AO 1 jumpered for 0=straight binary, 1=2's complement + * [6] - AO 0 data format (deprecated, see below) + * [7] - AO 1 data format (deprecated, see below) * [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5] * [9] - AO channel 0 range (deprecated, see below) * [10]- AO channel 1 range (deprecated, see below) @@ -60,7 +60,9 @@ * - AO range is not programmable. The AO subdevice has a range_table * containing all the possible analog output ranges. Use the range * that matches your board configuration to convert between data - * values and physical units. + * values and physical units. The format of the data written to the + * board is handled automatically based on the unipolar/bipolar + * range that is selected. */ #include @@ -310,8 +312,6 @@ static const struct dt282x_board boardtypes[] = { struct dt282x_private { unsigned int ad_2scomp:1; - unsigned int da0_2scomp:1; - unsigned int da1_2scomp:1; unsigned int divisor; @@ -847,24 +847,17 @@ static int dt282x_ao_insn_write(struct comedi_device *dev, { struct dt282x_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); - bool munge = false; + unsigned int range = CR_RANGE(insn->chanspec); unsigned int val; int i; devpriv->dacsr |= DT2821_DACSR_SSEL | DT2821_DACSR_YSEL(chan); - if (chan) { - if (devpriv->da1_2scomp) - munge = true; - } else { - if (devpriv->da0_2scomp) - munge = true; - } for (i = 0; i < insn->n; i++) { val = data[i]; devpriv->ao_readback[chan] = val; - if (munge) + if (comedi_range_is_bipolar(s, range)) val = comedi_offset_munge(s, val); outw(devpriv->dacsr, dev->iobase + DT2821_DACSR_REG); @@ -1261,8 +1254,6 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* ranges are per-channel, set by jumpers on the board */ s->range_table = &dt282x_ao_range; - devpriv->da0_2scomp = it->options[6] ? 1 : 0; - devpriv->da1_2scomp = it->options[7] ? 1 : 0; s->insn_read = dt282x_ao_insn_read; s->insn_write = dt282x_ao_insn_write; -- cgit From e8ad74f9c7eace7b8ee075d42c2b3d4709b41225 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 21 Jun 2014 17:24:39 -0500 Subject: staging: comedi: addi_apci_1564: remove use of devpriv->b_OutputMemoryStatus This member of the private data struct is only set at one location in the entire driver, and then never even used for anything. Let's just remove its use. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 7fa4346f6184..4e6d0649489c 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -149,11 +149,6 @@ static int apci1564_do_config(struct comedi_device *dev, return -EINVAL; } - if (data[0]) - devpriv->b_OutputMemoryStatus = 1; - else - devpriv->b_OutputMemoryStatus = 0; - if (data[1] == 1) ul_Command = ul_Command | 0x1; else -- cgit From 5f193d736551634c521c05c4896cefbdff8a2a19 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 21 Jun 2014 17:25:17 -0500 Subject: staging: comedi: addi_apci_1564: remove unused static variables The global variables ui_InterruptStatus_1564 and ui_InterruptData are both set but never used. Just remove them from the driver. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 4e6d0649489c..843815ba5120 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -90,8 +90,7 @@ #define APCI1564_TCW_WARN_TIMEBASE_REG(x) (0x1c + ((x) * 0x20)) /* Global variables */ -static unsigned int ui_InterruptStatus_1564; -static unsigned int ui_InterruptData, ui_Type; +static unsigned int ui_Type; /* * Configures the digital input Subdevice @@ -160,7 +159,6 @@ static int apci1564_do_config(struct comedi_device *dev, ul_Command = ul_Command & 0xFFFFFFFD; outl(ul_Command, devpriv->i_IobaseAmcc + APCI1564_DO_INT_CTRL_REG); - ui_InterruptData = inl(devpriv->i_IobaseAmcc + APCI1564_DO_INT_CTRL_REG); devpriv->tsk_Current = current; return insn->n; } @@ -428,9 +426,6 @@ static void apci1564_interrupt(int irq, void *d) if (ui_DI == 1) { ui_DI = inl(devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); - ui_InterruptStatus_1564 = - inl(devpriv->i_IobaseAmcc + APCI1564_DI_INT_STATUS_REG); - ui_InterruptStatus_1564 = ui_InterruptStatus_1564 & 0X000FFFF0; /* send signal to the sample */ send_sig(SIGIO, devpriv->tsk_Current, 0); /* enable the interrupt */ -- cgit From 4c95a2b6b531e2caae211803d0ef88600c5d5f06 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 21 Jun 2014 17:25:43 -0500 Subject: staging: comedi: addi_apci_1564: introduce apci1564_private struct The addi_private struct defined in addi-data/addi_common.h is very bloated and contains many fields which addi_apci_1564 does not require. In the interest of eventually removing this driver's dependency on addi_common.h, we can create a private data struct specifically for addi_apci_1564 containing only the fields it will actually use. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci1564.c | 182 ++++++++++----------- drivers/staging/comedi/drivers/addi_apci_1564.c | 46 +++--- 2 files changed, 118 insertions(+), 110 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 843815ba5120..14714fe9a0c7 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -49,7 +49,7 @@ #define APCI1564_COUNTER4 3 /* - * devpriv->i_IobaseAmcc Register Map + * devpriv->amcc_iobase Register Map */ #define APCI1564_DI_REG 0x04 #define APCI1564_DI_INT_MODE1_REG 0x08 @@ -89,9 +89,6 @@ #define APCI1564_TCW_WARN_TIMEVAL_REG(x) (0x18 + ((x) * 0x20)) #define APCI1564_TCW_WARN_TIMEBASE_REG(x) (0x1c + ((x) * 0x20)) -/* Global variables */ -static unsigned int ui_Type; - /* * Configures the digital input Subdevice * @@ -105,24 +102,24 @@ static int apci1564_di_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; - devpriv->tsk_Current = current; + devpriv->tsk_current = current; /* Set the digital input logic */ if (data[0] == 1) { data[2] = data[2] << 4; data[3] = data[3] << 4; - outl(data[2], devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE1_REG); - outl(data[3], devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE2_REG); + outl(data[2], devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(data[3], devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); if (data[1] == ADDIDATA_OR) - outl(0x4, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); + outl(0x4, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); else - outl(0x6, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); + outl(0x6, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); } else { - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE1_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE2_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); } return insn->n; @@ -139,7 +136,7 @@ static int apci1564_do_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; unsigned int ul_Command = 0; if ((data[0] != 0) && (data[0] != 1)) { @@ -158,8 +155,8 @@ static int apci1564_do_config(struct comedi_device *dev, else ul_Command = ul_Command & 0xFFFFFFFD; - outl(ul_Command, devpriv->i_IobaseAmcc + APCI1564_DO_INT_CTRL_REG); - devpriv->tsk_Current = current; + outl(ul_Command, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); + devpriv->tsk_current = current; return insn->n; } @@ -179,31 +176,31 @@ static int apci1564_timer_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; unsigned int ul_Command1 = 0; - devpriv->tsk_Current = current; + devpriv->tsk_current = current; if (data[0] == ADDIDATA_WATCHDOG) { - devpriv->b_TimerSelectMode = ADDIDATA_WATCHDOG; + devpriv->timer_select_mode = ADDIDATA_WATCHDOG; /* Disable the watchdog */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_WDOG_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_WDOG_CTRL_REG); /* Loading the Reload value */ - outl(data[3], devpriv->i_IobaseAmcc + APCI1564_WDOG_RELOAD_REG); + outl(data[3], devpriv->amcc_iobase + APCI1564_WDOG_RELOAD_REG); } else if (data[0] == ADDIDATA_TIMER) { /* First Stop The Timer */ - ul_Command1 = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + ul_Command1 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); ul_Command1 = ul_Command1 & 0xFFFFF9FEUL; /* Stop The Timer */ - outl(ul_Command1, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(ul_Command1, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - devpriv->b_TimerSelectMode = ADDIDATA_TIMER; + devpriv->timer_select_mode = ADDIDATA_TIMER; if (data[1] == 1) { /* Enable TIMER int & DISABLE ALL THE OTHER int SOURCES */ - outl(0x02, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DO_IRQ_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_WDOG_IRQ_REG); + outl(0x02, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_IRQ_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_WDOG_IRQ_REG); outl(0x0, dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER1)); outl(0x0, @@ -214,22 +211,22 @@ static int apci1564_timer_config(struct comedi_device *dev, dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER4)); } else { /* disable Timer interrupt */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } /* Loading Timebase */ - outl(data[2], devpriv->i_IobaseAmcc + APCI1564_TIMER_TIMEBASE_REG); + outl(data[2], devpriv->amcc_iobase + APCI1564_TIMER_TIMEBASE_REG); /* Loading the Reload value */ - outl(data[3], devpriv->i_IobaseAmcc + APCI1564_TIMER_RELOAD_REG); + outl(data[3], devpriv->amcc_iobase + APCI1564_TIMER_RELOAD_REG); - ul_Command1 = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + ul_Command1 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); ul_Command1 = (ul_Command1 & 0xFFF719E2UL) | 2UL << 13UL | 0x10UL; /* mode 2 */ - outl(ul_Command1, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(ul_Command1, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } else if (data[0] == ADDIDATA_COUNTER) { - devpriv->b_TimerSelectMode = ADDIDATA_COUNTER; - devpriv->b_ModeSelectRegister = data[5]; + devpriv->timer_select_mode = ADDIDATA_COUNTER; + devpriv->mode_select_register = data[5]; /* First Stop The Counter */ ul_Command1 = inl(dev->iobase + APCI1564_TCW_CTRL_REG(data[5] - 1)); @@ -278,45 +275,45 @@ static int apci1564_timer_write(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; unsigned int ul_Command1 = 0; - if (devpriv->b_TimerSelectMode == ADDIDATA_WATCHDOG) { + if (devpriv->timer_select_mode == ADDIDATA_WATCHDOG) { switch (data[1]) { case 0: /* stop the watchdog */ /* disable the watchdog */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_WDOG_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_WDOG_CTRL_REG); break; case 1: /* start the watchdog */ - outl(0x0001, devpriv->i_IobaseAmcc + APCI1564_WDOG_CTRL_REG); + outl(0x0001, devpriv->amcc_iobase + APCI1564_WDOG_CTRL_REG); break; case 2: /* Software trigger */ - outl(0x0201, devpriv->i_IobaseAmcc + APCI1564_WDOG_CTRL_REG); + outl(0x0201, devpriv->amcc_iobase + APCI1564_WDOG_CTRL_REG); break; default: dev_err(dev->class_dev, "Specified functionality does not exist.\n"); return -EINVAL; } } - if (devpriv->b_TimerSelectMode == ADDIDATA_TIMER) { + if (devpriv->timer_select_mode == ADDIDATA_TIMER) { if (data[1] == 1) { - ul_Command1 = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + ul_Command1 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); ul_Command1 = (ul_Command1 & 0xFFFFF9FFUL) | 0x1UL; /* Enable the Timer */ - outl(ul_Command1, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(ul_Command1, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } else if (data[1] == 0) { /* Stop The Timer */ - ul_Command1 = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + ul_Command1 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); ul_Command1 = ul_Command1 & 0xFFFFF9FEUL; - outl(ul_Command1, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(ul_Command1, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } } - if (devpriv->b_TimerSelectMode == ADDIDATA_COUNTER) { + if (devpriv->timer_select_mode == ADDIDATA_COUNTER) { ul_Command1 = inl(dev->iobase + - APCI1564_TCW_CTRL_REG(devpriv->b_ModeSelectRegister - 1)); + APCI1564_TCW_CTRL_REG(devpriv->mode_select_register - 1)); if (data[1] == 1) { /* Start the Counter subdevice */ ul_Command1 = (ul_Command1 & 0xFFFFF9FFUL) | 0x1UL; @@ -329,7 +326,7 @@ static int apci1564_timer_write(struct comedi_device *dev, ul_Command1 = (ul_Command1 & 0xFFFFF9FFUL) | 0x400; } outl(ul_Command1, dev->iobase + - APCI1564_TCW_CTRL_REG(devpriv->b_ModeSelectRegister - 1)); + APCI1564_TCW_CTRL_REG(devpriv->mode_select_register - 1)); } return insn->n; } @@ -342,27 +339,27 @@ static int apci1564_timer_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; unsigned int ul_Command1 = 0; - if (devpriv->b_TimerSelectMode == ADDIDATA_WATCHDOG) { + if (devpriv->timer_select_mode == ADDIDATA_WATCHDOG) { /* Stores the status of the Watchdog */ - data[0] = inl(devpriv->i_IobaseAmcc + APCI1564_WDOG_STATUS_REG) & 0x1; - data[1] = inl(devpriv->i_IobaseAmcc + APCI1564_WDOG_REG); - } else if (devpriv->b_TimerSelectMode == ADDIDATA_TIMER) { + data[0] = inl(devpriv->amcc_iobase + APCI1564_WDOG_STATUS_REG) & 0x1; + data[1] = inl(devpriv->amcc_iobase + APCI1564_WDOG_REG); + } else if (devpriv->timer_select_mode == ADDIDATA_TIMER) { /* Stores the status of the Timer */ - data[0] = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_STATUS_REG) & 0x1; + data[0] = inl(devpriv->amcc_iobase + APCI1564_TIMER_STATUS_REG) & 0x1; /* Stores the Actual value of the Timer */ - data[1] = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_REG); - } else if (devpriv->b_TimerSelectMode == ADDIDATA_COUNTER) { + data[1] = inl(devpriv->amcc_iobase + APCI1564_TIMER_REG); + } else if (devpriv->timer_select_mode == ADDIDATA_COUNTER) { /* Read the Counter Actual Value. */ data[0] = inl(dev->iobase + - APCI1564_TCW_REG(devpriv->b_ModeSelectRegister - 1)); + APCI1564_TCW_REG(devpriv->mode_select_register - 1)); ul_Command1 = inl(dev->iobase + - APCI1564_TCW_STATUS_REG(devpriv->b_ModeSelectRegister - 1)); + APCI1564_TCW_STATUS_REG(devpriv->mode_select_register - 1)); /* Get the software trigger status */ data[1] = (unsigned char) ((ul_Command1 >> 1) & 1); @@ -375,9 +372,9 @@ static int apci1564_timer_read(struct comedi_device *dev, /* Get the overflow status */ data[4] = (unsigned char) ((ul_Command1 >> 0) & 1); - } else if ((devpriv->b_TimerSelectMode != ADDIDATA_TIMER) - && (devpriv->b_TimerSelectMode != ADDIDATA_WATCHDOG) - && (devpriv->b_TimerSelectMode != ADDIDATA_COUNTER)) { + } else if ((devpriv->timer_select_mode != ADDIDATA_TIMER) + && (devpriv->timer_select_mode != ADDIDATA_WATCHDOG) + && (devpriv->timer_select_mode != ADDIDATA_COUNTER)) { dev_err(dev->class_dev, "Invalid Subdevice!\n"); } return insn->n; @@ -391,7 +388,9 @@ static int apci1564_do_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - *data = ui_Type; + struct apci1564_private *devpriv = dev->private; + + *data = devpriv->do_int_type; return insn->n; } @@ -401,15 +400,15 @@ static int apci1564_do_read(struct comedi_device *dev, static void apci1564_interrupt(int irq, void *d) { struct comedi_device *dev = d; - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; unsigned int ui_DO, ui_DI; unsigned int ui_Timer; unsigned int ui_C1, ui_C2, ui_C3, ui_C4; unsigned int ul_Command2 = 0; - ui_DI = inl(devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG) & 0x01; - ui_DO = inl(devpriv->i_IobaseAmcc + APCI1564_DO_IRQ_REG) & 0x01; - ui_Timer = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_IRQ_REG) & 0x01; + ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG) & 0x01; + ui_DO = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG) & 0x01; + ui_Timer = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG) & 0x01; ui_C1 = inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER1)) & 0x1; ui_C2 = @@ -424,12 +423,12 @@ static void apci1564_interrupt(int irq, void *d) } if (ui_DI == 1) { - ui_DI = inl(devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); + ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); /* send signal to the sample */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* enable the interrupt */ - outl(ui_DI, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); + outl(ui_DI, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); return; } @@ -437,34 +436,35 @@ static void apci1564_interrupt(int irq, void *d) /* Check for Digital Output interrupt Type */ /* 1: VCC interrupt */ /* 2: CC interrupt */ - ui_Type = inl(devpriv->i_IobaseAmcc + APCI1564_DO_INT_STATUS_REG) & 0x3; + devpriv->do_int_type = inl(devpriv->amcc_iobase + + APCI1564_DO_INT_STATUS_REG) & 0x3; /* Disable the Interrupt */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DO_INT_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); /* Sends signal to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); } if (ui_Timer == 1) { - devpriv->b_TimerSelectMode = ADDIDATA_TIMER; - if (devpriv->b_TimerSelectMode) { + devpriv->timer_select_mode = ADDIDATA_TIMER; + if (devpriv->timer_select_mode) { /* Disable Timer Interrupt */ - ul_Command2 = inl(devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + ul_Command2 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Timer Interrupt */ - outl(ul_Command2, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); + outl(ul_Command2, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } } if (ui_C1 == 1) { - devpriv->b_TimerSelectMode = ADDIDATA_COUNTER; - if (devpriv->b_TimerSelectMode) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { /* Disable Counter Interrupt */ ul_Command2 = @@ -473,7 +473,7 @@ static void apci1564_interrupt(int irq, void *d) dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Counter Interrupt */ outl(ul_Command2, @@ -482,8 +482,8 @@ static void apci1564_interrupt(int irq, void *d) } if (ui_C2 == 1) { - devpriv->b_TimerSelectMode = ADDIDATA_COUNTER; - if (devpriv->b_TimerSelectMode) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { /* Disable Counter Interrupt */ ul_Command2 = @@ -492,7 +492,7 @@ static void apci1564_interrupt(int irq, void *d) dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Counter Interrupt */ outl(ul_Command2, @@ -501,8 +501,8 @@ static void apci1564_interrupt(int irq, void *d) } if (ui_C3 == 1) { - devpriv->b_TimerSelectMode = ADDIDATA_COUNTER; - if (devpriv->b_TimerSelectMode) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { /* Disable Counter Interrupt */ ul_Command2 = @@ -511,7 +511,7 @@ static void apci1564_interrupt(int irq, void *d) dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Counter Interrupt */ outl(ul_Command2, @@ -520,8 +520,8 @@ static void apci1564_interrupt(int irq, void *d) } if (ui_C4 == 1) { - devpriv->b_TimerSelectMode = ADDIDATA_COUNTER; - if (devpriv->b_TimerSelectMode) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { /* Disable Counter Interrupt */ ul_Command2 = @@ -530,7 +530,7 @@ static void apci1564_interrupt(int irq, void *d) dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_Current, 0); + send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Counter Interrupt */ outl(ul_Command2, diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 13d9962b47ec..1971da361b1d 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -6,6 +6,14 @@ #include "addi-data/addi_common.h" +struct apci1564_private { + unsigned int amcc_iobase; /* base of AMCC I/O registers */ + unsigned int do_int_type; + unsigned char timer_select_mode; + unsigned char mode_select_register; + struct task_struct *tsk_current; +}; + #include "addi-data/hwdrv_apci1564.c" static irqreturn_t v_ADDI_Interrupt(int irq, void *d) @@ -19,9 +27,9 @@ static int apci1564_di_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; - data[1] = inl(devpriv->i_IobaseAmcc + APCI1564_DI_REG); + data[1] = inl(devpriv->amcc_iobase + APCI1564_DI_REG); return insn->n; } @@ -31,12 +39,12 @@ static int apci1564_do_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; - s->state = inl(devpriv->i_IobaseAmcc + APCI1564_DO_REG); + s->state = inl(devpriv->amcc_iobase + APCI1564_DO_REG); if (comedi_dio_update_state(s, data)) - outl(s->state, devpriv->i_IobaseAmcc + APCI1564_DO_REG); + outl(s->state, devpriv->amcc_iobase + APCI1564_DO_REG); data[1] = s->state; @@ -45,26 +53,26 @@ static int apci1564_do_insn_bits(struct comedi_device *dev, static int apci1564_reset(struct comedi_device *dev) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; - ui_Type = 0; + devpriv->do_int_type = 0; /* Disable the input interrupts and reset status register */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_IRQ_REG); - inl(devpriv->i_IobaseAmcc + APCI1564_DI_INT_STATUS_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE1_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DI_INT_MODE2_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); /* Reset the output channels and disable interrupts */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DO_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_DO_INT_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); /* Reset the watchdog registers */ - addi_watchdog_reset(devpriv->i_IobaseAmcc + APCI1564_WDOG_REG); + addi_watchdog_reset(devpriv->amcc_iobase + APCI1564_WDOG_REG); /* Reset the timer registers */ - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->i_IobaseAmcc + APCI1564_TIMER_RELOAD_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_RELOAD_REG); /* Reset the counter registers */ outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); @@ -79,7 +87,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, unsigned long context_unused) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); - struct addi_private *devpriv; + struct apci1564_private *devpriv; struct comedi_subdevice *s; int ret; @@ -94,7 +102,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, return ret; dev->iobase = pci_resource_start(pcidev, 1); - devpriv->i_IobaseAmcc = pci_resource_start(pcidev, 0); + devpriv->amcc_iobase = pci_resource_start(pcidev, 0); apci1564_reset(dev); @@ -149,7 +157,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, static void apci1564_detach(struct comedi_device *dev) { - struct addi_private *devpriv = dev->private; + struct apci1564_private *devpriv = dev->private; if (devpriv) { if (dev->iobase) -- cgit From 1e15687ea472614d48416c53bebcf213c07a5532 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 21 Jun 2014 17:25:58 -0500 Subject: staging: comedi: addi_apci_1564: add Change-of-State interrupt subdevice and required functions This board supports an interrupt that can be generated by an AND/OR combination of 16 of the input channels. Create a separate subdevice to handle this interrupt. The apci1564_di_config() function is used to configure which inputs are used to generate the interrupt. Currently this function is broken since it does not follow the comedi API for insn_config functions. Fix this function by implementing the config instruction INSN_CONFIG_DIGITAL_TRIG. Add the remaining subdevice operations necessary for the interrupt subdevice to support async commands. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci1564.c | 44 +--- drivers/staging/comedi/drivers/addi_apci_1564.c | 250 +++++++++++++++++++-- 2 files changed, 232 insertions(+), 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 14714fe9a0c7..fbd0e1638984 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -26,12 +26,12 @@ #define APCI1564_ADDRESS_RANGE 128 /* Digital Input IRQ Function Selection */ -#define ADDIDATA_OR 0 -#define ADDIDATA_AND 1 +#define APCI1564_DI_INT_OR (0 << 1) +#define APCI1564_DI_INT_AND (1 << 1) /* Digital Input Interrupt Enable Disable. */ -#define APCI1564_DIGITAL_IP_INTERRUPT_ENABLE 0x4 -#define APCI1564_DIGITAL_IP_INTERRUPT_DISABLE 0xfffffffb +#define APCI1564_DI_INT_ENABLE 0x4 +#define APCI1564_DI_INT_DISABLE 0xfffffffb /* Digital Output Interrupt Enable Disable. */ #define APCI1564_DIGITAL_OP_VCC_INTERRUPT_ENABLE 0x1 @@ -89,42 +89,6 @@ #define APCI1564_TCW_WARN_TIMEVAL_REG(x) (0x18 + ((x) * 0x20)) #define APCI1564_TCW_WARN_TIMEBASE_REG(x) (0x1c + ((x) * 0x20)) -/* - * Configures the digital input Subdevice - * - * data[0] 1 = Enable interrupt, 0 = Disable interrupt - * data[1] 0 = ADDIDATA Interrupt OR LOGIC, 1 = ADDIDATA Interrupt AND LOGIC - * data[2] Interrupt mask for the mode 1 - * data[3] Interrupt mask for the mode 2 - */ -static int apci1564_di_config(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - struct apci1564_private *devpriv = dev->private; - - devpriv->tsk_current = current; - - /* Set the digital input logic */ - if (data[0] == 1) { - data[2] = data[2] << 4; - data[3] = data[3] << 4; - outl(data[2], devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); - outl(data[3], devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); - if (data[1] == ADDIDATA_OR) - outl(0x4, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - else - outl(0x6, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - } else { - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - } - - return insn->n; -} - /* * Configures The Digital Output Subdevice. * diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 1971da361b1d..fec478c6cf40 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -8,6 +8,9 @@ struct apci1564_private { unsigned int amcc_iobase; /* base of AMCC I/O registers */ + unsigned int mode1; /* riding-edge/high level channels */ + unsigned int mode2; /* falling-edge/low level channels */ + unsigned int ctrl; /* interrupt mode OR (edge) . AND (level) */ unsigned int do_int_type; unsigned char timer_select_mode; unsigned char mode_select_register; @@ -16,6 +19,38 @@ struct apci1564_private { #include "addi-data/hwdrv_apci1564.c" +static int apci1564_reset(struct comedi_device *dev) +{ + struct apci1564_private *devpriv = dev->private; + + devpriv->do_int_type = 0; + + /* Disable the input interrupts and reset status register */ + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); + + /* Reset the output channels and disable interrupts */ + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); + + /* Reset the watchdog registers */ + addi_watchdog_reset(devpriv->amcc_iobase + APCI1564_WDOG_REG); + + /* Reset the timer registers */ + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_RELOAD_REG); + + /* Reset the counter registers */ + outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); + outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); + outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); + + return 0; +} + static irqreturn_t v_ADDI_Interrupt(int irq, void *d) { apci1564_interrupt(irq, d); @@ -51,34 +86,187 @@ static int apci1564_do_insn_bits(struct comedi_device *dev, return insn->n; } -static int apci1564_reset(struct comedi_device *dev) +/* + * Change-Of-State (COS) interrupt configuration + * + * Channels 0 to 15 are interruptible. These channels can be configured + * to generate interrupts based on AND/OR logic for the desired channels. + * + * OR logic + * - reacts to rising or falling edges + * - interrupt is generated when any enabled channel + * meet the desired interrupt condition + * + * AND logic + * - reacts to changes in level of the selected inputs + * - interrupt is generated when all enabled channels + * meet the desired interrupt condition + * - after an interrupt, a change in level must occur on + * the selected inputs to release the IRQ logic + * + * The COS interrupt must be configured before it can be enabled. + * + * data[0] : INSN_CONFIG_DIGITAL_TRIG + * data[1] : trigger number (= 0) + * data[2] : configuration operation: + * COMEDI_DIGITAL_TRIG_DISABLE = no interrupts + * COMEDI_DIGITAL_TRIG_ENABLE_EDGES = OR (edge) interrupts + * COMEDI_DIGITAL_TRIG_ENABLE_LEVELS = AND (level) interrupts + * data[3] : left-shift for data[4] and data[5] + * data[4] : rising-edge/high level channels + * data[5] : falling-edge/low level channels + */ +static int apci1564_cos_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { struct apci1564_private *devpriv = dev->private; + unsigned int shift, oldmask; + + switch (data[0]) { + case INSN_CONFIG_DIGITAL_TRIG: + if (data[1] != 0) + return -EINVAL; + shift = data[3]; + oldmask = (1U << shift) - 1; + switch (data[2]) { + case COMEDI_DIGITAL_TRIG_DISABLE: + devpriv->ctrl = 0; + devpriv->mode1 = 0; + devpriv->mode2 = 0; + apci1564_reset(dev); + break; + case COMEDI_DIGITAL_TRIG_ENABLE_EDGES: + if (devpriv->ctrl != (APCI1564_DI_INT_ENABLE | + APCI1564_DI_INT_OR)) { + /* switching to 'OR' mode */ + devpriv->ctrl = APCI1564_DI_INT_ENABLE | + APCI1564_DI_INT_OR; + /* wipe old channels */ + devpriv->mode1 = 0; + devpriv->mode2 = 0; + } else { + /* preserve unspecified channels */ + devpriv->mode1 &= oldmask; + devpriv->mode2 &= oldmask; + } + /* configure specified channels */ + devpriv->mode1 |= data[4] << shift; + devpriv->mode2 |= data[5] << shift; + break; + case COMEDI_DIGITAL_TRIG_ENABLE_LEVELS: + if (devpriv->ctrl != (APCI1564_DI_INT_ENABLE | + APCI1564_DI_INT_AND)) { + /* switching to 'AND' mode */ + devpriv->ctrl = APCI1564_DI_INT_ENABLE | + APCI1564_DI_INT_AND; + /* wipe old channels */ + devpriv->mode1 = 0; + devpriv->mode2 = 0; + } else { + /* preserve unspecified channels */ + devpriv->mode1 &= oldmask; + devpriv->mode2 &= oldmask; + } + /* configure specified channels */ + devpriv->mode1 |= data[4] << shift; + devpriv->mode2 |= data[5] << shift; + break; + default: + return -EINVAL; + } + break; + default: + return -EINVAL; + } + return insn->n; +} - devpriv->do_int_type = 0; +static int apci1564_cos_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + data[1] = s->state; - /* Disable the input interrupts and reset status register */ - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); + return 0; +} - /* Reset the output channels and disable interrupts */ - outl(0x0, devpriv->amcc_iobase + APCI1564_DO_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); +static int apci1564_cos_cmdtest(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_cmd *cmd) +{ + int err = 0; - /* Reset the watchdog registers */ - addi_watchdog_reset(devpriv->amcc_iobase + APCI1564_WDOG_REG); + /* Step 1 : check if triggers are trivially valid */ - /* Reset the timer registers */ - outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_RELOAD_REG); + err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW); + err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT); + err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_FOLLOW); + err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT); + err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_NONE); - /* Reset the counter registers */ - outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); - outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); + if (err) + return 1; + + /* Step 2a : make sure trigger sources are unique */ + /* Step 2b : and mutually compatible */ + + if (err) + return 2; + + /* Step 3: check if arguments are trivially valid */ + + err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len); + err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); + + if (err) + return 3; + + /* step 4: ignored */ + + if (err) + return 4; + + return 0; +} + +/* + * Change-Of-State (COS) 'do_cmd' operation + * + * Enable the COS interrupt as configured by apci1564_cos_insn_config(). + */ +static int apci1564_cos_cmd(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + struct apci1564_private *devpriv = dev->private; + + if (!devpriv->ctrl) { + dev_warn(dev->class_dev, + "Interrupts disabled due to mode configuration!\n"); + return -EINVAL; + } + + outl(devpriv->mode1, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(devpriv->mode2, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); + outl(devpriv->ctrl, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + + return 0; +} + +static int apci1564_cos_cancel(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + struct apci1564_private *devpriv = dev->private; + + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); return 0; } @@ -113,7 +301,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, dev->irq = pcidev->irq; } - ret = comedi_alloc_subdevices(dev, 3); + ret = comedi_alloc_subdevices(dev, 4); if (ret) return ret; @@ -125,7 +313,6 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->maxdata = 1; s->len_chanlist = 32; s->range_table = &range_digital; - s->insn_config = apci1564_di_config; s->insn_bits = apci1564_di_insn_bits; /* Allocate and Initialise DO Subdevice Structures */ @@ -152,6 +339,25 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->insn_read = apci1564_timer_read; s->insn_config = apci1564_timer_config; + /* Change-Of-State (COS) interrupt subdevice */ + s = &dev->subdevices[3]; + if (dev->irq) { + dev->read_subdev = s; + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE | SDF_CMD_READ; + s->n_chan = 1; + s->maxdata = 1; + s->range_table = &range_digital; + s->len_chanlist = 1; + s->insn_config = apci1564_cos_insn_config; + s->insn_bits = apci1564_cos_insn_bits; + s->do_cmdtest = apci1564_cos_cmdtest; + s->do_cmd = apci1564_cos_cmd; + s->cancel = apci1564_cos_cancel; + } else { + s->type = COMEDI_SUBD_UNUSED; + } + return 0; } -- cgit From 860ba36cbeadee9064e2925be11dfb8368b9b25d Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 21 Jun 2014 17:26:10 -0500 Subject: staging: comedi: addi_apci_1564: move apci1564_interrupt() into addi_apci_1564.c On moving the function into the driver proper, also check the device is asserting the shared interrupt line. This patch also fixes the interrupt handling for the digital input change-of-state interrupts. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci1564.c | 146 ------------------- drivers/staging/comedi/drivers/addi_apci_1564.c | 157 ++++++++++++++++++++- 2 files changed, 153 insertions(+), 150 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index fbd0e1638984..4007fd2d9fa4 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -357,149 +357,3 @@ static int apci1564_do_read(struct comedi_device *dev, *data = devpriv->do_int_type; return insn->n; } - -/* - * Interrupt handler for the interruptible digital inputs - */ -static void apci1564_interrupt(int irq, void *d) -{ - struct comedi_device *dev = d; - struct apci1564_private *devpriv = dev->private; - unsigned int ui_DO, ui_DI; - unsigned int ui_Timer; - unsigned int ui_C1, ui_C2, ui_C3, ui_C4; - unsigned int ul_Command2 = 0; - - ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG) & 0x01; - ui_DO = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG) & 0x01; - ui_Timer = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG) & 0x01; - ui_C1 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER1)) & 0x1; - ui_C2 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER2)) & 0x1; - ui_C3 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER3)) & 0x1; - ui_C4 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER4)) & 0x1; - if (ui_DI == 0 && ui_DO == 0 && ui_Timer == 0 && ui_C1 == 0 - && ui_C2 == 0 && ui_C3 == 0 && ui_C4 == 0) { - dev_err(dev->class_dev, "Interrupt from unknown source.\n"); - } - - if (ui_DI == 1) { - ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - /* send signal to the sample */ - send_sig(SIGIO, devpriv->tsk_current, 0); - /* enable the interrupt */ - outl(ui_DI, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - return; - } - - if (ui_DO == 1) { - /* Check for Digital Output interrupt Type */ - /* 1: VCC interrupt */ - /* 2: CC interrupt */ - devpriv->do_int_type = inl(devpriv->amcc_iobase + - APCI1564_DO_INT_STATUS_REG) & 0x3; - /* Disable the Interrupt */ - outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); - - /* Sends signal to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - } - - if (ui_Timer == 1) { - devpriv->timer_select_mode = ADDIDATA_TIMER; - if (devpriv->timer_select_mode) { - - /* Disable Timer Interrupt */ - ul_Command2 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Timer Interrupt */ - - outl(ul_Command2, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - } - } - - if (ui_C1 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - } - } - - if (ui_C2 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - } - } - - if (ui_C3 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); - } - } - - if (ui_C4 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - } - } - return; -} diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index fec478c6cf40..f71ee02ed626 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -3,6 +3,7 @@ #include "../comedidev.h" #include "comedi_fc.h" +#include "amcc_s5933.h" #include "addi-data/addi_common.h" @@ -51,10 +52,158 @@ static int apci1564_reset(struct comedi_device *dev) return 0; } -static irqreturn_t v_ADDI_Interrupt(int irq, void *d) +static irqreturn_t apci1564_interrupt(int irq, void *d) { - apci1564_interrupt(irq, d); - return IRQ_RETVAL(1); + struct comedi_device *dev = d; + struct apci1564_private *devpriv = dev->private; + struct comedi_subdevice *s = dev->read_subdev; + unsigned int ui_DO, ui_DI; + unsigned int ui_Timer; + unsigned int ui_C1, ui_C2, ui_C3, ui_C4; + unsigned int ul_Command2 = 0; + + /* check interrupt is from this device */ + if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) & + INTCSR_INTR_ASSERTED) == 0) + return IRQ_NONE; + + /* check which interrupt was triggered */ + ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG) & + APCI1564_DI_INT_ENABLE; + ui_DO = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG) & 0x01; + ui_Timer = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG) & 0x01; + ui_C1 = + inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER1)) & 0x1; + ui_C2 = + inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER2)) & 0x1; + ui_C3 = + inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER3)) & 0x1; + ui_C4 = + inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER4)) & 0x1; + if (ui_DI == 0 && ui_DO == 0 && ui_Timer == 0 && ui_C1 == 0 + && ui_C2 == 0 && ui_C3 == 0 && ui_C4 == 0) { + return IRQ_HANDLED; + } + + if (ui_DI) { + /* disable the interrupt */ + outl(ui_DI & APCI1564_DI_INT_DISABLE, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + + s->state = inl(dev->iobase + APCI1564_DI_INT_STATUS_REG) & 0xffff; + comedi_buf_put(s, s->state); + s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS; + comedi_event(dev, s); + + /* enable the interrupt */ + outl(ui_DI, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + } + + if (ui_DO == 1) { + /* Check for Digital Output interrupt Type */ + /* 1: VCC interrupt */ + /* 2: CC interrupt */ + devpriv->do_int_type = inl(devpriv->amcc_iobase + + APCI1564_DO_INT_STATUS_REG) & 0x3; + /* Disable the Interrupt */ + outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); + + /* Sends signal to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + } + + if (ui_Timer == 1) { + devpriv->timer_select_mode = ADDIDATA_TIMER; + if (devpriv->timer_select_mode) { + + /* Disable Timer Interrupt */ + ul_Command2 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + + /* Enable Timer Interrupt */ + + outl(ul_Command2, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + } + } + + if (ui_C1 == 1) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { + + /* Disable Counter Interrupt */ + ul_Command2 = + inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); + outl(0x0, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); + + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + + /* Enable Counter Interrupt */ + outl(ul_Command2, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); + } + } + + if (ui_C2 == 1) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { + + /* Disable Counter Interrupt */ + ul_Command2 = + inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); + outl(0x0, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); + + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + + /* Enable Counter Interrupt */ + outl(ul_Command2, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); + } + } + + if (ui_C3 == 1) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { + + /* Disable Counter Interrupt */ + ul_Command2 = + inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + outl(0x0, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + + /* Enable Counter Interrupt */ + outl(ul_Command2, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + } + } + + if (ui_C4 == 1) { + devpriv->timer_select_mode = ADDIDATA_COUNTER; + if (devpriv->timer_select_mode) { + + /* Disable Counter Interrupt */ + ul_Command2 = + inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); + outl(0x0, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); + + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); + + /* Enable Counter Interrupt */ + outl(ul_Command2, + dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); + } + } + return IRQ_HANDLED; } static int apci1564_di_insn_bits(struct comedi_device *dev, @@ -295,7 +444,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, apci1564_reset(dev); if (pcidev->irq > 0) { - ret = request_irq(pcidev->irq, v_ADDI_Interrupt, IRQF_SHARED, + ret = request_irq(pcidev->irq, apci1564_interrupt, IRQF_SHARED, dev->board_name, dev); if (ret == 0) dev->irq = pcidev->irq; -- cgit From f114b45a6b14682c55e8c2709e07b1ccf4d727a2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:46 -0700 Subject: staging: comedi: s626: define CRA/CRB registers based on channel number Start cleaning up the 'struct s626_enc_info' by redefining the my_cra and my_crb members based on the comedi channel number. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 24 ++++++++++++------------ drivers/staging/comedi/drivers/s626.h | 10 +++------- 2 files changed, 15 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 0838f8aa6951..91f96e30ab48 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -1322,8 +1322,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CR0A, - .my_crb = S626_LP_CR0B, + .my_cra = S626_LP_CRA(0), + .my_crb = S626_LP_CRB(0), .my_latch_lsw = S626_LP_CNTR0ALSW, .my_event_bits = S626_EVBITS(0), }, { @@ -1337,8 +1337,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CR1A, - .my_crb = S626_LP_CR1B, + .my_cra = S626_LP_CRA(1), + .my_crb = S626_LP_CRB(1), .my_latch_lsw = S626_LP_CNTR1ALSW, .my_event_bits = S626_EVBITS(1), }, { @@ -1352,8 +1352,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CR2A, - .my_crb = S626_LP_CR2B, + .my_cra = S626_LP_CRA(2), + .my_crb = S626_LP_CRB(2), .my_latch_lsw = S626_LP_CNTR2ALSW, .my_event_bits = S626_EVBITS(2), }, { @@ -1367,8 +1367,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CR0A, - .my_crb = S626_LP_CR0B, + .my_cra = S626_LP_CRA(3), + .my_crb = S626_LP_CRB(3), .my_latch_lsw = S626_LP_CNTR0BLSW, .my_event_bits = S626_EVBITS(3), }, { @@ -1382,8 +1382,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CR1A, - .my_crb = S626_LP_CR1B, + .my_cra = S626_LP_CRA(4), + .my_crb = S626_LP_CRB(4), .my_latch_lsw = S626_LP_CNTR1BLSW, .my_event_bits = S626_EVBITS(4), }, { @@ -1397,8 +1397,8 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CR2A, - .my_crb = S626_LP_CR2B, + .my_cra = S626_LP_CRA(5), + .my_crb = S626_LP_CRB(5), .my_latch_lsw = S626_LP_CNTR2BLSW, .my_event_bits = S626_EVBITS(5), }, diff --git a/drivers/staging/comedi/drivers/s626.h b/drivers/staging/comedi/drivers/s626.h index 33b72739c1cb..70557a00f88a 100644 --- a/drivers/staging/comedi/drivers/s626.h +++ b/drivers/staging/comedi/drivers/s626.h @@ -229,13 +229,9 @@ #define S626_LP_RDEDGSEL(x) (0x004c + (x) * 0x10) /* R: edge selection */ #define S626_LP_RDCAPSEL(x) (0x004e + (x) * 0x10) /* R: capture enable */ -/* Counter Registers (read/write): */ -#define S626_LP_CR0A 0x0000 /* 0A setup register. */ -#define S626_LP_CR0B 0x0002 /* 0B setup register. */ -#define S626_LP_CR1A 0x0004 /* 1A setup register. */ -#define S626_LP_CR1B 0x0006 /* 1B setup register. */ -#define S626_LP_CR2A 0x0008 /* 2A setup register. */ -#define S626_LP_CR2B 0x000A /* 2B setup register. */ +/* Counter registers (read/write): 0A 1A 2A 0B 1B 2B */ +#define S626_LP_CRA(x) (0x0000 + (((x) % 3) * 0x4)) +#define S626_LP_CRB(x) (0x0002 + (((x) % 3) * 0x4)) /* Counter PreLoad (write) and Latch (read) Registers: */ #define S626_LP_CNTR0ALSW 0x000C /* 0A lsw. */ -- cgit From 71961c93a1748cf11e678ec55799a55a93bfb727 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:47 -0700 Subject: staging: comedi: s626: add comedi "chan" number to struct s626_enc_info Add the comedi "chan" number to the encoder private data so we can then remove some of the members of the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 91f96e30ab48..1785aae39ff6 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -104,6 +104,8 @@ struct s626_private { /* COUNTER OBJECT ------------------------------------------------ */ struct s626_enc_info { + int chan; + /* Pointers to functions that differ for A and B counters: */ /* Return clock enable. */ uint16_t (*get_enable)(struct comedi_device *dev, @@ -1312,6 +1314,7 @@ static void s626_pulse_index_b(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { + .chan = 0, .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, @@ -1327,6 +1330,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_latch_lsw = S626_LP_CNTR0ALSW, .my_event_bits = S626_EVBITS(0), }, { + .chan = 1, .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, @@ -1342,6 +1346,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_latch_lsw = S626_LP_CNTR1ALSW, .my_event_bits = S626_EVBITS(1), }, { + .chan = 2, .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, @@ -1357,6 +1362,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_latch_lsw = S626_LP_CNTR2ALSW, .my_event_bits = S626_EVBITS(2), }, { + .chan = 3, .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, @@ -1372,6 +1378,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_latch_lsw = S626_LP_CNTR0BLSW, .my_event_bits = S626_EVBITS(3), }, { + .chan = 4, .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, @@ -1387,6 +1394,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_latch_lsw = S626_LP_CNTR1BLSW, .my_event_bits = S626_EVBITS(4), }, { + .chan = 5, .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, -- cgit From de151452999fe48a67f9073f8903567bfc6d3ef3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:48 -0700 Subject: staging: comedi: s626: remove my_cr[ab] from encoder private data These members of the encoder private data can be calculated based on the comedi channel stored in the 'chan' member of the private data. Do that instead and remove the unnecessary members. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 95 +++++++++++++++++------------------ 1 file changed, 46 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 1785aae39ff6..68f677ac14ba 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -139,8 +139,6 @@ struct s626_enc_info { void (*reset_cap_flags)(struct comedi_device *dev, const struct s626_enc_info *k); - uint16_t my_cra; /* address of CRA register */ - uint16_t my_crb; /* address of CRB register */ uint16_t my_latch_lsw; /* address of Latch least-significant-word * register */ uint16_t my_event_bits[4]; /* bit translations for IntSrc -->RDMISC2 */ @@ -750,7 +748,7 @@ static uint32_t s626_read_latch(struct comedi_device *dev, static void s626_set_latch_source(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_LATCHSRC), S626_SET_CRB_LATCHSRC(value)); } @@ -773,7 +771,7 @@ static void s626_preload(struct comedi_device *dev, static void s626_reset_cap_flags_a(struct comedi_device *dev, const struct s626_enc_info *k) { - s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, (S626_SET_CRB_INTRESETCMD(1) | S626_SET_CRB_INTRESET_A(1))); } @@ -781,7 +779,7 @@ static void s626_reset_cap_flags_a(struct comedi_device *dev, static void s626_reset_cap_flags_b(struct comedi_device *dev, const struct s626_enc_info *k) { - s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, (S626_SET_CRB_INTRESETCMD(1) | S626_SET_CRB_INTRESET_B(1))); } @@ -799,8 +797,8 @@ static uint16_t s626_get_mode_a(struct comedi_device *dev, unsigned cntsrc, clkmult, clkpol, encmode; /* Fetch CRA and CRB register images. */ - cra = s626_debi_read(dev, k->my_cra); - crb = s626_debi_read(dev, k->my_crb); + cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); + crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); /* * Populate the standardized counter setup bit fields. @@ -854,8 +852,8 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev, unsigned cntsrc, clkmult, clkpol, encmode; /* Fetch CRA and CRB register images. */ - cra = s626_debi_read(dev, k->my_cra); - crb = s626_debi_read(dev, k->my_crb); + cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); + crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); /* * Populate the standardized counter setup bit fields. @@ -982,9 +980,9 @@ static void s626_set_mode_a(struct comedi_device *dev, * While retaining CounterB and LatchSrc configurations, program the * new counter operating mode. */ - s626_debi_replace(dev, k->my_cra, + s626_debi_replace(dev, S626_LP_CRA(k->chan), S626_CRAMSK_INDXSRC_B | S626_CRAMSK_CNTSRC_B, cra); - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A), crb); } @@ -1066,9 +1064,9 @@ static void s626_set_mode_b(struct comedi_device *dev, * While retaining CounterA and LatchSrc configurations, program the * new counter operating mode. */ - s626_debi_replace(dev, k->my_cra, + s626_debi_replace(dev, S626_LP_CRA(k->chan), ~(S626_CRAMSK_INDXSRC_B | S626_CRAMSK_CNTSRC_B), cra); - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), S626_CRBMSK_CLKENAB_A | S626_CRBMSK_LATCHSRC, crb); } @@ -1078,7 +1076,7 @@ static void s626_set_mode_b(struct comedi_device *dev, static void s626_set_enable_a(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t enab) { - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A), S626_SET_CRB_CLKENAB_A(enab)); } @@ -1086,7 +1084,7 @@ static void s626_set_enable_a(struct comedi_device *dev, static void s626_set_enable_b(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t enab) { - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_B), S626_SET_CRB_CLKENAB_B(enab)); } @@ -1094,20 +1092,23 @@ static void s626_set_enable_b(struct comedi_device *dev, static uint16_t s626_get_enable_a(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRB_CLKENAB_A(s626_debi_read(dev, k->my_crb)); + return S626_GET_CRB_CLKENAB_A(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } static uint16_t s626_get_enable_b(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRB_CLKENAB_B(s626_debi_read(dev, k->my_crb)); + return S626_GET_CRB_CLKENAB_B(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } #ifdef unused static uint16_t s626_get_latch_source(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRB_LATCHSRC(s626_debi_read(dev, k->my_crb)); + return S626_GET_CRB_LATCHSRC(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } #endif @@ -1119,14 +1120,14 @@ static uint16_t s626_get_latch_source(struct comedi_device *dev, static void s626_set_load_trig_a(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t trig) { - s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_LOADSRC_A, + s626_debi_replace(dev, S626_LP_CRA(k->chan), ~S626_CRAMSK_LOADSRC_A, S626_SET_CRA_LOADSRC_A(trig)); } static void s626_set_load_trig_b(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t trig) { - s626_debi_replace(dev, k->my_crb, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~(S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL), S626_SET_CRB_LOADSRC_B(trig)); } @@ -1134,13 +1135,15 @@ static void s626_set_load_trig_b(struct comedi_device *dev, static uint16_t s626_get_load_trig_a(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, k->my_cra)); + return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, + S626_LP_CRA(k->chan))); } static uint16_t s626_get_load_trig_b(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, k->my_crb)); + return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } /* @@ -1155,12 +1158,12 @@ static void s626_set_int_src_a(struct comedi_device *dev, struct s626_private *devpriv = dev->private; /* Reset any pending counter overflow or index captures. */ - s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, (S626_SET_CRB_INTRESETCMD(1) | S626_SET_CRB_INTRESET_A(1))); /* Program counter interrupt source. */ - s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_INTSRC_A, + s626_debi_replace(dev, S626_LP_CRA(k->chan), ~S626_CRAMSK_INTSRC_A, S626_SET_CRA_INTSRC_A(int_source)); /* Update MISC2 interrupt enable mask. */ @@ -1177,15 +1180,17 @@ static void s626_set_int_src_b(struct comedi_device *dev, uint16_t crb; /* Cache writeable CRB register image. */ - crb = s626_debi_read(dev, k->my_crb) & ~S626_CRBMSK_INTCTRL; + crb = s626_debi_read(dev, S626_LP_CRB(k->chan)) & ~S626_CRBMSK_INTCTRL; /* Reset any pending counter overflow or index captures. */ - s626_debi_write(dev, k->my_crb, (crb | S626_SET_CRB_INTRESETCMD(1) | - S626_SET_CRB_INTRESET_B(1))); + s626_debi_write(dev, S626_LP_CRB(k->chan), + (crb | S626_SET_CRB_INTRESETCMD(1) | + S626_SET_CRB_INTRESET_B(1))); /* Program counter interrupt source. */ - s626_debi_write(dev, k->my_crb, ((crb & ~S626_CRBMSK_INTSRC_B) | - S626_SET_CRB_INTSRC_B(int_source))); + s626_debi_write(dev, S626_LP_CRB(k->chan), + ((crb & ~S626_CRBMSK_INTSRC_B) | + S626_SET_CRB_INTSRC_B(int_source))); /* Update MISC2 interrupt enable mask. */ devpriv->counter_int_enabs = @@ -1196,13 +1201,15 @@ static void s626_set_int_src_b(struct comedi_device *dev, static uint16_t s626_get_int_src_a(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, k->my_cra)); + return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, + S626_LP_CRA(k->chan))); } static uint16_t s626_get_int_src_b(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, k->my_crb)); + return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } #ifdef unused @@ -1295,10 +1302,11 @@ static void s626_pulse_index_a(struct comedi_device *dev, { uint16_t cra; - cra = s626_debi_read(dev, k->my_cra); + cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); /* Pulse index. */ - s626_debi_write(dev, k->my_cra, (cra ^ S626_CRAMSK_INDXPOL_A)); - s626_debi_write(dev, k->my_cra, cra); + s626_debi_write(dev, S626_LP_CRA(k->chan), + (cra ^ S626_CRAMSK_INDXPOL_A)); + s626_debi_write(dev, S626_LP_CRA(k->chan), cra); } static void s626_pulse_index_b(struct comedi_device *dev, @@ -1306,10 +1314,11 @@ static void s626_pulse_index_b(struct comedi_device *dev, { uint16_t crb; - crb = s626_debi_read(dev, k->my_crb) & ~S626_CRBMSK_INTCTRL; + crb = s626_debi_read(dev, S626_LP_CRB(k->chan)) & ~S626_CRBMSK_INTCTRL; /* Pulse index. */ - s626_debi_write(dev, k->my_crb, (crb ^ S626_CRBMSK_INDXPOL_B)); - s626_debi_write(dev, k->my_crb, crb); + s626_debi_write(dev, S626_LP_CRB(k->chan), + (crb ^ S626_CRBMSK_INDXPOL_B)); + s626_debi_write(dev, S626_LP_CRB(k->chan), crb); } static const struct s626_enc_info s626_enc_chan_info[] = { @@ -1325,8 +1334,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CRA(0), - .my_crb = S626_LP_CRB(0), .my_latch_lsw = S626_LP_CNTR0ALSW, .my_event_bits = S626_EVBITS(0), }, { @@ -1341,8 +1348,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CRA(1), - .my_crb = S626_LP_CRB(1), .my_latch_lsw = S626_LP_CNTR1ALSW, .my_event_bits = S626_EVBITS(1), }, { @@ -1357,8 +1362,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_cra = S626_LP_CRA(2), - .my_crb = S626_LP_CRB(2), .my_latch_lsw = S626_LP_CNTR2ALSW, .my_event_bits = S626_EVBITS(2), }, { @@ -1373,8 +1376,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CRA(3), - .my_crb = S626_LP_CRB(3), .my_latch_lsw = S626_LP_CNTR0BLSW, .my_event_bits = S626_EVBITS(3), }, { @@ -1389,8 +1390,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CRA(4), - .my_crb = S626_LP_CRB(4), .my_latch_lsw = S626_LP_CNTR1BLSW, .my_event_bits = S626_EVBITS(4), }, { @@ -1405,8 +1404,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_cra = S626_LP_CRA(5), - .my_crb = S626_LP_CRB(5), .my_latch_lsw = S626_LP_CNTR2BLSW, .my_event_bits = S626_EVBITS(5), }, -- cgit From 2ffe88f67fbef05b337ba53ae05c0b37a9a376bf Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:49 -0700 Subject: staging: comedi: s626: define S626_LP_CNTR* registers based on channel number Redefining the Counter Preload/Latch registers as a macro that calculates the register offset based on the comedi channel number. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 12 ++++++------ drivers/staging/comedi/drivers/s626.h | 16 +++------------- 2 files changed, 9 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 68f677ac14ba..bbf8e26b29bf 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -1334,7 +1334,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR0ALSW, + .my_latch_lsw = S626_LP_CNTR(0), .my_event_bits = S626_EVBITS(0), }, { .chan = 1, @@ -1348,7 +1348,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR1ALSW, + .my_latch_lsw = S626_LP_CNTR(1), .my_event_bits = S626_EVBITS(1), }, { .chan = 2, @@ -1362,7 +1362,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR2ALSW, + .my_latch_lsw = S626_LP_CNTR(2), .my_event_bits = S626_EVBITS(2), }, { .chan = 3, @@ -1376,7 +1376,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR0BLSW, + .my_latch_lsw = S626_LP_CNTR(3), .my_event_bits = S626_EVBITS(3), }, { .chan = 4, @@ -1390,7 +1390,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR1BLSW, + .my_latch_lsw = S626_LP_CNTR(4), .my_event_bits = S626_EVBITS(4), }, { .chan = 5, @@ -1404,7 +1404,7 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR2BLSW, + .my_latch_lsw = S626_LP_CNTR(5), .my_event_bits = S626_EVBITS(5), }, }; diff --git a/drivers/staging/comedi/drivers/s626.h b/drivers/staging/comedi/drivers/s626.h index 70557a00f88a..b83424e7507b 100644 --- a/drivers/staging/comedi/drivers/s626.h +++ b/drivers/staging/comedi/drivers/s626.h @@ -233,19 +233,9 @@ #define S626_LP_CRA(x) (0x0000 + (((x) % 3) * 0x4)) #define S626_LP_CRB(x) (0x0002 + (((x) % 3) * 0x4)) -/* Counter PreLoad (write) and Latch (read) Registers: */ -#define S626_LP_CNTR0ALSW 0x000C /* 0A lsw. */ -#define S626_LP_CNTR0AMSW 0x000E /* 0A msw. */ -#define S626_LP_CNTR0BLSW 0x0010 /* 0B lsw. */ -#define S626_LP_CNTR0BMSW 0x0012 /* 0B msw. */ -#define S626_LP_CNTR1ALSW 0x0014 /* 1A lsw. */ -#define S626_LP_CNTR1AMSW 0x0016 /* 1A msw. */ -#define S626_LP_CNTR1BLSW 0x0018 /* 1B lsw. */ -#define S626_LP_CNTR1BMSW 0x001A /* 1B msw. */ -#define S626_LP_CNTR2ALSW 0x001C /* 2A lsw. */ -#define S626_LP_CNTR2AMSW 0x001E /* 2A msw. */ -#define S626_LP_CNTR2BLSW 0x0020 /* 2B lsw. */ -#define S626_LP_CNTR2BMSW 0x0022 /* 2B msw. */ +/* Counter PreLoad (write) and Latch (read) Registers: 0A 1A 2A 0B 1B 2B */ +#define S626_LP_CNTR(x) (0x000c + (((x) < 3) ? 0x0 : 0x4) + \ + (((x) % 3) * 0x8)) /* Miscellaneous Registers (read/write): */ #define S626_LP_MISC1 0x0088 /* Read/write Misc1. */ -- cgit From 23201ebb151993bb8212c5f12a3dcec6993e938b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:50 -0700 Subject: staging: comedi: s626: remove my_latch_lsw from encoder private data This member of the encoder private data can be calculated based on the comedi channel stored in the 'chan' member of the private data. Do that instead and remove the unnecessary member. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index bbf8e26b29bf..7eef58e63f12 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -139,8 +139,6 @@ struct s626_enc_info { void (*reset_cap_flags)(struct comedi_device *dev, const struct s626_enc_info *k); - uint16_t my_latch_lsw; /* address of Latch least-significant-word - * register */ uint16_t my_event_bits[4]; /* bit translations for IntSrc -->RDMISC2 */ }; @@ -731,10 +729,11 @@ static uint32_t s626_read_latch(struct comedi_device *dev, uint32_t value; /* Latch counts and fetch LSW of latched counts value. */ - value = s626_debi_read(dev, k->my_latch_lsw); + value = s626_debi_read(dev, S626_LP_CNTR(k->chan)); /* Fetch MSW of latched counts and combine with LSW. */ - value |= ((uint32_t)s626_debi_read(dev, k->my_latch_lsw + 2) << 16); + value |= ((uint32_t)s626_debi_read(dev, + S626_LP_CNTR(k->chan) + 2) << 16); /* Return latched counts. */ return value; @@ -759,8 +758,8 @@ static void s626_set_latch_source(struct comedi_device *dev, static void s626_preload(struct comedi_device *dev, const struct s626_enc_info *k, uint32_t value) { - s626_debi_write(dev, k->my_latch_lsw, value); - s626_debi_write(dev, k->my_latch_lsw + 2, value >> 16); + s626_debi_write(dev, S626_LP_CNTR(k->chan), value); + s626_debi_write(dev, S626_LP_CNTR(k->chan) + 2, value >> 16); } /* ****** PRIVATE COUNTER FUNCTIONS ****** */ @@ -1334,7 +1333,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR(0), .my_event_bits = S626_EVBITS(0), }, { .chan = 1, @@ -1348,7 +1346,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR(1), .my_event_bits = S626_EVBITS(1), }, { .chan = 2, @@ -1362,7 +1359,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, - .my_latch_lsw = S626_LP_CNTR(2), .my_event_bits = S626_EVBITS(2), }, { .chan = 3, @@ -1376,7 +1372,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR(3), .my_event_bits = S626_EVBITS(3), }, { .chan = 4, @@ -1390,7 +1385,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR(4), .my_event_bits = S626_EVBITS(4), }, { .chan = 5, @@ -1404,7 +1398,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, - .my_latch_lsw = S626_LP_CNTR(5), .my_event_bits = S626_EVBITS(5), }, }; -- cgit From c718f4a14f0cbc60eb72d8d6f39d0e3c5d1465d7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:51 -0700 Subject: staging: comedi: s626: remove 'set_enable' callback from encoder private data There are two functions used for the 'set_enable' callback, s626_set_enable_a() function is used for the channel 0-2 encoders and s626_set_enable_b() is used for the channel 3-5 encoders. Refactor the two callbacks into a single s626_set_enable() function and use the encoder channel number to handle the differenced. Remove the then unnecessary 'set_enable' member and just call s626_set_enable() directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 49 ++++++++++++++--------------------- 1 file changed, 20 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 7eef58e63f12..55ac04b24e57 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -122,9 +122,6 @@ struct s626_enc_info { /* Generate soft index strobe. */ void (*pulse_index)(struct comedi_device *dev, const struct s626_enc_info *k); - /* Program clock enable. */ - void (*set_enable)(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t enab); /* Program interrupt source. */ void (*set_int_src)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t int_source); @@ -1072,20 +1069,20 @@ static void s626_set_mode_b(struct comedi_device *dev, /* * Return/set a counter's enable. enab: 0=always enabled, 1=enabled by index. */ -static void s626_set_enable_a(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t enab) +static void s626_set_enable(struct comedi_device *dev, + const struct s626_enc_info *k, uint16_t enab) { - s626_debi_replace(dev, S626_LP_CRB(k->chan), - ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A), - S626_SET_CRB_CLKENAB_A(enab)); -} + unsigned int mask = S626_CRBMSK_INTCTRL; + unsigned int set; -static void s626_set_enable_b(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t enab) -{ - s626_debi_replace(dev, S626_LP_CRB(k->chan), - ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_B), - S626_SET_CRB_CLKENAB_B(enab)); + if (k->chan < 3) { + mask |= S626_CRBMSK_CLKENAB_A; + set = S626_SET_CRB_CLKENAB_A(enab); + } else { + mask |= S626_CRBMSK_CLKENAB_B; + set = S626_SET_CRB_CLKENAB_B(enab); + } + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~mask, set); } static uint16_t s626_get_enable_a(struct comedi_device *dev, @@ -1328,7 +1325,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_enable = s626_set_enable_a, .set_int_src = s626_set_int_src_a, .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, @@ -1341,7 +1337,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_enable = s626_set_enable_a, .set_int_src = s626_set_int_src_a, .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, @@ -1354,7 +1349,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_enable = s626_set_enable_a, .set_int_src = s626_set_int_src_a, .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, @@ -1367,7 +1361,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_enable = s626_set_enable_b, .set_int_src = s626_set_int_src_b, .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, @@ -1380,7 +1373,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_enable = s626_set_enable_b, .set_int_src = s626_set_int_src_b, .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, @@ -1393,7 +1385,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_enable = s626_set_enable_b, .set_int_src = s626_set_int_src_b, .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, @@ -1492,7 +1483,7 @@ static void s626_handle_dio_interrupt(struct comedi_device *dev, &s626_enc_chan_info[5]; devpriv->ai_convert_count = cmd->chanlist_len; - k->set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); } } if ((irqbit >> (cmd->convert_arg - (16 * group))) == 1 && @@ -1571,7 +1562,7 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) if (devpriv->ai_convert_count > 0) { devpriv->ai_convert_count--; if (devpriv->ai_convert_count == 0) - k->set_enable(dev, k, S626_CLKENAB_INDEX); + s626_set_enable(dev, k, S626_CLKENAB_INDEX); if (cmd->convert_src == TRIG_TIMER) { /* Trigger ADC scan loop start */ @@ -1594,7 +1585,7 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) if (cmd->convert_src == TRIG_TIMER) { k = &s626_enc_chan_info[4]; devpriv->ai_convert_count = cmd->chanlist_len; - k->set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); } } } @@ -2157,7 +2148,7 @@ static void s626_timer_load(struct comedi_device *dev, k->set_int_src(dev, k, S626_INTSRC_OVER); s626_set_latch_source(dev, k, value_latchsrc); - /* k->set_enable(dev, k, (uint16_t)(enab != 0)); */ + /* s626_set_enable(dev, k, (uint16_t)(enab != 0)); */ } /* TO COMPLETE */ @@ -2209,7 +2200,7 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* load timer value and enable interrupt */ s626_timer_load(dev, k, tick); - k->set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); break; case TRIG_EXT: /* set the digital line and interrupt for scan trigger */ @@ -2232,7 +2223,7 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* load timer value and enable interrupt */ s626_timer_load(dev, k, tick); - k->set_enable(dev, k, S626_CLKENAB_INDEX); + s626_set_enable(dev, k, S626_CLKENAB_INDEX); break; case TRIG_EXT: /* set the digital line and interrupt for convert trigger */ @@ -2540,7 +2531,7 @@ static int s626_enc_insn_config(struct comedi_device *dev, s626_preload(dev, k, data[0]); k->pulse_index(dev, k); s626_set_latch_source(dev, k, value_latchsrc); - k->set_enable(dev, k, (enab != 0)); + s626_set_enable(dev, k, (enab != 0)); return insn->n; } @@ -2633,7 +2624,7 @@ static void s626_counters_init(struct comedi_device *dev) k->set_mode(dev, k, setup, true); k->set_int_src(dev, k, 0); k->reset_cap_flags(dev, k); - k->set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); } } -- cgit From 4487502e8478b939445c15fffc836bdb44317a93 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:52 -0700 Subject: staging: comedi: s626: remove 'get_enable' callback from encoder private data There are two functions used for the 'get_enable' callback, s626_get_enable_a() function is used for the channel 0-2 encoders and s626_get_enable_b() is used for the channel 3-5 encoders. Refactor the two callbacks into a single s626_get_enable() function and use the encoder channel number to handle the differenced. Remove the then unnecessary 'get_enable' member and just call s626_set_enable() directly. The 'get_enable' callbacks were not being used by the driver. For now block the s626_get_enable() function with '#ifdef unused' to prevent a compiler warning. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 55ac04b24e57..4f93d6c19e48 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -107,9 +107,6 @@ struct s626_enc_info { int chan; /* Pointers to functions that differ for A and B counters: */ - /* Return clock enable. */ - uint16_t (*get_enable)(struct comedi_device *dev, - const struct s626_enc_info *k); /* Return interrupt source. */ uint16_t (*get_int_src)(struct comedi_device *dev, const struct s626_enc_info *k); @@ -1085,19 +1082,18 @@ static void s626_set_enable(struct comedi_device *dev, s626_debi_replace(dev, S626_LP_CRB(k->chan), ~mask, set); } -static uint16_t s626_get_enable_a(struct comedi_device *dev, - const struct s626_enc_info *k) +#ifdef unused +static uint16_t s626_get_enable(struct comedi_device *dev, + const struct s626_enc_info *k) { - return S626_GET_CRB_CLKENAB_A(s626_debi_read(dev, - S626_LP_CRB(k->chan))); -} + uint16_t crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); -static uint16_t s626_get_enable_b(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - return S626_GET_CRB_CLKENAB_B(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + if (k->chan < 3) + return S626_GET_CRB_CLKENAB_A(crb); + else + return S626_GET_CRB_CLKENAB_B(crb); } +#endif #ifdef unused static uint16_t s626_get_latch_source(struct comedi_device *dev, @@ -1320,7 +1316,6 @@ static void s626_pulse_index_b(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, - .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, @@ -1332,7 +1327,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(0), }, { .chan = 1, - .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, @@ -1344,7 +1338,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(1), }, { .chan = 2, - .get_enable = s626_get_enable_a, .get_int_src = s626_get_int_src_a, .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, @@ -1356,7 +1349,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(2), }, { .chan = 3, - .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, @@ -1368,7 +1360,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(3), }, { .chan = 4, - .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, @@ -1380,7 +1371,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(4), }, { .chan = 5, - .get_enable = s626_get_enable_b, .get_int_src = s626_get_int_src_b, .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, -- cgit From 7f03b749990cbc3be67f6eabcd0814b89abae0f6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:53 -0700 Subject: staging: comedi: s626: remove 'set_load_trig' callback from encoder private data There are two functions used for the 'set_load_trig' callback, One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_set_load_trig() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'set_load_trig' member and just call s626_set_load_trig() drectly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 43 ++++++++++++++++------------------- 1 file changed, 19 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 4f93d6c19e48..49b6d5941f3e 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -122,9 +122,6 @@ struct s626_enc_info { /* Program interrupt source. */ void (*set_int_src)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t int_source); - /* Program preload trigger source. */ - void (*set_load_trig)(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t trig); /* Program standardized operating mode. */ void (*set_mode)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t setup, @@ -1109,19 +1106,23 @@ static uint16_t s626_get_latch_source(struct comedi_device *dev, * register into the counter. 0=ThisCntr_Index, 1=ThisCntr_Overflow, * 2=OverflowA (B counters only), 3=disabled. */ -static void s626_set_load_trig_a(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t trig) +static void s626_set_load_trig(struct comedi_device *dev, + const struct s626_enc_info *k, uint16_t trig) { - s626_debi_replace(dev, S626_LP_CRA(k->chan), ~S626_CRAMSK_LOADSRC_A, - S626_SET_CRA_LOADSRC_A(trig)); -} + uint16_t reg; + uint16_t mask; + uint16_t set; -static void s626_set_load_trig_b(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t trig) -{ - s626_debi_replace(dev, S626_LP_CRB(k->chan), - ~(S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL), - S626_SET_CRB_LOADSRC_B(trig)); + if (k->chan < 3) { + reg = S626_LP_CRA(k->chan); + mask = S626_CRAMSK_LOADSRC_A; + set = S626_SET_CRA_LOADSRC_A(trig); + } else { + reg = S626_LP_CRB(k->chan); + mask = S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL; + set = S626_SET_CRB_LOADSRC_B(trig); + } + s626_debi_replace(dev, reg, ~mask, set); } static uint16_t s626_get_load_trig_a(struct comedi_device *dev, @@ -1321,7 +1322,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, - .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(0), @@ -1332,7 +1332,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, - .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(1), @@ -1343,7 +1342,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, - .set_load_trig = s626_set_load_trig_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(2), @@ -1354,7 +1352,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, - .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(3), @@ -1365,7 +1362,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, - .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(4), @@ -1376,7 +1372,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, - .set_load_trig = s626_set_load_trig_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(5), @@ -2128,11 +2123,11 @@ static void s626_timer_load(struct comedi_device *dev, * Software index pulse forces the preload register to load * into the counter */ - k->set_load_trig(dev, k, 0); + s626_set_load_trig(dev, k, 0); k->pulse_index(dev, k); /* set reload on counter overflow */ - k->set_load_trig(dev, k, 1); + s626_set_load_trig(dev, k, 1); /* set interrupt on overflow */ k->set_int_src(dev, k, S626_INTSRC_OVER); @@ -2554,9 +2549,9 @@ static int s626_enc_insn_write(struct comedi_device *dev, * Software index pulse forces the preload register to load * into the counter */ - k->set_load_trig(dev, k, 0); + s626_set_load_trig(dev, k, 0); k->pulse_index(dev, k); - k->set_load_trig(dev, k, 2); + s626_set_load_trig(dev, k, 2); return 1; } -- cgit From c35b86a7cca34c0021c7751729e0db58477d735c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:54 -0700 Subject: staging: comedi: s626: remove 'get_load_trig' callback from encoder private data There are two functions used for the 'get_load_trig' callback. One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_get_load_trig() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'get_enable' member from the encoder private data. The 'get_load_trig' callbacks were not being used by the driver. For now block the s626_get_load_trig() function with '#ifdef unused' to prevent a compiler warning. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 49b6d5941f3e..614e1a96a713 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -110,9 +110,6 @@ struct s626_enc_info { /* Return interrupt source. */ uint16_t (*get_int_src)(struct comedi_device *dev, const struct s626_enc_info *k); - /* Return preload trigger source. */ - uint16_t (*get_load_trig)(struct comedi_device *dev, - const struct s626_enc_info *k); /* Return standardized operating mode. */ uint16_t (*get_mode)(struct comedi_device *dev, const struct s626_enc_info *k); @@ -1125,19 +1122,18 @@ static void s626_set_load_trig(struct comedi_device *dev, s626_debi_replace(dev, reg, ~mask, set); } -static uint16_t s626_get_load_trig_a(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, - S626_LP_CRA(k->chan))); -} - -static uint16_t s626_get_load_trig_b(struct comedi_device *dev, - const struct s626_enc_info *k) +#ifdef unused +static uint16_t s626_get_load_trig(struct comedi_device *dev, + const struct s626_enc_info *k) { - return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + if (k->chan < 3) + return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, + S626_LP_CRA(k->chan))); + else + return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } +#endif /* * Return/set counter interrupt source and clear any captured @@ -1318,7 +1314,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, .get_int_src = s626_get_int_src_a, - .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, @@ -1328,7 +1323,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { }, { .chan = 1, .get_int_src = s626_get_int_src_a, - .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, @@ -1338,7 +1332,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { }, { .chan = 2, .get_int_src = s626_get_int_src_a, - .get_load_trig = s626_get_load_trig_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_int_src = s626_set_int_src_a, @@ -1348,7 +1341,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { }, { .chan = 3, .get_int_src = s626_get_int_src_b, - .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, @@ -1358,7 +1350,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { }, { .chan = 4, .get_int_src = s626_get_int_src_b, - .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, @@ -1368,7 +1359,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { }, { .chan = 5, .get_int_src = s626_get_int_src_b, - .get_load_trig = s626_get_load_trig_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_int_src = s626_set_int_src_b, -- cgit From 253e2ee4b2924a4ca2f092e41318741f86a533d9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:55 -0700 Subject: staging: comedi: s626: remove 'set_int_src' callback from encoder private data There are two functions used for the 'set_int_src' callback, One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_set_int_src() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'set_int_src' member and just call s626_set_int_src() drectly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 80 ++++++++++++++--------------------- 1 file changed, 32 insertions(+), 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 614e1a96a713..4c53d36c84d9 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -116,9 +116,6 @@ struct s626_enc_info { /* Generate soft index strobe. */ void (*pulse_index)(struct comedi_device *dev, const struct s626_enc_info *k); - /* Program interrupt source. */ - void (*set_int_src)(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t int_source); /* Program standardized operating mode. */ void (*set_mode)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t setup, @@ -1140,51 +1137,44 @@ static uint16_t s626_get_load_trig(struct comedi_device *dev, * index/overflow events. int_source: 0=Disabled, 1=OverflowOnly, * 2=IndexOnly, 3=IndexAndOverflow. */ -static void s626_set_int_src_a(struct comedi_device *dev, - const struct s626_enc_info *k, - uint16_t int_source) +static void s626_set_int_src(struct comedi_device *dev, + const struct s626_enc_info *k, + uint16_t int_source) { struct s626_private *devpriv = dev->private; + uint16_t cra_reg = S626_LP_CRA(k->chan); + uint16_t crb_reg = S626_LP_CRB(k->chan); - /* Reset any pending counter overflow or index captures. */ - s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, - (S626_SET_CRB_INTRESETCMD(1) | - S626_SET_CRB_INTRESET_A(1))); - - /* Program counter interrupt source. */ - s626_debi_replace(dev, S626_LP_CRA(k->chan), ~S626_CRAMSK_INTSRC_A, - S626_SET_CRA_INTSRC_A(int_source)); - - /* Update MISC2 interrupt enable mask. */ - devpriv->counter_int_enabs = - (devpriv->counter_int_enabs & ~k->my_event_bits[3]) | - k->my_event_bits[int_source]; -} - -static void s626_set_int_src_b(struct comedi_device *dev, - const struct s626_enc_info *k, - uint16_t int_source) -{ - struct s626_private *devpriv = dev->private; - uint16_t crb; + if (k->chan < 3) { + /* Reset any pending counter overflow or index captures */ + s626_debi_replace(dev, crb_reg, ~S626_CRBMSK_INTCTRL, + S626_SET_CRB_INTRESETCMD(1) | + S626_SET_CRB_INTRESET_A(1)); + + /* Program counter interrupt source */ + s626_debi_replace(dev, cra_reg, ~S626_CRAMSK_INTSRC_A, + S626_SET_CRA_INTSRC_A(int_source)); + } else { + uint16_t crb; - /* Cache writeable CRB register image. */ - crb = s626_debi_read(dev, S626_LP_CRB(k->chan)) & ~S626_CRBMSK_INTCTRL; + /* Cache writeable CRB register image */ + crb = s626_debi_read(dev, crb_reg); + crb &= ~S626_CRBMSK_INTCTRL; - /* Reset any pending counter overflow or index captures. */ - s626_debi_write(dev, S626_LP_CRB(k->chan), - (crb | S626_SET_CRB_INTRESETCMD(1) | - S626_SET_CRB_INTRESET_B(1))); + /* Reset any pending counter overflow or index captures */ + s626_debi_write(dev, crb_reg, + crb | S626_SET_CRB_INTRESETCMD(1) | + S626_SET_CRB_INTRESET_B(1)); - /* Program counter interrupt source. */ - s626_debi_write(dev, S626_LP_CRB(k->chan), - ((crb & ~S626_CRBMSK_INTSRC_B) | - S626_SET_CRB_INTSRC_B(int_source))); + /* Program counter interrupt source */ + s626_debi_write(dev, crb_reg, + (crb & ~S626_CRBMSK_INTSRC_B) | + S626_SET_CRB_INTSRC_B(int_source)); + } /* Update MISC2 interrupt enable mask. */ - devpriv->counter_int_enabs = - (devpriv->counter_int_enabs & ~k->my_event_bits[3]) | - k->my_event_bits[int_source]; + devpriv->counter_int_enabs &= ~k->my_event_bits[3]; + devpriv->counter_int_enabs |= k->my_event_bits[int_source]; } static uint16_t s626_get_int_src_a(struct comedi_device *dev, @@ -1316,7 +1306,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_int_src = s626_set_int_src_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(0), @@ -1325,7 +1314,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_int_src = s626_set_int_src_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(1), @@ -1334,7 +1322,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, - .set_int_src = s626_set_int_src_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(2), @@ -1343,7 +1330,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_int_src = s626_set_int_src_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(3), @@ -1352,7 +1338,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_int_src = s626_set_int_src_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(4), @@ -1361,7 +1346,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, - .set_int_src = s626_set_int_src_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(5), @@ -2120,7 +2104,7 @@ static void s626_timer_load(struct comedi_device *dev, s626_set_load_trig(dev, k, 1); /* set interrupt on overflow */ - k->set_int_src(dev, k, S626_INTSRC_OVER); + s626_set_int_src(dev, k, S626_INTSRC_OVER); s626_set_latch_source(dev, k, value_latchsrc); /* s626_set_enable(dev, k, (uint16_t)(enab != 0)); */ @@ -2597,7 +2581,7 @@ static void s626_counters_init(struct comedi_device *dev) for (chan = 0; chan < S626_ENCODER_CHANNELS; chan++) { k = &s626_enc_chan_info[chan]; k->set_mode(dev, k, setup, true); - k->set_int_src(dev, k, 0); + s626_set_int_src(dev, k, 0); k->reset_cap_flags(dev, k); s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); } -- cgit From 13f2609da8c92f9e3022dbce3766404d9c8da533 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:56 -0700 Subject: staging: comedi: s626: remove 'get_int_src' callback from encoder private data There are two functions used for the 'get_int_src' callback. One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_get_int_srsc() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'get_int_src' member from the encoder private data. The 'get_int_src' callbacks were not being used by the driver. For now block the s626_get_int_src() function with '#ifdef unused' to prevent a compiler warning. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 4c53d36c84d9..232b9fc5e5f6 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -107,9 +107,6 @@ struct s626_enc_info { int chan; /* Pointers to functions that differ for A and B counters: */ - /* Return interrupt source. */ - uint16_t (*get_int_src)(struct comedi_device *dev, - const struct s626_enc_info *k); /* Return standardized operating mode. */ uint16_t (*get_mode)(struct comedi_device *dev, const struct s626_enc_info *k); @@ -1177,19 +1174,18 @@ static void s626_set_int_src(struct comedi_device *dev, devpriv->counter_int_enabs |= k->my_event_bits[int_source]; } -static uint16_t s626_get_int_src_a(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, - S626_LP_CRA(k->chan))); -} - -static uint16_t s626_get_int_src_b(struct comedi_device *dev, - const struct s626_enc_info *k) +#ifdef unused +static uint16_t s626_get_int_src(struct comedi_device *dev, + const struct s626_enc_info *k) { - return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + if (chan < 3) + return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, + S626_LP_CRA(k->chan))); + else + return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, + S626_LP_CRB(k->chan))); } +#endif #ifdef unused /* @@ -1303,7 +1299,6 @@ static void s626_pulse_index_b(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, - .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, @@ -1311,7 +1306,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(0), }, { .chan = 1, - .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, @@ -1319,7 +1313,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(1), }, { .chan = 2, - .get_int_src = s626_get_int_src_a, .get_mode = s626_get_mode_a, .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, @@ -1327,7 +1320,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(2), }, { .chan = 3, - .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, @@ -1335,7 +1327,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(3), }, { .chan = 4, - .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, @@ -1343,7 +1334,6 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .my_event_bits = S626_EVBITS(4), }, { .chan = 5, - .get_int_src = s626_get_int_src_b, .get_mode = s626_get_mode_b, .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, -- cgit From 92249e1f792621505894ec81e3f8bafa88caeb35 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:57 -0700 Subject: staging: comedi: s626: remove 'pulse_index' callback from encoder private data There are two functions used for the 'pulse_index' callback, One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_pulse_index() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'pulse_index' member and just call s626_pulse_index() drectly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 52 +++++++++++++++-------------------- 1 file changed, 22 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 232b9fc5e5f6..4ec7ba1d3627 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -110,9 +110,6 @@ struct s626_enc_info { /* Return standardized operating mode. */ uint16_t (*get_mode)(struct comedi_device *dev, const struct s626_enc_info *k); - /* Generate soft index strobe. */ - void (*pulse_index)(struct comedi_device *dev, - const struct s626_enc_info *k); /* Program standardized operating mode. */ void (*set_mode)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t setup, @@ -1272,70 +1269,65 @@ static uint16_t s626_get_index_src(struct comedi_device *dev, /* * Generate an index pulse. */ -static void s626_pulse_index_a(struct comedi_device *dev, - const struct s626_enc_info *k) +static void s626_pulse_index(struct comedi_device *dev, + const struct s626_enc_info *k) { - uint16_t cra; + if (k->chan < 3) { + uint16_t cra; - cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); - /* Pulse index. */ - s626_debi_write(dev, S626_LP_CRA(k->chan), - (cra ^ S626_CRAMSK_INDXPOL_A)); - s626_debi_write(dev, S626_LP_CRA(k->chan), cra); -} + cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); -static void s626_pulse_index_b(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - uint16_t crb; + /* Pulse index */ + s626_debi_write(dev, S626_LP_CRA(k->chan), + (cra ^ S626_CRAMSK_INDXPOL_A)); + s626_debi_write(dev, S626_LP_CRA(k->chan), cra); + } else { + uint16_t crb; - crb = s626_debi_read(dev, S626_LP_CRB(k->chan)) & ~S626_CRBMSK_INTCTRL; - /* Pulse index. */ - s626_debi_write(dev, S626_LP_CRB(k->chan), - (crb ^ S626_CRBMSK_INDXPOL_B)); - s626_debi_write(dev, S626_LP_CRB(k->chan), crb); + crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); + crb &= ~S626_CRBMSK_INTCTRL; + + /* Pulse index */ + s626_debi_write(dev, S626_LP_CRB(k->chan), + (crb ^ S626_CRBMSK_INDXPOL_B)); + s626_debi_write(dev, S626_LP_CRB(k->chan), crb); + } } static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, .get_mode = s626_get_mode_a, - .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(0), }, { .chan = 1, .get_mode = s626_get_mode_a, - .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(1), }, { .chan = 2, .get_mode = s626_get_mode_a, - .pulse_index = s626_pulse_index_a, .set_mode = s626_set_mode_a, .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(2), }, { .chan = 3, .get_mode = s626_get_mode_b, - .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(3), }, { .chan = 4, .get_mode = s626_get_mode_b, - .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(4), }, { .chan = 5, .get_mode = s626_get_mode_b, - .pulse_index = s626_pulse_index_b, .set_mode = s626_set_mode_b, .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(5), @@ -2088,7 +2080,7 @@ static void s626_timer_load(struct comedi_device *dev, * into the counter */ s626_set_load_trig(dev, k, 0); - k->pulse_index(dev, k); + s626_pulse_index(dev, k); /* set reload on counter overflow */ s626_set_load_trig(dev, k, 1); @@ -2478,7 +2470,7 @@ static int s626_enc_insn_config(struct comedi_device *dev, k->set_mode(dev, k, setup, true); s626_preload(dev, k, data[0]); - k->pulse_index(dev, k); + s626_pulse_index(dev, k); s626_set_latch_source(dev, k, value_latchsrc); s626_set_enable(dev, k, (enab != 0)); @@ -2514,7 +2506,7 @@ static int s626_enc_insn_write(struct comedi_device *dev, * into the counter */ s626_set_load_trig(dev, k, 0); - k->pulse_index(dev, k); + s626_pulse_index(dev, k); s626_set_load_trig(dev, k, 2); return 1; -- cgit From 26499b8bce111f5c33329de3a5af68f6044bdcb2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:58 -0700 Subject: staging: comedi: s626: remove 'reset_cap_flags' callback from encoder private data There are two functions used for the 'reset_cap_flags' callback, One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Refactor the two callbacks into a single s626_reset_cap_flags() function and use the encoder channel number to handle the differences. Remove the then unnecessary 'reset_cap_flags' member and just call s626_reset_cap_flags() directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 45 +++++++++++++---------------------- 1 file changed, 17 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 4ec7ba1d3627..776868b16353 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -114,9 +114,6 @@ struct s626_enc_info { void (*set_mode)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t setup, uint16_t disable_int_src); - /* Reset event capture flags. */ - void (*reset_cap_flags)(struct comedi_device *dev, - const struct s626_enc_info *k); uint16_t my_event_bits[4]; /* bit translations for IntSrc -->RDMISC2 */ }; @@ -746,20 +743,18 @@ static void s626_preload(struct comedi_device *dev, /* * Reset a counter's index and overflow event capture flags. */ -static void s626_reset_cap_flags_a(struct comedi_device *dev, - const struct s626_enc_info *k) +static void s626_reset_cap_flags(struct comedi_device *dev, + const struct s626_enc_info *k) { - s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, - (S626_SET_CRB_INTRESETCMD(1) | - S626_SET_CRB_INTRESET_A(1))); -} + uint16_t set; -static void s626_reset_cap_flags_b(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, - (S626_SET_CRB_INTRESETCMD(1) | - S626_SET_CRB_INTRESET_B(1))); + set = S626_SET_CRB_INTRESETCMD(1); + if (k->chan < 3) + set |= S626_SET_CRB_INTRESET_A(1); + else + set |= S626_SET_CRB_INTRESET_B(1); + + s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, set); } /* @@ -1299,37 +1294,31 @@ static const struct s626_enc_info s626_enc_chan_info[] = { .chan = 0, .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, - .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(0), }, { .chan = 1, .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, - .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(1), }, { .chan = 2, .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, - .reset_cap_flags = s626_reset_cap_flags_a, .my_event_bits = S626_EVBITS(2), }, { .chan = 3, .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, - .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(3), }, { .chan = 4, .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, - .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(4), }, { .chan = 5, .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, - .reset_cap_flags = s626_reset_cap_flags_b, .my_event_bits = S626_EVBITS(5), }, }; @@ -1474,31 +1463,31 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) k = &s626_enc_chan_info[0]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); } if (irqbit & S626_IRQ_COINT2A) { k = &s626_enc_chan_info[1]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); } if (irqbit & S626_IRQ_COINT3A) { k = &s626_enc_chan_info[2]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); } if (irqbit & S626_IRQ_COINT1B) { k = &s626_enc_chan_info[3]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); } if (irqbit & S626_IRQ_COINT2B) { k = &s626_enc_chan_info[4]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); if (devpriv->ai_convert_count > 0) { devpriv->ai_convert_count--; @@ -1516,7 +1505,7 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) k = &s626_enc_chan_info[5]; /* clear interrupt capture flag */ - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); if (cmd->scan_begin_src == TRIG_TIMER) { /* Trigger ADC scan loop start */ @@ -2564,7 +2553,7 @@ static void s626_counters_init(struct comedi_device *dev) k = &s626_enc_chan_info[chan]; k->set_mode(dev, k, setup, true); s626_set_int_src(dev, k, 0); - k->reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, k); s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); } } -- cgit From 0a9844910c7dd5e6dfc630a69f7efc9ba261efcf Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:28:59 -0700 Subject: staging: comedi: s626: remove 'get_mode' callback from encoder private data There are two functions used for the 'get_mode' callback. One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Add a helper function, s626_get_mode(), that uses the encoder channel number to determine which function to call. Remove the then unnecessary 'get_mode' member from the encoder private data. The 'get_mode' callbacks were not being used by the driver in any of the enabled code. For now block the s626_get_mode() functions with '#ifdef unused' to prevent a compiler warning. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 40 ++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 776868b16353..348b28f92e42 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -107,9 +107,6 @@ struct s626_enc_info { int chan; /* Pointers to functions that differ for A and B counters: */ - /* Return standardized operating mode. */ - uint16_t (*get_mode)(struct comedi_device *dev, - const struct s626_enc_info *k); /* Program standardized operating mode. */ void (*set_mode)(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t setup, @@ -757,6 +754,7 @@ static void s626_reset_cap_flags(struct comedi_device *dev, s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, set); } +#ifdef unused /* * Return counter setup in a format (COUNTER_SETUP) that is consistent * for both A and B counters. @@ -876,6 +874,16 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev, return setup; } +static uint16_t s626_get_mode(struct comedi_device *dev, + const struct s626_enc_info *k) +{ + if (k->chan < 3) + return s626_get_mode_a(dev, k); + else + return s626_get_mode_b(dev, k); +} +#endif + /* * Set the operating mode for the specified counter. The setup * parameter is treated as a COUNTER_SETUP data type. The following @@ -1186,14 +1194,14 @@ static uint16_t s626_get_int_src(struct comedi_device *dev, static void s626_set_clk_mult(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | + k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | S626_SET_STD_CLKMULT(value)), false); } static uint16_t s626_get_clk_mult(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_STD_CLKMULT(k->get_mode(dev, k)); + return S626_GET_STD_CLKMULT(s626_get_mode(dev, k)); } /* @@ -1202,14 +1210,14 @@ static uint16_t s626_get_clk_mult(struct comedi_device *dev, static void s626_set_clk_pol(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | + k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | S626_SET_STD_CLKPOL(value)), false); } static uint16_t s626_get_clk_pol(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_STD_CLKPOL(k->get_mode(dev, k)); + return S626_GET_STD_CLKPOL(s626_get_mode(dev, k)); } /* @@ -1218,14 +1226,14 @@ static uint16_t s626_get_clk_pol(struct comedi_device *dev, static void s626_set_enc_mode(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | + k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | S626_SET_STD_ENCMODE(value)), false); } static uint16_t s626_get_enc_mode(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_STD_ENCMODE(k->get_mode(dev, k)); + return S626_GET_STD_ENCMODE(s626_get_mode(dev, k)); } /* @@ -1234,14 +1242,14 @@ static uint16_t s626_get_enc_mode(struct comedi_device *dev, static void s626_set_index_pol(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | + k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | S626_SET_STD_INDXPOL(value != 0)), false); } static uint16_t s626_get_index_pol(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_STD_INDXPOL(k->get_mode(dev, k)); + return S626_GET_STD_INDXPOL(s626_get_mode(dev, k)); } /* @@ -1250,14 +1258,14 @@ static uint16_t s626_get_index_pol(struct comedi_device *dev, static void s626_set_index_src(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | + k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | S626_SET_STD_INDXSRC(value != 0)), false); } static uint16_t s626_get_index_src(struct comedi_device *dev, const struct s626_enc_info *k) { - return S626_GET_STD_INDXSRC(k->get_mode(dev, k)); + return S626_GET_STD_INDXSRC(s626_get_mode(dev, k)); } #endif @@ -1292,32 +1300,26 @@ static void s626_pulse_index(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, - .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(0), }, { .chan = 1, - .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(1), }, { .chan = 2, - .get_mode = s626_get_mode_a, .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(2), }, { .chan = 3, - .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(3), }, { .chan = 4, - .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(4), }, { .chan = 5, - .get_mode = s626_get_mode_b, .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(5), }, -- cgit From b35d6a38be9a5454e946ffea42cef92f25ca10de Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:29:00 -0700 Subject: staging: comedi: s626: remove 'set_mode' callback from encoder private data There are two functions used for the 'set_mode' callback. One is used for the channel 0-2 encoders and the other for the channel 3-5 encoders. Add a helper function, s626_set_mode(), that uses the encoder channel number to determine which function to call. Remove the then unnecessary 'set_mode' member and just call s626_set_mode() directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 48 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 348b28f92e42..6a322e39d5fa 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -106,12 +106,6 @@ struct s626_private { struct s626_enc_info { int chan; - /* Pointers to functions that differ for A and B counters: */ - /* Program standardized operating mode. */ - void (*set_mode)(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t setup, - uint16_t disable_int_src); - uint16_t my_event_bits[4]; /* bit translations for IntSrc -->RDMISC2 */ }; @@ -1051,6 +1045,16 @@ static void s626_set_mode_b(struct comedi_device *dev, S626_CRBMSK_CLKENAB_A | S626_CRBMSK_LATCHSRC, crb); } +static void s626_set_mode(struct comedi_device *dev, + const struct s626_enc_info *k, + uint16_t setup, uint16_t disable_int_src) +{ + if (k->chan < 3) + s626_set_mode_a(dev, k, setup, disable_int_src); + else + s626_set_mode_b(dev, k, setup, disable_int_src); +} + /* * Return/set a counter's enable. enab: 0=always enabled, 1=enabled by index. */ @@ -1194,8 +1198,8 @@ static uint16_t s626_get_int_src(struct comedi_device *dev, static void s626_set_clk_mult(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | - S626_SET_STD_CLKMULT(value)), false); + s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | + S626_SET_STD_CLKMULT(value)), false); } static uint16_t s626_get_clk_mult(struct comedi_device *dev, @@ -1210,8 +1214,8 @@ static uint16_t s626_get_clk_mult(struct comedi_device *dev, static void s626_set_clk_pol(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | - S626_SET_STD_CLKPOL(value)), false); + s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | + S626_SET_STD_CLKPOL(value)), false); } static uint16_t s626_get_clk_pol(struct comedi_device *dev, @@ -1226,8 +1230,8 @@ static uint16_t s626_get_clk_pol(struct comedi_device *dev, static void s626_set_enc_mode(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | - S626_SET_STD_ENCMODE(value)), false); + s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | + S626_SET_STD_ENCMODE(value)), false); } static uint16_t s626_get_enc_mode(struct comedi_device *dev, @@ -1242,8 +1246,8 @@ static uint16_t s626_get_enc_mode(struct comedi_device *dev, static void s626_set_index_pol(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | - S626_SET_STD_INDXPOL(value != 0)), false); + s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | + S626_SET_STD_INDXPOL(value != 0)), false); } static uint16_t s626_get_index_pol(struct comedi_device *dev, @@ -1258,8 +1262,8 @@ static uint16_t s626_get_index_pol(struct comedi_device *dev, static void s626_set_index_src(struct comedi_device *dev, const struct s626_enc_info *k, uint16_t value) { - k->set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | - S626_SET_STD_INDXSRC(value != 0)), false); + s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | + S626_SET_STD_INDXSRC(value != 0)), false); } static uint16_t s626_get_index_src(struct comedi_device *dev, @@ -1300,27 +1304,21 @@ static void s626_pulse_index(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, - .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(0), }, { .chan = 1, - .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(1), }, { .chan = 2, - .set_mode = s626_set_mode_a, .my_event_bits = S626_EVBITS(2), }, { .chan = 3, - .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(3), }, { .chan = 4, - .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(4), }, { .chan = 5, - .set_mode = s626_set_mode_b, .my_event_bits = S626_EVBITS(5), }, }; @@ -2061,7 +2059,7 @@ static void s626_timer_load(struct comedi_device *dev, uint16_t value_latchsrc = S626_LATCHSRC_A_INDXA; /* uint16_t enab = S626_CLKENAB_ALWAYS; */ - k->set_mode(dev, k, setup, false); + s626_set_mode(dev, k, setup, false); /* Set the preload register */ s626_preload(dev, k, tick); @@ -2459,7 +2457,7 @@ static int s626_enc_insn_config(struct comedi_device *dev, /* (data==NULL) ? (Preloadvalue=0) : (Preloadvalue=data[0]); */ - k->set_mode(dev, k, setup, true); + s626_set_mode(dev, k, setup, true); s626_preload(dev, k, data[0]); s626_pulse_index(dev, k); s626_set_latch_source(dev, k, value_latchsrc); @@ -2553,7 +2551,7 @@ static void s626_counters_init(struct comedi_device *dev) */ for (chan = 0; chan < S626_ENCODER_CHANNELS; chan++) { k = &s626_enc_chan_info[chan]; - k->set_mode(dev, k, setup, true); + s626_set_mode(dev, k, setup, true); s626_set_int_src(dev, k, 0); s626_reset_cap_flags(dev, k); s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); -- cgit From f76d02f81f82b92831f54eaaccabf8608040d493 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:29:01 -0700 Subject: staging: comedi: s626: remove 'my_event_bits' from encoder private data This array in the encoder private data just makes the driver harder to follow. The S626_EVBITS() macro is used to initialize the member in the declaration. This macro creates a array of four values, based on the encoder channel, that are used to mask and set the private data 'counter_int_enabs' member. The values are created using the S626_OVERMASK() and S626_INDXMASK() macros using the encoder channel number. Remove the 'my_event_bits' member from the encoder private data as well as the S626_EVBITS() macro. Refactor the code to use the S626_OVERMASK() and S626_INDXMASK() macros directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 6a322e39d5fa..13dac54af003 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -105,22 +105,11 @@ struct s626_private { /* COUNTER OBJECT ------------------------------------------------ */ struct s626_enc_info { int chan; - - uint16_t my_event_bits[4]; /* bit translations for IntSrc -->RDMISC2 */ }; /* Counter overflow/index event flag masks for RDMISC2. */ #define S626_INDXMASK(C) (1 << (((C) > 2) ? ((C) * 2 - 1) : ((C) * 2 + 4))) #define S626_OVERMASK(C) (1 << (((C) > 2) ? ((C) * 2 + 5) : ((C) * 2 + 10))) -#define S626_EVBITS(C) { 0, S626_OVERMASK(C), S626_INDXMASK(C), \ - S626_OVERMASK(C) | S626_INDXMASK(C) } - -/* - * Translation table to map IntSrc into equivalent RDMISC2 event flag bits. - * static const uint16_t s626_event_bits[][4] = - * { S626_EVBITS(0), S626_EVBITS(1), S626_EVBITS(2), S626_EVBITS(3), - * S626_EVBITS(4), S626_EVBITS(5) }; - */ /* * Enable/disable a function or test status bit(s) that are accessed @@ -949,7 +938,8 @@ static void s626_set_mode_a(struct comedi_device *dev, * enable mask to indicate the counter interrupt is disabled. */ if (disable_int_src) - devpriv->counter_int_enabs &= ~k->my_event_bits[3]; + devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | + S626_INDXMASK(k->chan)); /* * While retaining CounterB and LatchSrc configurations, program the @@ -1033,7 +1023,8 @@ static void s626_set_mode_b(struct comedi_device *dev, * enable mask to indicate the counter interrupt is disabled. */ if (disable_int_src) - devpriv->counter_int_enabs &= ~k->my_event_bits[3]; + devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | + S626_INDXMASK(k->chan)); /* * While retaining CounterA and LatchSrc configurations, program the @@ -1174,8 +1165,23 @@ static void s626_set_int_src(struct comedi_device *dev, } /* Update MISC2 interrupt enable mask. */ - devpriv->counter_int_enabs &= ~k->my_event_bits[3]; - devpriv->counter_int_enabs |= k->my_event_bits[int_source]; + devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | + S626_INDXMASK(k->chan)); + switch (int_source) { + case 0: + default: + break; + case 1: + devpriv->counter_int_enabs |= S626_OVERMASK(k->chan); + break; + case 2: + devpriv->counter_int_enabs |= S626_INDXMASK(k->chan); + break; + case 3: + devpriv->counter_int_enabs |= (S626_OVERMASK(k->chan) | + S626_INDXMASK(k->chan)); + break; + } } #ifdef unused @@ -1304,22 +1310,16 @@ static void s626_pulse_index(struct comedi_device *dev, static const struct s626_enc_info s626_enc_chan_info[] = { { .chan = 0, - .my_event_bits = S626_EVBITS(0), }, { .chan = 1, - .my_event_bits = S626_EVBITS(1), }, { .chan = 2, - .my_event_bits = S626_EVBITS(2), }, { .chan = 3, - .my_event_bits = S626_EVBITS(3), }, { .chan = 4, - .my_event_bits = S626_EVBITS(4), }, { .chan = 5, - .my_event_bits = S626_EVBITS(5), }, }; -- cgit From 81202ecffc4fe1afbc2ca57cd6fe36fefa69acba Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:29:02 -0700 Subject: staging: comedi: s626: tidy up s626_enc_insn_read() Abosorb the s626_read_latch() helper and tidy up this function. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 43 ++++++++++++++--------------------- 1 file changed, 17 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 13dac54af003..6e2cab0086e9 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -676,25 +676,6 @@ static int s626_load_trim_dacs(struct comedi_device *dev) * 2=2A, 3=0B, 4=1B, 5=2B. */ -/* - * Read a counter's output latch. - */ -static uint32_t s626_read_latch(struct comedi_device *dev, - const struct s626_enc_info *k) -{ - uint32_t value; - - /* Latch counts and fetch LSW of latched counts value. */ - value = s626_debi_read(dev, S626_LP_CNTR(k->chan)); - - /* Fetch MSW of latched counts and combine with LSW. */ - value |= ((uint32_t)s626_debi_read(dev, - S626_LP_CNTR(k->chan) + 2) << 16); - - /* Return latched counts. */ - return value; -} - /* * Return/set a counter pair's latch trigger source. 0: On read * access, 1: A index latches A, 2: B index latches B, 3: A overflow @@ -2468,16 +2449,26 @@ static int s626_enc_insn_config(struct comedi_device *dev, static int s626_enc_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - int n; - const struct s626_enc_info *k = - &s626_enc_chan_info[CR_CHAN(insn->chanspec)]; + unsigned int chan = CR_CHAN(insn->chanspec); + uint16_t cntr_latch_reg = S626_LP_CNTR(chan); + int i; - for (n = 0; n < insn->n; n++) - data[n] = s626_read_latch(dev, k); + for (i = 0; i < insn->n; i++) { + unsigned int val; - return n; + /* + * Read the counter's output latch LSW/MSW. + * Latches on LSW read. + */ + val = s626_debi_read(dev, cntr_latch_reg); + val |= (s626_debi_read(dev, cntr_latch_reg + 2) << 16); + data[i] = val; + } + + return insn->n; } static int s626_enc_insn_write(struct comedi_device *dev, -- cgit From 0c9a057cebe4fbcd4be87d1f5a722113a4ba8d49 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 13:29:03 -0700 Subject: staging: comedi: s626: remove struct s626_enc_info The only member left in this struct is the 'chan' which is the comedi channel of the encoder. Remove the struct and refactor the code to pass/use the comedi channel instead. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 334 ++++++++++++++++------------------ 1 file changed, 156 insertions(+), 178 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 6e2cab0086e9..9da68225469e 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -102,11 +102,6 @@ struct s626_private { unsigned int ao_readback[S626_DAC_CHANNELS]; }; -/* COUNTER OBJECT ------------------------------------------------ */ -struct s626_enc_info { - int chan; -}; - /* Counter overflow/index event flag masks for RDMISC2. */ #define S626_INDXMASK(C) (1 << (((C) > 2) ? ((C) * 2 - 1) : ((C) * 2 + 4))) #define S626_OVERMASK(C) (1 << (((C) > 2) ? ((C) * 2 + 5) : ((C) * 2 + 10))) @@ -682,9 +677,9 @@ static int s626_load_trim_dacs(struct comedi_device *dev) * latches B. */ static void s626_set_latch_source(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_debi_replace(dev, S626_LP_CRB(k->chan), + s626_debi_replace(dev, S626_LP_CRB(chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_LATCHSRC), S626_SET_CRB_LATCHSRC(value)); } @@ -693,10 +688,10 @@ static void s626_set_latch_source(struct comedi_device *dev, * Write value into counter preload register. */ static void s626_preload(struct comedi_device *dev, - const struct s626_enc_info *k, uint32_t value) + unsigned int chan, uint32_t value) { - s626_debi_write(dev, S626_LP_CNTR(k->chan), value); - s626_debi_write(dev, S626_LP_CNTR(k->chan) + 2, value >> 16); + s626_debi_write(dev, S626_LP_CNTR(chan), value); + s626_debi_write(dev, S626_LP_CNTR(chan) + 2, value >> 16); } /* ****** PRIVATE COUNTER FUNCTIONS ****** */ @@ -705,17 +700,17 @@ static void s626_preload(struct comedi_device *dev, * Reset a counter's index and overflow event capture flags. */ static void s626_reset_cap_flags(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { uint16_t set; set = S626_SET_CRB_INTRESETCMD(1); - if (k->chan < 3) + if (chan < 3) set |= S626_SET_CRB_INTRESET_A(1); else set |= S626_SET_CRB_INTRESET_B(1); - s626_debi_replace(dev, S626_LP_CRB(k->chan), ~S626_CRBMSK_INTCTRL, set); + s626_debi_replace(dev, S626_LP_CRB(chan), ~S626_CRBMSK_INTCTRL, set); } #ifdef unused @@ -724,7 +719,7 @@ static void s626_reset_cap_flags(struct comedi_device *dev, * for both A and B counters. */ static uint16_t s626_get_mode_a(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { uint16_t cra; uint16_t crb; @@ -732,8 +727,8 @@ static uint16_t s626_get_mode_a(struct comedi_device *dev, unsigned cntsrc, clkmult, clkpol, encmode; /* Fetch CRA and CRB register images. */ - cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); - crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); + cra = s626_debi_read(dev, S626_LP_CRA(chan)); + crb = s626_debi_read(dev, S626_LP_CRB(chan)); /* * Populate the standardized counter setup bit fields. @@ -779,7 +774,7 @@ static uint16_t s626_get_mode_a(struct comedi_device *dev, } static uint16_t s626_get_mode_b(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { uint16_t cra; uint16_t crb; @@ -787,8 +782,8 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev, unsigned cntsrc, clkmult, clkpol, encmode; /* Fetch CRA and CRB register images. */ - cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); - crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); + cra = s626_debi_read(dev, S626_LP_CRA(chan)); + crb = s626_debi_read(dev, S626_LP_CRB(chan)); /* * Populate the standardized counter setup bit fields. @@ -839,12 +834,12 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev, } static uint16_t s626_get_mode(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - if (k->chan < 3) - return s626_get_mode_a(dev, k); + if (chan < 3) + return s626_get_mode_a(dev, chan); else - return s626_get_mode_b(dev, k); + return s626_get_mode_b(dev, chan); } #endif @@ -855,7 +850,7 @@ static uint16_t s626_get_mode(struct comedi_device *dev, * ClkPol, ClkEnab, IndexSrc, IndexPol, LoadSrc. */ static void s626_set_mode_a(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t setup, + unsigned int chan, uint16_t setup, uint16_t disable_int_src) { struct s626_private *devpriv = dev->private; @@ -919,21 +914,21 @@ static void s626_set_mode_a(struct comedi_device *dev, * enable mask to indicate the counter interrupt is disabled. */ if (disable_int_src) - devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | - S626_INDXMASK(k->chan)); + devpriv->counter_int_enabs &= ~(S626_OVERMASK(chan) | + S626_INDXMASK(chan)); /* * While retaining CounterB and LatchSrc configurations, program the * new counter operating mode. */ - s626_debi_replace(dev, S626_LP_CRA(k->chan), + s626_debi_replace(dev, S626_LP_CRA(chan), S626_CRAMSK_INDXSRC_B | S626_CRAMSK_CNTSRC_B, cra); - s626_debi_replace(dev, S626_LP_CRB(k->chan), + s626_debi_replace(dev, S626_LP_CRB(chan), ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A), crb); } static void s626_set_mode_b(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t setup, + unsigned int chan, uint16_t setup, uint16_t disable_int_src) { struct s626_private *devpriv = dev->private; @@ -1004,55 +999,55 @@ static void s626_set_mode_b(struct comedi_device *dev, * enable mask to indicate the counter interrupt is disabled. */ if (disable_int_src) - devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | - S626_INDXMASK(k->chan)); + devpriv->counter_int_enabs &= ~(S626_OVERMASK(chan) | + S626_INDXMASK(chan)); /* * While retaining CounterA and LatchSrc configurations, program the * new counter operating mode. */ - s626_debi_replace(dev, S626_LP_CRA(k->chan), + s626_debi_replace(dev, S626_LP_CRA(chan), ~(S626_CRAMSK_INDXSRC_B | S626_CRAMSK_CNTSRC_B), cra); - s626_debi_replace(dev, S626_LP_CRB(k->chan), + s626_debi_replace(dev, S626_LP_CRB(chan), S626_CRBMSK_CLKENAB_A | S626_CRBMSK_LATCHSRC, crb); } static void s626_set_mode(struct comedi_device *dev, - const struct s626_enc_info *k, + unsigned int chan, uint16_t setup, uint16_t disable_int_src) { - if (k->chan < 3) - s626_set_mode_a(dev, k, setup, disable_int_src); + if (chan < 3) + s626_set_mode_a(dev, chan, setup, disable_int_src); else - s626_set_mode_b(dev, k, setup, disable_int_src); + s626_set_mode_b(dev, chan, setup, disable_int_src); } /* * Return/set a counter's enable. enab: 0=always enabled, 1=enabled by index. */ static void s626_set_enable(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t enab) + unsigned int chan, uint16_t enab) { unsigned int mask = S626_CRBMSK_INTCTRL; unsigned int set; - if (k->chan < 3) { + if (chan < 3) { mask |= S626_CRBMSK_CLKENAB_A; set = S626_SET_CRB_CLKENAB_A(enab); } else { mask |= S626_CRBMSK_CLKENAB_B; set = S626_SET_CRB_CLKENAB_B(enab); } - s626_debi_replace(dev, S626_LP_CRB(k->chan), ~mask, set); + s626_debi_replace(dev, S626_LP_CRB(chan), ~mask, set); } #ifdef unused static uint16_t s626_get_enable(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - uint16_t crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); + uint16_t crb = s626_debi_read(dev, S626_LP_CRB(chan)); - if (k->chan < 3) + if (chan < 3) return S626_GET_CRB_CLKENAB_A(crb); else return S626_GET_CRB_CLKENAB_B(crb); @@ -1061,10 +1056,9 @@ static uint16_t s626_get_enable(struct comedi_device *dev, #ifdef unused static uint16_t s626_get_latch_source(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_CRB_LATCHSRC(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + return S626_GET_CRB_LATCHSRC(s626_debi_read(dev, S626_LP_CRB(chan))); } #endif @@ -1074,18 +1068,18 @@ static uint16_t s626_get_latch_source(struct comedi_device *dev, * 2=OverflowA (B counters only), 3=disabled. */ static void s626_set_load_trig(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t trig) + unsigned int chan, uint16_t trig) { uint16_t reg; uint16_t mask; uint16_t set; - if (k->chan < 3) { - reg = S626_LP_CRA(k->chan); + if (chan < 3) { + reg = S626_LP_CRA(chan); mask = S626_CRAMSK_LOADSRC_A; set = S626_SET_CRA_LOADSRC_A(trig); } else { - reg = S626_LP_CRB(k->chan); + reg = S626_LP_CRB(chan); mask = S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL; set = S626_SET_CRB_LOADSRC_B(trig); } @@ -1094,14 +1088,14 @@ static void s626_set_load_trig(struct comedi_device *dev, #ifdef unused static uint16_t s626_get_load_trig(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - if (k->chan < 3) + if (chan < 3) return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, - S626_LP_CRA(k->chan))); + S626_LP_CRA(chan))); else return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + S626_LP_CRB(chan))); } #endif @@ -1111,14 +1105,13 @@ static uint16_t s626_get_load_trig(struct comedi_device *dev, * 2=IndexOnly, 3=IndexAndOverflow. */ static void s626_set_int_src(struct comedi_device *dev, - const struct s626_enc_info *k, - uint16_t int_source) + unsigned int chan, uint16_t int_source) { struct s626_private *devpriv = dev->private; - uint16_t cra_reg = S626_LP_CRA(k->chan); - uint16_t crb_reg = S626_LP_CRB(k->chan); + uint16_t cra_reg = S626_LP_CRA(chan); + uint16_t crb_reg = S626_LP_CRB(chan); - if (k->chan < 3) { + if (chan < 3) { /* Reset any pending counter overflow or index captures */ s626_debi_replace(dev, crb_reg, ~S626_CRBMSK_INTCTRL, S626_SET_CRB_INTRESETCMD(1) | @@ -1146,35 +1139,35 @@ static void s626_set_int_src(struct comedi_device *dev, } /* Update MISC2 interrupt enable mask. */ - devpriv->counter_int_enabs &= ~(S626_OVERMASK(k->chan) | - S626_INDXMASK(k->chan)); + devpriv->counter_int_enabs &= ~(S626_OVERMASK(chan) | + S626_INDXMASK(chan)); switch (int_source) { case 0: default: break; case 1: - devpriv->counter_int_enabs |= S626_OVERMASK(k->chan); + devpriv->counter_int_enabs |= S626_OVERMASK(chan); break; case 2: - devpriv->counter_int_enabs |= S626_INDXMASK(k->chan); + devpriv->counter_int_enabs |= S626_INDXMASK(chan); break; case 3: - devpriv->counter_int_enabs |= (S626_OVERMASK(k->chan) | - S626_INDXMASK(k->chan)); + devpriv->counter_int_enabs |= (S626_OVERMASK(chan) | + S626_INDXMASK(chan)); break; } } #ifdef unused static uint16_t s626_get_int_src(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { if (chan < 3) return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, - S626_LP_CRA(k->chan))); + S626_LP_CRA(chan))); else return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, - S626_LP_CRB(k->chan))); + S626_LP_CRB(chan))); } #endif @@ -1183,80 +1176,105 @@ static uint16_t s626_get_int_src(struct comedi_device *dev, * Return/set the clock multiplier. */ static void s626_set_clk_mult(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | - S626_SET_STD_CLKMULT(value)), false); + uint16_t mode; + + mode = s626_get_mode(dev, chan); + mode &= ~S626_STDMSK_CLKMULT; + mode |= S626_SET_STD_CLKMULT(value); + + s626_set_mode(dev, chan, mode, false); } static uint16_t s626_get_clk_mult(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_STD_CLKMULT(s626_get_mode(dev, k)); + return S626_GET_STD_CLKMULT(s626_get_mode(dev, chan)); } /* * Return/set the clock polarity. */ static void s626_set_clk_pol(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | - S626_SET_STD_CLKPOL(value)), false); + uint16_t mode; + + mode = s626_get_mode(dev, chan); + mode &= ~S626_STDMSK_CLKPOL; + mode |= S626_SET_STD_CLKPOL(value); + + s626_set_mode(dev, chan, mode, false); } static uint16_t s626_get_clk_pol(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_STD_CLKPOL(s626_get_mode(dev, k)); + return S626_GET_STD_CLKPOL(s626_get_mode(dev, chan)); } /* * Return/set the encoder mode. */ static void s626_set_enc_mode(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | - S626_SET_STD_ENCMODE(value)), false); + uint16_t mode; + + mode = s626_get_mode(dev, chan); + mode &= ~S626_STDMSK_ENCMODE; + mode |= S626_SET_STD_ENCMODE(value); + + s626_set_mode(dev, chan, mode, false); } static uint16_t s626_get_enc_mode(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_STD_ENCMODE(s626_get_mode(dev, k)); + return S626_GET_STD_ENCMODE(s626_get_mode(dev, chan)); } /* * Return/set the index polarity. */ static void s626_set_index_pol(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | - S626_SET_STD_INDXPOL(value != 0)), false); + uint16_t mode; + + mode = s626_get_mode(dev, chan); + mode &= ~S626_STDMSK_INDXPOL; + mode |= S626_SET_STD_INDXPOL(value != 0); + + s626_set_mode(dev, chan, mode, false); } static uint16_t s626_get_index_pol(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_STD_INDXPOL(s626_get_mode(dev, k)); + return S626_GET_STD_INDXPOL(s626_get_mode(dev, chan)); } /* * Return/set the index source. */ static void s626_set_index_src(struct comedi_device *dev, - const struct s626_enc_info *k, uint16_t value) + unsigned int chan, uint16_t value) { - s626_set_mode(dev, k, ((s626_get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | - S626_SET_STD_INDXSRC(value != 0)), false); + uint16_t mode; + + mode = s626_get_mode(dev, chan); + mode &= ~S626_STDMSK_INDXSRC; + mode |= S626_SET_STD_INDXSRC(value != 0); + + s626_set_mode(dev, chan, mode, false); } static uint16_t s626_get_index_src(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - return S626_GET_STD_INDXSRC(s626_get_mode(dev, k)); + return S626_GET_STD_INDXSRC(s626_get_mode(dev, chan)); } #endif @@ -1264,46 +1282,30 @@ static uint16_t s626_get_index_src(struct comedi_device *dev, * Generate an index pulse. */ static void s626_pulse_index(struct comedi_device *dev, - const struct s626_enc_info *k) + unsigned int chan) { - if (k->chan < 3) { + if (chan < 3) { uint16_t cra; - cra = s626_debi_read(dev, S626_LP_CRA(k->chan)); + cra = s626_debi_read(dev, S626_LP_CRA(chan)); /* Pulse index */ - s626_debi_write(dev, S626_LP_CRA(k->chan), + s626_debi_write(dev, S626_LP_CRA(chan), (cra ^ S626_CRAMSK_INDXPOL_A)); - s626_debi_write(dev, S626_LP_CRA(k->chan), cra); + s626_debi_write(dev, S626_LP_CRA(chan), cra); } else { uint16_t crb; - crb = s626_debi_read(dev, S626_LP_CRB(k->chan)); + crb = s626_debi_read(dev, S626_LP_CRB(chan)); crb &= ~S626_CRBMSK_INTCTRL; /* Pulse index */ - s626_debi_write(dev, S626_LP_CRB(k->chan), + s626_debi_write(dev, S626_LP_CRB(chan), (crb ^ S626_CRBMSK_INDXPOL_B)); - s626_debi_write(dev, S626_LP_CRB(k->chan), crb); + s626_debi_write(dev, S626_LP_CRB(chan), crb); } } -static const struct s626_enc_info s626_enc_chan_info[] = { - { - .chan = 0, - }, { - .chan = 1, - }, { - .chan = 2, - }, { - .chan = 3, - }, { - .chan = 4, - }, { - .chan = 5, - }, -}; - static unsigned int s626_ai_reg_to_uint(unsigned int data) { return ((data >> 18) & 0x3fff) ^ 0x2000; @@ -1390,11 +1392,8 @@ static void s626_handle_dio_interrupt(struct comedi_device *dev, } if (cmd->convert_src == TRIG_TIMER) { - const struct s626_enc_info *k = - &s626_enc_chan_info[5]; - devpriv->ai_convert_count = cmd->chanlist_len; - s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, 5, S626_CLKENAB_ALWAYS); } } if ((irqbit >> (cmd->convert_arg - (16 * group))) == 1 && @@ -1433,7 +1432,6 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) struct comedi_subdevice *s = dev->read_subdev; struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; - const struct s626_enc_info *k; uint16_t irqbit; /* read interrupt type */ @@ -1441,39 +1439,29 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) /* check interrupt on counters */ if (irqbit & S626_IRQ_COINT1A) { - k = &s626_enc_chan_info[0]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 0); } if (irqbit & S626_IRQ_COINT2A) { - k = &s626_enc_chan_info[1]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 1); } if (irqbit & S626_IRQ_COINT3A) { - k = &s626_enc_chan_info[2]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 2); } if (irqbit & S626_IRQ_COINT1B) { - k = &s626_enc_chan_info[3]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 3); } if (irqbit & S626_IRQ_COINT2B) { - k = &s626_enc_chan_info[4]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 4); if (devpriv->ai_convert_count > 0) { devpriv->ai_convert_count--; if (devpriv->ai_convert_count == 0) - s626_set_enable(dev, k, S626_CLKENAB_INDEX); + s626_set_enable(dev, 4, S626_CLKENAB_INDEX); if (cmd->convert_src == TRIG_TIMER) { /* Trigger ADC scan loop start */ @@ -1483,10 +1471,8 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) } } if (irqbit & S626_IRQ_COINT3B) { - k = &s626_enc_chan_info[5]; - /* clear interrupt capture flag */ - s626_reset_cap_flags(dev, k); + s626_reset_cap_flags(dev, 5); if (cmd->scan_begin_src == TRIG_TIMER) { /* Trigger ADC scan loop start */ @@ -1494,9 +1480,8 @@ static void s626_check_counter_interrupts(struct comedi_device *dev) } if (cmd->convert_src == TRIG_TIMER) { - k = &s626_enc_chan_info[4]; devpriv->ai_convert_count = cmd->chanlist_len; - s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_enable(dev, 4, S626_CLKENAB_ALWAYS); } } } @@ -2022,7 +2007,7 @@ static int s626_ns_to_timer(unsigned int *nanosec, int round_mode) } static void s626_timer_load(struct comedi_device *dev, - const struct s626_enc_info *k, int tick) + unsigned int chan, int tick) { uint16_t setup = /* Preload upon index. */ @@ -2040,26 +2025,26 @@ static void s626_timer_load(struct comedi_device *dev, uint16_t value_latchsrc = S626_LATCHSRC_A_INDXA; /* uint16_t enab = S626_CLKENAB_ALWAYS; */ - s626_set_mode(dev, k, setup, false); + s626_set_mode(dev, chan, setup, false); /* Set the preload register */ - s626_preload(dev, k, tick); + s626_preload(dev, chan, tick); /* * Software index pulse forces the preload register to load * into the counter */ - s626_set_load_trig(dev, k, 0); - s626_pulse_index(dev, k); + s626_set_load_trig(dev, chan, 0); + s626_pulse_index(dev, chan); /* set reload on counter overflow */ - s626_set_load_trig(dev, k, 1); + s626_set_load_trig(dev, chan, 1); /* set interrupt on overflow */ - s626_set_int_src(dev, k, S626_INTSRC_OVER); + s626_set_int_src(dev, chan, S626_INTSRC_OVER); - s626_set_latch_source(dev, k, value_latchsrc); - /* s626_set_enable(dev, k, (uint16_t)(enab != 0)); */ + s626_set_latch_source(dev, chan, value_latchsrc); + /* s626_set_enable(dev, chan, (uint16_t)(enab != 0)); */ } /* TO COMPLETE */ @@ -2068,7 +2053,6 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) struct s626_private *devpriv = dev->private; uint8_t ppl[16]; struct comedi_cmd *cmd = &s->async->cmd; - const struct s626_enc_info *k; int tick; if (devpriv->ai_cmd_running) { @@ -2105,13 +2089,12 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * set a counter to generate adc trigger at scan_begin_arg * interval */ - k = &s626_enc_chan_info[5]; tick = s626_ns_to_timer(&cmd->scan_begin_arg, cmd->flags & TRIG_ROUND_MASK); /* load timer value and enable interrupt */ - s626_timer_load(dev, k, tick); - s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_timer_load(dev, 5, tick); + s626_set_enable(dev, 5, S626_CLKENAB_ALWAYS); break; case TRIG_EXT: /* set the digital line and interrupt for scan trigger */ @@ -2128,13 +2111,12 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * set a counter to generate adc trigger at convert_arg * interval */ - k = &s626_enc_chan_info[4]; tick = s626_ns_to_timer(&cmd->convert_arg, cmd->flags & TRIG_ROUND_MASK); /* load timer value and enable interrupt */ - s626_timer_load(dev, k, tick); - s626_set_enable(dev, k, S626_CLKENAB_INDEX); + s626_timer_load(dev, 4, tick); + s626_set_enable(dev, 4, S626_CLKENAB_INDEX); break; case TRIG_EXT: /* set the digital line and interrupt for convert trigger */ @@ -2416,6 +2398,7 @@ static int s626_enc_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { + unsigned int chan = CR_CHAN(insn->chanspec); uint16_t setup = /* Preload upon index. */ S626_SET_STD_LOADSRC(S626_LOADSRC_INDX) | @@ -2433,16 +2416,14 @@ static int s626_enc_insn_config(struct comedi_device *dev, /* uint32_t Preloadvalue; //Counter initial value */ uint16_t value_latchsrc = S626_LATCHSRC_AB_READ; uint16_t enab = S626_CLKENAB_ALWAYS; - const struct s626_enc_info *k = - &s626_enc_chan_info[CR_CHAN(insn->chanspec)]; /* (data==NULL) ? (Preloadvalue=0) : (Preloadvalue=data[0]); */ - s626_set_mode(dev, k, setup, true); - s626_preload(dev, k, data[0]); - s626_pulse_index(dev, k); - s626_set_latch_source(dev, k, value_latchsrc); - s626_set_enable(dev, k, (enab != 0)); + s626_set_mode(dev, chan, setup, true); + s626_preload(dev, chan, data[0]); + s626_pulse_index(dev, chan); + s626_set_latch_source(dev, chan, value_latchsrc); + s626_set_enable(dev, chan, (enab != 0)); return insn->n; } @@ -2475,19 +2456,18 @@ static int s626_enc_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - const struct s626_enc_info *k = - &s626_enc_chan_info[CR_CHAN(insn->chanspec)]; + unsigned int chan = CR_CHAN(insn->chanspec); /* Set the preload register */ - s626_preload(dev, k, data[0]); + s626_preload(dev, chan, data[0]); /* * Software index pulse forces the preload register to load * into the counter */ - s626_set_load_trig(dev, k, 0); - s626_pulse_index(dev, k); - s626_set_load_trig(dev, k, 2); + s626_set_load_trig(dev, chan, 0); + s626_pulse_index(dev, chan); + s626_set_load_trig(dev, chan, 2); return 1; } @@ -2522,7 +2502,6 @@ static void s626_close_dma_b(struct comedi_device *dev, static void s626_counters_init(struct comedi_device *dev) { int chan; - const struct s626_enc_info *k; uint16_t setup = /* Preload upon index. */ S626_SET_STD_LOADSRC(S626_LOADSRC_INDX) | @@ -2541,11 +2520,10 @@ static void s626_counters_init(struct comedi_device *dev) * Disable all counter interrupts and clear any captured counter events. */ for (chan = 0; chan < S626_ENCODER_CHANNELS; chan++) { - k = &s626_enc_chan_info[chan]; - s626_set_mode(dev, k, setup, true); - s626_set_int_src(dev, k, 0); - s626_reset_cap_flags(dev, k); - s626_set_enable(dev, k, S626_CLKENAB_ALWAYS); + s626_set_mode(dev, chan, setup, true); + s626_set_int_src(dev, chan, 0); + s626_reset_cap_flags(dev, chan); + s626_set_enable(dev, chan, S626_CLKENAB_ALWAYS); } } -- cgit From 5573e4f6150dd528cbdaf372afac1f01baf27983 Mon Sep 17 00:00:00 2001 From: Paul Bolle Date: Thu, 26 Jun 2014 10:54:08 +0200 Subject: staging: unisys: remove unused macros The macros CONFIG_SPAR_GUEST, GUESTDRIVERBUILD, and NOAUTOVERSION are defined in Makefiles for the Unisys SPAR driver. They are never used. Remove the lines that define these macros. Signed-off-by: Paul Bolle Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/channels/Makefile | 2 -- drivers/staging/unisys/uislib/Makefile | 3 --- drivers/staging/unisys/virthba/Makefile | 3 --- drivers/staging/unisys/virtpci/Makefile | 3 --- drivers/staging/unisys/visorchannel/Makefile | 2 -- drivers/staging/unisys/visorchipset/Makefile | 2 -- drivers/staging/unisys/visorutil/Makefile | 1 - 7 files changed, 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/channels/Makefile b/drivers/staging/unisys/channels/Makefile index e60b0aef4dcd..adc184206035 100644 --- a/drivers/staging/unisys/channels/Makefile +++ b/drivers/staging/unisys/channels/Makefile @@ -9,5 +9,3 @@ visorchannelstub-y := channel.o chanstub.o ccflags-y += -Idrivers/staging/unisys/include ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/uislib/Makefile b/drivers/staging/unisys/uislib/Makefile index 6e44d49458f5..08e620d17497 100644 --- a/drivers/staging/unisys/uislib/Makefile +++ b/drivers/staging/unisys/uislib/Makefile @@ -12,6 +12,3 @@ ccflags-y += -Idrivers/staging/unisys/visorchipset ccflags-y += -Idrivers/staging/unisys/sparstopdriver ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels - -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/virthba/Makefile b/drivers/staging/unisys/virthba/Makefile index 632b1c08b975..ba55ae12488e 100644 --- a/drivers/staging/unisys/virthba/Makefile +++ b/drivers/staging/unisys/virthba/Makefile @@ -11,6 +11,3 @@ ccflags-y += -Idrivers/staging/unisys/visorchipset ccflags-y += -Idrivers/staging/unisys/virtpci ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels - -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/virtpci/Makefile b/drivers/staging/unisys/virtpci/Makefile index f9399aabddd1..a26c696219a5 100644 --- a/drivers/staging/unisys/virtpci/Makefile +++ b/drivers/staging/unisys/virtpci/Makefile @@ -8,6 +8,3 @@ ccflags-y += -Idrivers/staging/unisys/include ccflags-y += -Idrivers/staging/unisys/uislib ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels - -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/visorchannel/Makefile b/drivers/staging/unisys/visorchannel/Makefile index f0060be55bc5..e079c96b1cdf 100644 --- a/drivers/staging/unisys/visorchannel/Makefile +++ b/drivers/staging/unisys/visorchannel/Makefile @@ -10,5 +10,3 @@ ccflags-y += -Idrivers/staging/unisys/include ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels ccflags-y += -Idrivers/staging/unisys/visorutil -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/visorchipset/Makefile b/drivers/staging/unisys/visorchipset/Makefile index ead4b9c02715..5071878e57da 100644 --- a/drivers/staging/unisys/visorchipset/Makefile +++ b/drivers/staging/unisys/visorchipset/Makefile @@ -14,5 +14,3 @@ ccflags-y += -Idrivers/staging/unisys/common-spar/include ccflags-y += -Idrivers/staging/unisys/common-spar/include/channels ccflags-y += -Idrivers/staging/unisys/visorutil ccflags-y += -Iinclude/generated -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION - diff --git a/drivers/staging/unisys/visorutil/Makefile b/drivers/staging/unisys/visorutil/Makefile index 3f463888dcec..d871bbb78cef 100644 --- a/drivers/staging/unisys/visorutil/Makefile +++ b/drivers/staging/unisys/visorutil/Makefile @@ -8,4 +8,3 @@ visorutil-y := charqueue.o easyproc.o periodic_work.o procobjecttree.o \ memregion_direct.o visorkmodutils.o ccflags-y += -Idrivers/staging/unisys/include -ccflags-y += -DCONFIG_SPAR_GUEST -DGUESTDRIVERBUILD -DNOAUTOVERSION -- cgit From 836bee9eee6d13cb4f3bf2a53133fab576877dac Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 26 Jun 2014 09:55:55 -0500 Subject: Staging: unisys: remove references to __DATE__ and __TIME__ The use of __DATE__ and __TIME__ is no longer allowed in the kernel so this commit removes those. They were once useful when the drivers were being built externally, but now that the drivers are in the kernel the use of the macros is redundant since the kernel already has the same information elsewhere. In addition, using these macros breaks the build if using gcc 4.9.0 Reported-by: Greg Kroah-Hartman Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/vbushelper.h | 8 +++----- drivers/staging/unisys/uislib/uisutils.c | 11 ++++------- drivers/staging/unisys/virthba/virthba.c | 5 ----- drivers/staging/unisys/virtpci/virtpci.c | 14 +++----------- drivers/staging/unisys/virtpci/virtpci.h | 2 -- drivers/staging/unisys/visorchipset/visorchipset_main.c | 4 ++-- 6 files changed, 12 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/vbushelper.h b/drivers/staging/unisys/include/vbushelper.h index 93e35f039ded..ed943759634a 100644 --- a/drivers/staging/unisys/include/vbushelper.h +++ b/drivers/staging/unisys/include/vbushelper.h @@ -28,8 +28,7 @@ static inline void BusDeviceInfo_Init(ULTRA_VBUS_DEVICEINFO *pBusDeviceInfo, const char *deviceType, const char *driverName, - const char *ver, const char *verTag, - const char *buildDate, const char *buildTime) + const char *ver, const char *verTag) { memset(pBusDeviceInfo, 0, sizeof(ULTRA_VBUS_DEVICEINFO)); snprintf(pBusDeviceInfo->devType, sizeof(pBusDeviceInfo->devType), @@ -37,11 +36,10 @@ BusDeviceInfo_Init(ULTRA_VBUS_DEVICEINFO *pBusDeviceInfo, snprintf(pBusDeviceInfo->drvName, sizeof(pBusDeviceInfo->drvName), "%s", (driverName) ? driverName : "unknownDriver"); snprintf(pBusDeviceInfo->infoStrings, - sizeof(pBusDeviceInfo->infoStrings), "%s\t%s\t%s %s\t%s", + sizeof(pBusDeviceInfo->infoStrings), "%s\t%s\t%s", (ver) ? ver : "unknownVer", (verTag) ? verTag : "unknownVerTag", - (buildDate) ? buildDate : "noBuildDate", - (buildTime) ? buildTime : "nobuildTime", TARGET_HOSTNAME); + TARGET_HOSTNAME); } #endif diff --git a/drivers/staging/unisys/uislib/uisutils.c b/drivers/staging/unisys/uislib/uisutils.c index 0f1bb739975e..07e5535fc340 100644 --- a/drivers/staging/unisys/uislib/uisutils.c +++ b/drivers/staging/unisys/uislib/uisutils.c @@ -96,9 +96,8 @@ uisctrl_register_req_handler(int type, void *fptr, return 0; } if (chipset_DriverInfo) - BusDeviceInfo_Init(chipset_DriverInfo, - "chipset", "uislib", - VERSION, NULL, __DATE__, __TIME__); + BusDeviceInfo_Init(chipset_DriverInfo, "chipset", "uislib", + VERSION, NULL); return 1; } @@ -149,10 +148,8 @@ uisctrl_register_req_handler_ex(uuid_le switchTypeGuid, Away: if (rc) { if (chipset_DriverInfo) - BusDeviceInfo_Init(chipset_DriverInfo, - "chipset", "uislib", - VERSION, NULL, - __DATE__, __TIME__); + BusDeviceInfo_Init(chipset_DriverInfo, "chipset", + "uislib", VERSION, NULL); } else LOGERR("failed to register type %pUL.\n", &switchTypeGuid); diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 5c5aa7001767..4d1347ad6527 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -139,8 +139,6 @@ static struct virtpci_driver virthba_driver = { .name = "uisvirthba", .version = VERSION, .vertag = NULL, - .build_date = __DATE__, - .build_time = __TIME__, .id_table = virthba_id_table, .probe = virthba_probe, .remove = virthba_remove, @@ -1413,9 +1411,6 @@ info_proc_read(struct file *file, char __user *buf, size_t len, loff_t *offset) length += sprintf(vbuf + length, "\nvirthba result queue poll wait:%d usecs.\n", rsltq_wait_usecs); - length += sprintf(vbuf + length, - "\nModule build: Date:%s Time:%s\n", - __DATE__, __TIME__); length += sprintf(vbuf + length, "\ninterrupts_rcvd = %llu, interrupts_disabled = %llu\n", virthbainfo->interrupts_rcvd, virthbainfo->interrupts_disabled); diff --git a/drivers/staging/unisys/virtpci/virtpci.c b/drivers/staging/unisys/virtpci/virtpci.c index 71246feb154f..5ab17e76c804 100644 --- a/drivers/staging/unisys/virtpci/virtpci.c +++ b/drivers/staging/unisys/virtpci/virtpci.c @@ -794,8 +794,7 @@ static void fix_vbus_devInfo(struct device *dev, int devNo, int devType, BusDeviceInfo_Init(&devInfo, stype, virtpcidrv->name, virtpcidrv->version, - virtpcidrv->vertag, - virtpcidrv->build_date, virtpcidrv->build_time); + virtpcidrv->vertag); write_vbus_devInfo(pChan, &devInfo, devNo); /* Re-write bus+chipset info, because it is possible that this @@ -1480,10 +1479,6 @@ static ssize_t info_proc_read(struct file *file, char __user *buf, } read_unlock_irqrestore(&VpcidevListLock, flags); - length += - sprintf(vbuf + length, "\nModule build: Date:%s Time:%s\n", __DATE__, - __TIME__); - length += sprintf(vbuf + length, "\n"); if (copy_to_user(buf, vbuf, length)) { kfree(vbuf); @@ -1686,8 +1681,6 @@ static int __init virtpci_mod_init(void) if (!unisys_spar_platform) return -ENODEV; - LOGINF("Module build: Date:%s Time:%s...\n", __DATE__, __TIME__); - POSTCODE_LINUX_2(VPCI_CREATE_ENTRY_PC, POSTCODE_SEVERITY_INFO); ret = bus_register(&virtpci_bus_type); @@ -1701,9 +1694,8 @@ static int __init virtpci_mod_init(void) return ret; } DBGINF("bus_register successful\n"); - BusDeviceInfo_Init(&Bus_DriverInfo, - "clientbus", "virtpci", - VERSION, NULL, __DATE__, __TIME__); + BusDeviceInfo_Init(&Bus_DriverInfo, "clientbus", "virtpci", + VERSION, NULL); /* create a root bus used to parent all the virtpci buses. */ ret = device_register(&virtpci_rootbus_device); diff --git a/drivers/staging/unisys/virtpci/virtpci.h b/drivers/staging/unisys/virtpci/virtpci.h index f7be17b669c4..7539fcb30d38 100644 --- a/drivers/staging/unisys/virtpci/virtpci.h +++ b/drivers/staging/unisys/virtpci/virtpci.h @@ -77,8 +77,6 @@ struct virtpci_driver { const char *name; /* the name of the driver in sysfs */ const char *version; const char *vertag; - const char *build_date; - const char *build_time; const struct pci_device_id *id_table; /* must be non-NULL for probe * to be called */ int (*probe)(struct virtpci_dev *dev, diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 0a602b9c130b..f89712849d72 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -569,7 +569,7 @@ visorchipset_register_busdev_server(VISORCHIPSET_BUSDEV_NOTIFIERS *notifiers, *responders = BusDev_Responders; if (driverInfo) BusDeviceInfo_Init(driverInfo, "chipset", "visorchipset", - VERSION, NULL, __DATE__, __TIME__); + VERSION, NULL); UNLOCKSEM(&NotifierLock); } @@ -593,7 +593,7 @@ visorchipset_register_busdev_client(VISORCHIPSET_BUSDEV_NOTIFIERS *notifiers, *responders = BusDev_Responders; if (driverInfo) BusDeviceInfo_Init(driverInfo, "chipset(bolts)", "visorchipset", - VERSION, NULL, __DATE__, __TIME__); + VERSION, NULL); UNLOCKSEM(&NotifierLock); } EXPORT_SYMBOL_GPL(visorchipset_register_busdev_client); -- cgit From d93b88eb7628fc70f7e0feef640132bb484b70ef Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 26 Jun 2014 09:55:56 -0500 Subject: Staging: unisys Remove BROKEN from Kconfig to allow compilation The unisys drivers now properly check to make sure they are running on the s-Par platform before they will initialize. This was fixed in commit fcd0157ece so it is safe to allow the unisys drivers to be built. This has been tested in the same qemu environment that originally produced the panic and the kernel now runs as expected. Reported-by: Fengguang Wu Reported-by: Sasha Levin Tested-by: Ken Cox Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/Kconfig b/drivers/staging/unisys/Kconfig index 6bae2afbaa15..ac080c9dcf46 100644 --- a/drivers/staging/unisys/Kconfig +++ b/drivers/staging/unisys/Kconfig @@ -3,7 +3,7 @@ # menuconfig UNISYSSPAR bool "Unisys SPAR driver support" - depends on X86_64 && BROKEN + depends on X86_64 ---help--- Support for the Unisys SPAR drivers -- cgit From 7873311aed5436bad100ff7ed98f159e6c8c17a7 Mon Sep 17 00:00:00 2001 From: Karthik Nayak Date: Sat, 21 Jun 2014 20:23:16 +0530 Subject: Staging: Android: removed an unnecessary else statement As per checkpatch warning, removed an unnecessary else statement proceeding an if statement with a return. Signed-off-by: Karthik Nayak Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/binder.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index a741da77828a..589cfc81f419 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -454,9 +454,8 @@ static size_t binder_buffer_size(struct binder_proc *proc, { if (list_is_last(&buffer->entry, &proc->buffers)) return proc->buffer + proc->buffer_size - (void *)buffer->data; - else - return (size_t)list_entry(buffer->entry.next, - struct binder_buffer, entry) - (size_t)buffer->data; + return (size_t)list_entry(buffer->entry.next, + struct binder_buffer, entry) - (size_t)buffer->data; } static void binder_insert_free_buffer(struct binder_proc *proc, -- cgit From 31cd921dea3274202399078443dc6e93ca3f84c1 Mon Sep 17 00:00:00 2001 From: Himangi Saraogi Date: Sat, 21 Jun 2014 20:34:09 +0530 Subject: staging: wlags49_h2: Fix use of skb after netif_rx This patch moves a call to netif_rx(skb) after a subsequent reference to skb, because netif_rx may call kfree_skb via enqueue_to_backlog on its argument. This was found using the following semantic match. // @@ expression skb, e,e1; @@ ( netif_rx(skb); | netif_rx_ni(skb); ) ... when != skb = e ( skb = e1 | * skb ) // Signed-off-by: Himangi Saraogi Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlags49_h2/wl_netdev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlags49_h2/wl_netdev.c b/drivers/staging/wlags49_h2/wl_netdev.c index a10d014365f2..60701d4325d0 100644 --- a/drivers/staging/wlags49_h2/wl_netdev.c +++ b/drivers/staging/wlags49_h2/wl_netdev.c @@ -888,8 +888,6 @@ int wl_rx(struct net_device *dev) GET_PACKET(skb->dev, skb, pktlen); if (status == HCF_SUCCESS) { - netif_rx(skb); - if (port == 0) { lp->stats.rx_packets++; lp->stats.rx_bytes += pktlen; @@ -918,6 +916,7 @@ int wl_rx(struct net_device *dev) } #endif /* WIRELESS_SPY */ #endif /* WIRELESS_EXT */ + netif_rx(skb); } else { DBG_ERROR(DbgInfo, "Rx request to card FAILED\n"); -- cgit From 525be905dc5db388487470be44734f6fb33a8fda Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Sat, 21 Jun 2014 14:07:12 +0300 Subject: staging: xillybus: Use devm_ API for memory allocation and DMA mapping Managed device resource API replaces code that reinvents it for memory allocation, page allocation and DMA mapping. devm_add_action() is used for unwinding DMA mappings, since there is no devm_* API for dma_map_single(). A recent patch that introduces such API was rejected, mainly on the grounds that it may cause an unnecessary waste of resources. Suggested-by: Baruch Siach Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus.h | 46 +++----- drivers/staging/xillybus/xillybus_core.c | 186 +++++++++---------------------- drivers/staging/xillybus/xillybus_of.c | 72 ++++++------ drivers/staging/xillybus/xillybus_pcie.c | 66 +++++------ 4 files changed, 132 insertions(+), 238 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus.h b/drivers/staging/xillybus/xillybus.h index 78a749a7a1c1..ae58a3eeb293 100644 --- a/drivers/staging/xillybus/xillybus.h +++ b/drivers/staging/xillybus/xillybus.h @@ -25,33 +25,12 @@ struct xilly_endpoint_hardware; -struct xilly_page { - struct list_head node; - unsigned long addr; - unsigned int order; -}; - -struct xilly_dma { - struct list_head node; - struct pci_dev *pdev; - struct device *dev; - dma_addr_t dma_addr; - size_t size; - int direction; -}; - struct xilly_buffer { void *addr; dma_addr_t dma_addr; int end_offset; /* Counting elements, not bytes */ }; -struct xilly_cleanup { - struct list_head to_kfree; - struct list_head to_pagefree; - struct list_head to_unmap; -}; - struct xilly_idt_handle { unsigned char *chandesc; unsigned char *idt; @@ -126,9 +105,6 @@ struct xilly_endpoint { struct mutex register_mutex; wait_queue_head_t ep_wait; - /* List of memory allocations, to make release easy */ - struct xilly_cleanup cleanup; - /* Channels and message handling */ struct cdev cdev; @@ -156,18 +132,22 @@ struct xilly_endpoint_hardware { dma_addr_t, size_t, int); - dma_addr_t (*map_single)(struct xilly_cleanup *, - struct xilly_endpoint *, - void *, - size_t, - int); - void (*unmap_single)(struct xilly_dma *entry); + int (*map_single)(struct xilly_endpoint *, + void *, + size_t, + int, + dma_addr_t *); }; -irqreturn_t xillybus_isr(int irq, void *data); +struct xilly_mapping { + void *device; + dma_addr_t dma_addr; + size_t size; + int direction; +}; -void xillybus_do_cleanup(struct xilly_cleanup *mem, - struct xilly_endpoint *endpoint); + +irqreturn_t xillybus_isr(int irq, void *data); struct xilly_endpoint *xillybus_init_endpoint(struct pci_dev *pdev, struct device *dev, diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index fe8f9d28b03b..5fca58e4e082 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -311,85 +311,14 @@ EXPORT_SYMBOL(xillybus_isr); * no locks are applied! */ -void xillybus_do_cleanup(struct xilly_cleanup *mem, - struct xilly_endpoint *endpoint) -{ - struct list_head *this, *next; - - list_for_each_safe(this, next, &mem->to_unmap) { - struct xilly_dma *entry = - list_entry(this, struct xilly_dma, node); - - endpoint->ephw->unmap_single(entry); - kfree(entry); - } - - INIT_LIST_HEAD(&mem->to_unmap); - - list_for_each_safe(this, next, &mem->to_kfree) - kfree(this); - - INIT_LIST_HEAD(&mem->to_kfree); - - list_for_each_safe(this, next, &mem->to_pagefree) { - struct xilly_page *entry = - list_entry(this, struct xilly_page, node); - - free_pages(entry->addr, entry->order); - kfree(entry); - } - INIT_LIST_HEAD(&mem->to_pagefree); -} -EXPORT_SYMBOL(xillybus_do_cleanup); - -static void *xilly_malloc(struct xilly_cleanup *mem, size_t size) -{ - void *ptr; - - ptr = kzalloc(sizeof(struct list_head) + size, GFP_KERNEL); - - if (!ptr) - return ptr; - - list_add_tail((struct list_head *) ptr, &mem->to_kfree); - - return ptr + sizeof(struct list_head); -} - -static unsigned long xilly_pagealloc(struct xilly_cleanup *mem, - unsigned long order) -{ - unsigned long addr; - struct xilly_page *this; - - this = kmalloc(sizeof(struct xilly_page), GFP_KERNEL); - if (!this) - return 0; - - addr = __get_free_pages(GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO, order); - - if (!addr) { - kfree(this); - return 0; - } - - this->addr = addr; - this->order = order; - - list_add_tail(&this->node, &mem->to_pagefree); - - return addr; -} - - static void xillybus_autoflush(struct work_struct *work); static int xilly_setupchannels(struct xilly_endpoint *ep, - struct xilly_cleanup *mem, unsigned char *chandesc, int entries ) { + struct device *dev = ep->dev; int i, entry, wr_nbuffer, rd_nbuffer; struct xilly_channel *channel; int channelnum, bufnum, bufsize, format, is_writebuf; @@ -402,17 +331,20 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, int left_of_rd_salami = 0; dma_addr_t dma_addr; int msg_buf_done = 0; + const gfp_t gfp_mask = GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO; struct xilly_buffer *this_buffer = NULL; /* Init to silence warning */ + int rc = 0; - channel = xilly_malloc(mem, ep->num_channels * - sizeof(struct xilly_channel)); + channel = devm_kzalloc(dev, ep->num_channels * + sizeof(struct xilly_channel), GFP_KERNEL); if (!channel) goto memfail; - ep->channels = xilly_malloc(mem, (ep->num_channels + 1) * - sizeof(struct xilly_channel *)); + ep->channels = devm_kzalloc(dev, (ep->num_channels + 1) * + sizeof(struct xilly_channel *), + GFP_KERNEL); if (!ep->channels) goto memfail; @@ -501,16 +433,16 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, channel->rd_exclusive_open = exclusive_open; channel->seekable = seekable; - channel->rd_buffers = xilly_malloc( - mem, - bufnum * sizeof(struct xilly_buffer *)); + channel->rd_buffers = devm_kzalloc(dev, + bufnum * sizeof(struct xilly_buffer *), + GFP_KERNEL); if (!channel->rd_buffers) goto memfail; - this_buffer = xilly_malloc( - mem, - bufnum * sizeof(struct xilly_buffer)); + this_buffer = devm_kzalloc(dev, + bufnum * sizeof(struct xilly_buffer), + GFP_KERNEL); if (!this_buffer) goto memfail; @@ -530,16 +462,16 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, channel->wr_synchronous = synchronous; channel->wr_exclusive_open = exclusive_open; - channel->wr_buffers = xilly_malloc( - mem, - bufnum * sizeof(struct xilly_buffer *)); + channel->wr_buffers = devm_kzalloc(dev, + bufnum * sizeof(struct xilly_buffer *), + GFP_KERNEL); if (!channel->wr_buffers) goto memfail; - this_buffer = xilly_malloc( - mem, - bufnum * sizeof(struct xilly_buffer)); + this_buffer = devm_kzalloc(dev, + bufnum * sizeof(struct xilly_buffer), + GFP_KERNEL); if (!this_buffer) goto memfail; @@ -576,21 +508,21 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, } wr_salami = (void *) - xilly_pagealloc(mem, - allocorder); + devm_get_free_pages( + dev, gfp_mask, + allocorder); + if (!wr_salami) goto memfail; left_of_wr_salami = allocsize; } - dma_addr = ep->ephw->map_single( - mem, - ep, - wr_salami, - bytebufsize, - DMA_FROM_DEVICE); + rc = ep->ephw->map_single(ep, wr_salami, + bytebufsize, + DMA_FROM_DEVICE, + &dma_addr); - if (!dma_addr) + if (rc) goto dmafail; iowrite32( @@ -654,8 +586,8 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, } rd_salami = (void *) - xilly_pagealloc( - mem, + devm_get_free_pages( + dev, gfp_mask, allocorder); if (!rd_salami) @@ -663,14 +595,13 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, left_of_rd_salami = allocsize; } - dma_addr = ep->ephw->map_single( - mem, - ep, - rd_salami, - bytebufsize, - DMA_TO_DEVICE); - if (!dma_addr) + rc = ep->ephw->map_single(ep, rd_salami, + bytebufsize, + DMA_TO_DEVICE, + &dma_addr); + + if (rc) goto dmafail; iowrite32( @@ -712,7 +643,7 @@ memfail: return -ENOMEM; dmafail: dev_err(ep->dev, "Failed to map DMA memory!. Aborting.\n"); - return -ENOMEM; + return rc; } static void xilly_scan_idt(struct xilly_endpoint *endpoint, @@ -2103,9 +2034,6 @@ struct xilly_endpoint *xillybus_init_endpoint(struct pci_dev *pdev, endpoint->pdev = pdev; endpoint->dev = dev; endpoint->ephw = ephw; - INIT_LIST_HEAD(&endpoint->cleanup.to_kfree); - INIT_LIST_HEAD(&endpoint->cleanup.to_pagefree); - INIT_LIST_HEAD(&endpoint->cleanup.to_unmap); endpoint->msg_counter = 0x0b; endpoint->failed_messages = 0; endpoint->fatal_error = 0; @@ -2131,7 +2059,7 @@ static int xilly_quiesce(struct xilly_endpoint *endpoint) if (endpoint->idtlen < 0) { dev_err(endpoint->dev, - "Failed to quiesce the device on exit. Quitting while leaving a mess.\n"); + "Failed to quiesce the device on exit.\n"); return -ENODEV; } return 0; /* Success */ @@ -2141,8 +2069,9 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) { int rc = 0; - struct xilly_cleanup tmpmem; + void *bootstrap_resources; int idtbuffersize = (1 << PAGE_SHIFT); + struct device *dev = endpoint->dev; /* * The bogus IDT is used during bootstrap for allocating the initial @@ -2155,10 +2084,6 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) 3, 192, PAGE_SHIFT, 0 }; struct xilly_idt_handle idt_handle; - INIT_LIST_HEAD(&tmpmem.to_kfree); - INIT_LIST_HEAD(&tmpmem.to_pagefree); - INIT_LIST_HEAD(&tmpmem.to_unmap); - /* * Writing the value 0x00000001 to Endianness register signals which * endianness this processor is using, so the FPGA can swap words as @@ -2170,12 +2095,16 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) /* Bootstrap phase I: Allocate temporary message buffer */ + bootstrap_resources = devres_open_group(dev, NULL, GFP_KERNEL); + if (!bootstrap_resources) + return -ENOMEM; + endpoint->num_channels = 0; - rc = xilly_setupchannels(endpoint, &tmpmem, bogus_idt, 1); + rc = xilly_setupchannels(endpoint, bogus_idt, 1); if (rc) - goto failed_buffers; + return rc; /* Clear the message subsystem (and counter in particular) */ iowrite32(0x04, &endpoint->registers[fpga_msg_ctrl_reg]); @@ -2199,8 +2128,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) if (endpoint->idtlen < 0) { dev_err(endpoint->dev, "No response from FPGA. Aborting.\n"); - rc = -ENODEV; - goto failed_quiesce; + return -ENODEV; } /* Enable DMA */ @@ -2216,7 +2144,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) endpoint->num_channels = 1; - rc = xilly_setupchannels(endpoint, &tmpmem, bogus_idt, 2); + rc = xilly_setupchannels(endpoint, bogus_idt, 2); if (rc) goto failed_idt; @@ -2234,10 +2162,12 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) rc = -ENODEV; goto failed_idt; } + + devres_close_group(dev, bootstrap_resources); + /* Bootstrap phase III: Allocate buffers according to IDT */ rc = xilly_setupchannels(endpoint, - &endpoint->cleanup, idt_handle.chandesc, idt_handle.entries); @@ -2260,7 +2190,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) if (rc) goto failed_chrdevs; - xillybus_do_cleanup(&tmpmem, endpoint); + devres_release_group(dev, bootstrap_resources); return 0; @@ -2270,16 +2200,8 @@ failed_chrdevs: mutex_unlock(&ep_list_lock); failed_idt: - /* Quiesce the device. Now it's serious to do it */ - rc = xilly_quiesce(endpoint); - - if (rc) - return rc; /* FPGA may still DMA, so no release */ - + xilly_quiesce(endpoint); flush_workqueue(xillybus_wq); -failed_quiesce: -failed_buffers: - xillybus_do_cleanup(&tmpmem, endpoint); return rc; } diff --git a/drivers/staging/xillybus/xillybus_of.c b/drivers/staging/xillybus/xillybus_of.c index 46ea010b4ac6..e0ae2346b820 100644 --- a/drivers/staging/xillybus/xillybus_of.c +++ b/drivers/staging/xillybus/xillybus_of.c @@ -62,44 +62,53 @@ static void xilly_dma_sync_single_nop(struct xilly_endpoint *ep, { } -static dma_addr_t xilly_map_single_of(struct xilly_cleanup *mem, - struct xilly_endpoint *ep, - void *ptr, - size_t size, - int direction - ) +static void xilly_of_unmap(void *ptr) { + struct xilly_mapping *data = ptr; - dma_addr_t addr = 0; - struct xilly_dma *this; + dma_unmap_single(data->device, data->dma_addr, + data->size, data->direction); + + kfree(ptr); +} + +static int xilly_map_single_of(struct xilly_endpoint *ep, + void *ptr, + size_t size, + int direction, + dma_addr_t *ret_dma_handle + ) +{ + dma_addr_t addr; + struct xilly_mapping *this; + int rc; - this = kmalloc(sizeof(struct xilly_dma), GFP_KERNEL); + this = kzalloc(sizeof(*this), GFP_KERNEL); if (!this) - return 0; + return -ENOMEM; addr = dma_map_single(ep->dev, ptr, size, direction); - this->direction = direction; if (dma_mapping_error(ep->dev, addr)) { kfree(this); - return 0; + return -ENODEV; } + this->device = ep->dev; this->dma_addr = addr; - this->dev = ep->dev; this->size = size; + this->direction = direction; - list_add_tail(&this->node, &mem->to_unmap); + *ret_dma_handle = addr; - return addr; -} + rc = devm_add_action(ep->dev, xilly_of_unmap, this); -static void xilly_unmap_single_of(struct xilly_dma *entry) -{ - dma_unmap_single(entry->dev, - entry->dma_addr, - entry->size, - entry->direction); + if (rc) { + dma_unmap_single(ep->dev, addr, size, direction); + kfree(this); + } + + return rc; } static struct xilly_endpoint_hardware of_hw = { @@ -107,7 +116,6 @@ static struct xilly_endpoint_hardware of_hw = { .hw_sync_sgl_for_cpu = xilly_dma_sync_single_for_cpu_of, .hw_sync_sgl_for_device = xilly_dma_sync_single_for_device_of, .map_single = xilly_map_single_of, - .unmap_single = xilly_unmap_single_of }; static struct xilly_endpoint_hardware of_hw_coherent = { @@ -115,7 +123,6 @@ static struct xilly_endpoint_hardware of_hw_coherent = { .hw_sync_sgl_for_cpu = xilly_dma_sync_single_nop, .hw_sync_sgl_for_device = xilly_dma_sync_single_nop, .map_single = xilly_map_single_of, - .unmap_single = xilly_unmap_single_of }; static int xilly_drv_probe(struct platform_device *op) @@ -138,12 +145,6 @@ static int xilly_drv_probe(struct platform_device *op) dev_set_drvdata(dev, endpoint); rc = of_address_to_resource(dev->of_node, 0, &res); - if (rc) { - dev_warn(endpoint->dev, - "Failed to obtain device tree resource\n"); - return rc; - } - endpoint->registers = devm_ioremap_resource(dev, &res); if (IS_ERR(endpoint->registers)) @@ -159,14 +160,7 @@ static int xilly_drv_probe(struct platform_device *op) return -ENODEV; } - rc = xillybus_endpoint_discovery(endpoint); - - if (!rc) - return 0; - - xillybus_do_cleanup(&endpoint->cleanup, endpoint); - - return rc; + return xillybus_endpoint_discovery(endpoint); } static int xilly_drv_remove(struct platform_device *op) @@ -176,8 +170,6 @@ static int xilly_drv_remove(struct platform_device *op) xillybus_endpoint_remove(endpoint); - xillybus_do_cleanup(&endpoint->cleanup, endpoint); - return 0; } diff --git a/drivers/staging/xillybus/xillybus_pcie.c b/drivers/staging/xillybus/xillybus_pcie.c index a4fe51c90e92..96c2c9f67e0c 100644 --- a/drivers/staging/xillybus/xillybus_pcie.c +++ b/drivers/staging/xillybus/xillybus_pcie.c @@ -72,52 +72,62 @@ static void xilly_dma_sync_single_for_device_pci(struct xilly_endpoint *ep, xilly_pci_direction(direction)); } +static void xilly_pci_unmap(void *ptr) +{ + struct xilly_mapping *data = ptr; + + pci_unmap_single(data->device, data->dma_addr, + data->size, data->direction); + + kfree(ptr); +} + /* * Map either through the PCI DMA mapper or the non_PCI one. Behind the * scenes exactly the same functions are called with the same parameters, * but that can change. */ -static dma_addr_t xilly_map_single_pci(struct xilly_cleanup *mem, - struct xilly_endpoint *ep, - void *ptr, - size_t size, - int direction +static int xilly_map_single_pci(struct xilly_endpoint *ep, + void *ptr, + size_t size, + int direction, + dma_addr_t *ret_dma_handle ) { - - dma_addr_t addr = 0; - struct xilly_dma *this; int pci_direction; + dma_addr_t addr; + struct xilly_mapping *this; + int rc = 0; - this = kmalloc(sizeof(struct xilly_dma), GFP_KERNEL); + this = kzalloc(sizeof(*this), GFP_KERNEL); if (!this) - return 0; + return -ENOMEM; pci_direction = xilly_pci_direction(direction); + addr = pci_map_single(ep->pdev, ptr, size, pci_direction); - this->direction = pci_direction; if (pci_dma_mapping_error(ep->pdev, addr)) { kfree(this); - return 0; + return -ENODEV; } + this->device = ep->pdev; this->dma_addr = addr; - this->pdev = ep->pdev; this->size = size; + this->direction = pci_direction; - list_add_tail(&this->node, &mem->to_unmap); + *ret_dma_handle = addr; - return addr; -} + rc = devm_add_action(ep->dev, xilly_pci_unmap, this); -static void xilly_unmap_single_pci(struct xilly_dma *entry) -{ - pci_unmap_single(entry->pdev, - entry->dma_addr, - entry->size, - entry->direction); + if (rc) { + pci_unmap_single(ep->pdev, addr, size, pci_direction); + kfree(this); + } + + return rc; } static struct xilly_endpoint_hardware pci_hw = { @@ -125,7 +135,6 @@ static struct xilly_endpoint_hardware pci_hw = { .hw_sync_sgl_for_cpu = xilly_dma_sync_single_for_cpu_pci, .hw_sync_sgl_for_device = xilly_dma_sync_single_for_device_pci, .map_single = xilly_map_single_pci, - .unmap_single = xilly_unmap_single_pci }; static int xilly_probe(struct pci_dev *pdev, @@ -199,14 +208,7 @@ static int xilly_probe(struct pci_dev *pdev, return -ENODEV; } - rc = xillybus_endpoint_discovery(endpoint); - - if (!rc) - return 0; - - xillybus_do_cleanup(&endpoint->cleanup, endpoint); - - return rc; + return xillybus_endpoint_discovery(endpoint); } static void xilly_remove(struct pci_dev *pdev) @@ -214,8 +216,6 @@ static void xilly_remove(struct pci_dev *pdev) struct xilly_endpoint *endpoint = pci_get_drvdata(pdev); xillybus_endpoint_remove(endpoint); - - xillybus_do_cleanup(&endpoint->cleanup, endpoint); } MODULE_DEVICE_TABLE(pci, xillyids); -- cgit From 63b9907f58f1c1b718cd37eeaec074692f00492d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:22 +0100 Subject: staging: vt6656: mac80211 conversion: create rx function. Add mac80211 header and depends. Create new function vnt_rx_data to receive 80211 packets which is based on RXbBulkInProcessData and rx them into mac80211 The function also relays dbm, tsf_time(as mactime) and sets byBBPreEDRSSI and uCurrRSSI. skb is modified slightly to skb_put the maxium tail room in PIPEnsBulkInUsbRead and trim back in vnt_rx_data. dev_alloc_skb is used to reallocate the sk_buff. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Kconfig | 2 +- drivers/staging/vt6656/device.h | 6 ++ drivers/staging/vt6656/dpc.c | 137 +++++++++++++++++++++++++++++++++++++- drivers/staging/vt6656/dpc.h | 3 + drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/usbpipe.c | 4 +- 6 files changed, 149 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Kconfig b/drivers/staging/vt6656/Kconfig index f89ab205c8e0..839db3a6da81 100644 --- a/drivers/staging/vt6656/Kconfig +++ b/drivers/staging/vt6656/Kconfig @@ -1,6 +1,6 @@ config VT6656 tristate "VIA Technologies VT6656 support" - depends on USB && WLAN && m + depends on MAC80211 && USB && WLAN && m select WIRELESS_EXT select WEXT_PRIV select FW_LOADER diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 11b863d4099d..631f40275075 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -44,6 +44,7 @@ #include #include #include +#include #ifdef SIOCETHTOOL #define DEVICE_ETHTOOL_IOCTL_SUPPORT @@ -392,6 +393,8 @@ typedef struct __device_opt { } OPTIONS, *POPTIONS; struct vnt_private { + /* mac80211 */ + struct ieee80211_hw *hw; /* netdev */ struct usb_device *usb; struct net_device *dev; @@ -402,6 +405,9 @@ struct vnt_private { struct work_struct read_work_item; struct work_struct rx_mng_work_item; + u64 tsf_time; + u8 rx_rate; + u32 rx_buf_sz; int multicast_limit; u8 byRxMode; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index c0ec5b37aa7c..0b9c92382076 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -900,7 +900,7 @@ void RXvFreeRCB(struct vnt_rcb *rcb, int re_alloc_skb) } if (re_alloc_skb == true) { - rcb->skb = netdev_alloc_skb(priv->dev, priv->rx_buf_sz); + rcb->skb = dev_alloc_skb(priv->rx_buf_sz); /* TODO error handling */ if (!rcb->skb) { DBG_PRT(MSG_LEVEL_ERR, KERN_ERR @@ -969,3 +969,138 @@ void RXvMngWorkItem(struct work_struct *work) pDevice->bIsRxMngWorkItemQueued = false; } +int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, + unsigned long bytes_received) +{ + struct ieee80211_hw *hw = priv->hw; + struct ieee80211_supported_band *sband; + struct sk_buff *skb; + struct ieee80211_rx_status rx_status = { 0 }; + struct ieee80211_hdr *hdr; + __le16 fc; + u8 *rsr, *new_rsr, *rssi, *frame; + __le64 *tsf_time; + u32 frame_size; + int ii, r; + u8 *rx_sts, *rx_rate, *sq, *sq_3; + u32 wbk_status; + u8 *skb_data; + u16 *pay_load_len; + u16 pay_load_with_padding; + u8 rate_idx = 0; + u8 rate[MAX_RATE] = {2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108}; + long rx_dbm; + + skb = ptr_rcb->skb; + + /* [31:16]RcvByteCount ( not include 4-byte Status ) */ + wbk_status = *((u32 *)(skb->data)); + frame_size = wbk_status >> 16; + frame_size += 4; + + if (bytes_received != frame_size) { + dev_dbg(&priv->usb->dev, "------- WRONG Length 1\n"); + return false; + } + + if ((bytes_received > 2372) || (bytes_received <= 40)) { + /* Frame Size error drop this packet.*/ + dev_dbg(&priv->usb->dev, "------ WRONG Length 2\n"); + return false; + } + + skb_data = (u8 *)skb->data; + + rx_sts = skb_data+4; + rx_rate = skb_data+5; + + /* real Frame Size = USBframe_size -4WbkStatus - 4RxStatus */ + /* -8TSF - 4RSR - 4SQ3 - ?Padding */ + + /* if SQ3 the range is 24~27, if no SQ3 the range is 20~23 */ + + pay_load_len = (u16 *) (skb_data + 6); + + /*Fix hardware bug => PLCP_Length error */ + if (((bytes_received - (*pay_load_len)) > 27) || + ((bytes_received - (*pay_load_len)) < 24) || + (bytes_received < (*pay_load_len))) { + dev_dbg(&priv->usb->dev, "Wrong PLCP Length %x\n", + *pay_load_len); + return false; + } + + sband = hw->wiphy->bands[hw->conf.chandef.chan->band]; + + for (r = RATE_1M; r < MAX_RATE; r++) { + if (*rx_rate == rate[r]) + break; + } + + priv->rx_rate = r; + + for (ii = 0; ii < sband->n_bitrates; ii++) { + if (sband->bitrates[ii].hw_value == r) { + rate_idx = ii; + break; + } + } + + if (ii == sband->n_bitrates) { + dev_dbg(&priv->usb->dev, "Wrong RxRate %x\n", *rx_rate); + return false; + } + + pay_load_with_padding = ((*pay_load_len / 4) + + ((*pay_load_len % 4) ? 1 : 0)) * 4; + + tsf_time = (__le64 *)(skb_data + 8 + pay_load_with_padding); + + priv->tsf_time = le64_to_cpu(*tsf_time); + + if (priv->byBBType == BB_TYPE_11G) { + sq_3 = skb_data + 8 + pay_load_with_padding + 12; + sq = sq_3; + } else { + sq = skb_data + 8 + pay_load_with_padding + 8; + sq_3 = sq; + } + + new_rsr = skb_data + 8 + pay_load_with_padding + 9; + rssi = skb_data + 8 + pay_load_with_padding + 10; + rsr = skb_data + 8 + pay_load_with_padding + 11; + + frame_size = *pay_load_len; + + vnt_rf_rssi_to_dbm(priv, *rssi, &rx_dbm); + + priv->byBBPreEDRSSI = (u8)rx_dbm + 1; + priv->uCurrRSSI = priv->byBBPreEDRSSI; + + frame = skb_data + 8; + + skb_pull(skb, 8); + skb_trim(skb, frame_size); + + rx_status.mactime = priv->tsf_time; + rx_status.band = hw->conf.chandef.chan->band; + rx_status.signal = rx_dbm; + rx_status.flag = 0; + rx_status.freq = hw->conf.chandef.chan->center_freq; + + hdr = (struct ieee80211_hdr *)(skb->data); + fc = hdr->frame_control; + + rx_status.rate_idx = rate_idx; + + if (ieee80211_has_protected(fc)) { + if (priv->byLocalID > REV_ID_VT3253_A1) + rx_status.flag = RX_FLAG_DECRYPTED; + } + + memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); + + ieee80211_rx_irqsafe(priv->hw, skb); + + return true; +} diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 8d524345dfdb..45da7b2c5de2 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -41,4 +41,7 @@ void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb); int RXbBulkInProcessData(struct vnt_private *, struct vnt_rcb *pRCB, unsigned long BytesToIndicate); +int vnt_rx_data(struct vnt_private *, struct vnt_rcb *, + unsigned long bytes_recieved); + #endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4662a3e03cce..ebbb10d8634d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -793,7 +793,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) goto free_rx_tx; } - rcb->skb = netdev_alloc_skb(priv->dev, priv->rx_buf_sz); + rcb->skb = dev_alloc_skb(priv->rx_buf_sz); if (rcb->skb == NULL) { DBG_PRT(MSG_LEVEL_ERR, KERN_ERR " Failed to alloc rx skb\n"); diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index e4751b71e4d3..e30150efbe43 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -242,7 +242,7 @@ int PIPEnsBulkInUsbRead(struct vnt_private *priv, struct vnt_rcb *rcb) usb_fill_bulk_urb(urb, priv->usb, usb_rcvbulkpipe(priv->usb, 2), - (void *) (rcb->skb->data), + skb_put(rcb->skb, skb_tailroom(rcb->skb)), MAX_TOTAL_SIZE_WITH_ALL_HEADERS, s_nsBulkInUsbIoCompleteRead, rcb); @@ -297,7 +297,7 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) if (urb->actual_length) { spin_lock_irqsave(&priv->lock, flags); - if (RXbBulkInProcessData(priv, rcb, urb->actual_length) == true) + if (vnt_rx_data(priv, rcb, urb->actual_length)) re_alloc_skb = true; spin_unlock_irqrestore(&priv->lock, flags); -- cgit From d38b13aa7884021ddb06fb6f248da265b8a6fbee Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:23 +0100 Subject: staging: vt6656: mac80211 conversion: Create tx functions Create vnt_fill_txkey as mac80211 replacement for s_vFillTxKey. Create vnt_tx_packet which a merger of s_bPacketToWirelessUsb, nsDMA_tx_packet and csMgmt_xmit using mac80211 signalling. Create vnt_beacon_xmit as mac80211 replacement for csBeacon_xmit. Changing header in vnt_beacon_buffer to struct ieee80211_mgmt deleting some of old code. vnt_beacon_make is needed to make beacon for vnt_beacon_xmit. Create vnt_beacon_enable as mac80211 call to enable beacon. vnt_fill_ieee80211_rts is modified to use struct ieee80211_hdr instead of struct ethhdr and access to tx_context. In s_nsBulkOutIoCompleteWrite modify context handling Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 3 +- drivers/staging/vt6656/rxtx.c | 437 ++++++++++++++++++++++++++++++++++++--- drivers/staging/vt6656/rxtx.h | 7 +- drivers/staging/vt6656/usbpipe.c | 28 +-- 4 files changed, 432 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 631f40275075..23fc5e2ef4dd 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -223,7 +223,8 @@ struct vnt_rsp_card_init { */ enum { CONTEXT_DATA_PACKET = 1, - CONTEXT_MGMT_PACKET + CONTEXT_MGMT_PACKET, + CONTEXT_BEACON_PACKET }; /* RCB (Receive Control Block) */ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 3c19288a6a01..7f7c13aaf6b0 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -578,24 +578,18 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, return le16_to_cpu(buf->duration); } -static int vnt_fill_ieee80211_rts(struct vnt_private *priv, - struct ieee80211_rts *rts, struct ethhdr *eth_hdr, - __le16 duration) +static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, + struct ieee80211_rts *rts, __le16 duration) { + struct ieee80211_hdr *hdr = + (struct ieee80211_hdr *)tx_context->skb->data; + rts->duration = duration; rts->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS); - if (priv->op_mode == NL80211_IFTYPE_ADHOC || - priv->op_mode == NL80211_IFTYPE_AP) - memcpy(rts->ra, eth_hdr->h_dest, ETH_ALEN); - else - memcpy(rts->ra, priv->abyBSSID, ETH_ALEN); - - if (priv->op_mode == NL80211_IFTYPE_AP) - memcpy(rts->ta, priv->abyBSSID, ETH_ALEN); - else - memcpy(rts->ta, eth_hdr->h_source, ETH_ALEN); + memcpy(rts->ra, hdr->addr1, ETH_ALEN); + memcpy(rts->ta, hdr->addr2, ETH_ALEN); return 0; } @@ -620,7 +614,7 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, pkt_type, current_rate, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); + vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -657,7 +651,7 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, buf->rts_duration_aa_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); + vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -677,7 +671,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); + vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); return vnt_rxtx_datahead_ab(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -703,7 +697,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, buf->rts_duration_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); + vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); return vnt_rxtx_datahead_a_fb(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -1626,7 +1620,6 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, struct vnt_tx_short_buf_head *short_head; u32 cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN; u32 cbHeaderSize = 0; - struct ieee80211_hdr *pMACHeader; u16 wCurrentRate; u32 cbFrameBodySize; u32 cbReqCount; @@ -1676,12 +1669,6 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, /* Generate Beacon Header */ - pMACHeader = &pTX_Buffer->hdr; - - memcpy(pMACHeader, pPacket->p80211Header, pPacket->cbMPDULen); - - pMACHeader->duration_id = 0; - pMACHeader->seq_ctrl = cpu_to_le16(pDevice->wSeqCounter << 4); pDevice->wSeqCounter++; if (pDevice->wSeqCounter > 0x0fff) pDevice->wSeqCounter = 0; @@ -2067,3 +2054,405 @@ int nsDMA_tx_packet(struct vnt_private *pDevice, struct sk_buff *skb) return 0; } + +static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, + u8 *key_buffer, struct ieee80211_key_conf *tx_key, struct sk_buff *skb, + u16 payload_len, struct vnt_mic_hdr *mic_hdr) +{ + struct ieee80211_hdr *hdr = tx_context->hdr; + struct ieee80211_key_seq seq; + u8 *iv = ((u8 *)hdr + ieee80211_get_hdrlen_from_skb(skb)); + + /* strip header and icv len from payload */ + payload_len -= ieee80211_get_hdrlen_from_skb(skb); + payload_len -= tx_key->icv_len; + + switch (tx_key->cipher) { + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: + memcpy(key_buffer, iv, 3); + memcpy(key_buffer + 3, tx_key->key, tx_key->keylen); + + if (tx_key->keylen == WLAN_KEY_LEN_WEP40) { + memcpy(key_buffer + 8, iv, 3); + memcpy(key_buffer + 11, + tx_key->key, WLAN_KEY_LEN_WEP40); + } + + break; + case WLAN_CIPHER_SUITE_TKIP: + ieee80211_get_tkip_p2k(tx_key, skb, key_buffer); + + break; + case WLAN_CIPHER_SUITE_CCMP: + + if (!mic_hdr) + return; + + mic_hdr->id = 0x59; + mic_hdr->payload_len = cpu_to_be16(payload_len); + memcpy(mic_hdr->mic_addr2, hdr->addr2, ETH_ALEN); + + ieee80211_get_key_tx_seq(tx_key, &seq); + + mic_hdr->tsc_47_16 = cpu_to_be32((u32)seq.ccmp.pn[3] | + ((u32)seq.ccmp.pn[2] << 8) | + ((u32)seq.ccmp.pn[1] << 16) | + ((u32)seq.ccmp.pn[0] << 24)); + + mic_hdr->tsc_15_0 = cpu_to_be16((u16)seq.ccmp.pn[5] | + ((u16)seq.ccmp.pn[4] << 8)); + + if (ieee80211_has_a4(hdr->frame_control)) + mic_hdr->hlen = cpu_to_be16(28); + else + mic_hdr->hlen = cpu_to_be16(22); + + memcpy(mic_hdr->addr1, hdr->addr1, ETH_ALEN); + memcpy(mic_hdr->addr2, hdr->addr2, ETH_ALEN); + memcpy(mic_hdr->addr3, hdr->addr3, ETH_ALEN); + + mic_hdr->frame_control = cpu_to_le16( + le16_to_cpu(hdr->frame_control) & 0xc78f); + mic_hdr->seq_ctrl = cpu_to_le16( + le16_to_cpu(hdr->seq_ctrl) & 0xf); + + if (ieee80211_has_a4(hdr->frame_control)) + memcpy(mic_hdr->addr4, hdr->addr4, ETH_ALEN); + + + memcpy(key_buffer, tx_key->key, WLAN_KEY_LEN_CCMP); + + break; + default: + break; + } + +} + +int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) +{ + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct ieee80211_tx_rate *tx_rate = &info->control.rates[0]; + struct ieee80211_rate *rate; + struct ieee80211_key_conf *tx_key; + struct ieee80211_hdr *hdr; + struct vnt_mic_hdr *mic_hdr = NULL; + struct vnt_tx_buffer *tx_buffer; + struct vnt_tx_fifo_head *tx_buffer_head; + struct vnt_usb_send_context *tx_context; + unsigned long flags; + u32 frame_size = 0; + u16 tx_bytes, tx_header_size, tx_body_size, current_rate, duration_id; + u8 pkt_type, fb_option = AUTO_FB_NONE; + bool need_rts = false, need_ack = false, is_pspoll = false; + bool need_mic = false; + + hdr = (struct ieee80211_hdr *)(skb->data); + + rate = ieee80211_get_tx_rate(priv->hw, info); + + current_rate = rate->hw_value; + if (priv->wCurrentRate != current_rate) { + priv->wCurrentRate = current_rate; + bScheduleCommand(priv, WLAN_CMD_SETPOWER, NULL); + } + + if (current_rate > RATE_11M) + pkt_type = priv->byPacketType; + else + pkt_type = PK_TYPE_11B; + + spin_lock_irqsave(&priv->lock, flags); + + tx_context = s_vGetFreeContext(priv); + if (!tx_context) { + dev_dbg(&priv->usb->dev, "%s No free context\n", __func__); + spin_unlock_irqrestore(&priv->lock, flags); + return -ENOMEM; + } + + tx_context->skb = skb; + + spin_unlock_irqrestore(&priv->lock, flags); + + tx_buffer = (struct vnt_tx_buffer *)tx_context->data; + tx_buffer_head = &tx_buffer->fifo_head; + tx_body_size = skb->len; + + frame_size = tx_body_size + 4; + + /* Set time stamp */ + tx_buffer_head->time_stamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); + + /*Set fifo controls */ + if (pkt_type == PK_TYPE_11A) + tx_buffer_head->wFIFOCtl = 0; + else if (pkt_type == PK_TYPE_11B) + tx_buffer_head->wFIFOCtl = FIFOCTL_11B; + else if (pkt_type == PK_TYPE_11GB) + tx_buffer_head->wFIFOCtl = FIFOCTL_11GB; + else if (pkt_type == PK_TYPE_11GA) + tx_buffer_head->wFIFOCtl = FIFOCTL_11GA; + + if (!ieee80211_is_data(hdr->frame_control)) { + tx_buffer_head->wFIFOCtl |= (FIFOCTL_GENINT | + FIFOCTL_ISDMA0); + tx_buffer_head->wFIFOCtl |= FIFOCTL_TMOEN; + + tx_buffer_head->time_stamp = + cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); + } else { + tx_buffer_head->time_stamp = + cpu_to_le16(DEFAULT_MSDU_LIFETIME_RES_64us); + } + + if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { + tx_buffer_head->wFIFOCtl |= FIFOCTL_NEEDACK; + need_ack = true; + } + + if (ieee80211_has_retry(hdr->frame_control)) + tx_buffer_head->wFIFOCtl |= FIFOCTL_LRETRY; + + if (tx_rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) + priv->byPreambleType = PREAMBLE_SHORT; + else + priv->byPreambleType = PREAMBLE_LONG; + + if (tx_rate->flags & IEEE80211_TX_RC_USE_RTS_CTS) { + need_rts = true; + tx_buffer_head->wFIFOCtl |= FIFOCTL_RTS; + } + + if (ieee80211_has_a4(hdr->frame_control)) + tx_buffer_head->wFIFOCtl |= FIFOCTL_LHEAD; + + if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) + is_pspoll = true; + + tx_buffer_head->wFragCtl = + cpu_to_le16(ieee80211_get_hdrlen_from_skb(skb)) << 10; + + if (info->control.hw_key) { + tx_key = info->control.hw_key; + switch (info->control.hw_key->cipher) { + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: + tx_buffer_head->wFragCtl |= FRAGCTL_LEGACY; + break; + case WLAN_CIPHER_SUITE_TKIP: + tx_buffer_head->wFragCtl |= FRAGCTL_TKIP; + break; + case WLAN_CIPHER_SUITE_CCMP: + tx_buffer_head->wFragCtl |= FRAGCTL_AES; + need_mic = true; + default: + break; + } + frame_size += tx_key->icv_len; + } + + /* legacy rates TODO use ieee80211_tx_rate */ + if (current_rate >= RATE_18M && ieee80211_is_data(hdr->frame_control)) { + if (priv->byAutoFBCtrl == AUTO_FB_0) { + tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_0; + + priv->tx_rate_fb0 = + wFB_Opt0[FB_RATE0][current_rate - RATE_18M]; + priv->tx_rate_fb1 = + wFB_Opt0[FB_RATE1][current_rate - RATE_18M]; + + fb_option = AUTO_FB_0; + } else if (priv->byAutoFBCtrl == AUTO_FB_1) { + tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_1; + + priv->tx_rate_fb0 = + wFB_Opt1[FB_RATE0][current_rate - RATE_18M]; + priv->tx_rate_fb1 = + wFB_Opt1[FB_RATE1][current_rate - RATE_18M]; + + fb_option = AUTO_FB_1; + } + } + + duration_id = s_vGenerateTxParameter(tx_context, pkt_type, current_rate, + tx_buffer, &mic_hdr, need_mic, frame_size, + need_ack, NULL, need_rts); + + tx_header_size = tx_context->tx_hdr_size; + if (!tx_header_size) { + tx_context->in_use = false; + return -ENOMEM; + } + + tx_buffer_head->wFragCtl |= (u16)FRAGCTL_NONFRAG; + + tx_bytes = tx_header_size + tx_body_size; + + memcpy(tx_context->hdr, skb->data, tx_body_size); + + hdr->duration_id = cpu_to_le16(duration_id); + + if (info->control.hw_key) { + tx_key = info->control.hw_key; + if (tx_key->keylen > 0) + vnt_fill_txkey(tx_context, tx_buffer_head->tx_key, + tx_key, skb, tx_body_size, mic_hdr); + } + + priv->wSeqCounter = (le16_to_cpu(hdr->seq_ctrl) & + IEEE80211_SCTL_SEQ) >> 4; + + tx_buffer->tx_byte_count = cpu_to_le16(tx_bytes); + tx_buffer->byPKTNO = (u8)(((current_rate << 4) & 0xf0) | + (priv->wSeqCounter & 0xf)); + tx_buffer->byType = 0x00; + + tx_bytes += 4; + + tx_context->type = CONTEXT_DATA_PACKET; + tx_context->buf_len = tx_bytes; + + spin_lock_irqsave(&priv->lock, flags); + + if (PIPEnsSendBulkOut(priv, tx_context) != STATUS_PENDING) { + spin_unlock_irqrestore(&priv->lock, flags); + return -EIO; + } + + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static int vnt_beacon_xmit(struct vnt_private *priv, + struct sk_buff *skb) +{ + struct vnt_beacon_buffer *beacon_buffer; + struct vnt_tx_short_buf_head *short_head; + struct ieee80211_tx_info *info; + struct vnt_usb_send_context *context; + struct ieee80211_mgmt *mgmt_hdr; + unsigned long flags; + u32 frame_size = skb->len + 4; + u16 current_rate, count; + + spin_lock_irqsave(&priv->lock, flags); + + context = s_vGetFreeContext(priv); + if (!context) { + dev_dbg(&priv->usb->dev, "%s No free context!\n", __func__); + spin_unlock_irqrestore(&priv->lock, flags); + return -ENOMEM; + } + + context->skb = skb; + + spin_unlock_irqrestore(&priv->lock, flags); + + beacon_buffer = (struct vnt_beacon_buffer *)&context->data[0]; + short_head = &beacon_buffer->short_head; + + if (priv->byBBType == BB_TYPE_11A) { + current_rate = RATE_6M; + + /* Get SignalField,ServiceField,Length */ + vnt_get_phy_field(priv, frame_size, current_rate, + PK_TYPE_11A, &short_head->ab); + + /* Get Duration and TimeStampOff */ + short_head->duration = s_uGetDataDuration(priv, + PK_TYPE_11A, false); + short_head->time_stamp_off = + vnt_time_stamp_off(priv, current_rate); + } else { + current_rate = RATE_1M; + short_head->fifo_ctl |= FIFOCTL_11B; + + /* Get SignalField,ServiceField,Length */ + vnt_get_phy_field(priv, frame_size, current_rate, + PK_TYPE_11B, &short_head->ab); + + /* Get Duration and TimeStampOff */ + short_head->duration = s_uGetDataDuration(priv, + PK_TYPE_11B, false); + short_head->time_stamp_off = + vnt_time_stamp_off(priv, current_rate); + } + + /* Generate Beacon Header */ + mgmt_hdr = &beacon_buffer->mgmt_hdr; + memcpy(mgmt_hdr, skb->data, skb->len); + + /* time stamp always 0 */ + mgmt_hdr->u.beacon.timestamp = 0; + + info = IEEE80211_SKB_CB(skb); + if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)mgmt_hdr; + hdr->duration_id = 0; + hdr->seq_ctrl = cpu_to_le16(priv->wSeqCounter << 4); + } + + priv->wSeqCounter++; + if (priv->wSeqCounter > 0x0fff) + priv->wSeqCounter = 0; + + count = sizeof(struct vnt_tx_short_buf_head) + skb->len; + + beacon_buffer->tx_byte_count = cpu_to_le16(count); + beacon_buffer->byPKTNO = (u8)(((current_rate << 4) & 0xf0) | + ((priv->wSeqCounter - 1) & 0x000f)); + beacon_buffer->byType = 0x01; + + context->type = CONTEXT_BEACON_PACKET; + context->buf_len = count + 4; /* USB header */ + + spin_lock_irqsave(&priv->lock, flags); + + if (PIPEnsSendBulkOut(priv, context) != STATUS_PENDING) + ieee80211_free_txskb(priv->hw, context->skb); + + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +int vnt_beacon_make(struct vnt_private *priv, struct ieee80211_vif *vif) +{ + struct sk_buff *beacon; + + beacon = ieee80211_beacon_get(priv->hw, vif); + if (!beacon) + return -ENOMEM; + + if (vnt_beacon_xmit(priv, beacon)) { + ieee80211_free_txskb(priv->hw, beacon); + return -ENODEV; + } + + return 0; +} + +int vnt_beacon_enable(struct vnt_private *priv, struct ieee80211_vif *vif, + struct ieee80211_bss_conf *conf) +{ + int ret; + + vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX); + + vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + + vnt_mac_set_beacon_interval(priv, conf->beacon_int); + + vnt_clear_current_tsf(priv); + + vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + + vnt_reset_next_tbtt(priv, conf->beacon_int); + + ret = vnt_beacon_make(priv, vif); + + return ret; +} diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 95a4e2c6aa69..65f7e260fe4e 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -247,7 +247,7 @@ struct vnt_beacon_buffer { u8 byPKTNO; __le16 tx_byte_count; struct vnt_tx_short_buf_head short_head; - struct ieee80211_hdr hdr; + struct ieee80211_mgmt mgmt_hdr; } __packed; void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb); @@ -255,4 +255,9 @@ int nsDMA_tx_packet(struct vnt_private *, struct sk_buff *skb); CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *); CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *); +int vnt_tx_packet(struct vnt_private *, struct sk_buff *); +int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *); +int vnt_beacon_enable(struct vnt_private *, struct ieee80211_vif *, + struct ieee80211_bss_conf *); + #endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index e30150efbe43..fd8776c1a107 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -398,7 +398,7 @@ static void s_nsBulkOutIoCompleteWrite(struct urb *urb) { struct vnt_usb_send_context *context = urb->context; struct vnt_private *priv = context->priv; - u8 context_type = context->type; + struct ieee80211_tx_info *info; switch (urb->status) { case 0: @@ -415,24 +415,18 @@ static void s_nsBulkOutIoCompleteWrite(struct urb *urb) break; } - if (!netif_device_present(priv->dev)) - return; - - if (CONTEXT_DATA_PACKET == context_type) { - if (context->skb != NULL) { - dev_kfree_skb_irq(context->skb); - context->skb = NULL; - dev_dbg(&priv->usb->dev, - "tx %d bytes\n", context->buf_len); - } - - priv->dev->trans_start = jiffies; + if (context->skb) { + info = IEEE80211_SKB_CB(context->skb); + ieee80211_tx_info_clear_status(info); + info->status.rates[0].idx = priv->wCurrentRate; + info->status.rates[0].count = 0; + if (!urb->status) + info->flags |= IEEE80211_TX_STAT_ACK; + ieee80211_tx_status_irqsafe(priv->hw, context->skb); } - if (priv->bLinkPass == true) { - if (netif_queue_stopped(priv->dev)) - netif_wake_queue(priv->dev); - } + if (context->type == CONTEXT_DATA_PACKET) + ieee80211_wake_queues(priv->hw); context->in_use = false; -- cgit From d1eb5003d78cd791ff1f214163030e993d53f49b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:24 +0100 Subject: staging: vt6656: mac80211 conversion: add key functions Create vnt_key_init_table to replace KeyvInitTable. Create vnt_set_keymode to handle key setting operations with five different modes VNT_KEY_DEFAULTKEY, VNT_KEY_GROUP_ADDRESS, VNT_KEY_ALLGROUP, VNT_KEY_GROUP and VNT_KEY_PAIRWISE. VNT_KEY_ONFLY and VNT_KEY_ONFLY_ALL are for when key latching in driver is not required. Create vnt_set_keys to handle mac80211 key cipher modes, four modes are supported WLAN_CIPHER_SUITE_WEP40, WLAN_CIPHER_SUITE_WEP104, WLAN_CIPHER_SUITE_TKIP and WLAN_CIPHER_SUITE_CCMP. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/key.c | 143 ++++++++++++++++++++++++++++++++++++++++ drivers/staging/vt6656/key.h | 13 ++++ 3 files changed, 157 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 23fc5e2ef4dd..112e0b0308f8 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -631,6 +631,7 @@ struct vnt_private { u32 uKeyLength; u8 abyKey[WLAN_WEP232_KEYLEN]; + unsigned long key_entry_inuse; /* for AP mode */ u32 uAssocCount; diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 33e3e5aa76ac..351306695311 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -728,3 +728,146 @@ int KeybSetAllGroupKey(struct vnt_private *pDevice, PSKeyManagement pTable, } return (true); } + +int vnt_key_init_table(struct vnt_private *priv) +{ + int ret; + u8 i; + u8 data[MAX_KEY_TABLE]; + + for (i = 0; i < MAX_KEY_TABLE; i++) + data[i] = i; + + ret = vnt_control_out(priv, MESSAGE_TYPE_CLRKEYENTRY, + 0, 0, ARRAY_SIZE(data), data); + + return ret; +} + +static int vnt_set_keymode(struct ieee80211_hw *hw, u8 *mac_addr, + struct ieee80211_key_conf *key, u32 key_type, u32 mode, + bool onfly_latch) +{ + struct vnt_private *priv = hw->priv; + u8 broadcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + u16 key_mode = 0; + u32 entry = 0; + u8 *bssid; + u8 key_inx = key->keyidx; + u8 i; + + if (mac_addr) + bssid = mac_addr; + else + bssid = &broadcast[0]; + + if (key_type != VNT_KEY_DEFAULTKEY) { + for (i = 0; i < (MAX_KEY_TABLE - 1); i++) { + if (!test_bit(i, &priv->key_entry_inuse)) { + set_bit(i, &priv->key_entry_inuse); + + key->hw_key_idx = i; + entry = key->hw_key_idx; + break; + } + } + } + + switch (key_type) { + /* fallthrough */ + case VNT_KEY_DEFAULTKEY: + /* default key last entry */ + entry = MAX_KEY_TABLE - 1; + key->hw_key_idx = entry; + case VNT_KEY_ALLGROUP: + key_mode |= VNT_KEY_ALLGROUP; + if (onfly_latch) + key_mode |= VNT_KEY_ONFLY_ALL; + case VNT_KEY_GROUP_ADDRESS: + key_mode |= mode; + case VNT_KEY_GROUP: + key_mode |= (mode << 4); + key_mode |= VNT_KEY_GROUP; + break; + case VNT_KEY_PAIRWISE: + key_mode |= mode; + key_inx = 4; + break; + default: + return -EINVAL; + } + + if (onfly_latch) + key_mode |= VNT_KEY_ONFLY; + + if (mode == KEY_CTL_WEP) { + if (key->keylen == WLAN_KEY_LEN_WEP40) + key->key[15] &= 0x7f; + if (key->keylen == WLAN_KEY_LEN_WEP104) + key->key[15] |= 0x80; + } + + vnt_mac_set_keyentry(priv, key_mode, entry, key_inx, bssid, key->key); + + return 0; +} + +int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta, + struct ieee80211_vif *vif, struct ieee80211_key_conf *key) +{ + struct ieee80211_bss_conf *conf = &vif->bss_conf; + struct vnt_private *priv = hw->priv; + u8 *mac_addr = NULL; + u8 key_dec_mode = 0; + int ret = 0, u; + + if (sta) + mac_addr = &sta->addr[0]; + + switch (key->cipher) { + case 0: + for (u = 0 ; u < MAX_KEY_TABLE; u++) + vnt_mac_disable_keyentry(priv, u); + return ret; + + case WLAN_CIPHER_SUITE_WEP40: + case WLAN_CIPHER_SUITE_WEP104: + for (u = 0; u < MAX_KEY_TABLE; u++) + vnt_mac_disable_keyentry(priv, u); + + vnt_set_keymode(hw, mac_addr, key, VNT_KEY_DEFAULTKEY, + KEY_CTL_WEP, true); + + key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; + + return ret; + case WLAN_CIPHER_SUITE_TKIP: + key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; + key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; + + key_dec_mode = KEY_CTL_TKIP; + + break; + case WLAN_CIPHER_SUITE_CCMP: + if (priv->byLocalID <= MAC_REVISION_A1) + return -EINVAL; + + key_dec_mode = KEY_CTL_CCMP; + + key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; + } + + + if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) { + vnt_set_keymode(hw, mac_addr, key, VNT_KEY_PAIRWISE, + key_dec_mode, true); + } else { + vnt_set_keymode(hw, mac_addr, key, VNT_KEY_DEFAULTKEY, + key_dec_mode, true); + + vnt_set_keymode(hw, (u8 *)conf->bssid, key, + VNT_KEY_GROUP_ADDRESS, key_dec_mode, true); + } + + return 0; +} diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 23e188d125ba..7b8c96026076 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -51,6 +51,14 @@ #define KEY_CTL_CCMP 0x03 #define KEY_CTL_INVALID 0xFF +#define VNT_KEY_DEFAULTKEY 0x1 +#define VNT_KEY_GROUP_ADDRESS 0x2 +#define VNT_KEY_ALLGROUP 0x4 +#define VNT_KEY_GROUP 0x40 +#define VNT_KEY_PAIRWISE 0x00 +#define VNT_KEY_ONFLY 0x8000 +#define VNT_KEY_ONFLY_ALL 0x4000 + typedef struct tagSKeyItem { bool bKeyValid; @@ -109,4 +117,9 @@ int KeybSetAllGroupKey(struct vnt_private *, PSKeyManagement pTable, u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, u8 byKeyDecMode); +int vnt_key_init_table(struct vnt_private *); + +int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta, + struct ieee80211_vif *vif, struct ieee80211_key_conf *key); + #endif /* __KEY_H__ */ -- cgit From db8f37fa3355f249e34446eac0d08c1b89c2ed77 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:25 +0100 Subject: staging: vt6656: mac80211 conversion: main_usb add functions and change usb_driver functions Create new functions for the operations of mac80211 vnt_tx_80211 vnt_start vnt_stop vnt_add_interface vnt_remove_interface vnt_config vnt_bss_info_changed vnt_prepare_multicast vnt_configure vnt_set_key vnt_sw_scan_start vnt_sw_scan_complete vnt_get_tsf vnt_set_tsf vnt_reset_tsf Create vnt_init to call device_init_registers to get permanent mac address. This will be linked to vt6656_probe via bScheduleCommand in another patch as firmware needs to be loaded first. Modify vt6656_probe, vt6656_disconnect for mac80211 Change vt6656_suspend and vt6656_resume, nothing needs to be done here let mac80211 handle the suspend. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 3 + drivers/staging/vt6656/main_usb.c | 619 ++++++++++++++++++++++++++++++++------ 2 files changed, 522 insertions(+), 100 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 112e0b0308f8..46d7704a1e2b 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -396,6 +396,7 @@ typedef struct __device_opt { struct vnt_private { /* mac80211 */ struct ieee80211_hw *hw; + struct ieee80211_vif *vif; /* netdev */ struct usb_device *usb; struct net_device *dev; @@ -410,6 +411,7 @@ struct vnt_private { u8 rx_rate; u32 rx_buf_sz; + int mc_list_count; int multicast_limit; u8 byRxMode; @@ -574,6 +576,7 @@ struct vnt_private { int bRadioOff; /* Power save */ + u16 current_aid; int bEnablePSMode; u16 wListenInterval; int bPWBitOn; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ebbb10d8634d..6f66b8629df9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -572,36 +572,6 @@ static int device_init_registers(struct vnt_private *pDevice) return true; } -#ifdef CONFIG_PM /* Minimal support for suspend and resume */ - -static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) -{ - struct vnt_private *device = usb_get_intfdata(intf); - - if (!device || !device->dev) - return -ENODEV; - - if (device->flags & DEVICE_FLAGS_OPENED) - device_close(device->dev); - - return 0; -} - -static int vt6656_resume(struct usb_interface *intf) -{ - struct vnt_private *device = usb_get_intfdata(intf); - - if (!device || !device->dev) - return -ENODEV; - - if (!(device->flags & DEVICE_FLAGS_OPENED)) - device_open(device->dev); - - return 0; -} - -#endif /* CONFIG_PM */ - static const struct net_device_ops device_netdev_ops = { .ndo_open = device_open, .ndo_stop = device_close, @@ -611,69 +581,6 @@ static const struct net_device_ops device_netdev_ops = { .ndo_set_rx_mode = device_set_multi, }; -static int -vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) -{ - 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; - struct vnt_private *pDevice; - - printk(KERN_NOTICE "%s Ver. %s\n", DEVICE_FULL_DRV_NAM, DEVICE_VERSION); - printk(KERN_NOTICE "Copyright (c) 2004 VIA Networking Technologies, Inc.\n"); - - udev = usb_get_dev(udev); - netdev = alloc_etherdev(sizeof(struct vnt_private)); - if (!netdev) { - printk(KERN_ERR DEVICE_NAME ": allocate net device failed\n"); - rc = -ENOMEM; - goto err_nomem; - } - - pDevice = netdev_priv(netdev); - memset(pDevice, 0, sizeof(struct vnt_private)); - - pDevice->dev = netdev; - pDevice->usb = udev; - - device_set_options(pDevice); - spin_lock_init(&pDevice->lock); - mutex_init(&pDevice->usb_lock); - - INIT_DELAYED_WORK(&pDevice->run_command_work, vRunCommand); - INIT_DELAYED_WORK(&pDevice->second_callback_work, BSSvSecondCallBack); - INIT_WORK(&pDevice->read_work_item, RXvWorkItem); - INIT_WORK(&pDevice->rx_mng_work_item, RXvMngWorkItem); - - pDevice->vnt_mgmt.pAdapter = (void *) pDevice; - - netdev->netdev_ops = &device_netdev_ops; - netdev->wireless_handlers = - (struct iw_handler_def *) &iwctl_handler_def; - - usb_set_intfdata(intf, pDevice); - SET_NETDEV_DEV(netdev, &intf->dev); - memcpy(pDevice->dev->dev_addr, fake_mac, ETH_ALEN); - - usb_device_reset(pDevice); - - rc = register_netdev(netdev); - if (rc) { - printk(KERN_ERR DEVICE_NAME " Failed to register netdev\n"); - goto err_netdev; - } - - return 0; - -err_netdev: - free_netdev(netdev); -err_nomem: - usb_put_dev(udev); - - return rc; -} - static void device_free_tx_bufs(struct vnt_private *priv) { struct vnt_usb_send_context *tx_context; @@ -1043,24 +950,536 @@ static int device_close(struct net_device *dev) return 0; } +static void vnt_tx_80211(struct ieee80211_hw *hw, + struct ieee80211_tx_control *control, struct sk_buff *skb) +{ + struct vnt_private *priv = hw->priv; + + ieee80211_stop_queues(hw); + + if (vnt_tx_packet(priv, skb)) { + ieee80211_free_txskb(hw, skb); + + ieee80211_wake_queues(hw); + } +} + +static int vnt_start(struct ieee80211_hw *hw) +{ + struct vnt_private *priv = hw->priv; + + priv->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS; + + if (device_alloc_bufs(priv) == false) { + dev_dbg(&priv->usb->dev, "device_alloc_bufs fail...\n"); + return -ENOMEM; + } + + MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); + MP_SET_FLAG(priv, fMP_POST_READS); + MP_SET_FLAG(priv, fMP_POST_WRITES); + + if (device_init_registers(priv) == false) { + dev_dbg(&priv->usb->dev, " init register fail\n"); + goto free_all; + } + + priv->int_interval = 1; /* bInterval is set to 1 */ + + schedule_work(&priv->read_work_item); + INTvWorkItem(priv); + + priv->flags |= DEVICE_FLAGS_OPENED; + + ieee80211_wake_queues(hw); + + return 0; + +free_all: + device_free_rx_bufs(priv); + device_free_tx_bufs(priv); + device_free_int_bufs(priv); + + usb_kill_urb(priv->pInterruptURB); + usb_free_urb(priv->pInterruptURB); + + return -ENOMEM; +} + +static void vnt_stop(struct ieee80211_hw *hw) +{ + struct vnt_private *priv = hw->priv; + int i; + + if (!priv) + return; + + for (i = 0; i < MAX_KEY_TABLE; i++) + vnt_mac_disable_keyentry(priv, i); + + /* clear all keys */ + priv->key_entry_inuse = 0; + + if ((priv->flags & DEVICE_FLAGS_UNPLUG) == false) + vnt_mac_shutdown(priv); + + ieee80211_stop_queues(hw); + + MP_SET_FLAG(priv, fMP_DISCONNECTED); + MP_CLEAR_FLAG(priv, fMP_POST_WRITES); + MP_CLEAR_FLAG(priv, fMP_POST_READS); + + cancel_delayed_work_sync(&priv->run_command_work); + cancel_work_sync(&priv->read_work_item); + + priv->bCmdRunning = false; + + priv->flags &= ~DEVICE_FLAGS_OPENED; + + device_free_tx_bufs(priv); + device_free_rx_bufs(priv); + device_free_int_bufs(priv); + + usb_kill_urb(priv->pInterruptURB); + usb_free_urb(priv->pInterruptURB); + + return; +} + +static int vnt_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct vnt_private *priv = hw->priv; + + priv->vif = vif; + + switch (vif->type) { + case NL80211_IFTYPE_STATION: + break; + case NL80211_IFTYPE_ADHOC: + vnt_mac_reg_bits_off(priv, MAC_REG_RCR, RCR_UNICAST); + + vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_ADHOC); + + break; + case NL80211_IFTYPE_AP: + vnt_mac_reg_bits_off(priv, MAC_REG_RCR, RCR_UNICAST); + + vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_AP); + + break; + default: + return -EOPNOTSUPP; + } + + priv->op_mode = vif->type; + + /* LED blink on TX */ + vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_INTER); + + return 0; +} + +static void vnt_remove_interface(struct ieee80211_hw *hw, + struct ieee80211_vif *vif) +{ + struct vnt_private *priv = hw->priv; + + switch (vif->type) { + case NL80211_IFTYPE_STATION: + break; + case NL80211_IFTYPE_ADHOC: + vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + vnt_mac_reg_bits_off(priv, MAC_REG_HOSTCR, HOSTCR_ADHOC); + break; + case NL80211_IFTYPE_AP: + vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + vnt_mac_reg_bits_off(priv, MAC_REG_HOSTCR, HOSTCR_AP); + break; + default: + break; + } + + vnt_radio_power_off(priv); + + priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; + + /* LED slow blink */ + vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_SLOW); + + return; +} + +static int vnt_config(struct ieee80211_hw *hw, u32 changed) +{ + struct vnt_private *priv = hw->priv; + struct ieee80211_conf *conf = &hw->conf; + u8 bb_type; + + if (changed & IEEE80211_CONF_CHANGE_PS) { + if (conf->flags & IEEE80211_CONF_PS) + vnt_enable_power_saving(priv, conf->listen_interval); + else + vnt_disable_power_saving(priv); + } + + if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || + (conf->flags & IEEE80211_CONF_OFFCHANNEL)) { + vnt_set_channel(priv, conf->chandef.chan->hw_value); + + if (conf->chandef.chan->band == IEEE80211_BAND_5GHZ) + bb_type = BB_TYPE_11A; + else + bb_type = BB_TYPE_11G; + + if (priv->byBBType != bb_type) { + priv->byBBType = bb_type; + + vnt_set_bss_mode(priv); + } + } + + if (changed & IEEE80211_CONF_CHANGE_POWER) { + if (priv->byBBType == BB_TYPE_11B) + priv->wCurrentRate = RATE_1M; + else + priv->wCurrentRate = RATE_54M; + + vnt_rf_setpower(priv, priv->wCurrentRate, + conf->chandef.chan->hw_value); + } + + return 0; +} + +static void vnt_bss_info_changed(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, struct ieee80211_bss_conf *conf, + u32 changed) +{ + struct vnt_private *priv = hw->priv; + priv->current_aid = conf->aid; + + if (changed & BSS_CHANGED_BSSID) + vnt_mac_set_bssid_addr(priv, (u8 *)conf->bssid); + + + if (changed & BSS_CHANGED_BASIC_RATES) { + priv->wBasicRate = conf->basic_rates; + + vnt_update_top_rates(priv); + + dev_dbg(&priv->usb->dev, "basic rates %x\n", conf->basic_rates); + } + + if (changed & BSS_CHANGED_ERP_PREAMBLE) { + if (conf->use_short_preamble) { + vnt_mac_enable_barker_preamble_mode(priv); + priv->byPreambleType = true; + } else { + vnt_mac_disable_barker_preamble_mode(priv); + priv->byPreambleType = false; + } + } + + if (changed & BSS_CHANGED_ERP_CTS_PROT) { + if (conf->use_cts_prot) + vnt_mac_enable_protect_mode(priv); + else + vnt_mac_disable_protect_mode(priv); + } + + if (changed & BSS_CHANGED_ERP_SLOT) { + if (conf->use_short_slot) + priv->bShortSlotTime = true; + else + priv->bShortSlotTime = false; + + BBvSetShortSlotTime(priv); + BBvSetVGAGainOffset(priv, priv->abyBBVGA[0]); + BBvUpdatePreEDThreshold(priv, false); + } + + if (changed & BSS_CHANGED_TXPOWER) + vnt_rf_setpower(priv, priv->wCurrentRate, + conf->chandef.chan->hw_value); + + if (changed & BSS_CHANGED_BEACON_ENABLED) { + dev_dbg(&priv->usb->dev, + "Beacon enable %d\n", conf->enable_beacon); + + if (conf->enable_beacon) { + vnt_beacon_enable(priv, vif, conf); + + vnt_mac_reg_bits_on(priv, MAC_REG_TCR, TCR_AUTOBCNTX); + } else { + vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX); + } + } +} + +static u64 vnt_prepare_multicast(struct ieee80211_hw *hw, + struct netdev_hw_addr_list *mc_list) +{ + struct vnt_private *priv = hw->priv; + struct netdev_hw_addr *ha; + u64 mc_filter = 0; + u32 bit_nr = 0; + + netdev_hw_addr_list_for_each(ha, mc_list) { + bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; + + mc_filter |= 1ULL << (bit_nr & 0x3f); + } + + priv->mc_list_count = mc_list->count; + + return mc_filter; +} + +static void vnt_configure(struct ieee80211_hw *hw, + unsigned int changed_flags, unsigned int *total_flags, u64 multicast) +{ + struct vnt_private *priv = hw->priv; + u8 rx_mode = 0; + int rc; + + *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS | + FIF_BCN_PRBRESP_PROMISC; + + rc = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR, + MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode); + + if (!rc) + rx_mode = RCR_MULTICAST | RCR_BROADCAST; + + dev_dbg(&priv->usb->dev, "rx mode in = %x\n", rx_mode); + + if (changed_flags & FIF_PROMISC_IN_BSS) { + /* unconditionally log net taps */ + if (*total_flags & FIF_PROMISC_IN_BSS) + rx_mode |= RCR_UNICAST; + else + rx_mode &= ~RCR_UNICAST; + } + + if (changed_flags & FIF_ALLMULTI) { + if (*total_flags & FIF_ALLMULTI) { + if (priv->mc_list_count > 2) + vnt_mac_set_filter(priv, ~0); + else + vnt_mac_set_filter(priv, multicast); + + rx_mode |= RCR_MULTICAST | RCR_BROADCAST; + } else { + rx_mode &= ~(RCR_MULTICAST | RCR_BROADCAST); + } + + } + + if (changed_flags & (FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC)) { + if (*total_flags & (FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC)) + rx_mode &= ~RCR_BSSID; + else + rx_mode |= RCR_BSSID; + } + + vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_RCR, rx_mode); + + dev_dbg(&priv->usb->dev, "rx mode out= %x\n", rx_mode); + + return; +} + +static int vnt_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, + struct ieee80211_vif *vif, struct ieee80211_sta *sta, + struct ieee80211_key_conf *key) +{ + struct vnt_private *priv = hw->priv; + + switch (cmd) { + case SET_KEY: + if (vnt_set_keys(hw, sta, vif, key)) + return -EOPNOTSUPP; + break; + case DISABLE_KEY: + if (test_bit(key->hw_key_idx, &priv->key_entry_inuse)) + clear_bit(key->hw_key_idx, &priv->key_entry_inuse); + default: + break; + } + + return 0; +} + +static void vnt_sw_scan_start(struct ieee80211_hw *hw) +{ + struct vnt_private *priv = hw->priv; + + /* Set max sensitivity*/ + BBvUpdatePreEDThreshold(priv, true); +} + +static void vnt_sw_scan_complete(struct ieee80211_hw *hw) +{ + struct vnt_private *priv = hw->priv; + + /* Return sensitivity to channel level*/ + BBvUpdatePreEDThreshold(priv, false); +} + +static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct vnt_private *priv = hw->priv; + + return priv->qwCurrTSF; +} + +static void vnt_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + u64 tsf) +{ + struct vnt_private *priv = hw->priv; + + vnt_update_next_tbtt(priv, tsf, vif->bss_conf.beacon_int); +} + +static void vnt_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + struct vnt_private *priv = hw->priv; + + vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + + vnt_clear_current_tsf(priv); +} + +static const struct ieee80211_ops vnt_mac_ops = { + .tx = vnt_tx_80211, + .start = vnt_start, + .stop = vnt_stop, + .add_interface = vnt_add_interface, + .remove_interface = vnt_remove_interface, + .config = vnt_config, + .bss_info_changed = vnt_bss_info_changed, + .prepare_multicast = vnt_prepare_multicast, + .configure_filter = vnt_configure, + .set_key = vnt_set_key, + .sw_scan_start = vnt_sw_scan_start, + .sw_scan_complete = vnt_sw_scan_complete, + .get_tsf = vnt_get_tsf, + .set_tsf = vnt_set_tsf, + .reset_tsf = vnt_reset_tsf, +}; + +int vnt_init(struct vnt_private *priv) +{ + + if (!(device_init_registers(priv))) + return -EAGAIN; + + SET_IEEE80211_PERM_ADDR(priv->hw, priv->abyPermanentNetAddr); + + if (ieee80211_register_hw(priv->hw)) + return -ENODEV; + + return 0; +} + +static int +vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) +{ + struct usb_device *udev; + struct vnt_private *priv; + struct ieee80211_hw *hw; + struct wiphy *wiphy; + int rc = 0; + + udev = usb_get_dev(interface_to_usbdev(intf)); + + dev_notice(&udev->dev, "%s Ver. %s\n", + DEVICE_FULL_DRV_NAM, DEVICE_VERSION); + dev_notice(&udev->dev, + "Copyright (c) 2004 VIA Networking Technologies, Inc.\n"); + + hw = ieee80211_alloc_hw(sizeof(struct vnt_private), &vnt_mac_ops); + if (!hw) { + dev_err(&udev->dev, "could not register ieee80211_hw\n"); + goto err_nomem; + } + + priv = hw->priv; + priv->hw = hw; + priv->usb = udev; + + device_set_options(priv); + + spin_lock_init(&priv->lock); + mutex_init(&priv->usb_lock); + + INIT_DELAYED_WORK(&priv->run_command_work, vRunCommand); + INIT_WORK(&priv->read_work_item, RXvWorkItem); + + priv->vnt_mgmt.pAdapter = priv; + + usb_set_intfdata(intf, priv); + + wiphy = priv->hw->wiphy; + + wiphy->frag_threshold = FRAG_THRESH_DEF; + wiphy->rts_threshold = RTS_THRESH_DEF; + wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | + BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP); + + priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | + IEEE80211_HW_REPORTS_TX_ACK_STATUS | + IEEE80211_HW_SIGNAL_DBM | + IEEE80211_HW_TIMING_BEACON_ONLY; + + priv->hw->rate_control_algorithm = "pid"; + priv->hw->max_signal = 100; + + SET_IEEE80211_DEV(priv->hw, &intf->dev); + + usb_device_reset(priv); + + return 0; + +err_nomem: + usb_put_dev(udev); + + return rc; +} + static void vt6656_disconnect(struct usb_interface *intf) { - struct vnt_private *device = usb_get_intfdata(intf); + struct vnt_private *priv = usb_get_intfdata(intf); - if (!device) + if (!priv) return; + ieee80211_unregister_hw(priv->hw); + usb_set_intfdata(intf, NULL); usb_put_dev(interface_to_usbdev(intf)); - device->flags |= DEVICE_FLAGS_UNPLUG; + priv->flags |= DEVICE_FLAGS_UNPLUG; - if (device->dev) { - unregister_netdev(device->dev); - free_netdev(device->dev); - } + ieee80211_free_hw(priv->hw); +} + +#ifdef CONFIG_PM + +static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) +{ + return 0; } +static int vt6656_resume(struct usb_interface *intf) +{ + return 0; +} + +#endif /* CONFIG_PM */ + static int device_xmit(struct sk_buff *skb, struct net_device *dev) { struct vnt_private *pDevice = netdev_priv(dev); -- cgit From 110f97e937476d56d595805c7bf5b98260468ea2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:26 +0100 Subject: staging: vt6656: mac80211 conversion: add channel bands Add rates and channels according to rf type for vnt_init_bands which is a mac80211 replacement for CHvInitChannelTable. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/channel.c | 139 ++++++++++++++++++++++++++++++++++++++ drivers/staging/vt6656/channel.h | 2 + drivers/staging/vt6656/main_usb.c | 2 + 3 files changed, 143 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 5a4fa0e2581b..29c2ed32b6a8 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -36,6 +36,8 @@ #include #include "country.h" +#include "device.h" +#include "datarate.h" #include "channel.h" #include "rf.h" @@ -471,3 +473,140 @@ void CHvInitChannelTable(struct vnt_private *pDevice) }*/ } } + +static struct ieee80211_rate vnt_rates_bg[] = { + { .bitrate = 10, .hw_value = RATE_1M }, + { .bitrate = 20, .hw_value = RATE_2M }, + { .bitrate = 55, .hw_value = RATE_5M }, + { .bitrate = 110, .hw_value = RATE_11M }, + { .bitrate = 60, .hw_value = RATE_6M }, + { .bitrate = 90, .hw_value = RATE_9M }, + { .bitrate = 120, .hw_value = RATE_12M }, + { .bitrate = 180, .hw_value = RATE_18M }, + { .bitrate = 240, .hw_value = RATE_24M }, + { .bitrate = 360, .hw_value = RATE_36M }, + { .bitrate = 480, .hw_value = RATE_48M }, + { .bitrate = 540, .hw_value = RATE_54M }, +}; + +static struct ieee80211_rate vnt_rates_a[] = { + { .bitrate = 60, .hw_value = RATE_6M }, + { .bitrate = 90, .hw_value = RATE_9M }, + { .bitrate = 120, .hw_value = RATE_12M }, + { .bitrate = 180, .hw_value = RATE_18M }, + { .bitrate = 240, .hw_value = RATE_24M }, + { .bitrate = 360, .hw_value = RATE_36M }, + { .bitrate = 480, .hw_value = RATE_48M }, + { .bitrate = 540, .hw_value = RATE_54M }, +}; + +static struct ieee80211_channel vnt_channels_2ghz[] = { + { .center_freq = 2412, .hw_value = 1 }, + { .center_freq = 2417, .hw_value = 2 }, + { .center_freq = 2422, .hw_value = 3 }, + { .center_freq = 2427, .hw_value = 4 }, + { .center_freq = 2432, .hw_value = 5 }, + { .center_freq = 2437, .hw_value = 6 }, + { .center_freq = 2442, .hw_value = 7 }, + { .center_freq = 2447, .hw_value = 8 }, + { .center_freq = 2452, .hw_value = 9 }, + { .center_freq = 2457, .hw_value = 10 }, + { .center_freq = 2462, .hw_value = 11 }, + { .center_freq = 2467, .hw_value = 12 }, + { .center_freq = 2472, .hw_value = 13 }, + { .center_freq = 2484, .hw_value = 14 } +}; + +static struct ieee80211_channel vnt_channels_5ghz[] = { + { .center_freq = 4915, .hw_value = 15 }, + { .center_freq = 4920, .hw_value = 16 }, + { .center_freq = 4925, .hw_value = 17 }, + { .center_freq = 4935, .hw_value = 18 }, + { .center_freq = 4940, .hw_value = 19 }, + { .center_freq = 4945, .hw_value = 20 }, + { .center_freq = 4960, .hw_value = 21 }, + { .center_freq = 4980, .hw_value = 22 }, + { .center_freq = 5035, .hw_value = 23 }, + { .center_freq = 5040, .hw_value = 24 }, + { .center_freq = 5045, .hw_value = 25 }, + { .center_freq = 5055, .hw_value = 26 }, + { .center_freq = 5060, .hw_value = 27 }, + { .center_freq = 5080, .hw_value = 28 }, + { .center_freq = 5170, .hw_value = 29 }, + { .center_freq = 5180, .hw_value = 30 }, + { .center_freq = 5190, .hw_value = 31 }, + { .center_freq = 5200, .hw_value = 32 }, + { .center_freq = 5210, .hw_value = 33 }, + { .center_freq = 5220, .hw_value = 34 }, + { .center_freq = 5230, .hw_value = 35 }, + { .center_freq = 5240, .hw_value = 36 }, + { .center_freq = 5260, .hw_value = 37 }, + { .center_freq = 5280, .hw_value = 38 }, + { .center_freq = 5300, .hw_value = 39 }, + { .center_freq = 5320, .hw_value = 40 }, + { .center_freq = 5500, .hw_value = 41 }, + { .center_freq = 5520, .hw_value = 42 }, + { .center_freq = 5540, .hw_value = 43 }, + { .center_freq = 5560, .hw_value = 44 }, + { .center_freq = 5580, .hw_value = 45 }, + { .center_freq = 5600, .hw_value = 46 }, + { .center_freq = 5620, .hw_value = 47 }, + { .center_freq = 5640, .hw_value = 48 }, + { .center_freq = 5660, .hw_value = 49 }, + { .center_freq = 5680, .hw_value = 50 }, + { .center_freq = 5700, .hw_value = 51 }, + { .center_freq = 5745, .hw_value = 52 }, + { .center_freq = 5765, .hw_value = 53 }, + { .center_freq = 5785, .hw_value = 54 }, + { .center_freq = 5805, .hw_value = 55 }, + { .center_freq = 5825, .hw_value = 56 } +}; + +static struct ieee80211_supported_band vnt_supported_2ghz_band = { + .channels = vnt_channels_2ghz, + .n_channels = ARRAY_SIZE(vnt_channels_2ghz), + .bitrates = vnt_rates_bg, + .n_bitrates = ARRAY_SIZE(vnt_rates_bg), +}; + +static struct ieee80211_supported_band vnt_supported_5ghz_band = { + .channels = vnt_channels_5ghz, + .n_channels = ARRAY_SIZE(vnt_channels_5ghz), + .bitrates = vnt_rates_a, + .n_bitrates = ARRAY_SIZE(vnt_rates_a), +}; + +void vnt_init_bands(struct vnt_private *priv) +{ + struct ieee80211_channel *ch; + int i; + + switch (priv->byRFType) { + case RF_AIROHA7230: + case RF_VT3342A0: + ch = vnt_channels_5ghz; + + for (i = 0; i < ARRAY_SIZE(vnt_channels_5ghz); i++) { + ch[i].max_power = VNT_RF_MAX_POWER; + ch[i].flags = IEEE80211_CHAN_NO_HT40; + } + + priv->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = + &vnt_supported_5ghz_band; + /* fallthrough */ + case RF_AL2230: + case RF_AL2230S: + case RF_VT3226: + case RF_VT3226D0: + ch = vnt_channels_2ghz; + + for (i = 0; i < ARRAY_SIZE(vnt_channels_2ghz); i++) { + ch[i].max_power = VNT_RF_MAX_POWER; + ch[i].flags = IEEE80211_CHAN_NO_HT40; + } + + priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = + &vnt_supported_2ghz_band; + break; + } +} diff --git a/drivers/staging/vt6656/channel.h b/drivers/staging/vt6656/channel.h index 95701e0cbee3..0d5222525122 100644 --- a/drivers/staging/vt6656/channel.h +++ b/drivers/staging/vt6656/channel.h @@ -41,4 +41,6 @@ typedef struct tagSChannelTblElement { bool ChannelValid(unsigned int CountryCode, unsigned int ChannelNum); void CHvInitChannelTable(struct vnt_private *pDevice); +void vnt_init_bands(struct vnt_private *); + #endif /* _CHANNEL_H_ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 6f66b8629df9..663ea0cade22 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1378,6 +1378,8 @@ int vnt_init(struct vnt_private *priv) SET_IEEE80211_PERM_ADDR(priv->hw, priv->abyPermanentNetAddr); + vnt_init_bands(priv); + if (ieee80211_register_hw(priv->hw)) return -ENODEV; -- cgit From 30816f838a6589a76bca6d2afd73cafd02343429 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:27 +0100 Subject: staging: vt6656: mac80211 conversion: add vnt_init to bScheduleCommand start driver by linking vnt_init to vt6656_probe use bScheduleCommand to schedule new command WLAN_CMD_INIT_MAC80211 vResetCommandTimer is now used to initiate command timer. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 ++ drivers/staging/vt6656/main_usb.c | 10 +++++++++- drivers/staging/vt6656/wcmd.c | 19 +++++++++++++++++-- drivers/staging/vt6656/wcmd.h | 2 ++ 4 files changed, 30 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 46d7704a1e2b..46584c76bcdf 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -397,6 +397,7 @@ struct vnt_private { /* mac80211 */ struct ieee80211_hw *hw; struct ieee80211_vif *vif; + u8 mac_hw; /* netdev */ struct usb_device *usb; struct net_device *dev; @@ -744,5 +745,6 @@ struct vnt_private { int device_alloc_frag_buf(struct vnt_private *, PSDeFragControlBlock pDeF); void vnt_configure_filter(struct vnt_private *); +int vnt_init(struct vnt_private *priv); #endif diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 663ea0cade22..ee63390b980b 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1383,6 +1383,8 @@ int vnt_init(struct vnt_private *priv) if (ieee80211_register_hw(priv->hw)) return -ENODEV; + priv->mac_hw = true; + return 0; } @@ -1443,6 +1445,11 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) usb_device_reset(priv); + MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); + vResetCommandTimer(priv); + + bScheduleCommand(priv, WLAN_CMD_INIT_MAC80211, NULL); + return 0; err_nomem: @@ -1458,7 +1465,8 @@ static void vt6656_disconnect(struct usb_interface *intf) if (!priv) return; - ieee80211_unregister_hw(priv->hw); + if (priv->mac_hw) + ieee80211_unregister_hw(priv->hw); usb_set_intfdata(intf, NULL); usb_put_dev(interface_to_usbdev(intf)); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 4c3790857d3d..85adc1cd33c1 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -287,7 +287,20 @@ void vRunCommand(struct work_struct *work) return; switch (pDevice->eCommandState) { + case WLAN_CMD_INIT_MAC80211_START: + if (pDevice->mac_hw) + break; + + dev_info(&pDevice->usb->dev, "Starting mac80211\n"); + + if (vnt_init(pDevice)) { + /* If fail all ends TODO retry */ + dev_err(&pDevice->usb->dev, "failed to start\n"); + ieee80211_free_hw(pDevice->hw); + return; + } + break; case WLAN_CMD_SCAN_START: pDevice->byReAssocCount = 0; @@ -915,6 +928,10 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->cbFreeCmdQueue++; pDevice->bCmdRunning = true; switch (pDevice->eCommand) { + case WLAN_CMD_INIT_MAC80211: + pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; + break; + case WLAN_CMD_BSSID_SCAN: DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState= WLAN_CMD_BSSID_SCAN\n"); pDevice->eCommandState = WLAN_CMD_SCAN_START; @@ -1083,8 +1100,6 @@ static int s_bClearBSSID_SCAN(struct vnt_private *pDevice) //mike add:reset command timer void vResetCommandTimer(struct vnt_private *pDevice) { - cancel_delayed_work_sync(&pDevice->run_command_work); - pDevice->cbFreeCmdQueue = CMD_Q_SIZE; pDevice->uCmdDequeueIdx = 0; pDevice->uCmdEnqueueIdx = 0; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 736572101bad..894eea16e378 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -37,6 +37,7 @@ // Command code typedef enum tagCMD_CODE { + WLAN_CMD_INIT_MAC80211, WLAN_CMD_BSSID_SCAN, WLAN_CMD_SSID, WLAN_CMD_DISASSOCIATE, @@ -78,6 +79,7 @@ typedef struct tagCMD_ITEM { // Command state typedef enum tagCMD_STATE { + WLAN_CMD_INIT_MAC80211_START, WLAN_CMD_SCAN_START, WLAN_CMD_SCAN_END, WLAN_CMD_DISASSOCIATE_START, -- cgit From ee61fde2074fbcc7575e52206aba67853e0e56cc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:28 +0100 Subject: staging: vt6656: mac80211 conversion: vnt_update_ifs change basic rates Use wBasicRate to find ofdm_rate. wBasicRate is changed to u32 to match struct ieee80211_bss_conf -> basic_rates Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 22 ++-------------------- drivers/staging/vt6656/device.h | 2 +- 2 files changed, 3 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 8be3a89d5a68..1b3e0af156ec 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -402,10 +402,8 @@ void vnt_update_ifs(struct vnt_private *priv) priv->uCwMin = C_CWMIN_B; max_min = 5; } else {/* PK_TYPE_11GA & PK_TYPE_11GB */ - u8 rate = 0; bool ofdm_rate = false; unsigned int ii = 0; - PWLAN_IE_SUPP_RATES item_rates = NULL; priv->uSIFS = C_SIFS_BG; @@ -416,29 +414,13 @@ void vnt_update_ifs(struct vnt_private *priv) priv->uDIFS = C_SIFS_BG + 2 * priv->uSlot; - item_rates = - (PWLAN_IE_SUPP_RATES)priv->vnt_mgmt.abyCurrSuppRates; - - for (ii = 0; ii < item_rates->len; ii++) { - rate = (u8)(item_rates->abyRates[ii] & 0x7f); - if (RATEwGetRateIdx(rate) > RATE_11M) { + for (ii = RATE_54M; ii >= RATE_6M; ii--) { + if (priv->wBasicRate & ((u32)(0x1 << ii))) { ofdm_rate = true; break; } } - if (ofdm_rate == false) { - item_rates = (PWLAN_IE_SUPP_RATES)priv->vnt_mgmt - .abyCurrExtSuppRates; - for (ii = 0; ii < item_rates->len; ii++) { - rate = (u8)(item_rates->abyRates[ii] & 0x7f); - if (RATEwGetRateIdx(rate) > RATE_11M) { - ofdm_rate = true; - break; - } - } - } - if (ofdm_rate == true) { priv->uCwMin = C_CWMIN_A; max_min = 4; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 46584c76bcdf..2bd9830e9264 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -522,7 +522,7 @@ struct vnt_private { /* Rate */ u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ u8 byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ - u16 wBasicRate; + u32 wBasicRate; u8 byTopOFDMBasicRate; u8 byTopCCKBasicRate; -- cgit From bbdf1bd4d85ba641eeff57ba46eec3bc4af5d322 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:29 +0100 Subject: staging: vt6656: mac80211 conversion: enable power saving Convert vnt_enable_power_saving and vnt_disable_power_saving Remove mgmt->wCurrAID and use priv->current_aid We nolonger send the PSbSendNullPacket from vnt_enable_power_saving Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index cc281922b30c..6c34d365b93e 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -60,8 +60,7 @@ static int msglevel = MSG_LEVEL_INFO; void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) { - struct vnt_manager *mgmt = &priv->vnt_mgmt; - u16 aid = mgmt->wCurrAID | BIT14 | BIT15; + u16 aid = priv->current_aid | BIT(14) | BIT(15); /* set period of power up before TBTT */ vnt_mac_write_word(priv, MAC_REG_PWBT, C_PWBT); @@ -92,26 +91,12 @@ void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) /* first time set listen next beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); - - mgmt->wCountToWakeUp = listen_interval; - } else { /* always listen beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); - - mgmt->wCountToWakeUp = 0; } - priv->bEnablePSMode = true; - - /* We don't send null pkt in ad hoc mode - * since beacon will handle this. - */ - if (priv->op_mode == NL80211_IFTYPE_STATION) - PSbSendNullPacket(priv); - - priv->bPWBitOn = true; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable...\n"); } @@ -137,12 +122,6 @@ void vnt_disable_power_saving(struct vnt_private *priv) /* set always listen beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); - priv->bEnablePSMode = false; - - if (priv->op_mode == NL80211_IFTYPE_STATION) - PSbSendNullPacket(priv); - - priv->bPWBitOn = false; } /* -- cgit From f31a67ae11b02638eb53838015f62c6aaff634ee Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:30 +0100 Subject: staging: vt6656: mac80211 conversion: vRunCommand change beacon Remove bMgrPrepareBeaconToSend Check that vif is not null Call vnt_beacon_make and turn on TCR_AUTOBCNTX. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 85adc1cd33c1..3095689094fe 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -843,7 +843,13 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_BECON_SEND_START: - bMgrPrepareBeaconToSend(pDevice, pMgmt); + if (!pDevice->vif) + break; + + vnt_beacon_make(pDevice, pDevice->vif); + + vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + break; case WLAN_CMD_SETPOWER_START: -- cgit From f7c7f7f268b7aeee6ae5352596078ee6bf21d2fe Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:31 +0100 Subject: staging: vt6656: mac80211 conversion: change vnt_next_tbtt_wakeup Wake up to listen to next beacon when struct ieee80211_conf -> listen_interval == 1 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 6c34d365b93e..ace0cba79dc5 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -293,25 +293,15 @@ int PSbSendNullPacket(struct vnt_private *pDevice) int vnt_next_tbtt_wakeup(struct vnt_private *priv) { - struct vnt_manager *mgmt = &priv->vnt_mgmt; + struct ieee80211_hw *hw = priv->hw; + struct ieee80211_conf *conf = &hw->conf; int wake_up = false; - if (mgmt->wListenInterval >= 2) { - if (mgmt->wCountToWakeUp == 0) - mgmt->wCountToWakeUp = mgmt->wListenInterval; - - mgmt->wCountToWakeUp--; - - if (mgmt->wCountToWakeUp == 1) { - /* Turn on wake up to listen next beacon */ - vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); - priv->bPSRxBeacon = false; - wake_up = true; - } else if (!priv->bPSRxBeacon) { - /* Listen until RxBeacon */ - vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); - } + if (conf->listen_interval == 1) { + /* Turn on wake up to listen next beacon */ + vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); + wake_up = true; } + return wake_up; } - -- cgit From c224642097e4a54f4e618e46777cc28e12498559 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:32 +0100 Subject: staging: vt6656: mac80211 conversion: int.c changes Remove BSSvUpdateNodeTxCounter which is not used. net_device_stats and wsats will be removed later. Change handling of ISR_BNTX to mac80211 Change handling of ISR_TBTT. Use IEEE80211_CONF_PS for WLAN_CMD_TBTT_WAKEUP disable bChannelSwitch this is yet to be done. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 49 ++++++-------------------------------------- 1 file changed, 6 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index f2a5225b50f8..b717ace55cd2 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -80,7 +80,6 @@ void INTvWorkItem(struct vnt_private *pDevice) void INTnsProcessData(struct vnt_private *priv) { struct vnt_interrupt_data *int_data; - struct vnt_manager *mgmt = &priv->vnt_mgmt; struct net_device_stats *stats = &priv->stats; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); @@ -92,10 +91,6 @@ void INTnsProcessData(struct vnt_private *priv) priv->wstats.discard.retries++; else stats->tx_packets++; - - BSSvUpdateNodeTxCounter(priv, - int_data->tsr0, - int_data->pkt0); } if (int_data->tsr1 & TSR_VALID) { @@ -103,11 +98,6 @@ void INTnsProcessData(struct vnt_private *priv) priv->wstats.discard.retries++; else stats->tx_packets++; - - - BSSvUpdateNodeTxCounter(priv, - int_data->tsr1, - int_data->pkt1); } if (int_data->tsr2 & TSR_VALID) { @@ -115,10 +105,6 @@ void INTnsProcessData(struct vnt_private *priv) priv->wstats.discard.retries++; else stats->tx_packets++; - - BSSvUpdateNodeTxCounter(priv, - int_data->tsr2, - int_data->pkt2); } if (int_data->tsr3 & TSR_VALID) { @@ -126,43 +112,19 @@ void INTnsProcessData(struct vnt_private *priv) priv->wstats.discard.retries++; else stats->tx_packets++; - - BSSvUpdateNodeTxCounter(priv, - int_data->tsr3, - int_data->pkt3); } if (int_data->isr0 != 0) { - if (int_data->isr0 & ISR_BNTX) { - if (priv->op_mode == NL80211_IFTYPE_AP) { - if (mgmt->byDTIMCount > 0) { - mgmt->byDTIMCount--; - mgmt->sNodeDBTable[0].bRxPSPoll = - false; - } else if (mgmt->byDTIMCount == 0) { - /* check if multicast tx buffering */ - mgmt->byDTIMCount = - mgmt->byDTIMPeriod-1; - mgmt->sNodeDBTable[0].bRxPSPoll = true; - if (mgmt->sNodeDBTable[0].bPSEnable) - bScheduleCommand((void *) priv, - WLAN_CMD_RX_PSPOLL, - NULL); - } - bScheduleCommand((void *) priv, - WLAN_CMD_BECON_SEND, - NULL); - } - priv->bBeaconSent = true; - } else { - priv->bBeaconSent = false; - } + if (int_data->isr0 & ISR_BNTX && + priv->op_mode == NL80211_IFTYPE_AP) + bScheduleCommand(priv, WLAN_CMD_BECON_SEND, NULL); if (int_data->isr0 & ISR_TBTT) { - if (priv->bEnablePSMode) + if (priv->hw->conf.flags & IEEE80211_CONF_PS) bScheduleCommand((void *) priv, WLAN_CMD_TBTT_WAKEUP, NULL); +#if 0 /* TODO channel switch */ if (priv->bChannelSwitch) { priv->byChannelSwitchCount--; if (priv->byChannelSwitchCount == 0) @@ -170,6 +132,7 @@ void INTnsProcessData(struct vnt_private *priv) WLAN_CMD_11H_CHSW, NULL); } +#endif } priv->qwCurrTSF = le64_to_cpu(int_data->tsf); } -- cgit From 63e754d407949a7b80ce4398b7c66e3d2edd2990 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:33 +0100 Subject: staging: vt6656: mac80211 conversion: vRunCommand channel changes pDevice->hw->conf.chandef.chan->hw_value to find current channel Remove bChannelSwitch, uCurrChannel, byNewChannel and bStopDataPkt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 3095689094fe..81a6683f3b58 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -855,7 +855,7 @@ void vRunCommand(struct work_struct *work) case WLAN_CMD_SETPOWER_START: vnt_rf_setpower(pDevice, pDevice->wCurrentRate, - pMgmt->uCurrChannel); + pDevice->hw->conf.chandef.chan->hw_value); break; @@ -895,10 +895,7 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_11H_CHSW_START: - vnt_set_channel(pDevice, pDevice->byNewChannel); - pDevice->bChannelSwitch = false; - pMgmt->uCurrChannel = pDevice->byNewChannel; - pDevice->bStopDataPkt = false; + vnt_set_channel(pDevice, pDevice->hw->conf.chandef.chan->hw_value); break; case WLAN_CMD_CONFIGURE_FILTER_START: -- cgit From f07e9fb23d119dabb7e377cf592bfc584a31da30 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:34 +0100 Subject: staging: vt6656: mac80211 conversion: move data rates to device.h Move all RATE_* macros to device.h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/datarate.h | 14 -------------- drivers/staging/vt6656/device.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index 96252adf1ea6..19b2c6646b75 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -39,20 +39,6 @@ #define RETRY_TIMES_THRD_H 2 /* times */ #define RETRY_TIMES_THRD_L 1 /* times */ -#define RATE_1M 0 -#define RATE_2M 1 -#define RATE_5M 2 -#define RATE_11M 3 -#define RATE_6M 4 -#define RATE_9M 5 -#define RATE_12M 6 -#define RATE_18M 7 -#define RATE_24M 8 -#define RATE_36M 9 -#define RATE_48M 10 -#define RATE_54M 11 -#define RATE_AUTO 12 - void RATEvParseMaxRate(struct vnt_private *, PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, int bUpdateBasicRate, u16 *pwMaxBasicRate, u16 *pwMaxSuppRate, u16 *pwSuppRate, diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 2bd9830e9264..6696365916bb 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -53,6 +53,20 @@ #undef DEVICE_ETHTOOL_IOCTL_SUPPORT #endif +#define RATE_1M 0 +#define RATE_2M 1 +#define RATE_5M 2 +#define RATE_11M 3 +#define RATE_6M 4 +#define RATE_9M 5 +#define RATE_12M 6 +#define RATE_18M 7 +#define RATE_24M 8 +#define RATE_36M 9 +#define RATE_48M 10 +#define RATE_54M 11 +#define RATE_AUTO 12 + #define MAX_RATE 12 /* -- cgit From a23d8a70327292e4a2af453a1efa5580cdecd874 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:35 +0100 Subject: staging: vt6656: mac80211 conversion: change vnt_rf_set_txpower Remove old eScanState code and use. priv->hw->conf.chandef.chan->hw_value to find current channel Check hw_value for bounds of vt3226d0_lo_current_table Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 3f54ae3cfb4e..6bfd27234080 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -891,6 +891,8 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) return false; if (rate <= RATE_11M) { + u16 hw_value = priv->hw->conf.chandef.chan->hw_value; + power_setting = ((0x3f-priv->byCurPwr) << 20) | (0xe07 << 8) | (BY_VT3226_REG_LEN << 3) | IFREGCTL_REGW; @@ -899,21 +901,14 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) ret &= vnt_rf_write_embedded(priv, 0x03c6a200 + (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); - if (priv->vnt_mgmt.eScanState != WMAC_NO_SCANNING) { - dev_dbg(&priv->usb->dev, - "vnt_rf_set_txpower> 11B mode uCurrChannel[%d]\n", - priv->vnt_mgmt.uScanChannel); - ret &= vnt_rf_write_embedded(priv, - vt3226d0_lo_current_table[priv-> - vnt_mgmt.uScanChannel - 1]); - } else { - dev_dbg(&priv->usb->dev, - "vnt_rf_set_txpower> 11B mode uCurrChannel[%d]\n", - priv->vnt_mgmt.uCurrChannel); + dev_dbg(&priv->usb->dev, + "%s 11b channel [%d]\n", __func__, hw_value); + + hw_value--; + + if (hw_value < ARRAY_SIZE(vt3226d0_lo_current_table)) ret &= vnt_rf_write_embedded(priv, - vt3226d0_lo_current_table[priv-> - vnt_mgmt.uCurrChannel - 1]); - } + vt3226d0_lo_current_table[hw_value]); ret &= vnt_rf_write_embedded(priv, 0x015C0800 + (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); -- cgit From 9c45ce848fa3ca2f4f80bc8c0d0993843806683b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:36 +0100 Subject: staging: vt6656: vnt_mac_set_keyentry remove byLocalID check This is now set in vnt_set_keys. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index b06436fdfbdd..a60240c1e15a 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -125,10 +125,6 @@ void vnt_mac_set_keyentry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx, struct vnt_mac_set_key set_key; u16 offset; - if (priv->byLocalID <= MAC_REVISION_A1) - if (priv->vnt_mgmt.byCSSPK == KEY_CTL_CCMP) - return; - offset = MISCFIFO_KEYETRY0; offset += (entry_idx * MISCFIFO_KEYENTRYSIZE); -- cgit From 31580eb5c3183fd3f537924653e8b1788cd43fd7 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:37 +0100 Subject: staging: vt6656: mac80211 conversion: device_alloc_bufs use dev_err priv->dev->name is now null change to dev_err Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ee63390b980b..5cc3d42c7e4a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -650,9 +650,8 @@ static bool device_alloc_bufs(struct vnt_private *priv) tx_context = kmalloc(sizeof(struct vnt_usb_send_context), GFP_KERNEL); if (tx_context == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR - "%s : allocate tx usb context failed\n", - priv->dev->name); + dev_err(&priv->usb->dev, + "allocate tx usb context failed\n"); goto free_tx; } @@ -674,9 +673,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) priv->pRCBMem = kzalloc((sizeof(struct vnt_rcb) * priv->cbRD), GFP_KERNEL); if (priv->pRCBMem == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR - "%s : alloc rx usb context failed\n", - priv->dev->name); + dev_err(&priv->usb->dev, "alloc rx usb context failed\n"); goto free_tx; } -- cgit From 893cc709b20df580b3428e807ac2efa491788e13 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:14:38 +0100 Subject: staging: vt6656: mac80211 conversion: rxtx implement power save poll Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7f7c13aaf6b0..c3d47789c2af 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -492,6 +492,8 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, { struct vnt_private *priv = tx_context->priv; + struct ieee80211_hdr *hdr = + (struct ieee80211_hdr *)tx_context->skb->data; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); @@ -499,8 +501,16 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ - buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->duration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); + if (ieee80211_is_pspoll(hdr->frame_control)) { + __le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15)); + + buf->duration_a = dur; + buf->duration_b = dur; + } else { + buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_b = s_uGetDataDuration(priv, + PK_TYPE_11B, need_ack); + } buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); buf->time_stamp_off_b = vnt_time_stamp_off(priv, @@ -565,11 +575,20 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, u32 frame_len, int need_ack) { struct vnt_private *priv = tx_context->priv; + struct ieee80211_hdr *hdr = + (struct ieee80211_hdr *)tx_context->skb->data; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->ab); + /* Get Duration and TimeStampOff */ - buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); + if (ieee80211_is_pspoll(hdr->frame_control)) { + __le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15)); + + buf->duration = dur; + } else { + buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); + } buf->time_stamp_off = vnt_time_stamp_off(priv, rate); -- cgit From 94540a1ea2c7099d0fe3dcea18be5096f6eb7d6c Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Fri, 20 Jun 2014 23:06:11 -0400 Subject: staging: vt6655: remove header declarations for static functions The functions iwctl_giwscan() and iwctl_siwscan() are only referenced within iwctl.c -- so, remove their function declarations from iwctl.h and mark these functions as static. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iwctl.c | 4 ++-- drivers/staging/vt6655/iwctl.h | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index ba50d7f9116d..747d72340db3 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -129,7 +129,7 @@ int iwctl_giwname(struct net_device *dev, * Wireless Handler : set scan */ -int iwctl_siwscan(struct net_device *dev, +static int iwctl_siwscan(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, char *extra) @@ -190,7 +190,7 @@ int iwctl_siwscan(struct net_device *dev, * Wireless Handler : get scan results */ -int iwctl_giwscan(struct net_device *dev, +static int iwctl_giwscan(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, char *extra) diff --git a/drivers/staging/vt6655/iwctl.h b/drivers/staging/vt6655/iwctl.h index 10564b4f6b2d..de0a337b543a 100644 --- a/drivers/staging/vt6655/iwctl.h +++ b/drivers/staging/vt6655/iwctl.h @@ -161,16 +161,6 @@ int iwctl_giwpower(struct net_device *dev, struct iw_param *wrq, char *extra); -int iwctl_giwscan(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrq, - char *extra); - -int iwctl_siwscan(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrq, - char *extra); - //2008-0409-07, by Einsn Liu #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT int iwctl_siwauth(struct net_device *dev, -- cgit From 9ef2184d0eead64829eb80714c8ee8a163632b87 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:38 +0100 Subject: staging: vt6656: dead code remove zonetypes Remove vntconfiguration.dat, iocmd.h and country.h Set all channels are enabled as by rf type. mac80211 will handles zones Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 39 +--- drivers/staging/vt6656/card.c | 1 - drivers/staging/vt6656/channel.c | 298 ---------------------------- drivers/staging/vt6656/country.h | 162 --------------- drivers/staging/vt6656/device.h | 3 - drivers/staging/vt6656/iocmd.h | 38 ---- drivers/staging/vt6656/main_usb.c | 174 +--------------- drivers/staging/vt6656/rxtx.c | 1 - drivers/staging/vt6656/vntconfiguration.dat | 6 - drivers/staging/vt6656/wpactl.c | 1 - 10 files changed, 4 insertions(+), 719 deletions(-) delete mode 100644 drivers/staging/vt6656/country.h delete mode 100644 drivers/staging/vt6656/iocmd.h delete mode 100644 drivers/staging/vt6656/vntconfiguration.dat (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index d99aae59afcb..19b8fd174d20 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -899,44 +899,7 @@ int BBbVT3184Init(struct vnt_private *priv) if (status != STATUS_SUCCESS) return false; - /* zonetype initial */ - priv->byOriginalZonetype = priv->abyEEPROM[EEP_OFS_ZONETYPE]; - - if (priv->config_file.ZoneType >= 0) { - if ((priv->config_file.ZoneType == 0) && - (priv->abyEEPROM[EEP_OFS_ZONETYPE] != 0x00)) { - priv->abyEEPROM[EEP_OFS_ZONETYPE] = 0; - priv->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B; - - dev_dbg(&priv->usb->dev, "Init Zone Type :USA\n"); - } else if ((priv->config_file.ZoneType == 1) && - (priv->abyEEPROM[EEP_OFS_ZONETYPE] != 0x01)) { - priv->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01; - priv->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; - - dev_dbg(&priv->usb->dev, "Init Zone Type :Japan\n"); - } else if ((priv->config_file.ZoneType == 2) && - (priv->abyEEPROM[EEP_OFS_ZONETYPE] != 0x02)) { - priv->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02; - priv->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; - - dev_dbg(&priv->usb->dev, "Init Zone Type :Europe\n"); - } else { - if (priv->config_file.ZoneType != - priv->abyEEPROM[EEP_OFS_ZONETYPE]) - printk("zonetype in file[%02x]\ - mismatch with in EEPROM[%02x]\n", - priv->config_file.ZoneType, - priv->abyEEPROM[EEP_OFS_ZONETYPE]); - else - printk("Read Zonetype file success,\ - use default zonetype setting[%02x]\n", - priv->config_file.ZoneType); - } - } - - if (!priv->bZoneRegExist) - priv->byZoneType = priv->abyEEPROM[EEP_OFS_ZONETYPE]; + priv->byZoneType = priv->abyEEPROM[EEP_OFS_ZONETYPE]; priv->byRFType = priv->abyEEPROM[EEP_OFS_RFTYPE]; diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 1b3e0af156ec..918170979aa8 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -55,7 +55,6 @@ #include "power.h" #include "key.h" #include "rc4.h" -#include "country.h" #include "datarate.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 29c2ed32b6a8..3317b77fd269 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -35,15 +35,11 @@ */ #include -#include "country.h" #include "device.h" #include "datarate.h" #include "channel.h" #include "rf.h" -static int msglevel = MSG_LEVEL_INFO; -//static int msglevel =MSG_LEVEL_DEBUG; - static SChannelTblElement sChannelTbl[CB_MAX_CHANNEL+1] = { {0, 0, false}, @@ -105,262 +101,6 @@ static SChannelTblElement sChannelTbl[CB_MAX_CHANNEL+1] = {165, 5825, true} //56 }; -/************************************************************************ - * The Radar regulation rules for each country - ************************************************************************/ -static struct -{ - u8 byChannelCountryCode; /* The country code */ - char chCountryCode[2]; - u8 bChannelIdxList[CB_MAX_CHANNEL]; /* Available channels Index */ - u8 byPower[CB_MAX_CHANNEL]; -} ChannelRuleTab[] = -{ -/************************************************************************ - * This table is based on Athero driver rules - ************************************************************************/ -/* Country Available channels, ended with 0 */ -/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 */ -{CCODE_FCC, {'U','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_TELEC, {'J','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 23, 0, 0, 23, 0, 23, 23, 0, 23, 0, 0, 23, 23, 23, 0, 23, 0, 23, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ETSI, {'E','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_RESV3, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV4, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV5, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV6, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV7, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV8, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESV9, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESVa, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESVb, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESVc, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESVd, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RESVe, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ALLBAND, {' ',' '}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ALBANIA, {'A','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ALGERIA, {'D','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ARGENTINA, {'A','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 0} }, -{CCODE_ARMENIA, {'A','M'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_AUSTRALIA, {'A','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_AUSTRIA, {'A','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_AZERBAIJAN, {'A','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_BAHRAIN, {'B','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_BELARUS, {'B','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_BELGIUM, {'B','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_BELIZE, {'B','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_BOLIVIA, {'B','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_BRAZIL, {'B','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_BRUNEI_DARUSSALAM, {'B','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_BULGARIA, {'B','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0} }, -{CCODE_CANADA, {'C','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_CHILE, {'C','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17} }, -{CCODE_CHINA, {'C','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_COLOMBIA, {'C','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_COSTA_RICA, {'C','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_CROATIA, {'H','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_CYPRUS, {'C','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_CZECH, {'C','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_DENMARK, {'D','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_DOMINICAN_REPUBLIC, {'D','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_ECUADOR, {'E','C'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_EGYPT, {'E','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_EL_SALVADOR, {'S','V'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ESTONIA, {'E','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_FINLAND, {'F','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_FRANCE, {'F','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_GERMANY, {'D','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_GREECE, {'G','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_GEORGIA, {'G','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_GUATEMALA, {'G','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_HONDURAS, {'H','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_HONG_KONG, {'H','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_HUNGARY, {'H','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ICELAND, {'I','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_INDIA, {'I','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_INDONESIA, {'I','D'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_IRAN, {'I','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_IRELAND, {'I','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_ITALY, {'I','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_ISRAEL, {'I','L'}, { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_JAPAN, {'J','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_JORDAN, {'J','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_KAZAKHSTAN, {'K','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_KUWAIT, {'K','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_LATVIA, {'L','V'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_LEBANON, {'L','B'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_LEICHTENSTEIN, {'L','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_LITHUANIA, {'L','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_LUXEMBURG, {'L','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_MACAU, {'M','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_MACEDONIA, {'M','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_MALTA, {'M','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} }, -{CCODE_MALAYSIA, {'M','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_MEXICO, {'M','X'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_MONACO, {'M','C'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_MOROCCO, {'M','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_NETHERLANDS, {'N','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_NEW_ZEALAND, {'N','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_NORTH_KOREA, {'K','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} }, -{CCODE_NORWAY, {'N','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_OMAN, {'O','M'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_PAKISTAN, {'P','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_PANAMA, {'P','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_PERU, {'P','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_PHILIPPINES, {'P','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_POLAND, {'P','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_PORTUGAL, {'P','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_PUERTO_RICO, {'P','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_QATAR, {'Q','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ROMANIA, {'R','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_RUSSIA, {'R','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_SAUDI_ARABIA, {'S','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_SINGAPORE, {'S','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20} }, -{CCODE_SLOVAKIA, {'S','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} }, -{CCODE_SLOVENIA, {'S','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_SOUTH_AFRICA, {'Z','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_SOUTH_KOREA, {'K','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} }, -{CCODE_SPAIN, {'E','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} }, -{CCODE_SWEDEN, {'S','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_SWITZERLAND, {'C','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_SYRIA, {'S','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_TAIWAN, {'T','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 0} }, -{CCODE_THAILAND, {'T','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} }, -{CCODE_TRINIDAD_TOBAGO, {'T','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_TUNISIA, {'T','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_TURKEY, {'T','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_UK, {'G','B'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} }, -{CCODE_UKRAINE, {'U','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_UNITED_ARAB_EMIRATES, {'A','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_UNITED_STATES, {'U','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} - , { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} }, -{CCODE_URUGUAY, {'U','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} }, -{CCODE_UZBEKISTAN, {'U','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_VENEZUELA, {'V','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0} - , { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} }, -{CCODE_VIETNAM, {'V','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_YEMEN, {'Y','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_ZIMBABWE, {'Z','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_JAPAN_W52_W53, {'J','J'}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }, -{CCODE_MAX, {'U','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} - , { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } -/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 */ -}; /************************************************************************ * Country Channel Valid @@ -425,53 +165,15 @@ void CHvInitChannelTable(struct vnt_private *pDevice) break; } - if (pDevice->b11hEable == true) { if (bMultiBand == true) { for (ii = 0; ii < CB_MAX_CHANNEL; ii++) { sChannelTbl[ii+1].bValid = true; - //pDevice->abyRegPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1]; - //pDevice->abyLocalPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1]; - } - for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { - //pDevice->abyRegPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1]; - //pDevice->abyLocalPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1]; } } else { for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { sChannelTbl[ii+1].bValid = true; - //pDevice->abyRegPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1]; - //pDevice->abyLocalPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1]; } } - } else if (pDevice->byZoneType <= CCODE_MAX) { - if (bMultiBand == true) { - for (ii = 0; ii < CB_MAX_CHANNEL; ii++) { - if (ChannelRuleTab[pDevice->byZoneType].bChannelIdxList[ii] != 0) { - sChannelTbl[ii+1].bValid = true; - //pDevice->abyRegPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii]; - //pDevice->abyLocalPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii]; - } - } - } else { - for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { - if (ChannelRuleTab[pDevice->byZoneType].bChannelIdxList[ii] != 0) { - sChannelTbl[ii+1].bValid = true; - //pDevice->abyRegPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii]; - //pDevice->abyLocalPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii]; - } - } - } - } - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO"Zone=[%d][%c][%c]!!\n",pDevice->byZoneType,ChannelRuleTab[pDevice->byZoneType].chCountryCode[0],ChannelRuleTab[pDevice->byZoneType].chCountryCode[1]); - for (ii = 0; ii < CB_MAX_CHANNEL; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Channel[%d] is [%d]\n",sChannelTbl[ii].byChannelNumber,sChannelTbl[ii+1].bValid); - /*if (pDevice->abyRegPwr[ii+1] == 0) { - pDevice->abyRegPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1]; - } - if (pDevice->abyLocalPwr[ii+1] == 0) { - pDevice->abyLocalPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1]; - }*/ - } } static struct ieee80211_rate vnt_rates_bg[] = { diff --git a/drivers/staging/vt6656/country.h b/drivers/staging/vt6656/country.h deleted file mode 100644 index a0320d8f1362..000000000000 --- a/drivers/staging/vt6656/country.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: country.h - * - * Purpose: Country Code information - * - * Author: Lucas Lin - * - * Date: Dec 23, 2004 - * - */ - -#ifndef __COUNTRY_H__ -#define __COUNTRY_H__ - -/************************************************************************ - * The definition here should be complied with the INF country order - * Please check with VNWL.inf/VNWL64.inf/VNWL*.inf - ************************************************************************/ -typedef enum _COUNTRY_CODE { - CCODE_FCC = 0, - CCODE_TELEC, - CCODE_ETSI, - CCODE_RESV3, - CCODE_RESV4, - CCODE_RESV5, - CCODE_RESV6, - CCODE_RESV7, - CCODE_RESV8, - CCODE_RESV9, - CCODE_RESVa, - CCODE_RESVb, - CCODE_RESVc, - CCODE_RESVd, - CCODE_RESVe, - CCODE_ALLBAND, - CCODE_ALBANIA, - CCODE_ALGERIA, - CCODE_ARGENTINA, - CCODE_ARMENIA, - CCODE_AUSTRALIA, - CCODE_AUSTRIA, - CCODE_AZERBAIJAN, - CCODE_BAHRAIN, - CCODE_BELARUS, - CCODE_BELGIUM, - CCODE_BELIZE, - CCODE_BOLIVIA, - CCODE_BRAZIL, - CCODE_BRUNEI_DARUSSALAM, - CCODE_BULGARIA, - CCODE_CANADA, - CCODE_CHILE, - CCODE_CHINA, - CCODE_COLOMBIA, - CCODE_COSTA_RICA, - CCODE_CROATIA, - CCODE_CYPRUS, - CCODE_CZECH, - CCODE_DENMARK, - CCODE_DOMINICAN_REPUBLIC, - CCODE_ECUADOR, - CCODE_EGYPT, - CCODE_EL_SALVADOR, - CCODE_ESTONIA, - CCODE_FINLAND, - CCODE_FRANCE, - CCODE_GERMANY, - CCODE_GREECE, - CCODE_GEORGIA, - CCODE_GUATEMALA, - CCODE_HONDURAS, - CCODE_HONG_KONG, - CCODE_HUNGARY, - CCODE_ICELAND, - CCODE_INDIA, - CCODE_INDONESIA, - CCODE_IRAN, - CCODE_IRELAND, - CCODE_ITALY, - CCODE_ISRAEL, - CCODE_JAPAN, - CCODE_JORDAN, - CCODE_KAZAKHSTAN, - CCODE_KUWAIT, - CCODE_LATVIA, - CCODE_LEBANON, - CCODE_LEICHTENSTEIN, - CCODE_LITHUANIA, - CCODE_LUXEMBURG, - CCODE_MACAU, - CCODE_MACEDONIA, - CCODE_MALTA, - CCODE_MALAYSIA, - CCODE_MEXICO, - CCODE_MONACO, - CCODE_MOROCCO, - CCODE_NETHERLANDS, - CCODE_NEW_ZEALAND, - CCODE_NORTH_KOREA, - CCODE_NORWAY, - CCODE_OMAN, - CCODE_PAKISTAN, - CCODE_PANAMA, - CCODE_PERU, - CCODE_PHILIPPINES, - CCODE_POLAND, - CCODE_PORTUGAL, - CCODE_PUERTO_RICO, - CCODE_QATAR, - CCODE_ROMANIA, - CCODE_RUSSIA, - CCODE_SAUDI_ARABIA, - CCODE_SINGAPORE, - CCODE_SLOVAKIA, - CCODE_SLOVENIA, - CCODE_SOUTH_AFRICA, - CCODE_SOUTH_KOREA, - CCODE_SPAIN, - CCODE_SWEDEN, - CCODE_SWITZERLAND, - CCODE_SYRIA, - CCODE_TAIWAN, - CCODE_THAILAND, - CCODE_TRINIDAD_TOBAGO, - CCODE_TUNISIA, - CCODE_TURKEY, - CCODE_UK, - CCODE_UKRAINE, - CCODE_UNITED_ARAB_EMIRATES, - CCODE_UNITED_STATES, - CCODE_URUGUAY, - CCODE_UZBEKISTAN, - CCODE_VENEZUELA, - CCODE_VIETNAM, - CCODE_YEMEN, - CCODE_ZIMBABWE, - CCODE_JAPAN_W52_W53, - CCODE_MAX -} COUNTRY_CODE; - -/************************************************************************ - * Function prototype - ************************************************************************/ -#endif /* __COUNTRY_H__ */ diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 6696365916bb..1b74f472e286 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -481,9 +481,6 @@ struct vnt_private { u8 byBBRxConf; u8 byZoneType; - int bZoneRegExist; - - u8 byOriginalZonetype; int bLinkPass; /* link status: OK or fail */ struct vnt_cmd_card_init init_command; diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h deleted file mode 100644 index b957e6d475af..000000000000 --- a/drivers/staging/vt6656/iocmd.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: iocmd.h - * - * Purpose: Handles the viawget ioctl private interface functions - * - * Author: Lyndon Chen - * - * Date: May 8, 2002 - * - */ - -#ifndef __IOCMD_H__ -#define __IOCMD_H__ - -typedef enum tagWZONETYPE { - ZoneType_USA = 0, - ZoneType_Japan = 1, - ZoneType_Europe = 2 -} WZONETYPE; - -#endif /* __IOCMD_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 5cc3d42c7e4a..ce8aa2644f74 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -56,7 +56,6 @@ #include "wctl.h" #include "power.h" #include "wcmd.h" -#include "iocmd.h" #include "rxtx.h" #include "bssdb.h" #include "wpactl.h" @@ -222,12 +221,6 @@ static void device_free_int_bufs(struct vnt_private *pDevice); static void device_free_frag_bufs(struct vnt_private *pDevice); static bool device_alloc_bufs(struct vnt_private *pDevice); -static int Read_config_file(struct vnt_private *pDevice); -static unsigned char *Config_FileOperation(struct vnt_private *pDevice); -static int Config_FileGetParameter(unsigned char *string, - unsigned char *dest, - unsigned char *source); - static void usb_device_reset(struct vnt_private *pDevice); static void @@ -379,13 +372,9 @@ static int device_init_registers(struct vnt_private *pDevice) * original zonetype is USA, but custom zonetype is Europe, * then need to recover 12, 13, 14 channels with 11 channel */ - if (((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || - (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe)) && - (pDevice->byOriginalZonetype == ZoneType_USA)) { - for (ii = 11; ii < 14; ii++) { - pDevice->abyCCKPwrTbl[ii] = pDevice->abyCCKPwrTbl[10]; - pDevice->abyOFDMPwrTbl[ii] = pDevice->abyOFDMPwrTbl[10]; - } + for (ii = 11; ii < 14; ii++) { + pDevice->abyCCKPwrTbl[ii] = pDevice->abyCCKPwrTbl[10]; + pDevice->abyOFDMPwrTbl[ii] = pDevice->abyOFDMPwrTbl[10]; } pDevice->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ @@ -808,9 +797,6 @@ static int device_open(struct net_device *dev) MP_SET_FLAG(pDevice, fMP_POST_READS); MP_SET_FLAG(pDevice, fMP_POST_WRITES); - /* read config file */ - Read_config_file(pDevice); - if (device_init_registers(pDevice) == false) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " init register fail\n"); goto free_all; @@ -1519,160 +1505,6 @@ out: return NETDEV_TX_OK; } -/* find out the start position of str2 from str1 */ -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 (unsigned char *) str1; - str1++; - } - return NULL; -} - -static int Config_FileGetParameter(unsigned char *string, - unsigned char *dest, - unsigned char *source) -{ - 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); - strcat(buf1, string); - strcat(buf1, "="); - source+=strlen(buf1); - - /* find target string start point */ - start_p = kstrstr(source,buf1); - if (start_p == NULL) - return false; - - /* check if current config line is marked by "#" */ - for (ii = 1; ; ii++) { - if (memcmp(start_p - ii, "\n", 1) == 0) - break; - if (memcmp(start_p - ii, "#", 1) == 0) - return false; - } - - /* find target string end point */ - 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" */ - } - - memset(buf2,0,100); - memcpy(buf2, start_p, end_p-start_p); /* get the target line */ - buf2[end_p-start_p]='\0'; - - /* find value */ - start_p = kstrstr(buf2,"="); - if (start_p == NULL) - return false; - memset(buf1,0,100); - strcpy(buf1,start_p+1); - - /* except space */ - tmp_p = buf1; - while(*tmp_p != 0x00) { - if(*tmp_p==' ') - tmp_p++; - else - break; - } - - memcpy(dest,tmp_p,strlen(tmp_p)); - return true; -} - -/* if read fails, return NULL, or return data pointer */ -static unsigned char *Config_FileOperation(struct vnt_private *pDevice) -{ - unsigned char *buffer = kmalloc(1024, GFP_KERNEL); - struct file *file; - - if (!buffer) { - printk("allocate mem for file fail?\n"); - return NULL; - } - - file = filp_open(CONFIG_PATH, O_RDONLY, 0); - if (IS_ERR(file)) { - kfree(buffer); - printk("Config_FileOperation file Not exist\n"); - return NULL; - } - - if (kernel_read(file, 0, buffer, 1024) < 0) { - printk("read file error?\n"); - kfree(buffer); - buffer = NULL; - } - - fput(file); - return buffer; -} - -/* return --->-1:fail; >=0:successful */ -static int Read_config_file(struct vnt_private *pDevice) -{ - int result = 0; - unsigned char tmpbuffer[100]; - unsigned char *buffer = NULL; - - /* init config setting */ - pDevice->config_file.ZoneType = -1; - pDevice->config_file.eAuthenMode = -1; - pDevice->config_file.eEncryptionStatus = -1; - - buffer = Config_FileOperation(pDevice); - if (buffer == NULL) { - result =-1; - return result; - } - -/* get zonetype */ -{ - memset(tmpbuffer,0,sizeof(tmpbuffer)); - if(Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer) ==true) { - if(memcmp(tmpbuffer,"USA",3)==0) { - pDevice->config_file.ZoneType=ZoneType_USA; - } - else if(memcmp(tmpbuffer,"JAPAN",5)==0) { - pDevice->config_file.ZoneType=ZoneType_Japan; - } - else if(memcmp(tmpbuffer,"EUROPE",6)==0) { - pDevice->config_file.ZoneType=ZoneType_Europe; - } - else { - printk("Unknown Zonetype[%s]?\n",tmpbuffer); - } - } -} - -/* get other parameter */ - { - memset(tmpbuffer,0,sizeof(tmpbuffer)); - if(Config_FileGetParameter("AUTHENMODE",tmpbuffer,buffer)==true) { - pDevice->config_file.eAuthenMode = (int) simple_strtol(tmpbuffer, NULL, 10); - } - - memset(tmpbuffer,0,sizeof(tmpbuffer)); - if(Config_FileGetParameter("ENCRYPTIONMODE",tmpbuffer,buffer)==true) { - pDevice->config_file.eEncryptionStatus= (int) simple_strtol(tmpbuffer, NULL, 10); - } - } - - kfree(buffer); - return result; -} - static void device_set_multi(struct net_device *dev) { struct vnt_private *priv = netdev_priv(dev); diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index c3d47789c2af..44d88e944c10 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -58,7 +58,6 @@ #include "rf.h" #include "datarate.h" #include "usbpipe.h" -#include "iocmd.h" static int msglevel = MSG_LEVEL_INFO; diff --git a/drivers/staging/vt6656/vntconfiguration.dat b/drivers/staging/vt6656/vntconfiguration.dat deleted file mode 100644 index 933774c7d27f..000000000000 --- a/drivers/staging/vt6656/vntconfiguration.dat +++ /dev/null @@ -1,6 +0,0 @@ -#VNT Configuration -[start] -ZONETYPE=EUROPE -AUTHENMODE=12 -ENCRYPTIONMODE=34 -[end] \ No newline at end of file diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 2b508beaa2c2..375207222bae 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -36,7 +36,6 @@ #include "mac.h" #include "device.h" #include "wmgr.h" -#include "iocmd.h" #include "iowpa.h" #include "usbpipe.h" #include "rf.h" -- cgit From 93a1e1b0791f66e76d2561a184b7f9d6151d56a0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:39 +0100 Subject: staging: vt6656: move life time macros to rxtx.h DEFAULT_MGN_LIFETIME_RES_64us DEFAULT_MSDU_LIFETIME_RES_64us Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.h | 3 +++ drivers/staging/vt6656/wmgr.h | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 65f7e260fe4e..00a5c220e652 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -33,6 +33,9 @@ #include "wcmd.h" #include "baseband.h" +#define DEFAULT_MGN_LIFETIME_RES_64us 125 /* 64us */ +#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 + /* MIC HDR data header */ struct vnt_mic_hdr { u8 id; diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index 26ba47da467b..b6610a196ac6 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -53,10 +53,8 @@ #define WCMD_PASSIVE_SCAN_TIME 100 //(ms) #define DEFAULT_MSDU_LIFETIME 512 // ms -#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 // 64us #define DEFAULT_MGN_LIFETIME 8 // ms -#define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us #define MAKE_BEACON_RESERVED 10 //(us) -- cgit From 3435e86e7871c8213d48db031a6507a88cf7aac2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:40 +0100 Subject: staging: vt6656: dpc remove dead code. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.c | 803 ------------------------------------------- drivers/staging/vt6656/dpc.h | 3 - 2 files changed, 806 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 0b9c92382076..daa67b8e65dd 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -54,809 +54,6 @@ //static int msglevel =MSG_LEVEL_DEBUG; static int msglevel =MSG_LEVEL_INFO; -static const u8 acbyRxRate[MAX_RATE] = -{2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108}; - -static u8 s_byGetRateIdx(u8 byRate); - -static -void -s_vGetDASA( - u8 * pbyRxBufferAddr, - unsigned int *pcbHeaderSize, - struct ethhdr *psEthHeader - ); - -static void s_vProcessRxMACHeader(struct vnt_private *pDevice, - u8 *pbyRxBufferAddr, u32 cbPacketSize, int bIsWEP, int bExtIV, - u32 *pcbHeadSize); - -static int s_bHandleRxEncryption(struct vnt_private *pDevice, u8 *pbyFrame, - u32 FrameSize, u8 *pbyRsr, u8 *pbyNewRsr, PSKeyItem *pKeyOut, - s32 *pbExtIV, u16 *pwRxTSC15_0, u32 *pdwRxTSC47_16); - -/*+ - * - * Description: - * Translate Rcv 802.11 header to 802.3 header with Rx buffer - * - * Parameters: - * In: - * pDevice - * dwRxBufferAddr - Address of Rcv Buffer - * cbPacketSize - Rcv Packet size - * bIsWEP - If Rcv with WEP - * Out: - * pcbHeaderSize - 802.11 header size - * - * Return Value: None - * --*/ - -static void s_vProcessRxMACHeader(struct vnt_private *pDevice, - u8 *pbyRxBufferAddr, u32 cbPacketSize, int bIsWEP, int bExtIV, - u32 *pcbHeadSize) -{ - u8 *pbyRxBuffer; - u32 cbHeaderSize = 0; - u16 *pwType; - struct ieee80211_hdr *pMACHeader; - int ii; - - pMACHeader = (struct ieee80211_hdr *) (pbyRxBufferAddr + cbHeaderSize); - - s_vGetDASA((u8 *)pMACHeader, &cbHeaderSize, &pDevice->sRxEthHeader); - - if (bIsWEP) { - if (bExtIV) { - // strip IV&ExtIV , add 8 byte - cbHeaderSize += (WLAN_HDR_ADDR3_LEN + 8); - } else { - // strip IV , add 4 byte - cbHeaderSize += (WLAN_HDR_ADDR3_LEN + 4); - } - } - else { - cbHeaderSize += WLAN_HDR_ADDR3_LEN; - }; - - pbyRxBuffer = (u8 *) (pbyRxBufferAddr + cbHeaderSize); - if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_Bridgetunnel)) { - cbHeaderSize += 6; - } else if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_RFC1042)) { - cbHeaderSize += 6; - pwType = (u16 *) (pbyRxBufferAddr + cbHeaderSize); - if ((*pwType == cpu_to_be16(ETH_P_IPX)) || - (*pwType == cpu_to_le16(0xF380))) { - cbHeaderSize -= 8; - pwType = (u16 *) (pbyRxBufferAddr + cbHeaderSize); - if (bIsWEP) { - if (bExtIV) { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN - 8); // 8 is IV&ExtIV - } else { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN - 4); // 4 is IV - } - } - else { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN); - } - } - } - else { - cbHeaderSize -= 2; - pwType = (u16 *) (pbyRxBufferAddr + cbHeaderSize); - if (bIsWEP) { - if (bExtIV) { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN - 8); // 8 is IV&ExtIV - } else { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN - 4); // 4 is IV - } - } - else { - *pwType = htons(cbPacketSize - WLAN_HDR_ADDR3_LEN); - } - } - - cbHeaderSize -= (ETH_ALEN * 2); - pbyRxBuffer = (u8 *) (pbyRxBufferAddr + cbHeaderSize); - for (ii = 0; ii < ETH_ALEN; ii++) - *pbyRxBuffer++ = pDevice->sRxEthHeader.h_dest[ii]; - for (ii = 0; ii < ETH_ALEN; ii++) - *pbyRxBuffer++ = pDevice->sRxEthHeader.h_source[ii]; - - *pcbHeadSize = cbHeaderSize; -} - -static u8 s_byGetRateIdx(u8 byRate) -{ - u8 byRateIdx; - - for (byRateIdx = 0; byRateIdx frame_control & FC_TODS) == 0) { - if (pMACHeader->frame_control & FC_FROMDS) { - for (ii = 0; ii < ETH_ALEN; ii++) { - psEthHeader->h_dest[ii] = - pMACHeader->addr1[ii]; - psEthHeader->h_source[ii] = - pMACHeader->addr3[ii]; - } - } else { - /* IBSS mode */ - for (ii = 0; ii < ETH_ALEN; ii++) { - psEthHeader->h_dest[ii] = - pMACHeader->addr1[ii]; - psEthHeader->h_source[ii] = - pMACHeader->addr2[ii]; - } - } - } else { - /* Is AP mode.. */ - if (pMACHeader->frame_control & FC_FROMDS) { - for (ii = 0; ii < ETH_ALEN; ii++) { - psEthHeader->h_dest[ii] = - pMACHeader->addr3[ii]; - psEthHeader->h_source[ii] = - pMACHeader->addr4[ii]; - cbHeaderSize += 6; - } - } else { - for (ii = 0; ii < ETH_ALEN; ii++) { - psEthHeader->h_dest[ii] = - pMACHeader->addr3[ii]; - psEthHeader->h_source[ii] = - pMACHeader->addr2[ii]; - } - } - }; - *pcbHeaderSize = cbHeaderSize; -} - -int RXbBulkInProcessData(struct vnt_private *pDevice, struct vnt_rcb *pRCB, - unsigned long BytesToIndicate) -{ - struct net_device_stats *pStats = &pDevice->stats; - struct sk_buff *skb; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_rx_mgmt *pRxPacket = &pMgmt->sRxPacket; - struct ieee80211_hdr *p802_11Header; - u8 *pbyRsr, *pbyNewRsr, *pbyRSSI, *pbyFrame; - u64 *pqwTSFTime; - u32 bDeFragRx = false; - u32 cbHeaderOffset, cbIVOffset; - u32 FrameSize; - u16 wEtherType = 0; - s32 iSANodeIndex = -1; - int ii; - u8 *pbyRxSts, *pbyRxRate, *pbySQ, *pby3SQ; - u32 cbHeaderSize; - PSKeyItem pKey = NULL; - u16 wRxTSC15_0 = 0; - u32 dwRxTSC47_16 = 0; - /* signed long ldBm = 0; */ - int bIsWEP = false; int bExtIV = false; - u32 dwWbkStatus; - struct vnt_rcb *pRCBIndicate = pRCB; - u8 *pbyDAddress; - u16 *pwPLCP_Length; - u8 abyVaildRate[MAX_RATE] - = {2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108}; - u16 wPLCPwithPadding; - struct ieee80211_hdr *pMACHeader; - int bRxeapol_key = false; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---------- RXbBulkInProcessData---\n"); - - skb = pRCB->skb; - - /* [31:16]RcvByteCount ( not include 4-byte Status ) */ - dwWbkStatus = *((u32 *)(skb->data)); - FrameSize = dwWbkStatus >> 16; - FrameSize += 4; - - if (BytesToIndicate != FrameSize) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"------- WRONG Length 1\n"); - pStats->rx_frame_errors++; - return false; - } - - if ((BytesToIndicate > 2372) || (BytesToIndicate <= 40)) { - // Frame Size error drop this packet. - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---------- WRONG Length 2\n"); - pStats->rx_frame_errors++; - return false; - } - - pbyDAddress = (u8 *)(skb->data); - pbyRxSts = pbyDAddress+4; - pbyRxRate = pbyDAddress+5; - - //real Frame Size = USBFrameSize -4WbkStatus - 4RxStatus - 8TSF - 4RSR - 4SQ3 - ?Padding - //if SQ3 the range is 24~27, if no SQ3 the range is 20~23 - //real Frame size in PLCPLength field. - pwPLCP_Length = (u16 *) (pbyDAddress + 6); - //Fix hardware bug => PLCP_Length error - if ( ((BytesToIndicate - (*pwPLCP_Length)) > 27) || - ((BytesToIndicate - (*pwPLCP_Length)) < 24) || - (BytesToIndicate < (*pwPLCP_Length)) ) { - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Wrong PLCP Length %x\n", (int) *pwPLCP_Length); - pStats->rx_frame_errors++; - return false; - } - for ( ii=RATE_1M;iibyBBType == BB_TYPE_11G) { - pby3SQ = pbyDAddress + 8 + wPLCPwithPadding + 12; - pbySQ = pby3SQ; - } - else { - pbySQ = pbyDAddress + 8 + wPLCPwithPadding + 8; - pby3SQ = pbySQ; - } - pbyNewRsr = pbyDAddress + 8 + wPLCPwithPadding + 9; - pbyRSSI = pbyDAddress + 8 + wPLCPwithPadding + 10; - pbyRsr = pbyDAddress + 8 + wPLCPwithPadding + 11; - - FrameSize = *pwPLCP_Length; - - pbyFrame = pbyDAddress + 8; - - pMACHeader = (struct ieee80211_hdr *) pbyFrame; - -//mike add: to judge if current AP is activated? - if ((pMgmt->eCurrMode == WMAC_MODE_STANDBY) || - (pMgmt->eCurrMode == WMAC_MODE_ESS_STA)) { - if (pMgmt->sNodeDBTable[0].bActive) { - if (ether_addr_equal(pMgmt->abyCurrBSSID, pMACHeader->addr2)) { - if (pMgmt->sNodeDBTable[0].uInActiveCount != 0) - pMgmt->sNodeDBTable[0].uInActiveCount = 0; - } - } - } - - if (!is_multicast_ether_addr(pMACHeader->addr1)) { - if (WCTLbIsDuplicate(&(pDevice->sDupRxCache), (struct ieee80211_hdr *) pbyFrame)) { - return false; - } - - if (!ether_addr_equal(pDevice->abyCurrentNetAddr, pMACHeader->addr1)) { - return false; - } - } - - // Use for TKIP MIC - s_vGetDASA(pbyFrame, &cbHeaderSize, &pDevice->sRxEthHeader); - - if (ether_addr_equal((u8 *)pDevice->sRxEthHeader.h_source, - pDevice->abyCurrentNetAddr)) - return false; - - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) || (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)) { - if (IS_CTL_PSPOLL(pbyFrame) || !IS_TYPE_CONTROL(pbyFrame)) { - p802_11Header = (struct ieee80211_hdr *) (pbyFrame); - // get SA NodeIndex - if (BSSbIsSTAInNodeDB(pDevice, (u8 *)(p802_11Header->addr2), &iSANodeIndex)) { - pMgmt->sNodeDBTable[iSANodeIndex].ulLastRxJiffer = jiffies; - pMgmt->sNodeDBTable[iSANodeIndex].uInActiveCount = 0; - } - } - } - - if (IS_FC_WEP(pbyFrame)) { - bool bRxDecryOK = false; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"rx WEP pkt\n"); - bIsWEP = true; - - bRxDecryOK = s_bHandleRxEncryption(pDevice, pbyFrame, FrameSize, - pbyRsr, pbyNewRsr, &pKey, &bExtIV, &wRxTSC15_0, &dwRxTSC47_16); - - if (bRxDecryOK) { - if ((*pbyNewRsr & NEWRSR_DECRYPTOK) == 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ICV Fail\n"); - if ( (pMgmt->eAuthenMode == WMAC_AUTH_WPA) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) { - } - return false; - } - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"WEP Func Fail\n"); - return false; - } - if ((pKey != NULL) && (pKey->byCipherSuite == KEY_CTL_CCMP)) - FrameSize -= 8; // Message Integrity Code - else - FrameSize -= 4; // 4 is ICV - } - - // - // RX OK - // - /* remove the FCS/CRC length */ - FrameSize -= ETH_FCS_LEN; - - if ( !(*pbyRsr & (RSR_ADDRBROAD | RSR_ADDRMULTI)) && // unicast address - (IS_FRAGMENT_PKT((pbyFrame))) - ) { - // defragment - bDeFragRx = WCTLbHandleFragment(pDevice, (struct ieee80211_hdr *) (pbyFrame), FrameSize, bIsWEP, bExtIV); - if (bDeFragRx) { - // defrag complete - // TODO skb, pbyFrame - skb = pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].skb; - FrameSize = pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength; - pbyFrame = skb->data + 8; - } - else { - return false; - } - } - - // - // Management & Control frame Handle - // - if ((IS_TYPE_DATA((pbyFrame))) == false) { - // Handle Control & Manage Frame - - if (IS_TYPE_MGMT((pbyFrame))) { - u8 * pbyData1; - u8 * pbyData2; - - pRxPacket = &(pRCB->sMngPacket); - pRxPacket->p80211Header = (PUWLAN_80211HDR)(pbyFrame); - pRxPacket->cbMPDULen = FrameSize; - pRxPacket->uRSSI = *pbyRSSI; - pRxPacket->bySQ = *pbySQ; - pRxPacket->qwLocalTSF = cpu_to_le64(*pqwTSFTime); - if (bIsWEP) { - // strip IV - pbyData1 = WLAN_HDR_A3_DATA_PTR(pbyFrame); - pbyData2 = WLAN_HDR_A3_DATA_PTR(pbyFrame) + 4; - for (ii = 0; ii < (FrameSize - 4); ii++) { - *pbyData1 = *pbyData2; - pbyData1++; - pbyData2++; - } - } - - pRxPacket->byRxRate = s_byGetRateIdx(*pbyRxRate); - - if ( *pbyRxSts == 0 ) { - //Discard beacon packet which channel is 0 - if ( (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_BEACON) || - (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_PROBERESP) ) { - return false; - } - } - pRxPacket->byRxChannel = (*pbyRxSts) >> 2; - - // - // Insert the RCB in the Recv Mng list - // - EnqueueRCB(pDevice->FirstRecvMngList, pDevice->LastRecvMngList, pRCBIndicate); - pDevice->NumRecvMngList++; - if ( bDeFragRx == false) { - pRCB->Ref++; - } - if (pDevice->bIsRxMngWorkItemQueued == false) { - pDevice->bIsRxMngWorkItemQueued = true; - schedule_work(&pDevice->rx_mng_work_item); - } - - } - else { - // Control Frame - }; - return false; - } - else { - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - //In AP mode, hw only check addr1(BSSID or RA) if equal to local MAC. - if ( !(*pbyRsr & RSR_BSSIDOK)) { - if (bDeFragRx) { - if (!device_alloc_frag_buf(pDevice, &pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx])) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc more frag bufs\n", - pDevice->dev->name); - } - } - return false; - } - } - else { - // discard DATA packet while not associate || BSSID error - if ((pDevice->bLinkPass == false) || - !(*pbyRsr & RSR_BSSIDOK)) { - if (bDeFragRx) { - if (!device_alloc_frag_buf(pDevice, &pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx])) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc more frag bufs\n", - pDevice->dev->name); - } - } - return false; - } - //mike add:station mode check eapol-key challenge---> - { - u8 Protocol_Version; //802.1x Authentication - u8 Packet_Type; //802.1x Authentication - u8 Descriptor_type; - u16 Key_info; - if (bIsWEP) - cbIVOffset = 8; - else - cbIVOffset = 0; - wEtherType = (skb->data[cbIVOffset + 8 + 24 + 6] << 8) | - skb->data[cbIVOffset + 8 + 24 + 6 + 1]; - Protocol_Version = skb->data[cbIVOffset + 8 + 24 + 6 + 1 +1]; - Packet_Type = skb->data[cbIVOffset + 8 + 24 + 6 + 1 +1+1]; - if (wEtherType == ETH_P_PAE) { //Protocol Type in LLC-Header - if(((Protocol_Version==1) ||(Protocol_Version==2)) && - (Packet_Type==3)) { //802.1x OR eapol-key challenge frame receive - bRxeapol_key = true; - Descriptor_type = skb->data[cbIVOffset + 8 + 24 + 6 + 1 +1+1+1+2]; - Key_info = (skb->data[cbIVOffset + 8 + 24 + 6 + 1 +1+1+1+2+1]<<8) |skb->data[cbIVOffset + 8 + 24 + 6 + 1 +1+1+1+2+2] ; - if(Descriptor_type==2) { //RSN - // printk("WPA2_Rx_eapol-key_info<-----:%x\n",Key_info); - } - else if(Descriptor_type==254) { - // printk("WPA_Rx_eapol-key_info<-----:%x\n",Key_info); - } - } - } - } - //mike add:station mode check eapol-key challenge<--- - } - } - -// Data frame Handle - - if (pDevice->bEnablePSMode) { - if (IS_FC_MOREDATA((pbyFrame))) { - if (*pbyRsr & RSR_ADDROK) { - //PSbSendPSPOLL((PSDevice)pDevice); - } - } - else { - if (pMgmt->bInTIMWake == true) { - pMgmt->bInTIMWake = false; - } - } - } - - // ++++++++ For BaseBand Algorithm +++++++++++++++ - pDevice->uCurrRSSI = *pbyRSSI; - pDevice->byCurrSQ = *pbySQ; - - // todo -/* - if ((*pbyRSSI != 0) && - (pMgmt->pCurrBSS!=NULL)) { - RFvRSSITodBm(pDevice, *pbyRSSI, &ldBm); - // Monitor if RSSI is too strong. - pMgmt->pCurrBSS->byRSSIStatCnt++; - pMgmt->pCurrBSS->byRSSIStatCnt %= RSSI_STAT_COUNT; - pMgmt->pCurrBSS->ldBmAverage[pMgmt->pCurrBSS->byRSSIStatCnt] = ldBm; - for (ii = 0; ii < RSSI_STAT_COUNT; ii++) { - if (pMgmt->pCurrBSS->ldBmAverage[ii] != 0) { - pMgmt->pCurrBSS->ldBmMAX = - max(pMgmt->pCurrBSS->ldBmAverage[ii], ldBm); - } - } - } -*/ - - if ((pKey != NULL) && (pKey->byCipherSuite == KEY_CTL_TKIP)) { - if (bIsWEP) { - FrameSize -= 8; //MIC - } - } - - //-------------------------------------------------------------------------------- - // Soft MIC - if ((pKey != NULL) && (pKey->byCipherSuite == KEY_CTL_TKIP)) { - if (bIsWEP) { - u32 * pdwMIC_L; - u32 * pdwMIC_R; - u32 dwMIC_Priority; - u32 dwMICKey0 = 0, dwMICKey1 = 0; - u32 dwLocalMIC_L = 0; - u32 dwLocalMIC_R = 0; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - dwMICKey0 = cpu_to_le32(*(u32 *)(&pKey->abyKey[24])); - dwMICKey1 = cpu_to_le32(*(u32 *)(&pKey->abyKey[28])); - } - else { - if (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) { - dwMICKey0 = cpu_to_le32(*(u32 *)(&pKey->abyKey[16])); - dwMICKey1 = cpu_to_le32(*(u32 *)(&pKey->abyKey[20])); - } else if ((pKey->dwKeyIndex & BIT28) == 0) { - dwMICKey0 = cpu_to_le32(*(u32 *)(&pKey->abyKey[16])); - dwMICKey1 = cpu_to_le32(*(u32 *)(&pKey->abyKey[20])); - } else { - dwMICKey0 = cpu_to_le32(*(u32 *)(&pKey->abyKey[24])); - dwMICKey1 = cpu_to_le32(*(u32 *)(&pKey->abyKey[28])); - } - } - - MIC_vInit(dwMICKey0, dwMICKey1); - MIC_vAppend((u8 *)&(pDevice->sRxEthHeader.h_dest[0]), 12); - dwMIC_Priority = 0; - MIC_vAppend((u8 *)&dwMIC_Priority, 4); - // 4 is Rcv buffer header, 24 is MAC Header, and 8 is IV and Ext IV. - MIC_vAppend((u8 *)(skb->data + 8 + WLAN_HDR_ADDR3_LEN + 8), - FrameSize - WLAN_HDR_ADDR3_LEN - 8); - MIC_vGetMIC(&dwLocalMIC_L, &dwLocalMIC_R); - MIC_vUnInit(); - - pdwMIC_L = (u32 *)(skb->data + 8 + FrameSize); - pdwMIC_R = (u32 *)(skb->data + 8 + FrameSize + 4); - - if ((cpu_to_le32(*pdwMIC_L) != dwLocalMIC_L) || (cpu_to_le32(*pdwMIC_R) != dwLocalMIC_R) || - (pDevice->bRxMICFail == true)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC comparison is fail!\n"); - pDevice->bRxMICFail = false; - if (bDeFragRx) { - if (!device_alloc_frag_buf(pDevice, &pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx])) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc more frag bufs\n", - pDevice->dev->name); - } - } - //send event to wpa_supplicant - //if(pDevice->bWPASuppWextEnabled == true) - { - union iwreq_data wrqu; - struct iw_michaelmicfailure ev; - int keyidx = pbyFrame[cbHeaderSize+3] >> 6; //top two-bits - memset(&ev, 0, sizeof(ev)); - ev.flags = keyidx & IW_MICFAILURE_KEY_ID; - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && - (pMgmt->eCurrState == WMAC_STATE_ASSOC) && - (*pbyRsr & (RSR_ADDRBROAD | RSR_ADDRMULTI)) == 0) { - ev.flags |= IW_MICFAILURE_PAIRWISE; - } else { - ev.flags |= IW_MICFAILURE_GROUP; - } - - ev.src_addr.sa_family = ARPHRD_ETHER; - memcpy(ev.src_addr.sa_data, pMACHeader->addr2, ETH_ALEN); - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = sizeof(ev); - PRINT_K("wireless_send_event--->IWEVMICHAELMICFAILURE\n"); - wireless_send_event(pDevice->dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev); - - } - - return false; - - } - } - } //---end of SOFT MIC----------------------------------------------------------------------- - - // ++++++++++ Reply Counter Check +++++++++++++ - - if ((pKey != NULL) && ((pKey->byCipherSuite == KEY_CTL_TKIP) || - (pKey->byCipherSuite == KEY_CTL_CCMP))) { - if (bIsWEP) { - u16 wLocalTSC15_0 = 0; - u32 dwLocalTSC47_16 = 0; - unsigned long long RSC = 0; - // endian issues - RSC = *((unsigned long long *) &(pKey->KeyRSC)); - wLocalTSC15_0 = (u16) RSC; - dwLocalTSC47_16 = (u32) (RSC>>16); - - RSC = dwRxTSC47_16; - RSC <<= 16; - RSC += wRxTSC15_0; - memcpy(&(pKey->KeyRSC), &RSC, sizeof(u64)); - - if (pDevice->vnt_mgmt.eCurrMode == WMAC_MODE_ESS_STA && - pDevice->vnt_mgmt.eCurrState == WMAC_STATE_ASSOC) { - /* check RSC */ - if ( (wRxTSC15_0 < wLocalTSC15_0) && - (dwRxTSC47_16 <= dwLocalTSC47_16) && - !((dwRxTSC47_16 == 0) && (dwLocalTSC47_16 == 0xFFFFFFFF))) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TSC is illegal~~!\n "); - - if (bDeFragRx) { - if (!device_alloc_frag_buf(pDevice, &pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx])) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc more frag bufs\n", - pDevice->dev->name); - } - } - return false; - } - } - } - } // ----- End of Reply Counter Check -------------------------- - - s_vProcessRxMACHeader(pDevice, (u8 *)(skb->data+8), FrameSize, bIsWEP, bExtIV, &cbHeaderOffset); - FrameSize -= cbHeaderOffset; - cbHeaderOffset += 8; // 8 is Rcv buffer header - - // Null data, framesize = 12 - if (FrameSize < 12) - return false; - - skb->data += cbHeaderOffset; - skb->tail += cbHeaderOffset; - skb_put(skb, FrameSize); - skb->protocol=eth_type_trans(skb, skb->dev); - skb->ip_summed=CHECKSUM_NONE; - pStats->rx_bytes +=skb->len; - pStats->rx_packets++; - netif_rx(skb); - if (bDeFragRx) { - if (!device_alloc_frag_buf(pDevice, &pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx])) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc more frag bufs\n", - pDevice->dev->name); - } - return false; - } - - return true; -} - -static int s_bHandleRxEncryption(struct vnt_private *pDevice, u8 *pbyFrame, - u32 FrameSize, u8 *pbyRsr, u8 *pbyNewRsr, PSKeyItem *pKeyOut, - s32 *pbExtIV, u16 *pwRxTSC15_0, u32 *pdwRxTSC47_16) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u32 PayloadLen = FrameSize; - u8 *pbyIV; - u8 byKeyIdx; - PSKeyItem pKey = NULL; - u8 byDecMode = KEY_CTL_WEP; - - *pwRxTSC15_0 = 0; - *pdwRxTSC47_16 = 0; - - pbyIV = pbyFrame + WLAN_HDR_ADDR3_LEN; - if ( WLAN_GET_FC_TODS(*(u16 *)pbyFrame) && - WLAN_GET_FC_FROMDS(*(u16 *)pbyFrame) ) { - pbyIV += 6; // 6 is 802.11 address4 - PayloadLen -= 6; - } - byKeyIdx = (*(pbyIV+3) & 0xc0); - byKeyIdx >>= 6; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\nKeyIdx: %d\n", byKeyIdx); - - if ((pMgmt->eAuthenMode == WMAC_AUTH_WPA) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) { - if (((*pbyRsr & (RSR_ADDRBROAD | RSR_ADDRMULTI)) == 0) && - (pMgmt->byCSSPK != KEY_CTL_NONE)) { - // unicast pkt use pairwise key - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"unicast pkt\n"); - if (KeybGetKey(&(pDevice->sKey), pDevice->abyBSSID, 0xFFFFFFFF, &pKey) == true) { - if (pMgmt->byCSSPK == KEY_CTL_TKIP) - byDecMode = KEY_CTL_TKIP; - else if (pMgmt->byCSSPK == KEY_CTL_CCMP) - byDecMode = KEY_CTL_CCMP; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"unicast pkt: %d, %p\n", byDecMode, pKey); - } else { - // use group key - KeybGetKey(&(pDevice->sKey), pDevice->abyBSSID, byKeyIdx, &pKey); - if (pMgmt->byCSSGK == KEY_CTL_TKIP) - byDecMode = KEY_CTL_TKIP; - else if (pMgmt->byCSSGK == KEY_CTL_CCMP) - byDecMode = KEY_CTL_CCMP; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"group pkt: %d, %d, %p\n", byKeyIdx, byDecMode, pKey); - } - } - // our WEP only support Default Key - if (pKey == NULL) { - // use default group key - KeybGetKey(&(pDevice->sKey), pDevice->abyBroadcastAddr, byKeyIdx, &pKey); - if (pMgmt->byCSSGK == KEY_CTL_TKIP) - byDecMode = KEY_CTL_TKIP; - else if (pMgmt->byCSSGK == KEY_CTL_CCMP) - byDecMode = KEY_CTL_CCMP; - } - *pKeyOut = pKey; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"AES:%d %d %d\n", pMgmt->byCSSPK, pMgmt->byCSSGK, byDecMode); - - if (pKey == NULL) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey == NULL\n"); - return false; - } - if (byDecMode != pKey->byCipherSuite) { - *pKeyOut = NULL; - return false; - } - if (byDecMode == KEY_CTL_WEP) { - // handle WEP - if ((pDevice->byLocalID <= REV_ID_VT3253_A1) || - (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == true)) { - // Software WEP - // 1. 3253A - // 2. WEP 256 - - PayloadLen -= (WLAN_HDR_ADDR3_LEN + 4 + 4); // 24 is 802.11 header,4 is IV, 4 is crc - memcpy(pDevice->abyPRNG, pbyIV, 3); - memcpy(pDevice->abyPRNG + 3, pKey->abyKey, pKey->uKeyLength); - rc4_init(&pDevice->SBox, pDevice->abyPRNG, pKey->uKeyLength + 3); - rc4_encrypt(&pDevice->SBox, pbyIV+4, pbyIV+4, PayloadLen); - - if (ETHbIsBufferCrc32Ok(pbyIV+4, PayloadLen)) { - *pbyNewRsr |= NEWRSR_DECRYPTOK; - } - } - } else if ((byDecMode == KEY_CTL_TKIP) || - (byDecMode == KEY_CTL_CCMP)) { - // TKIP/AES - - PayloadLen -= (WLAN_HDR_ADDR3_LEN + 8 + 4); // 24 is 802.11 header, 8 is IV&ExtIV, 4 is crc - *pdwRxTSC47_16 = cpu_to_le32(*(u32 *)(pbyIV + 4)); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ExtIV: %x\n", *pdwRxTSC47_16); - if (byDecMode == KEY_CTL_TKIP) { - *pwRxTSC15_0 = cpu_to_le16(MAKEWORD(*(pbyIV+2), *pbyIV)); - } else { - *pwRxTSC15_0 = cpu_to_le16(*(u16 *)pbyIV); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TSC0_15: %x\n", *pwRxTSC15_0); - - if ((byDecMode == KEY_CTL_TKIP) && - (pDevice->byLocalID <= REV_ID_VT3253_A1)) { - // Software TKIP - // 1. 3253 A - struct ieee80211_hdr *pMACHeader = (struct ieee80211_hdr *) (pbyFrame); - TKIPvMixKey(pKey->abyKey, pMACHeader->addr2, *pwRxTSC15_0, *pdwRxTSC47_16, pDevice->abyPRNG); - rc4_init(&pDevice->SBox, pDevice->abyPRNG, TKIP_KEY_LEN); - rc4_encrypt(&pDevice->SBox, pbyIV+8, pbyIV+8, PayloadLen); - if (ETHbIsBufferCrc32Ok(pbyIV+8, PayloadLen)) { - *pbyNewRsr |= NEWRSR_DECRYPTOK; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ICV OK!\n"); - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ICV FAIL!!!\n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PayloadLen = %d\n", PayloadLen); - } - } - }// end of TKIP/AES - - if ((*(pbyIV+3) & 0x20) != 0) - *pbExtIV = true; - return true; -} - void RXvWorkItem(struct work_struct *work) { struct vnt_private *priv = diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 45da7b2c5de2..0afd882a5e47 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -38,9 +38,6 @@ void RXvMngWorkItem(struct work_struct *work); void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb); -int RXbBulkInProcessData(struct vnt_private *, struct vnt_rcb *pRCB, - unsigned long BytesToIndicate); - int vnt_rx_data(struct vnt_private *, struct vnt_rcb *, unsigned long bytes_recieved); -- cgit From 2f8da5f40d2330a64754a8a58ef53eabe3a8bcc5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:41 +0100 Subject: staging: vt6656: main_usb removed dead code Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 - drivers/staging/vt6656/main_usb.c | 371 -------------------------------------- drivers/staging/vt6656/wcmd.c | 1 - 3 files changed, 374 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 1b74f472e286..c2e495b868bd 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -754,8 +754,6 @@ struct vnt_private { #define MP_IS_READY(_M) (((_M)->Flags & fMP_DISCONNECTED) == 0) -int device_alloc_frag_buf(struct vnt_private *, PSDeFragControlBlock pDeF); -void vnt_configure_filter(struct vnt_private *); int vnt_init(struct vnt_private *priv); #endif diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ce8aa2644f74..f3b08903098f 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -204,21 +204,11 @@ 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); -static void device_set_multi(struct net_device *dev); -static int device_close(struct net_device *dev); -static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); - static int device_init_registers(struct vnt_private *pDevice); -static bool device_init_defrag_cb(struct vnt_private *pDevice); -static int ethtool_ioctl(struct net_device *dev, struct ifreq *); static void device_free_tx_bufs(struct vnt_private *pDevice); static void device_free_rx_bufs(struct vnt_private *pDevice); static void device_free_int_bufs(struct vnt_private *pDevice); -static void device_free_frag_bufs(struct vnt_private *pDevice); static bool device_alloc_bufs(struct vnt_private *pDevice); static void usb_device_reset(struct vnt_private *pDevice); @@ -561,15 +551,6 @@ static int device_init_registers(struct vnt_private *pDevice) return true; } -static const struct net_device_ops device_netdev_ops = { - .ndo_open = device_open, - .ndo_stop = device_close, - .ndo_do_ioctl = device_ioctl, - .ndo_get_stats = device_get_stats, - .ndo_start_xmit = device_xmit, - .ndo_set_rx_mode = device_set_multi, -}; - static void device_free_tx_bufs(struct vnt_private *priv) { struct vnt_usb_send_context *tx_context; @@ -726,213 +707,6 @@ free_tx: return false; } -static bool device_init_defrag_cb(struct vnt_private *pDevice) -{ - int i; - PSDeFragControlBlock pDeF; - - /* Init the fragment ctl entries */ - for (i = 0; i < CB_MAX_RX_FRAG; i++) { - pDeF = &(pDevice->sRxDFCB[i]); - if (!device_alloc_frag_buf(pDevice, pDeF)) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s: can not alloc frag bufs\n", - pDevice->dev->name); - goto free_frag; - } - } - pDevice->cbDFCB = CB_MAX_RX_FRAG; - pDevice->cbFreeDFCB = pDevice->cbDFCB; - return true; - -free_frag: - device_free_frag_bufs(pDevice); - return false; -} - -static void device_free_frag_bufs(struct vnt_private *pDevice) -{ - PSDeFragControlBlock pDeF; - int i; - - for (i = 0; i < CB_MAX_RX_FRAG; i++) { - - pDeF = &(pDevice->sRxDFCB[i]); - - if (pDeF->skb) - dev_kfree_skb(pDeF->skb); - } -} - -int device_alloc_frag_buf(struct vnt_private *pDevice, - PSDeFragControlBlock pDeF) -{ - pDeF->skb = netdev_alloc_skb(pDevice->dev, pDevice->rx_buf_sz); - if (!pDeF->skb) - return false; - - return true; -} - -static int device_open(struct net_device *dev) -{ - struct vnt_private *pDevice = netdev_priv(dev); - - pDevice->fWPA_Authened = false; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " device_open...\n"); - - pDevice->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS; - - if (device_alloc_bufs(pDevice) == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " device_alloc_bufs fail... \n"); - return -ENOMEM; - } - - if (device_init_defrag_cb(pDevice)== false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Initial defragment cb fail \n"); - goto free_rx_tx; - } - - MP_CLEAR_FLAG(pDevice, fMP_DISCONNECTED); - MP_SET_FLAG(pDevice, fMP_POST_READS); - MP_SET_FLAG(pDevice, fMP_POST_WRITES); - - if (device_init_registers(pDevice) == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " init register fail\n"); - goto free_all; - } - - /* init for key management */ - KeyvInitTable(pDevice,&pDevice->sKey); - memcpy(pDevice->vnt_mgmt.abyMACAddr, - pDevice->abyCurrentNetAddr, ETH_ALEN); - memcpy(pDevice->dev->dev_addr, pDevice->abyCurrentNetAddr, ETH_ALEN); - pDevice->bStopTx0Pkt = false; - pDevice->bStopDataPkt = false; - pDevice->bRoaming = false; - pDevice->bIsRoaming = false; - pDevice->bEnableRoaming = false; - - vMgrObjectInit(pDevice); - - schedule_delayed_work(&pDevice->second_callback_work, HZ); - - pDevice->int_interval = 1; /* bInterval is set to 1 */ - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - - pDevice->bIsRxWorkItemQueued = true; - - pDevice->bWPADEVUp = false; - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = false; - pDevice->bWPASuppWextEnabled = false; - pDevice->byReAssocCount = 0; - - schedule_work(&pDevice->read_work_item); - INTvWorkItem(pDevice); - - /* if WEP key already set by iwconfig but device not yet open */ - if ((pDevice->bEncryptionEnable == true) && (pDevice->bTransmitKey == true)) { - KeybSetDefaultKey( pDevice, - &(pDevice->sKey), - pDevice->byKeyIndex | (1 << 31), - pDevice->uKeyLength, - NULL, - pDevice->abyKey, - KEY_CTL_WEP - ); - - pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled; - } - - if (pDevice->vnt_mgmt.eConfigMode == WMAC_CONFIG_AP) - bScheduleCommand((void *) pDevice, WLAN_CMD_RUN_AP, NULL); - else - bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); - - netif_stop_queue(pDevice->dev); - pDevice->flags |= DEVICE_FLAGS_OPENED; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_open success..\n"); - return 0; - -free_all: - device_free_frag_bufs(pDevice); -free_rx_tx: - device_free_rx_bufs(pDevice); - device_free_tx_bufs(pDevice); - device_free_int_bufs(pDevice); - usb_kill_urb(pDevice->pInterruptURB); - usb_free_urb(pDevice->pInterruptURB); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_open fail.. \n"); - return -ENOMEM; -} - -static int device_close(struct net_device *dev) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u8 uu; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close1\n"); - if (pDevice == NULL) - return -ENODEV; - - if (pDevice->bLinkPass) { - bScheduleCommand((void *) pDevice, WLAN_CMD_DISASSOCIATE, NULL); - mdelay(30); - } - - memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - pMgmt->bShareKeyAlgorithm = false; - pDevice->bEncryptionEnable = false; - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - - for (uu = 0; uu < MAX_KEY_TABLE; uu++) - vnt_mac_disable_keyentry(pDevice, uu); - - if ((pDevice->flags & DEVICE_FLAGS_UNPLUG) == false) - vnt_mac_shutdown(pDevice); - - netif_stop_queue(pDevice->dev); - MP_SET_FLAG(pDevice, fMP_DISCONNECTED); - MP_CLEAR_FLAG(pDevice, fMP_POST_WRITES); - MP_CLEAR_FLAG(pDevice, fMP_POST_READS); - - cancel_delayed_work_sync(&pDevice->run_command_work); - cancel_delayed_work_sync(&pDevice->second_callback_work); - - cancel_work_sync(&pDevice->rx_mng_work_item); - cancel_work_sync(&pDevice->read_work_item); - - pDevice->bRoaming = false; - pDevice->bIsRoaming = false; - pDevice->bEnableRoaming = false; - pDevice->bCmdRunning = false; - pDevice->bLinkPass = false; - memset(pMgmt->abyCurrBSSID, 0, 6); - pMgmt->eCurrState = WMAC_STATE_IDLE; - - pDevice->flags &= ~DEVICE_FLAGS_OPENED; - - device_free_tx_bufs(pDevice); - device_free_rx_bufs(pDevice); - device_free_int_bufs(pDevice); - device_free_frag_bufs(pDevice); - - usb_kill_urb(pDevice->pInterruptURB); - usb_free_urb(pDevice->pInterruptURB); - - BSSvClearNodeDBTable(pDevice, 0); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close2 \n"); - - return 0; -} - static void vnt_tx_80211(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, struct sk_buff *skb) { @@ -1473,151 +1247,6 @@ static int vt6656_resume(struct usb_interface *intf) #endif /* CONFIG_PM */ -static int device_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct net_device_stats *stats = &pDevice->stats; - unsigned long flags; - - spin_lock_irqsave(&pDevice->lock, flags); - - netif_stop_queue(dev); - - if (!pDevice->bLinkPass) { - dev_kfree_skb_irq(skb); - goto out; - } - - if (pDevice->bStopDataPkt) { - dev_kfree_skb_irq(skb); - stats->tx_dropped++; - goto out; - } - - if (nsDMA_tx_packet(pDevice, skb)) { - if (netif_queue_stopped(dev)) - netif_wake_queue(dev); - } - -out: - spin_unlock_irqrestore(&pDevice->lock, flags); - - return NETDEV_TX_OK; -} - -static void device_set_multi(struct net_device *dev) -{ - struct vnt_private *priv = netdev_priv(dev); - unsigned long flags; - - if (priv->flags & DEVICE_FLAGS_OPENED) { - spin_lock_irqsave(&priv->lock, flags); - - bScheduleCommand(priv, WLAN_CMD_CONFIGURE_FILTER, NULL); - - spin_unlock_irqrestore(&priv->lock, flags); - } -} - -void vnt_configure_filter(struct vnt_private *priv) -{ - struct net_device *dev = priv->dev; - struct vnt_manager *mgmt = &priv->vnt_mgmt; - struct netdev_hw_addr *ha; - u64 mc_filter = 0; - u8 tmp = 0; - int rc; - - rc = vnt_control_in(priv, MESSAGE_TYPE_READ, - MAC_REG_RCR, MESSAGE_REQUEST_MACREG, 1, &tmp); - if (rc == 0) - priv->byRxMode = tmp; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "priv->byRxMode in= %x\n", - priv->byRxMode); - - if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ - DBG_PRT(MSG_LEVEL_ERR, KERN_NOTICE - "%s: Promiscuous mode enabled.\n", dev->name); - /* unconditionally log net taps */ - priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); - } else if ((netdev_mc_count(dev) > priv->multicast_limit) || - (dev->flags & IFF_ALLMULTI)) { - mc_filter = ~0x0; - vnt_mac_set_filter(priv, mc_filter); - - priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - } else { - netdev_for_each_mc_addr(ha, dev) { - int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; - - mc_filter |= 1ULL << (bit_nr & 0x3f); - } - - vnt_mac_set_filter(priv, mc_filter); - - priv->byRxMode &= ~(RCR_UNICAST); - priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - } - - if (mgmt->eConfigMode == WMAC_CONFIG_AP) { - /* - * If AP mode, don't enable RCR_UNICAST since HW only compares - * addr1 with local MAC - */ - priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - priv->byRxMode &= ~(RCR_UNICAST); - } - - vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, - MAC_REG_RCR, priv->byRxMode); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "priv->byRxMode out= %x\n", priv->byRxMode); -} - -static struct net_device_stats *device_get_stats(struct net_device *dev) -{ - struct vnt_private *pDevice = netdev_priv(dev); - - return &pDevice->stats; -} - -static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - int rc = 0; - - switch (cmd) { - case SIOCETHTOOL: - return ethtool_ioctl(dev, rq); - - } - - return rc; -} - -static int ethtool_ioctl(struct net_device *dev, struct ifreq *rq) -{ - u32 ethcmd; - - if (copy_from_user(ðcmd, rq->ifr_data, sizeof(ethcmd))) - return -EFAULT; - - switch (ethcmd) { - case ETHTOOL_GDRVINFO: { - struct ethtool_drvinfo info = {ETHTOOL_GDRVINFO}; - strncpy(info.driver, DEVICE_NAME, sizeof(info.driver)-1); - strncpy(info.version, DEVICE_VERSION, sizeof(info.version)-1); - if (copy_to_user(rq->ifr_data, &info, sizeof(info))) - return -EFAULT; - return 0; - } - - } - - return -EOPNOTSUPP; -} - MODULE_DEVICE_TABLE(usb, vt6656_table); static struct usb_driver vt6656_driver = { diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 81a6683f3b58..4d7d5b14e7e5 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -899,7 +899,6 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_CONFIGURE_FILTER_START: - vnt_configure_filter(pDevice); break; default: break; -- cgit From ba801e23c069bc62be924a168826e21cb8fe9913 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:42 +0100 Subject: staging: vt6656: deadcode iwctl.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/iwctl.c | 1802 ------------------------------------- drivers/staging/vt6656/iwctl.h | 138 --- drivers/staging/vt6656/main_usb.c | 2 - 4 files changed, 1943 deletions(-) delete mode 100644 drivers/staging/vt6656/iwctl.c delete mode 100644 drivers/staging/vt6656/iwctl.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index b5ec483f3eb4..0c5628c6b712 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -23,7 +23,6 @@ vt6656_stage-y += main_usb.o \ tkip.o \ michael.o \ rf.o \ - iwctl.o \ wpactl.o \ usbpipe.o \ channel.o \ diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c deleted file mode 100644 index 3e144ed96363..000000000000 --- a/drivers/staging/vt6656/iwctl.c +++ /dev/null @@ -1,1802 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: iwctl.c - * - * Purpose: wireless ext & ioctl functions - * - * Author: Lyndon Chen - * - * Date: July 5, 2006 - * - * Functions: - * - * Revision History: - * - */ - -#include "device.h" -#include "iwctl.h" -#include "mac.h" -#include "card.h" -#include "power.h" -#include "rf.h" -#include "iowpa.h" -#include "wpactl.h" -#include "usbpipe.h" -#include "baseband.h" - -static const long frequency_list[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, - 4915, 4920, 4925, 4935, 4940, 4945, 4960, 4980, - 5035, 5040, 5045, 5055, 5060, 5080, 5170, 5180, 5190, 5200, 5210, 5220, 5230, 5240, - 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 5620, 5640, 5660, 5680, - 5700, 5745, 5765, 5785, 5805, 5825 -}; - -static int msglevel = MSG_LEVEL_INFO; - -struct iw_statistics *iwctl_get_wireless_stats(struct net_device *dev) -{ - struct vnt_private *pDevice = netdev_priv(dev); - long ldBm; - - pDevice->wstats.status = pDevice->op_mode; - vnt_rf_rssi_to_dbm(pDevice, (u8)(pDevice->uCurrRSSI), &ldBm); - pDevice->wstats.qual.level = ldBm; - pDevice->wstats.qual.noise = 0; - pDevice->wstats.qual.updated = 1; - pDevice->wstats.discard.nwid = 0; - pDevice->wstats.discard.code = 0; - pDevice->wstats.discard.fragment = 0; - pDevice->wstats.discard.misc = 0; - pDevice->wstats.miss.beacon = 0; - return &pDevice->wstats; -} - -/* - * Wireless Handler: get protocol name - */ -int iwctl_giwname(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - strcpy(wrqu->name, "802.11-a/b/g"); - return 0; -} - -/* - * Wireless Handler: set scan - */ -int iwctl_siwscan(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_point *wrq = &wrqu->data; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_scan_req *req = (struct iw_scan_req *)extra; - u8 abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - PWLAN_IE_SSID pItemSSID = NULL; - unsigned long flags; - - if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) - return -EINVAL; - - PRINT_K(" SIOCSIWSCAN\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (pMgmt->eScanState == WMAC_IS_SCANNING) { - // In scanning.. - PRINT_K("SIOCSIWSCAN(overlap??)-->In scanning...\n"); - return -EAGAIN; - } - - if (pDevice->byReAssocCount > 0) { // reject scan when re-associating! - // send scan event to wpa_Supplicant - union iwreq_data wrqu; - PRINT_K("wireless_send_event--->SIOCGIWSCAN(scan done)\n"); - memset(&wrqu, 0, sizeof(wrqu)); - wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL); - return 0; - } - - spin_lock_irqsave(&pDevice->lock, flags); - - BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); - - // mike add: active scan OR passive scan OR desire_ssid scan - if (wrq->length == sizeof(struct iw_scan_req)) { - if (wrq->flags & IW_SCAN_THIS_ESSID) { // desire_ssid scan - memset(abyScanSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - pItemSSID = (PWLAN_IE_SSID)abyScanSSID; - pItemSSID->byElementID = WLAN_EID_SSID; - memcpy(pItemSSID->abySSID, req->essid, (int)req->essid_len); - if (pItemSSID->abySSID[req->essid_len] == '\0') { - if (req->essid_len > 0) - pItemSSID->len = req->essid_len; - } else { - pItemSSID->len = req->essid_len; - } - 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((void *)pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - return 0; - } else if (req->scan_type == IW_SCAN_TYPE_PASSIVE) { // passive scan - pMgmt->eScanType = WMAC_SCAN_PASSIVE; - } - } else { // active scan - pMgmt->eScanType = WMAC_SCAN_ACTIVE; - } - - pMgmt->eScanType = WMAC_SCAN_PASSIVE; - bScheduleCommand((void *)pDevice, WLAN_CMD_BSSID_SCAN, NULL); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - return 0; -} - -/* - * Wireless Handler : get scan results - */ -int iwctl_giwscan(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct iw_point *wrq = &wrqu->data; - int ii; - int jj; - int kk; - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PKnownBSS pBSS; - PWLAN_IE_SSID pItemSSID; - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_SUPP_RATES pExtSuppRates; - char *current_ev = extra; - char *end_buf = extra + IW_SCAN_MAX_DATA; - char *current_val = NULL; - struct iw_event iwe; - long ldBm; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSCAN\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (pMgmt->eScanState == WMAC_IS_SCANNING) { - // In scanning.. - return -EAGAIN; - } - pBSS = &(pMgmt->sBSSList[0]); - for (ii = 0, jj = 0; jj < MAX_BSS_NUM; jj++) { - if (current_ev >= end_buf) - break; - pBSS = &(pMgmt->sBSSList[jj]); - if (pBSS->bActive) { - // ADD mac address - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, pBSS->abyBSSID, WLAN_BSSID_LEN); - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_ADDR_LEN); - // ADD ssid - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWESSID; - pItemSSID = (PWLAN_IE_SSID)pBSS->abySSID; - iwe.u.data.length = pItemSSID->len; - iwe.u.data.flags = 1; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, pItemSSID->abySSID); - // ADD mode - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWMODE; - if (WLAN_GET_CAP_INFO_ESS(pBSS->wCapInfo)) - iwe.u.mode = IW_MODE_INFRA; - else - iwe.u.mode = IW_MODE_ADHOC; - iwe.len = IW_EV_UINT_LEN; - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_UINT_LEN); - // ADD frequency - pSuppRates = (PWLAN_IE_SUPP_RATES)pBSS->abySuppRates; - pExtSuppRates = (PWLAN_IE_SUPP_RATES)pBSS->abyExtSuppRates; - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWFREQ; - iwe.u.freq.m = pBSS->uChannel; - iwe.u.freq.e = 0; - iwe.u.freq.i = 0; - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_FREQ_LEN); - { - int f = (int)pBSS->uChannel - 1; - if (f < 0) - f = 0; - iwe.u.freq.m = frequency_list[f] * 100000; - iwe.u.freq.e = 1; - } - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_FREQ_LEN); - // ADD quality - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVQUAL; - vnt_rf_rssi_to_dbm(pDevice, (u8)(pBSS->uRSSI), &ldBm); - iwe.u.qual.level = ldBm; - iwe.u.qual.noise = 0; - - if (-ldBm < 50) - iwe.u.qual.qual = 100; - else if (-ldBm > 90) - iwe.u.qual.qual = 0; - else - iwe.u.qual.qual = (40 - (-ldBm - 50)) * 100 / 40; - iwe.u.qual.updated = 7; - - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_QUAL_LEN); - // ADD encryption - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWENCODE; - iwe.u.data.length = 0; - if (WLAN_GET_CAP_INFO_PRIVACY(pBSS->wCapInfo)) - iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - else - iwe.u.data.flags = IW_ENCODE_DISABLED; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, pItemSSID->abySSID); - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWRATE; - iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; - current_val = current_ev + IW_EV_LCP_LEN; - - for (kk = 0; kk < 12; kk++) { - if (pSuppRates->abyRates[kk] == 0) - break; - // Bit rate given in 500 kb/s units (+ 0x80) - iwe.u.bitrate.value = ((pSuppRates->abyRates[kk] & 0x7f) * 500000); - current_val = iwe_stream_add_value(info, current_ev, current_val, end_buf, &iwe, IW_EV_PARAM_LEN); - } - for (kk = 0; kk < 8; kk++) { - if (pExtSuppRates->abyRates[kk] == 0) - break; - // Bit rate given in 500 kb/s units (+ 0x80) - iwe.u.bitrate.value = ((pExtSuppRates->abyRates[kk] & 0x7f) * 500000); - current_val = iwe_stream_add_value(info, current_ev, current_val, end_buf, &iwe, IW_EV_PARAM_LEN); - } - - if ((current_val - current_ev) > IW_EV_LCP_LEN) - current_ev = current_val; - - if ((pBSS->wWPALen > 0) && (pBSS->wWPALen <= MAX_WPA_IE_LEN)) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = pBSS->wWPALen; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, pBSS->byWPAIE); - } - - if ((pBSS->wRSNLen > 0) && (pBSS->wRSNLen <= MAX_WPA_IE_LEN)) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = pBSS->wRSNLen; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, pBSS->byRSNIE); - } - } - } // for - wrq->length = current_ev - extra; - return 0; -} - -/* - * Wireless Handler: set frequence or channel - */ -int iwctl_siwfreq(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_freq *wrq = &wrqu->freq; - int rc = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFREQ\n"); - - // If setting by frequency, convert to a channel - if ((wrq->e == 1) && (wrq->m >= (int)2.412e8) && - (wrq->m <= (int)2.487e8)) { - int f = wrq->m / 100000; - int c = 0; - while ((c < 14) && (f != frequency_list[c])) - c++; - wrq->e = 0; - wrq->m = c + 1; - } - // Setting by channel number - if ((wrq->m > 14) || (wrq->e > 0)) { - rc = -EOPNOTSUPP; - } else { - int channel = wrq->m; - if ((channel < 1) || (channel > 14)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: New channel value of %d is invalid!\n", dev->name, wrq->m); - rc = -EINVAL; - } else { - // Yes ! We can set it !!! - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Set to channel = %d\n", channel); - pDevice->uChannel = channel; - } - } - return rc; -} - -/* - * Wireless Handler: get frequence or channel - */ -int iwctl_giwfreq(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_freq *wrq = &wrqu->freq; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFREQ\n"); - - if (pMgmt == NULL) - return -EFAULT; - -#ifdef WEXT_USECHANNELS - wrq->m = (int)pMgmt->uCurrChannel; - wrq->e = 0; -#else - { - int f = (int)pMgmt->uCurrChannel - 1; - if (f < 0) - f = 0; - wrq->m = frequency_list[f] * 100000; - wrq->e = 1; - } -#endif - return 0; -} - -/* - * Wireless Handler: set operation mode - */ -int iwctl_siwmode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - __u32 *wmode = &wrqu->mode; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - unsigned long flags; - int rc = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMODE\n"); - - if (pMgmt == NULL) - return -EFAULT; - - switch (*wmode) { - case IW_MODE_ADHOC: - if (pMgmt->eConfigMode != WMAC_CONFIG_IBSS_STA) { - pMgmt->eConfigMode = WMAC_CONFIG_IBSS_STA; - if (pDevice->flags & DEVICE_FLAGS_OPENED) - pDevice->bCommit = true; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to ad-hoc\n"); - break; - case IW_MODE_AUTO: - case IW_MODE_INFRA: - if (pMgmt->eConfigMode != WMAC_CONFIG_ESS_STA) { - pMgmt->eConfigMode = WMAC_CONFIG_ESS_STA; - if (pDevice->flags & DEVICE_FLAGS_OPENED) - pDevice->bCommit = true; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to infrastructure\n"); - break; - case IW_MODE_MASTER: - rc = -EOPNOTSUPP; - break; - - case IW_MODE_REPEAT: - pMgmt->eConfigMode = WMAC_CONFIG_ESS_STA; - rc = -EOPNOTSUPP; - break; - default: - rc = -EINVAL; - } - - if (pDevice->bCommit) { - if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - netif_stop_queue(pDevice->dev); - - spin_lock_irqsave(&pDevice->lock, flags); - - bScheduleCommand((void *) pDevice, - WLAN_CMD_RUN_AP, NULL); - - spin_unlock_irqrestore(&pDevice->lock, flags); - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Commit the settings\n"); - - if (pDevice->bLinkPass && - memcmp(pMgmt->abyCurrSSID, - pMgmt->abyDesireSSID, - WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN)) { - bScheduleCommand((void *) pDevice, - WLAN_CMD_DISASSOCIATE, NULL); - } else { - pDevice->bLinkPass = false; - pMgmt->eCurrState = WMAC_STATE_IDLE; - memset(pMgmt->abyCurrBSSID, 0, 6); - } - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - - netif_stop_queue(pDevice->dev); - - pMgmt->eScanType = WMAC_SCAN_ACTIVE; - - if (!pDevice->bWPASuppWextEnabled) - bScheduleCommand((void *) pDevice, - WLAN_CMD_BSSID_SCAN, - pMgmt->abyDesireSSID); - - bScheduleCommand((void *) pDevice, - WLAN_CMD_SSID, - NULL); - } - pDevice->bCommit = false; - } - - return rc; -} - -/* - * Wireless Handler: get operation mode - */ -int iwctl_giwmode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - __u32 *wmode = &wrqu->mode; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWMODE\n"); - - if (pMgmt == NULL) - return -EFAULT; - - // If not managed, assume it's ad-hoc - switch (pMgmt->eConfigMode) { - case WMAC_CONFIG_ESS_STA: - *wmode = IW_MODE_INFRA; - break; - case WMAC_CONFIG_IBSS_STA: - *wmode = IW_MODE_ADHOC; - break; - case WMAC_CONFIG_AUTO: - *wmode = IW_MODE_INFRA; - break; - case WMAC_CONFIG_AP: - *wmode = IW_MODE_MASTER; - break; - default: - *wmode = IW_MODE_ADHOC; - } - - return 0; -} - -/* - * Wireless Handler: get capability range - */ -int iwctl_giwrange(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct iw_point *wrq = &wrqu->data; - struct iw_range *range = (struct iw_range *)extra; - int i; - int k; - u8 abySupportedRates[13] = { - 0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, - 0x60, 0x6C, 0x90 - }; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRANGE\n"); - if (wrq->pointer) { - wrq->length = sizeof(struct iw_range); - memset(range, 0, sizeof(struct iw_range)); - range->min_nwid = 0x0000; - range->max_nwid = 0x0000; - range->num_channels = 14; - // Should be based on cap_rid.country to give only - // what the current card support - k = 0; - for (i = 0; i < 14; i++) { - range->freq[k].i = i + 1; // List index - range->freq[k].m = frequency_list[i] * 100000; - range->freq[k++].e = 1; // Values in table in MHz -> * 10^5 * 10 - } - range->num_frequency = k; - // Hum... Should put the right values there - range->max_qual.qual = 100; - range->max_qual.level = 0; - range->max_qual.noise = 0; - range->sensitivity = 255; - - for (i = 0; i < 13; i++) { - range->bitrate[i] = abySupportedRates[i] * 500000; - if (range->bitrate[i] == 0) - break; - } - range->num_bitrates = i; - - // Set an indication of the max TCP throughput - // in bit/s that we can expect using this interface. - // May be use for QoS stuff... Jean II - if (i > 2) - range->throughput = 5 * 1000 * 1000; - else - range->throughput = 1.5 * 1000 * 1000; - - range->min_rts = 0; - range->max_rts = 2312; - range->min_frag = 256; - range->max_frag = 2312; - - // the encoding capabilities - range->num_encoding_sizes = 3; - // 64(40) bits WEP - range->encoding_size[0] = 5; - // 128(104) bits WEP - range->encoding_size[1] = 13; - // 256 bits for WPA-PSK - range->encoding_size[2] = 32; - // 4 keys are allowed - range->max_encoding_tokens = 4; - - range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | - IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; - - range->min_pmp = 0; - range->max_pmp = 1000000; // 1 secs - range->min_pmt = 0; - range->max_pmt = 1000000; // 1 secs - range->pmp_flags = IW_POWER_PERIOD; - range->pmt_flags = IW_POWER_TIMEOUT; - range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R; - - // Transmit Power - values are in mW - range->txpower[0] = 100; - range->num_txpower = 1; - range->txpower_capa = IW_TXPOW_MWATT; - range->we_version_source = WIRELESS_EXT; - range->we_version_compiled = WIRELESS_EXT; - range->retry_capa = IW_RETRY_LIMIT | IW_RETRY_LIFETIME; - range->retry_flags = IW_RETRY_LIMIT; - range->r_time_flags = IW_RETRY_LIFETIME; - range->min_retry = 1; - range->max_retry = 65535; - range->min_r_time = 1024; - range->max_r_time = 65535 * 1024; - // Experimental measurements - boundary 11/5.5 Mb/s - // Note : with or without the (local->rssi), results - // are somewhat different. - Jean II - range->avg_qual.qual = 6; - range->avg_qual.level = 176; // -80 dBm - range->avg_qual.noise = 0; - } - - return 0; -} - -/* - * Wireless Handler : set ap mac address - */ -int iwctl_siwap(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct sockaddr *wrq = &wrqu->ap_addr; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int rc = 0; - u8 ZeroBSSID[WLAN_BSSID_LEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - PRINT_K(" SIOCSIWAP\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (wrq->sa_family != ARPHRD_ETHER) { - rc = -EINVAL; - } else { - memcpy(pMgmt->abyDesireBSSID, wrq->sa_data, 6); - // mike: add - if ((is_broadcast_ether_addr(pMgmt->abyDesireBSSID)) || - (memcmp(pMgmt->abyDesireBSSID, ZeroBSSID, 6) == 0)) { - PRINT_K("SIOCSIWAP:invalid desired BSSID return!\n"); - return rc; - } - // 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?? - { - unsigned ii; - unsigned uSameBssidNum = 0; - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - if (pMgmt->sBSSList[ii].bActive && - ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID, - pMgmt->abyDesireBSSID)) { - uSameBssidNum++; - } - } - if (uSameBssidNum >= 2) { //hit: desired AP is in hidden ssid mode!!! - PRINT_K("SIOCSIWAP:ignore for desired AP in hidden mode\n"); - return rc; - } - } - - if (pDevice->flags & DEVICE_FLAGS_OPENED) - pDevice->bCommit = true; - } - return rc; -} - -/* - * Wireless Handler: get ap mac address - */ -int iwctl_giwap(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct sockaddr *wrq = &wrqu->ap_addr; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAP\n"); - - if (pMgmt == NULL) - return -EFAULT; - - memcpy(wrq->sa_data, pMgmt->abyCurrBSSID, 6); - - if ((pDevice->bLinkPass == false) && (pMgmt->eCurrMode != WMAC_MODE_ESS_AP)) - memset(wrq->sa_data, 0, 6); - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) - memcpy(wrq->sa_data, pMgmt->abyCurrBSSID, 6); - - wrq->sa_family = ARPHRD_ETHER; - return 0; -} - -/* - * Wireless Handler: get ap list - */ -int iwctl_giwaplist(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct iw_point *wrq = &wrqu->data; - struct sockaddr *sock; - struct iw_quality *qual; - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PKnownBSS pBSS = &pMgmt->sBSSList[0]; - int ii; - int jj; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAPLIST\n"); - /* Only super-user can see AP list */ - - if (pBSS == NULL) - return -ENODEV; - - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - - if (!wrq->pointer) - return -EINVAL; - - sock = kcalloc(IW_MAX_AP, sizeof(struct sockaddr), GFP_KERNEL); - if (sock == NULL) - return -ENOMEM; - qual = kcalloc(IW_MAX_AP, sizeof(struct iw_quality), GFP_KERNEL); - if (qual == NULL) { - kfree(sock); - return -ENOMEM; - } - - for (ii = 0, jj = 0; ii < MAX_BSS_NUM; ii++) { - if (!pBSS[ii].bActive) - continue; - if (jj >= IW_MAX_AP) - break; - memcpy(sock[jj].sa_data, pBSS[ii].abyBSSID, 6); - sock[jj].sa_family = ARPHRD_ETHER; - qual[jj].level = pBSS[ii].uRSSI; - qual[jj].qual = qual[jj].noise = 0; - qual[jj].updated = 2; - jj++; - } - - wrq->flags = 1; /* Should be defined */ - wrq->length = jj; - memcpy(extra, sock, sizeof(struct sockaddr) * jj); - memcpy(extra + sizeof(struct sockaddr) * jj, qual, - sizeof(struct iw_quality) * jj); - - kfree(sock); - kfree(qual); - - return 0; -} - -/* - * Wireless Handler: set essid - */ -int iwctl_siwessid(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_point *wrq = &wrqu->essid; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PWLAN_IE_SSID pItemSSID; - - if (pMgmt == NULL) - return -EFAULT; - - if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) - return -EINVAL; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWESSID :\n"); - - pDevice->fWPA_Authened = false; - // Check if we asked for `any' - if (wrq->flags == 0) { - // Just send an empty SSID list - memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - memset(pMgmt->abyDesireBSSID, 0xFF, 6); - PRINT_K("set essid to 'any'\n"); - // Unknown desired AP, so here need not associate?? - return 0; - } else { - // Set the SSID - memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID; - pItemSSID->byElementID = WLAN_EID_SSID; - - memcpy(pItemSSID->abySSID, extra, wrq->length); - if (pItemSSID->abySSID[wrq->length] == '\0') { - if (wrq->length > 0) - pItemSSID->len = wrq->length; - } else { - pItemSSID->len = wrq->length; - } - PRINT_K("set essid to %s\n", pItemSSID->abySSID); - - // mike: need clear desiredBSSID - if (pItemSSID->len == 0) { - memset(pMgmt->abyDesireBSSID, 0xFF, 6); - return 0; - } - - // Wext wil order another command of siwap to link - // with desired AP, so here need not associate?? - if (pDevice->bWPASuppWextEnabled == true) { - /*******search if in hidden ssid mode ****/ - PKnownBSS pCurr = NULL; - u8 abyTmpDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - unsigned ii; - unsigned uSameBssidNum = 0; - - memcpy(abyTmpDesireSSID, pMgmt->abyDesireSSID, sizeof(abyTmpDesireSSID)); - pCurr = BSSpSearchBSSList(pDevice, NULL, - abyTmpDesireSSID, - pDevice->eConfigPHYMode); - - if (pCurr == NULL) { - PRINT_K("SIOCSIWESSID:hidden ssid site survey before associate.......\n"); - vResetCommandTimer((void *)pDevice); - pMgmt->eScanType = WMAC_SCAN_ACTIVE; - 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 ? - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - if (pMgmt->sBSSList[ii].bActive && - ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID, - pCurr->abyBSSID)) { - uSameBssidNum++; - } - } - if (uSameBssidNum >= 2) { // hit: desired AP is in hidden ssid mode!!! - PRINT_K("SIOCSIWESSID:hidden ssid directly associate.......\n"); - vResetCommandTimer((void *)pDevice); - pMgmt->eScanType = WMAC_SCAN_PASSIVE; // this scan type, you'll submit scan result! - bScheduleCommand((void *)pDevice, - WLAN_CMD_BSSID_SCAN, - pMgmt->abyDesireSSID); - bScheduleCommand((void *)pDevice, - WLAN_CMD_SSID, - pMgmt->abyDesireSSID); - } - } - return 0; - } - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set essid = %s\n", pItemSSID->abySSID); - } - - if (pDevice->flags & DEVICE_FLAGS_OPENED) - pDevice->bCommit = true; - - return 0; -} - -/* - * Wireless Handler: get essid - */ -int iwctl_giwessid(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_point *wrq = &wrqu->essid; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PWLAN_IE_SSID pItemSSID; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWESSID\n"); - - if (pMgmt == NULL) - return -EFAULT; - - // Note: if wrq->u.data.flags != 0, we should get the relevant - // SSID from the SSID list... - - // Get the current SSID - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; - memcpy(extra, pItemSSID->abySSID, pItemSSID->len); - extra[pItemSSID->len] = '\0'; - - wrq->length = pItemSSID->len; - wrq->flags = 1; // active - - return 0; -} - -/* - * Wireless Handler: set data rate - */ -int iwctl_siwrate(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->bitrate; - int rc = 0; - u8 brate = 0; - int i; - u8 abySupportedRates[13] = { - 0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, - 0x60, 0x6C, 0x90 - }; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRATE\n"); - if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) { - rc = -EINVAL; - return rc; - } - - // First: get a valid bit rate value - - // Which type of value - if ((wrq->value < 13) && (wrq->value >= 0)) { - // Setting by rate index - // Find value in the magic rate table - brate = wrq->value; - } else { - // Setting by frequency value - u8 normvalue = (u8)(wrq->value/500000); - - // Check if rate is valid - for (i = 0; i < 13; i++) { - if (normvalue == abySupportedRates[i]) { - brate = i; - break; - } - } - } - // -1 designed the max rate (mostly auto mode) - if (wrq->value == -1) { - // Get the highest available rate - for (i = 0; i < 13; i++) { - if (abySupportedRates[i] == 0) - break; - } - if (i != 0) - brate = i - 1; - - } - // Check that it is valid - // brate is index of abySupportedRates[] - if (brate > 13) { - rc = -EINVAL; - return rc; - } - - // Now, check if we want a fixed or auto value - if (wrq->fixed != 0) { - // Fixed mode - // One rate, fixed - pDevice->bFixRate = true; - if ((pDevice->byBBType == BB_TYPE_11B) && (brate > 3)) { - pDevice->uConnectionRate = 3; - } else { - pDevice->uConnectionRate = brate; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Fixed to Rate %d\n", pDevice->uConnectionRate); - } - } else { - pDevice->bFixRate = false; - pDevice->uConnectionRate = 13; - } - - return rc; -} - -/* - * Wireless Handler: get data rate - */ -int iwctl_giwrate(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->bitrate; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRATE\n"); - - if (pMgmt == NULL) - return -EFAULT; - - { - u8 abySupportedRates[13] = { - 0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, - 0x48, 0x60, 0x6C, 0x90 - }; - int brate = 0; - - if (pDevice->uConnectionRate < 13) { - brate = abySupportedRates[pDevice->uConnectionRate]; - } else { - if (pDevice->byBBType == BB_TYPE_11B) - brate = 0x16; - if (pDevice->byBBType == BB_TYPE_11G) - brate = 0x6C; - if (pDevice->byBBType == BB_TYPE_11A) - brate = 0x6C; - } - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - if (pDevice->byBBType == BB_TYPE_11B) - brate = 0x16; - if (pDevice->byBBType == BB_TYPE_11G) - brate = 0x6C; - if (pDevice->byBBType == BB_TYPE_11A) - brate = 0x6C; - } - if (pDevice->uConnectionRate == 13) - brate = abySupportedRates[pDevice->wCurrentRate]; - wrq->value = brate * 500000; - // If more than one rate, set auto - if (pDevice->bFixRate == true) - wrq->fixed = true; - } - - return 0; -} - -/* - * Wireless Handler: set rts threshold - */ -int iwctl_siwrts(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->rts; - - if ((wrq->value < 0 || wrq->value > 2312) && !wrq->disabled) - return -EINVAL; - - else if (wrq->disabled) - pDevice->wRTSThreshold = 2312; - else - pDevice->wRTSThreshold = wrq->value; - - return 0; -} - -/* - * Wireless Handler: get rts - */ -int iwctl_giwrts(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->rts; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRTS\n"); - wrq->value = pDevice->wRTSThreshold; - wrq->disabled = (wrq->value >= 2312); - wrq->fixed = 1; - return 0; -} - -/* - * Wireless Handler: set fragment threshold - */ -int iwctl_siwfrag(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->frag; - int rc = 0; - int fthr = wrq->value; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFRAG\n"); - - if (wrq->disabled) - fthr = 2312; - if ((fthr < 256) || (fthr > 2312)) { - rc = -EINVAL; - } else { - fthr &= ~0x1; // Get an even value - pDevice->wFragmentationThreshold = (u16)fthr; - } - return rc; -} - -/* - * Wireless Handler: get fragment threshold - */ -int iwctl_giwfrag(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->frag; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFRAG\n"); - wrq->value = pDevice->wFragmentationThreshold; - wrq->disabled = (wrq->value >= 2312); - wrq->fixed = 1; - return 0; -} - -/* - * Wireless Handler: set retry threshold - */ -int iwctl_siwretry(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->retry; - int rc = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRETRY\n"); - - if (wrq->disabled) { - rc = -EINVAL; - return rc; - } - - if (wrq->flags & IW_RETRY_LIMIT) { - if (wrq->flags & IW_RETRY_MAX) { - pDevice->byLongRetryLimit = wrq->value; - } else if (wrq->flags & IW_RETRY_MIN) { - pDevice->byShortRetryLimit = wrq->value; - } else { - // No modifier : set both - pDevice->byShortRetryLimit = wrq->value; - pDevice->byLongRetryLimit = wrq->value; - } - } - if (wrq->flags & IW_RETRY_LIFETIME) - pDevice->wMaxTransmitMSDULifetime = wrq->value; - return rc; -} - -/* - * Wireless Handler: get retry threshold - */ -int iwctl_giwretry(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->retry; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRETRY\n"); - wrq->disabled = 0; // Can't be disabled - - // Note: by default, display the min retry number - if ((wrq->flags & IW_RETRY_TYPE) == IW_RETRY_LIFETIME) { - wrq->flags = IW_RETRY_LIFETIME; - wrq->value = (int)pDevice->wMaxTransmitMSDULifetime; // ms - } else if ((wrq->flags & IW_RETRY_MAX)) { - wrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX; - wrq->value = (int)pDevice->byLongRetryLimit; - } else { - wrq->flags = IW_RETRY_LIMIT; - wrq->value = (int)pDevice->byShortRetryLimit; - if ((int)pDevice->byShortRetryLimit != (int)pDevice->byLongRetryLimit) - wrq->flags |= IW_RETRY_MIN; - } - return 0; -} - -/* - * Wireless Handler: set encode mode - */ -int iwctl_siwencode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_point *wrq = &wrqu->encoding; - u32 dwKeyIndex = (u32)(wrq->flags & IW_ENCODE_INDEX); - int ii; - u8 uu; - int rc = 0; - int index = (wrq->flags & IW_ENCODE_INDEX); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWENCODE\n"); - - if (pMgmt == NULL) - return -EFAULT; - - // Check the size of the key - if (wrq->length > WLAN_WEP232_KEYLEN) { - rc = -EINVAL; - return rc; - } - - if (dwKeyIndex > WLAN_WEP_NKEYS) { - rc = -EINVAL; - return rc; - } - - if (dwKeyIndex > 0) - dwKeyIndex--; - - // Send the key to the card - if (wrq->length > 0) { - if (wrq->length == WLAN_WEP232_KEYLEN) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set 232 bit wep key\n"); - } else if (wrq->length == WLAN_WEP104_KEYLEN) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set 104 bit wep key\n"); - } else if (wrq->length == WLAN_WEP40_KEYLEN) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set 40 bit wep key, index= %d\n", (int)dwKeyIndex); - } - memset(pDevice->abyKey, 0, WLAN_WEP232_KEYLEN); - memcpy(pDevice->abyKey, extra, wrq->length); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"abyKey: "); - for (ii = 0; ii < wrq->length; ii++) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%02x ", pDevice->abyKey[ii]); - - if (pDevice->flags & DEVICE_FLAGS_OPENED) { - KeybSetDefaultKey(pDevice, - &(pDevice->sKey), - dwKeyIndex | (1 << 31), - wrq->length, NULL, - pDevice->abyKey, - KEY_CTL_WEP); - } - pDevice->byKeyIndex = (u8)dwKeyIndex; - pDevice->uKeyLength = wrq->length; - pDevice->bTransmitKey = true; - pDevice->bEncryptionEnable = true; - pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled; - - // Do we want to just set the transmit key index? - if (index < 4) { - pDevice->byKeyIndex = index; - } else if (!(wrq->flags & IW_ENCODE_MODE)) { - rc = -EINVAL; - return rc; - } - } - // Read the flags - if (wrq->flags & IW_ENCODE_DISABLED) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable WEP function\n"); - pMgmt->bShareKeyAlgorithm = false; - pDevice->bEncryptionEnable = false; - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - if (pDevice->flags & DEVICE_FLAGS_OPENED) { - for (uu = 0; uu < MAX_KEY_TABLE; uu++) - vnt_mac_disable_keyentry(pDevice, uu); - } - } - if (wrq->flags & IW_ENCODE_RESTRICTED) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable WEP & ShareKey System\n"); - pMgmt->bShareKeyAlgorithm = true; - } - if (wrq->flags & IW_ENCODE_OPEN) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable WEP & Open System\n"); - pMgmt->bShareKeyAlgorithm = false; - } - - memset(pMgmt->abyDesireBSSID, 0xFF, 6); - - return rc; -} - -int iwctl_giwencode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_point *wrq = &wrqu->encoding; - char abyKey[WLAN_WEP232_KEYLEN]; - - unsigned index = (unsigned)(wrq->flags & IW_ENCODE_INDEX); - PSKeyItem pKey = NULL; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWENCODE\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (index > WLAN_WEP_NKEYS) - return -EINVAL; - if (index < 1) { // get default key - if (pDevice->byKeyIndex < WLAN_WEP_NKEYS) - index = pDevice->byKeyIndex; - else - index = 0; - } else { - index--; - } - - memset(abyKey, 0, WLAN_WEP232_KEYLEN); - // Check encryption mode - wrq->flags = IW_ENCODE_NOKEY; - // Is WEP enabled ??? - if (pDevice->bEncryptionEnable) - wrq->flags |= IW_ENCODE_ENABLED; - else - wrq->flags |= IW_ENCODE_DISABLED; - - if (pMgmt->bShareKeyAlgorithm) - wrq->flags |= IW_ENCODE_RESTRICTED; - else - wrq->flags |= IW_ENCODE_OPEN; - wrq->length = 0; - - if ((index == 0) && (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled || - pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled)) { // get wpa pairwise key - if (KeybGetKey(&(pDevice->sKey), pMgmt->abyCurrBSSID, 0xffffffff, &pKey)) { - wrq->length = pKey->uKeyLength; - memcpy(abyKey, pKey->abyKey, pKey->uKeyLength); - memcpy(extra, abyKey, WLAN_WEP232_KEYLEN); - } - } else if (KeybGetKey(&(pDevice->sKey), pDevice->abyBroadcastAddr, (u8)index, &pKey)) { - wrq->length = pKey->uKeyLength; - memcpy(abyKey, pKey->abyKey, pKey->uKeyLength); - memcpy(extra, abyKey, WLAN_WEP232_KEYLEN); - } - - wrq->flags |= index + 1; - return 0; -} - -/* - * Wireless Handler: set power mode - */ -int iwctl_siwpower(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_param *wrq = &wrqu->power; - int rc = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) { - rc = -EINVAL; - return rc; - } - - if (wrq->disabled) { - pDevice->ePSMode = WMAC_POWER_CAM; - vnt_disable_power_saving(pDevice); - return rc; - } - if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { - pDevice->ePSMode = WMAC_POWER_FAST; - vnt_enable_power_saving(pDevice, pMgmt->wListenInterval); - - } else if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { - pDevice->ePSMode = WMAC_POWER_FAST; - vnt_enable_power_saving(pDevice, pMgmt->wListenInterval); - } - - switch (wrq->flags & IW_POWER_MODE) { - case IW_POWER_UNICAST_R: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_UNICAST_R\n"); - rc = -EINVAL; - break; - case IW_POWER_ALL_R: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ALL_R\n"); - rc = -EINVAL; - case IW_POWER_ON: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ON\n"); - break; - default: - rc = -EINVAL; - } - - return rc; -} - -/* - * Wireless Handler: get power mode - */ -int iwctl_giwpower(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_param *wrq = &wrqu->power; - int mode = pDevice->ePSMode; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPOWER\n"); - - if (pMgmt == NULL) - return -EFAULT; - - wrq->disabled = (mode == WMAC_POWER_CAM); - if (wrq->disabled) - return 0; - - if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { - wrq->value = (int)((pMgmt->wListenInterval * - pMgmt->wCurrBeaconPeriod) / 100); - wrq->flags = IW_POWER_TIMEOUT; - } else { - wrq->value = (int)((pMgmt->wListenInterval * - pMgmt->wCurrBeaconPeriod) / 100); - wrq->flags = IW_POWER_PERIOD; - } - - wrq->flags |= IW_POWER_ALL_R; - return 0; -} - -/* - * Wireless Handler: get Sensitivity - */ -int iwctl_giwsens(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct iw_param *wrq = &wrqu->sens; - long ldBm; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSENS\n"); - if (pDevice->bLinkPass == true) { - vnt_rf_rssi_to_dbm(pDevice, (u8)(pDevice->uCurrRSSI), &ldBm); - wrq->value = ldBm; - } else { - wrq->value = 0; - } - wrq->disabled = (wrq->value == 0); - wrq->fixed = 1; - return 0; -} - -int iwctl_siwauth(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_param *wrq = &wrqu->param; - int ret = 0; - static int wpa_version = 0; // must be static to save the last value, einsn liu - static int pairwise = 0; - - if (pMgmt == NULL) - return -EFAULT; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAUTH\n"); - switch (wrq->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: - wpa_version = wrq->value; - if (wrq->value == IW_AUTH_WPA_VERSION_DISABLED) { - PRINT_K("iwctl_siwauth:set WPADEV to disable at 1??????\n"); - } else if (wrq->value == IW_AUTH_WPA_VERSION_WPA) { - PRINT_K("iwctl_siwauth:set WPADEV to WPA1******\n"); - } else { - PRINT_K("iwctl_siwauth:set WPADEV to WPA2******\n"); - } - break; - case IW_AUTH_CIPHER_PAIRWISE: - pairwise = wrq->value; - PRINT_K("iwctl_siwauth:set pairwise=%d\n", pairwise); - if (pairwise == IW_AUTH_CIPHER_CCMP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled; - } else if (pairwise == IW_AUTH_CIPHER_TKIP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled; - } else if (pairwise == IW_AUTH_CIPHER_WEP40 || - pairwise == IW_AUTH_CIPHER_WEP104) { - pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled; - } else if (pairwise == IW_AUTH_CIPHER_NONE) { - // do nothing, einsn liu - } else { - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - } - break; - case IW_AUTH_CIPHER_GROUP: - PRINT_K("iwctl_siwauth:set GROUP=%d\n", wrq->value); - if (wpa_version == IW_AUTH_WPA_VERSION_DISABLED) - break; - if (pairwise == IW_AUTH_CIPHER_NONE) { - if (wrq->value == IW_AUTH_CIPHER_CCMP) - pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled; - else - pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled; - } - break; - case IW_AUTH_KEY_MGMT: - PRINT_K("iwctl_siwauth(wpa_version=%d):set KEY_MGMT=%d\n", wpa_version, wrq->value); - if (wpa_version == IW_AUTH_WPA_VERSION_WPA2) { - if (wrq->value == IW_AUTH_KEY_MGMT_PSK) - pMgmt->eAuthenMode = WMAC_AUTH_WPA2PSK; - else pMgmt->eAuthenMode = WMAC_AUTH_WPA2; - } else if (wpa_version == IW_AUTH_WPA_VERSION_WPA) { - if (wrq->value == 0) { - pMgmt->eAuthenMode = WMAC_AUTH_WPANONE; - } else if (wrq->value == IW_AUTH_KEY_MGMT_PSK) - pMgmt->eAuthenMode = WMAC_AUTH_WPAPSK; - } else { - pMgmt->eAuthenMode = WMAC_AUTH_WPA; - } - break; - case IW_AUTH_TKIP_COUNTERMEASURES: - break; /* FIXME */ - case IW_AUTH_DROP_UNENCRYPTED: - break; - case IW_AUTH_80211_AUTH_ALG: - PRINT_K("iwctl_siwauth:set AUTH_ALG=%d\n", wrq->value); - if (wrq->value == IW_AUTH_ALG_OPEN_SYSTEM) - pMgmt->bShareKeyAlgorithm = false; - else if (wrq->value == IW_AUTH_ALG_SHARED_KEY) - pMgmt->bShareKeyAlgorithm = true; - break; - case IW_AUTH_WPA_ENABLED: - break; - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - break; - case IW_AUTH_ROAMING_CONTROL: - ret = -EOPNOTSUPP; - break; - case IW_AUTH_PRIVACY_INVOKED: - pDevice->bEncryptionEnable = !!wrq->value; - if (pDevice->bEncryptionEnable == false) { - wpa_version = 0; - pairwise = 0; - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - pMgmt->bShareKeyAlgorithm = false; - pMgmt->eAuthenMode = WMAC_AUTH_OPEN; - PRINT_K("iwctl_siwauth:set WPADEV to disaable at 2?????\n"); - } - break; - default: - PRINT_K("iwctl_siwauth: not supported %x\n", wrq->flags); - ret = -EOPNOTSUPP; - break; - } - return ret; -} - -int iwctl_giwauth(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return -EOPNOTSUPP; -} - -int iwctl_siwgenie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_point *wrq = &wrqu->data; - int ret = 0; - - if (pMgmt == NULL) - return -EFAULT; - - if (wrq->length) { - if ((wrq->length < 2) || (extra[1] + 2 != wrq->length)) { - ret = -EINVAL; - goto out; - } - if (wrq->length > MAX_WPA_IE_LEN) { - ret = -ENOMEM; - goto out; - } - memset(pMgmt->abyWPAIE, 0, MAX_WPA_IE_LEN); - - memcpy(pMgmt->abyWPAIE, extra, wrq->length); - pMgmt->wWPAIELen = wrq->length; - } else { - memset(pMgmt->abyWPAIE, 0, MAX_WPA_IE_LEN); - pMgmt->wWPAIELen = 0; - } - -out: // not completely ...not necessary in wpa_supplicant 0.5.8 - return ret; -} - -int iwctl_giwgenie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_point *wrq = &wrqu->data; - int ret = 0; - int space = wrq->length; - - if (pMgmt == NULL) - return -EFAULT; - - wrq->length = 0; - if (pMgmt->wWPAIELen > 0) { - wrq->length = pMgmt->wWPAIELen; - - if (pMgmt->wWPAIELen <= space) - memcpy(extra, pMgmt->abyWPAIE, pMgmt->wWPAIELen); - else - ret = -E2BIG; - } - return ret; -} - -int iwctl_siwencodeext(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_point *wrq = &wrqu->encoding; - struct iw_encode_ext *ext = (struct iw_encode_ext*)extra; - struct viawget_wpa_param *param = NULL; -// original member - wpa_alg alg_name; - u8 addr[6]; - int key_idx; - int set_tx = 0; - u8 seq[IW_ENCODE_SEQ_MAX_SIZE]; - u8 key[64]; - size_t seq_len = 0; - size_t key_len = 0; - u8 *buf; - u8 key_array[64]; - int ret = 0; - - PRINT_K("SIOCSIWENCODEEXT......\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) - return -ENODEV; - - buf = kzalloc(sizeof(struct viawget_wpa_param), GFP_KERNEL); - if (buf == NULL) - return -ENOMEM; - - param = (struct viawget_wpa_param *)buf; - -// recover alg_name - switch (ext->alg) { - case IW_ENCODE_ALG_NONE: - alg_name = WPA_ALG_NONE; - break; - case IW_ENCODE_ALG_WEP: - alg_name = WPA_ALG_WEP; - break; - case IW_ENCODE_ALG_TKIP: - alg_name = WPA_ALG_TKIP; - break; - case IW_ENCODE_ALG_CCMP: - alg_name = WPA_ALG_CCMP; - break; - default: - PRINT_K("Unknown alg = %d\n", ext->alg); - ret = -ENOMEM; - goto error; - } -// recover addr - memcpy(addr, ext->addr.sa_data, ETH_ALEN); -// recover key_idx - key_idx = (wrq->flags&IW_ENCODE_INDEX) - 1; -// recover set_tx - if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) - set_tx = 1; -// recover seq,seq_len - if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - seq_len = IW_ENCODE_SEQ_MAX_SIZE; - memcpy(seq, ext->rx_seq, seq_len); - } -// recover key,key_len - if (ext->key_len) { - key_len = ext->key_len; - memcpy(key, &ext->key[0], key_len); - } - memset(key_array, 0, 64); - if (key_len > 0) { - memcpy(key_array, key, key_len); - if (key_len == 32) { - // notice ! the oder - memcpy(&key_array[16], &key[24], 8); - memcpy(&key_array[24], &key[16], 8); - } - } - -/**************Translate iw_encode_ext to viawget_wpa_param****************/ - memcpy(param->addr, addr, ETH_ALEN); - param->u.wpa_key.alg_name = (int)alg_name; - param->u.wpa_key.set_tx = set_tx; - param->u.wpa_key.key_index = key_idx; - param->u.wpa_key.key_len = key_len; - param->u.wpa_key.key = (u8 *)key_array; - param->u.wpa_key.seq = (u8 *)seq; - param->u.wpa_key.seq_len = seq_len; - -/****set if current action is Network Manager count?? */ -/****this method is so foolish,but there is no other way??? */ - if (param->u.wpa_key.alg_name == WPA_ALG_NONE) { - if (param->u.wpa_key.key_index == 0) { - pDevice->bwextstep0 = true; - } - if ((pDevice->bwextstep0 == true) && (param->u.wpa_key.key_index == 1)) { - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = true; - } - if ((pDevice->bwextstep1 == true) && (param->u.wpa_key.key_index == 2)) { - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = true; - } - if ((pDevice->bwextstep2 == true) && (param->u.wpa_key.key_index == 3)) { - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = true; - } - } - if (pDevice->bwextstep3 == true) { - PRINT_K("SIOCSIWENCODEEXT:Enable WPA WEXT SUPPORT!!!!!\n"); - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = false; - pDevice->bWPASuppWextEnabled = true; - memset(pMgmt->abyDesireBSSID, 0xFF, 6); - KeyvInitTable(pDevice, &pDevice->sKey); - } -/*******/ - ret = wpa_set_keys(pDevice, param); - -error: - kfree(buf); - return ret; -} - -int iwctl_giwencodeext(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return -EOPNOTSUPP; -} - -int iwctl_siwmlme(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - int ret = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMLME\n"); - - if (pMgmt == NULL) - return -EFAULT; - - if (memcmp(pMgmt->abyCurrBSSID, mlme->addr.sa_data, ETH_ALEN)) { - ret = -EINVAL; - return ret; - } - switch (mlme->cmd) { - case IW_MLME_DEAUTH: - case IW_MLME_DISASSOC: - if (pDevice->bLinkPass == true) { - PRINT_K("iwctl_siwmlme--->send DISASSOCIATE\n"); - bScheduleCommand((void *)pDevice, WLAN_CMD_DISASSOCIATE, - NULL); - } - break; - default: - ret = -EOPNOTSUPP; - } - return ret; -} - -static int iwctl_config_commit(struct net_device *dev, - struct iw_request_info *info, union iwreq_data *wrqu, char *extra) -{ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "SIOCSIWCOMMIT\n"); - - return 0; -} - -static const iw_handler iwctl_handler[] = { - IW_HANDLER(SIOCSIWCOMMIT, iwctl_config_commit), - IW_HANDLER(SIOCGIWNAME, iwctl_giwname), - IW_HANDLER(SIOCSIWFREQ, iwctl_siwfreq), - IW_HANDLER(SIOCGIWFREQ, iwctl_giwfreq), - IW_HANDLER(SIOCSIWMODE, iwctl_siwmode), - IW_HANDLER(SIOCGIWMODE, iwctl_giwmode), - IW_HANDLER(SIOCGIWSENS, iwctl_giwsens), - IW_HANDLER(SIOCGIWRANGE, iwctl_giwrange), - IW_HANDLER(SIOCSIWAP, iwctl_siwap), - IW_HANDLER(SIOCGIWAP, iwctl_giwap), - IW_HANDLER(SIOCSIWMLME, iwctl_siwmlme), - IW_HANDLER(SIOCGIWAPLIST, iwctl_giwaplist), - IW_HANDLER(SIOCSIWSCAN, iwctl_siwscan), - IW_HANDLER(SIOCGIWSCAN, iwctl_giwscan), - IW_HANDLER(SIOCSIWESSID, iwctl_siwessid), - IW_HANDLER(SIOCGIWESSID, iwctl_giwessid), - IW_HANDLER(SIOCSIWRATE, iwctl_siwrate), - IW_HANDLER(SIOCGIWRATE, iwctl_giwrate), - IW_HANDLER(SIOCSIWRTS, iwctl_siwrts), - IW_HANDLER(SIOCGIWRTS, iwctl_giwrts), - IW_HANDLER(SIOCSIWFRAG, iwctl_siwfrag), - IW_HANDLER(SIOCGIWFRAG, iwctl_giwfrag), - IW_HANDLER(SIOCSIWRETRY, iwctl_siwretry), - IW_HANDLER(SIOCGIWRETRY, iwctl_giwretry), - IW_HANDLER(SIOCSIWENCODE, iwctl_siwencode), - IW_HANDLER(SIOCGIWENCODE, iwctl_giwencode), - IW_HANDLER(SIOCSIWPOWER, iwctl_siwpower), - IW_HANDLER(SIOCGIWPOWER, iwctl_giwpower), - IW_HANDLER(SIOCSIWGENIE, iwctl_siwgenie), - IW_HANDLER(SIOCGIWGENIE, iwctl_giwgenie), - IW_HANDLER(SIOCSIWAUTH, iwctl_siwauth), - IW_HANDLER(SIOCGIWAUTH, iwctl_giwauth), - IW_HANDLER(SIOCSIWENCODEEXT, iwctl_siwencodeext), - IW_HANDLER(SIOCGIWENCODEEXT, iwctl_giwencodeext) -}; - -static const iw_handler iwctl_private_handler[] = { - NULL, // SIOCIWFIRSTPRIV -}; - -const struct iw_handler_def iwctl_handler_def = { - .get_wireless_stats = &iwctl_get_wireless_stats, - .num_standard = ARRAY_SIZE(iwctl_handler), - .num_private = 0, - .num_private_args = 0, - .standard = iwctl_handler, - .private = NULL, - .private_args = NULL, -}; diff --git a/drivers/staging/vt6656/iwctl.h b/drivers/staging/vt6656/iwctl.h deleted file mode 100644 index dceda0dbdfe1..000000000000 --- a/drivers/staging/vt6656/iwctl.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: iwctl.h - * - * Purpose: - * - * Author: Lyndon Chen - * - * Date: May 21, 2004 - * - */ - -#ifndef __IWCTL_H__ -#define __IWCTL_H__ - -#include "device.h" - -struct iw_statistics *iwctl_get_wireless_stats(struct net_device *dev); - -int iwctl_siwap(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwrange(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwmode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwmode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwfreq(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwfreq(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwname(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwsens(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwap(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwaplist(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwessid(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwessid(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwrate(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwrate(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwrts(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwrts(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwfrag(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwfrag(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwretry(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwretry(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwencode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwencode(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwpower(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwpower(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwscan(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwscan(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwauth(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwauth(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwgenie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwgenie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwencodeext(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_giwencodeext(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -int iwctl_siwmlme(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -extern const struct iw_handler_def iwctl_handler_def; -extern const struct iw_priv_args iwctl_priv_args; - -#endif /* __IWCTL_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f3b08903098f..0d71430af7a7 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -59,7 +59,6 @@ #include "rxtx.h" #include "bssdb.h" #include "wpactl.h" -#include "iwctl.h" #include "dpc.h" #include "datarate.h" #include "rf.h" @@ -192,7 +191,6 @@ static const long frequency_list[] = { 5700, 5745, 5765, 5785, 5805, 5825 }; -static const struct iw_handler_def iwctl_handler_def; */ static int vt6656_probe(struct usb_interface *intf, -- cgit From 169cd2e4702e6ea2eab659017b5806a7aa0887b1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:43 +0100 Subject: staging: vt6656: wcmd remove dead code Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 833 ------------------------------------------ 1 file changed, 833 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 4d7d5b14e7e5..a777841b14e4 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -57,207 +57,8 @@ static int msglevel = MSG_LEVEL_INFO; //static int msglevel = MSG_LEVEL_DEBUG; -static void s_vProbeChannel(struct vnt_private *); - -static struct vnt_tx_mgmt *s_MgrMakeProbeRequest(struct vnt_private *, - struct vnt_manager *pMgmt, u8 *pScanBSSID, PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pCurrRates, PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - static int s_bCommandComplete(struct vnt_private *); -static int s_bClearBSSID_SCAN(struct vnt_private *); - -/* - * Description: - * Stop AdHoc beacon during scan process - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * Out: - * none - * - * Return Value: none - * - */ - -static void vAdHocBeaconStop(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int bStop; - - /* - * temporarily stop Beacon packet for AdHoc Server - * if all of the following coditions are met: - * (1) STA is in AdHoc mode - * (2) VT3253 is programmed as automatic Beacon Transmitting - * (3) One of the following conditions is met - * (3.1) AdHoc channel is in B/G band and the - * current scan channel is in A band - * or - * (3.2) AdHoc channel is in A mode - */ - bStop = false; - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && - (pMgmt->eCurrState >= WMAC_STATE_STARTED)) { - if ((pMgmt->uIBSSChannel <= CB_MAX_CHANNEL_24G) && - (pMgmt->uScanChannel > CB_MAX_CHANNEL_24G)) { - bStop = true; - } - if (pMgmt->uIBSSChannel > CB_MAX_CHANNEL_24G) - bStop = true; - } - - if (bStop) { - //PMESG(("STOP_BEACON: IBSSChannel = %u, ScanChannel = %u\n", - // pMgmt->uIBSSChannel, pMgmt->uScanChannel)); - vnt_mac_reg_bits_off(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); - } - -} /* vAdHocBeaconStop */ - -/* - * Description: - * Restart AdHoc beacon after scan process complete - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * Out: - * none - * - * Return Value: none - * - */ -static void vAdHocBeaconRestart(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - /* - * Restart Beacon packet for AdHoc Server - * if all of the following coditions are met: - * (1) STA is in AdHoc mode - * (2) VT3253 is programmed as automatic Beacon Transmitting - */ - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && - (pMgmt->eCurrState >= WMAC_STATE_STARTED)) { - //PMESG(("RESTART_BEACON\n")); - vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); - } - -} - -/*+ - * - * Routine Description: - * Prepare and send probe request management frames. - * - * - * Return Value: - * none. - * --*/ - -static void s_vProbeChannel(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_tx_mgmt *pTxPacket; - u8 abyCurrSuppRatesG[] = {WLAN_EID_SUPP_RATES, - 8, 0x02, 0x04, 0x0B, 0x16, 0x24, 0x30, 0x48, 0x6C}; - /* 1M, 2M, 5M, 11M, 18M, 24M, 36M, 54M*/ - u8 abyCurrExtSuppRatesG[] = {WLAN_EID_EXTSUPP_RATES, - 4, 0x0C, 0x12, 0x18, 0x60}; - /* 6M, 9M, 12M, 48M*/ - u8 abyCurrSuppRatesA[] = {WLAN_EID_SUPP_RATES, - 8, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; - u8 abyCurrSuppRatesB[] = {WLAN_EID_SUPP_RATES, - 4, 0x02, 0x04, 0x0B, 0x16}; - u8 *pbyRate; - int ii; - - if (pDevice->byBBType == BB_TYPE_11A) - pbyRate = &abyCurrSuppRatesA[0]; - else if (pDevice->byBBType == BB_TYPE_11B) - pbyRate = &abyCurrSuppRatesB[0]; - else - pbyRate = &abyCurrSuppRatesG[0]; - - // build an assocreq frame and send it - pTxPacket = s_MgrMakeProbeRequest - ( - pDevice, - pMgmt, - pMgmt->abyScanBSSID, - (PWLAN_IE_SSID)pMgmt->abyScanSSID, - (PWLAN_IE_SUPP_RATES)pbyRate, - (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRatesG - ); - - if (pTxPacket != NULL) { - for (ii = 0; ii < 1; ii++) { - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request sending fail..\n"); - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request is sending..\n"); - } - } - } - -} - -/*+ - * - * Routine Description: - * Constructs an probe request frame - * - * - * Return Value: - * A ptr to Tx frame or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeProbeRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u8 *pScanBSSID, PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pCurrRates, PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_PROBEREQ sFrame; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_PROBEREQ_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_PROBEREQ_FR_MAXLEN; - vMgrEncodeProbeRequest(&sFrame); - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_PROBEREQ) - )); - memcpy(sFrame.pHdr->sA3.abyAddr1, pScanBSSID, WLAN_ADDR_LEN); - memcpy(sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy(sFrame.pHdr->sA3.abyAddr3, pScanBSSID, WLAN_BSSID_LEN); - // Copy the SSID, pSSID->len=0 indicate broadcast SSID - sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len); - sFrame.len += pSSID->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSSID, pSSID, pSSID->len + WLAN_IEHDR_LEN); - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN); - // Copy the extension rate set - if (pDevice->byBBType == BB_TYPE_11G) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrExtSuppRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, pCurrExtSuppRates, pCurrExtSuppRates->len + WLAN_IEHDR_LEN); - } - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - static void vCommandTimerWait(struct vnt_private *pDevice, unsigned long MSecond) { @@ -269,16 +70,7 @@ void vRunCommand(struct work_struct *work) { struct vnt_private *pDevice = container_of(work, struct vnt_private, run_command_work.work); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PWLAN_IE_SSID pItemSSID; - PWLAN_IE_SSID pItemSSIDCurr; - CMD_STATUS Status; - struct sk_buff *skb; - union iwreq_data wrqu; - int ii; - u8 byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; u8 byData; - unsigned long flags; if (pDevice->Flags & fMP_DISCONNECTED) return; @@ -300,533 +92,6 @@ void vRunCommand(struct work_struct *work) return; } - break; - case WLAN_CMD_SCAN_START: - - pDevice->byReAssocCount = 0; - if (pDevice->bRadioOff == true) - break; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) - break; - - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyScanSSID; - - if (pMgmt->uScanChannel == 0) - pMgmt->uScanChannel = pDevice->byMinChannel; - if (pMgmt->uScanChannel > pDevice->byMaxChannel) { - pDevice->eCommandState = WLAN_CMD_SCAN_END; - break; - } else { - if (!ChannelValid(pDevice->byZoneType, pMgmt->uScanChannel)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Invalid channel pMgmt->uScanChannel = %d\n", pMgmt->uScanChannel); - pMgmt->uScanChannel++; - break; - } - if (pMgmt->uScanChannel == pDevice->byMinChannel) { - // pMgmt->eScanType = WMAC_SCAN_ACTIVE; //mike mark - pMgmt->abyScanBSSID[0] = 0xFF; - pMgmt->abyScanBSSID[1] = 0xFF; - pMgmt->abyScanBSSID[2] = 0xFF; - pMgmt->abyScanBSSID[3] = 0xFF; - pMgmt->abyScanBSSID[4] = 0xFF; - pMgmt->abyScanBSSID[5] = 0xFF; - pItemSSID->byElementID = WLAN_EID_SSID; - // clear bssid list - /* BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); */ - pMgmt->eScanState = WMAC_IS_SCANNING; - pDevice->byScanBBType = pDevice->byBBType; //lucas - pDevice->bStopDataPkt = true; - // Turn off RCR_BSSID filter every time - vnt_mac_reg_bits_off(pDevice, MAC_REG_RCR, RCR_BSSID); - pDevice->byRxMode &= ~RCR_BSSID; - } - //lucas - vAdHocBeaconStop(pDevice); - if ((pDevice->byBBType != BB_TYPE_11A) && - (pMgmt->uScanChannel > CB_MAX_CHANNEL_24G)) { - pDevice->byBBType = BB_TYPE_11A; - vnt_set_bss_mode(pDevice); - } else if ((pDevice->byBBType == BB_TYPE_11A) && - (pMgmt->uScanChannel <= CB_MAX_CHANNEL_24G)) { - pDevice->byBBType = BB_TYPE_11G; - vnt_set_bss_mode(pDevice); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning.... channel: [%d]\n", pMgmt->uScanChannel); - // Set channel - vnt_set_channel(pDevice, pMgmt->uScanChannel); - // Set Baseband to be more sensitive. - - BBvSetShortSlotTime(pDevice); - BBvSetVGAGainOffset(pDevice, pDevice->abyBBVGA[0]); - BBvUpdatePreEDThreshold(pDevice, true); - - pMgmt->uScanChannel++; - - while (!ChannelValid(pDevice->byZoneType, pMgmt->uScanChannel) && - pMgmt->uScanChannel <= pDevice->byMaxChannel){ - pMgmt->uScanChannel++; - } - - if (pMgmt->uScanChannel > pDevice->byMaxChannel) { - // Set Baseband to be not sensitive and rescan - pDevice->eCommandState = WLAN_CMD_SCAN_END; - } - if ((pMgmt->b11hEnable == false) || - (pMgmt->uScanChannel < CB_MAX_CHANNEL_24G)) { - s_vProbeChannel(pDevice); - vCommandTimerWait((void *) pDevice, 100); - return; - } else { - vCommandTimerWait((void *) pDevice, WCMD_PASSIVE_SCAN_TIME); - return; - } - } - - break; - - case WLAN_CMD_SCAN_END: - - // Set Baseband's sensitivity back. - if (pDevice->byBBType != pDevice->byScanBBType) { - pDevice->byBBType = pDevice->byScanBBType; - vnt_set_bss_mode(pDevice); - } - - BBvSetShortSlotTime(pDevice); - BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent); - BBvUpdatePreEDThreshold(pDevice, false); - - // Set channel back - vAdHocBeaconRestart(pDevice); - // Set channel back - vnt_set_channel(pDevice, pMgmt->uCurrChannel); - // Set Filter - if (pMgmt->bCurrBSSIDFilterOn) { - vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); - pDevice->byRxMode |= RCR_BSSID; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning, set back to channel: [%d]\n", pMgmt->uCurrChannel); - pMgmt->uScanChannel = 0; - pMgmt->eScanState = WMAC_NO_SCANNING; - pDevice->bStopDataPkt = false; - - /*send scan event to wpa_Supplicant*/ - PRINT_K("wireless_send_event--->SIOCGIWSCAN(scan done)\n"); - memset(&wrqu, 0, sizeof(wrqu)); - wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL); - - break; - - case WLAN_CMD_DISASSOCIATE_START: - pDevice->byReAssocCount = 0; - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && - (pMgmt->eCurrState != WMAC_STATE_ASSOC)) { - break; - } else { - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = false; - pDevice->bWPASuppWextEnabled = false; - pDevice->fWPA_Authened = false; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send Disassociation Packet..\n"); - // reason = 8 : disassoc because sta has left - vMgrDisassocBeginSta((void *) pDevice, - pMgmt, - pMgmt->abyCurrBSSID, - (8), - &Status); - pDevice->bLinkPass = false; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - - // unlock command busy - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; - pItemSSID->len = 0; - memset(pItemSSID->abySSID, 0, WLAN_SSID_MAXLEN); - pMgmt->eCurrState = WMAC_STATE_IDLE; - pMgmt->sNodeDBTable[0].bActive = false; -// pDevice->bBeaconBufReady = false; - } - netif_stop_queue(pDevice->dev); - if (pDevice->bNeedRadioOFF == true) - vnt_radio_power_off(pDevice); - - break; - - case WLAN_CMD_SSID_START: - - pDevice->byReAssocCount = 0; - if (pDevice->bRadioOff == true) - break; - - memcpy(pMgmt->abyAdHocSSID, pMgmt->abyDesireSSID, - ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->len + WLAN_IEHDR_LEN); - - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID; - pItemSSIDCurr = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" cmd: desire ssid = %s\n", pItemSSID->abySSID); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" cmd: curr ssid = %s\n", pItemSSIDCurr->abySSID); - - if (pMgmt->eCurrState == WMAC_STATE_ASSOC) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Cmd pMgmt->eCurrState == WMAC_STATE_ASSOC\n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pItemSSID->len =%d\n", pItemSSID->len); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pItemSSIDCurr->len = %d\n", pItemSSIDCurr->len); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" desire ssid = %s\n", pItemSSID->abySSID); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" curr ssid = %s\n", pItemSSIDCurr->abySSID); - } - - if ((pMgmt->eCurrState == WMAC_STATE_ASSOC) || - ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED))) { - if (pItemSSID->len == pItemSSIDCurr->len) { - if (!memcmp(pItemSSID->abySSID, - pItemSSIDCurr->abySSID, pItemSSID->len)) - break; - } - netif_stop_queue(pDevice->dev); - pDevice->bLinkPass = false; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - } - // set initial state - pMgmt->eCurrState = WMAC_STATE_IDLE; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - vnt_disable_power_saving(pDevice); - BSSvClearNodeDBTable(pDevice, 0); - 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) because sta has left ESS - if (pMgmt->eCurrState >= WMAC_STATE_AUTH) { - vMgrDeAuthenBeginSta((void *)pDevice, - pMgmt, - pMgmt->abyCurrBSSID, - (3), - &Status); - } - // Call mgr to begin the authentication - vMgrAuthenBeginSta((void *) pDevice, pMgmt, &Status); - if (Status == CMD_STATUS_SUCCESS) { - pDevice->byLinkWaitCount = 0; - pDevice->eCommandState = WLAN_AUTHENTICATE_WAIT; - vCommandTimerWait((void *) pDevice, AUTHENTICATE_TIMEOUT); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Set eCommandState = WLAN_AUTHENTICATE_WAIT\n"); - return; - } - } - // if Adhoc mode - else if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - if (pMgmt->eCurrState == WMAC_STATE_JOINTED) { - if (netif_queue_stopped(pDevice->dev)) - netif_wake_queue(pDevice->dev); - pDevice->bLinkPass = true; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - pMgmt->sNodeDBTable[0].bActive = true; - pMgmt->sNodeDBTable[0].uInActiveCount = 0; - } else { - // start own IBSS - 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"); - } - BSSvAddMulticastNode(pDevice); - } - s_bClearBSSID_SCAN(pDevice); - } - // if SSID not found - else if (pMgmt->eCurrMode == WMAC_MODE_STANDBY) { - 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((void *) pDevice, &Status); - if (Status != CMD_STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "WLAN_CMD_IBSS_CREATE fail!\n"); - } - BSSvAddMulticastNode(pDevice); - s_bClearBSSID_SCAN(pDevice); -/* - pDevice->bLinkPass = true; - if (netif_queue_stopped(pDevice->dev)){ - netif_wake_queue(pDevice->dev); - } - s_bClearBSSID_SCAN(pDevice); -*/ - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disconnect SSID none\n"); - // if(pDevice->bWPASuppWextEnabled == true) - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated:vMgrJoinBSSBegin Fail !!)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); - } - } - } - break; - - case WLAN_AUTHENTICATE_WAIT: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_AUTHENTICATE_WAIT\n"); - if (pMgmt->eCurrState == WMAC_STATE_AUTH) { - pDevice->byLinkWaitCount = 0; - // Call mgr to begin the association - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_AUTH\n"); - 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((void *) pDevice, ASSOCIATE_TIMEOUT); - return; - } - } else if (pMgmt->eCurrState < WMAC_STATE_AUTHPENDING) { - printk("WLAN_AUTHENTICATE_WAIT:Authen Fail???\n"); - } else if (pDevice->byLinkWaitCount <= 4) { - //mike add:wait another 2 sec if authenticated_frame delay! - pDevice->byLinkWaitCount++; - printk("WLAN_AUTHENTICATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); - vCommandTimerWait((void *) pDevice, AUTHENTICATE_TIMEOUT/2); - return; - } - pDevice->byLinkWaitCount = 0; - - break; - - case WLAN_ASSOCIATE_WAIT: - if (pMgmt->eCurrState == WMAC_STATE_ASSOC) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_ASSOC\n"); - if (pDevice->ePSMode != WMAC_POWER_CAM) { - vnt_enable_power_saving(pDevice, - pMgmt->wListenInterval); - } -/* - if (pMgmt->eAuthenMode >= WMAC_AUTH_WPA) { - KeybRemoveAllKey(pDevice, &(pDevice->sKey), pDevice->abyBSSID); - } -*/ - pDevice->byLinkWaitCount = 0; - pDevice->byReAssocCount = 0; - pDevice->bLinkPass = true; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - s_bClearBSSID_SCAN(pDevice); - - if (netif_queue_stopped(pDevice->dev)) - netif_wake_queue(pDevice->dev); - - } else if (pMgmt->eCurrState < WMAC_STATE_ASSOCPENDING) { - printk("WLAN_ASSOCIATE_WAIT:Association Fail???\n"); - } else if (pDevice->byLinkWaitCount <= 4) { - //mike add:wait another 2 sec if associated_frame delay! - pDevice->byLinkWaitCount++; - printk("WLAN_ASSOCIATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); - vCommandTimerWait((void *) pDevice, ASSOCIATE_TIMEOUT/2); - return; - } - - break; - - case WLAN_CMD_AP_MODE_START: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_CMD_AP_MODE_START\n"); - - if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - cancel_delayed_work_sync(&pDevice->second_callback_work); - pMgmt->eCurrState = WMAC_STATE_IDLE; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - pDevice->bLinkPass = false; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - - BSSvClearNodeDBTable(pDevice, 0); - - pDevice->uAssocCount = 0; - pMgmt->eCurrState = WMAC_STATE_IDLE; - pDevice->bFixRate = false; - - vMgrCreateOwnIBSS((void *) pDevice, &Status); - if (Status != CMD_STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "vMgrCreateOwnIBSS fail!\n"); - } - // always turn off unicast bit - vnt_mac_reg_bits_off(pDevice, MAC_REG_RCR, RCR_UNICAST); - pDevice->byRxMode &= ~RCR_UNICAST; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wcmd: rx_mode = %x\n", pDevice->byRxMode); - BSSvAddMulticastNode(pDevice); - if (netif_queue_stopped(pDevice->dev)) - netif_wake_queue(pDevice->dev); - pDevice->bLinkPass = true; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - schedule_delayed_work(&pDevice->second_callback_work, HZ); - } - break; - - case WLAN_CMD_TX_PSPACKET_START: - // DTIM Multicast tx - if (pMgmt->sNodeDBTable[0].bRxPSPoll) { - while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[0].sTxPSQueue)) != NULL) { - if (skb_queue_empty(&pMgmt->sNodeDBTable[0].sTxPSQueue)) { - pMgmt->abyPSTxMap[0] &= ~byMask[0]; - pDevice->bMoreData = false; - } else { - pDevice->bMoreData = true; - } - - spin_lock_irqsave(&pDevice->lock, flags); - - if (nsDMA_tx_packet(pDevice, skb) != 0) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Multicast ps tx fail\n"); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - pMgmt->sNodeDBTable[0].wEnQueueCnt--; - } - } - - // PS nodes tx - for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) { - if (pMgmt->sNodeDBTable[ii].bActive && - pMgmt->sNodeDBTable[ii].bRxPSPoll) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Index=%d Enqueu Cnt= %d\n", - ii, pMgmt->sNodeDBTable[ii].wEnQueueCnt); - while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[ii].sTxPSQueue)) != NULL) { - if (skb_queue_empty(&pMgmt->sNodeDBTable[ii].sTxPSQueue)) { - // clear tx map - pMgmt->abyPSTxMap[pMgmt->sNodeDBTable[ii].wAID >> 3] &= - ~byMask[pMgmt->sNodeDBTable[ii].wAID & 7]; - pDevice->bMoreData = false; - } else { - pDevice->bMoreData = true; - } - - spin_lock_irqsave(&pDevice->lock, flags); - - if (nsDMA_tx_packet(pDevice, skb) != 0) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "sta ps tx fail\n"); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - pMgmt->sNodeDBTable[ii].wEnQueueCnt--; - // check if sta ps enable, wait next pspoll - // if sta ps disable, send all pending buffers. - if (pMgmt->sNodeDBTable[ii].bPSEnable) - break; - } - if (skb_queue_empty(&pMgmt->sNodeDBTable[ii].sTxPSQueue)) { - // clear tx map - pMgmt->abyPSTxMap[pMgmt->sNodeDBTable[ii].wAID >> 3] &= - ~byMask[pMgmt->sNodeDBTable[ii].wAID & 7]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Index=%d PS queue clear\n", ii); - } - pMgmt->sNodeDBTable[ii].bRxPSPoll = false; - } - } - break; - - case WLAN_CMD_RADIO_START: - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_CMD_RADIO_START\n"); -// if (pDevice->bRadioCmd == true) -// CARDbRadioPowerOn(pDevice); -// else -// CARDbRadioPowerOff(pDevice); - { - int ntStatus = STATUS_SUCCESS; - u8 byTmp; - - ntStatus = vnt_control_in(pDevice, - MESSAGE_TYPE_READ, - MAC_REG_GPIOCTL1, - MESSAGE_REQUEST_MACREG, - 1, - &byTmp); - - if (ntStatus != STATUS_SUCCESS) - break; - if ((byTmp & GPIO3_DATA) == 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_RADIO_START_OFF........................\n"); - // Old commands are useless. - // empty command Q - pDevice->cbFreeCmdQueue = CMD_Q_SIZE; - pDevice->uCmdDequeueIdx = 0; - pDevice->uCmdEnqueueIdx = 0; - //0415pDevice->bCmdRunning = false; - pDevice->bCmdClear = true; - pDevice->bStopTx0Pkt = false; - pDevice->bStopDataPkt = true; - - pDevice->byKeyIndex = 0; - pDevice->bTransmitKey = false; - - KeyvInitTable(pDevice, &pDevice->sKey); - - pMgmt->byCSSPK = KEY_CTL_NONE; - pMgmt->byCSSGK = KEY_CTL_NONE; - - if (pDevice->bLinkPass == true) { - // reason = 8 : disassoc because sta has left - vMgrDisassocBeginSta((void *) pDevice, - pMgmt, - pMgmt->abyCurrBSSID, - (8), - &Status); - pDevice->bLinkPass = false; - // unlock command busy - pMgmt->eCurrState = WMAC_STATE_IDLE; - pMgmt->sNodeDBTable[0].bActive = false; - // if(pDevice->bWPASuppWextEnabled == true) - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); - } - } - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = false; - pDevice->bWPASuppWextEnabled = false; - //clear current SSID - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; - pItemSSID->len = 0; - memset(pItemSSID->abySSID, 0, WLAN_SSID_MAXLEN); - //clear desired SSID - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID; - pItemSSID->len = 0; - memset(pItemSSID->abySSID, 0, WLAN_SSID_MAXLEN); - - netif_stop_queue(pDevice->dev); - vnt_radio_power_off(pDevice); - vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_OFF); - - pDevice->bHWRadioOff = true; - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_RADIO_START_ON........................\n"); - pDevice->bHWRadioOff = false; - vnt_radio_power_on(pDevice); - vnt_mac_reg_bits_off(pDevice, MAC_REG_GPIOCTL1, GPIO3_INTMD); - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_ON); - } - } - break; case WLAN_CMD_CHANGE_BBSENSITIVITY_START: @@ -911,8 +176,6 @@ void vRunCommand(struct work_struct *work) static int s_bCommandComplete(struct vnt_private *pDevice) { - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PWLAN_IE_SSID pSSID; int bRadioCmd = false; int bForceSCAN = true; @@ -923,7 +186,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) return true; } else { pDevice->eCommand = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].eCmd; - pSSID = (PWLAN_IE_SSID)pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].abyCmdDesireSSID; bRadioCmd = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].bRadioCmd; bForceSCAN = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].bForceSCAN; ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdDequeueIdx, CMD_Q_SIZE); @@ -934,40 +196,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; break; - case WLAN_CMD_BSSID_SCAN: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState= WLAN_CMD_BSSID_SCAN\n"); - pDevice->eCommandState = WLAN_CMD_SCAN_START; - pMgmt->uScanChannel = 0; - if (pSSID->len != 0) - memcpy(pMgmt->abyScanSSID, pSSID, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - else - memset(pMgmt->abyScanSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); -/* - if ((bForceSCAN == false) && (pDevice->bLinkPass == true)) { - if ((pSSID->len == ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) && - ( !memcmp(pSSID->abySSID, ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->abySSID, pSSID->len))) { - pDevice->eCommandState = WLAN_CMD_IDLE; - } - } -*/ - break; - case WLAN_CMD_SSID: - pDevice->eCommandState = WLAN_CMD_SSID_START; - if (pSSID->len > WLAN_SSID_MAXLEN) - pSSID->len = WLAN_SSID_MAXLEN; - if (pSSID->len != 0) - memcpy(pMgmt->abyDesireSSID, pSSID, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState= WLAN_CMD_SSID_START\n"); - break; - case WLAN_CMD_DISASSOCIATE: - pDevice->eCommandState = WLAN_CMD_DISASSOCIATE_START; - break; - case WLAN_CMD_RX_PSPOLL: - pDevice->eCommandState = WLAN_CMD_TX_PSPACKET_START; - break; - case WLAN_CMD_RUN_AP: - pDevice->eCommandState = WLAN_CMD_AP_MODE_START; - break; case WLAN_CMD_RADIO: pDevice->eCommandState = WLAN_CMD_RADIO_START; pDevice->bRadioCmd = bRadioCmd; @@ -992,10 +220,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; break; - case WLAN_CMD_REMOVE_ALLKEY: - pDevice->eCommandState = WLAN_CMD_REMOVE_ALLKEY_START; - break; - case WLAN_CMD_MAC_DISPOWERSAVING: pDevice->eCommandState = WLAN_CMD_MAC_DISPOWERSAVING_START; break; @@ -1004,11 +228,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; break; - case WLAN_CMD_CONFIGURE_FILTER: - pDevice->eCommandState = - WLAN_CMD_CONFIGURE_FILTER_START; - break; - default: break; } @@ -1029,26 +248,6 @@ int bScheduleCommand(struct vnt_private *pDevice, memset(pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].abyCmdDesireSSID, 0 , WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); if (pbyItem0 != NULL) { switch (eCommand) { - case WLAN_CMD_BSSID_SCAN: - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bForceSCAN = false; - memcpy(pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].abyCmdDesireSSID, - pbyItem0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - break; - - case WLAN_CMD_SSID: - memcpy(pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].abyCmdDesireSSID, - pbyItem0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - break; - - case WLAN_CMD_DISASSOCIATE: - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bNeedRadioOFF = *((int *)pbyItem0); - break; -/* - case WLAN_CMD_DEAUTH: - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].wDeAuthenReason = *((u16 *)pbyItem0); - break; -*/ - case WLAN_CMD_RADIO: pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bRadioCmd = *((int *)pbyItem0); break; @@ -1068,38 +267,6 @@ int bScheduleCommand(struct vnt_private *pDevice, } -/* - * Description: - * Clear BSSID_SCAN cmd in CMD Queue - * - * Parameters: - * In: - * hDeviceContext - Pointer to the adapter - * eCommand - Command - * Out: - * none - * - * Return Value: true if success; otherwise false - * - */ -static int s_bClearBSSID_SCAN(struct vnt_private *pDevice) -{ - 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++) { - if (pDevice->eCmdQueue[uCmdDequeueIdx].eCmd == WLAN_CMD_BSSID_SCAN) - pDevice->eCmdQueue[uCmdDequeueIdx].eCmd = WLAN_CMD_IDLE; - ADD_ONE_WITH_WRAP_AROUND(uCmdDequeueIdx, CMD_Q_SIZE); - if (uCmdDequeueIdx == pDevice->uCmdEnqueueIdx) - break; - } - } - return true; -} - -//mike add:reset command timer void vResetCommandTimer(struct vnt_private *pDevice) { pDevice->cbFreeCmdQueue = CMD_Q_SIZE; -- cgit From f9d1968c6b2570012dcf600be03213ab8c35307f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:44 +0100 Subject: staging: vt6656: rxtx remove dead code Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 8 - drivers/staging/vt6656/rxtx.c | 1259 ---------------------------------------- drivers/staging/vt6656/rxtx.h | 5 - drivers/staging/vt6656/wmgr.c | 19 - 4 files changed, 1291 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index ace0cba79dc5..1bdbefcee2bd 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -217,9 +217,6 @@ void PSvSendPSPOLL(struct vnt_private *pDevice) pTxPacket->cbPayloadLen = 0; /* log failure if sending failed */ - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Send PS-Poll packet failed..\n"); } /* @@ -273,11 +270,6 @@ int PSbSendNullPacket(struct vnt_private *pDevice) pTxPacket->cbMPDULen = WLAN_HDR_ADDR3_LEN; pTxPacket->cbPayloadLen = 0; /* log error if sending failed */ - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Send Null Packet failed !\n"); - return false; - } return true; } diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 44d88e944c10..feffd972be14 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -26,7 +26,6 @@ * * Functions: * s_vGenerateTxParameter - Generate tx dma required parameter. - * s_vGenerateMACHeader - Translate 802.3 to 802.11 header * csBeacon_xmit - beacon tx function * csMgmt_xmit - management tx function * s_uGetDataDuration - get tx data required duration @@ -37,8 +36,6 @@ * s_vFillCTSHead- fulfill CTS ctl header * s_vFillFragParameter- Set fragment ctl parameter. * s_vFillRTSHead- fulfill RTS ctl header - * s_vFillTxKey- fulfill tx encrypt key - * s_vSWencryption- Software encrypt header * vDMA0_tx_80211- tx 802.11 frame via dma0 * vGenerateFIFOHeader- Generate tx FIFO ctl header * @@ -90,9 +87,6 @@ static const u16 wFB_Opt1[2][5] = { #define DATADUR_A_F0 12 #define DATADUR_A_F1 13 -static void s_vSaveTxPktInfo(struct vnt_private *pDevice, u8 byPktNum, - u8 *pbyDestAddr, u16 wPktLength, u16 wFIFOCtl); - static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, @@ -100,18 +94,6 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, int bNeedACK, struct ethhdr *psEthHeader, bool need_rts); -static void s_vGenerateMACHeader(struct vnt_private *pDevice, - struct ieee80211_hdr *pMACHeader, u16 wDuration, - struct ethhdr *psEthHeader, int bNeedEncrypt, u16 wFragType, - u32 uFragIdx); - -static void s_vFillTxKey(struct vnt_usb_send_context *tx_context, - struct vnt_tx_fifo_head *fifo_head, u8 *pbyIVHead, - PSKeyItem pTransmitKey, u16 wPayloadLen, struct vnt_mic_hdr *mic_hdr); - -static void s_vSWencryption(struct vnt_private *pDevice, - PSKeyItem pTransmitKey, u8 *pbyPayloadHead, u16 wPayloadSize); - static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); @@ -163,170 +145,6 @@ static struct vnt_usb_send_context return NULL; } -static void s_vSaveTxPktInfo(struct vnt_private *pDevice, u8 byPktNum, - u8 *pbyDestAddr, u16 wPktLength, u16 wFIFOCtl) -{ - struct net_device_stats *stats = &pDevice->stats; - struct vnt_tx_pkt_info *pkt_info = pDevice->pkt_info; - - pkt_info[byPktNum].fifo_ctl = wFIFOCtl; - memcpy(pkt_info[byPktNum].dest_addr, pbyDestAddr, ETH_ALEN); - - stats->tx_bytes += wPktLength; -} - -static void s_vFillTxKey(struct vnt_usb_send_context *tx_context, - struct vnt_tx_fifo_head *fifo_head, u8 *pbyIVHead, - PSKeyItem pTransmitKey, u16 wPayloadLen, struct vnt_mic_hdr *mic_hdr) -{ - struct vnt_private *pDevice = tx_context->priv; - struct ieee80211_hdr *pMACHeader = tx_context->hdr; - u8 *pbyBuf = fifo_head->tx_key; - __le32 *pdwIV = (__le32 *)pbyIVHead; - __le32 *pdwExtIV = (__le32 *)((u8 *)pbyIVHead + 4); - __le32 rev_iv_counter; - - /* Fill TXKEY */ - if (pTransmitKey == NULL) - return; - - rev_iv_counter = cpu_to_le32(pDevice->dwIVCounter); - *pdwIV = cpu_to_le32(pDevice->dwIVCounter); - pDevice->byKeyIndex = pTransmitKey->dwKeyIndex & 0xf; - - switch (pTransmitKey->byCipherSuite) { - case KEY_CTL_WEP: - if (pTransmitKey->uKeyLength == WLAN_WEP232_KEYLEN) { - memcpy(pDevice->abyPRNG, (u8 *)&rev_iv_counter, 3); - memcpy(pDevice->abyPRNG + 3, pTransmitKey->abyKey, - pTransmitKey->uKeyLength); - } else { - memcpy(pbyBuf, (u8 *)&rev_iv_counter, 3); - memcpy(pbyBuf + 3, pTransmitKey->abyKey, - pTransmitKey->uKeyLength); - if (pTransmitKey->uKeyLength == WLAN_WEP40_KEYLEN) { - memcpy(pbyBuf+8, (u8 *)&rev_iv_counter, 3); - memcpy(pbyBuf+11, pTransmitKey->abyKey, - pTransmitKey->uKeyLength); - } - - memcpy(pDevice->abyPRNG, pbyBuf, 16); - } - /* Append IV after Mac Header */ - *pdwIV &= cpu_to_le32(WEP_IV_MASK); - *pdwIV |= cpu_to_le32((u32)pDevice->byKeyIndex << 30); - - pDevice->dwIVCounter++; - if (pDevice->dwIVCounter > WEP_IV_MASK) - pDevice->dwIVCounter = 0; - - break; - case KEY_CTL_TKIP: - pTransmitKey->wTSC15_0++; - if (pTransmitKey->wTSC15_0 == 0) - pTransmitKey->dwTSC47_16++; - - TKIPvMixKey(pTransmitKey->abyKey, pDevice->abyCurrentNetAddr, - pTransmitKey->wTSC15_0, pTransmitKey->dwTSC47_16, - pDevice->abyPRNG); - memcpy(pbyBuf, pDevice->abyPRNG, 16); - - /* Make IV */ - memcpy(pdwIV, pDevice->abyPRNG, 3); - - *(pbyIVHead+3) = (u8)(((pDevice->byKeyIndex << 6) & - 0xc0) | 0x20); - /* Append IV&ExtIV after Mac Header */ - *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "vFillTxKey()---- pdwExtIV: %x\n", *pdwExtIV); - - break; - case KEY_CTL_CCMP: - pTransmitKey->wTSC15_0++; - if (pTransmitKey->wTSC15_0 == 0) - pTransmitKey->dwTSC47_16++; - - memcpy(pbyBuf, pTransmitKey->abyKey, 16); - - /* Make IV */ - *pdwIV = 0; - *(pbyIVHead+3) = (u8)(((pDevice->byKeyIndex << 6) & - 0xc0) | 0x20); - - *pdwIV |= cpu_to_le32((u32)(pTransmitKey->wTSC15_0)); - - /* Append IV&ExtIV after Mac Header */ - *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16); - - if (!mic_hdr) - return; - - /* MICHDR0 */ - mic_hdr->id = 0x59; - mic_hdr->payload_len = cpu_to_be16(wPayloadLen); - memcpy(mic_hdr->mic_addr2, pMACHeader->addr2, ETH_ALEN); - - mic_hdr->tsc_47_16 = cpu_to_be32(pTransmitKey->dwTSC47_16); - mic_hdr->tsc_15_0 = cpu_to_be16(pTransmitKey->wTSC15_0); - - /* MICHDR1 */ - if (ieee80211_has_a4(pMACHeader->frame_control)) - mic_hdr->hlen = cpu_to_be16(28); - else - mic_hdr->hlen = cpu_to_be16(22); - - memcpy(mic_hdr->addr1, pMACHeader->addr1, ETH_ALEN); - memcpy(mic_hdr->addr2, pMACHeader->addr2, ETH_ALEN); - - /* MICHDR2 */ - memcpy(mic_hdr->addr3, pMACHeader->addr3, ETH_ALEN); - mic_hdr->frame_control = cpu_to_le16( - le16_to_cpu(pMACHeader->frame_control) & 0xc78f); - mic_hdr->seq_ctrl = cpu_to_le16( - le16_to_cpu(pMACHeader->seq_ctrl) & 0xf); - - if (ieee80211_has_a4(pMACHeader->frame_control)) - memcpy(mic_hdr->addr4, pMACHeader->addr4, ETH_ALEN); - } -} - -static void s_vSWencryption(struct vnt_private *pDevice, - PSKeyItem pTransmitKey, u8 *pbyPayloadHead, u16 wPayloadSize) -{ - u32 cbICVlen = 4; - u32 dwICV = 0xffffffff; - u32 *pdwICV; - - if (pTransmitKey == NULL) - return; - - if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) { - //======================================================================= - // Append ICV after payload - dwICV = ether_crc_le(wPayloadSize, pbyPayloadHead); - pdwICV = (u32 *)(pbyPayloadHead + wPayloadSize); - // finally, we must invert dwCRC to get the correct answer - *pdwICV = cpu_to_le32(~dwICV); - // RC4 encryption - rc4_init(&pDevice->SBox, pDevice->abyPRNG, pTransmitKey->uKeyLength + 3); - rc4_encrypt(&pDevice->SBox, pbyPayloadHead, pbyPayloadHead, wPayloadSize+cbICVlen); - //======================================================================= - } else if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) { - //======================================================================= - //Append ICV after payload - dwICV = ether_crc_le(wPayloadSize, pbyPayloadHead); - pdwICV = (u32 *)(pbyPayloadHead + wPayloadSize); - // finally, we must invert dwCRC to get the correct answer - *pdwICV = cpu_to_le32(~dwICV); - // RC4 encryption - rc4_init(&pDevice->SBox, pDevice->abyPRNG, TKIP_KEY_LEN); - rc4_encrypt(&pDevice->SBox, pbyPayloadHead, pbyPayloadHead, wPayloadSize+cbICVlen); - //======================================================================= - } -} - static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) { return cpu_to_le16(wTimeStampOff[priv->byPreambleType % 2] @@ -993,1083 +811,6 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, } } - return 0; -} -/* - u8 * pbyBuffer,//point to pTxBufHead - u16 wFragType,//00:Non-Frag, 01:Start, 02:Mid, 03:Last - unsigned int cbFragmentSize,//Hdr+payoad+FCS -*/ - -static int s_bPacketToWirelessUsb(struct vnt_usb_send_context *tx_context, - u8 byPktType, struct vnt_tx_buffer *tx_buffer, int bNeedEncryption, - u32 uSkbPacketLen, struct ethhdr *psEthHeader, - u8 *pPacket, PSKeyItem pTransmitKey, u32 uNodeIndex, u16 wCurrentRate, - u32 *pcbHeaderLen, u32 *pcbTotalLen) -{ - struct vnt_private *pDevice = tx_context->priv; - struct vnt_tx_fifo_head *pTxBufHead = &tx_buffer->fifo_head; - u32 cbFrameSize, cbFrameBodySize; - u32 cb802_1_H_len; - u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbMACHdLen = 0; - u32 cbFCSlen = 4, cbMICHDR = 0; - int bNeedACK; - bool bRTS = false; - u8 *pbyType, *pbyMacHdr, *pbyIVHead, *pbyPayloadHead; - u8 abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; - u8 abySNAP_Bridgetunnel[ETH_ALEN] - = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; - u32 uDuration; - u32 cbHeaderLength = 0, uPadding = 0; - struct vnt_mic_hdr *pMICHDR; - u8 byFBOption = AUTO_FB_NONE, byFragType; - u32 dwMICKey0, dwMICKey1, dwMIC_Priority; - u32 *pdwMIC_L, *pdwMIC_R; - int bSoftWEP = false; - - pMICHDR = NULL; - - if (bNeedEncryption && pTransmitKey->pvKeyTable) { - if (((PSKeyTable)pTransmitKey->pvKeyTable)->bSoftWEP == true) - bSoftWEP = true; /* WEP 256 */ - } - - /* Get pkt type */ - if (ntohs(psEthHeader->h_proto) > ETH_DATA_LEN) - cb802_1_H_len = 8; - else - cb802_1_H_len = 0; - - cbFrameBodySize = uSkbPacketLen - ETH_HLEN + cb802_1_H_len; - - //Set packet type - pTxBufHead->wFIFOCtl |= (u16)(byPktType<<8); - - if (pDevice->op_mode == NL80211_IFTYPE_ADHOC || - pDevice->op_mode == NL80211_IFTYPE_AP) { - if (is_multicast_ether_addr(psEthHeader->h_dest)) { - bNeedACK = false; - pTxBufHead->wFIFOCtl = - pTxBufHead->wFIFOCtl & (~FIFOCTL_NEEDACK); - } else { - bNeedACK = true; - pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK; - } - } else { - /* MSDUs in Infra mode always need ACK */ - bNeedACK = true; - pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK; - } - - pTxBufHead->time_stamp = cpu_to_le16(DEFAULT_MSDU_LIFETIME_RES_64us); - - //Set FRAGCTL_MACHDCNT - cbMACHdLen = WLAN_HDR_ADDR3_LEN; - - pTxBufHead->wFragCtl |= (u16)(cbMACHdLen << 10); - - //Set FIFOCTL_GrpAckPolicy - if (pDevice->bGrpAckPolicy == true) {//0000 0100 0000 0000 - pTxBufHead->wFIFOCtl |= FIFOCTL_GRPACK; - } - - /* Set Auto Fallback Ctl */ - if (wCurrentRate >= RATE_18M) { - if (pDevice->byAutoFBCtrl == AUTO_FB_0) { - pTxBufHead->wFIFOCtl |= FIFOCTL_AUTO_FB_0; - - pDevice->tx_rate_fb0 = - wFB_Opt0[FB_RATE0][wCurrentRate - RATE_18M]; - pDevice->tx_rate_fb1 = - wFB_Opt0[FB_RATE1][wCurrentRate - RATE_18M]; - - byFBOption = AUTO_FB_0; - } else if (pDevice->byAutoFBCtrl == AUTO_FB_1) { - pTxBufHead->wFIFOCtl |= FIFOCTL_AUTO_FB_1; - pDevice->tx_rate_fb0 = - wFB_Opt1[FB_RATE0][wCurrentRate - RATE_18M]; - pDevice->tx_rate_fb1 = - wFB_Opt1[FB_RATE1][wCurrentRate - RATE_18M]; - - byFBOption = AUTO_FB_1; - } - } - - if (bSoftWEP != true) { - if ((bNeedEncryption) && (pTransmitKey != NULL)) { //WEP enabled - if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) { //WEP40 or WEP104 - pTxBufHead->wFragCtl |= FRAGCTL_LEGACY; - } - if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Tx Set wFragCtl == FRAGCTL_TKIP\n"); - pTxBufHead->wFragCtl |= FRAGCTL_TKIP; - } - else if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) { //CCMP - pTxBufHead->wFragCtl |= FRAGCTL_AES; - } - } - } - - if ((bNeedEncryption) && (pTransmitKey != NULL)) { - if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) { - cbIVlen = 4; - cbICVlen = 4; - } - else if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) { - cbIVlen = 8;//IV+ExtIV - cbMIClen = 8; - cbICVlen = 4; - } - if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) { - cbIVlen = 8;//RSN Header - cbICVlen = 8;//MIC - cbMICHDR = sizeof(struct vnt_mic_hdr); - } - if (bSoftWEP == false) { - //MAC Header should be padding 0 to DW alignment. - uPadding = 4 - (cbMACHdLen%4); - uPadding %= 4; - } - } - - cbFrameSize = cbMACHdLen + cbIVlen + (cbFrameBodySize + cbMIClen) + cbICVlen + cbFCSlen; - - if ( (bNeedACK == false) ||(cbFrameSize < pDevice->wRTSThreshold) ) { - bRTS = false; - } else { - bRTS = true; - pTxBufHead->wFIFOCtl |= (FIFOCTL_RTS | FIFOCTL_LRETRY); - } - - //========================= - // No Fragmentation - //========================= - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"No Fragmentation...\n"); - byFragType = FRAGCTL_NONFRAG; - //pTxBufHead = (PSTxBufHead) &(pTxBufHead->adwTxKey[0]); - - /* Fill FIFO, RrvTime, RTS and CTS */ - uDuration = s_vGenerateTxParameter(tx_context, byPktType, wCurrentRate, - tx_buffer, &pMICHDR, cbMICHDR, - cbFrameSize, bNeedACK, psEthHeader, bRTS); - - cbHeaderLength = tx_context->tx_hdr_size; - if (!cbHeaderLength) - return false; - - pbyMacHdr = (u8 *)tx_context->hdr; - pbyIVHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding); - pbyPayloadHead = (u8 *)(pbyMacHdr + cbMACHdLen + uPadding + cbIVlen); - - /* Generate TX MAC Header */ - s_vGenerateMACHeader(pDevice, tx_context->hdr, (u16)uDuration, - psEthHeader, bNeedEncryption, byFragType, 0); - - if (bNeedEncryption == true) { - //Fill TXKEY - s_vFillTxKey(tx_context, pTxBufHead, pbyIVHead, pTransmitKey, - (u16)cbFrameBodySize, pMICHDR); - } - - /* 802.1H */ - if (ntohs(psEthHeader->h_proto) > ETH_DATA_LEN) { - if ((psEthHeader->h_proto == cpu_to_be16(ETH_P_IPX)) || - (psEthHeader->h_proto == cpu_to_le16(0xF380))) - memcpy((u8 *) (pbyPayloadHead), - abySNAP_Bridgetunnel, 6); - else - memcpy((u8 *) (pbyPayloadHead), &abySNAP_RFC1042[0], 6); - - pbyType = (u8 *) (pbyPayloadHead + 6); - - memcpy(pbyType, &(psEthHeader->h_proto), sizeof(u16)); - } - - if (pPacket != NULL) { - // Copy the Packet into a tx Buffer - memcpy((pbyPayloadHead + cb802_1_H_len), - (pPacket + ETH_HLEN), - uSkbPacketLen - ETH_HLEN - ); - - } else { - // while bRelayPacketSend psEthHeader is point to header+payload - memcpy((pbyPayloadHead + cb802_1_H_len), ((u8 *)psEthHeader) + ETH_HLEN, uSkbPacketLen - ETH_HLEN); - } - - if ((bNeedEncryption == true) && (pTransmitKey != NULL) && (pTransmitKey->byCipherSuite == KEY_CTL_TKIP)) { - - /////////////////////////////////////////////////////////////////// - - if (pDevice->vnt_mgmt.eAuthenMode == WMAC_AUTH_WPANONE) { - dwMICKey0 = *(u32 *)(&pTransmitKey->abyKey[16]); - dwMICKey1 = *(u32 *)(&pTransmitKey->abyKey[20]); - } - else if ((pTransmitKey->dwKeyIndex & AUTHENTICATOR_KEY) != 0) { - dwMICKey0 = *(u32 *)(&pTransmitKey->abyKey[16]); - dwMICKey1 = *(u32 *)(&pTransmitKey->abyKey[20]); - } - else { - dwMICKey0 = *(u32 *)(&pTransmitKey->abyKey[24]); - dwMICKey1 = *(u32 *)(&pTransmitKey->abyKey[28]); - } - // DO Software Michael - MIC_vInit(dwMICKey0, dwMICKey1); - MIC_vAppend((u8 *)&(psEthHeader->h_dest[0]), 12); - dwMIC_Priority = 0; - MIC_vAppend((u8 *)&dwMIC_Priority, 4); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC KEY: %X, %X\n", - dwMICKey0, dwMICKey1); - - /////////////////////////////////////////////////////////////////// - - //DBG_PRN_GRP12(("Length:%d, %d\n", cbFrameBodySize, uFromHDtoPLDLength)); - //for (ii = 0; ii < cbFrameBodySize; ii++) { - // DBG_PRN_GRP12(("%02x ", *((u8 *)((pbyPayloadHead + cb802_1_H_len) + ii)))); - //} - //DBG_PRN_GRP12(("\n\n\n")); - - MIC_vAppend(pbyPayloadHead, cbFrameBodySize); - - pdwMIC_L = (u32 *)(pbyPayloadHead + cbFrameBodySize); - pdwMIC_R = (u32 *)(pbyPayloadHead + cbFrameBodySize + 4); - - MIC_vGetMIC(pdwMIC_L, pdwMIC_R); - MIC_vUnInit(); - - if (pDevice->bTxMICFail == true) { - *pdwMIC_L = 0; - *pdwMIC_R = 0; - pDevice->bTxMICFail = false; - } - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"uLength: %d, %d\n", uLength, cbFrameBodySize); - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"cbReqCount:%d, %d, %d, %d\n", cbReqCount, cbHeaderLength, uPadding, cbIVlen); - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC:%lX, %lX\n", *pdwMIC_L, *pdwMIC_R); - } - - if (bSoftWEP == true) { - - s_vSWencryption(pDevice, pTransmitKey, (pbyPayloadHead), (u16)(cbFrameBodySize + cbMIClen)); - - } else if ( ((pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) && (bNeedEncryption == true)) || - ((pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) && (bNeedEncryption == true)) || - ((pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) && (bNeedEncryption == true)) ) { - cbFrameSize -= cbICVlen; - } - - cbFrameSize -= cbFCSlen; - - *pcbHeaderLen = cbHeaderLength; - *pcbTotalLen = cbHeaderLength + cbFrameSize ; - - //Set FragCtl in TxBufferHead - pTxBufHead->wFragCtl |= (u16)byFragType; - - return true; - -} - -/*+ - * - * Description: - * Translate 802.3 to 802.11 header - * - * Parameters: - * In: - * pDevice - Pointer to adapter - * dwTxBufferAddr - Transmit Buffer - * pPacket - Packet from upper layer - * cbPacketSize - Transmit Data Length - * Out: - * pcbHeadSize - Header size of MAC&Baseband control and 802.11 Header - * pcbAppendPayload - size of append payload for 802.1H translation - * - * Return Value: none - * --*/ - -static void s_vGenerateMACHeader(struct vnt_private *pDevice, - struct ieee80211_hdr *pMACHeader, u16 wDuration, - struct ethhdr *psEthHeader, int bNeedEncrypt, u16 wFragType, - u32 uFragIdx) -{ - - pMACHeader->frame_control = TYPE_802_11_DATA; - - if (pDevice->op_mode == NL80211_IFTYPE_AP) { - memcpy(&(pMACHeader->addr1[0]), - &(psEthHeader->h_dest[0]), - ETH_ALEN); - memcpy(&(pMACHeader->addr2[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); - memcpy(&(pMACHeader->addr3[0]), - &(psEthHeader->h_source[0]), - ETH_ALEN); - pMACHeader->frame_control |= FC_FROMDS; - } else { - if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) { - memcpy(&(pMACHeader->addr1[0]), - &(psEthHeader->h_dest[0]), - ETH_ALEN); - memcpy(&(pMACHeader->addr2[0]), - &(psEthHeader->h_source[0]), - ETH_ALEN); - memcpy(&(pMACHeader->addr3[0]), - &(pDevice->abyBSSID[0]), - ETH_ALEN); - } else { - memcpy(&(pMACHeader->addr3[0]), - &(psEthHeader->h_dest[0]), - ETH_ALEN); - memcpy(&(pMACHeader->addr2[0]), - &(psEthHeader->h_source[0]), - ETH_ALEN); - memcpy(&(pMACHeader->addr1[0]), - &(pDevice->abyBSSID[0]), - ETH_ALEN); - pMACHeader->frame_control |= FC_TODS; - } - } - - if (bNeedEncrypt) - pMACHeader->frame_control |= cpu_to_le16((u16)WLAN_SET_FC_ISWEP(1)); - - pMACHeader->duration_id = cpu_to_le16(wDuration); - - pMACHeader->seq_ctrl = cpu_to_le16(pDevice->wSeqCounter << 4); - - //Set FragNumber in Sequence Control - pMACHeader->seq_ctrl |= cpu_to_le16((u16)uFragIdx); - - if ((wFragType == FRAGCTL_ENDFRAG) || (wFragType == FRAGCTL_NONFRAG)) { - pDevice->wSeqCounter++; - if (pDevice->wSeqCounter > 0x0fff) - pDevice->wSeqCounter = 0; - } - - if ((wFragType == FRAGCTL_STAFRAG) || (wFragType == FRAGCTL_MIDFRAG)) { //StartFrag or MidFrag - pMACHeader->frame_control |= FC_MOREFRAG; - } -} - -/*+ - * - * Description: - * Request instructs a MAC to transmit a 802.11 management packet through - * the adapter onto the medium. - * - * Parameters: - * In: - * hDeviceContext - Pointer to the adapter - * pPacket - A pointer to a descriptor for the packet to transmit - * Out: - * none - * - * Return Value: CMD_STATUS_PENDING if MAC Tx resource available; otherwise false - * --*/ - -CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, - struct vnt_tx_mgmt *pPacket) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_tx_buffer *pTX_Buffer; - struct vnt_usb_send_context *pContext; - struct vnt_tx_fifo_head *pTxBufHead; - struct ieee80211_hdr *pMACHeader; - struct ethhdr sEthHeader; - u8 byPktType, *pbyTxBufferAddr; - struct vnt_mic_hdr *pMICHDR = NULL; - u32 uDuration, cbReqCount, cbHeaderSize, cbFrameBodySize, cbFrameSize; - int bNeedACK, bIsPSPOLL = false; - u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbFCSlen = 4; - u32 uPadding = 0; - u16 wTxBufSize; - u32 cbMacHdLen; - u16 wCurrentRate = RATE_1M; - unsigned long flags; - - if (pDevice->byBBType == BB_TYPE_11A) { - wCurrentRate = RATE_6M; - byPktType = PK_TYPE_11A; - } else { - wCurrentRate = RATE_1M; - byPktType = PK_TYPE_11B; - } - - if (pMgmt->eScanState != WMAC_NO_SCANNING) - vnt_rf_setpower(pDevice, wCurrentRate, pDevice->byCurrentCh); - else - vnt_rf_setpower(pDevice, wCurrentRate, pMgmt->uCurrChannel); - - pDevice->wCurrentRate = wCurrentRate; - - spin_lock_irqsave(&pDevice->lock, flags); - - pContext = s_vGetFreeContext(pDevice); - if (!pContext) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "ManagementSend TX...NO CONTEXT!\n"); - spin_unlock_irqrestore(&pDevice->lock, flags); - return CMD_STATUS_RESOURCES; - } - - pTX_Buffer = (struct vnt_tx_buffer *)&pContext->data[0]; - cbFrameBodySize = pPacket->cbPayloadLen; - pTxBufHead = &pTX_Buffer->fifo_head; - pbyTxBufferAddr = (u8 *)pTxBufHead; - wTxBufSize = sizeof(struct vnt_tx_fifo_head); - - - //Set packet type - if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000 - pTxBufHead->wFIFOCtl = 0; - } - else if (byPktType == PK_TYPE_11B) {//0000 0001 0000 0000 - pTxBufHead->wFIFOCtl |= FIFOCTL_11B; - } - else if (byPktType == PK_TYPE_11GB) {//0000 0010 0000 0000 - pTxBufHead->wFIFOCtl |= FIFOCTL_11GB; - } - else if (byPktType == PK_TYPE_11GA) {//0000 0011 0000 0000 - pTxBufHead->wFIFOCtl |= FIFOCTL_11GA; - } - - pTxBufHead->wFIFOCtl |= FIFOCTL_TMOEN; - pTxBufHead->time_stamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); - - if (is_multicast_ether_addr(pPacket->p80211Header->sA3.abyAddr1)) { - bNeedACK = false; - } - else { - bNeedACK = true; - pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK; - }; - - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) || - (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) ) { - - pTxBufHead->wFIFOCtl |= FIFOCTL_LRETRY; - //Set Preamble type always long - //pDevice->byPreambleType = PREAMBLE_LONG; - // probe-response don't retry - //if ((pPacket->p80211Header->sA4.wFrameCtl & TYPE_SUBTYPE_MASK) == TYPE_MGMT_PROBE_RSP) { - // bNeedACK = false; - // pTxBufHead->wFIFOCtl &= (~FIFOCTL_NEEDACK); - //} - } - - pTxBufHead->wFIFOCtl |= (FIFOCTL_GENINT | FIFOCTL_ISDMA0); - - if ((pPacket->p80211Header->sA4.wFrameCtl & TYPE_SUBTYPE_MASK) == TYPE_CTL_PSPOLL) { - bIsPSPOLL = true; - cbMacHdLen = WLAN_HDR_ADDR2_LEN; - } else { - cbMacHdLen = WLAN_HDR_ADDR3_LEN; - } - - //Set FRAGCTL_MACHDCNT - pTxBufHead->wFragCtl |= cpu_to_le16((u16)(cbMacHdLen << 10)); - - // Notes: - // Although spec says MMPDU can be fragmented; In most case, - // no one will send a MMPDU under fragmentation. With RTS may occur. - - if (WLAN_GET_FC_ISWEP(pPacket->p80211Header->sA4.wFrameCtl) != 0) { - if (pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) { - cbIVlen = 4; - cbICVlen = 4; - pTxBufHead->wFragCtl |= FRAGCTL_LEGACY; - } - else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) { - cbIVlen = 8;//IV+ExtIV - cbMIClen = 8; - cbICVlen = 4; - pTxBufHead->wFragCtl |= FRAGCTL_TKIP; - //We need to get seed here for filling TxKey entry. - //TKIPvMixKey(pTransmitKey->abyKey, pDevice->abyCurrentNetAddr, - // pTransmitKey->wTSC15_0, pTransmitKey->dwTSC47_16, pDevice->abyPRNG); - } - else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) { - cbIVlen = 8;//RSN Header - cbICVlen = 8;//MIC - pTxBufHead->wFragCtl |= FRAGCTL_AES; - } - //MAC Header should be padding 0 to DW alignment. - uPadding = 4 - (cbMacHdLen%4); - uPadding %= 4; - } - - cbFrameSize = cbMacHdLen + cbFrameBodySize + cbIVlen + cbMIClen + cbICVlen + cbFCSlen; - - //Set FIFOCTL_GrpAckPolicy - if (pDevice->bGrpAckPolicy == true) {//0000 0100 0000 0000 - pTxBufHead->wFIFOCtl |= FIFOCTL_GRPACK; - } - //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter() - - memcpy(&(sEthHeader.h_dest[0]), - &(pPacket->p80211Header->sA3.abyAddr1[0]), - ETH_ALEN); - memcpy(&(sEthHeader.h_source[0]), - &(pPacket->p80211Header->sA3.abyAddr2[0]), - ETH_ALEN); - //========================= - // No Fragmentation - //========================= - pTxBufHead->wFragCtl |= (u16)FRAGCTL_NONFRAG; - - /* Fill FIFO,RrvTime,RTS,and CTS */ - uDuration = s_vGenerateTxParameter(pContext, byPktType, wCurrentRate, - pTX_Buffer, &pMICHDR, 0, - cbFrameSize, bNeedACK, &sEthHeader, false); - - cbHeaderSize = pContext->tx_hdr_size; - if (!cbHeaderSize) { - pContext->in_use = false; - return CMD_STATUS_RESOURCES; - } - - pMACHeader = pContext->hdr; - - cbReqCount = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen + cbFrameBodySize; - - if (WLAN_GET_FC_ISWEP(pPacket->p80211Header->sA4.wFrameCtl) != 0) { - u8 * pbyIVHead; - u8 * pbyPayloadHead; - u8 * pbyBSSID; - PSKeyItem pTransmitKey = NULL; - - pbyIVHead = (u8 *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding); - pbyPayloadHead = (u8 *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding + cbIVlen); - do { - if (pDevice->op_mode == NL80211_IFTYPE_STATION && - pDevice->bLinkPass == true) { - pbyBSSID = pDevice->abyBSSID; - // get pairwise key - if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, PAIRWISE_KEY, &pTransmitKey) == false) { - // get group key - if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == true) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Get GTK.\n"); - break; - } - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Get PTK.\n"); - break; - } - } - // get group key - pbyBSSID = pDevice->abyBroadcastAddr; - if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == false) { - pTransmitKey = NULL; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KEY is NULL. OP Mode[%d]\n", pDevice->op_mode); - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Get GTK.\n"); - } - } while(false); - //Fill TXKEY - s_vFillTxKey(pContext, pTxBufHead, pbyIVHead, pTransmitKey, - (u16)cbFrameBodySize, NULL); - - memcpy(pMACHeader, pPacket->p80211Header, cbMacHdLen); - memcpy(pbyPayloadHead, ((u8 *)(pPacket->p80211Header) + cbMacHdLen), - cbFrameBodySize); - } - else { - // Copy the Packet into a tx Buffer - memcpy(pMACHeader, pPacket->p80211Header, pPacket->cbMPDULen); - } - - pMACHeader->seq_ctrl = cpu_to_le16(pDevice->wSeqCounter << 4); - pDevice->wSeqCounter++ ; - if (pDevice->wSeqCounter > 0x0fff) - pDevice->wSeqCounter = 0; - - if (bIsPSPOLL) { - // The MAC will automatically replace the Duration-field of MAC header by Duration-field - // of FIFO control header. - // This will cause AID-field of PS-POLL packet be incorrect (Because PS-POLL's AID field is - // in the same place of other packet's Duration-field). - // And it will cause Cisco-AP to issue Disassociation-packet - if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { - struct vnt_tx_datahead_g *data_head = &pTX_Buffer->tx_head. - tx_cts.tx.head.cts_g.data_head; - data_head->duration_a = - cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); - data_head->duration_b = - cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); - } else { - struct vnt_tx_datahead_ab *data_head = &pTX_Buffer->tx_head. - tx_ab.tx.head.data_head_ab; - data_head->duration = - cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); - } - } - - pTX_Buffer->tx_byte_count = cpu_to_le16((u16)(cbReqCount)); - pTX_Buffer->byPKTNO = (u8) (((wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F)); - pTX_Buffer->byType = 0x00; - - pContext->skb = NULL; - pContext->type = CONTEXT_MGMT_PACKET; - pContext->buf_len = (u16)cbReqCount + 4; /* USB header */ - - if (WLAN_GET_FC_TODS(pMACHeader->frame_control) == 0) { - s_vSaveTxPktInfo(pDevice, (u8)(pTX_Buffer->byPKTNO & 0x0F), - &pMACHeader->addr1[0], (u16)cbFrameSize, - pTxBufHead->wFIFOCtl); - } - else { - s_vSaveTxPktInfo(pDevice, (u8)(pTX_Buffer->byPKTNO & 0x0F), - &pMACHeader->addr3[0], (u16)cbFrameSize, - pTxBufHead->wFIFOCtl); - } - - PIPEnsSendBulkOut(pDevice,pContext); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - return CMD_STATUS_PENDING; -} - -CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, - struct vnt_tx_mgmt *pPacket) -{ - struct vnt_beacon_buffer *pTX_Buffer; - struct vnt_tx_short_buf_head *short_head; - u32 cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN; - u32 cbHeaderSize = 0; - u16 wCurrentRate; - u32 cbFrameBodySize; - u32 cbReqCount; - struct vnt_usb_send_context *pContext; - CMD_STATUS status; - - pContext = s_vGetFreeContext(pDevice); - if (NULL == pContext) { - status = CMD_STATUS_RESOURCES; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ManagementSend TX...NO CONTEXT!\n"); - return status ; - } - - pTX_Buffer = (struct vnt_beacon_buffer *)&pContext->data[0]; - short_head = &pTX_Buffer->short_head; - - cbFrameBodySize = pPacket->cbPayloadLen; - - cbHeaderSize = sizeof(struct vnt_tx_short_buf_head); - - if (pDevice->byBBType == BB_TYPE_11A) { - wCurrentRate = RATE_6M; - - /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(pDevice, cbFrameSize, wCurrentRate, - PK_TYPE_11A, &short_head->ab); - - /* Get Duration and TimeStampOff */ - short_head->duration = s_uGetDataDuration(pDevice, - PK_TYPE_11A, false); - short_head->time_stamp_off = - vnt_time_stamp_off(pDevice, wCurrentRate); - } else { - wCurrentRate = RATE_1M; - short_head->fifo_ctl |= FIFOCTL_11B; - - /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(pDevice, cbFrameSize, wCurrentRate, - PK_TYPE_11B, &short_head->ab); - - /* Get Duration and TimeStampOff */ - short_head->duration = s_uGetDataDuration(pDevice, - PK_TYPE_11B, false); - short_head->time_stamp_off = - vnt_time_stamp_off(pDevice, wCurrentRate); - } - - - /* Generate Beacon Header */ - pDevice->wSeqCounter++; - if (pDevice->wSeqCounter > 0x0fff) - pDevice->wSeqCounter = 0; - - cbReqCount = cbHeaderSize + WLAN_HDR_ADDR3_LEN + cbFrameBodySize; - - pTX_Buffer->tx_byte_count = cpu_to_le16((u16)cbReqCount); - pTX_Buffer->byPKTNO = (u8) (((wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F)); - pTX_Buffer->byType = 0x01; - - pContext->skb = NULL; - pContext->type = CONTEXT_MGMT_PACKET; - pContext->buf_len = (u16)cbReqCount + 4; /* USB header */ - - PIPEnsSendBulkOut(pDevice,pContext); - return CMD_STATUS_PENDING; - -} - -//TYPE_AC0DMA data tx -/* - * Description: - * Tx packet via AC0DMA(DMA1) - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * skb - Pointer to tx skb packet - * Out: - * void - * - * Return Value: NULL - */ - -int nsDMA_tx_packet(struct vnt_private *pDevice, struct sk_buff *skb) -{ - struct net_device_stats *pStats = &pDevice->stats; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_tx_buffer *pTX_Buffer; - u32 BytesToWrite = 0, uHeaderLen = 0; - u32 uNodeIndex = 0; - u8 byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; - u16 wAID; - u8 byPktType; - int bNeedEncryption = false; - PSKeyItem pTransmitKey = NULL; - int ii; - int bTKIP_UseGTK = false; - int bNeedDeAuth = false; - u8 *pbyBSSID; - int bNodeExist = false; - struct vnt_usb_send_context *pContext; - bool fConvertedPacket; - u32 status; - u16 wKeepRate = pDevice->wCurrentRate; - int bTxeapol_key = false; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - - if (pDevice->uAssocCount == 0) { - dev_kfree_skb_irq(skb); - return 0; - } - - if (is_multicast_ether_addr((u8 *)(skb->data))) { - uNodeIndex = 0; - bNodeExist = true; - if (pMgmt->sNodeDBTable[0].bPSEnable) { - - skb_queue_tail(&(pMgmt->sNodeDBTable[0].sTxPSQueue), skb); - pMgmt->sNodeDBTable[0].wEnQueueCnt++; - // set tx map - pMgmt->abyPSTxMap[0] |= byMask[0]; - return 0; - } - // multicast/broadcast data rate - - if (pDevice->byBBType != BB_TYPE_11A) - pDevice->wCurrentRate = RATE_2M; - else - pDevice->wCurrentRate = RATE_24M; - // long preamble type - pDevice->byPreambleType = PREAMBLE_SHORT; - - }else { - - if (BSSbIsSTAInNodeDB(pDevice, (u8 *)(skb->data), &uNodeIndex)) { - - if (pMgmt->sNodeDBTable[uNodeIndex].bPSEnable) { - - skb_queue_tail(&pMgmt->sNodeDBTable[uNodeIndex].sTxPSQueue, skb); - - pMgmt->sNodeDBTable[uNodeIndex].wEnQueueCnt++; - // set tx map - wAID = pMgmt->sNodeDBTable[uNodeIndex].wAID; - pMgmt->abyPSTxMap[wAID >> 3] |= byMask[wAID & 7]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set:pMgmt->abyPSTxMap[%d]= %d\n", - (wAID >> 3), pMgmt->abyPSTxMap[wAID >> 3]); - - return 0; - } - // AP rate decided from node - pDevice->wCurrentRate = pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate; - // tx preamble decided from node - - if (pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble) { - pDevice->byPreambleType = pDevice->byShortPreamble; - - }else { - pDevice->byPreambleType = PREAMBLE_LONG; - } - bNodeExist = true; - } - } - - if (bNodeExist == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"Unknown STA not found in node DB \n"); - dev_kfree_skb_irq(skb); - return 0; - } - } - - memcpy(&pDevice->sTxEthHeader, skb->data, ETH_HLEN); - -//mike add:station mode check eapol-key challenge---> -{ - u8 Protocol_Version; //802.1x Authentication - u8 Packet_Type; //802.1x Authentication - u8 Descriptor_type; - u16 Key_info; - - 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.h_proto == cpu_to_be16(ETH_P_PAE)) { - /* 802.1x OR eapol-key challenge frame transfer */ - if (((Protocol_Version == 1) || (Protocol_Version == 2)) && - (Packet_Type == 3)) { - bTxeapol_key = true; - if(!(Key_info & BIT3) && //WPA or RSN group-key challenge - (Key_info & BIT8) && (Key_info & BIT9)) { //send 2/2 key - if(Descriptor_type==254) { - pDevice->fWPA_Authened = true; - PRINT_K("WPA "); - } - else { - pDevice->fWPA_Authened = true; - PRINT_K("WPA2(re-keying) "); - } - PRINT_K("Authentication completed!!\n"); - } - else if((Key_info & BIT3) && (Descriptor_type==2) && //RSN pairwise-key challenge - (Key_info & BIT8) && (Key_info & BIT9)) { - pDevice->fWPA_Authened = true; - PRINT_K("WPA2 Authentication completed!!\n"); - } - } - } -} -//mike add:station mode check eapol-key challenge<--- - - if (pDevice->bEncryptionEnable == true) { - bNeedEncryption = true; - // get Transmit key - do { - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && - (pMgmt->eCurrState == WMAC_STATE_ASSOC)) { - pbyBSSID = pDevice->abyBSSID; - // get pairwise key - if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, PAIRWISE_KEY, &pTransmitKey) == false) { - // get group key - if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == true) { - bTKIP_UseGTK = true; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"Get GTK.\n"); - break; - } - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"Get PTK.\n"); - break; - } - }else if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - /* TO_DS = 0 and FROM_DS = 0 --> 802.11 MAC Address1 */ - pbyBSSID = pDevice->sTxEthHeader.h_dest; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"IBSS Serach Key: \n"); - for (ii = 0; ii< 6; ii++) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"%x \n", *(pbyBSSID+ii)); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"\n"); - - // get pairwise key - if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, PAIRWISE_KEY, &pTransmitKey) == true) - break; - } - // get group key - pbyBSSID = pDevice->abyBroadcastAddr; - if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == false) { - pTransmitKey = NULL; - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"IBSS and KEY is NULL. [%d]\n", pMgmt->eCurrMode); - } - else - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"NOT IBSS and KEY is NULL. [%d]\n", pMgmt->eCurrMode); - } else { - bTKIP_UseGTK = true; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG"Get GTK.\n"); - } - } while(false); - } - - byPktType = (u8)pDevice->byPacketType; - - if (pDevice->bFixRate) { - if (pDevice->byBBType == BB_TYPE_11B) { - if (pDevice->uConnectionRate >= RATE_11M) { - pDevice->wCurrentRate = RATE_11M; - } else { - pDevice->wCurrentRate = (u16)pDevice->uConnectionRate; - } - } else { - if ((pDevice->byBBType == BB_TYPE_11A) && - (pDevice->uConnectionRate <= RATE_6M)) { - pDevice->wCurrentRate = RATE_6M; - } else { - if (pDevice->uConnectionRate >= RATE_54M) - pDevice->wCurrentRate = RATE_54M; - else - pDevice->wCurrentRate = (u16)pDevice->uConnectionRate; - } - } - } - else { - if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) { - // Adhoc Tx rate decided from node DB - if (is_multicast_ether_addr(pDevice->sTxEthHeader.h_dest)) { - // Multicast use highest data rate - pDevice->wCurrentRate = pMgmt->sNodeDBTable[0].wTxDataRate; - // preamble type - pDevice->byPreambleType = pDevice->byShortPreamble; - } - else { - if (BSSbIsSTAInNodeDB(pDevice, &(pDevice->sTxEthHeader.h_dest[0]), &uNodeIndex)) { - pDevice->wCurrentRate = pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate; - if (pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble) { - pDevice->byPreambleType = pDevice->byShortPreamble; - - } - else { - pDevice->byPreambleType = PREAMBLE_LONG; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Found Node Index is [%d] Tx Data Rate:[%d]\n",uNodeIndex, pDevice->wCurrentRate); - } - else { - if (pDevice->byBBType != BB_TYPE_11A) - pDevice->wCurrentRate = RATE_2M; - else - pDevice->wCurrentRate = RATE_24M; // refer to vMgrCreateOwnIBSS()'s - // abyCurrExtSuppRates[] - pDevice->byPreambleType = PREAMBLE_SHORT; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Not Found Node use highest basic Rate.....\n"); - } - } - } - if (pDevice->op_mode == NL80211_IFTYPE_STATION) { - // Infra STA rate decided from AP Node, index = 0 - pDevice->wCurrentRate = pMgmt->sNodeDBTable[0].wTxDataRate; - } - } - - if (pDevice->sTxEthHeader.h_proto == cpu_to_be16(ETH_P_PAE)) { - if (pDevice->byBBType != BB_TYPE_11A) { - pDevice->wCurrentRate = RATE_1M; - pDevice->byTopCCKBasicRate = RATE_1M; - pDevice->byTopOFDMBasicRate = RATE_6M; - } else { - pDevice->wCurrentRate = RATE_6M; - pDevice->byTopCCKBasicRate = RATE_1M; - pDevice->byTopOFDMBasicRate = RATE_6M; - } - } - - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "dma_tx: pDevice->wCurrentRate = %d\n", - pDevice->wCurrentRate); - - if (wKeepRate != pDevice->wCurrentRate) { - bScheduleCommand((void *) pDevice, WLAN_CMD_SETPOWER, NULL); - } - - if (pDevice->wCurrentRate <= RATE_11M) { - byPktType = PK_TYPE_11B; - } - - if (bNeedEncryption == true) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ntohs Pkt Type=%04x\n", ntohs(pDevice->sTxEthHeader.h_proto)); - if ((pDevice->sTxEthHeader.h_proto) == cpu_to_be16(ETH_P_PAE)) { - bNeedEncryption = false; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Pkt Type=%04x\n", (pDevice->sTxEthHeader.h_proto)); - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && (pMgmt->eCurrState == WMAC_STATE_ASSOC)) { - if (pTransmitKey == NULL) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Don't Find TX KEY\n"); - } - else { - if (bTKIP_UseGTK == true) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"error: KEY is GTK!!~~\n"); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Find PTK [%X]\n", - pTransmitKey->dwKeyIndex); - bNeedEncryption = true; - } - } - } - } - else { - - if (pTransmitKey == NULL) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"return no tx key\n"); - dev_kfree_skb_irq(skb); - pStats->tx_dropped++; - return STATUS_FAILURE; - } - } - } - - pContext = s_vGetFreeContext(pDevice); - if (!pContext) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG" pContext == NULL\n"); - dev_kfree_skb_irq(skb); - return STATUS_RESOURCES; - } - - pTX_Buffer = (struct vnt_tx_buffer *)&pContext->data[0]; - - fConvertedPacket = s_bPacketToWirelessUsb(pContext, byPktType, - pTX_Buffer, bNeedEncryption, - skb->len, &pDevice->sTxEthHeader, - (u8 *)skb->data, pTransmitKey, uNodeIndex, - pDevice->wCurrentRate, - &uHeaderLen, &BytesToWrite - ); - - if (fConvertedPacket == false) { - pContext->in_use = false; - dev_kfree_skb_irq(skb); - return STATUS_FAILURE; - } - - if ( pDevice->bEnablePSMode == true ) { - if ( !pDevice->bPSModeTxBurst ) { - bScheduleCommand((void *) pDevice, - WLAN_CMD_MAC_DISPOWERSAVING, - NULL); - pDevice->bPSModeTxBurst = true; - } - } - - pTX_Buffer->byPKTNO = (u8) (((pDevice->wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F)); - pTX_Buffer->tx_byte_count = cpu_to_le16((u16)BytesToWrite); - - pContext->skb = skb; - pContext->type = CONTEXT_DATA_PACKET; - pContext->buf_len = (u16)BytesToWrite + 4 ; /* USB header */ - - s_vSaveTxPktInfo(pDevice, (u8)(pTX_Buffer->byPKTNO & 0x0F), - &pDevice->sTxEthHeader.h_dest[0], - (u16)(BytesToWrite-uHeaderLen), - pTX_Buffer->fifo_head.wFIFOCtl); - - status = PIPEnsSendBulkOut(pDevice,pContext); - - if (bNeedDeAuth == true) { - u16 wReason = WLAN_MGMT_REASON_MIC_FAILURE; - - bScheduleCommand((void *) pDevice, WLAN_CMD_DEAUTH, (u8 *) &wReason); - } - - if (status != STATUS_PENDING) { - pContext->in_use = false; - dev_kfree_skb_irq(skb); - return STATUS_FAILURE; - } - - return 0; } diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 00a5c220e652..847c0556668b 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -253,11 +253,6 @@ struct vnt_beacon_buffer { struct ieee80211_mgmt mgmt_hdr; } __packed; -void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb); -int nsDMA_tx_packet(struct vnt_private *, struct sk_buff *skb); -CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *); -CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *); - int vnt_tx_packet(struct vnt_private *, struct sk_buff *); int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *); int vnt_beacon_enable(struct vnt_private *, struct ieee80211_vif *, diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index a1b5307e6caf..c76f928f2f1c 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -280,7 +280,6 @@ void vMgrAssocBeginSta(struct vnt_private *pDevice, if (pTxPacket != NULL ){ // send the frame - *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus == CMD_STATUS_PENDING) { pMgmt->eCurrState = WMAC_STATE_ASSOCPENDING; *pStatus = CMD_STATUS_SUCCESS; @@ -349,7 +348,6 @@ void vMgrReAssocBeginSta(struct vnt_private *pDevice, if (pTxPacket != NULL ){ // send the frame - *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus != CMD_STATUS_PENDING) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Reassociation tx failed.\n"); } @@ -408,7 +406,6 @@ void vMgrDisassocBeginSta(struct vnt_private *pDevice, pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; // send the frame - *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus == CMD_STATUS_PENDING) { pMgmt->eCurrState = WMAC_STATE_IDLE; *pStatus = CMD_STATUS_SUCCESS; @@ -541,7 +538,6 @@ static void s_vMgrRxAssocRequest(struct vnt_private *pDevice, ); if (pTxPacket != NULL ){ /* send the frame */ - Status = csMgmt_xmit(pDevice, pTxPacket); if (Status != CMD_STATUS_PENDING) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Assoc response tx failed\n"); } @@ -685,7 +681,6 @@ static void s_vMgrRxReAssocRequest(struct vnt_private *pDevice, if (pTxPacket != NULL ){ /* send the frame */ - Status = csMgmt_xmit(pDevice, pTxPacket); if (Status != CMD_STATUS_PENDING) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:ReAssoc response tx failed\n"); } @@ -869,7 +864,6 @@ void vMgrAuthenBeginSta(struct vnt_private *pDevice, pTxPacket->cbMPDULen = sFrame.len; pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus == CMD_STATUS_PENDING){ pMgmt->eCurrState = WMAC_STATE_AUTHPENDING; *pStatus = CMD_STATUS_SUCCESS; @@ -920,7 +914,6 @@ void vMgrDeAuthenBeginSta(struct vnt_private *pDevice, pTxPacket->cbMPDULen = sFrame.len; pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus == CMD_STATUS_PENDING){ *pStatus = CMD_STATUS_SUCCESS; } @@ -1069,9 +1062,6 @@ static void s_vMgrRxAuthenSequence_1(struct vnt_private *pDevice, pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; // send the frame DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx.. \n"); - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx failed.\n"); - } return; } @@ -1149,9 +1139,6 @@ static void s_vMgrRxAuthenSequence_2(struct vnt_private *pDevice, pTxPacket->cbMPDULen = sFrame.len; pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; // send the frame - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Auth_reply sequence_2 tx failed.\n"); - } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Auth_reply sequence_2 tx ...\n"); } else { @@ -1247,9 +1234,6 @@ reply: pTxPacket->cbMPDULen = sFrame.len; pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; // send the frame - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_4 tx failed.\n"); - } return; } @@ -3853,7 +3837,6 @@ static void s_vMgrRxProbeRequest(struct vnt_private *pDevice, ); if (pTxPacket != NULL ){ /* send the frame */ - Status = csMgmt_xmit(pDevice, pTxPacket); if (Status != CMD_STATUS_PENDING) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Probe response tx failed\n"); } @@ -4055,8 +4038,6 @@ int bMgrPrepareBeaconToSend(struct vnt_private *pDevice, spin_lock_irqsave(&pDevice->lock, flags); - csBeacon_xmit(pDevice, pTxPacket); - spin_unlock_irqrestore(&pDevice->lock, flags); vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); -- cgit From d4d89fd171be53d3299cdc64bc81503afa671581 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:45 +0100 Subject: staging: vt6656: dead code remove wmgr.c The header will removed later Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/bssdb.c | 4 - drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/wmgr.c | 4343 --------------------------------------- drivers/staging/vt6656/wmgr.h | 44 - 5 files changed, 4393 deletions(-) delete mode 100644 drivers/staging/vt6656/wmgr.c (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 0c5628c6b712..255a2ad6b0db 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -9,7 +9,6 @@ vt6656_stage-y += main_usb.o \ wctl.o \ 80211mgr.o \ wcmd.o\ - wmgr.o \ bssdb.o \ wpa2.o \ rxtx.o \ diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 997a20ebc626..603b9ce50145 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -432,10 +432,6 @@ int BSSbInsertToBSSList(struct vnt_private *pDevice, ((PWLAN_IE_SSID) pMgmt->abyDesireSSID)->abySSID, pSSID->len)) { - bAdd_PMKID_Candidate((void *) pDevice, - pBSSList->abyBSSID, - &pBSSList->sRSNCapObj); - if (pDevice->bLinkPass == true && pMgmt->eCurrState == WMAC_STATE_ASSOC && (KeybGetTransmitKey(&(pDevice->sKey), diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index daa67b8e65dd..9570dc62dbf8 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -147,7 +147,6 @@ void RXvMngWorkItem(struct work_struct *work) break; } pRxPacket = &(pRCB->sMngPacket); - vMgrRxManagePacket(pDevice, &pDevice->vnt_mgmt, pRxPacket); pRCB->Ref--; if (pRCB->Ref == 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeMng %d %d\n", diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c deleted file mode 100644 index c76f928f2f1c..000000000000 --- a/drivers/staging/vt6656/wmgr.c +++ /dev/null @@ -1,4343 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wmgr.c - * - * Purpose: Handles the 802.11 management functions - * - * Author: Lyndon Chen - * - * Date: May 8, 2002 - * - * Functions: - * nsMgrObjectInitial - Initialize Management Objet data structure - * vMgrObjectReset - Reset Management Object data structure - * vMgrAssocBeginSta - Start associate function - * vMgrReAssocBeginSta - Start reassociate function - * vMgrDisassocBeginSta - Start disassociate function - * s_vMgrRxAssocRequest - Handle Rcv associate_request - * s_vMgrRxAssocResponse - Handle Rcv associate_response - * vMrgAuthenBeginSta - Start authentication function - * vMgrDeAuthenDeginSta - Start deauthentication function - * s_vMgrRxAuthentication - Handle Rcv authentication - * s_vMgrRxAuthenSequence_1 - Handle Rcv authentication sequence 1 - * s_vMgrRxAuthenSequence_2 - Handle Rcv authentication sequence 2 - * s_vMgrRxAuthenSequence_3 - Handle Rcv authentication sequence 3 - * s_vMgrRxAuthenSequence_4 - Handle Rcv authentication sequence 4 - * s_vMgrRxDisassociation - Handle Rcv disassociation - * s_vMgrRxBeacon - Handle Rcv Beacon - * vMgrCreateOwnIBSS - Create ad_hoc IBSS or AP BSS - * vMgrJoinBSSBegin - Join BSS function - * s_vMgrSynchBSS - Synch & adopt BSS parameters - * s_MgrMakeBeacon - Create Baecon frame - * s_MgrMakeProbeResponse - Create Probe Response frame - * s_MgrMakeAssocRequest - Create Associate Request frame - * s_MgrMakeReAssocRequest - Create ReAssociate Request frame - * s_vMgrRxProbeResponse - Handle Rcv probe_response - * s_vMrgRxProbeRequest - Handle Rcv probe_request - * bMgrPrepareBeaconToSend - Prepare Beacon frame - * s_vMgrLogStatus - Log 802.11 Status - * vMgrRxManagePacket - Rcv management frame dispatch function - * s_vMgrFormatTIM- Assembler TIM field of beacon - * vMgrTimerInit- Initial 1-sec and command call back funtions - * - * Revision History: - * - */ - -#include "tmacro.h" -#include "desc.h" -#include "device.h" -#include "card.h" -#include "80211hdr.h" -#include "80211mgr.h" -#include "wmgr.h" -#include "wcmd.h" -#include "mac.h" -#include "bssdb.h" -#include "power.h" -#include "datarate.h" -#include "baseband.h" -#include "rxtx.h" -#include "wpa.h" -#include "rf.h" -#include "iowpa.h" -#include "usbpipe.h" - -static int msglevel = MSG_LEVEL_INFO; -//static int msglevel =MSG_LEVEL_DEBUG; - -static int ChannelExceedZoneType(struct vnt_private *, u8 byCurrChannel); - -/* Association/diassociation functions */ -static struct vnt_tx_mgmt *s_MgrMakeAssocRequest(struct vnt_private *, - struct vnt_manager *pMgmt, u8 *pDAddr, u16 wCurrCapInfo, - u16 wListenInterval, PWLAN_IE_SSID pCurrSSID, - PWLAN_IE_SUPP_RATES pCurrRates, PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - -static void s_vMgrRxAssocRequest(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - u32 uNodeIndex); - -static struct vnt_tx_mgmt *s_MgrMakeReAssocRequest(struct vnt_private *, - struct vnt_manager *pMgmt, u8 *pDAddr, u16 wCurrCapInfo, - u16 wListenInterval, PWLAN_IE_SSID pCurrSSID, - PWLAN_IE_SUPP_RATES pCurrRates, PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - -static void s_vMgrRxAssocResponse(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - int bReAssocType); - -static void s_vMgrRxDisassociation(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket); - -/* Authentication/deauthen functions */ -static void s_vMgrRxAuthenSequence_1(struct vnt_private *, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame); - -static void s_vMgrRxAuthenSequence_2(struct vnt_private *, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame); - -static void s_vMgrRxAuthenSequence_3(struct vnt_private *, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame); - -static void s_vMgrRxAuthenSequence_4(struct vnt_private *, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame); - -static void s_vMgrRxAuthentication(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket); - -static void s_vMgrRxDeauthentication(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket); - -/* Scan functions -* probe request/response functions */ - -static void s_vMgrRxProbeRequest(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket); - -static void s_vMgrRxProbeResponse(struct vnt_private *, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket); - -/* beacon functions */ -static void s_vMgrRxBeacon(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - int bInScan); - -static void s_vMgrFormatTIM(struct vnt_manager *pMgmt, PWLAN_IE_TIM pTIM); - -static struct vnt_tx_mgmt *s_MgrMakeBeacon(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wCurrBeaconPeriod, - u32 uCurrChannel, u16 wCurrATIMWinodw, PWLAN_IE_SSID pCurrSSID, - u8 *pCurrBSSID, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - -/* Association response */ -static struct vnt_tx_mgmt *s_MgrMakeAssocResponse(struct vnt_private *, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wAssocStatus, - u16 wAssocAID, u8 *pDstAddr, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - -/* ReAssociation response */ -static struct vnt_tx_mgmt *s_MgrMakeReAssocResponse(struct vnt_private *, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wAssocStatus, - u16 wAssocAID, u8 *pDstAddr, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates); - -/* Probe response */ -static struct vnt_tx_mgmt *s_MgrMakeProbeResponse(struct vnt_private *, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wCurrBeaconPeriod, - u32 uCurrChannel, u16 wCurrATIMWinodw, u8 *pDstAddr, - PWLAN_IE_SSID pCurrSSID, u8 *pCurrBSSID, - PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates, u8 byPHYType); - -/* received status */ -static void s_vMgrLogStatus(struct vnt_manager *pMgmt, u16 wStatus); - -static void s_vMgrSynchBSS(struct vnt_private *, u32 uBSSMode, - PKnownBSS pCurr, PCMD_STATUS pStatus); - -static bool -s_bCipherMatch ( - PKnownBSS pBSSNode, - NDIS_802_11_ENCRYPTION_STATUS EncStatus, - u8 * pbyCCSPK, - u8 * pbyCCSGK - ); - -static void Encyption_Rebuild(struct vnt_private *, PKnownBSS pCurr); - -/*+ - * - * Routine Description: - * Allocates and initializes the Management object. - * - * Return Value: - * Ndis_staus. - * --*/ - -void vMgrObjectInit(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - - pMgmt->pbyPSPacketPool = &pMgmt->byPSPacketPool[0]; - pMgmt->pbyMgmtPacketPool = &pMgmt->byMgmtPacketPool[0]; - pMgmt->uCurrChannel = pDevice->uChannel; - for (ii = 0; ii < WLAN_BSSID_LEN; ii++) - pMgmt->abyDesireBSSID[ii] = 0xFF; - - pMgmt->sAssocInfo.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - //memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN +1); - pMgmt->byCSSPK = KEY_CTL_NONE; - pMgmt->byCSSGK = KEY_CTL_NONE; - pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; - BSSvClearBSSList((void *) pDevice, false); - - pDevice->cbFreeCmdQueue = CMD_Q_SIZE; - pDevice->uCmdDequeueIdx = 0; - pDevice->uCmdEnqueueIdx = 0; - pDevice->eCommandState = WLAN_CMD_IDLE; - pDevice->bCmdRunning = false; - pDevice->bCmdClear = false; - - return; -} - -/*+ - * - * Routine Description: - * Start the station association procedure. Namely, send an - * association request frame to the AP. - * - * Return Value: - * None. - * --*/ - -void vMgrAssocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PCMD_STATUS pStatus) -{ - struct vnt_tx_mgmt *pTxPacket; - - pMgmt->wCurrCapInfo = 0; - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_ESS(1); - if (pDevice->bEncryptionEnable) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_PRIVACY(1); - } - // always allow receive short preamble - //if (pDevice->byPreambleType == 1) { - // pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - //} - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - if (pMgmt->wListenInterval == 0) - pMgmt->wListenInterval = 1; // at least one. - - // ERP Phy (802.11g) should support short preamble. - if (pMgmt->eCurrentPHYMode == PHY_TYPE_11G) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - if (pDevice->bShortSlotTime == true) - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTSLOTTIME(1); - - } else if (pMgmt->eCurrentPHYMode == PHY_TYPE_11B) { - if (pDevice->byPreambleType == 1) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - } - } - if (pMgmt->b11hEnable == true) - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SPECTRUMMNG(1); - - // build an assocreq frame and send it - pTxPacket = s_MgrMakeAssocRequest - ( - pDevice, - pMgmt, - pMgmt->abyCurrBSSID, - pMgmt->wCurrCapInfo, - pMgmt->wListenInterval, - (PWLAN_IE_SSID)pMgmt->abyCurrSSID, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates - ); - - if (pTxPacket != NULL ){ - // send the frame - if (*pStatus == CMD_STATUS_PENDING) { - pMgmt->eCurrState = WMAC_STATE_ASSOCPENDING; - *pStatus = CMD_STATUS_SUCCESS; - } - } - else - *pStatus = CMD_STATUS_RESOURCES; - - return ; -} - -/*+ - * - * Routine Description: - * Start the station re-association procedure. - * - * Return Value: - * None. - * --*/ - -void vMgrReAssocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PCMD_STATUS pStatus) -{ - struct vnt_tx_mgmt *pTxPacket; - - pMgmt->wCurrCapInfo = 0; - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_ESS(1); - if (pDevice->bEncryptionEnable) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_PRIVACY(1); - } - - //if (pDevice->byPreambleType == 1) { - // pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - //} - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - - if (pMgmt->wListenInterval == 0) - pMgmt->wListenInterval = 1; // at least one. - - // ERP Phy (802.11g) should support short preamble. - if (pMgmt->eCurrentPHYMode == PHY_TYPE_11G) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - if (pDevice->bShortSlotTime == true) - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTSLOTTIME(1); - - } else if (pMgmt->eCurrentPHYMode == PHY_TYPE_11B) { - if (pDevice->byPreambleType == 1) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - } - } - if (pMgmt->b11hEnable == true) - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SPECTRUMMNG(1); - - pTxPacket = s_MgrMakeReAssocRequest - ( - pDevice, - pMgmt, - pMgmt->abyCurrBSSID, - pMgmt->wCurrCapInfo, - pMgmt->wListenInterval, - (PWLAN_IE_SSID)pMgmt->abyCurrSSID, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates - ); - - if (pTxPacket != NULL ){ - // send the frame - if (*pStatus != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Reassociation tx failed.\n"); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Reassociation tx sending.\n"); - } - } - - return ; -} - -/*+ - * - * Routine Description: - * Send an dis-association request frame to the AP. - * - * Return Value: - * None. - * --*/ - -void vMgrDisassocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u8 *abyDestAddress, u16 wReason, - PCMD_STATUS pStatus) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_DISASSOC sFrame; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_DISASSOC_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - - // Setup the sFrame structure - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_DISASSOC_FR_MAXLEN; - - // format fixed field frame structure - vMgrEncodeDisassociation(&sFrame); - - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_DISASSOC) - )); - - memcpy( sFrame.pHdr->sA3.abyAddr1, abyDestAddress, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - // Set reason code - *(sFrame.pwReason) = cpu_to_le16(wReason); - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - // send the frame - if (*pStatus == CMD_STATUS_PENDING) { - pMgmt->eCurrState = WMAC_STATE_IDLE; - *pStatus = CMD_STATUS_SUCCESS; - } - - return; -} - -/*+ - * - * Routine Description:(AP function) - * Handle incoming station association request frames. - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAssocRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - u32 uNodeIndex) -{ - WLAN_FR_ASSOCREQ sFrame; - CMD_STATUS Status; - struct vnt_tx_mgmt *pTxPacket; - u16 wAssocStatus = 0; - u16 wAssocAID = 0; - u32 uRateLen = WLAN_RATES_MAXLEN; - u8 abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - - if (pMgmt->eCurrMode != WMAC_MODE_ESS_AP) - return; - // node index not found - if (!uNodeIndex) - return; - - //check if node is authenticated - //decode the frame - memset(&sFrame, 0, sizeof(WLAN_FR_ASSOCREQ)); - memset(abyCurrSuppRates, 0, WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - memset(abyCurrExtSuppRates, 0, WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - - vMgrDecodeAssocRequest(&sFrame); - - if (pMgmt->sNodeDBTable[uNodeIndex].eNodeState >= NODE_AUTH) { - pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_ASSOC; - pMgmt->sNodeDBTable[uNodeIndex].wCapInfo = cpu_to_le16(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].wListenInterval = cpu_to_le16(*sFrame.pwListenInterval); - pMgmt->sNodeDBTable[uNodeIndex].bPSEnable = - WLAN_GET_FC_PWRMGT(sFrame.pHdr->sA3.wFrameCtl) ? true : false; - // Todo: check sta basic rate, if ap can't support, set status code - if (pDevice->byBBType == BB_TYPE_11B) { - uRateLen = WLAN_RATES_MAXLEN_11B; - } - abyCurrSuppRates[0] = WLAN_EID_SUPP_RATES; - abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, - uRateLen); - abyCurrExtSuppRates[0] = WLAN_EID_EXTSUPP_RATES; - if (pDevice->byBBType == BB_TYPE_11G) { - abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pExtSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, - uRateLen); - } else { - abyCurrExtSuppRates[1] = 0; - } - - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, - false, // do not change our basic rate - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopOFDMBasicRate) - ); - - // set max tx rate - pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = - pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; - // Todo: check sta preamble, if ap can't support, set status code - pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = - WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].bShortSlotTime = - WLAN_GET_CAP_INFO_SHORTSLOTTIME(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].wAID = (u16)uNodeIndex; - wAssocStatus = WLAN_MGMT_STATUS_SUCCESS; - wAssocAID = (u16)uNodeIndex; - // check if ERP support - if(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate > RATE_11M) - pMgmt->sNodeDBTable[uNodeIndex].bERPExist = true; - - if (pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate <= RATE_11M) { - // B only STA join - pDevice->bProtectMode = true; - pDevice->bNonERPPresent = true; - } - if (pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble == false) { - pDevice->bBarkerPreambleMd = true; - } - - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Associate AID= %d \n", wAssocAID); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n", - sFrame.pHdr->sA3.abyAddr2[0], - sFrame.pHdr->sA3.abyAddr2[1], - sFrame.pHdr->sA3.abyAddr2[2], - sFrame.pHdr->sA3.abyAddr2[3], - sFrame.pHdr->sA3.abyAddr2[4], - sFrame.pHdr->sA3.abyAddr2[5] - ) ; - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d \n", - pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate); - } - - // assoc response reply.. - pTxPacket = s_MgrMakeAssocResponse - ( - pDevice, - pMgmt, - pMgmt->wCurrCapInfo, - wAssocStatus, - wAssocAID, - sFrame.pHdr->sA3.abyAddr2, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates - ); - if (pTxPacket != NULL ){ - /* send the frame */ - if (Status != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Assoc response tx failed\n"); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Assoc response tx sending..\n"); - } - - } - - return; -} - -/*+ - * - * Description:(AP function) - * Handle incoming station re-association request frames. - * - * Parameters: - * In: - * pMgmt - Management Object structure - * pRxPacket - Received Packet - * Out: - * none - * - * Return Value: None. - * --*/ - -static void s_vMgrRxReAssocRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - u32 uNodeIndex) -{ - WLAN_FR_REASSOCREQ sFrame; - CMD_STATUS Status; - struct vnt_tx_mgmt *pTxPacket; - u16 wAssocStatus = 0; - u16 wAssocAID = 0; - u32 uRateLen = WLAN_RATES_MAXLEN; - u8 abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - - if (pMgmt->eCurrMode != WMAC_MODE_ESS_AP) - return; - // node index not found - if (!uNodeIndex) - return; - //check if node is authenticated - //decode the frame - memset(&sFrame, 0, sizeof(WLAN_FR_REASSOCREQ)); - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeReassocRequest(&sFrame); - - if (pMgmt->sNodeDBTable[uNodeIndex].eNodeState >= NODE_AUTH) { - pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_ASSOC; - pMgmt->sNodeDBTable[uNodeIndex].wCapInfo = cpu_to_le16(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].wListenInterval = cpu_to_le16(*sFrame.pwListenInterval); - pMgmt->sNodeDBTable[uNodeIndex].bPSEnable = - WLAN_GET_FC_PWRMGT(sFrame.pHdr->sA3.wFrameCtl) ? true : false; - // Todo: check sta basic rate, if ap can't support, set status code - - if (pDevice->byBBType == BB_TYPE_11B) { - uRateLen = WLAN_RATES_MAXLEN_11B; - } - - abyCurrSuppRates[0] = WLAN_EID_SUPP_RATES; - abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, - uRateLen); - abyCurrExtSuppRates[0] = WLAN_EID_EXTSUPP_RATES; - if (pDevice->byBBType == BB_TYPE_11G) { - abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pExtSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, - uRateLen); - } else { - abyCurrExtSuppRates[1] = 0; - } - - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, - false, // do not change our basic rate - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopOFDMBasicRate) - ); - - // set max tx rate - pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = - pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; - // Todo: check sta preamble, if ap can't support, set status code - pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = - WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].bShortSlotTime = - WLAN_GET_CAP_INFO_SHORTSLOTTIME(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].wAID = (u16)uNodeIndex; - wAssocStatus = WLAN_MGMT_STATUS_SUCCESS; - wAssocAID = (u16)uNodeIndex; - - // if suppurt ERP - if(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate > RATE_11M) - pMgmt->sNodeDBTable[uNodeIndex].bERPExist = true; - - if (pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate <= RATE_11M) { - // B only STA join - pDevice->bProtectMode = true; - pDevice->bNonERPPresent = true; - } - if (pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble == false) { - pDevice->bBarkerPreambleMd = true; - } - - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Rx ReAssociate AID= %d \n", wAssocAID); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n", - sFrame.pHdr->sA3.abyAddr2[0], - sFrame.pHdr->sA3.abyAddr2[1], - sFrame.pHdr->sA3.abyAddr2[2], - sFrame.pHdr->sA3.abyAddr2[3], - sFrame.pHdr->sA3.abyAddr2[4], - sFrame.pHdr->sA3.abyAddr2[5] - ) ; - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d \n", - pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate); - - } - - // assoc response reply.. - pTxPacket = s_MgrMakeReAssocResponse - ( - pDevice, - pMgmt, - pMgmt->wCurrCapInfo, - wAssocStatus, - wAssocAID, - sFrame.pHdr->sA3.abyAddr2, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates - ); - - if (pTxPacket != NULL ){ - /* send the frame */ - if (Status != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:ReAssoc response tx failed\n"); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:ReAssoc response tx sending..\n"); - } - } - return; -} - -/*+ - * - * Routine Description: - * Handle incoming association response frames. - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAssocResponse(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - int bReAssocType) -{ - WLAN_FR_ASSOCRESP sFrame; - PWLAN_IE_SSID pItemSSID; - u8 *pbyIEs; - - if (pMgmt->eCurrState == WMAC_STATE_ASSOCPENDING || - pMgmt->eCurrState == WMAC_STATE_ASSOC) { - - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - // decode the frame - vMgrDecodeAssocResponse(&sFrame); - if ((sFrame.pwCapInfo == NULL) - || (sFrame.pwStatus == NULL) - || (sFrame.pwAid == NULL) - || (sFrame.pSuppRates == NULL)) { - return; - } - - pMgmt->sAssocInfo.AssocInfo.ResponseFixedIEs.Capabilities = *(sFrame.pwCapInfo); - pMgmt->sAssocInfo.AssocInfo.ResponseFixedIEs.StatusCode = *(sFrame.pwStatus); - pMgmt->sAssocInfo.AssocInfo.ResponseFixedIEs.AssociationId = *(sFrame.pwAid); - pMgmt->sAssocInfo.AssocInfo.AvailableResponseFixedIEs |= 0x07; - - pMgmt->sAssocInfo.AssocInfo.ResponseIELength = sFrame.len - 24 - 6; - pMgmt->sAssocInfo.AssocInfo.OffsetResponseIEs = pMgmt->sAssocInfo.AssocInfo.OffsetRequestIEs + pMgmt->sAssocInfo.AssocInfo.RequestIELength; - pbyIEs = pMgmt->sAssocInfo.abyIEs; - pbyIEs += pMgmt->sAssocInfo.AssocInfo.RequestIELength; - memcpy(pbyIEs, (sFrame.pBuf + 24 +6), pMgmt->sAssocInfo.AssocInfo.ResponseIELength); - - // save values and set current BSS state - if (cpu_to_le16((*(sFrame.pwStatus))) == WLAN_MGMT_STATUS_SUCCESS ){ - // set AID - pMgmt->wCurrAID = cpu_to_le16((*(sFrame.pwAid))); - if ( (pMgmt->wCurrAID >> 14) != (BIT0 | BIT1) ) - { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "AID from AP, has two msb clear.\n"); - } - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Association Successful, AID=%d.\n", pMgmt->wCurrAID & ~(BIT14|BIT15)); - pMgmt->eCurrState = WMAC_STATE_ASSOC; - 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; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - //if(pDevice->bWPASuppWextEnabled == true) - { - u8 buf[512]; - size_t len; - union iwreq_data wrqu; - int we_event; - - memset(buf, 0, 512); - - len = pMgmt->sAssocInfo.AssocInfo.RequestIELength; - if(len) { - memcpy(buf, pMgmt->sAssocInfo.abyIEs, len); - memset(&wrqu, 0, sizeof (wrqu)); - wrqu.data.length = len; - we_event = IWEVASSOCREQIE; - PRINT_K("wireless_send_event--->IWEVASSOCREQIE\n"); - wireless_send_event(pDevice->dev, we_event, &wrqu, buf); - } - - memset(buf, 0, 512); - len = pMgmt->sAssocInfo.AssocInfo.ResponseIELength; - - if(len) { - memcpy(buf, pbyIEs, len); - memset(&wrqu, 0, sizeof (wrqu)); - wrqu.data.length = len; - we_event = IWEVASSOCRESPIE; - PRINT_K("wireless_send_event--->IWEVASSOCRESPIE\n"); - wireless_send_event(pDevice->dev, we_event, &wrqu, buf); - } - - memset(&wrqu, 0, sizeof (wrqu)); - memcpy(wrqu.ap_addr.sa_data, &pMgmt->abyCurrBSSID[0], ETH_ALEN); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(associated)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); - - } - - } - else { - if (bReAssocType) { - pMgmt->eCurrState = WMAC_STATE_IDLE; - } - else { - // jump back to the auth state and indicate the error - pMgmt->eCurrState = WMAC_STATE_AUTH; - } - s_vMgrLogStatus(pMgmt,cpu_to_le16((*(sFrame.pwStatus)))); - } - - } - -//need clear flags related to Networkmanager - pDevice->bwextstep0 = false; - pDevice->bwextstep1 = false; - pDevice->bwextstep2 = false; - pDevice->bwextstep3 = false; - pDevice->bWPASuppWextEnabled = false; - - if (pMgmt->eCurrState == WMAC_STATE_ASSOC) - schedule_delayed_work(&pDevice->run_command_work, 0); - - return; -} - -/*+ - * - * Routine Description: - * Start the station authentication procedure. Namely, send an - * authentication frame to the AP. - * - * Return Value: - * None. - * --*/ - -void vMgrAuthenBeginSta(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PCMD_STATUS pStatus) -{ - WLAN_FR_AUTHEN sFrame; - struct vnt_tx_mgmt *pTxPacket = - (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_AUTHEN_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_AUTHEN_FR_MAXLEN; - vMgrEncodeAuthen(&sFrame); - /* insert values */ - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_AUTHEN) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - if (pMgmt->bShareKeyAlgorithm) - *(sFrame.pwAuthAlgorithm) = cpu_to_le16(WLAN_AUTH_ALG_SHAREDKEY); - else - *(sFrame.pwAuthAlgorithm) = cpu_to_le16(WLAN_AUTH_ALG_OPENSYSTEM); - - *(sFrame.pwAuthSequence) = cpu_to_le16(1); - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - if (*pStatus == CMD_STATUS_PENDING){ - pMgmt->eCurrState = WMAC_STATE_AUTHPENDING; - *pStatus = CMD_STATUS_SUCCESS; - } - - return ; -} - -/*+ - * - * Routine Description: - * Start the station(AP) deauthentication procedure. Namely, send an - * deauthentication frame to the AP or Sta. - * - * Return Value: - * None. - * --*/ - -void vMgrDeAuthenBeginSta(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u8 *abyDestAddress, u16 wReason, - PCMD_STATUS pStatus) -{ - WLAN_FR_DEAUTHEN sFrame; - struct vnt_tx_mgmt *pTxPacket = - (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_DEAUTHEN_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_DEAUTHEN_FR_MAXLEN; - vMgrEncodeDeauthen(&sFrame); - /* insert values */ - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_DEAUTHEN) - )); - - memcpy( sFrame.pHdr->sA3.abyAddr1, abyDestAddress, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - *(sFrame.pwReason) = cpu_to_le16(wReason); // deauthen. bcs left BSS - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - if (*pStatus == CMD_STATUS_PENDING){ - *pStatus = CMD_STATUS_SUCCESS; - } - - return ; -} - -/*+ - * - * Routine Description: - * Handle incoming authentication frames. - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAuthentication(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket) -{ - WLAN_FR_AUTHEN sFrame; - - // we better be an AP or a STA in AUTHPENDING otherwise ignore - if (!(pMgmt->eCurrMode == WMAC_MODE_ESS_AP || - pMgmt->eCurrState == WMAC_STATE_AUTHPENDING)) { - return; - } - - // decode the frame - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeAuthen(&sFrame); - switch (cpu_to_le16((*(sFrame.pwAuthSequence )))){ - case 1: - //AP funciton - s_vMgrRxAuthenSequence_1(pDevice,pMgmt, &sFrame); - break; - case 2: - s_vMgrRxAuthenSequence_2(pDevice, pMgmt, &sFrame); - break; - case 3: - //AP funciton - s_vMgrRxAuthenSequence_3(pDevice, pMgmt, &sFrame); - break; - case 4: - s_vMgrRxAuthenSequence_4(pDevice, pMgmt, &sFrame); - break; - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Auth Sequence error, seq = %d\n", - cpu_to_le16((*(sFrame.pwAuthSequence)))); - break; - } - return; -} - -/*+ - * - * Routine Description: - * Handles incoming authen frames with sequence 1. Currently - * assumes we're an AP. So far, no one appears to use authentication - * in Ad-Hoc mode. - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAuthenSequence_1(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - u32 uNodeIndex; - WLAN_FR_AUTHEN sFrame; - PSKeyItem pTransmitKey; - - /* Insert a Node entry */ - if (!BSSbIsSTAInNodeDB(pDevice, pFrame->pHdr->sA3.abyAddr2, - &uNodeIndex)) { - BSSvCreateOneNode(pDevice, &uNodeIndex); - memcpy(pMgmt->sNodeDBTable[uNodeIndex].abyMACAddr, - pFrame->pHdr->sA3.abyAddr2, WLAN_ADDR_LEN); - } - - if (pMgmt->bShareKeyAlgorithm) { - pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_KNOWN; - pMgmt->sNodeDBTable[uNodeIndex].byAuthSequence = 1; - } - else { - pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_AUTH; - } - - // send auth reply - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_AUTHEN_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_AUTHEN_FR_MAXLEN; - // format buffer structure - vMgrEncodeAuthen(&sFrame); - // insert values - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_AUTHEN)| - WLAN_SET_FC_ISWEP(0) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pFrame->pHdr->sA3.abyAddr2, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - *(sFrame.pwAuthAlgorithm) = *(pFrame->pwAuthAlgorithm); - *(sFrame.pwAuthSequence) = cpu_to_le16(2); - - if (cpu_to_le16(*(pFrame->pwAuthAlgorithm)) == WLAN_AUTH_ALG_SHAREDKEY) { - if (pMgmt->bShareKeyAlgorithm) - *(sFrame.pwStatus) = cpu_to_le16(WLAN_MGMT_STATUS_SUCCESS); - else - *(sFrame.pwStatus) = cpu_to_le16(WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG); - } - else { - if (pMgmt->bShareKeyAlgorithm) - *(sFrame.pwStatus) = cpu_to_le16(WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG); - else - *(sFrame.pwStatus) = cpu_to_le16(WLAN_MGMT_STATUS_SUCCESS); - } - - if (pMgmt->bShareKeyAlgorithm && - (cpu_to_le16(*(sFrame.pwStatus)) == WLAN_MGMT_STATUS_SUCCESS)) { - - sFrame.pChallenge = (PWLAN_IE_CHALLENGE)(sFrame.pBuf + sFrame.len); - sFrame.len += WLAN_CHALLENGE_IE_LEN; - sFrame.pChallenge->byElementID = WLAN_EID_CHALLENGE; - sFrame.pChallenge->len = WLAN_CHALLENGE_LEN; - memset(pMgmt->abyChallenge, 0, WLAN_CHALLENGE_LEN); - // get group key - if(KeybGetTransmitKey(&(pDevice->sKey), pDevice->abyBroadcastAddr, GROUP_KEY, &pTransmitKey) == true) { - rc4_init(&pDevice->SBox, pDevice->abyPRNG, pTransmitKey->uKeyLength+3); - rc4_encrypt(&pDevice->SBox, pMgmt->abyChallenge, pMgmt->abyChallenge, WLAN_CHALLENGE_LEN); - } - memcpy(sFrame.pChallenge->abyChallenge, pMgmt->abyChallenge , WLAN_CHALLENGE_LEN); - } - - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - // send the frame - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx.. \n"); - return; -} - -/*+ - * - * Routine Description: - * Handles incoming auth frames with sequence number 2. Currently - * assumes we're a station. - * - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAuthenSequence_2(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame) -{ - WLAN_FR_AUTHEN sFrame; - struct vnt_tx_mgmt *pTxPacket = NULL; - - switch (cpu_to_le16((*(pFrame->pwAuthAlgorithm)))) - { - case WLAN_AUTH_ALG_OPENSYSTEM: - if ( cpu_to_le16((*(pFrame->pwStatus))) == WLAN_MGMT_STATUS_SUCCESS ){ - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "802.11 Authen (OPEN) Successful.\n"); - pMgmt->eCurrState = WMAC_STATE_AUTH; - schedule_delayed_work(&pDevice->run_command_work, 0); - } - else { - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "802.11 Authen (OPEN) Failed.\n"); - 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((void *) pDevice, 0); - spin_lock_irq(&pDevice->lock); */ - } - break; - - case WLAN_AUTH_ALG_SHAREDKEY: - - if (cpu_to_le16((*(pFrame->pwStatus))) == WLAN_MGMT_STATUS_SUCCESS) { - pTxPacket = (struct vnt_tx_mgmt *) - pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_AUTHEN_FR_MAXLEN); - pTxPacket->p80211Header - = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_AUTHEN_FR_MAXLEN; - // format buffer structure - vMgrEncodeAuthen(&sFrame); - // insert values - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_AUTHEN)| - WLAN_SET_FC_ISWEP(1) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - *(sFrame.pwAuthAlgorithm) = *(pFrame->pwAuthAlgorithm); - *(sFrame.pwAuthSequence) = cpu_to_le16(3); - *(sFrame.pwStatus) = cpu_to_le16(WLAN_MGMT_STATUS_SUCCESS); - sFrame.pChallenge = (PWLAN_IE_CHALLENGE)(sFrame.pBuf + sFrame.len); - sFrame.len += WLAN_CHALLENGE_IE_LEN; - sFrame.pChallenge->byElementID = WLAN_EID_CHALLENGE; - sFrame.pChallenge->len = WLAN_CHALLENGE_LEN; - memcpy( sFrame.pChallenge->abyChallenge, pFrame->pChallenge->abyChallenge, WLAN_CHALLENGE_LEN); - // Adjust the length fields - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - // send the frame - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Auth_reply sequence_2 tx ...\n"); - } - 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((void *) pDevice, 0); - spin_lock_irq(&pDevice->lock); */ - } - s_vMgrLogStatus(pMgmt, cpu_to_le16((*(pFrame->pwStatus)))); - } - break; - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt: rx auth.seq = 2 unknown AuthAlgorithm=%d\n", cpu_to_le16((*(pFrame->pwAuthAlgorithm)))); - break; - } - return; -} - -/*+ - * - * Routine Description: - * Handles incoming authen frames with sequence 3. Currently - * assumes we're an AP. This function assumes the frame has - * already been successfully decrypted. - * - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxAuthenSequence_3(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - u32 uStatusCode = 0 ; - u32 uNodeIndex = 0; - WLAN_FR_AUTHEN sFrame; - - if (!WLAN_GET_FC_ISWEP(pFrame->pHdr->sA3.wFrameCtl)) { - uStatusCode = WLAN_MGMT_STATUS_CHALLENGE_FAIL; - goto reply; - } - if (BSSbIsSTAInNodeDB(pDevice, pFrame->pHdr->sA3.abyAddr2, &uNodeIndex)) { - if (pMgmt->sNodeDBTable[uNodeIndex].byAuthSequence != 1) { - uStatusCode = WLAN_MGMT_STATUS_RX_AUTH_NOSEQ; - goto reply; - } - if (memcmp(pMgmt->abyChallenge, pFrame->pChallenge->abyChallenge, WLAN_CHALLENGE_LEN) != 0) { - uStatusCode = WLAN_MGMT_STATUS_CHALLENGE_FAIL; - goto reply; - } - } - else { - uStatusCode = WLAN_MGMT_STATUS_UNSPEC_FAILURE; - goto reply; - } - - if (uNodeIndex) { - pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_AUTH; - pMgmt->sNodeDBTable[uNodeIndex].byAuthSequence = 0; - } - uStatusCode = WLAN_MGMT_STATUS_SUCCESS; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Challenge text check ok..\n"); - -reply: - // send auth reply - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_AUTHEN_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_AUTHEN_FR_MAXLEN; - // format buffer structure - vMgrEncodeAuthen(&sFrame); - /* insert values */ - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_AUTHEN)| - WLAN_SET_FC_ISWEP(0) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pFrame->pHdr->sA3.abyAddr2, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - *(sFrame.pwAuthAlgorithm) = *(pFrame->pwAuthAlgorithm); - *(sFrame.pwAuthSequence) = cpu_to_le16(4); - *(sFrame.pwStatus) = cpu_to_le16(uStatusCode); - - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - // send the frame - return; - -} - -/*+ - * - * Routine Description: - * Handles incoming authen frames with sequence 4 - * - * - * Return Value: - * None. - * --*/ -static void s_vMgrRxAuthenSequence_4(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, PWLAN_FR_AUTHEN pFrame) -{ - - if ( cpu_to_le16((*(pFrame->pwStatus))) == WLAN_MGMT_STATUS_SUCCESS ){ - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "802.11 Authen (SHAREDKEY) Successful.\n"); - pMgmt->eCurrState = WMAC_STATE_AUTH; - schedule_delayed_work(&pDevice->run_command_work, 0); - } - else{ - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "802.11 Authen (SHAREDKEY) Failed.\n"); - 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((void *) pDevice, 0); - spin_lock_irq(&pDevice->lock); */ - } -} - -/*+ - * - * Routine Description: - * Handles incoming disassociation frames - * - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxDisassociation(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket) -{ - WLAN_FR_DISASSOC sFrame; - u32 uNodeIndex = 0; - CMD_STATUS CmdStatus; - - if ( pMgmt->eCurrMode == WMAC_MODE_ESS_AP ){ - // if is acting an AP.. - // a STA is leaving this BSS.. - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - if (BSSbIsSTAInNodeDB(pDevice, pRxPacket->p80211Header->sA3.abyAddr2, &uNodeIndex)) { - BSSvRemoveOneNode(pDevice, uNodeIndex); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx disassoc, sta not found\n"); - } - } - else if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA ){ - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeDisassociation(&sFrame); - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "AP disassociated me, reason=%d.\n", cpu_to_le16(*(sFrame.pwReason))); - - pDevice->fWPA_Authened = false; - - //TODO: do something let upper layer know or - //try to send associate packet again because of inactivity timeout - if (pMgmt->eCurrState == WMAC_STATE_ASSOC) { - pDevice->bLinkPass = false; - pMgmt->sNodeDBTable[0].bActive = false; - pDevice->byReAssocCount = 0; - pMgmt->eCurrState = WMAC_STATE_AUTH; // jump back to the auth state! - pDevice->eCommandState = WLAN_ASSOCIATE_WAIT; - vMgrReAssocBeginSta(pDevice, pMgmt, &CmdStatus); - if(CmdStatus == CMD_STATUS_PENDING) { - pDevice->byReAssocCount ++; - return; //mike add: you'll retry for many times, so it cann't be regarded as disconnected! - } - } - - // if(pDevice->bWPASuppWextEnabled == true) - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof (wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); - } - } - /* else, ignore it */ - - return; -} - -/*+ - * - * Routine Description: - * Handles incoming deauthentication frames - * - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxDeauthentication(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket) -{ - WLAN_FR_DEAUTHEN sFrame; - u32 uNodeIndex = 0; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP ){ - //Todo: - // if is acting an AP.. - // a STA is leaving this BSS.. - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - if (BSSbIsSTAInNodeDB(pDevice, pRxPacket->p80211Header->sA3.abyAddr2, &uNodeIndex)) { - BSSvRemoveOneNode(pDevice, uNodeIndex); - } - else { - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Rx deauth, sta not found\n"); - } - } - else { - if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA ) { - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeDeauthen(&sFrame); - pDevice->fWPA_Authened = false; - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "AP deauthed me, reason=%d.\n", cpu_to_le16((*(sFrame.pwReason)))); - // TODO: update BSS list for specific BSSID if pre-authentication case - if (ether_addr_equal(sFrame.pHdr->sA3.abyAddr3, - pMgmt->abyCurrBSSID)) { - if (pMgmt->eCurrState >= WMAC_STATE_AUTHPENDING) { - pMgmt->sNodeDBTable[0].bActive = false; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - pMgmt->eCurrState = WMAC_STATE_IDLE; - netif_stop_queue(pDevice->dev); - pDevice->bLinkPass = false; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); - } - } - - // if(pDevice->bWPASuppWextEnabled == true) - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof (wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disauthen)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); - } - - } - /* else, ignore it. TODO: IBSS authentication service - would be implemented here */ - }; - return; -} - -/*+ - * - * Routine Description: - * check if current channel is match ZoneType. - *for USA:1~11; - * Japan:1~13; - * Europe:1~13 - * Return Value: - * True:exceed; - * False:normal case --*/ -static int ChannelExceedZoneType(struct vnt_private *pDevice, u8 byCurrChannel) -{ - int exceed = false; - - switch(pDevice->byZoneType) { - case 0x00: //USA:1~11 - if((byCurrChannel<1) ||(byCurrChannel>11)) - exceed = true; - break; - case 0x01: //Japan:1~13 - case 0x02: //Europe:1~13 - if((byCurrChannel<1) ||(byCurrChannel>13)) - exceed = true; - break; - default: //reserve for other zonetype - break; - } - - return exceed; -} - -/*+ - * - * Routine Description: - * Handles and analysis incoming beacon frames. - * - * - * Return Value: - * None. - * --*/ - -static void s_vMgrRxBeacon(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket, - int bInScan) -{ - PKnownBSS pBSSList; - WLAN_FR_BEACON sFrame; - u64 qwTSFOffset; - int bIsBSSIDEqual = false; - int bIsSSIDEqual = false; - int bTSFLargeDiff = false; - int bTSFOffsetPostive = false; - int bUpdateTSF = false; - int bIsAPBeacon = false; - int bIsChannelEqual = false; - u32 uLocateByteIndex; - u8 byTIMBitOn = 0; - u16 wAIDNumber = 0; - u32 uNodeIndex; - u64 qwTimestamp, qwLocalTSF; - u64 qwCurrTSF; - u16 wStartIndex = 0; - u16 wAIDIndex = 0; - u8 byCurrChannel = pRxPacket->byRxChannel; - ERPObject sERP; - u32 uRateLen = WLAN_RATES_MAXLEN; - int bChannelHit = false; - u8 byOldPreambleType; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) - return; - - memset(&sFrame, 0, sizeof(WLAN_FR_BEACON)); - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - - // decode the beacon frame - vMgrDecodeBeacon(&sFrame); - - 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 ) - { - if (sFrame.pDSParms != NULL) { - if (byCurrChannel == RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]) - bChannelHit = true; - byCurrChannel = RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]; - } else { - bChannelHit = true; - } - - } else { - if (sFrame.pDSParms != NULL) { - if (byCurrChannel == sFrame.pDSParms->byCurrChannel) - bChannelHit = true; - byCurrChannel = sFrame.pDSParms->byCurrChannel; - } else { - bChannelHit = true; - } - } - -if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) - return; - - if (sFrame.pERP != NULL) { - sERP.byERP = sFrame.pERP->byContext; - sERP.bERPExist = true; - - } else { - sERP.bERPExist = false; - sERP.byERP = 0; - } - - 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((void *) pDevice, - sFrame.pHdr->sA3.abyAddr3, - *sFrame.pqwTimestamp, - *sFrame.pwBeaconInterval, - *sFrame.pwCapInfo, - byCurrChannel, - sFrame.pSSID, - sFrame.pSuppRates, - sFrame.pExtSuppRates, - &sERP, - sFrame.pRSN, - sFrame.pRSNWPA, - sFrame.pIE_Country, - sFrame.pIE_Quiet, - sFrame.len - WLAN_HDR_ADDR3_LEN, - sFrame.pHdr->sA4.abyAddr4, // payload of beacon - (void *) pRxPacket); - } - else { -// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"update bcn: RxChannel = : %d\n", byCurrChannel); - 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, - sFrame.pHdr->sA4.abyAddr4, // payload of probresponse - (void *) pRxPacket); - - } - - if (bInScan) { - return; - } - - if(byCurrChannel == (u8)pMgmt->uCurrChannel) - bIsChannelEqual = true; - - if (bIsChannelEqual && (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) { - - // if rx beacon without ERP field - if (sERP.bERPExist) { - if (WLAN_GET_ERP_USE_PROTECTION(sERP.byERP)){ - pDevice->byERPFlag |= WLAN_SET_ERP_USE_PROTECTION(1); - pDevice->wUseProtectCntDown = USE_PROTECT_PERIOD; - } - } - else { - pDevice->byERPFlag |= WLAN_SET_ERP_USE_PROTECTION(1); - pDevice->wUseProtectCntDown = USE_PROTECT_PERIOD; - } - - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - if(!WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo)) - pDevice->byERPFlag |= WLAN_SET_ERP_BARKER_MODE(1); - if(!sERP.bERPExist) - pDevice->byERPFlag |= WLAN_SET_ERP_NONERP_PRESENT(1); - } - } - - // check if BSSID the same - if (memcmp(sFrame.pHdr->sA3.abyAddr3, - pMgmt->abyCurrBSSID, - WLAN_BSSID_LEN) == 0) { - - bIsBSSIDEqual = true; - pDevice->uCurrRSSI = pRxPacket->uRSSI; - pDevice->byCurrSQ = pRxPacket->bySQ; - if (pMgmt->sNodeDBTable[0].uInActiveCount != 0) { - pMgmt->sNodeDBTable[0].uInActiveCount = 0; - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BCN:Wake Count= [%d]\n", pMgmt->wCountToWakeUp); - } - } - // check if SSID the same - if (sFrame.pSSID->len == ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) { - if (memcmp(sFrame.pSSID->abySSID, - ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->abySSID, - sFrame.pSSID->len - ) == 0) { - bIsSSIDEqual = true; - } - } - - if ((WLAN_GET_CAP_INFO_ESS(*sFrame.pwCapInfo)== true) && - (bIsBSSIDEqual == true) && - (bIsSSIDEqual == true) && - (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && - (pMgmt->eCurrState == WMAC_STATE_ASSOC)) { - // add state check to prevent reconnect fail since we'll receive Beacon - - bIsAPBeacon = true; - if (pBSSList != NULL) { - - // Sync ERP field - if ((pBSSList->sERP.bERPExist == true) && (pDevice->byBBType == BB_TYPE_11G)) { - if ((pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION) != pDevice->bProtectMode) {//0000 0010 - pDevice->bProtectMode = (pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); - if (pDevice->bProtectMode) { - vnt_mac_enable_protect_mode(pDevice); - } else { - vnt_mac_disable_protect_mode(pDevice); - } - vnt_update_ifs(pDevice); - } - if ((pBSSList->sERP.byERP & WLAN_EID_ERP_NONERP_PRESENT) != pDevice->bNonERPPresent) {//0000 0001 - pDevice->bNonERPPresent = (pBSSList->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); - } - if ((pBSSList->sERP.byERP & WLAN_EID_ERP_BARKER_MODE) != pDevice->bBarkerPreambleMd) {//0000 0100 - pDevice->bBarkerPreambleMd = (pBSSList->sERP.byERP & WLAN_EID_ERP_BARKER_MODE); - //BarkerPreambleMd has higher priority than shortPreamble bit in Cap - if (pDevice->bBarkerPreambleMd) { - vnt_mac_enable_barker_preamble_mode(pDevice); - } else { - vnt_mac_disable_barker_preamble_mode(pDevice); - } - } - } - // Sync Short Slot Time - if (WLAN_GET_CAP_INFO_SHORTSLOTTIME(pBSSList->wCapInfo) != pDevice->bShortSlotTime) { - bool bShortSlotTime; - - bShortSlotTime = WLAN_GET_CAP_INFO_SHORTSLOTTIME(pBSSList->wCapInfo); - //DBG_PRN_WLAN05(("Set Short Slot Time: %d\n", pDevice->bShortSlotTime)); - //Kyle check if it is OK to set G. - if (pDevice->byBBType == BB_TYPE_11A) { - bShortSlotTime = true; - } - else if (pDevice->byBBType == BB_TYPE_11B) { - bShortSlotTime = false; - } - if (bShortSlotTime != pDevice->bShortSlotTime) { - pDevice->bShortSlotTime = bShortSlotTime; - BBvSetShortSlotTime(pDevice); - vnt_update_ifs(pDevice); - } - } - - // - // Preamble may change dynamically - // - byOldPreambleType = pDevice->byPreambleType; - if (WLAN_GET_CAP_INFO_SHORTPREAMBLE(pBSSList->wCapInfo)) { - pDevice->byPreambleType = pDevice->byShortPreamble; - } - else { - pDevice->byPreambleType = 0; - } - if (pDevice->byPreambleType != byOldPreambleType) - vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); - // - // Basic Rate Set may change dynamically - // - if (pBSSList->eNetworkTypeInUse == PHY_TYPE_11B) { - uRateLen = WLAN_RATES_MAXLEN_11B; - } - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pBSSList->abySuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - uRateLen); - pMgmt->abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pBSSList->abyExtSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, - uRateLen); - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, - true, - &(pMgmt->sNodeDBTable[0].wMaxBasicRate), - &(pMgmt->sNodeDBTable[0].wMaxSuppRate), - &(pMgmt->sNodeDBTable[0].wSuppRate), - &(pMgmt->sNodeDBTable[0].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[0].byTopOFDMBasicRate) - ); - - } - } - -// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Beacon 2 \n"); - // check if CF field exisit - if (WLAN_GET_CAP_INFO_ESS(*sFrame.pwCapInfo)) { - if (sFrame.pCFParms->wCFPDurRemaining > 0) { - // TODO: deal with CFP period to set NAV - } - } - - qwTimestamp = cpu_to_le64(*sFrame.pqwTimestamp); - qwLocalTSF = pRxPacket->qwLocalTSF; - - // check if beacon TSF larger or small than our local TSF - if (qwTimestamp >= qwLocalTSF) - bTSFOffsetPostive = true; - else - bTSFOffsetPostive = false; - - if (bTSFOffsetPostive) { - qwTSFOffset = vnt_get_tsf_offset(pRxPacket->byRxRate, (qwTimestamp), (qwLocalTSF)); - } - else { - qwTSFOffset = vnt_get_tsf_offset(pRxPacket->byRxRate, (qwLocalTSF), (qwTimestamp)); - } - - if (qwTSFOffset > TRIVIAL_SYNC_DIFFERENCE) - bTSFLargeDiff = true; - - // if infra mode - if (bIsAPBeacon == true) { - - // Infra mode: Local TSF always follow AP's TSF if Difference huge. - if (bTSFLargeDiff) - bUpdateTSF = true; - - if ((pDevice->bEnablePSMode == true) && (sFrame.pTIM)) { - - /* 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; - wAIDNumber = pMgmt->wCurrAID & ~(BIT14|BIT15); - - // check if AID in TIM field bit on - // wStartIndex = N1 - wStartIndex = WLAN_MGMT_GET_TIM_OFFSET(sFrame.pTIM->byBitMapCtl) << 1; - // AIDIndex = N2 - wAIDIndex = (wAIDNumber >> 3); - if ((wAIDNumber > 0) && (wAIDIndex >= wStartIndex)) { - uLocateByteIndex = wAIDIndex - wStartIndex; - // len = byDTIMCount + byDTIMPeriod + byDTIMPeriod + byVirtBitMap[0~250] - if (sFrame.pTIM->len >= (uLocateByteIndex + 4)) { - byTIMBitOn = (0x01) << ((wAIDNumber) % 8); - pMgmt->bInTIM = sFrame.pTIM->byVirtBitMap[uLocateByteIndex] & byTIMBitOn ? true : false; - } - else { - pMgmt->bInTIM = false; - }; - } - else { - pMgmt->bInTIM = false; - }; - - if (pMgmt->bInTIM || - (pMgmt->bMulticastTIM && (pMgmt->byDTIMCount == 0))) { - pMgmt->bInTIMWake = true; - /* send out ps-poll packet */ - if (pMgmt->bInTIM) - PSvSendPSPOLL(pDevice); - - } - else { - pMgmt->bInTIMWake = false; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "BCN: Not In TIM..\n"); - if (pDevice->bPWBitOn == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "BCN: Send Null Packet\n"); - if (PSbSendNullPacket(pDevice)) - pDevice->bPWBitOn = true; - } - if(PSbConsiderPowerDown(pDevice, false, false)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "BCN: Power down now...\n"); - } - } - - } - - } - // if adhoc mode - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && !bIsAPBeacon && bIsChannelEqual) { - if (bIsBSSIDEqual) { - // Use sNodeDBTable[0].uInActiveCount as IBSS beacons received count. - if (pMgmt->sNodeDBTable[0].uInActiveCount != 0) - pMgmt->sNodeDBTable[0].uInActiveCount = 0; - - // adhoc mode:TSF updated only when beacon larger then local TSF - if (bTSFLargeDiff && bTSFOffsetPostive && - (pMgmt->eCurrState == WMAC_STATE_JOINTED)) - bUpdateTSF = true; - - // During dpc, already in spinlocked. - if (BSSbIsSTAInNodeDB(pDevice, sFrame.pHdr->sA3.abyAddr2, &uNodeIndex)) { - - // Update the STA, (Technically the Beacons of all the IBSS nodes - // should be identical, but that's not happening in practice. - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - NULL, - true, - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopOFDMBasicRate) - ); - pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].bShortSlotTime = WLAN_GET_CAP_INFO_SHORTSLOTTIME(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].uInActiveCount = 0; - } - else { - /* Todo, initial Node content */ - BSSvCreateOneNode(pDevice, &uNodeIndex); - - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - NULL, - true, - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].wSuppRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[uNodeIndex].byTopOFDMBasicRate) - ); - - memcpy(pMgmt->sNodeDBTable[uNodeIndex].abyMACAddr, sFrame.pHdr->sA3.abyAddr2, WLAN_ADDR_LEN); - pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo); - pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; -/* - pMgmt->sNodeDBTable[uNodeIndex].bShortSlotTime = WLAN_GET_CAP_INFO_SHORTSLOTTIME(*sFrame.pwCapInfo); - if(pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate > RATE_11M) - pMgmt->sNodeDBTable[uNodeIndex].bERPExist = true; -*/ - } - - // if other stations jointed, indicate connect to upper layer.. - if (pMgmt->eCurrState == WMAC_STATE_STARTED) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Current IBSS State: [Started]........to: [Jointed] \n"); - pMgmt->eCurrState = WMAC_STATE_JOINTED; - pDevice->bLinkPass = true; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - if (netif_queue_stopped(pDevice->dev)){ - netif_wake_queue(pDevice->dev); - } - pMgmt->sNodeDBTable[0].bActive = true; - pMgmt->sNodeDBTable[0].uInActiveCount = 0; - - } - } - else if (bIsSSIDEqual) { - - // See other adhoc sta with the same SSID but BSSID is different. - // adpot this vars only when TSF larger then us. - if (bTSFLargeDiff && bTSFOffsetPostive) { - // we don't support ATIM under adhoc mode - // if ( sFrame.pIBSSParms->wATIMWindow == 0) { - // adpot this vars - // TODO: check sFrame cap if privacy on, and support rate syn - memcpy(pMgmt->abyCurrBSSID, sFrame.pHdr->sA3.abyAddr3, WLAN_BSSID_LEN); - memcpy(pDevice->abyBSSID, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - pMgmt->wCurrATIMWindow = cpu_to_le16(sFrame.pIBSSParms->wATIMWindow); - pMgmt->wCurrBeaconPeriod = cpu_to_le16(*sFrame.pwBeaconInterval); - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - WLAN_RATES_MAXLEN_11B); - // set HW beacon interval and re-synchronizing.... - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rejoining to Other Adhoc group with same SSID........\n"); - - vnt_mac_set_beacon_interval(pDevice, pMgmt->wCurrBeaconPeriod); - vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp, pRxPacket->qwLocalTSF); - vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); - - // Turn off bssid filter to avoid filter others adhoc station which bssid is different. - vnt_mac_set_bssid_addr(pDevice, pMgmt->abyCurrBSSID); - - byOldPreambleType = pDevice->byPreambleType; - if (WLAN_GET_CAP_INFO_SHORTPREAMBLE(*sFrame.pwCapInfo)) { - pDevice->byPreambleType = pDevice->byShortPreamble; - } - else { - pDevice->byPreambleType = 0; - } - if (pDevice->byPreambleType != byOldPreambleType) - vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); - - // set highest basic rate - // s_vSetHighestBasicRate(pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates); - // Prepare beacon frame - bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); - // } - } - } - } - // endian issue ??? - // Update TSF - if (bUpdateTSF) { - vnt_get_current_tsf(pDevice, &qwCurrTSF); - vnt_adjust_tsf(pDevice, pRxPacket->byRxRate, qwTimestamp , pRxPacket->qwLocalTSF); - vnt_get_current_tsf(pDevice, &qwCurrTSF); - vnt_update_next_tbtt(pDevice, qwTimestamp, pMgmt->wCurrBeaconPeriod); - } - - return; -} - -/*+ - * - * Routine Description: - * Instructs the hw to create a bss using the supplied - * attributes. Note that this implementation only supports Ad-Hoc - * BSS creation. - * - * - * Return Value: - * CMD_STATUS - * --*/ - -void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u16 wMaxBasicRate; - u16 wMaxSuppRate; - u8 byTopCCKBasicRate; - u8 byTopOFDMBasicRate; - u64 qwCurrTSF = 0; - int ii; - u8 abyRATE[] = {0x82, 0x84, 0x8B, 0x96, 0x24, 0x30, 0x48, 0x6C, 0x0C, - 0x12, 0x18, 0x60}; - u8 abyCCK_RATE[] = {0x82, 0x84, 0x8B, 0x96}; - u8 abyOFDM_RATE[] = {0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; - u16 wSuppRate; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Create Basic Service Set .......\n"); - - if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA) { - if ((pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) && - (pDevice->eEncryptionStatus != Ndis802_11Encryption2Enabled) && - (pDevice->eEncryptionStatus != Ndis802_11Encryption3Enabled)) { - // encryption mode error - *pStatus = CMD_STATUS_FAILURE; - return; - } - } - - pMgmt->abyCurrSuppRates[0] = WLAN_EID_SUPP_RATES; - pMgmt->abyCurrExtSuppRates[0] = WLAN_EID_EXTSUPP_RATES; - - if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - pMgmt->eCurrentPHYMode = pMgmt->byAPBBType; - } else { - if (pDevice->byBBType == BB_TYPE_11G) - pMgmt->eCurrentPHYMode = PHY_TYPE_11G; - if (pDevice->byBBType == BB_TYPE_11B) - pMgmt->eCurrentPHYMode = PHY_TYPE_11B; - if (pDevice->byBBType == BB_TYPE_11A) - pMgmt->eCurrentPHYMode = PHY_TYPE_11A; - } - - if (pMgmt->eCurrentPHYMode != PHY_TYPE_11A) { - pMgmt->abyCurrSuppRates[1] = WLAN_RATES_MAXLEN_11B; - pMgmt->abyCurrExtSuppRates[1] = 0; - for (ii = 0; ii < 4; ii++) - pMgmt->abyCurrSuppRates[2+ii] = abyRATE[ii]; - } else { - pMgmt->abyCurrSuppRates[1] = 8; - pMgmt->abyCurrExtSuppRates[1] = 0; - for (ii = 0; ii < 8; ii++) - pMgmt->abyCurrSuppRates[2+ii] = abyRATE[ii]; - } - - if (pMgmt->eCurrentPHYMode == PHY_TYPE_11G) { - pMgmt->abyCurrSuppRates[1] = 8; - pMgmt->abyCurrExtSuppRates[1] = 4; - for (ii = 0; ii < 4; ii++) - pMgmt->abyCurrSuppRates[2+ii] = abyCCK_RATE[ii]; - for (ii = 4; ii < 8; ii++) - pMgmt->abyCurrSuppRates[2+ii] = abyOFDM_RATE[ii-4]; - for (ii = 0; ii < 4; ii++) - pMgmt->abyCurrExtSuppRates[2+ii] = abyOFDM_RATE[ii+4]; - } - - // Disable Protect Mode - pDevice->bProtectMode = 0; - vnt_mac_disable_protect_mode(pDevice); - - pDevice->bBarkerPreambleMd = 0; - vnt_mac_disable_barker_preamble_mode(pDevice); - - // Kyle Test 2003.11.04 - - // set HW beacon interval - if (pMgmt->wIBSSBeaconPeriod == 0) - pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; - vnt_mac_set_beacon_interval(pDevice, pMgmt->wIBSSBeaconPeriod); - - vnt_get_current_tsf(pDevice, &qwCurrTSF); - // clear TSF counter - vnt_clear_current_tsf(pDevice); - - // enable TSF counter - vnt_mac_reg_bits_on(pDevice, MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); - // set Next TBTT - vnt_reset_next_tbtt(pDevice, pMgmt->wIBSSBeaconPeriod); - - pMgmt->uIBSSChannel = pDevice->uChannel; - - if (pMgmt->uIBSSChannel == 0) - pMgmt->uIBSSChannel = DEFAULT_IBSS_CHANNEL; - - // set channel and clear NAV - vnt_set_channel(pDevice, pMgmt->uIBSSChannel); - pMgmt->uCurrChannel = pMgmt->uIBSSChannel; - - pDevice->byPreambleType = pDevice->byShortPreamble; - - // set basic rate - - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, true, - &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, - &byTopCCKBasicRate, &byTopOFDMBasicRate); - - if (pDevice->byBBType == BB_TYPE_11A) { - pDevice->bShortSlotTime = true; - } else { - pDevice->bShortSlotTime = false; - } - BBvSetShortSlotTime(pDevice); - // vUpdateIFS() use pDevice->bShortSlotTime as parameter so it must be called - // after setting ShortSlotTime. - // CARDvSetBSSMode call vUpdateIFS() - vnt_set_bss_mode(pDevice); - - if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_AP); - pMgmt->eCurrMode = WMAC_MODE_ESS_AP; - } - - if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA) { - vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); - pMgmt->eCurrMode = WMAC_MODE_IBSS_STA; - } - - // Adopt pre-configured IBSS vars to current vars - pMgmt->eCurrState = WMAC_STATE_STARTED; - pMgmt->wCurrBeaconPeriod = pMgmt->wIBSSBeaconPeriod; - pMgmt->uCurrChannel = pMgmt->uIBSSChannel; - pMgmt->wCurrATIMWindow = pMgmt->wIBSSATIMWindow; - pDevice->uCurrRSSI = 0; - pDevice->byCurrSQ = 0; - - memcpy(pMgmt->abyDesireSSID,pMgmt->abyAdHocSSID, - ((PWLAN_IE_SSID)pMgmt->abyAdHocSSID)->len + WLAN_IEHDR_LEN); - - memset(pMgmt->abyCurrSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - memcpy(pMgmt->abyCurrSSID, - pMgmt->abyDesireSSID, - ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->len + WLAN_IEHDR_LEN - ); - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - // AP mode BSSID = MAC addr - memcpy(pMgmt->abyCurrBSSID, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO"AP beacon created BSSID:" - "%pM\n", pMgmt->abyCurrBSSID); - } - - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - - // BSSID selected must be randomized as spec 11.1.3 - pMgmt->abyCurrBSSID[5] = (u8)(qwCurrTSF & 0x000000ff); - pMgmt->abyCurrBSSID[4] = (u8)((qwCurrTSF & 0x0000ff00) >> 8); - pMgmt->abyCurrBSSID[3] = (u8)((qwCurrTSF & 0x00ff0000) >> 16); - pMgmt->abyCurrBSSID[2] = (u8)((qwCurrTSF & 0x00000ff0) >> 4); - pMgmt->abyCurrBSSID[1] = (u8)((qwCurrTSF & 0x000ff000) >> 12); - pMgmt->abyCurrBSSID[0] = (u8)((qwCurrTSF & 0x0ff00000) >> 20); - pMgmt->abyCurrBSSID[5] ^= pMgmt->abyMACAddr[0]; - pMgmt->abyCurrBSSID[4] ^= pMgmt->abyMACAddr[1]; - pMgmt->abyCurrBSSID[3] ^= pMgmt->abyMACAddr[2]; - pMgmt->abyCurrBSSID[2] ^= pMgmt->abyMACAddr[3]; - pMgmt->abyCurrBSSID[1] ^= pMgmt->abyMACAddr[4]; - pMgmt->abyCurrBSSID[0] ^= pMgmt->abyMACAddr[5]; - pMgmt->abyCurrBSSID[0] &= ~IEEE_ADDR_GROUP; - pMgmt->abyCurrBSSID[0] |= IEEE_ADDR_UNIVERSAL; - - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO"Adhoc beacon created bssid:" - "%pM\n", pMgmt->abyCurrBSSID); - } - - // set BSSID filter - vnt_mac_set_bssid_addr(pDevice, pMgmt->abyCurrBSSID); - memcpy(pDevice->abyBSSID, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); - - vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); - pDevice->byRxMode |= RCR_BSSID; - pMgmt->bCurrBSSIDFilterOn = true; - - // Set Capability Info - pMgmt->wCurrCapInfo = 0; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_ESS(1); - pMgmt->byDTIMPeriod = DEFAULT_DTIM_PERIOD; - pMgmt->byDTIMCount = pMgmt->byDTIMPeriod - 1; - pDevice->op_mode = NL80211_IFTYPE_AP; - } - - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_IBSS(1); - pDevice->op_mode = NL80211_IFTYPE_ADHOC; - } - - if (pDevice->bEncryptionEnable) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_PRIVACY(1); - if (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) { - if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) { - pMgmt->byCSSPK = KEY_CTL_CCMP; - pMgmt->byCSSGK = KEY_CTL_CCMP; - } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) { - pMgmt->byCSSPK = KEY_CTL_TKIP; - pMgmt->byCSSGK = KEY_CTL_TKIP; - } else { - pMgmt->byCSSPK = KEY_CTL_NONE; - pMgmt->byCSSGK = KEY_CTL_WEP; - } - } else { - pMgmt->byCSSPK = KEY_CTL_WEP; - pMgmt->byCSSGK = KEY_CTL_WEP; - } - } - - pMgmt->byERPContext = 0; - - if (pDevice->byPreambleType == 1) { - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_SHORTPREAMBLE(1); - } else { - pMgmt->wCurrCapInfo &= (~WLAN_SET_CAP_INFO_SHORTPREAMBLE(1)); - } - - pMgmt->eCurrState = WMAC_STATE_STARTED; - // Prepare beacon to send - if (bMgrPrepareBeaconToSend((void *) pDevice, pMgmt)) - *pStatus = CMD_STATUS_SUCCESS; - - return; -} - -/*+ - * - * Routine Description: - * Instructs wmac to join a bss using the supplied attributes. - * The arguments may the BSSID or SSID and the rest of the - * attributes are obtained from the scan result of known bss list. - * - * - * Return Value: - * None. - * --*/ - -void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PKnownBSS pCurr = NULL; - int ii, uu; - PWLAN_IE_SUPP_RATES pItemRates = NULL; - PWLAN_IE_SUPP_RATES pItemExtRates = NULL; - PWLAN_IE_SSID pItemSSID; - u32 uRateLen = WLAN_RATES_MAXLEN; - u16 wMaxBasicRate = RATE_1M; - u16 wMaxSuppRate = RATE_1M; - u16 wSuppRate; - u8 byTopCCKBasicRate = RATE_1M; - u8 byTopOFDMBasicRate = RATE_1M; - u8 bShortSlotTime = false; - - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - if (pMgmt->sBSSList[ii].bActive == true) - break; - } - - if (ii == MAX_BSS_NUM) { - *pStatus = CMD_STATUS_RESOURCES; - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "BSS finding:BSS list is empty.\n"); - return; - } - - // memset(pMgmt->abyDesireBSSID, 0, WLAN_BSSID_LEN); - // Search known BSS list for prefer BSSID or SSID - - pCurr = BSSpSearchBSSList(pDevice, - pMgmt->abyDesireBSSID, - pMgmt->abyDesireSSID, - pDevice->eConfigPHYMode - ); - - if (pCurr == NULL){ - *pStatus = CMD_STATUS_RESOURCES; - pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID; - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Scanning [%s] not found, disconnected !\n", pItemSSID->abySSID); - return; - } - - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "AP(BSS) finding:Found a AP(BSS)..\n"); - - if (WLAN_GET_CAP_INFO_ESS(cpu_to_le16(pCurr->wCapInfo))){ - - if ((pMgmt->eAuthenMode == WMAC_AUTH_WPA) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK)) { - /* - if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) { - if (WPA_SearchRSN(0, WPA_TKIP, pCurr) == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"No match RSN info. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); - // encryption mode error - pMgmt->eCurrState = WMAC_STATE_IDLE; - return; - } - } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) { - if (WPA_SearchRSN(0, WPA_AESCCMP, pCurr) == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"No match RSN info. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); - // encryption mode error - pMgmt->eCurrState = WMAC_STATE_IDLE; - return; - } - } -*/ - } - - //if(pDevice->bWPASuppWextEnabled == true) - Encyption_Rebuild(pDevice, pCurr); - - // Infrastructure BSS - s_vMgrSynchBSS(pDevice, - WMAC_MODE_ESS_STA, - pCurr, - pStatus - ); - - if (*pStatus == CMD_STATUS_SUCCESS){ - - // Adopt this BSS state vars in Mgmt Object - pMgmt->uCurrChannel = pCurr->uChannel; - - memset(pMgmt->abyCurrSuppRates, 0 , WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - memset(pMgmt->abyCurrExtSuppRates, 0 , WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - - if (pCurr->eNetworkTypeInUse == PHY_TYPE_11B) { - uRateLen = WLAN_RATES_MAXLEN_11B; - } - - pItemRates = (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates; - pItemExtRates = (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates; - - // Parse Support Rate IE - pItemRates->byElementID = WLAN_EID_SUPP_RATES; - pItemRates->len = RATEuSetIE((PWLAN_IE_SUPP_RATES)pCurr->abySuppRates, - pItemRates, - uRateLen); - - // Parse Extension Support Rate IE - pItemExtRates->byElementID = WLAN_EID_EXTSUPP_RATES; - pItemExtRates->len = RATEuSetIE((PWLAN_IE_SUPP_RATES)pCurr->abyExtSuppRates, - pItemExtRates, - uRateLen); - // Stuffing Rate IE - if ((pItemExtRates->len > 0) && (pItemRates->len < 8)) { - for (ii = 0; ii < (unsigned int) (8 - pItemRates->len); ) { - pItemRates->abyRates[pItemRates->len + ii] = - pItemExtRates->abyRates[ii]; - ii++; - if (pItemExtRates->len <= ii) - break; - } - pItemRates->len += (u8)ii; - if (pItemExtRates->len - ii > 0) { - pItemExtRates->len -= (u8)ii; - for (uu = 0; uu < pItemExtRates->len; uu ++) { - pItemExtRates->abyRates[uu] = pItemExtRates->abyRates[uu + ii]; - } - } else { - pItemExtRates->len = 0; - } - } - - RATEvParseMaxRate((void *)pDevice, pItemRates, pItemExtRates, true, - &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, - &byTopCCKBasicRate, &byTopOFDMBasicRate); - - vnt_update_ifs(pDevice); - // TODO: deal with if wCapInfo the privacy is on, but station WEP is off - // TODO: deal with if wCapInfo the PS-Pollable is on. - pMgmt->wCurrBeaconPeriod = pCurr->wBeaconInterval; - memset(pMgmt->abyCurrSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - memcpy(pMgmt->abyCurrBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); - memcpy(pMgmt->abyCurrSSID, pCurr->abySSID, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - - pMgmt->eCurrMode = WMAC_MODE_ESS_STA; - - pMgmt->eCurrState = WMAC_STATE_JOINTED; - // Adopt BSS state in Adapter Device Object - pDevice->op_mode = NL80211_IFTYPE_STATION; - memcpy(pDevice->abyBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); - - // Add current BSS to Candidate list - // This should only work for WPA2 BSS, and WPA2 BSS check must be done before. - if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) { - 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((void *) pDevice); - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "vFlush_PMKID_Candidate: 4\n"); - bAdd_PMKID_Candidate((void *) pDevice, - pMgmt->abyCurrBSSID, - &pCurr->sRSNCapObj); - } - } - - // Preamble type auto-switch: if AP can receive short-preamble cap, - // we can turn on too. - if (WLAN_GET_CAP_INFO_SHORTPREAMBLE(pCurr->wCapInfo)) { - pDevice->byPreambleType = pDevice->byShortPreamble; - } - else { - pDevice->byPreambleType = 0; - } - // Change PreambleType must set RSPINF again - vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Join ESS\n"); - - if (pCurr->eNetworkTypeInUse == PHY_TYPE_11G) { - - if ((pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION) != pDevice->bProtectMode) {//0000 0010 - pDevice->bProtectMode = (pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); - if (pDevice->bProtectMode) { - vnt_mac_enable_protect_mode(pDevice); - } else { - vnt_mac_disable_protect_mode(pDevice); - } - vnt_update_ifs(pDevice); - } - if ((pCurr->sERP.byERP & WLAN_EID_ERP_NONERP_PRESENT) != pDevice->bNonERPPresent) {//0000 0001 - pDevice->bNonERPPresent = (pCurr->sERP.byERP & WLAN_EID_ERP_USE_PROTECTION); - } - if ((pCurr->sERP.byERP & WLAN_EID_ERP_BARKER_MODE) != pDevice->bBarkerPreambleMd) {//0000 0100 - pDevice->bBarkerPreambleMd = (pCurr->sERP.byERP & WLAN_EID_ERP_BARKER_MODE); - //BarkerPreambleMd has higher priority than shortPreamble bit in Cap - if (pDevice->bBarkerPreambleMd) { - vnt_mac_enable_barker_preamble_mode(pDevice); - } else { - vnt_mac_disable_barker_preamble_mode(pDevice); - } - } - } - //DBG_PRN_WLAN05(("wCapInfo: %X\n", pCurr->wCapInfo)); - if (WLAN_GET_CAP_INFO_SHORTSLOTTIME(pCurr->wCapInfo) != pDevice->bShortSlotTime) { - if (pDevice->byBBType == BB_TYPE_11A) { - bShortSlotTime = true; - } - else if (pDevice->byBBType == BB_TYPE_11B) { - bShortSlotTime = false; - } - else { - bShortSlotTime = WLAN_GET_CAP_INFO_SHORTSLOTTIME(pCurr->wCapInfo); - } - //DBG_PRN_WLAN05(("Set Short Slot Time: %d\n", pDevice->bShortSlotTime)); - if (bShortSlotTime != pDevice->bShortSlotTime) { - pDevice->bShortSlotTime = bShortSlotTime; - BBvSetShortSlotTime(pDevice); - vnt_update_ifs(pDevice); - } - } - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"End of Join AP -- A/B/G Action\n"); - } - else { - pMgmt->eCurrState = WMAC_STATE_IDLE; - }; - - } - else { - // ad-hoc mode BSS - if (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) { - - if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) { -/* - if (WPA_SearchRSN(0, WPA_TKIP, pCurr) == false) { - // encryption mode error - pMgmt->eCurrState = WMAC_STATE_IDLE; - return; - } -*/ - } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) { -/* - if (WPA_SearchRSN(0, WPA_AESCCMP, pCurr) == false) { - // encryption mode error - pMgmt->eCurrState = WMAC_STATE_IDLE; - return; - } -*/ - } else { - // encryption mode error - pMgmt->eCurrState = WMAC_STATE_IDLE; - return; - } - } - - s_vMgrSynchBSS(pDevice, - WMAC_MODE_IBSS_STA, - pCurr, - pStatus - ); - - if (*pStatus == CMD_STATUS_SUCCESS){ - // Adopt this BSS state vars in Mgmt Object - // TODO: check if CapInfo privacy on, but we don't.. - pMgmt->uCurrChannel = pCurr->uChannel; - - // Parse Support Rate IE - pMgmt->abyCurrSuppRates[0] = WLAN_EID_SUPP_RATES; - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pCurr->abySuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - WLAN_RATES_MAXLEN_11B); - // set basic rate - RATEvParseMaxRate((void *)pDevice, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - NULL, true, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, - &byTopCCKBasicRate, &byTopOFDMBasicRate); - vnt_update_ifs(pDevice); - pMgmt->wCurrCapInfo = pCurr->wCapInfo; - pMgmt->wCurrBeaconPeriod = pCurr->wBeaconInterval; - memset(pMgmt->abyCurrSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN); - memcpy(pMgmt->abyCurrBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); - memcpy(pMgmt->abyCurrSSID, pCurr->abySSID, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN); -// pMgmt->wCurrATIMWindow = pCurr->wATIMWindow; - pMgmt->eCurrMode = WMAC_MODE_IBSS_STA; - pMgmt->eCurrState = WMAC_STATE_STARTED; - // Adopt BSS state in Adapter Device Object - pDevice->op_mode = NL80211_IFTYPE_ADHOC; - pDevice->bLinkPass = true; - - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_INTER); - - memcpy(pDevice->abyBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Join IBSS ok:%pM\n", - pMgmt->abyCurrBSSID); - // Preamble type auto-switch: if AP can receive short-preamble cap, - // and if registry setting is short preamble we can turn on too. - - if (WLAN_GET_CAP_INFO_SHORTPREAMBLE(pCurr->wCapInfo)) { - pDevice->byPreambleType = pDevice->byShortPreamble; - } - else { - pDevice->byPreambleType = 0; - } - // Change PreambleType must set RSPINF again - vnt_set_rspinf(pDevice, (u8)pDevice->byBBType); - - // Prepare beacon - bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); - } - else { - pMgmt->eCurrState = WMAC_STATE_IDLE; - }; - }; - return; -} - -/*+ - * - * Routine Description: - * Set HW to synchronize a specific BSS from known BSS list. - * - * - * Return Value: - * PCM_STATUS - * --*/ -static void s_vMgrSynchBSS(struct vnt_private *pDevice, u32 uBSSMode, - PKnownBSS pCurr, PCMD_STATUS pStatus) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u8 abyCurrSuppRatesG[] = {WLAN_EID_SUPP_RATES, - 8, 0x02, 0x04, 0x0B, 0x16, 0x24, 0x30, 0x48, 0x6C}; - /* 1M, 2M, 5M, 11M, 18M, 24M, 36M, 54M*/ - u8 abyCurrExtSuppRatesG[] = {WLAN_EID_EXTSUPP_RATES, - 4, 0x0C, 0x12, 0x18, 0x60}; - /* 6M, 9M, 12M, 48M*/ - u8 abyCurrSuppRatesA[] = {WLAN_EID_SUPP_RATES, - 8, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; - u8 abyCurrSuppRatesB[] = {WLAN_EID_SUPP_RATES, - 4, 0x02, 0x04, 0x0B, 0x16}; - - *pStatus = CMD_STATUS_FAILURE; - - if (s_bCipherMatch(pCurr, - pDevice->eEncryptionStatus, - &(pMgmt->byCSSPK), - &(pMgmt->byCSSGK)) == false) { - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "s_bCipherMatch Fail .......\n"); - return; - } - - pMgmt->pCurrBSS = pCurr; - - // if previous mode is IBSS. - if(pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - vnt_mac_reg_bits_off(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); - } - - // Init the BSS informations - pDevice->bProtectMode = false; - vnt_mac_disable_protect_mode(pDevice); - pDevice->bBarkerPreambleMd = false; - vnt_mac_disable_barker_preamble_mode(pDevice); - pDevice->bNonERPPresent = false; - pDevice->byPreambleType = 0; - pDevice->wBasicRate = 0; - // Set Basic Rate - vnt_add_basic_rate(pDevice, RATE_1M); - - // calculate TSF offset - // TSF Offset = Received Timestamp TSF - Marked Local's TSF - vnt_adjust_tsf(pDevice, pCurr->byRxRate, pCurr->qwBSSTimestamp, pCurr->qwLocalTSF); - - // set HW beacon interval - vnt_mac_set_beacon_interval(pDevice, pCurr->wBeaconInterval); - - // set Next TBTT - // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval - vnt_reset_next_tbtt(pDevice, pCurr->wBeaconInterval); - - // set BSSID - vnt_mac_set_bssid_addr(pDevice, pCurr->abyBSSID); - - memcpy(pMgmt->abyCurrBSSID, pCurr->abyBSSID, 6); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Sync:set CurrBSSID address = " - "%pM\n", pMgmt->abyCurrBSSID); - - if (pCurr->eNetworkTypeInUse == PHY_TYPE_11A) { - if ((pDevice->eConfigPHYMode == PHY_TYPE_11A) || - (pDevice->eConfigPHYMode == PHY_TYPE_AUTO)) { - pDevice->byBBType = BB_TYPE_11A; - pMgmt->eCurrentPHYMode = PHY_TYPE_11A; - pDevice->bShortSlotTime = true; - BBvSetShortSlotTime(pDevice); - vnt_set_bss_mode(pDevice); - } else { - return; - } - } else if (pCurr->eNetworkTypeInUse == PHY_TYPE_11B) { - if ((pDevice->eConfigPHYMode == PHY_TYPE_11B) || - (pDevice->eConfigPHYMode == PHY_TYPE_11G) || - (pDevice->eConfigPHYMode == PHY_TYPE_AUTO)) { - pDevice->byBBType = BB_TYPE_11B; - pMgmt->eCurrentPHYMode = PHY_TYPE_11B; - pDevice->bShortSlotTime = false; - BBvSetShortSlotTime(pDevice); - vnt_set_bss_mode(pDevice); - } else { - return; - } - } else { - if ((pDevice->eConfigPHYMode == PHY_TYPE_11G) || - (pDevice->eConfigPHYMode == PHY_TYPE_AUTO)) { - pDevice->byBBType = BB_TYPE_11G; - pMgmt->eCurrentPHYMode = PHY_TYPE_11G; - pDevice->bShortSlotTime = true; - BBvSetShortSlotTime(pDevice); - vnt_set_bss_mode(pDevice); - } else if (pDevice->eConfigPHYMode == PHY_TYPE_11B) { - pDevice->byBBType = BB_TYPE_11B; - pDevice->bShortSlotTime = false; - BBvSetShortSlotTime(pDevice); - vnt_set_bss_mode(pDevice); - } else { - return; - } - } - - if (uBSSMode == WMAC_MODE_ESS_STA) { - vnt_mac_reg_bits_off(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); - vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); - pDevice->byRxMode |= RCR_BSSID; - pMgmt->bCurrBSSIDFilterOn = true; - } - - // set channel and clear NAV - vnt_set_channel(pDevice, pCurr->uChannel); - pMgmt->uCurrChannel = pCurr->uChannel; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "<----s_bSynchBSS Set Channel [%d]\n", pCurr->uChannel); - - if (pDevice->byBBVGACurrent != pDevice->abyBBVGA[0]) { - pDevice->byBBVGACurrent = pDevice->abyBBVGA[0]; - BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent); - BBvSetShortSlotTime(pDevice); - } - // - // Notes: - // 1. In Ad-hoc mode : check if received others beacon as jointed indication, - // otherwise we will start own IBSS. - // 2. In Infra mode : Supposed we already synchronized with AP right now. - - if (uBSSMode == WMAC_MODE_IBSS_STA) { - vnt_mac_reg_bits_on(pDevice, MAC_REG_HOSTCR, HOSTCR_ADHOC); - vnt_mac_reg_bits_on(pDevice, MAC_REG_RCR, RCR_BSSID); - pDevice->byRxMode |= RCR_BSSID; - pMgmt->bCurrBSSIDFilterOn = true; - } - - if (pDevice->byBBType == BB_TYPE_11A) { - memcpy(pMgmt->abyCurrSuppRates, &abyCurrSuppRatesA[0], sizeof(abyCurrSuppRatesA)); - pMgmt->abyCurrExtSuppRates[1] = 0; - } else if (pDevice->byBBType == BB_TYPE_11B) { - memcpy(pMgmt->abyCurrSuppRates, &abyCurrSuppRatesB[0], sizeof(abyCurrSuppRatesB)); - pMgmt->abyCurrExtSuppRates[1] = 0; - } else { - memcpy(pMgmt->abyCurrSuppRates, &abyCurrSuppRatesG[0], sizeof(abyCurrSuppRatesG)); - memcpy(pMgmt->abyCurrExtSuppRates, &abyCurrExtSuppRatesG[0], sizeof(abyCurrExtSuppRatesG)); - } - pMgmt->byERPContext = pCurr->sERP.byERP; - - *pStatus = CMD_STATUS_SUCCESS; - - return; -}; - -static void Encyption_Rebuild(struct vnt_private *pDevice, PKnownBSS pCurr) - { - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - if ((pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) { - if (pCurr->bWPAValid == true) { /*WPA-PSK */ - pMgmt->eAuthenMode = WMAC_AUTH_WPAPSK; - if(pCurr->abyPKType[0] == WPA_TKIP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled; //TKIP - PRINT_K("Encyption_Rebuild--->ssid reset config to [WPAPSK-TKIP]\n"); - } - else if(pCurr->abyPKType[0] == WPA_AESCCMP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled; //AES - PRINT_K("Encyption_Rebuild--->ssid reset config to [WPAPSK-AES]\n"); - } - } - else if(pCurr->bWPA2Valid == true) { //WPA2-PSK - pMgmt->eAuthenMode = WMAC_AUTH_WPA2PSK; - if(pCurr->abyCSSPK[0] == WLAN_11i_CSS_TKIP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled; //TKIP - PRINT_K("Encyption_Rebuild--->ssid reset config to [WPA2PSK-TKIP]\n"); - } - else if(pCurr->abyCSSPK[0] == WLAN_11i_CSS_CCMP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled; //AES - PRINT_K("Encyption_Rebuild--->ssid reset config to [WPA2PSK-AES]\n"); - } - } - } - // } - return; - } - -/*+ - * - * Routine Description: - * Format TIM field - * - * - * Return Value: - * void - * --*/ - -static void s_vMgrFormatTIM(struct vnt_manager *pMgmt, PWLAN_IE_TIM pTIM) -{ - u8 byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; - u8 byMap; - int ii, jj; - int bStartFound = false; - int bMulticast = false; - u16 wStartIndex = 0; - u16 wEndIndex = 0; - - // Find size of partial virtual bitmap - for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) { - byMap = pMgmt->abyPSTxMap[ii]; - if (!ii) { - // Mask out the broadcast bit which is indicated separately. - bMulticast = (byMap & byMask[0]) != 0; - if(bMulticast) { - pMgmt->sNodeDBTable[0].bRxPSPoll = true; - } - byMap = 0; - } - if (byMap) { - if (!bStartFound) { - bStartFound = true; - wStartIndex = (u16)ii; - } - wEndIndex = (u16)ii; - } - } - - // Round start index down to nearest even number - wStartIndex &= ~BIT0; - - // Round end index up to nearest even number - wEndIndex = ((wEndIndex + 1) & ~BIT0); - - // Size of element payload - - pTIM->len = 3 + (wEndIndex - wStartIndex) + 1; - - // Fill in the Fixed parts of the TIM - pTIM->byDTIMCount = pMgmt->byDTIMCount; - pTIM->byDTIMPeriod = pMgmt->byDTIMPeriod; - pTIM->byBitMapCtl = (bMulticast ? TIM_MULTICAST_MASK : 0) | - (((wStartIndex >> 1) << 1) & TIM_BITMAPOFFSET_MASK); - - // Append variable part of TIM - - for (ii = wStartIndex, jj =0 ; ii <= wEndIndex; ii++, jj++) { - pTIM->byVirtBitMap[jj] = pMgmt->abyPSTxMap[ii]; - } - - // Aid = 0 don't used. - pTIM->byVirtBitMap[0] &= ~BIT0; -} - -/*+ - * - * Routine Description: - * Constructs an Beacon frame( Ad-hoc mode) - * - * - * Return Value: - * PTR to frame; or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeBeacon(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wCurrBeaconPeriod, - u32 uCurrChannel, u16 wCurrATIMWinodw, PWLAN_IE_SSID pCurrSSID, - u8 *pCurrBSSID, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_BEACON sFrame; - u8 abyBroadcastAddr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - - /* prepare beacon frame */ - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_BEACON_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - // Setup the sFrame structure. - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_BEACON_FR_MAXLEN; - vMgrEncodeBeacon(&sFrame); - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_BEACON) - )); - - if (pDevice->bEnablePSMode) { - sFrame.pHdr->sA3.wFrameCtl |= cpu_to_le16((u16)WLAN_SET_FC_PWRMGT(1)); - } - - memcpy( sFrame.pHdr->sA3.abyAddr1, abyBroadcastAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pCurrBSSID, WLAN_BSSID_LEN); - *sFrame.pwBeaconInterval = cpu_to_le16(wCurrBeaconPeriod); - *sFrame.pwCapInfo = cpu_to_le16(wCurrCapInfo); - // Copy SSID - sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSSID, - pCurrSSID, - ((PWLAN_IE_SSID)pCurrSSID)->len + WLAN_IEHDR_LEN - ); - // Copy the rate set - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, - pCurrSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN - ); - // DS parameter - if (pDevice->byBBType != BB_TYPE_11A) { - sFrame.pDSParms = (PWLAN_IE_DS_PARMS)(sFrame.pBuf + sFrame.len); - sFrame.len += (1) + WLAN_IEHDR_LEN; - sFrame.pDSParms->byElementID = WLAN_EID_DS_PARMS; - sFrame.pDSParms->len = 1; - sFrame.pDSParms->byCurrChannel = (u8)uCurrChannel; - } - // TIM field - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - sFrame.pTIM = (PWLAN_IE_TIM)(sFrame.pBuf + sFrame.len); - sFrame.pTIM->byElementID = WLAN_EID_TIM; - s_vMgrFormatTIM(pMgmt, sFrame.pTIM); - sFrame.len += (WLAN_IEHDR_LEN + sFrame.pTIM->len); - } - - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - - // IBSS parameter - sFrame.pIBSSParms = (PWLAN_IE_IBSS_PARMS)(sFrame.pBuf + sFrame.len); - sFrame.len += (2) + WLAN_IEHDR_LEN; - sFrame.pIBSSParms->byElementID = WLAN_EID_IBSS_PARMS; - sFrame.pIBSSParms->len = 2; - sFrame.pIBSSParms->wATIMWindow = wCurrATIMWinodw; - if (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE) { - /* RSN parameter */ - sFrame.pRSNWPA = (PWLAN_IE_RSN_EXT)(sFrame.pBuf + sFrame.len); - sFrame.pRSNWPA->byElementID = WLAN_EID_RSN_WPA; - sFrame.pRSNWPA->len = 12; - sFrame.pRSNWPA->abyOUI[0] = 0x00; - sFrame.pRSNWPA->abyOUI[1] = 0x50; - sFrame.pRSNWPA->abyOUI[2] = 0xf2; - sFrame.pRSNWPA->abyOUI[3] = 0x01; - sFrame.pRSNWPA->wVersion = 1; - sFrame.pRSNWPA->abyMulticast[0] = 0x00; - sFrame.pRSNWPA->abyMulticast[1] = 0x50; - sFrame.pRSNWPA->abyMulticast[2] = 0xf2; - if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) - sFrame.pRSNWPA->abyMulticast[3] = 0x04;//AES - else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) - sFrame.pRSNWPA->abyMulticast[3] = 0x02;//TKIP - else if (pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) - sFrame.pRSNWPA->abyMulticast[3] = 0x01;//WEP40 - else - sFrame.pRSNWPA->abyMulticast[3] = 0x00;//NONE - - // Pairwise Key Cipher Suite - sFrame.pRSNWPA->wPKCount = 0; - // Auth Key Management Suite - *((u16 *)(sFrame.pBuf + sFrame.len + sFrame.pRSNWPA->len))=0; - sFrame.pRSNWPA->len +=2; - - // RSN Capabilites - *((u16 *)(sFrame.pBuf + sFrame.len + sFrame.pRSNWPA->len))=0; - sFrame.pRSNWPA->len +=2; - sFrame.len += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - } - } - - if (pMgmt->eCurrentPHYMode == PHY_TYPE_11G) { - sFrame.pERP = (PWLAN_IE_ERP)(sFrame.pBuf + sFrame.len); - sFrame.len += 1 + WLAN_IEHDR_LEN; - sFrame.pERP->byElementID = WLAN_EID_ERP; - sFrame.pERP->len = 1; - sFrame.pERP->byContext = 0; - if (pDevice->bProtectMode == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_USE_PROTECTION; - if (pDevice->bNonERPPresent == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_NONERP_PRESENT; - if (pDevice->bBarkerPreambleMd == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_BARKER_MODE; - } - if (((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len != 0) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, - pCurrExtSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN - ); - } - - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Constructs an Prob-response frame - * - * - * Return Value: - * PTR to frame; or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeProbeResponse(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wCurrBeaconPeriod, - u32 uCurrChannel, u16 wCurrATIMWinodw, u8 *pDstAddr, - PWLAN_IE_SSID pCurrSSID, u8 *pCurrBSSID, - PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates, u8 byPHYType) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_PROBERESP sFrame; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_PROBERESP_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - // Setup the sFrame structure. - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_PROBERESP_FR_MAXLEN; - vMgrEncodeProbeResponse(&sFrame); - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_PROBERESP) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pDstAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pCurrBSSID, WLAN_BSSID_LEN); - *sFrame.pwBeaconInterval = cpu_to_le16(wCurrBeaconPeriod); - *sFrame.pwCapInfo = cpu_to_le16(wCurrCapInfo); - - if (byPHYType == BB_TYPE_11B) { - *sFrame.pwCapInfo &= cpu_to_le16((u16)~(WLAN_SET_CAP_INFO_SHORTSLOTTIME(1))); - } - - // Copy SSID - sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSSID, - pCurrSSID, - ((PWLAN_IE_SSID)pCurrSSID)->len + WLAN_IEHDR_LEN - ); - // Copy the rate set - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, - pCurrSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN - ); - - // DS parameter - if (pDevice->byBBType != BB_TYPE_11A) { - sFrame.pDSParms = (PWLAN_IE_DS_PARMS)(sFrame.pBuf + sFrame.len); - sFrame.len += (1) + WLAN_IEHDR_LEN; - sFrame.pDSParms->byElementID = WLAN_EID_DS_PARMS; - sFrame.pDSParms->len = 1; - sFrame.pDSParms->byCurrChannel = (u8)uCurrChannel; - } - - if (pMgmt->eCurrMode != WMAC_MODE_ESS_AP) { - // IBSS parameter - sFrame.pIBSSParms = (PWLAN_IE_IBSS_PARMS)(sFrame.pBuf + sFrame.len); - sFrame.len += (2) + WLAN_IEHDR_LEN; - sFrame.pIBSSParms->byElementID = WLAN_EID_IBSS_PARMS; - sFrame.pIBSSParms->len = 2; - sFrame.pIBSSParms->wATIMWindow = 0; - } - if (pDevice->byBBType == BB_TYPE_11G) { - sFrame.pERP = (PWLAN_IE_ERP)(sFrame.pBuf + sFrame.len); - sFrame.len += 1 + WLAN_IEHDR_LEN; - sFrame.pERP->byElementID = WLAN_EID_ERP; - sFrame.pERP->len = 1; - sFrame.pERP->byContext = 0; - if (pDevice->bProtectMode == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_USE_PROTECTION; - if (pDevice->bNonERPPresent == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_NONERP_PRESENT; - if (pDevice->bBarkerPreambleMd == true) - sFrame.pERP->byContext |= WLAN_EID_ERP_BARKER_MODE; - } - - if (((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len != 0) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, - pCurrExtSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN - ); - } - - // Adjust the length fields - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Constructs an association request frame - * - * - * Return Value: - * A ptr to frame or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeAssocRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u8 *pDAddr, u16 wCurrCapInfo, - u16 wListenInterval, - PWLAN_IE_SSID pCurrSSID, - PWLAN_IE_SUPP_RATES pCurrRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_ASSOCREQ sFrame; - u8 *pbyIEs; - u8 *pbyRSN; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_ASSOCREQ_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - // Setup the sFrame structure. - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_ASSOCREQ_FR_MAXLEN; - // format fixed field frame structure - vMgrEncodeAssocRequest(&sFrame); - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_ASSOCREQ) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pDAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - // Set the capability and listen interval - *(sFrame.pwCapInfo) = cpu_to_le16(wCurrCapInfo); - *(sFrame.pwListenInterval) = cpu_to_le16(wListenInterval); - - // sFrame.len point to end of fixed field - sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrSSID->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSSID, pCurrSSID, pCurrSSID->len + WLAN_IEHDR_LEN); - - pMgmt->sAssocInfo.AssocInfo.RequestIELength = pCurrSSID->len + WLAN_IEHDR_LEN; - pMgmt->sAssocInfo.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - pbyIEs = pMgmt->sAssocInfo.abyIEs; - memcpy(pbyIEs, pCurrSSID, pCurrSSID->len + WLAN_IEHDR_LEN); - pbyIEs += pCurrSSID->len + WLAN_IEHDR_LEN; - - // Copy the rate set - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - if ((pDevice->byBBType == BB_TYPE_11B) && (pCurrRates->len > 4)) - sFrame.len += 4 + WLAN_IEHDR_LEN; - else - sFrame.len += pCurrRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN); - - // Copy the extension rate set - if ((pDevice->byBBType == BB_TYPE_11G) && (pCurrExtSuppRates->len > 0)) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrExtSuppRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, pCurrExtSuppRates, pCurrExtSuppRates->len + WLAN_IEHDR_LEN); - } - - pMgmt->sAssocInfo.AssocInfo.RequestIELength += pCurrRates->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN); - pbyIEs += pCurrRates->len + WLAN_IEHDR_LEN; - - if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE)) && - (pMgmt->pCurrBSS != NULL)) { - /* WPA IE */ - sFrame.pRSNWPA = (PWLAN_IE_RSN_EXT)(sFrame.pBuf + sFrame.len); - sFrame.pRSNWPA->byElementID = WLAN_EID_RSN_WPA; - sFrame.pRSNWPA->len = 16; - sFrame.pRSNWPA->abyOUI[0] = 0x00; - sFrame.pRSNWPA->abyOUI[1] = 0x50; - sFrame.pRSNWPA->abyOUI[2] = 0xf2; - sFrame.pRSNWPA->abyOUI[3] = 0x01; - sFrame.pRSNWPA->wVersion = 1; - //Group Key Cipher Suite - sFrame.pRSNWPA->abyMulticast[0] = 0x00; - sFrame.pRSNWPA->abyMulticast[1] = 0x50; - sFrame.pRSNWPA->abyMulticast[2] = 0xf2; - if (pMgmt->byCSSGK == KEY_CTL_WEP) { - sFrame.pRSNWPA->abyMulticast[3] = pMgmt->pCurrBSS->byGKType; - } else if (pMgmt->byCSSGK == KEY_CTL_TKIP) { - sFrame.pRSNWPA->abyMulticast[3] = WPA_TKIP; - } else if (pMgmt->byCSSGK == KEY_CTL_CCMP) { - sFrame.pRSNWPA->abyMulticast[3] = WPA_AESCCMP; - } else { - sFrame.pRSNWPA->abyMulticast[3] = WPA_NONE; - } - // Pairwise Key Cipher Suite - sFrame.pRSNWPA->wPKCount = 1; - sFrame.pRSNWPA->PKSList[0].abyOUI[0] = 0x00; - sFrame.pRSNWPA->PKSList[0].abyOUI[1] = 0x50; - sFrame.pRSNWPA->PKSList[0].abyOUI[2] = 0xf2; - if (pMgmt->byCSSPK == KEY_CTL_TKIP) { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_TKIP; - } else if (pMgmt->byCSSPK == KEY_CTL_CCMP) { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_AESCCMP; - } else { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_NONE; - } - // Auth Key Management Suite - pbyRSN = (u8 *)(sFrame.pBuf + sFrame.len + 2 + sFrame.pRSNWPA->len); - *pbyRSN++=0x01; - *pbyRSN++=0x00; - *pbyRSN++=0x00; - - *pbyRSN++=0x50; - *pbyRSN++=0xf2; - if (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) { - *pbyRSN++=WPA_AUTH_PSK; - } - else if (pMgmt->eAuthenMode == WMAC_AUTH_WPA) { - *pbyRSN++=WPA_AUTH_IEEE802_1X; - } - else { - *pbyRSN++=WPA_NONE; - } - - sFrame.pRSNWPA->len +=6; - - // RSN Capabilites - - *pbyRSN++=0x00; - *pbyRSN++=0x00; - sFrame.pRSNWPA->len +=2; - - sFrame.len += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - // copy to AssocInfo. for OID_802_11_ASSOCIATION_INFORMATION - pMgmt->sAssocInfo.AssocInfo.RequestIELength += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, sFrame.pRSNWPA, sFrame.pRSNWPA->len + WLAN_IEHDR_LEN); - pbyIEs += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - - } else if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) && - (pMgmt->pCurrBSS != NULL)) { - unsigned int ii; - u16 * pwPMKID; - - // WPA IE - sFrame.pRSN = (PWLAN_IE_RSN)(sFrame.pBuf + sFrame.len); - sFrame.pRSN->byElementID = WLAN_EID_RSN; - sFrame.pRSN->len = 6; //Version(2)+GK(4) - sFrame.pRSN->wVersion = 1; - //Group Key Cipher Suite - sFrame.pRSN->abyRSN[0] = 0x00; - sFrame.pRSN->abyRSN[1] = 0x0F; - sFrame.pRSN->abyRSN[2] = 0xAC; - if (pMgmt->byCSSGK == KEY_CTL_WEP) { - sFrame.pRSN->abyRSN[3] = pMgmt->pCurrBSS->byCSSGK; - } else if (pMgmt->byCSSGK == KEY_CTL_TKIP) { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_TKIP; - } else if (pMgmt->byCSSGK == KEY_CTL_CCMP) { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_CCMP; - } else { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_UNKNOWN; - } - - // Pairwise Key Cipher Suite - sFrame.pRSN->abyRSN[4] = 1; - sFrame.pRSN->abyRSN[5] = 0; - sFrame.pRSN->abyRSN[6] = 0x00; - sFrame.pRSN->abyRSN[7] = 0x0F; - sFrame.pRSN->abyRSN[8] = 0xAC; - if (pMgmt->byCSSPK == KEY_CTL_TKIP) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_TKIP; - } else if (pMgmt->byCSSPK == KEY_CTL_CCMP) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_CCMP; - } else if (pMgmt->byCSSPK == KEY_CTL_NONE) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_USE_GROUP; - } else { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_UNKNOWN; - } - sFrame.pRSN->len += 6; - - // Auth Key Management Suite - sFrame.pRSN->abyRSN[10] = 1; - sFrame.pRSN->abyRSN[11] = 0; - sFrame.pRSN->abyRSN[12] = 0x00; - sFrame.pRSN->abyRSN[13] = 0x0F; - sFrame.pRSN->abyRSN[14] = 0xAC; - if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK) { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_PSK; - } else if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_802_1X; - } else { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_UNKNOWN; - } - sFrame.pRSN->len +=6; - - // RSN Capabilites - if (pMgmt->pCurrBSS->sRSNCapObj.bRSNCapExist == true) { - memcpy(&sFrame.pRSN->abyRSN[16], &pMgmt->pCurrBSS->sRSNCapObj.wRSNCap, 2); - } else { - sFrame.pRSN->abyRSN[16] = 0; - sFrame.pRSN->abyRSN[17] = 0; - } - sFrame.pRSN->len +=2; - - if ((pDevice->gsPMKID.BSSIDInfoCount > 0) && (pDevice->bRoaming == true) && (pMgmt->eAuthenMode == WMAC_AUTH_WPA2)) { - // RSN PMKID - pbyRSN = &sFrame.pRSN->abyRSN[18]; - pwPMKID = (u16 *)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, - ETH_ALEN)) { - (*pwPMKID)++; - memcpy(pbyRSN, - pDevice->gsPMKID.BSSIDInfo[ii].PMKID, - 16); - pbyRSN += 16; - } - } - if (*pwPMKID != 0) { - sFrame.pRSN->len += (2 + (*pwPMKID)*16); - } - } - - sFrame.len += sFrame.pRSN->len + WLAN_IEHDR_LEN; - // copy to AssocInfo. for OID_802_11_ASSOCIATION_INFORMATION - pMgmt->sAssocInfo.AssocInfo.RequestIELength += sFrame.pRSN->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, sFrame.pRSN, sFrame.pRSN->len + WLAN_IEHDR_LEN); - pbyIEs += sFrame.pRSN->len + WLAN_IEHDR_LEN; - } - - // Adjust the length fields - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Constructs an re-association request frame - * - * - * Return Value: - * A ptr to frame or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeReAssocRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u8 *pDAddr, u16 wCurrCapInfo, - u16 wListenInterval, PWLAN_IE_SSID pCurrSSID, - PWLAN_IE_SUPP_RATES pCurrRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_REASSOCREQ sFrame; - u8 *pbyIEs; - u8 *pbyRSN; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_REASSOCREQ_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - /* Setup the sFrame structure. */ - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_REASSOCREQ_FR_MAXLEN; - - // format fixed field frame structure - vMgrEncodeReassocRequest(&sFrame); - - /* Setup the header */ - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_REASSOCREQ) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pDAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - /* Set the capability and listen interval */ - *(sFrame.pwCapInfo) = cpu_to_le16(wCurrCapInfo); - *(sFrame.pwListenInterval) = cpu_to_le16(wListenInterval); - - memcpy(sFrame.pAddrCurrAP, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - /* Copy the SSID */ - /* sFrame.len point to end of fixed field */ - sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrSSID->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSSID, pCurrSSID, pCurrSSID->len + WLAN_IEHDR_LEN); - - pMgmt->sAssocInfo.AssocInfo.RequestIELength = pCurrSSID->len + WLAN_IEHDR_LEN; - pMgmt->sAssocInfo.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - pbyIEs = pMgmt->sAssocInfo.abyIEs; - memcpy(pbyIEs, pCurrSSID, pCurrSSID->len + WLAN_IEHDR_LEN); - pbyIEs += pCurrSSID->len + WLAN_IEHDR_LEN; - - /* Copy the rate set */ - /* sFrame.len point to end of SSID */ - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN); - - // Copy the extension rate set - if ((pMgmt->eCurrentPHYMode == PHY_TYPE_11G) && (pCurrExtSuppRates->len > 0)) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += pCurrExtSuppRates->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, pCurrExtSuppRates, pCurrExtSuppRates->len + WLAN_IEHDR_LEN); - } - - pMgmt->sAssocInfo.AssocInfo.RequestIELength += pCurrRates->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN); - pbyIEs += pCurrRates->len + WLAN_IEHDR_LEN; - - if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPANONE)) && - (pMgmt->pCurrBSS != NULL)) { - /* WPA IE */ - sFrame.pRSNWPA = (PWLAN_IE_RSN_EXT)(sFrame.pBuf + sFrame.len); - sFrame.pRSNWPA->byElementID = WLAN_EID_RSN_WPA; - sFrame.pRSNWPA->len = 16; - sFrame.pRSNWPA->abyOUI[0] = 0x00; - sFrame.pRSNWPA->abyOUI[1] = 0x50; - sFrame.pRSNWPA->abyOUI[2] = 0xf2; - sFrame.pRSNWPA->abyOUI[3] = 0x01; - sFrame.pRSNWPA->wVersion = 1; - //Group Key Cipher Suite - sFrame.pRSNWPA->abyMulticast[0] = 0x00; - sFrame.pRSNWPA->abyMulticast[1] = 0x50; - sFrame.pRSNWPA->abyMulticast[2] = 0xf2; - if (pMgmt->byCSSGK == KEY_CTL_WEP) { - sFrame.pRSNWPA->abyMulticast[3] = pMgmt->pCurrBSS->byGKType; - } else if (pMgmt->byCSSGK == KEY_CTL_TKIP) { - sFrame.pRSNWPA->abyMulticast[3] = WPA_TKIP; - } else if (pMgmt->byCSSGK == KEY_CTL_CCMP) { - sFrame.pRSNWPA->abyMulticast[3] = WPA_AESCCMP; - } else { - sFrame.pRSNWPA->abyMulticast[3] = WPA_NONE; - } - // Pairwise Key Cipher Suite - sFrame.pRSNWPA->wPKCount = 1; - sFrame.pRSNWPA->PKSList[0].abyOUI[0] = 0x00; - sFrame.pRSNWPA->PKSList[0].abyOUI[1] = 0x50; - sFrame.pRSNWPA->PKSList[0].abyOUI[2] = 0xf2; - if (pMgmt->byCSSPK == KEY_CTL_TKIP) { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_TKIP; - } else if (pMgmt->byCSSPK == KEY_CTL_CCMP) { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_AESCCMP; - } else { - sFrame.pRSNWPA->PKSList[0].abyOUI[3] = WPA_NONE; - } - // Auth Key Management Suite - pbyRSN = (u8 *)(sFrame.pBuf + sFrame.len + 2 + sFrame.pRSNWPA->len); - *pbyRSN++=0x01; - *pbyRSN++=0x00; - *pbyRSN++=0x00; - - *pbyRSN++=0x50; - *pbyRSN++=0xf2; - if (pMgmt->eAuthenMode == WMAC_AUTH_WPAPSK) { - *pbyRSN++=WPA_AUTH_PSK; - } else if (pMgmt->eAuthenMode == WMAC_AUTH_WPA) { - *pbyRSN++=WPA_AUTH_IEEE802_1X; - } else { - *pbyRSN++=WPA_NONE; - } - - sFrame.pRSNWPA->len +=6; - - // RSN Capabilites - *pbyRSN++=0x00; - *pbyRSN++=0x00; - sFrame.pRSNWPA->len +=2; - - sFrame.len += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - // copy to AssocInfo. for OID_802_11_ASSOCIATION_INFORMATION - pMgmt->sAssocInfo.AssocInfo.RequestIELength += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, sFrame.pRSNWPA, sFrame.pRSNWPA->len + WLAN_IEHDR_LEN); - pbyIEs += sFrame.pRSNWPA->len + WLAN_IEHDR_LEN; - - } else if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || - (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) && - (pMgmt->pCurrBSS != NULL)) { - unsigned int ii; - u16 * pwPMKID; - - /* WPA IE */ - sFrame.pRSN = (PWLAN_IE_RSN)(sFrame.pBuf + sFrame.len); - sFrame.pRSN->byElementID = WLAN_EID_RSN; - sFrame.pRSN->len = 6; //Version(2)+GK(4) - sFrame.pRSN->wVersion = 1; - //Group Key Cipher Suite - sFrame.pRSN->abyRSN[0] = 0x00; - sFrame.pRSN->abyRSN[1] = 0x0F; - sFrame.pRSN->abyRSN[2] = 0xAC; - if (pMgmt->byCSSGK == KEY_CTL_WEP) { - sFrame.pRSN->abyRSN[3] = pMgmt->pCurrBSS->byCSSGK; - } else if (pMgmt->byCSSGK == KEY_CTL_TKIP) { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_TKIP; - } else if (pMgmt->byCSSGK == KEY_CTL_CCMP) { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_CCMP; - } else { - sFrame.pRSN->abyRSN[3] = WLAN_11i_CSS_UNKNOWN; - } - - // Pairwise Key Cipher Suite - sFrame.pRSN->abyRSN[4] = 1; - sFrame.pRSN->abyRSN[5] = 0; - sFrame.pRSN->abyRSN[6] = 0x00; - sFrame.pRSN->abyRSN[7] = 0x0F; - sFrame.pRSN->abyRSN[8] = 0xAC; - if (pMgmt->byCSSPK == KEY_CTL_TKIP) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_TKIP; - } else if (pMgmt->byCSSPK == KEY_CTL_CCMP) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_CCMP; - } else if (pMgmt->byCSSPK == KEY_CTL_NONE) { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_USE_GROUP; - } else { - sFrame.pRSN->abyRSN[9] = WLAN_11i_CSS_UNKNOWN; - } - sFrame.pRSN->len += 6; - - // Auth Key Management Suite - sFrame.pRSN->abyRSN[10] = 1; - sFrame.pRSN->abyRSN[11] = 0; - sFrame.pRSN->abyRSN[12] = 0x00; - sFrame.pRSN->abyRSN[13] = 0x0F; - sFrame.pRSN->abyRSN[14] = 0xAC; - if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK) { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_PSK; - } else if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_802_1X; - } else { - sFrame.pRSN->abyRSN[15] = WLAN_11i_AKMSS_UNKNOWN; - } - sFrame.pRSN->len +=6; - - // RSN Capabilites - if (pMgmt->pCurrBSS->sRSNCapObj.bRSNCapExist == true) { - memcpy(&sFrame.pRSN->abyRSN[16], &pMgmt->pCurrBSS->sRSNCapObj.wRSNCap, 2); - } else { - sFrame.pRSN->abyRSN[16] = 0; - sFrame.pRSN->abyRSN[17] = 0; - } - sFrame.pRSN->len +=2; - - if ((pDevice->gsPMKID.BSSIDInfoCount > 0) && (pDevice->bRoaming == true) && (pMgmt->eAuthenMode == WMAC_AUTH_WPA2)) { - // RSN PMKID - pbyRSN = &sFrame.pRSN->abyRSN[18]; - pwPMKID = (u16 *)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, - ETH_ALEN)) { - (*pwPMKID)++; - memcpy(pbyRSN, - pDevice->gsPMKID.BSSIDInfo[ii].PMKID, - 16); - pbyRSN += 16; - } - } - if (*pwPMKID != 0) { - sFrame.pRSN->len += (2 + (*pwPMKID)*16); - } - } - - sFrame.len += sFrame.pRSN->len + WLAN_IEHDR_LEN; - // copy to AssocInfo. for OID_802_11_ASSOCIATION_INFORMATION - pMgmt->sAssocInfo.AssocInfo.RequestIELength += sFrame.pRSN->len + WLAN_IEHDR_LEN; - memcpy(pbyIEs, sFrame.pRSN, sFrame.pRSN->len + WLAN_IEHDR_LEN); - pbyIEs += sFrame.pRSN->len + WLAN_IEHDR_LEN; - } - - /* Adjust the length fields */ - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Constructs an assoc-response frame - * - * - * Return Value: - * PTR to frame; or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeAssocResponse(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wAssocStatus, - u16 wAssocAID, u8 *pDstAddr, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_ASSOCRESP sFrame; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_ASSOCREQ_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - // Setup the sFrame structure - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_REASSOCRESP_FR_MAXLEN; - vMgrEncodeAssocResponse(&sFrame); - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_ASSOCRESP) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pDstAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - *sFrame.pwCapInfo = cpu_to_le16(wCurrCapInfo); - *sFrame.pwStatus = cpu_to_le16(wAssocStatus); - *sFrame.pwAid = cpu_to_le16((u16)(wAssocAID | BIT14 | BIT15)); - - // Copy the rate set - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, - pCurrSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN - ); - - if (((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len != 0) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, - pCurrExtSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN - ); - } - - // Adjust the length fields - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Constructs an reassoc-response frame - * - * - * Return Value: - * PTR to frame; or NULL on allocation failure - * --*/ - -static struct vnt_tx_mgmt *s_MgrMakeReAssocResponse(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, u16 wCurrCapInfo, u16 wAssocStatus, - u16 wAssocAID, u8 *pDstAddr, PWLAN_IE_SUPP_RATES pCurrSuppRates, - PWLAN_IE_SUPP_RATES pCurrExtSuppRates) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - WLAN_FR_REASSOCRESP sFrame; - - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_ASSOCREQ_FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - // Setup the sFrame structure - sFrame.pBuf = (u8 *)pTxPacket->p80211Header; - sFrame.len = WLAN_REASSOCRESP_FR_MAXLEN; - vMgrEncodeReassocResponse(&sFrame); - // Setup the header - sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_REASSOCRESP) - )); - memcpy( sFrame.pHdr->sA3.abyAddr1, pDstAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy( sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); - - *sFrame.pwCapInfo = cpu_to_le16(wCurrCapInfo); - *sFrame.pwStatus = cpu_to_le16(wAssocStatus); - *sFrame.pwAid = cpu_to_le16((u16)(wAssocAID | BIT14 | BIT15)); - - // Copy the rate set - sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pSuppRates, - pCurrSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrSuppRates)->len + WLAN_IEHDR_LEN - ); - - if (((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len != 0) { - sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len); - sFrame.len += ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN; - memcpy(sFrame.pExtSuppRates, - pCurrExtSuppRates, - ((PWLAN_IE_SUPP_RATES)pCurrExtSuppRates)->len + WLAN_IEHDR_LEN - ); - } - - // Adjust the length fields - pTxPacket->cbMPDULen = sFrame.len; - pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN; - - return pTxPacket; -} - -/*+ - * - * Routine Description: - * Handles probe response management frames. - * - * - * Return Value: - * none. - * --*/ - -static void s_vMgrRxProbeResponse(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket) -{ - PKnownBSS pBSSList = NULL; - WLAN_FR_PROBERESP sFrame; - u8 byCurrChannel = pRxPacket->byRxChannel; - ERPObject sERP; - int bChannelHit = true; - - memset(&sFrame, 0, sizeof(WLAN_FR_PROBERESP)); - // decode the frame - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeProbeResponse(&sFrame); - - 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); - return; - } - - if(sFrame.pSSID->len == 0) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx Probe resp: SSID len = 0 \n"); - - //{{ RobertYu:20050201, 11a byCurrChannel != sFrame.pDSParms->byCurrChannel mapping - if( byCurrChannel > CB_MAX_CHANNEL_24G ) - { - if (sFrame.pDSParms) { - if (byCurrChannel == - RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]) - bChannelHit = true; - byCurrChannel = - RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]; - } else { - bChannelHit = true; - } - } else { - if (sFrame.pDSParms) { - if (byCurrChannel == sFrame.pDSParms->byCurrChannel) - bChannelHit = true; - byCurrChannel = sFrame.pDSParms->byCurrChannel; - } else { - bChannelHit = true; - } - } - //RobertYu:20050201 - -if(ChannelExceedZoneType(pDevice,byCurrChannel)==true) - return; - - if (sFrame.pERP) { - sERP.byERP = sFrame.pERP->byContext; - sERP.bERPExist = true; - } else { - sERP.bERPExist = false; - sERP.byERP = 0; - } - - // update or insert the bss - pBSSList = BSSpAddrIsInBSSList((void *) pDevice, - sFrame.pHdr->sA3.abyAddr3, - sFrame.pSSID); - if (pBSSList) { - 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((void *) pDevice, - sFrame.pHdr->sA3.abyAddr3, - *sFrame.pqwTimestamp, - *sFrame.pwBeaconInterval, - *sFrame.pwCapInfo, - byCurrChannel, - sFrame.pSSID, - sFrame.pSuppRates, - sFrame.pExtSuppRates, - &sERP, - sFrame.pRSN, - sFrame.pRSNWPA, - sFrame.pIE_Country, - sFrame.pIE_Quiet, - sFrame.len - WLAN_HDR_ADDR3_LEN, - sFrame.pHdr->sA4.abyAddr4, /* payload of beacon */ - (void *) pRxPacket); - } - return; - -} - -/*+ - * - * Routine Description:(AP)or(Ad-hoc STA) - * Handles probe request management frames. - * - * - * Return Value: - * none. - * --*/ - -static void s_vMgrRxProbeRequest(struct vnt_private *pDevice, - struct vnt_manager *pMgmt, struct vnt_rx_mgmt *pRxPacket) -{ - WLAN_FR_PROBEREQ sFrame; - CMD_STATUS Status; - struct vnt_tx_mgmt *pTxPacket; - u8 byPHYType = BB_TYPE_11B; - - // STA in Ad-hoc mode: when latest TBTT beacon transmit success, - // STA have to response this request. - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) || - ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && pDevice->bBeaconSent)) { - - memset(&sFrame, 0, sizeof(WLAN_FR_PROBEREQ)); - // decode the frame - sFrame.len = pRxPacket->cbMPDULen; - sFrame.pBuf = (u8 *)pRxPacket->p80211Header; - vMgrDecodeProbeRequest(&sFrame); -/* - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request rx:MAC addr:%pM\n", - sFrame.pHdr->sA3.abyAddr2); -*/ - if (sFrame.pSSID->len != 0) { - if (sFrame.pSSID->len != ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) - return; - if (memcmp(sFrame.pSSID->abySSID, - ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->abySSID, - ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) != 0) { - return; - } - } - - if ((sFrame.pSuppRates->len > 4) || (sFrame.pExtSuppRates != NULL)) { - byPHYType = BB_TYPE_11G; - } - - // Probe response reply.. - pTxPacket = s_MgrMakeProbeResponse - ( - pDevice, - pMgmt, - pMgmt->wCurrCapInfo, - pMgmt->wCurrBeaconPeriod, - pMgmt->uCurrChannel, - 0, - sFrame.pHdr->sA3.abyAddr2, - (PWLAN_IE_SSID)pMgmt->abyCurrSSID, - (u8 *)pMgmt->abyCurrBSSID, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, - byPHYType - ); - if (pTxPacket != NULL ){ - /* send the frame */ - if (Status != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Probe response tx failed\n"); - } - else { -// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Probe response tx sending..\n"); - } - } - } - - return; -} - -/*+ - * - * Routine Description: - * - * Entry point for the reception and handling of 802.11 management - * frames. Makes a determination of the frame type and then calls - * the appropriate function. - * - * - * Return Value: - * none. - * --*/ - -void vMgrRxManagePacket(struct vnt_private *pDevice, struct vnt_manager *pMgmt, - struct vnt_rx_mgmt *pRxPacket) -{ - int bInScan = false; - u32 uNodeIndex = 0; - NODE_STATE eNodeState = 0; - CMD_STATUS Status; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - if (BSSbIsSTAInNodeDB(pDevice, pRxPacket->p80211Header->sA3.abyAddr2, &uNodeIndex)) - eNodeState = pMgmt->sNodeDBTable[uNodeIndex].eNodeState; - } - - switch( WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) ){ - - case WLAN_FSTYPE_ASSOCREQ: - // Frame Clase = 2 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx assocreq\n"); - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) && - (eNodeState < NODE_AUTH)) { - // send deauth notification - // reason = (6) class 2 received from nonauth sta - vMgrDeAuthenBeginSta(pDevice, - pMgmt, - pRxPacket->p80211Header->sA3.abyAddr2, - (6), - &Status - ); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wmgr: send vMgrDeAuthenBeginSta 1\n"); - } - else { - s_vMgrRxAssocRequest(pDevice, pMgmt, pRxPacket, uNodeIndex); - } - break; - - case WLAN_FSTYPE_ASSOCRESP: - // Frame Clase = 2 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx assocresp1\n"); - s_vMgrRxAssocResponse(pDevice, pMgmt, pRxPacket, false); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx assocresp2\n"); - break; - - case WLAN_FSTYPE_REASSOCREQ: - // Frame Clase = 2 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx reassocreq\n"); - // Todo: reassoc - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) && - (eNodeState < NODE_AUTH)) { - // send deauth notification - // reason = (6) class 2 received from nonauth sta - vMgrDeAuthenBeginSta(pDevice, - pMgmt, - pRxPacket->p80211Header->sA3.abyAddr2, - (6), - &Status - ); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wmgr: send vMgrDeAuthenBeginSta 2\n"); - - } - s_vMgrRxReAssocRequest(pDevice, pMgmt, pRxPacket, uNodeIndex); - break; - - case WLAN_FSTYPE_REASSOCRESP: - // Frame Clase = 2 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx reassocresp\n"); - s_vMgrRxAssocResponse(pDevice, pMgmt, pRxPacket, true); - break; - - case WLAN_FSTYPE_PROBEREQ: - // Frame Clase = 0 - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx probereq\n"); - s_vMgrRxProbeRequest(pDevice, pMgmt, pRxPacket); - break; - - case WLAN_FSTYPE_PROBERESP: - // Frame Clase = 0 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx proberesp\n"); - - s_vMgrRxProbeResponse(pDevice, pMgmt, pRxPacket); - break; - - case WLAN_FSTYPE_BEACON: - // Frame Clase = 0 - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx beacon\n"); - if (pMgmt->eScanState != WMAC_NO_SCANNING) { - bInScan = true; - } - s_vMgrRxBeacon(pDevice, pMgmt, pRxPacket, bInScan); - break; - - case WLAN_FSTYPE_ATIM: - // Frame Clase = 1 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx atim\n"); - break; - - case WLAN_FSTYPE_DISASSOC: - // Frame Clase = 2 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx disassoc\n"); - if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) && - (eNodeState < NODE_AUTH)) { - // send deauth notification - // reason = (6) class 2 received from nonauth sta - vMgrDeAuthenBeginSta(pDevice, - pMgmt, - pRxPacket->p80211Header->sA3.abyAddr2, - (6), - &Status - ); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wmgr: send vMgrDeAuthenBeginSta 3\n"); - } - s_vMgrRxDisassociation(pDevice, pMgmt, pRxPacket); - break; - - case WLAN_FSTYPE_AUTHEN: - // Frame Clase = 1 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx authen\n"); - s_vMgrRxAuthentication(pDevice, pMgmt, pRxPacket); - break; - - case WLAN_FSTYPE_DEAUTHEN: - // Frame Clase = 1 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx deauthen\n"); - s_vMgrRxDeauthentication(pDevice, pMgmt, pRxPacket); - break; - - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx unknown mgmt\n"); - } - - return; -} - -/*+ - * - * Routine Description: - * - * - * Prepare beacon to send - * - * Return Value: - * true if success; false if failed. - * --*/ -int bMgrPrepareBeaconToSend(struct vnt_private *pDevice, - struct vnt_manager *pMgmt) -{ - struct vnt_tx_mgmt *pTxPacket; - unsigned long flags; - -// pDevice->bBeaconBufReady = false; - if (pDevice->bEncryptionEnable) - pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_PRIVACY(1); - else - pMgmt->wCurrCapInfo &= ~WLAN_SET_CAP_INFO_PRIVACY(1); - - pTxPacket = s_MgrMakeBeacon - ( - pDevice, - pMgmt, - pMgmt->wCurrCapInfo, - pMgmt->wCurrBeaconPeriod, - pMgmt->uCurrChannel, - pMgmt->wCurrATIMWindow, //0, - (PWLAN_IE_SSID)pMgmt->abyCurrSSID, - (u8 *)pMgmt->abyCurrBSSID, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates - ); - - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && - (pMgmt->abyCurrBSSID[0] == 0)) - return false; - - spin_lock_irqsave(&pDevice->lock, flags); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); - - return true; -} - -/*+ - * - * Routine Description: - * - * Log a warning message based on the contents of the Status - * Code field of an 802.11 management frame. Defines are - * derived from 802.11-1997 SPEC. - * - * Return Value: - * none. - * --*/ -static void s_vMgrLogStatus(struct vnt_manager *pMgmt, u16 wStatus) -{ - switch( wStatus ){ - case WLAN_MGMT_STATUS_UNSPEC_FAILURE: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Unspecified error.\n"); - break; - case WLAN_MGMT_STATUS_CAPS_UNSUPPORTED: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Can't support all requested capabilities.\n"); - break; - case WLAN_MGMT_STATUS_REASSOC_NO_ASSOC: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Reassoc denied, can't confirm original Association.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, undefine in spec\n"); - break; - case WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Peer doesn't support authen algorithm.\n"); - break; - case WLAN_MGMT_STATUS_RX_AUTH_NOSEQ: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Authen frame received out of sequence.\n"); - break; - case WLAN_MGMT_STATUS_CHALLENGE_FAIL: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Authen rejected, challenge failure.\n"); - break; - case WLAN_MGMT_STATUS_AUTH_TIMEOUT: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Authen rejected, timeout waiting for next frame.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, AP too busy.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_RATES: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, we haven't enough basic rates.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_SHORTPREAMBLE: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, we do not support short preamble.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_PBCC: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, we do not support PBCC.\n"); - break; - case WLAN_MGMT_STATUS_ASSOC_DENIED_AGILITY: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Status code == Assoc denied, we do not support channel agility.\n"); - break; - default: - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Unknown status code %d.\n", wStatus); - break; - } -} - -/* - * - * Description: - * Add BSSID in PMKID Candidate list. - * - * Parameters: - * In: - * hDeviceContext - device structure point - * pbyBSSID - BSSID address for adding - * wRSNCap - BSS's RSN capability - * Out: - * none - * - * Return Value: none. - * --*/ - -int bAdd_PMKID_Candidate(struct vnt_private *pDevice, u8 *pbyBSSID, - PSRSNCapObject psRSNCapObj) -{ - PPMKID_CANDIDATE pCandidateList; - int ii = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"bAdd_PMKID_Candidate START: (%d)\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); - - if ((pDevice == NULL) || (pbyBSSID == NULL) || (psRSNCapObj == NULL)) - return false; - - if (pDevice->gsPMKIDCandidate.NumCandidates >= MAX_PMKIDLIST) - return false; - - // Update Old Candidate - for (ii = 0; ii < pDevice->gsPMKIDCandidate.NumCandidates; ii++) { - 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; - } - } - - // New Candidate - pCandidateList = &pDevice->gsPMKIDCandidate.CandidateList[pDevice->gsPMKIDCandidate.NumCandidates]; - 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); - } - 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; -} - -/* - * - * Description: - * Flush PMKID Candidate list. - * - * Parameters: - * In: - * hDeviceContext - device structure point - * Out: - * none - * - * Return Value: none. - * --*/ - -void vFlush_PMKID_Candidate(struct vnt_private *pDevice) -{ - if (pDevice == NULL) - return; - - memset(&pDevice->gsPMKIDCandidate, 0, sizeof(SPMKIDCandidateEvent)); - - return; -} - -static bool -s_bCipherMatch ( - PKnownBSS pBSSNode, - NDIS_802_11_ENCRYPTION_STATUS EncStatus, - u8 * pbyCCSPK, - u8 * pbyCCSGK - ) -{ - u8 byMulticastCipher = KEY_CTL_INVALID; - u8 byCipherMask = 0x00; - int i; - - if (pBSSNode == NULL) - return false; - - // check cap. of BSS - if ((WLAN_GET_CAP_INFO_PRIVACY(pBSSNode->wCapInfo) != 0) && - (EncStatus == Ndis802_11Encryption1Enabled)) { - // default is WEP only - byMulticastCipher = KEY_CTL_WEP; - } - - if ((WLAN_GET_CAP_INFO_PRIVACY(pBSSNode->wCapInfo) != 0) && - (pBSSNode->bWPA2Valid == true) && - - ((EncStatus == Ndis802_11Encryption3Enabled) || - (EncStatus == Ndis802_11Encryption2Enabled))) { - //WPA2 - // check Group Key Cipher - if ((pBSSNode->byCSSGK == WLAN_11i_CSS_WEP40) || - (pBSSNode->byCSSGK == WLAN_11i_CSS_WEP104)) { - byMulticastCipher = KEY_CTL_WEP; - } else if (pBSSNode->byCSSGK == WLAN_11i_CSS_TKIP) { - byMulticastCipher = KEY_CTL_TKIP; - } else if (pBSSNode->byCSSGK == WLAN_11i_CSS_CCMP) { - byMulticastCipher = KEY_CTL_CCMP; - } else { - byMulticastCipher = KEY_CTL_INVALID; - } - - /* check Pairwise Key Cipher */ - for (i = 0; i < pBSSNode->wCSSPKCount; i++) { - if ((pBSSNode->abyCSSPK[i] == WLAN_11i_CSS_WEP40) || - (pBSSNode->abyCSSPK[i] == WLAN_11i_CSS_WEP104)) { - /* this should not happen as defined 802.11i */ - byCipherMask |= 0x01; - } else if (pBSSNode->abyCSSPK[i] == WLAN_11i_CSS_TKIP) { - byCipherMask |= 0x02; - } else if (pBSSNode->abyCSSPK[i] == WLAN_11i_CSS_CCMP) { - byCipherMask |= 0x04; - } else if (pBSSNode->abyCSSPK[i] == WLAN_11i_CSS_USE_GROUP) { - /* use group key only ignore all others */ - byCipherMask = 0; - i = pBSSNode->wCSSPKCount; - } - } - - } else if ((WLAN_GET_CAP_INFO_PRIVACY(pBSSNode->wCapInfo) != 0) && - (pBSSNode->bWPAValid == true) && - ((EncStatus == Ndis802_11Encryption2Enabled) || (EncStatus == Ndis802_11Encryption3Enabled))) { - //WPA - // check Group Key Cipher - if ((pBSSNode->byGKType == WPA_WEP40) || - (pBSSNode->byGKType == WPA_WEP104)) { - byMulticastCipher = KEY_CTL_WEP; - } else if (pBSSNode->byGKType == WPA_TKIP) { - byMulticastCipher = KEY_CTL_TKIP; - } else if (pBSSNode->byGKType == WPA_AESCCMP) { - byMulticastCipher = KEY_CTL_CCMP; - } else { - byMulticastCipher = KEY_CTL_INVALID; - } - - /* check Pairwise Key Cipher */ - for (i = 0; i < pBSSNode->wPKCount; i++) { - if (pBSSNode->abyPKType[i] == WPA_TKIP) { - byCipherMask |= 0x02; - } else if (pBSSNode->abyPKType[i] == WPA_AESCCMP) { - byCipherMask |= 0x04; - } else if (pBSSNode->abyPKType[i] == WPA_NONE) { - /* use group key only ignore all others */ - byCipherMask = 0; - i = pBSSNode->wPKCount; - } - } - } - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%d, %d, %d, %d, EncStatus:%d\n", - byMulticastCipher, byCipherMask, pBSSNode->bWPAValid, pBSSNode->bWPA2Valid, EncStatus); - - // mask our cap. with BSS - if (EncStatus == Ndis802_11Encryption1Enabled) { - - // For supporting Cisco migration mode, don't care pairwise key cipher - //if ((byMulticastCipher == KEY_CTL_WEP) && - // (byCipherMask == 0)) { - if ((byMulticastCipher == KEY_CTL_WEP) && - (byCipherMask == 0)) { - *pbyCCSGK = KEY_CTL_WEP; - *pbyCCSPK = KEY_CTL_NONE; - return true; - } else { - return false; - } - - } else if (EncStatus == Ndis802_11Encryption2Enabled) { - if ((byMulticastCipher == KEY_CTL_TKIP) && - (byCipherMask == 0)) { - *pbyCCSGK = KEY_CTL_TKIP; - *pbyCCSPK = KEY_CTL_NONE; - return true; - } else if ((byMulticastCipher == KEY_CTL_WEP) && - ((byCipherMask & 0x02) != 0)) { - *pbyCCSGK = KEY_CTL_WEP; - *pbyCCSPK = KEY_CTL_TKIP; - return true; - } else if ((byMulticastCipher == KEY_CTL_TKIP) && - ((byCipherMask & 0x02) != 0)) { - *pbyCCSGK = KEY_CTL_TKIP; - *pbyCCSPK = KEY_CTL_TKIP; - return true; - } else { - return false; - } - } else if (EncStatus == Ndis802_11Encryption3Enabled) { - if ((byMulticastCipher == KEY_CTL_CCMP) && - (byCipherMask == 0)) { - // When CCMP is enable, "Use group cipher suite" shall not be a valid option. - return false; - } else if ((byMulticastCipher == KEY_CTL_WEP) && - ((byCipherMask & 0x04) != 0)) { - *pbyCCSGK = KEY_CTL_WEP; - *pbyCCSPK = KEY_CTL_CCMP; - return true; - } else if ((byMulticastCipher == KEY_CTL_TKIP) && - ((byCipherMask & 0x04) != 0)) { - *pbyCCSGK = KEY_CTL_TKIP; - *pbyCCSPK = KEY_CTL_CCMP; - return true; - } else if ((byMulticastCipher == KEY_CTL_CCMP) && - ((byCipherMask & 0x04) != 0)) { - *pbyCCSGK = KEY_CTL_CCMP; - *pbyCCSPK = KEY_CTL_CCMP; - return true; - } else { - return false; - } - } - return true; -} - diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index b6610a196ac6..34c280372e19 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -348,48 +348,4 @@ struct vnt_manager { }; -void vMgrObjectInit(struct vnt_private *pDevice); - -void vMgrAssocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *, PCMD_STATUS pStatus); - -void vMgrReAssocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *, PCMD_STATUS pStatus); - -void vMgrDisassocBeginSta(struct vnt_private *pDevice, - struct vnt_manager *, u8 *abyDestAddress, u16 wReason, - PCMD_STATUS pStatus); - -void vMgrAuthenBeginSta(struct vnt_private *pDevice, - struct vnt_manager *, PCMD_STATUS pStatus); - -void vMgrCreateOwnIBSS(struct vnt_private *pDevice, - PCMD_STATUS pStatus); - -void vMgrJoinBSSBegin(struct vnt_private *pDevice, - PCMD_STATUS pStatus); - -void vMgrRxManagePacket(struct vnt_private *pDevice, - struct vnt_manager *, struct vnt_rx_mgmt *); - -/* -void -vMgrScanBegin( - void *hDeviceContext, - PCMD_STATUS pStatus - ); -*/ - -void vMgrDeAuthenBeginSta(struct vnt_private *pDevice, - struct vnt_manager *, u8 *abyDestAddress, u16 wReason, - PCMD_STATUS pStatus); - -int bMgrPrepareBeaconToSend(struct vnt_private *pDevice, - struct vnt_manager *); - -int bAdd_PMKID_Candidate(struct vnt_private *pDevice, - u8 *pbyBSSID, PSRSNCapObject psRSNCapObj); - -void vFlush_PMKID_Candidate(struct vnt_private *pDevice); - #endif /* __WMGR_H__ */ -- cgit From 64d1c329fb13e004cd4139126f51089b5a234413 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:46 +0100 Subject: staging: vt6656: dead code remove bssdb.c The header will be remove later Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/bssdb.c | 1462 --------------------------------------- drivers/staging/vt6656/bssdb.h | 64 -- 3 files changed, 1527 deletions(-) delete mode 100644 drivers/staging/vt6656/bssdb.c (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 255a2ad6b0db..28cdb4f929c6 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -9,7 +9,6 @@ vt6656_stage-y += main_usb.o \ wctl.o \ 80211mgr.o \ wcmd.o\ - bssdb.o \ wpa2.o \ rxtx.o \ dpc.o \ diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c deleted file mode 100644 index 603b9ce50145..000000000000 --- a/drivers/staging/vt6656/bssdb.c +++ /dev/null @@ -1,1462 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: bssdb.c - * - * Purpose: Handles the Basic Service Set & Node Database functions - * - * Functions: - * BSSpSearchBSSList - Search known BSS list for Desire SSID or BSSID - * BSSvClearBSSList - Clear BSS List - * BSSbInsertToBSSList - Insert a BSS set into known BSS list - * BSSbUpdateToBSSList - Update BSS set in known BSS list - * BSSbIsSTAInNodeDB - Search Node DB table to find the index of matched DstAddr - * BSSvCreateOneNode - Allocate an Node for Node DB - * BSSvUpdateAPNode - Update AP Node content in Index 0 of KnownNodeDB - * BSSvSecondCallBack - One second timer callback function to update Node DB info & AP link status - * BSSvUpdateNodeTxCounter - Update Tx attemps, Tx failure counter in Node DB for auto-fallback rate control - * - * Revision History: - * - * Author: Lyndon Chen - * - * Date: July 17, 2002 - */ - -#include "tmacro.h" -#include "tether.h" -#include "device.h" -#include "80211hdr.h" -#include "bssdb.h" -#include "wmgr.h" -#include "datarate.h" -#include "desc.h" -#include "wcmd.h" -#include "wpa.h" -#include "baseband.h" -#include "rf.h" -#include "card.h" -#include "mac.h" -#include "wpa2.h" -#include "usbpipe.h" -#include "iowpa.h" -#include "power.h" - -static int msglevel = MSG_LEVEL_INFO; -/* static int msglevel = MSG_LEVEL_DEBUG; */ - -static const u16 awHWRetry0[5][5] = { - {RATE_18M, RATE_18M, RATE_12M, RATE_12M, RATE_12M}, - {RATE_24M, RATE_24M, RATE_18M, RATE_12M, RATE_12M}, - {RATE_36M, RATE_36M, RATE_24M, RATE_18M, RATE_18M}, - {RATE_48M, RATE_48M, RATE_36M, RATE_24M, RATE_24M}, - {RATE_54M, RATE_54M, RATE_48M, RATE_36M, RATE_36M} - }; -static const u16 awHWRetry1[5][5] = { - {RATE_18M, RATE_18M, RATE_12M, RATE_6M, RATE_6M}, - {RATE_24M, RATE_24M, RATE_18M, RATE_6M, RATE_6M}, - {RATE_36M, RATE_36M, RATE_24M, RATE_12M, RATE_12M}, - {RATE_48M, RATE_48M, RATE_24M, RATE_12M, RATE_12M}, - {RATE_54M, RATE_54M, RATE_36M, RATE_18M, RATE_18M} - }; - -static void s_vCheckSensitivity(struct vnt_private *pDevice); -static void s_vCheckPreEDThreshold(struct vnt_private *pDevice); -static void s_uCalculateLinkQual(struct vnt_private *pDevice); - -/* - * Routine Description: - * Search known BSS list for Desire SSID or BSSID. - * - * Return Value: - * PTR to KnownBSS or NULL - */ -PKnownBSS BSSpSearchBSSList(struct vnt_private *pDevice, - u8 *pbyDesireBSSID, u8 *pbyDesireSSID, - CARD_PHY_TYPE ePhyType) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u8 *pbyBSSID = NULL; - PWLAN_IE_SSID pSSID = NULL; - PKnownBSS pCurrBSS = NULL; - PKnownBSS pSelect = NULL; - u8 ZeroBSSID[WLAN_BSSID_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - int ii = 0; - int jj = 0; - - if (pbyDesireBSSID) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "BSSpSearchBSSList BSSID[%pM]\n", pbyDesireBSSID); - if (!is_broadcast_ether_addr(pbyDesireBSSID) && - memcmp(pbyDesireBSSID, ZeroBSSID, 6) != 0) - pbyBSSID = pbyDesireBSSID; - } - if (pbyDesireSSID && - ((PWLAN_IE_SSID) pbyDesireSSID)->len != 0) - pSSID = (PWLAN_IE_SSID) pbyDesireSSID; - - if (pbyBSSID && pDevice->bRoaming == false) { - /* match BSSID first */ - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - pCurrBSS = &(pMgmt->sBSSList[ii]); - - pCurrBSS->bSelected = false; - - if (pCurrBSS->bActive && - pCurrBSS->bSelected == false && - ether_addr_equal(pCurrBSS->abyBSSID, pbyBSSID)) { - if (pSSID) { - /* compare ssid */ - if (!memcmp(pSSID->abySSID, - ((PWLAN_IE_SSID) pCurrBSS->abySSID)->abySSID, - pSSID->len) && - (pMgmt->eConfigMode == WMAC_CONFIG_AUTO || - (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA && - WLAN_GET_CAP_INFO_IBSS(pCurrBSS->wCapInfo)) || - (pMgmt->eConfigMode == WMAC_CONFIG_ESS_STA && - WLAN_GET_CAP_INFO_ESS(pCurrBSS->wCapInfo)))) { - - pCurrBSS->bSelected = true; - return pCurrBSS; - } - } else if (pMgmt->eConfigMode == WMAC_CONFIG_AUTO || - (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA && - WLAN_GET_CAP_INFO_IBSS(pCurrBSS->wCapInfo)) || - (pMgmt->eConfigMode == WMAC_CONFIG_ESS_STA && - WLAN_GET_CAP_INFO_ESS(pCurrBSS->wCapInfo))) { - pCurrBSS->bSelected = true; - return pCurrBSS; - } - } - } - } else { - /* ignore BSSID */ - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - pCurrBSS = &(pMgmt->sBSSList[ii]); - - /* 2007-0721-01by MikeLiu - * if ((pCurrBSS->bActive) && - * (pCurrBSS->bSelected == false)) { */ - - pCurrBSS->bSelected = false; - if (pCurrBSS->bActive) { - - if (pSSID && - /* matched SSID */ - (memcmp(pSSID->abySSID, - ((PWLAN_IE_SSID) pCurrBSS->abySSID)->abySSID, - pSSID->len) || - pSSID->len != - ((PWLAN_IE_SSID) pCurrBSS->abySSID)->len)) { - /* SSID not match skip this BSS */ - continue; - } - - if ((pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA && - WLAN_GET_CAP_INFO_ESS(pCurrBSS->wCapInfo)) || - (pMgmt->eConfigMode == WMAC_CONFIG_ESS_STA && - WLAN_GET_CAP_INFO_IBSS(pCurrBSS->wCapInfo))) { - /* Type not match skip this BSS */ - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "BSS type mismatch.... Config[%d] BSS[0x%04x]\n", - pMgmt->eConfigMode, - pCurrBSS->wCapInfo); - continue; - } - - if (ePhyType != PHY_TYPE_AUTO && - ((ePhyType == PHY_TYPE_11A && - PHY_TYPE_11A != pCurrBSS->eNetworkTypeInUse) || - (ePhyType != PHY_TYPE_11A && - PHY_TYPE_11A == pCurrBSS->eNetworkTypeInUse))) { - /* PhyType not match skip this BSS */ - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Physical type mismatch.... ePhyType[%d] BSS[%d]\n", - ePhyType, - pCurrBSS->eNetworkTypeInUse); - continue; - } - - pMgmt->pSameBSS[jj].uChannel = pCurrBSS->uChannel; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "BSSpSearchBSSList pSelect1[%pM]\n", - pCurrBSS->abyBSSID); - jj++; - - if (!pSelect) - pSelect = pCurrBSS; - /* compare RSSI, select the strongest signal */ - else if (pCurrBSS->uRSSI < pSelect->uRSSI) - pSelect = pCurrBSS; - } - } - - pDevice->bSameBSSMaxNum = jj; - - if (pSelect) { - pSelect->bSelected = true; - if (pDevice->bRoaming == false) { - /* Einsn Add @20070907 */ - memcpy(pbyDesireSSID, - pCurrBSS->abySSID, - WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); - } - - return pSelect; - } - } - return NULL; - -} - -/* - * Routine Description: - * Clear BSS List - * - * Return Value: - * None. - */ -void BSSvClearBSSList(struct vnt_private *pDevice, int bKeepCurrBSSID) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - if (bKeepCurrBSSID && - pMgmt->sBSSList[ii].bActive && - ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID, - pMgmt->abyCurrBSSID)) { - - /* mike mark: - * there are two BSSID's in list. If that AP is - * in hidden ssid mode, one SSID is null, but - * other's might not be obvious, so if it - * associate's with your STA, you must keep the - * two of them!! bKeepCurrBSSID = false; - */ - - continue; - } - - pMgmt->sBSSList[ii].bActive = false; - memset(&pMgmt->sBSSList[ii], 0, sizeof(KnownBSS)); - } - BSSvClearAnyBSSJoinRecord(pDevice); -} - -/* - * Routine Description: - * search BSS list by BSSID & SSID if matched - * - * Return Value: - * true if found. - */ -PKnownBSS BSSpAddrIsInBSSList(struct vnt_private *pDevice, - u8 *abyBSSID, - PWLAN_IE_SSID pSSID) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - PKnownBSS pBSSList = NULL; - int ii; - - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - pBSSList = &(pMgmt->sBSSList[ii]); - if (pBSSList->bActive && - ether_addr_equal(pBSSList->abyBSSID, abyBSSID) && - pSSID->len == ((PWLAN_IE_SSID) pBSSList->abySSID)->len && - memcmp(pSSID->abySSID, - ((PWLAN_IE_SSID) pBSSList->abySSID)->abySSID, - pSSID->len) == 0) - return pBSSList; - } - - return NULL; -} - -/* - * Routine Description: - * Insert a BSS set into known BSS list - * - * Return Value: - * true if success. - */ -int BSSbInsertToBSSList(struct vnt_private *pDevice, - u8 *abyBSSIDAddr, - u64 qwTimestamp, - u16 wBeaconInterval, - u16 wCapInfo, - u8 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, - u32 uIELength, - u8 *pbyIEs, - void *pRxPacketContext) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_rx_mgmt *pRxPacket = - (struct vnt_rx_mgmt *) pRxPacketContext; - PKnownBSS pBSSList = NULL; - unsigned int ii; - bool bParsingQuiet = false; - - pBSSList = (PKnownBSS) &(pMgmt->sBSSList[0]); - - for (ii = 0; ii < MAX_BSS_NUM; ii++) { - pBSSList = (PKnownBSS) &(pMgmt->sBSSList[ii]); - if (!pBSSList->bActive) - break; - } - - if (ii == MAX_BSS_NUM) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Get free KnowBSS node failed.\n"); - return false; - } - /* save the BSS info */ - pBSSList->bActive = true; - memcpy(pBSSList->abyBSSID, abyBSSIDAddr, WLAN_BSSID_LEN); - pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); - pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); - pBSSList->wCapInfo = cpu_to_le16(wCapInfo); - pBSSList->uClearCount = 0; - - if (pSSID->len > WLAN_SSID_MAXLEN) - pSSID->len = WLAN_SSID_MAXLEN; - memcpy(pBSSList->abySSID, pSSID, pSSID->len + WLAN_IEHDR_LEN); - - pBSSList->uChannel = byCurrChannel; - - if (pSuppRates->len > WLAN_RATES_MAXLEN) - pSuppRates->len = WLAN_RATES_MAXLEN; - memcpy(pBSSList->abySuppRates, pSuppRates, - pSuppRates->len + WLAN_IEHDR_LEN); - - if (pExtSuppRates) { - if (pExtSuppRates->len > WLAN_RATES_MAXLEN) - pExtSuppRates->len = WLAN_RATES_MAXLEN; - memcpy(pBSSList->abyExtSuppRates, pExtSuppRates, - pExtSuppRates->len + WLAN_IEHDR_LEN); - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "BSSbInsertToBSSList: pExtSuppRates->len = %d\n", - pExtSuppRates->len); - - } else { - memset(pBSSList->abyExtSuppRates, 0, - WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - } - pBSSList->sERP.byERP = psERP->byERP; - pBSSList->sERP.bERPExist = psERP->bERPExist; - - /* Check if BSS is 802.11a/b/g */ - if (pBSSList->uChannel > CB_MAX_CHANNEL_24G) - pBSSList->eNetworkTypeInUse = PHY_TYPE_11A; - else if (pBSSList->sERP.bERPExist == true) - pBSSList->eNetworkTypeInUse = PHY_TYPE_11G; - else - pBSSList->eNetworkTypeInUse = PHY_TYPE_11B; - - pBSSList->byRxRate = pRxPacket->byRxRate; - pBSSList->qwLocalTSF = pRxPacket->qwLocalTSF; - pBSSList->uRSSI = pRxPacket->uRSSI; - pBSSList->bySQ = pRxPacket->bySQ; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA && - pMgmt->eCurrState == WMAC_STATE_ASSOC && - /* assoc with BSS */ - pBSSList == pMgmt->pCurrBSS) - bParsingQuiet = true; - - WPA_ClearRSN(pBSSList); - - if (pRSNWPA) { - unsigned int uLen = pRSNWPA->len + 2; - - if (uLen <= (uIELength - - (unsigned int) (u32) ((u8 *) pRSNWPA - pbyIEs))) { - pBSSList->wWPALen = uLen; - memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); - WPA_ParseRSN(pBSSList, pRSNWPA); - } - } - - WPA2_ClearRSN(pBSSList); - - if (pRSN) { - unsigned int uLen = pRSN->len + 2; - - if (uLen <= (uIELength - - (unsigned int) (u32) ((u8 *) pRSN - pbyIEs))) { - pBSSList->wRSNLen = uLen; - memcpy(pBSSList->byRSNIE, pRSN, uLen); - WPA2vParseRSN(pBSSList, pRSN); - } - } - - if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2 || - pBSSList->bWPA2Valid == true) { - - PSKeyItem pTransmitKey = NULL; - bool bIs802_1x = false; - - for (ii = 0; ii < pBSSList->wAKMSSAuthCount; ii++) { - if (pBSSList->abyAKMSSAuthType[ii] == - WLAN_11i_AKMSS_802_1X) { - bIs802_1x = true; - break; - } - } - if (bIs802_1x == true && - pSSID->len == ((PWLAN_IE_SSID) pMgmt->abyDesireSSID)->len && - !memcmp(pSSID->abySSID, - ((PWLAN_IE_SSID) pMgmt->abyDesireSSID)->abySSID, - pSSID->len)) { - - if (pDevice->bLinkPass == true && - pMgmt->eCurrState == WMAC_STATE_ASSOC && - (KeybGetTransmitKey(&(pDevice->sKey), - pDevice->abyBSSID, - PAIRWISE_KEY, - &pTransmitKey) == true || - KeybGetTransmitKey(&(pDevice->sKey), - pDevice->abyBSSID, - GROUP_KEY, - &pTransmitKey) == true)) { - pDevice->gsPMKIDCandidate.StatusType = - Ndis802_11StatusType_PMKID_CandidateList; - pDevice->gsPMKIDCandidate.Version = 1; - - - } - } - } - - /* Monitor if RSSI is too strong. */ - pBSSList->byRSSIStatCnt = 0; - - vnt_rf_rssi_to_dbm(pDevice, (u8)pRxPacket->uRSSI, &pBSSList->ldBmMAX); - - pBSSList->ldBmAverage[0] = pBSSList->ldBmMAX; - pBSSList->ldBmAverRange = pBSSList->ldBmMAX; - for (ii = 1; ii < RSSI_STAT_COUNT; ii++) - pBSSList->ldBmAverage[ii] = 0; - - pBSSList->uIELength = uIELength; - if (pBSSList->uIELength > WLAN_BEACON_FR_MAXLEN) - pBSSList->uIELength = WLAN_BEACON_FR_MAXLEN; - memcpy(pBSSList->abyIEs, pbyIEs, pBSSList->uIELength); - - return true; -} - -/* - * Routine Description: - * Update BSS set in known BSS list - * - * Return Value: - * true if success. - */ -/* TODO: input structure modify */ -int BSSbUpdateToBSSList(struct vnt_private *pDevice, - u64 qwTimestamp, - u16 wBeaconInterval, - u16 wCapInfo, - u8 byCurrChannel, - int 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, - u32 uIELength, - u8 *pbyIEs, - void *pRxPacketContext) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_rx_mgmt *pRxPacket = - (struct vnt_rx_mgmt *) pRxPacketContext; - int ii, jj; - signed long ldBm, ldBmSum; - bool bParsingQuiet = false; - - if (!pBSSList) - return false; - - pBSSList->qwBSSTimestamp = cpu_to_le64(qwTimestamp); - - pBSSList->wBeaconInterval = cpu_to_le16(wBeaconInterval); - pBSSList->wCapInfo = cpu_to_le16(wCapInfo); - pBSSList->uClearCount = 0; - pBSSList->uChannel = byCurrChannel; - - if (pSSID->len > WLAN_SSID_MAXLEN) - pSSID->len = WLAN_SSID_MAXLEN; - - if (pSSID->len != 0 && pSSID->abySSID[0] != 0) - memcpy(pBSSList->abySSID, pSSID, pSSID->len + WLAN_IEHDR_LEN); - memcpy(pBSSList->abySuppRates, pSuppRates, - pSuppRates->len + WLAN_IEHDR_LEN); - - if (pExtSuppRates) - memcpy(pBSSList->abyExtSuppRates, pExtSuppRates, - pExtSuppRates->len + WLAN_IEHDR_LEN); - else - memset(pBSSList->abyExtSuppRates, 0, - WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1); - pBSSList->sERP.byERP = psERP->byERP; - pBSSList->sERP.bERPExist = psERP->bERPExist; - - /* Check if BSS is 802.11a/b/g */ - if (pBSSList->uChannel > CB_MAX_CHANNEL_24G) - pBSSList->eNetworkTypeInUse = PHY_TYPE_11A; - else if (pBSSList->sERP.bERPExist == true) - pBSSList->eNetworkTypeInUse = PHY_TYPE_11G; - else - pBSSList->eNetworkTypeInUse = PHY_TYPE_11B; - - pBSSList->byRxRate = pRxPacket->byRxRate; - pBSSList->qwLocalTSF = pRxPacket->qwLocalTSF; - if (bChannelHit) - pBSSList->uRSSI = pRxPacket->uRSSI; - pBSSList->bySQ = pRxPacket->bySQ; - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA && - pMgmt->eCurrState == WMAC_STATE_ASSOC && - /* assoc with BSS */ - pBSSList == pMgmt->pCurrBSS) - bParsingQuiet = true; - - WPA_ClearRSN(pBSSList); /* mike update */ - - if (pRSNWPA) { - unsigned int uLen = pRSNWPA->len + 2; - if (uLen <= (uIELength - - (unsigned int) (u32) ((u8 *) pRSNWPA - pbyIEs))) { - pBSSList->wWPALen = uLen; - memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); - WPA_ParseRSN(pBSSList, pRSNWPA); - } - } - - WPA2_ClearRSN(pBSSList); /* mike update */ - - if (pRSN) { - unsigned int uLen = pRSN->len + 2; - if (uLen <= (uIELength - - (unsigned int) (u32) ((u8 *) pRSN - pbyIEs))) { - pBSSList->wRSNLen = uLen; - memcpy(pBSSList->byRSNIE, pRSN, uLen); - WPA2vParseRSN(pBSSList, pRSN); - } - } - - if (pRxPacket->uRSSI != 0) { - vnt_rf_rssi_to_dbm(pDevice, (u8)pRxPacket->uRSSI, &ldBm); - /* Monitor if RSSI is too strong. */ - pBSSList->byRSSIStatCnt++; - pBSSList->byRSSIStatCnt %= RSSI_STAT_COUNT; - pBSSList->ldBmAverage[pBSSList->byRSSIStatCnt] = ldBm; - ldBmSum = 0; - for (ii = 0, jj = 0; ii < RSSI_STAT_COUNT; ii++) { - if (pBSSList->ldBmAverage[ii] != 0) { - pBSSList->ldBmMAX = - max(pBSSList->ldBmAverage[ii], ldBm); - ldBmSum += - pBSSList->ldBmAverage[ii]; - jj++; - } - } - pBSSList->ldBmAverRange = ldBmSum / jj; - } - - pBSSList->uIELength = uIELength; - if (pBSSList->uIELength > WLAN_BEACON_FR_MAXLEN) - pBSSList->uIELength = WLAN_BEACON_FR_MAXLEN; - memcpy(pBSSList->abyIEs, pbyIEs, pBSSList->uIELength); - - return true; -} - -/* - * Routine Description: - * Search Node DB table to find the index of matched DstAddr - * - * Return Value: - * None - */ -int BSSbIsSTAInNodeDB(struct vnt_private *pDevice, - u8 *abyDstAddr, - u32 *puNodeIndex) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - unsigned int ii; - - /* Index = 0 reserved for AP Node */ - for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) { - if (pMgmt->sNodeDBTable[ii].bActive && - ether_addr_equal(abyDstAddr, - pMgmt->sNodeDBTable[ii].abyMACAddr)) { - *puNodeIndex = ii; - return true; - } - } - - return false; -}; - -/* - * Routine Description: - * Find an empty node and allocate it; if no empty node - * is found, then use the most inactive one. - * - * Return Value: - * None - */ -void BSSvCreateOneNode(struct vnt_private *pDevice, u32 *puNodeIndex) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - u32 BigestCount = 0; - u32 SelectIndex; - struct sk_buff *skb; - - /* Index = 0 reserved for AP Node (In STA mode) - Index = 0 reserved for Broadcast/MultiCast (In AP mode) */ - SelectIndex = 1; - for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) { - if (pMgmt->sNodeDBTable[ii].bActive) { - if (pMgmt->sNodeDBTable[ii].uInActiveCount > BigestCount) { - BigestCount = - pMgmt->sNodeDBTable[ii].uInActiveCount; - SelectIndex = ii; - } - } else { - break; - } - } - - /* if not found replace uInActiveCount with the largest one. */ - if (ii == (MAX_NODE_NUM + 1)) { - *puNodeIndex = SelectIndex; - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Replace inactive node = %d\n", SelectIndex); - /* clear ps buffer */ - if (pMgmt->sNodeDBTable[*puNodeIndex].sTxPSQueue.next) { - while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[*puNodeIndex].sTxPSQueue))) - dev_kfree_skb(skb); - } - } else { - *puNodeIndex = ii; - } - - memset(&pMgmt->sNodeDBTable[*puNodeIndex], 0, sizeof(KnownNodeDB)); - pMgmt->sNodeDBTable[*puNodeIndex].bActive = true; - pMgmt->sNodeDBTable[*puNodeIndex].uRatePollTimeout = FALLBACK_POLL_SECOND; - /* for AP mode PS queue */ - skb_queue_head_init(&pMgmt->sNodeDBTable[*puNodeIndex].sTxPSQueue); - pMgmt->sNodeDBTable[*puNodeIndex].byAuthSequence = 0; - pMgmt->sNodeDBTable[*puNodeIndex].wEnQueueCnt = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Create node index = %d\n", ii); -} - -/* - * Routine Description: - * Remove Node by NodeIndex - * - * - * Return Value: - * None - */ -void BSSvRemoveOneNode(struct vnt_private *pDevice, u32 uNodeIndex) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u8 byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; - struct sk_buff *skb; - - while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[uNodeIndex].sTxPSQueue))) - dev_kfree_skb(skb); - /* clear context */ - memset(&pMgmt->sNodeDBTable[uNodeIndex], 0, sizeof(KnownNodeDB)); - /* clear tx bit map */ - pMgmt->abyPSTxMap[pMgmt->sNodeDBTable[uNodeIndex].wAID >> 3] &= - ~byMask[pMgmt->sNodeDBTable[uNodeIndex].wAID & 7]; -} - -/* - * Routine Description: - * Update AP Node content in Index 0 of KnownNodeDB - * - * - * Return Value: - * None - */ -void BSSvUpdateAPNode(struct vnt_private *pDevice, - u16 *pwCapInfo, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u32 uRateLen = WLAN_RATES_MAXLEN; - - memset(&pMgmt->sNodeDBTable[0], 0, sizeof(KnownNodeDB)); - - pMgmt->sNodeDBTable[0].bActive = true; - if (pDevice->byBBType == BB_TYPE_11B) - uRateLen = WLAN_RATES_MAXLEN_11B; - pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES) pSuppRates, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates, - uRateLen); - pMgmt->abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES) pExtSuppRates, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates, - uRateLen); - RATEvParseMaxRate((void *) pDevice, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates, - true, - &(pMgmt->sNodeDBTable[0].wMaxBasicRate), - &(pMgmt->sNodeDBTable[0].wMaxSuppRate), - &(pMgmt->sNodeDBTable[0].wSuppRate), - &(pMgmt->sNodeDBTable[0].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[0].byTopOFDMBasicRate)); - memcpy(pMgmt->sNodeDBTable[0].abyMACAddr, pMgmt->abyCurrBSSID, - WLAN_ADDR_LEN); - pMgmt->sNodeDBTable[0].wTxDataRate = pMgmt->sNodeDBTable[0].wMaxSuppRate; - pMgmt->sNodeDBTable[0].bShortPreamble = - WLAN_GET_CAP_INFO_SHORTPREAMBLE(*pwCapInfo); - pMgmt->sNodeDBTable[0].uRatePollTimeout = FALLBACK_POLL_SECOND; - /* Auto rate fallback function initiation. - * RATEbInit(pDevice); */ - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO"pMgmt->sNodeDBTable[0].wTxDataRate = %d\n", - pMgmt->sNodeDBTable[0].wTxDataRate); - -} - -/* - * Routine Description: - * Add Multicast Node content in Index 0 of KnownNodeDB - * - * - * Return Value: - * None - */ -void BSSvAddMulticastNode(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - memset(&pMgmt->sNodeDBTable[0], 0, sizeof(KnownNodeDB)); - - memset(pMgmt->sNodeDBTable[0].abyMACAddr, 0xff, WLAN_ADDR_LEN); - pMgmt->sNodeDBTable[0].bActive = true; - pMgmt->sNodeDBTable[0].bPSEnable = false; - skb_queue_head_init(&pMgmt->sNodeDBTable[0].sTxPSQueue); - RATEvParseMaxRate((void *) pDevice, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrSuppRates, - (PWLAN_IE_SUPP_RATES) pMgmt->abyCurrExtSuppRates, - true, - &(pMgmt->sNodeDBTable[0].wMaxBasicRate), - &(pMgmt->sNodeDBTable[0].wMaxSuppRate), - &(pMgmt->sNodeDBTable[0].wSuppRate), - &(pMgmt->sNodeDBTable[0].byTopCCKBasicRate), - &(pMgmt->sNodeDBTable[0].byTopOFDMBasicRate)); - pMgmt->sNodeDBTable[0].wTxDataRate = pMgmt->sNodeDBTable[0].wMaxBasicRate; - pMgmt->sNodeDBTable[0].uRatePollTimeout = FALLBACK_POLL_SECOND; - -} - -/* - * Routine Description: - * - * - * Second call back function to update Node DB info & AP link status - * - * - * Return Value: - * none. - */ -void BSSvSecondCallBack(struct work_struct *work) -{ - struct vnt_private *pDevice = container_of(work, - struct vnt_private, second_callback_work.work); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - PWLAN_IE_SSID pItemSSID, pCurrSSID; - u32 uSleepySTACnt = 0; - u32 uNonShortSlotSTACnt = 0; - u32 uLongPreambleSTACnt = 0; - - if (pDevice->Flags & fMP_DISCONNECTED) - return; - - pDevice->uAssocCount = 0; - - /* Power Saving Mode Tx Burst */ - if (pDevice->bEnablePSMode == true) { - pDevice->ulPSModeWaitTx++; - if (pDevice->ulPSModeWaitTx >= 2) { - pDevice->ulPSModeWaitTx = 0; - pDevice->bPSModeTxBurst = false; - } - } - - pDevice->byERPFlag &= - ~(WLAN_SET_ERP_BARKER_MODE(1) | WLAN_SET_ERP_NONERP_PRESENT(1)); - - if (pDevice->wUseProtectCntDown > 0) { - pDevice->wUseProtectCntDown--; - } else { - /* disable protect mode */ - pDevice->byERPFlag &= ~(WLAN_SET_ERP_USE_PROTECTION(1)); - } - - if (pDevice->byReAssocCount > 0) { - pDevice->byReAssocCount++; - if (pDevice->byReAssocCount > 10 && - pDevice->bLinkPass != true) { /* 10 sec timeout */ - printk("Re-association timeout!!!\n"); - pDevice->byReAssocCount = 0; - /* if (pDevice->bWPASuppWextEnabled == true) */ - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); - wireless_send_event(pDevice->dev, SIOCGIWAP, - &wrqu, NULL); - } - } else if (pDevice->bLinkPass == true) { - pDevice->byReAssocCount = 0; - } - } - - pMgmt->eLastState = pMgmt->eCurrState; - - s_uCalculateLinkQual(pDevice); - - for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) { - - if (pMgmt->sNodeDBTable[ii].bActive) { - /* Increase in-activity counter */ - pMgmt->sNodeDBTable[ii].uInActiveCount++; - - if (ii > 0) { - if (pMgmt->sNodeDBTable[ii].uInActiveCount > - MAX_INACTIVE_COUNT) { - BSSvRemoveOneNode(pDevice, ii); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Inactive timeout [%d] sec, STA index = [%d] remove\n", - MAX_INACTIVE_COUNT, ii); - continue; - } - - if (pMgmt->sNodeDBTable[ii].eNodeState >= - NODE_ASSOC) { - - pDevice->uAssocCount++; - - /* check if Non ERP exist */ - if (pMgmt->sNodeDBTable[ii].uInActiveCount < - ERP_RECOVER_COUNT) { - if (!pMgmt->sNodeDBTable[ii].bShortPreamble) { - pDevice->byERPFlag |= - WLAN_SET_ERP_BARKER_MODE(1); - uLongPreambleSTACnt++; - } - if (!pMgmt->sNodeDBTable[ii].bERPExist) { - pDevice->byERPFlag |= - WLAN_SET_ERP_NONERP_PRESENT(1); - pDevice->byERPFlag |= - WLAN_SET_ERP_USE_PROTECTION(1); - } - if (!pMgmt->sNodeDBTable[ii].bShortSlotTime) - uNonShortSlotSTACnt++; - } - } - - /* check if any STA in PS mode */ - if (pMgmt->sNodeDBTable[ii].bPSEnable) - uSleepySTACnt++; - - } - - /* Rate fallback check */ - if (!pDevice->bFixRate) { - if (ii > 0) { - /* ii = 0 for multicast node (AP & Adhoc) */ - RATEvTxRateFallBack((void *) pDevice, - &(pMgmt->sNodeDBTable[ii])); - } else if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) { - /* ii = 0 reserved for unicast AP node (Infra STA) */ - RATEvTxRateFallBack((void *) pDevice, - &(pMgmt->sNodeDBTable[ii])); - } - - } - - /* check if pending PS queue */ - if (pMgmt->sNodeDBTable[ii].wEnQueueCnt != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Index= %d, Queue = %d pending\n", - ii, - pMgmt->sNodeDBTable[ii].wEnQueueCnt); - if (ii > 0 && - pMgmt->sNodeDBTable[ii].wEnQueueCnt > 15) { - BSSvRemoveOneNode(pDevice, ii); - DBG_PRT(MSG_LEVEL_NOTICE, - KERN_INFO "Pending many queues PS STA Index = %d remove\n", - ii); - continue; - } - } - } - - } - - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP && - pDevice->byBBType == BB_TYPE_11G) { - - /* on/off protect mode */ - if (WLAN_GET_ERP_USE_PROTECTION(pDevice->byERPFlag)) { - if (!pDevice->bProtectMode) { - vnt_mac_enable_protect_mode(pDevice); - pDevice->bProtectMode = true; - } - } else if (pDevice->bProtectMode) { - vnt_mac_disable_protect_mode(pDevice); - pDevice->bProtectMode = false; - } - /* on/off short slot time */ - - if (uNonShortSlotSTACnt > 0) { - if (pDevice->bShortSlotTime) { - pDevice->bShortSlotTime = false; - BBvSetShortSlotTime(pDevice); - vnt_update_ifs(pDevice); - } - } else if (!pDevice->bShortSlotTime) { - pDevice->bShortSlotTime = true; - BBvSetShortSlotTime(pDevice); - vnt_update_ifs(pDevice); - } - - /* on/off barker long preamble mode */ - - if (uLongPreambleSTACnt > 0) { - if (!pDevice->bBarkerPreambleMd) { - vnt_mac_enable_barker_preamble_mode(pDevice); - pDevice->bBarkerPreambleMd = true; - } - } else if (pDevice->bBarkerPreambleMd) { - vnt_mac_disable_barker_preamble_mode(pDevice); - pDevice->bBarkerPreambleMd = false; - } - - } - - /* Check if any STA in PS mode, enable DTIM multicast deliver */ - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - if (uSleepySTACnt > 0) - pMgmt->sNodeDBTable[0].bPSEnable = true; - else - pMgmt->sNodeDBTable[0].bPSEnable = false; - } - - pItemSSID = (PWLAN_IE_SSID) pMgmt->abyDesireSSID; - pCurrSSID = (PWLAN_IE_SSID) pMgmt->abyCurrSSID; - - if (pMgmt->eCurrMode == WMAC_MODE_STANDBY || - pMgmt->eCurrMode == WMAC_MODE_ESS_STA) { - - if (pMgmt->sNodeDBTable[0].bActive) { /* Assoc with BSS */ - - s_vCheckSensitivity(pDevice); - s_vCheckPreEDThreshold(pDevice); - - if (pMgmt->sNodeDBTable[0].uInActiveCount >= - (LOST_BEACON_COUNT/2) && - pDevice->byBBVGACurrent != pDevice->abyBBVGA[0]) { - pDevice->byBBVGANew = pDevice->abyBBVGA[0]; - bScheduleCommand((void *) pDevice, - WLAN_CMD_CHANGE_BBSENSITIVITY, - NULL); - } - - if (pMgmt->sNodeDBTable[0].uInActiveCount >= - LOST_BEACON_COUNT) { - pMgmt->sNodeDBTable[0].bActive = false; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - pMgmt->eCurrState = WMAC_STATE_IDLE; - netif_stop_queue(pDevice->dev); - pDevice->bLinkPass = false; - - vnt_mac_set_led(pDevice, LEDSTS_STS, - LEDSTS_SLOW); - - pDevice->bRoaming = true; - pDevice->bIsRoaming = false; - - DBG_PRT(MSG_LEVEL_NOTICE, - KERN_INFO "Lost AP beacon [%d] sec, disconnected !\n", - pMgmt->sNodeDBTable[0].uInActiveCount); - /* let wpa supplicant know AP may disconnect */ - { - union iwreq_data wrqu; - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); - wireless_send_event(pDevice->dev, - SIOCGIWAP, - &wrqu, - NULL); - } - } - } else if (pItemSSID->len != 0) { - /* Davidwang */ - if ((pDevice->bEnableRoaming == true) && - (!(pMgmt->Cisco_cckm))) { - 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((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; - } else if (pDevice->bRoaming == false && - pDevice->bIsRoaming == true) { - pDevice->uIsroamingTime++; - if (pDevice->uIsroamingTime >= 20) - pDevice->bIsRoaming = false; - } - } else if (pDevice->uAutoReConnectTime < 10) { - pDevice->uAutoReConnectTime++; - /* network manager support need not do Roaming scan??? */ - if (pDevice->bWPASuppWextEnabled == true) - pDevice->uAutoReConnectTime = 0; - } else { - /* mike use old encryption status for wpa reauthen */ - if (pDevice->bWPADEVUp) - pDevice->eEncryptionStatus = - pDevice->eOldEncryptionStatus; - - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Roaming ...\n"); - 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; - } - } - } - - if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { - /* if adhoc started which essid is NULL string, rescanning. */ - if (pMgmt->eCurrState == WMAC_STATE_STARTED && - pCurrSSID->len == 0) { - if (pDevice->uAutoReConnectTime < 10) { - pDevice->uAutoReConnectTime++; - } else { - DBG_PRT(MSG_LEVEL_NOTICE, - KERN_INFO "Adhoc re-scanning ...\n"); - pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((void *) pDevice, - WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((void *) pDevice, - WLAN_CMD_SSID, NULL); - pDevice->uAutoReConnectTime = 0; - } - } - if (pMgmt->eCurrState == WMAC_STATE_JOINTED) { - - s_vCheckSensitivity(pDevice); - s_vCheckPreEDThreshold(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; - pMgmt->eCurrState = WMAC_STATE_STARTED; - netif_stop_queue(pDevice->dev); - pDevice->bLinkPass = false; - vnt_mac_set_led(pDevice, LEDSTS_STS, - LEDSTS_SLOW); - } - } - } - - if (pDevice->bLinkPass == true) { - if ((pMgmt->eAuthenMode < WMAC_AUTH_WPA || - pDevice->fWPA_Authened == true) && - (++pDevice->tx_data_time_out > 40)) { - pDevice->tx_trigger = true; - - PSbSendNullPacket(pDevice); - - pDevice->tx_trigger = false; - pDevice->tx_data_time_out = 0; - } - - if (netif_queue_stopped(pDevice->dev)) - netif_wake_queue(pDevice->dev); - } - - schedule_delayed_work(&pDevice->second_callback_work, HZ); -} - -/* - * Routine Description: - * - * - * Update Tx attemps, Tx failure counter in Node DB - * - * - * Return Value: - * none. - */ -void BSSvUpdateNodeTxCounter(struct vnt_private *pDevice, u8 byTSR, u8 byPktNO) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_tx_pkt_info *pkt_info = pDevice->pkt_info; - u32 uNodeIndex = 0; - u8 byTxRetry; - u16 wRate; - u16 wFallBackRate = RATE_1M; - u8 byFallBack; - int ii; - u8 *pbyDestAddr; - u8 byPktNum; - u16 wFIFOCtl; - - byPktNum = (byPktNO & 0x0F) >> 4; - byTxRetry = (byTSR & 0xF0) >> 4; - wRate = (u16) (byPktNO & 0xF0) >> 4; - wFIFOCtl = pkt_info[byPktNum].fifo_ctl; - pbyDestAddr = pkt_info[byPktNum].dest_addr; - - if (wFIFOCtl & FIFOCTL_AUTO_FB_0) - byFallBack = AUTO_FB_0; - else if (wFIFOCtl & FIFOCTL_AUTO_FB_1) - byFallBack = AUTO_FB_1; - else - byFallBack = AUTO_FB_NONE; - - /* Only Unicast using support rates */ - if (wFIFOCtl & FIFOCTL_NEEDACK) { - if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) { - pMgmt->sNodeDBTable[0].uTxAttempts += 1; - if (!(byTSR & (TSR_TMO | TSR_RETRYTMO))) { - /* transmit success, TxAttempts at least plus one */ - pMgmt->sNodeDBTable[0].uTxOk[MAX_RATE]++; - if ((byFallBack == AUTO_FB_NONE) || - (wRate < RATE_18M)) { - wFallBackRate = wRate; - } else if (byFallBack == AUTO_FB_0) { - if (byTxRetry < 5) - wFallBackRate = - awHWRetry0[wRate-RATE_18M][byTxRetry]; - else - wFallBackRate = - awHWRetry0[wRate-RATE_18M][4]; - } else if (byFallBack == AUTO_FB_1) { - if (byTxRetry < 5) - wFallBackRate = - awHWRetry1[wRate-RATE_18M][byTxRetry]; - else - wFallBackRate = awHWRetry1[wRate-RATE_18M][4]; - } - pMgmt->sNodeDBTable[0].uTxOk[wFallBackRate]++; - } else { - pMgmt->sNodeDBTable[0].uTxFailures++; - } - pMgmt->sNodeDBTable[0].uTxRetry += byTxRetry; - if (byTxRetry != 0) { - pMgmt->sNodeDBTable[0].uTxFail[MAX_RATE] += byTxRetry; - if (byFallBack == AUTO_FB_NONE || - wRate < RATE_18M) { - pMgmt->sNodeDBTable[0].uTxFail[wRate] += byTxRetry; - } else if (byFallBack == AUTO_FB_0) { - for (ii = 0; ii < byTxRetry; ii++) { - if (ii < 5) - wFallBackRate = - awHWRetry0[wRate-RATE_18M][ii]; - else - wFallBackRate = - awHWRetry0[wRate-RATE_18M][4]; - pMgmt->sNodeDBTable[0].uTxFail[wFallBackRate]++; - } - } else if (byFallBack == AUTO_FB_1) { - for (ii = 0; ii < byTxRetry; ii++) { - if (ii < 5) - wFallBackRate = - awHWRetry1[wRate-RATE_18M][ii]; - else - wFallBackRate = - awHWRetry1[wRate-RATE_18M][4]; - pMgmt->sNodeDBTable[0].uTxFail[wFallBackRate]++; - } - } - } - } - - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA || - pMgmt->eCurrMode == WMAC_MODE_ESS_AP) && - 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]++; - if ((byFallBack == AUTO_FB_NONE) || - (wRate < RATE_18M)) { - wFallBackRate = wRate; - } else if (byFallBack == AUTO_FB_0) { - if (byTxRetry < 5) - wFallBackRate = - awHWRetry0[wRate-RATE_18M][byTxRetry]; - else - wFallBackRate = - awHWRetry0[wRate-RATE_18M][4]; - } else if (byFallBack == AUTO_FB_1) { - if (byTxRetry < 5) - wFallBackRate = - awHWRetry1[wRate-RATE_18M][byTxRetry]; - else - wFallBackRate = - awHWRetry1[wRate-RATE_18M][4]; - } - pMgmt->sNodeDBTable[uNodeIndex].uTxOk[wFallBackRate]++; - } else { - pMgmt->sNodeDBTable[uNodeIndex].uTxFailures++; - } - pMgmt->sNodeDBTable[uNodeIndex].uTxRetry += byTxRetry; - if (byTxRetry != 0) { - pMgmt->sNodeDBTable[uNodeIndex].uTxFail[MAX_RATE] += byTxRetry; - if ((byFallBack == AUTO_FB_NONE) || - (wRate < RATE_18M)) { - pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wRate] += byTxRetry; - } else if (byFallBack == AUTO_FB_0) { - for (ii = 0; ii < byTxRetry; ii++) { - if (ii < 5) - wFallBackRate = - awHWRetry0[wRate-RATE_18M][ii]; - else - wFallBackRate = - awHWRetry0[wRate-RATE_18M][4]; - pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wFallBackRate]++; - } - } else if (byFallBack == AUTO_FB_1) { - for (ii = 0; ii < byTxRetry; ii++) { - if (ii < 5) - wFallBackRate = awHWRetry1[wRate-RATE_18M][ii]; - else - wFallBackRate = awHWRetry1[wRate-RATE_18M][4]; - pMgmt->sNodeDBTable[uNodeIndex].uTxFail[wFallBackRate]++; - } - } - } - } - } -} - -/* - * Routine Description: - * Clear Nodes & skb in DB Table - * - * - * Parameters: - * In: - * hDeviceContext - The adapter context. - * uStartIndex - starting index - * Out: - * none - * - * Return Value: - * None. - */ -void BSSvClearNodeDBTable(struct vnt_private *pDevice, u32 uStartIndex) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct sk_buff *skb; - int ii; - - for (ii = uStartIndex; ii < (MAX_NODE_NUM + 1); ii++) { - if (pMgmt->sNodeDBTable[ii].bActive) { - /* check if sTxPSQueue has been initial */ - if (pMgmt->sNodeDBTable[ii].sTxPSQueue.next) { - while ((skb = skb_dequeue(&pMgmt->sNodeDBTable[ii].sTxPSQueue))) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "PS skb != NULL %d\n", - ii); - dev_kfree_skb(skb); - } - } - memset(&pMgmt->sNodeDBTable[ii], 0, sizeof(KnownNodeDB)); - } - } -} - -static void s_vCheckSensitivity(struct vnt_private *pDevice) -{ - PKnownBSS pBSSList = NULL; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - - if (pMgmt->eCurrState == WMAC_STATE_ASSOC || - (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA && - pMgmt->eCurrState == WMAC_STATE_JOINTED)) { - pBSSList = BSSpAddrIsInBSSList(pDevice, pMgmt->abyCurrBSSID, - (PWLAN_IE_SSID) pMgmt->abyCurrSSID); - if (pBSSList) { - /* 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++; - LocalldBmAverage += pBSSList->ldBmAverage[ii]; - } - } - if (uNumofdBm > 0) { - LocalldBmAverage = LocalldBmAverage/uNumofdBm; - for (ii = 0; ii < BB_VGA_LEVEL; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO"LocalldBmAverage:%ld, %ld %02x\n", - LocalldBmAverage, - pDevice->ldBmThreshold[ii], - pDevice->abyBBVGA[ii]); - if (LocalldBmAverage < pDevice->ldBmThreshold[ii]) { - pDevice->byBBVGANew = - pDevice->abyBBVGA[ii]; - break; - } - } - if (pDevice->byBBVGANew != - pDevice->byBBVGACurrent) { - pDevice->uBBVGADiffCount++; - if (pDevice->uBBVGADiffCount >= - BB_VGA_CHANGE_THRESHOLD) - bScheduleCommand(pDevice, - WLAN_CMD_CHANGE_BBSENSITIVITY, - NULL); - } else { - pDevice->uBBVGADiffCount = 0; - } - } - } - } -} - -static void s_uCalculateLinkQual(struct vnt_private *pDevice) -{ - struct net_device_stats *stats = &pDevice->stats; - unsigned long TxOkRatio, TxCnt; - unsigned long RxOkRatio, RxCnt; - unsigned long RssiRatio; - unsigned long qual; - long ldBm; - - TxCnt = stats->tx_packets + pDevice->wstats.discard.retries; - - RxCnt = stats->rx_packets + stats->rx_frame_errors; - - TxOkRatio = (TxCnt < 6) ? 4000:((stats->tx_packets * 4000) / TxCnt); - - RxOkRatio = (RxCnt < 6) ? 2000 : - ((stats->rx_packets * 2000) / RxCnt); - - /* decide link quality */ - if (pDevice->bLinkPass != true) { - pDevice->wstats.qual.qual = 0; - } else { - vnt_rf_rssi_to_dbm(pDevice, (u8) (pDevice->uCurrRSSI), &ldBm); - if (-ldBm < 50) - RssiRatio = 4000; - else if (-ldBm > 90) - RssiRatio = 0; - else - RssiRatio = (40-(-ldBm-50)) * 4000 / 40; - - qual = (RssiRatio + TxOkRatio + RxOkRatio) / 100; - if (qual < 100) - pDevice->wstats.qual.qual = (u8) qual; - else - pDevice->wstats.qual.qual = 100; - } -} - -void BSSvClearAnyBSSJoinRecord(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - int ii; - - for (ii = 0; ii < MAX_BSS_NUM; ii++) - pMgmt->sBSSList[ii].bSelected = false; - - return; -} - -static void s_vCheckPreEDThreshold(struct vnt_private *pDevice) -{ - PKnownBSS pBSSList = NULL; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - - if (pMgmt->eCurrState == WMAC_STATE_ASSOC || - (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA && - pMgmt->eCurrState == WMAC_STATE_JOINTED)) { - pBSSList = BSSpAddrIsInBSSList(pDevice, - pMgmt->abyCurrBSSID, - (PWLAN_IE_SSID) pMgmt->abyCurrSSID); - if (pBSSList) { - pDevice->byBBPreEDRSSI = - (u8) (~(pBSSList->ldBmAverRange) + 1); - BBvUpdatePreEDThreshold(pDevice, false); - } - } -} - diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 8df3fb2a6199..d41596560274 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -208,69 +208,5 @@ typedef struct tagKnownNodeDB { } KnownNodeDB, *PKnownNodeDB; -PKnownBSS BSSpSearchBSSList(struct vnt_private *, u8 *pbyDesireBSSID, - u8 *pbyDesireSSID, CARD_PHY_TYPE ePhyType); - -PKnownBSS BSSpAddrIsInBSSList(struct vnt_private *, u8 *abyBSSID, - PWLAN_IE_SSID pSSID); - -void BSSvClearBSSList(struct vnt_private *, int bKeepCurrBSSID); - -int BSSbInsertToBSSList(struct vnt_private *, - u8 *abyBSSIDAddr, - u64 qwTimestamp, - u16 wBeaconInterval, - u16 wCapInfo, - u8 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, - u32 uIELength, - u8 *pbyIEs, - void *pRxPacketContext); - -int BSSbUpdateToBSSList(struct vnt_private *, - u64 qwTimestamp, - u16 wBeaconInterval, - u16 wCapInfo, - u8 byCurrChannel, - int 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, - u32 uIELength, - u8 *pbyIEs, - void *pRxPacketContext); - -int BSSbIsSTAInNodeDB(struct vnt_private *, u8 * abyDstAddr, - u32 *puNodeIndex); - -void BSSvCreateOneNode(struct vnt_private *, u32 *puNodeIndex); - -void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo, - PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pExtSuppRates); - -void BSSvSecondCallBack(struct work_struct *work); - -void BSSvUpdateNodeTxCounter(struct vnt_private *, u8 byTSR, u8 byPktNO); - -void BSSvRemoveOneNode(struct vnt_private *, u32 uNodeIndex); - -void BSSvAddMulticastNode(struct vnt_private *); - -void BSSvClearNodeDBTable(struct vnt_private *, u32 uStartIndex); - -void BSSvClearAnyBSSJoinRecord(struct vnt_private *); #endif /* __BSSDB_H__ */ -- cgit From 1184337b3b63e725e6692e946a24bbf550ed9081 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:47 +0100 Subject: staging: vt6656: dead code wpactl Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/wpactl.c | 246 -------------------------------------- drivers/staging/vt6656/wpactl.h | 47 -------- 4 files changed, 295 deletions(-) delete mode 100644 drivers/staging/vt6656/wpactl.c delete mode 100644 drivers/staging/vt6656/wpactl.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 28cdb4f929c6..466534ebecfb 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -21,7 +21,6 @@ vt6656_stage-y += main_usb.o \ tkip.o \ michael.o \ rf.o \ - wpactl.o \ usbpipe.o \ channel.o \ firmware.o \ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0d71430af7a7..f4cbeb3a6199 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -58,7 +58,6 @@ #include "wcmd.h" #include "rxtx.h" #include "bssdb.h" -#include "wpactl.h" #include "dpc.h" #include "datarate.h" #include "rf.h" diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c deleted file mode 100644 index 375207222bae..000000000000 --- a/drivers/staging/vt6656/wpactl.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wpactl.c - * - * Purpose: handle wpa supplicant ioctl input/out functions - * - * Author: Lyndon Chen - * - * Date: July 28, 2006 - * - * Functions: - * - * Revision History: - * - */ - -#include "wpactl.h" -#include "key.h" -#include "mac.h" -#include "device.h" -#include "wmgr.h" -#include "iowpa.h" -#include "usbpipe.h" -#include "rf.h" - -static int msglevel = MSG_LEVEL_INFO; - -/* - * Description: - * Set WPA algorithm & keys - * - * Parameters: - * In: - * pDevice - - * param - - * Out: - * - * Return Value: - * - */ -int wpa_set_keys(struct vnt_private *pDevice, void *ctx) -{ - struct viawget_wpa_param *param = ctx; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u32 dwKeyIndex = 0; - u8 abyKey[MAX_KEY_LEN]; - u8 abySeq[MAX_KEY_LEN]; - u64 KeyRSC; - u8 byKeyDecMode = KEY_CTL_WEP; - int ret = 0; - u8 uu; - int ii; - - if (param->u.wpa_key.alg_name > WPA_ALG_CCMP) - return -EINVAL; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "param->u.wpa_key.alg_name = %d \n", - param->u.wpa_key.alg_name); - if (param->u.wpa_key.alg_name == WPA_ALG_NONE) { - pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; - pDevice->bEncryptionEnable = false; - pDevice->byKeyIndex = 0; - pDevice->bTransmitKey = false; - for (uu=0; uuu.wpa_key.key_len > sizeof(abyKey)) - return -EINVAL; - - memcpy(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len); - - dwKeyIndex = (u32)(param->u.wpa_key.key_index); - - if (param->u.wpa_key.alg_name == WPA_ALG_WEP) { - if (dwKeyIndex > 3) { - return -EINVAL; - } else { - if (param->u.wpa_key.set_tx) { - pDevice->byKeyIndex = (u8)dwKeyIndex; - pDevice->bTransmitKey = true; - dwKeyIndex |= (1 << 31); - } - KeybSetDefaultKey( pDevice, - &(pDevice->sKey), - dwKeyIndex & ~(BIT30 | USE_KEYRSC), - param->u.wpa_key.key_len, - NULL, - abyKey, - KEY_CTL_WEP - ); - - } - pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled; - pDevice->bEncryptionEnable = true; - return ret; - } - - if (param->u.wpa_key.seq && param->u.wpa_key.seq_len > sizeof(abySeq)) - return -EINVAL; - - memcpy(&abySeq[0], param->u.wpa_key.seq, param->u.wpa_key.seq_len); - - if (param->u.wpa_key.seq_len > 0) { - for (ii = 0 ; ii < param->u.wpa_key.seq_len ; ii++) { - if (ii < 4) - KeyRSC |= (abySeq[ii] << (ii * 8)); - else - KeyRSC |= (abySeq[ii] << ((ii-4) * 8)); - } - dwKeyIndex |= 1 << 29; - } - - if (param->u.wpa_key.key_index >= MAX_GROUP_KEY) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "return dwKeyIndex > 3\n"); - return -EINVAL; - } - - if (param->u.wpa_key.alg_name == WPA_ALG_TKIP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled; - } - - if (param->u.wpa_key.alg_name == WPA_ALG_CCMP) { - pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled; - } - - if (param->u.wpa_key.set_tx) - dwKeyIndex |= (1 << 31); - - if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) - byKeyDecMode = KEY_CTL_CCMP; - else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) - byKeyDecMode = KEY_CTL_TKIP; - else - byKeyDecMode = KEY_CTL_WEP; - - // Fix HCT test that set 256 bits KEY and Ndis802_11Encryption3Enabled - if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) { - if (param->u.wpa_key.key_len == MAX_KEY_LEN) - byKeyDecMode = KEY_CTL_TKIP; - else if (param->u.wpa_key.key_len == WLAN_WEP40_KEYLEN) - byKeyDecMode = KEY_CTL_WEP; - else if (param->u.wpa_key.key_len == WLAN_WEP104_KEYLEN) - byKeyDecMode = KEY_CTL_WEP; - } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) { - if (param->u.wpa_key.key_len == WLAN_WEP40_KEYLEN) - byKeyDecMode = KEY_CTL_WEP; - else if (param->u.wpa_key.key_len == WLAN_WEP104_KEYLEN) - byKeyDecMode = KEY_CTL_WEP; - } - - // Check TKIP key length - if ((byKeyDecMode == KEY_CTL_TKIP) && - (param->u.wpa_key.key_len != MAX_KEY_LEN)) { - // TKIP Key must be 256 bits - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "return - TKIP Key must be 256 bits!\n"); - return -EINVAL; - } - // Check AES key length - if ((byKeyDecMode == KEY_CTL_CCMP) && - (param->u.wpa_key.key_len != AES_KEY_LEN)) { - // AES Key must be 128 bits - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "return - AES Key must be 128 bits\n"); - return -EINVAL; - } - - if (is_broadcast_ether_addr(¶m->addr[0]) || (param->addr == NULL)) { - /* if broadcast, set the key as every key entry's group key */ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Groupe Key Assign.\n"); - - if ((KeybSetAllGroupKey(pDevice, &(pDevice->sKey), dwKeyIndex, - param->u.wpa_key.key_len, - &KeyRSC, - (u8 *)abyKey, - byKeyDecMode - ) == true) && - (KeybSetDefaultKey(pDevice, - &(pDevice->sKey), - dwKeyIndex, - param->u.wpa_key.key_len, - &KeyRSC, - (u8 *)abyKey, - byKeyDecMode - ) == true) ) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "GROUP Key Assign.\n"); - } else { - return -EINVAL; - } - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Pairwise Key Assign.\n"); - // BSSID not 0xffffffffffff - // Pairwise Key can't be WEP - if (byKeyDecMode == KEY_CTL_WEP) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Pairwise Key can't be WEP\n"); - return -EINVAL; - } - dwKeyIndex |= (1 << 30); // set pairwise key - if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA) { - //DBG_PRN_WLAN03(("return NDIS_STATUS_INVALID_DATA - WMAC_CONFIG_IBSS_STA\n")); - return -EINVAL; - } - if (KeybSetKey(pDevice, &(pDevice->sKey), ¶m->addr[0], - dwKeyIndex, param->u.wpa_key.key_len, - &KeyRSC, (u8 *)abyKey, byKeyDecMode - ) == true) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Pairwise Key Set\n"); - } else { - // Key Table Full - if (ether_addr_equal(param->addr, pDevice->abyBSSID)) { - //DBG_PRN_WLAN03(("return NDIS_STATUS_INVALID_DATA -Key Table Full.2\n")); - return -EINVAL; - } else { - // Save Key and configure just before associate/reassociate to BSSID - // we do not implement now - return -EINVAL; - } - } - } // BSSID not 0xffffffffffff - if ((ret == 0) && ((param->u.wpa_key.set_tx) != 0)) { - pDevice->byKeyIndex = (u8)param->u.wpa_key.key_index; - pDevice->bTransmitKey = true; - } - pDevice->bEncryptionEnable = true; - - return ret; -} - diff --git a/drivers/staging/vt6656/wpactl.h b/drivers/staging/vt6656/wpactl.h deleted file mode 100644 index e032a1b94ae8..000000000000 --- a/drivers/staging/vt6656/wpactl.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: wpactl.h - * - * Purpose: - * - * Author: Lyndon Chen - * - * Date: March 1, 2005 - * - */ - -#ifndef __WPACTL_H__ -#define __WPACTL_H__ - -#include "device.h" -#include "iowpa.h" - -//WPA related - -typedef enum { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP } wpa_alg; - -#define AUTH_ALG_OPEN_SYSTEM 0x01 -#define AUTH_ALG_SHARED_KEY 0x02 -#define AUTH_ALG_LEAP 0x04 - -typedef unsigned long long NDIS_802_11_KEY_RSC; - -int wpa_set_keys(struct vnt_private *, void *ctx); - -#endif /* __WPACL_H__ */ -- cgit From efc839591e706338fa8cfcd372b19c531090e4a9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:48 +0100 Subject: staging: vt6656: dead code remove wpa2.c Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/wmgr.h | 2 - drivers/staging/vt6656/wpa2.c | 235 ---------------------------------------- drivers/staging/vt6656/wpa2.h | 53 --------- 4 files changed, 291 deletions(-) delete mode 100644 drivers/staging/vt6656/wpa2.c delete mode 100644 drivers/staging/vt6656/wpa2.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 466534ebecfb..5ac0dbd95ec5 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -9,7 +9,6 @@ vt6656_stage-y += main_usb.o \ wctl.o \ 80211mgr.o \ wcmd.o\ - wpa2.o \ rxtx.o \ dpc.o \ power.o \ diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index 34c280372e19..243906847753 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -38,7 +38,6 @@ #include "80211hdr.h" #include "wcmd.h" #include "bssdb.h" -#include "wpa2.h" #include "card.h" // Scan time @@ -324,7 +323,6 @@ struct vnt_manager { KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; /* WPA2 PMKID Cache */ - SPMKIDCache gsPMKIDCache; int bRoaming; /* associate info */ diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c deleted file mode 100644 index df5541794e0f..000000000000 --- a/drivers/staging/vt6656/wpa2.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wpa2.c - * - * Purpose: Handles the Basic Service Set & Node Database functions - * - * Functions: - * - * Revision History: - * - * Author: Yiching Chen - * - * Date: Oct. 4, 2004 - * - */ - -#include "device.h" -#include "wpa2.h" - -static int msglevel =MSG_LEVEL_INFO; -//static int msglevel =MSG_LEVEL_DEBUG; - -static const u8 abyOUIGK[4] = { 0x00, 0x0F, 0xAC, 0x00 }; -static const u8 abyOUIWEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 }; -static const u8 abyOUIWEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 }; -static const u8 abyOUITKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 }; -static const u8 abyOUICCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 }; - -static const u8 abyOUI8021X[4] = { 0x00, 0x0F, 0xAC, 0x01 }; -static const u8 abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 }; - -/*+ - * - * Description: - * Clear RSN information in BSSList. - * - * Parameters: - * In: - * pBSSNode - BSS list. - * Out: - * none - * - * Return Value: none. - * --*/ -void -WPA2_ClearRSN ( - PKnownBSS pBSSNode - ) -{ - int ii; - - pBSSNode->bWPA2Valid = false; - - pBSSNode->byCSSGK = WLAN_11i_CSS_CCMP; - for (ii=0; ii < 4; ii ++) - pBSSNode->abyCSSPK[ii] = WLAN_11i_CSS_CCMP; - pBSSNode->wCSSPKCount = 1; - for (ii=0; ii < 4; ii ++) - pBSSNode->abyAKMSSAuthType[ii] = WLAN_11i_AKMSS_802_1X; - pBSSNode->wAKMSSAuthCount = 1; - pBSSNode->sRSNCapObj.bRSNCapExist = false; - pBSSNode->sRSNCapObj.wRSNCap = 0; -} - -/*+ - * - * Description: - * Parse RSN IE. - * - * Parameters: - * In: - * pBSSNode - BSS list. - * pRSN - Pointer to the RSN IE. - * Out: - * none - * - * Return Value: none. - * --*/ -void -WPA2vParseRSN ( - PKnownBSS pBSSNode, - PWLAN_IE_RSN pRSN - ) -{ - int i, j; - u16 m = 0, n = 0; - u8 * pbyOUI; - bool bUseGK = false; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"WPA2_ParseRSN: [%d]\n", pRSN->len); - - WPA2_ClearRSN(pBSSNode); - - if (pRSN->len == 2) { // ver(2) - if ((pRSN->byElementID == WLAN_EID_RSN) && (pRSN->wVersion == 1)) { - pBSSNode->bWPA2Valid = true; - } - return; - } - - if (pRSN->len < 6) { // ver(2) + GK(4) - // invalid CSS, P802.11i/D10.0, p31 - return; - } - - // information element header makes sense - if ((pRSN->byElementID == WLAN_EID_RSN) && - (pRSN->wVersion == 1)) { - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Legal 802.11i RSN\n"); - - pbyOUI = &(pRSN->abyRSN[0]); - if ( !memcmp(pbyOUI, abyOUIWEP40, 4)) - pBSSNode->byCSSGK = WLAN_11i_CSS_WEP40; - else if ( !memcmp(pbyOUI, abyOUITKIP, 4)) - pBSSNode->byCSSGK = WLAN_11i_CSS_TKIP; - else if ( !memcmp(pbyOUI, abyOUICCMP, 4)) - pBSSNode->byCSSGK = WLAN_11i_CSS_CCMP; - else if ( !memcmp(pbyOUI, abyOUIWEP104, 4)) - pBSSNode->byCSSGK = WLAN_11i_CSS_WEP104; - else if ( !memcmp(pbyOUI, abyOUIGK, 4)) { - // invalid CSS, P802.11i/D10.0, p32 - return; - } else - // any vendor checks here - pBSSNode->byCSSGK = WLAN_11i_CSS_UNKNOWN; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"802.11i CSS: %X\n", pBSSNode->byCSSGK); - - if (pRSN->len == 6) { - pBSSNode->bWPA2Valid = true; - return; - } - - if (pRSN->len >= 8) { // ver(2) + GK(4) + PK count(2) - pBSSNode->wCSSPKCount = *((u16 *) &(pRSN->abyRSN[4])); - j = 0; - pbyOUI = &(pRSN->abyRSN[6]); - - for (i = 0; (i < pBSSNode->wCSSPKCount) && (j < sizeof(pBSSNode->abyCSSPK)/sizeof(u8)); i++) { - - if (pRSN->len >= 8+i*4+4) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*i) - if ( !memcmp(pbyOUI, abyOUIGK, 4)) { - pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_USE_GROUP; - bUseGK = true; - } else if ( !memcmp(pbyOUI, abyOUIWEP40, 4)) { - // Invalid CSS, continue parsing - } else if ( !memcmp(pbyOUI, abyOUITKIP, 4)) { - if (pBSSNode->byCSSGK != WLAN_11i_CSS_CCMP) - pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_TKIP; - else - ; // Invalid CSS, continue parsing - } else if ( !memcmp(pbyOUI, abyOUICCMP, 4)) { - pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_CCMP; - } else if ( !memcmp(pbyOUI, abyOUIWEP104, 4)) { - // Invalid CSS, continue parsing - } else { - // any vendor checks here - pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_UNKNOWN; - } - pbyOUI += 4; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"abyCSSPK[%d]: %X\n", j-1, pBSSNode->abyCSSPK[j-1]); - } else - break; - } //for - - if (bUseGK == true) { - if (j != 1) { - // invalid CSS, This should be only PK CSS. - return; - } - if (pBSSNode->byCSSGK == WLAN_11i_CSS_CCMP) { - // invalid CSS, If CCMP is enable , PK can't be CSSGK. - return; - } - } - if ((pBSSNode->wCSSPKCount != 0) && (j == 0)) { - // invalid CSS, No valid PK. - return; - } - pBSSNode->wCSSPKCount = (u16)j; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wCSSPKCount: %d\n", pBSSNode->wCSSPKCount); - } - - m = *((u16 *) &(pRSN->abyRSN[4])); - - if (pRSN->len >= 10+m*4) { // ver(2) + GK(4) + PK count(2) + PKS(4*m) + AKMSS count(2) - pBSSNode->wAKMSSAuthCount = *((u16 *) &(pRSN->abyRSN[6+4*m])); - j = 0; - pbyOUI = &(pRSN->abyRSN[8+4*m]); - for (i = 0; (i < pBSSNode->wAKMSSAuthCount) && (j < sizeof(pBSSNode->abyAKMSSAuthType)/sizeof(u8)); i++) { - if (pRSN->len >= 10+(m+i)*4+4) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*m)+AKMSS(2)+AKS(4*i) - if ( !memcmp(pbyOUI, abyOUI8021X, 4)) - pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_802_1X; - else if ( !memcmp(pbyOUI, abyOUIPSK, 4)) - pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_PSK; - else - // any vendor checks here - pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_UNKNOWN; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"abyAKMSSAuthType[%d]: %X\n", j-1, pBSSNode->abyAKMSSAuthType[j-1]); - } else - break; - } - pBSSNode->wAKMSSAuthCount = (u16)j; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAKMSSAuthCount: %d\n", pBSSNode->wAKMSSAuthCount); - - n = *((u16 *) &(pRSN->abyRSN[6+4*m])); - if (pRSN->len >= 12+4*m+4*n) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*m)+AKMSSCnt(2)+AKMSS(4*n)+Cap(2) - pBSSNode->sRSNCapObj.bRSNCapExist = true; - pBSSNode->sRSNCapObj.wRSNCap = *((u16 *) &(pRSN->abyRSN[8+4*m+4*n])); - } - } - //ignore PMKID lists bcs only (Re)Assocrequest has this field - pBSSNode->bWPA2Valid = true; - } -} diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h deleted file mode 100644 index dc505ce7a7e4..000000000000 --- a/drivers/staging/vt6656/wpa2.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wpa2.h - * - * Purpose: Defines the macros, types, and functions for dealing - * with WPA2 informations. - * - * Author: Yiching Chen - * - * Date: Oct. 4, 2004 - * - */ - -#ifndef __WPA2_H__ -#define __WPA2_H__ - -#include "80211mgr.h" -#include "80211hdr.h" -#include "bssdb.h" - -#define MAX_PMKID_CACHE 16 - -typedef struct tagsPMKIDInfo { - u8 abyBSSID[6]; - u8 abyPMKID[16]; -} PMKIDInfo, *PPMKIDInfo; - -typedef struct tagSPMKIDCache { - u32 BSSIDInfoCount; - PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE]; -} SPMKIDCache, *PSPMKIDCache; - -void WPA2_ClearRSN(PKnownBSS pBSSNode); -void WPA2vParseRSN(PKnownBSS pBSSNode, PWLAN_IE_RSN pRSN); - -#endif /* __WPA2_H__ */ -- cgit From 04311c499f1ada386f7e7f0529e6b63540ed4a62 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:49 +0100 Subject: staging: vt6656: remove dead code wpa Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/80211mgr.c | 11 -- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/wpa.c | 314 -------------------------------------- drivers/staging/vt6656/wpa.h | 72 --------- 4 files changed, 398 deletions(-) delete mode 100644 drivers/staging/vt6656/wpa.c delete mode 100644 drivers/staging/vt6656/wpa.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/80211mgr.c b/drivers/staging/vt6656/80211mgr.c index 61edb51f3836..48baef9efd0e 100644 --- a/drivers/staging/vt6656/80211mgr.c +++ b/drivers/staging/vt6656/80211mgr.c @@ -54,7 +54,6 @@ #include "tether.h" #include "80211mgr.h" #include "80211hdr.h" -#include "wpa.h" static int msglevel = MSG_LEVEL_INFO; /*static int msglevel =MSG_LEVEL_DEBUG;*/ @@ -158,10 +157,6 @@ vMgrDecodeBeacon( pFrame->pRSN = (PWLAN_IE_RSN)pItem; break; case WLAN_EID_RSN_WPA: - if (pFrame->pRSNWPA == NULL) { - if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true) - pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem; - } break; case WLAN_EID_ERP: @@ -325,8 +320,6 @@ vMgrDecodeAssocRequest( break; case WLAN_EID_RSN_WPA: if (pFrame->pRSNWPA == NULL) { - if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true) - pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem; } break; case WLAN_EID_EXTSUPP_RATES: @@ -491,8 +484,6 @@ vMgrDecodeReassocRequest( break; case WLAN_EID_RSN_WPA: if (pFrame->pRSNWPA == NULL) - if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true) - pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem; break; case WLAN_EID_EXTSUPP_RATES: @@ -673,8 +664,6 @@ vMgrDecodeProbeResponse( break; case WLAN_EID_RSN_WPA: if (pFrame->pRSNWPA == NULL) { - if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true) - pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem; } break; case WLAN_EID_ERP: diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 5ac0dbd95ec5..1be7d608bb9e 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -15,7 +15,6 @@ vt6656_stage-y += main_usb.o \ datarate.o \ rc4.o \ tether.o \ - wpa.o \ key.o \ tkip.o \ michael.o \ diff --git a/drivers/staging/vt6656/wpa.c b/drivers/staging/vt6656/wpa.c deleted file mode 100644 index 403c295cc02c..000000000000 --- a/drivers/staging/vt6656/wpa.c +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wpa.c - * - * Purpose: Handles the Basic Service Set & Node Database functions - * - * Functions: - * WPA_ParseRSN - Parse RSN IE. - * - * Revision History: - * - * Author: Kyle Hsu - * - * Date: July 14, 2003 - * - */ - -#include "tmacro.h" -#include "tether.h" -#include "device.h" -#include "80211hdr.h" -#include "bssdb.h" -#include "wmgr.h" -#include "wpa.h" -#include "80211mgr.h" - -static int msglevel =MSG_LEVEL_INFO; - -static const u8 abyOUI00[4] = { 0x00, 0x50, 0xf2, 0x00 }; -static const u8 abyOUI01[4] = { 0x00, 0x50, 0xf2, 0x01 }; -static const u8 abyOUI02[4] = { 0x00, 0x50, 0xf2, 0x02 }; -static const u8 abyOUI03[4] = { 0x00, 0x50, 0xf2, 0x03 }; -static const u8 abyOUI04[4] = { 0x00, 0x50, 0xf2, 0x04 }; -static const u8 abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 }; - -/*+ - * - * Description: - * Clear RSN information in BSSList. - * - * Parameters: - * In: - * pBSSList - BSS list. - * Out: - * none - * - * Return Value: none. - * --*/ - -void -WPA_ClearRSN( - PKnownBSS pBSSList - ) -{ - int ii; - pBSSList->byGKType = WPA_TKIP; - for (ii=0; ii < 4; ii ++) - pBSSList->abyPKType[ii] = WPA_TKIP; - pBSSList->wPKCount = 0; - for (ii=0; ii < 4; ii ++) - pBSSList->abyAuthType[ii] = WPA_AUTH_IEEE802_1X; - pBSSList->wAuthCount = 0; - pBSSList->byDefaultK_as_PK = 0; - pBSSList->byReplayIdx = 0; - pBSSList->sRSNCapObj.bRSNCapExist = false; - pBSSList->sRSNCapObj.wRSNCap = 0; - pBSSList->bWPAValid = false; -} - -/*+ - * - * Description: - * Parse RSN IE. - * - * Parameters: - * In: - * pBSSList - BSS list. - * pRSN - Pointer to the RSN IE. - * Out: - * none - * - * Return Value: none. - * --*/ -void -WPA_ParseRSN( - PKnownBSS pBSSList, - PWLAN_IE_RSN_EXT pRSN - ) -{ - PWLAN_IE_RSN_AUTH pIE_RSN_Auth = NULL; - int i, j, m, n = 0; - u8 * pbyCaps; - - WPA_ClearRSN(pBSSList); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"WPA_ParseRSN: [%d]\n", pRSN->len); - - // information element header makes sense - if ((pRSN->len >= 6) // oui1(4)+ver(2) - && (pRSN->byElementID == WLAN_EID_RSN_WPA) && !memcmp(pRSN->abyOUI, abyOUI01, 4) - && (pRSN->wVersion == 1)) { - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Legal RSN\n"); - // update each variable if pRSN is long enough to contain the variable - if (pRSN->len >= 10) //oui1(4)+ver(2)+GKSuite(4) - { - if ( !memcmp(pRSN->abyMulticast, abyOUI01, 4)) - pBSSList->byGKType = WPA_WEP40; - else if ( !memcmp(pRSN->abyMulticast, abyOUI02, 4)) - pBSSList->byGKType = WPA_TKIP; - else if ( !memcmp(pRSN->abyMulticast, abyOUI03, 4)) - pBSSList->byGKType = WPA_AESWRAP; - else if ( !memcmp(pRSN->abyMulticast, abyOUI04, 4)) - pBSSList->byGKType = WPA_AESCCMP; - else if ( !memcmp(pRSN->abyMulticast, abyOUI05, 4)) - pBSSList->byGKType = WPA_WEP104; - else - // any vendor checks here - pBSSList->byGKType = WPA_NONE; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"byGKType: %x\n", pBSSList->byGKType); - } - - if (pRSN->len >= 12) //oui1(4)+ver(2)+GKS(4)+PKSCnt(2) - { - j = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wPKCount: %d, sizeof(pBSSList->abyPKType): %zu\n", pRSN->wPKCount, sizeof(pBSSList->abyPKType)); - for (i = 0; (i < pRSN->wPKCount) && - (j < ARRAY_SIZE(pBSSList->abyPKType)); i++) { - if(pRSN->len >= 12+i*4+4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*i) - if ( !memcmp(pRSN->PKSList[i].abyOUI, abyOUI00, 4)) - pBSSList->abyPKType[j++] = WPA_NONE; - else if ( !memcmp(pRSN->PKSList[i].abyOUI, abyOUI02, 4)) - pBSSList->abyPKType[j++] = WPA_TKIP; - else if ( !memcmp(pRSN->PKSList[i].abyOUI, abyOUI03, 4)) - pBSSList->abyPKType[j++] = WPA_AESWRAP; - else if ( !memcmp(pRSN->PKSList[i].abyOUI, abyOUI04, 4)) - pBSSList->abyPKType[j++] = WPA_AESCCMP; - else - // any vendor checks here - ; - } - else - break; - //DBG_PRN_GRP14(("abyPKType[%d]: %X\n", j-1, pBSSList->abyPKType[j-1])); - } //for - pBSSList->wPKCount = (u16)j; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wPKCount: %d\n", pBSSList->wPKCount); - } - - m = pRSN->wPKCount; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"m: %d\n", m); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"14+m*4: %d\n", 14+m*4); - - if (pRSN->len >= 14+m*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2) - // overlay IE_RSN_Auth structure into correct place - pIE_RSN_Auth = (PWLAN_IE_RSN_AUTH) pRSN->PKSList[m].abyOUI; - j = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAuthCount: %d, sizeof(pBSSList->abyAuthType): %zu\n", - pIE_RSN_Auth->wAuthCount, sizeof(pBSSList->abyAuthType)); - for (i = 0; (i < pIE_RSN_Auth->wAuthCount) && - (j < ARRAY_SIZE(pBSSList->abyAuthType)); i++) { - if(pRSN->len >= 14+4+(m+i)*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2)+AKS(4*i) - if ( !memcmp(pIE_RSN_Auth->AuthKSList[i].abyOUI, abyOUI01, 4)) - pBSSList->abyAuthType[j++] = WPA_AUTH_IEEE802_1X; - else if ( !memcmp(pIE_RSN_Auth->AuthKSList[i].abyOUI, abyOUI02, 4)) - pBSSList->abyAuthType[j++] = WPA_AUTH_PSK; - else - // any vendor checks here - ; - } - else - break; - //DBG_PRN_GRP14(("abyAuthType[%d]: %X\n", j-1, pBSSList->abyAuthType[j-1])); - } - if(j > 0) - pBSSList->wAuthCount = (u16)j; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAuthCount: %d\n", pBSSList->wAuthCount); - } - - if (pIE_RSN_Auth != NULL) { - - n = pIE_RSN_Auth->wAuthCount; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"n: %d\n", n); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"14+4+(m+n)*4: %d\n", 14+4+(m+n)*4); - - if(pRSN->len+2 >= 14+4+(m+n)*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2)+AKS(4*n)+Cap(2) - pbyCaps = (u8 *)pIE_RSN_Auth->AuthKSList[n].abyOUI; - pBSSList->byDefaultK_as_PK = (*pbyCaps) & WPA_GROUPFLAG; - pBSSList->byReplayIdx = 2 << ((*pbyCaps >> WPA_REPLAYBITSSHIFT) & WPA_REPLAYBITS); - pBSSList->sRSNCapObj.bRSNCapExist = true; - pBSSList->sRSNCapObj.wRSNCap = *(u16 *)pbyCaps; - //DBG_PRN_GRP14(("pbyCaps: %X\n", *pbyCaps)); - //DBG_PRN_GRP14(("byDefaultK_as_PK: %X\n", pBSSList->byDefaultK_as_PK)); - //DBG_PRN_GRP14(("byReplayIdx: %X\n", pBSSList->byReplayIdx)); - } - } - pBSSList->bWPAValid = true; - } -} - -/*+ - * - * Description: - * Search RSN information in BSSList. - * - * Parameters: - * In: - * byCmd - Search type - * byEncrypt- Encrypt Type - * pBSSList - BSS list - * Out: - * none - * - * Return Value: none. - * --*/ -bool -WPA_SearchRSN( - u8 byCmd, - u8 byEncrypt, - PKnownBSS pBSSList - ) -{ - int ii; - u8 byPKType = WPA_NONE; - - if (pBSSList->bWPAValid == false) - return false; - - switch(byCmd) { - case 0: - - if (byEncrypt != pBSSList->byGKType) - return false; - - if (pBSSList->wPKCount > 0) { - for (ii = 0; ii < pBSSList->wPKCount; ii ++) { - if (pBSSList->abyPKType[ii] == WPA_AESCCMP) - byPKType = WPA_AESCCMP; - else if ((pBSSList->abyPKType[ii] == WPA_TKIP) && (byPKType != WPA_AESCCMP)) - byPKType = WPA_TKIP; - else if ((pBSSList->abyPKType[ii] == WPA_WEP40) && (byPKType != WPA_AESCCMP) && (byPKType != WPA_TKIP)) - byPKType = WPA_WEP40; - else if ((pBSSList->abyPKType[ii] == WPA_WEP104) && (byPKType != WPA_AESCCMP) && (byPKType != WPA_TKIP)) - byPKType = WPA_WEP104; - } - if (byEncrypt != byPKType) - return false; - } - return true; -// if (pBSSList->wAuthCount > 0) -// for (ii=0; ii < pBSSList->wAuthCount; ii ++) -// if (byAuth == pBSSList->abyAuthType[ii]) -// break; - break; - - default: - break; - } - return false; -} - -/*+ - * - * Description: - * Check if RSN IE makes sense. - * - * Parameters: - * In: - * pRSN - Pointer to the RSN IE. - * Out: - * none - * - * Return Value: none. - * --*/ -bool -WPAb_Is_RSN( - PWLAN_IE_RSN_EXT pRSN - ) -{ - if (pRSN == NULL) - return false; - - if ((pRSN->len >= 6) && // oui1(4)+ver(2) - (pRSN->byElementID == WLAN_EID_RSN_WPA) && !memcmp(pRSN->abyOUI, abyOUI01, 4) && - (pRSN->wVersion == 1)) { - return true; - } - else - return false; -} - diff --git a/drivers/staging/vt6656/wpa.h b/drivers/staging/vt6656/wpa.h deleted file mode 100644 index 2a724c064e59..000000000000 --- a/drivers/staging/vt6656/wpa.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wpa.h - * - * Purpose: Defines the macros, types, and functions for dealing - * with WPA informations. - * - * Author: Kyle Hsu - * - * Date: Jul 14, 2003 - * - */ - -#ifndef __WPA_H__ -#define __WPA_H__ - -#include "80211hdr.h" - -#define WPA_NONE 0 -#define WPA_WEP40 1 -#define WPA_TKIP 2 -#define WPA_AESWRAP 3 -#define WPA_AESCCMP 4 -#define WPA_WEP104 5 -#define WPA_AUTH_IEEE802_1X 1 -#define WPA_AUTH_PSK 2 - -#define WPA_GROUPFLAG 0x02 -#define WPA_REPLAYBITSSHIFT 2 -#define WPA_REPLAYBITS 0x03 - -void -WPA_ClearRSN( - PKnownBSS pBSSList - ); - -void -WPA_ParseRSN( - PKnownBSS pBSSList, - PWLAN_IE_RSN_EXT pRSN - ); - -bool -WPA_SearchRSN( - u8 byCmd, - u8 byEncrypt, - PKnownBSS pBSSList - ); - -bool -WPAb_Is_RSN( - PWLAN_IE_RSN_EXT pRSN - ); - -#endif /* __WPA_H__ */ -- cgit From 03e77fe366f80bc545b46618c191600e99d8c2cb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:50 +0100 Subject: staging: vt6656: dead code remove wctl Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/rxtx.c | 1 - drivers/staging/vt6656/wcmd.c | 1 - drivers/staging/vt6656/wctl.c | 244 -------------------------------------- drivers/staging/vt6656/wctl.h | 94 --------------- 7 files changed, 343 deletions(-) delete mode 100644 drivers/staging/vt6656/wctl.c delete mode 100644 drivers/staging/vt6656/wctl.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 1be7d608bb9e..08d313d4c413 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -6,7 +6,6 @@ vt6656_stage-y += main_usb.o \ card.o \ mac.o \ baseband.o \ - wctl.o \ 80211mgr.o \ wcmd.o\ rxtx.o \ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 9570dc62dbf8..03242ddece20 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -45,7 +45,6 @@ #include "baseband.h" #include "michael.h" #include "tkip.h" -#include "wctl.h" #include "rf.h" #include "iowpa.h" #include "datarate.h" diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f4cbeb3a6199..b9915a2e019a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -53,7 +53,6 @@ #include "mac.h" #include "tether.h" #include "wmgr.h" -#include "wctl.h" #include "power.h" #include "wcmd.h" #include "rxtx.h" diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index feffd972be14..e138900c07c7 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -51,7 +51,6 @@ #include "mac.h" #include "michael.h" #include "tkip.h" -#include "wctl.h" #include "rf.h" #include "datarate.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index a777841b14e4..00bed8cc4e37 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -46,7 +46,6 @@ #include "wcmd.h" #include "wmgr.h" #include "power.h" -#include "wctl.h" #include "baseband.h" #include "usbpipe.h" #include "rxtx.h" diff --git a/drivers/staging/vt6656/wctl.c b/drivers/staging/vt6656/wctl.c deleted file mode 100644 index efdc5d5d38ee..000000000000 --- a/drivers/staging/vt6656/wctl.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: wctl.c - * - * Purpose: handle WMAC duplicate filter & defragment - * - * Author: Jerry Chen - * - * Date: Jun. 27, 2002 - * - * Functions: - * WCTLbIsDuplicate - Test if duplicate packet - * WCTLuSearchDFCB - Search DeFragment Control Database - * WCTLuInsertDFCB - Insert DeFragment Control Database - * WCTLbHandleFragment - Handle received fragment packet - * - * Revision History: - * - */ - -#include "wctl.h" -#include "device.h" -#include "card.h" -#include "tmacro.h" - -// static int msglevel =MSG_LEVEL_INFO; - -/* - * Description: - * Scan Rx cache. Return true if packet is duplicate, else - * inserts in receive cache and returns false. - * - * Parameters: - * In: - * pCache - Receive packets history - * pMACHeader - 802.11 MAC Header of received packet - * Out: - * none - * - * Return Value: true if packet duplicate; otherwise false - * - */ - -bool WCTLbIsDuplicate (PSCache pCache, struct ieee80211_hdr *pMACHeader) -{ - unsigned int uIndex; - unsigned int ii; - PSCacheEntry pCacheEntry; - - if (IS_FC_RETRY(pMACHeader)) { - - uIndex = pCache->uInPtr; - for (ii = 0; ii < DUPLICATE_RX_CACHE_LENGTH; ii++) { - pCacheEntry = &(pCache->asCacheEntry[uIndex]); - if ((pCacheEntry->wFmSequence == pMACHeader->seq_ctrl) && - ether_addr_equal(pCacheEntry->abyAddr2, pMACHeader->addr2) && - (pCacheEntry->wFrameCtl == pMACHeader->frame_control) - ) { - /* Duplicate match */ - return true; - } - ADD_ONE_WITH_WRAP_AROUND(uIndex, DUPLICATE_RX_CACHE_LENGTH); - } - } - /* Not found in cache - insert */ - pCacheEntry = &pCache->asCacheEntry[pCache->uInPtr]; - pCacheEntry->wFmSequence = pMACHeader->seq_ctrl; - memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->addr2[0]), ETH_ALEN); - pCacheEntry->wFrameCtl = pMACHeader->frame_control; - ADD_ONE_WITH_WRAP_AROUND(pCache->uInPtr, DUPLICATE_RX_CACHE_LENGTH); - return false; -} - -/* - * Description: - * Found if sequence number of received fragment packet in Defragment Database - * - * Parameters: - * In: - * pDevice - Pointer to adapter - * pMACHeader - 802.11 MAC Header of received packet - * Out: - * none - * - * Return Value: index number in Defragment Database - * - */ - -unsigned int WCTLuSearchDFCB(struct vnt_private *pDevice, - struct ieee80211_hdr *pMACHeader) -{ - unsigned int ii; - - for (ii = 0; ii < pDevice->cbDFCB; ii++) { - if ((pDevice->sRxDFCB[ii].bInUse == true) && - ether_addr_equal(pDevice->sRxDFCB[ii].abyAddr2, - pMACHeader->addr2)) { - return ii; - } - } - return pDevice->cbDFCB; -} - -/* - * Description: - * Insert received fragment packet in Defragment Database - * - * Parameters: - * In: - * pDevice - Pointer to adapter - * pMACHeader - 802.11 MAC Header of received packet - * Out: - * none - * - * Return Value: index number in Defragment Database - * - */ -unsigned int WCTLuInsertDFCB(struct vnt_private *pDevice, - struct ieee80211_hdr *pMACHeader) -{ - unsigned int ii; - - if (pDevice->cbFreeDFCB == 0) - return(pDevice->cbDFCB); - for (ii = 0; ii < pDevice->cbDFCB; ii++) { - if (pDevice->sRxDFCB[ii].bInUse == false) { - pDevice->cbFreeDFCB--; - pDevice->sRxDFCB[ii].uLifetime = pDevice->dwMaxReceiveLifetime; - pDevice->sRxDFCB[ii].bInUse = true; - pDevice->sRxDFCB[ii].wSequence = (pMACHeader->seq_ctrl >> 4); - pDevice->sRxDFCB[ii].wFragNum = (pMACHeader->seq_ctrl & 0x000F); - memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), - &(pMACHeader->addr2[0]), - ETH_ALEN); - return(ii); - } - } - return(pDevice->cbDFCB); -} - -/* - * Description: - * Handle received fragment packet - * - * Parameters: - * In: - * pDevice - Pointer to adapter - * pMACHeader - 802.11 MAC Header of received packet - * cbFrameLength - Frame length - * bWEP - is WEP packet - * Out: - * none - * - * Return Value: true if it is valid fragment packet and we have resource to defragment; otherwise false - * - */ -bool WCTLbHandleFragment(struct vnt_private *pDevice, struct ieee80211_hdr *pMACHeader, unsigned int cbFrameLength, bool bWEP, bool bExtIV) -{ - unsigned int uHeaderSize; - - if (bWEP == true) { - uHeaderSize = 28; - if (bExtIV) - // ExtIV - uHeaderSize +=4; - } - else { - uHeaderSize = 24; - } - - if (IS_FIRST_FRAGMENT_PKT(pMACHeader)) { - pDevice->uCurrentDFCBIdx = WCTLuSearchDFCB(pDevice, pMACHeader); - if (pDevice->uCurrentDFCBIdx < pDevice->cbDFCB) { - // duplicate, we must flush previous DCB - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].uLifetime = pDevice->dwMaxReceiveLifetime; - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wSequence = (pMACHeader->seq_ctrl >> 4); - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum = (pMACHeader->seq_ctrl & 0x000F); - } - else { - pDevice->uCurrentDFCBIdx = WCTLuInsertDFCB(pDevice, pMACHeader); - if (pDevice->uCurrentDFCBIdx == pDevice->cbDFCB) { - return(false); - } - } - // reserve 8 byte to match MAC RX Buffer - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer = (u8 *) (pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].skb->data + 8); -// pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer = (u8 *) (pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].skb->data + 4); - memcpy(pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer, pMACHeader, cbFrameLength); - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength = cbFrameLength; - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer += cbFrameLength; - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum++; - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "First pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx); - return(false); - } - else { - pDevice->uCurrentDFCBIdx = WCTLuSearchDFCB(pDevice, pMACHeader); - if (pDevice->uCurrentDFCBIdx != pDevice->cbDFCB) { - if ((pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wSequence == (pMACHeader->seq_ctrl >> 4)) && - (pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum == (pMACHeader->seq_ctrl & 0x000F)) && - ((pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength + cbFrameLength - uHeaderSize) < 2346)) { - - memcpy(pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer, ((u8 *) (pMACHeader) + uHeaderSize), (cbFrameLength - uHeaderSize)); - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength += (cbFrameLength - uHeaderSize); - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer += (cbFrameLength - uHeaderSize); - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum++; - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Second pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx); - } - else { - // seq error or frag # error flush DFCB - pDevice->cbFreeDFCB++; - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].bInUse = false; - return(false); - } - } - else { - return(false); - } - if (IS_LAST_FRAGMENT_PKT(pMACHeader)) { - //enq defragcontrolblock - pDevice->cbFreeDFCB++; - pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].bInUse = false; - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Last pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx); - return(true); - } - return(false); - } -} - diff --git a/drivers/staging/vt6656/wctl.h b/drivers/staging/vt6656/wctl.h deleted file mode 100644 index 14cb41177045..000000000000 --- a/drivers/staging/vt6656/wctl.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: wctl.h - * - * Purpose: - * - * Author: Jerry Chen - * - * Date: Jun. 27, 2002 - * - */ - -#ifndef __WCTL_H__ -#define __WCTL_H__ - -#include "tether.h" -#include "device.h" - -#define IS_TYPE_DATA(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & TYPE_802_11_MASK) == TYPE_802_11_DATA) - -#define IS_TYPE_MGMT(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & TYPE_802_11_MASK) == TYPE_802_11_MGMT) - -#define IS_TYPE_CONTROL(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & TYPE_802_11_MASK) == TYPE_802_11_CTL) - -#define IS_FC_MOREDATA(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_MOREDATA) == FC_MOREDATA) - -#define IS_FC_POWERMGT(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_POWERMGT) == FC_POWERMGT) - -#define IS_FC_RETRY(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_RETRY) == FC_RETRY) - -#define IS_FC_WEP(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_WEP) == FC_WEP) - -#ifdef __BIG_ENDIAN - -#define IS_FRAGMENT_PKT(pMACHeader) \ - (((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_MOREFRAG) != 0) | \ - ((((struct ieee80211_hdr *) pMACHeader)->seq_ctrl & 0x0F00) != 0)) - -#define IS_FIRST_FRAGMENT_PKT(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->seq_ctrl & 0x0F00) == 0) - -#else - -#define IS_FRAGMENT_PKT(pMACHeader) \ - (((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_MOREFRAG) != 0) | \ - ((((struct ieee80211_hdr *) pMACHeader)->seq_ctrl & 0x000F) != 0)) - -#define IS_FIRST_FRAGMENT_PKT(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->seq_ctrl & 0x000F) == 0) - -#endif//#ifdef __BIG_ENDIAN - -#define IS_LAST_FRAGMENT_PKT(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & FC_MOREFRAG) == 0) - -#define IS_CTL_PSPOLL(pMACHeader) \ - ((((struct ieee80211_hdr *) pMACHeader)->frame_control & TYPE_SUBTYPE_MASK) == TYPE_CTL_PSPOLL) - -#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \ - if ((uVar) >= ((uModulo) - 1)) \ - (uVar) = 0; \ - else \ - (uVar)++; \ -} - -bool WCTLbIsDuplicate(PSCache pCache, struct ieee80211_hdr *pMACHeader); -bool WCTLbHandleFragment(struct vnt_private *, struct ieee80211_hdr *pMACHeader, unsigned int cbFrameLength, bool bWEP, bool bExtIV); -unsigned int WCTLuSearchDFCB(struct vnt_private *, struct ieee80211_hdr *pMACHeader); -unsigned int WCTLuInsertDFCB(struct vnt_private *, struct ieee80211_hdr *pMACHeader); - -#endif /* __WCTL_H__ */ -- cgit From fa2cdd2b0a74105841ef98d17366ac8104e7dc88 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:51 +0100 Subject: staging: vt6656: dead code remove tkip.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/rxtx.c | 1 - drivers/staging/vt6656/tkip.c | 246 ---------------------------------------- drivers/staging/vt6656/tkip.h | 45 -------- 5 files changed, 294 deletions(-) delete mode 100644 drivers/staging/vt6656/tkip.c delete mode 100644 drivers/staging/vt6656/tkip.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 08d313d4c413..ad39400526d1 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -15,7 +15,6 @@ vt6656_stage-y += main_usb.o \ rc4.o \ tether.o \ key.o \ - tkip.o \ michael.o \ rf.o \ usbpipe.o \ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 03242ddece20..167520f4549b 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -44,7 +44,6 @@ #include "mac.h" #include "baseband.h" #include "michael.h" -#include "tkip.h" #include "rf.h" #include "iowpa.h" #include "datarate.h" diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index e138900c07c7..b28607242b78 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -50,7 +50,6 @@ #include "bssdb.h" #include "mac.h" #include "michael.h" -#include "tkip.h" #include "rf.h" #include "datarate.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/tkip.c b/drivers/staging/vt6656/tkip.c deleted file mode 100644 index 28282f345901..000000000000 --- a/drivers/staging/vt6656/tkip.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: tkip.c - * - * Purpose: Implement functions for 802.11i TKIP - * - * Author: Jerry Chen - * - * Date: Mar. 11, 2003 - * - * Functions: - * TKIPvMixKey - Get TKIP RC4 Key from TK,TA, and TSC - * - * Revision History: - * - */ - -#include "tmacro.h" -#include "tkip.h" - -/* The Sbox is reduced to 2 16-bit wide tables, each with 256 entries. */ -/* The 2nd table is the same as the 1st but with the upper and lower */ -/* bytes swapped. To allow an endian tolerant implementation, the byte */ -/* halves have been expressed independently here. */ -static const u8 TKIP_Sbox_Lower[256] = { - 0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54, - 0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A, - 0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B, - 0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B, - 0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F, - 0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F, - 0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5, - 0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F, - 0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB, - 0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97, - 0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED, - 0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A, - 0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94, - 0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3, - 0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04, - 0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D, - 0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39, - 0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95, - 0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83, - 0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76, - 0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4, - 0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B, - 0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0, - 0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18, - 0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51, - 0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85, - 0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12, - 0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9, - 0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7, - 0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A, - 0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8, - 0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A -}; - -static const u8 TKIP_Sbox_Upper[256] = { - 0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91, - 0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC, - 0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB, - 0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B, - 0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83, - 0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A, - 0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F, - 0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA, - 0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B, - 0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13, - 0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6, - 0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85, - 0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11, - 0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B, - 0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1, - 0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF, - 0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E, - 0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6, - 0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B, - 0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD, - 0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8, - 0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2, - 0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49, - 0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10, - 0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97, - 0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F, - 0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C, - 0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27, - 0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33, - 0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5, - 0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0, - 0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C -}; - -//STKIPKeyManagement sTKIPKeyTable[MAX_TKIP_KEY]; - -/************************************************************/ -/* tkip_sbox() */ -/* Returns a 16 bit value from a 64K entry table. The Table */ -/* is synthesized from two 256 entry byte wide tables. */ -/************************************************************/ -static unsigned int tkip_sbox(unsigned int index) -{ - unsigned int index_low; - unsigned int index_high; - unsigned int left, right; - - index_low = (index % 256); - index_high = ((index >> 8) % 256); - - left = TKIP_Sbox_Lower[index_low] + (TKIP_Sbox_Upper[index_low] * 256); - right = TKIP_Sbox_Upper[index_high] + (TKIP_Sbox_Lower[index_high] * 256); - - return (left ^ right); -}; - -static unsigned int rotr1(unsigned int a) -{ - unsigned int b; - - if ((a & 0x01) == 0x01) { - b = (a >> 1) | 0x8000; - } else { - b = (a >> 1) & 0x7fff; - } - b = b % 65536; - return b; -} - -/* - * Description: Calculate RC4Key fom TK, TA, and TSC - * - * Parameters: - * In: - * pbyTKey - TKey - * pbyTA - TA - * dwTSC - TSC - * Out: - * pbyRC4Key - RC4Key - * - * Return Value: none - * - */ -void TKIPvMixKey( - u8 * pbyTKey, - u8 * pbyTA, - u16 wTSC15_0, - u32 dwTSC47_16, - u8 * pbyRC4Key - ) -{ - u32 p1k[5]; - u32 tsc0, tsc1, tsc2; - u32 ppk0, ppk1, ppk2, ppk3, ppk4, ppk5; - u32 pnl, pnh; - int i, j; - - pnl = (u32)wTSC15_0; - pnh = (u32)(dwTSC47_16 & 0xffffffff); - - tsc0 = (u32)((pnh >> 16) % 65536); /* msb */ - tsc1 = (u32)(pnh % 65536); - tsc2 = (u32)(pnl % 65536); /* lsb */ - - /* Phase 1, step 1 */ - p1k[0] = tsc1; - p1k[1] = tsc0; - p1k[2] = (u32)(pbyTA[0] + (pbyTA[1]*256)); - p1k[3] = (u32)(pbyTA[2] + (pbyTA[3]*256)); - p1k[4] = (u32)(pbyTA[4] + (pbyTA[5]*256)); - - /* Phase 1, step 2 */ - for (i=0; i<8; i++) { - j = 2*(i & 1); - p1k[0] = (p1k[0] + tkip_sbox((p1k[4] ^ ((256*pbyTKey[1+j]) + pbyTKey[j])) % 65536)) % 65536; - p1k[1] = (p1k[1] + tkip_sbox((p1k[0] ^ ((256*pbyTKey[5+j]) + pbyTKey[4+j])) % 65536)) % 65536; - p1k[2] = (p1k[2] + tkip_sbox((p1k[1] ^ ((256*pbyTKey[9+j]) + pbyTKey[8+j])) % 65536)) % 65536; - p1k[3] = (p1k[3] + tkip_sbox((p1k[2] ^ ((256*pbyTKey[13+j]) + pbyTKey[12+j])) % 65536)) % 65536; - p1k[4] = (p1k[4] + tkip_sbox((p1k[3] ^ (((256*pbyTKey[1+j]) + pbyTKey[j]))) % 65536)) % 65536; - p1k[4] = (p1k[4] + i) % 65536; - } - - /* Phase 2, Step 1 */ - ppk0 = p1k[0]; - ppk1 = p1k[1]; - ppk2 = p1k[2]; - ppk3 = p1k[3]; - ppk4 = p1k[4]; - ppk5 = (p1k[4] + tsc2) % 65536; - - /* Phase2, Step 2 */ - ppk0 = ppk0 + tkip_sbox((ppk5 ^ ((256*pbyTKey[1]) + pbyTKey[0])) % 65536); - ppk1 = ppk1 + tkip_sbox((ppk0 ^ ((256*pbyTKey[3]) + pbyTKey[2])) % 65536); - ppk2 = ppk2 + tkip_sbox((ppk1 ^ ((256*pbyTKey[5]) + pbyTKey[4])) % 65536); - ppk3 = ppk3 + tkip_sbox((ppk2 ^ ((256*pbyTKey[7]) + pbyTKey[6])) % 65536); - ppk4 = ppk4 + tkip_sbox((ppk3 ^ ((256*pbyTKey[9]) + pbyTKey[8])) % 65536); - ppk5 = ppk5 + tkip_sbox((ppk4 ^ ((256*pbyTKey[11]) + pbyTKey[10])) % 65536); - - ppk0 = ppk0 + rotr1(ppk5 ^ ((256*pbyTKey[13]) + pbyTKey[12])); - ppk1 = ppk1 + rotr1(ppk0 ^ ((256*pbyTKey[15]) + pbyTKey[14])); - ppk2 = ppk2 + rotr1(ppk1); - ppk3 = ppk3 + rotr1(ppk2); - ppk4 = ppk4 + rotr1(ppk3); - ppk5 = ppk5 + rotr1(ppk4); - - /* Phase 2, Step 3 */ - pbyRC4Key[0] = (tsc2 >> 8) % 256; - pbyRC4Key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; - pbyRC4Key[2] = tsc2 % 256; - pbyRC4Key[3] = ((ppk5 ^ ((256*pbyTKey[1]) + pbyTKey[0])) >> 1) % 256; - - pbyRC4Key[4] = ppk0 % 256; - pbyRC4Key[5] = (ppk0 >> 8) % 256; - - pbyRC4Key[6] = ppk1 % 256; - pbyRC4Key[7] = (ppk1 >> 8) % 256; - - pbyRC4Key[8] = ppk2 % 256; - pbyRC4Key[9] = (ppk2 >> 8) % 256; - - pbyRC4Key[10] = ppk3 % 256; - pbyRC4Key[11] = (ppk3 >> 8) % 256; - - pbyRC4Key[12] = ppk4 % 256; - pbyRC4Key[13] = (ppk4 >> 8) % 256; - - pbyRC4Key[14] = ppk5 % 256; - pbyRC4Key[15] = (ppk5 >> 8) % 256; -} diff --git a/drivers/staging/vt6656/tkip.h b/drivers/staging/vt6656/tkip.h deleted file mode 100644 index 4fba7ef38266..000000000000 --- a/drivers/staging/vt6656/tkip.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: tkip.h - * - * Purpose: Implement functions for 802.11i TKIP - * - * Author: Jerry Chen - * - * Date: Mar. 11, 2003 - * - */ - -#ifndef __TKIP_H__ -#define __TKIP_H__ - -#include "tether.h" - -#define TKIP_KEY_LEN 16 - -void TKIPvMixKey( - u8 * pbyTKey, - u8 * pbyTA, - u16 wTSC15_0, - u32 dwTSC47_16, - u8 * pbyRC4Key - ); - -#endif /* __TKIP_H__ */ -- cgit From 08a9001544e275b358246f03c6f86b0ef4b8b32c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:52 +0100 Subject: staging: vt6656: dead code remove micheal.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/michael.c | 167 --------------------------------------- drivers/staging/vt6656/michael.h | 52 ------------ drivers/staging/vt6656/rxtx.c | 1 - 5 files changed, 222 deletions(-) delete mode 100644 drivers/staging/vt6656/michael.c delete mode 100644 drivers/staging/vt6656/michael.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index ad39400526d1..ca1c42519198 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -15,7 +15,6 @@ vt6656_stage-y += main_usb.o \ rc4.o \ tether.o \ key.o \ - michael.o \ rf.o \ usbpipe.o \ channel.o \ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 167520f4549b..fe4b6ac1df1a 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -43,7 +43,6 @@ #include "bssdb.h" #include "mac.h" #include "baseband.h" -#include "michael.h" #include "rf.h" #include "iowpa.h" #include "datarate.h" diff --git a/drivers/staging/vt6656/michael.c b/drivers/staging/vt6656/michael.c deleted file mode 100644 index 9a5a0b6761ed..000000000000 --- a/drivers/staging/vt6656/michael.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: michael.cpp - * - * Purpose: The implementation of LIST data structure. - * - * Author: Kyle Hsu - * - * Date: Sep 4, 2002 - * - * Functions: - * s_dwGetUINT32 - Convert from u8[] to u32 in a portable way - * s_vPutUINT32 - Convert from u32 to u8[] in a portable way - * s_vClear - Reset the state to the empty message. - * s_vSetKey - Set the key. - * MIC_vInit - Set the key. - * s_vAppendByte - Append the byte to our word-sized buffer. - * MIC_vAppend - call s_vAppendByte. - * MIC_vGetMIC - Append the minimum padding and call s_vAppendByte. - * - * Revision History: - * - */ - -#include "tmacro.h" -#include "michael.h" - -/* - * static u32 s_dwGetUINT32(u8 * p); Get u32 from - * 4 bytes LSByte first - * static void s_vPutUINT32(u8* p, u32 val); Put u32 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(u32 dwK0, u32 dwK1); -static void s_vAppendByte(u8 b); /* Add a single byte to the internal - * message */ - -static u32 L, R; /* Current state */ -static u32 K0, K1; /* Key */ -static u32 M; /* Message accumulator (single word) */ -static unsigned int nBytesInM; /* # bytes in M */ - -/* -static u32 s_dwGetUINT32 (u8 * p) -// Convert from u8[] to u32 in a portable way -{ - u32 res = 0; - unsigned int i; - for (i = 0; i < 4; i++) - res |= (*p++) << (8*i); - return res; -} - -static void s_vPutUINT32(u8 *p, u32 val) -// Convert from u32 to u8[] in a portable way -{ - unsigned int i; - for (i = 0; i < 4; i++) { - *p++ = (u8) (val & 0xff); - val >>= 8; - } -} -*/ - -static void s_vClear(void) -{ - /* Reset the state to the empty message. */ - L = K0; - R = K1; - nBytesInM = 0; - M = 0; -} - -static void s_vSetKey(u32 dwK0, u32 dwK1) -{ - /* Set the key */ - K0 = dwK0; - K1 = dwK1; - /* and reset the message */ - s_vClear(); -} - -static void s_vAppendByte(u8 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; - } -} - -void MIC_vInit(u32 dwK0, u32 dwK1) -{ - /* Set the key */ - s_vSetKey(dwK0, dwK1); -} - -void MIC_vUnInit(void) -{ - /* 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(); -} - -void MIC_vAppend(u8 * src, unsigned int nBytes) -{ - /* This is simple */ - while (nBytes > 0) { - s_vAppendByte(*src++); - nBytes--; - } -} - -void MIC_vGetMIC(u32 * pdwL, u32 * 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(); -} diff --git a/drivers/staging/vt6656/michael.h b/drivers/staging/vt6656/michael.h deleted file mode 100644 index 9c69a42640a7..000000000000 --- a/drivers/staging/vt6656/michael.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: Michael.h - * - * Purpose: Reference implementation for Michael - * written by Niels Ferguson - * - * Author: Kyle Hsu - * - * Date: Jan 2, 2003 - * - */ - -#ifndef __MICHAEL_H__ -#define __MICHAEL_H__ - -#include - -void MIC_vInit(u32 dwK0, u32 dwK1); - -void MIC_vUnInit(void); - -// Append bytes to the message to be MICed -void MIC_vAppend(u8 * src, unsigned int nBytes); - -// Get the MIC result. Destination should accept 8 bytes of result. -// This also resets the message to empty. -void MIC_vGetMIC(u32 * pdwL, u32 * pdwR); - -// Rotation functions on 32 bit values -#define ROL32(A, n) \ - (((A) << (n)) | (((A)>>(32-(n))) & ((1UL << (n)) - 1))) -#define ROR32(A, n) ROL32((A), 32-(n)) - -#endif /* __MICHAEL_H__ */ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index b28607242b78..ab80c467a2b4 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -49,7 +49,6 @@ #include "card.h" #include "bssdb.h" #include "mac.h" -#include "michael.h" #include "rf.h" #include "datarate.h" #include "usbpipe.h" -- cgit From 3f530ded0f41e4d17aec9df98ac0b82da7257552 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:53 +0100 Subject: staging: vt6656: dead code remove rc4.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/card.c | 1 - drivers/staging/vt6656/device.h | 2 - drivers/staging/vt6656/rc4.c | 87 ----------------------------------------- drivers/staging/vt6656/rc4.h | 46 ---------------------- 5 files changed, 137 deletions(-) delete mode 100644 drivers/staging/vt6656/rc4.c delete mode 100644 drivers/staging/vt6656/rc4.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index ca1c42519198..2e0361b2f637 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -12,7 +12,6 @@ vt6656_stage-y += main_usb.o \ dpc.o \ power.o \ datarate.o \ - rc4.o \ tether.o \ key.o \ rf.o \ diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 918170979aa8..6652633eda46 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -54,7 +54,6 @@ #include "rf.h" #include "power.h" #include "key.h" -#include "rc4.h" #include "datarate.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index c2e495b868bd..c5b5b9f4b2e4 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -77,7 +77,6 @@ #include "tether.h" #include "wmgr.h" #include "wcmd.h" -#include "rc4.h" #include "desc.h" #include "key.h" #include "card.h" @@ -640,7 +639,6 @@ struct vnt_private { SKeyManagement sKey; u32 dwIVCounter; - RC4Ext SBox; u8 abyPRNG[WLAN_WEPMAX_KEYLEN+3]; u8 byKeyIndex; diff --git a/drivers/staging/vt6656/rc4.c b/drivers/staging/vt6656/rc4.c deleted file mode 100644 index 2fd836f07536..000000000000 --- a/drivers/staging/vt6656/rc4.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: rc4.c - * - * Purpose: - * - * Functions: - * - * Revision History: - * - * Author: Kyle Hsu - * - * Date: Sep 4, 2002 - * - */ - -#include "rc4.h" - -void rc4_init(PRC4Ext pRC4, u8 * pbyKey, unsigned int cbKey_len) -{ - unsigned int ust1, ust2; - unsigned int keyindex; - unsigned int stateindex; - u8 * pbyst; - unsigned int idx; - - pbyst = pRC4->abystate; - pRC4->ux = 0; - pRC4->uy = 0; - for (idx = 0; idx < 256; idx++) - pbyst[idx] = (u8)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] = (u8)ust1; - pbyst[idx] = (u8)ust2; - if (++keyindex >= cbKey_len) - keyindex = 0; - } -} - -unsigned int rc4_byte(PRC4Ext pRC4) -{ - unsigned int ux; - unsigned int uy; - unsigned int ustx, usty; - u8 * 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] = (u8)ustx; - pbyst[ux] = (u8)usty; - - return pbyst[(ustx + usty) & 0xff]; -} - -void rc4_encrypt(PRC4Ext pRC4, u8 * pbyDest, - u8 * pbySrc, unsigned int cbData_len) -{ - unsigned int ii; - for (ii = 0; ii < cbData_len; ii++) - pbyDest[ii] = (u8)(pbySrc[ii] ^ rc4_byte(pRC4)); -} diff --git a/drivers/staging/vt6656/rc4.h b/drivers/staging/vt6656/rc4.h deleted file mode 100644 index d376e1adcc1c..000000000000 --- a/drivers/staging/vt6656/rc4.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * File: rc4.h - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Purpose: - * - * Functions: - * - * Revision History: - * - * Author: Kyle Hsu - * - * Date: Sep 4, 2002 - * - */ - -#ifndef __RC4_H__ -#define __RC4_H__ - -#include - -typedef struct { - unsigned int ux; - unsigned int uy; - u8 abystate[256]; -} RC4Ext, *PRC4Ext; - -void rc4_init(PRC4Ext pRC4, u8 * pbyKey, unsigned int cbKey_len); -unsigned int rc4_byte(PRC4Ext pRC4); -void rc4_encrypt(PRC4Ext pRC4, u8 * pbyDest, u8 * pbySrc, - unsigned int cbData_len); - -#endif /* __RC4_H__ */ -- cgit From e1aec72d99939069cb0f21fbd013f47c58824e5c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:54 +0100 Subject: staging: vt6656: dead code remove iowpa.h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/iowpa.h | 75 --------------------------------------- drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/wcmd.c | 1 - 4 files changed, 78 deletions(-) delete mode 100644 drivers/staging/vt6656/iowpa.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index fe4b6ac1df1a..a0d52d74ed97 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -44,7 +44,6 @@ #include "mac.h" #include "baseband.h" #include "rf.h" -#include "iowpa.h" #include "datarate.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/iowpa.h b/drivers/staging/vt6656/iowpa.h deleted file mode 100644 index 98f2b2195af4..000000000000 --- a/drivers/staging/vt6656/iowpa.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: iowpa.h - * - * Purpose: Handles wpa supplicant ioctl interface - * - * Author: Lyndon Chen - * - * Date: May 8, 2002 - * - */ - -#ifndef __IOWPA_H__ -#define __IOWPA_H__ - -#define WPA_IE_LEN 64 - -struct viawget_wpa_param { - u32 cmd; - u8 addr[6]; - union { - struct { - u8 len; - u8 data[0]; - } generic_elem; - struct { - u8 bssid[6]; - u8 ssid[32]; - u8 ssid_len; - u8 *wpa_ie; - u16 wpa_ie_len; - int pairwise_suite; - int group_suite; - int key_mgmt_suite; - int auth_alg; - int mode; - u8 roam_dbm; - } wpa_associate; - struct { - int alg_name; - u16 key_index; - u16 set_tx; - u8 *seq; - u16 seq_len; - u8 *key; - u16 key_len; - } wpa_key; - struct { - u8 ssid_len; - u8 ssid[32]; - } scan_req; - struct { - u16 scan_count; - u8 *buf; - } scan_results; - } u; -} __packed; - -#endif /* __IOWPA_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index b9915a2e019a..4a412d93c654 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -64,7 +64,6 @@ #include "usbpipe.h" #include "channel.h" #include "int.h" -#include "iowpa.h" /* static int msglevel = MSG_LEVEL_DEBUG; */ static int msglevel =MSG_LEVEL_INFO; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 00bed8cc4e37..d0632292afa0 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -51,7 +51,6 @@ #include "rxtx.h" #include "rf.h" #include "channel.h" -#include "iowpa.h" static int msglevel = MSG_LEVEL_INFO; //static int msglevel = MSG_LEVEL_DEBUG; -- cgit From 312076157967a40164e1b0b1c08ab2ce72eeb7b2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:55 +0100 Subject: staging: vt6656: decode remove tether.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/80211mgr.c | 1 - drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/baseband.c | 1 - drivers/staging/vt6656/baseband.h | 1 - drivers/staging/vt6656/desc.h | 2 - drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/key.h | 1 - drivers/staging/vt6656/mac.c | 1 - drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/rxtx.c | 1 - drivers/staging/vt6656/tether.c | 60 ---------------------- drivers/staging/vt6656/tether.h | 101 -------------------------------------- 13 files changed, 173 deletions(-) delete mode 100644 drivers/staging/vt6656/tether.c delete mode 100644 drivers/staging/vt6656/tether.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/80211mgr.c b/drivers/staging/vt6656/80211mgr.c index 48baef9efd0e..09bfe2412651 100644 --- a/drivers/staging/vt6656/80211mgr.c +++ b/drivers/staging/vt6656/80211mgr.c @@ -51,7 +51,6 @@ #include "device.h" #include "tmacro.h" -#include "tether.h" #include "80211mgr.h" #include "80211hdr.h" diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 2e0361b2f637..0f33000207ff 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -12,7 +12,6 @@ vt6656_stage-y += main_usb.o \ dpc.o \ power.o \ datarate.o \ - tether.o \ key.o \ rf.o \ usbpipe.o \ diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 19b8fd174d20..80240e4a2f3b 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -36,7 +36,6 @@ */ #include "tmacro.h" -#include "tether.h" #include "mac.h" #include "baseband.h" #include "rf.h" diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 4160695d6274..c73244b11bf9 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -33,7 +33,6 @@ #ifndef __BASEBAND_H__ #define __BASEBAND_H__ -#include "tether.h" #include "device.h" #define PREAMBLE_LONG 0 diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h index 617d479b85cc..f79af8513ff2 100644 --- a/drivers/staging/vt6656/desc.h +++ b/drivers/staging/vt6656/desc.h @@ -34,8 +34,6 @@ #include #include -#include "tether.h" - /* max transmit or receive buffer size */ #define CB_MAX_BUF_SIZE 2900U /* NOTE: must be multiple of 4 */ diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index c5b5b9f4b2e4..b6ae34fa4d76 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -74,7 +74,6 @@ */ #include "80211hdr.h" -#include "tether.h" #include "wmgr.h" #include "wcmd.h" #include "desc.h" diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index a0d52d74ed97..60230f29c374 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -38,7 +38,6 @@ #include "dpc.h" #include "device.h" #include "rxtx.h" -#include "tether.h" #include "card.h" #include "bssdb.h" #include "mac.h" diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 7b8c96026076..4303c547c00a 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -30,7 +30,6 @@ #ifndef __KEY_H__ #define __KEY_H__ -#include "tether.h" #include "80211mgr.h" #define MAX_GROUP_KEY 4 diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index a60240c1e15a..755ac56a200a 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -31,7 +31,6 @@ */ #include "tmacro.h" -#include "tether.h" #include "desc.h" #include "mac.h" #include "80211hdr.h" diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4a412d93c654..d9e766b8650f 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -51,7 +51,6 @@ #include "card.h" #include "baseband.h" #include "mac.h" -#include "tether.h" #include "wmgr.h" #include "power.h" #include "wcmd.h" diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index ab80c467a2b4..57c2b94ed5f0 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -45,7 +45,6 @@ #include "device.h" #include "rxtx.h" -#include "tether.h" #include "card.h" #include "bssdb.h" #include "mac.h" diff --git a/drivers/staging/vt6656/tether.c b/drivers/staging/vt6656/tether.c deleted file mode 100644 index 2ef54f608cbc..000000000000 --- a/drivers/staging/vt6656/tether.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2003 VIA Networking, Inc. All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: tether.c - * - * Purpose: - * - * Author: Tevin Chen - * - * Date: May 21, 1996 - * - * Functions: - * ETHbIsBufferCrc32Ok - Check CRC value of the buffer if Ok or not - * - * Revision History: - * - */ - -#include "device.h" -#include "tmacro.h" -#include "tether.h" - -/* - * Description: Check CRC value of the buffer if Ok or not - * - * Parameters: - * In: - * pbyBuffer - pointer of buffer (normally is rx buffer) - * cbFrameLength - length of buffer, including CRC portion - * Out: - * none - * - * Return Value: true if ok; false if error. - * - */ -bool ETHbIsBufferCrc32Ok(u8 * pbyBuffer, unsigned int cbFrameLength) -{ - u32 n_crc = ~ether_crc_le(cbFrameLength - 4, pbyBuffer); - - if (le32_to_cpu(*((__le32 *)(pbyBuffer + cbFrameLength - 4))) != n_crc) - return false; - - return true; -} - diff --git a/drivers/staging/vt6656/tether.h b/drivers/staging/vt6656/tether.h deleted file mode 100644 index f57fcfdc24d5..000000000000 --- a/drivers/staging/vt6656/tether.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: tether.h - * - * Purpose: - * - * Author: Tevin Chen - * - * Date: Jan. 28, 1997 - * - */ - -#ifndef __TETHER_H__ -#define __TETHER_H__ - -#include - -// -// constants -// -#define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) - // Ethernet address string length -#define U_MULTI_ADDR_LEN 8 // multicast address length - -#ifdef __BIG_ENDIAN - -#define TYPE_MGMT_PROBE_RSP 0x5000 - -#define FC_TODS 0x0001 -#define FC_FROMDS 0x0002 -#define FC_MOREFRAG 0x0004 -#define FC_RETRY 0x0008 -#define FC_POWERMGT 0x0010 -#define FC_MOREDATA 0x0020 -#define FC_WEP 0x0040 -#define TYPE_802_11_ATIM 0x9000 - -#define TYPE_802_11_DATA 0x0800 -#define TYPE_802_11_CTL 0x0400 -#define TYPE_802_11_MGMT 0x0000 -#define TYPE_802_11_MASK 0x0C00 -#define TYPE_SUBTYPE_MASK 0xFC00 -#define TYPE_802_11_NODATA 0x4000 -#define TYPE_DATE_NULL 0x4800 - -#define TYPE_CTL_PSPOLL 0xa400 -#define TYPE_CTL_ACK 0xd400 - -#else //if LITTLE_ENDIAN -// -// wType field in the SEthernetHeader -// -// NOTE.... -// in network byte order, high byte is going first - -#define TYPE_MGMT_PROBE_RSP 0x0050 - -#define FC_TODS 0x0100 -#define FC_FROMDS 0x0200 -#define FC_MOREFRAG 0x0400 -#define FC_RETRY 0x0800 -#define FC_POWERMGT 0x1000 -#define FC_MOREDATA 0x2000 -#define FC_WEP 0x4000 -#define TYPE_802_11_ATIM 0x0090 - -#define TYPE_802_11_DATA 0x0008 -#define TYPE_802_11_CTL 0x0004 -#define TYPE_802_11_MGMT 0x0000 -#define TYPE_802_11_MASK 0x000C -#define TYPE_SUBTYPE_MASK 0x00FC -#define TYPE_802_11_NODATA 0x0040 -#define TYPE_DATE_NULL 0x0048 - -#define TYPE_CTL_PSPOLL 0x00a4 -#define TYPE_CTL_ACK 0x00d4 - -#endif //#ifdef __BIG_ENDIAN - -#define WEP_IV_MASK 0x00FFFFFF - -//u8 ETHbyGetHashIndexByCrc(u8 * pbyMultiAddr); -bool ETHbIsBufferCrc32Ok(u8 * pbyBuffer, unsigned int cbFrameLength); - -#endif /* __TETHER_H__ */ -- cgit From c6b16e197b4fc604bfb2a953719074a9313866db Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:56 +0100 Subject: staging: vt6656: remove dead code datarate Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/baseband.c | 1 - drivers/staging/vt6656/card.c | 1 - drivers/staging/vt6656/channel.c | 1 - drivers/staging/vt6656/datarate.c | 364 -------------------------------------- drivers/staging/vt6656/datarate.h | 62 ------- drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/rf.c | 1 - drivers/staging/vt6656/rxtx.c | 1 - 10 files changed, 434 deletions(-) delete mode 100644 drivers/staging/vt6656/datarate.c delete mode 100644 drivers/staging/vt6656/datarate.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 0f33000207ff..92c6aa7c10ff 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -11,7 +11,6 @@ vt6656_stage-y += main_usb.o \ rxtx.o \ dpc.o \ power.o \ - datarate.o \ key.o \ rf.o \ usbpipe.o \ diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 80240e4a2f3b..e67502e13cba 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -40,7 +40,6 @@ #include "baseband.h" #include "rf.h" #include "usbpipe.h" -#include "datarate.h" static u8 abyVT3184_AGC[] = { 0x00, //0 diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 6652633eda46..9a3e3ced9c53 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -54,7 +54,6 @@ #include "rf.h" #include "power.h" #include "key.h" -#include "datarate.h" #include "usbpipe.h" //const u16 cwRXBCNTSFOff[MAX_RATE] = diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 3317b77fd269..db1451e2e3c9 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -36,7 +36,6 @@ #include #include "device.h" -#include "datarate.h" #include "channel.h" #include "rf.h" diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c deleted file mode 100644 index c44d3a0220ed..000000000000 --- a/drivers/staging/vt6656/datarate.c +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: datarate.c - * - * Purpose: Handles the auto fallback & data rates functions - * - * Author: Lyndon Chen - * - * Date: July 17, 2002 - * - * Functions: - * RATEvParseMaxRate - Parsing the highest basic & support rate in rate field of frame - * RATEvTxRateFallBack - Rate fallback Algorithm Implementaion - * RATEuSetIE- Set rate IE field. - * - * Revision History: - * - */ - -#include "tmacro.h" -#include "mac.h" -#include "80211mgr.h" -#include "bssdb.h" -#include "datarate.h" -#include "card.h" -#include "baseband.h" -#include "rf.h" - -/* static int msglevel = MSG_LEVEL_DEBUG; */ -static int msglevel = MSG_LEVEL_INFO; -static const u8 acbyIERate[MAX_RATE] = {0x02, 0x04, 0x0B, 0x16, 0x0C, 0x12, 0x18, - 0x24, 0x30, 0x48, 0x60, 0x6C}; - -#define AUTORATE_TXOK_CNT 0x0400 -#define AUTORATE_TXFAIL_CNT 0x0064 -#define AUTORATE_TIMEOUT 10 - -void s_vResetCounter(PKnownNodeDB psNodeDBTable); - -void s_vResetCounter(PKnownNodeDB psNodeDBTable) -{ - u8 ii; - - /* clear statistics counter for auto_rate */ - for (ii = 0; ii <= MAX_RATE; ii++) { - psNodeDBTable->uTxOk[ii] = 0; - psNodeDBTable->uTxFail[ii] = 0; - } -} - -/*+ - * - * Routine Description: - * Rate fallback Algorithm Implementaion - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * psNodeDBTable - Pointer to Node Data Base - * Out: - * none - * - * Return Value: none - * --*/ -#define AUTORATE_TXCNT_THRESHOLD 20 -#define AUTORATE_INC_THRESHOLD 30 - -/*+ - * - * Description: - * Get RateIdx from the value in SuppRates IE or ExtSuppRates IE - * - * Parameters: - * In: - * u8 - Rate value in SuppRates IE or ExtSuppRates IE - * Out: - * none - * - * Return Value: RateIdx - * --*/ -u16 RATEwGetRateIdx(u8 byRate) -{ - u16 ii; - - /* erase BasicRate flag */ - byRate = byRate & 0x7F; - - for (ii = 0; ii < MAX_RATE; ii++) { - if (acbyIERate[ii] == byRate) - return ii; - } - return 0; -} - -/*+ - * - * Description: - * Parsing the highest basic & support rate in rate field of frame. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * pItemRates - Pointer to Rate field defined in 802.11 spec. - * pItemExtRates - Pointer to Extended Rate field defined in 802.11 spec. - * Out: - * pwMaxBasicRate - Maximum Basic Rate - * pwMaxSuppRate - Maximum Supported Rate - * pbyTopCCKRate - Maximum Basic Rate in CCK mode - * pbyTopOFDMRate - Maximum Basic Rate in OFDM mode - * - * Return Value: none - * --*/ - -void RATEvParseMaxRate(struct vnt_private *pDevice, - PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, - int bUpdateBasicRate, u16 *pwMaxBasicRate, u16 *pwMaxSuppRate, - u16 *pwSuppRate, u8 *pbyTopCCKRate, u8 *pbyTopOFDMRate) -{ - int ii; - u8 byHighSuppRate = 0, byRate = 0; - u16 wOldBasicRate = pDevice->wBasicRate; - u32 uRateLen; - - if (pItemRates == NULL) - return; - - *pwSuppRate = 0; - uRateLen = pItemRates->len; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate Len: %d\n", uRateLen); - if (pDevice->byBBType != BB_TYPE_11B) { - if (uRateLen > WLAN_RATES_MAXLEN) - uRateLen = WLAN_RATES_MAXLEN; - } else { - if (uRateLen > WLAN_RATES_MAXLEN_11B) - uRateLen = WLAN_RATES_MAXLEN_11B; - } - - for (ii = 0; ii < uRateLen; ii++) { - byRate = (u8)(pItemRates->abyRates[ii]); - if (WLAN_MGMT_IS_BASICRATE(byRate) && - (bUpdateBasicRate == true)) { - /* - * add to basic rate set, update pDevice->byTopCCKBasicRate and - * pDevice->byTopOFDMBasicRate - */ - vnt_add_basic_rate(pDevice, RATEwGetRateIdx(byRate)); - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO"ParseMaxRate AddBasicRate: %d\n", - RATEwGetRateIdx(byRate)); - } - byRate = (u8)(pItemRates->abyRates[ii]&0x7F); - if (byHighSuppRate == 0) - byHighSuppRate = byRate; - if (byRate > byHighSuppRate) - byHighSuppRate = byRate; - *pwSuppRate |= (1<byElementID == WLAN_EID_EXTSUPP_RATES) && - (pDevice->byBBType != BB_TYPE_11B)) { - - unsigned int uExtRateLen = pItemExtRates->len; - - if (uExtRateLen > WLAN_RATES_MAXLEN) - uExtRateLen = WLAN_RATES_MAXLEN; - - for (ii = 0; ii < uExtRateLen; ii++) { - byRate = (u8)(pItemExtRates->abyRates[ii]); - /* select highest basic rate */ - if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) { - /* - * add to basic rate set, update pDevice->byTopCCKBasicRate and - * pDevice->byTopOFDMBasicRate - */ - vnt_add_basic_rate(pDevice, RATEwGetRateIdx(byRate)); - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO"ParseMaxRate AddBasicRate: %d\n", - RATEwGetRateIdx(byRate)); - } - byRate = (u8)(pItemExtRates->abyRates[ii]&0x7F); - if (byHighSuppRate == 0) - byHighSuppRate = byRate; - if (byRate > byHighSuppRate) - byHighSuppRate = byRate; - *pwSuppRate |= (1<byPacketType == PK_TYPE_11GB) - && vnt_ofdm_min_rate(pDevice)) { - pDevice->byPacketType = PK_TYPE_11GA; - } - - *pbyTopCCKRate = pDevice->byTopCCKBasicRate; - *pbyTopOFDMRate = pDevice->byTopOFDMBasicRate; - *pwMaxSuppRate = RATEwGetRateIdx(byHighSuppRate); - if ((pDevice->byPacketType == PK_TYPE_11B) || (pDevice->byPacketType == PK_TYPE_11GB)) - *pwMaxBasicRate = pDevice->byTopCCKBasicRate; - else - *pwMaxBasicRate = pDevice->byTopOFDMBasicRate; - if (wOldBasicRate != pDevice->wBasicRate) - vnt_set_rspinf(pDevice, pDevice->byBBType); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Exit ParseMaxRate\n"); -} - -/*+ - * - * Routine Description: - * Rate fallback Algorithm Implementaion - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * psNodeDBTable - Pointer to Node Data Base - * Out: - * none - * - * Return Value: none - * --*/ -#define AUTORATE_TXCNT_THRESHOLD 20 -#define AUTORATE_INC_THRESHOLD 30 - -void RATEvTxRateFallBack(struct vnt_private *pDevice, - PKnownNodeDB psNodeDBTable) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u16 wIdxDownRate = 0; - int ii; - int bAutoRate[MAX_RATE] = {true, true, true, true, false, false, true, - true, true, true, true, true}; - u32 dwThroughputTbl[MAX_RATE] = {10, 20, 55, 110, 60, 90, 120, 180, - 240, 360, 480, 540}; - u32 dwThroughput = 0; - u16 wIdxUpRate = 0; - u32 dwTxDiff = 0; - - if (pMgmt->eScanState != WMAC_NO_SCANNING) - return; /* Don't do Fallback when scanning Channel */ - - psNodeDBTable->uTimeCount++; - - if (psNodeDBTable->uTxFail[MAX_RATE] > psNodeDBTable->uTxOk[MAX_RATE]) - dwTxDiff = psNodeDBTable->uTxFail[MAX_RATE] - psNodeDBTable->uTxOk[MAX_RATE]; - - if ((psNodeDBTable->uTxOk[MAX_RATE] < AUTORATE_TXOK_CNT) && - (dwTxDiff < AUTORATE_TXFAIL_CNT) && - (psNodeDBTable->uTimeCount < AUTORATE_TIMEOUT)) { - return; - } - - if (psNodeDBTable->uTimeCount >= AUTORATE_TIMEOUT) - psNodeDBTable->uTimeCount = 0; - - for (ii = 0; ii < MAX_RATE; ii++) { - if (psNodeDBTable->wSuppRate & (0x0001<wTxDataRate; ii++) { - if ((psNodeDBTable->uTxOk[ii] != 0) || - (psNodeDBTable->uTxFail[ii] != 0)) { - dwThroughputTbl[ii] *= psNodeDBTable->uTxOk[ii]; - if (ii < RATE_11M) - psNodeDBTable->uTxFail[ii] *= 4; - dwThroughputTbl[ii] /= (psNodeDBTable->uTxOk[ii] + psNodeDBTable->uTxFail[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Rate %d,Ok: %d, Fail:%d, Throughput:%d\n", - ii, (int)psNodeDBTable->uTxOk[ii], (int)psNodeDBTable->uTxFail[ii], (int)dwThroughputTbl[ii]); - } - dwThroughput = dwThroughputTbl[psNodeDBTable->wTxDataRate]; - - wIdxDownRate = psNodeDBTable->wTxDataRate; - for (ii = psNodeDBTable->wTxDataRate; ii > 0;) { - ii--; - if ((dwThroughputTbl[ii] > dwThroughput) && - (bAutoRate[ii] == true)) { - dwThroughput = dwThroughputTbl[ii]; - wIdxDownRate = (u16) ii; - } - } - psNodeDBTable->wTxDataRate = wIdxDownRate; - if (psNodeDBTable->uTxOk[MAX_RATE]) { - if (psNodeDBTable->uTxOk[MAX_RATE] > - (psNodeDBTable->uTxFail[MAX_RATE] * 4)) { - psNodeDBTable->wTxDataRate = wIdxUpRate; - } - } else { /* adhoc, if uTxOk(total) == 0 & uTxFail(total) == 0 */ - if (psNodeDBTable->uTxFail[MAX_RATE] == 0) - psNodeDBTable->wTxDataRate = wIdxUpRate; - } - - if (pDevice->byBBType == BB_TYPE_11A) { - if (psNodeDBTable->wTxDataRate <= RATE_11M) - psNodeDBTable->wTxDataRate = RATE_6M; - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"uTxOk[MAX_RATE] %d, uTxFail[MAX_RATE]:%d\n", (int)psNodeDBTable->uTxOk[MAX_RATE], (int)psNodeDBTable->uTxFail[MAX_RATE]); - s_vResetCounter(psNodeDBTable); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Rate: %d, U:%d, D:%d\n", (int)psNodeDBTable->wTxDataRate, (int)wIdxUpRate, (int)wIdxDownRate); - return; -} - -/*+ - * - * Description: - * This routine is used to assemble available Rate IE. - * - * Parameters: - * In: - * pDevice - * Out: - * - * Return Value: None - * --*/ -u8 RATEuSetIE(PWLAN_IE_SUPP_RATES pSrcRates, PWLAN_IE_SUPP_RATES pDstRates, - unsigned int uRateLen) -{ - unsigned int ii, uu, uRateCnt = 0; - - if ((pSrcRates == NULL) || (pDstRates == NULL)) - return 0; - - if (pSrcRates->len == 0) - return 0; - - for (ii = 0; ii < uRateLen; ii++) { - for (uu = 0; uu < pSrcRates->len; uu++) { - if ((pSrcRates->abyRates[uu] & 0x7F) == acbyIERate[ii]) { - pDstRates->abyRates[uRateCnt++] = pSrcRates->abyRates[uu]; - break; - } - } - } - return (u8)uRateCnt; -} diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h deleted file mode 100644 index 19b2c6646b75..000000000000 --- a/drivers/staging/vt6656/datarate.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: datarate.h - * - * Purpose: Handles the auto fallback & data rates functions - * - * Author: Lyndon Chen - * - * Date: July 16, 2002 - * - */ -#ifndef __DATARATE_H__ -#define __DATARATE_H__ - -#define FALLBACK_PKT_COLLECT_TR_H 50 /* pkts */ -#define FALLBACK_PKT_COLLECT_TR_L 10 /* pkts */ -#define FALLBACK_POLL_SECOND 5 /* 5 sec */ -#define FALLBACK_RECOVER_SECOND 30 /* 30 sec */ -#define FALLBACK_THRESHOLD 15 /* percent */ -#define UPGRADE_THRESHOLD 5 /* percent */ -#define UPGRADE_CNT_THRD 3 /* times */ -#define RETRY_TIMES_THRD_H 2 /* times */ -#define RETRY_TIMES_THRD_L 1 /* times */ - -void RATEvParseMaxRate(struct vnt_private *, PWLAN_IE_SUPP_RATES pItemRates, - PWLAN_IE_SUPP_RATES pItemExtRates, int bUpdateBasicRate, - u16 *pwMaxBasicRate, u16 *pwMaxSuppRate, u16 *pwSuppRate, - u8 *pbyTopCCKRate, u8 *pbyTopOFDMRate); - -void RATEvTxRateFallBack(struct vnt_private *pDevice, - PKnownNodeDB psNodeDBTable); - -u8 -RATEuSetIE( - PWLAN_IE_SUPP_RATES pSrcRates, - PWLAN_IE_SUPP_RATES pDstRates, - unsigned int uRateLen - ); - -u16 -RATEwGetRateIdx( - u8 byRate - ); - -#endif /* __DATARATE_H__ */ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 60230f29c374..f40d6b42b6b3 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -43,7 +43,6 @@ #include "mac.h" #include "baseband.h" #include "rf.h" -#include "datarate.h" #include "usbpipe.h" //static int msglevel =MSG_LEVEL_DEBUG; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d9e766b8650f..26fac20ad262 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -57,7 +57,6 @@ #include "rxtx.h" #include "bssdb.h" #include "dpc.h" -#include "datarate.h" #include "rf.h" #include "firmware.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 6bfd27234080..8c2c2bd28571 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -39,7 +39,6 @@ #include "rf.h" #include "baseband.h" #include "usbpipe.h" -#include "datarate.h" #define BY_AL2230_REG_LEN 23 //24bit #define CB_AL2230_INIT_SEQ 15 diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 57c2b94ed5f0..492d9c3cca88 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -49,7 +49,6 @@ #include "bssdb.h" #include "mac.h" #include "rf.h" -#include "datarate.h" #include "usbpipe.h" static int msglevel = MSG_LEVEL_INFO; -- cgit From 4adc5a946a7d9afcdd8cd4efd3faaed5c02dbc04 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:57 +0100 Subject: staging: vt6656: dead code remove 80211mgr.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/80211mgr.c | 849 -------------------------------------- drivers/staging/vt6656/80211mgr.h | 808 ------------------------------------ drivers/staging/vt6656/Makefile | 1 - drivers/staging/vt6656/bssdb.h | 1 - drivers/staging/vt6656/key.h | 2 +- drivers/staging/vt6656/wcmd.h | 2 +- drivers/staging/vt6656/wmgr.h | 2 - 7 files changed, 2 insertions(+), 1663 deletions(-) delete mode 100644 drivers/staging/vt6656/80211mgr.c delete mode 100644 drivers/staging/vt6656/80211mgr.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/80211mgr.c b/drivers/staging/vt6656/80211mgr.c deleted file mode 100644 index 09bfe2412651..000000000000 --- a/drivers/staging/vt6656/80211mgr.c +++ /dev/null @@ -1,849 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: 80211mgr.c - * - * Purpose: Handles the 802.11 management support functions - * - * Author: Lyndon Chen - * - * Date: May 8, 2002 - * - * Functions: - * vMgrEncodeBeacon - Encode the Beacon frame - * vMgrDecodeBeacon - Decode the Beacon frame - * vMgrEncodeDisassociation - Encode the Disassociation frame - * vMgrDecodeDisassociation - Decode the Disassociation frame - * vMgrEncodeAssocRequest - Encode the Association request frame - * vMgrDecodeAssocRequest - Decode the Association request frame - * vMgrEncodeAssocResponse - Encode the Association response frame - * vMgrDecodeAssocResponse - Decode the Association response frame - * vMgrEncodeReAssocRequest - Encode the ReAssociation request frame - * vMgrDecodeReAssocRequest - Decode the ReAssociation request frame - * vMgrEncodeProbeRequest - Encode the Probe request frame - * vMgrDecodeProbeRequest - Decode the Probe request frame - * vMgrEncodeProbeResponse - Encode the Probe response frame - * vMgrDecodeProbeResponse - Decode the Probe response frame - * vMgrEncodeAuthen - Encode the Authentication frame - * vMgrDecodeAuthen - Decode the Authentication frame - * vMgrEncodeDeauthen - Encode the DeAuthentication frame - * vMgrDecodeDeauthen - Decode the DeAuthentication frame - * vMgrEncodeReassocResponse - Encode the Reassociation response frame - * - * Revision History: - * - */ - -#include "device.h" -#include "tmacro.h" -#include "80211mgr.h" -#include "80211hdr.h" - -static int msglevel = MSG_LEVEL_INFO; -/*static int msglevel =MSG_LEVEL_DEBUG;*/ - -/*+ - * - * Routine Description: - * Encode Beacon frame body offset - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeBeacon( - PWLAN_FR_BEACON pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pqwTimestamp = - (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + - WLAN_BEACON_OFF_TS); - pFrame->pwBeaconInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_BEACON_OFF_BCN_INT); - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_BEACON_OFF_CAPINFO); - - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID; - - return; -} - -/*+ - * - * Routine Description: - * Decode Beacon frame body offset - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeBeacon( - PWLAN_FR_BEACON pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pqwTimestamp = - (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + - WLAN_BEACON_OFF_TS); - pFrame->pwBeaconInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_BEACON_OFF_BCN_INT); - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_BEACON_OFF_CAPINFO); - - /* Information elements */ - pItem = (PWLAN_IE)((u8 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))) - + WLAN_BEACON_OFF_SSID); - while (((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) { - - switch (pItem->byElementID) { - case WLAN_EID_SSID: - if (pFrame->pSSID == NULL) - pFrame->pSSID = (PWLAN_IE_SSID)pItem; - break; - case WLAN_EID_SUPP_RATES: - if (pFrame->pSuppRates == NULL) - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - case WLAN_EID_FH_PARMS: - /* pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem; */ - break; - case WLAN_EID_DS_PARMS: - if (pFrame->pDSParms == NULL) - pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem; - break; - case WLAN_EID_CF_PARMS: - if (pFrame->pCFParms == NULL) - pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem; - break; - case WLAN_EID_IBSS_PARMS: - if (pFrame->pIBSSParms == NULL) - pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem; - break; - case WLAN_EID_TIM: - if (pFrame->pTIM == NULL) - pFrame->pTIM = (PWLAN_IE_TIM)pItem; - break; - - case WLAN_EID_RSN: - if (pFrame->pRSN == NULL) - pFrame->pRSN = (PWLAN_IE_RSN)pItem; - break; - case WLAN_EID_RSN_WPA: - break; - - case WLAN_EID_ERP: - if (pFrame->pERP == NULL) - pFrame->pERP = (PWLAN_IE_ERP)pItem; - break; - case WLAN_EID_EXTSUPP_RATES: - if (pFrame->pExtSuppRates == NULL) - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - case WLAN_EID_COUNTRY: /* 7 */ - if (pFrame->pIE_Country == NULL) - pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem; - break; - - case WLAN_EID_PWR_CONSTRAINT: /* 32 */ - if (pFrame->pIE_PowerConstraint == NULL) - pFrame->pIE_PowerConstraint = (PWLAN_IE_PW_CONST)pItem; - break; - - case WLAN_EID_CH_SWITCH: /* 37 */ - if (pFrame->pIE_CHSW == NULL) - pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem; - break; - - case WLAN_EID_QUIET: /* 40 */ - if (pFrame->pIE_Quiet == NULL) - pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem; - break; - - case WLAN_EID_IBSS_DFS: - if (pFrame->pIE_IBSSDFS == NULL) - pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem; - break; - - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in beacon decode.\n", pItem->byElementID); - break; - - } - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - } -} - -/*+ - * - * Routine Description: - * Encode Disassociation - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeDisassociation( - PWLAN_FR_DISASSOC pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwReason = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_DISASSOC_OFF_REASON); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON + sizeof(*(pFrame->pwReason)); -} - -/*+ - * - * Routine Description: - * Decode Disassociation - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeDisassociation( - PWLAN_FR_DISASSOC pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwReason = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_DISASSOC_OFF_REASON); -} - -/*+ - * - * Routine Description: - * Encode Association Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeAssocRequest( - PWLAN_FR_ASSOCREQ pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCREQ_OFF_CAP_INFO); - pFrame->pwListenInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCREQ_OFF_LISTEN_INT); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT + sizeof(*(pFrame->pwListenInterval)); -} - -/*+ - * - * Routine Description: (AP) - * Decode Association Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeAssocRequest( - PWLAN_FR_ASSOCREQ pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCREQ_OFF_CAP_INFO); - pFrame->pwListenInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCREQ_OFF_LISTEN_INT); - - /* Information elements */ - pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCREQ_OFF_SSID); - - while (((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) { - switch (pItem->byElementID) { - case WLAN_EID_SSID: - if (pFrame->pSSID == NULL) - pFrame->pSSID = (PWLAN_IE_SSID)pItem; - break; - case WLAN_EID_SUPP_RATES: - if (pFrame->pSuppRates == NULL) - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - case WLAN_EID_RSN: - if (pFrame->pRSN == NULL) - pFrame->pRSN = (PWLAN_IE_RSN)pItem; - break; - case WLAN_EID_RSN_WPA: - if (pFrame->pRSNWPA == NULL) { - } - break; - case WLAN_EID_EXTSUPP_RATES: - if (pFrame->pExtSuppRates == NULL) - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in assocreq decode.\n", - pItem->byElementID); - break; - } - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - } -} - -/*+ - * - * Routine Description: (AP) - * Encode Association Response - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeAssocResponse( - PWLAN_FR_ASSOCRESP pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_CAP_INFO); - pFrame->pwStatus = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_STATUS); - pFrame->pwAid = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_AID); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID - + sizeof(*(pFrame->pwAid)); -} - -/*+ - * - * Routine Description: - * Decode Association Response - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeAssocResponse( - PWLAN_FR_ASSOCRESP pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_CAP_INFO); - pFrame->pwStatus = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_STATUS); - pFrame->pwAid = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_AID); - - /* Information elements */ - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_ASSOCRESP_OFF_SUPP_RATES); - - pItem = (PWLAN_IE)(pFrame->pSuppRates); - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - - if ((((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) { - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pFrame->pExtSuppRates=[%p].\n", pItem); - } else - pFrame->pExtSuppRates = NULL; -} - -/*+ - * - * Routine Description: - * Encode Reassociation Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeReassocRequest( - PWLAN_FR_REASSOCREQ pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_CAP_INFO); - pFrame->pwListenInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_LISTEN_INT); - pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_CURR_AP); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCREQ_OFF_CURR_AP + sizeof(*(pFrame->pAddrCurrAP)); -} - -/*+ - * - * Routine Description: (AP) - * Decode Reassociation Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeReassocRequest( - PWLAN_FR_REASSOCREQ pFrame - ) -{ - PWLAN_IE pItem; - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_CAP_INFO); - pFrame->pwListenInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_LISTEN_INT); - pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_CURR_AP); - - /* Information elements */ - pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCREQ_OFF_SSID); - - while (((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) { - - switch (pItem->byElementID) { - case WLAN_EID_SSID: - if (pFrame->pSSID == NULL) - pFrame->pSSID = (PWLAN_IE_SSID)pItem; - break; - case WLAN_EID_SUPP_RATES: - if (pFrame->pSuppRates == NULL) - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - case WLAN_EID_RSN: - if (pFrame->pRSN == NULL) - pFrame->pRSN = (PWLAN_IE_RSN)pItem; - break; - case WLAN_EID_RSN_WPA: - if (pFrame->pRSNWPA == NULL) - break; - - case WLAN_EID_EXTSUPP_RATES: - if (pFrame->pExtSuppRates == NULL) - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in reassocreq decode.\n", - pItem->byElementID); - break; - } - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - } -} - -/*+ - * - * Routine Description: - * Encode Probe Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeProbeRequest( - PWLAN_FR_PROBEREQ pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - pFrame->len = WLAN_HDR_ADDR3_LEN; -} - -/*+ - * - * Routine Description: - * Decode Probe Request - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeProbeRequest( - PWLAN_FR_PROBEREQ pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Information elements */ - pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))); - - while (((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) { - - switch (pItem->byElementID) { - case WLAN_EID_SSID: - if (pFrame->pSSID == NULL) - pFrame->pSSID = (PWLAN_IE_SSID)pItem; - break; - - case WLAN_EID_SUPP_RATES: - if (pFrame->pSuppRates == NULL) - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - case WLAN_EID_EXTSUPP_RATES: - if (pFrame->pExtSuppRates == NULL) - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in probereq\n", pItem->byElementID); - break; - } - - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - } -} - -/*+ - * - * Routine Description: - * Encode Probe Response - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeProbeResponse( - PWLAN_FR_PROBERESP pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pqwTimestamp = - (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + - WLAN_PROBERESP_OFF_TS); - pFrame->pwBeaconInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_PROBERESP_OFF_BCN_INT); - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_PROBERESP_OFF_CAP_INFO); - - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_PROBERESP_OFF_CAP_INFO + - sizeof(*(pFrame->pwCapInfo)); -} - -/*+ - * - * Routine Description: - * Decode Probe Response - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeProbeResponse( - PWLAN_FR_PROBERESP pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pqwTimestamp = - (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + - WLAN_PROBERESP_OFF_TS); - pFrame->pwBeaconInterval = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_PROBERESP_OFF_BCN_INT); - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_PROBERESP_OFF_CAP_INFO); - - /* Information elements */ - pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_PROBERESP_OFF_SSID); - - while (((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) { - switch (pItem->byElementID) { - case WLAN_EID_SSID: - if (pFrame->pSSID == NULL) - pFrame->pSSID = (PWLAN_IE_SSID)pItem; - break; - case WLAN_EID_SUPP_RATES: - if (pFrame->pSuppRates == NULL) - pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - case WLAN_EID_FH_PARMS: - break; - case WLAN_EID_DS_PARMS: - if (pFrame->pDSParms == NULL) - pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem; - break; - case WLAN_EID_CF_PARMS: - if (pFrame->pCFParms == NULL) - pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem; - break; - case WLAN_EID_IBSS_PARMS: - if (pFrame->pIBSSParms == NULL) - pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem; - break; - - case WLAN_EID_RSN: - if (pFrame->pRSN == NULL) - pFrame->pRSN = (PWLAN_IE_RSN)pItem; - break; - case WLAN_EID_RSN_WPA: - if (pFrame->pRSNWPA == NULL) { - } - break; - case WLAN_EID_ERP: - if (pFrame->pERP == NULL) - pFrame->pERP = (PWLAN_IE_ERP)pItem; - break; - case WLAN_EID_EXTSUPP_RATES: - if (pFrame->pExtSuppRates == NULL) - pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; - break; - - case WLAN_EID_COUNTRY: /* 7 */ - if (pFrame->pIE_Country == NULL) - pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem; - break; - - case WLAN_EID_PWR_CONSTRAINT: /* 32 */ - if (pFrame->pIE_PowerConstraint == NULL) - pFrame->pIE_PowerConstraint = (PWLAN_IE_PW_CONST)pItem; - break; - - case WLAN_EID_CH_SWITCH: /* 37 */ - if (pFrame->pIE_CHSW == NULL) - pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem; - break; - - case WLAN_EID_QUIET: /* 40 */ - if (pFrame->pIE_Quiet == NULL) - pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem; - break; - - case WLAN_EID_IBSS_DFS: - if (pFrame->pIE_IBSSDFS == NULL) - pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem; - break; - - default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in proberesp\n", pItem->byElementID); - break; - } - - pItem = (PWLAN_IE)(((u8 *)pItem) + 2 + pItem->len); - } -} - -/*+ - * - * Routine Description: - * Encode Authentication frame - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeAuthen( - PWLAN_FR_AUTHEN pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwAuthAlgorithm = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_AUTH_ALG); - pFrame->pwAuthSequence = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_AUTH_SEQ); - pFrame->pwStatus = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_STATUS); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_AUTHEN_OFF_STATUS + sizeof(*(pFrame->pwStatus)); -} - -/*+ - * - * Routine Description: - * Decode Authentication - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeAuthen( - PWLAN_FR_AUTHEN pFrame - ) -{ - PWLAN_IE pItem; - - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwAuthAlgorithm = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_AUTH_ALG); - pFrame->pwAuthSequence = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_AUTH_SEQ); - pFrame->pwStatus = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_STATUS); - - /* Information elements */ - pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_AUTHEN_OFF_CHALLENGE); - - if ((((u8 *)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_CHALLENGE)) - pFrame->pChallenge = (PWLAN_IE_CHALLENGE)pItem; -} - -/*+ - * - * Routine Description: - * Encode Authentication - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeDeauthen( - PWLAN_FR_DEAUTHEN pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwReason = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_DEAUTHEN_OFF_REASON); - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DEAUTHEN_OFF_REASON + sizeof(*(pFrame->pwReason)); -} - -/*+ - * - * Routine Description: - * Decode Deauthentication - * - * - * Return Value: - * None. - * --*/ - -void -vMgrDecodeDeauthen( - PWLAN_FR_DEAUTHEN pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwReason = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_DEAUTHEN_OFF_REASON); -} - -/*+ - * - * Routine Description: (AP) - * Encode Reassociation Response - * - * - * Return Value: - * None. - * --*/ - -void -vMgrEncodeReassocResponse( - PWLAN_FR_REASSOCRESP pFrame - ) -{ - pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - /* Fixed Fields */ - pFrame->pwCapInfo = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCRESP_OFF_CAP_INFO); - pFrame->pwStatus = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCRESP_OFF_STATUS); - pFrame->pwAid = (u16 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) - + WLAN_REASSOCRESP_OFF_AID); - - pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCRESP_OFF_AID + sizeof(*(pFrame->pwAid)); -} diff --git a/drivers/staging/vt6656/80211mgr.h b/drivers/staging/vt6656/80211mgr.h deleted file mode 100644 index 39cde1a0b66c..000000000000 --- a/drivers/staging/vt6656/80211mgr.h +++ /dev/null @@ -1,808 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: 80211mgr.h - * - * Purpose: 802.11 management frames pre-defines. - * - * - * Author: Lyndon Chen - * - * Date: May 8, 2002 - * - */ - -#ifndef __80211MGR_H__ -#define __80211MGR_H__ - -#include "80211hdr.h" - -#define WLAN_MIN_ARRAY 1 - -/* Information Element ID value */ -#define WLAN_EID_SSID 0 -#define WLAN_EID_SUPP_RATES 1 -#define WLAN_EID_FH_PARMS 2 -#define WLAN_EID_DS_PARMS 3 -#define WLAN_EID_CF_PARMS 4 -#define WLAN_EID_TIM 5 -#define WLAN_EID_IBSS_PARMS 6 -#define WLAN_EID_COUNTRY 7 -#define WLAN_EID_CHALLENGE 16 -#define WLAN_EID_PWR_CONSTRAINT 32 -#define WLAN_EID_PWR_CAPABILITY 33 -#define WLAN_EID_TPC_REQ 34 -#define WLAN_EID_TPC_REP 35 -#define WLAN_EID_SUPP_CH 36 -#define WLAN_EID_CH_SWITCH 37 -#define WLAN_EID_MEASURE_REQ 38 -#define WLAN_EID_MEASURE_REP 39 -#define WLAN_EID_QUIET 40 -#define WLAN_EID_IBSS_DFS 41 -#define WLAN_EID_ERP 42 -/* reference 802.11i 7.3.2 table 20 */ -#define WLAN_EID_RSN 48 -#define WLAN_EID_EXTSUPP_RATES 50 -/* reference WiFi WPA spec */ -#define WLAN_EID_RSN_WPA 221 - -#ifdef Cisco_ccx -#define WLAN_EID_CCX 133 -#define WLAN_EID_CCX_IP 149 -#define WLAN_EID_CCX_Ver 221 -#endif - -#define WLAN_EID_ERP_NONERP_PRESENT 0x01 -#define WLAN_EID_ERP_USE_PROTECTION 0x02 -#define WLAN_EID_ERP_BARKER_MODE 0x04 - -/* reason codes */ -#define WLAN_MGMT_REASON_RSVD 0 -#define WLAN_MGMT_REASON_UNSPEC 1 -#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2 -#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3 -#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4 -#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5 -#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6 -#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7 -#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8 -#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9 -#define WLAN_MGMT_REASON_DISASSOC_PWR_CAP_UNACCEPT 10 -#define WLAN_MGMT_REASON_DISASSOC_SUPP_CH_UNACCEPT 11 -#define WLAN_MGMT_REASON_INVALID_IE 13 -#define WLAN_MGMT_REASON_MIC_FAILURE 14 -#define WLAN_MGMT_REASON_4WAY_HANDSHAKE_TIMEOUT 15 -#define WLAN_MGMT_REASON_GRPKEY_UPDATE_TIMEOUT 16 -#define WLAN_MGMT_REASON_4WAY_INFO_DIFFERENT 17 -#define WLAN_MGMT_REASON_MULTCAST_CIPHER_INVALID 18 -#define WLAN_MGMT_REASON_UNCAST_CIPHER_INVALID 19 -#define WLAN_MGMT_REASON_AKMP_INVALID 20 -#define WLAN_MGMT_REASON_RSNE_UNSUPPORTED 21 -#define WLAN_MGMT_REASON_RSNE_CAP_INVALID 22 -#define WLAN_MGMT_REASON_80211X_AUTH_FAILED 23 - -/* status codes */ -#define WLAN_MGMT_STATUS_SUCCESS 0 -#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1 -#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10 -#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12 -#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13 -#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14 -#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15 -#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_SHORTPREAMBLE 19 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_PBCC 20 -#define WLAN_MGMT_STATUS_ASSOC_DENIED_AGILITY 21 - -/* reference 802.11h 7.3.1.9 */ -#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SPECTRUM_MNG 22 -#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_PWR_CAP 23 -#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SUPP_CH 24 - -/* reference 802.11g 7.3.1.9 */ -#define WLAN_MGMT_STATUS_SHORTSLOTTIME_UNSUPPORTED 25 -#define WLAN_MGMT_STATUS_DSSSOFDM_UNSUPPORTED 26 - -/* reference 802.11i 7.3.1.9 table 19 */ -#define WLAN_MGMT_STATUS_INVALID_IE 40 -#define WLAN_MGMT_STATUS_GROUP_CIPHER_INVALID 41 -#define WLAN_MGMT_STATUS_PAIRWISE_CIPHER_INVALID 42 -#define WLAN_MGMT_STATUS_AKMP_INVALID 43 -#define WLAN_MGMT_STATUS_UNSUPPORT_RSN_IE_VER 44 -#define WLAN_MGMT_STATUS_INVALID_RSN_IE_CAP 45 -#define WLAN_MGMT_STATUS_CIPHER_REJECT 46 - -/* auth algorithm */ -#define WLAN_AUTH_ALG_OPENSYSTEM 0 -#define WLAN_AUTH_ALG_SHAREDKEY 1 - -/* management frame field offsets */ - -/* - * Note: Not all fields are listed because of variable lengths - * Note: These offsets are from the start of the frame data - */ - -#define WLAN_BEACON_OFF_TS 0 -#define WLAN_BEACON_OFF_BCN_INT 8 -#define WLAN_BEACON_OFF_CAPINFO 10 -#define WLAN_BEACON_OFF_SSID 12 - -#define WLAN_DISASSOC_OFF_REASON 0 - -#define WLAN_ASSOCREQ_OFF_CAP_INFO 0 -#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2 -#define WLAN_ASSOCREQ_OFF_SSID 4 - -#define WLAN_ASSOCRESP_OFF_CAP_INFO 0 -#define WLAN_ASSOCRESP_OFF_STATUS 2 -#define WLAN_ASSOCRESP_OFF_AID 4 -#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6 - -#define WLAN_REASSOCREQ_OFF_CAP_INFO 0 -#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2 -#define WLAN_REASSOCREQ_OFF_CURR_AP 4 -#define WLAN_REASSOCREQ_OFF_SSID 10 - -#define WLAN_REASSOCRESP_OFF_CAP_INFO 0 -#define WLAN_REASSOCRESP_OFF_STATUS 2 -#define WLAN_REASSOCRESP_OFF_AID 4 -#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6 - -#define WLAN_PROBEREQ_OFF_SSID 0 - -#define WLAN_PROBERESP_OFF_TS 0 -#define WLAN_PROBERESP_OFF_BCN_INT 8 -#define WLAN_PROBERESP_OFF_CAP_INFO 10 -#define WLAN_PROBERESP_OFF_SSID 12 - -#define WLAN_AUTHEN_OFF_AUTH_ALG 0 -#define WLAN_AUTHEN_OFF_AUTH_SEQ 2 -#define WLAN_AUTHEN_OFF_STATUS 4 -#define WLAN_AUTHEN_OFF_CHALLENGE 6 - -#define WLAN_DEAUTHEN_OFF_REASON 0 - -/* cipher suite selectors defined in 802.11i */ -#define WLAN_11i_CSS_USE_GROUP 0 -#define WLAN_11i_CSS_WEP40 1 -#define WLAN_11i_CSS_TKIP 2 -#define WLAN_11i_CSS_CCMP 4 -#define WLAN_11i_CSS_WEP104 5 -#define WLAN_11i_CSS_UNKNOWN 255 - -/* authentication and key management suite selectors defined in 802.11i */ -#define WLAN_11i_AKMSS_802_1X 1 -#define WLAN_11i_AKMSS_PSK 2 -#define WLAN_11i_AKMSS_UNKNOWN 255 - -/* measurement type definitions reference IEEE 802.11h table 20b */ -#define MEASURE_TYPE_BASIC 0 -#define MEASURE_TYPE_CCA 1 -#define MEASURE_TYPE_RPI 2 - -/* measurement request mode definitions reference IEEE 802.11h figure 46h */ -#define MEASURE_MODE_ENABLE 0x02 -#define MEASURE_MODE_REQ 0x04 -#define MEASURE_MODE_REP 0x08 - -/* measurement report mode definitions reference IEEE 802.11h figure 46m */ -#define MEASURE_MODE_LATE 0x01 -#define MEASURE_MODE_INCAPABLE 0x02 -#define MEASURE_MODE_REFUSED 0x04 - -/* Information Element types */ - -#pragma pack(1) -typedef struct tagWLAN_IE { - u8 byElementID; - u8 len; -} __attribute__ ((__packed__)) -WLAN_IE, *PWLAN_IE; - -/* Service Set IDentity (SSID) */ -#pragma pack(1) -typedef struct tagWLAN_IE_SSID { - u8 byElementID; - u8 len; - u8 abySSID[1]; -} __attribute__ ((__packed__)) -WLAN_IE_SSID, *PWLAN_IE_SSID; - -/* Supported Rates */ -#pragma pack(1) -typedef struct tagWLAN_IE_SUPP_RATES { - u8 byElementID; - u8 len; - u8 abyRates[1]; -} __attribute__ ((__packed__)) -WLAN_IE_SUPP_RATES, *PWLAN_IE_SUPP_RATES; - -/* FH Parameter Set */ -#pragma pack(1) -typedef struct _WLAN_IE_FH_PARMS { - u8 byElementID; - u8 len; - u16 wDwellTime; - u8 byHopSet; - u8 byHopPattern; - u8 byHopIndex; -} WLAN_IE_FH_PARMS, *PWLAN_IE_FH_PARMS; - -/* DS Parameter Set */ -#pragma pack(1) -typedef struct tagWLAN_IE_DS_PARMS { - u8 byElementID; - u8 len; - u8 byCurrChannel; -} __attribute__ ((__packed__)) -WLAN_IE_DS_PARMS, *PWLAN_IE_DS_PARMS; - -/* CF Parameter Set */ -#pragma pack(1) -typedef struct tagWLAN_IE_CF_PARMS { - u8 byElementID; - u8 len; - u8 byCFPCount; - u8 byCFPPeriod; - u16 wCFPMaxDuration; - u16 wCFPDurRemaining; -} __attribute__ ((__packed__)) -WLAN_IE_CF_PARMS, *PWLAN_IE_CF_PARMS; - -/* TIM */ -#pragma pack(1) -typedef struct tagWLAN_IE_TIM { - u8 byElementID; - u8 len; - u8 byDTIMCount; - u8 byDTIMPeriod; - u8 byBitMapCtl; - u8 byVirtBitMap[1]; -} __attribute__ ((__packed__)) -WLAN_IE_TIM, *PWLAN_IE_TIM; - -/* IBSS Parameter Set */ -#pragma pack(1) -typedef struct tagWLAN_IE_IBSS_PARMS { - u8 byElementID; - u8 len; - u16 wATIMWindow; -} __attribute__ ((__packed__)) -WLAN_IE_IBSS_PARMS, *PWLAN_IE_IBSS_PARMS; - -/* Challenge Text */ -#pragma pack(1) -typedef struct tagWLAN_IE_CHALLENGE { - u8 byElementID; - u8 len; - u8 abyChallenge[1]; -} __attribute__ ((__packed__)) -WLAN_IE_CHALLENGE, *PWLAN_IE_CHALLENGE; - -#pragma pack(1) -typedef struct tagWLAN_IE_RSN_EXT { - u8 byElementID; - u8 len; - u8 abyOUI[4]; - u16 wVersion; - u8 abyMulticast[4]; - u16 wPKCount; - struct { - u8 abyOUI[4]; - } PKSList[1]; - /* the rest is variable so need to overlay ieauth structure */ -} WLAN_IE_RSN_EXT, *PWLAN_IE_RSN_EXT; - -#pragma pack(1) -typedef struct tagWLAN_IE_RSN_AUTH { - u16 wAuthCount; - struct { - u8 abyOUI[4]; - } AuthKSList[1]; -} WLAN_IE_RSN_AUTH, *PWLAN_IE_RSN_AUTH; - -/* RSN Identity */ -#pragma pack(1) -typedef struct tagWLAN_IE_RSN { - u8 byElementID; - u8 len; - u16 wVersion; - u8 abyRSN[WLAN_MIN_ARRAY]; -} WLAN_IE_RSN, *PWLAN_IE_RSN; - -/* CCX Identity DavidWang */ -#pragma pack(1) -typedef struct tagWLAN_IE_CCX { -u8 byElementID; -u8 len; -u8 abyCCX[30]; -} WLAN_IE_CCX, *PWLAN_IE_CCX; -#pragma pack(1) -typedef struct tagWLAN_IE_CCX_IP { -u8 byElementID; -u8 len; -u8 abyCCXOUI[4]; -u8 abyCCXIP[4]; -u8 abyCCXREV[2]; -} WLAN_IE_CCX_IP, *PWLAN_IE_CCX_IP; -#pragma pack(1) -typedef struct tagWLAN_IE_CCX_Ver { -u8 byElementID; -u8 len; -u8 abyCCXVer[5]; -} WLAN_IE_CCX_Ver, *PWLAN_IE_CCX_Ver; - -/* ERP */ -#pragma pack(1) -typedef struct tagWLAN_IE_ERP { - u8 byElementID; - u8 len; - u8 byContext; -} __attribute__ ((__packed__)) -WLAN_IE_ERP, *PWLAN_IE_ERP; - -#pragma pack(1) -typedef struct _MEASEURE_REQ { - u8 byChannel; - u8 abyStartTime[8]; - u8 abyDuration[2]; -} MEASEURE_REQ, *PMEASEURE_REQ, - MEASEURE_REQ_BASIC, *PMEASEURE_REQ_BASIC, - MEASEURE_REQ_CCA, *PMEASEURE_REQ_CCA, - MEASEURE_REQ_RPI, *PMEASEURE_REQ_RPI; - -typedef struct _MEASEURE_REP_BASIC { - u8 byChannel; - u8 abyStartTime[8]; - u8 abyDuration[2]; - u8 byMap; -} MEASEURE_REP_BASIC, *PMEASEURE_REP_BASIC; - -typedef struct _MEASEURE_REP_CCA { - u8 byChannel; - u8 abyStartTime[8]; - u8 abyDuration[2]; - u8 byCCABusyFraction; -} MEASEURE_REP_CCA, *PMEASEURE_REP_CCA; - -typedef struct _MEASEURE_REP_RPI { - u8 byChannel; - u8 abyStartTime[8]; - u8 abyDuration[2]; - u8 abyRPIdensity[8]; -} MEASEURE_REP_RPI, *PMEASEURE_REP_RPI; - -typedef union _MEASEURE_REP { - - MEASEURE_REP_BASIC sBasic; - MEASEURE_REP_CCA sCCA; - MEASEURE_REP_RPI sRPI; - -} MEASEURE_REP, *PMEASEURE_REP; - -typedef struct _WLAN_IE_MEASURE_REQ { - u8 byElementID; - u8 len; - u8 byToken; - u8 byMode; - u8 byType; - MEASEURE_REQ sReq; -} WLAN_IE_MEASURE_REQ, *PWLAN_IE_MEASURE_REQ; - -typedef struct _WLAN_IE_MEASURE_REP { - u8 byElementID; - u8 len; - u8 byToken; - u8 byMode; - u8 byType; - MEASEURE_REP sRep; -} WLAN_IE_MEASURE_REP, *PWLAN_IE_MEASURE_REP; - -typedef struct _WLAN_IE_CH_SW { - u8 byElementID; - u8 len; - u8 byMode; - u8 byChannel; - u8 byCount; -} WLAN_IE_CH_SW, *PWLAN_IE_CH_SW; - -typedef struct _WLAN_IE_QUIET { - u8 byElementID; - u8 len; - u8 byQuietCount; - u8 byQuietPeriod; - u8 abyQuietDuration[2]; - u8 abyQuietOffset[2]; -} WLAN_IE_QUIET, *PWLAN_IE_QUIET; - -typedef struct _WLAN_IE_COUNTRY { - u8 byElementID; - u8 len; - u8 abyCountryString[3]; - u8 abyCountryInfo[3]; -} WLAN_IE_COUNTRY, *PWLAN_IE_COUNTRY; - -typedef struct _WLAN_IE_PW_CONST { - u8 byElementID; - u8 len; - u8 byPower; -} WLAN_IE_PW_CONST, *PWLAN_IE_PW_CONST; - -typedef struct _WLAN_IE_PW_CAP { - u8 byElementID; - u8 len; - u8 byMinPower; - u8 byMaxPower; -} WLAN_IE_PW_CAP, *PWLAN_IE_PW_CAP; - -typedef struct _WLAN_IE_SUPP_CH { - u8 byElementID; - u8 len; - u8 abyChannelTuple[2]; -} WLAN_IE_SUPP_CH, *PWLAN_IE_SUPP_CH; - -typedef struct _WLAN_IE_TPC_REQ { - u8 byElementID; - u8 len; -} WLAN_IE_TPC_REQ, *PWLAN_IE_TPC_REQ; - -typedef struct _WLAN_IE_TPC_REP { - u8 byElementID; - u8 len; - u8 byTxPower; - u8 byLinkMargin; -} WLAN_IE_TPC_REP, *PWLAN_IE_TPC_REP; - -typedef struct _WLAN_IE_IBSS_DFS { - u8 byElementID; - u8 len; - u8 abyDFSOwner[6]; - u8 byDFSRecovery; - u8 abyChannelMap[2]; -} WLAN_IE_IBSS_DFS, *PWLAN_IE_IBSS_DFS; - -#pragma pack() - -/* frame types */ - -/* prototype structure, all mgmt frame types will start with these members */ -typedef struct tagWLAN_FR_MGMT { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - -} WLAN_FR_MGMT, *PWLAN_FR_MGMT; - -/* beacon frame */ -typedef struct tagWLAN_FR_BEACON { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u64 *pqwTimestamp; - u16 * pwBeaconInterval; - u16 * pwCapInfo; - /* info elements */ - PWLAN_IE_SSID pSSID; - PWLAN_IE_SUPP_RATES pSuppRates; -/* PWLAN_IE_FH_PARMS pFHParms; */ - PWLAN_IE_DS_PARMS pDSParms; - PWLAN_IE_CF_PARMS pCFParms; - PWLAN_IE_TIM pTIM; - PWLAN_IE_IBSS_PARMS pIBSSParms; - PWLAN_IE_RSN pRSN; - PWLAN_IE_RSN_EXT pRSNWPA; - PWLAN_IE_ERP pERP; - PWLAN_IE_SUPP_RATES pExtSuppRates; - PWLAN_IE_COUNTRY pIE_Country; - PWLAN_IE_PW_CONST pIE_PowerConstraint; - PWLAN_IE_CH_SW pIE_CHSW; - PWLAN_IE_IBSS_DFS pIE_IBSSDFS; - PWLAN_IE_QUIET pIE_Quiet; - -} WLAN_FR_BEACON, *PWLAN_FR_BEACON; - -/* IBSS ATIM frame */ -typedef struct tagWLAN_FR_IBSSATIM { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - - /* fixed fields */ - /* info elements */ - /* this frame type has a null body */ - -} WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM; - -/* disassociation */ -typedef struct tagWLAN_FR_DISASSOC { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwReason; - /* info elements */ - -} WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC; - -/* association request */ -typedef struct tagWLAN_FR_ASSOCREQ { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwCapInfo; - u16 * pwListenInterval; - /* info elements */ - PWLAN_IE_SSID pSSID; - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_RSN pRSN; - PWLAN_IE_CCX pCCX; - PWLAN_IE_CCX_IP pCCXIP; - PWLAN_IE_CCX_Ver pCCXVER; - PWLAN_IE_RSN_EXT pRSNWPA; - PWLAN_IE_SUPP_RATES pExtSuppRates; - PWLAN_IE_PW_CAP pCurrPowerCap; - PWLAN_IE_SUPP_CH pCurrSuppCh; - -} WLAN_FR_ASSOCREQ, *PWLAN_FR_ASSOCREQ; - -/* association response */ -typedef struct tagWLAN_FR_ASSOCRESP { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwCapInfo; - u16 * pwStatus; - u16 * pwAid; - /* info elements */ - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_SUPP_RATES pExtSuppRates; - -} WLAN_FR_ASSOCRESP, *PWLAN_FR_ASSOCRESP; - -/* reassociation request */ -typedef struct tagWLAN_FR_REASSOCREQ { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - - /* fixed fields */ - u16 * pwCapInfo; - u16 * pwListenInterval; - PIEEE_ADDR pAddrCurrAP; - - /* info elements */ - PWLAN_IE_SSID pSSID; - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_RSN pRSN; - PWLAN_IE_CCX pCCX; - PWLAN_IE_CCX_IP pCCXIP; - PWLAN_IE_CCX_Ver pCCXVER; - PWLAN_IE_RSN_EXT pRSNWPA; - PWLAN_IE_SUPP_RATES pExtSuppRates; - -} WLAN_FR_REASSOCREQ, *PWLAN_FR_REASSOCREQ; - -/* reassociation response */ -typedef struct tagWLAN_FR_REASSOCRESP { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwCapInfo; - u16 * pwStatus; - u16 * pwAid; - /* info elements */ - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_SUPP_RATES pExtSuppRates; - -} WLAN_FR_REASSOCRESP, *PWLAN_FR_REASSOCRESP; - -/* probe request */ -typedef struct tagWLAN_FR_PROBEREQ { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - /* info elements */ - PWLAN_IE_SSID pSSID; - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_SUPP_RATES pExtSuppRates; - -} WLAN_FR_PROBEREQ, *PWLAN_FR_PROBEREQ; - -/* probe response */ -typedef struct tagWLAN_FR_PROBERESP { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u64 *pqwTimestamp; - u16 * pwBeaconInterval; - u16 * pwCapInfo; - /* info elements */ - PWLAN_IE_SSID pSSID; - PWLAN_IE_SUPP_RATES pSuppRates; - PWLAN_IE_DS_PARMS pDSParms; - PWLAN_IE_CF_PARMS pCFParms; - PWLAN_IE_IBSS_PARMS pIBSSParms; - PWLAN_IE_RSN pRSN; - PWLAN_IE_RSN_EXT pRSNWPA; - PWLAN_IE_ERP pERP; - PWLAN_IE_SUPP_RATES pExtSuppRates; - PWLAN_IE_COUNTRY pIE_Country; - PWLAN_IE_PW_CONST pIE_PowerConstraint; - PWLAN_IE_CH_SW pIE_CHSW; - PWLAN_IE_IBSS_DFS pIE_IBSSDFS; - PWLAN_IE_QUIET pIE_Quiet; - -} WLAN_FR_PROBERESP, *PWLAN_FR_PROBERESP; - -/* authentication */ -typedef struct tagWLAN_FR_AUTHEN { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwAuthAlgorithm; - u16 * pwAuthSequence; - u16 * pwStatus; - /* info elements */ - PWLAN_IE_CHALLENGE pChallenge; - -} WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN; - -/* deauthentication */ -typedef struct tagWLAN_FR_DEAUTHEN { - - unsigned int uType; - unsigned int len; - u8 * pBuf; - PUWLAN_80211HDR pHdr; - /* fixed fields */ - u16 * pwReason; - - /* info elements */ - -} WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN; - -void -vMgrEncodeBeacon( - PWLAN_FR_BEACON pFrame - ); - -void -vMgrDecodeBeacon( - PWLAN_FR_BEACON pFrame - ); - -void -vMgrEncodeDisassociation( - PWLAN_FR_DISASSOC pFrame - ); - -void -vMgrDecodeDisassociation( - PWLAN_FR_DISASSOC pFrame - ); - -void -vMgrEncodeAssocRequest( - PWLAN_FR_ASSOCREQ pFrame - ); - -void -vMgrDecodeAssocRequest( - PWLAN_FR_ASSOCREQ pFrame - ); - -void -vMgrEncodeAssocResponse( - PWLAN_FR_ASSOCRESP pFrame - ); - -void -vMgrDecodeAssocResponse( - PWLAN_FR_ASSOCRESP pFrame - ); - -void -vMgrEncodeReassocRequest( - PWLAN_FR_REASSOCREQ pFrame - ); - -void -vMgrDecodeReassocRequest( - PWLAN_FR_REASSOCREQ pFrame - ); - -void -vMgrEncodeProbeRequest( - PWLAN_FR_PROBEREQ pFrame - ); - -void -vMgrDecodeProbeRequest( - PWLAN_FR_PROBEREQ pFrame - ); - -void -vMgrEncodeProbeResponse( - PWLAN_FR_PROBERESP pFrame - ); - -void -vMgrDecodeProbeResponse( - PWLAN_FR_PROBERESP pFrame - ); - -void -vMgrEncodeAuthen( - PWLAN_FR_AUTHEN pFrame - ); - -void -vMgrDecodeAuthen( - PWLAN_FR_AUTHEN pFrame - ); - -void -vMgrEncodeDeauthen( - PWLAN_FR_DEAUTHEN pFrame - ); - -void -vMgrDecodeDeauthen( - PWLAN_FR_DEAUTHEN pFrame - ); - -void -vMgrEncodeReassocResponse( - PWLAN_FR_REASSOCRESP pFrame - ); - -#endif /* __80211MGR_H__ */ diff --git a/drivers/staging/vt6656/Makefile b/drivers/staging/vt6656/Makefile index 92c6aa7c10ff..3dbe1f89dd25 100644 --- a/drivers/staging/vt6656/Makefile +++ b/drivers/staging/vt6656/Makefile @@ -6,7 +6,6 @@ vt6656_stage-y += main_usb.o \ card.o \ mac.o \ baseband.o \ - 80211mgr.o \ wcmd.o\ rxtx.o \ dpc.o \ diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index d41596560274..6cfa8afdf029 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -32,7 +32,6 @@ #include #include "80211hdr.h" -#include "80211mgr.h" #include "card.h" #define MAX_NODE_NUM 64 diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 4303c547c00a..779a97a29fa6 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -30,7 +30,7 @@ #ifndef __KEY_H__ #define __KEY_H__ -#include "80211mgr.h" +#include "device.h" #define MAX_GROUP_KEY 4 #define MAX_KEY_TABLE 11 diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 894eea16e378..91351c670174 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -30,7 +30,7 @@ #define __WCMD_H__ #include "80211hdr.h" -#include "80211mgr.h" +#include "device.h" #define AUTHENTICATE_TIMEOUT 1000 //ms #define ASSOCIATE_TIMEOUT 1000 //ms diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index 243906847753..f16dfe0002f2 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -34,7 +34,6 @@ #ifndef __WMGR_H__ #define __WMGR_H__ -#include "80211mgr.h" #include "80211hdr.h" #include "wcmd.h" #include "bssdb.h" @@ -332,7 +331,6 @@ struct vnt_manager { int b11hEnable; int bSwitchChannel; u8 byNewChannel; - PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; u32 uLengthOfRepEIDs; u8 abyCurrentMSRReq[sizeof(struct vnt_tx_mgmt) + WLAN_A3FR_MAXLEN]; -- cgit From 6d07a7e376c7b61805224f924988c72aabef9c99 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:58 +0100 Subject: staging: vt6656: remove dead code from power.c/h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 153 ----------------------------------------- drivers/staging/vt6656/power.h | 7 -- 2 files changed, 160 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 1bdbefcee2bd..dbda3034d1e6 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -28,9 +28,6 @@ * Functions: * vnt_enable_power_saving - Enable Power Saving Mode * PSvDiasblePowerSaving - Disable Power Saving Mode - * PSbConsiderPowerDown - Decide if we can Power Down - * PSvSendPSPOLL - Send PS-POLL packet - * PSbSendNullPacket - Send Null packet * vnt_next_tbtt_wakeup - Decide if we need to wake up at next Beacon * * Revision History: @@ -39,7 +36,6 @@ #include "mac.h" #include "device.h" -#include "wmgr.h" #include "power.h" #include "wcmd.h" #include "rxtx.h" @@ -124,155 +120,6 @@ void vnt_disable_power_saving(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); } -/* - * - * Routine Description: - * Consider to power down when no more packets to tx or rx. - * - * Return Value: - * true, if power down success - * false, if fail - */ - -int PSbConsiderPowerDown(struct vnt_private *pDevice, int bCheckRxDMA, - int bCheckCountToWakeUp) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u8 byData; - - /* check if already in Doze mode */ - vnt_control_in_u8(pDevice, MESSAGE_REQUEST_MACREG, - MAC_REG_PSCTL, &byData); - - if ((byData & PSCTL_PS) != 0) - return true; - - if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) { - /* check if in TIM wake period */ - if (pMgmt->bInTIMWake) - return false; - } - - /* check scan state */ - if (pDevice->bCmdRunning) - return false; - - /* Tx Burst */ - if (pDevice->bPSModeTxBurst) - return false; - - /* Froce PSEN on */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); - - if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) { - if (bCheckCountToWakeUp && (pMgmt->wCountToWakeUp == 0 - || pMgmt->wCountToWakeUp == 1)) { - return false; - } - } - - pDevice->bPSRxBeacon = true; - - /* no Tx, no Rx isr, now go to Doze */ - vnt_mac_reg_bits_on(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Go to Doze ZZZZZZZZZZZZZZZ\n"); - return true; -} - -/* - * - * Routine Description: - * Send PS-POLL packet - * - * Return Value: - * None. - * - */ - -void PSvSendPSPOLL(struct vnt_private *pDevice) -{ - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct vnt_tx_mgmt *pTxPacket = NULL; - - memset(pMgmt->pbyPSPacketPool, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_HDR_ADDR2_LEN); - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyPSPacketPool; - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - - pTxPacket->p80211Header->sA2.wFrameCtl = cpu_to_le16( - ( - WLAN_SET_FC_FTYPE(WLAN_TYPE_CTL) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_PSPOLL) | - WLAN_SET_FC_PWRMGT(0) - )); - - pTxPacket->p80211Header->sA2.wDurationID = - pMgmt->wCurrAID | BIT14 | BIT15; - memcpy(pTxPacket->p80211Header->sA2.abyAddr1, pMgmt->abyCurrBSSID, - WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA2.abyAddr2, pMgmt->abyMACAddr, - WLAN_ADDR_LEN); - pTxPacket->cbMPDULen = WLAN_HDR_ADDR2_LEN; - pTxPacket->cbPayloadLen = 0; - - /* log failure if sending failed */ -} - -/* - * - * Routine Description: - * Send NULL packet to AP for notification power state of STA - * - * Return Value: - * None. - * - */ - -int PSbSendNullPacket(struct vnt_private *pDevice) -{ - struct vnt_tx_mgmt *pTxPacket = NULL; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - u16 flags = 0; - - if (pDevice->bLinkPass == false) - return false; - - if (pDevice->bEnablePSMode == false && pDevice->tx_trigger == false) - return false; - - memset(pMgmt->pbyPSPacketPool, 0, sizeof(struct vnt_tx_mgmt) - + WLAN_NULLDATA_FR_MAXLEN); - pTxPacket = (struct vnt_tx_mgmt *)pMgmt->pbyPSPacketPool; - pTxPacket->p80211Header = (PUWLAN_80211HDR)((u8 *)pTxPacket - + sizeof(struct vnt_tx_mgmt)); - - flags = WLAN_SET_FC_FTYPE(WLAN_TYPE_DATA) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_NULL); - - if (pDevice->bEnablePSMode) - flags |= WLAN_SET_FC_PWRMGT(1); - else - flags |= WLAN_SET_FC_PWRMGT(0); - - pTxPacket->p80211Header->sA3.wFrameCtl = cpu_to_le16(flags); - - if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) - pTxPacket->p80211Header->sA3.wFrameCtl |= - cpu_to_le16((u16)WLAN_SET_FC_TODS(1)); - - memcpy(pTxPacket->p80211Header->sA3.abyAddr1, pMgmt->abyCurrBSSID, - WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA3.abyAddr2, pMgmt->abyMACAddr, - WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA3.abyAddr3, pMgmt->abyCurrBSSID, - WLAN_BSSID_LEN); - pTxPacket->cbMPDULen = WLAN_HDR_ADDR3_LEN; - pTxPacket->cbPayloadLen = 0; - /* log error if sending failed */ - return true; -} - /* * * Routine Description: diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index 313f077434f4..bd9de776aced 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -33,15 +33,8 @@ #define PS_FAST_INTERVAL 1 // Fast power saving listen interval #define PS_MAX_INTERVAL 4 // MAX power saving listen interval -/* PSDevice pDevice */ -/* PSDevice hDeviceContext */ - -int PSbConsiderPowerDown(struct vnt_private *, int bCheckRxDMA, - int bCheckCountToWakeUp); void vnt_disable_power_saving(struct vnt_private *); void vnt_enable_power_saving(struct vnt_private *, u16); -void PSvSendPSPOLL(struct vnt_private *); -int PSbSendNullPacket(struct vnt_private *); int vnt_next_tbtt_wakeup(struct vnt_private *); #endif /* __POWER_H__ */ -- cgit From 93bf8a842a46bb321076a6fe4b68d0d7723ade1b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:19:59 +0100 Subject: staging: vt6656: dead code remove old key functions Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/key.c | 694 ---------------------------------------- drivers/staging/vt6656/key.h | 69 ---- drivers/staging/vt6656/wcmd.c | 4 - 4 files changed, 768 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index b6ae34fa4d76..a1450810383d 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -635,7 +635,6 @@ struct vnt_private { NDIS_802_11_WEP_STATUS eEncryptionStatus; int bTransmitKey; NDIS_802_11_WEP_STATUS eOldEncryptionStatus; - SKeyManagement sKey; u32 dwIVCounter; u8 abyPRNG[WLAN_WEPMAX_KEYLEN+3]; diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 351306695311..a7c7a2d3ba4c 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -26,709 +26,15 @@ * Date: May 29, 2003 * * Functions: - * KeyvInitTable - Init Key management table - * KeybGetKey - Get Key from table - * KeybSetKey - Set Key to table - * KeybRemoveKey - Remove Key from table - * KeybGetTransmitKey - Get Transmit Key from table * * Revision History: * */ #include "mac.h" -#include "tmacro.h" #include "key.h" #include "usbpipe.h" -static int msglevel =MSG_LEVEL_INFO; -//static int msglevel =MSG_LEVEL_DEBUG; - -static void s_vCheckKeyTableValid(struct vnt_private *pDevice, - PSKeyManagement pTable) -{ - int i; - u16 wLength = 0; - u8 pbyData[MAX_KEY_TABLE]; - - for (i=0;iKeyTable[i].bInUse == true) && - (pTable->KeyTable[i].PairwiseKey.bKeyValid == false) && - (pTable->KeyTable[i].GroupKey[0].bKeyValid == false) && - (pTable->KeyTable[i].GroupKey[1].bKeyValid == false) && - (pTable->KeyTable[i].GroupKey[2].bKeyValid == false) && - (pTable->KeyTable[i].GroupKey[3].bKeyValid == false) - ) { - - pTable->KeyTable[i].bInUse = false; - pTable->KeyTable[i].wKeyCtl = 0; - pTable->KeyTable[i].bSoftWEP = false; - pbyData[wLength++] = (u8) i; - } - } - - if (wLength != 0) - vnt_control_out(pDevice, MESSAGE_TYPE_CLRKEYENTRY, - 0, 0, wLength, pbyData); - -} - -/* - * Description: Init Key management table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * Out: - * none - * - * Return Value: none - * - */ -void KeyvInitTable(struct vnt_private *pDevice, PSKeyManagement pTable) -{ - int i, jj; - u8 pbyData[MAX_KEY_TABLE+1]; - - for (i=0;iKeyTable[i].bInUse = false; - pTable->KeyTable[i].PairwiseKey.bKeyValid = false; - 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 = - (void *) &(pTable->KeyTable[i]); - } - pTable->KeyTable[i].wKeyCtl = 0; - pTable->KeyTable[i].dwGTKeyIndex = 0; - pTable->KeyTable[i].bSoftWEP = false; - pbyData[i] = (u8) i; - } - pbyData[i] = (u8) i; - - vnt_control_out(pDevice, MESSAGE_TYPE_CLRKEYENTRY, - 0, 0, 11, pbyData); - - return; -} - -/* - * Description: Get Key from table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * pbyBSSID - BSSID of Key - * dwKeyIndex - Key Index (0xFFFFFFFF means pairwise key) - * Out: - * pKey - Key return - * - * Return Value: true if found otherwise false - * - */ -int KeybGetKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyIndex, - PSKeyItem *pKey) -{ - int i; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetKey()\n"); - - *pKey = NULL; - for (i=0;iKeyTable[i].bInUse == true) && - ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) { - if (dwKeyIndex == 0xFFFFFFFF) { - if (pTable->KeyTable[i].PairwiseKey.bKeyValid == true) { - *pKey = &(pTable->KeyTable[i].PairwiseKey); - return (true); - } - else { - return (false); - } - } else if (dwKeyIndex < MAX_GROUP_KEY) { - if (pTable->KeyTable[i].GroupKey[dwKeyIndex].bKeyValid == true) { - *pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex]); - return (true); - } - else { - return (false); - } - } - else { - return (false); - } - } - } - return (false); -} - -/* - * Description: Set Key to table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * pbyBSSID - BSSID of Key - * dwKeyIndex - Key index (reference to NDIS DDK) - * uKeyLength - Key length - * KeyRSC - Key RSC - * pbyKey - Pointer to key - * Out: - * none - * - * Return Value: true if success otherwise false - * - */ -int KeybSetKey(struct vnt_private *pDevice, PSKeyManagement pTable, - u8 *pbyBSSID, u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode) -{ - PSKeyItem pKey; - int i, j, ii; - u32 uKeyIdx; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Enter KeybSetKey: %X\n", dwKeyIndex); - - j = (MAX_KEY_TABLE-1); - for (i=0;i<(MAX_KEY_TABLE-1);i++) { - if ((pTable->KeyTable[i].bInUse == false) && - (j == (MAX_KEY_TABLE-1))) { - // found empty table - j = i; - } - if ((pTable->KeyTable[i].bInUse == true) && - ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) { - // found table already exist - if ((dwKeyIndex & PAIRWISE_KEY) != 0) { - // Pairwise key - pKey = &(pTable->KeyTable[i].PairwiseKey); - pTable->KeyTable[i].wKeyCtl &= 0xFFF0; // clear pairwise key control filed - pTable->KeyTable[i].wKeyCtl |= byKeyDecMode; - uKeyIdx = 4; // use HW key entry 4 for pairwise key - } else { - // Group key - if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) - return (false); - pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF]); - if ((dwKeyIndex & TRANSMIT_KEY) != 0) { - // Group transmit key - pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Group transmit key(R)[%X]: %d\n", - pTable->KeyTable[i].dwGTKeyIndex, i); - } - pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed - pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4); - pTable->KeyTable[i].wKeyCtl |= 0x0040; // use group key for group address - uKeyIdx = (dwKeyIndex & 0x000000FF); - } - pTable->KeyTable[i].wKeyCtl |= 0x8000; // enable on-fly - - pKey->bKeyValid = true; - pKey->uKeyLength = uKeyLength; - pKey->dwKeyIndex = dwKeyIndex; - pKey->byCipherSuite = byKeyDecMode; - memcpy(pKey->abyKey, pbyKey, uKeyLength); - if (byKeyDecMode == KEY_CTL_WEP) { - if (uKeyLength == WLAN_WEP40_KEYLEN) - pKey->abyKey[15] &= 0x7F; - if (uKeyLength == WLAN_WEP104_KEYLEN) - pKey->abyKey[15] |= 0x80; - } - - vnt_mac_set_keyentry(pDevice, pTable->KeyTable[i].wKeyCtl, i, - uKeyIdx, pbyBSSID, pKey->abyKey); - - if ((dwKeyIndex & USE_KEYRSC) == 0) - pKey->KeyRSC = 0; /* RSC set by NIC */ - else - pKey->KeyRSC = *KeyRSC; - - pKey->dwTSC47_16 = 0; - pKey->wTSC15_0 = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid); - //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", pKey->uKeyLength); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: "); - for (ii = 0; ii < pKey->uKeyLength; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%02x ", pKey->abyKey[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n ", - pKey->dwTSC47_16); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", - pKey->wTSC15_0); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n ", - pKey->dwKeyIndex); - - return (true); - } - } - if (j < (MAX_KEY_TABLE-1)) { - memcpy(pTable->KeyTable[j].abyBSSID, pbyBSSID, ETH_ALEN); - pTable->KeyTable[j].bInUse = true; - if ((dwKeyIndex & PAIRWISE_KEY) != 0) { - // Pairwise key - pKey = &(pTable->KeyTable[j].PairwiseKey); - pTable->KeyTable[j].wKeyCtl &= 0xFFF0; // clear pairwise key control filed - pTable->KeyTable[j].wKeyCtl |= byKeyDecMode; - uKeyIdx = 4; // use HW key entry 4 for pairwise key - } else { - // Group key - if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) - return (false); - pKey = &(pTable->KeyTable[j].GroupKey[dwKeyIndex & 0x000000FF]); - if ((dwKeyIndex & TRANSMIT_KEY) != 0) { - // Group transmit key - pTable->KeyTable[j].dwGTKeyIndex = dwKeyIndex; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Group transmit key(N)[%X]: %d\n", - pTable->KeyTable[j].dwGTKeyIndex, j); - } - pTable->KeyTable[j].wKeyCtl &= 0xFF0F; // clear group key control filed - pTable->KeyTable[j].wKeyCtl |= (byKeyDecMode << 4); - pTable->KeyTable[j].wKeyCtl |= 0x0040; // use group key for group address - uKeyIdx = (dwKeyIndex & 0x000000FF); - } - pTable->KeyTable[j].wKeyCtl |= 0x8000; // enable on-fly - - pKey->bKeyValid = true; - pKey->uKeyLength = uKeyLength; - pKey->dwKeyIndex = dwKeyIndex; - pKey->byCipherSuite = byKeyDecMode; - memcpy(pKey->abyKey, pbyKey, uKeyLength); - if (byKeyDecMode == KEY_CTL_WEP) { - if (uKeyLength == WLAN_WEP40_KEYLEN) - pKey->abyKey[15] &= 0x7F; - if (uKeyLength == WLAN_WEP104_KEYLEN) - pKey->abyKey[15] |= 0x80; - } - - vnt_mac_set_keyentry(pDevice, pTable->KeyTable[j].wKeyCtl, j, uKeyIdx, - pbyBSSID, pKey->abyKey); - - if ((dwKeyIndex & USE_KEYRSC) == 0) - pKey->KeyRSC = 0; /* RSC set by NIC */ - else - pKey->KeyRSC = *KeyRSC; - - pKey->dwTSC47_16 = 0; - pKey->wTSC15_0 = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(N): \n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: "); - for (ii = 0; ii < pKey->uKeyLength; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%02x ", pKey->abyKey[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n ", - pKey->dwTSC47_16); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", pKey->wTSC15_0); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n ", - pKey->dwKeyIndex); - - return (true); - } - return (false); -} - -/* - * Description: Remove Key from table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * pbyBSSID - BSSID of Key - * dwKeyIndex - Key Index (reference to NDIS DDK) - * Out: - * none - * - * Return Value: true if success otherwise false - * - */ - -int KeybRemoveKey(struct vnt_private *pDevice, PSKeyManagement pTable, - u8 *pbyBSSID, u32 dwKeyIndex) -{ - int i; - int bReturnValue = false; - - if (is_broadcast_ether_addr(pbyBSSID)) { - // delete all keys - if ((dwKeyIndex & PAIRWISE_KEY) != 0) { - for (i=0;iKeyTable[i].PairwiseKey.bKeyValid = false; - } - bReturnValue = true; - } - else if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) { - for (i=0;iKeyTable[i].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = false; - if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[i].dwGTKeyIndex & 0x7FFFFFFF)) { - // remove Group transmit key - pTable->KeyTable[i].dwGTKeyIndex = 0; - } - } - bReturnValue = true; - } - else { - bReturnValue = false; - } - - } else { - for (i=0;iKeyTable[i].bInUse == true) && - ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) { - - if ((dwKeyIndex & PAIRWISE_KEY) != 0) { - pTable->KeyTable[i].PairwiseKey.bKeyValid = false; - bReturnValue = true; - break; - } - else if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) { - pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = false; - if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[i].dwGTKeyIndex & 0x7FFFFFFF)) { - // remove Group transmit key - pTable->KeyTable[i].dwGTKeyIndex = 0; - } - bReturnValue = true; - break; - } - else { - bReturnValue = false; - break; - } - } //pTable->KeyTable[i].bInUse == true - } //for - bReturnValue = true; - } - - s_vCheckKeyTableValid(pDevice,pTable); - return bReturnValue; - -} - -/* - * Description: Remove Key from table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * pbyBSSID - BSSID of Key - * Out: - * none - * - * Return Value: true if success otherwise false - * - */ -int KeybRemoveAllKey(struct vnt_private *pDevice, PSKeyManagement pTable, - u8 *pbyBSSID) -{ - int i, u; - - for (i=0;iKeyTable[i].bInUse == true) && - ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) { - pTable->KeyTable[i].PairwiseKey.bKeyValid = false; - for (u = 0; u < MAX_GROUP_KEY; u++) - pTable->KeyTable[i].GroupKey[u].bKeyValid = false; - - pTable->KeyTable[i].dwGTKeyIndex = 0; - s_vCheckKeyTableValid(pDevice, pTable); - return (true); - } - } - return (false); -} - -/* - * Description: Get Transmit Key from table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * pbyBSSID - BSSID of Key - * Out: - * pKey - Key return - * - * Return Value: true if found otherwise false - * - */ -int KeybGetTransmitKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyType, - PSKeyItem *pKey) -{ - int i, ii; - - *pKey = NULL; - - for (i = 0; i < MAX_KEY_TABLE; i++) { - if ((pTable->KeyTable[i].bInUse == true) && - ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) { - - if (dwKeyType == PAIRWISE_KEY) { - - if (pTable->KeyTable[i].PairwiseKey.bKeyValid == true) { - *pKey = &(pTable->KeyTable[i].PairwiseKey); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PAIRWISE_KEY: KeyTable.abyBSSID: "); - for (ii = 0; ii < 6; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - - return (true); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PairwiseKey.bKeyValid == false\n"); - return (false); - } - } // End of Type == PAIRWISE - else { - if (pTable->KeyTable[i].dwGTKeyIndex == 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: dwGTKeyIndex == 0 !!!\n"); - return false; - } - if (pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)].bKeyValid == true) { - *pKey = &(pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)]); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GROUP_KEY: KeyTable.abyBSSID\n"); - for (ii = 0; ii < 6; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"dwGTKeyIndex: %X\n", - pTable->KeyTable[i].dwGTKeyIndex); - - return (true); - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GroupKey.bKeyValid == false\n"); - return (false); - } - } // End of Type = GROUP - } // BSSID match - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: NO Match BSSID !!! "); - for (ii = 0; ii < 6; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", *(pbyBSSID+ii)); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - return (false); -} - -/* - * Description: Set Key to table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * dwKeyIndex - Key index (reference to NDIS DDK) - * uKeyLength - Key length - * KeyRSC - Key RSC - * pbyKey - Pointer to key - * Out: - * none - * - * Return Value: true if success otherwise false - * - */ - -int KeybSetDefaultKey(struct vnt_private *pDevice, PSKeyManagement pTable, - u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode) -{ - int ii; - PSKeyItem pKey; - u32 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); - } else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) { - return (false); - } - - if (uKeyLength > MAX_KEY_LEN) - return false; - - pTable->KeyTable[MAX_KEY_TABLE-1].bInUse = true; - for (ii = 0; ii < ETH_ALEN; ii++) - pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID[ii] = 0xFF; - - // Group key - pKey = &(pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF]); - if ((dwKeyIndex & TRANSMIT_KEY) != 0) { - // Group transmit key - pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = dwKeyIndex; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Group transmit key(R)[%X]: %d\n", - pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex, - MAX_KEY_TABLE-1); - - } - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl &= 0x7F00; // clear all key control filed - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode << 4); - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode); - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x0044; // use group key for all address - uKeyIdx = (dwKeyIndex & 0x000000FF); - - if ((uKeyLength == WLAN_WEP232_KEYLEN) && - (byKeyDecMode == KEY_CTL_WEP)) { - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x4000; // disable on-fly disable address match - pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP = true; - } else { - if (pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP == false) - pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0xC000; // enable on-fly disable address match - } - - pKey->bKeyValid = true; - pKey->uKeyLength = uKeyLength; - pKey->dwKeyIndex = dwKeyIndex; - pKey->byCipherSuite = byKeyDecMode; - memcpy(pKey->abyKey, pbyKey, uKeyLength); - if (byKeyDecMode == KEY_CTL_WEP) { - if (uKeyLength == WLAN_WEP40_KEYLEN) - pKey->abyKey[15] &= 0x7F; - if (uKeyLength == WLAN_WEP104_KEYLEN) - pKey->abyKey[15] |= 0x80; - } - - vnt_mac_set_keyentry(pDevice, pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl, - MAX_KEY_TABLE-1, uKeyIdx, - pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID, pKey->abyKey); - - if ((dwKeyIndex & USE_KEYRSC) == 0) - pKey->KeyRSC = 0; /* RSC set by NIC */ - else - pKey->KeyRSC = *KeyRSC; - - pKey->dwTSC47_16 = 0; - pKey->wTSC15_0 = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n", pKey->bKeyValid); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n", (int)pKey->uKeyLength); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: \n"); - for (ii = 0; ii < pKey->uKeyLength; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x", pKey->abyKey[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n", - pKey->dwTSC47_16); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n", pKey->wTSC15_0); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n", - pKey->dwKeyIndex); - - return (true); -} - -/* - * Description: Set Key to table - * - * Parameters: - * In: - * pTable - Pointer to Key table - * dwKeyIndex - Key index (reference to NDIS DDK) - * uKeyLength - Key length - * KeyRSC - Key RSC - * pbyKey - Pointer to key - * Out: - * none - * - * Return Value: true if success otherwise false - * - */ - -int KeybSetAllGroupKey(struct vnt_private *pDevice, PSKeyManagement pTable, - u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode) -{ - int i, ii; - PSKeyItem pKey; - u32 uKeyIdx; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %X\n", - dwKeyIndex); - - if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key - return (false); - } else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) { - return (false); - } - - for (i=0; i < MAX_KEY_TABLE-1; i++) { - if (pTable->KeyTable[i].bInUse == true) { - // found table already exist - // Group key - pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF]); - if ((dwKeyIndex & TRANSMIT_KEY) != 0) { - // Group transmit key - pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Group transmit key(R)[%X]: %d\n", - pTable->KeyTable[i].dwGTKeyIndex, i); - - } - pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed - pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4); - pTable->KeyTable[i].wKeyCtl |= 0x0040; // use group key for group address - uKeyIdx = (dwKeyIndex & 0x000000FF); - - pTable->KeyTable[i].wKeyCtl |= 0x8000; // enable on-fly - - pKey->bKeyValid = true; - pKey->uKeyLength = uKeyLength; - pKey->dwKeyIndex = dwKeyIndex; - pKey->byCipherSuite = byKeyDecMode; - memcpy(pKey->abyKey, pbyKey, uKeyLength); - if (byKeyDecMode == KEY_CTL_WEP) { - if (uKeyLength == WLAN_WEP40_KEYLEN) - pKey->abyKey[15] &= 0x7F; - if (uKeyLength == WLAN_WEP104_KEYLEN) - pKey->abyKey[15] |= 0x80; - } - - vnt_mac_set_keyentry(pDevice, pTable->KeyTable[i].wKeyCtl, i, - uKeyIdx, pTable->KeyTable[i].abyBSSID, pKey->abyKey); - - if ((dwKeyIndex & USE_KEYRSC) == 0) - pKey->KeyRSC = 0; /* RSC set by NIC */ - else - pKey->KeyRSC = *KeyRSC; - - pKey->dwTSC47_16 = 0; - pKey->wTSC15_0 = 0; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n"); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: "); - for (ii = 0; ii < pKey->uKeyLength; ii++) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", pKey->abyKey[ii]); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n"); - - //DBG_PRN_GRP12(("pKey->dwTSC47_16: %lX\n ", pKey->dwTSC47_16)); - //DBG_PRN_GRP12(("pKey->wTSC15_0: %X\n ", pKey->wTSC15_0)); - //DBG_PRN_GRP12(("pKey->dwKeyIndex: %lX\n ", pKey->dwKeyIndex)); - - } // (pTable->KeyTable[i].bInUse == true) - } - return (true); -} - int vnt_key_init_table(struct vnt_private *priv) { int ret; diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 779a97a29fa6..3cb1291055ed 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -32,23 +32,12 @@ #include "device.h" -#define MAX_GROUP_KEY 4 #define MAX_KEY_TABLE 11 -#define MAX_KEY_LEN 32 -#define AES_KEY_LEN 16 - -#define AUTHENTICATOR_KEY 0x10000000 -#define USE_KEYRSC 0x20000000 -#define PAIRWISE_KEY 0x40000000 -#define TRANSMIT_KEY 0x80000000 - -#define GROUP_KEY 0x00000000 #define KEY_CTL_WEP 0x00 #define KEY_CTL_NONE 0x01 #define KEY_CTL_TKIP 0x02 #define KEY_CTL_CCMP 0x03 -#define KEY_CTL_INVALID 0xFF #define VNT_KEY_DEFAULTKEY 0x1 #define VNT_KEY_GROUP_ADDRESS 0x2 @@ -58,64 +47,6 @@ #define VNT_KEY_ONFLY 0x8000 #define VNT_KEY_ONFLY_ALL 0x4000 -typedef struct tagSKeyItem -{ - bool bKeyValid; - u32 uKeyLength; - u8 abyKey[MAX_KEY_LEN]; - u64 KeyRSC; - u32 dwTSC47_16; - u16 wTSC15_0; - u8 byCipherSuite; - u8 byReserved0; - u32 dwKeyIndex; - void *pvKeyTable; -} SKeyItem, *PSKeyItem; //64 - -typedef struct tagSKeyTable -{ - u8 abyBSSID[ETH_ALEN]; /* 6 */ - u8 byReserved0[2]; //8 - SKeyItem PairwiseKey; - SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328 - u32 dwGTKeyIndex; // GroupTransmitKey Index - bool bInUse; - u16 wKeyCtl; - bool bSoftWEP; - u8 byReserved1[6]; -} SKeyTable, *PSKeyTable; //352 - -typedef struct tagSKeyManagement -{ - SKeyTable KeyTable[MAX_KEY_TABLE]; -} SKeyManagement, *PSKeyManagement; - -void KeyvInitTable(struct vnt_private *, PSKeyManagement pTable); - -int KeybGetKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyIndex, - PSKeyItem *pKey); - -int KeybSetKey(struct vnt_private *, PSKeyManagement pTable, u8 *pbyBSSID, - u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode); - -int KeybRemoveKey(struct vnt_private *, PSKeyManagement pTable, - u8 *pbyBSSID, u32 dwKeyIndex); - -int KeybRemoveAllKey(struct vnt_private *, PSKeyManagement pTable, - u8 *pbyBSSID); - -int KeybGetTransmitKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyType, - PSKeyItem *pKey); - -int KeybSetDefaultKey(struct vnt_private *, PSKeyManagement pTable, - u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode); - -int KeybSetAllGroupKey(struct vnt_private *, PSKeyManagement pTable, - u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey, - u8 byKeyDecMode); - int vnt_key_init_table(struct vnt_private *); int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta, diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index d0632292afa0..106c4c4ce7f9 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -139,10 +139,6 @@ void vRunCommand(struct work_struct *work) } break; - case WLAN_CMD_REMOVE_ALLKEY_START: - KeybRemoveAllKey(pDevice, &(pDevice->sKey), pDevice->abyBSSID); - break; - case WLAN_CMD_MAC_DISPOWERSAVING_START: vnt_control_in_u8(pDevice, MESSAGE_REQUEST_MACREG, MAC_REG_PSCTL, &byData); if ((byData & PSCTL_PS) != 0) { -- cgit From ae9593ec37cda99ba65841ebefef110919b1f239 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:00 +0100 Subject: staging: vt6656: dead code remove tmacro.h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 1 - drivers/staging/vt6656/card.c | 1 - drivers/staging/vt6656/int.c | 1 - drivers/staging/vt6656/mac.c | 1 - drivers/staging/vt6656/mac.h | 1 - drivers/staging/vt6656/tmacro.h | 52 --------------------------------------- drivers/staging/vt6656/wcmd.c | 1 - 7 files changed, 58 deletions(-) delete mode 100644 drivers/staging/vt6656/tmacro.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index e67502e13cba..f4060a9ed914 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -35,7 +35,6 @@ * */ -#include "tmacro.h" #include "mac.h" #include "baseband.h" #include "rf.h" diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 9a3e3ced9c53..2ef45ca90fa9 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -46,7 +46,6 @@ */ #include "device.h" -#include "tmacro.h" #include "card.h" #include "baseband.h" #include "mac.h" diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index b717ace55cd2..5961f159985e 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -33,7 +33,6 @@ */ #include "int.h" -#include "tmacro.h" #include "mac.h" #include "power.h" #include "bssdb.h" diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 755ac56a200a..27fad2e4538e 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -30,7 +30,6 @@ * Revision History: */ -#include "tmacro.h" #include "desc.h" #include "mac.h" #include "80211hdr.h" diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index eac2be793cb7..3e1745753a27 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -35,7 +35,6 @@ #define __MAC_H__ #include "device.h" -#include "tmacro.h" #define REV_ID_VT3253_A0 0x00 #define REV_ID_VT3253_A1 0x01 diff --git a/drivers/staging/vt6656/tmacro.h b/drivers/staging/vt6656/tmacro.h deleted file mode 100644 index 15e724e4d4ba..000000000000 --- a/drivers/staging/vt6656/tmacro.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * File: tmacro.h - * - * Purpose: define basic common types and macros - * - * Author: Tevin Chen - * - * Date: May 21, 1996 - * - */ - -#ifndef __TMACRO_H__ -#define __TMACRO_H__ - -/****** Common helper macros ***********************************************/ - -#if !defined(LOBYTE) -#define LOBYTE(w) ((u8)(w)) -#endif -#if !defined(HIBYTE) -#define HIBYTE(w) ((u8)(((u16)(w) >> 8) & 0xFF)) -#endif - -#if !defined(LOWORD) -#define LOWORD(d) ((u16)(d)) -#endif -#if !defined(HIWORD) -#define HIWORD(d) ((u16)((((u32)(d)) >> 16) & 0xFFFF)) -#endif - -#if !defined(MAKEWORD) -#define MAKEWORD(lb, hb) ((u16)(((u8)(lb)) | (((u16)((u8)(hb))) << 8))) -#endif - -#endif /* __TMACRO_H__ */ diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 106c4c4ce7f9..b190857da5a8 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -38,7 +38,6 @@ * */ -#include "tmacro.h" #include "device.h" #include "mac.h" #include "card.h" -- cgit From 3a4288011aa155725319d14f70b5ef5fc576df8f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:01 +0100 Subject: staging: vt6656: dead codead remove bssdb.h header Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/bssdb.h | 211 -------------------------------------- drivers/staging/vt6656/dpc.c | 1 - drivers/staging/vt6656/int.c | 1 - drivers/staging/vt6656/main_usb.c | 1 - drivers/staging/vt6656/rxtx.c | 1 - drivers/staging/vt6656/wmgr.h | 7 -- 6 files changed, 222 deletions(-) delete mode 100644 drivers/staging/vt6656/bssdb.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h deleted file mode 100644 index 6cfa8afdf029..000000000000 --- a/drivers/staging/vt6656/bssdb.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: bssdb.h - * - * Purpose: Handles the Basic Service Set & Node Database functions - * - * Author: Lyndon Chen - * - * Date: July 16, 2002 - * - */ - -#ifndef __BSSDB_H__ -#define __BSSDB_H__ - -#include -#include "80211hdr.h" -#include "card.h" - -#define MAX_NODE_NUM 64 -#define MAX_BSS_NUM 42 -#define LOST_BEACON_COUNT 10 /* 10 sec, XP defined */ -#define MAX_PS_TX_BUF 32 // sta max power saving tx buf -#define ADHOC_LOST_BEACON_COUNT 30 // 30 sec, beacon lost for adhoc only -#define MAX_INACTIVE_COUNT 300 // 300 sec, inactive STA node refresh - -#define USE_PROTECT_PERIOD 10 // 10 sec, Use protect mode check period -#define ERP_RECOVER_COUNT 30 // 30 sec, ERP support callback check -#define BSS_CLEAR_COUNT 1 - -#define RSSI_STAT_COUNT 10 -#define MAX_CHECK_RSSI_COUNT 8 - -// STA dwflags -#define WLAN_STA_AUTH BIT0 -#define WLAN_STA_ASSOC BIT1 -#define WLAN_STA_PS BIT2 -#define WLAN_STA_TIM BIT3 -// permanent; do not remove entry on expiration -#define WLAN_STA_PERM BIT4 -// If 802.1X is used, this flag is -// controlling whether STA is authorized to -// send and receive non-IEEE 802.1X frames -#define WLAN_STA_AUTHORIZED BIT5 - -#define MAX_WPA_IE_LEN 64 - -// -// IEEE 802.11 Structures and definitions -// - -typedef struct tagSERPObject { - bool bERPExist; - u8 byERP; -} ERPObject, *PERPObject; - -typedef struct tagSRSNCapObject { - bool bRSNCapExist; - u16 wRSNCap; -} SRSNCapObject, *PSRSNCapObject; - -// BSS info(AP) -typedef struct tagKnownBSS { - // BSS info - bool bActive; - u8 abyBSSID[WLAN_BSSID_LEN]; - unsigned int uChannel; - u8 abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - unsigned int uRSSI; - u8 bySQ; - u16 wBeaconInterval; - u16 wCapInfo; - u8 abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - u8 byRxRate; - -// u16 wATIMWindow; - u8 byRSSIStatCnt; - signed long ldBmMAX; - signed long ldBmAverage[RSSI_STAT_COUNT]; - signed long ldBmAverRange; - //For any BSSID selection improvment - bool bSelected; - - //++ WPA informations - bool bWPAValid; - u8 byGKType; - u8 abyPKType[4]; - u16 wPKCount; - u8 abyAuthType[4]; - u16 wAuthCount; - u8 byDefaultK_as_PK; - u8 byReplayIdx; - //-- - - //++ WPA2 informations - bool bWPA2Valid; - u8 byCSSGK; - u16 wCSSPKCount; - u8 abyCSSPK[4]; - u16 wAKMSSAuthCount; - u8 abyAKMSSAuthType[4]; - - //++ wpactl - u8 byWPAIE[MAX_WPA_IE_LEN]; - u8 byRSNIE[MAX_WPA_IE_LEN]; - u16 wWPALen; - u16 wRSNLen; - - // Clear count - unsigned int uClearCount; -// u8 abyIEs[WLAN_BEACON_FR_MAXLEN]; - unsigned int uIELength; - u64 qwBSSTimestamp; - u64 qwLocalTSF;/* local TSF timer */ - - CARD_PHY_TYPE eNetworkTypeInUse; - - ERPObject sERP; - SRSNCapObject sRSNCapObj; - u8 abyIEs[1024]; // don't move this field !! - -} __attribute__ ((__packed__)) -KnownBSS , *PKnownBSS; - -typedef enum tagNODE_STATE { - NODE_FREE, - NODE_AGED, - NODE_KNOWN, - NODE_AUTH, - NODE_ASSOC -} NODE_STATE, *PNODE_STATE; - -// STA node info -typedef struct tagKnownNodeDB { - // STA info - bool bActive; - u8 abyMACAddr[WLAN_ADDR_LEN]; - u8 abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; - u8 abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; - u16 wTxDataRate; - bool bShortPreamble; - bool bERPExist; - bool bShortSlotTime; - unsigned int uInActiveCount; - u16 wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp. - u16 wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon. - u16 wSuppRate; - u8 byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode - u8 byTopCCKBasicRate; //Records the highest basic rate in CCK mode - - // For AP mode - struct sk_buff_head sTxPSQueue; - u16 wCapInfo; - u16 wListenInterval; - u16 wAID; - NODE_STATE eNodeState; - bool bPSEnable; - bool bRxPSPoll; - u8 byAuthSequence; - unsigned long ulLastRxJiffer; - u8 bySuppRate; - u32 dwFlags; - u16 wEnQueueCnt; - - bool bOnFly; - unsigned long long KeyRSC; - u8 byKeyIndex; - u32 dwKeyIndex; - u8 byCipherSuite; - u32 dwTSC47_16; - u16 wTSC15_0; - unsigned int uWepKeyLength; - u8 abyWepKey[WLAN_WEPMAX_KEYLEN]; - // - // Auto rate fallback vars - bool bIsInFallback; - 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; - - -#endif /* __BSSDB_H__ */ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index f40d6b42b6b3..65a3a7042099 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -39,7 +39,6 @@ #include "device.h" #include "rxtx.h" #include "card.h" -#include "bssdb.h" #include "mac.h" #include "baseband.h" #include "rf.h" diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 5961f159985e..23d045c257be 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -35,7 +35,6 @@ #include "int.h" #include "mac.h" #include "power.h" -#include "bssdb.h" #include "usbpipe.h" static int msglevel = MSG_LEVEL_INFO; /* MSG_LEVEL_DEBUG */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 26fac20ad262..feecd5183f9c 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -55,7 +55,6 @@ #include "power.h" #include "wcmd.h" #include "rxtx.h" -#include "bssdb.h" #include "dpc.h" #include "rf.h" #include "firmware.h" diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 492d9c3cca88..7c9f23246fd7 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -46,7 +46,6 @@ #include "device.h" #include "rxtx.h" #include "card.h" -#include "bssdb.h" #include "mac.h" #include "rf.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index f16dfe0002f2..a140e16044f9 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -36,7 +36,6 @@ #include "80211hdr.h" #include "wcmd.h" -#include "bssdb.h" #include "card.h" // Scan time @@ -221,7 +220,6 @@ struct vnt_manager { WMAC_BSS_STATE eCurrState; /* MAC current BSS state */ WMAC_BSS_STATE eLastState; /* MAC last BSS state */ - PKnownBSS pCurrBSS; u8 byCSSGK; u8 byCSSPK; @@ -257,7 +255,6 @@ struct vnt_manager { u32 uIBSSChannel; u8 abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; u8 byAPBBType; - u8 abyWPAIE[MAX_WPA_IE_LEN]; u16 wWPAIELen; u32 uAssocCount; @@ -295,7 +292,6 @@ struct vnt_manager { u8 byPSPacketPool[sizeof(struct vnt_tx_mgmt) + WLAN_NULLDATA_FR_MAXLEN]; int bRxBeaconInTBTTWake; - u8 abyPSTxMap[MAX_NODE_NUM + 1]; /* management command related */ u32 uCmdBusy; @@ -310,16 +306,13 @@ struct vnt_manager { struct vnt_rx_mgmt sRxPacket; /* link list of known bss's (scan results) */ - KnownBSS sBSSList[MAX_BSS_NUM]; /* link list of same bss's */ - KnownBSS pSameBSS[6]; int Cisco_cckm; u8 Roam_dbm; /* table list of known node */ /* sNodeDBList[0] is reserved for AP under Infra mode */ /* sNodeDBList[0] is reserved for Multicast under adhoc/AP mode */ - KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; /* WPA2 PMKID Cache */ int bRoaming; -- cgit From 3576ff672d36b4ccf0ec67ca0ef418f7cd0481b9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:02 +0100 Subject: staging: vt6656: dpc remove dead code RXvMngWorkItem Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.c | 46 -------------------------------------------- drivers/staging/vt6656/dpc.h | 2 -- 2 files changed, 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 65a3a7042099..ceeb3eeeb954 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -112,52 +112,6 @@ void RXvFreeRCB(struct vnt_rcb *rcb, int re_alloc_skb) priv->NumRecvFreeList, priv->NumRecvMngList); } -void RXvMngWorkItem(struct work_struct *work) -{ - struct vnt_private *pDevice = - container_of(work, struct vnt_private, rx_mng_work_item); - struct vnt_rcb *pRCB = NULL; - struct vnt_rx_mgmt *pRxPacket; - int bReAllocSkb = false; - unsigned long flags; - - if (pDevice->Flags & fMP_DISCONNECTED) - return; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Rx Mng Thread\n"); - - while (pDevice->NumRecvMngList!=0) - { - spin_lock_irqsave(&pDevice->lock, flags); - - pRCB = pDevice->FirstRecvMngList; - pDevice->NumRecvMngList--; - DequeueRCB(pDevice->FirstRecvMngList, pDevice->LastRecvMngList); - - spin_unlock_irqrestore(&pDevice->lock, flags); - - if(!pRCB){ - break; - } - pRxPacket = &(pRCB->sMngPacket); - pRCB->Ref--; - if (pRCB->Ref == 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeMng %d %d\n", - pDevice->NumRecvFreeList, pDevice->NumRecvMngList); - - spin_lock_irqsave(&pDevice->lock, flags); - - RXvFreeRCB(pRCB, bReAllocSkb); - - spin_unlock_irqrestore(&pDevice->lock, flags); - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Rx Mng Only we have the right to free RCB\n"); - } - } - - pDevice->bIsRxMngWorkItemQueued = false; -} - int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, unsigned long bytes_received) { diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 0afd882a5e47..1df2ae897988 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -34,8 +34,6 @@ void RXvWorkItem(struct work_struct *work); -void RXvMngWorkItem(struct work_struct *work); - void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb); int vnt_rx_data(struct vnt_private *, struct vnt_rcb *, -- cgit From 97b9cd8daab286a4b282080c2f6359bd2e4113c8 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:03 +0100 Subject: staging: vt6656: Remove vnt_set_channel from device_init_registers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index feecd5183f9c..56bdf9dca511 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -242,7 +242,6 @@ device_set_options(struct vnt_private *pDevice) { */ static int device_init_registers(struct vnt_private *pDevice) { - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; struct vnt_cmd_card_init *init_cmd = &pDevice->init_command; struct vnt_rsp_card_init *init_rsp = &pDevice->init_response; u8 abyBroadcastAddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; @@ -468,12 +467,6 @@ static int device_init_registers(struct vnt_private *pDevice) } } - pMgmt->eScanType = WMAC_SCAN_PASSIVE; - pMgmt->uCurrChannel = pDevice->uChannel; - pMgmt->uIBSSChannel = pDevice->uChannel; - - vnt_set_channel(pDevice, pMgmt->uCurrChannel); - /* get permanent network address */ memcpy(pDevice->abyPermanentNetAddr, init_rsp->net_addr, 6); memcpy(pDevice->abyCurrentNetAddr, -- cgit From 999bde63069760ad71af2951b0fa189380f7ac28 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:04 +0100 Subject: staging: vt6656: remove old rx receive list Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 5 +---- drivers/staging/vt6656/dpc.c | 4 ++-- drivers/staging/vt6656/main_usb.c | 2 -- 3 files changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index a1450810383d..5be96ae980f5 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -245,7 +245,6 @@ struct vnt_rcb { signed long Ref; void *pDevice; struct urb *pUrb; - struct vnt_rx_mgmt sMngPacket; struct sk_buff *skb; int bBoolInUse; }; @@ -454,9 +453,7 @@ struct vnt_private { struct vnt_rcb *FirstRecvFreeList; struct vnt_rcb *LastRecvFreeList; u32 NumRecvFreeList; - struct vnt_rcb *FirstRecvMngList; - struct vnt_rcb *LastRecvMngList; - u32 NumRecvMngList; + int bIsRxWorkItemQueued; int bIsRxMngWorkItemQueued; unsigned long ulRcvRefCount; /* packets that have not returned back */ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index ceeb3eeeb954..5ac5bcde0458 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -108,8 +108,8 @@ void RXvFreeRCB(struct vnt_rcb *rcb, int re_alloc_skb) schedule_work(&priv->read_work_item); } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----RXFreeRCB %d %d\n", - priv->NumRecvFreeList, priv->NumRecvMngList); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----RXFreeRCB %d\n", + priv->NumRecvFreeList); } int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 56bdf9dca511..66f9a54922bb 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -634,8 +634,6 @@ static bool device_alloc_bufs(struct vnt_private *priv) priv->FirstRecvFreeList = NULL; priv->LastRecvFreeList = NULL; - priv->FirstRecvMngList = NULL; - priv->LastRecvMngList = NULL; priv->NumRecvFreeList = 0; rcb = (struct vnt_rcb *)priv->pRCBMem; -- cgit From c4c9a92d26e46674c373fe1a1d8bc9c8a69861e5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:05 +0100 Subject: staging: vt6656: dead code remove wmgr.h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 37 +---- drivers/staging/vt6656/main_usb.c | 5 - drivers/staging/vt6656/wcmd.c | 1 - drivers/staging/vt6656/wmgr.h | 340 -------------------------------------- 4 files changed, 1 insertion(+), 382 deletions(-) delete mode 100644 drivers/staging/vt6656/wmgr.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 5be96ae980f5..2f9009bbeab6 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -74,7 +74,6 @@ */ #include "80211hdr.h" -#include "wmgr.h" #include "wcmd.h" #include "desc.h" #include "key.h" @@ -328,31 +327,6 @@ typedef enum _NDIS_802_11_STATUS_TYPE Ndis802_11StatusTypeMax, /* not a real type, defined as upper bound */ } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; -/* added new types for PMKID Candidate lists */ -typedef struct _PMKID_CANDIDATE { - NDIS_802_11_MAC_ADDRESS BSSID; - unsigned long Flags; -} PMKID_CANDIDATE, *PPMKID_CANDIDATE; - -typedef struct _BSSID_INFO -{ - NDIS_802_11_MAC_ADDRESS BSSID; - NDIS_802_11_PMKID_VALUE PMKID; -} BSSID_INFO, *PBSSID_INFO; - -typedef struct tagSPMKID { - unsigned long Length; - unsigned long BSSIDInfoCount; - BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID]; -} SPMKID, *PSPMKID; - -typedef struct tagSPMKIDCandidateEvent { - NDIS_802_11_STATUS_TYPE StatusType; - unsigned long Version; /* Version of the structure */ - unsigned long NumCandidates; /* No. of pmkid candidates */ - PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST]; -} SPMKIDCandidateEvent, *PSPMKIDCandidateEvent; - /* The receive duplicate detection cache entry */ typedef struct tagSCacheEntry{ __le16 wFmSequence; @@ -489,9 +463,6 @@ struct vnt_private { unsigned long SendContextsInUse; unsigned long RcvBuffersInUse; - /* 802.11 management */ - struct vnt_manager vnt_mgmt; - u64 qwCurrTSF; u32 cbBulkInMax; int bPSRxBeacon; @@ -564,7 +535,6 @@ struct vnt_private { enum nl80211_iftype op_mode; int bBSSIDFilter; - u16 wMaxTransmitMSDULifetime; u8 abyBSSID[ETH_ALEN]; u8 abyDesireBSSID[ETH_ALEN]; @@ -584,10 +554,9 @@ struct vnt_private { /* Power save */ u16 current_aid; - int bEnablePSMode; u16 wListenInterval; int bPWBitOn; - WMAC_POWER_MODE ePSMode; + unsigned long ulPSModeWaitTx; int bPSModeTxBurst; @@ -682,10 +651,6 @@ struct vnt_private { u8 abySNAP_RFC1042[ETH_ALEN]; u8 abySNAP_Bridgetunnel[ETH_ALEN]; - /* Pre-Authentication & PMK cache */ - SPMKID gsPMKID; - SPMKIDCandidateEvent gsPMKIDCandidate; - /* for 802.11h */ int b11hEnable; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 66f9a54922bb..fecdf772879b 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -51,7 +51,6 @@ #include "card.h" #include "baseband.h" #include "mac.h" -#include "wmgr.h" #include "power.h" #include "wcmd.h" #include "rxtx.h" @@ -223,9 +222,7 @@ device_set_options(struct vnt_private *pDevice) { pDevice->wFragmentationThreshold = FRAG_THRESH_DEF; pDevice->byShortRetryLimit = SHORT_RETRY_DEF; pDevice->byLongRetryLimit = LONG_RETRY_DEF; - pDevice->wMaxTransmitMSDULifetime = DEFAULT_MSDU_LIFETIME; pDevice->byShortPreamble = PREAMBLE_TYPE_DEF; - pDevice->ePSMode = PS_MODE_DEF; pDevice->b11hEnable = X80211h_MODE_DEF; pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; pDevice->uConnectionRate = DATA_RATE_DEF; @@ -1162,8 +1159,6 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) INIT_DELAYED_WORK(&priv->run_command_work, vRunCommand); INIT_WORK(&priv->read_work_item, RXvWorkItem); - priv->vnt_mgmt.pAdapter = priv; - usb_set_intfdata(intf, priv); wiphy = priv->hw->wiphy; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index b190857da5a8..7c81034a790e 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -43,7 +43,6 @@ #include "card.h" #include "80211hdr.h" #include "wcmd.h" -#include "wmgr.h" #include "power.h" #include "baseband.h" #include "usbpipe.h" diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h deleted file mode 100644 index a140e16044f9..000000000000 --- a/drivers/staging/vt6656/wmgr.h +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * - * File: wmgr.h - * - * Purpose: - * - * Author: lyndon chen - * - * Date: Jan 2, 2003 - * - * Functions: - * - * Revision History: - * - */ - -#ifndef __WMGR_H__ -#define __WMGR_H__ - -#include "80211hdr.h" -#include "wcmd.h" -#include "card.h" - -// Scan time -#define PROBE_DELAY 100 // (us) -#define SWITCH_CHANNEL_DELAY 200 // (us) -#define WLAN_SCAN_MINITIME 25 // (ms) -#define WLAN_SCAN_MAXTIME 100 // (ms) -#define TRIVIAL_SYNC_DIFFERENCE 0 // (us) -#define DEFAULT_IBSS_BI 100 // (ms) - -#define WCMD_ACTIVE_SCAN_TIME 20 //(ms) -#define WCMD_PASSIVE_SCAN_TIME 100 //(ms) - -#define DEFAULT_MSDU_LIFETIME 512 // ms - -#define DEFAULT_MGN_LIFETIME 8 // ms - -#define MAKE_BEACON_RESERVED 10 //(us) - -#define TIM_MULTICAST_MASK 0x01 -#define TIM_BITMAPOFFSET_MASK 0xFE -#define DEFAULT_DTIM_PERIOD 1 - -#define AP_LONG_RETRY_LIMIT 4 - -#define DEFAULT_IBSS_CHANNEL 6 //2.4G - -//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)(unsigned long); - -//+++ NDIS related - -typedef u8 NDIS_802_11_MAC_ADDRESS[ETH_ALEN]; -typedef struct _NDIS_802_11_AI_REQFI -{ - u16 Capabilities; - u16 ListenInterval; - NDIS_802_11_MAC_ADDRESS CurrentAPAddress; -} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; - -typedef struct _NDIS_802_11_AI_RESFI -{ - u16 Capabilities; - u16 StatusCode; - u16 AssociationId; -} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; - -typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION -{ - u32 Length; - u16 AvailableRequestFixedIEs; - NDIS_802_11_AI_REQFI RequestFixedIEs; - u32 RequestIELength; - u32 OffsetRequestIEs; - u16 AvailableResponseFixedIEs; - NDIS_802_11_AI_RESFI ResponseFixedIEs; - u32 ResponseIELength; - u32 OffsetResponseIEs; -} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; - -typedef struct tagSAssocInfo { - NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; - u8 abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN]; - /* store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION */ - u32 RequestIELength; - u8 abyReqIEs[WLAN_BEACON_FR_MAXLEN]; -} SAssocInfo, *PSAssocInfo; - -typedef enum tagWMAC_AUTHENTICATION_MODE { - - WMAC_AUTH_OPEN, - WMAC_AUTH_SHAREKEY, - WMAC_AUTH_AUTO, - WMAC_AUTH_WPA, - WMAC_AUTH_WPAPSK, - WMAC_AUTH_WPANONE, - WMAC_AUTH_WPA2, - WMAC_AUTH_WPA2PSK, - WMAC_AUTH_MAX // Not a real mode, defined as upper bound -} WMAC_AUTHENTICATION_MODE, *PWMAC_AUTHENTICATION_MODE; - -// Pre-configured Mode (from XP) - -typedef enum tagWMAC_CONFIG_MODE { - WMAC_CONFIG_ESS_STA, - WMAC_CONFIG_IBSS_STA, - WMAC_CONFIG_AUTO, - WMAC_CONFIG_AP - -} WMAC_CONFIG_MODE, *PWMAC_CONFIG_MODE; - -typedef enum tagWMAC_SCAN_TYPE { - - WMAC_SCAN_ACTIVE, - WMAC_SCAN_PASSIVE, - WMAC_SCAN_HYBRID - -} WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE; - -typedef enum tagWMAC_SCAN_STATE { - - WMAC_NO_SCANNING, - WMAC_IS_SCANNING, - WMAC_IS_PROBEPENDING - -} WMAC_SCAN_STATE, *PWMAC_SCAN_STATE; - -// Notes: -// Basic Service Set state explained as following: -// WMAC_STATE_IDLE : no BSS is selected (Adhoc or Infra) -// WMAC_STATE_STARTED : no BSS is selected, start own IBSS (Adhoc only) -// WMAC_STATE_JOINTED : BSS is selected and synchronized (Adhoc or Infra) -// WMAC_STATE_AUTHPENDING : Authentication pending (Infra) -// WMAC_STATE_AUTH : Authenticated (Infra) -// WMAC_STATE_ASSOCPENDING : Association pending (Infra) -// WMAC_STATE_ASSOC : Associated (Infra) - -typedef enum tagWMAC_BSS_STATE { - - WMAC_STATE_IDLE, - WMAC_STATE_STARTED, - WMAC_STATE_JOINTED, - WMAC_STATE_AUTHPENDING, - WMAC_STATE_AUTH, - WMAC_STATE_ASSOCPENDING, - WMAC_STATE_ASSOC - -} WMAC_BSS_STATE, *PWMAC_BSS_STATE; - -// WMAC selected running mode -typedef enum tagWMAC_CURRENT_MODE { - - WMAC_MODE_STANDBY, - WMAC_MODE_ESS_STA, - WMAC_MODE_IBSS_STA, - WMAC_MODE_ESS_AP - -} WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE; - -typedef enum tagWMAC_POWER_MODE { - - WMAC_POWER_CAM, - WMAC_POWER_FAST, - WMAC_POWER_MAX - -} WMAC_POWER_MODE, *PWMAC_POWER_MODE; - -/* Tx Management Packet descriptor */ -struct vnt_tx_mgmt { - PUWLAN_80211HDR p80211Header; - u32 cbMPDULen; - u32 cbPayloadLen; -}; - -/* Rx Management Packet descriptor */ -struct vnt_rx_mgmt { - PUWLAN_80211HDR p80211Header; - u64 qwLocalTSF; - u32 cbMPDULen; - u32 cbPayloadLen; - u32 uRSSI; - u8 bySQ; - u8 byRxRate; - u8 byRxChannel; -}; - -struct vnt_manager { - void *pAdapter; - - /* MAC address */ - u8 abyMACAddr[WLAN_ADDR_LEN]; - - /* Configuration Mode */ - WMAC_CONFIG_MODE eConfigMode; /* MAC pre-configed mode */ - - CARD_PHY_TYPE eCurrentPHYMode; - - /* Operation state variables */ - WMAC_CURRENT_MODE eCurrMode; /* MAC current connection mode */ - WMAC_BSS_STATE eCurrState; /* MAC current BSS state */ - WMAC_BSS_STATE eLastState; /* MAC last BSS state */ - - u8 byCSSGK; - u8 byCSSPK; - - int bCurrBSSIDFilterOn; - - /* Current state vars */ - u32 uCurrChannel; - u8 abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - u8 abyCurrBSSID[WLAN_BSSID_LEN]; - u16 wCurrCapInfo; - u16 wCurrAID; - u32 uRSSITrigger; - u16 wCurrATIMWindow; - u16 wCurrBeaconPeriod; - int bIsDS; - u8 byERPContext; - - CMD_STATE eCommandState; - u32 uScanChannel; - - /* Desire joinning BSS vars */ - u8 abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - u8 abyDesireBSSID[WLAN_BSSID_LEN]; - - /*restore BSS info for Ad-Hoc mode */ - u8 abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - - /* Adhoc or AP configuration vars */ - u16 wIBSSBeaconPeriod; - u16 wIBSSATIMWindow; - u32 uIBSSChannel; - u8 abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - u8 byAPBBType; - u16 wWPAIELen; - - u32 uAssocCount; - int bMoreData; - - /* Scan state vars */ - WMAC_SCAN_STATE eScanState; - WMAC_SCAN_TYPE eScanType; - u32 uScanStartCh; - u32 uScanEndCh; - u16 wScanSteps; - u32 uScanBSSType; - /* Desire scannig vars */ - u8 abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - u8 abyScanBSSID[WLAN_BSSID_LEN]; - - /* Privacy */ - WMAC_AUTHENTICATION_MODE eAuthenMode; - int bShareKeyAlgorithm; - u8 abyChallenge[WLAN_CHALLENGE_LEN]; - int bPrivacyInvoked; - - /* Received beacon state vars */ - int bInTIM; - int bMulticastTIM; - u8 byDTIMCount; - u8 byDTIMPeriod; - - /* Power saving state vars */ - WMAC_POWER_MODE ePSMode; - u16 wListenInterval; - u16 wCountToWakeUp; - int bInTIMWake; - u8 *pbyPSPacketPool; - u8 byPSPacketPool[sizeof(struct vnt_tx_mgmt) - + WLAN_NULLDATA_FR_MAXLEN]; - int bRxBeaconInTBTTWake; - - /* management command related */ - u32 uCmdBusy; - u32 uCmdHostAPBusy; - - /* management packet pool */ - u8 *pbyMgmtPacketPool; - u8 byMgmtPacketPool[sizeof(struct vnt_tx_mgmt) - + WLAN_A3FR_MAXLEN]; - - /* Temporarily Rx Mgmt Packet Descriptor */ - struct vnt_rx_mgmt sRxPacket; - - /* link list of known bss's (scan results) */ - /* link list of same bss's */ - int Cisco_cckm; - u8 Roam_dbm; - - /* table list of known node */ - /* sNodeDBList[0] is reserved for AP under Infra mode */ - /* sNodeDBList[0] is reserved for Multicast under adhoc/AP mode */ - - /* WPA2 PMKID Cache */ - int bRoaming; - - /* associate info */ - SAssocInfo sAssocInfo; - - /* for 802.11h */ - int b11hEnable; - int bSwitchChannel; - u8 byNewChannel; - u32 uLengthOfRepEIDs; - u8 abyCurrentMSRReq[sizeof(struct vnt_tx_mgmt) - + WLAN_A3FR_MAXLEN]; - u8 abyCurrentMSRRep[sizeof(struct vnt_tx_mgmt) - + WLAN_A3FR_MAXLEN]; - u8 abyIECountry[WLAN_A3FR_MAXLEN]; - u8 abyIBSSDFSOwner[6]; - u8 byIBSSDFSRecovery; - - struct sk_buff skb; - -}; - -#endif /* __WMGR_H__ */ -- cgit From 956be1a106a1bc308790daea762a18a29997a442 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:06 +0100 Subject: staging: vt6656: remove old channel tables Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/channel.c | 137 -------------------------------------- drivers/staging/vt6656/channel.h | 9 --- drivers/staging/vt6656/main_usb.c | 2 - 3 files changed, 148 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index db1451e2e3c9..5202633f752f 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -34,147 +34,10 @@ * */ -#include #include "device.h" #include "channel.h" #include "rf.h" -static SChannelTblElement sChannelTbl[CB_MAX_CHANNEL+1] = -{ - {0, 0, false}, - {1, 2412, true}, - {2, 2417, true}, - {3, 2422, true}, - {4, 2427, true}, - {5, 2432, true}, - {6, 2437, true}, - {7, 2442, true}, - {8, 2447, true}, - {9, 2452, true}, - {10, 2457, true}, - {11, 2462, true}, - {12, 2467, true}, - {13, 2472, true}, - {14, 2484, true}, - {183, 4915, true}, //15 - {184, 4920, true}, //16 - {185, 4925, true}, //17 - {187, 4935, true}, //18 - {188, 4940, true}, //19 - {189, 4945, true}, //20 - {192, 4960, true}, //21 - {196, 4980, true}, //22 - {7, 5035, true}, //23 - {8, 5040, true}, //24 - {9, 5045, true}, //25 - {11, 5055, true}, //26 - {12, 5060, true}, //27 - {16, 5080, true}, //28 - {34, 5170, true}, //29 - {36, 5180, true}, //30 - {38, 5190, true}, //31 - {40, 5200, true}, //32 - {42, 5210, true}, //33 - {44, 5220, true}, //34 - {46, 5230, true}, //35 - {48, 5240, true}, //36 - {52, 5260, true}, //37 - {56, 5280, true}, //38 - {60, 5300, true}, //39 - {64, 5320, true}, //40 - {100, 5500, true}, //41 - {104, 5520, true}, //42 - {108, 5540, true}, //43 - {112, 5560, true}, //44 - {116, 5580, true}, //45 - {120, 5600, true}, //46 - {124, 5620, true}, //47 - {128, 5640, true}, //48 - {132, 5660, true}, //49 - {136, 5680, true}, //50 - {140, 5700, true}, //51 - {149, 5745, true}, //52 - {153, 5765, true}, //53 - {157, 5785, true}, //54 - {161, 5805, true}, //55 - {165, 5825, true} //56 -}; - - -/************************************************************************ - * Country Channel Valid - * Input: CountryCode, ChannelNum - * ChanneIndex is defined as VT3253 MAC channel: - * 1 = 2.4G channel 1 - * 2 = 2.4G channel 2 - * ... - * 14 = 2.4G channel 14 - * 15 = 4.9G channel 183 - * 16 = 4.9G channel 184 - * ..... - * Output: true if the specified 5GHz band is allowed to be used. - False otherwise. -// 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - -// 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, -// 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - ************************************************************************/ -bool -ChannelValid(unsigned int CountryCode, unsigned int ChannelIndex) -{ - bool bValid; - - bValid = false; - /* - * If Channel Index is invalid, return invalid - */ - if ((ChannelIndex > CB_MAX_CHANNEL) || - (ChannelIndex == 0)) - { - bValid = false; - goto exit; - } - - bValid = sChannelTbl[ChannelIndex].bValid; - -exit: - return (bValid); - -} /* end ChannelValid */ - -void CHvInitChannelTable(struct vnt_private *pDevice) -{ - bool bMultiBand = false; - int ii; - - for (ii = 1; ii <= CB_MAX_CHANNEL; ii++) - sChannelTbl[ii].bValid = false; - - switch (pDevice->byRFType) { - case RF_AL2230: - case RF_AL2230S: - case RF_VT3226: - case RF_VT3226D0: - bMultiBand = false; - break; - case RF_AIROHA7230: - case RF_VT3342A0: - default : - bMultiBand = true; - break; - } - - if (bMultiBand == true) { - for (ii = 0; ii < CB_MAX_CHANNEL; ii++) { - sChannelTbl[ii+1].bValid = true; - } - } else { - for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { - sChannelTbl[ii+1].bValid = true; - } - } -} - static struct ieee80211_rate vnt_rates_bg[] = { { .bitrate = 10, .hw_value = RATE_1M }, { .bitrate = 20, .hw_value = RATE_2M }, diff --git a/drivers/staging/vt6656/channel.h b/drivers/staging/vt6656/channel.h index 0d5222525122..21c080803714 100644 --- a/drivers/staging/vt6656/channel.h +++ b/drivers/staging/vt6656/channel.h @@ -32,15 +32,6 @@ #include "device.h" -typedef struct tagSChannelTblElement { - u8 byChannelNumber; - unsigned int uFrequency; - bool bValid; -} SChannelTblElement, *PSChannelTblElement; - -bool ChannelValid(unsigned int CountryCode, unsigned int ChannelNum); -void CHvInitChannelTable(struct vnt_private *pDevice); - void vnt_init_bands(struct vnt_private *); #endif /* _CHANNEL_H_ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fecdf772879b..5ce0caa25548 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -323,8 +323,6 @@ static int device_init_registers(struct vnt_private *pDevice) pDevice->wCurrentRate = RATE_54M; } - CHvInitChannelTable(pDevice); - pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; -- cgit From a146d42d5abd10151f6759f0d4f9908c6499013c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:07 +0100 Subject: staging: vt6656: dead code remove 80211hdr.h Remove all variables that are dead with this header Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/80211hdr.h | 324 -------------------------------------- drivers/staging/vt6656/device.h | 3 - drivers/staging/vt6656/mac.c | 1 - drivers/staging/vt6656/wcmd.c | 2 - drivers/staging/vt6656/wcmd.h | 2 - 5 files changed, 332 deletions(-) delete mode 100644 drivers/staging/vt6656/80211hdr.h (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/80211hdr.h b/drivers/staging/vt6656/80211hdr.h deleted file mode 100644 index 1e778ba7c634..000000000000 --- a/drivers/staging/vt6656/80211hdr.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. - * All rights reserved. - * - * 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., - * 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__ -#define __80211HDR_H__ - -/* bit type */ -#define BIT0 0x00000001 -#define BIT1 0x00000002 -#define BIT2 0x00000004 -#define BIT3 0x00000008 -#define BIT4 0x00000010 -#define BIT5 0x00000020 -#define BIT6 0x00000040 -#define BIT7 0x00000080 -#define BIT8 0x00000100 -#define BIT9 0x00000200 -#define BIT10 0x00000400 -#define BIT11 0x00000800 -#define BIT12 0x00001000 -#define BIT13 0x00002000 -#define BIT14 0x00004000 -#define BIT15 0x00008000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 - -/* 802.11 frame related, defined as 802.11 spec */ -#define WLAN_ADDR_LEN 6 -#define WLAN_CRC_LEN 4 -#define WLAN_CRC32_LEN 4 -#define WLAN_FCS_LEN 4 -#define WLAN_BSSID_LEN 6 -#define WLAN_BSS_TS_LEN 8 -#define WLAN_HDR_ADDR2_LEN 16 -#define WLAN_HDR_ADDR3_LEN 24 -#define WLAN_HDR_ADDR4_LEN 30 -#define WLAN_IEHDR_LEN 2 -#define WLAN_SSID_MAXLEN 32 -#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_BEACON_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 0) -#define WLAN_NULLDATA_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 0) -#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 2) -#define WLAN_ASSOCREQ_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_ASSOCRESP_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_REASSOCREQ_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_REASSOCRESP_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_PROBEREQ_FR_MAXLEN WLAN_A3FR_MAXLEN -#define WLAN_PROBERESP_FR_MAXLEN WLAN_A3FR_MAXLEN -#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 32 -#define WLAN_CHALLENGE_IE_MAXLEN 255 -#define WLAN_CHALLENGE_IE_LEN 130 -#define WLAN_CHALLENGE_LEN 128 -#define WLAN_WEP_IV_LEN 4 -#define WLAN_WEP_ICV_LEN 4 -#define WLAN_FRAGS_MAX 16 - -/* Frame Type */ -#define WLAN_TYPE_MGR 0x00 -#define WLAN_TYPE_CTL 0x01 -#define WLAN_TYPE_DATA 0x02 - -#define WLAN_FTYPE_MGMT 0x00 -#define WLAN_FTYPE_CTL 0x01 -#define WLAN_FTYPE_DATA 0x02 - -/* Frame Subtypes */ -#define WLAN_FSTYPE_ASSOCREQ 0x00 -#define WLAN_FSTYPE_ASSOCRESP 0x01 -#define WLAN_FSTYPE_REASSOCREQ 0x02 -#define WLAN_FSTYPE_REASSOCRESP 0x03 -#define WLAN_FSTYPE_PROBEREQ 0x04 -#define WLAN_FSTYPE_PROBERESP 0x05 -#define WLAN_FSTYPE_BEACON 0x08 -#define WLAN_FSTYPE_ATIM 0x09 -#define WLAN_FSTYPE_DISASSOC 0x0a -#define WLAN_FSTYPE_AUTHEN 0x0b -#define WLAN_FSTYPE_DEAUTHEN 0x0c -#define WLAN_FSTYPE_ACTION 0x0d - -/* Control */ -#define WLAN_FSTYPE_PSPOLL 0x0a -#define WLAN_FSTYPE_RTS 0x0b -#define WLAN_FSTYPE_CTS 0x0c -#define WLAN_FSTYPE_ACK 0x0d -#define WLAN_FSTYPE_CFEND 0x0e -#define WLAN_FSTYPE_CFENDCFACK 0x0f - -/* Data */ -#define WLAN_FSTYPE_DATAONLY 0x00 -#define WLAN_FSTYPE_DATA_CFACK 0x01 -#define WLAN_FSTYPE_DATA_CFPOLL 0x02 -#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03 -#define WLAN_FSTYPE_NULL 0x04 -#define WLAN_FSTYPE_CFACK 0x05 -#define WLAN_FSTYPE_CFPOLL 0x06 -#define WLAN_FSTYPE_CFACK_CFPOLL 0x07 - -#ifdef __BIG_ENDIAN - -/* GET & SET Frame Control bit */ -#define WLAN_GET_FC_PRVER(n) (((u16)(n) >> 8) & (BIT0 | BIT1)) -#define WLAN_GET_FC_FTYPE(n) ((((u16)(n) >> 8) & (BIT2 | BIT3)) >> 2) -#define WLAN_GET_FC_FSTYPE(n) ((((u16)(n) >> 8) \ - & (BIT4|BIT5|BIT6|BIT7)) >> 4) -#define WLAN_GET_FC_TODS(n) ((((u16)(n) << 8) & (BIT8)) >> 8) -#define WLAN_GET_FC_FROMDS(n) ((((u16)(n) << 8) & (BIT9)) >> 9) -#define WLAN_GET_FC_MOREFRAG(n) ((((u16)(n) << 8) & (BIT10)) >> 10) -#define WLAN_GET_FC_RETRY(n) ((((u16)(n) << 8) & (BIT11)) >> 11) -#define WLAN_GET_FC_PWRMGT(n) ((((u16)(n) << 8) & (BIT12)) >> 12) -#define WLAN_GET_FC_MOREDATA(n) ((((u16)(n) << 8) & (BIT13)) >> 13) -#define WLAN_GET_FC_ISWEP(n) ((((u16)(n) << 8) & (BIT14)) >> 14) -#define WLAN_GET_FC_ORDER(n) ((((u16)(n) << 8) & (BIT15)) >> 15) - -/* Sequence Field bit */ -#define WLAN_GET_SEQ_FRGNUM(n) (((u16)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3)) -#define WLAN_GET_SEQ_SEQNUM(n) ((((u16)(n) >> 8) \ - & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) - -/* 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) -#define WLAN_GET_CAP_INFO_CFPOLLREQ(n) ((((n) >> 8) & BIT3) >> 3) -#define WLAN_GET_CAP_INFO_PRIVACY(n) ((((n) >> 8) & BIT4) >> 4) -#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) ((((n) >> 8) & BIT5) >> 5) -#define WLAN_GET_CAP_INFO_PBCC(n) ((((n) >> 8) & BIT6) >> 6) -#define WLAN_GET_CAP_INFO_AGILITY(n) ((((n) >> 8) & BIT7) >> 7) -#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n) ((((n)) & BIT8) >> 10) -#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) ((((n)) & BIT10) >> 10) -#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 */ -#define WLAN_GET_FC_PRVER(n) (((u16)(n)) & (BIT0 | BIT1)) -#define WLAN_GET_FC_FTYPE(n) ((((u16)(n)) & (BIT2 | BIT3)) >> 2) -#define WLAN_GET_FC_FSTYPE(n) ((((u16)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4) -#define WLAN_GET_FC_TODS(n) ((((u16)(n)) & (BIT8)) >> 8) -#define WLAN_GET_FC_FROMDS(n) ((((u16)(n)) & (BIT9)) >> 9) -#define WLAN_GET_FC_MOREFRAG(n) ((((u16)(n)) & (BIT10)) >> 10) -#define WLAN_GET_FC_RETRY(n) ((((u16)(n)) & (BIT11)) >> 11) -#define WLAN_GET_FC_PWRMGT(n) ((((u16)(n)) & (BIT12)) >> 12) -#define WLAN_GET_FC_MOREDATA(n) ((((u16)(n)) & (BIT13)) >> 13) -#define WLAN_GET_FC_ISWEP(n) ((((u16)(n)) & (BIT14)) >> 14) -#define WLAN_GET_FC_ORDER(n) ((((u16)(n)) & (BIT15)) >> 15) - -/* Sequence Field bit */ -#define WLAN_GET_SEQ_FRGNUM(n) (((u16)(n)) & (BIT0|BIT1|BIT2|BIT3)) -#define WLAN_GET_SEQ_SEQNUM(n) ((((u16)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) - -/* 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) -#define WLAN_GET_CAP_INFO_CFPOLLREQ(n) (((n) & BIT3) >> 3) -#define WLAN_GET_CAP_INFO_PRIVACY(n) (((n) & BIT4) >> 4) -#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) (((n) & BIT5) >> 5) -#define WLAN_GET_CAP_INFO_PBCC(n) (((n) & BIT6) >> 6) -#define WLAN_GET_CAP_INFO_AGILITY(n) (((n) & BIT7) >> 7) -#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n) (((n) & BIT8) >> 10) -#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) (((n) & BIT10) >> 10) -#define WLAN_GET_CAP_INFO_DSSSOFDM(n) (((n) & BIT13) >> 13) -#define WLAN_GET_CAP_INFO_GRPACK(n) (((n) & BIT14) >> 14) - -#endif /* #ifdef __BIG_ENDIAN */ - -#define WLAN_SET_CAP_INFO_ESS(n) (n) -#define WLAN_SET_CAP_INFO_IBSS(n) ((n) << 1) -#define WLAN_SET_CAP_INFO_CFPOLLABLE(n) ((n) << 2) -#define WLAN_SET_CAP_INFO_CFPOLLREQ(n) ((n) << 3) -#define WLAN_SET_CAP_INFO_PRIVACY(n) ((n) << 4) -#define WLAN_SET_CAP_INFO_SHORTPREAMBLE(n) ((n) << 5) -#define WLAN_SET_CAP_INFO_SPECTRUMMNG(n) ((n) << 8) -#define WLAN_SET_CAP_INFO_PBCC(n) ((n) << 6) -#define WLAN_SET_CAP_INFO_AGILITY(n) ((n) << 7) -#define WLAN_SET_CAP_INFO_SHORTSLOTTIME(n) ((n) << 10) -#define WLAN_SET_CAP_INFO_DSSSOFDM(n) ((n) << 13) -#define WLAN_SET_CAP_INFO_GRPACK(n) ((n) << 14) - -#define WLAN_SET_FC_PRVER(n) ((u16)(n)) -#define WLAN_SET_FC_FTYPE(n) (((u16)(n)) << 2) -#define WLAN_SET_FC_FSTYPE(n) (((u16)(n)) << 4) -#define WLAN_SET_FC_TODS(n) (((u16)(n)) << 8) -#define WLAN_SET_FC_FROMDS(n) (((u16)(n)) << 9) -#define WLAN_SET_FC_MOREFRAG(n) (((u16)(n)) << 10) -#define WLAN_SET_FC_RETRY(n) (((u16)(n)) << 11) -#define WLAN_SET_FC_PWRMGT(n) (((u16)(n)) << 12) -#define WLAN_SET_FC_MOREDATA(n) (((u16)(n)) << 13) -#define WLAN_SET_FC_ISWEP(n) (((u16)(n)) << 14) -#define WLAN_SET_FC_ORDER(n) (((u16)(n)) << 15) - -#define WLAN_SET_SEQ_FRGNUM(n) ((u16)(n)) -#define WLAN_SET_SEQ_SEQNUM(n) (((u16)(n)) << 4) - -/* ERP Field bit */ - -#define WLAN_GET_ERP_NONERP_PRESENT(n) ((n) & BIT0) -#define WLAN_GET_ERP_USE_PROTECTION(n) (((n) & BIT1) >> 1) -#define WLAN_GET_ERP_BARKER_MODE(n) (((n) & BIT2) >> 2) - -#define WLAN_SET_ERP_NONERP_PRESENT(n) (n) -#define WLAN_SET_ERP_USE_PROTECTION(n) ((n) << 1) -#define WLAN_SET_ERP_BARKER_MODE(n) ((n) << 2) - -/* Support & Basic Rates field */ -#define WLAN_MGMT_IS_BASICRATE(b) ((b) & BIT7) -#define WLAN_MGMT_GET_RATE(b) ((b) & ~BIT7) - -/* 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 */ -#define WLAN_HDR_A3_DATA_PTR(p) (((u8 *)(p)) + WLAN_HDR_ADDR3_LEN) -#define WLAN_HDR_A4_DATA_PTR(p) (((u8 *)(p)) + WLAN_HDR_ADDR4_LEN) - -/* IEEE ADDR */ -#define IEEE_ADDR_UNIVERSAL 0x02 -#define IEEE_ADDR_GROUP 0x01 - -typedef struct { - u8 abyAddr[6]; -} IEEE_ADDR, *PIEEE_ADDR; - -/* 802.11 Header Format */ - -typedef struct tagWLAN_80211HDR_A2 { - - u16 wFrameCtl; - u16 wDurationID; - u8 abyAddr1[WLAN_ADDR_LEN]; - u8 abyAddr2[WLAN_ADDR_LEN]; - -} __attribute__ ((__packed__)) -WLAN_80211HDR_A2, *PWLAN_80211HDR_A2; - -typedef struct tagWLAN_80211HDR_A3 { - - u16 wFrameCtl; - u16 wDurationID; - u8 abyAddr1[WLAN_ADDR_LEN]; - u8 abyAddr2[WLAN_ADDR_LEN]; - u8 abyAddr3[WLAN_ADDR_LEN]; - u16 wSeqCtl; - -} __attribute__ ((__packed__)) -WLAN_80211HDR_A3, *PWLAN_80211HDR_A3; - -typedef struct tagWLAN_80211HDR_A4 { - - u16 wFrameCtl; - u16 wDurationID; - u8 abyAddr1[WLAN_ADDR_LEN]; - u8 abyAddr2[WLAN_ADDR_LEN]; - u8 abyAddr3[WLAN_ADDR_LEN]; - u16 wSeqCtl; - u8 abyAddr4[WLAN_ADDR_LEN]; - -} __attribute__ ((__packed__)) -WLAN_80211HDR_A4, *PWLAN_80211HDR_A4; - -typedef union tagUWLAN_80211HDR { - - WLAN_80211HDR_A2 sA2; - WLAN_80211HDR_A3 sA3; - WLAN_80211HDR_A4 sA4; - -} UWLAN_80211HDR, *PUWLAN_80211HDR; - -#endif /* __80211HDR_H__ */ diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 2f9009bbeab6..d9fc32cc26f3 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -73,7 +73,6 @@ * device specific */ -#include "80211hdr.h" #include "wcmd.h" #include "desc.h" #include "key.h" @@ -603,11 +602,9 @@ struct vnt_private { NDIS_802_11_WEP_STATUS eOldEncryptionStatus; u32 dwIVCounter; - u8 abyPRNG[WLAN_WEPMAX_KEYLEN+3]; u8 byKeyIndex; u32 uKeyLength; - u8 abyKey[WLAN_WEP232_KEYLEN]; unsigned long key_entry_inuse; /* for AP mode */ diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 27fad2e4538e..641d77baa2ab 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -32,7 +32,6 @@ #include "desc.h" #include "mac.h" -#include "80211hdr.h" #include "usbpipe.h" /* diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 7c81034a790e..b62726f29c53 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -41,7 +41,6 @@ #include "device.h" #include "mac.h" #include "card.h" -#include "80211hdr.h" #include "wcmd.h" #include "power.h" #include "baseband.h" @@ -237,7 +236,6 @@ int bScheduleCommand(struct vnt_private *pDevice, return false; pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].eCmd = eCommand; pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bForceSCAN = true; - memset(pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].abyCmdDesireSSID, 0 , WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); if (pbyItem0 != NULL) { switch (eCommand) { case WLAN_CMD_RADIO: diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 91351c670174..1e5b739b6c3e 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -29,7 +29,6 @@ #ifndef __WCMD_H__ #define __WCMD_H__ -#include "80211hdr.h" #include "device.h" #define AUTHENTICATE_TIMEOUT 1000 //ms @@ -70,7 +69,6 @@ typedef enum tagCMD_STATUS { typedef struct tagCMD_ITEM { CMD_CODE eCmd; - u8 abyCmdDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; bool bNeedRadioOFF; bool bRadioCmd; bool bForceSCAN; -- cgit From 4e98a451b0eed93d26f2ef676f129c46ec0622ee Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:08 +0100 Subject: staging: vt6656: device_init_registers remove unused variables Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 5ce0caa25548..6479ced96f46 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -241,10 +241,6 @@ static int device_init_registers(struct vnt_private *pDevice) { struct vnt_cmd_card_init *init_cmd = &pDevice->init_command; struct vnt_rsp_card_init *init_rsp = &pDevice->init_response; - 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}; u8 byAntenna; int ii; int ntStatus = STATUS_SUCCESS; @@ -254,10 +250,6 @@ static int device_init_registers(struct vnt_private *pDevice) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---->INIbInitAdapter. [%d][%d]\n", DEVICE_INIT_COLD, pDevice->byPacketType); - memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, ETH_ALEN); - memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, ETH_ALEN); - memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, ETH_ALEN); - if (!vnt_check_firmware_version(pDevice)) { if (vnt_download_firmware(pDevice) == true) { if (vnt_firmware_branch_to_sram(pDevice) == false) { @@ -412,14 +404,8 @@ static int device_init_registers(struct vnt_private *pDevice) pDevice->byAutoFBCtrl = AUTO_FB_0; /* default Auto Mode */ - /* pDevice->NetworkType = Ndis802_11Automode; */ - pDevice->eConfigPHYMode = PHY_TYPE_AUTO; pDevice->byBBType = BB_TYPE_11G; - /* get channel range */ - pDevice->byMinChannel = 1; - pDevice->byMaxChannel = CB_MAX_CHANNEL; - /* get RFType */ pDevice->byRFType = init_rsp->rf_type; -- cgit From 3928c64bba20f15d8bb9763158d3edfb982c3425 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:09 +0100 Subject: staging: vt6656: dead code remove variables device_set_options Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 6479ced96f46..b49effaa8607 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -206,27 +206,12 @@ static void usb_device_reset(struct vnt_private *pDevice); static void device_set_options(struct vnt_private *pDevice) { - - 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}; - - 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; pDevice->uChannel = CHANNEL_DEF; - pDevice->wRTSThreshold = RTS_THRESH_DEF; - pDevice->wFragmentationThreshold = FRAG_THRESH_DEF; pDevice->byShortRetryLimit = SHORT_RETRY_DEF; pDevice->byLongRetryLimit = LONG_RETRY_DEF; - pDevice->byShortPreamble = PREAMBLE_TYPE_DEF; - pDevice->b11hEnable = X80211h_MODE_DEF; pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; - pDevice->uConnectionRate = DATA_RATE_DEF; - if (pDevice->uConnectionRate < RATE_AUTO) pDevice->bFixRate = true; pDevice->byBBType = BBP_TYPE_DEF; pDevice->byPacketType = pDevice->byBBType; pDevice->byAutoFBCtrl = AUTO_FB_0; @@ -306,14 +291,6 @@ static int device_init_registers(struct vnt_private *pDevice) /* only used in 11g type, sync with ERP IE */ pDevice->bNonERPPresent = false; pDevice->bBarkerPreambleMd = false; - if (pDevice->bFixRate) { - pDevice->wCurrentRate = (u16)pDevice->uConnectionRate; - } else { - if (pDevice->byBBType == BB_TYPE_11B) - pDevice->wCurrentRate = RATE_11M; - else - pDevice->wCurrentRate = RATE_54M; - } pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; -- cgit From 09840eb6050d9ac789c4b5895d51867c9ed35680 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:10 +0100 Subject: staging: vt6656: device.h remove dead strutures and variables Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 220 -------------------------------------- drivers/staging/vt6656/main_usb.c | 6 -- drivers/staging/vt6656/usbpipe.c | 2 - 3 files changed, 228 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index d9fc32cc26f3..9d4c5e73a37a 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -188,14 +188,7 @@ /* USB registers */ #define USB_REG4 0x604 -#ifndef RUN_AT -#define RUN_AT(x) (jiffies+(x)) -#endif - -#define PRIVATE_Message 0 - #define DBG_PRT(l, p, args...) { if (l <= msglevel) printk(p, ##args); } -#define PRINT_K(p, args...) { if (PRIVATE_Message) printk(p, ##args); } typedef enum __device_msg_level { MSG_LEVEL_ERR = 0, /* Errors causing abnormal operation */ @@ -266,16 +259,6 @@ struct vnt_tx_pkt_info { u8 dest_addr[ETH_ALEN]; }; -/* 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 */ @@ -293,69 +276,6 @@ typedef enum __DEVICE_NDIS_STATUS { STATUS_PENDING, } DEVICE_NDIS_STATUS, *PDEVICE_NDIS_STATUS; -#define MAX_BSSIDINFO_4_PMKID 16 -#define MAX_PMKIDLIST 5 -/* flags for PMKID Candidate list structure */ -#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - -/* PMKID Structures */ -typedef unsigned char NDIS_802_11_PMKID_VALUE[16]; - -typedef enum _NDIS_802_11_WEP_STATUS -{ - Ndis802_11WEPEnabled, - Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, - Ndis802_11WEPDisabled, - Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, - Ndis802_11WEPKeyAbsent, - Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, - Ndis802_11WEPNotSupported, - Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, - Ndis802_11Encryption2Enabled, - Ndis802_11Encryption2KeyAbsent, - Ndis802_11Encryption3Enabled, - Ndis802_11Encryption3KeyAbsent -} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, - NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; - -typedef enum _NDIS_802_11_STATUS_TYPE -{ - Ndis802_11StatusType_Authentication, - Ndis802_11StatusType_MediaStreamMode, - Ndis802_11StatusType_PMKID_CandidateList, - Ndis802_11StatusTypeMax, /* not a real type, defined as upper bound */ -} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; - -/* The receive duplicate detection cache entry */ -typedef struct tagSCacheEntry{ - __le16 wFmSequence; - u8 abyAddr2[ETH_ALEN]; - __le16 wFrameCtl; -} SCacheEntry, *PSCacheEntry; - -typedef struct tagSCache{ -/* The receive cache is updated circularly. The next entry to be written is - * indexed by the "InPtr". - */ - unsigned int uInPtr; /* Place to use next */ - SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH]; -} SCache, *PSCache; - -#define CB_MAX_RX_FRAG 64 -/* - * DeFragment Control Block, used for collecting fragments prior to reassembly - */ -typedef struct tagSDeFragControlBlock -{ - u16 wSequence; - u16 wFragNum; - u8 abyAddr2[ETH_ALEN]; - unsigned int uLifetime; - struct sk_buff* skb; - u8 * pbyRxBuffer; - unsigned int cbFrameLength; - bool bInUse; -} SDeFragControlBlock, *PSDeFragControlBlock; /* flags for options */ #define DEVICE_FLAGS_UNPLUG 0x00000001UL @@ -363,20 +283,6 @@ typedef struct tagSDeFragControlBlock /* flags for driver status */ #define DEVICE_FLAGS_OPENED 0x00010000UL -typedef struct __device_opt { - int nRxDescs0; /* number of RX descriptors 0 */ - int nTxDescs0; /* number of TX descriptors 0, 1, 2, 3 */ - int rts_thresh; /* RTS threshold */ - int frag_thresh; - int OpMode; - int data_rate; - int channel_num; - int short_retry; - int long_retry; - int bbp_type; - u32 flags; -} OPTIONS, *POPTIONS; - struct vnt_private { /* mac80211 */ struct ieee80211_hw *hw; @@ -384,37 +290,22 @@ struct vnt_private { u8 mac_hw; /* netdev */ struct usb_device *usb; - struct net_device *dev; struct net_device_stats stats; - OPTIONS sOpts; - struct work_struct read_work_item; - struct work_struct rx_mng_work_item; u64 tsf_time; u8 rx_rate; u32 rx_buf_sz; int mc_list_count; - int multicast_limit; - u8 byRxMode; spinlock_t lock; struct mutex usb_lock; - u32 rx_bytes; - u32 flags; unsigned long Flags; - SCache sDupRxCache; - - SDeFragControlBlock sRxDFCB[CB_MAX_RX_FRAG]; - u32 cbDFCB; - u32 cbFreeDFCB; - u32 uCurrentDFCBIdx; - /* USB */ struct urb *pInterruptURB; u32 int_interval; @@ -428,8 +319,6 @@ struct vnt_private { u32 NumRecvFreeList; int bIsRxWorkItemQueued; - int bIsRxMngWorkItemQueued; - unsigned long ulRcvRefCount; /* packets that have not returned back */ /* Variables to track resources for the BULK Out Pipe */ struct vnt_usb_send_context *apTD[CB_MAX_TX_DESC]; @@ -439,9 +328,6 @@ struct vnt_private { /* Variables to track resources for the Interrupt In Pipe */ struct vnt_interrupt_buffer int_buf; - /* default config from file by user setting */ - DEFAULT_CONFIG config_file; - /* Version control */ u16 wFirmwareVersion; u8 byLocalID; @@ -450,7 +336,6 @@ struct vnt_private { u8 byZoneType; - int bLinkPass; /* link status: OK or fail */ struct vnt_cmd_card_init init_command; struct vnt_rsp_card_init init_response; u8 abyCurrentNetAddr[ETH_ALEN]; @@ -458,17 +343,10 @@ struct vnt_private { int bExistSWNetAddr; - /* Maintain statistical debug info. */ - unsigned long SendContextsInUse; - unsigned long RcvBuffersInUse; - u64 qwCurrTSF; - u32 cbBulkInMax; - int bPSRxBeacon; /* 802.11 MAC specific */ u32 uCurrRSSI; - u8 byCurrSQ; /* Antenna Diversity */ int bTxRxAntInv; @@ -488,13 +366,6 @@ struct vnt_private { u32 uCwMin; /* Current CwMin */ u32 uCwMax; /* CwMax is fixed on 1023 */ - /* PHY parameter */ - u8 bySIFS; - u8 byDIFS; - u8 byEIFS; - u8 bySlot; - u8 byCWMaxMin; - /* Rate */ u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ u8 byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ @@ -504,14 +375,7 @@ struct vnt_private { u8 abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ - u8 byMinChannel; - u8 byMaxChannel; - u32 uConnectionRate; - u8 byPreambleType; - u8 byShortPreamble; - /* CARD_PHY_TYPE */ - u8 eConfigPHYMode; /* For RF Power table */ u8 byCCKPwr; @@ -526,57 +390,28 @@ struct vnt_private { u16 tx_rate_fb0; u16 tx_rate_fb1; - u16 wRTSThreshold; - u16 wFragmentationThreshold; u8 byShortRetryLimit; u8 byLongRetryLimit; enum nl80211_iftype op_mode; - int bBSSIDFilter; - u8 abyBSSID[ETH_ALEN]; - u8 abyDesireBSSID[ETH_ALEN]; - - u32 dwMaxReceiveLifetime; /* dot11MaxReceiveLifetime */ - - int bEncryptionEnable; int bShortSlotTime; - int bProtectMode; - int bNonERPPresent; int bBarkerPreambleMd; - u8 byERPFlag; - u16 wUseProtectCntDown; - int bRadioControlOff; int bRadioOff; /* Power save */ u16 current_aid; - u16 wListenInterval; - int bPWBitOn; - - unsigned long ulPSModeWaitTx; - int bPSModeTxBurst; /* Beacon releated */ u16 wSeqCounter; - int bBeaconBufReady; - int bBeaconSent; - int bFixRate; - u8 byCurrentCh; CMD_STATE eCommandState; CMD_CODE eCommand; - int bBeaconTx; - u8 byScanBBType; - int bStopBeacon; int bStopDataPkt; - int bStopTx0Pkt; - u32 uAutoReConnectTime; - u32 uIsroamingTime; /* 802.11 counter */ @@ -588,37 +423,10 @@ struct vnt_private { int bCmdClear; int bNeedRadioOFF; - int bEnableRoaming; - int bIsRoaming; - int bFastRoaming; - u8 bSameBSSMaxNum; - u8 bSameBSSCurNum; - int bRoaming; - int b11hEable; - - /* Encryption */ - NDIS_802_11_WEP_STATUS eEncryptionStatus; - int bTransmitKey; - NDIS_802_11_WEP_STATUS eOldEncryptionStatus; - u32 dwIVCounter; - - u8 byKeyIndex; - - u32 uKeyLength; unsigned long key_entry_inuse; - /* for AP mode */ - u32 uAssocCount; - int bMoreData; - - /* QoS */ - int bGrpAckPolicy; - u8 byAutoFBCtrl; - int bTxMICFail; - int bRxMICFail; - /* For Update BaseBand VGA Gain Offset */ u32 uBBVGADiffCount; u8 byBBVGANew; @@ -633,42 +441,14 @@ struct vnt_private { /* command timer */ struct delayed_work run_command_work; - /* One second callback */ - struct delayed_work second_callback_work; u8 tx_data_time_out; - bool tx_trigger; - int fWPA_Authened; /*is WPA/WPA-PSK or WPA2/WPA2-PSK authen?? */ - u8 byReAssocCount; - u8 byLinkWaitCount; - - struct ethhdr sTxEthHeader; - struct ethhdr sRxEthHeader; - u8 abyBroadcastAddr[ETH_ALEN]; - u8 abySNAP_RFC1042[ETH_ALEN]; - u8 abySNAP_Bridgetunnel[ETH_ALEN]; - - /* for 802.11h */ - int b11hEnable; int bChannelSwitch; u8 byNewChannel; u8 byChannelSwitchCount; - /* WPA supplicant daemon */ - int bWPADEVUp; - int bwextstep0; - int bwextstep1; - int bwextstep2; - int bwextstep3; - int bWPASuppWextEnabled; - - u32 uChannel; - struct iw_statistics wstats; /* wireless stats */ - - int bCommit; - }; #define EnqueueRCB(_Head, _Tail, _RCB) \ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index b49effaa8607..86d9470eecb2 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -208,7 +208,6 @@ static void device_set_options(struct vnt_private *pDevice) { pDevice->cbTD = TX_DESC_DEF0; pDevice->cbRD = RX_DESC_DEF0; - pDevice->uChannel = CHANNEL_DEF; pDevice->byShortRetryLimit = SHORT_RETRY_DEF; pDevice->byLongRetryLimit = LONG_RETRY_DEF; pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; @@ -287,11 +286,6 @@ static int device_init_registers(struct vnt_private *pDevice) /* do MACbSoftwareReset in MACvInitialize */ - pDevice->bProtectMode = false; - /* only used in 11g type, sync with ERP IE */ - pDevice->bNonERPPresent = false; - pDevice->bBarkerPreambleMd = false; - pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index fd8776c1a107..6a7e69233164 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -338,8 +338,6 @@ int PIPEnsSendBulkOut(struct vnt_private *priv, int status; struct urb *urb; - priv->bPWBitOn = false; - if (!(MP_IS_READY(priv) && priv->Flags & fMP_POST_WRITES)) { context->in_use = false; return STATUS_RESOURCES; -- cgit From 9a65cf11e11a7545e529e677dd2ccb0c38dc3042 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 25 Jun 2014 21:20:11 +0100 Subject: staging: vt6656: remove unneeded config and headers Remove WIRELESS_EXT and WEXT_PRIV remove net/iw_handler.h, linux/etherdevice.h and net/cfg80211.h Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/Kconfig | 2 -- drivers/staging/vt6656/device.h | 3 --- 2 files changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/Kconfig b/drivers/staging/vt6656/Kconfig index 839db3a6da81..b602ef175d55 100644 --- a/drivers/staging/vt6656/Kconfig +++ b/drivers/staging/vt6656/Kconfig @@ -1,8 +1,6 @@ config VT6656 tristate "VIA Technologies VT6656 support" depends on MAC80211 && USB && WLAN && m - select WIRELESS_EXT - select WEXT_PRIV select FW_LOADER ---help--- This is a vendor-written driver for VIA VT6656. diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 9d4c5e73a37a..0bba96f95017 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -35,12 +35,9 @@ #include #include #include -#include #include #include #include -#include -#include #include #include #include -- cgit From ab63f1eb0179621b76b8ef390fa14894b7d01b99 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:31 +0530 Subject: staging: rtl8188eu: Merge hal/usb_ops_linux.c into os_dep/usb_ops_linux.c Consolidate all usb operation related functions in one file. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/hal/usb_ops_linux.c | 665 ----------------------- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 642 +++++++++++++++++++++- 3 files changed, 641 insertions(+), 667 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/hal/usb_ops_linux.c (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 74a032cf00d1..2745076f930f 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -46,7 +46,6 @@ r8188eu-y := \ hal/rtl8188eu_recv.o \ hal/rtl8188eu_xmit.o \ hal/usb_halinit.o \ - hal/usb_ops_linux.o \ os_dep/ioctl_linux.o \ os_dep/mlme_linux.o \ os_dep/os_intfs.o \ diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c deleted file mode 100644 index 1002ff07f321..000000000000 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ /dev/null @@ -1,665 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _HCI_OPS_OS_C_ - -#include -#include -#include -#include -#include -#include - -static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype) -{ - struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt); - struct usb_device *udev = dvobjpriv->pusbdev; - unsigned int pipe; - int status = 0; - u8 reqtype; - u8 *pIo_buf; - int vendorreq_times = 0; - - if ((adapt->bSurpriseRemoved) || (adapt->pwrctrlpriv.pnp_bstop_trx)) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usbctrl_vendorreq:(adapt->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); - status = -EPERM; - goto exit; - } - - if (len > MAX_VENDOR_REQ_CMD_SIZE) { - DBG_88E("[%s] Buffer len error ,vendor request failed\n", __func__); - status = -EINVAL; - goto exit; - } - - _enter_critical_mutex(&dvobjpriv->usb_vendor_req_mutex, NULL); - - /* Acquire IO memory for vendorreq */ - pIo_buf = dvobjpriv->usb_vendor_req_buf; - - if (pIo_buf == NULL) { - DBG_88E("[%s] pIo_buf == NULL\n", __func__); - status = -ENOMEM; - goto release_mutex; - } - - while (++vendorreq_times <= MAX_USBCTRL_VENDORREQ_TIMES) { - _rtw_memset(pIo_buf, 0, len); - - if (requesttype == 0x01) { - pipe = usb_rcvctrlpipe(udev, 0);/* read_in */ - reqtype = REALTEK_USB_VENQT_READ; - } else { - pipe = usb_sndctrlpipe(udev, 0);/* write_out */ - reqtype = REALTEK_USB_VENQT_WRITE; - memcpy(pIo_buf, pdata, len); - } - - status = rtw_usb_control_msg(udev, pipe, request, reqtype, value, index, pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); - - if (status == len) { /* Success this control transfer. */ - rtw_reset_continual_urb_error(dvobjpriv); - if (requesttype == 0x01) - memcpy(pdata, pIo_buf, len); - } else { /* error cases */ - DBG_88E("reg 0x%x, usb %s %u fail, status:%d value=0x%x, vendorreq_times:%d\n", - value, (requesttype == 0x01) ? "read" : "write", - len, status, *(u32 *)pdata, vendorreq_times); - - if (status < 0) { - if (status == (-ESHUTDOWN) || status == -ENODEV) { - adapt->bSurpriseRemoved = true; - } else { - struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); - haldata->srestpriv.Wifi_Error_Status = USB_VEN_REQ_CMD_FAIL; - } - } else { /* status != len && status >= 0 */ - if (status > 0) { - if (requesttype == 0x01) { - /* For Control read transfer, we have to copy the read data from pIo_buf to pdata. */ - memcpy(pdata, pIo_buf, len); - } - } - } - - if (rtw_inc_and_chk_continual_urb_error(dvobjpriv)) { - adapt->bSurpriseRemoved = true; - break; - } - - } - - /* firmware download is checksumed, don't retry */ - if ((value >= FW_8188E_START_ADDRESS && value <= FW_8188E_END_ADDRESS) || status == len) - break; - } -release_mutex: - mutex_unlock(&dvobjpriv->usb_vendor_req_mutex); -exit: - return status; -} - -u8 usb_read8(struct adapter *adapter, u32 addr) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 data = 0; - - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 1; - - usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - - - return data; - -} - -u16 usb_read16(struct adapter *adapter, u32 addr) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ - wvalue = (u16)(addr&0x0000ffff); - len = 2; - usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - - return (u16)(le32_to_cpu(data)&0xffff); -} - -u32 usb_read32(struct adapter *adapter, u32 addr) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; - - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 4; - - usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - - - return le32_to_cpu(data); -} - -int usb_write8(struct adapter *adapter, u32 addr, u8 val) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 data; - int ret; - - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - wvalue = (u16)(addr&0x0000ffff); - len = 1; - data = val; - ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - return ret; -} - -int usb_write16(struct adapter *adapter, u32 addr, u16 val) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; - int ret; - - - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 2; - - data = cpu_to_le32(val & 0x0000ffff); - - ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - - - return ret; -} - -int usb_write32(struct adapter *adapter, u32 addr, u32 val) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; - int ret; - - - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 4; - data = cpu_to_le32(val); - - ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); - - - return ret; -} - -int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 buf[VENDOR_CMD_MAX_DATA_LEN] = {0}; - int ret; - - - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = length; - memcpy(buf, pdata, len); - - ret = usbctrl_vendorreq(adapter, request, wvalue, index, buf, len, requesttype); - - - return RTW_STATUS_CODE(ret); -} - -static void interrupt_handler_8188eu(struct adapter *adapt, u16 pkt_len, u8 *pbuf) -{ - struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); - - if (pkt_len != INTERRUPT_MSG_FORMAT_LEN) { - DBG_88E("%s Invalid interrupt content length (%d)!\n", __func__, pkt_len); - return; - } - - /* HISR */ - memcpy(&(haldata->IntArray[0]), &(pbuf[USB_INTR_CONTENT_HISR_OFFSET]), 4); - memcpy(&(haldata->IntArray[1]), &(pbuf[USB_INTR_CONTENT_HISRE_OFFSET]), 4); - - /* C2H Event */ - if (pbuf[0] != 0) - memcpy(&(haldata->C2hArray[0]), &(pbuf[USB_INTR_CONTENT_C2H_OFFSET]), 16); -} - -static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb) -{ - u8 *pbuf; - u8 shift_sz = 0; - u16 pkt_cnt; - u32 pkt_offset, skb_len, alloc_sz; - s32 transfer_len; - struct recv_stat *prxstat; - struct phy_stat *pphy_status = NULL; - struct sk_buff *pkt_copy = NULL; - struct recv_frame *precvframe = NULL; - struct rx_pkt_attrib *pattrib = NULL; - struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); - struct recv_priv *precvpriv = &adapt->recvpriv; - struct __queue *pfree_recv_queue = &precvpriv->free_recv_queue; - - transfer_len = (s32)pskb->len; - pbuf = pskb->data; - - prxstat = (struct recv_stat *)pbuf; - pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff; - - do { - RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, - ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n", - prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4)); - - prxstat = (struct recv_stat *)pbuf; - - precvframe = rtw_alloc_recvframe(pfree_recv_queue); - if (precvframe == NULL) { - RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recvbuf2recvframe: precvframe==NULL\n")); - DBG_88E("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __func__, __LINE__); - goto _exit_recvbuf2recvframe; - } - - _rtw_init_listhead(&precvframe->list); - precvframe->len = 0; - - update_recvframe_attrib_88e(precvframe, prxstat); - - pattrib = &precvframe->attrib; - - if ((pattrib->crc_err) || (pattrib->icv_err)) { - DBG_88E("%s: RX Warning! crc_err=%d icv_err=%d, skip!\n", __func__, pattrib->crc_err, pattrib->icv_err); - - rtw_free_recvframe(precvframe, pfree_recv_queue); - goto _exit_recvbuf2recvframe; - } - - if ((pattrib->physt) && (pattrib->pkt_rpt_type == NORMAL_RX)) - pphy_status = (struct phy_stat *)(pbuf + RXDESC_OFFSET); - - pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len; - - if ((pattrib->pkt_len <= 0) || (pkt_offset > transfer_len)) { - RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recvbuf2recvframe: pkt_len<=0\n")); - DBG_88E("%s()-%d: RX Warning!,pkt_len<=0 or pkt_offset> transfoer_len\n", __func__, __LINE__); - rtw_free_recvframe(precvframe, pfree_recv_queue); - goto _exit_recvbuf2recvframe; - } - - /* Modified by Albert 20101213 */ - /* For 8 bytes IP header alignment. */ - if (pattrib->qos) /* Qos data, wireless lan header length is 26 */ - shift_sz = 6; - else - shift_sz = 0; - - skb_len = pattrib->pkt_len; - - /* for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet. */ - /* modify alloc_sz for recvive crc error packet by thomas 2011-06-02 */ - if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { - if (skb_len <= 1650) - alloc_sz = 1664; - else - alloc_sz = skb_len + 14; - } else { - alloc_sz = skb_len; - /* 6 is for IP header 8 bytes alignment in QoS packet case. */ - /* 8 is for skb->data 4 bytes alignment. */ - alloc_sz += 14; - } - - pkt_copy = netdev_alloc_skb(adapt->pnetdev, alloc_sz); - if (pkt_copy) { - pkt_copy->dev = adapt->pnetdev; - precvframe->pkt = pkt_copy; - precvframe->rx_head = pkt_copy->data; - precvframe->rx_end = pkt_copy->data + alloc_sz; - skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */ - skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */ - memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len); - precvframe->rx_tail = pkt_copy->data; - precvframe->rx_data = pkt_copy->data; - } else { - if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { - DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n"); - rtw_free_recvframe(precvframe, pfree_recv_queue); - goto _exit_recvbuf2recvframe; - } - precvframe->pkt = skb_clone(pskb, GFP_ATOMIC); - if (precvframe->pkt) { - precvframe->rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE; - precvframe->rx_head = precvframe->rx_tail; - precvframe->rx_data = precvframe->rx_tail; - precvframe->rx_end = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz; - } else { - DBG_88E("recvbuf2recvframe: skb_clone fail\n"); - rtw_free_recvframe(precvframe, pfree_recv_queue); - goto _exit_recvbuf2recvframe; - } - } - - recvframe_put(precvframe, skb_len); - - switch (haldata->UsbRxAggMode) { - case USB_RX_AGG_DMA: - case USB_RX_AGG_MIX: - pkt_offset = (u16)_RND128(pkt_offset); - break; - case USB_RX_AGG_USB: - pkt_offset = (u16)_RND4(pkt_offset); - break; - case USB_RX_AGG_DISABLE: - default: - break; - } - if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */ - if (pattrib->physt) - update_recvframe_phyinfo_88e(precvframe, (struct phy_stat *)pphy_status); - if (rtw_recv_entry(precvframe) != _SUCCESS) { - RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, - ("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n")); - } - } else { - /* enqueue recvframe to txrtp queue */ - if (pattrib->pkt_rpt_type == TX_REPORT1) { - /* CCX-TXRPT ack for xmit mgmt frames. */ - handle_txrpt_ccx_88e(adapt, precvframe->rx_data); - } else if (pattrib->pkt_rpt_type == TX_REPORT2) { - ODM_RA_TxRPT2Handle_8188E( - &haldata->odmpriv, - precvframe->rx_data, - pattrib->pkt_len, - pattrib->MacIDValidEntry[0], - pattrib->MacIDValidEntry[1] - ); - } else if (pattrib->pkt_rpt_type == HIS_REPORT) { - interrupt_handler_8188eu(adapt, pattrib->pkt_len, precvframe->rx_data); - } - rtw_free_recvframe(precvframe, pfree_recv_queue); - } - pkt_cnt--; - transfer_len -= pkt_offset; - pbuf += pkt_offset; - precvframe = NULL; - pkt_copy = NULL; - - if (transfer_len > 0 && pkt_cnt == 0) - pkt_cnt = (le32_to_cpu(prxstat->rxdw2)>>16) & 0xff; - - } while ((transfer_len > 0) && (pkt_cnt > 0)); - -_exit_recvbuf2recvframe: - - return _SUCCESS; -} - -void rtl8188eu_recv_tasklet(void *priv) -{ - struct sk_buff *pskb; - struct adapter *adapt = (struct adapter *)priv; - struct recv_priv *precvpriv = &adapt->recvpriv; - - while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) { - if ((adapt->bDriverStopped) || (adapt->bSurpriseRemoved)) { - DBG_88E("recv_tasklet => bDriverStopped or bSurpriseRemoved\n"); - dev_kfree_skb_any(pskb); - break; - } - recvbuf2recvframe(adapt, pskb); - skb_reset_tail_pointer(pskb); - pskb->len = 0; - skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb); - } -} - -static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) -{ - struct recv_buf *precvbuf = (struct recv_buf *)purb->context; - struct adapter *adapt = (struct adapter *)precvbuf->adapter; - struct recv_priv *precvpriv = &adapt->recvpriv; - - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete!!!\n")); - - precvpriv->rx_pending_cnt--; - - if (adapt->bSurpriseRemoved || adapt->bDriverStopped || adapt->bReadPortCancel) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_read_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", - adapt->bDriverStopped, adapt->bSurpriseRemoved)); - - precvbuf->reuse = true; - DBG_88E("%s() RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bReadPortCancel(%d)\n", - __func__, adapt->bDriverStopped, - adapt->bSurpriseRemoved, adapt->bReadPortCancel); - return; - } - - if (purb->status == 0) { /* SUCCESS */ - if ((purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n")); - precvbuf->reuse = true; - usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); - DBG_88E("%s()-%d: RX Warning!\n", __func__, __LINE__); - } else { - rtw_reset_continual_urb_error(adapter_to_dvobj(adapt)); - - skb_put(precvbuf->pskb, purb->actual_length); - skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb); - - if (skb_queue_len(&precvpriv->rx_skb_queue) <= 1) - tasklet_schedule(&precvpriv->recv_tasklet); - - precvbuf->pskb = NULL; - precvbuf->reuse = false; - usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); - } - } else { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete : purb->status(%d) != 0\n", purb->status)); - - DBG_88E("###=> usb_read_port_complete => urb status(%d)\n", purb->status); - skb_put(precvbuf->pskb, purb->actual_length); - precvbuf->pskb = NULL; - - if (rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(adapt))) - adapt->bSurpriseRemoved = true; - - switch (purb->status) { - case -EINVAL: - case -EPIPE: - case -ENODEV: - case -ESHUTDOWN: - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bSurpriseRemoved=true\n")); - case -ENOENT: - adapt->bDriverStopped = true; - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bDriverStopped=true\n")); - break; - case -EPROTO: - case -EOVERFLOW: - { - struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); - haldata->srestpriv.Wifi_Error_Status = USB_READ_PORT_FAIL; - } - precvbuf->reuse = true; - usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); - break; - case -EINPROGRESS: - DBG_88E("ERROR: URB IS IN PROGRESS!\n"); - break; - default: - break; - } - } -} - -u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem) -{ - struct urb *purb = NULL; - struct recv_buf *precvbuf = (struct recv_buf *)rmem; - struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter); - struct recv_priv *precvpriv = &adapter->recvpriv; - struct usb_device *pusbd = pdvobj->pusbdev; - int err; - unsigned int pipe; - size_t tmpaddr = 0; - size_t alignment = 0; - u32 ret = _SUCCESS; - - - if (adapter->bDriverStopped || adapter->bSurpriseRemoved || - adapter->pwrctrlpriv.pnp_bstop_trx) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_read_port:(adapt->bDriverStopped ||adapt->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); - return _FAIL; - } - - if (!precvbuf) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_read_port:precvbuf==NULL\n")); - return _FAIL; - } - - if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { - precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue); - if (NULL != precvbuf->pskb) - precvbuf->reuse = true; - } - - /* re-assign for linux based on skb */ - if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { - precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); - if (precvbuf->pskb == NULL) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("init_recvbuf(): alloc_skb fail!\n")); - DBG_88E("#### usb_read_port() alloc_skb fail!#####\n"); - return _FAIL; - } - - tmpaddr = (size_t)precvbuf->pskb->data; - alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); - skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); - } else { /* reuse skb */ - precvbuf->reuse = false; - } - - precvpriv->rx_pending_cnt++; - - purb = precvbuf->purb; - - /* translate DMA FIFO addr to pipehandle */ - pipe = ffaddr2pipehdl(pdvobj, addr); - - usb_fill_bulk_urb(purb, pusbd, pipe, - precvbuf->pskb->data, - MAX_RECVBUF_SZ, - usb_read_port_complete, - precvbuf);/* context is precvbuf */ - - err = usb_submit_urb(purb, GFP_ATOMIC); - if ((err) && (err != (-EPERM))) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("cannot submit rx in-token(err=0x%.8x), URB_STATUS =0x%.8x", - err, purb->status)); - DBG_88E("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n", - err, purb->status); - ret = _FAIL; - } - - return ret; -} - -void rtl8188eu_xmit_tasklet(void *priv) -{ - int ret = false; - struct adapter *adapt = (struct adapter *)priv; - struct xmit_priv *pxmitpriv = &adapt->xmitpriv; - - if (check_fwstate(&adapt->mlmepriv, _FW_UNDER_SURVEY)) - return; - - while (1) { - if ((adapt->bDriverStopped) || - (adapt->bSurpriseRemoved) || - (adapt->bWritePortCancel)) { - DBG_88E("xmit_tasklet => bDriverStopped or bSurpriseRemoved or bWritePortCancel\n"); - break; - } - - ret = rtl8188eu_xmitframe_complete(adapt, pxmitpriv, NULL); - - if (!ret) - break; - } -} - diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 92c42e49a946..756318818ae0 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -19,9 +19,198 @@ #define _USB_OPS_LINUX_C_ #include -#include +#include +#include #include +static void interrupt_handler_8188eu(struct adapter *adapt, u16 pkt_len, u8 *pbuf) +{ + struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); + + if (pkt_len != INTERRUPT_MSG_FORMAT_LEN) { + DBG_88E("%s Invalid interrupt content length (%d)!\n", __func__, pkt_len); + return; + } + + /* HISR */ + memcpy(&(haldata->IntArray[0]), &(pbuf[USB_INTR_CONTENT_HISR_OFFSET]), 4); + memcpy(&(haldata->IntArray[1]), &(pbuf[USB_INTR_CONTENT_HISRE_OFFSET]), 4); + + /* C2H Event */ + if (pbuf[0] != 0) + memcpy(&(haldata->C2hArray[0]), &(pbuf[USB_INTR_CONTENT_C2H_OFFSET]), 16); +} + +static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb) +{ + u8 *pbuf; + u8 shift_sz = 0; + u16 pkt_cnt; + u32 pkt_offset, skb_len, alloc_sz; + s32 transfer_len; + struct recv_stat *prxstat; + struct phy_stat *pphy_status = NULL; + struct sk_buff *pkt_copy = NULL; + struct recv_frame *precvframe = NULL; + struct rx_pkt_attrib *pattrib = NULL; + struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); + struct recv_priv *precvpriv = &adapt->recvpriv; + struct __queue *pfree_recv_queue = &precvpriv->free_recv_queue; + + transfer_len = (s32)pskb->len; + pbuf = pskb->data; + + prxstat = (struct recv_stat *)pbuf; + pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff; + + do { + RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, + ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n", + prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4)); + + prxstat = (struct recv_stat *)pbuf; + + precvframe = rtw_alloc_recvframe(pfree_recv_queue); + if (precvframe == NULL) { + RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("recvbuf2recvframe: precvframe==NULL\n")); + DBG_88E("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __func__, __LINE__); + goto _exit_recvbuf2recvframe; + } + + _rtw_init_listhead(&precvframe->list); + precvframe->len = 0; + + update_recvframe_attrib_88e(precvframe, prxstat); + + pattrib = &precvframe->attrib; + + if ((pattrib->crc_err) || (pattrib->icv_err)) { + DBG_88E("%s: RX Warning! crc_err=%d icv_err=%d, skip!\n", __func__, pattrib->crc_err, pattrib->icv_err); + + rtw_free_recvframe(precvframe, pfree_recv_queue); + goto _exit_recvbuf2recvframe; + } + + if ((pattrib->physt) && (pattrib->pkt_rpt_type == NORMAL_RX)) + pphy_status = (struct phy_stat *)(pbuf + RXDESC_OFFSET); + + pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len; + + if ((pattrib->pkt_len <= 0) || (pkt_offset > transfer_len)) { + RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recvbuf2recvframe: pkt_len<=0\n")); + DBG_88E("%s()-%d: RX Warning!,pkt_len<=0 or pkt_offset> transfoer_len\n", __func__, __LINE__); + rtw_free_recvframe(precvframe, pfree_recv_queue); + goto _exit_recvbuf2recvframe; + } + + /* Modified by Albert 20101213 */ + /* For 8 bytes IP header alignment. */ + if (pattrib->qos) /* Qos data, wireless lan header length is 26 */ + shift_sz = 6; + else + shift_sz = 0; + + skb_len = pattrib->pkt_len; + + /* for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet. */ + /* modify alloc_sz for recvive crc error packet by thomas 2011-06-02 */ + if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { + if (skb_len <= 1650) + alloc_sz = 1664; + else + alloc_sz = skb_len + 14; + } else { + alloc_sz = skb_len; + /* 6 is for IP header 8 bytes alignment in QoS packet case. */ + /* 8 is for skb->data 4 bytes alignment. */ + alloc_sz += 14; + } + + pkt_copy = netdev_alloc_skb(adapt->pnetdev, alloc_sz); + if (pkt_copy) { + pkt_copy->dev = adapt->pnetdev; + precvframe->pkt = pkt_copy; + precvframe->rx_head = pkt_copy->data; + precvframe->rx_end = pkt_copy->data + alloc_sz; + skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */ + skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */ + memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len); + precvframe->rx_tail = pkt_copy->data; + precvframe->rx_data = pkt_copy->data; + } else { + if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { + DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n"); + rtw_free_recvframe(precvframe, pfree_recv_queue); + goto _exit_recvbuf2recvframe; + } + precvframe->pkt = skb_clone(pskb, GFP_ATOMIC); + if (precvframe->pkt) { + precvframe->rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE; + precvframe->rx_head = precvframe->rx_tail; + precvframe->rx_data = precvframe->rx_tail; + precvframe->rx_end = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz; + } else { + DBG_88E("recvbuf2recvframe: skb_clone fail\n"); + rtw_free_recvframe(precvframe, pfree_recv_queue); + goto _exit_recvbuf2recvframe; + } + } + + recvframe_put(precvframe, skb_len); + + switch (haldata->UsbRxAggMode) { + case USB_RX_AGG_DMA: + case USB_RX_AGG_MIX: + pkt_offset = (u16)_RND128(pkt_offset); + break; + case USB_RX_AGG_USB: + pkt_offset = (u16)_RND4(pkt_offset); + break; + case USB_RX_AGG_DISABLE: + default: + break; + } + if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */ + if (pattrib->physt) + update_recvframe_phyinfo_88e(precvframe, (struct phy_stat *)pphy_status); + if (rtw_recv_entry(precvframe) != _SUCCESS) { + RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, + ("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n")); + } + } else { + /* enqueue recvframe to txrtp queue */ + if (pattrib->pkt_rpt_type == TX_REPORT1) { + /* CCX-TXRPT ack for xmit mgmt frames. */ + handle_txrpt_ccx_88e(adapt, precvframe->rx_data); + } else if (pattrib->pkt_rpt_type == TX_REPORT2) { + ODM_RA_TxRPT2Handle_8188E( + &haldata->odmpriv, + precvframe->rx_data, + pattrib->pkt_len, + pattrib->MacIDValidEntry[0], + pattrib->MacIDValidEntry[1] + ); + } else if (pattrib->pkt_rpt_type == HIS_REPORT) { + interrupt_handler_8188eu(adapt, pattrib->pkt_len, precvframe->rx_data); + } + rtw_free_recvframe(precvframe, pfree_recv_queue); + } + pkt_cnt--; + transfer_len -= pkt_offset; + pbuf += pkt_offset; + precvframe = NULL; + pkt_copy = NULL; + + if (transfer_len > 0 && pkt_cnt == 0) + pkt_cnt = (le32_to_cpu(prxstat->rxdw2)>>16) & 0xff; + + } while ((transfer_len > 0) && (pkt_cnt > 0)); + +_exit_recvbuf2recvframe: + + return _SUCCESS; +} + unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) { unsigned int pipe = 0, ep_num = 0; @@ -39,6 +228,316 @@ unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) return pipe; } +static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype) +{ + struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt); + struct usb_device *udev = dvobjpriv->pusbdev; + unsigned int pipe; + int status = 0; + u8 reqtype; + u8 *pIo_buf; + int vendorreq_times = 0; + + if ((adapt->bSurpriseRemoved) || (adapt->pwrctrlpriv.pnp_bstop_trx)) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usbctrl_vendorreq:(adapt->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); + status = -EPERM; + goto exit; + } + + if (len > MAX_VENDOR_REQ_CMD_SIZE) { + DBG_88E("[%s] Buffer len error ,vendor request failed\n", __func__); + status = -EINVAL; + goto exit; + } + + _enter_critical_mutex(&dvobjpriv->usb_vendor_req_mutex, NULL); + + /* Acquire IO memory for vendorreq */ + pIo_buf = dvobjpriv->usb_vendor_req_buf; + + if (pIo_buf == NULL) { + DBG_88E("[%s] pIo_buf == NULL\n", __func__); + status = -ENOMEM; + goto release_mutex; + } + + while (++vendorreq_times <= MAX_USBCTRL_VENDORREQ_TIMES) { + _rtw_memset(pIo_buf, 0, len); + + if (requesttype == 0x01) { + pipe = usb_rcvctrlpipe(udev, 0);/* read_in */ + reqtype = REALTEK_USB_VENQT_READ; + } else { + pipe = usb_sndctrlpipe(udev, 0);/* write_out */ + reqtype = REALTEK_USB_VENQT_WRITE; + memcpy(pIo_buf, pdata, len); + } + + status = rtw_usb_control_msg(udev, pipe, request, reqtype, value, index, pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); + + if (status == len) { /* Success this control transfer. */ + rtw_reset_continual_urb_error(dvobjpriv); + if (requesttype == 0x01) + memcpy(pdata, pIo_buf, len); + } else { /* error cases */ + DBG_88E("reg 0x%x, usb %s %u fail, status:%d value=0x%x, vendorreq_times:%d\n", + value, (requesttype == 0x01) ? "read" : "write", + len, status, *(u32 *)pdata, vendorreq_times); + + if (status < 0) { + if (status == (-ESHUTDOWN) || status == -ENODEV) { + adapt->bSurpriseRemoved = true; + } else { + struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); + haldata->srestpriv.Wifi_Error_Status = USB_VEN_REQ_CMD_FAIL; + } + } else { /* status != len && status >= 0 */ + if (status > 0) { + if (requesttype == 0x01) { + /* For Control read transfer, we have to copy the read data from pIo_buf to pdata. */ + memcpy(pdata, pIo_buf, len); + } + } + } + + if (rtw_inc_and_chk_continual_urb_error(dvobjpriv)) { + adapt->bSurpriseRemoved = true; + break; + } + + } + + /* firmware download is checksumed, don't retry */ + if ((value >= FW_8188E_START_ADDRESS && value <= FW_8188E_END_ADDRESS) || status == len) + break; + } +release_mutex: + mutex_unlock(&dvobjpriv->usb_vendor_req_mutex); +exit: + return status; +} + +u8 usb_read8(struct adapter *adapter, u32 addr) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + u8 data = 0; + + + request = 0x05; + requesttype = 0x01;/* read_in */ + index = 0;/* n/a */ + + wvalue = (u16)(addr&0x0000ffff); + len = 1; + + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + + + return data; + +} + +u16 usb_read16(struct adapter *adapter, u32 addr) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + __le32 data; + + request = 0x05; + requesttype = 0x01;/* read_in */ + index = 0;/* n/a */ + wvalue = (u16)(addr&0x0000ffff); + len = 2; + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + + return (u16)(le32_to_cpu(data)&0xffff); +} + +u32 usb_read32(struct adapter *adapter, u32 addr) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + __le32 data; + + + request = 0x05; + requesttype = 0x01;/* read_in */ + index = 0;/* n/a */ + + wvalue = (u16)(addr&0x0000ffff); + len = 4; + + usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + + + return le32_to_cpu(data); +} + +static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) +{ + struct recv_buf *precvbuf = (struct recv_buf *)purb->context; + struct adapter *adapt = (struct adapter *)precvbuf->adapter; + struct recv_priv *precvpriv = &adapt->recvpriv; + + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete!!!\n")); + + precvpriv->rx_pending_cnt--; + + if (adapt->bSurpriseRemoved || adapt->bDriverStopped || adapt->bReadPortCancel) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("usb_read_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", + adapt->bDriverStopped, adapt->bSurpriseRemoved)); + + precvbuf->reuse = true; + DBG_88E("%s() RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bReadPortCancel(%d)\n", + __func__, adapt->bDriverStopped, + adapt->bSurpriseRemoved, adapt->bReadPortCancel); + return; + } + + if (purb->status == 0) { /* SUCCESS */ + if ((purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n")); + precvbuf->reuse = true; + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + DBG_88E("%s()-%d: RX Warning!\n", __func__, __LINE__); + } else { + rtw_reset_continual_urb_error(adapter_to_dvobj(adapt)); + + skb_put(precvbuf->pskb, purb->actual_length); + skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb); + + if (skb_queue_len(&precvpriv->rx_skb_queue) <= 1) + tasklet_schedule(&precvpriv->recv_tasklet); + + precvbuf->pskb = NULL; + precvbuf->reuse = false; + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + } + } else { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete : purb->status(%d) != 0\n", purb->status)); + + DBG_88E("###=> usb_read_port_complete => urb status(%d)\n", purb->status); + skb_put(precvbuf->pskb, purb->actual_length); + precvbuf->pskb = NULL; + + if (rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(adapt))) + adapt->bSurpriseRemoved = true; + + switch (purb->status) { + case -EINVAL: + case -EPIPE: + case -ENODEV: + case -ESHUTDOWN: + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bSurpriseRemoved=true\n")); + case -ENOENT: + adapt->bDriverStopped = true; + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bDriverStopped=true\n")); + break; + case -EPROTO: + case -EOVERFLOW: + { + struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); + haldata->srestpriv.Wifi_Error_Status = USB_READ_PORT_FAIL; + } + precvbuf->reuse = true; + usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); + break; + case -EINPROGRESS: + DBG_88E("ERROR: URB IS IN PROGRESS!\n"); + break; + default: + break; + } + } +} + +u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem) +{ + struct urb *purb = NULL; + struct recv_buf *precvbuf = (struct recv_buf *)rmem; + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter); + struct recv_priv *precvpriv = &adapter->recvpriv; + struct usb_device *pusbd = pdvobj->pusbdev; + int err; + unsigned int pipe; + size_t tmpaddr = 0; + size_t alignment = 0; + u32 ret = _SUCCESS; + + + if (adapter->bDriverStopped || adapter->bSurpriseRemoved || + adapter->pwrctrlpriv.pnp_bstop_trx) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("usb_read_port:(adapt->bDriverStopped ||adapt->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); + return _FAIL; + } + + if (!precvbuf) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("usb_read_port:precvbuf==NULL\n")); + return _FAIL; + } + + if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { + precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue); + if (NULL != precvbuf->pskb) + precvbuf->reuse = true; + } + + /* re-assign for linux based on skb */ + if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { + precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); + if (precvbuf->pskb == NULL) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("init_recvbuf(): alloc_skb fail!\n")); + DBG_88E("#### usb_read_port() alloc_skb fail!#####\n"); + return _FAIL; + } + + tmpaddr = (size_t)precvbuf->pskb->data; + alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); + skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); + } else { /* reuse skb */ + precvbuf->reuse = false; + } + + precvpriv->rx_pending_cnt++; + + purb = precvbuf->purb; + + /* translate DMA FIFO addr to pipehandle */ + pipe = ffaddr2pipehdl(pdvobj, addr); + + usb_fill_bulk_urb(purb, pusbd, pipe, + precvbuf->pskb->data, + MAX_RECVBUF_SZ, + usb_read_port_complete, + precvbuf);/* context is precvbuf */ + + err = usb_submit_urb(purb, GFP_ATOMIC); + if ((err) && (err != (-EPERM))) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("cannot submit rx in-token(err=0x%.8x), URB_STATUS =0x%.8x", + err, purb->status)); + DBG_88E("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n", + err, purb->status); + ret = _FAIL; + } + + return ret; +} + void usb_read_port_cancel(struct adapter *padapter) { int i; @@ -57,6 +556,104 @@ void usb_read_port_cancel(struct adapter *padapter) } } +int usb_write8(struct adapter *adapter, u32 addr, u8 val) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + u8 data; + int ret; + + request = 0x05; + requesttype = 0x00;/* write_out */ + index = 0;/* n/a */ + wvalue = (u16)(addr&0x0000ffff); + len = 1; + data = val; + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + return ret; +} + +int usb_write16(struct adapter *adapter, u32 addr, u16 val) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + __le32 data; + int ret; + + + request = 0x05; + requesttype = 0x00;/* write_out */ + index = 0;/* n/a */ + + wvalue = (u16)(addr&0x0000ffff); + len = 2; + + data = cpu_to_le32(val & 0x0000ffff); + + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + + + return ret; +} + +int usb_write32(struct adapter *adapter, u32 addr, u32 val) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + __le32 data; + int ret; + + + request = 0x05; + requesttype = 0x00;/* write_out */ + index = 0;/* n/a */ + + wvalue = (u16)(addr&0x0000ffff); + len = 4; + data = cpu_to_le32(val); + + ret = usbctrl_vendorreq(adapter, request, wvalue, index, &data, len, requesttype); + + + return ret; +} + +int usb_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata) +{ + u8 request; + u8 requesttype; + u16 wvalue; + u16 index; + u16 len; + u8 buf[VENDOR_CMD_MAX_DATA_LEN] = {0}; + int ret; + + + request = 0x05; + requesttype = 0x00;/* write_out */ + index = 0;/* n/a */ + + wvalue = (u16)(addr&0x0000ffff); + len = length; + memcpy(buf, pdata, len); + + ret = usbctrl_vendorreq(adapter, request, wvalue, index, buf, len, requesttype); + + + return RTW_STATUS_CODE(ret); +} + + + static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs) { struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context; @@ -254,3 +851,46 @@ void usb_write_port_cancel(struct adapter *padapter) pxmitbuf++; } } + +void rtl8188eu_recv_tasklet(void *priv) +{ + struct sk_buff *pskb; + struct adapter *adapt = (struct adapter *)priv; + struct recv_priv *precvpriv = &adapt->recvpriv; + + while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) { + if ((adapt->bDriverStopped) || (adapt->bSurpriseRemoved)) { + DBG_88E("recv_tasklet => bDriverStopped or bSurpriseRemoved\n"); + dev_kfree_skb_any(pskb); + break; + } + recvbuf2recvframe(adapt, pskb); + skb_reset_tail_pointer(pskb); + pskb->len = 0; + skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb); + } +} + +void rtl8188eu_xmit_tasklet(void *priv) +{ + int ret = false; + struct adapter *adapt = (struct adapter *)priv; + struct xmit_priv *pxmitpriv = &adapt->xmitpriv; + + if (check_fwstate(&adapt->mlmepriv, _FW_UNDER_SURVEY)) + return; + + while (1) { + if ((adapt->bDriverStopped) || + (adapt->bSurpriseRemoved) || + (adapt->bWritePortCancel)) { + DBG_88E("xmit_tasklet => bDriverStopped or bSurpriseRemoved or bWritePortCancel\n"); + break; + } + + ret = rtl8188eu_xmitframe_complete(adapt, pxmitpriv, NULL); + + if (!ret) + break; + } +} -- cgit From df62993c9e1e3c51fb737c0fbd488ce1bcf3bf8d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:32 +0530 Subject: staging: rtl8188eu: Remove macros specific to kernel version < 2.6.12 Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_ops.h | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index ff730f49bc4b..e10b71142ed9 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -38,7 +38,6 @@ enum{ #define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ #define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 12)) #define rtw_usb_control_msg(dev, pipe, request, requesttype, \ value, index, data, size, timeout_ms) \ usb_control_msg((dev), (pipe), (request), (requesttype), (value),\ @@ -46,20 +45,7 @@ enum{ #define rtw_usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout_ms) \ usb_bulk_msg((usb_dev), (pipe), (data), (len), \ (actual_length), (timeout_ms)) -#else -#define rtw_usb_control_msg(dev, pipe, request, requesttype, \ - value, index, data, size, timeout_ms) \ - usb_control_msg((dev), (pipe), (request), (requesttype), \ - (value), (index), (data), (size), \ - ((timeout_ms) == 0) || \ - ((timeout_ms)*HZ/1000 > 0) ? \ - ((timeout_ms)*HZ/1000) : 1) -#define rtw_usb_bulk_msg(usb_dev, pipe, data, len, \ - actual_length, timeout_ms) \ - usb_bulk_msg((usb_dev), (pipe), (data), (len), (actual_length), \ - ((timeout_ms) == 0) || ((timeout_ms)*HZ/1000 > 0) ?\ - ((timeout_ms)*HZ/1000) : 1) -#endif + #include void rtl8188eu_set_hw_type(struct adapter *padapter); -- cgit From 72835ee6b99b2254fe577b4c9922fada00e1e79b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:33 +0530 Subject: staging:rtl8188eu:usb_ops.h:Remove unused enum, macros and function declaration Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_ops.h | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index e10b71142ed9..74009ca2e5f2 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -27,13 +27,7 @@ #define REALTEK_USB_VENQT_READ 0xC0 #define REALTEK_USB_VENQT_WRITE 0x40 -#define REALTEK_USB_VENQT_CMD_REQ 0x05 -#define REALTEK_USB_VENQT_CMD_IDX 0x00 -enum{ - VENDOR_WRITE = 0x00, - VENDOR_READ = 0x01, -}; #define ALIGNMENT_UNIT 16 #define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ #define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) @@ -42,14 +36,9 @@ enum{ value, index, data, size, timeout_ms) \ usb_control_msg((dev), (pipe), (request), (requesttype), (value),\ (index), (data), (size), (timeout_ms)) -#define rtw_usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout_ms) \ - usb_bulk_msg((usb_dev), (pipe), (data), (len), \ - (actual_length), (timeout_ms)) #include -void rtl8188eu_set_hw_type(struct adapter *padapter); - /* * Increase and check if the continual_urb_error of this @param dvobjprivei * is larger than MAX_CONTINUAL_URB_ERR -- cgit From 8ccd2d547db1f4fc9e99482458be18274c09d916 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:34 +0530 Subject: staging: rtl8188eu: usb_ops.h: Remove macro rtw_usb_control_msg() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_ops.h | 5 ----- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index 74009ca2e5f2..79d206e4d8d6 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -32,11 +32,6 @@ #define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ #define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) -#define rtw_usb_control_msg(dev, pipe, request, requesttype, \ - value, index, data, size, timeout_ms) \ - usb_control_msg((dev), (pipe), (request), (requesttype), (value),\ - (index), (data), (size), (timeout_ms)) - #include /* diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 756318818ae0..363f7f5551df 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -273,7 +273,7 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i memcpy(pIo_buf, pdata, len); } - status = rtw_usb_control_msg(udev, pipe, request, reqtype, value, index, pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); + status = usb_control_msg(udev, pipe, request, reqtype, value, index, pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); if (status == len) { /* Success this control transfer. */ rtw_reset_continual_urb_error(dvobjpriv); -- cgit From 9463f27af643db333b74ce27d4caae760b273328 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:35 +0530 Subject: staging: rtl8188eu: Remove inline function rtw_inc_and_chk_continual_urb_error() rtw_inc_and_chk_continual_urb_error() is used to check if device is removed unexpectedly, to do that we can just check status of urb in usb_read_port_complete() and usbctrl_vendorreq() doed that by checking return value of usb_control_msg(). Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/usb_ops.h | 19 ------------------- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 10 +--------- 2 files changed, 1 insertion(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index 79d206e4d8d6..eb934bf0f391 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -34,25 +34,6 @@ #include -/* - * Increase and check if the continual_urb_error of this @param dvobjprivei - * is larger than MAX_CONTINUAL_URB_ERR - * @return true: - * @return false: - */ -static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj) -{ - int ret = false; - int value; - value = atomic_inc_return(&dvobj->continual_urb_error); - if (value > MAX_CONTINUAL_URB_ERR) { - DBG_88E("[dvobj:%p][ERROR] continual_urb_error:%d > %d\n", - dvobj, value, MAX_CONTINUAL_URB_ERR); - ret = true; - } - return ret; -} - /* * Set the continual_urb_error of this @param dvobjprive to 0 */ diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 363f7f5551df..9f9bb06a17f1 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -300,11 +300,6 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i } } - if (rtw_inc_and_chk_continual_urb_error(dvobjpriv)) { - adapt->bSurpriseRemoved = true; - break; - } - } /* firmware download is checksumed, don't retry */ @@ -432,15 +427,12 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) skb_put(precvbuf->pskb, purb->actual_length); precvbuf->pskb = NULL; - if (rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(adapt))) - adapt->bSurpriseRemoved = true; - switch (purb->status) { case -EINVAL: case -EPIPE: case -ENODEV: case -ESHUTDOWN: - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bSurpriseRemoved=true\n")); + adapt->bSurpriseRemoved = true; case -ENOENT: adapt->bDriverStopped = true; RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete:bDriverStopped=true\n")); -- cgit From 622c10a4048a6e5a8821e476b24322a07b0d5916 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:36 +0530 Subject: staging: rtl8188eu: Remove continual_urb_error from struct dvobj_priv rtw_inc_and_chk_continual_urb_error() was only user of continual_urb_error, which has been removed. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/drv_types.h | 2 -- drivers/staging/rtl8188eu/include/usb_ops.h | 8 -------- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 -- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 3 --- 4 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 67501352fd66..097fcc9b54e1 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -174,8 +174,6 @@ struct dvobj_priv { struct usb_interface *pusbintf; struct usb_device *pusbdev; - - atomic_t continual_urb_error; }; static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj) diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h index eb934bf0f391..ea23b459d88e 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ b/drivers/staging/rtl8188eu/include/usb_ops.h @@ -34,14 +34,6 @@ #include -/* -* Set the continual_urb_error of this @param dvobjprive to 0 -*/ -static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj) -{ - atomic_set(&dvobj->continual_urb_error, 0); -} - #define USB_HIGH_SPEED_BULK_SIZE 512 #define USB_FULL_SPEED_BULK_SIZE 64 diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index c4a4880e7b8a..4af2c956fc34 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -121,8 +121,6 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) if (!pdvobjpriv->usb_vendor_req_buf) goto free_dvobj; - rtw_reset_continual_urb_error(pdvobjpriv); - usb_get_dev(pusbd); status = _SUCCESS; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 9f9bb06a17f1..ad7c48e78d52 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -276,7 +276,6 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i status = usb_control_msg(udev, pipe, request, reqtype, value, index, pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); if (status == len) { /* Success this control transfer. */ - rtw_reset_continual_urb_error(dvobjpriv); if (requesttype == 0x01) memcpy(pdata, pIo_buf, len); } else { /* error cases */ @@ -408,8 +407,6 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) usb_read_port(adapt, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf); DBG_88E("%s()-%d: RX Warning!\n", __func__, __LINE__); } else { - rtw_reset_continual_urb_error(adapter_to_dvobj(adapt)); - skb_put(precvbuf->pskb, purb->actual_length); skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb); -- cgit From 17452ee9d3e3c20eb009423fc3dd02d67882e4bb Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sat, 21 Jun 2014 18:19:37 +0530 Subject: staging: rtl8188eu: Merge usb_ops.h into usb_ops_linux.h Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 1 - drivers/staging/rtl8188eu/core/rtw_recv.c | 1 - drivers/staging/rtl8188eu/core/rtw_xmit.c | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 2 - drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 2 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 1 - drivers/staging/rtl8188eu/include/usb_ops.h | 55 ----------------------- drivers/staging/rtl8188eu/include/usb_ops_linux.h | 25 +++++++++++ drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 1 - drivers/staging/rtl8188eu/os_dep/recv_linux.c | 2 +- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 +- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 1 - 13 files changed, 29 insertions(+), 67 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/usb_ops.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index f1398ab01d7b..3dea17f31ce9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -26,7 +26,6 @@ #include #include -#include extern void indicate_wx_scan_complete_event(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 0e73df5975b8..eaf43f2e7103 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index a113f0f12666..eb938a50a42f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 7ea0320c9141..4d3ea7c381f1 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -28,8 +28,6 @@ #include -#include - void iol_mode_enable(struct adapter *padapter, u8 enable) { u8 reg_0xf0 = 0; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c index 0f6222dab4a6..32e59c5fef6c 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 4bc2ce0bb319..3112e6c7eafd 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include s32 rtl8188eu_init_xmit_priv(struct adapter *adapt) diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 03701ca5eb0c..8c26d0a72083 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/include/usb_ops.h b/drivers/staging/rtl8188eu/include/usb_ops.h deleted file mode 100644 index ea23b459d88e..000000000000 --- a/drivers/staging/rtl8188eu/include/usb_ops.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __USB_OPS_H_ -#define __USB_OPS_H_ - -#include -#include -#include -#include - -#define REALTEK_USB_VENQT_READ 0xC0 -#define REALTEK_USB_VENQT_WRITE 0x40 - -#define ALIGNMENT_UNIT 16 -#define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ -#define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) - -#include - -#define USB_HIGH_SPEED_BULK_SIZE 512 -#define USB_FULL_SPEED_BULK_SIZE 64 - -static inline u8 rtw_usb_bulk_size_boundary(struct adapter *padapter, - int buf_len) -{ - u8 rst = true; - struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); - - if (pdvobjpriv->ishighspeed) - rst = (0 == (buf_len) % USB_HIGH_SPEED_BULK_SIZE) ? - true : false; - else - rst = (0 == (buf_len) % USB_FULL_SPEED_BULK_SIZE) ? - true : false; - return rst; -} - -#endif /* __USB_OPS_H_ */ diff --git a/drivers/staging/rtl8188eu/include/usb_ops_linux.h b/drivers/staging/rtl8188eu/include/usb_ops_linux.h index 5fc4247dc9c0..01b3810379ec 100644 --- a/drivers/staging/rtl8188eu/include/usb_ops_linux.h +++ b/drivers/staging/rtl8188eu/include/usb_ops_linux.h @@ -29,6 +29,16 @@ #define RTW_USB_BULKOUT_TIME 5000/* ms */ +#define REALTEK_USB_VENQT_READ 0xC0 +#define REALTEK_USB_VENQT_WRITE 0x40 + +#define ALIGNMENT_UNIT 16 +#define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ +#define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) + +#define USB_HIGH_SPEED_BULK_SIZE 512 +#define USB_FULL_SPEED_BULK_SIZE 64 + #define _usbctrl_vendorreq_async_callback(urb, regs) \ _usbctrl_vendorreq_async_callback(urb) #define usb_bulkout_zero_complete(purb, regs) \ @@ -42,6 +52,21 @@ #define usb_read_interrupt_complete(purb, regs) \ usb_read_interrupt_complete(purb) +static inline u8 rtw_usb_bulk_size_boundary(struct adapter *padapter, + int buf_len) +{ + u8 rst = true; + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + + if (pdvobjpriv->ishighspeed) + rst = (0 == (buf_len) % USB_HIGH_SPEED_BULK_SIZE) ? + true : false; + else + rst = (0 == (buf_len) % USB_FULL_SPEED_BULK_SIZE) ? + true : false; + return rst; +} + unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr); u8 usb_read8(struct adapter *adapter, u32 addr); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 56e24fa3a89e..9b5c54913a8d 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index 64dfc02ad08a..632ed8260625 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -26,7 +26,7 @@ #include #include -#include +#include /* alloc os related resource in struct recv_frame */ int rtw_os_recv_resource_alloc(struct adapter *padapter, diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 4af2c956fc34..714c14e5d4f5 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index ad7c48e78d52..9e8b8c1cbd46 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -19,7 +19,6 @@ #define _USB_OPS_LINUX_C_ #include -#include #include #include -- cgit From 83f53fceec88eeb25575350b589f6f911b389b49 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:21 +0530 Subject: staging: rtl8188eu: Remove dummy function odm_DynamicTxPower() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/odm.c | 14 -------------- drivers/staging/rtl8188eu/include/odm_precomp.h | 1 - 2 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/odm.c b/drivers/staging/rtl8188eu/hal/odm.c index 60dbde70fc4a..f8dcfdae0727 100644 --- a/drivers/staging/rtl8188eu/hal/odm.c +++ b/drivers/staging/rtl8188eu/hal/odm.c @@ -221,7 +221,6 @@ void ODM_DMWatchdog(struct odm_dm_struct *pDM_Odm) ODM_TXPowerTrackingCheck(pDM_Odm); odm_EdcaTurboCheck(pDM_Odm); - odm_DynamicTxPower(pDM_Odm); } /* Init /.. Fixed HW value. Only init time. */ @@ -1110,19 +1109,6 @@ void odm_DynamicTxPowerInit(struct odm_dm_struct *pDM_Odm) pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; } -void odm_DynamicTxPower(struct odm_dm_struct *pDM_Odm) -{ - /* For AP/ADSL use struct rtl8192cd_priv * */ - /* For CE/NIC use struct adapter * */ - - if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR)) - return; - - /* 2012/01/12 MH According to Luke's suggestion, only high power will support the feature. */ - if (!pDM_Odm->ExtPA) - return; -} - /* 3============================================================ */ /* 3 RSSI Monitor */ /* 3============================================================ */ diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h index df61892a3dc0..0ab8254ce901 100644 --- a/drivers/staging/rtl8188eu/include/odm_precomp.h +++ b/drivers/staging/rtl8188eu/include/odm_precomp.h @@ -71,7 +71,6 @@ void odm_RefreshRateAdaptiveMaskMP(struct odm_dm_struct *pDM_Odm); void odm_DynamicBBPowerSaving(struct odm_dm_struct *pDM_Odm); void odm_SwAntDivChkAntSwitch(struct odm_dm_struct *pDM_Odm, u8 Step); void odm_EdcaTurboCheck(struct odm_dm_struct *pDM_Odm); -void odm_DynamicTxPower(struct odm_dm_struct *pDM_Odm); void odm_CommonInfoSelfInit(struct odm_dm_struct *pDM_Odm); void odm_RSSIMonitorCheck(struct odm_dm_struct *pDM_Odm); void odm_RefreshRateAdaptiveMask(struct odm_dm_struct *pDM_Odm); -- cgit From 276b5e537c69eaf597ada054f7d3ab4ea60f40ed Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:22 +0530 Subject: staging: rtl8188eu: Remove dummy function CheckFwRsvdPageContent() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 6 ------ drivers/staging/rtl8188eu/include/rtl8188e_cmd.h | 1 - 2 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 5c9d64e64c8d..fe8ba7e3ba5b 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -476,12 +476,6 @@ static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u *pLength = pktlen; } -/* To check if reserved page content is destroyed by beacon because beacon is too large. */ -/* 2010.06.23. Added by tynli. */ -void CheckFwRsvdPageContent(struct adapter *Adapter) -{ -} - /* */ /* Description: Fill the reserved packets that FW will use to RSVD page. */ /* Now we just send 4 types packet to rsvd page. */ diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h b/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h index b32bc28503d0..460116949a9b 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h @@ -116,7 +116,6 @@ void rtl8188e_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 arg, void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state); #endif /* CONFIG_88EU_P2P */ -void CheckFwRsvdPageContent(struct adapter *adapt); void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt); #endif/* __RTL8188E_CMD_H__ */ -- cgit From 3491b66c6f4835d86fec38df43754eae81be1053 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:23 +0530 Subject: staging: rtl8188eu: Remove dummy rtl8188e_GetHalODMVar() and its wrapper Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 9 --------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 ----- drivers/staging/rtl8188eu/include/hal_intf.h | 6 ------ 3 files changed, 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 1afc56690c3c..bcd9c4d10175 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -156,15 +156,6 @@ void rtw_hal_set_odm_var(struct adapter *adapt, val1, set); } -void rtw_hal_get_odm_var(struct adapter *adapt, - enum hal_odm_variable var, void *val1, - bool set) -{ - if (adapt->HalFunc.GetHalODMVarHandler) - adapt->HalFunc.GetHalODMVarHandler(adapt, var, - val1, set); -} - void rtw_hal_enable_interrupt(struct adapter *adapt) { if (adapt->HalFunc.enable_interrupt) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 4d3ea7c381f1..9ce036e5d231 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -544,10 +544,6 @@ static void rtl8188e_read_chip_version(struct adapter *padapter) ReadChipVersion8188E(padapter); } -static void rtl8188e_GetHalODMVar(struct adapter *Adapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet) -{ -} - static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet) { struct hal_data_8188e *pHalData = GET_HAL_DATA(Adapter); @@ -622,7 +618,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->sreset_init_value = &sreset_init_value; pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status; - pHalFunc->GetHalODMVarHandler = &rtl8188e_GetHalODMVar; pHalFunc->SetHalODMVarHandler = &rtl8188e_SetHalODMVar; pHalFunc->IOL_exec_cmds_sync = &rtl8188e_IOL_exec_cmds_sync; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index a86b3f848396..482d0f3f45a2 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -197,9 +197,6 @@ struct hal_ops { enum hal_def_variable eVariable, void *pValue); - void (*GetHalODMVarHandler)(struct adapter *padapter, - enum hal_odm_variable eVariable, - void *pValue1, bool bSet); void (*SetHalODMVarHandler)(struct adapter *padapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet); @@ -295,9 +292,6 @@ u8 rtw_hal_get_def_var(struct adapter *padapter, void rtw_hal_set_odm_var(struct adapter *padapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet); -void rtw_hal_get_odm_var(struct adapter *padapter, - enum hal_odm_variable eVariable, - void *pValue1, bool bSet); void rtw_hal_enable_interrupt(struct adapter *padapter); void rtw_hal_disable_interrupt(struct adapter *padapter); -- cgit From 5bc7dc19190cad0ba74284a5b2fead4ff0e1d851 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:24 +0530 Subject: staging: rtl8188eu: Remove dummy rtl8188e_start_thread() and its wrapper Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 7 ------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 ----- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 - 4 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index bcd9c4d10175..4506fd844587 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -262,13 +262,6 @@ void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg, rssi_level); } -/* Start specifical interface thread */ -void rtw_hal_start_thread(struct adapter *adapt) -{ - if (adapt->HalFunc.run_thread) - adapt->HalFunc.run_thread(adapt); -} - /* Start specifical interface thread */ void rtw_hal_stop_thread(struct adapter *adapt) { diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 9ce036e5d231..f08696a38ab1 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -573,10 +573,6 @@ static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable } } -void rtl8188e_start_thread(struct adapter *padapter) -{ -} - void rtl8188e_stop_thread(struct adapter *padapter) { } @@ -605,7 +601,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->hal_dm_watchdog = &rtl8188e_HalDmWatchDog; pHalFunc->Add_RateATid = &rtl8188e_Add_RateATid; - pHalFunc->run_thread = &rtl8188e_start_thread; pHalFunc->cancel_thread = &rtl8188e_stop_thread; pHalFunc->AntDivBeforeLinkHandler = &AntDivBeforeLink8188E; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 482d0f3f45a2..d80dd72e3192 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -207,7 +207,6 @@ struct hal_ops { void (*Add_RateATid)(struct adapter *adapter, u32 bitmap, u8 arg, u8 rssi_level); - void (*run_thread)(struct adapter *adapter); void (*cancel_thread)(struct adapter *adapter); u8 (*AntDivBeforeLinkHandler)(struct adapter *adapter); @@ -313,7 +312,6 @@ void rtw_hal_update_ra_mask(struct adapter *padapter, u32 mac_id, u8 level); void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg, u8 level); void rtw_hal_clone_data(struct adapter *dst_adapt, struct adapter *src_adapt); -void rtw_hal_start_thread(struct adapter *padapter); void rtw_hal_stop_thread(struct adapter *padapter); void rtw_hal_bcn_related_reg_setting(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index e19ec25b09dc..287126a7b187 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -749,7 +749,6 @@ u32 rtw_start_drv_threads(struct adapter *padapter) else _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); /* wait for cmd_thread to run */ - rtw_hal_start_thread(padapter); return _status; } -- cgit From f9891af6389b7dc99ddee8f2607efe459ea0f2dc Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:25 +0530 Subject: staging: rtl8188eu: Remove dummy rtl8188e_stop_thread() and its wrapper Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 7 ------- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 5 ----- drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 - 4 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 4506fd844587..799c314617cd 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -262,13 +262,6 @@ void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg, rssi_level); } -/* Start specifical interface thread */ -void rtw_hal_stop_thread(struct adapter *adapt) -{ - if (adapt->HalFunc.cancel_thread) - adapt->HalFunc.cancel_thread(adapt); -} - u32 rtw_hal_read_bbreg(struct adapter *adapt, u32 regaddr, u32 bitmask) { u32 data = 0; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index f08696a38ab1..bee20a064159 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -573,10 +573,6 @@ static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable } } -void rtl8188e_stop_thread(struct adapter *padapter) -{ -} - static void hal_notch_filter_8188e(struct adapter *adapter, bool enable) { if (enable) { @@ -601,7 +597,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc) pHalFunc->hal_dm_watchdog = &rtl8188e_HalDmWatchDog; pHalFunc->Add_RateATid = &rtl8188e_Add_RateATid; - pHalFunc->cancel_thread = &rtl8188e_stop_thread; pHalFunc->AntDivBeforeLinkHandler = &AntDivBeforeLink8188E; pHalFunc->AntDivCompareHandler = &AntDivCompare8188E; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index d80dd72e3192..05e363e8e37e 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -207,7 +207,6 @@ struct hal_ops { void (*Add_RateATid)(struct adapter *adapter, u32 bitmap, u8 arg, u8 rssi_level); - void (*cancel_thread)(struct adapter *adapter); u8 (*AntDivBeforeLinkHandler)(struct adapter *adapter); void (*AntDivCompareHandler)(struct adapter *adapter, @@ -312,7 +311,6 @@ void rtw_hal_update_ra_mask(struct adapter *padapter, u32 mac_id, u8 level); void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg, u8 level); void rtw_hal_clone_data(struct adapter *dst_adapt, struct adapter *src_adapt); -void rtw_hal_stop_thread(struct adapter *padapter); void rtw_hal_bcn_related_reg_setting(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 287126a7b187..19fd8124ca17 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -761,7 +761,6 @@ void rtw_stop_drv_threads(struct adapter *padapter) if (padapter->cmdThread) _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); - rtw_hal_stop_thread(padapter); } static u8 rtw_init_default_value(struct adapter *padapter) -- cgit From a42a58012cbf31e0f379606ec5e22e0f222fcb03 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:26 +0530 Subject: staging: rtl8188eu: Remove dummy function Hal_InitChannelPlan() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 4 ---- drivers/staging/rtl8188eu/hal/usb_halinit.c | 4 ---- drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 1 - 3 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index bee20a064159..0094d21bdf6d 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1079,10 +1079,6 @@ void Hal_ReadThermalMeter_88E(struct adapter *Adapter, u8 *PROMContent, bool Aut DBG_88E("ThermalMeter = 0x%x\n", pHalData->EEPROMThermalMeter); } -void Hal_InitChannelPlan(struct adapter *padapter) -{ -} - bool HalDetectPwrDownMode88E(struct adapter *Adapter) { u8 tmpvalue = 0; diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 8c26d0a72083..5096d4d193af 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1149,10 +1149,6 @@ readAdapterInfo_8188EU( Hal_EfuseParseBoardType88E(adapt, eeprom->efuse_eeprom_data, eeprom->bautoload_fail_flag); Hal_ReadThermalMeter_88E(adapt, eeprom->efuse_eeprom_data, eeprom->bautoload_fail_flag); - /* */ - /* The following part initialize some vars by PG info. */ - /* */ - Hal_InitChannelPlan(adapt); } static void _ReadPROMContent( diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index 94a5f93af49b..ed3204fa993c 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -457,7 +457,6 @@ void Hal_ReadPowerSavingMode88E(struct adapter *pAdapter, u8 *hwinfo, bool HalDetectPwrDownMode88E(struct adapter *Adapter); -void Hal_InitChannelPlan(struct adapter *padapter); void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc); /* register */ -- cgit From 56ed3914b032f6a029834d5ab404b17c82e2fe16 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:27 +0530 Subject: staging: rtl8188eu: Remove dummy rtl8188eu_free_xmit_priv() and its wrapper Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_xmit.c | 3 --- drivers/staging/rtl8188eu/hal/hal_intf.c | 6 ------ drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 4 ---- drivers/staging/rtl8188eu/hal/usb_halinit.c | 1 - drivers/staging/rtl8188eu/include/hal_intf.h | 2 -- drivers/staging/rtl8188eu/include/rtl8188e_xmit.h | 1 - 6 files changed, 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index eb938a50a42f..3156067a4019 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -233,9 +233,6 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv) u32 max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ; u32 num_xmit_extbuf = NR_XMIT_EXTBUFF; - - rtw_hal_free_xmit_priv(padapter); - if (pxmitpriv->pxmit_frame_buf == NULL) return; diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 799c314617cd..f002c43f372f 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -214,12 +214,6 @@ s32 rtw_hal_init_xmit_priv(struct adapter *adapt) return _FAIL; } -void rtw_hal_free_xmit_priv(struct adapter *adapt) -{ - if (adapt->HalFunc.free_xmit_priv != NULL) - adapt->HalFunc.free_xmit_priv(adapt); -} - s32 rtw_hal_init_recv_priv(struct adapter *adapt) { if (adapt->HalFunc.init_recv_priv) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 3112e6c7eafd..34bc6605ab7b 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -35,10 +35,6 @@ s32 rtl8188eu_init_xmit_priv(struct adapter *adapt) return _SUCCESS; } -void rtl8188eu_free_xmit_priv(struct adapter *adapt) -{ -} - static u8 urb_zero_packet_chk(struct adapter *adapt, int sz) { u8 set_tx_desc_offset; diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 5096d4d193af..3a539e49f02b 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -2223,7 +2223,6 @@ void rtl8188eu_set_hal_ops(struct adapter *adapt) halfunc->inirp_deinit = &rtl8188eu_inirp_deinit; halfunc->init_xmit_priv = &rtl8188eu_init_xmit_priv; - halfunc->free_xmit_priv = &rtl8188eu_free_xmit_priv; halfunc->init_recv_priv = &rtl8188eu_init_recv_priv; halfunc->free_recv_priv = &rtl8188eu_free_recv_priv; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index 05e363e8e37e..fb797c762ba2 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -157,7 +157,6 @@ struct hal_ops { u32 (*inirp_deinit)(struct adapter *padapter); s32 (*init_xmit_priv)(struct adapter *padapter); - void (*free_xmit_priv)(struct adapter *padapter); s32 (*init_recv_priv)(struct adapter *padapter); void (*free_recv_priv)(struct adapter *padapter); @@ -302,7 +301,6 @@ s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe); s32 rtw_hal_init_xmit_priv(struct adapter *padapter); -void rtw_hal_free_xmit_priv(struct adapter *padapter); s32 rtw_hal_init_recv_priv(struct adapter *padapter); void rtw_hal_free_recv_priv(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h b/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h index cf7267a53659..0b96d42e290b 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h @@ -159,7 +159,6 @@ struct txrpt_ccx_88e { void rtl8188e_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull); s32 rtl8188eu_init_xmit_priv(struct adapter *padapter); -void rtl8188eu_free_xmit_priv(struct adapter *padapter); s32 rtl8188eu_hal_xmit(struct adapter *padapter, struct xmit_frame *frame); s32 rtl8188eu_mgnt_xmit(struct adapter *padapter, struct xmit_frame *frame); s32 rtl8188eu_xmit_buf_handler(struct adapter *padapter); -- cgit From 1ce39848e17c34d494e46d50ec3cfa249b0342a7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:28 +0530 Subject: staging: rtl8188eu: Remove function _rtw_memset() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 12 ++-- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/core/rtw_efuse.c | 18 ++--- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 10 +-- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 16 ++--- drivers/staging/rtl8188eu/core/rtw_mlme.c | 22 +++--- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 74 +++++++++---------- drivers/staging/rtl8188eu/core/rtw_mp.c | 17 +++-- drivers/staging/rtl8188eu/core/rtw_p2p.c | 46 ++++++------ drivers/staging/rtl8188eu/core/rtw_recv.c | 2 +- drivers/staging/rtl8188eu/core/rtw_security.c | 28 ++++---- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 2 +- drivers/staging/rtl8188eu/core/rtw_wlan_util.c | 6 +- drivers/staging/rtl8188eu/core/rtw_xmit.c | 6 +- drivers/staging/rtl8188eu/hal/hal_com.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 4 +- drivers/staging/rtl8188eu/hal/rtl8188e_dm.c | 4 +- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 4 +- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 88 +++++++++++------------ drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 8 +-- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 -- drivers/staging/rtl8188eu/os_dep/recv_linux.c | 4 +- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 2 +- 27 files changed, 191 insertions(+), 198 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index 85fda6128db9..eb96c5628d81 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -548,7 +548,7 @@ static void update_bmc_sta(struct adapter *padapter) psta->ieee8021x_blocked = 0; - _rtw_memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats)); + memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats)); /* prepare for add_RATid */ supportRateNum = rtw_get_rateset_len((u8 *)&pcur_network->SupportedRates); @@ -671,7 +671,7 @@ void update_sta_info_apmode(struct adapter *padapter, struct sta_info *psta) /* todo: init other variables */ - _rtw_memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats)); + memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats)); spin_lock_bh(&psta->lock); psta->state |= _FW_LINKED; @@ -886,7 +886,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pbss_network->IELength = len; - _rtw_memset(ie, 0, MAX_IE_SZ); + memset(ie, 0, MAX_IE_SZ); memcpy(ie, pbuf, pbss_network->IELength); @@ -908,7 +908,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) /* SSID */ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_)); if (p && ie_len > 0) { - _rtw_memset(&pbss_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&pbss_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len); pbss_network->Ssid.SsidLength = ie_len; } @@ -922,7 +922,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pbss_network->Configuration.DSConfig = channel; - _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX); + memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX); /* get supported rates */ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_)); if (p != NULL) { @@ -1934,7 +1934,7 @@ void stop_ap_mode(struct adapter *padapter) pmlmeext->bstart_bss = false; /* reset and init security priv , this can refine with rtw_reset_securitypriv */ - _rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof(struct security_priv)); + memset((unsigned char *)&padapter->securitypriv, 0, sizeof(struct security_priv)); padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen; padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled; diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 238469544717..c7b7f15d82e6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -878,7 +878,7 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork) goto exit; } - _rtw_memset(psecnetwork, 0, t_len); + memset(psecnetwork, 0, t_len); memcpy(psecnetwork, &pnetwork->network, get_wlan_bssid_ex_sz(&pnetwork->network)); diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 672bfed3c428..d18bdda673d3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -304,7 +304,7 @@ static s32 iol_read_efuse(struct adapter *padapter, u8 txpktbuf_bndy, u16 offset u16 size = 512; usb_write8(padapter, REG_TDECTRL+1, txpktbuf_bndy); - _rtw_memset(physical_map, 0xFF, 512); + memset(physical_map, 0xFF, 512); usb_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT); status = iol_execute(padapter, CMD_READ_EFUSE_MAP); if (status == _SUCCESS) @@ -395,7 +395,7 @@ u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_e u8 badworden = 0x0F; u8 tmpdata[8]; - _rtw_memset((void *)tmpdata, 0xff, PGPKT_DATA_SIZE); + memset((void *)tmpdata, 0xff, PGPKT_DATA_SIZE); if (!(word_en&BIT0)) { tmpaddr = start_addr; @@ -501,8 +501,8 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data) if (offset > max_section) return false; - _rtw_memset((void *)data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); - _rtw_memset((void *)tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + memset((void *)data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + memset((void *)tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); /* Efuse has been pre-programmed dummy 5Bytes at the end of Efuse by CP. */ /* Skip dummy parts to prevent unexpected data read from Efuse. */ @@ -573,7 +573,7 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st u16 efuse_addr = *pAddr; u32 PgWriteSuccess = 0; - _rtw_memset((void *)originaldata, 0xff, 8); + memset((void *)originaldata, 0xff, 8); if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata)) { /* check if data exist */ @@ -868,7 +868,7 @@ hal_EfusePgCheckAvailableAddr( static void hal_EfuseConstructPGPkt(u8 offset, u8 word_en, u8 *pData, struct pgpkt *pTargetPkt) { - _rtw_memset((void *)pTargetPkt->data, 0xFF, sizeof(u8)*8); + memset((void *)pTargetPkt->data, 0xFF, sizeof(u8)*8); pTargetPkt->offset = offset; pTargetPkt->word_en = word_en; efuse_WordEnableDataRead(word_en, pData, pTargetPkt->data); @@ -1095,7 +1095,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) offset = (addr >> 3); word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); + memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); i = addr & 0x7; /* index of one package */ idx = 0; /* data index */ @@ -1151,7 +1151,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) offset++; i = 0; word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE); + memset(newdata, 0xFF, PGPKT_DATA_SIZE); } while (1); Efuse_PowerSwitch(padapter, true, false); @@ -1236,7 +1236,7 @@ void EFUSE_ShadowMapUpdate( EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); if (pEEPROM->bautoload_fail_flag) - _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen); + memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen); else Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data); } diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 0552019d1cf7..ae8895e75b19 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -334,7 +334,7 @@ exit: void rtw_set_supported_rate(u8 *SupportedRates, uint mode) { - _rtw_memset(SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX); + memset(SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX); switch (mode) { case WIRELESS_11B: @@ -957,7 +957,7 @@ enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len, u8 *pos = start; int unknown = 0; - _rtw_memset(elems, 0, sizeof(*elems)); + memset(elems, 0, sizeof(*elems)); while (left >= 2) { u8 id, elen; @@ -1333,9 +1333,9 @@ static uint rtw_p2p_attr_remove(u8 *ie, uint ielen_ori, u8 attr_id) u8 *next_attr = target_attr+target_attr_len; uint remain_len = ielen-(next_attr-ie); - _rtw_memset(target_attr, 0, target_attr_len); + memset(target_attr, 0, target_attr_len); memcpy(target_attr, next_attr, remain_len); - _rtw_memset(target_attr+remain_len, 0, target_attr_len); + memset(target_attr+remain_len, 0, target_attr_len); *(ie+1) -= target_attr_len; ielen -= target_attr_len; } else { @@ -1359,7 +1359,7 @@ void rtw_wlan_bssid_ex_remove_p2p_attr(struct wlan_bssid_ex *bss_ex, u8 attr_id) uint remain_len = bss_ex->IELength-(next_ie_ori-bss_ex->IEs); memcpy(next_ie, next_ie_ori, remain_len); - _rtw_memset(next_ie+remain_len, 0, p2p_ielen_ori-p2p_ielen); + memset(next_ie+remain_len, 0, p2p_ielen_ori-p2p_ielen); bss_ex->IELength -= p2p_ielen_ori-p2p_ielen; } } diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 3dea17f31ce9..7426d007959d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -126,7 +126,7 @@ u8 rtw_do_join(struct adapter *padapter) pibss = padapter->registrypriv.dev_network.MacAddress; - _rtw_memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid)); rtw_update_registrypriv_dev_network(padapter); @@ -605,7 +605,7 @@ u8 rtw_set_802_11_remove_wep(struct adapter *padapter, u32 keyindex) int res; struct security_priv *psecuritypriv = &(padapter->securitypriv); if (keyindex < 4) { - _rtw_memset(&psecuritypriv->dot11DefKey[keyindex], 0, 16); + memset(&psecuritypriv->dot11DefKey[keyindex], 0, 16); res = rtw_set_key(padapter, psecuritypriv, keyindex, 0); psecuritypriv->dot11DefKeylen[keyindex] = 0; if (res == _FAIL) @@ -869,9 +869,9 @@ u8 rtw_set_802_11_add_key(struct adapter *padapter, struct ndis_802_11_key *key) ret = _FAIL; goto exit; } - _rtw_memset(&padapter->securitypriv.dot118021XGrpKey[(u8)((key->KeyIndex) & 0x03)], 0, 16); - _rtw_memset(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); - _rtw_memset(&padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); + memset(&padapter->securitypriv.dot118021XGrpKey[(u8)((key->KeyIndex) & 0x03)], 0, 16); + memset(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); + memset(&padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); if ((key->KeyIndex & 0x10000000)) { memcpy(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial + 16, 8); @@ -931,7 +931,7 @@ u8 rtw_set_802_11_add_key(struct adapter *padapter, struct ndis_802_11_key *key) stainfo = rtw_get_stainfo(&padapter->stapriv, pbssid); if (stainfo != NULL) { - _rtw_memset(&stainfo->dot118021x_UncstKey, 0, 16);/* clear keybuffer */ + memset(&stainfo->dot118021x_UncstKey, 0, 16);/* clear keybuffer */ memcpy(&stainfo->dot118021x_UncstKey, key->KeyMaterial, 16); @@ -988,7 +988,7 @@ u8 rtw_set_802_11_remove_key(struct adapter *padapter, struct ndis_802_11_remove if (bgroup) { /* clear group key by index */ - _rtw_memset(&padapter->securitypriv.dot118021XGrpKey[keyIndex], 0, 16); + memset(&padapter->securitypriv.dot118021XGrpKey[keyIndex], 0, 16); /* \todo Send a H2C Command to Firmware for removing this Key in CAM Entry. */ } else { @@ -996,7 +996,7 @@ u8 rtw_set_802_11_remove_key(struct adapter *padapter, struct ndis_802_11_remove stainfo = rtw_get_stainfo(&padapter->stapriv, pbssid); if (stainfo) { /* clear key by BSSID */ - _rtw_memset(&stainfo->dot118021x_UncstKey, 0, 16); + memset(&stainfo->dot118021x_UncstKey, 0, 16); /* \todo Send a H2C Command to Firmware for disable this Key in CAM Entry. */ } else { diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index e73a784d5f17..1a39b670f6c3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -59,7 +59,7 @@ int _rtw_init_mlme_priv(struct adapter *padapter) set_scanned_network_val(pmlmepriv, 0); - _rtw_memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid)); pbuf = vzalloc(MAX_BSS_CNT * (sizeof(struct wlan_network))); @@ -754,7 +754,7 @@ void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf) RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("switching to adhoc master\n")); - _rtw_memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid)); rtw_update_registrypriv_dev_network(adapter); @@ -1000,11 +1000,11 @@ static struct sta_info *rtw_joinbss_update_stainfo(struct adapter *padapter, str padapter->securitypriv.bgrpkey_handshake = false; psta->ieee8021x_blocked = true; psta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm; - _rtw_memset((u8 *)&psta->dot118021x_UncstKey, 0, sizeof(union Keytype)); - _rtw_memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof(union Keytype)); - _rtw_memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof(union Keytype)); - _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof(union pn48)); - _rtw_memset((u8 *)&psta->dot11rxpn, 0, sizeof(union pn48)); + memset((u8 *)&psta->dot118021x_UncstKey, 0, sizeof(union Keytype)); + memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof(union Keytype)); + memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof(union Keytype)); + memset((u8 *)&psta->dot11txpn, 0, sizeof(union pn48)); + memset((u8 *)&psta->dot11rxpn, 0, sizeof(union pn48)); } /* * Commented by Albert 2012/07/21 @@ -1419,7 +1419,7 @@ void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf) memcpy(pdev_network, &tgt_network->network, get_wlan_bssid_ex_sz(&tgt_network->network)); - _rtw_memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid)); memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid)); rtw_update_registrypriv_dev_network(adapter); @@ -1681,7 +1681,7 @@ int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv) res = _FAIL; goto exit; } - _rtw_memset(psetauthparm, 0, sizeof(struct setauth_parm)); + memset(psetauthparm, 0, sizeof(struct setauth_parm)); psetauthparm->mode = (unsigned char)psecuritypriv->dot11AuthAlgrthm; pcmd->cmdcode = _SetAuth_CMD_; pcmd->parmbuf = (unsigned char *)psetauthparm; @@ -1716,7 +1716,7 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in goto err_free_cmd; } - _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm)); + memset(psetkeyparm, 0, sizeof(struct setkey_parm)); if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) { psetkeyparm->algorithm = (unsigned char)psecuritypriv->dot118021XGrpPrivacy; @@ -2050,7 +2050,7 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_ out_len = *pout_len; - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap)); + memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap)); ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH | IEEE80211_HT_CAP_SGI_20 | diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index b2a12512202a..01cc80af047f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -256,7 +256,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter) pmlmeinfo->enc_algo = _NO_PRIVACY_; pmlmeinfo->authModeToggle = 0; - _rtw_memset(pmlmeinfo->chg_txt, 0, 128); + memset(pmlmeinfo->chg_txt, 0, 128); pmlmeinfo->slotTime = SHORT_SLOT_TIME; pmlmeinfo->preamble_mode = PREAMBLE_AUTO; @@ -328,7 +328,7 @@ static u8 init_channel_set(struct adapter *padapter, u8 ChannelPlan, struct rt_c u8 b2_4GBand = false; u8 Index2G = 0; - _rtw_memset(channel_set, 0, sizeof(struct rt_channel_info) * MAX_CHANNEL_NUM); + memset(channel_set, 0, sizeof(struct rt_channel_info) * MAX_CHANNEL_NUM); if (ChannelPlan >= RT_CHANNEL_DOMAIN_MAX && ChannelPlan != RT_CHANNEL_DOMAIN_REALTEK_DEFINE) { DBG_88E("ChannelPlan ID %x error !!!!!\n", ChannelPlan); @@ -914,7 +914,7 @@ auth_fail: rtw_free_stainfo(padapter , pstat); pstat = &stat; - _rtw_memset((char *)pstat, '\0', sizeof(stat)); + memset((char *)pstat, '\0', sizeof(stat)); pstat->auth_seq = 2; memcpy(pstat->hwaddr, sa, 6); @@ -1146,7 +1146,7 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame pstat->wpa2_group_cipher = 0; pstat->wpa_pairwise_cipher = 0; pstat->wpa2_pairwise_cipher = 0; - _rtw_memset(pstat->wpa_ie, 0, sizeof(pstat->wpa_ie)); + memset(pstat->wpa_ie, 0, sizeof(pstat->wpa_ie)); if ((psecuritypriv->wpa_psk & BIT(1)) && elems.rsn_ie) { int group_cipher = 0, pairwise_cipher = 0; @@ -1314,7 +1314,7 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame } /* save HT capabilities in the sta object */ - _rtw_memset(&pstat->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap)); + memset(&pstat->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap)); if (elems.ht_capabilities && elems.ht_capabilities_len >= sizeof(struct rtw_ieee80211_ht_cap)) { pstat->flags |= WLAN_STA_HT; @@ -1861,7 +1861,7 @@ void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -2208,7 +2208,7 @@ static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -2241,7 +2241,7 @@ static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8 *)&be_tmp, &wps_devicepassword_id_len); wps_devicepassword_id = be16_to_cpu(be_tmp); - _rtw_memset(wpsie, 0x00, 255); + memset(wpsie, 0x00, 255); wpsielen = 0; /* WPS Section */ @@ -2570,7 +2570,7 @@ static void issue_p2p_GO_confirm(struct adapter *padapter, u8 *raddr, u8 result) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -2737,7 +2737,7 @@ void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -2990,7 +2990,7 @@ void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, u8 dialo pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -3185,7 +3185,7 @@ void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, u8 ussidle pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -3297,7 +3297,7 @@ void issue_probersp_p2p(struct adapter *padapter, unsigned char *da) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -3549,7 +3549,7 @@ static int _issue_probereq_p2p(struct adapter *padapter, u8 *da, int wait_ack) update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -3922,7 +3922,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) switch (frame_body[6]) { /* OUI Subtype */ case P2P_GO_NEGO_REQ: DBG_88E("[%s] Got GO Nego Req Frame\n", __func__); - _rtw_memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); + memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ)) rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); @@ -4023,7 +4023,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) if (invitation_flag & P2P_INVITATION_FLAGS_PERSISTENT) { /* Re-invoke the persistent group. */ - _rtw_memset(&group_id, 0x00, sizeof(struct group_id_info)); + memset(&group_id, 0x00, sizeof(struct group_id_info)); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen); if (attr_contentlen) { if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) { @@ -4071,7 +4071,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) } else { /* Received the invitation to join a P2P group. */ - _rtw_memset(&group_id, 0x00, sizeof(struct group_id_info)); + memset(&group_id, 0x00, sizeof(struct group_id_info)); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen); if (attr_contentlen) { if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) { @@ -4361,7 +4361,7 @@ void update_mgntframe_attrib(struct adapter *padapter, struct pkt_attrib *pattri { struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - _rtw_memset((u8 *)(pattrib), 0, sizeof(struct pkt_attrib)); + memset((u8 *)(pattrib), 0, sizeof(struct pkt_attrib)); pattrib->hdrlen = 24; pattrib->nr_frags = 1; @@ -4464,7 +4464,7 @@ static int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode) break; } case 2: - _rtw_memset(&ssid_ie[2], 0, ssid_len_ori); + memset(&ssid_ie[2], 0, ssid_len_ori); break; default: break; @@ -4506,7 +4506,7 @@ void issue_beacon(struct adapter *padapter, int timeout_ms) update_mgntframe_attrib(padapter, pattrib); pattrib->qsel = 0x10; - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -4732,7 +4732,7 @@ void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -4889,7 +4889,7 @@ static int _issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *ps update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5025,7 +5025,7 @@ void issue_auth(struct adapter *padapter, struct sta_info *psta, unsigned short pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5169,7 +5169,7 @@ void issue_asocrsp(struct adapter *padapter, unsigned short status, struct sta_i update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5308,7 +5308,7 @@ void issue_assocreq(struct adapter *padapter) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5639,7 +5639,7 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned update_mgntframe_attrib(padapter, pattrib); pattrib->retry_ctrl = false; - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5755,7 +5755,7 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16 pattrib->ack_policy = 0; pattrib->mdata = 0; - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5880,7 +5880,7 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s update_mgntframe_attrib(padapter, pattrib); pattrib->retry_ctrl = false; - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -5982,7 +5982,7 @@ void issue_action_spct_ch_switch (struct adapter *padapter, u8 *ra, u8 new_ch, u pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -6052,7 +6052,7 @@ void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned ch pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -6194,7 +6194,7 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -6228,7 +6228,7 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter) /* */ - _rtw_memset(ICS, 0, sizeof(ICS)); + memset(ICS, 0, sizeof(ICS)); if (pmlmepriv->num_sta_no_ht > 0) { int i; @@ -6557,7 +6557,7 @@ u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame, st if (len > MAX_IE_SZ) return _FAIL; - _rtw_memset(bssid, 0, sizeof(struct wlan_bssid_ex)); + memset(bssid, 0, sizeof(struct wlan_bssid_ex)); subtype = GetFrameSubType(pframe); @@ -6608,7 +6608,7 @@ u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame, st bssid->Ssid.SsidLength = 0; } - _rtw_memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX); + memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX); /* checking rate info... */ i = 0; @@ -6912,7 +6912,7 @@ static void process_80211d(struct adapter *padapter, struct wlan_bssid_ex *bssid p = ie; ie += len; - _rtw_memset(country, 0, 4); + memset(country, 0, 4); memcpy(country, p, 3); p += 3; RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, @@ -6937,7 +6937,7 @@ static void process_80211d(struct adapter *padapter, struct wlan_bssid_ex *bssid memcpy(chplan_sta, pmlmeext->channel_set, sizeof(chplan_sta)); - _rtw_memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set)); + memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set)); chplan_new = pmlmeext->channel_set; i = 0; @@ -8017,7 +8017,7 @@ static int rtw_scan_ch_decision(struct adapter *padapter, struct rtw_ieee80211_c struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; /* clear out first */ - _rtw_memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num); + memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num); /* acquire channels from in */ j = 0; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 43765f8ec054..25d2bc864fdd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -97,7 +97,7 @@ static void _init_mp_priv_(struct mp_priv *pmp_priv) { struct wlan_bssid_ex *pnetwork; - _rtw_memset(pmp_priv, 0, sizeof(struct mp_priv)); + memset(pmp_priv, 0, sizeof(struct mp_priv)); pmp_priv->mode = MP_OFF; @@ -138,12 +138,12 @@ static void mp_init_xmit_attrib(struct mp_tx *pmptx, struct adapter *padapter) /* init xmitframe attribute */ pattrib = &pmptx->attrib; - _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib)); + memset(pattrib, 0, sizeof(struct pkt_attrib)); desc = &pmptx->desc; - _rtw_memset(desc, 0, TXDESC_SIZE); + memset(desc, 0, TXDESC_SIZE); pattrib->ether_type = 0x8712; - _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN); + memset(pattrib->dst, 0xFF, ETH_ALEN); pattrib->ack_policy = 0; pattrib->hdrlen = WLAN_HDR_A3_LEN; pattrib->subtype = WIFI_DATA; @@ -362,7 +362,6 @@ s32 mp_start_test(struct adapter *padapter) mpt_ProStartTest(padapter); /* 3 1. initialize a new struct wlan_bssid_ex */ -/* _rtw_memset(&bssid, 0, sizeof(struct wlan_bssid_ex)); */ memcpy(bssid.MacAddress, pmppriv->network_macaddr, ETH_ALEN); bssid.Ssid.SsidLength = strlen("mp_pseudo_adhoc"); memcpy(bssid.Ssid.Ssid, (u8 *)"mp_pseudo_adhoc", bssid.Ssid.SsidLength); @@ -454,7 +453,7 @@ void mp_stop_test(struct adapter *padapter) pmlmepriv->fw_state = pmppriv->prev_fw_state; /* WIFI_STATION_STATE; */ /* flush the cur_network */ - _rtw_memset(tgt_network, 0, sizeof(struct wlan_network)); + memset(tgt_network, 0, sizeof(struct wlan_network)); _clr_fwstate_(pmlmepriv, WIFI_MP_STATE); @@ -697,7 +696,7 @@ void SetPacketTx(struct adapter *padapter) ptr = pmp_priv->tx.buf; desc = &(pmp_priv->tx.desc); - _rtw_memset(desc, 0, TXDESC_SIZE); + memset(desc, 0, TXDESC_SIZE); pkt_start = ptr; pkt_end = pkt_start + pkt_size; @@ -770,7 +769,7 @@ void SetPacketTx(struct adapter *padapter) break; } - _rtw_memset(ptr, payload, pkt_end - ptr); + memset(ptr, payload, pkt_end - ptr); /* 3 6. start thread */ pmp_priv->tx.PktTxThread = kthread_run(mp_xmit_packet_thread, pmp_priv, "RTW_MP_THREAD"); @@ -905,7 +904,7 @@ u32 mp_query_psd(struct adapter *pAdapter, u8 *data) return 0; } - _rtw_memset(data, '\0', sizeof(*data)); + memset(data, '\0', sizeof(*data)); i = psd_start; while (i < psd_stop) { diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index 0a15f8cf0d36..82c52ed16e86 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -153,7 +153,7 @@ static void issue_group_disc_req(struct wifidirect_info *pwdinfo, u8 *da) pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -212,7 +212,7 @@ static void issue_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 s pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -283,7 +283,7 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -362,7 +362,7 @@ static void issue_p2p_presence_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 pattrib = &pmgntframe->attrib; update_mgntframe_attrib(padapter, pattrib); - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); + memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -1197,7 +1197,7 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, attr_contentlen = 0; if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { if (attr_contentlen != ETH_ALEN) - _rtw_memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); + memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); } if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt)) { @@ -1300,7 +1300,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe attr_contentlen = 0; if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { if (attr_contentlen != ETH_ALEN) - _rtw_memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); + memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); } /* Try to get the peer's intent and tie breaker value. */ @@ -1392,7 +1392,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe /* Try to get the group id information if peer is GO */ attr_contentlen = 0; - _rtw_memset(groupid, 0x00, 38); + memset(groupid, 0x00, 38); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN); @@ -1456,7 +1456,7 @@ u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pfr /* Try to get the group id information */ attr_contentlen = 0; - _rtw_memset(groupid, 0x00, 38); + memset(groupid, 0x00, 38); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { DBG_88E("[%s] Ssid = %s, ssidlen = %zu\n", __func__, &groupid[ETH_ALEN], strlen(&groupid[ETH_ALEN])); memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); @@ -1499,7 +1499,7 @@ static void find_phase_handler(struct adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - _rtw_memset((unsigned char *)&ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset((unsigned char *)&ssid, 0, sizeof(struct ndis_802_11_ssid)); memcpy(ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN); ssid.SsidLength = P2P_WILDCARD_SSID_LEN; @@ -1930,44 +1930,44 @@ void init_wifidirect_info(struct adapter *padapter, enum P2P_ROLE role) memcpy(pwdinfo->p2p_wildcard_ssid, "DIRECT-", 7); - _rtw_memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); + memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); pwdinfo->device_name_len = 0; - _rtw_memset(&pwdinfo->invitereq_info, 0x00, sizeof(struct tx_invite_req_info)); + memset(&pwdinfo->invitereq_info, 0x00, sizeof(struct tx_invite_req_info)); pwdinfo->invitereq_info.token = 3; /* Token used for P2P invitation request frame. */ - _rtw_memset(&pwdinfo->inviteresp_info, 0x00, sizeof(struct tx_invite_resp_info)); + memset(&pwdinfo->inviteresp_info, 0x00, sizeof(struct tx_invite_resp_info)); pwdinfo->inviteresp_info.token = 0; pwdinfo->profileindex = 0; - _rtw_memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); + memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE); pwdinfo->listen_dwell = (u8) ((jiffies % 3) + 1); - _rtw_memset(&pwdinfo->tx_prov_disc_info, 0x00, sizeof(struct tx_provdisc_req_info)); + memset(&pwdinfo->tx_prov_disc_info, 0x00, sizeof(struct tx_provdisc_req_info)); pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_NONE; - _rtw_memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); + memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); pwdinfo->device_password_id_for_nego = WPS_DPID_PBC; pwdinfo->negotiation_dialog_token = 1; - _rtw_memset(pwdinfo->nego_ssid, 0x00, WLAN_SSID_MAXLEN); + memset(pwdinfo->nego_ssid, 0x00, WLAN_SSID_MAXLEN); pwdinfo->nego_ssidlen = 0; pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO; pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC | WPS_CONFIG_METHOD_KEYPAD; pwdinfo->channel_list_attr_len = 0; - _rtw_memset(pwdinfo->channel_list_attr, 0x00, 100); + memset(pwdinfo->channel_list_attr, 0x00, 100); - _rtw_memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4); - _rtw_memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3); - _rtw_memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); + memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4); + memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3); + memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); pwdinfo->wfd_tdls_enable = 0; - _rtw_memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); - _rtw_memset(pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN); + memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); + memset(pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN); pwdinfo->rx_invitereq_info.operation_ch[0] = 0; pwdinfo->rx_invitereq_info.operation_ch[1] = 0; /* Used to indicate the scan end in site survey function */ @@ -2015,7 +2015,7 @@ int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role) reset_ch_sitesurvey_timer_process2(padapter); rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE); rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE); - _rtw_memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info)); + memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info)); } rtw_hal_set_odm_var(padapter, HAL_ODM_P2P_STATE, NULL, false); diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index eaf43f2e7103..9e063d021ad7 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -46,7 +46,7 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS); void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv) { - _rtw_memset((u8 *)psta_recvpriv, 0, sizeof (struct sta_recv_priv)); + memset((u8 *)psta_recvpriv, 0, sizeof (struct sta_recv_priv)); spin_lock_init(&psta_recvpriv->lock); diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c b/drivers/staging/rtl8188eu/core/rtw_security.c index 05335959b543..1b64cb6c53d9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_security.c +++ b/drivers/staging/rtl8188eu/core/rtw_security.c @@ -1081,13 +1081,13 @@ static int aes_cipher(u8 *key, uint hdrlen, u8 *pframe, uint plen) frsubtype = frsubtype>>4; - _rtw_memset((void *)mic_iv, 0, 16); - _rtw_memset((void *)mic_header1, 0, 16); - _rtw_memset((void *)mic_header2, 0, 16); - _rtw_memset((void *)ctr_preload, 0, 16); - _rtw_memset((void *)chain_buffer, 0, 16); - _rtw_memset((void *)aes_out, 0, 16); - _rtw_memset((void *)padded_buffer, 0, 16); + memset((void *)mic_iv, 0, 16); + memset((void *)mic_header1, 0, 16); + memset((void *)mic_header2, 0, 16); + memset((void *)ctr_preload, 0, 16); + memset((void *)chain_buffer, 0, 16); + memset((void *)aes_out, 0, 16); + memset((void *)padded_buffer, 0, 16); if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen == WLAN_HDR_A3_QOS_LEN)) a4_exists = 0; @@ -1279,13 +1279,13 @@ static int aes_decipher(u8 *key, uint hdrlen, uint frsubtype = GetFrameSubType(pframe); frsubtype = frsubtype>>4; - _rtw_memset((void *)mic_iv, 0, 16); - _rtw_memset((void *)mic_header1, 0, 16); - _rtw_memset((void *)mic_header2, 0, 16); - _rtw_memset((void *)ctr_preload, 0, 16); - _rtw_memset((void *)chain_buffer, 0, 16); - _rtw_memset((void *)aes_out, 0, 16); - _rtw_memset((void *)padded_buffer, 0, 16); + memset((void *)mic_iv, 0, 16); + memset((void *)mic_header1, 0, 16); + memset((void *)mic_header2, 0, 16); + memset((void *)ctr_preload, 0, 16); + memset((void *)chain_buffer, 0, 16); + memset((void *)aes_out, 0, 16); + memset((void *)padded_buffer, 0, 16); /* start to decrypt the payload */ diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 2d0b60686a01..341a6d1e723c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -29,7 +29,7 @@ static void _rtw_init_stainfo(struct sta_info *psta) { - _rtw_memset((u8 *)psta, 0, sizeof (struct sta_info)); + memset((u8 *)psta, 0, sizeof (struct sta_info)); spin_lock_init(&psta->lock); _rtw_init_listhead(&psta->list); diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c index 6fb8caa94abb..a0b157687db2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c @@ -239,7 +239,7 @@ void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *bssrat { unsigned char supportedrates[NumRates]; - _rtw_memset(supportedrates, 0, NumRates); + memset(supportedrates, 0, NumRates); *bssrate_len = ratetbl2rateset(padapter, supportedrates); memcpy(pbssrate, supportedrates, *bssrate_len); } @@ -541,7 +541,7 @@ void flush_all_cam_entry(struct adapter *padapter) rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, NULL); - _rtw_memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info)); + memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info)); } int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE) @@ -1366,7 +1366,7 @@ void update_tx_basic_rate(struct adapter *padapter, u8 wirelessmode) if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) return; #endif /* CONFIG_88EU_P2P */ - _rtw_memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX); + memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX); if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) memcpy(supported_rates, rtw_basic_rate_cck, 4); diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 3156067a4019..1d830375b0c0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -38,7 +38,7 @@ static void _init_txservq(struct tx_servq *ptxservq) void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv) { - _rtw_memset((unsigned char *)psta_xmitpriv, 0, sizeof (struct sta_xmit_priv)); + memset((unsigned char *)psta_xmitpriv, 0, sizeof (struct sta_xmit_priv)); spin_lock_init(&psta_xmitpriv->lock); _init_txservq(&psta_xmitpriv->be_q); _init_txservq(&psta_xmitpriv->bk_q); @@ -800,7 +800,7 @@ s32 rtw_make_wlanhdr (struct adapter *padapter , u8 *hdr, struct pkt_attrib *pat } } - _rtw_memset(hdr, 0, WLANHDR_OFFSET); + memset(hdr, 0, WLANHDR_OFFSET); SetFrameSubType(fctrl, pattrib->subtype); @@ -1390,7 +1390,7 @@ struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)/* _queue *pf pxframe->buf_addr = NULL; pxframe->pxmitbuf = NULL; - _rtw_memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib)); + memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib)); /* pxframe->attrib.psta = NULL; */ pxframe->frame_tag = DATA_FRAMETAG; diff --git a/drivers/staging/rtl8188eu/hal/hal_com.c b/drivers/staging/rtl8188eu/hal/hal_com.c index 429de6988606..baefb467be22 100644 --- a/drivers/staging/rtl8188eu/hal/hal_com.c +++ b/drivers/staging/rtl8188eu/hal/hal_com.c @@ -350,7 +350,7 @@ s32 c2h_evt_read(struct adapter *adapter, u8 *buf) c2h_evt = (struct c2h_evt_hdr *)buf; - _rtw_memset(c2h_evt, 0, 16); + memset(c2h_evt, 0, 16); *buf = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL); *(buf+1) = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index fe8ba7e3ba5b..2ab1c8055384 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -153,7 +153,7 @@ u8 rtl8188e_set_raid_cmd(struct adapter *adapt, u32 mask) if (haldata->fw_ractrl) { __le32 lmask; - _rtw_memset(buf, 0, 3); + memset(buf, 0, 3); lmask = cpu_to_le32(mask); memcpy(buf, &lmask, 3); @@ -700,7 +700,7 @@ void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state) switch (p2p_ps_state) { case P2P_PS_DISABLE: DBG_88E("P2P_PS_DISABLE\n"); - _rtw_memset(p2p_ps_offload, 0, 1); + memset(p2p_ps_offload, 0, 1); break; case P2P_PS_ENABLE: DBG_88E("P2P_PS_ENABLE\n"); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c index 917c60e153ee..dab4c337a863 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_dm.c @@ -53,7 +53,7 @@ static void Init_ODM_ComInfo_88E(struct adapter *Adapter) u8 cut_ver, fab_ver; /* Init Value */ - _rtw_memset(dm_odm, 0, sizeof(*dm_odm)); + memset(dm_odm, 0, sizeof(*dm_odm)); dm_odm->Adapter = Adapter; @@ -198,7 +198,7 @@ void rtl8188e_init_dm_priv(struct adapter *Adapter) struct dm_priv *pdmpriv = &hal_data->dmpriv; struct odm_dm_struct *podmpriv = &hal_data->odmpriv; - _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv)); + memset(pdmpriv, 0, sizeof(struct dm_priv)); Init_ODM_ComInfo_88E(Adapter); ODM_InitDebugSetting(podmpriv); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 0094d21bdf6d..1abf97461d0f 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -741,7 +741,7 @@ static void Hal_ReadPowerValueFromPROM_8188E(struct txpowerinfo24g *pwrInfo24G, { u32 rfPath, eeAddr = EEPROM_TX_PWR_INX_88E, group, TxCount = 0; - _rtw_memset(pwrInfo24G, 0, sizeof(struct txpowerinfo24g)); + memset(pwrInfo24G, 0, sizeof(struct txpowerinfo24g)); if (AutoLoadFail) { for (rfPath = 0; rfPath < MAX_RF_PATH; rfPath++) { diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c index 43eb960e4e0b..53cf3baf46e0 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c @@ -86,7 +86,7 @@ void update_recvframe_attrib_88e(struct recv_frame *precvframe, report.rxdw5 = prxstat->rxdw5; pattrib = &precvframe->attrib; - _rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); + memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);/* u8)prxreport->crc32; */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c index 32e59c5fef6c..ad966e59b8bd 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c @@ -47,7 +47,7 @@ int rtl8188eu_init_recv_priv(struct adapter *padapter) RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("alloc recv_buf fail!\n")); goto exit; } - _rtw_memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF * sizeof(struct recv_buf) + 4); + memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF * sizeof(struct recv_buf) + 4); precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(precvpriv->pallocated_recv_buf), 4); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 34bc6605ab7b..5e4be7e9b9e6 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -68,7 +68,7 @@ void rtl8188e_fill_fake_txdesc(struct adapter *adapt, u8 *desc, u32 BufferLen, u /* Clear all status */ ptxdesc = (struct tx_desc *)desc; - _rtw_memset(desc, 0, TXDESC_SIZE); + memset(desc, 0, TXDESC_SIZE); /* offset 0 */ ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); /* own, bFirstSeg, bLastSeg; */ @@ -192,7 +192,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bag } } - _rtw_memset(ptxdesc, 0, sizeof(struct tx_desc)); + memset(ptxdesc, 0, sizeof(struct tx_desc)); /* 4 offset 0 */ ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 3859acd358a6..2cd9e2620a01 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -199,7 +199,6 @@ void *rtw_malloc2d(int h, int w, int size); void rtw_mfree2d(void *pbuf, int h, int w, int size); void _rtw_memcpy(void *dec, void *sour, u32 sz); -void _rtw_memset(void *pbuf, int c, u32 sz); void _rtw_init_listhead(struct list_head *list); u32 rtw_is_list_empty(struct list_head *phead); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 9b5c54913a8d..8ddeaac29cbc 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -147,7 +147,7 @@ void indicate_wx_scan_complete_event(struct adapter *padapter) { union iwreq_data wrqu; - _rtw_memset(&wrqu, 0, sizeof(union iwreq_data)); + memset(&wrqu, 0, sizeof(union iwreq_data)); wireless_send_event(padapter->pnetdev, SIOCGIWSCAN, &wrqu, NULL); } @@ -156,7 +156,7 @@ void rtw_indicate_wx_assoc_event(struct adapter *padapter) union iwreq_data wrqu; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - _rtw_memset(&wrqu, 0, sizeof(union iwreq_data)); + memset(&wrqu, 0, sizeof(union iwreq_data)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; @@ -170,10 +170,10 @@ void rtw_indicate_wx_disassoc_event(struct adapter *padapter) { union iwreq_data wrqu; - _rtw_memset(&wrqu, 0, sizeof(union iwreq_data)); + memset(&wrqu, 0, sizeof(union iwreq_data)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; - _rtw_memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); + memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); DBG_88E_LEVEL(_drv_always_, "indicate disassoc\n"); wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL); @@ -356,33 +356,33 @@ static char *translate_scan(struct adapter *padapter, if (wpa_len > 0) { p = buf; - _rtw_memset(buf, 0, MAX_WPA_IE_LEN); + memset(buf, 0, MAX_WPA_IE_LEN); p += sprintf(p, "wpa_ie="); for (i = 0; i < wpa_len; i++) p += sprintf(p, "%02x", wpa_ie[i]); - _rtw_memset(&iwe, 0, sizeof(iwe)); + memset(&iwe, 0, sizeof(iwe)); iwe.cmd = IWEVCUSTOM; iwe.u.data.length = strlen(buf); start = iwe_stream_add_point(info, start, stop, &iwe, buf); - _rtw_memset(&iwe, 0, sizeof(iwe)); + memset(&iwe, 0, sizeof(iwe)); iwe.cmd = IWEVGENIE; iwe.u.data.length = wpa_len; start = iwe_stream_add_point(info, start, stop, &iwe, wpa_ie); } if (rsn_len > 0) { p = buf; - _rtw_memset(buf, 0, MAX_WPA_IE_LEN); + memset(buf, 0, MAX_WPA_IE_LEN); p += sprintf(p, "rsn_ie="); for (i = 0; i < rsn_len; i++) p += sprintf(p, "%02x", rsn_ie[i]); - _rtw_memset(&iwe, 0, sizeof(iwe)); + memset(&iwe, 0, sizeof(iwe)); iwe.cmd = IWEVCUSTOM; iwe.u.data.length = strlen(buf); start = iwe_stream_add_point(info, start, stop, &iwe, buf); - _rtw_memset(&iwe, 0, sizeof(iwe)); + memset(&iwe, 0, sizeof(iwe)); iwe.cmd = IWEVGENIE; iwe.u.data.length = rsn_len; start = iwe_stream_add_point(info, start, stop, &iwe, rsn_ie); @@ -518,7 +518,7 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, (" wpa_set_encryption: pwep allocate fail !!!\n")); goto exit; } - _rtw_memset(pwep, 0, wep_total_len); + memset(pwep, 0, wep_total_len); pwep->KeyLength = wep_key_len; pwep->Length = wep_total_len; if (wep_key_len == 13) { @@ -953,14 +953,14 @@ static int rtw_wx_set_pmkid(struct net_device *dev, for (j = 0; j < NUM_PMKID_CACHE; j++) { if (!memcmp(psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN)) { /* BSSID is matched, the same AP => Remove this PMKID information and reset it. */ - _rtw_memset(psecuritypriv->PMKIDList[j].Bssid, 0x00, ETH_ALEN); + memset(psecuritypriv->PMKIDList[j].Bssid, 0x00, ETH_ALEN); psecuritypriv->PMKIDList[j].bUsed = false; break; } } } else if (pPMK->cmd == IW_PMKSA_FLUSH) { DBG_88E("[rtw_wx_set_pmkid] IW_PMKSA_FLUSH!\n"); - _rtw_memset(&psecuritypriv->PMKIDList[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); + memset(&psecuritypriv->PMKIDList[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); psecuritypriv->PMKIDIndex = 0; ret = true; } @@ -991,7 +991,7 @@ static int rtw_wx_get_range(struct net_device *dev, RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_wx_get_range. cmd_code =%x\n", info->cmd)); wrqu->data.length = sizeof(*range); - _rtw_memset(range, 0, sizeof(*range)); + memset(range, 0, sizeof(*range)); /* Let's try to keep this struct in the same order as in * linux/include/wireless.h @@ -1157,7 +1157,7 @@ static int rtw_wx_get_wap(struct net_device *dev, wrqu->ap_addr.sa_family = ARPHRD_ETHER; - _rtw_memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); + memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_wx_get_wap\n")); @@ -1166,7 +1166,7 @@ static int rtw_wx_get_wap(struct net_device *dev, ((check_fwstate(pmlmepriv, WIFI_AP_STATE)) == true)) memcpy(wrqu->ap_addr.sa_data, pcur_bss->MacAddress, ETH_ALEN); else - _rtw_memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); + memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); return 0; } @@ -1269,7 +1269,7 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a, } #endif /* CONFIG_88EU_P2P */ - _rtw_memset(ssid, 0, sizeof(struct ndis_802_11_ssid)*RTW_SSID_SCAN_AMOUNT); + memset(ssid, 0, sizeof(struct ndis_802_11_ssid)*RTW_SSID_SCAN_AMOUNT); if (wrqu->data.length == sizeof(struct iw_scan_req)) { struct iw_scan_req *req = (struct iw_scan_req *)extra; @@ -1480,7 +1480,7 @@ static int rtw_wx_set_essid(struct net_device *dev, if (wrqu->essid.length != 33) DBG_88E("ssid =%s, len =%d\n", extra, wrqu->essid.length); - _rtw_memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid)); + memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid)); ndis_ssid.SsidLength = len; memcpy(ndis_ssid.Ssid, extra, len); src_ssid = ndis_ssid.Ssid; @@ -1785,7 +1785,7 @@ static int rtw_wx_set_enc(struct net_device *dev, struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; DBG_88E("+rtw_wx_set_enc, flags = 0x%x\n", erq->flags); - _rtw_memset(&wep, 0, sizeof(struct ndis_802_11_wep)); + memset(&wep, 0, sizeof(struct ndis_802_11_wep)); key = erq->flags & IW_ENCODE_INDEX; @@ -2074,10 +2074,10 @@ static int rtw_wx_set_enc_ext(struct net_device *dev, if (param == NULL) return -1; - _rtw_memset(param, 0, param_len); + memset(param, 0, param_len); param->cmd = IEEE_CMD_SET_ENCRYPTION; - _rtw_memset(param->sta_addr, 0xff, ETH_ALEN); + memset(param->sta_addr, 0xff, ETH_ALEN); switch (pext->alg) { case IW_ENCODE_ALG_NONE: @@ -2847,7 +2847,7 @@ static int rtw_p2p_profilefound(struct net_device *dev, if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { if (extra[0] == '0') { /* Remove all the profile information of wifidirect_info structure. */ - _rtw_memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); + memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); pwdinfo->profileindex = 0; } else { if (pwdinfo->profileindex >= P2P_MAX_PERSISTENT_GROUP_NUM) { @@ -2879,7 +2879,7 @@ static int rtw_p2p_setDN(struct net_device *dev, struct wifidirect_info *pwdinfo = &(padapter->wdinfo); DBG_88E("[%s] %s %d\n", __func__, extra, wrqu->data.length - 1); - _rtw_memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); + memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); memcpy(pwdinfo->device_name, extra, wrqu->data.length - 1); pwdinfo->device_name_len = wrqu->data.length - 1; @@ -3152,7 +3152,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev, /* The P2P Device ID attribute is included in the Beacon frame. */ /* The P2P Device Info attribute is included in the probe response frame. */ - _rtw_memset(attr_content, 0x00, 100); + memset(attr_content, 0x00, 100); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { /* Handle the P2P Device ID attribute of Beacon first */ blnMatch = 1; @@ -3468,8 +3468,8 @@ static int rtw_p2p_connect(struct net_device *dev, spin_unlock_bh(&pmlmepriv->scanned_queue.lock); if (uintPeerChannel) { - _rtw_memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); - _rtw_memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); + memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); + memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); pwdinfo->nego_req_info.peer_channel_num[0] = uintPeerChannel; memcpy(pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN); @@ -3531,11 +3531,11 @@ static int rtw_p2p_invite_req(struct net_device *dev, } else { /* Reset the content of struct tx_invite_req_info */ pinvite_req_info->benable = false; - _rtw_memset(pinvite_req_info->go_bssid, 0x00, ETH_ALEN); - _rtw_memset(pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN); + memset(pinvite_req_info->go_bssid, 0x00, ETH_ALEN); + memset(pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN); pinvite_req_info->ssidlen = 0x00; pinvite_req_info->operating_ch = pwdinfo->operating_channel; - _rtw_memset(pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN); + memset(pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN); pinvite_req_info->token = 3; } @@ -3668,9 +3668,9 @@ static int rtw_p2p_prov_disc(struct net_device *dev, return ret; } else { /* Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request. */ - _rtw_memset(pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN); - _rtw_memset(pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN); - _rtw_memset(&pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof(struct ndis_802_11_ssid)); + memset(pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN); + memset(pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN); + memset(&pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof(struct ndis_802_11_ssid)); pwdinfo->tx_prov_disc_info.peer_channel_num[0] = 0; pwdinfo->tx_prov_disc_info.peer_channel_num[1] = 0; pwdinfo->tx_prov_disc_info.benable = false; @@ -4810,7 +4810,7 @@ static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) goto exit; } - _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm)); + memset(psetkeyparm, 0, sizeof(struct setkey_parm)); psetkeyparm->keyid = (u8)keyid; @@ -4925,7 +4925,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param, goto exit; } - _rtw_memset(pwep, 0, wep_total_len); + memset(pwep, 0, wep_total_len); pwep->KeyLength = wep_key_len; pwep->Length = wep_total_len; @@ -6377,9 +6377,9 @@ static int rtw_mp_read_reg(struct net_device *dev, kfree(input); return -EFAULT; } - _rtw_memset(data, 0, 20); - _rtw_memset(tmp, 0, 20); - _rtw_memset(extra, 0, wrqu->length); + memset(data, 0, 20); + memset(tmp, 0, 20); + memset(extra, 0, wrqu->length); pch = input; pnext = strpbrk(pch, ",.-"); @@ -6505,7 +6505,7 @@ static int rtw_mp_read_reg(struct net_device *dev, if (data > 0xFFFFF) return -EINVAL; - _rtw_memset(extra, 0, wrqu->length); + memset(extra, 0, wrqu->length); write_rfreg(padapter, path, addr, data); @@ -6550,7 +6550,7 @@ static int rtw_mp_read_rf(struct net_device *dev, if (addr > 0xFF) return -EINVAL; - _rtw_memset(extra, 0, wrqu->length); + memset(extra, 0, wrqu->length); sprintf(data, "%08x", read_rfreg(padapter, path, addr)); /* add read data format blank */ @@ -6789,7 +6789,7 @@ static int rtw_mp_ant_rx(struct net_device *dev, kfree(input); return -EFAULT; } - _rtw_memset(extra, 0, wrqu->length); + memset(extra, 0, wrqu->length); sprintf(extra, "switch Rx antenna to %s", input); @@ -6842,7 +6842,7 @@ static int rtw_mp_ctx(struct net_device *dev, if (rv != 2) return -EINVAL; - _rtw_memset(extra, '\0', sizeof(*extra)); + memset(extra, '\0', sizeof(*extra)); if (stop == 0) { bStartTest = 0; /* To set Stop */ @@ -6882,7 +6882,7 @@ static int rtw_mp_ctx(struct net_device *dev, pmp_priv->tx.payload = 2; pattrib = &pmp_priv->tx.attrib; pattrib->pktlen = 1500; - _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN); + memset(pattrib->dst, 0xFF, ETH_ALEN); SetPacketTx(padapter); } else { return -EFAULT; @@ -7010,7 +7010,7 @@ static int rtw_mp_trx_query(struct net_device *dev, rxok = padapter->mppriv.rx_pktcount; rxfail = padapter->mppriv.rx_crcerrpktcount; - _rtw_memset(extra, '\0', 128); + memset(extra, '\0', 128); sprintf(extra, "Tx OK:%d, Tx Fail:%d, Rx OK:%d, CRC error:%d ", txok, txfail, rxok, rxfail); @@ -7035,7 +7035,7 @@ static int rtw_mp_pwrtrk(struct net_device *dev, ret = -EFAULT; goto exit; } - _rtw_memset(extra, 0, wrqu->length); + memset(extra, 0, wrqu->length); enable = 1; if (wrqu->length > 1) {/* not empty string */ diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 0624378efd6f..737677cf409e 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -85,12 +85,12 @@ void rtw_reset_securitypriv(struct adapter *adapter) /* We have to backup the PMK information for WiFi PMK Caching test item. */ /* Backup the btkip_countermeasure information. */ /* When the countermeasure is trigger, the driver have to disconnect with AP for 60 seconds. */ - _rtw_memset(&backup_pmkid[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); + memset(&backup_pmkid[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); memcpy(&backup_pmkid[0], &adapter->securitypriv.PMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); backup_index = adapter->securitypriv.PMKIDIndex; backup_counter = adapter->securitypriv.btkip_countermeasure; backup_time = adapter->securitypriv.btkip_countermeasure_time; - _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv)); + memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv)); /* Restore the PMK information to securitypriv structure for the following connection. */ memcpy(&adapter->securitypriv.PMKIDList[0], @@ -137,7 +137,7 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) buff = rtw_malloc(IW_CUSTOM_MAX); if (!buff) return; - _rtw_memset(buff, 0, IW_CUSTOM_MAX); + memset(buff, 0, IW_CUSTOM_MAX); p = buff; p += sprintf(p, "ASSOCINFO(ReqIEs ="); len = sec_ie[1]+2; @@ -145,7 +145,7 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) for (i = 0; i < len; i++) p += sprintf(p, "%02x", sec_ie[i]); p += sprintf(p, ")"); - _rtw_memset(&wrqu, 0, sizeof(wrqu)); + memset(&wrqu, 0, sizeof(wrqu)); wrqu.data.length = p-buff; wrqu.data.length = (wrqu.data.length < IW_CUSTOM_MAX) ? wrqu.data.length : IW_CUSTOM_MAX; diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 9b76e0844f9d..02144a4f36f3 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -94,11 +94,6 @@ void rtw_mfree2d(void *pbuf, int h, int w, int size) kfree(pbuf); } -void _rtw_memset(void *pbuf, int c, u32 sz) -{ - memset(pbuf, c, sz); -} - void _rtw_init_listhead(struct list_head *list) { INIT_LIST_HEAD(list); diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index 632ed8260625..f8ac996cc8b6 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -73,7 +73,7 @@ void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup) } } - _rtw_memset(&ev, 0x00, sizeof(ev)); + memset(&ev, 0x00, sizeof(ev)); if (bgroup) ev.flags |= IW_MICFAILURE_GROUP; else @@ -81,7 +81,7 @@ void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup) ev.src_addr.sa_family = ARPHRD_ETHER; memcpy(ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[0], ETH_ALEN); - _rtw_memset(&wrqu, 0x00, sizeof(wrqu)); + memset(&wrqu, 0x00, sizeof(wrqu)); wrqu.data.length = sizeof(ev); wireless_send_event(padapter->pnetdev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev); diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 9e8b8c1cbd46..db8aab398a64 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -261,7 +261,7 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i } while (++vendorreq_times <= MAX_USBCTRL_VENDORREQ_TIMES) { - _rtw_memset(pIo_buf, 0, len); + memset(pIo_buf, 0, len); if (requesttype == 0x01) { pipe = usb_rcvctrlpipe(udev, 0);/* read_in */ -- cgit From b49f224d0dd83f3fe2830f4115e3a2d769fc880b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:29 +0530 Subject: staging: rtl8188eu: Remove rtw_mfree2d(), wrapper for kfree() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 3 files changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index d18bdda673d3..baaf27611392 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -213,7 +213,7 @@ exit: kfree(efuseTbl); if (eFuseWord) - rtw_mfree2d((void *)eFuseWord, EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16)); + kfree(eFuseWord); } static void efuse_read_phymap_from_txpktbuf( diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 2cd9e2620a01..e5bfdd71f015 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -196,7 +196,6 @@ void _rtw_mfree(u8 *pbuf, u32 sz); #define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz)) void *rtw_malloc2d(int h, int w, int size); -void rtw_mfree2d(void *pbuf, int h, int w, int size); void _rtw_memcpy(void *dec, void *sour, u32 sz); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 02144a4f36f3..92203c3359f6 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -89,11 +89,6 @@ void *rtw_malloc2d(int h, int w, int size) return a; } -void rtw_mfree2d(void *pbuf, int h, int w, int size) -{ - kfree(pbuf); -} - void _rtw_init_listhead(struct list_head *list) { INIT_LIST_HEAD(list); -- cgit From 03a6f3e6a62d7ee4db3980d15304df4ee2c11981 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:30 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_list_insert_head() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index e5bfdd71f015..05cc35289201 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -201,7 +201,6 @@ void _rtw_memcpy(void *dec, void *sour, u32 sz); void _rtw_init_listhead(struct list_head *list); u32 rtw_is_list_empty(struct list_head *phead); -void rtw_list_insert_head(struct list_head *plist, struct list_head *phead); void rtw_list_insert_tail(struct list_head *plist, struct list_head *phead); void rtw_list_delete(struct list_head *plist); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 92203c3359f6..8067f9c642f0 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -107,11 +107,6 @@ u32 rtw_is_list_empty(struct list_head *phead) return false; } -void rtw_list_insert_head(struct list_head *plist, struct list_head *phead) -{ - list_add(plist, phead); -} - void rtw_list_insert_tail(struct list_head *plist, struct list_head *phead) { list_add_tail(plist, phead); -- cgit From ae6787ad4ae8871b5bd7ede35aea86249e0fc2f3 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:31 +0530 Subject: staging: rtl8188eu: Remove rtw_list_insert_tail(), wrapper for list_add_tail() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 2 +- drivers/staging/rtl8188eu/core/rtw_cmd.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_mlme.c | 12 ++++++------ drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/core/rtw_recv.c | 12 ++++++------ drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 6 +++--- drivers/staging/rtl8188eu/core/rtw_xmit.c | 20 ++++++++++---------- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 10 files changed, 31 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index eb96c5628d81..a51ae26caf51 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -1176,7 +1176,7 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr) paclnode->valid = true; - rtw_list_insert_tail(&paclnode->list, get_list_head(pacl_node_q)); + list_add_tail(&paclnode->list, get_list_head(pacl_node_q)); pacl_list->num++; diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index c7b7f15d82e6..0bcd8a83f4a5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -138,7 +138,7 @@ int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj) spin_lock_irqsave(&queue->lock, irqL); - rtw_list_insert_tail(&obj->list, &queue->queue); + list_add_tail(&obj->list, &queue->queue); spin_unlock_irqrestore(&queue->lock, irqL); @@ -2124,7 +2124,7 @@ void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd) } pwlan->last_scanned = jiffies; } else { - rtw_list_insert_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); + list_add_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); } pnetwork->Length = get_wlan_bssid_ex_sz(pnetwork); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 1a39b670f6c3..e44e76e63df4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -74,7 +74,7 @@ int _rtw_init_mlme_priv(struct adapter *padapter) for (i = 0; i < MAX_BSS_CNT; i++) { _rtw_init_listhead(&(pnetwork->list)); - rtw_list_insert_tail(&(pnetwork->list), &(pmlmepriv->free_bss_pool.queue)); + list_add_tail(&(pnetwork->list), &(pmlmepriv->free_bss_pool.queue)); pnetwork++; } @@ -135,7 +135,7 @@ int _rtw_enqueue_network(struct __queue *queue, struct wlan_network *pnetwork) spin_lock_bh(&queue->lock); - rtw_list_insert_tail(&pnetwork->list, &queue->queue); + list_add_tail(&pnetwork->list, &queue->queue); spin_unlock_bh(&queue->lock); @@ -217,7 +217,7 @@ void _rtw_free_network(struct mlme_priv *pmlmepriv , struct wlan_network *pnetwo } spin_lock_bh(&free_queue->lock); rtw_list_delete(&(pnetwork->list)); - rtw_list_insert_tail(&(pnetwork->list), &(free_queue->queue)); + list_add_tail(&(pnetwork->list), &(free_queue->queue)); pmlmepriv->num_of_scanned--; spin_unlock_bh(&free_queue->lock); } @@ -231,7 +231,7 @@ void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network * if (pnetwork->fixed) return; rtw_list_delete(&(pnetwork->list)); - rtw_list_insert_tail(&(pnetwork->list), get_list_head(free_queue)); + list_add_tail(&(pnetwork->list), get_list_head(free_queue)); pmlmepriv->num_of_scanned--; } @@ -575,7 +575,7 @@ void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *t /* bss info not receiving from the right channel */ if (pnetwork->network.PhyInfo.SignalQuality == 101) pnetwork->network.PhyInfo.SignalQuality = 0; - rtw_list_insert_tail(&(pnetwork->list), &(queue->queue)); + list_add_tail(&(pnetwork->list), &(queue->queue)); } } else { /* we have an entry and we are going to update it. But this entry may @@ -830,7 +830,7 @@ static void free_scanqueue(struct mlme_priv *pmlmepriv) while (plist != phead) { ptemp = plist->next; rtw_list_delete(plist); - rtw_list_insert_tail(plist, &free_queue->queue); + list_add_tail(plist, &free_queue->queue); plist = ptemp; pmlmepriv->num_of_scanned--; } diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 01cc80af047f..57e05aebe1df 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -830,7 +830,7 @@ unsigned int OnAuth(struct adapter *padapter, struct recv_frame *precv_frame) spin_lock_bh(&pstapriv->auth_list_lock); if (rtw_is_list_empty(&pstat->auth_list)) { - rtw_list_insert_tail(&pstat->auth_list, &pstapriv->auth_list); + list_add_tail(&pstat->auth_list, &pstapriv->auth_list); pstapriv->auth_list_cnt++; } spin_unlock_bh(&pstapriv->auth_list_lock); @@ -1416,7 +1416,7 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame spin_lock_bh(&pstapriv->asoc_list_lock); if (rtw_is_list_empty(&pstat->asoc_list)) { pstat->expire_to = pstapriv->expire_to; - rtw_list_insert_tail(&pstat->asoc_list, &pstapriv->asoc_list); + list_add_tail(&pstat->asoc_list, &pstapriv->asoc_list); pstapriv->asoc_list_cnt++; } spin_unlock_bh(&pstapriv->asoc_list_lock); diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 25d2bc864fdd..af1be19f4c3e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -983,7 +983,7 @@ void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv) goto exit; } - rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue)); + list_add_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue)); pxmitbuf++; } diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 9e063d021ad7..9b969c574d44 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -84,7 +84,7 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter) for (i = 0; i < NR_RECVFRAME; i++) { _rtw_init_listhead(&(precvframe->list)); - rtw_list_insert_tail(&(precvframe->list), + list_add_tail(&(precvframe->list), &(precvpriv->free_recv_queue.queue)); res = rtw_os_recv_resource_alloc(padapter, precvframe); @@ -195,7 +195,7 @@ int rtw_free_recvframe(struct recv_frame *precvframe, precvframe->len = 0; - rtw_list_insert_tail(&(precvframe->list), get_list_head(pfree_recv_queue)); + list_add_tail(&(precvframe->list), get_list_head(pfree_recv_queue)); if (padapter != NULL) { if (pfree_recv_queue == &precvpriv->free_recv_queue) @@ -215,7 +215,7 @@ int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue) rtw_list_delete(&(precvframe->list)); - rtw_list_insert_tail(&(precvframe->list), get_list_head(queue)); + list_add_tail(&(precvframe->list), get_list_head(queue)); if (padapter != NULL) { if (queue == &precvpriv->free_recv_queue) @@ -1572,7 +1572,7 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, /* Then enqueue the 0~(n-1) fragment into the defrag_q */ phead = get_list_head(pdefrag_q); - rtw_list_insert_tail(&pfhdr->list, phead); + list_add_tail(&pfhdr->list, phead); RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("Enqueuq: ismfrag=%d, fragnum=%d\n", ismfrag, fragnum)); @@ -1590,7 +1590,7 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, /* enqueue the last fragment */ if (pdefrag_q != NULL) { phead = get_list_head(pdefrag_q); - rtw_list_insert_tail(&pfhdr->list, phead); + list_add_tail(&pfhdr->list, phead); /* call recvframe_defrag to defrag */ RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("defrag: ismfrag=%d, fragnum=%d\n", ismfrag, fragnum)); @@ -1791,7 +1791,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, rtw_list_delete(&(prframe->list)); - rtw_list_insert_tail(&(prframe->list), plist); + list_add_tail(&(prframe->list), plist); return true; } diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 341a6d1e723c..4d3dec4d46bc 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -100,7 +100,7 @@ u32 _rtw_init_sta_priv(struct sta_priv *pstapriv) _rtw_init_listhead(&(pstapriv->sta_hash[i])); - rtw_list_insert_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue)); + list_add_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue)); psta++; } @@ -243,7 +243,7 @@ struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) spin_lock_bh(&(pstapriv->sta_hash_lock)); - rtw_list_insert_tail(&psta->hash_list, phash_list); + list_add_tail(&psta->hash_list, phash_list); pstapriv->asoc_sta_count++; @@ -413,7 +413,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) #endif /* CONFIG_88EU_AP_MODE */ spin_lock_bh(&(pfree_sta_queue->lock)); - rtw_list_insert_tail(&psta->list, get_list_head(pfree_sta_queue)); + list_add_tail(&psta->list, get_list_head(pfree_sta_queue)); spin_unlock_bh(&pfree_sta_queue->lock); exit: diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 1d830375b0c0..0aa2780a41fa 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -110,7 +110,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) pxframe->buf_addr = NULL; pxframe->pxmitbuf = NULL; - rtw_list_insert_tail(&(pxframe->list), &(pxmitpriv->free_xmit_queue.queue)); + list_add_tail(&(pxframe->list), &(pxmitpriv->free_xmit_queue.queue)); pxframe++; } @@ -156,7 +156,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) pxmitbuf->flags = XMIT_VO_QUEUE; - rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmitbuf_queue.queue)); + list_add_tail(&pxmitbuf->list, &(pxmitpriv->free_xmitbuf_queue.queue)); pxmitbuf++; } @@ -190,7 +190,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) goto exit; } - rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue)); + list_add_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue)); pxmitbuf++; } @@ -1265,7 +1265,7 @@ s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) rtw_list_delete(&pxmitbuf->list); - rtw_list_insert_tail(&(pxmitbuf->list), get_list_head(pfree_queue)); + list_add_tail(&(pxmitbuf->list), get_list_head(pfree_queue)); pxmitpriv->free_xmit_extbuf_cnt++; spin_unlock_irqrestore(&pfree_queue->lock, irql); @@ -1332,7 +1332,7 @@ s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) rtw_list_delete(&pxmitbuf->list); - rtw_list_insert_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); + list_add_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); pxmitpriv->free_xmitbuf_cnt++; spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irql); @@ -1429,7 +1429,7 @@ s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitfram pxmitframe->pkt = NULL; } - rtw_list_insert_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue)); + list_add_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue)); pxmitpriv->free_xmitframe_cnt++; RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt)); @@ -1619,9 +1619,9 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe) ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index)); if (rtw_is_list_empty(&ptxservq->tx_pending)) - rtw_list_insert_tail(&ptxservq->tx_pending, get_list_head(phwxmits[ac_index].sta_queue)); + list_add_tail(&ptxservq->tx_pending, get_list_head(phwxmits[ac_index].sta_queue)); - rtw_list_insert_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending)); + list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending)); ptxservq->qcnt++; phwxmits[ac_index].accnt++; exit: @@ -1802,7 +1802,7 @@ int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_fra if (pstapriv->sta_dz_bitmap) {/* if any one sta is in ps mode */ rtw_list_delete(&pxmitframe->list); - rtw_list_insert_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); + list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); psta->sleepq_len++; @@ -1827,7 +1827,7 @@ int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_fra if (pstapriv->sta_dz_bitmap&BIT(psta->aid)) { rtw_list_delete(&pxmitframe->list); - rtw_list_insert_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); + list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); psta->sleepq_len++; diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 05cc35289201..de3705afa067 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -201,7 +201,6 @@ void _rtw_memcpy(void *dec, void *sour, u32 sz); void _rtw_init_listhead(struct list_head *list); u32 rtw_is_list_empty(struct list_head *phead); -void rtw_list_insert_tail(struct list_head *plist, struct list_head *phead); void rtw_list_delete(struct list_head *plist); u32 _rtw_down_sema(struct semaphore *sema); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 8067f9c642f0..2ff4f14a6fd4 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -107,11 +107,6 @@ u32 rtw_is_list_empty(struct list_head *phead) return false; } -void rtw_list_insert_tail(struct list_head *plist, struct list_head *phead) -{ - list_add_tail(plist, phead); -} - /* Caller must check if the list is empty before calling rtw_list_delete */ -- cgit From 84660700807cbcd649c58ff8ce7f65021765b15c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:32 +0530 Subject: staging: rtl8188eu: Remove function rtw_end_of_queue_search() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 16 +++--- drivers/staging/rtl8188eu/core/rtw_debug.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mlme.c | 13 ++--- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 7 +-- drivers/staging/rtl8188eu/core/rtw_p2p.c | 4 +- drivers/staging/rtl8188eu/core/rtw_recv.c | 8 +-- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 10 ++-- drivers/staging/rtl8188eu/core/rtw_xmit.c | 14 ++--- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 2 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 65 +++++------------------ drivers/staging/rtl8188eu/os_dep/osdep_service.c | 8 --- drivers/staging/rtl8188eu/os_dep/xmit_linux.c | 2 +- 13 files changed, 49 insertions(+), 104 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index a51ae26caf51..7682115e0bb5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -288,7 +288,7 @@ void expire_timeout_chk(struct adapter *padapter) plist = phead->next; /* check auth_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, auth_list); plist = plist->next; @@ -322,7 +322,7 @@ void expire_timeout_chk(struct adapter *padapter) plist = phead->next; /* check asoc_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; @@ -1146,7 +1146,7 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr) phead = get_list_head(pacl_node_q); plist = phead->next; - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { paclnode = container_of(plist, struct rtw_wlan_acl_node, list); plist = plist->next; @@ -1207,7 +1207,7 @@ int rtw_acl_remove_sta(struct adapter *padapter, u8 *addr) phead = get_list_head(pacl_node_q); plist = phead->next; - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { paclnode = container_of(plist, struct rtw_wlan_acl_node, list); plist = plist->next; @@ -1505,7 +1505,7 @@ void associated_clients_update(struct adapter *padapter, u8 updated) plist = phead->next; /* check asoc_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; @@ -1779,7 +1779,7 @@ int rtw_ap_inform_ch_switch(struct adapter *padapter, u8 new_ch, u8 ch_offset) plist = phead->next; /* for each sta in asoc_queue */ - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; @@ -1813,7 +1813,7 @@ int rtw_sta_flush(struct adapter *padapter) plist = phead->next; /* free sta asoc_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; @@ -1942,7 +1942,7 @@ void stop_ap_mode(struct adapter *padapter) spin_lock_bh(&(pacl_node_q->lock)); phead = get_list_head(pacl_node_q); plist = phead->next; - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { paclnode = container_of(plist, struct rtw_wlan_acl_node, list); plist = plist->next; diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c b/drivers/staging/rtl8188eu/core/rtw_debug.c index dd1516388f9a..1f72f7d8097e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_debug.c +++ b/drivers/staging/rtl8188eu/core/rtw_debug.c @@ -853,7 +853,7 @@ int proc_get_all_sta_info(char *page, char **start, phead = &(pstapriv->sta_hash[i]); plist = phead->next; - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, hash_list); plist = plist->next; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index e44e76e63df4..2fc294ebaeec 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -278,7 +278,7 @@ void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall) phead = get_list_head(scanned_queue); plist = phead->next; - while (rtw_end_of_queue_search(phead, plist) == false) { + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); plist = plist->next; @@ -438,7 +438,7 @@ struct wlan_network *rtw_get_oldest_wlan_network(struct __queue *scanned_queue) plist = phead->next; while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) + if (phead == plist) break; pwlan = container_of(plist, struct wlan_network, list); @@ -522,10 +522,7 @@ void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *t phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (is_same_network(&(pnetwork->network), target)) @@ -537,7 +534,7 @@ void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *t } /* If we didn't find a match, then get a new network slot to initialize * with this beacon's information */ - if (rtw_end_of_queue_search(phead, plist) == true) { + if (phead == plist) { if (_rtw_queue_empty(&(pmlmepriv->free_bss_pool)) == true) { /* If there are no more slots, expire the oldest */ pnetwork = oldest; @@ -1615,7 +1612,7 @@ int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv) phead = get_list_head(queue); adapter = (struct adapter *)pmlmepriv->nic_hdl; pmlmepriv->pscanned = phead->next; - while (!rtw_end_of_queue_search(phead, pmlmepriv->pscanned)) { + while (phead != pmlmepriv->pscanned) { pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list); if (pnetwork == NULL) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("%s return _FAIL:(pnetwork==NULL)\n", __func__)); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 57e05aebe1df..418fb216e147 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -6237,14 +6237,11 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter) phead = get_list_head(queue); plist = phead->next; - while (1) { + while (phead != plist) { int len; u8 *p; struct wlan_bssid_ex *pbss_network; - if (rtw_end_of_queue_search(phead, plist)) - break; - pnetwork = container_of(plist, struct wlan_network, list); plist = plist->next; @@ -8377,7 +8374,7 @@ u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf) xmitframe_phead = get_list_head(&psta_bmc->sleep_q); xmitframe_plist = xmitframe_phead->next; - while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index 82c52ed16e86..e6ce5cefe5af 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -60,7 +60,7 @@ static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf) plist = phead->next; /* look up sta asoc_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; @@ -983,7 +983,7 @@ u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint le plist = phead->next; /* look up sta asoc_queue */ - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 9b969c574d44..8adfa7e1d0a3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -255,7 +255,7 @@ void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfre phead = get_list_head(pframequeue); plist = phead->next; - while (rtw_end_of_queue_search(phead, plist) == false) { + while (phead != plist) { hdr = container_of(plist, struct recv_frame, list); plist = plist->next; @@ -1039,7 +1039,7 @@ static int validate_recv_ctrl_frame(struct adapter *padapter, xmitframe_phead = get_list_head(&psta->sleep_q); xmitframe_plist = xmitframe_phead->next; - if ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == false) { + if (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; @@ -1471,7 +1471,7 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter, plist = plist->next; - while (rtw_end_of_queue_search(phead, plist) == false) { + while (phead != plist) { pnfhdr = container_of(plist, struct recv_frame, list); pnextrframe = (struct recv_frame *)pnfhdr; @@ -1777,7 +1777,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, phead = get_list_head(ppending_recvframe_queue); plist = phead->next; - while (rtw_end_of_queue_search(phead, plist) == false) { + while (phead != plist) { hdr = container_of(plist, struct recv_frame, list); pnextattrib = &hdr->attrib; diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 4d3dec4d46bc..39cc197ee41f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -157,7 +157,7 @@ static void rtw_mfree_all_stainfo(struct sta_priv *pstapriv) phead = get_list_head(&pstapriv->free_sta_queue); plist = phead->next; - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info , list); plist = plist->next; } @@ -185,7 +185,7 @@ u32 _rtw_free_sta_priv(struct sta_priv *pstapriv) phead = &(pstapriv->sta_hash[index]); plist = phead->next; - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { int i; psta = container_of(plist, struct sta_info , hash_list); plist = plist->next; @@ -441,7 +441,7 @@ void rtw_free_all_stainfo(struct adapter *padapter) phead = &(pstapriv->sta_hash[index]); plist = phead->next; - while ((!rtw_end_of_queue_search(phead, plist))) { + while (phead != plist) { psta = container_of(plist, struct sta_info , hash_list); plist = plist->next; @@ -478,7 +478,7 @@ struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) phead = &(pstapriv->sta_hash[index]); plist = phead->next; - while ((!rtw_end_of_queue_search(phead, plist))) { + while (phead != plist) { psta = container_of(plist, struct sta_info, hash_list); if ((!memcmp(psta->hwaddr, addr, ETH_ALEN)) == true) { @@ -539,7 +539,7 @@ u8 rtw_access_ctrl(struct adapter *padapter, u8 *mac_addr) spin_lock_bh(&(pacl_node_q->lock)); phead = get_list_head(pacl_node_q); plist = phead->next; - while ((!rtw_end_of_queue_search(phead, plist))) { + while (phead != plist) { paclnode = container_of(plist, struct rtw_wlan_acl_node, list); plist = plist->next; diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 0aa2780a41fa..4b763bca467d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1456,7 +1456,7 @@ void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct __queue *pfram phead = get_list_head(pframequeue); plist = phead->next; - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { pxmitframe = container_of(plist, struct xmit_frame, list); plist = plist->next; @@ -1487,7 +1487,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str xmitframe_phead = get_list_head(pframe_queue); xmitframe_plist = xmitframe_phead->next; - if (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + if (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; @@ -1528,7 +1528,7 @@ struct xmit_frame *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmi sta_phead = get_list_head(phwxmit->sta_queue); sta_plist = sta_phead->next; - while (!rtw_end_of_queue_search(sta_phead, sta_plist)) { + while (sta_phead != sta_plist) { ptxservq = container_of(sta_plist, struct tx_servq, tx_pending); pframe_queue = &ptxservq->sta_pending; @@ -1884,7 +1884,7 @@ static void dequeue_xmitframes_to_sleeping_queue(struct adapter *padapter, struc phead = get_list_head(pframequeue); plist = phead->next; - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { pxmitframe = container_of(plist, struct xmit_frame, list); plist = plist->next; @@ -1951,7 +1951,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta) xmitframe_phead = get_list_head(&psta->sleep_q); xmitframe_plist = xmitframe_phead->next; - while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; @@ -2032,7 +2032,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta) xmitframe_phead = get_list_head(&psta_bmc->sleep_q); xmitframe_plist = xmitframe_phead->next; - while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; @@ -2079,7 +2079,7 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst xmitframe_phead = get_list_head(&psta->sleep_q); xmitframe_plist = xmitframe_phead->next; - while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 5e4be7e9b9e6..1b2e4b2bcb2f 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -535,7 +535,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp xmitframe_phead = get_list_head(&ptxservq->sta_pending); xmitframe_plist = xmitframe_phead->next; - while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (xmitframe_phead != xmitframe_plist) { pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = xmitframe_plist->next; diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index de3705afa067..d047b00cb31a 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -207,8 +207,6 @@ u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); u32 _rtw_queue_empty(struct __queue *pqueue); -u32 rtw_end_of_queue_search(struct list_head *queue, - struct list_head *pelement); u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 8ddeaac29cbc..1443d4ae1fd7 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -1111,10 +1111,7 @@ static int rtw_wx_set_wap(struct net_device *dev, phead = get_list_head(queue); pmlmepriv->pscanned = phead->next; - while (1) { - if ((rtw_end_of_queue_search(phead, pmlmepriv->pscanned)) == true) - break; - + while (phead != pmlmepriv->pscanned) { pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list); pmlmepriv->pscanned = pmlmepriv->pscanned->next; @@ -1402,10 +1399,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist)) - break; - + while (phead != plist) { if ((stop - ev) < SCAN_ITEM_SIZE) { ret = -E2BIG; break; @@ -1490,14 +1484,7 @@ static int rtw_wx_set_essid(struct net_device *dev, phead = get_list_head(queue); pmlmepriv->pscanned = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, pmlmepriv->pscanned) == true) { - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_warning_, - ("rtw_wx_set_essid: scan_q is empty, set ssid to check if scanning again!\n")); - - break; - } - + while (phead != pmlmepriv->pscanned) { pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list); pmlmepriv->pscanned = pmlmepriv->pscanned->next; @@ -2563,10 +2550,7 @@ static int rtw_get_ap_info(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (hwaddr_aton_i(data, bssid)) { @@ -3066,10 +3050,7 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { u8 *wpsie; @@ -3136,10 +3117,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { /* Commented by Albert 2011/05/18 */ @@ -3220,10 +3198,7 @@ static int rtw_p2p_get_device_type(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { u8 *wpsie; @@ -3299,10 +3274,7 @@ static int rtw_p2p_get_device_name(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { u8 *wpsie; @@ -3370,10 +3342,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { /* Commented by Albert 20121226 */ @@ -3452,10 +3421,7 @@ static int rtw_p2p_connect(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { uintPeerChannel = pnetwork->network.Configuration.DSConfig; @@ -3547,10 +3513,7 @@ static int rtw_p2p_invite_req(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; - + while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); /* Commented by Albert 2011/05/18 */ @@ -3697,9 +3660,7 @@ static int rtw_p2p_prov_disc(struct net_device *dev, phead = get_list_head(queue); plist = phead->next; - while (1) { - if (rtw_end_of_queue_search(phead, plist) == true) - break; + while (phead != plist) { if (uintPeerChannel != 0) break; @@ -4402,7 +4363,7 @@ static int rtw_dbg_port(struct net_device *dev, phead = &(pstapriv->sta_hash[i]); plist = phead->next; - while ((rtw_end_of_queue_search(phead, plist)) == false) { + while (phead != plist) { psta = container_of(plist, struct sta_info, hash_list); plist = plist->next; diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 2ff4f14a6fd4..da283f8e8f2b 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -130,14 +130,6 @@ u32 _rtw_queue_empty(struct __queue *pqueue) return rtw_is_list_empty(&(pqueue->queue)); } -u32 rtw_end_of_queue_search(struct list_head *head, struct list_head *plist) -{ - if (head == plist) - return true; - else - return false; -} - inline u32 rtw_systime_to_ms(u32 systime) { return systime * 1000 / HZ; diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c index 400356831c5e..5ccc186fa4e3 100644 --- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c @@ -184,7 +184,7 @@ static int rtw_mlcst2unicst(struct adapter *padapter, struct sk_buff *skb) plist = phead->next; /* free sta asoc_queue */ - while (!rtw_end_of_queue_search(phead, plist)) { + while (phead != plist) { psta = container_of(plist, struct sta_info, asoc_list); plist = plist->next; -- cgit From 9c4b0e70af4850f6209440b1e8e4f1bd39dc0aae Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:33 +0530 Subject: staging: rtl8188eu: Remove rtw_is_list_empty(), wrapper for list_emty() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 12 ++++++------ drivers/staging/rtl8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_xmit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 2 +- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 19 +------------------ 8 files changed, 14 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 0bcd8a83f4a5..1f6587bfd08b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -155,7 +155,7 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue) spin_lock_irqsave(&queue->lock, irqL); - if (rtw_is_list_empty(&(queue->queue))) { + if (list_empty(&(queue->queue))) { obj = NULL; } else { obj = container_of((&queue->queue)->next, struct cmd_obj, list); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 418fb216e147..8b678b7ac5af 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -817,7 +817,7 @@ unsigned int OnAuth(struct adapter *padapter, struct recv_frame *precv_frame) pstat->auth_seq = 0; } else { spin_lock_bh(&pstapriv->asoc_list_lock); - if (!rtw_is_list_empty(&pstat->asoc_list)) { + if (!list_empty(&pstat->asoc_list)) { rtw_list_delete(&pstat->asoc_list); pstapriv->asoc_list_cnt--; } @@ -829,7 +829,7 @@ unsigned int OnAuth(struct adapter *padapter, struct recv_frame *precv_frame) } spin_lock_bh(&pstapriv->auth_list_lock); - if (rtw_is_list_empty(&pstat->auth_list)) { + if (list_empty(&pstat->auth_list)) { list_add_tail(&pstat->auth_list, &pstapriv->auth_list); pstapriv->auth_list_cnt++; } @@ -1407,14 +1407,14 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame pstat->state |= WIFI_FW_ASSOC_SUCCESS; spin_lock_bh(&pstapriv->auth_list_lock); - if (!rtw_is_list_empty(&pstat->auth_list)) { + if (!list_empty(&pstat->auth_list)) { rtw_list_delete(&pstat->auth_list); pstapriv->auth_list_cnt--; } spin_unlock_bh(&pstapriv->auth_list_lock); spin_lock_bh(&pstapriv->asoc_list_lock); - if (rtw_is_list_empty(&pstat->asoc_list)) { + if (list_empty(&pstat->asoc_list)) { pstat->expire_to = pstapriv->expire_to; list_add_tail(&pstat->asoc_list, &pstapriv->asoc_list); pstapriv->asoc_list_cnt++; @@ -1600,7 +1600,7 @@ unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame) u8 updated = 0; spin_lock_bh(&pstapriv->asoc_list_lock); - if (!rtw_is_list_empty(&psta->asoc_list)) { + if (!list_empty(&psta->asoc_list)) { rtw_list_delete(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, false, reason); @@ -1664,7 +1664,7 @@ unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame u8 updated = 0; spin_lock_bh(&pstapriv->asoc_list_lock); - if (!rtw_is_list_empty(&psta->asoc_list)) { + if (!list_empty(&psta->asoc_list)) { rtw_list_delete(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, false, reason); diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 8adfa7e1d0a3..3371c7cedf52 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -1810,7 +1810,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor /* Handling some condition for forced indicate case. */ if (bforced) { - if (rtw_is_list_empty(phead)) + if (list_empty(phead)) return true; prhdr = container_of(plist, struct recv_frame, list); @@ -1820,7 +1820,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor /* Prepare indication list and indication. */ /* Check if there is any packet need indicate. */ - while (!rtw_is_list_empty(phead)) { + while (!list_empty(phead)) { prhdr = container_of(plist, struct recv_frame, list); prframe = (struct recv_frame *)prhdr; pattrib = &prframe->attrib; diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 39cc197ee41f..7bb2fa87c27b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -362,7 +362,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) phead = get_list_head(ppending_recvframe_queue); plist = phead->next; - while (!rtw_is_list_empty(phead)) { + while (!list_empty(phead)) { prhdr = container_of(plist, struct recv_frame, list); prframe = (struct recv_frame *)prhdr; @@ -382,7 +382,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) #ifdef CONFIG_88EU_AP_MODE spin_lock_bh(&pstapriv->auth_list_lock); - if (!rtw_is_list_empty(&psta->auth_list)) { + if (!list_empty(&psta->auth_list)) { rtw_list_delete(&psta->auth_list); pstapriv->auth_list_cnt--; } diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 4b763bca467d..faecfda4dd4f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1618,7 +1618,7 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe) ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index)); - if (rtw_is_list_empty(&ptxservq->tx_pending)) + if (list_empty(&ptxservq->tx_pending)) list_add_tail(&ptxservq->tx_pending, get_list_head(phwxmits[ac_index].sta_queue)); list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending)); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index d047b00cb31a..0a2a499c98af 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -200,7 +200,6 @@ void *rtw_malloc2d(int h, int w, int size); void _rtw_memcpy(void *dec, void *sour, u32 sz); void _rtw_init_listhead(struct list_head *list); -u32 rtw_is_list_empty(struct list_head *phead); void rtw_list_delete(struct list_head *plist); u32 _rtw_down_sema(struct semaphore *sema); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 1443d4ae1fd7..acce5129538c 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -5176,7 +5176,7 @@ static int rtw_del_sta(struct net_device *dev, struct ieee_param *param) psta = rtw_get_stainfo(pstapriv, param->sta_addr); if (psta) { spin_lock_bh(&pstapriv->asoc_list_lock); - if (!rtw_is_list_empty(&psta->asoc_list)) { + if (!list_empty(&psta->asoc_list)) { rtw_list_delete(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index da283f8e8f2b..ba5531f9f75b 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -94,23 +94,6 @@ void _rtw_init_listhead(struct list_head *list) INIT_LIST_HEAD(list); } -/* -For the following list_xxx operations, -caller must guarantee the atomic context. -Otherwise, there will be racing condition. -*/ -u32 rtw_is_list_empty(struct list_head *phead) -{ - if (list_empty(phead)) - return true; - else - return false; -} - -/* -Caller must check if the list is empty before calling rtw_list_delete -*/ - u32 _rtw_down_sema(struct semaphore *sema) { if (down_interruptible(sema)) @@ -127,7 +110,7 @@ void _rtw_init_queue(struct __queue *pqueue) u32 _rtw_queue_empty(struct __queue *pqueue) { - return rtw_is_list_empty(&(pqueue->queue)); + return list_empty(&(pqueue->queue)); } inline u32 rtw_systime_to_ms(u32 systime) -- cgit From aa3f5ccb010a1496b616a27a81e8ee1722f25a72 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:34 +0530 Subject: staging: rtl8188eu: Remove _rtw_init_listhead(), wrapper for INIT_LIST_HEAD() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 6 +++--- drivers/staging/rtl8188eu/core/rtw_cmd.c | 12 ++++++------ drivers/staging/rtl8188eu/core/rtw_mlme.c | 6 +++--- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 10 +++++----- drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 14 +++++++------- drivers/staging/rtl8188eu/core/rtw_xmit.c | 12 ++++++------ drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 2 +- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 7 +------ drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 2 +- 13 files changed, 37 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index 7682115e0bb5..c3c4649034e2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -1170,7 +1170,7 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr) paclnode = &pacl_list->aclnode[i]; if (!paclnode->valid) { - _rtw_init_listhead(&paclnode->list); + INIT_LIST_HEAD(&paclnode->list); memcpy(paclnode->addr, addr, ETH_ALEN); @@ -1910,11 +1910,11 @@ void start_ap_mode(struct adapter *padapter) pmlmepriv->p2p_probe_resp_ie = NULL; /* for ACL */ - _rtw_init_listhead(&(pacl_list->acl_node_q.queue)); + INIT_LIST_HEAD(&(pacl_list->acl_node_q.queue)); pacl_list->num = 0; pacl_list->mode = 0; for (i = 0; i < NUM_ACL; i++) { - _rtw_init_listhead(&pacl_list->aclnode[i].list); + INIT_LIST_HEAD(&pacl_list->aclnode[i].list); pacl_list->aclnode[i].valid = false; } } diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 1f6587bfd08b..29f45e8b9a3a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -651,7 +651,7 @@ u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) return _FAIL; } - _rtw_init_listhead(&ph2c->list); + INIT_LIST_HEAD(&ph2c->list); ph2c->cmdcode = GEN_CMD_CODE(_GetBBReg); ph2c->parmbuf = (unsigned char *)prdbbparm; ph2c->cmdsz = sizeof(struct readBB_parm); @@ -715,7 +715,7 @@ u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) goto exit; } - _rtw_init_listhead(&ph2c->list); + INIT_LIST_HEAD(&ph2c->list); ph2c->cmdcode = GEN_CMD_CODE(_GetRFReg); ph2c->parmbuf = (unsigned char *)prdrfparm; ph2c->cmdsz = sizeof(struct readRF_parm); @@ -774,7 +774,7 @@ u8 rtw_createbss_cmd(struct adapter *padapter) goto exit; } - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); pcmd->cmdcode = _CreateBss_CMD_; pcmd->parmbuf = (unsigned char *)pdev_network; pcmd->cmdsz = get_wlan_bssid_ex_sz((struct wlan_bssid_ex *)pdev_network); @@ -801,7 +801,7 @@ u8 rtw_createbss_cmd_ex(struct adapter *padapter, unsigned char *pbss, unsigned goto exit; } - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); pcmd->cmdcode = GEN_CMD_CODE(_CreateBss); pcmd->parmbuf = pbss; pcmd->cmdsz = sz; @@ -944,7 +944,7 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork) pcmd->cmdsz = get_wlan_bssid_ex_sz(psecnetwork);/* get cmdsz before endian conversion */ - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); pcmd->cmdcode = _JoinBss_CMD_;/* GEN_CMD_CODE(_JoinBss) */ pcmd->parmbuf = (unsigned char *)psecnetwork; pcmd->rsp = NULL; @@ -1194,7 +1194,7 @@ u8 rtw_getrttbl_cmd(struct adapter *padapter, struct getratable_rsp *pval) goto exit; } - _rtw_init_listhead(&ph2c->list); + INIT_LIST_HEAD(&ph2c->list); ph2c->cmdcode = GEN_CMD_CODE(_GetRaTable); ph2c->parmbuf = (unsigned char *)pgetrttblparm; ph2c->cmdsz = sizeof(struct getratable_parm); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 2fc294ebaeec..f0ad0c528466 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -72,7 +72,7 @@ int _rtw_init_mlme_priv(struct adapter *padapter) pnetwork = (struct wlan_network *)pbuf; for (i = 0; i < MAX_BSS_CNT; i++) { - _rtw_init_listhead(&(pnetwork->list)); + INIT_LIST_HEAD(&(pnetwork->list)); list_add_tail(&(pnetwork->list), &(pmlmepriv->free_bss_pool.queue)); @@ -1685,7 +1685,7 @@ int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv) pcmd->cmdsz = (sizeof(struct setauth_parm)); pcmd->rsp = NULL; pcmd->rspsz = 0; - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("after enqueue set_auth_cmd, auth_mode=%x\n", psecuritypriv->dot11AuthAlgrthm)); @@ -1766,7 +1766,7 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in pcmd->cmdsz = (sizeof(struct setkey_parm)); pcmd->rsp = NULL; pcmd->rspsz = 0; - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); res = rtw_enqueue_cmd(pcmdpriv, pcmd); return res; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 8b678b7ac5af..62445554b23e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -7066,7 +7066,7 @@ void report_survey_event(struct adapter *padapter, return; } - _rtw_init_listhead(&pcmd_obj->list); + INIT_LIST_HEAD(&pcmd_obj->list); pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT); pcmd_obj->cmdsz = cmdsz; @@ -7118,7 +7118,7 @@ void report_surveydone_event(struct adapter *padapter) return; } - _rtw_init_listhead(&pcmd_obj->list); + INIT_LIST_HEAD(&pcmd_obj->list); pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT); pcmd_obj->cmdsz = cmdsz; @@ -7164,7 +7164,7 @@ void report_join_res(struct adapter *padapter, int res) return; } - _rtw_init_listhead(&pcmd_obj->list); + INIT_LIST_HEAD(&pcmd_obj->list); pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT); pcmd_obj->cmdsz = cmdsz; @@ -7217,7 +7217,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi return; } - _rtw_init_listhead(&pcmd_obj->list); + INIT_LIST_HEAD(&pcmd_obj->list); pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT); pcmd_obj->cmdsz = cmdsz; @@ -7272,7 +7272,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int return; } - _rtw_init_listhead(&pcmd_obj->list); + INIT_LIST_HEAD(&pcmd_obj->list); pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT); pcmd_obj->cmdsz = cmdsz; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index af1be19f4c3e..2469a828cbe5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -971,7 +971,7 @@ void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv) pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf; for (i = 0; i < num_xmit_extbuf; i++) { - _rtw_init_listhead(&pxmitbuf->list); + INIT_LIST_HEAD(&pxmitbuf->list); pxmitbuf->priv_data = NULL; pxmitbuf->padapter = padapter; diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 3371c7cedf52..a2bdcd7c3456 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -82,7 +82,7 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter) precvframe = (struct recv_frame *)precvpriv->precv_frame_buf; for (i = 0; i < NR_RECVFRAME; i++) { - _rtw_init_listhead(&(precvframe->list)); + INIT_LIST_HEAD(&(precvframe->list)); list_add_tail(&(precvframe->list), &(precvpriv->free_recv_queue.queue)); @@ -169,7 +169,7 @@ struct recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue) void rtw_init_recvframe(struct recv_frame *precvframe, struct recv_priv *precvpriv) { /* Perry: This can be removed */ - _rtw_init_listhead(&precvframe->list); + INIT_LIST_HEAD(&precvframe->list); precvframe->len = 0; } diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 7bb2fa87c27b..60f248240c38 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -32,8 +32,8 @@ static void _rtw_init_stainfo(struct sta_info *psta) memset((u8 *)psta, 0, sizeof (struct sta_info)); spin_lock_init(&psta->lock); - _rtw_init_listhead(&psta->list); - _rtw_init_listhead(&psta->hash_list); + INIT_LIST_HEAD(&psta->list); + INIT_LIST_HEAD(&psta->hash_list); _rtw_init_queue(&psta->sleep_q); psta->sleepq_len = 0; @@ -42,9 +42,9 @@ static void _rtw_init_stainfo(struct sta_info *psta) #ifdef CONFIG_88EU_AP_MODE - _rtw_init_listhead(&psta->asoc_list); + INIT_LIST_HEAD(&psta->asoc_list); - _rtw_init_listhead(&psta->auth_list); + INIT_LIST_HEAD(&psta->auth_list); psta->expire_to = 0; @@ -98,7 +98,7 @@ u32 _rtw_init_sta_priv(struct sta_priv *pstapriv) for (i = 0; i < NUM_STA; i++) { _rtw_init_stainfo(psta); - _rtw_init_listhead(&(pstapriv->sta_hash[i])); + INIT_LIST_HEAD(&(pstapriv->sta_hash[i])); list_add_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue)); @@ -110,8 +110,8 @@ u32 _rtw_init_sta_priv(struct sta_priv *pstapriv) pstapriv->sta_dz_bitmap = 0; pstapriv->tim_bitmap = 0; - _rtw_init_listhead(&pstapriv->asoc_list); - _rtw_init_listhead(&pstapriv->auth_list); + INIT_LIST_HEAD(&pstapriv->asoc_list); + INIT_LIST_HEAD(&pstapriv->auth_list); spin_lock_init(&pstapriv->asoc_list_lock); spin_lock_init(&pstapriv->auth_list_lock); pstapriv->asoc_list_cnt = 0; diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index faecfda4dd4f..8f380f39ce3b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -31,7 +31,7 @@ static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 }; static void _init_txservq(struct tx_servq *ptxservq) { - _rtw_init_listhead(&ptxservq->tx_pending); + INIT_LIST_HEAD(&ptxservq->tx_pending); _rtw_init_queue(&ptxservq->sta_pending); ptxservq->qcnt = 0; } @@ -44,8 +44,8 @@ void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv) _init_txservq(&psta_xmitpriv->bk_q); _init_txservq(&psta_xmitpriv->vi_q); _init_txservq(&psta_xmitpriv->vo_q); - _rtw_init_listhead(&psta_xmitpriv->legacy_dz); - _rtw_init_listhead(&psta_xmitpriv->apsd); + INIT_LIST_HEAD(&psta_xmitpriv->legacy_dz); + INIT_LIST_HEAD(&psta_xmitpriv->apsd); } @@ -100,7 +100,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) pxframe = (struct xmit_frame *)pxmitpriv->pxmit_frame_buf; for (i = 0; i < NR_XMITFRAME; i++) { - _rtw_init_listhead(&(pxframe->list)); + INIT_LIST_HEAD(&(pxframe->list)); pxframe->padapter = padapter; pxframe->frame_tag = NULL_FRAMETAG; @@ -138,7 +138,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf; for (i = 0; i < NR_XMITBUFF; i++) { - _rtw_init_listhead(&pxmitbuf->list); + INIT_LIST_HEAD(&pxmitbuf->list); pxmitbuf->priv_data = NULL; pxmitbuf->padapter = padapter; @@ -178,7 +178,7 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter) pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf; for (i = 0; i < num_xmit_extbuf; i++) { - _rtw_init_listhead(&pxmitbuf->list); + INIT_LIST_HEAD(&pxmitbuf->list); pxmitbuf->priv_data = NULL; pxmitbuf->padapter = padapter; diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 0a2a499c98af..23b75fc7a7e4 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -199,7 +199,6 @@ void *rtw_malloc2d(int h, int w, int size); void _rtw_memcpy(void *dec, void *sour, u32 sz); -void _rtw_init_listhead(struct list_head *list); void rtw_list_delete(struct list_head *plist); u32 _rtw_down_sema(struct semaphore *sema); diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 66467f711a59..c478bdebcbd9 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -77,7 +77,7 @@ struct evt_priv { #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ do {\ - _rtw_init_listhead(&pcmd->list);\ + INIT_LIST_HEAD(&pcmd->list);\ pcmd->cmdcode = code;\ pcmd->parmbuf = (u8 *)(pparm);\ pcmd->cmdsz = sizeof(*pparm);\ diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index acce5129538c..15748a543ccc 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -4801,7 +4801,7 @@ static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) pcmd->rsp = NULL; pcmd->rspsz = 0; - _rtw_init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); res = rtw_enqueue_cmd(pcmdpriv, pcmd); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index ba5531f9f75b..1ef9c49e59b8 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -89,11 +89,6 @@ void *rtw_malloc2d(int h, int w, int size) return a; } -void _rtw_init_listhead(struct list_head *list) -{ - INIT_LIST_HEAD(list); -} - u32 _rtw_down_sema(struct semaphore *sema) { if (down_interruptible(sema)) @@ -104,7 +99,7 @@ u32 _rtw_down_sema(struct semaphore *sema) void _rtw_init_queue(struct __queue *pqueue) { - _rtw_init_listhead(&(pqueue->queue)); + INIT_LIST_HEAD(&(pqueue->queue)); spin_lock_init(&(pqueue->lock)); } diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index db8aab398a64..8015c3a2f92c 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -76,7 +76,7 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb) goto _exit_recvbuf2recvframe; } - _rtw_init_listhead(&precvframe->list); + INIT_LIST_HEAD(&precvframe->list); precvframe->len = 0; update_recvframe_attrib_88e(precvframe, prxstat); -- cgit From fb46424e6c57863398ab37a5e578a719443ec391 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:35 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_sleep_schedulable() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 12 ------------ 2 files changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 23b75fc7a7e4..7a0afab224fb 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -211,7 +211,6 @@ u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); s32 rtw_get_time_interval_ms(u32 start, u32 end); -void rtw_sleep_schedulable(int ms); u32 rtw_atoi(u8 *s); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 1ef9c49e59b8..f43ace2e56f7 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -129,18 +129,6 @@ inline s32 rtw_get_time_interval_ms(u32 start, u32 end) return rtw_systime_to_ms(end-start); } -void rtw_sleep_schedulable(int ms) -{ - u32 delta; - - delta = (ms * HZ)/1000;/* ms) */ - if (delta == 0) - delta = 1;/* 1 ms */ - set_current_state(TASK_INTERRUPTIBLE); - if (schedule_timeout(delta) != 0) - return; -} - #define RTW_SUSPEND_LOCK_NAME "rtw_wifi" struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, -- cgit From a733e46751002208755c0cb40f5eda0e9c939ad2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 13:49:36 +0530 Subject: staging: rtl8188eu: Use kstrtoul() for string to long conversion Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 3 --- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 24 ++++++++++++++++------- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 17 ---------------- 3 files changed, 17 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 7a0afab224fb..7c2336fea456 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -211,9 +211,6 @@ u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); s32 rtw_get_time_interval_ms(u32 start, u32 end); - -u32 rtw_atoi(u8 *s); - static inline unsigned char _cancel_timer_ex(struct timer_list *ptimer) { return del_timer_sync(ptimer); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 15748a543ccc..5cca278ae206 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -6590,9 +6590,10 @@ static int rtw_mp_rate(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrqu, char *extra) { - u32 rate = MPT_RATE_1M; + unsigned long rate = MPT_RATE_1M; char *input = kmalloc(wrqu->length, GFP_KERNEL); struct adapter *padapter = rtw_netdev_priv(dev); + int status; if (!input) return -ENOMEM; @@ -6600,8 +6601,12 @@ static int rtw_mp_rate(struct net_device *dev, kfree(input); return -EFAULT; } - rate = rtw_atoi(input); - sprintf(extra, "Set data rate to %d", rate); + + status = kstrtoul(input, 0, &rate); + if (status) + return status; + + sprintf(extra, "Set data rate to %lu", rate); kfree(input); if (rate <= 0x7f) rate = wifirate2_ratetbl_inx((u8)rate); @@ -6623,8 +6628,9 @@ static int rtw_mp_channel(struct net_device *dev, struct iw_point *wrqu, char *extra) { struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->length, GFP_KERNEL); - u32 channel = 1; + char *input = kmalloc(wrqu->length, GFP_KERNEL); + unsigned long channel = 1; + int status; if (!input) return -ENOMEM; @@ -6632,8 +6638,12 @@ static int rtw_mp_channel(struct net_device *dev, kfree(input); return -EFAULT; } - channel = rtw_atoi(input); - sprintf(extra, "Change channel %d to channel %d", padapter->mppriv.channel, channel); + + status = kstrtoul(input, 0, &channel); + if (status) + return status; + + sprintf(extra, "Change channel %d to channel %lu", padapter->mppriv.channel, channel); padapter->mppriv.channel = channel; Hal_SetChannel(padapter); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index f43ace2e56f7..2a4469dec8e9 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -39,23 +39,6 @@ inline int RTW_STATUS_CODE(int error_code) return _FAIL; } -u32 rtw_atoi(u8 *s) -{ - int num = 0, flag = 0; - int i; - for (i = 0; i <= strlen(s); i++) { - if (s[i] >= '0' && s[i] <= '9') - num = num * 10 + s[i] - '0'; - else if (s[0] == '-' && i == 0) - flag = 1; - else - break; - } - if (flag == 1) - num = num * -1; - return num; -} - u8 *_rtw_malloc(u32 sz) { u8 *pbuf = NULL; -- cgit From fadbe0cd5292851608e2e01b91d9295fa287b9fe Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:23 +0530 Subject: staging: rtl8188eu:Remove rtw_zmalloc(), wrapper for kzalloc() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 124 +++++++++++----------- drivers/staging/rtl8188eu/core/rtw_efuse.c | 4 +- drivers/staging/rtl8188eu/core/rtw_mlme.c | 8 +- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 28 ++--- drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/core/rtw_p2p.c | 8 +- drivers/staging/rtl8188eu/core/rtw_wlan_util.c | 2 +- drivers/staging/rtl8188eu/core/rtw_xmit.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c | 2 +- drivers/staging/rtl8188eu/hal/usb_halinit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 2 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 24 ++--- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 11 +- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 4 +- drivers/staging/rtl8188eu/os_dep/xmit_linux.c | 2 +- 16 files changed, 108 insertions(+), 119 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 29f45e8b9a3a..3f37927abbf6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -47,7 +47,7 @@ int _rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->cmd_seq = 1; - pcmdpriv->cmd_allocated_buf = rtw_zmalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ); + pcmdpriv->cmd_allocated_buf = kzalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ, GFP_KERNEL); if (pcmdpriv->cmd_allocated_buf == NULL) { res = _FAIL; @@ -56,7 +56,7 @@ int _rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ((size_t)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1)); - pcmdpriv->rsp_allocated_buf = rtw_zmalloc(MAX_RSPSZ + 4); + pcmdpriv->rsp_allocated_buf = kzalloc(MAX_RSPSZ + 4, GFP_KERNEL); if (pcmdpriv->rsp_allocated_buf == NULL) { res = _FAIL; @@ -437,11 +437,11 @@ u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, if (check_fwstate(pmlmepriv, _FW_LINKED) == true) p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1); - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) return _FAIL; - psurveyPara = (struct sitesurvey_parm *)rtw_zmalloc(sizeof(struct sitesurvey_parm)); + psurveyPara = kzalloc(sizeof(struct sitesurvey_parm), GFP_KERNEL); if (psurveyPara == NULL) { kfree(ph2c); return _FAIL; @@ -506,13 +506,13 @@ u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pbsetdataratepara = (struct setdatarate_parm *)rtw_zmalloc(sizeof(struct setdatarate_parm)); + pbsetdataratepara = kzalloc(sizeof(struct setdatarate_parm), GFP_KERNEL); if (pbsetdataratepara == NULL) { kfree(ph2c); res = _FAIL; @@ -537,12 +537,12 @@ u8 rtw_setbasicrate_cmd(struct adapter *padapter, u8 *rateset) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pssetbasicratepara = (struct setbasicrate_parm *)rtw_zmalloc(sizeof(struct setbasicrate_parm)); + pssetbasicratepara = kzalloc(sizeof(struct setbasicrate_parm), GFP_KERNEL); if (pssetbasicratepara == NULL) { kfree(ph2c); @@ -577,12 +577,12 @@ u8 rtw_setphy_cmd(struct adapter *padapter, u8 modem, u8 ch) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetphypara = (struct setphy_parm *)rtw_zmalloc(sizeof(struct setphy_parm)); + psetphypara = kzalloc(sizeof(struct setphy_parm), GFP_KERNEL); if (psetphypara == NULL) { kfree(ph2c); @@ -609,12 +609,12 @@ u8 rtw_setbbreg_cmd(struct adapter *padapter, u8 offset, u8 val) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pwritebbparm = (struct writeBB_parm *)rtw_zmalloc(sizeof(struct writeBB_parm)); + pwritebbparm = kzalloc(sizeof(struct writeBB_parm), GFP_KERNEL); if (pwritebbparm == NULL) { kfree(ph2c); @@ -639,12 +639,12 @@ u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - prdbbparm = (struct readBB_parm *)rtw_zmalloc(sizeof(struct readBB_parm)); + prdbbparm = kzalloc(sizeof(struct readBB_parm), GFP_KERNEL); if (prdbbparm == NULL) { kfree(ph2c); @@ -671,12 +671,12 @@ u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val) struct writeRF_parm *pwriterfparm; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pwriterfparm = (struct writeRF_parm *)rtw_zmalloc(sizeof(struct writeRF_parm)); + pwriterfparm = kzalloc(sizeof(struct writeRF_parm), GFP_KERNEL); if (pwriterfparm == NULL) { kfree(ph2c); @@ -702,13 +702,13 @@ u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - prdrfparm = (struct readRF_parm *)rtw_zmalloc(sizeof(struct readRF_parm)); + prdrfparm = kzalloc(sizeof(struct readRF_parm), GFP_KERNEL); if (prdrfparm == NULL) { kfree(ph2c); res = _FAIL; @@ -768,7 +768,7 @@ u8 rtw_createbss_cmd(struct adapter *padapter) else RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, (" createbss for SSid:%s\n", pmlmepriv->assoc_ssid.Ssid)); - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) { res = _FAIL; goto exit; @@ -795,7 +795,7 @@ u8 rtw_createbss_cmd_ex(struct adapter *padapter, unsigned char *pbss, unsigned u8 res = _SUCCESS; - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) { res = _FAIL; goto exit; @@ -840,7 +840,7 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork) else RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+Join cmd: SSid =[%s]\n", pmlmepriv->assoc_ssid.Ssid)); - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) { res = _FAIL; RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("rtw_joinbss_cmd: memory allocate for cmd_obj fail!!!\n")); @@ -969,7 +969,7 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueu RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_disassoc_cmd\n")); /* prepare cmd parameter */ - param = (struct disconnect_parm *)rtw_zmalloc(sizeof(*param)); + param = kzalloc(sizeof(*param), GFP_KERNEL); if (param == NULL) { res = _FAIL; goto exit; @@ -978,7 +978,7 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueu if (enqueue) { /* need enqueue, prepare cmd_obj and enqueue */ - cmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(*cmdobj)); + cmdobj = kzalloc(sizeof(*cmdobj), GFP_KERNEL); if (cmdobj == NULL) { res = _FAIL; kfree(param); @@ -1008,12 +1008,12 @@ u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra n u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = false; goto exit; } - psetop = (struct setopmode_parm *)rtw_zmalloc(sizeof(struct setopmode_parm)); + psetop = kzalloc(sizeof(struct setopmode_parm), GFP_KERNEL); if (psetop == NULL) { kfree(ph2c); @@ -1045,20 +1045,20 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetstakey_para = (struct set_stakey_parm *)rtw_zmalloc(sizeof(struct set_stakey_parm)); + psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); if (psetstakey_para == NULL) { kfree(ph2c); res = _FAIL; goto exit; } - psetstakey_rsp = (struct set_stakey_rsp *)rtw_zmalloc(sizeof(struct set_stakey_rsp)); + psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp), GFP_KERNEL); if (psetstakey_rsp == NULL) { kfree(ph2c); kfree(psetstakey_para); @@ -1106,20 +1106,20 @@ u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue) if (!enqueue) { clear_cam_entry(padapter, entry); } else { - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetstakey_para = (struct set_stakey_parm *)rtw_zmalloc(sizeof(struct set_stakey_parm)); + psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); if (psetstakey_para == NULL) { kfree(ph2c); res = _FAIL; goto exit; } - psetstakey_rsp = (struct set_stakey_rsp *)rtw_zmalloc(sizeof(struct set_stakey_rsp)); + psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp), GFP_KERNEL); if (psetstakey_rsp == NULL) { kfree(ph2c); kfree(psetstakey_para); @@ -1152,12 +1152,12 @@ u8 rtw_setrttbl_cmd(struct adapter *padapter, struct setratable_parm *prate_tab struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetrttblparm = (struct setratable_parm *)rtw_zmalloc(sizeof(struct setratable_parm)); + psetrttblparm = kzalloc(sizeof(struct setratable_parm), GFP_KERNEL); if (psetrttblparm == NULL) { kfree(ph2c); @@ -1181,12 +1181,12 @@ u8 rtw_getrttbl_cmd(struct adapter *padapter, struct getratable_rsp *pval) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pgetrttblparm = (struct getratable_parm *)rtw_zmalloc(sizeof(struct getratable_parm)); + pgetrttblparm = kzalloc(sizeof(struct getratable_parm), GFP_KERNEL); if (pgetrttblparm == NULL) { kfree(ph2c); @@ -1218,20 +1218,20 @@ u8 rtw_setassocsta_cmd(struct adapter *padapter, u8 *mac_addr) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetassocsta_para = (struct set_assocsta_parm *)rtw_zmalloc(sizeof(struct set_assocsta_parm)); + psetassocsta_para = kzalloc(sizeof(struct set_assocsta_parm), GFP_KERNEL); if (psetassocsta_para == NULL) { kfree(ph2c); res = _FAIL; goto exit; } - psetassocsta_rsp = (struct set_stakey_rsp *)rtw_zmalloc(sizeof(struct set_assocsta_rsp)); + psetassocsta_rsp = kzalloc(sizeof(struct set_assocsta_rsp), GFP_KERNEL); if (psetassocsta_rsp == NULL) { kfree(ph2c); kfree(psetassocsta_para); @@ -1260,13 +1260,13 @@ u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - paddbareq_parm = (struct addBaReq_parm *)rtw_zmalloc(sizeof(struct addBaReq_parm)); + paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_KERNEL); if (paddbareq_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1297,13 +1297,13 @@ u8 rtw_dynamic_chk_wk_cmd(struct adapter *padapter) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1338,7 +1338,7 @@ u8 rtw_set_ch_cmd(struct adapter *padapter, u8 ch, u8 bw, u8 ch_offset, u8 enque /* check input parameter */ /* prepare cmd parameter */ - set_ch_parm = (struct set_ch_parm *)rtw_zmalloc(sizeof(*set_ch_parm)); + set_ch_parm = kzalloc(sizeof(*set_ch_parm), GFP_KERNEL); if (set_ch_parm == NULL) { res = _FAIL; goto exit; @@ -1349,7 +1349,7 @@ u8 rtw_set_ch_cmd(struct adapter *padapter, u8 ch, u8 bw, u8 ch_offset, u8 enque if (enqueue) { /* need enqueue, prepare cmd_obj and enqueue */ - pcmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmdobj == NULL) { kfree(set_ch_parm); res = _FAIL; @@ -1394,7 +1394,7 @@ u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue) } /* prepare cmd parameter */ - setChannelPlan_param = (struct SetChannelPlan_param *)rtw_zmalloc(sizeof(struct SetChannelPlan_param)); + setChannelPlan_param = kzalloc(sizeof(struct SetChannelPlan_param), GFP_KERNEL); if (setChannelPlan_param == NULL) { res = _FAIL; goto exit; @@ -1403,7 +1403,7 @@ u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue) if (enqueue) { /* need enqueue, prepare cmd_obj and enqueue */ - pcmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmdobj == NULL) { kfree(setChannelPlan_param); res = _FAIL; @@ -1441,13 +1441,13 @@ u8 rtw_set_csa_cmd(struct adapter *padapter, u8 new_ch_no) RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_set_csa_cmd\n")); - pcmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmdobj == NULL) { res = _FAIL; goto exit; } - setChannelSwitch_param = (struct SetChannelSwitch_param *)rtw_zmalloc(sizeof(struct SetChannelSwitch_param)); + setChannelSwitch_param = kzalloc(sizeof(struct SetChannelSwitch_param), GFP_KERNEL); if (setChannelSwitch_param == NULL) { kfree(pcmdobj); res = _FAIL; @@ -1602,13 +1602,13 @@ u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue) u8 res = _SUCCESS; if (enqueue) { - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1645,13 +1645,13 @@ u8 rtw_rpt_timer_cfg_cmd(struct adapter *padapter, u16 min_time) u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1687,13 +1687,13 @@ u8 rtw_antenna_select_cmd(struct adapter *padapter, u8 antenna, u8 enqueue) return res; if (enqueue) { - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1733,13 +1733,13 @@ u8 p2p_protocol_wk_cmd(struct adapter *padapter, int intCmdType) if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) return res; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1769,13 +1769,13 @@ u8 rtw_ps_cmd(struct adapter *padapter) u8 res = _SUCCESS; - ppscmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ppscmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ppscmd == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ppscmd); res = _FAIL; @@ -1843,13 +1843,13 @@ u8 rtw_chk_hi_queue_cmd(struct adapter *padapter) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; @@ -1875,13 +1875,13 @@ u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index baaf27611392..82a54b56aff6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -103,7 +103,7 @@ efuse_phymap_to_logical(u8 *phymap, u16 _offset, u16 _size_byte, u8 *pbuf) u16 efuse_utilized = 0; u8 u1temp = 0; - efuseTbl = (u8 *)rtw_zmalloc(EFUSE_MAP_LEN_88E); + efuseTbl = kzalloc(EFUSE_MAP_LEN_88E, GFP_KERNEL); if (efuseTbl == NULL) { DBG_88E("%s: alloc efuseTbl fail!\n", __func__); goto exit; @@ -1083,7 +1083,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) if ((addr + cnts) > mapLen) return _FAIL; - map = rtw_zmalloc(mapLen); + map = kzalloc(mapLen, GFP_KERNEL); if (map == NULL) return _FAIL; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index f0ad0c528466..f6198299cdb4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1666,13 +1666,13 @@ int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv) struct cmd_priv *pcmdpriv = &(adapter->cmdpriv); int res = _SUCCESS; - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) { res = _FAIL; /* try again */ goto exit; } - psetauthparm = (struct setauth_parm *)rtw_zmalloc(sizeof(struct setauth_parm)); + psetauthparm = kzalloc(sizeof(struct setauth_parm), GFP_KERNEL); if (psetauthparm == NULL) { kfree(pcmd); res = _FAIL; @@ -1703,11 +1703,11 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in struct mlme_priv *pmlmepriv = &(adapter->mlmepriv); int res = _SUCCESS; - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) return _FAIL; /* try again */ - psetkeyparm = (struct setkey_parm *)rtw_zmalloc(sizeof(struct setkey_parm)); + psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL); if (psetkeyparm == NULL) { res = _FAIL; goto err_free_cmd; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 62445554b23e..08b5620ce87e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -7055,12 +7055,12 @@ void report_survey_event(struct adapter *padapter, pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd_obj == NULL) return; cmdsz = (sizeof(struct survey_event) + sizeof(struct C2HEvent_Header)); - pevtcmd = (u8 *)rtw_zmalloc(cmdsz); + pevtcmd = kzalloc(cmdsz, GFP_KERNEL); if (pevtcmd == NULL) { kfree(pcmd_obj); return; @@ -7107,12 +7107,12 @@ void report_surveydone_event(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd_obj == NULL) return; cmdsz = (sizeof(struct surveydone_event) + sizeof(struct C2HEvent_Header)); - pevtcmd = (u8 *)rtw_zmalloc(cmdsz); + pevtcmd = kzalloc(cmdsz, GFP_KERNEL); if (pevtcmd == NULL) { kfree(pcmd_obj); return; @@ -7153,12 +7153,12 @@ void report_join_res(struct adapter *padapter, int res) struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd_obj == NULL) return; cmdsz = (sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header)); - pevtcmd = (u8 *)rtw_zmalloc(cmdsz); + pevtcmd = kzalloc(cmdsz, GFP_KERNEL); if (pevtcmd == NULL) { kfree(pcmd_obj); return; @@ -7206,12 +7206,12 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd_obj == NULL) return; cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header)); - pevtcmd = (u8 *)rtw_zmalloc(cmdsz); + pevtcmd = kzalloc(cmdsz, GFP_KERNEL); if (pevtcmd == NULL) { kfree(pcmd_obj); return; @@ -7261,12 +7261,12 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - pcmd_obj = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd_obj == NULL) return; cmdsz = (sizeof(struct stassoc_event) + sizeof(struct C2HEvent_Header)); - pevtcmd = (u8 *)rtw_zmalloc(cmdsz); + pevtcmd = kzalloc(cmdsz, GFP_KERNEL); if (pevtcmd == NULL) { kfree(pcmd_obj); return; @@ -7686,11 +7686,11 @@ void survey_timer_hdl(struct adapter *padapter) pmlmeext->scan_abort = false;/* reset */ } - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) goto exit_survey_timer_hdl; - psurveyPara = (struct sitesurvey_parm *)rtw_zmalloc(sizeof(struct sitesurvey_parm)); + psurveyPara = kzalloc(sizeof(struct sitesurvey_parm), GFP_KERNEL); if (psurveyPara == NULL) { kfree(ph2c); goto exit_survey_timer_hdl; @@ -8268,13 +8268,13 @@ u8 set_tx_beacon_cmd(struct adapter *padapter) int len_diff = 0; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - ptxBeacon_parm = (struct Tx_Beacon_param *)rtw_zmalloc(sizeof(struct Tx_Beacon_param)); + ptxBeacon_parm = kzalloc(sizeof(struct Tx_Beacon_param), GFP_KERNEL); if (ptxBeacon_parm == NULL) { kfree(ph2c); res = _FAIL; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 2469a828cbe5..ca323db2f1d1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -687,7 +687,7 @@ void SetPacketTx(struct adapter *padapter) kfree(pmp_priv->tx.pallocated_buf); pmp_priv->tx.write_size = pkt_size; pmp_priv->tx.buf_size = pkt_size + XMITBUF_ALIGN_SZ; - pmp_priv->tx.pallocated_buf = rtw_zmalloc(pmp_priv->tx.buf_size); + pmp_priv->tx.pallocated_buf = kzalloc(pmp_priv->tx.buf_size, GFP_KERNEL); if (pmp_priv->tx.pallocated_buf == NULL) { DBG_88E("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size); return; diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index e6ce5cefe5af..08404704257a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -50,7 +50,7 @@ static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf) DBG_88E("%s\n", __func__); - pdata_attr = rtw_zmalloc(MAX_P2P_IE_LEN); + pdata_attr = kzalloc(MAX_P2P_IE_LEN, GFP_KERNEL); pstart = pdata_attr; pcur = pdata_attr; @@ -891,7 +891,7 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l /* Check P2P Device Info ATTR */ if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, NULL, (uint *)&attr_contentlen)) { DBG_88E("[%s] Got P2P DEVICE INFO Attr!!\n", __func__); - pattr_content = rtw_zmalloc(attr_contentlen); + pattr_content = kzalloc(attr_contentlen, GFP_KERNEL); pbuf = pattr_content; if (pattr_content) { u8 num_of_secdev_type; @@ -1738,13 +1738,13 @@ u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue) return res; if (enqueue) { - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm)); + pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); if (pdrvextra_cmd_parm == NULL) { kfree(ph2c); res = _FAIL; diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c index a0b157687db2..2e709e678cb9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c @@ -935,7 +935,7 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len) return true; } - bssid = (struct wlan_bssid_ex *)rtw_zmalloc(sizeof(struct wlan_bssid_ex)); + bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_KERNEL); subtype = GetFrameSubType(pframe) >> 4; diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 8f380f39ce3b..d358651ce772 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1637,7 +1637,7 @@ void rtw_alloc_hwxmits(struct adapter *padapter) pxmitpriv->hwxmit_entry = HWXMIT_ENTRY; - pxmitpriv->hwxmits = (struct hw_xmit *)rtw_zmalloc(sizeof(struct hw_xmit) * pxmitpriv->hwxmit_entry); + pxmitpriv->hwxmits = kzalloc(sizeof(struct hw_xmit) * pxmitpriv->hwxmit_entry, GFP_KERNEL); hwxmits = pxmitpriv->hwxmits; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 2ab1c8055384..99ad9c706f7d 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -503,7 +503,7 @@ static void SetFwRsvdPagePkt(struct adapter *adapt, bool bDLFinished) struct rsvdpage_loc RsvdPageLoc; DBG_88E("%s\n", __func__); - ReservedPagePacket = (u8 *)rtw_zmalloc(1000); + ReservedPagePacket = kzalloc(1000, GFP_KERNEL); if (ReservedPagePacket == NULL) { DBG_88E("%s: alloc ReservedPagePacket fail!\n", __func__); return; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c index ad966e59b8bd..f25c87c63250 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c @@ -41,7 +41,7 @@ int rtl8188eu_init_recv_priv(struct adapter *padapter) /* init recv_buf */ _rtw_init_queue(&precvpriv->free_recv_buf_queue); - precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4); + precvpriv->pallocated_recv_buf = kzalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4, GFP_KERNEL); if (precvpriv->pallocated_recv_buf == NULL) { res = _FAIL; RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("alloc recv_buf fail!\n")); diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 3a539e49f02b..19cf5f551c40 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -2211,7 +2211,7 @@ void rtl8188eu_set_hal_ops(struct adapter *adapt) struct hal_ops *halfunc = &adapt->HalFunc; - adapt->HalData = rtw_zmalloc(sizeof(struct hal_data_8188e)); + adapt->HalData = kzalloc(sizeof(struct hal_data_8188e), GFP_KERNEL); if (adapt->HalData == NULL) DBG_88E("cant not alloc memory for HAL DATA\n"); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 7c2336fea456..acce3e6f1249 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -188,11 +188,9 @@ extern unsigned char WPA_TKIP_CIPHER[4]; extern unsigned char RSN_TKIP_CIPHER[4]; #define rtw_update_mem_stat(flag, sz) do {} while (0) -u8 *_rtw_zmalloc(u32 sz); u8 *_rtw_malloc(u32 sz); void _rtw_mfree(u8 *pbuf, u32 sz); #define rtw_malloc(sz) _rtw_malloc((sz)) -#define rtw_zmalloc(sz) _rtw_zmalloc((sz)) #define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz)) void *rtw_malloc2d(int h, int w, int size); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 5cca278ae206..284a28ecca3b 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -632,7 +632,7 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie } if (ielen) { - buf = rtw_zmalloc(ielen); + buf = kzalloc(ielen, GFP_KERNEL); if (buf == NULL) { ret = -ENOMEM; goto exit; @@ -4721,13 +4721,13 @@ static u8 set_pairwise_key(struct adapter *padapter, struct sta_info *psta) struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; - ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetstakey_para = (struct set_stakey_parm *)rtw_zmalloc(sizeof(struct set_stakey_parm)); + psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); if (psetstakey_para == NULL) { kfree(ph2c); res = _FAIL; @@ -4759,12 +4759,12 @@ static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) DBG_88E("%s\n", __func__); - pcmd = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj)); + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmd == NULL) { res = _FAIL; goto exit; } - psetkeyparm = (struct setkey_parm *)rtw_zmalloc(sizeof(struct setkey_parm)); + psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL); if (psetkeyparm == NULL) { kfree(pcmd); res = _FAIL; @@ -5672,12 +5672,12 @@ static int rtw_mp_efuse_get(struct net_device *dev, pEfuseHal = &haldata->EfuseHal; err = 0; - data = _rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN); + data = kzalloc(EFUSE_BT_MAX_MAP_LEN, GFP_KERNEL); if (data == NULL) { err = -ENOMEM; goto exit; } - rawdata = _rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN); + rawdata = kzalloc(EFUSE_BT_MAX_MAP_LEN, GFP_KERNEL); if (rawdata == NULL) { err = -ENOMEM; goto exit; @@ -5916,7 +5916,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, haldata = GET_HAL_DATA(padapter); pEfuseHal = &haldata->EfuseHal; err = 0; - setdata = _rtw_zmalloc(1024); + setdata = kzalloc(1024, GFP_KERNEL); if (setdata == NULL) { err = -ENOMEM; goto exit; @@ -7438,7 +7438,7 @@ static int rtw_test( DBG_88E("+%s\n", __func__); len = wrqu->data.length; - pbuf = (u8 *)rtw_zmalloc(len); + pbuf = kzalloc(len, GFP_KERNEL); if (pbuf == NULL) { DBG_88E("%s: no memory!\n", __func__); return -ENOMEM; @@ -7783,7 +7783,7 @@ static int rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq_ memcpy(&wdata, wrq_data, sizeof(wdata)); input_len = wdata.data.length; - input = rtw_zmalloc(input_len); + input = kzalloc(input_len, GFP_KERNEL); if (NULL == input) return -ENOMEM; if (copy_from_user(input, wdata.data.pointer, input_len)) { @@ -7850,7 +7850,7 @@ static int rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq_ k = j; } - buffer = rtw_zmalloc(4096); + buffer = kzalloc(4096, GFP_KERNEL); if (NULL == buffer) { err = -ENOMEM; goto exit; @@ -7999,7 +7999,7 @@ static int rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq_ else n = wdata.data.length; - output = rtw_zmalloc(4096); + output = kzalloc(4096, GFP_KERNEL); if (NULL == output) { err = -ENOMEM; goto exit; diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 2a4469dec8e9..fa3182061150 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -47,20 +47,11 @@ u8 *_rtw_malloc(u32 sz) return pbuf; } -u8 *_rtw_zmalloc(u32 sz) -{ - u8 *pbuf = _rtw_malloc(sz); - - if (pbuf != NULL) - memset(pbuf, 0, sz); - return pbuf; -} - void *rtw_malloc2d(int h, int w, int size) { int j; - void **a = (void **)rtw_zmalloc(h*sizeof(void *) + h*w*size); + void **a = (void **)kzalloc(h*sizeof(void *) + h*w*size, GFP_KERNEL); if (a == NULL) { pr_info("%s: alloc memory fail!\n", __func__); return NULL; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 714c14e5d4f5..3c8720c8598d 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -66,7 +66,7 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) struct usb_device *pusbd; - pdvobjpriv = (struct dvobj_priv *)rtw_zmalloc(sizeof(*pdvobjpriv)); + pdvobjpriv = kzalloc(sizeof(*pdvobjpriv), GFP_KERNEL); if (pdvobjpriv == NULL) goto exit; @@ -116,7 +116,7 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) pdvobjpriv->ishighspeed = false; mutex_init(&pdvobjpriv->usb_vendor_req_mutex); - pdvobjpriv->usb_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE); + pdvobjpriv->usb_vendor_req_buf = kzalloc(MAX_USB_IO_CTL_SIZE, GFP_KERNEL); if (!pdvobjpriv->usb_vendor_req_buf) goto free_dvobj; diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c index 5ccc186fa4e3..b4f220d3afac 100644 --- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c @@ -80,7 +80,7 @@ int rtw_os_xmit_resource_alloc(struct adapter *padapter, struct xmit_buf *pxmitb { int i; - pxmitbuf->pallocated_buf = rtw_zmalloc(alloc_sz); + pxmitbuf->pallocated_buf = kzalloc(alloc_sz, GFP_KERNEL); if (pxmitbuf->pallocated_buf == NULL) return _FAIL; -- cgit From 8670c6be4c099a25bcc1ce8c7426bbc52a12ee78 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:24 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_division64() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 6 ------ 2 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index acce3e6f1249..bf9bf3cef770 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -305,7 +305,6 @@ void rtw_free_netdev(struct net_device *netdev); #define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)), (sig), 1) u64 rtw_modular64(u64 x, u64 y); -u64 rtw_division64(u64 x, u64 y); /* Macros for handling unaligned memory accesses */ diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index fa3182061150..d63feea8731c 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -225,12 +225,6 @@ u64 rtw_modular64(u64 x, u64 y) return do_div(x, y); } -u64 rtw_division64(u64 x, u64 y) -{ - do_div(x, y); - return x; -} - void rtw_buf_free(u8 **buf, u32 *buf_len) { *buf_len = 0; -- cgit From 8151ee9def3f8b6ea6f086941d90138d54244b4c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:25 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_get_time_interval_ms() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index bf9bf3cef770..e9d530930511 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -207,7 +207,6 @@ u32 _rtw_queue_empty(struct __queue *pqueue); u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); -s32 rtw_get_time_interval_ms(u32 start, u32 end); static inline unsigned char _cancel_timer_ex(struct timer_list *ptimer) { diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index d63feea8731c..76b02b570916 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -98,11 +98,6 @@ inline s32 rtw_get_passing_time_ms(u32 start) return rtw_systime_to_ms(jiffies-start); } -inline s32 rtw_get_time_interval_ms(u32 start, u32 end) -{ - return rtw_systime_to_ms(end-start); -} - #define RTW_SUSPEND_LOCK_NAME "rtw_wifi" struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, -- cgit From ba598a16a224468d240b981b170ab79d32794fac Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:26 +0530 Subject: staging: rtl8188eu: osdep_service.h: Remove unused macro, enum and variables Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 27 ----------------------- 1 file changed, 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index e9d530930511..294b2348411c 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -163,30 +163,6 @@ static inline int rtw_netif_queue_stopped(struct net_device *pnetdev) extern int RTW_STATUS_CODE(int error_code); -/* flags used for rtw_update_mem_stat() */ -enum { - MEM_STAT_VIR_ALLOC_SUCCESS, - MEM_STAT_VIR_ALLOC_FAIL, - MEM_STAT_VIR_FREE, - MEM_STAT_PHY_ALLOC_SUCCESS, - MEM_STAT_PHY_ALLOC_FAIL, - MEM_STAT_PHY_FREE, - MEM_STAT_TX, /* used to distinguish TX/RX, asigned from caller */ - MEM_STAT_TX_ALLOC_SUCCESS, - MEM_STAT_TX_ALLOC_FAIL, - MEM_STAT_TX_FREE, - MEM_STAT_RX, /* used to distinguish TX/RX, asigned from caller */ - MEM_STAT_RX_ALLOC_SUCCESS, - MEM_STAT_RX_ALLOC_FAIL, - MEM_STAT_RX_FREE -}; - -extern unsigned char MCS_rate_2R[16]; -extern unsigned char MCS_rate_1R[16]; -extern unsigned char RTW_WPA_OUI[]; -extern unsigned char WPA_TKIP_CIPHER[4]; -extern unsigned char RSN_TKIP_CIPHER[4]; - #define rtw_update_mem_stat(flag, sz) do {} while (0) u8 *_rtw_malloc(u32 sz); void _rtw_mfree(u8 *pbuf, u32 sz); @@ -277,9 +253,6 @@ static inline u32 bitshift(u32 bitmask) return i; } -/* limitation of path length */ -#define PATH_LENGTH_MAX PATH_MAX - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From 8d5bdece42d9cb0daf7d0ab1cd7b263adb365f7a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:27 +0530 Subject: staging: rtl8188eu: Replace rtw_list_delete() with list_del_init() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 12 ++++---- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mlme.c | 10 +++---- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 10 +++---- drivers/staging/rtl8188eu/core/rtw_recv.c | 14 ++++----- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 16 +++++----- drivers/staging/rtl8188eu/core/rtw_xmit.c | 36 +++++++++++------------ drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 4 +-- drivers/staging/rtl8188eu/include/osdep_service.h | 7 ----- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 2 +- 10 files changed, 53 insertions(+), 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index c3c4649034e2..19871858723b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -295,7 +295,7 @@ void expire_timeout_chk(struct adapter *padapter) if (psta->expire_to > 0) { psta->expire_to--; if (psta->expire_to == 0) { - rtw_list_delete(&psta->auth_list); + list_del_init(&psta->auth_list); pstapriv->auth_list_cnt--; DBG_88E("auth expire %6ph\n", @@ -365,7 +365,7 @@ void expire_timeout_chk(struct adapter *padapter) continue; } - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; DBG_88E("asoc expire %pM, state = 0x%x\n", (psta->hwaddr), psta->state); @@ -421,7 +421,7 @@ void expire_timeout_chk(struct adapter *padapter) DBG_88E("asoc expire %pM, state = 0x%x\n", (psta->hwaddr), psta->state); spin_lock_bh(&pstapriv->asoc_list_lock); - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); spin_unlock_bh(&pstapriv->asoc_list_lock); @@ -1215,7 +1215,7 @@ int rtw_acl_remove_sta(struct adapter *padapter, u8 *addr) if (paclnode->valid) { paclnode->valid = false; - rtw_list_delete(&paclnode->list); + list_del_init(&paclnode->list); pacl_list->num--; } @@ -1818,7 +1818,7 @@ int rtw_sta_flush(struct adapter *padapter) plist = plist->next; - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); @@ -1949,7 +1949,7 @@ void stop_ap_mode(struct adapter *padapter) if (paclnode->valid) { paclnode->valid = false; - rtw_list_delete(&paclnode->list); + list_del_init(&paclnode->list); pacl_list->num--; } diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 3f37927abbf6..8d36e2c6279f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -159,7 +159,7 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue) obj = NULL; } else { obj = container_of((&queue->queue)->next, struct cmd_obj, list); - rtw_list_delete(&obj->list); + list_del_init(&obj->list); } spin_unlock_irqrestore(&queue->lock, irqL); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index f6198299cdb4..20b180a9b60f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -154,7 +154,7 @@ struct wlan_network *_rtw_dequeue_network(struct __queue *queue) } else { pnetwork = container_of((&queue->queue)->next, struct wlan_network, list); - rtw_list_delete(&(pnetwork->list)); + list_del_init(&(pnetwork->list)); } spin_unlock_bh(&queue->lock); @@ -178,7 +178,7 @@ struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)/* _queue *f pnetwork = container_of(plist , struct wlan_network, list); - rtw_list_delete(&pnetwork->list); + list_del_init(&pnetwork->list); RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("_rtw_alloc_network: ptr=%p\n", plist)); pnetwork->network_type = 0; @@ -216,7 +216,7 @@ void _rtw_free_network(struct mlme_priv *pmlmepriv , struct wlan_network *pnetwo return; } spin_lock_bh(&free_queue->lock); - rtw_list_delete(&(pnetwork->list)); + list_del_init(&(pnetwork->list)); list_add_tail(&(pnetwork->list), &(free_queue->queue)); pmlmepriv->num_of_scanned--; spin_unlock_bh(&free_queue->lock); @@ -230,7 +230,7 @@ void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network * return; if (pnetwork->fixed) return; - rtw_list_delete(&(pnetwork->list)); + list_del_init(&(pnetwork->list)); list_add_tail(&(pnetwork->list), get_list_head(free_queue)); pmlmepriv->num_of_scanned--; } @@ -826,7 +826,7 @@ static void free_scanqueue(struct mlme_priv *pmlmepriv) while (plist != phead) { ptemp = plist->next; - rtw_list_delete(plist); + list_del_init(plist); list_add_tail(plist, &free_queue->queue); plist = ptemp; pmlmepriv->num_of_scanned--; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 08b5620ce87e..480c6de51681 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -818,7 +818,7 @@ unsigned int OnAuth(struct adapter *padapter, struct recv_frame *precv_frame) } else { spin_lock_bh(&pstapriv->asoc_list_lock); if (!list_empty(&pstat->asoc_list)) { - rtw_list_delete(&pstat->asoc_list); + list_del_init(&pstat->asoc_list); pstapriv->asoc_list_cnt--; } spin_unlock_bh(&pstapriv->asoc_list_lock); @@ -1408,7 +1408,7 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame spin_lock_bh(&pstapriv->auth_list_lock); if (!list_empty(&pstat->auth_list)) { - rtw_list_delete(&pstat->auth_list); + list_del_init(&pstat->auth_list); pstapriv->auth_list_cnt--; } spin_unlock_bh(&pstapriv->auth_list_lock); @@ -1601,7 +1601,7 @@ unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame) spin_lock_bh(&pstapriv->asoc_list_lock); if (!list_empty(&psta->asoc_list)) { - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, false, reason); } @@ -1665,7 +1665,7 @@ unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame spin_lock_bh(&pstapriv->asoc_list_lock); if (!list_empty(&psta->asoc_list)) { - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, false, reason); } @@ -8379,7 +8379,7 @@ u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf) xmitframe_plist = xmitframe_plist->next; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); psta_bmc->sleepq_len--; if (psta_bmc->sleepq_len > 0) diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index a2bdcd7c3456..e2be938b04c9 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -140,7 +140,7 @@ struct recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue) hdr = container_of(plist, struct recv_frame, list); - rtw_list_delete(&hdr->list); + list_del_init(&hdr->list); padapter = hdr->adapter; if (padapter != NULL) { precvpriv = &padapter->recvpriv; @@ -191,7 +191,7 @@ int rtw_free_recvframe(struct recv_frame *precvframe, spin_lock_bh(&pfree_recv_queue->lock); - rtw_list_delete(&(precvframe->list)); + list_del_init(&(precvframe->list)); precvframe->len = 0; @@ -214,7 +214,7 @@ int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue) struct recv_priv *precvpriv = &padapter->recvpriv; - rtw_list_delete(&(precvframe->list)); + list_del_init(&(precvframe->list)); list_add_tail(&(precvframe->list), get_list_head(queue)); if (padapter != NULL) { @@ -1044,7 +1044,7 @@ static int validate_recv_ctrl_frame(struct adapter *padapter, xmitframe_plist = xmitframe_plist->next; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); psta->sleepq_len--; @@ -1454,7 +1454,7 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter, plist = phead->next; pfhdr = container_of(plist, struct recv_frame, list); prframe = (struct recv_frame *)pfhdr; - rtw_list_delete(&(prframe->list)); + list_del_init(&(prframe->list)); if (curfragnum != pfhdr->attrib.frag_num) { /* the first fragment number must be 0 */ @@ -1789,7 +1789,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, break; } - rtw_list_delete(&(prframe->list)); + list_del_init(&(prframe->list)); list_add_tail(&(prframe->list), plist); return true; @@ -1830,7 +1830,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor ("recv_indicatepkts_in_order: indicate=%d seq=%d amsdu=%d\n", preorder_ctrl->indicate_seq, pattrib->seq_num, pattrib->amsdu)); plist = plist->next; - rtw_list_delete(&(prframe->list)); + list_del_init(&(prframe->list)); if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num)) preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF; diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index 60f248240c38..c6a249d65ceb 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -228,7 +228,7 @@ struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) psta = NULL; } else { psta = container_of((&pfree_sta_queue->queue)->next, struct sta_info, list); - rtw_list_delete(&(psta->list)); + list_del_init(&(psta->list)); spin_unlock_bh(&pfree_sta_queue->lock); _rtw_init_stainfo(psta); memcpy(psta->hwaddr, hwaddr, ETH_ALEN); @@ -317,23 +317,23 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->vo_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vo_q.tx_pending)); rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->vi_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vi_q.tx_pending)); rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending)); + list_del_init(&(pstaxmitpriv->bk_q.tx_pending)); rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->be_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending)); + list_del_init(&(pstaxmitpriv->be_q.tx_pending)); spin_unlock_bh(&pxmitpriv->lock); - rtw_list_delete(&psta->hash_list); + list_del_init(&psta->hash_list); RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_, ("\n free number_%d stainfo with hwaddr=0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n", pstapriv->asoc_sta_count , psta->hwaddr[0], psta->hwaddr[1], psta->hwaddr[2], psta->hwaddr[3], psta->hwaddr[4], psta->hwaddr[5])); pstapriv->asoc_sta_count--; @@ -368,7 +368,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) plist = plist->next; - rtw_list_delete(&(prframe->list)); + list_del_init(&(prframe->list)); rtw_free_recvframe(prframe, pfree_recv_queue); } @@ -383,7 +383,7 @@ u32 rtw_free_stainfo(struct adapter *padapter , struct sta_info *psta) spin_lock_bh(&pstapriv->auth_list_lock); if (!list_empty(&psta->auth_list)) { - rtw_list_delete(&psta->auth_list); + list_del_init(&psta->auth_list); pstapriv->auth_list_cnt--; } spin_unlock_bh(&pstapriv->auth_list_lock); diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index d358651ce772..ddc712f7ad00 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1231,7 +1231,7 @@ struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv) pxmitbuf = container_of(plist, struct xmit_buf, list); - rtw_list_delete(&(pxmitbuf->list)); + list_del_init(&(pxmitbuf->list)); } if (pxmitbuf != NULL) { @@ -1263,7 +1263,7 @@ s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) spin_lock_irqsave(&pfree_queue->lock, irql); - rtw_list_delete(&pxmitbuf->list); + list_del_init(&pxmitbuf->list); list_add_tail(&(pxmitbuf->list), get_list_head(pfree_queue)); pxmitpriv->free_xmit_extbuf_cnt++; @@ -1295,7 +1295,7 @@ struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv) pxmitbuf = container_of(plist, struct xmit_buf, list); - rtw_list_delete(&(pxmitbuf->list)); + list_del_init(&(pxmitbuf->list)); } if (pxmitbuf != NULL) { @@ -1330,7 +1330,7 @@ s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) } else { spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irql); - rtw_list_delete(&pxmitbuf->list); + list_del_init(&pxmitbuf->list); list_add_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); @@ -1379,7 +1379,7 @@ struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)/* _queue *pf pxframe = container_of(plist, struct xmit_frame, list); - rtw_list_delete(&(pxframe->list)); + list_del_init(&(pxframe->list)); } if (pxframe != NULL) { /* default value setting */ @@ -1422,7 +1422,7 @@ s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitfram spin_lock_bh(&pfree_xmit_queue->lock); - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); if (pxmitframe->pkt) { pndis_pkt = pxmitframe->pkt; @@ -1492,7 +1492,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str xmitframe_plist = xmitframe_plist->next; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); ptxservq->qcnt--; } @@ -1540,7 +1540,7 @@ struct xmit_frame *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmi /* Remove sta node when there are no pending packets. */ if (_rtw_queue_empty(pframe_queue)) /* must be done after get_next and before break */ - rtw_list_delete(&ptxservq->tx_pending); + list_del_init(&ptxservq->tx_pending); goto exit; } @@ -1800,7 +1800,7 @@ int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_fra spin_lock_bh(&psta->sleep_q.lock); if (pstapriv->sta_dz_bitmap) {/* if any one sta is in ps mode */ - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); @@ -1825,7 +1825,7 @@ int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_fra u8 wmmps_ac = 0; if (pstapriv->sta_dz_bitmap&BIT(psta->aid)) { - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q)); @@ -1919,21 +1919,21 @@ void stop_sta_xmit(struct adapter *padapter, struct sta_info *psta) pstapriv->sta_dz_bitmap |= BIT(psta->aid); dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vo_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->vo_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vo_q.tx_pending)); dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vi_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->vi_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vi_q.tx_pending)); dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->be_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending)); + list_del_init(&(pstaxmitpriv->be_q.tx_pending)); dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->bk_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending)); + list_del_init(&(pstaxmitpriv->bk_q.tx_pending)); /* for BC/MC Frames */ pstaxmitpriv = &psta_bmc->sta_xmitpriv; dequeue_xmitframes_to_sleeping_queue(padapter, psta_bmc, &pstaxmitpriv->be_q.sta_pending); - rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending)); + list_del_init(&(pstaxmitpriv->be_q.tx_pending)); spin_unlock_bh(&pxmitpriv->lock); } @@ -1956,7 +1956,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta) xmitframe_plist = xmitframe_plist->next; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); switch (pxmitframe->attrib.priority) { case 1: @@ -2037,7 +2037,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta) xmitframe_plist = xmitframe_plist->next; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); psta_bmc->sleepq_len--; if (psta_bmc->sleepq_len > 0) @@ -2107,7 +2107,7 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst if (!wmmps_ac) continue; - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); psta->sleepq_len--; psta->sleepq_ac_len--; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 1b2e4b2bcb2f..c0f23aa96afb 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -549,7 +549,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp pxmitframe->pkt_offset = 1; break; } - rtw_list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); ptxservq->qcnt--; phwxmit->accnt--; @@ -584,7 +584,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp } /* end while (aggregate same priority and same DA(AP or STA) frames) */ if (_rtw_queue_empty(&ptxservq->sta_pending) == true) - rtw_list_delete(&ptxservq->tx_pending); + list_del_init(&ptxservq->tx_pending); spin_unlock_bh(&pxmitpriv->lock); if ((pfirstframe->attrib.ether_type != 0x0806) && diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 294b2348411c..9f42d21fd7b0 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -76,11 +76,6 @@ static inline int _enter_critical_mutex(struct mutex *pmutex, return ret; } -static inline void rtw_list_delete(struct list_head *plist) -{ - list_del_init(plist); -} - static inline void _init_timer(struct timer_list *ptimer, struct net_device *nic_hdl, void *pfunc, void *cntx) @@ -173,8 +168,6 @@ void *rtw_malloc2d(int h, int w, int size); void _rtw_memcpy(void *dec, void *sour, u32 sz); -void rtw_list_delete(struct list_head *plist); - u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 284a28ecca3b..128efc44c2a6 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -5177,7 +5177,7 @@ static int rtw_del_sta(struct net_device *dev, struct ieee_param *param) if (psta) { spin_lock_bh(&pstapriv->asoc_list_lock); if (!list_empty(&psta->asoc_list)) { - rtw_list_delete(&psta->asoc_list); + list_del_init(&psta->asoc_list); pstapriv->asoc_list_cnt--; updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); } -- cgit From 5f223b9533d5524d8d2d2d2f56b78441c1a18b97 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:28 +0530 Subject: staging: rtl8188eu: osdep_service.c: Remove unused macro Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 76b02b570916..ff6ee5babe09 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -98,8 +98,6 @@ inline s32 rtw_get_passing_time_ms(u32 start) return rtw_systime_to_ms(jiffies-start); } -#define RTW_SUSPEND_LOCK_NAME "rtw_wifi" - struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv) { -- cgit From f7091bc63a22f99a6a0142ee0f027cfc4e199c22 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:29 +0530 Subject: staging: rtl8188eu: Replace _rtw_queue_empty() with list_empty() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 2 +- drivers/staging/rtl8188eu/core/rtw_mlme.c | 6 +++--- drivers/staging/rtl8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_sta_mgt.c | 2 +- drivers/staging/rtl8188eu/core/rtw_xmit.c | 16 ++++++++-------- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 8 files changed, 16 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 7426d007959d..a97da87f317c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -85,7 +85,7 @@ u8 rtw_do_join(struct adapter *padapter) pmlmepriv->to_join = true; - if (_rtw_queue_empty(queue)) { + if (list_empty(&queue->queue)) { spin_unlock_bh(&(pmlmepriv->scanned_queue.lock)); _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 20b180a9b60f..c03442d97673 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -149,7 +149,7 @@ struct wlan_network *_rtw_dequeue_network(struct __queue *queue) spin_lock_bh(&queue->lock); - if (_rtw_queue_empty(queue)) { + if (list_empty(&queue->queue)) { pnetwork = NULL; } else { pnetwork = container_of((&queue->queue)->next, struct wlan_network, list); @@ -170,7 +170,7 @@ struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)/* _queue *f spin_lock_bh(&free_queue->lock); - if (_rtw_queue_empty(free_queue) == true) { + if (list_empty(&free_queue->queue)) { pnetwork = NULL; goto exit; } @@ -535,7 +535,7 @@ void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *t /* If we didn't find a match, then get a new network slot to initialize * with this beacon's information */ if (phead == plist) { - if (_rtw_queue_empty(&(pmlmepriv->free_bss_pool)) == true) { + if (list_empty(&(pmlmepriv->free_bss_pool.queue))) { /* If there are no more slots, expire the oldest */ pnetwork = oldest; diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index e2be938b04c9..56aa8861b900 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -131,7 +131,7 @@ struct recv_frame *_rtw_alloc_recvframe (struct __queue *pfree_recv_queue) struct adapter *padapter; struct recv_priv *precvpriv; - if (_rtw_queue_empty(pfree_recv_queue)) { + if (list_empty(&pfree_recv_queue->queue)) { hdr = NULL; } else { phead = get_list_head(pfree_recv_queue); @@ -1563,7 +1563,7 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, if (pdefrag_q != NULL) { if (fragnum == 0) { /* the first fragment */ - if (_rtw_queue_empty(pdefrag_q) == false) { + if (!list_empty(&pdefrag_q->queue)) { /* free current defrag_q */ rtw_free_recvframe_queue(pdefrag_q, pfree_recv_queue); } diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index c6a249d65ceb..e1dc8fa82d38 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -223,7 +223,7 @@ struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) spin_lock_bh(&(pfree_sta_queue->lock)); - if (_rtw_queue_empty(pfree_sta_queue) == true) { + if (list_empty(&pfree_sta_queue->queue)) { spin_unlock_bh(&pfree_sta_queue->lock); psta = NULL; } else { diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index ddc712f7ad00..3a40b2a43b79 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -901,10 +901,10 @@ s32 rtw_txframes_pending(struct adapter *padapter) { struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - return ((_rtw_queue_empty(&pxmitpriv->be_pending) == false) || - (_rtw_queue_empty(&pxmitpriv->bk_pending) == false) || - (_rtw_queue_empty(&pxmitpriv->vi_pending) == false) || - (_rtw_queue_empty(&pxmitpriv->vo_pending) == false)); + return (!list_empty(&pxmitpriv->be_pending.queue) || + !list_empty(&pxmitpriv->bk_pending.queue) || + !list_empty(&pxmitpriv->vi_pending.queue) || + !list_empty(&pxmitpriv->vo_pending.queue)); } s32 rtw_txframes_sta_ac_pending(struct adapter *padapter, struct pkt_attrib *pattrib) @@ -1222,7 +1222,7 @@ struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv) spin_lock_irqsave(&pfree_queue->lock, irql); - if (_rtw_queue_empty(pfree_queue) == true) { + if (list_empty(&pfree_queue->queue)) { pxmitbuf = NULL; } else { phead = get_list_head(pfree_queue); @@ -1286,7 +1286,7 @@ struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv) spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irql); - if (_rtw_queue_empty(pfree_xmitbuf_queue) == true) { + if (list_empty(&pfree_xmitbuf_queue->queue)) { pxmitbuf = NULL; } else { phead = get_list_head(pfree_xmitbuf_queue); @@ -1369,7 +1369,7 @@ struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)/* _queue *pf spin_lock_bh(&pfree_xmit_queue->lock); - if (_rtw_queue_empty(pfree_xmit_queue) == true) { + if (list_empty(&pfree_xmit_queue->queue)) { RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe:%d\n", pxmitpriv->free_xmitframe_cnt)); pxframe = NULL; } else { @@ -1539,7 +1539,7 @@ struct xmit_frame *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmi phwxmit->accnt--; /* Remove sta node when there are no pending packets. */ - if (_rtw_queue_empty(pframe_queue)) /* must be done after get_next and before break */ + if (list_empty(&pframe_queue->queue)) /* must be done after get_next and before break */ list_del_init(&ptxservq->tx_pending); goto exit; } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index c0f23aa96afb..ba8beb88d53c 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -583,7 +583,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp } } /* end while (aggregate same priority and same DA(AP or STA) frames) */ - if (_rtw_queue_empty(&ptxservq->sta_pending) == true) + if (list_empty(&ptxservq->sta_pending.queue)) list_del_init(&ptxservq->tx_pending); spin_unlock_bh(&pxmitpriv->lock); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 9f42d21fd7b0..a55b78639879 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -171,7 +171,6 @@ void _rtw_memcpy(void *dec, void *sour, u32 sz); u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); -u32 _rtw_queue_empty(struct __queue *pqueue); u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index ff6ee5babe09..de0efe2759ff 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -77,11 +77,6 @@ void _rtw_init_queue(struct __queue *pqueue) spin_lock_init(&(pqueue->lock)); } -u32 _rtw_queue_empty(struct __queue *pqueue) -{ - return list_empty(&(pqueue->queue)); -} - inline u32 rtw_systime_to_ms(u32 systime) { return systime * 1000 / HZ; -- cgit From dee7c7f8f0d58ef1740a960bbf966cbd1a43e5fa Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:30 +0530 Subject: staging: rtl8188eu: Replace _cancel_workitem_sync() with cancel_work_sync() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/core/rtw_led.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 5 ----- 3 files changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 8d36e2c6279f..a292c5d1a45c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -96,7 +96,7 @@ void rtw_free_evt_priv(struct evt_priv *pevtpriv) RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("+rtw_free_evt_priv\n")); - _cancel_workitem_sync(&pevtpriv->c2h_wk); + cancel_work_sync(&pevtpriv->c2h_wk); while (pevtpriv->c2h_wk_alive) msleep(10); diff --git a/drivers/staging/rtl8188eu/core/rtw_led.c b/drivers/staging/rtl8188eu/core/rtw_led.c index 87d6f063476b..a266f340da94 100644 --- a/drivers/staging/rtl8188eu/core/rtw_led.c +++ b/drivers/staging/rtl8188eu/core/rtw_led.c @@ -88,7 +88,7 @@ void InitLed871x(struct adapter *padapter, struct LED_871x *pLed) /* */ void DeInitLed871x(struct LED_871x *pLed) { - _cancel_workitem_sync(&(pLed->BlinkWorkItem)); + cancel_work_sync(&(pLed->BlinkWorkItem)); _cancel_timer_ex(&(pLed->BlinkTimer)); ResetLedStatus(pLed); } diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index a55b78639879..bc1ffd40bb70 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -101,11 +101,6 @@ static inline void _cancel_timer(struct timer_list *ptimer, u8 *bcancelled) #define RTW_DECLARE_TIMER_HDL(name) \ void RTW_TIMER_HDL_NAME(name)(RTW_TIMER_HDL_ARGS) -static inline void _cancel_workitem_sync(struct work_struct *pwork) -{ - cancel_work_sync(pwork); -} - static inline int rtw_netif_queue_stopped(struct net_device *pnetdev) { return netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) && -- cgit From f31dcb4d96a2f6a79d29ac24a0df5cf0ccb230d0 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:31 +0530 Subject: staging: rtl8188eu: Remove unused inline function _RND512() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index bc1ffd40bb70..27a610f43ecf 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -222,14 +222,6 @@ static inline u32 _RND256(u32 sz) return val; } -static inline u32 _RND512(u32 sz) -{ - u32 val; - - val = ((sz >> 9) + ((sz & 511) ? 1 : 0)) << 9; - return val; -} - static inline u32 bitshift(u32 bitmask) { u32 i; -- cgit From c495fc9eba67ca2c009fef7a02ae0da1aa17b9a7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:32 +0530 Subject: staging: rtl8188eu: Replace _cancel_timer_ex() with del_timer_sync() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_led.c | 50 +++++++++++------------ drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 37 ++++++++--------- drivers/staging/rtl8188eu/include/osdep_service.h | 5 --- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 2 +- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 16 ++++---- 5 files changed, 52 insertions(+), 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_led.c b/drivers/staging/rtl8188eu/core/rtw_led.c index a266f340da94..384be22052e5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_led.c +++ b/drivers/staging/rtl8188eu/core/rtw_led.c @@ -89,7 +89,7 @@ void InitLed871x(struct adapter *padapter, struct LED_871x *pLed) void DeInitLed871x(struct LED_871x *pLed) { cancel_work_sync(&(pLed->BlinkWorkItem)); - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); ResetLedStatus(pLed); } @@ -251,11 +251,11 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } @@ -273,11 +273,11 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedLinkBlinkInProgress = true; @@ -296,15 +296,15 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct if (IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; @@ -323,11 +323,11 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } pLed->bLedBlinkInProgress = true; @@ -344,19 +344,19 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct case LED_CTL_START_WPS_BOTTON: if (!pLed->bLedWPSBlinkInProgress) { if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } pLed->bLedWPSBlinkInProgress = true; @@ -370,23 +370,23 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct break; case LED_CTL_STOP_WPS: if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } if (pLed->bLedWPSBlinkInProgress) - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); else pLed->bLedWPSBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_WPS_STOP; @@ -400,7 +400,7 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct break; case LED_CTL_STOP_WPS_FAIL: if (pLed->bLedWPSBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; @@ -415,23 +415,23 @@ static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAct pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if (pLed->bLedNoLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedLinkBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedWPSBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress) { - _cancel_timer_ex(&(pLed->BlinkTimer)); + del_timer_sync(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } SwLedOff(padapter, pLed); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 480c6de51681..1b855b4cbc4e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -408,9 +408,8 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext) return; if (padapter->bDriverStopped) { - _cancel_timer_ex(&pmlmeext->survey_timer); - _cancel_timer_ex(&pmlmeext->link_timer); - /* _cancel_timer_ex(&pmlmeext->ADDBA_timer); */ + del_timer_sync(&pmlmeext->survey_timer); + del_timer_sync(&pmlmeext->link_timer); } } @@ -1495,7 +1494,7 @@ unsigned int OnAssocRsp(struct adapter *padapter, struct recv_frame *precv_frame if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) return _SUCCESS; - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); /* status */ status = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN + 2)); @@ -1578,7 +1577,7 @@ unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame) #ifdef CONFIG_88EU_P2P if (pwdinfo->rx_invitereq_info.scan_op_ch_only) { - _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey); + del_timer_sync(&pwdinfo->reset_ch_sitesurvey); _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); } #endif /* CONFIG_88EU_P2P */ @@ -1642,7 +1641,7 @@ unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame #ifdef CONFIG_88EU_P2P if (pwdinfo->rx_invitereq_info.scan_op_ch_only) { - _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey); + del_timer_sync(&pwdinfo->reset_ch_sitesurvey); _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); } #endif /* CONFIG_88EU_P2P */ @@ -3912,7 +3911,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) return _FAIL; #ifdef CONFIG_88EU_P2P - _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey); + del_timer_sync(&pwdinfo->reset_ch_sitesurvey); /* Do nothing if the driver doesn't enable the P2P function. */ if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) return _SUCCESS; @@ -3930,7 +3929,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL)) { /* Commented by Albert 20110526 */ /* In this case, this means the previous nego fail doesn't be reset yet. */ - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); /* Restore the previous p2p state */ rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); DBG_88E("[%s] Restore the previous p2p state to %d\n", __func__, rtw_p2p_state(pwdinfo)); @@ -3960,7 +3959,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) { /* Commented by Albert 20110425 */ /* The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function. */ - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); pwdinfo->nego_req_info.benable = false; result = process_p2p_group_negotation_resp(pwdinfo, frame_body, len); issue_p2p_GO_confirm(pwdinfo->padapter, GetAddr2Ptr(pframe), result); @@ -4111,7 +4110,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) u32 attr_contentlen = 0; DBG_88E("[%s] Got invite response frame!\n", __func__); - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen); if (p2p_ie) { rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); @@ -4169,7 +4168,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) DBG_88E("[%s] Got Provisioning Discovery Response Frame\n", __func__); /* Commented by Albert 20110426 */ /* The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function. */ - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP); process_p2p_provdisc_resp(pwdinfo, pframe); _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT); @@ -5866,7 +5865,7 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s #ifdef CONFIG_88EU_P2P if (!(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) && (pwdinfo->rx_invitereq_info.scan_op_ch_only)) { - _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey); + del_timer_sync(&pwdinfo->reset_ch_sitesurvey); _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); } #endif /* CONFIG_88EU_P2P */ @@ -6813,7 +6812,7 @@ void start_clnt_auth(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); pmlmeinfo->state &= (~WIFI_FW_AUTH_NULL); pmlmeinfo->state |= WIFI_FW_AUTH_STATE; @@ -6844,7 +6843,7 @@ void start_clnt_assoc(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); pmlmeinfo->state &= (~(WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE)); pmlmeinfo->state |= (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE); @@ -7491,7 +7490,7 @@ void mlmeext_sta_del_event_callback(struct adapter *padapter) /* set MSR to no link state -> infra. mode */ Set_MSR(padapter, _HW_STATE_STATION_); - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); } } @@ -7829,7 +7828,7 @@ u8 createbss_hdl(struct adapter *padapter, u8 *pbuf) /* rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); */ /* cancel link timer */ - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); /* clear CAM */ flush_all_cam_entry(padapter); @@ -7869,7 +7868,7 @@ u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf) /* clear CAM */ flush_all_cam_entry(padapter); - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); /* set MSR to nolink -> infra. mode */ Set_MSR(padapter, _HW_STATE_STATION_); @@ -7955,7 +7954,7 @@ u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf) rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type)); /* cancel link timer */ - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); start_clnt_join(padapter); @@ -7999,7 +7998,7 @@ u8 disconnect_hdl(struct adapter *padapter, unsigned char *pbuf) flush_all_cam_entry(padapter); - _cancel_timer_ex(&pmlmeext->link_timer); + del_timer_sync(&pmlmeext->link_timer); rtw_free_uc_swdec_pending_queue(padapter); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 27a610f43ecf..64ef9bdafc2d 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -171,11 +171,6 @@ u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); -static inline unsigned char _cancel_timer_ex(struct timer_list *ptimer) -{ - return del_timer_sync(ptimer); -} - static inline void thread_enter(char *name) { allow_signal(SIGTERM); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 128efc44c2a6..221366fbf1e7 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -3441,7 +3441,7 @@ static int rtw_p2p_connect(struct net_device *dev, memcpy(pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN); pwdinfo->nego_req_info.benable = true; - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); if (rtw_p2p_state(pwdinfo) != P2P_STATE_GONEGO_OK) { /* Restore to the listen state if the current p2p state is not nego OK */ rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN); diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 19fd8124ca17..7536be678a40 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -930,22 +930,22 @@ void rtw_cancel_all_timer(struct adapter *padapter) { RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+rtw_cancel_all_timer\n")); - _cancel_timer_ex(&padapter->mlmepriv.assoc_timer); + del_timer_sync(&padapter->mlmepriv.assoc_timer); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("rtw_cancel_all_timer:cancel association timer complete!\n")); - _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer); + del_timer_sync(&padapter->mlmepriv.scan_to_timer); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("rtw_cancel_all_timer:cancel scan_to_timer!\n")); - _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer); + del_timer_sync(&padapter->mlmepriv.dynamic_chk_timer); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("rtw_cancel_all_timer:cancel dynamic_chk_timer!\n")); /* cancel sw led timer */ rtw_hal_sw_led_deinit(padapter); RT_TRACE(_module_os_intfs_c_, _drv_info_, ("rtw_cancel_all_timer:cancel DeInitSwLeds!\n")); - _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer); + del_timer_sync(&padapter->pwrctrlpriv.pwr_state_check_timer); - _cancel_timer_ex(&padapter->recvpriv.signal_stat_timer); + del_timer_sync(&padapter->recvpriv.signal_stat_timer); } u8 rtw_free_drv_sw(struct adapter *padapter) @@ -959,9 +959,9 @@ u8 rtw_free_drv_sw(struct adapter *padapter) { struct wifidirect_info *pwdinfo = &padapter->wdinfo; if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - _cancel_timer_ex(&pwdinfo->find_phase_timer); - _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); - _cancel_timer_ex(&pwdinfo->pre_tx_scan_timer); + del_timer_sync(&pwdinfo->find_phase_timer); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); + del_timer_sync(&pwdinfo->pre_tx_scan_timer); rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE); } } -- cgit From 02b1c00d50d4bde996868e024b5d08d4ec19b181 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:33 +0530 Subject: staging: rtl8188eu: Use cpu_to_be32() instead of RTW_PUT_BE32() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_p2p.c | 8 +++----- drivers/staging/rtl8188eu/include/osdep_service.h | 10 ---------- 2 files changed, 3 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index 08404704257a..5bc1937f3d50 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -310,7 +310,7 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, wpsielen = 0; /* WPS OUI */ - RTW_PUT_BE32(wpsie, WPSOUI); + *((u32 *)(wpsie+wpsielen)) = cpu_to_be32(WPSOUI); wpsielen += 4; /* Config Method */ @@ -569,8 +569,7 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) p2pielen += 2; /* OUI */ - /* u32*) (p2pie + p2pielen) = cpu_to_be32(WPSOUI); */ - RTW_PUT_BE32(p2pie + p2pielen, WPSOUI); + *((u32 *)(p2pie + p2pielen)) = cpu_to_be32(WPSOUI); p2pielen += 4; /* Sub Category ID */ @@ -683,8 +682,7 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 p2pielen += 2; /* OUI */ - /* u32*) (p2pie + p2pielen) = cpu_to_be32(WPSOUI); */ - RTW_PUT_BE32(p2pie + p2pielen, WPSOUI); + *((u32 *)(p2pie + p2pielen)) = cpu_to_be32(WPSOUI); p2pielen += 4; /* Sub Category ID */ diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 64ef9bdafc2d..30613fc8b44c 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -155,9 +155,7 @@ extern int RTW_STATUS_CODE(int error_code); #define rtw_update_mem_stat(flag, sz) do {} while (0) u8 *_rtw_malloc(u32 sz); -void _rtw_mfree(u8 *pbuf, u32 sz); #define rtw_malloc(sz) _rtw_malloc((sz)) -#define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz)) void *rtw_malloc2d(int h, int w, int size); @@ -271,14 +269,6 @@ u64 rtw_modular64(u64 x, u64 y); #define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \ ((u32) (a)[2])) -#define RTW_PUT_BE32(a, val) \ - do { \ - (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \ - (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \ - (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \ - (a)[3] = (u8) (((u32) (val)) & 0xff); \ - } while (0) - void rtw_buf_free(u8 **buf, u32 *buf_len); void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len); -- cgit From 506a42a6862f9f9339712f3578489dc93fce04f8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:06:34 +0530 Subject: staging: rtl8188eu: Use cpu_to_be16() instead of RTW_PUT_BE16() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_p2p.c | 48 ++++++++--------------- drivers/staging/rtl8188eu/include/osdep_service.h | 5 --- 2 files changed, 17 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index 5bc1937f3d50..c7bceaebd334 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -82,8 +82,7 @@ static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf) *pcur = psta->dev_cap; pcur++; - /* u16*)(pcur) = cpu_to_be16(psta->config_methods); */ - RTW_PUT_BE16(pcur, psta->config_methods); + *((u16 *)(pcur)) = cpu_to_be16(psta->config_methods); pcur += 2; memcpy(pcur, psta->primary_dev_type, 8); @@ -96,12 +95,10 @@ static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf) pcur += psta->num_of_secdev_type*8; if (psta->dev_name_len > 0) { - /* u16*)(pcur) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */ - RTW_PUT_BE16(pcur, WPS_ATTR_DEVICE_NAME); + *(u16 *)(pcur) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); pcur += 2; - /* u16*)(pcur) = cpu_to_be16(psta->dev_name_len); */ - RTW_PUT_BE16(pcur, psta->dev_name_len); + *(u16 *)(pcur) = cpu_to_be16(psta->dev_name_len); pcur += 2; memcpy(pcur, psta->dev_name, psta->dev_name_len); @@ -315,15 +312,15 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, /* Config Method */ /* Type: */ - RTW_PUT_BE16(wpsie + wpsielen, WPS_ATTR_CONF_METHOD); + *(u16 *)(wpsie+wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD); wpsielen += 2; /* Length: */ - RTW_PUT_BE16(wpsie + wpsielen, 0x0002); + *(u16 *)(wpsie+wpsielen) = cpu_to_be16(0x0002); wpsielen += 2; /* Value: */ - RTW_PUT_BE16(wpsie + wpsielen, config_method); + *(u16 *)(wpsie+wpsielen) = cpu_to_be16(config_method); wpsielen += 2; pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); @@ -558,14 +555,12 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) /* Config Method */ /* This field should be big endian. Noted by P2P specification. */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); */ - RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->supported_wps_cm); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); p2pielen += 2; /* Primary Device Type */ /* Category ID */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); p2pielen += 2; /* OUI */ @@ -573,8 +568,7 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) p2pielen += 4; /* Sub Category ID */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); p2pielen += 2; /* Number of Secondary Device Types */ @@ -582,13 +576,11 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) /* Device Name */ /* Type: */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_ATTR_DEVICE_NAME); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); p2pielen += 2; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); */ - RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->device_name_len); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); p2pielen += 2; /* Value: */ @@ -666,19 +658,16 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 /* Config Method */ /* This field should be big endian. Noted by P2P specification. */ if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PBC) { - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_CONFIG_METHOD_PBC); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC); } else { - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_CONFIG_METHOD_DISPLAY); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); } p2pielen += 2; /* Primary Device Type */ /* Category ID */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); p2pielen += 2; /* OUI */ @@ -686,8 +675,7 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 p2pielen += 4; /* Sub Category ID */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); p2pielen += 2; /* Number of Secondary Device Types */ @@ -695,13 +683,11 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 /* Device Name */ /* Type: */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */ - RTW_PUT_BE16(p2pie + p2pielen, WPS_ATTR_DEVICE_NAME); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); p2pielen += 2; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); */ - RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->device_name_len); + *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); p2pielen += 2; /* Value: */ diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 30613fc8b44c..2a5cb2061b3b 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -253,11 +253,6 @@ u64 rtw_modular64(u64 x, u64 y); /* Macros for handling unaligned memory accesses */ #define RTW_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1])) -#define RTW_PUT_BE16(a, val) \ - do { \ - (a)[0] = ((u16) (val)) >> 8; \ - (a)[1] = ((u16) (val)) & 0xff; \ - } while (0) #define RTW_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0])) #define RTW_PUT_LE16(a, val) \ -- cgit From 27c8aac7a3408a9e1d7bb464585a7794d124ee8c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:33 +0530 Subject: staging: rtl8188eu: Use get_unaligned_be16() instead of RTW_GET_BE16() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 8 ++++---- drivers/staging/rtl8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/rtl8188eu/include/osdep_service.h | 2 -- 3 files changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index ae8895e75b19..9eb198aa15f7 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -807,8 +807,8 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id , u8 *buf_at while (attr_ptr - wps_ie < wps_ielen) { /* 4 = 2(Attribute ID) + 2(Length) */ - u16 attr_id = RTW_GET_BE16(attr_ptr); - u16 attr_data_len = RTW_GET_BE16(attr_ptr + 2); + u16 attr_id = get_unaligned_be16(attr_ptr); + u16 attr_data_len = get_unaligned_be16(attr_ptr + 2); u16 attr_len = attr_data_len + 4; if (attr_id == target_attr_id) { @@ -1156,8 +1156,8 @@ void dump_wps_ie(u8 *ie, u32 ie_len) pos += 6; while (pos-ie < ie_len) { - id = RTW_GET_BE16(pos); - len = RTW_GET_BE16(pos + 2); + id = get_unaligned_be16(pos); + len = get_unaligned_be16(pos + 2); DBG_88E("%s ID:0x%04x, LEN:%u\n", __func__, id, len); pos += (4+len); } diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 56aa8861b900..e0f0765f3c64 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -1644,7 +1644,7 @@ static int amsdu_to_msdu(struct adapter *padapter, struct recv_frame *prframe) while (a_len > ETH_HLEN) { /* Offset 12 denote 2 mac address */ - nSubframe_Length = RTW_GET_BE16(pdata + 12); + nSubframe_Length = get_unaligned_be16(pdata + 12); if (a_len < (ETHERNET_HEADER_SIZE + nSubframe_Length)) { DBG_88E("nRemain_Length is %d and nSubframe_Length is : %d\n", a_len, nSubframe_Length); @@ -1699,7 +1699,7 @@ static int amsdu_to_msdu(struct adapter *padapter, struct recv_frame *prframe) for (i = 0; i < nr_subframes; i++) { sub_skb = subframes[i]; /* convert hdr + possible LLC headers into Ethernet header */ - eth_type = RTW_GET_BE16(&sub_skb->data[6]); + eth_type = get_unaligned_be16(&sub_skb->data[6]); if (sub_skb->len >= 8 && ((!memcmp(sub_skb->data, rtw_rfc1042_header, SNAP_SIZE) && eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) || diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 2a5cb2061b3b..ca0957b412ae 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -252,8 +252,6 @@ u64 rtw_modular64(u64 x, u64 y); /* Macros for handling unaligned memory accesses */ -#define RTW_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1])) - #define RTW_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0])) #define RTW_PUT_LE16(a, val) \ do { \ -- cgit From e42b1f272927651170e149548881bac2ea61f9c9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:34 +0530 Subject: staging: rtl8188eu: Remove unused inline function bitshift() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index ca0957b412ae..0b5485637ddd 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -215,16 +215,6 @@ static inline u32 _RND256(u32 sz) return val; } -static inline u32 bitshift(u32 bitmask) -{ - u32 i; - - for (i = 0; i <= 31; i++) - if (((bitmask>>i) & 0x1) == 1) - break; - return i; -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From 4b49a5b39a1d19af078294095089487b8ad6f96e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:35 +0530 Subject: staging: rtl8188eu: Use get_unaligned_le16() instead of RTW_GET_LE16() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ap.c | 4 ++-- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 8 ++++---- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 6 +++--- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - 4 files changed, 9 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index 19871858723b..768a35946052 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -900,10 +900,10 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) /* beacon interval */ p = rtw_get_beacon_interval_from_ie(ie);/* 8: TimeStamp, 2: Beacon Interval 2:Capability */ - pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p); + pbss_network->Configuration.BeaconPeriod = get_unaligned_le16(p); /* capability */ - cap = RTW_GET_LE16(ie); + cap = get_unaligned_le16(ie); /* SSID */ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_)); diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 9eb198aa15f7..d264847afd0d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -551,7 +551,7 @@ int rtw_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwis /* pairwise_cipher */ if (left >= 2) { - count = RTW_GET_LE16(pos); + count = get_unaligned_le16(pos); pos += 2; left -= 2; @@ -619,7 +619,7 @@ int rtw_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher, int *pairwi /* pairwise_cipher */ if (left >= 2) { - count = RTW_GET_LE16(pos); + count = get_unaligned_le16(pos); pos += 2; left -= 2; @@ -1179,7 +1179,7 @@ void dump_p2p_ie(u8 *ie, u32 ie_len) pos += 6; while (pos-ie < ie_len) { id = *pos; - len = RTW_GET_LE16(pos+1); + len = get_unaligned_le16(pos+1); DBG_88E("%s ID:%u, LEN:%u\n", __func__, id, len); pos += (3+len); } @@ -1253,7 +1253,7 @@ u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id , u8 *buf_att while (attr_ptr - p2p_ie < p2p_ielen) { /* 3 = 1(Attribute ID) + 2(Length) */ u8 attr_id = *attr_ptr; - u16 attr_data_len = RTW_GET_LE16(attr_ptr + 1); + u16 attr_data_len = get_unaligned_le16(attr_ptr + 1); u16 attr_len = attr_data_len + 3; if (attr_id == target_attr_id) { diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 1b855b4cbc4e..dc194324899d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -1053,7 +1053,7 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame goto asoc_class2_error; } - capab_info = RTW_GET_LE16(pframe + WLAN_HDR_A3_LEN); + capab_info = get_unaligned_le16(pframe + WLAN_HDR_A3_LEN); left = pkt_len - (IEEE80211_3ADDR_LEN + ie_offset); pos = pframe + (IEEE80211_3ADDR_LEN + ie_offset); @@ -1788,7 +1788,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */ break; case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */ - status = RTW_GET_LE16(&frame_body[3]); + status = get_unaligned_le16(&frame_body[3]); tid = ((frame_body[5] >> 2) & 0x7); if (status == 0) { /* successful */ DBG_88E("agg_enable for TID=%d\n", tid); @@ -1802,7 +1802,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr if ((frame_body[3] & BIT(3)) == 0) { psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); - reason_code = RTW_GET_LE16(&frame_body[4]); + reason_code = get_unaligned_le16(&frame_body[4]); } else if ((frame_body[3] & BIT(3)) == BIT(3)) { tid = (frame_body[3] >> 4) & 0x0F; preorder_ctrl = &psta->recvreorder_ctrl[tid]; diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 0b5485637ddd..bbb46cb8e99c 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -242,7 +242,6 @@ u64 rtw_modular64(u64 x, u64 y); /* Macros for handling unaligned memory accesses */ -#define RTW_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0])) #define RTW_PUT_LE16(a, val) \ do { \ (a)[1] = ((u16) (val)) >> 8; \ -- cgit From 83a9b6694d1e300ca8240fdf654650dcc096c86f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:36 +0530 Subject: staging: rtl8188eu: Use cpu_to_le16() insted of RTW_PUT_LE16() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 7 +++---- drivers/staging/rtl8188eu/core/rtw_p2p.c | 24 ++++++++--------------- drivers/staging/rtl8188eu/include/osdep_service.h | 6 ------ 3 files changed, 11 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index d264847afd0d..54ebf3424572 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -206,8 +206,8 @@ inline u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl, ie_data[0] = ttl; ie_data[1] = flags; - RTW_PUT_LE16((u8 *)&ie_data[2], reason); - RTW_PUT_LE16((u8 *)&ie_data[4], precedence); + *(u16 *)(ie_data+2) = cpu_to_le16(reason); + *(u16 *)(ie_data+4) = cpu_to_le16(precedence); return rtw_set_ie(buf, 0x118, 6, ie_data, buf_len); } @@ -1310,8 +1310,7 @@ u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr) *pbuf = attr_id; - /* u16*)(pbuf + 1) = cpu_to_le16(attr_len); */ - RTW_PUT_LE16(pbuf + 1, attr_len); + *(u16 *)(pbuf + 1) = cpu_to_le16(attr_len); if (pdata_attr) memcpy(pbuf + 3, pdata_attr, attr_len); diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index c7bceaebd334..6023a85d20e3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -487,8 +487,7 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0002); */ - RTW_PUT_LE16(p2pie + p2pielen, 0x0002); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0002); p2pielen += 2; /* Value: */ @@ -516,19 +515,16 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0004); */ - RTW_PUT_LE16(p2pie + p2pielen, 0x0004); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0004); p2pielen += 2; /* Value: */ /* Availability Period */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); */ - RTW_PUT_LE16(p2pie + p2pielen, 0xFFFF); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); p2pielen += 2; /* Availability Interval */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); */ - RTW_PUT_LE16(p2pie + p2pielen, 0xFFFF); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); p2pielen += 2; @@ -544,8 +540,7 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) /* Length: */ /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); */ - RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); p2pielen += 2; /* Value: */ @@ -624,8 +619,7 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0002); */ - RTW_PUT_LE16(p2pie + p2pielen, 0x0002); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0002); p2pielen += 2; /* Value: */ @@ -646,8 +640,7 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 /* Length: */ /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); */ - RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); p2pielen += 2; /* Value: */ @@ -703,8 +696,7 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 p2pie[p2pielen++] = P2P_ATTR_GROUP_ID; /* Length: */ - /* u16*) (p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + ussidlen); */ - RTW_PUT_LE16(p2pie + p2pielen, ETH_ALEN + ussidlen); + *(u16 *) (p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + ussidlen); p2pielen += 2; /* Value: */ diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index bbb46cb8e99c..1fb92c69ad2c 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -242,12 +242,6 @@ u64 rtw_modular64(u64 x, u64 y); /* Macros for handling unaligned memory accesses */ -#define RTW_PUT_LE16(a, val) \ - do { \ - (a)[1] = ((u16) (val)) >> 8; \ - (a)[0] = ((u16) (val)) & 0xff; \ - } while (0) - #define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \ ((u32) (a)[2])) -- cgit From 122adb27046ad041595ce827d393fa8ab3f6d8d2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:37 +0530 Subject: staging: rtl8188eu: osdep_service.h: Remove unused function definations Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 1fb92c69ad2c..0b3066c736ca 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -159,8 +159,6 @@ u8 *_rtw_malloc(u32 sz); void *rtw_malloc2d(int h, int w, int size); -void _rtw_memcpy(void *dec, void *sour, u32 sz); - u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); @@ -260,6 +258,5 @@ bool rtw_cbuf_empty(struct rtw_cbuf *cbuf); bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf); void *rtw_cbuf_pop(struct rtw_cbuf *cbuf); struct rtw_cbuf *rtw_cbuf_alloc(u32 size); -int wifirate2_ratetbl_inx(unsigned char rate); #endif -- cgit From 588aa70abfe3b589c84d5a76b90a622c63b9a666 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:38 +0530 Subject: staging: rtl8188eu: Remove unused inline function _RND256() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 0b3066c736ca..1bf324c4c5a2 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -205,14 +205,6 @@ static inline u32 _RND128(u32 sz) return val; } -static inline u32 _RND256(u32 sz) -{ - u32 val; - - val = ((sz >> 8) + ((sz & 255) ? 1 : 0)) << 8; - return val; -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From fe5e6cf52c8dda2b9e7c0238e6b97246b84e5d57 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:39 +0530 Subject: staging: rtl8188eu: Use round_up() instead of _RND128() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 8 -------- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 1bf324c4c5a2..22025704d1fc 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -197,14 +197,6 @@ static inline u32 _RND8(u32 sz) return val; } -static inline u32 _RND128(u32 sz) -{ - u32 val; - - val = ((sz >> 7) + ((sz & 127) ? 1 : 0)) << 7; - return val; -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index 8015c3a2f92c..eddff419f4fd 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -160,7 +160,7 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb) switch (haldata->UsbRxAggMode) { case USB_RX_AGG_DMA: case USB_RX_AGG_MIX: - pkt_offset = (u16)_RND128(pkt_offset); + pkt_offset = (u16) round_up(pkt_offset, 128); break; case USB_RX_AGG_USB: pkt_offset = (u16)_RND4(pkt_offset); -- cgit From 248df424eb315762b9cf9c04e194b3b2e371d814 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:40 +0530 Subject: staging: rtl8188eu: Use round_up() instead of _RND8() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index ba8beb88d53c..85438478a345 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -493,7 +493,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp pfirstframe = pxmitframe; len = xmitframe_need_length(pfirstframe) + TXDESC_SIZE + (pfirstframe->pkt_offset*PACKET_OFFSET_SZ); pbuf_tail = len; - pbuf = _RND8(pbuf_tail); + pbuf = round_up(pbuf_tail, 8); /* check pkt amount in one bulk */ desc_cnt = 0; diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 22025704d1fc..927b30bdb848 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -189,14 +189,6 @@ static inline u32 _RND4(u32 sz) return val; } -static inline u32 _RND8(u32 sz) -{ - u32 val; - - val = ((sz >> 3) + ((sz & 7) ? 1 : 0)) << 3; - return val; -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From eab5d5438a626b33d1ea6d3ce07303bee0f27f76 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:41 +0530 Subject: staging: rtl8188eu: Use round_up() instead of _RND4() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 4 ++-- drivers/staging/rtl8188eu/include/osdep_service.h | 8 -------- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 2 +- 4 files changed, 4 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index a292c5d1a45c..343a6caeabd5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -324,7 +324,7 @@ _next: pcmdpriv->cmd_issued_cnt++; - pcmd->cmdsz = _RND4((pcmd->cmdsz));/* _RND4 */ + pcmd->cmdsz = round_up(pcmd->cmdsz, 4); memcpy(pcmdbuf, pcmd->parmbuf, pcmd->cmdsz); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 85438478a345..902bbe0115ce 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -544,7 +544,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp len = xmitframe_need_length(pxmitframe) + TXDESC_SIZE + (pxmitframe->pkt_offset*PACKET_OFFSET_SZ); - if (_RND8(pbuf + len) > MAX_XMITBUF_SZ) { + if (round_up(pbuf + len, 8) > MAX_XMITBUF_SZ) { pxmitframe->agg_num = 1; pxmitframe->pkt_offset = 1; break; @@ -567,7 +567,7 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp /* handle pointer and stop condition */ pbuf_tail = pbuf + len; - pbuf = _RND8(pbuf_tail); + pbuf = round_up(pbuf_tail, 8); pfirstframe->agg_num++; if (MAX_TX_AGG_PACKET_NUMBER == pfirstframe->agg_num) diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 927b30bdb848..913cbfeaa289 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -181,14 +181,6 @@ static inline void flush_signals_thread(void) #define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r)) #define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0 : 1)) << 2) -static inline u32 _RND4(u32 sz) -{ - u32 val; - - val = ((sz >> 2) + ((sz & 3) ? 1 : 0)) << 2; - return val; -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index eddff419f4fd..ba1e178fb510 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -163,7 +163,7 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb) pkt_offset = (u16) round_up(pkt_offset, 128); break; case USB_RX_AGG_USB: - pkt_offset = (u16)_RND4(pkt_offset); + pkt_offset = (u16) round_up(pkt_offset, 4); break; case USB_RX_AGG_DISABLE: default: -- cgit From fdc95f5f4a3c0ee159ab9f21934f0bf31129c6f1 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:42 +0530 Subject: staging: rtl8188eu: osdep_service.h: Remove unused macros Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 913cbfeaa289..e3354713b0ce 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -109,9 +109,6 @@ static inline int rtw_netif_queue_stopped(struct net_device *pnetdev) netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3)); } -#ifndef BIT - #define BIT(x) (1 << (x)) -#endif #define BIT0 0x00000001 #define BIT1 0x00000002 @@ -178,7 +175,6 @@ static inline void flush_signals_thread(void) flush_signals(current); } -#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r)) #define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0 : 1)) << 2) struct rtw_netdev_priv_indicator { -- cgit From 42c6cdb3044ac28a31b102b3342fefbe0be01188 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:43 +0530 Subject: staging: rtl8188eu: Use round_up() instead of RND4() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_security.c | 6 +++--- drivers/staging/rtl8188eu/core/rtw_xmit.c | 4 ++-- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 2 -- 4 files changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c b/drivers/staging/rtl8188eu/core/rtw_security.c index 1b64cb6c53d9..d78def549df1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_security.c +++ b/drivers/staging/rtl8188eu/core/rtw_security.c @@ -189,7 +189,7 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe) arcfour_encrypt(&mycontext, payload+length, crc, 4); pframe += pxmitpriv->frag_len; - pframe = (u8 *)RND4((size_t)(pframe)); + pframe = (u8 *) round_up((size_t)(pframe), 4); } } } @@ -628,7 +628,7 @@ u32 rtw_tkip_encrypt(struct adapter *padapter, u8 *pxmitframe) arcfour_encrypt(&mycontext, payload+length, crc, 4); pframe += pxmitpriv->frag_len; - pframe = (u8 *)RND4((size_t)(pframe)); + pframe = (u8 *) round_up((size_t)(pframe), 4); } } } else { @@ -1242,7 +1242,7 @@ u32 rtw_aes_encrypt(struct adapter *padapter, u8 *pxmitframe) aes_cipher(prwskey, pattrib->hdrlen, pframe, length); pframe += pxmitpriv->frag_len; - pframe = (u8 *)RND4((size_t)(pframe)); + pframe = (u8 *) round_up((size_t)(pframe), 8); } } } else{ diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 3a40b2a43b79..95c508a09b23 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -692,7 +692,7 @@ static s32 xmitframe_addmic(struct adapter *padapter, struct xmit_frame *pxmitfr payload = pframe; for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) { - payload = (u8 *)RND4((size_t)(payload)); + payload = (u8 *) round_up((size_t)(payload), 4); RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("=== curfragnum=%d, pframe = 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x,!!!\n", curfragnum, *payload, *(payload+1), @@ -1099,7 +1099,7 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct addr = (size_t)(pframe); - mem_start = (unsigned char *)RND4(addr) + hw_hdr_offset; + mem_start = (unsigned char *) round_up(addr, 4) + hw_hdr_offset; memcpy(mem_start, pbuf_start + hw_hdr_offset, pattrib->hdrlen); } diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 902bbe0115ce..7004e0b745b8 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -401,7 +401,7 @@ static s32 rtw_dump_xframe(struct adapter *adapt, struct xmit_frame *pxmitframe) mem_addr += w_sz; - mem_addr = (u8 *)RND4(((size_t)(mem_addr))); + mem_addr = (u8 *) round_up((size_t)mem_addr, 4); } rtw_free_xmitframe(pxmitpriv, pxmitframe); diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index e3354713b0ce..6c3234bd2154 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -175,8 +175,6 @@ static inline void flush_signals_thread(void) flush_signals(current); } -#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0 : 1)) << 2) - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From 6e5ca0daa28b5cd022ce05a0d8a437e177b73042 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:44 +0530 Subject: staging: rtl8188eu: Remove function thread_enter() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 3 +-- drivers/staging/rtl8188eu/core/rtw_mp.c | 2 +- drivers/staging/rtl8188eu/include/osdep_service.h | 5 ----- 3 files changed, 2 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 343a6caeabd5..e65d8ef14453 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -285,8 +285,7 @@ int rtw_cmd_thread(void *context) struct adapter *padapter = (struct adapter *)context; struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - - thread_enter("RTW_CMD_THREAD"); + allow_signal(SIGTERM); pcmdbuf = pcmdpriv->cmd_buf; diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index ca323db2f1d1..919c4c212172 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -597,7 +597,7 @@ static int mp_xmit_packet_thread(void *context) padapter = pmp_priv->papdater; pxmitpriv = &(padapter->xmitpriv); - thread_enter("RTW_MP_THREAD"); + allow_signal(SIGTERM); /* DBG_88E("%s:pkTx Start\n", __func__); */ while (1) { diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 6c3234bd2154..e7bbc28ba00a 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -164,11 +164,6 @@ u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); -static inline void thread_enter(char *name) -{ - allow_signal(SIGTERM); -} - static inline void flush_signals_thread(void) { if (signal_pending(current)) -- cgit From 7062775b2c360a50b4c878efb49c6041f56463fc Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:45 +0530 Subject: staging: rtl8188eu: Remove function flush_signals_thread() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 3 ++- drivers/staging/rtl8188eu/core/rtw_mp.c | 3 ++- drivers/staging/rtl8188eu/include/osdep_service.h | 6 ------ 3 files changed, 4 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e65d8ef14453..556d17d29797 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -359,7 +359,8 @@ post_process: rtw_free_cmd_obj(pcmd); } - flush_signals_thread(); + if (signal_pending(current)) + flush_signals(current); goto _next; } diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c index 919c4c212172..d879948e0a60 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ b/drivers/staging/rtl8188eu/core/rtw_mp.c @@ -629,7 +629,8 @@ static int mp_xmit_packet_thread(void *context) (pmptx->count == pmptx->sended)) goto exit; - flush_signals_thread(); + if (signal_pending(current)) + flush_signals(current); } exit: diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index e7bbc28ba00a..2d07deade14a 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -164,12 +164,6 @@ u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); -static inline void flush_signals_thread(void) -{ - if (signal_pending(current)) - flush_signals(current); -} - struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; -- cgit From 5aa8b9aeb8f6763299ee0b700ab7ab5f06044409 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 22 Jun 2014 14:21:46 +0530 Subject: staging: rtl8188eu: Replace _cancel_timer() with del_timer_sync() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 3 +-- drivers/staging/rtl8188eu/core/rtw_mlme.c | 8 ++------ drivers/staging/rtl8188eu/core/rtw_p2p.c | 4 +--- drivers/staging/rtl8188eu/include/osdep_service.h | 6 ------ 4 files changed, 4 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 556d17d29797..aeaa873bfeb1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -2084,7 +2084,6 @@ void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd) void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd) { - u8 timer_cancelled; struct sta_info *psta = NULL; struct wlan_network *pwlan = NULL; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -2097,7 +2096,7 @@ void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd) _set_timer(&pmlmepriv->assoc_timer, 1); } - _cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled); + del_timer_sync(&pmlmepriv->assoc_timer); spin_lock_bh(&pmlmepriv->lock); diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index c03442d97673..0cb9e152cc5e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -725,10 +725,7 @@ void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf) RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_surveydone_event_callback: fw_state:%x\n\n", get_fwstate(pmlmepriv))); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) { - u8 timer_cancelled; - - _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled); - + del_timer_sync(&pmlmepriv->scan_to_timer); _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); } else { RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("nic status=%x, survey done event comes too late!\n", get_fwstate(pmlmepriv))); @@ -1103,7 +1100,6 @@ static void rtw_joinbss_update_network(struct adapter *padapter, struct wlan_net void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf) { - u8 timer_cancelled; struct sta_info *ptarget_sta = NULL, *pcur_sta = NULL; struct sta_priv *pstapriv = &adapter->stapriv; struct mlme_priv *pmlmepriv = &(adapter->mlmepriv); @@ -1196,7 +1192,7 @@ void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf) } /* s5. Cancle assoc_timer */ - _cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled); + del_timer_sync(&pmlmepriv->assoc_timer); RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("Cancle assoc_timer\n")); diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index 6023a85d20e3..e1fd198eae30 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -1404,9 +1404,7 @@ u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pfr result = attr_content; if (attr_content == P2P_STATUS_SUCCESS) { - u8 bcancelled = 0; - - _cancel_timer(&pwdinfo->restore_p2p_state_timer, &bcancelled); + del_timer_sync(&pwdinfo->restore_p2p_state_timer); /* Commented by Albert 20100911 */ /* Todo: Need to handle the case which both Intents are the same. */ diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 2d07deade14a..95131fe5c2b5 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -90,12 +90,6 @@ static inline void _set_timer(struct timer_list *ptimer, u32 delay_time) mod_timer(ptimer , (jiffies+(delay_time*HZ/1000))); } -static inline void _cancel_timer(struct timer_list *ptimer, u8 *bcancelled) -{ - del_timer_sync(ptimer); - *bcancelled = true;/* true ==1; false==0 */ -} - #define RTW_TIMER_HDL_ARGS void *FunctionContext #define RTW_TIMER_HDL_NAME(name) rtw_##name##_timer_hdl #define RTW_DECLARE_TIMER_HDL(name) \ -- cgit From 83543d328f7a8285d3627b4ed7d14bf16f439ad4 Mon Sep 17 00:00:00 2001 From: Rasmus Villemoes Date: Fri, 20 Jun 2014 22:42:22 +0200 Subject: drivers/staging/rtl8821ae/rtl8821ae: Remove dead code This is all #if 0'ed out, and it contains some rather weird stuff (post-increment of a bool, for example). Nuke it. Signed-off-by: Rasmus Villemoes Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c b/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c index 7b1d113505fb..25e751b0962a 100644 --- a/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c +++ b/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c @@ -1706,20 +1706,6 @@ void rtl8821ae_dm_bt_inq_page_monitor(struct ieee80211_hw *hw) rtlpcipriv->btcoexist.current_state &=~ BT_COEX_STATE_BT_INQ_PAGE; } } - -#if 0 - if (hal_coex_8821ae.b_c2h_bt_inquiry_page) { - hal_coex_8821ae.b_c2h_bt_inquiry_page++; - // bt inquiry or page is started. - } if(hal_coex_8821ae.b_c2h_bt_inquiry_page) { - rtlpcipriv->btcoexist.current_state |= BT_COEX_STATE_BT_INQ_PAGE; - if(hal_coex_8821ae.bt_inquiry_page_cnt >= 4) - hal_coex_8821ae.bt_inquiry_page_cnt = 0; - hal_coex_8821ae.bt_inquiry_page_cnt++; - } else { - rtlpcipriv->btcoexist.current_state &=~ BT_COEX_STATE_BT_INQ_PAGE; - } -#endif } void rtl8821ae_dm_bt_reset_action_profile_state(struct ieee80211_hw *hw) -- cgit From d913e54ef08da6f831df47a45f2ca1b11579eba4 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 22 Jun 2014 20:27:55 -0400 Subject: staging: rtl8712: remove inline _RND8() and use round_up() Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_cmd.c | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 09e156199e7f..6af0df9c04e7 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -184,11 +184,6 @@ static inline void flush_signals_thread(void) flush_signals(current); } -static inline u32 _RND8(u32 sz) -{ - return ((sz >> 3) + ((sz & 7) ? 1 : 0)) << 3; -} - static inline u32 _RND128(u32 sz) { return ((sz >> 7) + ((sz & 127) ? 1 : 0)) << 7; diff --git a/drivers/staging/rtl8712/rtl8712_cmd.c b/drivers/staging/rtl8712/rtl8712_cmd.c index 8ca7d7e68dca..4998fde3ec82 100644 --- a/drivers/staging/rtl8712/rtl8712_cmd.c +++ b/drivers/staging/rtl8712/rtl8712_cmd.c @@ -351,7 +351,7 @@ _next: &padapter->dvobjpriv; u8 blnPending = 0; pcmdpriv->cmd_issued_cnt++; - cmdsz = _RND8((pcmd->cmdsz)); /* _RND8 */ + cmdsz = round_up(pcmd->cmdsz, 8); wr_sz = TXDESC_SIZE + 8 + cmdsz; pdesc->txdw0 |= cpu_to_le32((wr_sz-TXDESC_SIZE) & 0x0000ffff); -- cgit From fa867453320bdc703d2e724d6d95fd9d666874ea Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 22 Jun 2014 20:27:56 -0400 Subject: staging: rtl8712: remove inline _RND128() and use round_up() Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_recv.c | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 6af0df9c04e7..37ec56b08577 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -184,11 +184,6 @@ static inline void flush_signals_thread(void) flush_signals(current); } -static inline u32 _RND128(u32 sz) -{ - return ((sz >> 7) + ((sz & 127) ? 1 : 0)) << 7; -} - static inline u32 _RND256(u32 sz) { return ((sz >> 8) + ((sz & 255) ? 1 : 0)) << 8; diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index 1f700171af13..fb947c1e076f 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -1065,7 +1065,7 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb) precvframe->u.hdr.precvbuf = NULL; /*can't access the precvbuf*/ precvframe->u.hdr.len = 0; tmp_len = pkt_len + drvinfo_sz + RXDESC_SIZE; - pkt_offset = (u16)_RND128(tmp_len); + pkt_offset = (u16)round_up(tmp_len, 128); /* for first fragment packet, driver need allocate 1536 + * drvinfo_sz + RXDESC_SIZE to defrag packet. */ if ((mf == 1) && (frag == 0)) -- cgit From d6a61ba40c36ef14808f1200e067617a86579b32 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 22 Jun 2014 20:27:57 -0400 Subject: staging: rtl8712: remove unused inline _RND256() Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 37ec56b08577..9316eabb49b3 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -184,11 +184,6 @@ static inline void flush_signals_thread(void) flush_signals(current); } -static inline u32 _RND256(u32 sz) -{ - return ((sz >> 8) + ((sz & 255) ? 1 : 0)) << 8; -} - static inline u32 _RND512(u32 sz) { return ((sz >> 9) + ((sz & 511) ? 1 : 0)) << 9; -- cgit From 084e5d285dac1e29ea07c8086322a5f3dd6de11d Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Sun, 22 Jun 2014 20:27:58 -0400 Subject: staging: rtl8712: remove unused inline _RND512() Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 9316eabb49b3..425f0f1b8c2f 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -184,10 +184,5 @@ static inline void flush_signals_thread(void) flush_signals(current); } -static inline u32 _RND512(u32 sz) -{ - return ((sz >> 9) + ((sz & 511) ? 1 : 0)) << 9; -} - #endif -- cgit From 9c9a95b619587d76e499529cc3361186d449836f Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Tue, 24 Jun 2014 00:11:51 +0200 Subject: drivers/staging/rtl8821ae: replace magic number by macro For consistency with other drivers, replace a magic number by a macro. Signed-off-by: Rickard Strandqvist Reviewed-by: Peter Wu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/rtl8821ae/hw.c | 2 +- drivers/staging/rtl8821ae/rtl8821ae/reg.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/rtl8821ae/hw.c b/drivers/staging/rtl8821ae/rtl8821ae/hw.c index 1b8583b689d4..1aa16612e248 100644 --- a/drivers/staging/rtl8821ae/rtl8821ae/hw.c +++ b/drivers/staging/rtl8821ae/rtl8821ae/hw.c @@ -1623,7 +1623,7 @@ static int _rtl8821ae_set_media_status(struct ieee80211_hw *hw, rtl_write_byte(rtlpriv, (MSR), bt_msr); rtlpriv->cfg->ops->led_control(hw, ledaction); - if ((bt_msr & ~0xfc) == MSR_AP) + if ((bt_msr & MSR_MASK) == MSR_AP) rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x00); else rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x66); diff --git a/drivers/staging/rtl8821ae/rtl8821ae/reg.h b/drivers/staging/rtl8821ae/rtl8821ae/reg.h index beffb4243b1e..4cb3ca95f773 100644 --- a/drivers/staging/rtl8821ae/rtl8821ae/reg.h +++ b/drivers/staging/rtl8821ae/rtl8821ae/reg.h @@ -431,6 +431,7 @@ #define MSR_ADHOC 0x01 #define MSR_INFRA 0x02 #define MSR_AP 0x03 +#define MSR_MASK 0x03 #define RRSR_RSC_OFFSET 21 #define RRSR_SHORT_OFFSET 23 -- cgit From 534c4acd1d45942eaae0db5858c82a33fac47468 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:34 -0400 Subject: staging: rtl8712: remove wrapper function _init_listhead _init_listhead is just an inline wrapper around INIT_LIST_HEAD. This patch removes the wrapper and directly uses INIT_LIST_HEAD instead. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 7 +------ drivers/staging/rtl8712/rtl8712_recv.c | 4 ++-- drivers/staging/rtl8712/rtl871x_cmd.c | 8 ++++---- drivers/staging/rtl8712/rtl871x_cmd.h | 2 +- drivers/staging/rtl8712/rtl871x_io.c | 8 ++++---- drivers/staging/rtl8712/rtl871x_mlme.c | 6 +++--- drivers/staging/rtl8712/rtl871x_mp.c | 2 +- drivers/staging/rtl8712/rtl871x_recv.c | 2 +- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 14 +++++++------- drivers/staging/rtl8712/rtl871x_xmit.c | 12 ++++++------ 10 files changed, 30 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 425f0f1b8c2f..81f48a60646d 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -54,7 +54,7 @@ struct __queue { #define _init_queue(pqueue) \ do { \ - _init_listhead(&((pqueue)->queue)); \ + INIT_LIST_HEAD(&((pqueue)->queue)); \ spin_lock_init(&((pqueue)->lock)); \ } while (0) @@ -137,11 +137,6 @@ static inline u32 _down_sema(struct semaphore *sema) return _SUCCESS; } -static inline void _init_listhead(struct list_head *list) -{ - INIT_LIST_HEAD(list); -} - static inline u32 _queue_empty(struct __queue *pqueue) { return is_list_empty(&(pqueue->queue)); diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index fb947c1e076f..e311a601a4fd 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -66,7 +66,7 @@ int r8712_init_recv_priv(struct recv_priv *precvpriv, struct _adapter *padapter) ((addr_t) (precvpriv->pallocated_recv_buf) & 3); precvbuf = (struct recv_buf *)precvpriv->precv_buf; for (i = 0; i < NR_RECVBUFF; i++) { - _init_listhead(&precvbuf->list); + INIT_LIST_HEAD(&precvbuf->list); spin_lock_init(&precvbuf->recvbuf_lock); res = r8712_os_recvbuf_resource_alloc(padapter, precvbuf); if (res == _FAIL) @@ -1061,7 +1061,7 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb) precvframe = r8712_alloc_recvframe(pfree_recv_queue); if (precvframe == NULL) goto _exit_recvbuf2recvframe; - _init_listhead(&precvframe->u.hdr.list); + INIT_LIST_HEAD(&precvframe->u.hdr.list); precvframe->u.hdr.precvbuf = NULL; /*can't access the precvbuf*/ precvframe->u.hdr.len = 0; tmp_len = pkt_len + drvinfo_sz + RXDESC_SIZE; diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index 1775462e5330..646c5cd5245d 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -413,7 +413,7 @@ u8 r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 *pval) kfree((u8 *) ph2c); return _FAIL; } - _init_listhead(&ph2c->list); + INIT_LIST_HEAD(&ph2c->list); ph2c->cmdcode = GEN_CMD_CODE(_GetRFReg); ph2c->parmbuf = (unsigned char *)prdrfparm; ph2c->cmdsz = sizeof(struct readRF_parm); @@ -452,7 +452,7 @@ u8 r8712_createbss_cmd(struct _adapter *padapter) pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); if (pcmd == NULL) return _FAIL; - _init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); pcmd->cmdcode = _CreateBss_CMD_; pcmd->parmbuf = (unsigned char *)pdev_network; pcmd->cmdsz = r8712_get_ndis_wlan_bssid_ex_sz(( @@ -606,7 +606,7 @@ u8 r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork) psecnetwork->InfrastructureMode); psecnetwork->IELength = cpu_to_le32(psecnetwork->IELength); #endif - _init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); pcmd->cmdcode = _JoinBss_CMD_; pcmd->parmbuf = (unsigned char *)psecnetwork; pcmd->rsp = NULL; @@ -758,7 +758,7 @@ u8 r8712_gettssi_cmd(struct _adapter *padapter, u8 offset, u8 *pval) kfree((unsigned char *) ph2c); return _FAIL; } - _init_listhead(&ph2c->list); + INIT_LIST_HEAD(&ph2c->list); ph2c->cmdcode = GEN_CMD_CODE(_ReadTSSI); ph2c->parmbuf = (unsigned char *)prdtssiparm; ph2c->cmdsz = sizeof(struct readTSSI_parm); diff --git a/drivers/staging/rtl8712/rtl871x_cmd.h b/drivers/staging/rtl8712/rtl871x_cmd.h index 0ce79b1c4ee2..cb8225b94cf1 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.h +++ b/drivers/staging/rtl8712/rtl871x_cmd.h @@ -83,7 +83,7 @@ struct evt_priv { #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ do {\ - _init_listhead(&pcmd->list);\ + INIT_LIST_HEAD(&pcmd->list);\ pcmd->cmdcode = code;\ pcmd->parmbuf = (u8 *)(pparm);\ pcmd->cmdsz = sizeof(*pparm);\ diff --git a/drivers/staging/rtl8712/rtl871x_io.c b/drivers/staging/rtl8712/rtl871x_io.c index e881b0d9c34f..c42a57878655 100644 --- a/drivers/staging/rtl8712/rtl871x_io.c +++ b/drivers/staging/rtl8712/rtl871x_io.c @@ -115,9 +115,9 @@ uint r8712_alloc_io_queue(struct _adapter *adapter) pio_queue = kmalloc(sizeof(*pio_queue), GFP_ATOMIC); if (pio_queue == NULL) goto alloc_io_queue_fail; - _init_listhead(&pio_queue->free_ioreqs); - _init_listhead(&pio_queue->processing); - _init_listhead(&pio_queue->pending); + INIT_LIST_HEAD(&pio_queue->free_ioreqs); + INIT_LIST_HEAD(&pio_queue->processing); + INIT_LIST_HEAD(&pio_queue->pending); spin_lock_init(&pio_queue->lock); pio_queue->pallocated_free_ioreqs_buf = kmalloc(NUM_IOREQ * (sizeof(struct io_req)) + 4, @@ -131,7 +131,7 @@ uint r8712_alloc_io_queue(struct _adapter *adapter) & 3); pio_req = (struct io_req *)(pio_queue->free_ioreqs_buf); for (i = 0; i < NUM_IOREQ; i++) { - _init_listhead(&pio_req->list); + INIT_LIST_HEAD(&pio_req->list); list_insert_tail(&pio_req->list, &pio_queue->free_ioreqs); pio_req++; } diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 26b8f3788fd3..3000b2ac4cd4 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -69,7 +69,7 @@ static sint _init_mlme_priv(struct _adapter *padapter) pmlmepriv->free_bss_buf = pbuf; pnetwork = (struct wlan_network *)pbuf; for (i = 0; i < MAX_BSS_CNT; i++) { - _init_listhead(&(pnetwork->list)); + INIT_LIST_HEAD(&(pnetwork->list)); list_insert_tail(&(pnetwork->list), &(pmlmepriv->free_bss_pool.queue)); pnetwork++; @@ -1227,7 +1227,7 @@ sint r8712_set_auth(struct _adapter *adapter, pcmd->cmdsz = sizeof(struct setauth_parm); pcmd->rsp = NULL; pcmd->rspsz = 0; - _init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); r8712_enqueue_cmd(pcmdpriv, pcmd); return _SUCCESS; } @@ -1299,7 +1299,7 @@ sint r8712_set_key(struct _adapter *adapter, pcmd->cmdsz = (sizeof(struct setkey_parm)); pcmd->rsp = NULL; pcmd->rspsz = 0; - _init_listhead(&pcmd->list); + INIT_LIST_HEAD(&pcmd->list); r8712_enqueue_cmd(pcmdpriv, pcmd); return ret; diff --git a/drivers/staging/rtl8712/rtl871x_mp.c b/drivers/staging/rtl8712/rtl871x_mp.c index e48486cdcca0..594d023d5530 100644 --- a/drivers/staging/rtl8712/rtl871x_mp.c +++ b/drivers/staging/rtl8712/rtl871x_mp.c @@ -65,7 +65,7 @@ static int init_mp_priv(struct mp_priv *pmp_priv) ((addr_t)(pmp_priv->pallocated_mp_xmitframe_buf) & 3); pmp_xmitframe = (struct mp_xmit_frame *)pmp_priv->pmp_xmtframe_buf; for (i = 0; i < NR_MP_XMITFRAME; i++) { - _init_listhead(&(pmp_xmitframe->list)); + INIT_LIST_HEAD(&(pmp_xmitframe->list)); list_insert_tail(&(pmp_xmitframe->list), &(pmp_priv->free_mp_xmitqueue.queue)); pmp_xmitframe->pkt = NULL; diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index eb775872c93c..269c8722aa69 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -86,7 +86,7 @@ sint _r8712_init_recv_priv(struct recv_priv *precvpriv, (RXFRAME_ALIGN_SZ-1)); precvframe = (union recv_frame *)precvpriv->precv_frame_buf; for (i = 0; i < NR_RECVFRAME; i++) { - _init_listhead(&(precvframe->u.list)); + INIT_LIST_HEAD(&(precvframe->u.list)); list_insert_tail(&(precvframe->u.list), &(precvpriv->free_recv_queue.queue)); r8712_os_recv_resource_alloc(padapter, precvframe); diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 6c649842abd7..8dd5e35630ef 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -38,12 +38,12 @@ static void _init_stainfo(struct sta_info *psta) { memset((u8 *)psta, 0, sizeof(struct sta_info)); spin_lock_init(&psta->lock); - _init_listhead(&psta->list); - _init_listhead(&psta->hash_list); + INIT_LIST_HEAD(&psta->list); + INIT_LIST_HEAD(&psta->hash_list); _r8712_init_sta_xmit_priv(&psta->sta_xmitpriv); _r8712_init_sta_recv_priv(&psta->sta_recvpriv); - _init_listhead(&psta->asoc_list); - _init_listhead(&psta->auth_list); + INIT_LIST_HEAD(&psta->asoc_list); + INIT_LIST_HEAD(&psta->auth_list); } u32 _r8712_init_sta_priv(struct sta_priv *pstapriv) @@ -65,13 +65,13 @@ u32 _r8712_init_sta_priv(struct sta_priv *pstapriv) psta = (struct sta_info *)(pstapriv->pstainfo_buf); for (i = 0; i < NUM_STA; i++) { _init_stainfo(psta); - _init_listhead(&(pstapriv->sta_hash[i])); + INIT_LIST_HEAD(&(pstapriv->sta_hash[i])); list_insert_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue)); psta++; } - _init_listhead(&pstapriv->asoc_list); - _init_listhead(&pstapriv->auth_list); + INIT_LIST_HEAD(&pstapriv->asoc_list); + INIT_LIST_HEAD(&pstapriv->auth_list); return _SUCCESS; } diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 230681a8042f..68bfab0f7dd1 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -43,7 +43,7 @@ static void free_hwxmits(struct _adapter *padapter); static void _init_txservq(struct tx_servq *ptxservq) { - _init_listhead(&ptxservq->tx_pending); + INIT_LIST_HEAD(&ptxservq->tx_pending); _init_queue(&ptxservq->sta_pending); ptxservq->qcnt = 0; } @@ -57,8 +57,8 @@ void _r8712_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv) _init_txservq(&psta_xmitpriv->bk_q); _init_txservq(&psta_xmitpriv->vi_q); _init_txservq(&psta_xmitpriv->vo_q); - _init_listhead(&psta_xmitpriv->legacy_dz); - _init_listhead(&psta_xmitpriv->apsd); + INIT_LIST_HEAD(&psta_xmitpriv->legacy_dz); + INIT_LIST_HEAD(&psta_xmitpriv->apsd); } sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, @@ -97,7 +97,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, ((addr_t) (pxmitpriv->pallocated_frame_buf) & 3); pxframe = (struct xmit_frame *) pxmitpriv->pxmit_frame_buf; for (i = 0; i < NR_XMITFRAME; i++) { - _init_listhead(&(pxframe->list)); + INIT_LIST_HEAD(&(pxframe->list)); pxframe->padapter = padapter; pxframe->frame_tag = DATA_FRAMETAG; pxframe->pkt = NULL; @@ -134,7 +134,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, ((addr_t)(pxmitpriv->pallocated_xmitbuf) & 3); pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf; for (i = 0; i < NR_XMITBUFF; i++) { - _init_listhead(&pxmitbuf->list); + INIT_LIST_HEAD(&pxmitbuf->list); pxmitbuf->pallocated_buf = kmalloc(MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ, GFP_ATOMIC); if (pxmitbuf->pallocated_buf == NULL) @@ -1005,7 +1005,7 @@ static void init_hwxmits(struct hw_xmit *phwxmit, sint entry) for (i = 0; i < entry; i++, phwxmit++) { spin_lock_init(&phwxmit->xmit_lock); - _init_listhead(&phwxmit->pending); + INIT_LIST_HEAD(&phwxmit->pending); phwxmit->txcmdcnt = 0; phwxmit->accnt = 0; } -- cgit From 9672b1bd831b12869aaa1ae0ede0e45cd18c5272 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:35 -0400 Subject: staging: rtl8712: remove wrapper function is_list_empty is_list_empty is just an inline wrapper around list_empty. This patch removes the wrapper and directly uses list_empty instead. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 10 +--------- drivers/staging/rtl8712/rtl8712_recv.c | 4 ++-- drivers/staging/rtl8712/rtl871x_cmd.c | 2 +- drivers/staging/rtl8712/rtl871x_xmit.c | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 81f48a60646d..3857cc0b6b75 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -115,14 +115,6 @@ For the following list_xxx operations, caller must guarantee the atomic context. Otherwise, there will be racing condition. */ -static inline u32 is_list_empty(struct list_head *phead) -{ - if (list_empty(phead)) - return true; - else - return false; -} - static inline void list_insert_tail(struct list_head *plist, struct list_head *phead) { @@ -139,7 +131,7 @@ static inline u32 _down_sema(struct semaphore *sema) static inline u32 _queue_empty(struct __queue *pqueue) { - return is_list_empty(&(pqueue->queue)); + return list_empty(&(pqueue->queue)); } static inline u32 end_of_queue_search(struct list_head *head, diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index e311a601a4fd..ef22802a73f9 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -532,7 +532,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, plist = get_next(phead); /* Handling some condition for forced indicate case.*/ if (bforced == true) { - if (is_list_empty(phead)) + if (list_empty(phead)) return true; else { prframe = LIST_CONTAINOR(plist, union recv_frame, u); @@ -542,7 +542,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, } /* Prepare indication list and indication. * Check if there is any packet need indicate. */ - while (!is_list_empty(phead)) { + while (!list_empty(phead)) { prframe = LIST_CONTAINOR(plist, union recv_frame, u); pattrib = &prframe->u.hdr.attrib; if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) { diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index 646c5cd5245d..689364dfa564 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -137,7 +137,7 @@ static struct cmd_obj *_dequeue_cmd(struct __queue *queue) struct cmd_obj *obj; spin_lock_irqsave(&(queue->lock), irqL); - if (is_list_empty(&(queue->queue))) + if (list_empty(&(queue->queue))) obj = NULL; else { obj = LIST_CONTAINOR(get_next(&(queue->queue)), diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 68bfab0f7dd1..989fb67dfb51 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -939,7 +939,7 @@ sint r8712_xmit_classifier(struct _adapter *padapter, ptxservq = get_sta_pending(padapter, &pstapending, psta, pattrib->priority); spin_lock_irqsave(&pstapending->lock, irqL0); - if (is_list_empty(&ptxservq->tx_pending)) + if (list_empty(&ptxservq->tx_pending)) list_insert_tail(&ptxservq->tx_pending, get_list_head(pstapending)); list_insert_tail(&pxmitframe->list, -- cgit From fdfbf7890dcac98d698ce889720e90c1f26cf30f Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:36 -0400 Subject: staging: rtl8712: remove wrapper function list_insert_tail list_insert_tail is just an inline wrapper around list_add_tail. This patch removes the wrapper and directly uses list_add_tail. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 6 ------ drivers/staging/rtl8712/rtl8712_recv.c | 10 +++++----- drivers/staging/rtl8712/rtl871x_cmd.c | 6 +++--- drivers/staging/rtl8712/rtl871x_io.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 8 ++++---- drivers/staging/rtl8712/rtl871x_mp.c | 2 +- drivers/staging/rtl8712/rtl871x_recv.c | 2 +- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 6 +++--- drivers/staging/rtl8712/rtl871x_xmit.c | 12 ++++++------ 9 files changed, 24 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 3857cc0b6b75..a0c02708f64a 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -115,12 +115,6 @@ For the following list_xxx operations, caller must guarantee the atomic context. Otherwise, there will be racing condition. */ -static inline void list_insert_tail(struct list_head *plist, - struct list_head *phead) -{ - list_add_tail(plist, phead); -} - static inline u32 _down_sema(struct semaphore *sema) { if (down_interruptible(sema)) diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index ef22802a73f9..bdd208d68075 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -73,7 +73,7 @@ int r8712_init_recv_priv(struct recv_priv *precvpriv, struct _adapter *padapter) break; precvbuf->ref_cnt = 0; precvbuf->adapter = padapter; - list_insert_tail(&precvbuf->list, + list_add_tail(&precvbuf->list, &(precvpriv->free_recv_buf_queue.queue)); precvbuf++; } @@ -146,7 +146,7 @@ int r8712_free_recvframe(union recv_frame *precvframe, } spin_lock_irqsave(&pfree_recv_queue->lock, irqL); list_delete(&(precvframe->u.hdr.list)); - list_insert_tail(&(precvframe->u.hdr.list), + list_add_tail(&(precvframe->u.hdr.list), get_list_head(pfree_recv_queue)); if (padapter != NULL) { if (pfree_recv_queue == &precvpriv->free_recv_queue) @@ -297,7 +297,7 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, } /* Then enqueue the 0~(n-1) fragment to the defrag_q */ phead = get_list_head(pdefrag_q); - list_insert_tail(&pfhdr->list, phead); + list_add_tail(&pfhdr->list, phead); prtnframe = NULL; } else { /* can't find this ta's defrag_queue, so free this @@ -312,7 +312,7 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, * enqueue the last fragment */ if (pdefrag_q != NULL) { phead = get_list_head(pdefrag_q); - list_insert_tail(&pfhdr->list, phead); + list_add_tail(&pfhdr->list, phead); /*call recvframe_defrag to defrag*/ precv_frame = recvframe_defrag(padapter, pdefrag_q); prtnframe = precv_frame; @@ -512,7 +512,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, break; } list_delete(&(prframe->u.hdr.list)); - list_insert_tail(&(prframe->u.hdr.list), plist); + list_add_tail(&(prframe->u.hdr.list), plist); return true; } diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index 689364dfa564..cae8ee675d58 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -126,7 +126,7 @@ static sint _enqueue_cmd(struct __queue *queue, struct cmd_obj *obj) if (obj == NULL) return _SUCCESS; spin_lock_irqsave(&queue->lock, irqL); - list_insert_tail(&obj->list, &queue->queue); + list_add_tail(&obj->list, &queue->queue); spin_unlock_irqrestore(&queue->lock, irqL); return _SUCCESS; } @@ -190,7 +190,7 @@ u32 r8712_enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj) return _FAIL; queue = &pcmdpriv->cmd_queue; spin_lock_irqsave(&queue->lock, irqL); - list_insert_tail(&obj->list, &queue->queue); + list_add_tail(&obj->list, &queue->queue); spin_unlock_irqrestore(&queue->lock, irqL); up(&pcmdpriv->cmd_queue_sema); return _SUCCESS; @@ -956,7 +956,7 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter, goto createbss_cmd_fail; pwlan->last_scanned = jiffies; } else - list_insert_tail(&(pwlan->list), + list_add_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); pnetwork->Length = r8712_get_ndis_wlan_bssid_ex_sz(pnetwork); memcpy(&(pwlan->network), pnetwork, pnetwork->Length); diff --git a/drivers/staging/rtl8712/rtl871x_io.c b/drivers/staging/rtl8712/rtl871x_io.c index c42a57878655..8858687e87fe 100644 --- a/drivers/staging/rtl8712/rtl871x_io.c +++ b/drivers/staging/rtl8712/rtl871x_io.c @@ -132,7 +132,7 @@ uint r8712_alloc_io_queue(struct _adapter *adapter) pio_req = (struct io_req *)(pio_queue->free_ioreqs_buf); for (i = 0; i < NUM_IOREQ; i++) { INIT_LIST_HEAD(&pio_req->list); - list_insert_tail(&pio_req->list, &pio_queue->free_ioreqs); + list_add_tail(&pio_req->list, &pio_queue->free_ioreqs); pio_req++; } if ((register_intf_hdl((u8 *)adapter, &(pio_queue->intf))) == _FAIL) diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 3000b2ac4cd4..05ff7dd5a3de 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -70,7 +70,7 @@ static sint _init_mlme_priv(struct _adapter *padapter) pnetwork = (struct wlan_network *)pbuf; for (i = 0; i < MAX_BSS_CNT; i++) { INIT_LIST_HEAD(&(pnetwork->list)); - list_insert_tail(&(pnetwork->list), + list_add_tail(&(pnetwork->list), &(pmlmepriv->free_bss_pool.queue)); pnetwork++; } @@ -118,7 +118,7 @@ static void _free_network(struct mlme_priv *pmlmepriv, return; spin_lock_irqsave(&free_queue->lock, irqL); list_delete(&pnetwork->list); - list_insert_tail(&pnetwork->list, &free_queue->queue); + list_add_tail(&pnetwork->list, &free_queue->queue); pmlmepriv->num_of_scanned--; spin_unlock_irqrestore(&free_queue->lock, irqL); } @@ -133,7 +133,7 @@ static void _free_network_nolock(struct mlme_priv *pmlmepriv, if (pnetwork->fixed == true) return; list_delete(&pnetwork->list); - list_insert_tail(&pnetwork->list, get_list_head(free_queue)); + list_add_tail(&pnetwork->list, get_list_head(free_queue)); pmlmepriv->num_of_scanned--; } @@ -437,7 +437,7 @@ static void update_scanned_network(struct _adapter *adapter, bssid_ex_sz = r8712_get_ndis_wlan_bssid_ex_sz(target); target->Length = bssid_ex_sz; memcpy(&pnetwork->network, target, bssid_ex_sz); - list_insert_tail(&pnetwork->list, &queue->queue); + list_add_tail(&pnetwork->list, &queue->queue); } } else { /* we have an entry and we are going to update it. But diff --git a/drivers/staging/rtl8712/rtl871x_mp.c b/drivers/staging/rtl8712/rtl871x_mp.c index 594d023d5530..aae77f0ea98f 100644 --- a/drivers/staging/rtl8712/rtl871x_mp.c +++ b/drivers/staging/rtl8712/rtl871x_mp.c @@ -66,7 +66,7 @@ static int init_mp_priv(struct mp_priv *pmp_priv) pmp_xmitframe = (struct mp_xmit_frame *)pmp_priv->pmp_xmtframe_buf; for (i = 0; i < NR_MP_XMITFRAME; i++) { INIT_LIST_HEAD(&(pmp_xmitframe->list)); - list_insert_tail(&(pmp_xmitframe->list), + list_add_tail(&(pmp_xmitframe->list), &(pmp_priv->free_mp_xmitqueue.queue)); pmp_xmitframe->pkt = NULL; pmp_xmitframe->frame_tag = MP_FRAMETAG; diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index 269c8722aa69..cd319823542e 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -87,7 +87,7 @@ sint _r8712_init_recv_priv(struct recv_priv *precvpriv, precvframe = (union recv_frame *)precvpriv->precv_frame_buf; for (i = 0; i < NR_RECVFRAME; i++) { INIT_LIST_HEAD(&(precvframe->u.list)); - list_insert_tail(&(precvframe->u.list), + list_add_tail(&(precvframe->u.list), &(precvpriv->free_recv_queue.queue)); r8712_os_recv_resource_alloc(padapter, precvframe); precvframe->u.hdr.adapter = padapter; diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 8dd5e35630ef..e7f3cdb0533a 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -66,7 +66,7 @@ u32 _r8712_init_sta_priv(struct sta_priv *pstapriv) for (i = 0; i < NUM_STA; i++) { _init_stainfo(psta); INIT_LIST_HEAD(&(pstapriv->sta_hash[i])); - list_insert_tail(&psta->list, + list_add_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue)); psta++; } @@ -137,7 +137,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) goto exit; } phash_list = &(pstapriv->sta_hash[index]); - list_insert_tail(&psta->hash_list, phash_list); + list_add_tail(&psta->hash_list, phash_list); pstapriv->asoc_sta_count++; /* For the SMC router, the sequence number of first packet of WPS handshake @@ -208,7 +208,7 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta) } spin_lock(&(pfree_sta_queue->lock)); /* insert into free_sta_queue; 20061114 */ - list_insert_tail(&psta->list, get_list_head(pfree_sta_queue)); + list_add_tail(&psta->list, get_list_head(pfree_sta_queue)); spin_unlock(&(pfree_sta_queue->lock)); } diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 989fb67dfb51..71d0d0d597e9 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -103,7 +103,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, pxframe->pkt = NULL; pxframe->buf_addr = NULL; pxframe->pxmitbuf = NULL; - list_insert_tail(&(pxframe->list), + list_add_tail(&(pxframe->list), &(pxmitpriv->free_xmit_queue.queue)); pxframe++; } @@ -143,7 +143,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, ((addr_t) (pxmitbuf->pallocated_buf) & (XMITBUF_ALIGN_SZ - 1)); r8712_xmit_resource_alloc(padapter, pxmitbuf); - list_insert_tail(&pxmitbuf->list, + list_add_tail(&pxmitbuf->list, &(pxmitpriv->free_xmitbuf_queue.queue)); pxmitbuf++; } @@ -767,7 +767,7 @@ int r8712_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) return _FAIL; spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); list_delete(&pxmitbuf->list); - list_insert_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); + list_add_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); pxmitpriv->free_xmitbuf_cnt++; spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL); return _SUCCESS; @@ -833,7 +833,7 @@ void r8712_free_xmitframe(struct xmit_priv *pxmitpriv, pndis_pkt = pxmitframe->pkt; pxmitframe->pkt = NULL; } - list_insert_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue)); + list_add_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue)); pxmitpriv->free_xmitframe_cnt++; spin_unlock_irqrestore(&pfree_xmit_queue->lock, irqL); if (netif_queue_stopped(padapter->pnetdev)) @@ -940,9 +940,9 @@ sint r8712_xmit_classifier(struct _adapter *padapter, psta, pattrib->priority); spin_lock_irqsave(&pstapending->lock, irqL0); if (list_empty(&ptxservq->tx_pending)) - list_insert_tail(&ptxservq->tx_pending, + list_add_tail(&ptxservq->tx_pending, get_list_head(pstapending)); - list_insert_tail(&pxmitframe->list, + list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending)); ptxservq->qcnt++; spin_unlock_irqrestore(&pstapending->lock, irqL0); -- cgit From 29197b7c45a144883d87cb8eaf337026cd886a20 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:37 -0400 Subject: staging: rtl8712: remove wrapper function list_delete list_delete is just an inline wrapper around list_del_init. This patch removes the wrapper and directly uses list_del_init. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_recv.c | 8 ++++---- drivers/staging/rtl8712/rtl8712_xmit.c | 4 ++-- drivers/staging/rtl8712/rtl871x_cmd.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 6 +++--- drivers/staging/rtl8712/rtl871x_recv.c | 2 +- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 12 ++++++------ drivers/staging/rtl8712/rtl871x_xmit.c | 8 ++++---- 8 files changed, 21 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index a0c02708f64a..99b7006843ba 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -71,11 +71,6 @@ static inline struct list_head *get_list_head(struct __queue *queue) #define LIST_CONTAINOR(ptr, type, member) \ ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -static inline void list_delete(struct list_head *plist) -{ - list_del_init(plist); -} - static inline void _init_timer(struct timer_list *ptimer, struct net_device *padapter, void *pfunc, void *cntx) diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index bdd208d68075..985b8615876b 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -145,7 +145,7 @@ int r8712_free_recvframe(union recv_frame *precvframe, precvframe->u.hdr.pkt = NULL; } spin_lock_irqsave(&pfree_recv_queue->lock, irqL); - list_delete(&(precvframe->u.hdr.list)); + list_del_init(&(precvframe->u.hdr.list)); list_add_tail(&(precvframe->u.hdr.list), get_list_head(pfree_recv_queue)); if (padapter != NULL) { @@ -211,7 +211,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, phead = get_list_head(defrag_q); plist = get_next(phead); prframe = LIST_CONTAINOR(plist, union recv_frame, u); - list_delete(&prframe->u.list); + list_del_init(&prframe->u.list); pfhdr = &prframe->u.hdr; curfragnum = 0; if (curfragnum != pfhdr->attrib.frag_num) { @@ -511,7 +511,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, else break; } - list_delete(&(prframe->u.hdr.list)); + list_del_init(&(prframe->u.hdr.list)); list_add_tail(&(prframe->u.hdr.list), plist); return true; } @@ -547,7 +547,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, pattrib = &prframe->u.hdr.attrib; if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) { plist = get_next(plist); - list_delete(&(prframe->u.hdr.list)); + list_del_init(&(prframe->u.hdr.list)); if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num)) preorder_ctrl->indicate_seq = diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c b/drivers/staging/rtl8712/rtl8712_xmit.c index 4e3f09420c1e..56aa209cf960 100644 --- a/drivers/staging/rtl8712/rtl8712_xmit.c +++ b/drivers/staging/rtl8712/rtl8712_xmit.c @@ -171,7 +171,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, if ((end_of_queue_search(xmitframe_phead, xmitframe_plist)) == false) { pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list); - list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); ptxservq->qcnt--; phwxmit->txcmdcnt++; } @@ -226,7 +226,7 @@ static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, /*Remove sta node when there are no pending packets.*/ if (_queue_empty(pframe_queue)) { /*must be done after get_next and before break*/ - list_delete(&ptxservq->tx_pending); + list_del_init(&ptxservq->tx_pending); } } } diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index cae8ee675d58..338bb141c94f 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -142,7 +142,7 @@ static struct cmd_obj *_dequeue_cmd(struct __queue *queue) else { obj = LIST_CONTAINOR(get_next(&(queue->queue)), struct cmd_obj, list); - list_delete(&obj->list); + list_del_init(&obj->list); } spin_unlock_irqrestore(&(queue->lock), irqL); return obj; diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 05ff7dd5a3de..943d25add521 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -94,7 +94,7 @@ struct wlan_network *_r8712_alloc_network(struct mlme_priv *pmlmepriv) spin_lock_irqsave(&free_queue->lock, irqL); plist = get_next(&(free_queue->queue)); pnetwork = LIST_CONTAINOR(plist , struct wlan_network, list); - list_delete(&pnetwork->list); + list_del_init(&pnetwork->list); pnetwork->last_scanned = jiffies; pmlmepriv->num_of_scanned++; spin_unlock_irqrestore(&free_queue->lock, irqL); @@ -117,7 +117,7 @@ static void _free_network(struct mlme_priv *pmlmepriv, if (delta_time < SCANQUEUE_LIFETIME) return; spin_lock_irqsave(&free_queue->lock, irqL); - list_delete(&pnetwork->list); + list_del_init(&pnetwork->list); list_add_tail(&pnetwork->list, &free_queue->queue); pmlmepriv->num_of_scanned--; spin_unlock_irqrestore(&free_queue->lock, irqL); @@ -132,7 +132,7 @@ static void _free_network_nolock(struct mlme_priv *pmlmepriv, return; if (pnetwork->fixed == true) return; - list_delete(&pnetwork->list); + list_del_init(&pnetwork->list); list_add_tail(&pnetwork->list, get_list_head(free_queue)); pmlmepriv->num_of_scanned--; } diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index cd319823542e..246b8ce513d7 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -118,7 +118,7 @@ union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue) phead = get_list_head(pfree_recv_queue); plist = get_next(phead); precvframe = LIST_CONTAINOR(plist, union recv_frame, u); - list_delete(&precvframe->u.hdr.list); + list_del_init(&precvframe->u.hdr.list); padapter = precvframe->u.hdr.adapter; if (padapter != NULL) { precvpriv = &padapter->recvpriv; diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index e7f3cdb0533a..92d53278b563 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -127,7 +127,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) else { psta = LIST_CONTAINOR(get_next(&pfree_sta_queue->queue), struct sta_info, list); - list_delete(&(psta->list)); + list_del_init(&(psta->list)); tmp_aid = psta->aid; _init_stainfo(psta); memcpy(psta->hwaddr, hwaddr, ETH_ALEN); @@ -181,21 +181,21 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta) pstaxmitpriv = &psta->sta_xmitpriv; spin_lock_irqsave(&(pxmitpriv->vo_pending.lock), irqL0); r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending); - list_delete(&(pstaxmitpriv->vo_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vo_q.tx_pending)); spin_unlock_irqrestore(&(pxmitpriv->vo_pending.lock), irqL0); spin_lock_irqsave(&(pxmitpriv->vi_pending.lock), irqL0); r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending); - list_delete(&(pstaxmitpriv->vi_q.tx_pending)); + list_del_init(&(pstaxmitpriv->vi_q.tx_pending)); spin_unlock_irqrestore(&(pxmitpriv->vi_pending.lock), irqL0); spin_lock_irqsave(&(pxmitpriv->bk_pending.lock), irqL0); r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending); - list_delete(&(pstaxmitpriv->bk_q.tx_pending)); + list_del_init(&(pstaxmitpriv->bk_q.tx_pending)); spin_unlock_irqrestore(&(pxmitpriv->bk_pending.lock), irqL0); spin_lock_irqsave(&(pxmitpriv->be_pending.lock), irqL0); r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->be_q.sta_pending); - list_delete(&(pstaxmitpriv->be_q.tx_pending)); + list_del_init(&(pstaxmitpriv->be_q.tx_pending)); spin_unlock_irqrestore(&(pxmitpriv->be_pending.lock), irqL0); - list_delete(&psta->hash_list); + list_del_init(&psta->hash_list); pstapriv->asoc_sta_count--; /* re-init sta_info; 20061114 */ _r8712_init_sta_xmit_priv(&psta->sta_xmitpriv); diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 71d0d0d597e9..2e79e4ef18ab 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -750,7 +750,7 @@ struct xmit_buf *r8712_alloc_xmitbuf(struct xmit_priv *pxmitpriv) phead = get_list_head(pfree_xmitbuf_queue); plist = get_next(phead); pxmitbuf = LIST_CONTAINOR(plist, struct xmit_buf, list); - list_delete(&(pxmitbuf->list)); + list_del_init(&(pxmitbuf->list)); } if (pxmitbuf != NULL) pxmitpriv->free_xmitbuf_cnt--; @@ -766,7 +766,7 @@ int r8712_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) if (pxmitbuf == NULL) return _FAIL; spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); - list_delete(&pxmitbuf->list); + list_del_init(&pxmitbuf->list); list_add_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); pxmitpriv->free_xmitbuf_cnt++; spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL); @@ -804,7 +804,7 @@ struct xmit_frame *r8712_alloc_xmitframe(struct xmit_priv *pxmitpriv) phead = get_list_head(pfree_xmit_queue); plist = get_next(phead); pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list); - list_delete(&(pxframe->list)); + list_del_init(&(pxframe->list)); } if (pxframe != NULL) { pxmitpriv->free_xmitframe_cnt--; @@ -828,7 +828,7 @@ void r8712_free_xmitframe(struct xmit_priv *pxmitpriv, if (pxmitframe == NULL) return; spin_lock_irqsave(&pfree_xmit_queue->lock, irqL); - list_delete(&pxmitframe->list); + list_del_init(&pxmitframe->list); if (pxmitframe->pkt) { pndis_pkt = pxmitframe->pkt; pxmitframe->pkt = NULL; -- cgit From 849fb0a8878336732165eb482d3f0e8a4f71dd03 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:38 -0400 Subject: staging: rtl8712: remove wrapper function get_next get_next is just an inline wrapper around return list->next. This patch removes the wrapper and directly uses list->next where applicable. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_recv.c | 14 +++++++------- drivers/staging/rtl8712/rtl8712_xmit.c | 10 ++++++---- drivers/staging/rtl8712/rtl871x_cmd.c | 2 +- drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 16 ++++++++-------- drivers/staging/rtl8712/rtl871x_ioctl_set.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 22 +++++++++++----------- drivers/staging/rtl8712/rtl871x_recv.c | 6 +++--- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 14 +++++++------- drivers/staging/rtl8712/rtl871x_xmit.c | 8 ++++---- 10 files changed, 48 insertions(+), 51 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 99b7006843ba..6f1bd47e67c5 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -58,11 +58,6 @@ struct __queue { spin_lock_init(&((pqueue)->lock)); \ } while (0) -static inline struct list_head *get_next(struct list_head *list) -{ - return list->next; -} - static inline struct list_head *get_list_head(struct __queue *queue) { return &(queue->queue); diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index 985b8615876b..c484d70ccee0 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -209,7 +209,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, pfree_recv_queue = &adapter->recvpriv.free_recv_queue; phead = get_list_head(defrag_q); - plist = get_next(phead); + plist = phead->next; prframe = LIST_CONTAINOR(plist, union recv_frame, u); list_del_init(&prframe->u.list); pfhdr = &prframe->u.hdr; @@ -223,7 +223,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, } curfragnum++; plist = get_list_head(defrag_q); - plist = get_next(plist); + plist = plist->next; data = get_recvframe_data(prframe); while (end_of_queue_search(phead, plist) == false) { pnextrframe = LIST_CONTAINOR(plist, union recv_frame, u); @@ -247,7 +247,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, memcpy(pfhdr->rx_tail, pnfhdr->rx_data, pnfhdr->len); recvframe_put(prframe, pnfhdr->len); pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len; - plist = get_next(plist); + plist = plist->next; } /* free the defrag_q queue and return the prframe */ r8712_free_recvframe_queue(defrag_q, pfree_recv_queue); @@ -500,12 +500,12 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; phead = get_list_head(ppending_recvframe_queue); - plist = get_next(phead); + plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pnextrframe = LIST_CONTAINOR(plist, union recv_frame, u); pnextattrib = &pnextrframe->u.hdr.attrib; if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num)) - plist = get_next(plist); + plist = plist->next; else if (SN_EQUAL(pnextattrib->seq_num, pattrib->seq_num)) return false; else @@ -529,7 +529,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, &preorder_ctrl->pending_recvframe_queue; phead = get_list_head(ppending_recvframe_queue); - plist = get_next(phead); + plist = phead->next; /* Handling some condition for forced indicate case.*/ if (bforced == true) { if (list_empty(phead)) @@ -546,7 +546,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, prframe = LIST_CONTAINOR(plist, union recv_frame, u); pattrib = &prframe->u.hdr.attrib; if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) { - plist = get_next(plist); + plist = plist->next; list_del_init(&(prframe->u.hdr.list)); if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num)) diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c b/drivers/staging/rtl8712/rtl8712_xmit.c index 56aa209cf960..c4078fa7ade4 100644 --- a/drivers/staging/rtl8712/rtl8712_xmit.c +++ b/drivers/staging/rtl8712/rtl8712_xmit.c @@ -167,7 +167,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe = NULL; xmitframe_phead = get_list_head(pframe_queue); - xmitframe_plist = get_next(xmitframe_phead); + xmitframe_plist = xmitframe_phead->next; if ((end_of_queue_search(xmitframe_phead, xmitframe_plist)) == false) { pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list); @@ -211,7 +211,7 @@ static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, for (i = 0; i < entry; i++) { phwxmit = phwxmit_i + inx[i]; sta_phead = get_list_head(phwxmit->sta_queue); - sta_plist = get_next(sta_phead); + sta_plist = sta_phead->next; while ((end_of_queue_search(sta_phead, sta_plist)) == false) { ptxservq = LIST_CONTAINOR(sta_plist, struct tx_servq, tx_pending); @@ -222,10 +222,12 @@ static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, phwxmit->accnt--; goto exit_dequeue_xframe_ex; } - sta_plist = get_next(sta_plist); + sta_plist = sta_plist->next; /*Remove sta node when there are no pending packets.*/ if (_queue_empty(pframe_queue)) { - /*must be done after get_next and before break*/ + /* must be done after sta_plist->next + * and before break + */ list_del_init(&ptxservq->tx_pending); } } diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c index 338bb141c94f..d9c1561e3272 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.c +++ b/drivers/staging/rtl8712/rtl871x_cmd.c @@ -140,7 +140,7 @@ static struct cmd_obj *_dequeue_cmd(struct __queue *queue) if (list_empty(&(queue->queue))) obj = NULL; else { - obj = LIST_CONTAINOR(get_next(&(queue->queue)), + obj = LIST_CONTAINOR(queue->queue.next, struct cmd_obj, list); list_del_init(&obj->list); } diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index 6d6f15d1cc75..cd7d3706709f 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c @@ -1079,13 +1079,13 @@ static int r8711_wx_set_wap(struct net_device *dev, authmode = padapter->securitypriv.ndisauthtype; spin_lock_irqsave(&queue->lock, irqL); phead = get_list_head(queue); - pmlmepriv->pscanned = get_next(phead); + pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned) == true) break; pnetwork = LIST_CONTAINOR(pmlmepriv->pscanned, struct wlan_network, list); - pmlmepriv->pscanned = get_next(pmlmepriv->pscanned); + pmlmepriv->pscanned = pmlmepriv->pscanned->next; dst_bssid = pnetwork->network.MacAddress; if (!memcmp(dst_bssid, temp->sa_data, ETH_ALEN)) { r8712_set_802_11_infrastructure_mode(padapter, @@ -1228,7 +1228,7 @@ static int r8711_wx_get_scan(struct net_device *dev, } spin_lock_irqsave(&queue->lock, irqL); phead = get_list_head(queue); - plist = get_next(phead); + plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) break; @@ -1238,7 +1238,7 @@ static int r8711_wx_get_scan(struct net_device *dev, } pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list); ev = translate_scan(padapter, a, pnetwork, ev, stop); - plist = get_next(plist); + plist = plist->next; } spin_unlock_irqrestore(&queue->lock, irqL); wrqu->data.length = ev - extra; @@ -1287,13 +1287,13 @@ static int r8711_wx_set_essid(struct net_device *dev, memcpy(ndis_ssid.Ssid, extra, len); src_ssid = ndis_ssid.Ssid; phead = get_list_head(queue); - pmlmepriv->pscanned = get_next(phead); + pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned)) break; pnetwork = LIST_CONTAINOR(pmlmepriv->pscanned, struct wlan_network, list); - pmlmepriv->pscanned = get_next(pmlmepriv->pscanned); + pmlmepriv->pscanned = pmlmepriv->pscanned->next; dst_ssid = pnetwork->network.Ssid.Ssid; if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength)) && (pnetwork->network.Ssid.SsidLength == @@ -2003,7 +2003,7 @@ static int r871x_get_ap_info(struct net_device *dev, return -EINVAL; spin_lock_irqsave(&(pmlmepriv->scanned_queue.lock), irqL); phead = get_list_head(queue); - plist = get_next(phead); + plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) break; @@ -2031,7 +2031,7 @@ static int r871x_get_ap_info(struct net_device *dev, break; } } - plist = get_next(plist); + plist = plist->next; } spin_unlock_irqrestore(&(pmlmepriv->scanned_queue.lock), irqL); if (pdata->length >= 34) { diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_set.c b/drivers/staging/rtl8712/rtl871x_ioctl_set.c index 53a7c8c1bb40..87dce03c7c2b 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_set.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_set.c @@ -63,7 +63,7 @@ static u8 do_join(struct _adapter *padapter) struct __queue *queue = &(pmlmepriv->scanned_queue); phead = get_list_head(queue); - plist = get_next(phead); + plist = phead->next; pmlmepriv->cur_network.join_res = -2; pmlmepriv->fw_state |= _FW_UNDER_LINKING; pmlmepriv->pscanned = plist; diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 943d25add521..7ca13b9f515b 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -92,7 +92,7 @@ struct wlan_network *_r8712_alloc_network(struct mlme_priv *pmlmepriv) if (_queue_empty(free_queue) == true) return NULL; spin_lock_irqsave(&free_queue->lock, irqL); - plist = get_next(&(free_queue->queue)); + plist = free_queue->queue.next; pnetwork = LIST_CONTAINOR(plist , struct wlan_network, list); list_del_init(&pnetwork->list); pnetwork->last_scanned = jiffies; @@ -154,10 +154,10 @@ static struct wlan_network *_r8712_find_network(struct __queue *scanned_queue, return NULL; spin_lock_irqsave(&scanned_queue->lock, irqL); phead = get_list_head(scanned_queue); - plist = get_next(phead); + plist = phead->next; while (plist != phead) { pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list); - plist = get_next(plist); + plist = plist->next; if (!memcmp(addr, pnetwork->network.MacAddress, ETH_ALEN)) break; } @@ -175,10 +175,10 @@ static void _free_network_queue(struct _adapter *padapter) spin_lock_irqsave(&scanned_queue->lock, irqL); phead = get_list_head(scanned_queue); - plist = get_next(phead); + plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list); - plist = get_next(plist); + plist = plist->next; _free_network(pmlmepriv, pnetwork); } spin_unlock_irqrestore(&scanned_queue->lock, irqL); @@ -316,7 +316,7 @@ struct wlan_network *r8712_get_oldest_wlan_network( struct wlan_network *oldest = NULL; phead = get_list_head(scanned_queue); - plist = get_next(phead); + plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) break; @@ -327,7 +327,7 @@ struct wlan_network *r8712_get_oldest_wlan_network( (unsigned long)pwlan->last_scanned)) oldest = pwlan; } - plist = get_next(plist); + plist = plist->next; } return oldest; } @@ -399,7 +399,7 @@ static void update_scanned_network(struct _adapter *adapter, struct wlan_network *oldest = NULL; phead = get_list_head(queue); - plist = get_next(phead); + plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) @@ -413,7 +413,7 @@ static void update_scanned_network(struct _adapter *adapter, (unsigned long)pnetwork->last_scanned)) oldest = pnetwork; - plist = get_next(plist); + plist = plist->next; } @@ -1139,7 +1139,7 @@ int r8712_select_and_join_from_scan(struct mlme_priv *pmlmepriv) adapter = (struct _adapter *)pmlmepriv->nic_hdl; queue = &pmlmepriv->scanned_queue; phead = get_list_head(queue); - pmlmepriv->pscanned = get_next(phead); + pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned) == true) { if ((pmlmepriv->assoc_by_rssi == true) && @@ -1153,7 +1153,7 @@ int r8712_select_and_join_from_scan(struct mlme_priv *pmlmepriv) struct wlan_network, list); if (pnetwork == NULL) return _FAIL; - pmlmepriv->pscanned = get_next(pmlmepriv->pscanned); + pmlmepriv->pscanned = pmlmepriv->pscanned->next; if (pmlmepriv->assoc_by_bssid == true) { dst_ssid = pnetwork->network.MacAddress; src_ssid = pmlmepriv->assoc_bssid; diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index 246b8ce513d7..114e9f30aecf 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -116,7 +116,7 @@ union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue) precvframe = NULL; else { phead = get_list_head(pfree_recv_queue); - plist = get_next(phead); + plist = phead->next; precvframe = LIST_CONTAINOR(plist, union recv_frame, u); list_del_init(&precvframe->u.hdr.list); padapter = precvframe->u.hdr.adapter; @@ -146,10 +146,10 @@ void r8712_free_recvframe_queue(struct __queue *pframequeue, spin_lock(&pframequeue->lock); phead = get_list_head(pframequeue); - plist = get_next(phead); + plist = phead->next; while (end_of_queue_search(phead, plist) == false) { precvframe = LIST_CONTAINOR(plist, union recv_frame, u); - plist = get_next(plist); + plist = plist->next; r8712_free_recvframe(precvframe, pfree_recv_queue); } spin_unlock(&pframequeue->lock); diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 92d53278b563..7db89215be5c 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -84,10 +84,10 @@ static void mfree_all_stainfo(struct sta_priv *pstapriv) spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); phead = get_list_head(&pstapriv->free_sta_queue); - plist = get_next(phead); + plist = phead->next; while ((end_of_queue_search(phead, plist)) == false) { psta = LIST_CONTAINOR(plist, struct sta_info, list); - plist = get_next(plist); + plist = plist->next; } spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); @@ -125,7 +125,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) if (_queue_empty(pfree_sta_queue) == true) psta = NULL; else { - psta = LIST_CONTAINOR(get_next(&pfree_sta_queue->queue), + psta = LIST_CONTAINOR(pfree_sta_queue->queue.next, struct sta_info, list); list_del_init(&(psta->list)); tmp_aid = psta->aid; @@ -227,11 +227,11 @@ void r8712_free_all_stainfo(struct _adapter *padapter) spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); for (index = 0; index < NUM_STA; index++) { phead = &(pstapriv->sta_hash[index]); - plist = get_next(phead); + plist = phead->next; while ((end_of_queue_search(phead, plist)) == false) { psta = LIST_CONTAINOR(plist, struct sta_info, hash_list); - plist = get_next(plist); + plist = plist->next; if (pbcmc_stainfo != psta) r8712_free_stainfo(padapter , psta); } @@ -252,7 +252,7 @@ struct sta_info *r8712_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) index = wifi_mac_hash(hwaddr); spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); phead = &(pstapriv->sta_hash[index]); - plist = get_next(phead); + plist = phead->next; while ((end_of_queue_search(phead, plist)) == false) { psta = LIST_CONTAINOR(plist, struct sta_info, hash_list); if ((!memcmp(psta->hwaddr, hwaddr, ETH_ALEN))) { @@ -260,7 +260,7 @@ struct sta_info *r8712_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) break; } psta = NULL; - plist = get_next(plist); + plist = plist->next; } spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); return psta; diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 2e79e4ef18ab..29a9f503b7b6 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -748,7 +748,7 @@ struct xmit_buf *r8712_alloc_xmitbuf(struct xmit_priv *pxmitpriv) pxmitbuf = NULL; else { phead = get_list_head(pfree_xmitbuf_queue); - plist = get_next(phead); + plist = phead->next; pxmitbuf = LIST_CONTAINOR(plist, struct xmit_buf, list); list_del_init(&(pxmitbuf->list)); } @@ -802,7 +802,7 @@ struct xmit_frame *r8712_alloc_xmitframe(struct xmit_priv *pxmitpriv) pxframe = NULL; else { phead = get_list_head(pfree_xmit_queue); - plist = get_next(phead); + plist = phead->next; pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list); list_del_init(&(pxframe->list)); } @@ -858,10 +858,10 @@ void r8712_free_xmitframe_queue(struct xmit_priv *pxmitpriv, spin_lock_irqsave(&(pframequeue->lock), irqL); phead = get_list_head(pframequeue); - plist = get_next(phead); + plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pxmitframe = LIST_CONTAINOR(plist, struct xmit_frame, list); - plist = get_next(plist); + plist = plist->next; r8712_free_xmitframe(pxmitpriv, pxmitframe); } spin_unlock_irqrestore(&(pframequeue->lock), irqL); -- cgit From e99a428a1daed550142a08f6acb5265a1d108e65 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:39 -0400 Subject: staging: rtl8712: remove function get_list_head get_list_head is an inline that returns &list->head. This patch removes this inline and directly applies &list->head where applicable. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_recv.c | 15 +++++++-------- drivers/staging/rtl8712/rtl8712_xmit.c | 4 ++-- drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 8 ++++---- drivers/staging/rtl8712/rtl871x_ioctl_set.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 12 ++++++------ drivers/staging/rtl8712/rtl871x_recv.c | 4 ++-- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 7 +++---- drivers/staging/rtl8712/rtl871x_xmit.c | 16 +++++++--------- 9 files changed, 32 insertions(+), 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 6f1bd47e67c5..dc6cde99f7d4 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -58,11 +58,6 @@ struct __queue { spin_lock_init(&((pqueue)->lock)); \ } while (0) -static inline struct list_head *get_list_head(struct __queue *queue) -{ - return &(queue->queue); -} - #define LIST_CONTAINOR(ptr, type, member) \ ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index c484d70ccee0..3a057e2ef5e4 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -146,8 +146,7 @@ int r8712_free_recvframe(union recv_frame *precvframe, } spin_lock_irqsave(&pfree_recv_queue->lock, irqL); list_del_init(&(precvframe->u.hdr.list)); - list_add_tail(&(precvframe->u.hdr.list), - get_list_head(pfree_recv_queue)); + list_add_tail(&(precvframe->u.hdr.list), &pfree_recv_queue->queue); if (padapter != NULL) { if (pfree_recv_queue == &precvpriv->free_recv_queue) precvpriv->free_recvframe_cnt++; @@ -208,7 +207,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, struct __queue *pfree_recv_queue; pfree_recv_queue = &adapter->recvpriv.free_recv_queue; - phead = get_list_head(defrag_q); + phead = &defrag_q->queue; plist = phead->next; prframe = LIST_CONTAINOR(plist, union recv_frame, u); list_del_init(&prframe->u.list); @@ -222,7 +221,7 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter, return NULL; } curfragnum++; - plist = get_list_head(defrag_q); + plist = &defrag_q->queue; plist = plist->next; data = get_recvframe_data(prframe); while (end_of_queue_search(phead, plist) == false) { @@ -296,7 +295,7 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, } } /* Then enqueue the 0~(n-1) fragment to the defrag_q */ - phead = get_list_head(pdefrag_q); + phead = &pdefrag_q->queue; list_add_tail(&pfhdr->list, phead); prtnframe = NULL; } else { @@ -311,7 +310,7 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, /* the last fragment frame * enqueue the last fragment */ if (pdefrag_q != NULL) { - phead = get_list_head(pdefrag_q); + phead = &pdefrag_q->queue; list_add_tail(&pfhdr->list, phead); /*call recvframe_defrag to defrag*/ precv_frame = recvframe_defrag(padapter, pdefrag_q); @@ -499,7 +498,7 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, &preorder_ctrl->pending_recvframe_queue; struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; - phead = get_list_head(ppending_recvframe_queue); + phead = &ppending_recvframe_queue->queue; plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pnextrframe = LIST_CONTAINOR(plist, union recv_frame, u); @@ -528,7 +527,7 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue; - phead = get_list_head(ppending_recvframe_queue); + phead = &ppending_recvframe_queue->queue; plist = phead->next; /* Handling some condition for forced indicate case.*/ if (bforced == true) { diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c b/drivers/staging/rtl8712/rtl8712_xmit.c index c4078fa7ade4..f3d29982a6f8 100644 --- a/drivers/staging/rtl8712/rtl8712_xmit.c +++ b/drivers/staging/rtl8712/rtl8712_xmit.c @@ -166,7 +166,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, struct list_head *xmitframe_plist, *xmitframe_phead; struct xmit_frame *pxmitframe = NULL; - xmitframe_phead = get_list_head(pframe_queue); + xmitframe_phead = &pframe_queue->queue; xmitframe_plist = xmitframe_phead->next; if ((end_of_queue_search(xmitframe_phead, xmitframe_plist)) == false) { pxmitframe = LIST_CONTAINOR(xmitframe_plist, @@ -210,7 +210,7 @@ static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, spin_lock_irqsave(&pxmitpriv->lock, irqL0); for (i = 0; i < entry; i++) { phwxmit = phwxmit_i + inx[i]; - sta_phead = get_list_head(phwxmit->sta_queue); + sta_phead = &phwxmit->sta_queue->queue; sta_plist = sta_phead->next; while ((end_of_queue_search(sta_phead, sta_plist)) == false) { ptxservq = LIST_CONTAINOR(sta_plist, struct tx_servq, diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index cd7d3706709f..e1e95cf48302 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c @@ -1078,7 +1078,7 @@ static int r8711_wx_set_wap(struct net_device *dev, return -EINVAL; authmode = padapter->securitypriv.ndisauthtype; spin_lock_irqsave(&queue->lock, irqL); - phead = get_list_head(queue); + phead = &queue->queue; pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned) == true) @@ -1227,7 +1227,7 @@ static int r8711_wx_get_scan(struct net_device *dev, break; } spin_lock_irqsave(&queue->lock, irqL); - phead = get_list_head(queue); + phead = &queue->queue; plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) @@ -1286,7 +1286,7 @@ static int r8711_wx_set_essid(struct net_device *dev, ndis_ssid.SsidLength = len; memcpy(ndis_ssid.Ssid, extra, len); src_ssid = ndis_ssid.Ssid; - phead = get_list_head(queue); + phead = &queue->queue; pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned)) @@ -2002,7 +2002,7 @@ static int r871x_get_ap_info(struct net_device *dev, } else return -EINVAL; spin_lock_irqsave(&(pmlmepriv->scanned_queue.lock), irqL); - phead = get_list_head(queue); + phead = &queue->queue; plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_set.c b/drivers/staging/rtl8712/rtl871x_ioctl_set.c index 87dce03c7c2b..226f24705b98 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_set.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_set.c @@ -62,7 +62,7 @@ static u8 do_join(struct _adapter *padapter) struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); struct __queue *queue = &(pmlmepriv->scanned_queue); - phead = get_list_head(queue); + phead = &queue->queue; plist = phead->next; pmlmepriv->cur_network.join_res = -2; pmlmepriv->fw_state |= _FW_UNDER_LINKING; diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index 7ca13b9f515b..d37ba7b7de91 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -133,7 +133,7 @@ static void _free_network_nolock(struct mlme_priv *pmlmepriv, if (pnetwork->fixed == true) return; list_del_init(&pnetwork->list); - list_add_tail(&pnetwork->list, get_list_head(free_queue)); + list_add_tail(&pnetwork->list, &free_queue->queue); pmlmepriv->num_of_scanned--; } @@ -153,7 +153,7 @@ static struct wlan_network *_r8712_find_network(struct __queue *scanned_queue, if (is_zero_ether_addr(addr)) return NULL; spin_lock_irqsave(&scanned_queue->lock, irqL); - phead = get_list_head(scanned_queue); + phead = &scanned_queue->queue; plist = phead->next; while (plist != phead) { pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list); @@ -174,7 +174,7 @@ static void _free_network_queue(struct _adapter *padapter) struct __queue *scanned_queue = &pmlmepriv->scanned_queue; spin_lock_irqsave(&scanned_queue->lock, irqL); - phead = get_list_head(scanned_queue); + phead = &scanned_queue->queue; plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list); @@ -315,7 +315,7 @@ struct wlan_network *r8712_get_oldest_wlan_network( struct wlan_network *pwlan = NULL; struct wlan_network *oldest = NULL; - phead = get_list_head(scanned_queue); + phead = &scanned_queue->queue; plist = phead->next; while (1) { if (end_of_queue_search(phead, plist) == true) @@ -398,7 +398,7 @@ static void update_scanned_network(struct _adapter *adapter, struct wlan_network *pnetwork = NULL; struct wlan_network *oldest = NULL; - phead = get_list_head(queue); + phead = &queue->queue; plist = phead->next; while (1) { @@ -1138,7 +1138,7 @@ int r8712_select_and_join_from_scan(struct mlme_priv *pmlmepriv) adapter = (struct _adapter *)pmlmepriv->nic_hdl; queue = &pmlmepriv->scanned_queue; - phead = get_list_head(queue); + phead = &queue->queue; pmlmepriv->pscanned = phead->next; while (1) { if (end_of_queue_search(phead, pmlmepriv->pscanned) == true) { diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index 114e9f30aecf..cc2ca11c33f5 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -115,7 +115,7 @@ union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue) if (_queue_empty(pfree_recv_queue) == true) precvframe = NULL; else { - phead = get_list_head(pfree_recv_queue); + phead = &pfree_recv_queue->queue; plist = phead->next; precvframe = LIST_CONTAINOR(plist, union recv_frame, u); list_del_init(&precvframe->u.hdr.list); @@ -145,7 +145,7 @@ void r8712_free_recvframe_queue(struct __queue *pframequeue, struct list_head *plist, *phead; spin_lock(&pframequeue->lock); - phead = get_list_head(pframequeue); + phead = &pframequeue->queue; plist = phead->next; while (end_of_queue_search(phead, plist) == false) { precvframe = LIST_CONTAINOR(plist, union recv_frame, u); diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 7db89215be5c..73ca66e3e6e8 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -66,8 +66,7 @@ u32 _r8712_init_sta_priv(struct sta_priv *pstapriv) for (i = 0; i < NUM_STA; i++) { _init_stainfo(psta); INIT_LIST_HEAD(&(pstapriv->sta_hash[i])); - list_add_tail(&psta->list, - get_list_head(&pstapriv->free_sta_queue)); + list_add_tail(&psta->list, &pstapriv->free_sta_queue.queue); psta++; } INIT_LIST_HEAD(&pstapriv->asoc_list); @@ -83,7 +82,7 @@ static void mfree_all_stainfo(struct sta_priv *pstapriv) struct sta_info *psta = NULL; spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); - phead = get_list_head(&pstapriv->free_sta_queue); + phead = &pstapriv->free_sta_queue.queue; plist = phead->next; while ((end_of_queue_search(phead, plist)) == false) { psta = LIST_CONTAINOR(plist, struct sta_info, list); @@ -208,7 +207,7 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta) } spin_lock(&(pfree_sta_queue->lock)); /* insert into free_sta_queue; 20061114 */ - list_add_tail(&psta->list, get_list_head(pfree_sta_queue)); + list_add_tail(&psta->list, &pfree_sta_queue->queue); spin_unlock(&(pfree_sta_queue->lock)); } diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 29a9f503b7b6..4b3fa40ef48b 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -747,7 +747,7 @@ struct xmit_buf *r8712_alloc_xmitbuf(struct xmit_priv *pxmitpriv) if (_queue_empty(pfree_xmitbuf_queue) == true) pxmitbuf = NULL; else { - phead = get_list_head(pfree_xmitbuf_queue); + phead = &pfree_xmitbuf_queue->queue; plist = phead->next; pxmitbuf = LIST_CONTAINOR(plist, struct xmit_buf, list); list_del_init(&(pxmitbuf->list)); @@ -767,7 +767,7 @@ int r8712_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) return _FAIL; spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); list_del_init(&pxmitbuf->list); - list_add_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue)); + list_add_tail(&(pxmitbuf->list), &pfree_xmitbuf_queue->queue); pxmitpriv->free_xmitbuf_cnt++; spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL); return _SUCCESS; @@ -801,7 +801,7 @@ struct xmit_frame *r8712_alloc_xmitframe(struct xmit_priv *pxmitpriv) if (_queue_empty(pfree_xmit_queue) == true) pxframe = NULL; else { - phead = get_list_head(pfree_xmit_queue); + phead = &pfree_xmit_queue->queue; plist = phead->next; pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list); list_del_init(&(pxframe->list)); @@ -833,7 +833,7 @@ void r8712_free_xmitframe(struct xmit_priv *pxmitpriv, pndis_pkt = pxmitframe->pkt; pxmitframe->pkt = NULL; } - list_add_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue)); + list_add_tail(&pxmitframe->list, &pfree_xmit_queue->queue); pxmitpriv->free_xmitframe_cnt++; spin_unlock_irqrestore(&pfree_xmit_queue->lock, irqL); if (netif_queue_stopped(padapter->pnetdev)) @@ -857,7 +857,7 @@ void r8712_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe; spin_lock_irqsave(&(pframequeue->lock), irqL); - phead = get_list_head(pframequeue); + phead = &pframequeue->queue; plist = phead->next; while (end_of_queue_search(phead, plist) == false) { pxmitframe = LIST_CONTAINOR(plist, struct xmit_frame, list); @@ -940,10 +940,8 @@ sint r8712_xmit_classifier(struct _adapter *padapter, psta, pattrib->priority); spin_lock_irqsave(&pstapending->lock, irqL0); if (list_empty(&ptxservq->tx_pending)) - list_add_tail(&ptxservq->tx_pending, - get_list_head(pstapending)); - list_add_tail(&pxmitframe->list, - get_list_head(&ptxservq->sta_pending)); + list_add_tail(&ptxservq->tx_pending, &pstapending->queue); + list_add_tail(&pxmitframe->list, &ptxservq->sta_pending.queue); ptxservq->qcnt++; spin_unlock_irqrestore(&pstapending->lock, irqL0); return _SUCCESS; -- cgit From df353f61afb917ff66b2e784b0ffb85d0ebb29a4 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:40 -0400 Subject: staging: rtl8712: remove wrapper function _queue_empty _queue_empty is an inline wrapper around list_empty. This patch removes this wrapper function and instead calls list_empty directly. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_cmd.c | 2 +- drivers/staging/rtl8712/rtl8712_recv.c | 2 +- drivers/staging/rtl8712/rtl8712_xmit.c | 2 +- drivers/staging/rtl8712/rtl871x_ioctl_set.c | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 4 ++-- drivers/staging/rtl8712/rtl871x_recv.c | 2 +- drivers/staging/rtl8712/rtl871x_sta_mgt.c | 2 +- drivers/staging/rtl8712/rtl871x_xmit.c | 4 ++-- 9 files changed, 10 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index dc6cde99f7d4..f534ec290e9f 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -108,11 +108,6 @@ static inline u32 _down_sema(struct semaphore *sema) return _SUCCESS; } -static inline u32 _queue_empty(struct __queue *pqueue) -{ - return list_empty(&(pqueue->queue)); -} - static inline u32 end_of_queue_search(struct list_head *head, struct list_head *plist) { diff --git a/drivers/staging/rtl8712/rtl8712_cmd.c b/drivers/staging/rtl8712/rtl8712_cmd.c index 4998fde3ec82..61519774a25e 100644 --- a/drivers/staging/rtl8712/rtl8712_cmd.c +++ b/drivers/staging/rtl8712/rtl8712_cmd.c @@ -410,7 +410,7 @@ _next: } } r8712_free_cmd_obj(pcmd); - if (_queue_empty(&(pcmdpriv->cmd_queue))) { + if (list_empty(&pcmdpriv->cmd_queue.queue)) { r8712_unregister_cmd_alive(padapter); continue; } else diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c index 3a057e2ef5e4..df1e498e98b6 100644 --- a/drivers/staging/rtl8712/rtl8712_recv.c +++ b/drivers/staging/rtl8712/rtl8712_recv.c @@ -288,7 +288,7 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, if (pdefrag_q != NULL) { if (fragnum == 0) { /*the first fragment*/ - if (_queue_empty(pdefrag_q) == false) { + if (!list_empty(&pdefrag_q->queue)) { /*free current defrag_q */ r8712_free_recvframe_queue(pdefrag_q, pfree_recv_queue); diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c b/drivers/staging/rtl8712/rtl8712_xmit.c index f3d29982a6f8..4ebedb4005cf 100644 --- a/drivers/staging/rtl8712/rtl8712_xmit.c +++ b/drivers/staging/rtl8712/rtl8712_xmit.c @@ -224,7 +224,7 @@ static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, } sta_plist = sta_plist->next; /*Remove sta node when there are no pending packets.*/ - if (_queue_empty(pframe_queue)) { + if (list_empty(&pframe_queue->queue)) { /* must be done after sta_plist->next * and before break */ diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_set.c b/drivers/staging/rtl8712/rtl871x_ioctl_set.c index 226f24705b98..9d47eb472837 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_set.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_set.c @@ -71,7 +71,7 @@ static u8 do_join(struct _adapter *padapter) /* adhoc mode will start with an empty queue, but skip checking */ if (!check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) && - _queue_empty(queue)) { + list_empty(&queue->queue)) { if (pmlmepriv->fw_state & _FW_UNDER_LINKING) pmlmepriv->fw_state ^= _FW_UNDER_LINKING; /* when set_ssid/set_bssid for do_join(), but scanning queue diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c index d37ba7b7de91..7b7fdec58b38 100644 --- a/drivers/staging/rtl8712/rtl871x_mlme.c +++ b/drivers/staging/rtl8712/rtl871x_mlme.c @@ -89,7 +89,7 @@ struct wlan_network *_r8712_alloc_network(struct mlme_priv *pmlmepriv) struct __queue *free_queue = &pmlmepriv->free_bss_pool; struct list_head *plist = NULL; - if (_queue_empty(free_queue) == true) + if (list_empty(&free_queue->queue)) return NULL; spin_lock_irqsave(&free_queue->lock, irqL); plist = free_queue->queue.next; @@ -420,7 +420,7 @@ static void update_scanned_network(struct _adapter *adapter, /* If we didn't find a match, then get a new network slot to initialize * with this beacon's information */ if (end_of_queue_search(phead, plist) == true) { - if (_queue_empty(&pmlmepriv->free_bss_pool) == true) { + if (list_empty(&pmlmepriv->free_bss_pool.queue)) { /* If there are no more slots, expire the oldest */ pnetwork = oldest; target->Rssi = (pnetwork->network.Rssi + diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c index cc2ca11c33f5..a3889d18d089 100644 --- a/drivers/staging/rtl8712/rtl871x_recv.c +++ b/drivers/staging/rtl8712/rtl871x_recv.c @@ -112,7 +112,7 @@ union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue) struct recv_priv *precvpriv; spin_lock_irqsave(&pfree_recv_queue->lock, irqL); - if (_queue_empty(pfree_recv_queue) == true) + if (list_empty(&pfree_recv_queue->queue)) precvframe = NULL; else { phead = &pfree_recv_queue->queue; diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 73ca66e3e6e8..e769bb5c5fb8 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -121,7 +121,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) pfree_sta_queue = &pstapriv->free_sta_queue; spin_lock_irqsave(&(pfree_sta_queue->lock), flags); - if (_queue_empty(pfree_sta_queue) == true) + if (list_empty(&pfree_sta_queue->queue)) psta = NULL; else { psta = LIST_CONTAINOR(pfree_sta_queue->queue.next, diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index 4b3fa40ef48b..a104b7722815 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -744,7 +744,7 @@ struct xmit_buf *r8712_alloc_xmitbuf(struct xmit_priv *pxmitpriv) struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue; spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); - if (_queue_empty(pfree_xmitbuf_queue) == true) + if (list_empty(&pfree_xmitbuf_queue->queue)) pxmitbuf = NULL; else { phead = &pfree_xmitbuf_queue->queue; @@ -798,7 +798,7 @@ struct xmit_frame *r8712_alloc_xmitframe(struct xmit_priv *pxmitpriv) struct __queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue; spin_lock_irqsave(&pfree_xmit_queue->lock, irqL); - if (_queue_empty(pfree_xmit_queue) == true) + if (list_empty(&pfree_xmit_queue->queue)) pxframe = NULL; else { phead = &pfree_xmit_queue->queue; -- cgit From bbcd2d258a0dcc78bf3cc9685775d774208c8060 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Tue, 24 Jun 2014 22:52:41 -0400 Subject: staging: rtl8712: remove inapplicable comment Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index f534ec290e9f..67c53d569be6 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -95,11 +95,6 @@ static inline void _set_workitem(_workitem *pwork) #define BIT(x) (1 << (x)) #endif -/* -For the following list_xxx operations, -caller must guarantee the atomic context. -Otherwise, there will be racing condition. -*/ static inline u32 _down_sema(struct semaphore *sema) { if (down_interruptible(sema)) -- cgit From 809d208b1b0175843f19f8f552bf05af84496b56 Mon Sep 17 00:00:00 2001 From: Clément Calmels Date: Thu, 26 Jun 2014 10:20:46 +0200 Subject: staging: rtl8723au: fix sparse warning Found running sparse on the rtl8723au driver. CHECK drivers/staging/rtl8723au/core/rtw_cmd.c drivers/staging/rtl8723au/core/rtw_cmd.c:1479:54: warning: incorrect type in argument 2 (different base types) drivers/staging/rtl8723au/core/rtw_cmd.c:1479:54: expected int [signed] gfp drivers/staging/rtl8723au/core/rtw_cmd.c:1479:54: got restricted gfp_t Signed-off-by: Clement Calmels Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index c2e3777292a5..4827280c3572 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -100,7 +100,7 @@ void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv) rtw23a_free_mlme_priv_ie_data(pmlmepriv); } -struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, int gfp) +struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, gfp_t gfp) { struct wlan_network *pnetwork; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index 277d90b76608..2ff01eb8fc0c 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -314,7 +314,7 @@ void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); void _rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv); -struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, int gfp); +struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, gfp_t gfp); int rtw_if_up23a(struct rtw_adapter *padapter); -- cgit From 1c69be9facbbb7d6aaa87831444544736c884653 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:47 +0200 Subject: staging: rtl8723au: usb_ops_linux.c: Add blank line between declaration and usage This fixes a minor sparse warning. Reported-by: Fengguang Wu Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_ops_linux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c index 8e9e61c74bd0..6acb0e378b0b 100644 --- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c @@ -28,7 +28,6 @@ static int usbctrl_vendorreq(struct rtw_adapter *padapter, u8 request, { struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); struct usb_device *udev = pdvobjpriv->pusbdev; - unsigned int pipe; int status = 0; u8 reqtype; @@ -97,6 +96,7 @@ static int usbctrl_vendorreq(struct rtw_adapter *padapter, u8 request, padapter->bSurpriseRemoved = true; else { struct hal_data_8723a *pHalData; + pHalData = GET_HAL_DATA(padapter); pHalData->srestpriv.Wifi_Error_Status = USB_VEN_REQ_CMD_FAIL; -- cgit From a6f4e0c17cecf7ccdf3f61bc998c5ecbd5fdfd00 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:48 +0200 Subject: staging: rtl8723au: rtw_sta_mgt.c: Use ether_addr_{copy, equal}() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sta_mgt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c index 14a82bea826f..62e35dd41bb5 100644 --- a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c @@ -126,7 +126,7 @@ rtw_alloc_stainfo23a(struct sta_priv *pstapriv, u8 *hwaddr, gfp_t gfp) psta->padapter = pstapriv->padapter; - memcpy(psta->hwaddr, hwaddr, ETH_ALEN); + ether_addr_copy(psta->hwaddr, hwaddr); index = wifi_mac_hash(hwaddr); @@ -363,10 +363,10 @@ struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr) list_for_each(plist, phead) { psta = container_of(plist, struct sta_info, hash_list); - if (!memcmp(psta->hwaddr, addr, ETH_ALEN)) { - /* if found the matched address */ + /* if found the matched address */ + if (ether_addr_equal(psta->hwaddr, addr)) break; - } + psta = NULL; } spin_unlock_bh(&pstapriv->sta_hash_lock); @@ -422,7 +422,7 @@ bool rtw_access_ctrl23a(struct rtw_adapter *padapter, u8 *mac_addr) list_for_each(plist, phead) { paclnode = container_of(plist, struct rtw_wlan_acl_node, list); - if (!memcmp(paclnode->addr, mac_addr, ETH_ALEN)) { + if (ether_addr_equal(paclnode->addr, mac_addr)) { if (paclnode->valid) { match = true; break; -- cgit From 25f71900872a5b2120011489d8f5d76420ebc193 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:49 +0200 Subject: staging: rtl8723au: rtw_sta_mgt.c: One copy of the broadcast address should suffice Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sta_mgt.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c index 62e35dd41bb5..f13a470b19d9 100644 --- a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c @@ -22,6 +22,8 @@ #include #include +static u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + static void _rtw_init_stainfo(struct sta_info *psta) { memset((u8 *)psta, 0, sizeof (struct sta_info)); @@ -344,7 +346,6 @@ struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr) struct sta_info *psta = NULL; u32 index; const u8 *addr; - u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; if (hwaddr == NULL) return NULL; @@ -379,9 +380,8 @@ int rtw_init_bcmc_stainfo23a(struct rtw_adapter* padapter) struct sta_info *psta; struct tx_servq *ptxservq; int res = _SUCCESS; - unsigned char bcast_addr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - psta = rtw_alloc_stainfo23a(pstapriv, bcast_addr, GFP_KERNEL); + psta = rtw_alloc_stainfo23a(pstapriv, bc_addr, GFP_KERNEL); if (psta == NULL) { res = _FAIL; RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_, @@ -399,9 +399,8 @@ struct sta_info *rtw_get_bcmc_stainfo23a(struct rtw_adapter *padapter) { struct sta_info *psta; struct sta_priv *pstapriv = &padapter->stapriv; - u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - psta = rtw_get_stainfo23a(pstapriv, bc_addr); + psta = rtw_get_stainfo23a(pstapriv, bc_addr); return psta; } -- cgit From 3cf7fa6f8a2005f8cbe2e44228239a8dc1fffff6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:50 +0200 Subject: staging: rtl8723au: rtw_allow_stainfo23a(): Make hwaddr argument const Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sta_mgt.c | 4 ++-- drivers/staging/rtl8723au/include/sta_info.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c index f13a470b19d9..8db844bb7983 100644 --- a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c @@ -22,7 +22,7 @@ #include #include -static u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +static const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static void _rtw_init_stainfo(struct sta_info *psta) { @@ -109,7 +109,7 @@ int _rtw_free_sta_priv23a(struct sta_priv *pstapriv) } struct sta_info * -rtw_alloc_stainfo23a(struct sta_priv *pstapriv, u8 *hwaddr, gfp_t gfp) +rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp) { struct list_head *phash_list; struct sta_info *psta; diff --git a/drivers/staging/rtl8723au/include/sta_info.h b/drivers/staging/rtl8723au/include/sta_info.h index d1939a67390c..c756b4f7f5d5 100644 --- a/drivers/staging/rtl8723au/include/sta_info.h +++ b/drivers/staging/rtl8723au/include/sta_info.h @@ -362,7 +362,7 @@ static inline u32 wifi_mac_hash(const u8 *mac) int _rtw_init_sta_priv23a(struct sta_priv *pstapriv); int _rtw_free_sta_priv23a(struct sta_priv *pstapriv); -struct sta_info *rtw_alloc_stainfo23a(struct sta_priv *pstapriv, u8 *hwaddr, gfp_t gfp); +struct sta_info *rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp); int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta); void rtw_free_all_stainfo23a(struct rtw_adapter *padapter); struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr); -- cgit From 5a90765817bbff15edb9f3fa094856ec01576312 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:51 +0200 Subject: staging: rtl8723au: Remove unused rtw_sreset_get_wifi_status() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sreset.c | 29 -------------------------- drivers/staging/rtl8723au/include/rtw_sreset.h | 1 - 2 files changed, 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sreset.c b/drivers/staging/rtl8723au/core/rtw_sreset.c index 18a42a27b488..8142dd19d1a9 100644 --- a/drivers/staging/rtl8723au/core/rtw_sreset.c +++ b/drivers/staging/rtl8723au/core/rtw_sreset.c @@ -39,35 +39,6 @@ void rtw_sreset_reset_value(struct rtw_adapter *padapter) psrtpriv->last_tx_complete_time = 0; } -u8 rtw_sreset_get_wifi_status(struct rtw_adapter *padapter) -{ - struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - struct sreset_priv *psrtpriv = &pHalData->srestpriv; - u8 status = WIFI_STATUS_SUCCESS; - u32 val32 = 0; - - if (psrtpriv->silent_reset_inprogress) - return status; - val32 = rtl8723au_read32(padapter, REG_TXDMA_STATUS); - if (val32 == 0xeaeaeaea) { - psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST; - } else if (val32 != 0) { - DBG_8723A("txdmastatu(%x)\n", val32); - psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR; - } - - if (WIFI_STATUS_SUCCESS != psrtpriv->Wifi_Error_Status) { - DBG_8723A("==>%s error_status(0x%x)\n", __func__, psrtpriv->Wifi_Error_Status); - status = (psrtpriv->Wifi_Error_Status &~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)); - } - DBG_8723A("==> %s wifi_status(0x%x)\n", __func__, status); - - /* status restore */ - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; - - return status; -} - void sreset_set_wifi_error_status23a(struct rtw_adapter *padapter, u32 status) { struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); diff --git a/drivers/staging/rtl8723au/include/rtw_sreset.h b/drivers/staging/rtl8723au/include/rtw_sreset.h index 77cc7941b546..a4c45cb5f9c5 100644 --- a/drivers/staging/rtl8723au/include/rtw_sreset.h +++ b/drivers/staging/rtl8723au/include/rtw_sreset.h @@ -47,7 +47,6 @@ struct sreset_priv { void rtw_sreset_init(struct rtw_adapter *padapter); void rtw_sreset_reset_value(struct rtw_adapter *padapter); -u8 rtw_sreset_get_wifi_status(struct rtw_adapter *padapter); bool rtw_sreset_inprogress(struct rtw_adapter *padapter); void sreset_set_wifi_error_status23a(struct rtw_adapter *padapter, u32 status); void sreset_set_trigger_point(struct rtw_adapter *padapter, s32 tgp); -- cgit From 63a7cabbd57522fdbf063ccb0d0309fd8b3b7ada Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:52 +0200 Subject: staging: rtl8723au: Wifi_Error_Status isn't used for anything Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sreset.c | 11 ----------- drivers/staging/rtl8723au/hal/rtl8723a_sreset.c | 1 - drivers/staging/rtl8723au/hal/usb_ops_linux.c | 11 ----------- drivers/staging/rtl8723au/include/rtw_sreset.h | 11 ----------- drivers/staging/rtl8723au/os_dep/usb_ops_linux.c | 2 -- 5 files changed, 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sreset.c b/drivers/staging/rtl8723au/core/rtw_sreset.c index 8142dd19d1a9..c19831cb9917 100644 --- a/drivers/staging/rtl8723au/core/rtw_sreset.c +++ b/drivers/staging/rtl8723au/core/rtw_sreset.c @@ -23,7 +23,6 @@ void rtw_sreset_init(struct rtw_adapter *padapter) mutex_init(&psrtpriv->silentreset_mutex); psrtpriv->silent_reset_inprogress = false; - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; } @@ -34,18 +33,10 @@ void rtw_sreset_reset_value(struct rtw_adapter *padapter) struct sreset_priv *psrtpriv = &pHalData->srestpriv; psrtpriv->silent_reset_inprogress = false; - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; psrtpriv->last_tx_time = 0; psrtpriv->last_tx_complete_time = 0; } -void sreset_set_wifi_error_status23a(struct rtw_adapter *padapter, u32 status) -{ - struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - - pHalData->srestpriv.Wifi_Error_Status = status; -} - void sreset_set_trigger_point(struct rtw_adapter *padapter, s32 tgp) { struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); @@ -213,8 +204,6 @@ void rtw_sreset_reset(struct rtw_adapter *active_adapter) DBG_8723A("%s\n", __func__); - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS; - mutex_lock(&psrtpriv->silentreset_mutex); psrtpriv->silent_reset_inprogress = true; pwrpriv->change_rfpwrstate = rf_off; diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c index 0680e29a5528..4374036dfede 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c @@ -46,7 +46,6 @@ void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter) } else { diff_time = jiffies_to_msecs(jiffies - psrtpriv->last_tx_complete_time); if (diff_time > 4000) { - /* padapter->Wifi_Error_Status = WIFI_TX_HANG; */ DBG_8723A("%s tx hang\n", __func__); rtw_sreset_reset(padapter); } diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c index 6acb0e378b0b..23af71899151 100644 --- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c @@ -94,13 +94,6 @@ static int usbctrl_vendorreq(struct rtw_adapter *padapter, u8 request, if (status < 0) { if (status == -ESHUTDOWN || status == -ENODEV) padapter->bSurpriseRemoved = true; - else { - struct hal_data_8723a *pHalData; - - pHalData = GET_HAL_DATA(padapter); - pHalData->srestpriv.Wifi_Error_Status = - USB_VEN_REQ_CMD_FAIL; - } } else { /* status != len && status >= 0 */ if (status > 0) { if (requesttype == 0x01) { @@ -647,7 +640,6 @@ static void usb_read_port_complete(struct urb *purb) struct recv_buf *precvbuf = (struct recv_buf *)purb->context; struct rtw_adapter *padapter = (struct rtw_adapter *)precvbuf->adapter; struct recv_priv *precvpriv = &padapter->recvpriv; - struct hal_data_8723a *pHalData; RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete!!!\n")); @@ -726,9 +718,6 @@ static void usb_read_port_complete(struct urb *purb) break; case -EPROTO: case -EOVERFLOW: - pHalData = GET_HAL_DATA(padapter); - pHalData->srestpriv.Wifi_Error_Status = - USB_READ_PORT_FAIL; rtl8723au_read_port(padapter, RECV_BULK_IN_ADDR, 0, precvbuf); break; diff --git a/drivers/staging/rtl8723au/include/rtw_sreset.h b/drivers/staging/rtl8723au/include/rtw_sreset.h index a4c45cb5f9c5..47996145329c 100644 --- a/drivers/staging/rtl8723au/include/rtw_sreset.h +++ b/drivers/staging/rtl8723au/include/rtw_sreset.h @@ -27,7 +27,6 @@ enum { struct sreset_priv { struct mutex silentreset_mutex; u8 silent_reset_inprogress; - u8 Wifi_Error_Status; unsigned long last_tx_time; unsigned long last_tx_complete_time; @@ -36,19 +35,9 @@ struct sreset_priv { #include -#define WIFI_STATUS_SUCCESS 0 -#define USB_VEN_REQ_CMD_FAIL BIT(0) -#define USB_READ_PORT_FAIL BIT(1) -#define USB_WRITE_PORT_FAIL BIT(2) -#define WIFI_MAC_TXDMA_ERROR BIT(3) -#define WIFI_TX_HANG BIT(4) -#define WIFI_RX_HANG BIT(5) -#define WIFI_IF_NOT_EXIST BIT(6) - void rtw_sreset_init(struct rtw_adapter *padapter); void rtw_sreset_reset_value(struct rtw_adapter *padapter); bool rtw_sreset_inprogress(struct rtw_adapter *padapter); -void sreset_set_wifi_error_status23a(struct rtw_adapter *padapter, u32 status); void sreset_set_trigger_point(struct rtw_adapter *padapter, s32 tgp); void rtw_sreset_reset(struct rtw_adapter *active_adapter); diff --git a/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c b/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c index d081449318c2..33528072cb6a 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c @@ -96,8 +96,6 @@ static void usb_write_port23a_complete(struct urb *purb) DBG_8723A("###=> urb_write_port_complete status(%d)\n", purb->status); if (purb->status == -EPIPE || purb->status == -EPROTO) { - sreset_set_wifi_error_status23a(padapter, - USB_WRITE_PORT_FAIL); } else if (purb->status == -EINPROGRESS) { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_write_port23a_complete: EINPROGESS\n")); -- cgit From e899c9176a1d0659d854802966f1b1a8e74394a6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:53 +0200 Subject: staging: rtl8723au: sreset_priv->dbg_trigger_point is never set No point carrying a bunch of code around that is never going to get called. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sreset.c | 7 ------- drivers/staging/rtl8723au/hal/rtl8723a_sreset.c | 14 -------------- drivers/staging/rtl8723au/include/rtw_sreset.h | 8 -------- 3 files changed, 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sreset.c b/drivers/staging/rtl8723au/core/rtw_sreset.c index c19831cb9917..c152aefb59ea 100644 --- a/drivers/staging/rtl8723au/core/rtw_sreset.c +++ b/drivers/staging/rtl8723au/core/rtw_sreset.c @@ -37,13 +37,6 @@ void rtw_sreset_reset_value(struct rtw_adapter *padapter) psrtpriv->last_tx_complete_time = 0; } -void sreset_set_trigger_point(struct rtw_adapter *padapter, s32 tgp) -{ - struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - - pHalData->srestpriv.dbg_trigger_point = tgp; -} - bool rtw_sreset_inprogress(struct rtw_adapter *padapter) { struct rtw_adapter *primary_adapter = GET_PRIMARY_ADAPTER(padapter); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c index 4374036dfede..54a08a1e148b 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c @@ -52,22 +52,8 @@ void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter) } } } - - if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) { - psrtpriv->dbg_trigger_point = SRESET_TGP_NULL; - rtw_sreset_reset(padapter); - return; - } } void rtl8723a_sreset_linked_status_check(struct rtw_adapter *padapter) { - struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - struct sreset_priv *psrtpriv = &pHalData->srestpriv; - - if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) { - psrtpriv->dbg_trigger_point = SRESET_TGP_NULL; - rtw_sreset_reset(padapter); - return; - } } diff --git a/drivers/staging/rtl8723au/include/rtw_sreset.h b/drivers/staging/rtl8723au/include/rtw_sreset.h index 47996145329c..60fa8296e1ff 100644 --- a/drivers/staging/rtl8723au/include/rtw_sreset.h +++ b/drivers/staging/rtl8723au/include/rtw_sreset.h @@ -18,19 +18,11 @@ #include #include -enum { - SRESET_TGP_NULL = 0, - SRESET_TGP_XMIT_STATUS = 1, - SRESET_TGP_LINK_STATUS = 2, -}; - struct sreset_priv { struct mutex silentreset_mutex; u8 silent_reset_inprogress; unsigned long last_tx_time; unsigned long last_tx_complete_time; - - s32 dbg_trigger_point; }; #include -- cgit From f2750d90565bf1ee629593472dd26fbb076bfc41 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:54 +0200 Subject: staging: rtl8723au: Remove no-op rtl8723a_sreset_linked_status_check() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 -- drivers/staging/rtl8723au/hal/rtl8723a_sreset.c | 4 ---- drivers/staging/rtl8723au/include/rtl8723a_sreset.h | 1 - 3 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 09e5a59148fb..3655ee5e8347 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -5215,8 +5215,6 @@ void linked_status_chk23a(struct rtw_adapter *padapter) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; struct sta_priv *pstapriv = &padapter->stapriv; - rtl8723a_sreset_linked_status_check(padapter); - if (is_client_associated_to_ap23a(padapter)) { /* linked infrastructure client mode */ diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c index 54a08a1e148b..3c46294b8788 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c @@ -53,7 +53,3 @@ void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter) } } } - -void rtl8723a_sreset_linked_status_check(struct rtw_adapter *padapter) -{ -} diff --git a/drivers/staging/rtl8723au/include/rtl8723a_sreset.h b/drivers/staging/rtl8723au/include/rtl8723a_sreset.h index 82af6a2704ed..6197910a4a53 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_sreset.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_sreset.h @@ -20,6 +20,5 @@ #include void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter); -void rtl8723a_sreset_linked_status_check(struct rtw_adapter *padapter); #endif -- cgit From 80f8210abc5ecd5c12c31e57c46a7758396978e1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 26 Jun 2014 10:20:55 +0200 Subject: staging: rtl8723au: Remove unused rtw_pwr_wakeup_ex() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index a458af978145..577914dc93be 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -253,8 +253,6 @@ int _rtw_pwr_wakeup23a(struct rtw_adapter *padapter, u32 ips_deffer_ms, const char *caller); #define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup23a(adapter, \ RTW_PWR_STATE_CHK_INTERVAL, __func__) -#define rtw_pwr_wakeup_ex(adapter, ips_deffer_ms) \ - _rtw_pwr_wakeup23a(adapter, ips_deffer_ms, __func__) int rtw_pm_set_ips23a(struct rtw_adapter *padapter, u8 mode); int rtw_pm_set_lps23a(struct rtw_adapter *padapter, u8 mode); -- cgit From 4b9988422a3124ed3c5c8dca73bcf2bc5ba54873 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Sun, 22 Jun 2014 23:38:04 +0900 Subject: staging: ced1401: fix sparse warning for ced1401 This patch fixes below warning. drivers/staging/ced1401/ced_ioc.c:703:30: warning: incorrect type in assignment (different address spaces) drivers/staging/ced1401/ced_ioc.c:703:30: expected void *[usertype] lpvBuff drivers/staging/ced1401/ced_ioc.c:703:30: got char [noderef] *puBuf Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index ea0fe6398a01..8327e9ce93c3 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -101,7 +101,7 @@ typedef struct circBlk { /* A structure holding all of the information about a transfer area - an area of */ /* memory set up for use either as a source or destination in DMA transfers. */ typedef struct transarea { - void *lpvBuff; /* User address of xfer area saved for completeness */ + void __user *lpvBuff; /* User address of xfer area saved for completeness */ UINT dwBaseOffset; /* offset to start of xfer area in first page */ UINT dwLength; /* Length of xfer area, in bytes */ struct page **pPages; /* Points at array of locked down pages */ -- cgit From 2eca2816752f29dd533762d9693f49e2717fb80b Mon Sep 17 00:00:00 2001 From: Cheng-Wei Lee Date: Sat, 21 Jun 2014 09:22:30 +0800 Subject: staging: ft1000_dnld.c:code indent should use tabs where possible This patch fixes the following checkpatch.pl issue in ft1000/ft1000-pcmcia/ft1000_dnld.c ERROR: code indent should use tabs where possible Signed-off-by: Quentin Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c index d44e8583ad1e..afaab07862fb 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c @@ -15,8 +15,8 @@ Suite 330, Boston, MA 02111-1307, USA. -------------------------------------------------------------------------- - Description: This module will handshake with the DSP bootloader to - download the DSP runtime image. + Description: This module will handshake with the DSP bootloader to + download the DSP runtime image. ---------------------------------------------------------------------------*/ -- cgit From 7bb3c79862be281c4f6cdf49c5f044981f2241a5 Mon Sep 17 00:00:00 2001 From: Pawel Lebioda Date: Sat, 21 Jun 2014 19:29:35 +0200 Subject: staging: cxt1e1: fix sbeCrc function declaration This patch fixes the following sparse warning: drivers/staging/cxt1e1/sbecrc.c:86:1: warning: symbol 'sbeCrc' was not declared. Should it be static? Furthermore it fixes wring sbeCrc return type in function declaration. Signed-off-by: Pawel Lebioda Signed-off-by: Greg Kroah-Hartman --- drivers/staging/cxt1e1/pmcc4.h | 2 +- drivers/staging/cxt1e1/pmcc4_private.h | 1 + drivers/staging/cxt1e1/sbecrc.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/cxt1e1/pmcc4.h b/drivers/staging/cxt1e1/pmcc4.h index b4b5e5ad791b..0220bbf3445a 100644 --- a/drivers/staging/cxt1e1/pmcc4.h +++ b/drivers/staging/cxt1e1/pmcc4.h @@ -94,7 +94,7 @@ 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 sbeCrc(u_int8_t *, u_int32_t, u_int32_t, u_int32_t *); void VMETRO_TRIGGER (ci_t *, int); /* Note: int = 0(default) * thru 15 */ diff --git a/drivers/staging/cxt1e1/pmcc4_private.h b/drivers/staging/cxt1e1/pmcc4_private.h index 451f12f5b04c..134ddd6562e9 100644 --- a/drivers/staging/cxt1e1/pmcc4_private.h +++ b/drivers/staging/cxt1e1/pmcc4_private.h @@ -33,6 +33,7 @@ #include "musycc.h" #include "sbe_promformat.h" #include "comet.h" +#include "sbecom_inline_linux.h" /* driver state */ diff --git a/drivers/staging/cxt1e1/sbecrc.c b/drivers/staging/cxt1e1/sbecrc.c index a51780f60484..52d3f71e5470 100644 --- a/drivers/staging/cxt1e1/sbecrc.c +++ b/drivers/staging/cxt1e1/sbecrc.c @@ -16,6 +16,7 @@ */ #include +#include "pmcc4.h" #include "pmcc4_sysdep.h" #include "sbecom_inline_linux.h" #include "sbe_promformat.h" -- cgit From a29b18573a23571daf6610eb95ce9d3efaa47f0e Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Tue, 24 Jun 2014 18:11:08 -0700 Subject: staging: gdm72xx: check return value of sscanf Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index e5e511585122..3081fd46bbda 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -291,8 +291,9 @@ static void __gdm_wimax_event_send(struct work_struct *work) e = list_entry(wm_event.evtq.next, struct evt_entry, list); spin_unlock_irqrestore(&wm_event.evt_lock, flags); - sscanf(e->dev->name, "wm%d", &idx); - netlink_send(wm_event.sock, idx, 0, e->evt_data, e->size); + if (sscanf(e->dev->name, "wm%d", &idx) == 1) + netlink_send(wm_event.sock, idx, 0, e->evt_data, + e->size); spin_lock_irqsave(&wm_event.evt_lock, flags); list_del(&e->list); -- cgit From e7d374e700638728cfe3c6066e6a2678ebbbc19c Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Tue, 24 Jun 2014 00:55:58 -0700 Subject: staging: gdm72xx: fix block comment style This patch fixes the following checkpatch warnings, which are issued when the gdm72xx driver is moved out of staging into drivers/net/wimax: WARNING: networking block comments don't use an empty /* line, use /* Comment... WARNING: networking block comments start with * on subsequent lines WARNING: networking block comments put the trailing */ on a separate line Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_sdio.c | 7 ++----- drivers/staging/gdm72xx/gdm_usb.c | 6 ++---- drivers/staging/gdm72xx/gdm_wimax.c | 5 +++-- drivers/staging/gdm72xx/hci.h | 4 +--- 4 files changed, 8 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index 7398d451ccc2..0c6a3eb00e84 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -439,9 +439,7 @@ static int gdm_sdio_send(void *priv_dev, void *data, int len, return 0; } -/* - * Handle the HCI, WIMAX_SDU_TX_FLOW. - */ +/* Handle the HCI, WIMAX_SDU_TX_FLOW. */ static int control_sdu_tx_flow(struct sdiowm_dev *sdev, u8 *hci_data, int len) { struct tx_cxt *tx = &sdev->tx; @@ -462,8 +460,7 @@ static int control_sdu_tx_flow(struct sdiowm_dev *sdev, u8 *hci_data, int len) tx->stop_sdu_tx = 0; if (tx->can_send) schedule_work(&sdev->ws); - /* - * If free buffer for sdu tx doesn't exist, then tx queue + /* If free buffer for sdu tx doesn't exist, then tx queue * should not be woken. For this reason, don't pass the command, * START_SDU_TX. */ diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index 78d6667fa0d5..2325d41f2278 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -338,8 +338,7 @@ static int gdm_usb_send(void *priv_dev, void *data, int len, t->callback = cb; t->cb_data = cb_data; - /* - * In some cases, USB Module of WiMax is blocked when data size is + /* In some cases, USB Module of WiMax is blocked when data size is * the multiple of 512. So, increment length by one in that case. */ if ((len % 512) == 0) @@ -439,8 +438,7 @@ static void gdm_usb_rcv_complete(struct urb *urb) list_for_each_entry(t, &tx->sdu_list, list) { usb_submit_urb(t->urb, GFP_ATOMIC); } - /* - * If free buffer for sdu tx doesn't + /* If free buffer for sdu tx doesn't * exist, then tx queue should not be * woken. For this reason, don't pass * the command, START_SDU_TX. diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index 3081fd46bbda..41480132e512 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -581,8 +581,9 @@ static int gdm_wimax_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) return ret; } else if (req->cmd == SIOCS_DATA) { if (req->data_id == SIOC_DATA_FSM) { - /*NOTE: gdm_update_fsm should be called - before gdm_wimax_ioctl_set_data is called*/ + /* NOTE: gdm_update_fsm should be called + * before gdm_wimax_ioctl_set_data is called. + */ gdm_update_fsm(dev, (struct fsm_s *)req->data.buf); } diff --git a/drivers/staging/gdm72xx/hci.h b/drivers/staging/gdm72xx/hci.h index 2485a3799123..059ba0021d47 100644 --- a/drivers/staging/gdm72xx/hci.h +++ b/drivers/staging/gdm72xx/hci.h @@ -112,13 +112,11 @@ #define W_SCAN_ALL_SUBSCRIPTION 1 #define W_SCAN_SPECIFIED_SUBSCRIPTION 2 -/* - * TLV +/* TLV * * [31:31] indicates the type is composite. * [30:16] is the length of the type. 0 length means length is variable. * [15:0] is the actual type. - * */ #define TLV_L(x) (((x) >> 16) & 0xff) #define TLV_T(x) ((x) & 0xff) -- cgit From 1cd683a814bb8ec342a0b254584e4bc0f2041adc Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Tue, 24 Jun 2014 00:34:14 -0700 Subject: staging: gdm72xx: remove blank lines after an open brace This patch fixes the following checkpatch warning: CHECK: Blank lines aren't necessary after an open brace '{' Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_usb.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index 2325d41f2278..cd8e6e483e70 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -630,7 +630,6 @@ static void gdm_usb_disconnect(struct usb_interface *intf) if (idProduct != EMERGENCY_PID && bConfigurationValue != DOWNLOAD_CONF_VALUE && (idProduct & B_DOWNLOAD) == 0) { - udev = phy_dev->priv_dev; udev->usbdev = NULL; @@ -708,10 +707,8 @@ static int k_mode_thread(void *arg) int ret; while (!k_mode_stop) { - spin_lock_irqsave(&k_lock, flags2); while (!list_empty(&k_list)) { - udev = list_entry(k_list.next, struct usbwm_dev, list); tx = &udev->tx; rx = &udev->rx; -- cgit From 3eeb821eff089e0f26f016a09ea1ee011fba3b4f Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Sun, 22 Jun 2014 21:32:05 -0400 Subject: staging/lustre/libcfs: revert changes to libcfs_sock_ioctl Changes introduced by 80db2734acbc78db12798cfb611d6acc7fe389e6 unfortunately totally break lustre, we use this function to access not only socket proto obs, but also device ioctl like SIOCGIFCONF that now fail. Reverting part of the previous patch to regain the needed functionality. Signed-off-by: Oleg Drokin CC: Fredrick John Berchmans Signed-off-by: Greg Kroah-Hartman --- .../lustre/lustre/libcfs/linux/linux-tcpip.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c index a21b42687d8a..e52e33aab55b 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c @@ -46,16 +46,31 @@ int libcfs_sock_ioctl(int cmd, unsigned long arg) { + mm_segment_t oldmm = get_fs(); struct socket *sock; - int rc; + int rc; + struct file *sock_filp; rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); if (rc != 0) { CERROR ("Can't create socket: %d\n", rc); return rc; } - rc = kernel_sock_ioctl(sock, cmd, arg); - sock_release(sock); + + sock_filp = sock_alloc_file(sock, 0, NULL); + if (IS_ERR(sock_filp)) { + sock_release(sock); + rc = PTR_ERR(sock_filp); + goto out; + } + + set_fs(KERNEL_DS); + if (sock_filp->f_op->unlocked_ioctl) + rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg); + set_fs(oldmm); + + fput(sock_filp); +out: return rc; } -- cgit From 61d7258bf144ff388f51d0a3b295a7493fe10035 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Sun, 22 Jun 2014 21:32:06 -0400 Subject: staging/lustre/ptlrpc: Protect request buffer changing *_enlarge_reqbuf class of functions can change request body location for a request that's already in replay list, as such a parallel traverser of the list (after_reply -> ptlrpc_free_committed) might access freed and scrambled memory causing assertion. Since all such users only can get to this request under imp_lock, take imp_lock to protect against them in *_enlarge_reqbuf Signed-off-by: Oleg Drokin Reviewed-on: http://review.whamcloud.com/10074 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3333 Reviewed-by: Mike Pershin Reviewed-by: Andreas Dilger Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c | 29 ++++++++++++++++++++++ drivers/staging/lustre/lustre/ptlrpc/sec_null.c | 11 ++++++++ drivers/staging/lustre/lustre/ptlrpc/sec_plain.c | 12 +++++++++ 3 files changed, 52 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c b/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c index 383601cdd4e6..ef44e09d2c3c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c +++ b/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c @@ -1687,12 +1687,24 @@ int gss_enlarge_reqbuf_intg(struct ptlrpc_sec *sec, if (newbuf == NULL) return -ENOMEM; + /* Must lock this, so that otherwise unprotected change of + * rq_reqmsg is not racing with parallel processing of + * imp_replay_list traversing threads. See LU-3333 + * This is a bandaid at best, we really need to deal with this + * in request enlarging code before unpacking that's already + * there */ + if (req->rq_import) + spin_lock(&req->rq_import->imp_lock); + memcpy(newbuf, req->rq_reqbuf, req->rq_reqbuf_len); OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); req->rq_reqbuf = newbuf; req->rq_reqbuf_len = newbuf_size; req->rq_reqmsg = lustre_msg_buf(req->rq_reqbuf, 1, 0); + + if (req->rq_import) + spin_unlock(&req->rq_import->imp_lock); } /* do enlargement, from wrapper to embedded, from end to begin */ @@ -1753,6 +1765,8 @@ int gss_enlarge_reqbuf_priv(struct ptlrpc_sec *sec, if (newclrbuf_size + newcipbuf_size <= req->rq_reqbuf_len) { void *src, *dst; + if (req->rq_import) + spin_lock(&req->rq_import->imp_lock); /* move clear text backward. */ src = req->rq_clrbuf; dst = (char *) req->rq_reqbuf + newcipbuf_size; @@ -1762,6 +1776,9 @@ int gss_enlarge_reqbuf_priv(struct ptlrpc_sec *sec, req->rq_clrbuf = (struct lustre_msg *) dst; req->rq_clrbuf_len = newclrbuf_size; req->rq_reqmsg = lustre_msg_buf(req->rq_clrbuf, 0, 0); + + if (req->rq_import) + spin_unlock(&req->rq_import->imp_lock); } else { /* sadly we have to split out the clear buffer */ LASSERT(req->rq_reqbuf_len >= newcipbuf_size); @@ -1776,6 +1793,15 @@ int gss_enlarge_reqbuf_priv(struct ptlrpc_sec *sec, if (newclrbuf == NULL) return -ENOMEM; + /* Must lock this, so that otherwise unprotected change of + * rq_reqmsg is not racing with parallel processing of + * imp_replay_list traversing threads. See LU-3333 + * This is a bandaid at best, we really need to deal with this + * in request enlarging code before unpacking that's already + * there */ + if (req->rq_import) + spin_lock(&req->rq_import->imp_lock); + memcpy(newclrbuf, req->rq_clrbuf, req->rq_clrbuf_len); if (req->rq_reqbuf == NULL || @@ -1788,6 +1814,9 @@ int gss_enlarge_reqbuf_priv(struct ptlrpc_sec *sec, req->rq_clrbuf = newclrbuf; req->rq_clrbuf_len = newclrbuf_size; req->rq_reqmsg = lustre_msg_buf(req->rq_clrbuf, 0, 0); + + if (req->rq_import) + spin_unlock(&req->rq_import->imp_lock); } _sptlrpc_enlarge_msg_inplace(req->rq_clrbuf, 0, newmsg_size); diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c index ff1137fe4dd6..ac967cb983cf 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c @@ -260,11 +260,22 @@ int null_enlarge_reqbuf(struct ptlrpc_sec *sec, if (newbuf == NULL) return -ENOMEM; + /* Must lock this, so that otherwise unprotected change of + * rq_reqmsg is not racing with parallel processing of + * imp_replay_list traversing threads. See LU-3333 + * This is a bandaid at best, we really need to deal with this + * in request enlarging code before unpacking that's already + * there */ + if (req->rq_import) + spin_lock(&req->rq_import->imp_lock); memcpy(newbuf, req->rq_reqbuf, req->rq_reqlen); OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); req->rq_reqbuf = req->rq_reqmsg = newbuf; req->rq_reqbuf_len = alloc_size; + + if (req->rq_import) + spin_unlock(&req->rq_import->imp_lock); } _sptlrpc_enlarge_msg_inplace(req->rq_reqmsg, segment, newsize); diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c b/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c index 416401be6d4f..12c6cefe3f8d 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c @@ -669,6 +669,15 @@ int plain_enlarge_reqbuf(struct ptlrpc_sec *sec, if (newbuf == NULL) return -ENOMEM; + /* Must lock this, so that otherwise unprotected change of + * rq_reqmsg is not racing with parallel processing of + * imp_replay_list traversing threads. See LU-3333 + * This is a bandaid at best, we really need to deal with this + * in request enlarging code before unpacking that's already + * there */ + if (req->rq_import) + spin_lock(&req->rq_import->imp_lock); + memcpy(newbuf, req->rq_reqbuf, req->rq_reqbuf_len); OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); @@ -676,6 +685,9 @@ int plain_enlarge_reqbuf(struct ptlrpc_sec *sec, req->rq_reqbuf_len = newbuf_size; req->rq_reqmsg = lustre_msg_buf(req->rq_reqbuf, PLAIN_PACK_MSG_OFF, 0); + + if (req->rq_import) + spin_unlock(&req->rq_import->imp_lock); } _sptlrpc_enlarge_msg_inplace(req->rq_reqbuf, PLAIN_PACK_MSG_OFF, -- cgit From 98639249b3a9a10730078046c2f7e76756f96b50 Mon Sep 17 00:00:00 2001 From: Nathaniel Clark Date: Sun, 22 Jun 2014 21:32:07 -0400 Subject: staging/lustre/llite: Only kill SGID/SUID bits Check that attr mode is valid before using it when determining if to clear SGID and SUID bits in ll_setattr. Signed-off-by: Nathaniel Clark Reviewed-on: http://review.whamcloud.com/10153 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4924 Reviewed-by: Lai Siyao Reviewed-by: Andreas Dilger Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/llite_lib.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index deca27ea33fe..7eadd6007106 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -1537,12 +1537,14 @@ int ll_setattr(struct dentry *de, struct iattr *attr) !(attr->ia_mode & S_ISGID)))) attr->ia_valid |= ATTR_FORCE; - if ((mode & S_ISUID) && + if ((attr->ia_valid & ATTR_MODE) && + (mode & S_ISUID) && !(attr->ia_mode & S_ISUID) && !(attr->ia_valid & ATTR_KILL_SUID)) attr->ia_valid |= ATTR_KILL_SUID; - if (((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) && + if ((attr->ia_valid & ATTR_MODE) && + ((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) && !(attr->ia_mode & S_ISGID) && !(attr->ia_valid & ATTR_KILL_SGID)) attr->ia_valid |= ATTR_KILL_SGID; -- cgit From 875332d47f8c3a0c23ebe469bd8b31efb77d997a Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Sun, 22 Jun 2014 21:32:08 -0400 Subject: staging/lustre: fix frong ldlm flags type used Fixed implicit conversion from 'unsigned long long' to 'int'. Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/7799 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4023 Reviewed-by: Andreas Dilger Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lustre_dlm.h | 2 +- drivers/staging/lustre/lustre/include/obd_class.h | 2 +- drivers/staging/lustre/lustre/include/obd_ost.h | 4 ++++ drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 2 +- drivers/staging/lustre/lustre/llite/file.c | 6 +++--- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 2 +- drivers/staging/lustre/lustre/lov/lov_internal.h | 2 +- drivers/staging/lustre/lustre/lov/lov_request.c | 10 +++------- drivers/staging/lustre/lustre/osc/osc_internal.h | 2 +- drivers/staging/lustre/lustre/osc/osc_page.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 10 +++++----- 11 files changed, 22 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index 0c6b7841e56d..bf5b2cb792e3 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -1390,7 +1390,7 @@ int ldlm_cli_cancel_req(struct obd_export *exp, struct list_head *head, int ldlm_cancel_resource_local(struct ldlm_resource *res, struct list_head *cancels, ldlm_policy_data_t *policy, - ldlm_mode_t mode, int lock_flags, + ldlm_mode_t mode, __u64 lock_flags, ldlm_cancel_flags_t cancel_flags, void *opaque); int ldlm_cli_cancel_list_local(struct list_head *cancels, int count, ldlm_cancel_flags_t flags); diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index e265820c009f..f8a9d7c91e81 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -1818,7 +1818,7 @@ static inline int md_enqueue(struct obd_export *exp, struct lustre_handle *lockh, void *lmm, int lmmsize, struct ptlrpc_request **req, - int extra_lock_flags) + __u64 extra_lock_flags) { int rc; diff --git a/drivers/staging/lustre/lustre/include/obd_ost.h b/drivers/staging/lustre/lustre/include/obd_ost.h index af89843c312b..54ef54045115 100644 --- a/drivers/staging/lustre/lustre/include/obd_ost.h +++ b/drivers/staging/lustre/lustre/include/obd_ost.h @@ -87,6 +87,10 @@ struct osc_enqueue_args { unsigned int oa_agl:1; }; +extern void osc_update_enqueue(struct lustre_handle *lov_lockhp, + struct lov_oinfo *loi, __u64 flags, + struct ost_lvb *lvb, __u32 mode, int rc); + #if 0 int osc_extent_blocking_cb(struct ldlm_lock *lock, struct ldlm_lock_desc *new, void *data, diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index fcc7a99ce395..3accbce87faf 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -1768,7 +1768,7 @@ int ldlm_cancel_lru(struct ldlm_namespace *ns, int nr, int ldlm_cancel_resource_local(struct ldlm_resource *res, struct list_head *cancels, ldlm_policy_data_t *policy, - ldlm_mode_t mode, int lock_flags, + ldlm_mode_t mode, __u64 lock_flags, ldlm_cancel_flags_t cancel_flags, void *opaque) { struct ldlm_lock *lock; diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index 716e1ee0104f..660fd4d755eb 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c @@ -290,7 +290,7 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode, we can skip talking to MDS */ if (file->f_dentry->d_inode) { /* Can this ever be false? */ int lockmode; - int flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_TEST_LOCK; + __u64 flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_TEST_LOCK; struct lustre_handle lockh; struct inode *inode = file->f_dentry->d_inode; ldlm_policy_data_t policy = {.l_inodebits={MDS_INODELOCK_OPEN}}; @@ -2623,7 +2623,7 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) struct md_op_data *op_data; struct lustre_handle lockh = {0}; ldlm_policy_data_t flock = {{0}}; - int flags = 0; + __u64 flags = 0; int rc; int rc2 = 0; @@ -2708,7 +2708,7 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) if (IS_ERR(op_data)) return PTR_ERR(op_data); - CDEBUG(D_DLMTRACE, "inode=%lu, pid=%u, flags=%#x, mode=%u, " + CDEBUG(D_DLMTRACE, "inode=%lu, pid=%u, flags=%#llx, mode=%u, " "start="LPU64", end="LPU64"\n", inode->i_ino, flock.l_flock.pid, flags, einfo.ei_mode, flock.l_flock.start, flock.l_flock.end); diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index 4edf8a31221c..c17a49ee7d44 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -1715,7 +1715,7 @@ static int lmv_enqueue_remote(struct obd_export *exp, struct ldlm_enqueue_info *einfo, struct lookup_intent *it, struct md_op_data *op_data, struct lustre_handle *lockh, void *lmm, int lmmsize, - int extra_lock_flags) + __u64 extra_lock_flags) { struct ptlrpc_request *req = it->d.lustre.it_data; struct obd_device *obd = exp->exp_obd; diff --git a/drivers/staging/lustre/lustre/lov/lov_internal.h b/drivers/staging/lustre/lustre/lov/lov_internal.h index 38508a5c827f..22326434d412 100644 --- a/drivers/staging/lustre/lustre/lov/lov_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_internal.h @@ -252,7 +252,7 @@ int lov_prep_match_set(struct obd_export *exp, struct obd_info *oinfo, ldlm_policy_data_t *policy, __u32 mode, struct lustre_handle *lockh, struct lov_request_set **reqset); -int lov_fini_match_set(struct lov_request_set *set, __u32 mode, int flags); +int lov_fini_match_set(struct lov_request_set *set, __u32 mode, __u64 flags); int lov_prep_cancel_set(struct obd_export *exp, struct obd_info *oinfo, struct lov_stripe_md *lsm, __u32 mode, struct lustre_handle *lockh, diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index bd6490d0129c..984f4c3e5f04 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -39,8 +39,8 @@ #include #include +#include #include - #include "lov_internal.h" static void lov_init_set(struct lov_request_set *set) @@ -194,13 +194,9 @@ out: return rc; } -extern void osc_update_enqueue(struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, int flags, - struct ost_lvb *lvb, __u32 mode, int rc); - static int lov_update_enqueue_lov(struct obd_export *exp, struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, int flags, int idx, + struct lov_oinfo *loi, __u64 flags, int idx, struct ost_id *oi, int rc) { struct lov_obd *lov = &exp->exp_obd->u.lov; @@ -443,7 +439,7 @@ out_set: return rc; } -int lov_fini_match_set(struct lov_request_set *set, __u32 mode, int flags) +int lov_fini_match_set(struct lov_request_set *set, __u32 mode, __u64 flags) { int rc = 0; diff --git a/drivers/staging/lustre/lustre/osc/osc_internal.h b/drivers/staging/lustre/lustre/osc/osc_internal.h index efc5db47c260..9c4a189639ae 100644 --- a/drivers/staging/lustre/lustre/osc/osc_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_internal.h @@ -112,7 +112,7 @@ int osc_cancel_base(struct lustre_handle *lockh, __u32 mode); int osc_match_base(struct obd_export *exp, struct ldlm_res_id *res_id, __u32 type, ldlm_policy_data_t *policy, __u32 mode, - int *flags, void *data, struct lustre_handle *lockh, + __u64 *flags, void *data, struct lustre_handle *lockh, int unref); int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo, diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c index 96cb6e2b9c4e..71a24473634c 100644 --- a/drivers/staging/lustre/lustre/osc/osc_page.c +++ b/drivers/staging/lustre/lustre/osc/osc_page.c @@ -70,7 +70,7 @@ static int osc_page_is_dlocked(const struct lu_env *env, struct lustre_handle *lockh; ldlm_policy_data_t *policy; ldlm_mode_t dlmmode; - int flags; + __u64 flags; might_sleep(); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 294db843012b..5804104d5104 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -635,7 +635,7 @@ static int osc_sync(const struct lu_env *env, struct obd_export *exp, * locks added to @cancels list. */ static int osc_resource_get_unused(struct obd_export *exp, struct obdo *oa, struct list_head *cancels, - ldlm_mode_t mode, int lock_flags) + ldlm_mode_t mode, __u64 lock_flags) { struct ldlm_namespace *ns = exp->exp_obd->obd_namespace; struct ldlm_res_id res_id; @@ -2398,7 +2398,7 @@ static int osc_enqueue_interpret(const struct lu_env *env, } void osc_update_enqueue(struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, int flags, + struct lov_oinfo *loi, __u64 flags, struct ost_lvb *lvb, __u32 mode, int rc) { struct ldlm_lock *lock = ldlm_handle2lock(lov_lockhp); @@ -2462,7 +2462,7 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id, struct obd_device *obd = exp->exp_obd; struct ptlrpc_request *req = NULL; int intent = *flags & LDLM_FL_HAS_INTENT; - int match_lvb = (agl != 0 ? 0 : LDLM_FL_LVB_READY); + __u64 match_lvb = (agl != 0 ? 0 : LDLM_FL_LVB_READY); ldlm_mode_t mode; int rc; @@ -2613,11 +2613,11 @@ static int osc_enqueue(struct obd_export *exp, struct obd_info *oinfo, int osc_match_base(struct obd_export *exp, struct ldlm_res_id *res_id, __u32 type, ldlm_policy_data_t *policy, __u32 mode, - int *flags, void *data, struct lustre_handle *lockh, + __u64 *flags, void *data, struct lustre_handle *lockh, int unref) { struct obd_device *obd = exp->exp_obd; - int lflags = *flags; + __u64 lflags = *flags; ldlm_mode_t rc; if (OBD_FAIL_CHECK(OBD_FAIL_OSC_MATCH)) -- cgit From f60d7c39ac00766162aab043d159ed3749e396b9 Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Sun, 22 Jun 2014 21:32:09 -0400 Subject: staging/lustre/ptlrpc: fix NULL pointer dereference of {exp, imp}_obd Pointer 'obd' checked for NULL at line 694 may be dereferenced at line 813. Pointer 'req->rq_export->exp_obd' checked for NULL at line 1155 may be dereferenced at line 1164. Also there is one similar error on line 1170. Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/10062 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629 Reviewed-by: John L. Hammond Reviewed-by: Mike Pershin Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 7 +++---- drivers/staging/lustre/lustre/ptlrpc/service.c | 10 +++++----- 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index a47a8d807d5b..ef18639036c5 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -506,10 +506,9 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) * cleanly from the previous attempt */ LASSERT(!request->rq_receiving_reply); - if (request->rq_import->imp_obd && - request->rq_import->imp_obd->obd_fail) { + if (unlikely(obd != NULL && obd->obd_fail)) { CDEBUG(D_HA, "muting rpc for failed imp obd %s\n", - request->rq_import->imp_obd->obd_name); + obd->obd_name); /* this prevents us from waiting in ptlrpc_queue_wait */ spin_lock(&request->rq_lock); request->rq_err = 1; @@ -625,7 +624,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) /* add references on request for request_out_callback */ ptlrpc_request_addref(request); - if (obd->obd_svc_stats != NULL) + if (obd != NULL && obd->obd_svc_stats != NULL) lprocfs_counter_add(obd->obd_svc_stats, PTLRPC_REQACTIVE_CNTR, atomic_read(&request->rq_import->imp_inflight)); diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index d278f2e21803..214daa2e4cfa 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -1100,6 +1100,7 @@ static void ptlrpc_update_export_timer(struct obd_export *exp, long extra_delay) */ static int ptlrpc_check_req(struct ptlrpc_request *req) { + struct obd_device *obd = req->rq_export->exp_obd; int rc = 0; if (unlikely(lustre_msg_get_conn_cnt(req->rq_reqmsg) < @@ -1110,24 +1111,23 @@ static int ptlrpc_check_req(struct ptlrpc_request *req) req->rq_export->exp_conn_cnt); return -EEXIST; } - if (unlikely(req->rq_export->exp_obd && - req->rq_export->exp_obd->obd_fail)) { + if (unlikely(obd == NULL || obd->obd_fail)) { /* * Failing over, don't handle any more reqs, send * error response instead. */ CDEBUG(D_RPCTRACE, "Dropping req %p for failed obd %s\n", - req, req->rq_export->exp_obd->obd_name); + req, (obd != NULL) ? obd->obd_name : "unknown"); rc = -ENODEV; } else if (lustre_msg_get_flags(req->rq_reqmsg) & (MSG_REPLAY | MSG_REQ_REPLAY_DONE) && - !(req->rq_export->exp_obd->obd_recovering)) { + !obd->obd_recovering) { DEBUG_REQ(D_ERROR, req, "Invalid replay without recovery"); class_fail_export(req->rq_export); rc = -ENODEV; } else if (lustre_msg_get_transno(req->rq_reqmsg) != 0 && - !(req->rq_export->exp_obd->obd_recovering)) { + !obd->obd_recovering) { DEBUG_REQ(D_ERROR, req, "Invalid req with transno " LPU64" without recovery", lustre_msg_get_transno(req->rq_reqmsg)); -- cgit From cca8fca11ba89d03e95bb795418a0e4d5beb4284 Mon Sep 17 00:00:00 2001 From: Andriy Skulysh Date: Sun, 22 Jun 2014 21:32:10 -0400 Subject: staging/lustre/mgc: mgc import reconnect race mgc import can be reconnected by pinger or ptlrpc_reconnect_import(). ptlrpc_invalidate_import() isn't protected against alteration of imp_invalid state. Import can be reconnected by pinger which makes imp_invalid equal to false. Thus LASSERT(imp->imp_invalid) fails in ptlrpc_invalidate_import(). It is safe to call ptlrpc_invalidate_import() when import is deactivated, but ptlrpc_reconnect_import() doesn't deactivate it. Let's use only pinger when available to reconnect import Signed-off-by: Andriy Skulysh Reviewed-on: http://review.whamcloud.com/9967 Xyratex-bug-id: MRP-1746 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4913 Reviewed-by: Mike Pershin Reviewed-by: Lai Siyao Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/obd_mount.c | 13 ++----- drivers/staging/lustre/lustre/ptlrpc/import.c | 41 +++++++++++++++++----- drivers/staging/lustre/lustre/ptlrpc/pinger.c | 5 +++ 3 files changed, 40 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c b/drivers/staging/lustre/lustre/obdclass/obd_mount.c index a034aee37fc1..03d9a6ae2b02 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c @@ -219,7 +219,6 @@ int lustre_start_mgc(struct super_block *sb) lnet_nid_t nid; char *mgcname = NULL, *niduuid = NULL, *mgssec = NULL; char *ptr; - int recov_bk; int rc = 0, i = 0, j, len; LASSERT(lsi->lsi_lmd); @@ -269,6 +268,8 @@ int lustre_start_mgc(struct super_block *sb) obd = class_name2obd(mgcname); if (obd && !obd->obd_stopping) { + int recov_bk; + rc = obd_set_info_async(NULL, obd->obd_self_export, strlen(KEY_MGSSEC), KEY_MGSSEC, strlen(mgssec), mgssec, NULL); @@ -429,16 +430,6 @@ int lustre_start_mgc(struct super_block *sb) so we know when we can get rid of the mgc. */ atomic_set(&obd->u.cli.cl_mgc_refcount, 1); - /* Try all connections, but only once. */ - recov_bk = 1; - rc = obd_set_info_async(NULL, obd->obd_self_export, - sizeof(KEY_INIT_RECOV_BACKUP), - KEY_INIT_RECOV_BACKUP, - sizeof(recov_bk), &recov_bk, NULL); - if (rc) - /* nonfatal */ - CWARN("can't set %s %d\n", KEY_INIT_RECOV_BACKUP, rc); - /* We connect to the MGS at setup, and don't disconnect until cleanup */ data->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_AT | OBD_CONNECT_FULL20 | OBD_CONNECT_IMP_RECOV | diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index 8573f328bd2a..b4def8a20e25 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -275,6 +275,7 @@ void ptlrpc_invalidate_import(struct obd_import *imp) if (!imp->imp_invalid || imp->imp_obd->obd_no_recov) ptlrpc_deactivate_import(imp); + CFS_FAIL_TIMEOUT(OBD_FAIL_MGS_CONNECT_NET, 3 * cfs_fail_val / 2); LASSERT(imp->imp_invalid); /* Wait forever until inflight == 0. We really can't do it another @@ -392,6 +393,19 @@ void ptlrpc_activate_import(struct obd_import *imp) } EXPORT_SYMBOL(ptlrpc_activate_import); +static void ptlrpc_pinger_force(struct obd_import *imp) +{ + CDEBUG(D_HA, "%s: waking up pinger s:%s\n", obd2cli_tgt(imp->imp_obd), + ptlrpc_import_state_name(imp->imp_state)); + + spin_lock(&imp->imp_lock); + imp->imp_force_verify = 1; + spin_unlock(&imp->imp_lock); + + if (imp->imp_state != LUSTRE_IMP_CONNECTING) + ptlrpc_pinger_wake_up(); +} + void ptlrpc_fail_import(struct obd_import *imp, __u32 conn_cnt) { LASSERT(!imp->imp_dlm_fake); @@ -406,20 +420,30 @@ void ptlrpc_fail_import(struct obd_import *imp, __u32 conn_cnt) ptlrpc_deactivate_import(imp); } - CDEBUG(D_HA, "%s: waking up pinger\n", - obd2cli_tgt(imp->imp_obd)); - - spin_lock(&imp->imp_lock); - imp->imp_force_verify = 1; - spin_unlock(&imp->imp_lock); - - ptlrpc_pinger_wake_up(); + ptlrpc_pinger_force(imp); } } EXPORT_SYMBOL(ptlrpc_fail_import); int ptlrpc_reconnect_import(struct obd_import *imp) { +#ifdef ENABLE_PINGER + struct l_wait_info lwi; + int secs = cfs_time_seconds(obd_timeout); + int rc; + + ptlrpc_pinger_force(imp); + + CDEBUG(D_HA, "%s: recovery started, waiting %u seconds\n", + obd2cli_tgt(imp->imp_obd), secs); + + lwi = LWI_TIMEOUT(secs, NULL, NULL); + rc = l_wait_event(imp->imp_recovery_waitq, + !ptlrpc_import_in_recovery(imp), &lwi); + CDEBUG(D_HA, "%s: recovery finished s:%s\n", obd2cli_tgt(imp->imp_obd), + ptlrpc_import_state_name(imp->imp_state)); + return rc; +#else ptlrpc_set_import_discon(imp, 0); /* Force a new connect attempt */ ptlrpc_invalidate_import(imp); @@ -444,6 +468,7 @@ int ptlrpc_reconnect_import(struct obd_import *imp) /* Attempt a new connect */ ptlrpc_recover_import(imp, NULL, 0); return 0; +#endif } EXPORT_SYMBOL(ptlrpc_reconnect_import); diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index 38099d9dfdae..2898087e9715 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -224,6 +224,11 @@ static void ptlrpc_pinger_process_import(struct obd_import *imp, "or recovery disabled: %s)\n", imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd), ptlrpc_import_state_name(level)); + if (force) { + spin_lock(&imp->imp_lock); + imp->imp_force_verify = 1; + spin_unlock(&imp->imp_lock); + } } else if ((imp->imp_pingable && !suppress) || force_next || force) { ptlrpc_ping(imp); } -- cgit From a2ff0f973c11c7b42bf2497e5f66520e0f990332 Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Sun, 22 Jun 2014 21:32:11 -0400 Subject: staging/lustre/osc: get rid of old checksum initial value Old code residue assumes initial checksum value as ~0, and relies on that to check whether OST server has calculated bulk data checksum. That is not the case anymore. Signed-off-by: Bobi Jam Reviewed-on: http://review.whamcloud.com/10354 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4937 Reviewed-by: Andreas Dilger Reviewed-by: Bob Glossman Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/osc/osc_request.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 5804104d5104..90e8912dbeb5 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -1570,12 +1570,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) router = libcfs_nid2str(req->rq_bulk->bd_sender); } - if (server_cksum == ~0 && rc > 0) { - CERROR("Protocol error: server %s set the 'checksum' " - "bit, but didn't send a checksum. Not fatal, " - "but please notify on http://bugs.whamcloud.com/\n", - libcfs_nid2str(peer->nid)); - } else if (server_cksum != client_cksum) { + if (server_cksum != client_cksum) { LCONSOLE_ERROR_MSG(0x133, "%s: BAD READ CHECKSUM: from " "%s%s%s inode "DFID" object "DOSTID " extent ["LPU64"-"LPU64"]\n", -- cgit From 5c689e689baa5a8a239a8b5d29c3fb77aa62f134 Mon Sep 17 00:00:00 2001 From: "Alexander.Boyko" Date: Sun, 22 Jun 2014 21:32:12 -0400 Subject: staging/lustre/ptlrpc: race at req processing Race between ptlrpc_resend_req() and ptlrpc_check_set(). 1 thread do ptlrpc_check_set()->after_reply() 2 thread do ptlrpc_resend_req() The result is request with rq_resend = 1 and MSG_REPLY flag. When this request will came to server it will cause client eviction. The patch skip ptlrpc_resend_req logic if rq_replied is set, and clear rq_resend flag at reply_in_callback() when client got reply. Signed-off-by: Alexander Boyko Xyratex-bug-id: MRP-1888 Reviewed-on: http://review.whamcloud.com/10471 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5116 Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin Reviewed-by: Chris Horn Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/client.c | 11 ++++++++++- drivers/staging/lustre/lustre/ptlrpc/events.c | 2 ++ drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 7246e8ce9c19..d806257f31ee 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -2530,10 +2530,19 @@ EXPORT_SYMBOL(ptlrpc_cleanup_client); void ptlrpc_resend_req(struct ptlrpc_request *req) { DEBUG_REQ(D_HA, req, "going to resend"); + spin_lock(&req->rq_lock); + + /* Request got reply but linked to the import list still. + Let ptlrpc_check_set() to process it. */ + if (ptlrpc_client_replied(req)) { + spin_unlock(&req->rq_lock); + DEBUG_REQ(D_HA, req, "it has reply, so skip it"); + return; + } + lustre_msg_set_handle(req->rq_reqmsg, &(struct lustre_handle){ 0 }); req->rq_status = -EAGAIN; - spin_lock(&req->rq_lock); req->rq_resend = 1; req->rq_net_err = 0; req->rq_timedout = 0; diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index aa85239f6cd5..9f9b8d1f835e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -145,6 +145,8 @@ void reply_in_callback(lnet_event_t *ev) /* Real reply */ req->rq_rep_swab_mask = 0; req->rq_replied = 1; + /* Got reply, no resend required */ + req->rq_resend = 0; req->rq_reply_off = ev->offset; req->rq_nob_received = ev->mlength; /* LNetMDUnlink can't be called under the LNET_LOCK, diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index ef18639036c5..f760504e0696 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -505,6 +505,8 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) /* If this is a re-transmit, we're required to have disengaged * cleanly from the previous attempt */ LASSERT(!request->rq_receiving_reply); + LASSERT(!((lustre_msg_get_flags(request->rq_reqmsg) & MSG_REPLAY) && + (request->rq_import->imp_state == LUSTRE_IMP_FULL))); if (unlikely(obd != NULL && obd->obd_fail)) { CDEBUG(D_HA, "muting rpc for failed imp obd %s\n", -- cgit From 06e4f6ca97cb52a863799dc05e506967fd3371c4 Mon Sep 17 00:00:00 2001 From: Cheng Shao Date: Sun, 22 Jun 2014 21:32:13 -0400 Subject: staging/lustre/mgc: replace hard-coded MGC_ENQUEUE_LIMIT value During client mount, the client will send an LDLM_ENQUEUE request to MGS with send delay set to MGC_ENQUEUE_LIMIT, which is hard coded to 50 seconds. On the other hand, the interval for pinger is deduced from obd_timeout. When obd_timeout is configured for a longer period of time, so does the pinger. We know that connecting to the secondary MGS node is triggered by the pinger. Now that we have a longer interval, the pinger will not be able to try the secondary before the LDLM_ENQUEUE request fails the mount using the same delay limit. This code change will replace the hard-coded send delay being mentioned above with a value that is long enough to give the client a chance to connect to the secondary MGS if exists. Signed-off-by: Cheng Shao Reviewed-on: http://review.whamcloud.com/9217 Xyratex-bug-id: MRP-1516 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4582 Reviewed-by: Ryan Haasken Reviewed-by: Dmitry Eremin Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/mgc/mgc_request.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index a806aeffe026..28960f99ebb9 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -950,7 +950,10 @@ static int mgc_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc, } /* Not sure where this should go... */ -#define MGC_ENQUEUE_LIMIT 50 +/* This is the timeout value for MGS_CONNECT request plus a ping interval, such + * that we can have a chance to try the secondary MGS if any. */ +#define MGC_ENQUEUE_LIMIT (INITIAL_CONNECT_TIMEOUT + (AT_OFF ? 0 : at_min) \ + + PING_INTERVAL) #define MGC_TARGET_REG_LIMIT 10 #define MGC_SEND_PARAM_LIMIT 10 -- cgit From da9e33c9bc39e2a02b28906a9cfb6efa5c8d9fed Mon Sep 17 00:00:00 2001 From: "Christopher J. Morrone" Date: Sun, 22 Jun 2014 21:32:14 -0400 Subject: staging/lustre/ptlrpc: Add schedule point to ptlrpc_check_set() Most ptlrpc sets are believed to be small and bounded in length. However at the very least the ptlrpcd reuses the ptlrpc sets at its primary work queue. This work queue can easily have work added faster than the ptlrpcd thread can process the work. The unbounded work can lead to the ptlrpcd monopolizing a CPU for hundreds of seconds. Obviously a well-behaved kernel function should obey the scheduler and share the processor. We address that problem by inserting a cond_resched() at the top of the main loop of ptlrpc_check_set(). Some have suggested putting the cond_resched() lower in the loop. However, the only current way to bound the number of loops that we exceed our allocated run time is to put the call at the top of the loop. Putting it lower would allow an unknown number (and since it is unknown, it might be excessively large at times) of cycles through the loop before a resched is allowed. Signed-off-by: Christopher J. Morrone Reviewed-on: http://review.whamcloud.com/10358 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5053 Reviewed-by: Liang Zhen Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/client.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index d806257f31ee..189048287946 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -1496,6 +1496,8 @@ static inline int ptlrpc_set_producer(struct ptlrpc_request_set *set) * and no more replies are expected. * (it is possible to get less replies than requests sent e.g. due to timed out * requests or requests that we had trouble to send out) + * + * NOTE: This function contains a potential schedule point (cond_resched()). */ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) { @@ -1513,6 +1515,14 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) int unregistered = 0; int rc = 0; + /* This schedule point is mainly for the ptlrpcd caller of this + * function. Most ptlrpc sets are not long-lived and unbounded + * in length, but at the least the set used by the ptlrpcd is. + * Since the processing time is unbounded, we need to insert an + * explicit schedule point to make the thread well-behaved. + */ + cond_resched(); + if (req->rq_phase == RQ_PHASE_NEW && ptlrpc_send_new_req(req)) { force_timer_recalc = 1; -- cgit From 88fa62b24de166bb5a7e3ce55ebe7984f6209b74 Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Sun, 22 Jun 2014 21:32:15 -0400 Subject: staging/lustre/obdclass: Fix uninitialized variables 'sd.page_link' is used uninitialized in this function. 'ss.page_link' is used uninitialized in this function. 'sl.page_link' is used uninitialized in this function. Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/10613 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629 Reviewed-by: James Simmons Reviewed-by: John L. Hammond Reviewed-by: Andreas Dilger Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/capa.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index be1c613383a6..cf1c4974eda8 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -279,6 +279,7 @@ int capa_hmac(__u8 *hmac, struct lustre_capa *capa, __u8 *key) } keylen = alg->ha_keylen; + sg_init_table(&sl, 1); sg_set_page(&sl, virt_to_page(capa), offsetof(struct lustre_capa, lc_hmac), (unsigned long)(capa) % PAGE_CACHE_SIZE); @@ -320,9 +321,11 @@ int capa_encrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) GOTO(out, rc); } + sg_init_table(&sd, 1); sg_set_page(&sd, virt_to_page(d), 16, (unsigned long)(d) % PAGE_CACHE_SIZE); + sg_init_table(&ss, 1); sg_set_page(&ss, virt_to_page(s), 16, (unsigned long)(s) % PAGE_CACHE_SIZE); desc.tfm = tfm; @@ -370,9 +373,11 @@ int capa_decrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) GOTO(out, rc); } + sg_init_table(&sd, 1); sg_set_page(&sd, virt_to_page(d), 16, (unsigned long)(d) % PAGE_CACHE_SIZE); + sg_init_table(&ss, 1); sg_set_page(&ss, virt_to_page(s), 16, (unsigned long)(s) % PAGE_CACHE_SIZE); -- cgit From ce248d59783438f2fb0a8cfb27e7c9b9045170f1 Mon Sep 17 00:00:00 2001 From: Andriy Skulysh Date: Sun, 22 Jun 2014 21:32:16 -0400 Subject: staging/lustre/osc: osc_extent_truncate()) ASSERTION( !ext->oe_urgent ) failed The bug was caused by race between truncate & fsync. osc_extent_wait() doesn't takes into account oe_trunc_pending during setting oe_urgent. The race arises after osc_object_unlock(). osc_extent_wait() should ignore extents with oe_trunc_pending while waiting for OES_INV. osc_cache_truncate_end() will set oe_urgent and call osc_io_unplug_async() Signed-off-by: Andriy Skulysh Reviewed-on: http://review.whamcloud.com/10204 Xyratex-bug-id: LELUS-239 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4852 Reviewed-by: Jinshan Xiong Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/osc/osc_cache.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index 00f38eeb5786..f075b6982dbe 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -871,7 +871,8 @@ static int osc_extent_wait(const struct lu_env *env, struct osc_extent *ext, LASSERT(sanity_check_nolock(ext) == 0); /* `Kick' this extent only if the caller is waiting for it to be * written out. */ - if (state == OES_INV && !ext->oe_urgent && !ext->oe_hp) { + if (state == OES_INV && !ext->oe_urgent && !ext->oe_hp && + !ext->oe_trunc_pending) { if (ext->oe_state == OES_ACTIVE) { ext->oe_urgent = 1; } else if (ext->oe_state == OES_CACHE) { @@ -922,8 +923,8 @@ static int osc_extent_truncate(struct osc_extent *ext, pgoff_t trunc_index, int rc = 0; LASSERT(sanity_check(ext) == 0); - LASSERT(ext->oe_state == OES_TRUNC); - LASSERT(!ext->oe_urgent); + EASSERT(ext->oe_state == OES_TRUNC, ext); + EASSERT(!ext->oe_urgent, ext); /* Request new lu_env. * We can't use that env from osc_cache_truncate_start() because -- cgit From 23ea7e7b3ec6783544dd7600658f2f7ed8cb51a6 Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Sun, 22 Jun 2014 21:32:17 -0400 Subject: staging/lustre/llite: Fix uninitialized variable 'f.f_flags' might be used uninitialized in this function. xattr.c:248: 'f.f_flags' is declared. xattr.c:244: lump!= ( (void* )0) is true xattr.c:254: 'f.f_flags' is used, but is uninitialized. Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/10663 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629 Reviewed-by: Andreas Dilger Reviewed-by: James Simmons Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/xattr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index c6c27bbb43b4..c1eff650aa82 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c @@ -246,6 +246,7 @@ int ll_setxattr(struct dentry *dentry, const char *name, int lum_size = (lump->lmm_magic == LOV_USER_MAGIC_V1) ? sizeof(*lump) : sizeof(struct lov_user_md_v3); + memset(&f, 0, sizeof(f)); /* f.f_flags is used below */ f.f_dentry = dentry; rc = ll_lov_setstripe_ea_info(inode, &f, flags, lump, lum_size); -- cgit From cf378ff770febe57b93e7e7ce513865cd25ac20c Mon Sep 17 00:00:00 2001 From: Alexey Lyashkov Date: Sun, 22 Jun 2014 21:32:18 -0400 Subject: staging/lustre/ptlrpc: unlink request buffer correctly outgoning buffer may be hold by lnet and don't unlinked fast, it's break unloading a lustre modules as request hold a reference to the export/obd Signed-off-by: Alexey Lyashkov Xyratex-bug-id: MRP-1848 Reviewed-on: http://review.whamcloud.com/10353 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5073 Reviewed-by: Mike Pershin Reviewed-by: Liang Zhen Reviewed-by: Isaac Huang Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lustre_net.h | 6 ++++-- drivers/staging/lustre/lustre/ptlrpc/client.c | 11 ++++++----- drivers/staging/lustre/lustre/ptlrpc/events.c | 9 +++++---- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 5 +++-- 4 files changed, 18 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index f6b7d10cb78c..b837d34f0b4d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -1591,7 +1591,8 @@ struct ptlrpc_request { rq_replay:1, rq_no_resend:1, rq_waiting:1, rq_receiving_reply:1, rq_no_delay:1, rq_net_err:1, rq_wait_ctx:1, - rq_early:1, rq_must_unlink:1, + rq_early:1, + rq_req_unlink:1, rq_reply_unlink:1, rq_memalloc:1, /* req originated from "kswapd" */ /* server-side flags */ rq_packed_final:1, /* packed final reply */ @@ -3039,7 +3040,8 @@ ptlrpc_client_recv_or_unlink(struct ptlrpc_request *req) spin_unlock(&req->rq_lock); return 1; } - rc = req->rq_receiving_reply || req->rq_must_unlink; + rc = req->rq_receiving_reply; + rc = rc || req->rq_req_unlink || req->rq_reply_unlink; spin_unlock(&req->rq_lock); return rc; } diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 189048287946..0e0ea5cd5f36 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -1202,7 +1202,7 @@ static int after_reply(struct ptlrpc_request *req) LASSERT(obd != NULL); /* repbuf must be unlinked */ - LASSERT(!req->rq_receiving_reply && !req->rq_must_unlink); + LASSERT(!req->rq_receiving_reply && !req->rq_reply_unlink); if (req->rq_reply_truncate) { if (ptlrpc_no_resend(req)) { @@ -2406,9 +2406,10 @@ int ptlrpc_unregister_reply(struct ptlrpc_request *request, int async) } LASSERT(rc == -ETIMEDOUT); - DEBUG_REQ(D_WARNING, request, "Unexpectedly long timeout " - "rvcng=%d unlnk=%d", request->rq_receiving_reply, - request->rq_must_unlink); + DEBUG_REQ(D_WARNING, request, + "Unexpectedly long timeout rvcng=%d unlnk=%d/%d", + request->rq_receiving_reply, + request->rq_req_unlink, request->rq_reply_unlink); } return 0; } @@ -3081,7 +3082,7 @@ void *ptlrpcd_alloc_work(struct obd_import *imp, req->rq_interpret_reply = work_interpreter; /* don't want reply */ req->rq_receiving_reply = 0; - req->rq_must_unlink = 0; + req->rq_req_unlink = req->rq_reply_unlink = 0; req->rq_no_delay = req->rq_no_resend = 1; req->rq_pill.rc_fmt = (void *)&worker_format; diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index 9f9b8d1f835e..209fcc144298 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -63,19 +63,20 @@ void request_out_callback(lnet_event_t *ev) DEBUG_REQ(D_NET, req, "type %d, status %d", ev->type, ev->status); sptlrpc_request_out_callback(req); + spin_lock(&req->rq_lock); req->rq_real_sent = cfs_time_current_sec(); + if (ev->unlinked) + req->rq_req_unlink = 0; if (ev->type == LNET_EVENT_UNLINK || ev->status != 0) { /* Failed send: make it seem like the reply timed out, just * like failing sends in client.c does currently... */ - spin_lock(&req->rq_lock); req->rq_net_err = 1; - spin_unlock(&req->rq_lock); - ptlrpc_client_wake_req(req); } + spin_unlock(&req->rq_lock); ptlrpc_req_finished(req); } @@ -102,7 +103,7 @@ void reply_in_callback(lnet_event_t *ev) req->rq_receiving_reply = 0; req->rq_early = 0; if (ev->unlinked) - req->rq_must_unlink = 0; + req->rq_reply_unlink = 0; if (ev->status) goto out_wake; diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index f760504e0696..3f0ca23f7b91 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -580,8 +580,9 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) spin_lock(&request->rq_lock); /* If the MD attach succeeds, there _will_ be a reply_in callback */ request->rq_receiving_reply = !noreply; + request->rq_req_unlink = 1; /* We are responsible for unlinking the reply buffer */ - request->rq_must_unlink = !noreply; + request->rq_reply_unlink = !noreply; /* Clear any flags that may be present from previous sends. */ request->rq_replied = 0; request->rq_err = 0; @@ -604,7 +605,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) reply_md.user_ptr = &request->rq_reply_cbid; reply_md.eq_handle = ptlrpc_eq_h; - /* We must see the unlink callback to unset rq_must_unlink, + /* We must see the unlink callback to unset rq_reply_unlink, so we can't auto-unlink */ rc = LNetMDAttach(reply_me_h, reply_md, LNET_RETAIN, &request->rq_reply_md_h); -- cgit From ad33b38b5213f4adad5a7a0b054d6000e24400b7 Mon Sep 17 00:00:00 2001 From: Bob Glossman Date: Sun, 22 Jun 2014 21:32:19 -0400 Subject: staging/lustre/obdclass: runtime load lustre client when needed Manually force loading of lustre.ko during client mounts with request_module for cases where autoloading doesn't happen. Signed-off-by: Bob Glossman Reviewed-on: http://review.whamcloud.com/10587 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4800 Reviewed-by: John L. Hammond Reviewed-by: James Simmons Reviewed-by: Yang Sheng Reviewed-by: Andreas Dilger Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/obd_mount.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c b/drivers/staging/lustre/lustre/obdclass/obd_mount.c index 03d9a6ae2b02..4e77f07de1d5 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c @@ -1216,7 +1216,9 @@ int lustre_fill_super(struct super_block *sb, void *data, int silent) if (lmd_is_client(lmd)) { CDEBUG(D_MOUNT, "Mounting client %s\n", lmd->lmd_profile); - if (!client_fill_super) { + if (client_fill_super == NULL) + request_module("lustre"); + if (client_fill_super == NULL) { LCONSOLE_ERROR_MSG(0x165, "Nothing registered for " "client mount! Is the 'lustre' " "module loaded?\n"); @@ -1299,6 +1301,7 @@ struct file_system_type lustre_fs_type = { .fs_flags = FS_BINARY_MOUNTDATA | FS_REQUIRES_DEV | FS_HAS_FIEMAP | FS_RENAME_DOES_D_MOVE, }; +MODULE_ALIAS_FS("lustre"); int lustre_register_fs(void) { -- cgit From 09516500cb7555e83aceb9316ce69b0baf6ad1eb Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Sun, 22 Jun 2014 21:32:20 -0400 Subject: staging/lustre/vvp: release mmap_sem in error case The mmap_sem is downed in vvp_mmap_locks, but in case of error from cl_io_lock_alloc_add, it is not upped. Credit to Paul Casella at Cray for finding this. Signed-off-by: Patrick Farrell Reviewed-on: http://review.whamcloud.com/10741 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5221 Reviewed-by: Andreas Dilger Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/vvp_io.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c index 0e0b404cb5e6..04230edc1778 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_io.c +++ b/drivers/staging/lustre/lustre/llite/vvp_io.c @@ -269,8 +269,10 @@ static int vvp_mmap_locks(const struct lu_env *env, descr->cld_mode, descr->cld_start, descr->cld_end); - if (result < 0) + if (result < 0) { + up_read(&mm->mmap_sem); return result; + } if (vma->vm_end - addr >= count) break; -- cgit From 733bd244ab1d03db5416b968500092977690a0be Mon Sep 17 00:00:00 2001 From: Li Xi Date: Sun, 22 Jun 2014 21:32:21 -0400 Subject: staging/lustre/llite: fix a flag bug of vvp_io_kernel_fault() After vvp_io_kernel_fault() locked the page, it should set VM_FAULT_LOCKED. Signed-off-by: Li Xi Reviewed-on: http://review.whamcloud.com/10740 Reviewed-by: Jinshan Xiong Reviewed-by: Emoly Liu Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/vvp_io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c index 04230edc1778..2539a89e4255 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_io.c +++ b/drivers/staging/lustre/lustre/llite/vvp_io.c @@ -624,7 +624,7 @@ static int vvp_io_kernel_fault(struct vvp_fault_io *cfio) page_private(vmf->page), vmf->virtual_address); if (unlikely(!(cfio->fault.ft_flags & VM_FAULT_LOCKED))) { lock_page(vmf->page); - cfio->fault.ft_flags &= VM_FAULT_LOCKED; + cfio->fault.ft_flags |= VM_FAULT_LOCKED; } cfio->ft_vmpage = vmf->page; -- cgit From dee2857e2250c1c1af9d34632087e4676218bcad Mon Sep 17 00:00:00 2001 From: Isaac Huang Date: Sun, 22 Jun 2014 21:32:22 -0400 Subject: staging/lustre/lnet: abort messages whose MD has been unlinked If LNetMDUnlink has been called, all outgoing messages on that MD should be aborted before lnet_ni_send() is called. Signed-off-by: Isaac Huang Reviewed-on: http://review.whamcloud.com/8041 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4006 Reviewed-by: Liang Zhen Reviewed-by: Doug Oucharek Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/include/linux/lnet/lib-types.h | 1 + drivers/staging/lustre/lnet/lnet/lib-md.c | 10 ++--- drivers/staging/lustre/lnet/lnet/lib-me.c | 11 ++--- drivers/staging/lustre/lnet/lnet/lib-move.c | 49 +++++++++++++++------- 4 files changed, 45 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index a63654b660de..6816aa0ab306 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -280,6 +280,7 @@ typedef struct lnet_libmd { #define LNET_MD_FLAG_ZOMBIE (1 << 0) #define LNET_MD_FLAG_AUTO_UNLINK (1 << 1) +#define LNET_MD_FLAG_ABORTED (1 << 2) #ifdef LNET_USE_LIB_FREELIST typedef struct { diff --git a/drivers/staging/lustre/lnet/lnet/lib-md.c b/drivers/staging/lustre/lnet/lnet/lib-md.c index ae643f26933b..d68c6e0b4f16 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-md.c +++ b/drivers/staging/lustre/lnet/lnet/lib-md.c @@ -387,7 +387,8 @@ EXPORT_SYMBOL(LNetMDBind); /** * Unlink the memory descriptor from any ME it may be linked to and release - * the internal resources associated with it. + * the internal resources associated with it. As a result, active messages + * associated with the MD may get aborted. * * This function does not free the memory region associated with the MD; * i.e., the memory the user allocated for this MD. If the ME associated with @@ -433,12 +434,11 @@ LNetMDUnlink (lnet_handle_md_t mdh) return -ENOENT; } + md->md_flags |= LNET_MD_FLAG_ABORTED; /* If the MD is busy, lnet_md_unlink just marks it for deletion, and - * when the NAL is done, the completion event flags that the MD was + * when the LND is done, the completion event flags that the MD was * unlinked. Otherwise, we enqueue an event now... */ - - if (md->md_eq != NULL && - md->md_refcount == 0) { + if (md->md_eq != NULL && md->md_refcount == 0) { lnet_build_unlink_event(md, &ev); lnet_eq_enqueue_event(md->md_eq, &ev); } diff --git a/drivers/staging/lustre/lnet/lnet/lib-me.c b/drivers/staging/lustre/lnet/lnet/lib-me.c index 0081075cabee..0e422099aa9c 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-me.c +++ b/drivers/staging/lustre/lnet/lnet/lib-me.c @@ -246,11 +246,12 @@ LNetMEUnlink(lnet_handle_me_t meh) } md = me->me_md; - if (md != NULL && - md->md_eq != NULL && - md->md_refcount == 0) { - lnet_build_unlink_event(md, &ev); - lnet_eq_enqueue_event(md->md_eq, &ev); + if (md != NULL) { + md->md_flags |= LNET_MD_FLAG_ABORTED; + if (md->md_eq != NULL && md->md_refcount == 0) { + lnet_build_unlink_event(md, &ev); + lnet_eq_enqueue_event(md->md_eq, &ev); + } } lnet_me_unlink(me); diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index bbf43ae04ed0..95bf41fd68fc 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -773,26 +773,30 @@ lnet_peer_alive_locked(lnet_peer_t *lp) return 0; } -int +/** + * \param msg The message to be sent. + * \param do_send True if lnet_ni_send() should be called in this function. + * lnet_send() is going to lnet_net_unlock immediately after this, so + * it sets do_send FALSE and I don't do the unlock/send/lock bit. + * + * \retval 0 If \a msg sent or OK to send. + * \retval EAGAIN If \a msg blocked for credit. + * \retval EHOSTUNREACH If the next hop of the message appears dead. + * \retval ECANCELED If the MD of the message has been unlinked. + */ +static int lnet_post_send_locked(lnet_msg_t *msg, int do_send) { - /* lnet_send is going to lnet_net_unlock immediately after this, - * so it sets do_send FALSE and I don't do the unlock/send/lock bit. - * I return EAGAIN if msg blocked, EHOSTUNREACH if msg_txpeer - * appears dead, and 0 if sent or OK to send */ - struct lnet_peer *lp = msg->msg_txpeer; - struct lnet_ni *ni = lp->lp_ni; - struct lnet_tx_queue *tq; - int cpt; + lnet_peer_t *lp = msg->msg_txpeer; + lnet_ni_t *ni = lp->lp_ni; + int cpt = msg->msg_tx_cpt; + struct lnet_tx_queue *tq = ni->ni_tx_queues[cpt]; /* non-lnet_send() callers have checked before */ LASSERT(!do_send || msg->msg_tx_delayed); LASSERT(!msg->msg_receiving); LASSERT(msg->msg_tx_committed); - cpt = msg->msg_tx_cpt; - tq = ni->ni_tx_queues[cpt]; - /* NB 'lp' is always the next hop */ if ((msg->msg_target.pid & LNET_PID_USERFLAG) == 0 && lnet_peer_alive_locked(lp) == 0) { @@ -809,6 +813,20 @@ lnet_post_send_locked(lnet_msg_t *msg, int do_send) return EHOSTUNREACH; } + if (msg->msg_md != NULL && + (msg->msg_md->md_flags & LNET_MD_FLAG_ABORTED) != 0) { + lnet_net_unlock(cpt); + + CNETERR("Aborting message for %s: LNetM[DE]Unlink() already " + "called on the MD/ME.\n", + libcfs_id2str(msg->msg_target)); + if (do_send) + lnet_finalize(ni, msg, -ECANCELED); + + lnet_net_lock(cpt); + return ECANCELED; + } + if (!msg->msg_peertxcredit) { LASSERT((lp->lp_txcredits < 0) == !list_empty(&lp->lp_txq)); @@ -1327,13 +1345,13 @@ lnet_send(lnet_nid_t src_nid, lnet_msg_t *msg, lnet_nid_t rtr_nid) rc = lnet_post_send_locked(msg, 0); lnet_net_unlock(cpt); - if (rc == EHOSTUNREACH) - return -EHOSTUNREACH; + if (rc == EHOSTUNREACH || rc == ECANCELED) + return -rc; if (rc == 0) lnet_ni_send(src_ni, msg); - return 0; + return 0; /* rc == 0 or EAGAIN */ } static void @@ -2288,7 +2306,6 @@ LNetGet(lnet_nid_t self, lnet_handle_md_t mdh, lnet_res_unlock(cpt); lnet_msg_free(msg); - return -ENOENT; } -- cgit From 0d2f6bb4b2c3fae1683ca604400a9c90a7399963 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Mon, 23 Jun 2014 22:40:00 +1000 Subject: staging: lustre: lustre: libcfs: fail.c - fix sparse warnings EXPORT_SYMBOL - this fixes "WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/fail.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/fail.c b/drivers/staging/lustre/lustre/libcfs/fail.c index ba43ff7f7900..f63eac98d54b 100644 --- a/drivers/staging/lustre/lustre/libcfs/fail.c +++ b/drivers/staging/lustre/lustre/libcfs/fail.c @@ -36,13 +36,15 @@ #include unsigned long cfs_fail_loc = 0; -unsigned int cfs_fail_val = 0; -wait_queue_head_t cfs_race_waitq; -int cfs_race_state; - EXPORT_SYMBOL(cfs_fail_loc); + +unsigned int cfs_fail_val = 0; EXPORT_SYMBOL(cfs_fail_val); + +wait_queue_head_t cfs_race_waitq; EXPORT_SYMBOL(cfs_race_waitq); + +int cfs_race_state; EXPORT_SYMBOL(cfs_race_state); int __cfs_fail_check_set(__u32 id, __u32 value, int set) -- cgit From 8bcf3c238103c4523678f8273fc5fc57ae780451 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 25 Jun 2014 14:57:27 +1000 Subject: staging: lustre: llite: llite_capa.c - fixes checkpatch errors - unecessary init of static variables to 0 - this commit fixes some "ERROR: do not initialise statics to 0 or NULL" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/llite_capa.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index d06d0b1ab08a..7ed45a4e4e08 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -63,10 +63,10 @@ static struct list_head *ll_capa_list = &capa_list[CAPA_SITE_CLIENT]; struct timer_list ll_capa_timer; /* for debug: indicate whether capa on llite is enabled or not */ static atomic_t ll_capa_debug = ATOMIC_INIT(0); -static unsigned long long ll_capa_renewed = 0; -static unsigned long long ll_capa_renewal_noent = 0; -static unsigned long long ll_capa_renewal_failed = 0; -static unsigned long long ll_capa_renewal_retries = 0; +static unsigned long long ll_capa_renewed; +static unsigned long long ll_capa_renewal_noent; +static unsigned long long ll_capa_renewal_failed; +static unsigned long long ll_capa_renewal_retries; static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa); -- cgit From 576eb39a6bff6c218b073e8474ea2237812a6cac Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 25 Jun 2014 14:57:28 +1000 Subject: staging: lustre: llite: llite_capa.c - fixed warning to use recomended headers - this fixes "WARNING: Use #include instead of " Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/llite_capa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 7ed45a4e4e08..2f11cbf5639c 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LLITE #include -#include +#include #include #include -- cgit From eb73f514deeae35d641f875f56ded5445abfbbf6 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 25 Jun 2014 14:57:29 +1000 Subject: staging: lustre: llite: dir.c - fixes indented labels in code - this fixes "WARNING: labels should not be indented" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/dir.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index ae6f61aa4da6..5d096d8f7fb1 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -1501,7 +1501,7 @@ out_rmdir: GOTO(out_req, rc = -EFAULT); rc = -EOVERFLOW; } - skip_lmm: +skip_lmm: if (cmd == IOC_MDC_GETFILEINFO || cmd == LL_IOC_MDC_GETINFO) { struct lov_user_mds_data *lmdp; lstat_t st = { 0 }; @@ -1525,7 +1525,7 @@ out_rmdir: GOTO(out_req, rc = -EFAULT); } - out_req: +out_req: ptlrpc_req_finished(request); if (filename) ll_putname(filename); @@ -1589,9 +1589,9 @@ out_rmdir: if (copy_to_user(&lumd->lmd_st, &st, sizeof(st))) GOTO(free_lsm, rc = -EFAULT); - free_lsm: +free_lsm: obd_free_memmd(sbi->ll_dt_exp, &lsm); - free_lmm: +free_lmm: OBD_FREE_LARGE(lmm, lmmsize); return rc; } @@ -1653,7 +1653,7 @@ out_rmdir: CDEBUG(D_QUOTA, "copy_to_user failed\n"); GOTO(out_poll, rc); } - out_poll: +out_poll: OBD_FREE_PTR(check); return rc; } @@ -1702,9 +1702,9 @@ out_rmdir: rc = -EFAULT; } - out_quotactl_20: +out_quotactl_20: OBD_FREE_PTR(qctl_20); - out_quotactl_18: +out_quotactl_18: OBD_FREE_PTR(qctl_18); return rc; } @@ -1726,7 +1726,7 @@ out_rmdir: if (rc == 0 && copy_to_user((void *)arg,qctl,sizeof(*qctl))) rc = -EFAULT; - out_quotactl: +out_quotactl: OBD_FREE_PTR(qctl); return rc; } -- cgit From b0126abf7248fa21758e0a25eaf93b16435b55c1 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Wed, 25 Jun 2014 14:57:30 +1000 Subject: staging: lustre: llite: dir.c - fix for coding style issues - this fixes some coding style issues "ERROR: "(foo*)" should be "(foo *)" Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/dir.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index 5d096d8f7fb1..6efaf03196d5 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -1266,7 +1266,7 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (mdtidx < 0) return mdtidx; - if (put_user((int)mdtidx, (int*)arg)) + if (put_user((int)mdtidx, (int *)arg)) return -EFAULT; return 0; @@ -1778,7 +1778,7 @@ out_quotactl: return -EFAULT; return 0; case LL_IOC_GET_CONNECT_FLAGS: { - return obd_iocontrol(cmd, sbi->ll_md_exp, 0, NULL, (void*)arg); + return obd_iocontrol(cmd, sbi->ll_md_exp, 0, NULL, (void *)arg); } case OBD_IOC_CHANGELOG_SEND: case OBD_IOC_CHANGELOG_CLEAR: -- cgit From a790ebc1f0189bf80bdde03b427e7da7fd3c62f7 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Mon, 23 Jun 2014 11:43:08 +0530 Subject: staging: emxx_udc: Fix build error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit devm_request_and_ioremap has been removed since commit c9d53c0f2d23 ("devres: remove devm_request_and_ioremap()") Use devm_ioremap_resource instead. While at it, also remove redundant error message as it is now handled by devm_ioremap_resource. Without this patch we get the following build error: drivers/staging/emxx_udc/emxx_udc.c:3370:2: error: implicit declaration of function ‘devm_request_and_ioremap’ [-Werror=implicit-function-declaration] Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/emxx_udc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c index c92ded8b5b3e..ee0094d8cc6e 100644 --- a/drivers/staging/emxx_udc/emxx_udc.c +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -3367,11 +3368,9 @@ static int nbu2ss_drv_probe(struct platform_device *pdev) /* require I/O memory and IRQ to be provided as resources */ r = platform_get_resource(pdev, IORESOURCE_MEM, 0); - mmio_base = devm_request_and_ioremap(&pdev->dev, r); - if (IS_ERR(mmio_base)) { - dev_err(&pdev->dev, "failed to map I/O memory\n"); + mmio_base = devm_ioremap_resource(&pdev->dev, r); + if (IS_ERR(mmio_base)) return PTR_ERR(mmio_base); - } irq = platform_get_irq(pdev, 0); if (irq < 0) { -- cgit From 464cad2c50ece09be0fd9e21799a749d6aadfda5 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Mon, 23 Jun 2014 11:55:32 +0530 Subject: staging: emxx_udc: Use module_platform_driver module_platform_driver removes some boiler plate and makes code simpler. Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/emxx_udc.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c index ee0094d8cc6e..ce1b95b0abfc 100644 --- a/drivers/staging/emxx_udc/emxx_udc.c +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -3511,24 +3511,7 @@ static struct platform_driver udc_driver = { }, }; - - -/*-------------------------------------------------------------------------*/ -/* module */ - -/*-------------------------------------------------------------------------*/ -static int __init udc_init(void) -{ - return platform_driver_register(&udc_driver); -} -module_init(udc_init); - -/*-------------------------------------------------------------------------*/ -static void __exit udc_exit(void) -{ - platform_driver_unregister(&udc_driver); -} -module_exit(udc_exit); +module_platform_driver(udc_driver); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_AUTHOR("Renesas Electronics Corporation"); -- cgit From 351e836fa6cf4eef8a844fa5877826ecbd969ee8 Mon Sep 17 00:00:00 2001 From: Vincent Heuken Date: Mon, 23 Jun 2014 05:09:18 -0700 Subject: Staging: slicoss: fixed frivolous else statement warnings in slicoss.c This is a patch for the slicoss.c file that fixes four instances of the following warning: WARNING: else is not generally useful after a break or return Signed-off-by: Vincent Heuken Signed-off-by: Greg Kroah-Hartman --- drivers/staging/slicoss/slicoss.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index 48841e7c2f74..50ece291fc6a 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c @@ -740,9 +740,9 @@ static bool slic_mac_filter(struct adapter *adapter, if (opts & MAC_BCAST) { adapter->rcv_broadcasts++; return true; - } else { - return false; } + + return false; } if (is_multicast_ether_addr(ether_frame->ether_dhost)) { @@ -763,10 +763,11 @@ static bool slic_mac_filter(struct adapter *adapter, } mcaddr = mcaddr->next; } - return false; - } else { + return false; } + + return false; } if (opts & MAC_DIRECTED) { adapter->rcv_unicasts++; @@ -2714,9 +2715,10 @@ static int slic_card_init(struct sliccard *card, struct adapter *adapter) dev_err(&adapter->pcidev->dev, "Failed to allocate DMA memory for EEPROM.\n"); return -ENOMEM; - } else { - memset(peeprom, 0, sizeof(struct slic_eeprom)); } + + memset(peeprom, 0, sizeof(struct slic_eeprom)); + slic_reg32_write(&slic_regs->slic_icr, ICR_INT_OFF, FLUSH); mdelay(1); pshmem = (struct slic_shmem *)(unsigned long) @@ -2751,11 +2753,11 @@ static int slic_card_init(struct sliccard *card, struct adapter *adapter) slic_upr_request_complete(adapter, 0); break; - } else { - adapter->pshmem->isr = 0; - slic_reg32_write(&slic_regs->slic_isr, - 0, FLUSH); } + + adapter->pshmem->isr = 0; + slic_reg32_write(&slic_regs->slic_isr, + 0, FLUSH); } else { mdelay(1); i++; -- cgit From 9bcfab200dbbd8b948f38dcaaf4827e2e5ec4a04 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:17 +0200 Subject: Staging: bcm: led_control.c: Indentation/Whitespace/Line length cleanup Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 138 ++++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 59 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index eee4f4795a71..fd73dbddd5b1 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -23,8 +23,12 @@ bool IsReqGpioIsLedInNVM(struct bcm_mini_adapter *Adapter, UINT gpios) return TRUE; } -static INT LED_Blink(struct bcm_mini_adapter *Adapter, UINT GPIO_Num, UCHAR uiLedIndex, - ULONG timeout, INT num_of_time, enum bcm_led_events currdriverstate) +static INT LED_Blink(struct bcm_mini_adapter *Adapter, + UINT GPIO_Num, + UCHAR uiLedIndex, + ULONG timeout, + INT num_of_time, + enum bcm_led_events currdriverstate) { int Status = STATUS_SUCCESS; bool bInfinite = false; @@ -95,9 +99,12 @@ static INT ScaleRateofTransfer(ULONG rate) -static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, UCHAR GPIO_Num_tx, - UCHAR uiTxLedIndex, UCHAR GPIO_Num_rx, UCHAR uiRxLedIndex, - enum bcm_led_events currdriverstate) +static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, + UCHAR GPIO_Num_tx, + UCHAR uiTxLedIndex, + UCHAR GPIO_Num_rx, + UCHAR uiRxLedIndex, + enum bcm_led_events currdriverstate) { /* Initial values of TX and RX packets */ ULONG64 Initial_num_of_packts_tx = 0, Initial_num_of_packts_rx = 0; @@ -261,8 +268,9 @@ static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, UCHAR GPIO_N * * ----------------------------------------------------------------------------- */ -static INT ValidateDSDParamsChecksum(struct bcm_mini_adapter *Adapter, ULONG ulParamOffset, - USHORT usParamLen) +static INT ValidateDSDParamsChecksum(struct bcm_mini_adapter *Adapter, + ULONG ulParamOffset, + USHORT usParamLen) { INT Status = STATUS_SUCCESS; PUCHAR puBuffer = NULL; @@ -270,24 +278,24 @@ static INT ValidateDSDParamsChecksum(struct bcm_mini_adapter *Adapter, ULONG ulP USHORT usChecksumCalculated = 0; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread:ValidateDSDParamsChecksum: 0x%lx 0x%X", - ulParamOffset, usParamLen); + "LED Thread:ValidateDSDParamsChecksum: 0x%lx 0x%X", + ulParamOffset, usParamLen); puBuffer = kmalloc(usParamLen, GFP_KERNEL); if (!puBuffer) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "LED Thread: ValidateDSDParamsChecksum Allocation failed"); + DBG_LVL_ALL, + "LED Thread: ValidateDSDParamsChecksum Allocation failed"); return -ENOMEM; } /* Read the DSD data from the parameter offset. */ if (STATUS_SUCCESS != BeceemNVMRead(Adapter, (PUINT)puBuffer, - ulParamOffset, usParamLen)) { + ulParamOffset, usParamLen)) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "LED Thread: ValidateDSDParamsChecksum BeceemNVMRead failed"); + DBG_LVL_ALL, + "LED Thread: ValidateDSDParamsChecksum BeceemNVMRead failed"); Status = STATUS_IMAGE_CHECKSUM_MISMATCH; goto exit; } @@ -295,24 +303,24 @@ static INT ValidateDSDParamsChecksum(struct bcm_mini_adapter *Adapter, ULONG ulP /* Calculate the checksum of the data read from the DSD parameter. */ usChecksumCalculated = CFG_CalculateChecksum(puBuffer, usParamLen); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread: usCheckSumCalculated = 0x%x\n", - usChecksumCalculated); + "LED Thread: usCheckSumCalculated = 0x%x\n", + usChecksumCalculated); /* * End of the DSD parameter will have a TWO bytes checksum stored in it. * Read it and compare with the calculated Checksum. */ if (STATUS_SUCCESS != BeceemNVMRead(Adapter, (PUINT)&usChksmOrg, - ulParamOffset+usParamLen, 2)) { + ulParamOffset+usParamLen, 2)) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "LED Thread: ValidateDSDParamsChecksum BeceemNVMRead failed"); + DBG_LVL_ALL, + "LED Thread: ValidateDSDParamsChecksum BeceemNVMRead failed"); Status = STATUS_IMAGE_CHECKSUM_MISMATCH; goto exit; } usChksmOrg = ntohs(usChksmOrg); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread: usChksmOrg = 0x%x", usChksmOrg); + "LED Thread: usChksmOrg = 0x%x", usChksmOrg); /* * Compare the checksum calculated with the checksum read @@ -320,8 +328,8 @@ static INT ValidateDSDParamsChecksum(struct bcm_mini_adapter *Adapter, ULONG ulP */ if (usChecksumCalculated ^ usChksmOrg) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "LED Thread: ValidateDSDParamsChecksum: Checksums don't match"); + DBG_LVL_ALL, + "LED Thread: ValidateDSDParamsChecksum: Checksums don't match"); Status = STATUS_IMAGE_CHECKSUM_MISMATCH; goto exit; } @@ -347,7 +355,8 @@ exit: * * ----------------------------------------------------------------------------- */ -static INT ValidateHWParmStructure(struct bcm_mini_adapter *Adapter, ULONG ulHwParamOffset) +static INT ValidateHWParmStructure(struct bcm_mini_adapter *Adapter, + ULONG ulHwParamOffset) { INT Status = STATUS_SUCCESS; @@ -365,9 +374,9 @@ static INT ValidateHWParmStructure(struct bcm_mini_adapter *Adapter, ULONG ulHwP return STATUS_IMAGE_CHECKSUM_MISMATCH; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread:HwParamLen = 0x%x", HwParamLen); + "LED Thread:HwParamLen = 0x%x", HwParamLen); Status = ValidateDSDParamsChecksum(Adapter, ulHwParamOffset, - HwParamLen); + HwParamLen); return Status; } /* ValidateHWParmStructure() */ @@ -383,16 +392,17 @@ static int ReadLEDInformationFromEEPROM(struct bcm_mini_adapter *Adapter, UCHAR ucGPIOInfo[32] = {0}; BeceemNVMRead(Adapter, (PUINT)&usEEPROMVersion, - EEPROM_VERSION_OFFSET, 2); + EEPROM_VERSION_OFFSET, 2); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "usEEPROMVersion: Minor:0x%X Major:0x%x", - usEEPROMVersion&0xFF, ((usEEPROMVersion>>8)&0xFF)); + "usEEPROMVersion: Minor:0x%X Major:0x%x", + usEEPROMVersion & 0xFF, + ((usEEPROMVersion >> 8) & 0xFF)); if (((usEEPROMVersion>>8)&0xFF) < EEPROM_MAP5_MAJORVERSION) { BeceemNVMRead(Adapter, (PUINT)&usHwParamData, - EEPROM_HW_PARAM_POINTER_ADDRESS, 2); + EEPROM_HW_PARAM_POINTER_ADDRESS, 2); usHwParamData = ntohs(usHwParamData); dwReadValue = usHwParamData; } else { @@ -401,21 +411,21 @@ static int ReadLEDInformationFromEEPROM(struct bcm_mini_adapter *Adapter, * if compatibility section is valid. */ Status = ValidateDSDParamsChecksum(Adapter, - DSD_START_OFFSET, - COMPATIBILITY_SECTION_LENGTH_MAP5); + DSD_START_OFFSET, + COMPATIBILITY_SECTION_LENGTH_MAP5); if (Status != STATUS_SUCCESS) return Status; BeceemNVMRead(Adapter, (PUINT)&dwReadValue, - EEPROM_HW_PARAM_POINTER_ADDRRES_MAP5, 4); + EEPROM_HW_PARAM_POINTER_ADDRRES_MAP5, 4); dwReadValue = ntohl(dwReadValue); } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread: Start address of HW_PARAM structure = 0x%lx", - dwReadValue); + "LED Thread: Start address of HW_PARAM structure = 0x%lx", + dwReadValue); /* * Validate if the address read out is within the DSD. @@ -437,8 +447,8 @@ static int ReadLEDInformationFromEEPROM(struct bcm_mini_adapter *Adapter, * To read GPIO section, add GPIO offset further. */ - dwReadValue += - DSD_START_OFFSET; /* = start address of hw param section. */ + dwReadValue += DSD_START_OFFSET; + /* = start address of hw param section. */ dwReadValue += GPIO_SECTION_START_OFFSET; /* = GPIO start offset within HW Param section. */ @@ -472,13 +482,14 @@ static int ReadLEDInformationFromEEPROM(struct bcm_mini_adapter *Adapter, } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "GPIO's bit map correspond to LED :0x%X", Adapter->gpioBitMap); + "GPIO's bit map correspond to LED :0x%X", + Adapter->gpioBitMap); return Status; } static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, - bool *bEnableThread) + bool *bEnableThread) { int Status = STATUS_SUCCESS; /* Array to store GPIO numbers from EEPROM */ @@ -490,8 +501,8 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, memset(GPIO_Array, DISABLE_GPIO_NUM, NUM_OF_LEDS+1); if (!Adapter->pstargetparams || IS_ERR(Adapter->pstargetparams)) { - BCM_DEBUG_PRINT (Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, "Target Params not Avail.\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, + DBG_LVL_ALL, "Target Params not Avail.\n"); return -ENOENT; } @@ -511,7 +522,7 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, * uiFileNameBufferSize */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, - "LED Thread: Config file read successfully\n"); + "LED Thread: Config file read successfully\n"); puCFGData = (PUCHAR) &Adapter->pstargetparams->HostDrvrConfig1; /* @@ -555,7 +566,8 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, * dont launch the LED control thread. */ for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if ((Adapter->LEDInfo.LEDState[uiIndex].LED_Type == DISABLE_GPIO_NUM) || + if ((Adapter->LEDInfo.LEDState[uiIndex].LED_Type == + DISABLE_GPIO_NUM) || (Adapter->LEDInfo.LEDState[uiIndex].LED_Type == 0x7f) || (Adapter->LEDInfo.LEDState[uiIndex].LED_Type == 0)) uiNum_of_LED_Type++; @@ -587,7 +599,7 @@ static VOID LedGpioInit(struct bcm_mini_adapter *Adapter) /* Set all LED GPIO Mode to output mode */ if (rdmalt(Adapter, GPIO_MODE_REGISTER, &uiResetValue, - sizeof(uiResetValue)) < 0) + sizeof(uiResetValue)) < 0) BCM_DEBUG_PRINT (Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, "LED Thread: RDM Failed\n"); for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { @@ -598,16 +610,19 @@ static VOID LedGpioInit(struct bcm_mini_adapter *Adapter) uiIndex); } if (wrmalt(Adapter, GPIO_MODE_REGISTER, &uiResetValue, - sizeof(uiResetValue)) < 0) - BCM_DEBUG_PRINT (Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, "LED Thread: WRM Failed\n"); + sizeof(uiResetValue)) < 0) + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, + DBG_LVL_ALL, "LED Thread: WRM Failed\n"); Adapter->LEDInfo.bIdle_led_off = false; } -static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, UCHAR *GPIO_num_tx, - UCHAR *GPIO_num_rx, UCHAR *uiLedTxIndex, UCHAR *uiLedRxIndex, - enum bcm_led_events currdriverstate) +static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, + UCHAR *GPIO_num_tx, + UCHAR *GPIO_num_rx, + UCHAR *uiLedTxIndex, + UCHAR *uiLedRxIndex, + enum bcm_led_events currdriverstate) { UINT uiIndex = 0; @@ -645,6 +660,7 @@ static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, UCHAR *GPIO_num_t } return STATUS_SUCCESS; } + static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) { UINT uiIndex = 0; @@ -708,7 +724,8 @@ static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) currdriverstate = DRIVER_INIT; /* Adapter->DriverState; */ BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, currdriverstate); + &uiLedIndex, &dummyIndex, + currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) TURN_ON_LED(1 << GPIO_num, uiLedIndex); @@ -722,18 +739,20 @@ static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) */ currdriverstate = FW_DOWNLOAD; BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, currdriverstate); + &uiLedIndex, &dummyIndex, + currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) { timeout = 50; LED_Blink(Adapter, 1 << GPIO_num, uiLedIndex, - timeout, -1, currdriverstate); + timeout, -1, currdriverstate); } break; case FW_DOWNLOAD_DONE: currdriverstate = FW_DOWNLOAD_DONE; BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, currdriverstate); + &uiLedIndex, &dummyIndex, + currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) TURN_ON_LED(1 << GPIO_num, uiLedIndex); break; @@ -746,7 +765,8 @@ static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) case NO_NETWORK_ENTRY: currdriverstate = NO_NETWORK_ENTRY; BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyGPIONum, currdriverstate); + &uiLedIndex, &dummyGPIONum, + currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) TURN_ON_LED(1 << GPIO_num, uiLedIndex); break; @@ -878,8 +898,8 @@ int InitLedSettings(struct bcm_mini_adapter *Adapter) Status = ReadConfigFileStructure(Adapter, &bEnableThread); if (STATUS_SUCCESS != Status) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "LED Thread: FAILED in ReadConfigFileStructure\n"); + DBG_LVL_ALL, + "LED Thread: FAILED in ReadConfigFileStructure\n"); return Status; } @@ -902,11 +922,11 @@ int InitLedSettings(struct bcm_mini_adapter *Adapter) Adapter->LEDInfo.bIdle_led_off = false; Adapter->LEDInfo.led_cntrl_threadid = kthread_run((int (*)(void *)) LEDControlThread, - Adapter, "led_control_thread"); + Adapter, "led_control_thread"); if (IS_ERR(Adapter->LEDInfo.led_cntrl_threadid)) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, - "Not able to spawn Kernel Thread\n"); + DBG_LVL_ALL, + "Not able to spawn Kernel Thread\n"); Adapter->LEDInfo.led_thread_running = BCM_LED_THREAD_DISABLED; return PTR_ERR(Adapter->LEDInfo.led_cntrl_threadid); -- cgit From ce2705c3f412ecbdc21f5ddb061b6b3e4b7a8635 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:18 +0200 Subject: Staging: bcm: led_control.c: Outsourced adapter driver state handling Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 325 ++++++++++++++++++++------------------ 1 file changed, 171 insertions(+), 154 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index fd73dbddd5b1..3b3775b26b47 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -661,6 +661,167 @@ static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, return STATUS_SUCCESS; } +static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, + enum bcm_led_events currdriverstate, + UCHAR GPIO_num, + UCHAR dummyGPIONum, + UCHAR uiLedIndex, + UCHAR dummyIndex, + ulong timeout, + UINT uiResetValue, + UINT uiIndex) +{ + switch (ad->DriverState) { + case DRIVER_INIT: + currdriverstate = DRIVER_INIT; + /* ad->DriverState; */ + BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, + &uiLedIndex, &dummyIndex, + currdriverstate); + + if (GPIO_num != DISABLE_GPIO_NUM) + TURN_ON_LED(1 << GPIO_num, uiLedIndex); + + break; + case FW_DOWNLOAD: + /* + * BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, + * LED_DUMP_INFO, DBG_LVL_ALL, + * "LED Thread: FW_DN_DONE called\n"); + */ + currdriverstate = FW_DOWNLOAD; + BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, + &uiLedIndex, &dummyIndex, + currdriverstate); + + if (GPIO_num != DISABLE_GPIO_NUM) { + timeout = 50; + LED_Blink(ad, 1 << GPIO_num, uiLedIndex, timeout, + -1, currdriverstate); + } + break; + case FW_DOWNLOAD_DONE: + currdriverstate = FW_DOWNLOAD_DONE; + BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, + &uiLedIndex, &dummyIndex, currdriverstate); + if (GPIO_num != DISABLE_GPIO_NUM) + TURN_ON_LED(1 << GPIO_num, uiLedIndex); + break; + + case SHUTDOWN_EXIT: + /* + * no break, continue to NO_NETWORK_ENTRY + * state as well. + */ + case NO_NETWORK_ENTRY: + currdriverstate = NO_NETWORK_ENTRY; + BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, + &uiLedIndex, &dummyGPIONum, currdriverstate); + if (GPIO_num != DISABLE_GPIO_NUM) + TURN_ON_LED(1 << GPIO_num, uiLedIndex); + break; + case NORMAL_OPERATION: + { + UCHAR GPIO_num_tx = DISABLE_GPIO_NUM; + UCHAR GPIO_num_rx = DISABLE_GPIO_NUM; + UCHAR uiLEDTx = 0; + UCHAR uiLEDRx = 0; + currdriverstate = NORMAL_OPERATION; + ad->LEDInfo.bIdle_led_off = false; + + BcmGetGPIOPinInfo(ad, &GPIO_num_tx, &GPIO_num_rx, + &uiLEDTx, &uiLEDRx, currdriverstate); + if ((GPIO_num_tx == DISABLE_GPIO_NUM) && + (GPIO_num_rx == DISABLE_GPIO_NUM)) { + GPIO_num = DISABLE_GPIO_NUM; + } else { + /* + * If single LED is selected, use same + * for both Tx and Rx + */ + if (GPIO_num_tx == DISABLE_GPIO_NUM) { + GPIO_num_tx = GPIO_num_rx; + uiLEDTx = uiLEDRx; + } else if (GPIO_num_rx == DISABLE_GPIO_NUM) { + GPIO_num_rx = GPIO_num_tx; + uiLEDRx = uiLEDTx; + } + /* + * Blink the LED in proportionate + * to Tx and Rx transmissions. + */ + LED_Proportional_Blink(ad, + GPIO_num_tx, uiLEDTx, + GPIO_num_rx, uiLEDRx, + currdriverstate); + } + } + break; + case LOWPOWER_MODE_ENTER: + currdriverstate = LOWPOWER_MODE_ENTER; + if (DEVICE_POWERSAVE_MODE_AS_MANUAL_CLOCK_GATING == + ad->ulPowerSaveMode) { + /* Turn OFF all the LED */ + uiResetValue = 0; + for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { + if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) + TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + } + + } + /* Turn off LED And WAKE-UP for Sendinf IDLE mode ACK */ + ad->LEDInfo.bLedInitDone = false; + ad->LEDInfo.bIdle_led_off = TRUE; + wake_up(&ad->LEDInfo.idleModeSyncEvent); + GPIO_num = DISABLE_GPIO_NUM; + break; + case IDLEMODE_CONTINUE: + currdriverstate = IDLEMODE_CONTINUE; + GPIO_num = DISABLE_GPIO_NUM; + break; + case IDLEMODE_EXIT: + break; + case DRIVER_HALT: + currdriverstate = DRIVER_HALT; + GPIO_num = DISABLE_GPIO_NUM; + for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { + if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != + DISABLE_GPIO_NUM) + TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + } + /* ad->DriverState = DRIVER_INIT; */ + break; + case LED_THREAD_INACTIVE: + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, LED_DUMP_INFO, + DBG_LVL_ALL, "InActivating LED thread..."); + currdriverstate = LED_THREAD_INACTIVE; + ad->LEDInfo.led_thread_running = + BCM_LED_THREAD_RUNNING_INACTIVELY; + ad->LEDInfo.bLedInitDone = false; + /* disable ALL LED */ + for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { + if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != + DISABLE_GPIO_NUM) + TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + } + break; + case LED_THREAD_ACTIVE: + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, LED_DUMP_INFO, + DBG_LVL_ALL, "Activating LED thread again..."); + if (ad->LinkUpStatus == false) + ad->DriverState = NO_NETWORK_ENTRY; + else + ad->DriverState = NORMAL_OPERATION; + + ad->LEDInfo.led_thread_running = + BCM_LED_THREAD_RUNNING_ACTIVELY; + break; + /* return; */ + default: + break; + } +} + static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) { UINT uiIndex = 0; @@ -719,160 +880,16 @@ static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) Adapter->LEDInfo.bLedInitDone = TRUE; } - switch (Adapter->DriverState) { - case DRIVER_INIT: - currdriverstate = DRIVER_INIT; - /* Adapter->DriverState; */ - BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, - currdriverstate); - - if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); - - break; - case FW_DOWNLOAD: - /* - * BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, - * LED_DUMP_INFO, DBG_LVL_ALL, - * "LED Thread: FW_DN_DONE called\n"); - */ - currdriverstate = FW_DOWNLOAD; - BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, - currdriverstate); - - if (GPIO_num != DISABLE_GPIO_NUM) { - timeout = 50; - LED_Blink(Adapter, 1 << GPIO_num, uiLedIndex, - timeout, -1, currdriverstate); - } - break; - case FW_DOWNLOAD_DONE: - currdriverstate = FW_DOWNLOAD_DONE; - BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyIndex, - currdriverstate); - if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); - break; - - case SHUTDOWN_EXIT: - /* - * no break, continue to NO_NETWORK_ENTRY - * state as well. - */ - case NO_NETWORK_ENTRY: - currdriverstate = NO_NETWORK_ENTRY; - BcmGetGPIOPinInfo(Adapter, &GPIO_num, &dummyGPIONum, - &uiLedIndex, &dummyGPIONum, - currdriverstate); - if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); - break; - case NORMAL_OPERATION: - { - UCHAR GPIO_num_tx = DISABLE_GPIO_NUM; - UCHAR GPIO_num_rx = DISABLE_GPIO_NUM; - UCHAR uiLEDTx = 0; - UCHAR uiLEDRx = 0; - currdriverstate = NORMAL_OPERATION; - Adapter->LEDInfo.bIdle_led_off = false; - - BcmGetGPIOPinInfo(Adapter, &GPIO_num_tx, - &GPIO_num_rx, &uiLEDTx, &uiLEDRx, - currdriverstate); - if ((GPIO_num_tx == DISABLE_GPIO_NUM) && - (GPIO_num_rx == - DISABLE_GPIO_NUM)) { - GPIO_num = DISABLE_GPIO_NUM; - } else { - /* - * If single LED is selected, use same - * for both Tx and Rx - */ - if (GPIO_num_tx == DISABLE_GPIO_NUM) { - GPIO_num_tx = GPIO_num_rx; - uiLEDTx = uiLEDRx; - } else if (GPIO_num_rx == - DISABLE_GPIO_NUM) { - GPIO_num_rx = GPIO_num_tx; - uiLEDRx = uiLEDTx; - } - /* - * Blink the LED in proportionate - * to Tx and Rx transmissions. - */ - LED_Proportional_Blink(Adapter, - GPIO_num_tx, uiLEDTx, - GPIO_num_rx, uiLEDRx, - currdriverstate); - } - } - break; - case LOWPOWER_MODE_ENTER: - currdriverstate = LOWPOWER_MODE_ENTER; - if (DEVICE_POWERSAVE_MODE_AS_MANUAL_CLOCK_GATING == - Adapter->ulPowerSaveMode) { - /* Turn OFF all the LED */ - uiResetValue = 0; - for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); - } - - } - /* Turn off LED And WAKE-UP for Sendinf IDLE mode ACK */ - Adapter->LEDInfo.bLedInitDone = false; - Adapter->LEDInfo.bIdle_led_off = TRUE; - wake_up(&Adapter->LEDInfo.idleModeSyncEvent); - GPIO_num = DISABLE_GPIO_NUM; - break; - case IDLEMODE_CONTINUE: - currdriverstate = IDLEMODE_CONTINUE; - GPIO_num = DISABLE_GPIO_NUM; - break; - case IDLEMODE_EXIT: - break; - case DRIVER_HALT: - currdriverstate = DRIVER_HALT; - GPIO_num = DISABLE_GPIO_NUM; - for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num - != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); - } - /* Adapter->DriverState = DRIVER_INIT; */ - break; - case LED_THREAD_INACTIVE: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, "InActivating LED thread..."); - currdriverstate = LED_THREAD_INACTIVE; - Adapter->LEDInfo.led_thread_running = - BCM_LED_THREAD_RUNNING_INACTIVELY; - Adapter->LEDInfo.bLedInitDone = false; - /* disable ALL LED */ - for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num - != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); - } - break; - case LED_THREAD_ACTIVE: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, - DBG_LVL_ALL, "Activating LED thread again..."); - if (Adapter->LinkUpStatus == false) - Adapter->DriverState = NO_NETWORK_ENTRY; - else - Adapter->DriverState = NORMAL_OPERATION; - - Adapter->LEDInfo.led_thread_running = - BCM_LED_THREAD_RUNNING_ACTIVELY; - break; - /* return; */ - default: - break; - } + handle_adapter_driver_state(Adapter, + currdriverstate, + GPIO_num, + dummyGPIONum, + uiLedIndex, + dummyIndex, + timeout, + uiResetValue, + uiIndex + ); } Adapter->LEDInfo.led_thread_running = BCM_LED_THREAD_DISABLED; } -- cgit From a1082a4d5ee83a1f72db9e5b656f570efa432759 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:19 +0200 Subject: Staging: bcm: led_control.{c,h}: Fixed macro This patch fixes the TURN_{ON,OFF}_LED() macros by adding the adapter as parameter. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 39 +++++++++++++++++++++++---------------- drivers/staging/bcm/led_control.h | 16 ++++++++-------- 2 files changed, 31 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 3b3775b26b47..612e61e46752 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -40,7 +40,7 @@ static INT LED_Blink(struct bcm_mini_adapter *Adapter, } while (num_of_time) { if (currdriverstate == Adapter->DriverState) - TURN_ON_LED(GPIO_Num, uiLedIndex); + TURN_ON_LED(Adapter, GPIO_Num, uiLedIndex); /* Wait for timeout after setting on the LED */ Status = wait_event_interruptible_timeout( @@ -55,17 +55,17 @@ static INT LED_Blink(struct bcm_mini_adapter *Adapter, "Led thread got signal to exit..hence exiting"); Adapter->LEDInfo.led_thread_running = BCM_LED_THREAD_DISABLED; - TURN_OFF_LED(GPIO_Num, uiLedIndex); + TURN_OFF_LED(Adapter, GPIO_Num, uiLedIndex); Status = EVENT_SIGNALED; break; } if (Status) { - TURN_OFF_LED(GPIO_Num, uiLedIndex); + TURN_OFF_LED(Adapter, GPIO_Num, uiLedIndex); Status = EVENT_SIGNALED; break; } - TURN_OFF_LED(GPIO_Num, uiLedIndex); + TURN_OFF_LED(Adapter, GPIO_Num, uiLedIndex); Status = wait_event_interruptible_timeout( Adapter->LEDInfo.notify_led_event, currdriverstate != Adapter->DriverState || @@ -223,8 +223,8 @@ static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, } /* Turn off both Tx and Rx LEDs before next second */ - TURN_OFF_LED(1 << GPIO_Num_tx, uiTxLedIndex); - TURN_OFF_LED(1 << GPIO_Num_rx, uiTxLedIndex); + TURN_OFF_LED(Adapter, 1 << GPIO_Num_tx, uiTxLedIndex); + TURN_OFF_LED(Adapter, 1 << GPIO_Num_rx, uiTxLedIndex); /* * Read the Tx & Rx packets transmission after 1 second and @@ -606,8 +606,9 @@ static VOID LedGpioInit(struct bcm_mini_adapter *Adapter) if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) uiResetValue |= (1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num); - TURN_OFF_LED(1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num, - uiIndex); + TURN_OFF_LED(Adapter, + 1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num, + uiIndex); } if (wrmalt(Adapter, GPIO_MODE_REGISTER, &uiResetValue, sizeof(uiResetValue)) < 0) @@ -680,7 +681,7 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); + TURN_ON_LED(ad, 1 << GPIO_num, uiLedIndex); break; case FW_DOWNLOAD: @@ -705,7 +706,7 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, &uiLedIndex, &dummyIndex, currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); + TURN_ON_LED(ad, 1 << GPIO_num, uiLedIndex); break; case SHUTDOWN_EXIT: @@ -718,7 +719,7 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, BcmGetGPIOPinInfo(ad, &GPIO_num, &dummyGPIONum, &uiLedIndex, &dummyGPIONum, currdriverstate); if (GPIO_num != DISABLE_GPIO_NUM) - TURN_ON_LED(1 << GPIO_num, uiLedIndex); + TURN_ON_LED(ad, 1 << GPIO_num, uiLedIndex); break; case NORMAL_OPERATION: { @@ -765,7 +766,9 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, uiResetValue = 0; for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + TURN_OFF_LED(ad, + (1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), + uiIndex); } } @@ -787,7 +790,9 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + TURN_OFF_LED(ad, + (1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), + uiIndex); } /* ad->DriverState = DRIVER_INIT; */ break; @@ -802,7 +807,9 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { if (ad->LEDInfo.LEDState[uiIndex].GPIO_Num != DISABLE_GPIO_NUM) - TURN_OFF_LED((1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), uiIndex); + TURN_OFF_LED(ad, + (1 << ad->LEDInfo.LEDState[uiIndex].GPIO_Num), + uiIndex); } break; case LED_THREAD_ACTIVE: @@ -868,12 +875,12 @@ static VOID LEDControlThread(struct bcm_mini_adapter *Adapter) "Led thread got signal to exit..hence exiting"); Adapter->LEDInfo.led_thread_running = BCM_LED_THREAD_DISABLED; - TURN_OFF_LED(1 << GPIO_num, uiLedIndex); + TURN_OFF_LED(Adapter, 1 << GPIO_num, uiLedIndex); return; /* STATUS_FAILURE; */ } if (GPIO_num != DISABLE_GPIO_NUM) - TURN_OFF_LED(1 << GPIO_num, uiLedIndex); + TURN_OFF_LED(Adapter, 1 << GPIO_num, uiLedIndex); if (Adapter->LEDInfo.bLedInitDone == false) { LedGpioInit(Adapter); diff --git a/drivers/staging/bcm/led_control.h b/drivers/staging/bcm/led_control.h index bae40e22e11b..1b24bf4658af 100644 --- a/drivers/staging/bcm/led_control.h +++ b/drivers/staging/bcm/led_control.h @@ -17,18 +17,18 @@ #define EVENT_SIGNALED 1 #define MAX_FILE_NAME_BUFFER_SIZE 100 -#define TURN_ON_LED(GPIO, index) do { \ +#define TURN_ON_LED(ad, GPIO, index) do { \ unsigned int gpio_val = GPIO; \ - (Adapter->LEDInfo.LEDState[index].BitPolarity == 1) ? \ - wrmaltWithLock(Adapter, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)) : \ - wrmaltWithLock(Adapter, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)); \ + (ad->LEDInfo.LEDState[index].BitPolarity == 1) ? \ + wrmaltWithLock(ad, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)) : \ + wrmaltWithLock(ad, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)); \ } while (0) -#define TURN_OFF_LED(GPIO, index) do { \ +#define TURN_OFF_LED(ad, GPIO, index) do { \ unsigned int gpio_val = GPIO; \ - (Adapter->LEDInfo.LEDState[index].BitPolarity == 1) ? \ - wrmaltWithLock(Adapter, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)) : \ - wrmaltWithLock(Adapter, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)); \ + (ad->LEDInfo.LEDState[index].BitPolarity == 1) ? \ + wrmaltWithLock(ad, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)) : \ + wrmaltWithLock(ad, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)); \ } while (0) enum bcm_led_colors { -- cgit From 7a0304c082e11ce0d2cca6ab74c4cfc952849847 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:20 +0200 Subject: Staging: bcm: led_control.c: Simplified nested if conditions Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 40 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 612e61e46752..f528a455ab8f 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -632,31 +632,29 @@ static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if ((currdriverstate == NORMAL_OPERATION) || - (currdriverstate == IDLEMODE_EXIT) || - (currdriverstate == FW_DOWNLOAD)) { - if (Adapter->LEDInfo.LEDState[uiIndex].LED_Blink_State & - currdriverstate) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num - != DISABLE_GPIO_NUM) { - if (*GPIO_num_tx == DISABLE_GPIO_NUM) { - *GPIO_num_tx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; - *uiLedTxIndex = uiIndex; - } else { - *GPIO_num_rx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; - *uiLedRxIndex = uiIndex; - } - } - } - } else { - if (Adapter->LEDInfo.LEDState[uiIndex].LED_On_State - & currdriverstate) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num - != DISABLE_GPIO_NUM) { + if (((currdriverstate == NORMAL_OPERATION) || + (currdriverstate == IDLEMODE_EXIT) || + (currdriverstate == FW_DOWNLOAD)) && + (Adapter->LEDInfo.LEDState[uiIndex].LED_Blink_State & + currdriverstate)) { + if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num + != DISABLE_GPIO_NUM) { + if (*GPIO_num_tx == DISABLE_GPIO_NUM) { *GPIO_num_tx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; *uiLedTxIndex = uiIndex; + } else { + *GPIO_num_rx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; + *uiLedRxIndex = uiIndex; } } + } else { + if ((Adapter->LEDInfo.LEDState[uiIndex].LED_On_State & + currdriverstate) && + (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num != + DISABLE_GPIO_NUM)) { + *GPIO_num_tx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; + *uiLedTxIndex = uiIndex; + } } } return STATUS_SUCCESS; -- cgit From e4e9d83e63fd07e153c01305ec23782972371b31 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:21 +0200 Subject: Staging: bcm: led_control.c: Replaced member accessing This patch replaces member accessing with a variable in BcmGetGPIOPinInfo(). Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index f528a455ab8f..085493a7b291 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -626,33 +626,31 @@ static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, enum bcm_led_events currdriverstate) { UINT uiIndex = 0; + struct bcm_led_state_info *led_state_info; *GPIO_num_tx = DISABLE_GPIO_NUM; *GPIO_num_rx = DISABLE_GPIO_NUM; for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { + led_state_info = &Adapter->LEDInfo.LEDState[uiIndex]; if (((currdriverstate == NORMAL_OPERATION) || (currdriverstate == IDLEMODE_EXIT) || (currdriverstate == FW_DOWNLOAD)) && - (Adapter->LEDInfo.LEDState[uiIndex].LED_Blink_State & - currdriverstate)) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num - != DISABLE_GPIO_NUM) { + (led_state_info->LED_Blink_State & currdriverstate)) { + if (led_state_info->GPIO_Num != DISABLE_GPIO_NUM) { if (*GPIO_num_tx == DISABLE_GPIO_NUM) { - *GPIO_num_tx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; + *GPIO_num_tx = led_state_info->GPIO_Num; *uiLedTxIndex = uiIndex; } else { - *GPIO_num_rx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; + *GPIO_num_rx = led_state_info->GPIO_Num; *uiLedRxIndex = uiIndex; } } } else { - if ((Adapter->LEDInfo.LEDState[uiIndex].LED_On_State & - currdriverstate) && - (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num != - DISABLE_GPIO_NUM)) { - *GPIO_num_tx = Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num; + if ((led_state_info->LED_On_State & currdriverstate) && + (led_state_info->GPIO_Num != DISABLE_GPIO_NUM)) { + *GPIO_num_tx = led_state_info->GPIO_Num; *uiLedTxIndex = uiIndex; } } -- cgit From 4fb9ab4ec9c6fd8a1c823a31a9e9d21a13f272a5 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:22 +0200 Subject: Staging: bcm: led_control.c: Outsourced code chunk Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 159 ++++++++++++++++++++++---------------- 1 file changed, 93 insertions(+), 66 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 085493a7b291..5060badfc3a6 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -97,7 +97,89 @@ static INT ScaleRateofTransfer(ULONG rate) return MAX_NUM_OF_BLINKS; } +static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, + INT *num_of_time, + INT *num_of_time_tx, + INT *num_of_time_rx, + UCHAR GPIO_Num_tx, + UCHAR uiTxLedIndex, + UCHAR GPIO_Num_rx, + UCHAR uiRxLedIndex, + enum bcm_led_events currdriverstate, + ulong *timeout) +{ + bool bBlinkBothLED = TRUE; + + /* + * Blink Tx and Rx LED when both Tx and Rx is + * in normal bandwidth + */ + if (bBlinkBothLED) { + /* + * Assign minimum number of blinks of + * either Tx or Rx. + */ + if (*num_of_time_tx > *num_of_time_rx) + *num_of_time = *num_of_time_rx; + else + *num_of_time = *num_of_time_tx; + if (*num_of_time > 0) { + /* Blink both Tx and Rx LEDs */ + if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + uiTxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + + if (LED_Blink(Adapter, 1 << GPIO_Num_rx, + uiRxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + + } + + if (*num_of_time == *num_of_time_tx) { + /* Blink pending rate of Rx */ + if (LED_Blink(Adapter, (1 << GPIO_Num_rx), + uiRxLedIndex, *timeout, + *num_of_time_rx - *num_of_time, + currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + + *num_of_time = *num_of_time_rx; + } else { + /* Blink pending rate of Tx */ + if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + uiTxLedIndex, *timeout, + *num_of_time_tx - *num_of_time, + currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + + *num_of_time = *num_of_time_tx; + } + } else { + if (*num_of_time == *num_of_time_tx) { + /* Blink pending rate of Rx */ + if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + uiTxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + } else { + /* Blink pending rate of Tx */ + if (LED_Blink(Adapter, 1 << GPIO_Num_rx, + uiRxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + } + } + return 0; +} static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, UCHAR GPIO_Num_tx, @@ -115,7 +197,6 @@ static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, int Status = STATUS_SUCCESS; INT num_of_time = 0, num_of_time_tx = 0, num_of_time_rx = 0; UINT remDelay = 0; - bool bBlinkBothLED = TRUE; /* UINT GPIO_num = DISABLE_GPIO_NUM; */ ulong timeout = 0; @@ -129,73 +210,19 @@ static INT LED_Proportional_Blink(struct bcm_mini_adapter *Adapter, while ((Adapter->device_removed == false)) { timeout = 50; - /* - * Blink Tx and Rx LED when both Tx and Rx is - * in normal bandwidth - */ - if (bBlinkBothLED) { - /* - * Assign minimum number of blinks of - * either Tx or Rx. - */ - if (num_of_time_tx > num_of_time_rx) - num_of_time = num_of_time_rx; - else - num_of_time = num_of_time_tx; - if (num_of_time > 0) { - /* Blink both Tx and Rx LEDs */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, - uiTxLedIndex, timeout, - num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - - if (LED_Blink(Adapter, 1 << GPIO_Num_rx, - uiRxLedIndex, timeout, - num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - - } - if (num_of_time == num_of_time_tx) { - /* Blink pending rate of Rx */ - if (LED_Blink(Adapter, (1 << GPIO_Num_rx), - uiRxLedIndex, timeout, - num_of_time_rx-num_of_time, - currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; + if (EVENT_SIGNALED == blink_in_normal_bandwidth(Adapter, + &num_of_time, + &num_of_time_tx, + &num_of_time_rx, + GPIO_Num_tx, + uiTxLedIndex, + GPIO_Num_rx, + uiRxLedIndex, + currdriverstate, + &timeout)) + return EVENT_SIGNALED; - num_of_time = num_of_time_rx; - } else { - /* Blink pending rate of Tx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, - uiTxLedIndex, timeout, - num_of_time_tx-num_of_time, - currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - - num_of_time = num_of_time_tx; - } - } else { - if (num_of_time == num_of_time_tx) { - /* Blink pending rate of Rx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, - uiTxLedIndex, timeout, - num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - } else { - /* Blink pending rate of Tx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_rx, - uiRxLedIndex, timeout, - num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - } - } /* * If Tx/Rx rate is less than maximum blinks per second, -- cgit From 60654a841755e60d45cf0d7c1d52c80ac20e8e08 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:23 +0200 Subject: Staging: bcm: led_control.c: Refactored variable name Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 5060badfc3a6..9808f536d6fb 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -97,7 +97,7 @@ static INT ScaleRateofTransfer(ULONG rate) return MAX_NUM_OF_BLINKS; } -static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, +static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, INT *num_of_time, INT *num_of_time_tx, INT *num_of_time_rx, @@ -125,13 +125,13 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, *num_of_time = *num_of_time_tx; if (*num_of_time > 0) { /* Blink both Tx and Rx LEDs */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, *num_of_time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; - if (LED_Blink(Adapter, 1 << GPIO_Num_rx, + if (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, *num_of_time, currdriverstate) == EVENT_SIGNALED) @@ -141,7 +141,7 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, if (*num_of_time == *num_of_time_tx) { /* Blink pending rate of Rx */ - if (LED_Blink(Adapter, (1 << GPIO_Num_rx), + if (LED_Blink(ad, (1 << GPIO_Num_rx), uiRxLedIndex, *timeout, *num_of_time_rx - *num_of_time, currdriverstate) @@ -151,7 +151,7 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, *num_of_time = *num_of_time_rx; } else { /* Blink pending rate of Tx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, *num_of_time_tx - *num_of_time, currdriverstate) @@ -163,14 +163,14 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *Adapter, } else { if (*num_of_time == *num_of_time_tx) { /* Blink pending rate of Rx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_tx, + if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, *num_of_time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; } else { /* Blink pending rate of Tx */ - if (LED_Blink(Adapter, 1 << GPIO_Num_rx, + if (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, *num_of_time, currdriverstate) == EVENT_SIGNALED) -- cgit From ea20548a829eb0bfbca2b8743f75f67bc3be4b1c Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:24 +0200 Subject: Staging: bcm: led_control.c: Removed dead code This patch removes the never-entered else-block inside blink_in_normal_bandwidth(). The condition of the preceding if statement is always true. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 98 +++++++++++++++------------------------ 1 file changed, 37 insertions(+), 61 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 9808f536d6fb..4cf4212dd507 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -108,74 +108,50 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, enum bcm_led_events currdriverstate, ulong *timeout) { - bool bBlinkBothLED = TRUE; - /* - * Blink Tx and Rx LED when both Tx and Rx is - * in normal bandwidth + * Assign minimum number of blinks of + * either Tx or Rx. */ - if (bBlinkBothLED) { - /* - * Assign minimum number of blinks of - * either Tx or Rx. - */ - if (*num_of_time_tx > *num_of_time_rx) - *num_of_time = *num_of_time_rx; - else - *num_of_time = *num_of_time_tx; - if (*num_of_time > 0) { - /* Blink both Tx and Rx LEDs */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, - uiTxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - - if (LED_Blink(ad, 1 << GPIO_Num_rx, - uiRxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; + if (*num_of_time_tx > *num_of_time_rx) + *num_of_time = *num_of_time_rx; + else + *num_of_time = *num_of_time_tx; + if (*num_of_time > 0) { + /* Blink both Tx and Rx LEDs */ + if (LED_Blink(ad, 1 << GPIO_Num_tx, + uiTxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; - } + if (LED_Blink(ad, 1 << GPIO_Num_rx, + uiRxLedIndex, *timeout, + *num_of_time, currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; - if (*num_of_time == *num_of_time_tx) { - /* Blink pending rate of Rx */ - if (LED_Blink(ad, (1 << GPIO_Num_rx), - uiRxLedIndex, *timeout, - *num_of_time_rx - *num_of_time, - currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; + } - *num_of_time = *num_of_time_rx; - } else { - /* Blink pending rate of Tx */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, - uiTxLedIndex, *timeout, - *num_of_time_tx - *num_of_time, - currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; + if (*num_of_time == *num_of_time_tx) { + /* Blink pending rate of Rx */ + if (LED_Blink(ad, (1 << GPIO_Num_rx), + uiRxLedIndex, *timeout, + *num_of_time_rx - *num_of_time, + currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; - *num_of_time = *num_of_time_tx; - } + *num_of_time = *num_of_time_rx; } else { - if (*num_of_time == *num_of_time_tx) { - /* Blink pending rate of Rx */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, - uiTxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - } else { - /* Blink pending rate of Tx */ - if (LED_Blink(ad, 1 << GPIO_Num_rx, - uiRxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) - return EVENT_SIGNALED; - } + /* Blink pending rate of Tx */ + if (LED_Blink(ad, 1 << GPIO_Num_tx, + uiTxLedIndex, *timeout, + *num_of_time_tx - *num_of_time, + currdriverstate) + == EVENT_SIGNALED) + return EVENT_SIGNALED; + + *num_of_time = *num_of_time_tx; } return 0; -- cgit From 60e66d874a3b18862dae3c15e6281240b678bc8f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:25 +0200 Subject: Staging: bcm: led_control.c: Refactored line lengths Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 4cf4212dd507..c0509ae16d4f 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -118,37 +118,29 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, *num_of_time = *num_of_time_tx; if (*num_of_time > 0) { /* Blink both Tx and Rx LEDs */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, - uiTxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) + if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, + *num_of_time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; - if (LED_Blink(ad, 1 << GPIO_Num_rx, - uiRxLedIndex, *timeout, - *num_of_time, currdriverstate) - == EVENT_SIGNALED) + if (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, + *num_of_time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; } if (*num_of_time == *num_of_time_tx) { /* Blink pending rate of Rx */ - if (LED_Blink(ad, (1 << GPIO_Num_rx), - uiRxLedIndex, *timeout, - *num_of_time_rx - *num_of_time, - currdriverstate) - == EVENT_SIGNALED) + if (LED_Blink(ad, (1 << GPIO_Num_rx), uiRxLedIndex, *timeout, + *num_of_time_rx - *num_of_time, + currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; *num_of_time = *num_of_time_rx; } else { /* Blink pending rate of Tx */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, - uiTxLedIndex, *timeout, - *num_of_time_tx - *num_of_time, - currdriverstate) - == EVENT_SIGNALED) + if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, + *num_of_time_tx - *num_of_time, + currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; *num_of_time = *num_of_time_tx; -- cgit From 9c805bd9e45a6b114cbad49f1d4f666604ab6e96 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:26 +0200 Subject: Staging: bcm: led_control.c: More variable names refactored Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index c0509ae16d4f..a387c6a27b83 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -98,9 +98,9 @@ static INT ScaleRateofTransfer(ULONG rate) } static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, - INT *num_of_time, - INT *num_of_time_tx, - INT *num_of_time_rx, + INT *time, + INT *time_tx, + INT *time_rx, UCHAR GPIO_Num_tx, UCHAR uiTxLedIndex, UCHAR GPIO_Num_rx, @@ -112,38 +112,38 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, * Assign minimum number of blinks of * either Tx or Rx. */ - if (*num_of_time_tx > *num_of_time_rx) - *num_of_time = *num_of_time_rx; + if (*time_tx > *time_rx) + *time = *time_rx; else - *num_of_time = *num_of_time_tx; - if (*num_of_time > 0) { + *time = *time_tx; + if (*time > 0) { /* Blink both Tx and Rx LEDs */ if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, - *num_of_time, currdriverstate) == EVENT_SIGNALED) + *time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; if (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, - *num_of_time, currdriverstate) == EVENT_SIGNALED) + *time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; } - if (*num_of_time == *num_of_time_tx) { + if (*time == *time_tx) { /* Blink pending rate of Rx */ if (LED_Blink(ad, (1 << GPIO_Num_rx), uiRxLedIndex, *timeout, - *num_of_time_rx - *num_of_time, + *time_rx - *time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; - *num_of_time = *num_of_time_rx; + *time = *time_rx; } else { /* Blink pending rate of Tx */ if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, - *num_of_time_tx - *num_of_time, + *time_tx - *time, currdriverstate) == EVENT_SIGNALED) return EVENT_SIGNALED; - *num_of_time = *num_of_time_tx; + *time = *time_tx; } return 0; -- cgit From 8955051192efcd2cb3903997387743a52de4472a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:27 +0200 Subject: Staging: bcm: led_control.c: Replaced time selecting ifelse with ternary operator Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index a387c6a27b83..8a59115c24f4 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -112,10 +112,8 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, * Assign minimum number of blinks of * either Tx or Rx. */ - if (*time_tx > *time_rx) - *time = *time_rx; - else - *time = *time_tx; + *time = (*time_tx > *time_rx ? *time_rx : *time_tx); + if (*time > 0) { /* Blink both Tx and Rx LEDs */ if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, -- cgit From a143aa2ae0598e80bee2900c5d2800850558dc1f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:28 +0200 Subject: Staging: bcm: led_control.c: Replaced doubled if-check by logical OR in one check Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 8a59115c24f4..ae49a5976c83 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -116,14 +116,11 @@ static INT blink_in_normal_bandwidth(struct bcm_mini_adapter *ad, if (*time > 0) { /* Blink both Tx and Rx LEDs */ - if (LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, - *time, currdriverstate) == EVENT_SIGNALED) - return EVENT_SIGNALED; - - if (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, - *time, currdriverstate) == EVENT_SIGNALED) + if ((LED_Blink(ad, 1 << GPIO_Num_tx, uiTxLedIndex, *timeout, + *time, currdriverstate) == EVENT_SIGNALED) || + (LED_Blink(ad, 1 << GPIO_Num_rx, uiRxLedIndex, *timeout, + *time, currdriverstate) == EVENT_SIGNALED)) return EVENT_SIGNALED; - } if (*time == *time_tx) { -- cgit From 76a60d574f51fbee6ce759b32cba51a20f5cd93a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:29 +0200 Subject: Staging: bcm: led_control.c: Replaced member accessing by variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index ae49a5976c83..4077972c9383 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -488,6 +488,7 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, UINT uiNum_of_LED_Type = 0; PUCHAR puCFGData = NULL; UCHAR bData = 0; + struct bcm_led_state_info *curr_led_state; memset(GPIO_Array, DISABLE_GPIO_NUM, NUM_OF_LEDS+1); if (!Adapter->pstargetparams || IS_ERR(Adapter->pstargetparams)) { @@ -523,31 +524,30 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { bData = *puCFGData; + curr_led_state = &Adapter->LEDInfo.LEDState[uiIndex]; /* * Check Bit 8 for polarity. If it is set, * polarity is reverse polarity */ if (bData & 0x80) { - Adapter->LEDInfo.LEDState[uiIndex].BitPolarity = 0; + curr_led_state->BitPolarity = 0; /* unset the bit 8 */ bData = bData & 0x7f; } - Adapter->LEDInfo.LEDState[uiIndex].LED_Type = bData; + curr_led_state->LED_Type = bData; if (bData <= NUM_OF_LEDS) - Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num = - GPIO_Array[bData]; + curr_led_state->GPIO_Num = GPIO_Array[bData]; else - Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num = - DISABLE_GPIO_NUM; + curr_led_state->GPIO_Num = DISABLE_GPIO_NUM; puCFGData++; bData = *puCFGData; - Adapter->LEDInfo.LEDState[uiIndex].LED_On_State = bData; + curr_led_state->LED_On_State = bData; puCFGData++; bData = *puCFGData; - Adapter->LEDInfo.LEDState[uiIndex].LED_Blink_State = bData; + curr_led_state->LED_Blink_State = bData; puCFGData++; } @@ -556,10 +556,11 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, * dont launch the LED control thread. */ for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if ((Adapter->LEDInfo.LEDState[uiIndex].LED_Type == - DISABLE_GPIO_NUM) || - (Adapter->LEDInfo.LEDState[uiIndex].LED_Type == 0x7f) || - (Adapter->LEDInfo.LEDState[uiIndex].LED_Type == 0)) + curr_led_state = &Adapter->LEDInfo.LEDState[uiIndex]; + + if ((curr_led_state->LED_Type == DISABLE_GPIO_NUM) || + (curr_led_state->LED_Type == 0x7f) || + (curr_led_state->LED_Type == 0)) uiNum_of_LED_Type++; } if (uiNum_of_LED_Type >= NUM_OF_LEDS) -- cgit From 2d2ea21655aa69c9b7a6da76888f899b20ce9f66 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:30 +0200 Subject: Staging: bcm: led_control.c: Replaced member accessing by variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 4077972c9383..8e6bb6b64e61 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -587,6 +587,7 @@ static VOID LedGpioInit(struct bcm_mini_adapter *Adapter) { UINT uiResetValue = 0; UINT uiIndex = 0; + struct bcm_led_state_info *curr_led_state; /* Set all LED GPIO Mode to output mode */ if (rdmalt(Adapter, GPIO_MODE_REGISTER, &uiResetValue, @@ -594,12 +595,13 @@ static VOID LedGpioInit(struct bcm_mini_adapter *Adapter) BCM_DEBUG_PRINT (Adapter, DBG_TYPE_OTHERS, LED_DUMP_INFO, DBG_LVL_ALL, "LED Thread: RDM Failed\n"); for (uiIndex = 0; uiIndex < NUM_OF_LEDS; uiIndex++) { - if (Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num != - DISABLE_GPIO_NUM) - uiResetValue |= (1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num); - TURN_OFF_LED(Adapter, - 1 << Adapter->LEDInfo.LEDState[uiIndex].GPIO_Num, - uiIndex); + curr_led_state = &Adapter->LEDInfo.LEDState[uiIndex]; + + if (curr_led_state->GPIO_Num != DISABLE_GPIO_NUM) + uiResetValue |= (1 << curr_led_state->GPIO_Num); + + TURN_OFF_LED(Adapter, 1 << curr_led_state->GPIO_Num, uiIndex); + } if (wrmalt(Adapter, GPIO_MODE_REGISTER, &uiResetValue, sizeof(uiResetValue)) < 0) -- cgit From f4367dfe0c0056b1efef1758f5a11cadec66013e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:18:31 +0200 Subject: Staging: bcm: led_control.c: Replaced nested ifs with logical AND concatenation Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/led_control.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 8e6bb6b64e61..835367780a8a 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -630,15 +630,14 @@ static INT BcmGetGPIOPinInfo(struct bcm_mini_adapter *Adapter, if (((currdriverstate == NORMAL_OPERATION) || (currdriverstate == IDLEMODE_EXIT) || (currdriverstate == FW_DOWNLOAD)) && - (led_state_info->LED_Blink_State & currdriverstate)) { - if (led_state_info->GPIO_Num != DISABLE_GPIO_NUM) { - if (*GPIO_num_tx == DISABLE_GPIO_NUM) { - *GPIO_num_tx = led_state_info->GPIO_Num; - *uiLedTxIndex = uiIndex; - } else { - *GPIO_num_rx = led_state_info->GPIO_Num; - *uiLedRxIndex = uiIndex; - } + (led_state_info->LED_Blink_State & currdriverstate) && + (led_state_info->GPIO_Num != DISABLE_GPIO_NUM)) { + if (*GPIO_num_tx == DISABLE_GPIO_NUM) { + *GPIO_num_tx = led_state_info->GPIO_Num; + *uiLedTxIndex = uiIndex; + } else { + *GPIO_num_rx = led_state_info->GPIO_Num; + *uiLedRxIndex = uiIndex; } } else { if ((led_state_info->LED_On_State & currdriverstate) && -- cgit From d3842d5633508da302597a8608b15a16c5991261 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:10 +0200 Subject: Staging: bcm: Shortened some lines Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index 7c04c73e3bc8..d61a688d28aa 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -70,7 +70,8 @@ static void InterfaceAdapterFree(struct bcm_interface_adapter *psIntfAdapter) AdapterFree(psIntfAdapter->psAdapter); } -static void ConfigureEndPointTypesThroughEEPROM(struct bcm_mini_adapter *Adapter) +static void ConfigureEndPointTypesThroughEEPROM( + struct bcm_mini_adapter *Adapter) { u32 ulReg; int bytes; @@ -147,7 +148,8 @@ static void ConfigureEndPointTypesThroughEEPROM(struct bcm_mini_adapter *Adapter BeceemEEPROMBulkWrite(Adapter, (PUCHAR)&ulReg, 0x1C2, 4, TRUE); } -static int usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id) +static int usbbcm_device_probe(struct usb_interface *intf, + const struct usb_device_id *id) { struct usb_device *udev = interface_to_usbdev(intf); int retval; -- cgit From 3b068e54695c56882d0796c757127325b61ff61c Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:11 +0200 Subject: Staging: bcm: replaced member accessing by variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index d61a688d28aa..dd7b4a59d366 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -28,28 +28,28 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *Adapter); static void InterfaceAdapterFree(struct bcm_interface_adapter *psIntfAdapter) { int i = 0; + struct bcm_mini_adapter *ps_ad = psIntfAdapter->psAdapter; /* Wake up the wait_queue... */ - if (psIntfAdapter->psAdapter->LEDInfo.led_thread_running & + if (ps_ad->LEDInfo.led_thread_running & BCM_LED_THREAD_RUNNING_ACTIVELY) { - psIntfAdapter->psAdapter->DriverState = DRIVER_HALT; - wake_up(&psIntfAdapter->psAdapter->LEDInfo.notify_led_event); + ps_ad->DriverState = DRIVER_HALT; + wake_up(&ps_ad->LEDInfo.notify_led_event); } - reset_card_proc(psIntfAdapter->psAdapter); + reset_card_proc(ps_ad); /* * worst case time taken by the RDM/WRM will be 5 sec. will check after * every 100 ms to accertain the device is not being accessed. After * this No RDM/WRM should be made. */ - while (psIntfAdapter->psAdapter->DeviceAccess) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + while (ps_ad->DeviceAccess) { + BCM_DEBUG_PRINT(ps_ad, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Device is being accessed.\n"); msleep(100); } /* Free interrupt URB */ - /* psIntfAdapter->psAdapter->device_removed = TRUE; */ + /* ps_ad->device_removed = TRUE; */ usb_free_urb(psIntfAdapter->psInterruptUrb); /* Free transmit URBs */ @@ -67,7 +67,7 @@ static void InterfaceAdapterFree(struct bcm_interface_adapter *psIntfAdapter) psIntfAdapter->asUsbRcb[i].urb = NULL; } } - AdapterFree(psIntfAdapter->psAdapter); + AdapterFree(ps_ad); } static void ConfigureEndPointTypesThroughEEPROM( -- cgit From 9e58842f7654653b973007ee5894a5aa4b98f3d3 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:12 +0200 Subject: Staging: bcm: Replaced member accessing with variable in device_run() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index dd7b4a59d366..e1a3e6d55555 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -340,16 +340,16 @@ static int device_run(struct bcm_interface_adapter *psIntfAdapter) { int value = 0; UINT status = STATUS_SUCCESS; + struct bcm_mini_adapter *psAd = psIntfAdapter->psAdapter; - status = InitCardAndDownloadFirmware(psIntfAdapter->psAdapter); + status = InitCardAndDownloadFirmware(psAd); if (status != STATUS_SUCCESS) { pr_err(DRV_NAME "InitCardAndDownloadFirmware failed.\n"); return status; } - if (psIntfAdapter->psAdapter->fw_download_done) { + if (psAd->fw_download_done) { if (StartInterruptUrb(psIntfAdapter)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, - DBG_TYPE_INITEXIT, DRV_ENTRY, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Cannot send interrupt in URB\n"); } @@ -358,17 +358,15 @@ static int device_run(struct bcm_interface_adapter *psIntfAdapter) * now register the cntrl interface. after downloading the f/w * waiting for 5 sec to get the mailbox interrupt. */ - psIntfAdapter->psAdapter->waiting_to_fw_download_done = false; - value = wait_event_timeout( - psIntfAdapter->psAdapter->ioctl_fw_dnld_wait_queue, - psIntfAdapter->psAdapter->waiting_to_fw_download_done, - 5 * HZ); + psAd->waiting_to_fw_download_done = false; + value = wait_event_timeout(psAd->ioctl_fw_dnld_wait_queue, + psAd->waiting_to_fw_download_done, + 5 * HZ); if (value == 0) pr_err(DRV_NAME ": Timeout waiting for mailbox interrupt.\n"); - if (register_control_device_interface( - psIntfAdapter->psAdapter) < 0) { + if (register_control_device_interface(psAd) < 0) { pr_err(DRV_NAME ": Register Control Device failed.\n"); return -EIO; } -- cgit From a02b67b6e7888e94403689f112cbf172f91fec6e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:13 +0200 Subject: Staging: bcm: Replaced member accessing with variable in InterfaceAdapterInit() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 53 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index e1a3e6d55555..2f540d6cd305 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -385,6 +385,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) bool bBcm16 = false; UINT uiData = 0; int bytes; + struct bcm_mini_adapter *psAd = psIntfAdapter->psAdapter; /* Store the usb dev into interface adapter */ psIntfAdapter->udev = @@ -392,31 +393,31 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) psIntfAdapter->bHighSpeedDevice = (psIntfAdapter->udev->speed == USB_SPEED_HIGH); - psIntfAdapter->psAdapter->interface_rdm = BcmRDM; - psIntfAdapter->psAdapter->interface_wrm = BcmWRM; + psAd->interface_rdm = BcmRDM; + psAd->interface_wrm = BcmWRM; - bytes = rdmalt(psIntfAdapter->psAdapter, CHIP_ID_REG, - (u32 *) &(psIntfAdapter->psAdapter->chip_id), + bytes = rdmalt(psAd, CHIP_ID_REG, + (u32 *) &(psAd->chip_id), sizeof(u32)); if (bytes < 0) { retval = bytes; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_PRINTK, 0, 0, "CHIP ID Read Failed\n"); return retval; } - if (0xbece3200 == (psIntfAdapter->psAdapter->chip_id & ~(0xF0))) - psIntfAdapter->psAdapter->chip_id &= ~0xF0; + if (0xbece3200 == (psAd->chip_id & ~(0xF0))) + psAd->chip_id &= ~0xF0; dev_info(&psIntfAdapter->udev->dev, "RDM Chip ID 0x%lx\n", - psIntfAdapter->psAdapter->chip_id); + psAd->chip_id); iface_desc = psIntfAdapter->interface->cur_altsetting; - if (psIntfAdapter->psAdapter->chip_id == T3B) { + if (psAd->chip_id == T3B) { /* T3B device will have EEPROM, check if EEPROM is proper and * BCM16 can be done or not. */ - BeceemEEPROMBulkRead(psIntfAdapter->psAdapter, &uiData, 0x0, 4); + BeceemEEPROMBulkRead(psAd, &uiData, 0x0, 4); if (uiData == BECM) bBcm16 = TRUE; @@ -431,14 +432,14 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) retval = usb_set_interface(psIntfAdapter->udev, DEFAULT_SETTING_0, ALTERNATE_SETTING_1); - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "BCM16 is applicable on this dongle\n"); if (retval || !psIntfAdapter->bHighSpeedDevice) { usedIntOutForBulkTransfer = EP2; endpoint = &iface_desc->endpoint[EP2].desc; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Interface altsetting failed or modem is configured to Full Speed, hence will work on default setting 0\n"); @@ -453,13 +454,13 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) !usb_endpoint_is_int_out(endpoint)) || (!psIntfAdapter->bHighSpeedDevice && !usb_endpoint_is_bulk_out(endpoint))) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Configuring the EEPROM\n"); /* change the EP2, EP4 to INT OUT end point */ ConfigureEndPointTypesThroughEEPROM( - psIntfAdapter->psAdapter); + psAd); /* * It resets the device and if any thing @@ -470,7 +471,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) retval = usb_reset_device( psIntfAdapter->udev); if (retval) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, @@ -483,30 +484,30 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) usb_endpoint_is_bulk_out(endpoint)) { /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ UINT _uiData = ntohl(EP2_CFG_INT); - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Reverting Bulk to INT as it is in Full Speed mode.\n"); BeceemEEPROMBulkWrite( - psIntfAdapter->psAdapter, + psAd, (PUCHAR) & _uiData, 0x136, 4, TRUE); } } else { usedIntOutForBulkTransfer = EP4; endpoint = &iface_desc->endpoint[EP4].desc; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Choosing AltSetting as a default setting.\n"); if (!usb_endpoint_is_int_out(endpoint)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Dongle does not have BCM16 Fix.\n"); /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ ConfigureEndPointTypesThroughEEPROM( - psIntfAdapter->psAdapter); + psAd); /* * It resets the device and if any thing @@ -517,7 +518,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) retval = usb_reset_device( psIntfAdapter->udev); if (retval) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, @@ -572,7 +573,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) if (!psIntfAdapter->sIntrOut.int_out_endpointAddr && usb_endpoint_is_int_out(endpoint)) { if (!psIntfAdapter->sBulkOut.bulk_out_endpointAddr && - (psIntfAdapter->psAdapter->chip_id == T3B) && + (psAd->chip_id == T3B) && (value == usedIntOutForBulkTransfer)) { /* use first intout end point as a bulk out end point */ buffer_size = @@ -606,15 +607,15 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) usb_set_intfdata(psIntfAdapter->interface, psIntfAdapter); - psIntfAdapter->psAdapter->bcm_file_download = InterfaceFileDownload; - psIntfAdapter->psAdapter->bcm_file_readback_from_chip = + psAd->bcm_file_download = InterfaceFileDownload; + psAd->bcm_file_readback_from_chip = InterfaceFileReadbackFromChip; - psIntfAdapter->psAdapter->interface_transmit = InterfaceTransmitPacket; + psAd->interface_transmit = InterfaceTransmitPacket; retval = CreateInterruptUrb(psIntfAdapter); if (retval) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_PRINTK, 0, 0, "Cannot create interrupt urb\n"); return retval; } -- cgit From b4ad0f04907f40a873c49e86afb034cafab16d5d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:14 +0200 Subject: Staging: bcm: Merged some lines which got shorter by the latest patch Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 43 +++++++++++++++---------------------- 1 file changed, 17 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index 2f540d6cd305..bda33c8af800 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -396,9 +396,8 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) psAd->interface_rdm = BcmRDM; psAd->interface_wrm = BcmWRM; - bytes = rdmalt(psAd, CHIP_ID_REG, - (u32 *) &(psAd->chip_id), - sizeof(u32)); + bytes = rdmalt(psAd, CHIP_ID_REG, (u32 *) &(psAd->chip_id), + sizeof(u32)); if (bytes < 0) { retval = bytes; BCM_DEBUG_PRINT(psAd, DBG_TYPE_PRINTK, 0, 0, @@ -410,7 +409,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) psAd->chip_id &= ~0xF0; dev_info(&psIntfAdapter->udev->dev, "RDM Chip ID 0x%lx\n", - psAd->chip_id); + psAd->chip_id); iface_desc = psIntfAdapter->interface->cur_altsetting; @@ -422,26 +421,24 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) bBcm16 = TRUE; dev_info(&psIntfAdapter->udev->dev, - "number of alternate setting %d\n", - psIntfAdapter->interface->num_altsetting); + "number of alternate setting %d\n", + psIntfAdapter->interface->num_altsetting); if (bBcm16 == TRUE) { /* selecting alternate setting one as a default setting * for High Speed modem. */ if (psIntfAdapter->bHighSpeedDevice) retval = usb_set_interface(psIntfAdapter->udev, - DEFAULT_SETTING_0, - ALTERNATE_SETTING_1); - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, DRV_ENTRY, + DEFAULT_SETTING_0, + ALTERNATE_SETTING_1); + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "BCM16 is applicable on this dongle\n"); if (retval || !psIntfAdapter->bHighSpeedDevice) { usedIntOutForBulkTransfer = EP2; endpoint = &iface_desc->endpoint[EP2].desc; - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, DRV_ENTRY, - DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, "Interface altsetting failed or modem is configured to Full Speed, hence will work on default setting 0\n"); /* * If Modem is high speed device EP2 should be @@ -454,8 +451,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) !usb_endpoint_is_int_out(endpoint)) || (!psIntfAdapter->bHighSpeedDevice && !usb_endpoint_is_bulk_out(endpoint))) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Configuring the EEPROM\n"); /* change the EP2, EP4 to INT OUT end point */ @@ -484,25 +480,21 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) usb_endpoint_is_bulk_out(endpoint)) { /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ UINT _uiData = ntohl(EP2_CFG_INT); - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Reverting Bulk to INT as it is in Full Speed mode.\n"); - BeceemEEPROMBulkWrite( - psAd, + BeceemEEPROMBulkWrite(psAd, (PUCHAR) & _uiData, 0x136, 4, TRUE); } } else { usedIntOutForBulkTransfer = EP4; endpoint = &iface_desc->endpoint[EP4].desc; - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, DRV_ENTRY, - DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, "Choosing AltSetting as a default setting.\n"); if (!usb_endpoint_is_int_out(endpoint)) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Dongle does not have BCM16 Fix.\n"); /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ @@ -608,8 +600,7 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) usb_set_intfdata(psIntfAdapter->interface, psIntfAdapter); psAd->bcm_file_download = InterfaceFileDownload; - psAd->bcm_file_readback_from_chip = - InterfaceFileReadbackFromChip; + psAd->bcm_file_readback_from_chip = InterfaceFileReadbackFromChip; psAd->interface_transmit = InterfaceTransmitPacket; retval = CreateInterruptUrb(psIntfAdapter); -- cgit From b3110cd8cf8d2cff9f39e3e6fe8fb88ed7642105 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:15 +0200 Subject: Staging: bcm: Outsourced selecting of alternate setting This patch outsources a chunk of code which is for selecting an alternate setting for highspeed modem into a new function. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 207 +++++++++++++++++++----------------- 1 file changed, 112 insertions(+), 95 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index bda33c8af800..9f9045d569f8 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -374,6 +374,113 @@ static int device_run(struct bcm_interface_adapter *psIntfAdapter) return 0; } +static int select_alternate_setting_for_highspeed_modem( + struct bcm_interface_adapter *psIntfAdapter, + struct usb_endpoint_descriptor **endpoint, + const struct usb_host_interface *iface_desc, + int *usedIntOutForBulkTransfer) +{ + int retval = 0; + struct bcm_mini_adapter *psAd = psIntfAdapter->psAdapter; + + /* selecting alternate setting one as a default setting + * for High Speed modem. */ + if (psIntfAdapter->bHighSpeedDevice) + retval = usb_set_interface(psIntfAdapter->udev, + DEFAULT_SETTING_0, + ALTERNATE_SETTING_1); + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, + DBG_LVL_ALL, + "BCM16 is applicable on this dongle\n"); + if (retval || !psIntfAdapter->bHighSpeedDevice) { + *usedIntOutForBulkTransfer = EP2; + *endpoint = &iface_desc->endpoint[EP2].desc; + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, + "Interface altsetting failed or modem is configured to Full Speed, hence will work on default setting 0\n"); + /* + * If Modem is high speed device EP2 should be + * INT OUT End point + * + * If Mode is FS then EP2 should be bulk end + * point + */ + if ((psIntfAdapter->bHighSpeedDevice && + !usb_endpoint_is_int_out(*endpoint)) || + (!psIntfAdapter->bHighSpeedDevice && + !usb_endpoint_is_bulk_out(*endpoint))) { + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, + "Configuring the EEPROM\n"); + /* change the EP2, EP4 to INT OUT end point */ + ConfigureEndPointTypesThroughEEPROM( + psAd); + + /* + * It resets the device and if any thing + * gets changed in USB descriptor it + * will show fail and re-enumerate the + * device + */ + retval = usb_reset_device( + psIntfAdapter->udev); + if (retval) { + BCM_DEBUG_PRINT(psAd, + DBG_TYPE_INITEXIT, + DRV_ENTRY, + DBG_LVL_ALL, + "reset failed. Re-enumerating the device.\n"); + return retval; + } + + } + if (!psIntfAdapter->bHighSpeedDevice && + usb_endpoint_is_bulk_out(*endpoint)) { + /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ + UINT _uiData = ntohl(EP2_CFG_INT); + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, + "Reverting Bulk to INT as it is in Full Speed mode.\n"); + BeceemEEPROMBulkWrite(psAd, + (PUCHAR) & _uiData, + 0x136, 4, TRUE); + } + } else { + *usedIntOutForBulkTransfer = EP4; + *endpoint = &iface_desc->endpoint[EP4].desc; + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, + "Choosing AltSetting as a default setting.\n"); + if (!usb_endpoint_is_int_out(*endpoint)) { + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, + "Dongle does not have BCM16 Fix.\n"); + /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ + ConfigureEndPointTypesThroughEEPROM( + psAd); + + /* + * It resets the device and if any thing + * gets changed in USB descriptor it + * will show fail and re-enumerate the + * device + */ + retval = usb_reset_device( + psIntfAdapter->udev); + if (retval) { + BCM_DEBUG_PRINT(psAd, + DBG_TYPE_INITEXIT, + DRV_ENTRY, + DBG_LVL_ALL, + "reset failed. Re-enumerating the device.\n"); + return retval; + } + } + } + + return 0; +} + static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) { struct usb_host_interface *iface_desc; @@ -425,101 +532,11 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) psIntfAdapter->interface->num_altsetting); if (bBcm16 == TRUE) { - /* selecting alternate setting one as a default setting - * for High Speed modem. */ - if (psIntfAdapter->bHighSpeedDevice) - retval = usb_set_interface(psIntfAdapter->udev, - DEFAULT_SETTING_0, - ALTERNATE_SETTING_1); - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, - DBG_LVL_ALL, - "BCM16 is applicable on this dongle\n"); - if (retval || !psIntfAdapter->bHighSpeedDevice) { - usedIntOutForBulkTransfer = EP2; - endpoint = &iface_desc->endpoint[EP2].desc; - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, - "Interface altsetting failed or modem is configured to Full Speed, hence will work on default setting 0\n"); - /* - * If Modem is high speed device EP2 should be - * INT OUT End point - * - * If Mode is FS then EP2 should be bulk end - * point - */ - if ((psIntfAdapter->bHighSpeedDevice && - !usb_endpoint_is_int_out(endpoint)) || - (!psIntfAdapter->bHighSpeedDevice && - !usb_endpoint_is_bulk_out(endpoint))) { - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, - "Configuring the EEPROM\n"); - /* change the EP2, EP4 to INT OUT end point */ - ConfigureEndPointTypesThroughEEPROM( - psAd); - - /* - * It resets the device and if any thing - * gets changed in USB descriptor it - * will show fail and re-enumerate the - * device - */ - retval = usb_reset_device( - psIntfAdapter->udev); - if (retval) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, - DRV_ENTRY, - DBG_LVL_ALL, - "reset failed. Re-enumerating the device.\n"); - return retval; - } - - } - if (!psIntfAdapter->bHighSpeedDevice && - usb_endpoint_is_bulk_out(endpoint)) { - /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ - UINT _uiData = ntohl(EP2_CFG_INT); - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, - "Reverting Bulk to INT as it is in Full Speed mode.\n"); - BeceemEEPROMBulkWrite(psAd, - (PUCHAR) & _uiData, - 0x136, 4, TRUE); - } - } else { - usedIntOutForBulkTransfer = EP4; - endpoint = &iface_desc->endpoint[EP4].desc; - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, - "Choosing AltSetting as a default setting.\n"); - if (!usb_endpoint_is_int_out(endpoint)) { - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, - "Dongle does not have BCM16 Fix.\n"); - /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ - ConfigureEndPointTypesThroughEEPROM( - psAd); - - /* - * It resets the device and if any thing - * gets changed in USB descriptor it - * will show fail and re-enumerate the - * device - */ - retval = usb_reset_device( - psIntfAdapter->udev); - if (retval) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, - DRV_ENTRY, - DBG_LVL_ALL, - "reset failed. Re-enumerating the device.\n"); - return retval; - } - - } - } + retval = select_alternate_setting_for_highspeed_modem( + psIntfAdapter, &endpoint, iface_desc, + &usedIntOutForBulkTransfer); + if (retval) + return retval; } } -- cgit From 269027e95fd2a65a894e49c7c70a490b90ef85f6 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:16 +0200 Subject: Staging: bcm: Shortened some lines in select_alternate_setting_for_highspeed_modem() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 47 ++++++++++++++----------------------- 1 file changed, 18 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index 9f9045d569f8..276825f0c44e 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -389,14 +389,12 @@ static int select_alternate_setting_for_highspeed_modem( retval = usb_set_interface(psIntfAdapter->udev, DEFAULT_SETTING_0, ALTERNATE_SETTING_1); - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, - DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "BCM16 is applicable on this dongle\n"); if (retval || !psIntfAdapter->bHighSpeedDevice) { *usedIntOutForBulkTransfer = EP2; *endpoint = &iface_desc->endpoint[EP2].desc; - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Interface altsetting failed or modem is configured to Full Speed, hence will work on default setting 0\n"); /* * If Modem is high speed device EP2 should be @@ -409,8 +407,8 @@ static int select_alternate_setting_for_highspeed_modem( !usb_endpoint_is_int_out(*endpoint)) || (!psIntfAdapter->bHighSpeedDevice && !usb_endpoint_is_bulk_out(*endpoint))) { - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, + DBG_LVL_ALL, "Configuring the EEPROM\n"); /* change the EP2, EP4 to INT OUT end point */ ConfigureEndPointTypesThroughEEPROM( @@ -422,13 +420,10 @@ static int select_alternate_setting_for_highspeed_modem( * will show fail and re-enumerate the * device */ - retval = usb_reset_device( - psIntfAdapter->udev); + retval = usb_reset_device(psIntfAdapter->udev); if (retval) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, - DRV_ENTRY, - DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, "reset failed. Re-enumerating the device.\n"); return retval; } @@ -438,26 +433,23 @@ static int select_alternate_setting_for_highspeed_modem( usb_endpoint_is_bulk_out(*endpoint)) { /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ UINT _uiData = ntohl(EP2_CFG_INT); - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, + DBG_LVL_ALL, "Reverting Bulk to INT as it is in Full Speed mode.\n"); - BeceemEEPROMBulkWrite(psAd, - (PUCHAR) & _uiData, - 0x136, 4, TRUE); + BeceemEEPROMBulkWrite(psAd, (PUCHAR) & _uiData, 0x136, + 4, TRUE); } } else { *usedIntOutForBulkTransfer = EP4; *endpoint = &iface_desc->endpoint[EP4].desc; - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Choosing AltSetting as a default setting.\n"); if (!usb_endpoint_is_int_out(*endpoint)) { - BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, - DRV_ENTRY, DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, + DBG_LVL_ALL, "Dongle does not have BCM16 Fix.\n"); /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ - ConfigureEndPointTypesThroughEEPROM( - psAd); + ConfigureEndPointTypesThroughEEPROM(psAd); /* * It resets the device and if any thing @@ -465,13 +457,10 @@ static int select_alternate_setting_for_highspeed_modem( * will show fail and re-enumerate the * device */ - retval = usb_reset_device( - psIntfAdapter->udev); + retval = usb_reset_device(psIntfAdapter->udev); if (retval) { - BCM_DEBUG_PRINT(psAd, - DBG_TYPE_INITEXIT, - DRV_ENTRY, - DBG_LVL_ALL, + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, + DRV_ENTRY, DBG_LVL_ALL, "reset failed. Re-enumerating the device.\n"); return retval; } -- cgit From cd77fe77613649e9ca1c8ef8792290b02f1098ca Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:25:17 +0200 Subject: Staging: bcm: Line length cleanup Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceInit.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index 276825f0c44e..bef13a61b7c9 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -44,8 +44,8 @@ static void InterfaceAdapterFree(struct bcm_interface_adapter *psIntfAdapter) * this No RDM/WRM should be made. */ while (ps_ad->DeviceAccess) { - BCM_DEBUG_PRINT(ps_ad, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, - "Device is being accessed.\n"); + BCM_DEBUG_PRINT(ps_ad, DBG_TYPE_INITEXIT, DRV_ENTRY, + DBG_LVL_ALL, "Device is being accessed.\n"); msleep(100); } /* Free interrupt URB */ @@ -130,7 +130,10 @@ static void ConfigureEndPointTypesThroughEEPROM( ulReg &= 0x0101FFFF; BeceemEEPROMBulkWrite(Adapter, (PUCHAR)&ulReg, 0x1FC, 4, TRUE); - /* Update length field if required. Also make the string NULL terminated. */ + /* + * Update length field if required. + * Also make the string NULL terminated. + */ ReadBeceemEEPROM(Adapter, 0xA8, &ulReg); if ((ulReg&0x00FF0000)>>16 > 0x30) { @@ -431,7 +434,11 @@ static int select_alternate_setting_for_highspeed_modem( } if (!psIntfAdapter->bHighSpeedDevice && usb_endpoint_is_bulk_out(*endpoint)) { - /* Once BULK is selected in FS mode. Revert it back to INT. Else USB_IF will fail. */ + /* + * Once BULK is selected in FS mode. + * Revert it back to INT. + * Else USB_IF will fail. + */ UINT _uiData = ntohl(EP2_CFG_INT); BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, @@ -448,7 +455,10 @@ static int select_alternate_setting_for_highspeed_modem( BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Dongle does not have BCM16 Fix.\n"); - /* change the EP2, EP4 to INT OUT end point and use EP4 in altsetting */ + /* + * change the EP2, EP4 to INT OUT end point and use EP4 + * in altsetting + */ ConfigureEndPointTypesThroughEEPROM(psAd); /* @@ -573,7 +583,10 @@ static int InterfaceAdapterInit(struct bcm_interface_adapter *psIntfAdapter) if (!psIntfAdapter->sBulkOut.bulk_out_endpointAddr && (psAd->chip_id == T3B) && (value == usedIntOutForBulkTransfer)) { - /* use first intout end point as a bulk out end point */ + /* + * use first intout end point as a bulk out end + * point + */ buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); psIntfAdapter->sBulkOut.bulk_out_size = -- cgit From 3a7f7caefd1dd84672d3eee00203791161bff23a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:30:18 +0200 Subject: Staging: bcm: line length fixed Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/HandleControlPacket.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/HandleControlPacket.c b/drivers/staging/bcm/HandleControlPacket.c index 495fe3dc5148..467b0cf8e201 100644 --- a/drivers/staging/bcm/HandleControlPacket.c +++ b/drivers/staging/bcm/HandleControlPacket.c @@ -11,7 +11,8 @@ * Enqueue the control packet for Application. * @return None */ -static VOID handle_rx_control_packet(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) +static VOID handle_rx_control_packet(struct bcm_mini_adapter *Adapter, + struct sk_buff *skb) { struct bcm_tarang_data *pTarang = NULL; bool HighPriorityMessage = false; -- cgit From 55eb46e9605921ef341b03473cebf4de04bff7ae Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:30:19 +0200 Subject: Staging: bcm: Whitespace for indentation fixed Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/HandleControlPacket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/HandleControlPacket.c b/drivers/staging/bcm/HandleControlPacket.c index 467b0cf8e201..45d18de71452 100644 --- a/drivers/staging/bcm/HandleControlPacket.c +++ b/drivers/staging/bcm/HandleControlPacket.c @@ -23,7 +23,7 @@ static VOID handle_rx_control_packet(struct bcm_mini_adapter *Adapter, if (netif_msg_pktdata(Adapter)) print_hex_dump(KERN_DEBUG, PFX "rx control: ", DUMP_PREFIX_NONE, - 16, 1, skb->data, skb->len, 0); + 16, 1, skb->data, skb->len, 0); switch (usStatus) { case CM_RESPONSES: /* 0xA0 */ -- cgit From ab78899a0e255f52954d8d5726c5e2a460b2f00b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:30:20 +0200 Subject: Staging: bcm: Replaced member accssing with variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/HandleControlPacket.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/HandleControlPacket.c b/drivers/staging/bcm/HandleControlPacket.c index 45d18de71452..6552b155d2c2 100644 --- a/drivers/staging/bcm/HandleControlPacket.c +++ b/drivers/staging/bcm/HandleControlPacket.c @@ -107,30 +107,32 @@ static VOID handle_rx_control_packet(struct bcm_mini_adapter *Adapter, * the sum of all types of dropped pkt by that * tarang only. */ + struct bcm_mibs_dropped_cntrl_msg *msg = + &pTarang->stDroppedAppCntrlMsgs; switch (*(PUSHORT)skb->data) { case CM_RESPONSES: - pTarang->stDroppedAppCntrlMsgs.cm_responses++; + msg->cm_responses++; break; case CM_CONTROL_NEWDSX_MULTICLASSIFIER_RESP: - pTarang->stDroppedAppCntrlMsgs.cm_control_newdsx_multiclassifier_resp++; + msg->cm_control_newdsx_multiclassifier_resp++; break; case LINK_CONTROL_RESP: - pTarang->stDroppedAppCntrlMsgs.link_control_resp++; + msg->link_control_resp++; break; case STATUS_RSP: - pTarang->stDroppedAppCntrlMsgs.status_rsp++; + msg->status_rsp++; break; case STATS_POINTER_RESP: - pTarang->stDroppedAppCntrlMsgs.stats_pointer_resp++; + msg->stats_pointer_resp++; break; case IDLE_MODE_STATUS: - pTarang->stDroppedAppCntrlMsgs.idle_mode_status++; + msg->idle_mode_status++; break; case AUTH_SS_HOST_MSG: - pTarang->stDroppedAppCntrlMsgs.auth_ss_host_msg++; + msg->auth_ss_host_msg++; break; default: - pTarang->stDroppedAppCntrlMsgs.low_priority_message++; + msg->low_priority_message++; break; } -- cgit From f687299f312632b31c52d0b5c5d5cf8dc5877e4f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:30:21 +0200 Subject: Staging: bcm: Added missing blank line after declarations Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/HandleControlPacket.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/HandleControlPacket.c b/drivers/staging/bcm/HandleControlPacket.c index 6552b155d2c2..54552214bf6f 100644 --- a/drivers/staging/bcm/HandleControlPacket.c +++ b/drivers/staging/bcm/HandleControlPacket.c @@ -219,6 +219,7 @@ INT flushAllAppQ(void) struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); struct bcm_tarang_data *pTarang = NULL; struct sk_buff *PacketToDrop = NULL; + for (pTarang = Adapter->pTarangs; pTarang; pTarang = pTarang->next) { while (pTarang->RxAppControlHead != NULL) { PacketToDrop = pTarang->RxAppControlHead; -- cgit From ecf974451d2fcfe06377290c78cc00327aa012e8 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:50:44 +0200 Subject: Staging: bcm: replaced member accessing with variable for readability Signed-off-by: Matthias Beyer Reviewed-by: Jake Edge Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/hostmibs.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/hostmibs.c b/drivers/staging/bcm/hostmibs.c index 42d9004e357d..af3493c93c91 100644 --- a/drivers/staging/bcm/hostmibs.c +++ b/drivers/staging/bcm/hostmibs.c @@ -17,6 +17,7 @@ INT ProcessGetHostMibs(struct bcm_mini_adapter *Adapter, struct bcm_phs_classifier_table *pstClassifierTable = NULL; struct bcm_phs_classifier_entry *pstClassifierRule = NULL; struct bcm_phs_extension *pDeviceExtension = &Adapter->stBCMPhsContext; + struct bcm_mibs_host_info *host_info; UINT nClassifierIndex = 0; UINT nPhsTableIndex = 0; UINT nSfIndex = 0; @@ -83,18 +84,18 @@ INT ProcessGetHostMibs(struct bcm_mini_adapter *Adapter, } /* Copy other Host Statistics parameters */ - pstHostMibs->stHostInfo.GoodTransmits = Adapter->dev->stats.tx_packets; - pstHostMibs->stHostInfo.GoodReceives = Adapter->dev->stats.rx_packets; - pstHostMibs->stHostInfo.CurrNumFreeDesc = - atomic_read(&Adapter->CurrNumFreeTxDesc); - pstHostMibs->stHostInfo.BEBucketSize = Adapter->BEBucketSize; - pstHostMibs->stHostInfo.rtPSBucketSize = Adapter->rtPSBucketSize; - pstHostMibs->stHostInfo.TimerActive = Adapter->TimerActive; - pstHostMibs->stHostInfo.u32TotalDSD = Adapter->u32TotalDSD; - - memcpy(pstHostMibs->stHostInfo.aTxPktSizeHist, Adapter->aTxPktSizeHist, + host_info = &pstHostMibs->stHostInfo; + host_info->GoodTransmits = Adapter->dev->stats.tx_packets; + host_info->GoodReceives = Adapter->dev->stats.rx_packets; + host_info->CurrNumFreeDesc = atomic_read(&Adapter->CurrNumFreeTxDesc); + host_info->BEBucketSize = Adapter->BEBucketSize; + host_info->rtPSBucketSize = Adapter->rtPSBucketSize; + host_info->TimerActive = Adapter->TimerActive; + host_info->u32TotalDSD = Adapter->u32TotalDSD; + + memcpy(host_info->aTxPktSizeHist, Adapter->aTxPktSizeHist, sizeof(UINT32) * MIBS_MAX_HIST_ENTRIES); - memcpy(pstHostMibs->stHostInfo.aRxPktSizeHist, Adapter->aRxPktSizeHist, + memcpy(host_info->aRxPktSizeHist, Adapter->aRxPktSizeHist, sizeof(UINT32) * MIBS_MAX_HIST_ENTRIES); return STATUS_SUCCESS; -- cgit From fa1e4a7f093d5da8378137dd5b26c8ac05d1361d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 23 Jun 2014 21:50:47 +0200 Subject: Staging: bcm: hostmibs.c: Shortened lines Signed-off-by: Matthias Beyer Reviewed-by: Jake Edge Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/hostmibs.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/hostmibs.c b/drivers/staging/bcm/hostmibs.c index af3493c93c91..f9b08a5d8ce8 100644 --- a/drivers/staging/bcm/hostmibs.c +++ b/drivers/staging/bcm/hostmibs.c @@ -113,32 +113,45 @@ VOID CopyMIBSExtendedSFParameters(struct bcm_mini_adapter *Adapter, struct bcm_connect_mgr_params *psfLocalSet, UINT uiSearchRuleIndex) { - struct bcm_mibs_parameters *t = &Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable; + struct bcm_mibs_parameters *t = + &Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable; t->wmanIfSfid = psfLocalSet->u32SFID; - t->wmanIfCmnCpsMaxSustainedRate = psfLocalSet->u32MaxSustainedTrafficRate; + t->wmanIfCmnCpsMaxSustainedRate = + psfLocalSet->u32MaxSustainedTrafficRate; t->wmanIfCmnCpsMaxTrafficBurst = psfLocalSet->u32MaxTrafficBurst; t->wmanIfCmnCpsMinReservedRate = psfLocalSet->u32MinReservedTrafficRate; t->wmanIfCmnCpsToleratedJitter = psfLocalSet->u32ToleratedJitter; t->wmanIfCmnCpsMaxLatency = psfLocalSet->u32MaximumLatency; - t->wmanIfCmnCpsFixedVsVariableSduInd = psfLocalSet->u8FixedLengthVSVariableLengthSDUIndicator; - t->wmanIfCmnCpsFixedVsVariableSduInd = ntohl(t->wmanIfCmnCpsFixedVsVariableSduInd); + t->wmanIfCmnCpsFixedVsVariableSduInd = + psfLocalSet->u8FixedLengthVSVariableLengthSDUIndicator; + t->wmanIfCmnCpsFixedVsVariableSduInd = + ntohl(t->wmanIfCmnCpsFixedVsVariableSduInd); t->wmanIfCmnCpsSduSize = psfLocalSet->u8SDUSize; t->wmanIfCmnCpsSduSize = ntohl(t->wmanIfCmnCpsSduSize); - t->wmanIfCmnCpsSfSchedulingType = psfLocalSet->u8ServiceFlowSchedulingType; - t->wmanIfCmnCpsSfSchedulingType = ntohl(t->wmanIfCmnCpsSfSchedulingType); + t->wmanIfCmnCpsSfSchedulingType = + psfLocalSet->u8ServiceFlowSchedulingType; + t->wmanIfCmnCpsSfSchedulingType = + ntohl(t->wmanIfCmnCpsSfSchedulingType); t->wmanIfCmnCpsArqEnable = psfLocalSet->u8ARQEnable; t->wmanIfCmnCpsArqEnable = ntohl(t->wmanIfCmnCpsArqEnable); t->wmanIfCmnCpsArqWindowSize = ntohs(psfLocalSet->u16ARQWindowSize); t->wmanIfCmnCpsArqWindowSize = ntohl(t->wmanIfCmnCpsArqWindowSize); - t->wmanIfCmnCpsArqBlockLifetime = ntohs(psfLocalSet->u16ARQBlockLifeTime); - t->wmanIfCmnCpsArqBlockLifetime = ntohl(t->wmanIfCmnCpsArqBlockLifetime); - t->wmanIfCmnCpsArqSyncLossTimeout = ntohs(psfLocalSet->u16ARQSyncLossTimeOut); - t->wmanIfCmnCpsArqSyncLossTimeout = ntohl(t->wmanIfCmnCpsArqSyncLossTimeout); + t->wmanIfCmnCpsArqBlockLifetime = + ntohs(psfLocalSet->u16ARQBlockLifeTime); + t->wmanIfCmnCpsArqBlockLifetime = + ntohl(t->wmanIfCmnCpsArqBlockLifetime); + t->wmanIfCmnCpsArqSyncLossTimeout = + ntohs(psfLocalSet->u16ARQSyncLossTimeOut); + t->wmanIfCmnCpsArqSyncLossTimeout = + ntohl(t->wmanIfCmnCpsArqSyncLossTimeout); t->wmanIfCmnCpsArqDeliverInOrder = psfLocalSet->u8ARQDeliverInOrder; - t->wmanIfCmnCpsArqDeliverInOrder = ntohl(t->wmanIfCmnCpsArqDeliverInOrder); - t->wmanIfCmnCpsArqRxPurgeTimeout = ntohs(psfLocalSet->u16ARQRxPurgeTimeOut); - t->wmanIfCmnCpsArqRxPurgeTimeout = ntohl(t->wmanIfCmnCpsArqRxPurgeTimeout); + t->wmanIfCmnCpsArqDeliverInOrder = + ntohl(t->wmanIfCmnCpsArqDeliverInOrder); + t->wmanIfCmnCpsArqRxPurgeTimeout = + ntohs(psfLocalSet->u16ARQRxPurgeTimeOut); + t->wmanIfCmnCpsArqRxPurgeTimeout = + ntohl(t->wmanIfCmnCpsArqRxPurgeTimeout); t->wmanIfCmnCpsArqBlockSize = ntohs(psfLocalSet->u16ARQBlockSize); t->wmanIfCmnCpsArqBlockSize = ntohl(t->wmanIfCmnCpsArqBlockSize); t->wmanIfCmnCpsReqTxPolicy = psfLocalSet->u8RequesttransmissionPolicy; -- cgit From c0cd6e5b1f6ed5674a4bac3da170c213b6744548 Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Wed, 25 Jun 2014 16:38:01 +0200 Subject: staging: bcm: nvm.c: Cleaning up check unsigned is less than zero Remove checking if a unsigned int is less than zero This was found using a static code analysis program called cppcheck. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index d56ca3b06b60..99b82d82acb6 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -3321,7 +3321,7 @@ int BcmSetActiveSection(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_secti SectImagePriority = ReadISOPriority(Adapter, HighestPriISO) + 1; - if ((SectImagePriority <= 0) && IsSectionWritable(Adapter, HighestPriISO)) { + if ((SectImagePriority == 0) && IsSectionWritable(Adapter, HighestPriISO)) { /* This is a SPECIAL Case which will only happen if the current highest priority ISO has priority value = 0x7FFFFFFF. * We will write 1 to the current Highest priority ISO And then shall increase the priority of the requested ISO * by user @@ -3381,7 +3381,7 @@ int BcmSetActiveSection(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_secti } SectImagePriority = ReadDSDPriority(Adapter, HighestPriDSD) + 1; - if (SectImagePriority <= 0) { + if (SectImagePriority == 0) { /* This is a SPECIAL Case which will only happen if the current highest priority DSD has priority value = 0x7FFFFFFF. * We will write 1 to the current Highest priority DSD And then shall increase the priority of the requested DSD * by user -- cgit From ac4ddad67acb9f67b42902939df64980fcbdbae5 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Sun, 29 Jun 2014 00:26:50 +0300 Subject: staging: winbond: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been cleaned up and nobody is working to do so, so remove it. Signed-off-by: Kristina MartÅ¡enko Cc: Pavel Machek Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/winbond/Kconfig | 11 - drivers/staging/winbond/Makefile | 15 - drivers/staging/winbond/TODO | 12 - drivers/staging/winbond/core.h | 61 - drivers/staging/winbond/localpara.h | 311 ---- drivers/staging/winbond/mac_structures.h | 71 - drivers/staging/winbond/mds.c | 650 -------- drivers/staging/winbond/mds_f.h | 22 - drivers/staging/winbond/mds_s.h | 130 -- drivers/staging/winbond/mto.c | 167 --- drivers/staging/winbond/mto.h | 134 -- drivers/staging/winbond/phy_calibration.c | 1317 ---------------- drivers/staging/winbond/phy_calibration.h | 85 -- drivers/staging/winbond/reg.c | 2328 ----------------------------- drivers/staging/winbond/sme_api.h | 191 --- drivers/staging/winbond/wb35reg.c | 806 ---------- drivers/staging/winbond/wb35reg_f.h | 65 - drivers/staging/winbond/wb35reg_s.h | 240 --- drivers/staging/winbond/wb35rx.c | 358 ----- drivers/staging/winbond/wb35rx_f.h | 15 - drivers/staging/winbond/wb35rx_s.h | 44 - drivers/staging/winbond/wb35tx.c | 290 ---- drivers/staging/winbond/wb35tx_f.h | 22 - drivers/staging/winbond/wb35tx_s.h | 39 - drivers/staging/winbond/wbhal.h | 513 ------- drivers/staging/winbond/wbusb.c | 853 ----------- 28 files changed, 8753 deletions(-) delete mode 100644 drivers/staging/winbond/Kconfig delete mode 100644 drivers/staging/winbond/Makefile delete mode 100644 drivers/staging/winbond/TODO delete mode 100644 drivers/staging/winbond/core.h delete mode 100644 drivers/staging/winbond/localpara.h delete mode 100644 drivers/staging/winbond/mac_structures.h delete mode 100644 drivers/staging/winbond/mds.c delete mode 100644 drivers/staging/winbond/mds_f.h delete mode 100644 drivers/staging/winbond/mds_s.h delete mode 100644 drivers/staging/winbond/mto.c delete mode 100644 drivers/staging/winbond/mto.h delete mode 100644 drivers/staging/winbond/phy_calibration.c delete mode 100644 drivers/staging/winbond/phy_calibration.h delete mode 100644 drivers/staging/winbond/reg.c delete mode 100644 drivers/staging/winbond/sme_api.h delete mode 100644 drivers/staging/winbond/wb35reg.c delete mode 100644 drivers/staging/winbond/wb35reg_f.h delete mode 100644 drivers/staging/winbond/wb35reg_s.h delete mode 100644 drivers/staging/winbond/wb35rx.c delete mode 100644 drivers/staging/winbond/wb35rx_f.h delete mode 100644 drivers/staging/winbond/wb35rx_s.h delete mode 100644 drivers/staging/winbond/wb35tx.c delete mode 100644 drivers/staging/winbond/wb35tx_f.h delete mode 100644 drivers/staging/winbond/wb35tx_s.h delete mode 100644 drivers/staging/winbond/wbhal.h delete mode 100644 drivers/staging/winbond/wbusb.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 52d7e8b63347..c7e34a28c6f1 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -30,8 +30,6 @@ source "drivers/staging/slicoss/Kconfig" source "drivers/staging/usbip/Kconfig" -source "drivers/staging/winbond/Kconfig" - source "drivers/staging/wlan-ng/Kconfig" source "drivers/staging/comedi/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 1b9e10c639e3..8ad1689da19d 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -7,7 +7,6 @@ obj-y += media/ obj-$(CONFIG_ET131X) += et131x/ obj-$(CONFIG_SLICOSS) += slicoss/ obj-$(CONFIG_USBIP_CORE) += usbip/ -obj-$(CONFIG_W35UND) += winbond/ obj-$(CONFIG_PRISM2_USB) += wlan-ng/ obj-$(CONFIG_COMEDI) += comedi/ obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/ diff --git a/drivers/staging/winbond/Kconfig b/drivers/staging/winbond/Kconfig deleted file mode 100644 index db5b053d9bc2..000000000000 --- a/drivers/staging/winbond/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config W35UND - tristate "IS89C35 WLAN USB driver" - depends on MAC80211 && WLAN && USB - default n - ---help--- - This is highly experimental driver for Winbond WIFI card. - - Hardware is present in some Kohjinsha subnotebooks, and in some - stand-alone USB modules. Chipset name seems to be w89c35d. - - Check for new version. diff --git a/drivers/staging/winbond/Makefile b/drivers/staging/winbond/Makefile deleted file mode 100644 index 081d48db04cb..000000000000 --- a/drivers/staging/winbond/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -w35und-y := \ - mds.o \ - mto.o \ - phy_calibration.o \ - reg.o \ - wb35reg.o \ - wb35rx.o \ - wb35tx.o \ - wbusb.o \ - - -obj-$(CONFIG_W35UND) += w35und.o - - - diff --git a/drivers/staging/winbond/TODO b/drivers/staging/winbond/TODO deleted file mode 100644 index b4c592a96844..000000000000 --- a/drivers/staging/winbond/TODO +++ /dev/null @@ -1,12 +0,0 @@ -TODO: - - sparse cleanups - - checkpatch cleanups - - kerneldoc cleanups - - fix severeCamelCaseInfestation - - remove unused ioctls - - use cfg80211 for regulatory stuff - - fix 4k stack problems - - fix locking problems (it's done using atomics...) - -Please send patches to Greg Kroah-Hartman and -Pavel Machek diff --git a/drivers/staging/winbond/core.h b/drivers/staging/winbond/core.h deleted file mode 100644 index fc0ef24fad3b..000000000000 --- a/drivers/staging/winbond/core.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __WINBOND_CORE_H -#define __WINBOND_CORE_H - -#include -#include -#include - -#include "wbhal.h" -#include "mto.h" - -#include "mac_structures.h" -#include "mds_s.h" - -#define MAX_NUM_TX_MMPDU 2 -#define MAX_MMPDU_SIZE 1512 -#define MAX_NUM_RX_MMPDU 6 - -struct mlme_frame { - s8 *pMMPDU; - u16 len; - u8 data_type; - u8 is_in_used; - - 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]; - - u16 wNumRxMMPDU; - u16 wNumRxMMPDUDiscarded; - - u16 wNumRxMMPDUInMLME; /* Number of the Rx MMPDU */ - u16 reserved_1; /* in MLME. */ - /* excluding the discarded */ -}; - -#define WBLINUX_PACKET_ARRAY_SIZE (ETHERNET_TX_DESCRIPTORS*4) - -#define WB_MAX_LINK_NAME_LEN 40 - -struct wbsoft_priv { - struct wb_local_para sLocalPara; /* Myself connected - parameters */ - - struct mlme_frame sMlmeFrame; /* connect to peerSTA parameters */ - - struct wb35_mto_params sMtoPara; /* MTO_struct ... */ - struct hw_data sHwData; /*For HAL */ - struct wb35_mds Mds; - - u32 RxByteCount; - u32 TxByteCount; - - bool enabled; -}; - -#endif /* __WINBOND_CORE_H */ diff --git a/drivers/staging/winbond/localpara.h b/drivers/staging/winbond/localpara.h deleted file mode 100644 index 8ca80ddda59a..000000000000 --- a/drivers/staging/winbond/localpara.h +++ /dev/null @@ -1,311 +0,0 @@ -#ifndef __WINBOND_LOCALPARA_H -#define __WINBOND_LOCALPARA_H - -/* - * ============================================================= - * LocalPara.h - - * ============================================================= - */ - -#include "mac_structures.h" - -/* 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_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 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 BAND_TYPE_DSSS 0 -#define BAND_TYPE_OFDM_24 1 -#define BAND_TYPE_OFDM_5 2 - -/* 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 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 EVENT_REASON_FILTER_BASIC_RATE 0x0001 -#define EVENT_REASON_FILTER_PRIVACY 0x0002 -#define EVENT_REASON_FILTER_AUTH_MODE 0x0003 -#define EVENT_REASON_TIMEOUT 0x00ff - -/* 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 radio_off { - u8 boHwRadioOff; - u8 boSwRadioOff; -}; - -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 time 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, Handover 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 diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h deleted file mode 100644 index 76c63c74d50c..000000000000 --- a/drivers/staging/winbond/mac_structures.h +++ /dev/null @@ -1,71 +0,0 @@ -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// MAC_Structures.h -// -// This file contains the definitions and data structures used by SW-MAC. -// -// Revision Histoy -//================= -// 0.1 2002 UN00 -// 0.2 20021004 PD43 CCLiu6 -// 20021018 PD43 CCLiu6 -// Add enum_TxRate type -// Modify enum_STAState type -// 0.3 20021023 PE23 CYLiu update MAC session struct -// 20021108 -// 20021122 PD43 Austin -// Deleted some unused. -// 20021129 PD43 Austin -// 20030617 increase the 802.11g definition -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - -#ifndef _MAC_Structures_H_ -#define _MAC_Structures_H_ - -#define MAC_ADDR_LENGTH 6 - -/* ======================================================== -// 802.11 Frame define -//----- */ -#define DOT_11_MAC_HEADER_SIZE 24 -#define DOT_11_SNAP_SIZE 6 -#define DOT_11_DURATION_OFFSET 2 -/* Sequence control offset */ -#define DOT_11_SEQUENCE_OFFSET 22 -/* The start offset of 802.11 Frame// */ -#define DOT_11_TYPE_OFFSET 30 -#define DOT_11_DATA_OFFSET 24 -#define DOT_11_DA_OFFSET 4 - -#define MAX_ETHERNET_PACKET_SIZE 1514 - -/* ----- 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 -#define MAC_SUBTYPE_MNGMNT_REASSOC_RESPONSE 0x30 -#define MAC_SUBTYPE_MNGMNT_PROBE_REQUEST 0x40 -#define MAC_SUBTYPE_MNGMNT_PROBE_RESPONSE 0x50 -#define MAC_SUBTYPE_MNGMNT_BEACON 0x80 -#define MAC_SUBTYPE_MNGMNT_ATIM 0x90 -#define MAC_SUBTYPE_MNGMNT_DISASSOCIATION 0xA0 -#define MAC_SUBTYPE_MNGMNT_AUTHENTICATION 0xB0 -#define MAC_SUBTYPE_MNGMNT_DEAUTHENTICATION 0xC0 - -#define RATE_AUTO 0 -#define RATE_1M 2 -#define RATE_2M 4 -#define RATE_5dot5M 11 -#define RATE_6M 12 -#define RATE_9M 18 -#define RATE_11M 22 -#define RATE_12M 24 -#define RATE_18M 36 -#define RATE_22M 44 -#define RATE_24M 48 -#define RATE_33M 66 -#define RATE_36M 72 -#define RATE_48M 96 -#define RATE_54M 108 -#define RATE_MAX 255 - -#endif /* _MAC_Structure_H_ */ diff --git a/drivers/staging/winbond/mds.c b/drivers/staging/winbond/mds.c deleted file mode 100644 index aef0855f4c68..000000000000 --- a/drivers/staging/winbond/mds.c +++ /dev/null @@ -1,650 +0,0 @@ -#include "mds_f.h" -#include "mto.h" -#include "wbhal.h" -#include "wb35tx_f.h" - -unsigned char -Mds_initial(struct wbsoft_priv *adapter) -{ - struct wb35_mds *pMds = &adapter->Mds; - - pMds->TxPause = false; - pMds->TxRTSThreshold = DEFAULT_RTSThreshold; - pMds->TxFragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; - - return hal_get_tx_buffer(&adapter->sHwData, &pMds->pTxBuffer); -} - -static void Mds_DurationSet(struct wbsoft_priv *adapter, - struct wb35_descriptor *pDes, u8 *buffer) -{ - struct T00_descriptor *pT00; - struct T01_descriptor *pT01; - u16 Duration, NextBodyLen, OffsetSize; - u8 Rate, i; - unsigned char CTS_on = false, RTS_on = false; - struct T00_descriptor *pNextT00; - u16 BodyLen = 0; - unsigned char boGroupAddr = false; - - OffsetSize = pDes->FragmentThreshold + 32 + 3; - OffsetSize &= ~0x03; - Rate = pDes->TxRate >> 1; - if (!Rate) - Rate = 1; - - pT00 = (struct T00_descriptor *)buffer; - pT01 = (struct T01_descriptor *)(buffer+4); - pNextT00 = (struct T00_descriptor *)(buffer+OffsetSize); - - if (buffer[DOT_11_DA_OFFSET+8] & 0x1) /* +8 for USB hdr */ - boGroupAddr = true; - - /****************************************** - * 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 */ - - if (BodyLen >= CURRENT_RTS_THRESHOLD) - RTS_on = true; /* Using RTS */ - else { - if (pT01->T01_modulation_type) { /* Is using OFDM */ - /* Is using protect */ - if (CURRENT_PROTECT_MECHANISM) - CTS_on = true; /* Using CTS */ - } - } - } - - if (RTS_on || CTS_on) { - 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 */ - 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 */ - /* 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; - - Duration += (((BodyLen + 14)*8 + Rate-1) / Rate + - DEFAULT_SIFSTIME*2); - } - - if (RTS_on) { - if (pT01->T01_modulation_type) { /* Is using OFDM */ - /* 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 - */ - /* long preamble */ - if (pT01->T01_plcp_header_length) - Duration += LONG_PREAMBLE_PLUS_PLCPHEADER_TIME; - else - Duration += SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME; - - Duration += (((112 + Rate-1) / Rate) + - DEFAULT_SIFSTIME); - } - } - - /* 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 - ******************************************/ - if (boGroupAddr) - Duration = 0; - else { - for (i = pDes->FragmentCount-1; i > 0; i--) { - NextBodyLen = (u16)pNextT00->T00_frame_length; - 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 */ - Duration = PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION * 3; - Duration += (((NextBodyLen*8 + 22 + Rate*4 - 1) - /(Rate*4)) * Tsym + - (((2*14)*8 + 22 + 95)/96)*Tsym + - DEFAULT_SIFSTIME*3); - } 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 */ - Duration = LONG_PREAMBLE_PLUS_PLCPHEADER_TIME*3; - else - Duration = SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME*3; - - Duration += (((NextBodyLen + (2*14))*8 - + Rate-1) / Rate + - DEFAULT_SIFSTIME*3); - } - /* 4 USHOR for skip 8B USB, 2USHORT=FC + Duration */ - ((u16 *)buffer)[5] = cpu_to_le16(Duration); - - /* ----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 */ - - buffer += OffsetSize; - pT01 = (struct T01_descriptor *)(buffer+4); - /* The last fragment will not have the next fragment */ - if (i != 1) - pNextT00 = (struct T00_descriptor *)(buffer+OffsetSize); - } - - /******************************************* - * Fill the last fragment descriptor - *******************************************/ - if (pT01->T01_modulation_type) { - /* 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 */ - 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 */ - Duration = LONG_PREAMBLE_PLUS_PLCPHEADER_TIME; - else - Duration = SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME; - - Duration += ((112 + Rate-1)/Rate + DEFAULT_SIFSTIME); - } - } - - /* 4 USHOR for skip 8B USB, 2USHORT=FC + Duration */ - ((u16 *)buffer)[5] = cpu_to_le16(Duration); - pT00->value = cpu_to_le32(pT00->value); - pT01->value = cpu_to_le32(pT01->value); - /* --end 20061009 add */ - -} - -/* The function return the 4n size of usb pk */ -static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, - struct wb35_descriptor *pDes, u8 *TargetBuffer) -{ - struct T00_descriptor *pT00; - struct wb35_mds *pMds = &adapter->Mds; - u8 *buffer; - u8 *src_buffer; - u8 *pctmp; - u16 Size = 0; - u16 SizeLeft, CopySize, CopyLeft, stmp; - u8 buf_index, FragmentCount = 0; - - - /* Copy fragment body */ - buffer = TargetBuffer; /* shift 8B usb + 24B 802.11 */ - SizeLeft = pDes->buffer_total_size; - buf_index = pDes->buffer_start_index; - - pT00 = (struct T00_descriptor *)buffer; - while (SizeLeft) { - pT00 = (struct T00_descriptor *)buffer; - CopySize = SizeLeft; - if (SizeLeft > pDes->FragmentThreshold) { - CopySize = pDes->FragmentThreshold; - /* Set USB length */ - pT00->T00_frame_length = 24 + CopySize; - } else /* Set USB length */ - pT00->T00_frame_length = 24 + SizeLeft; - - SizeLeft -= CopySize; - - /* 1 Byte operation */ - pctmp = (u8 *)(buffer + 8 + DOT_11_SEQUENCE_OFFSET); - *pctmp &= 0xf0; - *pctmp |= FragmentCount; /* 931130.5.m */ - if (!FragmentCount) - pT00->T00_first_mpdu = 1; - - buffer += 32; /* 8B usb + 24B 802.11 header */ - Size += 32; - - /* Copy into buffer */ - stmp = CopySize + 3; - stmp &= ~0x03; /* 4n Alignment */ - Size += stmp; /* Current 4n offset of mpdu */ - - while (CopySize) { - /* 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 */ - buf_index++; - buf_index %= MAX_DESCRIPTOR_BUFFER_INDEX; - } else { - u8 *pctmp = pDes->buffer_address[buf_index]; - pctmp += CopySize; - pDes->buffer_address[buf_index] = pctmp; - pDes->buffer_size[buf_index] -= CopySize; - } - - memcpy(buffer, src_buffer, CopyLeft); - buffer += CopyLeft; - CopySize -= CopyLeft; - } - - /* 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 */ - pMds->MicAdd = SizeLeft; - pMds->MicWriteAddress[pMds->MicWriteIndex] = - buffer - (8 - SizeLeft); - pMds->MicWriteSize[pMds->MicWriteIndex] = - 8 - SizeLeft; - pMds->MicWriteIndex++; - } - } - - /* Does it need to generate the new header for next mpdu? */ - if (SizeLeft) { - /* Get the next 4n start address */ - buffer = TargetBuffer + Size; - /* Copy 8B USB +24B 802.11 */ - memcpy(buffer, TargetBuffer, 32); - pT00 = (struct T00_descriptor *)buffer; - pT00->T00_first_mpdu = 0; - } - - FragmentCount++; - } - - 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 */ - /* Update the correct fragment number */ - pDes->FragmentCount = FragmentCount; - 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 */ - struct T00_descriptor *pT00; - struct T01_descriptor *pT01; - u16 stmp; - u8 i, ctmp1, ctmp2, ctmpf; - u16 FragmentThreshold = CURRENT_FRAGMENT_THRESHOLD; - - - stmp = pDes->buffer_total_size; - /* - * Set USB header 8 byte - */ - pT00 = (struct T00_descriptor *)TargetBuffer; - TargetBuffer += 4; - pT01 = (struct T01_descriptor *)TargetBuffer; - TargetBuffer += 4; - - 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_enable = 1; /* 921013 931130.5.h */ - - /* 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 */ - /* Copy header */ - memcpy(TargetBuffer, src_buffer, DOT_11_MAC_HEADER_SIZE); - 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 */ - FragmentThreshold -= (DOT_11_MAC_HEADER_SIZE + 4); - pDes->FragmentThreshold = FragmentThreshold; - - /* Set more frag bit */ - TargetBuffer[1] |= 0x04; /* Set more frag bit */ - - /* - * Set tx rate - */ - stmp = *(u16 *)(TargetBuffer+30); /* 2n alignment address */ - - /* Use basic rate */ - ctmp1 = ctmpf = CURRENT_TX_RATE_FOR_MNG; - - pDes->TxRate = ctmp1; - pr_debug("Tx rate =%x\n", ctmp1); - - pT01->T01_modulation_type = (ctmp1%3) ? 0 : 1; - - for (i = 0; i < 2; i++) { - if (i == 1) - ctmp1 = ctmpf; - /* backup the ta rate and fall back rate */ - pMds->TxRate[pDes->Descriptor_ID][i] = ctmp1; - - if (ctmp1 == 108) - ctmp2 = 7; - 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; - else if (ctmp1 == 24) - ctmp2 = 2; - else if (ctmp1 == 18) - ctmp2 = 1; - else if (ctmp1 == 12) - ctmp2 = 0; - 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 */ - - if (i == 0) - pT01->T01_transmit_rate = ctmp2; - else - pT01->T01_fall_back_rate = ctmp2; - } - - /* - * Set preamble type - */ - /* RATE_1M */ - if ((pT01->T01_modulation_type == 0) && (pT01->T01_transmit_rate == 0)) - pDes->PreambleMode = WLAN_PREAMBLE_TYPE_LONG; - else - pDes->PreambleMode = CURRENT_PREAMBLE_MODE; - pT01->T01_plcp_header_length = pDes->PreambleMode; /* Set preamble */ - -} - -static void MLME_GetNextPacket(struct wbsoft_priv *adapter, - struct wb35_descriptor *desc) -{ - desc->InternalUsed = desc->buffer_start_index + desc->buffer_number; - desc->InternalUsed %= MAX_DESCRIPTOR_BUFFER_INDEX; - desc->buffer_address[desc->InternalUsed] = adapter->sMlmeFrame.pMMPDU; - desc->buffer_size[desc->InternalUsed] = adapter->sMlmeFrame.len; - desc->buffer_total_size += adapter->sMlmeFrame.len; - desc->buffer_number++; - desc->Type = adapter->sMlmeFrame.data_type; -} - -static void MLMEfreeMMPDUBuffer(struct wbsoft_priv *adapter, s8 *pData) -{ - int i; - - /* Reclaim the data buffer */ - for (i = 0; i < MAX_NUM_TX_MMPDU; i++) { - if (pData == (s8 *)&(adapter->sMlmeFrame.TxMMPDU[i])) - break; - } - if (adapter->sMlmeFrame.TxMMPDUInUse[i]) - adapter->sMlmeFrame.TxMMPDUInUse[i] = false; - else { - /* Something wrong - PD43 Add debug code here??? */ - } -} - -static void MLME_SendComplete(struct wbsoft_priv *adapter, u8 PacketID, - unsigned char SendOK) -{ - /* Reclaim the data buffer */ - adapter->sMlmeFrame.len = 0; - MLMEfreeMMPDUBuffer(adapter, adapter->sMlmeFrame.pMMPDU); - - /* Return resource */ - adapter->sMlmeFrame.is_in_used = PACKET_FREE_TO_USE; -} - -void -Mds_Tx(struct wbsoft_priv *adapter) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_mds *pMds = &adapter->Mds; - struct wb35_descriptor TxDes; - struct wb35_descriptor *pTxDes = &TxDes; - u8 *XmitBufAddress; - u16 XmitBufSize, PacketSize, stmp, CurrentSize, FragmentThreshold; - u8 FillIndex, TxDesIndex, FragmentCount, FillCount; - unsigned char BufferFilled = false; - - - if (pMds->TxPause) - return; - if (!hal_driver_init_OK(pHwData)) - return; - - /* Only one thread can be run here */ - if (atomic_inc_return(&pMds->TxThreadCount) != 1) - goto cleanup; - - /* Start to fill the data */ - do { - FillIndex = pMds->TxFillIndex; - /* Is owned by software 0:Yes 1:No */ - if (pMds->TxOwner[FillIndex]) { - pr_debug("[Mds_Tx] Tx Owner is H/W.\n"); - break; - } - - /* Get buffer */ - XmitBufAddress = pMds->pTxBuffer + (MAX_USB_TX_BUFFER * FillIndex); - XmitBufSize = 0; - FillCount = 0; - do { - PacketSize = adapter->sMlmeFrame.len; - if (!PacketSize) - break; - - /* For Check the buffer resource */ - FragmentThreshold = CURRENT_FRAGMENT_THRESHOLD; - /* 931130.5.b */ - FragmentCount = PacketSize/FragmentThreshold + 1; - /* 931130.5.c 8:MIC */ - stmp = PacketSize + FragmentCount*32 + 8; - if ((XmitBufSize + stmp) >= MAX_USB_TX_BUFFER) - break; /* buffer is not enough */ - - /* - * 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 */ - pTxDes->Descriptor_ID = TxDesIndex; - /* Storing the information of source coming from */ - pMds->TxDesFrom[TxDesIndex] = 2; - pMds->TxDesIndex++; - pMds->TxDesIndex %= MAX_USB_TX_DESCRIPTOR; - - MLME_GetNextPacket(adapter, pTxDes); - - /* - * Copy header. 8byte USB + 24byte 802.11Hdr. - * Set TxRate, Preamble type - */ - Mds_HeaderCopy(adapter, pTxDes, XmitBufAddress); - - /* For speed up Key setting */ - if (pTxDes->EapFix) { - pr_debug("35: EPA 4th frame detected. Size = %d\n", - PacketSize); - pHwData->IsKeyPreSet = 1; - } - - /* 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 */ - Mds_DurationSet(adapter, pTxDes, XmitBufAddress); - - /* Shift to the next address */ - XmitBufSize += CurrentSize; - XmitBufAddress += CurrentSize; - - /* Get packet to transmit completed, - * 1:TESTSTA 2:MLME 3: Ndis data - */ - MLME_SendComplete(adapter, 0, true); - - /* Software TSC count 20060214 */ - pMds->TxTsc++; - if (pMds->TxTsc == 0) - pMds->TxTsc_2++; - - FillCount++; /* 20060928 */ - /* - * End of multiple MSDU copy loop. - * false = single - * true = multiple sending - */ - } while (HAL_USB_MODE_BURST(pHwData)); - - /* Move to the next one, if necessary */ - if (BufferFilled) { - /* size setting */ - pMds->TxBufferSize[FillIndex] = XmitBufSize; - - /* 20060928 set Tx count */ - pMds->TxCountInBuffer[FillIndex] = FillCount; - - /* Set owner flag */ - pMds->TxOwner[FillIndex] = 1; - - pMds->TxFillIndex++; - pMds->TxFillIndex %= MAX_USB_TX_BUFFER_NUMBER; - BufferFilled = false; - } else - break; - - if (!PacketSize) /* No more pk for transmitting */ - break; - - } while (true); - - /* - * Start to send by lower module - */ - if (!pHwData->IsKeyPreSet) - Wb35Tx_start(adapter); - -cleanup: - atomic_dec(&pMds->TxThreadCount); -} - -void -Mds_SendComplete(struct wbsoft_priv *adapter, struct T02_descriptor *pT02) -{ - struct wb35_mds *pMds = &adapter->Mds; - struct hw_data *pHwData = &adapter->sHwData; - u8 PacketId = (u8)pT02->T02_Tx_PktID; - unsigned char SendOK = true; - u8 RetryCount, TxRate; - - if (pT02->T02_IgnoreResult) /* Don't care about the result */ - return; - if (pT02->T02_IsLastMpdu) { - /* 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 */ - pHwData->dto_tx_retry_count += (RetryCount+1); - /* [for tx debug] */ - if (RetryCount < 7) - pHwData->tx_retry_count[RetryCount] += RetryCount; - else - pHwData->tx_retry_count[7] += RetryCount; - pr_debug("dto_tx_retry_count =%d\n", - pHwData->dto_tx_retry_count); - MTO_SetTxCount(adapter, TxRate, RetryCount); - } - pHwData->dto_tx_frag_count += (RetryCount+1); - - /* [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) - pHwData->tx_WepOn_false_count++; - if (pT02->T02_discard_due_to_null_wep_key) - pHwData->tx_Null_key_count++; - } else { - if (pT02->T02_effective_transmission_rate) - pHwData->tx_ETR_count++; - MTO_SetTxCount(adapter, TxRate, RetryCount); - } - - /* Clear send result buffer */ - pMds->TxResult[PacketId] = 0; - } else - pMds->TxResult[PacketId] |= ((u16)(pT02->value & 0x0ffff)); -} diff --git a/drivers/staging/winbond/mds_f.h b/drivers/staging/winbond/mds_f.h deleted file mode 100644 index 159b2eb366e8..000000000000 --- a/drivers/staging/winbond/mds_f.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __WINBOND_MDS_F_H -#define __WINBOND_MDS_F_H - -#include "wbhal.h" -#include "core.h" - -unsigned char Mds_initial(struct wbsoft_priv *adapter); -void Mds_Tx(struct wbsoft_priv *adapter); -void Mds_SendComplete(struct wbsoft_priv *adapter, struct T02_descriptor *pt02); -void Mds_MpduProcess(struct wbsoft_priv *adapter, - struct wb35_descriptor *prxdes); - -/* 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 diff --git a/drivers/staging/winbond/mds_s.h b/drivers/staging/winbond/mds_s.h deleted file mode 100644 index 2972d66c9436..000000000000 --- a/drivers/staging/winbond/mds_s.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef __WINBOND_MDS_H -#define __WINBOND_MDS_H - -#include -#include -#include - -#include "localpara.h" -#include "mac_structures.h" - -/* Preamble_Type, see */ -enum { - WLAN_PREAMBLE_TYPE_SHORT, - 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 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 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 ----------------------------------- */ -#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 */ - -/* - * ================================================================ - * Configuration 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 - -#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 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)]; - u8 *pTxBuffer; - 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 */ - - atomic_t TxThreadCount; /* For thread counting */ - - 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 */ - - u16 MicWriteSize[2]; - - 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 */ - - /* ---- for Tx Parameter */ - u16 TxFragmentThreshold; /* For frame body only */ - u16 TxRTSThreshold; - - u32 MaxReceiveTime; - - /* depend on OS, */ - u32 MulticastListNo; - u32 PacketFilter; /* Setting by NDIS, the current packet filter in use. */ - u8 MulticastAddressesArray[DEFAULT_MULTICASTLISTMAX][MAC_ADDR_LENGTH]; - - /* COUNTERMEASURE */ - u8 bMICfailCount; - u8 boCounterMeasureBlock; - u8 reserved_4[2]; - - u32 TxTsc; - u32 TxTsc_2; -}; - -#endif diff --git a/drivers/staging/winbond/mto.c b/drivers/staging/winbond/mto.c deleted file mode 100644 index b031ecd4f3c0..000000000000 --- a/drivers/staging/winbond/mto.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * ============================================================================ - * 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 "sme_api.h" -#include "wbhal.h" -#include "wb35reg_f.h" -#include "core.h" -#include "mto.h" - -/* Declare SQ3 to rate and fragmentation threshold table */ -/* Declare fragmentation threshold 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 -}; - -/* - * Declare data rate table: - * The following table will be changed at anytime if the operation 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 -}; - -/* this record the retry rate at different data rate */ -static int retryrate_rec[MTO_MAX_DATA_RATE_LEVELS]; - -static u8 boSparseTxTraffic; - -/* - * =========================================================================== - * 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; - - 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() = 0; - MTO_FRAG_TH_LEVEL() = 4; - MTO_RTS_THRESHOLD() = MTO_FRAG_TH() + 1; - MTO_RTS_THRESHOLD_SETUP() = MTO_FRAG_TH() + 1; - MTO_RATE_CHANGE_ENABLE() = 1; - MTO_FRAG_CHANGE_ENABLE() = 0; - MTO_POWER_CHANGE_ENABLE() = 1; - MTO_PREAMBLE_CHANGE_ENABLE() = 1; - MTO_RTS_CHANGE_ENABLE() = 0; - - for (i = 0; i < MTO_MAX_DATA_RATE_LEVELS; i++) - retryrate_rec[i] = 5; - - MTO_TXFLOWCOUNT() = 0; - /* --------- 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 */ - MTOPARA_TXPOWER_INDEX() = MTO_TXPOWER_FROM_EEPROM; - } - RFSynthesizer_SetPowerIndex(MTO_HAL(), (u8) MTOPARA_TXPOWER_INDEX()); - /* ------------------------------------------------ */ - - /* 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 - */ - -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 (boSparseTxTraffic) - MTO_HAL()->dto_tx_frag_count += MTOPARA_PERIODIC_CHECK_CYCLE(); - else - MTO_HAL()->dto_tx_frag_count += 1; - } else { - if (index < 8) { - MTO_HAL()->dto_tx_retry_count += index; - 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) { - /* 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_retry_count += 3; - MTO_HAL()->dto_tx_frag_count += 3; - } - - } - } else { - MTO_HAL()->dto_tx_retry_count += index; - MTO_HAL()->dto_tx_frag_count += (index + 1); - } -} diff --git a/drivers/staging/winbond/mto.h b/drivers/staging/winbond/mto.h deleted file mode 100644 index 8d41eeda45bf..000000000000 --- a/drivers/staging/winbond/mto.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * ================================================================== - * MTO.H - * - * Copyright (c) 2003 Winbond Electronics Corp. All rights reserved. - * ================================================================== - */ -#ifndef __MTO_H__ -#define __MTO_H__ - -#include - -struct wbsoft_priv; - -#define MTO_PREAMBLE_LONG WLAN_PREAMBLE_TYPE_LONG -#define MTO_PREAMBLE_SHORT WLAN_PREAMBLE_TYPE_SHORT - -/* Defines the parameters used in the MAC Throughput Optimization algorithm */ -struct wb35_mto_params { - u32 TxFlowCount; /* to judge what kind the tx flow(sparse or busy) is */ - - /* --------- DTO threshold parameters ------------- */ - u16 DTO_PeriodicCheckCycle; - u16 DTO_RssiThForAntDiv; - - u16 DTO_TxCountThForCalcNewRate; - u16 DTO_TxRateIncTh; - - u16 DTO_TxRateDecTh; - u16 DTO_TxRateEqTh; - - u16 DTO_TxRateBackOff; - u16 DTO_TxRetryRateReduce; - - 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 DataRateLevel; - u8 DataRateChangeEnable; - u8 FragThresholdLevel; - u8 FragThresholdChangeEnable; - - u16 RTSThreshold; - u16 RTSThreshold_Setup; - - u32 AvgIdleSlot; - u32 Pr_Interf; - u32 AvgGapBtwnInterf; - - u8 RTSChangeEnable; - u8 Ant_sel; - u8 aging_timeout; - u8 reserved_2; - - u32 Cnt_Ant[2]; - u32 SQ_Ant[2]; - - u8 FallbackRateLevel; - u8 OfdmRateLevel; - - 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) /* 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_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_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_TXFLOWCOUNT() MTO_DATA().TxFlowCount - -/* --------- 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 -#define MTOPARA_TXRATE_INC_TH() MTO_DATA().DTO_TxRateIncTh -#define MTOPARA_TXRATE_DEC_TH() MTO_DATA().DTO_TxRateDecTh -#define MTOPARA_TXRATE_EQ_TH() MTO_DATA().DTO_TxRateEqTh -#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[]; - -#define MTO_DATA_RATE() MTO_Data_Rate_Tbl[MTO_RATE_LEVEL()] -#define MTO_FRAG_TH() MTO_Frag_Th_Tbl[MTO_FRAG_TH_LEVEL()] - -void MTO_Init(struct wbsoft_priv *); -void MTO_SetTxCount(struct wbsoft_priv *adapter, u8 t0, u8 index); - -#endif /* __MTO_H__ */ - diff --git a/drivers/staging/winbond/phy_calibration.c b/drivers/staging/winbond/phy_calibration.c deleted file mode 100644 index 8aecced62dde..000000000000 --- a/drivers/staging/winbond/phy_calibration.c +++ /dev/null @@ -1,1317 +0,0 @@ -/* - * phy_302_calibration.c - * - * Copyright (C) 2002, 2005 Winbond Electronics Corp. - * - * modification history - * --------------------------------------------------------------------------- - * 0.01.001, 2003-04-16, Kevin created - * - */ - -/****************** INCLUDE FILES SECTION ***********************************/ -#include "phy_calibration.h" -#include "wbhal.h" -#include "wb35reg_f.h" -#include "core.h" - - -/****************** DEBUG CONSTANT AND MACRO SECTION ************************/ - -/****************** LOCAL CONSTANT AND MACRO SECTION ************************/ -#define LOOP_TIMES 20 -#define US 1000/* MICROSECOND*/ - -#define AG_CONST 0.6072529350 -#define FIXED(X) ((s32)((X) * 32768.0)) -#define DEG2RAD(X) (0.017453 * (X)) - -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)), - FIXED(DEG2RAD(0.895174)), FIXED(DEG2RAD(0.447614)), - FIXED(DEG2RAD(0.223811)), FIXED(DEG2RAD(0.111906)), - FIXED(DEG2RAD(0.055953)), FIXED(DEG2RAD(0.027977)) -}; - -/****************** LOCAL FUNCTION DECLARATION SECTION **********************/ - -/* - * void _phy_rf_write_delay(struct hw_data *phw_data); - * void phy_init_rf(struct hw_data *phw_data); - */ - -/****************** FUNCTION DEFINITION SECTION *****************************/ - -static s32 _s13_to_s32(u32 data) -{ - u32 val; - - val = (data & 0x0FFF); - - if ((data & BIT(12)) != 0) - val |= 0xFFFFF000; - - return (s32) val; -} - -/****************************************************************************/ -static s32 _s4_to_s32(u32 data) -{ - s32 val; - - val = (data & 0x0007); - - if ((data & BIT(3)) != 0) - val |= 0xFFFFFFF8; - - return val; -} - -static u32 _s32_to_s4(s32 data) -{ - u32 val; - - if (data > 7) - data = 7; - else if (data < -8) - data = -8; - - val = data & 0x000F; - - return val; -} - -/****************************************************************************/ -static s32 _s5_to_s32(u32 data) -{ - s32 val; - - val = (data & 0x000F); - - if ((data & BIT(4)) != 0) - val |= 0xFFFFFFF0; - - return val; -} - -static u32 _s32_to_s5(s32 data) -{ - u32 val; - - if (data > 15) - data = 15; - else if (data < -16) - data = -16; - - val = data & 0x001F; - - return val; -} - -/****************************************************************************/ -static s32 _s6_to_s32(u32 data) -{ - s32 val; - - val = (data & 0x001F); - - if ((data & BIT(5)) != 0) - val |= 0xFFFFFFE0; - - return val; -} - -static u32 _s32_to_s6(s32 data) -{ - u32 val; - - if (data > 31) - data = 31; - else if (data < -32) - data = -32; - - val = data & 0x003F; - - return val; -} - -/****************************************************************************/ -static s32 _floor(s32 n) -{ - if (n > 0) - n += 5; - else - n -= 5; - - return n/10; -} - -/****************************************************************************/ -/* - * The following code is sqare-root function. - * sqsum is the input and the output is sq_rt; - * The maximum of sqsum = 2^27 -1; - */ -static u32 _sqrt(u32 sqsum) -{ - u32 sq_rt; - - int g0, g1, g2, g3, g4; - int seed; - int next; - int step; - - g4 = sqsum / 100000000; - g3 = (sqsum - g4*100000000) / 1000000; - g2 = (sqsum - g4*100000000 - g3*1000000) / 10000; - g1 = (sqsum - g4*100000000 - g3*1000000 - g2*10000) / 100; - g0 = (sqsum - g4*100000000 - g3*1000000 - g2*10000 - g1*100); - - next = g4; - step = 0; - seed = 0; - while (((seed+1)*(step+1)) <= next) { - step++; - seed++; - } - - sq_rt = seed * 10000; - next = (next-(seed*step))*100 + g3; - - step = 0; - seed = 2 * seed * 10; - while (((seed+1)*(step+1)) <= next) { - step++; - seed++; - } - - sq_rt = sq_rt + step * 1000; - next = (next - seed * step) * 100 + g2; - seed = (seed + step) * 10; - step = 0; - while (((seed+1)*(step+1)) <= next) { - step++; - seed++; - } - - sq_rt = sq_rt + step * 100; - next = (next - seed * step) * 100 + g1; - seed = (seed + step) * 10; - step = 0; - - while (((seed+1)*(step+1)) <= next) { - step++; - seed++; - } - - sq_rt = sq_rt + step * 10; - next = (next - seed * step) * 100 + g0; - seed = (seed + step) * 10; - step = 0; - - while (((seed+1)*(step+1)) <= next) { - step++; - seed++; - } - - sq_rt = sq_rt + step; - - return sq_rt; -} - -/****************************************************************************/ -static void _sin_cos(s32 angle, s32 *sin, s32 *cos) -{ - s32 X, Y, TargetAngle, CurrAngle; - unsigned Step; - - X = FIXED(AG_CONST); /* AG_CONST * cos(0) */ - Y = 0; /* AG_CONST * sin(0) */ - TargetAngle = abs(angle); - CurrAngle = 0; - - for (Step = 0; Step < 12; Step++) { - s32 NewX; - - if (TargetAngle > CurrAngle) { - NewX = X - (Y >> Step); - Y = (X >> Step) + Y; - X = NewX; - CurrAngle += Angles[Step]; - } else { - NewX = X + (Y >> Step); - Y = -(X >> Step) + Y; - X = NewX; - CurrAngle -= Angles[Step]; - } - } - - if (angle > 0) { - *cos = X; - *sin = Y; - } else { - *cos = X; - *sin = -Y; - } -} - -static unsigned char hal_get_dxx_reg(struct hw_data *pHwData, u16 number, - u32 *pValue) -{ - if (number < 0x1000) - number += 0x1000; - return Wb35Reg_ReadSync(pHwData, number, pValue); -} -#define hw_get_dxx_reg(_A, _B, _C) hal_get_dxx_reg(_A, _B, (u32 *)_C) - -static unsigned char hal_set_dxx_reg(struct hw_data *pHwData, u16 number, - u32 value) -{ - unsigned char ret; - - if (number < 0x1000) - number += 0x1000; - ret = Wb35Reg_WriteSync(pHwData, number, value); - return ret; -} -#define hw_set_dxx_reg(_A, _B, _C) hal_set_dxx_reg(_A, _B, (u32)_C) - - -static void _reset_rx_cal(struct hw_data *phw_data) -{ - u32 val; - - hw_get_dxx_reg(phw_data, 0x54, &val); - - if (phw_data->revision == 0x2002) /* 1st-cut */ - val &= 0xFFFF0000; - else /* 2nd-cut */ - val &= 0x000003FF; - - hw_set_dxx_reg(phw_data, 0x54, val); -} - - -/**************for winbond calibration*********/ - - - -/**********************************************/ -static void _rxadc_dc_offset_cancellation_winbond(struct hw_data *phw_data, u32 frequency) -{ - u32 reg_agc_ctrl3; - u32 reg_a_acq_ctrl; - u32 reg_b_acq_ctrl; - u32 val; - - PHY_DEBUG(("[CAL] -> [1]_rxadc_dc_offset_cancellation()\n")); - phy_init_rf(phw_data); - - /* set calibration channel */ - if ((RF_WB_242 == phw_data->phy_type) || - (RF_WB_242_1 == phw_data->phy_type)) /* 20060619.5 Add */{ - if ((frequency >= 2412) && (frequency <= 2484)) { - /* w89rf242 change frequency to 2390Mhz */ - PHY_DEBUG(("[CAL] W89RF242/11G/Channel=2390Mhz\n")); - phy_set_rf_data(phw_data, 3, (3<<24)|0x025586); - - } - } else { - - } - - /* reset cancel_dc_i[9:5] and cancel_dc_q[4:0] in register DC_Cancel */ - hw_get_dxx_reg(phw_data, 0x5C, &val); - val &= ~(0x03FF); - hw_set_dxx_reg(phw_data, 0x5C, val); - - /* reset the TX and RX IQ calibration data */ - hw_set_dxx_reg(phw_data, 0x3C, 0); - hw_set_dxx_reg(phw_data, 0x54, 0); - - hw_set_dxx_reg(phw_data, 0x58, 0x30303030); /* IQ_Alpha Changed */ - - /* a. Disable AGC */ - hw_get_dxx_reg(phw_data, REG_AGC_CTRL3, ®_agc_ctrl3); - reg_agc_ctrl3 &= ~BIT(2); - reg_agc_ctrl3 |= (MASK_LNA_FIX_GAIN|MASK_AGC_FIX); - hw_set_dxx_reg(phw_data, REG_AGC_CTRL3, reg_agc_ctrl3); - - hw_get_dxx_reg(phw_data, REG_AGC_CTRL5, &val); - val |= MASK_AGC_FIX_GAIN; - hw_set_dxx_reg(phw_data, REG_AGC_CTRL5, val); - - /* b. Turn off BB RX */ - hw_get_dxx_reg(phw_data, REG_A_ACQ_CTRL, ®_a_acq_ctrl); - reg_a_acq_ctrl |= MASK_AMER_OFF_REG; - hw_set_dxx_reg(phw_data, REG_A_ACQ_CTRL, reg_a_acq_ctrl); - - hw_get_dxx_reg(phw_data, REG_B_ACQ_CTRL, ®_b_acq_ctrl); - reg_b_acq_ctrl |= MASK_BMER_OFF_REG; - hw_set_dxx_reg(phw_data, REG_B_ACQ_CTRL, reg_b_acq_ctrl); - - /* c. Make sure MAC is in receiving mode - * d. Turn ON ADC calibration - * - ADC calibrator is triggered by this signal rising from 0 to 1 */ - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, &val); - val &= ~MASK_ADC_DC_CAL_STR; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, val); - - val |= MASK_ADC_DC_CAL_STR; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, val); - - /* e. The results are shown in "adc_dc_cal_i[8:0] and adc_dc_cal_q[8:0]" */ -#ifdef _DEBUG - hw_get_dxx_reg(phw_data, REG_OFFSET_READ, &val); - PHY_DEBUG(("[CAL] REG_OFFSET_READ = 0x%08X\n", val)); - - PHY_DEBUG(("[CAL] ** adc_dc_cal_i = %d (0x%04X)\n", - _s9_to_s32(val&0x000001FF), val&0x000001FF)); - PHY_DEBUG(("[CAL] ** adc_dc_cal_q = %d (0x%04X)\n", - _s9_to_s32((val&0x0003FE00)>>9), - (val&0x0003FE00)>>9)); -#endif - - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, &val); - val &= ~MASK_ADC_DC_CAL_STR; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, val); - - /* f. Turn on BB RX */ - /* hw_get_dxx_reg(phw_data, REG_A_ACQ_CTRL, ®_a_acq_ctrl); */ - reg_a_acq_ctrl &= ~MASK_AMER_OFF_REG; - hw_set_dxx_reg(phw_data, REG_A_ACQ_CTRL, reg_a_acq_ctrl); - - /* hw_get_dxx_reg(phw_data, REG_B_ACQ_CTRL, ®_b_acq_ctrl); */ - reg_b_acq_ctrl &= ~MASK_BMER_OFF_REG; - hw_set_dxx_reg(phw_data, REG_B_ACQ_CTRL, reg_b_acq_ctrl); - - /* g. Enable AGC */ - /* hw_get_dxx_reg(phw_data, REG_AGC_CTRL3, &val); */ - reg_agc_ctrl3 |= BIT(2); - reg_agc_ctrl3 &= ~(MASK_LNA_FIX_GAIN|MASK_AGC_FIX); - hw_set_dxx_reg(phw_data, REG_AGC_CTRL3, reg_agc_ctrl3); -} - -/* 20060612.1.a 20060718.1 Modify */ -static u8 _tx_iq_calibration_loop_winbond(struct hw_data *phw_data, - s32 a_2_threshold, - s32 b_2_threshold) -{ - u32 reg_mode_ctrl; - s32 iq_mag_0_tx; - s32 iqcal_tone_i0; - s32 iqcal_tone_q0; - s32 iqcal_tone_i; - s32 iqcal_tone_q; - u32 sqsum; - s32 rot_i_b; - s32 rot_q_b; - s32 tx_cal_flt_b[4]; - s32 tx_cal[4]; - s32 tx_cal_reg[4]; - s32 a_2, b_2; - s32 sin_b, sin_2b; - s32 cos_b, cos_2b; - s32 divisor; - s32 temp1, temp2; - u32 val; - u16 loop; - s32 iqcal_tone_i_avg, iqcal_tone_q_avg; - u8 verify_count; - int capture_time; - - PHY_DEBUG(("[CAL] -> _tx_iq_calibration_loop()\n")); - PHY_DEBUG(("[CAL] ** a_2_threshold = %d\n", a_2_threshold)); - PHY_DEBUG(("[CAL] ** b_2_threshold = %d\n", b_2_threshold)); - - verify_count = 0; - - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (read) = 0x%08X\n", reg_mode_ctrl)); - - loop = LOOP_TIMES; - - while (loop > 0) { - PHY_DEBUG(("[CAL] [%d.] <_tx_iq_calibration_loop>\n", - (LOOP_TIMES-loop+1))); - - iqcal_tone_i_avg = 0; - iqcal_tone_q_avg = 0; - if (!hw_set_dxx_reg(phw_data, 0x3C, 0x00)) /* 20060718.1 modify */ - return 0; - for (capture_time = 0; capture_time < 10; capture_time++) { - /* - * a. Set iqcal_mode[1:0] to 0x2 and set "calib_start" - * to 0x1 to enable "IQ calibration Mode II" - */ - reg_mode_ctrl &= ~(MASK_IQCAL_TONE_SEL|MASK_IQCAL_MODE); - reg_mode_ctrl &= ~MASK_IQCAL_MODE; - reg_mode_ctrl |= (MASK_CALIB_START|0x02); - reg_mode_ctrl |= (MASK_CALIB_START|0x02|2<<2); - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* b. */ - hw_get_dxx_reg(phw_data, REG_CALIB_READ1, &val); - PHY_DEBUG(("[CAL] CALIB_READ1 = 0x%08X\n", val)); - - iqcal_tone_i0 = _s13_to_s32(val & 0x00001FFF); - iqcal_tone_q0 = _s13_to_s32((val & 0x03FFE000) >> 13); - PHY_DEBUG(("[CAL] ** iqcal_tone_i0=%d, iqcal_tone_q0=%d\n", - iqcal_tone_i0, iqcal_tone_q0)); - - sqsum = iqcal_tone_i0*iqcal_tone_i0 + - iqcal_tone_q0*iqcal_tone_q0; - iq_mag_0_tx = (s32) _sqrt(sqsum); - PHY_DEBUG(("[CAL] ** iq_mag_0_tx=%d\n", iq_mag_0_tx)); - - /* c. Set "calib_start" to 0x0 */ - reg_mode_ctrl &= ~MASK_CALIB_START; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* - * d. Set iqcal_mode[1:0] to 0x3 and set "calib_start" - * to 0x1 to enable "IQ calibration Mode II" - */ - /* hw_get_dxx_reg(phw_data, REG_MODE_CTRL, &val); */ - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl); - reg_mode_ctrl &= ~MASK_IQCAL_MODE; - reg_mode_ctrl |= (MASK_CALIB_START|0x03); - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* e. */ - hw_get_dxx_reg(phw_data, REG_CALIB_READ1, &val); - PHY_DEBUG(("[CAL] CALIB_READ1 = 0x%08X\n", val)); - - iqcal_tone_i = _s13_to_s32(val & 0x00001FFF); - iqcal_tone_q = _s13_to_s32((val & 0x03FFE000) >> 13); - PHY_DEBUG(("[CAL] ** iqcal_tone_i = %d, iqcal_tone_q = %d\n", - iqcal_tone_i, iqcal_tone_q)); - if (capture_time == 0) - continue; - else { - iqcal_tone_i_avg = (iqcal_tone_i_avg*(capture_time-1) + iqcal_tone_i)/capture_time; - iqcal_tone_q_avg = (iqcal_tone_q_avg*(capture_time-1) + iqcal_tone_q)/capture_time; - } - } - - iqcal_tone_i = iqcal_tone_i_avg; - iqcal_tone_q = iqcal_tone_q_avg; - - - rot_i_b = (iqcal_tone_i * iqcal_tone_i0 + - iqcal_tone_q * iqcal_tone_q0) / 1024; - rot_q_b = (iqcal_tone_i * iqcal_tone_q0 * (-1) + - iqcal_tone_q * iqcal_tone_i0) / 1024; - PHY_DEBUG(("[CAL] ** rot_i_b = %d, rot_q_b = %d\n", - rot_i_b, rot_q_b)); - - /* f. */ - divisor = ((iq_mag_0_tx * iq_mag_0_tx * 2)/1024 - rot_i_b) * 2; - - if (divisor == 0) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> ERROR *******\n")); - PHY_DEBUG(("[CAL] ** divisor=0 to calculate EPS and THETA !!\n")); - PHY_DEBUG(("[CAL] ******************************************\n")); - break; - } - - a_2 = (rot_i_b * 32768) / divisor; - b_2 = (rot_q_b * (-32768)) / divisor; - PHY_DEBUG(("[CAL] ***** EPSILON/2 = %d\n", a_2)); - PHY_DEBUG(("[CAL] ***** THETA/2 = %d\n", b_2)); - - phw_data->iq_rsdl_gain_tx_d2 = a_2; - phw_data->iq_rsdl_phase_tx_d2 = b_2; - - /* if ((abs(a_2) < 150) && (abs(b_2) < 100)) */ - /* if ((abs(a_2) < 200) && (abs(b_2) < 200)) */ - if ((abs(a_2) < a_2_threshold) && (abs(b_2) < b_2_threshold)) { - verify_count++; - - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> *************\n")); - PHY_DEBUG(("[CAL] ** VERIFY OK # %d !!\n", verify_count)); - PHY_DEBUG(("[CAL] ******************************************\n")); - - if (verify_count > 2) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION (EPS,THETA) OK !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - return 0; - } - - continue; - } else - verify_count = 0; - - _sin_cos(b_2, &sin_b, &cos_b); - _sin_cos(b_2*2, &sin_2b, &cos_2b); - PHY_DEBUG(("[CAL] ** sin(b/2)=%d, cos(b/2)=%d\n", sin_b, cos_b)); - PHY_DEBUG(("[CAL] ** sin(b)=%d, cos(b)=%d\n", sin_2b, cos_2b)); - - if (cos_2b == 0) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> ERROR *******\n")); - PHY_DEBUG(("[CAL] ** cos(b)=0 !!\n")); - PHY_DEBUG(("[CAL] ******************************************\n")); - break; - } - - /* 1280 * 32768 = 41943040 */ - temp1 = (41943040/cos_2b)*cos_b; - - /* temp2 = (41943040/cos_2b)*sin_b*(-1); */ - if (phw_data->revision == 0x2002) /* 1st-cut */ - temp2 = (41943040/cos_2b)*sin_b*(-1); - else /* 2nd-cut */ - temp2 = (41943040*4/cos_2b)*sin_b*(-1); - - tx_cal_flt_b[0] = _floor(temp1/(32768+a_2)); - tx_cal_flt_b[1] = _floor(temp2/(32768+a_2)); - tx_cal_flt_b[2] = _floor(temp2/(32768-a_2)); - tx_cal_flt_b[3] = _floor(temp1/(32768-a_2)); - PHY_DEBUG(("[CAL] ** tx_cal_flt_b[0] = %d\n", tx_cal_flt_b[0])); - PHY_DEBUG(("[CAL] tx_cal_flt_b[1] = %d\n", tx_cal_flt_b[1])); - PHY_DEBUG(("[CAL] tx_cal_flt_b[2] = %d\n", tx_cal_flt_b[2])); - PHY_DEBUG(("[CAL] tx_cal_flt_b[3] = %d\n", tx_cal_flt_b[3])); - - tx_cal[2] = tx_cal_flt_b[2]; - tx_cal[2] = tx_cal[2] + 3; - tx_cal[1] = tx_cal[2]; - tx_cal[3] = tx_cal_flt_b[3] - 128; - tx_cal[0] = -tx_cal[3] + 1; - - PHY_DEBUG(("[CAL] tx_cal[0] = %d\n", tx_cal[0])); - PHY_DEBUG(("[CAL] tx_cal[1] = %d\n", tx_cal[1])); - PHY_DEBUG(("[CAL] tx_cal[2] = %d\n", tx_cal[2])); - PHY_DEBUG(("[CAL] tx_cal[3] = %d\n", tx_cal[3])); - - /* if ((tx_cal[0] == 0) && (tx_cal[1] == 0) && - (tx_cal[2] == 0) && (tx_cal[3] == 0)) - { */ - /* PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> *************\n")); - * PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION COMPLETE !!\n")); - * PHY_DEBUG(("[CAL] ******************************************\n")); - * return 0; - } */ - - /* g. */ - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - PHY_DEBUG(("[CAL] ** 0x54 = 0x%08X\n", val)); - tx_cal_reg[0] = _s4_to_s32((val & 0xF0000000) >> 28); - tx_cal_reg[1] = _s4_to_s32((val & 0x0F000000) >> 24); - tx_cal_reg[2] = _s4_to_s32((val & 0x00F00000) >> 20); - tx_cal_reg[3] = _s4_to_s32((val & 0x000F0000) >> 16); - } else /* 2nd-cut */{ - hw_get_dxx_reg(phw_data, 0x3C, &val); - PHY_DEBUG(("[CAL] ** 0x3C = 0x%08X\n", val)); - tx_cal_reg[0] = _s5_to_s32((val & 0xF8000000) >> 27); - tx_cal_reg[1] = _s6_to_s32((val & 0x07E00000) >> 21); - tx_cal_reg[2] = _s6_to_s32((val & 0x001F8000) >> 15); - tx_cal_reg[3] = _s5_to_s32((val & 0x00007C00) >> 10); - - } - - PHY_DEBUG(("[CAL] ** tx_cal_reg[0] = %d\n", tx_cal_reg[0])); - PHY_DEBUG(("[CAL] tx_cal_reg[1] = %d\n", tx_cal_reg[1])); - PHY_DEBUG(("[CAL] tx_cal_reg[2] = %d\n", tx_cal_reg[2])); - PHY_DEBUG(("[CAL] tx_cal_reg[3] = %d\n", tx_cal_reg[3])); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - if (((tx_cal_reg[0] == 7) || (tx_cal_reg[0] == (-8))) && - ((tx_cal_reg[3] == 7) || (tx_cal_reg[3] == (-8)))) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION SATUATION !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - break; - } - } else /* 2nd-cut */{ - if (((tx_cal_reg[0] == 31) || (tx_cal_reg[0] == (-32))) && - ((tx_cal_reg[3] == 31) || (tx_cal_reg[3] == (-32)))) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION SATUATION !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - break; - } - } - - tx_cal[0] = tx_cal[0] + tx_cal_reg[0]; - tx_cal[1] = tx_cal[1] + tx_cal_reg[1]; - tx_cal[2] = tx_cal[2] + tx_cal_reg[2]; - tx_cal[3] = tx_cal[3] + tx_cal_reg[3]; - PHY_DEBUG(("[CAL] ** apply tx_cal[0] = %d\n", tx_cal[0])); - PHY_DEBUG(("[CAL] apply tx_cal[1] = %d\n", tx_cal[1])); - PHY_DEBUG(("[CAL] apply tx_cal[2] = %d\n", tx_cal[2])); - PHY_DEBUG(("[CAL] apply tx_cal[3] = %d\n", tx_cal[3])); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - val &= 0x0000FFFF; - val |= ((_s32_to_s4(tx_cal[0]) << 28)| - (_s32_to_s4(tx_cal[1]) << 24)| - (_s32_to_s4(tx_cal[2]) << 20)| - (_s32_to_s4(tx_cal[3]) << 16)); - hw_set_dxx_reg(phw_data, 0x54, val); - PHY_DEBUG(("[CAL] ** CALIB_DATA = 0x%08X\n", val)); - return 0; - } else /* 2nd-cut */{ - val &= 0x000003FF; - val |= ((_s32_to_s5(tx_cal[0]) << 27)| - (_s32_to_s6(tx_cal[1]) << 21)| - (_s32_to_s6(tx_cal[2]) << 15)| - (_s32_to_s5(tx_cal[3]) << 10)); - hw_set_dxx_reg(phw_data, 0x3C, val); - PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION = 0x%08X\n", val)); - return 0; - } - - /* i. Set "calib_start" to 0x0 */ - reg_mode_ctrl &= ~MASK_CALIB_START; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - loop--; - } - - return 1; -} - -static void _tx_iq_calibration_winbond(struct hw_data *phw_data) -{ - u32 reg_agc_ctrl3; -#ifdef _DEBUG - s32 tx_cal_reg[4]; - -#endif - u32 reg_mode_ctrl; - u32 val; - u8 result; - - PHY_DEBUG(("[CAL] -> [4]_tx_iq_calibration()\n")); - - /* 0x01 0xEE3FC2 ; 3B8FF ; Calibration (6a). enable TX IQ calibration loop circuits */ - phy_set_rf_data(phw_data, 1, (1<<24)|0xEE3FC2); - /* 0x0B 0x1905D6 ; 06417 ; Calibration (6b). enable TX I/Q cal loop squaring circuit */ - phy_set_rf_data(phw_data, 11, (11<<24)|0x19BDD6); /* 20060612.1.a 0x1905D6); */ - /* 0x05 0x24C60A ; 09318 ; Calibration (6c). setting TX-VGA gain: TXGCH=2 & GPK=110 --> to be optimized */ - phy_set_rf_data(phw_data, 5, (5<<24)|0x24C60A); /* 0x24C60A (high temperature) */ - /* 0x06 0x06880C ; 01A20 ; Calibration (6d). RXGCH=00; RXGCL=100 000 (RXVGA=32) --> to be optimized */ - phy_set_rf_data(phw_data, 6, (6<<24)|0x34880C); /* 20060612.1.a 0x06890C); */ - /* 0x00 0xFDF1C0 ; 3F7C7 ; Calibration (6e). turn on IQ imbalance/Test mode */ - phy_set_rf_data(phw_data, 0, (0<<24)|0xFDF1C0); - /* ; [BB-chip]: Calibration (6f).Send test pattern */ - /* ; [BB-chip]: Calibration (6g). Search RXGCL optimal value */ - /* ; [BB-chip]: Calibration (6h). Calculate TX-path IQ imbalance and setting TX path IQ compensation table */ - /* phy_set_rf_data(phw_data, 3, (3<<24)|0x025586); */ - - msleep(30); /* 20060612.1.a 30ms delay. Add the follow 2 lines */ - /* To adjust TXVGA to fit iq_mag_0 range from 1250 ~ 1750 */ - adjust_TXVGA_for_iq_mag(phw_data); - - /* a. Disable AGC */ - hw_get_dxx_reg(phw_data, REG_AGC_CTRL3, ®_agc_ctrl3); - reg_agc_ctrl3 &= ~BIT(2); - reg_agc_ctrl3 |= (MASK_LNA_FIX_GAIN|MASK_AGC_FIX); - hw_set_dxx_reg(phw_data, REG_AGC_CTRL3, reg_agc_ctrl3); - - hw_get_dxx_reg(phw_data, REG_AGC_CTRL5, &val); - val |= MASK_AGC_FIX_GAIN; - hw_set_dxx_reg(phw_data, REG_AGC_CTRL5, val); - - result = _tx_iq_calibration_loop_winbond(phw_data, 150, 100); - - if (result > 0) { - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - val &= 0x0000FFFF; - hw_set_dxx_reg(phw_data, 0x54, val); - } else /* 2nd-cut*/{ - hw_get_dxx_reg(phw_data, 0x3C, &val); - val &= 0x000003FF; - hw_set_dxx_reg(phw_data, 0x3C, val); - } - - result = _tx_iq_calibration_loop_winbond(phw_data, 300, 200); - - if (result > 0) { - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - val &= 0x0000FFFF; - hw_set_dxx_reg(phw_data, 0x54, val); - } else /* 2nd-cut*/{ - hw_get_dxx_reg(phw_data, 0x3C, &val); - val &= 0x000003FF; - hw_set_dxx_reg(phw_data, 0x3C, val); - } - - result = _tx_iq_calibration_loop_winbond(phw_data, 500, 400); - if (result > 0) { - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - val &= 0x0000FFFF; - hw_set_dxx_reg(phw_data, 0x54, val); - } else /* 2nd-cut */{ - hw_get_dxx_reg(phw_data, 0x3C, &val); - val &= 0x000003FF; - hw_set_dxx_reg(phw_data, 0x3C, val); - } - - - result = _tx_iq_calibration_loop_winbond(phw_data, 700, 500); - - if (result > 0) { - PHY_DEBUG(("[CAL] ** <_tx_iq_calibration> **************\n")); - PHY_DEBUG(("[CAL] ** TX_IQ_CALIBRATION FAILURE !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - val &= 0x0000FFFF; - hw_set_dxx_reg(phw_data, 0x54, val); - } else /* 2nd-cut */{ - hw_get_dxx_reg(phw_data, 0x3C, &val); - val &= 0x000003FF; - hw_set_dxx_reg(phw_data, 0x3C, val); - } - } - } - } - } - - /* i. Set "calib_start" to 0x0 */ - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl); - reg_mode_ctrl &= ~MASK_CALIB_START; - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* g. Enable AGC */ - /* hw_get_dxx_reg(phw_data, REG_AGC_CTRL3, &val); */ - reg_agc_ctrl3 |= BIT(2); - reg_agc_ctrl3 &= ~(MASK_LNA_FIX_GAIN|MASK_AGC_FIX); - hw_set_dxx_reg(phw_data, REG_AGC_CTRL3, reg_agc_ctrl3); - -#ifdef _DEBUG - if (phw_data->revision == 0x2002) /* 1st-cut */{ - hw_get_dxx_reg(phw_data, 0x54, &val); - PHY_DEBUG(("[CAL] ** 0x54 = 0x%08X\n", val)); - tx_cal_reg[0] = _s4_to_s32((val & 0xF0000000) >> 28); - tx_cal_reg[1] = _s4_to_s32((val & 0x0F000000) >> 24); - tx_cal_reg[2] = _s4_to_s32((val & 0x00F00000) >> 20); - tx_cal_reg[3] = _s4_to_s32((val & 0x000F0000) >> 16); - } else /* 2nd-cut */ { - hw_get_dxx_reg(phw_data, 0x3C, &val); - PHY_DEBUG(("[CAL] ** 0x3C = 0x%08X\n", val)); - tx_cal_reg[0] = _s5_to_s32((val & 0xF8000000) >> 27); - tx_cal_reg[1] = _s6_to_s32((val & 0x07E00000) >> 21); - tx_cal_reg[2] = _s6_to_s32((val & 0x001F8000) >> 15); - tx_cal_reg[3] = _s5_to_s32((val & 0x00007C00) >> 10); - - } - - PHY_DEBUG(("[CAL] ** tx_cal_reg[0] = %d\n", tx_cal_reg[0])); - PHY_DEBUG(("[CAL] tx_cal_reg[1] = %d\n", tx_cal_reg[1])); - PHY_DEBUG(("[CAL] tx_cal_reg[2] = %d\n", tx_cal_reg[2])); - PHY_DEBUG(("[CAL] tx_cal_reg[3] = %d\n", tx_cal_reg[3])); -#endif - - - /* - * for test - BEN - * RF Control Override - */ -} - -/*****************************************************/ -static u8 _rx_iq_calibration_loop_winbond(struct hw_data *phw_data, u16 factor, u32 frequency) -{ - u32 reg_mode_ctrl; - s32 iqcal_tone_i; - s32 iqcal_tone_q; - s32 iqcal_image_i; - s32 iqcal_image_q; - s32 rot_tone_i_b; - s32 rot_tone_q_b; - s32 rot_image_i_b; - s32 rot_image_q_b; - s32 rx_cal_flt_b[4]; - s32 rx_cal[4]; - s32 rx_cal_reg[4]; - s32 a_2, b_2; - s32 sin_b, sin_2b; - s32 cos_b, cos_2b; - s32 temp1, temp2; - u32 val; - u16 loop; - - u32 pwr_tone; - u32 pwr_image; - u8 verify_count; - - s32 iqcal_tone_i_avg, iqcal_tone_q_avg; - s32 iqcal_image_i_avg, iqcal_image_q_avg; - u16 capture_time; - - PHY_DEBUG(("[CAL] -> [5]_rx_iq_calibration_loop()\n")); - PHY_DEBUG(("[CAL] ** factor = %d\n", factor)); - - hw_set_dxx_reg(phw_data, 0x58, 0x44444444); /* IQ_Alpha */ - - /* b. */ - - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (read) = 0x%08X\n", reg_mode_ctrl)); - - verify_count = 0; - - /* for (loop = 0; loop < 1; loop++) */ - /* for (loop = 0; loop < LOOP_TIMES; loop++) */ - loop = LOOP_TIMES; - while (loop > 0) { - PHY_DEBUG(("[CAL] [%d.] <_rx_iq_calibration_loop>\n", - (LOOP_TIMES-loop+1))); - iqcal_tone_i_avg = 0; - iqcal_tone_q_avg = 0; - iqcal_image_i_avg = 0; - iqcal_image_q_avg = 0; - capture_time = 0; - - for (capture_time = 0; capture_time < 10; capture_time++) { - /* i. Set "calib_start" to 0x0 */ - reg_mode_ctrl &= ~MASK_CALIB_START; - if (!hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl))/*20060718.1 modify */ - return 0; - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - reg_mode_ctrl &= ~MASK_IQCAL_MODE; - reg_mode_ctrl |= (MASK_CALIB_START|0x1); - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* c. */ - hw_get_dxx_reg(phw_data, REG_CALIB_READ1, &val); - PHY_DEBUG(("[CAL] CALIB_READ1 = 0x%08X\n", val)); - - iqcal_tone_i = _s13_to_s32(val & 0x00001FFF); - iqcal_tone_q = _s13_to_s32((val & 0x03FFE000) >> 13); - PHY_DEBUG(("[CAL] ** iqcal_tone_i = %d, iqcal_tone_q = %d\n", - iqcal_tone_i, iqcal_tone_q)); - - hw_get_dxx_reg(phw_data, REG_CALIB_READ2, &val); - PHY_DEBUG(("[CAL] CALIB_READ2 = 0x%08X\n", val)); - - iqcal_image_i = _s13_to_s32(val & 0x00001FFF); - iqcal_image_q = _s13_to_s32((val & 0x03FFE000) >> 13); - PHY_DEBUG(("[CAL] ** iqcal_image_i = %d, iqcal_image_q = %d\n", - iqcal_image_i, iqcal_image_q)); - if (capture_time == 0) - continue; - else { - iqcal_image_i_avg = (iqcal_image_i_avg*(capture_time-1) + iqcal_image_i)/capture_time; - iqcal_image_q_avg = (iqcal_image_q_avg*(capture_time-1) + iqcal_image_q)/capture_time; - iqcal_tone_i_avg = (iqcal_tone_i_avg*(capture_time-1) + iqcal_tone_i)/capture_time; - iqcal_tone_q_avg = (iqcal_tone_q_avg*(capture_time-1) + iqcal_tone_q)/capture_time; - } - } - - - iqcal_image_i = iqcal_image_i_avg; - iqcal_image_q = iqcal_image_q_avg; - iqcal_tone_i = iqcal_tone_i_avg; - iqcal_tone_q = iqcal_tone_q_avg; - - /* d. */ - rot_tone_i_b = (iqcal_tone_i * iqcal_tone_i + - iqcal_tone_q * iqcal_tone_q) / 1024; - rot_tone_q_b = (iqcal_tone_i * iqcal_tone_q * (-1) + - iqcal_tone_q * iqcal_tone_i) / 1024; - rot_image_i_b = (iqcal_image_i * iqcal_tone_i - - iqcal_image_q * iqcal_tone_q) / 1024; - rot_image_q_b = (iqcal_image_i * iqcal_tone_q + - iqcal_image_q * iqcal_tone_i) / 1024; - - PHY_DEBUG(("[CAL] ** rot_tone_i_b = %d\n", rot_tone_i_b)); - PHY_DEBUG(("[CAL] ** rot_tone_q_b = %d\n", rot_tone_q_b)); - PHY_DEBUG(("[CAL] ** rot_image_i_b = %d\n", rot_image_i_b)); - PHY_DEBUG(("[CAL] ** rot_image_q_b = %d\n", rot_image_q_b)); - - /* f. */ - if (rot_tone_i_b == 0) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> ERROR *******\n")); - PHY_DEBUG(("[CAL] ** rot_tone_i_b=0 to calculate EPS and THETA !!\n")); - PHY_DEBUG(("[CAL] ******************************************\n")); - break; - } - - a_2 = (rot_image_i_b * 32768) / rot_tone_i_b - - phw_data->iq_rsdl_gain_tx_d2; - b_2 = (rot_image_q_b * 32768) / rot_tone_i_b - - phw_data->iq_rsdl_phase_tx_d2; - - PHY_DEBUG(("[CAL] ** iq_rsdl_gain_tx_d2 = %d\n", - phw_data->iq_rsdl_gain_tx_d2)); - PHY_DEBUG(("[CAL] ** iq_rsdl_phase_tx_d2= %d\n", - phw_data->iq_rsdl_phase_tx_d2)); - PHY_DEBUG(("[CAL] ***** EPSILON/2 = %d\n", a_2)); - PHY_DEBUG(("[CAL] ***** THETA/2 = %d\n", b_2)); - - _sin_cos(b_2, &sin_b, &cos_b); - _sin_cos(b_2*2, &sin_2b, &cos_2b); - PHY_DEBUG(("[CAL] ** sin(b/2)=%d, cos(b/2)=%d\n", sin_b, cos_b)); - PHY_DEBUG(("[CAL] ** sin(b)=%d, cos(b)=%d\n", sin_2b, cos_2b)); - - if (cos_2b == 0) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> ERROR *******\n")); - PHY_DEBUG(("[CAL] ** cos(b)=0 !!\n")); - PHY_DEBUG(("[CAL] ******************************************\n")); - break; - } - - /* 1280 * 32768 = 41943040 */ - temp1 = (41943040/cos_2b)*cos_b; - - /* temp2 = (41943040/cos_2b)*sin_b*(-1); */ - if (phw_data->revision == 0x2002)/* 1st-cut */ - temp2 = (41943040/cos_2b)*sin_b*(-1); - else/* 2nd-cut */ - temp2 = (41943040*4/cos_2b)*sin_b*(-1); - - rx_cal_flt_b[0] = _floor(temp1/(32768+a_2)); - rx_cal_flt_b[1] = _floor(temp2/(32768-a_2)); - rx_cal_flt_b[2] = _floor(temp2/(32768+a_2)); - rx_cal_flt_b[3] = _floor(temp1/(32768-a_2)); - - PHY_DEBUG(("[CAL] ** rx_cal_flt_b[0] = %d\n", rx_cal_flt_b[0])); - PHY_DEBUG(("[CAL] rx_cal_flt_b[1] = %d\n", rx_cal_flt_b[1])); - PHY_DEBUG(("[CAL] rx_cal_flt_b[2] = %d\n", rx_cal_flt_b[2])); - PHY_DEBUG(("[CAL] rx_cal_flt_b[3] = %d\n", rx_cal_flt_b[3])); - - rx_cal[0] = rx_cal_flt_b[0] - 128; - rx_cal[1] = rx_cal_flt_b[1]; - rx_cal[2] = rx_cal_flt_b[2]; - rx_cal[3] = rx_cal_flt_b[3] - 128; - PHY_DEBUG(("[CAL] ** rx_cal[0] = %d\n", rx_cal[0])); - PHY_DEBUG(("[CAL] rx_cal[1] = %d\n", rx_cal[1])); - PHY_DEBUG(("[CAL] rx_cal[2] = %d\n", rx_cal[2])); - PHY_DEBUG(("[CAL] rx_cal[3] = %d\n", rx_cal[3])); - - /* e. */ - pwr_tone = (iqcal_tone_i*iqcal_tone_i + iqcal_tone_q*iqcal_tone_q); - pwr_image = (iqcal_image_i*iqcal_image_i + - iqcal_image_q*iqcal_image_q)*factor; - - PHY_DEBUG(("[CAL] ** pwr_tone = %d\n", pwr_tone)); - PHY_DEBUG(("[CAL] ** pwr_image = %d\n", pwr_image)); - - if (pwr_tone > pwr_image) { - verify_count++; - - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> *************\n")); - PHY_DEBUG(("[CAL] ** VERIFY OK # %d !!\n", verify_count)); - PHY_DEBUG(("[CAL] ******************************************\n")); - - if (verify_count > 2) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** RX_IQ_CALIBRATION OK !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - return 0; - } - - continue; - } - /* g. */ - hw_get_dxx_reg(phw_data, 0x54, &val); - PHY_DEBUG(("[CAL] ** 0x54 = 0x%08X\n", val)); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - rx_cal_reg[0] = _s4_to_s32((val & 0x0000F000) >> 12); - rx_cal_reg[1] = _s4_to_s32((val & 0x00000F00) >> 8); - rx_cal_reg[2] = _s4_to_s32((val & 0x000000F0) >> 4); - rx_cal_reg[3] = _s4_to_s32((val & 0x0000000F)); - } else /* 2nd-cut */{ - rx_cal_reg[0] = _s5_to_s32((val & 0xF8000000) >> 27); - rx_cal_reg[1] = _s6_to_s32((val & 0x07E00000) >> 21); - rx_cal_reg[2] = _s6_to_s32((val & 0x001F8000) >> 15); - rx_cal_reg[3] = _s5_to_s32((val & 0x00007C00) >> 10); - } - - PHY_DEBUG(("[CAL] ** rx_cal_reg[0] = %d\n", rx_cal_reg[0])); - PHY_DEBUG(("[CAL] rx_cal_reg[1] = %d\n", rx_cal_reg[1])); - PHY_DEBUG(("[CAL] rx_cal_reg[2] = %d\n", rx_cal_reg[2])); - PHY_DEBUG(("[CAL] rx_cal_reg[3] = %d\n", rx_cal_reg[3])); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - if (((rx_cal_reg[0] == 7) || (rx_cal_reg[0] == (-8))) && - ((rx_cal_reg[3] == 7) || (rx_cal_reg[3] == (-8)))) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** RX_IQ_CALIBRATION SATUATION !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - break; - } - } else /* 2nd-cut */{ - if (((rx_cal_reg[0] == 31) || (rx_cal_reg[0] == (-32))) && - ((rx_cal_reg[3] == 31) || (rx_cal_reg[3] == (-32)))) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration_loop> *********\n")); - PHY_DEBUG(("[CAL] ** RX_IQ_CALIBRATION SATUATION !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - break; - } - } - - rx_cal[0] = rx_cal[0] + rx_cal_reg[0]; - rx_cal[1] = rx_cal[1] + rx_cal_reg[1]; - rx_cal[2] = rx_cal[2] + rx_cal_reg[2]; - rx_cal[3] = rx_cal[3] + rx_cal_reg[3]; - PHY_DEBUG(("[CAL] ** apply rx_cal[0] = %d\n", rx_cal[0])); - PHY_DEBUG(("[CAL] apply rx_cal[1] = %d\n", rx_cal[1])); - PHY_DEBUG(("[CAL] apply rx_cal[2] = %d\n", rx_cal[2])); - PHY_DEBUG(("[CAL] apply rx_cal[3] = %d\n", rx_cal[3])); - - hw_get_dxx_reg(phw_data, 0x54, &val); - if (phw_data->revision == 0x2002) /* 1st-cut */{ - val &= 0x0000FFFF; - val |= ((_s32_to_s4(rx_cal[0]) << 12)| - (_s32_to_s4(rx_cal[1]) << 8)| - (_s32_to_s4(rx_cal[2]) << 4)| - (_s32_to_s4(rx_cal[3]))); - hw_set_dxx_reg(phw_data, 0x54, val); - } else /* 2nd-cut */{ - val &= 0x000003FF; - val |= ((_s32_to_s5(rx_cal[0]) << 27)| - (_s32_to_s6(rx_cal[1]) << 21)| - (_s32_to_s6(rx_cal[2]) << 15)| - (_s32_to_s5(rx_cal[3]) << 10)); - hw_set_dxx_reg(phw_data, 0x54, val); - - if (loop == 3) - return 0; - } - PHY_DEBUG(("[CAL] ** CALIB_DATA = 0x%08X\n", val)); - - loop--; - } - - return 1; -} - -/*************************************************/ - -/***************************************************************/ -static void _rx_iq_calibration_winbond(struct hw_data *phw_data, u32 frequency) -{ -/* figo 20050523 marked this flag for can't compile for release */ -#ifdef _DEBUG - s32 rx_cal_reg[4]; - u32 val; -#endif - - u8 result; - - PHY_DEBUG(("[CAL] -> [5]_rx_iq_calibration()\n")); -/* a. Set RFIC to "RX calibration mode" */ - /* ; ----- Calibration (7). RX path IQ imbalance calibration loop */ - /* 0x01 0xFFBFC2 ; 3FEFF ; Calibration (7a). enable RX IQ calibration loop circuits */ - phy_set_rf_data(phw_data, 1, (1<<24)|0xEFBFC2); - /* 0x0B 0x1A01D6 ; 06817 ; Calibration (7b). enable RX I/Q cal loop SW1 circuits */ - phy_set_rf_data(phw_data, 11, (11<<24)|0x1A05D6); - /* 0x05 0x24848A ; 09212 ; Calibration (7c). setting TX-VGA gain (TXGCH) to 2 --> to be optimized */ - phy_set_rf_data(phw_data, 5, (5<<24) | phw_data->txvga_setting_for_cal); - /* 0x06 0x06840C ; 01A10 ; Calibration (7d). RXGCH=00; RXGCL=010 000 (RXVGA) --> to be optimized */ - phy_set_rf_data(phw_data, 6, (6<<24)|0x06834C); - /* 0x00 0xFFF1C0 ; 3F7C7 ; Calibration (7e). turn on IQ imbalance/Test mode */ - phy_set_rf_data(phw_data, 0, (0<<24)|0xFFF1C0); - - /* ; [BB-chip]: Calibration (7f). Send test pattern */ - /* ; [BB-chip]: Calibration (7g). Search RXGCL optimal value */ - /* ; [BB-chip]: Calibration (7h). Calculate RX-path IQ imbalance and setting RX path IQ compensation table */ - - result = _rx_iq_calibration_loop_winbond(phw_data, 12589, frequency); - - if (result > 0) { - _reset_rx_cal(phw_data); - result = _rx_iq_calibration_loop_winbond(phw_data, 7943, frequency); - - if (result > 0) { - _reset_rx_cal(phw_data); - result = _rx_iq_calibration_loop_winbond(phw_data, 5011, frequency); - - if (result > 0) { - PHY_DEBUG(("[CAL] ** <_rx_iq_calibration> **************\n")); - PHY_DEBUG(("[CAL] ** RX_IQ_CALIBRATION FAILURE !!\n")); - PHY_DEBUG(("[CAL] **************************************\n")); - _reset_rx_cal(phw_data); - } - } - } - -#ifdef _DEBUG - hw_get_dxx_reg(phw_data, 0x54, &val); - PHY_DEBUG(("[CAL] ** 0x54 = 0x%08X\n", val)); - - if (phw_data->revision == 0x2002) /* 1st-cut */{ - rx_cal_reg[0] = _s4_to_s32((val & 0x0000F000) >> 12); - rx_cal_reg[1] = _s4_to_s32((val & 0x00000F00) >> 8); - rx_cal_reg[2] = _s4_to_s32((val & 0x000000F0) >> 4); - rx_cal_reg[3] = _s4_to_s32((val & 0x0000000F)); - } else /* 2nd-cut */{ - rx_cal_reg[0] = _s5_to_s32((val & 0xF8000000) >> 27); - rx_cal_reg[1] = _s6_to_s32((val & 0x07E00000) >> 21); - rx_cal_reg[2] = _s6_to_s32((val & 0x001F8000) >> 15); - rx_cal_reg[3] = _s5_to_s32((val & 0x00007C00) >> 10); - } - - PHY_DEBUG(("[CAL] ** rx_cal_reg[0] = %d\n", rx_cal_reg[0])); - PHY_DEBUG(("[CAL] rx_cal_reg[1] = %d\n", rx_cal_reg[1])); - PHY_DEBUG(("[CAL] rx_cal_reg[2] = %d\n", rx_cal_reg[2])); - PHY_DEBUG(("[CAL] rx_cal_reg[3] = %d\n", rx_cal_reg[3])); -#endif - -} - -/*******************************************************/ -void phy_calibration_winbond(struct hw_data *phw_data, u32 frequency) -{ - u32 reg_mode_ctrl; - u32 iq_alpha; - - PHY_DEBUG(("[CAL] -> phy_calibration_winbond()\n")); - - hw_get_dxx_reg(phw_data, 0x58, &iq_alpha); - - _rxadc_dc_offset_cancellation_winbond(phw_data, frequency); - /* _txidac_dc_offset_cancellation_winbond(phw_data); */ - /* _txqdac_dc_offset_cancellation_winbond(phw_data); */ - - _tx_iq_calibration_winbond(phw_data); - _rx_iq_calibration_winbond(phw_data, frequency); - - /*********************************************************************/ - hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl); - reg_mode_ctrl &= ~(MASK_IQCAL_TONE_SEL|MASK_IQCAL_MODE|MASK_CALIB_START); /* set when finish */ - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - /* i. Set RFIC to "Normal mode" */ - hw_set_dxx_reg(phw_data, 0x58, iq_alpha); - - /*********************************************************************/ - phy_init_rf(phw_data); - -} - -/******************/ -void phy_set_rf_data(struct hw_data *pHwData, u32 index, u32 value) -{ - u32 ltmp = 0; - - switch (pHwData->phy_type) { - case RF_MAXIM_2825: - case RF_MAXIM_V1: /* 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) */ - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(value, 18); - break; - - case RF_MAXIM_2827: - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(value, 18); - break; - - case RF_MAXIM_2828: - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(value, 18); - break; - - case RF_MAXIM_2829: - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(value, 18); - break; - - case RF_AIROHA_2230: - case RF_AIROHA_2230S: /* 20060420 Add this */ - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(value, 20); - break; - - case RF_AIROHA_7230: - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | (value&0xffffff); - break; - - case RF_WB_242: - case RF_WB_242_1:/* 20060619.5 Add */ - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse(value, 24); - break; - } - - Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); -} - -/* 20060717 modify as Bruce's mail */ -unsigned char adjust_TXVGA_for_iq_mag(struct hw_data *phw_data) -{ - int init_txvga = 0; - u32 reg_mode_ctrl; - u32 val; - s32 iqcal_tone_i0; - s32 iqcal_tone_q0; - u32 sqsum; - s32 iq_mag_0_tx; - u8 reg_state; - int current_txvga; - - - reg_state = 0; - for (init_txvga = 0; init_txvga < 10; init_txvga++) { - current_txvga = (0x24C40A|(init_txvga<<6)); - phy_set_rf_data(phw_data, 5, ((5<<24)|current_txvga)); - phw_data->txvga_setting_for_cal = current_txvga; - - msleep(30);/* 20060612.1.a */ - - if (!hw_get_dxx_reg(phw_data, REG_MODE_CTRL, ®_mode_ctrl))/* 20060718.1 modify */ - return false; - - PHY_DEBUG(("[CAL] MODE_CTRL (read) = 0x%08X\n", reg_mode_ctrl)); - - /* - * a. Set iqcal_mode[1:0] to 0x2 and set "calib_start" to 0x1 to - * enable "IQ alibration Mode II" - */ - reg_mode_ctrl &= ~(MASK_IQCAL_TONE_SEL|MASK_IQCAL_MODE); - reg_mode_ctrl &= ~MASK_IQCAL_MODE; - reg_mode_ctrl |= (MASK_CALIB_START|0x02); - reg_mode_ctrl |= (MASK_CALIB_START|0x02|2<<2); - hw_set_dxx_reg(phw_data, REG_MODE_CTRL, reg_mode_ctrl); - PHY_DEBUG(("[CAL] MODE_CTRL (write) = 0x%08X\n", reg_mode_ctrl)); - - udelay(1);/* 20060612.1.a */ - - udelay(300);/* 20060612.1.a */ - - /* b. */ - hw_get_dxx_reg(phw_data, REG_CALIB_READ1, &val); - - PHY_DEBUG(("[CAL] CALIB_READ1 = 0x%08X\n", val)); - udelay(300);/* 20060612.1.a */ - - iqcal_tone_i0 = _s13_to_s32(val & 0x00001FFF); - iqcal_tone_q0 = _s13_to_s32((val & 0x03FFE000) >> 13); - PHY_DEBUG(("[CAL] ** iqcal_tone_i0=%d, iqcal_tone_q0=%d\n", - iqcal_tone_i0, iqcal_tone_q0)); - - sqsum = iqcal_tone_i0*iqcal_tone_i0 + iqcal_tone_q0*iqcal_tone_q0; - iq_mag_0_tx = (s32) _sqrt(sqsum); - PHY_DEBUG(("[CAL] ** auto_adjust_txvga_for_iq_mag_0_tx=%d\n", - iq_mag_0_tx)); - - if (iq_mag_0_tx >= 700 && iq_mag_0_tx <= 1750) - break; - else if (iq_mag_0_tx > 1750) { - init_txvga = -2; - continue; - } else - continue; - - } - - if (iq_mag_0_tx >= 700 && iq_mag_0_tx <= 1750) - return true; - else - return false; -} diff --git a/drivers/staging/winbond/phy_calibration.h b/drivers/staging/winbond/phy_calibration.h deleted file mode 100644 index 78fc68058607..000000000000 --- a/drivers/staging/winbond/phy_calibration.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef __WINBOND_PHY_CALIBRATION_H -#define __WINBOND_PHY_CALIBRATION_H - -#include "wbhal.h" - -#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); -void phy_calibration_winbond(struct hw_data *phw_data, u32 frequency); -#define phy_init_rf(_A) /* RFSynthesizer_initial(_A) */ - -#endif diff --git a/drivers/staging/winbond/reg.c b/drivers/staging/winbond/reg.c deleted file mode 100644 index 5fd4c4a72eee..000000000000 --- a/drivers/staging/winbond/reg.c +++ /dev/null @@ -1,2328 +0,0 @@ -#include "wbhal.h" -#include "wb35reg_f.h" -#include "core.h" - -/* - * ==================================================== - * Original Phy.h - * ==================================================== - */ - -/* - * ==================================================== - * 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) */ -static 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 */ -}; - -static 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) */ -}; - -static u32 max2825_power_data_24[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; - -/* ========================================== */ -/* MAX2827 (a/b/g) */ -static 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 */ -}; - -static 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) */ -}; - -static 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 */ -}; - -static u32 max2827_power_data_24[] = {(0x0C << 18) | 0x0C000, (0x0C << 18) | 0x0D600, (0x0C << 18) | 0x0C100}; -static u32 max2827_power_data_50[] = {(0x0C << 18) | 0x0C400, (0x0C << 18) | 0x0D500, (0x0C << 18) | 0x0C300}; - -/* ======================================================= */ -/* MAX2828 (a/b/g) */ -static 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 */ -}; - -static 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) */ -}; - -static 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 */ -}; - -static u32 max2828_power_data_24[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; -static u32 max2828_power_data_50[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; - -/* ========================================================== */ -/* MAX2829 (a/b/g) */ -static 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) */ -}; - -static 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) */ -}; - -static 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) */ -}; - -/* - * ==================================================================== - * 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 - * ==================================================================== - */ - -/* - * =================================================================== - * 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 - * ================================================================== - */ -static 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 -}; - -static 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 -}; - -static 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 */ -}; - -/* 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 */ - -static u32 al2230_txvga_data[][2] = { - /* value , index */ - {0x090202, 0}, - {0x094202, 2}, - {0x092202, 4}, - {0x096202, 6}, - {0x091202, 8}, - {0x095202, 10}, - {0x093202, 12}, - {0x097202, 14}, - {0x090A02, 16}, - {0x094A02, 18}, - {0x092A02, 20}, - {0x096A02, 22}, - {0x091A02, 24}, - {0x095A02, 26}, - {0x093A02, 28}, - {0x097A02, 30}, - {0x090602, 32}, - {0x094602, 34}, - {0x092602, 36}, - {0x096602, 38}, - {0x091602, 40}, - {0x095602, 42}, - {0x093602, 44}, - {0x097602, 46}, - {0x090E02, 48}, - {0x098E02, 49}, - {0x094E02, 50}, - {0x09CE02, 51}, - {0x092E02, 52}, - {0x09AE02, 53}, - {0x096E02, 54}, - {0x09EE02, 55}, - {0x091E02, 56}, - {0x099E02, 57}, - {0x095E02, 58}, - {0x09DE02, 59}, - {0x093E02, 60}, - {0x09BE02, 61}, - {0x097E02, 62}, - {0x09FE02, 63} -}; - -/* - * ========================================== - * For Airoha AL7230, 2.4Ghz band - * 24bit, MSB first - */ - -/* channel independent registers: */ -static 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 -}; - -static 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: */ -static 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 */ -}; - -static 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 */ -static 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 - */ -static 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 Temperature sensor */ -}; - -static 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 */ -}; - -static 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}, - {16, 10}, - {18, 11}, - {20, 12}, - {22, 13}, - {24, 14}, - {26, 15}, - {28, 16}, - {30, 17}, - {32, 18}, - {34, 19}, -}; - -static 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} -}; - -/* ================================================================================================== */ - - - -/* - * ============================================================================================================= - * 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. - */ - 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)); - 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) -{ - u32 Crc; - u32 BitNumber; - - /* 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 */ - BitNumber = (u32) ((Crc >> 26) & 0x3f); - - *Byte = (u8) (BitNumber >> 3); /* 900514 original (BitNumber / 8) */ - *Value = (u8) ((u8) 1 << (BitNumber % 8)); -} - -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); - 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)) - ltmp = 0x4468; - - Wb35Reg_WriteSync(pHwData, 0x03d0, ltmp); - Wb35Reg_WriteSync(pHwData, 0x03d4, 0xa0); /* PLL_PD REF_PD set to 0 */ - - 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, 0x03b0, 1); /* Reset hardware first */ - msleep(10); - - /* Set burst write delay */ - Wb35Reg_WriteSync(pHwData, 0x03f8, 0x7ff); -} - -static void Set_ChanIndep_RfData_al7230_24(struct hw_data *pHwData, u32 *pltmp, - char number) -{ - u8 i; - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = al7230_rf_data_24[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_24[i] & 0xffffff); - } -} - -static void Set_ChanIndep_RfData_al7230_50(struct hw_data *pHwData, u32 *pltmp, - char number) -{ - u8 i; - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = al7230_rf_data_50[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_50[i] & 0xffffff); - } -} - - -/* - * ============================================================================================================= - * RFSynthesizer_initial -- - * ============================================================================================================= - */ -void RFSynthesizer_initial(struct hw_data *pHwData) -{ - u32 altmp[32]; - u32 *pltmp = altmp; - u32 ltmp; - 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) { - case RF_MAXIM_2825: - case RF_MAXIM_V1: /* 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) */ - number = ARRAY_SIZE(max2825_rf_data); - 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 = ARRAY_SIZE(max2827_rf_data); - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = max2827_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2827_rf_data[i], 18); - } - break; - case RF_MAXIM_2828: - number = ARRAY_SIZE(max2828_rf_data); - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = max2828_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2828_rf_data[i], 18); - } - break; - case RF_MAXIM_2829: - number = ARRAY_SIZE(max2829_rf_data); - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = max2829_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2829_rf_data[i], 18); - } - break; - case RF_AIROHA_2230: - number = ARRAY_SIZE(al2230_rf_data); - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = al2230_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230_rf_data[i], 20); - } - break; - case RF_AIROHA_2230S: - number = ARRAY_SIZE(al2230s_rf_data); - for (i = 0; i < number; i++) { - pHwData->phy_para[i] = al2230s_rf_data[i]; - 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); - pr_debug("* PLL_ON low\n"); - number = ARRAY_SIZE(al7230_rf_data_24); - Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); - break; - case RF_WB_242: - case RF_WB_242_1: - number = ARRAY_SIZE(w89rf242_rf_data); - for (i = 0; i < number; i++) { - ltmp = w89rf242_rf_data[i]; - 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); - } - break; - } - - pHwData->phy_number = number; - - /* 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; i < number; i++) - Wb35Reg_WriteSync(pHwData, 0x864, pltmp[i]); - - /* Calibration only 1 time */ - if (pHwData->CalOneTime) - return; - pHwData->CalOneTime = 1; - - 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); - pr_debug("* PLL_ON high\n"); - - /* 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); - pr_debug("* PLL_ON low\n"); - - number = ARRAY_SIZE(al7230_rf_data_50); - 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); - pr_debug("* PLL_ON high\n"); - - 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; - } -} - -static void BBProcessor_AL7230_2400(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - u32 pltmp[12]; - - 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 */ - 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); - - 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] = 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 */ - 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); -} - -static 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 */ - reg->BB0C = 0xEFFF233E; - 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); - - 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 */ - reg->BB50 = 0x2B107208; - 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); -} - -/* - * =========================================================================== - * 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; - - 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_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); - - 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); - reg->LNAValue[1] = 0; - reg->LNAValue[2] = (u8) ((reg->BB0C & 0xff00) >> 8); - reg->LNAValue[3] = 0; - - /* Fill SQ3 table */ - for (i = 0; i < MAX_SQ3_FILTER_SIZE; i++) - reg->SQ3_filter[i] = 0x2f; /* half of Bit 0 ~ 6 */ -} - -static inline void set_tx_power_per_channel_max2829(struct hw_data *pHwData, - struct chan_info Channel) -{ - RFSynthesizer_SetPowerIndex(pHwData, 100); -} - -static 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) - index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; - - RFSynthesizer_SetPowerIndex(pHwData, index); -} - -static 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; - } - } - break; - } - RFSynthesizer_SetPowerIndex(pHwData, index); -} - -static 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; - } - 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) -{ - struct wb35_reg *reg = &pHwData->reg; - 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: - 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 = ARRAY_SIZE(max2829_channel_data_50); - - for (i = 0; i < count; i++) { - if (max2829_channel_data_50[i][0] == Channel.ChanNo) { - for (j = 0; j < 3; j++) - pltmp[j] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2829_channel_data_50[i][j+1], 18); - Wb35Reg_BurstWrite(pHwData, 0x0864, pltmp, 3, NO_INCREMENT); - - if ((max2829_channel_data_50[i][3] & 0x3FFFF) == 0x2A946) { - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse((5 << 18) | 0x2A906, 18); - Wb35Reg_Write(pHwData, 0x0864, ltmp); - } else { /* 0x2A9C6 */ - ltmp = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse((5 << 18) | 0x2A986, 18); - Wb35Reg_Write(pHwData, 0x0864, ltmp); - } - } - } - } - set_tx_power_per_channel_max2829(pHwData, Channel); - break; - case RF_AIROHA_2230: - case RF_AIROHA_2230S: - if (Channel.band <= BAND_TYPE_OFDM_24) { /* channel 1 ~ 14 */ - for (i = 0; i < 2; i++) - pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230_channel_data_24[Channel.ChanNo-1][i], 20); - Wb35Reg_BurstWrite(pHwData, 0x0864, pltmp, 2, NO_INCREMENT); - } - set_tx_power_per_channel_al2230(pHwData, Channel); - break; - case RF_AIROHA_7230: - /* Channel independent registers */ - if (Channel.band != pHwData->band) { - if (Channel.band <= BAND_TYPE_OFDM_24) { - /* Update BB register */ - BBProcessor_AL7230_2400(pHwData); - - number = ARRAY_SIZE(al7230_rf_data_24); - Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); - } else { - /* Update BB register */ - BBProcessor_AL7230_5000(pHwData); - - number = ARRAY_SIZE(al7230_rf_data_50); - 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); - pr_debug("Band changed\n"); - } - - 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); - } - - count = ARRAY_SIZE(al7230_channel_data_5); - - for (i = 0; i < count; i++) { - if (al7230_channel_data_5[i][0] == Channel.ChanNo) { - for (j = 0; j < 3; j++) - pltmp[j] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_channel_data_5[i][j+1] & 0xffffff); - Wb35Reg_BurstWrite(pHwData, 0x0864, pltmp, 3, NO_INCREMENT); - } - } - } - set_tx_power_per_channel_al7230(pHwData, Channel); - break; - case RF_WB_242: - case RF_WB_242_1: - - if (Channel.band <= BAND_TYPE_OFDM_24) { /* channel 1 ~ 14 */ - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse(w89rf242_channel_data_24[Channel.ChanNo-1][0], 24); - Wb35Reg_Write(pHwData, 0x864, ltmp); - } - set_tx_power_per_channel_wb242(pHwData, Channel); - break; - } - - 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 */ - 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 */ - 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(12); - 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 */ - reg->M78_ERPInformation |= BIT(5); - Wb35Reg_Write(pHwData, 0x0878, reg->M78_ERPInformation); - - /* disable 11b Baseband */ - reg->BB30 |= BIT(31); - 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) -{ - u32 Band = pHwData->band; - u8 index = 0; - - 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 /* 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)) { - /* 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 */ - return 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); - return 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); - return 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); - return 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); - return 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); - return index; -} - -u8 RFSynthesizer_SetAiroha2230Power(struct hw_data *pHwData, u8 index) -{ - u32 PowerData; - u8 i, count; - - count = ARRAY_SIZE(al2230_txvga_data); - for (i = 0; i < count; i++) { - if (al2230_txvga_data[i][1] >= 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); - return i; -} - -u8 RFSynthesizer_SetAiroha7230Power(struct hw_data *pHwData, u8 index) -{ - u32 PowerData; - u8 i, count; - - count = ARRAY_SIZE(al7230_txvga_data); - for (i = 0; i < count; i++) { - if (al7230_txvga_data[i][1] >= index) - break; - } - if (i == count) - i--; - 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) -{ - u32 PowerData; - u8 i, count; - - count = ARRAY_SIZE(w89rf242_txvga_data); - for (i = 0; i < count; i++) { - if (w89rf242_txvga_data[i][1] >= 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]); - - return i; -} - -/* - * =========================================================================== - * 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 */ - - Wb35Reg_WriteSync(pHwData, 0x0400, reg->D00_DmaControl); -} - -void Mxx_initial(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - u32 tmp; - u32 pltmp[11]; - u16 i; - - - /* - * ====================================================== - * Initial Mxx register - * ====================================================== - */ - - /* M00 bit set */ - reg->M00_MacControl = 0x80000000; /* Solve beacon sequence number stop by hardware */ - - /* 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. */ - - /* 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 */ - pltmp[3] = *(u32 *)pHwData->bssid; - - /* M34 */ - pHwData->AID = DEFAULT_AID; - 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; - pltmp[5] = reg->M38_MacControl; - - /* M3C */ - tmp = (DEFAULT_PIFST << 26) | (DEFAULT_EIFST << 16) | (DEFAULT_DIFST << 8) | (DEFAULT_SIFST << 4) | DEFAULT_OSIFST; - reg->M3C_MacControl = tmp; - pltmp[6] = tmp; - - /* 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 */ - reg->M44_MacControl = tmp; - pltmp[8] = tmp; - - /* 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 */ - reg->M4C_MacStatus = (DEFAULT_PROTOCOL_VERSION << 30) | (DEFAULT_MAC_POWER_STATE << 28) | (DEFAULT_DTIM_ALERT_TIME << 24); - pltmp[10] = reg->M4C_MacStatus; - - for (i = 0; i < 11; i++) - Wb35Reg_WriteSync(pHwData, 0x0824 + i * 4, pltmp[i]); - - /* M60 */ - Wb35Reg_WriteSync(pHwData, 0x0860, 0x12481248); - reg->M60_MacControl = 0x12481248; - - /* M68 */ - Wb35Reg_WriteSync(pHwData, 0x0868, 0x00050900); - reg->M68_MacControl = 0x00050900; - - /* M98 */ - Wb35Reg_WriteSync(pHwData, 0x0898, 0xffff8888); - reg->M98_MacControl = 0xffff8888; -} - - -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); -} - -/*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; i < MAX_TXVGA_EEPROM; i++) { - Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08100000 + 0x00010000 * i); - Wb35Reg_ReadSync(pHwData, 0x03b4, <mp); - Value[i] = (u16) (ltmp & 0xffff); /* Get 16 bit available */ - Value[i] = cpu_to_le16(Value[i]); /* [7:0]2412 [7:0]2417 .... */ - } - - /* Adjust the filed which fills with reserved value. */ - pctmp = (u8 *) Value; - for (i = 0; i < (MAX_TXVGA_EEPROM * 2); i++) { - if (pctmp[i] != 0xff) - ctmp = pctmp[i]; - else - pctmp[i] = ctmp; - } - - /* 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 < ARRAY_SIZE(w89rf242_txvga_old_mapping); j++) { - if (pctmp[i] < (u8) w89rf242_txvga_old_mapping[j][1]) { - pctmp[i] = (u8) w89rf242_txvga_old_mapping[j][0]; - break; - } - } - - if (j == ARRAY_SIZE(w89rf242_txvga_old_mapping)) - pctmp[i] = (u8)w89rf242_txvga_old_mapping[j-1][0]; - } - } - - 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) -{ - u8 *pTxVga = pHwData->TxVgaSettingInEEPROM; - s16 i, stmp; - - /* -- 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 */ - stmp = pTxVga[2] - pTxVga[1]; - 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 */ - pHwData->TxVgaFor24[13] = pTxVga[3]; - - /* -- 5G -- */ - if (pHwData->phy_type == RF_AIROHA_7230) { - /* channel 184 */ - pHwData->TxVgaFor50[0].ChanNo = 184; - pHwData->TxVgaFor50[0].TxVgaValue = pTxVga[4]; - /* channel 196 */ - pHwData->TxVgaFor50[3].ChanNo = 196; - pHwData->TxVgaFor50[3].TxVgaValue = pTxVga[5]; - /* 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; - - /* channel 16 */ - pHwData->TxVgaFor50[6].ChanNo = 16; - pHwData->TxVgaFor50[6].TxVgaValue = pTxVga[6]; - pHwData->TxVgaFor50[4].ChanNo = 8; - pHwData->TxVgaFor50[4].TxVgaValue = pTxVga[6]; - pHwData->TxVgaFor50[5].ChanNo = 12; - pHwData->TxVgaFor50[5].TxVgaValue = pTxVga[6]; - - /* channel 36 */ - pHwData->TxVgaFor50[8].ChanNo = 36; - pHwData->TxVgaFor50[8].TxVgaValue = pTxVga[7]; - pHwData->TxVgaFor50[7].ChanNo = 34; - pHwData->TxVgaFor50[7].TxVgaValue = pTxVga[7]; - pHwData->TxVgaFor50[9].ChanNo = 38; - pHwData->TxVgaFor50[9].TxVgaValue = pTxVga[7]; - - /* channel 40 */ - pHwData->TxVgaFor50[10].ChanNo = 40; - pHwData->TxVgaFor50[10].TxVgaValue = pTxVga[8]; - /* channel 48 */ - pHwData->TxVgaFor50[14].ChanNo = 48; - pHwData->TxVgaFor50[14].TxVgaValue = pTxVga[9]; - /* 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; - - /* channel 52 */ - pHwData->TxVgaFor50[15].ChanNo = 52; - pHwData->TxVgaFor50[15].TxVgaValue = pTxVga[10]; - /* channel 64 */ - pHwData->TxVgaFor50[18].ChanNo = 64; - pHwData->TxVgaFor50[18].TxVgaValue = pTxVga[11]; - /* 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; - - /* channel 100 */ - pHwData->TxVgaFor50[19].ChanNo = 100; - pHwData->TxVgaFor50[19].TxVgaValue = pTxVga[12]; - /* channel 112 */ - pHwData->TxVgaFor50[22].ChanNo = 112; - pHwData->TxVgaFor50[22].TxVgaValue = pTxVga[13]; - /* 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; - - /* channel 128 */ - pHwData->TxVgaFor50[26].ChanNo = 128; - pHwData->TxVgaFor50[26].TxVgaValue = pTxVga[14]; - /* 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; - - /* channel 140 */ - pHwData->TxVgaFor50[29].ChanNo = 140; - pHwData->TxVgaFor50[29].TxVgaValue = pTxVga[15]; - /* 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; - - /* channel 149 */ - pHwData->TxVgaFor50[30].ChanNo = 149; - pHwData->TxVgaFor50[30].TxVgaValue = pTxVga[16]; - /* channel 165 */ - pHwData->TxVgaFor50[34].ChanNo = 165; - pHwData->TxVgaFor50[34].TxVgaValue = pTxVga[17]; - /* 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; - } -} - -void BBProcessor_RateChanging(struct hw_data *pHwData, u8 rate) -{ - struct wb35_reg *reg = &pHwData->reg; - unsigned char Is11bRate; - - Is11bRate = (rate % 6) ? 1 : 0; - 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); - } - } - 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); - } - } - break; - } -} - diff --git a/drivers/staging/winbond/sme_api.h b/drivers/staging/winbond/sme_api.h deleted file mode 100644 index 652ae7085a5f..000000000000 --- a/drivers/staging/winbond/sme_api.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * sme_api.h - * - * Copyright(C) 2002 Winbond Electronics Corp. - */ - -#ifndef __SME_API_H__ -#define __SME_API_H__ - -#include - -#include "localpara.h" - -/****************** CONSTANT AND MACRO SECTION ******************************/ - -#define MEDIA_STATE_DISCONNECTED 0 -#define MEDIA_STATE_CONNECTED 1 - -/* ARRAY CHECK */ -#define MAX_POWER_TO_DB 32 - -/****************** TYPE DEFINITION SECTION *********************************/ - -/****************** EXPORTED FUNCTION DECLARATION SECTION *******************/ - -/* OID_802_11_BSSID */ -s8 sme_get_bssid(void *pcore_data, u8 *pbssid); -s8 sme_get_desired_bssid(void *pcore_data, u8 *pbssid); /* Unused */ -s8 sme_set_desired_bssid(void *pcore_data, u8 *pbssid); - -/* 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);/* Unused */ -s8 sme_set_desired_ssid(void *pcore_data, u8 *pssid, u8 ssid_len); - -/* 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); /* Unused */ -s8 sme_set_desired_bss_type(void *pcore_data, u8 bss_type); - -/* 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 */ -s8 sme_get_rts_threshold(void *pcore_data, u32 *pthreshold); -s8 sme_set_rts_threshold(void *pcore_data, u32 threshold); - -/* 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); - -s8 sme_get_atim_window(void *pcore_data, u16 *patim_window); -s8 sme_set_atim_window(void *pcore_data, u16 atim_window); - -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 */ -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 */ -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 */ -s8 sme_get_wep_mode(void *pcore_data, u8 *pwep_mode); -s8 sme_set_wep_mode(void *pcore_data, u8 wep_mode); - -/* 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 */ -s8 sme_get_current_mac_addr(void *pcore_data, u8 *pmac_addr); - -/* 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 */ -s8 sme_get_supported_rate(void *pcore_data, u8 *prates); - -/* 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 */ -s8 sme_set_remove_wep(void *pcre_data, u32 key_index); - -/* OID_802_11_DISASSOCIATE */ -s8 sme_set_disassociate(void *pcore_data); - -/* 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 */ -s8 sme_set_bssid_list_scan(void *pcore_data, void *pscan_para); - -/* OID_802_11_RELOAD_DEFAULTS */ -s8 sme_set_reload_defaults(void *pcore_data, u8 reload_type); - - -/*------------------------- non-standard ----------------------------------*/ -s8 sme_get_connect_status(void *pcore_data, u8 *pstatus); -/*--------------------------------------------------------------------------*/ - -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 *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); -void sme_clear_all_default_key(void *pcore_data); - - - -s8 sme_set_preamble_mode(void *pcore_data, u8 mode); -s8 sme_get_preamble_mode(void *pcore_data, u8 *mode); -s8 sme_get_preamble_type(void *pcore_data, u8 *type); -s8 sme_set_slottime_mode(void *pcore_data, u8 mode); -s8 sme_get_slottime_mode(void *pcore_data, u8 *mode); -s8 sme_get_slottime_type(void *pcore_data, u8 *type); -s8 sme_set_txrate_policy(void *pcore_data, u8 policy); -s8 sme_get_txrate_policy(void *pcore_data, u8 *policy); -s8 sme_get_cwmin_value(void *pcore_data, u8 *cwmin); -s8 sme_get_cwmax_value(void *pcore_data, u16 *cwmax); -s8 sme_get_ms_radio_mode(void *pcore_data, u8 *pMsRadioOff); -s8 sme_set_ms_radio_mode(void *pcore_data, u8 boMsRadioOff); - -void sme_get_tx_power_level(void *pcore_data, u32 *TxPower); -u8 sme_set_tx_power_level(void *pcore_data, u32 TxPower); -void sme_get_antenna_count(void *pcore_data, u32 *AntennaCount); -void sme_get_rx_antenna(void *pcore_data, u32 *RxAntenna); -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); -s8 sme_set_IE_append(void *pcore_data, u8 *buffer, u16 buf_len); - -/* ================== 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__ */ - - diff --git a/drivers/staging/winbond/wb35reg.c b/drivers/staging/winbond/wb35reg.c deleted file mode 100644 index bbc5ddcce6f5..000000000000 --- a/drivers/staging/winbond/wb35reg.c +++ /dev/null @@ -1,806 +0,0 @@ -#include "wb35reg_f.h" -#include "phy_calibration.h" - -#include -#include - -/* - * 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 */ - if (pHwData->SurpriseRemove) - return false; - - /* 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); - if (reg_queue == NULL) - return false; - - urb = usb_alloc_urb(0, GFP_ATOMIC); - if (urb == NULL) { - kfree(reg_queue); - return false; - } - - 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; 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); - reg_queue->Next = NULL; - reg_queue->pUsbReq = dr; - reg_queue->urb = urb; - - 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); - - /* Start EP0VM */ - Wb35Reg_EP0VM_start(pHwData); - - return true; -} - -void Wb35Reg_Update(struct hw_data *pHwData, u16 RegisterNo, u32 RegisterValue) -{ - struct wb35_reg *reg = &pHwData->reg; - switch (RegisterNo) { - case 0x3b0: - reg->U1B0 = RegisterValue; - break; - case 0x3bc: - reg->U1BC_LEDConfigure = RegisterValue; - break; - case 0x400: - reg->D00_DmaControl = RegisterValue; - break; - case 0x800: - reg->M00_MacControl = RegisterValue; - break; - case 0x804: - reg->M04_MulticastAddress1 = RegisterValue; - break; - case 0x808: - reg->M08_MulticastAddress2 = RegisterValue; - break; - case 0x824: - reg->M24_MacControl = RegisterValue; - break; - case 0x828: - reg->M28_MacControl = RegisterValue; - break; - case 0x82c: - reg->M2C_MacControl = RegisterValue; - break; - case 0x838: - reg->M38_MacControl = RegisterValue; - break; - case 0x840: - reg->M40_MacControl = RegisterValue; - break; - case 0x844: - reg->M44_MacControl = RegisterValue; - break; - case 0x848: - reg->M48_MacControl = RegisterValue; - break; - case 0x84c: - reg->M4C_MacStatus = RegisterValue; - break; - case 0x860: - reg->M60_MacControl = RegisterValue; - break; - case 0x868: - reg->M68_MacControl = RegisterValue; - break; - case 0x870: - reg->M70_MacControl = RegisterValue; - break; - case 0x874: - reg->M74_MacControl = RegisterValue; - break; - case 0x878: - reg->M78_ERPInformation = RegisterValue; - break; - case 0x87C: - reg->M7C_MacControl = RegisterValue; - break; - case 0x880: - reg->M80_MacControl = RegisterValue; - break; - case 0x884: - reg->M84_MacControl = RegisterValue; - break; - case 0x888: - reg->M88_MacControl = RegisterValue; - break; - case 0x898: - reg->M98_MacControl = RegisterValue; - break; - case 0x100c: - reg->BB0C = RegisterValue; - break; - case 0x102c: - reg->BB2C = RegisterValue; - break; - case 0x1030: - reg->BB30 = RegisterValue; - break; - case 0x103c: - reg->BB3C = RegisterValue; - break; - case 0x1048: - reg->BB48 = RegisterValue; - break; - case 0x104c: - reg->BB4C = RegisterValue; - break; - case 0x1050: - reg->BB50 = RegisterValue; - break; - case 0x1054: - reg->BB54 = RegisterValue; - break; - case 0x1058: - reg->BB58 = RegisterValue; - break; - case 0x105c: - reg->BB5C = RegisterValue; - break; - case 0x1060: - reg->BB60 = RegisterValue; - break; - } -} - -/* - * 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 */ - if (pHwData->SurpriseRemove) - return false; - - RegisterValue = cpu_to_le32(RegisterValue); - - /* update the register by send usb message */ - reg->SyncIoPause = 1; - - /* Wait until EP0VM stop */ - while (reg->EP0vm_state != VM_STOP) - msleep(10); - - /* Sync IoCallDriver */ - reg->EP0vm_state = VM_RUNNING; - ret = usb_control_msg(pHwData->udev, - usb_sndctrlpipe(pHwData->udev, 0), - 0x03, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, - 0x0, RegisterNo, &RegisterValue, 4, HZ * 100); - reg->EP0vm_state = VM_STOP; - reg->SyncIoPause = 0; - - Wb35Reg_EP0VM_start(pHwData); - - if (ret < 0) { - pr_debug("EP0 Write register usb message sending error\n"); - 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) -{ - 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 */ - if (pHwData->SurpriseRemove) - return false; - - /* update the register by send urb request */ - UrbSize = sizeof(struct wb35_reg_queue) + sizeof(struct usb_ctrlrequest); - reg_queue = kzalloc(UrbSize, GFP_ATOMIC); - if (reg_queue == NULL) - return false; - - urb = usb_alloc_urb(0, GFP_ATOMIC); - if (urb == NULL) { - kfree(reg_queue); - return false; - } - - 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->wValue = cpu_to_le16(0x0); - dr->wIndex = cpu_to_le16(RegisterNo); - dr->wLength = cpu_to_le16(4); - - /* 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) - reg->reg_first = reg_queue; - else - reg->reg_last->Next = reg_queue; - reg->reg_last = reg_queue; - - spin_unlock_irq(®->EP0VM_spin_lock); - - /* Start EP0VM */ - Wb35Reg_EP0VM_start(pHwData); - - return true; -} - -/* - * 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 supported - */ -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; - - /* Module shutdown */ - if (pHwData->SurpriseRemove) - return false; - - /* update the register by send urb request */ - UrbSize = sizeof(struct wb35_reg_queue) + sizeof(struct usb_ctrlrequest); - reg_queue = kzalloc(UrbSize, GFP_ATOMIC); - if (reg_queue == NULL) - return false; - - urb = usb_alloc_urb(0, GFP_ATOMIC); - if (urb == NULL) { - kfree(reg_queue); - return false; - } - - 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. */ - 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->wValue = cpu_to_le16(0x0); - dr->wIndex = cpu_to_le16(RegisterNo); - dr->wLength = cpu_to_le16(4); - - /* 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) - reg->reg_first = reg_queue; - else - reg->reg_last->Next = reg_queue; - reg->reg_last = reg_queue; - - spin_unlock_irq(®->EP0VM_spin_lock); - - /* Start EP0VM */ - Wb35Reg_EP0VM_start(pHwData); - - 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_ReadSync(struct hw_data *pHwData, u16 RegisterNo, - u32 *pRegisterValue) -{ - struct wb35_reg *reg = &pHwData->reg; - u32 *pltmp = pRegisterValue; - int ret = -1; - - /* Module shutdown */ - if (pHwData->SurpriseRemove) - return false; - - /* Read the register by send usb message */ - reg->SyncIoPause = 1; - - /* Wait until EP0VM stop */ - while (reg->EP0vm_state != VM_STOP) - msleep(10); - - reg->EP0vm_state = VM_RUNNING; - ret = usb_control_msg(pHwData->udev, - usb_rcvctrlpipe(pHwData->udev, 0), - 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); - reg->SyncIoPause = 0; - - Wb35Reg_EP0VM_start(pHwData); - - if (ret < 0) { - pr_debug("EP0 Read register usb message sending error\n"); - 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) -{ - struct wb35_reg *reg = &pHwData->reg; - struct usb_ctrlrequest *dr; - struct urb *urb; - struct wb35_reg_queue *reg_queue; - u16 UrbSize; - - /* Module shutdown */ - if (pHwData->SurpriseRemove) - return false; - - /* 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); - if (reg_queue == NULL) - return false; - - urb = usb_alloc_urb(0, GFP_ATOMIC); - if (urb == NULL) { - kfree(reg_queue); - return false; - } - 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->wValue = cpu_to_le16(0x0); - dr->wIndex = cpu_to_le16(RegisterNo); - dr->wLength = cpu_to_le16(4); - - /* 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) - reg->reg_first = reg_queue; - else - reg->reg_last->Next = reg_queue; - reg->reg_last = reg_queue; - - spin_unlock_irq(®->EP0VM_spin_lock); - - /* Start EP0VM */ - Wb35Reg_EP0VM_start(pHwData); - - return true; -} - - -void Wb35Reg_EP0VM_start(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (atomic_inc_return(®->RegFireCount) == 1) { - reg->EP0vm_state = VM_RUNNING; - Wb35Reg_EP0VM(pHwData); - } else - atomic_dec(®->RegFireCount); -} - -void Wb35Reg_EP0VM(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - struct urb *urb; - struct usb_ctrlrequest *dr; - u32 *pBuffer; - int ret = -1; - struct wb35_reg_queue *reg_queue; - - - if (reg->SyncIoPause) - goto cleanup; - - if (pHwData->SurpriseRemove) - goto cleanup; - - /* 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); - - if (!reg_queue) - goto cleanup; - - /* 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 */ - pBuffer = ®_queue->VALUE; - - usb_fill_control_urb(urb, pHwData->udev, - REG_DIRECTION(pHwData->udev, reg_queue), - (u8 *)dr, pBuffer, cpu_to_le16(dr->wLength), - Wb35Reg_EP0VM_complete, (void *)pHwData); - - reg->EP0vm_state = VM_RUNNING; - - ret = usb_submit_urb(urb, GFP_ATOMIC); - - if (ret < 0) { - pr_debug("EP0 Irp sending error\n"); - goto cleanup; - } - return; - - cleanup: - reg->EP0vm_state = VM_STOP; - atomic_dec(®->RegFireCount); -} - - -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; - - - /* Variable setting */ - reg->EP0vm_state = VM_COMPLETED; - reg->EP0VM_status = urb->status; - - 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); - 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); - - if (reg->EP0VM_status) { - pr_debug("EP0 IoCompleteRoutine return error\n"); - reg->EP0vm_state = VM_STOP; - pHwData->SurpriseRemove = 1; - } else { - /* Success. Update the result */ - - /* Start the next send */ - Wb35Reg_EP0VM(pHwData); - } - - kfree(reg_queue); - } - - usb_free_urb(urb); -} - - -void Wb35Reg_destroy(struct hw_data *pHwData) -{ - 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 */ - do { - msleep(10); /* Delay for waiting function enter */ - } while (reg->EP0vm_state != VM_STOP); - msleep(10); /* Delay for waiting function enter */ - - /* 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) - reg->reg_last = NULL; - reg->reg_first = reg->reg_first->Next; - - urb = reg_queue->urb; - spin_unlock_irq(®->EP0VM_spin_lock); - if (urb) { - usb_free_urb(urb); - kfree(reg_queue); - } else { - pr_debug("EP0 queue release error\n"); - } - spin_lock_irq(®->EP0VM_spin_lock); - - reg_queue = reg->reg_first; - } - spin_unlock_irq(®->EP0VM_spin_lock); -} - -/* - * ======================================================================= - * The function can be run in passive-level only. - * ========================================================================= - */ -unsigned char Wb35Reg_initial(struct hw_data *pHwData) -{ - 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) - */ - if (reg->EEPROMPhyType != RF_DECIDE_BY_INF) { - 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_7230) || - (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); - - /* Reading MAC address */ - Uxx_ReadEthernetAddress(pHwData); - - /* 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 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); - - /* Update Ethernet address */ - memcpy(pHwData->CurrentMacAddress, pHwData->PermanentMacAddress, ETH_ALEN); - - /* Update software variable */ - pHwData->SoftwareSet = (u16)(SoftwareSet & 0xffff); - TxVga &= 0x000000ff; - pHwData->PowerIndexFromEEPROM = (u8)TxVga; - pHwData->VCO_trim = (u8)VCO_trim & 0xff; - if (pHwData->VCO_trim == 0xff) - pHwData->VCO_trim = 0x28; - - reg->EEPROMRegion = (u8)(Region_ScanInterval >> 8); - if (reg->EEPROMRegion < 1 || reg->EEPROMRegion > 6) - reg->EEPROMRegion = REGION_AUTO; - - /* For Get Tx VGA from EEPROM */ - GetTxVgaFromEEPROM(pHwData); - - /* 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 */ - pHwData->Scan_Interval = SCAN_MAX_CHNL_TIME; - - /* Initial register */ - RFSynthesizer_initial(pHwData); - - BBProcessor_initial(pHwData); /* Async write, must wait until complete */ - - Wb35Reg_phy_calibration(pHwData); - - Mxx_initial(pHwData); - Dxx_initial(pHwData); - - if (pHwData->SurpriseRemove) - return false; - else - return true; /* Initial fail */ -} - -/* - * ================================================================ - * CardComputeCrc -- - * - * Description: - * Runs the AUTODIN II CRC algorithm on the buffers Buffer 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; -} - - -/* - * ================================================================== - * 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; - - 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); - if (BitA && !BitB) { - 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. */ - } - } - return dwData; -} - -void Wb35Reg_phy_calibration(struct hw_data *pHwData) -{ - 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); - - pHwData->BB3c_cal = BB3c; - pHwData->BB54_cal = BB54; - - RFSynthesizer_initial(pHwData); - BBProcessor_initial(pHwData); /* Async operation */ - - Wb35Reg_WriteSync(pHwData, 0x103c, BB3c); - Wb35Reg_WriteSync(pHwData, 0x1054, BB54); - } -} - - diff --git a/drivers/staging/winbond/wb35reg_f.h b/drivers/staging/winbond/wb35reg_f.h deleted file mode 100644 index 95dc98096845..000000000000 --- a/drivers/staging/winbond/wb35reg_f.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef __WINBOND_WB35REG_F_H -#define __WINBOND_WB35REG_F_H - -#include "wbhal.h" - -/* - * ==================================== - * 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 data, u32 data_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 *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 diff --git a/drivers/staging/winbond/wb35reg_s.h b/drivers/staging/winbond/wb35reg_s.h deleted file mode 100644 index dc79faa4029f..000000000000 --- a/drivers/staging/winbond/wb35reg_s.h +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef __WINBOND_WB35REG_S_H -#define __WINBOND_WB35REG_S_H - -#include -#include -#include - -struct hw_data; - -/* ========================================================================= - * - * 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_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. */ - -#define DEFAULT_RATE_RETRY_LIMIT 2 /* (M38) as named */ - -#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; - 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 */ -}; - -/* - * ==================================== - * 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 */ - u32 U1BC_LEDConfigure; - u32 D00_DmaControl; - u32 M00_MacControl; - union { - struct { - u32 M04_MulticastAddress1; - u32 M08_MulticastAddress2; - }; - u8 Multicast[8]; /* contents of card multicast registers */ - }; - - u32 M24_MacControl; - u32 M28_MacControl; - u32 M2C_MacControl; - u32 M38_MacControl; - u32 M3C_MacControl; - u32 M40_MacControl; - u32 M44_MacControl; - u32 M48_MacControl; - u32 M4C_MacStatus; - 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; - 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; /* $$ */ - struct wb35_reg_queue *reg_first; - struct wb35_reg_queue *reg_last; - atomic_t RegFireCount; - - /* 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 */ - u32 SQ3_filter[MAX_SQ3_FILTER_SIZE]; - u32 SQ3_index; -}; - -/* ===================================================================== - * 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_ibss_disconnect(_A) (hal_stop_sync_bss(_A)) - -#endif diff --git a/drivers/staging/winbond/wb35rx.c b/drivers/staging/winbond/wb35rx.c deleted file mode 100644 index f006b166aebc..000000000000 --- a/drivers/staging/winbond/wb35rx.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * ============================================================================ - * Copyright (c) 1996-2002 Winbond Electronic Corporation - * - * Module Name: - * Wb35Rx.c - * - * Abstract: - * Processing the Rx message from down layer - * - * ============================================================================ - */ -#include -#include - -#include "core.h" -#include "wb35rx_f.h" - -static void packet_came(struct ieee80211_hw *hw, char *pRxBufferAddress, - int PacketSize) -{ - struct wbsoft_priv *priv = hw->priv; - struct sk_buff *skb; - struct ieee80211_rx_status rx_status = {0}; - - if (!priv->enabled) - return; - - skb = dev_alloc_skb(PacketSize); - if (!skb) { - printk("Not enough memory for packet, FIXME\n"); - return; - } - - memcpy(skb_put(skb, PacketSize), pRxBufferAddress, PacketSize); - - memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); - ieee80211_rx_irqsafe(hw, skb); -} - -static void Wb35Rx_adjust(struct wb35_descriptor *pRxDes) -{ - u32 *pRxBufferAddress; - u32 DecryptionMethod; - u32 i; - u16 BufferSize; - - DecryptionMethod = pRxDes->R01.R01_decryption_method; - pRxBufferAddress = pRxDes->buffer_address[0]; - BufferSize = pRxDes->buffer_size[0]; - - /* Adjust the last part of data. Only data left */ - BufferSize -= 4; /* For CRC-32 */ - if (DecryptionMethod) - BufferSize -= 4; - 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]; - 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]; - /* Update the descriptor, shift 8 byte */ - pRxDes->buffer_address[0] = pRxBufferAddress + 2; - 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 wb35_descriptor RxDes; - 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 */ - do { - RxBufferId = pWb35Rx->RxProcessIndex; - if (pWb35Rx->RxOwner[RxBufferId]) /* Owner by VM */ - break; - - pWb35Rx->RxProcessIndex++; - pWb35Rx->RxProcessIndex %= MAX_USB_RX_BUFFER_NUMBER; - - pRxBufferAddress = pWb35Rx->pDRx; - BufferSize = pWb35Rx->RxBufferSize[RxBufferId]; - - /* Parse the bulkin buffer */ - while (BufferSize >= 4) { - /* Is ending? */ - if ((cpu_to_le32(*(u32 *)pRxBufferAddress) & 0x0fffffff) == - RX_END_TAG) - break; - - /* 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 */ - if ((PacketSize & 0x03) > 0) - PacketSize -= 4; - - /* Basic check for Rx length. Is length valid? */ - if (PacketSize > MAX_PACKET_SIZE) { - pr_debug("Serious ERROR : Rx data size too long, size =%d\n", - PacketSize); - pWb35Rx->EP3vm_state = VM_STOP; - pWb35Rx->Ep3ErrorCount2++; - break; - } - - /* - * Wb35Rx_indicate() is called synchronously so it isn't - * necessary to set "RxDes.Desctriptor_ID = RxBufferID;" - */ - /* subtract 8 byte for 35's USB header length */ - BufferSize -= 8; - pRxBufferAddress += 8; - - RxDes.buffer_address[0] = pRxBufferAddress; - RxDes.buffer_size[0] = PacketSize; - RxDes.buffer_number = 1; - RxDes.buffer_start_index = 0; - RxDes.buffer_total_size = RxDes.buffer_size[0]; - Wb35Rx_adjust(&RxDes); - - packet_came(hw, pRxBufferAddress, PacketSize); - - /* Move RxBuffer point to the next */ - stmp = PacketSize + 3; - stmp &= ~0x03; /* 4n alignment */ - pRxBufferAddress += stmp; - BufferSize -= stmp; - stmp2 += stmp; - } - - /* Reclaim resource */ - pWb35Rx->RxOwner[RxBufferId] = 1; - } while (true); - return stmp2; -} - -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; - struct R00_descriptor R00; - - /* Variable setting */ - pWb35Rx->EP3vm_state = VM_COMPLETED; - 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 */ - pWb35Rx->EP3vm_state = VM_COMPLETED; - - if (pHwData->SurpriseRemove) /* 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 */ - R00.value = le32_to_cpu(*(u32 *)pRxBufferAddress); - - /* The URB is completed, check the result */ - if (pWb35Rx->EP3VM_status != 0) { - pr_debug("EP3 IoCompleteRoutine return error\n"); - pWb35Rx->EP3vm_state = VM_STOP; - goto error; - } - - /* For recovering. check if operating in single USB mode */ - if (!HAL_USB_MODE_BURST(pHwData)) { - SizeCheck = R00.R00_receive_byte_count; - if ((SizeCheck & 0x03) > 0) - SizeCheck -= 4; - SizeCheck = (SizeCheck + 3) & ~0x03; - SizeCheck += 12; /* 8 + 4 badbeef */ - if ((BulkLength > 1600) || - (SizeCheck > 1600) || - (BulkLength != SizeCheck) || - (BulkLength == 0)) { /* Add for fail Urb */ - pWb35Rx->EP3vm_state = VM_STOP; - pWb35Rx->Ep3ErrorCount2++; - } - } - - /* Indicating the receiving data */ - pWb35Rx->ByteReceived += BulkLength; - pWb35Rx->RxBufferSize[RxBufferId] = BulkLength; - - if (!pWb35Rx->RxOwner[RxBufferId]) - Wb35Rx_indicate(hw); - - kfree(pWb35Rx->pDRx); - /* Do the next receive */ - Wb35Rx(hw); - return; - -error: - pWb35Rx->RxOwner[RxBufferId] = 1; /* Set the owner to hardware */ - atomic_dec(&pWb35Rx->RxFireCounter); - pWb35Rx->EP3vm_state = VM_STOP; -} - -/* 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 */ - if (pHwData->SurpriseRemove) - goto error; - - if (pWb35Rx->rx_halt) - goto error; - - /* Get RxBuffer's ID */ - RxBufferId = pWb35Rx->RxBufferId; - if (!pWb35Rx->RxOwner[RxBufferId]) { - /* It's impossible to run here. */ - pr_debug("Rx driver fifo unavailable\n"); - goto error; - } - - /* Update buffer point, then start to bulkin the data from USB */ - pWb35Rx->RxBufferId++; - pWb35Rx->RxBufferId %= MAX_USB_RX_BUFFER_NUMBER; - - pWb35Rx->CurrentRxBufferId = RxBufferId; - - pWb35Rx->pDRx = kzalloc(MAX_USB_RX_BUFFER, GFP_ATOMIC); - if (!pWb35Rx->pDRx) { - dev_info(&hw->wiphy->dev, "w35und: Rx memory alloc failed\n"); - goto error; - } - pRxBufferAddress = pWb35Rx->pDRx; - - usb_fill_bulk_urb(urb, pHwData->udev, - usb_rcvbulkpipe(pHwData->udev, 3), - pRxBufferAddress, MAX_USB_RX_BUFFER, - Wb35Rx_Complete, hw); - - pWb35Rx->EP3vm_state = VM_RUNNING; - - retv = usb_submit_urb(urb, GFP_ATOMIC); - - if (retv != 0) { - dev_info(&hw->wiphy->dev, "Rx URB sending error\n"); - goto error; - } - return; - -error: - /* 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; - - /* Allow only one thread to run into the Wb35Rx() function */ - if (atomic_inc_return(&pWb35Rx->RxFireCounter) == 1) { - pWb35Rx->EP3vm_state = VM_RUNNING; - Wb35Rx(hw); - } else - atomic_dec(&pWb35Rx->RxFireCounter); -} - -static void Wb35Rx_reset_descriptor(struct hw_data *pHwData) -{ - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - u32 i; - - pWb35Rx->ByteReceived = 0; - pWb35Rx->RxProcessIndex = 0; - pWb35Rx->RxBufferId = 0; - 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; i < MAX_USB_RX_BUFFER_NUMBER; i++) - pWb35Rx->RxOwner[i] = 1; -} - -unsigned char Wb35Rx_initial(struct hw_data *pHwData) -{ - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - - /* Initial the Buffer Queue */ - Wb35Rx_reset_descriptor(pHwData); - - pWb35Rx->RxUrb = usb_alloc_urb(0, GFP_ATOMIC); - return !!pWb35Rx->RxUrb; -} - -void Wb35Rx_stop(struct hw_data *pHwData) -{ - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - - /* Canceling the Irp if already sends it out. */ - if (pWb35Rx->EP3vm_state == VM_RUNNING) { - /* Only use unlink, let Wb35Rx_destroy to free them */ - usb_unlink_urb(pWb35Rx->RxUrb); - pr_debug("EP3 Rx stop\n"); - } -} - -/* Needs process context */ -void Wb35Rx_destroy(struct hw_data *pHwData) -{ - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - - do { - msleep(10); /* Delay for waiting function enter */ - } while (pWb35Rx->EP3vm_state != VM_STOP); - msleep(10); /* Delay for waiting function exit */ - - usb_free_urb(pWb35Rx->RxUrb); - pr_debug("Wb35Rx_destroy OK\n"); -} - diff --git a/drivers/staging/winbond/wb35rx_f.h b/drivers/staging/winbond/wb35rx_f.h deleted file mode 100644 index 559bdca12e1a..000000000000 --- a/drivers/staging/winbond/wb35rx_f.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __WINBOND_WB35RX_F_H -#define __WINBOND_WB35RX_F_H - -#include -#include "wbhal.h" - -/* - * Interface function declaration - */ -unsigned char Wb35Rx_initial(struct hw_data *pHwData); -void Wb35Rx_destroy(struct hw_data *pHwData); -void Wb35Rx_stop(struct hw_data *pHwData); -void Wb35Rx_start(struct ieee80211_hw *hw); - -#endif diff --git a/drivers/staging/winbond/wb35rx_s.h b/drivers/staging/winbond/wb35rx_s.h deleted file mode 100644 index 545bc9500723..000000000000 --- a/drivers/staging/winbond/wb35rx_s.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __WINBOND_35RX_S_H -#define __WINBOND_35RX_S_H - -/* Definition for this module used */ -#define MAX_USB_RX_BUFFER 4096 /* This parameter must be 4096 931130.4.f */ -#define MAX_USB_RX_BUFFER_NUMBER ETHERNET_RX_DESCRIPTORS /* Maximum 254, 255 is RESERVED ID */ -#define RX_INTERFACE 0 /* Interface 1 */ -#define RX_PIPE 2 /* Pipe 3 */ -#define MAX_PACKET_SIZE 1600 /* 1568 = 8 + 1532 + 4 + 24(IV EIV MIC ICV CRC) for check DMA data 931130.4.g */ -#define RX_END_TAG 0x0badbeef - - -/* - * Internal variable for module - */ -struct wb35_rx { - u32 ByteReceived; /* For calculating throughput of BulkIn */ - atomic_t RxFireCounter;/* Does Wb35Rx module fire? */ - - u8 RxBuffer[MAX_USB_RX_BUFFER_NUMBER][((MAX_USB_RX_BUFFER+3) & ~0x03)]; - u16 RxBufferSize[((MAX_USB_RX_BUFFER_NUMBER+1) & ~0x01)]; - u8 RxOwner[((MAX_USB_RX_BUFFER_NUMBER+3) & ~0x03)]; /* Ownership of buffer 0:SW 1:HW */ - - u32 RxProcessIndex; /* The next index to process */ - u32 RxBufferId; - u32 EP3vm_state; - - u32 rx_halt; /* For VM stopping */ - - u16 MoreDataSize; - u16 PacketSize; - - u32 CurrentRxBufferId; /* For complete routine usage */ - u32 Rx3UrbCancel; - - u32 LastR1; /* For RSSI reporting */ - struct urb *RxUrb; - u32 Ep3ErrorCount2; /* 20060625.1 Usbd for Rx DMA error count */ - - int EP3VM_status; - u8 *pDRx; -}; - -#endif /* __WINBOND_35RX_S_H */ diff --git a/drivers/staging/winbond/wb35tx.c b/drivers/staging/winbond/wb35tx.c deleted file mode 100644 index 870cff39a226..000000000000 --- a/drivers/staging/winbond/wb35tx.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (c) 1996-2002 Winbond Electronic Corporation - * - * Module Name: - * Wb35Tx.c - * - * Abstract: - * Processing the Tx message and put into down layer - * - */ -#include -#include - -#include "wb35tx_f.h" -#include "mds_f.h" - -unsigned char -Wb35Tx_get_tx_buffer(struct hw_data *pHwData, u8 **pBuffer) -{ - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - *pBuffer = pWb35Tx->TxBuffer[0]; - return true; -} - -static void Wb35Tx(struct wbsoft_priv *adapter); - -static void Wb35Tx_complete(struct urb *pUrb) -{ - struct wbsoft_priv *adapter = pUrb->context; - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - struct wb35_mds *pMds = &adapter->Mds; - - printk("wb35: tx complete\n"); - /* Variable setting */ - pWb35Tx->EP4vm_state = VM_COMPLETED; - pWb35Tx->EP4VM_status = pUrb->status; /* Store the last result of Irp */ - /* Set the owner. Free the owner bit always. */ - pMds->TxOwner[pWb35Tx->TxSendIndex] = 0; - pWb35Tx->TxSendIndex++; - pWb35Tx->TxSendIndex %= MAX_USB_TX_BUFFER_NUMBER; - - if (pHwData->SurpriseRemove) /* Let WbWlanHalt handle surprise remove */ - goto error; - - if (pWb35Tx->tx_halt) - goto error; - - /* The URB is completed, check the result */ - if (pWb35Tx->EP4VM_status != 0) { - dev_err(&pUrb->dev->dev, "URB submission failed\n"); - pWb35Tx->EP4vm_state = VM_STOP; - goto error; - } - - Mds_Tx(adapter); - Wb35Tx(adapter); - return; - -error: - atomic_dec(&pWb35Tx->TxFireCounter); - pWb35Tx->EP4vm_state = VM_STOP; -} - -static void Wb35Tx(struct wbsoft_priv *adapter) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - u8 *pTxBufferAddress; - struct wb35_mds *pMds = &adapter->Mds; - struct urb *pUrb = (struct urb *)pWb35Tx->Tx4Urb; - int retv; - u32 SendIndex; - - if (pHwData->SurpriseRemove) - goto cleanup; - - if (pWb35Tx->tx_halt) - goto cleanup; - - /* Ownership checking */ - SendIndex = pWb35Tx->TxSendIndex; - /* No more data need to be sent, return immediately */ - if (!pMds->TxOwner[SendIndex]) - goto cleanup; - - pTxBufferAddress = pWb35Tx->TxBuffer[SendIndex]; - - /* Issuing URB */ - usb_fill_bulk_urb(pUrb, pHwData->udev, - usb_sndbulkpipe(pHwData->udev, 4), - pTxBufferAddress, pMds->TxBufferSize[SendIndex], - Wb35Tx_complete, adapter); - - pWb35Tx->EP4vm_state = VM_RUNNING; - retv = usb_submit_urb(pUrb, GFP_ATOMIC); - if (retv < 0) { - dev_err(&pUrb->dev->dev, "EP4 Tx Irp sending error\n"); - goto cleanup; - } - - /* Check if driver needs issue Irp for EP2 */ - pWb35Tx->TxFillCount += pMds->TxCountInBuffer[SendIndex]; - if (pWb35Tx->TxFillCount > 12) - Wb35Tx_EP2VM_start(adapter); - - pWb35Tx->ByteTransfer += pMds->TxBufferSize[SendIndex]; - return; - - cleanup: - pWb35Tx->EP4vm_state = VM_STOP; - atomic_dec(&pWb35Tx->TxFireCounter); -} - -void Wb35Tx_start(struct wbsoft_priv *adapter) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - /* Allow only one thread to run into function */ - if (atomic_inc_return(&pWb35Tx->TxFireCounter) == 1) { - pWb35Tx->EP4vm_state = VM_RUNNING; - Wb35Tx(adapter); - } else - atomic_dec(&pWb35Tx->TxFireCounter); -} - -unsigned char Wb35Tx_initial(struct hw_data *pHwData) -{ - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - pWb35Tx->Tx4Urb = usb_alloc_urb(0, GFP_ATOMIC); - if (!pWb35Tx->Tx4Urb) - return false; - - pWb35Tx->Tx2Urb = usb_alloc_urb(0, GFP_ATOMIC); - if (!pWb35Tx->Tx2Urb) { - usb_free_urb(pWb35Tx->Tx4Urb); - return false; - } - - return true; -} - -void Wb35Tx_stop(struct hw_data *pHwData) -{ - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - /* Try to cancel the Trp of EP2 */ - if (pWb35Tx->EP2vm_state == VM_RUNNING) - /* Only use unlink, let Wb35Tx_destroy free them */ - usb_unlink_urb(pWb35Tx->Tx2Urb); - pr_debug("EP2 Tx stop\n"); - - /* Try to cancel the Irp of EP4 */ - if (pWb35Tx->EP4vm_state == VM_RUNNING) - /* Only use unlink, let Wb35Tx_destroy free them */ - usb_unlink_urb(pWb35Tx->Tx4Urb); - pr_debug("EP4 Tx stop\n"); -} - -void Wb35Tx_destroy(struct hw_data *pHwData) -{ - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - /* Wait for VM stop */ - do { - msleep(10); /* Delay for waiting function enter 940623.1.a */ - } while ((pWb35Tx->EP2vm_state != VM_STOP) && (pWb35Tx->EP4vm_state != VM_STOP)); - msleep(10); /* Delay for waiting function enter 940623.1.b */ - - usb_free_urb(pWb35Tx->Tx4Urb); - usb_free_urb(pWb35Tx->Tx2Urb); - - pr_debug("Wb35Tx_destroy OK\n"); -} - -void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - bool Trigger = false; - - if (pWb35Tx->TxTimer > TimeCount) - Trigger = true; - else if (TimeCount > (pWb35Tx->TxTimer+500)) - Trigger = true; - - if (Trigger) { - pWb35Tx->TxTimer = TimeCount; - Wb35Tx_EP2VM_start(adapter); - } -} - -static void Wb35Tx_EP2VM(struct wbsoft_priv *adapter); - -static void Wb35Tx_EP2VM_complete(struct urb *pUrb) -{ - struct wbsoft_priv *adapter = pUrb->context; - struct hw_data *pHwData = &adapter->sHwData; - struct T02_descriptor T02, TSTATUS; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - u32 *pltmp = (u32 *)pWb35Tx->EP2_buf; - u32 i; - u16 InterruptInLength; - - /* Variable setting */ - pWb35Tx->EP2vm_state = VM_COMPLETED; - pWb35Tx->EP2VM_status = pUrb->status; - - /* For Linux 2.4. Interrupt will always trigger */ - if (pHwData->SurpriseRemove) /* Let WbWlanHalt handle surprise remove */ - goto error; - - if (pWb35Tx->tx_halt) - goto error; - - /* The Urb is completed, check the result */ - if (pWb35Tx->EP2VM_status != 0) { - dev_err(&pUrb->dev->dev, "EP2 IoCompleteRoutine return error\n"); - pWb35Tx->EP2vm_state = VM_STOP; - goto error; - } - - /* Update the Tx result */ - InterruptInLength = pUrb->actual_length; - /* Modify for minimum memory access and DWORD alignment. */ - T02.value = cpu_to_le32(pltmp[0]) >> 8; /* [31:8] -> [24:0] */ - InterruptInLength -= 1; /* 20051221.1.c Modify the follow for more stable */ - InterruptInLength >>= 2; /* InterruptInLength/4 */ - for (i = 1; i <= InterruptInLength; i++) { - T02.value |= ((cpu_to_le32(pltmp[i]) & 0xff) << 24); - - TSTATUS.value = T02.value; /* 20061009 anson's endian */ - Mds_SendComplete(adapter, &TSTATUS); - T02.value = cpu_to_le32(pltmp[i]) >> 8; - } - - return; -error: - atomic_dec(&pWb35Tx->TxResultCount); - pWb35Tx->EP2vm_state = VM_STOP; -} - -static void Wb35Tx_EP2VM(struct wbsoft_priv *adapter) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - struct urb *pUrb = (struct urb *)pWb35Tx->Tx2Urb; - u32 *pltmp = (u32 *)pWb35Tx->EP2_buf; - int retv; - - if (pHwData->SurpriseRemove) - goto error; - - if (pWb35Tx->tx_halt) - goto error; - - /* Issuing URB */ - usb_fill_int_urb(pUrb, pHwData->udev, usb_rcvintpipe(pHwData->udev, 2), - pltmp, MAX_INTERRUPT_LENGTH, Wb35Tx_EP2VM_complete, - adapter, 32); - - pWb35Tx->EP2vm_state = VM_RUNNING; - retv = usb_submit_urb(pUrb, GFP_ATOMIC); - - if (retv < 0) { - pr_debug("EP2 Tx Irp sending error\n"); - goto error; - } - - return; -error: - pWb35Tx->EP2vm_state = VM_STOP; - atomic_dec(&pWb35Tx->TxResultCount); -} - -void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter) -{ - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_tx *pWb35Tx = &pHwData->Wb35Tx; - - /* Allow only one thread to run into function */ - if (atomic_inc_return(&pWb35Tx->TxResultCount) == 1) { - pWb35Tx->EP2vm_state = VM_RUNNING; - Wb35Tx_EP2VM(adapter); - } else - atomic_dec(&pWb35Tx->TxResultCount); -} diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h deleted file mode 100644 index 018fd35e815d..000000000000 --- a/drivers/staging/winbond/wb35tx_f.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __WINBOND_WB35TX_F_H -#define __WINBOND_WB35TX_F_H - -#include "core.h" - -/* - * ==================================== - * 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 *hw_data); - -void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 time_count); - -#endif diff --git a/drivers/staging/winbond/wb35tx_s.h b/drivers/staging/winbond/wb35tx_s.h deleted file mode 100644 index dc120085d528..000000000000 --- a/drivers/staging/winbond/wb35tx_s.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef __WINBOND_WB35_TX_S_H -#define __WINBOND_WB35_TX_S_H - -#include "mds_s.h" - -/* IS89C35 Tx related definition */ -#define TX_INTERFACE 0 /* Interface 1 */ -#define TX_PIPE 3 /* Endpoint 4 */ -#define TX_INTERRUPT 1 /* Endpoint 2 */ -#define MAX_INTERRUPT_LENGTH 64 /* It must be 64 for EP2 hardware */ - -/* Internal variable for module */ -struct wb35_tx { - /* For Tx buffer */ - u8 TxBuffer[MAX_USB_TX_BUFFER_NUMBER][MAX_USB_TX_BUFFER]; - - /* For Interrupt pipe */ - u8 EP2_buf[MAX_INTERRUPT_LENGTH]; - - atomic_t TxResultCount; /* For thread control of EP2 931130.4.m */ - atomic_t TxFireCounter; /* For thread control of EP4 931130.4.n */ - u32 ByteTransfer; - - u32 TxSendIndex; /* The next index of Mds array to be sent */ - u32 EP2vm_state; /* for EP2vm state */ - u32 EP4vm_state; /* for EP4vm state */ - u32 tx_halt; /* Stopping VM */ - - struct urb *Tx4Urb; - struct urb *Tx2Urb; - - int EP2VM_status; - int EP4VM_status; - - u32 TxFillCount; /* 20060928 */ - u32 TxTimer; /* 20060928 Add if sending packet is greater than 13 */ -}; - -#endif diff --git a/drivers/staging/winbond/wbhal.h b/drivers/staging/winbond/wbhal.h deleted file mode 100644 index 289ee549146d..000000000000 --- a/drivers/staging/winbond/wbhal.h +++ /dev/null @@ -1,513 +0,0 @@ -#ifndef __WINBOND_WBHAL_S_H -#define __WINBOND_WBHAL_S_H - -#include -#include /* for ETH_ALEN */ - -#define HAL_LED_SET_MASK 0x001c -#define HAL_LED_SET_SHIFT 2 - -/* 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_AIROHA_2230 16 -#define RF_AIROHA_7230 17 -#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 - * ============================== - */ -/* 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_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 */ -#define DOT_3_TYPE_OFFSET 12 -#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 encapsulation. */ -#define DEFAULT_SIFSTIME 10 -#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 - -/* 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 HAL_WOL_TYPE_WAKEUP_FRAME 0x01 -#define HAL_WOL_TYPE_MAGIC_PACKET 0x02 - -#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 */ -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 */ -#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 0x000000bf -#define FLAG_ERROR_RX_MASK 0x0000083f - -#define FLAG_BAND_RX_MASK 0x10000000 /* Bit 28 */ - -struct R00_descriptor { - union { - u32 value; -#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 { - 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 - }; -}; - -struct T00_descriptor { - union { - u32 value; -#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 { - u32 T00_frame_length:12; - u32 T00_header_length:6; - u32 T00_RESERVED:4; - 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 - }; -}; - -struct R01_descriptor { - union { - u32 value; -#ifdef _BIG_ENDIAN_ - struct { - u32 R01_RESERVED:3; - u32 R01_mod_type:1; - u32 R01_pre_type:1; - u32 R01_data_rate:3; - u32 R01_AGC_state:8; - u32 R01_LNA_state:2; - u32 R01_decryption_method:2; - u32 R01_mic_error:1; - u32 R01_replay:1; - u32 R01_broadcast_frame:1; - u32 R01_multicast_frame:1; - u32 R01_directed_frame:1; - u32 R01_receive_frame_antenna_selection:1; - u32 R01_frame_receive_during_atim_window:1; - u32 R01_protocol_version_error:1; - u32 R01_authentication_frame_icv_error:1; - u32 R01_null_key_to_authentication_frame:1; - u32 R01_icv_error:1; - u32 R01_crc_error:1; - }; -#else - struct { - u32 R01_crc_error:1; - u32 R01_icv_error:1; - u32 R01_null_key_to_authentication_frame:1; - u32 R01_authentication_frame_icv_error:1; - u32 R01_protocol_version_error:1; - u32 R01_frame_receive_during_atim_window:1; - u32 R01_receive_frame_antenna_selection:1; - u32 R01_directed_frame:1; - u32 R01_multicast_frame:1; - u32 R01_broadcast_frame:1; - u32 R01_replay:1; - u32 R01_mic_error:1; - u32 R01_decryption_method:2; - u32 R01_LNA_state:2; - u32 R01_AGC_state:8; - u32 R01_data_rate:3; - u32 R01_pre_type:1; - u32 R01_mod_type:1; - u32 R01_RESERVED:3; - }; -#endif - }; -}; - -struct T01_descriptor { - union { - u32 value; -#ifdef _BIG_ENDIAN_ - struct { - u32 T01_rts_cts_duration:16; - u32 T01_fall_back_rate:3; - u32 T01_add_rts:1; - u32 T01_add_cts:1; - u32 T01_modulation_type:1; - u32 T01_plcp_header_length:1; - u32 T01_transmit_rate:3; - u32 T01_wep_id:2; - u32 T01_add_challenge_text:1; - u32 T01_inhibit_crc:1; - u32 T01_loop_back_wep_mode:1; - u32 T01_retry_abort_enable:1; - }; -#else - struct { - u32 T01_retry_abort_enable:1; - u32 T01_loop_back_wep_mode:1; - u32 T01_inhibit_crc:1; - u32 T01_add_challenge_text:1; - u32 T01_wep_id:2; - u32 T01_transmit_rate:3; - u32 T01_plcp_header_length:1; - u32 T01_modulation_type:1; - u32 T01_add_cts:1; - u32 T01_add_rts:1; - u32 T01_fall_back_rate:3; - u32 T01_rts_cts_duration:16; - }; -#endif - }; -}; - -struct T02_descriptor { - union { - u32 value; -#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; - u32 T02_RESERVED:7; - u32 T02_transmit_complete:1; - u32 T02_transmit_abort_due_to_TBTT:1; - u32 T02_effective_transmission_rate:1; - u32 T02_transmit_without_encryption_due_to_wep_on_false:1; - u32 T02_discard_due_to_null_wep_key:1; - u32 T02_RESERVED_1:1; - u32 T02_out_of_MaxTxMSDULiftTime:1; - u32 T02_transmit_abort:1; - u32 T02_transmit_fail:1; - }; -#else - struct { - u32 T02_transmit_fail:1; - u32 T02_transmit_abort:1; - u32 T02_out_of_MaxTxMSDULiftTime:1; - u32 T02_RESERVED_1:1; - u32 T02_discard_due_to_null_wep_key:1; - u32 T02_transmit_without_encryption_due_to_wep_on_false:1; - u32 T02_effective_transmission_rate:1; - u32 T02_transmit_abort_due_to_TBTT:1; - u32 T02_transmit_complete:1; - u32 T02_RESERVED:7; - 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. */ - u32 T02_IsLastMpdu:1; /* The same mechanism with T00 setting */ - }; -#endif - }; -}; - -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------ */ - 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 PreambleMode;/* 0: short 1:long */ - u8 TxRate; - u8 FragmentCount; - u8 EapFix; /* For speed up key install */ - - /* For R00 and T00 ------------------------------ */ - union { - struct R00_descriptor R00; - struct T00_descriptor T00; - }; - - /* For R01 and T01 ------------------------------ */ - union { - struct R01_descriptor R01; - struct T01_descriptor T01; - }; - - /* For R02 and T02 ------------------------------ */ - union { - u32 R02; - struct T02_descriptor T02; - }; - - /* For R03 and T03 ------------------------------ */ - /* For software used */ - union { - u32 R03; - u32 T03; - 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]; -}; - -#define MAX_TXVGA_EEPROM 9 /* How many word(u16) of EEPROM will be used for TxVGA */ -#define MAX_RF_PARAMETER 32 - -struct txvga_for_50 { - u8 ChanNo; - u8 TxVgaValue; -}; - -/* - * ============================================== - * Device related include - * ============================================== - */ - -#include "wb35reg_s.h" -#include "wb35tx_s.h" -#include "wb35rx_s.h" - -/* For Hal using ============================================ */ -struct hw_data { - /* 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 */ - - /* For surprise remove */ - u32 SurpriseRemove; /* 0: Normal 1: Surprise remove */ - u8 IsKeyPreSet; - u8 CalOneTime; - - u8 VCO_trim; - - 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 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; - u8 Channel; - - u16 ListenInterval; - u16 CapabilityInformation; - - 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 */ - - u32 phy_para[MAX_RF_PARAMETER]; - u32 phy_number; - - 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 cwmin; - u8 desired_power_save; - 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 CurrentDefaultKeyIndex; - u32 CurrentDefaultKeyLength; - - /* - * ================================================== - * Variable for each module - * ================================================== - */ - struct usb_device *udev; - 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 */ - - u32 LEDpoint; /* For LED */ - - 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 */ - 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; - - u16 SoftwareSet; - u16 Reserved_s; - - 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; - - u8 TxVgaSettingInEEPROM[(((MAX_TXVGA_EEPROM * 2) + 3) & ~0x03)]; /* For EEPROM value */ - u8 TxVgaFor24[16]; /* Max is 14, 2 for alignment */ - struct txvga_for_50 TxVgaFor50[36]; /* 35 channels in 5G. 35x2 = 70 byte. 2 for alignments */ - - u16 Scan_Interval; - u16 RESERVED6; - - /* 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 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; - - /* For global timer */ - u32 time_count; /* TICK_TIME_100ms 1 = 100ms */ -}; - -#endif diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c deleted file mode 100644 index 0d29624416c3..000000000000 --- a/drivers/staging/winbond/wbusb.c +++ /dev/null @@ -1,853 +0,0 @@ -/* - * Copyright 2008 Pavel Machek - * - * Distribute under GPLv2. - * - * The original driver was written by: - * Jeff Lee - * - * and was adapted to the 2.6 kernel by: - * Costantino Leandro (Rxart Desktop) - */ -#include -#include -#include - -#include "core.h" -#include "mds_f.h" -#include "mto.h" -#include "wbhal.h" -#include "wb35reg_f.h" -#include "wb35tx_f.h" -#include "wb35rx_f.h" - -MODULE_DESCRIPTION("IS89C35 802.11bg WLAN USB Driver"); -MODULE_LICENSE("GPL"); -MODULE_VERSION("0.1"); - -static const struct usb_device_id wb35_table[] = { - { USB_DEVICE(0x0416, 0x0035) }, - { USB_DEVICE(0x18E8, 0x6201) }, - { USB_DEVICE(0x18E8, 0x6206) }, - { USB_DEVICE(0x18E8, 0x6217) }, - { USB_DEVICE(0x18E8, 0x6230) }, - { USB_DEVICE(0x18E8, 0x6233) }, - { USB_DEVICE(0x1131, 0x2035) }, - { 0, } -}; - -MODULE_DEVICE_TABLE(usb, wb35_table); - -static struct ieee80211_rate wbsoft_rates[] = { - { .bitrate = 10, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, -}; - -static struct ieee80211_channel wbsoft_channels[] = { - { .center_freq = 2412 }, -}; - -static struct ieee80211_supported_band wbsoft_band_2GHz = { - .channels = wbsoft_channels, - .n_channels = ARRAY_SIZE(wbsoft_channels), - .bitrates = wbsoft_rates, - .n_bitrates = ARRAY_SIZE(wbsoft_rates), -}; - -static void hal_set_beacon_period(struct hw_data *pHwData, u16 beacon_period) -{ - u32 tmp; - - if (pHwData->SurpriseRemove) - return; - - pHwData->BeaconPeriod = beacon_period; - tmp = pHwData->BeaconPeriod << 16; - tmp |= pHwData->ProbeDelay; - Wb35Reg_Write(pHwData, 0x0848, tmp); -} - -static int wbsoft_add_interface(struct ieee80211_hw *dev, - struct ieee80211_vif *vif) -{ - struct wbsoft_priv *priv = dev->priv; - - hal_set_beacon_period(&priv->sHwData, vif->bss_conf.beacon_int); - - return 0; -} - -static void wbsoft_remove_interface(struct ieee80211_hw *dev, - struct ieee80211_vif *vif) -{ -} - -static void wbsoft_stop(struct ieee80211_hw *hw) -{ -} - -static int wbsoft_get_stats(struct ieee80211_hw *hw, - struct ieee80211_low_level_stats *stats) -{ - return 0; -} - -static u64 wbsoft_prepare_multicast(struct ieee80211_hw *hw, - struct netdev_hw_addr_list *mc_list) -{ - return netdev_hw_addr_list_count(mc_list); -} - -static void wbsoft_configure_filter(struct ieee80211_hw *dev, - unsigned int changed_flags, - unsigned int *total_flags, - u64 multicast) -{ - unsigned int new_flags; - - new_flags = 0; - - if (*total_flags & FIF_PROMISC_IN_BSS) - new_flags |= FIF_PROMISC_IN_BSS; - else if ((*total_flags & FIF_ALLMULTI) || (multicast > 32)) - new_flags |= FIF_ALLMULTI; - - dev->flags &= ~IEEE80211_HW_RX_INCLUDES_FCS; - - *total_flags = new_flags; -} - -static void wbsoft_tx(struct ieee80211_hw *dev, - struct ieee80211_tx_control *control, - struct sk_buff *skb) -{ - struct wbsoft_priv *priv = dev->priv; - - if (priv->sMlmeFrame.is_in_used != PACKET_FREE_TO_USE) { - priv->sMlmeFrame.wNumTxMMPDUDiscarded++; - kfree_skb(skb); - return; - } - - priv->sMlmeFrame.is_in_used = PACKET_COME_FROM_MLME; - - priv->sMlmeFrame.pMMPDU = skb->data; - priv->sMlmeFrame.data_type = FRAME_TYPE_802_11_MANAGEMENT; - priv->sMlmeFrame.len = skb->len; - priv->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. - */ - - Mds_Tx(priv); -} - -static int wbsoft_start(struct ieee80211_hw *dev) -{ - struct wbsoft_priv *priv = dev->priv; - - priv->enabled = true; - - return 0; -} - -static void hal_set_radio_mode(struct hw_data *pHwData, unsigned char radio_off) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (pHwData->SurpriseRemove) - return; - - if (radio_off) { /* disable Baseband receive off */ - pHwData->CurrentRadioSw = 1; /* off */ - reg->M24_MacControl &= 0xffffffbf; - } else { - 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) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (pHwData->SurpriseRemove) - return; - - RFSynthesizer_SwitchingChannel(pHwData, channel); /* Switch channel */ - pHwData->Channel = channel.ChanNo; - pHwData->band = channel.band; - 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)); -} - -static void hal_set_current_channel(struct hw_data *pHwData, struct chan_info channel) -{ - hal_set_current_channel_ex(pHwData, channel); -} - -static void hal_set_accept_broadcast(struct hw_data *pHwData, u8 enable) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (pHwData->SurpriseRemove) - return; - - reg->M00_MacControl &= ~0x02000000; /* The HW value */ - - if (enable) - 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. */ -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); - } else { - reg->M00_MacControl &= ~0x00400000; - Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); - } -} - -static void hal_set_accept_multicast(struct hw_data *pHwData, u8 enable) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (pHwData->SurpriseRemove) - return; - - reg->M00_MacControl &= ~0x01000000; /* The HW value */ - if (enable) - reg->M00_MacControl |= 0x01000000; /* The HW value */ - Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); -} - -static void hal_set_accept_beacon(struct hw_data *pHwData, u8 enable) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (pHwData->SurpriseRemove) - return; - - if (!enable) /* Due to SME and MLME are not suitable for 35 */ - return; - - reg->M00_MacControl &= ~0x04000000; /* The HW value */ - if (enable) - reg->M00_MacControl |= 0x04000000; /* The HW value */ - - Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); -} - -static int wbsoft_config(struct ieee80211_hw *dev, u32 changed) -{ - struct wbsoft_priv *priv = dev->priv; - struct chan_info ch; - - /* Should use channel_num, or something, as that is already pre-translated */ - ch.band = 1; - ch.ChanNo = 1; - - hal_set_current_channel(&priv->sHwData, ch); - hal_set_accept_broadcast(&priv->sHwData, 1); - hal_set_accept_promiscuous(&priv->sHwData, 1); - hal_set_accept_multicast(&priv->sHwData, 1); - hal_set_accept_beacon(&priv->sHwData, 1); - hal_set_radio_mode(&priv->sHwData, 0); - - return 0; -} - -static u64 wbsoft_get_tsf(struct ieee80211_hw *dev, struct ieee80211_vif *vif) -{ - return 0; -} - -static const struct ieee80211_ops wbsoft_ops = { - .tx = wbsoft_tx, - .start = wbsoft_start, - .stop = wbsoft_stop, - .add_interface = wbsoft_add_interface, - .remove_interface = wbsoft_remove_interface, - .config = wbsoft_config, - .prepare_multicast = wbsoft_prepare_multicast, - .configure_filter = wbsoft_configure_filter, - .get_stats = wbsoft_get_stats, - .get_tsf = wbsoft_get_tsf, -}; - -static void hal_set_ethernet_address(struct hw_data *pHwData, u8 *current_address) -{ - u32 ltmp[2]; - - if (pHwData->SurpriseRemove) - return; - - 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; - - Wb35Reg_BurstWrite(pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT); -} - -static void hal_get_permanent_address(struct hw_data *pHwData, u8 *pethernet_address) -{ - if (pHwData->SurpriseRemove) - return; - - memcpy(pethernet_address, pHwData->PermanentMacAddress, 6); -} - -static void hal_stop(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - - pHwData->Wb35Rx.rx_halt = 1; - Wb35Rx_stop(pHwData); - - pHwData->Wb35Tx.tx_halt = 1; - Wb35Tx_stop(pHwData); - - reg->D00_DmaControl &= ~0xc0000000; /* Tx Off, Rx Off */ - Wb35Reg_Write(pHwData, 0x0400, reg->D00_DmaControl); -} - -static unsigned char hal_idle(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - - if (!pHwData->SurpriseRemove && reg->EP0vm_state != VM_STOP) - return false; - - return true; -} - -u8 hal_get_antenna_number(struct hw_data *pHwData) -{ - struct wb35_reg *reg = &pHwData->reg; - - if ((reg->BB2C & BIT(11)) == 0) - return 0; - else - return 1; -} - -/* 0 : radio on; 1: radio off */ -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 */ - Wb35Reg_Read(pHwData, 0x3b0, ®->U1B0); - if ((reg->U1B0 & 0x00010000)) { - pHwData->CurrentRadioHw = 1; - return 1; - } else { - pHwData->CurrentRadioHw = 0; - return 0; - } -} - -static u8 LED_GRAY[20] = { - 0, 3, 4, 6, 8, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 8, 6, 4, 2 -}; - -static u8 LED_GRAY2[30] = { - 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 14, 13, 12, 11, 10, 9, 8 -}; - -static void hal_led_control(unsigned long data) -{ - struct wbsoft_priv *adapter = (struct wbsoft_priv *)data; - struct hw_data *pHwData = &adapter->sHwData; - struct wb35_reg *reg = &pHwData->reg; - u32 LEDSet = (pHwData->SoftwareSet & HAL_LED_SET_MASK) >> HAL_LED_SET_SHIFT; - u32 TimeInterval = 500, ltmp, ltmp2; - ltmp = 0; - - if (pHwData->SurpriseRemove) - return; - - if (pHwData->LED_control) { - ltmp2 = pHwData->LED_control & 0xff; - 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]... */ - pHwData->LED_Blinking %= 3; - 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]... */ - pHwData->LED_Blinking %= 2; - 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]... */ - 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 = 0; - break; - 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. */ - 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 */ - reg->U1BC_LEDConfigure |= (ltmp & 0xff00) >> 8; - } - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); - } - } 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 */ - if (pHwData->LED_Scanning) { - if (pHwData->LED_Blinking == 0) { - reg->U1BC_LEDConfigure |= 0x10; - 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 */ - pHwData->LED_Blinking = 0; - TimeInterval = 300; - } - } else { - /* Turn Off LED_0 */ - if (reg->U1BC_LEDConfigure & 0x10) { - reg->U1BC_LEDConfigure &= ~0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ - } - } - } else { - /* Turn On LED_0 */ - if ((reg->U1BC_LEDConfigure & 0x10) == 0) { - reg->U1BC_LEDConfigure |= 0x10; - 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 */ - 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 */ - pHwData->LED_Blinking = 1; - TimeInterval = 300; - } else { - reg->U1BC_LEDConfigure &= ~0x1f; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ - pHwData->LED_Blinking = 0; - TimeInterval = 300; - } - } else { - /* Gray blinking if in disconnect state and not scanning */ - ltmp = reg->U1BC_LEDConfigure; - reg->U1BC_LEDConfigure &= ~0x1f; - if (LED_GRAY2[(pHwData->LED_Blinking % 30)]) { - reg->U1BC_LEDConfigure |= 0x10; - reg->U1BC_LEDConfigure |= - LED_GRAY2[(pHwData->LED_Blinking % 30)]; - } - pHwData->LED_Blinking++; - if (reg->U1BC_LEDConfigure != ltmp) - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ - TimeInterval = 100; - } - } else { - /* Turn On LED_0 */ - if ((reg->U1BC_LEDConfigure & 0x10) == 0) { - reg->U1BC_LEDConfigure |= 0x10; - 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 */ - if (pHwData->LED_Scanning) { - if (pHwData->LED_Blinking == 0) { - 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 */ - pHwData->LED_Blinking = 0; - TimeInterval = 300; - } - } else { - /* Turn Off LED_1 */ - if (reg->U1BC_LEDConfigure & 0x1000) { - reg->U1BC_LEDConfigure &= ~0x1000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 Off */ - } - } - } else { - /* 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 */ - } - /* Update variable */ - pHwData->RxByteCountLast = - adapter->RxByteCount; - pHwData->TxByteCountLast = - adapter->TxByteCount; - TimeInterval = 200; - } else { - /* 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 */ - } - } - } - break; - 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 */ - Wb35Reg_Write(pHwData, 0x03bc, - reg->U1BC_LEDConfigure); - } - - if (pHwData->LED_Blinking) { - /* Gray blinking */ - reg->U1BC_LEDConfigure &= ~0x0f; - reg->U1BC_LEDConfigure |= 0x10; - reg->U1BC_LEDConfigure |= - LED_GRAY[(pHwData->LED_Blinking - 1) % 20]; - Wb35Reg_Write(pHwData, 0x03bc, - reg->U1BC_LEDConfigure); - - pHwData->LED_Blinking += 2; - if (pHwData->LED_Blinking < 40) - TimeInterval = 100; - else { - pHwData->LED_Blinking = 0; /* Stop blinking */ - reg->U1BC_LEDConfigure &= ~0x0f; - Wb35Reg_Write(pHwData, 0x03bc, - reg->U1BC_LEDConfigure); - } - break; - } - - if (pHwData->LED_LinkOn) { - 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 */ - TimeInterval = 50; - } - } else { - if (reg->U1BC_LEDConfigure & 0x10) { /* Check the LED_0 */ - reg->U1BC_LEDConfigure &= ~0x10; - Wb35Reg_Write(pHwData, 0x03bc, - reg->U1BC_LEDConfigure); - } - } - break; - } - } - - pHwData->time_count += TimeInterval; - Wb35Tx_CurrentTime(adapter, pHwData->time_count); - pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(TimeInterval); - add_timer(&pHwData->LEDTimer); -} - -static int hal_init_hardware(struct ieee80211_hw *hw) -{ - struct wbsoft_priv *priv = hw->priv; - struct hw_data *pHwData = &priv->sHwData; - u16 SoftwareSet; - - pHwData->MaxReceiveLifeTime = DEFAULT_MSDU_LIFE_TIME; - pHwData->FragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; - - if (!Wb35Reg_initial(pHwData)) - goto error_reg_destroy; - - if (!Wb35Tx_initial(pHwData)) - goto error_tx_destroy; - - if (!Wb35Rx_initial(pHwData)) - goto error_rx_destroy; - - init_timer(&pHwData->LEDTimer); - pHwData->LEDTimer.function = hal_led_control; - pHwData->LEDTimer.data = (unsigned long)priv; - pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(1000); - add_timer(&pHwData->LEDTimer); - - SoftwareSet = hal_software_set(pHwData); - - Wb35Rx_start(hw); - Wb35Tx_EP2VM_start(priv); - - return 0; - -error_rx_destroy: - Wb35Rx_destroy(pHwData); -error_tx_destroy: - Wb35Tx_destroy(pHwData); -error_reg_destroy: - Wb35Reg_destroy(pHwData); - - pHwData->SurpriseRemove = 1; - return -EINVAL; -} - -static int wb35_hw_init(struct ieee80211_hw *hw) -{ - struct wbsoft_priv *priv = hw->priv; - struct hw_data *pHwData = &priv->sHwData; - u8 EEPROM_region; - u8 HwRadioOff; - u8 *pMacAddr2; - u8 *pMacAddr; - int err; - - pHwData->phy_type = RF_DECIDE_BY_INF; - - priv->Mds.TxRTSThreshold = DEFAULT_RTSThreshold; - priv->Mds.TxFragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; - - priv->sLocalPara.region_INF = REGION_AUTO; - priv->sLocalPara.TxRateMode = RATE_AUTO; - priv->sLocalPara.bMacOperationMode = MODE_802_11_BG; - priv->sLocalPara.MTUsize = MAX_ETHERNET_PACKET_SIZE; - priv->sLocalPara.bPreambleMode = AUTO_MODE; - priv->sLocalPara.bWepKeyError = false; - priv->sLocalPara.bToSelfPacketReceived = false; - priv->sLocalPara.WepKeyDetectTimerCount = 2 * 100; /* 2 seconds */ - - priv->sLocalPara.RadioOffStatus.boSwRadioOff = false; - - err = hal_init_hardware(hw); - if (err) - goto error; - - EEPROM_region = hal_get_region_from_EEPROM(pHwData); - if (EEPROM_region != REGION_AUTO) - priv->sLocalPara.region = EEPROM_region; - else { - if (priv->sLocalPara.region_INF != REGION_AUTO) - priv->sLocalPara.region = priv->sLocalPara.region_INF; - else - priv->sLocalPara.region = REGION_USA; /* default setting */ - } - - Mds_initial(priv); - - /* - * If no user-defined address in the registry, use the address - * "burned" on the NIC instead. - */ - pMacAddr = priv->sLocalPara.ThisMacAddress; - pMacAddr2 = priv->sLocalPara.PermanentAddress; - - /* Reading ethernet address from EEPROM */ - hal_get_permanent_address(pHwData, priv->sLocalPara.PermanentAddress); - if (memcmp(pMacAddr, "\x00\x00\x00\x00\x00\x00", MAC_ADDR_LENGTH) == 0) - memcpy(pMacAddr, pMacAddr2, MAC_ADDR_LENGTH); - else { - /* Set the user define MAC address */ - hal_set_ethernet_address(pHwData, - priv->sLocalPara.ThisMacAddress); - } - - priv->sLocalPara.bAntennaNo = hal_get_antenna_number(pHwData); - hal_get_hw_radio_off(pHwData); - - /* Waiting for HAL setting OK */ - while (!hal_idle(pHwData)) - msleep(10); - - MTO_Init(priv); - - HwRadioOff = hal_get_hw_radio_off(pHwData); - priv->sLocalPara.RadioOffStatus.boHwRadioOff = !!HwRadioOff; - - hal_set_radio_mode(pHwData, - (unsigned char)(priv->sLocalPara.RadioOffStatus. - boSwRadioOff - || priv->sLocalPara.RadioOffStatus. - boHwRadioOff)); - - /* Notify hal that the driver is ready now. */ - hal_driver_init_OK(pHwData) = 1; - -error: - return err; -} - -static int wb35_probe(struct usb_interface *intf, - const struct usb_device_id *id_table) -{ - struct usb_device *udev = interface_to_usbdev(intf); - struct usb_endpoint_descriptor *endpoint; - struct usb_host_interface *interface; - struct ieee80211_hw *dev; - struct wbsoft_priv *priv; - int err; - u32 ltmp; - - usb_get_dev(udev); - - /* Check the device if it already be opened */ - err = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), - 0x01, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, - 0x0, 0x400, <mp, 4, HZ * 100); - if (err < 0) - goto error; - - /* Is already initialized? */ - ltmp = cpu_to_le32(ltmp); - if (ltmp) { - err = -EBUSY; - goto error; - } - - dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); - if (!dev) { - err = -ENOMEM; - goto error; - } - - priv = dev->priv; - - priv->sHwData.udev = udev; - - interface = intf->cur_altsetting; - endpoint = &interface->endpoint[0].desc; - - err = wb35_hw_init(dev); - if (err) - goto error_free_hw; - - SET_IEEE80211_DEV(dev, &udev->dev); - { - struct hw_data *pHwData = &priv->sHwData; - unsigned char dev_addr[MAX_ADDR_LEN]; - hal_get_permanent_address(pHwData, dev_addr); - SET_IEEE80211_PERM_ADDR(dev, dev_addr); - } - - dev->extra_tx_headroom = 12; /* FIXME */ - dev->flags = IEEE80211_HW_SIGNAL_UNSPEC; - dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); - - dev->max_signal = 100; - dev->queues = 1; - - dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &wbsoft_band_2GHz; - - err = ieee80211_register_hw(dev); - if (err) - goto error_free_hw; - - usb_set_intfdata(intf, dev); - - return 0; - -error_free_hw: - ieee80211_free_hw(dev); -error: - usb_put_dev(udev); - return err; -} - -static void hal_halt(struct hw_data *pHwData) -{ - del_timer_sync(&pHwData->LEDTimer); - /* XXX: Wait for Timer DPC exit. */ - msleep(100); - Wb35Rx_destroy(pHwData); - Wb35Tx_destroy(pHwData); - Wb35Reg_destroy(pHwData); -} - -static void wb35_hw_halt(struct wbsoft_priv *adapter) -{ - /* Turn off Rx and Tx hardware ability */ - hal_stop(&adapter->sHwData); - /* Waiting Irp completed */ - msleep(100); - - hal_halt(&adapter->sHwData); -} - -static void wb35_disconnect(struct usb_interface *intf) -{ - struct ieee80211_hw *hw = usb_get_intfdata(intf); - struct wbsoft_priv *priv = hw->priv; - - wb35_hw_halt(priv); - - ieee80211_stop_queues(hw); - ieee80211_unregister_hw(hw); - ieee80211_free_hw(hw); - - usb_set_intfdata(intf, NULL); - usb_put_dev(interface_to_usbdev(intf)); -} - -static struct usb_driver wb35_driver = { - .name = "w35und", - .id_table = wb35_table, - .probe = wb35_probe, - .disconnect = wb35_disconnect, -}; - -module_usb_driver(wb35_driver); -- cgit From 87a46909b36ad191352bfb7ac596d2c9c6901ef5 Mon Sep 17 00:00:00 2001 From: Guillaume Morin Date: Sat, 28 Jun 2014 16:54:00 +0100 Subject: staging: iio: ad9850.c: code cleanup checkpath.pl was complaining about value_mask: ERROR: Macros with complex values should be enclosed in parenthesis I fixed this by simply removing it since it's not used (as well as another macro). Got rid of the un-necessary error_ret label as well. Signed-off-by: Guillaume Morin Reported-by: Michael Welling Acked-by: Greg Kroah-Hartman Signed-off-by: Jonathan Cameron --- drivers/staging/iio/frequency/ad9850.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/frequency/ad9850.c b/drivers/staging/iio/frequency/ad9850.c index af877ff680e9..8727933cafcf 100644 --- a/drivers/staging/iio/frequency/ad9850.c +++ b/drivers/staging/iio/frequency/ad9850.c @@ -21,9 +21,6 @@ #define DRV_NAME "ad9850" -#define value_mask (u16)0xf000 -#define addr_shift 12 - /* Register format: 4 bits addr + 12 bits value */ struct ad9850_config { u8 control[5]; @@ -50,9 +47,6 @@ static ssize_t ad9850_set_parameter(struct device *dev, mutex_lock(&st->lock); ret = spi_sync_transfer(st->sdev, &xfer, 1); - if (ret) - goto error_ret; -error_ret: mutex_unlock(&st->lock); return ret ? ret : len; -- cgit From af690ce9d7c09877460e818e28a48a84b0f75258 Mon Sep 17 00:00:00 2001 From: Marek Belisko Date: Fri, 14 Feb 2014 14:25:00 +0000 Subject: staging: iio: hmc5843: Add all available models to device tree id table. Signed-off-by: Marek Belisko Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/hmc5843.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c index d4f4dd90c699..f595fdcc79b0 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ b/drivers/staging/iio/magnetometer/hmc5843.c @@ -630,7 +630,9 @@ static const struct i2c_device_id hmc5843_id[] = { MODULE_DEVICE_TABLE(i2c, hmc5843_id); static const struct of_device_id hmc5843_of_match[] = { - { .compatible = "honeywell,hmc5843" }, + { .compatible = "honeywell,hmc5843", .data = (void *)HMC5843_ID }, + { .compatible = "honeywell,hmc5883", .data = (void *)HMC5883_ID }, + { .compatible = "honeywell,hmc5883l", .data = (void *)HMC5883L_ID }, {} }; MODULE_DEVICE_TABLE(of, hmc5843_of_match); -- cgit From f1b07cdf6ba396d0ddcfd01caf358bdf897090d6 Mon Sep 17 00:00:00 2001 From: Federico Di Pierro Date: Sun, 29 Jun 2014 10:41:00 +0100 Subject: staging: iio: Coding style issues fix. Fix some little style issues in drivers/staging/iio/frequency/ad9832.c . This is my latest task of the eudyptula challenge (third attempt!) Signed-off-by: Federico Di Pierro Signed-off-by: Jonathan Cameron --- drivers/staging/iio/frequency/ad9832.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c index c7d0307c8e76..b7c8351ce2ff 100644 --- a/drivers/staging/iio/frequency/ad9832.c +++ b/drivers/staging/iio/frequency/ad9832.c @@ -57,7 +57,7 @@ static int ad9832_write_frequency(struct ad9832_state *st, } static int ad9832_write_phase(struct ad9832_state *st, - unsigned long addr, unsigned long phase) + unsigned long addr, unsigned long phase) { if (phase > (1 << AD9832_PHASE_BITS)) return -EINVAL; @@ -72,10 +72,8 @@ static int ad9832_write_phase(struct ad9832_state *st, return spi_sync(st->spi, &st->phase_msg); } -static ssize_t ad9832_write(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) +static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr, + const char *buf, size_t len) { struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct ad9832_state *st = iio_priv(indio_dev); @@ -109,11 +107,11 @@ static ssize_t ad9832_write(struct device *dev, ret = spi_sync(st->spi, &st->msg); break; case AD9832_FREQ_SYM: - if (val == 1) + if (val == 1) { st->ctrl_fp |= AD9832_FREQ; - else if (val == 0) + } else if (val == 0) { st->ctrl_fp &= ~AD9832_FREQ; - else { + } else { ret = -EINVAL; break; } -- cgit From 9dd4694dafbd8b44ac4ca740beede18ca67d725f Mon Sep 17 00:00:00 2001 From: Josselin Costanzi Date: Fri, 27 Jun 2014 17:20:00 +0100 Subject: iio: staging: sca3000: hide stufftoread logic Change sca3000_ring implementation so that it exports a data_available function to iio. Signed-off-by: Josselin Costanzi Signed-off-by: Jonathan Cameron --- drivers/staging/iio/accel/sca3000_ring.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c index 198710651e0e..33f0e9235be7 100644 --- a/drivers/staging/iio/accel/sca3000_ring.c +++ b/drivers/staging/iio/accel/sca3000_ring.c @@ -141,6 +141,11 @@ static int sca3000_ring_get_bytes_per_datum(struct iio_buffer *r) return 6; } +static bool sca3000_ring_buf_data_available(struct iio_buffer *r) +{ + return r->stufftoread; +} + static IIO_BUFFER_ENABLE_ATTR; static IIO_BUFFER_LENGTH_ATTR; @@ -274,6 +279,7 @@ static const struct iio_buffer_access_funcs sca3000_ring_access_funcs = { .read_first_n = &sca3000_read_first_n_hw_rb, .get_length = &sca3000_ring_get_length, .get_bytes_per_datum = &sca3000_ring_get_bytes_per_datum, + .data_available = sca3000_ring_buf_data_available, .release = sca3000_ring_release, }; -- cgit From a55e9067f3b08ef58764ef505a4d0a4fc754ba07 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:20 -0700 Subject: staging: comedi: ni_pcimio: remove forward declarations Move some functions to avoid the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcimio.c | 134 +++++++++++++---------------- 1 file changed, 62 insertions(+), 72 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 177947c09117..faa7eb7f1d97 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1050,18 +1050,75 @@ static const struct ni_board_struct ni_boards[] = { #include "ni_mio_common.c" static int pcimio_ai_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size); + struct comedi_subdevice *s, + unsigned long new_size) +{ + struct ni_private *devpriv = dev->private; + int ret; + + ret = mite_buf_change(devpriv->ai_mite_ring, s); + if (ret < 0) + return ret; + + return 0; +} + static int pcimio_ao_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size); + struct comedi_subdevice *s, + unsigned long new_size) +{ + struct ni_private *devpriv = dev->private; + int ret; + + ret = mite_buf_change(devpriv->ao_mite_ring, s); + if (ret < 0) + return ret; + + return 0; +} + static int pcimio_gpct0_change(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned long new_size); + unsigned long new_size) +{ + struct ni_private *devpriv = dev->private; + int ret; + + ret = mite_buf_change(devpriv->gpct_mite_ring[0], s); + if (ret < 0) + return ret; + + return 0; +} + static int pcimio_gpct1_change(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned long new_size); + unsigned long new_size) +{ + struct ni_private *devpriv = dev->private; + int ret; + + ret = mite_buf_change(devpriv->gpct_mite_ring[1], s); + if (ret < 0) + return ret; + + return 0; +} + static int pcimio_dio_change(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned long new_size); + unsigned long new_size) +{ + struct ni_private *devpriv = dev->private; + int ret; + + ret = mite_buf_change(devpriv->cdo_mite_ring, s); + if (ret < 0) + return ret; + + return 0; +} + static void m_series_init_eeprom_buffer(struct comedi_device *dev) { @@ -1230,73 +1287,6 @@ static int pcimio_auto_attach(struct comedi_device *dev, return 0; } -static int pcimio_ai_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size) -{ - struct ni_private *devpriv = dev->private; - int ret; - - ret = mite_buf_change(devpriv->ai_mite_ring, s); - if (ret < 0) - return ret; - - return 0; -} - -static int pcimio_ao_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size) -{ - struct ni_private *devpriv = dev->private; - int ret; - - ret = mite_buf_change(devpriv->ao_mite_ring, s); - if (ret < 0) - return ret; - - return 0; -} - -static int pcimio_gpct0_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) -{ - struct ni_private *devpriv = dev->private; - int ret; - - ret = mite_buf_change(devpriv->gpct_mite_ring[0], s); - if (ret < 0) - return ret; - - return 0; -} - -static int pcimio_gpct1_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) -{ - struct ni_private *devpriv = dev->private; - int ret; - - ret = mite_buf_change(devpriv->gpct_mite_ring[1], s); - if (ret < 0) - return ret; - - return 0; -} - -static int pcimio_dio_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size) -{ - struct ni_private *devpriv = dev->private; - int ret; - - ret = mite_buf_change(devpriv->cdo_mite_ring, s); - if (ret < 0) - return ret; - - return 0; -} - static struct comedi_driver ni_pcimio_driver = { .driver_name = "ni_pcimio", .module = THIS_MODULE, -- cgit From 614b5cf097faabb969a0f7bc0f0a5eff3e48a07f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:21 -0700 Subject: staging: comedi: ni_mio_common.c: remove interrupt_pin() macros Pass the 'interrupt_pin' to ni_E_init() and remove the macros. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 4 +--- drivers/staging/comedi/drivers/ni_mio_common.c | 6 +++--- drivers/staging/comedi/drivers/ni_mio_cs.c | 4 +--- drivers/staging/comedi/drivers/ni_pcimio.c | 3 +-- 4 files changed, 6 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 5c6c06791b88..5fe66a5ad686 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -264,8 +264,6 @@ static const int ni_irqpin[] = { -1, -1, -1, 0, 1, 2, -1, 3, -1, -1, 4, 5, 6, -1, -1, 7 }; -#define interrupt_pin(a) (ni_irqpin[(a)]) - #define IRQ_POLARITY 0 #define NI_E_IRQ_FLAGS 0 @@ -406,7 +404,7 @@ static int ni_atmio_attach(struct comedi_device *dev, /* generic E series stuff in ni_mio_common.c */ - ret = ni_E_init(dev); + ret = ni_E_init(dev, ni_irqpin[dev->irq]); if (ret < 0) return ret; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index b2d6b1d1807d..e9b9c851922a 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5604,7 +5604,7 @@ static int ni_alloc_private(struct comedi_device *dev) return 0; } -static int ni_E_init(struct comedi_device *dev) +static int ni_E_init(struct comedi_device *dev, unsigned interrupt_pin) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; @@ -5908,8 +5908,8 @@ static int ni_E_init(struct comedi_device *dev) (IRQ_POLARITY ? Interrupt_Output_Polarity : 0) | (Interrupt_Output_On_3_Pins & 0) | Interrupt_A_Enable | Interrupt_B_Enable | - Interrupt_A_Output_Select(interrupt_pin(dev->irq)) | - Interrupt_B_Output_Select(interrupt_pin(dev->irq)), + Interrupt_A_Output_Select(interrupt_pin) | + Interrupt_B_Output_Select(interrupt_pin), Interrupt_Control_Register); } diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index ae82813070bd..e61b5d1bdb41 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -137,8 +137,6 @@ static const struct ni_board_struct ni_boards[] = { #endif }; -#define interrupt_pin(a) 0 - #define IRQ_POLARITY 1 #include "ni_mio_common.c" @@ -205,7 +203,7 @@ static int mio_cs_auto_attach(struct comedi_device *dev, devpriv = dev->private; - return ni_E_init(dev); + return ni_E_init(dev, 0); } static void mio_cs_detach(struct comedi_device *dev) diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index faa7eb7f1d97..fba5a9c4feb6 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1042,7 +1042,6 @@ static const struct ni_board_struct ni_boards[] = { }, }; -#define interrupt_pin(a) 0 #define IRQ_POLARITY 1 #define NI_E_IRQ_FLAGS IRQF_SHARED @@ -1274,7 +1273,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, dev->irq = irq; } - ret = ni_E_init(dev); + ret = ni_E_init(dev, 0); if (ret < 0) return ret; -- cgit From 32d878a285250fd30acda57033a9e51e77ab50a3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:22 -0700 Subject: staging: comedi: ni_mio_common drivers: remove NI_E_IRQ_FLAGS defines These defines are only used in the request_irq() calls. Remove them and just open code the values. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 4 +--- drivers/staging/comedi/drivers/ni_pcimio.c | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 5fe66a5ad686..a5c7ceaa771f 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -266,8 +266,6 @@ static const int ni_irqpin[] = { #define IRQ_POLARITY 0 -#define NI_E_IRQ_FLAGS 0 - #include "ni_mio_common.c" static struct pnp_device_id device_ids[] = { @@ -392,7 +390,7 @@ static int ni_atmio_attach(struct comedi_device *dev, return -EINVAL; } printk(" ( irq = %u )", irq); - ret = request_irq(irq, ni_E_interrupt, NI_E_IRQ_FLAGS, + ret = request_irq(irq, ni_E_interrupt, 0, "ni_atmio", dev); if (ret < 0) { diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index fba5a9c4feb6..07b70270ac79 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1044,8 +1044,6 @@ static const struct ni_board_struct ni_boards[] = { #define IRQ_POLARITY 1 -#define NI_E_IRQ_FLAGS IRQF_SHARED - #include "ni_mio_common.c" static int pcimio_ai_change(struct comedi_device *dev, @@ -1267,7 +1265,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, irq = mite_irq(devpriv->mite); if (irq) { - ret = request_irq(irq, ni_E_interrupt, NI_E_IRQ_FLAGS, + ret = request_irq(irq, ni_E_interrupt, IRQF_SHARED, dev->board_name, dev); if (ret == 0) dev->irq = irq; -- cgit From 1fa955ba355bfa6eb83b8fd9cc6064a561291d1f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:23 -0700 Subject: staging: comedi: ni_mio_common.c: remove IRQ_POLARITY defines Pass the irq_polarity to ni_E_init() and remove the defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 4 +--- drivers/staging/comedi/drivers/ni_mio_common.c | 5 +++-- drivers/staging/comedi/drivers/ni_mio_cs.c | 4 +--- drivers/staging/comedi/drivers/ni_pcimio.c | 4 +--- 4 files changed, 6 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index a5c7ceaa771f..761a8329bf36 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -264,8 +264,6 @@ static const int ni_irqpin[] = { -1, -1, -1, 0, 1, 2, -1, 3, -1, -1, 4, 5, 6, -1, -1, 7 }; -#define IRQ_POLARITY 0 - #include "ni_mio_common.c" static struct pnp_device_id device_ids[] = { @@ -402,7 +400,7 @@ static int ni_atmio_attach(struct comedi_device *dev, /* generic E series stuff in ni_mio_common.c */ - ret = ni_E_init(dev, ni_irqpin[dev->irq]); + ret = ni_E_init(dev, ni_irqpin[dev->irq], 0); if (ret < 0) return ret; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e9b9c851922a..ff881a7afdd3 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5604,7 +5604,8 @@ static int ni_alloc_private(struct comedi_device *dev) return 0; } -static int ni_E_init(struct comedi_device *dev, unsigned interrupt_pin) +static int ni_E_init(struct comedi_device *dev, + unsigned interrupt_pin, unsigned irq_polarity) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; @@ -5905,7 +5906,7 @@ static int ni_E_init(struct comedi_device *dev, unsigned interrupt_pin) if (dev->irq) { ni_stc_writew(dev, - (IRQ_POLARITY ? Interrupt_Output_Polarity : 0) | + (irq_polarity ? Interrupt_Output_Polarity : 0) | (Interrupt_Output_On_3_Pins & 0) | Interrupt_A_Enable | Interrupt_B_Enable | Interrupt_A_Output_Select(interrupt_pin) | diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index e61b5d1bdb41..fe6d3943bbee 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -137,8 +137,6 @@ static const struct ni_board_struct ni_boards[] = { #endif }; -#define IRQ_POLARITY 1 - #include "ni_mio_common.c" static const void *ni_getboardtype(struct comedi_device *dev, @@ -203,7 +201,7 @@ static int mio_cs_auto_attach(struct comedi_device *dev, devpriv = dev->private; - return ni_E_init(dev, 0); + return ni_E_init(dev, 0, 1); } static void mio_cs_detach(struct comedi_device *dev) diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 07b70270ac79..a846b88351f6 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1042,8 +1042,6 @@ static const struct ni_board_struct ni_boards[] = { }, }; -#define IRQ_POLARITY 1 - #include "ni_mio_common.c" static int pcimio_ai_change(struct comedi_device *dev, @@ -1271,7 +1269,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, dev->irq = irq; } - ret = ni_E_init(dev, 0); + ret = ni_E_init(dev, 0, 1); if (ret < 0) return ret; -- cgit From 050e2d3a3b9147d43a6acf4ef99f0028d117b701 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:24 -0700 Subject: staging: comedi: ni_atmio: remove '= 0' boardinfo data Remove all the boardinfo data the is set to '0'. They will default to that when the boardinfo is declared. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 761a8329bf36..3a53c285c151 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -114,7 +114,6 @@ static const struct ni_board_struct ni_boards[] = { .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 8192, - .alwaysdither = 0, .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, @@ -123,7 +122,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_E_ao_ext, .ao_unipolar = 1, .ao_speed = 1000, - .has_8255 = 0, .num_p0_dio_channels = 8, .caldac = {mb88341}, }, @@ -133,7 +131,6 @@ static const struct ni_board_struct ni_boards[] = { .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 2048, - .alwaysdither = 0, .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, @@ -142,7 +139,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_E_ao_ext, .ao_unipolar = 1, .ao_speed = 1000, - .has_8255 = 0, .num_p0_dio_channels = 8, .caldac = {mb88341}, }, @@ -152,18 +148,15 @@ static const struct ni_board_struct ni_boards[] = { .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 512, - .alwaysdither = 0, .gainlkup = ai_gain_16, .ai_speed = 10000, .n_aochan = 2, .aobits = 12, - .ao_fifo_depth = 0, .ao_range_table = &range_ni_E_ao_ext, .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = {ad8804_debug}, - .has_8255 = 0, }, {.device_id = 37, .isapnp_id = 0x2500, @@ -171,12 +164,10 @@ static const struct ni_board_struct ni_boards[] = { .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 512, - .alwaysdither = 0, .gainlkup = ai_gain_16, .ai_speed = 10000, .n_aochan = 2, .aobits = 12, - .ao_fifo_depth = 0, .ao_range_table = &range_ni_E_ao_ext, .ao_unipolar = 1, .ao_speed = 10000, @@ -190,7 +181,6 @@ static const struct ni_board_struct ni_boards[] = { .n_adchan = 64, .adbits = 12, .ai_fifo_depth = 2048, - .alwaysdither = 0, .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, @@ -199,7 +189,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_E_ao_ext, .ao_unipolar = 1, .ao_speed = 1000, - .has_8255 = 0, .num_p0_dio_channels = 8, .caldac = {ad8804_debug}, }, @@ -214,13 +203,10 @@ static const struct ni_board_struct ni_boards[] = { .ai_speed = 50000, .n_aochan = 2, .aobits = 12, - .ao_fifo_depth = 0, .ao_range_table = &range_bipolar10, - .ao_unipolar = 0, .ao_speed = 50000, .num_p0_dio_channels = 8, .caldac = {dac8800, dac8043}, - .has_8255 = 0, }, {.device_id = 50, .isapnp_id = 0x0000, /* XXX unknown */ @@ -239,7 +225,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = {dac8800, dac8043, ad8522}, - .has_8255 = 0, }, {.device_id = 51, .isapnp_id = 0x0000, /* XXX unknown */ @@ -250,13 +235,8 @@ static const struct ni_board_struct ni_boards[] = { .alwaysdither = 1, /* unknown */ .gainlkup = ai_gain_14, .ai_speed = 10000, - .n_aochan = 0, - .aobits = 0, - .ao_fifo_depth = 0, - .ao_unipolar = 0, .num_p0_dio_channels = 8, .caldac = {dac8800, dac8043, ad8522}, - .has_8255 = 0, } }; -- cgit From 551d793943c39bc8e9d548ac454cd0df32688211 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:25 -0700 Subject: staging: comedi: ni_atmio: remove NI_SIZE define This define is only used in the comedi_request_region() to specify the size of the region. Remove the define and just open code the value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 3a53c285c151..f3122eaa2ab6 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -105,8 +105,6 @@ are not supported. * AT specific setup */ -#define NI_SIZE 0x20 - static const struct ni_board_struct ni_boards[] = { {.device_id = 44, .isapnp_id = 0x0000, /* XXX unknown */ @@ -344,7 +342,7 @@ static int ni_atmio_attach(struct comedi_device *dev, comedi_set_hw_dev(dev, &isapnp_dev->dev); } - ret = comedi_request_region(dev, iobase, NI_SIZE); + ret = comedi_request_region(dev, iobase, 0x20); if (ret) return ret; -- cgit From bfc8049a6508e1f1b6df5a71d13a0ded026b0ba5 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:26 -0700 Subject: staging: comedi: ni_mio_cs: remove NI_SIZE define This define is not used by the driver. Remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_cs.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index fe6d3943bbee..f6cab5cf6808 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -54,8 +54,6 @@ See the notes in the ni_atmio.o driver. * AT specific setup */ -#define NI_SIZE 0x20 - static const struct ni_board_struct ni_boards[] = { { .device_id = 0x010d, -- cgit From 252948517c56e70f2c6abe50c368e7707417a140 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:27 -0700 Subject: staging: comedi: ni_atmio: tidy up the boardinfo For aesthetics, add some whitespace to the boardinfo declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 261 +++++++++++++++--------------- 1 file changed, 131 insertions(+), 130 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index f3122eaa2ab6..3ea49c79cec7 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -106,136 +106,137 @@ are not supported. */ static const struct ni_board_struct ni_boards[] = { - {.device_id = 44, - .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-mio-16e-1", - .n_adchan = 16, - .adbits = 12, - .ai_fifo_depth = 8192, - .gainlkup = ai_gain_16, - .ai_speed = 800, - .n_aochan = 2, - .aobits = 12, - .ao_fifo_depth = 2048, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 1000, - .num_p0_dio_channels = 8, - .caldac = {mb88341}, - }, - {.device_id = 25, - .isapnp_id = 0x1900, - .name = "at-mio-16e-2", - .n_adchan = 16, - .adbits = 12, - .ai_fifo_depth = 2048, - .gainlkup = ai_gain_16, - .ai_speed = 2000, - .n_aochan = 2, - .aobits = 12, - .ao_fifo_depth = 2048, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 1000, - .num_p0_dio_channels = 8, - .caldac = {mb88341}, - }, - {.device_id = 36, - .isapnp_id = 0x2400, - .name = "at-mio-16e-10", - .n_adchan = 16, - .adbits = 12, - .ai_fifo_depth = 512, - .gainlkup = ai_gain_16, - .ai_speed = 10000, - .n_aochan = 2, - .aobits = 12, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 10000, - .num_p0_dio_channels = 8, - .caldac = {ad8804_debug}, - }, - {.device_id = 37, - .isapnp_id = 0x2500, - .name = "at-mio-16de-10", - .n_adchan = 16, - .adbits = 12, - .ai_fifo_depth = 512, - .gainlkup = ai_gain_16, - .ai_speed = 10000, - .n_aochan = 2, - .aobits = 12, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 10000, - .num_p0_dio_channels = 8, - .caldac = {ad8804_debug}, - .has_8255 = 1, - }, - {.device_id = 38, - .isapnp_id = 0x2600, - .name = "at-mio-64e-3", - .n_adchan = 64, - .adbits = 12, - .ai_fifo_depth = 2048, - .gainlkup = ai_gain_16, - .ai_speed = 2000, - .n_aochan = 2, - .aobits = 12, - .ao_fifo_depth = 2048, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 1000, - .num_p0_dio_channels = 8, - .caldac = {ad8804_debug}, - }, - {.device_id = 39, - .isapnp_id = 0x2700, - .name = "at-mio-16xe-50", - .n_adchan = 16, - .adbits = 16, - .ai_fifo_depth = 512, - .alwaysdither = 1, - .gainlkup = ai_gain_8, - .ai_speed = 50000, - .n_aochan = 2, - .aobits = 12, - .ao_range_table = &range_bipolar10, - .ao_speed = 50000, - .num_p0_dio_channels = 8, - .caldac = {dac8800, dac8043}, - }, - {.device_id = 50, - .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-mio-16xe-10", - .n_adchan = 16, - .adbits = 16, - .ai_fifo_depth = 512, - .alwaysdither = 1, - .gainlkup = ai_gain_14, - .ai_speed = 10000, - .n_aochan = 2, - .aobits = 16, - .ao_fifo_depth = 2048, - .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, - .ao_speed = 1000, - .num_p0_dio_channels = 8, - .caldac = {dac8800, dac8043, ad8522}, - }, - {.device_id = 51, - .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-ai-16xe-10", - .n_adchan = 16, - .adbits = 16, - .ai_fifo_depth = 512, - .alwaysdither = 1, /* unknown */ - .gainlkup = ai_gain_14, - .ai_speed = 10000, - .num_p0_dio_channels = 8, - .caldac = {dac8800, dac8043, ad8522}, - } + { + .device_id = 44, + .isapnp_id = 0x0000, /* XXX unknown */ + .name = "at-mio-16e-1", + .n_adchan = 16, + .adbits = 12, + .ai_fifo_depth = 8192, + .gainlkup = ai_gain_16, + .ai_speed = 800, + .n_aochan = 2, + .aobits = 12, + .ao_fifo_depth = 2048, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 1000, + .num_p0_dio_channels = 8, + .caldac = { mb88341 }, + }, { + .device_id = 25, + .isapnp_id = 0x1900, + .name = "at-mio-16e-2", + .n_adchan = 16, + .adbits = 12, + .ai_fifo_depth = 2048, + .gainlkup = ai_gain_16, + .ai_speed = 2000, + .n_aochan = 2, + .aobits = 12, + .ao_fifo_depth = 2048, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 1000, + .num_p0_dio_channels = 8, + .caldac = { mb88341 }, + }, { + .device_id = 36, + .isapnp_id = 0x2400, + .name = "at-mio-16e-10", + .n_adchan = 16, + .adbits = 12, + .ai_fifo_depth = 512, + .gainlkup = ai_gain_16, + .ai_speed = 10000, + .n_aochan = 2, + .aobits = 12, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 10000, + .num_p0_dio_channels = 8, + .caldac = { ad8804_debug }, + }, { + .device_id = 37, + .isapnp_id = 0x2500, + .name = "at-mio-16de-10", + .n_adchan = 16, + .adbits = 12, + .ai_fifo_depth = 512, + .gainlkup = ai_gain_16, + .ai_speed = 10000, + .n_aochan = 2, + .aobits = 12, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 10000, + .num_p0_dio_channels = 8, + .caldac = { ad8804_debug }, + .has_8255 = 1, + }, { + .device_id = 38, + .isapnp_id = 0x2600, + .name = "at-mio-64e-3", + .n_adchan = 64, + .adbits = 12, + .ai_fifo_depth = 2048, + .gainlkup = ai_gain_16, + .ai_speed = 2000, + .n_aochan = 2, + .aobits = 12, + .ao_fifo_depth = 2048, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 1000, + .num_p0_dio_channels = 8, + .caldac = { ad8804_debug }, + }, { + .device_id = 39, + .isapnp_id = 0x2700, + .name = "at-mio-16xe-50", + .n_adchan = 16, + .adbits = 16, + .ai_fifo_depth = 512, + .alwaysdither = 1, + .gainlkup = ai_gain_8, + .ai_speed = 50000, + .n_aochan = 2, + .aobits = 12, + .ao_range_table = &range_bipolar10, + .ao_speed = 50000, + .num_p0_dio_channels = 8, + .caldac = { dac8800, dac8043 }, + }, { + .device_id = 50, + .isapnp_id = 0x0000, /* XXX unknown */ + .name = "at-mio-16xe-10", + .n_adchan = 16, + .adbits = 16, + .ai_fifo_depth = 512, + .alwaysdither = 1, + .gainlkup = ai_gain_14, + .ai_speed = 10000, + .n_aochan = 2, + .aobits = 16, + .ao_fifo_depth = 2048, + .ao_range_table = &range_ni_E_ao_ext, + .ao_unipolar = 1, + .ao_speed = 1000, + .num_p0_dio_channels = 8, + .caldac = { dac8800, dac8043, ad8522 }, + }, { + .device_id = 51, + .isapnp_id = 0x0000, /* XXX unknown */ + .name = "at-ai-16xe-10", + .n_adchan = 16, + .adbits = 16, + .ai_fifo_depth = 512, + .alwaysdither = 1, /* unknown */ + .gainlkup = ai_gain_14, + .ai_speed = 10000, + .num_p0_dio_channels = 8, + .caldac = { dac8800, dac8043, ad8522 }, + }, }; static const int ni_irqpin[] = { -- cgit From b674f9df207dc7da7b77ada82e0fb072ba06267c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 26 Jun 2014 10:13:08 -0700 Subject: staging: comedi: ni_stc.h: the boardinfo 'name' should be first By convention, the first member of the boardinfo is a 'const char *' to the board name, especially for those comedi drivers that rely on the comedi core to set dev->board_ptr to the entry matching the board name when doing a legacy (*attach) to a comedi driver. Modify the ni_board_struct appropriately for consistency, although the board name is only used for informational purposes by this driver (only the driver name is matched by the comedi core). For aesthetics, also move the members in the boardinfo declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 16 ++++++++-------- drivers/staging/comedi/drivers/ni_mio_cs.c | 12 ++++++------ drivers/staging/comedi/drivers/ni_stc.h | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 3ea49c79cec7..230879faef92 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -107,9 +107,9 @@ are not supported. static const struct ni_board_struct ni_boards[] = { { + .name = "at-mio-16e-1", .device_id = 44, .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-mio-16e-1", .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 8192, @@ -124,9 +124,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, { + .name = "at-mio-16e-2", .device_id = 25, .isapnp_id = 0x1900, - .name = "at-mio-16e-2", .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 2048, @@ -141,9 +141,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, { + .name = "at-mio-16e-10", .device_id = 36, .isapnp_id = 0x2400, - .name = "at-mio-16e-10", .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 512, @@ -157,9 +157,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, { + .name = "at-mio-16de-10", .device_id = 37, .isapnp_id = 0x2500, - .name = "at-mio-16de-10", .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 512, @@ -174,9 +174,9 @@ static const struct ni_board_struct ni_boards[] = { .caldac = { ad8804_debug }, .has_8255 = 1, }, { + .name = "at-mio-64e-3", .device_id = 38, .isapnp_id = 0x2600, - .name = "at-mio-64e-3", .n_adchan = 64, .adbits = 12, .ai_fifo_depth = 2048, @@ -191,9 +191,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, { + .name = "at-mio-16xe-50", .device_id = 39, .isapnp_id = 0x2700, - .name = "at-mio-16xe-50", .n_adchan = 16, .adbits = 16, .ai_fifo_depth = 512, @@ -207,9 +207,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043 }, }, { + .name = "at-mio-16xe-10", .device_id = 50, .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-mio-16xe-10", .n_adchan = 16, .adbits = 16, .ai_fifo_depth = 512, @@ -225,9 +225,9 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, { + .name = "at-ai-16xe-10", .device_id = 51, .isapnp_id = 0x0000, /* XXX unknown */ - .name = "at-ai-16xe-10", .n_adchan = 16, .adbits = 16, .ai_fifo_depth = 512, diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index f6cab5cf6808..f58be63d9226 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -56,8 +56,8 @@ See the notes in the ni_atmio.o driver. static const struct ni_board_struct ni_boards[] = { { - .device_id = 0x010d, .name = "DAQCard-ai-16xe-50", + .device_id = 0x010d, .n_adchan = 16, .adbits = 16, .ai_fifo_depth = 1024, @@ -66,8 +66,8 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043 }, }, { - .device_id = 0x010c, .name = "DAQCard-ai-16e-4", + .device_id = 0x010c, .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 1024, @@ -76,8 +76,8 @@ static const struct ni_board_struct ni_boards[] = { .num_p0_dio_channels = 8, .caldac = { mb88341 }, /* verified */ }, { - .device_id = 0x02c4, .name = "DAQCard-6062E", + .device_id = 0x02c4, .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 8192, @@ -92,8 +92,8 @@ static const struct ni_board_struct ni_boards[] = { .caldac = { ad8804_debug }, /* verified */ }, { /* specs incorrect! */ - .device_id = 0x075e, .name = "DAQCard-6024E", + .device_id = 0x075e, .n_adchan = 16, .adbits = 12, .ai_fifo_depth = 1024, @@ -107,8 +107,8 @@ static const struct ni_board_struct ni_boards[] = { .caldac = { ad8804_debug }, }, { /* specs incorrect! */ - .device_id = 0x0245, .name = "DAQCard-6036E", + .device_id = 0x0245, .n_adchan = 16, .adbits = 16, .ai_fifo_depth = 1024, @@ -124,8 +124,8 @@ static const struct ni_board_struct ni_boards[] = { }, #if 0 { - .device_id = 0x0000, /* unknown */ .name = "DAQCard-6715", + .device_id = 0x0000, /* unknown */ .n_aochan = 8, .aobits = 12, .ao_671x = 8192, diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 7cb591a80146..02a7fa3233e1 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1388,9 +1388,9 @@ enum Interrupt_C_Status_Bits { #define M_SERIES_EEPROM_SIZE 1024 struct ni_board_struct { + const char *name; int device_id; int isapnp_id; - char *name; int n_adchan; int adbits; -- cgit From 7239da25133979f931b31562df5d3fecaa119c6c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:29 -0700 Subject: staging: comedi: ni_pcimio: remove DRV_NAME define This define is not used ny the driver. Remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcimio.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index a846b88351f6..035964fd0ff5 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -121,8 +121,6 @@ Bugs: #define PCIMIO 1 #undef ATMIO -#define DRV_NAME "ni_pcimio" - /* These are not all the possible ao ranges for 628x boards. They can do OFFSET +- REFERENCE where OFFSET can be 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can -- cgit From e5cc90f8fca28801da4b7feca4c272b6ffaa5d9d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:30 -0700 Subject: staging: comedi: ni_atmio: remove ATMIO and PCIMIO defines These defines were probably intended to be used so that ni_mio_common.c could detect if it was included by a driver that uses ioport or memory mapped register access. This can actually be detected by checking if the 'mite' member in the private data has been allocated. Regardless, the symbols are not used. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 230879faef92..d7ee6bde44cd 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -98,9 +98,6 @@ are not supported. #include "ni_stc.h" #include "8255.h" -#define ATMIO 1 -#undef PCIMIO - /* * AT specific setup */ -- cgit From b3d471e9bb845a542ee3bbc087e38a5b64170084 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:31 -0700 Subject: staging: comedi: ni_mio_cs: remove ATMIO and PCIMIO defines These defines were probably intended to be used so that ni_mio_common.c could detect if it was included by a driver that uses ioport or memory mapped register access. This can actually be detected by checking if the 'mite' member in the private data has been allocated. Regardless, the symbols are not used. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_cs.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index f58be63d9226..815cb2b65c05 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -47,9 +47,6 @@ See the notes in the ni_atmio.o driver. #include #include -#define ATMIO 1 -#undef PCIMIO - /* * AT specific setup */ -- cgit From d1296561a49aa3981520147cf146a5812c77a08c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:32 -0700 Subject: staging: comedi: ni_pcimio: remove ATMIO and PCIMIO defines These defines were probably intended to be used so that ni_mio_common.c could detect if it was included by a driver that uses ioport or memory mapped register access. This can actually be detected by checking if the 'mite' member in the private data has been allocated. Regardless, the symbols are not used. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcimio.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 035964fd0ff5..5afa2c62bad0 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -118,9 +118,6 @@ Bugs: #define PCIDMA -#define PCIMIO 1 -#undef ATMIO - /* These are not all the possible ao ranges for 628x boards. They can do OFFSET +- REFERENCE where OFFSET can be 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can -- cgit From ba9d29fe102d4b4e388ba510f4a71b8b737144b9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:33 -0700 Subject: staging: comedi: mite.h: remove mite_irq() This inline function simply returns the 'irq' of the struct pci_dev pointer that is stored in struct mite_struct. This pci_dev pointer is the same as the one that is already available in the (*auto_attach) functions where mite_irq() is used. Use the pci_dev pointer directly to get the irq and remove the unnecessary inline function to remove the indirection. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.h | 5 ----- drivers/staging/comedi/drivers/ni_65xx.c | 2 +- drivers/staging/comedi/drivers/ni_660x.c | 4 ++-- drivers/staging/comedi/drivers/ni_labpc_pci.c | 2 +- drivers/staging/comedi/drivers/ni_pcidio.c | 2 +- drivers/staging/comedi/drivers/ni_pcimio.c | 2 +- 6 files changed, 6 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index e6e58e989b73..9968d8dc53af 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -70,11 +70,6 @@ static inline void mite_free(struct mite_struct *mite) kfree(mite); } -static inline unsigned int mite_irq(struct mite_struct *mite) -{ - return mite->pcidev->irq; -}; - static inline unsigned int mite_device_id(struct mite_struct *mite) { return mite->pcidev->device; diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 9a139d6b8ef4..6e28603339b4 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -596,7 +596,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, return ret; } - dev->irq = mite_irq(devpriv->mite); + dev->irq = pcidev->irq; dev_info(dev->class_dev, "board: %s, ID=0x%02x", dev->board_name, readb(devpriv->mite->daq_io_addr + ID_Register)); diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 634cde83a02b..5f80bcabd40d 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -1170,13 +1170,13 @@ static int ni_660x_auto_attach(struct comedi_device *dev, for (i = 0; i < board->n_chips; ++i) set_tio_counterswap(dev, i); - ret = request_irq(mite_irq(devpriv->mite), ni_660x_interrupt, + ret = request_irq(pcidev->irq, ni_660x_interrupt, IRQF_SHARED, "ni_660x", dev); if (ret < 0) { dev_warn(dev->class_dev, " irq not available\n"); return ret; } - dev->irq = mite_irq(devpriv->mite); + dev->irq = pcidev->irq; global_interrupt_config_bits = Global_Int_Enable_Bit; if (board->n_chips > 1) global_interrupt_config_bits |= Cascade_Int_Enable_Bit; diff --git a/drivers/staging/comedi/drivers/ni_labpc_pci.c b/drivers/staging/comedi/drivers/ni_labpc_pci.c index 739597068297..384c427092e4 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_pci.c +++ b/drivers/staging/comedi/drivers/ni_labpc_pci.c @@ -84,7 +84,7 @@ static int labpc_pci_auto_attach(struct comedi_device *dev, return ret; dev->iobase = (unsigned long)devpriv->mite->daq_io_addr; - return labpc_common_attach(dev, mite_irq(devpriv->mite), IRQF_SHARED); + return labpc_common_attach(dev, pcidev->irq, IRQF_SHARED); } static void labpc_pci_detach(struct comedi_device *dev) diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index b03105ab0e50..b9de13235019 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -1024,7 +1024,7 @@ static int nidio_auto_attach(struct comedi_device *dev, s->async_dma_dir = DMA_BIDIRECTIONAL; s->poll = &ni_pcidio_poll; - irq = mite_irq(devpriv->mite); + irq = pcidev->irq; if (irq) { ret = request_irq(irq, nidio_interrupt, IRQF_SHARED, dev->board_name, dev); diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 5afa2c62bad0..d72cc6f8aab2 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1256,7 +1256,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (board->reg_type == ni_reg_6143) init_6143(dev); - irq = mite_irq(devpriv->mite); + irq = pcidev->irq; if (irq) { ret = request_irq(irq, ni_E_interrupt, IRQF_SHARED, dev->board_name, dev); -- cgit From 9086689676f63f51fbec73245c2b8c847b0f1cbb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:34 -0700 Subject: staging: comedi: mite.h: remove mite_device() This inline function is not used. Just remove it. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index 9968d8dc53af..5137e18707fb 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -70,11 +70,6 @@ static inline void mite_free(struct mite_struct *mite) kfree(mite); } -static inline unsigned int mite_device_id(struct mite_struct *mite) -{ - return mite->pcidev->device; -}; - int mite_setup(struct mite_struct *mite); int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1); void mite_unsetup(struct mite_struct *mite); -- cgit From b876e985c2273b7bd2d5539f2147ef69f7701129 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 20 Jun 2014 11:10:35 -0700 Subject: staging: comedi: mite: cleanup mite_unsetup() This function is only called by comedi drivers during the (*detach) of the driver. After it is called mite_free() is always called to kfree the allocated mite_struct pointer. Rename this function to mite_detach() and merge the kfree() from mite_free() into it. Remove the unnecessary clearing of the mite variables since the mite pointer is going to be kfree()'d anyway. The mite_detach() function checks if the pointer is valid so remove the unnecessary checks in the callers. The check can also be removed in ni_660x since the ni_660x_free_mite_rings() function does not actually need the 'mite' pointer. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.c | 18 ++++++------------ drivers/staging/comedi/drivers/mite.h | 7 +------ drivers/staging/comedi/drivers/ni_65xx.c | 8 ++------ drivers/staging/comedi/drivers/ni_660x.c | 7 ++----- drivers/staging/comedi/drivers/ni_670x.c | 6 ++---- drivers/staging/comedi/drivers/ni_labpc_pci.c | 6 ++---- drivers/staging/comedi/drivers/ni_pcidio.c | 5 +---- drivers/staging/comedi/drivers/ni_pcimio.c | 5 +---- 8 files changed, 17 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index 19c029acbc99..52d154886c4f 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -173,25 +173,19 @@ int mite_setup(struct mite_struct *mite) } EXPORT_SYMBOL_GPL(mite_setup); -void mite_unsetup(struct mite_struct *mite) +void mite_detach(struct mite_struct *mite) { - /* unsigned long offset, start, length; */ - if (!mite) return; - if (mite->mite_io_addr) { + if (mite->mite_io_addr) iounmap(mite->mite_io_addr); - mite->mite_io_addr = NULL; - } - if (mite->daq_io_addr) { + if (mite->daq_io_addr) iounmap(mite->daq_io_addr); - mite->daq_io_addr = NULL; - } - if (mite->mite_phys_addr) - mite->mite_phys_addr = 0; + + kfree(mite); } -EXPORT_SYMBOL_GPL(mite_unsetup); +EXPORT_SYMBOL_GPL(mite_detach); struct mite_dma_descriptor_ring *mite_alloc_ring(struct mite_struct *mite) { diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index 5137e18707fb..a4852cbd5b31 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -65,14 +65,9 @@ struct mite_struct { struct mite_struct *mite_alloc(struct pci_dev *pcidev); -static inline void mite_free(struct mite_struct *mite) -{ - kfree(mite); -} - int mite_setup(struct mite_struct *mite); int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1); -void mite_unsetup(struct mite_struct *mite); +void mite_detach(struct mite_struct *mite); struct mite_dma_descriptor_ring *mite_alloc_ring(struct mite_struct *mite); void mite_free_ring(struct mite_dma_descriptor_ring *ring); struct mite_channel *mite_request_channel_in_range(struct mite_struct *mite, diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 6e28603339b4..59f592e0ca76 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -716,12 +716,8 @@ static void ni_65xx_detach(struct comedi_device *dev) } if (dev->irq) free_irq(dev->irq, dev); - if (devpriv) { - if (devpriv->mite) { - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } - } + if (devpriv) + mite_detach(devpriv->mite); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 5f80bcabd40d..27d435f2565b 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -1195,11 +1195,8 @@ static void ni_660x_detach(struct comedi_device *dev) if (devpriv) { if (devpriv->counter_dev) ni_gpct_device_destroy(devpriv->counter_dev); - if (devpriv->mite) { - ni_660x_free_mite_rings(dev); - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } + ni_660x_free_mite_rings(dev); + mite_detach(devpriv->mite); } comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c index 1002ceacfdcc..b487f8d9eeed 100644 --- a/drivers/staging/comedi/drivers/ni_670x.c +++ b/drivers/staging/comedi/drivers/ni_670x.c @@ -259,10 +259,8 @@ static void ni_670x_detach(struct comedi_device *dev) if (s) kfree(s->range_table_list); } - if (devpriv && devpriv->mite) { - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } + if (devpriv) + mite_detach(devpriv->mite); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_labpc_pci.c b/drivers/staging/comedi/drivers/ni_labpc_pci.c index 384c427092e4..358c4af3e174 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_pci.c +++ b/drivers/staging/comedi/drivers/ni_labpc_pci.c @@ -91,10 +91,8 @@ static void labpc_pci_detach(struct comedi_device *dev) { struct labpc_private *devpriv = dev->private; - if (devpriv && devpriv->mite) { - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } + if (devpriv) + mite_detach(devpriv->mite); if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index b9de13235019..4d6b2ed9ac7b 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -1046,10 +1046,7 @@ static void nidio_detach(struct comedi_device *dev) mite_free_ring(devpriv->di_mite_ring); devpriv->di_mite_ring = NULL; } - if (devpriv->mite) { - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } + mite_detach(devpriv->mite); } comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index d72cc6f8aab2..20c839b45752 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1189,10 +1189,7 @@ static void pcimio_detach(struct comedi_device *dev) mite_free_ring(devpriv->cdo_mite_ring); mite_free_ring(devpriv->gpct_mite_ring[0]); mite_free_ring(devpriv->gpct_mite_ring[1]); - if (devpriv->mite) { - mite_unsetup(devpriv->mite); - mite_free(devpriv->mite); - } + mite_detach(devpriv->mite); } comedi_pci_disable(dev); } -- cgit From 79f976dc3170b3c1b8b0b4e5a92151dba1b07427 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:39 +0100 Subject: staging: vt6656: rxtx struct vnt_mic_hdr change tsc_47_16/tsc_15_0 Replace with ccmp_pn with size of IEEE80211_CCMP_PN_LEN(6) memcpy the struct ieee80211_key_seq -> ccmp.pn onto ccmp_pn removing the need for endian conversion. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 8 +------- drivers/staging/vt6656/rxtx.h | 3 +-- 2 files changed, 2 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7c9f23246fd7..f4833ff2a9eb 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -848,13 +848,7 @@ static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, ieee80211_get_key_tx_seq(tx_key, &seq); - mic_hdr->tsc_47_16 = cpu_to_be32((u32)seq.ccmp.pn[3] | - ((u32)seq.ccmp.pn[2] << 8) | - ((u32)seq.ccmp.pn[1] << 16) | - ((u32)seq.ccmp.pn[0] << 24)); - - mic_hdr->tsc_15_0 = cpu_to_be16((u16)seq.ccmp.pn[5] | - ((u16)seq.ccmp.pn[4] << 8)); + memcpy(mic_hdr->ccmp_pn, seq.ccmp.pn, IEEE80211_CCMP_PN_LEN); if (ieee80211_has_a4(hdr->frame_control)) mic_hdr->hlen = cpu_to_be16(28); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 847c0556668b..26dc21c51e22 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -41,8 +41,7 @@ struct vnt_mic_hdr { u8 id; u8 tx_priority; u8 mic_addr2[6]; - __be32 tsc_47_16; - __be16 tsc_15_0; + u8 ccmp_pn[IEEE80211_CCMP_PN_LEN]; __be16 payload_len; __be16 hlen; __le16 frame_control; -- cgit From 5deb1cfa88f3f4bf2f8d07eda075d338db3b6115 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:40 +0100 Subject: staging: vt6656: rxtx replace wFragCtl with frag_ctl. Use base type to __le16 and do endian correction. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 12 ++++++------ drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index f4833ff2a9eb..55131216f896 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -978,21 +978,21 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) is_pspoll = true; - tx_buffer_head->wFragCtl = - cpu_to_le16(ieee80211_get_hdrlen_from_skb(skb)) << 10; + tx_buffer_head->frag_ctl = + cpu_to_le16(ieee80211_get_hdrlen_from_skb(skb) << 10); if (info->control.hw_key) { tx_key = info->control.hw_key; switch (info->control.hw_key->cipher) { case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: - tx_buffer_head->wFragCtl |= FRAGCTL_LEGACY; + tx_buffer_head->frag_ctl |= cpu_to_le16(FRAGCTL_LEGACY); break; case WLAN_CIPHER_SUITE_TKIP: - tx_buffer_head->wFragCtl |= FRAGCTL_TKIP; + tx_buffer_head->frag_ctl |= cpu_to_le16(FRAGCTL_TKIP); break; case WLAN_CIPHER_SUITE_CCMP: - tx_buffer_head->wFragCtl |= FRAGCTL_AES; + tx_buffer_head->frag_ctl |= cpu_to_le16(FRAGCTL_AES); need_mic = true; default: break; @@ -1033,7 +1033,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) return -ENOMEM; } - tx_buffer_head->wFragCtl |= (u16)FRAGCTL_NONFRAG; + tx_buffer_head->frag_ctl |= cpu_to_le16(FRAGCTL_NONFRAG); tx_bytes = tx_header_size + tx_body_size; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 26dc21c51e22..1cfa5aeddad4 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -224,7 +224,7 @@ struct vnt_tx_fifo_head { u8 tx_key[WLAN_KEY_LEN_CCMP]; u16 wFIFOCtl; __le16 time_stamp; - u16 wFragCtl; + __le16 frag_ctl; __le16 current_rate; } __packed; -- cgit From 09bb27ebe04f61386640690bb263c6b588fc14cd Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:41 +0100 Subject: staging: vt6656: vnt_tx_packet remove first assignment of time_stamp. This is assigned later in function and should have been removed in an out-of-tree merge. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 55131216f896..e896dfe5d3fc 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -929,9 +929,6 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) frame_size = tx_body_size + 4; - /* Set time stamp */ - tx_buffer_head->time_stamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); - /*Set fifo controls */ if (pkt_type == PK_TYPE_11A) tx_buffer_head->wFIFOCtl = 0; -- cgit From 8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:42 +0100 Subject: staging: vt6656: Remove rx handing from RXvWorkItem In s_nsBulkInUsbIoCompleteRead reuse or reallocate sb_buff and resubmit urb. In device_alloc_bufs allocate memory to rcb individually and call PIPEnsBulkInUsbRead to submit the urbs Change handling to free rcb in device_free_rx_bufs Remove calls to workqueue. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 38 +++++++++++++++----------------------- drivers/staging/vt6656/usbpipe.c | 25 +++++++++++++++---------- 2 files changed, 30 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 86d9470eecb2..19d42ce82110 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -514,6 +514,8 @@ static void device_free_rx_bufs(struct vnt_private *priv) for (ii = 0; ii < priv->cbRD; ii++) { rcb = priv->apRCB[ii]; + if (!rcb) + continue; /* deallocate URBs */ if (rcb->pUrb) { @@ -524,9 +526,9 @@ static void device_free_rx_bufs(struct vnt_private *priv) /* deallocate skb */ if (rcb->skb) dev_kfree_skb(rcb->skb); - } - kfree(priv->pRCBMem); + kfree(rcb); + } return; } @@ -576,22 +578,16 @@ static bool device_alloc_bufs(struct vnt_private *priv) tx_context->in_use = false; } - /* allocate RCB mem */ - priv->pRCBMem = kzalloc((sizeof(struct vnt_rcb) * priv->cbRD), - GFP_KERNEL); - if (priv->pRCBMem == NULL) { - dev_err(&priv->usb->dev, "alloc rx usb context failed\n"); - goto free_tx; - } - - priv->FirstRecvFreeList = NULL; - priv->LastRecvFreeList = NULL; - priv->NumRecvFreeList = 0; + for (ii = 0; ii < priv->cbRD; ii++) { + priv->apRCB[ii] = kzalloc(sizeof(struct vnt_rcb), GFP_KERNEL); + if (!priv->apRCB[ii]) { + dev_err(&priv->usb->dev, + "failed to allocate rcb no %d\n", ii); + goto free_rx_tx; + } - rcb = (struct vnt_rcb *)priv->pRCBMem; + rcb = priv->apRCB[ii]; - for (ii = 0; ii < priv->cbRD; ii++) { - priv->apRCB[ii] = rcb; rcb->pDevice = priv; /* allocate URBs */ @@ -611,11 +607,9 @@ static bool device_alloc_bufs(struct vnt_private *priv) rcb->bBoolInUse = false; - EnqueueRCB(priv->FirstRecvFreeList, - priv->LastRecvFreeList, rcb); - - priv->NumRecvFreeList++; - rcb++; + /* submit rx urb */ + if (PIPEnsBulkInUsbRead(priv, rcb)) + goto free_rx_tx; } priv->pInterruptURB = usb_alloc_urb(0, GFP_ATOMIC); @@ -678,7 +672,6 @@ static int vnt_start(struct ieee80211_hw *hw) priv->int_interval = 1; /* bInterval is set to 1 */ - schedule_work(&priv->read_work_item); INTvWorkItem(priv); priv->flags |= DEVICE_FLAGS_OPENED; @@ -722,7 +715,6 @@ static void vnt_stop(struct ieee80211_hw *hw) MP_CLEAR_FLAG(priv, fMP_POST_READS); cancel_delayed_work_sync(&priv->run_command_work); - cancel_work_sync(&priv->read_work_item); priv->bCmdRunning = false; diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 6a7e69233164..428193e1497f 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -230,9 +230,6 @@ int PIPEnsBulkInUsbRead(struct vnt_private *priv, struct vnt_rcb *rcb) int status = 0; struct urb *urb; - if (priv->Flags & fMP_DISCONNECTED) - return STATUS_FAILURE; - urb = rcb->pUrb; if (rcb->skb == NULL) { dev_dbg(&priv->usb->dev, "rcb->skb is null\n"); @@ -303,16 +300,24 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) spin_unlock_irqrestore(&priv->lock, flags); } - rcb->Ref--; - if (rcb->Ref == 0) { - dev_dbg(&priv->usb->dev, - "RxvFreeNormal %d\n", priv->NumRecvFreeList); + if (re_alloc_skb) { + rcb->skb = dev_alloc_skb(priv->rx_buf_sz); + if (!rcb->skb) { + dev_dbg(&priv->usb->dev, "Failed to re-alloc rx skb\n"); - spin_lock_irqsave(&priv->lock, flags); + rcb->bBoolInUse = false; - RXvFreeRCB(rcb, re_alloc_skb); + return; + } - spin_unlock_irqrestore(&priv->lock, flags); + urb->transfer_buffer = skb_put(rcb->skb, + skb_tailroom(rcb->skb)); + } + + if (usb_submit_urb(urb, GFP_ATOMIC)) { + dev_dbg(&priv->usb->dev, "Failed to re submit rx skb\n"); + + rcb->bBoolInUse = false; } return; -- cgit From 068ce7d0a9f92d90675c7114952006a7c4dc1134 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:43 +0100 Subject: staging: vt6656: dead code remove RXvWorkItem and RXvFreeRCB Remove work_struct and queue variables Remove EnqueueRCB and DequeueRCB macros Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 29 ----------------- drivers/staging/vt6656/dpc.c | 68 --------------------------------------- drivers/staging/vt6656/main_usb.c | 1 - 3 files changed, 98 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 0bba96f95017..f1ed43e19b9c 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -289,8 +289,6 @@ struct vnt_private { struct usb_device *usb; struct net_device_stats stats; - struct work_struct read_work_item; - u64 tsf_time; u8 rx_rate; @@ -308,14 +306,8 @@ struct vnt_private { u32 int_interval; /* Variables to track resources for the BULK In Pipe */ - struct vnt_rcb *pRCBMem; struct vnt_rcb *apRCB[CB_MAX_RX_DESC]; u32 cbRD; - struct vnt_rcb *FirstRecvFreeList; - struct vnt_rcb *LastRecvFreeList; - u32 NumRecvFreeList; - - int bIsRxWorkItemQueued; /* Variables to track resources for the BULK Out Pipe */ struct vnt_usb_send_context *apTD[CB_MAX_TX_DESC]; @@ -448,27 +440,6 @@ struct vnt_private { struct iw_statistics wstats; /* wireless stats */ }; -#define EnqueueRCB(_Head, _Tail, _RCB) \ -{ \ - if (!_Head) { \ - _Head = _RCB; \ - } \ - else { \ - _Tail->Next = _RCB; \ - } \ - _RCB->Next = NULL; \ - _Tail = _RCB; \ -} - -#define DequeueRCB(Head, Tail) \ -{ \ - struct vnt_rcb *RCB = Head; \ - if (!RCB->Next) { \ - Tail = NULL; \ - } \ - Head = RCB->Next; \ -} - #define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \ if ((uVar) >= ((uModulo) - 1)) \ (uVar) = 0; \ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 5ac5bcde0458..ca5555482377 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -44,74 +44,6 @@ #include "rf.h" #include "usbpipe.h" -//static int msglevel =MSG_LEVEL_DEBUG; -static int msglevel =MSG_LEVEL_INFO; - -void RXvWorkItem(struct work_struct *work) -{ - struct vnt_private *priv = - container_of(work, struct vnt_private, read_work_item); - int status; - struct vnt_rcb *rcb = NULL; - unsigned long flags; - - if (priv->Flags & fMP_DISCONNECTED) - return; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Rx Polling Thread\n"); - - spin_lock_irqsave(&priv->lock, flags); - - while ((priv->Flags & fMP_POST_READS) && MP_IS_READY(priv) && - (priv->NumRecvFreeList != 0)) { - rcb = priv->FirstRecvFreeList; - - priv->NumRecvFreeList--; - - DequeueRCB(priv->FirstRecvFreeList, priv->LastRecvFreeList); - - status = PIPEnsBulkInUsbRead(priv, rcb); - } - - priv->bIsRxWorkItemQueued = false; - - spin_unlock_irqrestore(&priv->lock, flags); -} - -void RXvFreeRCB(struct vnt_rcb *rcb, int re_alloc_skb) -{ - struct vnt_private *priv = rcb->pDevice; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->RXvFreeRCB\n"); - - if (re_alloc_skb == false) { - kfree_skb(rcb->skb); - re_alloc_skb = true; - } - - if (re_alloc_skb == true) { - rcb->skb = dev_alloc_skb(priv->rx_buf_sz); - /* TODO error handling */ - if (!rcb->skb) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR - " Failed to re-alloc rx skb\n"); - } - } - - /* Insert the RCB back in the Recv free list */ - EnqueueRCB(priv->FirstRecvFreeList, priv->LastRecvFreeList, rcb); - priv->NumRecvFreeList++; - - if ((priv->Flags & fMP_POST_READS) && MP_IS_READY(priv) && - (priv->bIsRxWorkItemQueued == false)) { - priv->bIsRxWorkItemQueued = true; - schedule_work(&priv->read_work_item); - } - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----RXFreeRCB %d\n", - priv->NumRecvFreeList); -} - int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, unsigned long bytes_received) { diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 19d42ce82110..a1d0c983ccd0 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1104,7 +1104,6 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) mutex_init(&priv->usb_lock); INIT_DELAYED_WORK(&priv->run_command_work, vRunCommand); - INIT_WORK(&priv->read_work_item, RXvWorkItem); usb_set_intfdata(intf, priv); -- cgit From d35d5fbb36e458c4383ebc98d3079e1c46c17b92 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:44 +0100 Subject: staging: vt6656: remove vnt_add_basic_rate The driver never sets basic rate any more so remove function. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 22 ---------------------- drivers/staging/vt6656/card.h | 1 - drivers/staging/vt6656/main_usb.c | 7 ++----- 3 files changed, 2 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 2ef45ca90fa9..82d6b640132c 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -470,28 +470,6 @@ void vnt_update_top_rates(struct vnt_private *priv) priv->byTopCCKBasicRate = top_cck; } -/* - * Description: Set NIC Tx Basic Rate - * - * Parameters: - * In: - * pDevice - The adapter to be set - * wBasicRate - Basic Rate to be set - * Out: - * none - * - * Return Value: true if succeeded; false if failed. - * - */ -void vnt_add_basic_rate(struct vnt_private *priv, u16 rate_idx) -{ - - priv->wBasicRate |= (1 << rate_idx); - - /*Determines the highest basic rate.*/ - vnt_update_top_rates(priv); -} - int vnt_ofdm_min_rate(struct vnt_private *priv) { int ii; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 8c6f67d5a967..5b7cc5a908f6 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -49,7 +49,6 @@ void vnt_set_channel(struct vnt_private *, u32); void vnt_set_rspinf(struct vnt_private *, u8); void vnt_update_ifs(struct vnt_private *); void vnt_update_top_rates(struct vnt_private *); -void vnt_add_basic_rate(struct vnt_private *, u16); int vnt_ofdm_min_rate(struct vnt_private *); void vnt_adjust_tsf(struct vnt_private *, u8, u64, u64); bool vnt_get_current_tsf(struct vnt_private *, u64 *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a1d0c983ccd0..d8164ecc0134 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -432,13 +432,10 @@ static int device_init_registers(struct vnt_private *pDevice) * set BB and packet type at the same time * set Short Slot Time, xIFS, and RSPINF */ - if (pDevice->byBBType == BB_TYPE_11A) { - vnt_add_basic_rate(pDevice, RATE_6M); + if (pDevice->byBBType == BB_TYPE_11A) pDevice->bShortSlotTime = true; - } else { - vnt_add_basic_rate(pDevice, RATE_1M); + else pDevice->bShortSlotTime = false; - } BBvSetShortSlotTime(pDevice); vnt_set_bss_mode(pDevice); -- cgit From d3584775e94d0baa61a1c2cde7fb93a931e966de Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:45 +0100 Subject: staging: vt6656: set BBvSetVGAGainOffset inside vnt_set_bss_mode vnt_set_bss_mode changes the state of abyBBVGA so move BBvSetVGAGainOffset to the function. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 ++ drivers/staging/vt6656/main_usb.c | 5 ----- 2 files changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 82d6b640132c..1849e34237a5 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -825,4 +825,6 @@ void vnt_set_bss_mode(struct vnt_private *priv) priv->abyBBVGA[2] = 0x0; priv->abyBBVGA[3] = 0x0; } + + BBvSetVGAGainOffset(priv, priv->abyBBVGA[0]); } diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d8164ecc0134..e0ed1bb36c6c 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -440,11 +440,6 @@ static int device_init_registers(struct vnt_private *pDevice) BBvSetShortSlotTime(pDevice); vnt_set_bss_mode(pDevice); - pDevice->byBBVGACurrent = pDevice->abyBBVGA[0]; - pDevice->byBBVGANew = pDevice->byBBVGACurrent; - - BBvSetVGAGainOffset(pDevice, pDevice->abyBBVGA[0]); - pDevice->byRadioCtl = pDevice->abyEEPROM[EEP_OFS_RADIOCTL]; pDevice->bHWRadioOff = false; -- cgit From 1ecd083edb1cade7e1537294c5013122304d5823 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 28 Jun 2014 23:55:46 +0100 Subject: staging: vt6656: device_init_registers move out vnt_set_bss_mode Move to vnt_add_interface and allow to refresh at the start of every software scan in vnt_sw_scan_start Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e0ed1bb36c6c..14845ec94f7e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -438,7 +438,6 @@ static int device_init_registers(struct vnt_private *pDevice) pDevice->bShortSlotTime = false; BBvSetShortSlotTime(pDevice); - vnt_set_bss_mode(pDevice); pDevice->byRadioCtl = pDevice->abyEEPROM[EEP_OFS_RADIOCTL]; pDevice->bHWRadioOff = false; @@ -749,6 +748,8 @@ static int vnt_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) priv->op_mode = vif->type; + vnt_set_bss_mode(priv); + /* LED blink on TX */ vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_INTER); @@ -992,6 +993,7 @@ static void vnt_sw_scan_start(struct ieee80211_hw *hw) { struct vnt_private *priv = hw->priv; + vnt_set_bss_mode(priv); /* Set max sensitivity*/ BBvUpdatePreEDThreshold(priv, true); } -- cgit From ccc5188a9a84e921f20ce0f6ae381363b9dca71d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:12 +0200 Subject: Staging: bcm: Misc whitespace fixes Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index f1d7cb82fd7e..cdd102964b91 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -776,7 +776,7 @@ int ddr_init(struct bcm_mini_adapter *Adapter) struct bcm_ddr_setting *psDDRSetting = NULL; ULONG RegCount = 0; UINT value = 0; - UINT uiResetValue = 0; + UINT uiResetValue = 0; UINT uiClockSetting = 0; int retval = STATUS_SUCCESS; @@ -785,17 +785,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) switch (Adapter->DDRSetting) { case DDR_80_MHZ: psDDRSetting = asT3LP_DDRSetting80MHz; - RegCount = (sizeof(asT3LP_DDRSetting80MHz)/ + RegCount = (sizeof(asT3LP_DDRSetting80MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3LP_DDRSetting100MHz; - RegCount = (sizeof(asT3LP_DDRSetting100MHz)/ + RegCount = (sizeof(asT3LP_DDRSetting100MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3LP_DDRSetting133MHz; - RegCount = (sizeof(asT3LP_DDRSetting133MHz)/ + RegCount = (sizeof(asT3LP_DDRSetting133MHz) / sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x03F13652; @@ -836,17 +836,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_80_MHZ: psDDRSetting = asT3LPB_DDRSetting80MHz; - RegCount = (sizeof(asT3B_DDRSetting80MHz)/ + RegCount = (sizeof(asT3B_DDRSetting80MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3LPB_DDRSetting100MHz; - RegCount = (sizeof(asT3B_DDRSetting100MHz)/ + RegCount = (sizeof(asT3B_DDRSetting100MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3LPB_DDRSetting133MHz; - RegCount = (sizeof(asT3B_DDRSetting133MHz)/ + RegCount = (sizeof(asT3B_DDRSetting133MHz) / sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) @@ -875,17 +875,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) switch (Adapter->DDRSetting) { case DDR_80_MHZ: psDDRSetting = asT3_DDRSetting80MHz; - RegCount = (sizeof(asT3_DDRSetting80MHz)/ + RegCount = (sizeof(asT3_DDRSetting80MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3_DDRSetting100MHz; - RegCount = (sizeof(asT3_DDRSetting100MHz)/ + RegCount = (sizeof(asT3_DDRSetting100MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3_DDRSetting133MHz; - RegCount = (sizeof(asT3_DDRSetting133MHz)/ + RegCount = (sizeof(asT3_DDRSetting133MHz) / sizeof(struct bcm_ddr_setting)); break; default: @@ -896,12 +896,12 @@ int ddr_init(struct bcm_mini_adapter *Adapter) switch (Adapter->DDRSetting) { case DDR_80_MHZ: psDDRSetting = asT3B_DDRSetting80MHz; - RegCount = (sizeof(asT3B_DDRSetting80MHz)/ + RegCount = (sizeof(asT3B_DDRSetting80MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3B_DDRSetting100MHz; - RegCount = (sizeof(asT3B_DDRSetting100MHz)/ + RegCount = (sizeof(asT3B_DDRSetting100MHz) / sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: @@ -910,11 +910,11 @@ int ddr_init(struct bcm_mini_adapter *Adapter) memcpy(asT3B_DDRSetting133MHz, asDPLL_266MHZ, sizeof(asDPLL_266MHZ)); psDDRSetting = asT3B_DDRSetting133MHz; - RegCount = (sizeof(asT3B_DDRSetting133MHz)/ + RegCount = (sizeof(asT3B_DDRSetting133MHz) / sizeof(struct bcm_ddr_setting)); } else { psDDRSetting = asT3B_DDRSetting133MHz; - RegCount = (sizeof(asT3B_DDRSetting133MHz)/ + RegCount = (sizeof(asT3B_DDRSetting133MHz) / sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x07F13652; @@ -1068,7 +1068,7 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) struct bcm_ddr_setting *psDDRSetting = NULL; ULONG RegCount = 0; unsigned long ul_ddr_setting_load_addr = DDR_DUMP_INTERNAL_DEVICE_MEMORY; - UINT value = 0; + UINT value = 0; int retval = STATUS_SUCCESS; bool bOverrideSelfRefresh = false; @@ -1222,9 +1222,9 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) break; } } else { - value = psDDRSetting->ulRegValue; + value = psDDRSetting->ulRegValue; - if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr , + if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value))) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); break; @@ -1235,5 +1235,5 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) RegCount--; psDDRSetting++; } - return retval; + return retval; } -- cgit From 41f3b52cf460d1641698bab84c2a3dc110d22b3a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:13 +0200 Subject: Staging: bcm: Indentation fixes This patch fixes some indentation errors, where multi-line statements where not indented. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index cdd102964b91..4c7f5182709e 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -786,17 +786,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_80_MHZ: psDDRSetting = asT3LP_DDRSetting80MHz; RegCount = (sizeof(asT3LP_DDRSetting80MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3LP_DDRSetting100MHz; RegCount = (sizeof(asT3LP_DDRSetting100MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3LP_DDRSetting133MHz; RegCount = (sizeof(asT3LP_DDRSetting133MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x03F13652; else @@ -837,17 +837,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_80_MHZ: psDDRSetting = asT3LPB_DDRSetting80MHz; RegCount = (sizeof(asT3B_DDRSetting80MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3LPB_DDRSetting100MHz; RegCount = (sizeof(asT3B_DDRSetting100MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3LPB_DDRSetting133MHz; RegCount = (sizeof(asT3B_DDRSetting133MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x03F13652; @@ -876,17 +876,17 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_80_MHZ: psDDRSetting = asT3_DDRSetting80MHz; RegCount = (sizeof(asT3_DDRSetting80MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3_DDRSetting100MHz; RegCount = (sizeof(asT3_DDRSetting100MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: psDDRSetting = asT3_DDRSetting133MHz; RegCount = (sizeof(asT3_DDRSetting133MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; default: return -EINVAL; @@ -897,25 +897,25 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_80_MHZ: psDDRSetting = asT3B_DDRSetting80MHz; RegCount = (sizeof(asT3B_DDRSetting80MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_100_MHZ: psDDRSetting = asT3B_DDRSetting100MHz; RegCount = (sizeof(asT3B_DDRSetting100MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); break; case DDR_133_MHZ: if (Adapter->bDPLLConfig == PLL_266_MHZ) { /* 266Mhz PLL selected. */ memcpy(asT3B_DDRSetting133MHz, asDPLL_266MHZ, - sizeof(asDPLL_266MHZ)); + sizeof(asDPLL_266MHZ)); psDDRSetting = asT3B_DDRSetting133MHz; RegCount = (sizeof(asT3B_DDRSetting133MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); } else { psDDRSetting = asT3B_DDRSetting133MHz; RegCount = (sizeof(asT3B_DDRSetting133MHz) / - sizeof(struct bcm_ddr_setting)); + sizeof(struct bcm_ddr_setting)); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x07F13652; else @@ -1217,7 +1217,7 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) if (bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) { value = (psDDRSetting->ulRegValue | (1<<8)); if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, - &value, sizeof(value))) { + &value, sizeof(value))) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); break; } -- cgit From 71928b3a4613f01444ff07d8693baac69c608731 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:14 +0200 Subject: Staging: bcm: Fixed indention for inner if-block The inner if-statement was aligned just like the outer one. Why? This indention was introduced by f34c488c3894968e8cdbdc3b1ed617d78315cace which is a indention-fix patch itself. That's why I'm curious about it. I did not merge these nested if-statements, as I don't know if I'm destroying logical seperated checks with it. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index 4c7f5182709e..ac45ead10320 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -1216,11 +1216,11 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) if (!retval) { if (bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) { value = (psDDRSetting->ulRegValue | (1<<8)); - if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, - &value, sizeof(value))) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); - break; - } + if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, + &value, sizeof(value))) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + break; + } } else { value = psDDRSetting->ulRegValue; -- cgit From 40ee5a77eeae67247040719ec2f97bd75e164c87 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:15 +0200 Subject: Staging: bcm: Moved doubled if-block This patch moves the doubled if block inside the retval-checking one level up. As the if-else-block it was in is now a one-statement if-else block, I removed the braces from it. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index ac45ead10320..d2646d965211 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -1214,21 +1214,15 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); ul_ddr_setting_load_addr += sizeof(ULONG); if (!retval) { - if (bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) { + if (bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) value = (psDDRSetting->ulRegValue | (1<<8)); - if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, - &value, sizeof(value))) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); - break; - } - } else { + else value = psDDRSetting->ulRegValue; - if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, + if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value))) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); - break; - } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + break; } } ul_ddr_setting_load_addr += sizeof(ULONG); -- cgit From 9d6f3945056d07adcb93148c6517521ab7c2277a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:16 +0200 Subject: Staging: bcm: Lines shortened in ddr_init() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 176 ++++++++++++++++++++++++++++++++---------- 1 file changed, 134 insertions(+), 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index d2646d965211..423bfd9bf4ed 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -818,15 +818,21 @@ int ddr_init(struct bcm_mini_adapter *Adapter) if ((Adapter->chip_id != BCS220_2) && (Adapter->chip_id != BCS220_2BC) && (Adapter->chip_id != BCS220_3)) { - retval = rdmalt(Adapter, (UINT)0x0f000830, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000830, &uiResetValue, + sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, __LINE__); return retval; } uiResetValue |= 0x44; - retval = wrmalt(Adapter, (UINT)0x0f000830, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0f000830, &uiResetValue, + sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, __LINE__); return retval; } } @@ -857,7 +863,8 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case DDR_160_MHZ: psDDRSetting = asT3LPB_DDRSetting160MHz; - RegCount = sizeof(asT3LPB_DDRSetting160MHz)/sizeof(struct bcm_ddr_setting); + RegCount = sizeof(asT3LPB_DDRSetting160MHz) / + sizeof(struct bcm_ddr_setting); if (Adapter->bMipsConfig == MIPS_200_MHZ) uiClockSetting = 0x03F137D2; @@ -871,7 +878,8 @@ int ddr_init(struct bcm_mini_adapter *Adapter) case 0xbece0121: case 0xbece0130: case 0xbece0300: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "DDR Setting: %x\n", Adapter->DDRSetting); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, + "DDR Setting: %x\n", Adapter->DDRSetting); switch (Adapter->DDRSetting) { case DDR_80_MHZ: psDDRSetting = asT3_DDRSetting80MHz; @@ -933,15 +941,19 @@ int ddr_init(struct bcm_mini_adapter *Adapter) } value = 0; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Register Count is =%lu\n", RegCount); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, + "Register Count is =%lu\n", RegCount); while (RegCount && !retval) { - if (uiClockSetting && psDDRSetting->ulRegAddress == MIPS_CLOCK_REG) + if (uiClockSetting + && psDDRSetting->ulRegAddress == MIPS_CLOCK_REG) value = uiClockSetting; else value = psDDRSetting->ulRegValue; - retval = wrmalt(Adapter, psDDRSetting->ulRegAddress, &value, sizeof(value)); + retval = wrmalt(Adapter, psDDRSetting->ulRegAddress, &value, + sizeof(value)); if (STATUS_SUCCESS != retval) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, + "%s:%d\n", __func__, __LINE__); break; } @@ -957,27 +969,47 @@ int ddr_init(struct bcm_mini_adapter *Adapter) (Adapter->chip_id != BCS220_3)) { /* drive MDDR to half in case of UMA-B: */ uiResetValue = 0x01010001; - retval = wrmalt(Adapter, (UINT)0x0F007018, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0F007018, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x00040020; - retval = wrmalt(Adapter, (UINT)0x0F007094, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0F007094, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x01020101; - retval = wrmalt(Adapter, (UINT)0x0F00701c, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0F00701c, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x01010000; - retval = wrmalt(Adapter, (UINT)0x0F007018, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0F007018, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } } @@ -990,70 +1022,130 @@ int ddr_init(struct bcm_mini_adapter *Adapter) * we will change this when we will have internal PMU. */ if (Adapter->PmuMode == HYBRID_MODE_7C) { - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x1322a8; - retval = wrmalt(Adapter, (UINT)0x0f000d1c, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0f000d1c, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x132296; - retval = wrmalt(Adapter, (UINT)0x0f000d14, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0f000d14, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } } else if (Adapter->PmuMode == HYBRID_MODE_6) { - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x6003229a; - retval = wrmalt(Adapter, (UINT)0x0f000d14, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0f000d14, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } - retval = rdmalt(Adapter, (UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); + retval = rdmalt(Adapter, (UINT)0x0f000c00, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } uiResetValue = 0x1322a8; - retval = wrmalt(Adapter, (UINT)0x0f000d1c, &uiResetValue, sizeof(uiResetValue)); + retval = wrmalt(Adapter, (UINT)0x0f000d1c, + &uiResetValue, sizeof(uiResetValue)); if (retval < 0) { - BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, CMHOST, RDM, + DBG_LVL_ALL, + "%s:%d RDM failed\n", + __func__, + __LINE__); return retval; } } -- cgit From 39874a0c75506e9d21ff4b6b32a149c118c1d663 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 27 Jun 2014 11:55:17 +0200 Subject: Staging: bcm: Lines shortened in download_ddr_settings() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index 423bfd9bf4ed..4564f4080e92 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -1159,7 +1159,8 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) { struct bcm_ddr_setting *psDDRSetting = NULL; ULONG RegCount = 0; - unsigned long ul_ddr_setting_load_addr = DDR_DUMP_INTERNAL_DEVICE_MEMORY; + unsigned long ul_ddr_setting_load_addr = + DDR_DUMP_INTERNAL_DEVICE_MEMORY; UINT value = 0; int retval = STATUS_SUCCESS; bool bOverrideSelfRefresh = false; @@ -1283,18 +1284,22 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) } /* total number of Register that has to be dumped */ value = RegCount; - retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); + retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, + sizeof(value)); if (retval) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, + "%s:%d\n", __func__, __LINE__); return retval; } ul_ddr_setting_load_addr += sizeof(ULONG); /* signature */ value = (0x1d1e0dd0); - retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); + retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, + sizeof(value)); if (retval) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, + "%s:%d\n", __func__, __LINE__); return retval; } @@ -1303,17 +1308,23 @@ int download_ddr_settings(struct bcm_mini_adapter *Adapter) while (RegCount && !retval) { value = psDDRSetting->ulRegAddress; - retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); + retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, + sizeof(value)); ul_ddr_setting_load_addr += sizeof(ULONG); if (!retval) { - if (bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) + if (bOverrideSelfRefresh + && (psDDRSetting->ulRegAddress + == 0x0F007018)) value = (psDDRSetting->ulRegValue | (1<<8)); else value = psDDRSetting->ulRegValue; - if (STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, - &value, sizeof(value))) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "%s:%d\n", __func__, __LINE__); + if (STATUS_SUCCESS != wrmalt(Adapter, + ul_ddr_setting_load_addr, + &value, + sizeof(value))) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, + "%s:%d\n", __func__, __LINE__); break; } } -- cgit From 95b86a76f76d020f67b3cf0a72bff2df5a356786 Mon Sep 17 00:00:00 2001 From: Sami Laine Date: Fri, 27 Jun 2014 16:14:16 +0300 Subject: drivers/staging/lustre/lustre/llite: sparse warning corrections Sparse warning corrections: NULL-pointers as NULL instead of static 0's. Signed-off-by: Sami Laine Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/lproc_llite.c | 59 ++++++++++++----------- 1 file changed, 30 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index 77ee9e58cf87..d9c874c95ac8 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -811,37 +811,38 @@ static ssize_t ll_xattr_cache_seq_write(struct file *file, const char *buffer, LPROC_SEQ_FOPS(ll_xattr_cache); static struct lprocfs_vars lprocfs_llite_obd_vars[] = { - { "uuid", &ll_sb_uuid_fops, 0, 0 }, + { "uuid", &ll_sb_uuid_fops, NULL, 0 }, //{ "mntpt_path", ll_rd_path, 0, 0 }, - { "fstype", &ll_fstype_fops, 0, 0 }, - { "site", &ll_site_stats_fops, 0, 0 }, - { "blocksize", &ll_blksize_fops, 0, 0 }, - { "kbytestotal", &ll_kbytestotal_fops, 0, 0 }, - { "kbytesfree", &ll_kbytesfree_fops, 0, 0 }, - { "kbytesavail", &ll_kbytesavail_fops, 0, 0 }, - { "filestotal", &ll_filestotal_fops, 0, 0 }, - { "filesfree", &ll_filesfree_fops, 0, 0 }, - { "client_type", &ll_client_type_fops, 0, 0 }, + { "fstype", &ll_fstype_fops, NULL, 0 }, + { "site", &ll_site_stats_fops, NULL, 0 }, + { "blocksize", &ll_blksize_fops, NULL, 0 }, + { "kbytestotal", &ll_kbytestotal_fops, NULL, 0 }, + { "kbytesfree", &ll_kbytesfree_fops, NULL, 0 }, + { "kbytesavail", &ll_kbytesavail_fops, NULL, 0 }, + { "filestotal", &ll_filestotal_fops, NULL, 0 }, + { "filesfree", &ll_filesfree_fops, NULL, 0 }, + { "client_type", &ll_client_type_fops, NULL, 0 }, //{ "filegroups", lprocfs_rd_filegroups, 0, 0 }, - { "max_read_ahead_mb", &ll_max_readahead_mb_fops, 0 }, - { "max_read_ahead_per_file_mb", &ll_max_readahead_per_file_mb_fops, 0 }, - { "max_read_ahead_whole_mb", &ll_max_read_ahead_whole_mb_fops, 0 }, - { "max_cached_mb", &ll_max_cached_mb_fops, 0 }, - { "checksum_pages", &ll_checksum_fops, 0 }, - { "max_rw_chunk", &ll_max_rw_chunk_fops, 0 }, - { "stats_track_pid", &ll_track_pid_fops, 0 }, - { "stats_track_ppid", &ll_track_ppid_fops, 0 }, - { "stats_track_gid", &ll_track_gid_fops, 0 }, - { "statahead_max", &ll_statahead_max_fops, 0 }, - { "statahead_agl", &ll_statahead_agl_fops, 0 }, - { "statahead_stats", &ll_statahead_stats_fops, 0, 0 }, - { "lazystatfs", &ll_lazystatfs_fops, 0 }, - { "max_easize", &ll_max_easize_fops, 0, 0 }, - { "default_easize", &ll_defult_easize_fops, 0, 0 }, - { "max_cookiesize", &ll_max_cookiesize_fops, 0, 0 }, - { "default_cookiesize", &ll_defult_cookiesize_fops, 0, 0 }, - { "sbi_flags", &ll_sbi_flags_fops, 0, 0 }, - { "xattr_cache", &ll_xattr_cache_fops, 0, 0 }, + { "max_read_ahead_mb", &ll_max_readahead_mb_fops, NULL }, + { "max_read_ahead_per_file_mb", &ll_max_readahead_per_file_mb_fops, + NULL }, + { "max_read_ahead_whole_mb", &ll_max_read_ahead_whole_mb_fops, NULL }, + { "max_cached_mb", &ll_max_cached_mb_fops, NULL }, + { "checksum_pages", &ll_checksum_fops, NULL }, + { "max_rw_chunk", &ll_max_rw_chunk_fops, NULL }, + { "stats_track_pid", &ll_track_pid_fops, NULL }, + { "stats_track_ppid", &ll_track_ppid_fops, NULL }, + { "stats_track_gid", &ll_track_gid_fops, NULL }, + { "statahead_max", &ll_statahead_max_fops, NULL }, + { "statahead_agl", &ll_statahead_agl_fops, NULL }, + { "statahead_stats", &ll_statahead_stats_fops, NULL, 0 }, + { "lazystatfs", &ll_lazystatfs_fops, NULL }, + { "max_easize", &ll_max_easize_fops, NULL, 0 }, + { "default_easize", &ll_defult_easize_fops, NULL, 0 }, + { "max_cookiesize", &ll_max_cookiesize_fops, NULL, 0 }, + { "default_cookiesize", &ll_defult_cookiesize_fops, NULL, 0 }, + { "sbi_flags", &ll_sbi_flags_fops, NULL, 0 }, + { "xattr_cache", &ll_xattr_cache_fops, NULL, 0 }, { 0 } }; -- cgit From 51bd88146fc49b21c87f66eb61ec49cf5e14085c Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Sat, 28 Jun 2014 21:26:16 +0530 Subject: staging: lustre: lnet: api-ni.c: fixed sparse warnings - this fixes few sparse warnings for missing static in functions: drivers/staging/lustre/lnet/lnet/api-ni.c:63:6: warning: symbol 'lnet_get_routes' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:69:6: warning: symbol 'lnet_get_networks' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:93:1: warning: symbol 'lnet_init_locks' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:102:1: warning: symbol 'lnet_fini_locks' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:180:6: warning: symbol 'lnet_assert_wire_constants' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:273:7: warning: symbol 'lnet_find_lnd_by_type' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:419:1: warning: symbol 'lnet_create_interface_cookie' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:450:1: warning: symbol 'lnet_res_container_cleanup' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:494:1: warning: symbol 'lnet_res_container_setup' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:612:1: warning: symbol 'lnet_prepare' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:917:1: warning: symbol 'lnet_shutdown_lndnis' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/api-ni.c:1034:1: warning: symbol 'lnet_startup_lndnis' was not declared. Should it be static? Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/lnet/api-ni.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index 3f878dee2e42..cd6792ea24ef 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -60,13 +60,13 @@ static int rnet_htable_size = LNET_REMOTE_NETS_HASH_DEFAULT; module_param(rnet_htable_size, int, 0444); MODULE_PARM_DESC(rnet_htable_size, "size of remote network hash table"); -char * +static char * lnet_get_routes(void) { return routes; } -char * +static char * lnet_get_networks(void) { char *nets; @@ -89,7 +89,7 @@ lnet_get_networks(void) return "tcp"; } -void +static void lnet_init_locks(void) { spin_lock_init(&the_lnet.ln_eq_wait_lock); @@ -98,7 +98,7 @@ lnet_init_locks(void) mutex_init(&the_lnet.ln_api_mutex); } -void +static void lnet_fini_locks(void) { } @@ -177,7 +177,7 @@ lnet_create_locks(void) return -ENOMEM; } -void lnet_assert_wire_constants (void) +static void lnet_assert_wire_constants (void) { /* Wire protocol assertions generated by 'wirecheck' * running on Linux robert.bartonsoftware.com 2.6.8-1.521 @@ -270,7 +270,7 @@ void lnet_assert_wire_constants (void) CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.hello.type) == 4); } -lnd_t * +static lnd_t * lnet_find_lnd_by_type (int type) { lnd_t *lnd; @@ -415,7 +415,7 @@ lnet_freelist_fini (lnet_freelist_t *fl) #endif /* LNET_USE_LIB_FREELIST */ -__u64 +static __u64 lnet_create_interface_cookie (void) { /* NB the interface cookie in wire handles guards against delayed @@ -446,7 +446,7 @@ lnet_res_type2str(int type) } } -void +static void lnet_res_container_cleanup(struct lnet_res_container *rec) { int count = 0; @@ -490,7 +490,7 @@ lnet_res_container_cleanup(struct lnet_res_container *rec) rec->rec_type = 0; /* mark it as finalized */ } -int +static int lnet_res_container_setup(struct lnet_res_container *rec, int cpt, int type, int objnum, int objsz) { @@ -608,7 +608,7 @@ lnet_res_lh_initialize(struct lnet_res_container *rec, lnet_libhandle_t *lh) int lnet_unprepare(void); -int +static int lnet_prepare(lnet_pid_t requested_pid) { /* Prepare to bring up the network */ @@ -913,7 +913,7 @@ lnet_ni_tq_credits(lnet_ni_t *ni) return credits; } -void +static void lnet_shutdown_lndnis (void) { int i; @@ -1030,7 +1030,7 @@ lnet_shutdown_lndnis (void) } } -int +static int lnet_startup_lndnis (void) { lnd_t *lnd; -- cgit From 4d525ef61fd7bed7ef7c34c1398ffcdead0ac53c Mon Sep 17 00:00:00 2001 From: Cheng-Wei Lee Date: Fri, 27 Jun 2014 19:42:14 +0800 Subject: staging: wlan-ng/hfa384x_usb.c: add blank line after declarations This patch fixes the following checkpatch.pl issues in hfa384x_usb.c: WARNING: Missing a blank line after declarations Signed-off-by: Quentin Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/hfa384x_usb.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c index 98343ff70615..07cee5637276 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -3705,6 +3705,7 @@ static void hfa384x_usbout_callback(struct urb *urb) case -EPIPE: { hfa384x_t *hw = wlandev->priv; + netdev_warn(hw->wlandev->netdev, "%s tx pipe stalled: requesting reset\n", wlandev->netdev->name); -- cgit From fbc470d66d68ddd33e156a59323f0d2a4dc82801 Mon Sep 17 00:00:00 2001 From: Fabian Frederick Date: Sat, 28 Jun 2014 13:22:59 +0200 Subject: drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c: remove unnecessary null test before kfree Fix checkpatch warning: WARNING: kfree(NULL) is safe this check is probably not required Cc: Greg Kroah-Hartman Cc: Sarah Sharp Cc: devel@driverdev.osuosl.org Signed-off-by: Fabian Frederick Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c b/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c index 25e751b0962a..f885ca77344b 100644 --- a/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c +++ b/drivers/staging/rtl8821ae/rtl8821ae/hal_btc.c @@ -2045,8 +2045,7 @@ void rtl_8821ae_c2h_command_handle(struct ieee80211_hw *hw) break; } - if(ptmp_buf) - kfree(ptmp_buf); + kfree(ptmp_buf); rtl_write_byte(rtlpriv, 0x01AF, C2H_EVT_HOST_CLOSE); } -- cgit From dc894a020f75b0571a3905582244eb8c957a93b5 Mon Sep 17 00:00:00 2001 From: "Morgan S. Stuart" Date: Sat, 28 Jun 2014 09:16:52 -0400 Subject: Staging: rtl8192ee: fixed tab coding style issue in base.h Fixes the tab error found in base.h, reported by checkpatch.pl tool Signed-off-by: Morgan Stuart Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/base.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/base.h b/drivers/staging/rtl8192ee/base.h index c7929a7b02fd..1d6e5a76ce3e 100644 --- a/drivers/staging/rtl8192ee/base.h +++ b/drivers/staging/rtl8192ee/base.h @@ -132,13 +132,13 @@ u8 rtl92e_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, void rtl92e_beacon_statistic(struct ieee80211_hw *hw, struct sk_buff *skb); void rtl92e_watch_dog_timer_callback(unsigned long data); int rtl92e_tx_agg_start(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct ieee80211_sta *sta, u16 tid, u16 *ssn); + struct ieee80211_sta *sta, u16 tid, u16 *ssn); int rtl92e_tx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u16 tid); int rtl92e_tx_agg_oper(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u16 tid); int rtl92e_rx_agg_start(struct ieee80211_hw *hw, - struct ieee80211_sta *sta, u16 tid); + struct ieee80211_sta *sta, u16 tid); int rtl92e_rx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u16 tid); void rtl92e_watchdog_wq_callback(void *data); -- cgit From 78adbb284cf319edd05d7322ca41e877b6f628e5 Mon Sep 17 00:00:00 2001 From: Guillaume Morin Date: Sat, 28 Jun 2014 18:16:40 +0200 Subject: staging: dgnc_driver.c: code style fixes Simple code style fixes: - "if(" -> "if (" - "switch(" -> "switch (" - move one open brace to the line of the declaration instead of its own line - remove trailing whitespace Signed-off-by: Guillaume Morin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_driver.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index d52a9e84bd9d..68460af9e169 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -88,8 +88,7 @@ module_exit(dgnc_cleanup_module); /* * File operations permitted on Control/Management major. */ -static const struct file_operations dgnc_BoardFops = -{ +static const struct file_operations dgnc_BoardFops = { .owner = THIS_MODULE, .unlocked_ioctl = dgnc_mgmt_ioctl, .open = dgnc_mgmt_open, @@ -407,7 +406,7 @@ static void dgnc_cleanup_board(struct dgnc_board *brd) { int i = 0; - if(!brd || brd->magic != DGNC_BOARD_MAGIC) + if (!brd || brd->magic != DGNC_BOARD_MAGIC) return; switch (brd->device) { @@ -480,7 +479,7 @@ static int dgnc_found_board(struct pci_dev *pdev, int id) /* get the board structure and prep it */ brd = dgnc_Board[dgnc_NumBoards] = kzalloc(sizeof(*brd), GFP_KERNEL); - if (!brd) + if (!brd) return -ENOMEM; /* make a temporary message buffer for the boot messages */ @@ -523,7 +522,7 @@ static int dgnc_found_board(struct pci_dev *pdev, int id) brd->irq = pci_irq; - switch(brd->device) { + switch (brd->device) { case PCI_DEVICE_CLASSIC_4_DID: case PCI_DEVICE_CLASSIC_8_DID: @@ -887,7 +886,7 @@ int dgnc_ms_sleep(ulong ms) */ char *dgnc_ioctl_name(int cmd) { - switch(cmd) { + switch (cmd) { case TCGETA: return "TCGETA"; case TCGETS: return "TCGETS"; -- cgit From 0fbce84c6f0c5ba7ce2be5fec19caaca62586883 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Fri, 27 Jun 2014 23:17:24 -0700 Subject: staging: gdm72xx: return -EINVAL instead of BUG_ON for invalid data length This patch changes gdm_usb_send() and gdm_sdio_send() to return -EINVAL instead of calling BUG_ON if an invalid data length is passed to the functions. Reported-by: Dan Carpenter Reported-by: Michalis Pappas Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_sdio.c | 3 ++- drivers/staging/gdm72xx/gdm_usb.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index 0c6a3eb00e84..9d2de6ff7903 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -390,7 +390,8 @@ static int gdm_sdio_send(void *priv_dev, void *data, int len, u16 cmd_evt; unsigned long flags; - BUG_ON(len > TX_BUF_SIZE - TYPE_A_HEADER_SIZE); + if (len > TX_BUF_SIZE - TYPE_A_HEADER_SIZE) + return -EINVAL; spin_lock_irqsave(&tx->lock, flags); diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index cd8e6e483e70..971976cd8d0c 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -312,7 +312,8 @@ static int gdm_usb_send(void *priv_dev, void *data, int len, return -ENODEV; } - BUG_ON(len > TX_BUF_SIZE - padding - 1); + if (len > TX_BUF_SIZE - padding - 1) + return -EINVAL; spin_lock_irqsave(&tx->lock, flags); -- cgit From 8fea7d0944faa37fcaf82305f3e756fd2a7ccdf5 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Fri, 27 Jun 2014 23:17:25 -0700 Subject: staging: gdm72xx: use bool instead of custom-defined BOOLEAN Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_qos.c | 10 +++++----- drivers/staging/gdm72xx/gdm_qos.h | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_qos.c b/drivers/staging/gdm72xx/gdm_qos.c index df6f000534d4..732f009f572d 100644 --- a/drivers/staging/gdm72xx/gdm_qos.c +++ b/drivers/staging/gdm72xx/gdm_qos.c @@ -100,7 +100,7 @@ void gdm_qos_init(void *nic_ptr) for (i = 0; i < QOS_MAX; i++) { INIT_LIST_HEAD(&qcb->qos_list[i]); qcb->csr[i].qos_buf_count = 0; - qcb->csr[i].enabled = 0; + qcb->csr[i].enabled = false; } qcb->qos_list_cnt = 0; @@ -127,7 +127,7 @@ void gdm_qos_release_list(void *nic_ptr) for (i = 0; i < QOS_MAX; i++) { qcb->csr[i].qos_buf_count = 0; - qcb->csr[i].enabled = 0; + qcb->csr[i].enabled = false; } qcb->qos_list_cnt = 0; @@ -316,8 +316,8 @@ static u32 get_csr(struct qos_cb_s *qcb, u32 SFID, int mode) if (mode) { for (i = 0; i < QOS_MAX; i++) { - if (qcb->csr[i].enabled == 0) { - qcb->csr[i].enabled = 1; + if (!qcb->csr[i].enabled) { + qcb->csr[i].enabled = true; qcb->qos_list_cnt++; return i; } @@ -428,7 +428,7 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) INIT_LIST_HEAD(&free_list); spin_lock_irqsave(&qcb->qos_lock, flags); - qcb->csr[index].enabled = 0; + qcb->csr[index].enabled = false; qcb->qos_list_cnt--; qcb->qos_limit_size = 254/qcb->qos_list_cnt; diff --git a/drivers/staging/gdm72xx/gdm_qos.h b/drivers/staging/gdm72xx/gdm_qos.h index 6543cff2a876..50aa191f94c7 100644 --- a/drivers/staging/gdm72xx/gdm_qos.h +++ b/drivers/staging/gdm72xx/gdm_qos.h @@ -18,8 +18,6 @@ #include #include -#define BOOLEAN u8 - #define QOS_MAX 16 #define IPTYPEOFSERVICE 0x8000 #define PROTOCOL 0x4000 @@ -34,7 +32,7 @@ #define IEEE802_1QVLANID 0x10 struct gdm_wimax_csr_s { - BOOLEAN enabled; + bool enabled; u32 SFID; u8 qos_buf_count; u16 classifier_rule_en; -- cgit From e60cc3bd453737491f72a89f3c395cbb4022eb98 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Fri, 27 Jun 2014 23:17:26 -0700 Subject: staging: gdm72xx: use int instead of u32 whenever makes sense This patch addresses the following issues: - Use int instead of u32 whenever makes sense - Turn extract_qos_list() in gdm_qos.c, which previously always returned 0, into a void function. Reported-by: Dan Carpenter Reported-by: Michalis Pappas Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_qos.c | 15 +++++++-------- drivers/staging/gdm72xx/gdm_qos.h | 6 +++--- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_qos.c b/drivers/staging/gdm72xx/gdm_qos.c index 732f009f572d..a2efc5cf53b4 100644 --- a/drivers/staging/gdm72xx/gdm_qos.c +++ b/drivers/staging/gdm72xx/gdm_qos.c @@ -142,7 +142,7 @@ void gdm_qos_release_list(void *nic_ptr) free_qos_entry_list(&free_list); } -static u32 chk_ipv4_rule(struct gdm_wimax_csr_s *csr, u8 *stream, u8 *port) +static int chk_ipv4_rule(struct gdm_wimax_csr_s *csr, u8 *stream, u8 *port) { int i; @@ -188,9 +188,9 @@ static u32 chk_ipv4_rule(struct gdm_wimax_csr_s *csr, u8 *stream, u8 *port) return 0; } -static u32 get_qos_index(struct nic *nic, u8 *iph, u8 *tcpudph) +static int get_qos_index(struct nic *nic, u8 *iph, u8 *tcpudph) { - u32 IP_ver, i; + int IP_ver, i; struct qos_cb_s *qcb = &nic->qos; if (iph == NULL || tcpudph == NULL) @@ -213,7 +213,7 @@ static u32 get_qos_index(struct nic *nic, u8 *iph, u8 *tcpudph) return -1; } -static u32 extract_qos_list(struct nic *nic, struct list_head *head) +static void extract_qos_list(struct nic *nic, struct list_head *head) { struct qos_cb_s *qcb = &nic->qos; struct qos_entry_s *entry; @@ -238,8 +238,6 @@ static u32 extract_qos_list(struct nic *nic, struct list_head *head) if (!list_empty(&qcb->qos_list[i])) netdev_warn(nic->netdev, "Index(%d) is piled!!\n", i); } - - return 0; } static void send_qos_list(struct nic *nic, struct list_head *head) @@ -305,7 +303,7 @@ out: return ret; } -static u32 get_csr(struct qos_cb_s *qcb, u32 SFID, int mode) +static int get_csr(struct qos_cb_s *qcb, u32 SFID, int mode) { int i; @@ -333,7 +331,8 @@ static u32 get_csr(struct qos_cb_s *qcb, u32 SFID, int mode) void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) { struct nic *nic = nic_ptr; - u32 i, SFID, index, pos; + int i, index, pos; + u32 SFID; u8 sub_cmd_evt; struct qos_cb_s *qcb = &nic->qos; struct qos_entry_s *entry, *n; diff --git a/drivers/staging/gdm72xx/gdm_qos.h b/drivers/staging/gdm72xx/gdm_qos.h index 50aa191f94c7..ab03d33c3dec 100644 --- a/drivers/staging/gdm72xx/gdm_qos.h +++ b/drivers/staging/gdm72xx/gdm_qos.h @@ -59,11 +59,11 @@ struct qos_entry_s { struct qos_cb_s { struct list_head qos_list[QOS_MAX]; - u32 qos_list_cnt; - u32 qos_null_idx; + int qos_list_cnt; + int qos_null_idx; struct gdm_wimax_csr_s csr[QOS_MAX]; spinlock_t qos_lock; - u32 qos_limit_size; + int qos_limit_size; }; void gdm_qos_init(void *nic_ptr); -- cgit From c047b443ac33f599ada99f8d0b36c8c13bee4b65 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Fri, 27 Jun 2014 23:17:27 -0700 Subject: staging: gdm72xx: use lower case for variable names for consistency Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_qos.c | 38 +++++++++++++++++++------------------- drivers/staging/gdm72xx/gdm_qos.h | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_qos.c b/drivers/staging/gdm72xx/gdm_qos.c index a2efc5cf53b4..b08c8e10d211 100644 --- a/drivers/staging/gdm72xx/gdm_qos.c +++ b/drivers/staging/gdm72xx/gdm_qos.c @@ -190,15 +190,15 @@ static int chk_ipv4_rule(struct gdm_wimax_csr_s *csr, u8 *stream, u8 *port) static int get_qos_index(struct nic *nic, u8 *iph, u8 *tcpudph) { - int IP_ver, i; + int ip_ver, i; struct qos_cb_s *qcb = &nic->qos; if (iph == NULL || tcpudph == NULL) return -1; - IP_ver = (iph[0]>>4)&0xf; + ip_ver = (iph[0]>>4)&0xf; - if (IP_ver != 4) + if (ip_ver != 4) return -1; for (i = 0; i < QOS_MAX; i++) { @@ -303,12 +303,12 @@ out: return ret; } -static int get_csr(struct qos_cb_s *qcb, u32 SFID, int mode) +static int get_csr(struct qos_cb_s *qcb, u32 sfid, int mode) { int i; for (i = 0; i < qcb->qos_list_cnt; i++) { - if (qcb->csr[i].SFID == SFID) + if (qcb->csr[i].sfid == sfid) return i; } @@ -332,7 +332,7 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) { struct nic *nic = nic_ptr; int i, index, pos; - u32 SFID; + u32 sfid; u8 sub_cmd_evt; struct qos_cb_s *qcb = &nic->qos; struct qos_entry_s *entry, *n; @@ -345,11 +345,11 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) if (sub_cmd_evt == QOS_REPORT) { spin_lock_irqsave(&qcb->qos_lock, flags); for (i = 0; i < qcb->qos_list_cnt; i++) { - SFID = ((buf[(i*5)+6]<<24)&0xff000000); - SFID += ((buf[(i*5)+7]<<16)&0xff0000); - SFID += ((buf[(i*5)+8]<<8)&0xff00); - SFID += (buf[(i*5)+9]); - index = get_csr(qcb, SFID, 0); + sfid = ((buf[(i*5)+6]<<24)&0xff000000); + sfid += ((buf[(i*5)+7]<<16)&0xff0000); + sfid += ((buf[(i*5)+8]<<8)&0xff00); + sfid += (buf[(i*5)+9]); + index = get_csr(qcb, sfid, 0); if (index == -1) { spin_unlock_irqrestore(&qcb->qos_lock, flags); netdev_err(nic->netdev, "QoS ERROR: No SF\n"); @@ -366,12 +366,12 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) /* sub_cmd_evt == QOS_ADD || sub_cmd_evt == QOS_CHANG_DEL */ pos = 6; - SFID = ((buf[pos++]<<24)&0xff000000); - SFID += ((buf[pos++]<<16)&0xff0000); - SFID += ((buf[pos++]<<8)&0xff00); - SFID += (buf[pos++]); + sfid = ((buf[pos++]<<24)&0xff000000); + sfid += ((buf[pos++]<<16)&0xff0000); + sfid += ((buf[pos++]<<8)&0xff00); + sfid += (buf[pos++]); - index = get_csr(qcb, SFID, 1); + index = get_csr(qcb, sfid, 1); if (index == -1) { netdev_err(nic->netdev, "QoS ERROR: csr Update Error / Wrong index (%d)\n", @@ -381,10 +381,10 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) if (sub_cmd_evt == QOS_ADD) { netdev_dbg(nic->netdev, "QOS_ADD SFID = 0x%x, index=%d\n", - SFID, index); + sfid, index); spin_lock_irqsave(&qcb->qos_lock, flags); - qcb->csr[index].SFID = SFID; + qcb->csr[index].sfid = sfid; qcb->csr[index].classifier_rule_en = ((buf[pos++]<<8)&0xff00); qcb->csr[index].classifier_rule_en += buf[pos++]; if (qcb->csr[index].classifier_rule_en == 0) @@ -422,7 +422,7 @@ void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size) spin_unlock_irqrestore(&qcb->qos_lock, flags); } else if (sub_cmd_evt == QOS_CHANGE_DEL) { netdev_dbg(nic->netdev, "QOS_CHANGE_DEL SFID = 0x%x, index=%d\n", - SFID, index); + sfid, index); INIT_LIST_HEAD(&free_list); diff --git a/drivers/staging/gdm72xx/gdm_qos.h b/drivers/staging/gdm72xx/gdm_qos.h index ab03d33c3dec..8f742f320f22 100644 --- a/drivers/staging/gdm72xx/gdm_qos.h +++ b/drivers/staging/gdm72xx/gdm_qos.h @@ -33,7 +33,7 @@ struct gdm_wimax_csr_s { bool enabled; - u32 SFID; + u32 sfid; u8 qos_buf_count; u16 classifier_rule_en; u8 ip2s_lo; -- cgit From de1c4400bf0a34ae4fba96343e42b46c8c621a6e Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Mon, 30 Jun 2014 22:16:55 +0300 Subject: staging: wlags49_h2(5): remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the driver as it hasn't been cleaned up and it doesn't look like anyone is going to work on it anymore. Signed-off-by: Kristina MartÅ¡enko Cc: Henk de Groot Cc: David Kilroy Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 4 - drivers/staging/Makefile | 2 - drivers/staging/wlags49_h2/Kconfig | 11 - drivers/staging/wlags49_h2/Makefile | 53 - drivers/staging/wlags49_h2/README.ubuntu | 180 - drivers/staging/wlags49_h2/README.wlags49 | 641 ---- drivers/staging/wlags49_h2/TODO | 33 - drivers/staging/wlags49_h2/WARNING.txt | 3 - drivers/staging/wlags49_h2/ap_h2.c | 3337 ------------------ drivers/staging/wlags49_h2/ap_h25.c | 4094 ---------------------- drivers/staging/wlags49_h2/debug.h | 199 -- drivers/staging/wlags49_h2/dhf.c | 380 --- drivers/staging/wlags49_h2/dhf.h | 225 -- drivers/staging/wlags49_h2/dhfcfg.h | 158 - drivers/staging/wlags49_h2/hcf.c | 4748 -------------------------- drivers/staging/wlags49_h2/hcf.h | 394 --- drivers/staging/wlags49_h2/hcfcfg.h | 785 ----- drivers/staging/wlags49_h2/hcfdef.h | 752 ----- drivers/staging/wlags49_h2/man/wlags49.4 | 734 ---- drivers/staging/wlags49_h2/mdd.h | 1155 ------- drivers/staging/wlags49_h2/mmd.c | 250 -- drivers/staging/wlags49_h2/mmd.h | 77 - drivers/staging/wlags49_h2/sta_h2.c | 4480 ------------------------ drivers/staging/wlags49_h2/sta_h25.c | 5255 ----------------------------- drivers/staging/wlags49_h2/wl_cs.c | 441 --- drivers/staging/wlags49_h2/wl_cs.h | 89 - drivers/staging/wlags49_h2/wl_enc.c | 217 -- drivers/staging/wlags49_h2/wl_enc.h | 118 - drivers/staging/wlags49_h2/wl_if.h | 221 -- drivers/staging/wlags49_h2/wl_internal.h | 1040 ------ drivers/staging/wlags49_h2/wl_main.c | 3702 -------------------- drivers/staging/wlags49_h2/wl_main.h | 138 - drivers/staging/wlags49_h2/wl_netdev.c | 1950 ----------- drivers/staging/wlags49_h2/wl_netdev.h | 154 - drivers/staging/wlags49_h2/wl_priv.c | 1928 ----------- drivers/staging/wlags49_h2/wl_priv.h | 127 - drivers/staging/wlags49_h2/wl_profile.c | 995 ------ drivers/staging/wlags49_h2/wl_profile.h | 87 - drivers/staging/wlags49_h2/wl_util.c | 1367 -------- drivers/staging/wlags49_h2/wl_util.h | 96 - drivers/staging/wlags49_h2/wl_version.h | 146 - drivers/staging/wlags49_h2/wl_wext.c | 3794 --------------------- drivers/staging/wlags49_h2/wl_wext.h | 88 - drivers/staging/wlags49_h25/Kconfig | 11 - drivers/staging/wlags49_h25/Makefile | 52 - drivers/staging/wlags49_h25/README.txt | 30 - drivers/staging/wlags49_h25/TODO | 33 - drivers/staging/wlags49_h25/ap_h25.c | 2 - drivers/staging/wlags49_h25/debug.h | 2 - drivers/staging/wlags49_h25/dhf.c | 2 - drivers/staging/wlags49_h25/dhf.h | 2 - drivers/staging/wlags49_h25/dhfcfg.h | 2 - drivers/staging/wlags49_h25/hcf.c | 2 - drivers/staging/wlags49_h25/hcf.h | 2 - drivers/staging/wlags49_h25/hcfcfg.h | 2 - drivers/staging/wlags49_h25/hcfdef.h | 2 - drivers/staging/wlags49_h25/mdd.h | 2 - drivers/staging/wlags49_h25/mmd.c | 2 - drivers/staging/wlags49_h25/mmd.h | 2 - drivers/staging/wlags49_h25/sta_h25.c | 2 - drivers/staging/wlags49_h25/wl_cs.c | 2 - drivers/staging/wlags49_h25/wl_cs.h | 2 - drivers/staging/wlags49_h25/wl_enc.c | 2 - drivers/staging/wlags49_h25/wl_enc.h | 2 - drivers/staging/wlags49_h25/wl_if.h | 2 - drivers/staging/wlags49_h25/wl_internal.h | 2 - drivers/staging/wlags49_h25/wl_main.c | 2 - drivers/staging/wlags49_h25/wl_main.h | 2 - drivers/staging/wlags49_h25/wl_netdev.c | 2 - drivers/staging/wlags49_h25/wl_netdev.h | 2 - drivers/staging/wlags49_h25/wl_priv.c | 2 - drivers/staging/wlags49_h25/wl_priv.h | 2 - drivers/staging/wlags49_h25/wl_profile.c | 2 - drivers/staging/wlags49_h25/wl_profile.h | 2 - drivers/staging/wlags49_h25/wl_util.c | 2 - drivers/staging/wlags49_h25/wl_util.h | 2 - drivers/staging/wlags49_h25/wl_version.h | 2 - drivers/staging/wlags49_h25/wl_wext.c | 2 - drivers/staging/wlags49_h25/wl_wext.h | 2 - 79 files changed, 44838 deletions(-) delete mode 100644 drivers/staging/wlags49_h2/Kconfig delete mode 100644 drivers/staging/wlags49_h2/Makefile delete mode 100644 drivers/staging/wlags49_h2/README.ubuntu delete mode 100644 drivers/staging/wlags49_h2/README.wlags49 delete mode 100644 drivers/staging/wlags49_h2/TODO delete mode 100644 drivers/staging/wlags49_h2/WARNING.txt delete mode 100644 drivers/staging/wlags49_h2/ap_h2.c delete mode 100644 drivers/staging/wlags49_h2/ap_h25.c delete mode 100644 drivers/staging/wlags49_h2/debug.h delete mode 100644 drivers/staging/wlags49_h2/dhf.c delete mode 100644 drivers/staging/wlags49_h2/dhf.h delete mode 100644 drivers/staging/wlags49_h2/dhfcfg.h delete mode 100644 drivers/staging/wlags49_h2/hcf.c delete mode 100644 drivers/staging/wlags49_h2/hcf.h delete mode 100644 drivers/staging/wlags49_h2/hcfcfg.h delete mode 100644 drivers/staging/wlags49_h2/hcfdef.h delete mode 100644 drivers/staging/wlags49_h2/man/wlags49.4 delete mode 100644 drivers/staging/wlags49_h2/mdd.h delete mode 100644 drivers/staging/wlags49_h2/mmd.c delete mode 100644 drivers/staging/wlags49_h2/mmd.h delete mode 100644 drivers/staging/wlags49_h2/sta_h2.c delete mode 100644 drivers/staging/wlags49_h2/sta_h25.c delete mode 100644 drivers/staging/wlags49_h2/wl_cs.c delete mode 100644 drivers/staging/wlags49_h2/wl_cs.h delete mode 100644 drivers/staging/wlags49_h2/wl_enc.c delete mode 100644 drivers/staging/wlags49_h2/wl_enc.h delete mode 100644 drivers/staging/wlags49_h2/wl_if.h delete mode 100644 drivers/staging/wlags49_h2/wl_internal.h delete mode 100644 drivers/staging/wlags49_h2/wl_main.c delete mode 100644 drivers/staging/wlags49_h2/wl_main.h delete mode 100644 drivers/staging/wlags49_h2/wl_netdev.c delete mode 100644 drivers/staging/wlags49_h2/wl_netdev.h delete mode 100644 drivers/staging/wlags49_h2/wl_priv.c delete mode 100644 drivers/staging/wlags49_h2/wl_priv.h delete mode 100644 drivers/staging/wlags49_h2/wl_profile.c delete mode 100644 drivers/staging/wlags49_h2/wl_profile.h delete mode 100644 drivers/staging/wlags49_h2/wl_util.c delete mode 100644 drivers/staging/wlags49_h2/wl_util.h delete mode 100644 drivers/staging/wlags49_h2/wl_version.h delete mode 100644 drivers/staging/wlags49_h2/wl_wext.c delete mode 100644 drivers/staging/wlags49_h2/wl_wext.h delete mode 100644 drivers/staging/wlags49_h25/Kconfig delete mode 100644 drivers/staging/wlags49_h25/Makefile delete mode 100644 drivers/staging/wlags49_h25/README.txt delete mode 100644 drivers/staging/wlags49_h25/TODO delete mode 100644 drivers/staging/wlags49_h25/ap_h25.c delete mode 100644 drivers/staging/wlags49_h25/debug.h delete mode 100644 drivers/staging/wlags49_h25/dhf.c delete mode 100644 drivers/staging/wlags49_h25/dhf.h delete mode 100644 drivers/staging/wlags49_h25/dhfcfg.h delete mode 100644 drivers/staging/wlags49_h25/hcf.c delete mode 100644 drivers/staging/wlags49_h25/hcf.h delete mode 100644 drivers/staging/wlags49_h25/hcfcfg.h delete mode 100644 drivers/staging/wlags49_h25/hcfdef.h delete mode 100644 drivers/staging/wlags49_h25/mdd.h delete mode 100644 drivers/staging/wlags49_h25/mmd.c delete mode 100644 drivers/staging/wlags49_h25/mmd.h delete mode 100644 drivers/staging/wlags49_h25/sta_h25.c delete mode 100644 drivers/staging/wlags49_h25/wl_cs.c delete mode 100644 drivers/staging/wlags49_h25/wl_cs.h delete mode 100644 drivers/staging/wlags49_h25/wl_enc.c delete mode 100644 drivers/staging/wlags49_h25/wl_enc.h delete mode 100644 drivers/staging/wlags49_h25/wl_if.h delete mode 100644 drivers/staging/wlags49_h25/wl_internal.h delete mode 100644 drivers/staging/wlags49_h25/wl_main.c delete mode 100644 drivers/staging/wlags49_h25/wl_main.h delete mode 100644 drivers/staging/wlags49_h25/wl_netdev.c delete mode 100644 drivers/staging/wlags49_h25/wl_netdev.h delete mode 100644 drivers/staging/wlags49_h25/wl_priv.c delete mode 100644 drivers/staging/wlags49_h25/wl_priv.h delete mode 100644 drivers/staging/wlags49_h25/wl_profile.c delete mode 100644 drivers/staging/wlags49_h25/wl_profile.h delete mode 100644 drivers/staging/wlags49_h25/wl_util.c delete mode 100644 drivers/staging/wlags49_h25/wl_util.h delete mode 100644 drivers/staging/wlags49_h25/wl_version.h delete mode 100644 drivers/staging/wlags49_h25/wl_wext.c delete mode 100644 drivers/staging/wlags49_h25/wl_wext.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index c7e34a28c6f1..ba76ab17902b 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -74,10 +74,6 @@ source "drivers/staging/sep/Kconfig" source "drivers/staging/iio/Kconfig" -source "drivers/staging/wlags49_h2/Kconfig" - -source "drivers/staging/wlags49_h25/Kconfig" - source "drivers/staging/cxt1e1/Kconfig" source "drivers/staging/xgifb/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 8ad1689da19d..22bb98e46d36 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -31,8 +31,6 @@ obj-$(CONFIG_VT6656) += vt6656/ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ -obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ -obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/ diff --git a/drivers/staging/wlags49_h2/Kconfig b/drivers/staging/wlags49_h2/Kconfig deleted file mode 100644 index 3efcbf8afedf..000000000000 --- a/drivers/staging/wlags49_h2/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config WLAGS49_H2 - tristate "Agere Systems HERMES II Wireless PC Card Model 0110" - depends on WLAN && PCMCIA - select WIRELESS_EXT - select WEXT_SPY - select WEXT_PRIV - ---help--- - Driver for wireless cards using Agere's HERMES II chipset - which are identified with Manufacture ID: 0156,0003 - The software is a modified version of wl_lkm_722_abg.tar.gz - from the Agere Systems website, addapted for Ubuntu 9.04. diff --git a/drivers/staging/wlags49_h2/Makefile b/drivers/staging/wlags49_h2/Makefile deleted file mode 100644 index 6eeb5d1845eb..000000000000 --- a/drivers/staging/wlags49_h2/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# Makefile for wlags49_h2_cs.ko and wlags49_h25_cs.ko -# -# Default build for Hermes-II base cards (possibly identified with -# "manfid: 0x0156, 0x0003" in "pccardctl ident" output), comment -# -DHERMES25 below -# -# If you want to build for Hermes-II.5 base cards (possibly identified with -# "manfid: 0x0156, 0x0004" in "pccardctl ident" output), uncomment -# -DHERMES25 below -# -# If you want to build AP support (untested), comment out -DSTA_ONLY - -ccflags-y := -I$(KERNELDIR)/include -ccflags-y += -I$(src) \ - -DBUS_PCMCIA \ - -DUSE_WEXT \ - -DSTA_ONLY \ - -DWVLAN_49 \ -# -DHERMES25 \ -# -DDBG \ -# -DDBG_LVL=5 \ -# -DUSE_UIL \ -# -DUSE_PROFILE \ - -ifeq ($(findstring HERMES25,$(ccflags-y)),) -WLNAME := wlags49_h2_cs -$(WLNAME)-y := sta_h2.o -ifeq ($(findstring STA_ONLY,$(ccflags-y)),) -$(WLNAME)-y += ap_h2.o -endif -else -WLNAME=wlags49_h25_cs -$(WLNAME)-y := sta_h25.o -ifeq ($(findstring STA_ONLY,$(ccflags-y)),) -$(WLNAME)-y += ap_h25.o -endif -endif - - -obj-m += $(WLNAME).o - -$(WLNAME)-y += wl_profile.o \ - wl_wext.o \ - wl_priv.o \ - wl_main.o \ - wl_enc.o \ - wl_util.o \ - wl_netdev.o \ - wl_cs.o \ - mmd.o \ - hcf.o \ - dhf.o diff --git a/drivers/staging/wlags49_h2/README.ubuntu b/drivers/staging/wlags49_h2/README.ubuntu deleted file mode 100644 index bfad7dc7725f..000000000000 --- a/drivers/staging/wlags49_h2/README.ubuntu +++ /dev/null @@ -1,180 +0,0 @@ -======================================================================= -WLAN driver for cards using the HERMES II and HERMES II.5 chipset - -HERMES II Card - -PCMCIA Info: "Agere Systems" "Wireless PC Card Model 0110" - Manufacture ID: 0156,0003 - -HERMES II.5 Card - -PCMCIA Info: "Linksys" "WCF54G_Wireless-G_CompactFlash_Card" - Manufacture ID: 0156,0004 - -Based on Agere Systems Linux LKM Wireless Driver Source Code, -Version 7.22; complies with Open Source BSD License. -======================================================================= - -DESCRIPTION - -The software is a modified version of wl_lkm_722_abg.tar.gz from the -Agere Systems website, addapted for Ubuntu 9.04. - -Modified for kernel 2.6 by Henk de Groot -Based on 7.18 version by Andrey Borzenkov $Revision: 39 $ - -INSTALLATION - -Unpack in a new directory. - -Open a terminal screen. - -Change directory to the source directory - -Type command - -make - -and wait until it is finshed. Now you have build the module -wlags49_h2_cs; this module is meant for a HERMES II card. - -The driver is tested with a Thomson SpeedTouch 110 Wireless PC Card. -For the test Station mode was used with WEP. The driver is supposed -to support WAP and as accesspoint that is NOT tested. - -If you have a card using the HERMES II.5 chip you have to make -changes to the Makefile and uncomment -DHERMES25. This will build -driver wlags49_h25_cs. - -Note: You can determine the type with command "pccardctrl info" - MANIFID: 0156,0002 = HERMES - not supported by this driver - MANIFID: 0156,0003 = HERMES II (Wireless B) - MANIFID: 0156,0004 = HERMES II.5 (Wireless B/G) - -After successful compile type command - -sudo make install - -to install the module. - -Now the card should be recognized. It should be able to configure -and use the card with NetworkManager. Wpa_supplicant also works, as does -manual configuration using the iwconfig/iwlist programs. - -Note: I only tested Station mode with WEP but if I didn't break anything -WPA and AP mode should also work; note however that WPA was experimental -in the original Agere driver! - -Note: to compile as AP change the makefile and remove the line --DSTA_ONLY \ - -(or comment it, but in that case make sure to move it after all the - flags you want to use) - -CHANGES - -The HCF functions to control the card are virtually unchanged, the only -changes are meant to fix compiler warnings. The only real change is in -HCF_WAIT_WHILE which now has a udelay(2) added to give a small delay. - -The linux driver files (wl_xxxx.c) are changed in the following ways: -- Addaptations of Andrey Borzenkov applied to 7.22 source -- Alterations to avoid most HCF_ASSERTs --- Switching interrupts off and on in the HCF --- Bugfixes, things that were apparently wrong like reporting link status - change which checked a variable that was not changed in HCF anymore. --- Used on WEP but setting keys via SIOCSIWENCODEEXT was not supported --- Recovery actions added - -The major problem was the order in which calls can be made. The original -looks like a traditional UNIX driver. To call an "ioctl" function you -have to "open" the device first to get a handle and after "close" no -"ioctl" function can be called anymore. With the 2.6 driver this all -changed; the former ioctl functions are now called before "open" and -after "close", which was not expected. One of the problems was enable/ -disable of interrupts in the HCF. Interrupt handling starts at "open" -so if a former "ioctl" routine is called before "open" or after "close" -then nothing should be done with interrupt switching in the HCF. Once -this was solved most HCF_ASSERTS went away. - -The last point, recovery actions added, needs some clarification. -Starting the card works most of the time, but unfortunately not always. -At a few times recovery code was added; when the card starts to -misbehave or the communication between the HCF and the card is -out of sync and the HCF enters DEFUNCT mode everything is reset and -reinitialized. Note, hcf.c contains a lot of documentation. It takes -some time but slowly some things become clear. Also some unresolved -issues are mentioned in hcf.c, so there are still unknown bugs. - -The card problems are almost in all cases when starting up and before -the first association with an AP, once the card is in operation it -seems to stay that way; when debugging no HCF_ASSERTS appear anymore. -Note: some HCF_ASSERTS still appear, in a number of cases it is a real -error, for example at card removal the missing card is detected. - -LICENSE - -The Agere Systems license applies. This is why I include the original -README.wlags49. The instructions in that file are bogus now. I also -include the man page. Even though setting parameters on the module -does not work anymore but it provides some information about all the -settings. - -I have no personal contact with Agere, but others have. Agere -agreed to make their software available under the BSD license. -This driver is based on the 7.22 version. - -The following was mailed by Agere to Andrey Borzenkov about this: - - --- Begin Message --- - - * From: TJ - * Date: Mon, 05 Feb 2007 19:28:59 +0000 - - Hi Andrey, - - I've got some good news for you/us/the world of Hermes :) - - I got a reply from the legal representative at Agere confirming that - their source-code is BSD licensed, and I've included the contents of the - email here. - - I hope this re-assures you so that your excellent work on the drivers - can be made widely available for other hackers to work with. - - Regards, - - TJ. - - --------- - On Mon, 2007-02-05 at 13:54 -0500, Pathare, Viren M (Viren) wrote: - - - "I would like to confirm that the two drivers; Linux LKM Wireless Driver - Source Code, Version 7.18 and Linux LKM Wireless Driver Source Code, - Version 7.22 comply with Open Source BSD License. Therefore the source - code can be distributed in unmodified or modified form consistent with - the terms of the license. - - The Linux driver architecture was based on two modules, the MSF (Module - specific functions) and the HCF (Hardware Control Functions). Included - in the HCF is run-time firmware (binary format) which is downloaded into - the RAM of the Hermes 1/2/2.5 WMAC. - - This hex coded firmware is not based on any open source software and - hence it is not subject to any Open Source License. The firmware was - developed by Agere and runs on the DISC processor embedded within the - Hermes 1/2/2.5 Wireless MAC devices. - - Hope this helps. - - Sincerely, - - Viren Pathare - Intellectual Property Licensing Manager - Agere" - - - - --- End Message --- - diff --git a/drivers/staging/wlags49_h2/README.wlags49 b/drivers/staging/wlags49_h2/README.wlags49 deleted file mode 100644 index f65acd6f5f54..000000000000 --- a/drivers/staging/wlags49_h2/README.wlags49 +++ /dev/null @@ -1,641 +0,0 @@ -============================================================================== -Agere Systems Inc. July 2004 -Readme for Linux Driver Source for Wavelan Version: 7.22-abg -============================================================================== - -This text file includes update information, installation instructions, -limitations to the current version of the product, and suggestions to solve -known issues or problems. - - -TABLE OF CONTENTS. - -1. DESCRIPTION -2. SYSTEM REQUIREMENTS -3. NEW IN THIS RELEASE -4. INSTALLATION NOTES -5. TECHNICAL CONSTRAINTS -6. KNOWN ISSUES -7. TECHNICAL SUPPORT - ------------------------------------------------------------------------------- -1. DESCRIPTION - - With this package, you can build and install a Wireless driver for a - specific Linux kernel. - - The driver in this package supports the network interface cards based on: - - WL60010, a.k.a. Hermes-II - - WL60040, a.k.a. Hermes-II.5 - - Although derived from the Hermes-I/II Linux driver, this release ONLY - Supports Hermes-II/II.5 chipsets. Hermes-I is no longer supported. - - The software is distributed in a compressed source file archive: - - wl_lkm_7_22_abg.tar.gz - - Because this release supports more than one Hermes CPU and bus - architecture, a naming convention is used for the resulting binaries that - can be built from this source code. Driver binaries are named as follows: - - wlags49__.o - - where 'wlags49' denotes an Agere WaveLan Linux build, - - is: 'h2' for Hermes-II, 'h25' for Hermes-II.5 - - is: 'cs' for Card Services (PCMCIA, Compact Flash), PCI for - PCI or MiniPCI. - - For example, a driver built for Hermes-II Card Services (PCMCIA/Compact - Flash) is named wlags49_h2_cs.o, whereas a driver built for Hermes-II - MiniPCI is named wlags49_h2_pci.o. - The following software is included with this distribution: - - General information: - * README.wlags49 This file - * LICENSE.wlags49 License - * wlags49.mk Top level Makefile - * Build Script to build driver - * Install Script to install driver - - Driver source: - * wireless/ MSF source - * hcf/ HCF and F/W source - * wireless/wlags49_cs.mk Driver Makefile, PC Card - * wireless/wlags49_pci.mk Driver Makefile, PCI - * include/hcf/debug.h Driver debug support - * include/hcf/hcfcfg.h Header to configure HCF - * include/wireless/*.h Driver source headers - - Driver online manual page: - * man/wlags49.4 Driver manual page - - PCMCIA configuration update: - * etc/wlags49.conf Add-on config file - * etc/wlags49.mk config update Makefile - * etc/wlags49.patch config update patch file - - The driver is build up of 2 modules: - - a higher module called Module Specific Functions (MSF), which contains - the functions of the driver that are network driver interface and - Operating System specific. - - a lower module called Hardware Control Functions (HCF), which contains - 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 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 - files fw_h2.c and fw_h25.c are used for Hermes-II and Hermes-II.5 - respectively. The firmware images in this release are identified as: - - HII Station F/W: fw_h2.c.sta - - HII.5 Station F/W: fw_h25.c.sta - - HII AccesPoint F/W: fw_h2.c.ap - - HII.5 AccesPoint F/W: fw_h25.c.ap - To build a STA or AP mode driver, the suffix .sta or .ap must be removed. - The files as distributed by this release build STA drivers by default. - ------------------------------------------------------------------------------- -2. SYSTEM REQUIREMENTS - -2.1 Operating System - - This software can be compiled and installed with Linux kernel versions - 2.4.x. Although this driver should compile for other CPUs as well, as of - the date of this release, no CPU architectures other than x86 have been - verified. - - wl_lkm_7_22_abg is tested with the following Linux Distributions: - * Red Hat version 9.0 - * Suse version 9.0 - - If you're building for PC Card or Compact Flash, you need the Card Services - from David Hinds. - - wl_lkm_7_22_abg is tested with: - * pcmcia-cs-3.2.7.tar.gz - -2.2 Free Disk Space - - To compile the software you need to have the full set of Linux kernel - source files installed, as well as a sane build environment which includes - all tools necessary for compiling and linking code. Depending on the exact - version of the kernel, you need approximately 150 MB of free disk space. - Once compiled, the driver uses about 150-200 KB. Please note, this size is - approximate and can vary depending on which version of the driver is built. - In addition, adding debug tracing support increases this size. - ------------------------------------------------------------------------------- -3. NEW IN THIS RELEASE - -Version 7.22 abg - July 28, 2004 - ------------------------------------------------------------------------------- -4. INSTALLATION NOTES - - The driver files for the Linux driver are not "ready" for direct - installation onto any Linux computer. To build and install the driver you - need some expertise on the Linux operating system in general and the type - and version installed of the kernel installed on your computer. With this - knowledge you can use the driver source files provided to build your own - Linux driver for your specific computer and kernel. - -4.1 Before you start - - 1) Determine the type and version of the Linux kernel of your computer and - check whether it meets the system requirements listed in section 2 of this - README. - - 2) If you're building for PC Card or Compact Flash, read the Linux - PCMCIA-HOWTO by David Hinds. This document is probably provided on the - CD-ROM of your Linux distribution. You can download the latest version - from: - - http://pcmcia-cs.sourceforge.net - - Please read the section titled "Prerequisites and kernel setup" of the - PCMCIA-HOWTO. - -4.2 Build the driver for PC Card / Compact Flash - - 1) Obtain a copy of the Linux PCMCIA package from a CD-ROM of your Linux - distribution or download the latest version. - For your convenience, the Agere Systems Wireless CD-ROM contains a copy of - the PCMCIA package in sub-directory: Xtras/Linux/PCMCIA - - 2) To unpack the Linux PCMCIA package, copy it to the current working - directory and type: - % tar xzvf pcmcia-cs-x.y.z.tar.gz - % mv pcmcia-cs-x.y.z pcmcia-cs - - Note: If you use the archive supplied on the CDROM, use archive name - "pc3_2_1.tgz" instead of "pcmcia-cs-3.2.7.tar.gz". - - Note: even though PCMCIA code exists in the kernel source tree, the PCMCIA - Card Services package needs to be unpacked locally to build drivers based - on it. - - 3) Extract the wlags49 distribution archive on top of the Linux PCMCIA - package. - % cd pcmcia-cs - % tar xzvf ../wl_lkm_7_22_abg.tar.gz - - 4) To build and install the driver, follow the procedure below: - % ./Configure - - Answer the presented questions. Usually the default answers are OK and - pressing "Enter" is enough. - On newer RedHat systems, however, you should specify "/usr/src/linux-2.4" - as the Linux source directory instead of the default "/usr/src/linux". - - For more detailed information on configuration, building and installing, - see the PCMCIA-HOWTO. - - To build the default drivers, which support Hermes-II in station mode, run - the Build script: - % ./Build - - This script determines whether your system uses in-kernel PCMCIA and either - builds the full PCMCIA package or just the driver. - - Before installing the driver with the Install script, you must become - 'root': - % su - .. - % ./Install - - This script determines whether your system uses in-kernel PCMCIA and either - installs the full PCMCIA package or just the driver. - - 5) If it becomes necessary to clean the build, issue the following - commands: - % make clean - % make -C lib clean - -4.3 Build the driver for PCI - - 1) Extract the wlags49 to the current working directory. - % tar xzvf wl_lkm_7_22.tar.gz - - Note: there is no need to unpack the driver source into a PCMCIA build - directory. - - 2) To build the PCI driver: - % make -f wlags49.mk wlags49_h2_pci - or - % make -f wlags49.mk wlags49_h25_pci - - 3) Install the driver. - % insmod ./wireless/wlags49_h25.o - - 4) If it becomes necessary to clean the build. - % make -f wlags49.mk pci_clean - -4.4 Configure your Wireless PC Card - - There are 3 ways to configure the driver - - module parameters (/etc/pcmcia/config.opts) - - wireless extension (/etc/pcmcia/wireless.opts) - - Agere configuration file (/etc/agere/iwconfig-eth#) - - -4.4.1 Configure through /etc/pcmcia/config.opts - - To use this method, make sure that /etc/pcmcia/wireless.opts file is either - absent or contains blank parameter values as shown below. - - *,*,*,00:60:1D:*|*,*,*,00:02:2D:*) - INFO="" - ESSID="" - MODE="" - KEY="" - ;; - - 1) To configure the Wireless PC Card, please refer to: - * The online manual page (wlags49.4) - % man wlags49 - * The network adapter sections of the PCMCIA documentation. - % more PCMCIA-HOWTO - - 2) Use an editor to configure the module parameters: - # vi /etc/pcmcia/config.opts - - a) To connect your computer to a wireless infrastructure that includes - access points such as the AP-1000 or AP-500, you need to identify the - network name of the wireless infrastructure. - - For example if your infrastructure uses the network name "My Network", - edit the config.opts file to include the following: - - module "" opts "network_name=My\ Network" - - Notice that the space character needs to be escaped with a backslash. - - b) To connect your computer to a Residential Gateway RG-1000, you need - to know the RG ID (=network_name) and the encryption key. You can find - the RG ID on a small label on the rear of the unit. - - For example if your RG-1000 has ID 225ccf and you did not change the - encryption key yet, edit the config.opts file to include the following: - - module "" opts "network_name=\"225ccf\" key_1=\"25ccf\" - enable_encryption=Y" - - If you changed your encryption key, you should specify this key as key_1 - on the parameter line. - - c) To connect your computer to a peer-to-peer network, in an environment - without access points, the IBSS mode is recommended. - - For example to connect to a peer-to-peer network called "My Network", - enter the following in the config.opts file: - - module "" opts "create_ibss=Y network_name=My\ Network" - - d) Optionally you can also include a "Station Name" value that can be - used to indentify your computer on the wireless network. - - For example if you wish to name your computer "Wave1" when connecting it - to a wireless infrastructure, edit the config.opts file to include the - following: - - module "" opts "network_name=Ocean station_name=Wave1" - - e) To connect your computer to an Ad-Hoc workgroup of wireless - computers, enter the following in the config.opts file: - - module "" opts "port_type=3" - - Note that the "Ad-Hoc Demo Mode" is not the recommended mode for a - peer-to-peer network. The configuration of this non-interoperable mode - is only explained here for special applications (e.g. research, or - compatibility with other / previous WaveLAN/IEEE products). - - The IBSS mode described in c) is the preferred and interoperable mode - for creating a peer-to-peer network. - - 3) Use an editor to modify the network options for your adapter. - # vi /etc/pcmcia/network.opts - - The parameters need to be correct for the connected network. Check with - your system administrator for the correct network information. Refer to - the PCMCIA-HOWTO for more configuration information. - - For example: - *,*,*,*) - IF_PORT="" - BOOTP="n" - IPADDR="10.0.0.5" - NETMASK="255.255.255.0" - NETWORK="10.0.0.0" - BROADCAST="10.0.0.255" - GATEWAY="10.0.0.1" - DOMAIN="domain.org" - DNS_1="dns1.domain.org" - ;; - - RedHat and Suse do not use the network.opts to configure the driver. - Instead RedHat uses a GUI-based tool called 'neat' ('net.cfg' in older - versions) and SuSE Linux uses 'YaST'. These tools creates scripts, like - ifcfg-eth0, in the directory /etc/sysconfig/network-scripts. Using the - default GNOME menu, you can start netcfg from: Programs->System->Network - Configuration. - - 4) Restart the PCMCIA services. - # /etc/rc.d/rc.pcmcia restart - or - # /etc/rc.d/init.d/pcmcia restart - - - For a more detailed description about the various configuration options and - definitions, please consult the Wireless documentation. - -4.4.2 Configure through /etc/pcmcia/wireless.opts - - This driver has support for the "Wireless Extensions". This interface - allows the "Wireless Tools" to get statistics from the driver and allows to - change the configuration of the driver on the fly. - - The latest versions of the PCMCIA package contain scripts that use the - wireless extension to configure the driver as an alternative to the - configuration through module parameters as described in section 4.4.1. - Read the /etc/pcmcia/wireless.opts file for the theory of operation. When - the driver is configured, go to section 4.4.1 step 3 to configure the - network parameters. - - For more information, refer to the following WEB pages: - http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Linux.Wireless.Extensions.html - http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html - -4.4.3 Configure through /etc/agere/iwconfig-eth# - - In addition to using either the module options or the wireless extensions - methods to configure a wireless device, this version of the software also - supports an Agere specific implementation. This was done because: - * Module options configures multiple devices the same. - * Wireless extensions parameters do not cover all of the available options - in the driver. - - For each wireless ethernet device (identified by eth, where n is a - positive integer), a file /etc/agere/iwconfig-eth can be created which - contains configuration information for a wireless device. For example, the - file /etc/agere/iwconfig-eth1 is the config file for eth1. This file should - contain Key/Value pairs in the format: - - = - - where is the parameter to configure and is the value to - assign it. For example, if the config file /etc/agere/iwconfig-eth1 - described above contains the following: - - DesiredSSID=some_network - EnableEncryption=Y - Key1=net01 - TxKey=1 - - this configures eth1 to associate to the ESSID 'some_network' with - encryption on, where the the first encryption key is 'net01' and the key to - use for encryption is Key 1. - - Note that this only works on Agere hardware which uses this driver. For - other wireless drivers, or non-wireless devices, this file can be present, - but has no effect. - - Please refer to the man page for more information on this configuration - file and the parameters that can be set. - - -4.5 Configuring your Wireless PCI card - - Note that the above method of configuring the card using - /etc/pcmcia/config.opts is only valid for PCMCIA/CF cards. For [mini]PCI - and CardBus cards, refer to your system's documentation on modules.conf to - load the driver with the proper options for a given wireless ethernet - interface. In addition, network configuration tools like 'netcfg', 'neat', - or 'YaST' (see Section 4.4.1, Step 3) can be used to configure the miniPCI - card. Lastly, the Agere configuration file described in Section 4.4.3 may - also be used for [mini]PCI and CardBus devices. - -4.6 Troubleshooting - - When the Wireless PC Card is inserted, the card manager emit beeps in - different tones to indicate success or failure of particular configuration - steps. - a) Two high beeps - - The card was identified and configured successfully. - b) One high beep followed by a low beep - - The card was identified, but could not be configured. - - Examine the system log (dmesg) for PCMCIA error or warning messages. - c) One low beep - - The card could not be identified. - - Execute "cardctl ident" to display the adapter PnP information. - Verify the PnP information matches an entry in the PCMCIA - configuration file (/etc/pcmcia/config). - - Examine the system log (dmesg) for PCMCIA error or warning messages. - - The Wireless PC Card has two LEDs that indicate the state of the adapter - and network. - * Power LED (toward the middle of the adapter) - - This LED indicates power has been applied, and the card is - functional. In normal operation mode with Card Power Management - disabled, it is steady-on. With Card Power Management enabled, it - blinks rapidly (several times per second). - * Transmit/Receive LED (closer to the edge of the adapter) - - This LED flashes when it detects transmit or receive packets. - - * Both LEDs blink at the same time every 10 seconds. - - The adapter was unable to make contact with the named wireless - network. Verify the network_name, in the config.opts file matches the - network name of the access point. - * LEDs indicate normal operation with the Power LED - steady-on or blinking rapidly and Transmit/Receive LED flashing, but no - traffic. - - If the network is operating in normal mode (ie. port_type = 0 or not - specified), and a network_name has been specified, verify the - workstation network parameters (ifconfig, route, etc.) are correct - for the wireless network. - - If the network is operating in Ad-Hoc (peer-to-peer) mode (ie. - port_type = 3), the adapter needs another workstation/adapter to - communicate with. Verify the network parameters on both of the - workstations (ifconfig, route, etc.) are correct. - - Refer to the online manual page for additional configuration, feature and - support information. - % man wlags49 - or - % man 4 wlags49 - or - % nroff -man wlags49.4 | more - -4.7 Identifying the software - - This section explains how to identify the version of this software once it - is unpacked or installed. - - The Linux Driver Source/Library distribution consist of two main - components, the driver source and the HCF module. - - * To quickly identify the version of the source, type: - % grep DRV.*VERSION include/wireless/wl_version.h - #define DRV_MAJOR_VERSION 7 - #define DRV_MINOR_VERSION 22 - - * To identify the revision of the HCF library contained in the driver, - type: - % grep HCF.Revision hcf/hcf.c - #define HCF_VERSION TEXT( "HCF$Revision: 1.8 $" ) - - To identify a compiled wlags49 driver, go to the directory where the driver - is located. Card Services drivers (wlags49_h2_cs.o and wlags49_h25_cs.o) - are located in: - /lib/modules//pcmcia - - PCI drivers (wlags49_h2.o) are located in: - /lib/modules//kernel/drivers/net - - * To retrieve the version of the source used to compile the driver, type: - % strings .o | grep Agere - v7.22-abg-Beta for PCMCIA - v7.22-abg-Beta for PCI - - * Likewise, to retrieve the revision of the HCF used to compile the driver, - type: - % strings .o | grep Revision - HCF$Revision: 5.15 - - At startup the wlags49 driver reports its version in the system log file - (/var/log/messages). - ------------------------------------------------------------------------------- -5. TECHNICAL CONSTRAINTS - - At the time of release of this software, the following constraints are - identified: - -5.1 Using the ISA adapter - - Description: To allow operation in desktop computers Agere also provides an - optional ISA bus to PC Card adapter (also referred to as "swapbox"). - - This ISA Adapter can be configured for two different I/O Address values: - * 3E2 (factory-set default) - * 3E0 - - Impact: By default the i82365 module of the Linux pcmcia package only - probes at 3E0. - - Actions: - 1) Read the manual page on the probing of the i82365 module, by typing the - command: - man i82365 - - 2) Apply one of the two following options: - a) Change the I/O address strapping of the ISA adapter by replacing the - jumper on the ISA adapter. The correct jumper setting is pictured in - the electronic "Wireless ISA Adapter, Getting Started Guide" provided - on the Wireless Software CD-ROM. This guide is provided in Adobe's - Acrobat PDF format. - - b) Alternatively, you can load the i82365 module with the - "extra_sockets" parameter set to 1. - - On a RedHat 5.x thru 7.x, system, put this in the file - "/etc/sysconfig/pcmcia": - PCMCIA=yes - PCIC=i82365 - PCIC_OPTS="extra_sockets=1" - CORE_OPTS= - CARDMGR_OPTS= - - For other Linux distributions, you are advised to consult the - "PCMCIA-HOWTO" notes for information about changing the I/O Address - probing. - -5.2 Using the PCI Adapter - - Description: To allow operation in desktop computers Agere also provides an - optional PCI bus to PC Card adapter (also referred to as "swapbox"). - - For correct interrupt assignment, the system should support PCIBIOS 2.2. - It is recommended to use PCMCIA package version 3.2.7 or higher. - - The default configuration of the interrupt routing method of the PCI - Adapter's TI CardBus Controller is incorrect. - - Actions: - 1) Read the manual page on the "Options specific for TI CardBus - Controllers" of the i82365 module, by typing the command: - man i82365 - - 2) Load the i82365 module with the "irq_mode" parameter set to 0. - On a RedHat 5.x thru 7.x system, put this in the file - "/etc/sysconfig/pcmcia": - PCMCIA=yes - PCIC=i82365 - PCIC_OPTS="irq_mode=0" - CORE_OPTS= - CARDMGR_OPTS= - - For the location of the PCMCIA scripts on other Linux distributions, you - are advised to consult the "PCMCIA-HOWTO", "Notes about specific Linux - distributions". - ------------------------------------------------------------------------------- -6. KNOWN ISSUES - - This is the current list of known issues for this release, and will be - addressed in the near future: - - 1. This driver release contains a version of Hermes-II.5 firmware which - REQUIRES calibrated cards. If there is no calibration data present in the - PDA of the hardware, the firmware does not operate. - - 2. WDS is not yet supported. - - 3. DMA is not yet supported. - - 4. WPA is not yet supported. - - 5. 32-bits I/O is not yet supported. - - 6. The current Build script also builds the PCI drivers. - - 7. The current Install script also copies the PCI drivers to the lib - directory. - - 8. If F/W files are required from outside this release, the entry points - inside these F/W files have to be renamed from "ap" and "station" to - "fw_image" and they have to be renamed to fw_h2.c and fw_h25.c for - Hermes-II and Hermes-II.5. - ------------------------------------------------------------------------------- -7. TECHNICAL SUPPORT - -7.1 Finding Information - - On the Agere Systems Web Site you can find the most recent device drivers, - software updates and user documentation. - - World Wide Web: http://www.agere.com - -7.2 Contact Technical Support - - If you encounter problems when installing or using this product, or would - like information about our other "Wireless" products, please contact your - local Authorized "Wireless" Reseller or Agere Systems sales office. - - Addresses and telephone numbers of the Agere Systems sales offices are - listed on our Agere Systems web site. - - When contacting Technical Support, please use the Problem Report Form and - send it to us by Fax or E-Mail. The Problem Report Form 'REPORT.TXT' - (Plain text format) is included on the disk. Alternatively, you can - download the Problem Report Form from the Agere Systems web site. - - Include Product Name, Serial Number and software version number with each - request to help the Support Group helping you. - -============================================================================== - END OF FILE diff --git a/drivers/staging/wlags49_h2/TODO b/drivers/staging/wlags49_h2/TODO deleted file mode 100644 index f1a45611b236..000000000000 --- a/drivers/staging/wlags49_h2/TODO +++ /dev/null @@ -1,33 +0,0 @@ -First of all, the best thing would be that this driver becomes obsolete by -adding support for Hermes II and Hermes II.5 cards to the existing orinoco -driver. The orinoco driver currently only supports Hermes I based cards. -Since this will not happen by magic and has not happened until now this -driver provides a stop-gap solution for these type of cards. - -Having said that, the following wishlist comes to mind to make the driver -suitable as fully supported kernel driver. Feel free to expand/enhance the -list. - -TODO: - - verify against a Hermes II.5 card - - verify with WPA encryption (both with H2 and H2.5 cards) - - sometimes the card does not initialize correctly, retry mechanisms - are built in to catch most cases but not all - - once the driver runs it is very stable, but I have the impression - that some of the critical sections take some time. - - the driver is split into a Hermes II and a Hermes II.5 part, it - would be nice to handle both with one module instead of two - - review by the wireless developer community - - verify the code against the coding standards for a proper linux - driver - - resolve license issues (?) - -DONE: - - verified against a Hermes II card (Thomson Speedtouch 110 PCMCIA - card) - - verified with WEP encryption - -Please send any patches or complaints about this driver to Greg -Kroah-Hartman and Cc: Henk de Groot -Don't bother the upstream wireless kernel developers about it, they -want nothing to do with it. diff --git a/drivers/staging/wlags49_h2/WARNING.txt b/drivers/staging/wlags49_h2/WARNING.txt deleted file mode 100644 index 5d12973ba19c..000000000000 --- a/drivers/staging/wlags49_h2/WARNING.txt +++ /dev/null @@ -1,3 +0,0 @@ -These sources are shared with the wlags49_h25 driver. Some files are even -exclusively used by that driver. Do not delete them here without looking -at that other driver. diff --git a/drivers/staging/wlags49_h2/ap_h2.c b/drivers/staging/wlags49_h2/ap_h2.c deleted file mode 100644 index 3a08d421c735..000000000000 --- a/drivers/staging/wlags49_h2/ap_h2.c +++ /dev/null @@ -1,3337 +0,0 @@ -/* - * File: ap_h24.236 - * - * Abstract: This file contains memory image 'fw_image'. - * - * Contents: Total size of the memory image: 51010 bytes. - * Total number of blocks: 4 blocks. - * Block 1 : load address 00000060, 326 bytes. - * Block 2 : load address 00000C16, 6424 bytes. - * Block 3 : load address 001E252E, 444 bytes. - * Block 4 : load address 001F4000, 43816 bytes. - * - * Identity: component id: 32 (variant 2) version 2.36 - * - * Compatibility: - * supplying interface 8 (variant 2) : 2 - 4 - * acting on interface 1 (variant 4) : 6 - 7 - * acting on interface 1 (variant 5) : 6 - 7 - * acting on interface 1 (variant 6) : 6 - 7 - * acting on interface 2 (variant 2) : 1 - 2 - * - * Generated: by g:\fw\fupu3.exe version 4.26 - * - * Commandline: g:\fw\fupu3.exe /f=4 /n=fw_image /i=t2023600.hex - */ - - -#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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0D, 0x00, 0x00, - 0x3A, 0x0C, 0x00, 0x00, 0x3A, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xEA, 0x00, 0x00, 0xFF, 0x07, 0x02, 0x00, 0x64, 0x00, 0x64, 0x00, 0x10, 0x27, 0x10, 0x27, - 0x14, 0x00, 0xD0, 0x07, 0xD0, 0x07, 0x10, 0x27, 0x2F, 0x00, 0x32, 0x00, 0x32, 0x00, 0x05, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x10, 0x27, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x13, 0x00, 0x0A, 0x00, - 0x07, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x09, 0x2B, 0x09, 0x2B, 0x09, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x14, 0x01, 0x00, 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_1_data */ - -static const hcf_8 fw_image_2_data[] = { - 0x9B, 0xA7, 0x00, 0x0A, 0x10, 0x01, 0x68, 0xA4, 0xB0, 0x01, 0x84, 0x01, 0x30, 0x33, 0x31, 0x33, - 0x44, 0x44, 0x30, 0x33, 0x31, 0x33, 0x30, 0x33, 0x31, 0x33, 0x32, 0x33, 0x32, 0x33, 0x90, 0x00, - 0x78, 0x04, 0xAE, 0xE4, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC6, 0x84, 0xF8, 0x99, 0xEE, - 0x8D, 0xF6, 0x0D, 0xFF, 0xBD, 0xD6, 0xB1, 0xDE, 0x54, 0x91, 0x50, 0x60, 0x03, 0x02, 0xA9, 0xCE, - 0x7D, 0x56, 0x19, 0xE7, 0x62, 0xB5, 0xE6, 0x4D, 0x9A, 0xEC, 0x45, 0x8F, 0x9D, 0x1F, 0x40, 0x89, - 0x87, 0xFA, 0x15, 0xEF, 0xEB, 0xB2, 0xC9, 0x8E, 0x0B, 0xFB, 0xEC, 0x41, 0x67, 0xB3, 0xFD, 0x5F, - 0xEA, 0x45, 0xBF, 0x23, 0xF7, 0x53, 0x96, 0xE4, 0x5B, 0x9B, 0xC2, 0x75, 0x1C, 0xE1, 0xAE, 0x3D, - 0x6A, 0x4C, 0x5A, 0x6C, 0x41, 0x7E, 0x02, 0xF5, 0x4F, 0x83, 0x5C, 0x68, 0xF4, 0x51, 0x34, 0xD1, - 0x08, 0xF9, 0x93, 0xE2, 0x73, 0xAB, 0x53, 0x62, 0x3F, 0x2A, 0x0C, 0x08, 0x52, 0x95, 0x65, 0x46, - 0x5E, 0x9D, 0x28, 0x30, 0xA1, 0x37, 0x0F, 0x0A, 0xB5, 0x2F, 0x09, 0x0E, 0x36, 0x24, 0x9B, 0x1B, - 0x3D, 0xDF, 0x26, 0xCD, 0x69, 0x4E, 0xCD, 0x7F, 0x9F, 0xEA, 0x1B, 0x12, 0x9E, 0x1D, 0x74, 0x58, - 0x2E, 0x34, 0x2D, 0x36, 0xB2, 0xDC, 0xEE, 0xB4, 0xFB, 0x5B, 0xF6, 0xA4, 0x4D, 0x76, 0x61, 0xB7, - 0xCE, 0x7D, 0x7B, 0x52, 0x3E, 0xDD, 0x71, 0x5E, 0x97, 0x13, 0xF5, 0xA6, 0x68, 0xB9, 0x00, 0x00, - 0x2C, 0xC1, 0x60, 0x40, 0x1F, 0xE3, 0xC8, 0x79, 0xED, 0xB6, 0xBE, 0xD4, 0x46, 0x8D, 0xD9, 0x67, - 0x4B, 0x72, 0xDE, 0x94, 0xD4, 0x98, 0xE8, 0xB0, 0x4A, 0x85, 0x6B, 0xBB, 0x2A, 0xC5, 0xE5, 0x4F, - 0x16, 0xED, 0xC5, 0x86, 0xD7, 0x9A, 0x55, 0x66, 0x94, 0x11, 0xCF, 0x8A, 0x10, 0xE9, 0x06, 0x04, - 0x81, 0xFE, 0xF0, 0xA0, 0x44, 0x78, 0xBA, 0x25, 0xE3, 0x4B, 0xF3, 0xA2, 0xFE, 0x5D, 0xC0, 0x80, - 0x8A, 0x05, 0xAD, 0x3F, 0xBC, 0x21, 0x48, 0x70, 0x04, 0xF1, 0xDF, 0x63, 0xC1, 0x77, 0x75, 0xAF, - 0x63, 0x42, 0x30, 0x20, 0x1A, 0xE5, 0x0E, 0xFD, 0x6D, 0xBF, 0x4C, 0x81, 0x14, 0x18, 0x35, 0x26, - 0x2F, 0xC3, 0xE1, 0xBE, 0xA2, 0x35, 0xCC, 0x88, 0x39, 0x2E, 0x57, 0x93, 0xF2, 0x55, 0x82, 0xFC, - 0x47, 0x7A, 0xAC, 0xC8, 0xE7, 0xBA, 0x2B, 0x32, 0x95, 0xE6, 0xA0, 0xC0, 0x98, 0x19, 0xD1, 0x9E, - 0x7F, 0xA3, 0x66, 0x44, 0x7E, 0x54, 0xAB, 0x3B, 0x83, 0x0B, 0xCA, 0x8C, 0x29, 0xC7, 0xD3, 0x6B, - 0x3C, 0x28, 0x79, 0xA7, 0xE2, 0xBC, 0x1D, 0x16, 0x76, 0xAD, 0x3B, 0xDB, 0x56, 0x64, 0x4E, 0x74, - 0x1E, 0x14, 0xDB, 0x92, 0x0A, 0x0C, 0x6C, 0x48, 0xE4, 0xB8, 0x5D, 0x9F, 0x6E, 0xBD, 0xEF, 0x43, - 0xA6, 0xC4, 0xA8, 0x39, 0xA4, 0x31, 0x37, 0xD3, 0x8B, 0xF2, 0x32, 0xD5, 0x43, 0x8B, 0x59, 0x6E, - 0xB7, 0xDA, 0x8C, 0x01, 0x64, 0xB1, 0xD2, 0x9C, 0xE0, 0x49, 0xB4, 0xD8, 0xFA, 0xAC, 0x07, 0xF3, - 0x25, 0xCF, 0xAF, 0xCA, 0x8E, 0xF4, 0xE9, 0x47, 0x18, 0x10, 0xD5, 0x6F, 0x88, 0xF0, 0x6F, 0x4A, - 0x72, 0x5C, 0x24, 0x38, 0xF1, 0x57, 0xC7, 0x73, 0x51, 0x97, 0x23, 0xCB, 0x7C, 0xA1, 0x9C, 0xE8, - 0x21, 0x3E, 0xDD, 0x96, 0xDC, 0x61, 0x86, 0x0D, 0x85, 0x0F, 0x90, 0xE0, 0x42, 0x7C, 0xC4, 0x71, - 0xAA, 0xCC, 0xD8, 0x90, 0x05, 0x06, 0x01, 0xF7, 0x12, 0x1C, 0xA3, 0xC2, 0x5F, 0x6A, 0xF9, 0xAE, - 0xD0, 0x69, 0x91, 0x17, 0x58, 0x99, 0x27, 0x3A, 0xB9, 0x27, 0x38, 0xD9, 0x13, 0xEB, 0xB3, 0x2B, - 0x33, 0x22, 0xBB, 0xD2, 0x70, 0xA9, 0x89, 0x07, 0xA7, 0x33, 0xB6, 0x2D, 0x22, 0x3C, 0x92, 0x15, - 0x20, 0xC9, 0x49, 0x87, 0xFF, 0xAA, 0x78, 0x50, 0x7A, 0xA5, 0x8F, 0x03, 0xF8, 0x59, 0x80, 0x09, - 0x17, 0x1A, 0xDA, 0x65, 0x31, 0xD7, 0xC6, 0x84, 0xB8, 0xD0, 0xC3, 0x82, 0xB0, 0x29, 0x77, 0x5A, - 0x11, 0x1E, 0xCB, 0x7B, 0xFC, 0xA8, 0xD6, 0x6D, 0x3A, 0x2C, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, - 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3A, 0x00, 0x3B, - 0x00, 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x3F, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x02, 0x14, - 0x05, 0x32, 0x0B, 0x37, 0x08, 0x50, 0x0B, 0x6E, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x3F, 0x00, - 0x0C, 0x00, 0x30, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x02, 0x00, 0x04, 0x00, - 0x0A, 0x00, 0x0B, 0x00, 0x10, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x63, 0x00, 0x20, 0x00, 0x63, 0x00, 0x63, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x10, - 0x9E, 0x10, 0x56, 0x10, 0x98, 0x10, 0x5C, 0x10, 0x92, 0x10, 0x62, 0x10, 0x8C, 0x10, 0x68, 0x10, - 0x86, 0x10, 0x6E, 0x10, 0x80, 0x10, 0x74, 0x10, 0x7A, 0x10, 0x07, 0x01, 0x00, 0x00, 0x0A, 0x22, - 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x0A, 0x2A, - 0x00, 0x04, 0x0A, 0x01, 0x00, 0x00, 0x0A, 0x2E, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x00, 0x10, 0x24, - 0x04, 0x04, 0x0C, 0x01, 0x00, 0x00, 0x10, 0x28, 0x04, 0x04, 0x0D, 0x01, 0x00, 0x00, 0x10, 0x2C, - 0x04, 0x04, 0x0E, 0x01, 0x00, 0x00, 0x10, 0x30, 0x04, 0x04, 0x0F, 0x01, 0x00, 0x00, 0x16, 0x34, - 0x08, 0x04, 0x10, 0x01, 0x00, 0x00, 0x16, 0x38, 0x08, 0x04, 0x11, 0x01, 0x00, 0x00, 0x16, 0x3C, - 0x08, 0x04, 0x12, 0x01, 0x00, 0x00, 0x16, 0x40, 0x08, 0x04, 0x13, 0x01, 0x00, 0x00, 0x17, 0x64, - 0x0C, 0x0B, 0x14, 0x01, 0x00, 0x00, 0x17, 0x68, 0x0C, 0x0B, 0x15, 0x01, 0x00, 0x00, 0x17, 0x6C, - 0x0C, 0x0B, 0x16, 0x01, 0x00, 0x00, 0x17, 0x70, 0x0C, 0x0B, 0x17, 0x01, 0x00, 0x00, 0x17, 0x74, - 0x0C, 0x0B, 0x18, 0x01, 0x00, 0x00, 0x17, 0x78, 0x0C, 0x0B, 0x19, 0x01, 0x00, 0x00, 0x17, 0x7C, - 0x0C, 0x0B, 0x1A, 0x01, 0x00, 0x00, 0x17, 0x80, 0x0C, 0x0B, 0x1B, 0x01, 0x00, 0x00, 0x17, 0x84, - 0x0C, 0x0B, 0x1C, 0x01, 0x00, 0x00, 0x17, 0x88, 0x0C, 0x0B, 0x1D, 0x01, 0x00, 0x00, 0x17, 0x8C, - 0x0C, 0x0B, 0x1E, 0x01, 0x00, 0x00, 0x1D, 0x95, 0x17, 0x04, 0x1F, 0x01, 0x00, 0x00, 0x1D, 0x99, - 0x17, 0x04, 0x20, 0x01, 0x00, 0x00, 0x1D, 0x9D, 0x17, 0x04, 0x21, 0x01, 0x00, 0x00, 0x1D, 0xA1, - 0x17, 0x04, 0x22, 0x01, 0x00, 0x00, 0x0E, 0xA5, 0x00, 0x00, 0xC0, 0x10, 0xE0, 0x10, 0x00, 0x11, - 0x20, 0x11, 0x78, 0x11, 0xC8, 0x10, 0xE8, 0x10, 0x08, 0x11, 0x28, 0x11, 0x80, 0x11, 0xD0, 0x10, - 0xF0, 0x10, 0x10, 0x11, 0x30, 0x11, 0x88, 0x11, 0xD8, 0x10, 0xF8, 0x10, 0x18, 0x11, 0x38, 0x11, - 0x90, 0x11, 0x40, 0x11, 0x48, 0x11, 0x50, 0x11, 0x58, 0x11, 0x60, 0x11, 0x68, 0x11, 0x70, 0x11, - 0x98, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xEB, 0xBA, 0xEB, - 0xDF, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, - 0x57, 0xEB, 0x90, 0xF1, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0xD6, 0xED, - 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, - 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x2F, 0xEE, - 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, - 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0xA4, 0xED, 0xBE, 0xED, - 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x57, 0xEB, 0x7F, 0xF4, 0x19, 0xEC, - 0x2C, 0xEC, 0xDC, 0xEC, 0xE0, 0xEC, 0x57, 0xEB, 0x57, 0xEB, 0x8F, 0xED, 0x84, 0xE3, 0x59, 0xE3, - 0xD7, 0xE3, 0x28, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xEB, 0xF6, 0xEB, 0x72, 0xF0, 0x72, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, 0x89, 0xEE, 0x45, 0xF0, 0x5A, 0x00, 0x02, 0x00, 0xF9, 0xFF, - 0x89, 0xEE, 0x9F, 0xEE, 0xCC, 0x00, 0x02, 0x00, 0xF7, 0xFF, 0x89, 0xEE, 0x9F, 0xEE, 0xB6, 0x1F, - 0x06, 0x00, 0xF0, 0xFF, 0x89, 0xEE, 0x73, 0xEE, 0x00, 0x00, 0x00, 0x02, 0xF6, 0xFF, 0x89, 0xEE, - 0x9F, 0xEE, 0x6C, 0x00, 0x02, 0x00, 0xF4, 0xFF, 0x89, 0xEE, 0x9F, 0xEE, 0x6A, 0x01, 0x02, 0x00, - 0xF5, 0xFF, 0x89, 0xEE, 0x4E, 0xF0, 0xA8, 0x1F, 0x02, 0x00, 0xE0, 0xFF, 0x89, 0xEE, 0x9F, 0xEE, - 0xEE, 0x21, 0x02, 0x00, 0xE1, 0xFF, 0x89, 0xEE, 0x9F, 0xEE, 0xF0, 0x21, 0x02, 0x00, 0xE2, 0xFF, - 0x89, 0xEE, 0x9F, 0xEE, 0xF2, 0x21, 0x02, 0x00, 0xE3, 0xFF, 0x89, 0xEE, 0x9F, 0xEE, 0xEA, 0x21, - 0x02, 0x00, 0x03, 0xFC, 0x89, 0xEE, 0xE5, 0xEF, 0x7C, 0x21, 0x02, 0x00, 0x04, 0xFC, 0x89, 0xEE, - 0x99, 0xEE, 0xBE, 0x1F, 0x22, 0x00, 0x06, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0xA6, 0x1F, 0x02, 0x00, - 0x07, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x02, 0x20, 0x02, 0x00, 0x0E, 0xFC, 0x89, 0xEE, 0xF7, 0xEF, - 0x0C, 0x20, 0x22, 0x00, 0xB1, 0xFC, 0x89, 0xEE, 0x58, 0xF2, 0x2C, 0x21, 0x02, 0x00, 0x20, 0xFC, - 0x89, 0xEE, 0x9F, 0xEE, 0x32, 0x20, 0x02, 0x00, 0x25, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x3C, 0x20, - 0x02, 0x00, 0x26, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x3E, 0x20, 0x02, 0x00, 0x27, 0xFC, 0x89, 0xEE, - 0x9F, 0xEE, 0x40, 0x20, 0x02, 0x00, 0xB2, 0xFC, 0x89, 0xEE, 0x99, 0xEE, 0x50, 0x21, 0x22, 0x00, - 0xC1, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x98, 0x21, 0x20, 0x00, 0xB0, 0xFC, 0x69, 0xEE, 0x5D, 0xF2, - 0x00, 0x00, 0x00, 0x00, 0xC4, 0xFC, 0x69, 0xEE, 0x68, 0xF0, 0x00, 0x00, 0x08, 0x00, 0xC8, 0xFC, - 0x69, 0xEE, 0x63, 0xF0, 0x00, 0x00, 0x08, 0x00, 0xB4, 0xFC, 0x69, 0xEE, 0x9B, 0xF2, 0x00, 0x00, - 0x00, 0x00, 0xB6, 0xFC, 0x69, 0xEE, 0x4E, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xFC, 0x69, 0xEE, - 0x90, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFC, 0x69, 0xEE, 0xED, 0xF3, 0x00, 0x00, 0x00, 0x00, - 0xB5, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0xE6, 0x21, 0x02, 0x00, 0xB9, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, - 0xE8, 0x21, 0x02, 0x00, 0x90, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xEC, 0x21, 0x02, 0x00, 0x23, 0xFC, - 0x89, 0xEE, 0x9F, 0xEE, 0x38, 0x20, 0x02, 0x00, 0x29, 0xFC, 0x48, 0xEF, 0xF5, 0xEE, 0x00, 0x00, - 0x00, 0x00, 0xC2, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x74, 0x21, 0x02, 0x00, 0x32, 0xFC, 0x89, 0xEE, - 0x9F, 0xEE, 0x60, 0x01, 0x02, 0x00, 0x33, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x62, 0x01, 0x02, 0x00, - 0x10, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0xAE, 0x1F, 0x02, 0x00, 0x11, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, - 0x46, 0x20, 0x06, 0x00, 0x12, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x4C, 0x20, 0x06, 0x00, 0x13, 0xFC, - 0x89, 0xEE, 0x9F, 0xEE, 0x52, 0x20, 0x06, 0x00, 0x14, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x58, 0x20, - 0x06, 0x00, 0x15, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x5E, 0x20, 0x06, 0x00, 0x16, 0xFC, 0x89, 0xEE, - 0x9F, 0xEE, 0x64, 0x20, 0x06, 0x00, 0x17, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x2E, 0x20, 0x02, 0x00, - 0x83, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x6E, 0x01, 0x02, 0x00, 0x97, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, - 0x6C, 0x01, 0x02, 0x00, 0x98, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE4, 0x00, 0x02, 0x00, 0x99, 0xFC, - 0x31, 0xF0, 0x1F, 0xF0, 0xE4, 0x02, 0x02, 0x00, 0x9A, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE4, 0x04, - 0x02, 0x00, 0x9B, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE4, 0x06, 0x02, 0x00, 0x9C, 0xFC, 0x31, 0xF0, - 0x1F, 0xF0, 0xE4, 0x08, 0x02, 0x00, 0x9D, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE4, 0x0A, 0x02, 0x00, - 0x18, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x30, 0x20, 0x02, 0x00, 0x22, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, - 0x36, 0x20, 0x02, 0x00, 0x24, 0xFC, 0x89, 0xEE, 0x9F, 0xEE, 0x3A, 0x20, 0x02, 0x00, 0xC0, 0xFC, - 0x69, 0xEE, 0x61, 0xF0, 0x00, 0x00, 0x06, 0x00, 0x9E, 0xFC, 0x89, 0xEE, 0x17, 0xF0, 0x70, 0x01, - 0x02, 0x00, 0x9F, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE6, 0x00, 0x02, 0x00, 0xA0, 0xFC, 0x31, 0xF0, - 0x1F, 0xF0, 0xE6, 0x02, 0x02, 0x00, 0xA1, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE6, 0x04, 0x02, 0x00, - 0xA2, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE6, 0x06, 0x02, 0x00, 0xA3, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, - 0xE6, 0x08, 0x02, 0x00, 0xA4, 0xFC, 0x31, 0xF0, 0x1F, 0xF0, 0xE6, 0x0A, 0x02, 0x00, 0x20, 0xFD, - 0xBA, 0xEE, 0x73, 0xEE, 0x53, 0xF5, 0x08, 0x00, 0x21, 0xFD, 0xBA, 0xEE, 0x73, 0xEE, 0x57, 0xF5, - 0x0A, 0x00, 0x22, 0xFD, 0xBA, 0xEE, 0x73, 0xEE, 0x5C, 0xF5, 0x16, 0x00, 0x23, 0xFD, 0xBA, 0xEE, - 0x73, 0xEE, 0x67, 0xF5, 0x0A, 0x00, 0x10, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0x34, 0x01, 0x02, 0x00, - 0x45, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xCC, 0x00, 0x02, 0x00, 0x47, 0xFD, 0x89, 0xEE, 0x73, 0xEE, - 0x38, 0x01, 0x02, 0x00, 0x48, 0xFD, 0x9E, 0xEF, 0x73, 0xEE, 0x60, 0x01, 0x02, 0x00, 0x49, 0xFD, - 0x9E, 0xEF, 0x73, 0xEE, 0x62, 0x01, 0x02, 0x00, 0x4A, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0x58, 0x01, - 0x02, 0x00, 0x4B, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0x5A, 0x01, 0x02, 0x00, 0x4D, 0xFD, 0xBA, 0xEE, - 0x73, 0xEE, 0x6C, 0xF5, 0x04, 0x00, 0x4F, 0xFD, 0xB2, 0xEF, 0x73, 0xEE, 0x80, 0x21, 0x02, 0x00, - 0xC0, 0xFD, 0xBA, 0xEE, 0x73, 0xEE, 0x6E, 0xF5, 0x02, 0x00, 0xC2, 0xFD, 0xA8, 0xEF, 0x73, 0xEE, - 0x00, 0x00, 0x02, 0x00, 0xC3, 0xFD, 0xBA, 0xEE, 0x73, 0xEE, 0x6F, 0xF5, 0x02, 0x00, 0x40, 0xFD, - 0xB2, 0xEE, 0x73, 0xEE, 0x78, 0x01, 0x02, 0x00, 0x24, 0xFD, 0xD8, 0xEF, 0x73, 0xEE, 0x00, 0x00, - 0x02, 0x00, 0x91, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0x86, 0x1B, 0x02, 0x00, 0x93, 0xFD, 0x89, 0xEE, - 0x73, 0xEE, 0x8C, 0x1B, 0x02, 0x00, 0xC1, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xCA, 0x00, 0x02, 0x00, - 0xC6, 0xFD, 0xE7, 0xEE, 0x73, 0xEE, 0x8E, 0x21, 0x0A, 0x00, 0x89, 0xFD, 0x5F, 0xEF, 0x73, 0xEE, - 0x00, 0x00, 0x00, 0x00, 0x8A, 0xFD, 0xD7, 0xEE, 0x73, 0xEE, 0xC0, 0x21, 0x24, 0x00, 0x46, 0xFD, - 0x89, 0xEE, 0x73, 0xEE, 0x7A, 0x01, 0x06, 0x00, 0x86, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xB6, 0x1F, - 0x06, 0x00, 0x87, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xB8, 0x21, 0x06, 0x00, 0x8B, 0xFD, 0x7A, 0xF3, - 0x73, 0xEE, 0x00, 0x00, 0x12, 0x00, 0x8E, 0xFD, 0x89, 0xEE, 0x73, 0xEE, 0xB8, 0x12, 0x02, 0x00, - 0x80, 0xFD, 0xBC, 0xEF, 0x73, 0xEE, 0x1C, 0x00, 0x02, 0x00, 0x81, 0xFD, 0xBC, 0xEF, 0x73, 0xEE, - 0x1C, 0x02, 0x02, 0x00, 0x82, 0xFD, 0xBC, 0xEF, 0x73, 0xEE, 0x1C, 0x04, 0x02, 0x00, 0x83, 0xFD, - 0xBC, 0xEF, 0x73, 0xEE, 0x1C, 0x06, 0x02, 0x00, 0x84, 0xFD, 0xBC, 0xEF, 0x73, 0xEE, 0x1C, 0x08, - 0x02, 0x00, 0x85, 0xFD, 0xBC, 0xEF, 0x73, 0xEE, 0x1C, 0x0A, 0x02, 0x00, 0x00, 0xF1, 0x46, 0x00, - 0x2D, 0xEE, 0xF8, 0x00, 0x00, 0x03, 0x8A, 0xEA, 0x1F, 0x00, 0x36, 0x01, 0xCA, 0x00, 0x96, 0x01, - 0xCE, 0x00, 0xFC, 0x00, 0x78, 0x01, 0xDA, 0x1E, 0x1A, 0x01, 0x86, 0x1B, 0xC8, 0x00, 0x00, 0x00, - 0xCE, 0x12, 0x00, 0x00, 0xD2, 0x14, 0x14, 0x01, 0x03, 0x00, 0xAE, 0x00, 0xE4, 0x00, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0xB4, 0xEA, 0xB3, 0x26, 0xB5, 0x2F, 0xB5, 0xFB, 0xB3, 0xA4, 0xB4, 0x69, 0xB4, 0xE7, 0xC5, - 0x4A, 0xC5, 0xE7, 0xC5, 0xBE, 0xC5, 0x54, 0xC5, 0x48, 0xC5, 0x06, 0xC6, 0x17, 0xC6, 0x17, 0xC6, - 0x17, 0xC6, 0x20, 0xC6, 0x3B, 0xC6, 0x98, 0xC6, 0xB4, 0xC6, 0xBF, 0xC5, 0xD2, 0xC5, 0xA6, 0xC5, - 0x10, 0x00, 0x12, 0x00, 0x13, 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x30, 0x00, 0x31, 0x00, - 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, - 0x3A, 0x00, 0x00, 0x00, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, - 0x14, 0x01, 0x14, 0x01, 0xF3, 0x02, 0xAD, 0x03, 0x60, 0x04, 0x04, 0x05, 0x07, 0x06, 0x08, 0x07, - 0x0A, 0x08, 0x16, 0x09, 0x44, 0x0A, 0x04, 0x0B, 0x40, 0x0C, 0x80, 0x0D, 0x00, 0x0E, 0x84, 0x0F, - 0x01, 0x10, 0x10, 0x11, 0x02, 0x14, 0x40, 0x20, 0x32, 0x21, 0x32, 0x22, 0x04, 0x23, 0x01, 0x24, - 0x0F, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, 0x00, 0x29, 0x00, 0x2A, 0x01, 0x2B, 0x06, 0x2C, - 0x00, 0x38, 0x00, 0x39, 0xD6, 0x3A, 0x00, 0x3B, 0x00, 0x3C, 0x14, 0x3D, 0x7F, 0x3E, 0x00, 0x3F, - 0x68, 0x40, 0x75, 0x41, 0x07, 0x42, 0x07, 0x43, 0x00, 0x45, 0x3B, 0x4A, 0x00, 0x4B, 0x00, 0x4C, - 0x0F, 0x4D, 0x02, 0x75, 0x00, 0x76, 0x80, 0x00, 0x08, 0x01, 0x09, 0x01, 0x09, 0x01, 0x0A, 0x01, - 0x0A, 0x01, 0x0B, 0x01, 0x0B, 0x01, 0x0C, 0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0D, 0x01, 0x0E, 0x01, - 0x0E, 0x01, 0x0F, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x10, 0x01, 0x11, 0x01, 0x11, 0x01, 0x12, 0x01, - 0x12, 0x01, 0x13, 0x01, 0x13, 0x01, 0x14, 0x01, 0x14, 0x01, 0x15, 0x01, 0x15, 0x01, 0x16, 0x01, - 0x16, 0x01, 0x17, 0x01, 0x17, 0x01, 0x18, 0x01, 0x18, 0x01, 0x19, 0x01, 0x19, 0x01, 0x4D, 0x01, - 0x4D, 0x01, 0x4E, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x50, 0x01, 0x51, 0x01, - 0x51, 0x01, 0x52, 0x01, 0x52, 0x01, 0x53, 0x01, 0x53, 0x01, 0x54, 0x01, 0x54, 0x01, 0x65, 0x01, - 0x65, 0x01, 0x66, 0x01, 0x66, 0x01, 0x67, 0x01, 0x67, 0x01, 0x68, 0x01, 0x68, 0x01, 0x69, 0x01, - 0x69, 0x01, 0x6A, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6C, 0x01, 0x6D, 0x01, - 0x6D, 0x01, 0x6E, 0x01, 0x6E, 0x01, 0x6F, 0x01, 0x6F, 0x01, 0x70, 0x01, 0x70, 0x01, 0x71, 0x01, - 0x71, 0x01, 0x72, 0x01, 0x72, 0x01, 0x73, 0x01, 0x73, 0x01, 0x74, 0x01, 0x74, 0x01, 0x75, 0x01, - 0x75, 0x01, 0x76, 0x01, 0x76, 0x01, 0x77, 0x01, 0x77, 0x01, 0x78, 0x01, 0x78, 0x01, 0x79, 0x01, - 0x79, 0x01, 0x7A, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7C, 0x01, 0x7D, 0x01, - 0x7D, 0x01, 0x7E, 0x01, 0x7E, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, - 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, - 0x80, 0x12, 0x80, 0x12, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, - 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, - 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, - 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x22, 0x46, 0x22, 0x46, - 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, - 0x22, 0x46, 0x23, 0x46, 0x23, 0x46, 0x23, 0x46, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1D, 0x47, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, - 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0x33, 0x48, - 0x78, 0x49, 0x78, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x7A, 0x49, 0x7A, 0x49, - 0x7A, 0x49, 0x7A, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7C, 0x49, 0x32, 0x00, 0x46, 0x00, - 0x5A, 0x00, 0x6E, 0x00, 0x82, 0x00, 0x96, 0x00, 0xAA, 0x00, 0xBE, 0x00, 0xD2, 0x00, 0xE6, 0x00, - 0xFA, 0x00, 0x0E, 0x01, 0x22, 0x01, 0x52, 0x01, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, - 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, - 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, - 0x57, 0x61, 0x76, 0x65, 0x4C, 0x41, 0x4E, 0x20, 0x49, 0x49, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x02, 0x01, 0x82, 0x84, 0x8B, 0x96, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xDD, 0x00, 0x50, 0xF2, 0x01, - 0x01, 0x00, 0x00, 0x50, 0xF2, 0x05, 0x02, 0x00, 0x00, 0x50, 0xF2, 0x02, 0x00, 0x50, 0xF2, 0x04, - 0x02, 0x00, 0x00, 0x50, 0xF2, 0x00, 0x00, 0x50, 0xF2, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x02, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x04, 0x00, 0x15, 0x00, 0x20, 0x00, 0x11, 0x00, 0x20, 0x00, 0x1E, 0x1F, 0x8E, 0x21, - 0x00, 0x23, 0xDA, 0x22, 0x04, 0x23, 0xC0, 0x21, 0xFF, 0xFF, 0xFF, 0xFF, 0x34, 0x23, 0x00, 0x00, - 0x50, 0x21, 0x8E, 0x21, 0xFF, 0xFF, 0x00, 0x00, 0x1E, 0x1F, 0x8E, 0x21, 0x00, 0x23, 0xFF, 0xFF, - 0x04, 0x23, 0xC0, 0x21, 0xFF, 0xFF, 0xFF, 0xFF, 0x34, 0x23, 0x00, 0x00, 0x8E, 0x21, 0x3C, 0x23, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x06, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, - 0x00, 0x60, 0x1D, 0x00, 0x00, 0x00, 0x0D, 0x81, 0x00, 0x60, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_2_data */ - -static const hcf_8 fw_image_3_data[] = { - 0x3F, 0x41, 0xA5, 0x4C, 0x50, 0x37, 0x04, 0x00, 0x01, 0xB9, 0x41, 0x5F, 0xB5, 0x60, 0x55, 0xE0, - 0x0C, 0x60, 0x10, 0x62, 0xA2, 0xD3, 0x01, 0x60, 0x01, 0x65, 0xD4, 0x80, 0x5A, 0xD1, 0x0F, 0x02, - 0x5A, 0xD3, 0x3E, 0x60, 0x00, 0x66, 0xE0, 0x87, 0x40, 0x4A, 0xEA, 0x60, 0x88, 0x61, 0x64, 0x44, - 0xC8, 0x84, 0x0C, 0x63, 0xAA, 0x46, 0x58, 0xD0, 0xAA, 0x46, 0x59, 0xD8, 0xFB, 0x1F, 0x08, 0x60, - 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xA3, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x61, 0x02, - 0x60, 0x02, 0x26, 0x60, 0x6A, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x41, 0x4B, 0x2B, 0x41, 0x26, 0x60, - 0xB2, 0x7C, 0xD1, 0x80, 0xA1, 0xD2, 0x25, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, - 0xE0, 0x87, 0x40, 0x4A, 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, - 0xBD, 0xD1, 0xEC, 0x18, 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, - 0x67, 0x44, 0xC0, 0x84, 0xE0, 0x85, 0x2C, 0x44, 0xD4, 0x80, 0x63, 0x41, 0x01, 0x06, 0x65, 0x44, - 0xC8, 0x83, 0xAA, 0x46, 0x59, 0xD1, 0x27, 0xD8, 0x5A, 0x87, 0xFC, 0x1F, 0xAA, 0x46, 0x2B, 0x41, - 0xD5, 0x01, 0x26, 0x60, 0xB2, 0x61, 0x41, 0x4B, 0x2B, 0x41, 0x26, 0x60, 0xEA, 0x7C, 0xD1, 0x80, - 0xA1, 0xD2, 0x27, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, 0x40, 0x4A, - 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0xEC, 0x18, - 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x04, 0xA3, 0xA3, 0xD1, - 0x5A, 0x88, 0x2C, 0x43, 0xD3, 0x80, 0xFF, 0xFF, 0x01, 0x06, 0x64, 0x43, 0xCF, 0x83, 0xAA, 0x46, - 0x60, 0xFE, 0x28, 0xD1, 0x5E, 0x88, 0x27, 0xD8, 0x5A, 0x87, 0xFB, 0x1F, 0x20, 0xFE, 0xAA, 0x46, - 0xD3, 0x01, 0xB8, 0xFE, 0xB9, 0xFE, 0xBA, 0xFE, 0xBB, 0xFE, 0xBD, 0xFE, 0xBF, 0xFE, 0x21, 0x60, - 0x80, 0x62, 0xA2, 0xD3, 0x12, 0x63, 0x60, 0x40, 0x01, 0x27, 0x05, 0x00, 0x0B, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0xA2, 0x60, 0x49, 0x78, 0xFF, 0xFF, 0xF1, 0xFF, 0x94, 0x48, - 0x1F, 0x00, 0x04, 0x00, 0xF2, 0xFF, 0x98, 0x48, 0x1F, 0x00, 0x04, 0x00, 0xFB, 0xFF, 0xA0, 0x48, - 0x1F, 0x00, 0x04, 0x00, 0xF1, 0xFF, 0xF2, 0x4D, 0x1F, 0x00, 0x04, 0x00, 0xF2, 0xFF, 0xF6, 0x4D, - 0x1F, 0x00, 0x04, 0x00, 0xFB, 0xFF, 0xFE, 0x4D, 0x1F, 0x00, 0x04, 0x00, 0x86, 0xFD, 0xB6, 0x1F, - 0x00, 0x00, 0x06, 0x00, 0x10, 0xFD, 0x34, 0x01, 0x00, 0x00, 0x02, 0x00, 0x14, 0xFD, 0x7E, 0x21, - 0x00, 0x00, 0x0A, 0x00, 0x20, 0xFA, 0xFA, 0x1D, 0x00, 0x00, 0x0E, 0x00, 0x21, 0xFA, 0xDE, 0x1D, - 0x00, 0x00, 0x0E, 0x00, 0x22, 0xFA, 0x16, 0x1E, 0x00, 0x00, 0x0E, 0x00, 0x23, 0xFA, 0xCA, 0x1C, - 0x00, 0x00, 0x01, 0x00, 0x24, 0xFA, 0xBE, 0x1E, 0x00, 0x00, 0x0E, 0x00, 0x25, 0xFA, 0xDE, 0x1C, - 0x00, 0x00, 0x80, 0x00, 0x26, 0xFA, 0xC4, 0x1C, 0x00, 0x00, 0x01, 0x00, - -}; /* fw_image_3_data */ - -static const hcf_8 fw_image_4_data[] = { - 0xA6, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA6, 0x60, 0x0B, 0x78, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA6, 0x60, 0x11, 0x78, 0xC4, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA5, 0x60, 0x61, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x44, 0xFF, 0x20, 0x54, 0xCD, 0xE2, 0xA6, 0x60, 0x23, 0x78, 0x08, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA6, 0x60, 0x25, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA6, 0x60, 0x25, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA6, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAC, 0x60, 0x81, 0x78, 0x4C, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAC, 0x60, 0x18, 0x78, 0x4C, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC4, 0xE2, 0x84, 0xFF, 0x22, 0x58, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA7, 0x60, 0xC4, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE4, 0xE2, 0xAC, 0x60, 0x31, 0x78, 0x95, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0x76, 0x78, 0x64, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAC, 0x60, 0x8C, 0x78, 0xA4, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAC, 0x60, 0x72, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB2, 0x60, 0xD1, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB2, 0x60, 0xFE, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB1, 0x60, 0x90, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB1, 0x60, 0xC0, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB1, 0x60, 0xC0, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB4, 0x60, 0x73, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB1, 0x60, 0xC3, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x83, 0x64, 0x80, 0x29, 0x09, 0xFB, 0xB2, 0x60, 0x99, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x60, 0x29, 0x78, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xB4, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBE, 0x60, 0x78, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBD, 0x60, 0xE8, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB5, 0x60, 0x96, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0x83, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x60, 0x9F, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xB0, 0xFF, 0xB1, 0xFF, 0x40, 0xFF, 0x43, 0xFF, 0xC0, 0x60, 0x9A, 0x78, 0x44, 0xFF, 0xFF, 0x01, - 0xC0, 0x60, 0x9F, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC6, 0x60, 0x66, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC0, 0x60, 0x9A, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC0, 0x60, 0x99, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC7, 0x60, 0x26, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE5, 0x60, 0x0E, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0x60, 0x2E, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0x60, 0x2E, 0x78, 0x24, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE3, 0x60, 0x45, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0x60, 0x2E, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0x60, 0x2E, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0x60, 0x2E, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x87, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0xA0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x84, 0x78, 0x28, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x84, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x84, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x84, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x87, 0x64, 0x80, 0x29, 0x09, 0xFB, 0x47, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x87, 0xF3, 0x88, 0xF3, 0xDC, 0x81, 0x00, 0x7C, 0x01, 0x00, 0x00, 0xFA, 0x60, 0x46, 0xFE, 0x63, - 0xA3, 0xD8, 0xFE, 0x1F, 0xCD, 0x81, 0xD8, 0x84, 0xF8, 0x02, 0x87, 0xF3, 0x88, 0xF5, 0xDC, 0x81, - 0x80, 0x67, 0x40, 0x4A, 0x14, 0x60, 0x02, 0x65, 0x01, 0x7C, 0x07, 0x18, 0x2A, 0x43, 0x02, 0xFC, - 0x5F, 0x8A, 0x8E, 0xF8, 0x70, 0xF8, 0x00, 0xF4, 0xF8, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x89, 0xF5, - 0x06, 0x64, 0x66, 0x43, 0x00, 0x7C, 0x63, 0x46, 0xFE, 0x63, 0xA3, 0xD8, 0xFE, 0x1F, 0xCC, 0x84, - 0x66, 0x43, 0xDB, 0x83, 0xF8, 0x02, 0x14, 0x60, 0x02, 0x65, 0x09, 0x60, 0x2B, 0x7C, 0x89, 0xF3, - 0x06, 0x61, 0x60, 0x46, 0x01, 0x63, 0x72, 0xF8, 0x00, 0xFC, 0x63, 0x47, 0x06, 0xFA, 0x72, 0xF8, - 0x8E, 0xF8, 0xDF, 0x83, 0x66, 0x44, 0xCD, 0x81, 0x02, 0xA6, 0xF5, 0x02, 0x89, 0xF3, 0x06, 0x61, - 0x60, 0x46, 0x03, 0x7C, 0x73, 0xF8, 0x66, 0x44, 0xCD, 0x81, 0x02, 0xA6, 0xFB, 0x02, 0x2E, 0x58, - 0xFF, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x0A, 0x00, 0x42, 0x60, 0x09, 0xE0, 0x3F, 0x40, 0x01, 0x2A, - 0x03, 0x00, 0x60, 0x60, 0x1C, 0xE0, 0x02, 0x00, 0x80, 0x60, 0x1C, 0xE0, 0x40, 0xEC, 0x00, 0xED, - 0x02, 0xEE, 0x80, 0x60, 0x58, 0xEC, 0x80, 0x60, 0x00, 0xED, 0x80, 0x60, 0x82, 0xEE, 0xC0, 0x60, - 0x59, 0xEC, 0xC0, 0x60, 0x07, 0xED, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, 0x00, 0xF3, 0x28, 0xFB, - 0x40, 0x44, 0xA4, 0x60, 0x5D, 0x7C, 0x20, 0xF9, 0xA5, 0x60, 0x48, 0x7C, 0x21, 0xF9, 0xA7, 0x60, - 0x30, 0x7C, 0x22, 0xF9, 0xB0, 0x60, 0xCD, 0x7C, 0x23, 0xF9, 0xB5, 0x60, 0x6C, 0x7C, 0x24, 0xF9, - 0xC0, 0x60, 0x88, 0x7C, 0x25, 0xF9, 0xC6, 0x60, 0xE0, 0x7C, 0x26, 0xF9, 0x91, 0x60, 0x00, 0xE8, - 0x28, 0xE8, 0x44, 0x60, 0x02, 0xE6, 0x00, 0x64, 0x40, 0x52, 0x10, 0x60, 0x04, 0xE6, 0x08, 0x60, - 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xBD, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x47, 0x02, - 0x46, 0x02, 0xDB, 0x83, 0xFA, 0x60, 0x27, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, 0x1A, 0x18, 0xC3, 0x83, - 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xDB, 0x83, 0xD3, 0x83, 0xD3, 0x86, 0x64, 0x41, 0xCD, 0x81, - 0xA6, 0xD1, 0xDA, 0x86, 0x1C, 0x60, 0x68, 0x65, 0x00, 0x60, 0x72, 0x63, 0xA5, 0xD3, 0xDA, 0x85, - 0x90, 0x84, 0xFF, 0x27, 0x02, 0x00, 0xA2, 0xD9, 0x01, 0x00, 0xF8, 0x1F, 0xCD, 0x81, 0xFF, 0xFF, - 0xEF, 0x02, 0x08, 0x60, 0x06, 0x63, 0xFA, 0x60, 0x28, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, 0x0B, 0x18, - 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xBF, 0xD3, 0x21, 0x60, 0x72, 0x62, 0x0E, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0xA2, 0xDB, 0x08, 0x60, 0x06, 0x63, 0xFD, 0x60, 0x0C, 0x65, 0x5B, 0xD3, - 0xBF, 0xD1, 0x0D, 0x18, 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xFA, 0xA3, 0xA3, 0xD3, - 0x02, 0x60, 0x00, 0x65, 0xF7, 0xA0, 0xFC, 0xA0, 0x0A, 0x05, 0x01, 0x05, 0x00, 0x00, 0x21, 0x60, - 0x00, 0x65, 0x3F, 0x43, 0x3F, 0x43, 0x21, 0x60, 0x00, 0x65, 0xC0, 0x60, 0x8F, 0xEE, 0xB7, 0x84, - 0x40, 0x5F, 0x00, 0x60, 0x30, 0xE2, 0x00, 0x60, 0x50, 0xE2, 0x00, 0x60, 0x79, 0xE2, 0x00, 0x60, - 0x90, 0xE2, 0x01, 0x60, 0xD0, 0xE2, 0x01, 0x60, 0xF0, 0xE2, 0x01, 0x60, 0xB0, 0xE2, 0x26, 0x64, - 0x35, 0xFB, 0x01, 0x60, 0x30, 0x64, 0x0A, 0xA4, 0x38, 0xFB, 0x60, 0x45, 0x00, 0x60, 0xF8, 0x64, - 0x0A, 0xA4, 0x39, 0xFB, 0x35, 0xF1, 0x0A, 0x64, 0xC4, 0x84, 0x36, 0xFB, 0xC0, 0x84, 0x0A, 0xA4, - 0x37, 0xFB, 0x09, 0x60, 0x2A, 0x64, 0x99, 0xFB, 0x82, 0xFF, 0x92, 0xFF, 0x5C, 0x41, 0x5C, 0x46, - 0x5C, 0x47, 0x00, 0xE1, 0xA7, 0x60, 0x9B, 0x63, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x87, 0xFF, - 0x97, 0xFF, 0x0C, 0x60, 0x02, 0x64, 0x40, 0x5A, 0x06, 0xA4, 0x40, 0x5B, 0x5C, 0x5E, 0x5C, 0x51, - 0x1F, 0x60, 0xAA, 0x62, 0xA2, 0xD3, 0x65, 0xFB, 0x21, 0x60, 0xEC, 0x61, 0x27, 0x7C, 0xA1, 0xD9, - 0x25, 0x60, 0x2E, 0x63, 0x7F, 0xA3, 0xE3, 0x87, 0x00, 0x7F, 0x8A, 0xFB, 0x02, 0x60, 0x80, 0x66, - 0x22, 0x60, 0x22, 0x64, 0x77, 0x60, 0x77, 0x63, 0x00, 0xFA, 0x01, 0xFC, 0x00, 0xF0, 0x01, 0xF0, - 0xD0, 0x80, 0xD3, 0x80, 0x1E, 0x02, 0x1D, 0x02, 0x06, 0x60, 0x80, 0x65, 0x45, 0x4A, 0xAA, 0x46, - 0x00, 0xFC, 0x01, 0xFA, 0xAA, 0x46, 0x00, 0xF0, 0x2A, 0x41, 0x50, 0x65, 0xD3, 0x80, 0xCD, 0x84, - 0x13, 0x03, 0x0A, 0x60, 0x80, 0x65, 0x45, 0x4A, 0xAA, 0x46, 0x00, 0xFC, 0x01, 0xFA, 0xAA, 0x46, - 0x00, 0xF0, 0x65, 0x41, 0xC8, 0x65, 0xD3, 0x80, 0xCD, 0x84, 0x06, 0x03, 0x12, 0x60, 0x7F, 0x64, - 0x03, 0x00, 0x10, 0x65, 0x02, 0x60, 0x7F, 0x64, 0x65, 0x43, 0x87, 0xFD, 0x1B, 0x60, 0x72, 0x62, - 0xA2, 0xDD, 0x07, 0x61, 0xC5, 0x81, 0xE1, 0x85, 0xD4, 0x84, 0x8B, 0xFB, 0xDC, 0x84, 0x89, 0xFB, - 0x0C, 0xA4, 0x88, 0xFB, 0x1B, 0x60, 0x74, 0x62, 0xA2, 0xDB, 0xA2, 0x60, 0x58, 0x4E, 0x1F, 0x78, - 0xFF, 0xFF, 0xA2, 0x60, 0x58, 0x4E, 0x00, 0x78, 0xFF, 0xFF, 0x8B, 0xF1, 0x8A, 0xF3, 0x7C, 0x63, - 0x8D, 0xFB, 0x60, 0x46, 0x01, 0xFC, 0xDC, 0x84, 0xD0, 0x80, 0x00, 0xFA, 0xFA, 0x04, 0x8E, 0xFB, - 0x60, 0x46, 0x00, 0x64, 0x00, 0xFA, 0x63, 0x44, 0x80, 0x7F, 0x01, 0xFA, 0x8B, 0xF3, 0x8A, 0xF1, - 0xDC, 0x84, 0xD0, 0x84, 0x8C, 0xFB, 0x03, 0x60, 0x26, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x64, 0x78, - 0xFF, 0xFF, 0x66, 0x44, 0x2E, 0xFB, 0x82, 0xFF, 0x40, 0x42, 0x87, 0xFF, 0x8C, 0xF3, 0x94, 0xFB, - 0x00, 0x64, 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xDB, 0x00, 0x64, 0x40, 0x50, 0x63, 0xFF, 0x66, 0xFF, - 0x65, 0xFF, 0x64, 0xFF, 0x61, 0xFF, 0x62, 0xFF, 0x49, 0x60, 0x02, 0xE1, 0x52, 0x60, 0x02, 0xE1, - 0x5B, 0x60, 0x02, 0xE1, 0x65, 0x60, 0x02, 0xE1, 0x6C, 0x60, 0x02, 0xE1, 0x76, 0x60, 0x02, 0xE1, - 0x41, 0x60, 0x02, 0xE1, 0x04, 0x65, 0x21, 0x60, 0x7E, 0x64, 0x44, 0xD3, 0xEA, 0x60, 0x58, 0x4E, - 0x78, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0x04, 0x65, 0x0C, 0x64, 0xA5, 0xDB, 0xA3, 0x60, 0xED, 0x64, - 0x80, 0xFB, 0x2D, 0xFF, 0x0A, 0x61, 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, 0xB3, 0x60, 0x58, 0x4D, - 0x64, 0x78, 0xFF, 0xFF, 0xF0, 0x67, 0x0E, 0xFA, 0x1B, 0x60, 0xE0, 0x62, 0x1B, 0x60, 0xC4, 0x64, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x2B, 0x41, - 0x4D, 0x8B, 0xFF, 0xFF, 0xE9, 0x02, 0x0A, 0x61, 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, 0xB3, 0x60, - 0x58, 0x4D, 0x64, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0xE0, 0x62, 0x1B, 0x60, 0xB8, 0x64, 0xA2, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x2B, 0x41, 0x4D, 0x8B, - 0xFF, 0xFF, 0xEB, 0x02, 0xEB, 0x60, 0x4E, 0x78, 0xFF, 0xFF, 0x00, 0xEA, 0x00, 0xEB, 0x50, 0x60, - 0x03, 0xEA, 0x51, 0x60, 0x13, 0xEA, 0x52, 0x60, 0x30, 0xEA, 0x53, 0x60, 0x40, 0xEA, 0x54, 0x60, - 0x52, 0xEA, 0x55, 0x60, 0x6D, 0xEA, 0x56, 0x60, 0x71, 0xEA, 0x57, 0x60, 0x8B, 0xEA, 0x58, 0x60, - 0x47, 0xEA, 0x59, 0x60, 0xA0, 0xEA, 0x5A, 0x60, 0xB2, 0xEA, 0x5B, 0x60, 0xC1, 0xEA, 0x5C, 0x60, - 0xD7, 0xEA, 0x5D, 0x60, 0xEB, 0xEA, 0x5E, 0x60, 0xA0, 0xEA, 0x50, 0x60, 0x36, 0xEB, 0x51, 0x60, - 0x37, 0xEB, 0x52, 0x60, 0x20, 0xEB, 0x53, 0x60, 0xE4, 0xEB, 0x54, 0x60, 0x34, 0xEB, 0x55, 0x60, - 0x58, 0xEB, 0x56, 0x60, 0x48, 0xEB, 0x57, 0x60, 0xD0, 0xEB, 0x58, 0x60, 0xC3, 0xEB, 0x59, 0x60, - 0xFC, 0xEB, 0x5A, 0x60, 0x34, 0xEB, 0x5B, 0x60, 0x58, 0xEB, 0x5C, 0x60, 0xC0, 0xEB, 0x5D, 0x60, - 0xD0, 0xEB, 0x5E, 0x60, 0x91, 0xEB, 0x00, 0xEA, 0x00, 0xEB, 0xE0, 0x60, 0x02, 0xEA, 0xE0, 0x60, - 0x03, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xB0, 0x60, 0x00, 0xEB, 0xAB, 0x48, 0x40, 0x3B, 0x01, 0x00, - 0xFC, 0x01, 0x00, 0xEB, 0x03, 0x60, 0x02, 0x62, 0x62, 0x44, 0xA2, 0xDB, 0x0F, 0x64, 0x60, 0x7F, - 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x3F, 0x40, - 0x40, 0x26, 0x08, 0x00, 0x00, 0x60, 0x18, 0x64, 0x00, 0x60, 0x00, 0x65, 0x94, 0x84, 0xA0, 0x50, - 0x1D, 0x60, 0x19, 0xE2, 0x24, 0x44, 0xFF, 0xB4, 0x04, 0xFB, 0x50, 0x60, 0x00, 0x64, 0x05, 0xFB, - 0x10, 0x60, 0x10, 0x75, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x80, 0xFF, 0x90, 0xFF, 0x98, 0xFF, - 0x23, 0x60, 0x5C, 0x63, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, - 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, - 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, - 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, - 0x2F, 0x44, 0xBD, 0xDB, 0x23, 0x60, 0x50, 0x64, 0xA0, 0xDD, 0x24, 0x60, 0x7C, 0x63, 0x23, 0x60, - 0x52, 0x64, 0xA0, 0xDD, 0x23, 0x60, 0x54, 0x63, 0x30, 0x44, 0xA3, 0xDB, 0x23, 0x60, 0x56, 0x63, - 0x31, 0x44, 0xA3, 0xDB, 0x23, 0x60, 0x58, 0x63, 0x32, 0x44, 0xA3, 0xDB, 0x23, 0x60, 0x5A, 0x63, - 0x33, 0x44, 0xA3, 0xDB, 0x81, 0xFF, 0x91, 0xFF, 0x58, 0x51, 0x48, 0x00, 0x82, 0xFF, 0x92, 0xFF, - 0x58, 0x51, 0x44, 0x00, 0x83, 0xFF, 0x93, 0xFF, 0x58, 0x51, 0x40, 0x00, 0x84, 0xFF, 0x94, 0xFF, - 0x58, 0x51, 0x3C, 0x00, 0x85, 0xFF, 0x95, 0xFF, 0x58, 0x51, 0x38, 0x00, 0x86, 0xFF, 0x96, 0xFF, - 0x58, 0x51, 0x34, 0x00, 0x87, 0xFF, 0x97, 0xFF, 0x58, 0x51, 0x30, 0x00, 0x80, 0xFF, 0x90, 0xFF, - 0x99, 0xFF, 0x23, 0x60, 0x50, 0x64, 0xA0, 0xD1, 0x30, 0x44, 0x64, 0x43, 0xBD, 0xDB, 0x31, 0x44, - 0xBD, 0xDB, 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, 0x35, 0x44, - 0xBD, 0xDB, 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, 0x39, 0x44, - 0xBD, 0xDB, 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, 0x3D, 0x44, - 0xBD, 0xDB, 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0xE3, 0x60, 0x50, 0x64, 0x0A, 0xFB, - 0x40, 0x21, 0xFE, 0x01, 0xA1, 0xFF, 0xFF, 0xFF, 0x78, 0x01, 0xFF, 0xFF, 0x42, 0x50, 0x40, 0x53, - 0x23, 0x60, 0x52, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x52, 0x33, 0x44, 0x32, 0x42, 0xA2, 0xDB, - 0xDA, 0x82, 0xA2, 0xDD, 0xDA, 0x83, 0x65, 0x44, 0xBD, 0xDB, 0x61, 0x44, 0xBD, 0xDB, 0x66, 0x44, - 0xBD, 0xDB, 0xBD, 0xD9, 0x30, 0x44, 0xBD, 0xDB, 0x99, 0xFF, 0xA4, 0x4C, 0xBD, 0xDB, 0xA5, 0x4C, - 0xBD, 0xDB, 0xA0, 0x4C, 0xBD, 0xDB, 0xA1, 0x4C, 0xBD, 0xDB, 0x98, 0xFF, 0x23, 0x60, 0x52, 0x64, - 0xA0, 0xDD, 0x23, 0x60, 0x54, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x50, 0x23, 0x60, 0x58, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x52, 0x23, 0x60, 0x5A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x53, - 0x31, 0x41, 0x23, 0x60, 0x56, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x51, 0x23, 0x60, 0x50, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x43, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, - 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, - 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, - 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, - 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0x23, 0x60, 0x50, 0x64, 0xA0, 0xDD, 0x61, 0x58, 0xFF, 0xFF, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x07, 0x02, 0x62, 0xFF, 0x63, 0xFF, 0x64, 0xFF, 0x65, 0xFF, - 0x66, 0xFF, 0xBF, 0xFE, 0xA1, 0xFF, 0x82, 0xFF, 0x88, 0xFF, 0x6C, 0x40, 0x41, 0xFF, 0xC4, 0xE2, - 0x43, 0xFF, 0x5C, 0x49, 0x08, 0xE1, 0xA5, 0x60, 0x5E, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0x98, 0xFF, - 0x80, 0x3E, 0x9F, 0xFE, 0x03, 0x04, 0xA6, 0x60, 0x28, 0x78, 0xFF, 0xFF, 0xE2, 0xFE, 0x40, 0x05, - 0xE0, 0xFE, 0x5B, 0x05, 0xE1, 0xFE, 0xF2, 0x04, 0x29, 0x40, 0x08, 0x26, 0xEF, 0x01, 0x72, 0x44, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x95, 0xF3, 0xE8, 0x85, 0xFF, 0xB7, - 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x85, 0x73, 0x44, 0xD4, 0x84, 0x10, 0x65, 0xD4, 0x80, 0xFF, 0xFF, - 0x26, 0x04, 0x3F, 0x40, 0x40, 0x26, 0x13, 0x00, 0x0B, 0x60, 0xF8, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x10, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xF8, 0xA2, 0xA2, 0xD1, 0x0A, 0x60, 0x19, 0x64, 0x90, 0x84, - 0xA0, 0x52, 0x06, 0xA2, 0xA2, 0xD1, 0x46, 0x60, 0x09, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xD2, 0xF4, - 0x25, 0x60, 0x16, 0x7C, 0x63, 0x40, 0x01, 0x26, 0x08, 0x00, 0xA4, 0xD3, 0xFF, 0xFF, 0x01, 0xB4, - 0xFF, 0xFF, 0x03, 0x02, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, 0x02, 0xEE, 0xBD, 0xFE, 0xBE, 0x01, - 0x21, 0x46, 0x5E, 0x62, 0x9A, 0xFF, 0x07, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x06, 0x25, 0x10, 0x00, - 0xA2, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x62, 0x62, 0x01, 0x5D, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, - 0x7A, 0xDC, 0x44, 0xFF, 0x06, 0x25, 0x04, 0x00, 0x0E, 0xE1, 0x02, 0x60, 0x01, 0xE1, 0x9E, 0x01, - 0x62, 0xFF, 0xC4, 0xE2, 0x41, 0xFF, 0x0A, 0xE1, 0x99, 0x01, 0xC8, 0x74, 0xCD, 0xE2, 0x29, 0x44, - 0x08, 0xBC, 0x40, 0x49, 0x05, 0xE1, 0x25, 0x60, 0x18, 0x63, 0xA3, 0xD3, 0xD2, 0xF3, 0x06, 0x18, - 0x28, 0x40, 0x08, 0x2A, 0x05, 0x00, 0x28, 0x40, 0x48, 0x36, 0x02, 0x00, 0x02, 0xBC, 0xD2, 0xFB, - 0x3F, 0x40, 0x01, 0x2B, 0xFF, 0xFF, 0xA1, 0xFF, 0x67, 0x4C, 0x06, 0x61, 0xCD, 0x81, 0x04, 0x25, - 0x30, 0x00, 0x87, 0x4C, 0xFB, 0x02, 0x28, 0x40, 0x40, 0x2B, 0x02, 0x00, 0x15, 0x60, 0x6F, 0x6B, - 0xF3, 0x60, 0xA0, 0x64, 0x04, 0x25, 0x25, 0x00, 0x80, 0x4C, 0x30, 0x64, 0x3A, 0xDB, 0x44, 0xFF, - 0x04, 0x25, 0x1F, 0x00, 0x04, 0x60, 0x00, 0x65, 0x25, 0x44, 0x37, 0x36, 0xB4, 0x84, 0x6E, 0x36, - 0xB4, 0x84, 0x80, 0x4E, 0x24, 0x41, 0x04, 0x25, 0x14, 0x00, 0x61, 0x4C, 0x64, 0xA1, 0x61, 0x54, - 0xA1, 0xFF, 0xFF, 0xFF, 0x04, 0x25, 0x0D, 0x00, 0x67, 0x4E, 0x07, 0x64, 0x1C, 0xFB, 0x00, 0xE1, - 0x02, 0x60, 0x01, 0xE1, 0x53, 0x01, 0x33, 0xF3, 0xFD, 0x11, 0xFC, 0x18, 0x40, 0x64, 0x3A, 0xDB, - 0x0A, 0x00, 0xC4, 0xE2, 0x27, 0x44, 0x20, 0x2A, 0x04, 0x00, 0x42, 0x64, 0x3A, 0xDB, 0x67, 0x4C, - 0x02, 0x00, 0x41, 0x64, 0x3A, 0xDB, 0x62, 0xFF, 0x08, 0xE1, 0xE2, 0xFE, 0x72, 0x52, 0x5C, 0x49, - 0x32, 0x7B, 0x4D, 0xE2, 0x3B, 0x01, 0x08, 0xE1, 0x39, 0x01, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, - 0x00, 0x60, 0x46, 0x74, 0xCD, 0xE2, 0x04, 0xE1, 0x02, 0x60, 0x00, 0xE1, 0x3F, 0x44, 0x40, 0x26, - 0x0B, 0x00, 0x01, 0x2A, 0x05, 0x00, 0x42, 0x60, 0x09, 0xE0, 0x60, 0x60, 0x1C, 0xE0, 0x04, 0x00, - 0x42, 0x60, 0x09, 0xE0, 0x80, 0x60, 0x1C, 0xE0, 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x43, 0x64, - 0x3A, 0xDB, 0x83, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x3F, 0x44, 0x02, 0x27, 0x84, 0x00, 0x20, 0x2B, - 0xFF, 0x01, 0x80, 0xE1, 0x95, 0x60, 0x80, 0xE7, 0x61, 0x40, 0x40, 0x2B, 0x0D, 0x00, 0x05, 0x63, - 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0x28, 0x63, 0xFF, 0xFF, 0xFE, 0x1F, 0x01, 0x63, - 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0xFF, 0xB1, 0xCD, 0x81, 0xE1, 0x85, 0x1E, 0x60, - 0xA2, 0x64, 0x44, 0xD1, 0xFF, 0xFF, 0x64, 0x43, 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x00, 0x63, 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xBE, 0x61, - 0x21, 0x60, 0x72, 0x62, 0xA2, 0xD3, 0x45, 0xD1, 0x47, 0xBC, 0xE0, 0x84, 0x62, 0x45, 0x64, 0x5F, - 0xE8, 0x83, 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0x82, 0xF3, 0xCD, 0xE2, 0x60, 0x54, - 0x04, 0xE1, 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x15, 0x60, 0xA2, 0xE7, 0x38, 0x69, 0xFF, 0xFF, - 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x01, 0x2A, 0x36, 0x00, 0x03, 0x60, 0x80, 0x7C, 0xA3, 0x83, - 0x21, 0x60, 0x72, 0x62, 0xA2, 0xD1, 0x43, 0xBB, 0xB3, 0x83, 0x95, 0x60, 0x80, 0xE7, 0xA7, 0x60, - 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0xE3, 0x83, 0x15, 0x60, 0xA2, 0xE7, 0x38, 0x69, 0xFF, 0xFF, - 0x68, 0x41, 0x01, 0x16, 0xFD, 0x01, 0x63, 0x47, 0x61, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x00, 0x3A, - 0xCC, 0x84, 0x02, 0x00, 0x07, 0x3A, 0xDC, 0x84, 0xFF, 0xB4, 0xA5, 0xDB, 0x60, 0x47, 0xE8, 0x84, - 0x47, 0x65, 0x21, 0x60, 0x72, 0x62, 0xA2, 0xD3, 0xB4, 0x85, 0xB4, 0x83, 0x80, 0xE1, 0x95, 0x60, - 0x80, 0xE7, 0xA7, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0x82, 0xF3, 0xCD, 0xE2, 0x60, 0x54, - 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x83, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x2B, 0x04, 0x00, - 0xA6, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0xFF, 0x01, 0x83, 0xF3, 0x80, 0xE1, 0xCC, 0x84, 0xE0, 0x85, - 0x15, 0x60, 0xA2, 0xE7, 0x1D, 0x60, 0xDE, 0x64, 0x58, 0x4F, 0x4F, 0x00, 0x1D, 0x60, 0xFA, 0x64, - 0x58, 0x4F, 0x4B, 0x00, 0x1E, 0x60, 0x16, 0x64, 0x58, 0x4F, 0x47, 0x00, 0x1E, 0x60, 0x32, 0x64, - 0x58, 0x4F, 0x43, 0x00, 0x1E, 0x60, 0x4E, 0x64, 0x58, 0x4F, 0x3F, 0x00, 0x1E, 0x60, 0x6A, 0x64, - 0x58, 0x4F, 0x3B, 0x00, 0x1E, 0x60, 0x86, 0x64, 0x58, 0x4F, 0x37, 0x00, 0x01, 0x68, 0xFF, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x3F, 0x44, 0x20, 0x27, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x26, - 0x08, 0x00, 0x00, 0x60, 0x18, 0x64, 0x00, 0x60, 0x00, 0x65, 0x94, 0x84, 0xA0, 0x50, 0x1D, 0x60, - 0x19, 0xE2, 0xC4, 0xE2, 0x00, 0x63, 0x82, 0xFD, 0x32, 0x7B, 0x4D, 0xE2, 0xBF, 0xFE, 0xC4, 0xE2, - 0x41, 0xFF, 0xE0, 0xFE, 0xE1, 0xFE, 0xE2, 0xFE, 0x43, 0xFF, 0x44, 0xFF, 0x46, 0xFF, 0x84, 0xF3, - 0x62, 0xFF, 0x60, 0x40, 0x05, 0x36, 0x2D, 0xFF, 0x07, 0x36, 0xD5, 0xFE, 0x08, 0xE1, 0x88, 0x60, - 0x85, 0x71, 0x8D, 0xE2, 0xA5, 0x60, 0x5E, 0x78, 0xFF, 0xFF, 0x50, 0xEC, 0x63, 0x4A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x40, 0xEC, 0x2F, 0x58, 0xFF, 0xFF, 0x44, 0xD3, 0x80, 0x7C, 0x60, 0x48, - 0x60, 0x47, 0x00, 0x7F, 0xB0, 0x8A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x2F, 0x58, 0xFF, 0xFF, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x02, 0x02, 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0x88, 0xFF, - 0x48, 0xE2, 0x01, 0x70, 0xAE, 0xF1, 0x00, 0x6B, 0x89, 0xFF, 0x64, 0x54, 0x88, 0xFF, 0x9F, 0xFE, - 0x02, 0x05, 0x64, 0x44, 0x60, 0x54, 0xCD, 0xE2, 0xC2, 0x64, 0x3A, 0xDB, 0xBC, 0xFF, 0xB5, 0xFF, - 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xB4, 0x40, 0x46, 0x3C, 0x44, 0x00, 0xBC, 0xFF, 0xFF, 0x06, 0x03, - 0x27, 0x40, 0x26, 0x22, 0x03, 0x00, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x27, 0x44, 0x20, 0x2A, - 0x04, 0x00, 0xA0, 0x60, 0x00, 0xEA, 0xB0, 0x60, 0x00, 0xEA, 0x5C, 0x4D, 0x27, 0x44, 0x18, 0xB4, - 0x40, 0x47, 0x00, 0xE1, 0x6C, 0x40, 0x44, 0xE2, 0xC4, 0xE2, 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, - 0x32, 0xF1, 0x08, 0x29, 0x09, 0x00, 0x64, 0x40, 0x07, 0x22, 0x06, 0x00, 0x43, 0xFF, 0x27, 0x44, - 0x10, 0xBC, 0x40, 0x47, 0x00, 0x64, 0x32, 0xFB, 0x31, 0x41, 0x3C, 0x44, 0x01, 0xB1, 0x00, 0xBC, - 0x0A, 0x02, 0x09, 0x03, 0x32, 0xF3, 0x00, 0x7C, 0x01, 0xB4, 0xFF, 0xFF, 0x04, 0x03, 0x32, 0xF9, - 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x00, 0x64, - 0x33, 0xFB, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x32, 0xF3, 0x08, 0x29, - 0x0A, 0x00, 0x60, 0x40, 0x07, 0x22, 0x07, 0x00, 0xFE, 0xB4, 0x32, 0xFB, 0x27, 0x44, 0x10, 0xBC, - 0xF7, 0xB4, 0x40, 0x47, 0x43, 0xFF, 0x00, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, 0x31, 0x40, - 0x01, 0x2A, 0x04, 0x00, 0x00, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x0A, 0xE1, 0xE5, 0xFE, 0x13, 0x05, - 0x27, 0x44, 0x10, 0x26, 0x13, 0x00, 0x9F, 0xFE, 0x02, 0x04, 0x02, 0xE1, 0x06, 0x00, 0x3E, 0xE1, - 0x31, 0x44, 0x01, 0x2A, 0x02, 0x00, 0x04, 0x0A, 0xBF, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, - 0xAF, 0x60, 0x19, 0x78, 0xFF, 0xFF, 0xA8, 0x60, 0x09, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x08, 0x26, - 0xFF, 0xFF, 0xBF, 0x60, 0x2A, 0x78, 0xFF, 0xFF, 0x48, 0xF3, 0x32, 0xF1, 0x00, 0x63, 0x64, 0x40, - 0x03, 0x22, 0x3D, 0x00, 0x31, 0x40, 0x08, 0x26, 0xF4, 0x01, 0xCD, 0xE2, 0x84, 0xE1, 0x70, 0x41, - 0xAD, 0x80, 0x71, 0x40, 0x80, 0x27, 0xED, 0x12, 0x03, 0x03, 0xBF, 0x60, 0x7C, 0x78, 0xFF, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0xC4, 0xE2, 0x32, 0xFD, 0x60, 0x40, 0x01, 0x2A, 0xDF, 0x01, 0x00, 0x63, - 0x32, 0xFD, 0x6C, 0x40, 0x3C, 0x46, 0x3E, 0xF2, 0x2A, 0xF0, 0x27, 0x41, 0x44, 0x48, 0x20, 0xB9, - 0x01, 0xB4, 0xF7, 0xB1, 0x0A, 0x03, 0x64, 0x40, 0x08, 0x27, 0x07, 0x00, 0x0F, 0x60, 0x92, 0x63, - 0x00, 0x64, 0x45, 0xFB, 0x46, 0xFB, 0xBD, 0xDB, 0xA3, 0xDB, 0xCB, 0x0A, 0x41, 0x47, 0x3F, 0x40, - 0x01, 0x2B, 0x04, 0x00, 0xF6, 0xFE, 0x67, 0x4C, 0x05, 0x60, 0x69, 0x6B, 0x02, 0xE1, 0x01, 0x60, - 0x08, 0xE1, 0xF0, 0xFE, 0x84, 0xFF, 0xBF, 0x60, 0xAD, 0x64, 0x40, 0x42, 0x82, 0xFF, 0xE5, 0xFE, - 0x03, 0x04, 0xAC, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0xE4, 0xFE, 0x0A, 0x04, 0x1D, 0xFF, 0x00, 0xEB, - 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, - 0x43, 0xFF, 0xE6, 0xFE, 0x03, 0x05, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x3C, 0x44, 0x60, 0x46, - 0x0F, 0xF0, 0x40, 0x42, 0x64, 0x40, 0x01, 0x2A, 0x03, 0x00, 0xAB, 0x60, 0x03, 0x78, 0xFF, 0xFF, - 0x0B, 0x64, 0x3A, 0xDB, 0x1C, 0x42, 0x22, 0x46, 0x13, 0xF2, 0xFF, 0x65, 0x60, 0x47, 0x2A, 0xF2, - 0x40, 0x45, 0x40, 0x48, 0x04, 0x2B, 0x17, 0x00, 0x16, 0xF2, 0x1D, 0xF2, 0x40, 0x43, 0x0F, 0xF2, - 0x40, 0x44, 0x25, 0x5E, 0x3F, 0x40, 0x01, 0x27, 0x40, 0x45, 0x0F, 0x64, 0x14, 0xF0, 0x35, 0xF2, - 0xA0, 0x82, 0x0F, 0xB4, 0xCA, 0x85, 0xD4, 0x80, 0x10, 0xF2, 0x01, 0x02, 0x2B, 0xFA, 0x27, 0x44, - 0x40, 0xBC, 0x40, 0x47, 0x13, 0x00, 0x17, 0xF2, 0x2C, 0xF0, 0x40, 0x43, 0x1B, 0xF2, 0x1D, 0xFA, - 0x40, 0x44, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0xAB, 0xFC, 0x05, 0x00, 0x28, 0x40, 0xA4, 0x36, - 0x02, 0x00, 0x11, 0xF2, 0x2B, 0xFA, 0x27, 0x44, 0xBF, 0xB4, 0x40, 0x47, 0x28, 0x40, 0x40, 0x2B, - 0xFF, 0xFF, 0xAF, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0x22, 0x46, 0x2C, 0xF0, 0x27, 0x44, 0xDF, 0xB4, - 0x40, 0x47, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, - 0x08, 0x60, 0x00, 0x6B, 0x64, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x13, 0x00, 0x2A, 0xF0, 0x01, 0x65, - 0x64, 0x40, 0xA4, 0x3A, 0x04, 0x65, 0x27, 0x44, 0x34, 0x87, 0x36, 0xF3, 0xB4, 0xFF, 0x60, 0x5B, - 0x4D, 0xE2, 0x04, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x0A, 0xE1, 0x2B, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0x81, 0x3E, 0x06, 0x64, 0x3A, 0xDB, 0x22, 0x46, 0x01, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xBF, 0x60, - 0x85, 0x78, 0xFF, 0xFF, 0xB5, 0xFF, 0xA1, 0xFF, 0x6C, 0x40, 0x3F, 0x40, 0x01, 0x2B, 0x03, 0x00, - 0x67, 0x4C, 0x05, 0x60, 0x69, 0x6B, 0x02, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0xC4, 0xE2, 0x08, 0x64, - 0x3A, 0xDB, 0xF0, 0xFE, 0x25, 0x46, 0x01, 0xF2, 0x61, 0x45, 0xD4, 0x9E, 0x21, 0x46, 0x16, 0xFA, - 0x2A, 0x44, 0x72, 0x45, 0x24, 0xFA, 0x95, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, - 0x01, 0x26, 0x64, 0x44, 0x95, 0xF9, 0x25, 0xFA, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, - 0x28, 0xFA, 0x97, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x97, 0xFB, 0x29, 0xFA, 0x2D, 0x44, 0x04, 0x2A, - 0x06, 0x00, 0x28, 0x40, 0xA4, 0x36, 0x03, 0x00, 0xA9, 0x60, 0xC9, 0x78, 0xFF, 0xFF, 0x94, 0xFC, - 0x1F, 0x60, 0x9A, 0x65, 0xA5, 0xD1, 0x28, 0x44, 0x08, 0x2A, 0x51, 0x00, 0x03, 0x2B, 0x01, 0x00, - 0x4E, 0x00, 0x64, 0x40, 0x00, 0x36, 0x4B, 0x00, 0x32, 0xF2, 0x2F, 0xF0, 0x50, 0xFE, 0x01, 0x2A, - 0x03, 0x00, 0x01, 0x61, 0x8F, 0xF3, 0x31, 0x00, 0xD0, 0x80, 0x33, 0xF2, 0x30, 0xF0, 0x34, 0xF2, - 0xD0, 0x80, 0x31, 0xF0, 0xFF, 0xFF, 0xD0, 0x80, 0x60, 0x47, 0x34, 0x0C, 0xFF, 0xB4, 0x12, 0x60, - 0xCE, 0x65, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0xFF, 0xFF, 0x31, 0x18, 0x60, 0x43, 0x50, 0xFE, - 0x66, 0x41, 0x32, 0xF0, 0x63, 0x46, 0x03, 0xF2, 0x61, 0x46, 0xD0, 0x80, 0x33, 0xF0, 0x63, 0x46, - 0x04, 0xF2, 0x61, 0x46, 0xD0, 0x80, 0x34, 0xF0, 0x63, 0x46, 0x05, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, - 0xFF, 0xFF, 0x04, 0x0C, 0x00, 0xF2, 0x61, 0x46, 0x1A, 0x18, 0xE8, 0x01, 0x06, 0xF0, 0x8F, 0xF3, - 0x61, 0x46, 0x02, 0x61, 0x64, 0x40, 0x02, 0x2A, 0x12, 0x00, 0xFC, 0xA0, 0xFF, 0xFF, 0x04, 0x0E, - 0x61, 0x44, 0x14, 0xFA, 0x11, 0xFC, 0x0B, 0x00, 0x2C, 0xF2, 0x2F, 0xFA, 0x2D, 0xF2, 0x30, 0xFA, - 0x2E, 0xF2, 0x31, 0xFA, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, 0x40, 0x46, 0x20, 0x00, 0x26, 0x43, - 0x84, 0xBB, 0xFC, 0xB3, 0x21, 0x46, 0x01, 0x5D, 0x0F, 0xFC, 0x5C, 0x46, 0x25, 0x44, 0x06, 0xFA, - 0x05, 0xFF, 0x27, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x50, 0xFE, 0x28, 0x40, 0x08, 0x3A, 0x12, 0x00, - 0x2F, 0xF2, 0x30, 0xF0, 0x60, 0x43, 0x31, 0xF2, 0x22, 0x46, 0x64, 0x41, 0x2C, 0xF0, 0x2D, 0xF0, - 0xD3, 0x80, 0x2E, 0xF0, 0xD1, 0x80, 0xD0, 0x80, 0x27, 0x44, 0x09, 0x0C, 0x03, 0x00, 0x27, 0x44, - 0x06, 0x22, 0x05, 0x00, 0xB8, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xD4, 0x64, - 0x40, 0x48, 0x0D, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x1C, 0xF2, 0x62, 0xF1, 0xFF, 0xB4, 0xD0, 0x80, - 0xFF, 0xFF, 0x01, 0x06, 0x64, 0x44, 0x40, 0x45, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, - 0x37, 0x3A, 0x03, 0x00, 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, 0x6E, 0x3A, 0x03, 0x00, 0x84, 0x7F, - 0x40, 0x45, 0x0B, 0x64, 0x40, 0x44, 0x00, 0x63, 0x28, 0x44, 0xA4, 0x36, 0x07, 0x00, 0x04, 0x2B, - 0x05, 0x00, 0x30, 0xF3, 0x24, 0x45, 0xD4, 0x84, 0xCA, 0x65, 0xD4, 0x83, 0xD4, 0x64, 0x1A, 0x00, - 0x0F, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x70, 0x63, 0x1C, 0xF2, 0xCA, 0x65, 0x40, 0x45, 0x0A, 0x36, - 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x3A, 0x03, 0x00, 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, - 0x6E, 0x3A, 0x03, 0x00, 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, 0x40, 0x44, 0x2B, 0xF2, 0xC4, 0x85, - 0xD4, 0x83, 0xC4, 0x64, 0x40, 0x48, 0x2F, 0xF0, 0xB0, 0xF0, 0xB1, 0xF2, 0x00, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x80, 0x4E, 0x83, 0x4C, 0x9A, 0xFF, 0x84, 0x4C, 0x85, 0x4C, 0x81, 0x4C, 0xA1, 0xFF, - 0x98, 0xFF, 0x87, 0x4F, 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, - 0xFF, 0xFF, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, - 0xBC, 0xFF, 0xC4, 0xE2, 0x0C, 0x74, 0x04, 0xE1, 0xA1, 0xFF, 0x35, 0xF3, 0xC4, 0xE2, 0x60, 0x54, - 0x89, 0xFF, 0x13, 0x74, 0x88, 0xFF, 0xB5, 0xFF, 0x47, 0xFF, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, - 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x27, 0x44, 0x01, 0x2A, - 0x05, 0x00, 0xFE, 0xB4, 0x40, 0x47, 0xA8, 0x60, 0x89, 0x78, 0xFF, 0xFF, 0xA7, 0x60, 0x8E, 0x78, - 0xFF, 0xFF, 0x28, 0x40, 0xB4, 0x3A, 0x09, 0x00, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, - 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x9B, 0x01, 0x28, 0x44, 0xD4, 0x36, 0x03, 0x00, - 0xAA, 0x60, 0xEA, 0x78, 0xFF, 0xFF, 0x48, 0xE2, 0x27, 0x44, 0xFB, 0xB4, 0x40, 0x47, 0x21, 0x60, - 0x98, 0x63, 0xA3, 0xD3, 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, 0xFF, 0xFF, 0x34, 0xFB, 0x1C, 0x42, - 0x22, 0x46, 0x2A, 0xF0, 0xF7, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDA, 0x60, 0x40, 0x40, 0x2B, - 0xCC, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x22, 0x26, 0x42, 0x00, 0x01, 0x26, 0x03, 0x00, - 0x04, 0x26, 0x07, 0x00, 0xC2, 0x00, 0x04, 0x2B, 0xC0, 0x00, 0x88, 0xF3, 0xFF, 0xFF, 0x60, 0x46, - 0x01, 0x00, 0x07, 0xF4, 0x47, 0xF2, 0xFF, 0xFF, 0xDC, 0x84, 0x47, 0xFA, 0x0D, 0x60, 0x3E, 0x62, - 0x80, 0xFF, 0xC4, 0x60, 0x78, 0x44, 0x02, 0xA4, 0xA2, 0xDB, 0x7D, 0x78, 0xFF, 0xFF, 0x82, 0xFF, - 0x88, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x22, 0x46, 0x22, 0xF2, - 0x63, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x47, 0xF0, 0x64, 0x41, 0x64, 0x47, - 0xFF, 0xB4, 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0x22, 0x46, 0x3A, 0xFA, - 0x64, 0x44, 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, - 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x85, 0x00, - 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, 0x60, 0x40, 0x40, 0x2B, 0x27, 0x00, 0xA2, 0xD3, 0x00, 0x61, - 0x60, 0xFE, 0xA0, 0xD3, 0xDE, 0x82, 0xA2, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, - 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, - 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, - 0x60, 0xFE, 0xDA, 0x82, 0xA2, 0xD1, 0xFF, 0xFF, 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, - 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0x60, 0x7C, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, - 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, - 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x80, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, - 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, - 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, - 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x0B, 0xF2, 0xFF, 0xFF, 0x7F, 0xB4, - 0x0C, 0xF0, 0x04, 0x02, 0x64, 0x46, 0x00, 0xF0, 0x04, 0x64, 0x22, 0x46, 0x03, 0xFA, 0x60, 0x41, - 0x64, 0x46, 0x01, 0xF2, 0xFC, 0xA1, 0x61, 0x45, 0xD4, 0x84, 0xFF, 0xFF, 0x08, 0x02, 0x00, 0xF0, - 0x04, 0x63, 0x64, 0x46, 0x01, 0xF2, 0x22, 0x46, 0x1A, 0xFA, 0x03, 0xFC, 0x02, 0x00, 0x22, 0x46, - 0x1A, 0xFA, 0x35, 0xF2, 0x04, 0xF8, 0xDC, 0x84, 0x35, 0xFA, 0x14, 0xF2, 0x0F, 0xB5, 0x0F, 0xB4, - 0xCC, 0x84, 0x94, 0x80, 0x04, 0x60, 0x00, 0x65, 0x2A, 0xF2, 0x01, 0x02, 0x94, 0x84, 0x2A, 0xFA, - 0x95, 0xFC, 0x06, 0x00, 0xC4, 0x3A, 0x07, 0x00, 0x27, 0x44, 0xFD, 0xB4, 0x40, 0x47, 0x48, 0xE2, - 0xA8, 0x60, 0x28, 0x78, 0xFF, 0xFF, 0x28, 0x44, 0x04, 0x26, 0x05, 0x00, 0x68, 0x3A, 0x03, 0x00, - 0x32, 0x44, 0x00, 0x27, 0x03, 0x00, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x0A, 0x64, 0x3A, 0xDB, - 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x0E, 0x64, 0x3A, 0xDB, 0x10, 0x60, 0x00, 0x65, 0x3C, 0x46, - 0x2A, 0xF2, 0x13, 0xF0, 0xA4, 0x84, 0xB4, 0xBC, 0x40, 0x48, 0x62, 0xF1, 0x64, 0x47, 0xFF, 0xB4, - 0x60, 0x45, 0xD0, 0x80, 0x70, 0x61, 0x01, 0x06, 0x64, 0x44, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, - 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, 0x6E, 0x36, 0x0B, 0x64, 0x40, 0x4E, 0xA0, 0x63, 0x0A, 0x64, - 0x65, 0x40, 0x0A, 0x36, 0x03, 0x00, 0x38, 0x61, 0x14, 0x64, 0xEB, 0x83, 0x40, 0x45, 0x43, 0x44, - 0x02, 0x60, 0x5E, 0x65, 0x2A, 0xF2, 0x2B, 0xF2, 0x60, 0x40, 0x04, 0x2B, 0x04, 0x00, 0x2E, 0x45, - 0xD4, 0x85, 0xC5, 0x84, 0x05, 0x00, 0x1B, 0xF0, 0xC5, 0x84, 0xC0, 0x84, 0x2E, 0x45, 0xC4, 0x84, - 0x60, 0x43, 0x28, 0x44, 0x00, 0xE1, 0xA1, 0xFF, 0x80, 0x4E, 0x83, 0x4C, 0x9A, 0xFF, 0x56, 0x62, - 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x5C, 0x62, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0xA1, 0xFF, - 0x98, 0xFF, 0x87, 0x4F, 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, - 0xFF, 0xFF, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, - 0xBC, 0xFF, 0xB5, 0xFF, 0x47, 0xFF, 0x27, 0x44, 0x02, 0xBC, 0x40, 0x47, 0x36, 0xF3, 0xB7, 0xFF, - 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x60, 0x5B, 0x4D, 0xE2, 0xA8, 0x60, - 0x81, 0x78, 0xFF, 0xFF, 0x21, 0x46, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, - 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x26, 0x43, 0x25, 0x44, 0x06, 0xFA, 0x2A, 0x44, - 0x72, 0x45, 0x24, 0xFA, 0x95, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, - 0x64, 0x44, 0x95, 0xF9, 0x25, 0xFA, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, 0x28, 0xFA, - 0x97, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x97, 0xFB, 0x29, 0xFA, 0x2D, 0x40, 0x01, 0x2A, 0x0E, 0x00, - 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, 0x40, 0x46, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, - 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x30, 0xF1, 0x50, 0x00, 0xFC, 0xB3, 0x32, 0x40, - 0x01, 0x2A, 0x06, 0x00, 0x0A, 0xBB, 0x0F, 0xFC, 0xCB, 0xFE, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, - 0x2D, 0x44, 0x04, 0x26, 0x02, 0x00, 0x0F, 0xFC, 0x05, 0xFF, 0x30, 0xF1, 0x27, 0x44, 0x05, 0x22, - 0x2D, 0x00, 0xFA, 0xB4, 0x40, 0x47, 0x2D, 0x44, 0x10, 0x2A, 0x24, 0x00, 0x28, 0x40, 0xD4, 0x3A, - 0x21, 0x00, 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, - 0x64, 0x44, 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, - 0x20, 0x29, 0x6D, 0xE2, 0x12, 0x60, 0xC0, 0x63, 0x1D, 0xF0, 0xC0, 0x64, 0xC0, 0x84, 0xA3, 0xD1, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA3, 0xDB, 0xA8, 0x60, - 0x89, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x07, 0x00, 0x02, 0x2A, 0x05, 0x00, - 0xFD, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x05, 0x64, 0x3A, 0xDB, 0x28, 0x44, - 0xA4, 0x3A, 0x04, 0x00, 0x39, 0xF1, 0x25, 0x44, 0x0A, 0x36, 0x38, 0xF1, 0x31, 0x40, 0x08, 0x26, - 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, 0x64, 0x44, 0xC4, 0x84, 0xFF, 0xFF, - 0x04, 0x24, 0x00, 0xB4, 0x28, 0x40, 0xE4, 0x36, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, - 0x20, 0x29, 0x6D, 0xE2, 0xA7, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0x21, 0x46, 0xB5, 0xFF, 0xBC, 0xFF, - 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x27, 0x44, - 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xEA, 0x01, - 0x27, 0x44, 0x05, 0x22, 0x09, 0x00, 0xBA, 0xB4, 0x40, 0x47, 0x3C, 0x46, 0x02, 0x64, 0x31, 0xFB, - 0xC0, 0xFE, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x02, 0x2A, 0x06, 0x00, 0xFD, 0xB4, - 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xF4, 0x01, 0xF3, 0x0A, 0x7C, 0x50, 0x6D, 0xE2, - 0xF0, 0x01, 0x72, 0x45, 0xDC, 0x84, 0x95, 0xFB, 0x11, 0x64, 0x3A, 0xDB, 0x96, 0xF3, 0x06, 0x04, - 0xDC, 0x84, 0x96, 0xFB, 0x97, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x97, 0xFB, 0xA7, 0x60, 0xA6, 0x78, - 0xFF, 0xFF, 0x00, 0x61, 0x12, 0x64, 0x3A, 0xDB, 0x16, 0x60, 0xBA, 0x63, 0xBD, 0xD3, 0x72, 0x45, - 0x44, 0x8A, 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, 0xDD, 0x81, 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, - 0xDD, 0x81, 0xBD, 0xD3, 0x95, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, - 0xC4, 0x84, 0x60, 0x55, 0x2A, 0x52, 0x95, 0xFB, 0x02, 0x24, 0x01, 0xB9, 0xBD, 0xD3, 0x96, 0xF1, - 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, 0xC4, 0x84, 0x96, 0xFB, 0x02, 0x24, - 0x01, 0xB9, 0xBD, 0xD3, 0x97, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0xC4, 0x84, 0x97, 0xFB, 0xA8, 0x60, - 0x0C, 0x78, 0xFF, 0xFF, 0xAE, 0x01, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x25, 0x09, 0x00, 0x04, 0x25, - 0x03, 0x00, 0x47, 0xFF, 0x32, 0x74, 0xA5, 0x01, 0xC4, 0xE2, 0xAF, 0x60, 0x19, 0x78, 0xFF, 0xFF, - 0x4C, 0x4E, 0x47, 0xFF, 0x32, 0x74, 0xCD, 0xE2, 0xAC, 0x60, 0x8F, 0x78, 0x00, 0x61, 0x10, 0x64, - 0x3A, 0xDB, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x5C, 0x4D, - 0x26, 0x44, 0x02, 0x26, 0x0C, 0x00, 0x3E, 0x46, 0x09, 0xF2, 0x1E, 0x41, 0x03, 0x1B, 0xAE, 0x60, - 0xCB, 0x78, 0xFF, 0xFF, 0x40, 0x5E, 0xFD, 0xFB, 0x21, 0x44, 0x02, 0x64, 0x40, 0x46, 0x41, 0x5D, - 0x21, 0x46, 0x00, 0xF2, 0x46, 0x45, 0x87, 0xFC, 0x4C, 0xE2, 0x01, 0x64, 0x33, 0xFB, 0x01, 0x60, - 0x0E, 0xE1, 0x03, 0xE1, 0x3F, 0x40, 0x01, 0x27, 0x00, 0x00, 0x21, 0x69, 0xB6, 0xFF, 0xA1, 0xFF, - 0x6C, 0x5E, 0xB6, 0xFF, 0xB7, 0xFF, 0x60, 0x5C, 0x20, 0x64, 0x3A, 0xDB, 0x68, 0x43, 0x26, 0xFC, - 0x22, 0x69, 0x64, 0x44, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x5F, 0x60, 0x43, 0x26, 0xF2, 0xFF, 0xFF, - 0x68, 0x5F, 0x26, 0xFA, 0x3A, 0x69, 0x1D, 0xFC, 0x2E, 0x44, 0x36, 0xF1, 0x1C, 0xFA, 0xC3, 0x94, - 0xCD, 0xE2, 0x2E, 0x44, 0x14, 0x36, 0x12, 0x00, 0x0A, 0x36, 0x0F, 0x00, 0x63, 0x45, 0xE3, 0x83, - 0xE3, 0x83, 0xC7, 0x83, 0xE3, 0x83, 0xC7, 0x83, 0xFF, 0xFF, 0x37, 0x36, 0x05, 0x00, 0x6E, 0x36, - 0x04, 0x00, 0xAE, 0x60, 0xE3, 0x78, 0xFF, 0xFF, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, - 0xFF, 0xFF, 0x80, 0x27, 0xCF, 0x83, 0x1B, 0xFC, 0x01, 0x64, 0x4F, 0xFB, 0xA1, 0xFF, 0x1C, 0xF2, - 0x29, 0x41, 0xF9, 0x81, 0x52, 0x4A, 0x71, 0x89, 0x68, 0x5F, 0x27, 0xFA, 0x6C, 0x40, 0x03, 0x15, - 0xAE, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x88, 0x60, 0x85, 0x71, 0x8D, 0xE2, 0x99, 0xF1, 0xFC, 0xA3, - 0xD3, 0x80, 0x43, 0x43, 0x03, 0x04, 0xAE, 0x60, 0xEB, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x01, 0x2A, - 0x4C, 0x00, 0x9A, 0xFF, 0x23, 0x43, 0x18, 0x61, 0xA1, 0xFF, 0x8C, 0x44, 0xCB, 0x83, 0x2A, 0xFA, - 0x40, 0x48, 0x40, 0x27, 0x04, 0xA1, 0x60, 0x40, 0x03, 0x2B, 0x01, 0x00, 0x06, 0xA1, 0x88, 0xB0, - 0x88, 0x36, 0xD9, 0x81, 0x62, 0x45, 0x23, 0x44, 0x54, 0x94, 0x28, 0x40, 0x04, 0x26, 0x00, 0x64, - 0x3F, 0xFA, 0xC9, 0x81, 0x65, 0x42, 0x7A, 0xDC, 0x00, 0xB9, 0xFD, 0x1C, 0x00, 0xF4, 0x6E, 0x61, - 0x10, 0x62, 0x14, 0x02, 0x05, 0x1D, 0x12, 0x1E, 0x0C, 0x00, 0x00, 0xF4, 0x7C, 0x61, 0x02, 0x62, - 0x7A, 0xDC, 0x63, 0x40, 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, 0x08, 0x1E, 0x02, 0x02, 0x00, 0xF4, - 0x02, 0x62, 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0x6C, 0x44, 0x5A, 0xDA, 0x98, 0xFF, 0x01, 0x60, - 0x08, 0xE1, 0x81, 0xE1, 0xA1, 0xFF, 0x6C, 0x40, 0xA1, 0xFF, 0x47, 0xFF, 0x26, 0x44, 0xFD, 0xB4, - 0x84, 0xBC, 0x01, 0x15, 0x7F, 0xB4, 0x40, 0x46, 0xA1, 0xFF, 0x6C, 0x40, 0x14, 0x63, 0x01, 0x11, - 0x01, 0x00, 0xFD, 0x1F, 0xAE, 0x60, 0x61, 0x78, 0xFF, 0xFF, 0x9A, 0xFF, 0x54, 0x63, 0x12, 0x64, - 0x40, 0x46, 0x00, 0x64, 0x0F, 0xFA, 0xA1, 0xFF, 0xCB, 0xF1, 0x12, 0x61, 0x50, 0xFE, 0x8C, 0x44, - 0xCC, 0xF0, 0xBD, 0xDA, 0x40, 0x48, 0x04, 0x26, 0x40, 0x00, 0xA1, 0xFF, 0x8C, 0x44, 0xBD, 0xDA, - 0x30, 0xFB, 0x6C, 0x44, 0xBD, 0xDA, 0xFF, 0xFF, 0x01, 0x26, 0x24, 0x00, 0xD0, 0x80, 0xA1, 0xFF, - 0x8C, 0x44, 0x6C, 0x5C, 0xF2, 0xFE, 0xBD, 0xDA, 0xCD, 0xF3, 0xD4, 0x80, 0xD0, 0x80, 0xBD, 0xD8, - 0x2D, 0x44, 0x15, 0x0C, 0x32, 0x40, 0x02, 0x2A, 0x07, 0x00, 0x28, 0x42, 0x0C, 0xB2, 0x08, 0x3A, - 0x03, 0x00, 0x10, 0xBC, 0x40, 0x4D, 0x4D, 0x00, 0x03, 0x0A, 0xAE, 0x60, 0xF9, 0x78, 0xFF, 0xFF, - 0x11, 0xBC, 0x40, 0x4D, 0x28, 0x45, 0xBF, 0x60, 0xFF, 0x64, 0x24, 0x88, 0x42, 0x00, 0x30, 0xBC, - 0x40, 0x4D, 0x3F, 0x00, 0x20, 0xB9, 0x5C, 0x8E, 0xA1, 0xFF, 0x8C, 0x44, 0xBD, 0xDA, 0xDC, 0x9C, - 0x6C, 0x44, 0xF2, 0xFE, 0xBD, 0xDA, 0x08, 0x28, 0x44, 0x4E, 0xDC, 0x84, 0x2E, 0x5C, 0xB0, 0x84, - 0xEF, 0xB1, 0x08, 0x24, 0x40, 0xB9, 0x41, 0x46, 0x2C, 0x00, 0x8C, 0x44, 0x04, 0x61, 0xBD, 0xDA, - 0x50, 0xFE, 0x80, 0x27, 0x00, 0x64, 0x30, 0xFB, 0x8C, 0x44, 0xBD, 0xDA, 0xD0, 0x80, 0x8C, 0x44, - 0xBD, 0xDA, 0xD4, 0x80, 0x00, 0x65, 0x8C, 0x44, 0xCD, 0xF1, 0xBD, 0xDA, 0xD0, 0x80, 0x28, 0x44, - 0x03, 0x0C, 0xA0, 0x2A, 0x0A, 0x00, 0x11, 0x00, 0x10, 0x65, 0x60, 0x40, 0xC4, 0x36, 0x04, 0x00, - 0xD4, 0x3A, 0x08, 0x00, 0x27, 0x40, 0x40, 0x26, 0x30, 0x65, 0x00, 0x64, 0x3F, 0xFA, 0x46, 0x4E, - 0x35, 0x8D, 0x5F, 0x00, 0x40, 0x26, 0xF9, 0x01, 0x30, 0x65, 0x9D, 0xDC, 0x9D, 0xDC, 0x9D, 0xDC, - 0xF4, 0x01, 0x00, 0xE1, 0x23, 0x43, 0xE8, 0xA3, 0x6A, 0x62, 0x9A, 0xFF, 0xA1, 0xFF, 0x28, 0x44, - 0x03, 0x2B, 0x04, 0x00, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x28, 0x44, 0x88, 0xB0, 0x88, 0x2A, - 0x03, 0x00, 0x70, 0x62, 0x7A, 0xDC, 0x28, 0x44, 0x40, 0x2B, 0x13, 0x00, 0x72, 0x62, 0x7A, 0xDC, - 0x04, 0xE6, 0x7A, 0xDC, 0x3B, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x2B, 0x02, 0x00, 0x7A, 0xDC, - 0x7A, 0xDC, 0x08, 0x60, 0x00, 0xEB, 0xFC, 0xA3, 0x25, 0xFF, 0x3F, 0xFC, 0x04, 0xA3, 0xB0, 0xFF, - 0x01, 0x00, 0x3F, 0xFC, 0xCF, 0x83, 0xDF, 0x83, 0x04, 0x02, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, - 0x1F, 0x00, 0x27, 0x03, 0xCB, 0x83, 0xFF, 0x60, 0xFE, 0x65, 0x0E, 0xA3, 0xA7, 0x84, 0xF2, 0xA3, - 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, 0x7A, 0xDC, 0xFE, 0x1C, 0x03, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, - 0x0A, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xA7, 0x84, 0x7A, 0x61, 0x7A, 0xDC, 0xFE, 0x1C, 0xF9, 0x1D, - 0x7C, 0xA8, 0xD9, 0x81, 0xF6, 0x03, 0xFF, 0xB1, 0x0C, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, - 0xA1, 0xFF, 0x01, 0x60, 0x0C, 0xE1, 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0xCD, 0x81, 0x6C, 0x44, - 0x5A, 0xDA, 0x98, 0xFF, 0x00, 0xE6, 0x7C, 0x44, 0x33, 0xFB, 0x01, 0x60, 0x0C, 0xE1, 0x83, 0xE1, - 0xA1, 0xFF, 0x8C, 0x44, 0x46, 0x45, 0xA1, 0xFF, 0x14, 0x63, 0x01, 0x10, 0xFE, 0x1F, 0x01, 0x60, - 0x08, 0xE1, 0x0A, 0x64, 0x60, 0x54, 0x47, 0xFF, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, 0x6A, 0x40, - 0x40, 0x2B, 0x01, 0x15, 0x29, 0x00, 0x6C, 0x40, 0x28, 0x40, 0x03, 0x26, 0x15, 0x00, 0x31, 0x40, - 0x20, 0x2A, 0x03, 0x00, 0x28, 0x40, 0x50, 0x3A, 0x0F, 0x00, 0x2D, 0x44, 0x20, 0x2A, 0x0C, 0x00, - 0x2B, 0x44, 0xAC, 0x80, 0x28, 0x40, 0xB4, 0x3A, 0x03, 0x00, 0x02, 0x03, 0x30, 0xFB, 0x04, 0x00, - 0x2B, 0x50, 0xA8, 0x60, 0x92, 0x78, 0x04, 0xE1, 0x04, 0xE1, 0xA1, 0xFF, 0x35, 0xF1, 0x26, 0x44, - 0x64, 0x54, 0xCD, 0xE2, 0x84, 0xBC, 0x2D, 0x40, 0x0C, 0x22, 0xFD, 0xB4, 0x40, 0x46, 0x23, 0x64, - 0x3A, 0xDB, 0xAB, 0x60, 0x6A, 0x78, 0xFF, 0xFF, 0x27, 0x40, 0x26, 0x22, 0x04, 0x00, 0x02, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0xFF, 0xFF, 0x6C, 0x40, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, - 0x08, 0x60, 0x00, 0x6B, 0x37, 0xF3, 0x2B, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x28, 0x65, 0x44, - 0x60, 0x50, 0xA0, 0x4C, 0x20, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x35, 0xF1, 0x74, 0x44, 0xC0, 0x94, - 0x32, 0x40, 0x02, 0x2A, 0x18, 0x00, 0x28, 0x44, 0xA4, 0x36, 0x04, 0x00, 0x0C, 0xB4, 0xFF, 0xFF, - 0x04, 0x36, 0x11, 0x00, 0x26, 0x43, 0xFD, 0xB3, 0x04, 0xBB, 0x43, 0x46, 0x01, 0x2A, 0x03, 0x00, - 0x28, 0x47, 0x40, 0xBF, 0x40, 0x48, 0x0A, 0xBB, 0x0F, 0xFC, 0x50, 0x4B, 0x67, 0x50, 0x00, 0x64, - 0x30, 0xFB, 0x05, 0xFF, 0xC6, 0x01, 0x24, 0x64, 0x3A, 0xDB, 0x28, 0x44, 0x04, 0x2A, 0x03, 0x00, - 0xA7, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0x1D, 0xFF, 0x48, 0xE2, 0x27, 0x44, 0x06, 0x22, 0x05, 0x00, - 0xF9, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x26, 0x40, 0x10, 0x2A, 0x18, 0x00, - 0x26, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0xFF, 0xB4, 0xC0, 0xA0, 0xFF, 0xFF, 0x11, 0x0E, 0x98, 0xF1, - 0x1E, 0x60, 0xF8, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0xAC, 0x60, 0x05, 0x78, 0xFF, 0xFF, 0x98, 0xF1, 0x1E, 0x60, 0xFA, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x2A, 0x64, 0x3A, 0xDB, 0x5C, 0x41, 0x87, 0xE1, - 0xA1, 0xFF, 0x6C, 0x40, 0x02, 0x00, 0x29, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, 0x87, 0xE1, - 0xA1, 0xFF, 0x6C, 0x40, 0x11, 0x00, 0x1F, 0x60, 0x0C, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, - 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0xF1, 0x01, 0x01, 0x60, 0x08, 0xE1, 0x21, 0x64, 0x3A, 0xDB, - 0x03, 0x00, 0x01, 0x60, 0x08, 0xE1, 0x6C, 0x40, 0x00, 0x64, 0x33, 0xFB, 0x32, 0x74, 0x40, 0x63, - 0x01, 0x16, 0xFE, 0x01, 0x01, 0x68, 0x01, 0x11, 0x09, 0x00, 0xA7, 0x6A, 0x22, 0x64, 0x3A, 0xDB, - 0x03, 0x60, 0xC9, 0x63, 0x01, 0x11, 0x02, 0x00, 0x6C, 0x40, 0xFC, 0x1F, 0x6C, 0x40, 0xB5, 0xFF, - 0x6C, 0x40, 0xBC, 0xFF, 0x6C, 0x40, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, - 0x00, 0x6B, 0x03, 0x0A, 0xA7, 0x60, 0x9B, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x4F, 0xFB, 0x27, 0x44, - 0x06, 0x22, 0x06, 0x00, 0xF9, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x48, 0xE2, - 0x27, 0x64, 0x3A, 0xDB, 0xB3, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x54, 0x62, 0x22, 0x46, - 0xA2, 0xD0, 0x16, 0x63, 0x7C, 0x41, 0x44, 0x48, 0x80, 0x36, 0x04, 0x61, 0x28, 0x40, 0x50, 0x36, - 0x04, 0x61, 0x41, 0x4E, 0x28, 0x44, 0xA4, 0x36, 0x0E, 0x63, 0x12, 0x60, 0xC2, 0x62, 0xA2, 0xD1, - 0x24, 0x44, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA2, 0xDB, - 0x9A, 0xFF, 0xA1, 0xFF, 0x54, 0x62, 0xA2, 0xD2, 0xFF, 0xFF, 0x6A, 0x40, 0x80, 0x4E, 0x7A, 0xD4, - 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0xFF, 0xFF, 0x01, 0x1D, - 0x78, 0x00, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x28, 0x40, 0x03, 0x2B, 0x04, 0x00, - 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x6A, 0x40, 0x70, 0x62, 0x28, 0x44, 0x88, 0xB0, 0x88, 0x36, - 0x7A, 0xD4, 0x28, 0x40, 0x40, 0x2B, 0x0B, 0x00, 0x72, 0x62, 0x7A, 0xD4, 0x7A, 0xD4, 0xA2, 0xD2, - 0xFF, 0xFF, 0x60, 0x40, 0x20, 0x2B, 0x02, 0x00, 0x7A, 0xD4, 0x7A, 0xD4, 0x46, 0x00, 0x23, 0x43, - 0xCF, 0x83, 0xDF, 0x83, 0x02, 0x03, 0x55, 0x03, 0x04, 0x00, 0x03, 0xF0, 0x04, 0xF4, 0x64, 0x42, - 0x37, 0x00, 0x2E, 0x40, 0x04, 0x2A, 0x21, 0x00, 0xA1, 0xFF, 0x02, 0xFE, 0x10, 0x25, 0x42, 0xFE, - 0x72, 0x45, 0x65, 0x4C, 0x95, 0xF3, 0x03, 0x04, 0xE4, 0xE2, 0xDC, 0x84, 0x95, 0xFB, 0xA1, 0xFF, - 0x80, 0x4C, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, 0x80, 0x4C, 0x97, 0xF3, 0x02, 0x04, - 0xDC, 0x84, 0x97, 0xFB, 0x80, 0x4C, 0x5C, 0x4E, 0xF8, 0xA3, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, - 0xFF, 0xB1, 0xF8, 0xA1, 0x06, 0xA4, 0x60, 0x42, 0x09, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, - 0xC8, 0x82, 0xFF, 0xB1, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xB1, 0x7A, 0xD4, 0xFF, 0xFF, - 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, 0x17, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, 0xDA, 0x82, - 0xA2, 0xD2, 0xA1, 0xFF, 0x09, 0x74, 0x80, 0x4D, 0x0E, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, - 0x23, 0x43, 0xA1, 0xFF, 0xA0, 0xD2, 0xFE, 0xA1, 0xCB, 0x83, 0x80, 0x4E, 0xAF, 0x83, 0x02, 0x1D, - 0x02, 0x03, 0xED, 0x01, 0xE3, 0x01, 0xA1, 0xFF, 0x28, 0x40, 0x40, 0x2B, 0x02, 0x00, 0x9C, 0x4E, - 0x9C, 0x4C, 0xA1, 0xFF, 0xDA, 0x83, 0x66, 0x44, 0x22, 0x46, 0x0C, 0xFA, 0x0B, 0xFC, 0x87, 0x4F, - 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, 0xFF, 0xFF, 0x87, 0x4C, - 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, 0xBC, 0xFF, 0x01, 0x60, - 0x08, 0xE1, 0x0C, 0x74, 0x04, 0xE1, 0xA1, 0xFF, 0x35, 0xF3, 0xC4, 0xE2, 0x60, 0x54, 0x89, 0xFF, - 0x13, 0x74, 0x88, 0xFF, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0x34, 0x64, 0x3A, 0xDB, 0x06, 0xE1, - 0x47, 0xFF, 0xA8, 0x60, 0x64, 0x78, 0xFF, 0xFF, 0xFF, 0x01, 0x08, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0x43, 0xFF, 0x01, 0x60, 0x00, 0xE1, 0x28, 0xF3, 0x47, 0xFF, 0x60, 0x40, 0x07, 0x37, 0x4B, 0x00, - 0x05, 0x3B, 0x04, 0x00, 0xFF, 0x0A, 0x80, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x29, 0xF5, 0x2A, 0xF3, - 0x47, 0xFF, 0x3F, 0xF0, 0x01, 0x1B, 0x01, 0x64, 0x60, 0x56, 0xAD, 0xE2, 0xB5, 0xFF, 0x6C, 0x40, - 0x40, 0xE1, 0xA1, 0xFF, 0x00, 0xF4, 0x6E, 0x61, 0x12, 0x62, 0x64, 0x43, 0x01, 0xE1, 0x03, 0x64, - 0xE2, 0xD0, 0xC9, 0x81, 0x64, 0x4C, 0xCC, 0x84, 0xDA, 0x82, 0xFA, 0x02, 0x01, 0x60, 0x00, 0x6B, - 0x9A, 0xFF, 0xCA, 0x82, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xFF, 0x7A, 0xD0, 0xA1, 0xFF, - 0x64, 0x4C, 0xFC, 0x1C, 0xF8, 0x1D, 0x00, 0xB9, 0x06, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, - 0x5A, 0xD2, 0xA1, 0xFF, 0x60, 0x4D, 0x3F, 0x40, 0x02, 0x2B, 0x08, 0x00, 0x28, 0xF3, 0xA5, 0x60, - 0xC4, 0x65, 0x60, 0x40, 0x0E, 0x3B, 0x02, 0x00, 0x80, 0x4C, 0xFE, 0x01, 0xA1, 0xFF, 0x87, 0x4E, - 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x67, 0x4C, 0xFF, 0xFF, 0xBC, 0xFF, 0x00, 0xE1, - 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x64, 0x40, 0x46, 0x60, 0x41, 0xB5, 0xFF, 0xB7, 0xFF, - 0xB4, 0xFF, 0x29, 0xF5, 0x3F, 0xF0, 0x24, 0xF2, 0x44, 0x43, 0x40, 0x44, 0x00, 0xF4, 0xF3, 0x60, - 0xA0, 0x65, 0x10, 0x62, 0x5A, 0xD2, 0xD9, 0x81, 0xD4, 0x80, 0xFF, 0xFF, 0xFB, 0x02, 0x61, 0x45, - 0x24, 0x44, 0xD4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xFD, 0xA5, 0x48, 0x60, 0x00, 0x64, - 0xC4, 0x9D, 0x0D, 0x60, 0x00, 0x6B, 0x24, 0x44, 0xC0, 0x83, 0xBB, 0xFF, 0x29, 0xF5, 0x01, 0xE1, - 0x00, 0xF4, 0x6C, 0x61, 0x10, 0x62, 0x05, 0x00, 0x00, 0xF4, 0x01, 0xF2, 0xFF, 0xFF, 0x60, 0x41, - 0x04, 0x62, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x1A, 0x00, 0x26, 0x44, 0x01, 0x26, 0x0C, 0x00, - 0x24, 0x44, 0xC8, 0x84, 0x40, 0x44, 0x02, 0x03, 0x6C, 0x45, 0xF3, 0x01, 0x03, 0x15, 0x01, 0x64, - 0x05, 0xFA, 0x15, 0x00, 0x6C, 0x45, 0xED, 0x01, 0x23, 0x44, 0xC8, 0x84, 0x40, 0x43, 0x02, 0x03, - 0x6C, 0x45, 0xE7, 0x01, 0x00, 0x64, 0x01, 0x15, 0x01, 0x64, 0x6C, 0x45, 0x05, 0xFB, 0xE2, 0xD2, - 0xDA, 0x82, 0xC9, 0x81, 0x60, 0x4C, 0xDD, 0x1C, 0xD7, 0x03, 0xBC, 0xFF, 0xDA, 0x01, 0x00, 0xE1, - 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0x67, 0x4C, 0x43, 0xFF, 0xAD, 0x4F, - 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x01, 0xE1, 0x01, 0x60, 0x69, 0x6B, 0xA5, 0x60, 0xC4, 0x64, - 0x60, 0x4C, 0xBB, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, - 0xFC, 0x01, 0x29, 0xF3, 0x2A, 0xF1, 0x07, 0xB5, 0x04, 0xE1, 0x65, 0x41, 0x64, 0x54, 0xCD, 0xE2, - 0x95, 0x81, 0xA1, 0x5D, 0xA1, 0xFF, 0xFF, 0xFF, 0xF9, 0x01, 0x00, 0xE1, 0x30, 0x40, 0x02, 0x36, - 0xA1, 0xFF, 0x83, 0xFF, 0x8D, 0xFF, 0x5C, 0x44, 0x5C, 0x43, 0x5C, 0x42, 0x5C, 0x41, 0x5C, 0x40, - 0xAC, 0xFF, 0xAD, 0xFF, 0xE7, 0xE1, 0xB1, 0x60, 0xC0, 0x78, 0xFF, 0xFF, 0x10, 0x61, 0x7F, 0x60, - 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, 0x26, 0x02, 0x98, 0xFE, 0x1A, 0x05, 0x1B, 0x60, - 0xB8, 0x62, 0xA2, 0xD5, 0x0E, 0xF2, 0x15, 0x18, 0x02, 0x18, 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, - 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, - 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x08, 0xB9, 0x10, 0x7E, 0x00, 0x7F, 0x0E, 0xFA, 0x00, 0x67, - 0x0A, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xF6, 0xA0, 0x7F, 0x67, 0x07, 0x63, 0x03, 0x05, - 0x45, 0x40, 0x00, 0x67, 0xD8, 0xFE, 0xFF, 0x27, 0x05, 0xFD, 0x0A, 0x7E, 0x04, 0xFB, 0x61, 0x55, - 0x4A, 0x00, 0x28, 0xFB, 0x01, 0xF3, 0x29, 0xFB, 0x44, 0x46, 0x40, 0x45, 0x10, 0x61, 0x7E, 0x60, - 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, 0x31, 0x02, 0xB3, 0x60, 0x58, 0x4F, 0x22, 0x78, - 0xFF, 0xFF, 0x7F, 0x67, 0x03, 0x63, 0x2A, 0x02, 0x26, 0x40, 0x01, 0x2B, 0x24, 0x00, 0x98, 0xFE, - 0x19, 0x05, 0x1B, 0x60, 0xB8, 0x62, 0xA2, 0xD5, 0x0E, 0xF2, 0x14, 0x18, 0x02, 0x18, 0x09, 0xF4, - 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, - 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x08, 0xB9, 0x10, 0x7E, 0x00, 0x7F, - 0x0E, 0xFA, 0x09, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xF6, 0xA0, 0x7F, 0x67, 0x07, 0x63, - 0x05, 0x05, 0x45, 0x40, 0xD8, 0xFE, 0x00, 0x67, 0xD0, 0xFE, 0xD9, 0xFE, 0xFF, 0x27, 0x05, 0xFD, - 0x0B, 0x7E, 0x04, 0xFB, 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB0, 0x80, 0xBC, - 0x08, 0x28, 0xA3, 0xDB, 0x61, 0x55, 0x63, 0x00, 0x04, 0xB5, 0x82, 0xB5, 0x25, 0x02, 0x04, 0x03, - 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, 0xA3, 0xD3, 0x99, 0xFE, 0x04, 0x04, 0x02, 0xBC, 0xFE, 0xB4, - 0xA3, 0xDB, 0x56, 0x00, 0xBC, 0xF3, 0x20, 0x40, 0x80, 0x26, 0x52, 0x00, 0xA3, 0xD3, 0xFF, 0xA0, - 0xF8, 0xB4, 0x02, 0x02, 0xA3, 0xDB, 0x1C, 0x00, 0x04, 0xBC, 0xBF, 0xB4, 0xA3, 0xDB, 0x08, 0xB0, - 0x01, 0x64, 0x08, 0x24, 0x02, 0x64, 0x28, 0xFB, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0xD0, 0xFE, - 0x3F, 0x00, 0xBF, 0xB4, 0xA3, 0xDB, 0x3C, 0x00, 0x40, 0xB0, 0xFF, 0xFF, 0xFA, 0x02, 0xF8, 0xB4, - 0xA3, 0xDB, 0x08, 0xB5, 0x07, 0x7C, 0x01, 0x02, 0xBC, 0xF9, 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, - 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB5, 0x07, 0xB5, 0x08, 0x28, 0xC4, 0x02, - 0x99, 0xFE, 0x26, 0x05, 0x20, 0x44, 0x80, 0x26, 0x23, 0x00, 0x20, 0x2A, 0x00, 0x00, 0x40, 0x2A, - 0x1F, 0x00, 0xBF, 0xB4, 0x40, 0x40, 0x09, 0x00, 0xA8, 0xFF, 0x20, 0x44, 0x99, 0xFE, 0x02, 0x05, - 0x80, 0x2A, 0x03, 0x00, 0x40, 0xBC, 0x40, 0x40, 0x13, 0x00, 0x00, 0xF1, 0x80, 0xBC, 0x40, 0x40, - 0x64, 0x44, 0xE0, 0x84, 0xE8, 0x84, 0x0A, 0x36, 0x29, 0x01, 0x0B, 0x36, 0x5A, 0x01, 0x28, 0xFB, - 0x01, 0xF1, 0x29, 0xF9, 0x02, 0xF1, 0x2A, 0xF9, 0x03, 0xF1, 0x2B, 0xF9, 0xD0, 0xFE, 0xAE, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0x3E, 0x75, 0x44, 0x02, 0xB0, 0x01, 0xB0, 0x28, 0x02, 0xDC, 0x02, - 0x04, 0xB0, 0x08, 0xB0, 0x0B, 0x02, 0x20, 0x02, 0x40, 0x26, 0xA7, 0xFF, 0x8C, 0xFF, 0x75, 0x40, - 0x80, 0x2B, 0x01, 0x00, 0xAB, 0xFF, 0x75, 0x44, 0x8D, 0xFF, 0xEA, 0x01, 0x0A, 0xF3, 0xAA, 0xFF, - 0x60, 0x40, 0x20, 0x2B, 0x02, 0x00, 0x60, 0xFF, 0x0D, 0x00, 0x01, 0x26, 0x0C, 0x00, 0xC0, 0x60, - 0x00, 0x7C, 0xA0, 0x84, 0x80, 0x3B, 0x02, 0x00, 0xC0, 0x67, 0x03, 0x00, 0x40, 0x3B, 0x02, 0x00, - 0x00, 0x67, 0x0A, 0xFB, 0xD5, 0x01, 0xD4, 0x01, 0xAB, 0xFF, 0x00, 0x00, 0xD1, 0x01, 0x79, 0x63, - 0xFF, 0xFF, 0xFF, 0x1F, 0xA9, 0xFF, 0x77, 0x44, 0x60, 0x57, 0x10, 0x60, 0x00, 0x75, 0x40, 0x4A, - 0x01, 0x2A, 0x1C, 0x00, 0x24, 0x44, 0xAC, 0x86, 0x08, 0xF2, 0x18, 0x03, 0x1B, 0x60, 0xBE, 0x65, - 0xD4, 0x80, 0x0E, 0xF2, 0x02, 0x03, 0xA5, 0xD5, 0x04, 0x00, 0x01, 0xBC, 0x0E, 0xFA, 0x09, 0xF4, - 0xD1, 0xFE, 0x46, 0x44, 0x0B, 0x18, 0x66, 0x44, 0x10, 0xFB, 0x66, 0x47, 0x20, 0xBF, 0x3B, 0x42, - 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, 0x01, 0x75, 0x10, 0xBC, 0x0E, 0xFA, 0x2A, 0x44, 0x08, 0x2A, - 0x18, 0x00, 0x23, 0x44, 0x00, 0xA8, 0x5C, 0x43, 0x14, 0x03, 0x1B, 0x60, 0xB8, 0x62, 0xA2, 0xD5, - 0x01, 0x00, 0x09, 0xF4, 0x0E, 0xF2, 0x0D, 0x18, 0x08, 0xB0, 0x18, 0xAC, 0xFA, 0x03, 0x0E, 0xFA, - 0x66, 0x43, 0x11, 0xFD, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, - 0x08, 0x75, 0x2A, 0x44, 0x06, 0x22, 0x2D, 0x00, 0x22, 0x44, 0x00, 0xA8, 0x60, 0x46, 0x0E, 0xF2, - 0x28, 0x03, 0x10, 0xB0, 0x01, 0xBC, 0x03, 0x02, 0x00, 0x64, 0x40, 0x42, 0x22, 0x00, 0x0E, 0xFA, - 0xD1, 0xFE, 0x1B, 0x60, 0xB2, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x80, 0x00, 0x46, 0x42, 0x19, 0x02, - 0x22, 0x47, 0x40, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x23, 0xF2, 0x66, 0x43, 0x00, 0xA8, - 0x0E, 0xF2, 0x08, 0x02, 0x60, 0x40, 0x02, 0x2A, 0xE4, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, - 0x02, 0x75, 0x07, 0x00, 0x60, 0x40, 0x04, 0x2A, 0xDC, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, - 0x04, 0x75, 0x2A, 0x44, 0x80, 0x2A, 0x19, 0x00, 0x21, 0x44, 0xAC, 0x86, 0x0E, 0xF2, 0x15, 0x03, - 0x01, 0xBC, 0x0E, 0xFA, 0xD1, 0xFE, 0x1B, 0x60, 0xCA, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x56, 0x00, - 0x46, 0x41, 0x0B, 0x02, 0x21, 0x47, 0x10, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, - 0x66, 0x43, 0x08, 0xFD, 0x10, 0xBC, 0x0E, 0xFA, 0x80, 0x75, 0x2A, 0x44, 0x10, 0xB0, 0x20, 0x44, - 0x15, 0x03, 0x7F, 0xB4, 0x40, 0x40, 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB0, - 0x80, 0xB0, 0x09, 0x03, 0x08, 0x03, 0x40, 0xBC, 0x7F, 0xB4, 0x04, 0xB0, 0xA3, 0xDB, 0x03, 0x03, - 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0xB1, 0x60, 0x90, 0x78, 0xFF, 0xFF, 0xB1, 0x60, 0xC0, 0x78, - 0xFF, 0xFF, 0xE8, 0xFE, 0x14, 0x05, 0xEA, 0xFE, 0x24, 0x05, 0xE9, 0xFE, 0x1C, 0x05, 0xE7, 0xFE, - 0x09, 0x05, 0x47, 0xFF, 0x20, 0x44, 0x0F, 0x22, 0x03, 0x00, 0xCC, 0x84, 0x40, 0x40, 0x0F, 0x22, - 0xB8, 0xFE, 0xEC, 0x01, 0x23, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0xE8, 0x02, 0x6E, 0x01, 0x24, 0x41, - 0x00, 0xB9, 0x1B, 0x60, 0xBE, 0x65, 0x45, 0x47, 0xE1, 0x02, 0x58, 0x4F, 0x0F, 0x00, 0xDE, 0x02, - 0x5C, 0x4A, 0x46, 0x44, 0x50, 0x01, 0x22, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0x08, 0x24, 0x81, 0x01, - 0xD5, 0x01, 0x21, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0xA6, 0x03, 0xD0, 0x01, 0x27, 0xD3, 0x03, 0x00, - 0x10, 0xB0, 0x09, 0xF2, 0x04, 0x03, 0xAC, 0x86, 0x0E, 0xF2, 0xFA, 0x02, 0x08, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0E, 0xF3, 0x0F, 0x60, 0xFE, 0x65, 0x0C, 0xF3, 0x24, 0x86, 0x24, 0x46, 0x60, 0x40, - 0xFB, 0x3B, 0x07, 0x00, 0x80, 0x26, 0x02, 0x00, 0x23, 0x46, 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, - 0x0C, 0x00, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, - 0x39, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x45, 0x00, 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, - 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0E, 0xFB, 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, - 0x00, 0x72, 0x7E, 0x71, 0xAC, 0xFF, 0xB1, 0x60, 0xC0, 0x78, 0xFF, 0xFF, 0x8E, 0xFF, 0x0F, 0xF3, - 0x0F, 0x60, 0xFE, 0x65, 0x24, 0x86, 0x0D, 0xF3, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, 0x02, 0x00, - 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x16, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x22, 0x00, 0x04, 0x05, - 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0F, 0xFB, 0x2E, 0xF5, - 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, 0x8D, 0xFF, 0xAD, 0xFF, 0xB1, 0x60, - 0xC0, 0x78, 0xFF, 0xFF, 0x25, 0x44, 0x8A, 0xF1, 0x8B, 0xF1, 0xD0, 0x80, 0xD0, 0x80, 0x07, 0x04, - 0x01, 0x06, 0x05, 0x00, 0x25, 0x46, 0x01, 0xF0, 0x03, 0x67, 0xA0, 0x85, 0x94, 0x80, 0x2F, 0x58, - 0xFF, 0xFF, 0x25, 0x46, 0x26, 0x41, 0x46, 0x63, 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB5, 0xD5, 0x81, - 0x00, 0xF2, 0x05, 0x04, 0x04, 0x63, 0x60, 0x46, 0xF7, 0x1B, 0x42, 0xFE, 0x0D, 0x00, 0x61, 0x44, - 0xC5, 0x81, 0x63, 0x45, 0xC5, 0x81, 0x9C, 0x84, 0xDC, 0x84, 0x01, 0xF2, 0xF0, 0x85, 0xF0, 0x80, - 0x65, 0x44, 0xF8, 0x85, 0xFF, 0xFF, 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x1B, 0x60, - 0xD0, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xAC, 0x86, 0x0E, 0xF2, 0x07, 0x03, 0x00, 0xA8, 0x09, 0xF2, - 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, 0x08, 0xFE, 0x17, 0x00, 0x8C, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, - 0x00, 0xB4, 0x12, 0x06, 0x09, 0x60, 0x08, 0x61, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, - 0xB3, 0x60, 0x58, 0x4E, 0x97, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x06, 0x03, 0x2A, 0x43, 0xB3, 0x60, - 0x58, 0x4E, 0xB8, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x41, 0x4A, - 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, 0xB3, 0x60, 0x58, 0x4E, 0x97, 0x78, 0xFF, 0xFF, 0x07, 0x03, - 0x2A, 0x43, 0xB3, 0x60, 0x58, 0x4E, 0xB8, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0x0D, 0x00, 0x1B, 0x60, - 0xD0, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xAC, 0x86, 0x0E, 0xF2, 0x06, 0x03, 0x00, 0xA8, 0x09, 0xF2, - 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x8D, 0xF3, - 0x7C, 0x63, 0x00, 0xBE, 0x40, 0x45, 0x1A, 0x03, 0x00, 0x65, 0x65, 0x44, 0xDC, 0x85, 0x84, 0xA1, - 0x00, 0xF2, 0x06, 0x06, 0x01, 0xFC, 0x00, 0xA8, 0x60, 0x46, 0xF7, 0x02, 0x40, 0x45, 0x0E, 0x00, - 0x8C, 0xF3, 0x00, 0x63, 0xD4, 0x84, 0x8C, 0xFB, 0x80, 0x60, 0x7C, 0x64, 0x01, 0xFA, 0x00, 0xF0, - 0x00, 0xFC, 0xD3, 0x80, 0x8D, 0xF9, 0x02, 0x02, 0x8E, 0xF9, 0x08, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, - 0x66, 0x44, 0x25, 0x46, 0x05, 0xFA, 0x06, 0xFA, 0x01, 0xF0, 0x03, 0x67, 0x02, 0xFC, 0xB0, 0x84, - 0x3A, 0x7E, 0x01, 0xFA, 0x12, 0x64, 0x03, 0xFA, 0x00, 0xF0, 0x04, 0xF8, 0x00, 0x64, 0x0C, 0x61, - 0x10, 0x63, 0x59, 0xDA, 0xFE, 0x1F, 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, - 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, 0xE4, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, - 0xDC, 0x84, 0xA2, 0xDA, 0xBE, 0xD2, 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, - 0xA3, 0xDA, 0x04, 0x00, 0x0A, 0xFA, 0x60, 0x46, 0x25, 0x44, 0x09, 0xFA, 0x61, 0x46, 0xBE, 0xDA, - 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x44, 0x00, 0xA8, 0x07, 0x4B, 0x0C, 0x03, 0x58, 0x4F, 0x33, 0x00, - 0x0B, 0x47, 0x1B, 0x60, 0xC4, 0x65, 0x27, 0x44, 0xD4, 0x80, 0x00, 0x64, 0x01, 0x02, 0x0F, 0xFA, - 0x58, 0x4F, 0xD3, 0x01, 0x70, 0x00, 0x25, 0x43, 0xE3, 0x84, 0x7C, 0x41, 0x02, 0x04, 0xE8, 0x81, - 0xE4, 0x63, 0x61, 0x46, 0xA3, 0xD2, 0x00, 0x7C, 0x40, 0x45, 0xBF, 0xD8, 0xA3, 0xD8, 0xBE, 0xD8, - 0x27, 0x42, 0x5A, 0xD3, 0x25, 0x5C, 0x60, 0x41, 0x02, 0x1B, 0x27, 0xD9, 0x05, 0x00, 0x25, 0x46, - 0x0A, 0xFA, 0x61, 0x46, 0x25, 0x44, 0x09, 0xFA, 0x25, 0x44, 0x27, 0x43, 0x00, 0x61, 0x60, 0x46, - 0x09, 0xF2, 0x08, 0xFC, 0x00, 0xA8, 0xDD, 0x81, 0xFA, 0x02, 0xBF, 0xD1, 0x66, 0x44, 0xBE, 0xDB, - 0xC1, 0x84, 0xBF, 0xDB, 0x48, 0x00, 0x25, 0x46, 0xE4, 0x63, 0x08, 0xF2, 0x89, 0xF2, 0x1E, 0x18, - 0x40, 0x47, 0xE0, 0x84, 0xE8, 0x85, 0x02, 0x05, 0xE8, 0x83, 0x00, 0x65, 0x65, 0x46, 0xBF, 0xD2, - 0x61, 0x5C, 0xCC, 0x84, 0xA2, 0xDA, 0x25, 0x46, 0x0A, 0xF2, 0x00, 0xB9, 0x65, 0x46, 0x08, 0x24, - 0xBE, 0xDA, 0x02, 0x1B, 0xA3, 0xD8, 0x02, 0x00, 0x60, 0x46, 0x89, 0xFA, 0x00, 0xB9, 0x61, 0x46, - 0x08, 0x28, 0x0A, 0xFA, 0x25, 0x46, 0x89, 0xFC, 0x8A, 0xFC, 0x88, 0xFC, 0x2F, 0x58, 0xFF, 0xFF, - 0x00, 0x61, 0x28, 0x65, 0x25, 0x43, 0x8E, 0xF3, 0xAF, 0x83, 0x00, 0xBE, 0x18, 0x03, 0x02, 0x03, - 0x00, 0xFC, 0x01, 0x00, 0x8D, 0xFD, 0x63, 0x46, 0x65, 0x44, 0xCC, 0x85, 0x00, 0xF2, 0x07, 0x02, - 0x8E, 0xF5, 0x00, 0x64, 0x00, 0xFA, 0xDE, 0x60, 0xAF, 0x64, 0x09, 0xFB, 0x08, 0x00, 0x66, 0x43, - 0x00, 0xBE, 0xDD, 0x81, 0xF1, 0x02, 0x8C, 0xF1, 0x8E, 0xFD, 0xC1, 0x84, 0x8C, 0xFB, 0x2E, 0x58, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x45, 0x29, 0x43, 0xFC, 0xA3, 0x66, 0x44, 0xBD, 0xDB, 0x25, 0x44, - 0xBD, 0xDB, 0x00, 0x64, 0xBD, 0xDB, 0x03, 0x61, 0x0E, 0x65, 0x1B, 0x60, 0xD8, 0x63, 0x43, 0x49, - 0xA3, 0xD3, 0x06, 0xA3, 0x00, 0xA8, 0xCD, 0x81, 0x04, 0x02, 0xF9, 0x02, 0xB1, 0x60, 0xC0, 0x78, - 0xFF, 0xFF, 0x01, 0x26, 0xE6, 0x01, 0xD4, 0x80, 0x60, 0x45, 0xE3, 0x05, 0xF6, 0xA3, 0xBD, 0xD1, - 0xBD, 0xD1, 0x44, 0x47, 0x44, 0x48, 0x44, 0x45, 0x1C, 0x60, 0x16, 0x64, 0x44, 0xD7, 0xFF, 0xFF, - 0xFF, 0xFF, 0x48, 0xFE, 0x8D, 0xF5, 0x8C, 0xF3, 0x0D, 0x18, 0xCC, 0x84, 0x8C, 0xFB, 0x80, 0x60, - 0x7C, 0x64, 0x01, 0xFA, 0x00, 0x64, 0x00, 0xF0, 0x00, 0xFA, 0xD0, 0x80, 0x8D, 0xF9, 0x02, 0x02, - 0x8E, 0xF9, 0x08, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x1B, 0x60, 0x88, 0x63, 0x0D, 0x65, 0x00, 0x61, - 0x41, 0x48, 0xA3, 0xD3, 0x06, 0xA3, 0xAC, 0x86, 0x00, 0x61, 0x09, 0x03, 0x00, 0xF2, 0x09, 0xF0, - 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, 0xF6, 0x01, 0x61, 0x44, - 0x25, 0x46, 0x27, 0xDA, 0x65, 0x44, 0x28, 0x45, 0x45, 0x88, 0xCC, 0x85, 0x5A, 0x87, 0xE9, 0x02, - 0x00, 0x64, 0x27, 0xDA, 0x5A, 0xDA, 0x5A, 0x87, 0x88, 0xF3, 0x87, 0xF1, 0x02, 0xA4, 0x60, 0x46, - 0x60, 0x45, 0x00, 0x61, 0x1E, 0xF2, 0xFF, 0xFF, 0xAC, 0x86, 0x00, 0xF2, 0x04, 0x03, 0xAC, 0x86, - 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x65, 0x44, 0x02, 0xA5, 0x65, 0x46, 0x64, 0x44, 0xCC, 0x9C, - 0xFF, 0xFF, 0xF0, 0x02, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, 0x28, 0x45, 0x45, 0x88, - 0x88, 0xF3, 0x87, 0xF1, 0x02, 0xA4, 0x60, 0x46, 0x60, 0x45, 0x00, 0x61, 0x72, 0xF2, 0xFF, 0xFF, - 0xAC, 0x86, 0x00, 0xF2, 0x09, 0x03, 0x00, 0xF2, 0x09, 0xF0, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, - 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, 0xF6, 0x01, 0x65, 0x44, 0x02, 0xA5, 0x65, 0x46, 0x64, 0x44, - 0xCC, 0x9C, 0x61, 0x44, 0xEB, 0x02, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, 0x28, 0x45, 0x45, 0x88, - 0x06, 0x60, 0x40, 0x65, 0x8D, 0xF3, 0x01, 0x61, 0xAC, 0x86, 0x00, 0xF2, 0x03, 0x03, 0xD5, 0x80, - 0xDD, 0x81, 0xFA, 0x04, 0xCD, 0x84, 0x25, 0x46, 0x27, 0xDA, 0x28, 0x45, 0xC4, 0x84, 0x5A, 0xDA, - 0xDA, 0x81, 0x8C, 0xF1, 0x59, 0xD8, 0x1B, 0x60, 0x86, 0x64, 0x18, 0x63, 0xA0, 0xD1, 0x06, 0xA4, - 0x59, 0xD8, 0xFC, 0x1F, 0x00, 0x64, 0x59, 0xDA, 0x59, 0xDA, 0x01, 0x60, 0x1C, 0x64, 0x0A, 0x63, - 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x7E, 0xF1, 0x59, 0xD8, 0x45, 0x01, 0x07, 0x4B, 0xB4, 0x60, - 0x58, 0x4F, 0x23, 0x78, 0xFF, 0xFF, 0x0B, 0x47, 0x58, 0x4F, 0x21, 0x00, 0x3C, 0x01, 0x07, 0x4B, - 0xB4, 0x60, 0x58, 0x4F, 0x23, 0x78, 0xFF, 0xFF, 0x0B, 0x47, 0x27, 0x44, 0x00, 0xBE, 0x08, 0xF0, - 0x15, 0x03, 0x64, 0x42, 0x4A, 0xD3, 0x09, 0xF2, 0xDC, 0x83, 0xA2, 0xDD, 0x25, 0x43, 0x09, 0xFC, - 0x63, 0x46, 0x27, 0x43, 0x0A, 0xFC, 0x09, 0xFA, 0x08, 0xF8, 0x00, 0xA8, 0x66, 0x43, 0x03, 0x02, - 0x64, 0x44, 0x58, 0xDD, 0x03, 0x00, 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, 0x1C, 0x01, 0x27, 0x43, - 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, 0xE4, 0x63, 0x61, 0x46, - 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, 0xA2, 0xDA, 0xA3, 0xD2, 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, - 0x25, 0x44, 0x61, 0x46, 0xBE, 0xDA, 0x04, 0x00, 0x09, 0xFA, 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, - 0x61, 0x46, 0xA3, 0xDA, 0x2F, 0x58, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x03, 0x02, - 0x28, 0xE2, 0x40, 0xFF, 0xA1, 0xFF, 0x84, 0xFF, 0xBF, 0x60, 0xAD, 0x64, 0x40, 0x42, 0xB5, 0x60, - 0xA2, 0x64, 0x40, 0x40, 0x9D, 0xF3, 0x66, 0xFB, 0x0F, 0x60, 0x9A, 0x63, 0xAA, 0xF3, 0xBD, 0xDB, - 0x00, 0x60, 0x9A, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xA3, 0xDB, 0x5C, 0x49, - 0x0A, 0x64, 0x40, 0x4B, 0x5C, 0x5C, 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0x89, 0xFF, - 0x03, 0x60, 0xFF, 0x73, 0x88, 0xFF, 0xB5, 0x60, 0xA2, 0x78, 0xFF, 0xFF, 0xA0, 0xFE, 0x07, 0x05, - 0xA3, 0xFE, 0x07, 0x05, 0xA1, 0xFE, 0x50, 0x05, 0x60, 0x64, 0x3B, 0xDB, 0x10, 0x00, 0x20, 0x58, - 0xFF, 0xFF, 0xFA, 0x01, 0x12, 0x60, 0xCC, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0xFB, 0xB4, 0xA3, 0xDB, - 0xA0, 0x4C, 0x59, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, - 0xFF, 0xFF, 0x83, 0x3E, 0x40, 0x60, 0x0B, 0x65, 0x2B, 0x44, 0x00, 0x63, 0xE8, 0x80, 0xF8, 0x84, - 0x02, 0x24, 0x94, 0x84, 0xF3, 0x83, 0xCD, 0x81, 0xFF, 0xFF, 0xF8, 0x02, 0xDF, 0x83, 0x2F, 0x58, - 0x40, 0x4B, 0x00, 0x62, 0x01, 0x64, 0xD4, 0x80, 0xE0, 0x84, 0x1A, 0x03, 0xD4, 0x80, 0xE0, 0x84, - 0x15, 0x03, 0x61, 0x44, 0x11, 0x61, 0xE0, 0x84, 0xCD, 0x81, 0xFD, 0x04, 0x01, 0x00, 0xE0, 0x84, - 0xF2, 0x82, 0xFF, 0xFF, 0x02, 0x24, 0xC6, 0x82, 0x02, 0x28, 0xD6, 0x82, 0xE2, 0x80, 0xCD, 0x81, - 0x02, 0x28, 0x01, 0xBC, 0xF4, 0x02, 0x01, 0x2A, 0xC6, 0x82, 0x03, 0x00, 0xE9, 0x81, 0xF2, 0x82, - 0x61, 0x44, 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0xA8, 0x10, 0x61, 0x04, 0x03, 0xF0, 0x84, 0xCD, 0x81, - 0xFD, 0x04, 0x61, 0x44, 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x3B, 0xDB, 0x16, 0x60, 0xA8, 0x63, - 0xBD, 0xD3, 0xA3, 0xD1, 0x60, 0x40, 0x04, 0x3A, 0x2D, 0x00, 0x00, 0x64, 0x4A, 0xDB, 0x1B, 0x60, - 0x88, 0x63, 0xA3, 0xD3, 0x46, 0x43, 0xAC, 0x86, 0x3C, 0x45, 0x23, 0x03, 0xD4, 0x80, 0x07, 0xF2, - 0x02, 0x02, 0x09, 0xF2, 0xF8, 0x01, 0xD0, 0x80, 0x09, 0xF2, 0xF5, 0x02, 0x60, 0x43, 0x80, 0x67, - 0xB0, 0x81, 0x1B, 0x60, 0xDA, 0x62, 0x61, 0x44, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x09, 0x60, 0x08, 0x65, 0x0E, 0xF2, 0x02, 0xF2, 0x60, 0x40, - 0xF0, 0x37, 0x05, 0x00, 0x90, 0xF3, 0xD4, 0x80, 0xCC, 0x84, 0x01, 0x02, 0x90, 0xFB, 0x63, 0x44, - 0xDA, 0x01, 0x23, 0x46, 0x3C, 0x44, 0xAC, 0x80, 0xFF, 0xFF, 0x89, 0x02, 0x6A, 0xF3, 0x6B, 0xF3, - 0x02, 0xA8, 0x02, 0xA8, 0x08, 0x02, 0x00, 0x64, 0x6C, 0xFB, 0x6A, 0xFB, 0x6B, 0xFB, 0x00, 0x64, - 0x6D, 0xFB, 0xCA, 0xFE, 0x97, 0x00, 0x03, 0x02, 0x00, 0x64, 0x6B, 0xFB, 0xCA, 0xFE, 0x01, 0x64, - 0x3B, 0xDB, 0x1B, 0x60, 0x8E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x35, 0x03, - 0x2C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x8A, 0x00, 0x2E, 0xF2, 0x12, 0x60, 0xCE, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, - 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, - 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2C, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x88, 0xF3, - 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x63, 0x02, 0x66, 0x45, 0x63, 0x46, 0x06, 0xF2, 0x65, 0x46, - 0x80, 0xB0, 0x09, 0xF2, 0x5C, 0x03, 0xAC, 0x86, 0xCA, 0x01, 0x6B, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, - 0xFF, 0xFF, 0x50, 0x02, 0x1B, 0x60, 0xA0, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x0F, 0x03, 0x77, 0xF1, 0x07, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0x09, 0xF2, 0x03, 0x02, 0xAC, 0x86, - 0x07, 0xF2, 0xFA, 0x02, 0x03, 0x02, 0x00, 0x64, 0x77, 0xFB, 0xEC, 0x01, 0x46, 0x5C, 0x3F, 0x00, - 0x1B, 0x60, 0xA6, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x01, 0x03, 0x37, 0x02, - 0x6C, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x14, 0x02, 0x1B, 0x60, 0x94, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x0B, 0x03, 0x2A, 0xF0, 0x20, 0x67, 0x09, 0xF2, 0xB0, 0x83, - 0x00, 0xA8, 0x00, 0x64, 0x02, 0x03, 0x2A, 0xFC, 0x01, 0x00, 0x6C, 0xFB, 0x20, 0x00, 0x00, 0x64, - 0x6C, 0xFB, 0x1B, 0x60, 0x88, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x12, 0x03, - 0x2A, 0xF0, 0x08, 0x67, 0xA0, 0x80, 0xFF, 0xFF, 0x12, 0x03, 0x77, 0xF1, 0x07, 0xF2, 0xFF, 0xFF, - 0xD0, 0x80, 0x09, 0xF2, 0x03, 0x02, 0xAC, 0x86, 0x07, 0xF2, 0xFA, 0x02, 0x08, 0x02, 0x00, 0x64, - 0x77, 0xFB, 0xE7, 0x01, 0x00, 0x64, 0x77, 0xFB, 0xB5, 0x60, 0xA2, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0xFC, 0xFB, 0x46, 0x5C, 0x21, 0x60, 0x98, 0x63, 0xA3, 0xD3, 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, - 0xFF, 0xFF, 0x0D, 0xF2, 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, 0x07, 0xF0, 0x2A, 0xF2, 0xFF, 0xFF, - 0x77, 0xF9, 0x60, 0x40, 0x08, 0x2B, 0x05, 0x00, 0x00, 0x64, 0x48, 0xFB, 0xB8, 0x60, 0x2D, 0x78, - 0xFF, 0xFF, 0x00, 0x64, 0xD0, 0x80, 0x88, 0xF3, 0x07, 0x02, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, - 0xA2, 0xDA, 0xBD, 0x60, 0x28, 0x78, 0xFF, 0xFF, 0xD0, 0x80, 0xB8, 0xF3, 0x03, 0x03, 0x60, 0x40, - 0x03, 0x3A, 0x00, 0x00, 0x2A, 0xF2, 0x00, 0x63, 0x40, 0x47, 0x50, 0x36, 0x01, 0x00, 0x01, 0x63, - 0x48, 0xFD, 0x4A, 0xF3, 0x35, 0xFA, 0x10, 0xA4, 0x4A, 0xFB, 0x00, 0x64, 0x15, 0xFA, 0x16, 0xFA, - 0x0F, 0xFA, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x0E, 0xF0, 0x63, 0x46, 0x00, 0x7F, - 0x64, 0x5E, 0x4B, 0xFB, 0x64, 0x44, 0x00, 0x7E, 0xBB, 0xFB, 0x07, 0xF0, 0x88, 0xF3, 0xFF, 0xFF, - 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xBB, 0xF3, 0xBA, 0xFB, 0x60, 0x41, 0x03, 0xF2, 0x00, 0xF4, - 0x01, 0xF2, 0xFC, 0xA5, 0x00, 0x7F, 0xD4, 0x84, 0x27, 0x45, 0x3C, 0x46, 0x1A, 0xFA, 0x22, 0x63, - 0x7B, 0x60, 0xFF, 0x64, 0xA4, 0x84, 0x03, 0x2B, 0x1C, 0x63, 0x2A, 0xFA, 0x60, 0x40, 0xA4, 0x36, - 0x14, 0x63, 0x43, 0x4C, 0x00, 0x7C, 0x22, 0xF8, 0x64, 0x41, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, - 0x36, 0xF2, 0x63, 0x46, 0xFF, 0xB4, 0x22, 0xFA, 0x60, 0x40, 0x00, 0x36, 0x8E, 0x00, 0x2A, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x3A, 0x89, 0x00, 0x03, 0xF2, 0x00, 0xF4, 0xA0, 0xD2, 0xAA, 0x60, - 0xAA, 0x65, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x0A, 0x02, 0xD0, 0x80, 0x00, 0x64, 0x5A, 0xD0, - 0x06, 0x02, 0xD0, 0x80, 0xF8, 0x7F, 0xD0, 0x80, 0x01, 0x03, 0x01, 0x02, 0x01, 0x61, 0x62, 0x43, - 0x46, 0x43, 0x3C, 0x46, 0x07, 0xF4, 0x36, 0xF2, 0xFF, 0xFF, 0xA3, 0x46, 0x60, 0x40, 0x22, 0x26, - 0x45, 0x00, 0x60, 0x45, 0x63, 0x42, 0x5A, 0xD0, 0xCD, 0x81, 0x3C, 0x46, 0x14, 0x02, 0x64, 0x44, - 0x88, 0x3A, 0x11, 0x00, 0x8E, 0x3B, 0x0F, 0x00, 0x65, 0x44, 0x01, 0x26, 0x5E, 0x00, 0x04, 0x26, - 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x2D, 0x00, 0xA3, 0x46, 0x37, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x80, 0x2B, 0x53, 0x00, 0x3A, 0x00, 0xA3, 0x46, 0x65, 0x44, 0x01, 0x26, 0x0B, 0x00, 0x04, 0x26, - 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x1D, 0x00, 0x37, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, - 0x2C, 0x00, 0x17, 0x00, 0x88, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x36, 0xF2, 0x66, 0x43, 0xFF, 0xB4, - 0x3C, 0x46, 0x22, 0xF0, 0x60, 0x47, 0xB0, 0x84, 0x22, 0xFA, 0x63, 0x46, 0x37, 0xF0, 0x60, 0x40, - 0x04, 0x27, 0x03, 0x00, 0x10, 0x27, 0x01, 0x00, 0x04, 0x00, 0x64, 0x40, 0x80, 0x27, 0x15, 0x00, - 0x00, 0x00, 0x3C, 0x46, 0x02, 0x65, 0xBC, 0x60, 0x58, 0x78, 0xFF, 0xFF, 0xCD, 0x81, 0x63, 0x42, - 0x5A, 0xD0, 0x3C, 0x46, 0x0A, 0x02, 0x64, 0x44, 0x88, 0x3A, 0x07, 0x00, 0x77, 0x37, 0x1D, 0x00, - 0x78, 0x37, 0x1B, 0x00, 0x8E, 0x37, 0x19, 0x00, 0xF1, 0x01, 0x3C, 0x46, 0x22, 0xF0, 0x80, 0x67, - 0xB0, 0x84, 0xA2, 0xDA, 0xFF, 0xFF, 0x3F, 0xF2, 0x3E, 0xF0, 0x08, 0xA4, 0x60, 0x41, 0x22, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x03, 0x00, 0x06, 0x00, 0x04, 0x2B, - 0x04, 0x00, 0x61, 0x44, 0x64, 0x40, 0x10, 0x26, 0x3F, 0xFA, 0x3C, 0x46, 0x2C, 0xF2, 0x27, 0x40, - 0x01, 0x27, 0x32, 0xF2, 0xB5, 0xF1, 0x60, 0x40, 0x01, 0x26, 0x53, 0x00, 0x09, 0x60, 0x00, 0x64, - 0xD0, 0x80, 0x3F, 0xF2, 0x09, 0x06, 0x2C, 0x45, 0xC4, 0x84, 0xD0, 0x80, 0x40, 0x4A, 0x40, 0x06, - 0x60, 0x43, 0x64, 0x44, 0x54, 0x88, 0x18, 0x00, 0x60, 0x45, 0x1F, 0x60, 0x9C, 0x64, 0xA0, 0xD3, - 0xBB, 0xF3, 0x00, 0xBC, 0x60, 0x47, 0xEC, 0xA0, 0x33, 0x03, 0x32, 0x07, 0x2C, 0x44, 0xC4, 0x81, - 0x02, 0x60, 0x1C, 0x65, 0x45, 0x4A, 0xD5, 0x80, 0x2C, 0x45, 0x2A, 0x06, 0x27, 0x40, 0x04, 0x27, - 0x30, 0x00, 0x2A, 0x43, 0xD7, 0x85, 0x45, 0x48, 0xB6, 0xF1, 0x0F, 0xF2, 0xD3, 0x80, 0x01, 0x65, - 0x01, 0x07, 0x00, 0x65, 0xB4, 0x84, 0x0F, 0xFA, 0x00, 0x63, 0x3F, 0xF2, 0x28, 0x45, 0x60, 0x41, - 0xD4, 0x84, 0xDF, 0x83, 0xFC, 0x07, 0x14, 0xFC, 0x61, 0x44, 0x01, 0x36, 0x02, 0x00, 0x09, 0x3A, - 0x06, 0x00, 0x28, 0x44, 0x48, 0x88, 0x2A, 0x44, 0xC8, 0x83, 0x43, 0x4A, 0xE5, 0x01, 0x17, 0xFA, - 0x04, 0x60, 0x00, 0x64, 0x27, 0x45, 0xB4, 0x84, 0x2A, 0xFA, 0x28, 0x43, 0x16, 0xFC, 0x0D, 0x00, - 0x3F, 0xF2, 0x2C, 0x45, 0xB6, 0xF1, 0xC4, 0x81, 0xD1, 0x80, 0x0F, 0xF2, 0x01, 0x06, 0x01, 0xBC, - 0x0F, 0xFA, 0x3F, 0xF2, 0x17, 0xFA, 0x01, 0x64, 0x14, 0xFA, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, - 0x0E, 0xF0, 0x63, 0x46, 0x00, 0x7F, 0x64, 0x5E, 0x4B, 0xFB, 0x64, 0x44, 0x00, 0x7E, 0xBB, 0xFB, - 0x62, 0xF1, 0x60, 0x43, 0x60, 0x47, 0xD0, 0x80, 0xC0, 0x65, 0x01, 0x06, 0x64, 0x44, 0x0A, 0x36, - 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, 0x6E, 0x36, 0x0B, 0x64, 0x44, 0x86, - 0x2A, 0xF2, 0x07, 0xF0, 0x60, 0x40, 0xB0, 0x3A, 0x03, 0x00, 0x40, 0x3B, 0x01, 0x00, 0x12, 0x00, - 0x0C, 0xB4, 0x08, 0x3A, 0x55, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, 0x50, 0x00, - 0x17, 0xF2, 0x22, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x22, 0x22, 0x04, 0x00, 0x00, 0xA8, 0x01, 0xA8, - 0x47, 0x03, 0x46, 0x03, 0x3C, 0x46, 0x2A, 0xF0, 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x60, 0x45, - 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x43, 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x0A, 0x00, - 0x02, 0x00, 0x04, 0x27, 0x07, 0x00, 0x65, 0x44, 0x2A, 0x65, 0x60, 0x40, 0x03, 0x2B, 0x24, 0x65, - 0x45, 0x4C, 0x2E, 0x00, 0x65, 0x44, 0x2E, 0x65, 0x60, 0x40, 0x03, 0x2B, 0x28, 0x65, 0x45, 0x4C, - 0x07, 0xF0, 0x88, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0x00, 0x7C, 0x03, 0x03, 0x63, 0x40, 0x01, 0x2A, - 0x01, 0x00, 0x3D, 0xF1, 0x2A, 0xF2, 0xFF, 0xFF, 0x08, 0xB0, 0x3E, 0xF2, 0x19, 0x03, 0x60, 0x47, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x03, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x03, 0x1B, 0x60, - 0xD4, 0x62, 0x1B, 0x60, 0xAC, 0x64, 0xA2, 0xDB, 0x3C, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, 0xCE, 0xFE, 0xB5, 0x60, 0xEC, 0x78, 0xFF, 0xFF, - 0xBB, 0xF1, 0x2C, 0x45, 0x64, 0x43, 0x17, 0xF2, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, 0xB5, 0x60, 0x58, 0x4D, 0xC1, 0x78, - 0xFF, 0xFF, 0xAE, 0x82, 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, - 0x04, 0x0D, 0x63, 0x44, 0x80, 0x7E, 0xBB, 0xFB, 0x61, 0x44, 0xDC, 0x84, 0x2B, 0xF0, 0x1B, 0xFA, - 0x64, 0x44, 0x80, 0x27, 0x34, 0x00, 0x16, 0xF2, 0x0F, 0xF0, 0xAC, 0x84, 0x2C, 0x45, 0x29, 0x03, - 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, - 0x64, 0x45, 0x0F, 0xF0, 0xB5, 0x60, 0x58, 0x4D, 0xC1, 0x78, 0xFF, 0xFF, 0xAE, 0x82, 0xFC, 0xA2, - 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, 0x80, 0x67, 0xB0, 0x84, - 0x0F, 0xFA, 0x61, 0x44, 0xDC, 0x84, 0x1D, 0xFA, 0xDE, 0x65, 0xC4, 0x85, 0x26, 0x41, 0xE1, 0x81, - 0xC5, 0x84, 0x2B, 0xFA, 0x1B, 0xF0, 0xDE, 0x64, 0xC0, 0x85, 0x26, 0x44, 0xE0, 0x84, 0xC4, 0x84, - 0x10, 0xFA, 0x26, 0x44, 0x2C, 0xF0, 0x0A, 0xA4, 0x64, 0x40, 0x01, 0x26, 0x00, 0x64, 0x11, 0xFA, - 0xBB, 0xF3, 0x13, 0xFA, 0xFF, 0xFF, 0x0D, 0xF2, 0x3E, 0xF0, 0x60, 0x47, 0xFF, 0xB4, 0x64, 0x41, - 0x01, 0xB1, 0x01, 0x63, 0x1D, 0x02, 0x60, 0x41, 0xFF, 0x22, 0x04, 0x00, 0xB5, 0x60, 0x58, 0x4F, - 0xB2, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0x92, 0x64, 0xA0, 0xDD, 0x21, 0x60, 0x98, 0x62, 0xA2, 0xD3, - 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, 0xFF, 0xFF, 0x60, 0x41, 0x01, 0x63, 0x61, 0x40, 0xFF, 0x22, - 0x04, 0x00, 0xB5, 0x60, 0x58, 0x4F, 0xB2, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0x94, 0x64, 0xA0, 0xDD, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x03, 0x00, 0xBA, 0x60, 0x4A, 0x78, 0xFF, 0xFF, - 0x22, 0xF2, 0x46, 0x43, 0x60, 0x40, 0x22, 0x26, 0x8B, 0x00, 0x01, 0x26, 0x05, 0x00, 0x04, 0x26, - 0x0C, 0x00, 0xBA, 0x60, 0x4A, 0x78, 0xFF, 0xFF, 0x04, 0x27, 0x03, 0x00, 0xBA, 0x60, 0x4A, 0x78, - 0xFF, 0xFF, 0x88, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x02, 0x00, 0x07, 0xF4, 0xFF, 0xFF, 0xA3, 0x46, - 0x2A, 0xF2, 0xA3, 0x46, 0x60, 0x40, 0x08, 0x27, 0x3B, 0x00, 0x88, 0xF3, 0x66, 0x5C, 0xD0, 0x80, - 0x37, 0xF0, 0x08, 0x03, 0x64, 0x40, 0x10, 0x2A, 0x12, 0x00, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, - 0x37, 0xFA, 0x24, 0x00, 0x3D, 0xF3, 0x01, 0x61, 0x60, 0x43, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, - 0xE9, 0x81, 0xA1, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0x91, 0x84, 0x37, 0xFA, 0x17, 0x00, 0x47, 0xF2, - 0xFF, 0xFF, 0x10, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0xFF, 0x60, 0xFF, 0x64, 0xDC, 0x84, 0x47, 0xFA, - 0x46, 0xF2, 0x16, 0x04, 0xDC, 0x84, 0x46, 0xFA, 0x45, 0xF2, 0x08, 0x04, 0xDC, 0x84, 0x45, 0xFA, - 0x05, 0x04, 0x37, 0xF2, 0xFF, 0xFF, 0xE0, 0x84, 0xE8, 0x84, 0x37, 0xFA, 0x0D, 0x60, 0x3E, 0x62, - 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC4, 0x60, 0x05, 0x78, 0xFF, 0xFF, 0x84, 0xFF, - 0x0D, 0x60, 0x3E, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC4, 0x60, 0x7D, 0x78, - 0xFF, 0xFF, 0x84, 0xFF, 0x88, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, - 0x3C, 0x46, 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x47, 0xF0, - 0x64, 0x41, 0x64, 0x47, 0xFF, 0xB4, 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, - 0xA3, 0x46, 0x3A, 0xFA, 0x64, 0x44, 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0xA3, 0x46, 0x46, 0xF2, - 0x45, 0xF0, 0xA3, 0x46, 0x3C, 0xFA, 0x3D, 0xF8, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, - 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x8A, 0x00, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x35, 0x00, 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, - 0x60, 0x40, 0x40, 0x2B, 0x27, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, 0xDE, 0x82, - 0xA2, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, - 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, - 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0xDA, 0x82, 0xA2, 0xD1, - 0xFF, 0xFF, 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, - 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0x60, 0x7C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, - 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, - 0x80, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, - 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, - 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, - 0xD1, 0x60, 0x00, 0xEA, 0x02, 0x64, 0x3B, 0xDB, 0xBD, 0x60, 0xEB, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0xFC, 0xFB, 0x07, 0xF0, 0x00, 0x64, 0xD0, 0x80, 0x88, 0xF3, 0x17, 0x03, 0xD0, 0x80, 0x66, 0x41, - 0x64, 0x46, 0x6F, 0xF2, 0x61, 0x46, 0x6D, 0x03, 0x60, 0x40, 0x00, 0x36, 0x6A, 0x00, 0x47, 0xF1, - 0x07, 0xF0, 0x64, 0x40, 0x02, 0x26, 0x01, 0x00, 0x0B, 0x00, 0x03, 0x12, 0xBB, 0x60, 0x4E, 0x78, - 0xFF, 0xFF, 0xFC, 0x0A, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, - 0x3E, 0xF2, 0x60, 0x45, 0x60, 0x47, 0x07, 0xB0, 0x00, 0x3A, 0x01, 0x00, 0xA6, 0x00, 0x65, 0x44, - 0x60, 0x40, 0x01, 0x36, 0x4E, 0x00, 0x02, 0x36, 0x4F, 0x00, 0x03, 0x36, 0x2D, 0x00, 0x04, 0x36, - 0x3E, 0x00, 0x52, 0x00, 0x00, 0x64, 0x4C, 0xFB, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, - 0x05, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, - 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, - 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, - 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, - 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0x1D, 0x00, 0x4C, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x4C, 0xFB, - 0xAB, 0xF3, 0x60, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x14, 0x02, 0x1C, 0x60, 0x0C, 0x62, 0x0F, 0x60, - 0x96, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xC3, 0x01, 0x4C, 0xF3, - 0x66, 0x41, 0xDC, 0x84, 0x4C, 0xFB, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x03, 0x7E, 0x6F, 0xFA, - 0x61, 0x46, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, - 0x01, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0xF5, 0x01, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0x8C, 0xFA, - 0x60, 0x47, 0x70, 0xF2, 0xFF, 0xB5, 0x08, 0x18, 0xE4, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x03, 0x02, - 0xFB, 0x04, 0x01, 0x64, 0x01, 0x00, 0x00, 0x64, 0x0C, 0xF4, 0x00, 0xA8, 0xFF, 0xFF, 0xE4, 0x02, - 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x70, 0xF2, 0xFF, 0xB5, 0x61, 0x46, - 0x00, 0xA8, 0xFF, 0xFF, 0x29, 0x03, 0xE0, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0x66, 0x41, - 0x64, 0x46, 0x70, 0xFA, 0x61, 0x46, 0x01, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, - 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, - 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, - 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, - 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0xA3, 0x01, 0xA2, 0x01, 0x65, 0x44, 0x60, 0x40, 0x01, 0x36, - 0xA8, 0x01, 0x02, 0x36, 0x01, 0x00, 0xA5, 0x01, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, - 0x01, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, - 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, - 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, - 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, - 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x3E, 0xF2, 0x60, 0x45, - 0x60, 0x47, 0x07, 0xB0, 0x00, 0x3A, 0x01, 0x00, 0xA3, 0x00, 0x65, 0x44, 0x60, 0x40, 0x01, 0x36, - 0x0B, 0x00, 0x02, 0x36, 0x14, 0x00, 0x03, 0x36, 0x47, 0x00, 0x04, 0x36, 0x5E, 0x00, 0x05, 0x36, - 0x0E, 0x00, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, - 0xFF, 0xFF, 0x02, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x07, 0xF0, - 0x01, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, - 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, - 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, - 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0x00, 0x63, 0x03, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x4C, 0xFD, - 0x1C, 0x60, 0x0C, 0x62, 0x0F, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x4C, 0xF3, - 0x02, 0xB0, 0x61, 0x46, 0xCC, 0x84, 0x05, 0x03, 0x04, 0x28, 0x4C, 0xFB, 0xBC, 0x60, 0x48, 0x78, - 0xFF, 0xFF, 0x04, 0x28, 0x4C, 0xFB, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x04, 0x7E, - 0x6F, 0xFA, 0x61, 0x46, 0xBC, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, - 0xFF, 0xFF, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x61, 0x46, 0xFF, 0xA0, 0xFF, 0xFF, 0x2F, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x29, 0x00, 0x64, 0x46, 0x70, 0xFA, - 0x01, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, - 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, - 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, - 0x6F, 0xF2, 0x00, 0x63, 0x03, 0x7E, 0x6F, 0xFA, 0x3C, 0x46, 0x4C, 0xFD, 0x51, 0x00, 0x50, 0x00, - 0x65, 0x44, 0x60, 0x40, 0x01, 0x36, 0x03, 0x00, 0x02, 0x36, 0x12, 0x00, 0x49, 0x00, 0x66, 0x41, - 0x64, 0x46, 0x70, 0xF2, 0x61, 0x46, 0x01, 0xB0, 0xFF, 0xFF, 0x42, 0x02, 0x07, 0xF0, 0x66, 0x41, - 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x02, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x39, 0x00, 0x38, 0x00, - 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x6F, 0xFA, 0x60, 0x47, - 0xFF, 0xB5, 0x70, 0xF2, 0x61, 0x46, 0xFF, 0xA0, 0xFF, 0xFF, 0xF1, 0x06, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0xEB, 0x01, 0x66, 0x41, 0x64, 0x46, 0x70, 0xFA, 0x61, 0x46, - 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, - 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, - 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, - 0x03, 0x64, 0x3B, 0xDB, 0xCA, 0xFE, 0x47, 0xF1, 0x01, 0x65, 0x32, 0x40, 0x04, 0x27, 0x08, 0x00, - 0x2C, 0xF2, 0x64, 0x45, 0x02, 0x22, 0x04, 0x00, 0x60, 0x40, 0x01, 0x26, 0x01, 0x00, 0xEC, 0x00, - 0x14, 0xF2, 0x65, 0x40, 0x01, 0x26, 0x1D, 0x00, 0x60, 0x45, 0x05, 0x64, 0x3B, 0xDB, 0x65, 0x44, - 0xCC, 0x85, 0x98, 0xF1, 0x1E, 0x60, 0xDE, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, - 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, - 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0xAF, 0x00, 0x60, 0x41, 0x2A, 0xF0, 0x00, 0x60, 0x0C, 0x64, 0xA0, 0x84, 0x04, 0x36, 0x02, 0x00, - 0x0C, 0x3A, 0x01, 0x00, 0xA5, 0x00, 0x61, 0x45, 0x60, 0x41, 0x98, 0xF1, 0x1E, 0x60, 0xDE, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, - 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x61, 0x40, 0x08, 0x36, 0x01, 0x00, 0x88, 0x00, - 0x14, 0xF2, 0x1C, 0x65, 0x60, 0x41, 0x00, 0x63, 0xCD, 0x81, 0xC7, 0x83, 0xFD, 0x02, 0x3F, 0xF0, - 0x2C, 0xF2, 0xC3, 0x83, 0x60, 0x40, 0x01, 0x2A, 0x29, 0x00, 0x98, 0xF1, 0x1E, 0x60, 0xDC, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x98, 0xF1, 0x1E, 0x60, - 0xE2, 0x64, 0xA0, 0xD3, 0x63, 0x45, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, - 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x52, 0x00, 0x98, 0xF1, 0x1E, 0x60, - 0xDA, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x98, 0xF1, - 0x1E, 0x60, 0xE0, 0x64, 0xA0, 0xD3, 0x63, 0x45, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, - 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, - 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x15, 0xF2, 0xFF, 0xFF, - 0x0F, 0xB4, 0x00, 0xA8, 0x01, 0xA8, 0x24, 0x03, 0x12, 0x03, 0x98, 0xF1, 0x1E, 0x60, 0xE8, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x11, 0x00, 0x98, 0xF1, - 0x1E, 0x60, 0xE6, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x04, 0x64, 0x3B, 0xDB, 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x06, 0xF0, 0xFF, 0x60, 0x5F, 0x64, - 0xA0, 0x84, 0x06, 0xFA, 0x61, 0x46, 0x1B, 0x60, 0xD4, 0x62, 0x1B, 0x60, 0xAC, 0x64, 0xA2, 0xDB, - 0x3C, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, - 0xCE, 0xFE, 0xB5, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0x64, 0x62, 0xA2, 0xD3, 0x07, 0xF4, - 0x06, 0xF2, 0x02, 0xA8, 0x3C, 0x46, 0x10, 0x03, 0x10, 0xB0, 0x2A, 0xF2, 0x0D, 0x03, 0x0E, 0xF2, - 0x0C, 0xB0, 0x60, 0x40, 0xF0, 0x37, 0x20, 0xBC, 0x02, 0x03, 0xFE, 0x7F, 0x0E, 0xFA, 0x23, 0xF0, - 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xCC, 0x01, 0x0F, 0xF0, 0x15, 0xF2, 0x64, 0x41, 0x01, 0x2A, - 0x02, 0x00, 0xB1, 0xF1, 0x09, 0x00, 0x03, 0x65, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x06, 0xF0, - 0x63, 0x46, 0xB0, 0xF1, 0x64, 0x40, 0x10, 0x2A, 0x64, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x15, 0xFA, - 0x3B, 0x07, 0x61, 0x40, 0x01, 0x2A, 0x09, 0x00, 0x1F, 0x60, 0x0E, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x08, 0x00, 0x1F, 0x60, 0x10, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x2A, 0xF0, 0x08, 0x67, 0xB0, 0x84, - 0xA2, 0xDA, 0x08, 0xF0, 0x1B, 0x60, 0x8E, 0x64, 0xD0, 0x80, 0x07, 0xF2, 0x46, 0x43, 0x88, 0xF1, - 0x06, 0x03, 0x60, 0x46, 0x86, 0xF4, 0xD0, 0x80, 0x80, 0xBB, 0x01, 0x03, 0x06, 0xFC, 0x23, 0x46, - 0x3E, 0xF2, 0x00, 0x63, 0x01, 0xB0, 0x43, 0x5C, 0xFC, 0xFC, 0x0B, 0x03, 0x1B, 0x60, 0xDA, 0x62, - 0x1B, 0x60, 0xA6, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xB5, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x49, 0xFB, 0x98, 0xF1, 0x1E, 0x60, - 0xE8, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x98, 0xF1, - 0x1E, 0x60, 0xEA, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x21, 0x60, 0x98, 0x63, 0xA3, 0xD3, 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, 0xFF, 0xFF, 0x0D, 0xF2, - 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xF0, - 0x66, 0x41, 0x64, 0x46, 0x06, 0xF2, 0x7F, 0x65, 0xA4, 0x9E, 0x06, 0xFA, 0x61, 0x46, 0x40, 0x01, - 0xBE, 0x60, 0x70, 0x78, 0xFF, 0xFF, 0x21, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0x01, 0x63, 0xC4, 0xB4, - 0x31, 0xFB, 0x32, 0xFD, 0xBE, 0x60, 0x1C, 0x62, 0x42, 0x40, 0xA0, 0x4C, 0x40, 0xBC, 0x7D, 0xB4, - 0xA0, 0x51, 0xA0, 0xFE, 0x1A, 0xFF, 0x1B, 0x60, 0xA0, 0x64, 0x08, 0xF0, 0x07, 0xF0, 0xD0, 0x80, - 0x1B, 0x60, 0xA6, 0x62, 0x14, 0x02, 0xA2, 0xD3, 0x01, 0x63, 0xAC, 0x86, 0x07, 0xF2, 0x0F, 0x03, - 0xD0, 0x80, 0x09, 0xF2, 0xFA, 0x02, 0x23, 0xFC, 0x1B, 0x60, 0xD4, 0x62, 0x1B, 0x60, 0xAC, 0x64, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x3C, 0x46, - 0x06, 0x64, 0xA1, 0xFF, 0x49, 0xFB, 0x83, 0x3E, 0x31, 0xF3, 0x87, 0x60, 0x80, 0x61, 0x1D, 0xF0, - 0x60, 0x40, 0x01, 0x2A, 0x15, 0x00, 0xFE, 0xB4, 0x31, 0xFB, 0x00, 0x64, 0x49, 0xFB, 0x01, 0x64, - 0x47, 0xFB, 0x21, 0x60, 0x98, 0x63, 0xA3, 0xD3, 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, 0xFF, 0xFF, - 0x00, 0x71, 0x64, 0x5F, 0x0D, 0xFA, 0x40, 0x64, 0x3B, 0xDB, 0xBE, 0x60, 0x70, 0x78, 0xFF, 0xFF, - 0x02, 0x2A, 0x1B, 0x00, 0xD1, 0x91, 0x8D, 0xE2, 0x41, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0x21, 0x60, - 0xA0, 0x63, 0xFD, 0xB4, 0x31, 0xFB, 0xA3, 0xD3, 0xB5, 0x60, 0x58, 0x4D, 0xE3, 0x78, 0xFF, 0xFF, - 0x02, 0x63, 0x60, 0x5C, 0x0D, 0xF2, 0x47, 0xFD, 0xFF, 0xB5, 0x60, 0x47, 0xD0, 0x80, 0xDC, 0x84, - 0x1F, 0x03, 0x60, 0x47, 0xB4, 0x84, 0x0D, 0xFA, 0x1B, 0x00, 0x08, 0x2A, 0x07, 0x00, 0x42, 0x64, - 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xF7, 0xB4, 0x31, 0xFB, 0x12, 0x00, 0x10, 0x2A, 0x09, 0x00, - 0x43, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, 0x31, 0xFB, 0xBD, 0x60, 0xEB, 0x78, - 0xFF, 0xFF, 0x44, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xDF, 0xB4, 0x31, 0xFB, 0x00, 0x00, - 0x2A, 0x64, 0x3B, 0xDB, 0xB5, 0x60, 0xA2, 0x64, 0x40, 0x40, 0xBA, 0x60, 0x4F, 0x78, 0xFF, 0xFF, - 0x12, 0x60, 0xCC, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x02, 0xB5, 0x04, 0xB5, 0x04, 0x03, 0x03, 0x03, - 0xBE, 0x60, 0xF7, 0x78, 0xFF, 0xFF, 0xEB, 0x60, 0x58, 0x4E, 0x24, 0x78, 0xFF, 0xFF, 0x31, 0x40, - 0x01, 0x2A, 0x29, 0x00, 0x9D, 0xFE, 0x27, 0x04, 0x26, 0x0A, 0x9F, 0xFE, 0x24, 0x05, 0x85, 0xFF, - 0x20, 0x44, 0x84, 0xFF, 0x40, 0x26, 0x1F, 0x00, 0x3F, 0x40, 0x20, 0x2B, 0x1C, 0x00, 0x38, 0x69, - 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x01, 0x2A, 0x15, 0x00, 0x1F, 0x60, 0x1A, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x65, 0xF1, 0x02, 0x60, - 0xEE, 0x64, 0x82, 0xFB, 0xFF, 0xFF, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0x83, 0xFB, 0x04, 0x64, - 0x84, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, 0x10, 0x64, 0x3B, 0xDB, 0x66, 0xF3, 0x73, 0x45, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x75, 0xF1, 0xC9, 0xFE, 0x64, 0x40, 0x01, 0x26, 0x3D, 0x00, - 0x49, 0xF3, 0x3C, 0x46, 0x33, 0x18, 0xCC, 0x84, 0x49, 0xFB, 0x30, 0x02, 0xBF, 0x60, 0xAD, 0x64, - 0x40, 0x42, 0xFC, 0xFC, 0x00, 0x64, 0x5C, 0x5C, 0x32, 0xFB, 0x82, 0xFF, 0x5C, 0x47, 0x84, 0xFF, - 0x62, 0xFF, 0x1F, 0x60, 0x0A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, - 0xA2, 0xDB, 0x2A, 0xF2, 0x07, 0xF0, 0x0C, 0xB4, 0x08, 0x3A, 0x07, 0x00, 0x66, 0x41, 0x64, 0x46, - 0x06, 0xF0, 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, 0x06, 0xFA, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, - 0xA2, 0xDA, 0x1B, 0x60, 0xD4, 0x62, 0x1B, 0x60, 0xAC, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xCE, 0xFE, 0x06, 0x00, 0x66, 0xF3, - 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xD3, - 0xAD, 0x49, 0x20, 0xB5, 0x08, 0xB1, 0x23, 0x03, 0xE1, 0x81, 0x10, 0xB5, 0x95, 0x81, 0x60, 0x41, - 0x18, 0x02, 0x12, 0x60, 0xCA, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA4, 0xDB, 0x17, 0x02, - 0x0A, 0x64, 0xA4, 0xDB, 0x61, 0x44, 0x07, 0xB4, 0xFF, 0xFF, 0x11, 0x02, 0x08, 0xB1, 0xE1, 0x81, - 0x95, 0x81, 0xA3, 0xD3, 0x0C, 0x03, 0x08, 0xAC, 0x01, 0xBC, 0xA3, 0xDB, 0xFF, 0xFF, 0x13, 0xFF, - 0x06, 0x00, 0x10, 0xAC, 0xA3, 0xDB, 0x12, 0x60, 0xCA, 0x63, 0x0A, 0x7C, 0xA3, 0xD9, 0xB5, 0x60, - 0xAF, 0x78, 0xFF, 0xFF, 0x46, 0xF3, 0x45, 0xF1, 0x05, 0x1B, 0x64, 0x44, 0x03, 0x1B, 0x0F, 0x60, - 0x92, 0x62, 0xA2, 0xD3, 0x45, 0xFB, 0x00, 0x63, 0x46, 0xFD, 0x60, 0x41, 0x25, 0x64, 0x3B, 0xDB, - 0x27, 0x44, 0xEF, 0xB4, 0x40, 0x47, 0x00, 0xB9, 0x71, 0x40, 0x80, 0x27, 0x01, 0x12, 0x19, 0x03, - 0xBF, 0x60, 0x4D, 0x62, 0x84, 0xFF, 0x42, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0x1F, 0x0A, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x19, 0x0A, - 0x71, 0x40, 0x80, 0x27, 0xF7, 0x12, 0x45, 0xF3, 0x27, 0x02, 0x03, 0x18, 0xCC, 0x84, 0x45, 0xFB, - 0xF1, 0x02, 0x06, 0x0A, 0xA0, 0x4C, 0xFB, 0xB4, 0xA0, 0x51, 0xA7, 0x60, 0xDF, 0x78, 0xFF, 0xFF, - 0x84, 0xFF, 0xBF, 0x60, 0x2A, 0x64, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0xAF, 0x60, 0x19, 0x78, 0xFF, 0xFF, 0x3C, 0x44, 0xAC, 0x80, 0x32, 0xF1, 0x12, 0x03, - 0x64, 0x40, 0x07, 0x22, 0x0F, 0x00, 0xA7, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0xA0, 0x4C, 0x1C, 0xBC, - 0xDF, 0xB4, 0xA0, 0x51, 0xF1, 0x01, 0x06, 0x00, 0x28, 0x64, 0x3A, 0xDB, 0xA0, 0x4C, 0x30, 0xBC, - 0xF3, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x28, 0x64, 0x3B, 0xDB, 0x0F, 0x60, - 0x94, 0x62, 0xA2, 0xD3, 0x32, 0x40, 0x02, 0x27, 0x16, 0x00, 0x46, 0xFB, 0x14, 0x18, 0xBF, 0x60, - 0x9B, 0x64, 0x84, 0xFF, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xF7, 0xB4, 0xA0, 0x51, - 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x46, 0xF3, 0xCA, 0x0A, 0xDC, 0x02, - 0xCC, 0x84, 0x46, 0xFB, 0xF5, 0x02, 0x84, 0xFF, 0xBF, 0x60, 0xAD, 0x64, 0x40, 0x42, 0x82, 0xFF, - 0x27, 0x44, 0x08, 0xBC, 0x40, 0x47, 0xBB, 0xE1, 0x04, 0x00, 0x3A, 0xE1, 0x31, 0x40, 0x01, 0x26, - 0xBB, 0xE1, 0xA7, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0x24, 0xE2, 0x2D, 0xF3, 0x2C, 0xF3, 0x00, 0xBD, - 0xCC, 0x84, 0x08, 0x03, 0x2C, 0xFB, 0x06, 0x02, 0x65, 0x44, 0x2C, 0xFB, 0x8A, 0xFF, 0x80, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0xD2, 0xF3, 0x31, 0x40, 0x01, 0x2A, 0x44, 0x00, 0x60, 0x43, 0x04, 0xB0, - 0x02, 0xB0, 0x08, 0x24, 0x16, 0x02, 0x29, 0x44, 0xFF, 0xFF, 0x00, 0xA8, 0xCC, 0x81, 0x0E, 0x03, - 0x41, 0x49, 0x37, 0x02, 0x63, 0x40, 0x08, 0x2A, 0x09, 0x00, 0xF7, 0xB3, 0x25, 0x60, 0x1C, 0x7C, - 0xA4, 0xD1, 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0x44, 0x49, 0x2B, 0x00, 0x63, 0x40, 0x02, 0x2A, - 0x14, 0x00, 0x25, 0x60, 0x1E, 0x64, 0xA0, 0xD3, 0x25, 0x60, 0x1A, 0x7C, 0xA4, 0xDB, 0x40, 0x49, - 0x25, 0x60, 0x20, 0x64, 0xA0, 0xD3, 0x25, 0x60, 0x1C, 0x7C, 0xA4, 0xDB, 0x0C, 0xBB, 0xFD, 0xB3, - 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x14, 0x00, 0x25, 0x60, 0x22, 0x64, 0xA0, 0xD3, - 0x25, 0x60, 0x1A, 0x7C, 0x0E, 0x18, 0xA4, 0xDB, 0x40, 0x49, 0x25, 0x60, 0x24, 0x64, 0xA0, 0xD3, - 0x25, 0x60, 0x1C, 0x7C, 0xA4, 0xDB, 0x08, 0xBB, 0xFB, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, - 0xA0, 0x5D, 0xD2, 0xFD, 0x01, 0x60, 0x0C, 0x61, 0xA1, 0xD3, 0x61, 0x43, 0x17, 0x18, 0x58, 0xD3, - 0x62, 0x41, 0x03, 0x18, 0xCC, 0x84, 0xA1, 0xDB, 0x11, 0x00, 0x49, 0xD3, 0xA3, 0xDB, 0x06, 0xA1, - 0xA1, 0xD3, 0x59, 0xD1, 0x60, 0x45, 0xA5, 0xD3, 0x59, 0xD1, 0xB0, 0x84, 0xA5, 0xDB, 0x64, 0x44, - 0x06, 0x36, 0xCD, 0xFE, 0x07, 0x36, 0xD6, 0xFE, 0xE5, 0x01, 0x23, 0x46, 0xB5, 0x60, 0xAF, 0x78, - 0xFF, 0xFF, 0x46, 0x43, 0x1C, 0x60, 0x0A, 0x61, 0xA1, 0xD3, 0x59, 0xD1, 0x06, 0x1B, 0x59, 0xD3, - 0x59, 0xD1, 0x03, 0x1B, 0x59, 0xD3, 0x59, 0xD1, 0xF0, 0x18, 0x00, 0x63, 0x49, 0xDD, 0x60, 0x40, - 0x02, 0x36, 0x11, 0x00, 0x03, 0x36, 0x32, 0x00, 0x01, 0x36, 0x08, 0x00, 0x05, 0x3A, 0xEA, 0x01, - 0xA4, 0xD3, 0x5A, 0xD3, 0x9C, 0x85, 0xA4, 0x84, 0xA2, 0xDB, 0xE4, 0x01, 0x01, 0x60, 0x0C, 0x61, - 0x00, 0x64, 0xA1, 0xDB, 0xDF, 0x01, 0xC0, 0x60, 0x4F, 0x64, 0x40, 0x45, 0x22, 0x00, 0x01, 0x60, - 0x0C, 0x66, 0xA6, 0xD3, 0x04, 0xA1, 0x60, 0x43, 0xA1, 0xD3, 0xC9, 0x81, 0x60, 0x45, 0x00, 0xBB, - 0xA1, 0xDB, 0xBE, 0xD3, 0x09, 0x03, 0xD4, 0x84, 0x9C, 0x84, 0xDC, 0x84, 0xFF, 0xFF, 0x04, 0x0E, - 0xA3, 0xD1, 0x63, 0x46, 0x64, 0x43, 0xF2, 0x01, 0x9C, 0x84, 0xDC, 0x85, 0x49, 0xDD, 0x61, 0x44, - 0x00, 0xBB, 0xA6, 0xDB, 0x02, 0x03, 0x65, 0x44, 0xBE, 0xDB, 0xBC, 0x01, 0xC0, 0x60, 0x2A, 0x64, - 0x40, 0x45, 0x01, 0x60, 0x0C, 0x66, 0xA6, 0xD3, 0xFF, 0xFF, 0xD0, 0x80, 0x0F, 0x18, 0x02, 0x03, - 0x60, 0x46, 0xF9, 0x01, 0x58, 0xD3, 0xA4, 0xD3, 0x60, 0x45, 0x00, 0x63, 0xA4, 0xDD, 0x05, 0x18, - 0x58, 0xD3, 0xFF, 0xFF, 0xC4, 0x83, 0xA2, 0xDD, 0xCA, 0x84, 0xA6, 0xDB, 0x25, 0x58, 0x64, 0x41, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x06, 0x02, 0x40, 0xFF, 0x42, 0xFF, 0x43, 0xFF, 0x44, 0xFF, - 0x45, 0xFF, 0xA1, 0xFF, 0x88, 0xFF, 0x85, 0xFF, 0x21, 0xE1, 0x5C, 0x40, 0xC0, 0x60, 0x9A, 0x78, - 0xFF, 0xFF, 0x43, 0xFF, 0x39, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x84, 0x3E, 0xFB, 0x01, 0xA0, 0x4C, - 0x3D, 0x46, 0x2A, 0xF2, 0x46, 0x4D, 0x10, 0x25, 0x0E, 0x00, 0x09, 0xE1, 0xA1, 0xFF, 0x66, 0x40, - 0x0F, 0xF2, 0x01, 0x29, 0x02, 0x00, 0x40, 0xFF, 0x0A, 0xBC, 0xA2, 0xDA, 0x08, 0x25, 0xE9, 0x01, - 0xCB, 0xFE, 0x5C, 0x5D, 0xE7, 0x01, 0x44, 0xFF, 0x03, 0x2B, 0x21, 0x00, 0x89, 0xF3, 0x06, 0x61, - 0x60, 0x43, 0x66, 0x45, 0x31, 0xF0, 0x63, 0x46, 0x05, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0x30, 0xF0, - 0x0F, 0x02, 0x63, 0x46, 0x04, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0x2F, 0xF0, 0x09, 0x02, 0x63, 0x46, - 0x03, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0xFF, 0xFF, 0x48, 0xFE, 0x06, 0x00, - 0xCD, 0x81, 0x02, 0xA3, 0xE7, 0x02, 0x88, 0xF1, 0x08, 0xFE, 0x64, 0x43, 0x26, 0x03, 0x31, 0xF2, - 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x07, 0xFC, 0x3F, 0xF2, 0x09, 0x60, - 0xB0, 0x65, 0xD4, 0x80, 0x2A, 0xF2, 0xA1, 0x05, 0x08, 0x25, 0x93, 0x01, 0x00, 0x64, 0x0D, 0x60, - 0x2C, 0x61, 0x40, 0x4B, 0xA1, 0xDB, 0x2D, 0x46, 0x3B, 0xF2, 0x88, 0xF1, 0x87, 0xF4, 0x60, 0x40, - 0x20, 0x2B, 0x12, 0x00, 0xD3, 0x80, 0x2C, 0xF0, 0x90, 0x03, 0x07, 0xF4, 0x64, 0x40, 0x01, 0x26, - 0x88, 0xF5, 0xB6, 0xF4, 0x2D, 0x46, 0x04, 0x64, 0x04, 0xB3, 0x22, 0xFA, 0x04, 0x03, 0xC2, 0x60, - 0x11, 0x78, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0x00, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, - 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0x7C, 0x5F, 0xE8, 0x84, 0xE8, 0x85, 0x0C, 0x60, 0x3A, 0x64, 0x44, 0xD3, - 0x5A, 0xD1, 0x03, 0x1B, 0xC2, 0x60, 0x04, 0x78, 0xFF, 0xFF, 0x60, 0x45, 0x64, 0x44, 0xE3, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5B, - 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5B, 0x65, 0x40, - 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE9, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5B, - 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5B, 0x64, 0x47, - 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5B, 0x65, 0x44, 0xD8, 0x84, - 0x08, 0x25, 0x78, 0x00, 0x60, 0x7F, 0xA0, 0x5B, 0x80, 0x60, 0x00, 0xEB, 0xA0, 0x60, 0x00, 0xEB, - 0xD1, 0x60, 0x00, 0xEB, 0x3F, 0xF2, 0x04, 0x65, 0xC4, 0x83, 0x0A, 0xE1, 0xB3, 0xFF, 0x9A, 0xFF, - 0xCB, 0x83, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, 0x0E, 0xA3, 0xAB, 0x84, 0xF2, 0xA3, 0xA1, 0xFF, - 0x08, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0x02, 0x62, 0xC9, 0x81, 0xAB, 0x84, 0xA1, 0xFF, 0x01, 0x00, - 0xA2, 0xDC, 0x7A, 0xD4, 0xFD, 0x1C, 0xA2, 0xDC, 0x08, 0x25, 0x54, 0x00, 0xF2, 0x1D, 0x7C, 0xA8, - 0xD9, 0x81, 0xEF, 0x03, 0xFF, 0xB1, 0x09, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0x5A, 0xD2, - 0x89, 0xFF, 0x80, 0x4F, 0x6F, 0x44, 0xA2, 0xDA, 0x88, 0xFF, 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, - 0x3D, 0x46, 0x08, 0x25, 0x3F, 0x00, 0x40, 0xFF, 0x0F, 0xF0, 0x0A, 0x64, 0xB0, 0x84, 0x18, 0x14, - 0xF7, 0xB4, 0xA2, 0xDA, 0x0D, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, - 0x0C, 0x00, 0xD1, 0xF5, 0xD0, 0xF4, 0x0D, 0x60, 0x2C, 0x61, 0x59, 0xD1, 0x37, 0xF8, 0x05, 0x64, - 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, 0xFC, 0x02, 0x2D, 0x46, 0xC0, 0x60, 0xB0, 0x78, 0xFF, 0xFF, - 0xA2, 0xDA, 0x2D, 0x46, 0x3B, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x20, 0x2B, 0x18, 0x00, 0xD1, 0xF5, - 0xB7, 0xF0, 0x2A, 0x44, 0xA4, 0x84, 0xFF, 0xFF, 0x2F, 0x26, 0x10, 0x00, 0x2D, 0x46, 0x64, 0x44, - 0x3A, 0xF0, 0xBC, 0xF0, 0x64, 0x5F, 0x3D, 0xF0, 0x07, 0xF4, 0xD0, 0xF4, 0xFF, 0xFF, 0x08, 0xA3, - 0x5B, 0xD8, 0x65, 0x5C, 0x5B, 0xD8, 0x5B, 0xDA, 0x2D, 0x46, 0x01, 0x00, 0x2D, 0x46, 0xC0, 0x60, - 0xB0, 0x78, 0xFF, 0xFF, 0x98, 0xFF, 0x43, 0xFF, 0x40, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, 0x2D, 0x46, - 0x0D, 0x60, 0x2C, 0x61, 0xA1, 0xD3, 0x2D, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, 0xD1, 0xF5, - 0xD0, 0xF4, 0x59, 0xD1, 0x37, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, 0xFC, 0x02, - 0x2D, 0x46, 0xC0, 0x60, 0x9A, 0x78, 0xFF, 0xFF, 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, 0x3D, 0x46, - 0x08, 0x25, 0xE0, 0x01, 0x0F, 0xF2, 0x40, 0xFF, 0x02, 0xBC, 0xA2, 0xDA, 0xC0, 0x60, 0xB0, 0x78, - 0xFF, 0xFF, 0x00, 0x64, 0x0D, 0x60, 0x2C, 0x62, 0xA2, 0xDB, 0x04, 0x64, 0x22, 0xFA, 0x87, 0xF4, - 0x88, 0xF1, 0xFF, 0xFF, 0xD3, 0x80, 0x3B, 0xF2, 0xE7, 0x03, 0x60, 0x47, 0xC0, 0xB7, 0x02, 0xFE, - 0xF0, 0x84, 0xF0, 0x84, 0xF0, 0x84, 0x00, 0xA8, 0x40, 0x4A, 0x16, 0x03, 0xE0, 0x81, 0x61, 0x43, - 0x42, 0xFE, 0x00, 0x64, 0xF0, 0x84, 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, 0x2D, 0x46, - 0x07, 0xF4, 0xE0, 0x81, 0x37, 0xF0, 0x2A, 0x47, 0x0C, 0x60, 0x7A, 0x63, 0xA0, 0x84, 0x47, 0x9C, - 0x10, 0x03, 0x7C, 0x44, 0xA0, 0x63, 0x11, 0x00, 0x20, 0x64, 0x40, 0x4A, 0x63, 0x46, 0x37, 0xF0, - 0x66, 0x44, 0x64, 0x40, 0x80, 0x2B, 0x05, 0x00, 0x00, 0x60, 0x70, 0x7C, 0x00, 0x60, 0x90, 0x63, - 0x04, 0x00, 0x2D, 0x46, 0xC2, 0x60, 0x04, 0x78, 0xFF, 0xFF, 0x2D, 0x46, 0xCE, 0xFB, 0xCF, 0xF9, - 0xD0, 0xFD, 0x07, 0xF2, 0xD1, 0xFB, 0x60, 0x46, 0x37, 0xF0, 0x2A, 0x44, 0x0D, 0x60, 0x2C, 0x62, - 0x5A, 0xD9, 0x00, 0x65, 0x45, 0x4B, 0xA0, 0x84, 0xFF, 0xFF, 0x3F, 0x22, 0x05, 0x00, 0x90, 0x84, - 0x37, 0xFA, 0x01, 0x64, 0x40, 0x4B, 0x21, 0x00, 0xAD, 0x46, 0x0A, 0xA3, 0x3D, 0xF2, 0xAD, 0x46, - 0xA3, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3C, 0xF2, 0xAD, 0x46, 0x02, 0x03, 0x16, 0x07, 0x14, 0x04, - 0x5B, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3B, 0xF2, 0x03, 0x03, 0xAD, 0x46, 0x0E, 0x07, 0x0C, 0x04, - 0x3A, 0xF0, 0xAD, 0x46, 0x5B, 0xD0, 0x64, 0x5F, 0xD0, 0x80, 0x2B, 0x44, 0x18, 0x07, 0x04, 0x03, - 0xD0, 0x84, 0x10, 0xA4, 0xFF, 0xFF, 0x13, 0x07, 0x7F, 0x01, 0x01, 0x64, 0x0D, 0x60, 0x2C, 0x62, - 0xA2, 0xDB, 0x2D, 0x46, 0x0D, 0x60, 0x3C, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, - 0xC2, 0x60, 0xAA, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x53, 0x01, 0x2D, 0x46, - 0x0D, 0x60, 0x3C, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC3, 0x60, 0x33, 0x78, - 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x45, 0x01, 0x00, 0x60, 0x0F, 0x64, 0xC1, 0x60, - 0x70, 0x78, 0xFF, 0xFF, 0x07, 0xF4, 0x66, 0x41, 0x03, 0xF2, 0x04, 0xF2, 0x40, 0x42, 0x05, 0xF2, - 0x40, 0x43, 0x40, 0x44, 0x61, 0x46, 0x3C, 0xF2, 0x3D, 0xF2, 0x40, 0x40, 0x40, 0x41, 0x0D, 0x60, - 0x70, 0x65, 0x00, 0x61, 0xCF, 0xF1, 0xCE, 0xF5, 0x44, 0x4C, 0x2C, 0x5C, 0xE9, 0x80, 0x00, 0x64, - 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x24, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x20, 0x44, 0x40, 0x80, 0xDB, 0x83, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x21, 0x44, 0x40, 0x81, 0xDB, 0x83, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x22, 0x44, 0x40, 0x82, 0xDB, 0x83, 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x23, 0x44, 0x40, 0x83, 0xF2, 0xA3, 0xBD, 0xD2, 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x24, 0x44, 0xC0, 0x9C, 0x41, 0x84, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, 0x0D, 0x60, 0x2E, 0x61, - 0x05, 0x64, 0xD0, 0xF4, 0xD1, 0xF5, 0xFE, 0xA3, 0x5B, 0xD0, 0xCC, 0x84, 0x59, 0xD9, 0xFC, 0x02, - 0xD0, 0xF3, 0xD1, 0xF5, 0x60, 0x42, 0x20, 0x44, 0xA2, 0xDA, 0x21, 0x44, 0x5A, 0xDA, 0x22, 0x44, - 0x5A, 0xDA, 0x23, 0x44, 0x5A, 0xDA, 0x24, 0x44, 0x5A, 0xDA, 0x61, 0x46, 0x0D, 0x60, 0x3C, 0x62, - 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x41, 0xD0, 0xF3, 0xD1, 0xF5, 0xA0, 0xD2, 0x5A, 0xD0, - 0x40, 0x40, 0x44, 0x41, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x42, 0x5A, 0xD0, 0x44, 0x43, 0x61, 0x46, - 0xBA, 0xF0, 0x3B, 0xF2, 0x44, 0x44, 0x65, 0x5F, 0x40, 0x85, 0xCF, 0xF4, 0xCE, 0xF5, 0x43, 0x4C, - 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x20, 0x44, - 0x40, 0x80, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x21, 0x44, 0x40, 0x81, - 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, 0xBD, 0xD2, - 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xBD, 0xD2, 0x23, 0x5C, - 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0x40, 0x84, 0xBD, 0xD2, 0x24, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x25, 0x44, 0x40, 0x85, 0x61, 0x46, 0x3A, 0xF0, 0xFF, 0xFF, 0x64, 0x44, - 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0xCE, 0xF5, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, - 0x20, 0x5C, 0x40, 0x80, 0x20, 0x44, 0xE4, 0x7F, 0xA0, 0x5B, 0x20, 0x47, 0xE5, 0x7F, 0xA0, 0x5B, - 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x21, 0x5C, 0x40, 0x81, 0x21, 0x44, - 0xE6, 0x7F, 0xA0, 0x5B, 0x21, 0x47, 0xE7, 0x7F, 0xA0, 0x5B, 0x21, 0x44, 0xE8, 0x80, 0xF8, 0x84, - 0x22, 0x5C, 0x40, 0x82, 0x22, 0x44, 0xE8, 0x7F, 0xA0, 0x5B, 0x22, 0x47, 0xE9, 0x7F, 0xA0, 0x5B, - 0x22, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x23, 0x5C, 0x40, 0x83, 0x23, 0x44, 0xEA, 0x7F, 0xA0, 0x5B, - 0x23, 0x47, 0xEB, 0x7F, 0xA0, 0x5B, 0x23, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x24, 0x5C, 0x40, 0x84, - 0x24, 0x44, 0xEC, 0x7F, 0xA0, 0x5B, 0x24, 0x47, 0xED, 0x7F, 0xA0, 0x5B, 0x24, 0x44, 0xE8, 0x80, - 0xF8, 0x84, 0x25, 0x5C, 0x40, 0x85, 0x25, 0x44, 0xEE, 0x7F, 0xA0, 0x5B, 0x25, 0x47, 0xEF, 0x7F, - 0xA0, 0x5B, 0x2C, 0x43, 0xA3, 0xD2, 0x25, 0x5C, 0x90, 0x81, 0xE9, 0x84, 0xE3, 0x7F, 0xA0, 0x5B, - 0x0D, 0x60, 0x3C, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0xF3, 0x5A, 0xD3, 0x40, 0x48, - 0x5A, 0xD3, 0x40, 0x49, 0x40, 0x4A, 0x00, 0x60, 0x70, 0x7C, 0x44, 0x4D, 0x45, 0xF2, 0x46, 0xF2, - 0x40, 0x47, 0x40, 0x46, 0x0D, 0x60, 0x70, 0x65, 0x00, 0x61, 0x2D, 0x5C, 0xE9, 0x80, 0x00, 0x64, - 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x26, 0x44, 0x40, 0x86, 0xDB, 0x83, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x27, 0x44, 0x40, 0x87, 0xDB, 0x83, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x28, 0x44, 0x40, 0x88, 0xDB, 0x83, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x29, 0x44, 0x40, 0x89, 0xF2, 0xA3, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x2A, 0x44, 0xC0, 0x9C, 0x41, 0x8A, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, 0x26, 0x44, 0x40, 0xFA, - 0x27, 0x44, 0x41, 0xFA, 0x28, 0x44, 0x42, 0xFA, 0x29, 0x44, 0x43, 0xFA, 0x2A, 0x44, 0x44, 0xFA, - 0x0D, 0x60, 0x3E, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x80, 0x7C, 0x44, 0x4D, - 0x2D, 0x42, 0xA2, 0xD2, 0x5A, 0xD0, 0x40, 0x46, 0x44, 0x47, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x48, - 0x5A, 0xD0, 0x44, 0x49, 0x47, 0xF2, 0x44, 0x4A, 0x40, 0x8B, 0x60, 0x5C, 0x64, 0x47, 0xE0, 0x7F, - 0xA0, 0x5A, 0xFF, 0xB4, 0x20, 0xBC, 0x7F, 0xB4, 0xE1, 0x7F, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, - 0xA0, 0x5A, 0x00, 0x60, 0x70, 0x63, 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x2B, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x27, 0x44, 0x40, 0x87, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x28, 0x44, 0x40, 0x88, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x29, 0x44, - 0x40, 0x89, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2A, 0x44, 0x40, 0x8A, - 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2B, 0x44, 0x40, 0x8B, 0xBD, 0xD2, - 0x2B, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x26, 0x5C, 0x40, 0x86, 0x26, 0x44, 0xE4, 0x7F, - 0xA0, 0x5A, 0x26, 0x47, 0xE5, 0x7F, 0xA0, 0x5A, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x84, 0xE8, 0x80, - 0xF8, 0x84, 0x27, 0x5C, 0x40, 0x87, 0x27, 0x44, 0xE6, 0x7F, 0xA0, 0x5A, 0x27, 0x47, 0xE7, 0x7F, - 0xA0, 0x5A, 0x27, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x28, 0x5C, 0x40, 0x88, 0x28, 0x44, 0xE8, 0x7F, - 0xA0, 0x5A, 0x28, 0x47, 0xE9, 0x7F, 0xA0, 0x5A, 0x28, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x29, 0x5C, - 0x40, 0x89, 0x29, 0x44, 0xEA, 0x7F, 0xA0, 0x5A, 0x29, 0x47, 0xEB, 0x7F, 0xA0, 0x5A, 0x29, 0x44, - 0xE8, 0x80, 0xF8, 0x84, 0x2A, 0x5C, 0x40, 0x8A, 0x2A, 0x44, 0xEC, 0x7F, 0xA0, 0x5A, 0x2A, 0x47, - 0xED, 0x7F, 0xA0, 0x5A, 0x2A, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2B, 0x5C, 0x40, 0x8B, 0x2B, 0x44, - 0xEE, 0x7F, 0xA0, 0x5A, 0x2B, 0x47, 0xEF, 0x7F, 0xA0, 0x5A, 0x38, 0xF0, 0x2B, 0x44, 0x90, 0x84, - 0xE8, 0x84, 0xE3, 0x7F, 0xA0, 0x5A, 0x0D, 0x60, 0x3E, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x42, 0xFF, 0x40, 0xFF, 0xDD, 0xFE, 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, - 0x19, 0x61, 0xCD, 0x81, 0xFF, 0xFF, 0xFD, 0x02, 0x43, 0x45, 0x20, 0x44, 0x60, 0xBC, 0x40, 0x40, - 0x02, 0x60, 0xEE, 0x63, 0x65, 0xF3, 0x82, 0xFD, 0x40, 0x7F, 0x83, 0xFB, 0x05, 0x64, 0x84, 0xFB, - 0xDF, 0xFE, 0x19, 0xFF, 0xC5, 0x60, 0x6D, 0x64, 0x3F, 0x40, 0x01, 0x2B, 0x02, 0x00, 0xC5, 0x60, - 0x6D, 0x64, 0x85, 0xFB, 0xC0, 0x60, 0x9A, 0x78, 0xFF, 0xFF, 0x04, 0xEE, 0xAD, 0x4F, 0x00, 0x7F, - 0x01, 0xBC, 0xA0, 0x5D, 0x19, 0x61, 0xCD, 0x81, 0xFF, 0xFF, 0xFD, 0x02, 0xAD, 0x4F, 0x00, 0x7F, - 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, 0x15, 0x60, 0xA2, 0xE7, 0x1C, 0x60, 0x68, 0x63, 0x1C, 0x60, - 0xDC, 0x65, 0xDF, 0xFE, 0x80, 0xE1, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, - 0x00, 0x7F, 0x60, 0x4A, 0xD7, 0x80, 0xA1, 0xFF, 0xFF, 0xFF, 0xF5, 0x02, 0x1C, 0x60, 0xDC, 0x63, - 0x1D, 0x60, 0xDE, 0x65, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, 0x00, 0x7F, - 0x60, 0x4A, 0xD7, 0x80, 0xA1, 0xFF, 0xFF, 0xFF, 0xF5, 0x02, 0x3F, 0x40, 0x20, 0x2B, 0x00, 0x00, - 0x01, 0x68, 0xFF, 0x6A, 0xBF, 0xFE, 0xC6, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x3F, 0x40, 0x20, 0x2B, - 0xAD, 0x00, 0x01, 0x16, 0xFE, 0x01, 0x38, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x2A, - 0xA5, 0x00, 0x1F, 0x60, 0x1A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, - 0xA2, 0xDB, 0x65, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x9C, 0x01, 0x00, 0x65, 0xF1, 0xDD, 0xFE, - 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, - 0x40, 0x40, 0x02, 0x60, 0xEE, 0x64, 0x82, 0xFB, 0x83, 0xF9, 0x05, 0x64, 0x84, 0xFB, 0xDF, 0xFE, - 0x19, 0xFF, 0x83, 0x00, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x43, 0x45, 0xA4, 0xD1, 0xDA, 0x83, - 0xC3, 0x85, 0x80, 0xE1, 0xDF, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, - 0x00, 0x7F, 0x60, 0x4A, 0xD7, 0x80, 0xA1, 0xFF, 0xF6, 0x02, 0xBF, 0xFE, 0x6E, 0x00, 0x3F, 0x40, - 0x40, 0x26, 0x13, 0x00, 0x0B, 0x60, 0xF8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0x90, 0x84, - 0xA0, 0x50, 0xF8, 0xA2, 0xA2, 0xD1, 0x0A, 0x60, 0x19, 0x64, 0x90, 0x84, 0xA0, 0x52, 0x06, 0xA2, - 0xA2, 0xD1, 0x46, 0x60, 0x09, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, - 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0x02, 0xEE, 0xBD, 0xFE, 0x50, 0x00, 0x80, 0xE1, 0x01, 0x16, - 0xFE, 0x01, 0x64, 0x48, 0x92, 0x6A, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x40, 0x1F, 0x60, 0x08, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x3F, 0x00, 0x80, 0xE1, - 0x01, 0x16, 0xFE, 0x01, 0x01, 0x68, 0xA7, 0x6A, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x40, 0x36, 0x00, - 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x80, 0xE1, 0x64, 0x46, 0x01, 0x16, 0xFE, 0x01, 0x21, 0x69, - 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x5E, 0x01, 0x16, 0xFE, 0x01, 0x22, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, - 0x68, 0x5F, 0x26, 0xFA, 0x1C, 0xF2, 0x01, 0x16, 0xFE, 0x01, 0x3A, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, - 0x68, 0x5F, 0x27, 0xFA, 0x1B, 0x00, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x43, 0x45, 0xBE, 0xD5, - 0xA4, 0xD2, 0x5A, 0x86, 0xEF, 0xA0, 0x11, 0x61, 0x01, 0x06, 0x60, 0x41, 0x1C, 0x60, 0x46, 0x63, - 0x80, 0xE1, 0xBD, 0xD3, 0x26, 0x42, 0x01, 0x16, 0xFE, 0x01, 0x60, 0x49, 0xA1, 0xFF, 0xFF, 0xFF, - 0x68, 0x44, 0xCD, 0x81, 0xA2, 0xDA, 0x5A, 0x86, 0xF4, 0x02, 0x25, 0x43, 0x21, 0xE1, 0x00, 0x64, - 0xBF, 0xDB, 0x20, 0x44, 0x20, 0x2A, 0x07, 0x00, 0x07, 0xB4, 0x04, 0x36, 0xC3, 0xFE, 0x06, 0x36, - 0xCC, 0xFE, 0x07, 0x36, 0xD5, 0xFE, 0x20, 0x44, 0xD8, 0xB4, 0x40, 0x40, 0x20, 0x44, 0x40, 0x2A, - 0x07, 0x00, 0x9F, 0xFE, 0x1E, 0x05, 0xBF, 0xB4, 0x40, 0x40, 0x85, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x1B, 0x60, 0xE6, 0x63, 0xBD, 0xD3, 0x02, 0x61, 0x17, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x02, 0x61, - 0x13, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x02, 0x61, 0x0F, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x04, 0x61, - 0x0B, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x06, 0x61, 0x07, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x07, 0x61, - 0x03, 0x1B, 0xC0, 0x60, 0x9A, 0x78, 0xFF, 0xFF, 0xA3, 0xD1, 0x40, 0x44, 0x20, 0x44, 0x07, 0xB5, - 0xD4, 0x85, 0x35, 0x80, 0x24, 0x45, 0x1C, 0x60, 0x22, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x80, 0xE1, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, 0xBD, 0xD1, - 0x40, 0x44, 0x10, 0x27, 0x10, 0x00, 0xFF, 0x60, 0x7F, 0x65, 0x15, 0x60, 0xA2, 0x64, 0x24, 0x40, - 0x08, 0x2B, 0xA4, 0x84, 0xA0, 0x57, 0xFF, 0xFF, 0x64, 0x49, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, - 0xFD, 0x01, 0x00, 0x7F, 0xA3, 0xDB, 0xA1, 0x01, 0x80, 0xE1, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, - 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, 0xBD, 0xD1, 0x40, 0x44, 0x10, 0x2B, 0x11, 0x00, 0xA3, 0xD3, - 0xFF, 0xFF, 0x15, 0x60, 0x80, 0xE7, 0x24, 0x40, 0x07, 0x27, 0x02, 0x00, 0x50, 0xEC, 0x00, 0x00, - 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x24, 0x40, 0x20, 0x2B, 0x40, 0xEC, 0x0F, 0x00, - 0x15, 0x60, 0x22, 0x64, 0x24, 0x40, 0x08, 0x27, 0x80, 0xBC, 0xA3, 0xD3, 0xA0, 0x57, 0x60, 0x48, - 0x64, 0x44, 0x80, 0xBC, 0xFF, 0xB4, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x75, 0x01, - 0xA2, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x01, 0x02, 0xA1, 0xFF, 0x86, 0xFF, 0x88, 0xFF, - 0x5C, 0x46, 0x5C, 0x49, 0x5C, 0x40, 0xDE, 0x60, 0x58, 0x4F, 0xE2, 0x78, 0xFF, 0xFF, 0xCE, 0x60, - 0x58, 0x4F, 0x00, 0x78, 0xFF, 0xFF, 0xE7, 0x60, 0x58, 0x4F, 0xBE, 0x78, 0xFF, 0xFF, 0xDB, 0x60, - 0x58, 0x4F, 0x3B, 0x78, 0xFF, 0xFF, 0x13, 0xE1, 0xA3, 0xFF, 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, - 0xDC, 0x60, 0x87, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xCE, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x22, 0x00, 0x75, 0xF3, 0x31, 0x40, 0x01, 0x2A, 0x1E, 0x00, - 0xDC, 0x84, 0x01, 0xB4, 0x75, 0xFB, 0x09, 0x02, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x11, 0x00, 0x0F, 0x60, 0xDC, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x00, 0xA9, 0xFE, 0xE4, 0x05, - 0xAB, 0xFE, 0x07, 0x05, 0xA8, 0xFE, 0xD4, 0x05, 0xAA, 0xFE, 0xD5, 0x05, 0xA1, 0xFF, 0xFF, 0xFF, - 0x85, 0x3E, 0x1B, 0x60, 0xC4, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x02, - 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0x26, 0x45, 0xD4, 0x80, 0x0F, 0xF0, 0xF9, 0x03, 0x64, 0x44, - 0x70, 0xB0, 0x70, 0x2A, 0x14, 0x00, 0x1F, 0x60, 0x18, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, - 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0xA2, 0xFF, 0x8F, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0xFE, 0xA0, - 0x8F, 0xFB, 0x01, 0x07, 0xD4, 0xFE, 0xA3, 0xFF, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x64, 0x40, - 0x02, 0x26, 0x09, 0x00, 0x66, 0x45, 0x09, 0xF4, 0x0F, 0xF2, 0x02, 0x18, 0x65, 0x46, 0xE3, 0x1B, - 0x00, 0x64, 0x40, 0x46, 0xCB, 0x01, 0xA2, 0xFF, 0x8F, 0xF3, 0x46, 0x46, 0xCC, 0x84, 0xFE, 0xA0, - 0x8F, 0xFB, 0x01, 0x07, 0xD4, 0xFE, 0xA3, 0xFF, 0x0F, 0xF0, 0xA3, 0xFC, 0x64, 0x44, 0x80, 0x26, - 0x22, 0x00, 0x98, 0xF1, 0x1E, 0x60, 0xF8, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, 0x01, 0x64, 0x04, 0x00, - 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x01, 0x64, 0x23, 0xFA, 0xCB, 0x60, 0xC8, 0x78, 0xFF, 0xFF, - 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x08, 0x26, 0x3F, 0x00, 0x2A, 0xF2, 0x60, 0x63, 0x60, 0x40, - 0x02, 0x2B, 0x66, 0x63, 0xBE, 0xD2, 0x69, 0xF1, 0xA3, 0xD2, 0xD0, 0x80, 0x68, 0xF1, 0x18, 0x02, - 0xBF, 0xD2, 0xD0, 0x80, 0x67, 0xF1, 0x14, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x02, 0x98, 0xF1, - 0x1F, 0x60, 0x04, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, 0x02, 0x64, 0x04, 0x00, 0x02, 0x2A, 0x06, 0x00, - 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, 0xCB, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0xB0, 0x3A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, 0xC8, 0x60, 0x6D, 0x78, - 0xFF, 0xFF, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x32, 0x44, 0x01, 0x2A, 0x4A, 0x00, 0x20, 0x60, - 0x6C, 0x63, 0xBF, 0xD3, 0x00, 0x65, 0xB4, 0x81, 0xDB, 0x83, 0x3D, 0x03, 0xBF, 0xD3, 0xA3, 0xD3, - 0x40, 0x48, 0xBE, 0xD3, 0x40, 0x4A, 0x2E, 0xF0, 0x40, 0x4C, 0xD0, 0x80, 0x2D, 0xF0, 0x08, 0x02, - 0x2A, 0x44, 0xD0, 0x80, 0x2C, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x2B, 0x03, - 0x31, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x30, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x2F, 0xF0, - 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x1E, 0x03, 0x34, 0xF0, 0x2C, 0x44, 0xD0, 0x80, - 0x33, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x32, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, - 0xFF, 0xFF, 0x11, 0x03, 0x38, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x37, 0xF0, 0x08, 0x02, 0x2A, 0x44, - 0xD0, 0x80, 0x36, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0xFA, 0xA1, - 0x06, 0xA3, 0xB7, 0x03, 0xC3, 0x01, 0x07, 0x60, 0x00, 0x64, 0x23, 0xFA, 0xCB, 0x60, 0xC8, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0x0F, 0xF0, 0x60, 0x45, 0xA4, 0x36, 0x08, 0x00, 0x0C, 0xB4, 0x04, 0x36, - 0x02, 0x00, 0x0C, 0x3A, 0x06, 0x00, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0xC9, 0x60, 0x42, 0x78, - 0xFF, 0xFF, 0x26, 0xF2, 0x50, 0xF1, 0x60, 0x47, 0x00, 0x7E, 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, 0xC0, 0x84, 0xA2, 0xDB, 0x0F, 0xF0, - 0x65, 0x40, 0x40, 0x2B, 0x22, 0x00, 0x32, 0x40, 0x08, 0x26, 0x1F, 0x00, 0x07, 0xF4, 0x36, 0xF2, - 0xFF, 0xFF, 0x37, 0xB4, 0x26, 0x46, 0x19, 0x02, 0x2C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, - 0x11, 0x00, 0x98, 0xF1, 0x1E, 0x60, 0xFE, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x64, 0x40, 0x60, 0x26, - 0x03, 0x00, 0xC9, 0x60, 0x1A, 0x78, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x3A, 0xF3, 0x01, 0x98, 0xF1, - 0x1E, 0x60, 0xF2, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, 0x12, 0x00, 0x98, 0xF1, 0x1F, 0x60, 0x00, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x13, 0x00, 0x02, 0x3B, - 0x11, 0x00, 0x98, 0xF1, 0x1F, 0x60, 0x02, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x2A, 0xF2, 0x28, 0x41, 0x40, 0xA8, 0x01, 0xB1, 0x02, 0x02, 0x5F, 0x02, - 0x89, 0x00, 0x60, 0x40, 0x08, 0x2A, 0x2B, 0x00, 0x98, 0xF1, 0x1E, 0x60, 0xF0, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, - 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, - 0x98, 0xF1, 0x1E, 0x60, 0xF6, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, - 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, - 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x0F, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x26, 0x28, 0x00, 0x32, 0x44, 0x02, 0x26, 0x25, 0x00, 0x10, 0x2B, - 0x26, 0x00, 0x20, 0x60, 0x6C, 0x63, 0xBF, 0xD3, 0x2C, 0xF0, 0x00, 0xA8, 0x60, 0x41, 0x0D, 0x03, - 0x50, 0xFE, 0xBD, 0xD3, 0x2D, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, 0x2E, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, - 0x2C, 0xF0, 0xD0, 0x80, 0xFA, 0xA1, 0x10, 0x0C, 0xF3, 0x02, 0x50, 0xFE, 0x60, 0x60, 0x01, 0x64, - 0xD0, 0x80, 0x2D, 0xF0, 0x1D, 0x64, 0xD0, 0x80, 0x2E, 0xF0, 0x01, 0x64, 0xD0, 0x80, 0xFF, 0xFF, - 0x03, 0x0C, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x2A, 0x00, 0x00, 0xCB, 0x60, - 0xB6, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x26, 0xFA, 0x01, 0x2A, 0xF0, 0xFF, 0xFF, 0x64, 0x40, - 0x08, 0x2A, 0x20, 0x00, 0x32, 0x40, 0x02, 0x2A, 0x1D, 0x00, 0x03, 0x67, 0xA0, 0x84, 0x00, 0x37, - 0x64, 0x63, 0x60, 0x40, 0x02, 0x37, 0x5E, 0x63, 0x60, 0x40, 0x01, 0x37, 0x58, 0x63, 0x60, 0x40, - 0x03, 0x37, 0x0D, 0x00, 0xBD, 0xD2, 0x67, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, 0x68, 0xF1, 0x07, 0x02, - 0xD0, 0x80, 0xBD, 0xD2, 0x69, 0xF1, 0x03, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xCB, 0x60, - 0xBC, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x87, 0xF4, 0x60, 0x40, 0x03, 0x2B, 0x31, 0x00, 0x89, 0xF3, - 0x06, 0x61, 0x60, 0x43, 0x66, 0x45, 0x31, 0xF0, 0x63, 0x46, 0x05, 0xF2, 0x65, 0x46, 0xD0, 0x80, - 0x30, 0xF0, 0x0F, 0x02, 0x63, 0x46, 0x04, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0x2F, 0xF0, 0x09, 0x02, - 0x63, 0x46, 0x03, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0xFF, 0xFF, 0x48, 0xFE, - 0x06, 0x00, 0xCD, 0x81, 0x02, 0xA3, 0xE7, 0x02, 0x88, 0xF1, 0x08, 0xFE, 0x64, 0x43, 0x03, 0x03, - 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x43, 0x43, 0x23, 0x46, 0x06, 0xF0, 0x26, 0x46, 0x07, 0x67, - 0xA0, 0x84, 0x23, 0xFA, 0x64, 0x40, 0x02, 0x26, 0x2B, 0x00, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, - 0x26, 0x1B, 0x31, 0xF2, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, - 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, - 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, - 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x43, 0x43, - 0x07, 0xFC, 0x43, 0x43, 0x02, 0xFE, 0x1D, 0xF0, 0x12, 0x60, 0xC0, 0x62, 0xC0, 0x64, 0xC0, 0x84, - 0xA2, 0xD1, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA2, 0xDB, - 0x63, 0x45, 0x2A, 0xF2, 0x35, 0xF0, 0x60, 0x40, 0xA4, 0x36, 0x0B, 0x00, 0x08, 0x2B, 0x0C, 0x00, - 0x23, 0x46, 0x22, 0xF2, 0x26, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0xCB, 0x60, 0xBC, 0x78, - 0xFF, 0xFF, 0xCB, 0x60, 0xB6, 0x78, 0xFF, 0xFF, 0x23, 0x46, 0x1E, 0xF2, 0x26, 0x46, 0x44, 0x4C, - 0x0F, 0x26, 0x19, 0x00, 0x00, 0xBC, 0x40, 0x45, 0x0B, 0x03, 0x00, 0x64, 0x23, 0x46, 0x1E, 0xFA, - 0x26, 0x46, 0xA2, 0xFF, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, - 0x2A, 0xF0, 0x2C, 0x44, 0x64, 0x40, 0x04, 0x27, 0x06, 0x00, 0x23, 0x46, 0x22, 0xFA, 0x26, 0x46, - 0xCA, 0x60, 0xB6, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x02, 0xFA, 0xA2, 0xFF, 0x16, 0xF0, 0xFF, 0xFF, - 0x64, 0x44, 0x01, 0x26, 0xDC, 0x9C, 0x93, 0xF3, 0x2A, 0xF2, 0xDC, 0x83, 0x93, 0xFD, 0x06, 0xF4, - 0x01, 0xF8, 0x26, 0x46, 0x60, 0x40, 0x40, 0x2B, 0x18, 0x00, 0x64, 0x44, 0x00, 0x65, 0xFF, 0xB4, - 0xFC, 0xA4, 0x06, 0xF0, 0x03, 0x03, 0x64, 0x46, 0x0C, 0x0D, 0x02, 0x65, 0x26, 0x46, 0x00, 0xF2, - 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x60, 0x46, 0xF9, 0x01, 0x01, 0xF2, 0xFF, 0xFF, - 0xD4, 0x84, 0x01, 0xFA, 0x66, 0x44, 0x26, 0x46, 0x06, 0xFA, 0x06, 0xF4, 0x00, 0xF2, 0x80, 0xFC, - 0x40, 0x45, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, 0x2C, 0x44, - 0x0F, 0x26, 0x10, 0x00, 0x23, 0x46, 0x22, 0xFA, 0x26, 0x44, 0x1E, 0xFA, 0x26, 0x46, 0x1B, 0x60, - 0xDA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x6F, 0x00, 0xA3, 0x46, 0x22, 0xF2, 0x60, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x22, 0xFA, - 0xA3, 0x46, 0x6C, 0x02, 0x2A, 0xF0, 0xA3, 0x46, 0x1E, 0xF2, 0xA3, 0x46, 0x00, 0xBC, 0x00, 0xF2, - 0x01, 0x02, 0x64, 0x00, 0x44, 0x4C, 0x3F, 0xF0, 0x60, 0x43, 0x23, 0x46, 0x1E, 0xF4, 0x09, 0x60, - 0x00, 0x65, 0x3F, 0xF2, 0x26, 0x46, 0xC0, 0x84, 0xD4, 0x80, 0x60, 0x45, 0x57, 0x07, 0x80, 0xFC, - 0x1B, 0xF2, 0x06, 0xF2, 0x60, 0x41, 0x23, 0x46, 0x1E, 0xF4, 0x1B, 0xF0, 0x06, 0xF0, 0xC1, 0x81, - 0x06, 0xFA, 0x05, 0xFA, 0x9B, 0xFA, 0x65, 0x44, 0x3F, 0xFA, 0x64, 0x46, 0x00, 0xFC, 0x63, 0x46, - 0x01, 0xF2, 0x10, 0x61, 0xF2, 0xA4, 0x01, 0xFA, 0xC8, 0x83, 0x02, 0x64, 0x59, 0xD0, 0x58, 0xD8, - 0xFD, 0x1F, 0x06, 0x45, 0x1B, 0x60, 0xDA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x25, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, - 0x70, 0x67, 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, - 0x80, 0xFC, 0x05, 0xFA, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, - 0x2C, 0x44, 0x04, 0x27, 0x16, 0x00, 0x23, 0x46, 0x1E, 0xF2, 0x9E, 0xFC, 0x60, 0x46, 0x46, 0x46, - 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, 0x26, 0x46, 0x2C, 0x43, 0x2A, 0xFC, 0x06, 0xF4, - 0x00, 0x64, 0x00, 0xFA, 0x01, 0xF0, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0x01, 0xFA, 0x26, 0x46, - 0x1D, 0x00, 0x00, 0x66, 0x46, 0x46, 0xC7, 0x60, 0x31, 0x78, 0xFF, 0xFF, 0xA3, 0x46, 0x1E, 0xF0, - 0x9E, 0xFC, 0x00, 0x63, 0x33, 0x85, 0xA3, 0x46, 0x0D, 0x03, 0xA3, 0x46, 0x22, 0xF2, 0x0F, 0x65, - 0xA4, 0x85, 0xD4, 0x84, 0x22, 0xFA, 0xA3, 0x46, 0xA2, 0xFF, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, - 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, 0xCB, 0x60, 0xBC, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x88, 0xF3, - 0xFF, 0xFF, 0xD0, 0x80, 0x64, 0x46, 0x6F, 0xF2, 0x26, 0x46, 0x50, 0x03, 0x60, 0x40, 0x00, 0x36, - 0x4D, 0x00, 0x64, 0x46, 0x0E, 0xF2, 0x26, 0x46, 0x60, 0x47, 0xFF, 0xB5, 0x27, 0xF2, 0xFF, 0xFF, - 0xFF, 0xB4, 0xD4, 0x80, 0xFF, 0xFF, 0x42, 0x06, 0x64, 0x46, 0x6F, 0xF2, 0x26, 0x46, 0x60, 0x47, - 0xFF, 0xB5, 0x65, 0x41, 0x0F, 0x60, 0xA2, 0x65, 0x00, 0x64, 0xE9, 0x81, 0xD8, 0x84, 0xFD, 0x02, - 0xC8, 0x84, 0x60, 0x43, 0x44, 0xD1, 0xFF, 0xFF, 0x64, 0x47, 0xFF, 0xB5, 0x27, 0xF2, 0xFF, 0xFF, - 0xFF, 0xB4, 0xD4, 0x80, 0x64, 0x44, 0x06, 0x06, 0x07, 0xF0, 0xFF, 0xFF, 0x64, 0x46, 0x0E, 0xFA, - 0x26, 0x46, 0x19, 0x00, 0x00, 0x61, 0x27, 0xF0, 0x0F, 0x60, 0xA2, 0x65, 0x61, 0x43, 0x45, 0xD3, - 0x64, 0x41, 0xFF, 0xB1, 0x61, 0x45, 0x60, 0x47, 0xFF, 0xB4, 0xDB, 0x83, 0xD4, 0x80, 0x63, 0x41, - 0xF3, 0x02, 0xCB, 0x83, 0x63, 0x41, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x07, 0xF0, 0xFF, 0xFF, - 0x64, 0x46, 0x0E, 0xFA, 0x26, 0x46, 0xAF, 0x84, 0xE8, 0x81, 0x05, 0x03, 0x00, 0x60, 0x01, 0x64, - 0xCD, 0x81, 0xE0, 0x84, 0xFD, 0x02, 0x64, 0x46, 0x70, 0xFA, 0x26, 0x46, 0x2A, 0xF2, 0x32, 0xF0, - 0x60, 0x40, 0x08, 0x2A, 0x5C, 0x00, 0x01, 0x2B, 0x2F, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x2C, 0x00, - 0x98, 0xF1, 0x1E, 0x60, 0xF0, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, - 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, - 0x88, 0xFF, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0x98, 0xF1, 0x1E, 0x60, 0xF6, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, - 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x2B, 0x00, 0x98, 0xF1, 0x1E, 0x60, 0xEE, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, - 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, - 0x98, 0xF1, 0x1E, 0x60, 0xF4, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, - 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, - 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x07, 0xF4, - 0xFF, 0xFF, 0x22, 0xF2, 0x26, 0x46, 0x0F, 0xB4, 0xDC, 0x85, 0x98, 0xF1, 0x1E, 0x60, 0xF2, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, - 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, - 0x12, 0x00, 0x98, 0xF1, 0x1F, 0x60, 0x00, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x13, 0x00, 0x02, 0x3B, 0x11, 0x00, 0x98, 0xF1, 0x1F, 0x60, 0x02, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xCC, 0x60, 0x06, 0x78, - 0xFF, 0xFF, 0xC7, 0x60, 0x31, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0xDA, 0x64, 0x40, 0x4B, 0xF0, 0x60, - 0x58, 0x4D, 0x75, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xC7, 0x60, 0x31, 0x78, 0xFF, 0xFF, - 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xBE, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x00, 0x66, 0x46, 0x46, 0xC7, 0x60, 0x31, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0x58, 0x63, 0x60, 0x47, 0x01, 0x27, 0x64, 0x63, 0x25, 0x60, 0x26, 0x62, - 0x61, 0x5C, 0xA2, 0xD9, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, 0x00, 0xF4, - 0x04, 0xF8, 0x83, 0xFA, 0x82, 0xF8, 0xA6, 0x46, 0x02, 0xB0, 0x5E, 0x63, 0x04, 0x03, 0x64, 0x63, - 0x03, 0xB0, 0x02, 0x3A, 0x6C, 0x63, 0x3F, 0xF2, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, - 0xBD, 0xD0, 0xA6, 0x46, 0x07, 0xF8, 0x86, 0xFA, 0x85, 0xF8, 0x60, 0x47, 0x08, 0xFA, 0x25, 0x60, - 0x26, 0x62, 0xA2, 0xD1, 0x26, 0x46, 0x64, 0x41, 0x2F, 0x58, 0xFF, 0xFF, 0x2A, 0xF2, 0x2C, 0xF0, - 0x31, 0x40, 0x20, 0x26, 0x09, 0x00, 0x60, 0x40, 0xA4, 0x36, 0x21, 0x00, 0x08, 0x26, 0x07, 0x00, - 0x7E, 0xF1, 0xCC, 0x60, 0xCF, 0x78, 0xFF, 0xFF, 0xCC, 0x60, 0xFF, 0x78, 0xFF, 0xFF, 0x64, 0x40, - 0x01, 0x26, 0x12, 0x00, 0x3F, 0xF0, 0x32, 0x40, 0x10, 0x2A, 0x0A, 0x00, 0x64, 0x41, 0x60, 0x40, - 0x40, 0x27, 0x06, 0x00, 0xCD, 0x81, 0xDD, 0x81, 0x03, 0x03, 0x02, 0x03, 0x01, 0x61, 0x01, 0x00, - 0x00, 0x61, 0x60, 0x40, 0x18, 0x3A, 0x03, 0x00, 0xCD, 0x60, 0x3B, 0x78, 0xFF, 0xFF, 0x07, 0xF2, - 0x88, 0xF1, 0x66, 0x45, 0xD0, 0x80, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x03, 0x03, 0xFF, 0xFF, - 0x02, 0x26, 0x07, 0x00, 0xDA, 0x60, 0x58, 0x4F, 0xDB, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0x37, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xA4, 0x3A, 0x07, 0x00, 0xDD, 0x60, 0x58, 0x4F, - 0x45, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0x37, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xCB, 0x60, 0x58, 0x4F, - 0xD9, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x06, 0x65, 0xD4, 0x80, 0x60, 0x43, 0x52, 0x04, 0x00, 0xF4, - 0xAA, 0x60, 0xAA, 0x65, 0x09, 0xF2, 0x0A, 0xF0, 0xD4, 0x80, 0x03, 0x64, 0x4A, 0x02, 0xD0, 0x80, - 0x00, 0x64, 0x0B, 0xF0, 0x46, 0x02, 0x64, 0x45, 0xD4, 0x80, 0xF8, 0x7F, 0x08, 0x02, 0x0C, 0xF0, - 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, 0x20, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x0B, 0x00, 0xD4, 0x80, - 0x1D, 0x60, 0x60, 0x64, 0x11, 0x02, 0x0C, 0xF0, 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, 0x40, 0x67, - 0xB0, 0x84, 0xA2, 0xDA, 0x65, 0x44, 0x88, 0x3A, 0x2C, 0x00, 0x77, 0x37, 0x03, 0x00, 0x78, 0x37, - 0x01, 0x00, 0x8E, 0x37, 0x00, 0x61, 0x25, 0x00, 0xD4, 0x80, 0x08, 0x65, 0x22, 0x02, 0xD7, 0x80, - 0x01, 0x60, 0x00, 0x64, 0x0C, 0xF0, 0x1D, 0x04, 0xD0, 0x80, 0x0D, 0xF0, 0x1A, 0x02, 0x26, 0x46, - 0x14, 0xF2, 0x01, 0x63, 0x02, 0xA8, 0x64, 0x47, 0x14, 0x03, 0x7F, 0xB4, 0xFD, 0xA0, 0x06, 0x03, - 0x10, 0x07, 0x23, 0xF0, 0x60, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x6A, 0x00, 0xD2, 0xF3, 0xFF, 0xFF, - 0x02, 0xBC, 0xD2, 0xFB, 0xE5, 0x60, 0x58, 0x4F, 0x94, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0x37, 0x78, - 0xFF, 0xFF, 0x26, 0x46, 0x61, 0x40, 0x01, 0x2A, 0x12, 0x00, 0x98, 0xF1, 0x1F, 0x60, 0x06, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x7C, 0x00, 0xDD, 0x60, - 0x58, 0x4F, 0x45, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0x36, 0x73, 0x00, - 0xCD, 0x60, 0x58, 0x4F, 0x48, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0x37, 0x78, 0xFF, 0xFF, 0x60, 0x40, - 0x0C, 0x26, 0x69, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x66, 0x00, 0xB0, 0x3A, 0x05, 0x00, 0xD1, 0x60, - 0x58, 0x4F, 0x80, 0x78, 0xFF, 0xFF, 0x5B, 0x00, 0x00, 0x3A, 0x05, 0x00, 0xD4, 0x60, 0x58, 0x4F, - 0xF3, 0x78, 0xFF, 0xFF, 0x54, 0x00, 0x20, 0x3A, 0x05, 0x00, 0xD4, 0x60, 0x58, 0x4F, 0xF3, 0x78, - 0xFF, 0xFF, 0x4D, 0x00, 0xC0, 0x3A, 0x05, 0x00, 0xDA, 0x60, 0x58, 0x4F, 0x48, 0x78, 0xFF, 0xFF, - 0x46, 0x00, 0xA0, 0x3A, 0x05, 0x00, 0xDA, 0x60, 0x58, 0x4F, 0xA6, 0x78, 0xFF, 0xFF, 0x3F, 0x00, - 0x40, 0x3A, 0x0D, 0x00, 0xE1, 0x60, 0x58, 0x4F, 0x10, 0x78, 0xFF, 0xFF, 0x38, 0x00, 0x60, 0x40, - 0x50, 0x3A, 0x05, 0x00, 0xEA, 0x60, 0x58, 0x4F, 0xF5, 0x78, 0xFF, 0xFF, 0x30, 0x00, 0x33, 0x00, - 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x2A, 0xF2, 0x3B, 0xF0, 0x60, 0x40, 0x40, 0x2B, - 0x19, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, 0xFF, 0xFF, 0x14, 0x03, 0xC0, 0x60, 0x00, 0x64, - 0x64, 0x40, 0x20, 0x2B, 0x0F, 0x00, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x23, 0xF2, - 0x10, 0xBD, 0xB4, 0x9C, 0x3F, 0xF2, 0x23, 0xF8, 0xF8, 0xA4, 0x3F, 0xFA, 0x00, 0xF4, 0x60, 0x47, - 0x08, 0xFA, 0x26, 0x46, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xBE, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x0C, 0x00, 0x66, 0x44, - 0x00, 0xA8, 0xFF, 0xFF, 0x0A, 0x03, 0x26, 0x46, 0x1B, 0x60, 0xDA, 0x64, 0x40, 0x4B, 0xF0, 0x60, - 0x58, 0x4D, 0x75, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xCB, 0x60, 0xB9, 0x78, 0xFF, 0xFF, - 0x14, 0xF2, 0x00, 0x7C, 0x3E, 0xF8, 0xCC, 0x84, 0xCC, 0x84, 0x19, 0x03, 0x60, 0x02, 0x11, 0xF2, - 0x07, 0xFA, 0xAC, 0xF3, 0x19, 0xFA, 0xCD, 0x60, 0x58, 0x4E, 0xE4, 0x78, 0xFF, 0xFF, 0x1B, 0x60, - 0xDA, 0x62, 0x1B, 0x60, 0x9A, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0xF2, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x79, 0x00, 0xA2, 0xFF, - 0x46, 0x45, 0xB4, 0x60, 0x58, 0x4E, 0x91, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x11, 0x03, 0x7E, 0x63, - 0x46, 0x4B, 0x25, 0x46, 0xA3, 0xD0, 0x2B, 0x46, 0xA3, 0xD8, 0xFB, 0x1F, 0x89, 0xFC, 0x8A, 0xFC, - 0x88, 0xFC, 0x05, 0x18, 0x64, 0x46, 0x01, 0xF0, 0x10, 0x67, 0xC0, 0x84, 0x01, 0xFA, 0x08, 0xFE, - 0x2B, 0x46, 0x46, 0x46, 0x25, 0x46, 0xCD, 0x60, 0x58, 0x4E, 0xE4, 0x78, 0xFF, 0xFF, 0x1F, 0x60, - 0x8E, 0x62, 0xA2, 0xD3, 0x88, 0xF3, 0x00, 0xA8, 0x07, 0xFA, 0x0F, 0x03, 0x1B, 0x60, 0xDA, 0x62, - 0x1B, 0x60, 0x94, 0x64, 0xA2, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xF3, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x0E, 0x00, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, - 0x88, 0x64, 0xA2, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xF4, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x26, 0x44, 0x00, 0xA8, 0xC1, 0xFE, 0x31, 0x03, 0xD2, 0xF3, - 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x26, 0x46, 0x2A, 0xF2, 0x3B, 0xF0, 0x60, 0x40, 0x40, 0x2B, - 0x18, 0x00, 0x64, 0x40, 0x20, 0x2B, 0x15, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, 0xFF, 0xFF, - 0x10, 0x03, 0xC0, 0x67, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x23, 0xF2, 0x10, 0xBD, - 0xB4, 0x9C, 0x3F, 0xF2, 0x23, 0xF8, 0xF8, 0xA4, 0x3F, 0xFA, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, - 0x26, 0x46, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xBE, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0xF1, 0x64, 0x3B, 0x42, 0x4A, 0xDB, - 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x2A, 0xF2, 0x82, 0x60, 0xFF, 0x65, 0xA4, 0x87, - 0x02, 0xBF, 0x2A, 0xFA, 0x1C, 0xF2, 0x13, 0xFA, 0x32, 0xF2, 0x2C, 0xFA, 0x33, 0xF2, 0x2D, 0xFA, - 0x34, 0xF2, 0x2E, 0xFA, 0x2F, 0xF2, 0x32, 0xFA, 0x30, 0xF2, 0x33, 0xFA, 0x31, 0xF2, 0x34, 0xFA, - 0x67, 0xF3, 0x2F, 0xFA, 0x68, 0xF3, 0x30, 0xFA, 0x69, 0xF3, 0x31, 0xFA, 0x2E, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xF8, 0x62, 0xD0, 0x60, 0x7B, 0x64, 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x60, - 0x62, 0x63, 0x20, 0x60, 0x02, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1E, 0x63, 0x1F, 0x60, 0x6C, 0x61, - 0x20, 0x60, 0x0C, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x1F, 0x60, 0x8E, 0x63, 0x20, 0x60, - 0x2E, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, 0x90, 0x63, 0x20, 0x60, 0x30, 0x62, 0xA2, 0xD3, - 0xA3, 0xDB, 0x1F, 0x60, 0x9A, 0x63, 0x20, 0x60, 0x3A, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, - 0x9C, 0x63, 0x20, 0x60, 0x3C, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, 0x9E, 0x63, 0x20, 0x60, - 0x3E, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, 0xA0, 0x63, 0x20, 0x60, 0x40, 0x62, 0xA2, 0xD3, - 0xA3, 0xDB, 0x1F, 0x60, 0x92, 0x63, 0x20, 0x60, 0x32, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, - 0x94, 0x63, 0x20, 0x60, 0x34, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, 0x96, 0x63, 0x20, 0x60, - 0x36, 0x62, 0xA2, 0xD3, 0xA3, 0xDB, 0x1F, 0x60, 0xB6, 0x63, 0xBD, 0xD1, 0xCB, 0xF9, 0x67, 0xF9, - 0xBD, 0xD1, 0xCC, 0xF9, 0x68, 0xF9, 0xA3, 0xD1, 0xCD, 0xF9, 0x69, 0xF9, 0x01, 0x64, 0x6B, 0xFB, - 0x1F, 0x60, 0xA8, 0x62, 0xA2, 0xD3, 0xC4, 0xFB, 0x00, 0x63, 0x4A, 0xFD, 0x5A, 0xFD, 0x6C, 0xFD, - 0x6D, 0xFD, 0x21, 0x60, 0x82, 0x64, 0xA0, 0xD3, 0xEA, 0x60, 0x58, 0x4E, 0x78, 0x78, 0xFF, 0xFF, - 0x21, 0x60, 0x80, 0x64, 0xA0, 0xD1, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD3, 0xFF, 0x60, 0xE7, 0x65, - 0x32, 0x41, 0xA5, 0x81, 0xFF, 0xA0, 0xFF, 0xFF, 0x01, 0x03, 0x0B, 0x00, 0x08, 0x65, 0xB5, 0x81, - 0x1F, 0x60, 0x96, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x02, 0x00, 0x10, 0x65, - 0xB5, 0x81, 0x41, 0x52, 0x88, 0xF5, 0x32, 0x44, 0x10, 0xB0, 0xFF, 0xFF, 0x0B, 0x03, 0x21, 0x60, - 0x2C, 0x62, 0xA2, 0xD3, 0x06, 0xF0, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, - 0xB0, 0x84, 0x06, 0xFA, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD3, 0x22, 0x7C, 0xFF, 0xA0, 0xFD, 0xA0, - 0x05, 0x06, 0x03, 0x03, 0xFE, 0xA0, 0x04, 0x7C, 0x01, 0x02, 0x36, 0xF8, 0x0E, 0xF0, 0x0F, 0x60, - 0xA2, 0x65, 0x20, 0x60, 0x38, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xFE, 0xA0, 0x03, 0xA8, 0x11, 0x06, - 0x5F, 0xF1, 0x06, 0x02, 0x64, 0x44, 0x08, 0x2A, 0x09, 0x00, 0x06, 0x64, 0x44, 0xD3, 0x0D, 0x00, - 0x64, 0x44, 0x20, 0x2A, 0x03, 0x00, 0x0A, 0x64, 0x44, 0xD3, 0x07, 0x00, 0x01, 0x64, 0x44, 0xD3, - 0x04, 0x00, 0xE8, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x00, 0x00, 0x0E, 0xFA, 0x1F, 0x60, 0x9E, 0x62, - 0xA2, 0xD1, 0x20, 0x44, 0x20, 0xB5, 0x64, 0x41, 0x00, 0xB9, 0xD4, 0x84, 0x08, 0x28, 0x20, 0xBC, - 0x40, 0x40, 0x11, 0x60, 0xF0, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x00, 0xB8, 0x10, 0x60, 0x0C, 0x65, - 0x0D, 0x03, 0x11, 0x60, 0xF8, 0x63, 0xC5, 0xF3, 0xA3, 0xD1, 0xE0, 0x84, 0xC4, 0x84, 0xA0, 0xD3, - 0xFF, 0xFF, 0x01, 0xB0, 0xFF, 0xFF, 0x02, 0x02, 0xC5, 0xF9, 0x65, 0xF9, 0xC5, 0xF3, 0x01, 0x61, - 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, 0xFB, 0x01, 0x9A, 0xF3, 0x61, 0x45, 0xA4, 0x80, - 0xFF, 0xFF, 0x0B, 0x02, 0x00, 0xB8, 0x01, 0x63, 0x08, 0x03, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x24, - 0x02, 0x00, 0xDF, 0x83, 0xFA, 0x01, 0xC5, 0xFD, 0x65, 0xFD, 0x0A, 0x64, 0x25, 0x60, 0x1E, 0x63, - 0xA3, 0xDB, 0x01, 0x64, 0x25, 0x60, 0x20, 0x63, 0xA3, 0xDB, 0xB6, 0xF1, 0x09, 0x60, 0x2A, 0x64, - 0xD0, 0x80, 0x03, 0x64, 0x01, 0x06, 0x06, 0x64, 0xB0, 0xFB, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xD8, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xCF, 0x60, 0x05, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x65, 0xF1, 0x1C, 0x60, 0x00, 0x62, 0xA2, 0xD9, 0x08, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCF, 0x60, - 0x2D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xCE, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x20, 0x44, 0x01, 0x65, 0x34, 0x80, 0x1F, 0x60, 0xA6, 0x64, 0xA0, 0xD3, - 0xC3, 0xFB, 0x60, 0x40, 0x05, 0x3A, 0x03, 0x00, 0xEB, 0x60, 0x1A, 0x61, 0x11, 0x00, 0x04, 0x3A, - 0x03, 0x00, 0xEB, 0x60, 0x0E, 0x61, 0x0C, 0x00, 0x03, 0x3A, 0x03, 0x00, 0xEB, 0x60, 0x02, 0x61, - 0x07, 0x00, 0x02, 0x3A, 0x03, 0x00, 0xEA, 0x60, 0xF6, 0x61, 0x02, 0x00, 0xEA, 0x60, 0xEA, 0x61, - 0x3E, 0x60, 0x00, 0x66, 0x01, 0x60, 0x78, 0x64, 0x0A, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, - 0x00, 0x66, 0xC4, 0xF3, 0x60, 0x41, 0x00, 0xA8, 0xFA, 0xA1, 0x01, 0x03, 0xA1, 0xDB, 0x01, 0x60, - 0x7A, 0x63, 0x16, 0x60, 0xC4, 0x61, 0xBD, 0xD3, 0xFF, 0xFF, 0x20, 0x7F, 0xA1, 0xDB, 0xBD, 0xD3, - 0xFF, 0xFF, 0x21, 0x7F, 0x59, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0x59, 0xDB, 0x0F, 0x60, - 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xD8, 0x62, 0x40, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xCF, 0x60, 0x77, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x1C, 0x60, 0x00, 0x62, 0x16, 0x60, 0xC2, 0x64, 0xA2, 0xDB, 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCF, 0x60, 0x9C, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x65, 0xF1, 0x1C, 0x60, 0x00, 0x62, 0xA2, 0xD9, 0x08, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x0F, 0x60, 0xD8, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCF, 0x60, 0xB3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, - 0x0F, 0x60, 0xCE, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x20, 0x40, 0x20, 0x2A, 0x04, 0x00, 0xEB, 0x60, 0x58, 0x4E, 0x16, 0x78, 0xFF, 0xFF, 0x0F, 0x60, - 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x4E, 0xF3, 0xFF, 0xFF, 0x13, 0x1B, 0x1F, 0x60, 0xAE, 0x64, - 0xA0, 0xD3, 0xC7, 0xFB, 0x1F, 0x60, 0x1E, 0x65, 0x1F, 0x60, 0xBC, 0x61, 0x1F, 0x60, 0x1C, 0x64, - 0x20, 0x63, 0x59, 0xD1, 0x58, 0xD9, 0xA5, 0xD9, 0xDA, 0x85, 0xFB, 0x1F, 0xD0, 0x60, 0x62, 0x78, - 0xFF, 0xFF, 0x20, 0x60, 0x40, 0x63, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x85, 0xC7, 0x83, 0xFE, 0xA5, - 0x89, 0xF3, 0xFF, 0xFF, 0xC4, 0x84, 0x66, 0x45, 0x60, 0x46, 0x60, 0x41, 0xBD, 0xD1, 0x03, 0xF8, - 0xBD, 0xD1, 0x04, 0xF8, 0xA3, 0xD1, 0x05, 0xF8, 0x06, 0xF2, 0xFF, 0xFF, 0x02, 0x7E, 0x06, 0xFA, - 0x5F, 0xF3, 0x60, 0xFB, 0x73, 0xF0, 0x63, 0xF9, 0x66, 0x43, 0x21, 0x60, 0x2C, 0x62, 0x32, 0x40, - 0x08, 0x2A, 0x09, 0x00, 0xA2, 0xD3, 0x06, 0xF0, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0x80, 0xBF, 0xB0, 0x84, 0x06, 0xFA, 0x63, 0x44, 0x63, 0xF3, 0x60, 0x45, 0x66, 0x41, 0x65, 0x46, - 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, - 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x5F, 0xF3, 0x60, 0xF1, - 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, 0x5F, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, - 0xAE, 0x65, 0x63, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, - 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x61, 0xFB, 0x6F, 0xF0, - 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, - 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, - 0x66, 0x43, 0x0C, 0xF4, 0xC5, 0xFE, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, - 0xD8, 0x62, 0x00, 0x60, 0x30, 0x64, 0xA2, 0xDB, 0xCF, 0x60, 0xC7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x4E, 0xDF, 0x60, 0x58, 0x4F, 0x13, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, - 0x0F, 0x4E, 0xDC, 0x60, 0x58, 0x4F, 0x6B, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x4E, 0xDB, 0x60, - 0x58, 0x4F, 0xE8, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x4E, 0xDB, 0x60, 0x58, 0x4F, 0x42, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0xD7, 0x01, 0x4E, 0xF3, 0x7E, 0xF5, 0x60, 0x40, 0xFF, 0x22, 0x0A, 0x00, - 0x89, 0xF1, 0xCC, 0x84, 0xE0, 0x84, 0xC0, 0x86, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, - 0x7E, 0xF5, 0x08, 0x00, 0x0F, 0x60, 0xF4, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x11, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x4E, 0xF3, 0x66, 0x40, 0xFF, 0x22, 0x05, 0x00, 0xFF, 0x22, 0x37, 0x00, - 0xD1, 0x60, 0x30, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x6A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x6A, 0xF3, - 0x00, 0x65, 0xD4, 0x80, 0x4E, 0xF3, 0x0F, 0x03, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x0F, 0x60, 0xD8, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD0, 0x60, 0x9F, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, - 0x0B, 0x04, 0x0F, 0x60, 0xD8, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD0, 0x60, 0xB3, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x00, 0x62, 0x06, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x44, 0x01, 0xB5, 0x54, 0x80, 0xDA, 0xFE, 0xBE, 0xFE, 0x88, 0xF1, - 0x02, 0x64, 0x87, 0xF3, 0xC0, 0x83, 0x40, 0x48, 0x76, 0xFD, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, - 0xFF, 0xFF, 0x28, 0x44, 0x4C, 0x88, 0x76, 0xF3, 0x02, 0x65, 0xC4, 0x83, 0xF5, 0x02, 0xA2, 0x60, - 0x58, 0x4E, 0x00, 0x78, 0xFF, 0xFF, 0x14, 0x60, 0xD0, 0x62, 0x14, 0x60, 0xD2, 0x64, 0xA2, 0xDB, - 0x00, 0x64, 0x4A, 0xDB, 0x01, 0x60, 0xFE, 0x63, 0x12, 0x60, 0xCC, 0x61, 0x00, 0x64, 0x59, 0xDB, - 0xFE, 0x1F, 0x7E, 0xF1, 0x1B, 0x60, 0x9A, 0x61, 0x64, 0x40, 0xFF, 0x26, 0x39, 0x00, 0xD1, 0x60, - 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0x88, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, - 0xFF, 0xFF, 0x1B, 0x60, 0x8E, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, - 0xA0, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0xA6, 0x61, 0xD1, 0x60, - 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0xB2, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, - 0xFF, 0xFF, 0x1B, 0x60, 0xBE, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, - 0xAC, 0x61, 0xD1, 0x60, 0x58, 0x4E, 0x33, 0x78, 0xFF, 0xFF, 0x1B, 0x60, 0x94, 0x61, 0xD1, 0x60, - 0x58, 0x4E, 0x5F, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xD6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, - 0xC5, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xA1, 0xD3, 0x0E, 0x57, 0x24, 0x00, 0x0E, 0xF2, 0x44, 0x4C, - 0x80, 0xB0, 0x10, 0xB0, 0x0B, 0x03, 0x1B, 0x60, 0xDA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x13, 0x00, 0x12, 0x02, 0xF0, 0x37, - 0x09, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x90, 0xF3, 0x02, 0x02, - 0xCC, 0x84, 0x90, 0xFB, 0x1B, 0x60, 0xDA, 0x64, 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, 0x75, 0x78, - 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, 0xD9, 0x02, 0x37, 0x58, 0xFF, 0xFF, 0xA1, 0xD3, - 0x0E, 0x57, 0x19, 0x00, 0x0E, 0xF2, 0x44, 0x4C, 0x80, 0xB0, 0x10, 0xB0, 0x0B, 0x03, 0x1B, 0x60, - 0xDA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x08, 0x00, 0x07, 0x02, 0x1B, 0x60, 0xDA, 0x64, 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, - 0x75, 0x78, 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, 0xE4, 0x02, 0x37, 0x58, 0xFF, 0xFF, - 0x00, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xB0, 0x64, 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, - 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF3, - 0x31, 0xFA, 0x67, 0xF3, 0x32, 0xFA, 0x68, 0xF3, 0x33, 0xFA, 0x69, 0xF3, 0x34, 0xFA, 0xAC, 0xF1, - 0x19, 0xF8, 0x06, 0x63, 0x3F, 0xFC, 0x1C, 0xF2, 0x13, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x07, 0xF2, - 0x88, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x0C, 0x03, 0x60, 0x46, 0x06, 0xF2, 0x26, 0x46, - 0x01, 0xB0, 0xFF, 0xFF, 0x03, 0x02, 0xD3, 0x60, 0x64, 0x78, 0xFF, 0xFF, 0xD4, 0x60, 0xBA, 0x78, - 0xFF, 0xFF, 0x00, 0xF4, 0x0A, 0xF2, 0x09, 0xF2, 0xFF, 0xA0, 0x00, 0xA0, 0x13, 0x02, 0xFF, 0xA0, - 0x04, 0x03, 0x08, 0x03, 0xD1, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x55, 0xFB, 0xD1, 0x60, - 0xE0, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0x32, 0x40, 0x08, 0x2A, 0x0F, 0x00, 0x55, 0xFD, 0xD1, 0x60, - 0xE0, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, 0x0E, 0x63, 0x01, 0xA4, 0x0A, 0xFA, - 0x0B, 0xFC, 0x43, 0x59, 0xD4, 0x60, 0x93, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, - 0x0D, 0x63, 0x01, 0xA4, 0x0A, 0xFA, 0x0B, 0xFC, 0x43, 0x59, 0xD4, 0x60, 0x93, 0x78, 0xFF, 0xFF, - 0x88, 0xF5, 0x00, 0xF2, 0x26, 0x46, 0x00, 0xA0, 0x2E, 0xF0, 0x37, 0x03, 0x66, 0x41, 0x12, 0x60, - 0xCE, 0x65, 0x64, 0x47, 0x00, 0x7F, 0x88, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, - 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, - 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, - 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, - 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x87, 0xF1, 0x14, 0x60, 0xCE, 0x61, - 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, 0x05, 0x05, 0xA1, 0xD3, 0x4A, 0xD9, 0xA0, 0xDD, - 0xDA, 0x9C, 0xA1, 0xD9, 0xD3, 0x60, 0x2D, 0x78, 0xFF, 0xFF, 0x14, 0x60, 0xCE, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0x62, 0x18, 0x14, 0x60, 0xCE, 0x64, 0x04, 0xA5, 0xA0, 0xD1, 0x72, 0x44, 0xFF, 0xB4, - 0x64, 0x40, 0xE0, 0x22, 0x1F, 0xB4, 0x64, 0x40, 0xF8, 0x22, 0x07, 0xB4, 0x02, 0x00, 0x03, 0x04, - 0xD0, 0x84, 0xD0, 0x80, 0xFC, 0x01, 0xE0, 0x84, 0x44, 0xD3, 0xFF, 0xFF, 0x60, 0x43, 0x66, 0x41, - 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, - 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, - 0x00, 0xF8, 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, - 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, - 0x61, 0x46, 0x2E, 0xF0, 0x66, 0x41, 0x12, 0x60, 0xCE, 0x65, 0x64, 0x47, 0x00, 0x7F, 0x88, 0xF1, - 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, - 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, - 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, - 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, - 0x61, 0x46, 0xD3, 0x60, 0x2D, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x02, 0x61, 0xB3, 0x60, 0x58, 0x4D, - 0x77, 0x78, 0xFF, 0xFF, 0x87, 0xF1, 0x72, 0x44, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x04, - 0xD0, 0x84, 0xFB, 0x01, 0xE0, 0x83, 0x88, 0xF3, 0x02, 0xA3, 0x43, 0x93, 0x66, 0x44, 0x00, 0xA8, - 0x56, 0xFD, 0x37, 0x03, 0x00, 0x64, 0x2B, 0xFA, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, 0x66, 0x45, - 0x63, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF2, 0x65, 0x46, 0x2C, 0xFA, 0x2D, 0xF8, 0xAE, 0xFA, - 0xCB, 0xF3, 0x2F, 0xFA, 0x32, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0x33, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, - 0x34, 0xFA, 0xAC, 0xF1, 0x19, 0xF8, 0xFF, 0x67, 0x0E, 0xFA, 0x66, 0x45, 0x63, 0x46, 0x0E, 0xF2, - 0x65, 0x46, 0x02, 0x63, 0x00, 0x7E, 0x13, 0xFA, 0x3F, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0x88, 0xF3, - 0x07, 0xFA, 0x66, 0x41, 0x00, 0xF4, 0x05, 0x64, 0x09, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, - 0x8E, 0x64, 0xA2, 0xDB, 0x61, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x56, 0xF3, 0xA3, 0xFF, 0x60, 0x43, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, 0xFF, 0xFF, - 0x56, 0xF3, 0xFF, 0xFF, 0x40, 0x58, 0x03, 0x65, 0xE2, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, - 0x56, 0xF3, 0x26, 0x46, 0x60, 0x43, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, - 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, - 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, - 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x2E, 0xF0, 0x66, 0x41, 0x12, 0x60, - 0xCE, 0x65, 0x64, 0x47, 0x00, 0x7F, 0x88, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, - 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, - 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, - 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, - 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x2C, 0xF2, 0x2D, 0xF0, 0xAE, 0xF2, - 0x66, 0x45, 0x63, 0x46, 0x03, 0xFA, 0x04, 0xF8, 0x55, 0xF3, 0x85, 0xFA, 0xFF, 0xA0, 0x65, 0x46, - 0x03, 0x03, 0xD4, 0x60, 0xD6, 0x78, 0xFF, 0xFF, 0x95, 0xF3, 0x66, 0x45, 0x63, 0x46, 0x1B, 0xFA, - 0x65, 0x46, 0xBA, 0x65, 0x60, 0x44, 0xC4, 0x85, 0x01, 0x60, 0xFE, 0x61, 0x00, 0x64, 0x80, 0x63, - 0xC7, 0x85, 0x94, 0x84, 0x59, 0xDB, 0xFC, 0x1F, 0x00, 0x60, 0x88, 0x64, 0x3F, 0xFA, 0x00, 0xF4, - 0x02, 0x64, 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, 0x80, 0x7F, 0x10, 0x7E, 0x0C, 0xFA, 0x1A, 0x65, - 0x80, 0x61, 0x02, 0x60, 0x00, 0x63, 0x0F, 0x4E, 0xF2, 0x60, 0x58, 0x4F, 0x4A, 0x78, 0xFF, 0xFF, - 0x0E, 0x4F, 0xD4, 0x60, 0xA7, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x23, 0xF0, 0x00, 0x60, 0x02, 0x64, - 0xA0, 0x80, 0x00, 0xF4, 0x03, 0x03, 0xD4, 0x60, 0x50, 0x78, 0xFF, 0xFF, 0x09, 0xF2, 0xFF, 0xFF, - 0xFF, 0xA0, 0x00, 0xA0, 0x0C, 0x03, 0x03, 0x03, 0xD3, 0x60, 0xCC, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, - 0x26, 0x46, 0xFF, 0xA0, 0x87, 0xF4, 0x10, 0x02, 0xD4, 0x60, 0xD6, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, - 0xFF, 0xFF, 0xFF, 0xA0, 0xFD, 0xA0, 0x02, 0x03, 0x04, 0x03, 0x06, 0x00, 0xD4, 0x60, 0x0C, 0x78, - 0xFF, 0xFF, 0xD4, 0x60, 0x17, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, - 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x12, 0x60, - 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, - 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, - 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, - 0x14, 0x60, 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, - 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, - 0xA1, 0xDB, 0x14, 0x60, 0xD0, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, - 0xA2, 0xDB, 0xD1, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, - 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x12, 0x60, - 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, - 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, - 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, - 0x14, 0x60, 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, - 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, - 0xA1, 0xDB, 0x14, 0x60, 0xD0, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, - 0xA2, 0xDB, 0xD1, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x32, 0x44, 0x08, 0xB0, 0x87, 0xF4, - 0x03, 0x02, 0xD1, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0x3C, 0x78, 0xFF, 0xFF, 0x32, 0x44, - 0x26, 0x46, 0x08, 0xB0, 0x07, 0xF2, 0x03, 0x02, 0xD1, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x60, 0x46, - 0x1B, 0xF2, 0x26, 0x46, 0xBA, 0x65, 0x60, 0x44, 0xC4, 0x85, 0x01, 0x60, 0xFE, 0x61, 0x00, 0x64, - 0x80, 0x63, 0xC7, 0x85, 0x94, 0x84, 0x59, 0xDB, 0xFC, 0x1F, 0x00, 0xF4, 0x01, 0x60, 0xFE, 0x61, - 0x7E, 0x65, 0x18, 0x63, 0x5B, 0xD2, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0xD7, 0x80, 0x18, 0x02, - 0xF9, 0x02, 0x00, 0xF4, 0x02, 0x63, 0x0E, 0x65, 0x5B, 0xD2, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, - 0xD7, 0x80, 0x0E, 0x02, 0xF9, 0x02, 0x26, 0x46, 0x07, 0xF4, 0x06, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, - 0x06, 0xFA, 0x26, 0x46, 0x00, 0xF4, 0x04, 0x64, 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, 0x57, 0x00, - 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, - 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, - 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, - 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x14, 0x60, 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, - 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, - 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x14, 0x60, 0xD0, 0x62, 0x65, 0x44, - 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0x00, 0xF4, 0x04, 0x64, 0x0A, 0xFA, - 0x0F, 0x64, 0x0B, 0xFA, 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x41, 0x58, 0x26, 0x46, 0x2C, 0xF2, - 0xA1, 0xDB, 0x2D, 0xF2, 0x59, 0xDB, 0x2E, 0xF2, 0x59, 0xDB, 0x03, 0x65, 0xE2, 0x60, 0x58, 0x4E, - 0x5B, 0x78, 0xFF, 0xFF, 0x03, 0x65, 0xE2, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x88, 0xF3, 0x07, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0xF4, 0x0A, 0xF2, 0x09, 0xF2, 0xFF, 0xA0, 0x00, 0xA0, 0x06, 0x02, - 0xFF, 0xA0, 0x07, 0x03, 0x09, 0x03, 0xD3, 0x60, 0xCC, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0x8C, 0x78, - 0xFF, 0xFF, 0xD4, 0x60, 0xDB, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x07, 0xF4, 0x06, 0xF2, 0x66, 0x43, - 0x00, 0x7E, 0x06, 0xFA, 0x26, 0x46, 0xD3, 0x60, 0x3C, 0x78, 0xFF, 0xFF, 0x63, 0x46, 0x06, 0xF2, - 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x26, 0x46, 0x88, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x02, 0x64, - 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, - 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x16, 0x60, 0xAC, 0x7C, 0x2A, 0xF2, 0xA4, 0xDB, 0x22, 0x60, - 0x2A, 0x63, 0xFF, 0xB4, 0x01, 0x61, 0x00, 0x60, 0x10, 0x7C, 0xA3, 0xDB, 0x60, 0x40, 0x00, 0x36, - 0x03, 0x00, 0x02, 0x61, 0x00, 0x60, 0x30, 0x7C, 0x41, 0x47, 0x2A, 0xF8, 0x2F, 0xF2, 0x2C, 0xFA, - 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, - 0xCD, 0xF3, 0x31, 0xFA, 0x67, 0xF3, 0x32, 0xFA, 0x68, 0xF3, 0x33, 0xFA, 0x69, 0xF3, 0x34, 0xFA, - 0xAC, 0xF1, 0x19, 0xF8, 0x00, 0x7C, 0x3E, 0xF8, 0x1C, 0xF0, 0x13, 0xF8, 0x07, 0xF2, 0x88, 0xF1, - 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0xD9, 0x60, 0xA3, 0x78, 0xFF, 0xFF, 0x40, 0x4B, - 0xAB, 0x46, 0x06, 0xF2, 0xAB, 0x46, 0x00, 0xF4, 0x01, 0xB0, 0xFF, 0xFF, 0x03, 0x02, 0xD9, 0x60, - 0xA3, 0x78, 0xFF, 0xFF, 0x22, 0x60, 0x2C, 0x63, 0x09, 0xF2, 0xBD, 0xDB, 0x43, 0x44, 0x10, 0xB0, - 0x80, 0x60, 0x00, 0x63, 0x0D, 0x03, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x44, - 0xFE, 0x26, 0x08, 0x00, 0x32, 0x40, 0x08, 0x26, 0x06, 0x00, 0xDA, 0x60, 0x02, 0x78, 0xFF, 0xFF, - 0x32, 0x40, 0x10, 0x2A, 0x00, 0x63, 0xAB, 0x46, 0x06, 0xF0, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, - 0x63, 0x45, 0xB4, 0x84, 0x06, 0xFA, 0xAB, 0x46, 0x0A, 0xF0, 0x56, 0xF9, 0x24, 0x43, 0xBD, 0xD9, - 0x43, 0x44, 0x01, 0x63, 0x32, 0x40, 0x10, 0x26, 0x10, 0xBB, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x60, 0x40, 0xFE, 0x26, 0x10, 0xBB, 0x09, 0xFC, 0x27, 0x44, 0xFE, 0xA0, 0xFF, 0xFF, - 0x03, 0x03, 0xD5, 0x60, 0xFE, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0xA2, 0x64, 0x24, 0x43, 0x0B, 0xF0, - 0xA0, 0xD9, 0xBD, 0xD9, 0x0C, 0xF0, 0x58, 0xD9, 0xBD, 0xD9, 0x0D, 0xF0, 0x58, 0xD9, 0xBD, 0xD9, - 0x43, 0x44, 0x1C, 0x65, 0x2D, 0x61, 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x64, 0x44, - 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0xF4, 0x02, 0x02, 0x60, 0x02, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0xE0, 0x84, 0x04, 0xA5, 0xC5, 0x81, - 0xA1, 0xD3, 0x00, 0x65, 0x60, 0x43, 0x59, 0xD3, 0xFF, 0xFF, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, - 0x01, 0x64, 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, - 0x04, 0x64, 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, - 0x10, 0x64, 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x01, 0x00, 0x00, 0x64, 0xCF, 0x83, - 0xB4, 0x85, 0xE1, 0x02, 0x65, 0x44, 0x60, 0xFB, 0xB8, 0xF3, 0x2B, 0x45, 0x66, 0x41, 0x65, 0x46, - 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, - 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x5F, 0xF3, 0x60, 0xF1, - 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, 0x5F, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, - 0xAE, 0x65, 0xB8, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, - 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x61, 0xFB, 0x6F, 0xF0, - 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, - 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, - 0x66, 0x43, 0x0C, 0xF4, 0xFF, 0xFF, 0xD6, 0x60, 0x80, 0x78, 0xFF, 0xFF, 0x16, 0x65, 0x2D, 0x61, - 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF4, 0x02, 0x02, 0x60, 0x02, 0x61, - 0xA1, 0xD3, 0xFF, 0xFF, 0xE0, 0x84, 0x04, 0xA5, 0xC5, 0x81, 0xA1, 0xD3, 0x00, 0x65, 0x60, 0x43, - 0x59, 0xD3, 0xFF, 0xFF, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x15, 0x00, 0x04, 0x3A, - 0x02, 0x00, 0x02, 0x64, 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, 0x04, 0x64, 0x0D, 0x00, 0x0B, 0x3A, - 0x02, 0x00, 0x08, 0x64, 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x10, 0x64, 0x05, 0x00, 0x16, 0x3A, - 0x02, 0x00, 0x20, 0x64, 0x01, 0x00, 0x00, 0x64, 0xCF, 0x83, 0xB4, 0x85, 0xE1, 0x02, 0x65, 0x44, - 0x60, 0xFB, 0xB8, 0xF3, 0x2B, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, - 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, - 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x5F, 0xF3, 0x60, 0xF1, 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, - 0x02, 0x02, 0x5F, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, 0xB8, 0xF3, 0xFF, 0xFF, - 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x61, 0xFB, 0x6F, 0xF0, 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, - 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, - 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, - 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, 0x0C, 0xF4, 0xFF, 0xFF, - 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x16, 0x65, 0x27, 0x40, 0x02, 0x3A, 0x03, 0x00, 0x1C, 0x65, - 0xF6, 0xA4, 0x01, 0x00, 0xFC, 0xA4, 0x24, 0x43, 0x22, 0x60, 0x82, 0x61, 0x5D, 0x91, 0x51, 0x90, - 0xFF, 0xFF, 0x04, 0x28, 0x60, 0x41, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, - 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, - 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x22, 0x60, 0x28, 0x7C, 0x03, 0x1E, - 0x60, 0xFE, 0xBD, 0xDF, 0x20, 0xFE, 0x22, 0x60, 0x2C, 0x64, 0x53, 0x93, 0xA4, 0xDD, 0x26, 0x46, - 0x00, 0xF4, 0x1F, 0x60, 0x90, 0x64, 0xA0, 0xD3, 0x00, 0x63, 0x00, 0xB8, 0x0A, 0xFC, 0x03, 0x02, - 0xD7, 0x60, 0x14, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, 0x27, 0x40, 0x02, 0x3A, 0x02, 0x00, 0x0E, 0xF2, - 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x3A, 0x26, 0x00, 0x60, 0x41, 0x00, 0x36, 0x23, 0x00, 0xE0, 0xA0, - 0xDA, 0x85, 0x20, 0x07, 0x1F, 0x60, 0x1E, 0x63, 0xA3, 0xD1, 0x65, 0x42, 0xD1, 0x80, 0x1F, 0x60, - 0x20, 0x63, 0x18, 0x02, 0x50, 0xFE, 0x61, 0x40, 0xFE, 0x22, 0x08, 0x00, 0x62, 0x45, 0xBD, 0xD3, - 0xA5, 0xD0, 0xDA, 0x82, 0xD0, 0x80, 0xC9, 0x81, 0xF6, 0x0C, 0x0C, 0x00, 0x61, 0x40, 0x00, 0x36, - 0x33, 0x00, 0x62, 0x45, 0xA3, 0xD3, 0xA5, 0xD0, 0xFF, 0xFF, 0x90, 0x80, 0xFF, 0x26, 0x02, 0x00, - 0xDE, 0x82, 0x2A, 0x00, 0x0C, 0x63, 0x0A, 0xFC, 0x00, 0x64, 0x09, 0xFA, 0x0B, 0xFA, 0x01, 0x7E, - 0x0C, 0xFA, 0x26, 0x46, 0x08, 0x64, 0x3F, 0xFA, 0x07, 0xF2, 0x88, 0xF1, 0x40, 0x58, 0x07, 0xF8, - 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xDA, 0x60, 0x1E, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x21, 0x60, 0xE2, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x22, 0xB0, 0xFF, 0xFF, 0x03, 0x03, 0xD8, 0x60, - 0x9F, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0xD7, 0x01, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0xFF, 0xA4, 0xFF, 0xFF, 0x0C, 0x20, 0x0D, 0x00, 0xD8, 0x60, 0x9F, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x28, 0x46, 0x2A, 0x41, 0xFF, 0xB1, 0x60, 0xFE, 0x82, 0x64, 0xA1, 0xDA, 0xFF, 0xFF, 0x20, 0xFE, - 0x15, 0x00, 0x21, 0x60, 0xEE, 0x61, 0xA1, 0xDF, 0xD9, 0x81, 0xA1, 0xDF, 0xD9, 0x81, 0xA1, 0xDF, - 0x04, 0xA1, 0xA1, 0xDF, 0xD9, 0x81, 0xA1, 0xDF, 0xD9, 0x81, 0xA1, 0xDF, 0xD9, 0x81, 0xA1, 0xDF, - 0x2B, 0x46, 0x37, 0xF2, 0x7F, 0x60, 0xCF, 0x65, 0xA4, 0x84, 0xA2, 0xDA, 0x26, 0x46, 0x3F, 0xF2, - 0x00, 0xF4, 0x27, 0x40, 0x02, 0x3A, 0x40, 0x00, 0x60, 0x43, 0xF6, 0xA3, 0x00, 0x60, 0x1B, 0x61, - 0x00, 0x60, 0xDD, 0x65, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, - 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x2D, 0x03, 0x17, 0x03, 0xCF, 0x83, 0x61, 0x44, - 0x80, 0xA0, 0x28, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, - 0x81, 0xA1, 0x20, 0x03, 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, 0xDD, 0x81, 0xE4, 0x03, 0xF7, 0x01, - 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, 0xE4, 0x03, 0xF2, 0x01, 0x01, 0x60, 0xFF, 0x63, 0x46, 0x48, - 0x41, 0x4A, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, 0x64, 0x44, 0xDD, 0x81, 0xA1, 0xD0, - 0xDF, 0x83, 0xA3, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, 0x7F, 0xA1, 0xF7, 0x04, 0x00, 0xF4, - 0x03, 0x61, 0xF4, 0x01, 0x20, 0xFE, 0x3F, 0x00, 0x60, 0x43, 0xFC, 0xA3, 0x00, 0x60, 0x15, 0x61, - 0x00, 0x60, 0xDD, 0x65, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, - 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x2D, 0x03, 0x17, 0x03, 0xCF, 0x83, 0x61, 0x44, - 0x80, 0xA0, 0x28, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, - 0x81, 0xA1, 0x20, 0x03, 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, 0xDD, 0x81, 0xE4, 0x03, 0xF7, 0x01, - 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, 0xE4, 0x03, 0xF2, 0x01, 0x01, 0x60, 0xFF, 0x63, 0x46, 0x48, - 0x41, 0x4A, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, 0x64, 0x44, 0xDD, 0x81, 0xA1, 0xD0, - 0xDF, 0x83, 0xA3, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, 0x7F, 0xA1, 0xF7, 0x04, 0x00, 0xF4, - 0x03, 0x61, 0xF4, 0x01, 0x20, 0xFE, 0x00, 0xBB, 0x02, 0x60, 0x00, 0x61, 0x08, 0x24, 0xD7, 0x00, - 0x60, 0xFE, 0xA1, 0xD3, 0xFF, 0xFF, 0xFA, 0xA4, 0xFF, 0xFF, 0x01, 0x05, 0x50, 0x01, 0xDD, 0x81, - 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x3A, 0x4A, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, - 0x64, 0x40, 0x50, 0x3A, 0x44, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0xF2, 0x3A, - 0x3E, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, 0x20, 0x01, 0xDD, 0x81, - 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, 0x1A, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, - 0x64, 0x40, 0x00, 0x3A, 0x14, 0x01, 0x60, 0x5C, 0x00, 0x36, 0x30, 0x00, 0x00, 0x64, 0xD8, 0x60, - 0x58, 0x4E, 0xC4, 0x78, 0xFF, 0xFF, 0x21, 0x60, 0xF6, 0x62, 0xA2, 0xDB, 0x64, 0x40, 0x00, 0x36, - 0x2B, 0x00, 0xDD, 0x81, 0xA1, 0xD3, 0xDD, 0x81, 0xD8, 0x60, 0x58, 0x4E, 0xC4, 0x78, 0xFF, 0xFF, - 0x21, 0x60, 0xF8, 0x62, 0xA2, 0xDB, 0x64, 0x40, 0x00, 0x36, 0x24, 0x00, 0xDD, 0x81, 0xA1, 0xD3, - 0xDD, 0x81, 0xD8, 0x60, 0x58, 0x4E, 0xC4, 0x78, 0xFF, 0xFF, 0x21, 0x60, 0xFA, 0x62, 0xA2, 0xDB, - 0x64, 0x40, 0x00, 0x36, 0x1D, 0x00, 0xDD, 0x81, 0xA1, 0xD1, 0x21, 0x60, 0xFC, 0x62, 0xA2, 0xD9, - 0xDD, 0x81, 0xA1, 0xD1, 0x21, 0x60, 0xFD, 0x62, 0xA2, 0xD9, 0x19, 0x00, 0x20, 0xFE, 0x21, 0x60, - 0xF6, 0x62, 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x21, 0x60, 0xF8, 0x62, 0x00, 0x60, - 0x04, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x21, 0x60, 0xFA, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, - 0x20, 0xFE, 0x21, 0x60, 0xFC, 0x62, 0x00, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x00, 0x20, 0xFE, - 0x21, 0x60, 0xE2, 0x62, 0xA2, 0xD1, 0x21, 0x60, 0xF6, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0x84, - 0xFF, 0xFF, 0x10, 0x26, 0x09, 0x00, 0x04, 0x26, 0x09, 0x00, 0x20, 0x26, 0x09, 0x00, 0x02, 0x26, - 0x09, 0x00, 0xD7, 0x60, 0x07, 0x78, 0xFF, 0xFF, 0x10, 0x7C, 0x05, 0x00, 0x04, 0x7C, 0x03, 0x00, - 0x20, 0x7C, 0x01, 0x00, 0x02, 0x7C, 0x21, 0x60, 0xEE, 0x61, 0xA1, 0xD9, 0x21, 0x60, 0xE4, 0x61, - 0xA1, 0xD1, 0x21, 0x60, 0xF8, 0x61, 0xA1, 0xD3, 0x21, 0x60, 0xEE, 0x61, 0xA0, 0x84, 0xA1, 0xD1, - 0xFF, 0xFF, 0x10, 0x26, 0x07, 0x00, 0x04, 0x26, 0x07, 0x00, 0x01, 0x26, 0x0D, 0x00, 0xD7, 0x60, - 0x07, 0x78, 0xFF, 0xFF, 0x10, 0x7C, 0x09, 0x00, 0x64, 0x40, 0x10, 0x22, 0x03, 0x00, 0xD7, 0x60, - 0x07, 0x78, 0xFF, 0xFF, 0x04, 0x7C, 0x01, 0x00, 0x01, 0x7C, 0x21, 0x60, 0xF0, 0x61, 0xA1, 0xD9, - 0x21, 0x60, 0xE6, 0x61, 0xA1, 0xD1, 0x21, 0x60, 0xFA, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0xA0, 0x84, - 0x02, 0x26, 0x07, 0x00, 0x04, 0x26, 0x07, 0x00, 0x01, 0x26, 0x07, 0x00, 0xD7, 0x60, 0x07, 0x78, - 0xFF, 0xFF, 0x02, 0x7C, 0x03, 0x00, 0x04, 0x7C, 0x01, 0x00, 0x20, 0x7C, 0x21, 0x60, 0xF2, 0x61, - 0xA1, 0xD9, 0x21, 0x60, 0xFC, 0x61, 0xA1, 0xD1, 0x21, 0x60, 0xF4, 0x61, 0xA1, 0xD9, 0x21, 0x60, - 0xF2, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x21, 0x60, 0xF0, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, - 0xB0, 0x84, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x22, 0xBC, - 0xAB, 0x46, 0x36, 0xFA, 0xAB, 0x46, 0x21, 0x60, 0xEE, 0x61, 0xA1, 0xD3, 0x1F, 0x60, 0x92, 0x62, - 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x22, 0xBC, 0x88, 0xF1, 0x66, 0x41, 0x64, 0x46, - 0x36, 0xFA, 0xFF, 0xFF, 0x61, 0x46, 0x50, 0x00, 0x21, 0x60, 0xFE, 0x62, 0xA2, 0xDB, 0xE0, 0x84, - 0xE0, 0x84, 0x03, 0x02, 0x01, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x02, 0xA5, 0x64, 0x44, 0xD4, 0x9C, - 0x22, 0x60, 0x00, 0x62, 0xA2, 0xD9, 0x22, 0x60, 0x02, 0x62, 0xA2, 0xDF, 0xDD, 0x81, 0xA1, 0xD1, - 0x00, 0x65, 0x64, 0x40, 0x00, 0x3A, 0x01, 0x65, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, - 0x50, 0x3A, 0x01, 0x65, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0xF2, 0x3A, 0x01, 0x65, - 0xDD, 0x81, 0xA1, 0xD1, 0x65, 0x40, 0x00, 0x3A, 0x18, 0x00, 0x00, 0x60, 0x00, 0x65, 0x64, 0x40, - 0x00, 0x36, 0x01, 0x65, 0x64, 0x40, 0x01, 0x36, 0x02, 0x65, 0x64, 0x40, 0x02, 0x36, 0x04, 0x65, - 0x64, 0x40, 0x04, 0x36, 0x10, 0x65, 0x64, 0x40, 0x05, 0x36, 0x20, 0x65, 0x65, 0x5C, 0x22, 0x60, - 0x02, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xB0, 0x84, 0xA2, 0xDB, 0x21, 0x60, 0xFE, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0xFF, 0xA4, 0xA2, 0xDB, 0xCA, 0x02, 0x22, 0x60, 0x02, 0x62, 0xA2, 0xD3, 0x22, 0x60, - 0x00, 0x62, 0xA2, 0xD1, 0x2E, 0x58, 0xFF, 0xFF, 0xAB, 0x46, 0x82, 0xF0, 0xC0, 0x67, 0xB4, 0x84, - 0xAB, 0x46, 0x0B, 0xFA, 0x1F, 0x60, 0xA0, 0x64, 0xA0, 0xD1, 0x22, 0x60, 0xD4, 0x7C, 0x04, 0x1B, - 0xFF, 0x60, 0xFF, 0x63, 0xA4, 0xDD, 0x29, 0x00, 0x23, 0x60, 0x3C, 0x63, 0xA4, 0xDD, 0xDB, 0x83, - 0x60, 0xFE, 0x00, 0x64, 0xBD, 0xDB, 0x60, 0x64, 0xBD, 0xDB, 0x1D, 0x64, 0xBD, 0xDB, 0xC3, 0xF3, - 0xBD, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x01, 0x60, 0x78, 0x64, 0x06, 0x61, 0x58, 0xD1, 0xFF, 0xFF, - 0x60, 0xFE, 0xBD, 0xD9, 0x20, 0xFE, 0xCD, 0x81, 0x61, 0x40, 0x08, 0x28, 0xF7, 0x01, 0xB7, 0xF1, - 0xFF, 0xFF, 0x64, 0x47, 0x60, 0xFE, 0xBD, 0xD9, 0xBD, 0xDB, 0x20, 0xFE, 0x1F, 0x60, 0x9C, 0x64, - 0xA0, 0xD1, 0x60, 0xFE, 0xBD, 0xD9, 0xFF, 0xFF, 0x20, 0xFE, 0x22, 0x60, 0xD2, 0x64, 0x40, 0x48, - 0x18, 0x61, 0x26, 0x46, 0x00, 0xF4, 0xFF, 0x60, 0xF2, 0x64, 0xE1, 0x60, 0x58, 0x4D, 0xE5, 0x78, - 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xFC, 0x2B, 0x46, 0x56, 0xF1, 0x16, 0x60, 0xAC, 0x61, 0x1B, 0xF8, - 0xA1, 0xD1, 0x10, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x06, 0xF2, 0x0C, 0x03, 0x10, 0xBC, 0x06, 0xFA, - 0x87, 0xF3, 0x00, 0x60, 0xE2, 0x62, 0xA2, 0xD3, 0x60, 0x45, 0xD4, 0x80, 0xDC, 0x84, 0x07, 0x07, - 0xA2, 0xDB, 0x05, 0x00, 0x10, 0xB5, 0xFF, 0xFF, 0x02, 0x03, 0xD4, 0x84, 0x06, 0xFA, 0x07, 0xF2, - 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, 0x12, 0x03, 0x26, 0x46, - 0x88, 0xF3, 0x07, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x4C, 0x00, 0x26, 0x46, 0x88, 0xF3, 0x07, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, - 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x00, 0x66, 0x46, 0x46, 0x1A, 0x00, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, 0x02, 0x64, 0x3F, 0xFA, - 0x88, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x09, 0x64, 0x09, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, - 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x2B, 0x43, 0x14, 0x60, 0xD0, 0x62, - 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, - 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x14, 0x60, - 0xD0, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0xAB, 0x46, - 0x06, 0xF2, 0xFF, 0xFF, 0x02, 0xBC, 0x06, 0xFA, 0xAB, 0x46, 0xAB, 0x46, 0x0F, 0x60, 0xFF, 0x64, - 0x02, 0xF0, 0x72, 0xF1, 0xA0, 0x84, 0xD0, 0x80, 0x02, 0xFA, 0xAB, 0x46, 0x01, 0x06, 0x72, 0xFB, - 0x27, 0x41, 0x01, 0xB1, 0xFF, 0xFF, 0x08, 0x03, 0x2B, 0x46, 0x0B, 0x58, 0x01, 0x65, 0xE2, 0x60, - 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x0A, 0x00, 0x2B, 0x46, 0x0B, 0x58, 0x16, 0x60, 0xA2, 0x64, - 0x40, 0x59, 0x02, 0x65, 0xE2, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x00, 0x64, 0x09, 0xFA, 0x0B, 0xFA, 0x01, 0x7E, - 0x0C, 0xFA, 0x0A, 0x64, 0x0A, 0xFA, 0x26, 0x46, 0x08, 0x64, 0x3F, 0xFA, 0x07, 0xF2, 0x88, 0xF1, - 0x40, 0x58, 0x07, 0xF8, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xFF, 0x60, 0xFD, 0x65, - 0x38, 0x46, 0x06, 0xF2, 0xFF, 0xFF, 0xA4, 0x83, 0x06, 0xFC, 0x02, 0xB0, 0x26, 0x46, 0x1C, 0x03, - 0x38, 0x43, 0x87, 0xF1, 0x14, 0x60, 0xCE, 0x61, 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, - 0x05, 0x05, 0xA1, 0xD3, 0x4A, 0xD9, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x02, 0x60, 0x00, 0x61, - 0x2C, 0xF2, 0xA1, 0xDB, 0x2D, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x2E, 0xF2, 0x59, 0xDB, 0x03, 0x65, - 0xE2, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x07, 0xF2, 0x88, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, - 0x40, 0x47, 0x07, 0xF2, 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, - 0x1B, 0x02, 0x27, 0x43, 0x14, 0x60, 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, - 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, - 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x14, 0x60, 0xD0, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, - 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0x0C, 0x00, 0x27, 0x44, 0x40, 0x58, 0x03, 0x65, 0xE2, 0x60, - 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x27, 0x43, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, - 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x88, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, - 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, - 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF2, 0x88, 0xF1, - 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x40, 0x47, 0x07, 0xF2, - 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, 0x02, 0x02, 0x2F, 0x58, - 0xFF, 0xFF, 0x27, 0x46, 0x06, 0xF0, 0xFF, 0x60, 0xED, 0x64, 0xA0, 0x84, 0x06, 0xFA, 0x27, 0x43, - 0x87, 0xF1, 0x14, 0x60, 0xCE, 0x61, 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, 0x05, 0x05, - 0xA1, 0xD3, 0x4A, 0xD9, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x07, 0x58, 0x03, 0x65, 0xE2, 0x60, - 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x27, 0x43, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, - 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, - 0x67, 0xF3, 0x32, 0xFA, 0x68, 0xF3, 0x33, 0xFA, 0x69, 0xF3, 0x34, 0xFA, 0xAC, 0xF1, 0x19, 0xF8, - 0x1C, 0xF2, 0x13, 0xFA, 0x02, 0x63, 0x3F, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0x02, 0x60, 0x00, 0x61, - 0x2C, 0xF2, 0xA1, 0xDB, 0x2D, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x2E, 0xF2, 0x59, 0xDB, 0x06, 0x63, - 0x07, 0xF2, 0x88, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x0D, 0x02, 0x43, 0x59, 0x02, 0x65, - 0xE2, 0x60, 0x58, 0x4E, 0x5B, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xC0, 0x64, 0x2A, 0xFA, 0x00, 0xF4, - 0x06, 0x64, 0x09, 0xFA, 0x15, 0x00, 0x07, 0xF2, 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, - 0x02, 0xB0, 0xFF, 0xFF, 0x1E, 0x02, 0x07, 0x63, 0x43, 0x59, 0x01, 0x65, 0xE2, 0x60, 0x58, 0x4E, - 0x5B, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xA0, 0x64, 0x2A, 0xFA, 0x00, 0xF4, 0x07, 0x64, 0x09, 0xFA, - 0x26, 0x46, 0x88, 0xF3, 0x07, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, - 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xFE, 0x62, 0xDB, 0x60, 0xB0, 0x64, 0xA2, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x60, 0x03, 0x64, 0xA2, 0xDB, 0xDB, 0x60, - 0x4D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xE8, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x5A, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x72, 0xF3, - 0x88, 0xF5, 0xDC, 0x81, 0x66, 0x43, 0x02, 0xA3, 0x63, 0x46, 0xCD, 0x81, 0x06, 0xF2, 0xED, 0x03, - 0x60, 0x40, 0x08, 0x2A, 0xF7, 0x01, 0x0C, 0xAC, 0x06, 0xFA, 0x46, 0x49, 0x00, 0x60, 0x02, 0x61, - 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0xE0, 0x03, 0x25, 0x60, 0x2C, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x03, 0x1B, 0x00, 0x60, 0xA0, 0x64, 0x02, 0x00, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, - 0xAB, 0xFC, 0x66, 0x45, 0x29, 0x44, 0x07, 0xFA, 0x29, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF2, - 0x65, 0x46, 0x2C, 0xFA, 0x2D, 0xF8, 0xAE, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0x32, 0xFA, 0xCC, 0xF3, - 0x30, 0xFA, 0x33, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, 0x34, 0xFA, 0xAC, 0xF1, 0x19, 0xF8, 0x18, 0x67, - 0x0E, 0xFA, 0x66, 0x45, 0x63, 0x46, 0x0E, 0xF2, 0x65, 0x46, 0x00, 0x7E, 0x13, 0xFA, 0x02, 0x63, - 0x3F, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0x66, 0x41, 0x00, 0xF4, 0x25, 0x60, 0x28, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x09, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x9A, 0x64, 0xA2, 0xDB, 0x61, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0x9E, 0x01, 0x92, 0x01, - 0x0F, 0x60, 0xE8, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF0, - 0xFF, 0xFF, 0x64, 0x43, 0x14, 0x60, 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, - 0xA1, 0xD1, 0x04, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0x09, 0x00, 0xA1, 0xDD, 0x14, 0x60, - 0xD0, 0x62, 0xD9, 0x84, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA2, 0xDB, 0x66, 0x45, - 0x63, 0x46, 0x06, 0xF2, 0xFF, 0x60, 0x01, 0x7C, 0xA0, 0x9C, 0x06, 0xF8, 0x65, 0x46, 0x71, 0xF3, - 0x60, 0x40, 0x10, 0x2A, 0x03, 0x00, 0xCC, 0x84, 0x80, 0x2B, 0x71, 0xFB, 0x0F, 0x60, 0xE8, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xDC, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xDE, 0x62, 0x00, 0x60, 0x02, 0x64, - 0xA2, 0xDB, 0xDB, 0x60, 0xF7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x71, 0xF3, - 0x72, 0xF3, 0x00, 0xA8, 0x60, 0x88, 0x50, 0x03, 0xE0, 0x83, 0x6C, 0x03, 0xCB, 0x83, 0x88, 0xF3, - 0x73, 0xF1, 0x02, 0xA4, 0x40, 0x47, 0x64, 0x45, 0x27, 0x46, 0x72, 0xF4, 0x12, 0xF2, 0x40, 0x18, - 0xD4, 0x80, 0x02, 0x64, 0x3D, 0x07, 0x23, 0xFA, 0x2A, 0xF2, 0x0E, 0xF2, 0x0C, 0xB0, 0x02, 0xF0, - 0x0D, 0x02, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xE6, 0x01, 0x60, 0x40, 0xF0, 0x37, - 0x08, 0x00, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x90, 0xF3, 0x02, 0x02, 0xDC, 0x84, - 0x90, 0xFB, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xAC, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA3, 0xFF, 0xCE, 0xFE, 0x98, 0xF1, 0x1E, 0x60, - 0xEC, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xBC, 0x01, - 0x27, 0x44, 0x02, 0xA4, 0x40, 0x47, 0xB8, 0x1F, 0x28, 0x43, 0xCB, 0x83, 0x88, 0xF3, 0x1A, 0x0E, - 0x02, 0xA4, 0x40, 0x4C, 0x43, 0x48, 0x2C, 0x46, 0x1E, 0xF2, 0x73, 0xF1, 0xAC, 0x86, 0x12, 0xF2, - 0x0C, 0x03, 0xD0, 0x80, 0xFF, 0xFF, 0x09, 0x07, 0x1B, 0x60, 0xDA, 0x64, 0x40, 0x4B, 0xF0, 0x60, - 0x58, 0x4D, 0x75, 0x78, 0xFF, 0xFF, 0x2C, 0x46, 0x9E, 0xFC, 0x2C, 0x44, 0x02, 0xA4, 0x28, 0x43, - 0x40, 0x4C, 0xE8, 0x1F, 0x7D, 0x01, 0x01, 0x63, 0x66, 0xF3, 0xAC, 0xF3, 0x00, 0xBD, 0xAC, 0x81, - 0x06, 0x03, 0x05, 0x03, 0xB5, 0x60, 0x58, 0x4D, 0xC1, 0x78, 0xFF, 0xFF, 0x60, 0x43, 0x5B, 0xFD, - 0x3E, 0x63, 0x16, 0x60, 0x60, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, 0x71, 0xFB, 0x72, 0xFB, - 0x16, 0x60, 0xA8, 0x65, 0x00, 0x64, 0xA5, 0xDB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x1B, 0x60, - 0x9A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x02, 0xC7, 0x60, 0x2E, 0x78, - 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x45, 0x64, 0x46, 0x1B, 0xF2, 0x65, 0x46, 0x64, 0x45, 0x5B, 0xF1, - 0xE0, 0x84, 0x73, 0xF1, 0xC0, 0x84, 0xC0, 0x84, 0x12, 0xFA, 0x2C, 0xF2, 0x71, 0xF3, 0x60, 0x40, - 0x01, 0x2A, 0x36, 0x00, 0x00, 0xA8, 0x1F, 0x60, 0x8E, 0x62, 0xA2, 0xD3, 0x37, 0x03, 0x00, 0xA8, - 0xFF, 0xFF, 0x34, 0x03, 0xDE, 0x60, 0x58, 0x4D, 0x6B, 0x78, 0xFF, 0xFF, 0x25, 0x46, 0x09, 0x60, - 0x08, 0x61, 0xA2, 0xFF, 0x0E, 0xF2, 0x02, 0xF0, 0x60, 0x40, 0xF0, 0x37, 0x0D, 0x00, 0x92, 0xF3, - 0x90, 0xF3, 0xDC, 0x83, 0xD1, 0x80, 0x92, 0xFD, 0x0C, 0x03, 0x8C, 0xF3, 0xCC, 0x83, 0xD8, 0xA0, - 0x90, 0xFD, 0x07, 0x04, 0xD4, 0xFE, 0x05, 0x00, 0xD1, 0x80, 0x93, 0xF3, 0x02, 0x03, 0xDC, 0x84, - 0x93, 0xFB, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x94, 0x64, 0xA2, 0xDB, 0x25, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA3, 0xFF, 0xDC, 0x60, 0x87, 0x78, 0xFF, 0xFF, - 0x66, 0x41, 0x65, 0x46, 0x06, 0xF2, 0x61, 0x46, 0x60, 0x40, 0x10, 0x2A, 0x4C, 0x00, 0x80, 0x67, - 0xB4, 0x81, 0x1B, 0x60, 0xDA, 0x62, 0x61, 0x44, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xDE, 0x60, 0x58, 0x4D, 0x6B, 0x78, 0xFF, 0xFF, 0x25, 0x46, - 0x2A, 0xF2, 0x09, 0x60, 0x08, 0x61, 0x0C, 0xB0, 0xA2, 0xFF, 0x17, 0x03, 0x0E, 0xF2, 0x02, 0xF0, - 0x60, 0x40, 0xF0, 0x37, 0x0D, 0x00, 0x90, 0xF3, 0x92, 0xF3, 0xCC, 0x83, 0xD1, 0x80, 0x90, 0xFD, - 0x0C, 0x03, 0x8C, 0xF3, 0xDC, 0x83, 0xD8, 0xA0, 0x92, 0xFD, 0x07, 0x04, 0xD4, 0xFE, 0x05, 0x00, - 0xD1, 0x80, 0x93, 0xF3, 0x02, 0x03, 0xDC, 0x84, 0x93, 0xFB, 0x07, 0xF0, 0x0A, 0xF2, 0xA3, 0xFF, - 0x64, 0x45, 0x30, 0x1B, 0x66, 0x41, 0x65, 0x46, 0x02, 0xF0, 0x61, 0x46, 0x0F, 0x60, 0xFF, 0x61, - 0xA1, 0x84, 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, - 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x16, 0x60, 0x62, 0x65, 0x46, 0xD1, 0x61, 0x44, - 0xB0, 0x84, 0xA2, 0xDB, 0x17, 0x00, 0x1B, 0x60, 0x8E, 0x61, 0x2A, 0xF2, 0x3E, 0xF2, 0x0C, 0xB0, - 0x01, 0xB0, 0x05, 0x03, 0x1B, 0x60, 0xA0, 0x61, 0x02, 0x02, 0x1B, 0x60, 0x88, 0x61, 0x1B, 0x60, - 0xDA, 0x62, 0x61, 0x44, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC1, 0xFE, 0xDC, 0x60, 0x87, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x2B, 0xF2, 0x2A, 0xF2, - 0x60, 0x41, 0x44, 0x49, 0x60, 0x45, 0xA4, 0x3A, 0x0D, 0x00, 0x61, 0x40, 0xC0, 0x3B, 0x7B, 0x00, - 0xA9, 0x46, 0x06, 0xF2, 0xA9, 0x46, 0x60, 0x40, 0x20, 0x26, 0x75, 0x00, 0x20, 0xBC, 0xA9, 0x46, - 0x06, 0xFA, 0xA9, 0x46, 0xA9, 0x46, 0x06, 0xF0, 0xA9, 0x46, 0x65, 0x40, 0x10, 0x2B, 0x6E, 0x00, - 0x64, 0x40, 0x10, 0x2A, 0x36, 0x00, 0x65, 0x40, 0xA4, 0x3A, 0x65, 0x00, 0x29, 0x45, 0x65, 0x46, - 0x72, 0xF2, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x04, 0x02, 0x78, 0x00, 0xDE, 0x60, 0x51, 0x78, - 0xFF, 0xFF, 0x09, 0xF2, 0x2A, 0xF0, 0x00, 0xA8, 0x20, 0x67, 0x02, 0x03, 0xB0, 0x84, 0x2A, 0xFA, - 0x0E, 0xF2, 0x02, 0xF0, 0x60, 0x40, 0xF0, 0x37, 0x08, 0x00, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, - 0xA2, 0xFF, 0x90, 0xF3, 0x02, 0x02, 0xDC, 0x84, 0x90, 0xFB, 0x3E, 0xF2, 0xA3, 0xFF, 0x01, 0xB0, - 0x1B, 0x60, 0xA0, 0x61, 0x02, 0x02, 0x1B, 0x60, 0x8E, 0x61, 0x1B, 0x60, 0xDA, 0x62, 0x61, 0x44, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x17, 0x00, 0x10, 0x64, 0xB0, 0x84, 0xDF, 0x65, 0xA4, 0x9E, 0xA9, 0x46, 0x06, 0xFA, 0xA9, 0x46, - 0xA2, 0xFF, 0x16, 0x60, 0xA8, 0x62, 0x04, 0x64, 0xA2, 0xDB, 0x29, 0x44, 0x5A, 0xDB, 0x71, 0xF3, - 0xC1, 0xFE, 0xD4, 0xFE, 0x87, 0xF1, 0xA3, 0xFF, 0xD0, 0x80, 0xDC, 0x84, 0x01, 0x07, 0x71, 0xFB, - 0xA9, 0x46, 0x72, 0xF2, 0xA9, 0x46, 0x65, 0x18, 0xA9, 0x46, 0x02, 0xF0, 0xA9, 0x46, 0x0F, 0x60, - 0xFF, 0x61, 0xA1, 0x84, 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, - 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x16, 0x60, 0x62, 0x65, 0x46, 0xD1, - 0xFF, 0xFF, 0xB1, 0x84, 0xA2, 0xDB, 0xDE, 0x60, 0x68, 0x78, 0xFF, 0xFF, 0x64, 0x40, 0x10, 0x2A, - 0xFA, 0x01, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, 0xA9, 0x46, 0x06, 0xFA, 0xA9, 0x46, 0x65, 0x41, - 0x71, 0xF3, 0x29, 0x45, 0xCC, 0x84, 0x80, 0x2B, 0x71, 0xFB, 0x65, 0x46, 0x72, 0xF2, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x37, 0x02, 0x61, 0x40, 0xA4, 0x3A, 0xE5, 0x01, 0x00, 0x60, 0x3A, 0x61, - 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0x81, 0x03, 0x02, 0x60, 0x48, 0x64, 0x2A, 0xFA, - 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x67, 0xF1, 0x32, 0xF8, - 0x68, 0xF1, 0x33, 0xF8, 0x69, 0xF1, 0x34, 0xF8, 0xA9, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF0, - 0xA9, 0x46, 0x2C, 0xFA, 0x2D, 0xF8, 0xAE, 0xF8, 0xAC, 0xF1, 0x19, 0xF8, 0xFF, 0x67, 0x0E, 0xFA, - 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x29, 0x44, 0x07, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, - 0x8E, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x37, 0x00, 0x80, 0x67, 0xB4, 0x83, 0x2A, 0xF2, 0x09, 0x60, 0x08, 0x65, 0x0C, 0xB0, - 0x09, 0xF0, 0x0D, 0x02, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x9D, 0x18, 0x64, 0x46, 0x3E, 0xF2, - 0xA2, 0xFF, 0x01, 0xB0, 0x1B, 0x60, 0xA0, 0x61, 0x02, 0x02, 0x1B, 0x60, 0x88, 0x61, 0x02, 0xF2, - 0x0E, 0xF0, 0xD4, 0x80, 0x09, 0xF4, 0x06, 0x02, 0x90, 0xF3, 0x64, 0x40, 0xF0, 0x37, 0x02, 0x00, - 0xDC, 0x84, 0x90, 0xFB, 0x66, 0x44, 0x00, 0xA8, 0xFF, 0xFF, 0xF1, 0x02, 0x1B, 0x60, 0xDA, 0x62, - 0x61, 0x44, 0xA2, 0xDB, 0x5A, 0xDD, 0x08, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0xA3, 0xFF, 0xA9, 0x46, 0x02, 0xF0, 0xA9, 0x46, 0x0F, 0x60, 0xFF, 0x61, 0xA1, 0x84, 0x60, 0x41, - 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, - 0xE1, 0x81, 0xFD, 0x02, 0x16, 0x60, 0x62, 0x65, 0x46, 0xD3, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDB, - 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x46, 0x45, 0x3F, 0xF2, 0x05, 0x48, 0x00, 0xA8, 0x60, 0x41, - 0x66, 0x44, 0x0B, 0x03, 0x0E, 0xA1, 0x00, 0xF2, 0x42, 0xFE, 0xAC, 0x86, 0x01, 0xF2, 0x1F, 0x03, - 0x7F, 0xB5, 0xD5, 0x81, 0x66, 0x44, 0xF7, 0x07, 0x25, 0x46, 0x05, 0xF0, 0x06, 0xFA, 0x05, 0xFA, - 0xD0, 0x80, 0x64, 0x43, 0x13, 0x03, 0x60, 0x46, 0x01, 0xF0, 0x80, 0x67, 0xB0, 0x84, 0x01, 0xFA, - 0x00, 0xF0, 0x00, 0x64, 0x00, 0xFA, 0x44, 0x45, 0xA2, 0xFF, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, - 0xFF, 0xFF, 0xA3, 0xFF, 0x08, 0x45, 0x25, 0x46, 0x01, 0x64, 0x02, 0xFA, 0x02, 0xFE, 0x2D, 0x58, - 0xFF, 0xFF, 0x23, 0xF2, 0x07, 0xF0, 0x10, 0xB0, 0x10, 0xAC, 0x3B, 0x03, 0x23, 0xFA, 0x80, 0x67, - 0xB0, 0x81, 0x1B, 0x60, 0xDA, 0x62, 0x61, 0x44, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x04, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x46, 0x45, 0x64, 0x46, 0x02, 0xF0, 0x0F, 0x60, 0xFF, 0x61, - 0xA1, 0x84, 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, - 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x16, 0x60, 0x62, 0x65, 0x46, 0xD1, 0xFF, 0xFF, - 0xB1, 0x84, 0xA2, 0xDB, 0x9B, 0xF2, 0x25, 0x46, 0xE1, 0x81, 0x5B, 0xF1, 0x73, 0xF1, 0xC1, 0x81, - 0xC1, 0x81, 0x92, 0xFA, 0xA2, 0xFF, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x61, 0xD1, 0x80, 0x0E, 0xF2, - 0x05, 0x02, 0x90, 0xF3, 0x20, 0xB0, 0xCC, 0x84, 0x01, 0x02, 0x90, 0xFB, 0xA3, 0xFF, 0x48, 0xFE, - 0x07, 0x00, 0x0E, 0xF2, 0x08, 0xFE, 0xF0, 0x7F, 0x60, 0x40, 0x20, 0x2A, 0x00, 0x7F, 0x0E, 0xFA, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0xA0, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x57, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x80, 0x64, 0x2A, 0xFA, 0xAC, 0xF1, 0x19, 0xF8, - 0x00, 0x64, 0x3E, 0xFA, 0x00, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0x88, 0xF1, 0x07, 0xF8, 0x67, 0x44, - 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0x0F, 0x60, 0xF6, 0x62, 0xE1, 0x60, 0x9E, 0x64, 0xA2, 0xDB, - 0x10, 0x60, 0x02, 0x62, 0xE0, 0x60, 0x0D, 0x64, 0xA2, 0xDB, 0x16, 0x60, 0xB2, 0x63, 0x65, 0x44, - 0xBD, 0xDB, 0x10, 0x60, 0x04, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, - 0xE6, 0x60, 0x5A, 0x78, 0xFF, 0xFF, 0xE6, 0x60, 0x58, 0x4D, 0x66, 0x78, 0xFF, 0xFF, 0x57, 0xF5, - 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x67, 0xF1, 0x32, 0xF8, - 0x68, 0xF1, 0x33, 0xF8, 0x69, 0xF1, 0x34, 0xF8, 0x1F, 0x60, 0x92, 0x62, 0xA2, 0xD1, 0x01, 0x64, - 0x64, 0x40, 0xFE, 0x26, 0x10, 0xBC, 0x32, 0x40, 0x10, 0x26, 0x10, 0xBC, 0x23, 0x60, 0x4C, 0x62, - 0xA2, 0xDB, 0x1F, 0x60, 0x90, 0x62, 0xA2, 0xD1, 0x1F, 0x60, 0x1E, 0x64, 0x02, 0x18, 0x1F, 0x60, - 0x40, 0x64, 0x22, 0x60, 0xA2, 0x62, 0xA2, 0xDB, 0x22, 0x60, 0xBE, 0x62, 0xA2, 0xDB, 0x21, 0x60, - 0xC6, 0x61, 0x20, 0x60, 0x32, 0x62, 0xA2, 0xD3, 0x22, 0x60, 0x82, 0x65, 0xFE, 0xA4, 0xE0, 0x84, - 0x02, 0x05, 0x67, 0x44, 0x99, 0x00, 0xE0, 0x84, 0xC4, 0x85, 0x21, 0x60, 0xEC, 0x62, 0xA2, 0xD3, - 0xA5, 0xD1, 0xDA, 0x85, 0x21, 0x60, 0xE4, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0xA5, 0xD1, 0x21, 0x60, - 0xE2, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0x21, 0x60, 0xC0, 0x61, 0xDD, 0x60, 0x06, 0x64, 0xA1, 0xDB, - 0x06, 0xA1, 0x21, 0x60, 0xEA, 0x62, 0xA2, 0xD3, 0x21, 0x60, 0xE2, 0x62, 0x60, 0x40, 0xFD, 0xA0, - 0xA2, 0xD3, 0x74, 0x03, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, - 0xF2, 0x63, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, 0xF2, 0x63, 0x09, 0x00, 0x10, 0x2A, - 0x03, 0x00, 0x04, 0x60, 0xF2, 0x63, 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xF2, 0x63, - 0x59, 0xD9, 0x59, 0xDD, 0x21, 0x60, 0xEA, 0x62, 0xA2, 0xD3, 0x21, 0x60, 0xE4, 0x62, 0xFE, 0xA0, - 0xA2, 0xD3, 0x54, 0x03, 0x00, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x61, 0x45, 0x60, 0x40, 0x01, 0x2A, - 0x04, 0x00, 0x00, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x02, 0x2A, 0x04, 0x00, - 0x01, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x04, 0x2A, 0x04, 0x00, 0x02, 0x60, - 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x10, 0x2A, 0x04, 0x00, 0x04, 0x60, 0xF2, 0x63, - 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xF2, 0x63, 0x59, 0xD9, - 0x59, 0xDD, 0xD5, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xA5, 0xDD, 0x21, 0x60, 0xEA, 0x62, 0xA2, 0xD3, - 0x21, 0x60, 0xE6, 0x62, 0xFF, 0xA0, 0xA2, 0xD3, 0x21, 0x03, 0x00, 0x60, 0x00, 0x63, 0x59, 0xDD, - 0x61, 0x45, 0x60, 0x40, 0x01, 0x2A, 0x04, 0x00, 0x00, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, - 0x60, 0x40, 0x02, 0x2A, 0x04, 0x00, 0x01, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, - 0x04, 0x2A, 0x04, 0x00, 0x02, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0xD5, 0x83, 0xEB, 0x83, - 0xEB, 0x83, 0xA5, 0xDD, 0x21, 0x60, 0xE8, 0x62, 0xA2, 0xD1, 0x59, 0xD9, 0x21, 0x60, 0xC0, 0x65, - 0xD5, 0x84, 0xDD, 0x7F, 0xA5, 0xDB, 0x65, 0x44, 0x22, 0x60, 0xAC, 0x62, 0xA2, 0xDB, 0x22, 0x60, - 0xC8, 0x62, 0xA2, 0xDB, 0x57, 0xF5, 0xCB, 0xF3, 0xCC, 0xF1, 0x00, 0x63, 0xC0, 0x87, 0xCD, 0xF1, - 0x5A, 0xFD, 0xC0, 0x85, 0x65, 0x47, 0xC4, 0x84, 0x07, 0xB5, 0x1C, 0x60, 0x10, 0x62, 0x16, 0x60, - 0xAE, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xD0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xD2, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0xE0, 0x60, - 0x17, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xD0, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x57, 0xF5, 0x00, 0x64, 0x95, 0xFB, 0x96, 0xFB, 0x97, 0xFB, - 0x75, 0xFB, 0x66, 0xF3, 0x00, 0x75, 0x00, 0x72, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0xC7, 0xF3, - 0xED, 0xE2, 0xCC, 0x84, 0x5A, 0xFB, 0x0F, 0x60, 0xD2, 0x62, 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, - 0xE0, 0x60, 0x36, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x65, 0xF1, 0x23, 0x60, 0x02, 0x62, 0xA2, 0xD9, 0x22, 0x60, 0xAA, 0x65, - 0xE2, 0x60, 0x58, 0x4D, 0x2F, 0x78, 0xFF, 0xFF, 0xE1, 0x60, 0x58, 0x4D, 0xA8, 0x78, 0xFF, 0xFF, - 0xE2, 0x60, 0x58, 0x4D, 0x49, 0x78, 0xFF, 0xFF, 0x57, 0xF5, 0x00, 0xF4, 0x66, 0xF1, 0x06, 0xF8, - 0x23, 0x60, 0x4C, 0x62, 0xA2, 0xD3, 0x07, 0xFA, 0x22, 0x60, 0xA2, 0x64, 0x40, 0x48, 0x10, 0x61, - 0x00, 0x60, 0x00, 0x64, 0xE1, 0x60, 0x58, 0x4D, 0xE5, 0x78, 0xFF, 0xFF, 0x57, 0xF5, 0x3F, 0xFC, - 0x5A, 0xF3, 0xC7, 0xF1, 0xAC, 0x83, 0x01, 0x64, 0x02, 0x02, 0x6C, 0xFB, 0x64, 0x43, 0x1B, 0x60, - 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x04, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xCF, 0x83, 0x73, 0xF3, 0x5A, 0xFD, 0xDC, 0x84, 0x73, 0xFB, - 0x5C, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0x5C, 0xFB, 0x03, 0x03, 0xE1, 0x60, 0x0A, 0x78, 0xFF, 0xFF, - 0x0A, 0x64, 0x5C, 0xFB, 0xA2, 0x4C, 0x20, 0x27, 0xF8, 0x01, 0x46, 0x60, 0x50, 0x65, 0x72, 0x44, - 0xD4, 0x80, 0xFF, 0xFF, 0xF2, 0x04, 0x5D, 0xFB, 0x40, 0x48, 0x95, 0xF3, 0x5E, 0xFB, 0x40, 0x4A, - 0x96, 0xF3, 0x97, 0xF3, 0x40, 0x4C, 0x60, 0x41, 0x66, 0xF1, 0x40, 0x63, 0xAD, 0x80, 0xF0, 0xA3, - 0x09, 0x02, 0x3C, 0x03, 0x2C, 0x41, 0x2A, 0x44, 0x40, 0x4C, 0x28, 0x44, 0x40, 0x4A, 0x00, 0x64, - 0x40, 0x48, 0xF4, 0x01, 0xD1, 0x80, 0x01, 0x02, 0x31, 0x04, 0x10, 0xA3, 0x80, 0x60, 0x00, 0x65, - 0xA5, 0x80, 0xCF, 0x83, 0x08, 0x02, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, 0x70, 0x8A, 0x2C, 0x44, - 0x70, 0x8C, 0xF1, 0x81, 0xF5, 0x01, 0xE7, 0xA3, 0x64, 0x44, 0x00, 0xA0, 0x00, 0x62, 0x02, 0x02, - 0x00, 0x61, 0x1C, 0x00, 0xE0, 0x84, 0xDE, 0x82, 0xFD, 0x04, 0x42, 0xFE, 0xF8, 0x84, 0x62, 0x45, - 0xC7, 0x83, 0x60, 0x45, 0x02, 0xFE, 0xD5, 0x84, 0x02, 0x05, 0x01, 0x05, 0x61, 0x44, 0xCF, 0x83, - 0x60, 0x41, 0x08, 0x03, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, 0x70, 0x8A, 0x2C, 0x44, 0x70, 0x8C, - 0xF1, 0x81, 0xF1, 0x01, 0xCE, 0x82, 0xE9, 0x81, 0xFD, 0x02, 0xF1, 0x81, 0x61, 0x44, 0x00, 0xA8, - 0xFF, 0xFF, 0x30, 0x03, 0x73, 0x40, 0x5D, 0xF3, 0xFF, 0xFF, 0x60, 0x47, 0xE8, 0x84, 0xE8, 0x84, - 0x5E, 0xF3, 0x3F, 0xB5, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xB4, 0x84, 0x61, 0x45, 0xD4, 0x84, 0xC0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, - 0x64, 0x44, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x85, 0x61, 0x44, 0xD4, 0x80, - 0xFF, 0xFF, 0x10, 0x03, 0x60, 0x53, 0xD4, 0x84, 0xFF, 0xFF, 0x75, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, - 0x01, 0xB4, 0x75, 0xFB, 0x1F, 0x60, 0x14, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, - 0x08, 0x28, 0xA2, 0xDB, 0xE6, 0x60, 0xA3, 0x78, 0xFF, 0xFF, 0xC1, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x04, 0x64, 0x03, 0xFA, 0x00, 0xF4, 0x09, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x3A, 0x1C, 0x00, - 0x60, 0x43, 0x00, 0x36, 0x1C, 0x00, 0xE0, 0xA0, 0xDA, 0x85, 0x16, 0x07, 0x1F, 0x60, 0x1E, 0x61, - 0xA1, 0xD1, 0xFF, 0xFF, 0xD3, 0x80, 0xCB, 0x83, 0x0F, 0x02, 0x07, 0x0E, 0x59, 0xD3, 0xA5, 0xD0, - 0xDA, 0x85, 0xD0, 0x80, 0xFF, 0xFF, 0x08, 0x02, 0xF9, 0x1F, 0x13, 0x1E, 0xA5, 0xD0, 0x59, 0xD3, - 0xFF, 0xFF, 0x90, 0x80, 0xFF, 0x22, 0x0D, 0x00, 0xE1, 0x60, 0x9C, 0x78, 0xFF, 0xFF, 0x1F, 0x60, - 0x90, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x1F, 0x60, 0x40, 0x64, - 0x02, 0x00, 0x1F, 0x60, 0x1E, 0x64, 0x22, 0x60, 0xBE, 0x62, 0xA2, 0xDB, 0x26, 0x46, 0x2F, 0xF2, - 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, - 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x67, 0xF1, 0x32, 0xF8, 0x68, 0xF1, 0x33, 0xF8, 0x69, 0xF1, - 0x34, 0xF8, 0x50, 0x63, 0x2A, 0xFC, 0xAC, 0xF3, 0x19, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x88, 0xF3, - 0x07, 0xFA, 0x00, 0xF4, 0x66, 0xF1, 0x06, 0xF8, 0x23, 0x60, 0x4C, 0x62, 0xA2, 0xD3, 0x07, 0xFA, - 0x22, 0x60, 0xC6, 0x65, 0xE2, 0x60, 0x58, 0x4D, 0x2F, 0x78, 0xFF, 0xFF, 0x22, 0x60, 0xBE, 0x64, - 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE1, 0x60, 0x58, 0x4D, 0xE5, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x3F, 0xFC, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x20, 0x44, 0x80, 0x26, - 0x11, 0x00, 0x80, 0xBC, 0x40, 0x40, 0x00, 0x64, 0x95, 0xFB, 0x96, 0xFB, 0x97, 0xFB, 0x75, 0xFB, - 0x66, 0xF3, 0x00, 0x75, 0x00, 0x72, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0xC7, 0xF3, 0xED, 0xE2, - 0xCC, 0x84, 0x5A, 0xFB, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x00, 0x64, 0x73, 0xFB, 0x75, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, - 0x3E, 0x63, 0x16, 0x60, 0x60, 0x61, 0x59, 0xD1, 0x61, 0x46, 0x08, 0x1B, 0xFC, 0x1F, 0x22, 0x60, - 0xDE, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x65, 0x00, 0x61, 0x17, 0x00, 0x16, 0x60, 0xA2, 0x61, - 0x49, 0xD1, 0xCB, 0x83, 0xFD, 0x18, 0x63, 0x41, 0x04, 0xA1, 0x61, 0x45, 0x66, 0x43, 0x22, 0x60, - 0xDE, 0x64, 0xDC, 0x84, 0x60, 0xFE, 0xA3, 0xD1, 0xDF, 0x83, 0xA0, 0xD9, 0xCD, 0x81, 0x20, 0xFE, - 0xF8, 0x02, 0x66, 0x44, 0x16, 0x60, 0x62, 0x7C, 0xD0, 0x81, 0x5A, 0xF3, 0xC7, 0xF1, 0x22, 0x60, - 0xDC, 0x63, 0x00, 0xA0, 0x64, 0x5F, 0xBD, 0xDB, 0x1B, 0x60, 0x94, 0x66, 0xA6, 0xD1, 0x02, 0x02, - 0x01, 0x18, 0x01, 0xB9, 0x61, 0x44, 0x60, 0xFE, 0xA3, 0xDB, 0xFC, 0xA3, 0x65, 0x44, 0x03, 0xA4, - 0xA3, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x2D, 0x58, 0xFF, 0xFF, 0x23, 0x60, 0x4E, 0x62, 0xA2, 0xDB, - 0xCD, 0x81, 0x28, 0xD3, 0x5A, 0x88, 0xDC, 0x83, 0x39, 0x18, 0xFB, 0x03, 0x61, 0x40, 0x7F, 0x3A, - 0x07, 0x00, 0x23, 0x60, 0x4E, 0x62, 0xA2, 0xD3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, - 0x60, 0xFE, 0xA3, 0xD1, 0xDD, 0x81, 0xA1, 0xD8, 0x61, 0x40, 0x7F, 0x3A, 0x09, 0x00, 0x20, 0xFE, - 0x23, 0x60, 0x4E, 0x62, 0xA2, 0xD3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, - 0xCF, 0x83, 0xA3, 0xD3, 0xDD, 0x81, 0xA1, 0xDA, 0xFF, 0xB4, 0x00, 0x7F, 0x15, 0x03, 0xDB, 0x83, - 0x61, 0x40, 0x7F, 0x3A, 0x0B, 0x00, 0x20, 0xFE, 0x60, 0x45, 0x23, 0x60, 0x4E, 0x62, 0xA2, 0xD3, - 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x65, 0x44, 0x00, 0xF4, 0x60, 0xFE, 0xA3, 0xD1, 0xDF, 0x83, - 0xDD, 0x81, 0xCC, 0x84, 0xA1, 0xD8, 0xEC, 0x02, 0x20, 0xFE, 0xC3, 0x01, 0x23, 0x60, 0x4E, 0x62, - 0xA2, 0xD1, 0xFD, 0xA1, 0xFF, 0xB1, 0xC1, 0x83, 0xA2, 0xDD, 0x2D, 0x58, 0xFF, 0xFF, 0x67, 0x5C, - 0x11, 0x60, 0xF0, 0x61, 0xA1, 0xD3, 0xA5, 0xD9, 0x12, 0x18, 0x60, 0x43, 0x23, 0x60, 0x04, 0x64, - 0xA5, 0xDB, 0x60, 0xFE, 0xA0, 0xDD, 0xFF, 0xFF, 0x20, 0xFE, 0xDC, 0x84, 0xCF, 0x83, 0xE3, 0x83, - 0x59, 0xD1, 0xDC, 0x84, 0x60, 0xFE, 0xA0, 0xD9, 0xFF, 0xFF, 0x20, 0xFE, 0xF9, 0x1F, 0x2D, 0x58, - 0xFF, 0xFF, 0x20, 0x40, 0x20, 0x2A, 0x0D, 0x00, 0x12, 0x60, 0xB8, 0x62, 0xA2, 0xD1, 0x50, 0xF3, - 0x23, 0x60, 0x39, 0x63, 0x60, 0xFE, 0xA3, 0xD9, 0xDF, 0x83, 0x60, 0x47, 0xA3, 0xDB, 0xFF, 0xFF, - 0x20, 0xFE, 0x2D, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x25, 0x00, 0x45, 0x48, - 0x00, 0x60, 0x10, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0x1D, 0x03, 0xF2, 0x60, - 0x02, 0x64, 0x24, 0xFA, 0x00, 0x60, 0x48, 0x61, 0x28, 0x44, 0x59, 0xDA, 0x03, 0x64, 0x38, 0x43, - 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x39, 0x44, 0x59, 0xDA, 0x06, 0x64, 0x23, 0xFA, - 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, - 0x40, 0x26, 0x51, 0x00, 0x45, 0x48, 0x00, 0x60, 0x68, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, - 0xFF, 0xFF, 0x49, 0x03, 0xF2, 0x60, 0x01, 0x64, 0x24, 0xFA, 0x02, 0x60, 0x00, 0x61, 0x46, 0x4A, - 0x38, 0x44, 0x54, 0x94, 0x03, 0x64, 0x01, 0x02, 0x09, 0x00, 0x06, 0x63, 0x4A, 0x61, 0x38, 0x46, - 0xBD, 0xD0, 0xCC, 0x84, 0x2A, 0x46, 0x59, 0xD8, 0xFA, 0x02, 0x06, 0x00, 0xDA, 0x81, 0x38, 0x43, - 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x05, 0x63, 0x28, 0x44, 0x02, 0xA8, 0x25, 0xFA, - 0x07, 0x02, 0x03, 0x64, 0x39, 0x43, 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x08, 0x63, - 0x22, 0x60, 0x28, 0x7C, 0x28, 0x44, 0x03, 0xA8, 0xA4, 0xD3, 0x0F, 0x03, 0xE8, 0x85, 0xC7, 0x85, - 0x60, 0x43, 0xFE, 0xA3, 0x22, 0x60, 0x2A, 0x64, 0x58, 0xD1, 0xD9, 0x81, 0xA1, 0xD8, 0x7E, 0x2A, - 0x02, 0x00, 0x00, 0xF4, 0x02, 0x61, 0xF8, 0x1F, 0x65, 0x43, 0x2A, 0x46, 0x23, 0xFC, 0x1B, 0x60, - 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, - 0x1C, 0x00, 0x45, 0x48, 0x00, 0x60, 0x06, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, - 0x14, 0x03, 0x02, 0x64, 0x23, 0xFA, 0xF2, 0x60, 0x00, 0x64, 0x5A, 0xDA, 0x28, 0x44, 0x5A, 0xDA, - 0xFF, 0xFF, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, - 0x32, 0x40, 0x40, 0x26, 0x3E, 0x00, 0x7C, 0xF3, 0x67, 0x43, 0xDC, 0x84, 0xCC, 0x84, 0x39, 0x03, - 0x60, 0x46, 0x0A, 0x02, 0x7C, 0xFD, 0x00, 0x60, 0x46, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, - 0xFF, 0xFF, 0x66, 0x44, 0x7C, 0xFB, 0x2E, 0x03, 0x46, 0x4B, 0x1E, 0x60, 0xD8, 0x61, 0x18, 0x64, - 0x23, 0xFA, 0xF1, 0x60, 0x00, 0x64, 0x24, 0xFA, 0x4A, 0x65, 0xA2, 0xFF, 0x2C, 0x63, 0x00, 0x64, - 0x59, 0xD1, 0xA2, 0xDB, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, - 0xF7, 0x1F, 0x12, 0x63, 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, - 0x04, 0x65, 0xF8, 0x1F, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, 0x2B, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0xA6, 0xFE, 0x00, 0x64, - 0x7C, 0xFB, 0xA3, 0xFF, 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0xA6, 0xFE, 0xB8, 0x05, 0xA7, 0xFE, - 0x0A, 0x05, 0xA5, 0xFE, 0x03, 0x04, 0xE3, 0x60, 0xD3, 0x78, 0xFF, 0xFF, 0xA4, 0xFE, 0xF2, 0x04, - 0xE4, 0x60, 0x69, 0x78, 0xFF, 0xFF, 0x36, 0x45, 0x17, 0x60, 0x52, 0x64, 0x44, 0xD7, 0xFF, 0xFF, - 0xFF, 0xFF, 0x28, 0xF3, 0x7E, 0xF1, 0x60, 0x47, 0x07, 0xB4, 0x4E, 0xFB, 0x01, 0x61, 0x03, 0x03, - 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x9D, 0x84, 0xA1, 0x80, 0xA0, 0x83, 0x1A, 0x03, 0x7E, 0xFD, - 0x0F, 0x60, 0xF4, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x7E, 0xF1, 0x31, 0x44, 0x64, 0x40, 0xFF, 0x26, 0x09, 0x00, 0xFE, 0xB4, 0x40, 0x51, 0x01, 0x7C, - 0xBC, 0xF9, 0x49, 0xF3, 0x01, 0x63, 0x60, 0x40, 0xFF, 0x26, 0x49, 0xFD, 0xC7, 0x60, 0x2E, 0x78, - 0xFF, 0xFF, 0xE3, 0x60, 0xD3, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0xB6, 0x63, 0xBD, 0xD3, 0xBD, 0xD1, - 0xBD, 0xD1, 0xB0, 0x84, 0xB0, 0x84, 0xFF, 0xFF, 0x07, 0x02, 0x6B, 0xFB, 0x31, 0x44, 0xFE, 0xB4, - 0x40, 0x51, 0x0D, 0x64, 0x05, 0xFB, 0x3F, 0x00, 0x28, 0xF3, 0x7E, 0xF1, 0x60, 0x47, 0x64, 0x41, - 0x07, 0xB1, 0x07, 0xB4, 0x08, 0x24, 0x67, 0x4C, 0x4E, 0xFB, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, - 0xE1, 0x81, 0xFD, 0x02, 0xA1, 0x80, 0xB1, 0x83, 0x2E, 0x02, 0x7E, 0xFD, 0x1F, 0x60, 0xAA, 0x62, - 0xA2, 0xD3, 0xC5, 0xFB, 0x65, 0xFB, 0x7E, 0xF3, 0xFF, 0xFF, 0xCC, 0x85, 0xA4, 0x80, 0x7E, 0xFB, - 0x17, 0x02, 0x1B, 0x60, 0xC4, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x46, 0x5E, - 0x31, 0x44, 0x01, 0xBC, 0x40, 0x51, 0xED, 0xE2, 0x0F, 0x4E, 0xCE, 0x60, 0x58, 0x4F, 0x07, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0x01, 0x65, 0xE2, 0x60, 0x58, 0x4E, 0xDD, 0x78, 0xFF, 0xFF, 0x08, 0x00, - 0x0F, 0x60, 0xD6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0xE5, 0x60, 0x16, 0x78, 0xFF, 0xFF, 0xD7, 0xFE, 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0x2E, 0xF5, - 0x27, 0xF2, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x28, 0x02, 0x14, 0x60, - 0xD0, 0x62, 0xA2, 0xD3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x04, 0x03, 0xD3, 0x80, - 0xD9, 0x81, 0xFA, 0x02, 0x09, 0x00, 0xA1, 0xDD, 0x14, 0x60, 0xD0, 0x62, 0xD9, 0x84, 0xA2, 0xDB, - 0x4A, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA2, 0xDB, 0x66, 0x45, 0x63, 0x46, 0x06, 0xF2, 0xFF, 0x60, - 0x01, 0x7C, 0xA0, 0x9C, 0x06, 0xF8, 0x65, 0x46, 0x71, 0xF3, 0x60, 0x40, 0x10, 0x2A, 0x03, 0x00, - 0xCC, 0x84, 0x80, 0x2B, 0x71, 0xFB, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, 0xFF, 0xFF, 0xAB, 0x01, - 0x2E, 0xF5, 0x25, 0x60, 0x28, 0x61, 0x28, 0xF0, 0xFF, 0xFF, 0xA1, 0xD9, 0x27, 0xF2, 0x12, 0x60, - 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, - 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, - 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, - 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x13, 0x02, 0x63, 0x46, 0x06, 0xF2, 0xFF, 0xFF, - 0x02, 0xB0, 0x08, 0xBC, 0x0D, 0x03, 0x06, 0xFA, 0xE4, 0x60, 0x58, 0x4E, 0x9D, 0x78, 0xFF, 0xFF, - 0x0F, 0x60, 0xE8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x6A, 0x01, 0x7E, 0xF1, 0xFF, 0xFF, 0x64, 0x41, 0x07, 0xB1, 0xFF, 0xFF, 0x08, 0x24, 0x67, 0x4C, - 0x1B, 0x60, 0xC4, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x46, 0x5E, 0x1F, 0x60, - 0xAA, 0x62, 0xA2, 0xD3, 0xC5, 0xFB, 0x65, 0xFB, 0x1F, 0x60, 0xB6, 0x63, 0xBD, 0xD1, 0xCB, 0xF9, - 0x67, 0xF9, 0xBD, 0xD1, 0xCC, 0xF9, 0x68, 0xF9, 0xA3, 0xD1, 0xCD, 0xF9, 0x69, 0xF9, 0x01, 0x64, - 0x6B, 0xFB, 0x31, 0x44, 0x21, 0xBC, 0x40, 0x51, 0x20, 0x44, 0x01, 0x65, 0x34, 0x80, 0x01, 0x64, - 0x51, 0xFB, 0x21, 0x60, 0x50, 0x64, 0x52, 0xFB, 0x0F, 0x4E, 0xE8, 0x60, 0x58, 0x4F, 0x02, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0x0E, 0x57, 0x63, 0x46, 0x43, 0x47, - 0x1E, 0xF2, 0x72, 0xF2, 0x02, 0x1B, 0x01, 0x1B, 0x0C, 0x00, 0x60, 0x46, 0x1B, 0x60, 0xDA, 0x64, - 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, 0x75, 0x78, 0xFF, 0xFF, 0x27, 0x46, 0x72, 0xF2, 0xFF, 0xFF, - 0xF4, 0x1B, 0x37, 0x58, 0xFF, 0xFF, 0x1B, 0x60, 0xAC, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, - 0x60, 0x46, 0x0E, 0xF2, 0x5B, 0x03, 0x60, 0x40, 0xF0, 0x37, 0x48, 0x00, 0xFF, 0x37, 0x3D, 0x00, - 0xFD, 0x37, 0x35, 0x00, 0x18, 0x37, 0x29, 0x00, 0xFE, 0x37, 0x2C, 0x00, 0xF8, 0x37, 0x0A, 0x00, - 0x60, 0x47, 0xFF, 0xB5, 0x0F, 0x60, 0xD0, 0x62, 0x46, 0xD1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x1B, 0x60, 0xDA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xD6, 0x01, 0x06, 0xB4, 0xFD, 0x7F, 0x0E, 0xFA, - 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xB2, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF9, 0xFE, 0xC6, 0x01, 0xDB, 0x60, 0x58, 0x4F, 0xB7, 0x78, - 0xFF, 0xFF, 0x14, 0x00, 0xDE, 0x60, 0x58, 0x4F, 0x99, 0x78, 0xFF, 0xFF, 0xBC, 0x03, 0x23, 0xF0, - 0x60, 0x40, 0x04, 0x26, 0xE2, 0x1B, 0x02, 0x26, 0xE0, 0x18, 0xA2, 0xFF, 0x02, 0xF0, 0x09, 0x60, - 0x08, 0x64, 0xD0, 0x80, 0x90, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0x90, 0xFB, 0x1B, 0x60, 0xDA, 0x64, - 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, 0x75, 0x78, 0xFF, 0xFF, 0xA5, 0x01, 0xAC, 0xFE, 0x09, 0x05, - 0xAD, 0xFE, 0x10, 0x05, 0xAE, 0xFE, 0x9F, 0x05, 0xAF, 0xFE, 0x3A, 0x05, 0xC7, 0x60, 0x2E, 0x78, - 0xFF, 0xFF, 0x0F, 0x60, 0xCE, 0x62, 0xA2, 0xD1, 0x20, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xF4, 0x01, 0x10, 0x60, 0x02, 0x65, 0x03, 0x61, 0x07, 0x00, 0xA2, 0xDD, 0x58, 0x4F, - 0x64, 0x58, 0xFF, 0xFF, 0x00, 0xB9, 0xFF, 0xFF, 0x08, 0x03, 0x00, 0x63, 0xA5, 0xD1, 0x5A, 0xD3, - 0xDA, 0x85, 0x00, 0xA8, 0xCD, 0x81, 0xF2, 0x02, 0xF8, 0x02, 0xE0, 0x01, 0x0F, 0x60, 0xCC, 0x62, - 0x0F, 0x60, 0xF2, 0x65, 0xE5, 0x60, 0x4E, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xD6, 0x80, 0xFF, 0xFF, - 0x04, 0x03, 0x5A, 0xDB, 0x5A, 0xDB, 0x5A, 0xDD, 0xF9, 0x01, 0x10, 0x60, 0x00, 0x65, 0x00, 0x64, - 0x5A, 0xDB, 0xD6, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x5A, 0xDD, 0xFB, 0x01, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xD0, 0x64, 0x40, 0x41, 0x0F, 0x60, 0xCE, 0x63, 0xA3, 0xD1, 0x00, 0x64, 0xD0, 0x80, - 0x06, 0x61, 0x08, 0x03, 0xBD, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0xB0, 0x84, 0xCD, 0x81, 0xA3, 0xDB, - 0x06, 0xA3, 0xF9, 0x02, 0x0F, 0x60, 0xF4, 0x63, 0xA3, 0xD1, 0x00, 0x64, 0xD0, 0x80, 0x07, 0x61, - 0x19, 0x03, 0xBD, 0xDB, 0x64, 0x44, 0xFE, 0xA3, 0x02, 0xA3, 0xCD, 0x81, 0xE8, 0x84, 0xE3, 0x03, - 0x02, 0x05, 0xE1, 0x03, 0xF9, 0x01, 0x78, 0xFB, 0x7A, 0xFD, 0x61, 0x5C, 0xA3, 0xD3, 0x79, 0xF9, - 0x03, 0x18, 0x58, 0x4F, 0x60, 0x58, 0xFF, 0xFF, 0x7A, 0xF3, 0x79, 0xF1, 0x60, 0x43, 0x78, 0xF3, - 0x64, 0x41, 0xEA, 0x01, 0x21, 0x43, 0x0F, 0x60, 0xF4, 0x65, 0xD7, 0x80, 0xBD, 0xD1, 0xBD, 0xD3, - 0x03, 0x02, 0xC7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0xA0, 0x84, 0xBD, 0xD1, 0x43, 0x41, 0xF5, 0x03, - 0xE5, 0x60, 0x53, 0x64, 0x64, 0x58, 0x40, 0x4F, 0x2A, 0xF0, 0x83, 0x60, 0xFF, 0x65, 0x64, 0x47, - 0x03, 0x2B, 0x01, 0x00, 0x17, 0x00, 0x03, 0x26, 0x03, 0xAC, 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, - 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x64, 0x41, 0xCB, 0xF3, - 0x2F, 0xFA, 0x60, 0x43, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF1, 0x31, 0xF8, 0x32, 0xFC, 0x33, 0xFA, - 0x34, 0xF8, 0x19, 0x00, 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, - 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x36, 0xF2, 0x32, 0xFA, 0x37, 0xF2, 0x33, 0xFA, 0x38, 0xF2, - 0x34, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0x36, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0x37, 0xFA, 0xCD, 0xF3, - 0x31, 0xFA, 0x38, 0xFA, 0x64, 0x41, 0x1C, 0xF2, 0x13, 0xFA, 0x00, 0xF4, 0x0D, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x80, 0x2B, 0x29, 0x00, 0x26, 0x46, 0x04, 0x63, 0x03, 0xFC, 0x00, 0xF4, 0x0D, 0xF2, - 0x06, 0xFA, 0xE6, 0x60, 0x58, 0x4E, 0xF4, 0x78, 0xFF, 0xFF, 0xFF, 0xA0, 0x59, 0xF5, 0x1A, 0x02, - 0x39, 0xF2, 0x26, 0x46, 0x3F, 0xFA, 0x00, 0xF4, 0x00, 0x60, 0x81, 0x67, 0x0D, 0xFA, 0x7C, 0x64, - 0x01, 0xFA, 0x26, 0x46, 0x00, 0x64, 0x3E, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x9A, 0x64, - 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, - 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF0, 0x42, 0x64, 0xD0, 0x80, - 0xFF, 0xFF, 0x01, 0x04, 0x3F, 0xFA, 0x1C, 0xF2, 0x13, 0xFA, 0x26, 0xF2, 0x27, 0xF0, 0x60, 0x47, - 0x00, 0xF4, 0x1F, 0xFA, 0x64, 0x47, 0x20, 0xFA, 0x61, 0x44, 0x21, 0xFA, 0x01, 0x67, 0x0D, 0xFA, - 0x10, 0x61, 0x1F, 0x60, 0x6C, 0x64, 0x1E, 0x63, 0x58, 0xD1, 0xCD, 0x81, 0xBD, 0xD8, 0xFC, 0x02, - 0x9B, 0xF1, 0xB8, 0xF1, 0x64, 0x5E, 0x64, 0x5F, 0x44, 0x63, 0xBD, 0xDA, 0x1F, 0x60, 0x66, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x09, 0xBC, 0x4A, 0xD3, 0x60, 0x45, - 0x60, 0x40, 0x01, 0x36, 0x03, 0x64, 0x02, 0x36, 0x01, 0x64, 0xB4, 0x84, 0x06, 0xA2, 0xA2, 0xD1, - 0xBD, 0xDA, 0x64, 0x47, 0xBD, 0xDA, 0xB5, 0xF3, 0xB6, 0xF1, 0x60, 0x47, 0xBD, 0xDA, 0x64, 0x47, - 0xC3, 0xF1, 0xBD, 0xDA, 0x64, 0x44, 0xBD, 0xDA, 0x26, 0x46, 0x00, 0x64, 0x23, 0xF0, 0x3B, 0xF0, - 0x64, 0x40, 0x10, 0x2A, 0x06, 0x00, 0xC0, 0x67, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0x10, 0xBC, 0x3E, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0x9A, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x04, 0x60, 0x5C, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x59, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x2F, 0x58, 0xFF, 0xFF, 0x59, 0xF5, 0xAC, 0xF1, - 0x19, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x08, 0x64, 0x2A, 0xFA, 0x80, 0x7E, 0xF8, 0x7F, 0x0E, 0xFA, - 0x88, 0xF1, 0x07, 0xF8, 0x01, 0x60, 0x60, 0x67, 0x2C, 0xFA, 0x1D, 0x60, 0x00, 0x67, 0x2D, 0xFA, - 0x01, 0x60, 0x00, 0x67, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0x32, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, - 0x33, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x34, 0xF8, 0x00, 0x63, 0x3B, 0xFC, 0x3D, 0xFC, 0x01, 0x64, - 0x3A, 0xFA, 0x66, 0x64, 0x39, 0xFA, 0x3C, 0xFC, 0xAA, 0x60, 0xAA, 0x64, 0x00, 0xF4, 0x02, 0xFA, - 0x00, 0x60, 0x03, 0x64, 0x5A, 0xDA, 0x1D, 0x60, 0x60, 0x64, 0x5A, 0xDA, 0x01, 0x60, 0x00, 0x64, - 0x5A, 0xDA, 0x82, 0x7F, 0x24, 0x7E, 0x08, 0xFA, 0x01, 0x60, 0x01, 0x64, 0x0A, 0xFA, 0x00, 0x64, - 0x0E, 0xFA, 0x2D, 0x58, 0xFF, 0xFF, 0x59, 0xF5, 0x3D, 0xF2, 0x3C, 0xF2, 0xCC, 0x83, 0x00, 0xA8, - 0x03, 0x03, 0x08, 0x28, 0x3D, 0xFC, 0x45, 0x00, 0x3D, 0xFA, 0x3A, 0xF2, 0x3B, 0xF0, 0x00, 0x63, - 0x00, 0xF4, 0x07, 0xFC, 0x01, 0xB0, 0x0B, 0xFA, 0x1A, 0x03, 0x1F, 0xF8, 0xFF, 0xFF, 0x1B, 0x60, - 0xDA, 0x62, 0x18, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x1F, 0xF2, 0x1E, 0xF0, 0x59, 0xF5, 0x00, 0xA8, 0x3B, 0xF8, 0xD0, 0x80, 0x06, 0x03, - 0x05, 0x03, 0x04, 0x60, 0x5C, 0x63, 0x0F, 0x64, 0x3A, 0xFA, 0x39, 0xFC, 0x00, 0xF4, 0x00, 0x64, - 0x06, 0xFA, 0xE6, 0x60, 0x58, 0x4E, 0xF4, 0x78, 0xFF, 0xFF, 0x59, 0xF5, 0x00, 0xF4, 0x81, 0x60, - 0x00, 0x64, 0x06, 0xFA, 0x32, 0x47, 0x04, 0xBC, 0x07, 0xFA, 0xB8, 0xF1, 0x00, 0x7F, 0x64, 0x5E, - 0x09, 0xFA, 0x59, 0xF5, 0x00, 0x64, 0x15, 0xFA, 0x39, 0xF2, 0x3F, 0xFA, 0x1B, 0x60, 0xDA, 0x62, - 0x1B, 0x60, 0x88, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xE1, 0x60, 0x0D, 0x78, 0xFF, 0xFF, 0x66, 0x45, 0x0E, 0xF2, 0x0F, 0xF0, 0x10, 0xF0, - 0x64, 0x41, 0x01, 0xA8, 0x59, 0xF5, 0x09, 0x02, 0xAD, 0x83, 0x64, 0x44, 0xAC, 0x84, 0x08, 0x24, - 0x0A, 0x63, 0x3C, 0xFC, 0x3D, 0xFC, 0x1A, 0x02, 0x2D, 0x00, 0x03, 0x3A, 0x03, 0x00, 0x00, 0x64, - 0x3C, 0xFA, 0x29, 0x00, 0x04, 0x3A, 0x09, 0x00, 0x0A, 0x64, 0x3C, 0xFA, 0x01, 0x64, 0x3A, 0xFA, - 0x00, 0xF4, 0x00, 0x64, 0x1F, 0xFA, 0x1E, 0xFA, 0x1E, 0x00, 0x02, 0x3A, 0x1E, 0x00, 0x64, 0x44, - 0xAD, 0x83, 0xAC, 0x84, 0x02, 0x03, 0x3C, 0xFC, 0x3D, 0xFC, 0x15, 0x03, 0x3A, 0xFA, 0xF8, 0x65, - 0x52, 0x63, 0x64, 0x44, 0x01, 0x36, 0x0D, 0x00, 0x12, 0xA3, 0x64, 0x40, 0x02, 0x2A, 0x02, 0x00, - 0xC7, 0x83, 0xC7, 0x83, 0x64, 0x40, 0x08, 0x2A, 0x01, 0x00, 0xC7, 0x83, 0x64, 0x40, 0x04, 0x26, - 0xC7, 0x83, 0x39, 0xFC, 0x00, 0x64, 0x2E, 0x58, 0xFF, 0xFF, 0x3B, 0xF0, 0x3A, 0xF2, 0x65, 0x46, - 0x06, 0xF2, 0x40, 0x47, 0x1D, 0x18, 0x32, 0x47, 0x07, 0xFA, 0x24, 0x7E, 0x82, 0x7F, 0x08, 0xFA, - 0x01, 0x60, 0x01, 0x63, 0xB8, 0xF3, 0x0A, 0xFC, 0x00, 0x7F, 0x09, 0xFA, 0x27, 0x40, 0x01, 0x2A, - 0x0F, 0x00, 0x1F, 0xF8, 0x1B, 0x60, 0xDA, 0x62, 0x18, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x1E, 0xF0, 0x59, 0xF5, 0x3B, 0xF8, 0x65, 0x46, - 0x27, 0x40, 0x02, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x6E, 0x61, 0xFF, 0x60, 0xFE, 0x64, - 0x00, 0x60, 0x0E, 0x63, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x01, 0x60, 0xEE, 0x63, 0x00, 0xF4, - 0x02, 0x61, 0x58, 0xD1, 0x59, 0xD8, 0x7E, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x61, 0xF9, 0x1F, - 0x27, 0x40, 0x04, 0x26, 0x1B, 0x00, 0x46, 0x4B, 0x1B, 0x60, 0x88, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x0E, 0x03, 0x89, 0xF0, 0xE7, 0x60, 0x58, 0x4D, 0xAE, 0x78, 0xFF, 0xFF, - 0x65, 0x44, 0xAC, 0x86, 0xFF, 0xFF, 0x08, 0x03, 0xE7, 0x60, 0x58, 0x4D, 0xAE, 0x78, 0xFF, 0xFF, - 0x04, 0x00, 0x2B, 0x46, 0x82, 0xFC, 0x00, 0xF4, 0x82, 0xFC, 0x00, 0xF4, 0x27, 0x40, 0x08, 0x26, - 0x1A, 0x00, 0x46, 0x4B, 0x1B, 0x60, 0xC4, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x0E, 0x03, 0x89, 0xF0, 0xE7, 0x60, 0x58, 0x4D, 0xAE, 0x78, 0xFF, 0xFF, 0x65, 0x44, 0xAC, 0x86, - 0xFF, 0xFF, 0x08, 0x03, 0xE7, 0x60, 0x58, 0x4D, 0xAE, 0x78, 0xFF, 0xFF, 0x04, 0x00, 0x65, 0x46, - 0x02, 0xFA, 0x00, 0xF4, 0x82, 0xFC, 0x01, 0x64, 0x2E, 0x58, 0xFF, 0xFF, 0x01, 0x61, 0x02, 0x64, - 0x7A, 0x63, 0x58, 0xD0, 0xAB, 0x46, 0xA0, 0xD8, 0xAB, 0x46, 0xFB, 0x1F, 0xAB, 0x46, 0x00, 0xF4, - 0xCD, 0x81, 0xAB, 0x46, 0x00, 0xF4, 0xF3, 0x02, 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0x2A, 0x61, - 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x58, 0xFB, 0x04, 0x64, 0x03, 0xFA, - 0x67, 0x44, 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0x32, 0xFA, 0x33, 0xFA, 0x34, 0xFA, 0x12, 0x60, - 0x80, 0x64, 0x88, 0xF1, 0x0E, 0xFA, 0x07, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x11, 0x60, 0xD8, 0x63, - 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x08, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xBD, 0xDB, 0x06, 0x64, - 0xA3, 0xDB, 0x10, 0x60, 0x06, 0x62, 0xEA, 0x60, 0x08, 0x64, 0xA2, 0xDB, 0x11, 0x60, 0xE4, 0x63, - 0x00, 0x64, 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x0C, 0x64, 0xBD, 0xDB, 0x08, 0x64, 0xBD, 0xDB, - 0x06, 0x64, 0xA3, 0xDB, 0x10, 0x60, 0x0A, 0x62, 0xEA, 0x60, 0x12, 0x64, 0xA2, 0xDB, 0x0F, 0x60, - 0xFC, 0x62, 0xE9, 0x60, 0xF2, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x25, 0x60, 0x2A, 0x62, 0xA2, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x58, 0xF5, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, - 0x31, 0xF8, 0xAC, 0xF1, 0x19, 0xF8, 0xEA, 0x60, 0x58, 0x4E, 0x1C, 0x78, 0xFF, 0xFF, 0x30, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x16, 0x60, 0xCC, 0x61, - 0xA1, 0xD3, 0xFF, 0xFF, 0x59, 0x18, 0x58, 0xF5, 0x40, 0x64, 0x2A, 0xFA, 0x52, 0xF3, 0x00, 0xF4, - 0x60, 0x43, 0xBD, 0xD1, 0x04, 0x65, 0x64, 0x47, 0xA5, 0xDA, 0x64, 0x41, 0xDD, 0x81, 0xE9, 0x81, - 0x62, 0x44, 0x04, 0x03, 0xBD, 0xD1, 0xCD, 0x81, 0x58, 0xD8, 0xFC, 0x02, 0x58, 0x8B, 0x21, 0x60, - 0x8E, 0x63, 0xA3, 0xD1, 0x2B, 0x44, 0xC8, 0x84, 0x64, 0x41, 0xFF, 0xB1, 0x61, 0x45, 0x03, 0xA1, - 0xE9, 0x81, 0x41, 0x4C, 0xBD, 0xD1, 0xCD, 0x81, 0x58, 0xD8, 0xFC, 0x02, 0x2B, 0xD2, 0x2B, 0x43, - 0x60, 0x47, 0x01, 0x7E, 0x52, 0xF1, 0xA3, 0xDA, 0xA4, 0xD3, 0xCB, 0x83, 0x44, 0x8B, 0xF8, 0x84, - 0x2C, 0x41, 0x0C, 0x04, 0xBE, 0xD2, 0xFF, 0xFF, 0x60, 0x47, 0xBE, 0xDA, 0x00, 0x7E, 0xA3, 0xD2, - 0x60, 0x45, 0x00, 0x7F, 0xB4, 0x84, 0xCD, 0x81, 0xBD, 0xDA, 0xF4, 0x02, 0x58, 0xF5, 0x2B, 0x44, - 0x04, 0xA4, 0x3F, 0xFA, 0x65, 0xF3, 0x64, 0xFB, 0x16, 0x60, 0xCE, 0x61, 0x01, 0x64, 0x52, 0xF1, - 0xA1, 0xDB, 0x65, 0xFB, 0xA4, 0xD3, 0x04, 0x65, 0x51, 0xF3, 0x01, 0x18, 0x0C, 0x65, 0xF3, 0xB4, - 0xB4, 0x84, 0x51, 0xFB, 0x02, 0xB0, 0xFF, 0xFF, 0x16, 0x03, 0x65, 0xF3, 0xFF, 0xFF, 0x60, 0x47, - 0x0F, 0xB4, 0x65, 0xFB, 0x01, 0x03, 0x0F, 0x00, 0xE9, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0x51, 0xF1, - 0x65, 0xF3, 0x64, 0x40, 0x02, 0x26, 0xF8, 0x01, 0xF3, 0xA0, 0x04, 0xA4, 0x01, 0x04, 0xF1, 0xA4, - 0x10, 0x36, 0xF2, 0x01, 0x65, 0xFB, 0x65, 0xF3, 0x16, 0x60, 0xCC, 0x61, 0xA1, 0xD1, 0xCC, 0x84, - 0x01, 0x61, 0x08, 0x24, 0x03, 0x00, 0xE1, 0x81, 0xCC, 0x84, 0xFB, 0x01, 0xA1, 0x84, 0x51, 0xF1, - 0xE7, 0x03, 0x16, 0x60, 0xCE, 0x61, 0xA1, 0xDB, 0x00, 0x00, 0x65, 0xF3, 0x01, 0x61, 0xCC, 0x84, - 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, 0xFB, 0x01, 0x9A, 0xF3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, - 0xD7, 0x03, 0x31, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xE4, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xE8, 0x60, - 0x95, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x65, 0xF1, 0x1C, 0x60, 0x00, 0x62, - 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0x20, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xE8, 0x60, 0xC8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xBE, 0xFE, 0x0F, 0x60, 0xCE, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x58, 0xF5, 0x1B, 0x60, 0xDA, 0x62, - 0x1B, 0x60, 0x8E, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x00, 0x64, 0x4F, 0xFB, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, - 0xE8, 0x60, 0xF2, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x33, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x34, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xA6, 0xF1, 0x11, 0x60, 0xDC, 0x62, 0xA2, 0xD9, 0x1C, 0x60, 0x10, 0x62, 0x11, 0x60, - 0xD8, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xA7, 0xF1, 0x11, 0x60, - 0xE8, 0x62, 0xA2, 0xD9, 0x1C, 0x60, 0x0E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xFD, 0x1B, 0x1C, 0x60, - 0x10, 0x62, 0x11, 0x60, 0xE4, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x60, 0x08, 0x64, 0xA2, 0xDB, 0xE9, 0x60, 0x23, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x4F, 0xF1, 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x64, 0x40, 0xFF, 0x26, 0x03, 0x00, 0xE8, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x02, 0x0A, 0x00, 0x64, - 0x4F, 0xFB, 0xA8, 0xF1, 0x11, 0x60, 0xE8, 0x62, 0xA2, 0xD9, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x60, - 0x0C, 0x64, 0xA2, 0xDB, 0xE9, 0x60, 0x49, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0x10, 0x62, - 0x11, 0x60, 0xE4, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xE2, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x10, 0x62, 0x11, 0x60, 0xE4, 0x64, 0xA2, 0xDB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x14, 0x00, 0xFF, 0x60, 0xF7, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x4F, 0xF3, 0xDB, 0x0A, 0x00, 0xA0, 0x00, 0x64, 0x02, 0x03, 0x4F, 0xFB, 0xD6, 0x01, - 0x1C, 0x60, 0x10, 0x62, 0x11, 0x60, 0xD8, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0xE8, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x35, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x1C, 0x60, - 0x10, 0x62, 0x11, 0x60, 0xD8, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x51, 0xF3, 0xFF, 0xFF, 0xE3, 0xB4, 0x51, 0xFB, 0x16, 0x60, 0xCA, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xFE, 0xB4, 0xA2, 0xDB, 0x00, 0x64, 0x25, 0x60, 0x2A, 0x62, 0xA2, 0xDB, 0x0F, 0x60, 0xE2, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0E, 0x04, 0x32, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, - 0xE4, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xE9, 0x60, 0x8E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x64, 0xF1, 0x65, 0xF9, 0x1C, 0x60, 0x00, 0x62, 0xA2, 0xD9, 0x1E, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xE9, 0x60, 0xB6, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x0F, 0x60, - 0xCE, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, - 0xCE, 0x62, 0xA2, 0xD1, 0x10, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x60, - 0x04, 0x61, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x23, 0xFA, 0xF1, 0x60, - 0x02, 0x64, 0x24, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0xEA, 0x60, 0x58, 0x4E, - 0x2E, 0x78, 0xFF, 0xFF, 0x20, 0x44, 0x01, 0xB5, 0x54, 0x80, 0x31, 0x44, 0xDE, 0xB4, 0x40, 0x51, - 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x3E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x3F, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x1C, 0x60, 0x10, 0x62, 0x11, 0x60, - 0xD8, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x51, 0xFB, - 0x0F, 0x60, 0xE2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0xBE, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xE2, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xE2, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x66, 0x01, 0x60, 0x7A, 0x61, 0x16, 0x60, - 0xC4, 0x63, 0xA1, 0xD3, 0xFF, 0xFF, 0x20, 0x7F, 0xBD, 0xDB, 0x21, 0x60, 0x32, 0x64, 0xBD, 0xDB, - 0x04, 0xA1, 0xA1, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x10, 0x00, 0x01, 0x60, 0x7A, 0x61, - 0x16, 0x60, 0xC4, 0x63, 0xA1, 0xD3, 0x00, 0x66, 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, - 0x21, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xE2, 0x62, - 0xA2, 0xD1, 0x9F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, - 0xE4, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xEA, 0x60, 0x3E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x00, 0x62, 0x16, 0x60, 0xC2, 0x64, 0xA2, 0xDB, 0x20, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xEA, 0x60, 0x66, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xE2, 0x62, - 0xA2, 0xD1, 0x9F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xCE, 0x62, - 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, - 0x5F, 0xFB, 0xAC, 0x85, 0x60, 0x41, 0x20, 0x03, 0x01, 0x60, 0x00, 0x63, 0x08, 0x64, 0xE9, 0x81, - 0xCC, 0x84, 0x02, 0x24, 0xDF, 0x83, 0xFB, 0x02, 0x21, 0x60, 0x8E, 0x64, 0xA0, 0xDD, 0x65, 0x41, - 0x21, 0x60, 0x90, 0x63, 0x0F, 0x60, 0xC0, 0x64, 0xE9, 0x81, 0x58, 0xD1, 0xFD, 0x04, 0xA3, 0xD9, - 0x0B, 0x03, 0x58, 0xD1, 0xE9, 0x81, 0x60, 0x45, 0xFC, 0x04, 0xA3, 0xD1, 0x64, 0x47, 0xB0, 0x84, - 0xBD, 0xDB, 0x00, 0xB9, 0x65, 0x44, 0xF0, 0x02, 0x20, 0x60, 0x38, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x01, 0xA8, 0x01, 0x60, 0x70, 0x62, 0x06, 0x02, 0xA2, 0xD3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, - 0x01, 0x03, 0x02, 0x64, 0x60, 0x41, 0x21, 0x60, 0x8E, 0x63, 0xBD, 0xD3, 0xA3, 0xD3, 0xFF, 0xB5, - 0x80, 0xBF, 0xCD, 0x81, 0x65, 0x5C, 0x0F, 0x03, 0x80, 0xBF, 0xBD, 0xDB, 0x65, 0x44, 0xC8, 0x84, - 0xFF, 0xFF, 0x0C, 0x03, 0x60, 0x45, 0xCD, 0x81, 0xA3, 0xD3, 0x08, 0x03, 0x80, 0xBF, 0xCD, 0x81, - 0xFF, 0xFF, 0x01, 0x03, 0x80, 0xBC, 0x60, 0x47, 0xBD, 0xDB, 0x00, 0x65, 0x64, 0x41, 0x21, 0x60, - 0x90, 0x63, 0xBD, 0xD3, 0xFF, 0xFF, 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, 0x60, 0x45, 0x60, 0x47, - 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, 0x60, 0x45, 0xCD, 0x81, 0xFF, 0xFF, 0xF2, 0x02, 0x65, 0x44, - 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x0A, 0x64, 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x14, 0x64, - 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, 0x32, 0x64, 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x37, 0x64, - 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x50, 0x64, 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x6E, 0x64, - 0x01, 0x00, 0x14, 0x64, 0x62, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x3C, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x31, 0x40, 0x20, 0x2A, 0x18, 0x00, 0x3F, 0xF2, 0x47, 0x65, 0xC4, 0x84, 0xE8, 0x84, 0x23, 0xFA, - 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x1B, 0x60, 0xDA, 0x62, 0x1B, 0x60, 0xCA, 0x64, 0xA2, 0xDB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x00, 0x66, - 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x0C, 0x63, 0x12, 0x60, - 0xB6, 0x62, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x53, 0xFB, 0x54, 0xFB, 0x12, 0x60, 0xBA, 0x63, - 0x02, 0x64, 0xA3, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0x12, 0x60, 0xBE, 0x62, 0xA2, 0xD3, 0x00, 0x63, - 0xF0, 0xA0, 0x01, 0xA4, 0x03, 0x03, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0xA2, 0xDD, 0x12, 0x60, - 0xC0, 0x62, 0xA2, 0xD1, 0xA2, 0xDD, 0x5A, 0xD3, 0xA2, 0xDD, 0xC0, 0x81, 0x61, 0x44, 0x02, 0x24, - 0xFF, 0xFF, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0x5A, 0xD3, 0xE9, 0x81, 0xE8, 0x83, - 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x85, 0xD4, 0x85, 0xC5, 0x83, 0xA2, 0xDD, 0x12, 0x60, - 0xB8, 0x62, 0x63, 0x47, 0x00, 0x7F, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0x03, 0xE1, 0xA3, 0xFF, - 0x1B, 0x60, 0x5A, 0x63, 0x17, 0xFD, 0xAE, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x7F, 0x67, - 0x01, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0xB1, 0xFE, 0x05, 0x05, 0xB0, 0xFE, 0x06, 0x05, 0xB2, 0xFE, - 0xB3, 0xFE, 0x22, 0x00, 0xF0, 0x60, 0xFA, 0x78, 0xFF, 0xFF, 0x28, 0xF3, 0x29, 0xF1, 0x40, 0x44, - 0x44, 0x45, 0x2A, 0xF1, 0x2B, 0xF1, 0x44, 0x46, 0x44, 0x47, 0x3F, 0xB4, 0xE0, 0x85, 0x16, 0x60, - 0xD2, 0x64, 0x44, 0xD7, 0x58, 0x43, 0xFF, 0xFF, 0x60, 0x45, 0x12, 0x60, 0xC8, 0x7C, 0xA4, 0xD3, - 0x61, 0x43, 0x04, 0xB4, 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, 0x06, 0x00, 0x3F, 0xB4, 0xB4, 0x84, - 0xFF, 0x27, 0x05, 0xFD, 0x04, 0xFB, 0x10, 0x75, 0xA1, 0xFF, 0xFF, 0xFF, 0x86, 0x3E, 0xB4, 0xFE, - 0x09, 0x05, 0xB5, 0xFE, 0x02, 0x24, 0x80, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0xFE, 0x05, 0x05, - 0xB6, 0xFE, 0xF2, 0x01, 0xF1, 0x60, 0x35, 0x78, 0xFF, 0xFF, 0x36, 0x44, 0x00, 0x7F, 0xF4, 0xA0, - 0x60, 0x45, 0x05, 0x05, 0x17, 0x60, 0x5E, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x01, - 0xE3, 0x01, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, - 0x10, 0x64, 0x40, 0x40, 0x02, 0x64, 0x40, 0x50, 0x61, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x04, 0x00, - 0x10, 0xE0, 0x46, 0x60, 0x09, 0xE0, 0x00, 0x00, 0x27, 0xF1, 0x00, 0x66, 0x20, 0x78, 0x42, 0xFE, - 0x23, 0x58, 0xFF, 0xFF, 0x78, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, - 0x1C, 0x02, 0x12, 0x60, 0xC8, 0x63, 0xA3, 0xD3, 0x07, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, 0x04, 0x03, - 0x03, 0x02, 0xBC, 0xF9, 0x00, 0x67, 0x11, 0x00, 0x00, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xB4, 0x01, - 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x06, 0x00, 0x04, 0x7C, - 0xBC, 0xF9, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x78, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x31, 0x02, 0x12, 0x60, 0xC8, 0x63, - 0xA3, 0xD3, 0x01, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, 0x03, 0x03, 0x02, 0x02, 0xBC, 0xF9, 0xFF, 0xFF, - 0x02, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x7E, 0xF1, 0x20, 0x44, - 0x64, 0x40, 0xFF, 0x26, 0x1B, 0x00, 0x7F, 0xB4, 0x40, 0x40, 0x5C, 0x5E, 0x82, 0xFF, 0x26, 0x44, - 0xFD, 0xB4, 0x40, 0x46, 0x5C, 0x41, 0x87, 0xFF, 0x62, 0xFF, 0x00, 0x63, 0x1B, 0x60, 0xC4, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x04, 0x03, 0x09, 0xF2, 0x0F, 0xFC, 0xAC, 0x86, - 0xFB, 0x01, 0x1C, 0x60, 0x04, 0x62, 0x06, 0x64, 0xA2, 0xDB, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x25, 0x46, 0x01, 0xF2, 0x08, 0xF0, 0x60, 0x47, 0x03, 0xB4, 0x03, 0xAC, 0x7F, 0x67, - 0x03, 0x61, 0x08, 0x02, 0x1B, 0x60, 0xE0, 0x64, 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, 0x75, 0x78, - 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x2B, 0x49, 0x00, 0x25, 0x44, - 0x1F, 0xB4, 0xE0, 0x85, 0xEC, 0x60, 0x36, 0x64, 0xC4, 0x98, 0xFF, 0xFF, 0xC0, 0xFE, 0x3D, 0x00, - 0xC1, 0xFE, 0x3B, 0x00, 0xC2, 0xFE, 0x39, 0x00, 0xC3, 0xFE, 0x37, 0x00, 0xC4, 0xFE, 0x35, 0x00, - 0xC5, 0xFE, 0x33, 0x00, 0xC6, 0xFE, 0x31, 0x00, 0xC7, 0xFE, 0x2F, 0x00, 0xC8, 0xFE, 0x2D, 0x00, - 0xC9, 0xFE, 0x2B, 0x00, 0xCA, 0xFE, 0x29, 0x00, 0xCB, 0xFE, 0x27, 0x00, 0xCC, 0xFE, 0x25, 0x00, - 0xCD, 0xFE, 0x23, 0x00, 0xCE, 0xFE, 0x21, 0x00, 0xCF, 0xFE, 0x1F, 0x00, 0xD0, 0xFE, 0x1D, 0x00, - 0xD1, 0xFE, 0x1B, 0x00, 0xD2, 0xFE, 0x19, 0x00, 0xD3, 0xFE, 0x17, 0x00, 0xD4, 0xFE, 0x15, 0x00, - 0xD5, 0xFE, 0x13, 0x00, 0xD6, 0xFE, 0x11, 0x00, 0xD7, 0xFE, 0x0F, 0x00, 0xD8, 0xFE, 0x0D, 0x00, - 0xD9, 0xFE, 0x0B, 0x00, 0xDA, 0xFE, 0x09, 0x00, 0xDB, 0xFE, 0x07, 0x00, 0xDC, 0xFE, 0x05, 0x00, - 0xDD, 0xFE, 0x03, 0x00, 0xDE, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x00, 0x64, 0x9F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9D, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x9C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x9A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x99, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x98, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x97, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x96, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x95, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x94, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x93, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x92, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x91, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x90, 0xFE, 0xF0, 0x84, - 0x06, 0xFB, 0x8F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8D, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x8C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x8A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x89, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x88, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x87, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x86, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x85, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x84, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x83, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x82, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x81, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x80, 0xFE, 0xF0, 0x84, - 0x05, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x5C, 0x5C, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x24, 0x40, 0x01, 0x27, 0x55, 0x00, 0x05, 0x60, 0x00, 0x63, 0x05, 0xFD, 0x30, 0x44, 0xBD, 0xDB, - 0x31, 0x44, 0xBD, 0xDB, 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, - 0x35, 0x44, 0xBD, 0xDB, 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, - 0x39, 0x44, 0xBD, 0xDB, 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, - 0x3D, 0x44, 0xBD, 0xDB, 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0x02, 0x61, 0x61, 0x44, - 0x02, 0x36, 0x82, 0xFF, 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, - 0x06, 0x36, 0x86, 0xFF, 0x07, 0x36, 0x87, 0xFF, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, - 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, - 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, - 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, - 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0xDD, 0x81, 0x08, 0x3A, 0xD0, 0x01, 0x54, 0x00, - 0x27, 0x40, 0x10, 0x26, 0x30, 0x00, 0x26, 0x44, 0x01, 0x36, 0x2D, 0x00, 0x02, 0x36, 0x82, 0xFF, - 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, - 0x25, 0x44, 0x00, 0x36, 0x44, 0x40, 0x01, 0x36, 0x44, 0x41, 0x02, 0x36, 0x44, 0x42, 0x03, 0x36, - 0x44, 0x43, 0x04, 0x36, 0x44, 0x44, 0x05, 0x36, 0x44, 0x45, 0x06, 0x36, 0x44, 0x46, 0x07, 0x36, - 0x44, 0x47, 0x08, 0x36, 0x44, 0x48, 0x09, 0x36, 0x44, 0x49, 0x0A, 0x36, 0x44, 0x4A, 0x0B, 0x36, - 0x44, 0x4B, 0x0C, 0x36, 0x44, 0x4C, 0x0D, 0x36, 0x44, 0x4D, 0x0E, 0x36, 0x44, 0x4E, 0x0F, 0x36, - 0x44, 0x4F, 0x87, 0xFF, 0x21, 0x00, 0x25, 0x44, 0x10, 0x36, 0x44, 0x50, 0x11, 0x36, 0x44, 0x51, - 0x12, 0x36, 0x44, 0x52, 0x13, 0x36, 0x44, 0x53, 0x14, 0x36, 0x44, 0x54, 0x15, 0x36, 0x44, 0x55, - 0x16, 0x36, 0x44, 0x56, 0x17, 0x36, 0x44, 0x57, 0x18, 0x36, 0x44, 0x58, 0x19, 0x36, 0x44, 0x59, - 0x1A, 0x36, 0x44, 0x5A, 0x1B, 0x36, 0x44, 0x5B, 0x1C, 0x36, 0x44, 0x5C, 0x1D, 0x36, 0x44, 0x5D, - 0x1E, 0x36, 0x44, 0x5E, 0x1F, 0x36, 0x44, 0x5F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0x46, - 0xB3, 0x60, 0x58, 0x4F, 0x22, 0x78, 0xFF, 0xFF, 0x03, 0x61, 0x7F, 0x67, 0x0B, 0x02, 0x00, 0xF0, - 0x1B, 0x60, 0xE0, 0x62, 0x04, 0x64, 0xA2, 0xDB, 0x5A, 0xD9, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x7F, 0x67, 0x02, 0x61, 0x11, 0x02, 0x1C, 0x60, 0x04, 0x62, 0x1A, 0x64, 0xA2, 0xDB, 0x00, 0x60, - 0x50, 0x63, 0x5A, 0xDD, 0xED, 0x60, 0xB9, 0x64, 0x80, 0xFB, 0x2D, 0xFF, 0xEB, 0x60, 0x84, 0x78, - 0xFF, 0xFF, 0x2A, 0xF3, 0x05, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x0F, 0x02, 0x1C, 0x60, 0x04, 0x62, 0x1C, 0x64, - 0xA2, 0xDB, 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, 0xED, 0x60, 0xD3, 0x64, 0x80, 0xFB, 0x2D, 0xFF, - 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x02, 0x61, 0x34, 0x02, 0x25, 0x45, 0x20, 0x44, 0x80, 0x2A, 0x35, 0x00, - 0xF1, 0x60, 0x00, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x01, 0x03, 0x29, 0x00, 0x21, 0x60, 0x74, 0x62, - 0xA2, 0xD1, 0x9A, 0xF3, 0x16, 0x60, 0xCC, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x25, 0x45, 0x1B, 0x60, - 0x52, 0x63, 0x01, 0x61, 0xBD, 0xD3, 0xBD, 0xD1, 0xD4, 0x80, 0xBD, 0xD3, 0xBD, 0xD5, 0xCD, 0x81, - 0x02, 0x03, 0x15, 0x03, 0xF7, 0x01, 0xA2, 0xFF, 0xA6, 0xD3, 0x40, 0x4C, 0x00, 0xA8, 0x67, 0x43, - 0x0C, 0x02, 0xA2, 0xDD, 0x42, 0x48, 0x64, 0x41, 0xB3, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x28, 0xDB, 0x02, 0x03, 0x2C, 0x58, 0xA3, 0xFF, 0x0C, 0x61, 0x03, 0x00, 0x04, 0x61, - 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xF1, 0x60, 0x02, 0x64, 0xD4, 0x80, - 0x7F, 0x67, 0x06, 0x63, 0xF8, 0x02, 0x31, 0x40, 0x20, 0x26, 0xF5, 0x01, 0x21, 0x60, 0x74, 0x62, - 0xA2, 0xD1, 0x9A, 0xF3, 0x16, 0x60, 0xCC, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x16, 0x60, 0xD0, 0x61, - 0x01, 0x64, 0xA1, 0xDB, 0xFF, 0xFF, 0xC4, 0xFE, 0xE5, 0x01, 0xC6, 0xFE, 0xE3, 0x01, 0x7E, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x02, 0x61, 0x3F, 0x02, 0x25, 0x45, 0xF8, 0x2B, 0x3B, 0x00, - 0x2E, 0xF5, 0x67, 0x44, 0xD4, 0x80, 0x17, 0x60, 0x6A, 0x63, 0x39, 0x03, 0x64, 0x61, 0x24, 0x44, - 0x01, 0x27, 0x29, 0x00, 0xA3, 0xFC, 0xA4, 0xF8, 0xBD, 0xD3, 0xA3, 0xD1, 0xD4, 0x80, 0xCD, 0x81, - 0x08, 0x24, 0x64, 0x58, 0x08, 0xA3, 0xF8, 0x02, 0x08, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xA3, 0xD1, - 0xFE, 0xA0, 0xFA, 0x60, 0x00, 0x64, 0xD0, 0x80, 0x14, 0x02, 0x13, 0x02, 0x04, 0xA3, 0xBE, 0xD3, - 0xBD, 0xD1, 0x0F, 0x18, 0xD4, 0x80, 0x0D, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, - 0x64, 0x41, 0xDD, 0x81, 0xE1, 0x81, 0xCB, 0x83, 0x46, 0x65, 0xF2, 0x60, 0x58, 0x4F, 0x4A, 0x78, - 0xFF, 0xFF, 0x00, 0x67, 0x0A, 0x00, 0xBD, 0xD3, 0xBE, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, - 0x64, 0x58, 0x08, 0xA3, 0xF8, 0x02, 0x04, 0x61, 0x7F, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0F, 0x64, - 0x23, 0xFA, 0x67, 0x44, 0x24, 0xFA, 0x62, 0x41, 0x3E, 0x60, 0x00, 0x65, 0x1A, 0x63, 0xEA, 0x60, - 0x88, 0x64, 0x65, 0x46, 0x58, 0xD0, 0x2E, 0xF5, 0x59, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x4B, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xE8, 0x84, 0xDC, 0x84, 0x23, 0xFA, 0xBF, 0xD1, - 0x4A, 0x65, 0x64, 0x43, 0xF2, 0x60, 0x58, 0x4F, 0x4A, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xE0, 0xA0, 0x20, 0x64, 0x01, 0x06, 0x25, 0xFA, 0x23, 0xF2, - 0xDF, 0xD1, 0xCC, 0x84, 0xE0, 0x85, 0x0B, 0x06, 0xBF, 0xD1, 0x64, 0x41, 0xD5, 0x80, 0x64, 0x43, - 0x01, 0x06, 0x65, 0x41, 0x4A, 0x65, 0xEF, 0x60, 0x58, 0x4F, 0x87, 0x78, 0xFF, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0xBC, 0xF3, 0x02, 0x63, 0x23, 0xFC, 0x07, 0xB4, 0x25, 0xFA, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x4B, 0xD3, 0xBF, 0xD3, 0x60, 0x41, 0xC9, 0x83, 0xE9, 0x81, 0xDD, 0x81, - 0xA3, 0xFA, 0xE0, 0x81, 0x3C, 0x60, 0x00, 0x67, 0x02, 0x24, 0x02, 0xA4, 0x60, 0x47, 0x40, 0x4B, - 0xC9, 0x81, 0x4A, 0x65, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF6, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, - 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x60, 0x47, 0x25, 0xFA, 0x00, 0x7E, 0x60, 0x47, - 0x01, 0x26, 0xDC, 0x84, 0x60, 0x41, 0xE8, 0x84, 0xD8, 0x84, 0x23, 0xFA, 0xAB, 0x01, 0xFC, 0xA3, - 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x00, 0x7F, 0x25, 0xFA, 0x60, 0x41, 0x01, 0x26, - 0xDD, 0x81, 0xE9, 0x84, 0xD8, 0x84, 0x23, 0xFA, 0x9D, 0x01, 0x23, 0xF2, 0x12, 0x60, 0xB8, 0x65, - 0x60, 0x41, 0x12, 0x60, 0x54, 0x63, 0xA3, 0xDB, 0xFF, 0xA1, 0x48, 0x64, 0x58, 0xD0, 0x7E, 0xA8, - 0x5B, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xFF, 0xA1, 0xD7, 0x80, 0x02, 0x03, 0x01, 0x03, - 0xF5, 0x01, 0x2E, 0xF5, 0x00, 0x60, 0x2F, 0x65, 0x25, 0xF2, 0x00, 0x63, 0xCC, 0x84, 0x03, 0xA3, - 0xFD, 0x05, 0x4A, 0x64, 0xD7, 0x80, 0x11, 0x60, 0xF0, 0x61, 0x2F, 0x05, 0xA1, 0xDD, 0xE3, 0x83, - 0xFE, 0xA3, 0x58, 0xD0, 0x7E, 0xA8, 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, - 0x00, 0x63, 0x59, 0xDD, 0x2E, 0xF5, 0x11, 0x60, 0xF0, 0x64, 0x25, 0xF0, 0xA0, 0xD3, 0xD3, 0x80, - 0x01, 0xB0, 0x04, 0x03, 0x01, 0xA4, 0x03, 0x03, 0xA2, 0xDB, 0x01, 0x00, 0xA2, 0xDD, 0x11, 0x60, - 0xF8, 0x63, 0x10, 0x60, 0x0A, 0x65, 0xBD, 0xD3, 0xBD, 0xD1, 0xE0, 0x84, 0xC4, 0x82, 0x10, 0x60, - 0x2A, 0x65, 0x07, 0x64, 0x64, 0x41, 0x5A, 0xDB, 0xD6, 0x80, 0xCD, 0x81, 0x06, 0x03, 0xFB, 0x02, - 0x25, 0xF2, 0x02, 0xA3, 0xCC, 0x84, 0xA2, 0xDA, 0xEC, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x12, 0x60, 0x54, 0x61, 0xA1, 0xD3, 0x23, 0xFA, 0xE0, 0x83, 0x4A, 0x65, 0x04, 0x02, 0x02, 0x63, - 0x23, 0xFC, 0xA5, 0xFC, 0x09, 0x00, 0xDB, 0x83, 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x11, 0x60, - 0xF0, 0x62, 0xA2, 0xD3, 0x00, 0x61, 0x02, 0xA4, 0xFE, 0xA0, 0x23, 0xFA, 0x1B, 0x03, 0xFA, 0xA4, - 0xFD, 0xA4, 0x01, 0xA1, 0xFD, 0x07, 0x61, 0x43, 0x23, 0xF2, 0x25, 0xFC, 0xE0, 0x83, 0x02, 0xA3, - 0x11, 0x60, 0xF0, 0x61, 0x00, 0x60, 0x4A, 0x64, 0x59, 0xD1, 0x58, 0xD8, 0x7E, 0x3A, 0x02, 0x00, - 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x25, 0xF2, 0x23, 0xF2, 0x01, 0xB0, 0xCC, 0x84, 0x04, 0x02, - 0x23, 0xFA, 0x02, 0x00, 0x00, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x41, 0x4B, - 0x65, 0x42, 0x80, 0x64, 0xD4, 0x85, 0x2B, 0x41, 0x00, 0xA1, 0x55, 0x8B, 0x0D, 0x03, 0x02, 0x04, - 0x65, 0x41, 0x02, 0x00, 0x00, 0x64, 0x40, 0x4B, 0xCA, 0x84, 0x58, 0xD0, 0xC9, 0x81, 0xBD, 0xD9, - 0xFC, 0x02, 0x00, 0xF4, 0x04, 0x65, 0xEC, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD3, - 0x02, 0x7C, 0xA0, 0xD3, 0x23, 0xF8, 0xDC, 0x84, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x02, 0x64, 0x23, 0xFA, 0x01, 0x64, 0x9D, 0xFE, 0x02, 0x28, 0x02, 0x64, 0x25, 0xFA, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x21, 0x60, 0x80, 0x62, 0xA2, 0xD3, 0x02, 0x7C, 0x23, 0xF8, 0x01, 0xB4, - 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0x02, 0x64, 0x23, 0xFA, - 0x64, 0x44, 0x7C, 0x5F, 0x60, 0x45, 0x64, 0x47, 0x7C, 0x5F, 0x89, 0xF1, 0x66, 0x41, 0xC0, 0x86, - 0xA5, 0xD2, 0x61, 0x46, 0x00, 0x63, 0x60, 0x40, 0x0A, 0x37, 0x01, 0x63, 0x14, 0x37, 0x02, 0x63, - 0x37, 0x37, 0x06, 0x63, 0x6E, 0x37, 0x0B, 0x63, 0x25, 0xFC, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x02, 0x64, 0x23, 0xFA, 0x88, 0xFF, 0x75, 0x44, 0x8D, 0xFF, 0xE8, 0x87, 0xE8, 0x84, 0xE8, 0x84, - 0x03, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF0, 0x21, 0x60, 0x7C, 0x65, - 0x23, 0xF2, 0xA5, 0xD9, 0x02, 0xA8, 0x64, 0x44, 0x07, 0x02, 0x00, 0xBC, 0xF2, 0xA4, 0x04, 0x03, - 0x03, 0x07, 0x1F, 0x60, 0xAA, 0x62, 0xA2, 0xD9, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x20, 0x63, - 0x20, 0x60, 0x0A, 0x61, 0x48, 0x64, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x25, 0xF0, 0x20, 0x64, - 0xD0, 0x81, 0xFF, 0xFF, 0x02, 0x07, 0x25, 0xFA, 0x0F, 0x00, 0x20, 0x60, 0x0E, 0x63, 0xC3, 0x83, - 0x01, 0x2A, 0x06, 0x00, 0xCF, 0x83, 0xA3, 0xD3, 0xCD, 0x81, 0x00, 0x7F, 0xBD, 0xDB, 0x04, 0x03, - 0x00, 0x64, 0xC9, 0x81, 0xBD, 0xDB, 0xFD, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, - 0x25, 0xF0, 0x01, 0x60, 0x70, 0x63, 0xA3, 0xD9, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, - 0xA5, 0xF0, 0xA3, 0xD1, 0xFF, 0xFF, 0x64, 0x5E, 0x00, 0x7F, 0x60, 0x41, 0x64, 0x47, 0x7C, 0x5F, - 0x89, 0xF1, 0x66, 0x43, 0xC0, 0x86, 0x65, 0x44, 0xA1, 0xDA, 0x63, 0x46, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0xFF, 0xFF, 0x64, 0x5E, 0x00, 0x7F, 0x60, 0x45, 0x64, 0x47, - 0x7C, 0x5F, 0x89, 0xF1, 0x66, 0x41, 0xC0, 0x86, 0x65, 0x44, 0xA0, 0xD2, 0x61, 0x46, 0x25, 0xFA, - 0x02, 0x64, 0x23, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, - 0x00, 0x67, 0x02, 0x02, 0x2D, 0xF9, 0x2C, 0xF9, 0x23, 0x58, 0xFF, 0xFF, 0x1F, 0x60, 0xA8, 0x61, - 0x23, 0xF2, 0x25, 0xF2, 0x02, 0xA8, 0x00, 0xA8, 0x09, 0x02, 0x07, 0x03, 0xD0, 0xA0, 0x30, 0x65, - 0x03, 0x04, 0xA7, 0xA0, 0x59, 0x65, 0x01, 0x06, 0x65, 0x44, 0xA1, 0xDB, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x04, 0x61, 0x0A, 0x00, 0x25, 0x60, 0x2C, 0x61, 0x01, 0x64, 0xA1, 0xDB, 0x04, 0x00, - 0x25, 0x60, 0x2C, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x06, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xEB, 0x60, - 0x84, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x46, 0x45, 0x02, 0xF0, - 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0x00, 0xF4, 0x01, 0xF2, 0x66, 0x5C, 0x25, 0x46, 0x56, 0x02, - 0x70, 0x27, 0x54, 0x00, 0x12, 0x64, 0x03, 0xFA, 0x04, 0xF8, 0x0E, 0xF2, 0x87, 0xFC, 0x8D, 0xFC, - 0x8E, 0xFC, 0xDA, 0x82, 0x16, 0x61, 0x00, 0x63, 0xC9, 0x81, 0x5A, 0xDC, 0xFD, 0x02, 0x60, 0x40, - 0xF0, 0x3B, 0x16, 0x00, 0x32, 0x44, 0x8F, 0xF3, 0x01, 0xB0, 0xF6, 0xA0, 0x08, 0x24, 0x2C, 0x05, - 0xDC, 0x83, 0xF0, 0x67, 0x0E, 0xFA, 0x1B, 0x60, 0xC4, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0x8F, 0xFD, 0x2B, 0xFF, 0xFE, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x4F, 0x00, - 0x90, 0xF3, 0x0A, 0x65, 0xD4, 0x80, 0xDC, 0x83, 0x17, 0x05, 0x90, 0xFD, 0x98, 0xFE, 0x04, 0x04, - 0x00, 0x7F, 0x08, 0x7E, 0x0E, 0xFA, 0x3B, 0xFF, 0x1B, 0x60, 0xB8, 0x64, 0x2B, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0x0E, 0xF2, 0x2B, 0xFF, 0x60, 0x40, 0x08, 0x26, 0xF7, 0xFE, - 0xFD, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x32, 0x00, 0x8C, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, 0xFF, 0xFF, - 0x0D, 0x04, 0x1B, 0x60, 0xD0, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xFC, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x21, 0x00, 0x46, 0x45, 0x00, 0x64, - 0x2B, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, - 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, - 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, 0x05, 0xFA, 0xB4, 0x60, 0x58, 0x4E, 0x48, 0x78, - 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0xFF, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0xD4, 0xFE, 0xA3, 0xFF, - 0x2D, 0x58, 0xFF, 0xFF, 0x1B, 0x60, 0xBE, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x0D, 0x00, 0x1B, 0x60, - 0xB2, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x18, 0x00, 0x1B, 0x60, 0xCA, 0x64, 0x40, 0x47, 0x58, 0x4F, - 0x03, 0x00, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x0B, 0x18, 0x60, 0x40, - 0x01, 0x2A, 0x08, 0x00, 0x1B, 0x60, 0xE0, 0x64, 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, 0x75, 0x78, - 0xFF, 0xFF, 0xF2, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x14, 0x18, 0x60, 0x40, - 0x01, 0x2A, 0x11, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x90, 0xF3, - 0x02, 0x02, 0xCC, 0x84, 0x90, 0xFB, 0x1B, 0x60, 0xE0, 0x64, 0x40, 0x4B, 0xF0, 0x60, 0x58, 0x4D, - 0x75, 0x78, 0xFF, 0xFF, 0xE9, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFB, 0x64, 0x3A, 0x42, 0x4A, 0xDB, - 0xA2, 0xFF, 0x93, 0xF3, 0x8F, 0xF3, 0xCC, 0x80, 0xFA, 0xA0, 0x01, 0x14, 0x1E, 0x05, 0xB3, 0x60, - 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x18, 0x03, 0xF0, 0x67, 0x0E, 0xFA, 0x1B, 0x60, - 0xE0, 0x62, 0x1B, 0x60, 0xC4, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xF6, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0x93, 0xF3, 0x8F, 0xF3, 0xCC, 0x83, - 0xDC, 0x84, 0x01, 0x15, 0x93, 0xFD, 0x8F, 0xFB, 0xD4, 0xFE, 0x92, 0xF3, 0x90, 0xF3, 0x00, 0xA8, - 0x91, 0xF1, 0x03, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x27, 0x05, 0xB3, 0x60, 0x58, 0x4D, 0x4E, 0x78, - 0xFF, 0xFF, 0xA2, 0xFF, 0x21, 0x03, 0x00, 0x63, 0x92, 0xF3, 0x0E, 0xFC, 0xCC, 0x84, 0xFF, 0x3A, - 0x92, 0xFB, 0x98, 0xFE, 0x03, 0x04, 0x08, 0xBB, 0x0E, 0xFC, 0x3B, 0xFF, 0x1B, 0x60, 0xE0, 0x62, - 0x1B, 0x60, 0xB8, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xF7, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0x90, 0xF3, 0x0E, 0xF2, 0xDC, 0x83, 0x08, 0xB0, - 0x90, 0xFD, 0x08, 0x28, 0xF7, 0xFE, 0xD4, 0xFE, 0xA3, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, - 0xB9, 0xFE, 0x13, 0xFF, 0x24, 0x40, 0x80, 0x2B, 0x0B, 0x00, 0xA2, 0xFF, 0x25, 0x46, 0x09, 0xF4, - 0x0E, 0xF2, 0x05, 0x18, 0x08, 0xBC, 0x0E, 0xFA, 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0x00, 0xD8, 0xFE, - 0xA3, 0xFF, 0x25, 0x46, 0x3E, 0xF2, 0x00, 0xF4, 0x08, 0xF0, 0x25, 0x46, 0x06, 0xB4, 0xFF, 0x7F, - 0x10, 0xBC, 0x06, 0x26, 0xFD, 0x7F, 0x0E, 0xFA, 0x3E, 0xF2, 0x3F, 0xF2, 0x60, 0x41, 0x08, 0x2A, - 0x64, 0x47, 0x3F, 0xFA, 0x60, 0x45, 0x1F, 0x60, 0x62, 0x62, 0xA2, 0xD3, 0xA3, 0xFC, 0xAB, 0xFC, - 0x91, 0xFC, 0xD4, 0x80, 0xE0, 0x60, 0xC1, 0x65, 0xA5, 0x80, 0x01, 0x04, 0x07, 0x03, 0x23, 0xF0, - 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xF2, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xF4, 0x60, 0x58, 0x4F, - 0x2D, 0x78, 0xFF, 0xFF, 0x14, 0x04, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x98, 0xF1, - 0x1E, 0x60, 0xFC, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x02, 0x00, 0x20, 0x60, 0x00, 0x75, 0x46, 0x00, 0x3E, 0xF0, - 0x89, 0xF1, 0x64, 0x47, 0x07, 0xB4, 0x07, 0x36, 0x3B, 0x00, 0x04, 0x03, 0xCC, 0x84, 0xE0, 0x84, - 0xC0, 0x83, 0x2D, 0x00, 0x2C, 0xF2, 0x88, 0xF1, 0x01, 0xB0, 0x64, 0x43, 0x35, 0x02, 0x2E, 0xF2, - 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x2C, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x09, 0x00, 0x66, 0x45, - 0x63, 0x46, 0x06, 0xF0, 0x65, 0x46, 0x64, 0x44, 0x0C, 0x26, 0x02, 0x00, 0x02, 0x26, 0x04, 0x00, - 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xFC, 0x23, 0xF2, 0xFF, 0xFF, 0x10, 0x1B, - 0x1B, 0x60, 0xE0, 0x62, 0x1B, 0x60, 0x9A, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC8, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x0F, 0x00, - 0x1B, 0x60, 0xE0, 0x62, 0x1B, 0x60, 0xAC, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xCE, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0xEB, 0x60, - 0x84, 0x78, 0xFF, 0xFF, 0xCB, 0x84, 0xC9, 0x83, 0xFF, 0xFF, 0x08, 0x04, 0x58, 0xD1, 0xA5, 0xD8, - 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x2F, 0x58, 0xFF, 0xFF, - 0x25, 0xF0, 0x21, 0x60, 0x2C, 0x62, 0xA2, 0xD9, 0x19, 0x00, 0x21, 0x60, 0x80, 0x64, 0xA0, 0xD1, - 0x7F, 0xF9, 0x0C, 0x60, 0x38, 0x62, 0x40, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x64, 0x40, - 0x01, 0x2A, 0x0C, 0x00, 0x04, 0x65, 0x0C, 0x60, 0x38, 0x61, 0x48, 0x64, 0x3E, 0x63, 0x7C, 0xA8, - 0x58, 0xD0, 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x21, 0x60, 0x2C, 0x62, - 0xA2, 0xD1, 0x0D, 0x60, 0x1C, 0x65, 0x02, 0xFE, 0x64, 0x44, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x87, - 0x60, 0x41, 0x64, 0x44, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x84, 0x3E, 0xFB, 0x60, 0x42, 0x61, 0x44, - 0x03, 0xA2, 0x60, 0xFE, 0xA2, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x44, 0x0C, 0x60, 0x3A, 0x65, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x84, 0x40, 0xFB, 0xFF, 0xFF, 0x00, 0x67, - 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x21, 0x60, 0x80, 0x64, 0xA0, 0xD1, 0x7F, 0xF9, 0x00, 0x64, - 0x40, 0x41, 0x64, 0x40, 0x01, 0x2A, 0xA6, 0x00, 0x4A, 0x64, 0xA0, 0xD2, 0xFF, 0xFF, 0x40, 0x42, - 0x80, 0x2B, 0x04, 0x00, 0xFF, 0xB4, 0x40, 0x42, 0x01, 0x64, 0x40, 0x41, 0x88, 0xF3, 0x46, 0x4B, - 0x87, 0xF3, 0x60, 0x46, 0xE0, 0x83, 0xAB, 0x46, 0x26, 0xF0, 0xAB, 0x46, 0x55, 0xF8, 0xAB, 0x46, - 0x27, 0xF0, 0xAB, 0x46, 0x56, 0xF8, 0xAB, 0x46, 0x28, 0xF0, 0xAB, 0x46, 0x57, 0xF8, 0x66, 0x44, - 0x02, 0xA6, 0xF1, 0x1F, 0x88, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xAB, 0x46, 0x0C, 0x60, 0x7A, 0x65, - 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0xC9, 0x81, - 0x52, 0x64, 0x0E, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, - 0xAB, 0x46, 0xF0, 0xA1, 0x6E, 0x64, 0x0E, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, - 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x0C, 0x60, 0xDC, 0x65, 0xC4, 0x81, - 0x60, 0x45, 0xC9, 0x81, 0x62, 0x64, 0x06, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, - 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF8, 0xA1, 0xAE, 0x64, 0x06, 0x63, 0x59, 0xD1, 0x58, 0xD8, - 0xFD, 0x1F, 0xAB, 0x46, 0x65, 0x44, 0x0C, 0x60, 0xFC, 0x65, 0xC4, 0x81, 0xC9, 0x81, 0x6A, 0x64, - 0x06, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x85, - 0xC4, 0x84, 0x0C, 0x60, 0xC2, 0x65, 0xC4, 0x81, 0x72, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, - 0xFD, 0x1F, 0xAB, 0x46, 0x21, 0x44, 0x01, 0x2A, 0x06, 0x00, 0xFA, 0xA1, 0x88, 0x64, 0x04, 0x63, - 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0x37, 0xF0, 0x21, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x22, 0x44, - 0x3D, 0xFB, 0x60, 0x41, 0x02, 0xFE, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x84, 0x3C, 0xFB, 0x0C, 0x60, - 0xBE, 0x63, 0x88, 0xFF, 0xCD, 0x81, 0x06, 0xA3, 0xFD, 0x0D, 0x8D, 0xFF, 0x3B, 0xFD, 0x64, 0x47, - 0x80, 0xBF, 0x60, 0x5C, 0x22, 0x43, 0x80, 0x61, 0x88, 0xFF, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, - 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0xB1, 0x84, 0x37, 0xFA, 0x87, 0xF3, 0xFF, 0xFF, 0xCC, 0x83, - 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0x37, 0xF0, 0x66, 0x44, 0xB1, 0x9C, 0x37, 0xF8, 0x02, 0xA6, - 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, - 0x02, 0xA8, 0x00, 0x67, 0x24, 0x02, 0x3D, 0xF1, 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, 0xD0, 0x80, - 0x88, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xB7, 0xF4, 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, 0xEB, 0x83, - 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, - 0x9D, 0x85, 0xA7, 0x83, 0x37, 0xFC, 0x87, 0xF3, 0xFF, 0xFF, 0xCC, 0x83, 0xE3, 0x83, 0x66, 0x44, - 0x02, 0xA6, 0xB7, 0xF2, 0x66, 0x44, 0xA5, 0x81, 0xB7, 0xFA, 0x02, 0xA6, 0xFA, 0x1F, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x11, 0x64, 0x23, 0xFA, 0x25, 0x44, 0x24, 0xFA, 0x04, 0x64, 0x40, 0x4B, - 0x62, 0x41, 0x0C, 0x60, 0xC2, 0x64, 0x04, 0x63, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x2B, 0x43, - 0x00, 0x7C, 0x59, 0xD8, 0x4F, 0x8B, 0x06, 0xA4, 0xF6, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x21, 0x60, 0x80, 0x64, 0xA0, 0xD1, 0x7F, 0xF9, 0x64, 0x40, 0x01, 0x2A, 0x4E, 0x00, 0x27, 0xF2, - 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x2A, 0x00, 0x43, 0x4B, - 0xAB, 0x46, 0x37, 0xF2, 0x80, 0x60, 0x30, 0x7C, 0xB0, 0x84, 0xA2, 0xDA, 0x4E, 0x61, 0x6E, 0x64, - 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x88, 0x64, 0x04, 0x63, - 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, 0x98, 0x64, 0x04, 0x63, - 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, 0xAE, 0x64, 0x0E, 0x63, - 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x21, 0x60, 0x80, 0x64, 0xA0, 0xD1, - 0x7F, 0xF9, 0x64, 0x40, 0x01, 0x2A, 0x31, 0x00, 0x27, 0xF2, 0x12, 0x60, 0xCE, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x88, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x0D, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x37, 0xF2, 0x80, 0x60, - 0x30, 0x61, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDA, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x3E, 0xF2, 0xAC, 0xF1, 0x08, 0xB0, - 0x19, 0xF8, 0x4A, 0x02, 0x07, 0x23, 0x2B, 0x00, 0x60, 0x47, 0x07, 0xB4, 0x89, 0xF1, 0xCC, 0x84, - 0xE0, 0x84, 0x40, 0x8A, 0xAA, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x05, 0xF2, 0x60, 0x43, 0xAA, 0x46, - 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, - 0x31, 0xF8, 0x46, 0x4A, 0x00, 0xF4, 0x02, 0xF2, 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, - 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, 0xAA, 0x46, 0x05, 0xF2, 0x06, 0xF0, 0x07, 0xF2, 0x60, 0x43, - 0xAA, 0x46, 0x36, 0xFC, 0x37, 0xF8, 0x38, 0xFA, 0x03, 0x60, 0x08, 0x64, 0x1C, 0x00, 0x67, 0xF1, - 0x2F, 0xF8, 0x68, 0xF1, 0x30, 0xF8, 0x69, 0xF1, 0x31, 0xF8, 0x46, 0x4A, 0x00, 0xF4, 0x02, 0xF2, - 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0xAA, 0x46, - 0x05, 0xF2, 0x06, 0xF0, 0x07, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, - 0x02, 0x60, 0x08, 0x64, 0x00, 0x00, 0x2A, 0xFA, 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x28, 0xF3, - 0xFF, 0xFF, 0x60, 0x47, 0x0F, 0xB4, 0x59, 0x00, 0xFF, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x1C, 0x60, - 0x04, 0x65, 0x04, 0x64, 0xA5, 0xDB, 0x12, 0x00, 0x1C, 0x60, 0x04, 0x65, 0x0C, 0x64, 0xA5, 0xDB, - 0x0D, 0x00, 0x1C, 0x60, 0x04, 0x65, 0x06, 0x64, 0xA5, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x04, 0x65, 0x08, 0x64, 0xA5, 0xDB, 0xF4, 0x60, 0xD9, 0x64, - 0x80, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0x29, 0xF3, 0x65, 0xFB, - 0x83, 0xFB, 0x02, 0x60, 0xEE, 0x64, 0x82, 0xFB, 0x07, 0x64, 0x84, 0xFB, 0xF4, 0x60, 0xD9, 0x64, - 0x80, 0xFB, 0xFF, 0xFF, 0xDF, 0xFE, 0x00, 0x64, 0x19, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, - 0xAF, 0x60, 0xFD, 0x63, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0xF4, 0x60, 0xC6, 0x63, - 0x80, 0xFD, 0xFF, 0xFF, 0x1A, 0xFF, 0xEB, 0x60, 0x84, 0x78, 0xFF, 0xFF, 0xA7, 0x60, 0x9B, 0x63, - 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0x29, 0xF5, 0x1B, 0x60, 0xE0, 0x63, 0x1B, 0x60, - 0xB2, 0x64, 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0x02, 0x64, 0xA3, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xF9, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xA7, 0x01, 0x00, 0x36, 0xA8, 0x01, 0x01, 0x36, - 0xAB, 0x01, 0x02, 0x36, 0xAE, 0x01, 0x03, 0x36, 0xB5, 0x01, 0x04, 0x36, 0xD1, 0x01, 0x05, 0x36, - 0xCF, 0x01, 0x06, 0x36, 0xF1, 0x01, 0x07, 0x36, 0xCB, 0x01, 0x08, 0x36, 0xB7, 0x01, 0x09, 0x36, - 0x0C, 0x00, 0x0A, 0x36, 0x0D, 0x00, 0x0B, 0x36, 0x0E, 0x00, 0x0C, 0x36, 0x17, 0x00, 0x0D, 0x36, - 0x0D, 0x00, 0x0E, 0x36, 0x1E, 0x00, 0x0F, 0x36, 0x32, 0x00, 0x02, 0x60, 0x00, 0x64, 0x08, 0x00, - 0x04, 0x60, 0x00, 0x64, 0x05, 0x00, 0x00, 0x60, 0x01, 0x64, 0x02, 0x00, 0x20, 0x60, 0x00, 0x64, - 0x32, 0x45, 0xB4, 0x85, 0x45, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xB0, 0x60, 0xC1, 0x63, - 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x3F, 0x40, 0x02, 0x2B, 0x05, 0x00, 0x90, 0x60, 0x00, 0xE8, 0xAF, 0x60, 0xFD, 0x63, - 0x04, 0x00, 0x91, 0x60, 0x00, 0xE8, 0xB0, 0x60, 0xAB, 0x63, 0x28, 0xE8, 0x0C, 0x60, 0x16, 0x64, - 0xA0, 0xDD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x91, 0x60, - 0x00, 0xE8, 0x28, 0xE8, 0xD9, 0x60, 0xFE, 0x64, 0x32, 0x45, 0xA4, 0x85, 0x45, 0x52, 0x99, 0xFF, - 0xA5, 0x4F, 0xFF, 0xB4, 0x07, 0xFB, 0x98, 0xFF, 0xA7, 0x60, 0x9B, 0x63, 0x0C, 0x60, 0x16, 0x64, - 0xA0, 0xDD, 0x62, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x42, 0x6F, 0x6F, 0x74, 0x63, 0x6F, - 0x64, 0x65, 0x20, 0x21, 0x21, 0x20, 0x20, 0x00, 0x53, 0x54, 0x41, 0x2F, 0x41, 0x50, 0x20, 0x46, - 0x75, 0x6E, 0x63, 0x27, 0x73, 0x00, 0x20, 0x00, 0x02, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x06, 0x00, - 0x07, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, 0x01, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x40, 0x00, 0x32, 0x00, - 0x36, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x40, 0x00, 0x3B, 0x00, 0x40, 0x00, 0x17, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x1E, 0x00, 0x0C, 0x00, 0x08, 0x00, - 0x57, 0x00, 0x4D, 0x00, 0x57, 0x00, 0x2B, 0x00, 0x19, 0x00, 0x08, 0x00, 0x5D, 0x00, 0x53, 0x00, - 0x5D, 0x00, 0x31, 0x00, 0x1F, 0x00, 0x08, 0x00, - -}; /* fw_image_4_data */ - -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 */ - }, - { 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 */ - (hcf_8 *)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 */ - (hcf_8 *)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 */ - (hcf_8 *)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 */ - (hcf_8 *)fw_image_4_data - }, - { - 5, - CFG_PROG, - CFG_PROG_STOP, /* mode*/ - 0000, - 0x000F1297, /* Start execution address */ - }, - { 0000, 0000, 0000, 0000, 00000000, 0000, 00000000} -}; - -static const CFG_RANGE20_STRCT fw_image_infocompat[] = { - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_FW_SUP_RANGE, - COMP_ROLE_SUPL, - COMP_ID_APF, - { - { 2, 2, 4 } /* variant, bottom, top */ - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_MFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_MFI, - { - { 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)), - CFG_CFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_CFI, - { - { 2, 1, 2 } /* variant, bottom, top */ - } - }, - { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } /* endsentinel */ -}; - -memimage fw_image = { - "FUPU7D37dhfwci\001C", /* signature, , C/Bin type */ - (CFG_PROG_STRCT *) fw_image_code, - 0x000F1297, - 00000000, /* (dummy) pdaplug */ - 00000000, /* (dummy) priplug */ - (CFG_RANGE20_STRCT *) fw_image_infocompat, - (CFG_IDENTITY_STRCT *) fw_image_infoidentity, -}; - diff --git a/drivers/staging/wlags49_h2/ap_h25.c b/drivers/staging/wlags49_h2/ap_h25.c deleted file mode 100644 index d3a0faa3ab97..000000000000 --- a/drivers/staging/wlags49_h2/ap_h25.c +++ /dev/null @@ -1,4094 +0,0 @@ -/* - * File: ap_h54.124 - * - * Abstract: This file contains memory image 'fw_image'. - * - * Contents: Total size of the memory image: 63146 bytes. - * Total number of blocks: 4 blocks. - * Block 1 : load address 00000060, 328 bytes. - * Block 2 : load address 00000C16, 9266 bytes. - * Block 3 : load address 001E3048, 6476 bytes. - * Block 4 : load address 001F4000, 47076 bytes. - * - * Identity: component id: 32 (variant 3) version 1.24 - * - * Compatibility: - * supplying interface 8 (variant 4) : 1 - 1 - * acting on interface 1 (variant 7) : 3 - 3 - * acting on interface 1 (variant 8) : 1 - 1 - * acting on interface 2 (variant 4) : 1 - 2 - * - * Generated: by g:\fw\fupu3.exe version 4.26 - * - * Commandline: g:\fw\fupu3.exe /f=4 /n=fw_image /i=t3012400.hex - */ - - -#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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x0C, 0x00, 0x00, - 0x02, 0x0D, 0x00, 0x00, 0x02, 0x0D, 0xD6, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, - 0x00, 0x00, 0xFF, 0x07, 0x02, 0x00, 0x64, 0x00, 0x64, 0x00, 0x10, 0x27, 0x10, 0x27, 0x14, 0x00, - 0xD0, 0x07, 0xD0, 0x07, 0x10, 0x27, 0x2F, 0x00, 0x32, 0x00, 0x32, 0x00, 0x05, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x10, 0x27, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x13, 0x00, 0x07, 0x00, 0x03, 0x00, - 0x32, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x09, 0x2B, 0x09, 0x2B, 0x09, 0xFF, 0x0F, - 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_1_data */ - -static const hcf_8 fw_image_2_data[] = { - 0x7C, 0xA4, 0x00, 0x16, 0x08, 0x40, 0x0F, 0xD2, 0xE1, 0x28, 0xA5, 0x7C, 0x50, 0x30, 0xF1, 0x84, - 0x44, 0x08, 0xAB, 0xAE, 0xA5, 0xB8, 0xFC, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC6, 0x84, 0xF8, - 0x99, 0xEE, 0x8D, 0xF6, 0x0D, 0xFF, 0xBD, 0xD6, 0xB1, 0xDE, 0x54, 0x91, 0x50, 0x60, 0x03, 0x02, - 0xA9, 0xCE, 0x7D, 0x56, 0x19, 0xE7, 0x62, 0xB5, 0xE6, 0x4D, 0x9A, 0xEC, 0x45, 0x8F, 0x9D, 0x1F, - 0x40, 0x89, 0x87, 0xFA, 0x15, 0xEF, 0xEB, 0xB2, 0xC9, 0x8E, 0x0B, 0xFB, 0xEC, 0x41, 0x67, 0xB3, - 0xFD, 0x5F, 0xEA, 0x45, 0xBF, 0x23, 0xF7, 0x53, 0x96, 0xE4, 0x5B, 0x9B, 0xC2, 0x75, 0x1C, 0xE1, - 0xAE, 0x3D, 0x6A, 0x4C, 0x5A, 0x6C, 0x41, 0x7E, 0x02, 0xF5, 0x4F, 0x83, 0x5C, 0x68, 0xF4, 0x51, - 0x34, 0xD1, 0x08, 0xF9, 0x93, 0xE2, 0x73, 0xAB, 0x53, 0x62, 0x3F, 0x2A, 0x0C, 0x08, 0x52, 0x95, - 0x65, 0x46, 0x5E, 0x9D, 0x28, 0x30, 0xA1, 0x37, 0x0F, 0x0A, 0xB5, 0x2F, 0x09, 0x0E, 0x36, 0x24, - 0x9B, 0x1B, 0x3D, 0xDF, 0x26, 0xCD, 0x69, 0x4E, 0xCD, 0x7F, 0x9F, 0xEA, 0x1B, 0x12, 0x9E, 0x1D, - 0x74, 0x58, 0x2E, 0x34, 0x2D, 0x36, 0xB2, 0xDC, 0xEE, 0xB4, 0xFB, 0x5B, 0xF6, 0xA4, 0x4D, 0x76, - 0x61, 0xB7, 0xCE, 0x7D, 0x7B, 0x52, 0x3E, 0xDD, 0x71, 0x5E, 0x97, 0x13, 0xF5, 0xA6, 0x68, 0xB9, - 0x00, 0x00, 0x2C, 0xC1, 0x60, 0x40, 0x1F, 0xE3, 0xC8, 0x79, 0xED, 0xB6, 0xBE, 0xD4, 0x46, 0x8D, - 0xD9, 0x67, 0x4B, 0x72, 0xDE, 0x94, 0xD4, 0x98, 0xE8, 0xB0, 0x4A, 0x85, 0x6B, 0xBB, 0x2A, 0xC5, - 0xE5, 0x4F, 0x16, 0xED, 0xC5, 0x86, 0xD7, 0x9A, 0x55, 0x66, 0x94, 0x11, 0xCF, 0x8A, 0x10, 0xE9, - 0x06, 0x04, 0x81, 0xFE, 0xF0, 0xA0, 0x44, 0x78, 0xBA, 0x25, 0xE3, 0x4B, 0xF3, 0xA2, 0xFE, 0x5D, - 0xC0, 0x80, 0x8A, 0x05, 0xAD, 0x3F, 0xBC, 0x21, 0x48, 0x70, 0x04, 0xF1, 0xDF, 0x63, 0xC1, 0x77, - 0x75, 0xAF, 0x63, 0x42, 0x30, 0x20, 0x1A, 0xE5, 0x0E, 0xFD, 0x6D, 0xBF, 0x4C, 0x81, 0x14, 0x18, - 0x35, 0x26, 0x2F, 0xC3, 0xE1, 0xBE, 0xA2, 0x35, 0xCC, 0x88, 0x39, 0x2E, 0x57, 0x93, 0xF2, 0x55, - 0x82, 0xFC, 0x47, 0x7A, 0xAC, 0xC8, 0xE7, 0xBA, 0x2B, 0x32, 0x95, 0xE6, 0xA0, 0xC0, 0x98, 0x19, - 0xD1, 0x9E, 0x7F, 0xA3, 0x66, 0x44, 0x7E, 0x54, 0xAB, 0x3B, 0x83, 0x0B, 0xCA, 0x8C, 0x29, 0xC7, - 0xD3, 0x6B, 0x3C, 0x28, 0x79, 0xA7, 0xE2, 0xBC, 0x1D, 0x16, 0x76, 0xAD, 0x3B, 0xDB, 0x56, 0x64, - 0x4E, 0x74, 0x1E, 0x14, 0xDB, 0x92, 0x0A, 0x0C, 0x6C, 0x48, 0xE4, 0xB8, 0x5D, 0x9F, 0x6E, 0xBD, - 0xEF, 0x43, 0xA6, 0xC4, 0xA8, 0x39, 0xA4, 0x31, 0x37, 0xD3, 0x8B, 0xF2, 0x32, 0xD5, 0x43, 0x8B, - 0x59, 0x6E, 0xB7, 0xDA, 0x8C, 0x01, 0x64, 0xB1, 0xD2, 0x9C, 0xE0, 0x49, 0xB4, 0xD8, 0xFA, 0xAC, - 0x07, 0xF3, 0x25, 0xCF, 0xAF, 0xCA, 0x8E, 0xF4, 0xE9, 0x47, 0x18, 0x10, 0xD5, 0x6F, 0x88, 0xF0, - 0x6F, 0x4A, 0x72, 0x5C, 0x24, 0x38, 0xF1, 0x57, 0xC7, 0x73, 0x51, 0x97, 0x23, 0xCB, 0x7C, 0xA1, - 0x9C, 0xE8, 0x21, 0x3E, 0xDD, 0x96, 0xDC, 0x61, 0x86, 0x0D, 0x85, 0x0F, 0x90, 0xE0, 0x42, 0x7C, - 0xC4, 0x71, 0xAA, 0xCC, 0xD8, 0x90, 0x05, 0x06, 0x01, 0xF7, 0x12, 0x1C, 0xA3, 0xC2, 0x5F, 0x6A, - 0xF9, 0xAE, 0xD0, 0x69, 0x91, 0x17, 0x58, 0x99, 0x27, 0x3A, 0xB9, 0x27, 0x38, 0xD9, 0x13, 0xEB, - 0xB3, 0x2B, 0x33, 0x22, 0xBB, 0xD2, 0x70, 0xA9, 0x89, 0x07, 0xA7, 0x33, 0xB6, 0x2D, 0x22, 0x3C, - 0x92, 0x15, 0x20, 0xC9, 0x49, 0x87, 0xFF, 0xAA, 0x78, 0x50, 0x7A, 0xA5, 0x8F, 0x03, 0xF8, 0x59, - 0x80, 0x09, 0x17, 0x1A, 0xDA, 0x65, 0x31, 0xD7, 0xC6, 0x84, 0xB8, 0xD0, 0xC3, 0x82, 0xB0, 0x29, - 0x77, 0x5A, 0x11, 0x1E, 0xCB, 0x7B, 0xFC, 0xA8, 0xD6, 0x6D, 0x3A, 0x2C, 0x00, 0x30, 0x00, 0x31, - 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3A, - 0x00, 0x3B, 0x00, 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x3F, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x21, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x20, 0x03, 0xE0, 0x01, 0x40, 0x01, 0x20, 0x03, 0xE0, 0x01, - 0x40, 0x01, 0x18, 0x08, 0xF0, 0x3F, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x02, 0x14, 0x05, 0x32, 0x0B, 0x37, - 0x08, 0x50, 0x0B, 0x6E, 0x02, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x16, 0x00, 0x0C, 0x00, 0x12, 0x00, - 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x39, 0x00, 0x20, 0x00, 0x39, 0x00, - 0x39, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xA4, 0x10, 0xF2, 0x10, 0xAA, 0x10, 0xEC, 0x10, 0xB0, 0x10, 0xE6, 0x10, 0xB6, 0x10, - 0xE0, 0x10, 0xBC, 0x10, 0xDA, 0x10, 0xC2, 0x10, 0xD4, 0x10, 0xC8, 0x10, 0xCE, 0x10, 0x07, 0x01, - 0x00, 0x00, 0x16, 0x22, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x16, 0x26, 0x00, 0x04, 0x09, 0x01, - 0x00, 0x00, 0x16, 0x2A, 0x00, 0x04, 0x0A, 0x01, 0x00, 0x00, 0x16, 0x2E, 0x00, 0x04, 0x0B, 0x01, - 0x00, 0x00, 0x10, 0x24, 0x04, 0x04, 0x0C, 0x01, 0x00, 0x00, 0x10, 0x28, 0x04, 0x04, 0x0D, 0x01, - 0x00, 0x00, 0x10, 0x2C, 0x04, 0x04, 0x0E, 0x01, 0x00, 0x00, 0x10, 0x30, 0x04, 0x04, 0x0F, 0x01, - 0x00, 0x00, 0x14, 0x34, 0x08, 0x84, 0x10, 0x01, 0x00, 0x00, 0x14, 0x38, 0x08, 0x84, 0x11, 0x01, - 0x00, 0x00, 0x14, 0x3C, 0x08, 0x84, 0x12, 0x01, 0x00, 0x00, 0x14, 0x40, 0x08, 0x84, 0x13, 0x01, - 0x00, 0x00, 0x17, 0x64, 0x0C, 0x8B, 0x14, 0x01, 0x00, 0x00, 0x17, 0x68, 0x0C, 0x8B, 0x15, 0x01, - 0x00, 0x00, 0x17, 0x6C, 0x0C, 0x8B, 0x16, 0x01, 0x00, 0x00, 0x17, 0x70, 0x0C, 0x8B, 0x17, 0x01, - 0x00, 0x00, 0x17, 0x74, 0x0C, 0x8B, 0x18, 0x01, 0x00, 0x00, 0x17, 0x78, 0x0C, 0x8B, 0x19, 0x01, - 0x00, 0x00, 0x17, 0x7C, 0x0C, 0x8B, 0x1A, 0x01, 0x00, 0x00, 0x17, 0x80, 0x0C, 0x8B, 0x1B, 0x01, - 0x00, 0x00, 0x17, 0x84, 0x0C, 0x8B, 0x1C, 0x01, 0x00, 0x00, 0x17, 0x88, 0x0C, 0x8B, 0x1D, 0x01, - 0x00, 0x00, 0x17, 0x8C, 0x0C, 0x8B, 0x1E, 0x01, 0x00, 0x00, 0x0E, 0x95, 0x17, 0x04, 0x1F, 0x01, - 0x00, 0x00, 0x0E, 0x99, 0x17, 0x04, 0x20, 0x01, 0x00, 0x00, 0x0E, 0x9D, 0x17, 0x04, 0x21, 0x01, - 0x00, 0x00, 0x0E, 0xA1, 0x17, 0x04, 0x22, 0x01, 0x00, 0x00, 0x0E, 0xA5, 0x00, 0x00, 0x14, 0x11, - 0x34, 0x11, 0x54, 0x11, 0x74, 0x11, 0xCC, 0x11, 0x1C, 0x11, 0x3C, 0x11, 0x5C, 0x11, 0x7C, 0x11, - 0xD4, 0x11, 0x24, 0x11, 0x44, 0x11, 0x64, 0x11, 0x84, 0x11, 0xDC, 0x11, 0x2C, 0x11, 0x4C, 0x11, - 0x6C, 0x11, 0x8C, 0x11, 0xE4, 0x11, 0x94, 0x11, 0x9C, 0x11, 0xA4, 0x11, 0xAC, 0x11, 0xB4, 0x11, - 0xBC, 0x11, 0xC4, 0x11, 0xEC, 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x10, 0x10, 0x10, 0x10, - 0x17, 0x17, 0x17, 0x17, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x11, 0x11, 0x11, 0x11, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x16, 0x16, 0x16, 0x16, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, - 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0A, 0x0A, 0x0A, - 0x0A, 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x10, 0x10, 0x10, 0x10, 0x7F, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x9D, 0x9D, 0xA1, 0xAA, 0x10, 0x10, - 0x9D, 0x9D, 0x08, 0x02, 0x06, 0x00, 0xA5, 0xA5, 0xAA, 0xAA, 0x17, 0x17, 0xA2, 0xA2, 0x15, 0x05, - 0x07, 0x00, 0xAA, 0xAA, 0xB4, 0xB4, 0x1C, 0x1C, 0xA7, 0xA7, 0x1C, 0x0A, 0x08, 0x00, 0xB7, 0xB7, - 0xC1, 0xC1, 0x09, 0x09, 0xB4, 0xB4, 0x29, 0x17, 0x08, 0x00, 0xBD, 0xBD, 0xC7, 0xC7, 0x0F, 0x0F, - 0xBA, 0xBA, 0x2F, 0x1D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x17, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE4, 0xF0, 0xFD, 0xF0, 0x1F, 0xF1, 0x60, 0xF6, 0x9B, 0xF0, 0x79, 0xF6, 0x9B, 0xF0, 0x9B, 0xF0, - 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0xCC, 0xF7, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0x9B, 0xF0, 0x15, 0xF3, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0x9B, 0xF0, 0x66, 0xF3, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0xE3, 0xF2, 0xFE, 0xF2, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, 0x9B, 0xF0, - 0xB4, 0x1C, 0x59, 0xF1, 0x6C, 0xF1, 0x1C, 0xF2, 0x20, 0xF2, 0x9B, 0xF0, 0x9B, 0xF0, 0xCF, 0xF2, - 0x64, 0xE6, 0x3E, 0xE6, 0x92, 0xE6, 0xE1, 0xE6, 0xA9, 0xE7, 0xCF, 0xE7, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xF1, 0x35, 0xF1, 0x5D, 0xF6, 0x5D, 0xF6, 0x6D, 0xF6, 0x86, 0xF6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, 0xC0, 0xF3, 0xF2, 0xF5, 0x5A, 0x00, 0x02, 0x00, 0xF9, 0xFF, - 0xC0, 0xF3, 0xD6, 0xF3, 0xCA, 0x00, 0x02, 0x00, 0xF7, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xB0, 0x26, - 0x06, 0x00, 0xF0, 0xFF, 0xC0, 0xF3, 0xAA, 0xF3, 0x00, 0x00, 0x00, 0x02, 0xF6, 0xFF, 0xC0, 0xF3, - 0xD6, 0xF3, 0x6C, 0x00, 0x02, 0x00, 0xF4, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0x68, 0x01, 0x02, 0x00, - 0xF5, 0xFF, 0xC0, 0xF3, 0xFB, 0xF5, 0xA2, 0x26, 0x02, 0x00, 0xED, 0xFF, 0xC0, 0xF3, 0x0D, 0xF6, - 0x9E, 0x2B, 0x02, 0x00, 0xEC, 0xFF, 0xC0, 0xF3, 0x3B, 0xF6, 0xA0, 0x2B, 0x02, 0x00, 0xEB, 0xFF, - 0xC0, 0xF3, 0x41, 0xF6, 0xA2, 0x2B, 0x02, 0x00, 0xEE, 0xFF, 0xC0, 0xF3, 0x47, 0xF6, 0xD6, 0x2B, - 0x02, 0x00, 0xDA, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xD0, 0x13, 0x0C, 0x00, 0xEA, 0xFF, 0xC0, 0xF3, - 0xAA, 0xF3, 0xEC, 0x2B, 0x06, 0x00, 0xE9, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xF2, 0x2B, 0x02, 0x00, - 0xE8, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xF4, 0x2B, 0x02, 0x00, 0xE7, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, - 0xF6, 0x2B, 0x02, 0x00, 0xE6, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xF8, 0x2B, 0x02, 0x00, 0xE5, 0xFF, - 0xC0, 0xF3, 0xD6, 0xF3, 0xFA, 0x2B, 0x10, 0x00, 0xE4, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0x0A, 0x2C, - 0x18, 0x00, 0xDB, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0x22, 0x2C, 0x02, 0x00, 0xDC, 0xFF, 0xC0, 0xF3, - 0xD6, 0xF3, 0x24, 0x2C, 0x02, 0x00, 0xE1, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xC6, 0x2C, 0x02, 0x00, - 0xE0, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, 0xC4, 0x2C, 0x02, 0x00, 0xE3, 0xFF, 0xC0, 0xF3, 0xD6, 0xF3, - 0xA8, 0x2C, 0x02, 0x00, 0xE2, 0xFF, 0x0E, 0xF4, 0xAA, 0xF3, 0x7E, 0x2C, 0x24, 0x00, 0x03, 0xFC, - 0xC0, 0xF3, 0x3A, 0xF5, 0x92, 0x2B, 0x02, 0x00, 0x04, 0xFC, 0xC0, 0xF3, 0xD0, 0xF3, 0xBA, 0x26, - 0x22, 0x00, 0x06, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0xA0, 0x26, 0x02, 0x00, 0x07, 0xFC, 0xC0, 0xF3, - 0xD6, 0xF3, 0xFE, 0x26, 0x02, 0x00, 0x0E, 0xFC, 0xC0, 0xF3, 0x63, 0xF5, 0x08, 0x27, 0x22, 0x00, - 0xB1, 0xFC, 0xC0, 0xF3, 0x88, 0xF8, 0x2A, 0x28, 0x02, 0x00, 0x20, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, - 0x2E, 0x27, 0x02, 0x00, 0x25, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x3A, 0x27, 0x02, 0x00, 0x26, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0x3C, 0x27, 0x02, 0x00, 0x27, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x3E, 0x27, - 0x02, 0x00, 0xB2, 0xFC, 0xC0, 0xF3, 0xD0, 0xF3, 0x4E, 0x28, 0x22, 0x00, 0xC1, 0xFC, 0xC0, 0xF3, - 0xD6, 0xF3, 0x56, 0x2C, 0x20, 0x00, 0xB0, 0xFC, 0xA0, 0xF3, 0x8C, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0xC4, 0xFC, 0xA0, 0xF3, 0x54, 0xF6, 0x00, 0x00, 0x08, 0x00, 0xC8, 0xFC, 0xA0, 0xF3, 0x52, 0xF6, - 0x00, 0x00, 0x08, 0x00, 0xB4, 0xFC, 0xA0, 0xF3, 0xC0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xFC, - 0xA0, 0xF3, 0x6A, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xFC, 0xA0, 0xF3, 0xAC, 0xF9, 0x00, 0x00, - 0x00, 0x00, 0xB8, 0xFC, 0xA0, 0xF3, 0x02, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xFC, 0xA0, 0xF3, - 0x3B, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xFC, 0xA0, 0xF3, 0xC3, 0xFA, 0x00, 0x00, 0x00, 0x00, - 0xBE, 0xFC, 0xA0, 0xF3, 0xEF, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFC, 0xA0, 0xF3, 0x3C, 0xFB, - 0x00, 0x00, 0x00, 0x00, 0xB3, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0xA2, 0x0F, 0x10, 0x00, 0xB5, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0xA4, 0x2C, 0x02, 0x00, 0xB9, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0xA6, 0x2C, - 0x02, 0x00, 0x90, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0xAA, 0x2C, 0x02, 0x00, 0x88, 0xFC, 0xC0, 0xF3, - 0xD6, 0xF3, 0x78, 0x2B, 0x04, 0x00, 0x89, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x7C, 0x2B, 0x04, 0x00, - 0xC5, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x80, 0x2B, 0x04, 0x00, 0x23, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, - 0x34, 0x27, 0x04, 0x00, 0x2A, 0xFC, 0xC0, 0xF3, 0x2C, 0xF4, 0xB6, 0x26, 0x02, 0x00, 0xC7, 0xFD, - 0xC0, 0xF3, 0xAA, 0xF3, 0xA6, 0x2B, 0x0A, 0x00, 0x29, 0xFC, 0x7F, 0xF4, 0x43, 0xF4, 0x00, 0x00, - 0x00, 0x00, 0xC2, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x86, 0x2B, 0x08, 0x00, 0x32, 0xFC, 0xC0, 0xF3, - 0xD6, 0xF3, 0x5C, 0x01, 0x02, 0x00, 0x33, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x5E, 0x01, 0x02, 0x00, - 0x35, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x8E, 0x2B, 0x02, 0x00, 0xC7, 0xFC, 0xC0, 0xF3, 0xEB, 0xF5, - 0x90, 0x2B, 0x02, 0x00, 0x10, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0xA8, 0x26, 0x02, 0x00, 0x11, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0x44, 0x27, 0x06, 0x00, 0x12, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x4A, 0x27, - 0x06, 0x00, 0x13, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x50, 0x27, 0x06, 0x00, 0x14, 0xFC, 0xC0, 0xF3, - 0xD6, 0xF3, 0x56, 0x27, 0x06, 0x00, 0x15, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x5C, 0x27, 0x06, 0x00, - 0x16, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x62, 0x27, 0x06, 0x00, 0x17, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, - 0x2A, 0x27, 0x02, 0x00, 0x83, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x6C, 0x01, 0x02, 0x00, 0x97, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0x6A, 0x01, 0x02, 0x00, 0x98, 0xFC, 0xD7, 0xF5, 0xC5, 0xF5, 0xEC, 0x00, - 0x02, 0x00, 0x99, 0xFC, 0xD7, 0xF5, 0xC5, 0xF5, 0xEC, 0x02, 0x02, 0x00, 0x9A, 0xFC, 0xD7, 0xF5, - 0xC5, 0xF5, 0xEC, 0x04, 0x02, 0x00, 0x9B, 0xFC, 0xD7, 0xF5, 0xC5, 0xF5, 0xEC, 0x06, 0x02, 0x00, - 0x9C, 0xFC, 0xD7, 0xF5, 0xC5, 0xF5, 0xEC, 0x08, 0x02, 0x00, 0x9D, 0xFC, 0xD7, 0xF5, 0xC5, 0xF5, - 0xEC, 0x0A, 0x02, 0x00, 0x18, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x2C, 0x27, 0x02, 0x00, 0x22, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0x32, 0x27, 0x02, 0x00, 0x24, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x38, 0x27, - 0x02, 0x00, 0xC0, 0xFC, 0xA0, 0xF3, 0x50, 0xF6, 0x00, 0x00, 0x06, 0x00, 0x9E, 0xFC, 0xC0, 0xF3, - 0x83, 0xF5, 0x6E, 0x01, 0x04, 0x00, 0x9F, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x3E, 0x2C, 0x04, 0x00, - 0xA0, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x42, 0x2C, 0x04, 0x00, 0xA1, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, - 0x46, 0x2C, 0x04, 0x00, 0xA2, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x4A, 0x2C, 0x04, 0x00, 0xA3, 0xFC, - 0xC0, 0xF3, 0xD6, 0xF3, 0x4E, 0x2C, 0x04, 0x00, 0xA4, 0xFC, 0xC0, 0xF3, 0xD6, 0xF3, 0x52, 0x2C, - 0x04, 0x00, 0x20, 0xFD, 0xF1, 0xF3, 0xAA, 0xF3, 0xD5, 0xFB, 0x08, 0x00, 0x21, 0xFD, 0xF1, 0xF3, - 0xAA, 0xF3, 0xD9, 0xFB, 0x0A, 0x00, 0x22, 0xFD, 0xF1, 0xF3, 0xAA, 0xF3, 0xDE, 0xFB, 0x16, 0x00, - 0x23, 0xFD, 0xF1, 0xF3, 0xAA, 0xF3, 0xE9, 0xFB, 0x0A, 0x00, 0x45, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, - 0xCA, 0x00, 0x02, 0x00, 0x47, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0x36, 0x01, 0x02, 0x00, 0x48, 0xFD, - 0xD4, 0xF4, 0xAA, 0xF3, 0x5C, 0x01, 0x02, 0x00, 0x49, 0xFD, 0xD4, 0xF4, 0xAA, 0xF3, 0x5E, 0x01, - 0x02, 0x00, 0x4A, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0x56, 0x01, 0x02, 0x00, 0x4B, 0xFD, 0xC0, 0xF3, - 0xAA, 0xF3, 0x58, 0x01, 0x02, 0x00, 0x4D, 0xFD, 0xF1, 0xF3, 0xAA, 0xF3, 0xEE, 0xFB, 0x08, 0x00, - 0x4F, 0xFD, 0xE8, 0xF4, 0xAA, 0xF3, 0x96, 0x2B, 0x02, 0x00, 0xC2, 0xFD, 0xDE, 0xF4, 0xAA, 0xF3, - 0x00, 0x00, 0x02, 0x00, 0x40, 0xFD, 0xE9, 0xF3, 0xAA, 0xF3, 0x78, 0x01, 0x02, 0x00, 0x24, 0xFD, - 0x01, 0xF5, 0xAA, 0xF3, 0x00, 0x00, 0x02, 0x00, 0x91, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0xCC, 0x1E, - 0x02, 0x00, 0x93, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0xD2, 0x1E, 0x02, 0x00, 0x8F, 0xFD, 0x0E, 0xF5, - 0xAA, 0xF3, 0x00, 0x00, 0x08, 0x00, 0xC1, 0xFD, 0x92, 0xF6, 0xAA, 0xF3, 0xC8, 0x00, 0x02, 0x00, - 0xC6, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0x20, 0x30, 0x04, 0x00, 0x25, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, - 0x62, 0x01, 0x02, 0x00, 0x89, 0xFD, 0x96, 0xF4, 0xAA, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xFD, - 0x0E, 0xF4, 0xAA, 0xF3, 0x7E, 0x2C, 0x24, 0x00, 0x46, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0x7A, 0x01, - 0x06, 0x00, 0x86, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, 0xB0, 0x26, 0x06, 0x00, 0x87, 0xFD, 0xC0, 0xF3, - 0xAA, 0xF3, 0x76, 0x2C, 0x06, 0x00, 0x8B, 0xFD, 0x96, 0xF9, 0xAA, 0xF3, 0x00, 0x00, 0x12, 0x00, - 0x8B, 0xFD, 0x96, 0xF9, 0xAA, 0xF3, 0x00, 0x00, 0x12, 0x00, 0x8E, 0xFD, 0xC0, 0xF3, 0xAA, 0xF3, - 0xEE, 0x14, 0x02, 0x00, 0x80, 0xFD, 0xEF, 0xF4, 0xAA, 0xF3, 0x22, 0x00, 0x02, 0x00, 0x81, 0xFD, - 0xEF, 0xF4, 0xAA, 0xF3, 0x22, 0x02, 0x02, 0x00, 0x82, 0xFD, 0xEF, 0xF4, 0xAA, 0xF3, 0x22, 0x04, - 0x02, 0x00, 0x83, 0xFD, 0xEF, 0xF4, 0xAA, 0xF3, 0x22, 0x06, 0x02, 0x00, 0x84, 0xFD, 0xEF, 0xF4, - 0xAA, 0xF3, 0x22, 0x08, 0x02, 0x00, 0x85, 0xFD, 0xEF, 0xF4, 0xAA, 0xF3, 0x22, 0x0A, 0x02, 0x00, - 0x00, 0xF1, 0x46, 0x00, 0x64, 0xF3, 0xF6, 0x00, 0x00, 0x03, 0x8E, 0xF7, 0x1F, 0x00, 0x34, 0x01, - 0xC8, 0x00, 0x96, 0x01, 0xCC, 0x00, 0xFA, 0x00, 0x78, 0x01, 0xD2, 0x25, 0x18, 0x01, 0xCC, 0x1E, - 0xC8, 0x00, 0x00, 0x00, 0x02, 0x15, 0x00, 0x00, 0x06, 0x17, 0x12, 0x01, 0x03, 0x00, 0xAE, 0x00, - 0xEC, 0x00, 0x44, 0x00, 0xDC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x09, 0x08, 0x24, 0x28, 0x06, - 0x0C, 0x18, 0x08, 0x30, 0x14, 0x0C, 0x08, 0x36, 0x10, 0x12, 0xA1, 0xB6, 0x14, 0xB6, 0x50, 0xB7, - 0x59, 0xB7, 0x25, 0xB6, 0xCE, 0xB6, 0x93, 0xB6, 0x15, 0x1C, 0xD0, 0x1A, 0x15, 0x1C, 0x8B, 0x1B, - 0xEE, 0x1A, 0xCB, 0x1A, 0xD2, 0x1B, 0xF1, 0x1B, 0x06, 0x1C, 0x48, 0x1C, 0x74, 0x1C, 0x74, 0x1B, - 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, - 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x23, 0x46, 0x23, 0x46, 0x23, 0x46, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1D, 0x47, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, - 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, - 0x9A, 0x48, 0x33, 0x48, 0x78, 0x49, 0x78, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, - 0x7A, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7C, 0x49, - 0xD8, 0x03, 0xDC, 0x03, 0xE0, 0x03, 0xE4, 0x03, 0xF0, 0x03, 0xF4, 0x03, 0xF8, 0x03, 0x0A, 0x04, - 0x0E, 0x04, 0x12, 0x04, 0x16, 0x04, 0x0C, 0x04, 0x10, 0x04, 0x14, 0x04, 0x18, 0x04, 0x1C, 0x04, - 0x20, 0x04, 0x24, 0x04, 0x28, 0x04, 0x4C, 0x04, 0x50, 0x04, 0x54, 0x04, 0x58, 0x04, 0x5C, 0x04, - 0x60, 0x04, 0x64, 0x04, 0x68, 0x04, 0x6C, 0x04, 0x70, 0x04, 0x74, 0x04, 0x7D, 0x04, 0x81, 0x04, - 0x85, 0x04, 0x89, 0x04, 0x8D, 0x04, 0x10, 0x00, 0x8E, 0x19, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3C, 0x0C, 0x00, 0x00, 0xFF, 0x3F, 0x44, 0x04, 0x00, 0x00, 0xD3, 0x22, 0x44, 0x04, - 0x9C, 0x02, 0xCB, 0x54, 0x44, 0x04, 0x00, 0x00, 0x01, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x0C, 0x71, 0x00, 0x30, 0x50, 0x20, 0x00, 0x80, 0xBF, 0x1F, 0xA6, 0x28, 0x00, 0x0B, 0x02, - 0x60, 0x84, 0x4C, 0x00, 0x02, 0x00, 0x4B, 0x1C, 0x98, 0x00, 0x00, 0x00, 0x20, 0x0B, 0x34, 0x04, - 0xFD, 0x34, 0x34, 0x00, 0x38, 0x04, 0xFD, 0x34, 0x34, 0x00, 0x3C, 0x04, 0x01, 0x00, 0x10, 0x00, - 0x00, 0x08, 0x00, 0x52, 0x14, 0x00, 0x04, 0x08, 0x0E, 0x32, 0x00, 0xA6, 0x10, 0x08, 0xC4, 0x03, - 0x50, 0x60, 0x18, 0x08, 0xF0, 0x3F, 0xFC, 0x01, 0x10, 0x0C, 0x00, 0x00, 0x80, 0x04, 0x14, 0x0C, - 0x00, 0x00, 0x00, 0x41, 0x20, 0x0C, 0xB0, 0x00, 0xB0, 0xB8, 0x24, 0x0C, 0x00, 0x00, 0xAB, 0x05, - 0x2C, 0x0C, 0x80, 0x05, 0x00, 0xFF, 0x30, 0x0C, 0x00, 0x00, 0xB0, 0x04, 0x34, 0x0C, 0x03, 0x00, - 0x00, 0xE8, 0x44, 0x0C, 0x04, 0x00, 0xFF, 0x0F, 0x00, 0x10, 0x2E, 0x00, 0x0C, 0xE3, 0x44, 0x04, - 0x00, 0x00, 0x01, 0x04, 0x44, 0x04, 0x00, 0x00, 0x01, 0x01, 0x44, 0x04, 0x00, 0x00, 0x01, 0x00, - 0x44, 0x04, 0x00, 0x00, 0x01, 0x04, 0x44, 0x04, 0x00, 0x00, 0x80, 0x03, 0x48, 0x0C, 0x00, 0x00, - 0x7F, 0x00, 0x04, 0x04, 0x08, 0x48, 0x00, 0x00, 0x04, 0x04, 0x08, 0x40, 0x00, 0x00, 0x00, 0x0C, - 0x71, 0x00, 0x30, 0x30, 0x00, 0x00, 0x5E, 0x40, 0x01, 0x00, 0x18, 0x00, 0x36, 0xC0, 0xE8, 0x0E, - 0x1C, 0x00, 0x78, 0xC8, 0xA5, 0x40, 0x24, 0x00, 0x9E, 0xB0, 0xB9, 0x95, 0x08, 0x08, 0x00, 0xEA, - 0x40, 0x01, 0x0C, 0x08, 0x00, 0xEA, 0x00, 0x00, 0x1C, 0x08, 0x00, 0x00, 0x42, 0x07, 0x20, 0x08, - 0x7B, 0x00, 0xD4, 0x09, 0x2C, 0x04, 0x14, 0x00, 0x50, 0x14, 0x30, 0x04, 0x28, 0x0F, 0x28, 0x7F, - 0x18, 0x08, 0x20, 0x00, 0xFC, 0x01, 0x04, 0x10, 0x69, 0x00, 0xFD, 0xC3, 0x08, 0x10, 0x69, 0x00, - 0xFD, 0xC3, 0x08, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0C, - 0x00, 0x00, 0x7F, 0x00, 0x04, 0x04, 0x08, 0x48, 0x02, 0x00, 0x00, 0x00, 0x5E, 0x48, 0x00, 0x00, - 0x04, 0x04, 0x08, 0x40, 0x02, 0x00, 0x00, 0x0C, 0x71, 0x00, 0x30, 0x50, 0x00, 0x00, 0x5E, 0x48, - 0x01, 0x00, 0x18, 0x00, 0x3A, 0xC0, 0xE8, 0x04, 0x1C, 0x00, 0x78, 0xD0, 0xA5, 0x40, 0x24, 0x00, - 0x9E, 0xB0, 0xB9, 0x85, 0x2C, 0x04, 0x14, 0x00, 0x50, 0x14, 0x30, 0x04, 0x28, 0x0F, 0x28, 0x7F, - 0x08, 0x08, 0x00, 0xEA, 0x40, 0x01, 0x0C, 0x08, 0x00, 0xEA, 0x00, 0x00, 0x1C, 0x08, 0x00, 0x00, - 0x42, 0x07, 0x20, 0x08, 0x7B, 0x00, 0xD4, 0x09, 0x18, 0x08, 0xF0, 0x3F, 0xFC, 0x01, 0x04, 0x10, - 0x69, 0x00, 0xDD, 0xCD, 0x08, 0x10, 0x69, 0x00, 0xDD, 0xCD, 0x08, 0x0C, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, 0x40, 0x04, - 0x41, 0x04, 0x10, 0x04, 0xD6, 0x08, 0x56, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x56, 0x0A, 0x18, 0x04, - 0x56, 0x0A, 0x40, 0x02, 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0xC2, 0x00, 0xD6, 0x08, - 0x24, 0x04, 0xD6, 0x08, 0xC0, 0x00, 0x28, 0x04, 0xC2, 0x08, 0xC2, 0x28, 0x08, 0x04, 0x40, 0x01, - 0x41, 0x01, 0x0C, 0x04, 0x00, 0x01, 0x01, 0x01, 0x10, 0x04, 0x56, 0x0A, 0x56, 0x0A, 0x14, 0x04, - 0x42, 0x02, 0x56, 0x0A, 0x18, 0x04, 0x56, 0x0A, 0x40, 0x02, 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, - 0x20, 0x04, 0x42, 0x02, 0x56, 0x0A, 0x24, 0x04, 0x56, 0x0A, 0x40, 0x02, 0x28, 0x04, 0x42, 0x0A, - 0x42, 0x2A, 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, 0x40, 0x04, 0x41, 0x04, 0x10, 0x04, - 0xCE, 0x08, 0x4E, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x4E, 0x0A, 0x18, 0x04, 0x4E, 0x0A, 0x40, 0x02, - 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0xC2, 0x00, 0xCE, 0x08, 0x24, 0x04, 0xCE, 0x08, - 0xC0, 0x00, 0x28, 0x04, 0xC2, 0x08, 0xC2, 0x28, 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, - 0x00, 0x01, 0x01, 0x01, 0x10, 0x04, 0x4E, 0x0A, 0x4E, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x4E, 0x0A, - 0x18, 0x04, 0x4E, 0x0A, 0x40, 0x02, 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0x42, 0x02, - 0x4E, 0x0A, 0x24, 0x04, 0x4E, 0x0A, 0x40, 0x02, 0x28, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, - 0x05, 0x00, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x17, 0xA0, 0x17, 0xA0, 0x17, - 0xA0, 0x18, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0x00, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x5D, 0x00, 0x52, 0x00, - 0x48, 0x00, 0x40, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x23, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x5D, 0x00, 0x52, 0x00, 0x48, 0x00, - 0x40, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x23, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x01, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x03, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, - 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, 0x57, 0x61, - 0x76, 0x65, 0x4C, 0x41, 0x4E, 0x20, 0x49, 0x49, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0x0F, 0x00, 0x50, 0x01, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x14, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x30, 0x00, 0xFF, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, - 0x0A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x0B, 0x16, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x82, 0x84, - 0x8B, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x20, 0x00, 0x1B, 0x00, 0x17, 0x00, 0x11, 0x00, 0x10, 0x00, 0x0B, 0x00, - 0x0B, 0x00, 0x09, 0x00, 0x17, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x09, 0x00, - 0x08, 0x00, 0x07, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x09, 0x00, 0x08, 0x00, 0x05, 0x00, 0x05, 0x00, - 0xD8, 0x0C, 0xC0, 0x08, 0x90, 0x0D, 0x60, 0x09, 0x48, 0x0E, 0x30, 0x0A, 0x24, 0x0F, 0x18, 0x0B, - 0x0B, 0x6E, 0x0B, 0x37, 0x02, 0x14, 0x01, 0x0A, 0xFF, 0x0F, 0xF0, 0x0F, 0xFF, 0x0F, 0xF0, 0x0F, - 0xFF, 0x0F, 0xF0, 0x0F, 0xFF, 0x0F, 0xF0, 0x0F, 0xFF, 0x0F, 0xF0, 0x0F, 0xFF, 0x0F, 0xF0, 0x0F, - 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xDD, 0x00, 0x50, 0xF2, 0x01, 0x01, 0x00, - 0x00, 0x50, 0xF2, 0x05, 0x02, 0x00, 0x00, 0x50, 0xF2, 0x02, 0x00, 0x50, 0xF2, 0x04, 0x02, 0x00, - 0x00, 0x50, 0xF2, 0x00, 0x00, 0x50, 0xF2, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x04, 0x00, 0x15, 0x00, 0x02, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x20, 0x00, 0x11, 0x00, 0x20, 0x00, 0x16, 0x26, 0xE2, 0x2B, 0xEA, 0x2D, 0xC4, 0x2D, - 0xEE, 0x2D, 0x7E, 0x2C, 0x1E, 0x2E, 0x22, 0x2E, 0xFF, 0xFF, 0x2C, 0x2E, 0x00, 0x00, 0x4E, 0x28, - 0xD8, 0x2B, 0x22, 0x2E, 0xFF, 0xFF, 0x00, 0x00, 0x16, 0x26, 0xE2, 0x2B, 0xEA, 0x2D, 0xFF, 0xFF, - 0xEE, 0x2D, 0x7E, 0x2C, 0x1E, 0x2E, 0x22, 0x2E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x2C, 0x2E, 0x00, 0x00, 0xE2, 0x2B, 0x34, 0x2E, 0x22, 0x2E, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2A, 0x00, 0x00, 0x08, 0x32, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x60, 0x1D, 0x00, 0x00, 0x00, 0x0D, 0x81, - 0x00, 0x60, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xDD, 0x00, 0xFF, 0xFF, 0x97, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x19, 0x0A, 0x09, 0x46, 0x1C, 0x60, 0x18, 0x00, 0x19, 0x1D, 0x09, 0x42, - 0x1C, 0x60, - -}; /* fw_image_2_data */ - -static const hcf_8 fw_image_3_data[] = { - 0x00, 0x60, 0x46, 0x74, 0xCD, 0xE2, 0x04, 0xE1, 0x02, 0x60, 0x00, 0xE1, 0x82, 0xF3, 0x21, 0x60, - 0xCE, 0x61, 0x60, 0x40, 0x01, 0x2B, 0x02, 0x00, 0x21, 0x60, 0x56, 0x61, 0x0F, 0x60, 0xE8, 0x64, - 0x59, 0xD1, 0x58, 0xD9, 0x59, 0xD1, 0x58, 0xD9, 0x3F, 0x44, 0x40, 0x26, 0x05, 0x00, 0x18, 0x60, - 0x22, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x50, 0x3F, 0x40, 0x02, 0x2B, 0x03, 0x00, 0x18, 0x60, - 0x74, 0x78, 0xFF, 0xFF, 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x43, 0x64, 0x3A, 0xDB, 0x82, 0xF3, - 0xFF, 0xFF, 0x60, 0x41, 0x3F, 0x44, 0xFF, 0x01, 0x3F, 0x40, 0x40, 0x26, 0x05, 0x00, 0x18, 0x60, - 0x20, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x52, 0xC4, 0xE2, 0x00, 0x63, 0x81, 0xFD, 0x32, 0x7B, - 0x4D, 0xE2, 0xBF, 0xFE, 0xC4, 0xE2, 0x41, 0xFF, 0xE0, 0xFE, 0xE1, 0xFE, 0xE2, 0xFE, 0x43, 0xFF, - 0x44, 0xFF, 0x46, 0xFF, 0x83, 0xF3, 0x62, 0xFF, 0x60, 0x40, 0x05, 0x36, 0x2D, 0xFF, 0x07, 0x36, - 0xD5, 0xFE, 0x08, 0xE1, 0x88, 0x60, 0x85, 0x71, 0x8D, 0xE2, 0xA3, 0x60, 0x30, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x10, 0x62, 0x1A, 0x60, 0x58, 0x4D, 0xB4, 0x78, 0xFF, 0xFF, 0x64, 0x41, 0xA9, 0x9C, - 0x60, 0x45, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x82, 0xF1, 0x09, 0x60, 0xB4, 0x61, - 0x64, 0x44, 0x01, 0x27, 0x24, 0x00, 0x60, 0x40, 0x0E, 0x3A, 0x0D, 0x00, 0x01, 0x7C, 0x10, 0x60, - 0xF2, 0xF9, 0x44, 0x60, 0x08, 0x7C, 0x10, 0x60, 0xC4, 0xF9, 0x12, 0x60, 0xE5, 0xF1, 0x02, 0x60, - 0xB0, 0x61, 0xB1, 0x9C, 0x26, 0x00, 0x00, 0x7C, 0x10, 0x60, 0xF2, 0xF9, 0x40, 0x60, 0x08, 0x7C, - 0x10, 0x60, 0xC4, 0xF9, 0x12, 0x60, 0xE5, 0xF1, 0x02, 0x60, 0x90, 0x61, 0xB1, 0x9C, 0x09, 0x60, - 0x67, 0x65, 0xFF, 0xB4, 0xC4, 0x85, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0x12, 0x00, 0xFF, 0xB4, - 0xED, 0xA0, 0x25, 0x60, 0xCC, 0x61, 0x04, 0x04, 0xE2, 0xA0, 0xD9, 0x81, 0x01, 0x04, 0xD9, 0x81, - 0xA1, 0xD1, 0x02, 0x60, 0x50, 0x61, 0x1F, 0x60, 0xF6, 0x65, 0xE0, 0x84, 0x44, 0xD3, 0xB1, 0x9C, - 0xC8, 0x81, 0x61, 0x47, 0x00, 0x7E, 0xE9, 0x81, 0x07, 0x60, 0xF0, 0x65, 0xA5, 0x81, 0x0B, 0xB9, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x85, 0xB5, 0x85, 0x04, 0x60, 0x44, 0x62, 0x1A, 0x60, 0x58, 0x4D, - 0x88, 0x78, 0xFF, 0xFF, 0x82, 0xF3, 0xC8, 0x61, 0x61, 0x54, 0xCD, 0xE2, 0x60, 0x40, 0x01, 0x27, - 0x2E, 0x00, 0xCC, 0x84, 0xE0, 0x85, 0x15, 0x60, 0xA2, 0xE7, 0x1F, 0x60, 0x86, 0x64, 0x1A, 0x60, - 0x58, 0x4F, 0x7D, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0xA2, 0x64, 0x1A, 0x60, 0x58, 0x4F, 0x7D, 0x78, - 0xFF, 0xFF, 0x1F, 0x60, 0xBE, 0x64, 0x1A, 0x60, 0x58, 0x4F, 0x7D, 0x78, 0xFF, 0xFF, 0x1F, 0x60, - 0xDA, 0x64, 0x1A, 0x60, 0x58, 0x4F, 0x7D, 0x78, 0xFF, 0xFF, 0x75, 0x64, 0x06, 0x61, 0x61, 0x48, - 0x60, 0x44, 0x80, 0xBC, 0xFF, 0xB4, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x21, 0x60, - 0xEC, 0x7C, 0x07, 0x60, 0xE9, 0xF9, 0x21, 0x60, 0x74, 0x63, 0x14, 0x61, 0x21, 0x00, 0x11, 0x60, - 0x62, 0xF1, 0xFF, 0xB4, 0xED, 0xA0, 0x64, 0x41, 0x04, 0x04, 0xE2, 0xA0, 0xD9, 0x81, 0x01, 0x04, - 0xD9, 0x81, 0xA1, 0xD1, 0x10, 0x60, 0x91, 0xF3, 0x64, 0x41, 0xFF, 0xB1, 0xFF, 0x60, 0x00, 0x65, - 0xA4, 0x84, 0x34, 0x94, 0xA2, 0xDB, 0x5A, 0xD3, 0x64, 0x41, 0xA5, 0x81, 0xFF, 0xB4, 0x34, 0x94, - 0xA2, 0xDB, 0x22, 0x60, 0x58, 0x7C, 0x07, 0x60, 0xE9, 0xF9, 0x21, 0x60, 0x02, 0x63, 0x13, 0x61, - 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x07, 0x60, 0xE9, 0xF3, 0x31, 0x40, 0x80, 0x26, - 0x36, 0xA4, 0x07, 0x60, 0xE9, 0xFB, 0x60, 0x43, 0x09, 0x61, 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, - 0xFF, 0xFF, 0x82, 0xF3, 0x22, 0x60, 0xC4, 0x61, 0x00, 0x7C, 0x7E, 0x63, 0x59, 0xD9, 0xFE, 0x1F, - 0x60, 0x40, 0x01, 0x27, 0x03, 0x00, 0x23, 0x60, 0x46, 0x65, 0x15, 0x00, 0xFF, 0xB4, 0xF9, 0xA0, - 0x23, 0x60, 0x68, 0x65, 0x01, 0x7C, 0x0D, 0x04, 0xED, 0xA0, 0x23, 0x60, 0x8A, 0x65, 0x11, 0x7C, - 0x08, 0x04, 0xE2, 0xA0, 0x23, 0x60, 0xAC, 0x65, 0x21, 0x7C, 0x03, 0x04, 0x23, 0x60, 0xCE, 0x65, - 0x31, 0x7C, 0x64, 0x5F, 0x64, 0xFB, 0xA5, 0xD3, 0xDA, 0x85, 0xF0, 0xA0, 0x22, 0x60, 0xC4, 0x61, - 0x08, 0x06, 0x40, 0x54, 0x58, 0x53, 0x08, 0xFF, 0xA2, 0x60, 0xE7, 0x64, 0x43, 0xFB, 0x08, 0xFF, - 0xFF, 0x01, 0x60, 0x43, 0x60, 0x46, 0xA5, 0xD1, 0xDA, 0x85, 0xA5, 0xD3, 0xDA, 0x85, 0x59, 0xD9, - 0x59, 0xDB, 0x59, 0xD9, 0x59, 0xDB, 0xFB, 0x1F, 0x0C, 0x63, 0xA5, 0xD1, 0xDA, 0x85, 0xA5, 0xD3, - 0xDA, 0x85, 0x59, 0xD9, 0x59, 0xDB, 0x59, 0xD9, 0x59, 0xDB, 0xF7, 0x1F, 0x66, 0x44, 0x0E, 0x63, - 0x53, 0x93, 0x60, 0x40, 0x10, 0x36, 0x07, 0x00, 0x65, 0x44, 0x48, 0xD3, 0x59, 0xD9, 0x59, 0xDB, - 0x59, 0xD9, 0x59, 0xDB, 0xFB, 0x1F, 0x12, 0x60, 0xBC, 0xF1, 0x64, 0xF3, 0x64, 0x43, 0xDB, 0x81, - 0x25, 0x60, 0x5A, 0x65, 0x60, 0x40, 0x01, 0x37, 0x12, 0x00, 0x11, 0x37, 0x17, 0x00, 0x21, 0x37, - 0x1D, 0x00, 0x31, 0x37, 0x22, 0x00, 0xA3, 0xD1, 0x12, 0x60, 0xB7, 0xF5, 0x64, 0x44, 0xFF, 0xB4, - 0x12, 0x60, 0xB6, 0xFB, 0x64, 0x47, 0xFF, 0xB4, 0x12, 0x60, 0xAD, 0xF1, 0x1D, 0x00, 0xA1, 0xD3, - 0x12, 0x60, 0xB8, 0xF5, 0xFF, 0xB4, 0x12, 0x60, 0xAE, 0xF1, 0x16, 0x00, 0xA1, 0xD3, 0x12, 0x60, - 0xB9, 0xF5, 0x60, 0x47, 0xFF, 0xB4, 0x12, 0x60, 0xAF, 0xF1, 0x0E, 0x00, 0x59, 0xD3, 0x12, 0x60, - 0xBA, 0xF5, 0xFF, 0xB4, 0x12, 0x60, 0xB0, 0xF1, 0x07, 0x00, 0x59, 0xD3, 0x12, 0x60, 0xBB, 0xF5, - 0x60, 0x47, 0xFF, 0xB4, 0x12, 0x60, 0xB1, 0xF1, 0x12, 0x60, 0xB5, 0xFB, 0x12, 0x60, 0xB2, 0xF9, - 0x66, 0x42, 0xFC, 0xA2, 0xA2, 0xD3, 0x24, 0x60, 0x48, 0x63, 0xCC, 0x84, 0xE8, 0x84, 0xCC, 0x81, - 0x63, 0x45, 0xA6, 0xD3, 0xDA, 0x82, 0xFF, 0xB4, 0xFF, 0xFF, 0x03, 0x03, 0x60, 0x40, 0x80, 0x2B, - 0x03, 0x00, 0xDA, 0x86, 0xCD, 0x81, 0xF5, 0x01, 0x00, 0xB9, 0xA6, 0xD3, 0x0B, 0x03, 0x5A, 0xD1, - 0xDA, 0x86, 0xFF, 0xB4, 0xE0, 0x84, 0xC4, 0x84, 0x5C, 0x90, 0xBD, 0xD9, 0xFD, 0x02, 0xCD, 0x81, - 0x66, 0x42, 0xF2, 0x02, 0x5A, 0xD3, 0x24, 0x60, 0x86, 0x65, 0xD7, 0x80, 0xBD, 0xDB, 0xFD, 0x02, - 0x64, 0xF3, 0x15, 0x60, 0xDD, 0xF1, 0x60, 0x40, 0x01, 0x27, 0x09, 0x00, 0x64, 0x40, 0x10, 0x26, - 0x06, 0x00, 0x13, 0x64, 0xAD, 0xFB, 0x01, 0x60, 0x67, 0x64, 0x37, 0xFB, 0x09, 0x00, 0x08, 0x64, - 0xAD, 0xFB, 0x82, 0xF3, 0x01, 0x60, 0x67, 0x7C, 0x60, 0x40, 0x01, 0x27, 0x5B, 0x7C, 0x37, 0xF9, - 0x13, 0x60, 0x5B, 0xF1, 0x64, 0xF3, 0x15, 0x60, 0xD2, 0xF9, 0x15, 0x60, 0xD6, 0xF9, 0x60, 0x40, - 0x01, 0x27, 0x0A, 0x00, 0xFF, 0xB5, 0x10, 0x60, 0xA8, 0x63, 0x65, 0x41, 0xCD, 0x81, 0x06, 0xA3, - 0xFD, 0x02, 0xFA, 0xA3, 0xA3, 0xD3, 0x0F, 0x00, 0x01, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x11, 0x60, - 0x14, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0x08, 0xA1, 0xFB, 0x02, 0xFC, 0xA1, 0xA1, 0xD3, - 0x15, 0x60, 0xD2, 0xF1, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x07, 0x15, 0x60, 0xD2, 0xFB, - 0x15, 0x60, 0xD6, 0xFB, 0x25, 0x60, 0x7A, 0x63, 0x24, 0x60, 0x08, 0x65, 0x12, 0x60, 0xB6, 0xF1, - 0x23, 0x60, 0xF0, 0x61, 0x25, 0x60, 0x68, 0x64, 0x40, 0x4F, 0x04, 0x64, 0xC3, 0x60, 0x58, 0x4D, - 0x25, 0x78, 0xFF, 0xFF, 0x25, 0x60, 0x82, 0x63, 0x12, 0x60, 0xB5, 0xF1, 0x24, 0x60, 0x48, 0x65, - 0x25, 0x60, 0x66, 0x64, 0x40, 0x4F, 0x08, 0x64, 0xC3, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, - 0x64, 0xF3, 0x08, 0x7C, 0x38, 0xF9, 0x24, 0x60, 0xE0, 0x61, 0x60, 0x40, 0x01, 0x2B, 0x0E, 0x00, - 0x01, 0x37, 0x06, 0x00, 0x11, 0x37, 0x03, 0x00, 0x21, 0x3B, 0x1E, 0xA1, 0x1E, 0xA1, 0x1E, 0xA1, - 0x1C, 0x63, 0x24, 0x60, 0xC2, 0x64, 0x59, 0xD1, 0x58, 0xD9, 0xFD, 0x1F, 0x12, 0x60, 0xB2, 0xF3, - 0x00, 0x7C, 0x60, 0x45, 0x70, 0x62, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x04, 0x29, - 0xFE, 0x01, 0x00, 0x60, 0x10, 0x62, 0x1A, 0x60, 0x58, 0x4D, 0xB4, 0x78, 0xFF, 0xFF, 0x01, 0x61, - 0xB1, 0x9C, 0x60, 0x45, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x18, 0x60, 0x50, 0x78, - 0xFF, 0xFF, 0x44, 0xD3, 0x80, 0x7C, 0x60, 0x48, 0x60, 0x47, 0x00, 0x7F, 0xB0, 0x8A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xD5, 0x60, 0x84, 0xE7, 0x62, 0x47, 0x80, 0xBF, - 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x64, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x2D, 0x58, 0xFF, 0xFF, - 0x00, 0x7C, 0xBD, 0xD3, 0xD5, 0x60, 0x84, 0xE7, 0x60, 0x47, 0x80, 0xBF, 0x60, 0x4A, 0xBD, 0xD3, - 0x01, 0x16, 0xFE, 0x01, 0x90, 0x8A, 0xBD, 0xD3, 0x01, 0x16, 0xFE, 0x01, 0x90, 0x8A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0xCD, 0x81, 0x95, 0x60, 0x84, 0xE7, 0xEB, 0x02, 0x2D, 0x58, 0xFF, 0xFF, - 0xD5, 0x60, 0x84, 0xE7, 0x62, 0x4A, 0x02, 0x64, 0x01, 0x16, 0xFE, 0x01, 0xCC, 0x84, 0xFF, 0xFF, - 0xFD, 0x02, 0x7C, 0x49, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x68, 0x5C, 0x7C, 0x49, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x68, 0x44, 0x95, 0x60, 0x84, 0xE7, 0x2D, 0x58, 0xFF, 0xFF, 0x42, 0xFF, - 0x40, 0xFF, 0x3F, 0x40, 0x02, 0x27, 0x33, 0x00, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, - 0x3F, 0x40, 0x02, 0x27, 0x1B, 0x00, 0x60, 0xBC, 0x40, 0x40, 0xDD, 0xFE, 0x18, 0x60, 0x07, 0xF1, - 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x64, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, - 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x00, 0xEE, 0x19, 0x61, 0xCD, 0x81, - 0xFF, 0xFF, 0xFD, 0x02, 0x43, 0x45, 0x3F, 0x40, 0x02, 0x27, 0x11, 0x00, 0xAE, 0x4F, 0xFD, 0xB4, - 0x04, 0xBC, 0xA0, 0x5E, 0x00, 0x60, 0x02, 0x71, 0x8D, 0xE2, 0x40, 0xE1, 0xA1, 0xFF, 0x04, 0xAC, - 0xA0, 0x5E, 0x0F, 0x60, 0xA0, 0x71, 0x8D, 0xE2, 0xA1, 0xFF, 0xDD, 0xFE, 0x1E, 0x00, 0x43, 0x45, - 0x20, 0x44, 0x60, 0xBC, 0x40, 0x40, 0xAE, 0x4F, 0xFD, 0xB4, 0x04, 0xBC, 0xA0, 0x5E, 0xDD, 0xFE, - 0x00, 0x60, 0x02, 0x71, 0x8D, 0xE2, 0x40, 0xE1, 0xA1, 0xFF, 0x04, 0xAC, 0xA0, 0x5E, 0x00, 0x60, - 0xC8, 0x71, 0x8D, 0xE2, 0xA1, 0xFF, 0x0C, 0x60, 0x00, 0x62, 0x00, 0x60, 0x71, 0x7C, 0x10, 0x60, - 0x00, 0x65, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0x3C, 0x63, 0x1E, 0x61, - 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x14, 0x71, 0x8D, 0xE2, 0xA1, 0xFF, - 0x31, 0x44, 0x40, 0x26, 0x02, 0x00, 0x80, 0x26, 0x17, 0x00, 0x21, 0x60, 0xEC, 0x63, 0x07, 0x60, - 0xE9, 0xFD, 0x09, 0x61, 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x31, 0x44, 0x40, 0x2A, - 0x14, 0x00, 0x31, 0x44, 0x7F, 0xB4, 0x40, 0x51, 0xAE, 0x4C, 0x10, 0x26, 0x0E, 0x00, 0x07, 0x60, - 0xEA, 0xFB, 0x31, 0x44, 0x80, 0xBC, 0x40, 0x51, 0x22, 0x60, 0x22, 0x63, 0x07, 0x60, 0xE9, 0xFD, - 0x09, 0x61, 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0xF0, 0x63, 0x03, 0x61, - 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x62, 0x19, 0x60, 0x8F, 0x7C, - 0x00, 0x60, 0xAC, 0x65, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x80, 0xE1, 0xBF, 0xFE, - 0xA1, 0x4F, 0x70, 0xB4, 0x50, 0x36, 0xAF, 0x00, 0x20, 0x36, 0x03, 0x00, 0x18, 0x60, 0x24, 0x78, - 0xFF, 0xFF, 0x01, 0x60, 0x1A, 0xE1, 0xDF, 0xFE, 0x19, 0xFF, 0x00, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0x3F, 0x40, 0x20, 0x2B, 0xA1, 0x00, 0x01, 0x16, 0xFE, 0x01, 0x38, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, - 0x68, 0x44, 0x01, 0x2A, 0x99, 0x00, 0x13, 0x60, 0x09, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, - 0x00, 0x3B, 0xA2, 0xDB, 0x64, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x9C, 0x47, 0x00, 0x43, 0x45, - 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x18, 0x60, 0x22, 0xF3, 0x3F, 0x40, 0x40, 0x26, 0x01, 0x00, - 0xA0, 0x50, 0x3F, 0x40, 0x02, 0x2B, 0x29, 0x00, 0xAE, 0x4F, 0xFD, 0xB4, 0xA0, 0x5E, 0xDD, 0xFE, - 0xAC, 0x4F, 0x10, 0xBC, 0xA0, 0x5C, 0xFF, 0xFF, 0x10, 0xAC, 0xA0, 0x5C, 0x00, 0x60, 0xC8, 0x71, - 0x8D, 0xE2, 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0x0C, 0x60, 0x00, 0x62, 0x00, 0x60, 0x71, 0x7C, - 0x10, 0x60, 0x00, 0x65, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0xC8, 0x71, - 0x8D, 0xE2, 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0x01, 0x60, 0x08, 0xE1, 0x64, 0xF1, 0x82, 0xF9, - 0x05, 0x7C, 0x83, 0xF9, 0xDF, 0xFE, 0x19, 0xFF, 0xFF, 0xFF, 0x18, 0x60, 0x07, 0xF1, 0xAD, 0x4F, - 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x64, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, - 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0xBF, 0xFE, 0x45, 0x00, 0x18, 0x60, 0x07, 0xF1, - 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x64, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, - 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, - 0x40, 0x40, 0x02, 0x60, 0xEE, 0x64, 0x3F, 0x40, 0x02, 0x27, 0xC8, 0x64, 0x81, 0xFB, 0x82, 0xF9, - 0x05, 0x64, 0x83, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, 0x26, 0x00, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, - 0x43, 0x45, 0xA4, 0xD1, 0xDA, 0x83, 0xC3, 0x85, 0x80, 0xE1, 0xDF, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, - 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, 0x00, 0x7F, 0x60, 0x4A, 0xD7, 0x80, 0xA1, 0xFF, 0xF6, 0x02, - 0xBF, 0xFE, 0x11, 0x00, 0x43, 0x45, 0xA4, 0xD1, 0xDA, 0x83, 0x0D, 0x18, 0x64, 0x44, 0x00, 0x61, - 0xFA, 0xA4, 0xDD, 0x81, 0xFD, 0x02, 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0xBF, 0xFE, - 0x02, 0x00, 0xF1, 0xFE, 0x01, 0x00, 0x25, 0x43, 0x21, 0xE1, 0x00, 0x64, 0xBF, 0xDB, 0x20, 0x44, - 0x20, 0x2A, 0x07, 0x00, 0x07, 0xB4, 0x04, 0x36, 0xC3, 0xFE, 0x06, 0x36, 0xCC, 0xFE, 0x07, 0x36, - 0xD5, 0xFE, 0x20, 0x44, 0xD8, 0xB4, 0x40, 0x40, 0x1F, 0x60, 0x2C, 0x63, 0xBD, 0xD3, 0x03, 0x61, - 0x0F, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x04, 0x61, 0x0B, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x06, 0x61, - 0x07, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x07, 0x61, 0x03, 0x1B, 0xC3, 0x60, 0x53, 0x78, 0xFF, 0xFF, - 0xA3, 0xD1, 0x40, 0x44, 0x20, 0x44, 0x07, 0xB5, 0xD4, 0x85, 0x35, 0x80, 0x24, 0x45, 0x1F, 0x60, - 0x6C, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, - 0x64, 0x43, 0xBD, 0xD3, 0xBD, 0xD1, 0x40, 0x44, 0x10, 0x27, 0x19, 0x00, 0x3F, 0x40, 0x02, 0x2B, - 0x06, 0x00, 0x24, 0x47, 0x08, 0x2B, 0x13, 0x00, 0x07, 0xB4, 0x01, 0x36, 0x11, 0x00, 0xFF, 0x60, - 0x7F, 0x65, 0x15, 0x60, 0xA2, 0x64, 0x24, 0x40, 0x08, 0x2B, 0xA4, 0x84, 0xA0, 0x57, 0xFF, 0xFF, - 0x64, 0x49, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x00, 0x7F, 0xA3, 0xDB, 0xAB, 0x01, - 0x64, 0x42, 0x1A, 0x60, 0x58, 0x4D, 0xB4, 0x78, 0xFF, 0xFF, 0xBD, 0xD9, 0xA3, 0xDB, 0xA3, 0x01, - 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, 0xA3, 0xD1, 0x40, 0x44, - 0x10, 0x2B, 0x16, 0x00, 0xBE, 0xD1, 0xFF, 0xFF, 0x15, 0x60, 0x80, 0xE7, 0x24, 0x40, 0x07, 0x27, - 0x04, 0x00, 0xAC, 0x4F, 0x10, 0xBC, 0x00, 0x7F, 0xA0, 0x5C, 0x64, 0x4A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x24, 0x40, 0x20, 0x27, 0x1D, 0x00, 0xAC, 0x4F, 0xEF, 0xB4, 0xA0, 0x5C, 0x19, 0x00, - 0x3F, 0x40, 0x02, 0x2B, 0x06, 0x00, 0x24, 0x47, 0x08, 0x2B, 0x13, 0x00, 0x07, 0xB4, 0x01, 0x36, - 0x11, 0x00, 0x15, 0x60, 0x22, 0x64, 0x24, 0x40, 0x08, 0x27, 0x80, 0xBC, 0x7C, 0x48, 0xBE, 0xD3, - 0xA0, 0x57, 0x60, 0x48, 0x64, 0x44, 0x80, 0xBC, 0xFF, 0xB4, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x69, 0x01, 0x01, 0x61, 0x1A, 0x60, 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x63, 0x01, - 0x28, 0xF3, 0xFF, 0xFF, 0x60, 0x47, 0x0F, 0xB4, 0x9A, 0x00, 0xFF, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x04, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0x27, 0x00, 0x0C, 0x64, 0x3F, 0x40, 0x02, 0x2B, 0x23, 0x00, - 0x29, 0xF1, 0x0F, 0x60, 0x9F, 0xFB, 0x5A, 0xD9, 0x1C, 0x60, 0xD0, 0x64, 0x7F, 0xFB, 0xFF, 0xFF, - 0x2D, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x22, 0x60, 0x22, 0x63, 0x09, 0x61, 0x1A, 0x60, - 0x58, 0x4D, 0x9C, 0x78, 0xFF, 0xFF, 0x77, 0x00, 0xD3, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xD3, 0xFB, - 0x06, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x08, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0x1D, 0x60, 0x4F, 0x64, 0x7F, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, - 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x29, 0xF3, 0x11, 0x60, 0xF9, 0x65, 0x60, 0x5C, 0x3F, 0x40, - 0x02, 0x2B, 0x13, 0x00, 0x00, 0x37, 0x11, 0x00, 0x01, 0x3B, 0x55, 0x00, 0x11, 0x60, 0x19, 0x63, - 0xFF, 0xB7, 0x60, 0x5C, 0xA3, 0xD3, 0x08, 0xA3, 0x00, 0x7E, 0xD0, 0x80, 0xD7, 0x80, 0x02, 0x03, - 0xF9, 0x02, 0x49, 0x00, 0xF4, 0xA3, 0xA3, 0xD3, 0x05, 0x00, 0x00, 0xBC, 0xF2, 0xA4, 0x43, 0x03, - 0x42, 0x07, 0x64, 0x44, 0x64, 0xFB, 0x82, 0xFB, 0xC8, 0x64, 0x81, 0xFB, 0x07, 0x64, 0x83, 0xFB, - 0x1D, 0x60, 0x4F, 0x64, 0x7F, 0xFB, 0xFF, 0xFF, 0xDF, 0xFE, 0x00, 0x64, 0x19, 0xFF, 0xF0, 0x60, - 0xC7, 0x78, 0xFF, 0xFF, 0x88, 0xFF, 0xBA, 0x60, 0x98, 0x71, 0x8D, 0xE2, 0x01, 0x11, 0x09, 0x00, - 0x71, 0x40, 0x80, 0x27, 0xFB, 0x01, 0x88, 0xE2, 0xBA, 0x60, 0xD0, 0x64, 0x03, 0xFB, 0x8D, 0xFF, - 0x15, 0x00, 0x8D, 0xFF, 0xB1, 0x60, 0xED, 0x63, 0x06, 0x60, 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, - 0x1D, 0x60, 0x3C, 0x63, 0x7F, 0xFD, 0xFF, 0xFF, 0x1A, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, - 0xA4, 0x60, 0x7C, 0x63, 0x06, 0x60, 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, 0x29, 0xF5, 0x1F, 0x60, - 0x26, 0x63, 0x1E, 0x60, 0xF8, 0x64, 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0x02, 0x64, 0xA3, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xF9, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x66, 0x01, 0x00, 0x36, - 0x67, 0x01, 0x01, 0x36, 0x69, 0x01, 0x02, 0x36, 0x7F, 0x01, 0x03, 0x36, 0x89, 0x01, 0x04, 0x36, - 0xC1, 0x01, 0x05, 0x36, 0xBF, 0x01, 0x06, 0x36, 0xF1, 0x01, 0x07, 0x36, 0xBB, 0x01, 0x08, 0x36, - 0x8A, 0x01, 0x09, 0x36, 0x0C, 0x00, 0x0A, 0x36, 0x0D, 0x00, 0x0B, 0x36, 0x0E, 0x00, 0x0C, 0x36, - 0x17, 0x00, 0x0D, 0x36, 0x0D, 0x00, 0x0E, 0x36, 0x1D, 0x00, 0x0F, 0x36, 0x41, 0x00, 0x02, 0x60, - 0x00, 0x64, 0x08, 0x00, 0x04, 0x60, 0x00, 0x64, 0x05, 0x00, 0x00, 0x60, 0x01, 0x64, 0x02, 0x00, - 0x20, 0x60, 0x00, 0x64, 0x32, 0x45, 0xB4, 0x85, 0x45, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0xB2, 0x60, 0xD0, 0x63, 0x06, 0x60, 0x0B, 0xFD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x3F, 0x40, 0x02, 0x2B, 0x15, 0x00, 0x88, 0xFF, 0xBA, 0x60, 0x98, 0x71, - 0x8D, 0xE2, 0x01, 0x11, 0x09, 0x00, 0x71, 0x40, 0x80, 0x27, 0xFB, 0x01, 0x88, 0xE2, 0xBA, 0x60, - 0xD0, 0x64, 0x03, 0xFB, 0x8D, 0xFF, 0x11, 0x00, 0x8D, 0xFF, 0x90, 0x60, 0x00, 0xE8, 0xB1, 0x60, - 0xED, 0x63, 0x04, 0x00, 0x91, 0x60, 0x00, 0xE8, 0xB2, 0x60, 0xB6, 0x63, 0x2A, 0xE8, 0x06, 0x60, - 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0xD2, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, 0xD2, 0xFB, 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0xD0, 0x60, - 0x00, 0xE8, 0x2A, 0xE8, 0xD9, 0x60, 0xFE, 0x64, 0x32, 0x45, 0xA4, 0x85, 0x45, 0x52, 0x99, 0xFF, - 0xA5, 0x4F, 0xFF, 0xB4, 0x07, 0xFB, 0x98, 0xFF, 0xA4, 0x60, 0x7C, 0x63, 0x06, 0x60, 0x0B, 0xFD, - 0x62, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x07, 0x02, - 0x62, 0xFF, 0x63, 0xFF, 0x64, 0xFF, 0x65, 0xFF, 0x66, 0xFF, 0xBF, 0xFE, 0xA1, 0xFF, 0x82, 0xFF, - 0x88, 0xFF, 0x6C, 0x40, 0x41, 0xFF, 0xC4, 0xE2, 0x43, 0xFF, 0x5C, 0x49, 0x08, 0xE1, 0xA3, 0x60, - 0x30, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x02, 0x02, 0xA1, 0xFF, 0xFF, 0xFF, - 0x82, 0xFF, 0x88, 0xFF, 0xA8, 0xE2, 0x01, 0x70, 0xAD, 0xF1, 0x00, 0x6B, 0x89, 0xFF, 0x64, 0x54, - 0x88, 0xFF, 0x9F, 0xFE, 0x02, 0x05, 0x64, 0x44, 0x60, 0x54, 0xCD, 0xE2, 0xC2, 0x64, 0x3A, 0xDB, - 0xBC, 0xFF, 0xB5, 0xFF, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xB4, 0x40, 0x46, 0x3C, 0x44, 0x00, 0xBC, - 0xFF, 0xFF, 0x06, 0x03, 0x27, 0x40, 0x26, 0x22, 0x03, 0x00, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0x27, 0x44, 0x20, 0x2A, 0x04, 0x00, 0xA0, 0x60, 0x00, 0xEA, 0xB0, 0x60, 0x00, 0xEA, 0x5C, 0x44, - 0x27, 0x44, 0x18, 0xB4, 0x40, 0x47, 0x00, 0xE1, 0xA4, 0xE2, 0xC4, 0xE2, 0x47, 0xFF, 0xB6, 0xFF, - 0xB7, 0xFF, 0xB4, 0xFF, 0x32, 0xF1, 0x08, 0x29, 0x09, 0x00, 0x64, 0x40, 0x07, 0x22, 0x06, 0x00, - 0x43, 0xFF, 0x27, 0x44, 0x10, 0xBC, 0x40, 0x47, 0x00, 0x64, 0x32, 0xFB, 0x31, 0x41, 0x3C, 0x44, - 0x01, 0xB1, 0x00, 0xBC, 0x0A, 0x02, 0x09, 0x03, 0x32, 0xF3, 0x00, 0x7C, 0x01, 0xB4, 0xFF, 0xFF, - 0x04, 0x03, 0x32, 0xF9, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xC8, 0x60, 0x09, 0x7D, 0x00, 0x60, - 0x00, 0x6B, 0x00, 0x64, 0x33, 0xFB, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0xE1, 0x30, 0x40, 0x02, 0x36, 0xA1, 0xFF, 0x83, 0xFF, 0x8D, 0xFF, 0x5C, 0x44, 0x5C, 0x43, - 0x5C, 0x42, 0x5C, 0x41, 0x5C, 0x40, 0xAC, 0xFF, 0xAD, 0xFF, 0xE7, 0xE1, 0xB3, 0x60, 0xBE, 0x78, - 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x03, 0x02, 0x28, 0xE2, 0x40, 0xFF, 0xA1, 0xFF, - 0x84, 0xFF, 0xC1, 0x60, 0x6B, 0x64, 0x40, 0x42, 0xB7, 0x60, 0xA2, 0x64, 0x40, 0x40, 0x9C, 0xF3, - 0x65, 0xFB, 0x0F, 0x60, 0xF6, 0x63, 0xA9, 0xF3, 0xBD, 0xDB, 0x00, 0x60, 0x9A, 0x64, 0xBD, 0xDB, - 0x02, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xA3, 0xDB, 0x5C, 0x49, 0x0A, 0x64, 0x40, 0x4B, 0x5C, 0x5C, - 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0x89, 0xFF, 0x03, 0x60, 0xFF, 0x73, 0x88, 0xFF, - 0xB7, 0x60, 0xA2, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x06, 0x02, 0x40, 0xFF, - 0x42, 0xFF, 0x43, 0xFF, 0x44, 0xFF, 0x45, 0xFF, 0xA1, 0xFF, 0x88, 0xFF, 0x85, 0xFF, 0x21, 0xE1, - 0x5C, 0x40, 0xC3, 0x60, 0x53, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, - 0x01, 0x02, 0xA1, 0xFF, 0x86, 0xFF, 0x88, 0xFF, 0x5C, 0x46, 0x5C, 0x49, 0x5C, 0x40, 0xE1, 0x60, - 0x58, 0x4F, 0x7A, 0x78, 0xFF, 0xFF, 0xD0, 0x60, 0x58, 0x4F, 0xA2, 0x78, 0xFF, 0xFF, 0xEB, 0x60, - 0x58, 0x4F, 0x10, 0x78, 0xFF, 0xFF, 0xDD, 0x60, 0x58, 0x4F, 0xF5, 0x78, 0xFF, 0xFF, 0x1F, 0xE1, - 0xA3, 0xFF, 0xCA, 0x60, 0x7E, 0x78, 0xFF, 0xFF, 0x03, 0xE1, 0xA3, 0xFF, 0x1E, 0x60, 0x9E, 0x63, - 0x17, 0xFD, 0xAE, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x86, 0xF3, 0x87, 0xF3, 0xDC, 0x81, - 0x00, 0x7C, 0x01, 0x00, 0x00, 0xFA, 0x60, 0x46, 0xFE, 0x63, 0xA3, 0xD8, 0xFE, 0x1F, 0xCD, 0x81, - 0xD8, 0x84, 0xF8, 0x02, 0x86, 0xF3, 0x87, 0xF5, 0xDC, 0x81, 0x80, 0x67, 0x40, 0x4A, 0x05, 0x18, - 0x2A, 0x43, 0x02, 0xFC, 0x5F, 0x8A, 0x00, 0xF4, 0xFA, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x88, 0xF3, - 0x06, 0x61, 0x00, 0x7C, 0x60, 0x46, 0xFE, 0x63, 0xA3, 0xD8, 0xFE, 0x1F, 0xCD, 0x81, 0x66, 0x44, - 0xD8, 0x84, 0xF8, 0x02, 0x09, 0x60, 0x2B, 0x7C, 0x88, 0xF3, 0x06, 0x61, 0x60, 0x46, 0x01, 0x63, - 0x76, 0xF8, 0x00, 0xFC, 0x63, 0x47, 0x06, 0xFA, 0x76, 0xF8, 0x03, 0x64, 0x77, 0xFA, 0xDF, 0x83, - 0x66, 0x44, 0xCD, 0x81, 0x02, 0xA6, 0xF4, 0x02, 0x2E, 0x58, 0xFF, 0xFF, 0x8A, 0xF1, 0x89, 0xF3, - 0x7C, 0x63, 0x8C, 0xFB, 0x60, 0x46, 0x01, 0xFC, 0xDC, 0x84, 0xD0, 0x80, 0x00, 0xFA, 0xFA, 0x04, - 0x8D, 0xFB, 0x60, 0x46, 0x00, 0x64, 0x00, 0xFA, 0x63, 0x44, 0x80, 0x7F, 0x01, 0xFA, 0x8A, 0xF3, - 0x89, 0xF1, 0xDC, 0x84, 0xD0, 0x84, 0x8B, 0xFB, 0x03, 0x60, 0x26, 0x61, 0xB5, 0x60, 0x58, 0x4D, - 0x8C, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x2E, 0xFB, 0x82, 0xFF, 0x40, 0x42, 0x87, 0xFF, 0x8B, 0xF3, - 0x93, 0xFB, 0x00, 0x64, 0x40, 0x50, 0x63, 0xFF, 0x60, 0xFF, 0x66, 0xFF, 0x65, 0xFF, 0x64, 0xFF, - 0x61, 0xFF, 0x62, 0xFF, 0x49, 0x60, 0x02, 0xE1, 0x52, 0x60, 0x02, 0xE1, 0x5C, 0x60, 0x02, 0xE1, - 0x65, 0x60, 0x02, 0xE1, 0x6B, 0x60, 0x02, 0xE1, 0x76, 0x60, 0x02, 0xE1, 0x41, 0x60, 0x02, 0xE1, - 0x04, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0x1F, 0x60, 0x64, 0x64, 0x7F, 0xFB, 0x2D, 0xFF, 0x0A, 0x61, - 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x8C, 0x78, 0xFF, 0xFF, 0xF0, 0x67, - 0x0E, 0xFA, 0x1F, 0x60, 0x0A, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x2B, 0x41, 0x4D, 0x8B, 0xFF, 0xFF, 0xEA, 0x02, 0x09, 0x61, - 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x8C, 0x78, 0xFF, 0xFF, 0x1E, 0x60, - 0xFE, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x2B, 0x41, 0x4D, 0x8B, 0xFF, 0xFF, 0xEC, 0x02, 0x1E, 0x60, 0xB0, 0x78, 0xFF, 0xFF, - 0x00, 0xEA, 0x00, 0xEB, 0x50, 0x60, 0x03, 0xEA, 0x51, 0x60, 0x13, 0xEA, 0x52, 0x60, 0x30, 0xEA, - 0x53, 0x60, 0x40, 0xEA, 0x54, 0x60, 0x52, 0xEA, 0x55, 0x60, 0x6D, 0xEA, 0x56, 0x60, 0x71, 0xEA, - 0x57, 0x60, 0x8B, 0xEA, 0x58, 0x60, 0x47, 0xEA, 0x59, 0x60, 0xA0, 0xEA, 0x5A, 0x60, 0xB2, 0xEA, - 0x5B, 0x60, 0xC1, 0xEA, 0x5C, 0x60, 0xD7, 0xEA, 0x5D, 0x60, 0xEB, 0xEA, 0x5E, 0x60, 0xA0, 0xEA, - 0x50, 0x60, 0x36, 0xEB, 0x51, 0x60, 0x37, 0xEB, 0x52, 0x60, 0x20, 0xEB, 0x53, 0x60, 0xE4, 0xEB, - 0x54, 0x60, 0x34, 0xEB, 0x55, 0x60, 0x58, 0xEB, 0x56, 0x60, 0x48, 0xEB, 0x57, 0x60, 0xD0, 0xEB, - 0x58, 0x60, 0xC3, 0xEB, 0x59, 0x60, 0xFC, 0xEB, 0x5A, 0x60, 0x34, 0xEB, 0x5B, 0x60, 0x58, 0xEB, - 0x5C, 0x60, 0xC0, 0xEB, 0x5D, 0x60, 0xD0, 0xEB, 0x5E, 0x60, 0x91, 0xEB, 0x00, 0xEA, 0x00, 0xEB, - 0xE0, 0x60, 0x02, 0xEA, 0xE0, 0x60, 0x03, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xB0, 0x60, 0x00, 0xEB, - 0xAB, 0x48, 0x40, 0x3B, 0x01, 0x00, 0xFC, 0x01, 0x00, 0xEB, 0x03, 0x60, 0x02, 0x64, 0xA0, 0xDB, - 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, - 0x00, 0xEA, 0x24, 0x44, 0xFF, 0xB4, 0x04, 0xFB, 0x50, 0x60, 0x00, 0x64, 0x05, 0xFB, 0x10, 0x60, - 0x10, 0x75, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x40, 0x00, 0x05, 0x60, - 0xF9, 0xF1, 0x42, 0x60, 0x08, 0x64, 0x09, 0x60, 0x19, 0x63, 0x64, 0x40, 0x01, 0x2B, 0x04, 0x00, - 0x42, 0x60, 0x09, 0x64, 0x0A, 0x60, 0x19, 0x63, 0x18, 0x60, 0x22, 0xFB, 0x04, 0x60, 0x00, 0xBC, - 0x18, 0x60, 0x1E, 0xFB, 0x18, 0x60, 0x1D, 0xFD, 0x1D, 0x60, 0x19, 0x63, 0x18, 0x60, 0x21, 0xFD, - 0x80, 0x60, 0x1C, 0x64, 0x3F, 0x40, 0x01, 0x2A, 0x02, 0x00, 0x60, 0x60, 0x1C, 0x64, 0x18, 0x60, - 0x23, 0xFB, 0x18, 0x60, 0x1F, 0xFB, 0x18, 0x60, 0x22, 0xF3, 0xA0, 0x50, 0xA0, 0x50, 0x0B, 0x60, - 0xF8, 0x63, 0xA3, 0xD1, 0x30, 0x60, 0x38, 0x61, 0xA1, 0xD3, 0xF8, 0xA3, 0x90, 0x84, 0xA2, 0xDB, - 0xA3, 0xD1, 0x59, 0xD3, 0x06, 0xA3, 0x90, 0x84, 0xA2, 0xDB, 0xA3, 0xD1, 0x59, 0xD3, 0xFE, 0xA3, - 0x90, 0x84, 0xA2, 0xDB, 0xA3, 0xD1, 0x59, 0xD3, 0xFF, 0xFF, 0x90, 0x84, 0xA2, 0xDB, 0x80, 0x60, - 0x58, 0xEC, 0x80, 0x60, 0x00, 0xED, 0x80, 0x60, 0x80, 0xEE, 0x40, 0xEC, 0x00, 0xED, 0x00, 0xEE, - 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, 0x07, 0xED, 0xC0, 0x60, 0x8F, 0xEE, 0xAD, 0x4F, 0xFA, 0xB4, - 0xA0, 0x5D, 0x00, 0xF3, 0x28, 0xFB, 0x40, 0x44, 0xA2, 0x60, 0xE8, 0x7C, 0x20, 0xF9, 0x1D, 0x60, - 0xD0, 0x7C, 0x21, 0xF9, 0x1D, 0x60, 0xE6, 0x7C, 0x22, 0xF9, 0x1E, 0x60, 0x44, 0x7C, 0x23, 0xF9, - 0x1E, 0x60, 0x55, 0x7C, 0x24, 0xF9, 0x1E, 0x60, 0x7F, 0x7C, 0x25, 0xF9, 0x1E, 0x60, 0x90, 0x7C, - 0x26, 0xF9, 0xD0, 0x60, 0x00, 0xE8, 0x28, 0xE8, 0x44, 0x60, 0x01, 0xE6, 0x00, 0x64, 0x40, 0x52, - 0x10, 0x60, 0x04, 0xE6, 0x08, 0x60, 0x06, 0x63, 0xFD, 0x60, 0x0C, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, - 0x0C, 0x18, 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xFA, 0xA3, 0xA3, 0xD3, 0x02, 0x60, - 0x00, 0x65, 0xF9, 0xA0, 0xFC, 0xA0, 0x09, 0x05, 0x00, 0x05, 0x21, 0x60, 0x00, 0x65, 0x3F, 0x43, - 0x21, 0x60, 0x00, 0x65, 0xC0, 0x60, 0x8F, 0xEE, 0x08, 0x00, 0x02, 0x60, 0x00, 0x65, 0x00, 0x60, - 0x00, 0x64, 0x18, 0xFB, 0x3F, 0x43, 0x11, 0x60, 0x10, 0xE6, 0xB7, 0x84, 0x40, 0x5F, 0x30, 0x60, - 0x20, 0x63, 0x3F, 0x40, 0x20, 0x27, 0x06, 0x00, 0x0F, 0x60, 0xFF, 0x64, 0xBD, 0xDB, 0x0F, 0x60, - 0xF0, 0x64, 0x03, 0x00, 0x0F, 0x64, 0xBD, 0xDB, 0x00, 0x64, 0xA3, 0xDB, 0x00, 0x60, 0x30, 0xE2, - 0x00, 0x60, 0x50, 0xE2, 0x00, 0x60, 0x79, 0xE2, 0x00, 0x60, 0x90, 0xE2, 0x01, 0x60, 0xD0, 0xE2, - 0x01, 0x60, 0xF0, 0xE2, 0x01, 0x60, 0xB0, 0xE2, 0x13, 0x64, 0xAD, 0xFB, 0x01, 0x60, 0x67, 0x64, - 0x37, 0xFB, 0x00, 0x60, 0x50, 0x64, 0x36, 0xFB, 0x09, 0x60, 0x2A, 0x64, 0x98, 0xFB, 0x82, 0xFF, - 0x92, 0xFF, 0x5C, 0x41, 0x5C, 0x46, 0x5C, 0x47, 0x00, 0xE1, 0xA4, 0x60, 0x7C, 0x63, 0x0C, 0x60, - 0x16, 0x64, 0xA0, 0xDD, 0x87, 0xFF, 0x97, 0xFF, 0x0C, 0x60, 0x02, 0x64, 0x40, 0x5A, 0x06, 0xA4, - 0x40, 0x5B, 0x5C, 0x5E, 0x13, 0x60, 0x52, 0xF3, 0x64, 0xFB, 0x3F, 0x40, 0x01, 0x22, 0x03, 0x00, - 0x80, 0x60, 0x37, 0x7C, 0x02, 0x00, 0x80, 0x60, 0x27, 0x7C, 0x16, 0x60, 0x55, 0xF9, 0x00, 0x60, - 0x80, 0x64, 0x89, 0xFB, 0x02, 0x60, 0x80, 0x66, 0x22, 0x60, 0x22, 0x64, 0x77, 0x60, 0x77, 0x63, - 0x00, 0xFA, 0x01, 0xFC, 0x00, 0xF0, 0x01, 0xF0, 0xD0, 0x80, 0xD3, 0x80, 0x1E, 0x02, 0x1D, 0x02, - 0x06, 0x60, 0x80, 0x65, 0x45, 0x4A, 0xAA, 0x46, 0x00, 0xFC, 0x01, 0xFA, 0xAA, 0x46, 0x00, 0xF0, - 0x2A, 0x41, 0x50, 0x65, 0xD3, 0x80, 0xCD, 0x84, 0x13, 0x03, 0x0A, 0x60, 0x80, 0x65, 0x45, 0x4A, - 0xAA, 0x46, 0x00, 0xFC, 0x01, 0xFA, 0xAA, 0x46, 0x00, 0xF0, 0x65, 0x41, 0xC8, 0x65, 0xD3, 0x80, - 0xCD, 0x84, 0x06, 0x03, 0x12, 0x60, 0x7F, 0x64, 0x03, 0x00, 0x10, 0x65, 0x02, 0x60, 0x7F, 0x64, - 0x65, 0x43, 0x86, 0xFD, 0x0F, 0x60, 0x5B, 0xFD, 0x07, 0x61, 0xC5, 0x81, 0xE1, 0x85, 0xD4, 0x84, - 0x8A, 0xFB, 0xDC, 0x84, 0x88, 0xFB, 0x0C, 0xA4, 0x87, 0xFB, 0x0F, 0x60, 0x5C, 0xFB, 0x1E, 0x60, - 0x58, 0x4E, 0xD3, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0x58, 0x4E, 0xB9, 0x78, 0xFF, 0xFF, 0x3F, 0x40, - 0x40, 0x26, 0x05, 0x00, 0x18, 0x60, 0x20, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x52, 0x00, 0x64, - 0x0A, 0x60, 0x7E, 0xFB, 0x1E, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0x5C, 0x51, 0x3F, 0x41, 0xA5, 0x4C, - 0x50, 0x37, 0x0B, 0x00, 0x01, 0xB9, 0x41, 0x5F, 0xB5, 0x60, 0x55, 0xE0, 0x05, 0x60, 0xF9, 0xF1, - 0xC0, 0x67, 0x90, 0x84, 0x3F, 0x40, 0x01, 0x26, 0xA0, 0x50, 0x06, 0x60, 0x08, 0xF3, 0x01, 0x60, - 0x01, 0x65, 0x01, 0x60, 0x02, 0x7C, 0xD4, 0x80, 0xD0, 0x80, 0x01, 0x03, 0x10, 0x02, 0x5A, 0xD1, - 0x5A, 0xD3, 0x3E, 0x60, 0x00, 0x66, 0xE0, 0x87, 0x40, 0x4A, 0xF7, 0x60, 0x8C, 0x61, 0x64, 0x44, - 0xC8, 0x84, 0x0C, 0x63, 0xAA, 0x46, 0x58, 0xD0, 0xAA, 0x46, 0x59, 0xD8, 0xFB, 0x1F, 0x08, 0x60, - 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xA3, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x07, 0x02, - 0x06, 0x02, 0x49, 0x60, 0x4C, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x41, 0x4B, 0x03, 0x00, 0x24, 0x60, - 0x84, 0x78, 0xFF, 0xFF, 0x2B, 0x41, 0x49, 0x60, 0x94, 0x7C, 0xD1, 0x80, 0xA1, 0xD2, 0x25, 0x05, - 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, 0x40, 0x4A, 0x59, 0xD2, 0x59, 0x8B, - 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0xEC, 0x18, 0xD4, 0x80, 0xEA, 0x18, - 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x67, 0x44, 0xC0, 0x84, 0xE0, 0x85, 0x2C, 0x44, - 0xD4, 0x80, 0x63, 0x41, 0x01, 0x06, 0x65, 0x44, 0xC8, 0x83, 0xAA, 0x46, 0x59, 0xD1, 0x27, 0xD8, - 0x5A, 0x87, 0xFC, 0x1F, 0xAA, 0x46, 0x2B, 0x41, 0xD5, 0x01, 0x49, 0x60, 0x94, 0x61, 0x41, 0x4B, - 0x2B, 0x41, 0x49, 0x60, 0x94, 0x7C, 0xD1, 0x80, 0xA1, 0xD2, 0x27, 0x05, 0x59, 0xD0, 0x60, 0x45, - 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, 0x40, 0x4A, 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, - 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0xEC, 0x18, 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, - 0xC3, 0x83, 0xF7, 0x01, 0x04, 0xA3, 0xA3, 0xD1, 0x5A, 0x88, 0x2C, 0x43, 0xD3, 0x80, 0xFF, 0xFF, - 0x01, 0x06, 0x64, 0x43, 0xCF, 0x83, 0xAA, 0x46, 0x60, 0xFE, 0x28, 0xD1, 0x5E, 0x88, 0x27, 0xD8, - 0x5A, 0x87, 0xFB, 0x1F, 0x20, 0xFE, 0xAA, 0x46, 0xD3, 0x01, 0xFA, 0x60, 0x39, 0x65, 0x24, 0x60, - 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x03, 0x03, 0xBE, 0xD1, 0x07, 0x60, 0xED, 0xF9, 0x07, 0x60, - 0xED, 0xF3, 0x20, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x10, 0x2A, 0x05, 0x00, 0x07, 0x60, 0xEC, 0xF9, - 0x07, 0x60, 0xEB, 0xF9, 0x12, 0x00, 0x04, 0xB0, 0x10, 0x60, 0x55, 0xF3, 0x0E, 0x03, 0x02, 0xBC, - 0xA2, 0xDB, 0x07, 0x60, 0xF5, 0xFB, 0x10, 0x60, 0xE8, 0xF3, 0x10, 0x60, 0xAC, 0xF3, 0x02, 0xBD, - 0x02, 0xBC, 0xA2, 0xDB, 0x65, 0x44, 0x10, 0x60, 0xE8, 0xFB, 0x07, 0x60, 0xED, 0xF3, 0x31, 0x41, - 0x60, 0x40, 0x20, 0x2A, 0x40, 0xB9, 0x40, 0x26, 0x03, 0x00, 0x60, 0x40, 0x01, 0x26, 0x80, 0xB9, - 0x41, 0x51, 0xFA, 0x60, 0x3A, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x03, 0x02, - 0x23, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x5B, 0xD3, 0xF8, 0x60, 0x3F, 0x65, 0x00, 0x7F, 0xE0, 0x84, - 0xE0, 0x84, 0x10, 0x60, 0xF7, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0xE0, 0x84, 0x10, 0x60, 0xFA, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x21, 0x60, 0xFA, 0x61, 0xA3, 0xD3, - 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0xA1, 0xD3, 0xE0, 0x9C, 0xA4, 0x84, - 0xB0, 0x84, 0xA1, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x59, 0xD3, - 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0x11, 0x60, 0x00, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x11, 0x60, - 0x03, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x11, 0x60, 0x06, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x11, 0x60, 0x09, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x11, 0x60, 0x0C, 0xF3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x11, 0x60, 0x0F, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x02, 0xA3, 0xA3, 0xD3, 0xF8, 0x60, 0x3F, 0x65, - 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x11, 0x60, 0x12, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xBD, 0xD3, 0xFF, 0xFF, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x11, 0x60, 0x15, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x22, 0x60, - 0x30, 0x61, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0xA1, 0xD3, - 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x00, 0x7F, 0xE0, 0x84, - 0xE0, 0x84, 0x59, 0xD3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0x11, 0x60, 0x1B, 0xF3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x11, 0x60, 0x1E, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x11, 0x60, 0x21, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xA3, 0xD3, - 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x11, 0x60, 0x24, 0xF3, 0xE0, 0x9C, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x11, 0x60, 0x27, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x11, 0x60, 0x2A, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x00, 0x60, 0x6A, 0x63, - 0x22, 0x60, 0x56, 0x61, 0x21, 0x60, 0xEA, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x11, 0x60, - 0x33, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, - 0x11, 0x60, 0x37, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x39, 0xF3, 0xFF, 0xFF, - 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x40, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, - 0x42, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x4E, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x52, 0xF3, 0xFF, 0xFF, - 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x54, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, - 0x5B, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x11, 0x60, 0x5D, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, - 0xA2, 0xDB, 0xFA, 0x60, 0x2C, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x0E, 0x03, - 0x63, 0x45, 0x23, 0x60, 0xF0, 0x63, 0x06, 0x61, 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x44, 0x0F, 0xB4, - 0xBD, 0xDB, 0x64, 0x47, 0x0F, 0xB4, 0xCD, 0x81, 0xBD, 0xDB, 0xF6, 0x02, 0xFA, 0x60, 0x30, 0x65, - 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x14, 0x03, 0xBD, 0xD3, 0x63, 0x46, 0x24, 0x60, - 0x88, 0x63, 0x12, 0x60, 0x53, 0xFB, 0xDA, 0x85, 0xBD, 0xDB, 0x0E, 0x61, 0xA6, 0xD1, 0xDA, 0x86, - 0x64, 0x44, 0xFF, 0xB4, 0xA5, 0xDB, 0xDA, 0x85, 0x64, 0x47, 0xFF, 0xB4, 0xCD, 0x81, 0xBD, 0xDB, - 0xF5, 0x02, 0xFA, 0x60, 0x31, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x22, 0x03, - 0xBD, 0xD3, 0x12, 0x60, 0x71, 0xFB, 0x5A, 0x81, 0x12, 0x60, 0x80, 0xFB, 0x5A, 0x82, 0x12, 0x60, - 0x8F, 0xFB, 0x5A, 0x83, 0x12, 0x60, 0x9E, 0xFB, 0x5A, 0x84, 0x0E, 0x61, 0xBD, 0xD1, 0xBD, 0xD5, - 0x64, 0x44, 0xFF, 0xB4, 0x21, 0xDB, 0x5A, 0x81, 0x64, 0x47, 0xFF, 0xB4, 0x22, 0xDB, 0x5A, 0x82, - 0x66, 0x44, 0xFF, 0xB4, 0x23, 0xDB, 0x5A, 0x83, 0x66, 0x47, 0xFF, 0xB4, 0x24, 0xDB, 0xCD, 0x81, - 0x5A, 0x84, 0xEC, 0x02, 0xFA, 0x60, 0x47, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, - 0x11, 0x03, 0x63, 0x45, 0x25, 0x60, 0x5A, 0x63, 0xA5, 0xD1, 0xDA, 0x85, 0xBD, 0xD9, 0x02, 0x61, - 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x47, 0x00, 0x7E, 0xBD, 0xDB, 0x64, 0x44, 0x00, 0x7E, 0xCD, 0x81, - 0xBD, 0xDB, 0xF6, 0x02, 0xFA, 0x60, 0x2E, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, - 0x1F, 0x03, 0x63, 0x46, 0xFC, 0xA3, 0xA3, 0xD3, 0x24, 0x60, 0x08, 0x63, 0xCC, 0x84, 0xE8, 0x84, - 0xCC, 0x81, 0x00, 0x36, 0x0D, 0x00, 0x63, 0x45, 0xA6, 0xD3, 0x5A, 0xD1, 0xDA, 0x86, 0xFF, 0xB4, - 0xE0, 0x84, 0xC4, 0x84, 0x5C, 0x90, 0xBD, 0xD9, 0xFD, 0x02, 0xCD, 0x81, 0x66, 0x42, 0xF4, 0x02, - 0x66, 0x42, 0x5A, 0xD3, 0x24, 0x60, 0x48, 0x65, 0xBD, 0xDB, 0xD7, 0x80, 0xFF, 0xFF, 0xFC, 0x02, - 0x25, 0x60, 0x6E, 0x61, 0xFA, 0x60, 0x46, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, - 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x2F, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, - 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x3E, 0x65, 0x24, 0x60, 0x58, 0x4D, - 0x97, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x3F, 0x65, 0x24, 0x60, - 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x40, 0x65, - 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, - 0x3B, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xFA, 0x60, - 0x48, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x10, 0x03, 0xBD, 0xD3, 0x25, 0x60, - 0xCA, 0x61, 0x0E, 0xB4, 0xBD, 0xD1, 0xA1, 0xDB, 0x64, 0x47, 0x0E, 0xB4, 0xA3, 0xD1, 0x59, 0xDB, - 0x64, 0x44, 0x0E, 0xB4, 0x59, 0xDB, 0x64, 0x47, 0x0E, 0xB4, 0x59, 0xDB, 0xFA, 0x60, 0x29, 0x65, - 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x04, 0xA3, 0xA3, 0xD3, 0x20, 0x60, - 0x00, 0x65, 0xB4, 0x84, 0x10, 0x60, 0x29, 0xFB, 0xFA, 0x60, 0x2A, 0x65, 0x24, 0x60, 0x58, 0x4D, - 0x97, 0x78, 0xFF, 0xFF, 0x39, 0x03, 0x04, 0xA3, 0xBD, 0xD1, 0x10, 0x60, 0xCD, 0xF3, 0x64, 0x41, - 0x64, 0x5E, 0xA2, 0xDB, 0x64, 0x47, 0x5A, 0xD3, 0x60, 0x5C, 0x64, 0x5F, 0xA2, 0xDB, 0x10, 0x60, - 0xE3, 0xF3, 0xFF, 0x60, 0xC0, 0xB5, 0x61, 0x40, 0x80, 0x27, 0x05, 0x00, 0xE9, 0x87, 0x3F, 0xB4, - 0xB4, 0x84, 0xA2, 0xDB, 0x1E, 0x00, 0x65, 0x44, 0xA2, 0xDB, 0x10, 0x60, 0xDC, 0xF1, 0xE1, 0x80, - 0xF9, 0x81, 0xE1, 0x80, 0xF9, 0x84, 0xFF, 0x60, 0x80, 0xB4, 0xC0, 0x9C, 0xA2, 0xD9, 0x10, 0x60, - 0xDF, 0xF1, 0xFF, 0xFF, 0xC0, 0x9C, 0xA2, 0xD9, 0x10, 0x60, 0xE6, 0xF1, 0x01, 0x7E, 0x60, 0x47, - 0x60, 0x41, 0x64, 0x44, 0xFE, 0x60, 0x00, 0xB5, 0xC1, 0x84, 0x01, 0x60, 0xFF, 0xB4, 0xB4, 0x84, - 0xA2, 0xDB, 0xDB, 0x83, 0x11, 0x60, 0x62, 0xFD, 0xFA, 0x60, 0x2B, 0x65, 0x24, 0x60, 0x58, 0x4D, - 0x97, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x04, 0xA3, 0xBD, 0xD3, 0x10, 0x60, 0xD0, 0xFB, 0xA3, 0xD3, - 0x10, 0x60, 0x94, 0xFB, 0xFA, 0x60, 0x3C, 0x65, 0x24, 0x60, 0x58, 0x4D, 0x97, 0x78, 0xFF, 0xFF, - 0x1F, 0x03, 0xA3, 0xD3, 0xFC, 0x60, 0xFC, 0x65, 0xA4, 0x84, 0x60, 0x5C, 0x00, 0x7E, 0xC0, 0x60, - 0x00, 0xA0, 0x60, 0x43, 0x07, 0x04, 0x10, 0x60, 0xD4, 0xF3, 0xFF, 0xFF, 0x03, 0x60, 0xFF, 0xB4, - 0x3C, 0x94, 0xA2, 0xDB, 0x21, 0x60, 0x30, 0x61, 0x64, 0x44, 0x00, 0x7F, 0xC0, 0xA0, 0x60, 0x47, - 0x07, 0x04, 0x60, 0x43, 0xA1, 0xD3, 0xFF, 0xFF, 0x03, 0x60, 0xFF, 0xB4, 0x3C, 0x94, 0xA1, 0xDB, - 0xB8, 0xFE, 0xB9, 0xFE, 0xBA, 0xFE, 0xBB, 0xFE, 0xBD, 0xFE, 0xBF, 0xFE, 0x15, 0x60, 0xCB, 0xF3, - 0x12, 0x63, 0x60, 0x40, 0x01, 0x27, 0x04, 0x00, 0x0B, 0x60, 0xEA, 0x62, 0x5A, 0xDF, 0xFE, 0x1F, - 0x1F, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x06, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0x07, 0x18, - 0xD4, 0x80, 0x05, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0xDB, 0x83, 0x00, 0xBC, - 0x2D, 0x58, 0xFF, 0xFF, 0x86, 0xFD, 0xB0, 0x26, 0x00, 0x00, 0x06, 0x00, 0x10, 0xFD, 0x32, 0x01, - 0x00, 0x00, 0x02, 0x00, 0x14, 0xFD, 0x94, 0x2B, 0x00, 0x00, 0x0A, 0x00, 0x41, 0xFA, 0x46, 0x23, - 0x00, 0x00, 0x22, 0x00, 0x42, 0xFA, 0x68, 0x23, 0x00, 0x00, 0x22, 0x00, 0x43, 0xFA, 0x8A, 0x23, - 0x00, 0x00, 0x22, 0x00, 0x44, 0xFA, 0xAC, 0x23, 0x00, 0x00, 0x22, 0x00, 0x45, 0xFA, 0xCE, 0x23, - 0x00, 0x00, 0x22, 0x00, 0x25, 0xFD, 0x62, 0x01, 0x00, 0x00, 0x02, 0x00, - -}; /* fw_image_3_data */ - -static const hcf_8 fw_image_4_data[] = { - 0x6C, 0x40, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x41, 0xFF, 0x33, 0xF3, 0x32, 0x11, 0x31, 0x18, 0x40, 0x64, 0x3A, 0xDB, 0x1C, 0x00, 0xFF, 0xFF, - 0xC4, 0xE2, 0x27, 0x44, 0x20, 0x2A, 0x01, 0x00, 0xFF, 0xFF, 0x42, 0x64, 0x3A, 0xDB, 0x23, 0x00, - 0x41, 0xFF, 0xA3, 0x60, 0x34, 0x78, 0xE2, 0xFE, 0x40, 0x49, 0x02, 0x60, 0x01, 0xE1, 0x1D, 0x00, - 0x44, 0xFF, 0x1B, 0x09, 0x29, 0x44, 0x10, 0x2A, 0x04, 0x74, 0xCD, 0xE2, 0x10, 0x65, 0x0B, 0x00, - 0xA4, 0x60, 0x49, 0x78, 0xA4, 0xE2, 0x29, 0x44, 0x20, 0x2A, 0x0D, 0x00, 0x20, 0xAC, 0xEC, 0x01, - 0xA4, 0x60, 0x49, 0x78, 0x46, 0xFF, 0xB4, 0x84, 0x40, 0x49, 0xA1, 0xFF, 0xFF, 0xFF, 0x80, 0x3E, - 0xA4, 0x60, 0x49, 0x78, 0xFF, 0xFF, 0x62, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, - 0xAA, 0x60, 0xF4, 0x78, 0x4C, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAA, 0x60, 0xFB, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC4, 0xE2, 0x84, 0xFF, 0x22, 0x58, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA4, 0x60, 0xB9, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0xE1, 0x01, 0xFF, 0xFF, - 0x10, 0x29, 0xFA, 0x01, 0xE4, 0xE2, 0xAA, 0x60, 0xB0, 0x78, 0x94, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC1, 0x60, 0x35, 0x78, 0x64, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAA, 0x60, 0x97, 0x78, 0xAC, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x80, 0x29, 0xE2, 0x01, 0xAA, 0x60, 0xF3, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB4, 0x60, 0xEF, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB5, 0x60, 0x1C, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0x8B, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xBE, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xBE, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB6, 0x60, 0x9D, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x83, 0x64, 0x80, 0x29, 0x09, 0xFB, 0xB4, 0x60, 0xB7, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, - 0x98, 0xFF, 0xC2, 0x60, 0x69, 0x78, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC1, 0x60, 0xE0, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x60, 0x3D, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xB8, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB7, 0x60, 0x96, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA1, 0xFF, 0x98, 0xFF, 0x83, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC3, 0x60, 0x58, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xB0, 0xFF, 0xB1, 0xFF, 0x40, 0xFF, 0x43, 0xFF, 0xC3, 0x60, 0x53, 0x78, 0x44, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x58, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x1C, 0x60, 0x28, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x53, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x52, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xCA, 0x60, 0x76, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE8, 0x60, 0x6C, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x42, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x85, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0x7E, 0x78, 0x24, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE6, 0x60, 0x2A, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0x7E, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0x7E, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0x7E, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0x9F, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xE3, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xC7, 0x78, 0x28, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xC7, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xC7, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x60, 0xC7, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x87, 0x64, 0x80, 0x29, 0x09, 0xFB, 0x47, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0xF7, 0xA7, 0xFF, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA2, 0x60, 0x00, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2E, 0x60, 0x54, 0x63, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, - 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, - 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, - 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, - 0x2F, 0x44, 0xBD, 0xDB, 0x17, 0x60, 0x24, 0xFD, 0x2F, 0x60, 0x74, 0x63, 0x17, 0x60, 0x25, 0xFD, - 0x30, 0x44, 0x17, 0x60, 0x26, 0xFB, 0x31, 0x44, 0x17, 0x60, 0x27, 0xFB, 0x32, 0x44, 0x17, 0x60, - 0x28, 0xFB, 0x33, 0x44, 0x17, 0x60, 0x29, 0xFB, 0x81, 0xFF, 0x91, 0xFF, 0x58, 0x51, 0x44, 0x00, - 0x82, 0xFF, 0x92, 0xFF, 0x58, 0x51, 0x40, 0x00, 0x83, 0xFF, 0x93, 0xFF, 0x58, 0x51, 0x3C, 0x00, - 0x84, 0xFF, 0x94, 0xFF, 0x58, 0x51, 0x38, 0x00, 0x85, 0xFF, 0x95, 0xFF, 0x58, 0x51, 0x34, 0x00, - 0x86, 0xFF, 0x96, 0xFF, 0x58, 0x51, 0x30, 0x00, 0x87, 0xFF, 0x97, 0xFF, 0x58, 0x51, 0x2C, 0x00, - 0x80, 0xFF, 0x90, 0xFF, 0x99, 0xFF, 0x17, 0x60, 0x24, 0xF1, 0x30, 0x44, 0x64, 0x43, 0xBD, 0xDB, - 0x31, 0x44, 0xBD, 0xDB, 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, - 0x35, 0x44, 0xBD, 0xDB, 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, - 0x39, 0x44, 0xBD, 0xDB, 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, - 0x3D, 0x44, 0xBD, 0xDB, 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0xEE, 0x60, 0x48, 0x64, - 0x0A, 0xFB, 0x40, 0x21, 0xFE, 0x01, 0x70, 0x00, 0x42, 0x50, 0x40, 0x53, 0x17, 0x60, 0x25, 0xF3, - 0xFF, 0xFF, 0x40, 0x52, 0x33, 0x44, 0x32, 0x42, 0xA2, 0xDB, 0xDA, 0x82, 0xA2, 0xDD, 0xDA, 0x83, - 0x65, 0x44, 0xBD, 0xDB, 0x61, 0x44, 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0xBD, 0xD9, 0x30, 0x44, - 0xBD, 0xDB, 0x99, 0xFF, 0xA4, 0x4C, 0xBD, 0xDB, 0xA5, 0x4C, 0xBD, 0xDB, 0xA0, 0x4C, 0xBD, 0xDB, - 0xA1, 0x4C, 0xBD, 0xDB, 0x98, 0xFF, 0x17, 0x60, 0x25, 0xFD, 0x17, 0x60, 0x26, 0xF3, 0xFF, 0xFF, - 0x40, 0x50, 0x17, 0x60, 0x28, 0xF3, 0xFF, 0xFF, 0x40, 0x52, 0x17, 0x60, 0x29, 0xF3, 0xFF, 0xFF, - 0x40, 0x53, 0x31, 0x41, 0x17, 0x60, 0x27, 0xF3, 0xFF, 0xFF, 0x40, 0x51, 0x17, 0x60, 0x24, 0xF3, - 0xFF, 0xFF, 0x60, 0x43, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, - 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, - 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, - 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, - 0x2F, 0x44, 0xBD, 0xDB, 0x17, 0x60, 0x24, 0xFD, 0x61, 0x58, 0xFF, 0xFF, 0x28, 0x60, 0x76, 0x63, - 0xA3, 0xD3, 0x33, 0x5C, 0x02, 0xA4, 0xBD, 0xDB, 0xFE, 0xB4, 0xE0, 0x85, 0xC4, 0x85, 0x47, 0xD9, - 0x34, 0x44, 0x5B, 0xDB, 0x44, 0xF3, 0x5B, 0xDB, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, 0xFF, 0x01, - 0x82, 0xE1, 0x80, 0xFF, 0x90, 0xFF, 0x88, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, 0x41, 0xFF, - 0x00, 0x60, 0x03, 0xE1, 0x21, 0x46, 0x66, 0x45, 0x00, 0xF4, 0x2E, 0x44, 0x09, 0xFA, 0x6A, 0x61, - 0x7F, 0x60, 0xFE, 0x63, 0xA1, 0xFF, 0x9A, 0xFF, 0x05, 0x11, 0x0A, 0x00, 0x00, 0xF4, 0x01, 0xF2, - 0x17, 0x18, 0x7A, 0x61, 0x02, 0x25, 0x04, 0x00, 0x6C, 0x44, 0x7A, 0xDA, 0xFB, 0x1C, 0xF6, 0x11, - 0xD9, 0x81, 0x41, 0xFF, 0x02, 0x1C, 0x00, 0xF4, 0xDA, 0x82, 0x41, 0xFF, 0xC9, 0x81, 0xCB, 0x83, - 0x6C, 0x44, 0x5A, 0xDA, 0x02, 0x1C, 0x00, 0xF4, 0x81, 0xF2, 0x6C, 0x44, 0x5A, 0xDA, 0xCB, 0x83, - 0x02, 0x74, 0x02, 0x60, 0x04, 0xE1, 0x80, 0x60, 0x00, 0x61, 0x5D, 0x93, 0xB5, 0xFF, 0x98, 0xFF, - 0x26, 0x44, 0xFD, 0xB4, 0x84, 0xBC, 0x40, 0x46, 0x65, 0x46, 0x00, 0x64, 0x23, 0xFA, 0x3F, 0xFC, - 0x63, 0x47, 0x0A, 0x63, 0x0F, 0xFC, 0x00, 0xF4, 0x08, 0xFA, 0xCB, 0xFE, 0x18, 0xE1, 0x44, 0xFF, - 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xE2, 0xFE, 0x03, 0x04, 0xA3, 0x60, 0x99, 0x78, 0xFF, 0xFF, - 0xE0, 0xFE, 0x03, 0x04, 0xA3, 0x60, 0xAF, 0x78, 0xFF, 0xFF, 0xE1, 0xFE, 0x07, 0x05, 0x9F, 0xFE, - 0x03, 0x04, 0x18, 0x60, 0x24, 0x78, 0xFF, 0xFF, 0x43, 0xFF, 0xA9, 0x01, 0xD3, 0xF3, 0xFF, 0xFF, - 0x01, 0xB4, 0xFF, 0xFF, 0x08, 0x24, 0x15, 0x00, 0x29, 0x44, 0x08, 0x26, 0xE1, 0x01, 0x72, 0x44, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x94, 0xF3, 0xE8, 0x85, 0xFF, 0xB7, - 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x85, 0x73, 0x44, 0xD4, 0x84, 0x10, 0x65, 0xD4, 0x80, 0xFF, 0xFF, - 0x37, 0x04, 0x3F, 0x40, 0x40, 0x26, 0x09, 0x00, 0x18, 0x60, 0x1C, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, - 0xA4, 0x52, 0x5A, 0xD3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x50, 0xBC, 0xF3, 0xD2, 0xF1, 0x01, 0xA8, - 0x07, 0xA8, 0x0A, 0x03, 0x09, 0x03, 0x64, 0x40, 0x01, 0x26, 0x09, 0x00, 0x18, 0x60, 0x07, 0xF3, - 0xFF, 0xFF, 0x01, 0xB4, 0xFF, 0xFF, 0x03, 0x02, 0xAD, 0x4F, 0xFA, 0xB4, 0xA0, 0x5D, 0xAE, 0x4F, - 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x3F, 0x40, 0x02, 0x2B, 0x11, 0x00, 0x0C, 0x60, 0x00, 0x62, - 0x00, 0x60, 0x71, 0x7C, 0x00, 0x60, 0xB1, 0x65, 0x1A, 0x60, 0x58, 0x4D, 0x88, 0x78, 0xFF, 0xFF, - 0x08, 0xE1, 0x62, 0xFF, 0xA3, 0xFF, 0xFF, 0xFF, 0xA2, 0xFF, 0x02, 0x60, 0x08, 0xE1, 0xBD, 0xFE, - 0x97, 0x01, 0x21, 0x46, 0x01, 0x5D, 0x5C, 0x62, 0x03, 0xE1, 0x44, 0xFF, 0xA1, 0xFF, 0x9A, 0xFF, - 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x62, 0x62, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0xA1, 0xFF, - 0x5A, 0xDC, 0x12, 0xE1, 0x02, 0x60, 0x01, 0xE1, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, - 0x40, 0x2B, 0x03, 0x00, 0x29, 0x40, 0x20, 0x27, 0x97, 0x00, 0xC8, 0x74, 0xCD, 0xE2, 0x29, 0x44, - 0x08, 0xBC, 0x40, 0x49, 0x44, 0xFF, 0x05, 0xE1, 0x28, 0x40, 0x08, 0x2A, 0x07, 0x00, 0x28, 0x40, - 0x48, 0x36, 0x04, 0x00, 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x29, 0x44, 0xFF, 0x60, - 0xEF, 0x65, 0x24, 0x89, 0x40, 0x27, 0x3F, 0x00, 0x00, 0x00, 0x29, 0x40, 0x80, 0x27, 0x0B, 0x00, - 0x07, 0x61, 0xA1, 0xFF, 0xCD, 0x81, 0x04, 0x25, 0x61, 0x00, 0x87, 0x4C, 0xFB, 0x02, 0xF3, 0x60, - 0xA0, 0x64, 0x80, 0x4C, 0x07, 0x00, 0xA1, 0xFF, 0x9C, 0x4C, 0x9C, 0x4C, 0x9C, 0x4D, 0x05, 0x60, - 0xCF, 0x64, 0x80, 0x4C, 0x28, 0x40, 0x40, 0x2B, 0x05, 0x00, 0x29, 0x40, 0x20, 0x27, 0x02, 0x00, - 0x15, 0x60, 0x6F, 0x6B, 0x04, 0x25, 0x4A, 0x00, 0x30, 0x64, 0x3A, 0xDB, 0x44, 0xFF, 0x04, 0x25, - 0x45, 0x00, 0x04, 0x60, 0x00, 0x65, 0x25, 0x44, 0xB4, 0x84, 0x80, 0x4E, 0x2D, 0x41, 0x04, 0x25, - 0x3D, 0x00, 0x61, 0x4C, 0x00, 0x60, 0x8A, 0x65, 0xC5, 0x81, 0x61, 0x54, 0xA1, 0xFF, 0xFF, 0xFF, - 0x04, 0x25, 0x34, 0x00, 0x67, 0x4E, 0x07, 0x64, 0x1C, 0xFB, 0x00, 0xE1, 0x02, 0x60, 0x05, 0xE1, - 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, 0x40, 0x27, 0x0A, 0x00, 0x1C, 0x65, 0x28, 0x40, - 0xA4, 0x36, 0x14, 0x65, 0x23, 0x44, 0xC4, 0x84, 0x28, 0x40, 0x08, 0x2A, 0x0C, 0x00, 0x07, 0x00, - 0x23, 0x44, 0x1C, 0xA4, 0x29, 0x40, 0x20, 0x27, 0x02, 0x00, 0x11, 0x60, 0x0F, 0x6B, 0x3C, 0x46, - 0x98, 0xF0, 0x23, 0x44, 0xC4, 0x84, 0x06, 0x74, 0x25, 0x5C, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xB0, 0x84, 0x80, 0x4C, 0x9C, 0x4C, 0x44, 0xFF, 0x18, 0xE1, 0x0A, 0x64, 0x1E, 0x74, - 0x02, 0x60, 0x05, 0xE1, 0x40, 0x40, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xC4, 0xE2, 0x27, 0x44, - 0x20, 0x2A, 0x06, 0x00, 0x42, 0x64, 0x3A, 0xDB, 0x67, 0x4C, 0xB0, 0x60, 0x80, 0x78, 0xFF, 0xFF, - 0x41, 0x64, 0x3A, 0xDB, 0x62, 0xFF, 0x08, 0xE1, 0xE2, 0xFE, 0x72, 0x52, 0xA1, 0xFF, 0x98, 0xFF, - 0x80, 0x3E, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, 0x08, 0x27, 0x66, 0x01, 0x3C, 0x46, - 0x8B, 0xFF, 0x84, 0x60, 0x00, 0xE4, 0x0F, 0x60, 0x92, 0x64, 0xC9, 0x60, 0x58, 0x4F, 0x10, 0x78, - 0xFF, 0xFF, 0x3F, 0xF2, 0x00, 0x60, 0x18, 0x70, 0x18, 0x71, 0x20, 0x72, 0x00, 0xF2, 0x60, 0x53, - 0x20, 0xE1, 0xA1, 0xFF, 0x88, 0x75, 0x00, 0xE1, 0xFF, 0xFF, 0x60, 0x50, 0x75, 0x44, 0x12, 0x71, - 0x6E, 0x72, 0x81, 0x75, 0xFF, 0xFF, 0x88, 0xFF, 0xA3, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0x32, 0xF3, - 0x08, 0x29, 0x0A, 0x00, 0x60, 0x40, 0x07, 0x22, 0x07, 0x00, 0xFE, 0xB4, 0x32, 0xFB, 0x27, 0x44, - 0x10, 0xBC, 0xF7, 0xB4, 0x40, 0x47, 0x43, 0xFF, 0x00, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, - 0x31, 0x40, 0x01, 0x2A, 0x04, 0x00, 0x00, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x0A, 0xE1, 0xE5, 0xFE, - 0x27, 0x05, 0x9F, 0xFE, 0x12, 0x05, 0x31, 0x41, 0x40, 0x2A, 0x0F, 0x00, 0x07, 0x60, 0xEA, 0xF1, - 0xAE, 0x4C, 0x90, 0x80, 0x10, 0x2A, 0x09, 0x00, 0x7F, 0xB1, 0x07, 0x60, 0xEA, 0xFB, 0x60, 0x40, - 0x10, 0x2A, 0x80, 0xB9, 0x41, 0x51, 0xDF, 0xFE, 0x19, 0xFF, 0x27, 0x44, 0x10, 0x26, 0x13, 0x00, - 0x9F, 0xFE, 0x02, 0x04, 0x40, 0xE1, 0x06, 0x00, 0x7C, 0xE1, 0x31, 0x44, 0x01, 0x2A, 0x02, 0x00, - 0x04, 0x0A, 0xFD, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0xAF, 0x60, 0x7B, 0x78, 0xFF, 0xFF, - 0xAA, 0x60, 0xC0, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x08, 0x26, 0xFF, 0xFF, 0xC0, 0x60, 0xEA, 0x78, - 0xFF, 0xFF, 0x48, 0xF3, 0x32, 0xF1, 0x00, 0x63, 0x64, 0x40, 0x07, 0x26, 0x03, 0x00, 0xA5, 0x60, - 0x6C, 0x78, 0xFF, 0xFF, 0x31, 0x40, 0x08, 0x26, 0xF1, 0x01, 0xCD, 0xE2, 0x84, 0xE1, 0x70, 0x41, - 0xAD, 0x80, 0x71, 0x40, 0x80, 0x27, 0xEA, 0x12, 0x03, 0x03, 0xC1, 0x60, 0x3B, 0x78, 0xFF, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0xC4, 0xE2, 0x32, 0xFD, 0x60, 0x40, 0x01, 0x2A, 0xDC, 0x01, 0x3C, 0x46, - 0x3E, 0xF2, 0x2A, 0xF0, 0x27, 0x41, 0x44, 0x48, 0x20, 0xB9, 0x01, 0xB4, 0xF7, 0xB1, 0x0A, 0x03, - 0x64, 0x40, 0x08, 0x27, 0x07, 0x00, 0x0F, 0x60, 0xEE, 0x63, 0x00, 0x64, 0x45, 0xFB, 0x46, 0xFB, - 0xBD, 0xDB, 0xA3, 0xDB, 0xCB, 0x0A, 0xCA, 0x11, 0x41, 0x47, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x10, 0x26, 0x04, 0x00, 0x01, 0x2A, 0x05, 0x00, 0x10, 0x2B, 0x03, 0x00, 0x29, 0x47, 0x20, 0xBF, - 0x40, 0x49, 0x05, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0x2A, 0xE8, 0x3C, 0x46, 0x00, 0x63, 0x32, 0xFD, - 0x43, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2A, 0x03, 0x00, 0xA8, 0x60, 0x76, 0x78, - 0xFF, 0xFF, 0x64, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x0E, 0x00, 0x1F, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x40, 0x2B, 0x09, 0x00, 0x15, 0x60, 0xDD, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x2A, - 0x03, 0x00, 0xA9, 0x60, 0x81, 0x78, 0xFF, 0xFF, 0x1F, 0xF2, 0xC0, 0x60, 0x00, 0x65, 0xA4, 0x9C, - 0x3F, 0x60, 0xCF, 0x65, 0x29, 0x44, 0xA4, 0x84, 0x30, 0x89, 0x15, 0x60, 0xD9, 0xF3, 0xFF, 0xFF, - 0x15, 0x60, 0xD8, 0xFB, 0x1F, 0xF2, 0x39, 0xF1, 0xE0, 0x60, 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, - 0x1F, 0xB4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, - 0x60, 0x47, 0xB4, 0x81, 0x07, 0x60, 0xEB, 0xF1, 0xFF, 0xFF, 0xB1, 0x8C, 0x29, 0x40, 0x40, 0x2B, - 0x10, 0x00, 0x22, 0x60, 0xC6, 0x65, 0x60, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, - 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x01, 0x60, 0x09, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, - 0x14, 0x00, 0x22, 0x60, 0xC6, 0x65, 0x60, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, - 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, - 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, 0x00, 0xE1, 0x84, 0xFF, 0xC1, 0x60, - 0x6B, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x0D, 0x00, 0xE5, 0xFE, 0x03, 0x04, 0xAA, 0x60, 0xC0, 0x78, - 0xFF, 0xFF, 0x32, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x07, 0x22, 0x43, 0xFF, 0xA4, 0x60, 0x7C, 0x78, - 0xFF, 0xFF, 0x3C, 0x44, 0x0B, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x0A, 0xE1, 0x1C, 0x42, 0x22, 0x46, - 0x13, 0xF2, 0xFF, 0x65, 0x60, 0x47, 0x2A, 0xF2, 0x40, 0x45, 0x40, 0x48, 0x04, 0x2B, 0x13, 0x00, - 0x16, 0xF2, 0x1D, 0xF2, 0x40, 0x43, 0x0F, 0xF2, 0x40, 0x4D, 0x0F, 0x64, 0x14, 0xF0, 0x35, 0xF2, - 0xA0, 0x82, 0x0F, 0xB4, 0xCA, 0x85, 0xD4, 0x80, 0x10, 0xF2, 0x01, 0x02, 0x2B, 0xFA, 0x27, 0x44, - 0x40, 0xBC, 0x40, 0x47, 0x13, 0x00, 0x17, 0xF2, 0x2C, 0xF0, 0x40, 0x43, 0x1B, 0xF2, 0x1D, 0xFA, - 0x40, 0x4D, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0xAB, 0xFC, 0x05, 0x00, 0x28, 0x40, 0xA4, 0x36, - 0x02, 0x00, 0x11, 0xF2, 0x2B, 0xFA, 0x27, 0x44, 0xBF, 0xB4, 0x40, 0x47, 0xF0, 0xFE, 0xAF, 0x60, - 0x85, 0x78, 0xFF, 0xFF, 0x22, 0x46, 0x2C, 0xF0, 0x27, 0x44, 0xDF, 0xB4, 0x40, 0x47, 0x64, 0x40, - 0x01, 0x26, 0x01, 0x00, 0x01, 0x00, 0x11, 0x00, 0x2A, 0xF0, 0x01, 0x65, 0x64, 0x40, 0xA4, 0x3A, - 0x04, 0x65, 0x27, 0x44, 0x34, 0x87, 0x36, 0xF3, 0xFF, 0xFF, 0x60, 0x56, 0xAD, 0xE2, 0x04, 0x64, - 0x3A, 0xDB, 0x69, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x06, 0x64, 0x3A, 0xDB, 0x22, 0x46, - 0x01, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xC1, 0x60, 0x44, 0x78, 0xFF, 0xFF, 0x28, 0x40, 0xC4, 0x3A, - 0x0C, 0x00, 0x27, 0x44, 0xFD, 0xB4, 0x40, 0x47, 0xA8, 0xE2, 0x05, 0xE1, 0x01, 0x60, 0x08, 0xE1, - 0x2A, 0xE8, 0x3C, 0x46, 0xA5, 0x60, 0x1C, 0x78, 0xFF, 0xFF, 0x3F, 0x40, 0x01, 0x2B, 0x05, 0x00, - 0x67, 0x4C, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x07, 0x60, 0xEC, 0xF1, 0x1F, 0xF2, - 0x2A, 0xE8, 0xB0, 0x81, 0x29, 0x40, 0x40, 0x2B, 0x14, 0x00, 0x61, 0x4C, 0x22, 0x60, 0xC6, 0x65, - 0x61, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, - 0x01, 0x60, 0x09, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0xFF, 0x60, 0xF2, 0x64, 0x64, 0x4C, 0x40, 0x43, - 0x18, 0x00, 0x29, 0x47, 0x80, 0xB7, 0x34, 0x94, 0x60, 0x4C, 0x22, 0x60, 0xC6, 0x65, 0x61, 0x47, - 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, - 0x69, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, - 0x60, 0x4C, 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0x28, 0x45, 0xBF, 0x60, 0xFF, 0x64, 0x24, 0x88, - 0xC4, 0xE2, 0x08, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x2A, 0x44, 0x72, 0x45, 0x24, 0xFA, 0x94, 0xF3, - 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, 0x94, 0xF9, 0x25, 0xFA, - 0x95, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x95, 0xFB, 0x28, 0xFA, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, - 0x96, 0xFB, 0x29, 0xFA, 0x24, 0x44, 0x04, 0x2A, 0x06, 0x00, 0x28, 0x40, 0xA4, 0x36, 0x03, 0x00, - 0xA7, 0x60, 0x46, 0x78, 0xFF, 0xFF, 0x94, 0xFC, 0x13, 0x60, 0x4A, 0xF1, 0x28, 0x44, 0x08, 0x2A, - 0x51, 0x00, 0x03, 0x2B, 0x01, 0x00, 0x4E, 0x00, 0x64, 0x40, 0x00, 0x36, 0x4B, 0x00, 0x32, 0xF2, - 0x2F, 0xF0, 0x50, 0xFE, 0x01, 0x2A, 0x03, 0x00, 0x01, 0x61, 0x8E, 0xF3, 0x31, 0x00, 0xD0, 0x80, - 0x33, 0xF2, 0x30, 0xF0, 0x34, 0xF2, 0xD0, 0x80, 0x31, 0xF0, 0xFF, 0xFF, 0xD0, 0x80, 0x60, 0x47, - 0x34, 0x0C, 0xFF, 0xB4, 0x15, 0x60, 0x02, 0x65, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0xFF, 0xFF, - 0x31, 0x18, 0x60, 0x43, 0x50, 0xFE, 0x66, 0x41, 0x32, 0xF0, 0x63, 0x46, 0x03, 0xF2, 0x61, 0x46, - 0xD0, 0x80, 0x33, 0xF0, 0x63, 0x46, 0x04, 0xF2, 0x61, 0x46, 0xD0, 0x80, 0x34, 0xF0, 0x63, 0x46, - 0x05, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x0C, 0x00, 0xF2, 0x61, 0x46, 0x1A, 0x18, - 0xE8, 0x01, 0x06, 0xF0, 0x8E, 0xF3, 0x61, 0x46, 0x02, 0x61, 0x64, 0x40, 0x02, 0x2A, 0x12, 0x00, - 0xFC, 0xA0, 0xFF, 0xFF, 0x04, 0x0E, 0x61, 0x44, 0x14, 0xFA, 0x11, 0xFC, 0x0B, 0x00, 0x2C, 0xF2, - 0x2F, 0xFA, 0x2D, 0xF2, 0x30, 0xFA, 0x2E, 0xF2, 0x31, 0xFA, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, - 0x40, 0x46, 0x1E, 0x00, 0x26, 0x43, 0x84, 0xBB, 0xFC, 0xB3, 0x21, 0x46, 0x01, 0x5D, 0x0F, 0xFC, - 0x5C, 0x46, 0x05, 0xFF, 0x27, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x50, 0xFE, 0x28, 0x40, 0x08, 0x3A, - 0x12, 0x00, 0x2F, 0xF2, 0x30, 0xF0, 0x60, 0x43, 0x31, 0xF2, 0x22, 0x46, 0x64, 0x41, 0x2C, 0xF0, - 0x2D, 0xF0, 0xD3, 0x80, 0x2E, 0xF0, 0xD1, 0x80, 0xD0, 0x80, 0x27, 0x44, 0x09, 0x0C, 0x03, 0x00, - 0x27, 0x44, 0x06, 0x22, 0x05, 0x00, 0xB8, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0xD4, 0x64, 0x40, 0x48, 0x0D, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x1C, 0xF2, 0x00, 0xE1, 0xF0, 0xFE, - 0x00, 0x63, 0x28, 0x44, 0xA4, 0x36, 0x07, 0x00, 0x04, 0x2B, 0x05, 0x00, 0x30, 0xF3, 0x2D, 0x45, - 0xD4, 0x84, 0xCA, 0x65, 0xD4, 0x83, 0xD4, 0x64, 0x35, 0x00, 0x0F, 0x64, 0x3A, 0xDB, 0x21, 0x46, - 0x29, 0x40, 0x40, 0x27, 0x15, 0x00, 0x80, 0x27, 0x02, 0x00, 0xCA, 0x65, 0x01, 0x00, 0x6A, 0x65, - 0x1C, 0xF2, 0xFF, 0xFF, 0x04, 0x7F, 0x40, 0x45, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, - 0x37, 0x36, 0x15, 0x64, 0x6E, 0x3A, 0x17, 0x00, 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, 0x13, 0x00, - 0x1C, 0xF2, 0x1E, 0x65, 0x40, 0x45, 0x0B, 0x36, 0x1E, 0x64, 0x0F, 0x36, 0x16, 0x64, 0x0A, 0x36, - 0x12, 0x64, 0x0E, 0x36, 0x0E, 0x64, 0x09, 0x36, 0x0E, 0x64, 0x0D, 0x36, 0x0A, 0x64, 0x08, 0x36, - 0x0A, 0x64, 0x0C, 0x36, 0x0A, 0x64, 0x40, 0x4D, 0x00, 0xE1, 0xF0, 0xFE, 0x2B, 0xF2, 0xC4, 0x85, - 0xD4, 0x83, 0xC4, 0x64, 0x40, 0x48, 0x2F, 0xF0, 0xB0, 0xF0, 0xB1, 0xF2, 0xA1, 0xFF, 0x12, 0x74, - 0xCD, 0xE2, 0x80, 0x4E, 0x12, 0x74, 0x83, 0x4C, 0x12, 0x74, 0x9A, 0xFF, 0x84, 0x4C, 0x12, 0x74, - 0x85, 0x4C, 0x12, 0x74, 0x81, 0x4C, 0x12, 0x74, 0xA1, 0xFF, 0x98, 0xFF, 0xB1, 0x60, 0x58, 0x4F, - 0x00, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x78, 0x44, 0x03, 0xA4, 0x35, 0xFB, 0xB1, 0x60, - 0x43, 0x78, 0xFF, 0xFF, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0x27, 0x44, 0x01, 0x2A, 0x05, 0x00, - 0xFE, 0xB4, 0x40, 0x47, 0xA5, 0x60, 0xCD, 0x78, 0xFF, 0xFF, 0x13, 0x60, 0x2E, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x02, 0x36, 0xC1, 0xFE, 0xA4, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x28, 0x40, 0xB4, 0x3A, - 0x0B, 0x00, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, - 0xC0, 0xFE, 0xA6, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x28, 0x44, 0xD4, 0x36, 0x03, 0x00, 0xA8, 0x60, - 0x5D, 0x78, 0xFF, 0xFF, 0xA8, 0xE2, 0x27, 0x44, 0xFB, 0xB4, 0x40, 0x47, 0x1C, 0x42, 0x22, 0x46, - 0x16, 0x60, 0x2B, 0xF3, 0xFF, 0xFF, 0x34, 0xFB, 0x2A, 0xF0, 0xF7, 0x60, 0xFF, 0x64, 0xA0, 0x84, - 0xA2, 0xDA, 0x60, 0x40, 0x40, 0x2B, 0xC4, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x22, 0x26, - 0x3F, 0x00, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x05, 0x00, 0xBA, 0x00, 0x04, 0x2B, 0xB8, 0x00, - 0x87, 0xF5, 0x01, 0x00, 0x07, 0xF4, 0x4B, 0xF2, 0xFF, 0xFF, 0xDC, 0x84, 0x4B, 0xFA, 0x0C, 0x60, - 0xFE, 0x62, 0x80, 0xFF, 0xC8, 0x60, 0x78, 0x44, 0x02, 0xA4, 0xA2, 0xDB, 0x46, 0x78, 0xFF, 0xFF, - 0x82, 0xFF, 0x87, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x22, 0x46, - 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x41, - 0x64, 0x47, 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0x22, 0x46, 0x3A, 0xFA, - 0x64, 0x44, 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, - 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x80, 0x00, - 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, 0x60, 0x40, 0x40, 0x2B, 0x24, 0x00, 0xA2, 0xD3, 0x00, 0x61, - 0x60, 0xFE, 0xA0, 0xD3, 0x5E, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, - 0xC0, 0x2B, 0x04, 0x00, 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, - 0x60, 0x47, 0xDC, 0x87, 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, - 0x5A, 0xD1, 0xFF, 0xFF, 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, - 0xA2, 0xDB, 0x20, 0xFE, 0x00, 0x60, 0x3E, 0xF3, 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, - 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x40, 0xF3, - 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, - 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, - 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, - 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, - 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, - 0x0B, 0xF2, 0xFF, 0xFF, 0x7F, 0xB4, 0x0C, 0xF0, 0x04, 0x02, 0x64, 0x46, 0x00, 0xF0, 0x04, 0x64, - 0x22, 0x46, 0x03, 0xFA, 0x60, 0x41, 0x64, 0x46, 0x01, 0xF2, 0xFC, 0xA1, 0x61, 0x45, 0xD4, 0x84, - 0xFF, 0xFF, 0x08, 0x02, 0x00, 0xF0, 0x04, 0x63, 0x64, 0x46, 0x01, 0xF2, 0x22, 0x46, 0x1A, 0xFA, - 0x03, 0xFC, 0x02, 0x00, 0x22, 0x46, 0x1A, 0xFA, 0x35, 0xF2, 0x04, 0xF8, 0xDC, 0x84, 0x35, 0xFA, - 0x14, 0xF2, 0x0F, 0xB5, 0x0F, 0xB4, 0xCC, 0x84, 0x94, 0x80, 0x04, 0x60, 0x00, 0x65, 0x2A, 0xF2, - 0x01, 0x02, 0x94, 0x84, 0x2A, 0xFA, 0x95, 0xFC, 0x06, 0x00, 0xC4, 0x3A, 0x07, 0x00, 0x27, 0x44, - 0xFD, 0xB4, 0x40, 0x47, 0xA8, 0xE2, 0xA5, 0x60, 0x7A, 0x78, 0xFF, 0xFF, 0x28, 0x44, 0x04, 0x26, - 0x05, 0x00, 0x68, 0x3A, 0x03, 0x00, 0x32, 0x44, 0x00, 0x27, 0x03, 0x00, 0xA4, 0x60, 0x7C, 0x78, - 0xFF, 0xFF, 0x0A, 0x64, 0x3A, 0xDB, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x0E, 0x64, 0x3A, 0xDB, - 0x3C, 0x44, 0x60, 0x46, 0x1E, 0xF0, 0x40, 0x42, 0x64, 0x40, 0x40, 0x27, 0x48, 0x00, 0x1F, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x3C, 0x00, 0x80, 0x2B, 0x0B, 0x00, 0xBF, 0x60, 0xFF, 0x65, - 0x29, 0x44, 0x24, 0x89, 0x80, 0x60, 0x00, 0x65, 0x29, 0x44, 0x34, 0x89, 0x80, 0x60, 0x00, 0x63, - 0x05, 0x00, 0x3F, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x00, 0x63, 0x1E, 0xF2, 0x39, 0xF1, - 0xC0, 0x60, 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, 0x1F, 0xB4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, - 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, 0xB4, 0x84, 0x07, 0x60, 0xEB, 0xF1, - 0x3C, 0x94, 0xB0, 0x84, 0x60, 0x4C, 0x22, 0x60, 0xC6, 0x65, 0x60, 0x47, 0x1F, 0xB4, 0xE0, 0x84, - 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x60, 0x4C, - 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, 0x32, 0x00, - 0x15, 0x60, 0xDD, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x04, 0x26, 0xCB, 0x01, 0xBF, 0x01, 0x40, 0x60, - 0x00, 0x65, 0x29, 0x44, 0x34, 0x89, 0x40, 0x60, 0x00, 0x63, 0x9F, 0xF2, 0x1E, 0xF2, 0x39, 0xF1, - 0xC0, 0x60, 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, 0x1F, 0xB4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, - 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, 0xB4, 0x84, 0x07, 0x60, 0xEB, 0xF1, - 0x3C, 0x94, 0xB0, 0x81, 0x61, 0x4C, 0x22, 0x60, 0xC6, 0x65, 0x61, 0x47, 0x1F, 0xB4, 0xE0, 0x84, - 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x01, 0x60, 0x09, 0x6B, 0x60, 0x4C, - 0xB5, 0xFF, 0x64, 0x4C, 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0x84, 0xFF, 0xC1, 0x60, 0x6B, 0x64, - 0x40, 0x42, 0x82, 0xFF, 0x2A, 0xF2, 0x10, 0x60, 0x00, 0x65, 0xA4, 0x84, 0xB4, 0xBC, 0x1E, 0xF0, - 0x40, 0x48, 0x64, 0x40, 0x40, 0x27, 0x17, 0x00, 0x1C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x0A, 0x36, - 0x06, 0x00, 0x14, 0x36, 0x07, 0x00, 0x37, 0x36, 0x08, 0x00, 0x6E, 0x36, 0x09, 0x00, 0x70, 0x7C, - 0xA0, 0x63, 0x0F, 0x00, 0x38, 0x7C, 0x50, 0x63, 0x0C, 0x00, 0x15, 0x7C, 0x1E, 0x63, 0x09, 0x00, - 0x0B, 0x7C, 0x0F, 0x63, 0x06, 0x00, 0x9C, 0xF4, 0xFF, 0x65, 0x63, 0x47, 0xA4, 0x9C, 0xA7, 0x84, - 0x23, 0x00, 0x40, 0x45, 0x43, 0x4D, 0x00, 0xE1, 0xF0, 0xFE, 0x29, 0x40, 0x80, 0x2B, 0x03, 0x00, - 0x00, 0x60, 0x6A, 0x65, 0x02, 0x00, 0x00, 0x60, 0xCA, 0x65, 0x1F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x40, 0x27, 0x0E, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x04, 0x27, 0x03, 0x00, 0x65, 0x44, - 0xE0, 0x85, 0x12, 0x00, 0x2B, 0xF2, 0x11, 0xF0, 0xC0, 0x84, 0xD0, 0x84, 0xC4, 0x83, 0x11, 0x00, - 0x1E, 0x64, 0xC4, 0x84, 0x60, 0x45, 0x08, 0x00, 0x40, 0x45, 0xFF, 0x60, 0xF8, 0x64, 0x40, 0x43, - 0x00, 0xE1, 0xF0, 0xFE, 0x00, 0x60, 0x3C, 0x65, 0x91, 0xF4, 0x1B, 0xF0, 0xC3, 0x84, 0xC4, 0x84, - 0xC0, 0x83, 0x28, 0x44, 0xA1, 0xFF, 0x12, 0x74, 0x80, 0x4E, 0x12, 0x74, 0x83, 0x4C, 0x9A, 0xFF, - 0x12, 0x74, 0x56, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, - 0x5C, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0xA1, 0xFF, - 0x98, 0xFF, 0xB1, 0x60, 0x58, 0x4F, 0x00, 0x78, 0xFF, 0xFF, 0xBC, 0xFF, 0xB5, 0xFF, 0x01, 0x60, - 0x18, 0xE1, 0x47, 0xFF, 0x27, 0x44, 0x02, 0xBC, 0x40, 0x47, 0x36, 0xF3, 0xB6, 0xFF, 0xB7, 0xFF, - 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x60, 0x56, 0xAD, 0xE2, 0xA5, 0x60, 0xC7, 0x78, - 0xFF, 0xFF, 0x15, 0x60, 0xDD, 0xF3, 0x15, 0x60, 0xBE, 0xF3, 0x60, 0x40, 0x04, 0x26, 0x0B, 0x00, - 0x07, 0xB4, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, 0x29, 0x44, 0xBF, 0x60, 0xFF, 0xB7, 0x80, 0xBF, - 0x40, 0x49, 0x80, 0x67, 0x05, 0x00, 0x3F, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x00, 0x64, - 0x12, 0x60, 0xD3, 0xF1, 0xFF, 0xFF, 0x15, 0x60, 0xD8, 0xF9, 0x39, 0xF1, 0x12, 0x60, 0xBF, 0xF1, - 0x64, 0x41, 0x64, 0x5E, 0x60, 0x45, 0x64, 0x47, 0x1F, 0xB4, 0x54, 0x94, 0xE0, 0xA0, 0x02, 0x0D, - 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, 0x07, 0x60, 0xEB, 0xF1, 0xB4, 0x84, - 0xB0, 0x8C, 0x22, 0x60, 0xC6, 0x7C, 0x60, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x40, 0xD3, - 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, - 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, - 0x84, 0xFF, 0xC1, 0x60, 0x6B, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x3C, 0x44, 0x60, 0x46, 0x40, 0x42, - 0x13, 0x64, 0x3A, 0xDB, 0x10, 0x60, 0x00, 0x65, 0x3C, 0x46, 0x2A, 0xF2, 0x15, 0x60, 0xBE, 0xF1, - 0xA4, 0x84, 0xC4, 0xBC, 0x40, 0x48, 0x64, 0x44, 0x04, 0x26, 0x09, 0x00, 0x02, 0x26, 0x0A, 0x00, - 0x01, 0x26, 0x0B, 0x00, 0x08, 0x2A, 0x03, 0x00, 0x0B, 0x63, 0x6E, 0x64, 0x08, 0x00, 0x15, 0x63, - 0x37, 0x64, 0x05, 0x00, 0x38, 0x63, 0x14, 0x64, 0x02, 0x00, 0x70, 0x63, 0x0A, 0x64, 0x43, 0x4D, - 0x40, 0x45, 0x00, 0xE1, 0xF0, 0xFE, 0x00, 0x60, 0x1E, 0x64, 0x1B, 0xF0, 0x11, 0xF0, 0xC0, 0x84, - 0xC0, 0x84, 0x60, 0x43, 0x28, 0x44, 0xA1, 0xFF, 0x12, 0x74, 0x80, 0x4E, 0x12, 0x74, 0x83, 0x4C, - 0x9A, 0xFF, 0x12, 0x74, 0x5C, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0xA1, 0xFF, 0x98, 0xFF, 0xB1, 0x60, 0x58, 0x4F, 0x00, 0x78, 0xFF, 0xFF, 0x01, 0x60, - 0x18, 0xE1, 0x78, 0x44, 0x03, 0xA4, 0x35, 0xFB, 0xB1, 0x60, 0x43, 0x78, 0xFF, 0xFF, 0xC4, 0xE2, - 0x08, 0x64, 0x3A, 0xDB, 0xA5, 0x60, 0x1C, 0x78, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x2A, 0x0E, 0x00, - 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, 0x40, 0x46, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, - 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x30, 0xF1, 0x52, 0x00, 0xFC, 0xB3, 0x32, 0x40, - 0x01, 0x2A, 0x06, 0x00, 0x0A, 0xBB, 0x0F, 0xFC, 0xCB, 0xFE, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, - 0x24, 0x44, 0x04, 0x26, 0x02, 0x00, 0x0F, 0xFC, 0x05, 0xFF, 0x30, 0xF1, 0x27, 0x44, 0x05, 0x22, - 0x2C, 0x00, 0xFA, 0xB4, 0x40, 0x47, 0x24, 0x44, 0x10, 0x2A, 0x23, 0x00, 0x28, 0x40, 0xD4, 0x3A, - 0x20, 0x00, 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, - 0x64, 0x44, 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, - 0x20, 0x29, 0x6D, 0xE2, 0x1D, 0xF0, 0xC0, 0x64, 0xC0, 0x84, 0x0A, 0x60, 0x7B, 0xF1, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA2, 0xDB, 0xA5, 0x60, 0xCD, 0x78, - 0xFF, 0xFF, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x07, 0x00, 0x02, 0x2A, 0x05, 0x00, 0xFD, 0xB4, - 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x05, 0x64, 0x3A, 0xDB, 0x28, 0x44, 0xA4, 0x3A, - 0x07, 0x00, 0x01, 0x60, 0x02, 0x7C, 0x25, 0x44, 0x0A, 0x3A, 0x02, 0x00, 0x01, 0x60, 0x3A, 0x7C, - 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, 0x64, 0x44, - 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x28, 0x40, 0xE4, 0x36, 0x00, 0xB4, 0x60, 0x50, - 0x08, 0x28, 0x01, 0x00, 0x20, 0x29, 0x6D, 0xE2, 0xA4, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x27, 0x44, - 0x05, 0x22, 0x09, 0x00, 0xBA, 0xB4, 0x40, 0x47, 0x3C, 0x46, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x02, 0x2A, 0x06, 0x00, 0xFD, 0xB4, 0x40, 0x47, - 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xF4, 0x01, 0xF3, 0x0A, 0x7C, 0x50, 0x6D, 0xE2, 0xF0, 0x01, - 0x72, 0x45, 0xDC, 0x84, 0x94, 0xFB, 0x11, 0x64, 0x3A, 0xDB, 0x95, 0xF3, 0x06, 0x04, 0xDC, 0x84, - 0x95, 0xFB, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, 0xA4, 0x60, 0x87, 0x78, 0xFF, 0xFF, - 0x00, 0x61, 0x12, 0x64, 0x3A, 0xDB, 0x18, 0x60, 0xEE, 0x63, 0xBD, 0xD3, 0x72, 0x45, 0x44, 0x8A, - 0x02, 0x28, 0x03, 0x00, 0xE4, 0xE2, 0xDD, 0x81, 0x04, 0x00, 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, - 0xDD, 0x81, 0xBD, 0xD3, 0x94, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, - 0xC4, 0x84, 0x60, 0x55, 0x2A, 0x52, 0xE4, 0xE2, 0x94, 0xFB, 0x02, 0x24, 0x01, 0xB9, 0xBD, 0xD3, - 0x95, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, 0xC4, 0x84, 0x95, 0xFB, - 0x02, 0x24, 0x01, 0xB9, 0xBD, 0xD3, 0x96, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0xC4, 0x84, 0x96, 0xFB, - 0xA5, 0x60, 0x71, 0x78, 0xFF, 0xFF, 0xAC, 0x01, 0x47, 0xFF, 0x44, 0xFF, 0xC8, 0x74, 0xCD, 0xE2, - 0xAA, 0x60, 0xFE, 0x78, 0x00, 0x61, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x5C, 0x44, 0x26, 0x44, - 0x02, 0x26, 0x0C, 0x00, 0x3E, 0x46, 0x09, 0xF2, 0x1E, 0x41, 0x03, 0x1B, 0xAC, 0x60, 0x14, 0x78, - 0xFF, 0xFF, 0x40, 0x5E, 0xFD, 0xFB, 0x21, 0x44, 0x02, 0x64, 0x40, 0x46, 0x41, 0x5D, 0x21, 0x46, - 0x00, 0x64, 0x31, 0xFA, 0x00, 0xF2, 0x46, 0x45, 0x87, 0xFC, 0xAC, 0xE2, 0x01, 0x64, 0x33, 0xFB, - 0x32, 0x40, 0x01, 0x2A, 0x21, 0x00, 0x19, 0xF3, 0x01, 0x60, 0x1E, 0xE1, 0x1D, 0x18, 0x80, 0x64, - 0x40, 0x49, 0x00, 0xE1, 0x19, 0xFF, 0x08, 0x64, 0x2A, 0xFA, 0x5A, 0xDA, 0x2C, 0xFA, 0x5A, 0xDA, - 0x5A, 0xDA, 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x72, 0x44, 0x24, 0xFA, 0x94, 0xF3, - 0x25, 0xFA, 0xA1, 0xFF, 0xFF, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, - 0x7C, 0x4B, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x01, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0x3F, 0x60, - 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x2E, 0x44, 0x00, 0x36, 0x41, 0x00, 0x01, 0x3A, 0xC9, 0x00, - 0x88, 0xFF, 0x40, 0x67, 0x29, 0x45, 0x34, 0x89, 0x04, 0x64, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, - 0xA1, 0xFF, 0x6C, 0x45, 0x65, 0x44, 0x0F, 0xB4, 0x40, 0x45, 0x1C, 0xFA, 0x65, 0x44, 0x29, 0x41, - 0xF9, 0x81, 0x52, 0x4A, 0x71, 0x89, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x83, 0x1D, 0xFC, - 0x1B, 0xFC, 0x98, 0xF1, 0xFC, 0xA3, 0xD3, 0x80, 0x43, 0x43, 0x03, 0x04, 0xAC, 0x60, 0x0A, 0x78, - 0xFF, 0xFF, 0x09, 0x7C, 0xD3, 0x80, 0x9A, 0xFF, 0x03, 0x07, 0xAC, 0x60, 0x0A, 0x78, 0xFF, 0xFF, - 0x25, 0x44, 0x01, 0x26, 0x0F, 0xAC, 0x1F, 0x60, 0x50, 0x65, 0x44, 0xD3, 0x12, 0x65, 0x45, 0x46, - 0x60, 0x47, 0x40, 0x7F, 0x27, 0xFA, 0x8F, 0xFC, 0x18, 0x61, 0xCB, 0xF1, 0xA1, 0xFF, 0x6C, 0x44, - 0xDC, 0x80, 0xFF, 0xFF, 0x21, 0x03, 0x50, 0xFE, 0xAC, 0x60, 0x20, 0x78, 0xFF, 0xFF, 0xC8, 0x60, - 0x0B, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0xB5, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xAA, 0x74, 0xCD, 0xE2, - 0x02, 0x64, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0x01, 0x60, 0x08, 0xE1, 0x05, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x04, 0x25, 0x76, 0x00, 0x6C, 0x44, 0x0A, 0x36, 0x07, 0x00, 0x14, 0x36, 0x05, 0x00, - 0x37, 0x36, 0x03, 0x00, 0x6E, 0x36, 0x01, 0x00, 0x6C, 0x00, 0x40, 0x45, 0x32, 0x74, 0xA1, 0xFF, - 0x1C, 0xFA, 0x40, 0x4E, 0x8C, 0x44, 0x60, 0x43, 0x1D, 0xFA, 0x01, 0xE1, 0x20, 0x64, 0x3A, 0xDB, - 0x2E, 0x44, 0x14, 0x36, 0x12, 0x00, 0x0A, 0x36, 0x0F, 0x00, 0x63, 0x45, 0xE3, 0x83, 0xE3, 0x83, - 0xC7, 0x83, 0xE3, 0x83, 0xC7, 0x83, 0xFF, 0xFF, 0x37, 0x36, 0x05, 0x00, 0x6E, 0x36, 0x04, 0x00, - 0xAC, 0x60, 0x1E, 0x78, 0xFF, 0xFF, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xFF, 0xFF, - 0x80, 0x27, 0xCF, 0x83, 0x1B, 0xFC, 0x01, 0x64, 0x4F, 0xFB, 0xA1, 0xFF, 0x29, 0x41, 0xF9, 0x81, - 0x52, 0x4A, 0x71, 0x89, 0x2E, 0x44, 0x27, 0xFA, 0x98, 0xF1, 0xFC, 0xA3, 0xD3, 0x80, 0x43, 0x43, - 0x03, 0x04, 0xAC, 0x60, 0x0A, 0x78, 0xFF, 0xFF, 0x9A, 0xFF, 0x54, 0x63, 0x12, 0x64, 0x40, 0x46, - 0x8F, 0xFC, 0x18, 0x61, 0xCB, 0xF1, 0x50, 0xFE, 0x6C, 0x40, 0x9E, 0x15, 0x01, 0x60, 0x08, 0xE1, - 0x80, 0xE1, 0x00, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x18, 0xE1, 0x01, 0x11, 0x0F, 0x00, 0x29, 0x44, - 0x20, 0xBC, 0x40, 0x49, 0x01, 0x64, 0x33, 0xFB, 0xB6, 0xFF, 0x00, 0xE1, 0x01, 0x60, 0x1A, 0xE1, - 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x40, 0xFC, 0x11, 0x01, 0x60, 0x18, 0xE1, 0xB5, 0xFF, 0xB6, 0xFF, - 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x35, 0xE1, 0xAC, 0xE2, 0xAA, 0x60, - 0x97, 0x78, 0xFF, 0xFF, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, - 0xA2, 0xDB, 0x21, 0x64, 0x3A, 0xDB, 0xD2, 0x01, 0x25, 0x60, 0xF2, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xC7, 0x78, 0x97, 0xF1, 0x2A, 0x64, 0x3A, 0xDB, 0x5C, 0x41, 0xC8, 0x01, 0x29, 0x64, 0x3A, 0xDB, - 0x88, 0x60, 0x85, 0x71, 0x8D, 0xE2, 0xA2, 0xFC, 0x32, 0x40, 0x01, 0x2A, 0xA8, 0x00, 0x01, 0x60, - 0x1A, 0xE1, 0x23, 0x43, 0xA1, 0xFF, 0xEC, 0x44, 0x2A, 0xFA, 0x40, 0x48, 0xA1, 0xFF, 0x7A, 0xDC, - 0x7E, 0x36, 0x04, 0xA2, 0xFC, 0x1C, 0x03, 0x1D, 0x00, 0x64, 0x3F, 0xFA, 0x2E, 0x00, 0x03, 0x2B, - 0x04, 0x00, 0xA1, 0xFF, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x8F, 0xB0, 0x88, 0x3A, 0x03, 0x00, - 0x70, 0x62, 0xA1, 0xFF, 0x7A, 0xDC, 0x28, 0x40, 0x40, 0x2B, 0x06, 0x00, 0x72, 0x62, 0xA1, 0xFF, - 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x3F, 0xFC, 0x00, 0xF4, 0x10, 0x62, 0x6E, 0x61, - 0xA1, 0xFF, 0x05, 0x1D, 0x12, 0x1E, 0x0C, 0x00, 0x00, 0xF4, 0x7C, 0x61, 0x02, 0x62, 0x7A, 0xDC, - 0x63, 0x40, 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, 0x08, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, - 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0x6C, 0x44, 0x5A, 0xDA, 0x98, 0xFF, 0xA1, 0xFF, 0x6C, 0x40, - 0xA1, 0xFF, 0x47, 0xFF, 0x7C, 0x44, 0x33, 0xFB, 0x26, 0x44, 0xFD, 0xB4, 0x84, 0xBC, 0x01, 0x15, - 0x7F, 0xB4, 0x40, 0x46, 0x6C, 0x40, 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0x6C, 0x45, 0xA1, 0xFF, - 0x7F, 0x60, 0x7F, 0x7C, 0x6C, 0x44, 0xA0, 0x84, 0x15, 0xA7, 0x15, 0xA4, 0x21, 0x46, 0x26, 0xFA, - 0x29, 0x40, 0x40, 0x2B, 0x07, 0x00, 0xB6, 0xFF, 0x40, 0x60, 0x00, 0x65, 0xA1, 0xFF, 0x6C, 0x44, - 0x1A, 0xFA, 0x09, 0x00, 0x65, 0x44, 0x0F, 0xB4, 0x06, 0xA8, 0x80, 0x60, 0x00, 0x65, 0x08, 0x28, - 0x7C, 0x45, 0x29, 0x44, 0x34, 0x89, 0x27, 0xF0, 0x65, 0x44, 0x64, 0x5E, 0x27, 0xFA, 0x81, 0xE1, - 0x01, 0x60, 0x18, 0xE1, 0x01, 0x11, 0x0F, 0x00, 0x29, 0x44, 0x20, 0xBC, 0x40, 0x49, 0x01, 0x64, - 0x33, 0xFB, 0xB6, 0xFF, 0x00, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x40, - 0xFC, 0x11, 0x01, 0x60, 0x18, 0xE1, 0x21, 0x46, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, - 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x26, 0x43, 0x2A, 0x44, 0x72, 0x45, - 0x24, 0xFA, 0x94, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, - 0x94, 0xF9, 0x25, 0xFA, 0x95, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x95, 0xFB, 0x28, 0xFA, 0x96, 0xF3, - 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, 0x29, 0xFA, 0xAA, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, - 0x12, 0x61, 0x8C, 0x44, 0xCC, 0xF0, 0x2A, 0xFA, 0x40, 0x48, 0x04, 0x26, 0x43, 0x00, 0xA1, 0xFF, - 0x8C, 0x44, 0x5A, 0xDA, 0x30, 0xFB, 0x6C, 0x44, 0x2C, 0xFA, 0xFF, 0xFF, 0x01, 0x26, 0x26, 0x00, - 0xD0, 0x80, 0xA1, 0xFF, 0x8C, 0x44, 0x6C, 0x5C, 0x00, 0xE1, 0xF2, 0xFE, 0x2D, 0xFA, 0xCD, 0xF3, - 0xD4, 0x80, 0xD0, 0x80, 0x2E, 0xF8, 0x24, 0x44, 0x16, 0x0C, 0x32, 0x40, 0x02, 0x2A, 0x07, 0x00, - 0x28, 0x42, 0x0C, 0xB2, 0x08, 0x3A, 0x03, 0x00, 0x10, 0xBC, 0x40, 0x44, 0x5C, 0x00, 0x04, 0x0A, - 0xA1, 0xFF, 0xAC, 0x60, 0x13, 0x78, 0xFF, 0xFF, 0x11, 0xBC, 0x40, 0x44, 0x28, 0x45, 0xBF, 0x60, - 0xFF, 0x64, 0x24, 0x88, 0x50, 0x00, 0x30, 0xBC, 0x40, 0x44, 0x4D, 0x00, 0x20, 0xB9, 0x5C, 0x8E, - 0xA1, 0xFF, 0x8C, 0x44, 0x2D, 0xFA, 0xDC, 0x9C, 0x6C, 0x44, 0x00, 0xE1, 0xF2, 0xFE, 0x2E, 0xFA, - 0x08, 0x28, 0x44, 0x4E, 0xDC, 0x84, 0x2E, 0x5C, 0xB0, 0x84, 0xEF, 0xB1, 0x08, 0x24, 0x40, 0xB9, - 0x41, 0x46, 0x39, 0x00, 0x23, 0x41, 0x13, 0x64, 0x51, 0x90, 0x56, 0x63, 0x03, 0x04, 0xAC, 0x60, - 0x0A, 0x78, 0xFF, 0xFF, 0x8C, 0x44, 0x04, 0x61, 0x2B, 0xFA, 0x50, 0xFE, 0x80, 0x27, 0x00, 0x64, - 0x30, 0xFB, 0x8C, 0x44, 0x2C, 0xFA, 0xD0, 0x80, 0x8C, 0x44, 0x2D, 0xFA, 0xD4, 0x80, 0x00, 0x65, - 0x8C, 0x44, 0xCD, 0xF1, 0x2E, 0xFA, 0xD0, 0x80, 0x28, 0x44, 0x03, 0x0C, 0xA0, 0x2A, 0x0A, 0x00, - 0x11, 0x00, 0x10, 0x65, 0x60, 0x40, 0xC4, 0x36, 0x04, 0x00, 0xD4, 0x3A, 0x08, 0x00, 0x27, 0x40, - 0x40, 0x26, 0x30, 0x65, 0x00, 0x64, 0x3F, 0xFA, 0x46, 0x4E, 0x35, 0x84, 0x66, 0x00, 0x40, 0x26, - 0xF9, 0x01, 0x30, 0x65, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x04, 0x61, 0xF3, 0x01, 0xA1, 0xFF, - 0xAB, 0x60, 0xE6, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xFE, 0x65, 0x23, 0x43, 0xE8, 0xA3, 0x80, 0x27, - 0xF6, 0x01, 0x20, 0xE6, 0x08, 0x60, 0x00, 0xEB, 0x28, 0x44, 0x03, 0x2B, 0x05, 0x00, 0x6A, 0x62, - 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x28, 0x44, 0x8F, 0xB0, 0x88, 0x3A, 0x03, 0x00, 0x70, 0x62, - 0x7A, 0xDC, 0x28, 0x44, 0x40, 0x2B, 0x0D, 0x00, 0x72, 0x62, 0x7A, 0xDC, 0xA1, 0xFF, 0x6C, 0x5C, - 0x5A, 0xD8, 0xE4, 0x40, 0x20, 0x2B, 0x03, 0x00, 0x7A, 0xDC, 0x7A, 0xDC, 0xF8, 0xA3, 0x25, 0xFF, - 0xB0, 0xFF, 0x3F, 0xFC, 0x00, 0xF4, 0x10, 0x62, 0x10, 0x61, 0x57, 0x90, 0x6C, 0x61, 0xA1, 0xFF, - 0x09, 0x07, 0x02, 0x1D, 0x2A, 0x1E, 0x21, 0x00, 0xCB, 0x83, 0x7A, 0xDC, 0xFE, 0x1C, 0xD9, 0x81, - 0x24, 0x1E, 0x1B, 0x00, 0xCB, 0x83, 0x0E, 0xA3, 0xA7, 0x84, 0xF2, 0xA3, 0x7A, 0xDC, 0xFE, 0x1C, - 0x05, 0x1D, 0x01, 0x60, 0x18, 0xE1, 0x7C, 0xA8, 0xD9, 0x81, 0x0A, 0x02, 0x00, 0xF4, 0x02, 0x62, - 0xA7, 0x84, 0x7A, 0x61, 0x7A, 0xDC, 0xFE, 0x1C, 0xF9, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0xF6, 0x03, - 0xFF, 0xB1, 0x0B, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xA1, 0xFF, 0xFF, 0xFF, 0xB6, 0xFF, - 0xB7, 0xFF, 0x6C, 0x44, 0x5A, 0xDA, 0xCD, 0x81, 0x64, 0x40, 0x46, 0x45, 0x28, 0x44, 0x40, 0x2B, - 0x0E, 0x00, 0x64, 0x40, 0x20, 0x2B, 0x0B, 0x00, 0x01, 0xA2, 0x62, 0x44, 0x46, 0x45, 0x21, 0x46, - 0x00, 0xF4, 0x02, 0x62, 0x9A, 0xFF, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x98, 0xFF, - 0x00, 0xE6, 0x01, 0xF2, 0x61, 0x45, 0xD4, 0x9E, 0x21, 0x46, 0x16, 0xFA, 0x25, 0x44, 0x06, 0xFA, - 0xA1, 0xFF, 0x8C, 0x44, 0xA1, 0xFF, 0x47, 0xFF, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, 0x25, 0x46, - 0x01, 0xF2, 0x61, 0x45, 0xD4, 0x9E, 0x21, 0x46, 0x16, 0xFA, 0x25, 0x45, 0x86, 0xF8, 0xFF, 0xFF, - 0x6A, 0x44, 0x40, 0x2B, 0x03, 0x15, 0xAF, 0x60, 0x10, 0x78, 0xFF, 0xFF, 0x29, 0x40, 0x10, 0x26, - 0x04, 0x00, 0x04, 0x74, 0xCD, 0xE2, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x44, 0xB6, 0xFF, 0xB7, 0xFF, - 0xC4, 0xE2, 0x01, 0x60, 0x18, 0xE1, 0x05, 0x76, 0xAD, 0xE2, 0x41, 0xE1, 0xA1, 0xFF, 0x6C, 0x45, - 0xA1, 0xFF, 0x65, 0x41, 0x7F, 0x60, 0x7F, 0x7C, 0x6C, 0x44, 0xA0, 0x84, 0x15, 0xA7, 0x15, 0xA4, - 0x21, 0x46, 0x26, 0xFA, 0x22, 0x46, 0x10, 0xFA, 0x21, 0x46, 0x29, 0x40, 0x40, 0x2B, 0x07, 0x00, - 0xB6, 0xFF, 0xA1, 0xFF, 0x40, 0x60, 0x00, 0x65, 0x6C, 0x44, 0x1A, 0xFA, 0x09, 0x00, 0x65, 0x44, - 0x0F, 0xB4, 0x06, 0xA8, 0x80, 0x60, 0x00, 0x65, 0x08, 0x28, 0x7C, 0x45, 0x29, 0x44, 0x34, 0x89, - 0x27, 0xF0, 0x65, 0x47, 0x1F, 0xB1, 0x34, 0x97, 0x64, 0x5E, 0x07, 0x60, 0xF5, 0xF1, 0x29, 0x40, - 0x40, 0x2B, 0x04, 0x00, 0x64, 0x40, 0x02, 0x26, 0x10, 0x60, 0x00, 0xBC, 0x27, 0xFA, 0x01, 0x60, - 0x18, 0xE1, 0x00, 0x64, 0x33, 0xFB, 0xA8, 0xE2, 0x05, 0xE1, 0x28, 0x40, 0x03, 0x26, 0xCE, 0x00, - 0x31, 0x40, 0x20, 0x2A, 0x03, 0x00, 0x28, 0x40, 0x50, 0x3A, 0xC8, 0x00, 0x24, 0x44, 0x20, 0x2A, - 0xC5, 0x00, 0x2B, 0x44, 0xAC, 0x80, 0x28, 0x40, 0xB4, 0x3A, 0x03, 0x00, 0x02, 0x03, 0x30, 0xFB, - 0xBD, 0x00, 0x28, 0x44, 0xBF, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x40, 0x48, 0x2B, 0x50, 0xA1, 0xFF, - 0xFF, 0xFF, 0x01, 0x60, 0x08, 0xE1, 0x1C, 0xF2, 0xC4, 0xE2, 0x40, 0x45, 0x28, 0x40, 0xC4, 0x36, - 0x9D, 0x00, 0x29, 0x40, 0x40, 0x2B, 0x49, 0x00, 0x2B, 0x60, 0xBE, 0x63, 0x60, 0x40, 0x0B, 0x36, - 0x20, 0x00, 0x0F, 0x36, 0x1B, 0x00, 0x0A, 0x36, 0x16, 0x00, 0x0E, 0x36, 0x11, 0x00, 0x09, 0x36, - 0x0C, 0x00, 0x0D, 0x36, 0x07, 0x00, 0x08, 0x36, 0x02, 0x00, 0xA3, 0xD3, 0x15, 0x00, 0x02, 0xA3, - 0xA3, 0xD3, 0x12, 0x00, 0x04, 0xA3, 0xA3, 0xD3, 0x0F, 0x00, 0x06, 0xA3, 0xA3, 0xD3, 0x0C, 0x00, - 0x08, 0xA3, 0xA3, 0xD3, 0x09, 0x00, 0x0A, 0xA3, 0xA3, 0xD3, 0x06, 0x00, 0x0C, 0xA3, 0xA3, 0xD3, - 0x03, 0x00, 0x0E, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, 0x25, 0x60, 0x82, 0x63, 0x60, 0x40, 0x0C, 0x36, - 0x19, 0x00, 0x08, 0x36, 0x15, 0x00, 0x0D, 0x36, 0x11, 0x00, 0x09, 0x36, 0x0D, 0x00, 0x0E, 0x36, - 0x09, 0x00, 0x0A, 0x36, 0x05, 0x00, 0x0F, 0x36, 0x01, 0x00, 0x3A, 0x00, 0x02, 0xA3, 0x38, 0x00, - 0x04, 0xA3, 0x36, 0x00, 0x06, 0xA3, 0x34, 0x00, 0x08, 0xA3, 0x32, 0x00, 0x0A, 0xA3, 0x30, 0x00, - 0x0C, 0xA3, 0x2E, 0x00, 0x0E, 0xA3, 0x2C, 0x00, 0x2B, 0x00, 0x2B, 0x60, 0xCE, 0x63, 0x25, 0x44, - 0x0A, 0x36, 0x0C, 0x00, 0x14, 0x36, 0x07, 0x00, 0x37, 0x36, 0x02, 0x00, 0xA3, 0xD3, 0x09, 0x00, - 0x02, 0xA3, 0xA3, 0xD3, 0x06, 0x00, 0x04, 0xA3, 0xA3, 0xD3, 0x03, 0x00, 0x06, 0xA3, 0xA3, 0xD3, - 0xFF, 0xFF, 0x40, 0x45, 0x0A, 0x36, 0x0D, 0x00, 0x14, 0x36, 0x38, 0x64, 0x37, 0x3A, 0x03, 0x00, - 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, 0x6E, 0x3A, 0x09, 0x00, 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, - 0x05, 0x00, 0x29, 0x44, 0x7F, 0x60, 0xFF, 0xB4, 0x40, 0x49, 0x70, 0x64, 0x40, 0x4D, 0x02, 0x00, - 0x40, 0x45, 0x0A, 0x00, 0x25, 0x60, 0x7A, 0x63, 0x0A, 0x36, 0x06, 0x00, 0x14, 0x36, 0x02, 0xA3, - 0x37, 0x36, 0x04, 0xA3, 0x6E, 0x36, 0x06, 0xA3, 0x28, 0xA3, 0xA3, 0xD1, 0xD8, 0xA3, 0x15, 0x60, - 0xD8, 0xF9, 0x39, 0xF1, 0xA3, 0xD1, 0x64, 0x41, 0x64, 0x5E, 0x60, 0x45, 0x64, 0x47, 0x1F, 0xB4, - 0x54, 0x94, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, - 0xB4, 0x85, 0x29, 0x44, 0xC0, 0x60, 0x00, 0xB4, 0xB4, 0x84, 0x1F, 0xFA, 0xB5, 0xFF, 0xA1, 0xFF, - 0xAD, 0xF3, 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, 0xE0, 0x94, 0xFF, 0x60, - 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, 0xA5, 0x60, 0xD6, 0x78, 0x04, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0xC4, 0xE2, 0xA1, 0xFF, 0xFF, 0x60, 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, 0xAD, 0xF3, 0xC4, 0xE2, - 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, 0xE0, 0x94, 0x26, 0x44, 0x84, 0xBC, 0x24, 0x40, - 0x0C, 0x22, 0xFD, 0xB4, 0x40, 0x46, 0x23, 0x64, 0x3A, 0xDB, 0xAC, 0x60, 0xAB, 0x78, 0xFF, 0xFF, - 0x27, 0x40, 0x26, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0x29, 0x40, 0x10, 0x26, 0x02, 0x00, 0x04, 0x74, 0xCD, 0xE2, 0x01, 0x60, 0x18, 0xE1, 0x01, 0x60, - 0x18, 0xE1, 0x01, 0x11, 0x0F, 0x00, 0x29, 0x44, 0x20, 0xBC, 0x40, 0x49, 0x01, 0x64, 0x33, 0xFB, - 0xB6, 0xFF, 0x00, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x40, 0xFC, 0x11, - 0x01, 0x60, 0x18, 0xE1, 0xB5, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, - 0x09, 0x7D, 0x7C, 0x4B, 0x37, 0xF3, 0x2B, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x28, 0x65, 0x44, - 0x60, 0x50, 0xA0, 0x4C, 0x20, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x00, 0x60, 0x2E, 0x7C, 0x74, 0x44, - 0xC0, 0x94, 0x32, 0x40, 0x02, 0x2A, 0x19, 0x00, 0x28, 0x44, 0xA4, 0x36, 0x03, 0x00, 0x0C, 0xB4, - 0x04, 0x36, 0x13, 0x00, 0x26, 0x43, 0xFD, 0xB3, 0x04, 0xBB, 0x43, 0x46, 0x01, 0x2A, 0x03, 0x00, - 0x28, 0x47, 0x40, 0xBF, 0x40, 0x48, 0x0A, 0xBB, 0x0F, 0xFC, 0x50, 0x4B, 0x67, 0x50, 0x00, 0x64, - 0x30, 0xFB, 0x05, 0xFF, 0xAC, 0x60, 0xAB, 0x78, 0xFF, 0xFF, 0x24, 0x64, 0x3A, 0xDB, 0x28, 0x44, - 0x04, 0x2A, 0x03, 0x00, 0xA4, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x1D, 0xFF, 0xA8, 0xE2, 0x26, 0x40, - 0x10, 0x2A, 0x06, 0x00, 0x25, 0x60, 0xF0, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, - 0xA4, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x03, 0x0A, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x01, 0x64, - 0x4F, 0xFB, 0xE1, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x54, 0x62, 0x22, 0x46, 0xA2, 0xD0, - 0x16, 0x63, 0x7C, 0x41, 0x44, 0x48, 0x80, 0x36, 0x04, 0x61, 0x28, 0x40, 0x50, 0x36, 0x04, 0x61, - 0x41, 0x4E, 0x28, 0x44, 0xA4, 0x36, 0x0E, 0x63, 0x0A, 0x60, 0x7C, 0xF1, 0x2D, 0x44, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA2, 0xDB, 0x9A, 0xFF, 0xA1, 0xFF, - 0x12, 0x74, 0xCD, 0xE2, 0x54, 0x62, 0xA2, 0xD2, 0xFF, 0xFF, 0x6A, 0x40, 0x80, 0x4E, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0xFF, 0xFF, 0x01, 0x1D, - 0xB2, 0x00, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x28, 0x40, 0x03, 0x2B, 0x06, 0x00, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x70, 0x62, 0x28, 0x44, 0x8F, 0xB0, 0x88, 0x3A, 0x02, 0x00, 0x7A, 0xD4, - 0x12, 0x74, 0x28, 0x40, 0x40, 0x2B, 0x16, 0x00, 0x72, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD2, - 0x12, 0x74, 0x80, 0x4C, 0x20, 0x2B, 0x05, 0x00, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x10, 0x26, 0x04, 0x00, 0x26, 0x26, 0x4D, 0x00, - 0x26, 0x27, 0x4B, 0x00, 0x23, 0x43, 0xFF, 0xFF, 0x06, 0x1D, 0x2E, 0x1E, 0x00, 0x00, 0x03, 0xF0, - 0x04, 0xF4, 0x64, 0x42, 0x3D, 0x00, 0x2E, 0x40, 0x04, 0x2A, 0x27, 0x00, 0xA1, 0xFF, 0x02, 0xFE, - 0x10, 0x25, 0x42, 0xFE, 0x12, 0x74, 0x72, 0x45, 0x65, 0x4C, 0x94, 0xF3, 0x03, 0x04, 0xE4, 0xE2, - 0xDC, 0x84, 0x94, 0xFB, 0xA1, 0xFF, 0x12, 0x74, 0x80, 0x4C, 0x12, 0x74, 0x95, 0xF3, 0x02, 0x04, - 0xDC, 0x84, 0x95, 0xFB, 0x80, 0x4C, 0x12, 0x74, 0x96, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0x96, 0xFB, - 0x80, 0x4C, 0x12, 0x74, 0x5C, 0x4E, 0xF8, 0xA3, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, 0xFF, 0xB1, - 0xF8, 0xA1, 0x06, 0xA4, 0x60, 0x42, 0x0A, 0x00, 0x4E, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, - 0xC8, 0x82, 0xFF, 0xB1, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xB1, 0x7A, 0xD4, 0x12, 0x74, - 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, 0x1B, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, 0xDA, 0x82, - 0xA2, 0xD2, 0xA1, 0xFF, 0x09, 0x74, 0x60, 0x4D, 0x12, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, - 0x23, 0x43, 0xA1, 0xFF, 0x12, 0x74, 0xA0, 0xD2, 0xFE, 0xA1, 0xCB, 0x83, 0x60, 0x4E, 0xAF, 0x83, - 0x03, 0x1D, 0x05, 0x03, 0x12, 0x74, 0xEB, 0x01, 0xA1, 0xFF, 0x12, 0x74, 0xDF, 0x01, 0x12, 0x74, - 0xDA, 0x83, 0x66, 0x44, 0x22, 0x46, 0x0C, 0xFA, 0x22, 0xF2, 0x0B, 0xFC, 0x28, 0x40, 0x40, 0x2B, - 0x1A, 0x00, 0x10, 0x26, 0x04, 0x00, 0x26, 0x26, 0x0F, 0x00, 0x26, 0x27, 0x0D, 0x00, 0x00, 0xF4, - 0x02, 0x62, 0xA1, 0xFF, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x07, 0x00, 0xA1, 0xFF, 0x12, 0x74, 0x9C, 0x4E, 0x12, 0x74, - 0x9C, 0x4C, 0x12, 0x74, 0x00, 0x00, 0x88, 0xFF, 0xA1, 0xFF, 0xB1, 0x60, 0x58, 0x4F, 0x00, 0x78, - 0xFF, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x78, 0x44, 0x02, 0xA4, 0x35, 0xFB, 0xCC, 0x00, 0x29, 0x44, - 0xF7, 0xB4, 0x40, 0x49, 0x34, 0x64, 0x3A, 0xDB, 0x44, 0xE1, 0xA5, 0x60, 0xB2, 0x78, 0xFF, 0xFF, - 0x00, 0x6B, 0xBC, 0xFF, 0x15, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x15, 0xFB, 0x78, 0x5C, 0x07, 0x00, - 0x78, 0x5C, 0x2F, 0x00, 0x62, 0xFF, 0xFF, 0xFF, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x80, 0x60, - 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, 0x82, 0xF3, 0x40, 0x60, 0x60, 0x40, 0x01, 0x23, 0x48, 0x60, - 0x5E, 0x65, 0x80, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x80, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x00, 0x60, 0x01, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x64, 0x58, - 0xFF, 0xFF, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, 0x82, 0xF3, 0x7C, 0x45, 0x60, 0x40, - 0x01, 0x23, 0x02, 0x65, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x7F, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x48, 0x60, 0x08, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, - 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x40, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x64, 0x58, 0xFF, 0xFF, - 0x12, 0x74, 0x6A, 0x40, 0x87, 0x4F, 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, 0x29, 0x40, 0x40, 0x2B, - 0x08, 0x00, 0x0A, 0x64, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, - 0x09, 0x00, 0x03, 0x64, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0x87, 0x4F, 0x12, 0x74, 0x87, 0x4D, - 0x12, 0x74, 0x87, 0x4D, 0x7C, 0x44, 0x01, 0x08, 0x01, 0x00, 0x67, 0x44, 0x12, 0x74, 0x87, 0x4C, - 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, - 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, 0x04, 0x21, 0x04, 0x00, 0xFF, 0x2A, 0x01, 0x00, 0x04, 0x00, - 0x03, 0x00, 0xFF, 0x2A, 0x0D, 0x00, 0x0C, 0x00, 0xBC, 0xFF, 0x61, 0xFF, 0x78, 0x5C, 0x57, 0x01, - 0x78, 0x5C, 0x7F, 0x01, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, - 0x6A, 0x44, 0x2F, 0x58, 0xFF, 0xFF, 0x04, 0x74, 0xC4, 0xE2, 0x04, 0xE1, 0x29, 0x40, 0x40, 0x2B, - 0x05, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xBC, 0xFF, 0x14, 0x74, 0x01, 0x00, 0x04, 0x74, 0xC4, 0xE2, - 0x04, 0xE1, 0xBC, 0xFF, 0xB5, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, - 0x09, 0x7D, 0x7C, 0x4B, 0x29, 0x40, 0x40, 0x27, 0x04, 0x00, 0xC2, 0x60, 0x58, 0x4F, 0xC8, 0x78, - 0xFF, 0xFF, 0xA1, 0xFF, 0x29, 0x40, 0x10, 0x26, 0x6D, 0x00, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, - 0x84, 0xE7, 0x82, 0xF3, 0x40, 0x60, 0x60, 0x40, 0x01, 0x23, 0x48, 0x60, 0x5E, 0x65, 0x80, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x80, 0x60, 0x00, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x01, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, - 0x84, 0xE7, 0x82, 0xF3, 0x7C, 0x45, 0x60, 0x40, 0x01, 0x23, 0x02, 0x65, 0x8C, 0x60, 0x48, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x00, 0x60, 0x7F, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x48, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x40, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x95, 0x60, 0x84, 0xE7, 0x01, 0x60, 0x08, 0xE1, 0xFF, 0xFF, 0xC4, 0xE2, 0x29, 0x40, 0x40, 0x2B, - 0x04, 0x00, 0xC2, 0x60, 0x58, 0x4F, 0xC8, 0x78, 0xFF, 0xFF, 0xC2, 0x60, 0x58, 0x4F, 0xD0, 0x78, - 0xFF, 0xFF, 0xA1, 0xFF, 0xAD, 0xF3, 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, - 0xE0, 0x94, 0x35, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x08, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0x43, 0xFF, 0x01, 0x60, 0x00, 0xE1, 0x28, 0xF3, 0x47, 0xFF, 0x60, 0x40, 0x07, 0x37, 0x66, 0x00, - 0x05, 0x3B, 0x04, 0x00, 0xFF, 0x0A, 0x80, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x18, 0x60, 0x07, 0xF1, - 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x64, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, - 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x29, 0xF5, 0x2A, 0xF3, 0x47, 0xFF, - 0x3F, 0xF0, 0x01, 0x1B, 0x01, 0x64, 0x60, 0x56, 0xAD, 0xE2, 0xB5, 0xFF, 0x6C, 0x40, 0x40, 0xE1, - 0xA1, 0xFF, 0x00, 0xF4, 0x6E, 0x61, 0x12, 0x62, 0x64, 0x43, 0x01, 0xE1, 0x03, 0x64, 0xE2, 0xD0, - 0xC9, 0x81, 0x64, 0x4C, 0xCC, 0x84, 0xDA, 0x82, 0xFA, 0x02, 0x01, 0x60, 0x00, 0x6B, 0x9A, 0xFF, - 0xCA, 0x82, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xFF, 0x7A, 0xD0, 0xA1, 0xFF, 0x64, 0x4C, - 0xFC, 0x1C, 0xF8, 0x1D, 0x00, 0xB9, 0x06, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, 0x5A, 0xD2, - 0xA1, 0xFF, 0x60, 0x4D, 0x3F, 0x40, 0x02, 0x2B, 0x10, 0x00, 0x28, 0xF3, 0xA5, 0x60, 0xC4, 0x65, - 0x60, 0x40, 0x0E, 0x3B, 0x0A, 0x00, 0xD2, 0xF3, 0xFF, 0xFF, 0x10, 0xBC, 0xD2, 0xFB, 0xAD, 0x4F, - 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x85, 0x4C, 0xFE, 0x01, 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, - 0xD2, 0xFB, 0xA1, 0xFF, 0x87, 0x4E, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x67, 0x4C, - 0xFF, 0xFF, 0xBC, 0xFF, 0x00, 0xE1, 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x64, 0x40, 0x46, - 0x60, 0x41, 0xB5, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x29, 0xF5, 0x3F, 0xF0, 0x24, 0xF2, 0x44, 0x43, - 0x40, 0x4D, 0x00, 0xF4, 0xF3, 0x60, 0xA0, 0x65, 0x10, 0x62, 0x5A, 0xD2, 0xD9, 0x81, 0xD4, 0x80, - 0xFF, 0xFF, 0xFB, 0x02, 0x61, 0x45, 0x2D, 0x44, 0xD4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xFD, 0xA5, 0x48, 0x60, 0x00, 0x64, 0xC4, 0x9D, 0x0D, 0x60, 0x00, 0x6B, 0x2D, 0x44, 0xC0, 0x83, - 0xBB, 0xFF, 0x29, 0xF5, 0x01, 0xE1, 0x00, 0xF4, 0x6C, 0x61, 0x10, 0x62, 0x05, 0x00, 0x00, 0xF4, - 0x01, 0xF2, 0xFF, 0xFF, 0x60, 0x41, 0x04, 0x62, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x1A, 0x00, - 0x26, 0x44, 0x01, 0x26, 0x0C, 0x00, 0x2D, 0x44, 0xC8, 0x84, 0x40, 0x4D, 0x02, 0x03, 0x6C, 0x45, - 0xF3, 0x01, 0x03, 0x15, 0x01, 0x64, 0x05, 0xFA, 0x15, 0x00, 0x6C, 0x45, 0xED, 0x01, 0x23, 0x44, - 0xC8, 0x84, 0x40, 0x43, 0x02, 0x03, 0x6C, 0x45, 0xE7, 0x01, 0x00, 0x64, 0x01, 0x15, 0x01, 0x64, - 0x6C, 0x45, 0x05, 0xFB, 0xE2, 0xD2, 0xDA, 0x82, 0xC9, 0x81, 0x60, 0x4C, 0xDD, 0x1C, 0xD7, 0x03, - 0xBC, 0xFF, 0xDA, 0x01, 0x00, 0xE1, 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, - 0x67, 0x4C, 0x43, 0xFF, 0xD2, 0xF3, 0xFF, 0xFF, 0x10, 0xBC, 0xD2, 0xFB, 0xAD, 0x4F, 0x02, 0xBC, - 0x00, 0x7F, 0xA0, 0x5D, 0x01, 0xE1, 0x01, 0x60, 0x69, 0x6B, 0xA5, 0x60, 0xC4, 0x64, 0x60, 0x4C, - 0xBB, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, 0xFC, 0x01, - 0x29, 0xF3, 0x2A, 0xF1, 0x07, 0xB5, 0x04, 0xE1, 0x65, 0x41, 0x64, 0x54, 0xCD, 0xE2, 0x95, 0x81, - 0xA1, 0x5D, 0xA1, 0xFF, 0xFF, 0xFF, 0xF9, 0x01, 0x10, 0x61, 0x7F, 0x60, 0xC0, 0x64, 0xA0, 0x80, - 0x7F, 0x67, 0x02, 0x63, 0x25, 0x02, 0x98, 0xFE, 0x19, 0x05, 0x0F, 0x60, 0x7F, 0xF5, 0x0E, 0xF2, - 0x15, 0x18, 0x02, 0x18, 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, - 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, - 0x28, 0xB9, 0x10, 0x7E, 0x00, 0x7F, 0x0E, 0xFA, 0x00, 0x67, 0x0A, 0x00, 0x20, 0x44, 0xDC, 0x85, - 0x0F, 0xB4, 0xF7, 0xA0, 0x7F, 0x67, 0x07, 0x63, 0x03, 0x05, 0x45, 0x40, 0x00, 0x67, 0xD8, 0xFE, - 0xFF, 0x27, 0x05, 0xFD, 0x0A, 0x7E, 0x04, 0xFB, 0x61, 0x55, 0x48, 0x00, 0x28, 0xFB, 0x01, 0xF3, - 0x29, 0xFB, 0x44, 0x46, 0x40, 0x45, 0x10, 0x61, 0x7E, 0x60, 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, - 0x02, 0x63, 0x30, 0x02, 0xB5, 0x60, 0x58, 0x4F, 0x4B, 0x78, 0xFF, 0xFF, 0x7F, 0x67, 0x03, 0x63, - 0x29, 0x02, 0x26, 0x40, 0x01, 0x2B, 0x23, 0x00, 0x98, 0xFE, 0x18, 0x05, 0x0F, 0x60, 0x7F, 0xF5, - 0x0E, 0xF2, 0x14, 0x18, 0x02, 0x18, 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, - 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, - 0xA2, 0xDB, 0x08, 0xB9, 0x10, 0x7E, 0x00, 0x7F, 0x0E, 0xFA, 0x09, 0x00, 0x20, 0x44, 0xDC, 0x85, - 0x0F, 0xB4, 0xF7, 0xA0, 0x7F, 0x67, 0x07, 0x63, 0x05, 0x05, 0x45, 0x40, 0xD8, 0xFE, 0x00, 0x67, - 0xD0, 0xFE, 0xD9, 0xFE, 0xFF, 0x27, 0x05, 0xFD, 0x0B, 0x7E, 0x04, 0xFB, 0x0A, 0x60, 0x7E, 0xF3, - 0xFF, 0xFF, 0x20, 0xB0, 0x80, 0xBC, 0x08, 0x28, 0xA2, 0xDB, 0x61, 0x55, 0x66, 0x00, 0x04, 0xB5, - 0x82, 0xB5, 0x25, 0x02, 0x04, 0x03, 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, 0xA3, 0xD3, 0x99, 0xFE, - 0x04, 0x04, 0x02, 0xBC, 0xFE, 0xB4, 0xA3, 0xDB, 0x59, 0x00, 0xBC, 0xF3, 0x20, 0x40, 0x80, 0x26, - 0x55, 0x00, 0xA3, 0xD3, 0xFF, 0xA0, 0xF8, 0xB4, 0x02, 0x02, 0xA3, 0xDB, 0x1C, 0x00, 0x04, 0xBC, - 0xBF, 0xB4, 0xA3, 0xDB, 0x08, 0xB0, 0x01, 0x64, 0x08, 0x24, 0x02, 0x64, 0x28, 0xFB, 0x20, 0x44, - 0x80, 0xBC, 0x40, 0x40, 0xD0, 0xFE, 0x42, 0x00, 0xBF, 0xB4, 0xA3, 0xDB, 0x3F, 0x00, 0x40, 0xB0, - 0xFF, 0xFF, 0xFA, 0x02, 0xF8, 0xB4, 0xA3, 0xDB, 0x08, 0xB5, 0x07, 0x7C, 0x01, 0x02, 0xBC, 0xF9, - 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, 0x14, 0x60, 0xFC, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB5, - 0x07, 0xB5, 0x08, 0x28, 0xC4, 0x02, 0x99, 0xFE, 0x29, 0x05, 0x20, 0x44, 0x80, 0x26, 0x26, 0x00, - 0x20, 0x2A, 0x03, 0x00, 0xDF, 0xB4, 0x40, 0x40, 0x6A, 0x00, 0x40, 0x2A, 0x1F, 0x00, 0xBF, 0xB4, - 0x40, 0x40, 0x09, 0x00, 0xA8, 0xFF, 0x20, 0x44, 0x99, 0xFE, 0x02, 0x05, 0x80, 0x2A, 0x03, 0x00, - 0x40, 0xBC, 0x40, 0x40, 0x13, 0x00, 0x00, 0xF1, 0x80, 0xBC, 0x40, 0x40, 0x64, 0x44, 0xE0, 0x84, - 0xE8, 0x84, 0x0A, 0x36, 0x29, 0x01, 0x0B, 0x36, 0x59, 0x01, 0x28, 0xFB, 0x01, 0xF1, 0x29, 0xF9, - 0x02, 0xF1, 0x2A, 0xF9, 0x03, 0xF1, 0x2B, 0xF9, 0xD0, 0xFE, 0xAE, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, - 0x82, 0x3E, 0x75, 0x44, 0x02, 0xB0, 0x01, 0xB0, 0x4A, 0x02, 0xDC, 0x02, 0x04, 0xB0, 0x08, 0xB0, - 0x0B, 0x02, 0x20, 0x02, 0x40, 0x26, 0xA7, 0xFF, 0x8C, 0xFF, 0x75, 0x40, 0x80, 0x2B, 0x01, 0x00, - 0xAB, 0xFF, 0x75, 0x44, 0x8D, 0xFF, 0xEA, 0x01, 0x0A, 0xF3, 0xAA, 0xFF, 0x60, 0x40, 0x20, 0x2B, - 0x02, 0x00, 0x38, 0xFF, 0x0D, 0x00, 0x01, 0x26, 0x0C, 0x00, 0xC0, 0x60, 0x00, 0x7C, 0xA0, 0x84, - 0x80, 0x3B, 0x02, 0x00, 0xC0, 0x67, 0x03, 0x00, 0x40, 0x3B, 0x02, 0x00, 0x00, 0x67, 0x0A, 0xFB, - 0xD5, 0x01, 0xD4, 0x01, 0x0B, 0xF1, 0xAB, 0xFF, 0x64, 0x44, 0xFF, 0x27, 0x1F, 0x00, 0x20, 0x26, - 0x03, 0x00, 0x02, 0x60, 0x00, 0x75, 0x1A, 0x00, 0x19, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, 0x04, 0x60, - 0x00, 0x75, 0x0A, 0x64, 0xCC, 0x84, 0x19, 0xFB, 0x01, 0x60, 0x00, 0x75, 0x64, 0x40, 0x03, 0x22, - 0x0D, 0x00, 0x20, 0x44, 0x80, 0x2A, 0x03, 0x00, 0x20, 0xBC, 0x40, 0x40, 0x07, 0x00, 0xD9, 0xFE, - 0x81, 0x60, 0x0B, 0x64, 0x28, 0xFB, 0x2C, 0x44, 0x29, 0xFB, 0xD0, 0xFE, 0xAF, 0x01, 0xA9, 0xFF, - 0x77, 0x44, 0x60, 0x57, 0x40, 0x4A, 0x01, 0x2A, 0x20, 0x00, 0x24, 0x44, 0xAC, 0x86, 0x08, 0xF2, - 0x1C, 0x03, 0x1F, 0x60, 0x04, 0x65, 0xD4, 0x80, 0x0E, 0xF2, 0x02, 0x03, 0xA5, 0xD5, 0x04, 0x00, - 0x01, 0xBC, 0x0E, 0xFA, 0x09, 0xF4, 0xD1, 0xFE, 0x46, 0x44, 0x0F, 0x18, 0x3F, 0xF2, 0x48, 0x65, - 0xC4, 0x84, 0x13, 0xFB, 0x66, 0x44, 0x10, 0xFB, 0x66, 0x47, 0x20, 0xBF, 0x3B, 0x42, 0x04, 0xA2, - 0xA2, 0xDB, 0x0E, 0xF2, 0x41, 0x75, 0x10, 0xBC, 0x0E, 0xFA, 0x2A, 0x44, 0x08, 0x2A, 0x17, 0x00, - 0x23, 0x44, 0x00, 0xA8, 0x5C, 0x43, 0x13, 0x03, 0x0F, 0x60, 0x7F, 0xF5, 0x01, 0x00, 0x09, 0xF4, - 0x0E, 0xF2, 0x0D, 0x18, 0x08, 0xB0, 0x18, 0xAC, 0xFA, 0x03, 0x0E, 0xFA, 0x66, 0x43, 0x11, 0xFD, - 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x28, 0x75, 0x2A, 0x44, - 0x06, 0x22, 0x2D, 0x00, 0x22, 0x44, 0x00, 0xA8, 0x60, 0x46, 0x0E, 0xF2, 0x28, 0x03, 0x10, 0xB0, - 0x01, 0xBC, 0x03, 0x02, 0x00, 0x64, 0x40, 0x42, 0x22, 0x00, 0x0E, 0xFA, 0xD1, 0xFE, 0x1E, 0x60, - 0xF8, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x80, 0x00, 0x46, 0x42, 0x19, 0x02, 0x22, 0x47, 0x40, 0xBF, - 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x23, 0xF2, 0x66, 0x43, 0x00, 0xA8, 0x0E, 0xF2, 0x08, 0x02, - 0x60, 0x40, 0x02, 0x2A, 0xE4, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, 0x02, 0x75, 0x07, 0x00, - 0x60, 0x40, 0x04, 0x2A, 0xDC, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, 0x04, 0x75, 0x2A, 0x44, - 0x80, 0x2A, 0x19, 0x00, 0x21, 0x44, 0xAC, 0x86, 0x0E, 0xF2, 0x15, 0x03, 0x01, 0xBC, 0x0E, 0xFA, - 0xD1, 0xFE, 0x1F, 0x60, 0x10, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x56, 0x00, 0x46, 0x41, 0x0B, 0x02, - 0x21, 0x47, 0x10, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, 0x66, 0x43, 0x08, 0xFD, - 0x10, 0xBC, 0x0E, 0xFA, 0x80, 0x75, 0x2A, 0x44, 0x10, 0xB0, 0x20, 0x44, 0x15, 0x03, 0x7F, 0xB4, - 0x40, 0x40, 0x14, 0x60, 0xFC, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB0, 0x80, 0xB0, 0x09, 0x03, - 0x08, 0x03, 0x40, 0xBC, 0x7F, 0xB4, 0x04, 0xB0, 0xA3, 0xDB, 0x03, 0x03, 0x20, 0x44, 0x80, 0xBC, - 0x40, 0x40, 0xB3, 0x60, 0x8B, 0x78, 0xFF, 0xFF, 0xB3, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0xE8, 0xFE, - 0x14, 0x05, 0xEA, 0xFE, 0x24, 0x05, 0xE9, 0xFE, 0x1C, 0x05, 0xE7, 0xFE, 0x09, 0x05, 0x47, 0xFF, - 0x20, 0x44, 0x0F, 0x22, 0x03, 0x00, 0xCC, 0x84, 0x40, 0x40, 0x0F, 0x22, 0xB8, 0xFE, 0xEC, 0x01, - 0x23, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0xE8, 0x02, 0x6F, 0x01, 0x24, 0x41, 0x00, 0xB9, 0x1F, 0x60, - 0x04, 0x65, 0x45, 0x47, 0xE1, 0x02, 0x58, 0x4F, 0x0F, 0x00, 0xDE, 0x02, 0x5C, 0x4A, 0x46, 0x44, - 0x4D, 0x01, 0x22, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0x08, 0x24, 0x81, 0x01, 0xD5, 0x01, 0x21, 0x41, - 0x00, 0xB9, 0x5C, 0x4A, 0xA6, 0x03, 0xD0, 0x01, 0x27, 0xD3, 0x03, 0x00, 0x10, 0xB0, 0x09, 0xF2, - 0x04, 0x03, 0xAC, 0x86, 0x0E, 0xF2, 0xFA, 0x02, 0x08, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0E, 0xF3, - 0x0F, 0x60, 0xFE, 0x65, 0x0C, 0xF3, 0x24, 0x86, 0x24, 0x46, 0x60, 0x40, 0xFB, 0x3B, 0x07, 0x00, - 0x80, 0x26, 0x02, 0x00, 0x23, 0x46, 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, 0x0C, 0x00, 0x2E, 0xF3, - 0x40, 0x45, 0xF8, 0x2B, 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x44, 0x00, 0x07, 0x02, - 0x58, 0x4F, 0x50, 0x00, 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, - 0x00, 0xBF, 0x0E, 0xFB, 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, - 0xAC, 0xFF, 0xB3, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0x8E, 0xFF, 0x0F, 0xF3, 0x0F, 0x60, 0xFE, 0x65, - 0x24, 0x86, 0x0D, 0xF3, 0x24, 0x46, 0x60, 0x40, 0xFB, 0x3B, 0x07, 0x00, 0x80, 0x26, 0x02, 0x00, - 0x23, 0x46, 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, 0x0C, 0x00, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, - 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x16, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x22, 0x00, - 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0F, 0xFB, - 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, 0x8D, 0xFF, 0xAD, 0xFF, - 0xB3, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0x25, 0x44, 0x89, 0xF1, 0x8A, 0xF1, 0xD0, 0x80, 0xD0, 0x80, - 0x07, 0x04, 0x01, 0x06, 0x05, 0x00, 0x25, 0x46, 0x01, 0xF0, 0x03, 0x67, 0xA0, 0x85, 0x94, 0x80, - 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x46, 0x26, 0x41, 0x46, 0x63, 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB5, - 0xD5, 0x81, 0x00, 0xF2, 0x05, 0x04, 0x04, 0x63, 0x60, 0x46, 0xF7, 0x1B, 0x42, 0xFE, 0x0D, 0x00, - 0x61, 0x44, 0xC5, 0x81, 0x63, 0x45, 0xC5, 0x81, 0x9C, 0x84, 0xDC, 0x84, 0x01, 0xF2, 0xF0, 0x85, - 0xF0, 0x80, 0x65, 0x44, 0xF8, 0x85, 0xFF, 0xFF, 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, - 0x0F, 0x60, 0x8B, 0xF3, 0xFF, 0xFF, 0xAC, 0x86, 0x0E, 0xF2, 0x07, 0x03, 0x00, 0xA8, 0x09, 0xF2, - 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, 0x08, 0xFE, 0x17, 0x00, 0x8B, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, - 0x00, 0xB4, 0x12, 0x06, 0x09, 0x60, 0x08, 0x61, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, - 0xB5, 0x60, 0x58, 0x4E, 0xC1, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x06, 0x03, 0x2A, 0x43, 0xB5, 0x60, - 0x58, 0x4E, 0xE2, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x41, 0x4A, - 0x42, 0xA1, 0x03, 0x00, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, 0xB5, 0x60, 0x58, 0x4E, - 0xC1, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x2A, 0x43, 0xB5, 0x60, 0x58, 0x4E, 0xE2, 0x78, 0xFF, 0xFF, - 0x08, 0xFE, 0x0C, 0x00, 0x0F, 0x60, 0x8B, 0xF3, 0xFF, 0xFF, 0xAC, 0x86, 0x0E, 0xF2, 0x06, 0x03, - 0x00, 0xA8, 0x09, 0xF2, 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, - 0xFF, 0xFF, 0x8C, 0xF3, 0x7C, 0x63, 0x00, 0xBE, 0x40, 0x45, 0x1A, 0x03, 0x00, 0x65, 0x65, 0x44, - 0xDC, 0x85, 0x84, 0xA1, 0x00, 0xF2, 0x06, 0x06, 0x01, 0xFC, 0x00, 0xA8, 0x60, 0x46, 0xF7, 0x02, - 0x40, 0x45, 0x0E, 0x00, 0x8B, 0xF3, 0x00, 0x63, 0xD4, 0x84, 0x8B, 0xFB, 0x80, 0x60, 0x7C, 0x64, - 0x01, 0xFA, 0x00, 0xF0, 0x00, 0xFC, 0xD3, 0x80, 0x8C, 0xF9, 0x02, 0x02, 0x8D, 0xF9, 0x08, 0xFE, - 0x2E, 0x58, 0xFF, 0xFF, 0x66, 0x44, 0x25, 0x46, 0x05, 0xFA, 0x06, 0xFA, 0x01, 0xF0, 0x03, 0x67, - 0x02, 0xFC, 0xB0, 0x84, 0x3A, 0x7E, 0x01, 0xFA, 0x12, 0x64, 0x03, 0xFA, 0x00, 0xF0, 0x04, 0xF8, - 0x00, 0x64, 0x0C, 0x61, 0x10, 0x63, 0x59, 0xDA, 0xFE, 0x1F, 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0x43, - 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, 0xEC, 0x63, 0x61, 0x46, - 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, 0xA2, 0xDA, 0xBE, 0xD2, 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, - 0x25, 0x44, 0x61, 0x46, 0xA3, 0xDA, 0x04, 0x00, 0x0A, 0xFA, 0x60, 0x46, 0x25, 0x44, 0x09, 0xFA, - 0x61, 0x46, 0xBE, 0xDA, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x44, 0x00, 0xA8, 0x07, 0x4B, 0x0C, 0x03, - 0x58, 0x4F, 0x33, 0x00, 0x0B, 0x47, 0x1F, 0x60, 0x0A, 0x65, 0x27, 0x44, 0xD4, 0x80, 0x00, 0x64, - 0x01, 0x02, 0x0F, 0xFA, 0x58, 0x4F, 0xD3, 0x01, 0x70, 0x00, 0x25, 0x43, 0xE3, 0x84, 0x7C, 0x41, - 0x02, 0x04, 0xE8, 0x81, 0xEC, 0x63, 0x61, 0x46, 0xA3, 0xD2, 0x00, 0x7C, 0x40, 0x45, 0xBF, 0xD8, - 0xA3, 0xD8, 0xBE, 0xD8, 0x27, 0x42, 0x5A, 0xD3, 0x25, 0x5C, 0x60, 0x41, 0x02, 0x1B, 0x27, 0xD9, - 0x05, 0x00, 0x25, 0x46, 0x0A, 0xFA, 0x61, 0x46, 0x25, 0x44, 0x09, 0xFA, 0x25, 0x44, 0x27, 0x43, - 0x00, 0x61, 0x60, 0x46, 0x09, 0xF2, 0x08, 0xFC, 0x00, 0xA8, 0xDD, 0x81, 0xFA, 0x02, 0xBF, 0xD1, - 0x66, 0x44, 0xBE, 0xDB, 0xC1, 0x84, 0xBF, 0xDB, 0x48, 0x00, 0x25, 0x46, 0xEC, 0x63, 0x08, 0xF2, - 0x89, 0xF2, 0x1E, 0x18, 0x40, 0x47, 0xE0, 0x84, 0xE8, 0x85, 0x02, 0x05, 0xE8, 0x83, 0x00, 0x65, - 0x65, 0x46, 0xBF, 0xD2, 0x61, 0x5C, 0xCC, 0x84, 0xA2, 0xDA, 0x25, 0x46, 0x0A, 0xF2, 0x00, 0xB9, - 0x65, 0x46, 0x08, 0x24, 0xBE, 0xDA, 0x02, 0x1B, 0xA3, 0xD8, 0x02, 0x00, 0x60, 0x46, 0x89, 0xFA, - 0x00, 0xB9, 0x61, 0x46, 0x08, 0x28, 0x0A, 0xFA, 0x25, 0x46, 0x89, 0xFC, 0x8A, 0xFC, 0x88, 0xFC, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x61, 0x28, 0x65, 0x25, 0x43, 0x8D, 0xF3, 0xAF, 0x83, 0x00, 0xBE, - 0x18, 0x03, 0x02, 0x03, 0x00, 0xFC, 0x01, 0x00, 0x8C, 0xFD, 0x63, 0x46, 0x65, 0x44, 0xCC, 0x85, - 0x00, 0xF2, 0x07, 0x02, 0x8D, 0xF5, 0x00, 0x64, 0x00, 0xFA, 0xDE, 0x60, 0xAF, 0x64, 0x09, 0xFB, - 0x08, 0x00, 0x66, 0x43, 0x00, 0xBE, 0xDD, 0x81, 0xF1, 0x02, 0x8B, 0xF1, 0x8D, 0xFD, 0xC1, 0x84, - 0x8B, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x45, 0x29, 0x43, 0xFC, 0xA3, 0x66, 0x44, - 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x00, 0x64, 0xBD, 0xDB, 0x03, 0x61, 0x0E, 0x65, 0x1F, 0x60, - 0x1E, 0x63, 0x43, 0x49, 0xA3, 0xD3, 0x06, 0xA3, 0x00, 0xA8, 0xCD, 0x81, 0x04, 0x02, 0xF9, 0x02, - 0xB3, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0x01, 0x26, 0xE6, 0x01, 0xD4, 0x80, 0x60, 0x45, 0xE3, 0x05, - 0xF6, 0xA3, 0xBD, 0xD1, 0xBD, 0xD1, 0x44, 0x47, 0x44, 0x48, 0x44, 0x45, 0x1F, 0x60, 0x60, 0x64, - 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0xFE, 0x8C, 0xF5, 0x8B, 0xF3, 0x0D, 0x18, 0xCC, 0x84, - 0x8B, 0xFB, 0x80, 0x60, 0x7C, 0x64, 0x01, 0xFA, 0x00, 0x64, 0x00, 0xF0, 0x00, 0xFA, 0xD0, 0x80, - 0x8C, 0xF9, 0x02, 0x02, 0x8D, 0xF9, 0x08, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x1E, 0x60, 0xCE, 0x63, - 0x0D, 0x65, 0x00, 0x61, 0x41, 0x48, 0xA3, 0xD3, 0x06, 0xA3, 0xAC, 0x86, 0x00, 0x61, 0x09, 0x03, - 0x00, 0xF2, 0x09, 0xF0, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, - 0xF6, 0x01, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x65, 0x44, 0x28, 0x45, 0x45, 0x88, 0xCC, 0x85, - 0x5A, 0x87, 0xE9, 0x02, 0x00, 0x64, 0x27, 0xDA, 0x5A, 0xDA, 0x5A, 0x87, 0x87, 0xF3, 0x86, 0xF1, - 0x02, 0xA4, 0x60, 0x46, 0x60, 0x45, 0x00, 0x61, 0x22, 0xF2, 0xFF, 0xFF, 0xAC, 0x86, 0x00, 0xF2, - 0x04, 0x03, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x65, 0x44, 0x02, 0xA5, 0x65, 0x46, - 0x64, 0x44, 0xCC, 0x9C, 0xFF, 0xFF, 0xF0, 0x02, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, - 0x28, 0x45, 0x45, 0x88, 0x87, 0xF3, 0x86, 0xF1, 0x02, 0xA4, 0x60, 0x46, 0x60, 0x45, 0x00, 0x61, - 0x76, 0xF2, 0xFF, 0xFF, 0xAC, 0x86, 0x00, 0xF2, 0x09, 0x03, 0x00, 0xF2, 0x09, 0xF0, 0xAC, 0x86, - 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, 0xF6, 0x01, 0x65, 0x44, 0x02, 0xA5, - 0x65, 0x46, 0x64, 0x44, 0xCC, 0x9C, 0x61, 0x44, 0xEB, 0x02, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, - 0x28, 0x45, 0x45, 0x88, 0x06, 0x60, 0x40, 0x65, 0x8C, 0xF3, 0x01, 0x61, 0xAC, 0x86, 0x00, 0xF2, - 0x03, 0x03, 0xD5, 0x80, 0xDD, 0x81, 0xFA, 0x04, 0xCD, 0x84, 0x25, 0x46, 0x27, 0xDA, 0x28, 0x45, - 0xC4, 0x84, 0x5A, 0xDA, 0xDA, 0x81, 0x8B, 0xF1, 0x59, 0xD8, 0x1E, 0x60, 0xCC, 0x64, 0x18, 0x63, - 0xA0, 0xD1, 0x06, 0xA4, 0x59, 0xD8, 0xFC, 0x1F, 0x00, 0x64, 0x59, 0xDA, 0x59, 0xDA, 0x01, 0x60, - 0x1A, 0x64, 0x0A, 0x63, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x7D, 0xF1, 0x59, 0xD8, 0x45, 0x01, - 0x07, 0x4B, 0xB6, 0x60, 0x58, 0x4F, 0x4D, 0x78, 0xFF, 0xFF, 0x0B, 0x47, 0x58, 0x4F, 0x21, 0x00, - 0x3C, 0x01, 0x07, 0x4B, 0xB6, 0x60, 0x58, 0x4F, 0x4D, 0x78, 0xFF, 0xFF, 0x0B, 0x47, 0x27, 0x44, - 0x00, 0xBE, 0x08, 0xF0, 0x15, 0x03, 0x64, 0x42, 0x4A, 0xD3, 0x09, 0xF2, 0xDC, 0x83, 0xA2, 0xDD, - 0x25, 0x43, 0x09, 0xFC, 0x63, 0x46, 0x27, 0x43, 0x0A, 0xFC, 0x09, 0xFA, 0x08, 0xF8, 0x00, 0xA8, - 0x66, 0x43, 0x03, 0x02, 0x64, 0x44, 0x58, 0xDD, 0x03, 0x00, 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, - 0x1C, 0x01, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, - 0xEC, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, 0xA2, 0xDA, 0xA3, 0xD2, 0x25, 0x46, - 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, 0xBE, 0xDA, 0x04, 0x00, 0x09, 0xFA, 0x60, 0x46, - 0x25, 0x44, 0x0A, 0xFA, 0x61, 0x46, 0xA3, 0xDA, 0x2F, 0x58, 0xFF, 0xFF, 0xA0, 0xFE, 0x07, 0x05, - 0xA3, 0xFE, 0x07, 0x05, 0xA1, 0xFE, 0x46, 0x05, 0x60, 0x64, 0x3B, 0xDB, 0x0F, 0x00, 0x20, 0x58, - 0xFF, 0xFF, 0xFA, 0x01, 0x0A, 0x60, 0x80, 0xF3, 0xFF, 0xFF, 0xFB, 0xB4, 0xA2, 0xDB, 0xA0, 0x4C, - 0x59, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, - 0x83, 0x3E, 0x40, 0x60, 0x0B, 0x65, 0x2B, 0x44, 0x00, 0x63, 0xE8, 0x80, 0xF8, 0x84, 0x02, 0x24, - 0x94, 0x84, 0xF3, 0x83, 0xCD, 0x81, 0xFF, 0xFF, 0xF8, 0x02, 0xDF, 0x83, 0x2F, 0x58, 0x40, 0x4B, - 0x00, 0x62, 0x01, 0x64, 0xD4, 0x80, 0xE0, 0x84, 0x1A, 0x03, 0xD4, 0x80, 0xE0, 0x84, 0x15, 0x03, - 0x61, 0x44, 0x11, 0x61, 0xE0, 0x84, 0xCD, 0x81, 0xFD, 0x04, 0x01, 0x00, 0xE0, 0x84, 0xF2, 0x82, - 0xFF, 0xFF, 0x02, 0x24, 0xC6, 0x82, 0x02, 0x28, 0xD6, 0x82, 0xE2, 0x80, 0xCD, 0x81, 0x02, 0x28, - 0x01, 0xBC, 0xF4, 0x02, 0x01, 0x2A, 0xC6, 0x82, 0x03, 0x00, 0xE9, 0x81, 0xF2, 0x82, 0x61, 0x44, - 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x3B, 0xDB, 0x0C, 0x60, 0x6E, 0xF3, 0x5A, 0xD1, 0x60, 0x40, - 0x04, 0x3A, 0x2C, 0x00, 0x00, 0x64, 0x4A, 0xDB, 0x1E, 0x60, 0xCE, 0x63, 0xA3, 0xD3, 0x46, 0x43, - 0xAC, 0x86, 0x3C, 0x45, 0x22, 0x03, 0xD4, 0x80, 0x07, 0xF2, 0x02, 0x02, 0x09, 0xF2, 0xF8, 0x01, - 0xD0, 0x80, 0x09, 0xF2, 0xF5, 0x02, 0x60, 0x43, 0x80, 0x67, 0xB0, 0x81, 0x61, 0x44, 0x0F, 0x60, - 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x09, 0x60, - 0x08, 0x65, 0x0E, 0xF2, 0x02, 0xF2, 0x60, 0x40, 0xF0, 0x37, 0x05, 0x00, 0x8F, 0xF3, 0xD4, 0x80, - 0xCC, 0x84, 0x01, 0x02, 0x8F, 0xFB, 0x63, 0x44, 0xDB, 0x01, 0x23, 0x46, 0x3C, 0x44, 0xAC, 0x80, - 0xFF, 0xFF, 0x94, 0x02, 0x69, 0xF3, 0x6A, 0xF3, 0x02, 0xA8, 0x02, 0xA8, 0x08, 0x02, 0x00, 0x64, - 0x6B, 0xFB, 0x69, 0xFB, 0x6A, 0xFB, 0x00, 0x64, 0x6C, 0xFB, 0xCA, 0xFE, 0x92, 0x00, 0x03, 0x02, - 0x00, 0x64, 0x6A, 0xFB, 0xCA, 0xFE, 0x01, 0x64, 0x3B, 0xDB, 0x0F, 0x60, 0x6A, 0xF3, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x35, 0x03, 0x2C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x86, 0x00, - 0x2E, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x2C, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x5F, 0x02, 0x66, 0x45, - 0x63, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x80, 0xB0, 0x09, 0xF2, 0x58, 0x03, 0xAC, 0x86, 0xCA, 0x01, - 0x6A, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x4C, 0x02, 0x0F, 0x60, 0x73, 0xF3, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x0F, 0x03, 0x76, 0xF1, 0x07, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0x09, 0xF2, - 0x03, 0x02, 0xAC, 0x86, 0x07, 0xF2, 0xFA, 0x02, 0x03, 0x02, 0x00, 0x64, 0x76, 0xFB, 0xED, 0x01, - 0x46, 0x5C, 0x3C, 0x00, 0x0F, 0x60, 0x76, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x01, 0x03, - 0x35, 0x02, 0x6B, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x13, 0x02, 0x0F, 0x60, 0x6D, 0xF3, - 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x0B, 0x03, 0x2A, 0xF0, 0x20, 0x67, 0x09, 0xF2, 0xB0, 0x83, - 0x00, 0xA8, 0x00, 0x64, 0x02, 0x03, 0x2A, 0xFC, 0x01, 0x00, 0x6B, 0xFB, 0x1F, 0x00, 0x00, 0x64, - 0x6B, 0xFB, 0x0F, 0x60, 0x67, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x12, 0x03, 0x2A, 0xF0, - 0x08, 0x67, 0xA0, 0x80, 0xFF, 0xFF, 0x12, 0x03, 0x76, 0xF1, 0x07, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, - 0x09, 0xF2, 0x03, 0x02, 0xAC, 0x86, 0x07, 0xF2, 0xFA, 0x02, 0x08, 0x02, 0x00, 0x64, 0x76, 0xFB, - 0xE8, 0x01, 0x00, 0x64, 0x76, 0xFB, 0xB7, 0x60, 0xA2, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0xFC, 0xFB, - 0x46, 0x5C, 0x16, 0x60, 0x2B, 0xF3, 0x0D, 0xF2, 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, 0x07, 0xF0, - 0x2A, 0xF2, 0xFF, 0xFF, 0x76, 0xF9, 0x60, 0x40, 0x08, 0x2B, 0x05, 0x00, 0x00, 0x64, 0x48, 0xFB, - 0xBA, 0x60, 0x03, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x02, 0x23, 0xF0, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xBF, 0x60, 0x16, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x00, 0x63, - 0x40, 0x47, 0x50, 0x36, 0x01, 0x00, 0x01, 0x63, 0x48, 0xFD, 0x4A, 0xF3, 0x35, 0xFA, 0x10, 0xA4, - 0x4A, 0xFB, 0x00, 0x64, 0x15, 0xFA, 0x16, 0xFA, 0x0F, 0xFA, 0x07, 0xF0, 0x87, 0xF3, 0xFF, 0xFF, - 0xD0, 0x80, 0xFF, 0xFF, 0x05, 0x03, 0x66, 0x43, 0x64, 0x46, 0x11, 0xF2, 0xBA, 0xFB, 0x63, 0x46, - 0x03, 0xF2, 0x00, 0xF4, 0x01, 0xF2, 0xFC, 0xA5, 0x00, 0x7F, 0xD4, 0x84, 0x27, 0x45, 0x3C, 0x46, - 0x1A, 0xFA, 0x22, 0x63, 0x7B, 0x60, 0xFF, 0x64, 0xA4, 0x84, 0x03, 0x2B, 0x1C, 0x63, 0x2A, 0xFA, - 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA3, 0x60, 0x40, 0xA4, 0x36, 0x14, 0x63, 0x43, 0x4C, 0x18, 0xFC, - 0x00, 0x7C, 0x22, 0xF8, 0x64, 0x41, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x3A, 0xF2, 0x63, 0x46, - 0xFF, 0xB4, 0x22, 0xFA, 0x60, 0x40, 0x00, 0x36, 0x92, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x0C, 0xB0, - 0x08, 0x3A, 0x8D, 0x00, 0x60, 0x40, 0x40, 0x26, 0x8A, 0x00, 0x03, 0xF2, 0x00, 0xF4, 0xA0, 0xD2, - 0xAA, 0x60, 0xAA, 0x65, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x0A, 0x02, 0xD0, 0x80, 0x00, 0x64, - 0x5A, 0xD0, 0x06, 0x02, 0xD0, 0x80, 0xF8, 0x7F, 0xD0, 0x80, 0x01, 0x03, 0x01, 0x02, 0x01, 0x61, - 0x62, 0x43, 0x46, 0x43, 0x3C, 0x46, 0x07, 0xF4, 0x3A, 0xF2, 0xFF, 0xFF, 0xA3, 0x46, 0x60, 0x40, - 0x22, 0x26, 0x49, 0x00, 0x60, 0x45, 0x63, 0x42, 0x5A, 0xD0, 0xCD, 0x81, 0x3C, 0x46, 0x18, 0x02, - 0x64, 0x44, 0x88, 0x3A, 0x15, 0x00, 0x8E, 0x37, 0x00, 0x00, 0x65, 0x44, 0x01, 0x26, 0x5F, 0x00, - 0x04, 0x26, 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x31, 0x00, 0xA3, 0x46, 0x3B, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x80, 0x27, 0x3E, 0x00, 0xA3, 0x46, 0x00, 0x7C, 0x22, 0xF8, 0xA3, 0x46, 0x4F, 0x00, - 0xA3, 0x46, 0x65, 0x44, 0x01, 0x26, 0x0B, 0x00, 0x04, 0x26, 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, - 0x1D, 0x00, 0x3B, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, 0x2B, 0x00, 0x17, 0x00, 0x87, 0xF3, - 0xFF, 0xFF, 0x60, 0x46, 0x3A, 0xF2, 0x66, 0x43, 0xFF, 0xB4, 0x3C, 0x46, 0x22, 0xF0, 0x60, 0x47, - 0xB0, 0x84, 0x22, 0xFA, 0x63, 0x46, 0x3B, 0xF0, 0x60, 0x40, 0x04, 0x27, 0x03, 0x00, 0x10, 0x27, - 0x01, 0x00, 0x04, 0x00, 0x64, 0x40, 0x80, 0x27, 0x14, 0x00, 0x00, 0x00, 0x3C, 0x46, 0x02, 0x65, - 0xBE, 0x60, 0xB6, 0x78, 0xFF, 0xFF, 0xCD, 0x81, 0x63, 0x42, 0x5A, 0xD0, 0x3C, 0x46, 0x09, 0x02, - 0x64, 0x44, 0x88, 0x3A, 0x06, 0x00, 0x77, 0x37, 0x1A, 0x00, 0x78, 0x37, 0x18, 0x00, 0x8E, 0x37, - 0x16, 0x00, 0x3C, 0x46, 0x22, 0xF0, 0x80, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0xFF, 0xFF, 0x3F, 0xF2, - 0x3E, 0xF0, 0x08, 0xA4, 0x60, 0x41, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, - 0x04, 0x26, 0x03, 0x00, 0x04, 0x00, 0x04, 0x2B, 0x02, 0x00, 0x61, 0x44, 0x3F, 0xFA, 0x3C, 0x46, - 0x2C, 0xF2, 0x27, 0x40, 0x01, 0x27, 0x32, 0xF2, 0xB4, 0xF1, 0x60, 0x40, 0x01, 0x26, 0x47, 0x00, - 0x09, 0x60, 0x00, 0x64, 0xD0, 0x80, 0x3F, 0xF2, 0x09, 0x06, 0x2C, 0x45, 0xC4, 0x84, 0xD0, 0x80, - 0x40, 0x4A, 0x34, 0x06, 0x60, 0x43, 0x64, 0x44, 0x54, 0x88, 0x17, 0x00, 0x60, 0x45, 0x13, 0x60, - 0x4B, 0xF3, 0xBB, 0xF3, 0x00, 0xBC, 0x60, 0x47, 0xEC, 0xA0, 0x28, 0x03, 0x27, 0x07, 0x2C, 0x44, - 0xC4, 0x81, 0x02, 0x60, 0x1C, 0x65, 0x45, 0x4A, 0xD5, 0x80, 0x2C, 0x45, 0x1F, 0x06, 0x27, 0x40, - 0x04, 0x27, 0x25, 0x00, 0x2A, 0x43, 0xD7, 0x85, 0x45, 0x48, 0xB5, 0xF1, 0x0F, 0xF2, 0xD3, 0x80, - 0x01, 0x65, 0x01, 0x07, 0x00, 0x65, 0xB4, 0x84, 0x0F, 0xFA, 0x00, 0x63, 0x3F, 0xF2, 0x28, 0x45, - 0x60, 0x41, 0xD4, 0x84, 0xDF, 0x83, 0xFC, 0x07, 0x14, 0xFC, 0x17, 0xFA, 0x04, 0x60, 0x00, 0x64, - 0x27, 0x45, 0xB4, 0x84, 0x2A, 0xFA, 0x28, 0x43, 0x16, 0xFC, 0x0D, 0x00, 0x3F, 0xF2, 0x2C, 0x45, - 0xB5, 0xF1, 0xC4, 0x81, 0xD1, 0x80, 0x0F, 0xF2, 0x01, 0x06, 0x01, 0xBC, 0x0F, 0xFA, 0x3F, 0xF2, - 0x17, 0xFA, 0x01, 0x64, 0x14, 0xFA, 0x0F, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2A, 0x6F, 0x00, - 0x64, 0xF1, 0x15, 0x60, 0xDD, 0xF3, 0x64, 0x40, 0x01, 0x27, 0x03, 0x00, 0x60, 0x40, 0x02, 0x26, - 0x14, 0x00, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x12, 0xF0, 0x15, 0x60, 0xDE, 0xF3, 0x63, 0x46, - 0x64, 0x40, 0x10, 0x2A, 0x20, 0x00, 0x60, 0x40, 0x02, 0x26, 0x07, 0x00, 0x01, 0x26, 0x08, 0x00, - 0x04, 0x26, 0x09, 0x00, 0x06, 0x61, 0x6E, 0x63, 0x08, 0x00, 0x02, 0x61, 0x14, 0x63, 0x05, 0x00, - 0x00, 0x61, 0x0A, 0x63, 0x02, 0x00, 0x04, 0x61, 0x37, 0x63, 0x00, 0x64, 0x25, 0x60, 0xA2, 0x65, - 0x45, 0xD1, 0xD5, 0x81, 0x15, 0x60, 0xDA, 0xF9, 0x25, 0x60, 0x7A, 0x65, 0x45, 0xD1, 0x1C, 0xFC, - 0xB0, 0x84, 0x1E, 0xFA, 0x3C, 0x00, 0x60, 0x40, 0x10, 0x2A, 0x04, 0x00, 0x08, 0x61, 0x1E, 0x60, - 0x0B, 0x63, 0x27, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x0A, 0x61, 0x16, 0x60, 0x0F, 0x63, 0x21, 0x00, - 0x40, 0x2A, 0x04, 0x00, 0x0C, 0x61, 0x12, 0x60, 0x0A, 0x63, 0x1B, 0x00, 0x80, 0x2A, 0x04, 0x00, - 0x0E, 0x61, 0x0E, 0x60, 0x0E, 0x63, 0x15, 0x00, 0x01, 0x2B, 0x04, 0x00, 0x10, 0x61, 0x0E, 0x60, - 0x09, 0x63, 0x0F, 0x00, 0x02, 0x2B, 0x04, 0x00, 0x12, 0x61, 0x0A, 0x60, 0x0D, 0x63, 0x09, 0x00, - 0x04, 0x2B, 0x04, 0x00, 0x14, 0x61, 0x0A, 0x60, 0x08, 0x63, 0x03, 0x00, 0x16, 0x61, 0x0A, 0x60, - 0x0C, 0x63, 0x1E, 0xF0, 0x40, 0x67, 0x25, 0x60, 0xA2, 0x65, 0x45, 0xD1, 0xD5, 0x81, 0x15, 0x60, - 0xDA, 0xF9, 0x25, 0x60, 0x7A, 0x65, 0x45, 0xD1, 0x1C, 0xFC, 0xB0, 0x84, 0x1E, 0xFA, 0xAA, 0xF2, - 0x15, 0x60, 0xC2, 0xF3, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x44, 0x44, 0x61, 0x40, 0x08, 0x26, - 0x02, 0x00, 0x61, 0x40, 0x80, 0x36, 0x12, 0xF2, 0x63, 0x46, 0x2C, 0x60, 0x26, 0x61, 0x00, 0x7F, - 0x60, 0x45, 0x45, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x00, 0x7F, 0x4B, 0xFB, 0x65, 0x44, 0x00, 0x7E, - 0xBB, 0xFB, 0x62, 0xF1, 0x60, 0x43, 0x60, 0x47, 0xD0, 0x80, 0xC0, 0x65, 0x01, 0x06, 0x64, 0x44, - 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, 0x6E, 0x36, 0x0B, 0x64, - 0x44, 0x86, 0x2A, 0xF2, 0x07, 0xF0, 0x60, 0x40, 0xB0, 0x3A, 0x03, 0x00, 0x40, 0x3B, 0x01, 0x00, - 0x12, 0x00, 0x0C, 0xB4, 0x08, 0x3A, 0x44, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, - 0x3F, 0x00, 0x17, 0xF2, 0x22, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x22, 0x22, 0x04, 0x00, 0x00, 0xA8, - 0x01, 0xA8, 0x36, 0x03, 0x35, 0x03, 0x3C, 0x46, 0x2A, 0xF0, 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, - 0x60, 0x45, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x43, 0x60, 0x40, 0x01, 0x26, 0x05, 0x00, 0x04, 0x26, - 0x1D, 0x00, 0x10, 0x26, 0x10, 0x00, 0x04, 0x00, 0x04, 0x27, 0x18, 0x00, 0x10, 0x27, 0x0B, 0x00, - 0x65, 0x44, 0x2A, 0x61, 0x60, 0x40, 0x03, 0x2B, 0x24, 0x61, 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA1, - 0x41, 0x4C, 0x98, 0xFA, 0x15, 0x00, 0x65, 0x44, 0x32, 0x61, 0x60, 0x40, 0x03, 0x2B, 0x2C, 0x61, - 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA1, 0x41, 0x4C, 0x98, 0xFA, 0x0A, 0x00, 0x65, 0x44, 0x2E, 0x61, - 0x60, 0x40, 0x03, 0x2B, 0x28, 0x61, 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA1, 0x41, 0x4C, 0x98, 0xFA, - 0xBB, 0x60, 0xFB, 0x78, 0xFF, 0xFF, 0x66, 0x45, 0xAA, 0xF2, 0x15, 0x60, 0xC2, 0xF3, 0x24, 0x46, - 0x61, 0x40, 0x08, 0x26, 0x02, 0x00, 0x61, 0x40, 0x80, 0x36, 0x12, 0xF2, 0x65, 0x46, 0x60, 0x40, - 0x10, 0x26, 0x34, 0x00, 0x2C, 0x45, 0x17, 0xF2, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x81, 0x64, 0x45, 0x16, 0xA1, 0xB7, 0x60, 0x58, 0x4D, 0xC0, 0x78, 0xFF, 0xFF, 0x64, 0xF1, - 0x01, 0xA4, 0xE0, 0x84, 0xE0, 0x84, 0x64, 0x40, 0x01, 0x2B, 0x06, 0xA4, 0x1B, 0xFA, 0xBB, 0xF3, - 0x25, 0x60, 0x82, 0x65, 0x60, 0x40, 0x0B, 0x37, 0x00, 0x63, 0x0F, 0x37, 0x02, 0x63, 0x0A, 0x37, - 0x04, 0x63, 0x0E, 0x37, 0x06, 0x63, 0x09, 0x37, 0x08, 0x63, 0x0D, 0x37, 0x0A, 0x63, 0x08, 0x37, - 0x0C, 0x63, 0x0C, 0x37, 0x0E, 0x63, 0x28, 0xA3, 0x47, 0xD1, 0xD8, 0xA3, 0xD7, 0x83, 0x15, 0x60, - 0xD9, 0xF9, 0x47, 0xD1, 0x40, 0x67, 0xB0, 0x84, 0x1F, 0xFA, 0x56, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x80, 0x36, 0x17, 0x00, 0x50, 0x36, 0x15, 0x00, 0x10, 0x36, 0x13, 0x00, 0x30, 0x36, - 0x11, 0x00, 0xA0, 0x36, 0x0F, 0x00, 0xB0, 0x36, 0x0D, 0x00, 0xC0, 0x36, 0x0B, 0x00, 0xBB, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x0A, 0x37, 0x06, 0x00, 0x15, 0x60, 0xDD, 0xF3, 0x80, 0x60, 0x00, 0x61, - 0x60, 0x40, 0x04, 0x26, 0x00, 0x61, 0xBB, 0xF3, 0x25, 0x60, 0x7A, 0x65, 0x60, 0x40, 0x0A, 0x37, - 0x00, 0x63, 0x14, 0x37, 0x02, 0x63, 0x37, 0x37, 0x04, 0x63, 0x6E, 0x37, 0x06, 0x63, 0x28, 0xA3, - 0x47, 0xD1, 0xD8, 0xA3, 0xD7, 0x83, 0x15, 0x60, 0xD9, 0xF9, 0x47, 0xD1, 0xFF, 0xFF, 0xB1, 0x84, - 0x1F, 0xFA, 0xBB, 0xF1, 0x2C, 0x45, 0x64, 0x43, 0x17, 0xF2, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, 0xB7, 0x60, 0x58, 0x4D, - 0xC0, 0x78, 0xFF, 0xFF, 0xAE, 0x82, 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, - 0x60, 0x41, 0x04, 0x0D, 0x63, 0x44, 0x80, 0x7E, 0xBB, 0xFB, 0x61, 0x44, 0xDC, 0x84, 0x2B, 0xF0, - 0x1B, 0xFA, 0x64, 0x44, 0x80, 0x27, 0x47, 0x00, 0x07, 0xF0, 0x66, 0x45, 0x64, 0x46, 0x12, 0xF2, - 0x65, 0x46, 0x60, 0x40, 0x10, 0x2A, 0x2E, 0x00, 0x16, 0xF2, 0x0F, 0xF0, 0xAC, 0x84, 0x2C, 0x45, - 0x29, 0x03, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, - 0xE1, 0x81, 0x64, 0x45, 0x0F, 0xF0, 0xB7, 0x60, 0x58, 0x4D, 0xC0, 0x78, 0xFF, 0xFF, 0xAE, 0x82, - 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, 0x80, 0x67, - 0xB0, 0x84, 0x0F, 0xFA, 0x61, 0x44, 0xDC, 0x84, 0x1D, 0xFA, 0xDE, 0x65, 0xC4, 0x85, 0x26, 0x41, - 0xE1, 0x81, 0xC5, 0x84, 0x2B, 0xFA, 0x1B, 0xF0, 0xDE, 0x64, 0xC0, 0x85, 0x26, 0x44, 0xE0, 0x84, - 0xC4, 0x84, 0x10, 0xFA, 0x26, 0x44, 0x2C, 0xF0, 0x0A, 0xA4, 0x66, 0x45, 0x24, 0x46, 0x92, 0xF2, - 0x65, 0x46, 0x9F, 0xF0, 0x61, 0x40, 0x10, 0x2A, 0x03, 0x00, 0x65, 0x40, 0x80, 0x27, 0xA0, 0xA4, - 0x64, 0x40, 0x01, 0x26, 0x00, 0x64, 0x11, 0xFA, 0xBB, 0xF3, 0x13, 0xFA, 0x7C, 0x44, 0x1D, 0xFA, - 0xFF, 0xFF, 0x0D, 0xF2, 0x3E, 0xF0, 0x60, 0x47, 0xFF, 0xB4, 0x64, 0x41, 0x01, 0xB1, 0x01, 0x63, - 0x17, 0x02, 0x60, 0x41, 0xFF, 0x22, 0x04, 0x00, 0xB7, 0x60, 0x58, 0x4F, 0xB1, 0x78, 0xFF, 0xFF, - 0x07, 0x60, 0xF7, 0xFD, 0x16, 0x60, 0x2B, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x01, 0x63, 0x61, 0x40, - 0xFF, 0x22, 0x04, 0x00, 0xB7, 0x60, 0x58, 0x4F, 0xB1, 0x78, 0xFF, 0xFF, 0x07, 0x60, 0xF8, 0xFD, - 0xBD, 0x60, 0x7A, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x03, 0x00, - 0xBD, 0x60, 0x75, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0x46, 0x43, 0x60, 0x40, 0x22, 0x26, 0x09, 0x00, - 0x01, 0x26, 0x0A, 0x00, 0x04, 0x26, 0x4B, 0x00, 0x10, 0x26, 0x10, 0x00, 0xBD, 0x60, 0x75, 0x78, - 0xFF, 0xFF, 0xBC, 0x60, 0xF0, 0x78, 0xFF, 0xFF, 0x04, 0x27, 0x3D, 0x00, 0x10, 0x27, 0x03, 0x00, - 0xBD, 0x60, 0x75, 0x78, 0xFF, 0xFF, 0x87, 0xF3, 0x3C, 0xF1, 0x02, 0x00, 0x07, 0xF2, 0x00, 0x7C, - 0x40, 0x43, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x21, 0x00, 0xA3, 0x46, 0x4B, 0xF2, - 0xFF, 0xFF, 0xDC, 0x84, 0x4B, 0xFA, 0x4A, 0xF2, 0x08, 0x04, 0xDC, 0x84, 0x4A, 0xFA, 0x49, 0xF2, - 0x04, 0x04, 0xDC, 0x84, 0x49, 0xFA, 0x01, 0x04, 0xFF, 0xFF, 0x87, 0xF3, 0x66, 0x5C, 0xD0, 0x80, - 0x00, 0x7C, 0x01, 0x02, 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x47, 0x20, 0xBF, 0xA3, 0x46, 0x3A, 0xF8, - 0x3B, 0xFA, 0xA3, 0x46, 0x4A, 0xF2, 0x49, 0xF0, 0xA3, 0x46, 0x3C, 0xFA, 0x3D, 0xF8, 0x0F, 0x60, - 0xA0, 0x64, 0xA3, 0x46, 0x76, 0x61, 0x0E, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, 0xA3, 0x46, - 0xBD, 0x60, 0x75, 0x78, 0xFF, 0xFF, 0x87, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x02, 0x00, 0x07, 0xF4, - 0xFF, 0xFF, 0xA3, 0x46, 0x2A, 0xF2, 0xA3, 0x46, 0x60, 0x40, 0x08, 0x27, 0x48, 0x00, 0x87, 0xF3, - 0x66, 0x5C, 0xD0, 0x80, 0x3B, 0xF0, 0x08, 0x03, 0x64, 0x40, 0x10, 0x2A, 0x12, 0x00, 0xFF, 0x60, - 0xEF, 0x64, 0xA0, 0x84, 0x3B, 0xFA, 0x24, 0x00, 0x3D, 0xF3, 0x01, 0x61, 0x60, 0x43, 0xCF, 0x83, - 0xE1, 0x81, 0xFD, 0x0D, 0xE9, 0x81, 0xA1, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0x91, 0x84, 0x3B, 0xFA, - 0x17, 0x00, 0x4B, 0xF2, 0xFF, 0xFF, 0x10, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0xFF, 0x60, 0xFF, 0x64, - 0xDC, 0x84, 0x4B, 0xFA, 0x4A, 0xF2, 0x16, 0x04, 0xDC, 0x84, 0x4A, 0xFA, 0x49, 0xF2, 0x08, 0x04, - 0xDC, 0x84, 0x49, 0xFA, 0x05, 0x04, 0x3B, 0xF2, 0xFF, 0xFF, 0xE0, 0x84, 0xE8, 0x84, 0x3B, 0xFA, - 0x0C, 0x60, 0xFE, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC7, 0x60, 0xCF, 0x78, - 0xFF, 0xFF, 0x84, 0xFF, 0x06, 0x60, 0x17, 0xE1, 0x77, 0x40, 0x8B, 0xFF, 0x02, 0x60, 0x00, 0x75, - 0xC9, 0x60, 0x58, 0x4F, 0x67, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x06, 0x60, 0x80, 0xFB, 0x0C, 0x60, - 0xFE, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC8, 0x60, 0x46, 0x78, 0xFF, 0xFF, - 0x84, 0xFF, 0x00, 0x7C, 0x06, 0x60, 0x80, 0xF3, 0xA2, 0xD9, 0x60, 0x40, 0x01, 0x2A, 0x04, 0x00, - 0xC9, 0x60, 0x58, 0x4F, 0xAF, 0x78, 0xFF, 0xFF, 0x3C, 0x46, 0x07, 0xF4, 0x87, 0xF3, 0x66, 0x5C, - 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x3C, 0x46, 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, - 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x41, 0x64, 0x47, 0xFF, 0xB4, 0x60, 0x5F, - 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0xA3, 0x46, 0x3A, 0xFA, 0x64, 0x44, 0x20, 0x7F, - 0x34, 0x94, 0x3B, 0xFA, 0xA3, 0x46, 0x4A, 0xF2, 0x49, 0xF0, 0xA3, 0x46, 0x3C, 0xFA, 0x3D, 0xF8, - 0x80, 0x60, 0x10, 0xE0, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, - 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0xBD, 0x60, 0x75, 0x78, 0xFF, 0xFF, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x31, 0x00, 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, - 0x60, 0x40, 0x40, 0x2B, 0x24, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, 0x5E, 0xD1, - 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, 0x80, 0x2A, - 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, 0x01, 0x61, - 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0x5A, 0xD1, 0xFF, 0xFF, 0xC1, 0x84, - 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x00, 0x60, - 0x3E, 0xF3, 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, - 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, - 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x40, 0xF3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, - 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, - 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, - 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x02, 0x64, 0x3B, 0xDB, 0xBA, 0x60, - 0xF3, 0x78, 0xFF, 0xFF, 0xBF, 0x60, 0xBB, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0xFC, 0xFB, 0x07, 0xF0, - 0x00, 0x64, 0xD0, 0x80, 0x87, 0xF3, 0x0E, 0x03, 0xD0, 0x80, 0xFF, 0xFF, 0x0B, 0x03, 0x47, 0xF1, - 0x07, 0xF0, 0x64, 0x40, 0x02, 0x26, 0x01, 0x00, 0x08, 0x00, 0x03, 0x12, 0xBE, 0x60, 0x46, 0x78, - 0xFF, 0xFF, 0xFC, 0x0A, 0xBE, 0x60, 0xA6, 0x78, 0xFF, 0xFF, 0x87, 0xF0, 0x87, 0xF3, 0x10, 0xF0, - 0xD4, 0x80, 0xFF, 0xFF, 0x3D, 0x03, 0x66, 0x43, 0x65, 0x46, 0xFF, 0x67, 0x20, 0x85, 0x64, 0x5F, - 0x40, 0x44, 0x15, 0xF0, 0x25, 0x44, 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, 0xE8, 0x84, 0xE8, 0x84, - 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, 0x15, 0xFA, 0x40, 0x45, - 0x14, 0xF0, 0x24, 0x44, 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x87, 0xF8, 0xBF, 0xC0, 0x84, 0x14, 0xFA, 0x60, 0x5C, 0x2F, 0x67, 0xD0, 0x80, 0x60, 0x45, - 0x02, 0x28, 0x64, 0x45, 0x25, 0x5C, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, 0x02, 0x24, 0x64, 0x41, - 0xD5, 0x84, 0x80, 0x65, 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, 0x0E, 0xFA, 0x63, 0x46, - 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x17, 0xF2, 0x63, 0x46, 0x60, 0x40, 0x00, 0x36, 0x2E, 0x00, - 0x01, 0x36, 0x1E, 0x00, 0x03, 0x3A, 0x25, 0x00, 0x64, 0x46, 0x10, 0xF2, 0x11, 0xFA, 0x12, 0xF2, - 0x00, 0x61, 0x60, 0x47, 0x00, 0x7F, 0x12, 0xFA, 0x97, 0xFA, 0x46, 0x44, 0x63, 0x46, 0xC1, 0x60, - 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x00, 0x3A, 0x04, 0x00, 0xC1, 0x60, 0x58, 0x4E, - 0xBC, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x96, 0xFC, 0x63, 0x46, 0x43, 0x00, - 0x64, 0x46, 0x16, 0xF2, 0x00, 0x61, 0x20, 0x28, 0xFF, 0xA4, 0x97, 0xFA, 0x16, 0xFA, 0x63, 0x46, - 0x3A, 0x00, 0x64, 0x46, 0x00, 0x61, 0x97, 0xFA, 0x63, 0x46, 0x35, 0x00, 0x07, 0xF0, 0x66, 0x41, - 0x64, 0x46, 0x16, 0xF2, 0xFF, 0xFF, 0x20, 0x28, 0xFF, 0xA4, 0x16, 0xFA, 0x93, 0xF4, 0x12, 0xF2, - 0x20, 0x28, 0xFF, 0xA3, 0x13, 0xFC, 0x61, 0x46, 0x63, 0x40, 0x00, 0x3A, 0x24, 0x00, 0xC1, 0x60, - 0x58, 0x4E, 0x93, 0x78, 0xFF, 0xFF, 0x61, 0x40, 0xFF, 0x36, 0x1D, 0x00, 0x66, 0x41, 0x64, 0x46, - 0x12, 0xF2, 0x93, 0xF4, 0x61, 0x46, 0x20, 0x28, 0x16, 0x00, 0x44, 0x44, 0xC1, 0x60, 0x58, 0x4E, - 0x72, 0x78, 0xFF, 0xFF, 0x24, 0x5C, 0x65, 0x40, 0x00, 0x36, 0x06, 0x00, 0x66, 0x41, 0x64, 0x46, - 0x01, 0x64, 0x17, 0xFA, 0x61, 0x46, 0x07, 0x00, 0x66, 0x43, 0x64, 0x46, 0xC1, 0x60, 0x58, 0x4E, - 0xBC, 0x78, 0xFF, 0xFF, 0x63, 0x46, 0xBE, 0x60, 0xA6, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x43, - 0x64, 0x46, 0x17, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xFF, 0x27, 0xFF, 0xFF, 0x00, 0x36, 0x07, 0x00, - 0x01, 0x36, 0x1C, 0x00, 0x02, 0x36, 0x24, 0x00, 0x03, 0x36, 0x43, 0x00, 0xFF, 0xFF, 0x15, 0x60, - 0xF9, 0xF1, 0x16, 0xF2, 0x43, 0x44, 0xD0, 0x80, 0x2C, 0x60, 0x24, 0x61, 0x09, 0x03, 0xA1, 0xD1, - 0x2C, 0x60, 0x22, 0x63, 0xC0, 0x84, 0x16, 0xFA, 0xA3, 0xD3, 0xFF, 0xFF, 0x13, 0xFA, 0x39, 0x00, - 0x96, 0xFC, 0xC1, 0x60, 0x58, 0x4E, 0xBC, 0x78, 0xFF, 0xFF, 0x33, 0x00, 0x43, 0x44, 0xC1, 0x60, - 0x58, 0x4E, 0xBC, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0x11, 0xF3, 0x96, 0xFC, 0x13, 0xFA, 0x29, 0x00, - 0x63, 0x46, 0x2B, 0x60, 0xF4, 0x63, 0xA3, 0xD3, 0x15, 0xF2, 0x60, 0x45, 0xD4, 0x80, 0x07, 0xF0, - 0x0C, 0x03, 0x66, 0x41, 0x44, 0x44, 0x64, 0x46, 0x12, 0xF2, 0x61, 0x46, 0xC1, 0x60, 0x58, 0x4E, - 0x72, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x00, 0x3A, 0x19, 0x00, 0x66, 0x43, 0x24, 0x46, 0xC1, 0x60, - 0x58, 0x4E, 0xBC, 0x78, 0xFF, 0xFF, 0x12, 0xF2, 0x91, 0xF2, 0x90, 0xFA, 0x60, 0x5F, 0x12, 0xFA, - 0x04, 0x00, 0xC1, 0x60, 0x58, 0x4E, 0xBC, 0x78, 0xFF, 0xFF, 0x03, 0x64, 0x17, 0xFA, 0x63, 0x46, - 0x05, 0x00, 0x24, 0x43, 0x02, 0x64, 0x17, 0xFA, 0x63, 0x46, 0x00, 0x00, 0x03, 0x64, 0x3B, 0xDB, - 0xCA, 0xFE, 0x47, 0xF1, 0x01, 0x65, 0x32, 0x40, 0x04, 0x27, 0x08, 0x00, 0x2C, 0xF2, 0x64, 0x45, - 0x02, 0x22, 0x04, 0x00, 0x60, 0x40, 0x01, 0x26, 0x01, 0x00, 0x7B, 0x00, 0x14, 0xF2, 0x65, 0x40, - 0x01, 0x26, 0x0C, 0x00, 0x60, 0x45, 0x05, 0x64, 0x3B, 0xDB, 0x65, 0x44, 0xCC, 0x85, 0x25, 0x60, - 0xD6, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xD3, 0x78, 0x97, 0xF1, 0x50, 0x00, 0x60, 0x41, 0x2A, 0xF0, - 0x00, 0x60, 0x0C, 0x64, 0xA0, 0x84, 0x04, 0x36, 0x02, 0x00, 0x0C, 0x3A, 0x01, 0x00, 0x46, 0x00, - 0x61, 0x45, 0x60, 0x43, 0x25, 0x60, 0xD6, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xD3, 0x78, 0x97, 0xF1, - 0x63, 0x40, 0x08, 0x36, 0x01, 0x00, 0x3A, 0x00, 0x14, 0xF2, 0x1C, 0x65, 0x60, 0x41, 0x00, 0x63, - 0xCD, 0x81, 0xC7, 0x83, 0xFD, 0x02, 0x3F, 0xF0, 0x2C, 0xF2, 0xC3, 0x83, 0x60, 0x40, 0x01, 0x2A, - 0x0D, 0x00, 0x25, 0x60, 0xD4, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x25, 0x60, - 0xDA, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xD2, 0x78, 0x63, 0x45, 0x20, 0x00, 0x25, 0x60, 0xD2, 0x64, - 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x25, 0x60, 0xD8, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xD2, 0x78, 0x63, 0x45, 0x15, 0xF2, 0xFF, 0xFF, 0x0F, 0xB4, 0x00, 0xA8, 0x01, 0xA8, 0x0E, 0x03, - 0x07, 0x03, 0x25, 0x60, 0xE0, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x06, 0x00, - 0x25, 0x60, 0xDE, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x04, 0x64, 0x3B, 0xDB, - 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x06, 0xF0, 0xFF, 0x60, 0x5F, 0x64, 0xA0, 0x84, 0x06, 0xFA, - 0x61, 0x46, 0x1E, 0x60, 0xF2, 0x64, 0x0F, 0x60, 0x8D, 0xFB, 0x3C, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, 0xCE, 0xFE, 0xB7, 0x60, 0xE2, 0x78, - 0xFF, 0xFF, 0x13, 0x60, 0x2E, 0xF3, 0x07, 0xF4, 0x06, 0xF2, 0x02, 0xA8, 0x3C, 0x46, 0x10, 0x03, - 0x10, 0xB0, 0x2A, 0xF2, 0x0D, 0x03, 0x0E, 0xF2, 0x0C, 0xB0, 0x60, 0x40, 0xF0, 0x37, 0x20, 0xBC, - 0x02, 0x03, 0xFE, 0x7F, 0x0E, 0xFA, 0x23, 0xF0, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xCE, 0x01, - 0x2A, 0xF2, 0xFF, 0xFF, 0x50, 0xA8, 0x02, 0x7C, 0x10, 0x03, 0x0F, 0xF0, 0x15, 0xF2, 0x64, 0x41, - 0x01, 0x2A, 0x02, 0x00, 0xAF, 0xF1, 0x09, 0x00, 0x03, 0x65, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, - 0x06, 0xF0, 0x63, 0x46, 0xAE, 0xF1, 0x64, 0x40, 0x10, 0x2A, 0x64, 0x45, 0xDC, 0x84, 0xD4, 0x80, - 0x15, 0xFA, 0x38, 0x07, 0x61, 0x40, 0x01, 0x2A, 0x08, 0x00, 0x13, 0x60, 0x03, 0xF3, 0xFF, 0xFF, - 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0x07, 0x00, 0x13, 0x60, 0x04, 0xF3, 0xFF, 0xFF, - 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0x2A, 0xF0, 0x08, 0x67, 0xB0, 0x84, 0xA2, 0xDA, - 0x08, 0xF0, 0x1E, 0x60, 0xD4, 0x64, 0xD0, 0x80, 0x07, 0xF2, 0x46, 0x43, 0x87, 0xF1, 0x06, 0x03, - 0x60, 0x46, 0x86, 0xF4, 0xD0, 0x80, 0x80, 0xBB, 0x01, 0x03, 0x06, 0xFC, 0x23, 0x46, 0x3E, 0xF2, - 0x00, 0x63, 0x01, 0xB0, 0x43, 0x5C, 0xFC, 0xFC, 0x0A, 0x03, 0x1E, 0x60, 0xEC, 0x64, 0x0F, 0x60, - 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xB7, 0x60, - 0xE2, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x49, 0xFB, 0x25, 0x60, 0xE0, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xC7, 0x78, 0x97, 0xF1, 0x25, 0x60, 0xE2, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, - 0x27, 0x44, 0xF7, 0xB4, 0x40, 0x47, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xF0, - 0x66, 0x41, 0x64, 0x46, 0x06, 0xF2, 0x7F, 0x65, 0xA4, 0x9E, 0x06, 0xFA, 0x61, 0x46, 0x5E, 0x01, - 0xC0, 0x60, 0x35, 0x78, 0xFF, 0xFF, 0x21, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0x01, 0x63, 0xC4, 0xB4, - 0x31, 0xFB, 0x32, 0xFD, 0xBF, 0x60, 0xEB, 0x62, 0x42, 0x40, 0xA0, 0x4C, 0x40, 0xBC, 0x7D, 0xB4, - 0xA0, 0x51, 0xA0, 0xFE, 0x1A, 0xFF, 0x1E, 0x60, 0xE6, 0x64, 0x08, 0xF0, 0x07, 0xF0, 0xD0, 0x80, - 0x1E, 0x60, 0xEC, 0x62, 0x13, 0x02, 0xA2, 0xD3, 0x01, 0x63, 0xAC, 0x86, 0x07, 0xF2, 0x0E, 0x03, - 0xD0, 0x80, 0x09, 0xF2, 0xFA, 0x02, 0x23, 0xFC, 0x1E, 0x60, 0xF2, 0x64, 0x0F, 0x60, 0x8D, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x3C, 0x46, 0x06, 0x64, - 0xA1, 0xFF, 0x49, 0xFB, 0x83, 0x3E, 0x31, 0xF3, 0x87, 0x60, 0x80, 0x61, 0x1D, 0xF0, 0x60, 0x40, - 0x01, 0x2A, 0x0F, 0x00, 0xFE, 0xB4, 0x31, 0xFB, 0x00, 0x64, 0x49, 0xFB, 0x01, 0x64, 0x47, 0xFB, - 0x00, 0x71, 0x05, 0x64, 0x64, 0x5F, 0x0D, 0xFA, 0x40, 0x64, 0x3B, 0xDB, 0xC0, 0x60, 0x35, 0x78, - 0xFF, 0xFF, 0x02, 0x2A, 0x17, 0x00, 0xD1, 0x91, 0x8D, 0xE2, 0x41, 0x64, 0x3B, 0xDB, 0x31, 0xF3, - 0x2C, 0x60, 0x5E, 0x63, 0xFD, 0xB4, 0x31, 0xFB, 0xA3, 0xD3, 0x02, 0x63, 0x60, 0x5C, 0x0D, 0xF2, - 0x47, 0xFD, 0xFF, 0xB5, 0x60, 0x47, 0xD0, 0x80, 0xDC, 0x84, 0x1F, 0x03, 0x60, 0x47, 0xB4, 0x84, - 0x0D, 0xFA, 0x1B, 0x00, 0x08, 0x2A, 0x07, 0x00, 0x42, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, - 0xF7, 0xB4, 0x31, 0xFB, 0x12, 0x00, 0x10, 0x2A, 0x09, 0x00, 0x43, 0x64, 0x3B, 0xDB, 0x31, 0xF3, - 0xFF, 0xFF, 0xEF, 0xB4, 0x31, 0xFB, 0xBF, 0x60, 0xBB, 0x78, 0xFF, 0xFF, 0x44, 0x64, 0x3B, 0xDB, - 0x31, 0xF3, 0xFF, 0xFF, 0xDF, 0xB4, 0x31, 0xFB, 0x00, 0x00, 0x2A, 0x64, 0x3B, 0xDB, 0xB7, 0x60, - 0xA2, 0x64, 0x40, 0x40, 0xBD, 0x60, 0x7D, 0x78, 0xFF, 0xFF, 0x0A, 0x60, 0x80, 0xF3, 0xFF, 0xFF, - 0x02, 0xB5, 0x04, 0xB5, 0x04, 0x03, 0x03, 0x03, 0xC0, 0x60, 0xB8, 0x78, 0xFF, 0xFF, 0xF0, 0x60, - 0x58, 0x4E, 0x74, 0x78, 0xFF, 0xFF, 0x31, 0x40, 0x01, 0x2A, 0x28, 0x00, 0x9D, 0xFE, 0x26, 0x04, - 0x25, 0x0A, 0x9F, 0xFE, 0x23, 0x05, 0x85, 0xFF, 0x20, 0x44, 0x84, 0xFF, 0x40, 0x26, 0x1E, 0x00, - 0x3F, 0x40, 0x20, 0x2B, 0x1B, 0x00, 0x38, 0x69, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, - 0x01, 0x2A, 0x14, 0x00, 0x13, 0x60, 0x09, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, - 0xA2, 0xDB, 0x64, 0xF1, 0x02, 0x60, 0xEE, 0x64, 0x81, 0xFB, 0xFF, 0xFF, 0x80, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0x82, 0xFB, 0x04, 0x64, 0x83, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, 0x10, 0x64, 0x3B, 0xDB, - 0x65, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x74, 0xF1, 0xC9, 0xFE, - 0x64, 0x40, 0x01, 0x26, 0x3B, 0x00, 0x49, 0xF3, 0x3C, 0x46, 0x31, 0x18, 0xCC, 0x84, 0x49, 0xFB, - 0x2E, 0x02, 0xC1, 0x60, 0x6B, 0x64, 0x40, 0x42, 0xFC, 0xFC, 0x00, 0x64, 0x5C, 0x5C, 0x32, 0xFB, - 0x82, 0xFF, 0x5C, 0x47, 0x84, 0xFF, 0x62, 0xFF, 0x13, 0x60, 0x01, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, - 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0x2A, 0xF2, 0x07, 0xF0, 0x0C, 0xB4, 0x08, 0x3A, 0x07, 0x00, - 0x66, 0x41, 0x64, 0x46, 0x06, 0xF0, 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, 0x06, 0xFA, 0x23, 0xF0, - 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x1E, 0x60, 0xF2, 0x64, 0x0F, 0x60, 0x8D, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xCE, 0xFE, 0x06, 0x00, - 0x65, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x14, 0x60, 0xFC, 0x63, - 0xA3, 0xD3, 0xAD, 0x49, 0x20, 0xB5, 0x08, 0xB1, 0x22, 0x03, 0xE1, 0x81, 0x10, 0xB5, 0x95, 0x81, - 0x60, 0x41, 0x18, 0x02, 0x14, 0x60, 0xFE, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA4, 0xDB, - 0x16, 0x02, 0x0A, 0x64, 0xA4, 0xDB, 0x61, 0x44, 0x07, 0xB4, 0xFF, 0xFF, 0x10, 0x02, 0x08, 0xB1, - 0xE1, 0x81, 0x95, 0x81, 0xA3, 0xD3, 0x0B, 0x03, 0x08, 0xAC, 0x01, 0xBC, 0xA3, 0xDB, 0xFF, 0xFF, - 0x13, 0xFF, 0x05, 0x00, 0x10, 0xAC, 0xA3, 0xDB, 0x0A, 0x7C, 0x0A, 0x60, 0x7F, 0xF9, 0xB7, 0x60, - 0xAE, 0x78, 0xFF, 0xFF, 0x46, 0xF3, 0x45, 0xF1, 0x04, 0x1B, 0x64, 0x44, 0x02, 0x1B, 0x07, 0x60, - 0xF7, 0xF3, 0x45, 0xFB, 0x00, 0x63, 0x46, 0xFD, 0x60, 0x41, 0x25, 0x64, 0x3B, 0xDB, 0x27, 0x44, - 0xEF, 0xB4, 0x40, 0x47, 0x00, 0xB9, 0x71, 0x40, 0x80, 0x27, 0x01, 0x12, 0x19, 0x03, 0xC1, 0x60, - 0x0C, 0x62, 0x84, 0xFF, 0x42, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, - 0x1F, 0x0A, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x19, 0x0A, 0x71, 0x40, - 0x80, 0x27, 0xF7, 0x12, 0x45, 0xF3, 0x27, 0x02, 0x03, 0x18, 0xCC, 0x84, 0x45, 0xFB, 0xF1, 0x02, - 0x06, 0x0A, 0xA0, 0x4C, 0xFB, 0xB4, 0xA0, 0x51, 0xA4, 0x60, 0xD7, 0x78, 0xFF, 0xFF, 0x84, 0xFF, - 0xC0, 0x60, 0xEA, 0x64, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, - 0xAF, 0x60, 0x7B, 0x78, 0xFF, 0xFF, 0x3C, 0x44, 0xAC, 0x80, 0x32, 0xF1, 0x12, 0x03, 0x64, 0x40, - 0x07, 0x22, 0x0F, 0x00, 0xA4, 0x60, 0xB6, 0x78, 0xFF, 0xFF, 0xA0, 0x4C, 0x1C, 0xBC, 0xDF, 0xB4, - 0xA0, 0x51, 0xF1, 0x01, 0x06, 0x00, 0x28, 0x64, 0x3A, 0xDB, 0xA0, 0x4C, 0x30, 0xBC, 0xF3, 0xB4, - 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x28, 0x64, 0x3B, 0xDB, 0x07, 0x60, 0xF8, 0xF3, - 0x32, 0x40, 0x02, 0x27, 0x16, 0x00, 0x46, 0xFB, 0x14, 0x18, 0xC1, 0x60, 0x59, 0x64, 0x84, 0xFF, - 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x15, 0xBC, 0xF7, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, - 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x46, 0xF3, 0xCB, 0x0A, 0xDD, 0x02, 0xCC, 0x84, 0x46, 0xFB, - 0xF5, 0x02, 0x84, 0xFF, 0xC1, 0x60, 0x6B, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x27, 0x44, 0x08, 0xBC, - 0x40, 0x47, 0xF9, 0xE1, 0x04, 0x00, 0x78, 0xE1, 0x31, 0x40, 0x01, 0x26, 0xF9, 0xE1, 0xA4, 0x60, - 0xAA, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xFB, 0xF1, 0x60, 0x45, 0x2C, 0x60, 0x0A, 0x61, 0xC5, 0x83, - 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0x66, 0x45, 0x24, 0x46, 0x0E, 0xF2, 0x65, 0x46, 0x64, 0x45, - 0xD5, 0x81, 0x61, 0x45, 0x00, 0x7F, 0xD4, 0x80, 0x64, 0x43, 0x08, 0x04, 0xE3, 0x83, 0x63, 0x45, - 0xC5, 0x81, 0x61, 0x45, 0xD4, 0x80, 0x02, 0x65, 0x03, 0x07, 0x03, 0x00, 0x00, 0x65, 0x01, 0x00, - 0x01, 0x65, 0x2E, 0x58, 0xFF, 0xFF, 0x66, 0x43, 0x64, 0x46, 0x8F, 0xF0, 0x12, 0xF2, 0x91, 0xF2, - 0x60, 0x40, 0x10, 0x36, 0x05, 0x00, 0x12, 0x36, 0x08, 0x00, 0x0C, 0x36, 0x0B, 0x00, 0x0F, 0x00, - 0x40, 0x61, 0xA5, 0x80, 0x0A, 0x64, 0x13, 0x02, 0xF3, 0x01, 0x10, 0x61, 0xA5, 0x80, 0x0E, 0x64, - 0x0E, 0x02, 0xEE, 0x01, 0x08, 0x61, 0xA5, 0x80, 0x10, 0x64, 0x09, 0x02, 0xE9, 0x01, 0xE1, 0x81, - 0xA5, 0x80, 0x03, 0x05, 0xC8, 0x84, 0x03, 0x02, 0xE3, 0x01, 0xFF, 0x61, 0x02, 0x00, 0x12, 0xFA, - 0x91, 0xFA, 0x63, 0x46, 0x2E, 0x58, 0xFF, 0xFF, 0x8F, 0xF0, 0x12, 0xF2, 0x91, 0xF2, 0x60, 0x40, - 0x0A, 0x36, 0x05, 0x00, 0x0E, 0x36, 0x08, 0x00, 0x10, 0x36, 0x0B, 0x00, 0x0F, 0x00, 0x08, 0x61, - 0xA5, 0x80, 0x10, 0x7E, 0x11, 0x02, 0xF3, 0x01, 0x04, 0x61, 0xA5, 0x80, 0x12, 0x7E, 0x0C, 0x02, - 0xEE, 0x01, 0x20, 0x61, 0xA5, 0x80, 0x0C, 0x7E, 0x07, 0x02, 0xE9, 0x01, 0xE9, 0x81, 0xA5, 0x80, - 0x05, 0x05, 0xD8, 0x84, 0x01, 0x02, 0xE3, 0x01, 0x12, 0xFA, 0x91, 0xFA, 0x2E, 0x58, 0xFF, 0xFF, - 0x24, 0xE2, 0x2D, 0xF3, 0x2C, 0xF3, 0x00, 0xBD, 0xCC, 0x84, 0x08, 0x03, 0x2C, 0xFB, 0x06, 0x02, - 0x65, 0x44, 0x2C, 0xFB, 0x8A, 0xFF, 0x80, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x44, 0xF3, 0xFF, 0xFF, - 0xDC, 0x84, 0x44, 0xFB, 0x28, 0x60, 0x72, 0x65, 0x28, 0x60, 0x70, 0x61, 0xA5, 0xD3, 0xA1, 0xD3, - 0x11, 0x18, 0xCC, 0x84, 0xA1, 0xDB, 0x0E, 0x02, 0xA5, 0xD3, 0xA1, 0xDB, 0x14, 0x60, 0x3B, 0xF3, - 0x14, 0x60, 0x3A, 0xF1, 0xA2, 0xDB, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0xD2, 0xF3, 0x31, 0x40, 0x01, 0x2A, 0x3D, 0x00, 0x60, 0x43, 0x04, 0xB0, - 0x02, 0xB0, 0x08, 0x24, 0x16, 0x02, 0x10, 0xB0, 0x29, 0x44, 0x34, 0x02, 0x00, 0xA8, 0xCC, 0x81, - 0x0D, 0x03, 0x41, 0x49, 0x2F, 0x02, 0x63, 0x40, 0x08, 0x2A, 0x08, 0x00, 0xF7, 0xB3, 0x18, 0x60, - 0x0A, 0xF1, 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0x44, 0x49, 0x24, 0x00, 0x63, 0x40, 0x02, 0x2A, - 0x10, 0x00, 0x18, 0x60, 0x0B, 0xF3, 0x18, 0x60, 0x09, 0xFB, 0x40, 0x49, 0x18, 0x60, 0x0C, 0xF3, - 0x18, 0x60, 0x0A, 0xFB, 0x0C, 0xBB, 0xFD, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, - 0x11, 0x00, 0x18, 0x60, 0x0D, 0xF3, 0x30, 0x60, 0x12, 0x7C, 0x0C, 0x18, 0xA4, 0xDB, 0x40, 0x49, - 0x18, 0x60, 0x0E, 0xF3, 0x18, 0x60, 0x0A, 0xFB, 0x08, 0xBB, 0xFB, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, - 0x00, 0x7F, 0xA0, 0x5D, 0xD2, 0xFD, 0x00, 0x60, 0x85, 0xF3, 0x62, 0x43, 0x17, 0x18, 0x58, 0xD3, - 0x62, 0x41, 0x03, 0x18, 0xCC, 0x84, 0xA1, 0xDB, 0x11, 0x00, 0x49, 0xD3, 0xA3, 0xDB, 0x06, 0xA1, - 0xA1, 0xD3, 0x59, 0xD1, 0x60, 0x45, 0xA5, 0xD3, 0x59, 0xD1, 0xB0, 0x84, 0xA5, 0xDB, 0x64, 0x44, - 0x06, 0x36, 0xCD, 0xFE, 0x07, 0x36, 0xD6, 0xFE, 0xE6, 0x01, 0x23, 0x46, 0xB7, 0x60, 0xAE, 0x78, - 0xFF, 0xFF, 0x46, 0x43, 0x1F, 0x60, 0x44, 0x61, 0xA1, 0xD3, 0x59, 0xD1, 0x06, 0x1B, 0x59, 0xD3, - 0x59, 0xD1, 0x03, 0x1B, 0x59, 0xD3, 0x59, 0xD1, 0xF0, 0x18, 0x00, 0x63, 0x49, 0xDD, 0x60, 0x40, - 0x02, 0x36, 0x11, 0x00, 0x03, 0x36, 0x32, 0x00, 0x01, 0x36, 0x08, 0x00, 0x05, 0x3A, 0xEA, 0x01, - 0xA4, 0xD3, 0x5A, 0xD3, 0x9C, 0x85, 0xA4, 0x84, 0xA2, 0xDB, 0xE4, 0x01, 0x01, 0x60, 0x0A, 0x61, - 0x00, 0x64, 0xA1, 0xDB, 0xDF, 0x01, 0xC2, 0x60, 0x8F, 0x64, 0x40, 0x45, 0x22, 0x00, 0x01, 0x60, - 0x0A, 0x66, 0xA6, 0xD3, 0x04, 0xA1, 0x60, 0x43, 0xA1, 0xD3, 0xC9, 0x81, 0x60, 0x45, 0x00, 0xBB, - 0xA1, 0xDB, 0xBE, 0xD3, 0x09, 0x03, 0xD4, 0x84, 0x9C, 0x84, 0xDC, 0x84, 0xFF, 0xFF, 0x04, 0x0E, - 0xA3, 0xD1, 0x63, 0x46, 0x64, 0x43, 0xF2, 0x01, 0x9C, 0x84, 0xDC, 0x85, 0x49, 0xDD, 0x61, 0x44, - 0x00, 0xBB, 0xA6, 0xDB, 0x02, 0x03, 0x65, 0x44, 0xBE, 0xDB, 0xBC, 0x01, 0xC2, 0x60, 0x6A, 0x64, - 0x40, 0x45, 0x01, 0x60, 0x0A, 0x66, 0xA6, 0xD3, 0xFF, 0xFF, 0xD0, 0x80, 0x0F, 0x18, 0x02, 0x03, - 0x60, 0x46, 0xF9, 0x01, 0x58, 0xD3, 0xA4, 0xD3, 0x60, 0x45, 0x00, 0x63, 0xA4, 0xDD, 0x05, 0x18, - 0x58, 0xD3, 0xFF, 0xFF, 0xC4, 0x83, 0xA2, 0xDD, 0xCA, 0x84, 0xA6, 0xDB, 0x25, 0x58, 0x64, 0x41, - 0x04, 0x60, 0x40, 0x62, 0x1A, 0x60, 0x58, 0x4D, 0xB4, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, - 0x64, 0x40, 0x01, 0x2B, 0x50, 0x00, 0x28, 0x40, 0x08, 0x3A, 0x4D, 0x00, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0x15, 0x60, 0xD5, 0xFB, 0x64, 0xF1, 0x24, 0x60, 0x88, 0x63, 0x64, 0x40, - 0x01, 0x27, 0x3C, 0xA3, 0x29, 0x40, 0x40, 0x2B, 0x1E, 0xA3, 0xBD, 0xD1, 0x63, 0x45, 0x44, 0x4E, - 0x0E, 0x61, 0xBD, 0xD1, 0xCD, 0x81, 0xD0, 0x80, 0x01, 0x03, 0xFB, 0x04, 0xCB, 0x83, 0x15, 0x60, - 0xD8, 0xF3, 0x39, 0xF1, 0xD7, 0x83, 0xEB, 0x83, 0x2E, 0x41, 0x5D, 0x93, 0xDF, 0x83, 0x15, 0x60, - 0xD4, 0xFD, 0x15, 0x60, 0xD3, 0xFB, 0x53, 0x93, 0xDF, 0x80, 0x10, 0x03, 0x38, 0xF3, 0xCF, 0x83, - 0x08, 0x03, 0xDF, 0x83, 0x0B, 0x02, 0xDF, 0x83, 0xDC, 0x84, 0xF0, 0xA0, 0x38, 0xFB, 0x06, 0x03, - 0x03, 0x00, 0xCC, 0x84, 0x38, 0xFB, 0x02, 0x03, 0x00, 0x63, 0x02, 0x00, 0x08, 0x64, 0x38, 0xFB, - 0xE3, 0x80, 0xFB, 0x83, 0xC3, 0x83, 0x63, 0x44, 0xFC, 0xA0, 0x02, 0x0E, 0x08, 0x07, 0x08, 0x00, - 0x04, 0xA4, 0xFF, 0xFF, 0x05, 0x0D, 0xFC, 0x64, 0xFF, 0x7F, 0x60, 0x43, 0x01, 0x00, 0x04, 0x63, - 0x39, 0xFD, 0x15, 0x60, 0xD7, 0xFD, 0x2F, 0x58, 0xFF, 0xFF, 0x15, 0x60, 0xD2, 0xF3, 0x40, 0x4E, - 0x60, 0x46, 0x2F, 0xDB, 0x44, 0x44, 0xA1, 0xD3, 0xD9, 0x81, 0x48, 0x94, 0x24, 0x5C, 0xD0, 0x9C, - 0x66, 0x42, 0x04, 0x06, 0xD2, 0x9C, 0x2F, 0xD9, 0x64, 0x46, 0x24, 0x44, 0xE0, 0x84, 0x44, 0xD3, - 0xA3, 0xDB, 0xFF, 0xB4, 0x60, 0x5C, 0x66, 0x44, 0x22, 0xA4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, - 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0xA2, 0xD3, 0x60, 0x5C, 0x64, 0x5E, 0x60, 0x47, - 0x2F, 0xD1, 0x28, 0xA3, 0xA3, 0xD9, 0xD8, 0xA3, 0x2E, 0x42, 0x4E, 0x8E, 0xBD, 0xDB, 0xDB, 0x02, - 0x2D, 0x58, 0xFF, 0xFF, 0x43, 0xFF, 0x39, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x84, 0x3E, 0xFB, 0x01, - 0x3D, 0x44, 0x00, 0xA8, 0xFF, 0xFF, 0x03, 0x02, 0x40, 0xFF, 0x44, 0xFF, 0xF4, 0x01, 0xA0, 0x4C, - 0x3D, 0x46, 0x2A, 0xF2, 0x46, 0x4D, 0x10, 0x25, 0x12, 0x00, 0x09, 0xE1, 0xA1, 0xFF, 0x2D, 0x46, - 0x0F, 0xF2, 0x01, 0x29, 0x06, 0x00, 0x2A, 0xF0, 0x40, 0xFF, 0x64, 0x40, 0x40, 0x2B, 0x08, 0xBC, - 0x02, 0xBC, 0x0F, 0xFA, 0x08, 0x25, 0xDE, 0x01, 0xCB, 0xFE, 0x5C, 0x5D, 0xDC, 0x01, 0x44, 0xFF, - 0x03, 0x2B, 0x21, 0x00, 0x88, 0xF3, 0x06, 0x61, 0x60, 0x43, 0x66, 0x45, 0x31, 0xF0, 0x63, 0x46, - 0x05, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0x30, 0xF0, 0x0F, 0x02, 0x63, 0x46, 0x04, 0xF2, 0x65, 0x46, - 0xD0, 0x80, 0x2F, 0xF0, 0x09, 0x02, 0x63, 0x46, 0x03, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x03, 0x02, 0xFF, 0xFF, 0x48, 0xFE, 0x06, 0x00, 0xCD, 0x81, 0x02, 0xA3, 0xE7, 0x02, 0x87, 0xF1, - 0x08, 0xFE, 0x64, 0x43, 0x26, 0x03, 0x31, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, - 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, - 0x61, 0x46, 0x07, 0xFC, 0x3F, 0xF2, 0x09, 0x60, 0xB0, 0x65, 0xD4, 0x80, 0x2A, 0xF2, 0x9D, 0x05, - 0x08, 0x25, 0x88, 0x01, 0x5C, 0x4B, 0x0C, 0x60, 0xEC, 0x61, 0xA1, 0xDF, 0x2D, 0x46, 0x3B, 0xF2, - 0x87, 0xF1, 0x87, 0xF4, 0x60, 0x40, 0x20, 0x2B, 0xB7, 0x00, 0xD3, 0x80, 0x2C, 0xF0, 0x8D, 0x03, - 0x07, 0xF4, 0x64, 0x40, 0x01, 0x26, 0x87, 0xF5, 0xBA, 0xF4, 0x2D, 0x46, 0x04, 0x64, 0x04, 0xB3, - 0x22, 0xF0, 0x04, 0x03, 0xC5, 0x60, 0xBD, 0x78, 0xFF, 0xFF, 0xA6, 0x00, 0x10, 0x64, 0xB0, 0x9C, - 0x3B, 0xF2, 0x22, 0xF8, 0x60, 0x47, 0xC0, 0xB7, 0x02, 0xFE, 0xF0, 0x84, 0xF0, 0x84, 0xF0, 0x84, - 0x00, 0xA8, 0x40, 0x4A, 0x17, 0x03, 0xE0, 0x81, 0x61, 0x43, 0x42, 0xFE, 0x00, 0x64, 0xF0, 0x84, - 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, 0x2D, 0x46, 0x07, 0xF4, 0xE0, 0x81, 0x3B, 0xF0, - 0x2A, 0x47, 0x0C, 0x60, 0x3A, 0x63, 0xA0, 0x84, 0x47, 0x9C, 0x10, 0x03, 0x7C, 0x44, 0x00, 0x60, - 0xB2, 0x63, 0x14, 0x00, 0x07, 0xF4, 0x3B, 0xF0, 0x66, 0x44, 0x64, 0x40, 0x80, 0x2B, 0x06, 0x00, - 0x00, 0x60, 0x78, 0x7C, 0x00, 0x60, 0xA2, 0x63, 0x43, 0x4C, 0x08, 0x00, 0x2D, 0x46, 0xC5, 0x60, - 0xB0, 0x78, 0xFF, 0xFF, 0x2D, 0x46, 0xC5, 0x60, 0xB0, 0x78, 0xFF, 0xFF, 0xCE, 0xFB, 0xCF, 0xF9, - 0xD0, 0xFD, 0xAD, 0x46, 0x3D, 0xF2, 0xAD, 0x46, 0xA3, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3C, 0xF2, - 0xAD, 0x46, 0x02, 0x03, 0x15, 0x07, 0xEE, 0x04, 0x5B, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3A, 0xF2, - 0x03, 0x03, 0xAD, 0x46, 0x0D, 0x07, 0xE6, 0x04, 0x3A, 0xF0, 0xAD, 0x46, 0x5B, 0xD0, 0x64, 0x44, - 0xD0, 0x80, 0x2B, 0x44, 0x05, 0x07, 0xDE, 0x03, 0xD0, 0x84, 0x10, 0xA4, 0xFF, 0xFF, 0x00, 0x07, - 0xCF, 0xF3, 0xCE, 0xF5, 0xFE, 0xA4, 0x0F, 0x60, 0xC0, 0x61, 0x0E, 0x63, 0x58, 0xD0, 0x59, 0xD9, - 0xFD, 0x1F, 0x2D, 0x46, 0x8B, 0xFF, 0x2D, 0x46, 0x0F, 0x60, 0xB2, 0x64, 0xC9, 0x60, 0x58, 0x4F, - 0x10, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x00, 0x60, 0x18, 0x70, 0x18, 0x71, 0x20, 0x72, 0x60, 0x53, - 0x88, 0x75, 0x00, 0xF2, 0x09, 0xE1, 0x60, 0x50, 0x12, 0x71, 0x6E, 0x72, 0x83, 0x75, 0xA1, 0xFF, - 0xFF, 0xFF, 0x08, 0x25, 0x1F, 0x00, 0x40, 0xFF, 0x02, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x75, 0x40, - 0x03, 0x2A, 0x03, 0x00, 0x80, 0x75, 0x0A, 0x64, 0x0B, 0x00, 0x80, 0x75, 0x1B, 0xF3, 0x8B, 0xFF, - 0x02, 0x60, 0x00, 0x75, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x75, 0xDC, 0x84, 0xA2, 0xDB, 0x02, 0x64, - 0x98, 0xFF, 0x2D, 0x46, 0x0F, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, 0xA2, 0xDA, 0x88, 0xFF, 0xC3, 0x60, - 0x74, 0x78, 0xFF, 0xFF, 0x8B, 0xFF, 0x02, 0x60, 0x00, 0x75, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x75, - 0x88, 0xFF, 0xC5, 0x60, 0x96, 0x78, 0xFF, 0xFF, 0x22, 0xF0, 0x22, 0x64, 0xB0, 0x84, 0x22, 0xFA, - 0x3A, 0xF0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, - 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0x7C, 0x5F, 0xE8, 0x84, 0xE8, 0x85, - 0x0D, 0x60, 0x02, 0x64, 0x44, 0xD3, 0x5A, 0xD1, 0x03, 0x1B, 0xC5, 0x60, 0xB0, 0x78, 0xFF, 0xFF, - 0x60, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, - 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, - 0xE7, 0x7F, 0xA0, 0x5B, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5B, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, - 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, - 0xED, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEF, 0x7F, - 0xA0, 0x5B, 0x65, 0x44, 0xD8, 0x84, 0x08, 0x25, 0xB9, 0x00, 0x60, 0x7F, 0xA0, 0x5B, 0x80, 0x60, - 0x00, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xD1, 0x60, 0x00, 0xEB, 0x3F, 0xF2, 0x3B, 0xF0, 0x60, 0x43, - 0xFC, 0xA4, 0x64, 0x40, 0x20, 0x2B, 0x03, 0x00, 0x08, 0xA4, 0x3F, 0xFA, 0x08, 0xA3, 0xF8, 0xA3, - 0x3F, 0xFA, 0x0A, 0xE1, 0xB3, 0xFF, 0x9A, 0xFF, 0xCB, 0x83, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, - 0x0E, 0xA3, 0xAB, 0x84, 0xF2, 0xA3, 0xA1, 0xFF, 0x08, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0x6C, 0x18, - 0x02, 0x62, 0xC9, 0x81, 0xAB, 0x84, 0x01, 0x00, 0xA2, 0xDC, 0x7A, 0xD4, 0xFD, 0x1C, 0xA2, 0xDC, - 0x08, 0x25, 0x8C, 0x00, 0xF2, 0x1D, 0x41, 0x44, 0x7C, 0xA8, 0xD9, 0x81, 0xEE, 0x03, 0xFF, 0xB1, - 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x08, 0x25, 0x80, 0x00, 0x40, 0xFF, 0x42, 0x42, - 0x46, 0x43, 0x06, 0x1E, 0x04, 0x02, 0x00, 0xF4, 0x02, 0x62, 0x42, 0x42, 0x46, 0x43, 0x01, 0xA2, - 0x63, 0x45, 0x01, 0xA2, 0x62, 0x43, 0x46, 0x4C, 0xC6, 0x60, 0x58, 0x4F, 0x4B, 0x78, 0xFF, 0xFF, - 0x0A, 0xE1, 0x9A, 0xFF, 0x24, 0x41, 0x02, 0xA1, 0x65, 0x43, 0x08, 0xA3, 0x23, 0x46, 0x22, 0x42, - 0x7E, 0x3A, 0x0A, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0x37, 0x18, 0x02, 0x62, 0xC9, 0x81, 0xAB, 0x84, - 0x03, 0x00, 0xA2, 0xDC, 0x7E, 0x36, 0xF6, 0x01, 0x7A, 0xD4, 0xFF, 0xFF, 0xFA, 0x1C, 0xA2, 0xDC, - 0xF1, 0x1D, 0xD9, 0x81, 0xFF, 0xB1, 0x0B, 0x1E, 0x62, 0x40, 0x7E, 0x3A, 0x02, 0x00, 0x00, 0xF4, - 0x02, 0x62, 0x5A, 0xD2, 0x89, 0xFF, 0x80, 0x4F, 0x6F, 0x44, 0xA2, 0xDA, 0x88, 0xFF, 0x98, 0xFF, - 0x3D, 0x46, 0x0F, 0xF0, 0x0A, 0x64, 0xB0, 0x84, 0x18, 0x14, 0xF7, 0xB4, 0xA2, 0xDA, 0x06, 0x60, - 0x76, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0C, 0x00, 0xD1, 0xF5, 0xD0, 0xF4, 0x0C, 0x60, - 0xEC, 0x61, 0x59, 0xD1, 0x3B, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, 0xFC, 0x02, - 0x2D, 0x46, 0xC3, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0x28, 0x00, 0xA2, 0xDA, 0x2D, 0x46, 0x3B, 0xF0, - 0xFF, 0xFF, 0x64, 0x40, 0x20, 0x2B, 0x1E, 0x00, 0x07, 0xF4, 0xBB, 0xF0, 0x2A, 0x44, 0xA4, 0x84, - 0xFF, 0xFF, 0x2F, 0x26, 0x16, 0x00, 0x2D, 0x46, 0x64, 0x44, 0x3A, 0xF0, 0xBC, 0xF0, 0x64, 0x5F, - 0x3D, 0xF0, 0x07, 0xF4, 0xD0, 0xF4, 0xFF, 0xFF, 0x08, 0xA3, 0x5B, 0xD8, 0x65, 0x5C, 0x5B, 0xD8, - 0x5B, 0xDA, 0x2D, 0x46, 0xCE, 0xF3, 0x3C, 0xFA, 0xCF, 0xF3, 0x3D, 0xFA, 0x2A, 0x44, 0x23, 0xFA, - 0x01, 0x00, 0x2D, 0x46, 0xC3, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0x98, 0xFF, 0x43, 0xFF, - 0x40, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, 0x2D, 0x46, 0x0C, 0x60, 0xEC, 0x61, 0xA1, 0xD3, 0x2D, 0x46, - 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, 0xD1, 0xF5, 0xD0, 0xF4, 0x59, 0xD1, 0x3B, 0xF8, 0x05, 0x64, - 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, 0xFC, 0x02, 0x2D, 0x46, 0xC3, 0x60, 0x53, 0x78, 0xFF, 0xFF, - 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, 0x3D, 0x46, 0x08, 0x25, 0xE0, 0x01, 0x0F, 0xF2, 0x40, 0xFF, - 0x02, 0xBC, 0xA2, 0xDA, 0xC3, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0xB0, 0x84, 0x22, 0xFA, 0x00, 0x63, - 0x3B, 0xF2, 0x06, 0x60, 0x76, 0xFD, 0x60, 0x47, 0xC0, 0xB7, 0x02, 0xFE, 0xF0, 0x84, 0xF0, 0x84, - 0xF0, 0x84, 0x00, 0xA8, 0x40, 0x4A, 0x16, 0x03, 0xE0, 0x81, 0x61, 0x43, 0x42, 0xFE, 0x00, 0x64, - 0xF0, 0x84, 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, 0x2D, 0x46, 0x07, 0xF4, 0xE0, 0x81, - 0x3B, 0xF0, 0x2A, 0x47, 0x0C, 0x60, 0x3A, 0x63, 0xA0, 0x84, 0x47, 0x9C, 0x10, 0x03, 0x7C, 0x44, - 0xA8, 0x63, 0x0F, 0x00, 0x07, 0xF4, 0x20, 0x64, 0x40, 0x4A, 0x3B, 0xF0, 0x66, 0x44, 0x64, 0x40, - 0x80, 0x2B, 0x05, 0x00, 0x00, 0x60, 0x78, 0x7C, 0x00, 0x60, 0x98, 0x63, 0x02, 0x00, 0x2D, 0x46, - 0xBF, 0x01, 0x2D, 0x46, 0xCE, 0xFB, 0xCF, 0xF9, 0xD0, 0xFD, 0x07, 0xF2, 0xD1, 0xFB, 0x60, 0x46, - 0x3B, 0xF0, 0x2A, 0x44, 0x06, 0x60, 0x77, 0xF9, 0x5C, 0x4B, 0xA0, 0x84, 0xFF, 0xFF, 0x3F, 0x22, - 0x05, 0x00, 0x90, 0x84, 0x3B, 0xFA, 0x01, 0x64, 0x40, 0x4B, 0x21, 0x00, 0xAD, 0x46, 0x0A, 0xA3, - 0x3D, 0xF2, 0xAD, 0x46, 0xA3, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3C, 0xF2, 0xAD, 0x46, 0x02, 0x03, - 0x16, 0x07, 0x14, 0x04, 0x5B, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3B, 0xF2, 0x03, 0x03, 0xAD, 0x46, - 0x0E, 0x07, 0x0C, 0x04, 0x3A, 0xF0, 0xAD, 0x46, 0x5B, 0xD0, 0x64, 0x5F, 0xD0, 0x80, 0x2B, 0x44, - 0x17, 0x07, 0x04, 0x03, 0xD0, 0x84, 0x10, 0xA4, 0xFF, 0xFF, 0x12, 0x07, 0x89, 0x01, 0x01, 0x64, - 0x06, 0x60, 0x76, 0xFB, 0x2D, 0x46, 0x0C, 0x60, 0xFC, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, - 0xA2, 0xDB, 0xC6, 0x60, 0x76, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x5E, 0x01, - 0x2D, 0x46, 0x0C, 0x60, 0xFC, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC6, 0x60, - 0xFE, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x50, 0x01, 0x00, 0x60, 0x0F, 0x64, - 0xC4, 0x60, 0xDB, 0x78, 0xFF, 0xFF, 0x2D, 0x46, 0x3B, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x20, 0x2B, - 0x23, 0x00, 0x00, 0xF4, 0x08, 0x61, 0x2D, 0x46, 0x00, 0xF4, 0x0A, 0x62, 0x56, 0x92, 0x5A, 0xD0, - 0x2C, 0x46, 0x64, 0x47, 0x63, 0x40, 0x7F, 0x2A, 0x03, 0x00, 0x00, 0xF4, 0x03, 0x63, 0x46, 0x4C, - 0x60, 0xFE, 0xDE, 0xD8, 0x7F, 0x3A, 0x03, 0x00, 0x00, 0xF4, 0x03, 0x63, 0x46, 0x4C, 0xDE, 0xDA, - 0xFE, 0xA1, 0x20, 0xFE, 0xE8, 0x02, 0x63, 0x41, 0xFD, 0xA1, 0x46, 0x4C, 0x01, 0xF2, 0x2D, 0x46, - 0x61, 0x5E, 0x16, 0xFA, 0x2C, 0x44, 0x06, 0xFA, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF4, 0x66, 0x41, - 0x03, 0xF2, 0x04, 0xF2, 0x40, 0x42, 0x05, 0xF2, 0x40, 0x43, 0x40, 0x44, 0x61, 0x46, 0x3C, 0xF2, - 0x3D, 0xF2, 0x40, 0x40, 0x40, 0x41, 0x0D, 0x60, 0x72, 0x65, 0x00, 0x61, 0xCF, 0xF1, 0xCE, 0xF5, - 0x44, 0x4C, 0x2C, 0x5C, 0xE9, 0x80, 0x00, 0x64, 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, - 0x24, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x20, 0x44, 0x40, 0x80, 0xDB, 0x83, 0xBD, 0xD2, - 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x21, 0x44, 0x40, 0x81, 0xDB, 0x83, 0xBD, 0xD2, - 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, 0xDB, 0x83, 0xBD, 0xD2, - 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xF2, 0xA3, 0xBD, 0xD2, - 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0xC0, 0x9C, 0x41, 0x84, 0xDD, 0x81, - 0x08, 0x2A, 0xA7, 0x01, 0x0C, 0x60, 0xEE, 0x61, 0x05, 0x64, 0xD0, 0xF4, 0xD1, 0xF5, 0xFE, 0xA3, - 0x5B, 0xD0, 0xCC, 0x84, 0x59, 0xD9, 0xFC, 0x02, 0xD0, 0xF3, 0xD1, 0xF5, 0x60, 0x42, 0x20, 0x44, - 0xA2, 0xDA, 0x21, 0x44, 0x5A, 0xDA, 0x22, 0x44, 0x5A, 0xDA, 0x23, 0x44, 0x5A, 0xDA, 0x24, 0x44, - 0x5A, 0xDA, 0x61, 0x46, 0x06, 0x60, 0x7E, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x41, 0xD0, 0xF3, - 0xD1, 0xF5, 0xA0, 0xD2, 0x5A, 0xD0, 0x40, 0x40, 0x44, 0x41, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x42, - 0x5A, 0xD0, 0x44, 0x43, 0x61, 0x46, 0xBA, 0xF0, 0x3B, 0xF2, 0x44, 0x44, 0x65, 0x5F, 0x40, 0x85, - 0xCF, 0xF4, 0xCE, 0xF5, 0x43, 0x4C, 0x0D, 0x60, 0x72, 0x65, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x20, 0x44, 0x40, 0x80, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x21, 0x44, 0x40, 0x81, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x22, 0x44, 0x40, 0x82, 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, - 0x40, 0x83, 0xBD, 0xD2, 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0x40, 0x84, - 0xBD, 0xD2, 0x24, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x25, 0x44, 0x40, 0x85, 0x61, 0x46, - 0x3A, 0xF0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, - 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xCE, 0xF5, 0xBD, 0xD2, 0x25, 0x5C, - 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x20, 0x5C, 0x40, 0x80, 0x20, 0x44, 0xE4, 0x7F, 0xA0, 0x5B, - 0x20, 0x47, 0xE5, 0x7F, 0xA0, 0x5B, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, - 0x21, 0x5C, 0x40, 0x81, 0x21, 0x44, 0xE6, 0x7F, 0xA0, 0x5B, 0x21, 0x47, 0xE7, 0x7F, 0xA0, 0x5B, - 0x21, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x22, 0x5C, 0x40, 0x82, 0x22, 0x44, 0xE8, 0x7F, 0xA0, 0x5B, - 0x22, 0x47, 0xE9, 0x7F, 0xA0, 0x5B, 0x22, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x23, 0x5C, 0x40, 0x83, - 0x23, 0x44, 0xEA, 0x7F, 0xA0, 0x5B, 0x23, 0x47, 0xEB, 0x7F, 0xA0, 0x5B, 0x23, 0x44, 0xE8, 0x80, - 0xF8, 0x84, 0x24, 0x5C, 0x40, 0x84, 0x24, 0x44, 0xEC, 0x7F, 0xA0, 0x5B, 0x24, 0x47, 0xED, 0x7F, - 0xA0, 0x5B, 0x24, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x25, 0x5C, 0x40, 0x85, 0x25, 0x44, 0xEE, 0x7F, - 0xA0, 0x5B, 0x25, 0x47, 0xEF, 0x7F, 0xA0, 0x5B, 0x2C, 0x43, 0xA3, 0xD2, 0x25, 0x5C, 0x90, 0x81, - 0xE9, 0x84, 0xE3, 0x7F, 0xA0, 0x5B, 0x06, 0x60, 0x7E, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0xF3, - 0x5A, 0xD3, 0x40, 0x48, 0x5A, 0xD3, 0x40, 0x49, 0x40, 0x4A, 0x00, 0x60, 0x78, 0x7C, 0x44, 0x4D, - 0x49, 0xF2, 0x4A, 0xF2, 0x40, 0x47, 0x40, 0x46, 0x0D, 0x60, 0x72, 0x65, 0x00, 0x61, 0x2D, 0x5C, - 0xE9, 0x80, 0x00, 0x64, 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xDB, 0x83, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x27, 0x44, 0x40, 0x87, 0xDB, 0x83, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x28, 0x44, 0x40, 0x88, 0xDB, 0x83, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x29, 0x44, 0x40, 0x89, 0xF2, 0xA3, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x2A, 0x44, 0xC0, 0x9C, 0x41, 0x8A, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, - 0x26, 0x44, 0x44, 0xFA, 0x27, 0x44, 0x45, 0xFA, 0x28, 0x44, 0x46, 0xFA, 0x29, 0x44, 0x47, 0xFA, - 0x2A, 0x44, 0x48, 0xFA, 0x06, 0x60, 0x7F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x88, 0x7C, - 0x44, 0x4D, 0x2D, 0x42, 0xA2, 0xD2, 0x5A, 0xD0, 0x40, 0x46, 0x44, 0x47, 0x5A, 0xD2, 0x5A, 0xD0, - 0x40, 0x48, 0x5A, 0xD0, 0x44, 0x49, 0x4B, 0xF2, 0x44, 0x4A, 0x40, 0x8B, 0x60, 0x5C, 0x64, 0x47, - 0xE0, 0x7F, 0xA0, 0x5A, 0xFF, 0xB4, 0x20, 0xBC, 0x7F, 0xB4, 0xE1, 0x7F, 0xA0, 0x5A, 0x64, 0x44, - 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x78, 0x63, 0x0D, 0x60, 0x72, 0x65, 0xBD, 0xD2, 0x2B, 0x5C, - 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x27, 0x44, 0x40, 0x87, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x28, 0x44, 0x40, 0x88, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x29, 0x44, 0x40, 0x89, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2A, 0x44, - 0x40, 0x8A, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2B, 0x44, 0x40, 0x8B, - 0xBD, 0xD2, 0x2B, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x26, 0x5C, 0x40, 0x86, 0x26, 0x44, - 0xE4, 0x7F, 0xA0, 0x5A, 0x26, 0x47, 0xE5, 0x7F, 0xA0, 0x5A, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x84, - 0xE8, 0x80, 0xF8, 0x84, 0x27, 0x5C, 0x40, 0x87, 0x27, 0x44, 0xE6, 0x7F, 0xA0, 0x5A, 0x27, 0x47, - 0xE7, 0x7F, 0xA0, 0x5A, 0x27, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x28, 0x5C, 0x40, 0x88, 0x28, 0x44, - 0xE8, 0x7F, 0xA0, 0x5A, 0x28, 0x47, 0xE9, 0x7F, 0xA0, 0x5A, 0x28, 0x44, 0xE8, 0x80, 0xF8, 0x84, - 0x29, 0x5C, 0x40, 0x89, 0x29, 0x44, 0xEA, 0x7F, 0xA0, 0x5A, 0x29, 0x47, 0xEB, 0x7F, 0xA0, 0x5A, - 0x29, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2A, 0x5C, 0x40, 0x8A, 0x2A, 0x44, 0xEC, 0x7F, 0xA0, 0x5A, - 0x2A, 0x47, 0xED, 0x7F, 0xA0, 0x5A, 0x2A, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2B, 0x5C, 0x40, 0x8B, - 0x2B, 0x44, 0xEE, 0x7F, 0xA0, 0x5A, 0x2B, 0x47, 0xEF, 0x7F, 0xA0, 0x5A, 0x3C, 0xF0, 0x2B, 0x44, - 0x90, 0x84, 0xE8, 0x84, 0xE3, 0x7F, 0xA0, 0x5A, 0x06, 0x60, 0x7F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x60, 0x45, 0x00, 0xF0, 0x84, 0x60, 0x00, 0xE3, 0x04, 0x71, 0x64, 0x50, 0x01, 0x2A, 0x04, 0x71, - 0x5C, 0x61, 0x04, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, 0x3D, 0xF2, 0x60, 0x43, 0x60, 0x47, - 0x5B, 0xDB, 0x3C, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x5B, 0xDB, 0x3A, 0xF2, 0xFF, 0xFF, 0x60, 0x47, - 0x5B, 0xDB, 0x3F, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x5B, 0xDB, 0x81, 0x60, 0x18, 0xE3, 0x65, 0x43, - 0xE3, 0x84, 0x60, 0x47, 0x00, 0x7F, 0x60, 0x50, 0x7F, 0x64, 0x23, 0x94, 0x60, 0x51, 0x7C, 0x72, - 0x04, 0x75, 0x0C, 0x60, 0x16, 0x61, 0x16, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x2A, 0xF2, 0x87, 0x60, - 0x8F, 0x65, 0xA4, 0x87, 0x40, 0xBF, 0x59, 0xDB, 0x56, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, - 0xFD, 0x1F, 0x62, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x35, 0xF2, 0x0F, 0x65, - 0xA4, 0x9C, 0x59, 0xD9, 0x06, 0x63, 0x59, 0xDF, 0xFE, 0x1F, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x45, - 0x03, 0x2B, 0x05, 0x00, 0x6A, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x65, 0x40, - 0x8F, 0xB0, 0x88, 0x3A, 0x02, 0x00, 0x39, 0xF0, 0x59, 0xD9, 0x2F, 0x58, 0xFF, 0xFF, 0x0C, 0x60, - 0x16, 0x61, 0xA3, 0x46, 0x00, 0xF4, 0x02, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, - 0x59, 0xDF, 0x59, 0xDF, 0xA0, 0x4C, 0x04, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x23, 0x44, 0x01, 0xA7, - 0x80, 0xBF, 0x60, 0x50, 0x80, 0x60, 0x38, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x01, 0x76, 0xFF, 0xFF, - 0x76, 0x44, 0x01, 0x3A, 0xFD, 0x01, 0x40, 0x76, 0x42, 0xFF, 0xFF, 0xFF, 0x40, 0x76, 0x80, 0x60, - 0x18, 0x70, 0x80, 0x60, 0x18, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x80, 0x60, 0x10, 0x73, 0x02, 0x76, - 0x76, 0x44, 0xFF, 0xFF, 0x76, 0x44, 0x02, 0x3A, 0xFD, 0x01, 0x40, 0x76, 0x42, 0xFF, 0x3C, 0x46, - 0x00, 0xF2, 0x80, 0x60, 0x00, 0xBC, 0x60, 0x50, 0x80, 0x60, 0x12, 0x71, 0x80, 0x60, 0x6E, 0x72, - 0x3F, 0xF2, 0xFF, 0xFF, 0xF8, 0xA7, 0x80, 0xBF, 0x60, 0x53, 0x04, 0x76, 0xFF, 0xFF, 0x88, 0xFF, - 0x3C, 0x46, 0x07, 0xF2, 0xFF, 0xFF, 0x40, 0x43, 0xA3, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x77, 0x40, - 0x8B, 0xFF, 0xA0, 0x4C, 0x04, 0xE1, 0xFF, 0xFF, 0x76, 0x44, 0x04, 0x3A, 0xFD, 0x01, 0x40, 0x76, - 0x42, 0xFF, 0xFF, 0xFF, 0x10, 0x76, 0xFF, 0xFF, 0x76, 0x44, 0x20, 0x3A, 0xFD, 0x01, 0x40, 0x76, - 0x42, 0xFF, 0xA0, 0x48, 0x00, 0x7F, 0xA0, 0x51, 0x02, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xA0, 0x4C, - 0xFB, 0xB4, 0xA0, 0x51, 0x06, 0x60, 0x1F, 0xE1, 0x16, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, - 0x3F, 0xF2, 0xFF, 0xFF, 0xF8, 0xA4, 0x3F, 0xFA, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, 0xA0, 0x48, - 0x08, 0x26, 0x07, 0x00, 0xA0, 0x4C, 0x04, 0xE1, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, - 0xA0, 0x51, 0x42, 0xFF, 0x26, 0x46, 0x8B, 0xFF, 0x02, 0x60, 0x00, 0x75, 0x3C, 0xF2, 0x40, 0x76, - 0x14, 0x1B, 0x26, 0x46, 0x3B, 0xF2, 0x0C, 0x60, 0xBC, 0x63, 0x60, 0x47, 0xC0, 0xB4, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0x43, 0x93, 0xE3, 0x9C, 0x64, 0x47, 0x80, 0x7C, 0x64, 0x5F, 0x60, 0x50, - 0x7F, 0x64, 0x23, 0x97, 0x80, 0xBF, 0x60, 0x51, 0x07, 0x00, 0x01, 0xA7, 0x80, 0xBF, 0x60, 0x50, - 0x80, 0x60, 0x40, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x01, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, - 0x0C, 0x21, 0xFC, 0x01, 0x04, 0x25, 0xD5, 0x01, 0x40, 0x76, 0x43, 0xFF, 0x0C, 0x60, 0x22, 0x61, - 0x26, 0x46, 0x00, 0xF4, 0x02, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x59, 0xDF, - 0x59, 0xDF, 0x80, 0x60, 0x18, 0x70, 0x80, 0x60, 0x24, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x80, 0x60, - 0x10, 0x73, 0x02, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, 0xFC, 0x01, 0x04, 0x25, - 0xB8, 0x01, 0x40, 0x76, 0x43, 0xFF, 0x26, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x80, 0xBF, - 0x60, 0x50, 0x80, 0x60, 0x12, 0x71, 0x3F, 0xF2, 0x80, 0x60, 0x6E, 0x72, 0x60, 0x47, 0x80, 0xBF, - 0x60, 0x53, 0x04, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, 0xFC, 0x01, 0x04, 0x25, - 0xA0, 0x01, 0x40, 0x76, 0x43, 0xFF, 0x08, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, - 0xFC, 0x01, 0x04, 0x25, 0x96, 0x01, 0x76, 0x5C, 0xFF, 0xFF, 0x40, 0x76, 0x43, 0xFF, 0x88, 0xFF, - 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xDF, 0x60, 0x2A, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x11, 0xF1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x20, 0x00, 0x74, 0xF3, 0x31, 0x40, - 0x01, 0x2A, 0x1C, 0x00, 0xDC, 0x84, 0x01, 0xB4, 0x74, 0xFB, 0x08, 0x02, 0x08, 0x60, 0x12, 0xF1, - 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x00, 0x08, 0x60, 0x18, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x00, 0xA9, 0xFE, 0xE6, 0x05, - 0xAB, 0xFE, 0x07, 0x05, 0xA8, 0xFE, 0xD7, 0x05, 0xAA, 0xFE, 0xD8, 0x05, 0xA1, 0xFF, 0xFF, 0xFF, - 0x85, 0x3E, 0x0F, 0x60, 0x85, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x02, 0xCA, 0x60, - 0x7E, 0x78, 0xFF, 0xFF, 0x26, 0x45, 0xD4, 0x80, 0x0F, 0xF0, 0xF9, 0x03, 0x64, 0x44, 0x70, 0xB0, - 0x70, 0x2A, 0x13, 0x00, 0x13, 0x60, 0x08, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, - 0xA2, 0xDB, 0xA2, 0xFF, 0x8E, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0xFE, 0xA0, 0x8E, 0xFB, 0x01, 0x07, - 0xD4, 0xFE, 0xA3, 0xFF, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x64, 0x40, 0x02, 0x26, 0x09, 0x00, - 0x66, 0x45, 0x09, 0xF4, 0x0F, 0xF2, 0x02, 0x18, 0x65, 0x46, 0xE4, 0x1B, 0x00, 0x64, 0x40, 0x46, - 0xCD, 0x01, 0xA2, 0xFF, 0x8E, 0xF3, 0x46, 0x46, 0xCC, 0x84, 0xFE, 0xA0, 0x8E, 0xFB, 0x01, 0x07, - 0xD4, 0xFE, 0xA3, 0xFF, 0x0F, 0xF0, 0xA3, 0xFC, 0x64, 0x44, 0x80, 0x26, 0x17, 0x00, 0x25, 0x60, - 0xF0, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, - 0x07, 0x60, 0x01, 0x64, 0x04, 0x00, 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x01, 0x64, 0x23, 0xFA, - 0xCE, 0x60, 0x44, 0x78, 0xFF, 0xFF, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, - 0x64, 0x44, 0x08, 0x26, 0x34, 0x00, 0x2A, 0xF2, 0x60, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x66, 0x63, - 0xBE, 0xD2, 0x68, 0xF1, 0xA3, 0xD2, 0xD0, 0x80, 0x67, 0xF1, 0x0D, 0x02, 0xBF, 0xD2, 0xD0, 0x80, - 0x66, 0xF1, 0x09, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0x25, 0x60, 0xFC, 0x64, 0xE5, 0x60, - 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, 0x02, 0x64, - 0x04, 0x00, 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, 0xCE, 0x60, 0x44, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xB0, 0x3A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, - 0x23, 0xFA, 0xCB, 0x60, 0x9D, 0x78, 0xFF, 0xFF, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x32, 0x44, - 0x01, 0x2A, 0x4A, 0x00, 0x27, 0x60, 0x6A, 0x63, 0xBF, 0xD3, 0x00, 0x65, 0xB4, 0x81, 0xDB, 0x83, - 0x3D, 0x03, 0xBF, 0xD3, 0xA3, 0xD3, 0x40, 0x48, 0xBE, 0xD3, 0x40, 0x4A, 0x2E, 0xF0, 0x40, 0x4C, - 0xD0, 0x80, 0x2D, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x2C, 0xF0, 0x04, 0x02, 0x28, 0x44, - 0xD0, 0x80, 0xFF, 0xFF, 0x2B, 0x03, 0x31, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x30, 0xF0, 0x08, 0x02, - 0x2A, 0x44, 0xD0, 0x80, 0x2F, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x1E, 0x03, - 0x34, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x33, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x32, 0xF0, - 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x03, 0x38, 0xF0, 0x2C, 0x44, 0xD0, 0x80, - 0x37, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x36, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, - 0xFF, 0xFF, 0x04, 0x03, 0xFA, 0xA1, 0x06, 0xA3, 0xB7, 0x03, 0xC3, 0x01, 0x07, 0x60, 0x00, 0x64, - 0x23, 0xFA, 0xCE, 0x60, 0x44, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x0F, 0xF0, 0x60, 0x45, 0xA4, 0x36, - 0x08, 0x00, 0x0C, 0xB4, 0x04, 0x36, 0x02, 0x00, 0x0C, 0x3A, 0x06, 0x00, 0xCE, 0x60, 0x38, 0x78, - 0xFF, 0xFF, 0xCC, 0x60, 0x35, 0x78, 0xFF, 0xFF, 0x26, 0xF2, 0x50, 0xF1, 0x60, 0x47, 0x00, 0x7E, - 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, - 0xC0, 0x84, 0xA2, 0xDB, 0x0F, 0xF0, 0x65, 0x40, 0x40, 0x2B, 0x17, 0x00, 0x32, 0x40, 0x08, 0x26, - 0x14, 0x00, 0x07, 0xF4, 0x3A, 0xF2, 0xFF, 0xFF, 0x37, 0xB4, 0x26, 0x46, 0x0E, 0x02, 0x2C, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x06, 0x00, 0x25, 0x60, 0xF6, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xC7, 0x78, 0x97, 0xF1, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x64, 0x40, 0x60, 0x26, - 0x03, 0x00, 0xCC, 0x60, 0x0D, 0x78, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x3A, 0xF3, 0x01, 0x25, 0x60, - 0xEA, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x3B, 0x07, 0x00, 0x25, 0x60, 0xF8, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, - 0x08, 0x00, 0x02, 0x3B, 0x06, 0x00, 0x25, 0x60, 0xFA, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, - 0x97, 0xF1, 0x2A, 0xF2, 0x28, 0x41, 0x40, 0xA8, 0x01, 0xB1, 0x02, 0x02, 0x43, 0x02, 0x6D, 0x00, - 0x60, 0x40, 0x08, 0x2A, 0x0F, 0x00, 0x25, 0x60, 0xE8, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, - 0x97, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0x25, 0x60, 0xEE, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xD3, 0x78, 0x97, 0xF1, 0x0F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x26, 0x28, 0x00, 0x32, 0x44, - 0x02, 0x26, 0x25, 0x00, 0x10, 0x2B, 0x26, 0x00, 0x27, 0x60, 0x6A, 0x63, 0xBF, 0xD3, 0x2C, 0xF0, - 0x00, 0xA8, 0x60, 0x41, 0x0D, 0x03, 0x50, 0xFE, 0xBD, 0xD3, 0x2D, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, - 0x2E, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, 0x2C, 0xF0, 0xD0, 0x80, 0xFA, 0xA1, 0x10, 0x0C, 0xF3, 0x02, - 0x50, 0xFE, 0x60, 0x60, 0x01, 0x64, 0xD0, 0x80, 0x2D, 0xF0, 0x1D, 0x64, 0xD0, 0x80, 0x2E, 0xF0, - 0x01, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x0C, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x32, 0x40, - 0x40, 0x2A, 0x00, 0x00, 0xCD, 0x60, 0xEE, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x26, 0xFA, 0x01, - 0x2A, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x08, 0x2A, 0x20, 0x00, 0x32, 0x40, 0x02, 0x2A, 0x1D, 0x00, - 0x03, 0x67, 0xA0, 0x84, 0x00, 0x37, 0x64, 0x63, 0x60, 0x40, 0x02, 0x37, 0x5E, 0x63, 0x60, 0x40, - 0x01, 0x37, 0x58, 0x63, 0x60, 0x40, 0x03, 0x37, 0x0D, 0x00, 0xBD, 0xD2, 0x66, 0xF1, 0xBD, 0xD2, - 0xD0, 0x80, 0x67, 0xF1, 0x07, 0x02, 0xD0, 0x80, 0xBD, 0xD2, 0x68, 0xF1, 0x03, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x03, 0x03, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x87, 0xF4, 0x60, 0x40, - 0x03, 0x2B, 0x31, 0x00, 0x88, 0xF3, 0x06, 0x61, 0x60, 0x43, 0x66, 0x45, 0x31, 0xF0, 0x63, 0x46, - 0x05, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0x30, 0xF0, 0x0F, 0x02, 0x63, 0x46, 0x04, 0xF2, 0x65, 0x46, - 0xD0, 0x80, 0x2F, 0xF0, 0x09, 0x02, 0x63, 0x46, 0x03, 0xF2, 0x65, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x03, 0x02, 0xFF, 0xFF, 0x48, 0xFE, 0x06, 0x00, 0xCD, 0x81, 0x02, 0xA3, 0xE7, 0x02, 0x87, 0xF1, - 0x08, 0xFE, 0x64, 0x43, 0x03, 0x03, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x43, 0x43, 0x23, 0x46, - 0x06, 0xF0, 0x26, 0x46, 0x07, 0x67, 0xA0, 0x84, 0x23, 0xFA, 0x64, 0x40, 0x02, 0x26, 0x2B, 0x00, - 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x26, 0x1B, 0x31, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0x43, 0x43, 0x07, 0xFC, 0x43, 0x43, 0x1D, 0xF0, 0xC0, 0x64, 0xC0, 0x84, - 0x0A, 0x60, 0x7B, 0xF1, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, - 0xA2, 0xDB, 0x63, 0x45, 0x2A, 0xF2, 0x35, 0xF0, 0x60, 0x40, 0xA4, 0x36, 0x0B, 0x00, 0x08, 0x2B, - 0x0C, 0x00, 0x23, 0x46, 0x26, 0xF2, 0x26, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0xCE, 0x60, - 0x38, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0xEE, 0x78, 0xFF, 0xFF, 0x23, 0x46, 0x22, 0xF2, 0x26, 0x46, - 0x44, 0x4C, 0x0F, 0x26, 0x19, 0x00, 0x00, 0xBC, 0x40, 0x45, 0x0B, 0x03, 0x00, 0x64, 0x23, 0x46, - 0x22, 0xFA, 0x26, 0x46, 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, - 0x26, 0x46, 0x2A, 0xF0, 0x2C, 0x44, 0x64, 0x40, 0x04, 0x27, 0x06, 0x00, 0x23, 0x46, 0x26, 0xFA, - 0x26, 0x46, 0xCD, 0x60, 0xA5, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x02, 0xFA, 0xA2, 0xFF, 0x16, 0xF0, - 0xFF, 0xFF, 0x64, 0x44, 0x01, 0x26, 0xDC, 0x9C, 0x92, 0xF3, 0x2A, 0xF2, 0xDC, 0x83, 0x92, 0xFD, - 0x06, 0xF4, 0x01, 0xF8, 0x26, 0x46, 0x60, 0x40, 0x40, 0x2B, 0x18, 0x00, 0x64, 0x44, 0x00, 0x65, - 0xFF, 0xB4, 0xFC, 0xA4, 0x06, 0xF0, 0x03, 0x03, 0x64, 0x46, 0x0C, 0x0D, 0x02, 0x65, 0x26, 0x46, - 0x00, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x60, 0x46, 0xF9, 0x01, 0x01, 0xF2, - 0xFF, 0xFF, 0xD4, 0x84, 0x01, 0xFA, 0x66, 0x44, 0x26, 0x46, 0x06, 0xFA, 0x06, 0xF4, 0x00, 0xF2, - 0x80, 0xFC, 0x40, 0x45, 0xB6, 0x60, 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, - 0x2C, 0x44, 0x0F, 0x26, 0x0F, 0x00, 0x23, 0x46, 0x26, 0xFA, 0x26, 0x44, 0x22, 0xFA, 0x26, 0x46, - 0x00, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x6E, 0x00, 0xA3, 0x46, 0x26, 0xF2, 0x60, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x26, 0xFA, - 0xA3, 0x46, 0x6B, 0x02, 0x2A, 0xF0, 0xA3, 0x46, 0x22, 0xF2, 0xA3, 0x46, 0x00, 0xBC, 0x00, 0xF2, - 0x01, 0x02, 0x63, 0x00, 0x44, 0x4C, 0x3F, 0xF0, 0x60, 0x43, 0x23, 0x46, 0x22, 0xF4, 0x09, 0x60, - 0x00, 0x65, 0x3F, 0xF2, 0x26, 0x46, 0xC0, 0x84, 0xD4, 0x80, 0x60, 0x45, 0x56, 0x07, 0x80, 0xFC, - 0x1B, 0xF2, 0x06, 0xF2, 0x60, 0x41, 0x23, 0x46, 0x22, 0xF4, 0x1B, 0xF0, 0x06, 0xF0, 0xC1, 0x81, - 0x06, 0xFA, 0x05, 0xFA, 0x9B, 0xFA, 0x65, 0x44, 0x3F, 0xFA, 0x64, 0x46, 0x00, 0xFC, 0x63, 0x46, - 0x01, 0xF2, 0x10, 0x61, 0xF2, 0xA4, 0x01, 0xFA, 0xC8, 0x83, 0x02, 0x64, 0x59, 0xD0, 0x58, 0xD8, - 0xFD, 0x1F, 0x06, 0x45, 0x00, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, - 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, - 0x05, 0xFA, 0xB6, 0x60, 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0x2C, 0x44, - 0x04, 0x27, 0x16, 0x00, 0x23, 0x46, 0x22, 0xF2, 0xA2, 0xFC, 0x60, 0x46, 0x46, 0x46, 0x3F, 0xF2, - 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, 0x26, 0x46, 0x2C, 0x43, 0x2A, 0xFC, 0x06, 0xF4, 0x00, 0x64, - 0x00, 0xFA, 0x01, 0xF0, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0x01, 0xFA, 0x26, 0x46, 0x1D, 0x00, - 0x00, 0x66, 0x46, 0x46, 0xCA, 0x60, 0x81, 0x78, 0xFF, 0xFF, 0xA3, 0x46, 0x22, 0xF0, 0xA2, 0xFC, - 0x00, 0x63, 0x33, 0x85, 0xA3, 0x46, 0x0D, 0x03, 0xA3, 0x46, 0x26, 0xF2, 0x0F, 0x65, 0xA4, 0x85, - 0xD4, 0x84, 0x26, 0xFA, 0xA3, 0x46, 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, - 0xA3, 0xFF, 0x26, 0x46, 0xCE, 0x60, 0x38, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x32, 0xF0, 0x60, 0x40, - 0x08, 0x2A, 0x24, 0x00, 0x01, 0x2B, 0x13, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x10, 0x00, 0x25, 0x60, - 0xE8, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, - 0x25, 0x60, 0xEE, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xD3, 0x78, 0x97, 0xF1, 0x0F, 0x00, 0x25, 0x60, - 0xE6, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, - 0x25, 0x60, 0xEC, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xD3, 0x78, 0x97, 0xF1, 0x07, 0xF4, 0xFF, 0xFF, - 0x26, 0xF2, 0x26, 0x46, 0x0F, 0xB4, 0xDC, 0x85, 0x25, 0x60, 0xEA, 0x64, 0xE5, 0x60, 0x78, 0x41, - 0xD3, 0x78, 0x97, 0xF1, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, 0x07, 0x00, 0x25, 0x60, - 0xF8, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x08, 0x00, 0x02, 0x3B, 0x06, 0x00, - 0x25, 0x60, 0xFA, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0x07, 0xF2, 0x26, 0xF0, - 0x41, 0x18, 0x60, 0x46, 0xFF, 0x67, 0x20, 0x88, 0x64, 0x5F, 0x40, 0x4A, 0x15, 0xF0, 0x28, 0x44, - 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, - 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, 0x15, 0xFA, 0x40, 0x48, 0x14, 0xF0, 0x2A, 0x44, 0xD0, 0x84, - 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x07, 0x00, - 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, 0xC0, 0x84, - 0x14, 0xFA, 0x2B, 0x60, 0xEC, 0x63, 0xBD, 0xDB, 0x60, 0x5C, 0x2F, 0x67, 0xD0, 0x80, 0x60, 0x45, - 0x02, 0x28, 0x64, 0x45, 0x28, 0x5C, 0xBD, 0xD9, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, 0x02, 0x24, - 0x64, 0x41, 0xD5, 0x84, 0x80, 0x65, 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, 0x0E, 0xFA, - 0xA3, 0xDB, 0x26, 0x46, 0xCE, 0x60, 0x7F, 0x78, 0xFF, 0xFF, 0xCA, 0x60, 0x81, 0x78, 0xFF, 0xFF, - 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0xCA, 0x60, 0x81, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0x04, 0x64, 0x0F, 0x60, 0x90, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x00, 0x66, - 0x46, 0x46, 0xCA, 0x60, 0x81, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x58, 0x63, 0x60, 0x47, 0x01, 0x27, - 0x64, 0x63, 0x61, 0x5C, 0x18, 0x60, 0x0F, 0xF9, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, - 0xBD, 0xD0, 0x00, 0xF4, 0x04, 0xF8, 0x83, 0xFA, 0x82, 0xF8, 0xA6, 0x46, 0x02, 0xB0, 0x5E, 0x63, - 0x04, 0x03, 0x64, 0x63, 0x03, 0xB0, 0x02, 0x3A, 0x6C, 0x63, 0x3F, 0xF2, 0xBD, 0xD0, 0xBD, 0xD0, - 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, 0xA6, 0x46, 0x07, 0xF8, 0x86, 0xFA, 0x85, 0xF8, 0x60, 0x47, - 0x08, 0xFA, 0x18, 0x60, 0x0F, 0xF1, 0x26, 0x46, 0x64, 0x41, 0x2F, 0x58, 0xFF, 0xFF, 0x2A, 0xF2, - 0x2C, 0xF0, 0x31, 0x40, 0x20, 0x26, 0x09, 0x00, 0x60, 0x40, 0xA4, 0x36, 0x21, 0x00, 0x08, 0x26, - 0x07, 0x00, 0x7D, 0xF1, 0xCF, 0x60, 0x47, 0x78, 0xFF, 0xFF, 0xCF, 0x60, 0x77, 0x78, 0xFF, 0xFF, - 0x64, 0x40, 0x01, 0x26, 0x12, 0x00, 0x3F, 0xF0, 0x32, 0x40, 0x10, 0x2A, 0x0A, 0x00, 0x64, 0x41, - 0x60, 0x40, 0x40, 0x27, 0x06, 0x00, 0xCD, 0x81, 0xDD, 0x81, 0x03, 0x03, 0x02, 0x03, 0x01, 0x61, - 0x01, 0x00, 0x00, 0x61, 0x60, 0x40, 0x18, 0x3A, 0x03, 0x00, 0xCF, 0x60, 0xC9, 0x78, 0xFF, 0xFF, - 0x07, 0xF2, 0x87, 0xF1, 0x66, 0x45, 0xD0, 0x80, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x03, 0x03, - 0xFF, 0xFF, 0x02, 0x26, 0x07, 0x00, 0xDD, 0x60, 0x58, 0x4F, 0x90, 0x78, 0xFF, 0xFF, 0xCF, 0x60, - 0xC5, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xA4, 0x3A, 0x07, 0x00, 0xDF, 0x60, - 0x58, 0x4F, 0xE3, 0x78, 0xFF, 0xFF, 0xCF, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xCE, 0x60, - 0x58, 0x4F, 0x54, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x06, 0x65, 0xD4, 0x80, 0x60, 0x43, 0x5B, 0x04, - 0x00, 0xF4, 0xAA, 0x60, 0xAA, 0x65, 0x09, 0xF2, 0x0A, 0xF0, 0xD4, 0x80, 0x03, 0x64, 0x53, 0x02, - 0xD0, 0x80, 0x00, 0x64, 0x0B, 0xF0, 0x4F, 0x02, 0x64, 0x45, 0xD4, 0x80, 0xF8, 0x7F, 0x08, 0x02, - 0x0C, 0xF0, 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, 0x20, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x0B, 0x00, - 0xD4, 0x80, 0x1D, 0x60, 0x60, 0x64, 0x11, 0x02, 0x0C, 0xF0, 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, - 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x65, 0x44, 0x88, 0x3A, 0x35, 0x00, 0x77, 0x37, 0x03, 0x00, - 0x78, 0x37, 0x01, 0x00, 0x8E, 0x37, 0x00, 0x61, 0x2E, 0x00, 0xD4, 0x80, 0x08, 0x65, 0x2B, 0x02, - 0xD7, 0x80, 0x01, 0x60, 0x00, 0x64, 0x0C, 0xF0, 0x26, 0x04, 0xD0, 0x80, 0x0D, 0xF0, 0x23, 0x02, - 0x26, 0x46, 0x14, 0xF2, 0x01, 0x63, 0x02, 0xA8, 0x64, 0x47, 0x1D, 0x03, 0x7F, 0xB4, 0xFD, 0xA0, - 0x06, 0x03, 0x19, 0x07, 0x23, 0xF0, 0x60, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x6B, 0x00, 0x26, 0x46, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x07, 0x00, 0x60, 0x40, 0x48, 0x36, 0x04, 0x00, - 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0xE8, 0x60, 0x58, 0x4F, 0xEF, 0x78, 0xFF, 0xFF, - 0xCF, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x61, 0x40, 0x01, 0x2A, 0x09, 0x00, 0x25, 0x60, - 0xFE, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0xCF, 0x60, 0xC9, 0x78, 0xFF, 0xFF, - 0xDF, 0x60, 0x58, 0x4F, 0xE3, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0x36, - 0x88, 0x00, 0xCF, 0x60, 0xD6, 0x78, 0xFF, 0xFF, 0xCF, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0x60, 0x40, - 0x0C, 0x26, 0x7F, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x7C, 0x00, 0xB0, 0x3A, 0x05, 0x00, 0xD4, 0x60, - 0x58, 0x4F, 0x5A, 0x78, 0xFF, 0xFF, 0x71, 0x00, 0x00, 0x3A, 0x05, 0x00, 0xD7, 0x60, 0x58, 0x4F, - 0xCA, 0x78, 0xFF, 0xFF, 0x6A, 0x00, 0x20, 0x3A, 0x05, 0x00, 0xD7, 0x60, 0x58, 0x4F, 0xCA, 0x78, - 0xFF, 0xFF, 0x63, 0x00, 0xC0, 0x3A, 0x05, 0x00, 0xDC, 0x60, 0x58, 0x4F, 0xFE, 0x78, 0xFF, 0xFF, - 0x5C, 0x00, 0xA0, 0x3A, 0x05, 0x00, 0xDD, 0x60, 0x58, 0x4F, 0x5B, 0x78, 0xFF, 0xFF, 0x55, 0x00, - 0x40, 0x3A, 0x0D, 0x00, 0xE3, 0x60, 0x58, 0x4F, 0xC3, 0x78, 0xFF, 0xFF, 0x4E, 0x00, 0x60, 0x40, - 0x50, 0x3A, 0x05, 0x00, 0xED, 0x60, 0x58, 0x4F, 0xEB, 0x78, 0xFF, 0xFF, 0x46, 0x00, 0xCF, 0x60, - 0xC9, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x07, 0x00, - 0x60, 0x40, 0x48, 0x36, 0x04, 0x00, 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x2A, 0xF2, - 0x3B, 0xF0, 0x60, 0x40, 0x40, 0x2B, 0x04, 0x00, 0x64, 0x40, 0x20, 0x2B, 0x01, 0x00, 0x03, 0x00, - 0xCF, 0x60, 0xB9, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, 0xFF, 0xFF, 0xF8, 0x03, - 0x23, 0xF2, 0x07, 0xF4, 0xBB, 0xF0, 0x26, 0x46, 0xA4, 0x84, 0xFF, 0xFF, 0x60, 0x40, 0x2F, 0x26, - 0x20, 0x00, 0xC9, 0x60, 0x58, 0x4F, 0xCF, 0x78, 0xFF, 0xFF, 0x64, 0x40, 0x18, 0x36, 0x09, 0x00, - 0x04, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xCF, 0x60, 0xC9, 0x78, - 0xFF, 0xFF, 0x1F, 0x60, 0x04, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x0C, 0x00, 0x66, 0x44, 0x00, 0xA8, 0xFF, 0xFF, - 0x0A, 0x03, 0x26, 0x46, 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xCE, 0x60, 0x35, 0x78, 0xFF, 0xFF, 0x14, 0xF2, 0x00, 0x7C, - 0x3E, 0xF8, 0xCC, 0x84, 0xCC, 0x84, 0x18, 0x03, 0x5C, 0x02, 0x11, 0xF2, 0x07, 0xFA, 0xAB, 0xF3, - 0x19, 0xFA, 0xD0, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xE0, 0x64, 0x0F, 0x60, - 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, - 0xF2, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x8D, 0x00, 0xA2, 0xFF, 0x46, 0x45, 0xB6, 0x60, 0x58, 0x4E, - 0xBB, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x11, 0x03, 0x7E, 0x63, 0x46, 0x4B, 0x25, 0x46, 0xA3, 0xD0, - 0x2B, 0x46, 0xA3, 0xD8, 0xFB, 0x1F, 0x89, 0xFC, 0x8A, 0xFC, 0x88, 0xFC, 0x05, 0x18, 0x64, 0x46, - 0x01, 0xF0, 0x10, 0x67, 0xC0, 0x84, 0x01, 0xFA, 0x08, 0xFE, 0x2B, 0x46, 0x46, 0x46, 0x25, 0x46, - 0xD0, 0x60, 0x58, 0x4E, 0x86, 0x78, 0xFF, 0xFF, 0x13, 0x60, 0x43, 0xF3, 0x87, 0xF3, 0x00, 0xA8, - 0x07, 0xFA, 0x0E, 0x03, 0x1E, 0x60, 0xDA, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x25, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF3, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x0D, 0x00, - 0x1E, 0x60, 0xCE, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xF4, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x26, 0x44, 0x00, 0xA8, 0xC1, 0xFE, - 0x48, 0x03, 0x26, 0x46, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x07, 0x00, 0x60, 0x40, - 0x48, 0x36, 0x04, 0x00, 0xD2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xD2, 0xFB, 0x26, 0x46, 0x2A, 0xF2, - 0x3B, 0xF0, 0x60, 0x40, 0x40, 0x2B, 0x06, 0x00, 0xC0, 0x60, 0x00, 0x64, 0x64, 0x40, 0x20, 0x2B, - 0x01, 0x00, 0x03, 0x00, 0xD0, 0x60, 0x73, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, - 0xFF, 0xFF, 0xF8, 0x03, 0x23, 0xF2, 0x07, 0xF4, 0xBB, 0xF0, 0x26, 0x46, 0xA4, 0x84, 0xFF, 0xFF, - 0x60, 0x40, 0x2F, 0x26, 0x07, 0x00, 0xC9, 0x60, 0x58, 0x4F, 0xCF, 0x78, 0xFF, 0xFF, 0x64, 0x40, - 0x18, 0x36, 0x09, 0x00, 0x04, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0xCF, 0x60, 0xC9, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0x04, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0xF1, 0x64, 0x3B, 0x42, - 0x4A, 0xDB, 0x00, 0x66, 0x46, 0x46, 0xCF, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x82, 0x60, - 0xFF, 0x65, 0xA4, 0x87, 0x02, 0xBF, 0x2A, 0xFA, 0x1C, 0xF2, 0x13, 0xFA, 0x32, 0xF2, 0x2C, 0xFA, - 0x33, 0xF2, 0x2D, 0xFA, 0x34, 0xF2, 0x2E, 0xFA, 0x2F, 0xF2, 0x32, 0xFA, 0x30, 0xF2, 0x33, 0xFA, - 0x31, 0xF2, 0x34, 0xFA, 0x66, 0xF3, 0x2F, 0xFA, 0x67, 0xF3, 0x30, 0xFA, 0x68, 0xF3, 0x31, 0xFA, - 0x2E, 0x58, 0xFF, 0xFF, 0xD3, 0x60, 0x59, 0x64, 0x08, 0x60, 0x26, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, - 0xB1, 0xF3, 0x12, 0x60, 0x2C, 0x63, 0xF7, 0xA0, 0xFF, 0xFF, 0x02, 0x06, 0x00, 0x64, 0xB1, 0xFB, - 0xB1, 0xF3, 0xB1, 0xFB, 0x01, 0xA4, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0x2A, 0xA3, 0xFB, 0x01, - 0x63, 0x46, 0x10, 0x60, 0xA6, 0x63, 0x0E, 0x61, 0x60, 0xFE, 0xA6, 0xD1, 0xDE, 0x86, 0x01, 0x64, - 0x64, 0x40, 0x7F, 0x36, 0x00, 0x64, 0xA3, 0xDB, 0xDB, 0x83, 0xA3, 0xD9, 0xCD, 0x81, 0x04, 0xA3, - 0xF4, 0x02, 0x11, 0x60, 0x16, 0x63, 0x1C, 0x61, 0xA6, 0xD1, 0xDE, 0x86, 0x01, 0x64, 0x64, 0x40, - 0x7F, 0x36, 0x00, 0x64, 0xA3, 0xDB, 0xDB, 0x83, 0xA3, 0xD9, 0xCD, 0x81, 0x06, 0xA3, 0xF4, 0x02, - 0x20, 0xFE, 0x13, 0x60, 0x7F, 0xF3, 0x13, 0x60, 0x2D, 0xFB, 0x1E, 0x63, 0x26, 0x60, 0x64, 0x61, - 0x27, 0x60, 0x08, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x13, 0x60, 0x95, 0xF3, 0x13, 0x60, - 0x43, 0xFB, 0x13, 0x60, 0x96, 0xF3, 0x13, 0x60, 0x44, 0xFB, 0x13, 0x60, 0x9C, 0xF3, 0x13, 0x60, - 0x4A, 0xFB, 0x13, 0x60, 0x9D, 0xF3, 0x13, 0x60, 0x4B, 0xFB, 0x13, 0x60, 0x9E, 0xF3, 0x13, 0x60, - 0x4C, 0xFB, 0x13, 0x60, 0x9F, 0xF3, 0x13, 0x60, 0x4D, 0xFB, 0x13, 0x60, 0x97, 0xF3, 0x13, 0x60, - 0x45, 0xFB, 0x13, 0x60, 0x98, 0xF3, 0x13, 0x60, 0x46, 0xFB, 0x13, 0x60, 0x99, 0xF3, 0x13, 0x60, - 0x47, 0xFB, 0x26, 0x60, 0xB0, 0x63, 0xBD, 0xD1, 0xCB, 0xF9, 0x66, 0xF9, 0xBD, 0xD1, 0xCC, 0xF9, - 0x67, 0xF9, 0xA3, 0xD1, 0xCD, 0xF9, 0x68, 0xF9, 0x01, 0x64, 0x6A, 0xFB, 0x13, 0x60, 0x51, 0xF3, - 0xC4, 0xFB, 0x00, 0x63, 0x4A, 0xFD, 0x5A, 0xFD, 0x6B, 0xFD, 0x6C, 0xFD, 0x13, 0x60, 0x45, 0xF3, - 0x15, 0x60, 0xCB, 0xF1, 0xFF, 0x60, 0xE7, 0x65, 0x32, 0x41, 0xA5, 0x81, 0xFF, 0xA0, 0xFF, 0xFF, - 0x01, 0x03, 0x06, 0x00, 0x13, 0x60, 0x47, 0xF3, 0x08, 0xB9, 0x60, 0x40, 0x01, 0x26, 0x10, 0xB9, - 0x41, 0x52, 0x87, 0xF5, 0x32, 0x44, 0x10, 0xB0, 0xFF, 0xFF, 0x0A, 0x03, 0x14, 0x60, 0x15, 0xF3, - 0x06, 0xF0, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, 0xB0, 0x84, 0x06, 0xFA, - 0x13, 0x60, 0x45, 0xF3, 0x22, 0x7C, 0xFF, 0xA0, 0xFD, 0xA0, 0x05, 0x06, 0x03, 0x03, 0xFE, 0xA0, - 0x04, 0x7C, 0x01, 0x02, 0x3A, 0xF8, 0x13, 0x60, 0x4C, 0xF1, 0x20, 0x44, 0x20, 0xB5, 0x64, 0x41, - 0x00, 0xB9, 0xD4, 0x84, 0x08, 0x28, 0x20, 0xBC, 0x40, 0x40, 0x15, 0x60, 0xCB, 0xF3, 0x30, 0x60, - 0x0E, 0x63, 0xF0, 0x84, 0xF0, 0x84, 0xF0, 0x84, 0x02, 0xB5, 0xF0, 0x84, 0xF0, 0x84, 0x03, 0xB4, - 0x65, 0x5C, 0xA3, 0xD9, 0x02, 0xA8, 0x18, 0x60, 0x08, 0xFB, 0x15, 0x02, 0x00, 0x60, 0xC8, 0x64, - 0x18, 0x60, 0x09, 0xFB, 0x18, 0x60, 0x0D, 0xFB, 0x07, 0x60, 0xD0, 0x64, 0x18, 0x60, 0x0A, 0xFB, - 0x18, 0x60, 0x0E, 0xFB, 0x01, 0x60, 0x90, 0x64, 0x18, 0x60, 0x0B, 0xFB, 0x00, 0x60, 0x64, 0x64, - 0x18, 0x60, 0x0C, 0xFB, 0x06, 0x00, 0x64, 0x64, 0x18, 0x60, 0x0B, 0xFB, 0x64, 0x64, 0x18, 0x60, - 0x0C, 0xFB, 0xB1, 0xF1, 0x10, 0x60, 0xA0, 0x63, 0x2F, 0x18, 0x60, 0x40, 0x01, 0x27, 0x12, 0x00, - 0xCC, 0x84, 0x06, 0xA3, 0xFD, 0x02, 0xA3, 0xD3, 0x10, 0x60, 0xA6, 0x63, 0x25, 0x1B, 0x10, 0x60, - 0xF8, 0x65, 0xA3, 0xD3, 0x06, 0xA3, 0xD7, 0x80, 0x02, 0x1B, 0xFB, 0x04, 0x1D, 0x00, 0xF8, 0xA3, - 0xA3, 0xD3, 0x18, 0x00, 0x11, 0x60, 0x14, 0x63, 0x11, 0x60, 0xF4, 0x65, 0xA3, 0xD1, 0x08, 0xA3, - 0xD0, 0x80, 0xD7, 0x80, 0x02, 0x03, 0xFA, 0x04, 0x0F, 0x00, 0xFA, 0xA3, 0xA3, 0xD3, 0x11, 0x60, - 0x16, 0x63, 0x0A, 0x1B, 0xA3, 0xD3, 0x08, 0xA3, 0xD7, 0x80, 0x02, 0x1B, 0xFB, 0x04, 0x04, 0x00, - 0xF6, 0xA3, 0xA3, 0xD3, 0xC5, 0xFB, 0x64, 0xFB, 0x27, 0x60, 0x34, 0x64, 0x26, 0x60, 0x90, 0x63, - 0xA0, 0xD1, 0xA3, 0xD9, 0x64, 0x41, 0x58, 0xD1, 0x5B, 0xD9, 0x64, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x2B, 0x03, 0x00, 0xD1, 0x60, 0xE9, 0x78, 0xFF, 0xFF, 0x91, 0xFA, 0x61, 0x44, 0xEF, 0x60, - 0x58, 0x4E, 0xAB, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x15, 0x60, 0xBC, 0xF3, 0x3F, 0x40, 0x01, 0x27, - 0x08, 0x00, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, 0xFF, 0xFF, - 0x06, 0x00, 0x0F, 0x65, 0xA4, 0x84, 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, 0xFF, 0xFF, 0x00, 0x65, - 0xEE, 0x60, 0x58, 0x4E, 0xC6, 0x78, 0xFF, 0xFF, 0xEF, 0x60, 0x58, 0x4E, 0x10, 0x78, 0xFF, 0xFF, - 0x15, 0x00, 0x11, 0xF8, 0x64, 0x44, 0xEF, 0x60, 0x58, 0x4E, 0xAB, 0x78, 0xFF, 0xFF, 0x12, 0xFA, - 0x15, 0x60, 0xBD, 0xF3, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, - 0xFF, 0xFF, 0xFF, 0x65, 0xEE, 0x60, 0x58, 0x4E, 0xC6, 0x78, 0xFF, 0xFF, 0xB5, 0xF1, 0x09, 0x60, - 0x2A, 0x64, 0xD0, 0x80, 0x03, 0x64, 0x01, 0x06, 0x06, 0x64, 0xAE, 0xFB, 0x46, 0x48, 0xC3, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x05, 0x3A, 0x03, 0x00, 0x14, 0x60, 0x00, 0x66, 0x11, 0x00, 0x04, 0x3A, - 0x03, 0x00, 0x13, 0x60, 0xF4, 0x66, 0x0C, 0x00, 0x03, 0x3A, 0x03, 0x00, 0x13, 0x60, 0xE8, 0x66, - 0x07, 0x00, 0x02, 0x3A, 0x03, 0x00, 0x13, 0x60, 0xDC, 0x66, 0x02, 0x00, 0x13, 0x60, 0xD0, 0x66, - 0x60, 0xFE, 0xA6, 0xD3, 0xDE, 0x86, 0x10, 0x60, 0x5F, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, 0x21, 0x60, - 0x2F, 0x63, 0xA3, 0xDB, 0x21, 0x60, 0xA7, 0x63, 0xA3, 0xDB, 0xA6, 0xD3, 0xDE, 0x86, 0x10, 0x60, - 0x5E, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, 0x20, 0x60, 0xBF, 0x63, 0xA3, 0xDB, 0x20, 0xFE, 0xA6, 0xD3, - 0xDA, 0x86, 0x60, 0x43, 0x1F, 0xB3, 0x63, 0x5C, 0x1F, 0x60, 0x00, 0xB4, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xB0, 0x85, 0x10, 0x60, 0x95, 0xF3, 0xFF, 0xFF, 0xFC, 0x60, 0x00, 0xB4, 0xB4, 0x84, - 0xA2, 0xDB, 0x10, 0x60, 0xD1, 0xFB, 0x21, 0x60, 0xCA, 0x63, 0xA3, 0xD3, 0xA6, 0xD1, 0xDE, 0x86, - 0x80, 0x60, 0x7F, 0xB5, 0x64, 0x44, 0xE8, 0x84, 0x7F, 0x60, 0x80, 0xB4, 0xB4, 0x84, 0xA3, 0xDB, - 0x60, 0xFE, 0xA6, 0xD3, 0xDE, 0x86, 0x10, 0x60, 0x62, 0xFB, 0x20, 0xFE, 0x10, 0x60, 0x2A, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xD2, 0x60, 0x5E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x64, 0xF1, 0x0F, 0x60, - 0x9D, 0xF9, 0x0C, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x44, 0x01, 0x65, 0x34, 0x80, - 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD2, 0x60, 0x82, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x64, 0xF1, 0x0F, 0x60, - 0x9D, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xD2, 0x60, 0x97, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x11, 0xF1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xBE, 0xFE, 0x08, 0x60, 0x11, 0xF1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x20, 0x40, 0x20, 0x2A, 0x04, 0x00, 0xF0, 0x60, 0x58, 0x4E, - 0x66, 0x78, 0xFF, 0xFF, 0x36, 0x40, 0x08, 0x3A, 0x6A, 0x00, 0x36, 0x40, 0x08, 0x3A, 0x05, 0x00, - 0x10, 0x60, 0x42, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x04, 0x00, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x4E, 0xF3, 0xFF, 0xFF, 0x1D, 0x1B, 0x13, 0x60, 0x54, 0xF3, 0xC7, 0xFB, 0x26, 0x60, - 0x16, 0x65, 0x26, 0x60, 0xB8, 0x61, 0x26, 0x60, 0x14, 0x64, 0x20, 0x63, 0x59, 0xD1, 0x58, 0xD9, - 0xA5, 0xD9, 0xDA, 0x85, 0xFB, 0x1F, 0x00, 0x60, 0x01, 0x64, 0x08, 0x60, 0x22, 0xFB, 0xD3, 0x60, - 0x3C, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x36, 0x40, 0x08, 0x3A, 0x41, 0x00, 0xE7, 0x60, 0xC5, 0x78, - 0xFF, 0xFF, 0x27, 0x60, 0x3E, 0x63, 0x60, 0x41, 0x00, 0x62, 0xCD, 0x81, 0x04, 0xA2, 0xFD, 0x02, - 0x2C, 0x60, 0x3E, 0x61, 0xFC, 0xA2, 0x62, 0x45, 0xC5, 0x81, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x85, - 0xC7, 0x83, 0xFE, 0xA5, 0x88, 0xF3, 0xFF, 0xFF, 0xC4, 0x84, 0x66, 0x45, 0x60, 0x46, 0xBD, 0xD1, - 0x03, 0xF8, 0xBD, 0xD1, 0x04, 0xF8, 0xA3, 0xD1, 0x05, 0xF8, 0x06, 0xF2, 0xFF, 0xFF, 0x02, 0x7E, - 0x06, 0xFA, 0x64, 0xF3, 0x61, 0x43, 0x60, 0x40, 0x01, 0x27, 0x02, 0xA3, 0xA3, 0xD1, 0x0F, 0xF8, - 0x16, 0x64, 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, 0x66, 0x5C, 0xC1, 0x60, 0x58, 0x4E, 0x93, 0x78, - 0xFF, 0xFF, 0x66, 0x43, 0x32, 0x40, 0x08, 0x2A, 0x0A, 0x00, 0x14, 0x60, 0x15, 0xF3, 0x06, 0xF0, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, 0xB0, 0x84, 0x06, 0xFA, 0xC5, 0xFE, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xD2, 0x60, 0xB5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x03, 0x64, 0x08, 0x60, 0x22, 0xFB, 0xD2, 0x60, 0xB5, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x42, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x0F, 0x4E, 0xE1, 0x60, 0x58, 0x4F, 0xA9, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x4E, 0xDF, 0x60, - 0x58, 0x4F, 0x0F, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x4E, 0xDE, 0x60, 0x58, 0x4F, 0x9A, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x4E, 0xDD, 0x60, 0x58, 0x4F, 0xFB, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, - 0xD5, 0x01, 0x4E, 0xF3, 0x7D, 0xF5, 0x60, 0x40, 0xFF, 0x22, 0x0A, 0x00, 0x88, 0xF1, 0xCC, 0x84, - 0xE0, 0x84, 0xC0, 0x86, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x7D, 0xF5, 0x07, 0x00, - 0x08, 0x60, 0x24, 0xF1, 0x00, 0x60, 0x11, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x4E, 0xF3, - 0x66, 0x40, 0xFF, 0x22, 0x05, 0x00, 0xFF, 0x22, 0x39, 0x00, 0xD4, 0x60, 0x0C, 0x78, 0xFF, 0xFF, - 0x02, 0x64, 0x69, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x69, 0xF3, 0x00, 0x65, 0xD4, 0x80, 0x4E, 0xF3, - 0x0E, 0x03, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xD3, 0x60, 0x7C, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xD3, 0x60, 0x8F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xD3, 0xF3, - 0xFF, 0xFF, 0xFE, 0xB4, 0xD3, 0xFB, 0x1F, 0x60, 0x3A, 0x62, 0x06, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x20, 0x44, 0x01, 0xB5, 0x54, 0x80, 0xDA, 0xFE, 0xBE, 0xFE, 0x87, 0xF1, 0x02, 0x64, - 0x86, 0xF3, 0xC0, 0x83, 0x40, 0x48, 0x75, 0xFD, 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, - 0x28, 0x44, 0x4C, 0x88, 0x75, 0xF3, 0x02, 0x65, 0xC4, 0x83, 0xF5, 0x02, 0x1E, 0x60, 0x58, 0x4E, - 0xB9, 0x78, 0xFF, 0xFF, 0x17, 0x60, 0x06, 0x64, 0x0B, 0x60, 0x82, 0xFB, 0x4A, 0xDF, 0x01, 0x60, - 0xFE, 0x63, 0x15, 0x60, 0x00, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, 0x7D, 0xF1, 0x1E, 0x60, - 0xE0, 0x61, 0x64, 0x40, 0xFF, 0x26, 0x38, 0x00, 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, - 0x1E, 0x60, 0xCE, 0x61, 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xD4, 0x61, - 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xE6, 0x61, 0xD4, 0x60, 0x58, 0x4E, - 0x0F, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xEC, 0x61, 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, - 0x1E, 0x60, 0xF8, 0x61, 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0x04, 0x61, - 0xD4, 0x60, 0x58, 0x4E, 0x0F, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xF2, 0x61, 0xD4, 0x60, 0x58, 0x4E, - 0x0F, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xDA, 0x61, 0xD4, 0x60, 0x58, 0x4E, 0x3A, 0x78, 0xFF, 0xFF, - 0x00, 0x64, 0x08, 0x60, 0x15, 0xFB, 0x5A, 0xDB, 0xC5, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xA1, 0xD3, - 0x0E, 0x57, 0x23, 0x00, 0x0E, 0xF2, 0x44, 0x4C, 0x80, 0xB0, 0x10, 0xB0, 0x0A, 0x03, 0x00, 0x64, - 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x13, 0x00, 0x12, 0x02, 0xF0, 0x37, 0x09, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, - 0xA2, 0xFF, 0x8F, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0x8F, 0xFB, 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, - 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, 0xDA, 0x02, - 0x37, 0x58, 0xFF, 0xFF, 0xA1, 0xD3, 0x0E, 0x57, 0x18, 0x00, 0x0E, 0xF2, 0x44, 0x4C, 0x80, 0xB0, - 0x10, 0xB0, 0x0A, 0x03, 0x00, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x08, 0x00, 0x07, 0x02, 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, - 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, 0xE5, 0x02, - 0x37, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xB0, 0x64, 0x2A, 0xFA, 0x2F, 0xF2, - 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0xCC, 0xF3, - 0x30, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, 0x66, 0xF3, 0x32, 0xFA, 0x67, 0xF3, 0x33, 0xFA, 0x68, 0xF3, - 0x34, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, 0x06, 0x63, 0x3F, 0xFC, 0x1C, 0xF2, 0x13, 0xFA, 0x00, 0x64, - 0x3E, 0xFA, 0x07, 0xF2, 0x87, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x0C, 0x03, 0x60, 0x46, - 0x06, 0xF2, 0x26, 0x46, 0x01, 0xB0, 0xFF, 0xFF, 0x03, 0x02, 0xD6, 0x60, 0x40, 0x78, 0xFF, 0xFF, - 0xD7, 0x60, 0x92, 0x78, 0xFF, 0xFF, 0x00, 0xF4, 0x0A, 0xF2, 0x09, 0xF2, 0xFF, 0xA0, 0x00, 0xA0, - 0x13, 0x02, 0xFF, 0xA0, 0x04, 0x03, 0x08, 0x03, 0xD4, 0x60, 0xAF, 0x78, 0xFF, 0xFF, 0x02, 0x64, - 0x55, 0xFB, 0xD4, 0x60, 0xBA, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0x32, 0x40, 0x08, 0x2A, 0x0F, 0x00, - 0x55, 0xFD, 0xD4, 0x60, 0xBA, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, 0x0E, 0x63, - 0x01, 0xA4, 0x0A, 0xFA, 0x0B, 0xFC, 0x43, 0x59, 0xD7, 0x60, 0x6C, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x00, 0xF4, 0x0A, 0xF2, 0x0D, 0x63, 0x01, 0xA4, 0x0A, 0xFA, 0x0B, 0xFC, 0x43, 0x59, 0xD7, 0x60, - 0x6C, 0x78, 0xFF, 0xFF, 0x87, 0xF5, 0x00, 0xF2, 0x26, 0x46, 0x00, 0xA0, 0x2E, 0xF0, 0x37, 0x03, - 0x66, 0x41, 0x15, 0x60, 0x02, 0x65, 0x64, 0x47, 0x00, 0x7F, 0x87, 0xF1, 0xE0, 0x84, 0x44, 0xD3, - 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, - 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, - 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, - 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x86, 0xF1, - 0x17, 0x60, 0x02, 0x61, 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, 0x05, 0x05, 0xA1, 0xD3, - 0x4A, 0xD9, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0xD6, 0x60, 0x09, 0x78, 0xFF, 0xFF, 0x0B, 0x60, - 0x81, 0xF3, 0xFF, 0xFF, 0x62, 0x18, 0x17, 0x60, 0x02, 0x64, 0x04, 0xA5, 0xA0, 0xD1, 0x72, 0x44, - 0xFF, 0xB4, 0x64, 0x40, 0xE0, 0x22, 0x1F, 0xB4, 0x64, 0x40, 0xF8, 0x22, 0x07, 0xB4, 0x02, 0x00, - 0x03, 0x04, 0xD0, 0x84, 0xD0, 0x80, 0xFC, 0x01, 0xE0, 0x84, 0x44, 0xD3, 0xFF, 0xFF, 0x60, 0x43, - 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, - 0x07, 0x1B, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, - 0x65, 0x46, 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, - 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, - 0x06, 0xFA, 0x61, 0x46, 0x2E, 0xF0, 0x66, 0x41, 0x15, 0x60, 0x02, 0x65, 0x64, 0x47, 0x00, 0x7F, - 0x87, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, - 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, - 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, - 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, - 0x60, 0x43, 0x61, 0x46, 0xD6, 0x60, 0x09, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x02, 0x61, 0xB5, 0x60, - 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, 0x86, 0xF1, 0x72, 0x44, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, - 0x02, 0x04, 0xD0, 0x84, 0xFB, 0x01, 0xE0, 0x83, 0x87, 0xF3, 0x02, 0xA3, 0x43, 0x93, 0x66, 0x44, - 0x00, 0xA8, 0x56, 0xFD, 0x3A, 0x03, 0x00, 0x64, 0x2B, 0xFA, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, - 0x66, 0x45, 0x63, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF2, 0x65, 0x46, 0x2C, 0xFA, 0x2D, 0xF8, - 0xAE, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0x32, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0x33, 0xFA, 0xCD, 0xF3, - 0x31, 0xFA, 0x34, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, 0xFF, 0x67, 0x0E, 0xFA, 0x66, 0x41, 0x43, 0x49, - 0x29, 0x46, 0x92, 0xF0, 0x2C, 0x60, 0x26, 0x63, 0x47, 0xD3, 0x61, 0x46, 0x02, 0x63, 0x00, 0x7E, - 0x13, 0xFA, 0x3F, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0x87, 0xF3, 0x07, 0xFA, 0x66, 0x41, 0x00, 0xF4, - 0x05, 0x64, 0x09, 0xFA, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x61, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x56, 0xF3, 0xA3, 0xFF, 0x60, 0x43, - 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, 0x56, 0xF3, 0xFF, 0xFF, 0x40, 0x58, 0x03, 0x65, - 0xE5, 0x60, 0x58, 0x4E, 0x51, 0x78, 0xFF, 0xFF, 0x56, 0xF3, 0x26, 0x46, 0x60, 0x43, 0x66, 0x41, - 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, - 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, - 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, - 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, - 0x61, 0x46, 0x2E, 0xF0, 0x66, 0x41, 0x15, 0x60, 0x02, 0x65, 0x64, 0x47, 0x00, 0x7F, 0x87, 0xF1, - 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, - 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, - 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, - 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, - 0x61, 0x46, 0x2C, 0xF2, 0x2D, 0xF0, 0xAE, 0xF2, 0x66, 0x45, 0x63, 0x46, 0x03, 0xFA, 0x04, 0xF8, - 0x55, 0xF3, 0x85, 0xFA, 0xFF, 0xA0, 0x65, 0x46, 0x03, 0x03, 0xD7, 0x60, 0xAE, 0x78, 0xFF, 0xFF, - 0x94, 0xF3, 0x66, 0x45, 0x63, 0x46, 0x1F, 0xFA, 0x65, 0x46, 0xBA, 0x65, 0x60, 0x44, 0xC4, 0x85, - 0x01, 0x60, 0xFE, 0x61, 0x00, 0x64, 0x80, 0x63, 0xC7, 0x85, 0x94, 0x84, 0x59, 0xDB, 0xFC, 0x1F, - 0x00, 0x60, 0x88, 0x64, 0x3F, 0xFA, 0x00, 0xF4, 0x02, 0x64, 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, - 0x80, 0x7F, 0x10, 0x7E, 0x0C, 0xFA, 0x1A, 0x65, 0x80, 0x61, 0x02, 0x60, 0x00, 0x63, 0x0F, 0x4E, - 0xF8, 0x60, 0x58, 0x4F, 0x7A, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0xD7, 0x60, 0x80, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x23, 0xF0, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x00, 0xF4, 0x03, 0x03, 0xD7, 0x60, - 0x2A, 0x78, 0xFF, 0xFF, 0x09, 0xF2, 0xFF, 0xFF, 0xFF, 0xA0, 0x00, 0xA0, 0x0C, 0x03, 0x03, 0x03, - 0xD6, 0x60, 0xA7, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, 0x26, 0x46, 0xFF, 0xA0, 0x87, 0xF4, 0x10, 0x02, - 0xD7, 0x60, 0xAE, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, 0xFF, 0xFF, 0xFF, 0xA0, 0xFD, 0xA0, 0x02, 0x03, - 0x04, 0x03, 0x06, 0x00, 0xD6, 0x60, 0xE6, 0x78, 0xFF, 0xFF, 0xD6, 0x60, 0xF1, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, - 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, - 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, - 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x0B, 0x60, 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, - 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, - 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x17, 0x60, 0x04, 0x62, 0x65, 0x44, 0xA2, 0xDB, - 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0xD4, 0x60, 0xA4, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, - 0x81, 0xF8, 0x07, 0x1B, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, - 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, - 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, - 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x0B, 0x60, 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, - 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, - 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x17, 0x60, 0x04, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, - 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0xD4, 0x60, 0xAF, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x32, 0x44, - 0x08, 0xB0, 0x87, 0xF4, 0x03, 0x02, 0xD4, 0x60, 0xAF, 0x78, 0xFF, 0xFF, 0xD6, 0x60, 0x18, 0x78, - 0xFF, 0xFF, 0x32, 0x44, 0x26, 0x46, 0x08, 0xB0, 0x07, 0xF2, 0x03, 0x02, 0xD4, 0x60, 0xAF, 0x78, - 0xFF, 0xFF, 0x60, 0x46, 0x1F, 0xF2, 0x26, 0x46, 0xBA, 0x65, 0x60, 0x44, 0xC4, 0x85, 0x01, 0x60, - 0xFE, 0x61, 0x00, 0x64, 0x80, 0x63, 0xC7, 0x85, 0x94, 0x84, 0x59, 0xDB, 0xFC, 0x1F, 0x00, 0xF4, - 0x01, 0x60, 0xFE, 0x61, 0x7E, 0x65, 0x18, 0x63, 0x5B, 0xD2, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, - 0xD7, 0x80, 0x18, 0x02, 0xF9, 0x02, 0x00, 0xF4, 0x02, 0x63, 0x0E, 0x65, 0x5B, 0xD2, 0x59, 0xD1, - 0xFF, 0xFF, 0xD0, 0x80, 0xD7, 0x80, 0x0E, 0x02, 0xF9, 0x02, 0x26, 0x46, 0x07, 0xF4, 0x06, 0xF2, - 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x26, 0x46, 0x00, 0xF4, 0x04, 0x64, 0x0A, 0xFA, 0x00, 0x64, - 0x0B, 0xFA, 0x56, 0x00, 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, - 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, - 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, - 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x0B, 0x60, 0x82, 0xF3, - 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, - 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x17, 0x60, 0x04, 0x62, - 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0x00, 0xF4, 0x04, 0x64, - 0x0A, 0xFA, 0x0F, 0x64, 0x0B, 0xFA, 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x41, 0x58, 0x26, 0x46, - 0x2C, 0xF2, 0xA1, 0xDB, 0x2D, 0xF2, 0x59, 0xDB, 0x2E, 0xF2, 0x59, 0xDB, 0x03, 0x65, 0xE5, 0x60, - 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x03, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x51, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x87, 0xF3, 0x07, 0xFA, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0xF4, 0x0A, 0xF2, 0x09, 0xF2, 0xFF, 0xA0, 0x00, 0xA0, 0x06, 0x02, - 0xFF, 0xA0, 0x07, 0x03, 0x09, 0x03, 0xD6, 0x60, 0xA7, 0x78, 0xFF, 0xFF, 0xD6, 0x60, 0x68, 0x78, - 0xFF, 0xFF, 0xD7, 0x60, 0xB3, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x07, 0xF4, 0x06, 0xF2, 0x66, 0x43, - 0x00, 0x7E, 0x06, 0xFA, 0x26, 0x46, 0xD6, 0x60, 0x18, 0x78, 0xFF, 0xFF, 0x63, 0x46, 0x06, 0xF2, - 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x26, 0x46, 0x87, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x02, 0x64, - 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x01, 0x61, 0x00, 0x60, 0x10, 0x7C, 0x2A, 0xF2, 0x0C, 0x60, 0x70, 0xFB, - 0xFF, 0xB4, 0x16, 0x60, 0x83, 0xFB, 0x60, 0x40, 0x00, 0x36, 0x03, 0x00, 0x02, 0x61, 0x00, 0x60, - 0x30, 0x7C, 0x41, 0x47, 0x2A, 0xF8, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, - 0x2E, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, 0x66, 0xF3, - 0x32, 0xFA, 0x67, 0xF3, 0x33, 0xFA, 0x68, 0xF3, 0x34, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, 0x00, 0x7C, - 0x3E, 0xF8, 0x1C, 0xF0, 0x13, 0xF8, 0x07, 0xF2, 0x87, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, - 0x03, 0x02, 0xDC, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x40, 0x4B, 0x01, 0x65, 0xEF, 0x60, 0x58, 0x4E, - 0xDC, 0x78, 0xFF, 0xFF, 0xAB, 0x46, 0x06, 0xF2, 0xAB, 0x46, 0x00, 0xF4, 0x01, 0xB0, 0xFF, 0xFF, - 0x03, 0x02, 0xDC, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x09, 0xF2, 0x16, 0x60, 0x84, 0xFB, 0x5A, 0x84, - 0x00, 0x63, 0x60, 0x40, 0x20, 0x26, 0x02, 0xBB, 0x60, 0x40, 0x04, 0x27, 0x04, 0xBB, 0xAB, 0x46, - 0x78, 0xFC, 0xAB, 0x46, 0xFF, 0xFF, 0x10, 0xB0, 0x80, 0x60, 0x00, 0x63, 0x0C, 0x03, 0x13, 0x60, - 0x45, 0xF1, 0xFF, 0xFF, 0x64, 0x44, 0xFE, 0x26, 0x08, 0x00, 0x32, 0x40, 0x08, 0x26, 0x06, 0x00, - 0xDC, 0x60, 0xB9, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x10, 0x2A, 0x00, 0x63, 0xAB, 0x46, 0x06, 0xF0, - 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0x63, 0x45, 0xB4, 0x84, 0x06, 0xFA, 0xAB, 0x46, 0x0A, 0xF0, - 0x56, 0xF9, 0x24, 0xD9, 0x5A, 0x84, 0x01, 0x63, 0x32, 0x40, 0x10, 0x26, 0x10, 0xBB, 0x13, 0x60, - 0x45, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0xFE, 0x26, 0x10, 0xBB, 0x15, 0x60, 0xDD, 0xF1, 0x63, 0x44, - 0x20, 0xBC, 0xFB, 0x60, 0xFF, 0xB7, 0x64, 0x40, 0x10, 0x26, 0x04, 0xBC, 0x60, 0x47, 0x60, 0x43, - 0x09, 0xFC, 0x27, 0x44, 0xFE, 0xA0, 0xFF, 0xFF, 0x03, 0x03, 0xD8, 0x60, 0xC8, 0x78, 0xFF, 0xFF, - 0x18, 0x60, 0xD6, 0x64, 0x24, 0x43, 0x0B, 0xF0, 0xA0, 0xD9, 0xBD, 0xD9, 0x0C, 0xF0, 0x58, 0xD9, - 0xBD, 0xD9, 0x0D, 0xF0, 0x58, 0xD9, 0xBD, 0xD9, 0x43, 0x44, 0x26, 0x46, 0x87, 0xF2, 0x3F, 0xF2, - 0x41, 0x4B, 0x00, 0xF4, 0x60, 0x43, 0xF6, 0xA3, 0x00, 0x60, 0x1B, 0x61, 0x00, 0x60, 0x01, 0x65, - 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xEF, 0x60, 0x58, 0x4E, 0x79, 0x78, 0xFF, 0xFF, 0x00, 0xBB, - 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, 0x40, 0x4A, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, - 0xBD, 0xD3, 0x60, 0x41, 0xF0, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x20, 0xFE, 0x26, 0x46, - 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF6, 0xA3, 0x00, 0x60, 0x1B, 0x61, 0x00, 0x60, 0x32, 0x65, - 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xEF, 0x60, 0x58, 0x4E, 0x79, 0x78, 0xFF, 0xFF, 0x00, 0xBB, - 0xFF, 0xFF, 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, - 0xF0, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x00, 0x00, 0x20, 0xFE, 0x30, 0x60, 0x20, 0x61, - 0xA1, 0xD1, 0x82, 0xF3, 0x01, 0x60, 0x6E, 0x63, 0x60, 0x45, 0x2A, 0x44, 0x60, 0xFB, 0xA3, 0xD5, - 0x65, 0x40, 0x01, 0x27, 0x5B, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x59, 0xD1, 0x66, 0x41, 0xA0, 0x84, - 0x24, 0x94, 0x2B, 0x46, 0x0F, 0xFA, 0x61, 0xFB, 0x16, 0x64, 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, - 0x66, 0x5C, 0xC1, 0x60, 0x58, 0x4E, 0x93, 0x78, 0xFF, 0xFF, 0xD9, 0x60, 0x28, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x87, 0xF2, 0x3F, 0xF2, 0x41, 0x4B, 0x00, 0xF4, 0x60, 0x43, 0xFC, 0xA3, 0x00, 0x60, - 0x15, 0x61, 0x00, 0x60, 0x01, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xEF, 0x60, 0x58, 0x4E, - 0x79, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, 0x40, 0x4A, 0x60, 0xFE, - 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xF0, 0x60, 0x58, 0x4E, 0x27, 0x78, - 0xFF, 0xFF, 0x20, 0xFE, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xFC, 0xA3, 0x00, 0x60, - 0x15, 0x61, 0x00, 0x60, 0x32, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xEF, 0x60, 0x58, 0x4E, - 0x79, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, - 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xF0, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x00, 0x00, - 0x20, 0xFE, 0x30, 0x60, 0x20, 0x61, 0xA1, 0xD1, 0x82, 0xF3, 0x01, 0x60, 0x6E, 0x63, 0x60, 0x45, - 0x2A, 0x44, 0x60, 0xFB, 0xA3, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x5B, 0xD5, 0x65, 0x40, 0x01, 0x27, - 0x59, 0xD1, 0x66, 0x41, 0xA0, 0x84, 0x24, 0x94, 0x2B, 0x46, 0x0F, 0xFA, 0x61, 0xFB, 0x16, 0x64, - 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, 0x66, 0x5C, 0xC1, 0x60, 0x58, 0x4E, 0x93, 0x78, 0xFF, 0xFF, - 0x2B, 0x46, 0x0F, 0xF2, 0x12, 0x63, 0x7C, 0x18, 0x26, 0x46, 0x87, 0xF2, 0x01, 0x65, 0x41, 0x4B, - 0xAB, 0x46, 0x0F, 0xF2, 0xFF, 0xFF, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xFF, 0x22, - 0x00, 0x65, 0x78, 0xF2, 0xFF, 0xFF, 0xB4, 0x84, 0x78, 0xFA, 0xAB, 0x46, 0xFF, 0xFF, 0x26, 0x46, - 0x3F, 0xF2, 0x00, 0xF4, 0x16, 0x65, 0x27, 0x40, 0x02, 0x3A, 0x03, 0x00, 0x1C, 0x65, 0xF6, 0xA4, - 0x01, 0x00, 0xFC, 0xA4, 0x24, 0x43, 0x2D, 0x60, 0x5E, 0x61, 0x5D, 0x91, 0x51, 0x90, 0xFF, 0xFF, - 0x04, 0x28, 0x60, 0x41, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, - 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, - 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x2D, 0x60, 0x04, 0x7C, 0x03, 0x1E, 0x60, 0xFE, - 0xBD, 0xDF, 0x20, 0xFE, 0x2D, 0x60, 0x08, 0x64, 0x53, 0x93, 0xA4, 0xDD, 0x26, 0x46, 0x00, 0xF4, - 0x13, 0x60, 0x44, 0xF3, 0x00, 0x63, 0x00, 0xB8, 0x0A, 0xFC, 0x03, 0x02, 0xD9, 0x60, 0xCF, 0x78, - 0xFF, 0xFF, 0x0B, 0xF2, 0x27, 0x40, 0x02, 0x3A, 0x02, 0x00, 0x0E, 0xF2, 0xFF, 0xFF, 0x60, 0x47, - 0x00, 0x3A, 0x25, 0x00, 0x60, 0x41, 0x00, 0x36, 0x22, 0x00, 0xE0, 0xA0, 0xDA, 0x85, 0x1F, 0x07, - 0x13, 0x60, 0x0B, 0xF1, 0x65, 0x42, 0xD1, 0x80, 0x26, 0x60, 0x18, 0x63, 0x18, 0x02, 0x50, 0xFE, - 0x61, 0x40, 0xFE, 0x22, 0x08, 0x00, 0x62, 0x45, 0xBD, 0xD3, 0xA5, 0xD0, 0xDA, 0x82, 0xD0, 0x80, - 0xC9, 0x81, 0xF6, 0x0C, 0x0C, 0x00, 0x61, 0x40, 0x00, 0x36, 0x31, 0x00, 0x62, 0x45, 0xA3, 0xD3, - 0xA5, 0xD0, 0xFF, 0xFF, 0x90, 0x80, 0xFF, 0x26, 0x02, 0x00, 0xDE, 0x82, 0x28, 0x00, 0x0C, 0x63, - 0x0A, 0xFC, 0x00, 0x64, 0x09, 0xFA, 0x0B, 0xFA, 0x01, 0x7E, 0x0C, 0xFA, 0x26, 0x46, 0x08, 0x64, - 0x3F, 0xFA, 0x07, 0xF2, 0x87, 0xF1, 0x40, 0x58, 0x07, 0xF8, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, - 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0xDC, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0x20, 0xFE, 0x16, 0x60, 0x50, 0xF3, 0xFF, 0xFF, 0x22, 0xB0, - 0xFF, 0xFF, 0x03, 0x03, 0xDB, 0x60, 0xB1, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0xD9, 0x01, 0x13, 0x60, - 0x45, 0xF3, 0xFF, 0xFF, 0xFF, 0xA4, 0xFF, 0xFF, 0x0C, 0x20, 0x03, 0x00, 0xDB, 0x60, 0xB1, 0x78, - 0xFF, 0xFF, 0x00, 0x64, 0x16, 0x60, 0x56, 0xFB, 0x16, 0x60, 0x57, 0xFB, 0x16, 0x60, 0x58, 0xFB, - 0x16, 0x60, 0x5A, 0xFB, 0x16, 0x60, 0x5B, 0xFB, 0x16, 0x60, 0x5C, 0xFB, 0x16, 0x60, 0x5D, 0xFB, - 0x18, 0x60, 0x17, 0xFB, 0x2B, 0x46, 0x3B, 0xF2, 0x7F, 0x60, 0xCF, 0x65, 0xA4, 0x84, 0xA2, 0xDA, - 0x26, 0x46, 0x00, 0xF4, 0x0B, 0xF2, 0x27, 0x40, 0x02, 0x3A, 0x02, 0x00, 0x0E, 0xF2, 0xFF, 0xFF, - 0xCE, 0x81, 0x20, 0xFE, 0x30, 0x60, 0x28, 0x64, 0x40, 0x4A, 0xDA, 0x60, 0x58, 0x4D, 0x62, 0x78, - 0xFF, 0xFF, 0x20, 0xFE, 0x18, 0x60, 0x17, 0xF3, 0xFF, 0xFF, 0x08, 0x18, 0x18, 0x60, 0x19, 0xF3, - 0x18, 0x60, 0x1A, 0xF5, 0x60, 0x41, 0x30, 0x60, 0x2E, 0x62, 0xA2, 0xDF, 0x2A, 0xD1, 0xDA, 0x85, - 0x64, 0x44, 0x01, 0xA0, 0xFF, 0xFF, 0x01, 0x02, 0x75, 0x00, 0x45, 0x4A, 0x7C, 0x44, 0x60, 0xFE, - 0xA1, 0xD2, 0xFF, 0xFF, 0xD0, 0x80, 0x20, 0xFE, 0x01, 0x03, 0xE3, 0x01, 0x30, 0x60, 0x2E, 0x62, - 0xA2, 0xDF, 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0x60, 0x5C, 0x41, 0x94, 0x81, 0xA0, 0x20, 0xFE, - 0x2D, 0x04, 0x01, 0x64, 0x18, 0x60, 0x17, 0xFB, 0xC1, 0x84, 0x84, 0xA4, 0x18, 0x60, 0x19, 0xFB, - 0x00, 0xF2, 0x18, 0x60, 0x1A, 0xFB, 0x18, 0x60, 0x18, 0xFD, 0x02, 0x60, 0x00, 0x63, 0xCD, 0x85, - 0x64, 0x44, 0xD8, 0x81, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, - 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, - 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x00, 0x60, 0x01, 0x61, 0x02, 0x60, 0x00, 0x64, - 0xE0, 0x87, 0x60, 0x46, 0x18, 0x60, 0x18, 0xF3, 0xFF, 0xFF, 0x60, 0x43, 0x60, 0xFE, 0xCD, 0x81, - 0x20, 0xFE, 0x2A, 0x44, 0x00, 0x60, 0x02, 0x65, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x60, - 0x5C, 0x78, 0xFF, 0xFF, 0x18, 0x60, 0x17, 0xF3, 0xFF, 0xFF, 0x08, 0x18, 0x18, 0x60, 0x19, 0xF3, - 0x18, 0x60, 0x1A, 0xF5, 0x60, 0x41, 0x30, 0x60, 0x2E, 0x62, 0xA2, 0xDF, 0x66, 0x5C, 0x26, 0x46, - 0x00, 0xF2, 0x64, 0x46, 0x58, 0x90, 0xFF, 0xFF, 0x03, 0x02, 0x61, 0x44, 0x0B, 0xA5, 0x04, 0x00, - 0x61, 0x44, 0xFC, 0xA4, 0x8B, 0x7C, 0xC0, 0x85, 0xDD, 0x81, 0x66, 0x44, 0x18, 0x60, 0x1A, 0xFB, - 0x26, 0x46, 0x1B, 0xF0, 0x18, 0x60, 0x1A, 0xF5, 0x64, 0x44, 0xD4, 0x80, 0xFF, 0xFF, 0xD7, 0x06, - 0x2D, 0x58, 0xFF, 0xFF, 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0x20, 0xFE, 0xFF, 0xB4, 0x41, 0x94, - 0x81, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0x00, 0xF4, 0x84, 0xA4, 0x60, 0x41, 0x62, 0x01, 0x60, 0xFE, - 0x5D, 0xD2, 0xFF, 0xFF, 0xFA, 0xA4, 0xFF, 0xFF, 0x04, 0x20, 0x02, 0x00, 0xFF, 0xA1, 0x61, 0x01, - 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x36, 0x02, 0x00, 0xC9, 0x81, 0x5A, 0x01, 0x5D, 0xD0, - 0xFF, 0xFF, 0x64, 0x40, 0x50, 0x36, 0x02, 0x00, 0xFD, 0xA1, 0x53, 0x01, 0x5D, 0xD0, 0xFF, 0xFF, - 0x64, 0x40, 0xF2, 0x36, 0x04, 0x00, 0xFC, 0xA1, 0xDA, 0x60, 0x01, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, - 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x04, 0x00, 0xFB, 0xA1, 0xDA, 0x60, 0x01, 0x78, 0xFF, 0xFF, - 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x04, 0x00, 0xFA, 0xA1, 0xDA, 0x60, 0x01, 0x78, - 0xFF, 0xFF, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x36, 0x04, 0x00, 0xF9, 0xA1, 0xDA, 0x60, - 0x01, 0x78, 0xFF, 0xFF, 0x60, 0x5C, 0x00, 0x36, 0x2A, 0x00, 0x00, 0x64, 0xDB, 0x60, 0x58, 0x4E, - 0x16, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0x5A, 0xFB, 0x64, 0x40, 0x00, 0x36, 0x25, 0x00, 0x5D, 0xD2, - 0xDD, 0x81, 0xDB, 0x60, 0x58, 0x4E, 0x16, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0x5B, 0xFB, 0x64, 0x40, - 0x00, 0x36, 0x1F, 0x00, 0x5D, 0xD2, 0xDD, 0x81, 0xDB, 0x60, 0x58, 0x4E, 0x16, 0x78, 0xFF, 0xFF, - 0x16, 0x60, 0x5C, 0xFB, 0x64, 0x40, 0x00, 0x36, 0x19, 0x00, 0x5D, 0xD0, 0x16, 0x60, 0x5D, 0xF9, - 0x5D, 0xD0, 0x2C, 0x60, 0xBB, 0x62, 0xA2, 0xD9, 0xD9, 0x60, 0xF9, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x00, 0x60, 0x04, 0x64, 0x16, 0x60, 0x5A, 0xFB, 0x20, 0xFE, 0x00, 0x60, 0x04, 0x64, 0x16, 0x60, - 0x5B, 0xFB, 0x20, 0xFE, 0x00, 0x60, 0x02, 0x64, 0x16, 0x60, 0x5C, 0xFB, 0x20, 0xFE, 0x00, 0x60, - 0x00, 0x64, 0x16, 0x60, 0x5D, 0xFB, 0xD9, 0x60, 0xF9, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0x5E, 0xFB, - 0xE0, 0x84, 0xE0, 0x84, 0x03, 0x02, 0x01, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x02, 0xA5, 0x64, 0x44, - 0xD4, 0x9C, 0x16, 0x60, 0x5F, 0xF9, 0x2C, 0x60, 0xC0, 0x62, 0xA2, 0xDF, 0x5D, 0xD0, 0x00, 0x65, - 0x64, 0x40, 0x00, 0x3A, 0x01, 0x65, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x50, 0x3A, 0x01, 0x65, - 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0xF2, 0x3A, 0x01, 0x65, 0x5D, 0xD0, 0x65, 0x40, 0x00, 0x3A, - 0x17, 0x00, 0x00, 0x60, 0x00, 0x65, 0x64, 0x40, 0x00, 0x36, 0x01, 0x65, 0x64, 0x40, 0x01, 0x36, - 0x02, 0x65, 0x64, 0x40, 0x02, 0x36, 0x04, 0x65, 0x64, 0x40, 0x04, 0x36, 0x10, 0x65, 0x64, 0x40, - 0x05, 0x36, 0x20, 0x65, 0x65, 0x5C, 0x16, 0x60, 0x60, 0xF3, 0xFF, 0xFF, 0xB0, 0x84, 0xA2, 0xDB, - 0x16, 0x60, 0x5E, 0xF3, 0xFF, 0xFF, 0xFF, 0xA4, 0xA2, 0xDB, 0xD0, 0x02, 0x16, 0x60, 0x60, 0xF3, - 0x16, 0x60, 0x5F, 0xF1, 0x2E, 0x58, 0xFF, 0xFF, 0x20, 0xFE, 0x16, 0x60, 0x50, 0xF1, 0x16, 0x60, - 0x5A, 0xF3, 0xFF, 0xFF, 0xA0, 0x84, 0xFF, 0xFF, 0x10, 0x26, 0x09, 0x00, 0x04, 0x26, 0x09, 0x00, - 0x20, 0x26, 0x09, 0x00, 0x02, 0x26, 0x09, 0x00, 0xD9, 0x60, 0xC3, 0x78, 0xFF, 0xFF, 0x10, 0x7C, - 0x05, 0x00, 0x04, 0x7C, 0x03, 0x00, 0x20, 0x7C, 0x01, 0x00, 0x02, 0x7C, 0x16, 0x60, 0x56, 0xF9, - 0x16, 0x60, 0x51, 0xF1, 0x16, 0x60, 0x5B, 0xF3, 0x2C, 0x60, 0xAC, 0x62, 0xA0, 0x84, 0xA2, 0xD1, - 0xFF, 0xFF, 0x10, 0x26, 0x07, 0x00, 0x04, 0x26, 0x07, 0x00, 0x01, 0x26, 0x0D, 0x00, 0xD9, 0x60, - 0xC3, 0x78, 0xFF, 0xFF, 0x10, 0x7C, 0x09, 0x00, 0x64, 0x40, 0x10, 0x22, 0x03, 0x00, 0xD9, 0x60, - 0xC3, 0x78, 0xFF, 0xFF, 0x04, 0x7C, 0x01, 0x00, 0x01, 0x7C, 0x16, 0x60, 0x57, 0xF9, 0x16, 0x60, - 0x52, 0xF1, 0x16, 0x60, 0x5C, 0xF3, 0xFF, 0xFF, 0xA0, 0x84, 0x02, 0x26, 0x07, 0x00, 0x04, 0x26, - 0x07, 0x00, 0x01, 0x26, 0x07, 0x00, 0xD9, 0x60, 0xC3, 0x78, 0xFF, 0xFF, 0x02, 0x7C, 0x03, 0x00, - 0x04, 0x7C, 0x01, 0x00, 0x20, 0x7C, 0x16, 0x60, 0x58, 0xF9, 0x16, 0x60, 0x5D, 0xF1, 0x16, 0x60, - 0x59, 0xF9, 0x16, 0x60, 0x58, 0xF3, 0x16, 0x60, 0x57, 0xF1, 0x60, 0x47, 0xB0, 0x84, 0x13, 0x60, - 0x45, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x22, 0xBC, 0xAB, 0x46, 0x3A, 0xFA, 0xAB, 0x46, - 0x16, 0x60, 0x56, 0xF3, 0x13, 0x60, 0x45, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x22, 0xBC, - 0x87, 0xF1, 0x66, 0x41, 0x64, 0x46, 0x3A, 0xFA, 0xFF, 0xFF, 0x61, 0x46, 0xAB, 0x46, 0x82, 0xF0, - 0xC0, 0x67, 0xB4, 0x84, 0xAB, 0x46, 0x0B, 0xFA, 0x13, 0x60, 0x4D, 0xF1, 0x2D, 0x60, 0xBE, 0x7C, - 0x04, 0x1B, 0xFF, 0x60, 0xFF, 0x63, 0xA4, 0xDD, 0x26, 0x00, 0x2E, 0x60, 0x34, 0x63, 0xA4, 0xDD, - 0xDB, 0x83, 0x60, 0xFE, 0x00, 0x64, 0xBD, 0xDB, 0x60, 0x64, 0xBD, 0xDB, 0x1D, 0x64, 0xBD, 0xDB, - 0xC3, 0xF3, 0xBD, 0xDB, 0x20, 0xFE, 0x01, 0x60, 0x78, 0x64, 0x06, 0x61, 0x58, 0xD1, 0xFF, 0xFF, - 0x60, 0xFE, 0xBD, 0xD9, 0x20, 0xFE, 0xCD, 0x81, 0x61, 0x40, 0x08, 0x28, 0xF7, 0x01, 0xB6, 0xF1, - 0xFF, 0xFF, 0x64, 0x47, 0x60, 0xFE, 0xBD, 0xD9, 0xBD, 0xDB, 0x20, 0xFE, 0x13, 0x60, 0x4B, 0xF1, - 0x60, 0xFE, 0xBD, 0xD9, 0x20, 0xFE, 0x2D, 0x60, 0xBC, 0x64, 0x40, 0x48, 0x18, 0x61, 0x26, 0x46, - 0x00, 0xF4, 0xFF, 0x60, 0xF2, 0x64, 0xE4, 0x60, 0x58, 0x4D, 0xA7, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x3F, 0xFC, 0x2B, 0x46, 0x56, 0xF1, 0x1F, 0xF8, 0x0C, 0x60, 0x70, 0xF1, 0x10, 0x60, 0x00, 0x64, - 0xA0, 0x80, 0x06, 0xF2, 0x0B, 0x03, 0x10, 0xBC, 0x06, 0xFA, 0x86, 0xF3, 0x00, 0x60, 0x70, 0xF3, - 0x60, 0x45, 0xD4, 0x80, 0xDC, 0x84, 0x07, 0x07, 0xA2, 0xDB, 0x05, 0x00, 0x10, 0xB5, 0xFF, 0xFF, - 0x02, 0x03, 0xD4, 0x84, 0x06, 0xFA, 0x07, 0xF2, 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, - 0x02, 0xB0, 0xFF, 0xFF, 0x11, 0x03, 0x26, 0x46, 0x87, 0xF3, 0x07, 0xFA, 0x1E, 0x60, 0xD4, 0x64, - 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x50, 0x00, 0x26, 0x46, 0x87, 0xF3, 0x07, 0xFA, 0x1E, 0x60, - 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x19, 0x00, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, - 0x02, 0x64, 0x3F, 0xFA, 0x87, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x09, 0x64, 0x09, 0xFA, 0x1E, 0x60, - 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x2B, 0x43, 0x0B, 0x60, - 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, 0xD9, 0x81, - 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, 0x17, 0x60, - 0x04, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, 0xAB, 0x46, - 0x06, 0xF2, 0xFF, 0xFF, 0x02, 0xBC, 0x06, 0xFA, 0x78, 0xF2, 0x15, 0x60, 0xDC, 0xF3, 0x60, 0x45, - 0xA4, 0x84, 0x15, 0x60, 0xDC, 0xFB, 0xAB, 0x46, 0xAB, 0x46, 0x0F, 0x60, 0xFF, 0x64, 0x02, 0xF0, - 0x71, 0xF1, 0xA0, 0x84, 0xD0, 0x80, 0x02, 0xFA, 0xAB, 0x46, 0x01, 0x06, 0x71, 0xFB, 0x27, 0x41, - 0x01, 0xB1, 0xFF, 0xFF, 0x08, 0x03, 0x2B, 0x46, 0x0B, 0x58, 0x01, 0x65, 0xE5, 0x60, 0x58, 0x4E, - 0x51, 0x78, 0xFF, 0xFF, 0x0A, 0x00, 0x2B, 0x46, 0x0B, 0x58, 0x18, 0x60, 0xD6, 0x64, 0x40, 0x59, - 0x02, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x51, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x00, 0x64, 0x09, 0xFA, 0x0B, 0xFA, 0x01, 0x7E, 0x0C, 0xFA, - 0x0A, 0x64, 0x0A, 0xFA, 0x26, 0x46, 0x08, 0x64, 0x3F, 0xFA, 0x07, 0xF2, 0x87, 0xF1, 0x40, 0x58, - 0x07, 0xF8, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xFF, 0x60, 0xFD, 0x65, 0x38, 0x46, 0x06, 0xF2, - 0xFF, 0xFF, 0xA4, 0x83, 0x06, 0xFC, 0x02, 0xB0, 0x26, 0x46, 0x1C, 0x03, 0x38, 0x43, 0x86, 0xF1, - 0x17, 0x60, 0x02, 0x61, 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, 0x05, 0x05, 0xA1, 0xD3, - 0x4A, 0xD9, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x02, 0x60, 0x00, 0x61, 0x2C, 0xF2, 0xA1, 0xDB, - 0x2D, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x2E, 0xF2, 0x59, 0xDB, 0x03, 0x65, 0xE5, 0x60, 0x58, 0x4E, - 0x51, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF2, 0x87, 0xF1, - 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x40, 0x47, 0x07, 0xF2, - 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, 0x1A, 0x02, 0x27, 0x43, - 0x0B, 0x60, 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x11, 0x03, 0xD3, 0x80, - 0xD9, 0x81, 0xFA, 0x02, 0xC9, 0x81, 0xC8, 0x85, 0xD5, 0x80, 0xA5, 0xD3, 0x08, 0x28, 0xA1, 0xDB, - 0x17, 0x60, 0x04, 0x62, 0x65, 0x44, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA2, 0xDB, - 0x0C, 0x00, 0x27, 0x44, 0x40, 0x58, 0x03, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x51, 0x78, 0xFF, 0xFF, - 0x27, 0x43, 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x87, 0xF4, 0x66, 0x41, - 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, - 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, - 0x00, 0xF8, 0x87, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, - 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, - 0x61, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF2, 0x87, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, - 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x40, 0x47, 0x07, 0xF2, 0x66, 0x45, 0x60, 0x46, 0x06, 0xF2, - 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0x46, 0x06, 0xF0, - 0xFF, 0x60, 0xED, 0x64, 0xA0, 0x84, 0x06, 0xFA, 0x27, 0x43, 0x86, 0xF1, 0x17, 0x60, 0x02, 0x61, - 0xA1, 0xD3, 0xDA, 0x81, 0xD0, 0x80, 0xDC, 0x9C, 0x05, 0x05, 0xA1, 0xD3, 0x4A, 0xD9, 0xA0, 0xDD, - 0xDA, 0x9C, 0xA1, 0xD9, 0x07, 0x58, 0x03, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x51, 0x78, 0xFF, 0xFF, - 0x27, 0x43, 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x26, 0x46, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF3, - 0x2F, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, 0x66, 0xF3, 0x32, 0xFA, 0x67, 0xF3, - 0x33, 0xFA, 0x68, 0xF3, 0x34, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, 0x00, 0x65, 0xEF, 0x60, 0x58, 0x4E, - 0xDC, 0x78, 0xFF, 0xFF, 0x61, 0x44, 0x15, 0x60, 0xC2, 0xFB, 0x02, 0x63, 0x3F, 0xFC, 0x00, 0x64, - 0x3E, 0xFA, 0x02, 0x60, 0x00, 0x61, 0x2C, 0xF2, 0xA1, 0xDB, 0x2D, 0xF2, 0x41, 0x58, 0x59, 0xDB, - 0x2E, 0xF2, 0x59, 0xDB, 0x06, 0x63, 0x07, 0xF2, 0x87, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, - 0x0D, 0x02, 0x43, 0x59, 0x02, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0xC0, 0x64, 0x2A, 0xFA, 0x00, 0xF4, 0x06, 0x64, 0x09, 0xFA, 0x15, 0x00, 0x07, 0xF2, 0x66, 0x45, - 0x60, 0x46, 0x06, 0xF2, 0x65, 0x46, 0x02, 0xB0, 0xFF, 0xFF, 0x1D, 0x02, 0x07, 0x63, 0x43, 0x59, - 0x01, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0xA0, 0x64, 0x2A, 0xFA, - 0x00, 0xF4, 0x07, 0x64, 0x09, 0xFA, 0x26, 0x46, 0x87, 0xF3, 0x07, 0xFA, 0x1E, 0x60, 0xD4, 0x64, - 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xDE, 0x60, 0x66, 0x64, 0x08, 0x60, - 0x29, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0x03, 0x64, 0x08, 0x60, 0x1F, 0xFB, 0xDE, 0x60, - 0x05, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, - 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x59, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x71, 0xF3, 0x87, 0xF5, - 0xDC, 0x81, 0x66, 0x43, 0x02, 0xA3, 0x63, 0x46, 0xCD, 0x81, 0x06, 0xF2, 0xEE, 0x03, 0x60, 0x40, - 0x08, 0x2A, 0xF7, 0x01, 0x0C, 0xAC, 0x06, 0xFA, 0x46, 0x49, 0x00, 0x60, 0x02, 0x61, 0xB5, 0x60, - 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, 0xE1, 0x03, 0x18, 0x60, 0x13, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, - 0x00, 0x60, 0xA0, 0x64, 0x02, 0x00, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, 0xAB, 0xFC, 0x66, 0x45, - 0x29, 0x44, 0x07, 0xFA, 0x29, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF2, 0x65, 0x46, 0x2C, 0xFA, - 0x2D, 0xF8, 0xAE, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0x32, 0xFA, 0xCC, 0xF3, 0x30, 0xFA, 0x33, 0xFA, - 0xCD, 0xF3, 0x31, 0xFA, 0x34, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, 0x18, 0x67, 0x0E, 0xFA, 0x66, 0x41, - 0x29, 0x46, 0x92, 0xF0, 0x2C, 0x60, 0x26, 0x63, 0x47, 0xD3, 0x61, 0x46, 0x00, 0x7E, 0x13, 0xFA, - 0x02, 0x63, 0x3F, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0x66, 0x41, 0x00, 0xF4, 0x18, 0x60, 0x12, 0xF3, - 0x09, 0xFA, 0x1E, 0x60, 0xE0, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x61, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0xA0, 0x01, 0x95, 0x01, 0x00, 0x64, 0x08, 0x60, - 0x1E, 0xFB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x64, 0x43, 0x0B, 0x60, - 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, 0x04, 0x03, 0xD3, 0x80, 0xD9, 0x81, - 0xFA, 0x02, 0x08, 0x00, 0xA1, 0xDD, 0xD9, 0x84, 0x0B, 0x60, 0x82, 0xFB, 0x4A, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xA2, 0xDB, 0x66, 0x45, 0x63, 0x46, 0x06, 0xF2, 0xFF, 0x60, 0x01, 0x7C, 0xA0, 0x9C, - 0x06, 0xF8, 0x65, 0x46, 0x70, 0xF3, 0x60, 0x40, 0x10, 0x2A, 0x03, 0x00, 0xCC, 0x84, 0x80, 0x2B, - 0x70, 0xFB, 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x30, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x02, 0x64, - 0x08, 0x60, 0x19, 0xFB, 0xDE, 0x60, 0xA8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x70, 0xF3, 0x71, 0xF3, 0x00, 0xA8, 0x60, 0x88, 0x43, 0x03, 0xE0, 0x83, 0x5F, 0x03, 0xCB, 0x83, - 0x87, 0xF3, 0x72, 0xF1, 0x02, 0xA4, 0x40, 0x47, 0x64, 0x45, 0x27, 0x46, 0x76, 0xF4, 0x12, 0xF2, - 0x33, 0x18, 0xD4, 0x80, 0x02, 0x64, 0x30, 0x07, 0x23, 0xFA, 0x2A, 0xF2, 0x0E, 0xF2, 0x0C, 0xB0, - 0x02, 0xF0, 0x0C, 0x02, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xE7, 0x01, 0x60, 0x40, 0xF0, 0x37, - 0x08, 0x00, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x8F, 0xF3, 0x02, 0x02, 0xDC, 0x84, - 0x8F, 0xFB, 0x1E, 0x60, 0xF2, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA3, 0xFF, 0xCE, 0xFE, 0x25, 0x60, 0xE4, 0x64, 0xE5, 0x60, - 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, 0xC9, 0x01, 0x27, 0x44, 0x02, 0xA4, 0x40, 0x47, 0xC5, 0x1F, - 0x28, 0x43, 0xCB, 0x83, 0x87, 0xF3, 0x1A, 0x0E, 0x02, 0xA4, 0x40, 0x4C, 0x43, 0x48, 0x2C, 0x46, - 0x22, 0xF2, 0x72, 0xF1, 0xAC, 0x86, 0x12, 0xF2, 0x0C, 0x03, 0xD0, 0x80, 0xFF, 0xFF, 0x09, 0x07, - 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0x2C, 0x46, - 0xA2, 0xFC, 0x2C, 0x44, 0x02, 0xA4, 0x28, 0x43, 0x40, 0x4C, 0xE8, 0x1F, 0x8B, 0x01, 0x01, 0x63, - 0x65, 0xF3, 0xAB, 0xF3, 0x00, 0xBD, 0xAC, 0x81, 0x06, 0x03, 0x05, 0x03, 0xB7, 0x60, 0x58, 0x4D, - 0xC0, 0x78, 0xFF, 0xFF, 0x60, 0x43, 0x5B, 0xFD, 0x3E, 0x63, 0x18, 0x60, 0x94, 0x61, 0x00, 0x64, - 0x59, 0xDB, 0xFE, 0x1F, 0x70, 0xFB, 0x71, 0xFB, 0x18, 0x60, 0xDC, 0x65, 0xA5, 0xDF, 0x5A, 0xDF, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0x70, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x02, - 0xCA, 0x60, 0x7E, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x45, 0x64, 0x46, 0x1F, 0xF2, 0x65, 0x46, - 0x64, 0x45, 0x5B, 0xF1, 0xE0, 0x84, 0x72, 0xF1, 0xC0, 0x84, 0xC0, 0x84, 0x12, 0xFA, 0x2C, 0xF2, - 0x70, 0xF3, 0x60, 0x40, 0x01, 0x2A, 0x34, 0x00, 0x00, 0xA8, 0x13, 0x60, 0x43, 0xF3, 0x36, 0x03, - 0x00, 0xA8, 0xFF, 0xFF, 0x33, 0x03, 0xE1, 0x60, 0x58, 0x4D, 0x04, 0x78, 0xFF, 0xFF, 0x25, 0x46, - 0x09, 0x60, 0x08, 0x61, 0xA2, 0xFF, 0x0E, 0xF2, 0x02, 0xF0, 0x60, 0x40, 0xF0, 0x37, 0x0D, 0x00, - 0x91, 0xF3, 0x8F, 0xF3, 0xDC, 0x83, 0xD1, 0x80, 0x91, 0xFD, 0x0C, 0x03, 0x8B, 0xF3, 0xCC, 0x83, - 0xD8, 0xA0, 0x8F, 0xFD, 0x07, 0x04, 0xD4, 0xFE, 0x05, 0x00, 0xD1, 0x80, 0x92, 0xF3, 0x02, 0x03, - 0xDC, 0x84, 0x92, 0xFB, 0x1E, 0x60, 0xDA, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x25, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA3, 0xFF, 0xDF, 0x60, 0x2A, 0x78, 0xFF, 0xFF, - 0x66, 0x41, 0x65, 0x46, 0x06, 0xF2, 0x61, 0x46, 0x60, 0x40, 0x10, 0x2A, 0x4B, 0x00, 0x80, 0x67, - 0xB4, 0x81, 0x61, 0x44, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xE1, 0x60, 0x58, 0x4D, 0x04, 0x78, 0xFF, 0xFF, 0x25, 0x46, 0x2A, 0xF2, - 0x09, 0x60, 0x08, 0x61, 0x0C, 0xB0, 0xA2, 0xFF, 0x17, 0x03, 0x0E, 0xF2, 0x02, 0xF0, 0x60, 0x40, - 0xF0, 0x37, 0x0D, 0x00, 0x8F, 0xF3, 0x91, 0xF3, 0xCC, 0x83, 0xD1, 0x80, 0x8F, 0xFD, 0x0C, 0x03, - 0x8B, 0xF3, 0xDC, 0x83, 0xD8, 0xA0, 0x91, 0xFD, 0x07, 0x04, 0xD4, 0xFE, 0x05, 0x00, 0xD1, 0x80, - 0x92, 0xF3, 0x02, 0x03, 0xDC, 0x84, 0x92, 0xFB, 0x07, 0xF0, 0x0A, 0xF2, 0xA3, 0xFF, 0x64, 0x45, - 0x2F, 0x1B, 0x66, 0x41, 0x65, 0x46, 0x02, 0xF0, 0x61, 0x46, 0x0F, 0x60, 0xFF, 0x61, 0xA1, 0x84, - 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, - 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x18, 0x60, 0x96, 0x65, 0x46, 0xD1, 0x61, 0x44, 0xB0, 0x84, - 0xA2, 0xDB, 0x16, 0x00, 0x1E, 0x60, 0xD4, 0x61, 0x2A, 0xF2, 0x3E, 0xF2, 0x0C, 0xB0, 0x01, 0xB0, - 0x05, 0x03, 0x1E, 0x60, 0xE6, 0x61, 0x02, 0x02, 0x1E, 0x60, 0xCE, 0x61, 0x61, 0x44, 0x0F, 0x60, - 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0xDF, 0x60, 0x2A, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x2B, 0xF2, 0x2A, 0xF2, 0x60, 0x41, 0x44, 0x49, - 0x60, 0x45, 0xA4, 0x3A, 0x0D, 0x00, 0x61, 0x40, 0xC0, 0x3B, 0x79, 0x00, 0xA9, 0x46, 0x06, 0xF2, - 0xA9, 0x46, 0x60, 0x40, 0x20, 0x26, 0x73, 0x00, 0x20, 0xBC, 0xA9, 0x46, 0x06, 0xFA, 0xA9, 0x46, - 0xA9, 0x46, 0x06, 0xF0, 0xA9, 0x46, 0x65, 0x40, 0x10, 0x2B, 0x6C, 0x00, 0x64, 0x40, 0x10, 0x2A, - 0x35, 0x00, 0x65, 0x40, 0xA4, 0x3A, 0x63, 0x00, 0x29, 0x45, 0x65, 0x46, 0x76, 0xF2, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x04, 0x02, 0x76, 0x00, 0xE0, 0x60, 0xEA, 0x78, 0xFF, 0xFF, 0x09, 0xF2, - 0x2A, 0xF0, 0x00, 0xA8, 0x20, 0x67, 0x02, 0x03, 0xB0, 0x84, 0x2A, 0xFA, 0x0E, 0xF2, 0x02, 0xF0, - 0x60, 0x40, 0xF0, 0x37, 0x08, 0x00, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x8F, 0xF3, - 0x02, 0x02, 0xDC, 0x84, 0x8F, 0xFB, 0x3E, 0xF2, 0xA3, 0xFF, 0x01, 0xB0, 0x1E, 0x60, 0xE6, 0x61, - 0x02, 0x02, 0x1E, 0x60, 0xD4, 0x61, 0x61, 0x44, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x16, 0x00, 0x10, 0x64, 0xB0, 0x84, - 0xDF, 0x65, 0xA4, 0x9E, 0xA9, 0x46, 0x06, 0xFA, 0xA9, 0x46, 0xA2, 0xFF, 0x04, 0x64, 0x0C, 0x60, - 0x6E, 0xFB, 0x29, 0x44, 0x5A, 0xDB, 0x70, 0xF3, 0xC1, 0xFE, 0xD4, 0xFE, 0x86, 0xF1, 0xA3, 0xFF, - 0xD0, 0x80, 0xDC, 0x84, 0x01, 0x07, 0x70, 0xFB, 0xA9, 0x46, 0x76, 0xF2, 0xA9, 0x46, 0x64, 0x18, - 0xA9, 0x46, 0x02, 0xF0, 0xA9, 0x46, 0x0F, 0x60, 0xFF, 0x61, 0xA1, 0x84, 0x60, 0x41, 0xE9, 0x81, - 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, - 0xFD, 0x02, 0x18, 0x60, 0x96, 0x65, 0x46, 0xD1, 0xFF, 0xFF, 0xB1, 0x84, 0xA2, 0xDB, 0xE1, 0x60, - 0x01, 0x78, 0xFF, 0xFF, 0x64, 0x40, 0x10, 0x2A, 0xFA, 0x01, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, - 0xA9, 0x46, 0x06, 0xFA, 0xA9, 0x46, 0x65, 0x41, 0x70, 0xF3, 0x29, 0x45, 0xCC, 0x84, 0x80, 0x2B, - 0x70, 0xFB, 0x65, 0x46, 0x76, 0xF2, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x36, 0x02, 0x61, 0x40, - 0xA4, 0x3A, 0xE5, 0x01, 0x00, 0x60, 0x3A, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, 0xFF, 0xFF, - 0x83, 0x03, 0x02, 0x60, 0x48, 0x64, 0x2A, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, - 0xCD, 0xF1, 0x31, 0xF8, 0x66, 0xF1, 0x32, 0xF8, 0x67, 0xF1, 0x33, 0xF8, 0x68, 0xF1, 0x34, 0xF8, - 0xA9, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x85, 0xF0, 0xA9, 0x46, 0x2C, 0xFA, 0x2D, 0xF8, 0xAE, 0xF8, - 0xAB, 0xF1, 0x19, 0xF8, 0xFF, 0x67, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x29, 0x44, - 0x07, 0xFA, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x35, 0x00, 0x80, 0x67, 0xB4, 0x83, 0x2A, 0xF2, - 0x09, 0x60, 0x08, 0x65, 0x0C, 0xB0, 0x09, 0xF0, 0x0C, 0x02, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, - 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x9F, 0x18, - 0x64, 0x46, 0x3E, 0xF2, 0xA2, 0xFF, 0x01, 0xB0, 0x1E, 0x60, 0xE6, 0x61, 0x02, 0x02, 0x1E, 0x60, - 0xCE, 0x61, 0x02, 0xF2, 0x0E, 0xF0, 0xD4, 0x80, 0x09, 0xF4, 0x06, 0x02, 0x8F, 0xF3, 0x64, 0x40, - 0xF0, 0x37, 0x02, 0x00, 0xDC, 0x84, 0x8F, 0xFB, 0x66, 0x44, 0x00, 0xA8, 0xFF, 0xFF, 0xF1, 0x02, - 0x61, 0x44, 0x0F, 0x60, 0x90, 0xFB, 0x5A, 0xDD, 0x08, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0xA3, 0xFF, 0xA9, 0x46, 0x02, 0xF0, 0xA9, 0x46, 0x0F, 0x60, 0xFF, 0x61, 0xA1, 0x84, - 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, - 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x18, 0x60, 0x96, 0x65, 0x46, 0xD3, 0x9D, 0x85, 0xA4, 0x84, - 0xA2, 0xDB, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x46, 0x45, 0x3F, 0xF2, 0x05, 0x48, 0x00, 0xA8, - 0x60, 0x41, 0x66, 0x44, 0x0B, 0x03, 0x0E, 0xA1, 0x00, 0xF2, 0x42, 0xFE, 0xAC, 0x86, 0x01, 0xF2, - 0x1F, 0x03, 0x7F, 0xB5, 0xD5, 0x81, 0x66, 0x44, 0xF7, 0x07, 0x25, 0x46, 0x05, 0xF0, 0x06, 0xFA, - 0x05, 0xFA, 0xD0, 0x80, 0x64, 0x43, 0x13, 0x03, 0x60, 0x46, 0x01, 0xF0, 0x80, 0x67, 0xB0, 0x84, - 0x01, 0xFA, 0x00, 0xF0, 0x00, 0x64, 0x00, 0xFA, 0x44, 0x45, 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, - 0x72, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x08, 0x45, 0x25, 0x46, 0x01, 0x64, 0x02, 0xFA, 0x02, 0xFE, - 0x2D, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x07, 0xF0, 0x10, 0xB0, 0x10, 0xAC, 0x3A, 0x03, 0x23, 0xFA, - 0x80, 0x67, 0xB0, 0x81, 0x61, 0x44, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x04, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x46, 0x45, 0x64, 0x46, 0x02, 0xF0, 0x0F, 0x60, 0xFF, 0x61, - 0xA1, 0x84, 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE1, 0x82, 0x07, 0xB4, 0x01, 0x61, - 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x18, 0x60, 0x96, 0x65, 0x46, 0xD1, 0xFF, 0xFF, - 0xB1, 0x84, 0xA2, 0xDB, 0x9F, 0xF2, 0x25, 0x46, 0xE1, 0x81, 0x5B, 0xF1, 0x72, 0xF1, 0xC1, 0x81, - 0xC1, 0x81, 0x92, 0xFA, 0xA2, 0xFF, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x61, 0xD1, 0x80, 0x0E, 0xF2, - 0x05, 0x02, 0x8F, 0xF3, 0x20, 0xB0, 0xCC, 0x84, 0x01, 0x02, 0x8F, 0xFB, 0xA3, 0xFF, 0x48, 0xFE, - 0x07, 0x00, 0x0E, 0xF2, 0x08, 0xFE, 0xF0, 0x7F, 0x60, 0x40, 0x20, 0x2A, 0x00, 0x7F, 0x0E, 0xFA, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0xC5, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x57, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x80, 0x64, 0x2A, 0xFA, 0xAB, 0xF1, 0x19, 0xF8, - 0x00, 0x64, 0x3E, 0xFA, 0x00, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0x87, 0xF1, 0x07, 0xF8, 0x67, 0x44, - 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0xE4, 0x60, 0x65, 0x64, 0x08, 0x60, 0x25, 0xFB, 0xE2, 0x60, - 0xA0, 0x64, 0x08, 0x60, 0x2B, 0xFB, 0x18, 0x60, 0xE6, 0x63, 0x65, 0x44, 0xBD, 0xDB, 0x10, 0x60, - 0x58, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0xE9, 0x60, 0xB2, 0x78, - 0xFF, 0xFF, 0xE9, 0x60, 0x58, 0x4D, 0xBE, 0x78, 0xFF, 0xFF, 0x57, 0xF5, 0xCB, 0xF1, 0x2F, 0xF8, - 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x66, 0xF1, 0x32, 0xF8, 0x67, 0xF1, 0x33, 0xF8, - 0x68, 0xF1, 0x34, 0xF8, 0x13, 0x60, 0x45, 0xF1, 0x01, 0x64, 0x64, 0x40, 0xFE, 0x26, 0x10, 0xBC, - 0x32, 0x40, 0x10, 0x26, 0x10, 0xBC, 0x20, 0xBC, 0x04, 0x60, 0x00, 0x65, 0x60, 0x44, 0xB4, 0x84, - 0x17, 0x60, 0x22, 0xFB, 0x13, 0x60, 0x44, 0xF1, 0x26, 0x60, 0x16, 0x64, 0x02, 0x18, 0x26, 0x60, - 0x38, 0x64, 0x16, 0x60, 0xBF, 0xFB, 0x16, 0x60, 0xCF, 0xFB, 0x2C, 0x60, 0x84, 0x61, 0x13, 0x60, - 0x97, 0xF3, 0x2D, 0x60, 0x5E, 0x65, 0xFE, 0xA4, 0xE0, 0x84, 0x02, 0x05, 0x67, 0x44, 0x21, 0x00, - 0xE0, 0x84, 0xC4, 0x85, 0x16, 0x60, 0x55, 0xF3, 0xA5, 0xD1, 0xDA, 0x85, 0xA0, 0x83, 0x16, 0x60, - 0x51, 0xFD, 0xA5, 0xD1, 0x2C, 0x60, 0xA0, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0x2C, 0x60, 0x84, 0x61, - 0x50, 0x60, 0x00, 0x7C, 0x00, 0x60, 0xF2, 0x65, 0xE2, 0x60, 0x58, 0x4D, 0x06, 0x78, 0xFF, 0xFF, - 0x16, 0x60, 0x53, 0xF1, 0x59, 0xD9, 0x2C, 0x60, 0x7E, 0x65, 0xD5, 0x84, 0xDD, 0x7F, 0xA5, 0xDB, - 0x65, 0x44, 0x16, 0x60, 0xC4, 0xFB, 0x16, 0x60, 0xD4, 0xFB, 0x79, 0x00, 0x16, 0x60, 0x54, 0xF3, - 0x2C, 0x60, 0xA0, 0x62, 0xFD, 0xA0, 0xA2, 0xD3, 0xEE, 0x03, 0x60, 0x40, 0x02, 0x2A, 0x02, 0x00, - 0x01, 0x63, 0x0B, 0x00, 0x04, 0x2A, 0x02, 0x00, 0x02, 0x63, 0x07, 0x00, 0x10, 0x2A, 0x02, 0x00, - 0x04, 0x63, 0x03, 0x00, 0x20, 0x2A, 0x01, 0x00, 0x05, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, - 0x59, 0xDD, 0x16, 0x60, 0x54, 0xF3, 0x16, 0x60, 0x51, 0xF3, 0xFE, 0xA0, 0x40, 0x4C, 0xD3, 0x03, - 0x00, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x41, 0x4A, 0x2C, 0x40, 0x01, 0x2A, 0x05, 0x00, 0x00, 0x63, - 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x63, - 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x04, 0x2A, 0x05, 0x00, 0x02, 0x63, 0x63, 0x47, 0xB4, 0x83, - 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x10, 0x2A, 0x05, 0x00, 0x04, 0x63, 0x63, 0x47, 0xB4, 0x83, - 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x20, 0x2A, 0x05, 0x00, 0x05, 0x63, 0x63, 0x47, 0xB4, 0x83, - 0x59, 0xD9, 0x59, 0xDD, 0x2A, 0x44, 0x51, 0x93, 0xEB, 0x83, 0xEB, 0x83, 0xA0, 0xDD, 0x16, 0x60, - 0x54, 0xF3, 0x16, 0x60, 0x52, 0xF3, 0xFF, 0xA0, 0x40, 0x4C, 0x9D, 0x03, 0x59, 0xDF, 0x41, 0x4A, - 0x2C, 0x40, 0x01, 0x2A, 0x05, 0x00, 0x00, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, - 0x2C, 0x40, 0x02, 0x2A, 0x05, 0x00, 0x01, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, - 0x2C, 0x40, 0x04, 0x2A, 0x05, 0x00, 0x02, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, - 0x2A, 0x44, 0x51, 0x93, 0xEB, 0x83, 0xEB, 0x83, 0xA0, 0xDD, 0x2D, 0x58, 0xFF, 0xFF, 0x57, 0xF5, - 0xCB, 0xF3, 0xCC, 0xF1, 0x00, 0x63, 0xC0, 0x87, 0xCD, 0xF1, 0x5A, 0xFD, 0xC0, 0x85, 0x65, 0x47, - 0xC4, 0x84, 0x07, 0xB5, 0x18, 0x60, 0xE2, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x02, 0x64, - 0x08, 0x60, 0x13, 0xFB, 0xE2, 0x60, 0xA9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x57, 0xF5, 0x00, 0x64, 0x94, 0xFB, - 0x95, 0xFB, 0x96, 0xFB, 0x74, 0xFB, 0x65, 0xF3, 0x00, 0x75, 0x00, 0x72, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x93, 0xC7, 0xF3, 0xED, 0xE2, 0xCC, 0x84, 0x5A, 0xFB, 0x00, 0x60, 0x04, 0x64, 0x08, 0x60, - 0x13, 0xFB, 0xE2, 0x60, 0xC7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x64, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2B, 0x05, 0x00, - 0x67, 0x44, 0x16, 0x60, 0xC1, 0xFB, 0x16, 0x60, 0xD1, 0xFB, 0x16, 0x60, 0xF6, 0xF9, 0x2D, 0x60, - 0x86, 0x65, 0xE4, 0x60, 0x58, 0x4D, 0xE7, 0x78, 0xFF, 0xFF, 0x64, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x2B, 0x05, 0x00, 0xFF, 0x60, 0xFF, 0x63, 0x16, 0x60, 0xC5, 0xFD, 0x08, 0x00, 0x2E, 0x60, - 0x1E, 0x63, 0x16, 0x60, 0xC5, 0xFD, 0xE4, 0x60, 0x58, 0x4D, 0xFF, 0x78, 0xFF, 0xFF, 0xE4, 0x60, - 0x58, 0x4D, 0x6E, 0x78, 0xFF, 0xFF, 0xE5, 0x60, 0x58, 0x4D, 0x18, 0x78, 0xFF, 0xFF, 0x57, 0xF5, - 0x00, 0xF4, 0x65, 0xF1, 0x06, 0xF8, 0x17, 0x60, 0x22, 0xF3, 0x15, 0x60, 0xDD, 0xF1, 0xFB, 0x60, - 0xFF, 0x65, 0x60, 0x44, 0xA4, 0x84, 0x60, 0x47, 0x64, 0x40, 0x10, 0x26, 0x04, 0xBC, 0x60, 0x47, - 0x07, 0xFA, 0x2D, 0x60, 0x7E, 0x64, 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE4, 0x60, - 0x58, 0x4D, 0xA7, 0x78, 0xFF, 0xFF, 0x57, 0xF5, 0x3F, 0xFC, 0x5A, 0xF3, 0xC7, 0xF1, 0xAC, 0x83, - 0x01, 0x64, 0x02, 0x02, 0x6B, 0xFB, 0x64, 0x43, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x04, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xCF, 0x83, - 0x72, 0xF3, 0x5A, 0xFD, 0xDC, 0x84, 0x72, 0xFB, 0x5C, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0x5C, 0xFB, - 0x03, 0x03, 0xE3, 0x60, 0xBD, 0x78, 0xFF, 0xFF, 0x0A, 0x64, 0x5C, 0xFB, 0xA2, 0x4C, 0x20, 0x27, - 0xF8, 0x01, 0x46, 0x60, 0x50, 0x65, 0x72, 0x44, 0xD4, 0x80, 0xFF, 0xFF, 0xF2, 0x04, 0x5D, 0xFB, - 0x40, 0x48, 0x94, 0xF3, 0x5E, 0xFB, 0x40, 0x4A, 0x95, 0xF3, 0x96, 0xF3, 0x40, 0x4C, 0x60, 0x41, - 0x65, 0xF1, 0x40, 0x63, 0xAD, 0x80, 0xF0, 0xA3, 0x09, 0x02, 0x3C, 0x03, 0x2C, 0x41, 0x2A, 0x44, - 0x40, 0x4C, 0x28, 0x44, 0x40, 0x4A, 0x00, 0x64, 0x40, 0x48, 0xF4, 0x01, 0xD1, 0x80, 0x01, 0x02, - 0x31, 0x04, 0x10, 0xA3, 0x80, 0x60, 0x00, 0x65, 0xA5, 0x80, 0xCF, 0x83, 0x08, 0x02, 0x28, 0x44, - 0x60, 0x88, 0x2A, 0x44, 0x70, 0x8A, 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF5, 0x01, 0xE7, 0xA3, - 0x64, 0x44, 0x00, 0xA0, 0x00, 0x62, 0x02, 0x02, 0x00, 0x61, 0x1C, 0x00, 0xE0, 0x84, 0xDE, 0x82, - 0xFD, 0x04, 0x42, 0xFE, 0xF8, 0x84, 0x62, 0x45, 0xC7, 0x83, 0x60, 0x45, 0x02, 0xFE, 0xD5, 0x84, - 0x02, 0x05, 0x01, 0x05, 0x61, 0x44, 0xCF, 0x83, 0x60, 0x41, 0x08, 0x03, 0x28, 0x44, 0x60, 0x88, - 0x2A, 0x44, 0x70, 0x8A, 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF1, 0x01, 0xCE, 0x82, 0xE9, 0x81, - 0xFD, 0x02, 0xF1, 0x81, 0x61, 0x44, 0x00, 0xA8, 0xFF, 0xFF, 0x2F, 0x03, 0x73, 0x40, 0x5D, 0xF3, - 0xFF, 0xFF, 0x60, 0x47, 0xE8, 0x84, 0xE8, 0x84, 0x5E, 0xF3, 0x3F, 0xB5, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x84, 0x61, 0x45, 0xD4, 0x84, 0xC0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x64, 0x44, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xC4, 0x85, 0x61, 0x44, 0xD4, 0x80, 0xFF, 0xFF, 0x0F, 0x03, 0x60, 0x53, 0xD4, 0x84, - 0xFF, 0xFF, 0x74, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x01, 0xB4, 0x74, 0xFB, 0x13, 0x60, 0x06, 0xF3, - 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0xE9, 0x60, 0xFB, 0x78, 0xFF, 0xFF, - 0xC1, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x04, 0x64, 0x03, 0xFA, 0x00, 0xF4, 0x09, 0xF2, 0xFF, 0xFF, - 0x60, 0x47, 0x00, 0x3A, 0x1C, 0x00, 0x60, 0x43, 0x00, 0x36, 0x1C, 0x00, 0xE0, 0xA0, 0xDA, 0x85, - 0x16, 0x07, 0x26, 0x60, 0x16, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, 0xD3, 0x80, 0xCB, 0x83, 0x0F, 0x02, - 0x07, 0x0E, 0x59, 0xD3, 0xA5, 0xD0, 0xDA, 0x85, 0xD0, 0x80, 0xFF, 0xFF, 0x08, 0x02, 0xF9, 0x1F, - 0x12, 0x1E, 0xA5, 0xD0, 0x59, 0xD3, 0xFF, 0xFF, 0x90, 0x80, 0xFF, 0x22, 0x0C, 0x00, 0xE4, 0x60, - 0x63, 0x78, 0xFF, 0xFF, 0x13, 0x60, 0x44, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, - 0x26, 0x60, 0x38, 0x64, 0x02, 0x00, 0x26, 0x60, 0x16, 0x64, 0x16, 0x60, 0xCF, 0xFB, 0x26, 0x46, - 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, - 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x66, 0xF1, 0x32, 0xF8, 0x67, 0xF1, 0x33, 0xF8, - 0x68, 0xF1, 0x34, 0xF8, 0x00, 0x65, 0xEF, 0x60, 0x58, 0x4E, 0xDC, 0x78, 0xFF, 0xFF, 0x61, 0x44, - 0x15, 0x60, 0xC2, 0xFB, 0x50, 0x63, 0x2A, 0xFC, 0xAB, 0xF3, 0x19, 0xFA, 0x00, 0x64, 0x3E, 0xFA, - 0x87, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x65, 0xF1, 0x06, 0xF8, 0x17, 0x60, 0x22, 0xF3, 0x15, 0x60, - 0xDD, 0xF1, 0xFB, 0x60, 0xFF, 0xB7, 0x64, 0x40, 0x10, 0x26, 0x04, 0xBC, 0x60, 0x47, 0x07, 0xFA, - 0x2D, 0x60, 0xA6, 0x65, 0xE4, 0x60, 0x58, 0x4D, 0xE7, 0x78, 0xFF, 0xFF, 0x64, 0xF3, 0x2E, 0x60, - 0x1E, 0x63, 0x60, 0x40, 0x01, 0x27, 0x67, 0x43, 0x16, 0x60, 0xD5, 0xFD, 0x2D, 0x60, 0x9E, 0x64, - 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE4, 0x60, 0x58, 0x4D, 0xA7, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x3F, 0xFC, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x20, 0x44, 0x80, 0x26, 0x11, 0x00, - 0x80, 0xBC, 0x40, 0x40, 0x00, 0x64, 0x94, 0xFB, 0x95, 0xFB, 0x96, 0xFB, 0x74, 0xFB, 0x65, 0xF3, - 0x00, 0x75, 0x00, 0x72, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0xC7, 0xF3, 0xED, 0xE2, 0xCC, 0x84, - 0x5A, 0xFB, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x12, 0xFB, - 0x5A, 0xDB, 0x00, 0x64, 0x72, 0xFB, 0x74, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x3E, 0x63, 0x18, 0x60, - 0x94, 0x61, 0x59, 0xD1, 0x61, 0x46, 0x07, 0x1B, 0xFC, 0x1F, 0x2D, 0x60, 0xC8, 0x62, 0xA2, 0xDF, - 0x01, 0x65, 0x00, 0x61, 0x16, 0x00, 0x18, 0x60, 0xD6, 0x61, 0x49, 0xD1, 0xCB, 0x83, 0xFD, 0x18, - 0x63, 0x41, 0x04, 0xA1, 0x61, 0x45, 0x66, 0x43, 0x2D, 0x60, 0xC8, 0x64, 0xDC, 0x84, 0x60, 0xFE, - 0xBD, 0xD1, 0xA0, 0xD9, 0xCD, 0x81, 0x20, 0xFE, 0xF9, 0x02, 0x66, 0x44, 0x18, 0x60, 0x96, 0x7C, - 0xD0, 0x81, 0x5A, 0xF3, 0xC7, 0xF1, 0x2D, 0x60, 0xC6, 0x63, 0x00, 0xA0, 0x64, 0x5F, 0xBD, 0xDB, - 0x0F, 0x60, 0x6D, 0xF1, 0x02, 0x02, 0x01, 0x18, 0x01, 0xB9, 0x61, 0x44, 0x60, 0xFE, 0xA3, 0xDB, - 0xFC, 0xA3, 0x65, 0x44, 0x03, 0xA4, 0xA3, 0xDB, 0x20, 0xFE, 0x2D, 0x58, 0xFF, 0xFF, 0x17, 0x60, - 0x23, 0xFB, 0xCD, 0x81, 0x28, 0xD3, 0x5A, 0x88, 0xDC, 0x83, 0x31, 0x18, 0xFB, 0x03, 0x61, 0x40, - 0x7F, 0x3A, 0x06, 0x00, 0x17, 0x60, 0x23, 0xF3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, - 0x60, 0xFE, 0xA3, 0xD1, 0x5D, 0xD8, 0x61, 0x40, 0x7F, 0x3A, 0x08, 0x00, 0x20, 0xFE, 0x17, 0x60, - 0x23, 0xF3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, 0xBF, 0xD3, 0x5D, 0xDA, - 0xFF, 0xB4, 0x00, 0x7F, 0x12, 0x03, 0xDF, 0x83, 0x61, 0x40, 0x7F, 0x3A, 0x0A, 0x00, 0x20, 0xFE, - 0x60, 0x45, 0x17, 0x60, 0x23, 0xF3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x65, 0x44, 0x00, 0xF4, - 0x60, 0xFE, 0xBD, 0xD1, 0xCC, 0x84, 0x5D, 0xD8, 0xEF, 0x02, 0x20, 0xFE, 0xCB, 0x01, 0x17, 0x60, - 0x23, 0xF1, 0xFD, 0xA1, 0xFF, 0xB1, 0xC1, 0x83, 0xA2, 0xDD, 0x2D, 0x58, 0xFF, 0xFF, 0x67, 0x5C, - 0x14, 0x60, 0x26, 0x61, 0xA1, 0xD3, 0xA5, 0xD9, 0x10, 0x18, 0x60, 0x43, 0x2D, 0x60, 0xEE, 0x64, - 0xA5, 0xDB, 0x60, 0xFE, 0xA0, 0xDD, 0x20, 0xFE, 0xDC, 0x84, 0xCF, 0x83, 0xE3, 0x83, 0x59, 0xD1, - 0xDC, 0x84, 0x60, 0xFE, 0xA0, 0xD9, 0x20, 0xFE, 0xFA, 0x1F, 0x2D, 0x58, 0xFF, 0xFF, 0x15, 0x60, - 0xDC, 0xF1, 0x15, 0x60, 0xDD, 0xF3, 0x64, 0x40, 0x01, 0x2A, 0x02, 0xBC, 0x64, 0x40, 0x02, 0x2A, - 0x04, 0xBC, 0x64, 0x40, 0x04, 0x2A, 0xEF, 0xB4, 0x15, 0x60, 0xDD, 0xFB, 0x07, 0xB4, 0x60, 0xFE, - 0x17, 0x60, 0x10, 0xFB, 0x20, 0xFE, 0x07, 0x7C, 0x15, 0x60, 0xDC, 0xF9, 0x2D, 0x58, 0xFF, 0xFF, - 0x20, 0x40, 0x20, 0x2A, 0x0A, 0x00, 0x0A, 0x60, 0x77, 0xF1, 0x50, 0xF3, 0x2E, 0x60, 0x31, 0x63, - 0x60, 0xFE, 0xBD, 0xD9, 0x60, 0x47, 0xA3, 0xDB, 0x20, 0xFE, 0x2D, 0x58, 0xFF, 0xFF, 0x0E, 0x57, - 0x32, 0x40, 0x40, 0x26, 0x24, 0x00, 0x45, 0x48, 0x00, 0x60, 0x10, 0x61, 0xB5, 0x60, 0x58, 0x4D, - 0x9F, 0x78, 0xFF, 0xFF, 0x1C, 0x03, 0xF2, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x00, 0x60, 0x48, 0x61, - 0x28, 0x44, 0x59, 0xDA, 0x03, 0x64, 0x38, 0x43, 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, - 0x39, 0x44, 0x59, 0xDA, 0x06, 0x64, 0x23, 0xFA, 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, - 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x4F, 0x00, 0x45, 0x48, 0x00, 0x60, 0x68, 0x61, - 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, 0xFF, 0xFF, 0x47, 0x03, 0xF2, 0x60, 0x01, 0x64, 0x24, 0xFA, - 0x02, 0x60, 0x00, 0x61, 0x46, 0x4A, 0x38, 0x44, 0x54, 0x94, 0x03, 0x64, 0x01, 0x02, 0x09, 0x00, - 0x06, 0x63, 0x4A, 0x61, 0x38, 0x46, 0xBD, 0xD0, 0xCC, 0x84, 0x2A, 0x46, 0x59, 0xD8, 0xFA, 0x02, - 0x06, 0x00, 0xDA, 0x81, 0x38, 0x43, 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x05, 0x63, - 0x28, 0x44, 0x02, 0xA8, 0x25, 0xFA, 0x07, 0x02, 0x03, 0x64, 0x39, 0x43, 0xBD, 0xD1, 0xCC, 0x84, - 0x59, 0xD8, 0xFC, 0x02, 0x08, 0x63, 0x28, 0x44, 0x03, 0xA8, 0x16, 0x60, 0x82, 0xF3, 0x0F, 0x03, - 0xE8, 0x85, 0xC7, 0x85, 0x60, 0x43, 0xFE, 0xA3, 0x2D, 0x60, 0x06, 0x64, 0x58, 0xD1, 0xD9, 0x81, - 0xA1, 0xD8, 0x7E, 0x2A, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x61, 0xF8, 0x1F, 0x65, 0x43, 0x2A, 0x46, - 0x23, 0xFC, 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, - 0x40, 0x26, 0x1B, 0x00, 0x45, 0x48, 0x00, 0x60, 0x06, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, - 0xFF, 0xFF, 0x13, 0x03, 0x02, 0x64, 0x23, 0xFA, 0xF2, 0x60, 0x00, 0x64, 0x5A, 0xDA, 0x28, 0x44, - 0x5A, 0xDA, 0xFF, 0xFF, 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x03, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, - 0xDD, 0x98, 0xFF, 0xFF, 0x97, 0xF1, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0C, 0x03, - 0x08, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x05, 0x03, 0xA2, 0xDB, 0x02, 0x24, 0xC6, 0xFE, 0xDD, 0x98, - 0xFF, 0xFF, 0xFF, 0x60, 0xFE, 0x64, 0xA2, 0xDB, 0xDD, 0x98, 0xFF, 0xFF, 0xA2, 0xFF, 0x32, 0x40, - 0x40, 0x26, 0x3C, 0x00, 0x7B, 0xF3, 0x67, 0x43, 0xDC, 0x84, 0xCC, 0x84, 0x37, 0x03, 0x60, 0x46, - 0x0A, 0x02, 0x7B, 0xFD, 0x00, 0x60, 0x46, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x7B, 0xFB, 0x2C, 0x03, 0x46, 0x4B, 0x25, 0x60, 0xD0, 0x61, 0x18, 0x64, 0x23, 0xFA, - 0xF1, 0x60, 0x00, 0x64, 0x24, 0xFA, 0x4A, 0x65, 0xA2, 0xFF, 0x2C, 0x63, 0x59, 0xD1, 0xA2, 0xDF, - 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF7, 0x1F, 0x12, 0x63, - 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, - 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x2B, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0xA6, 0xFE, 0x00, 0x64, 0x7B, 0xFB, 0xA3, 0xFF, 0xCA, 0x60, - 0x7E, 0x78, 0xFF, 0xFF, 0xA6, 0xFE, 0xBA, 0x05, 0xA7, 0xFE, 0x0A, 0x05, 0xA5, 0xFE, 0x03, 0x04, - 0xE6, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0xA4, 0xFE, 0xF2, 0x04, 0xE7, 0x60, 0x1F, 0x78, 0xFF, 0xFF, - 0x36, 0x45, 0x19, 0x60, 0x86, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0xF3, 0x7D, 0xF1, - 0x60, 0x47, 0x07, 0xB4, 0x4E, 0xFB, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, - 0x9D, 0x84, 0xA1, 0x80, 0xA0, 0x83, 0x15, 0x03, 0x7D, 0xFD, 0x08, 0x60, 0x24, 0xF1, 0x00, 0x60, - 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x31, 0x44, 0xDE, 0xB4, 0x40, 0x51, 0x01, 0x7C, - 0xBC, 0xF9, 0x49, 0xF3, 0x01, 0x63, 0x60, 0x40, 0xFF, 0x26, 0x49, 0xFD, 0xCA, 0x60, 0x7E, 0x78, - 0xFF, 0xFF, 0xE6, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0x26, 0x60, 0xB0, 0x63, 0xBD, 0xD3, 0xBD, 0xD1, - 0xBD, 0xD1, 0xB0, 0x84, 0xB0, 0x84, 0xFF, 0xFF, 0x07, 0x02, 0x6A, 0xFB, 0x31, 0x44, 0xFE, 0xB4, - 0x40, 0x51, 0x0D, 0x64, 0x05, 0xFB, 0x1A, 0x00, 0x28, 0xF3, 0xFF, 0xFF, 0x13, 0x60, 0x52, 0xF3, - 0xC5, 0xFB, 0x64, 0xFB, 0x0F, 0x60, 0x85, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x46, 0x5E, - 0x31, 0x44, 0x21, 0xBC, 0x40, 0x51, 0xED, 0xE2, 0x0F, 0x4E, 0xD0, 0x60, 0x58, 0x4F, 0xA8, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0x00, 0x00, 0xE8, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0xD7, 0xFE, 0xCA, 0x60, - 0x7E, 0x78, 0xFF, 0xFF, 0x2E, 0xF5, 0x27, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, - 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, - 0x61, 0x46, 0x26, 0x02, 0x0B, 0x60, 0x82, 0xF3, 0xDA, 0x81, 0x60, 0x45, 0xD5, 0x80, 0xA1, 0xD1, - 0x04, 0x03, 0xD3, 0x80, 0xD9, 0x81, 0xFA, 0x02, 0x08, 0x00, 0xA1, 0xDD, 0xD9, 0x84, 0x0B, 0x60, - 0x82, 0xFB, 0x4A, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA2, 0xDB, 0x66, 0x45, 0x63, 0x46, 0x06, 0xF2, - 0xFF, 0x60, 0x01, 0x7C, 0xA0, 0x9C, 0x06, 0xF8, 0x65, 0x46, 0x70, 0xF3, 0x60, 0x40, 0x10, 0x2A, - 0x03, 0x00, 0xCC, 0x84, 0x80, 0x2B, 0x70, 0xFB, 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, - 0xAD, 0x01, 0x2E, 0xF5, 0x28, 0xF0, 0x18, 0x60, 0x12, 0xF9, 0x27, 0xF2, 0x15, 0x60, 0x02, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, - 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, - 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, - 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x12, 0x02, 0x63, 0x46, 0x06, 0xF2, 0xFF, 0xFF, 0x02, 0xB0, - 0x08, 0xBC, 0x0C, 0x03, 0x06, 0xFA, 0xE7, 0x60, 0x58, 0x4E, 0x81, 0x78, 0xFF, 0xFF, 0x08, 0x60, - 0x1E, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x6F, 0x01, 0x01, 0x64, - 0x51, 0xFB, 0x28, 0x60, 0x4E, 0x64, 0x52, 0xFB, 0x15, 0x60, 0xC3, 0xF3, 0xFF, 0xFF, 0x15, 0x18, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x10, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE7, 0x60, - 0x3D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2B, 0x60, 0x88, 0x61, 0xFF, 0x60, - 0x80, 0x65, 0xA1, 0xD3, 0xFF, 0xFF, 0xA4, 0x80, 0x59, 0xD3, 0x05, 0x02, 0x04, 0x1B, 0x59, 0xD3, - 0xFF, 0xFF, 0x01, 0x1B, 0x15, 0x00, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x08, 0x60, - 0x1B, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xE7, 0x60, 0x60, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x00, 0x60, 0x04, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x23, 0xFA, - 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x00, 0x60, 0x30, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xD2, 0x60, 0xB5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xCA, 0x60, 0x7E, 0x78, - 0xFF, 0xFF, 0x0E, 0x57, 0x63, 0x46, 0x43, 0x47, 0x22, 0xF2, 0x76, 0xF2, 0x02, 0x1B, 0x01, 0x1B, - 0x0C, 0x00, 0x60, 0x46, 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, - 0xFF, 0xFF, 0x27, 0x46, 0x76, 0xF2, 0xFF, 0xFF, 0xF4, 0x1B, 0x37, 0x58, 0xFF, 0xFF, 0xE7, 0x60, - 0x9F, 0x64, 0x08, 0x60, 0x2A, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, - 0x08, 0x60, 0x21, 0xFB, 0x5A, 0xDB, 0x10, 0x60, 0x42, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x2F, 0x58, - 0xFF, 0xFF, 0x28, 0xF3, 0x7D, 0xF1, 0x60, 0x47, 0x07, 0xB4, 0x4E, 0xFB, 0x01, 0x61, 0x03, 0x03, - 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0xA1, 0x80, 0xB1, 0x83, 0x16, 0x02, 0xCF, 0x85, 0xA7, 0x80, - 0x7D, 0xFD, 0x0B, 0x02, 0x01, 0x65, 0xE5, 0x60, 0x58, 0x4E, 0xA6, 0x78, 0xFF, 0xFF, 0x31, 0x44, - 0xDF, 0xB4, 0x40, 0x51, 0xD0, 0x60, 0xD9, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x21, 0xF1, 0x00, 0x60, - 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xE6, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0x28, 0xF3, - 0x7D, 0xF1, 0x60, 0x47, 0x07, 0xB4, 0x4E, 0xFB, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, - 0xFD, 0x02, 0x9D, 0x84, 0xA1, 0x80, 0xA0, 0x83, 0x13, 0x03, 0x7D, 0xFD, 0x08, 0x60, 0x24, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x7D, 0xF1, 0x31, 0x44, 0x64, 0x40, - 0xFF, 0x26, 0x03, 0x00, 0x21, 0xBC, 0x40, 0x51, 0x03, 0x00, 0xCA, 0x60, 0x7E, 0x78, 0xFF, 0xFF, - 0xE6, 0x60, 0x8E, 0x78, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x1B, 0x00, 0x45, 0x48, - 0x00, 0x60, 0x06, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0x9F, 0x78, 0xFF, 0xFF, 0x13, 0x03, 0x02, 0x64, - 0x23, 0xFA, 0xF2, 0x60, 0x04, 0x64, 0x5A, 0xDA, 0x28, 0x44, 0x5A, 0xDA, 0xFF, 0xFF, 0x1F, 0x60, - 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0x79, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, - 0x60, 0x46, 0x0E, 0xF2, 0x59, 0x03, 0x60, 0x40, 0xF0, 0x37, 0x46, 0x00, 0xFF, 0x37, 0x3B, 0x00, - 0xFD, 0x37, 0x33, 0x00, 0x18, 0x37, 0x27, 0x00, 0xFE, 0x37, 0x2A, 0x00, 0xF8, 0x37, 0x0A, 0x00, - 0x60, 0x47, 0xFF, 0xB5, 0x10, 0x60, 0x24, 0x62, 0x46, 0xD1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xD8, 0x01, 0x06, 0xB4, 0xFD, 0x7F, 0x0E, 0xFA, 0x1E, 0x60, - 0xF8, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xF9, 0xFE, 0xC9, 0x01, 0xDE, 0x60, 0x58, 0x4F, 0x6C, 0x78, 0xFF, 0xFF, 0x14, 0x00, - 0xE1, 0x60, 0x58, 0x4F, 0x32, 0x78, 0xFF, 0xFF, 0xBF, 0x03, 0x23, 0xF0, 0x60, 0x40, 0x04, 0x26, - 0xE3, 0x1B, 0x02, 0x26, 0xE1, 0x18, 0xA2, 0xFF, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, - 0x8F, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0x8F, 0xFB, 0x1F, 0x60, 0x20, 0x64, 0x40, 0x4B, 0xF6, 0x60, - 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0xA8, 0x01, 0xAC, 0xFE, 0x09, 0x05, 0xAD, 0xFE, 0x0F, 0x05, - 0xAE, 0xFE, 0xA2, 0x05, 0xAF, 0xFE, 0x37, 0x05, 0xCA, 0x60, 0x7E, 0x78, 0xFF, 0xFF, 0x08, 0x60, - 0x11, 0xF1, 0x20, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xF5, 0x01, 0x10, 0x60, - 0x56, 0x65, 0x03, 0x61, 0x07, 0x00, 0xA2, 0xDD, 0x58, 0x4F, 0x64, 0x58, 0xFF, 0xFF, 0x00, 0xB9, - 0xFF, 0xFF, 0x08, 0x03, 0x00, 0x63, 0xA5, 0xD1, 0x5A, 0xD3, 0xDA, 0x85, 0x00, 0xA8, 0xCD, 0x81, - 0xF2, 0x02, 0xF8, 0x02, 0xE1, 0x01, 0x10, 0x60, 0x20, 0x62, 0x10, 0x60, 0x46, 0x65, 0xE8, 0x60, - 0xA9, 0x63, 0x5A, 0xDF, 0xD6, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0x5A, 0xDF, 0x5A, 0xDF, 0x5A, 0xDD, - 0xF9, 0x01, 0x10, 0x60, 0x54, 0x65, 0x5A, 0xDF, 0xD6, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x5A, 0xDD, - 0xFB, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x24, 0x64, 0x40, 0x41, 0x10, 0x60, 0x22, 0x63, - 0xA3, 0xD1, 0x00, 0x64, 0xD0, 0x80, 0x06, 0x61, 0x08, 0x03, 0xBD, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, - 0xB0, 0x84, 0xCD, 0x81, 0xA3, 0xDB, 0x06, 0xA3, 0xF9, 0x02, 0x10, 0x60, 0x48, 0x63, 0xA3, 0xD1, - 0x00, 0x64, 0xD0, 0x80, 0x07, 0x61, 0x19, 0x03, 0xBD, 0xDB, 0x64, 0x44, 0xFE, 0xA3, 0x02, 0xA3, - 0xCD, 0x81, 0xE8, 0x84, 0xE3, 0x03, 0x02, 0x05, 0xE1, 0x03, 0xF9, 0x01, 0x77, 0xFB, 0x79, 0xFD, - 0x61, 0x5C, 0xA3, 0xD3, 0x78, 0xF9, 0x03, 0x18, 0x58, 0x4F, 0x60, 0x58, 0xFF, 0xFF, 0x79, 0xF3, - 0x78, 0xF1, 0x60, 0x43, 0x77, 0xF3, 0x64, 0x41, 0xEA, 0x01, 0x21, 0x43, 0x10, 0x60, 0x48, 0x65, - 0xD7, 0x80, 0xBD, 0xD1, 0xBD, 0xD3, 0x03, 0x02, 0xCA, 0x60, 0x7E, 0x78, 0xFF, 0xFF, 0xA0, 0x84, - 0xBD, 0xD1, 0x43, 0x41, 0xF5, 0x03, 0xE8, 0x60, 0xAE, 0x64, 0x64, 0x58, 0x40, 0x4F, 0x2A, 0xF0, - 0x83, 0x60, 0xFF, 0x65, 0x64, 0x47, 0x03, 0x2B, 0x01, 0x00, 0x17, 0x00, 0x03, 0x26, 0x03, 0xAC, - 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, - 0x2E, 0xFA, 0x64, 0x41, 0xCB, 0xF3, 0x2F, 0xFA, 0x60, 0x43, 0xCC, 0xF3, 0x30, 0xFA, 0xCD, 0xF1, - 0x31, 0xF8, 0x32, 0xFC, 0x33, 0xFA, 0x34, 0xF8, 0x19, 0x00, 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, - 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x36, 0xF2, 0x32, 0xFA, - 0x37, 0xF2, 0x33, 0xFA, 0x38, 0xF2, 0x34, 0xFA, 0xCB, 0xF3, 0x2F, 0xFA, 0x36, 0xFA, 0xCC, 0xF3, - 0x30, 0xFA, 0x37, 0xFA, 0xCD, 0xF3, 0x31, 0xFA, 0x38, 0xFA, 0x64, 0x41, 0x1C, 0xF2, 0x13, 0xFA, - 0x00, 0xF4, 0x0D, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, 0x28, 0x00, 0x26, 0x46, 0x04, 0x63, - 0x03, 0xFC, 0x00, 0xF4, 0x0D, 0xF2, 0x06, 0xFA, 0xEA, 0x60, 0x58, 0x4E, 0x49, 0x78, 0xFF, 0xFF, - 0xFF, 0xA0, 0x59, 0xF5, 0x19, 0x02, 0x39, 0xF2, 0x26, 0x46, 0x3F, 0xFA, 0x00, 0xF4, 0x00, 0x60, - 0x81, 0x67, 0x0D, 0xFA, 0x7C, 0x64, 0x01, 0xFA, 0x26, 0x46, 0x00, 0x64, 0x3E, 0xFA, 0x1E, 0x60, - 0xE0, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC8, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF0, - 0x42, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x04, 0x3F, 0xFA, 0x1C, 0xF2, 0x13, 0xFA, 0x26, 0xF2, - 0x27, 0xF0, 0x60, 0x47, 0x00, 0xF4, 0x1F, 0xFA, 0x64, 0x47, 0x20, 0xFA, 0x61, 0x44, 0x21, 0xFA, - 0x01, 0x67, 0x0D, 0xFA, 0x10, 0x61, 0x26, 0x60, 0x64, 0x64, 0x1E, 0x63, 0x58, 0xD1, 0xCD, 0x81, - 0xBD, 0xD8, 0xFC, 0x02, 0x9A, 0xF1, 0xB7, 0xF1, 0x64, 0x5E, 0x64, 0x5F, 0x44, 0x63, 0xBD, 0xDA, - 0x13, 0x60, 0x2F, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x09, 0xBC, 0x4A, 0xD3, - 0x60, 0x45, 0x60, 0x40, 0x01, 0x36, 0x03, 0x64, 0x02, 0x36, 0x01, 0x64, 0xB4, 0x84, 0x06, 0xA2, - 0xA2, 0xD1, 0xBD, 0xDA, 0x64, 0x47, 0xBD, 0xDA, 0xB4, 0xF3, 0xB5, 0xF1, 0x60, 0x47, 0xBD, 0xDA, - 0x64, 0x47, 0xC3, 0xF1, 0xBD, 0xDA, 0x64, 0x44, 0xBD, 0xDA, 0x26, 0x46, 0x00, 0x64, 0x23, 0xF0, - 0x3B, 0xF0, 0x64, 0x40, 0x10, 0x2A, 0x06, 0x00, 0xC0, 0x67, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0x10, 0xBC, 0x3E, 0xFA, 0x1E, 0x60, 0xE0, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x04, 0x60, 0x5C, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x59, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x2F, 0x58, 0xFF, 0xFF, 0x59, 0xF5, 0xAB, 0xF1, - 0x19, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x08, 0x64, 0x2A, 0xFA, 0x80, 0x7E, 0xF8, 0x7F, 0x0E, 0xFA, - 0x87, 0xF1, 0x07, 0xF8, 0x01, 0x60, 0x60, 0x67, 0x2C, 0xFA, 0x1D, 0x60, 0x00, 0x67, 0x2D, 0xFA, - 0x01, 0x60, 0x00, 0x67, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0x32, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, - 0x33, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0x34, 0xF8, 0x00, 0x63, 0x3B, 0xFC, 0x3D, 0xFC, 0x01, 0x64, - 0x3A, 0xFA, 0x66, 0x64, 0x39, 0xFA, 0x3C, 0xFC, 0xAA, 0x60, 0xAA, 0x64, 0x00, 0xF4, 0x02, 0xFA, - 0x00, 0x60, 0x03, 0x64, 0x5A, 0xDA, 0x1D, 0x60, 0x60, 0x64, 0x5A, 0xDA, 0x01, 0x60, 0x00, 0x64, - 0x5A, 0xDA, 0x81, 0x7F, 0x18, 0x7E, 0x08, 0xFA, 0x01, 0x60, 0x01, 0x64, 0x0A, 0xFA, 0x00, 0x64, - 0x0E, 0xFA, 0x2D, 0x58, 0xFF, 0xFF, 0x59, 0xF5, 0x3D, 0xF2, 0x3C, 0xF2, 0xCC, 0x83, 0x00, 0xA8, - 0x03, 0x03, 0x08, 0x28, 0x3D, 0xFC, 0x42, 0x00, 0x3D, 0xFA, 0x3A, 0xF2, 0x3B, 0xF0, 0x00, 0x63, - 0x00, 0xF4, 0x07, 0xFC, 0x01, 0xB0, 0x0B, 0xFA, 0x19, 0x03, 0x1F, 0xF8, 0xFF, 0xFF, 0x18, 0x64, - 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x1F, 0xF2, 0x1E, 0xF0, 0x59, 0xF5, 0x00, 0xA8, 0x3B, 0xF8, 0xD0, 0x80, 0x06, 0x03, 0x05, 0x03, - 0x04, 0x60, 0x5C, 0x63, 0x0F, 0x64, 0x3A, 0xFA, 0x39, 0xFC, 0x00, 0xF4, 0x00, 0x64, 0x06, 0xFA, - 0xEA, 0x60, 0x58, 0x4E, 0x49, 0x78, 0xFF, 0xFF, 0x59, 0xF5, 0x00, 0xF4, 0x81, 0x60, 0x00, 0x64, - 0x06, 0xFA, 0x32, 0x47, 0x07, 0xFA, 0xB7, 0xF1, 0x00, 0x7F, 0x64, 0x5E, 0x09, 0xFA, 0x59, 0xF5, - 0x00, 0x64, 0x15, 0xFA, 0x39, 0xF2, 0x3F, 0xFA, 0x1E, 0x60, 0xCE, 0x64, 0x0F, 0x60, 0x90, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xE3, 0x60, 0xC0, 0x78, - 0xFF, 0xFF, 0x66, 0x45, 0x0E, 0xF2, 0x0F, 0xF0, 0x10, 0xF0, 0x64, 0x41, 0x01, 0xA8, 0x59, 0xF5, - 0x09, 0x02, 0xAD, 0x83, 0x64, 0x44, 0xAC, 0x84, 0x08, 0x24, 0x0A, 0x63, 0x3C, 0xFC, 0x3D, 0xFC, - 0x1A, 0x02, 0x2D, 0x00, 0x03, 0x3A, 0x03, 0x00, 0x00, 0x64, 0x3C, 0xFA, 0x29, 0x00, 0x04, 0x3A, - 0x09, 0x00, 0x0A, 0x64, 0x3C, 0xFA, 0x01, 0x64, 0x3A, 0xFA, 0x00, 0xF4, 0x00, 0x64, 0x1F, 0xFA, - 0x1E, 0xFA, 0x1E, 0x00, 0x02, 0x3A, 0x1E, 0x00, 0x64, 0x44, 0xAD, 0x83, 0xAC, 0x84, 0x02, 0x03, - 0x3C, 0xFC, 0x3D, 0xFC, 0x15, 0x03, 0x3A, 0xFA, 0xF8, 0x65, 0x52, 0x63, 0x64, 0x44, 0x01, 0x36, - 0x0D, 0x00, 0x12, 0xA3, 0x64, 0x40, 0x02, 0x2A, 0x02, 0x00, 0xC7, 0x83, 0xC7, 0x83, 0x64, 0x40, - 0x08, 0x2A, 0x01, 0x00, 0xC7, 0x83, 0x64, 0x40, 0x04, 0x26, 0xC7, 0x83, 0x39, 0xFC, 0x00, 0x64, - 0x2E, 0x58, 0xFF, 0xFF, 0x3B, 0xF0, 0x3A, 0xF2, 0x65, 0x46, 0x06, 0xF2, 0x40, 0x47, 0x1C, 0x18, - 0x32, 0x47, 0x07, 0xFA, 0x18, 0x7E, 0x81, 0x7F, 0x08, 0xFA, 0x01, 0x60, 0x01, 0x63, 0xB7, 0xF3, - 0x0A, 0xFC, 0x00, 0x7F, 0x09, 0xFA, 0x27, 0x40, 0x01, 0x2A, 0x0E, 0x00, 0x1F, 0xF8, 0x18, 0x64, - 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x1E, 0xF0, 0x59, 0xF5, 0x3B, 0xF8, 0x65, 0x46, 0x27, 0x40, 0x02, 0x26, 0x02, 0x00, 0x00, 0xF4, - 0x13, 0x00, 0x6E, 0x61, 0xFF, 0x60, 0xFE, 0x64, 0x00, 0x60, 0x0E, 0x63, 0x58, 0xD1, 0x59, 0xD8, - 0xFD, 0x1F, 0x01, 0x60, 0xEE, 0x63, 0x00, 0xF4, 0x02, 0x61, 0x58, 0xD1, 0x59, 0xD8, 0x7E, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x02, 0x61, 0xF9, 0x1F, 0x27, 0x40, 0x04, 0x26, 0x1A, 0x00, 0x46, 0x4B, - 0x0F, 0x60, 0x67, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x0E, 0x03, 0x89, 0xF0, 0xEB, 0x60, - 0x58, 0x4D, 0x00, 0x78, 0xFF, 0xFF, 0x65, 0x44, 0xAC, 0x86, 0xFF, 0xFF, 0x08, 0x03, 0xEB, 0x60, - 0x58, 0x4D, 0x00, 0x78, 0xFF, 0xFF, 0x04, 0x00, 0x2B, 0x46, 0x82, 0xFC, 0x00, 0xF4, 0x82, 0xFC, - 0x00, 0xF4, 0x27, 0x40, 0x08, 0x26, 0x19, 0x00, 0x46, 0x4B, 0x0F, 0x60, 0x85, 0xF3, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x0E, 0x03, 0x89, 0xF0, 0xEB, 0x60, 0x58, 0x4D, 0x00, 0x78, 0xFF, 0xFF, - 0x65, 0x44, 0xAC, 0x86, 0xFF, 0xFF, 0x08, 0x03, 0xEB, 0x60, 0x58, 0x4D, 0x00, 0x78, 0xFF, 0xFF, - 0x04, 0x00, 0x65, 0x46, 0x02, 0xFA, 0x00, 0xF4, 0x82, 0xFC, 0x01, 0x64, 0x2E, 0x58, 0xFF, 0xFF, - 0x01, 0x61, 0x02, 0x64, 0x7A, 0x63, 0x58, 0xD0, 0xAB, 0x46, 0xA0, 0xD8, 0xAB, 0x46, 0xFB, 0x1F, - 0xAB, 0x46, 0x00, 0xF4, 0xCD, 0x81, 0xAB, 0x46, 0x00, 0xF4, 0xF3, 0x02, 0x2D, 0x58, 0xFF, 0xFF, - 0x00, 0x60, 0x2A, 0x61, 0xB5, 0x60, 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x58, 0xFB, - 0x04, 0x64, 0x03, 0xFA, 0x67, 0x44, 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0x32, 0xFA, 0x33, 0xFA, - 0x34, 0xFA, 0x12, 0x60, 0x80, 0x64, 0x87, 0xF1, 0x0E, 0xFA, 0x07, 0xF8, 0x00, 0x64, 0x3E, 0xFA, - 0x0A, 0x60, 0x07, 0xFB, 0x06, 0xA2, 0x10, 0x60, 0x5C, 0x64, 0xA2, 0xDB, 0x04, 0x64, 0x5A, 0xDB, - 0x06, 0x64, 0x5A, 0xDB, 0xED, 0x60, 0xD9, 0x64, 0x08, 0x60, 0x2D, 0xFB, 0x00, 0x64, 0x0A, 0x60, - 0x0D, 0xFB, 0x06, 0xA2, 0x10, 0x60, 0x60, 0x64, 0xA2, 0xDB, 0x08, 0x64, 0x5A, 0xDB, 0x06, 0x64, - 0x5A, 0xDB, 0xED, 0x60, 0xE2, 0x64, 0x08, 0x60, 0x2F, 0xFB, 0xED, 0x60, 0xBE, 0x64, 0x08, 0x60, - 0x28, 0xFB, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, 0x58, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0xED, 0x60, 0x70, 0x78, 0xFF, 0xFF, - 0x58, 0xF5, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, 0x31, 0xF8, 0xAB, 0xF1, - 0x19, 0xF8, 0x58, 0xF5, 0x40, 0x64, 0x2A, 0xFA, 0x64, 0xF3, 0x63, 0xFB, 0x08, 0x60, 0x1B, 0xF1, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x03, 0x00, - 0xEC, 0x60, 0xCB, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xC0, 0xF3, 0xEF, 0x60, 0x58, 0x4E, 0xAB, 0x78, - 0xFF, 0xFF, 0x15, 0x60, 0xC2, 0xFB, 0x15, 0x60, 0xBC, 0xF3, 0x3F, 0x40, 0x01, 0x27, 0x08, 0x00, - 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, 0xFF, 0xFF, 0x05, 0x00, - 0x0F, 0xB4, 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, 0xFF, 0xFF, 0x58, 0xF5, 0x2D, 0x60, 0x94, 0x64, - 0x00, 0xF4, 0x40, 0x48, 0x28, 0x60, 0x4E, 0x64, 0x20, 0x40, 0x10, 0x27, 0x02, 0x00, 0x28, 0x60, - 0x2C, 0x64, 0x28, 0xDB, 0x04, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE4, 0x60, 0x58, 0x4D, 0xA7, 0x78, - 0xFF, 0xFF, 0x58, 0xF5, 0x3F, 0xFC, 0x01, 0x64, 0x52, 0xF1, 0x0C, 0x60, 0x81, 0xFB, 0x64, 0xFB, - 0xA4, 0xD3, 0x04, 0x65, 0x51, 0xF3, 0x01, 0x18, 0x0C, 0x65, 0xF3, 0xB4, 0xB4, 0x84, 0x51, 0xFB, - 0x0D, 0x00, 0xED, 0x60, 0x70, 0x78, 0xFF, 0xFF, 0x51, 0xF1, 0x64, 0xF3, 0xFF, 0xFF, 0xF3, 0xA0, - 0x04, 0xA4, 0x01, 0x04, 0xF1, 0xA4, 0x10, 0x36, 0xF4, 0x01, 0x64, 0xFB, 0x64, 0xF3, 0x15, 0x60, - 0xC3, 0xF1, 0xCC, 0x84, 0x01, 0x61, 0x08, 0x24, 0x03, 0x00, 0xE1, 0x81, 0xCC, 0x84, 0xFB, 0x01, - 0xA1, 0x84, 0x51, 0xF1, 0xEA, 0x03, 0x0C, 0x60, 0x81, 0xFB, 0x9D, 0xFE, 0x3D, 0x05, 0xBA, 0xFE, - 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, 0xD0, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x64, 0xF1, 0x0F, 0x60, 0x9D, 0xF9, 0x08, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, - 0xF5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x11, 0xF1, - 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x18, 0x60, 0x07, 0xF1, 0xAD, 0x4F, - 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x64, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, - 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, 0xCD, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x64, 0xF1, 0x0F, 0x60, 0x9D, 0xF9, 0x0E, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, - 0x2D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x11, 0xF1, - 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x58, 0xF5, 0x1E, 0x60, 0xD4, 0x64, 0x0F, 0x60, 0x90, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x64, 0x4F, 0xFB, 0x00, 0x60, 0x01, 0x64, - 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, 0x51, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xA5, 0xF1, 0x0A, 0x60, 0x09, 0xF9, - 0x14, 0x60, 0x0E, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0xA6, 0xF1, 0x0A, 0x60, 0x0F, 0xF9, 0x1F, 0x60, 0x48, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xFD, 0x1B, - 0x14, 0x60, 0x1A, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x00, 0x60, 0x08, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, 0x7A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x4F, 0xF1, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x64, 0x40, - 0xFF, 0x26, 0x0B, 0x00, 0x51, 0xF3, 0xFF, 0xFF, 0x80, 0xB0, 0xFF, 0xFF, 0x03, 0x03, 0xED, 0x60, - 0x6A, 0x78, 0xFF, 0xFF, 0xEB, 0x60, 0xB4, 0x78, 0xFF, 0xFF, 0x02, 0x0A, 0x00, 0x64, 0x4F, 0xFB, - 0xA7, 0xF1, 0x0A, 0x60, 0x0F, 0xF9, 0x00, 0x60, 0x0C, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, - 0xA5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x14, 0x60, 0x1A, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, - 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x1A, 0x64, - 0x0F, 0x60, 0xA5, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x13, 0x00, 0xFF, 0x60, - 0xF7, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x4F, 0xF3, 0xDE, 0x0A, 0x00, 0xA0, 0x00, 0x64, 0x02, 0x03, - 0x4F, 0xFB, 0xD9, 0x01, 0x14, 0x60, 0x0E, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0xB7, 0x01, 0x15, 0x60, 0xC1, 0xF3, 0xEF, 0x60, 0x58, 0x4E, 0xAB, 0x78, - 0xFF, 0xFF, 0x15, 0x60, 0xC2, 0xFB, 0x15, 0x60, 0xBD, 0xF3, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, - 0xEE, 0x60, 0x58, 0x4E, 0x26, 0x78, 0xFF, 0xFF, 0x58, 0xF5, 0x2D, 0x60, 0x94, 0x64, 0x00, 0xF4, - 0x40, 0x48, 0x28, 0x60, 0x4E, 0x64, 0x20, 0x40, 0x10, 0x27, 0x02, 0x00, 0x28, 0x60, 0x2C, 0x64, - 0x28, 0xDB, 0x04, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE4, 0x60, 0x58, 0x4D, 0xA7, 0x78, 0xFF, 0xFF, - 0x58, 0xF5, 0x3F, 0xFC, 0x51, 0xF3, 0x20, 0x40, 0x10, 0x23, 0x02, 0x00, 0x20, 0xBC, 0x04, 0x00, - 0x60, 0x40, 0x01, 0x22, 0x40, 0xBC, 0x04, 0xBC, 0x80, 0xBC, 0x51, 0xFB, 0x11, 0x60, 0x16, 0x64, - 0x08, 0x60, 0x46, 0xFB, 0x06, 0x64, 0x08, 0x60, 0x4D, 0xFB, 0x15, 0x60, 0xC6, 0xF3, 0xFF, 0xFF, - 0x07, 0xB4, 0xA2, 0xDB, 0x51, 0xF3, 0x08, 0x60, 0x46, 0xF1, 0x60, 0x40, 0x20, 0x26, 0x03, 0x00, - 0x01, 0x26, 0x32, 0x00, 0x45, 0x00, 0x08, 0x60, 0x4D, 0xF3, 0xFF, 0xFF, 0xDD, 0xA0, 0x01, 0xA4, - 0x57, 0x03, 0xA2, 0xDB, 0x2B, 0x60, 0x88, 0x61, 0xE0, 0xA0, 0xF0, 0xA0, 0x05, 0x05, 0x01, 0x05, - 0x05, 0x00, 0x02, 0xA1, 0xF0, 0xA4, 0x02, 0x00, 0x04, 0xA1, 0xE0, 0xA4, 0xA1, 0xD1, 0x01, 0x61, - 0xDC, 0x84, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, 0xFB, 0x01, 0xA1, 0x80, 0x10, 0x60, - 0x9A, 0x64, 0x01, 0x02, 0xE0, 0x01, 0xA0, 0xD3, 0x11, 0x60, 0x0E, 0x63, 0xFA, 0xA4, 0xCC, 0x84, - 0x08, 0xA3, 0xFD, 0x02, 0xB1, 0xF1, 0xA3, 0xD3, 0x01, 0x18, 0xD5, 0x18, 0xFE, 0xA3, 0xA3, 0xD3, - 0x64, 0xFB, 0xEB, 0x60, 0xCD, 0x78, 0xFF, 0xFF, 0x11, 0x60, 0xF4, 0x65, 0x64, 0x41, 0xA1, 0xD3, - 0xD5, 0x80, 0x00, 0xB8, 0x25, 0x07, 0x02, 0x02, 0x08, 0xA1, 0xF9, 0x01, 0x61, 0x44, 0x08, 0x60, - 0x46, 0xFB, 0x01, 0x64, 0xA1, 0xDB, 0x49, 0xD3, 0x64, 0xFB, 0xEB, 0x60, 0xCD, 0x78, 0xFF, 0xFF, - 0x11, 0x60, 0xF4, 0x65, 0x64, 0x41, 0xA1, 0xD3, 0xD5, 0x80, 0x04, 0xB0, 0x11, 0x07, 0x02, 0x02, - 0x08, 0xA1, 0xF9, 0x01, 0x61, 0x44, 0x08, 0x60, 0x46, 0xFB, 0x49, 0xD3, 0x64, 0xFB, 0xEB, 0x60, - 0xCD, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x46, 0xF3, 0xFF, 0xFF, 0x08, 0xA4, 0xA2, 0xDB, 0x9A, 0x01, - 0x14, 0x60, 0x0E, 0x64, 0x0F, 0x60, 0xA5, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x51, 0xF3, 0xFF, 0xFF, 0xE3, 0xB4, 0x51, 0xFB, 0x0C, 0x60, 0x7F, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, - 0xA2, 0xDB, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xED, 0x60, 0x81, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x63, 0xF1, 0x64, 0xF9, 0x0F, 0x60, 0x9D, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xED, 0x60, 0xA3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x11, 0xF1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x60, 0x11, 0xF1, 0x10, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, 0x58, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x14, 0x60, 0x0E, 0x64, - 0x0F, 0x60, 0xA5, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x51, 0xFB, - 0x00, 0x64, 0x08, 0x60, 0x1B, 0xFB, 0x5A, 0xDB, 0xBE, 0xFE, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, - 0x1C, 0xFB, 0xEB, 0x60, 0x58, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, - 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x31, 0x40, 0x20, 0x2A, 0x35, 0x00, 0x3F, 0xF2, 0x47, 0x65, - 0xC4, 0x84, 0xE8, 0x84, 0x23, 0xFA, 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x64, 0xF3, 0x01, 0x60, - 0xFF, 0x65, 0xA4, 0x84, 0x01, 0x23, 0x14, 0x00, 0x11, 0x60, 0x14, 0x61, 0x11, 0x60, 0xF4, 0x65, - 0xA1, 0xD1, 0xD5, 0x80, 0xD0, 0x80, 0x0B, 0x03, 0x02, 0x03, 0x08, 0xA1, 0xF9, 0x01, 0x04, 0xA1, - 0xA1, 0xD3, 0x01, 0x60, 0x00, 0x65, 0x60, 0x47, 0xFF, 0xB4, 0xB4, 0x84, 0x01, 0x00, 0x01, 0x64, - 0x00, 0xF4, 0x08, 0xFA, 0xFF, 0xFF, 0x26, 0x46, 0x1F, 0x60, 0x10, 0x64, 0x0F, 0x60, 0x90, 0xFB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x00, 0x66, - 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x5F, 0xFB, 0xAC, 0x85, - 0x60, 0x41, 0x2E, 0x60, 0x22, 0x63, 0x16, 0x60, 0xC6, 0xFD, 0x16, 0x60, 0xCC, 0xFD, 0x16, 0x60, - 0xD6, 0xFD, 0x16, 0x60, 0xE0, 0xFD, 0x5C, 0x03, 0x61, 0x5C, 0x00, 0x63, 0xE9, 0x81, 0xFF, 0xFF, - 0x02, 0x24, 0xDF, 0x83, 0xFB, 0x02, 0x08, 0x64, 0x53, 0x90, 0x64, 0x41, 0x03, 0x04, 0x01, 0x60, - 0x08, 0x63, 0x0C, 0x00, 0x01, 0x60, 0x00, 0x63, 0x10, 0x64, 0xE9, 0x81, 0xFF, 0xFF, 0x02, 0x24, - 0xDF, 0x83, 0x08, 0x36, 0x03, 0x00, 0xCC, 0x84, 0xFF, 0xFF, 0xF7, 0x02, 0x15, 0x60, 0xEC, 0xFD, - 0x43, 0x48, 0x65, 0x41, 0x2B, 0x60, 0xDA, 0x63, 0x28, 0x44, 0xFF, 0xB5, 0x10, 0x60, 0x08, 0x64, - 0xE9, 0x81, 0x58, 0xD1, 0xFD, 0x04, 0xA3, 0xD9, 0x0C, 0x03, 0x58, 0xD1, 0xE9, 0x81, 0x40, 0x4A, - 0xFC, 0x04, 0xA3, 0xD1, 0x64, 0x47, 0xB0, 0x84, 0xBD, 0xDB, 0x65, 0x44, 0xC8, 0x85, 0x2A, 0x44, - 0xEF, 0x02, 0x28, 0x43, 0x08, 0x3A, 0x24, 0x00, 0x60, 0x45, 0x04, 0x64, 0x32, 0x60, 0x00, 0x63, - 0x41, 0x48, 0xE9, 0x81, 0xCC, 0x84, 0x02, 0x24, 0xDF, 0x83, 0xFB, 0x02, 0x63, 0x40, 0x00, 0x36, - 0x17, 0x00, 0x17, 0x60, 0x11, 0xFD, 0x2E, 0x60, 0x24, 0x63, 0x65, 0x44, 0x28, 0x41, 0xE9, 0x81, - 0x58, 0xD1, 0xFD, 0x04, 0xA3, 0xD9, 0x15, 0x03, 0x58, 0xD1, 0xE9, 0x81, 0x60, 0x45, 0xFC, 0x04, - 0xA3, 0xD1, 0x64, 0x47, 0xB0, 0x84, 0xBD, 0xDB, 0x00, 0xB9, 0x65, 0x44, 0xF0, 0x02, 0x09, 0x00, - 0x67, 0x43, 0x16, 0x60, 0xC6, 0xFD, 0x16, 0x60, 0xCC, 0xFD, 0x16, 0x60, 0xD6, 0xFD, 0x16, 0x60, - 0xE0, 0xFD, 0x20, 0x40, 0x10, 0x27, 0x0D, 0x00, 0x2B, 0x60, 0xE2, 0x61, 0x15, 0x60, 0xEC, 0xF3, - 0xA1, 0xDB, 0xFF, 0xB4, 0xCC, 0x84, 0xA8, 0x83, 0x2B, 0x60, 0xD8, 0x64, 0x58, 0xD1, 0x59, 0xD9, - 0xFD, 0x1F, 0x2B, 0x60, 0xE4, 0x63, 0x15, 0x60, 0xBE, 0xF3, 0x08, 0x61, 0x60, 0xFE, 0xA3, 0xD1, - 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0xA8, 0xE8, 0x84, 0x0F, 0x03, 0x60, 0xFE, 0x02, 0x28, 0xF6, 0x01, - 0x80, 0x62, 0xB2, 0x9C, 0xBD, 0xD9, 0x62, 0xF9, 0xCD, 0x81, 0x00, 0x36, 0x01, 0x00, 0xEE, 0x01, - 0x2E, 0x60, 0x24, 0x63, 0x08, 0x61, 0xEA, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x2B, 0x60, 0x7C, 0x63, - 0x65, 0x40, 0xFF, 0x36, 0x02, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0x40, 0x26, 0x7F, 0xB4, 0x20, 0x26, 0x3F, 0xB4, 0x60, 0x45, 0x80, 0x63, 0xEF, 0x60, - 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xDF, 0xFB, 0x40, 0x63, 0xEF, 0x60, 0x58, 0x4D, - 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xE0, 0xFB, 0x20, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, - 0xFF, 0xFF, 0x15, 0x60, 0xE1, 0xFB, 0x10, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, - 0x15, 0x60, 0xE2, 0xFB, 0x08, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, - 0xE3, 0xFB, 0x04, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xE4, 0xFB, - 0x02, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xE5, 0xFB, 0x01, 0x63, - 0xEF, 0x60, 0x58, 0x4D, 0x33, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xE6, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, - 0x15, 0x60, 0xBE, 0xF3, 0xFF, 0xFF, 0x0F, 0xB4, 0x60, 0x45, 0x08, 0x63, 0xEF, 0x60, 0x58, 0x4D, - 0x5E, 0x78, 0xFF, 0xFF, 0x15, 0x60, 0xE7, 0xFB, 0x04, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x5E, 0x78, - 0xFF, 0xFF, 0x15, 0x60, 0xE8, 0xFB, 0x02, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x5E, 0x78, 0xFF, 0xFF, - 0x15, 0x60, 0xE9, 0xFB, 0x01, 0x63, 0xEF, 0x60, 0x58, 0x4D, 0x5E, 0x78, 0xFF, 0xFF, 0x15, 0x60, - 0xEA, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x63, 0x5C, 0xA7, 0x84, 0xEB, 0x83, 0x14, 0x02, 0x01, 0x03, - 0xFB, 0x01, 0x64, 0x44, 0x01, 0x36, 0x0B, 0x64, 0x02, 0x36, 0x0B, 0x64, 0x04, 0x36, 0x0A, 0x64, - 0x08, 0x36, 0x0A, 0x64, 0x10, 0x36, 0x09, 0x64, 0x20, 0x36, 0x09, 0x64, 0x40, 0x36, 0x09, 0x64, - 0x80, 0x36, 0x09, 0x64, 0x11, 0x00, 0x60, 0x40, 0x01, 0x36, 0x0B, 0x64, 0x02, 0x36, 0x0F, 0x64, - 0x04, 0x36, 0x0A, 0x64, 0x08, 0x36, 0x0E, 0x64, 0x10, 0x36, 0x09, 0x64, 0x20, 0x36, 0x0D, 0x64, - 0x40, 0x36, 0x08, 0x64, 0x80, 0x36, 0x0C, 0x64, 0x2D, 0x58, 0xFF, 0xFF, 0x63, 0x5C, 0xA7, 0x84, - 0xEB, 0x83, 0x0C, 0x02, 0x01, 0x03, 0xFB, 0x01, 0x64, 0x44, 0x01, 0x36, 0x0A, 0x64, 0x02, 0x36, - 0x14, 0x64, 0x04, 0x36, 0x37, 0x64, 0x08, 0x36, 0x6E, 0x64, 0x09, 0x00, 0x60, 0x40, 0x01, 0x36, - 0x0A, 0x64, 0x02, 0x36, 0x14, 0x64, 0x04, 0x36, 0x37, 0x64, 0x08, 0x36, 0x6E, 0x64, 0x2D, 0x58, - 0xFF, 0xFF, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, 0x5D, 0xD2, - 0xCF, 0x83, 0xD4, 0x80, 0x25, 0x03, 0x16, 0x03, 0xCF, 0x83, 0x61, 0x44, 0x80, 0xA0, 0x20, 0x03, - 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, 0x5D, 0xD2, 0xCF, 0x83, 0x81, 0xA1, 0x19, 0x03, 0x05, 0x07, - 0x7F, 0xA1, 0xCC, 0x84, 0xDD, 0x81, 0xE6, 0x03, 0xF7, 0x01, 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, - 0xE6, 0x03, 0xF2, 0x01, 0x2C, 0x43, 0x5D, 0xD0, 0xDE, 0xD9, 0x64, 0x44, 0x5D, 0xD0, 0xDE, 0xD9, - 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, 0x7F, 0xA1, 0xF9, 0x04, 0x00, 0xF4, 0x03, 0x61, 0xF6, 0x01, - 0x20, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x01, 0x3A, 0x02, 0x00, 0x16, 0x64, 0x2B, 0x00, 0x02, 0x3A, - 0x02, 0x00, 0x14, 0x64, 0x27, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x12, 0x64, 0x23, 0x00, 0x08, 0x3A, - 0x02, 0x00, 0x10, 0x64, 0x1F, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x0E, 0x64, 0x1B, 0x00, 0x20, 0x3A, - 0x02, 0x00, 0x0C, 0x64, 0x17, 0x00, 0x40, 0x3A, 0x02, 0x00, 0x0A, 0x64, 0x13, 0x00, 0x80, 0x3A, - 0x02, 0x00, 0x08, 0x64, 0x0F, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x06, 0x64, 0x0B, 0x00, 0x02, 0x3B, - 0x02, 0x00, 0x04, 0x64, 0x07, 0x00, 0x04, 0x3B, 0x02, 0x00, 0x02, 0x64, 0x03, 0x00, 0x08, 0x3B, - 0xFF, 0x01, 0x00, 0x64, 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x36, 0x3A, - 0x02, 0x00, 0x00, 0x61, 0x2C, 0x00, 0x30, 0x3A, 0x02, 0x00, 0x02, 0x61, 0x28, 0x00, 0x24, 0x3A, - 0x02, 0x00, 0x04, 0x61, 0x24, 0x00, 0x18, 0x3A, 0x02, 0x00, 0x06, 0x61, 0x20, 0x00, 0x12, 0x3A, - 0x02, 0x00, 0x08, 0x61, 0x1C, 0x00, 0x0C, 0x3A, 0x02, 0x00, 0x0A, 0x61, 0x18, 0x00, 0x09, 0x3A, - 0x02, 0x00, 0x0C, 0x61, 0x14, 0x00, 0x06, 0x3A, 0x02, 0x00, 0x0E, 0x61, 0x10, 0x00, 0x6E, 0x3A, - 0x02, 0x00, 0x10, 0x61, 0x0C, 0x00, 0x37, 0x3A, 0x02, 0x00, 0x12, 0x61, 0x08, 0x00, 0x14, 0x3A, - 0x02, 0x00, 0x14, 0x61, 0x04, 0x00, 0x0A, 0x3A, 0xFF, 0xFF, 0x16, 0x61, 0x00, 0x00, 0x65, 0x40, - 0x01, 0x3A, 0x13, 0x00, 0x66, 0x45, 0x2B, 0x46, 0x92, 0xFA, 0x65, 0x46, 0x26, 0xF2, 0xFF, 0xFF, - 0x60, 0x41, 0x00, 0x7F, 0x60, 0x45, 0x61, 0x47, 0x00, 0x7F, 0xD4, 0x84, 0x66, 0x41, 0x2B, 0x46, - 0x0E, 0xF2, 0x60, 0x45, 0x65, 0x5E, 0x0E, 0xFA, 0x61, 0x46, 0x2E, 0x58, 0xFF, 0xFF, 0xCD, 0x81, - 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x2E, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, - 0x2A, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x04, 0x64, 0x26, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x08, 0x64, - 0x22, 0x00, 0x0C, 0x3A, 0x02, 0x00, 0x10, 0x64, 0x1E, 0x00, 0x12, 0x3A, 0x02, 0x00, 0x20, 0x64, - 0x1A, 0x00, 0x18, 0x3A, 0x02, 0x00, 0x40, 0x64, 0x16, 0x00, 0x24, 0x3A, 0x02, 0x00, 0x80, 0x64, - 0x12, 0x00, 0x30, 0x3A, 0x02, 0x00, 0x01, 0x7F, 0x0E, 0x00, 0x48, 0x3A, 0x02, 0x00, 0x02, 0x7F, - 0x0A, 0x00, 0x60, 0x3A, 0x02, 0x00, 0x04, 0x7F, 0x06, 0x00, 0x6C, 0x3A, 0x02, 0x00, 0x08, 0x7F, - 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x20, 0xFE, 0x2A, 0x45, 0x34, 0x8A, 0x60, 0xFE, 0x61, 0x40, - 0x00, 0x36, 0x02, 0x00, 0xBD, 0xD3, 0xC3, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x53, 0xFB, 0x54, 0xFB, - 0x00, 0x60, 0x0C, 0x63, 0x14, 0x60, 0xEC, 0x62, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x02, 0x64, - 0x0A, 0x60, 0x78, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x0A, 0x60, 0x7A, 0xF3, 0x00, 0x63, 0xF0, 0xA0, - 0x01, 0xA4, 0x03, 0x03, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0xA2, 0xDD, 0x0A, 0x60, 0x7B, 0xF1, - 0xA2, 0xDD, 0x5A, 0xD3, 0xA2, 0xDD, 0xC0, 0x81, 0x61, 0x44, 0x02, 0x24, 0xFF, 0xFF, 0xE9, 0x81, - 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0x5A, 0xD3, 0xE9, 0x81, 0xE8, 0x83, 0xEB, 0x83, 0xEB, 0x83, - 0xEB, 0x83, 0xEB, 0x85, 0xD4, 0x85, 0xC5, 0x83, 0xA2, 0xDD, 0x63, 0x47, 0x00, 0x7F, 0x0A, 0x60, - 0x77, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x7F, 0x67, 0x01, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0xB1, 0xFE, - 0x05, 0x05, 0xB0, 0xFE, 0x06, 0x05, 0xB2, 0xFE, 0xB3, 0xFE, 0x21, 0x00, 0xF7, 0x60, 0x38, 0x78, - 0xFF, 0xFF, 0x28, 0xF3, 0x29, 0xF1, 0x40, 0x44, 0x44, 0x45, 0x2A, 0xF1, 0x2B, 0xF1, 0x44, 0x46, - 0x44, 0x47, 0x3F, 0xB4, 0xE0, 0x85, 0x19, 0x60, 0x06, 0x64, 0x44, 0xD7, 0x58, 0x43, 0xFF, 0xFF, - 0x60, 0x45, 0x0A, 0x60, 0x7E, 0xF3, 0x61, 0x43, 0x04, 0xB4, 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, - 0x06, 0x00, 0x3F, 0xB4, 0xB4, 0x84, 0xFF, 0x27, 0x05, 0xFD, 0x04, 0xFB, 0x10, 0x75, 0xA1, 0xFF, - 0xFF, 0xFF, 0x86, 0x3E, 0xB4, 0xFE, 0x09, 0x05, 0xB5, 0xFE, 0x02, 0x24, 0x7F, 0xF7, 0xFF, 0xFF, - 0xFF, 0xFF, 0xB7, 0xFE, 0x05, 0x05, 0xB6, 0xFE, 0xF2, 0x01, 0xF7, 0x60, 0x73, 0x78, 0xFF, 0xFF, - 0x36, 0x44, 0x00, 0x7F, 0xEE, 0xA0, 0x60, 0x45, 0x05, 0x05, 0x19, 0x60, 0x98, 0x64, 0x44, 0xD7, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x01, 0xE3, 0x01, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, 0x10, 0x64, 0x40, 0x40, 0x02, 0x64, 0x40, 0x50, 0x61, 0xFF, - 0x3F, 0x40, 0x40, 0x26, 0x04, 0x00, 0x10, 0xE0, 0x46, 0x60, 0x09, 0xE0, 0x00, 0x00, 0x27, 0xF1, - 0x00, 0x66, 0x20, 0x78, 0x42, 0xFE, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, - 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x19, 0x02, 0x0A, 0x60, 0x7E, 0xF3, 0x07, 0x7C, 0x20, 0xB5, - 0x0C, 0xB5, 0x04, 0x03, 0x03, 0x02, 0xBC, 0xF9, 0x00, 0x67, 0x0F, 0x00, 0x00, 0x61, 0x41, 0x56, - 0xC7, 0xFE, 0xB5, 0x01, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, - 0x04, 0x00, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x31, 0x02, 0x0A, 0x60, 0x7E, 0xF3, - 0x01, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, 0x03, 0x03, 0x02, 0x02, 0xBC, 0xF9, 0xFF, 0xFF, 0x02, 0x61, - 0x41, 0x56, 0xC7, 0xFE, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x7D, 0xF1, 0x20, 0x44, 0x64, 0x40, - 0xFF, 0x26, 0x1C, 0x00, 0x7F, 0xB4, 0x40, 0x40, 0x5C, 0x5E, 0x82, 0xFF, 0x26, 0x44, 0xFD, 0xB4, - 0x40, 0x46, 0x5C, 0x41, 0x87, 0xFF, 0x62, 0xFF, 0x0F, 0x60, 0x85, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, - 0x60, 0x46, 0x04, 0x03, 0x09, 0xF2, 0x8F, 0xFC, 0xAC, 0x86, 0xFB, 0x01, 0xD3, 0xF3, 0xFF, 0xFF, - 0xFE, 0xB4, 0xD3, 0xFB, 0x06, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x25, 0x46, 0x01, 0xF2, 0x08, 0xF0, 0x60, 0x47, 0x03, 0xB4, 0x03, 0xAC, 0x7F, 0x67, - 0x03, 0x61, 0x08, 0x02, 0x1F, 0x60, 0x26, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, - 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x2B, 0x49, 0x00, 0x25, 0x44, - 0x1F, 0xB4, 0xE0, 0x85, 0xF1, 0x60, 0x76, 0x64, 0xC4, 0x98, 0xFF, 0xFF, 0xC0, 0xFE, 0x3D, 0x00, - 0xC1, 0xFE, 0x3B, 0x00, 0xC2, 0xFE, 0x39, 0x00, 0xC3, 0xFE, 0x37, 0x00, 0xC4, 0xFE, 0x35, 0x00, - 0xC5, 0xFE, 0x33, 0x00, 0xC6, 0xFE, 0x31, 0x00, 0xC7, 0xFE, 0x2F, 0x00, 0xC8, 0xFE, 0x2D, 0x00, - 0xC9, 0xFE, 0x2B, 0x00, 0xCA, 0xFE, 0x29, 0x00, 0xCB, 0xFE, 0x27, 0x00, 0xCC, 0xFE, 0x25, 0x00, - 0xCD, 0xFE, 0x23, 0x00, 0xCE, 0xFE, 0x21, 0x00, 0xCF, 0xFE, 0x1F, 0x00, 0xD0, 0xFE, 0x1D, 0x00, - 0xD1, 0xFE, 0x1B, 0x00, 0xD2, 0xFE, 0x19, 0x00, 0xD3, 0xFE, 0x17, 0x00, 0xD4, 0xFE, 0x15, 0x00, - 0xD5, 0xFE, 0x13, 0x00, 0xD6, 0xFE, 0x11, 0x00, 0xD7, 0xFE, 0x0F, 0x00, 0xD8, 0xFE, 0x0D, 0x00, - 0xD9, 0xFE, 0x0B, 0x00, 0xDA, 0xFE, 0x09, 0x00, 0xDB, 0xFE, 0x07, 0x00, 0xDC, 0xFE, 0x05, 0x00, - 0xDD, 0xFE, 0x03, 0x00, 0xDE, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x00, 0x64, 0x9F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9D, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x9C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x9A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x99, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x98, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x97, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x96, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x95, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x94, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x93, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x92, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x91, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x90, 0xFE, 0xF0, 0x84, - 0x06, 0xFB, 0x8F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8D, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x8C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x8A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x89, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x88, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x87, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x86, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x85, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x84, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x83, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x82, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x81, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x80, 0xFE, 0xF0, 0x84, - 0x05, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x5C, 0x5C, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x24, 0x40, 0x01, 0x27, 0x55, 0x00, 0x05, 0x60, 0x00, 0x63, 0x05, 0xFD, 0x30, 0x44, 0xBD, 0xDB, - 0x31, 0x44, 0xBD, 0xDB, 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, - 0x35, 0x44, 0xBD, 0xDB, 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, - 0x39, 0x44, 0xBD, 0xDB, 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, - 0x3D, 0x44, 0xBD, 0xDB, 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0x02, 0x61, 0x61, 0x44, - 0x02, 0x36, 0x82, 0xFF, 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, - 0x06, 0x36, 0x86, 0xFF, 0x07, 0x36, 0x87, 0xFF, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, - 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, - 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, - 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, - 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0xDD, 0x81, 0x08, 0x3A, 0xD0, 0x01, 0x54, 0x00, - 0x27, 0x40, 0x10, 0x26, 0x30, 0x00, 0x26, 0x44, 0x01, 0x36, 0x2D, 0x00, 0x02, 0x36, 0x82, 0xFF, - 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, - 0x25, 0x44, 0x00, 0x36, 0x44, 0x40, 0x01, 0x36, 0x44, 0x41, 0x02, 0x36, 0x44, 0x42, 0x03, 0x36, - 0x44, 0x43, 0x04, 0x36, 0x44, 0x44, 0x05, 0x36, 0x44, 0x45, 0x06, 0x36, 0x44, 0x46, 0x07, 0x36, - 0x44, 0x47, 0x08, 0x36, 0x44, 0x48, 0x09, 0x36, 0x44, 0x49, 0x0A, 0x36, 0x44, 0x4A, 0x0B, 0x36, - 0x44, 0x4B, 0x0C, 0x36, 0x44, 0x4C, 0x0D, 0x36, 0x44, 0x4D, 0x0E, 0x36, 0x44, 0x4E, 0x0F, 0x36, - 0x44, 0x4F, 0x87, 0xFF, 0x21, 0x00, 0x25, 0x44, 0x10, 0x36, 0x44, 0x50, 0x11, 0x36, 0x44, 0x51, - 0x12, 0x36, 0x44, 0x52, 0x13, 0x36, 0x44, 0x53, 0x14, 0x36, 0x44, 0x54, 0x15, 0x36, 0x44, 0x55, - 0x16, 0x36, 0x44, 0x56, 0x17, 0x36, 0x44, 0x57, 0x18, 0x36, 0x44, 0x58, 0x19, 0x36, 0x44, 0x59, - 0x1A, 0x36, 0x44, 0x5A, 0x1B, 0x36, 0x44, 0x5B, 0x1C, 0x36, 0x44, 0x5C, 0x1D, 0x36, 0x44, 0x5D, - 0x1E, 0x36, 0x44, 0x5E, 0x1F, 0x36, 0x44, 0x5F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0x46, - 0xB5, 0x60, 0x58, 0x4F, 0x4B, 0x78, 0xFF, 0xFF, 0x03, 0x61, 0x7F, 0x67, 0x0A, 0x02, 0x00, 0xF0, - 0x04, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x5A, 0xD9, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, - 0x02, 0x61, 0x12, 0x02, 0x14, 0x64, 0x0F, 0x60, 0x9F, 0xFB, 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, - 0xF2, 0x60, 0xF7, 0x64, 0x7F, 0xFB, 0x2D, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x2A, 0xF3, - 0x05, 0xFB, 0x2B, 0xF3, 0x06, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x0E, 0x02, 0x16, 0x64, 0x0F, 0x60, 0x9F, 0xFB, - 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, 0xF3, 0x60, 0x12, 0x64, 0x7F, 0xFB, 0x2D, 0xFF, 0xF0, 0x60, - 0xC7, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, - 0xA4, 0x80, 0x02, 0x61, 0x35, 0x02, 0x25, 0x45, 0xF1, 0x60, 0x02, 0x64, 0xD4, 0x80, 0xFF, 0xFF, - 0x34, 0x03, 0xF1, 0x60, 0x00, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x01, 0x03, 0x28, 0x00, 0x15, 0x60, - 0xC3, 0xF1, 0x99, 0xF3, 0x19, 0x60, 0x00, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x25, 0x45, 0x1E, 0x60, - 0x96, 0x63, 0x01, 0x61, 0xBD, 0xD3, 0xBD, 0xD1, 0xD4, 0x80, 0xBD, 0xD3, 0xBD, 0xD5, 0xCD, 0x81, - 0x02, 0x03, 0x15, 0x03, 0xF7, 0x01, 0xA2, 0xFF, 0xA6, 0xD3, 0x40, 0x4C, 0x00, 0xA8, 0x67, 0x43, - 0x0C, 0x02, 0xA2, 0xDD, 0x42, 0x48, 0x64, 0x41, 0xB5, 0x60, 0x58, 0x4D, 0xA2, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x28, 0xDB, 0x02, 0x03, 0x2C, 0x58, 0xA3, 0xFF, 0x0C, 0x61, 0x03, 0x00, 0x04, 0x61, - 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xF1, 0x60, 0x02, 0x64, 0xD4, 0x80, - 0x7F, 0x67, 0x06, 0x63, 0xF8, 0x02, 0x31, 0x40, 0x21, 0x2A, 0xF5, 0x01, 0x01, 0x64, 0x0C, 0x60, - 0x82, 0xFB, 0xFF, 0xFF, 0xC4, 0xFE, 0xEE, 0x01, 0xC6, 0xFE, 0xEC, 0x01, 0x7E, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x02, 0x61, 0x3F, 0x02, 0x25, 0x45, 0xF8, 0x2B, 0x3B, 0x00, 0x2E, 0xF5, - 0x67, 0x44, 0xD4, 0x80, 0x19, 0x60, 0xAA, 0x63, 0x39, 0x03, 0x7E, 0x61, 0x24, 0x44, 0x01, 0x27, - 0x29, 0x00, 0xA3, 0xFC, 0xA4, 0xF8, 0xBD, 0xD3, 0xA3, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, - 0x64, 0x58, 0x08, 0xA3, 0xF8, 0x02, 0x08, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xA3, 0xD1, 0xFE, 0xA0, - 0xFA, 0x60, 0x00, 0x64, 0xD0, 0x80, 0x14, 0x02, 0x13, 0x02, 0x04, 0xA3, 0xBE, 0xD3, 0xBD, 0xD1, - 0x0F, 0x18, 0xD4, 0x80, 0x0D, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x64, 0x41, - 0xDD, 0x81, 0xE1, 0x81, 0xCB, 0x83, 0x46, 0x65, 0xF8, 0x60, 0x58, 0x4F, 0x7A, 0x78, 0xFF, 0xFF, - 0x00, 0x67, 0x0A, 0x00, 0xBD, 0xD3, 0xBE, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, 0x64, 0x58, - 0x08, 0xA3, 0xF8, 0x02, 0x04, 0x61, 0x7F, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0F, 0x64, 0x23, 0xFA, - 0x67, 0x44, 0x24, 0xFA, 0x62, 0x41, 0x3E, 0x60, 0x00, 0x65, 0x1A, 0x63, 0xF7, 0x60, 0x8C, 0x64, - 0x65, 0x46, 0x58, 0xD0, 0x2E, 0xF5, 0x59, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x4B, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xE8, 0x84, 0xDC, 0x84, 0x23, 0xFA, 0xBF, 0xD1, 0x4A, 0x65, - 0x64, 0x43, 0xF8, 0x60, 0x58, 0x4F, 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x25, 0xF2, 0xFF, 0xFF, 0xE0, 0xA0, 0x20, 0x64, 0x01, 0x06, 0x25, 0xFA, 0x23, 0xF2, 0xDF, 0xD1, - 0xCC, 0x84, 0xE0, 0x85, 0x0B, 0x06, 0xBF, 0xD1, 0x64, 0x41, 0xD5, 0x80, 0x64, 0x43, 0x01, 0x06, - 0x65, 0x41, 0x4A, 0x65, 0xF4, 0x60, 0x58, 0x4F, 0xBD, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0xBC, 0xF3, 0x02, 0x63, 0x23, 0xFC, 0x07, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x4B, 0xD3, 0xBF, 0xD3, 0x60, 0x41, 0xC9, 0x83, 0xE9, 0x81, 0xDD, 0x81, 0xA3, 0xFA, - 0xE0, 0x81, 0x3C, 0x60, 0x00, 0x67, 0x02, 0x24, 0x02, 0xA4, 0x60, 0x47, 0x40, 0x4B, 0xC9, 0x81, - 0x4A, 0x65, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, - 0x00, 0xF4, 0x04, 0x65, 0xF6, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, - 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x60, 0x47, 0x25, 0xFA, 0x00, 0x7E, 0x60, 0x47, 0x01, 0x26, - 0xDC, 0x84, 0x60, 0x41, 0xE8, 0x84, 0xD8, 0x84, 0x23, 0xFA, 0xAB, 0x01, 0xFC, 0xA3, 0xA3, 0xD1, - 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x00, 0x7F, 0x25, 0xFA, 0x60, 0x41, 0x01, 0x26, 0xDD, 0x81, - 0xE9, 0x84, 0xD8, 0x84, 0x23, 0xFA, 0x9D, 0x01, 0x23, 0xF2, 0x25, 0xF2, 0x02, 0xA8, 0xF8, 0xA0, - 0x0F, 0x02, 0xEC, 0xA0, 0x0D, 0x04, 0x0C, 0x07, 0x15, 0x60, 0xD2, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, - 0xFF, 0xFF, 0x04, 0x07, 0x15, 0x60, 0xD2, 0xFB, 0x15, 0x60, 0xD6, 0xFB, 0x13, 0x60, 0x5B, 0xFB, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x14, 0x60, 0xEE, 0x65, 0x60, 0x41, 0x14, 0x60, - 0x8A, 0x63, 0xA3, 0xDB, 0xFF, 0xA1, 0x48, 0x64, 0x58, 0xD0, 0x7E, 0xA8, 0x5B, 0xD9, 0x02, 0x02, - 0x00, 0xF4, 0x02, 0x64, 0xFF, 0xA1, 0xD7, 0x80, 0x02, 0x03, 0x01, 0x03, 0xF5, 0x01, 0x2E, 0xF5, - 0x00, 0x60, 0x2F, 0x65, 0x25, 0xF2, 0x00, 0x63, 0xCC, 0x84, 0x03, 0xA3, 0xFD, 0x05, 0x4A, 0x64, - 0xD7, 0x80, 0x14, 0x60, 0x26, 0x61, 0x18, 0x05, 0xA1, 0xDD, 0xE3, 0x83, 0xFE, 0xA3, 0x58, 0xD0, - 0x7E, 0xA8, 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x00, 0x63, 0x59, 0xDD, - 0x2E, 0xF5, 0x25, 0xF0, 0x0A, 0x60, 0x13, 0xF3, 0xD3, 0x80, 0x01, 0xB0, 0x04, 0x03, 0x01, 0xA4, - 0x03, 0x03, 0xA2, 0xDB, 0x01, 0x00, 0xA2, 0xDD, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x14, 0x60, - 0x8A, 0x61, 0xA1, 0xD3, 0x23, 0xFA, 0xE0, 0x83, 0x4A, 0x65, 0x04, 0x02, 0x02, 0x63, 0x23, 0xFC, - 0xA5, 0xFC, 0x09, 0x00, 0xDB, 0x83, 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, - 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0A, 0x60, 0x13, 0xF3, - 0x00, 0x61, 0x02, 0xA4, 0xFE, 0xA0, 0x23, 0xFA, 0x1B, 0x03, 0xFA, 0xA4, 0xFD, 0xA4, 0x01, 0xA1, - 0xFD, 0x07, 0x61, 0x43, 0x23, 0xF2, 0x25, 0xFC, 0xE0, 0x83, 0x02, 0xA3, 0x14, 0x60, 0x26, 0x61, - 0x00, 0x60, 0x4A, 0x64, 0x59, 0xD1, 0x58, 0xD8, 0x7E, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x64, - 0xF9, 0x1F, 0x25, 0xF2, 0x23, 0xF2, 0x01, 0xB0, 0xCC, 0x84, 0x04, 0x02, 0x23, 0xFA, 0x02, 0x00, - 0x00, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x41, 0x4B, 0x65, 0x42, 0x80, 0x64, - 0xD4, 0x85, 0x2B, 0x41, 0x00, 0xA1, 0x55, 0x8B, 0x0D, 0x03, 0x02, 0x04, 0x65, 0x41, 0x02, 0x00, - 0x00, 0x64, 0x40, 0x4B, 0xCA, 0x84, 0x58, 0xD0, 0xC9, 0x81, 0xBD, 0xD9, 0xFC, 0x02, 0x00, 0xF4, - 0x04, 0x65, 0xEC, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD3, 0x02, 0x7C, 0xA0, 0xD3, - 0x23, 0xF8, 0xDC, 0x84, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, - 0x01, 0x64, 0x9D, 0xFE, 0x02, 0x28, 0x02, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x02, 0x7C, 0x23, 0xF8, 0x01, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, - 0xA3, 0xD1, 0x02, 0x64, 0x23, 0xFA, 0x64, 0x44, 0x7C, 0x5F, 0x60, 0x45, 0x64, 0x47, 0x7C, 0x5F, - 0x88, 0xF1, 0x66, 0x41, 0xC0, 0x86, 0xA5, 0xD2, 0x61, 0x46, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, 0x88, 0xFF, 0x75, 0x44, 0x8D, 0xFF, 0xE8, 0x87, 0xE8, 0x84, - 0xE8, 0x84, 0x03, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x05, 0x64, 0x23, 0xFA, - 0x52, 0x63, 0x96, 0xF3, 0x4B, 0xDA, 0x95, 0xF3, 0x4B, 0xDA, 0x94, 0xF3, 0x4B, 0xDA, 0x60, 0x41, - 0x88, 0xFF, 0x72, 0x5C, 0x89, 0xFF, 0x4A, 0xD8, 0xA2, 0x48, 0x20, 0x23, 0x0E, 0x00, 0x64, 0x40, - 0x80, 0x27, 0x15, 0x00, 0xDC, 0x84, 0xBD, 0xDA, 0xBD, 0xD2, 0x11, 0x04, 0xDC, 0x84, 0xA2, 0xDA, - 0xA3, 0xD2, 0x0D, 0x04, 0xDC, 0x84, 0xA3, 0xDA, 0x0A, 0x00, 0x52, 0x63, 0x96, 0xF3, 0x4B, 0xDA, - 0x95, 0xF3, 0x4B, 0xDA, 0x94, 0xF3, 0x4B, 0xDA, 0x54, 0x90, 0x4C, 0x63, 0xE0, 0x02, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF0, 0x23, 0xF2, 0x15, 0x60, 0xC9, 0xF9, 0x02, 0xA8, 0x64, 0x44, - 0x1F, 0x02, 0x3F, 0x40, 0x02, 0x2B, 0x16, 0x00, 0x00, 0x37, 0x14, 0x00, 0x01, 0x3B, 0x18, 0x00, - 0x11, 0x60, 0xF9, 0x65, 0x11, 0x60, 0x19, 0x63, 0xFF, 0xB7, 0x60, 0x5C, 0xA3, 0xD3, 0x08, 0xA3, - 0x00, 0x7E, 0xD0, 0x80, 0xD7, 0x80, 0x03, 0x03, 0xF9, 0x02, 0x7F, 0x67, 0x0A, 0x00, 0xF4, 0xA3, - 0xA3, 0xD1, 0x04, 0x00, 0x00, 0xBC, 0xF2, 0xA4, 0x03, 0x03, 0x02, 0x07, 0x13, 0x60, 0x52, 0xF9, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x20, 0x63, 0x27, 0x60, 0x06, 0x61, 0x48, 0x64, 0x58, 0xD0, - 0x59, 0xD9, 0xFD, 0x1F, 0x25, 0xF0, 0x20, 0x64, 0xD0, 0x81, 0xFF, 0xFF, 0x02, 0x07, 0x25, 0xFA, - 0x0F, 0x00, 0x27, 0x60, 0x0A, 0x63, 0xC3, 0x83, 0x01, 0x2A, 0x06, 0x00, 0xCF, 0x83, 0xA3, 0xD3, - 0xCD, 0x81, 0x00, 0x7F, 0xBD, 0xDB, 0x04, 0x03, 0x00, 0x64, 0xC9, 0x81, 0xBD, 0xDB, 0xFD, 0x02, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x01, 0x60, 0x6E, 0x63, 0x7F, 0x67, - 0x3A, 0x18, 0xA3, 0xD9, 0x26, 0xF0, 0x7F, 0x67, 0x36, 0x18, 0x5B, 0xD9, 0x13, 0x60, 0x0A, 0xF3, - 0x25, 0xF0, 0x60, 0x40, 0x03, 0x3A, 0x2E, 0x00, 0x86, 0xF3, 0x87, 0xF3, 0x60, 0x43, 0xE3, 0x83, - 0x60, 0x46, 0x0F, 0xF8, 0x30, 0x61, 0x94, 0xFA, 0x01, 0x61, 0x91, 0xFA, 0x16, 0x64, 0x12, 0xFA, - 0x60, 0x40, 0x10, 0x36, 0x05, 0x00, 0x12, 0x36, 0x08, 0x00, 0x0C, 0x36, 0x0B, 0x00, 0x0F, 0x00, - 0x40, 0x61, 0xA1, 0x80, 0x0A, 0x64, 0x11, 0x02, 0xF3, 0x01, 0x10, 0x61, 0xA1, 0x80, 0x0E, 0x64, - 0x0C, 0x02, 0xEE, 0x01, 0x08, 0x61, 0xA1, 0x80, 0x10, 0x64, 0x07, 0x02, 0xE9, 0x01, 0xE1, 0x81, - 0xA1, 0x80, 0x05, 0x05, 0xC8, 0x84, 0x01, 0x02, 0xE3, 0x01, 0x12, 0xFA, 0x91, 0xFA, 0x66, 0x44, - 0x02, 0xA6, 0xD7, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA5, 0xF0, 0xA3, 0xD1, - 0xFF, 0xFF, 0x64, 0x5E, 0x00, 0x7F, 0x60, 0x41, 0x64, 0x47, 0x7C, 0x5F, 0x88, 0xF1, 0x66, 0x43, - 0xC0, 0x86, 0x65, 0x44, 0xA1, 0xDA, 0x63, 0x46, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, - 0xA3, 0xD1, 0xFF, 0xFF, 0x64, 0x5E, 0x00, 0x7F, 0x60, 0x45, 0x64, 0x47, 0x7C, 0x5F, 0x88, 0xF1, - 0x66, 0x41, 0xC0, 0x86, 0x65, 0x44, 0xA0, 0xD2, 0x61, 0x46, 0x25, 0xFA, 0x02, 0x64, 0x23, 0xFA, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x15, 0x60, 0xC8, 0xFB, 0xFF, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x02, 0x02, 0x2D, 0xF9, - 0x2C, 0xF9, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF2, 0x02, 0xA8, 0x00, 0xA8, 0x0A, 0x02, - 0x07, 0x03, 0xD0, 0xA0, 0x30, 0x65, 0x03, 0x04, 0xA7, 0xA0, 0x59, 0x65, 0x01, 0x06, 0x65, 0x44, - 0x13, 0x60, 0x51, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x15, 0x60, 0xCF, 0xFB, - 0xFF, 0xFF, 0x08, 0x2A, 0x25, 0x00, 0x15, 0x60, 0xDD, 0xF3, 0xFF, 0xFF, 0xE9, 0xB4, 0x60, 0x44, - 0x15, 0x60, 0xCF, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x26, 0x02, 0xBC, 0x64, 0x40, 0x02, 0x2A, - 0x04, 0xBC, 0x64, 0x40, 0x04, 0x26, 0x08, 0x00, 0x15, 0x60, 0xDD, 0xFB, 0x13, 0x64, 0xAD, 0xFB, - 0x01, 0x60, 0x67, 0x64, 0x37, 0xFB, 0x0C, 0x00, 0x10, 0xBC, 0x15, 0x60, 0xDD, 0xFB, 0x08, 0x64, - 0xAD, 0xFB, 0x82, 0xF3, 0x01, 0x60, 0x67, 0x7C, 0x60, 0x40, 0x01, 0x27, 0x5B, 0x7C, 0x37, 0xF9, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x15, 0x60, 0xD0, 0xFB, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x25, 0xF2, 0x15, 0x60, 0xD1, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, - 0x15, 0x60, 0xEB, 0xFB, 0xFF, 0xFF, 0x0F, 0x22, 0x41, 0x75, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x04, 0x61, 0x06, 0x00, 0x01, 0x64, 0x01, 0x00, 0x00, 0x64, 0x18, 0x60, 0x13, 0xFB, 0x06, 0x61, - 0x41, 0x56, 0xC7, 0xFE, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x78, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, 0x08, 0x61, - 0x41, 0x56, 0xC7, 0xFE, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, - 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x03, 0x00, 0x04, 0x7C, 0xBC, 0xF9, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x78, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, - 0x0A, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, - 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x03, 0x00, 0x01, 0x7C, 0xBC, 0xF9, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x63, 0x64, 0xF3, 0x23, 0xFC, 0x60, 0x40, 0x01, 0x23, 0x17, 0x00, - 0x01, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x11, 0x60, 0x14, 0x61, 0x11, 0x60, 0xF4, 0x65, 0xA1, 0xD1, - 0xD5, 0x80, 0xD0, 0x80, 0x0B, 0x03, 0x02, 0x03, 0x08, 0xA1, 0xF9, 0x01, 0x04, 0xA1, 0xA1, 0xD3, - 0x01, 0x60, 0x00, 0x65, 0x60, 0x47, 0xFF, 0xB4, 0xB4, 0x84, 0x01, 0x00, 0xFF, 0x64, 0x25, 0xFA, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x46, 0x45, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, - 0xD0, 0x80, 0x00, 0xF4, 0x01, 0xF2, 0x66, 0x5C, 0x25, 0x46, 0x56, 0x02, 0x70, 0x27, 0x54, 0x00, - 0x12, 0x64, 0x03, 0xFA, 0x04, 0xF8, 0x0E, 0xF2, 0x87, 0xFC, 0x8D, 0xFC, 0x8E, 0xFC, 0xDA, 0x82, - 0x16, 0x61, 0x00, 0x63, 0xC9, 0x81, 0x5A, 0xDC, 0xFD, 0x02, 0x60, 0x40, 0xF0, 0x3B, 0x16, 0x00, - 0x32, 0x44, 0x8E, 0xF3, 0x01, 0xB0, 0xF6, 0xA0, 0x08, 0x24, 0x2C, 0x05, 0xDC, 0x83, 0xF0, 0x67, - 0x0E, 0xFA, 0x1F, 0x60, 0x0A, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0x8E, 0xFD, 0x2B, 0xFF, 0xFE, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x4F, 0x00, 0x8F, 0xF3, 0x09, 0x65, - 0xD4, 0x80, 0xDC, 0x83, 0x17, 0x05, 0x8F, 0xFD, 0x98, 0xFE, 0x04, 0x04, 0x00, 0x7F, 0x08, 0x7E, - 0x0E, 0xFA, 0x3B, 0xFF, 0x1E, 0x60, 0xFE, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0x0E, 0xF2, 0x2B, 0xFF, 0x60, 0x40, 0x08, 0x26, 0xF7, 0xFE, 0xFD, 0x64, 0x3B, 0x42, - 0x4A, 0xDB, 0x32, 0x00, 0x8B, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, 0xFF, 0xFF, 0x0D, 0x04, 0x1F, 0x60, - 0x16, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xFC, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x21, 0x00, 0x46, 0x45, 0x00, 0x64, 0x2B, 0xDB, 0x25, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, - 0x0A, 0x18, 0x70, 0x67, 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, - 0x25, 0x44, 0x80, 0xFC, 0x05, 0xFA, 0xB6, 0x60, 0x58, 0x4E, 0x72, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, - 0xA3, 0xFF, 0xFF, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0xD4, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, - 0x1F, 0x60, 0x04, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x0D, 0x00, 0x1E, 0x60, 0xF8, 0x64, 0x40, 0x47, - 0x58, 0x4F, 0x18, 0x00, 0x1F, 0x60, 0x10, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x03, 0x00, 0xF0, 0x60, - 0xC7, 0x78, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x0B, 0x18, 0x60, 0x40, 0x01, 0x2A, 0x08, 0x00, - 0x1F, 0x60, 0x26, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, 0xF2, 0x01, - 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x14, 0x18, 0x60, 0x40, 0x01, 0x2A, 0x11, 0x00, - 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0x8F, 0xF3, 0x02, 0x02, 0xCC, 0x84, - 0x8F, 0xFB, 0x1F, 0x60, 0x26, 0x64, 0x40, 0x4B, 0xF6, 0x60, 0x58, 0x4D, 0xB3, 0x78, 0xFF, 0xFF, - 0xE9, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFB, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0xA2, 0xFF, 0x92, 0xF3, - 0x8E, 0xF3, 0xCC, 0x80, 0xFA, 0xA0, 0x01, 0x14, 0x1D, 0x05, 0xB5, 0x60, 0x58, 0x4D, 0x77, 0x78, - 0xFF, 0xFF, 0xA2, 0xFF, 0x17, 0x03, 0xF0, 0x67, 0x0E, 0xFA, 0x1F, 0x60, 0x0A, 0x64, 0x0F, 0x60, - 0x93, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF6, 0x64, - 0x3A, 0x42, 0x4A, 0xDB, 0x92, 0xF3, 0x8E, 0xF3, 0xCC, 0x83, 0xDC, 0x84, 0x01, 0x15, 0x92, 0xFD, - 0x8E, 0xFB, 0xD4, 0xFE, 0x91, 0xF3, 0x8F, 0xF3, 0x00, 0xA8, 0x90, 0xF1, 0x03, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x26, 0x05, 0xB5, 0x60, 0x58, 0x4D, 0x77, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x20, 0x03, - 0x00, 0x63, 0x91, 0xF3, 0x0E, 0xFC, 0xCC, 0x84, 0xFF, 0x3A, 0x91, 0xFB, 0x98, 0xFE, 0x03, 0x04, - 0x08, 0xBB, 0x0E, 0xFC, 0x3B, 0xFF, 0x1E, 0x60, 0xFE, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF7, 0x64, 0x3A, 0x42, 0x4A, 0xDB, - 0x8F, 0xF3, 0x0E, 0xF2, 0xDC, 0x83, 0x08, 0xB0, 0x8F, 0xFD, 0x08, 0x28, 0xF7, 0xFE, 0xD4, 0xFE, - 0xA3, 0xFF, 0xF0, 0x60, 0xC7, 0x78, 0xFF, 0xFF, 0xB9, 0xFE, 0x13, 0xFF, 0x24, 0x40, 0x80, 0x2B, - 0x0B, 0x00, 0xA2, 0xFF, 0x25, 0x46, 0x09, 0xF4, 0x0E, 0xF2, 0x05, 0x18, 0x08, 0xBC, 0x0E, 0xFA, - 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0x00, 0xD8, 0xFE, 0xA3, 0xFF, 0x25, 0x46, 0x3E, 0xF2, 0x00, 0xF4, - 0x08, 0xF0, 0x25, 0x46, 0x06, 0xB4, 0xFF, 0x7F, 0x10, 0xBC, 0x06, 0x26, 0xFD, 0x7F, 0x0E, 0xFA, - 0x3E, 0xF2, 0x3F, 0xF2, 0x60, 0x41, 0x08, 0x2A, 0x64, 0x47, 0x3F, 0xFA, 0x60, 0x45, 0x13, 0x60, - 0x2D, 0xF3, 0xA3, 0xFC, 0xAB, 0xFC, 0x91, 0xFC, 0xD4, 0x80, 0x38, 0x60, 0xC1, 0x65, 0xA5, 0x80, - 0x01, 0x04, 0x07, 0x03, 0x23, 0xF0, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xF8, 0x60, 0x57, 0x78, - 0xFF, 0xFF, 0xFB, 0x60, 0x58, 0x4F, 0x75, 0x78, 0xFF, 0xFF, 0x0B, 0x04, 0x23, 0xF0, 0x04, 0x64, - 0xB0, 0x84, 0xA2, 0xDA, 0x25, 0x60, 0xF4, 0x64, 0xE5, 0x60, 0x78, 0x41, 0xC7, 0x78, 0x97, 0xF1, - 0x46, 0x00, 0x3E, 0xF0, 0x88, 0xF1, 0x64, 0x47, 0x07, 0xB4, 0x07, 0x36, 0x3B, 0x00, 0x04, 0x03, - 0xCC, 0x84, 0xE0, 0x84, 0xC0, 0x83, 0x2D, 0x00, 0x2C, 0xF2, 0x87, 0xF1, 0x01, 0xB0, 0x64, 0x43, - 0x35, 0x02, 0x2E, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, - 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, - 0x06, 0x02, 0x61, 0x46, 0x2C, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, - 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, - 0x09, 0x00, 0x66, 0x45, 0x63, 0x46, 0x06, 0xF0, 0x65, 0x46, 0x64, 0x44, 0x0C, 0x26, 0x02, 0x00, - 0x02, 0x26, 0x04, 0x00, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xFC, 0x23, 0xF2, - 0xFF, 0xFF, 0x0F, 0x1B, 0x1E, 0x60, 0xE0, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC8, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, - 0x0E, 0x00, 0x1E, 0x60, 0xF2, 0x64, 0x0F, 0x60, 0x93, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xCE, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0xF0, 0x60, - 0xC7, 0x78, 0xFF, 0xFF, 0xCB, 0x84, 0xC9, 0x83, 0xFF, 0xFF, 0x08, 0x04, 0x58, 0xD1, 0xA5, 0xD8, - 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x2F, 0x58, 0xFF, 0xFF, - 0x25, 0xF0, 0x14, 0x60, 0x15, 0xF9, 0x11, 0x00, 0x0D, 0x60, 0x00, 0x62, 0x40, 0x63, 0x5A, 0xDF, - 0xFE, 0x1F, 0x04, 0x65, 0x0D, 0x60, 0x00, 0x61, 0x48, 0x64, 0x3E, 0x63, 0x7C, 0xA8, 0x58, 0xD0, - 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x14, 0x60, 0x15, 0xF1, 0x0C, 0x60, - 0xDC, 0x65, 0x02, 0xFE, 0x64, 0x44, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x87, 0x60, 0x41, 0x64, 0x44, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x84, 0x3E, 0xFB, 0x60, 0x42, 0x61, 0x44, 0x03, 0xA2, 0x60, 0xFE, - 0xA2, 0xDB, 0x20, 0xFE, 0x64, 0x44, 0x0D, 0x60, 0x02, 0x65, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xC4, 0x84, 0x40, 0xFB, 0xFF, 0xFF, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, - 0x5C, 0x41, 0x25, 0xF2, 0xFF, 0xFF, 0x40, 0x42, 0x80, 0x2B, 0x04, 0x00, 0xFF, 0xB4, 0x40, 0x42, - 0x01, 0x64, 0x40, 0x41, 0x87, 0xF3, 0x46, 0x4B, 0x86, 0xF3, 0x60, 0x46, 0xE0, 0x83, 0xAB, 0x46, - 0x26, 0xF0, 0xAB, 0x46, 0x59, 0xF8, 0xAB, 0x46, 0x27, 0xF0, 0xAB, 0x46, 0x5A, 0xF8, 0xAB, 0x46, - 0x28, 0xF0, 0xAB, 0x46, 0x5B, 0xF8, 0x66, 0x44, 0x02, 0xA6, 0xF1, 0x1F, 0x87, 0xF3, 0xFF, 0xFF, - 0x60, 0x46, 0xAB, 0x46, 0x0C, 0x60, 0x3A, 0x65, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0xC9, 0x81, 0x52, 0x64, 0x0E, 0x63, 0x58, 0xD0, 0x59, 0xD9, - 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF0, 0xA1, 0x76, 0x64, 0x0E, 0x63, - 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0x0C, 0x60, 0x9C, 0x65, 0xC4, 0x81, 0x60, 0x45, 0xC9, 0x81, 0x62, 0x64, 0x06, 0x63, - 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF8, 0xA1, - 0xB6, 0x64, 0x06, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x65, 0x44, 0x0C, 0x60, - 0xBC, 0x65, 0xC4, 0x81, 0xC9, 0x81, 0x6A, 0x64, 0x06, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, - 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x84, 0x0C, 0x60, 0x82, 0x65, 0xC4, 0x81, - 0x72, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0xAB, 0x46, 0x21, 0x44, 0x01, 0x2A, - 0x06, 0x00, 0xFA, 0xA1, 0x90, 0x64, 0x04, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0x3B, 0xF0, - 0x21, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x22, 0x44, 0x3D, 0xFB, 0x60, 0x41, 0x02, 0xFE, 0xF8, 0x84, - 0xF8, 0x84, 0xF8, 0x84, 0x3C, 0xFB, 0x0C, 0x60, 0x7E, 0x63, 0x88, 0xFF, 0xCD, 0x81, 0x06, 0xA3, - 0xFD, 0x0D, 0x8D, 0xFF, 0x3B, 0xFD, 0x64, 0x47, 0x80, 0xBF, 0x60, 0x5C, 0x22, 0x43, 0x80, 0x61, - 0x88, 0xFF, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0xB1, 0x84, - 0x3B, 0xFA, 0x86, 0xF3, 0xFF, 0xFF, 0xCC, 0x83, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0x3B, 0xF0, - 0x66, 0x44, 0xB1, 0x9C, 0x3B, 0xF8, 0x02, 0xA6, 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, - 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x24, 0x02, 0x3D, 0xF1, - 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, 0xD0, 0x80, 0x87, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xBB, 0xF4, - 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, 0xEB, 0x83, 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, 0xE1, 0x81, - 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0x9D, 0x85, 0xA7, 0x83, 0x3B, 0xFC, 0x86, 0xF3, - 0xFF, 0xFF, 0xCC, 0x83, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0xBB, 0xF2, 0x66, 0x44, 0xA5, 0x81, - 0xBB, 0xFA, 0x02, 0xA6, 0xFA, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x11, 0x64, 0x23, 0xFA, - 0x25, 0x44, 0x24, 0xFA, 0x04, 0x64, 0x40, 0x4B, 0x62, 0x41, 0x0C, 0x60, 0x82, 0x64, 0x04, 0x63, - 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x2B, 0x43, 0x00, 0x7C, 0x59, 0xD8, 0x4F, 0x8B, 0x06, 0xA4, - 0xF6, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x2A, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, - 0x30, 0x7C, 0xB0, 0x84, 0xA2, 0xDA, 0x4E, 0x61, 0x76, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, - 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x90, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, - 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, 0xA0, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, - 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, 0xB6, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, - 0x58, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, - 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, - 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, - 0x01, 0x03, 0x0D, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, 0x30, 0x61, 0x9D, 0x85, - 0xA4, 0x84, 0xA2, 0xDA, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, - 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x40, 0x41, 0x4A, 0x64, 0xA0, 0xD2, 0xFF, 0xFF, - 0x40, 0x42, 0x80, 0x2B, 0x04, 0x00, 0xFF, 0xB4, 0x40, 0x42, 0x01, 0x64, 0x40, 0x41, 0x87, 0xF3, - 0x46, 0x4B, 0x86, 0xF3, 0x60, 0x46, 0xE0, 0x83, 0xAB, 0x46, 0x32, 0xF0, 0xAB, 0x46, 0x59, 0xF8, - 0xAB, 0x46, 0x33, 0xF0, 0xAB, 0x46, 0x5A, 0xF8, 0xAB, 0x46, 0x34, 0xF0, 0xAB, 0x46, 0x5B, 0xF8, - 0x66, 0x44, 0x02, 0xA6, 0xF1, 0x1F, 0x87, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xAB, 0x46, 0x0C, 0x60, - 0x3A, 0x65, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, - 0xC9, 0x81, 0x4A, 0x64, 0x0E, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, - 0x08, 0x00, 0xAB, 0x46, 0xF0, 0xA1, 0x76, 0x64, 0x0E, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, - 0xAB, 0x46, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x84, 0x0C, 0x60, 0x82, 0x65, - 0xC4, 0x81, 0x5A, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0xAB, 0x46, 0x21, 0x44, - 0x01, 0x2A, 0x06, 0x00, 0xFA, 0xA1, 0x90, 0x64, 0x04, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, - 0x3B, 0xF0, 0x21, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x22, 0x44, 0x3D, 0xFB, 0x60, 0x41, 0x02, 0xFE, - 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x84, 0x3C, 0xFB, 0x0C, 0x60, 0x7E, 0x63, 0x88, 0xFF, 0xCD, 0x81, - 0x06, 0xA3, 0xFD, 0x0D, 0x8D, 0xFF, 0x3B, 0xFD, 0x64, 0x47, 0x80, 0xBF, 0x60, 0x5C, 0x22, 0x43, - 0x80, 0x61, 0x88, 0xFF, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, - 0xB1, 0x84, 0x3B, 0xFA, 0x86, 0xF3, 0xFF, 0xFF, 0xCC, 0x83, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, - 0x3B, 0xF0, 0x66, 0x44, 0xB1, 0x9C, 0x3B, 0xF8, 0x02, 0xA6, 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, - 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x24, 0x02, - 0x3D, 0xF1, 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, 0xD0, 0x80, 0x87, 0xF3, 0xFF, 0xFF, 0x60, 0x46, - 0xBB, 0xF4, 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, 0xEB, 0x83, 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, - 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0x9D, 0x85, 0xA7, 0x83, 0x3B, 0xFC, - 0x86, 0xF3, 0xFF, 0xFF, 0xCC, 0x83, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0xBB, 0xF2, 0x66, 0x44, - 0xA5, 0x81, 0xBB, 0xFA, 0x02, 0xA6, 0xFA, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, - 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x21, 0x00, 0x43, 0x4B, - 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, 0x30, 0x7C, 0xB0, 0x84, 0xA2, 0xDA, 0x4E, 0x61, 0x76, 0x64, - 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x90, 0x64, 0x04, 0x63, - 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xA0, 0x64, 0x04, 0x63, 0xAB, 0x46, - 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, - 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0x15, 0x60, 0x02, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0x87, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x0D, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, - 0x30, 0x61, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDA, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x3E, 0xF2, 0xAB, 0xF1, 0x08, 0xB0, - 0x19, 0xF8, 0x4A, 0x02, 0x07, 0x23, 0x2B, 0x00, 0x60, 0x47, 0x07, 0xB4, 0x88, 0xF1, 0xCC, 0x84, - 0xE0, 0x84, 0x40, 0x8A, 0xAA, 0x46, 0x03, 0xF2, 0x04, 0xF0, 0x05, 0xF2, 0x60, 0x43, 0xAA, 0x46, - 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0xCB, 0xF1, 0x2F, 0xF8, 0xCC, 0xF1, 0x30, 0xF8, 0xCD, 0xF1, - 0x31, 0xF8, 0x46, 0x4A, 0x00, 0xF4, 0x02, 0xF2, 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, - 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, 0xAA, 0x46, 0x05, 0xF2, 0x06, 0xF0, 0x07, 0xF2, 0x60, 0x43, - 0xAA, 0x46, 0x36, 0xFC, 0x37, 0xF8, 0x38, 0xFA, 0x03, 0x60, 0x08, 0x64, 0x1C, 0x00, 0x66, 0xF1, - 0x2F, 0xF8, 0x67, 0xF1, 0x30, 0xF8, 0x68, 0xF1, 0x31, 0xF8, 0x46, 0x4A, 0x00, 0xF4, 0x02, 0xF2, - 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0xAA, 0x46, - 0x05, 0xF2, 0x06, 0xF0, 0x07, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, - 0x02, 0x60, 0x08, 0x64, 0x00, 0x00, 0x2A, 0xFA, 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x42, 0x6F, - 0x6F, 0x74, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x21, 0x21, 0x20, 0x20, 0x00, 0x53, 0x54, 0x41, 0x2F, - 0x41, 0x50, 0x20, 0x46, 0x75, 0x6E, 0x63, 0x27, 0x73, 0x00, 0x20, 0x00, 0x03, 0x00, 0x01, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x06, 0x00, 0x07, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, - 0x07, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, - -}; /* fw_image_4_data */ - -static const CFG_IDENTITY_STRCT fw_image_infoidentity[] = { - { - sizeof(CFG_IDENTITY_STRCT) / sizeof(hcf_16) - 1, - CFG_FW_IDENTITY, - COMP_ID_FW_AP, - 3, /* Variant */ - 1, /* Major */ - 24 /* Minor */ - }, - { 0000, 0000, 0000, 0000, 0000, 0000 } /* endsentinel */ -}; - -static const CFG_PROG_STRCT fw_image_code[] = { - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x0148, /* sizeof(fw_image_1_data), */ - 0x00000060, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_1_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x2432, /* sizeof(fw_image_2_data), */ - 0x00000C16, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_2_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x194c, /* sizeof(fw_image_3_data), */ - 0x001E3048, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_3_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode*/ - 0xb7e4, /* sizeof(fw_image_4_data),*/ - 0x001F4000, /* Target address in NIC Memory*/ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary*/ - (hcf_8 *)fw_image_4_data - }, - { - 5, - CFG_PROG, - CFG_PROG_STOP, /* mode*/ - 0000, - 0x000F2101, /* Start execution address*/ - }, - { 0000, 0000, 0000, 0000, 00000000, 0000, 00000000} -}; - -static const CFG_RANGE20_STRCT fw_image_infocompat[] = { - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_FW_SUP_RANGE, - COMP_ROLE_SUPL, - COMP_ID_APF, - { - { 4, 1, 1 } /* variant, bottom, top*/ - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_MFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_MFI, - { - { 7, 3, 3 }, /* variant, bottom, top */ - { 8, 1, 1 } /* variant, bottom, top */ - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_CFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_CFI, - { - { 4, 1, 2 } /* variant, bottom, top */ - } - }, - { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } /* endsentinel */ -}; - -memimage fw_image = { - "FUPU7D37dhfwci\001C", /* signature, , C/Bin type */ - (CFG_PROG_STRCT *) fw_image_code, - 0x000F2101, - 00000000, /* (dummy) pdaplug */ - 00000000, /* (dummy) priplug */ - (CFG_RANGE20_STRCT *) fw_image_infocompat, - (CFG_IDENTITY_STRCT *) fw_image_infoidentity, -}; - diff --git a/drivers/staging/wlags49_h2/debug.h b/drivers/staging/wlags49_h2/debug.h deleted file mode 100644 index 40f6a3ee7408..000000000000 --- a/drivers/staging/wlags49_h2/debug.h +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file contains definitions and macros for debugging. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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 (c) 2003 Agere Systems Inc. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef _DEBUG_H -#define _DEBUG_H - - - - -/* Turn on debugging here if not done with a preprocessor define */ -#ifndef DBG -#define DBG 0 -#else -#undef DBG -#define DBG 1 -#endif /* DBG */ - - - - -#if DBG -/****************************************************************************/ - -/* Set the level of debugging if not done with a preprocessor define. See - wl_main.c, init_module() for how the debug level translates into the - the types of messages displayed */ -#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*/ - - -#define DBG_ERROR_ON 0x00000001L -#define DBG_WARNING_ON 0x00000002L -#define DBG_NOTICE_ON 0x00000004L -#define DBG_TRACE_ON 0x00000008L -#define DBG_VERBOSE_ON 0x00000010L -#define DBG_PARAM_ON 0x00000020L -#define DBG_BREAK_ON 0x00000040L -#define DBG_RX_ON 0x00000100L -#define DBG_TX_ON 0x00000200L -#define DBG_DS_ON 0x00000400L - -#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) - - -#ifndef DBG_PRINT -# define DBG_PRINT(S...) printk(KERN_DEBUG S) -#endif /* DBG_PRINT */ - - -#ifndef DBG_PRINTC -# define DBG_PRINTC(S...) printk(S) -#endif /* DBG_PRINTC */ - - -#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...) do { \ - if (DBG_FLAGS(A) & DBG_ERROR_ON) { \ - DBG_PRINT("%s:ERROR:%s ", DBG_NAME(A), __func__); \ - DBG_PRINTC(S); \ - } } while (0) - - -#define DBG_WARNING(A, S...) do { \ - if (DBG_FLAGS(A) & DBG_WARNING_ON) { \ - DBG_PRINT("%s:WARNING:%s ", DBG_NAME(A), __func__); \ - DBG_PRINTC(S); \ - } } while (0) - - -#define DBG_NOTICE(A, S...) do { \ - if (DBG_FLAGS(A) & DBG_NOTICE_ON) { \ - DBG_PRINT("%s:NOTICE:%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_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_ASSERT(C) do { \ - if (!(C)) { \ - DBG_PRINT("ASSERT(%s) -- %s#%d (%s)\n", \ - #C, __FILE__, __LINE__, __func__); \ - } } while (0) - -struct dbg_info { - char *dbgName; - int dbgLevel; - unsigned long DebugFlag; -}; - -extern struct dbg_info *DbgInfo; - - -/****************************************************************************/ -#else /* DBG */ -/****************************************************************************/ - -#define DBG_PRINT(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 /* _DEBUG_H */ - diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c deleted file mode 100644 index 4877464f04b0..000000000000 --- a/drivers/staging/wlags49_h2/dhf.c +++ /dev/null @@ -1,380 +0,0 @@ - -/************************************************************************************************************** -* -* FILE : DHF.C -* -* DATE : $Date: 2004/07/19 08:16:14 $ $Revision: 1.2 $ -* Original : 2004/05/28 14:05:34 Revision: 1.36 Tag: hcf7_t20040602_01 -* Original : 2004/05/11 06:22:57 Revision: 1.32 Tag: hcf7_t7_20040513_01 -* Original : 2004/04/15 09:24:42 Revision: 1.28 Tag: hcf7_t7_20040415_01 -* Original : 2004/04/08 15:18:16 Revision: 1.27 Tag: t7_20040413_01 -* Original : 2004/04/01 15:32:55 Revision: 1.25 Tag: t7_20040401_01 -* Original : 2004/03/10 15:39:28 Revision: 1.21 Tag: t20040310_01 -* Original : 2004/03/04 11:03:37 Revision: 1.19 Tag: t20040304_01 -* Original : 2004/03/02 09:27:11 Revision: 1.17 Tag: t20040302_03 -* Original : 2004/02/24 13:00:28 Revision: 1.15 Tag: t20040224_01 -* Original : 2004/02/19 10:57:28 Revision: 1.14 Tag: t20040219_01 -* Original : 2003/11/27 09:00:09 Revision: 1.3 Tag: t20021216_01 -* -* AUTHOR : John Meertens -* Nico Valster -* -* SPECIFICATION: ........ -* -* DESC : generic functions to handle the download of NIC firmware -* Local Support Routines for above procedures -* -* Customizable via HCFCFG.H, which is included by HCF.H -* -* -* DHF is (intended to be) platform-independent. -* DHF is a module that provides a number of routines to download firmware -* images (the names primary, station, access point, secondary and tertiary -* are used or have been used) to volatile or nonvolatile memory -* in WaveLAN/IEEE NICs. To achieve this DHF makes use of the WaveLAN/IEEE -* WCI as implemented by the HCF-module. -* -* Download to non-volatile memory is used to update a WaveLAN/IEEE NIC to new -* firmware. Normally this will be an upgrade to newer firmware, although -* downgrading to older firmware is possible too. -* -* Note: relative to Asserts, the following can be observed: -* Since the IFB is not known inside the routine, the macro HCFASSERT is replaced with MMDASSERT. -* Also the line number reported in the assert is raised by FILE_NAME_OFFSET (10000) to discriminate the -* DHF Asserts from HCF and MMD asserts. -* -*************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 (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 -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -**************************************************************************************************************/ - -#include "hcf.h" -#include "hcfdef.h" -#include "dhf.h" -#include "mmd.h" - -/* to distinguish MMD from HCF asserts by means of line number */ -#undef FILE_NAME_OFFSET -#define FILE_NAME_OFFSET MMD_FILE_NAME_OFFSET -/*----------------------------------------------------------------------------- - * - * Defines, data structures, and global variables - * - *---------------------------------------------------------------------------*/ - -/* 12345678901234 */ -static char signature[14] = "FUPU7D37dhfwci"; - -/*----------------------------------------------------------------------------- - * - * LTV-records retrieved from the NIC to: - * - determine compatibility between NIC and image - * - ((setup the buffer size dynamically for non-volatile download (see note below) )) - * - supply plugging information contained in the PDA (H-I only) - * - *---------------------------------------------------------------------------*/ - -/* 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 }; */ -static CFG_SUP_RANGE_STRCT mfi_sup = { LOF(CFG_SUP_RANGE_STRCT), CFG_NIC_MFI_SUP_RANGE }; -static 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 - * CFG_DL_BUF_STRCT dl_buf = { LOF(CFG_DL_BUF_STRCT), CFG_DL_BUF }; -*/ - -/*----------------------------------------------------------------------------- - * Array ltv_info stores NIC information (in the form of LTV-records) - * needed for download. A NULL record indicates the end of the array. - *---------------------------------------------------------------------------*/ - -/* The LTV_INFO_STRUCT is needed to save the sizes of the structs, because after a GET_INFO() - * the len field is changed to the real len of the RID by the called routine. - * This is only relevant if the DHF used without reloading the driver/utility. - */ - -static LTV_INFO_STRUCT ltv_info[] = { - { (LTVP)&mfi_sup, LOF(CFG_SUP_RANGE_STRCT) } , - { (LTVP)&cfi_sup, LOF(CFG_SUP_RANGE_STRCT) } , - { (LTVP) NULL, 0 } -}; - - -/***********************************************************************************************************/ -/*************************************** PROTOTYPES ******************************************************/ -/***********************************************************************************************************/ -static int check_comp_fw(memimage *fw); - - -/************************************************************************************************************ -*.SUBMODULE int check_comp_fw( memimage *fw ) -*.PURPOSE Checks compatibility of CFI and MFI, NIC as supplier, station/AP firmware image as supplier. -* -*.ARGUMENTS -* fw F/W image to be downloaded -* -*.RETURNS -* HFC_SUCCESS - firmware OK -* DHF_ERR_INCOMP_FW -* -*.DESCRIPTION -* This function uses compatibility and identity information that has been -* retrieved from the card which is currently inserted to check whether the -* station firmware image to be downloaded is compatible. -*.ENDDOC END DOCUMENTATION -*************************************************************************************************************/ -static int -check_comp_fw(memimage *fw) -{ -CFG_RANGE20_STRCT *p; -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) */ - break; - default: - MMDASSERT(DO_ASSERT, fw->identity->typ) /* unknown/unsupported firmware_type: */ - rc = DHF_ERR_INCOMP_FW; - 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); - } - p++; - } - 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); - } - p++; - } - 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 */ - - - - - -/*----------------------------------------------------------------------------- - * - * Exported functions - * - *---------------------------------------------------------------------------*/ - - - -/************************************************************************************************************* -* -*.MODULE int dhf_download_binary( void *ifbp, memimage *fw ) -*.PURPOSE Downloads a complete (primary, station, or access point) firmware image to the NIC. -* -*.ARGUMENTS -* ifbp address of the Interface Block -* fw F/W image to be downloaded -* -*.RETURNS -* HCF_SUCCESS - download completed successfully. -* DHF_ERR_INCOMP_FW - firmware not compatible -* -*.DESCRIPTION -* Initialize global variables -* Connect to the DHF -* Check the compatibility of the image (For primary firmware images it is checked first -* whether download is necessary). -* If everything's download the firmware. -* Disconnect from the DHF. -* -* -*.DIAGRAM -* -*.NOTICE: - MMDASSERT is unacceptable because some drivers call dhf_download_binary before hcf_connect - -* The old comment was: -*.ENDDOC END DOCUMENTATION -*************************************************************************************************************/ -int -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) || - 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 */ - 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] = ((char *)fw->p[i] + (hcf_32)fw); - p = fw->codep; - while (p->len) { - p->host_addr = (char *)p->host_addr + (hcf_32)fw; - p++; - } - } - return rc; -} /* dhf_download_binary */ - - -/************************************************************************************************************* -* -*.MODULE int dhf_download_fw( void *ifbp, memimage *fw ) -*.PURPOSE Downloads a complete (primary or tertiary) firmware image to the NIC. -* -*.ARGUMENTS -* ifbp address of the Interface Block -* fw F/W image to be downloaded -* -*.RETURNS -* HCF_SUCCESS - download completed successfully. -* HCF_ERR_NO_NIC - no NIC present -* DHF_ERR_INCOMP_FW - firmware not compatible -* -*.DESCRIPTION -* - check the signature of the image -* - get the compatibility information from the components on the NIC -* - Primary Firmware Identity -* - Modem - Firmware I/F -* - Controller - Firmware I/F -*!! - if necessary ( i.e. H-I) get the PDA contents from the NIC -* - check the compatibility of the MFI and CFI of the NIC with the F/W image -* Note: the Primary F/W compatibility is only relevant for the "running" HCF and is already verified in -* hcf_connect -*!! - if necessary ( i.e. H-I) -*!! - verify the sumcheck of the PDA -*!! - plug the image (based on the PDA and the default plug records) -* - loop over all the download LTVs in the image which consists of a sequence of -* - CFG_PROG_VOLATILE/CFG_PROG_NON_VOLATILE -* - 1 or more sequences of CFG_PROG_ADDR, CFG_PROG_DATA,....,CFG_PROG_DATA -* - CFG_PROG_STOP -* -*.DIAGRAM -* -*.NOTICE -* The old comment was: -* // Download primary firmware if necessary and allowed. This is done silently (without telling -* // the user) and only if the firmware in the download image is newer than the firmware in the -* // card. In Major version 4 of the primary firmware functions of Hermes and Shark were -* // combined. Prior to that two separate versions existed. We only have to download primary -* // firmware if major version of primary firmware in the NIC < 4. -* // download = pri_identity.version_major < 4; -* // if ( download ) { -* // rc = check_comp_primary( fw ); -* // } -* It is my understanding that Pri Variant 1 must be updated by Pri Variant 2. The test on -* major version < 4 should amount to the same result but be "principally" less correct -* In deliberation with the Architecture team, it was decided that this upgrade for old H-I -* NICs, is an aspect which belongs on the WSU level not on the DHF level -* -*.ENDDOC END DOCUMENTATION -*************************************************************************************************************/ -int -dhf_download_fw(void *ifbp, memimage *fw) -{ -int rc = HCF_SUCCESS; -LTV_INFO_STRUCT_PTR pp = ltv_info; -CFG_PROG_STRCT *p = fw->codep; -LTVP ltvp; -int i; - - MMDASSERT(fw != NULL, 0) - /* 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 */ - (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)) { - 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) - } - 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) - return rc; -} /* dhf_download_fw */ - - diff --git a/drivers/staging/wlags49_h2/dhf.h b/drivers/staging/wlags49_h2/dhf.h deleted file mode 100644 index 1299b8256468..000000000000 --- a/drivers/staging/wlags49_h2/dhf.h +++ /dev/null @@ -1,225 +0,0 @@ - -#ifndef DHF_H -#define DHF_H - -/************************************************************************************************************** -* -* FILE : DHF.H -* -* DATE : $Date: 2004/07/19 08:16:14 $ $Revision: 1.2 $ -* Original : 2004/05/17 07:33:13 Revision: 1.25 Tag: hcf7_t20040602_01 -* Original : 2004/05/11 06:03:14 Revision: 1.24 Tag: hcf7_t7_20040513_01 -* Original : 2004/04/15 09:24:42 Revision: 1.22 Tag: hcf7_t7_20040415_01 -* Original : 2004/04/09 14:35:52 Revision: 1.21 Tag: t7_20040413_01 -* Original : 2004/04/01 15:32:55 Revision: 1.18 Tag: t7_20040401_01 -* Original : 2004/03/10 15:39:28 Revision: 1.15 Tag: t20040310_01 -* Original : 2004/03/04 11:03:38 Revision: 1.13 Tag: t20040304_01 -* Original : 2004/02/25 14:14:37 Revision: 1.11 Tag: t20040302_03 -* Original : 2004/02/24 13:00:28 Revision: 1.10 Tag: t20040224_01 -* Original : 2004/02/19 10:57:28 Revision: 1.8 Tag: t20040219_01 -* -* AUTHOR : John Meertens -* Nico Valster -* -* SPECIFICATION: ......... -* -* DESC : structure definitions and function prototypes for unit DHF. -* -* Customizable via HCFCFG.H, which is included indirectly via HCF.H -* -*************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 (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 -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -**************************************************************************************************************/ - - -#ifdef _WIN32_WCE -#include -#endif - -#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) -#else -#define GET_INFO(pp) hcf_get_info(ifbp, (LTVP)pp) -#define PUT_INFO(pp) hcf_put_info(ifbp, (LTVP)pp) -#endif - - -/*---- Defines --------------------------------------------------------------*/ -#define CODEMASK 0x0000FFFFL /* Codemask for plug records */ - -/*---- Error numbers --------------------------------------------------------*/ - -#define DHF_ERR_INCOMP_FW 0x40 /* Image not compatible with NIC */ - -/*---- Type definitions -----------------------------------------------------*/ -/* needed by dhf_wrap.c */ - -typedef struct { - LTVP ltvp; - hcf_16 len; -} LTV_INFO_STRUCT , *LTV_INFO_STRUCT_PTR; - - -/* - * Type: plugrecord - * - * Abstract: This structure represents a Plug Data Record. - * - * Description: - * This structure is used to overlay the plug records in the firmware memory image. - */ - -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 */ -} plugrecord; - -/* - * Type: stringrecord - * - * Abstract: This structure represents a Firmware debug/assert string - * - * Description: - * This structure is used to get assert and debug outputs in the driver and/or utility to be - * able to get more visability of the FW. - */ - -#define MAX_DEBUGSTRINGS 1024 -#define MAX_DEBUGSTRING_LEN 82 - -typedef struct { - hcf_32 id; - char str[MAX_DEBUGSTRING_LEN]; -} stringrecord; - -/* - * Type: exportrecord - * - * Abstract: This structure represents a Firmware export of a variable - * - * Description: - * This structure is used to get the address and name of a FW variable. - */ - -#define MAX_DEBUGEXPORTS 2048 -#define MAX_DEBUGEXPORT_LEN 12 - -typedef struct { - hcf_32 id; - char str[MAX_DEBUGEXPORT_LEN]; -} exportrecord; - -/* Offsets in memimage array p[] */ -#define FWSTRINGS_FUNCTION 0 -#define FWEXPORTS_FUNCTION 1 - -/* - * Type: memimage - * - * Abstract: The "root" description of a complete memory image - * - * Description: - * This type represents an entire memory image. The image is built up of several - * segments. These segments need not be contiguous areas in memory, in other words - * the image may contain 'holes'. - * - * The 'codep' field points to an array of segment_descriptor structures. - * The end of the array is indicated by a segment_descriptor of which all fields are zero. - * The 'execution' field is a 32-bit address representing the execution address - * of the firmware within the memory image. This address is zero in case of non-volatile - * memory download. - * The 'compat' field points to an array of TODO - * The end of the array is indicated by a plug record of which all fields are zero. - * The 'identity' field points to an array of TODO - * The end of the array is indicated by a plug record of which all fields are zero. - * The Hermes-I specific 'pdaplug' field points to an array of Production Data Plug record structures. - * The end of the array is indicated by a plug record of which all fields are zero. - * The Hermes-I specific 'priplug' field points to an array of Primary Information Plug record structures. - * 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; - 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 */ - void FAR *p[2]; /* (Up to 9) pointers for (future) expansion - * currently in use: - * - F/W printf information - */ -} memimage; - - - -/*----------------------------------------------------------------------------- - * - * DHF function prototypes - * - *---------------------------------------------------------------------------*/ - -EXTERN_C int dhf_download_fw(void *ifbp, memimage *fw); /* ifbp, ignored when using the UIL */ -EXTERN_C int dhf_download_binary(memimage *fw); - - -/*----------------------------------------------------------------------------- - * - * Functions to be provided by the user of the DHF module. - * - *---------------------------------------------------------------------------*/ - -/* 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 */ - diff --git a/drivers/staging/wlags49_h2/dhfcfg.h b/drivers/staging/wlags49_h2/dhfcfg.h deleted file mode 100644 index 147f4c83c00c..000000000000 --- a/drivers/staging/wlags49_h2/dhfcfg.h +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file contains DHF configuration info. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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 (c) 2003 Agere Systems Inc. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef DHFCFG_H -#define DHFCFG_H -/*----------------------------------------------------------------------------- - * File DHFCFG.H - * - * Contents: #defines for the DHF module - * - * Comments: - * Some combinations of the #defines in this file are illegal (as noted below). - * If an illegal combinations of #defines is specified a compile error is - * generated. See document DHFUG.DOC for more information. - * - * Author: John Meertens - * Date: 11-01-2000 - * - * Change history: - *---------------------------------------------------------------------------*/ - - -/* 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_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 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 */ -#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 DSF_VOLATILE_ONLY - -/* 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 */ - -/* 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 */ diff --git a/drivers/staging/wlags49_h2/hcf.c b/drivers/staging/wlags49_h2/hcf.c deleted file mode 100644 index f44d888ecd6e..000000000000 --- a/drivers/staging/wlags49_h2/hcf.c +++ /dev/null @@ -1,4748 +0,0 @@ -/************************************************************************************************************ - * - * FILE : HCF.C - * - * DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.10 $ - * Original: 2004/06/02 10:22:22 Revision: 1.85 Tag: hcf7_t20040602_01 - * Original: 2004/04/15 09:24:41 Revision: 1.63 Tag: hcf7_t7_20040415_01 - * Original: 2004/04/13 14:22:44 Revision: 1.62 Tag: t7_20040413_01 - * Original: 2004/04/01 15:32:55 Revision: 1.59 Tag: t7_20040401_01 - * Original: 2004/03/10 15:39:27 Revision: 1.55 Tag: t20040310_01 - * Original: 2004/03/04 11:03:37 Revision: 1.53 Tag: t20040304_01 - * Original: 2004/03/02 14:51:21 Revision: 1.50 Tag: t20040302_03 - * Original: 2004/02/24 13:00:27 Revision: 1.43 Tag: t20040224_01 - * Original: 2004/02/19 10:57:25 Revision: 1.39 Tag: t20040219_01 - * - * AUTHOR : Nico Valster - * - * SPECIFICATION: ........ - * - * DESCRIPTION : HCF Routines for Hermes-II (callable via the Wireless Connection I/F or WCI) - * Local Support Routines for above procedures - * - * Customizable via HCFCFG.H, which is included by HCF.H - * - ************************************************************************************************************* - * - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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 © 1996 - 2000 by Lucent Technologies. All Rights Reserved - * COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * - ************************************************************************************************************/ - - -/************************************************************************************************************ - ** - ** Implementation Notes - ** - * - a leading marker of //! is used. The purpose of such a sequence is to help to understand the flow - * An example is: //!rc = HCF_SUCCESS; - * if this is superfluous because rc is already guaranteed to be 0 but it shows to the (maintenance) - * programmer it is an intentional omission at the place where someone could consider it most appropriate at - * first glance - * - using near pointers in a model where ss!=ds is an invitation for disaster, so be aware of how you specify - * your model and how you define variables which are used at interrupt time - * - remember that sign extension on 32 bit platforms may cause problems unless code is carefully constructed, - * e.g. use "(hcf_16)~foo" rather than "~foo" - * - ************************************************************************************************************/ - -#include "hcf.h" // HCF and MSF common include file -#include "hcfdef.h" // HCF specific include file -#include "mmd.h" // MoreModularDriver common include file -#include -#include - -#if ! defined offsetof -#define offsetof(s,m) ((unsigned int)&(((s *)0)->m)) -#endif // offsetof - - -/***********************************************************************************************************/ -/*************************************** PROTOTYPES ******************************************************/ -/***********************************************************************************************************/ -HCF_STATIC int cmd_exe( IFBP ifbp, hcf_16 cmd_code, hcf_16 par_0 ); -HCF_STATIC int init( IFBP ifbp ); -HCF_STATIC int put_info( IFBP ifbp, LTVP ltvp ); -HCF_STATIC int put_info_mb( IFBP ifbp, CFG_MB_INFO_STRCT FAR * ltvp ); -#if (HCF_TYPE) & HCF_TYPE_WPA -HCF_STATIC void calc_mic( hcf_32* p, hcf_32 M ); -void calc_mic_rx_frag( IFBP ifbp, wci_bufp p, int len ); -void calc_mic_tx_frag( IFBP ifbp, wci_bufp p, int len ); -HCF_STATIC int check_mic( IFBP ifbp ); -#endif // HCF_TYPE_WPA - -HCF_STATIC void calibrate( IFBP ifbp ); -HCF_STATIC int cmd_cmpl( IFBP ifbp ); -HCF_STATIC hcf_16 get_fid( IFBP ifbp ); -HCF_STATIC void isr_info( IFBP ifbp ); -#if HCF_DMA -HCF_STATIC DESC_STRCT* get_frame_lst(IFBP ifbp, int tx_rx_flag); -#endif // HCF_DMA -HCF_STATIC void get_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ); //char*, byte count (usually even) -#if HCF_DMA -HCF_STATIC void put_frame_lst( IFBP ifbp, DESC_STRCT *descp, int tx_rx_flag ); -#endif // HCF_DMA -HCF_STATIC void put_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ); -HCF_STATIC void put_frag_finalize( IFBP ifbp ); -HCF_STATIC int setup_bap( IFBP ifbp, hcf_16 fid, int offset, int type ); -#if (HCF_ASSERT) & HCF_ASSERT_PRINTF -static int fw_printf(IFBP ifbp, CFG_FW_PRINTF_STRCT FAR *ltvp); -#endif // HCF_ASSERT_PRINTF - -HCF_STATIC int download( IFBP ifbp, CFG_PROG_STRCT FAR *ltvp ); -HCF_STATIC hcf_8 hcf_encap( wci_bufp type ); -HCF_STATIC hcf_8 null_addr[4] = { 0, 0, 0, 0 }; -#if ! defined IN_PORT_WORD //replace I/O Macros with logging facility -extern FILE *log_file; - -#define IN_PORT_WORD(port) in_port_word( (hcf_io)(port) ) - -static hcf_16 in_port_word( hcf_io port ) { - hcf_16 i = (hcf_16)_inpw( port ); - if ( log_file ) { - fprintf( log_file, "\nR %2.2x %4.4x", (port)&0xFF, i); - } - return i; -} // in_port_word - -#define OUT_PORT_WORD(port, value) out_port_word( (hcf_io)(port), (hcf_16)(value) ) - -static void out_port_word( hcf_io port, hcf_16 value ) { - _outpw( port, value ); - if ( log_file ) { - fprintf( log_file, "\nW %2.02x %4.04x", (port)&0xFF, value ); - } -} - -void IN_PORT_STRING_32( hcf_io prt, hcf_32 FAR * dst, int n) { - int i = 0; - hcf_16 FAR * p; - if ( log_file ) { - fprintf( log_file, "\nread string_32 length %04x (%04d) at port %02.2x to addr %lp", - (hcf_16)n, (hcf_16)n, (hcf_16)(prt)&0xFF, dst); - } - while ( n-- ) { - p = (hcf_16 FAR *)dst; - *p++ = (hcf_16)_inpw( prt ); - *p = (hcf_16)_inpw( prt ); - if ( log_file ) { - fprintf( log_file, "%s%08lx ", i++ % 0x08 ? " " : "\n", *dst); - } - dst++; - } -} // IN_PORT_STRING_32 - -void IN_PORT_STRING_8_16( hcf_io prt, hcf_8 FAR * dst, int n) { //also handles byte alignment problems - hcf_16 FAR * p = (hcf_16 FAR *)dst; //this needs more elaborate code in non-x86 platforms - int i = 0; - if ( log_file ) { - fprintf( log_file, "\nread string_16 length %04x (%04d) at port %02.2x to addr %lp", - (hcf_16)n, (hcf_16)n, (hcf_16)(prt)&0xFF, dst ); - } - while ( n-- ) { - *p =(hcf_16)_inpw( prt); - if ( log_file ) { - if ( i++ % 0x10 ) { - fprintf( log_file, "%04x ", *p); - } else { - fprintf( log_file, "\n%04x ", *p); - } - } - p++; - } -} // IN_PORT_STRING_8_16 - -void OUT_PORT_STRING_32( hcf_io prt, hcf_32 FAR * src, int n) { - int i = 0; - hcf_16 FAR * p; - if ( log_file ) { - fprintf( log_file, "\nwrite string_32 length %04x (%04d) at port %02.2x", - (hcf_16)n, (hcf_16)n, (hcf_16)(prt)&0xFF); - } - while ( n-- ) { - p = (hcf_16 FAR *)src; - _outpw( prt, *p++ ); - _outpw( prt, *p ); - if ( log_file ) { - fprintf( log_file, "%s%08lx ", i++ % 0x08 ? " " : "\n", *src); - } - src++; - } -} // OUT_PORT_STRING_32 - -void OUT_PORT_STRING_8_16( hcf_io prt, hcf_8 FAR * src, int n) { //also handles byte alignment problems - hcf_16 FAR * p = (hcf_16 FAR *)src; //this needs more elaborate code in non-x86 platforms - int i = 0; - if ( log_file ) { - fprintf( log_file, "\nwrite string_16 length %04x (%04d) at port %04x", n, n, (hcf_16)prt); - } - while ( n-- ) { - (void)_outpw( prt, *p); - if ( log_file ) { - if ( i++ % 0x10 ) { - fprintf( log_file, "%04x ", *p); - } else { - fprintf( log_file, "\n%04x ", *p); - } - } - p++; - } -} // OUT_PORT_STRING_8_16 - -#endif // IN_PORT_WORD - -/************************************************************************************************************ - ******************************* D A T A D E F I N I T I O N S ******************************************** - ************************************************************************************************************/ - -#if HCF_ASSERT -IFBP BASED assert_ifbp = NULL; //to make asserts easily work under MMD and DHF -#endif // HCF_ASSERT - -/* SNAP header to be inserted in Ethernet-II frames */ -HCF_STATIC hcf_8 BASED snap_header[] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, //5 bytes signature + - 0 }; //1 byte protocol identifier - -#if (HCF_TYPE) & HCF_TYPE_WPA -HCF_STATIC hcf_8 BASED mic_pad[8] = { 0x5A, 0, 0, 0, 0, 0, 0, 0 }; //MIC padding of message -#endif // HCF_TYPE_WPA - -#if defined MSF_COMPONENT_ID -static CFG_IDENTITY_STRCT BASED cfg_drv_identity = { - sizeof(cfg_drv_identity)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_IDENTITY, // (0x0826) - MSF_COMPONENT_ID, - MSF_COMPONENT_VAR, - MSF_COMPONENT_MAJOR_VER, - MSF_COMPONENT_MINOR_VER -} ; - -static CFG_RANGES_STRCT BASED cfg_drv_sup_range = { - sizeof(cfg_drv_sup_range)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_SUP_RANGE, // (0x0827) - - COMP_ROLE_SUPL, - COMP_ID_DUI, - {{ DUI_COMPAT_VAR, - DUI_COMPAT_BOT, - DUI_COMPAT_TOP - }} -} ; - -static struct CFG_RANGE3_STRCT BASED cfg_drv_act_ranges_pri = { - sizeof(cfg_drv_act_ranges_pri)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_ACT_RANGES_PRI, // (0x0828) - - COMP_ROLE_ACT, - COMP_ID_PRI, - { - { 0, 0, 0 }, // HCF_PRI_VAR_1 not supported by HCF 7 - { 0, 0, 0 }, // HCF_PRI_VAR_2 not supported by HCF 7 - { 3, //var_rec[2] - Variant number - CFG_DRV_ACT_RANGES_PRI_3_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_PRI_3_TOP // - Top Compatibility - } - } -} ; - - -static struct CFG_RANGE4_STRCT BASED cfg_drv_act_ranges_sta = { - sizeof(cfg_drv_act_ranges_sta)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_ACT_RANGES_STA, // (0x0829) - - COMP_ROLE_ACT, - COMP_ID_STA, - { -#if defined HCF_STA_VAR_1 - { 1, //var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_STA_1_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_STA_1_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_STA_VAR_1 -#if defined HCF_STA_VAR_2 - { 2, //var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_STA_2_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_STA_2_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_STA_VAR_2 -// For Native_USB (Not used!) -#if defined HCF_STA_VAR_3 - { 3, //var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_STA_3_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_STA_3_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_STA_VAR_3 -// Warp -#if defined HCF_STA_VAR_4 - { 4, //var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_STA_4_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_STA_4_TOP // - Top Compatibility - } -#else - { 0, 0, 0 } -#endif // HCF_STA_VAR_4 - } -} ; - - -static struct CFG_RANGE6_STRCT BASED cfg_drv_act_ranges_hsi = { - sizeof(cfg_drv_act_ranges_hsi)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_ACT_RANGES_HSI, // (0x082A) - COMP_ROLE_ACT, - COMP_ID_HSI, - { -#if defined HCF_HSI_VAR_0 // Controlled deployment - { 0, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_HSI_0_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_HSI_0_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_HSI_VAR_0 - { 0, 0, 0 }, // HCF_HSI_VAR_1 not supported by HCF 7 - { 0, 0, 0 }, // HCF_HSI_VAR_2 not supported by HCF 7 - { 0, 0, 0 }, // HCF_HSI_VAR_3 not supported by HCF 7 -#if defined HCF_HSI_VAR_4 // Hermes-II all types - { 4, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_HSI_4_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_HSI_4_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_HSI_VAR_4 -#if defined HCF_HSI_VAR_5 // WARP Hermes-2.5 - { 5, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_HSI_5_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_HSI_5_TOP // - Top Compatibility - } -#else - { 0, 0, 0 } -#endif // HCF_HSI_VAR_5 - } -} ; - - -static CFG_RANGE4_STRCT BASED cfg_drv_act_ranges_apf = { - sizeof(cfg_drv_act_ranges_apf)/sizeof(hcf_16) - 1, //length of RID - CFG_DRV_ACT_RANGES_APF, // (0x082B) - - COMP_ROLE_ACT, - COMP_ID_APF, - { -#if defined HCF_APF_VAR_1 //(Fake) Hermes-I - { 1, //var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_APF_1_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_APF_1_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_APF_VAR_1 -#if defined HCF_APF_VAR_2 //Hermes-II - { 2, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_APF_2_BOTTOM, // - Bottom Compatibility - CFG_DRV_ACT_RANGES_APF_2_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_APF_VAR_2 -#if defined HCF_APF_VAR_3 // Native_USB - { 3, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_APF_3_BOTTOM, // - Bottom Compatibility !!!!!see note below!!!!!!! - CFG_DRV_ACT_RANGES_APF_3_TOP // - Top Compatibility - }, -#else - { 0, 0, 0 }, -#endif // HCF_APF_VAR_3 -#if defined HCF_APF_VAR_4 // WARP Hermes 2.5 - { 4, // var_rec[1] - Variant number - CFG_DRV_ACT_RANGES_APF_4_BOTTOM, // - Bottom Compatibility !!!!!see note below!!!!!!! - CFG_DRV_ACT_RANGES_APF_4_TOP // - Top Compatibility - } -#else - { 0, 0, 0 } -#endif // HCF_APF_VAR_4 - } -} ; -#define HCF_VERSION TEXT( "HCF$Revision: 1.10 $" ) - -static struct /*CFG_HCF_OPT_STRCT*/ { - hcf_16 len; //length of cfg_hcf_opt struct - hcf_16 typ; //type 0x082C - hcf_16 v0; //offset HCF_VERSION - hcf_16 v1; // MSF_COMPONENT_ID - hcf_16 v2; // HCF_ALIGN - hcf_16 v3; // HCF_ASSERT - hcf_16 v4; // HCF_BIG_ENDIAN - hcf_16 v5; // /* HCF_DLV | HCF_DLNV */ - hcf_16 v6; // HCF_DMA - hcf_16 v7; // HCF_ENCAP - hcf_16 v8; // HCF_EXT - hcf_16 v9; // HCF_INT_ON - hcf_16 v10; // HCF_IO - hcf_16 v11; // HCF_LEGACY - hcf_16 v12; // HCF_MAX_LTV - hcf_16 v13; // HCF_PROT_TIME - hcf_16 v14; // HCF_SLEEP - hcf_16 v15; // HCF_TALLIES - hcf_16 v16; // HCF_TYPE - hcf_16 v17; // HCF_NIC_TAL_CNT - hcf_16 v18; // HCF_HCF_TAL_CNT - hcf_16 v19; // offset tallies - char val[sizeof(HCF_VERSION)]; -} BASED cfg_hcf_opt = { - sizeof(cfg_hcf_opt)/sizeof(hcf_16) -1, - CFG_HCF_OPT, // (0x082C) - ( sizeof(cfg_hcf_opt) - sizeof(HCF_VERSION) - 4 )/sizeof(hcf_16), -#if defined MSF_COMPONENT_ID - MSF_COMPONENT_ID, -#else - 0, -#endif // MSF_COMPONENT_ID - HCF_ALIGN, - HCF_ASSERT, - HCF_BIG_ENDIAN, - 0, // /* HCF_DLV | HCF_DLNV*/, - HCF_DMA, - HCF_ENCAP, - HCF_EXT, - HCF_INT_ON, - HCF_IO, - HCF_LEGACY, - HCF_MAX_LTV, - HCF_PROT_TIME, - HCF_SLEEP, - HCF_TALLIES, - HCF_TYPE, -#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) - HCF_NIC_TAL_CNT, - HCF_HCF_TAL_CNT, - offsetof(IFB_STRCT, IFB_TallyLen ), -#else - 0, 0, 0, -#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF - HCF_VERSION -}; // cfg_hcf_opt -#endif // MSF_COMPONENT_ID - -HCF_STATIC LTV_STRCT BASED cfg_null = { 1, CFG_NULL, {0} }; - -HCF_STATIC hcf_16* BASED xxxx[ ] = { - &cfg_null.len, //CFG_NULL 0x0820 -#if defined MSF_COMPONENT_ID - &cfg_drv_identity.len, //CFG_DRV_IDENTITY 0x0826 - &cfg_drv_sup_range.len, //CFG_DRV_SUP_RANGE 0x0827 - &cfg_drv_act_ranges_pri.len, //CFG_DRV_ACT_RANGES_PRI 0x0828 - &cfg_drv_act_ranges_sta.len, //CFG_DRV_ACT_RANGES_STA 0x0829 - &cfg_drv_act_ranges_hsi.len, //CFG_DRV_ACT_RANGES_HSI 0x082A - &cfg_drv_act_ranges_apf.len, //CFG_DRV_ACT_RANGES_APF 0x082B - &cfg_hcf_opt.len, //CFG_HCF_OPT 0x082C - NULL, //IFB_PRIIdentity placeholder 0xFD02 - NULL, //IFB_PRISup placeholder 0xFD03 -#endif // MSF_COMPONENT_ID - NULL //endsentinel -}; -#define xxxx_PRI_IDENTITY_OFFSET (ARRAY_SIZE(xxxx) - 3) - - -/************************************************************************************************************ - ************************** T O P L E V E L H C F R O U T I N E S ************************************** - ************************************************************************************************************/ - -/************************************************************************************************************ - * - *.MODULE int hcf_action( IFBP ifbp, hcf_16 action ) - *.PURPOSE Changes the run-time Card behavior. - * Performs Miscellanuous actions. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * action number identifying the type of change - * - HCF_ACT_INT_FORCE_ON enable interrupt generation by WaveLAN NIC - * - HCF_ACT_INT_OFF disable interrupt generation by WaveLAN NIC - * - HCF_ACT_INT_ON compensate 1 HCF_ACT_INT_OFF, enable interrupt generation if balance reached - * - HCF_ACT_PRS_SCAN Hermes Probe Response Scan (F102) command - * - HCF_ACT_RX_ACK acknowledge non-DMA receiver to Hermes - * - HCF_ACT_SCAN Hermes Inquire Scan (F101) command (non-WARP only) - * - HCF_ACT_SLEEP DDS Sleep request - * - HCF_ACT_TALLIES Hermes Inquire Tallies (F100) command - * - *.RETURNS - * HCF_SUCCESS all (including invalid) - * HCF_INT_PENDING HCF_ACT_INT_OFF, interrupt pending - * HCF_ERR_NO_NIC HCF_ACT_INT_OFF, NIC presence check fails - * - *.CONDITIONS - * Except for hcf_action with HCF_ACT_INT_FORCE_ON or HCF_ACT_INT_OFF as parameter or hcf_connect with an I/O - * address (i.e. not HCF_DISCONNECT), all hcf-function calls MUST be preceded by a call of hcf_action with - * HCF_ACT_INT_OFF as parameter. - * Note that hcf_connect defaults to NIC interrupt disabled mode, i.e. as if hcf_action( HCF_ACT_INT_OFF ) - * was called. - * - *.DESCRIPTION - * hcf_action supports the following mode changing action-code pairs that are antonyms - * - HCF_ACT_INT_[FORCE_]ON / HCF_ACT_INT_OFF - * - * Additionally hcf_action can start the following actions in the NIC: - * - HCF_ACT_PRS_SCAN - * - HCF_ACT_RX_ACK - * - HCF_ACT_SCAN - * - HCF_ACT_SLEEP - * - HCF_ACT_TALLIES - * - * o HCF_ACT_INT_OFF: Sets NIC Interrupts mode Disabled. - * This command, and the associated [Force] Enable NIC interrupts command, are only available if the HCF_INT_ON - * compile time option is not set at 0x0000. - * - * o HCF_ACT_INT_ON: Sets NIC Interrupts mode Enabled. - * Enable NIC Interrupts, depending on the number of preceding Disable NIC Interrupt calls. - * - * o HCF_ACT_INT_FORCE_ON: Force NIC Interrupts mode Enabled. - * Sets NIC Interrupts mode Enabled, regardless off the number of preceding Disable NIC Interrupt calls. - * - * The disabling and enabling of interrupts are antonyms. - * These actions must be balanced. - * For each "disable interrupts" there must be a matching "enable interrupts". - * The disable interrupts may be executed multiple times in a row without intervening enable interrupts, in - * other words, the disable interrupts may be nested. - * The interrupt generation mechanism is disabled at the first call with HCF_ACT_INT_OFF. - * The interrupt generation mechanism is re-enabled when the number of calls with HCF_ACT_INT_ON matches the - * number of calls with INT_OFF. - * - * It is not allowed to have more Enable NIC Interrupts calls than Disable NIC Interrupts calls. - * The interrupt generation mechanism is initially (i.e. after hcf_connect) disabled. - * An MSF based on a interrupt strategy must call hcf_action with INT_ON in its initialization logic. - * - *! The INT_OFF/INT_ON housekeeping is initialized at 0x0000 by hcf_connect, causing the interrupt generation - * mechanism to be disabled at first. This suits MSF implementation based on a polling strategy. - * - * o HCF_ACT_SLEEP: Initiates the Disconnected DeepSleep process - * This command is only available if the HCF_DDS compile time option is set. It triggers the F/W to start the - * sleep handshaking. Regardless whether the Host initiates a Disconnected DeepSleep (DDS) or the F/W initiates - * a Connected DeepSleep (CDS), the Host-F/W sleep handshaking is completed when the NIC Interrupts mode is - * enabled (by means of the balancing HCF_ACT_INT_ON), i.e. at that moment the F/W really goes into sleep mode. - * The F/W is wokenup by the HCF when the NIC Interrupts mode are disabled, i.e. at the first HCF_ACT_INT_OFF - * after going into sleep. - * - * The following Miscellaneous actions are defined: - * - * o HCF_ACT_RX_ACK: Receiver Acknowledgement (non-DMA, non-USB mode only) - * Acking the receiver, frees the NIC memory used to hold the Rx frame and allows the F/W to - * report the existence of the next Rx frame. - * If the MSF does not need access (any longer) to the current frame, e.g. because it is rejected based on the - * look ahead or copied to another buffer, the receiver may be acked. Acking earlier is assumed to have the - * potential of improving the performance. - * If the MSF does not explicitly ack the receiver, the acking is done implicitly if: - * - the received frame fits in the look ahead buffer, by the hcf_service_nic call that reported the Rx frame - * - if not in the above step, by hcf_rcv_msg (assuming hcf_rcv_msg is called) - * - if neither of the above implicit acks nor an explicit ack by the MSF, by the first hcf_service_nic after - * the hcf_service_nic that reported the Rx frame. - * Note: If an Rx frame is already acked, an explicit ACK by the MSF acts as a NoOperation. - * - * o HCF_ACT_TALLIES: Inquire Tallies command - * This command is only operational if the F/W is enabled. - * The Inquire Tallies command requests the F/W to provide its current set of tallies. - * See also hcf_get_info with CFG_TALLIES as parameter. - * - * o HCF_ACT_PRS_SCAN: Inquire Probe Response Scan command - * This command is only operational if the F/W is enabled. - * The Probe Response Scan command starts a scan sequence. - * The HCF puts the result of this action in an MSF defined buffer (see CFG_RID_LOG_STRCT). - * - * o HCF_ACT_SCAN: Inquire Scan command - * This command is only supported for HII F/W (i.e. pre-WARP) and it is operational if the F/W is enabled. - * The Inquire Scan command starts a scan sequence. - * The HCF puts the result of this action in an MSF defined buffer (see CFG_RID_LOG_STRCT). - * - * Assert fails if - * - ifbp has a recognizable out-of-range value. - * - NIC interrupts are not disabled while required by parameter action. - * - an invalid code is specified in parameter action. - * - HCF_ACT_INT_ON commands outnumber the HCF_ACT_INT_OFF commands. - * - reentrancy, may be caused by calling hcf_functions without adequate protection against NIC interrupts or - * multi-threading - * - * - Since the HCF does not maintain status information relative to the F/W enabled state, it is not asserted - * whether HCF_ACT_SCAN, HCF_ACT_PRS_SCAN or HCF_ACT_TALLIES are only used while F/W is enabled. - * - *.DIAGRAM - * 0: The assert embedded in HCFLOGENTRY checks against re-entrancy. Re-entrancy could be caused by a MSF logic - * at task-level calling hcf_functions without shielding with HCF_ACT_ON/_OFF. However the HCF_ACT_INT_OFF - * action itself can per definition not be protected this way. Based on code inspection, it can be concluded, - * that there is no re-entrancy PROBLEM in this particular flow. It does not seem worth the trouble to - * explicitly check for this condition (although there was a report of an MSF which ran into this assert. - * 2:IFB_IntOffCnt is used to balance the INT_OFF and INT_ON calls. Disabling of the interrupts is achieved by - * writing a zero to the Hermes IntEn register. In a shared interrupt environment (e.g. the mini-PCI NDIS - * driver) it is considered more correct to return the status HCF_INT_PENDING if and only if, the current - * invocation of hcf_service_nic is (apparently) called in the ISR when the ISR was activated as result of a - * change in HREG_EV_STAT matching a bit in HREG_INT_EN, i.e. not if invoked as result of another device - * generating an interrupt on the shared interrupt line. - * Note 1: it has been observed that under certain adverse conditions on certain platforms the writing of - * HREG_INT_EN can apparently fail, therefore it is paramount that HREG_INT_EN is written again with 0 for - * each and every call to HCF_ACT_INT_OFF. - * Note 2: it has been observed that under certain H/W & S/W architectures this logic is called when there is - * no NIC at all. To cater for this, the value of HREG_INT_EN is validated. If the unused bit 0x0100 is set, - * it is assumed there is no NIC. - * Note 3: During the download process, some versions of the F/W reset HREG_SW_0, hence checking this - * register for HCF_MAGIC (the classical NIC presence test) when HCF_ACT_INT_OFF is called due to another - * card interrupting via a shared IRQ during a download, fails. - *4: The construction "if ( ifbp->IFB_IntOffCnt-- == 0 )" is optimal (in the sense of shortest/quickest - * path in error free flows) but NOT fail safe in case of too many INT_ON invocations compared to INT_OFF). - * Enabling of the interrupts is achieved by writing the Hermes IntEn register. - * - If the HCF is in Defunct mode, the interrupts stay disabled. - * - Under "normal" conditions, the HCF is only interested in Info Events, Rx Events and Notify Events. - * - When the HCF is out of Tx/Notify resources, the HCF is also interested in Alloc Events. - * - via HCF_EXT, the MSF programmer can also request HREG_EV_TICK and/or HREG_EV_TX_EXC interrupts. - * For DMA operation, the DMA hardware handles the alloc events. The DMA engine will generate a 'TxDmaDone' - * event as soon as it has pumped a frame from host ram into NIC-RAM (note that the frame does not have to be - * transmitted then), and a 'RxDmaDone' event as soon as a received frame has been pumped from NIC-RAM into - * host ram. Note that the 'alloc' event has been removed from the event-mask, because the DMA engine will - * react to and acknowledge this event. - *6: ack the "old" Rx-event. See "Rx Buffer free strategy" in hcf_service_nic above for more explanation. - * IFB_RxFID and IFB_RxLen must be cleared to bring both the internal HCF house keeping and the information - * supplied to the MSF in the state "no frame received". - *8: The HCF_ACT_SCAN, HCF_ACT_PRS_SCAN and HCF_ACT_TALLIES activity are merged by "clever" algebraic - * manipulations of the RID-values and action codes, so foregoing robustness against migration problems for - * ease of implementation. The assumptions about numerical relationships between CFG_TALLIES etc and - * HCF_ACT_TALLIES etc are checked by the "#if" statements just prior to the body of this routine, resulting - * in: err "maintenance" during compilation if the assumptions are no longer met. The writing of HREG_PARAM_1 - * with 0x3FFF in case of an PRS scan, is a kludge to get around lack of specification, hence different - * implementation in F/W and Host. - * When there is no NIC RAM available, some versions of the Hermes F/W do report 0x7F00 as error in the - * Result field of the Status register and some F/W versions don't. To mask this difference to the MSF all - * return codes of the Hermes are ignored ("best" and "most simple" solution to these types of analomies with - * an acceptable loss due to ignoring all error situations as well). - * The "No inquire space" is reported via the Hermes tallies. - *30: do not HCFASSERT( rc, rc ) since rc == HCF_INT_PENDING is no error - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -#if ( (HCF_TYPE) & HCF_TYPE_HII5 ) == 0 -#if CFG_SCAN != CFG_TALLIES - HCF_ACT_TALLIES + HCF_ACT_SCAN -err: "maintenance" apparently inviolated the underlying assumption about the numerical values of these macros -#endif -#endif // HCF_TYPE_HII5 -#if CFG_PRS_SCAN != CFG_TALLIES - HCF_ACT_TALLIES + HCF_ACT_PRS_SCAN -err: "maintenance" apparently inviolated the underlying assumption about the numerical values of these macros -#endif -int -hcf_action( IFBP ifbp, hcf_16 action ) -{ - int rc = HCF_SUCCESS; - - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); -#if HCF_INT_ON - HCFLOGENTRY( action == HCF_ACT_INT_FORCE_ON ? HCF_TRACE_ACTION_KLUDGE : HCF_TRACE_ACTION, action ); /* 0 */ -#if (HCF_SLEEP) - HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFE || action == HCF_ACT_INT_OFF, - MERGE_2( action, ifbp->IFB_IntOffCnt ) ); -#else - HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFE, action ); -#endif // HCF_SLEEP - HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFF || - action == HCF_ACT_INT_OFF || action == HCF_ACT_INT_FORCE_ON, action ); - HCFASSERT( ifbp->IFB_IntOffCnt <= 16 || ifbp->IFB_IntOffCnt >= 0xFFFE, - MERGE_2( action, ifbp->IFB_IntOffCnt ) ); //nesting more than 16 deep seems unreasonable -#endif // HCF_INT_ON - - switch (action) { -#if HCF_INT_ON - hcf_16 i; - case HCF_ACT_INT_OFF: // Disable Interrupt generation -#if HCF_SLEEP - if ( ifbp->IFB_IntOffCnt == 0xFFFE ) { // WakeUp test ;?tie this to the "new" super-LinkStat - ifbp->IFB_IntOffCnt++; // restore conventional I/F - OPW(HREG_IO, HREG_IO_WAKEUP_ASYNC ); // set wakeup bit - OPW(HREG_IO, HREG_IO_WAKEUP_ASYNC ); // set wakeup bit to counteract the clearing by F/W - // 800 us latency before FW switches to high power - MSF_WAIT(800); // MSF-defined function to wait n microseconds. -//OOR if ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_DS_OOR ) { // OutOfRange -// printk(KERN_NOTICE "ACT_INT_OFF: Deepsleep phase terminated, enable and go to AwaitConnection\n" ); //;?remove me 1 day -// hcf_cntl( ifbp, HCF_CNTL_ENABLE ); -// } -// ifbp->IFB_DSLinkStat &= ~( CFG_LINK_STAT_DS_IR | CFG_LINK_STAT_DS_OOR); //clear IR/OOR state - } -#endif // HCF_SLEEP - /*2*/ ifbp->IFB_IntOffCnt++; -//! rc = 0; - i = IPW( HREG_INT_EN ); - OPW( HREG_INT_EN, 0 ); - if ( i & 0x1000 ) { - rc = HCF_ERR_NO_NIC; - } else { - if ( i & IPW( HREG_EV_STAT ) ) { - rc = HCF_INT_PENDING; - } - } - break; - - case HCF_ACT_INT_FORCE_ON: // Enforce Enable Interrupt generation - ifbp->IFB_IntOffCnt = 0; - //Fall through in HCF_ACT_INT_ON - - case HCF_ACT_INT_ON: // Enable Interrupt generation - /*4*/ if ( ifbp->IFB_IntOffCnt-- == 0 && ifbp->IFB_CardStat == 0 ) { - //determine Interrupt Event mask -#if HCF_DMA - if ( ifbp->IFB_CntlOpt & USE_DMA ) { - i = HREG_EV_INFO | HREG_EV_RDMAD | HREG_EV_TDMAD | HREG_EV_TX_EXT; //mask when DMA active - } else -#endif // HCF_DMA - { - i = HREG_EV_INFO | HREG_EV_RX | HREG_EV_TX_EXT; //mask when DMA not active - if ( ifbp->IFB_RscInd == 0 ) { - i |= HREG_EV_ALLOC; //mask when no TxFID available - } - } -#if HCF_SLEEP - if ( ( IPW(HREG_EV_STAT) & ( i | HREG_EV_SLEEP_REQ ) ) == HREG_EV_SLEEP_REQ ) { - // firmware indicates it would like to go into sleep modus - // only acknowledge this request if no other events that can cause an interrupt are pending - ifbp->IFB_IntOffCnt--; //becomes 0xFFFE - OPW( HREG_INT_EN, i | HREG_EV_TICK ); - OPW( HREG_EV_ACK, HREG_EV_SLEEP_REQ | HREG_EV_TICK | HREG_EV_ACK_REG_READY ); - } else -#endif // HCF_SLEEP - { - OPW( HREG_INT_EN, i | HREG_EV_SLEEP_REQ ); - } - } - break; -#endif // HCF_INT_ON - -#if (HCF_SLEEP) & HCF_DDS - case HCF_ACT_SLEEP: // DDS Sleep request - hcf_cntl( ifbp, HCF_CNTL_DISABLE ); - cmd_exe( ifbp, HCMD_SLEEP, 0 ); - break; -// case HCF_ACT_WAKEUP: // DDS Wakeup request -// HCFASSERT( ifbp->IFB_IntOffCnt == 0xFFFE, ifbp->IFB_IntOffCnt ); -// ifbp->IFB_IntOffCnt++; // restore conventional I/F -// OPW( HREG_IO, HREG_IO_WAKEUP_ASYNC ); -// MSF_WAIT(800); // MSF-defined function to wait n microseconds. -// rc = hcf_action( ifbp, HCF_ACT_INT_OFF ); /*bogus, IFB_IntOffCnt == 0xFFFF, so if you carefully look -// *at the #if HCF_DDS statements, HCF_ACT_INT_OFF is empty -// *for DDS. "Much" better would be to merge the flows for -// *DDS and DEEP_SLEEP -// */ -// break; -#endif // HCF_DDS - - case HCF_ACT_RX_ACK: //Receiver ACK - /*6*/ if ( ifbp->IFB_RxFID ) { - DAWA_ACK( HREG_EV_RX ); - } - ifbp->IFB_RxFID = ifbp->IFB_RxLen = 0; - break; - - /*8*/ case HCF_ACT_PRS_SCAN: // Hermes PRS Scan (F102) - OPW( HREG_PARAM_1, 0x3FFF ); - //Fall through in HCF_ACT_TALLIES - case HCF_ACT_TALLIES: // Hermes Inquire Tallies (F100) -#if ( (HCF_TYPE) & HCF_TYPE_HII5 ) == 0 - case HCF_ACT_SCAN: // Hermes Inquire Scan (F101) -#endif // HCF_TYPE_HII5 - /*!! the assumptions about numerical relationships between CFG_TALLIES etc and HCF_ACT_TALLIES etc - * are checked by #if statements just prior to this routine resulting in: err "maintenance" */ - cmd_exe( ifbp, HCMD_INQUIRE, action - HCF_ACT_TALLIES + CFG_TALLIES ); - break; - - default: - HCFASSERT( DO_ASSERT, action ); - break; - } - //! do not HCFASSERT( rc == HCF_SUCCESS, rc ) /* 30*/ - HCFLOGEXIT( HCF_TRACE_ACTION ); - return rc; -} // hcf_action - - -/************************************************************************************************************ - * - *.MODULE int hcf_cntl( IFBP ifbp, hcf_16 cmd ) - *.PURPOSE Connect or disconnect a specific port to a specific network. - *!! ;???????????????? continue needs more explanation - * recovers by means of "continue" when the connect process in CCX mode fails - * Enables or disables data transmission and reception for the NIC. - * Activates static NIC configuration for a specific port at connect. - * Activates static configuration for all ports at enable. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * cmd 0x001F: Hermes command (disable, enable, connect, disconnect, continue) - * HCF_CNTL_ENABLE Enable - * HCF_CNTL_DISABLE Disable - * HCF_CNTL_CONTINUE Continue - * HCF_CNTL_CONNECT Connect - * HCF_CNTL_DISCONNECT Disconnect - * 0x0100: command qualifier (continue) - * HCMD_RETRY retry flag - * 0x0700: port number (connect/disconnect) - * HCF_PORT_0 MAC Port 0 - * HCF_PORT_1 MAC Port 1 - * HCF_PORT_2 MAC Port 2 - * HCF_PORT_3 MAC Port 3 - * HCF_PORT_4 MAC Port 4 - * HCF_PORT_5 MAC Port 5 - * HCF_PORT_6 MAC Port 6 - * - *.RETURNS - * HCF_SUCCESS - *!! via cmd_exe - * HCF_ERR_NO_NIC - * HCF_ERR_DEFUNCT_... - * HCF_ERR_TIME_OUT - * - *.DESCRIPTION - * The parameter cmd contains a number of subfields. - * The actual value for cmd is created by logical or-ing the appropriate mnemonics for the subfields. - * The field 0x001F contains the command code - * - HCF_CNTL_ENABLE - * - HCF_CNTL_DISABLE - * - HCF_CNTL_CONNECT - * - HCF_CNTL_DISCONNECT - * - HCF_CNTL_CONTINUE - * - * For HCF_CNTL_CONTINUE, the field 0x0100 contains the retry flag HCMD_RETRY. - * For HCF_CNTL_CONNECT and HCF_CNTL_DISCONNECT, the field 0x0700 contains the port number as HCF_PORT_#. - * For Station as well as AccessPoint F/W, MAC Port 0 is the "normal" communication channel. - * For AccessPoint F/W, MAC Port 1 through 6 control the WDS links. - * - * Note that despite the names HCF_CNTL_DISABLE and HCF_CNTL_ENABLE, hcf_cntl does not influence the NIC - * Interrupts mode. - * - * The Connect is used by the MSF to bring a particular port in an inactive state as far as data transmission - * and reception are concerned. - * When a particular port is disconnected: - * - the F/W disables the receiver for that port. - * - the F/W ignores send commands for that port. - * - all frames (Receive as well as pending Transmit) for that port on the NIC are discarded. - * - * When the NIC is disabled, above list applies to all ports, i.e. the result is like all ports are - * disconnected. - * - * When a particular port is connected: - * - the F/W effectuates the static configuration for that port. - * - enables the receiver for that port. - * - accepts send commands for that port. - * - * Enabling has the following effects: - * - the F/W effectuates the static configuration for all ports. - * The F/W only updates its static configuration at a transition from disabled to enabled or from - * disconnected to connected. - * In order to enforce the static configuration, the MSF must assure that such a transition takes place. - * Due to such a disable/enable or disconnect/connect sequence, Rx/Tx frames may be lost, in other words, - * configuration may impact communication. - * - The DMA Engine (if applicable) is enabled. - * Note that the Enable Function by itself only enables data transmission and reception, it - * does not enable the Interrupt Generation mechanism. This is done by hcf_action. - * - * Disabling has the following effects: - *!! ;?????is the following statement really true - * - it acts as a disconnect on all ports. - * - The DMA Engine (if applicable) is disabled. - * - * For impact of the disable command on the behavior of hcf_dma_tx/rx_get see the appropriate sections. - * - * Although the Enable/Disable and Connect/Disconnect are antonyms, there is no restriction on their sequencing, - * in other words, they may be called multiple times in arbitrary sequence without being paired or balanced. - * Each time one of these functions is called, the effects of the preceding calls cease. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value. - * - NIC interrupts are not disabled. - * - A command other than Continue, Enable, Disable, Connect or Disconnect is given. - * - An invalid combination of the subfields is given or a bit outside the subfields is given. - * - any return code besides HCF_SUCCESS. - * - reentrancy, may be caused by calling a hcf_function without adequate protection against NIC interrupts or - * multi-threading - * - *.DIAGRAM - * hcf_cntl takes successively the following actions: - *2: If the HCF is in Defunct mode or incompatible with the Primary or Station Supplier in the Hermes, - * hcf_cntl() returns immediately with HCF_ERR_NO_NIC;? as status. - *8: when the port is disabled, the DMA engine needs to be de-activated, so the host can safely reclaim tx - * packets from the tx descriptor chain. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -int -hcf_cntl( IFBP ifbp, hcf_16 cmd ) -{ - int rc = HCF_ERR_INCOMP_FW; -#if HCF_ASSERT - { int x = cmd & HCMD_CMD_CODE; - if ( x == HCF_CNTL_CONTINUE ) x &= ~HCMD_RETRY; - else if ( (x == HCMD_DISABLE || x == HCMD_ENABLE) && ifbp->IFB_FWIdentity.comp_id == COMP_ID_FW_AP ) { - x &= ~HFS_TX_CNTL_PORT; - } - HCFASSERT( x==HCF_CNTL_ENABLE || x==HCF_CNTL_DISABLE || HCF_CNTL_CONTINUE || - x==HCF_CNTL_CONNECT || x==HCF_CNTL_DISCONNECT, cmd ); - } -#endif // HCF_ASSERT -// #if (HCF_SLEEP) & HCF_DDS -// HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFE, cmd ); -// #endif // HCF_DDS - HCFLOGENTRY( HCF_TRACE_CNTL, cmd ); - if ( ifbp->IFB_CardStat == 0 ) { /*2*/ - /*6*/ rc = cmd_exe( ifbp, cmd, 0 ); -#if (HCF_SLEEP) & HCF_DDS - ifbp->IFB_TickCnt = 0; //start 2 second period (with 1 tick uncertanty) -#endif // HCF_DDS - } -#if HCF_DMA - //!rlav : note that this piece of code is always executed, regardless of the DEFUNCT bit in IFB_CardStat. - // The reason behind this is that the MSF should be able to get all its DMA resources back from the HCF, - // even if the hardware is disfunctional. Practical example under Windows : surprise removal. - if ( ifbp->IFB_CntlOpt & USE_DMA ) { - hcf_io io_port = ifbp->IFB_IOBase; - DESC_STRCT *p; - if ( cmd == HCF_CNTL_DISABLE || cmd == HCF_CNTL_ENABLE ) { - OUT_PORT_DWORD( (io_port + HREG_DMA_CTRL), DMA_CTRLSTAT_RESET); /*8*/ - ifbp->IFB_CntlOpt &= ~DMA_ENABLED; - } - if ( cmd == HCF_CNTL_ENABLE ) { - OUT_PORT_DWORD( (io_port + HREG_DMA_CTRL), DMA_CTRLSTAT_GO); - /* ;? by rewriting hcf_dma_rx_put you can probably just call hcf_dma_rx_put( ifbp->IFB_FirstDesc[DMA_RX] ) - * as additional beneficiary side effect, the SOP and EOP bits will also be cleared - */ - 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. - 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 ); - if ( ifbp->IFB_FirstDesc[DMA_RX] ) { - put_frame_lst( ifbp, ifbp->IFB_FirstDesc[DMA_RX]->next_desc_addr, DMA_RX ); - } - } else { - while ( p ) { - //p->buf_cntl.cntl_stat |= DESC_DMA_OWNED; - p->BUF_CNT |= DESC_DMA_OWNED; - p = p->next_desc_addr; - } - // a rx chain is available so hand it over to the DMA engine - p = ifbp->IFB_FirstDesc[DMA_RX]; - OUT_PORT_DWORD( (io_port + HREG_RXDMA_PTR32), p->desc_phys_addr); - } //end alternative - } - } - } -#endif // HCF_DMA - HCFASSERT( rc == HCF_SUCCESS, rc ); - HCFLOGEXIT( HCF_TRACE_CNTL ); - return rc; -} // hcf_cntl - - -/************************************************************************************************************ - * - *.MODULE int hcf_connect( IFBP ifbp, hcf_io io_base ) - *.PURPOSE Grants access right for the HCF to the IFB. - * Initializes Card and HCF housekeeping. - * - *.ARGUMENTS - * ifbp (near) address of the Interface Block - * io_base non-USB: I/O Base address of the NIC (connect) - * non-USB: HCF_DISCONNECT - * USB: HCF_CONNECT, HCF_DISCONNECT - * - *.RETURNS - * HCF_SUCCESS - * HCF_ERR_INCOMP_PRI - * HCF_ERR_INCOMP_FW - * HCF_ERR_DEFUNCT_CMD_SEQ - *!! HCF_ERR_NO_NIC really returned ;? - * HCF_ERR_NO_NIC - * HCF_ERR_TIME_OUT - * - * MSF-accessible fields of Result Block: - * IFB_IOBase entry parameter io_base - * IFB_IORange HREG_IO_RANGE (0x40/0x80) - * IFB_Version version of the IFB layout - * IFB_FWIdentity CFG_FW_IDENTITY_STRCT, specifies the identity of the - * "running" F/W, i.e. tertiary F/W under normal conditions - * IFB_FWSup CFG_SUP_RANGE_STRCT, specifies the supplier range of - * the "running" F/W, i.e. tertiary F/W under normal conditions - * IFB_HSISup CFG_SUP_RANGE_STRCT, specifies the HW/SW I/F range of the NIC - * IFB_PRIIdentity CFG_PRI_IDENTITY_STRCT, specifies the Identity of the Primary F/W - * IFB_PRISup CFG_SUP_RANGE_STRCT, specifies the supplier range of the Primary F/W - * all other all MSF accessible fields, which are not specified above, are zero-filled - * - *.CONDITIONS - * It is the responsibility of the MSF to assure the correctness of the I/O Base address. - * - * Note: hcf_connect defaults to NIC interrupt disabled mode, i.e. as if hcf_action( HCF_ACT_INT_OFF ) - * was called. - * - *.DESCRIPTION - * hcf_connect passes the MSF-defined location of the IFB to the HCF and grants or revokes access right for the - * HCF to the IFB. Revoking is done by specifying HCF_DISCONNECT rather than an I/O address for the parameter - * io_base. Every call of hcf_connect in "connect" mode, must eventually be followed by a call of hcf_connect - * in "disconnect" mode. Calling hcf_connect in "connect"/"disconnect" mode can not be nested. - * The IFB address must be used as a handle with all subsequent HCF-function calls and the HCF uses the IFB - * address as a handle when it performs a call(back) of an MSF-function (i.e. msf_assert). - * - * Note that not only the MSF accessible fields are cleared, but also all internal housekeeping - * information is re-initialized. - * This implies that all settings which are done via hcf_action and hcf_put_info (e.g. CFG_MB_ASSERT, CFG_REG_MB, - * CFG_REG_INFO_LOG) must be done again. The only field which is not cleared, is IFB_MSFSup. - * - * If HCF_INT_ON is selected as compile option, NIC interrupts are disabled. - * - * Assert fails if - * - ifbp is not properly aligned ( ref chapter HCF_ALIGN in 4.1.1) - * - I/O Base Address is not a multiple of 0x40 (note: 0x0000 is explicitly allowed). - * - *.DIAGRAM - * - *0: Throughout hcf_connect you need to distinguish the connect from the disconnect case, which requires - * some attention about what to use as "I/O" address when for which purpose. - *2: - *2a: Reset H-II by toggling reset bit in IO-register on and off. - * The HCF_TYPE_PRELOADED caters for the DOS environment where H-II is loaded by a separate program to - * overcome the 64k size limit posed on DOS drivers. - * The macro OPW is not yet useable because the IFB_IOBase field is not set. - * Note 1: hopefully the clearing and initializing of the IFB (see below) acts as a delay which meets the - * specification for S/W reset - * Note 2: it turns out that on some H/W constellations, the clock to access the EEProm is not lowered - * to an appropriate frequency by HREG_IO_SRESET. By giving an HCMD_INI first, this problem is worked around. - *2b: Experimentally it is determined over a wide range of F/W versions that are waiting for the for Cmd bit in - * Ev register gives a workable strategy. The available documentation does not give much clues. - *4: clear and initialize the IFB - * The HCF house keeping info is designed such that zero is the appropriate initial value for as much as - * feasible IFB-items. - * The readable fields mentioned in the description section and some HCF specific fields are given their - * actual value. - * IFB_TickIni is initialized at best guess before calibration - * Hcf_connect defaults to "no interrupt generation" (implicitly achieved by the zero-filling). - *6: Register compile-time linked MSF Routine and set default filter level - * cast needed to get around the "near" problem in DOS COM model - * er C2446: no conversion from void (__near __cdecl *)(unsigned char __far *,unsigned int,unsigned short,int) - * to void (__far __cdecl *)(unsigned char __far *,unsigned int,unsigned short,int) - *8: If a command is apparently still active (as indicated by the Busy bit in Cmd register) this may indicate a - * blocked cmd pipe line. To unblock the following actions are done: - * - Ack everything - * - Wait for Busy bit drop in Cmd register - * - Wait for Cmd bit raise in Ev register - * The two waits are combined in a single HCF_WAIT_WHILE to optimize memory size. If either of these waits - * fail (prot_cnt becomes 0), then something is serious wrong. Rather than PANICK, the assumption is that the - * next cmd_exe will fail, causing the HCF to go into DEFUNCT mode - *10: Ack everything to unblock a (possibly blocked) cmd pipe line - * Note 1: it is very likely that an Alloc event is pending and very well possible that a (Send) Cmd event is - * pending on non-initial calls - * Note 2: it is assumed that this strategy takes away the need to ack every conceivable event after an - * Hermes Initialize - *12: Only H-II NEEDS the Hermes Initialize command. Due to the different semantics for H-I and H-II - * Initialize command, init() does not (and can not, since it is called e.g. after a download) execute the - * Hermes Initialize command. Executing the Hermes Initialize command for H-I would not harm but not do - * anything useful either, so it is skipped. - * The return status of cmd_exe is ignored. It is assumed that if cmd_exe fails, init fails too - *14: use io_base as a flag to merge hcf_connect and hcf_disconnect into 1 routine - * the call to init and its subsequent call of cmd_exe will return HCF_ERR_NO_NIC if appropriate. This status - * is (badly) needed by some legacy combination of NT4 and card services which do not yield an I/O address in - * time. - * - *.NOTICE - * On platforms where the NULL-pointer is not a bit-pattern of all zeros, the zero-filling of the IFB results - * in an incorrect initialization of pointers. - * The implementation of the MailBox manipulation in put_mb_info protects against the absence of a MailBox - * based on IFB_MBSize, IFB_MBWp and ifbp->IFB_MBRp. This has ramifications on the initialization of the - * MailBox via hcf_put_info with the CFG_REG_MB type, but it prevents dependency on the "NULL-"ness of - * IFB_MBp. - * - *.NOTICE - * There are a number of problems when asserting and logging hcf_connect, e.g. - * - Asserting on re-entrancy of hcf_connect by means of - * "HCFASSERT( (ifbp->IFB_AssertTrace & HCF_ASSERT_CONNECT) == 0, 0 )" is not useful because IFB contents - * are undefined - * - Asserting before the IFB is cleared will cause mdd_assert() to interpret the garbage in IFB_AssertRtn - * as a routine address - * Therefore HCFTRACE nor HCFLOGENTRY is called by hcf_connect. - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -int -hcf_connect( IFBP ifbp, hcf_io io_base ) -{ - int rc = HCF_SUCCESS; - hcf_io io_addr; - hcf_32 prot_cnt; - hcf_8 *q; - LTV_STRCT x; -#if HCF_ASSERT - hcf_16 xa = ifbp->IFB_FWIdentity.typ; - /* is assumed to cause an assert later on if hcf_connect is called without intervening hcf_disconnect. - * xa == CFG_FW_IDENTITY in subsequent calls without preceding hcf_disconnect, - * xa == 0 in subsequent calls with preceding hcf_disconnect, - * xa == "garbage" (any value except CFG_FW_IDENTITY is acceptable) in the initial call - */ -#endif // HCF_ASSERT - - if ( io_base == HCF_DISCONNECT ) { //disconnect - io_addr = ifbp->IFB_IOBase; - OPW( HREG_INT_EN, 0 ); //;?workaround against dying F/W on subsequent hcf_connect calls - } else { //connect /* 0 */ - io_addr = io_base; - } - -#if 0 //;? if a subsequent hcf_connect is preceded by an hcf_disconnect the wakeup is not needed !! -#if HCF_SLEEP - OUT_PORT_WORD( .....+HREG_IO, HREG_IO_WAKEUP_ASYNC ); //OPW not yet useable - MSF_WAIT(800); // MSF-defined function to wait n microseconds. - note that MSF_WAIT uses not yet defined!!!! IFB_IOBase and IFB_TickIni (via PROT_CNT_INI) - so be careful if this code is restored -#endif // HCF_SLEEP -#endif // 0 - -#if ( (HCF_TYPE) & HCF_TYPE_PRELOADED ) == 0 //switch clock back for SEEPROM access !!! - OUT_PORT_WORD( io_addr + HREG_CMD, HCMD_INI ); //OPW not yet useable - prot_cnt = INI_TICK_INI; - HCF_WAIT_WHILE( (IN_PORT_WORD( io_addr + HREG_EV_STAT) & HREG_EV_CMD) == 0 ); - OUT_PORT_WORD( (io_addr + HREG_IO), HREG_IO_SRESET ); //OPW not yet useable /* 2a*/ -#endif // HCF_TYPE_PRELOADED - for ( q = (hcf_8*)(&ifbp->IFB_Magic); q > (hcf_8*)ifbp; *--q = 0 ) /*NOP*/; /* 4 */ - ifbp->IFB_Magic = HCF_MAGIC; - ifbp->IFB_Version = IFB_VERSION; -#if defined MSF_COMPONENT_ID //a new IFB demonstrates how dirty the solution is - xxxx[xxxx_PRI_IDENTITY_OFFSET] = NULL; //IFB_PRIIdentity placeholder 0xFD02 - xxxx[xxxx_PRI_IDENTITY_OFFSET+1] = NULL; //IFB_PRISup placeholder 0xFD03 -#endif // MSF_COMPONENT_ID -#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) - ifbp->IFB_TallyLen = 1 + 2 * (HCF_NIC_TAL_CNT + HCF_HCF_TAL_CNT); //convert # of Tallies to L value for LTV - ifbp->IFB_TallyTyp = CFG_TALLIES; //IFB_TallyTyp: set T value -#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF - ifbp->IFB_IOBase = io_addr; //set IO_Base asap, so asserts via HREG_SW_2 don't harm - ifbp->IFB_IORange = HREG_IO_RANGE; - ifbp->IFB_CntlOpt = USE_16BIT; -#if HCF_ASSERT - assert_ifbp = ifbp; - ifbp->IFB_AssertLvl = 1; -#if (HCF_ASSERT) & HCF_ASSERT_LNK_MSF_RTN - if ( io_base != HCF_DISCONNECT ) { - ifbp->IFB_AssertRtn = (MSF_ASSERT_RTNP)msf_assert; /* 6 */ - } -#endif // HCF_ASSERT_LNK_MSF_RTN -#if (HCF_ASSERT) & HCF_ASSERT_MB //build the structure to pass the assert info to hcf_put_info - ifbp->IFB_AssertStrct.len = sizeof(ifbp->IFB_AssertStrct)/sizeof(hcf_16) - 1; - ifbp->IFB_AssertStrct.typ = CFG_MB_INFO; - ifbp->IFB_AssertStrct.base_typ = CFG_MB_ASSERT; - ifbp->IFB_AssertStrct.frag_cnt = 1; - ifbp->IFB_AssertStrct.frag_buf[0].frag_len = - ( offsetof(IFB_STRCT, IFB_AssertLvl) - offsetof(IFB_STRCT, IFB_AssertLine) ) / sizeof(hcf_16); - ifbp->IFB_AssertStrct.frag_buf[0].frag_addr = &ifbp->IFB_AssertLine; -#endif // HCF_ASSERT_MB -#endif // HCF_ASSERT - IF_PROT_TIME( prot_cnt = ifbp->IFB_TickIni = INI_TICK_INI ); -#if ( (HCF_TYPE) & HCF_TYPE_PRELOADED ) == 0 - //!! No asserts before Reset-bit in HREG_IO is cleared - OPW( HREG_IO, 0x0000 ); //OPW useable /* 2b*/ - HCF_WAIT_WHILE( (IPW( HREG_EV_STAT) & HREG_EV_CMD) == 0 ); - IF_PROT_TIME( HCFASSERT( prot_cnt, IPW( HREG_EV_STAT) ) ); - IF_PROT_TIME( if ( prot_cnt ) prot_cnt = ifbp->IFB_TickIni ); -#endif // HCF_TYPE_PRELOADED - //!! No asserts before Reset-bit in HREG_IO is cleared - HCFASSERT( DO_ASSERT, MERGE_2( HCF_ASSERT, 0xCAF0 ) ); //just to proof that the complete assert machinery is working - HCFASSERT( xa != CFG_FW_IDENTITY, 0 ); // assert if hcf_connect is called without intervening hcf_disconnect. - HCFASSERT( ((hcf_32)(void*)ifbp & (HCF_ALIGN-1) ) == 0, (hcf_32)(void*)ifbp ); - HCFASSERT( (io_addr & 0x003F) == 0, io_addr ); - //if Busy bit in Cmd register - if (IPW( HREG_CMD ) & HCMD_BUSY ) { /* 8 */ - //. Ack all to unblock a (possibly) blocked cmd pipe line - OPW( HREG_EV_ACK, ~HREG_EV_SLEEP_REQ ); - //. Wait for Busy bit drop in Cmd register - //. Wait for Cmd bit raise in Ev register - HCF_WAIT_WHILE( ( IPW( HREG_CMD ) & HCMD_BUSY ) && (IPW( HREG_EV_STAT) & HREG_EV_CMD) == 0 ); - IF_PROT_TIME( HCFASSERT( prot_cnt, IPW( HREG_EV_STAT) ) ); /* if prot_cnt == 0, cmd_exe will fail, causing DEFUNCT */ - } - OPW( HREG_EV_ACK, ~HREG_EV_SLEEP_REQ ); -#if ( (HCF_TYPE) & HCF_TYPE_PRELOADED ) == 0 /*12*/ - (void)cmd_exe( ifbp, HCMD_INI, 0 ); -#endif // HCF_TYPE_PRELOADED - if ( io_base != HCF_DISCONNECT ) { - rc = init( ifbp ); /*14*/ - if ( rc == HCF_SUCCESS ) { - x.len = 2; - x.typ = CFG_NIC_BUS_TYPE; - (void)hcf_get_info( ifbp, &x ); - ifbp->IFB_BusType = x.val[0]; - //CFG_NIC_BUS_TYPE not supported -> default 32 bits/DMA, MSF has to overrule via CFG_CNTL_OPT - if ( x.len == 0 || x.val[0] == 0x0002 || x.val[0] == 0x0003 ) { -#if (HCF_IO) & HCF_IO_32BITS - ifbp->IFB_CntlOpt &= ~USE_16BIT; //reset USE_16BIT -#endif // HCF_IO_32BITS -#if HCF_DMA - ifbp->IFB_CntlOpt |= USE_DMA; //SET DMA -#else - ifbp->IFB_IORange = 0x40 /*i.s.o. HREG_IO_RANGE*/; -#endif // HCF_DMA - } - } - } else HCFASSERT( ( ifbp->IFB_Magic ^= HCF_MAGIC ) == 0, ifbp->IFB_Magic ) /*NOP*/; - /* of above HCFASSERT only the side effect is needed, NOP in case HCFASSERT is dummy */ - ifbp->IFB_IOBase = io_base; /* 0*/ - return rc; -} // hcf_connect - -#if HCF_DMA -/************************************************************************************************************ - * Function get_frame_lst - * - resolve the "last host-owned descriptor" problems when a descriptor list is reclaimed by the MSF. - * - * The FrameList to be reclaimed as well as the DescriptorList always start in IFB_FirstDesc[tx_rx_flag] - * and this is always the "current" DELWA Descriptor. - * - * If a FrameList is available, the last descriptor of the FrameList to turned into a new DELWA Descriptor: - * - a copy is made from the information in the last descriptor of the FrameList into the current - * DELWA Descriptor - * - the remainder of the DescriptorList is detached from the copy by setting the next_desc_addr at NULL - * - the DMA control bits of the copy are cleared to do not confuse the MSF - * - the copy of the last descriptor (i.e. the "old" DELWA Descriptor) is chained to the prev Descriptor - * of the FrameList, thus replacing the original last Descriptor of the FrameList. - * - IFB_FirstDesc is changed to the address of that replaced (original) last descriptor of the FrameList, - * i.e. the "new" DELWA Descriptor. - * - * This function makes a copy of that last host-owned descriptor, so the MSF will get a copy of the descriptor. - * On top of that, it adjusts DMA related fields in the IFB structure. - // perform a copying-scheme to circumvent the 'last host owned descriptor cannot be reclaimed' limitation imposed by H2.5's DMA hardware design - // a 'reclaim descriptor' should be available in the HCF: - * - * Returns: address of the first descriptor of the FrameList - * - 8: Be careful once you start re-ordering the steps in the copy process, that it still works for cases - * of FrameLists of 1, 2 and more than 2 descriptors - * - * Input parameters: - * tx_rx_flag : specifies 'transmit' or 'receive' descriptor. - * - ************************************************************************************************************/ -HCF_STATIC DESC_STRCT* -get_frame_lst( IFBP ifbp, int tx_rx_flag ) -{ - - DESC_STRCT *head = ifbp->IFB_FirstDesc[tx_rx_flag]; - DESC_STRCT *copy, *p, *prev; - - HCFASSERT( tx_rx_flag == DMA_RX || tx_rx_flag == DMA_TX, tx_rx_flag ); - //if FrameList - if ( head ) { - //. search for last descriptor of first FrameList - p = prev = head; - while ( ( p->BUF_SIZE & DESC_EOP ) == 0 && p->next_desc_addr ) { - if ( ( ifbp->IFB_CntlOpt & DMA_ENABLED ) == 0 ) { //clear control bits when disabled - p->BUF_CNT &= DESC_CNT_MASK; - } - prev = p; - p = p->next_desc_addr; - } - //. if DMA enabled - if ( ifbp->IFB_CntlOpt & DMA_ENABLED ) { - //. . if last descriptor of FrameList is DMA owned - //. . or if FrameList is single (DELWA) Descriptor - if ( p->BUF_CNT & DESC_DMA_OWNED || head->next_desc_addr == NULL ) { - //. . . refuse to return FrameList to caller - head = NULL; - } - } - } - //if returnable FrameList found - if ( head ) { - //. if FrameList is single (DELWA) Descriptor (implies DMA disabled) - if ( head->next_desc_addr == NULL ) { - //. . clear DescriptorList - /*;?ifbp->IFB_LastDesc[tx_rx_flag] =*/ ifbp->IFB_FirstDesc[tx_rx_flag] = NULL; - //. else - } else { - //. . strip hardware-related bits from last descriptor - //. . remove DELWA Descriptor from head of DescriptorList - copy = head; - head = head->next_desc_addr; - //. . exchange first (Confined) and last (possibly imprisoned) Descriptor - copy->buf_phys_addr = p->buf_phys_addr; - copy->buf_addr = p->buf_addr; - copy->BUF_SIZE = p->BUF_SIZE &= DESC_CNT_MASK; //get rid of DESC_EOP and possibly DESC_SOP - copy->BUF_CNT = p->BUF_CNT &= DESC_CNT_MASK; //get rid of DESC_DMA_OWNED -#if (HCF_EXT) & HCF_DESC_STRCT_EXT - copy->DESC_MSFSup = p->DESC_MSFSup; -#endif // HCF_DESC_STRCT_EXT - //. . turn into a DELWA Descriptor - p->buf_addr = NULL; - //. . chain copy to prev /* 8*/ - prev->next_desc_addr = copy; - //. . detach remainder of the DescriptorList from FrameList - copy->next_desc_addr = NULL; - copy->next_desc_phys_addr = 0xDEAD0000; //! just to be nice, not really needed - //. . save the new start (i.e. DELWA Descriptor) in IFB_FirstDesc - ifbp->IFB_FirstDesc[tx_rx_flag] = p; - } - //. strip DESC_SOP from first descriptor - head->BUF_SIZE &= DESC_CNT_MASK; - //head->BUF_CNT &= DESC_CNT_MASK; get rid of DESC_DMA_OWNED - head->next_desc_phys_addr = 0xDEAD0000; //! just to be nice, not really needed - } - //return the just detached FrameList (if any) - return head; -} // get_frame_lst - - -/************************************************************************************************************ - * Function put_frame_lst - * - * This function - * - * Returns: address of the first descriptor of the FrameList - * - * Input parameters: - * tx_rx_flag : specifies 'transmit' or 'receive' descriptor. - * - * The following list should be kept in sync with hcf_dma_tx/rx_put, in order to get them in the WCI-spec !!!! - * Assert fails if - * - DMA is not enabled - * - descriptor list is NULL - * - a descriptor in the descriptor list is not double word aligned - * - a count of size field of a descriptor contains control bits, i.e. bits in the high order nibble. - * - the DELWA descriptor is not a "singleton" DescriptorList. - * - the DELWA descriptor is not the first Descriptor supplied - * - a non_DMA descriptor is supplied before the DELWA Descriptor is supplied - * - Possibly more checks could be added !!!!!!!!!!!!! - - *.NOTICE - * The asserts marked with *sc* are really sanity checks for the HCF, they can (supposedly) not be influenced - * by incorrect MSF behavior - - // The MSF is required to supply the HCF with a single descriptor for MSF tx reclaim purposes. - // This 'reclaim descriptor' can be recognized by the fact that its buf_addr field is zero. - ********************************************************************************************* - * Although not required from a hardware perspective: - * - make each descriptor in this rx-chain DMA-owned. - * - Also set the count to zero. EOP and SOP bits are also cleared. - *********************************************************************************************/ -HCF_STATIC void -put_frame_lst( IFBP ifbp, DESC_STRCT *descp, int tx_rx_flag ) -{ - DESC_STRCT *p = descp; - hcf_16 port; - - HCFASSERT( ifbp->IFB_CntlOpt & USE_DMA, ifbp->IFB_CntlOpt); //only hcf_dma_tx_put must also be DMA_ENABLED - HCFASSERT( tx_rx_flag == DMA_RX || tx_rx_flag == DMA_TX, tx_rx_flag ); - HCFASSERT( p , 0 ); - - while ( p ) { - HCFASSERT( ((hcf_32)p & 3 ) == 0, (hcf_32)p ); - HCFASSERT( (p->BUF_CNT & ~DESC_CNT_MASK) == 0, p->BUF_CNT ); - HCFASSERT( (p->BUF_SIZE & ~DESC_CNT_MASK) == 0, p->BUF_SIZE ); - p->BUF_SIZE &= DESC_CNT_MASK; //!!this SHOULD be superfluous in case of correct MSF - p->BUF_CNT &= tx_rx_flag == DMA_RX ? 0 : DESC_CNT_MASK; //!!this SHOULD be superfluous in case of correct MSF - p->BUF_CNT |= DESC_DMA_OWNED; - if ( p->next_desc_addr ) { -// HCFASSERT( p->buf_addr && p->buf_phys_addr && p->BUF_SIZE && +/- p->BUF_SIZE, ... ); - HCFASSERT( p->next_desc_addr->desc_phys_addr, (hcf_32)p->next_desc_addr ); - p->next_desc_phys_addr = p->next_desc_addr->desc_phys_addr; - } else { // - p->next_desc_phys_addr = 0; - if ( p->buf_addr == NULL ) { // DELWA Descriptor - HCFASSERT( descp == p, (hcf_32)descp ); //singleton DescriptorList - HCFASSERT( ifbp->IFB_FirstDesc[tx_rx_flag] == NULL, (hcf_32)ifbp->IFB_FirstDesc[tx_rx_flag]); - HCFASSERT( ifbp->IFB_LastDesc[tx_rx_flag] == NULL, (hcf_32)ifbp->IFB_LastDesc[tx_rx_flag]); - descp->BUF_CNT = 0; //&= ~DESC_DMA_OWNED; - ifbp->IFB_FirstDesc[tx_rx_flag] = descp; -// part of alternative ifbp->IFB_LastDesc[tx_rx_flag] = ifbp->IFB_FirstDesc[tx_rx_flag] = descp; - // if "recycling" a FrameList - // (e.g. called from hcf_cntl( HCF_CNTL_ENABLE ) - // . prepare for activation DMA controller -// part of alternative descp = descp->next_desc_addr; - } else { //a "real" FrameList, hand it over to the DMA engine - HCFASSERT( ifbp->IFB_FirstDesc[tx_rx_flag], (hcf_32)descp ); - HCFASSERT( ifbp->IFB_LastDesc[tx_rx_flag], (hcf_32)descp ); - HCFASSERT( ifbp->IFB_LastDesc[tx_rx_flag]->next_desc_addr == NULL, - (hcf_32)ifbp->IFB_LastDesc[tx_rx_flag]->next_desc_addr); -// p->buf_cntl.cntl_stat |= DESC_DMA_OWNED; - ifbp->IFB_LastDesc[tx_rx_flag]->next_desc_addr = descp; - ifbp->IFB_LastDesc[tx_rx_flag]->next_desc_phys_addr = descp->desc_phys_addr; - port = HREG_RXDMA_PTR32; - if ( tx_rx_flag ) { - p->BUF_SIZE |= DESC_EOP; // p points at the last descriptor in the caller-supplied descriptor chain - descp->BUF_SIZE |= DESC_SOP; - port = HREG_TXDMA_PTR32; - } - OUT_PORT_DWORD( (ifbp->IFB_IOBase + port), descp->desc_phys_addr ); - } - ifbp->IFB_LastDesc[tx_rx_flag] = p; - } - p = p->next_desc_addr; - } -} // put_frame_lst - - -/************************************************************************************************************ - * - *.MODULE DESC_STRCT* hcf_dma_rx_get( IFBP ifbp ) - *.PURPOSE decapsulate a message and provides that message to the MSF. - * reclaim all descriptors in the rx descriptor chain. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * pointer to a FrameList - * - *.DESCRIPTION - * hcf_dma_rx_get is intended to return a received frame when such a frame is deposited in Host memory by the - * DMA engine. In addition hcf_dma_rx_get can be used to reclaim all descriptors in the rx descriptor chain - * when the DMA Engine is disabled, e.g. as part of a driver unloading strategy. - * hcf_dma_rx_get must be called repeatedly by the MSF when hcf_service_nic signals availability of a rx frame - * through the HREG_EV_RDMAD flag of IFB_DmaPackets. The calling must stop when a NULL pointer is returned, at - * which time the HREG_EV_RDMAD flag is also cleared by the HCF to arm the mechanism for the next frame - * reception. - * Regardless whether the DMA Engine is currently enabled (as controlled via hcf_cntl), if the DMA controller - * deposited an Rx-frame in the Rx-DescriptorList, this frame is detached from the Rx-DescriptorList, - * transformed into a FrameList (i.e. updating the housekeeping fields in the descriptors) and returned to the - * caller. - * If no such Rx-frame is available in the Rx-DescriptorList, the behavior of hcf_dma_rx_get depends on the - * status of the DMA Engine. - * If the DMA Engine is enabled, a NULL pointer is returned. - * If the DMA Engine is disabled, the following strategy is used: - * - the complete Rx-DescriptorList is returned. The DELWA Descriptor is not part of the Rx-DescriptorList. - * - If there is no Rx-DescriptorList, the DELWA Descriptor is returned. - * - If there is no DELWA Descriptor, a NULL pointer is returned. - * - * If the MSF performs an disable/enable sequence without exhausting the Rx-DescriptorList as described above, - * the enable command will reset all house keeping information, i.e. already received but not yet by the MSF - * retrieved frames are lost and the next frame will be received starting with the oldest descriptor. - * - * The HCF can be used in 2 fashions: with and without decapsulation for data transfer. - * This is controlled at compile time by the HCF_ENC bit of the HCF_ENCAP system constant. - * If appropriate, decapsulation is done by moving some data inside the buffers and updating the descriptors - * accordingly. - *!! ;?????where did I describe why a simple manipulation with the count values does not suffice? - * - *.DIAGRAM - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ - -DESC_STRCT* -hcf_dma_rx_get (IFBP ifbp) -{ - DESC_STRCT *descp; // pointer to start of FrameList - - descp = get_frame_lst( ifbp, DMA_RX ); - if ( descp && descp->buf_addr ) { - - //skip decapsulation at confined descriptor -#if (HCF_ENCAP) == HCF_ENC - int i; - DESC_STRCT *p = descp->next_desc_addr; //pointer to 2nd descriptor of frame - HCFASSERT(p, 0); - // The 2nd descriptor contains (maybe) a SNAP header plus part or whole of the payload. - //determine decapsulation sub-flag in RxFS - i = *(wci_recordp)&descp->buf_addr[HFS_STAT] & ( HFS_STAT_MSG_TYPE | HFS_STAT_ERR ); - if ( i == HFS_STAT_TUNNEL || - ( i == HFS_STAT_1042 && hcf_encap( (wci_bufp)&p->buf_addr[HCF_DASA_SIZE] ) != ENC_TUNNEL )) { - // The 2nd descriptor contains a SNAP header plus part or whole of the payload. - HCFASSERT( p->BUF_CNT == (p->buf_addr[5] + (p->buf_addr[4]<<8) + 2*6 + 2 - 8), p->BUF_CNT ); - // perform decapsulation - HCFASSERT(p->BUF_SIZE >=8, p->BUF_SIZE); - // move SA[2:5] in the second buffer to replace part of the SNAP header - for ( i=3; i >= 0; i--) p->buf_addr[i+8] = p->buf_addr[i]; - // copy DA[0:5], SA[0:1] from first buffer to second buffer - for ( i=0; i<8; i++) p->buf_addr[i] = descp->buf_addr[HFS_ADDR_DEST + i]; - // make first buffer shorter in count - descp->BUF_CNT = HFS_ADDR_DEST; - } - } -#endif // HCF_ENC - if ( descp == NULL ) ifbp->IFB_DmaPackets &= (hcf_16)~HREG_EV_RDMAD; //;?could be integrated into get_frame_lst - HCFLOGEXIT( HCF_TRACE_DMA_RX_GET ); - return descp; -} // hcf_dma_rx_get - - -/************************************************************************************************************ - * - *.MODULE void hcf_dma_rx_put( IFBP ifbp, DESC_STRCT *descp ) - *.PURPOSE supply buffers for receive purposes. - * supply the Rx-DELWA descriptor. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * descp address of a DescriptorList - * - *.RETURNS N.A. - * - *.DESCRIPTION - * This function is called by the MSF to supply the HCF with new/more buffers for receive purposes. - * The HCF can be used in 2 fashions: with and without encapsulation for data transfer. - * This is controlled at compile time by the HCF_ENC bit of the HCF_ENCAP system constant. - * As a consequence, some additional constraints apply to the number of descriptor and the buffers associated - * with the first 2 descriptors. Independent of the encapsulation feature, the COUNT fields are ignored. - * A special case is the supplying of the DELWA descriptor, which must be supplied as the first descriptor. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value. - * - NIC interrupts are not disabled while required by parameter action. - * - in case decapsulation by the HCF is selected: - * - The first databuffer does not have the exact size corresponding with the RxFS up to the 802.3 DestAddr - * field (== 29 words). - * - The FrameList does not consists of at least 2 Descriptors. - * - The second databuffer does not have the minimum size of 8 bytes. - *!! The 2nd part of the list of asserts should be kept in sync with put_frame_lst, in order to get - *!! them in the WCI-spec !!!! - * - DMA is not enabled - * - descriptor list is NULL - * - a descriptor in the descriptor list is not double word aligned - * - a count of size field of a descriptor contains control bits, i.e. bits in the high order nibble. - * - the DELWA descriptor is not a "singleton" DescriptorList. - * - the DELWA descriptor is not the first Descriptor supplied - * - a non_DMA descriptor is supplied before the DELWA Descriptor is supplied - *!! - Possibly more checks could be added !!!!!!!!!!!!! - * - *.DIAGRAM - * - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -void -hcf_dma_rx_put( IFBP ifbp, DESC_STRCT *descp ) -{ - - HCFLOGENTRY( HCF_TRACE_DMA_RX_PUT, 0xDA01 ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - - put_frame_lst( ifbp, descp, DMA_RX ); -#if HCF_ASSERT && (HCF_ENCAP) == HCF_ENC - if ( descp->buf_addr ) { - HCFASSERT( descp->BUF_SIZE == HCF_DMA_RX_BUF1_SIZE, descp->BUF_SIZE ); - HCFASSERT( descp->next_desc_addr, 0 ); // first descriptor should be followed by another descriptor - // The second DB is for SNAP and payload purposes. It should be a minimum of 12 bytes in size. - HCFASSERT( descp->next_desc_addr->BUF_SIZE >= 12, descp->next_desc_addr->BUF_SIZE ); - } -#endif // HCFASSERT / HCF_ENC - HCFLOGEXIT( HCF_TRACE_DMA_RX_PUT ); -} // hcf_dma_rx_put - - -/************************************************************************************************************ - * - *.MODULE DESC_STRCT* hcf_dma_tx_get( IFBP ifbp ) - *.PURPOSE DMA mode: reclaims and decapsulates packets in the tx descriptor chain if: - * - A Tx packet has been copied from host-RAM into NIC-RAM by the DMA engine - * - The Hermes/DMAengine have been disabled - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * pointer to a reclaimed Tx packet. - * - *.DESCRIPTION - * impact of the disable command: - * When a non-empty pool of Tx descriptors exists (created by means of hcf_dma_put_tx), the MSF - * is supposed to empty that pool by means of hcf_dma_tx_get calls after the disable in an - * disable/enable sequence. - * - *.DIAGRAM - * - *.NOTICE - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -DESC_STRCT* -hcf_dma_tx_get( IFBP ifbp ) -{ - DESC_STRCT *descp; // pointer to start of FrameList - - descp = get_frame_lst( ifbp, DMA_TX ); - if ( descp && descp->buf_addr ) { - //skip decapsulation at confined descriptor -#if (HCF_ENCAP) == HCF_ENC - if ( ( descp->BUF_CNT == HFS_TYPE )) { - // perform decapsulation if needed - descp->next_desc_addr->buf_phys_addr -= HCF_DASA_SIZE; - descp->next_desc_addr->BUF_CNT += HCF_DASA_SIZE; - } -#endif // HCF_ENC - } - if ( descp == NULL ) { //;?could be integrated into get_frame_lst - ifbp->IFB_DmaPackets &= (hcf_16)~HREG_EV_TDMAD; - } - HCFLOGEXIT( HCF_TRACE_DMA_TX_GET ); - return descp; -} // hcf_dma_tx_get - - -/************************************************************************************************************ - * - *.MODULE void hcf_dma_tx_put( IFBP ifbp, DESC_STRCT *descp, hcf_16 tx_cntl ) - *.PURPOSE puts a packet in the Tx DMA queue in host ram and kicks off the TxDma engine. - * supply the Tx-DELWA descriptor. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * descp address of Tx Descriptor Chain (i.e. a single Tx frame) - * tx_cntl indicates MAC-port and (Hermes) options - * - *.RETURNS N.A. - * - *.DESCRIPTION - * The HCF can be used in 2 fashions: with and without encapsulation for data transfer. - * This is controlled at compile time by the HCF_ENC bit of the HCF_ENCAP system constant. - * - * Regardless of the HCF_ENCAP system constant, the descriptor list created to describe the frame to be - * transmitted, must supply space to contain the 802.11 header, preceding the actual frame to be transmitted. - * Basically, this only supplies working storage to the HCF which passes this on to the DMA engine. - * As a consequence the contents of this space do not matter. - * Nevertheless BUF_CNT must take in account this storage. - * This working space to contain the 802.11 header may not be fragmented, the first buffer must be - * sufficiently large to contain at least the 802.11 header, i.e. HFS_ADDR_DEST (29 words or 0x3A bytes). - * This way, the HCF can simply, regardless whether or not the HCF encapsulates the frame, write the parameter - * tx_cntl at offset 0x36 (HFS_TX_CNTL) in the first buffer. - * Note that it is allowed to have part or all of the actual frame represented by the first descriptor as long - * as the requirement for storage for the 802.11 header is met, i.e. the 802.3 frame starts at offset - * HFS_ADDR_DEST. - * Except for the Assert on the 1st buffer in case of Encapsualtion, the SIZE fields are ignored. - * - * In case the encapsulation feature is compiled in, there are the following additional requirements. - * o The BUF_CNT of the first buffer changes from a minimum of 0x3A bytes to exactly 0x3A, i.e. the workspace - * to store the 802.11 header - * o The BUF_SIZE of the first buffer is at least the space needed to store the - * - 802.11 header (29 words) - * - 802.3 header, i.e. 12 bytes addressing information and 2 bytes length field - * - 6 bytes SNAP-header - * This results in 39 words or 0x4E bytes or HFS_TYPE. - * Note that if the BUF_SIZE is larger than 0x4E, this surplus is not used. - * o The actual frame begins in the 2nd descriptor (which is already implied by the BUF_CNT == 0x3A requirement) and the associated buffer contains at least the 802.3 header, i.e. the 14 bytes representing addressing information and length/type field - * - * When the HCF does not encapsulates (i.e. length/type field <= 1500), no changes are made to descriptors - * or buffers. - * - * When the HCF actually encapsulates (i.e. length/type field > 1500), it successively writes, starting at - * offset HFS_ADDR_DEST (0x3A) in the first buffer: - * - the 802.3 addressing information, copied from the begin of the second buffer - * - the frame length, derived from the total length of the individual fragments, corrected for the SNAP - * header length and Type field and ignoring the Destination Address, Source Address and Length field - * - the appropriate snap header (Tunnel or 1042, depending on the value of the type field). - * - * The information in the first two descriptors is adjusted accordingly: - * - the first descriptor count is changed from 0x3A to 0x4E (HFS_TYPE), which matches 0x3A + 12 + 2 + 6 - * - the second descriptor count is decreased by 12, being the moved addressing information - * - the second descriptor (physical) buffer address is increased by 12. - * - * When the descriptors are returned by hcf_dma_tx_get, the transformation of the first two descriptors is - * undone. - * - * Under any of the above scenarios, the assert BUF_CNT <= BUF_SIZE must be true for all descriptors - * In case of encapsulation, BUF_SIZE of the 1st descriptor is asserted to be at least HFS_TYPE (0x4E), so it is NOT tested. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value. - * - tx_cntl has a recognizable out-of-range value. - * - NIC interrupts are not disabled while required by parameter action. - * - in case encapsulation by the HCF is selected: - * - The FrameList does not consists of at least 2 Descriptors. - * - The first databuffer does not contain exactly the (space for) the 802.11 header (== 28 words) - * - The first databuffer does not have a size to additionally accommodate the 802.3 header and the - * SNAP header of the frame after encapsulation (== 39 words). - * - The second databuffer does not contain at least DA, SA and 'type/length' (==14 bytes or 7 words) - *!! The 2nd part of the list of asserts should be kept in sync with put_frame_lst, in order to get - *!! them in the WCI-spec !!!! - * - DMA is not enabled - * - descriptor list is NULL - * - a descriptor in the descriptor list is not double word aligned - * - a count of size field of a descriptor contains control bits, i.e. bits in the high order nibble. - * - the DELWA descriptor is not a "singleton" DescriptorList. - * - the DELWA descriptor is not the first Descriptor supplied - * - a non_DMA descriptor is supplied before the DELWA Descriptor is supplied - *!! - Possibly more checks could be added !!!!!!!!!!!!! - *.DIAGRAM - * - *.NOTICE - * - *.ENDDOC END DOCUMENTATION - * - * - *1: Write tx_cntl parameter to HFS_TX_CNTL field into the Hermes-specific header in buffer 1 - *4: determine whether encapsulation is needed and write the type (tunnel or 1042) already at the appropriate - * offset in the 1st buffer - *6: Build the encapsualtion enveloppe in the free space at the end of the 1st buffer - * - Copy DA/SA fields from the 2nd buffer - * - Calculate total length of the message (snap-header + type-field + the length of all buffer fragments - * associated with the 802.3 frame (i.e all descriptors except the first), but not the DestinationAddress, - * SourceAddress and length-field) - * Assert the message length - * Write length. Note that the message is in BE format, hence on LE platforms the length must be converted - * ;? THIS IS NOT WHAT CURRENTLY IS IMPLEMENTED - * - Write snap header. Note that the last byte of the snap header is NOT copied, that byte is already in - * place as result of the call to hcf_encap. - * Note that there are many ways to skin a cat. To express the offsets in the 1st buffer while writing - * the snap header, HFS_TYPE is chosen as a reference point to make it easier to grasp that the snap header - * and encapsualtion type are at least relative in the right. - *8: modify 1st descriptor to reflect moved part of the 802.3 header + Snap-header - * modify 2nd descriptor to skip the moved part of the 802.3 header (DA/SA - *10: set each descriptor to 'DMA owned', clear all other control bits. - * Set SOP bit on first descriptor. Set EOP bit on last descriptor. - *12: Either append the current frame to an existing descriptor list or - *14: create a list beginning with the current frame - *16: remember the new end of the list - *20: hand the frame over to the DMA engine - ************************************************************************************************************/ -void -hcf_dma_tx_put( IFBP ifbp, DESC_STRCT *descp, hcf_16 tx_cntl ) -{ - DESC_STRCT *p = descp->next_desc_addr; - int i; - -#if HCF_ASSERT - int x = ifbp->IFB_FWIdentity.comp_id == COMP_ID_FW_AP ? tx_cntl & ~HFS_TX_CNTL_PORT : tx_cntl; - HCFASSERT( (x & ~HCF_TX_CNTL_MASK ) == 0, tx_cntl ); -#endif // HCF_ASSERT - HCFLOGENTRY( HCF_TRACE_DMA_TX_PUT, 0xDA03 ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - HCFASSERT( ( ifbp->IFB_CntlOpt & (USE_DMA|DMA_ENABLED) ) == (USE_DMA|DMA_ENABLED), ifbp->IFB_CntlOpt); - - if ( descp->buf_addr ) { - *(hcf_16*)(descp->buf_addr + HFS_TX_CNTL) = tx_cntl; /*1*/ -#if (HCF_ENCAP) == HCF_ENC - HCFASSERT( descp->next_desc_addr, 0 ); //at least 2 descripors - HCFASSERT( descp->BUF_CNT == HFS_ADDR_DEST, descp->BUF_CNT ); //exact length required for 1st buffer - HCFASSERT( descp->BUF_SIZE >= HCF_DMA_TX_BUF1_SIZE, descp->BUF_SIZE ); //minimal storage for encapsulation - HCFASSERT( p->BUF_CNT >= 14, p->BUF_CNT ); //at least DA, SA and 'type' in 2nd buffer - - descp->buf_addr[HFS_TYPE-1] = hcf_encap(&descp->next_desc_addr->buf_addr[HCF_DASA_SIZE]); /*4*/ - if ( descp->buf_addr[HFS_TYPE-1] != ENC_NONE ) { - for ( i=0; i < HCF_DASA_SIZE; i++ ) { /*6*/ - descp->buf_addr[i + HFS_ADDR_DEST] = descp->next_desc_addr->buf_addr[i]; - } - i = sizeof(snap_header) + 2 - ( 2*6 + 2 ); - do { i += p->BUF_CNT; } while ( ( p = p->next_desc_addr ) != NULL ); - *(hcf_16*)(&descp->buf_addr[HFS_LEN]) = CNV_END_SHORT(i); //!! this converts on ALL platforms, how does that relate to the CCX code - for ( i=0; i < sizeof(snap_header) - 1; i++) { - descp->buf_addr[HFS_TYPE - sizeof(snap_header) + i] = snap_header[i]; - } - descp->BUF_CNT = HFS_TYPE; /*8*/ - descp->next_desc_addr->buf_phys_addr += HCF_DASA_SIZE; - descp->next_desc_addr->BUF_CNT -= HCF_DASA_SIZE; - } -#endif // HCF_ENC - } - put_frame_lst( ifbp, descp, DMA_TX ); - HCFLOGEXIT( HCF_TRACE_DMA_TX_PUT ); -} // hcf_dma_tx_put - -#endif // HCF_DMA - -/************************************************************************************************************ - * - *.MODULE hcf_8 hcf_encap( wci_bufp type ) - *.PURPOSE test whether RFC1042 or Bridge-Tunnel encapsulation is needed. - * - *.ARGUMENTS - * type (Far) pointer to the (Big Endian) Type/Length field in the message - * - *.RETURNS - * ENC_NONE len/type is "len" ( (BIG_ENDIAN)type <= 1500 ) - * ENC_TUNNEL len/type is "type" and 0x80F3 or 0x8137 - * ENC_1042 len/type is "type" but not 0x80F3 or 0x8137 - * - *.CONDITIONS - * NIC Interrupts d.c - * - *.DESCRIPTION - * Type must point to the Len/Type field of the message, this is the 2-byte field immediately after the 6 byte - * Destination Address and 6 byte Source Address. The 2 successive bytes addressed by type are interpreted as - * a Big Endian value. If that value is less than or equal to 1500, the message is assumed to be in 802.3 - * format. Otherwise the message is assumed to be in Ethernet-II format. Depending on the value of Len/Typ, - * Bridge Tunnel or RFC1042 encapsulation is needed. - * - *.DIAGRAM - * - * 1: presume 802.3, hence preset return value at ENC_NONE - * 2: convert type from "network" Endian format to native Endian - * 4: the litmus test to distinguish type and len. - * The hard code "magic" value of 1500 is intentional and should NOT be replaced by a mnemonic because it is - * not related at all to the maximum frame size supported by the Hermes. - * 6: check type against: - * 0x80F3 //AppleTalk Address Resolution Protocol (AARP) - * 0x8137 //IPX - * to determine the type of encapsulation - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC hcf_8 -hcf_encap( wci_bufp type ) -{ - - hcf_8 rc = ENC_NONE; /* 1 */ - hcf_16 t = (hcf_16)(*type<<8) + *(type+1); /* 2 */ - - if ( t > 1500 ) { /* 4 */ - if ( t == 0x8137 || t == 0x80F3 ) { - rc = ENC_TUNNEL; /* 6 */ - } else { - rc = ENC_1042; - } - } - return rc; -} // hcf_encap - - -/************************************************************************************************************ - * - *.MODULE int hcf_get_info( IFBP ifbp, LTVP ltvp ) - *.PURPOSE Obtains transient and persistent configuration information from the Card and from the HCF. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * ltvp address of LengthTypeValue structure specifying the "what" and the "how much" of the - * information to be collected from the HCF or from the Hermes - * - *.RETURNS - * HCF_ERR_LEN The provided buffer was too small - * HCF_SUCCESS Success - *!! via cmd_exe ( type >= CFG_RID_FW_MIN ) - * HCF_ERR_NO_NIC NIC removed during retrieval - * HCF_ERR_TIME_OUT Expected Hermes event did not occur in expected time - *!! via cmd_exe and setup_bap (type >= CFG_RID_FW_MIN ) - * HCF_ERR_DEFUNCT_... HCF is in defunct mode (bits 0x7F reflect cause) - * - *.DESCRIPTION - * The T-field of the LTV-record (provided by the MSF in parameter ltvp) specifies the RID wanted. The RID - * information identified by the T-field is copied into the V-field. - * On entry, the L-field specifies the size of the buffer, also called the "Initial DataLength". The L-value - * includes the size of the T-field, but not the size of the L-field itself. - * On return, the L-field indicates the number of words actually contained by the Type and Value fields. - * As the size of the Type field in the LTV-record is included in the "Initial DataLength" of the record, the - * V-field can contain at most "Initial DataLength" - 1 words of data. - * Copying stops if either the complete Information is copied or if the number of words indicated by the - * "Initial DataLength" were copied. The "Initial DataLength" acts as a safe guard against Configuration - * Information blocks that have different sizes for different F/W versions, e.g. when later versions support - * more tallies than earlier versions. - * If the size of Value field of the RID exceeds the size of the "Initial DataLength" -1, as much data - * as fits is copied, and an error status of HCF_ERR_LEN is returned. - * - * It is the responsibility of the MSF to detect card removal and re-insertion and not call the HCF when the - * NIC is absent. The MSF cannot, however, timely detect a Card removal if the Card is removed while - * hcf_get_info is in progress. Therefore, the HCF performs its own check on Card presence after the read - * operation of the NIC data. If the Card is not present or removed during the execution of hcf_get_info, - * HCF_ERR_NO_NIC is returned and the content of the Data Buffer is unpredictable. This check is not performed - * in case of the "HCF embedded" pseudo RIDs like CFG_TALLIES. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value. - * - reentrancy, may be caused by calling hcf_functions without adequate protection - * against NIC interrupts or multi-threading. - * - ltvp is a NULL pointer. - * - length field of the LTV-record at entry is 0 or 1 or has an excessive value (i.e. exceeds HCF_MAX_LTV). - * - type field of the LTV-record is invalid. - * - *.DIAGRAM - * Hcf_get_mb_info copies the contents of the oldest MailBox Info block in the MailBox to PC RAM. If len is - * less than the size of the MailBox Info block, only as much as fits in the PC RAM buffer is copied. After - * the copying the MailBox Read pointer is updated to point to the next MailBox Info block, hence the - * remainder of an "oversized" MailBox Info block is lost. The truncation of the MailBox Info block is NOT - * reflected in the return status. Note that hcf_get_info guarantees the length of the PC RAM buffer meets - * the minimum requirements of at least 2, so no PC RAM buffer overrun. - * - * Calling hcf_get_mb_info when their is no MailBox Info block available or when there is no MailBox at all, - * results in a "NULL" MailBox Info block. - * - *12: see NOTICE - *17: The return status of cmd_wait and the first hcfio_in_string can be ignored, because when one fails, the - * other fails via the IFB_DefunctStat mechanism - *20: "HCFASSERT( rc == HCF_SUCCESS, rc )" is not suitable because this will always trigger as side effect of - * the HCFASSERT in hcf_put_info which calls hcf_get_info to figure out whether the RID exists at all. - - *.NOTICE - * - * "HCF embedded" pseudo RIDs: - * CFG_MB_INFO, CFG_TALLIES, CFG_DRV_IDENTITY, CFG_DRV_SUP_RANGE, CFG_DRV_ACT_RANGES_PRI, - * CFG_DRV_ACT_RANGES_STA, CFG_DRV_ACT_RANGES_HSI - * Note the HCF_ERR_LEN is NOT adequately set, when L >= 2 but less than needed - * - * Remarks: Transfers operation information and transient and persistent configuration information from the - * Card and from the HCF to the MSF. - * The exact layout of the provided data structure depends on the action code. Copying stops if either the - * complete Configuration Information is copied or if the number of bytes indicated by len is copied. Len - * acts as a safe guard against Configuration Information blocks which have different sizes for different - * Hermes versions, e.g. when later versions support more tallies than earlier versions. It is a conscious - * decision that unused parts of the PC RAM buffer are not cleared. - * - * Remarks: The only error against which is protected is the "Read error" as result of Card removal. Only the - * last hcf_io_string need to be protected because if the first fails the second will fail as well. Checking - * for cmd_exe errors is supposed superfluous because problems in cmd_exe are already caught or will be - * caught by hcf_enable. - * - * CFG_MB_INFO: copy the oldest MailBox Info Block or the "null" block if none available. - * - * The mechanism to HCF_ASSERT on invalid typ-codes in the LTV record is based on the following strategy: - * - during the pseudo-asynchronous Hermes commands (diagnose, download) only CFG_MB_INFO is acceptable - * - some codes (e.g. CFG_TALLIES) are explicitly handled by the HCF which implies that these codes - * are valid - * - all other codes in the range 0xFC00 through 0xFFFF are passed to the Hermes. The Hermes returns an - * LTV record with a zero value in the L-field for all Typ-codes it does not recognize. This is - * defined and intended behavior, so HCF_ASSERT does not catch on this phenomena. - * - all remaining codes are invalid and cause an ASSERT. - * - *.CONDITIONS - * In case of USB, HCF_MAX_MSG ;?USED;? to limit the amount of data that can be retrieved via hcf_get_info. - * - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -int -hcf_get_info( IFBP ifbp, LTVP ltvp ) -{ - - int rc = HCF_SUCCESS; - hcf_16 len = ltvp->len; - hcf_16 type = ltvp->typ; - wci_recordp p = <vp->len; //destination word pointer (in LTV record) - hcf_16 *q = NULL; /* source word pointer Note!! DOS COM can't cope with FAR - * as a consequence MailBox must be near which is usually true anyway - */ - int i; - - HCFLOGENTRY( HCF_TRACE_GET_INFO, ltvp->typ ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - HCFASSERT( ltvp, 0 ); - HCFASSERT( 1 < ltvp->len && ltvp->len <= HCF_MAX_LTV + 1, MERGE_2( ltvp->typ, ltvp->len ) ); - - ltvp->len = 0; //default to: No Info Available - //filter out all specials - for ( i = 0; ( q = xxxx[i] ) != NULL && q[1] != type; i++ ) /*NOP*/; - -#if HCF_TALLIES - if ( type == CFG_TALLIES ) { /*3*/ - (void)hcf_action( ifbp, HCF_ACT_TALLIES ); - q = (hcf_16*)&ifbp->IFB_TallyLen; - } -#endif // HCF_TALLIES - - if ( type == CFG_MB_INFO ) { - if ( ifbp->IFB_MBInfoLen ) { - if ( ifbp->IFB_MBp[ifbp->IFB_MBRp] == 0xFFFF ) { - ifbp->IFB_MBRp = 0; //;?Probably superfluous - } - q = &ifbp->IFB_MBp[ifbp->IFB_MBRp]; - ifbp->IFB_MBRp += *q + 1; //update read pointer - if ( ifbp->IFB_MBp[ifbp->IFB_MBRp] == 0xFFFF ) { - ifbp->IFB_MBRp = 0; - } - ifbp->IFB_MBInfoLen = ifbp->IFB_MBp[ifbp->IFB_MBRp]; - } - } - - if ( q != NULL ) { //a special or CFG_TALLIES or CFG_MB_INFO - i = min( len, *q ) + 1; //total size of destination (including T-field) - while ( i-- ) { - *p++ = *q; -#if (HCF_TALLIES) & HCF_TALLIES_RESET - if ( q > &ifbp->IFB_TallyTyp && type == CFG_TALLIES ) { - *q = 0; - } -#endif // HCF_TALLIES_RESET - q++; - } - } else { // not a special nor CFG_TALLIES nor CFG_MB_INFO - if ( type == CFG_CNTL_OPT ) { //read back effective options - ltvp->len = 2; - ltvp->val[0] = ifbp->IFB_CntlOpt; -#if (HCF_EXT) & HCF_EXT_NIC_ACCESS - } else if ( type == CFG_PROD_DATA ) { //only needed for some test tool on top of H-II NDIS driver - hcf_io io_port; - wci_bufp pt; //pointer with the "right" type, just to help ease writing macros with embedded assembly - OPW( HREG_AUX_PAGE, (hcf_16)(PLUG_DATA_OFFSET >> 7) ); - 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) - 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 - } - } else if ( type == CFG_CMD_HCF ) { -#define P ((CFG_CMD_HCF_STRCT FAR *)ltvp) - HCFASSERT( P->cmd == CFG_CMD_HCF_REG_ACCESS, P->cmd ); //only Hermes register access supported - if ( P->cmd == CFG_CMD_HCF_REG_ACCESS ) { - HCFASSERT( P->mode < ifbp->IFB_IOBase, P->mode ); //Check Register space - ltvp->len = min( len, 4 ); //RESTORE ltv length - P->add_info = IPW( P->mode ); - } -#undef P -#endif // HCF_EXT_NIC_ACCESS -#if (HCF_ASSERT) & HCF_ASSERT_PRINTF - } else if (type == CFG_FW_PRINTF) { - rc = fw_printf(ifbp, (CFG_FW_PRINTF_STRCT*)ltvp); -#endif // HCF_ASSERT_PRINTF - } else if ( type >= CFG_RID_FW_MIN ) { -//;? by using HCMD_BUSY option when calling cmd_exe, using a get_frag with length 0 just to set up the -//;? BAP and calling cmd_cmpl, you could merge the 2 Busy waits. Whether this really helps (and what -//;? would be the optimal sequence in cmd_exe and get_frag) would have to be MEASURED - /*17*/ if ( ( rc = cmd_exe( ifbp, HCMD_ACCESS, type ) ) == HCF_SUCCESS && - ( rc = setup_bap( ifbp, type, 0, IO_IN ) ) == HCF_SUCCESS ) { - get_frag( ifbp, (wci_bufp)<vp->len, 2*len+2 BE_PAR(2) ); - if ( IPW( HREG_STAT ) == 0xFFFF ) { //NIC removal test - ltvp->len = 0; - HCFASSERT( DO_ASSERT, type ); - } - } - /*12*/ } else HCFASSERT( DO_ASSERT, type ) /*NOP*/; //NOP in case HCFASSERT is dummy - } - if ( len < ltvp->len ) { - ltvp->len = len; - if ( rc == HCF_SUCCESS ) { - rc = HCF_ERR_LEN; - } - } - HCFASSERT( rc == HCF_SUCCESS || ( rc == HCF_ERR_LEN && ifbp->IFB_AssertTrace & 1<typ ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - HCFASSERT( ltvp, 0 ); - HCFASSERT( 1 < ltvp->len && ltvp->len <= HCF_MAX_LTV + 1, ltvp->len ); - - //all codes between 0xFA00 and 0xFCFF are passed to Hermes -#if (HCF_TYPE) & HCF_TYPE_WPA - { - hcf_16 i; - hcf_32 FAR * key_p; - - if ( ltvp->typ == CFG_ADD_TKIP_DEFAULT_KEY || ltvp->typ == CFG_ADD_TKIP_MAPPED_KEY ) { - key_p = (hcf_32*)((CFG_ADD_TKIP_MAPPED_KEY_STRCT FAR *)ltvp)->tx_mic_key; - i = TX_KEY; //i.e. TxKeyIndicator == 1, KeyID == 0 - if ( ltvp->typ == CFG_ADD_TKIP_DEFAULT_KEY ) { - key_p = (hcf_32*)((CFG_ADD_TKIP_DEFAULT_KEY_STRCT FAR *)ltvp)->tx_mic_key; - i = CNV_LITTLE_TO_SHORT(((CFG_ADD_TKIP_DEFAULT_KEY_STRCT FAR *)ltvp)->tkip_key_id_info); - } - if ( i & TX_KEY ) { /* TxKeyIndicator == 1 - (either really set by MSF in case of DEFAULT or faked by HCF in case of MAPPED ) */ - ifbp->IFB_MICTxCntl = (hcf_16)( HFS_TX_CNTL_MIC | (i & KEY_ID )<<8 ); - ifbp->IFB_MICTxKey[0] = CNV_LONGP_TO_LITTLE( key_p ); - ifbp->IFB_MICTxKey[1] = CNV_LONGP_TO_LITTLE( (key_p+1) ); - } - i = ( i & KEY_ID ) * 2; - ifbp->IFB_MICRxKey[i] = CNV_LONGP_TO_LITTLE( (key_p+2) ); - ifbp->IFB_MICRxKey[i+1] = CNV_LONGP_TO_LITTLE( (key_p+3) ); - } -#define P ((CFG_REMOVE_TKIP_DEFAULT_KEY_STRCT FAR *)ltvp) - if ( ( ltvp->typ == CFG_REMOVE_TKIP_MAPPED_KEY ) || - ( ltvp->typ == CFG_REMOVE_TKIP_DEFAULT_KEY && - ( (ifbp->IFB_MICTxCntl >> 8) & KEY_ID ) == CNV_SHORT_TO_LITTLE(P->tkip_key_id ) - ) - ) { ifbp->IFB_MICTxCntl = 0; } //disable MIC-engine -#undef P - } -#endif // HCF_TYPE_WPA - - if ( ltvp->typ == CFG_PROG ) { - rc = download( ifbp, (CFG_PROG_STRCT FAR *)ltvp ); - } else switch (ltvp->typ) { -#if (HCF_ASSERT) & HCF_ASSERT_RT_MSF_RTN - case CFG_REG_ASSERT_RTNP: //Register MSF Routines -#define P ((CFG_REG_ASSERT_RTNP_STRCT FAR *)ltvp) - ifbp->IFB_AssertRtn = P->rtnp; -// ifbp->IFB_AssertLvl = P->lvl; //TODO not yet supported so default is set in hcf_connect - HCFASSERT( DO_ASSERT, MERGE_2( HCF_ASSERT, 0xCAF1 ) ); //just to proof that the complete assert machinery is working -#undef P - break; -#endif // HCF_ASSERT_RT_MSF_RTN -#if (HCF_EXT) & HCF_EXT_INFO_LOG - case CFG_REG_INFO_LOG: //Register Log filter - ifbp->IFB_RIDLogp = ((CFG_RID_LOG_STRCT FAR*)ltvp)->recordp; - break; -#endif // HCF_EXT_INFO_LOG - case CFG_CNTL_OPT: //overrule option - HCFASSERT( ( ltvp->val[0] & ~(USE_DMA | USE_16BIT) ) == 0, ltvp->val[0] ); - if ( ( ltvp->val[0] & USE_DMA ) == 0 ) ifbp->IFB_CntlOpt &= ~USE_DMA; - ifbp->IFB_CntlOpt |= ltvp->val[0] & USE_16BIT; - break; - - case CFG_REG_MB: //Register MailBox -#define P ((CFG_REG_MB_STRCT FAR *)ltvp) - HCFASSERT( ( (hcf_32)P->mb_addr & 0x0001 ) == 0, (hcf_32)P->mb_addr ); - HCFASSERT( (P)->mb_size >= 60, (P)->mb_size ); - ifbp->IFB_MBp = P->mb_addr; - /* if no MB present, size must be 0 for ;?the old;? put_info_mb to work correctly */ - ifbp->IFB_MBSize = ifbp->IFB_MBp == NULL ? 0 : P->mb_size; - ifbp->IFB_MBWp = ifbp->IFB_MBRp = 0; - ifbp->IFB_MBp[0] = 0; //flag the MailBox as empty - ifbp->IFB_MBInfoLen = 0; - HCFASSERT( ifbp->IFB_MBSize >= 60 || ifbp->IFB_MBp == NULL, ifbp->IFB_MBSize ); -#undef P - break; - case CFG_MB_INFO: //store MailBoxInfoBlock - rc = put_info_mb( ifbp, (CFG_MB_INFO_STRCT FAR *)ltvp ); - break; - -#if (HCF_EXT) & HCF_EXT_NIC_ACCESS - case CFG_CMD_NIC: -#define P ((CFG_CMD_NIC_STRCT FAR *)ltvp) - OPW( HREG_PARAM_2, P->parm2 ); - OPW( HREG_PARAM_1, P->parm1 ); - rc = cmd_exe( ifbp, P->cmd, P->parm0 ); - P->hcf_stat = (hcf_16)rc; - P->stat = IPW( HREG_STAT ); - P->resp0 = IPW( HREG_RESP_0 ); - P->resp1 = IPW( HREG_RESP_1 ); - P->resp2 = IPW( HREG_RESP_2 ); - P->ifb_err_cmd = ifbp->IFB_ErrCmd; - P->ifb_err_qualifier = ifbp->IFB_ErrQualifier; -#undef P - break; - case CFG_CMD_HCF: -#define P ((CFG_CMD_HCF_STRCT FAR *)ltvp) - HCFASSERT( P->cmd == CFG_CMD_HCF_REG_ACCESS, P->cmd ); //only Hermes register access supported - if ( P->cmd == CFG_CMD_HCF_REG_ACCESS ) { - HCFASSERT( P->mode < ifbp->IFB_IOBase, P->mode ); //Check Register space - OPW( P->mode, P->add_info); - } -#undef P - break; -#endif // HCF_EXT_NIC_ACCESS - -#if (HCF_ASSERT) & HCF_ASSERT_PRINTF - case CFG_FW_PRINTF_BUFFER_LOCATION: - ifbp->IFB_FwPfBuff = *(CFG_FW_PRINTF_BUFFER_LOCATION_STRCT*)ltvp; - break; -#endif // HCF_ASSERT_PRINTF - - default: //pass everything unknown above the "FID" range to the Hermes or Dongle - rc = put_info( ifbp, ltvp ); - } - //DO NOT !!! HCFASSERT( rc == HCF_SUCCESS, rc ) /* 20 */ - HCFLOGEXIT( HCF_TRACE_PUT_INFO ); - return rc; -} // hcf_put_info - - -/************************************************************************************************************ - * - *.MODULE int hcf_rcv_msg( IFBP ifbp, DESC_STRCT *descp, unsigned int offset ) - *.PURPOSE All: decapsulate a message. - * pre-HermesII.5: verify MIC. - * non-USB, non-DMA mode: Transfer a message from the NIC to the Host and acknowledge reception. - * USB: Transform a message from proprietary USB format to 802.3 format - * - *.ARGUMENTS - * ifbp address of the Interface Block - * descp Pointer to the Descriptor List location. - * offset USB: not used - * non-USB: specifies the beginning of the data to be obtained (0 corresponds with DestAddr field - * of frame). - * - *.RETURNS - * HCF_SUCCESS No WPA error ( or HCF_ERR_MIC already reported by hcf_service_nic) - * HCF_ERR_MIC message contains an erroneous MIC ( HCF_SUCCESS is reported if HCF_ERR_MIC is already - * reported by hcf_service_nic) - * HCF_ERR_NO_NIC NIC removed during data retrieval - * HCF_ERR_DEFUNCT... - * - *.DESCRIPTION - * The Receive Message Function can be executed by the MSF to obtain the Data Info fields of the message that - * is reported to be available by the Service NIC Function. - * - * The Receive Message Function copies the message data available in the Card memory into a buffer structure - * provided by the MSF. - * Only data of the message indicated by the Service NIC Function can be obtained. - * Execution of the Service NIC function may result in the availability of a new message, but it definitely - * makes the message reported by the preceding Service NIC function, unavailable. - * - * in non-USB/non-DMA mode, hcf_rcv_msg starts the copy process at the (non-negative) offset requested by the - * parameter offset, relative to HFS_ADDR_DEST, e.g offset 0 starts copying from the Destination Address, the - * very begin of the 802.3 frame message. Offset must either lay within the part of the 802.3 frame as stored - * by hcf_service_nic in the lookahead buffer or be just behind it, i.e. the first byte not yet read. - * When offset is within lookahead, data is copied from lookahead. - * When offset is beyond lookahead, data is read directly from RxFS in NIC with disregard of the actual value - * of offset - * - *.NOTICE: - * o at entry: look ahead buffer as passed with hcf_service_nic is still accessible and unchanged - * o at exit: Receive Frame in NIC memory is released - * - * Description: - * Starting at the byte indicated by the Offset value, the bytes are copied from the Data Info - * Part of the current Receive Frame Structure to the Host memory data buffer structure - * identified by descp. - * The maximum value for Offset is the number of characters of the 802.3 frame read into the - * look ahead buffer by hcf_service_nic (i.e. the look ahead buffer size minus - * Control and 802.11 fields) - * If Offset is less than the maximum value, copying starts from the look ahead buffer till the - * end of that buffer is reached - * Then (or if the maximum value is specified for Offset), the - * message is directly copied from NIC memory to Host memory. - * If an invalid (i.e. too large) offset is specified, an assert catches but the buffer contents are - * undefined. - * Copying stops if either: - * o the end of the 802.3 frame is reached - * o the Descriptor with a NULL pointer in the next_desc_addr field is reached - * - * When the copying stops, the receiver is ack'ed, thus freeing the NIC memory where the frame is stored - * As a consequence, hcf_rcv_msg can only be called once for any particular Rx frame. - * - * For the time being (PCI Bus mastering not yet supported), only the following fields of each - * of the descriptors in the descriptor list must be set by the MSF: - * o buf_cntl.buf_dim[1] - * o *next_desc_addr - * o *buf_addr - * At return from hcf_rcv_msg, the field buf_cntl.buf_dim[0] of the used Descriptors reflects - * the number of bytes in the buffer corresponding with the Descriptor. - * On the last used Descriptor, buf_cntl.buf_dim[0] is less or equal to buf_cntl.buf_dim[1]. - * On all preceding Descriptors buf_cntl.buf_dim[0] is equal to buf_cntl.buf_dim[1]. - * On all succeeding (unused) Descriptors, buf_cntl.buf_dim[0] is zero. - * Note: this I/F is based on the assumptions how the I/F needed for PCI Bus mastering will - * be, so it may change. - * - * The most likely handling of HCF_ERR_NO_NIC by the MSF is to drop the already copied - * data as elegantly as possible under the constraints and requirements posed by the (N)OS. - * If no received Frame Structure is pending, "Success" rather than "Read error" is returned. - * This error constitutes a logic flaw in the MSF - * The HCF can only catch a minority of this - * type of errors - * Based on consistency ideas, the HCF catches none of these errors. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value - * - there is no unacknowledged Rx-message available - * - offset is out of range (outside look ahead buffer) - * - descp is a NULL pointer - * - any of the descriptors is not double word aligned - * - reentrancy, may be caused by calling hcf_functions without adequate protection - * against NIC interrupts or multi-threading. - * - Interrupts are enabled. - * - *.DIAGRAM - * - *.NOTICE - * - by using unsigned int as type for offset, no need to worry about negative offsets - * - Asserting on being enabled/present is superfluous, since a non-zero IFB_lal implies that hcf_service_nic - * was called and detected a Rx-message. A zero IFB_lal will set the BUF_CNT field of at least the first - * descriptor to zero. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -int -hcf_rcv_msg( IFBP ifbp, DESC_STRCT *descp, unsigned int offset ) -{ - int rc = HCF_SUCCESS; - wci_bufp cp; //char oriented working pointer - hcf_16 i; - int tot_len = ifbp->IFB_RxLen - offset; //total length - wci_bufp lap = ifbp->IFB_lap + offset; //start address in LookAhead Buffer - hcf_16 lal = ifbp->IFB_lal - offset; //available data within LookAhead Buffer - hcf_16 j; - - HCFLOGENTRY( HCF_TRACE_RCV_MSG, offset ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - HCFASSERT( descp, HCF_TRACE_RCV_MSG ); - HCFASSERT( ifbp->IFB_RxLen, HCF_TRACE_RCV_MSG ); - HCFASSERT( ifbp->IFB_RxLen >= offset, MERGE_2( offset, ifbp->IFB_RxLen ) ); - HCFASSERT( ifbp->IFB_lal >= offset, offset ); - HCFASSERT( (ifbp->IFB_CntlOpt & USE_DMA) == 0, 0xDADA ); - - if ( tot_len < 0 ) { - lal = 0; tot_len = 0; //suppress all copying activity in the do--while loop - } - do { //loop over all available fragments - // obnoxious hcf.c(1480) : warning C4769: conversion of near pointer to long integer - HCFASSERT( ((hcf_32)descp & 3 ) == 0, (hcf_32)descp ); - cp = descp->buf_addr; - j = min( (hcf_16)tot_len, descp->BUF_SIZE ); //minimum of "what's` available" and fragment size - descp->BUF_CNT = j; - tot_len -= j; //adjust length still to go - if ( lal ) { //if lookahead Buffer not yet completely copied - i = min( lal, j ); //minimum of "what's available" in LookAhead and fragment size - lal -= i; //adjust length still available in LookAhead - j -= i; //adjust length still available in current fragment - /*;? while loop could be improved by moving words but that is complicated on platforms with - * alignment requirements*/ - while ( i-- ) *cp++ = *lap++; - } - if ( j ) { //if LookAhead Buffer exhausted but still space in fragment, copy directly from NIC RAM - get_frag( ifbp, cp, j BE_PAR(0) ); - CALC_RX_MIC( cp, j ); - } - } while ( ( descp = descp->next_desc_addr ) != NULL ); -#if (HCF_TYPE) & HCF_TYPE_WPA - if ( ifbp->IFB_RxFID ) { - rc = check_mic( ifbp ); //prevents MIC error report if hcf_service_nic already consumed all - } -#endif // HCF_TYPE_WPA - (void)hcf_action( ifbp, HCF_ACT_RX_ACK ); //only 1 shot to get the data, so free the resources in the NIC - HCFASSERT( rc == HCF_SUCCESS, rc ); - HCFLOGEXIT( HCF_TRACE_RCV_MSG ); - return rc; -} // hcf_rcv_msg - - -/************************************************************************************************************ - * - *.MODULE int hcf_send_msg( IFBP ifbp, DESC_STRCT *descp, hcf_16 tx_cntl ) - *.PURPOSE Encapsulate a message and append padding and MIC. - * non-USB: Transfers the resulting message from Host to NIC and initiates transmission. - * USB: Transfer resulting message into a flat buffer. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * descp pointer to the DescriptorList or NULL - * tx_cntl indicates MAC-port and (Hermes) options - * HFS_TX_CNTL_SPECTRALINK - * HFS_TX_CNTL_PRIO - * HFS_TX_CNTL_TX_OK - * HFS_TX_CNTL_TX_EX - * HFS_TX_CNTL_TX_DELAY - * HFS_TX_CNTL_TX_CONT - * HCF_PORT_0 MAC Port 0 (default) - * HCF_PORT_1 (AP only) MAC Port 1 - * HCF_PORT_2 (AP only) MAC Port 2 - * HCF_PORT_3 (AP only) MAC Port 3 - * HCF_PORT_4 (AP only) MAC Port 4 - * HCF_PORT_5 (AP only) MAC Port 5 - * HCF_PORT_6 (AP only) MAC Port 6 - * - *.RETURNS - * HCF_SUCCESS - * HCF_ERR_DEFUNCT_.. - * HCF_ERR_TIME_OUT - * - *.DESCRIPTION: - * The Send Message Function embodies 2 functions: - * o transfers a message (including MAC header) from the provided buffer structure in Host memory to the Transmit - * Frame Structure (TxFS) in NIC memory. - * o Issue a send command to the F/W to actually transmit the contents of the TxFS. - * - * Control is based on the Resource Indicator IFB_RscInd. - * The Resource Indicator is maintained by the HCF and should only be interpreted but not changed by the MSF. - * The MSF must check IFB_RscInd to be non-zero before executing the call to the Send Message Function. - * When no resources are available, the MSF must handle the queuing of the Transmit frame and check the - * Resource Indicator periodically after calling hcf_service_nic. - * - * The Send Message Functions transfers a message to NIC memory when it is called with a non-NULL descp. - * Before the Send Message Function is invoked this way, the Resource Indicator (IFB_RscInd) must be checked. - * If the Resource is not available, Send Message Function execution must be postponed until after processing of - * a next hcf_service_nic it appears that the Resource has become available. - * The message is copied from the buffer structure identified by descp to the NIC. - * Copying stops if a NULL pointer in the next_desc_addr field is reached. - * Hcf_send_msg does not check for transmit buffer overflow, because the F/W does this protection. - * In case of a transmit buffer overflow, the surplus which does not fit in the buffer is simply dropped. - * - * The Send Message Function activates the F/W to actually send the message to the medium when the - * HFS_TX_CNTL_TX_DELAY bit of the tx_cntl parameter is not set. - * If the descp parameter of the current call is non-NULL, the message as represented by descp is send. - * If the descp parameter of the current call is NULL, and if the preceding call of the Send Message Function had - * a non-NULL descp and the preceding call had the HFS_TX_CNTL_TX_DELAY bit of tx_cntl set, then the message as - * represented by the descp of the preceding call is send. - * - * Hcf_send_msg supports encapsulation (see HCF_ENCAP) of Ethernet-II frames. - * An Ethernet-II frame is transferred to the Transmit Frame structure as an 802.3 frame. - * Hcf_send_msg distinguishes between an 802.3 and an Ethernet-II frame by looking at the data length/type field - * of the frame. If this field contains a value larger than 1514, the frame is considered to be an Ethernet-II - * frame, otherwise it is treated as an 802.3 frame. - * To ease implementation of the HCF, this type/type field must be located in the first descriptor structure, - * i.e. the 1st fragment must have a size of at least 14 (to contain DestAddr, SrcAddr and Len/Type field). - * An Ethernet-II frame is encapsulated by inserting a SNAP header between the addressing information and the - * type field. This insertion is transparent for the MSF. - * The HCF contains a fixed table that stores a number of types. If the value specified by the type/type field - * occurs in this table, Bridge Tunnel Encapsulation is used, otherwise RFC1042 encapsulation is used. - * Bridge Tunnel uses AA AA 03 00 00 F8 as SNAP header, - * RFC1042 uses AA AA 03 00 00 00 as SNAP header. - * The table currently contains: - * 0 0x80F3 AppleTalk Address Resolution Protocol (AARP) - * 0 0x8137 IPX - * - * The algorithm to distinguish between 802.3 and Ethernet-II frames limits the maximum length for frames of - * 802.3 frames to 1514 bytes. - * Encapsulation can be suppressed by means of the system constant HCF_ENCAP, e.g. to support proprietary - * protocols with 802.3 like frames with a size larger than 1514 bytes. - * - * In case the HCF encapsulates the frame, the number of bytes that is actually transmitted is determined by the - * cumulative value of the buf_cntl.buf_dim[0] fields. - * In case the HCF does not encapsulate the frame, the number of bytes that is actually transmitted is not - * determined by the cumulative value of the buf_cntl.buf_dim[DESC_CNTL_CNT] fields of the desc_strct's but by - * the Length field of the 802.3 frame. - * If there is a conflict between the cumulative value of the buf_cntl.buf_dim[0] fields and the - * 802.3 Length field the 802.3 Length field determines the number of bytes actually transmitted by the NIC while - * the cumulative value of the buf_cntl.buf_dim[0] fields determines the position of the MIC, hence a mismatch - * will result in MIC errors on the Receiving side. - * Currently this problem is flagged on the Transmit side by an Assert. - * The following fields of each of the descriptors in the descriptor list must be set by the MSF: - * o buf_cntl.buf_dim[0] - * o *next_desc_addr - * o *buf_addr - * - * All bits of the tx_cntl parameter except HFS_TX_CNTL_TX_DELAY and the HCF_PORT# bits are passed to the F/W via - * the HFS_TX_CNTL field of the TxFS. - * - * Note that hcf_send_msg does not detect NIC absence. The MSF is supposed to have its own -platform dependent- - * way to recognize card removal/insertion. - * The total system must be robust against card removal and there is no principal difference between card removal - * just after hcf_send_msg returns but before the actual transmission took place or sometime earlier. - * - * Assert fails if - * - ifbp has a recognizable out-of-range value - * - descp is a NULL pointer - * - no resources for PIF available. - * - Interrupts are enabled. - * - reentrancy, may be caused by calling hcf_functions without adequate protection - * against NIC interrupts or multi-threading. - * - *.DIAGRAM - *4: for the normal case (i.e. no HFS_TX_CNTL_TX_DELAY option active), a fid is acquired via the - * routine get_fid. If no FID is acquired, the remainder is skipped without an error notification. After - * all, the MSF is not supposed to call hcf_send_msg when no Resource is available. - *7: The ControlField of the TxFS is written. Since put_frag can only return the fatal Defunct or "No NIC", the - * return status can be ignored because when it fails, cmd_wait will fail as well. (see also the note on the - * need for a return code below). - * Note that HFS_TX_CNTL has different values for H-I, H-I/WPA and H-II and HFS_ADDR_DEST has different - * values for H-I (regardless of WPA) and H-II. - * By writing 17, 1 or 2 ( implying 16, 0 or 1 garbage word after HFS_TX_CNTL) the BAP just gets to - * HFS_ADDR_DEST for H-I, H-I/WPA and H-II respectively. - *10: if neither encapsulation nor MIC calculation is needed, splitting the first fragment in two does not - * really help but it makes the flow easier to follow to do not optimize on this difference - * - * hcf_send_msg checks whether the frame is an Ethernet-II rather than an "official" 802.3 frame. - * The E-II check is based on the length/type field in the MAC header. If this field has a value larger than - * 1500, E-II is assumed. The implementation of this test fails if the length/type field is not in the first - * descriptor. If E-II is recognized, a SNAP header is inserted. This SNAP header represents either RFC1042 - * or Bridge-Tunnel encapsulation, depending on the return status of the support routine hcf_encap. - * - *.NOTICE - * hcf_send_msg leaves the responsibility to only send messages on enabled ports at the MSF level. - * This is considered the strategy which is sufficiently adequate for all "robust" MSFs, have the least - * processor utilization and being still acceptable robust at the WCI !!!!! - * - * hcf_send_msg does not NEED a return value to report NIC absence or removal during the execution of - * hcf_send_msg(), because the MSF and higher layers must be able to cope anyway with the NIC being removed - * after a successful completion of hcf_send_msg() but before the actual transmission took place. - * To accommodate user expectations the current implementation does report NIC absence. - * Defunct blocks all NIC access and will (also) be reported on a number of other calls. - * - * hcf_send_msg does not check for transmit buffer overflow because the Hermes does this protection. - * In case of a transmit buffer overflow, the surplus which does not fit in the buffer is simply dropped. - * Note that this possibly results in the transmission of incomplete frames. - * - * After some deliberation with F/W team, it is decided that - being in the twilight zone of not knowing - * whether the problem at hand is an MSF bug, HCF buf, F/W bug, H/W malfunction or even something else - there - * is no "best thing to do" in case of a failing send, hence the HCF considers the TxFID ownership to be taken - * over by the F/W and hopes for an Allocate event in due time - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -int -hcf_send_msg( IFBP ifbp, DESC_STRCT *descp, hcf_16 tx_cntl ) -{ - int rc = HCF_SUCCESS; - DESC_STRCT *p /* = descp*/; //working pointer - hcf_16 len; // total byte count - hcf_16 i; - - hcf_16 fid = 0; - - HCFASSERT( ifbp->IFB_RscInd || descp == NULL, ifbp->IFB_RscInd ); - HCFASSERT( (ifbp->IFB_CntlOpt & USE_DMA) == 0, 0xDADB ); - - HCFLOGENTRY( HCF_TRACE_SEND_MSG, tx_cntl ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - /* obnoxious c:/hcf/hcf.c(1480) : warning C4769: conversion of near pointer to long integer, - * so skip */ - HCFASSERT( ((hcf_32)descp & 3 ) == 0, (hcf_32)descp ); -#if HCF_ASSERT - { int x = ifbp->IFB_FWIdentity.comp_id == COMP_ID_FW_AP ? tx_cntl & ~HFS_TX_CNTL_PORT : tx_cntl; - HCFASSERT( (x & ~HCF_TX_CNTL_MASK ) == 0, tx_cntl ); - } -#endif // HCF_ASSERT - - if ( descp ) ifbp->IFB_TxFID = 0; //cancel a pre-put message - - /* the following initialization code is redundant for a pre-put message - * but moving it inside the "if fid" logic makes the merging with the - * USB flow awkward - */ -#if (HCF_TYPE) & HCF_TYPE_WPA - tx_cntl |= ifbp->IFB_MICTxCntl; -#endif // HCF_TYPE_WPA - 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) - */ - { // to match the closing curly bracket of above "if" in case of HCF_TYPE_USB - //calculate total length ;? superfluous unless CCX or Encapsulation - len = 0; - p = descp; - do len += p->BUF_CNT; while ( ( p = p->next_desc_addr ) != NULL ); - p = descp; -//;? HCFASSERT( len <= HCF_MAX_MSG, len ); - /*7*/ (void)setup_bap( ifbp, fid, HFS_TX_CNTL, IO_OUT ); -#if (HCF_TYPE) & HCF_TYPE_TX_DELAY - HCFASSERT( ( descp != NULL ) ^ ( tx_cntl & HFS_TX_CNTL_TX_DELAY ), tx_cntl ); - if ( tx_cntl & HFS_TX_CNTL_TX_DELAY ) { - tx_cntl &= ~HFS_TX_CNTL_TX_DELAY; //!!HFS_TX_CNTL_TX_DELAY no longer available - ifbp->IFB_TxFID = fid; - fid = 0; //!!fid no longer available, be careful when modifying code - } -#endif // HCF_TYPE_TX_DELAY - OPW( HREG_DATA_1, tx_cntl ) ; - OPW( HREG_DATA_1, 0 ); - - HCFASSERT( p->BUF_CNT >= 14, p->BUF_CNT ); - /* assume DestAddr/SrcAddr/Len/Type ALWAYS contained in 1st fragment - * otherwise life gets too cumbersome for MIC and Encapsulation !!!!!!!! - if ( p->BUF_CNT >= 14 ) { alternatively: add a safety escape !!!!!!!!!!!! } */ - - CALC_TX_MIC( NULL, -1 ); //initialize MIC - /*10*/ put_frag( ifbp, p->buf_addr, HCF_DASA_SIZE BE_PAR(0) ); //write DA, SA with MIC calculation - CALC_TX_MIC( p->buf_addr, HCF_DASA_SIZE ); //MIC over DA, SA - CALC_TX_MIC( null_addr, 4 ); //MIC over (virtual) priority field - - //if encapsulation needed -#if (HCF_ENCAP) == HCF_ENC - //write length (with SNAP-header,Type, without //DA,SA,Length ) no MIC calc. - if ( ( snap_header[sizeof(snap_header)-1] = hcf_encap( &p->buf_addr[HCF_DASA_SIZE] ) ) != ENC_NONE ) { - OPW( HREG_DATA_1, CNV_END_SHORT( len + (sizeof(snap_header) + 2) - ( 2*6 + 2 ) ) ); - //write splice with MIC calculation - put_frag( ifbp, snap_header, sizeof(snap_header) BE_PAR(0) ); - CALC_TX_MIC( snap_header, sizeof(snap_header) ); //MIC over 6 byte SNAP - i = HCF_DASA_SIZE; - } else -#endif // HCF_ENC - { - OPW( HREG_DATA_1, *(wci_recordp)&p->buf_addr[HCF_DASA_SIZE] ); - i = 14; - } - //complete 1st fragment starting with Type with MIC calculation - put_frag( ifbp, &p->buf_addr[i], p->BUF_CNT - i BE_PAR(0) ); - CALC_TX_MIC( &p->buf_addr[i], p->BUF_CNT - i ); - - //do the remaining fragments with MIC calculation - while ( ( p = p->next_desc_addr ) != NULL ) { - /* obnoxious c:/hcf/hcf.c(1480) : warning C4769: conversion of near pointer to long integer, - * so skip */ - HCFASSERT( ((hcf_32)p & 3 ) == 0, (hcf_32)p ); - put_frag( ifbp, p->buf_addr, p->BUF_CNT BE_PAR(0) ); - CALC_TX_MIC( p->buf_addr, p->BUF_CNT ); - } - //pad message, finalize MIC calculation and write MIC to NIC - put_frag_finalize( ifbp ); - } - if ( fid ) { - /*16*/ rc = cmd_exe( ifbp, HCMD_BUSY | HCMD_TX | HCMD_RECL, fid ); - ifbp->IFB_TxFID = 0; - /* probably this (i.e. no RscInd AND "HREG_EV_ALLOC") at this point in time occurs so infrequent, - * that it might just as well be acceptable to skip this - * "optimization" code and handle that additional interrupt once in a while - */ -// 180 degree error in logic ;? #if ALLOC_15 - /*20*/ if ( ifbp->IFB_RscInd == 0 ) { - ifbp->IFB_RscInd = get_fid( ifbp ); - } -// #endif // ALLOC_15 - } -// HCFASSERT( level::ifbp->IFB_RscInd, ifbp->IFB_RscInd ); - HCFLOGEXIT( HCF_TRACE_SEND_MSG ); - return rc; -} // hcf_send_msg - - -/************************************************************************************************************ - * - *.MODULE int hcf_service_nic( IFBP ifbp, wci_bufp bufp, unsigned int len ) - *.PURPOSE Services (most) NIC events. - * Provides received message - * Provides status information. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * In non-DMA mode: - * bufp address of char buffer, sufficiently large to hold the first part of the RxFS up through HFS_TYPE - * len length in bytes of buffer specified by bufp - * value between HFS_TYPE + 2 and HFS_ADDR_DEST + HCF_MAX_MSG - * - *.RETURNS - * HCF_SUCCESS - * HCF_ERR_MIC message contains an erroneous MIC (only if frame fits completely in bufp) - * - *.DESCRIPTION - * - * MSF-accessible fields of Result Block - * - IFB_RxLen 0 or Frame size. - * - IFB_MBInfoLen 0 or the L-field of the oldest MBIB. - * - IFB_RscInd - * - IFB_HCF_Tallies updated if a corresponding event occurred. - * - IFB_NIC_Tallies updated if a Tally Info frame received from the NIC. - * - IFB_DmaPackets - * - IFB_TxFsStat - * - IFB_TxFsSwSup - * - IFB_LinkStat reflects new link status or 0x0000 if no change relative to previous hcf_service_nic call. -or -* - IFB_LinkStat link status, 0x8000 reflects change relative to previous hcf_service_nic call. -* -* When IFB_MBInfoLen is non-zero, at least one MBIB is available. -* -* IFB_RxLen reflects the number of received bytes in 802.3 view (Including DestAddr, SrcAddr and Length, -* excluding MIC-padding, MIC and sum check) of active Rx Frame Structure. If no Rx Data s available, IFB_RxLen -* equals 0x0000. -* Repeated execution causes the Service NIC Function to provide information about subsequently received -* messages, irrespective whether a hcf_rcv_msg or hcf_action(HCF_ACT_RX) is performed in between. -* -* When IFB_RxLen is non-zero, a Received Frame Structure is available to be routed to the protocol stack. -* When Monitor Mode is not active, this is guaranteed to be an error-free non-WMP frame. -* In case of Monitor Mode, it may also be a frame with an error or a WMP frame. -* Erroneous frames have a non-zero error-sub field in the HFS_STAT field in the look ahead buffer. -* -* If a Receive message is available in NIC RAM, the Receive Frame Structure is (partly) copied from the NIC to -* the buffer identified by bufp. -* Copying stops either after len bytes or when the complete 802.3 frame is copied. -* During the copying the message is decapsulated (if appropriate). -* If the frame is read completely by hcf_service_nic (i.e. the frame fits completely in the lookahead buffer), -* the frame is automatically ACK'ed to the F/W and still available via the look ahead buffer and hcf_rcv_msg. -* Only if the frame is read completely by hcf_service_nic, hcf_service_nic checks the MIC and sets the return -* status accordingly. In this case, hcf_rcv_msg does not check the MIC. -* -* The MIC calculation algorithm works more efficient if the length of the look ahead buffer is -* such that it fits exactly 4 n bytes of the 802.3 frame, i.e. len == HFS_ADDR_DEST + 4*n. -* -* The Service NIC Function supports the NIC event service handling process. -* It performs the appropriate actions to service the NIC, such that the event cause is eliminated and related -* information is saved. -* The Service NIC Function is executed by the MSF ISR or polling routine as first step to determine the event -* cause(s). It is the responsibility of the MSF to perform all not directly NIC related interrupt service -* actions, e.g. in a PC environment this includes servicing the PIC, and managing the Processor Interrupt -* Enabling/Disabling. -* In case of a polled based system, the Service NIC Function must be executed "frequently". -* The Service NIC Function may have side effects related to the Mailbox and Resource Indicator (IFB_RscInd). -* -* hcf_service_nic returns: -* - The length of the data in the available MBIB (IFB_MBInfoLen) -* - Changes in the link status (IFB_LinkStat) -* - The length of the data in the available Receive Frame Structure (IFB_RxLen) -* - updated IFB_RscInd -* - Updated Tallies -* -* hcf_service_nic is presumed to neither interrupt other HCF-tasks nor to be interrupted by other HCF-tasks. -* A way to achieve this is to precede hcf_service_nic as well as all other HCF-tasks with a call to -* hcf_action to disable the card interrupts and, after all work is completed, with a call to hcf_action to -* restore (which is not necessarily the same as enabling) the card interrupts. -* In case of a polled environment, it is assumed that the MSF programmer is sufficiently familiar with the -* specific requirements of that environment to translate the interrupt strategy to a polled strategy. -* -* hcf_service_nic services the following Hermes events: -* - HREG_EV_INFO Asynchronous Information Frame -* - HREG_EV_INFO_DROP WMAC did not have sufficient RAM to build Unsolicited Information Frame -* - HREG_EV_TX_EXC (if applicable, i.e. selected via HCF_EXT_INT_TX_EX bit of HCF_EXT) -* - HREG_EV_SLEEP_REQ (if applicable, i.e. selected via HCF_DDS/HCF_CDS bit of HCF_SLEEP) -* ** in non_DMA mode -* - HREG_EV_ALLOC Asynchronous part of Allocation/Reclaim completed while out of resources at -* completion of hcf_send_msg/notify -* - HREG_EV_RX the detection of the availability of received messages -* including WaveLAN Management Protocol (WMP) message processing -* ** in DMA mode -* - HREG_EV_RDMAD -* - HREG_EV_TDMAD -*!! hcf_service_nic does not service the following Hermes events: -*!! HREG_EV_TX (the "OK" Tx Event) is no longer supported by the WCI, if it occurs it is unclear -*!! what the cause is, so no meaningful strategy is available. Not acking the bit is -*!! probably the best help that can be given to the debugger. -*!! HREG_EV_CMD handled in cmd_wait. -*!! HREG_EV_FW_DMA (i.e. HREG_EV_RXDMA, HREG_EV_TXDMA and_EV_LPESC) are either not used or used -*!! between the F/W and the DMA engine. -*!! HREG_EV_ACK_REG_READY is only applicable for H-II (i.e. not HII.5 and up, see DAWA) -* -* If, in non-DMA mode, a Rx message is available, its length is reflected by the IFB_RxLen field of the IFB. -* This length reflects the data itself and the Destination Address, Source Address and DataLength/Type field -* but not the SNAP-header in case of decapsulation by the HCF. If no message is available, IFB_RxLen is -* zero. Former versions of the HCF handled WMP messages and supported a "monitor" mode in hcf_service_nic, -* which deposited certain or all Rx messages in the MailBox. The responsibility to handle these frames is -* moved to the MSF. The HCF offers as supports hcf_put_info with CFG_MB_INFO as parameter to emulate the old -* implementation under control of the MSF. -* -* **Rx Buffer free strategy -* When hcf_service_nic reports the availability of a non-DMA message, the MSF can access that message by -* means of hcf_rcv_msg. It must be prevented that the LAN Controller writes new data in the NIC buffer -* before the MSF is finished with the current message. The NIC buffer is returned to the LAN Controller -* when: -* - the complete frame fits in the lookahead buffer or -* - hcf_rcv_msg is called or -* - hcf_action with HCF_ACT_RX is called or -* - hcf_service_nic is called again -* It can be reasoned that hcf_action( INT_ON ) should not be given before the MSF has completely processed -* a reported Rx-frame. The reason is that the INT_ON action is guaranteed to cause a (Rx-)interrupt (the -* MSF is processing a Rx-frame, hence the Rx-event bit in the Hermes register must be active). This -* interrupt will cause hcf_service_nic to be called, which will cause the ack-ing of the "last" Rx-event -* to the Hermes, causing the Hermes to discard the associated NIC RAM buffer. -* Assert fails if -* - ifbp is zero or other recognizable out-of-range value. -* - hcf_service_nic is called without a prior call to hcf_connect. -* - interrupts are enabled. -* - reentrancy, may be caused by calling hcf_functions without adequate protection -* against NIC interrupts or multi-threading. -* -* -*.DIAGRAM -*1: IFB_LinkStat is cleared, if a LinkStatus frame is received, IFB_LinkStat will be updated accordingly -* by isr_info. -or -*1: IFB_LinkStat change indication is cleared. If a LinkStatus frame is received, IFB_LinkStat will be updated -* accordingly by isr_info. -*2: IFB_RxLen must be cleared before the NIC presence check otherwise: -* - this value may stay non-zero if the NIC is pulled out at an inconvenient moment. -* - the RxAck on a zero-FID needs a zero-value for IFB_RxLen to work -* Note that as side-effect of the hcf_action call, the remainder of Rx related info is re-initialized as -* well. -*4: In case of Defunct mode, the information supplied by Hermes is unreliable, so the body of -* hcf_service_nic is skipped. Since hcf_cntl turns into a NOP if Primary or Station F/W is incompatible, -* hcf_service_nic is also skipped in those cases. -* To prevent that hcf_service_nic reports bogus information to the MSF with all - possibly difficult to -* debug - undesirable side effects, it is paramount to check the NIC presence. In former days the presence -* test was based on the Hermes register HREG_SW_0. Since in HCF_ACT_INT_OFF is chosen for strategy based on -* HREG_EV_STAT, this is now also used in hcf_service_nic. The motivation to change strategy is partly -* due to inconsistent F/W implementations with respect to HREG_SW_0 manipulation around reset and download. -* Note that in polled environments Card Removal is not detected by INT_OFF which makes the check in -* hcf_service_nic even more important. -*8: The event status register of the Hermes is sampled -* The assert checks for unexpected events ;?????????????????????????????????????. -* - HREG_EV_INFO_DROP is explicitly excluded from the acceptable HREG_EV_STAT bits because it indicates -* a too heavily loaded system. -* - HREG_EV_ACK_REG_READY is 0x0000 for H-I (and hopefully H-II.5) -* -* -* HREG_EV_TX_EXC is accepted (via HREG_EV_TX_EXT) if and only if HCF_EXT_INT_TX_EX set in the HCF_EXT -* definition at compile time. -* The following activities are handled: -* - Alloc events are handled by hcf_send_msg (and notify). Only if there is no "spare" resource, the -* alloc event is superficially serviced by hcf_service_nic to create a pseudo-resource with value -* 0x001. This value is recognized by get_fid (called by hcf_send_msg and notify) where the real -* TxFid is retrieved and the Hermes is acked and - hopefully - the "normal" case with a spare TxFid -* in IFB_RscInd is restored. -* - Info drop events are handled by incrementing a tally -* - LinkEvent (including solicited and unsolicited tallies) are handled by procedure isr_info. -* - TxEx (if selected at compile time) is handled by copying the significant part of the TxFS -* into the IFB for further processing by the MSF. -* Note the complication of the zero-FID protection sub-scheme in DAWA. -* Note, the Ack of all of above events is handled at the end of hcf_service_nic -*16: In case of non-DMA ( either not compiled in or due to a run-time choice): -* If an Rx-frame is available, first the FID of that frame is read, including the complication of the -* zero-FID protection sub-scheme in DAWA. Note that such a zero-FID is acknowledged at the end of -* hcf_service_nic and that this depends on the IFB_RxLen initialization in the begin of hcf_service_nic. -* The Assert validates the HCF assumption about Hermes implementation upon which the range of -* Pseudo-RIDs is based. -* Then the control fields up to the start of the 802.3 frame are read from the NIC into the lookahead buffer. -* The status field is converted to native Endianness. -* The length is, after implicit Endianness conversion if needed, and adjustment for the 14 bytes of the -* 802.3 MAC header, stored in IFB_RxLen. -* In MAC Monitor mode, 802.11 control frames with a TOTAL length of 14 are received, so without this -* length adjustment, IFB_RxLen could not be used to distinguish these frames from "no frame". -* No MIC calculation processes are associated with the reading of these Control fields. -*26: This length test feels like superfluous robustness against malformed frames, but it turned out to be -* needed in the real (hostile) world. -* The decapsulation check needs sufficient data to represent DA, SA, L, SNAP and Type which amounts to -* 22 bytes. In MAC Monitor mode, 802.11 control frames with a smaller length are received. To prevent -* that the implementation goes haywire, a check on the length is needed. -* The actual decapsulation takes place on the fly in the copying process by overwriting the SNAP header. -* Note that in case of decapsulation the SNAP header is not passed to the MSF, hence IFB_RxLen must be -* compensated for the SNAP header length. -* The 22 bytes needed for decapsulation are (more than) sufficient for the exceptional handling of the -* MIC algorithm of the L-field (replacing the 2 byte L-field with 4 0x00 bytes). -*30: The 12 in the no-WPA branch corresponds with the get_frag, the 2 with the IPW of the WPA branch -*32: If Hermes reported MIC-presence, than the MIC engine is initialized with the non-dummy MIC calculation -* routine address and appropriate key. -*34: The 8 bytes after the DA, SA, L are read and it is checked whether decapsulation is needed i.e.: -* - the Hermes reported Tunnel encapsulation or -* - the Hermes reported 1042 Encapsulation and hcf_encap reports that the HCF would not have used -* 1042 as the encapsulation mechanism -* Note that the first field of the RxFS in bufp has Native Endianness due to the conversion done by the -* BE_PAR in get_frag. -*36: The Type field is the only word kept (after moving) of the just read 8 bytes, it is moved to the -* L-field. The original L-field and 6 byte SNAP header are discarded, so IFB_RxLen and buf_addr must -* be adjusted by 8. -*40: Determine how much of the frame (starting with DA) fits in the Lookahead buffer, then read the not-yet -* read data into the lookahead buffer. -* If the lookahead buffer contains the complete message, check the MIC. The majority considered this -* I/F more appropriate then have the MSF call hcf_get_data only to check the MIC. -*44: Since the complete message is copied from NIC RAM to PC RAM, the Rx can be acknowledged to the Hermes -* to optimize the flow ( a better chance to get new Rx data in the next pass through hcf_service_nic ). -* This acknowledgement can not be done via hcf_action( HCF_ACT_RX_ACK ) because this also clears -* IFB_RxLEN thus corrupting the I/F to the MSF. -*;?: In case of DMA (compiled in and activated): - - -*54: Limiting the number of places where the F/W is acked (e.g. the merging of the Rx-ACK with the other -* ACKs), is supposed to diminish the potential of race conditions in the F/W. -* Note 1: The CMD event is acknowledged in cmd_cmpl -* Note 2: HREG_EV_ACK_REG_READY is 0x0000 for H-I (and hopefully H-II.5) -* Note 3: The ALLOC event is acknowledged in get_fid (except for the initialization flow) -* -*.NOTICE -* The Non-DMA HREG_EV_RX is handled different compared with the other F/W events. -* The HREG_EV_RX event is acknowledged by the first hcf_service_nic call after the -* hcf_service_nic call that reported the occurrence of this event. -* This acknowledgment -* makes the next Receive Frame Structure (if any) available. -* An updated IFB_RxLen -* field reflects this availability. -* -*.NOTICE -* The minimum size for Len must supply space for: -* - an F/W dependent number of bytes of Control Info field including the 802.11 Header field -* - Destination Address -* - Source Address -* - Length field -* - [ SNAP Header] -* - [ Ethernet-II Type] -* This results in 68 for Hermes-I and 80 for Hermes-II -* This way the minimum amount of information is available needed by the HCF to determine whether the frame -* must be decapsulated. -*.ENDDOC END DOCUMENTATION -* -************************************************************************************************************/ -int -hcf_service_nic( IFBP ifbp, wci_bufp bufp, unsigned int len ) -{ - - int rc = HCF_SUCCESS; - hcf_16 stat; - wci_bufp buf_addr; - hcf_16 i; - - HCFLOGENTRY( HCF_TRACE_SERVICE_NIC, ifbp->IFB_IntOffCnt ); - HCFASSERT( ifbp->IFB_Magic == HCF_MAGIC, ifbp->IFB_Magic ); - HCFASSERT_INT; - - ifbp->IFB_LinkStat = 0; // ;? to be obsoleted ASAP /* 1*/ - ifbp->IFB_DSLinkStat &= ~CFG_LINK_STAT_CHANGE; /* 1*/ - (void)hcf_action( ifbp, HCF_ACT_RX_ACK ); /* 2*/ - if ( ifbp->IFB_CardStat == 0 && ( stat = IPW( HREG_EV_STAT ) ) != 0xFFFF ) { /* 4*/ -/* IF_NOT_DMA( HCFASSERT( !( stat & ~HREG_EV_BASIC_MASK, stat ) ) - * IF_NOT_USE_DMA( HCFASSERT( !( stat & ~HREG_EV_BASIC_MASK, stat ) ) - * IF_USE_DMA( HCFASSERT( !( stat & ~( HREG_EV_BASIC_MASK ^ ( HREG_EV_...DMA.... ), stat ) ) - */ - /* 8*/ - if ( ifbp->IFB_RscInd == 0 && stat & HREG_EV_ALLOC ) { //Note: IFB_RscInd is ALWAYS 1 for DMA - ifbp->IFB_RscInd = 1; - } - IF_TALLY( if ( stat & HREG_EV_INFO_DROP ) { ifbp->IFB_HCF_Tallies.NoBufInfo++; } ); -#if (HCF_EXT) & HCF_EXT_INT_TICK - if ( stat & HREG_EV_TICK ) { - ifbp->IFB_TickCnt++; - } -#if 0 // (HCF_SLEEP) & HCF_DDS - if ( ifbp->IFB_TickCnt == 3 && ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_CONNECTED ) == 0 ) { - CFG_DDS_TICK_TIME_STRCT ltv; - // 2 second period (with 1 tick uncertanty) in not-connected mode -->go into DS_OOR - hcf_action( ifbp, HCF_ACT_SLEEP ); - ifbp->IFB_DSLinkStat |= CFG_LINK_STAT_DS_OOR; //set OutOfRange - ltv.len = 2; - ltv.typ = CFG_DDS_TICK_TIME; - ltv.tick_time = ( ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_TIMER ) + 0x10 ) *64; //78 is more right - hcf_put_info( ifbp, (LTVP)<v ); - printk(KERN_NOTICE "Preparing for sleep, link_status: %04X, timer : %d\n", - ifbp->IFB_DSLinkStat, ltv.tick_time );//;?remove me 1 day - ifbp->IFB_TickCnt++; //;?just to make sure we do not keep on printing above message - if ( ltv.tick_time < 300 * 125 ) ifbp->IFB_DSLinkStat += 0x0010; - - } -#endif // HCF_DDS -#endif // HCF_EXT_INT_TICK - if ( stat & HREG_EV_INFO ) { - isr_info( ifbp ); - } -#if (HCF_EXT) & HCF_EXT_INT_TX_EX - if ( stat & HREG_EV_TX_EXT && ( i = IPW( HREG_TX_COMPL_FID ) ) != 0 /*DAWA*/ ) { - DAWA_ZERO_FID( HREG_TX_COMPL_FID ); - (void)setup_bap( ifbp, i, 0, IO_IN ); - get_frag( ifbp, &ifbp->IFB_TxFsStat, HFS_SWSUP BE_PAR(1) ); - } -#endif // HCF_EXT_INT_TX_EX -//!rlav DMA engine will handle the rx event, not the driver -#if HCF_DMA - if ( !( ifbp->IFB_CntlOpt & USE_DMA ) ) //!! be aware of the logical indentations -#endif // HCF_DMA - /*16*/ if ( stat & HREG_EV_RX && ( ifbp->IFB_RxFID = IPW( HREG_RX_FID ) ) != 0 ) { //if 0 then DAWA_ACK - HCFASSERT( bufp, len ); - HCFASSERT( len >= HFS_DAT + 2, len ); - DAWA_ZERO_FID( HREG_RX_FID ); - HCFASSERT( ifbp->IFB_RxFID < CFG_PROD_DATA, ifbp->IFB_RxFID); - (void)setup_bap( ifbp, ifbp->IFB_RxFID, 0, IO_IN ); - get_frag( ifbp, bufp, HFS_ADDR_DEST BE_PAR(1) ); - ifbp->IFB_lap = buf_addr = bufp + HFS_ADDR_DEST; - ifbp->IFB_RxLen = (hcf_16)(bufp[HFS_DAT_LEN] + (bufp[HFS_DAT_LEN+1]<<8) + 2*6 + 2); - /*26*/ if ( ifbp->IFB_RxLen >= 22 ) { // convenient for MIC calculation (5 DWs + 1 "skipped" W) - //. get DA,SA,Len/Type and (SNAP,Type or 8 data bytes) - /*30*/ get_frag( ifbp, buf_addr, 22 BE_PAR(0) ); - /*32*/ CALC_RX_MIC( bufp, -1 ); //. initialize MIC - CALC_RX_MIC( buf_addr, HCF_DASA_SIZE ); //. MIC over DA, SA - CALC_RX_MIC( null_addr, 4 ); //. MIC over (virtual) priority field - CALC_RX_MIC( buf_addr+14, 8 ); //. skip Len, MIC over SNAP,Type or 8 data bytes) - buf_addr += 22; -#if (HCF_ENCAP) == HCF_ENC - HCFASSERT( len >= HFS_DAT + 2 + sizeof(snap_header), len ); - /*34*/ i = *(wci_recordp)&bufp[HFS_STAT] & ( HFS_STAT_MSG_TYPE | HFS_STAT_ERR ); - if ( i == HFS_STAT_TUNNEL || - ( i == HFS_STAT_1042 && hcf_encap( (wci_bufp)&bufp[HFS_TYPE] ) != ENC_TUNNEL ) ) { - //. copy E-II Type to 802.3 LEN field - /*36*/ bufp[HFS_LEN ] = bufp[HFS_TYPE ]; - bufp[HFS_LEN+1] = bufp[HFS_TYPE+1]; - //. discard Snap by overwriting with data - ifbp->IFB_RxLen -= (HFS_TYPE - HFS_LEN); - buf_addr -= ( HFS_TYPE - HFS_LEN ); // this happens to bring us at a DW boundary of 36 - } -#endif // HCF_ENC - } - /*40*/ ifbp->IFB_lal = min( (hcf_16)(len - HFS_ADDR_DEST), ifbp->IFB_RxLen ); - i = ifbp->IFB_lal - ( buf_addr - ( bufp + HFS_ADDR_DEST ) ); - get_frag( ifbp, buf_addr, i BE_PAR(0) ); - CALC_RX_MIC( buf_addr, i ); -#if (HCF_TYPE) & HCF_TYPE_WPA - if ( ifbp->IFB_lal == ifbp->IFB_RxLen ) { - rc = check_mic( ifbp ); - } -#endif // HCF_TYPE_WPA - /*44*/ if ( len - HFS_ADDR_DEST >= ifbp->IFB_RxLen ) { - ifbp->IFB_RxFID = 0; - } else { /* IFB_RxFID is cleared, so you do not get another Rx_Ack at next entry of hcf_service_nic */ - stat &= (hcf_16)~HREG_EV_RX; //don't ack Rx if processing not yet completed - } - } - // in case of DMA: signal availability of rx and/or tx packets to MSF - IF_USE_DMA( ifbp->IFB_DmaPackets |= stat & ( HREG_EV_RDMAD | HREG_EV_TDMAD ) ); - // rlav : pending HREG_EV_RDMAD or HREG_EV_TDMAD events get acknowledged here. - /*54*/ stat &= (hcf_16)~( HREG_EV_SLEEP_REQ | HREG_EV_CMD | HREG_EV_ACK_REG_READY | HREG_EV_ALLOC | HREG_EV_FW_DMA ); -//a positive mask would be easier to understand /*54*/ stat &= (hcf_16)~( HREG_EV_SLEEP_REQ | HREG_EV_CMD | HREG_EV_ACK_REG_READY | HREG_EV_ALLOC | HREG_EV_FW_DMA ); - IF_USE_DMA( stat &= (hcf_16)~HREG_EV_RX ); - if ( stat ) { - DAWA_ACK( stat ); /*DAWA*/ - } - } - HCFLOGEXIT( HCF_TRACE_SERVICE_NIC ); - return rc; -} // hcf_service_nic - - -/************************************************************************************************************ - ************************** H C F S U P P O R T R O U T I N E S ****************************************** - ************************************************************************************************************/ - - -/************************************************************************************************************ - * - *.SUBMODULE void calc_mic( hcf_32* p, hcf_32 m ) - *.PURPOSE calculate MIC on a quad byte. - * - *.ARGUMENTS - * p address of the MIC - * m 32 bit value to be processed by the MIC calculation engine - * - *.RETURNS N.A. - * - *.DESCRIPTION - * calc_mic is the implementation of the MIC algorithm. It is a monkey-see monkey-do copy of - * Michael::appendByte() - * of Appendix C of .......... - * - * - *.DIAGRAM - * - *.NOTICE - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ - -#if (HCF_TYPE) & HCF_TYPE_WPA - -#define ROL32( A, n ) ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) -#define ROR32( A, n ) ROL32( (A), 32-(n) ) - -#define L *p -#define R *(p+1) - -static void -calc_mic( hcf_32* p, hcf_32 m ) -{ -#if HCF_BIG_ENDIAN - m = (m >> 16) | (m << 16); -#endif // HCF_BIG_ENDIAN - 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; -} // calc_mic -#undef R -#undef L -#endif // HCF_TYPE_WPA - - - -#if (HCF_TYPE) & HCF_TYPE_WPA -/************************************************************************************************************ - * - *.SUBMODULE void calc_mic_rx_frag( IFBP ifbp, wci_bufp p, int len ) - *.PURPOSE calculate MIC on a single fragment. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * bufp (byte) address of buffer - * len length in bytes of buffer specified by bufp - * - *.RETURNS N.A. - * - *.DESCRIPTION - * calc_mic_rx_frag ........ - * - * The MIC is located in the IFB. - * The MIC is separate for Tx and Rx, thus allowing hcf_send_msg to occur between hcf_service_nic and - * hcf_rcv_msg. - * - * - *.DIAGRAM - * - *.NOTICE - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -void -calc_mic_rx_frag( IFBP ifbp, wci_bufp p, int len ) -{ - static union { hcf_32 x32; hcf_16 x16[2]; hcf_8 x8[4]; } x; //* area to accumulate 4 bytes input for MIC engine - int i; - - if ( len == -1 ) { //initialize MIC housekeeping - i = *(wci_recordp)&p[HFS_STAT]; - /* i = CNV_SHORTP_TO_LITTLE(&p[HFS_STAT]); should not be neede to prevent alignment poroblems - * since len == -1 if and only if p is lookahaead buffer which MUST be word aligned - * to be re-investigated by NvR - */ - - if ( ( i & HFS_STAT_MIC ) == 0 ) { - ifbp->IFB_MICRxCarry = 0xFFFF; //suppress MIC calculation - } else { - ifbp->IFB_MICRxCarry = 0; -//* Note that "coincidentally" the bit positions used in HFS_STAT -//* correspond with the offset of the key in IFB_MICKey - i = ( i & HFS_STAT_MIC_KEY_ID ) >> 10; /* coincidentally no shift needed for i itself */ - ifbp->IFB_MICRx[0] = CNV_LONG_TO_LITTLE(ifbp->IFB_MICRxKey[i ]); - ifbp->IFB_MICRx[1] = CNV_LONG_TO_LITTLE(ifbp->IFB_MICRxKey[i+1]); - } - } else { - if ( ifbp->IFB_MICRxCarry == 0 ) { - x.x32 = CNV_LONGP_TO_LITTLE(p); - p += 4; - if ( len < 4 ) { - ifbp->IFB_MICRxCarry = (hcf_16)len; - } else { - ifbp->IFB_MICRxCarry = 4; - len -= 4; - } - } else while ( ifbp->IFB_MICRxCarry < 4 && len ) { //note for hcf_16 applies: 0xFFFF > 4 - x.x8[ifbp->IFB_MICRxCarry++] = *p++; - len--; - } - while ( ifbp->IFB_MICRxCarry == 4 ) { //contrived so we have only 1 call to calc_mic so we could bring it in-line - calc_mic( ifbp->IFB_MICRx, x.x32 ); - x.x32 = CNV_LONGP_TO_LITTLE(p); - p += 4; - if ( len < 4 ) { - ifbp->IFB_MICRxCarry = (hcf_16)len; - } - len -= 4; - } - } -} // calc_mic_rx_frag -#endif // HCF_TYPE_WPA - - -#if (HCF_TYPE) & HCF_TYPE_WPA -/************************************************************************************************************ - * - *.SUBMODULE void calc_mic_tx_frag( IFBP ifbp, wci_bufp p, int len ) - *.PURPOSE calculate MIC on a single fragment. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * bufp (byte) address of buffer - * len length in bytes of buffer specified by bufp - * - *.RETURNS N.A. - * - *.DESCRIPTION - * calc_mic_tx_frag ........ - * - * The MIC is located in the IFB. - * The MIC is separate for Tx and Rx, thus allowing hcf_send_msg to occur between hcf_service_nic and - * hcf_rcv_msg. - * - * - *.DIAGRAM - * - *.NOTICE - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -void -calc_mic_tx_frag( IFBP ifbp, wci_bufp p, int len ) -{ - static union { hcf_32 x32; hcf_16 x16[2]; hcf_8 x8[4]; } x; //* area to accumulate 4 bytes input for MIC engine - - //if initialization request - if ( len == -1 ) { - //. presume MIC calculation disabled - ifbp->IFB_MICTxCarry = 0xFFFF; - //. if MIC calculation enabled - if ( ifbp->IFB_MICTxCntl ) { - //. . clear MIC carry - ifbp->IFB_MICTxCarry = 0; - //. . initialize MIC-engine - ifbp->IFB_MICTx[0] = CNV_LONG_TO_LITTLE(ifbp->IFB_MICTxKey[0]); /*Tx always uses Key 0 */ - ifbp->IFB_MICTx[1] = CNV_LONG_TO_LITTLE(ifbp->IFB_MICTxKey[1]); - } - //else - } else { - //. if MIC enabled (Tx) / if MIC present (Rx) - //. and no carry from previous calc_mic_frag - if ( ifbp->IFB_MICTxCarry == 0 ) { - //. . preset accu with 4 bytes from buffer - x.x32 = CNV_LONGP_TO_LITTLE(p); - //. . adjust pointer accordingly - p += 4; - //. . if buffer contained less then 4 bytes - if ( len < 4 ) { - //. . . promote valid bytes in accu to carry - //. . . flag accu to contain incomplete double word - ifbp->IFB_MICTxCarry = (hcf_16)len; - //. . else - } else { - //. . . flag accu to contain complete double word - ifbp->IFB_MICTxCarry = 4; - //. . adjust remaining buffer length - len -= 4; - } - //. else if MIC enabled - //. and if carry bytes from previous calc_mic_tx_frag - //. . move (1-3) bytes from carry into accu - } else while ( ifbp->IFB_MICTxCarry < 4 && len ) { /* note for hcf_16 applies: 0xFFFF > 4 */ - x.x8[ifbp->IFB_MICTxCarry++] = *p++; - len--; - } - //. while accu contains complete double word - //. and MIC enabled - while ( ifbp->IFB_MICTxCarry == 4 ) { - //. . pass accu to MIC engine - calc_mic( ifbp->IFB_MICTx, x.x32 ); - //. . copy next 4 bytes from buffer to accu - x.x32 = CNV_LONGP_TO_LITTLE(p); - //. . adjust buffer pointer - p += 4; - //. . if buffer contained less then 4 bytes - //. . . promote valid bytes in accu to carry - //. . . flag accu to contain incomplete double word - if ( len < 4 ) { - ifbp->IFB_MICTxCarry = (hcf_16)len; - } - //. . adjust remaining buffer length - len -= 4; - } - } -} // calc_mic_tx_frag -#endif // HCF_TYPE_WPA - - -#if HCF_PROT_TIME -/************************************************************************************************************ - * - *.SUBMODULE void calibrate( IFBP ifbp ) - *.PURPOSE calibrates the S/W protection counter against the Hermes Timer tick. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS N.A. - * - *.DESCRIPTION - * calibrates the S/W protection counter against the Hermes Timer tick - * IFB_TickIni is the value used to initialize the S/W protection counter such that the expiration period - * more or less independent of the processor speed. If IFB_TickIni is not yet calibrated, it is done now. - * This calibration is "reasonably" accurate because the Hermes is in a quiet state as a result of the - * Initialize command. - * - * - *.DIAGRAM - * - *1: IFB_TickIni is initialized at INI_TICK_INI by hcf_connect. If calibrate succeeds, IFB_TickIni is - * guaranteed to be changed. As a consequence there will be only 1 shot at calibration (regardless of the - * number of init calls) under normal circumstances. - *2: Calibration is done HCF_PROT_TIME_CNT times. This diminish the effects of jitter and interference, - * especially in a pre-emptive environment. HCF_PROT_TIME_CNT is in the range of 16 through 32 and derived - * from the HCF_PROT_TIME specified by the MSF programmer. The divisor needed to scale HCF_PROT_TIME into the - * 16-32 range, is used as a multiplicator after the calibration, to scale the found value back to the - * requested range. This way a compromise is achieved between accuracy and duration of the calibration - * process. - *3: Acknowledge the Timer Tick Event. - * Each cycle is limited to at most INI_TICK_INI samples of the TimerTick status of the Hermes. - * Since the start of calibrate is unrelated to the Hermes Internal Timer, the first interval may last from 0 - * to the normal interval, all subsequent intervals should be the full length of the Hermes Tick interval. - * The Hermes Timer Tick is not reprogrammed by the HCF, hence it is running at the default of 10 k - * microseconds. - *4: If the Timer Tick Event is continuously up (prot_cnt still has the value INI_TICK_INI) or no Timer Tick - * Event occurred before the protection counter expired, reset IFB_TickIni to INI_TICK_INI, - * set the defunct bit of IFB_CardStat (thus rendering the Hermes inoperable) and exit the calibrate routine. - *8: ifbp->IFB_TickIni is multiplied to scale the found value back to the requested range as explained under 2. - * - *.NOTICE - * o Although there are a number of viewpoints possible, calibrate() uses as error strategy that a single - * failure of the Hermes TimerTick is considered fatal. - * o There is no hard and concrete time-out value defined for Hermes activities. The default 1 seconds is - * believed to be sufficiently "relaxed" for real life and to be sufficiently short to be still useful in an - * environment with humans. - * o Note that via IFB_DefunctStat time outs in cmd_wait and in hcfio_string block all Hermes access till the - * next init so functions which call a mix of cmd_wait and hcfio_string only need to check the return status - * of the last call - * o The return code is preset at Time out. - * The additional complication that no calibrated value for the protection count can be assumed since - * calibrate() does not yet have determined a calibrated value (a catch 22), is handled by setting the - * initial value at INI_TICK_INI (by hcf_connect). This approach is considered safe, because: - * - the HCF does not use the pipeline mechanism of Hermes commands. - * - the likelihood of failure (the only time when protection count is relevant) is small. - * - the time will be sufficiently large on a fast machine (busy bit drops on good NIC before counter - * expires) - * - the time will be sufficiently small on a slow machine (counter expires on bad NIC before the end user - * switches the power off in despair - * The time needed to wrap a 32 bit counter around is longer than many humans want to wait, hence the more or - * less arbitrary value of 0x40000L is chosen, assuming it does not take too long on an XT and is not too - * short on a scream-machine. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC void -calibrate( IFBP ifbp ) -{ - int cnt = HCF_PROT_TIME_CNT; - hcf_32 prot_cnt; - - HCFTRACE( ifbp, HCF_TRACE_CALIBRATE ); - if ( ifbp->IFB_TickIni == INI_TICK_INI ) { /*1*/ - ifbp->IFB_TickIni = 0; /*2*/ - while ( cnt-- ) { - prot_cnt = INI_TICK_INI; - OPW( HREG_EV_ACK, HREG_EV_TICK ); /*3*/ - while ( (IPW( HREG_EV_STAT ) & HREG_EV_TICK) == 0 && --prot_cnt ) { - ifbp->IFB_TickIni++; - } - if ( prot_cnt == 0 || prot_cnt == INI_TICK_INI ) { /*4*/ - ifbp->IFB_TickIni = INI_TICK_INI; - ifbp->IFB_DefunctStat = HCF_ERR_DEFUNCT_TIMER; - ifbp->IFB_CardStat |= CARD_STAT_DEFUNCT; - HCFASSERT( DO_ASSERT, prot_cnt ); - } - } - ifbp->IFB_TickIni <<= HCF_PROT_TIME_SHFT; /*8*/ - } - HCFTRACE( ifbp, HCF_TRACE_CALIBRATE | HCF_TRACE_EXIT ); -} // calibrate -#endif // HCF_PROT_TIME - - -#if (HCF_TYPE) & HCF_TYPE_WPA -/************************************************************************************************************ - * - *.SUBMODULE int check_mic( IFBP ifbp ) - *.PURPOSE verifies the MIC of a received non-USB frame. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * HCF_SUCCESS - * HCF_ERR_MIC - * - *.DESCRIPTION - * - * - *.DIAGRAM - * - *4: test whether or not a MIC is reported by the Hermes - *14: the calculated MIC and the received MIC are compared, the return status is set when there is a mismatch - * - *.NOTICE - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -static int -check_mic( IFBP ifbp ) -{ - int rc = HCF_SUCCESS; - hcf_32 x32[2]; //* area to save rcvd 8 bytes MIC - - //if MIC present in RxFS - if ( *(wci_recordp)&ifbp->IFB_lap[-HFS_ADDR_DEST] & HFS_STAT_MIC ) { - //or if ( ifbp->IFB_MICRxCarry != 0xFFFF ) - CALC_RX_MIC( mic_pad, 8 ); //. process up to 3 remaining bytes of data and append 5 to 8 bytes of padding to MIC calculation - get_frag( ifbp, (wci_bufp)x32, 8 BE_PAR(0));//. get 8 byte MIC from NIC - //. if calculated and received MIC do not match - //. . set status at HCF_ERR_MIC - /*14*/ if ( x32[0] != CNV_LITTLE_TO_LONG(ifbp->IFB_MICRx[0]) || - x32[1] != CNV_LITTLE_TO_LONG(ifbp->IFB_MICRx[1]) ) { - rc = HCF_ERR_MIC; - } - } - //return status - return rc; -} // check_mic -#endif // HCF_TYPE_WPA - - -/************************************************************************************************************ - * - *.SUBMODULE int cmd_cmpl( IFBP ifbp ) - *.PURPOSE waits for Hermes Command Completion. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * IFB_DefunctStat - * HCF_ERR_TIME_OUT - * HCF_ERR_DEFUNCT_CMD_SEQ - * HCF_SUCCESS - * - *.DESCRIPTION - * - * - *.DIAGRAM - * - *2: Once cmd_cmpl is called, the Busy option bit in IFB_Cmd must be cleared - *4: If Status register and command code don't match either: - * - the Hermes and Host are out of sync ( a fatal error) - * - error bits are reported via the Status Register. - * Out of sync is considered fatal and brings the HCF in Defunct mode - * Errors reported via the Status Register should be caused by sequence violations in Hermes command - * sequences and hence these bugs should have been found during engineering testing. Since there is no - * strategy to cope with this problem, it might as well be ignored at run time. Note that for any particular - * situation where a strategy is formulated to handle the consequences of a particular bug causing a - * particular Error situation reported via the Status Register, the bug should be removed rather than adding - * logic to cope with the consequences of the bug. - * There have been HCF versions where an error report via the Status Register even brought the HCF in defunct - * mode (although it was not yet named like that at that time). This is particular undesirable behavior for a - * general library. - * Simply reporting the error (as "interesting") is debatable. There also have been HCF versions with this - * strategy using the "vague" HCF_FAILURE code. - * The error is reported via: - * - MiscErr tally of the HCF Tally set - * - the (informative) fields IFB_ErrCmd and IFB_ErrQualifier - * - the assert mechanism - *8: Here the Defunct case and the Status error are separately treated - * - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC int -cmd_cmpl( IFBP ifbp ) -{ - - PROT_CNT_INI; - int rc = HCF_SUCCESS; - hcf_16 stat; - - HCFLOGENTRY( HCF_TRACE_CMD_CPL, ifbp->IFB_Cmd ); - ifbp->IFB_Cmd &= ~HCMD_BUSY; /* 2 */ - HCF_WAIT_WHILE( (IPW( HREG_EV_STAT) & HREG_EV_CMD) == 0 ); /* 4 */ - stat = IPW( HREG_STAT ); -#if HCF_PROT_TIME - if ( prot_cnt == 0 ) { - IF_TALLY( ifbp->IFB_HCF_Tallies.MiscErr++ ); - rc = HCF_ERR_TIME_OUT; - HCFASSERT( DO_ASSERT, ifbp->IFB_Cmd ); - } else -#endif // HCF_PROT_TIME - { - DAWA_ACK( HREG_EV_CMD ); - /*4*/ if ( stat != (ifbp->IFB_Cmd & HCMD_CMD_CODE) ) { - /*8*/ if ( ( (stat ^ ifbp->IFB_Cmd ) & HCMD_CMD_CODE) != 0 ) { - rc = ifbp->IFB_DefunctStat = HCF_ERR_DEFUNCT_CMD_SEQ; - ifbp->IFB_CardStat |= CARD_STAT_DEFUNCT; - } - IF_TALLY( ifbp->IFB_HCF_Tallies.MiscErr++ ); - ifbp->IFB_ErrCmd = stat; - ifbp->IFB_ErrQualifier = IPW( HREG_RESP_0 ); - HCFASSERT( DO_ASSERT, MERGE_2( IPW( HREG_PARAM_0 ), ifbp->IFB_Cmd ) ); - HCFASSERT( DO_ASSERT, MERGE_2( ifbp->IFB_ErrQualifier, ifbp->IFB_ErrCmd ) ); - } - } - HCFASSERT( rc == HCF_SUCCESS, rc); - HCFLOGEXIT( HCF_TRACE_CMD_CPL ); - return rc; -} // cmd_cmpl - - -/************************************************************************************************************ - * - *.SUBMODULE int cmd_exe( IFBP ifbp, int cmd_code, int par_0 ) - *.PURPOSE Executes synchronous part of Hermes Command and - optionally - waits for Command Completion. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * cmd_code - * par_0 - * - *.RETURNS - * IFB_DefunctStat - * HCF_ERR_DEFUNCT_CMD_SEQ - * HCF_SUCCESS - * HCF_ERR_TO_BE_ADDED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - * - *.DESCRIPTION - * Executes synchronous Hermes Command and waits for Command Completion - * - * The general HCF strategy is to wait for command completion. As a consequence: - * - the read of the busy bit before writing the command register is superfluous - * - the Hermes requirement that no Inquiry command may be executed if there is still an unacknowledged - * Inquiry command outstanding, is automatically met. - * The Tx command uses the "Busy" bit in the cmd_code parameter to deviate from this general HCF strategy. - * The idea is that by not busy-waiting on completion of this frequently used command the processor - * utilization is diminished while using the busy-wait on all other seldom used commands the flow is kept - * simple. - * - * - * - *.DIAGRAM - * - *1: skip the body of cmd_exe when in defunct mode or when - based on the S/W Support register write and - * read back test - there is apparently no NIC. - * Note: we gave up on the "old" strategy to write the S/W Support register at magic only when needed. Due to - * the intricateness of Hermes F/W varieties ( which behave differently as far as corruption of the S/W - * Support register is involved), the increasing number of Hermes commands which do an implicit initialize - * (thus modifying the S/W Support register) and the workarounds of some OS/Support S/W induced aspects (e.g. - * the System Soft library at WinNT which postpones the actual mapping of I/O space up to 30 seconds after - * giving the go-ahead), the "magic" strategy is now reduced to a simple write and read back. This means that - * problems like a bug tramping over the memory mapped Hermes registers will no longer be noticed as side - * effect of the S/W Support register check. - *2: check whether the preceding command skipped the busy wait and if so, check for command completion - * - *.NOTICE - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ - -HCF_STATIC int -cmd_exe( IFBP ifbp, hcf_16 cmd_code, hcf_16 par_0 ) //if HCMD_BUSY of cmd_code set, then do NOT wait for completion -{ - int rc; - - HCFLOGENTRY( HCF_TRACE_CMD_EXE, cmd_code ); - HCFASSERT( (cmd_code & HCMD_CMD_CODE) != HCMD_TX || cmd_code & HCMD_BUSY, cmd_code ); //Tx must have Busy bit set - OPW( HREG_SW_0, HCF_MAGIC ); - if ( IPW( HREG_SW_0 ) == HCF_MAGIC ) { /* 1 */ - rc = ifbp->IFB_DefunctStat; - } - else rc = HCF_ERR_NO_NIC; - if ( rc == HCF_SUCCESS ) { - //;?is this a hot idea, better MEASURE performance impact - /*2*/ if ( ifbp->IFB_Cmd & HCMD_BUSY ) { - rc = cmd_cmpl( ifbp ); - } - OPW( HREG_PARAM_0, par_0 ); - OPW( HREG_CMD, cmd_code &~HCMD_BUSY ); - ifbp->IFB_Cmd = cmd_code; - if ( (cmd_code & HCMD_BUSY) == 0 ) { //;?is this a hot idea, better MEASURE performance impact - rc = cmd_cmpl( ifbp ); - } - } - HCFASSERT( rc == HCF_SUCCESS, MERGE_2( rc, cmd_code ) ); - HCFLOGEXIT( HCF_TRACE_CMD_EXE ); - return rc; -} // cmd_exe - - -/************************************************************************************************************ - * - *.SUBMODULE int download( IFBP ifbp, CFG_PROG_STRCT FAR *ltvp ) - *.PURPOSE downloads F/W image into NIC and initiates execution of the downloaded F/W. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * ltvp specifies the pseudo-RID (as defined by WCI) - * - *.RETURNS - * - *.DESCRIPTION - * - * - *.DIAGRAM - *1: First, Ack everything to unblock a (possibly) blocked cmd pipe line - * Note 1: it is very likely that an Alloc event is pending and very well possible that a (Send) Cmd event is - * pending - * Note 2: it is assumed that this strategy takes away the need to ack every conceivable event after an - * Hermes Initialize - * - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC int -download( IFBP ifbp, CFG_PROG_STRCT FAR *ltvp ) //Hermes-II download (volatile only) -{ - hcf_16 i; - int rc = HCF_SUCCESS; - wci_bufp cp; - hcf_io io_port = ifbp->IFB_IOBase + HREG_AUX_DATA; - - HCFLOGENTRY( HCF_TRACE_DL, ltvp->typ ); -#if (HCF_TYPE) & HCF_TYPE_PRELOADED - HCFASSERT( DO_ASSERT, ltvp->mode ); -#else - //if initial "program" LTV - if ( ifbp->IFB_DLMode == CFG_PROG_STOP && ltvp->mode == CFG_PROG_VOLATILE) { - //. switch Hermes to initial mode - /*1*/ OPW( HREG_EV_ACK, ~HREG_EV_SLEEP_REQ ); - rc = cmd_exe( ifbp, HCMD_INI, 0 ); /* HCMD_INI can not be part of init() because that is called on - * other occasions as well */ - rc = init( ifbp ); - } - //if final "program" LTV - if ( ltvp->mode == CFG_PROG_STOP && ifbp->IFB_DLMode == CFG_PROG_VOLATILE) { - //. start tertiary (or secondary) - OPW( HREG_PARAM_1, (hcf_16)(ltvp->nic_addr >> 16) ); - rc = cmd_exe( ifbp, HCMD_EXECUTE, (hcf_16) ltvp->nic_addr ); - if (rc == HCF_SUCCESS) { - rc = init( ifbp ); /*;? do we really want to skip init if cmd_exe failed, i.e. - * IFB_FW_Comp_Id is than possibly incorrect */ - } - //else (non-final) - } else { - //. if mode == Readback SEEPROM -#if 0 //;? as long as the next if contains a hard coded 0, might as well leave it out even more obvious - if ( 0 /*len is definitely not want we want;?*/ && ltvp->mode == CFG_PROG_SEEPROM_READBACK ) { - OPW( HREG_PARAM_1, (hcf_16)(ltvp->nic_addr >> 16) ); - OPW( HREG_PARAM_2, (hcf_16)((ltvp->len - 4) << 1) ); - //. . perform Hermes prog cmd with appropriate mode bits - rc = cmd_exe( ifbp, HCMD_PROGRAM | ltvp->mode, (hcf_16)ltvp->nic_addr ); - //. . set up NIC RAM addressability according Resp0-1 - OPW( HREG_AUX_PAGE, IPW( HREG_RESP_1) ); - OPW( HREG_AUX_OFFSET, IPW( HREG_RESP_0) ); - //. . set up L-field of LTV according Resp2 - i = ( IPW( HREG_RESP_2 ) + 1 ) / 2; // i contains max buffer size in words, a probably not very useful piece of information ;? -/*Nico's code based on i is the "real amount of data available" - if ( ltvp->len - 4 < i ) rc = HCF_ERR_LEN; - else ltvp->len = i + 4; -*/ -/* Rolands code based on the idea that a MSF should not ask for more than is available - // check if number of bytes requested exceeds max buffer size - if ( ltvp->len - 4 > i ) { - rc = HCF_ERR_LEN; - ltvp->len = i + 4; - } -*/ - //. . copy data from NIC via AUX port to LTV - cp = (wci_bufp)ltvp->host_addr; /*IN_PORT_STRING_8_16 macro may modify its parameters*/ - i = ltvp->len - 4; - IN_PORT_STRING_8_16( io_port, cp, i ); //!!!WORD length, cp MUST be a char pointer // $$ char - //. else (non-final programming) - } else -#endif //;? as long as the above if contains a hard coded 0, might as well leave it out even more obvious - { //. . get number of words to program - HCFASSERT( ltvp->segment_size, *ltvp->host_addr ); - i = ltvp->segment_size/2; - //. . copy data (words) from LTV via AUX port to NIC - cp = (wci_bufp)ltvp->host_addr; //OUT_PORT_STRING_8_16 macro may modify its parameters - //. . if mode == volatile programming - if ( ltvp->mode == CFG_PROG_VOLATILE ) { - //. . . set up NIC RAM addressability via AUX port - OPW( HREG_AUX_PAGE, (hcf_16)(ltvp->nic_addr >> 16 << 9 | (ltvp->nic_addr & 0xFFFF) >> 7 ) ); - OPW( HREG_AUX_OFFSET, (hcf_16)(ltvp->nic_addr & 0x007E) ); - OUT_PORT_STRING_8_16( io_port, cp, i ); //!!!WORD length, cp MUST be a char pointer - } - } - } - ifbp->IFB_DLMode = ltvp->mode; //save state in IFB_DLMode -#endif // HCF_TYPE_PRELOADED - HCFASSERT( rc == HCF_SUCCESS, rc ); - HCFLOGEXIT( HCF_TRACE_DL ); - return rc; -} // download - - -#if (HCF_ASSERT) & HCF_ASSERT_PRINTF -/************************************************** - * Certain Hermes-II firmware versions can generate - * debug information. This debug information is - * contained in a buffer in nic-RAM, and can be read - * via the aux port. - **************************************************/ -HCF_STATIC int -fw_printf(IFBP ifbp, CFG_FW_PRINTF_STRCT FAR *ltvp) -{ - int rc = HCF_SUCCESS; - hcf_16 fw_cnt; -// hcf_32 DbMsgBuffer = 0x29D2, DbMsgCount= 0x000029D0; -// hcf_16 DbMsgSize=0x00000080; - hcf_32 DbMsgBuffer; - CFG_FW_PRINTF_BUFFER_LOCATION_STRCT *p = &ifbp->IFB_FwPfBuff; - ltvp->len = 1; - if ( p->DbMsgSize != 0 ) { - // first, check the counter in nic-RAM and compare it to the latest counter value of the HCF - OPW( HREG_AUX_PAGE, (hcf_16)(p->DbMsgCount >> 7) ); - OPW( HREG_AUX_OFFSET, (hcf_16)(p->DbMsgCount & 0x7E) ); - fw_cnt = ((IPW( HREG_AUX_DATA) >>1 ) & ((hcf_16)p->DbMsgSize - 1)); - if ( fw_cnt != ifbp->IFB_DbgPrintF_Cnt ) { -// DbgPrint("fw_cnt=%d IFB_DbgPrintF_Cnt=%d\n", fw_cnt, ifbp->IFB_DbgPrintF_Cnt); - DbMsgBuffer = p->DbMsgBuffer + ifbp->IFB_DbgPrintF_Cnt * 6; // each entry is 3 words - OPW( HREG_AUX_PAGE, (hcf_16)(DbMsgBuffer >> 7) ); - OPW( HREG_AUX_OFFSET, (hcf_16)(DbMsgBuffer & 0x7E) ); - ltvp->msg_id = IPW(HREG_AUX_DATA); - ltvp->msg_par = IPW(HREG_AUX_DATA); - ltvp->msg_tstamp = IPW(HREG_AUX_DATA); - ltvp->len = 4; - ifbp->IFB_DbgPrintF_Cnt++; - ifbp->IFB_DbgPrintF_Cnt &= (p->DbMsgSize - 1); - } - } - return rc; -}; -#endif // HCF_ASSERT_PRINTF - - -/************************************************************************************************************ - * - *.SUBMODULE hcf_16 get_fid( IFBP ifbp ) - *.PURPOSE get allocated FID for either transmit or notify. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * 0 no FID available - * <>0 FID number - * - *.DESCRIPTION - * - * - *.DIAGRAM - * The preference is to use a "pending" alloc. If no alloc is pending, then - if available - the "spare" FID - * is used. - * If the spare FID is used, IFB_RscInd (representing the spare FID) must be cleared - * If the pending alloc is used, the alloc event must be acknowledged to the Hermes. - * In case the spare FID was depleted and the IFB_RscInd has been "faked" as pseudo resource with a 0x0001 - * value by hcf_service_nic, IFB_RscInd has to be "corrected" again to its 0x0000 value. - * - * Note that due to the Hermes-II H/W problems which are intended to be worked around by DAWA, the Alloc bit - * in the Event register is no longer a reliable indication of the presence/absence of a FID. The "Clear FID" - * part of the DAWA logic, together with the choice of the definition of the return information from get_fid, - * handle this automatically, i.e. without additional code in get_fid. - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC hcf_16 -get_fid( IFBP ifbp ) -{ - - hcf_16 fid = 0; -#if ( (HCF_TYPE) & HCF_TYPE_HII5 ) == 0 - PROT_CNT_INI; -#endif // HCF_TYPE_HII5 - - IF_DMA( HCFASSERT(!(ifbp->IFB_CntlOpt & USE_DMA), ifbp->IFB_CntlOpt) ); - - if ( IPW( HREG_EV_STAT) & HREG_EV_ALLOC) { - fid = IPW( HREG_ALLOC_FID ); - HCFASSERT( fid, ifbp->IFB_RscInd ); - DAWA_ZERO_FID( HREG_ALLOC_FID ); -#if ( (HCF_TYPE) & HCF_TYPE_HII5 ) == 0 - HCF_WAIT_WHILE( ( IPW( HREG_EV_STAT ) & HREG_EV_ACK_REG_READY ) == 0 ); - HCFASSERT( prot_cnt, IPW( HREG_EV_STAT ) ); -#endif // HCF_TYPE_HII5 - DAWA_ACK( HREG_EV_ALLOC ); //!!note that HREG_EV_ALLOC is written only once -// 180 degree error in logic ;? #if ALLOC_15 - if ( ifbp->IFB_RscInd == 1 ) { - ifbp->IFB_RscInd = 0; - } -//#endif // ALLOC_15 - } else { -// 180 degree error in logic ;? #if ALLOC_15 - fid = ifbp->IFB_RscInd; -//#endif // ALLOC_15 - ifbp->IFB_RscInd = 0; - } - return fid; -} // get_fid - - -/************************************************************************************************************ - * - *.SUBMODULE void get_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ) - *.PURPOSE reads with 16/32 bit I/O via BAP1 port from NIC RAM to Host memory. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * bufp (byte) address of buffer - * len length in bytes of buffer specified by bufp - * word_len Big Endian only: number of leading bytes to swap in pairs - * - *.RETURNS N.A. - * - *.DESCRIPTION - * process the single byte (if applicable) read by the previous get_frag and copy len (or len-1) bytes from - * NIC to bufp. - * On a Big Endian platform, the parameter word_len controls the number of leading bytes whose endianness is - * converted (i.e. byte swapped) - * - * - *.DIAGRAM - *10: The PCMCIA card can be removed in the middle of the transfer. By depositing a "magic number" in the - * HREG_SW_0 register of the Hermes at initialization time and by verifying this register, it can be - * determined whether the card is still present. The return status is set accordingly. - * Clearing the buffer is a (relative) cheap way to prevent that failing I/O results in run-away behavior - * because the garbage in the buffer is interpreted by the caller irrespective of the return status (e.g. - * hcf_service_nic has this behavior). - * - *.NOTICE - * It turns out DOS ODI uses zero length fragments. The HCF code can cope with it, but as a consequence, no - * Assert on len is possible - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC void -get_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ) -{ - hcf_io io_port = ifbp->IFB_IOBase + HREG_DATA_1; //BAP data register - wci_bufp p = bufp; //working pointer - int i; //prevent side effects from macro - int j; - - HCFASSERT( ((hcf_32)bufp & (HCF_ALIGN-1) ) == 0, (hcf_32)bufp ); - -/*1: here recovery logic for intervening BAP access between hcf_service_nic and hcf_rcv_msg COULD be added - * if current access is RxInitial - * . persistent_offset += len - */ - - i = len; - //if buffer length > 0 and carry from previous get_frag - if ( i && ifbp->IFB_CarryIn ) { - //. move carry to buffer - //. adjust buffer length and pointer accordingly - *p++ = (hcf_8)(ifbp->IFB_CarryIn>>8); - i--; - //. clear carry flag - ifbp->IFB_CarryIn = 0; - } -#if (HCF_IO) & HCF_IO_32BITS - //skip zero-length I/O, single byte I/O and I/O not worthwhile (i.e. less than 6 bytes)for DW logic - //if buffer length >= 6 and 32 bits I/O support - if ( !(ifbp->IFB_CntlOpt & USE_16BIT) && i >= 6 ) { - hcf_32 FAR *p4; //prevent side effects from macro - if ( ( (hcf_32)p & 0x1 ) == 0 ) { //. if buffer at least word aligned - if ( (hcf_32)p & 0x2 ) { //. . if buffer not double word aligned - //. . . read single word to get double word aligned - *(wci_recordp)p = IN_PORT_WORD( io_port ); - //. . . adjust buffer length and pointer accordingly - p += 2; - i -= 2; - } - //. . read as many double word as possible - p4 = (hcf_32 FAR *)p; - j = i/4; - IN_PORT_STRING_32( io_port, p4, j ); - //. . adjust buffer length and pointer accordingly - p += i & ~0x0003; - i &= 0x0003; - } - } -#endif // HCF_IO_32BITS - //if no 32-bit support OR byte aligned OR 1-3 bytes left - if ( i ) { - //. read as many word as possible in "alignment safe" way - j = i/2; - IN_PORT_STRING_8_16( io_port, p, j ); - //. if 1 byte left - if ( i & 0x0001 ) { - //. . read 1 word - ifbp->IFB_CarryIn = IN_PORT_WORD( io_port ); - //. . store LSB in last char of buffer - bufp[len-1] = (hcf_8)ifbp->IFB_CarryIn; - //. . save MSB in carry, set carry flag - ifbp->IFB_CarryIn |= 0x1; - } - } -#if HCF_BIG_ENDIAN - HCFASSERT( word_len == 0 || word_len == 2 || word_len == 4, word_len ); - HCFASSERT( word_len == 0 || ((hcf_32)bufp & 1 ) == 0, (hcf_32)bufp ); - HCFASSERT( word_len <= len, MERGE2( word_len, len ) ); - //see put_frag for an alternative implementation, but be careful about what are int's and what are - //hcf_16's - if ( word_len ) { //. if there is anything to convert - hcf_8 c; - c = bufp[1]; //. . convert the 1st hcf_16 - bufp[1] = bufp[0]; - bufp[0] = c; - if ( word_len > 1 ) { //. . if there is to convert more than 1 word ( i.e 2 ) - c = bufp[3]; //. . . convert the 2nd hcf_16 - bufp[3] = bufp[2]; - bufp[2] = c; - } - } -#endif // HCF_BIG_ENDIAN -} // get_frag - -/************************************************************************************************************ - * - *.SUBMODULE int init( IFBP ifbp ) - *.PURPOSE Handles common initialization aspects (H-I init, calibration, config.mngmt, allocation). - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS - * HCF_ERR_INCOMP_PRI - * HCF_ERR_INCOMP_FW - * HCF_ERR_TIME_OUT - * >>hcf_get_info - * HCF_ERR_NO_NIC - * HCF_ERR_LEN - * - *.DESCRIPTION - * init will successively: - * - in case of a (non-preloaded) H-I, initialize the NIC - * - calibrate the S/W protection timer against the Hermes Timer - * - collect HSI, "active" F/W Configuration Management Information - * - in case active F/W is Primary F/W: collect Primary F/W Configuration Management Information - * - check HSI and Primary F/W compatibility with the HCF - * - in case active F/W is Station or AP F/W: check Station or AP F/W compatibility with the HCF - * - in case active F/W is not Primary F/W: allocate FIDs to be used in transmit/notify process - * - * - *.DIAGRAM - *2: drop all error status bits in IFB_CardStat since they are expected to be re-evaluated. - *4: Ack everything except HREG_EV_SLEEP_REQ. It is very likely that an Alloc event is pending and - * very well possible that a Send Cmd event is pending. Acking HREG_EV_SLEEP_REQ is handled by hcf_action( - * HCF_ACT_INT_ON ) !!! - *10: Calibrate the S/W time-out protection mechanism by calling calibrate(). Note that possible errors - * in the calibration process are nor reported by init but will show up via the defunct mechanism in - * subsequent hcf-calls. - *14: usb_check_comp() is called to have the minimal visual clutter for the legacy H-I USB dongle - * compatibility check. - *16: The following configuration management related information is retrieved from the NIC: - * - HSI supplier - * - F/W Identity - * - F/W supplier - * if appropriate: - * - PRI Identity - * - PRI supplier - * appropriate means on H-I: always - * and on H-II if F/W supplier reflects a primary (i.e. only after an Hermes Reset or Init - * command). - * QUESTION ;? !!!!!! should, For each of the above RIDs the Endianness is converted to native Endianness. - * Only the return code of the first hcf_get_info is used. All hcf_get_info calls are made, regardless of - * the success or failure of the 1st hcf_get_info. The assumptions are: - * - if any call fails, they all fail, so remembering the result of the 1st call is adequate - * - a failing call will overwrite the L-field with a 0x0000 value, which services both as an - * error indication for the values cached in the IFB as making mmd_check_comp fail. - * In case of H-I, when getting the F/W identity fails, the F/W is assumed to be H-I AP F/W pre-dating - * version 9.0 and the F/W Identity and Supplier are faked accordingly. - * In case of H-II, the Primary, Station and AP Identity are merged into a single F/W Identity. - * The same applies to the Supplier information. As a consequence the PRI information can no longer be - * retrieved when a Tertiary runs. To accommodate MSFs and Utilities who depend on PRI information being - * available at any time, this information is cached in the IFB. In this cache the generic "F/W" value of - * the typ-fields is overwritten with the specific (legacy) "PRI" values. To actually re-route the (legacy) - * PRI request via hcf_get_info, the xxxx-table must be set. In case of H-I, this caching, modifying and - * re-routing is not needed because PRI information is always available directly from the NIC. For - * consistency the caching fields in the IFB are filled with the PRI information anyway. - *18: mdd_check_comp() is called to check the Supplier Variant and Range of the Host-S/W I/F (HSI) and the - * Primary Firmware Variant and Range against the Top and Bottom level supported by this HCF. If either of - * these tests fails, the CARD_STAT_INCOMP_PRI bit of IFB_CardStat is set - * Note: There should always be a primary except during production, so this makes the HCF in its current form - * unsuitable for manufacturing test systems like the FTS. This can be remedied by an adding a test like - * ifbp->IFB_PRISup.id == COMP_ID_PRI - *20: In case there is Tertiary F/W and this F/W is Station F/W, the Supplier Variant and Range of the Station - * Firmware function as retrieved from the Hermes is checked against the Top and Bottom level supported by - * this HCF. - * Note: ;? the tertiary F/W compatibility checks could be moved to the DHF, which already has checked the - * CFI and MFI compatibility of the image with the NIC before the image was downloaded. - *28: In case of non-Primary F/W: allocates and acknowledge a (TX or Notify) FID and allocates without - * acknowledge another (TX or Notify) FID (the so-called 1.5 alloc scheme) with the following steps: - * - execute the allocate command by calling cmd_exe - * - wait till either the alloc event or a time-out occurs - * - regardless whether the alloc event occurs, call get_fid to - * - read the FID and save it in IFB_RscInd to be used as "spare FID" - * - acknowledge the alloc event - * - do another "half" allocate to complete the "1.5 Alloc scheme" - * Note that above 3 steps do not harm and thus give the "cheapest" acceptable strategy. - * If a time-out occurred, then report time out status (after all) - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC int -init( IFBP ifbp ) -{ - - int rc = HCF_SUCCESS; - - HCFLOGENTRY( HCF_TRACE_INIT, 0 ); - - ifbp->IFB_CardStat = 0; /* 2*/ - OPW( HREG_EV_ACK, ~HREG_EV_SLEEP_REQ ); /* 4*/ - IF_PROT_TIME( calibrate( ifbp ) ); /*10*/ -#if 0 // OOR - ifbp->IFB_FWIdentity.len = 2; //misuse the IFB space for a put - ifbp->IFB_FWIdentity.typ = CFG_TICK_TIME; - ifbp->IFB_FWIdentity.comp_id = (1000*1000)/1024 + 1; //roughly 1 second - hcf_put_info( ifbp, (LTVP)&ifbp->IFB_FWIdentity.len ); -#endif // OOR - ifbp->IFB_FWIdentity.len = sizeof(CFG_FW_IDENTITY_STRCT)/sizeof(hcf_16) - 1; - ifbp->IFB_FWIdentity.typ = CFG_FW_IDENTITY; - rc = hcf_get_info( ifbp, (LTVP)&ifbp->IFB_FWIdentity.len ); -/* ;? conversion should not be needed for mmd_check_comp */ -#if HCF_BIG_ENDIAN - ifbp->IFB_FWIdentity.comp_id = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWIdentity.comp_id ); - ifbp->IFB_FWIdentity.variant = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWIdentity.variant ); - ifbp->IFB_FWIdentity.version_major = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWIdentity.version_major ); - ifbp->IFB_FWIdentity.version_minor = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWIdentity.version_minor ); -#endif // HCF_BIG_ENDIAN -#if defined MSF_COMPONENT_ID /*14*/ - if ( rc == HCF_SUCCESS ) { /*16*/ - ifbp->IFB_HSISup.len = sizeof(CFG_SUP_RANGE_STRCT)/sizeof(hcf_16) - 1; - ifbp->IFB_HSISup.typ = CFG_NIC_HSI_SUP_RANGE; - rc = hcf_get_info( ifbp, (LTVP)&ifbp->IFB_HSISup.len ); -/* ;? conversion should not be needed for mmd_check_comp , BUT according to a report of a BE-user it is - * should be resolved in the WARP release - * since some compilers make ugly but unnecessary code of these instructions even for LE, - * it is conditionally compiled */ -#if HCF_BIG_ENDIAN - ifbp->IFB_HSISup.role = CNV_LITTLE_TO_SHORT( ifbp->IFB_HSISup.role ); - ifbp->IFB_HSISup.id = CNV_LITTLE_TO_SHORT( ifbp->IFB_HSISup.id ); - ifbp->IFB_HSISup.variant = CNV_LITTLE_TO_SHORT( ifbp->IFB_HSISup.variant ); - ifbp->IFB_HSISup.bottom = CNV_LITTLE_TO_SHORT( ifbp->IFB_HSISup.bottom ); - ifbp->IFB_HSISup.top = CNV_LITTLE_TO_SHORT( ifbp->IFB_HSISup.top ); -#endif // HCF_BIG_ENDIAN - ifbp->IFB_FWSup.len = sizeof(CFG_SUP_RANGE_STRCT)/sizeof(hcf_16) - 1; - ifbp->IFB_FWSup.typ = CFG_FW_SUP_RANGE; - (void)hcf_get_info( ifbp, (LTVP)&ifbp->IFB_FWSup.len ); -/* ;? conversion should not be needed for mmd_check_comp */ -#if HCF_BIG_ENDIAN - ifbp->IFB_FWSup.role = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWSup.role ); - ifbp->IFB_FWSup.id = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWSup.id ); - ifbp->IFB_FWSup.variant = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWSup.variant ); - ifbp->IFB_FWSup.bottom = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWSup.bottom ); - ifbp->IFB_FWSup.top = CNV_LITTLE_TO_SHORT( ifbp->IFB_FWSup.top ); -#endif // HCF_BIG_ENDIAN - - if ( ifbp->IFB_FWSup.id == COMP_ID_PRI ) { /* 20*/ - int i = sizeof( CFG_FW_IDENTITY_STRCT) + sizeof(CFG_SUP_RANGE_STRCT ); - while ( i-- ) ((hcf_8*)(&ifbp->IFB_PRIIdentity))[i] = ((hcf_8*)(&ifbp->IFB_FWIdentity))[i]; - ifbp->IFB_PRIIdentity.typ = CFG_PRI_IDENTITY; - ifbp->IFB_PRISup.typ = CFG_PRI_SUP_RANGE; - xxxx[xxxx_PRI_IDENTITY_OFFSET] = &ifbp->IFB_PRIIdentity.len; - xxxx[xxxx_PRI_IDENTITY_OFFSET+1] = &ifbp->IFB_PRISup.len; - } - if ( !mmd_check_comp( (void*)&cfg_drv_act_ranges_hsi, &ifbp->IFB_HSISup) /* 22*/ -#if ( (HCF_TYPE) & HCF_TYPE_PRELOADED ) == 0 -//;? the PRI compatibility check is only relevant for DHF - || !mmd_check_comp( (void*)&cfg_drv_act_ranges_pri, &ifbp->IFB_PRISup) -#endif // HCF_TYPE_PRELOADED - ) { - ifbp->IFB_CardStat = CARD_STAT_INCOMP_PRI; - rc = HCF_ERR_INCOMP_PRI; - } - if ( ( ifbp->IFB_FWSup.id == COMP_ID_STA && !mmd_check_comp( (void*)&cfg_drv_act_ranges_sta, &ifbp->IFB_FWSup) ) || - ( ifbp->IFB_FWSup.id == COMP_ID_APF && !mmd_check_comp( (void*)&cfg_drv_act_ranges_apf, &ifbp->IFB_FWSup) ) - ) { /* 24 */ - ifbp->IFB_CardStat |= CARD_STAT_INCOMP_FW; - rc = HCF_ERR_INCOMP_FW; - } - } -#endif // MSF_COMPONENT_ID - - if ( rc == HCF_SUCCESS && ifbp->IFB_FWIdentity.comp_id >= COMP_ID_FW_STA ) { - PROT_CNT_INI; - /************************************************************************************** - * rlav: the DMA engine needs the host to cause a 'hanging alloc event' for it to consume. - * not sure if this is the right spot in the HCF, thinking about hcf_enable... - **************************************************************************************/ - rc = cmd_exe( ifbp, HCMD_ALLOC, 0 ); -// 180 degree error in logic ;? #if ALLOC_15 -// ifbp->IFB_RscInd = 1; //let's hope that by the time hcf_send_msg isa called, there will be a FID -//#else - if ( rc == HCF_SUCCESS ) { - HCF_WAIT_WHILE( (IPW( HREG_EV_STAT ) & HREG_EV_ALLOC) == 0 ); - IF_PROT_TIME( HCFASSERT(prot_cnt, IPW( HREG_EV_STAT )) ); -#if HCF_DMA - if ( ! ( ifbp->IFB_CntlOpt & USE_DMA ) ) -#endif // HCF_DMA - { - ifbp->IFB_RscInd = get_fid( ifbp ); - HCFASSERT( ifbp->IFB_RscInd, 0 ); - cmd_exe( ifbp, HCMD_ALLOC, 0 ); - IF_PROT_TIME( if ( prot_cnt == 0 ) rc = HCF_ERR_TIME_OUT ); - } - } -//#endif // ALLOC_15 - } - - HCFASSERT( rc == HCF_SUCCESS, rc ); - HCFLOGEXIT( HCF_TRACE_INIT ); - return rc; -} // init - -/************************************************************************************************************ - * - *.SUBMODULE void isr_info( IFBP ifbp ) - *.PURPOSE handles link events. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS N.A. - * - *.DESCRIPTION - * - * - *.DIAGRAM - *1: First the FID number corresponding with the InfoEvent is determined. - * Note the complication of the zero-FID protection sub-scheme in DAWA. - * Next the L-field and the T-field are fetched into scratch buffer info. - *2: In case of tallies, the 16 bits Hermes values are accumulated in the IFB into 32 bits values. Info[0] - * is (expected to be) HCF_NIC_TAL_CNT + 1. The contraption "while ( info[0]-- >1 )" rather than - * "while ( --info[0] )" is used because it is dangerous to determine the length of the Value field by - * decrementing info[0]. As a result of a bug in some version of the F/W, info[0] may be 0, resulting - * in a very long loop in the pre-decrement logic. - *4: In case of a link status frame, the information is copied to the IFB field IFB_linkStat - *6: All other than Tallies (including "unknown" ones) are checked against the selection set by the MSF - * via CFG_RID_LOG. If a match is found or the selection set has the wild-card type (i.e non-NULL buffer - * pointer at the terminating zero-type), the frame is copied to the (type-specific) log buffer. - * Note that to accumulate tallies into IFB AND to log them or to log a frame when a specific match occures - * AND based on the wild-card selection, you have to call setup_bap again after the 1st copy. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC void -isr_info( IFBP ifbp ) -{ - hcf_16 info[2], fid; -#if (HCF_EXT) & HCF_EXT_INFO_LOG - RID_LOGP ridp = ifbp->IFB_RIDLogp; //NULL or pointer to array of RID_LOG structures (terminated by zero typ) -#endif // HCF_EXT_INFO_LOG - - HCFTRACE( ifbp, HCF_TRACE_ISR_INFO ); /* 1 */ - fid = IPW( HREG_INFO_FID ); - DAWA_ZERO_FID( HREG_INFO_FID ); - if ( fid ) { - (void)setup_bap( ifbp, fid, 0, IO_IN ); - get_frag( ifbp, (wci_bufp)info, 4 BE_PAR(2) ); - HCFASSERT( info[0] <= HCF_MAX_LTV + 1, MERGE_2( info[1], info[0] ) ); //;? a smaller value makes more sense -#if (HCF_TALLIES) & HCF_TALLIES_NIC //Hermes tally support - if ( info[1] == CFG_TALLIES ) { - hcf_32 *p; - /*2*/ if ( info[0] > HCF_NIC_TAL_CNT ) { - info[0] = HCF_NIC_TAL_CNT + 1; - } - p = (hcf_32*)&ifbp->IFB_NIC_Tallies; - while ( info[0]-- >1 ) *p++ += IPW( HREG_DATA_1 ); //request may return zero length - } - else -#endif // HCF_TALLIES_NIC - { - /*4*/ if ( info[1] == CFG_LINK_STAT ) { - ifbp->IFB_LinkStat = IPW( HREG_DATA_1 ); - } -#if (HCF_EXT) & HCF_EXT_INFO_LOG - /*6*/ while ( 1 ) { - if ( ridp->typ == 0 || ridp->typ == info[1] ) { - if ( ridp->bufp ) { - HCFASSERT( ridp->len >= 2, ridp->typ ); - ridp->bufp[0] = min((hcf_16)(ridp->len - 1), info[0] ); //save L - ridp->bufp[1] = info[1]; //save T - get_frag( ifbp, (wci_bufp)&ridp->bufp[2], (ridp->bufp[0] - 1)*2 BE_PAR(0) ); - } - break; - } - ridp++; - } -#endif // HCF_EXT_INFO_LOG - } - HCFTRACE( ifbp, HCF_TRACE_ISR_INFO | HCF_TRACE_EXIT ); - } - return; -} // isr_info - -// -// -// #endif // HCF_TALLIES_NIC -// /*4*/ if ( info[1] == CFG_LINK_STAT ) { -// ifbp->IFB_DSLinkStat = IPW( HREG_DATA_1 ) | CFG_LINK_STAT_CHANGE; //corrupts BAP !! ;? -// ifbp->IFB_LinkStat = ifbp->IFB_DSLinkStat & CFG_LINK_STAT_FW; //;? to be obsoleted -// printk(KERN_ERR "linkstatus: %04x\n", ifbp->IFB_DSLinkStat ); //;?remove me 1 day -// #if (HCF_SLEEP) & HCF_DDS -// if ( ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_CONNECTED ) == 0 ) { //even values are disconnected etc. -// ifbp->IFB_TickCnt = 0; //start 2 second period (with 1 tick uncertanty) -// printk(KERN_NOTICE "isr_info: AwaitConnection phase started, IFB_TickCnt = 0\n" ); //;?remove me 1 day -// } -// #endif // HCF_DDS -// } -// #if (HCF_EXT) & HCF_EXT_INFO_LOG -// /*6*/ while ( 1 ) { -// if ( ridp->typ == 0 || ridp->typ == info[1] ) { -// if ( ridp->bufp ) { -// HCFASSERT( ridp->len >= 2, ridp->typ ); -// (void)setup_bap( ifbp, fid, 2, IO_IN ); //restore BAP for tallies, linkstat and specific type followed by wild card -// ridp->bufp[0] = min( ridp->len - 1, info[0] ); //save L -// get_frag( ifbp, (wci_bufp)&ridp->bufp[1], ridp->bufp[0]*2 BE_PAR(0) ); -// } -// break; //;?this break is no longer needed due to setup_bap but lets concentrate on DDS first -// } -// ridp++; -// } -// #endif // HCF_EXT_INFO_LOG -// } -// HCFTRACE( ifbp, HCF_TRACE_ISR_INFO | HCF_TRACE_EXIT ); -// -// -// -// -// return; -//} // isr_info - - -/************************************************************************************************************ - * - *.SUBMODULE void mdd_assert( IFBP ifbp, unsigned int line_number, hcf_32 q ) - *.PURPOSE filters assert on level and interfaces to the MSF supplied msf_assert routine. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * line_number line number of the line which caused the assert - * q qualifier, additional information which may give a clue about the problem - * - *.RETURNS N.A. - * - *.DESCRIPTION - * - * - *.DIAGRAM - * - *.NOTICE - * mdd_assert has been through a turmoil, renaming hcf_assert to assert and hcf_assert again and supporting off - * and on being called from the MSF level and other ( immature ) ModularDriverDevelopment modules like DHF and - * MMD. - * !!!! The assert routine is not an hcf_..... routine in the sense that it may be called by the MSF, - * however it is called from mmd.c and dhf.c, so it must be external. - * To prevent namespace pollution it needs a prefix, to prevent that MSF programmers think that - * they are allowed to call the assert logic, the prefix HCF can't be used, so MDD is selected!!!! - * - * When called from the DHF module the line number is incremented by DHF_FILE_NAME_OFFSET and when called from - * the MMD module by MMD_FILE_NAME_OFFSET. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -#if HCF_ASSERT -void -mdd_assert( IFBP ifbp, unsigned int line_number, hcf_32 q ) -{ - hcf_16 run_time_flag = ifbp->IFB_AssertLvl; - - if ( run_time_flag /* > ;?????? */ ) { //prevent recursive behavior, later to be extended to level filtering - ifbp->IFB_AssertQualifier = q; - ifbp->IFB_AssertLine = (hcf_16)line_number; -#if (HCF_ASSERT) & ( HCF_ASSERT_LNK_MSF_RTN | HCF_ASSERT_RT_MSF_RTN ) - if ( ifbp->IFB_AssertRtn ) { - ifbp->IFB_AssertRtn( line_number, ifbp->IFB_AssertTrace, q ); - } -#endif // HCF_ASSERT_LNK_MSF_RTN / HCF_ASSERT_RT_MSF_RTN -#if (HCF_ASSERT) & HCF_ASSERT_SW_SUP - OPW( HREG_SW_2, line_number ); - OPW( HREG_SW_2, ifbp->IFB_AssertTrace ); - OPW( HREG_SW_2, (hcf_16)q ); - OPW( HREG_SW_2, (hcf_16)(q >> 16 ) ); -#endif // HCF_ASSERT_SW_SUP - -#if (HCF_ASSERT) & HCF_ASSERT_MB - ifbp->IFB_AssertLvl = 0; // prevent recursive behavior - hcf_put_info( ifbp, (LTVP)&ifbp->IFB_AssertStrct ); - ifbp->IFB_AssertLvl = run_time_flag; // restore appropriate filter level -#endif // HCF_ASSERT_MB - } -} // mdd_assert -#endif // HCF_ASSERT - - -/************************************************************************************************************ - * - *.SUBMODULE void put_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ) - *.PURPOSE writes with 16/32 bit I/O via BAP1 port from Host memory to NIC RAM. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * bufp (byte) address of buffer - * len length in bytes of buffer specified by bufp - * word_len Big Endian only: number of leading bytes to swap in pairs - * - *.RETURNS N.A. - * - *.DESCRIPTION - * process the single byte (if applicable) not yet written by the previous put_frag and copy len - * (or len-1) bytes from bufp to NIC. - * - * - *.DIAGRAM - * - *.NOTICE - * It turns out DOS ODI uses zero length fragments. The HCF code can cope with it, but as a consequence, no - * Assert on len is possible - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC void -put_frag( IFBP ifbp, wci_bufp bufp, int len BE_PAR( int word_len ) ) -{ - hcf_io io_port = ifbp->IFB_IOBase + HREG_DATA_1; //BAP data register - int i; //prevent side effects from macro - hcf_16 j; - HCFASSERT( ((hcf_32)bufp & (HCF_ALIGN-1) ) == 0, (hcf_32)bufp ); -#if HCF_BIG_ENDIAN - HCFASSERT( word_len == 0 || word_len == 2 || word_len == 4, word_len ); - HCFASSERT( word_len == 0 || ((hcf_32)bufp & 1 ) == 0, (hcf_32)bufp ); - HCFASSERT( word_len <= len, MERGE_2( word_len, len ) ); - - if ( word_len ) { //if there is anything to convert - //. convert and write the 1st hcf_16 - j = bufp[1] | bufp[0]<<8; - OUT_PORT_WORD( io_port, j ); - //. update pointer and counter accordingly - len -= 2; - bufp += 2; - if ( word_len > 1 ) { //. if there is to convert more than 1 word ( i.e 2 ) - //. . convert and write the 2nd hcf_16 - j = bufp[1] | bufp[0]<<8; /*bufp is already incremented by 2*/ - OUT_PORT_WORD( io_port, j ); - //. . update pointer and counter accordingly - len -= 2; - bufp += 2; - } - } -#endif // HCF_BIG_ENDIAN - i = len; - if ( i && ifbp->IFB_CarryOut ) { //skip zero-length - j = ((*bufp)<<8) + ( ifbp->IFB_CarryOut & 0xFF ); - OUT_PORT_WORD( io_port, j ); - bufp++; i--; - ifbp->IFB_CarryOut = 0; - } -#if (HCF_IO) & HCF_IO_32BITS - //skip zero-length I/O, single byte I/O and I/O not worthwhile (i.e. less than 6 bytes)for DW logic - //if buffer length >= 6 and 32 bits I/O support - if ( !(ifbp->IFB_CntlOpt & USE_16BIT) && i >= 6 ) { - hcf_32 FAR *p4; //prevent side effects from macro - if ( ( (hcf_32)bufp & 0x1 ) == 0 ) { //. if buffer at least word aligned - if ( (hcf_32)bufp & 0x2 ) { //. . if buffer not double word aligned - //. . . write a single word to get double word aligned - j = *(wci_recordp)bufp; //just to help ease writing macros with embedded assembly - OUT_PORT_WORD( io_port, j ); - //. . . adjust buffer length and pointer accordingly - bufp += 2; i -= 2; - } - //. . write as many double word as possible - p4 = (hcf_32 FAR *)bufp; - j = (hcf_16)i/4; - OUT_PORT_STRING_32( io_port, p4, j ); - //. . adjust buffer length and pointer accordingly - bufp += i & ~0x0003; - i &= 0x0003; - } - } -#endif // HCF_IO_32BITS - //if no 32-bit support OR byte aligned OR 1 word left - if ( i ) { - //. if odd number of bytes left - if ( i & 0x0001 ) { - //. . save left over byte (before bufp is corrupted) in carry, set carry flag - ifbp->IFB_CarryOut = (hcf_16)bufp[i-1] | 0x0100; //note that i and bufp are always simultaneously modified, &bufp[i-1] is invariant - } - //. write as many word as possible in "alignment safe" way - j = (hcf_16)i/2; - OUT_PORT_STRING_8_16( io_port, bufp, j ); - } -} // put_frag - - -/************************************************************************************************************ - * - *.SUBMODULE void put_frag_finalize( IFBP ifbp ) - *.PURPOSE cleanup after put_frag for trailing odd byte and MIC transfer to NIC. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * - *.RETURNS N.A. - * - *.DESCRIPTION - * finalize the MIC calculation with the padding pattern, output the last byte (if applicable) - * of the message and the MIC to the TxFS - * - * - *.DIAGRAM - *2: 1 byte of the last put_frag may be still in IFB_CarryOut ( the put_frag carry holder ), so ........ - * 1 - 3 bytes of the last put_frag may be still in IFB_tx_32 ( the MIC engine carry holder ), so ........ - * The call to the MIC calculation routine feeds these remaining bytes (if any) of put_frag and the - * just as many bytes of the padding as needed to the MIC calculation engine. Note that the "unneeded" pad - * bytes simply end up in the MIC engine carry holder and are never used. - *8: write the remainder of the MIC and possible some garbage to NIC RAM - * Note: i is always 4 (a loop-invariant of the while in point 2) - * - *.NOTICE - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC void -put_frag_finalize( IFBP ifbp ) -{ -#if (HCF_TYPE) & HCF_TYPE_WPA - if ( ifbp->IFB_MICTxCarry != 0xFFFF) { //if MIC calculation active - CALC_TX_MIC( mic_pad, 8); //. feed (up to 8 bytes of) virtual padding to MIC engine - //. write (possibly) trailing byte + (most of) MIC - put_frag( ifbp, (wci_bufp)ifbp->IFB_MICTx, 8 BE_PAR(0) ); - } -#endif // HCF_TYPE_WPA - put_frag( ifbp, null_addr, 1 BE_PAR(0) ); //write (possibly) trailing data or MIC byte -} // put_frag_finalize - - -/************************************************************************************************************ - * - *.SUBMODULE int put_info( IFBP ifbp, LTVP ltvp ) - *.PURPOSE support routine to handle the "basic" task of hcf_put_info to pass RIDs to the NIC. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * ltvp address in NIC RAM where LVT-records are located - * - *.RETURNS - * HCF_SUCCESS - * >>put_frag - * >>cmd_wait - * - *.DESCRIPTION - * - * - *.DIAGRAM - *20: do not write RIDs to NICs which have incompatible Firmware - *24: If the RID does not exist, the L-field is set to zero. - * Note that some RIDs can not be read, e.g. the pseudo RIDs for direct Hermes commands and CFG_DEFAULT_KEYS - *28: If the RID is written successful, pass it to the NIC by means of an Access Write command - * - *.NOTICE - * The mechanism to HCF_ASSERT on invalid typ-codes in the LTV record is based on the following strategy: - * - some codes (e.g. CFG_REG_MB) are explicitly handled by the HCF which implies that these codes - * are valid. These codes are already consumed by hcf_put_info. - * - all other codes are passed to the Hermes. Before the put action is executed, hcf_get_info is called - * with an LTV record with a value of 1 in the L-field and the intended put action type in the Typ-code - * field. If the put action type is valid, it is also valid as a get action type code - except - * for CFG_DEFAULT_KEYS and CFG_ADD_TKIP_DEFAULT_KEY - so the HCF_ASSERT logic of hcf_get_info should - * not catch. - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC int -put_info( IFBP ifbp, LTVP ltvp ) -{ - - int rc = HCF_SUCCESS; - - HCFASSERT( ifbp->IFB_CardStat == 0, MERGE_2( ltvp->typ, ifbp->IFB_CardStat ) ); - HCFASSERT( CFG_RID_CFG_MIN <= ltvp->typ && ltvp->typ <= CFG_RID_CFG_MAX, ltvp->typ ); - - if ( ifbp->IFB_CardStat == 0 && /* 20*/ - ( ( CFG_RID_CFG_MIN <= ltvp->typ && ltvp->typ <= CFG_RID_CFG_MAX ) || - ( CFG_RID_ENG_MIN <= ltvp->typ /* && ltvp->typ <= 0xFFFF */ ) ) ) { -#if HCF_ASSERT //FCC8, FCB0, FCB4, FCB6, FCB7, FCB8, FCC0, FCC4, FCBC, FCBD, FCBE, FCBF - { - hcf_16 t = ltvp->typ; - LTV_STRCT x = { 2, t, {0} }; /*24*/ - hcf_get_info( ifbp, (LTVP)&x ); - if ( x.len == 0 && - ( t != CFG_DEFAULT_KEYS && t != CFG_ADD_TKIP_DEFAULT_KEY && t != CFG_REMOVE_TKIP_DEFAULT_KEY && - t != CFG_ADD_TKIP_MAPPED_KEY && t != CFG_REMOVE_TKIP_MAPPED_KEY && - t != CFG_HANDOVER_ADDR && t != CFG_DISASSOCIATE_ADDR && - t != CFG_FCBC && t != CFG_FCBD && t != CFG_FCBE && t != CFG_FCBF && - t != CFG_DEAUTHENTICATE_ADDR - ) - ) { - HCFASSERT( DO_ASSERT, ltvp->typ ); - } - } -#endif // HCF_ASSERT - - rc = setup_bap( ifbp, ltvp->typ, 0, IO_OUT ); - put_frag( ifbp, (wci_bufp)ltvp, 2*ltvp->len + 2 BE_PAR(2) ); - /*28*/ if ( rc == HCF_SUCCESS ) { - rc = cmd_exe( ifbp, HCMD_ACCESS + HCMD_ACCESS_WRITE, ltvp->typ ); - } - } - return rc; -} // put_info - - -/************************************************************************************************************ - * - *.SUBMODULE int put_info_mb( IFBP ifbp, CFG_MB_INFO_STRCT FAR * ltvp ) - *.PURPOSE accumulates a ( series of) buffers into a single Info block into the MailBox. - * - *.ARGUMENTS - * ifbp address of the Interface Block - * ltvp address of structure specifying the "type" and the fragments of the information to be synthesized - * as an LTV into the MailBox - * - *.RETURNS - * - *.DESCRIPTION - * If the data does not fit (including no MailBox is available), the IFB_MBTally is incremented and an - * error status is returned. - * HCF_ASSERT does not catch. - * Calling put_info_mb when their is no MailBox available, is considered a design error in the MSF. - * - * Note that there is always at least 1 word of unused space in the mail box. - * As a consequence: - * - no problem in pointer arithmetic (MB_RP == MB_WP means unambiguously mail box is completely empty - * - There is always free space to write an L field with a value of zero after each MB_Info block. This - * allows for an easy scan mechanism in the "get MB_Info block" logic. - * - * - *.DIAGRAM - *1: Calculate L field of the MBIB, i.e. 1 for the T-field + the cumulative length of the fragments. - *2: The free space in the MailBox is calculated (2a: free part from Write Ptr to Read Ptr, 2b: free part - * turns out to wrap around) . If this space suffices to store the number of words reflected by len (T-field - * + Value-field) plus the additional MailBox Info L-field + a trailing 0 to act as the L-field of a trailing - * dummy or empty LTV record, then a MailBox Info block is build in the MailBox consisting of - * - the value len in the first word - * - type in the second word - * - a copy of the contents of the fragments in the second and higher word - * - *4: Since put_info_mb() can more or less directly be called from the MSF level, the I/F must be robust - * against out-of-range variables. As failsafe coding, the MB update is skipped by changing tlen to 0 if - * len == 0; This will indirectly cause an assert as result of the violation of the next if clause. - *6: Check whether the free space in MailBox suffices (this covers the complete absence of the MailBox). - * Note that len is unsigned, so even MSF I/F violation works out O.K. - * The '2' in the expression "len+2" is used because 1 word is needed for L itself and 1 word is needed - * for the zero-sentinel - *8: update MailBox Info length report to MSF with "oldest" MB Info Block size. Be careful here, if you get - * here before the MailBox is registered, you can't read from the buffer addressed by IFB_MBp (it is the - * Null buffer) so don't move this code till the end of this routine but keep it where there is garuanteed - * a buffer. - * - *.NOTICE - * boundary testing depends on the fact that IFB_MBSize is guaranteed to be zero if no MailBox is present, - * and to a lesser degree, that IFB_MBWp = IFB_MBRp = 0 - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ - -HCF_STATIC int -put_info_mb( IFBP ifbp, CFG_MB_INFO_STRCT FAR * ltvp ) -{ - - int rc = HCF_SUCCESS; - hcf_16 i; //work counter - hcf_16 *dp; //destination pointer (in MailBox) - wci_recordp sp; //source pointer - hcf_16 len; //total length to copy to MailBox - hcf_16 tlen; //free length/working length/offset in WMP frame - - if ( ifbp->IFB_MBp == NULL ) return rc; //;?not sufficient - HCFASSERT( ifbp->IFB_MBp != NULL, 0 ); //!!!be careful, don't get into an endless recursion - HCFASSERT( ifbp->IFB_MBSize, 0 ); - - len = 1; /* 1 */ - for ( i = 0; i < ltvp->frag_cnt; i++ ) { - len += ltvp->frag_buf[i].frag_len; - } - if ( ifbp->IFB_MBRp > ifbp->IFB_MBWp ) { - tlen = ifbp->IFB_MBRp - ifbp->IFB_MBWp; /* 2a*/ - } else { - if ( ifbp->IFB_MBRp == ifbp->IFB_MBWp ) { - ifbp->IFB_MBRp = ifbp->IFB_MBWp = 0; // optimize Wrapping - } - tlen = ifbp->IFB_MBSize - ifbp->IFB_MBWp; /* 2b*/ - if ( ( tlen <= len + 2 ) && ( len + 2 < ifbp->IFB_MBRp ) ) { //if trailing space is too small but - // leading space is sufficiently large - ifbp->IFB_MBp[ifbp->IFB_MBWp] = 0xFFFF; //flag dummy LTV to fill the trailing space - ifbp->IFB_MBWp = 0; //reset WritePointer to begin of MailBox - tlen = ifbp->IFB_MBRp; //get new available space size - } - } - dp = &ifbp->IFB_MBp[ifbp->IFB_MBWp]; - if ( len == 0 ) { - tlen = 0; //;? what is this good for - } - if ( len + 2 >= tlen ){ /* 6 */ - //Do Not ASSERT, this is a normal condition - IF_TALLY( ifbp->IFB_HCF_Tallies.NoBufMB++ ); - rc = HCF_ERR_LEN; - } else { - *dp++ = len; //write Len (= size of T+V in words to MB_Info block - *dp++ = ltvp->base_typ; //write Type to MB_Info block - ifbp->IFB_MBWp += len + 1; //update WritePointer of MailBox - for ( i = 0; i < ltvp->frag_cnt; i++ ) { // process each of the fragments - sp = ltvp->frag_buf[i].frag_addr; - len = ltvp->frag_buf[i].frag_len; - while ( len-- ) *dp++ = *sp++; - } - ifbp->IFB_MBp[ifbp->IFB_MBWp] = 0; //to assure get_info for CFG_MB_INFO stops - ifbp->IFB_MBInfoLen = ifbp->IFB_MBp[ifbp->IFB_MBRp]; /* 8 */ - } - return rc; -} // put_info_mb - - -/************************************************************************************************************ - * - *.SUBMODULE int setup_bap( IFBP ifbp, hcf_16 fid, int offset, int type ) - *.PURPOSE set up data access to NIC RAM via BAP_1. - * - *.ARGUMENTS - * ifbp address of I/F Block - * fid FID/RID - * offset !!even!! offset in FID/RID - * type IO_IN, IO_OUT - * - *.RETURNS - * HCF_SUCCESS O.K - * HCF_ERR_NO_NIC card is removed - * HCF_ERR_DEFUNCT_TIME_OUT Fatal malfunction detected - * HCF_ERR_DEFUNCT_..... if and only if IFB_DefunctStat <> 0 - * - *.DESCRIPTION - * - * A non-zero return status indicates: - * - the NIC is considered nonoperational, e.g. due to a time-out of some Hermes activity in the past - * - BAP_1 could not properly be initialized - * - the card is removed before completion of the data transfer - * In all other cases, a zero is returned. - * BAP Initialization failure indicates an H/W error which is very likely to signal complete H/W failure. - * Once a BAP Initialization failure has occurred all subsequent interactions with the Hermes will return a - * "defunct" status till the Hermes is re-initialized by means of an hcf_connect. - * - * A BAP is a set of registers (Offset, Select and Data) offering read/write access to a particular FID or - * RID. This access is based on a auto-increment feature. - * There are two BAPs but these days the HCF uses only BAP_1 and leaves BAP_0 to the PCI Busmastering H/W. - * - * The BAP-mechanism is based on the Busy bit in the Offset register (see the Hermes definition). The waiting - * for Busy must occur between writing the Offset register and accessing the Data register. The - * implementation to wait for the Busy bit drop after each write to the Offset register, implies that the - * requirement that the Busy bit is low before the Select register is written, is automatically met. - * BAP-setup may be time consuming (e.g. 380 usec for large offsets occurs frequently). The wait for Busy bit - * drop is protected by a loop counter, which is initialized with IFB_TickIni, which is calibrated in init. - * - * The NIC I/F is optimized for word transfer and can only handle word transfer at a word boundary in NIC - * RAM. The intended solution for transfer of a single byte has multiple H/W flaws. There have been different - * S/W Workaround strategies. RID access is hcf_16 based by "nature", so no byte access problems. For Tx/Rx - * FID access, the byte logic became obsolete by absorbing it in the double word oriented nature of the MIC - * feature. - * - * - *.DIAGRAM - * - *2: the test on rc checks whether the HCF went into "defunct" mode ( e.g. BAP initialization or a call to - * cmd_wait did ever fail). - *4: the select register and offset register are set - * the offset register is monitored till a successful condition (no busy bit) is detected or till the - * (calibrated) protection counter expires - * If the counter expires, this is reflected in IFB_DefunctStat, so all subsequent calls to setup_bap fail - * immediately ( see 2) - *6: initialization of the carry as used by pet/get_frag - *8: HREG_OFFSET_ERR is ignored as error because: - * a: the Hermes is robust against it - * b: it is not known what causes it (probably a bug), hence no strategy can be specified which level is - * to handle this error in which way. In the past, it could be induced by the MSF level, e.g. by calling - * hcf_rcv_msg while there was no Rx-FID available. Since this is an MSF-error which is caught by ASSERT, - * there is no run-time action required by the HCF. - * Lumping the Offset error in with the Busy bit error, as has been done in the past turns out to be a - * disaster or a life saver, just depending on what the cause of the error is. Since no prediction can be - * done about the future, it is "felt" to be the best strategy to ignore this error. One day the code was - * accompanied by the following comment: - * // ignore HREG_OFFSET_ERR, someone, supposedly the MSF programmer ;) made a bug. Since we don't know - * // what is going on, we might as well go on - under management pressure - by ignoring it - * - *.ENDDOC END DOCUMENTATION - * - ************************************************************************************************************/ -HCF_STATIC int -setup_bap( IFBP ifbp, hcf_16 fid, int offset, int type ) -{ - PROT_CNT_INI; - int rc; - - HCFTRACE( ifbp, HCF_TRACE_STRIO ); - rc = ifbp->IFB_DefunctStat; - if (rc == HCF_SUCCESS) { /*2*/ - OPW( HREG_SELECT_1, fid ); /*4*/ - OPW( HREG_OFFSET_1, offset ); - if ( type == IO_IN ) { - ifbp->IFB_CarryIn = 0; - } - else ifbp->IFB_CarryOut = 0; - HCF_WAIT_WHILE( IPW( HREG_OFFSET_1) & HCMD_BUSY ); - HCFASSERT( !( IPW( HREG_OFFSET_1) & HREG_OFFSET_ERR ), MERGE_2( fid, offset ) ); /*8*/ - if ( prot_cnt == 0 ) { - HCFASSERT( DO_ASSERT, MERGE_2( fid, offset ) ); - rc = ifbp->IFB_DefunctStat = HCF_ERR_DEFUNCT_TIME_OUT; - ifbp->IFB_CardStat |= CARD_STAT_DEFUNCT; - } - } - HCFTRACE( ifbp, HCF_TRACE_STRIO | HCF_TRACE_EXIT ); - return rc; -} // setup_bap - diff --git a/drivers/staging/wlags49_h2/hcf.h b/drivers/staging/wlags49_h2/hcf.h deleted file mode 100644 index 71b44653690c..000000000000 --- a/drivers/staging/wlags49_h2/hcf.h +++ /dev/null @@ -1,394 +0,0 @@ - -#ifndef HCF_H -#define HCF_H 1 - -/************************************************************************************************************ -* -* FILE : hcf.h -* -* DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.7 $ -* Original: 2004/05/19 07:26:01 Revision: 1.56 Tag: hcf7_t20040602_01 -* Original: 2004/05/12 08:47:23 Revision: 1.53 Tag: hcf7_t7_20040513_01 -* Original: 2004/04/15 09:24:42 Revision: 1.46 Tag: hcf7_t7_20040415_01 -* Original: 2004/04/08 15:18:16 Revision: 1.45 Tag: t7_20040413_01 -* Original: 2004/04/01 15:32:55 Revision: 1.43 Tag: t7_20040401_01 -* Original: 2004/03/10 15:39:28 Revision: 1.39 Tag: t20040310_01 -* Original: 2004/03/04 11:03:38 Revision: 1.37 Tag: t20040304_01 -* Original: 2004/03/02 14:51:21 Revision: 1.35 Tag: t20040302_03 -* Original: 2004/02/24 13:00:28 Revision: 1.28 Tag: t20040224_01 -* Original: 2004/02/09 14:50:14 Revision: 1.26 Tag: t20040219_01 -* -* AUTHOR : Nico Valster -* -* SPECIFICATION: .......... -* -* DESC : Definitions and Prototypes for MSF as well as HCF sources -* -* Customizable via HCFCFG.H -* -* -************************************************************************************************************** - -************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 © 1996 - 2000 by Lucent Technologies. All Rights Reserved -* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved -* All rights reserved. -* -* Redistribution and use in source or binary forms, with or without -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -*************************************************************************************************************/ - - -#include "hcfcfg.h" // System Constants to be defined by the MSF-programmer to tailor the HCF -#include "mdd.h" // Include file common for HCF, MSF - - -/************************************************************************************************/ -/************************************** MACROS ************************************************/ -/************************************************************************************************/ - -#define LOF(x) (sizeof(x)/sizeof(hcf_16)-1) - -/* Endianness - * Little Endian (a.k.a. Intel), least significant byte first - * Big Endian (a.k.a. Motorola), most significant byte first - * - * The following macros are supplied - * o CNV_LITTLE_TO_SHORT(w) interprets the 16-bits input value as Little Endian, returns an hcf_16 - * o CNV_BIG_TO_SHORT(w) interprets the 16-bits input value as Big Endian, returns an hcf_16 - * - */ - -/* To increase portability, use unsigned char and unsigned char * when accessing parts of larger - * types to convert their Endianness - */ - -#define CNV_END_SHORT(w) (hcf_16)( ((hcf_16)(w) & 0x00FF) << 8 | ((hcf_16)(w) & 0xFF00) >> 8 ) -#define CNV_END_LONG(dw) (hcf_32)( (dw >> 24) | ((dw >> 8) & 0xff00) | ((dw << 8) & 0xff0000) | (dw << 24) ) - -#if HCF_BIG_ENDIAN -//******************************************** B I G E N D I A N ******************************************* -#define CNV_LITTLE_TO_SHORT(w) CNV_END_SHORT(w) // endianness conversion needed -#define CNV_BIG_TO_SHORT(w) (w) // no endianness conversion needed -#define CNV_LITTLE_TO_LONG(dw) CNV_END_LONG(dw) -#define CNV_LONG_TO_LITTLE(dw) CNV_END_LONG(dw) -#else -//****************************************** L I T T L E E N D I A N **************************************** -#define CNV_LITTLE_TO_SHORT(w) (w) // no endianness conversion needed -#define CNV_BIG_TO_SHORT(w) CNV_END_SHORT(w) // endianness conversion needed -#define CNV_LITTLE_TO_LONG(dw) (dw) -#define CNV_LONG_TO_LITTLE(dw) (dw) - -#if defined HCF_ALIGN && HCF_ALIGN > 1 -#define CNV_SHORTP_TO_LITTLE(pw) ((hcf_16)(*(hcf_8 *)pw)) | ((hcf_16)(*((hcf_8 *)pw+1)) << 8) -#define CNV_LONGP_TO_LITTLE(pdw) ((hcf_32)(*(hcf_8 *)pdw)) | ((hcf_32)(*((hcf_8 *)pdw+1)) << 8) | \ - ((hcf_32)(*((hcf_8 *)pdw+2)) << 16) | ((hcf_32)(*((hcf_8 *)pdw+3)) << 24) -#else -#define CNV_LONGP_TO_LITTLE(pdw) (*(hcf_32 *)pdw) -#define CNV_SHORTP_TO_LITTLE(pw) (*(hcf_16 *)pw) -#endif - -#endif // HCF_BIG_ENDIAN - -// conversion macros which can be expressed in other macros -#define CNV_SHORT_TO_LITTLE(w) CNV_LITTLE_TO_SHORT(w) -#define CNV_SHORT_TO_BIG(w) CNV_BIG_TO_SHORT(w) - -/************************************************************************************************/ -/************************************** END OF MACROS *****************************************/ -/************************************************************************************************/ - -/***********************************************************************************************************/ -/***************** ****************************************/ -/***********************************************************************************************************/ - -// offsets Transmit/Receive Frame Structure -#define HFS_STAT 0x0000 -#define HFS_SWSUP 0x0006 //SW Support -#define HFS_Q_INFO 0x0006 //Signal/Silence level -#define HFS_RATE 0x0008 //RxFlow/Rate -#define HFS_STAT_ERR RX_STAT_ERR //link "natural" HCF name to "natural" MSF name -#define HFS_TX_CNTL 0x0036 - // H-I H-II -#define HFS_DAT_LEN (HFS_ADDR_DEST - 2) // 0x002C 0x0038 -#define HFS_ADDR_DEST 0x003A // 0x002E 0x003A -#define HFS_ADDR_SRC (HFS_ADDR_DEST + 6) // 0x0034 0x0040 -#define HFS_LEN (HFS_ADDR_SRC + 6) // 0x003A 0x0046 -#define HFS_DAT (HFS_LEN + 2) // 0x003C 0x0048 -#define HFS_TYPE (HFS_DAT + 6) // 0x0042 0x004E - - -//============================= D E S C R I P T O R S T R U C T U R E ============================== -//;?MDD.H stuff ;? - -#if HCF_BIG_ENDIAN -#define DESC_STRCT_CNT 0 -#define DESC_STRCT_SIZE 1 -#else -#define DESC_STRCT_CNT 1 -#define DESC_STRCT_SIZE 0 -#endif // HCF_BIG_ENDIAN - -#define BUF_CNT buf_dim[DESC_STRCT_CNT] -#define BUF_SIZE buf_dim[DESC_STRCT_SIZE] - -typedef struct DESC_STRCT { - hcf_16 buf_dim[2]; - hcf_32 buf_phys_addr; - hcf_32 next_desc_phys_addr; // physical address of next descriptor - hcf_32 desc_phys_addr; // physical address of this descriptor - struct DESC_STRCT *next_desc_addr; - hcf_8 FAR *buf_addr; -#if (HCF_EXT) & HCF_EXT_DESC_STRCT - void FAR *DESC_MSFSup; // pointer for arbitrary use by the MSF -#endif // HCF_DESC_STRCT_EXT -} DESC_STRCT; - -#define HCF_DASA_SIZE 12 //size in bytes for DA/SA - -#define DESC_CNT_MASK 0x0FFF - -#define GET_BUF_SIZE(descp) ((descp)->BUF_SIZE) -#define GET_BUF_CNT(descp) ((descp)->BUF_CNT) -#define SET_BUF_SIZE(descp, size) (descp)->BUF_SIZE = size; -#define SET_BUF_CNT(descp, count) (descp)->BUF_CNT = count; - -//========================================= T A L L I E S =================================================== - -typedef struct { //Hermes Tallies (IFB substructure) - hcf_32 TxUnicastFrames; - hcf_32 TxMulticastFrames; - hcf_32 TxFragments; - hcf_32 TxUnicastOctets; - hcf_32 TxMulticastOctets; - hcf_32 TxDeferredTransmissions; - hcf_32 TxSingleRetryFrames; - hcf_32 TxMultipleRetryFrames; - hcf_32 TxRetryLimitExceeded; - hcf_32 TxDiscards; - hcf_32 RxUnicastFrames; - hcf_32 RxMulticastFrames; - hcf_32 RxFragments; - hcf_32 RxUnicastOctets; - hcf_32 RxMulticastOctets; - hcf_32 RxFCSErrors; - hcf_32 RxDiscardsNoBuffer; - hcf_32 TxDiscardsWrongSA; - hcf_32 RxWEPUndecryptable; - hcf_32 RxMsgInMsgFragments; - hcf_32 RxMsgInBadMsgFragments; - hcf_32 RxDiscardsWEPICVError; - hcf_32 RxDiscardsWEPExcluded; -#if (HCF_EXT) & HCF_EXT_TALLIES_FW - hcf_32 TalliesExtra[32]; -#endif // HCF_EXT_TALLIES_FW -} CFG_HERMES_TALLIES_STRCT; - -typedef struct { //HCF Tallies (IFB substructure) - hcf_32 NoBufInfo; //No buffer available for unsolicited Notify frame - hcf_32 NoBufMB; //No space available in MailBox - hcf_32 MiscErr; /* Command errors - * - time out on completion synchronous part Hermes Command - * - completed Hermes Command doesn't match original command - * - status of completed Hermes Command contains error bits - */ -#if (HCF_EXT) & HCF_EXT_TALLIES_FW - hcf_32 EngCnt[8]; -#endif // HCF_EXT_TALLIES_FW -} CFG_HCF_TALLIES_STRCT; - -//Note this way to define ..._TAL_CNT implies that all tallies must keep the same (hcf_32) size -#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) -#if (HCF_TALLIES) & HCF_TALLIES_NIC //Hermes tally support -#define HCF_NIC_TAL_CNT (sizeof(CFG_HERMES_TALLIES_STRCT)/ sizeof(hcf_32)) -#else -#define HCF_NIC_TAL_CNT 0 -#endif // HCF_TALLIES -#if (HCF_TALLIES) & HCF_TALLIES_HCF //HCF tally support -#define HCF_HCF_TAL_CNT (sizeof(CFG_HCF_TALLIES_STRCT) / sizeof(hcf_32)) -#else -#define HCF_HCF_TAL_CNT 0 -#endif // HCF_TALLIES -#define HCF_TOT_TAL_CNT ( HCF_NIC_TAL_CNT + HCF_NIC_TAL_CNT ) -#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF - - -/***********************************************************************************************************/ -/********************************** I N T E R F A C E B L O C K ******************************************/ -/***********************************************************************************************************/ - -#define IFB_VERSION 0x0E // initially 0, to be incremented by every IFB layout change - -typedef struct { - hcf_io IFB_IOBase; // I/O address of Hermes chip as passed by MSF at hcf_connect call - hcf_16 IFB_IORange; // I/O Range used by Hermes chip - hcf_16 IFB_DLMode; // Download Mode state - hcf_16 IFB_Cmd; // cmd in progress flag, to be ack-ed before next cmd can be issued - hcf_16 IFB_RxFID; // FID of "current" RxFS (non-DMA mode) -//;?#if tx_delay option - hcf_16 IFB_TxFID; // fid storage during "delayed" send -//;?#endif tx_delay option - hcf_16 IFB_RxLen; // - hcf_16 IFB_DefunctStat; // BAP initialization or Cmd Completion failed - hcf_16 IFB_ErrCmd; // contents Status reg when error bits and/or mismatch in cmd_wait - hcf_16 IFB_ErrQualifier; // contents Resp0 reg when error bits and/or mismatch in cmd_wait - hcf_16 IFB_lal; // LookAhead Length - wci_bufp IFB_lap; // LookAhead Buffer pointer - hcf_16 IFB_LinkStat; // Link Status - hcf_16 IFB_DSLinkStat; // Link Status, new strategy introduced for DeepSleep - hcf_16 IFB_CarryIn; // carry and carry-flag to move 1 byte from one get_frag to the next - hcf_16 IFB_CarryOut; // carry and carry-flag to move 1 byte from one put_frag to the next - hcf_16 IFB_Version; // IFB_VERSION, incremented by every SIGNIFICANT IFB layout change - hcf_16 IFB_CardStat; // NIC error / F/W incompatibility status - hcf_16 IFB_RscInd; // non-DMA: TxFID available, DMA: always 1 - hcf_16 IFB_CntlOpt; // flags: 32 bits I/O, DMA available, DMA enabled - hcf_16 IFB_BusType; // BusType, derived via CFG_NIC_BUS_TYPE - CFG_FW_IDENTITY_STRCT IFB_FWIdentity; /* keep FWIdentity/Sup and PRIIdentity/Sup in sequence - * because of the (dumb) copy in init() */ -#if defined MSF_COMPONENT_ID - CFG_SUP_RANGE_STRCT IFB_FWSup; - CFG_PRI_IDENTITY_STRCT IFB_PRIIdentity; - CFG_SUP_RANGE_STRCT IFB_PRISup; - CFG_SUP_RANGE_STRCT IFB_HSISup; -#endif // MSF_COMPONENT_ID -#if (HCF_EXT) & HCF_EXT_INFO_LOG - RID_LOGP IFB_RIDLogp; // pointer to RID_LOG structure -#endif // HCF_EXT_INFO_LOG -#if HCF_PROT_TIME - hcf_32 IFB_TickIni; // initialization of S/W counter based protection loop -#endif // HCF_PROT_TIME -#if (HCF_EXT) & HCF_EXT_INT_TICK - int IFB_TickCnt; // Hermes Timer Tick Counter -#endif // HCF_EXT_INT_TICK - hcf_16 *IFB_MBp; // pointer to the MailBox - hcf_16 IFB_MBSize; // size of the MailBox - hcf_16 IFB_MBWp; // zero-based write index into the MailBox - hcf_16 IFB_MBRp; // zero-based read index into the MailBox - hcf_16 IFB_MBInfoLen; // contents of L-field of the oldest available MailBoxInfoBlock -#if (HCF_TYPE) & HCF_TYPE_WPA - hcf_16 IFB_MICTxCntl; // MIC bit and Key index in TxControl field of TxFS - hcf_32 IFB_MICTxKey[2]; // calculating key - hcf_32 IFB_MICTx[2]; // Tx MIC calculation Engine state - hcf_16 IFB_MICTxCarry; // temp length, carries over from one Tx fragment to another - hcf_16 IFB_MICRxCarry; // temp length, carries over from one Rx fragment to another - hcf_32 IFB_MICRxKey[4*2]; // 4 checking keys - hcf_32 IFB_MICRx[2]; // Rx MIC calculation Engine state -#endif // HCF_TYPE_WPA -#if HCF_ASSERT -#if (HCF_ASSERT) & HCF_ASSERT_MB - CFG_MB_INFO_RANGE1_STRCT IFB_AssertStrct; // Add some complication to the HCF as prize for the new MSF I/F -#endif // HCF_ASSERT_MB - // target of above IFB_AssertStrct - hcf_16 IFB_AssertLine; // - line number ( + encoded module name ) - hcf_16 IFB_AssertTrace; // - bit based trace of all hcf_.... invocations - hcf_32 IFB_AssertQualifier; // - qualifier - hcf_16 IFB_AssertLvl; // Assert Filtering, Not yet implemented - hcf_16 IFB_AssertWhere; // Where parameter of the Assert macro -#if (HCF_ASSERT) & ( HCF_ASSERT_LNK_MSF_RTN | HCF_ASSERT_RT_MSF_RTN ) - MSF_ASSERT_RTNP IFB_AssertRtn; // MSF Assert Call back routine (inspired by GEF, DrDobbs Nov 1998 ) -#endif // HCF_ASSERT_LNK_MSF_RTN -#if (HCF_ASSERT) & HCF_ASSERT_PRINTF // engineering facilty intended as F/W debugging aid - hcf_16 IFB_DbgPrintF_Cnt; - CFG_FW_PRINTF_BUFFER_LOCATION_STRCT IFB_FwPfBuff; -#endif // HCF_ASSERT_PRINTF -#endif // HCF_ASSERT - hcf_16 volatile IFB_IntOffCnt; // 0xFFFF based HCF_ACT_INT_OFF nesting counter, DeepSleep flag -#if (HCF_TALLIES) & ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) //Hermes and/or HCF tally support - hcf_32 IFB_Silly_you_should_align; //;? - hcf_16 IFB_TallyLen; // Tally length (to build an LTV) - hcf_16 IFB_TallyTyp; // Tally Type (to build an LTV) -#endif // HCF_TALLIES_NIC / HCF_TALLIES_HCF -#if (HCF_TALLIES) & HCF_TALLIES_NIC //Hermes tally support - CFG_HERMES_TALLIES_STRCT IFB_NIC_Tallies; -#endif // HCF_TALLIES_NIC -#if (HCF_TALLIES) & HCF_TALLIES_HCF //HCF tally support - CFG_HCF_TALLIES_STRCT IFB_HCF_Tallies; -#endif // HCF_TALLIES_HCF -#if HCF_DMA - //used for a pool of destination_address descriptor/buffers, used during tx encapsulation points to the - //first/last descriptor in the descriptor chain, so we can easily remove and append a packet. - DESC_STRCT *IFB_FirstDesc[2]; - DESC_STRCT *IFB_LastDesc[2]; - DESC_STRCT *IFB_ConfinedDesc[2]; // pointers to descriptor used for host reclaim purposes. - hcf_16 IFB_DmaPackets; // HREG_EV_[TX/RX]DMA_DONE flags, reports DMA Frame availability to MSF -#endif // HCF_DMA -#if (HCF_EXT) & HCF_EXT_INT_TX_EX - hcf_16 IFB_TxFsStat; // Tx message monitoring - hcf_16 IFB_TxFsGap[2]; //;?make this robust - hcf_16 IFB_TxFsSwSup; -#endif // HCF_EXT_INT_TX_EX - hcf_16 IFB_Magic; /* "Magic" signature, to help the debugger interpret a memory dump - * also the last field cleared at hcf_connect - */ -#if (HCF_EXT) & HCF_EXT_IFB_STRCT // for usage by the MSF - void FAR *IFB_MSFSup; // pointer for arbitrary use by the MSF -#endif // HCF_EXT_IFB_STRCT_EXT -} IFB_STRCT; - -typedef IFB_STRCT* IFBP; - - -/***********************************************************************************************************/ -/********************** W C I F U N C T I O N S P R O T O T Y P E S ******************************/ -/***********************************************************************************************************/ - -EXTERN_C int hcf_action(IFBP ifbp, hcf_16 cmd); -EXTERN_C int hcf_connect(IFBP ifbp, hcf_io io_base); -EXTERN_C int hcf_get_info(IFBP ifbp, LTVP ltvp); -EXTERN_C int hcf_service_nic(IFBP ifbp, wci_bufp bufp, unsigned int len); -EXTERN_C int hcf_cntl(IFBP ifbp, hcf_16 cmd); -EXTERN_C int hcf_put_info(IFBP ifbp, LTVP ltvp); -EXTERN_C int hcf_rcv_msg(IFBP ifbp, DESC_STRCT *descp, unsigned int offset); -EXTERN_C int hcf_send_msg(IFBP ifbp, DESC_STRCT *dp, hcf_16 tx_cntl); -#if HCF_DMA -EXTERN_C void hcf_dma_tx_put(IFBP ifbp, DESC_STRCT *d, hcf_16 tx_cntl); -EXTERN_C DESC_STRCT* hcf_dma_tx_get (IFBP ifbp ); -EXTERN_C DESC_STRCT* hcf_dma_rx_get (IFBP ifbp ); -EXTERN_C void hcf_dma_rx_put(IFBP ifbp, DESC_STRCT *d); -#endif // HCF_DMA -#if (HCF_ASSERT) & HCF_ASSERT_LNK_MSF_RTN -EXTERN_C void msf_assert(unsigned int line_number, hcf_16 trace, hcf_32 qual); -#endif // HCF_ASSERT_LNK_MSF_RTN - -#endif // HCF_H - diff --git a/drivers/staging/wlags49_h2/hcfcfg.h b/drivers/staging/wlags49_h2/hcfcfg.h deleted file mode 100644 index 869b5c343a86..000000000000 --- a/drivers/staging/wlags49_h2/hcfcfg.h +++ /dev/null @@ -1,785 +0,0 @@ - -#ifndef HCFCFG_H -#define HCFCFG_H 1 - -/************************************************************************************************************* -* -* FILE : hcfcfg.tpl // hcfcfg.h -* -* DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.6 $ -* Original: 2004/04/08 15:18:16 Revision: 1.40 Tag: t20040408_01 -* Original: 2004/04/01 15:32:55 Revision: 1.38 Tag: t7_20040401_01 -* Original: 2004/03/10 15:39:28 Revision: 1.34 Tag: t20040310_01 -* Original: 2004/03/03 14:10:12 Revision: 1.32 Tag: t20040304_01 -* Original: 2004/03/02 09:27:12 Revision: 1.30 Tag: t20040302_03 -* Original: 2004/02/24 13:00:28 Revision: 1.25 Tag: t20040224_01 -* Original: 2004/02/18 17:13:57 Revision: 1.23 Tag: t20040219_01 -* -* AUTHOR : Nico Valster -* -* DESC : HCF Customization Macros -* hcfcfg.tpl list all #defines which must be specified to: -* adjust the HCF functions defined in HCF.C to the characteristics of a specific environment -* o maximum sizes for messages -* o Endianness -* Compiler specific macros -* o port I/O macros -* o type definitions -* -* By copying HCFCFG.TPL to HCFCFG.H and -if needed- modifying the #defines the WCI functionality can be -* tailored -* -* Supported environments: -* WVLAN_41 Miniport NDIS 3.1 -* WVLAN_42 Packet Microsoft Visual C 1.5 -* WVLAN_43 16 bits DOS ODI Microsoft Visual C 1.5 -* WVLAN_44 32 bits ODI (__NETWARE_386__) WATCOM -* WVLAN_45 MAC_OS MPW?, Symantec? -* WVLAN_46 Windows CE (_WIN32_WCE) Microsoft ? -* WVLAN_47 LINUX (__LINUX__) GCC, discarded, based on GPL'ed HCF-light -* WVLAN_48 Miniport NDIS 5 -* WVLAN_49 LINUX (__LINUX__) GCC, originally based on pre-compiled HCF_library -* migrated to use the HCF sources when Lucent Technologies -* brought the HCF module under GPL -* WVLAN_51 Miniport USB NDIS 5 -* WVLAN_52 Miniport NDIS 4 -* WVLAN_53 VxWorks END Station driver -* WVLAN_54 VxWorks END Access Point driver -* WVLAN_81 WavePoint BORLAND C -* WCITST Inhouse test tool Microsoft Visual C 1.5 -* WSU WaveLAN Station Update Microsoft Visual C ?? -* SCO UNIX not yet actually used ? ? -* __ppc OEM supplied ? -* _AM29K OEM supplied ? -* ? OEM supplied Microtec Research 80X86 Compiler -* -************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 © 1996 - 2000 by Lucent Technologies. All Rights Reserved -* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved -* All rights reserved. -* -* Redistribution and use in source or binary forms, with or without -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -*************************************************************************************************************/ - -/* Alignment -* Some platforms can access words on odd boundaries (with possibly an performance impact), at other -* platforms such an access may result in a memory access violation. -* It is assumed that everywhere where the HCF casts a char pointer into a word pointer, the alignment -* criteria are met. This put some restrictions on the MSF, which are assumed to be "automatically" fulfilled -* at the applicable platforms -* To assert this assumption, the macro HCF_ALIGN can be defined. The default value is 1, meaning byte -* alignment (or no alignment), a value of 2 means word alignment, a value of 4 means double word alignment -*/ - -/***************************** IN_PORT_STRING_8_16 S a m p l e s ***************************************** - - // C implementation which let the processor handle the word-at-byte-boundary problem -#define IN_PORT_STRING_8_16( port, addr, n) while ( n-- ) \ - { *(hcf_16 FAR*)addr = IN_PORT_WORD( port ); ((hcf_8 FAR*)addr)+=2; } - - // C implementation which handles the word-at-byte-boundary problem -#define IN_PORT_STRING_8_16( port, addr, n) while ( n-- ) \ - { hcf_16 i = IN_PORT_WORD(port); *((hcf_8 FAR*)addr)++ = (hcf_8)i; *((hcf_8 FAR*)addr)++ = (hcf_8)(i>>8);} - - // Assembler implementation -#define IN_PORT_STRING_8_16( port, addr, len) __asm \ -{ \ - __asm push di \ - __asm push es \ - __asm mov cx,len \ - __asm les di,addr \ - __asm mov dx,port \ - __asm rep insw \ - __asm pop es \ - __asm pop di \ -} - - -***************************** OUT_PORT_STRING_8_16 S a m p l e s ****************************************** - - // C implementation which let the processor handle the word-at-byte-boundary problem -#define OUT_PORT_STRING_8_16( port, addr, n) while ( n-- ) \ - { OUT_PORT_WORD( port, *(hcf_16 FAR*)addr ) ; ((hcf_8 FAR*)addr)+=2; } - - // C implementation which handles the word-at-byte-boundary problem -#define OUT_PORT_STRING_8_16( port, addr, n) while ( n-- ) \ - { OUT_PORT_WORD( port, *((hcf_8 FAR*)addr) | *(((hcf_8 FAR*)addr)+1)<<8 ); (hcf_8 FAR*)addr+=2; } - - // Assembler implementation -#define OUT_PORT_STRING_8_16( port, addr, len) __asm \ -{ \ - __asm push si \ - __asm push ds \ - __asm mov cx,len \ - __asm lds si,addr \ - __asm mov dx,port \ - __asm rep outsw \ - __asm pop ds \ - __asm pop si \ -} - -*************************************************************************************************************/ - - -/************************************************************************************************/ -/****************** C O M P I L E R S P E C I F I C M A C R O S ***************************/ -/************************************************************************************************/ -/************************************************************************************************* -* -* !!!!!!!!!!!!!!!!!!!!!!!!! Note to the HCF-implementor !!!!!!!!!!!!!!!!!!!!!!!!! -* !!!! Do not call these macros with parameters which introduce side effects !!!! -* !!!!!!!!!!!!!!!!!!!!!!!!! Note to the HCF-implementor !!!!!!!!!!!!!!!!!!!!!!!!! -* -* -* By selecting the appropriate Macro definitions by means of modifying the "#ifdef 0/1" lines, the HCF can be -* adjusted for the I/O characteristics of a specific compiler -* -* If needed the macros can be modified or replaced with definitions appropriate for your personal platform. -* If you need to make such changes it is appreciated if you inform Agere Systems -* That way the changes can become part of the next release of the WCI -* -* For convenience of the MSF-programmer, all macros are allowed to modify their parameters (although some -* might argue that this would constitute bad coding practice). This has its implications on the HCF, e.g. as a -* consequence these macros should not be called with parameters which have side effects, e.g auto-increment. -* -* in the Microsoft implementation of inline assembly it is O.K. to corrupt all flags except the direction flag -* and to corrupt all registers except the segment registers and EDI, ESI, ESP and EBP (or their 16 bits -* equivalents). Other environments may have other constraints -* -* in the Intel environment it is O.K to have a word (as a 16 bits quantity) at a byte boundary, hence -* IN_/OUT_PORT_STRING_8_16 can move words between PC-memory and NIC-memory with as only constraint that the -* words are on a word boundary in NIC-memory. This does not hold true for all conceivable environments, e.g. -* an Motorola 68xxx does not allow this. Probably/hopefully the boundary conditions imposed by these type of -* platforms prevent this case from materializing. If this is not the case, OUT_PORT_STRING_8_16 must be coded -* by combining two Host memory hcf_8 values at a time to a single hcf_16 value to be passed to the NIC and -* IN_PORT_STRING_8_16 the single hcf_16 retrieved from the NIC must be split in two hcf_8 values to be stored -* in Host memory (see the sample code above) -* -* The prototypes and functional description of the macros are: -* -* hcf_16 IN_PORT_WORD( hcf_16 port ) -* Reads a word (16 bits) from the specified port -* -* void OUT_PORT_WORD( hcf_16 port, hcf_16 value) -* Writes a word (16 bits) to the specified port -* -* hcf_16 IN_PORT_DWORD( hcf_16 port ) -* Reads a dword (32 bits) from the specified port -* -* void OUT_PORT_DWORD( hcf_16 port, hcf_32 value) -* Writes a dword (32 bits) to the specified port -* -* void IN_PORT_STRING_8_16( port, addr, len) -* Reads len number of words (16 bits) from NIC memory via the specified port to the (FAR) -* byte-pointer addr in PC-RAM -* Note that len specifies the number of words, NOT the number of bytes -* !!!NOTE, although len specifies the number of words, addr MUST be a char pointer NOTE!!! -* See also the common notes for IN_PORT_STRING_8_16 and OUT_PORT_STRING_8_16 -* -* void OUT_PORT_STRING_8_16( port, addr, len) -* Writes len number of words (16 bits) from the (FAR) byte-pointer addr in PC-RAM via the specified -* port to NIC memory -* Note that len specifies the number of words, NOT the number of bytes. -* !!!NOTE, although len specifies the number of words, addr MUST be a char pointer NOTE!!! -* -* The peculiar combination of word-length and char pointers for IN_PORT_STRING_8_16 as well as -* OUT_PORT_STRING_8_16 is justified by the assumption that it offers a more optimal algorithm -* -* void IN_PORT_STRING_32( port, addr, len) -* Reads len number of double-words (32 bits) from NIC memory via the specified port to the (FAR) -* double-word address addr in PC-RAM -* -* void OUT_PORT_STRING_32( port, addr, len) -* Writes len number of double-words (32 bits) from the (FAR) double-word address addr in PC-RAM via -* the specified port to NIC memory -* -* !!!!!!!!!!!!!!!!!!!!!!!!! Note to the HCF-implementor !!!!!!!!!!!!!!!!!!!!!!!!! -* !!!! Do not call these macros with parameters which introduce side effects !!!! -* !!!!!!!!!!!!!!!!!!!!!!!!! Note to the HCF-implementor !!!!!!!!!!!!!!!!!!!!!!!!! -* -*************************************************************************************************/ - -/**************************** define INT Types ******************************/ -typedef unsigned char hcf_8; -typedef unsigned short hcf_16; -typedef unsigned long hcf_32; - -/**************************** define I/O Types ******************************/ -#define HCF_IO_MEM 0x0001 // memory mapped I/O ( 0: Port I/O ) -#define HCF_IO_32BITS 0x0002 // 32Bits support ( 0: only 16 Bits I/O) - -/****************************** #define HCF_TYPE ********************************/ -#define HCF_TYPE_NONE 0x0000 // No type -#define HCF_TYPE_WPA 0x0001 // WPA support -#define HCF_TYPE_USB 0x0002 // reserved (USB Dongle driver support) -//#define HCF_TYPE_HII 0x0004 // Hermes-II, to discriminate H-I and H-II CFG_HCF_OPT_STRCT -#define HCF_TYPE_WARP 0x0008 // WARP F/W -#define HCF_TYPE_PRELOADED 0x0040 // pre-loaded F/W -#define HCF_TYPE_HII5 0x0080 // Hermes-2.5 H/W -#define HCF_TYPE_CCX 0x0100 // CKIP -#define HCF_TYPE_BEAGLE_HII5 0x0200 // Beagle Hermes-2.5 H/W -#define HCF_TYPE_TX_DELAY 0x4000 // Delayed transmission ( non-DMA only) - -/****************************** #define HCF_ASSERT ******************************/ -#define HCF_ASSERT_NONE 0x0000 // No assert support -#define HCF_ASSERT_PRINTF 0x0001 // Hermes generated debug info -#define HCF_ASSERT_SW_SUP 0x0002 // logging via Hermes support register -#define HCF_ASSERT_MB 0x0004 // logging via Mailbox -#define HCF_ASSERT_RT_MSF_RTN 0x4000 // dynamically binding of msf_assert routine -#define HCF_ASSERT_LNK_MSF_RTN 0x8000 // statically binding of msf_assert routine - -/****************************** #define HCF_ENCAP *******************************/ -#define HCF_ENC_NONE 0x0000 // No encapsulation support -#define HCF_ENC 0x0001 // HCF handles En-/Decapsulation -#define HCF_ENC_SUP 0x0002 // HCF supports MSF to handle En-/Decapsulation - -/****************************** #define HCF_EXT *********************************/ -#define HCF_EXT_NONE 0x0000 // No expanded features -#define HCF_EXT_INFO_LOG 0x0001 // logging of Hermes Info frames -//#define HCF_EXT_INT_TX_OK 0x0002 // RESERVED!!! monitoring successful Tx message -#define HCF_EXT_INT_TX_EX 0x0004 // monitoring unsuccessful Tx message -//#define HCF_EXT_MON_MODE 0x0008 // LEGACY -#define HCF_EXT_TALLIES_FW 0x0010 // support for up to 32 Hermes Engineering tallies -#define HCF_EXT_TALLIES_HCF 0x0020 // support for up to 8 HCF Engineering tallies -#define HCF_EXT_NIC_ACCESS 0x0040 // direct access via Aux-ports and to Hermes registers and commands -#define HCF_EXT_MB 0x0080 // MailBox code expanded -#define HCF_EXT_IFB_STRCT 0x0100 // MSF custom pointer in IFB -#define HCF_EXT_DESC_STRCT 0x0200 // MSF custom pointer in Descriptor -#define HCF_EXT_TX_CONT 0x4000 // Continuous transmit test -#define HCF_EXT_INT_TICK 0x8000 // enables TimerTick interrupt generation - -/****************************** #define HCF_SLEEP *******************************/ -#define HCF_DDS 0x0001 // Disconnected Deep Sleep -#define HCF_CDS 0x0002 // Connected Deep Sleep - -/****************************** #define HCF_TALLIES ******************************/ -#define HCF_TALLIES_NONE 0x0000 // No tally support -#define HCF_TALLIES_NIC 0x0001 // Hermes Tallies accumulated in IFB -#define HCF_TALLIES_HCF 0x0002 // HCF Tallies accumulated in IFB -#define HCF_TALLIES_RESET 0x8000 // Tallies in IFB are reset when reported via hcf_get_info - -/************************************************************************************************/ -/****************************************** L I N U X *****************************************/ -/************************************************************************************************/ - -#ifdef WVLAN_49 -#include -//#include -#include - -/* The following macro ensures that no symbols are exported, minimizing the chance of a symbol - collision in the kernel */ -//EXPORT_NO_SYMBOLS; //;?this place seems not appropriately to me - -//#define HCF_SLEEP (HCF_CDS | HCF_DDS ) -#define HCF_SLEEP (HCF_CDS) - -/* Note: Non-WARP firmware all support WPA. However the original Agere - * linux driver does not enable WPA. Enabling WPA here causes whatever - * preliminary WPA logic to be included, some of which may be specific - * to HERMESI. - * - * Various comment are clear that WARP and WPA are not compatible - * (which may just mean WARP does WPA in a different fashion). - */ - -/* #define HCF_TYPE (HCF_TYPE_HII5|HCF_TYPE_STA|HCF_TYPE_AP) */ -#ifdef HERMES25 -#ifdef WARP -#define HCF_TYPE ( HCF_TYPE_WARP | HCF_TYPE_HII5 ) -#else -#define HCF_TYPE (HCF_TYPE_HII5 | HCF_TYPE_WPA) -#endif /* WARP */ -#else -#define HCF_TYPE HCF_TYPE_WPA -#endif /* HERMES25 */ - -#ifdef ENABLE_DMA -#define HCF_DMA 1 -#endif // ENABLE_DMA - -/* We now need a switch to include support for the Mailbox and other necessary extensions */ -#define HCF_EXT ( HCF_EXT_MB | HCF_EXT_INFO_LOG | HCF_EXT_INT_TICK )//get deepsleep exercise going - -/* ;? The Linux MSF still uses these definitions; define it here until it's removed */ -#ifndef HCF_TYPE_HII -#define HCF_TYPE_HII 0x0004 -#endif - -#ifndef HCF_TYPE_AP -#define HCF_TYPE_AP 0x0010 -#endif - -#ifndef HCF_TYPE_STA -#define HCF_TYPE_STA 0x0020 -#endif // HCF_TYPE_STA - -/* Guarantees word alignment */ -#define HCF_ALIGN 2 - -/* Endian macros CNV_INT_TO_LITTLE() and CNV_LITTLE_TO_INT() were renamed to - CNV_SHORT_TO_LITTLE() and CNV_LITTLE_TO_SHORT() */ -#ifndef CNV_INT_TO_LITTLE -#define CNV_INT_TO_LITTLE CNV_SHORT_TO_LITTLE -#endif - -#ifndef CNV_LITTLE_TO_INT -#define CNV_LITTLE_TO_INT CNV_LITTLE_TO_SHORT -#endif - -#define HCF_ERR_BUSY 0x06 - -/* UIL defines were removed from the HCF */ -#define UIL_SUCCESS HCF_SUCCESS -#define UIL_ERR_TIME_OUT HCF_ERR_TIME_OUT -#define UIL_ERR_NO_NIC HCF_ERR_NO_NIC -#define UIL_ERR_LEN HCF_ERR_LEN -#define UIL_ERR_MIN HCF_ERR_MAX /*end of HCF errors which are passed through to UIL - *** ** *** ****** ***** *** ****** ******* ** *** */ -#define UIL_ERR_IN_USE 0x44 -#define UIL_ERR_WRONG_IFB 0x46 -#define UIL_ERR_MAX 0x7F /*upper boundary of UIL errors without HCF-pendant - ***** ******** ** *** ****** ******* *** ******* */ -#define UIL_ERR_BUSY HCF_ERR_BUSY -#define UIL_ERR_DIAG_1 HCF_ERR_DIAG_1 -#define UIL_FAILURE 0xFF /* 20010705 nv this relick should be eridicated */ -#define UIL_ERR_PIF_CONFLICT 0x40 //obsolete -#define UIL_ERR_INCOMP_DRV 0x41 //obsolete -#define UIL_ERR_DOS_CALL 0x43 //obsolete -#define UIL_ERR_NO_DRV 0x42 //obsolete -#define UIL_ERR_NSTL 0x45 //obsolete - - - -#if 0 //;? #ifdef get this going LATER HERMES25 -#define HCF_IO HCF_IO_32BITS -#define HCF_DMA 1 -#define HCF_DESC_STRCT_EXT 4 - -/* Switch for BusMaster DMA support. Note that the above define includes the DMA-specific HCF - code in the build. This define sets the MSF to use DMA; if ENABLE_DMA is not defined, then - port I/O will be used in the build */ -#ifndef BUS_PCMCIA -#define ENABLE_DMA -#endif // USE_PCMCIA - -#endif // HERMES25 - - -/* Overrule standard WaveLAN Packet Size when in DMA mode */ -#ifdef ENABLE_DMA -#define HCF_MAX_PACKET_SIZE 2304 -#else -#define HCF_MAX_PACKET_SIZE 1514 -#endif // ENABLE_DMA - -/* The following sets the component ID, as well as the versioning. See also wl_version.h */ -#define MSF_COMPONENT_ID COMP_ID_LINUX - -#define MSF_COMPONENT_VAR DRV_VARIANT -#define MSF_COMPONENT_MAJOR_VER DRV_MAJOR_VERSION -#define MSF_COMPONENT_MINOR_VER DRV_MINOR_VERSION - -/* Define the following to turn on assertions in the HCF */ -//#define HCF_ASSERT 0x8000 -#define HCF_ASSERT HCF_ASSERT_LNK_MSF_RTN // statically binding of msf_assert routine - -#ifdef USE_BIG_ENDIAN -#define HCF_BIG_ENDIAN 1 -#else -#define HCF_BIG_ENDIAN 0 -#endif /* USE_BIG_ENDIAN */ - -/* Define the following if your system uses memory-mapped IO */ -//#define HCF_MEM_IO - -/* The following defines the standard macros required by the HCF to move data to/from the card */ -#define IN_PORT_BYTE(port) ((hcf_8)inb( (hcf_io)(port) )) -#define IN_PORT_WORD(port) ((hcf_16)inw( (hcf_io)(port) )) -#define OUT_PORT_BYTE(port, value) (outb( (hcf_8) (value), (hcf_io)(port) )) -#define OUT_PORT_WORD(port, value) (outw((hcf_16) (value), (hcf_io)(port) )) - -#define IN_PORT_STRING_16(port, dst, n) insw((hcf_io)(port), dst, n) -#define OUT_PORT_STRING_16(port, src, n) outsw((hcf_io)(port), src, n) -//#define IN_PORT_STRINGL(port, dst, n) insl((port), (dst), (n)) -//#define OUT_PORT_STRINGL(port, src, n) outsl((port), (src), (n)) -#define IN_PORT_STRING_32(port, dst, n) insl((port), (dst), (n)) -#define OUT_PORT_STRING_32(port, src, n) outsl((port), (src), (n)) -#define IN_PORT_HCF32(port) inl( (hcf_io)(port) ) -#define OUT_PORT_HCF32(port, value) outl((hcf_32)(value), (hcf_io)(port) ) - -#define IN_PORT_DWORD(port) IN_PORT_HCF32(port) -#define OUT_PORT_DWORD(port, value) OUT_PORT_HCF32(port, value) - -#define IN_PORT_STRING_8_16(port, addr, len) IN_PORT_STRING_16(port, addr, len) -#define OUT_PORT_STRING_8_16(port, addr, len) OUT_PORT_STRING_16(port, addr, len) - -#ifndef CFG_SCAN_CHANNELS_2GHZ -#define CFG_SCAN_CHANNELS_2GHZ 0xFCC2 -#endif /* CFG_SCAN_CHANNELS_2GHZ */ - -#define HCF_MAX_MSG 1600 //get going ;? -#endif // WVLAN_49 - -/************************************************************************************************************/ -/*********************************** **************************************/ -/************************************************************************************************************/ -#if ! defined HCF_ALIGN -#define HCF_ALIGN 1 //default to no alignment -#endif // HCF_ALIGN - -#if ! defined HCF_ASSERT -#define HCF_ASSERT 0 -#endif // HCF_ASSERT - -#if ! defined HCF_BIG_ENDIAN -#define HCF_BIG_ENDIAN 0 -#endif // HCF_BIG_ENDIAN - -#if ! defined HCF_DMA -#define HCF_DMA 0 -#endif // HCF_DMA - -#if ! defined HCF_ENCAP -#define HCF_ENCAP HCF_ENC -#endif // HCF_ENCAP - -#if ! defined HCF_EXT -#define HCF_EXT 0 -#endif // HCF_EXT - -#if ! defined HCF_INT_ON -#define HCF_INT_ON 1 -#endif // HCF_INT_ON - -#if ! defined HCF_IO -#define HCF_IO 0 //default 16 bits support only, port I/O -#endif // HCF_IO - -#if ! defined HCF_LEGACY -#define HCF_LEGACY 0 -#endif // HCF_LEGACY - -#if ! defined HCF_MAX_LTV -#define HCF_MAX_LTV 1200 // sufficient for all known purposes -#endif // HCF_MAX_LTV - -#if ! defined HCF_PROT_TIME -#define HCF_PROT_TIME 100 // number of 10K microsec protection timer against H/W malfunction -#endif // HCF_PROT_TIME - -#if ! defined HCF_SLEEP -#define HCF_SLEEP 0 -#endif // HCF_SLEEP - -#if ! defined HCF_TALLIES -#define HCF_TALLIES ( HCF_TALLIES_NIC | HCF_TALLIES_HCF ) -#endif // HCF_TALLIES - -#if ! defined HCF_TYPE -#define HCF_TYPE 0 -#endif // HCF_TYPE - -#if HCF_BIG_ENDIAN -#undef HCF_BIG_ENDIAN -#define HCF_BIG_ENDIAN 1 //just for convenience of generating cfg_hcf_opt -#endif // HCF_BIG_ENDIAN - -#if HCF_DMA -#undef HCF_DMA -#define HCF_DMA 1 //just for convenience of generating cfg_hcf_opt -#endif // HCF_DMA - -#if HCF_INT_ON -#undef HCF_INT_ON -#define HCF_INT_ON 1 //just for convenience of generating cfg_hcf_opt -#endif // HCF_INT_ON - - -#if ! defined IN_PORT_STRING_8_16 -#define IN_PORT_STRING_8_16(port, addr, len) IN_PORT_STRING_16(port, addr, len) -#define OUT_PORT_STRING_8_16(port, addr, len) OUT_PORT_STRING_16(port, addr, len) -#endif // IN_PORT_STRING_8_16 - -/************************************************************************************************/ -/********** *************/ -/************************************************************************************************/ - -#if ! defined FAR -#define FAR // default to flat 32-bits code -#endif // FAR - -typedef hcf_8 FAR *wci_bufp; // segmented 16-bits or flat 32-bits pointer to 8 bits unit -typedef hcf_16 FAR *wci_recordp; // segmented 16-bits or flat 32-bits pointer to 16 bits unit - -/* I/O Address size -* Platforms which use port mapped I/O will (in general) have a 64k I/O space, conveniently expressed in a -* 16-bits quantity -* Platforms which use memory mapped I/O will (in general) have an I/O space much larger than 64k, and need a -* 32-bits quantity to express the I/O base -*/ - -#if HCF_IO & HCF_IO_MEM -typedef hcf_32 hcf_io; -#else -typedef hcf_16 hcf_io; -#endif //HCF_IO - -#if HCF_PROT_TIME > 128 -#define HCF_PROT_TIME_SHFT 3 -#define HCF_PROT_TIME_DIV 8 -#elif HCF_PROT_TIME > 64 -#define HCF_PROT_TIME_SHFT 2 -#define HCF_PROT_TIME_DIV 4 -#elif HCF_PROT_TIME > 32 -#define HCF_PROT_TIME_SHFT 1 -#define HCF_PROT_TIME_DIV 2 -#else //HCF_PROT_TIME >= 19 -#define HCF_PROT_TIME_SHFT 0 -#define HCF_PROT_TIME_DIV 1 -#endif - -#define HCF_PROT_TIME_CNT (HCF_PROT_TIME / HCF_PROT_TIME_DIV) - - -/************************************************************************************************************/ -/******************************************* . . . . . . . . . *********************************************/ -/************************************************************************************************************/ - -/* MSF_COMPONENT_ID is used to define the CFG_IDENTITY_STRCT in HCF.C -* CFG_IDENTITY_STRCT is defined in HCF.C purely based on convenience arguments. -* The HCF can not have the knowledge to determine the ComponentId field of the Identity record (aka as -* Version Record), therefore the MSF part of the Drivers must supply this value via the System Constant -* MSF_COMPONENT_ID. -* There is a set of values predefined in MDD.H (format COMP_ID_.....) -* -* Note that taking MSF_COMPONENT_ID as a default value for DUI_COMPAT_VAR is purely an implementation -* convenience, the numerical values of these two quantities have none functional relationship whatsoever. -*/ - -#if defined MSF_COMPONENT_ID - -#if ! defined DUI_COMPAT_VAR -#define DUI_COMPAT_VAR MSF_COMPONENT_ID -#endif // DUI_COMPAT_VAR - -#if ! defined DUI_COMPAT_BOT //;?this way utilities can lower as well raise the bottom -#define DUI_COMPAT_BOT 8 -#endif // DUI_COMPAT_BOT - -#if ! defined DUI_COMPAT_TOP //;?this way utilities can lower as well raise the top -#define DUI_COMPAT_TOP 8 -#endif // DUI_COMPAT_TOP - -#endif // MSF_COMPONENT_ID - -#if (HCF_TYPE) & HCF_TYPE_HII5 - -#if ! defined HCF_HSI_VAR_5 -#define HCF_HSI_VAR_5 -#endif // HCF_HSI_VAR_5 - -#if ! defined HCF_APF_VAR_4 -#define HCF_APF_VAR_4 -#endif // HCF_APF_VAR_4 - -#if (HCF_TYPE) & HCF_TYPE_WARP -#if ! defined HCF_STA_VAR_4 -#define HCF_STA_VAR_4 -#endif // HCF_STA_VAR_4 -#else -#if ! defined HCF_STA_VAR_2 -#define HCF_STA_VAR_2 -#endif // HCF_STA_VAR_2 -#endif - -#if defined HCF_HSI_VAR_4 -err: HSI variants 4 correspond with HII; -#endif // HCF_HSI_VAR_4 - -#else - -#if ! defined HCF_HSI_VAR_4 -#define HCF_HSI_VAR_4 //Hermes-II all types (for the time being!) -#endif // HCF_HSI_VAR_4 - -#if ! defined HCF_APF_VAR_2 -#define HCF_APF_VAR_2 -#endif // HCF_APF_VAR_2 - -#if ! defined HCF_STA_VAR_2 -#define HCF_STA_VAR_2 -#endif // HCF_STA_VAR_2 - -#endif // HCF_TYPE_HII5 - -#if ! defined HCF_PRI_VAR_3 -#define HCF_PRI_VAR_3 -#endif // HCF_PRI_VAR_3 - -#if defined HCF_HSI_VAR_1 || defined HCF_HSI_VAR_2 || defined HCF_HSI_VAR_3 -err: HSI variants 1, 2 and 3 correspond with H-I only; -#endif // HCF_HSI_VAR_1, HCF_HSI_VAR_2, HCF_HSI_VAR_3 - -#if defined HCF_PRI_VAR_1 || defined HCF_PRI_VAR_2 -err: primary variants 1 and 2 correspond with H-I only; -#endif // HCF_PRI_VAR_1 / HCF_PRI_VAR_2 - - -/************************************************************************************************************/ -/******************************************* . . . . . . . . . *********************************************/ -/************************************************************************************************************/ - - -/* The BASED customization macro is used to resolves the SS!=DS conflict for the Interrupt Service logic in - * DOS Drivers. Due to the cumbersomeness of mixing C and assembler local BASED variables still end up in the - * wrong segment. The workaround is that the HCF uses only global BASED variables or IFB-based variables. - * The "BASED" construction (supposedly) only amounts to something in the small memory model. - * - * Note that the whole BASED rigmarole is needlessly complicated because both the Microsoft Compiler and - * Linker are unnecessary restrictive in what far pointer manipulation they allow - */ - -#if ! defined BASED -#define BASED -#endif // BASED - -#if ! defined EXTERN_C -#ifdef __cplusplus -#define EXTERN_C extern "C" -#else -#define EXTERN_C -#endif // __cplusplus -#endif // EXTERN_C - -#if ! defined NULL -#define NULL ((void *) 0) -#endif // NULL - -#if ! defined TEXT -#define TEXT(x) x -#endif // TEXT - -/************************************************************************************************************/ -/*********************** C O N F L I C T D E T E C T I O N & R E S O L U T I O N ************************/ -/************************************************************************************************************/ -#if HCF_ALIGN != 1 && HCF_ALIGN != 2 && HCF_ALIGN != 4 && HCF_ALIGN != 8 -err: invalid value for HCF_ALIGN; -#endif // HCF_ALIGN - -#if (HCF_ASSERT) & ~( HCF_ASSERT_PRINTF | HCF_ASSERT_SW_SUP | HCF_ASSERT_MB | HCF_ASSERT_RT_MSF_RTN | \ - HCF_ASSERT_LNK_MSF_RTN ) -err: invalid value for HCF_ASSERT; -#endif // HCF_ASSERT - -#if (HCF_ASSERT) & HCF_ASSERT_MB && ! ( (HCF_EXT) & HCF_EXT_MB ) //detect potential conflict -err: these macros are not used consistently; -#endif // HCF_ASSERT_MB / HCF_EXT_MB - -#if HCF_BIG_ENDIAN != 0 && HCF_BIG_ENDIAN != 1 -err: invalid value for HCF_BIG_ENDIAN; -#endif // HCF_BIG_ENDIAN - -#if HCF_DMA != 0 && HCF_DMA != 1 -err: invalid value for HCF_DMA; -#endif // HCF_DMA - -#if (HCF_ENCAP) & ~( HCF_ENC | HCF_ENC_SUP ) -err: invalid value for HCF_ENCAP; -#endif // HCF_ENCAP - -#if (HCF_EXT) & ~( HCF_EXT_INFO_LOG | HCF_EXT_INT_TX_EX | HCF_EXT_TALLIES_FW | HCF_EXT_TALLIES_HCF | \ - HCF_EXT_NIC_ACCESS | HCF_EXT_MB | HCF_EXT_INT_TICK | \ - HCF_EXT_IFB_STRCT | HCF_EXT_DESC_STRCT | HCF_EXT_TX_CONT ) -err: invalid value for HCF_EXT; -#endif // HCF_EXT - -#if HCF_INT_ON != 0 && HCF_INT_ON != 1 -err: invalid value for HCF_INT_ON; -#endif // HCF_INT_ON - -#if (HCF_IO) & ~( HCF_IO_MEM | HCF_IO_32BITS ) -err: invalid value for HCF_IO; -#endif // HCF_IO - -#if HCF_LEGACY != 0 && HCF_LEGACY != 1 -err: invalid value for HCF_LEGACY; -#endif // HCF_LEGACY - -#if HCF_MAX_LTV < 16 || HCF_MAX_LTV > 2304 -err: invalid value for HCF_MAX_LTV; -#endif // HCF_MAX_LTV - -#if HCF_PROT_TIME != 0 && ( HCF_PROT_TIME < 19 || 256 < HCF_PROT_TIME ) -err: below minimum .08 second required by Hermes or possibly above hcf_32 capacity; -#endif // HCF_PROT_TIME - -#if (HCF_SLEEP) & ~( HCF_CDS | HCF_DDS ) -err: invalid value for HCF_SLEEP; -#endif // HCF_SLEEP - -#if (HCF_SLEEP) && ! (HCF_INT_ON) -err: these macros are not used consistently; -#endif // HCF_SLEEP / HCF_INT_ON - -#if (HCF_SLEEP) && ! ( (HCF_EXT) & HCF_EXT_INT_TICK ) -//;? err: these macros are not used consistently; -#endif // HCF_SLEEP / HCF_EXT_INT_TICK - -#if (HCF_TALLIES) & ~( HCF_TALLIES_HCF | HCF_TALLIES_NIC | HCF_TALLIES_RESET ) || \ - (HCF_TALLIES) == HCF_TALLIES_RESET -err: invalid value for HCF_TALLIES; -#endif // HCF_TALLIES - -#if (HCF_TYPE) & ~(HCF_TYPE_WPA | HCF_TYPE_USB | HCF_TYPE_PRELOADED | HCF_TYPE_HII5 | HCF_TYPE_WARP | \ - HCF_TYPE_CCX /* | HCF_TYPE_TX_DELAY */ ) -err: invalid value for HCF_TYPE; -#endif //HCF_TYPE - -#if (HCF_TYPE) & HCF_TYPE_WARP && (HCF_TYPE) & HCF_TYPE_WPA -err: at most 1 of these macros should be defined; -#endif //HCF_TYPE_WARP / HCF_TYPE_WPA - -#endif //HCFCFG_H - diff --git a/drivers/staging/wlags49_h2/hcfdef.h b/drivers/staging/wlags49_h2/hcfdef.h deleted file mode 100644 index 74c0f713c57e..000000000000 --- a/drivers/staging/wlags49_h2/hcfdef.h +++ /dev/null @@ -1,752 +0,0 @@ -#ifndef HCFDEFC_H -#define HCFDEFC_H 1 - -/************************************************************************************************* - * - * FILE : HCFDEF.H - * - * DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.8 $ - * Original: 2004/05/28 14:05:35 Revision: 1.59 Tag: hcf7_t20040602_01 - * Original: 2004/05/13 15:31:45 Revision: 1.53 Tag: hcf7_t7_20040513_01 - * Original: 2004/04/15 09:24:42 Revision: 1.44 Tag: hcf7_t7_20040415_01 - * Original: 2004/04/13 14:22:45 Revision: 1.43 Tag: t7_20040413_01 - * Original: 2004/04/01 15:32:55 Revision: 1.40 Tag: t7_20040401_01 - * Original: 2004/03/10 15:39:28 Revision: 1.36 Tag: t20040310_01 - * Original: 2004/03/03 14:10:12 Revision: 1.34 Tag: t20040304_01 - * Original: 2004/03/02 09:27:12 Revision: 1.32 Tag: t20040302_03 - * Original: 2004/02/24 13:00:29 Revision: 1.29 Tag: t20040224_01 - * Original: 2004/02/18 17:13:57 Revision: 1.26 Tag: t20040219_01 - * - * AUTHOR : Nico Valster - * - * SPECIFICATION: ........... - * - * DESC : Definitions and Prototypes for HCF only - * - ************************************************************************************************** - * - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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 © 1996 - 2000 by Lucent Technologies. All Rights Reserved - * COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * - *************************************************************************************************/ - - -/************************************************************************************************/ -/********************************* P R E F I X E S ********************************************/ -/************************************************************************************************/ -//IFB_ Interface Block -//HCMD_ Hermes Command -//HFS_ Hermes (Transmit/Receive) Frame Structure -//HREG_ Hermes Register - -/*************************************************************************************************/ - -/************************************************************************************************/ -/********************************* GENERAL EQUATES **********************************************/ -/************************************************************************************************/ - - -#define HCF_MAGIC 0x7D37 // "}7" Handle validation - -#define PLUG_DATA_OFFSET 0x00000800 //needed by some test tool on top of H-II NDIS driver - -#define INI_TICK_INI 0x00040000L - -#define IO_IN 0 //hcfio_in_string -#define IO_OUT 1 //hcfio_out_string - -//DO_ASSERT, create an artificial FALSE to force an ASSERT without the nasty compiler warning -#define DO_ASSERT ( assert_ifbp->IFB_Magic != HCF_MAGIC && assert_ifbp->IFB_Magic == HCF_MAGIC ) -#define NT_ASSERT 0x0000 //, NEVER_TESTED -#define NEVER_TESTED MERGE_2( 0xEFFE, 0xFEEF ) -#define SE_ASSERT 0x5EFF /* Side Effect, HCFASSERT invokation which are only called for the - * side effect and which should never trigger */ -#define DHF_FILE_NAME_OFFSET 10000 //to distinguish DHF from HCF asserts by means of line number -#define MMD_FILE_NAME_OFFSET 20000 //to distinguish MMD from HCF asserts by means of line number - -// trace codes used to -// 1: profile execution times via HCF_TRACE and HCF_TRACE_VALUE -// 2: hierarchical flow information via HCFLOGENTRY / HCFLOGEXIT - -//#define HCF_TRACE_CONNECT useless -//#define HCF_TRACE_DISCONNECT useless -#define HCF_TRACE_ACTION 0x0000 // 0x0001 -#define HCF_TRACE_CNTL 0x0001 // 0x0002 -#define HCF_TRACE_DMA_RX_GET 0x0002 // 0x0004 -#define HCF_TRACE_DMA_RX_PUT 0x0003 // 0x0008 -#define HCF_TRACE_DMA_TX_GET 0x0004 // 0x0010 -#define HCF_TRACE_DMA_TX_PUT 0x0005 // 0x0020 -#define HCF_TRACE_GET_INFO 0x0006 // 0x0040 -#define HCF_TRACE_PUT_INFO 0x0007 // 0x0080 -#define HCF_TRACE_RCV_MSG 0x0008 // 0x0100 -#define HCF_TRACE_SEND_MSG 0x0009 // 0x0200 -#define HCF_TRACE_SERVICE_NIC 0x000A // 0x0400 -// #define HCF_TRACE_ 0x000C // 0x1000 -// #define HCF_TRACE_ 0x000D // 0x2000 -// #define HCF_TRACE_ 0x000E // 0x4000 -// #define HCF_TRACE_ 0x000F // 0x8000 -// ============================================ HCF_TRACE_... codes below 0x0010 are asserted on re-entry -#define HCF_TRACE_ACTION_KLUDGE 0x0010 /* once you start introducing kludges there is no end to it - * this is an escape to do not assert on re-entrancy problem caused - * by HCF_ACT_INT_FORCE_ON used to get Microsofts NDIS drivers going - */ -#define HCF_TRACE_STRIO 0x0020 -#define HCF_TRACE_ALLOC 0X0021 -#define HCF_TRACE_DL 0X0023 -#define HCF_TRACE_ISR_INFO 0X0024 -#define HCF_TRACE_CALIBRATE 0x0026 - -#define HCF_TRACE_CMD_CPL 0x0040 -#define HCF_TRACE_CMD_EXE 0x0041 -#define HCF_TRACE_GET_FID 0x0042 -#define HCF_TRACE_GET_FRAG 0x0043 -#define HCF_TRACE_INIT 0x0044 -#define HCF_TRACE_PUT_FRAG 0x0045 -#define HCF_TRACE_SETUP_BAP 0x0046 - -#define HCF_TRACE_EXIT 0x8000 // Keil C warns "long constant truncated to int" - -//#define BAP_0 HREG_DATA_0 //Used by DMA controller to access NIC RAM -#define BAP_1 HREG_DATA_1 //Used by HCF to access NIC RAM - - -//************************* Hermes Receive/Transmit Frame Structures -//HFS_STAT -//see MMD.H for HFS_STAT_ERR -#define HFS_STAT_MSG_TYPE 0xE000 //Hermes reported Message Type -#define HFS_STAT_MIC_KEY_ID 0x1800 //MIC key used (if any) -#define HFS_STAT_1042 0x2000 //RFC1042 Encoded -#define HFS_STAT_TUNNEL 0x4000 //Bridge-Tunnel Encoded -#define HFS_STAT_WMP_MSG 0x6000 //WaveLAN-II Management Protocol Frame -#if (HCF_TYPE) & HCF_TYPE_WPA -#define HFS_STAT_MIC 0x0010 //Frame contains MIC //;? re-instate when F/W ready -#endif - -//************************* Hermes Register Offsets and Command bits -#define HREG_IO_RANGE 0x80 //I/O Range used by Hermes - - -//************************* Command/Status -#define HREG_CMD 0x00 // -#define HCMD_CMD_CODE 0x3F -#define HREG_PARAM_0 0x02 // -#define HREG_PARAM_1 0x04 // -#define HREG_PARAM_2 0x06 // -#define HREG_STAT 0x08 // -#define HREG_STAT_CMD_CODE 0x003F // -#define HREG_STAT_DIAG_ERR 0x0100 -#define HREG_STAT_INQUIRE_ERR 0x0500 -#define HREG_STAT_CMD_RESULT 0x7F00 // -#define HREG_RESP_0 0x0A // -#define HREG_RESP_1 0x0C // -#define HREG_RESP_2 0x0E // - - -//************************* FID Management -#define HREG_INFO_FID 0x10 // -#define HREG_RX_FID 0x20 // -#define HREG_ALLOC_FID 0x22 // -#define HREG_TX_COMPL_FID 0x24 // - - -//************************* BAP -//20031030 HWi Inserted this again because the dongle code uses this (GPIF.C) -//#define HREG_SELECT_0 0x18 // -//#define HREG_OFFSET_0 0x1C // -//#define HREG_DATA_0 0x36 // - -//#define HREG_OFFSET_BUSY 0x8000 // use HCMD_BUSY -#define HREG_OFFSET_ERR 0x4000 // -//rsrvd #define HREG_OFFSET_DATA_OFFSET 0x0FFF // - -#define HREG_SELECT_1 0x1A // -#define HREG_OFFSET_1 0x1E // -#define HREG_DATA_1 0x38 // - - -//************************* Event -#define HREG_EV_STAT 0x30 // -#define HREG_INT_EN 0x32 // -#define HREG_EV_ACK 0x34 // - -#define HREG_EV_TICK 0x8000 //Auxiliary Timer Tick -//#define HREG_EV_RES 0x4000 //H-I only: H/W error (Wait Time-out) -#define HREG_EV_INFO_DROP 0x2000 //WMAC did not have sufficient RAM to build Unsollicited Frame -#if (HCF_TYPE) & HCF_TYPE_HII5 -#define HREG_EV_ACK_REG_READY 0x0000 -#else -#define HREG_EV_ACK_REG_READY 0x1000 //Workaround Kludge bit for H-II (not H-II.5) -#endif // HCF_TYPE_HII5 -#if (HCF_SLEEP) & ( HCF_CDS | HCF_DDS ) -#define HREG_EV_SLEEP_REQ 0x0800 -#else -#define HREG_EV_SLEEP_REQ 0x0000 -#endif // HCF_CDS / HCF_DDS -#if HCF_DMA -//#define HREG_EV_LPESC 0x0400 // firmware sets this bit and clears it, not for host usage. -#define HREG_EV_RDMAD 0x0200 // rx frame in host memory -#define HREG_EV_TDMAD 0x0100 // tx frame in host memory processed -//#define HREG_EV_RXDMA 0x0040 // firmware kicks off DMA engine (bit is not for host usage) -//#define HREG_EV_TXDMA 0x0020 // firmware kicks off DMA engine (bit is not for host usage) -#define HREG_EV_FW_DMA 0x0460 // firmware / DMA engine I/F (bits are not for host usage) -#else -#define HREG_EV_FW_DMA 0x0000 -#endif // HCF_DMA -#define HREG_EV_INFO 0x0080 // Asynchronous Information Frame -#define HREG_EV_CMD 0x0010 // Command completed, Status and Response available -#define HREG_EV_ALLOC 0x0008 // Asynchronous part of Allocation/Reclaim completed -#define HREG_EV_TX_EXC 0x0004 // Asynchronous Transmission unsuccessful completed -#define HREG_EV_TX 0x0002 // Asynchronous Transmission successful completed -#define HREG_EV_RX 0x0001 // Asynchronous Receive Frame - -#define HREG_EV_TX_EXT ( (HCF_EXT) & (HCF_EXT_INT_TX_EX | HCF_EXT_INT_TICK ) ) -/* HREG_EV_TX_EXT := 0x0000 or HREG_EV_TX_EXC and/or HREG_EV_TICK - * could be extended with HREG_EV_TX */ -#if HCF_EXT_INT_TX_EX != HREG_EV_TX_EXC -err: these values should match; -#endif // HCF_EXT_INT_TX_EX / HREG_EV_TX_EXC - -#if HCF_EXT_INT_TICK != HREG_EV_TICK -err: these values should match; -#endif // HCF_EXT_INT_TICK / HREG_EV_TICK - -//************************* Host Software -#define HREG_SW_0 0x28 // -#define HREG_SW_1 0x2A // -#define HREG_SW_2 0x2C // -//rsrvd #define HREG_SW_3 0x2E // -//************************* Control and Auxiliary Port - -#define HREG_IO 0x12 -#define HREG_IO_SRESET 0x0001 -#define HREG_IO_WAKEUP_ASYNC 0x0002 -#define HREG_IO_WOKEN_UP 0x0004 -#define HREG_CNTL 0x14 // -//#define HREG_CNTL_WAKEUP_SYNC 0x0001 -#define HREG_CNTL_AUX_ENA_STAT 0xC000 -#define HREG_CNTL_AUX_DIS_STAT 0x0000 -#define HREG_CNTL_AUX_ENA_CNTL 0x8000 -#define HREG_CNTL_AUX_DIS_CNTL 0x4000 -#define HREG_CNTL_AUX_DSD 0x2000 -#define HREG_CNTL_AUX_ENA (HREG_CNTL_AUX_ENA_CNTL | HREG_CNTL_AUX_DIS_CNTL ) -#define HREG_SPARE 0x16 // -#define HREG_AUX_PAGE 0x3A // -#define HREG_AUX_OFFSET 0x3C // -#define HREG_AUX_DATA 0x3E // - -#if HCF_DMA -//************************* DMA (bus mastering) -// Be careful to use these registers only at a genuine 32 bits NIC -// On 16 bits NICs, these addresses are mapped into the range 0x00 through 0x3F with all consequences -// thereof, e.g. HREG_DMA_CTRL register maps to HREG_CMD. -#define HREG_DMA_CTRL 0x0040 -#define HREG_TXDMA_PTR32 0x0044 -#define HREG_TXDMA_PRIO_PTR32 0x0048 -#define HREG_TXDMA_HIPRIO_PTR32 0x004C -#define HREG_RXDMA_PTR32 0x0050 -#define HREG_CARDDETECT_1 0x007C // contains 7D37 -#define HREG_CARDDETECT_2 0x007E // contains 7DE7 -#define HREG_FREETIMER 0x0058 -#define HREG_DMA_RX_CNT 0x0026 - -/****************************************************************************** - * Defines for the bits in the DmaControl register (@40h) - ******************************************************************************/ -#define HREG_DMA_CTRL_RXHWEN 0x80000000 // high word enable bit -#define HREG_DMA_CTRL_RXRESET 0x40000000 // tx dma init bit -#define HREG_DMA_CTRL_RXBAP1 BIT29 -#define HREG_DMA_CTRL_RX_STALLED BIT28 -#define HREG_DMA_CTRL_RXAUTOACK_DMADONE BIT27 // no host involvement req. for TDMADONE event -#define HREG_DMA_CTRL_RXAUTOACK_INFO BIT26 // no host involvement req. for alloc event -#define HREG_DMA_CTRL_RXAUTOACK_DMAEN 0x02000000 // no host involvement req. for TxDMAen event -#define HREG_DMA_CTRL_RXAUTOACK_RX 0x01000000 // no host involvement req. for tx event -#define HREG_DMA_CTRL_RX_BUSY BIT23 // read only bit -//#define HREG_DMA_CTRL_RX_RBUFCONT_PLAIN 0 // bits 21..20 -//#define HREG_DMA_CTRL_RX_MODE_PLAIN_DMA 0 // mode 0 -#define HREG_DMA_CTRL_RX_MODE_SINGLE_PACKET 0x00010000 // mode 1 -#define HREG_DMA_CTRL_RX_MODE_MULTI_PACKET 0x00020000 // mode 2 -//#define HREG_DMA_CTRL_RX_MODE_DISABLE (0x00020000|0x00010000) // disable tx dma engine -#define HREG_DMA_CTRL_TXHWEN 0x8000 // low word enable bit -#define HREG_DMA_CTRL_TXRESET 0x4000 // rx dma init bit -#define HREG_DMA_CTRL_TXBAP1 BIT13 -#define HREG_DMA_CTRL_TXAUTOACK_DMADONE BIT11 // no host involvement req. for RxDMADONE event -#define HREG_DMA_CTRL_TXAUTOACK_DMAEN 0x00000400 // no host involvement req. for RxDMAen event -#define HREG_DMA_CTRL_TXAUTOACK_DMAALLOC 0x00000200 // no host involvement req. for info event -#define HREG_DMA_CTRL_TXAUTOACK_TX 0x00000100 // no host involvement req. for rx event -#define HREG_DMA_CTRL_TX_BUSY BIT7 // read only bit -//#define HREG_DMA_CTRL_TX_TBUFCONT_PLAIN 0 // bits 6..5 -//#define HREG_DMA_CTRL_TX_MODE_PLAIN_DMA 0 // mode 0 -#define HREG_DMA_CTRL_TX_MODE_SINGLE_PACKET BIT0 // mode 1 -#define HREG_DMA_CTRL_TX_MODE_MULTI_PACKET 0x00000002 // mode 2 -//#define HREG_DMA_CTRL_TX_MODE_DISABLE (0x00000001|0x00000002) // disable tx dma engine - -//configuration DWORD to configure DMA for mode2 operation, using BAP0 as the DMA BAP. -#define DMA_CTRLSTAT_GO (HREG_DMA_CTRL_RXHWEN | HREG_DMA_CTRL_RX_MODE_MULTI_PACKET | \ - HREG_DMA_CTRL_RXAUTOACK_DMAEN | HREG_DMA_CTRL_RXAUTOACK_RX | \ - HREG_DMA_CTRL_TXHWEN | /*;?HREG_DMA_CTRL_TX_TBUFCONT_PLAIN |*/ \ - HREG_DMA_CTRL_TX_MODE_MULTI_PACKET | HREG_DMA_CTRL_TXAUTOACK_DMAEN | \ - HREG_DMA_CTRL_TXAUTOACK_DMAALLOC) - -//configuration DWORD to reset both the Tx and Rx DMA engines -#define DMA_CTRLSTAT_RESET (HREG_DMA_CTRL_RXHWEN | HREG_DMA_CTRL_RXRESET | HREG_DMA_CTRL_TXHWEN | HREG_DMA_CTRL_TXRESET) - -//#define DESC_DMA_OWNED 0x80000000 // BIT31 -#define DESC_DMA_OWNED 0x8000 // BIT31 -#define DESC_SOP 0x8000 // BIT15 -#define DESC_EOP 0x4000 // BIT14 - -#define DMA_RX 0 -#define DMA_TX 1 - -// #define IFB_RxFirstDesc IFB_FirstDesc[DMA_RX] -// #define IFB_TxFirstDesc IFB_FirstDesc[DMA_TX] -// #define IFB_RxLastDesc IFB_LastDesc[DMA_RX] -// #define IFB_TxLastDesc IFB_LastDesc[DMA_TX] - -#endif // HCF_DMA -// -/************************************************************************************************/ -/********************************** EQUATES ***************************************************/ -/************************************************************************************************/ - - -// Hermes Command Codes and Qualifier bits -#define HCMD_BUSY 0x8000 // Busy bit, applicable for all commands -#define HCMD_INI 0x0000 // -#define HCMD_ENABLE HCF_CNTL_ENABLE // 0x0001 -#define HCMD_DISABLE HCF_CNTL_DISABLE // 0x0002 -#define HCMD_CONNECT HCF_CNTL_CONNECT // 0x0003 -#define HCMD_EXECUTE 0x0004 // -#define HCMD_DISCONNECT HCF_CNTL_DISCONNECT // 0x0005 -#define HCMD_SLEEP 0x0006 // -#define HCMD_CONTINUE HCF_CNTL_CONTINUE // 0x0007 -#define HCMD_RETRY 0x0100 // Retry bit -#define HCMD_ALLOC 0x000A // -#define HCMD_TX 0x000B // -#define HCMD_RECL 0x0100 // Reclaim bit, applicable for Tx and Inquire -#define HCMD_INQUIRE 0x0011 // -#define HCMD_ACCESS 0x0021 // -#define HCMD_ACCESS_WRITE 0x0100 // Write bit -#define HCMD_PROGRAM 0x0022 // -#define HCMD_READ_MIF 0x0030 -#define HCMD_WRITE_MIF 0x0031 -#define HCMD_THESEUS 0x0038 -#define HCMD_STARTPREAMBLE 0x0E00 // Start continuous preamble Tx -#define HCMD_STOP 0x0F00 // Stop Theseus test mode - - -//Configuration Management -// - -#define CFG_DRV_ACT_RANGES_PRI_3_BOTTOM 1 // Default Bottom Compatibility for Primary Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_PRI_3_TOP 1 // Default Top Compatibility for Primary Firmware - driver I/F - -#define CFG_DRV_ACT_RANGES_HSI_4_BOTTOM 1 // Default Bottom Compatibility for H/W - driver I/F -#define CFG_DRV_ACT_RANGES_HSI_4_TOP 1 // Default Top Compatibility for H/W - driver I/F - -#define CFG_DRV_ACT_RANGES_HSI_5_BOTTOM 1 // Default Bottom Compatibility for H/W - driver I/F -#define CFG_DRV_ACT_RANGES_HSI_5_TOP 1 // Default Top Compatibility for H/W - driver I/F - -#if (HCF_TYPE) & HCF_TYPE_WPA -#define CFG_DRV_ACT_RANGES_APF_1_BOTTOM 16 // Default Bottom Compatibility for AP Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_APF_1_TOP 16 // Default Top Compatibility for AP Firmware - driver I/F -#else //;? is this REALLY O.K. -#define CFG_DRV_ACT_RANGES_APF_1_BOTTOM 1 // Default Bottom Compatibility for AP Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_APF_1_TOP 1 // Default Top Compatibility for AP Firmware - driver I/F -#endif // HCF_TYPE_WPA - -#define CFG_DRV_ACT_RANGES_APF_2_BOTTOM 2 // Default Bottom Compatibility for AP Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_APF_2_TOP 2 // Default Top Compatibility for AP Firmware - driver I/F - -#define CFG_DRV_ACT_RANGES_APF_3_BOTTOM 1 // Default Bottom Compatibility for AP Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_APF_3_TOP 1 // Default Top Compatibility for AP Firmware - driver I/F - -#define CFG_DRV_ACT_RANGES_APF_4_BOTTOM 1 // Default Bottom Compatibility for AP Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_APF_4_TOP 1 // Default Top Compatibility for AP Firmware - driver I/F - -#if (HCF_TYPE) & HCF_TYPE_HII5 -#define CFG_DRV_ACT_RANGES_STA_2_BOTTOM 6 // Default Bottom Compatibility for Station Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_STA_2_TOP 6 // Default Top Compatibility for Station Firmware - driver I/F -#else // (HCF_TYPE) & HCF_TYPE_HII5 -#define CFG_DRV_ACT_RANGES_STA_2_BOTTOM 1 // Default Bottom Compatibility for Station Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_STA_2_TOP 2 // Default Top Compatibility for Station Firmware - driver I/F -#endif // (HCF_TYPE) & HCF_TYPE_HII5 - -#define CFG_DRV_ACT_RANGES_STA_3_BOTTOM 1 // Default Bottom Compatibility for Station Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_STA_3_TOP 1 // Default Top Compatibility for Station Firmware - driver I/F - -#define CFG_DRV_ACT_RANGES_STA_4_BOTTOM 1 // Default Bottom Compatibility for Station Firmware - driver I/F -#define CFG_DRV_ACT_RANGES_STA_4_TOP 1 // Default Top Compatibility for Station Firmware - driver I/F - -//--------------------------------------------------------------------------------------------------------------------- -#if defined HCF_CFG_PRI_1_TOP || defined HCF_CFG_PRI_1_BOTTOM -err: PRI_1 not supported for H-I; // Compatibility for Primary Firmware - driver I/F -#endif // HCF_CFG_PRI_1_TOP / HCF_CFG_PRI_1_BOTTOM - -#if defined HCF_CFG_PRI_2_TOP || defined HCF_CFG_PRI_2_BOTTOM -err: PRI_2 not supported for H-I; // Compatibility for Primary Firmware - driver I/F -#endif // HCF_CFG_PRI_2_TOP / HCF_CFG_PRI_2_BOTTOM - -#ifdef HCF_CFG_PRI_3_TOP // Top Compatibility for Primary Firmware - driver I/F -#if HCF_CFG_PRI_3_TOP == 0 || \ - CFG_DRV_ACT_RANGES_PRI_3_BOTTOM <= HCF_CFG_PRI_3_TOP && HCF_CFG_PRI_3_TOP <= CFG_DRV_ACT_RANGES_PRI_3_TOP -#undef CFG_DRV_ACT_RANGES_PRI_3_TOP -#define CFG_DRV_ACT_RANGES_PRI_3_TOP HCF_CFG_PRI_3_TOP -#else -err: ; -#endif -#endif // HCF_CFG_PRI_3_TOP - -#ifdef HCF_CFG_PRI_3_BOTTOM // Bottom Compatibility for Primary Firmware - driver I/F -#if CFG_DRV_ACT_RANGES_PRI_3_BOTTOM <= HCF_CFG_PRI_3_BOTTOM && HCF_CFG_PRI_3_BOTTOM <= CFG_DRV_ACT_RANGES_PRI_3_TOP -#undef CFG_DRV_ACT_RANGES_PRI_3_BOTTOM -#define CFG_DRV_ACT_RANGES_PRI_3_BOTTOM HCF_CFG_PRI_3_BOTTOM -#else -err: ; -#endif -#endif // HCF_CFG_PRI_3_BOTTOM - - -//--------------------------------------------------------------------------------------------------------------------- -#if defined HCF_CFG_HSI_0_TOP || defined HCF_CFG_HSI_0_BOTTOM -err: HSI_0 not supported for H-I; // Compatibility for HSI I/F -#endif // HCF_CFG_HSI_0_TOP / HCF_CFG_HSI_0_BOTTOM - -#if defined HCF_CFG_HSI_1_TOP || defined HCF_CFG_HSI_1_BOTTOM -err: HSI_1 not supported for H-I; // Compatibility for HSI I/F -#endif // HCF_CFG_HSI_1_TOP / HCF_CFG_HSI_1_BOTTOM - -#if defined HCF_CFG_HSI_2_TOP || defined HCF_CFG_HSI_2_BOTTOM -err: HSI_2 not supported for H-I; // Compatibility for HSI I/F -#endif // HCF_CFG_HSI_2_TOP / HCF_CFG_HSI_2_BOTTOM - -#if defined HCF_CFG_HSI_3_TOP || defined HCF_CFG_HSI_3_BOTTOM -err: HSI_3 not supported for H-I; // Compatibility for HSI I/F -#endif // HCF_CFG_HSI_3_TOP / HCF_CFG_HSI_3_BOTTOM - -#ifdef HCF_CFG_HSI_4_TOP // Top Compatibility for HSI I/F -#if HCF_CFG_HSI_4_TOP == 0 || \ - CFG_DRV_ACT_RANGES_HSI_4_BOTTOM <= CF_CFG_HSI_4_TOP && HCF_CFG_HSI_4_TOP <= CFG_DRV_ACT_RANGES_HSI_4_TOP -#undef CFG_DRV_ACT_RANGES_HSI_4_TOP -#define CFG_DRV_ACT_RANGES_HSI_4_TOP HCF_CFG_HSI_4_TOP -#else -err: ; -#endif -#endif // HCF_CFG_HSI_4_TOP - -#ifdef HCF_CFG_HSI_4_BOTTOM // Bottom Compatibility for HSI I/F -#if CFG_DRV_ACT_RANGES_HSI_4_BOTTOM <= HCF_CFG_HSI_4_BOTTOM && HCF_CFG_HSI_4_BOTTOM <= CFG_DRV_ACT_RANGES_HSI_4_TOP -#undef CFG_DRV_ACT_RANGES_HSI_4_BOTTOM -#define CFG_DRV_ACT_RANGES_HSI_4_BOTTOM HCF_CFG_HSI_4_BOTTOM -#else -err: ; -#endif -#endif // HCF_CFG_HSI_4_BOTTOM - -#ifdef HCF_CFG_HSI_5_TOP // Top Compatibility for HSI I/F -#if HCF_CFG_HSI_5_TOP == 0 || \ - CFG_DRV_ACT_RANGES_HSI_5_BOTTOM <= CF_CFG_HSI_5_TOP && HCF_CFG_HSI_5_TOP <= CFG_DRV_ACT_RANGES_HSI_5_TOP -#undef CFG_DRV_ACT_RANGES_HSI_5_TOP -#define CFG_DRV_ACT_RANGES_HSI_5_TOP HCF_CFG_HSI_5_TOP -#else -err: ; -#endif -#endif // HCF_CFG_HSI_5_TOP - -#ifdef HCF_CFG_HSI_5_BOTTOM // Bottom Compatibility for HSI I/F -#if CFG_DRV_ACT_RANGES_HSI_5_BOTTOM <= HCF_CFG_HSI_5_BOTTOM && HCF_CFG_HSI_5_BOTTOM <= CFG_DRV_ACT_RANGES_HSI_5_TOP -#undef CFG_DRV_ACT_RANGES_HSI_5_BOTTOM -#define CFG_DRV_ACT_RANGES_HSI_5_BOTTOM HCF_CFG_HSI_5_BOTTOM -#else -err: ; -#endif -#endif // HCF_CFG_HSI_5_BOTTOM -//--------------------------------------------------------------------------------------------------------------------- -#if defined HCF_CFG_APF_1_TOP || defined HCF_CFG_APF_1_BOTTOM -err: APF_1 not supported for H-I; // Compatibility for AP Firmware - driver I/F -#endif // HCF_CFG_APF_1_TOP / HCF_CFG_APF_1_BOTTOM - -#ifdef HCF_CFG_APF_2_TOP // Top Compatibility for AP Firmware - driver I/F -#if HCF_CFG_APF_2_TOP == 0 || \ - CFG_DRV_ACT_RANGES_APF_2_BOTTOM <= HCF_CFG_APF_2_TOP && HCF_CFG_APF_2_TOP <= CFG_DRV_ACT_RANGES_APF_2_TOP -#undef CFG_DRV_ACT_RANGES_APF_2_TOP -#define CFG_DRV_ACT_RANGES_APF_2_TOP HCF_CFG_APF_2_TOP -#else -err: ; -#endif -#endif // HCF_CFG_APF_TOP - -#ifdef HCF_CFG_APF_2_BOTTOM // Bottom Compatibility for AP Firmware - driver I/F -#if CFG_DRV_ACT_RANGES_APF_2_BOTTOM <= HCF_CFG_APF_2_BOTTOM && HCF_CFG_APF_2_BOTTOM <= CFG_DRV_ACT_RANGES_APF_2_TOP -#undef CFG_DRV_ACT_RANGES_APF_2_BOTTOM -#define CFG_DRV_ACT_RANGES_APF_2_BOTTOM HCF_CFG_APF_2_BOTTOM -#else -err: ; -#endif -#endif // HCF_CFG_APF_BOTTOM - -//--------------------------------------------------------------------------------------------------------------------- -#if defined HCF_CFG_STA_1_TOP || defined HCF_CFG_STA_1_BOTTOM -err: STA_1 not supported for H-I; // Compatibility for Station Firmware - driver I/F -#endif // HCF_CFG_STA_1_TOP / HCF_CFG_STA_1_BOTTOM - -#ifdef HCF_CFG_STA_2_TOP // Top Compatibility for Station Firmware - driver I/F -#if HCF_CFG_STA_2_TOP == 0 || \ - CFG_DRV_ACT_RANGES_STA_2_BOTTOM <= HCF_CFG_STA_2_TOP && HCF_CFG_STA_2_TOP <= CFG_DRV_ACT_RANGES_STA_2_TOP -#undef CFG_DRV_ACT_RANGES_STA_2_TOP -#define CFG_DRV_ACT_RANGES_STA_2_TOP HCF_CFG_STA_2_TOP -#else -err: ; -#endif -#endif // HCF_CFG_STA_TOP - -#ifdef HCF_CFG_STA_2_BOTTOM // Bottom Compatibility for Station Firmware - driver I/F -#if CFG_DRV_ACT_RANGES_STA_2_BOTTOM <= HCF_CFG_STA_2_BOTTOM && HCF_CFG_STA_2_BOTTOM <= CFG_DRV_ACT_RANGES_STA_2_TOP -#undef CFG_DRV_ACT_RANGES_STA_2_BOTTOM -#define CFG_DRV_ACT_RANGES_STA_2_BOTTOM HCF_CFG_STA_2_BOTTOM -#else -err: ; -#endif -#endif // HCF_CFG_STA_BOTTOM - - -/************************************************************************************************/ -/************************************** MACROS ************************************************/ -/************************************************************************************************/ - -#ifdef HCF_SLEEP -#define MSF_WAIT(x) do { \ - PROT_CNT_INI; \ - HCF_WAIT_WHILE((IPW(HREG_IO) & HREG_IO_WOKEN_UP) == 0); \ - HCFASSERT( prot_cnt, IPW( HREG_IO ) ); \ - } while (0) -#else -#define MSF_WAIT(x) do { } while (0) -#endif // HCF_SLEEP - -#define LOF(x) (sizeof(x)/sizeof(hcf_16)-1) - -//resolve problems on for some 16 bits compilers to create 32 bit values -#define MERGE_2( hw, lw ) ( ( ((hcf_32)(hw)) << 16 ) | ((hcf_16)(lw)) ) - -#if ! defined HCF_STATIC -#define HCF_STATIC static -#endif // HCF_STATIC - -#if ( (HCF_TYPE) & HCF_TYPE_HII5 ) == 0 -#define DAWA_ACK( mask) do { \ - OPW( HREG_EV_ACK, mask | HREG_EV_ACK_REG_READY ); \ - OPW( HREG_EV_ACK, (mask & ~HREG_EV_ALLOC) | HREG_EV_ACK_REG_READY ); \ - } while (0) -#define DAWA_ZERO_FID(reg) OPW( reg, 0 ) -#else -#define DAWA_ACK( mask) OPW( HREG_EV_ACK, mask ) -#define DAWA_ZERO_FID(reg) do { } while (0) -#endif // HCF_TYPE_HII5 - -#if (HCF_TYPE) & HCF_TYPE_WPA -#define CALC_RX_MIC( p, len ) calc_mic_rx_frag( ifbp, p, len ) -#define CALC_TX_MIC( p, len ) calc_mic_tx_frag( ifbp, p, len ) -#else -#define CALC_RX_MIC( p, len ) -#define CALC_TX_MIC( p, len ) -#define MIC_RX_RTN( mic, dw ) -#define MIC_TX_RTN( mic, dw ) -#endif // HCF_TYPE_WPA - -#if HCF_TALLIES & HCF_TALLIES_HCF //HCF tally support -#define IF_TALLY(x) do { x; } while (0) -#else -#define IF_TALLY(x) do { } while (0) -#endif // HCF_TALLIES_HCF - - -#if HCF_DMA -#define IF_DMA(x) do { x; } while(0) -#define IF_NOT_DMA(x) do { } while(0) -#define IF_USE_DMA(x) if ( ifbp->IFB_CntlOpt & USE_DMA ) { x; } -#define IF_NOT_USE_DMA(x) if ( !(ifbp->IFB_CntlOpt & USE_DMA) ) { x; } -#else -#define IF_DMA(x) do { } while(0) -#define IF_NOT_DMA(x) do { x; } while(0) -#define IF_USE_DMA(x) do { } while(0) -#define IF_NOT_USE_DMA(x) do { x; } while(0) -#endif // HCF_DMA - - -#define IPW(x) ((hcf_16)IN_PORT_WORD( ifbp->IFB_IOBase + (x) ) ) -#define OPW(x, y) OUT_PORT_WORD( ifbp->IFB_IOBase + (x), y ) -/* make sure the implementation of HCF_WAIT_WHILE is such that there may be multiple HCF_WAIT_WHILE calls - * in a row and that when one fails all subsequent fail immediately without reinitialization of prot_cnt - */ -#if HCF_PROT_TIME == 0 -#define PROT_CNT_INI do { } while(0) -#define IF_PROT_TIME(x) do { } while(0) -#if defined HCF_YIELD -#define HCF_WAIT_WHILE( x ) do { } while( (x) && (HCF_YIELD) ) -#else -#define HCF_WAIT_WHILE( x ) do { } while ( x ) -#endif // HCF_YIELD -#else -#define PROT_CNT_INI hcf_32 prot_cnt = ifbp->IFB_TickIni -#define IF_PROT_TIME(x) do { x; } while(0) -#if defined HCF_YIELD -#define HCF_WAIT_WHILE( x ) while ( prot_cnt && (x) && (HCF_YIELD) ) prot_cnt--; -#else -#include -#define HCF_WAIT_WHILE( x ) while ( prot_cnt && (x) ) { udelay(2); prot_cnt--; } -#endif // HCF_YIELD -#endif // HCF_PROT_TIME - -#if defined HCF_EX_INT -//#if HCF_EX_INT & ~( HCF_EX_INT_TX_EX | HCF_EX_INT_TX_OK | HCF_EX_INT_TICK ) -;? out dated checking -err: you used an invalid bitmask; -// #endif // HCF_EX_INT validation -// #else -// #define HCF_EX_INT 0x000 -#endif // HCF_EX_INT - -#if 0 //get compiler going -#if HCF_EX_INT_TICK != HREG_EV_TICK -;? out dated checking -err: someone redefined these macros while the implementation assumes they are equal; -#endif -#if HCF_EX_INT_TX_OK != HFS_TX_CNTL_TX_OK || HFS_TX_CNTL_TX_OK != HREG_EV_TX_OK -;? out dated checking -err: someone redefined these macros while the implementation assumes they are equal; -#endif -#if HCF_EX_INT_TX_EX != HFS_TX_CNTL_TX_EX || HFS_TX_CNTL_TX_EX != HREG_EV_TX_EX -;? out dated checking -err: someone redefined these macros while the implementation assumes they are equal; -#endif -#endif // 0 get compiler going - - -/* The assert in HCFLOGENTRY checks against re-entrancy. Re-entrancy could be caused by MSF logic at - * task-level calling hcf_functions without shielding with HCF_ACT_ON/_OFF. When an interrupt occurs, - * the ISR could (either directly or indirectly) cause re-entering of the interrupted HCF-routine. - * - * The "(ifbp->IFB_AssertWhere = where)" test in HCFLOGENTRY services ALSO as a statement to get around: - * #pragma warning: conditional expression is constant - * on the if-statement - */ -#if HCF_ASSERT -#define HCFASSERT(x,q) do { if (!(x)) {mdd_assert(ifbp, __LINE__, q );} } while(0) -#define MMDASSERT(x,q) {if (!(x)) {mdd_assert( assert_ifbp, __LINE__ + FILE_NAME_OFFSET, q );}} - -#define HCFLOGENTRY( where, what ) do { \ - if ( (ifbp->IFB_AssertWhere = where) <= 15 ) { \ - HCFASSERT( (ifbp->IFB_AssertTrace & 1<<((where)&0xF)) == 0, ifbp->IFB_AssertTrace ); \ - ifbp->IFB_AssertTrace |= 1<<((where)&0xF); \ - } \ - HCFTRACE(ifbp, where ); \ - HCFTRACEVALUE(ifbp, what ); \ - } while (0) - -#define HCFLOGEXIT( where ) do { \ - if ( (ifbp->IFB_AssertWhere = where) <= 15 ) { \ - ifbp->IFB_AssertTrace &= ~(1<<((where)&0xF)); \ - } \ - HCFTRACE(ifbp, (where)|HCF_TRACE_EXIT ); \ - } while (0) - -#else // HCF_ASSERT -#define HCFASSERT( x, q ) do { } while(0) -#define MMDASSERT( x, q ) -#define HCFLOGENTRY( where, what ) do { } while(0) -#define HCFLOGEXIT( where ) do { } while(0) -#endif // HCF_ASSERT - -#if HCF_INT_ON -/* ;? HCFASSERT_INT - * #if (HCF_SLEEP) & HCF_DDS - * #define HCFASSERT_INT HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFF && ifbp->IFB_IntOffCnt != 0xFFFE, \ - * ifbp->IFB_IntOffCnt ) - * #else - */ -#define HCFASSERT_INT HCFASSERT( ifbp->IFB_IntOffCnt != 0xFFFF, ifbp->IFB_IntOffCnt ) -// #endif // HCF_DDS -#else -#define HCFASSERT_INT -#endif // HCF_INT_ON - - -#if defined HCF_TRACE -#define HCFTRACE(ifbp, where ) do {OPW( HREG_SW_1, where );} while(0) -//#define HCFTRACE(ifbp, where ) {HCFASSERT( DO_ASSERT, where );} -#define HCFTRACEVALUE(ifbp, what ) do {OPW( HREG_SW_2, what );} while (0) -//#define HCFTRACEVALUE(ifbp, what ) {HCFASSERT( DO_ASSERT, what );} -#else -#define HCFTRACE(ifbp, where ) do { } while(0) -#define HCFTRACEVALUE(ifbp, what ) do { } while(0) -#endif // HCF_TRACE - - -#if HCF_BIG_ENDIAN -#define BE_PAR(x) ,x -#else -#define BE_PAR(x) -#endif // HCF_BIG_ENDIAN - -/************************************************************************************************/ -/************************************** END OF MACROS *****************************************/ -/************************************************************************************************/ - -/************************************************************************************************/ -/*************************************** PROTOTYPES *******************************************/ -/************************************************************************************************/ - -#if HCF_ASSERT -extern IFBP BASED assert_ifbp; //to make asserts easily work under MMD and DHF -EXTERN_C void mdd_assert (IFBP ifbp, unsigned int line_number, hcf_32 q ); -#endif //HCF_ASSERT - -#if ! ( (HCF_IO) & HCF_IO_32BITS ) // defined 16 bits only -#undef OUT_PORT_STRING_32 -#undef IN_PORT_STRING_32 -#endif // HCF_IO -#endif //HCFDEFC_H - diff --git a/drivers/staging/wlags49_h2/man/wlags49.4 b/drivers/staging/wlags49_h2/man/wlags49.4 deleted file mode 100644 index 37df99879183..000000000000 --- a/drivers/staging/wlags49_h2/man/wlags49.4 +++ /dev/null @@ -1,734 +0,0 @@ -.\" vim:tw=78: -.\" Copyright (c) 1999-2003 Agere Systems Inc. -- http://www.agere.com -.\" wlags49.4 7.20-abg 04/28/2004 13:30:00 -.\" -.TH WLAGS49 4 "04/28/2004 13:30:00" "pcmcia-cs" -.SH NAME -wlags49 \- Agere Systems Wireless PC Card / PCI device drivers - -wlags49_h2_cs.o \- Hermes-II Card Services (PCMCIA/CF) driver -.br -wlags49_h2.o \- Hermes-II MiniPCI driver -.br -wlags49_h25.o \- Hermes-II.5 PCI/CardBus driver -.br -wlags49_h25_cs.o\- Hermes-II.5 Card Services (PCMCIA/CF) driver - -.SH SYNOPSIS -.nh -.fi -.B insmod wlags49_[h1,h2]_[cs].o -.br -.RB [ Authentication=n ] -.RB [ AuthKeyMngmtSuite=???? ] -.RB [ BRSC2GHz=b ]\p -.RB [ BRSC5GHz=b ] -.RB [ Coexistence=n ] -.RB [ Configured=???? ]\p -.RB [ ConnectionControl=???? ] -.RB [ CreateIBSS=s ] -.RB [ DebugFlag=n ]\p -.RB [ DesiredSSID=s ] -.RB [ DownloadFirmware=n ] -.RB [ DriverEnable=???? ]\p -.RB [ EnableEncryption=s ] -.RB [ Encryption=???? ] -.RB [ ExcludeUnencrypted=s ]\p -.RB [ IntraBSSRelay=s ] -.RB [ IrqList=i,j,... ] -.RB [ IrqMask=n ]\p -.RB [ Key1=s ] -.RB [ Key2=s ] -.RB [ Key3=s ] -.RB [ Key4=s ]\p -.RB [ LoadBalancing=s ] -.RB [ MaxSleepDuration=n ] -.RB [ MediumDistribution=s ]\p -.RB [ MicroWaveRobustness=s ] -.RB [ MulticastPMBuffering=s ] -.RB [ MulticastRate=n ]\p -.RB [ MulticastReceive=s ] -.RB [ NetworkAddress=n,n,n,n,n,n ] -.RB [ NetworkType=???? ]\p -.RB [ OwnATIMWindow=n ] -.RB [ OwnBeaconInterval=n ] -.RB [ OwnChannel=n ]\p -.RB [ OwnDTIMPeriod=n ] -.RB [ OwnName=s ] -.RB [ OwnSSID=s ]\p -.RB [ pc_debug=n ] -.RB [ PMEnabled=b ] -.RB [ PMHoldoverDuration=n ]\p -.RB [ PortType=n ] -.RB [ PowerMode=???? ] -.RB [ PromiscuousMode=s ]\p -.RB [ RejectANY=s ] -.RB [ RTSThreshold=n ]\p -.RB [ RTSThreshold1=n ] -.RB [ RTSThreshold2=n ] -.RB [ RTSThreshold3=n ]\p -.RB [ RTSThreshold4=n ] -.RB [ RTSThreshold5=n ] -.RB [ RTSThreshold6=n ]\p -.RB [ SRSC2GHz=b ] -.RB [ SRSC5GHz=b ] -.RB [ SystemScale=n ]\p -.RB [ TxKey=n ] -.RB [ TxRateControl=n ]\p -.RB [ TxRateControl1=n ] -.RB [ TxRateControl2=n ] -.RB [ TxRateControl3=n ]\p -.RB [ TxRateControl4=n ] -.RB [ TxRateControl5=n ] -.RB [ TxRateControl6=n ]\p -.RB [ WDSAddress=n,n,n,n,n,n ]\p -.RB [ WDSAddress1=n,n,n,n,n,n ] -.RB [ WDSAddress2=n,n,n,n,n,n ]\p -.RB [ WDSAddress3=n,n,n,n,n,n ] -.RB [ WDSAddress4=n,n,n,n,n,n ]\p -.RB [ WDSAddress5=n,n,n,n,n,n ] -.RB [ WDSAddress6=n,n,n,n,n,n ]\p -.fi - - - -.SH DESCRIPTION -.I wlags49 -is the low-level Card Services / PCI driver for the -.B Wireless PC Card, Wireless Integrated Card, Wireless Embedded Card -and other wireless adapters based on the Agere Systems Hermes-II, and Hermes-II.5 wireless MAC. When this driver is attached to a card, it -allocates the next available ethernet device (eth0..eth#). This -device name will be passed on to -.IR cardmgr (8), -or the PCI subsystem, for the card configuration, and reported in the kernel log file -with the I/O base address and MAC address used by the card. -.SH FEATURES - \- Hot plug/unplug - \- Access Point and peer-to-peer communication - \- Card power management - \- Support for Hermes-II & Hermes-II.5 based PCMCIA, Mini PCI, and CardBus cards - \- Wired Equivalent Privacy (WEP) - \- WPA-PSK support - \- Driver utility interface (UIL) - \- Wireless Extensions - \- Software AP mode -.SH PARAMETERS -.TP -.B Authentication=n -Algorithm used for Authentication. -.BR - 1 \- Open System -.BR - 2 \- Shared Key -.BR - Default: 1 -.TP -.B Auth_key_mgmt_suite -??????????????? -.TP -.B BRSC2GHz=b -Sets the card\'s Basic Rate Set in the 2.4GHz band. See SRSC2GHz -for the value\'s format. -.BR - Default: 15 (or 0x000F, only 11b rates to accept legacy 11b stations) -.TP -.B BRSC5GHz-b -Sets the card\'s Basic Rate Set in the 5.0GHz band. See SRSC2GHz for the -value\'s format -.BR - Default: 4080 (or 0x0FF0, all 11a rates) -.TP -.B Coexistence=n -Used to make the 802.11a/b/g coexistence behavior more strict. -.BR - Default \- 0 (Use standard behavior) -.TP -.B ConnectionControl=n -Configures the card\'s connection control process in dealing with multiple -bands (802.11b/g vs. 802.11a). -.BR - 0 \- Single Band operation in 2GHz -.BR - 1 \- Single Band operation in 5GHz -.BR - 2 \- Multiple Band operation starting with 2GHz -.BR - 3 \- Multiple Band operation starting with 5GHz -.BR - Default \- 2 -.TP -.B Configured -??????????????? -.TP -.B ConnectionControl -??????????????? -.TP -.B CreateIBSS=s -Enable or disable IBSS Creation. -For correct operation, specification of a OwnSSID is required. -This mode requires firmware 6.04 or higher. -.BR - N \- Disable -.BR - Y \- Enable -.BR - Default: N -.TP -.B DebugFlag=n -Selects the driver debugging level. This parameter is only available -if the module is compiled with debugging enabled. Refer to the -file -.B debug.h -in the source directory for information on the flag values. -.BR - 0x00000001L \- DBG_ERROR_ON -.BR - 0x00000002L \- DBG_WARNING_ON -.BR - 0x00000004L \- DBG_NOTICE_ON -.BR - 0x00000008L \- DBG_TRACE_ON -.BR - 0x00000010L \- DBG_VERBOSE_ON -.BR - 0x00000020L \- DBG_PARAM_ON -.BR - 0x00000040L \- DBG_BREAK_ON -.BR - 0x00000100L \- DBG_RX_ON -.BR - 0x00000200L \- DBG_TX_ON -.BR - 0x00000400L \- DBG_DS_ON -.BR -If the module is compiled with debugging enabled, DebugFlag -defaults to DBG_ERROR_ON, DBG_WARNING_ON and DBG_BREAK_ON. -DebugFlag overrules pc_debug. -.TP -.B DesiredSSID=s -Same as OwnSSID. -.TP -.B DownloadFirmware=n -This release of the driver introduces the ability to perform downloads of the STA/AP -firmware. In fact, this is required for Hermes-II based cards. This parameter tells -the driver which version of the firmware to download to the card. -.BR - 0 \- No download performed (Hermes-I only) -.BR - 1 \- Download STA firmware -.BR - 2 \- Download AP firmware -.BR - Default: 1, when STA mode functionality is - included in the build - 2, when code is built exclusively for - AP mode -.TP -.B DriverEnable -??????????????? -.TP -.B EnableEncryption=n -Set the method of Data encryption. -.BR - 0 \- Disable -.BR - 1 \- Enable WEP Encryption -.BR - 2 \- Enable WPA with TKIP encryption -.BR - Default: 0 -.TP -.B Encryption -??????????????? -.TP -.B ExcludeUnencrypted=s -Controls how the stations must communicate with the AP. -.BR - Y \- Stations must enable encryption and provide - the proper encryption key to communicate - with the AP. -.BR - N \- Stations do not need to enable encryption - to communicate with the AP. -.BR - Default: N -.TP -.B IntraBSSRelay=s -Controls the automatic relay of received messages that are destined for other -stations in the BSS. -.BR - Y \- Messages are relayed to the appropriate - station(s). -.BR - N \- Messages are passed up to the host. -.BR - Default: Y -.TP -.B IrqList=i,j,... -Specifies the set of interrupts (up to 4) that may be allocated by -this driver. This overrides the values set in the -.B IrqMask -parameter. NOTE: This parameter is for PCMCIA only. -.TP -.B IrqMask=n -Specifies a mask of valid interrupts that may be allocated by this driver. -If -.B IrqList -is also specified, the values in -.B IrqList -are used instead. NOTE: This parameter is for PCMCIA only. -.BR - Default: 0xdeb8 (IRQ 3,4,5,7,9,10,11,12,14,15) -.TP -.B Key1=s -Specifies one of 4 possible keys for the Data encryption. -One of these keys, identified by TxKey, -is used for the enciphering of Data that is transmitted by this station. -All keys specified can be used for the deciphering of Data that is received. -.BR -The key value can be an ASCII character string or a hexadecimal value. -The length of the key value can be 5 characters or 10 hexadecimal digits for -the standard encryption (Silver or Gold card), or 13 characters or 26 -hexadecimal digits for the encryption with extended keys (Gold card only). -The keys defined in the station must match the keys defined in the access -points; both on value and number (1 through 4). -.BR -In 2.0 series Linux kernel modules, values that begin with a number are -considered integers. In this case a hexadecimal value string or a character -string starting with a number, will need to be surrounded by escaped -double quotes (ie. Key1=\\"0x1122334455\\" Key2=\\"12xyz\\"). -.BR - 5 or 13, printable character string, or -.BR - 10 or 26 hex digits if preceded by "0x". -.BR - If this parameter is omitted, the default of the MAC is used ( = 0-length). -.TP -.B Key2=s -Same as Key1. -.TP -.B Key3=s -Same as Key1. -.TP -.B Key4=s -Same as Key1. -.TP -.B LoadBalancing=s -Control for the Load Balancing algorithm for both STAs and APs. The AP -includes a load balancing element in the Probe Response and Beacon frames. -The STA uses this info to select an AP, not only based on comms quality, but -also on the load of that AP. -.BR - Default: Y -.TP -.B MaxDataLength -??????????????? -.TP -.B MaxSleepDuration=n -Set the maximum Power Management sleep duration in milliseconds. -Valid values are 0 to 65535 milliseconds. -.BR - Default: 100 -.TP -.B MediumDistribution=s -Control for the distribution of medium parameters, like communication -thresholds, microwave robustness, RTS/CTS thresholds, by APs. The associated -stations replace their own values with the received values. -.BR - Default=Y -.TP -.B MicroWaveRobustness=s -Enable or disable Microwave Oven Robustness. -.BR - N \- Disable -.BR - Y \- Enable -.BR - Default: N -.TP -.B MulticastPMBuffering=s -Controls buffering of multicast MAC frames for transmission after DTIM. If no, -multicast MAC frames are directly placed in the output queue. -.BR - Default: Y -.TP -.B MulticastRate=n -Sets the data rate for multicast message transmission. -.BR - 1 \- Fixed 1Mb/s - 2 \- Fixed 2Mb/s - 3 \- Fixed 5.5Mb/s - 4 \- Fixed 11Mb/s -.BR - Default: 2 - -For Hermes-II.5, an INTEGER CONVERTED bit mask representing the -rate to multicast, where the rates supported are as follows: - -Bit : 15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00 -.br ------------------------------------------------------- -.br -Rate : XX|XX|XX|XX|54|48|36|24|18|12| 9| 6|11|5.5|2| 1 - - Default: 4 (Translates to 0x0004 = 5.5 Mb/sec) - -.TP -.B MulticastReceive=s -Enable or disable receiving of all multicast packets when Card Power Management -is enabled. When enabled, the station will wake up frequently -to receive the multicast frames. This causes less optimal power savings. -.BR - N \- Disable -.BR - Y \- Enable -.BR - Default: Y -.TP -.B NetworkAddress=n,n,n,n,n,n -Sets the adapter hardware ethernet address (MAC address) to the value -specified. Note that this is to be used to specify a Local MAC address. Do -not specify this parameter if the card\'s universal address is to be used. -Valid values are six hexadecimal digit-pairs (prefixed with 0x). -.BR - Default: -.TP -.B NetworkType -??????????????? -.TP -.B OwnATIMWindow=n -ATIM window time used for creating an IBSS. -.BR - Range: 0..100 -.BR - Default: 0 -.TP -.B OwnBeaconInterval=b -Beacon Interval in TU -.BR - Range 20..200 -.BR - Default \- 100 -.TP -.B channel=n -Same as OwnChannel. -.TP -.B OwnChannel=n -Sets the channel the Ad-Hoc or IBSS mode will use. -The default channel for Ad-Hoc mode is determined by the Wireless PC Card. -The default channel for IBSS is set to 10 by the driver. -This value has no effect when the adapter is used with an Access Point -(BSS network) since the Access Point automatically determines the channel. -Valid values are 0 to 14. However the channels allowed in -your region are subject to local regulations and are limited at -manufacturing time of the Wireless PC Card. When the provided value is -not allowed, the value remains unchanged. -.BR - 0 \- Use default channel -.BR - Default: 0 -.TP -.B OwnDTIMPeriod=n -The number of beacon intervals between successive Delivery Traffic Identification -Maps (DTIMs). -.BR - Range: 1..65535 -.BR - Default: 1 -.TP -.B OwnName=s -Sets the station name to the specified string value. This parameter -is used for diagnostic purposes, as a user\-friendly identification -of this system. This parameter accepts a maximum of 32 characters. -.BR - Default: Linux -.TP -.B OwnSSID=s -Sets the card network name to the specified string value. This parameter -accepts a maximum of 32 characters. Whitespace in the network name -will need to be escaped with a backslash (ie. OwnSSID=My\\ Network). -.BR - Default: ANY -.TP -.B pc_debug=n -Selects the PCMCIA debugging level. This parameter is only available -if the module is compiled with debugging enabled. A non\-zero value -enables debugging. Higher values yield more information, i.e. for any value all -lower values are implied. -.BR - 8 \- DBG_DS_ON -.BR - 7 \- DBG_RX_ON | DBG_TX_ON -.BR - 6 \- DBG_PARAM_ON -.BR - 5 \- DBG_TRACE_ON -.BR - 4 \- DBG_VERBOSE_ON -.BR -If the module is compiled with debugging enabled, pc_debug defaults to 5. -DebugFlag overrules pc_debug. -.BR -The name pc_debug rather than PcDebug, since pc_debug is used by many PCMCIA driver. -.TP -.B PMEnabled=b -Sets the card\'s Power Management state. -.BR - 0 \- Disable -.BR - 1 \- Enable Enhanced Mode -.BR - 2 \- Enabled Standard Mode -.BR - 0x8000 \- Enhanced?????? Mode (to be combined with 0x0001 or 0x0002) - - Default: 0 (Disabled) -.TP -.B PMHoldoverDuration=n -Time that the station remains in an awake state after a MAC frame transfer if -Enhanced Power Save is active. -.BR - Range: 1..1000 -.BR - Default: 100 -.TP -.B PowerMode -??????????????? -.TP -.B PortType=n -Selects the type of network operation. -.BR - 1 \- Normal Operation (BSS or IBSS) -.BR - 3 \- Ad-Hoc Demo Mode -.BR - Default: 1 -.TP -.B PromiscuousMode=s -Switch for promiscuous mode reception. -.BR - Default: N -.TP -.B RejectANY=s -Controls how stations associate to the device. -.BR - Y \- Stations must provide the correct SSID to - associate to the AP. -.BR - N \- Stations are not required to provide the - correct SSID to associate to the AP. - Known as an \'open\' network. -.BR - Default - N -.TP -.B RTSThreshold=n -Controls the RTS/CTS handshake threshold for transmissions in Station mode. -Valid values are 0 to 2347. -.BR - 500 \- Hidden Stations -.BR - 2347 \- No RTS/CTS -.BR - Default: 2347 -.TP -.B RTSThreshold1=n -Same as RTSThreshold, only for port 1 of in AccessPoint mode. -.TP -.B RTSThreshold2=n -Same as RTSThreshold1, only for port 2. -.TP -.B RTSThreshold3=n -Same as RTSThreshold1, only for port 3. -.TP -.B RTSThreshold4=n -Same as RTSThreshold1, only for port 4. -.TP -.B RTSThreshold5=n -Same as RTSThreshold1, only for port 5. -.TP -.B RTSThreshold6=n -Same as RTSThreshold1, only for port 6. -.TP -.B SRSC2GHz=b -Sets the card\'s Supported Rate Set in the 2.4GHz band. The value -is an INTEGER CONVERTED bit mask representing the rates to support, -where the rates supported are as follows: - -Bit : 15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00 -.br ------------------------------------------------------- -.br -Rate : XX|XX|XX|XX|54|48|36|24|18|12| 9| 6|11|5.5|2| 1 -.BR - Default: 4095 (or 0x0FFF, all 11b and 11g rates) -.TP -.B SRSC5GHz=b -Sets the card\'s Supported Rate Set in the 5.0GHz band. See SRSC2GHz -for the value\'s format. -.BR - Default: 4080 (or 0x0FF0, all 11a rates) -.TP -.B SystemScale=n -Sets the distance between Access Points in the network. This value -influences the Modem Thresholds (EnergyDetectThreshold, -CarrierDetectThreshold and DeferThreshold) and -the Roaming Thresholds (CellSearchThreshold and OutOfRangeThreshold). -.BR - 1 \- Large -.BR - 2 \- Medium -.BR - 3 \- Small -.BR - Default: 1 -.TP -.B TxRateControl=n -Sets the data rate to be used by the transmitter. For Hermes-II: -.BR - 1 \- Fixed Low (1 Mb/sec) -.BR - 2 \- Fixed Standard (2 Mb/sec) -.BR - 3 \- Auto Rate Select High (11, 5.5, 2, 1 Mb/sec) -.BR - 4 \- Fixed Medium (5.5 Mb/sec) -.BR - 5 \- Fixed High (11 Mb/sec) -.BR - 6 \- Auto Rate Select Standard (2, 1 Mb/sec) -.BR - 7 \- Auto Rate Select Medium (5.5, 2, 1 Mb/sec) -.BR - Default: 3 - -For Hermes-II.5, an INTEGER CONVERTED bit mask representing all of the -rates to support, where the rates supported are as follows: - -Bit : 15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00 -.br ------------------------------------------------------- -.br -Rate : XX|XX|XX|XX|54|48|36|24|18|12| 9| 6|11|5.5|2| 1 -.BR - Default: 4095 (Translates to 0xFFF, which is all rates) -.TP -.B RTSThreshold=n -Sets the number of octets in a message or fragment above which a -RTS/CTS handshake is performed. -Valid values are 0 to 2347. -.BR - 500 \- Hidden Stations -.BR - 2347 \- No RTS/CTS -.BR - Default: 2347 -.TP -.B TxKey=n -Designates which of the keys is to be used for the enciphering of data that is -transmitted by this station. -.BR - Integer in the range 1..4. -.BR - Default: 1 -.TP -.B TxPowLevel -??????????????? -.TP -.B TxRateControl=n -Sets the data rate to be used by the transmitter in Station mode. -.BR - 1 \- Fixed Low -.BR - 2 \- Fixed Standard -.BR - 3 \- Auto Rate Select (High) -.BR - 4 \- Fixed Medium -.BR - 5 \- Fixed High -.BR - 6 \- Auto Rate Select (Standard) -.BR - 7 \- Auto Rate Select (Medium) -.BR - Default: 3 - -For Hermes-II.5, an INTEGER CONVERTED bit mask representing all of the -rates to support, where the rates supported are as follows: - -Bit : 15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00 -.br ------------------------------------------------------- -.br -Rate : XX|XX|XX|XX|54|48|36|24|18|12| 9| 6|11|5.5|2| 1 -.BR - Default: 4095 (Translates to 0xFFF, which is all rates) - -.TP -.B TxRateControl1=n -Same as TxRateControl, only for port 1 in AccessPoint mode. -.TP -.B TxRateControl2=n -Same as TxRateControl1, only for port 2. -.TP -.B TxRateControl3=n -Same as TxRateControl1, only for port 3. -.TP -.B TxRateControl4=n -Same as TxRateControl1, only for port 4. -.TP -.B TxRateControl5=n -Same as TxRateControl1, only for port 5. -.TP -.B TxRateControl6=n -Same as TxRateControl1, only for port 6. -.TP -.B VendorDescription -??????????????? -.TP -.B WDSAddress=n,n,n,n,n,n -MAC address that identifies the corresponding node of the WDS port in Station mode. -Note that for WDS to work properly, a bridge interface must be setup between the device and -the wds network devices created by the driver. For more information on bridge -interfaces, please refer to the man page for \'brctl\'. -.BR - Default: 00:00:00:00:00:00 -.TP -.B WDSAddress1=n,n,n,n,n,n -Same as WDSAddress, only for port 1 in AccessPoint mode. -.TP -.B WDSAddress2=n,n,n,n,n,n -Same as WDSAddress1, only for port 2. -.TP -.B WDSAddress3=n,n,n,n,n,n -Same as WDSAddress1, only for port 3. -.TP -.B WDSAddress4=n,n,n,n,n,n -Same as WDSAddress1, only for port 4. -.TP -.B WDSAddress5=n,n,n,n,n,n -Same as WDSAddress1, only for port 5. -.TP -.B WDSAddress6=n,n,n,n,n,n -Same as WDSAddress1, only for port 6. -.SH SECURITY -On a multi-user system only the system administrator needs access to the WEP -encryption keys. In this case, consider removing the read permission for -normal users of the PCMCIA config.opts file, the system log file, and any -Agere proprietary iwconfig-eth scripts. -.SH CONTACT -If you encounter problems when installing or using this product, or would like -information about our other "Wireless" products, please contact your local -Authorized "Wireless" Reseller or Agere Systems sales office. - -Addresses and telephone numbers of the Agere Systems sales offices are -listed on our Agere Systems web site. -.TP -.B WWW -http://www.agere.com -.SH SEE ALSO -.BR cardmgr (8), -.BR pcmcia (5), -.BR ifconfig (8), -.BR insmod (8), -.BR brctl (8). diff --git a/drivers/staging/wlags49_h2/mdd.h b/drivers/staging/wlags49_h2/mdd.h deleted file mode 100644 index 0c914971c1ef..000000000000 --- a/drivers/staging/wlags49_h2/mdd.h +++ /dev/null @@ -1,1155 +0,0 @@ - -#ifndef MDD_H -#define MDD_H 1 - -/************************************************************************************************************* -* -* FILE : mdd.h -* -* DATE : $Date: 2004/08/05 11:47:10 $ $Revision: 1.6 $ -* Original : 2004/05/25 05:59:37 Revision: 1.57 Tag: hcf7_t20040602_01 -* Original : 2004/05/13 15:31:45 Revision: 1.54 Tag: hcf7_t7_20040513_01 -* Original : 2004/04/15 09:24:41 Revision: 1.47 Tag: hcf7_t7_20040415_01 -* Original : 2004/04/13 14:22:45 Revision: 1.46 Tag: t7_20040413_01 -* Original : 2004/04/01 15:32:55 Revision: 1.42 Tag: t7_20040401_01 -* Original : 2004/03/10 15:39:28 Revision: 1.38 Tag: t20040310_01 -* Original : 2004/03/04 11:03:37 Revision: 1.36 Tag: t20040304_01 -* Original : 2004/03/02 09:27:11 Revision: 1.34 Tag: t20040302_03 -* Original : 2004/02/24 13:00:27 Revision: 1.29 Tag: t20040224_01 -* Original : 2004/02/18 17:13:57 Revision: 1.26 Tag: t20040219_01 -* -* AUTHOR : Nico Valster -* -* DESC : Definitions and Prototypes for HCF, DHF, MMD and MSF -* -*************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 © 1996 - 2000 by Lucent Technologies. All Rights Reserved -* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved -* All rights reserved. -* -* Redistribution and use in source or binary forms, with or without -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -************************************************************************************************************/ - - -/************************************************************************************************************ -* -* The macros Xn(...) and XXn(...) are used to define the LTV's (short for Length Type Value[ ]) , -* aka RIDs, processed by the Hermes. -* The n in Xn and XXn reflects the number of "Value" fields in these RIDs. -* -* Xn(...) : Macros used for RIDs which use only type hcf_16 for the "V" fields of the LTV. -* Xn takes as parameters a RID name and "n" name(s), one for each of the "V" fields of the LTV. -* -* XXn(...) : Macros used for RIDs which use at least one other type then hcf_16 for a "V" field -* of the LTV. -* XXn(..) takes as parameters a RID name and "n" pair(s) of type and name, one for each "V" field -* of the LTV - - ****************************************** e x a m p l e s *********************************************** - -* X1(RID_NAME, parameters...) : expands to : -* typedef struct RID_NAME_STRCT { -* hcf_16 len; -* hcf_16 typ; -* hcf_16 par1; -* } RID_NAME_STRCT; - -* X2(RID_NAME, parameters...) : expands to : -* typedef struct RID_NAME_STRCT { -* hcf_16 len; -* hcf_16 typ; -* hcf_16 par1; -* hcf_16 par2; -* } RID_NAME_STRCT; - - -* XX1(RID_NAME, par1type, par1name, ...) : expands to : -* typedef struct RID_NAME_STRCT { -* hcf_16 len; -* hcf_16 typ; -* par1type par1name; -* } RID_NAME_STRCT; - -************************************************************************************************************/ - -/******************************* XX Sub-macro definitions **************************************************/ - -#define XX1( name, type1, par1 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - type1 par1; \ -} name##_STRCT; - -#define XX2( name, type1, par1, type2, par2 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - type1 par1; \ - type2 par2; \ -} name##_STRCT; - -#define XX3( name, type1, par1, type2, par2, type3, par3 ) \ -typedef struct name##_STRCT { \ - hcf_16 len; \ - hcf_16 typ; \ - type1 par1; \ - type2 par2; \ - type3 par3; \ -} name##_STRCT; - -#define XX4( name, type1, par1, type2, par2, type3, par3, type4, par4 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - type1 par1; \ - type2 par2; \ - type3 par3; \ - type4 par4; \ -} name##_STRCT; - -#define X1( name, par1 ) \ -typedef struct name##_STRCT { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ -} name##_STRCT; - -#define X2( name, par1, par2 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ -} name##_STRCT; - -#define X3( name, par1, par2, par3 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ -} name##_STRCT; - -#define X4( name, par1, par2, par3, par4 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ - hcf_16 par4; \ -} name##_STRCT; - -#define X5( name, par1, par2, par3, par4, par5 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ - hcf_16 par4; \ - hcf_16 par5; \ -} name##_STRCT; - -#define X6( name, par1, par2, par3, par4, par5, par6 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ - hcf_16 par4; \ - hcf_16 par5; \ - hcf_16 par6; \ -} name##_STRCT; - -#define X8( name, par1, par2, par3, par4, par5, par6, par7, par8 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ - hcf_16 par4; \ - hcf_16 par5; \ - hcf_16 par6; \ - hcf_16 par7; \ - hcf_16 par8; \ -} name##_STRCT; - -#define X11( name, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10, par11 ) \ -typedef struct { \ - hcf_16 len; \ - hcf_16 typ; \ - hcf_16 par1; \ - hcf_16 par2; \ - hcf_16 par3; \ - hcf_16 par4; \ - hcf_16 par5; \ - hcf_16 par6; \ - hcf_16 par7; \ - hcf_16 par8; \ - hcf_16 par9; \ - hcf_16 par10; \ - hcf_16 par11; \ -} name##_STRCT; - -/******************************* Substructure definitions **************************************************/ - -//apparently not needed (CFG_CNF_COUNTRY) -typedef struct CHANNEL_SET { //channel set structure used in the CFG_CNF_COUNTRY LTV - hcf_16 first_channel; - hcf_16 number_of_channels; - hcf_16 max_tx_output_level; -} CHANNEL_SET; - -typedef struct KEY_STRCT { // key structure used in the CFG_DEFAULT_KEYS LTV - hcf_16 len; //length of key - hcf_8 key[14]; //encryption key -} KEY_STRCT; - -typedef struct SCAN_RS_STRCT { // Scan Result structure used in the CFG_SCAN LTV - hcf_16 channel_id; - hcf_16 noise_level; - hcf_16 signal_level; - hcf_8 bssid[6]; - hcf_16 beacon_interval_time; - hcf_16 capability; - hcf_16 ssid_len; - hcf_8 ssid_val[32]; -} SCAN_RS_STRCT; - -typedef struct CFG_RANGE_SPEC_STRCT { // range specification structure used in CFG_RANGES, CFG_RANGE1 etc - hcf_16 variant; - hcf_16 bottom; - hcf_16 top; -} CFG_RANGE_SPEC_STRCT; - -typedef struct CFG_RANGE_SPEC_BYTE_STRCT { // byte oriented range specification structure used in CFG_RANGE_B LTV - hcf_8 variant[2]; - hcf_8 bottom[2]; - hcf_8 top[2]; -} CFG_RANGE_SPEC_BYTE_STRCT; - -//used to set up "T" functionality for Info frames, i.e. log info frames in MSF supplied buffer and MailBox -XX1( RID_LOG, unsigned short FAR*, bufp ) -typedef RID_LOG_STRCT FAR *RID_LOGP; -XX1( CFG_RID_LOG, RID_LOGP, recordp ) - - X1( LTV, val[1] ) /*minimum LTV proto typ */ - X1( LTV_MAX, val[HCF_MAX_LTV] ) /*maximum LTV proto typ */ -XX2( CFG_REG_MB, hcf_16* , mb_addr, hcf_16, mb_size ) - -typedef struct CFG_MB_INFO_FRAG { // specification of buffer fragment - unsigned short FAR* frag_addr; - hcf_16 frag_len; -} CFG_MB_INFO_FRAG; - -/* Mail Box Info Block structures, - * the base form: CFG_MB_INFO_STRCT - * and the derived forms: CFG_MB_INFO_RANGE_STRCT with n is 1, 2, 3 or 20 - * predefined for a payload of 1, and up to 2, 3 and 20 CFG_MB_INFO_FRAG elements */ -XX3( CFG_MB_INFO, hcf_16, base_typ, hcf_16, frag_cnt, CFG_MB_INFO_FRAG, frag_buf[ 1] ) -XX3( CFG_MB_INFO_RANGE1, hcf_16, base_typ, hcf_16, frag_cnt, CFG_MB_INFO_FRAG, frag_buf[ 1] ) -XX3( CFG_MB_INFO_RANGE2, hcf_16, base_typ, hcf_16, frag_cnt, CFG_MB_INFO_FRAG, frag_buf[ 2] ) -XX3( CFG_MB_INFO_RANGE3, hcf_16, base_typ, hcf_16, frag_cnt, CFG_MB_INFO_FRAG, frag_buf[ 3] ) -XX3( CFG_MB_INFO_RANGE20, hcf_16, base_typ, hcf_16, frag_cnt, CFG_MB_INFO_FRAG, frag_buf[20] ) - -XX3( CFG_MB_ASSERT, hcf_16, line, hcf_16, trace, hcf_32, qualifier ) /*MBInfoBlock for asserts */ -#if (HCF_ASSERT) & ( HCF_ASSERT_LNK_MSF_RTN | HCF_ASSERT_RT_MSF_RTN ) -typedef void (MSF_ASSERT_RTN)( unsigned int , hcf_16, hcf_32 ); -typedef MSF_ASSERT_RTN /*can't link FAR*/ * MSF_ASSERT_RTNP; -/* CFG_REG_ASSERT_RTNP (0x0832) (de-)register MSF Callback routines - * lvl: Assert level filtering (not yet implemented) - * rtnp: address of MSF_ASSERT_RTN (native Endian format) */ -XX2( CFG_REG_ASSERT_RTNP, hcf_16, lvl, MSF_ASSERT_RTNP, rtnp ) -#endif // HCF_ASSERT_LNK_MSF_RTN / HCF_ASSERT_RT_MSF_RTN - - X1( CFG_HCF_OPT, val[20] ) /*(Compile time) options */ - X3( CFG_CMD_HCF, cmd, mode, add_info ) /*HCF Engineering command */ - -typedef struct { - hcf_16 len; - hcf_16 typ; - hcf_16 mode; // PROG_STOP/VOLATILE [FLASH/SEEPROM/SEEPROM_READBACK] - hcf_16 segment_size; // size of the segment in bytes - hcf_32 nic_addr; // destination address (in NIC memory) - hcf_16 flags; // 0x0001 : CRC Yes/No -// hcf_32 flags; // 0x0001 : CRC Yes/No - /* ;? still not the whole story - * flags is extended from 16 to 32 bits to force that compiling FW.C produces the same structures - * in memory as FUPU4 BIN files. - * Note that the problem arises from the violation of the constraint to use packing at byte boundaries - * as was stipulated in the WCI-specification - * The Pack pragma can't resolve this issue, because that impacts all members of the structure with - * disregard of their actual size, so aligning host_addr under MSVC 1.5 at 4 bytes, also aligns - * len, typ etc on 4 bytes - * */ -// hcf_16 pad; //!! be careful alignment problems for Bin download versus C download - hcf_8 FAR *host_addr; // source address (in Host memory) -} CFG_PROG_STRCT; // segment_descp; - -// a structure used for transporting debug-related information from firmware -// via the HCF, into the MSF -typedef struct { - hcf_16 len; - hcf_16 typ; - hcf_16 msg_id, msg_par, msg_tstamp; -} CFG_FW_PRINTF_STRCT; - -// a structure used to define the location and size of a certain debug-related -// buffer in nic-ram. -typedef struct { - hcf_16 len; - hcf_16 typ; - hcf_32 DbMsgCount, // ds (nicram) address of a counter - DbMsgBuffer, // ds (nicram) address of the buffer - DbMsgSize, // number of entries (each 3 word in size) in this buffer - DbMsgIntrvl; // ds (nicram) address of interval for generating InfDrop event -} CFG_FW_PRINTF_BUFFER_LOCATION_STRCT; - -XX3( CFG_RANGES, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 1] ) /*Actor/Supplier range (1 variant)*/ -XX3( CFG_RANGE1, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 1] ) /*Actor/Supplier range (1 variant)*/ -XX3( CFG_RANGE2, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 2] ) /*Actor range ( 2 variants) */ -XX3( CFG_RANGE3, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 3] ) /*Actor range ( 3 variants) */ -XX3( CFG_RANGE4, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 4] ) /*Actor range ( 4 variants) */ -XX3( CFG_RANGE5, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 5] ) /*Actor range ( 5 variants) */ -XX3( CFG_RANGE6, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 6] ) /*Actor range ( 6 variants) */ -XX3( CFG_RANGE7, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[ 7] ) /*Actor range ( 7 variants) */ -XX3( CFG_RANGE20, hcf_16, role, hcf_16, id, CFG_RANGE_SPEC_STRCT, var_rec[20] ) /*Actor range (20 variants) */ - -/*Frames */ - X3( CFG_ASSOC_STAT, assoc_stat, station_addr[3], val[46] ) /*Association status, basic */ - X2( CFG_ASSOC_STAT3, assoc_stat, station_addr[3] ) /*assoc_stat:3 */ - X3( CFG_ASSOC_STAT1, assoc_stat, station_addr[3], frame_body[43] ) /*assoc_stat:1 */ - X4( CFG_ASSOC_STAT2, assoc_stat, station_addr[3], old_ap_addr[3], frame_body[43] ) /*assoc_stat:2 */ - -/*Static Configurations */ - X1( CFG_CNF_PORT_TYPE, port_type ) /*[STA] Connection control characteristics */ - X1( CFG_MAC_ADDR, mac_addr[3] ) /*general: FC01,FC08,FC11,FC12,FC13,FC14,FC15,FC16 */ - X1( CFG_CNF_OWN_MAC_ADDR, mac_addr[3] ) - X1( CFG_ID, ssid[17] ) /*0xFC02, 0xFC04, 0xFC0E */ -/* X1( CFG_DESIRED_SSID, ssid[17] ) see Dynamic Configurations */ - X1( CFG_CNF_OWN_CHANNEL, channel ) /*Communication channel for BSS creation */ - X1( CFG_CNF_OWN_SSID, ssid[17] ) - X1( CFG_CNF_OWN_ATIM_WINDOW, atim_window ) - X1( CFG_CNF_SYSTEM_SCALE, system_scale ) - X1( CFG_CNF_MAX_DATA_LEN, max_data_len ) - X1( CFG_CNF_WDS_ADDR, mac_addr[3] ) /*[STA] MAC Address of corresponding WDS Link node */ - X1( CFG_CNF_PM_ENABLED, pm_enabled ) /*[STA] Switch for ESS Power Management (PM) On/Off */ - X1( CFG_CNF_PM_EPS, pm_eps ) /*[STA] Switch for ESS PM EPS/PS Mode */ - X1( CFG_CNF_MCAST_RX, mcast_rx ) /*[STA] Switch for ESS PM Multicast reception On/Off */ - X1( CFG_CNF_MAX_SLEEP_DURATION, duration ) /*[STA] Maximum sleep time for ESS PM */ - X1( CFG_CNF_PM_HOLDOVER_DURATION, duration ) /*[STA] Holdover time for ESS PM */ - X1( CFG_CNF_OWN_NAME, ssid[17] ) /*Identification text for diagnostic purposes */ - X1( CFG_CNF_OWN_DTIM_PERIOD, period ) /*[AP] Beacon intervals between successive DTIMs */ - X1( CFG_CNF_WDS_ADDR1, mac_addr[3] ) /*[AP] Port 1 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_WDS_ADDR2, mac_addr[3] ) /*[AP] Port 2 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_WDS_ADDR3, mac_addr[3] ) /*[AP] Port 3 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_WDS_ADDR4, mac_addr[3] ) /*[AP] Port 4 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_WDS_ADDR5, mac_addr[3] ) /*[AP] Port 5 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_WDS_ADDR6, mac_addr[3] ) /*[AP] Port 6 MAC Adrs of corresponding WDS Link node */ - X1( CFG_CNF_MCAST_PM_BUF, mcast_pm_buf ) /*[AP] Switch for PM buffering of Multicast Messages */ - X1( CFG_CNF_REJECT_ANY, reject_any ) /*[AP] Switch for PM buffering of Multicast Messages */ -//X1( CFG_CNF_ENCRYPTION_ENABLED, encryption ) /*specify encryption type of Tx/Rx messages */ - X1( CFG_CNF_ENCRYPTION, encryption ) /*specify encryption type of Tx/Rx messages */ - X1( CFG_CNF_AUTHENTICATION, authentication ) /*selects Authentication algorithm */ - X1( CFG_CNF_EXCL_UNENCRYPTED, exclude_unencrypted ) /*[AP] Switch for 'clear-text' rx message acceptance */ - X1( CFG_CNF_MCAST_RATE, mcast_rate ) /*Transmit Data rate for Multicast frames */ - X1( CFG_CNF_INTRA_BSS_RELAY, intra_bss_relay ) /*[AP] Switch for IntraBBS relay */ - X1( CFG_CNF_MICRO_WAVE, micro_wave ) /*MicroWave (Robustness) */ - X1( CFG_CNF_LOAD_BALANCING, load_balancing ) /*Load Balancing (Boolean, 0=OFF, 1=ON, default=1) */ - X1( CFG_CNF_MEDIUM_DISTRIBUTION, medium_distribution ) /*Medium Distribution (Boolean, 0=OFF, 1=ON, default=1) */ - X1( CFG_CNF_GROUP_ADDR_FILTER, group_addr_filter ) /*Group Address Filter */ - X1( CFG_CNF_TX_POW_LVL, tx_pow_lvl ) /*Tx Power Level */ -XX4( CFG_CNF_COUNTRY_INFO, \ - hcf_16, n_channel_sets, hcf_16, country_code[2], \ - hcf_16, environment, CHANNEL_SET, channel_set[1] ) /*Current Country Info */ -XX4( CFG_CNF_COUNTRY_INFO_MAX, \ - hcf_16, n_channel_sets, hcf_16, country_code[2], \ - hcf_16, environment, CHANNEL_SET, channel_set[14]) /*Current Country Info */ - -/*Dynamic Configurations */ - X1( CFG_DESIRED_SSID, ssid[17] ) /*[STA] Service Set identification for connection */ -#define GROUP_ADDR_SIZE (32 * 6) //32 6-byte MAC-addresses - X1( CFG_GROUP_ADDR, mac_addr[GROUP_ADDR_SIZE/2] ) /*[STA] Multicast MAC Addresses for Rx-message */ - X1( CFG_CREATE_IBSS, create_ibss ) /*[STA] Switch for IBSS creation On/Off */ - X1( CFG_RTS_THRH, rts_thrh ) /*[STA] Frame length used for RTS/CTS handshake */ - X1( CFG_TX_RATE_CNTL, tx_rate_cntl ) /*[STA] Data rate control for message transmission */ - X1( CFG_PROMISCUOUS_MODE, promiscuous_mode ) /*[STA] Switch for Promiscuous mode reception On/Of */ - X1( CFG_WOL, wake_on_lan ) /*[STA] Switch for Wake-On-LAN mode */ - X1( CFG_RTS_THRH0, rts_thrh ) /*[AP] Port 0 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH1, rts_thrh ) /*[AP] Port 1 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH2, rts_thrh ) /*[AP] Port 2 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH3, rts_thrh ) /*[AP] Port 3 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH4, rts_thrh ) /*[AP] Port 4 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH5, rts_thrh ) /*[AP] Port 5 frame length for RTS/CTS handshake */ - X1( CFG_RTS_THRH6, rts_thrh ) /*[AP] Port 6 frame length for RTS/CTS handshake */ - X1( CFG_TX_RATE_CNTL0, rate_cntl ) /*[AP] Port 0 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL1, rate_cntl ) /*[AP] Port 1 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL2, rate_cntl ) /*[AP] Port 2 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL3, rate_cntl ) /*[AP] Port 3 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL4, rate_cntl ) /*[AP] Port 4 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL5, rate_cntl ) /*[AP] Port 5 data rate control for transmission */ - X1( CFG_TX_RATE_CNTL6, rate_cntl ) /*[AP] Port 6 data rate control for transmission */ -XX1( CFG_DEFAULT_KEYS, KEY_STRCT, key[4] ) /*defines set of encryption keys */ - X1( CFG_TX_KEY_ID, tx_key_id ) /*select key for encryption of Tx messages */ - X1( CFG_SCAN_SSID, ssid[17] ) /*identification for connection */ - X5( CFG_ADD_TKIP_DEFAULT_KEY, \ - tkip_key_id_info, tkip_key_iv_info[4], tkip_key[8], \ - tx_mic_key[4], rx_mic_key[4] ) /* */ - X6( CFG_ADD_TKIP_MAPPED_KEY, bssid[3], tkip_key[8], \ - tsc[4], rsc[4], tx_mic_key[4], rx_mic_key[4] ) /* */ - X1( CFG_SET_WPA_AUTHENTICATION_SUITE, \ - ssn_authentication_suite ) /* */ - X1( CFG_REMOVE_TKIP_DEFAULT_KEY,tkip_key_id ) /* */ - X1( CFG_TICK_TIME, tick_time ) /*Auxiliary Timer tick interval */ - X1( CFG_DDS_TICK_TIME, tick_time ) /*Disconnected DeepSleep Timer tick interval */ - -/********************************************************************** -* Added for Pattern-matching WakeOnLan. (See firmware design note WMDN281C) -**********************************************************************/ -#define WOL_PATTERNS 5 // maximum of 5 patterns in firmware -#define WOL_PATTERN_LEN 124 // maximum 124 bytes pattern length per pattern in firmware -#define WOL_MASK_LEN 30 // maximum 30 bytes mask length per pattern in firmware -#define WOL_BUF_SIZE (WOL_PATTERNS * (WOL_PATTERN_LEN + WOL_MASK_LEN + 6) / 2) -X2( CFG_WOL_PATTERNS, nPatterns, buffer[WOL_BUF_SIZE] ) /*[STA] WakeOnLan pattern match, room for 5 patterns*/ - - X5( CFG_SUP_RANGE, role, id, variant, bottom, top ) /*[PRI] Primary Supplier compatibility range */ -/* NIC Information */ - X4( CFG_IDENTITY, comp_id, variant, version_major, version_minor ) /*identification Prototype */ -#define CFG_DRV_IDENTITY_STRCT CFG_IDENTITY_STRCT -#define CFG_PRI_IDENTITY_STRCT CFG_IDENTITY_STRCT -#define CFG_NIC_IDENTITY_STRCT CFG_IDENTITY_STRCT -#define CFG_FW_IDENTITY_STRCT CFG_IDENTITY_STRCT - X1( CFG_RID_INF_MIN, y ) /*lowest value representing an Information RID */ - X1( CFG_MAX_LOAD_TIME, max_load_time ) /*[PRI] Max response time of the Download command */ - X3( CFG_DL_BUF, buf_page, buf_offset, buf_len ) /*[PRI] Download buffer location and size */ -// X5( CFG_PRI_SUP_RANGE, role, id, variant, bottom, top ) /*[PRI] Primary Supplier compatibility range */ - X5( CFG_CFI_ACT_RANGES_PRI,role, id, variant, bottom, top ) /*[PRI] Controller Actor compatibility ranges */ -// X5( CFG_NIC_HSI_SUP_RANGE, role, id, variant, bottom, top ) /*H/W - S/W I/F supplier range */ - X1( CFG_NIC_SERIAL_NUMBER, serial_number[17] ) /*[PRI] Network I/F Card serial number */ - X5( CFG_NIC_MFI_SUP_RANGE, role, id, variant, bottom, top ) /*[PRI] Modem I/F Supplier compatibility range */ - X5( CFG_NIC_CFI_SUP_RANGE, role, id, variant, bottom, top ) /*[PRI] Controller I/F Supplier compatibility range*/ -//H-I X1( CFG_CHANNEL_LIST, channel_list ) /*Allowed communication channels */ -//H-I XX2( CFG_REG_DOMAINS, hcf_16, num_domain, hcf_8, reg_domains[10] ) /*List of intended regulatory domains */ - X1( CFG_NIC_TEMP_TYPE, temp_type ) /*Hardware temperature range code */ -//H-I X1( CFG_CIS, cis[240] ) /*PC Card Standard Card Information Structure */ - X5( CFG_NIC_PROFILE, \ - profile_code, capability_options, allowed_data_rates, val4, val5 ) /*Card Profile */ -// X5( CFG_FW_SUP_RANGE, role, id, variant, bottom, top ) /*[STA] Station I/F Supplier compatibility range */ - X5( CFG_MFI_ACT_RANGES, role, id, variant, bottom, top ) /*[STA] Modem I/F Actor compatibility ranges */ - X5( CFG_CFI_ACT_RANGES_STA,role, id, variant, bottom, top ) /*[STA] Controller I/F Actor compatibility ranges */ - X5( CFG_MFI_ACT_RANGES_STA,role, id, variant, bottom, top ) /*[STA] Controller I/F Actor compatibility ranges */ - X1( CFG_NIC_BUS_TYPE, nic_bus_type ) /*NIC bustype derived from BUSSEL host I/F signals */ - -/* MAC INFORMATION */ - X1( CFG_PORT_STAT, port_stat ) /*[STA] Actual MAC Port connection control status */ - X1( CFG_CUR_SSID, ssid[17] ) /*[STA] Identification of the actually connected SS */ - X1( CFG_CUR_BSSID, mac_addr[3] ) /*[STA] Identification of the actually connected BSS */ - X3( CFG_COMMS_QUALITY, coms_qual, signal_lvl, noise_lvl ) /*[STA] Quality of the Basic Service Set connection */ - X1( CFG_CUR_TX_RATE, rate ) /*[STA] Actual transmit data rate */ - X1( CFG_CUR_BEACON_INTERVAL, interval ) /*Beacon transmit interval time for BSS creation */ -#if (HCF_TYPE) & HCF_TYPE_WARP - X11( CFG_CUR_SCALE_THRH, \ - carrier_detect_thrh_cck, carrier_detect_thrh_ofdm, defer_thrh, \ - energy_detect_thrh, rssi_on_thrh_deviation, \ - rssi_off_thrh_deviation, cck_drop_thrh, ofdm_drop_thrh, \ - cell_search_thrh, out_of_range_thrh, delta_snr ) -#else - X6( CFG_CUR_SCALE_THRH, \ - energy_detect_thrh, carrier_detect_thrh, defer_thrh, \ - cell_search_thrh, out_of_range_thrh, delta_snr ) /*Actual System Scale thresholds settings */ -#endif // HCF_TYPE_WARP - X1( CFG_PROTOCOL_RSP_TIME, time ) /*Max time to await a response to a request message */ - X1( CFG_CUR_SHORT_RETRY_LIMIT, limit ) /*Max number of transmit attempts for short frames */ - X1( CFG_CUR_LONG_RETRY_LIMIT, limit ) /*Max number of transmit attempts for long frames */ - X1( CFG_MAX_TX_LIFETIME, time ) /*Max transmit frame handling duration */ - X1( CFG_MAX_RX_LIFETIME, time ) /*Max received frame handling duration */ - X1( CFG_CF_POLLABLE, cf_pollable ) /*[STA] Contention Free pollable capability indication */ - X2( CFG_AUTHENTICATION_ALGORITHMS,authentication_type, type_enabled ) /*Authentication Algorithm */ - X1( CFG_PRIVACY_OPT_IMPLEMENTED,privacy_opt_implemented ) /*WEP Option availability indication */ - X1( CFG_CUR_REMOTE_RATES, rates ) /*CurrentRemoteRates */ - X1( CFG_CUR_USED_RATES, rates ) /*CurrentUsedRates */ - X1( CFG_CUR_SYSTEM_SCALE, current_system_scale ) /*CurrentUsedRates */ - X1( CFG_CUR_TX_RATE1, rate ) /*[AP] Actual Port 1 transmit data rate */ - X1( CFG_CUR_TX_RATE2, rate ) /*[AP] Actual Port 2 transmit data rate */ - X1( CFG_CUR_TX_RATE3, rate ) /*[AP] Actual Port 3 transmit data rate */ - X1( CFG_CUR_TX_RATE4, rate ) /*[AP] Actual Port 4 transmit data rate */ - X1( CFG_CUR_TX_RATE5, rate ) /*[AP] Actual Port 5 transmit data rate */ - X1( CFG_CUR_TX_RATE6, rate ) /*[AP] Actual Port 6 transmit data rate */ - X1( CFG_OWN_MAC_ADDR, mac_addr[3] ) /*[AP] Unique local node MAC Address */ - X3( CFG_PCF_INFO, medium_occupancy_limit, \ - cfp_period, cfp_max_duration ) /*[AP] Point Coordination Function capability info */ - X1( CFG_CUR_WPA_INFO_ELEMENT, ssn_info_element[1] ) /* */ - X4( CFG_CUR_TKIP_IV_INFO, \ - tkip_seq_cnt0[4], tkip_seq_cnt1[4], \ - tkip_seq_cnt2[4], tkip_seq_cnt3[4] ) /* */ - X2( CFG_CUR_ASSOC_REQ_INFO, frame_type, frame_body[1] ) /* 0xFD8C */ - X2( CFG_CUR_ASSOC_RESP_INFO, frame_type, frame_body[1] ) /* 0xFD8D */ - - -/* Modem INFORMATION */ - X1( CFG_PHY_TYPE, phy_type ) /*Physical layer type indication */ - X1( CFG_CUR_CHANNEL, current_channel ) /*Actual frequency channel used for transmission */ - X1( CFG_CUR_POWER_STATE, current_power_state ) /*Actual power consumption status */ - X1( CFG_CCAMODE, cca_mode ) /*Clear channel assessment mode indication */ - X1( CFG_SUPPORTED_DATA_RATES, rates[5] ) /*Data rates capability information */ - - -/* FRAMES */ -XX1( CFG_SCAN, SCAN_RS_STRCT, scan_result[32] ) /*Scan results */ - - - -//-------------------------------------------------------------------------------------- -// UIL management function to be passed to WaveLAN/IEEE Drivers in DUI_STRCT field fun -//-------------------------------------------------------------------------------------- - -// HCF and UIL Common -#define MDD_ACT_SCAN 0x06 // Hermes Inquire Scan (F101) command -#define MDD_ACT_PRS_SCAN 0x07 // Hermes Probe Response Scan (F102) command - -// UIL Specific -#define UIL_FUN_CONNECT 0x00 // Perform connect command -#define UIL_FUN_DISCONNECT 0x01 // Perform disconnect command -#define UIL_FUN_ACTION 0x02 // Perform UIL Action command. -#define UIL_FUN_SEND_DIAG_MSG 0x03 // Send a diagnostic message. -#define UIL_FUN_GET_INFO 0x04 // Retrieve information from NIC. -#define UIL_FUN_PUT_INFO 0x05 // Put information on NIC. - -/* UIL_ACT_TALLIES 0x05 * this should not be exported to the USF - * it is solely intended as a strategic choice for the MSF to either - * - use HCF_ACT_TALLIES and direct IFB access - * - use CFG_TALLIES - */ -#define UIL_ACT_SCAN MDD_ACT_SCAN -#define UIL_ACT_PRS_SCAN MDD_ACT_PRS_SCAN -#define UIL_ACT_BLOCK 0x0B -#define UIL_ACT_UNBLOCK 0x0C -#define UIL_ACT_RESET 0x80 -#define UIL_ACT_REBIND 0x81 -#define UIL_ACT_APPLY 0x82 -#define UIL_ACT_DISCONNECT 0x83 //;?040108 possibly obsolete //Special for WINCE - -// HCF Specific -/* Note that UIL_ACT-codes must match HCF_ACT-codes across a run-time bound I/F - * The initial matching is achieved by "#define HCF_ACT_xxx HCF_UIL_ACT_xxx" where appropriate - * In other words, these codes should never, ever change to minimize migration problems between - * combinations of old drivers and new utilities and vice versa - */ -#define HCF_DISCONNECT 0x01 //disconnect request for hcf_connect (invalid as IO Address) -#define HCF_ACT_TALLIES 0x05 // ! UIL_ACT_TALLIES does not exist ! Hermes Inquire Tallies (F100) cmd -#if ( (HCF_TYPE) & HCF_TYPE_WARP ) == 0 -#define HCF_ACT_SCAN MDD_ACT_SCAN -#endif // HCF_TYPE_WARP -#define HCF_ACT_PRS_SCAN MDD_ACT_PRS_SCAN -#if HCF_INT_ON -#define HCF_ACT_INT_OFF 0x0D // Disable Interrupt generation -#define HCF_ACT_INT_ON 0x0E // Enable Interrupt generation -#define HCF_ACT_INT_FORCE_ON 0x0F // Enforce Enable Interrupt generation -#endif // HCF_INT_ON -#define HCF_ACT_RX_ACK 0x15 // Receiever ACK (optimization) -#if (HCF_TYPE) & HCF_TYPE_CCX -#define HCF_ACT_CCX_ON 0x1A // enable CKIP -#define HCF_ACT_CCX_OFF 0x1B // disable CKIP -#endif // HCF_TYPE_CCX -#if (HCF_SLEEP) & HCF_DDS -#define HCF_ACT_SLEEP 0x1C // DDS Sleep request -//#define HCF_ACT_WAKEUP 0x1D // DDS Wakeup request -#endif // HCF_DDS - -/* HCF_ACT_MAX // xxxx: start value for UIL-range, NOT to be passed to HCF - * Too bad, there was originally no spare room created to use - * HCF_ACT_MAX as an equivalent of HCF_ERR_MAX. Since creating - * this room in retrospect would create a backward incompatibility - * we will just have to live with the haphazard sequence of - * UIL- and HCF specific codes. Theoretically this could be - * corrected when and if there will ever be an overall - * incompatibility introduced for another reason - */ - -/*============================================================= HERMES RECORDS ============================*/ -#define CFG_RID_FW_MIN 0xFA00 //lowest value representing a Hermes-II based RID -// #define CFG_PDA_BEGIN 0xFA // -// #define CFG_PDA_END 0xFA // -// #define CFG_PDA_NIC_TOP_LVL_ASSEMBLY_NUMBER 0xFA // -// #define CFG_PDA_PCB_TRACER_NUMBER 0xFA // -// #define CFG_PDA_RMM_TRACER_NUMBER 0xFA // -// #define CFG_PDA_RMM_COMP_ID 0xFA // -// #define CFG_PDA_ 0xFA // - -/*============================================================= CONFIGURATION RECORDS =====================*/ -/*============================================================= mask 0xFCxx =====================*/ -#define CFG_RID_CFG_MIN 0xFC00 //lowest value representing a Hermes configuration RID - -// NETWORK PARAMETERS, STATIC CONFIGURATION ENTITIES -//FC05, FC0B, FC0C, FC0D: SEE W2DN149 - -#define CFG_CNF_PORT_TYPE 0xFC00 //[STA] Connection control characteristics -#define CFG_CNF_OWN_MAC_ADDR 0xFC01 //[STA] MAC Address of this node -// 0xFC02 see DYNAMIC CONFIGURATION ENTITIES -#define CFG_CNF_OWN_CHANNEL 0xFC03 //Communication channel for BSS creation -#define CFG_CNF_OWN_SSID 0xFC04 //IBSS creation (STA) or ESS (AP) Service Set Ident -#define CFG_CNF_OWN_ATIM_WINDOW 0xFC05 //[STA] ATIM Window time for IBSS creation -#define CFG_CNF_SYSTEM_SCALE 0xFC06 //System Scale that specifies the AP density -#define CFG_CNF_MAX_DATA_LEN 0xFC07 //Maximum length of MAC Frame Body data -#define CFG_CNF_PM_ENABLED 0xFC09 //[STA] Switch for ESS Power Management (PM) -#define CFG_CNF_MCAST_RX 0xFC0B //[STA] Switch for ESS PM Multicast reception On/Off -#define CFG_CNF_MAX_SLEEP_DURATION 0xFC0C //[STA] Maximum sleep time for ESS PM -#define CFG_CNF_HOLDOVER_DURATION 0xFC0D //[STA] Holdover time for ESS PM -#define CFG_CNF_OWN_NAME 0xFC0E //Identification text for diagnostic purposes - -#define CFG_CNF_OWN_DTIM_PERIOD 0xFC10 //[AP] Beacon intervals between successive DTIMs -#define CFG_CNF_WDS_ADDR1 0xFC11 //[AP] Port 1 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_WDS_ADDR2 0xFC12 //[AP] Port 2 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_WDS_ADDR3 0xFC13 //[AP] Port 3 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_WDS_ADDR4 0xFC14 //[AP] Port 4 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_WDS_ADDR5 0xFC15 //[AP] Port 5 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_WDS_ADDR6 0xFC16 //[AP] Port 6 MAC Adrs of corresponding WDS Link node -#define CFG_CNF_PM_MCAST_BUF 0xFC17 //[AP] Switch for PM buffereing of Multicast Messages -#define CFG_CNF_MCAST_PM_BUF CFG_CNF_PM_MCAST_BUF //name does not match H-II spec -#define CFG_CNF_REJECT_ANY 0xFC18 //[AP] Switch for PM buffering of Multicast Messages - -#define CFG_CNF_ENCRYPTION 0xFC20 //select en/de-cryption of Tx/Rx messages -#define CFG_CNF_AUTHENTICATION 0xFC21 //[STA] selects Authentication algorithm -#define CFG_CNF_EXCL_UNENCRYPTED 0xFC22 //[AP] Switch for 'clear-text' rx message acceptance -#define CFG_CNF_MCAST_RATE 0xFC23 //Transmit Data rate for Multicast frames -#define CFG_CNF_INTRA_BSS_RELAY 0xFC24 //[AP] Switch for IntraBBS relay -#define CFG_CNF_MICRO_WAVE 0xFC25 //MicroWave (Robustness) -#define CFG_CNF_LOAD_BALANCING 0xFC26 //Load Balancing (Boolean, 0=OFF, 1=ON, default=1) -#define CFG_CNF_MEDIUM_DISTRIBUTION 0xFC27 //Medium Distribution (Boolean, 0=OFF, 1=ON, default=1) -#define CFG_CNF_RX_ALL_GROUP_ADDR 0xFC28 //[STA] Group Address Filter -#define CFG_CNF_COUNTRY_INFO 0xFC29 //Country Info -#if (HCF_TYPE) & HCF_TYPE_WARP -#define CFG_CNF_TX_POW_LVL 0xFC2A //TxPower Level -#define CFG_CNF_CONNECTION_CNTL 0xFC30 //[STA] Connection Control -#define CFG_CNF_OWN_BEACON_INTERVAL 0xFC31 //[AP] -#define CFG_CNF_SHORT_RETRY_LIMIT 0xFC32 // -#define CFG_CNF_LONG_RETRY_LIMIT 0xFC33 // -#define CFG_CNF_TX_EVENT_MODE 0xFC34 // -#define CFG_CNF_WIFI_COMPATIBLE 0xFC35 //[STA] Wifi compatible -#endif // HCF_TYPE_WARP -#if (HCF_TYPE) & HCF_TYPE_BEAGLE_HII5 -#define CFG_VOICE_RETRY_LIMIT 0xFC36 /* Voice frame retry limit. Range: 1-15, default: 4 */ -#define CFG_VOICE_CONTENTION_WINDOW 0xFC37 /* Contention window for voice frames. */ -#endif // BEAGLE_HII5 - -// NETWORK PARAMETERS, DYNAMIC CONFIGURATION ENTITIES -#define CFG_DESIRED_SSID 0xFC02 //[STA] Service Set identification for connection and scan - -#define CFG_GROUP_ADDR 0xFC80 //[STA] Multicast MAC Addresses for Rx-message -#define CFG_CREATE_IBSS 0xFC81 //[STA] Switch for IBSS creation On/Off -#define CFG_RTS_THRH 0xFC83 //Frame length used for RTS/CTS handshake -#define CFG_TX_RATE_CNTL 0xFC84 //[STA] Data rate control for message transmission -#define CFG_PROMISCUOUS_MODE 0xFC85 //[STA] Switch for Promiscuous mode reception On/Off -#define CFG_WOL 0xFC86 //[STA] Switch for Wake-On-LAN mode -#define CFG_WOL_PATTERNS 0xFC87 //[STA] Patterns for Wake-On-LAN -#define CFG_SUPPORTED_RATE_SET_CNTL 0xFC88 // -#define CFG_BASIC_RATE_SET_CNTL 0xFC89 // - -#define CFG_SOFTWARE_ACK_MODE 0xFC90 // -#define CFG_RTS_THRH0 0xFC97 //[AP] Port 0 frame length for RTS/CTS handshake -#define CFG_RTS_THRH1 0xFC98 //[AP] Port 1 frame length for RTS/CTS handshake -#define CFG_RTS_THRH2 0xFC99 //[AP] Port 2 frame length for RTS/CTS handshake -#define CFG_RTS_THRH3 0xFC9A //[AP] Port 3 frame length for RTS/CTS handshake -#define CFG_RTS_THRH4 0xFC9B //[AP] Port 4 frame length for RTS/CTS handshake -#define CFG_RTS_THRH5 0xFC9C //[AP] Port 5 frame length for RTS/CTS handshake -#define CFG_RTS_THRH6 0xFC9D //[AP] Port 6 frame length for RTS/CTS handshake - -#define CFG_TX_RATE_CNTL0 0xFC9E //[AP] Port 0 data rate control for transmission -#define CFG_TX_RATE_CNTL1 0xFC9F //[AP] Port 1 data rate control for transmission -#define CFG_TX_RATE_CNTL2 0xFCA0 //[AP] Port 2 data rate control for transmission -#define CFG_TX_RATE_CNTL3 0xFCA1 //[AP] Port 3 data rate control for transmission -#define CFG_TX_RATE_CNTL4 0xFCA2 //[AP] Port 4 data rate control for transmission -#define CFG_TX_RATE_CNTL5 0xFCA3 //[AP] Port 5 data rate control for transmission -#define CFG_TX_RATE_CNTL6 0xFCA4 //[AP] Port 6 data rate control for transmission - -#define CFG_DEFAULT_KEYS 0xFCB0 //defines set of encryption keys -#define CFG_TX_KEY_ID 0xFCB1 //select key for encryption of Tx messages -#define CFG_SCAN_SSID 0xFCB2 //Scan SSID -#define CFG_ADD_TKIP_DEFAULT_KEY 0xFCB4 //set KeyID and TxKey indication -#define KEY_ID 0x0003 //KeyID mask for tkip_key_id_info field -#define TX_KEY 0x8000 //Default Tx Key flag of tkip_key_id_info field -#define CFG_SET_WPA_AUTH_KEY_MGMT_SUITE 0xFCB5 //Authenticated Key Management Suite -#define CFG_REMOVE_TKIP_DEFAULT_KEY 0xFCB6 //invalidate KeyID and TxKey indication -#define CFG_ADD_TKIP_MAPPED_KEY 0xFCB7 //set MAC address pairwise station -#define CFG_REMOVE_TKIP_MAPPED_KEY 0xFCB8 //invalidate MAC address pairwise station -#define CFG_SET_WPA_CAPABILITIES_INFO 0xFCB9 //WPA Capabilities -#define CFG_CACHED_PMK_ADDR 0xFCBA //set MAC address of pre-authenticated AP -#define CFG_REMOVE_CACHED_PMK_ADDR 0xFCBB //invalidate MAC address of pre-authenticated AP -#define CFG_FCBC 0xFCBC //FW codes ahead of available documentation, so ??????? -#define CFG_FCBD 0xFCBD //FW codes ahead of available documentation, so ??????? -#define CFG_FCBE 0xFCBE //FW codes ahead of available documentation, so ??????? -#define CFG_FCBF 0xFCBF //FW codes ahead of available documentation, so ??????? - -#define CFG_HANDOVER_ADDR 0xFCC0 //[AP] Station MAC Address re-associated with other AP -#define CFG_SCAN_CHANNEL 0xFCC2 //Channel set for host requested scan -//;?#define CFG_SCAN_CHANNEL_MASK 0xFCC2 // contains -#define CFG_DISASSOCIATE_ADDR 0xFCC4 //[AP] Station MAC Address to be disassociated -#define CFG_PROBE_DATA_RATE 0xFCC5 //WARP connection control -#define CFG_FRAME_BURST_LIMIT 0xFCC6 // -#define CFG_COEXISTENSE_BEHAVIOUR 0xFCC7 //[AP] -#define CFG_DEAUTHENTICATE_ADDR 0xFCC8 //MAC address of Station to be deauthenticated - -// BEHAVIOR PARAMETERS -#define CFG_TICK_TIME 0xFCE0 //Auxiliary Timer tick interval -#define CFG_DDS_TICK_TIME 0xFCE1 //Disconnected DeepSleep Timer tick interval -//#define CFG_CNF_COUNTRY 0xFCFE apparently not needed ;? -#define CFG_RID_CFG_MAX 0xFCFF //highest value representing an Configuration RID - - -/*============================================================= INFORMATION RECORDS =====================*/ -/*============================================================= mask 0xFDxx =====================*/ -// NIC INFORMATION -#define CFG_RID_INF_MIN 0xFD00 //lowest value representing an Information RID -#define CFG_MAX_LOAD_TIME 0xFD00 //[INT] Maximum response time of the Download command. -#define CFG_DL_BUF 0xFD01 //[INT] Download buffer location and size. -#define CFG_PRI_IDENTITY 0xFD02 //[PRI] Primary Functions firmware identification. -#define CFG_PRI_SUP_RANGE 0xFD03 //[PRI] Primary Functions I/F Supplier compatibility range. -#define CFG_NIC_HSI_SUP_RANGE 0xFD09 //H/W - S/W I/F supplier range -#define CFG_NIC_SERIAL_NUMBER 0xFD0A //[PRI] Network Interface Card serial number. -#define CFG_NIC_IDENTITY 0xFD0B //[PRI] Network Interface Card identification. -#define CFG_NIC_MFI_SUP_RANGE 0xFD0C //[PRI] Modem I/F Supplier compatibility range. -#define CFG_NIC_CFI_SUP_RANGE 0xFD0D //[PRI] Controller I/F Supplier compatibility range. -#define CFG_CHANNEL_LIST 0xFD10 //Allowed communication channels. -#define CFG_NIC_TEMP_TYPE 0xFD12 //Hardware temperature range code. -#define CFG_CIS 0xFD13 //PC Card Standard Card Information Structure -#define CFG_NIC_PROFILE 0xFD14 //Card Profile -#define CFG_FW_IDENTITY 0xFD20 //firmware identification. -#define CFG_FW_SUP_RANGE 0xFD21 //firmware Supplier compatibility range. -#define CFG_MFI_ACT_RANGES_STA 0xFD22 //[STA] Modem I/F Actor compatibility ranges. -#define CFG_CFI_ACT_RANGES_STA 0xFD23 //[STA] Controller I/F Actor compatibility ranges. -#define CFG_NIC_BUS_TYPE 0xFD24 //Card Bustype -#define CFG_NIC_BUS_TYPE_PCCARD_CF 0x0000 //16 bit PC Card or Compact Flash -#define CFG_NIC_BUS_TYPE_USB 0x0001 //USB -#define CFG_NIC_BUS_TYPE_CARDBUS 0x0002 //CardBus -#define CFG_NIC_BUS_TYPE_PCI 0x0003 //(mini)PCI -#define CFG_DOMAIN_CODE 0xFD25 - -// MAC INFORMATION -#define CFG_PORT_STAT 0xFD40 //Actual MAC Port connection control status -#define CFG_CUR_SSID 0xFD41 //[STA] Identification of the actually connected SS -#define CFG_CUR_BSSID 0xFD42 //[STA] Identification of the actually connected BSS -#define CFG_COMMS_QUALITY 0xFD43 //[STA] Quality of the Basic Service Set connection -#define CFG_CUR_TX_RATE 0xFD44 //[STA] Actual transmit data rate -#define CFG_CUR_BEACON_INTERVAL 0xFD45 //Beacon transmit interval time for BSS creation -#define CFG_CUR_SCALE_THRH 0xFD46 //Actual System Scale thresholds settings -#define CFG_PROTOCOL_RSP_TIME 0xFD47 //Max time to await a response to a request message -#define CFG_CUR_SHORT_RETRY_LIMIT 0xFD48 //Max number of transmit attempts for short frames -#define CFG_CUR_LONG_RETRY_LIMIT 0xFD49 //Max number of transmit attempts for long frames -#define CFG_MAX_TX_LIFETIME 0xFD4A //Max transmit frame handling duration -#define CFG_MAX_RX_LIFETIME 0xFD4B //Max received frame handling duration -#define CFG_CF_POLLABLE 0xFD4C //[STA] Contention Free pollable capability indication -#define CFG_AUTHENTICATION_ALGORITHMS 0xFD4D //Available Authentication Algorithms indication -#define CFG_PRIVACY_OPT_IMPLEMENTED 0xFD4F //WEP Option availability indication - -#define CFG_CUR_REMOTE_RATES 0xFD50 //[STA] CurrentRemoteRates -#define CFG_CUR_USED_RATES 0xFD51 //[STA] CurrentUsedRates -#define CFG_CUR_SYSTEM_SCALE 0xFD52 //[STA] CurrentSystemScale - -#define CFG_CUR_TX_RATE1 0xFD80 //[AP] Actual Port 1 transmit data rate -#define CFG_CUR_TX_RATE2 0xFD81 //[AP] Actual Port 2 transmit data rate -#define CFG_CUR_TX_RATE3 0xFD82 //[AP] Actual Port 3 transmit data rate -#define CFG_CUR_TX_RATE4 0xFD83 //[AP] Actual Port 4 transmit data rate -#define CFG_CUR_TX_RATE5 0xFD84 //[AP] Actual Port 5 transmit data rate -#define CFG_CUR_TX_RATE6 0xFD85 //[AP] Actual Port 6 transmit data rate -#define CFG_NIC_MAC_ADDR 0xFD86 //Unique local node MAC Address -#define CFG_PCF_INFO 0xFD87 //[AP] Point Coordination Function capability info -//*RESERVED* #define CFG_HIGHEST_BASIC_RATE 0xFD88 // -#define CFG_CUR_COUNTRY_INFO 0xFD89 // -#define CFG_CUR_WPA_INFO_ELEMENT 0xFD8A // -#define CFG_CUR_TKIP_IV_INFO 0xFD8B // -#define CFG_CUR_ASSOC_REQ_INFO 0xFD8C // -#define CFG_CUR_ASSOC_RESP_INFO 0xFD8D // -#define CFG_CUR_LOAD 0xFD8E //[AP] current load on AP's channel - -#define CFG_SECURITY_CAPABILITIES 0xFD90 //Combined capabilities information - -// MODEM INFORMATION -#define CFG_PHY_TYPE 0xFDC0 //Physical layer type indication -#define CFG_CUR_CHANNEL 0xFDC1 //Actual frequency channel used for transmission -#define CFG_CUR_POWER_STATE 0xFDC2 //Actual power consumption status -#define CFG_CCA_MODE 0xFDC3 //Clear channel assessment mode indication -#define CFG_SUPPORTED_DATA_RATES 0xFDC6 //Data rates capability information - -#define CFG_RID_INF_MAX 0xFDFF //highest value representing an Information RID - -// ENGINEERING INFORMATION -#define CFG_RID_ENG_MIN 0xFFE0 //lowest value representing a Hermes engineering RID - - -/****************************** General define *************************************************************/ - - -//IFB field related -// IFB_CardStat -#define CARD_STAT_INCOMP_PRI 0x2000U // no compatible HSI / primary F/W -#define CARD_STAT_INCOMP_FW 0x1000U // no compatible station / tertiary F/W -#define CARD_STAT_DEFUNCT 0x0100U // HCF is in Defunct mode -// IFB_RxStat -#define RX_STAT_PRIO 0x00E0U //Priority subfield -#define RX_STAT_ERR 0x000FU //Error mask -#define RX_STAT_UNDECR 0x0002U //Non-decryptable encrypted message -#define RX_STAT_FCS_ERR 0x0001U //FCS error - -// SNAP header for E-II Encapsulation -#define ENC_NONE 0xFF -#define ENC_1042 0x00 -#define ENC_TUNNEL 0xF8 -/****************************** Xxxxxxxx *******************************************************************/ - - -#define HCF_SUCCESS 0x00 // OK -#define HCF_ERR_TIME_OUT 0x04 // Expected Hermes event did not occur in expected time -#define HCF_ERR_NO_NIC 0x05 /* card not found (usually yanked away during hcfio_in_string - * Also: card is either absent or disabled while it should be neither */ -#define HCF_ERR_LEN 0x08 /* buffer size insufficient - * - IFB_ConfigTable too small - * - hcf_get_info buffer has a size of 0 or 1 or less than needed - * to accommodate all data - * - hcf_put_info: CFG_DLNV_DATA exceeds intermediate - * buffer size */ -#define HCF_ERR_INCOMP_PRI 0x09 // primary functions are not compatible -#define HCF_ERR_INCOMP_FW 0x0A // station functions are compatible -#define HCF_ERR_MIC 0x0D // MIC check fails -#define HCF_ERR_SLEEP 0x0E // NIC in sleep mode -#define HCF_ERR_MAX 0x3F /* end of HCF range - *** ** *** ****** *** *************** */ -#define HCF_ERR_DEFUNCT 0x80 // BIT, reflecting that the HCF is in defunct mode (bits 0x7F reflect cause) -#define HCF_ERR_DEFUNCT_AUX 0x82 // Timeout on acknowledgement on en/disabling AUX registers -#define HCF_ERR_DEFUNCT_TIMER 0x83 // Timeout on timer calibration during initialization process -#define HCF_ERR_DEFUNCT_TIME_OUT 0x84 // Timeout on Busy bit drop during BAP setup -#define HCF_ERR_DEFUNCT_CMD_SEQ 0x86 // Hermes and HCF are out of sync in issuing/processing commands - -#define HCF_INT_PENDING 0x01 // return status of hcf_act( HCF_ACT_INT_OFF ) - -#define HCF_PORT_0 0x0000 // Station supports only single MAC Port -#define HCF_PORT_1 0x0100 // HCF_PORT_1 through HCF_PORT_6 are only supported by AP F/W -#define HCF_PORT_2 0x0200 -#define HCF_PORT_3 0x0300 -#define HCF_PORT_4 0x0400 -#define HCF_PORT_5 0x0500 -#define HCF_PORT_6 0x0600 - -#define HCF_CNTL_ENABLE 0x01 -#define HCF_CNTL_DISABLE 0x02 -#define HCF_CNTL_CONNECT 0x03 -#define HCF_CNTL_DISCONNECT 0x05 -#define HCF_CNTL_CONTINUE 0x07 - -#define USE_DMA 0x0001 -#define USE_16BIT 0x0002 -#define DMA_ENABLED 0x8000 //weak name, it really means: F/W enabled and DMA selected - -//#define HCF_DMA_FD_CNT (2*29) //size in bytes of one Tx/RxFS minus DA/SA -//;?the MSF ( H2PCI.C uses the next 2 mnemonics ) -#define HCF_DMA_RX_BUF1_SIZE (HFS_ADDR_DEST + 8) //extra bytes for LEN/SNAP if decapsulation -#define HCF_DMA_TX_BUF1_SIZE (HFS_ADDR_DEST + 2*6 + 8) //extra bytes for DA/SA/LEN/SNAP if encapsulation - -//HFS_TX_CNTL -/* Note that the HCF_.... System Constants influence the HFS_.... values below - * H-I H-I | H-II H-II H-II.5 - * WPA | WPA - * HFS_TX_CNTL_TX_OK 0002 0002 | 0002 0002 N/A <<<<<<<NULL pointer to matching CFG_RANGE_SPEC_STRCT substructure in actor-structure matching the supplier -* -*.NARRATIVE -* -* Parameters: -* actp address of the actor specification -* supp address of the supplier specification -* -* Description: mmd_check_comp is a support routine to check the compatibility between an actor and a -* supplier. mmd_check_comp is independent of the endianness of the actp and supp structures. This is -* achieved by checking the "bottom" or "role" fields of these structures. Since these fields are restricted -* to a limited range, comparing the contents to a value with a known endian-ess gives a clue to their actual -* endianness. -* -*.DIAGRAM -*1a: The role-field of the actor structure has a known non-zero, not "byte symmetric" value (namely -* COMP_ROLE_ACT or 0x0001), so if and only the contents of this field matches COMP_ROLE_ACT (in Native -* Endian format), the actor structure is Native Endian. -*2a: Since the role-field of the supplier structure is 0x0000, the test as used for the actor does not work -* for a supplier. A supplier has always exactly 1 variant,top,bottom record with (officially, but see the -* note below) each of these 3 values in the range 1 through 99, so one byte of the word value of variant, -* top and bottom words is 0x00 and the other byte is non-zero. Whether the lowest address byte or the -* highest address byte is non-zero depends on the Endianness of the LTV. If and only if the word value of -* bottom is less than 0x0100, the supplier is Native Endian. -* NOTE: the variant field of the supplier structure can not be used for the Endian Detection Algorithm, -* because a a zero-valued variant has been used as Controlled Deployment indication in the past. -* Note: An actor may have multiple sets of variant,top,bottom records, including dummy sets with variant, -* top and bottom fields with a zero-value. As a consequence the endianness of the actor can not be determined -* based on its variant,top,bottom values. -* -* Note: the L and T field of the structures are always in Native Endian format, so you can not draw -* conclusions concerning the Endianness of the structure based on these two fields. -* -*1b/2b -* The only purpose of the CFG_RANGE_SPEC_BYTE_STRCT is to give easy access to the non-zero byte of the word -* value of variant, top and bottom. The variables sup_endian and act_endian are used for the supplier and -* actor structure respectively. These variables must be 0 when the structure has LE format and 1 if the -* structure has BE format. This can be phrased as: -* the variable is false (i.e 0x0000) if either -* (the platform is LE and the LTV is the same as the platform) -* or -* (the platform is BE and the LTV differs from the platform). -* the variable is true (i.e 0x0001) if either -* (the platform is BE and the LTV is the same as the platform) -* or -* (the platform is LE and the LTV differs from the platform). -* -* Alternatively this can be phrased as: -* if the platform is LE -* if the LTV is LE (i.e the same as the platform), then the variable = 0 -* else (the LTV is BE (i.e. different from the platform) ), then the variable = 1 -* if the platform is BE -* if the LTV is BE (i.e the same as the platform), then the variable = 1 -* else (the LTV is LE (i.e. different from the platform) ), then the variable = 0 -* -* This is implemented as: -* #if HCF_BIG_ENDIAN == 0 //platform is LE -* sup/act_endian becomes reverse of structure-endianness as determined in 1a/1b -* #endif -*6: Each of the actor variant-bottom-top records is checked against the (single) supplier variant-bottom-top -* range till either an acceptable match is found or all actor records are tried. As explained above, due to -* the limited ranges of these values, checking a byte is acceptable and suitable. -*8: depending on whether a match was found or not (as reflected by the value of the control variable of the -* for loop), the NULL pointer or a pointer to the matching Number/Bottom/Top record of the Actor structure -* is returned. -* As an additional safety, checking the supplier length protects against invalid Supplier structures, which -* may be caused by failing hcf_get_info (in which case the len-field is zero). Note that the contraption -* "supp->len != sizeof(CFG_SUP_RANGE_STRCT)/sizeof(hcf_16) - 1" -* did turn out not to work for a compiler which padded the structure definition. -* -* Note: when consulting references like DesignNotes and Architecture specifications there is a confusing use -* of the notions number and variant. This resulted in an inconsistent use in the HCF nomenclature as well. -* This makes the logic hard to follow and one has to be very much aware of the context when walking through -* the code. -* NOTE: The Endian Detection Algorithm places limitations on future extensions of the fields, i.e. they should -* stay within the currently defined boundaries of 1 through 99 (although 1 through 255) would work as well -* and there should never be used a zero value for the bottom of a valid supplier. -* Note: relative to Asserts, the following can be observed: -* 1: Supplier variant 0x0000 has been used for Controlled Deployment -* 2: An actor may have one or more variant record specifications with a top of zero and a non-zero bottom -* to override the HCF default support of a particular variant by the MSF programmer via hcfcfg.h -* 3: An actor range can be specified as all zeros, e.g. as padding in the automatically generated firmware -* image files. -*.ENDDOC END DOCUMENTATION -*************************************************************************************************************/ -CFG_RANGE_SPEC_STRCT* -mmd_check_comp( CFG_RANGES_STRCT *actp, CFG_SUP_RANGE_STRCT *supp ) -{ - -CFG_RANGE_SPEC_BYTE_STRCT *actq = (CFG_RANGE_SPEC_BYTE_STRCT*)actp->var_rec; -CFG_RANGE_SPEC_BYTE_STRCT *supq = (CFG_RANGE_SPEC_BYTE_STRCT*)&(supp->variant); -hcf_16 i; -int act_endian; //actor endian flag -int sup_endian; //supplier endian flag - - act_endian = actp->role == COMP_ROLE_ACT; //true if native endian /* 1a */ - sup_endian = supp->bottom < 0x0100; //true if native endian /* 2a */ - -#if HCF_ASSERT - MMDASSERT( supp->len == 6, supp->len ) - MMDASSERT( actp->len >= 6 && actp->len%3 == 0, actp->len ) - - if ( act_endian ) { //native endian - MMDASSERT( actp->role == COMP_ROLE_ACT, actp->role ) - MMDASSERT( 1 <= actp->id && actp->id <= 99, actp->id ) - } else { //non-native endian - MMDASSERT( actp->role == CNV_END_SHORT(COMP_ROLE_ACT), actp->role ) - MMDASSERT( 1 <= CNV_END_SHORT(actp->id) && CNV_END_SHORT(actp->id) <= 99, actp->id ) - } - if ( sup_endian ) { //native endian - MMDASSERT( supp->role == COMP_ROLE_SUPL, supp->role ) - MMDASSERT( 1 <= supp->id && supp->id <= 99, supp->id ) - MMDASSERT( 1 <= supp->variant && supp->variant <= 99, supp->variant ) - MMDASSERT( 1 <= supp->bottom && supp->bottom <= 99, supp->bottom ) - MMDASSERT( 1 <= supp->top && supp->top <= 99, supp->top ) - MMDASSERT( supp->bottom <= supp->top, supp->bottom << 8 | supp->top ) - } else { //non-native endian - MMDASSERT( supp->role == CNV_END_SHORT(COMP_ROLE_SUPL), supp->role ) - MMDASSERT( 1 <= CNV_END_SHORT(supp->id) && CNV_END_SHORT(supp->id) <= 99, supp->id ) - MMDASSERT( 1 <= CNV_END_SHORT(supp->variant) && CNV_END_SHORT(supp->variant) <= 99, supp->variant ) - MMDASSERT( 1 <= CNV_END_SHORT(supp->bottom) && CNV_END_SHORT(supp->bottom) <=99, supp->bottom ) - MMDASSERT( 1 <= CNV_END_SHORT(supp->top) && CNV_END_SHORT(supp->top) <=99, supp->top ) - MMDASSERT( CNV_END_SHORT(supp->bottom) <= CNV_END_SHORT(supp->top), supp->bottom << 8 | supp->top ) - } -#endif // HCF_ASSERT - -#if HCF_BIG_ENDIAN == 0 - act_endian = !act_endian; /* 1b*/ - sup_endian = !sup_endian; /* 2b*/ -#endif // HCF_BIG_ENDIAN - - for ( i = actp->len ; i > 3; actq++, i -= 3 ) { /* 6 */ - MMDASSERT( actq->variant[act_endian] <= 99, i<<8 | actq->variant[act_endian] ) - MMDASSERT( actq->bottom[act_endian] <= 99 , i<<8 | actq->bottom[act_endian] ) - MMDASSERT( actq->top[act_endian] <= 99 , i<<8 | actq->top[act_endian] ) - MMDASSERT( actq->bottom[act_endian] <= actq->top[act_endian], i<<8 | actq->bottom[act_endian] ) - if ( actq->variant[act_endian] == supq->variant[sup_endian] && - actq->bottom[act_endian] <= supq->top[sup_endian] && - actq->top[act_endian] >= supq->bottom[sup_endian] - ) break; - } - if ( i <= 3 || supp->len != 6 /*sizeof(CFG_SUP_RANGE_STRCT)/sizeof(hcf_16) - 1 */ ) { - actq = NULL; /* 8 */ - } -#if HCF_ASSERT - if ( actq == NULL ) { - for ( i = 0; i <= supp->len; i += 2 ) { - MMDASSERT( DO_ASSERT, MERGE_2( ((hcf_16*)supp)[i], ((hcf_16*)supp)[i+1] ) ); - } - for ( i = 0; i <= actp->len; i += 2 ) { - MMDASSERT( DO_ASSERT, MERGE_2( ((hcf_16*)actp)[i], ((hcf_16*)actp)[i+1] ) ); - } - } -#endif // HCF_ASSERT - return (CFG_RANGE_SPEC_STRCT*)actq; -} // mmd_check_comp - diff --git a/drivers/staging/wlags49_h2/mmd.h b/drivers/staging/wlags49_h2/mmd.h deleted file mode 100644 index 14458035d9e9..000000000000 --- a/drivers/staging/wlags49_h2/mmd.h +++ /dev/null @@ -1,77 +0,0 @@ - -#ifndef MMD_H -#define MMD_H 1 - -/************************************************************************************************************* -* -* FILE : mmd.h -* -* DATE : $Date: 2004/07/19 08:16:14 $ $Revision: 1.2 $ -* Original: 2004/05/17 07:33:14 Revision: 1.18 Tag: hcf7_t20040602_01 -* Original: 2004/05/11 06:22:59 Revision: 1.17 Tag: hcf7_t7_20040513_01 -* Original: 2004/04/15 09:24:42 Revision: 1.13 Tag: hcf7_t7_20040415_01 -* Original: 2004/04/08 15:18:17 Revision: 1.12 Tag: t7_20040413_01 -* Original: 2004/04/01 15:32:55 Revision: 1.10 Tag: t7_20040401_01 -* Original: 2004/03/04 16:47:50 Revision: 1.7 Tag: t20040310_01 -* Original: 2004/03/03 12:47:05 Revision: 1.6 Tag: t20040304_01 -* Original: 2004/02/25 14:14:39 Revision: 1.5 Tag: t20040302_03 -* Original: 2004/02/24 13:00:29 Revision: 1.4 Tag: t20040224_01 -* Original: 2004/01/30 09:59:33 Revision: 1.3 Tag: t20040219_01 -* -* AUTHOR : Nico Valster -* -* DESC : Definitions and Prototypes for HCF, MSF, UIL as well as USF sources -* -*************************************************************************************************************** -* -* -* SOFTWARE LICENSE -* -* This software is provided subject to the following terms and conditions, -* which you should read carefully before using the software. Using this -* 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 © 2001 - 2004 by Agere Systems Inc. All Rights Reserved -* All rights reserved. -* -* Redistribution and use in source or binary forms, with or without -* modifications, are permitted provided that the following conditions are met: -* -* . Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following Disclaimer as comments in the code as -* well as in the documentation and/or other materials provided with the -* distribution. -* -* . Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following Disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* . Neither the name of Agere Systems Inc. nor the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* Disclaimer -* -* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -* INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY -* USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN -* RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* -**************************************************************************************************************/ -#ifndef HCF_H -#include "hcf.h" //just to get going with swig -#endif - -EXTERN_C CFG_RANGE_SPEC_STRCT* mmd_check_comp( CFG_RANGES_STRCT *actp, CFG_SUP_RANGE_STRCT *supp ); - -#endif // MMD_H diff --git a/drivers/staging/wlags49_h2/sta_h2.c b/drivers/staging/wlags49_h2/sta_h2.c deleted file mode 100644 index 0ba8defc023a..000000000000 --- a/drivers/staging/wlags49_h2/sta_h2.c +++ /dev/null @@ -1,4480 +0,0 @@ -/* - * File: sta_h24.236 - * - * Abstract: This file contains memory image 'fw_image'. - * - * Contents: Total size of the memory image: 69294 bytes. - * Total number of blocks: 4 blocks. - * Block 1 : load address 00000060, 390 bytes. - * Block 2 : load address 00000C16, 9496 bytes. - * Block 3 : load address 001E312E, 15786 bytes. - * Block 4 : load address 001F4000, 43622 bytes. - * - * Identity: component id: 31 (variant 3) version 2.36 - * - * Compatibility: - * supplying interface 4 (variant 2) : 2 - 5 - * acting on interface 1 (variant 4) : 6 - 7 - * acting on interface 1 (variant 5) : 6 - 7 - * acting on interface 1 (variant 6) : 6 - 7 - * acting on interface 2 (variant 2) : 1 - 2 - * - * Generated: by g:\fw\fupu3.exe version 4.26 - * - * Commandline: g:\fw\fupu3.exe /f=4 /n=fw_image /i=r3023600.hex - */ - - -#include "hcfcfg.h" /* to get hcf_16 etc defined as well as */ - /* possible settings which influence 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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0D, 0x00, 0x00, - 0x3A, 0x0C, 0x00, 0x00, 0x3A, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x86, 0x19, 0x86, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xEA, 0x00, 0x00, 0xFF, 0x07, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x10, 0x27, 0x10, 0x27, - 0x14, 0x00, 0xD0, 0x07, 0xD0, 0x07, 0x10, 0x27, 0x2F, 0x00, 0x32, 0x00, 0x32, 0x00, 0x05, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x10, 0x27, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x13, 0x00, 0x0A, 0x00, - 0x07, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x09, 0x2B, 0x09, 0x2B, 0x09, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x14, 0x01, 0x00, 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_1_data */ - -static const hcf_8 fw_image_2_data[] = { - 0x4B, 0xA3, 0x00, 0x0A, 0x10, 0x01, 0x68, 0xA4, 0xB0, 0x01, 0x84, 0x01, 0x30, 0x33, 0x31, 0x33, - 0x44, 0x44, 0x30, 0x33, 0x31, 0x33, 0x30, 0x33, 0x31, 0x33, 0x32, 0x33, 0x32, 0x33, 0x90, 0x00, - 0x78, 0x04, 0xAE, 0xE4, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC6, 0x84, 0xF8, 0x99, 0xEE, - 0x8D, 0xF6, 0x0D, 0xFF, 0xBD, 0xD6, 0xB1, 0xDE, 0x54, 0x91, 0x50, 0x60, 0x03, 0x02, 0xA9, 0xCE, - 0x7D, 0x56, 0x19, 0xE7, 0x62, 0xB5, 0xE6, 0x4D, 0x9A, 0xEC, 0x45, 0x8F, 0x9D, 0x1F, 0x40, 0x89, - 0x87, 0xFA, 0x15, 0xEF, 0xEB, 0xB2, 0xC9, 0x8E, 0x0B, 0xFB, 0xEC, 0x41, 0x67, 0xB3, 0xFD, 0x5F, - 0xEA, 0x45, 0xBF, 0x23, 0xF7, 0x53, 0x96, 0xE4, 0x5B, 0x9B, 0xC2, 0x75, 0x1C, 0xE1, 0xAE, 0x3D, - 0x6A, 0x4C, 0x5A, 0x6C, 0x41, 0x7E, 0x02, 0xF5, 0x4F, 0x83, 0x5C, 0x68, 0xF4, 0x51, 0x34, 0xD1, - 0x08, 0xF9, 0x93, 0xE2, 0x73, 0xAB, 0x53, 0x62, 0x3F, 0x2A, 0x0C, 0x08, 0x52, 0x95, 0x65, 0x46, - 0x5E, 0x9D, 0x28, 0x30, 0xA1, 0x37, 0x0F, 0x0A, 0xB5, 0x2F, 0x09, 0x0E, 0x36, 0x24, 0x9B, 0x1B, - 0x3D, 0xDF, 0x26, 0xCD, 0x69, 0x4E, 0xCD, 0x7F, 0x9F, 0xEA, 0x1B, 0x12, 0x9E, 0x1D, 0x74, 0x58, - 0x2E, 0x34, 0x2D, 0x36, 0xB2, 0xDC, 0xEE, 0xB4, 0xFB, 0x5B, 0xF6, 0xA4, 0x4D, 0x76, 0x61, 0xB7, - 0xCE, 0x7D, 0x7B, 0x52, 0x3E, 0xDD, 0x71, 0x5E, 0x97, 0x13, 0xF5, 0xA6, 0x68, 0xB9, 0x00, 0x00, - 0x2C, 0xC1, 0x60, 0x40, 0x1F, 0xE3, 0xC8, 0x79, 0xED, 0xB6, 0xBE, 0xD4, 0x46, 0x8D, 0xD9, 0x67, - 0x4B, 0x72, 0xDE, 0x94, 0xD4, 0x98, 0xE8, 0xB0, 0x4A, 0x85, 0x6B, 0xBB, 0x2A, 0xC5, 0xE5, 0x4F, - 0x16, 0xED, 0xC5, 0x86, 0xD7, 0x9A, 0x55, 0x66, 0x94, 0x11, 0xCF, 0x8A, 0x10, 0xE9, 0x06, 0x04, - 0x81, 0xFE, 0xF0, 0xA0, 0x44, 0x78, 0xBA, 0x25, 0xE3, 0x4B, 0xF3, 0xA2, 0xFE, 0x5D, 0xC0, 0x80, - 0x8A, 0x05, 0xAD, 0x3F, 0xBC, 0x21, 0x48, 0x70, 0x04, 0xF1, 0xDF, 0x63, 0xC1, 0x77, 0x75, 0xAF, - 0x63, 0x42, 0x30, 0x20, 0x1A, 0xE5, 0x0E, 0xFD, 0x6D, 0xBF, 0x4C, 0x81, 0x14, 0x18, 0x35, 0x26, - 0x2F, 0xC3, 0xE1, 0xBE, 0xA2, 0x35, 0xCC, 0x88, 0x39, 0x2E, 0x57, 0x93, 0xF2, 0x55, 0x82, 0xFC, - 0x47, 0x7A, 0xAC, 0xC8, 0xE7, 0xBA, 0x2B, 0x32, 0x95, 0xE6, 0xA0, 0xC0, 0x98, 0x19, 0xD1, 0x9E, - 0x7F, 0xA3, 0x66, 0x44, 0x7E, 0x54, 0xAB, 0x3B, 0x83, 0x0B, 0xCA, 0x8C, 0x29, 0xC7, 0xD3, 0x6B, - 0x3C, 0x28, 0x79, 0xA7, 0xE2, 0xBC, 0x1D, 0x16, 0x76, 0xAD, 0x3B, 0xDB, 0x56, 0x64, 0x4E, 0x74, - 0x1E, 0x14, 0xDB, 0x92, 0x0A, 0x0C, 0x6C, 0x48, 0xE4, 0xB8, 0x5D, 0x9F, 0x6E, 0xBD, 0xEF, 0x43, - 0xA6, 0xC4, 0xA8, 0x39, 0xA4, 0x31, 0x37, 0xD3, 0x8B, 0xF2, 0x32, 0xD5, 0x43, 0x8B, 0x59, 0x6E, - 0xB7, 0xDA, 0x8C, 0x01, 0x64, 0xB1, 0xD2, 0x9C, 0xE0, 0x49, 0xB4, 0xD8, 0xFA, 0xAC, 0x07, 0xF3, - 0x25, 0xCF, 0xAF, 0xCA, 0x8E, 0xF4, 0xE9, 0x47, 0x18, 0x10, 0xD5, 0x6F, 0x88, 0xF0, 0x6F, 0x4A, - 0x72, 0x5C, 0x24, 0x38, 0xF1, 0x57, 0xC7, 0x73, 0x51, 0x97, 0x23, 0xCB, 0x7C, 0xA1, 0x9C, 0xE8, - 0x21, 0x3E, 0xDD, 0x96, 0xDC, 0x61, 0x86, 0x0D, 0x85, 0x0F, 0x90, 0xE0, 0x42, 0x7C, 0xC4, 0x71, - 0xAA, 0xCC, 0xD8, 0x90, 0x05, 0x06, 0x01, 0xF7, 0x12, 0x1C, 0xA3, 0xC2, 0x5F, 0x6A, 0xF9, 0xAE, - 0xD0, 0x69, 0x91, 0x17, 0x58, 0x99, 0x27, 0x3A, 0xB9, 0x27, 0x38, 0xD9, 0x13, 0xEB, 0xB3, 0x2B, - 0x33, 0x22, 0xBB, 0xD2, 0x70, 0xA9, 0x89, 0x07, 0xA7, 0x33, 0xB6, 0x2D, 0x22, 0x3C, 0x92, 0x15, - 0x20, 0xC9, 0x49, 0x87, 0xFF, 0xAA, 0x78, 0x50, 0x7A, 0xA5, 0x8F, 0x03, 0xF8, 0x59, 0x80, 0x09, - 0x17, 0x1A, 0xDA, 0x65, 0x31, 0xD7, 0xC6, 0x84, 0xB8, 0xD0, 0xC3, 0x82, 0xB0, 0x29, 0x77, 0x5A, - 0x11, 0x1E, 0xCB, 0x7B, 0xFC, 0xA8, 0xD6, 0x6D, 0x3A, 0x2C, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, - 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3A, 0x00, 0x3B, - 0x00, 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x3F, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x02, 0x14, - 0x05, 0x32, 0x0B, 0x37, 0x08, 0x50, 0x0B, 0x6E, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x3F, 0x00, - 0x0C, 0x00, 0x30, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x02, 0x00, 0x04, 0x00, - 0x0A, 0x00, 0x0B, 0x00, 0x10, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x63, 0x00, 0x20, 0x00, 0x63, 0x00, 0x63, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x10, - 0xEE, 0x10, 0xA6, 0x10, 0xE8, 0x10, 0xAC, 0x10, 0xE2, 0x10, 0xB2, 0x10, 0xDC, 0x10, 0xB8, 0x10, - 0xD6, 0x10, 0xBE, 0x10, 0xD0, 0x10, 0xC4, 0x10, 0xCA, 0x10, 0x07, 0x01, 0x00, 0x00, 0x0A, 0x22, - 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x0A, 0x2A, - 0x00, 0x04, 0x0A, 0x01, 0x00, 0x00, 0x0A, 0x2E, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x00, 0x10, 0x24, - 0x04, 0x04, 0x0C, 0x01, 0x00, 0x00, 0x10, 0x28, 0x04, 0x04, 0x0D, 0x01, 0x00, 0x00, 0x10, 0x2C, - 0x04, 0x04, 0x0E, 0x01, 0x00, 0x00, 0x10, 0x30, 0x04, 0x04, 0x0F, 0x01, 0x00, 0x00, 0x16, 0x34, - 0x08, 0x04, 0x10, 0x01, 0x00, 0x00, 0x16, 0x38, 0x08, 0x04, 0x11, 0x01, 0x00, 0x00, 0x16, 0x3C, - 0x08, 0x04, 0x12, 0x01, 0x00, 0x00, 0x16, 0x40, 0x08, 0x04, 0x13, 0x01, 0x00, 0x00, 0x17, 0x64, - 0x0C, 0x0B, 0x14, 0x01, 0x00, 0x00, 0x17, 0x68, 0x0C, 0x0B, 0x15, 0x01, 0x00, 0x00, 0x17, 0x6C, - 0x0C, 0x0B, 0x16, 0x01, 0x00, 0x00, 0x17, 0x70, 0x0C, 0x0B, 0x17, 0x01, 0x00, 0x00, 0x17, 0x74, - 0x0C, 0x0B, 0x18, 0x01, 0x00, 0x00, 0x17, 0x78, 0x0C, 0x0B, 0x19, 0x01, 0x00, 0x00, 0x17, 0x7C, - 0x0C, 0x0B, 0x1A, 0x01, 0x00, 0x00, 0x17, 0x80, 0x0C, 0x0B, 0x1B, 0x01, 0x00, 0x00, 0x17, 0x84, - 0x0C, 0x0B, 0x1C, 0x01, 0x00, 0x00, 0x17, 0x88, 0x0C, 0x0B, 0x1D, 0x01, 0x00, 0x00, 0x17, 0x8C, - 0x0C, 0x0B, 0x1E, 0x01, 0x00, 0x00, 0x1D, 0x95, 0x17, 0x04, 0x1F, 0x01, 0x00, 0x00, 0x1D, 0x99, - 0x17, 0x04, 0x20, 0x01, 0x00, 0x00, 0x1D, 0x9D, 0x17, 0x04, 0x21, 0x01, 0x00, 0x00, 0x1D, 0xA1, - 0x17, 0x04, 0x22, 0x01, 0x00, 0x00, 0x0E, 0xA5, 0x00, 0x00, 0x10, 0x11, 0x30, 0x11, 0x50, 0x11, - 0x70, 0x11, 0xC8, 0x11, 0x18, 0x11, 0x38, 0x11, 0x58, 0x11, 0x78, 0x11, 0xD0, 0x11, 0x20, 0x11, - 0x40, 0x11, 0x60, 0x11, 0x80, 0x11, 0xD8, 0x11, 0x28, 0x11, 0x48, 0x11, 0x68, 0x11, 0x88, 0x11, - 0xE0, 0x11, 0x90, 0x11, 0x98, 0x11, 0xA0, 0x11, 0xA8, 0x11, 0xB0, 0x11, 0xB8, 0x11, 0xC0, 0x11, - 0xE8, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x36, 0x25, 0x4F, 0x25, 0x72, 0x25, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xAC, 0x25, - 0x02, 0x2B, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xF3, 0x2D, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0xE1, 0x24, 0x8B, 0x27, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0xE1, 0x24, 0xE5, 0x27, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0x59, 0x27, 0x73, 0x27, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, 0xE1, 0x24, - 0xE1, 0x24, 0x47, 0x23, 0xCE, 0x25, 0xE1, 0x25, 0x91, 0x26, 0x95, 0x26, 0xE1, 0x24, 0xE1, 0x24, - 0x44, 0x27, 0x51, 0xEA, 0xFF, 0xE9, 0x00, 0x00, 0x48, 0xEA, 0x00, 0x00, 0x00, 0x00, 0xC9, 0xEA, - 0x65, 0x25, 0x89, 0x25, 0x00, 0x00, 0xF8, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x13, 0x2B, 0xE0, 0xFC, - 0x4C, 0x28, 0xC6, 0x2A, 0x5A, 0x00, 0x02, 0x00, 0xF9, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0x00, 0x01, - 0x02, 0x00, 0xF7, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0x50, 0x28, 0x06, 0x00, 0xF0, 0xFF, 0x4C, 0x28, - 0x29, 0x28, 0x00, 0x00, 0x00, 0x02, 0xF6, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0x6C, 0x00, 0x02, 0x00, - 0xF4, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0xAA, 0x01, 0x02, 0x00, 0xF5, 0xFF, 0x4C, 0x28, 0xCF, 0x2A, - 0x42, 0x28, 0x02, 0x00, 0xE0, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0xCE, 0x2D, 0x02, 0x00, 0xE1, 0xFF, - 0x4C, 0x28, 0x62, 0x28, 0xD0, 0x2D, 0x02, 0x00, 0xE2, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0xD2, 0x2D, - 0x02, 0x00, 0xE3, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0xCA, 0x2D, 0x02, 0x00, 0x03, 0xFC, 0x4C, 0x28, - 0x17, 0x2A, 0x16, 0x2D, 0x02, 0x00, 0x04, 0xFC, 0x4C, 0x28, 0x5C, 0x28, 0x58, 0x28, 0x22, 0x00, - 0x06, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0x40, 0x28, 0x02, 0x00, 0x07, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0x9C, 0x28, 0x02, 0x00, 0x0E, 0xFC, 0x4C, 0x28, 0x29, 0x2A, 0xA6, 0x28, 0x22, 0x00, 0xB1, 0xFC, - 0x4C, 0x28, 0x1D, 0x2B, 0xA2, 0x29, 0x02, 0x00, 0x20, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xCC, 0x28, - 0x02, 0x00, 0x25, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xD6, 0x28, 0x02, 0x00, 0x26, 0xFC, 0x4C, 0x28, - 0x62, 0x28, 0xD8, 0x28, 0x02, 0x00, 0x27, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xDA, 0x28, 0x02, 0x00, - 0xB2, 0xFC, 0x4C, 0x28, 0x5C, 0x28, 0xC6, 0x29, 0x22, 0x00, 0xC1, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0x5A, 0x2D, 0x20, 0x00, 0xB0, 0xFC, 0x1F, 0x28, 0x22, 0x2B, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xFC, - 0x1F, 0x28, 0xE7, 0x2A, 0x00, 0x00, 0x08, 0x00, 0xC8, 0xFC, 0x1F, 0x28, 0xE2, 0x2A, 0x00, 0x00, - 0x08, 0x00, 0xB4, 0xFC, 0x1F, 0x28, 0x60, 0x2B, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xFC, 0x1F, 0x28, - 0x11, 0x2C, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xFC, 0x1F, 0x28, 0x3B, 0x2C, 0x00, 0x00, 0x00, 0x00, - 0xB8, 0xFC, 0x1F, 0x28, 0x98, 0x2C, 0x00, 0x00, 0x00, 0x00, 0xB5, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0xC6, 0x2D, 0x02, 0x00, 0xB9, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xC8, 0x2D, 0x02, 0x00, 0x90, 0xFD, - 0x4C, 0x28, 0x29, 0x28, 0xCC, 0x2D, 0x02, 0x00, 0x23, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xD2, 0x28, - 0x02, 0x00, 0x29, 0xFC, 0x44, 0x29, 0xF1, 0x28, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFC, 0x4C, 0x28, - 0x62, 0x28, 0x0E, 0x2D, 0x02, 0x00, 0x32, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xA0, 0x01, 0x02, 0x00, - 0x33, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xA2, 0x01, 0x02, 0x00, 0x00, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0x56, 0x28, 0x02, 0x00, 0x01, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0x50, 0x28, 0x06, 0x00, 0x02, 0xFC, - 0x4C, 0x28, 0xDC, 0x28, 0xA4, 0x29, 0x22, 0x00, 0x05, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0x46, 0x28, - 0x02, 0x00, 0x08, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0x4A, 0x28, 0x06, 0x00, 0x09, 0xFC, 0x4C, 0x28, - 0x62, 0x28, 0x9E, 0x28, 0x02, 0x00, 0x0B, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xA0, 0x28, 0x02, 0x00, - 0x0C, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xA2, 0x28, 0x02, 0x00, 0x0D, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0xA4, 0x28, 0x02, 0x00, 0x21, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xCE, 0x28, 0x02, 0x00, 0x80, 0xFC, - 0xB8, 0x28, 0xC8, 0x28, 0xE2, 0x28, 0xC0, 0x00, 0x81, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xA8, 0x01, - 0x02, 0x00, 0x83, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xAC, 0x01, 0x02, 0x00, 0x85, 0xFC, 0x4C, 0x28, - 0x49, 0x2A, 0xA6, 0x01, 0x02, 0x00, 0x86, 0xFC, 0x4C, 0x28, 0x5B, 0x2A, 0xB2, 0x01, 0x02, 0x00, - 0x28, 0xFC, 0x4C, 0x28, 0x62, 0x28, 0xDC, 0x28, 0x02, 0x00, 0x87, 0xFC, 0x4C, 0x28, 0x62, 0x28, - 0xEC, 0x29, 0x22, 0x03, 0x84, 0xFC, 0x4C, 0x28, 0x70, 0x2A, 0xB0, 0x01, 0x02, 0x00, 0x2B, 0xFC, - 0x4C, 0x28, 0x62, 0x28, 0x14, 0x31, 0x02, 0x00, 0xF8, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0x0E, 0x31, - 0x02, 0x00, 0xF3, 0xFF, 0x4C, 0x28, 0x62, 0x28, 0x16, 0x31, 0x02, 0x00, 0x20, 0xFD, 0x7D, 0x28, - 0x29, 0x28, 0x23, 0x34, 0x08, 0x00, 0x21, 0xFD, 0x7D, 0x28, 0x29, 0x28, 0x27, 0x34, 0x0A, 0x00, - 0x22, 0xFD, 0x7D, 0x28, 0x29, 0x28, 0x2C, 0x34, 0x16, 0x00, 0x23, 0xFD, 0x7D, 0x28, 0x29, 0x28, - 0x37, 0x34, 0x0A, 0x00, 0x10, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x74, 0x01, 0x02, 0x00, 0x45, 0xFD, - 0x4C, 0x28, 0x29, 0x28, 0x00, 0x01, 0x02, 0x00, 0x47, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x78, 0x01, - 0x02, 0x00, 0x48, 0xFD, 0x9A, 0x29, 0x29, 0x28, 0xA0, 0x01, 0x02, 0x00, 0x49, 0xFD, 0x9A, 0x29, - 0x29, 0x28, 0xA2, 0x01, 0x02, 0x00, 0x4A, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x98, 0x01, 0x02, 0x00, - 0x4B, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x9A, 0x01, 0x02, 0x00, 0x4D, 0xFD, 0x7D, 0x28, 0x29, 0x28, - 0x3C, 0x34, 0x04, 0x00, 0x4F, 0xFD, 0xAE, 0x29, 0x29, 0x28, 0x1A, 0x2D, 0x02, 0x00, 0xC0, 0xFD, - 0x7D, 0x28, 0x29, 0x28, 0x3E, 0x34, 0x02, 0x00, 0xC2, 0xFD, 0xA4, 0x29, 0x29, 0x28, 0x00, 0x00, - 0x02, 0x00, 0xC3, 0xFD, 0x7D, 0x28, 0x29, 0x28, 0x3F, 0x34, 0x02, 0x00, 0x40, 0xFD, 0x75, 0x28, - 0x29, 0x28, 0xB8, 0x01, 0x02, 0x00, 0x24, 0xFD, 0xCB, 0x29, 0x29, 0x28, 0x00, 0x00, 0x02, 0x00, - 0x91, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x20, 0x24, 0x02, 0x00, 0x93, 0xFD, 0x4C, 0x28, 0x29, 0x28, - 0x26, 0x24, 0x02, 0x00, 0xC1, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0xFE, 0x00, 0x02, 0x00, 0xC6, 0xFD, - 0xAA, 0x28, 0x29, 0x28, 0x28, 0x2D, 0x0A, 0x00, 0x89, 0xFD, 0x5B, 0x29, 0x29, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x8A, 0xFD, 0x9A, 0x28, 0x29, 0x28, 0xA0, 0x2D, 0x24, 0x00, 0x41, 0xFD, 0x4C, 0x28, - 0x29, 0x28, 0x7A, 0x2D, 0x22, 0x00, 0x42, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x02, 0x01, 0x06, 0x00, - 0x43, 0xFD, 0xD8, 0x29, 0x29, 0x28, 0x00, 0x00, 0x06, 0x00, 0x44, 0xFD, 0xB8, 0x29, 0x29, 0x28, - 0xB4, 0x01, 0x02, 0x00, 0x46, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0xBA, 0x01, 0x0C, 0x00, 0x4C, 0xFD, - 0x4C, 0x28, 0x29, 0x28, 0xEA, 0x29, 0x02, 0x00, 0x50, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0xF4, 0x00, - 0x02, 0x00, 0x51, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0xF6, 0x00, 0x02, 0x00, 0x52, 0xFD, 0x4C, 0x28, - 0x29, 0x28, 0xC6, 0x01, 0x02, 0x00, 0x8F, 0xFD, 0xEB, 0x29, 0x29, 0x28, 0x00, 0x00, 0x08, 0x00, - 0x92, 0xFD, 0x4C, 0x28, 0x29, 0x28, 0x54, 0x2D, 0x02, 0x00, 0x8C, 0xFD, 0x3F, 0x28, 0x29, 0x28, - 0x08, 0x2E, 0x56, 0x00, 0x8D, 0xFD, 0x3F, 0x28, 0x29, 0x28, 0x62, 0x2E, 0x14, 0x00, 0x00, 0xF1, - 0x46, 0x00, 0xE3, 0x27, 0x3A, 0x01, 0x01, 0xF1, 0x44, 0x07, 0xE1, 0x27, 0x3C, 0x01, 0x00, 0x03, - 0x2A, 0x68, 0x1E, 0x00, 0x76, 0x01, 0xFE, 0x00, 0xD6, 0x01, 0x02, 0x01, 0x3E, 0x01, 0xB8, 0x01, - 0x74, 0x27, 0x5A, 0x01, 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, 0xBA, 0x1C, 0x00, 0x00, 0xBE, 0x1E, - 0x54, 0x01, 0x0B, 0x00, 0xBA, 0x00, 0xE4, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xAF, 0x37, 0xAF, 0x43, 0xB0, - 0x4C, 0xB0, 0x48, 0xAF, 0xDE, 0xAF, 0xB6, 0xAF, 0x1C, 0x33, 0x7F, 0x32, 0x1C, 0x33, 0xF3, 0x32, - 0x89, 0x32, 0x7D, 0x32, 0x3B, 0x33, 0x4C, 0x33, 0x4C, 0x33, 0x4C, 0x33, 0x55, 0x33, 0x70, 0x33, - 0xCD, 0x33, 0xE9, 0x33, 0xF4, 0x32, 0x07, 0x33, 0xDB, 0x32, 0x10, 0x00, 0x12, 0x00, 0x13, 0x00, - 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, - 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x14, 0x01, - 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0x14, 0x01, 0xF3, 0x02, - 0xAD, 0x03, 0x60, 0x04, 0x04, 0x05, 0x07, 0x06, 0x08, 0x07, 0x0A, 0x08, 0x16, 0x09, 0x44, 0x0A, - 0x04, 0x0B, 0x40, 0x0C, 0x80, 0x0D, 0x00, 0x0E, 0x84, 0x0F, 0x01, 0x10, 0x10, 0x11, 0x02, 0x14, - 0x40, 0x20, 0x32, 0x21, 0x32, 0x22, 0x04, 0x23, 0x01, 0x24, 0x0F, 0x25, 0x00, 0x26, 0x00, 0x27, - 0x00, 0x28, 0x00, 0x29, 0x00, 0x2A, 0x01, 0x2B, 0x06, 0x2C, 0x00, 0x38, 0x00, 0x39, 0xD6, 0x3A, - 0x00, 0x3B, 0x00, 0x3C, 0x14, 0x3D, 0x7F, 0x3E, 0x00, 0x3F, 0x68, 0x40, 0x75, 0x41, 0x07, 0x42, - 0x07, 0x43, 0x00, 0x45, 0x3B, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x0F, 0x4D, 0x02, 0x75, 0x00, 0x76, - 0x80, 0x00, 0x08, 0x01, 0x09, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0B, 0x01, 0x0B, 0x01, - 0x0C, 0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x0F, 0x01, - 0x10, 0x01, 0x10, 0x01, 0x11, 0x01, 0x11, 0x01, 0x12, 0x01, 0x12, 0x01, 0x13, 0x01, 0x13, 0x01, - 0x14, 0x01, 0x14, 0x01, 0x15, 0x01, 0x15, 0x01, 0x16, 0x01, 0x16, 0x01, 0x17, 0x01, 0x17, 0x01, - 0x18, 0x01, 0x18, 0x01, 0x19, 0x01, 0x19, 0x01, 0x4D, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4E, 0x01, - 0x4F, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x50, 0x01, 0x51, 0x01, 0x51, 0x01, 0x52, 0x01, 0x52, 0x01, - 0x53, 0x01, 0x53, 0x01, 0x54, 0x01, 0x54, 0x01, 0x65, 0x01, 0x65, 0x01, 0x66, 0x01, 0x66, 0x01, - 0x67, 0x01, 0x67, 0x01, 0x68, 0x01, 0x68, 0x01, 0x69, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6A, 0x01, - 0x6B, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6C, 0x01, 0x6D, 0x01, 0x6D, 0x01, 0x6E, 0x01, 0x6E, 0x01, - 0x6F, 0x01, 0x6F, 0x01, 0x70, 0x01, 0x70, 0x01, 0x71, 0x01, 0x71, 0x01, 0x72, 0x01, 0x72, 0x01, - 0x73, 0x01, 0x73, 0x01, 0x74, 0x01, 0x74, 0x01, 0x75, 0x01, 0x75, 0x01, 0x76, 0x01, 0x76, 0x01, - 0x77, 0x01, 0x77, 0x01, 0x78, 0x01, 0x78, 0x01, 0x79, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7A, 0x01, - 0x7B, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7C, 0x01, 0x7D, 0x01, 0x7D, 0x01, 0x7E, 0x01, 0x7E, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, 0x7F, 0x01, - 0x7F, 0x01, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, - 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x13, - 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, - 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, - 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, - 0x51, 0x44, 0x51, 0x44, 0x51, 0x44, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, - 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x23, 0x46, 0x23, 0x46, - 0x23, 0x46, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1D, 0x47, 0x9A, 0x48, - 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, - 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0x33, 0x48, 0x78, 0x49, 0x78, 0x49, 0x79, 0x49, - 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7B, 0x49, - 0x7B, 0x49, 0x7B, 0x49, 0x7C, 0x49, 0x32, 0x00, 0x46, 0x00, 0x5A, 0x00, 0x6E, 0x00, 0x82, 0x00, - 0x96, 0x00, 0xAA, 0x00, 0xBE, 0x00, 0xD2, 0x00, 0xE6, 0x00, 0xFA, 0x00, 0x0E, 0x01, 0x22, 0x01, - 0x52, 0x01, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, - 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, - 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, 0x57, 0x61, 0x76, 0x65, 0x4C, 0x41, 0x4E, 0x20, 0x49, 0x49, - 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x02, 0x01, 0x82, 0x84, 0x8B, 0x96, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x85, 0x00, 0x01, - 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x01, - 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x53, 0x65, 0x74, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0xDD, 0x00, 0x50, 0xF2, 0x01, - 0x01, 0x00, 0x00, 0x50, 0xF2, 0x05, 0x02, 0x00, 0x00, 0x50, 0xF2, 0x02, 0x00, 0x50, 0xF2, 0x04, - 0x02, 0x00, 0x00, 0x50, 0xF2, 0x00, 0x00, 0x50, 0xF2, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x14, 0x00, 0x15, 0x00, 0x36, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x14, 0x00, - 0x11, 0x00, 0x36, 0x00, 0x01, 0x00, 0x04, 0x00, 0x7A, 0x2D, 0x28, 0x2D, 0x0C, 0x2F, 0x10, 0x2F, - 0x14, 0x2F, 0xA0, 0x2D, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x29, 0x28, 0x2D, - 0xFF, 0xFF, 0x00, 0x00, 0x7A, 0x2D, 0x28, 0x2D, 0x0C, 0x2F, 0x10, 0x2F, 0x14, 0x2F, 0xA0, 0x2D, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x2D, 0x28, 0x2D, 0xFF, 0xFF, 0xE6, 0x2D, - 0x34, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x02, 0x06, 0x00, 0x00, 0x06, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_2_data */ - -static const hcf_8 fw_image_3_data[] = { - 0x00, 0xE1, 0x30, 0x40, 0x02, 0x36, 0xA1, 0xFF, 0x83, 0xFF, 0x8D, 0xFF, 0x5C, 0x44, 0x5C, 0x43, - 0x5C, 0x42, 0x5C, 0x41, 0x5C, 0x40, 0xAC, 0xFF, 0xAD, 0xFF, 0xE7, 0xE1, 0xAD, 0x60, 0x08, 0x78, - 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x03, 0x02, 0x28, 0xE2, 0x40, 0xFF, 0xA1, 0xFF, - 0x84, 0xFF, 0xBB, 0x60, 0x18, 0x64, 0x40, 0x42, 0xB0, 0x60, 0x97, 0x64, 0x40, 0x40, 0xBD, 0xF3, - 0x80, 0xFB, 0x0F, 0x60, 0x9A, 0x63, 0xCA, 0xF3, 0xBD, 0xDB, 0x00, 0x60, 0x9A, 0x64, 0xBD, 0xDB, - 0x02, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xA3, 0xDB, 0x5C, 0x49, 0x0A, 0x64, 0x40, 0x4B, 0x5C, 0x5C, - 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0x89, 0xFF, 0x03, 0x60, 0xFF, 0x73, 0x88, 0xFF, - 0xB0, 0x60, 0x97, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x06, 0x02, 0x40, 0xFF, - 0x42, 0xFF, 0x43, 0xFF, 0x44, 0xFF, 0x45, 0xFF, 0xA1, 0xFF, 0x88, 0xFF, 0x85, 0xFF, 0x21, 0xE1, - 0x5C, 0x40, 0xBB, 0x60, 0x20, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, - 0x01, 0x02, 0xA1, 0xFF, 0x86, 0xFF, 0x88, 0xFF, 0x5C, 0x46, 0x5C, 0x49, 0x5C, 0x40, 0xE7, 0x60, - 0x58, 0x4F, 0x31, 0x78, 0xFF, 0xFF, 0xC7, 0x60, 0x58, 0x4F, 0xF6, 0x78, 0xFF, 0xFF, 0xCA, 0x60, - 0x58, 0x4F, 0x83, 0x78, 0xFF, 0xFF, 0xDD, 0x60, 0x58, 0x4F, 0x3D, 0x78, 0xFF, 0xFF, 0x1B, 0x60, - 0x58, 0x4F, 0x37, 0x78, 0xFF, 0xFF, 0xEC, 0x60, 0x58, 0x4F, 0x75, 0x78, 0xFF, 0xFF, 0xE0, 0x60, - 0x58, 0x4F, 0x1B, 0x78, 0xFF, 0xFF, 0xE4, 0x60, 0x58, 0x4F, 0xDC, 0x78, 0xFF, 0xFF, 0xF3, 0x60, - 0x58, 0x4F, 0xEB, 0x78, 0xFF, 0xFF, 0x13, 0xE1, 0xA3, 0xFF, 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, - 0x03, 0xE1, 0xA3, 0xFF, 0xFE, 0xFC, 0xFF, 0xFC, 0x23, 0x60, 0xF4, 0x63, 0x17, 0xFD, 0xAE, 0xFF, - 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, 0x1A, 0x00, - 0x80, 0x3A, 0x15, 0x00, 0x81, 0xF1, 0x32, 0xF2, 0x33, 0xF2, 0xD0, 0x80, 0x82, 0xF1, 0x0F, 0x02, - 0xD0, 0x80, 0x34, 0xF2, 0x83, 0xF1, 0x0B, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x08, 0x02, 0xDF, 0x60, - 0x58, 0x4F, 0x28, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0x58, 0x4F, 0xBF, 0x78, 0xFF, 0xFF, 0x19, 0x60, - 0xE8, 0x78, 0xFF, 0xFF, 0x00, 0xF4, 0xAA, 0x60, 0xAA, 0x65, 0x09, 0xF2, 0x5A, 0xD0, 0xD4, 0x80, - 0x03, 0x64, 0x12, 0x02, 0xD0, 0x80, 0x1D, 0x60, 0x60, 0x65, 0x0E, 0x02, 0x5A, 0xD2, 0xFF, 0xFF, - 0xD4, 0x80, 0x01, 0x60, 0x00, 0x65, 0x08, 0x02, 0x5A, 0xD2, 0xFF, 0xFF, 0xD4, 0x80, 0xFF, 0xFF, - 0x03, 0x02, 0x19, 0x60, 0xE8, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0xD6, 0x65, 0xA5, 0xD1, 0x5A, 0xD1, - 0x44, 0x48, 0x5A, 0xD1, 0x44, 0x4A, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x44, 0x4C, 0xD8, 0x83, - 0x70, 0x61, 0x68, 0x65, 0xD7, 0x80, 0xFF, 0xFF, 0x07, 0x0E, 0x08, 0xF2, 0x08, 0x00, 0x68, 0x65, - 0xD7, 0x80, 0xFF, 0xFF, 0x01, 0x0E, 0x03, 0x00, 0x19, 0x60, 0xFE, 0x78, 0xFF, 0xFF, 0x58, 0x4F, - 0x79, 0x00, 0x9C, 0x80, 0x01, 0x65, 0x02, 0x02, 0x00, 0x65, 0x02, 0x00, 0xFF, 0x3B, 0xF7, 0x01, - 0x58, 0x4F, 0x70, 0x00, 0x9C, 0x80, 0x45, 0x42, 0xEA, 0x02, 0x58, 0x4F, 0x6B, 0x00, 0x9C, 0x80, - 0xFF, 0xFF, 0xE5, 0x02, 0x58, 0x4F, 0x66, 0x00, 0x9C, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0x00, 0x65, - 0x45, 0x42, 0xF8, 0x01, 0xFF, 0x3A, 0x29, 0x00, 0x60, 0x47, 0xFF, 0xB5, 0x28, 0x44, 0xFF, 0xB4, - 0x94, 0x80, 0xFF, 0xFF, 0xD4, 0x02, 0x60, 0x45, 0x28, 0x47, 0x2A, 0x5F, 0x40, 0x48, 0x2A, 0x47, - 0x2C, 0x5F, 0x40, 0x4A, 0x2C, 0x47, 0x65, 0x5F, 0x40, 0x4C, 0x10, 0x64, 0x40, 0x42, 0x28, 0x45, - 0x05, 0x00, 0x58, 0x4F, 0x47, 0x00, 0x94, 0x80, 0x28, 0x45, 0x26, 0x02, 0x58, 0x4F, 0x42, 0x00, - 0x94, 0x80, 0x2A, 0x45, 0x21, 0x02, 0x58, 0x4F, 0x3D, 0x00, 0x94, 0x80, 0xFF, 0xFF, 0x1C, 0x02, - 0x22, 0x44, 0x4C, 0x82, 0x2C, 0x45, 0x31, 0x03, 0xEC, 0x01, 0x10, 0x65, 0x45, 0x42, 0x28, 0x45, - 0x94, 0x80, 0x2A, 0x45, 0x21, 0x02, 0x58, 0x4F, 0x2D, 0x00, 0x94, 0x80, 0x2C, 0x45, 0x1C, 0x02, - 0x58, 0x4F, 0x28, 0x00, 0x94, 0x80, 0xFF, 0xFF, 0x17, 0x02, 0x22, 0x44, 0x4C, 0x82, 0x28, 0x45, - 0x1C, 0x03, 0x58, 0x4F, 0x1F, 0x00, 0xEC, 0x01, 0x40, 0x4B, 0x28, 0x47, 0x40, 0x48, 0x2A, 0x47, - 0x40, 0x4A, 0x2C, 0x47, 0x60, 0x45, 0x2A, 0x5E, 0x40, 0x4C, 0x2A, 0x44, 0x28, 0x5E, 0x40, 0x4A, - 0x28, 0x44, 0x65, 0x5E, 0x40, 0x48, 0x2B, 0x44, 0x68, 0x65, 0xD7, 0x80, 0xFF, 0xFF, 0x17, 0x0E, - 0x90, 0x01, 0x26, 0x46, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0xB9, 0xFF, 0x26, 0x46, 0xC5, 0x60, - 0x5B, 0x78, 0xFF, 0xFF, 0xC9, 0x81, 0xCB, 0x83, 0x07, 0x1C, 0x01, 0x1D, 0x08, 0x00, 0x00, 0xF4, - 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB4, 0xD8, 0x81, 0x5A, 0xD2, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, - 0xC5, 0x60, 0x58, 0x4F, 0x78, 0x78, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x63, 0x00, 0xF4, 0x84, 0x65, - 0x78, 0x61, 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x64, 0x44, - 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0xF0, 0x02, 0x1C, 0x60, 0xAC, 0x63, 0x29, 0x60, 0xEC, 0x64, 0x08, 0x65, 0xC4, 0x81, 0x61, 0x44, - 0xA3, 0xDB, 0x1C, 0x60, 0xAA, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x29, 0x60, 0xEC, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x60, 0x43, 0x1C, 0x60, 0xB0, 0x61, 0xA1, 0xDD, 0x1C, 0x60, 0xB0, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x60, 0x45, 0x1C, 0x60, 0xAA, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0xD4, 0x80, 0xFF, 0xFF, - 0x01, 0x03, 0x03, 0x00, 0x1A, 0x60, 0xD6, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xA8, 0x61, 0x01, 0x64, - 0xA1, 0xDB, 0x02, 0x60, 0x00, 0x61, 0x41, 0x4C, 0x03, 0x60, 0x00, 0x61, 0x41, 0x4A, 0x1C, 0x60, - 0xAC, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x40, 0x48, 0x1C, 0x60, 0xB2, 0x63, 0x28, 0x41, 0x06, 0x65, - 0xD5, 0x81, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x01, 0xA4, 0x60, 0x41, 0xA3, 0xDB, - 0x2A, 0x43, 0x28, 0x45, 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF4, 0x02, 0x28, 0x41, 0x1C, 0x60, - 0xB2, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x45, 0x8B, 0x1C, 0x60, 0xAE, 0x61, 0x2B, 0xD3, - 0xA1, 0xDB, 0x2C, 0x41, 0x28, 0x42, 0x4A, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x45, 0x8C, 0x00, 0x7F, - 0x01, 0x7E, 0x40, 0x48, 0x1C, 0x60, 0xB2, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x00, 0x64, - 0xD4, 0x80, 0xFF, 0xFF, 0x43, 0x03, 0x65, 0x44, 0xFF, 0xA4, 0xA1, 0xDB, 0x1C, 0x60, 0xAE, 0x61, - 0xA1, 0xD3, 0x28, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x2C, 0xD3, 0x2A, 0xD3, 0x60, 0x45, - 0xD4, 0x80, 0xFF, 0xFF, 0x01, 0x03, 0x14, 0x00, 0x28, 0x44, 0xE0, 0x84, 0xFF, 0xFF, 0x02, 0x24, - 0x01, 0x00, 0x08, 0x00, 0x2B, 0x44, 0x58, 0x8B, 0x1C, 0x60, 0xAE, 0x63, 0x2B, 0xD3, 0xA3, 0xDB, - 0x00, 0x7F, 0x01, 0x7E, 0x40, 0x48, 0x2A, 0x44, 0x58, 0x8A, 0x2C, 0x44, 0x58, 0x8C, 0xD2, 0x01, - 0x1C, 0x60, 0xA8, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x1C, 0x60, 0xAC, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, - 0x60, 0x45, 0xFA, 0xA4, 0x60, 0x41, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xC5, 0x81, 0x06, 0xA1, - 0x41, 0x48, 0x65, 0x41, 0xFC, 0xA1, 0xA1, 0xD3, 0x28, 0x41, 0x60, 0x40, 0x01, 0x26, 0x01, 0xA4, - 0x60, 0x45, 0xC5, 0x81, 0x61, 0x43, 0x1C, 0x60, 0xAC, 0x61, 0xA1, 0xDD, 0x1C, 0x60, 0xA8, 0x61, - 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x0D, 0x00, 0x1C, 0x60, 0xAA, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x01, 0xA4, 0xA1, 0xDB, 0xFF, 0xFF, 0x1A, 0x60, 0x2C, 0x78, 0xFF, 0xFF, 0x19, 0x60, - 0xE8, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x01, 0x60, 0xBA, 0x61, - 0x1F, 0x60, 0x08, 0x63, 0xA1, 0xD3, 0x04, 0xA1, 0x20, 0x7F, 0xBD, 0xDB, 0x32, 0x7E, 0x21, 0x7F, - 0xBD, 0xDB, 0xA1, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x10, 0x00, 0x01, 0x60, 0xBA, 0x61, - 0x1F, 0x60, 0x08, 0x63, 0xA1, 0xD3, 0x00, 0x66, 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, - 0x21, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xD8, 0x62, - 0xA2, 0xD1, 0x9F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, - 0xDA, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1A, 0x60, 0xFD, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, 0x06, 0x64, 0xA2, 0xDB, 0x20, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xDA, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0x1B, 0x60, 0x25, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, - 0xA2, 0xD1, 0x9F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, - 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, - 0x10, 0x60, 0x1E, 0x62, 0x1E, 0x60, 0xF4, 0x64, 0xA2, 0xDB, 0x1A, 0x60, 0x8A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x06, 0xA2, 0x10, 0x60, 0x40, 0x64, 0xA2, 0xDB, 0x06, 0x64, 0x5A, 0xDB, 0x5A, 0xDB, - 0x1A, 0x60, 0x96, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x06, 0xA2, 0x10, 0x60, 0x44, 0x64, 0xA2, 0xDB, - 0x06, 0x64, 0x5A, 0xDB, 0x5A, 0xDB, 0x1A, 0x60, 0xA2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x06, 0xA2, - 0x10, 0x60, 0x48, 0x64, 0xA2, 0xDB, 0x06, 0x64, 0x5A, 0xDB, 0x5A, 0xDB, 0xC0, 0xF1, 0x1A, 0x60, - 0xA6, 0x62, 0xA2, 0xD9, 0x10, 0x60, 0x3E, 0x62, 0x20, 0x60, 0x99, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x42, 0x62, 0x20, 0x60, 0xA3, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x46, 0x62, 0x20, 0x60, 0xAD, 0x64, - 0xA2, 0xDB, 0x00, 0x60, 0x70, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x63, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0xA9, 0xF3, 0x07, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, - 0x0F, 0x60, 0xDA, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0x1B, 0x60, 0x8A, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x03, 0x64, - 0x6A, 0xFB, 0x0F, 0x4E, 0xE0, 0x60, 0x58, 0x4F, 0x8E, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x00, 0x64, - 0x6C, 0xFB, 0x63, 0xF5, 0xEB, 0xF3, 0x2F, 0xFA, 0xEC, 0xF3, 0x30, 0xFA, 0xED, 0xF3, 0x31, 0xFA, - 0x81, 0xF3, 0x2C, 0xFA, 0x32, 0xFA, 0x82, 0xF3, 0x2D, 0xFA, 0x33, 0xFA, 0x83, 0xF3, 0x2E, 0xFA, - 0x34, 0xFA, 0xBC, 0xF3, 0x19, 0xFA, 0x06, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0x20, 0x60, 0x58, 0x4E, - 0x71, 0x78, 0xFF, 0xFF, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, - 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xD8, 0x62, - 0xA2, 0xD1, 0xFF, 0x60, 0x8F, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xC1, 0xF1, 0x1A, 0x60, 0x9A, 0x62, - 0xA2, 0xD9, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x6C, 0xFB, 0x0F, 0x60, 0xDA, 0x62, 0x00, 0x60, 0x74, 0x64, - 0xA2, 0xDB, 0x1B, 0x60, 0xDE, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1E, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xE0, 0x01, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x11, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, 0xD6, 0x01, 0xAF, 0xF3, 0xFF, 0xFF, - 0xFE, 0xA0, 0xFF, 0xFF, 0xD1, 0x06, 0x6C, 0xF3, 0xFF, 0xFF, 0xF6, 0xA0, 0xDC, 0x84, 0x01, 0x05, - 0xA2, 0xDB, 0xCA, 0x01, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xCE, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x00, 0x00, 0xE0, 0xF3, 0x29, 0x45, 0xD4, 0x80, 0x6C, 0xF3, 0x03, 0x04, 0x1C, 0x60, - 0x55, 0x78, 0xFF, 0xFF, 0xF6, 0xA0, 0xFF, 0xFF, 0x03, 0x04, 0x1C, 0x60, 0x55, 0x78, 0xFF, 0xFF, - 0x0F, 0x60, 0xDA, 0x62, 0x00, 0x60, 0x64, 0x64, 0xA2, 0xDB, 0x1C, 0x60, 0x2A, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1E, 0x60, 0xF4, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xD2, 0x01, - 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xE4, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, - 0x50, 0x27, 0xDF, 0x01, 0xAF, 0xF3, 0xFF, 0xFF, 0xFE, 0xA0, 0xFF, 0xFF, 0xC3, 0x06, 0x6C, 0xF3, - 0xFF, 0xFF, 0xF6, 0xA0, 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0xBC, 0x01, 0x0F, 0x60, 0xD8, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x20, 0x40, 0x40, 0x2B, 0x0B, 0x00, 0x0F, 0x60, 0xDA, 0x62, 0x80, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0x1C, 0x60, 0x55, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x1C, 0x60, 0x92, 0x65, 0x01, 0x64, 0xA5, 0xDB, 0xC2, 0xF1, 0x1A, 0x60, 0x9A, 0x62, 0xA2, 0xD9, - 0x0C, 0x64, 0x53, 0xFB, 0x1C, 0x60, 0x77, 0x64, 0x6B, 0xFB, 0x1F, 0x60, 0x72, 0x78, 0xFF, 0xFF, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0xA2, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x88, 0xF1, 0x19, 0x60, 0x86, 0x63, 0xD3, 0x80, 0x68, 0xFD, 0x5F, 0x03, 0x68, 0xF3, 0xE2, 0xF1, - 0x60, 0x43, 0x29, 0x44, 0xA3, 0xD3, 0xC0, 0x85, 0xD4, 0x80, 0x5B, 0xD3, 0x56, 0x06, 0x60, 0x43, - 0x08, 0xA3, 0xBE, 0xD3, 0x83, 0xF1, 0xA3, 0xD3, 0xD0, 0x80, 0x82, 0xF1, 0x05, 0x02, 0xBF, 0xD3, - 0xD0, 0x80, 0x81, 0xF1, 0x01, 0x02, 0xD0, 0x80, 0xF8, 0xA3, 0x2B, 0x02, 0x1C, 0x60, 0xAB, 0x64, - 0x6B, 0xFB, 0x1F, 0x60, 0x29, 0x78, 0xFF, 0xFF, 0x01, 0xB0, 0x84, 0xF3, 0x3E, 0x03, 0x63, 0xF5, - 0x48, 0x7E, 0x2A, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x0F, 0x60, 0xDA, 0x62, - 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0x1C, 0x60, 0xC8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xFE, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x1C, 0x00, 0x2D, 0x60, 0x7A, 0x65, 0xA5, 0xD3, 0x65, 0x41, 0x10, 0xA3, 0x01, 0xA4, 0xFE, 0xB4, - 0xC4, 0x85, 0xFE, 0xA1, 0xBD, 0xD3, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0xD5, 0x80, 0x05, 0x02, - 0x01, 0x03, 0xF8, 0x01, 0x1E, 0x60, 0xE8, 0x78, 0xFF, 0xFF, 0x68, 0xF3, 0x88, 0xF1, 0x04, 0xA4, - 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x68, 0xFB, 0xA1, 0x01, 0xE0, 0xF3, 0x29, 0x45, 0xD4, 0x80, - 0xFF, 0xFF, 0x0C, 0x07, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1B, 0x60, 0xB1, 0x78, 0xFF, 0xFF, 0xE1, 0xF3, 0x29, 0x45, - 0xD4, 0x80, 0xFF, 0xFF, 0x17, 0x06, 0x04, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, - 0x05, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, 0xF2, 0xFB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1D, 0x60, - 0x6D, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xDA, 0x62, 0x00, 0x60, 0x74, 0x64, 0xA2, 0xDB, 0x1D, 0x60, - 0x24, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1E, 0x60, - 0xF4, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0x87, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x17, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, 0xA7, 0x01, 0xAF, 0xF3, 0x6C, 0xF3, - 0xFE, 0xA0, 0xF6, 0xA0, 0x0A, 0x06, 0x03, 0x04, 0x00, 0x64, 0x55, 0xFB, 0x40, 0x49, 0x6C, 0xF3, - 0xFF, 0xFF, 0xF6, 0xA0, 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0x1C, 0x60, 0x87, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xC6, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0xA2, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x1C, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x20, 0x40, 0x40, 0x2B, 0x0B, 0x00, 0x0F, 0x60, 0xDA, 0x62, 0x80, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0x1D, 0x60, 0x6D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x1C, 0x60, 0x92, 0x65, 0x00, 0x64, 0xA5, 0xDB, 0xC3, 0xF1, 0x1A, 0x60, 0x9A, 0x62, 0xA2, 0xD9, - 0x1F, 0x60, 0x80, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0x08, 0xB4, 0x01, 0xBC, 0x29, 0x02, 0xA2, 0xDB, - 0x0F, 0x60, 0xD8, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x4E, 0xE4, 0x60, 0x58, 0x4F, 0xFB, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x60, 0xDA, 0x62, 0x10, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1D, 0x60, - 0xA4, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x60, 0x80, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0x60, 0x40, 0x0C, 0x26, 0x0C, 0x00, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x96, 0x64, - 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1E, 0x60, 0x97, 0x78, 0xFF, 0xFF, - 0x01, 0x64, 0x31, 0x60, 0x2A, 0x62, 0xA2, 0xDB, 0x0D, 0x64, 0x53, 0xFB, 0x1D, 0x60, 0xC3, 0x64, - 0x6B, 0xFB, 0x1F, 0x60, 0x72, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0xA2, 0x64, - 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, - 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x88, 0xF1, 0x19, 0x60, 0x86, 0x63, 0xD3, 0x80, - 0x68, 0xFD, 0x01, 0x02, 0x43, 0x00, 0x68, 0xF3, 0x29, 0x41, 0xA0, 0xD1, 0x58, 0xD3, 0xD1, 0x80, - 0x64, 0x45, 0x60, 0x43, 0x0F, 0x05, 0x08, 0xA3, 0xBE, 0xD3, 0x83, 0xF1, 0xA3, 0xD3, 0xD0, 0x80, - 0x82, 0xF1, 0x05, 0x02, 0xBF, 0xD3, 0xD0, 0x80, 0x81, 0xF1, 0x01, 0x02, 0xD0, 0x80, 0xF8, 0xA3, - 0x07, 0x02, 0x45, 0x49, 0x1E, 0x60, 0x2A, 0x64, 0x6B, 0xFB, 0x1F, 0x60, 0x29, 0x78, 0xFF, 0xFF, - 0x2D, 0x60, 0x7A, 0x65, 0xA5, 0xD3, 0x65, 0x41, 0x10, 0xA3, 0x01, 0xA4, 0xFE, 0xB4, 0xC4, 0x85, - 0xFE, 0xA1, 0xBD, 0xD3, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0xD5, 0x80, 0x0F, 0x02, 0xF9, 0x02, - 0x05, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x04, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, - 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0x1E, 0x60, 0xE8, 0x78, 0xFF, 0xFF, 0x68, 0xF3, 0x88, 0xF1, - 0x04, 0xA4, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x68, 0xFB, 0xBD, 0x01, 0xE1, 0xF3, 0x29, 0x45, - 0xD4, 0x80, 0xFF, 0xFF, 0x75, 0x05, 0x1E, 0x60, 0x2A, 0x63, 0x6B, 0xFD, 0x1A, 0x60, 0x4C, 0x63, - 0x1F, 0x60, 0x29, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x05, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, - 0xFF, 0xFF, 0x1F, 0x60, 0x52, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x04, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, - 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0x84, 0xF3, 0x63, 0xF5, 0x48, 0x7E, 0x2A, 0xFA, 0x02, 0x60, - 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x0F, 0x60, - 0xDA, 0x62, 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0x1E, 0x60, 0x61, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xFE, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x1A, 0x60, 0x9A, 0x62, 0x00, 0x60, 0x32, 0x64, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, - 0xDA, 0x62, 0x00, 0x60, 0x10, 0x64, 0xA2, 0xDB, 0x1E, 0x60, 0x81, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0xFD, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1B, 0x60, 0xB1, 0x78, 0xFF, 0xFF, - 0x0F, 0x60, 0xDA, 0x62, 0x00, 0x60, 0x74, 0x64, 0xA2, 0xDB, 0x1E, 0x60, 0xA2, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1E, 0x60, 0xF4, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1D, 0x60, - 0xD3, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x17, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, 0xDD, 0x01, 0xAF, 0xF3, 0x6C, 0xF3, 0xFE, 0xA0, 0xF6, 0xA0, - 0x0A, 0x06, 0x03, 0x04, 0x00, 0x64, 0x55, 0xFB, 0x40, 0x49, 0x6C, 0xF3, 0xFF, 0xFF, 0xF6, 0xA0, - 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0x1D, 0x60, 0xD3, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0xC6, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0xA2, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1D, 0x60, 0x6D, 0x78, - 0xFF, 0xFF, 0x08, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0x8A, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0xA2, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x0F, 0x60, 0xD8, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x00, 0x64, 0x6A, 0xFB, 0x0F, 0x60, - 0xD0, 0x62, 0xA2, 0xD1, 0x02, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, - 0xDA, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0x1B, 0x60, 0x8A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xA3, 0xD3, 0x7F, 0xF1, 0x7E, 0xFB, 0xD0, 0x80, 0x00, 0x64, 0x40, 0x03, - 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xBF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xDE, 0xFE, - 0x0B, 0x04, 0x0F, 0x60, 0xDA, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1F, 0x60, 0x2F, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xDF, 0x60, - 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x7E, 0xF1, 0x7F, 0xF9, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, - 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xDA, 0x62, 0x20, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0x1F, 0x60, 0x5E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, - 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xDF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x0F, 0x60, - 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x64, - 0x6B, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x0F, 0x60, - 0xD8, 0x62, 0xA2, 0xD1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x51, 0x23, - 0x0B, 0x00, 0x0F, 0x60, 0xDA, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1F, 0x60, 0x76, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x7F, 0x60, - 0xFF, 0x61, 0xA1, 0x84, 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x40, 0x60, 0x00, 0x65, - 0x20, 0x44, 0x34, 0x80, 0x02, 0x64, 0x8C, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x8C, 0xF3, 0x00, 0x65, - 0xD4, 0x80, 0xFF, 0xFF, 0x12, 0x03, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x7F, 0x60, 0xFF, 0x64, - 0xA0, 0x84, 0xA2, 0xDB, 0x0F, 0x60, 0xDA, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1F, 0x60, - 0x99, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2D, 0x60, 0x7A, 0x64, 0x54, 0xFB, - 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xEF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x1A, 0x60, - 0x58, 0x4E, 0xDC, 0x78, 0xFF, 0xFF, 0x0F, 0x4E, 0xEC, 0x60, 0x58, 0x4F, 0xB9, 0x78, 0xFF, 0xFF, - 0x0E, 0x4F, 0x0F, 0x60, 0xDA, 0x62, 0x10, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0x1F, 0x60, 0xD3, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1A, 0x60, 0x58, 0x4E, 0xED, 0x78, 0xFF, 0xFF, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0xEF, 0x60, 0xEF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x01, 0x64, 0x8C, 0xFB, 0xBF, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x01, 0x60, 0x14, 0x62, - 0xA2, 0xD1, 0x12, 0x60, 0x46, 0x63, 0xC3, 0x85, 0xC6, 0xA3, 0x3A, 0xA3, 0xD7, 0x80, 0xAF, 0xF3, - 0x09, 0x04, 0xFE, 0xA0, 0x6C, 0xF3, 0x3A, 0x06, 0xF6, 0xA0, 0x00, 0x64, 0x37, 0x04, 0x55, 0xFB, - 0x40, 0x49, 0x34, 0x00, 0x08, 0xA3, 0xBE, 0xD3, 0x83, 0xF1, 0xA3, 0xD3, 0xD0, 0x80, 0x82, 0xF1, - 0x05, 0x02, 0xBF, 0xD3, 0xD0, 0x80, 0x81, 0xF1, 0x01, 0x02, 0xD0, 0x80, 0xF8, 0xA3, 0xE5, 0x02, - 0xBE, 0xD3, 0x5A, 0xD1, 0x60, 0x47, 0x40, 0x4A, 0x64, 0x47, 0x40, 0x48, 0x20, 0x60, 0x58, 0x4E, - 0x45, 0x78, 0xFF, 0xFF, 0x0A, 0x48, 0x20, 0x60, 0x58, 0x4E, 0x55, 0x78, 0xFF, 0xFF, 0x20, 0x60, - 0x58, 0x4E, 0x71, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x2E, 0x65, 0x6C, 0xF3, 0xA5, 0xD3, 0xF6, 0xA0, - 0x40, 0xBC, 0x06, 0x04, 0xA5, 0xDB, 0x6A, 0xF1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0x6A, 0xFB, - 0x6C, 0xF3, 0xFF, 0xFF, 0x00, 0xB8, 0xCC, 0x84, 0x01, 0x03, 0xA2, 0xDB, 0xFD, 0x60, 0xFF, 0x65, - 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x6B, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0xF1, 0x28, 0x44, - 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, - 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0x56, 0xF1, 0x28, 0x44, - 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, - 0xC0, 0x84, 0x5C, 0xF1, 0x56, 0xFB, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x05, 0x64, 0x44, 0x52, 0xFB, - 0x2E, 0x58, 0xFF, 0xFF, 0x52, 0xF1, 0x00, 0x65, 0x20, 0x40, 0x20, 0x2A, 0x06, 0x00, 0x5C, 0xF3, - 0xFF, 0xFF, 0xD0, 0x80, 0x64, 0x45, 0x01, 0x06, 0x60, 0x45, 0x2F, 0x67, 0xD4, 0x80, 0xFF, 0xFF, - 0x01, 0x06, 0x60, 0x45, 0x55, 0xF1, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, 0x02, 0x24, 0x64, 0x41, - 0xD5, 0x84, 0x80, 0x65, 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, 0x40, 0x49, 0x20, 0x40, - 0x20, 0x2A, 0x06, 0x00, 0x2E, 0x43, 0xF3, 0x60, 0x58, 0x4E, 0xA8, 0x78, 0xFF, 0xFF, 0x43, 0x4E, - 0x2E, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xD8, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xF6, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x26, 0x46, 0x27, 0xF2, 0x70, 0x63, 0x60, 0x40, 0x0A, 0x36, 0x06, 0x00, 0x14, 0x36, 0x0A, 0x00, - 0x37, 0x36, 0x04, 0x00, 0x6E, 0x36, 0x04, 0x00, 0xD0, 0x63, 0x04, 0x00, 0x33, 0x63, 0x02, 0x00, - 0x21, 0x63, 0x00, 0x00, 0x1F, 0x60, 0x5A, 0x61, 0xA1, 0xDD, 0x26, 0x46, 0xBF, 0xF2, 0x01, 0x60, - 0x00, 0x65, 0xF4, 0xA1, 0xD5, 0x80, 0x00, 0xF4, 0x02, 0x24, 0x65, 0x41, 0x41, 0x48, 0x1E, 0x65, - 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, - 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, - 0xBD, 0xDB, 0xF0, 0x02, 0x02, 0x60, 0x00, 0x63, 0x28, 0x41, 0xBD, 0xD3, 0xBD, 0xD1, 0xFD, 0xA0, - 0xFF, 0xFF, 0x07, 0x03, 0x64, 0x44, 0xE0, 0x85, 0xD1, 0x81, 0xFE, 0xA1, 0xC7, 0x83, 0xF5, 0x0D, - 0x04, 0x00, 0x1A, 0x60, 0x4C, 0x61, 0xA3, 0xD3, 0xA1, 0xDB, 0x31, 0x40, 0x06, 0x26, 0x58, 0x00, - 0x00, 0x64, 0x70, 0xFB, 0x02, 0x60, 0x00, 0x63, 0x28, 0x41, 0xBD, 0xD3, 0xBD, 0xD1, 0xFC, 0xA0, - 0xFB, 0xA0, 0x08, 0x03, 0x28, 0x03, 0x64, 0x44, 0xE0, 0x85, 0xD1, 0x81, 0xFE, 0xA1, 0xC7, 0x83, - 0xF4, 0x0D, 0x46, 0x00, 0xBD, 0xD3, 0xBD, 0xD3, 0x00, 0xB8, 0x70, 0xFB, 0x6F, 0xFB, 0xBD, 0xD3, - 0x3F, 0x02, 0xA3, 0xD3, 0x60, 0x45, 0x60, 0x47, 0xB4, 0x84, 0x60, 0x41, 0x3F, 0xB5, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x72, 0xFB, 0x65, 0x47, 0xE0, 0x84, - 0xE0, 0x84, 0x71, 0xFB, 0x64, 0x44, 0xE0, 0x85, 0xFA, 0xA3, 0xC7, 0x83, 0x1A, 0x60, 0x44, 0x62, - 0x61, 0x44, 0xA2, 0xDB, 0xD2, 0x01, 0xBD, 0xD3, 0xA3, 0xD3, 0x00, 0xB8, 0x6E, 0xFB, 0x74, 0xFB, - 0x1F, 0x02, 0x87, 0xF1, 0x70, 0xF3, 0x6D, 0xF9, 0x04, 0x65, 0x60, 0x40, 0x00, 0x3A, 0x06, 0x65, - 0x31, 0x44, 0xB4, 0x84, 0x40, 0x51, 0x02, 0x2A, 0x0B, 0x00, 0x08, 0xBC, 0x40, 0x51, 0x72, 0xF3, - 0x71, 0xF1, 0x00, 0xB8, 0x64, 0x45, 0x01, 0x03, 0x67, 0x45, 0x65, 0x50, 0xCC, 0x84, 0x73, 0xFB, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x0F, 0x60, 0xEC, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2A, 0x84, 0x00, 0x1F, 0x60, - 0x52, 0x61, 0x01, 0x64, 0xA1, 0xDB, 0x22, 0x60, 0x58, 0x4E, 0x3E, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x00, 0xF4, 0x0D, 0xF2, 0x80, 0xFB, 0x00, 0x64, 0x86, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, - 0x1E, 0x65, 0xF4, 0xA4, 0xD4, 0xA0, 0x60, 0x41, 0x01, 0x06, 0x2C, 0x61, 0x41, 0x48, 0x02, 0x60, - 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x64, 0x44, - 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0xF0, 0x02, 0x02, 0x60, 0x00, 0x63, 0x28, 0x41, 0xBD, 0xD3, 0xBD, 0xD1, 0x01, 0xA8, 0xC9, 0x81, - 0x06, 0x03, 0x64, 0x44, 0xD1, 0x81, 0xE0, 0x85, 0x42, 0x06, 0xC7, 0x83, 0xF5, 0x01, 0x43, 0x48, - 0x2D, 0x60, 0x2A, 0x63, 0x43, 0x4A, 0x64, 0x41, 0x28, 0x43, 0x00, 0x65, 0x45, 0x4C, 0x65, 0x5C, - 0xBD, 0xD3, 0x61, 0x40, 0x00, 0x36, 0x27, 0x00, 0xCD, 0x81, 0x60, 0x40, 0x02, 0x36, 0x60, 0x45, - 0x04, 0x36, 0x60, 0x45, 0x82, 0x36, 0x60, 0x45, 0x84, 0x36, 0x60, 0x45, 0x0B, 0x36, 0x60, 0x45, - 0x8B, 0x36, 0x60, 0x45, 0x16, 0x36, 0x60, 0x45, 0x96, 0x36, 0x60, 0x45, 0x65, 0x40, 0x00, 0x36, - 0xE7, 0x01, 0x64, 0x44, 0xDC, 0x9C, 0x2C, 0x44, 0x00, 0x3A, 0x02, 0x00, 0x45, 0x4C, 0xE0, 0x01, - 0x2C, 0x5E, 0x65, 0x5F, 0x00, 0x65, 0x45, 0x4C, 0x43, 0x48, 0x2A, 0x43, 0xBD, 0xDB, 0xFF, 0xFF, - 0x43, 0x4A, 0x28, 0x43, 0xD5, 0x01, 0x2D, 0x60, 0x28, 0x64, 0x60, 0xFE, 0xA0, 0xD9, 0xFF, 0xFF, - 0x20, 0xFE, 0x64, 0x40, 0x01, 0x3A, 0x39, 0x00, 0x2A, 0x43, 0x65, 0x44, 0xA3, 0xDB, 0x35, 0x00, - 0x23, 0x60, 0x34, 0x78, 0xFF, 0xFF, 0xDC, 0xF3, 0xFF, 0xFF, 0x03, 0xA8, 0x02, 0xA8, 0x02, 0x03, - 0x41, 0x02, 0xF6, 0x01, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x26, 0x46, 0x1F, 0x60, 0x5A, 0x61, 0xA1, 0xD3, 0x25, 0xF2, 0x60, 0x45, - 0x24, 0xF0, 0x00, 0xF4, 0x64, 0x43, 0xC7, 0x83, 0x60, 0x41, 0x02, 0x24, 0x01, 0xA1, 0x0A, 0xF0, - 0x09, 0xF2, 0xD1, 0x80, 0xFF, 0xFF, 0x09, 0x07, 0x04, 0x04, 0x63, 0x45, 0xD4, 0x80, 0xFF, 0xFF, - 0x04, 0x06, 0x22, 0x60, 0x58, 0x4E, 0x3E, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x26, 0xF0, 0xFF, 0x67, - 0x20, 0x88, 0x64, 0x5F, 0x40, 0x4A, 0x20, 0x60, 0x58, 0x4E, 0x45, 0x78, 0xFF, 0xFF, 0x0A, 0x48, - 0x20, 0x60, 0x58, 0x4E, 0x55, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0x58, 0x4E, 0x71, 0x78, 0xFF, 0xFF, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xDA, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x22, - 0xAF, 0x01, 0x01, 0x60, 0x2E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xBF, 0xB4, 0xA2, 0xDB, 0x1F, 0x60, - 0x5A, 0x61, 0xA1, 0xD3, 0x26, 0x46, 0x60, 0x45, 0x1E, 0x60, 0xFE, 0x63, 0x00, 0xF4, 0x09, 0xF2, - 0xBD, 0xDB, 0xFF, 0xFF, 0x0A, 0xF2, 0xBD, 0xDB, 0x0B, 0xF2, 0xFF, 0xFF, 0xBD, 0xDB, 0x0C, 0xF2, - 0xA3, 0xDB, 0xFA, 0xA3, 0x26, 0x46, 0xA3, 0xD3, 0x24, 0xF0, 0x00, 0x61, 0xD0, 0x84, 0xF1, 0x81, - 0xD4, 0x84, 0xF1, 0x81, 0xBD, 0xDB, 0xA3, 0xD3, 0x03, 0xB1, 0x03, 0xA9, 0x25, 0xF0, 0x42, 0xFE, - 0x05, 0x03, 0xFD, 0xA1, 0xCC, 0x84, 0x01, 0x02, 0xCC, 0x84, 0x00, 0x61, 0xF1, 0x81, 0xD0, 0x84, - 0xF1, 0x81, 0xBD, 0xDB, 0xA3, 0xD3, 0x03, 0xB1, 0x03, 0xA9, 0x28, 0xF0, 0x42, 0xFE, 0x01, 0x03, - 0xCC, 0x84, 0xF1, 0x81, 0xD0, 0x84, 0xF1, 0x81, 0xBD, 0xDB, 0xA3, 0xD3, 0x03, 0xB1, 0x03, 0xA9, - 0x29, 0xF0, 0x01, 0x03, 0xCC, 0x84, 0xD0, 0x84, 0xA3, 0xDB, 0x1F, 0x60, 0x52, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x02, 0xA8, 0xFF, 0xFF, 0x02, 0x02, 0x2E, 0x58, 0xFF, 0xFF, 0xF5, 0xFE, 0x1E, 0x60, - 0xFE, 0x64, 0xA0, 0xD1, 0x06, 0xA4, 0xA0, 0xD3, 0x64, 0x45, 0x60, 0x40, 0x80, 0x2B, 0x03, 0x00, - 0xFF, 0x60, 0xFF, 0x64, 0x94, 0x85, 0x00, 0x60, 0x96, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x0B, 0x06, - 0x1F, 0x60, 0x52, 0x61, 0xA1, 0xD3, 0x6A, 0xF3, 0x00, 0xA8, 0x04, 0xB0, 0x04, 0x02, 0x03, 0x03, - 0x23, 0x60, 0x10, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x09, 0xF2, 0x5A, 0xD2, 0x40, 0x48, - 0x40, 0x4A, 0x5A, 0xD2, 0x5A, 0xD2, 0x40, 0x4C, 0x60, 0x41, 0x5A, 0xD0, 0x80, 0xF9, 0x40, 0x63, - 0xAD, 0x80, 0xF0, 0xA3, 0x09, 0x02, 0x3C, 0x03, 0x2C, 0x41, 0x2A, 0x44, 0x40, 0x4C, 0x28, 0x44, - 0x40, 0x4A, 0x00, 0x64, 0x40, 0x48, 0xF4, 0x01, 0xD1, 0x80, 0x01, 0x02, 0x31, 0x04, 0x10, 0xA3, - 0x80, 0x60, 0x00, 0x65, 0xA5, 0x80, 0xCF, 0x83, 0x08, 0x02, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, - 0x70, 0x8A, 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF5, 0x01, 0xE7, 0xA3, 0x64, 0x44, 0x00, 0xA8, - 0x00, 0x62, 0x02, 0x02, 0x00, 0x61, 0x1C, 0x00, 0xE0, 0x84, 0xDE, 0x82, 0xFD, 0x04, 0x42, 0xFE, - 0xF8, 0x84, 0x62, 0x45, 0xC7, 0x83, 0x60, 0x45, 0x02, 0xFE, 0xD5, 0x84, 0x02, 0x05, 0x01, 0x05, - 0x61, 0x44, 0xCF, 0x83, 0x60, 0x41, 0x08, 0x03, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, 0x70, 0x8A, - 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF1, 0x01, 0xCE, 0x82, 0xE9, 0x81, 0xFD, 0x02, 0xF1, 0x81, - 0x09, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0xE8, 0x84, 0xE8, 0x84, 0x5A, 0xD2, 0x3F, 0xB5, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x84, 0x61, 0x45, 0xD4, 0x84, - 0xC0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0x1F, 0x60, 0x52, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x00, 0xA8, 0xFF, 0xFF, 0x02, 0x03, 0x2E, 0x58, 0xFF, 0xFF, 0x10, 0x65, 0x73, 0x44, - 0xD4, 0x93, 0x6A, 0xF3, 0x26, 0x46, 0x04, 0xBC, 0xA2, 0xDB, 0x26, 0xF0, 0xFF, 0x67, 0x20, 0x88, - 0x64, 0x5F, 0x40, 0x4A, 0x20, 0x60, 0x58, 0x4E, 0x45, 0x78, 0xFF, 0xFF, 0x0A, 0x48, 0x20, 0x60, - 0x58, 0x4E, 0x55, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0x58, 0x4E, 0x71, 0x78, 0xFF, 0xFF, 0x6C, 0xF3, - 0xFF, 0xFF, 0x00, 0xB8, 0xCC, 0x84, 0x01, 0x03, 0xA2, 0xDB, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0xA2, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xD8, 0x62, - 0xA2, 0xD1, 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x28, 0xF3, 0xFF, 0xFF, 0x60, 0x47, 0x0F, 0xB4, 0x59, 0x00, 0xFF, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x24, 0x60, 0x9E, 0x65, 0x04, 0x64, 0xA5, 0xDB, 0x12, 0x00, 0x24, 0x60, 0x9E, 0x65, 0x0C, 0x64, - 0xA5, 0xDB, 0x0D, 0x00, 0x24, 0x60, 0x9E, 0x65, 0x06, 0x64, 0xA5, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9E, 0x65, 0x08, 0x64, 0xA5, 0xDB, 0x23, 0x60, - 0xA1, 0x64, 0xA1, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0x29, 0xF3, - 0x7F, 0xFB, 0xA4, 0xFB, 0x02, 0x60, 0xEE, 0x64, 0xA3, 0xFB, 0x07, 0x64, 0xA5, 0xFB, 0x23, 0x60, - 0xA1, 0x64, 0xA1, 0xFB, 0xFF, 0xFF, 0xDF, 0xFE, 0x00, 0x64, 0x19, 0xFF, 0x25, 0x60, 0x11, 0x78, - 0xFF, 0xFF, 0x24, 0x60, 0x0D, 0x63, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0x23, 0x60, - 0x8E, 0x63, 0xA1, 0xFD, 0xFF, 0xFF, 0x1A, 0xFF, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0xA3, 0x60, - 0x4B, 0x63, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0x29, 0xF5, 0x24, 0x60, 0x7A, 0x63, - 0x24, 0x60, 0x4C, 0x64, 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0x02, 0x64, 0xA3, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xF9, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xA7, 0x01, 0x00, 0x36, 0xA8, 0x01, - 0x01, 0x36, 0xAB, 0x01, 0x02, 0x36, 0xAE, 0x01, 0x03, 0x36, 0xB5, 0x01, 0x04, 0x36, 0xD1, 0x01, - 0x05, 0x36, 0xCF, 0x01, 0x06, 0x36, 0xF1, 0x01, 0x07, 0x36, 0xCB, 0x01, 0x08, 0x36, 0xB7, 0x01, - 0x09, 0x36, 0x0C, 0x00, 0x0A, 0x36, 0x0D, 0x00, 0x0B, 0x36, 0x0E, 0x00, 0x0C, 0x36, 0x17, 0x00, - 0x0D, 0x36, 0x0D, 0x00, 0x0E, 0x36, 0x1E, 0x00, 0x0F, 0x36, 0x32, 0x00, 0x02, 0x60, 0x00, 0x64, - 0x08, 0x00, 0x04, 0x60, 0x00, 0x64, 0x05, 0x00, 0x00, 0x60, 0x01, 0x64, 0x02, 0x00, 0x20, 0x60, - 0x00, 0x64, 0x32, 0x45, 0xB4, 0x85, 0x45, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x60, - 0xD1, 0x63, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x3F, 0x40, 0x02, 0x2B, 0x05, 0x00, 0x90, 0x60, 0x00, 0xE8, 0x24, 0x60, - 0x0D, 0x63, 0x04, 0x00, 0x91, 0x60, 0x00, 0xE8, 0x24, 0x60, 0xBB, 0x63, 0x28, 0xE8, 0x0C, 0x60, - 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x91, 0x60, 0x00, 0xE8, 0x28, 0xE8, 0xD9, 0x60, 0xFE, 0x64, 0x32, 0x45, 0xA4, 0x85, 0x45, 0x52, - 0x99, 0xFF, 0xA5, 0x4F, 0xFF, 0xB4, 0x07, 0xFB, 0x98, 0xFF, 0xA3, 0x60, 0x4B, 0x63, 0x0C, 0x60, - 0x16, 0x64, 0xA0, 0xDD, 0x62, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x43, 0xFF, 0x01, 0x60, 0x00, 0xE1, 0x28, 0xF3, 0x47, 0xFF, 0x60, 0x40, 0x07, 0x37, - 0x4B, 0x00, 0x05, 0x3B, 0x04, 0x00, 0xFF, 0x0A, 0x80, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x29, 0xF5, - 0x2A, 0xF3, 0x47, 0xFF, 0x3F, 0xF0, 0x01, 0x1B, 0x01, 0x64, 0x60, 0x56, 0xAD, 0xE2, 0xB5, 0xFF, - 0x6C, 0x40, 0x40, 0xE1, 0xA1, 0xFF, 0x00, 0xF4, 0x6E, 0x61, 0x12, 0x62, 0x64, 0x43, 0x01, 0xE1, - 0x03, 0x64, 0xE2, 0xD0, 0xC9, 0x81, 0x64, 0x4C, 0xCC, 0x84, 0xDA, 0x82, 0xFA, 0x02, 0x01, 0x60, - 0x00, 0x6B, 0x9A, 0xFF, 0xCA, 0x82, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xFF, 0x7A, 0xD0, - 0xA1, 0xFF, 0x64, 0x4C, 0xFC, 0x1C, 0xF8, 0x1D, 0x00, 0xB9, 0x06, 0x1E, 0x02, 0x02, 0x00, 0xF4, - 0xDA, 0x82, 0x5A, 0xD2, 0xA1, 0xFF, 0x60, 0x4D, 0x3F, 0x40, 0x02, 0x2B, 0x08, 0x00, 0x28, 0xF3, - 0xA5, 0x60, 0xC4, 0x65, 0x60, 0x40, 0x0E, 0x3B, 0x02, 0x00, 0x80, 0x4C, 0xFE, 0x01, 0xA1, 0xFF, - 0x87, 0x4E, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x67, 0x4C, 0xFF, 0xFF, 0xBC, 0xFF, - 0x00, 0xE1, 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x64, 0x40, 0x46, 0x60, 0x41, 0xB5, 0xFF, - 0xB7, 0xFF, 0xB4, 0xFF, 0x29, 0xF5, 0x3F, 0xF0, 0x24, 0xF2, 0x44, 0x43, 0x40, 0x44, 0x00, 0xF4, - 0xF3, 0x60, 0xA0, 0x65, 0x10, 0x62, 0x5A, 0xD2, 0xD9, 0x81, 0xD4, 0x80, 0xFF, 0xFF, 0xFB, 0x02, - 0x61, 0x45, 0x24, 0x44, 0xD4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xFD, 0xA5, 0x48, 0x60, - 0x00, 0x64, 0xC4, 0x9D, 0x0D, 0x60, 0x00, 0x6B, 0x24, 0x44, 0xC0, 0x83, 0xBB, 0xFF, 0x29, 0xF5, - 0x01, 0xE1, 0x00, 0xF4, 0x6C, 0x61, 0x10, 0x62, 0x05, 0x00, 0x00, 0xF4, 0x01, 0xF2, 0xFF, 0xFF, - 0x60, 0x41, 0x04, 0x62, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x1A, 0x00, 0x26, 0x44, 0x01, 0x26, - 0x0C, 0x00, 0x24, 0x44, 0xC8, 0x84, 0x40, 0x44, 0x02, 0x03, 0x6C, 0x45, 0xF3, 0x01, 0x03, 0x15, - 0x01, 0x64, 0x05, 0xFA, 0x15, 0x00, 0x6C, 0x45, 0xED, 0x01, 0x23, 0x44, 0xC8, 0x84, 0x40, 0x43, - 0x02, 0x03, 0x6C, 0x45, 0xE7, 0x01, 0x00, 0x64, 0x01, 0x15, 0x01, 0x64, 0x6C, 0x45, 0x05, 0xFB, - 0xE2, 0xD2, 0xDA, 0x82, 0xC9, 0x81, 0x60, 0x4C, 0xDD, 0x1C, 0xD7, 0x03, 0xBC, 0xFF, 0xDA, 0x01, - 0x00, 0xE1, 0xD5, 0xFE, 0xA1, 0xFF, 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0x67, 0x4C, 0x43, 0xFF, - 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x01, 0xE1, 0x01, 0x60, 0x69, 0x6B, 0xA5, 0x60, - 0xC4, 0x64, 0x60, 0x4C, 0xBB, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, 0xA1, 0xFF, 0xFF, 0xFF, - 0x60, 0x4C, 0xFC, 0x01, 0x29, 0xF3, 0x2A, 0xF1, 0x07, 0xB5, 0x04, 0xE1, 0x65, 0x41, 0x64, 0x54, - 0xCD, 0xE2, 0x95, 0x81, 0xA1, 0x5D, 0xA1, 0xFF, 0xFF, 0xFF, 0xF9, 0x01, 0x61, 0x44, 0xFE, 0xFB, - 0xFF, 0xFD, 0xFF, 0x01, 0x7F, 0x67, 0x01, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0xB1, 0xFE, 0x08, 0x05, - 0xB0, 0xFE, 0x09, 0x05, 0xB2, 0xFE, 0xB3, 0xFE, 0x78, 0x43, 0x01, 0x61, 0x24, 0x60, 0xDD, 0x78, - 0x2D, 0x60, 0x5D, 0x78, 0xFF, 0xFF, 0x28, 0xF3, 0x29, 0xF1, 0x40, 0x44, 0x44, 0x45, 0x2A, 0xF1, - 0x2B, 0xF1, 0x44, 0x46, 0x44, 0x47, 0x3F, 0xB4, 0xE0, 0x85, 0x1F, 0x60, 0x88, 0x64, 0x44, 0xD7, - 0x58, 0x43, 0xFF, 0xFF, 0x60, 0x45, 0x1C, 0x60, 0xB4, 0x7C, 0xA4, 0xD3, 0x61, 0x43, 0x04, 0xB4, - 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, 0x06, 0x00, 0x3F, 0xB4, 0xB4, 0x84, 0xFF, 0x27, 0x05, 0xFD, - 0x04, 0xFB, 0x10, 0x75, 0xA1, 0xFF, 0xFF, 0xFF, 0x86, 0x3E, 0xB4, 0xFE, 0x0B, 0x05, 0xB5, 0xFE, - 0x02, 0x24, 0xA1, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0xFE, 0x07, 0x05, 0x78, 0x43, 0x01, 0x61, - 0x24, 0x60, 0xDD, 0x78, 0x2D, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x36, 0x44, 0x00, 0x7F, 0xF2, 0xA0, - 0x60, 0x45, 0x05, 0x05, 0x20, 0x60, 0x16, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x78, 0x43, - 0x01, 0x61, 0x24, 0x60, 0xDD, 0x78, 0x78, 0x43, 0x01, 0x61, 0x24, 0x60, 0xDD, 0x78, 0x7F, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, 0x10, 0x64, 0x40, 0x40, - 0x02, 0x64, 0x40, 0x50, 0x61, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x04, 0x00, 0x10, 0xE0, 0x46, 0x60, - 0x09, 0xE0, 0x00, 0x00, 0x27, 0xF1, 0x00, 0x66, 0x20, 0x78, 0x42, 0xFE, 0x23, 0x58, 0xFF, 0xFF, - 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x1A, 0x02, 0x1C, 0x60, - 0xB4, 0x63, 0xA3, 0xD3, 0x07, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, 0x04, 0x03, 0x03, 0x02, 0xDC, 0xF9, - 0x00, 0x67, 0x0F, 0x00, 0x00, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xAC, 0x01, 0x36, 0x47, 0xFF, 0x23, - 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x04, 0x00, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, - 0x02, 0x61, 0x31, 0x02, 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xD3, 0x01, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, - 0x03, 0x03, 0x02, 0x02, 0xDC, 0xF9, 0xFF, 0xFF, 0x02, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0x25, 0x60, - 0x11, 0x78, 0xFF, 0xFF, 0x9F, 0xF1, 0x20, 0x44, 0x64, 0x40, 0xFF, 0x26, 0x1B, 0x00, 0x7F, 0xB4, - 0x40, 0x40, 0x5C, 0x5E, 0x82, 0xFF, 0x26, 0x44, 0xFD, 0xB4, 0x40, 0x46, 0x5C, 0x41, 0x87, 0xFF, - 0x62, 0xFF, 0x00, 0x63, 0x24, 0x60, 0x5E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x04, 0x03, 0x09, 0xF2, 0x0F, 0xFC, 0xAC, 0x86, 0xFB, 0x01, 0x24, 0x60, 0x9E, 0x62, 0x06, 0x64, - 0xA2, 0xDB, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x00, 0x67, 0x20, 0x40, 0x80, 0x2A, - 0x02, 0x00, 0x7F, 0x67, 0x06, 0x61, 0x60, 0x45, 0x1C, 0x60, 0xB4, 0x7C, 0xA4, 0xD3, 0x61, 0x43, - 0x04, 0xB4, 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, 0x55, 0x01, 0x3F, 0xB4, 0xB4, 0x84, 0xFF, 0x27, - 0x05, 0xFD, 0x04, 0xFB, 0x20, 0x40, 0x80, 0x2A, 0x02, 0x00, 0x10, 0x75, 0x07, 0x00, 0x2D, 0x60, - 0x9C, 0x62, 0x01, 0x64, 0xA2, 0xDB, 0xFF, 0xFF, 0x08, 0x60, 0x10, 0x75, 0x43, 0x01, 0x25, 0x46, - 0x01, 0xF2, 0x08, 0xF0, 0x60, 0x47, 0x03, 0xB4, 0x03, 0xAC, 0x7F, 0x67, 0x03, 0x61, 0x08, 0x02, - 0x24, 0x60, 0x7A, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x2B, 0x49, 0x00, 0x25, 0x44, 0x1F, 0xB4, 0xE0, 0x85, - 0x25, 0x60, 0xEB, 0x64, 0xC4, 0x98, 0xFF, 0xFF, 0xC0, 0xFE, 0x3D, 0x00, 0xC1, 0xFE, 0x3B, 0x00, - 0xC2, 0xFE, 0x39, 0x00, 0xC3, 0xFE, 0x37, 0x00, 0xC4, 0xFE, 0x35, 0x00, 0xC5, 0xFE, 0x33, 0x00, - 0xC6, 0xFE, 0x31, 0x00, 0xC7, 0xFE, 0x2F, 0x00, 0xC8, 0xFE, 0x2D, 0x00, 0xC9, 0xFE, 0x2B, 0x00, - 0xCA, 0xFE, 0x29, 0x00, 0xCB, 0xFE, 0x27, 0x00, 0xCC, 0xFE, 0x25, 0x00, 0xCD, 0xFE, 0x23, 0x00, - 0xCE, 0xFE, 0x21, 0x00, 0xCF, 0xFE, 0x1F, 0x00, 0xD0, 0xFE, 0x1D, 0x00, 0xD1, 0xFE, 0x1B, 0x00, - 0xD2, 0xFE, 0x19, 0x00, 0xD3, 0xFE, 0x17, 0x00, 0xD4, 0xFE, 0x15, 0x00, 0xD5, 0xFE, 0x13, 0x00, - 0xD6, 0xFE, 0x11, 0x00, 0xD7, 0xFE, 0x0F, 0x00, 0xD8, 0xFE, 0x0D, 0x00, 0xD9, 0xFE, 0x0B, 0x00, - 0xDA, 0xFE, 0x09, 0x00, 0xDB, 0xFE, 0x07, 0x00, 0xDC, 0xFE, 0x05, 0x00, 0xDD, 0xFE, 0x03, 0x00, - 0xDE, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x9F, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x9E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9D, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x9C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9A, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x99, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x98, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x97, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x96, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x95, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x94, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x93, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x92, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x91, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x90, 0xFE, 0xF0, 0x84, 0x06, 0xFB, 0x8F, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x8E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8D, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x8C, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8A, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x89, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x88, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x87, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x86, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x85, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x84, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x83, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x82, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x81, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x80, 0xFE, 0xF0, 0x84, 0x05, 0xFB, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x5C, 0x5C, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x27, - 0x55, 0x00, 0x05, 0x60, 0x00, 0x63, 0x05, 0xFD, 0x30, 0x44, 0xBD, 0xDB, 0x31, 0x44, 0xBD, 0xDB, - 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, 0x35, 0x44, 0xBD, 0xDB, - 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, 0x39, 0x44, 0xBD, 0xDB, - 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, 0x3D, 0x44, 0xBD, 0xDB, - 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0x02, 0x61, 0x61, 0x44, 0x02, 0x36, 0x82, 0xFF, - 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, - 0x07, 0x36, 0x87, 0xFF, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, - 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, - 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, - 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, - 0x2F, 0x44, 0xBD, 0xDB, 0xDD, 0x81, 0x08, 0x3A, 0xD0, 0x01, 0x54, 0x00, 0x27, 0x40, 0x10, 0x26, - 0x30, 0x00, 0x26, 0x44, 0x01, 0x36, 0x2D, 0x00, 0x02, 0x36, 0x82, 0xFF, 0x03, 0x36, 0x83, 0xFF, - 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, 0x25, 0x44, 0x00, 0x36, - 0x44, 0x40, 0x01, 0x36, 0x44, 0x41, 0x02, 0x36, 0x44, 0x42, 0x03, 0x36, 0x44, 0x43, 0x04, 0x36, - 0x44, 0x44, 0x05, 0x36, 0x44, 0x45, 0x06, 0x36, 0x44, 0x46, 0x07, 0x36, 0x44, 0x47, 0x08, 0x36, - 0x44, 0x48, 0x09, 0x36, 0x44, 0x49, 0x0A, 0x36, 0x44, 0x4A, 0x0B, 0x36, 0x44, 0x4B, 0x0C, 0x36, - 0x44, 0x4C, 0x0D, 0x36, 0x44, 0x4D, 0x0E, 0x36, 0x44, 0x4E, 0x0F, 0x36, 0x44, 0x4F, 0x87, 0xFF, - 0x21, 0x00, 0x25, 0x44, 0x10, 0x36, 0x44, 0x50, 0x11, 0x36, 0x44, 0x51, 0x12, 0x36, 0x44, 0x52, - 0x13, 0x36, 0x44, 0x53, 0x14, 0x36, 0x44, 0x54, 0x15, 0x36, 0x44, 0x55, 0x16, 0x36, 0x44, 0x56, - 0x17, 0x36, 0x44, 0x57, 0x18, 0x36, 0x44, 0x58, 0x19, 0x36, 0x44, 0x59, 0x1A, 0x36, 0x44, 0x5A, - 0x1B, 0x36, 0x44, 0x5B, 0x1C, 0x36, 0x44, 0x5C, 0x1D, 0x36, 0x44, 0x5D, 0x1E, 0x36, 0x44, 0x5E, - 0x1F, 0x36, 0x44, 0x5F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0x46, 0xAE, 0x60, 0x58, 0x4F, - 0x6F, 0x78, 0xFF, 0xFF, 0x03, 0x61, 0x7F, 0x67, 0x0B, 0x02, 0x00, 0xF0, 0x24, 0x60, 0x7A, 0x62, - 0x04, 0x64, 0xA2, 0xDB, 0x5A, 0xD9, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, - 0x11, 0x02, 0x24, 0x60, 0x9E, 0x62, 0x1A, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, - 0x27, 0x60, 0x6E, 0x64, 0xA1, 0xFB, 0x2D, 0xFF, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0x2A, 0xF3, - 0x05, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x7F, 0x67, 0x02, 0x61, 0x0F, 0x02, 0x24, 0x60, 0x9E, 0x62, 0x1C, 0x64, 0xA2, 0xDB, 0x00, 0x60, - 0x50, 0x63, 0x5A, 0xDD, 0x27, 0x60, 0x88, 0x64, 0xA1, 0xFB, 0x2D, 0xFF, 0x25, 0x60, 0x11, 0x78, - 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x02, 0x61, 0x3E, 0x02, 0x25, 0x45, 0x20, 0x44, 0x80, 0x2A, 0x3A, 0x00, 0xF1, 0x60, 0x00, 0x64, - 0xD4, 0x80, 0xFF, 0xFF, 0x0B, 0x03, 0xF1, 0x60, 0x01, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x06, 0x03, - 0xF1, 0x60, 0x02, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x30, 0x03, 0x29, 0x00, 0x2D, 0x60, 0x0E, 0x62, - 0xA2, 0xD1, 0xBA, 0xF3, 0x1F, 0x60, 0x82, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x25, 0x45, 0x23, 0x60, - 0xE4, 0x63, 0x02, 0x61, 0xBD, 0xD3, 0xBD, 0xD1, 0xD4, 0x80, 0xBD, 0xD3, 0xBD, 0xD5, 0xCD, 0x81, - 0x02, 0x03, 0x15, 0x03, 0xF7, 0x01, 0xA2, 0xFF, 0xA6, 0xD3, 0x40, 0x4C, 0x00, 0xA8, 0x67, 0x43, - 0x0C, 0x02, 0xA2, 0xDD, 0x42, 0x48, 0x64, 0x41, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0x28, 0xDB, 0x02, 0x03, 0x2C, 0x58, 0xA3, 0xFF, 0x0C, 0x61, 0x03, 0x00, 0x04, 0x61, - 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x2D, 0x60, 0x0E, 0x62, 0xA2, 0xD1, - 0xBA, 0xF3, 0x1F, 0x60, 0x82, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x1F, 0x60, 0x86, 0x61, 0x01, 0x64, - 0xA1, 0xDB, 0xFF, 0xFF, 0xC4, 0xFE, 0xEE, 0x01, 0xC6, 0xFE, 0xEC, 0x01, 0x7E, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x02, 0x61, 0x3F, 0x02, 0x25, 0x45, 0xF8, 0x2B, 0x3B, 0x00, 0x2E, 0xF5, - 0x67, 0x44, 0xD4, 0x80, 0x20, 0x60, 0x24, 0x63, 0x39, 0x03, 0x60, 0x61, 0x24, 0x44, 0x01, 0x27, - 0x29, 0x00, 0xA3, 0xFC, 0xA4, 0xF8, 0xBD, 0xD3, 0xA3, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, - 0x64, 0x58, 0x08, 0xA3, 0xF8, 0x02, 0x08, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xA3, 0xD1, 0xFE, 0xA0, - 0xFA, 0x60, 0x00, 0x64, 0xD0, 0x80, 0x14, 0x02, 0x13, 0x02, 0x04, 0xA3, 0xBE, 0xD3, 0xBD, 0xD1, - 0x0F, 0x18, 0xD4, 0x80, 0x0D, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x64, 0x41, - 0xDD, 0x81, 0xE1, 0x81, 0xCB, 0x83, 0x46, 0x65, 0x2F, 0x60, 0x58, 0x4F, 0x01, 0x78, 0xFF, 0xFF, - 0x00, 0x67, 0x0A, 0x00, 0xBD, 0xD3, 0xBE, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, 0x64, 0x58, - 0x08, 0xA3, 0xF8, 0x02, 0x04, 0x61, 0x7F, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0F, 0x64, 0x23, 0xFA, - 0x67, 0x44, 0x24, 0xFA, 0x62, 0x41, 0x3C, 0x60, 0x00, 0x65, 0x1A, 0x63, 0x68, 0x60, 0x28, 0x64, - 0x65, 0x46, 0x58, 0xD0, 0x2E, 0xF5, 0x59, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0xCB, 0x83, 0xBF, 0xD1, 0x4A, 0x65, 0x64, 0x43, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0x01, 0x26, - 0xDC, 0x81, 0xE9, 0x84, 0xDC, 0x84, 0x23, 0xFA, 0x09, 0x00, 0x4B, 0xD3, 0xFF, 0xFF, 0x60, 0x41, - 0xE8, 0x84, 0xDC, 0x84, 0x23, 0xFA, 0xBF, 0xD1, 0x4A, 0x65, 0x64, 0x43, 0x2F, 0x60, 0x58, 0x4F, - 0x01, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xE0, 0xA0, - 0x20, 0x64, 0x01, 0x06, 0x25, 0xFA, 0x23, 0xF2, 0xDF, 0xD1, 0xCC, 0x84, 0xE0, 0x85, 0x0B, 0x06, - 0xBF, 0xD1, 0x64, 0x41, 0xD5, 0x80, 0x64, 0x43, 0x01, 0x06, 0x65, 0x41, 0x4A, 0x65, 0x29, 0x60, - 0x58, 0x4F, 0x83, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xDC, 0xF3, 0x02, 0x63, - 0x23, 0xFC, 0x07, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x4B, 0xD3, 0xBF, 0xD3, - 0x60, 0x41, 0xC9, 0x83, 0xE9, 0x81, 0xDD, 0x81, 0xA3, 0xFA, 0xE0, 0x81, 0x3C, 0x60, 0x00, 0x67, - 0x02, 0x24, 0x02, 0xA4, 0x60, 0x47, 0x40, 0x4B, 0xC9, 0x81, 0x4A, 0x65, 0xAB, 0x46, 0x59, 0xD0, - 0xAB, 0x46, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF6, 0x1F, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, - 0x60, 0x47, 0x25, 0xFA, 0x00, 0x7E, 0x60, 0x47, 0x01, 0x26, 0xDC, 0x84, 0x60, 0x41, 0xE8, 0x84, - 0xD8, 0x84, 0x23, 0xFA, 0xAB, 0x01, 0xFC, 0xA3, 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, - 0x00, 0x7F, 0x25, 0xFA, 0x60, 0x41, 0x01, 0x26, 0xDD, 0x81, 0xE9, 0x84, 0xD8, 0x84, 0x23, 0xFA, - 0x9D, 0x01, 0x28, 0x60, 0xE2, 0x63, 0xBF, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xE8, 0x84, 0xDC, 0x84, - 0x23, 0xFA, 0x4A, 0x65, 0x2F, 0x60, 0x58, 0x4F, 0x01, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x28, 0x60, 0xE2, 0x63, 0x23, 0xF2, 0xC0, 0x65, 0xCC, 0x84, 0xE0, 0x81, 0x0A, 0x04, - 0xBF, 0xDB, 0xD5, 0x80, 0x07, 0x03, 0x01, 0x06, 0x65, 0x41, 0x61, 0x44, 0xBF, 0xDB, 0x4A, 0x65, - 0x58, 0x4F, 0xAA, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x03, 0x4E, 0x28, 0x60, 0x58, 0x43, - 0x5C, 0x78, 0xFF, 0xFF, 0x29, 0x60, 0xC6, 0x61, 0x29, 0x60, 0xA4, 0x62, 0xA2, 0xD3, 0xA1, 0xDB, - 0xCC, 0x84, 0xA8, 0x83, 0x05, 0x04, 0x29, 0x60, 0xA4, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, - 0x0E, 0x43, 0x81, 0x01, 0x23, 0xF2, 0x1C, 0x60, 0x8E, 0x65, 0x60, 0x41, 0x1C, 0x60, 0x2A, 0x63, - 0xA3, 0xDB, 0xFF, 0xA1, 0x48, 0x64, 0x58, 0xD0, 0x7E, 0xA8, 0x5B, 0xD9, 0x02, 0x02, 0x00, 0xF4, - 0x02, 0x64, 0xFF, 0xA1, 0xD7, 0x80, 0x02, 0x03, 0x01, 0x03, 0xF5, 0x01, 0x2E, 0xF5, 0x00, 0x60, - 0x2F, 0x65, 0x25, 0xF2, 0x00, 0x63, 0xCC, 0x84, 0x03, 0xA3, 0xFD, 0x05, 0x4A, 0x64, 0xD7, 0x80, - 0x1B, 0x60, 0xC6, 0x61, 0x2F, 0x05, 0xA1, 0xDD, 0xE3, 0x83, 0xFE, 0xA3, 0x58, 0xD0, 0x7E, 0xA8, - 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x00, 0x63, 0x59, 0xDD, 0x2E, 0xF5, - 0x1B, 0x60, 0xC6, 0x64, 0x25, 0xF0, 0xA0, 0xD3, 0xD3, 0x80, 0x01, 0xB0, 0x04, 0x03, 0x01, 0xA4, - 0x03, 0x03, 0xA2, 0xDB, 0x01, 0x00, 0xA2, 0xDD, 0x1B, 0x60, 0xCE, 0x63, 0x10, 0x60, 0x5A, 0x65, - 0xBD, 0xD3, 0xBD, 0xD1, 0xE0, 0x84, 0xC4, 0x82, 0x10, 0x60, 0x7A, 0x65, 0x07, 0x64, 0x64, 0x41, - 0x5A, 0xDB, 0xD6, 0x80, 0xCD, 0x81, 0x06, 0x03, 0xFB, 0x02, 0x25, 0xF2, 0x02, 0xA3, 0xCC, 0x84, - 0xA2, 0xDA, 0xEC, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x2A, 0x61, 0xA1, 0xD3, - 0x23, 0xFA, 0xE0, 0x83, 0x4A, 0x65, 0x04, 0x02, 0x02, 0x63, 0x23, 0xFC, 0xA5, 0xFC, 0x09, 0x00, - 0xDB, 0x83, 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, - 0xF8, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x1B, 0x60, 0xC6, 0x62, 0xA2, 0xD3, 0x00, 0x61, - 0x02, 0xA4, 0xFE, 0xA0, 0x23, 0xFA, 0x1B, 0x03, 0xFA, 0xA4, 0xFD, 0xA4, 0x01, 0xA1, 0xFD, 0x07, - 0x61, 0x43, 0x23, 0xF2, 0x25, 0xFC, 0xE0, 0x83, 0x02, 0xA3, 0x1B, 0x60, 0xC6, 0x61, 0x00, 0x60, - 0x4A, 0x64, 0x59, 0xD1, 0x58, 0xD8, 0x7E, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, - 0x25, 0xF2, 0x23, 0xF2, 0x01, 0xB0, 0xCC, 0x84, 0x04, 0x02, 0x23, 0xFA, 0x02, 0x00, 0x00, 0x64, - 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x41, 0x4B, 0x65, 0x42, 0x80, 0x64, 0xD4, 0x85, - 0x2B, 0x41, 0x00, 0xA1, 0x55, 0x8B, 0x0D, 0x03, 0x02, 0x04, 0x65, 0x41, 0x02, 0x00, 0x00, 0x64, - 0x40, 0x4B, 0xCA, 0x84, 0x58, 0xD0, 0xC9, 0x81, 0xBD, 0xD9, 0xFC, 0x02, 0x00, 0xF4, 0x04, 0x65, - 0xEC, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD3, 0x02, 0x7C, 0xA0, 0xD3, 0x23, 0xF8, - 0xDC, 0x84, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, 0x01, 0x64, - 0x9D, 0xFE, 0x02, 0x28, 0x02, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x2D, 0x60, - 0x1A, 0x62, 0xA2, 0xD3, 0x02, 0x7C, 0x23, 0xF8, 0x01, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0x02, 0x64, 0x23, 0xFA, 0xA4, 0xD3, 0x00, 0x63, 0x60, 0x40, - 0x0A, 0x37, 0x01, 0x63, 0x14, 0x37, 0x02, 0x63, 0x37, 0x37, 0x06, 0x63, 0x6E, 0x37, 0x0B, 0x63, - 0x25, 0xFC, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, 0x88, 0xFF, 0x75, 0x44, - 0x8D, 0xFF, 0xE8, 0x87, 0xE8, 0x84, 0xE8, 0x84, 0x03, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x04, 0x64, 0x23, 0xFA, 0x86, 0xFF, 0x29, 0x44, 0x87, 0xFF, 0x25, 0xFA, 0x55, 0xF3, - 0x52, 0xF1, 0x80, 0x65, 0xC4, 0x87, 0x00, 0x7F, 0x26, 0xFA, 0x64, 0x44, 0xC4, 0x87, 0x00, 0x7F, - 0x27, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x05, 0x64, 0x23, 0xFA, 0x52, 0x63, 0xB7, 0xF3, - 0x4B, 0xDA, 0xB6, 0xF3, 0x4B, 0xDA, 0xB5, 0xF3, 0x4B, 0xDA, 0x60, 0x41, 0x88, 0xFF, 0x72, 0x5C, - 0x89, 0xFF, 0x4A, 0xD8, 0xA2, 0x48, 0x20, 0x23, 0x0E, 0x00, 0x64, 0x40, 0x80, 0x27, 0x15, 0x00, - 0xDC, 0x84, 0xBD, 0xDA, 0xBD, 0xD2, 0x11, 0x04, 0xDC, 0x84, 0xA2, 0xDA, 0xA3, 0xD2, 0x0D, 0x04, - 0xDC, 0x84, 0xA3, 0xDA, 0x0A, 0x00, 0x52, 0x63, 0xB7, 0xF3, 0x4B, 0xDA, 0xB6, 0xF3, 0x4B, 0xDA, - 0xB5, 0xF3, 0x4B, 0xDA, 0x54, 0x90, 0x4C, 0x63, 0xE0, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x25, 0xF0, 0x2D, 0x60, 0x16, 0x65, 0x23, 0xF2, 0xA5, 0xD9, 0x02, 0xA8, 0x64, 0x44, 0x07, 0x02, - 0x00, 0xBC, 0xF2, 0xA4, 0x04, 0x03, 0x03, 0x07, 0x28, 0x60, 0x44, 0x62, 0xA2, 0xD9, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x20, 0x63, 0x28, 0x60, 0xA4, 0x61, 0x48, 0x64, 0x58, 0xD0, 0x59, 0xD9, - 0xFD, 0x1F, 0x25, 0xF0, 0x20, 0x64, 0xD0, 0x81, 0xFF, 0xFF, 0x02, 0x07, 0x25, 0xFA, 0x0F, 0x00, - 0x28, 0x60, 0xA8, 0x63, 0xC3, 0x83, 0x01, 0x2A, 0x06, 0x00, 0xCF, 0x83, 0xA3, 0xD3, 0xCD, 0x81, - 0x00, 0x7F, 0xBD, 0xDB, 0x04, 0x03, 0x00, 0x64, 0xC9, 0x81, 0xBD, 0xDB, 0xFD, 0x02, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x01, 0x60, 0xA6, 0x62, 0x09, 0x02, - 0xA2, 0xD9, 0x64, 0x41, 0x32, 0x44, 0x02, 0xB5, 0x00, 0xB9, 0xD4, 0x84, 0x08, 0x28, 0x02, 0xBC, - 0x40, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x01, 0x60, - 0xB2, 0x62, 0x0C, 0x02, 0xA2, 0xD9, 0x64, 0x41, 0x32, 0x44, 0x40, 0xB5, 0x00, 0xB9, 0xD4, 0x84, - 0x08, 0x24, 0x03, 0x00, 0x40, 0xBC, 0x02, 0xB5, 0xD4, 0x84, 0x40, 0x52, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x01, 0x60, 0xB0, 0x63, 0xA3, 0xD9, 0xA9, 0xF1, 0x20, 0x61, - 0x41, 0x4B, 0x64, 0x43, 0xD8, 0xF3, 0x63, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, 0x60, 0x40, - 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, 0x02, 0x00, - 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, 0xFF, 0xFF, 0xA0, 0x84, - 0x65, 0x43, 0x02, 0x02, 0x79, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, 0xD8, 0xF3, - 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xE8, 0x84, - 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, 0x60, 0x47, 0x90, 0x84, - 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, - 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, 0xDD, 0x81, - 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, 0x0C, 0xF4, - 0x2B, 0x41, 0x4D, 0x8B, 0x02, 0xA3, 0xB6, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, - 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x02, 0x02, 0x2D, 0xF9, 0x2C, 0xF9, 0x23, 0x58, 0xFF, 0xFF, - 0x28, 0x60, 0x42, 0x61, 0x23, 0xF2, 0x25, 0xF2, 0x02, 0xA8, 0x00, 0xA8, 0x09, 0x02, 0x07, 0x03, - 0xD0, 0xA0, 0x30, 0x65, 0x03, 0x04, 0xA7, 0xA0, 0x59, 0x65, 0x01, 0x06, 0x65, 0x44, 0xA1, 0xDB, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x31, 0x60, 0x2C, 0x61, 0x01, 0x64, 0xA1, 0xDB, 0x04, 0x00, - 0x31, 0x60, 0x2C, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x7E, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x7F, 0x67, 0x02, 0x61, 0x0E, 0x02, 0x06, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0x25, 0x60, 0x11, 0x78, - 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x01, 0x00, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7E, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, - 0x02, 0x61, 0x12, 0x02, 0x2D, 0x60, 0x58, 0x61, 0x65, 0x43, 0xA1, 0xDD, 0x0C, 0x61, 0x41, 0x56, - 0xC7, 0xFE, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, - 0x60, 0x41, 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF0, 0x29, 0x60, - 0xA2, 0x62, 0xA2, 0xD9, 0x19, 0x00, 0x2D, 0x60, 0x1A, 0x64, 0xA0, 0xD1, 0xA0, 0xF9, 0x0C, 0x60, - 0x38, 0x62, 0x40, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x64, 0x40, 0x01, 0x2A, 0x0C, 0x00, - 0x04, 0x65, 0x0C, 0x60, 0x38, 0x61, 0x48, 0x64, 0x3E, 0x63, 0x7C, 0xA8, 0x58, 0xD0, 0x59, 0xD9, - 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x29, 0x60, 0xA2, 0x62, 0xA2, 0xD1, 0x0D, 0x60, - 0x1C, 0x65, 0x02, 0xFE, 0x64, 0x44, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x87, 0x60, 0x41, 0x64, 0x44, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x84, 0x3E, 0xFB, 0x60, 0x42, 0x61, 0x44, 0x03, 0xA2, 0x60, 0xFE, - 0xA2, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x44, 0x0C, 0x60, 0x3A, 0x65, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x84, 0x40, 0xFB, 0xFF, 0xFF, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x2D, 0x60, 0x1A, 0x64, 0xA0, 0xD1, 0xA0, 0xF9, 0x00, 0x64, 0x40, 0x41, 0x64, 0x40, - 0x01, 0x2A, 0xA4, 0x00, 0x4A, 0x64, 0xA0, 0xD2, 0xFF, 0xFF, 0x40, 0x42, 0x80, 0x2B, 0x04, 0x00, - 0xFF, 0xB4, 0x40, 0x42, 0x01, 0x64, 0x40, 0x41, 0xA9, 0xF3, 0x46, 0x4B, 0x60, 0x46, 0x20, 0x63, - 0xE3, 0x83, 0xAB, 0x46, 0x26, 0xF0, 0xAB, 0x46, 0x55, 0xF8, 0xAB, 0x46, 0x27, 0xF0, 0xAB, 0x46, - 0x56, 0xF8, 0xAB, 0x46, 0x28, 0xF0, 0xAB, 0x46, 0x57, 0xF8, 0x66, 0x44, 0x02, 0xA6, 0xF1, 0x1F, - 0xA9, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xAB, 0x46, 0x0C, 0x60, 0x7A, 0x65, 0x22, 0x44, 0xFF, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0xC9, 0x81, 0x52, 0x64, 0x0E, 0x63, - 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF0, 0xA1, - 0x6E, 0x64, 0x0E, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x22, 0x44, 0xFF, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x0C, 0x60, 0xDC, 0x65, 0xC4, 0x81, 0x60, 0x45, 0xC9, 0x81, - 0x62, 0x64, 0x06, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, - 0xAB, 0x46, 0xF8, 0xA1, 0xAE, 0x64, 0x06, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, - 0x65, 0x44, 0x0C, 0x60, 0xFC, 0x65, 0xC4, 0x81, 0xC9, 0x81, 0x6A, 0x64, 0x06, 0x63, 0x58, 0xD0, - 0x59, 0xD9, 0xFD, 0x1F, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x84, 0x0C, 0x60, - 0xC2, 0x65, 0xC4, 0x81, 0x72, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0xAB, 0x46, - 0x21, 0x44, 0x01, 0x2A, 0x06, 0x00, 0xFA, 0xA1, 0x88, 0x64, 0x04, 0x63, 0x59, 0xD1, 0x58, 0xD8, - 0xFD, 0x1F, 0x37, 0xF0, 0x21, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x22, 0x44, 0x3D, 0xFB, 0x60, 0x41, - 0x02, 0xFE, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x84, 0x3C, 0xFB, 0x0C, 0x60, 0xBE, 0x63, 0x88, 0xFF, - 0xCD, 0x81, 0x06, 0xA3, 0xFD, 0x0D, 0x8D, 0xFF, 0x3B, 0xFD, 0x64, 0x47, 0x80, 0xBF, 0x60, 0x5C, - 0x22, 0x43, 0x80, 0x61, 0x88, 0xFF, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, - 0x31, 0x91, 0xB1, 0x84, 0x37, 0xFA, 0x1F, 0x63, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0x37, 0xF0, - 0x66, 0x44, 0xB1, 0x9C, 0x37, 0xF8, 0x02, 0xA6, 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, - 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x22, 0x02, 0x3D, 0xF1, - 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, 0xD0, 0x80, 0xA9, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xB7, 0xF4, - 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, 0xEB, 0x83, 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, 0xE1, 0x81, - 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0x9D, 0x85, 0xA7, 0x83, 0x37, 0xFC, 0x1F, 0x63, - 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0xB7, 0xF2, 0x66, 0x44, 0xA5, 0x81, 0xB7, 0xFA, 0x02, 0xA6, - 0xFA, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x2D, 0x60, 0x1A, 0x64, 0xA0, 0xD1, 0xA0, 0xF9, - 0x64, 0x40, 0x01, 0x2A, 0x4E, 0x00, 0x27, 0xF2, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, - 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, 0x60, 0x43, - 0x61, 0x46, 0x01, 0x03, 0x2A, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x37, 0xF2, 0x80, 0x60, 0x30, 0x7C, - 0xB0, 0x84, 0xA2, 0xDA, 0x4E, 0x61, 0x6E, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, - 0x58, 0xD8, 0xFB, 0x1F, 0x88, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, - 0xFB, 0x1F, 0xD9, 0x81, 0x98, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, - 0xFB, 0x1F, 0xD9, 0x81, 0xAE, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, - 0xFB, 0x1F, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x2D, 0x60, 0x1A, 0x64, 0xA0, 0xD1, 0xA0, 0xF9, 0x64, 0x40, 0x01, 0x2A, 0x31, 0x00, - 0x27, 0xF2, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x0D, 0x00, - 0x43, 0x4B, 0xAB, 0x46, 0x37, 0xF2, 0x80, 0x60, 0x30, 0x61, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDA, - 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0xA2, 0xFF, 0x46, 0x45, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0x00, 0xF4, - 0x01, 0xF2, 0x66, 0x5C, 0x25, 0x46, 0x56, 0x02, 0x70, 0x27, 0x54, 0x00, 0x12, 0x64, 0x03, 0xFA, - 0x04, 0xF8, 0x0E, 0xF2, 0x87, 0xFC, 0x8D, 0xFC, 0x8E, 0xFC, 0xDA, 0x82, 0x16, 0x61, 0x00, 0x63, - 0xC9, 0x81, 0x5A, 0xDC, 0xFD, 0x02, 0x60, 0x40, 0xF0, 0x3B, 0x16, 0x00, 0x32, 0x44, 0xAF, 0xF3, - 0x01, 0xB0, 0xFA, 0xA0, 0x08, 0x24, 0x2C, 0x05, 0xDC, 0x83, 0xF0, 0x67, 0x0E, 0xFA, 0x24, 0x60, - 0x5E, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xAF, 0xFD, 0x2B, 0xFF, - 0xFE, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x4F, 0x00, 0xB0, 0xF3, 0x06, 0x65, 0xD4, 0x80, 0xDC, 0x83, - 0x17, 0x05, 0xB0, 0xFD, 0x98, 0xFE, 0x04, 0x04, 0x00, 0x7F, 0x08, 0x7E, 0x0E, 0xFA, 0x3B, 0xFF, - 0x24, 0x60, 0x52, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0x0E, 0xF2, - 0x2B, 0xFF, 0x60, 0x40, 0x08, 0x26, 0xF7, 0xFE, 0xFD, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x32, 0x00, - 0xAC, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, 0xFF, 0xFF, 0x0D, 0x04, 0x24, 0x60, 0x6A, 0x64, 0x2B, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFC, 0x64, 0x3B, 0x42, - 0x4A, 0xDB, 0x21, 0x00, 0x46, 0x45, 0x00, 0x64, 0x2B, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, - 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, - 0x05, 0xFA, 0xAF, 0x60, 0x58, 0x4E, 0x95, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0xFF, 0x64, - 0x3B, 0x42, 0x4A, 0xDB, 0xD4, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x58, 0x64, - 0x40, 0x47, 0x58, 0x4F, 0x0D, 0x00, 0x24, 0x60, 0x4C, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x18, 0x00, - 0x24, 0x60, 0x64, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x03, 0x00, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, - 0x27, 0xD5, 0x0E, 0xF2, 0x0B, 0x18, 0x60, 0x40, 0x01, 0x2A, 0x08, 0x00, 0x24, 0x60, 0x7A, 0x64, - 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0xF2, 0x01, 0x2F, 0x58, 0xFF, 0xFF, - 0x27, 0xD5, 0x0E, 0xF2, 0x14, 0x18, 0x60, 0x40, 0x01, 0x2A, 0x11, 0x00, 0x02, 0xF0, 0x09, 0x60, - 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, 0xB0, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0xB0, 0xFB, 0x24, 0x60, - 0x7A, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0xE9, 0x01, 0x2F, 0x58, - 0xFF, 0xFF, 0xFB, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0xA2, 0xFF, 0xB3, 0xF3, 0xAF, 0xF3, 0xCC, 0x80, - 0xFD, 0xA0, 0x01, 0x14, 0x1E, 0x05, 0xAE, 0x60, 0x58, 0x4D, 0x9B, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, - 0x18, 0x03, 0xF0, 0x67, 0x0E, 0xFA, 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, 0x5E, 0x64, 0xA2, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF6, 0x64, 0x3A, 0x42, - 0x4A, 0xDB, 0xB3, 0xF3, 0xAF, 0xF3, 0xCC, 0x83, 0xDC, 0x84, 0x01, 0x15, 0xB3, 0xFD, 0xAF, 0xFB, - 0xD4, 0xFE, 0xB2, 0xF3, 0xB0, 0xF3, 0x00, 0xA8, 0xB1, 0xF1, 0x03, 0x02, 0xD0, 0x80, 0xFF, 0xFF, - 0x27, 0x05, 0xAE, 0x60, 0x58, 0x4D, 0x9B, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x21, 0x03, 0x00, 0x63, - 0xB2, 0xF3, 0x0E, 0xFC, 0xCC, 0x84, 0xFF, 0x3A, 0xB2, 0xFB, 0x98, 0xFE, 0x03, 0x04, 0x08, 0xBB, - 0x0E, 0xFC, 0x3B, 0xFF, 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, 0x52, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF7, 0x64, 0x3A, 0x42, 0x4A, 0xDB, - 0xB0, 0xF3, 0x0E, 0xF2, 0xDC, 0x83, 0x08, 0xB0, 0xB0, 0xFD, 0x08, 0x28, 0xF7, 0xFE, 0xD4, 0xFE, - 0xA3, 0xFF, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0xB9, 0xFE, 0x13, 0xFF, 0x24, 0x40, 0x80, 0x2B, - 0x0B, 0x00, 0xA2, 0xFF, 0x25, 0x46, 0x09, 0xF4, 0x0E, 0xF2, 0x05, 0x18, 0x08, 0xBC, 0x0E, 0xFA, - 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0x00, 0xD8, 0xFE, 0xA3, 0xFF, 0x25, 0x46, 0x3E, 0xF2, 0x00, 0xF4, - 0x08, 0xF0, 0x25, 0x46, 0x06, 0xB4, 0xFF, 0x7F, 0x10, 0xBC, 0x06, 0x26, 0xFD, 0x7F, 0x0E, 0xFA, - 0x3E, 0xF2, 0x3F, 0xF2, 0x60, 0x41, 0x08, 0x2A, 0x64, 0x47, 0x3F, 0xFA, 0x60, 0x45, 0x27, 0x60, - 0xFC, 0x62, 0xA2, 0xD3, 0xA3, 0xFC, 0xAB, 0xFC, 0x91, 0xFC, 0xD4, 0x80, 0xC0, 0x60, 0xE1, 0x65, - 0xA5, 0x80, 0x01, 0x04, 0x07, 0x03, 0x23, 0xF0, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x2E, 0x60, - 0xC5, 0x78, 0xFF, 0xFF, 0x2F, 0x60, 0x58, 0x4F, 0x0F, 0x78, 0xFF, 0xFF, 0x14, 0x04, 0x23, 0xF0, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xB8, 0xF1, 0x27, 0x60, 0x96, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x02, 0x00, - 0x20, 0x60, 0x00, 0x75, 0x83, 0x00, 0xDC, 0xF3, 0xA9, 0xF1, 0x07, 0xB4, 0x64, 0x43, 0xFD, 0xA0, - 0x2C, 0xF2, 0x71, 0x02, 0x01, 0xB0, 0x64, 0x43, 0x78, 0x02, 0x2E, 0xF2, 0x1C, 0x60, 0xBA, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, - 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, - 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2C, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, - 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x51, 0x03, 0x63, 0x46, 0x80, 0xF6, 0x25, 0x46, 0x43, 0x18, - 0x2E, 0xF2, 0x66, 0x41, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xA9, 0xF1, 0xE0, 0x84, - 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, - 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, - 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, - 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, - 0x43, 0x4B, 0x2C, 0xF0, 0xAD, 0xF0, 0x2E, 0xF2, 0xAB, 0x46, 0x03, 0xF8, 0x84, 0xF8, 0x05, 0xFA, - 0x03, 0x64, 0x06, 0xFA, 0xAB, 0x46, 0x1E, 0x60, 0xBC, 0x61, 0xA1, 0xD3, 0x1E, 0x60, 0xFE, 0x7C, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x49, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xA1, 0xDB, 0x0A, 0x00, 0xDC, 0xF3, 0x02, 0xA3, 0xFE, 0xA0, 0xF9, 0xA0, 0x01, 0x06, - 0x04, 0x02, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xFC, 0x23, 0xF2, 0xFF, 0xFF, - 0x27, 0x1B, 0x27, 0x60, 0xFE, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x00, 0x3A, 0x10, 0x00, - 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, 0x22, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC1, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x1F, 0x00, - 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, 0x34, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC8, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x0F, 0x00, - 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, 0x46, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xCE, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x25, 0x60, - 0x11, 0x78, 0xFF, 0xFF, 0xCB, 0x84, 0xC9, 0x83, 0xFF, 0xFF, 0x08, 0x04, 0x58, 0xD1, 0xA5, 0xD8, - 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x2F, 0x58, 0xFF, 0xFF, - 0x3E, 0xF2, 0xCC, 0xF1, 0x08, 0xB0, 0x19, 0xF8, 0x3B, 0x02, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF3, - 0x30, 0xFA, 0x60, 0x45, 0xED, 0xF3, 0x31, 0xFA, 0x46, 0x4A, 0x00, 0xF4, 0x60, 0x43, 0x05, 0xF2, - 0x06, 0xF2, 0xD0, 0x80, 0x07, 0xF0, 0x05, 0x02, 0xD4, 0x80, 0xD3, 0x80, 0x02, 0x02, 0xDC, 0xF3, - 0x03, 0x03, 0xAA, 0x46, 0x42, 0xFE, 0x25, 0x00, 0x60, 0x40, 0x03, 0x2A, 0x10, 0x00, 0x02, 0xF2, - 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0x81, 0xF1, - 0x32, 0xF8, 0x82, 0xF1, 0x33, 0xF8, 0x83, 0xF1, 0x34, 0xF8, 0x08, 0x64, 0x10, 0x00, 0x02, 0xF2, - 0x03, 0xF0, 0x04, 0xF2, 0x60, 0x43, 0xAA, 0x46, 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, 0x81, 0xF1, - 0x2C, 0xF8, 0x82, 0xF1, 0x2D, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x01, 0x60, 0x08, 0x64, 0x2A, 0xFA, - 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x03, 0x02, 0x42, 0xFF, - 0x47, 0xFF, 0xA1, 0xFF, 0x80, 0xFF, 0x90, 0xFF, 0x98, 0xFF, 0x88, 0xFF, 0x84, 0xE1, 0xFF, 0xFF, - 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, 0x2D, 0x60, 0x9C, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0x01, 0x1B, 0xF7, 0x01, 0x87, 0xFF, 0x20, 0x44, 0x80, 0xFF, 0x60, 0x40, 0x80, 0x26, 0xF1, 0x01, - 0xC0, 0x60, 0x40, 0xEC, 0xC0, 0x60, 0x00, 0xED, 0xC0, 0x60, 0x80, 0xEE, 0xAC, 0x4F, 0xBF, 0xB4, - 0xA0, 0x5C, 0x2D, 0x60, 0x1A, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x02, 0x27, 0x06, 0x00, - 0x28, 0xE2, 0x24, 0xE2, 0xBF, 0xFF, 0xFF, 0xFF, 0x75, 0x40, 0x10, 0x00, 0x28, 0xE2, 0x24, 0xE2, - 0x00, 0x60, 0x00, 0x61, 0x00, 0x60, 0x94, 0xE0, 0xBF, 0xFF, 0xFF, 0xFF, 0xA1, 0x50, 0x75, 0x40, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0xE0, 0x2D, 0x60, 0x9C, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0xAC, 0x4F, 0x40, 0xBC, - 0x00, 0x7F, 0xA0, 0x5C, 0xC0, 0x60, 0xD9, 0xEC, 0xC0, 0x60, 0x0F, 0xED, 0xC0, 0x60, 0x8F, 0xEE, - 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x26, 0x61, 0xCD, 0x81, 0xFF, 0xFF, 0xFD, 0x02, - 0xAE, 0x4F, 0xFB, 0xB4, 0xA0, 0x5E, 0xAD, 0x01, 0x80, 0xFF, 0x90, 0xFF, 0x98, 0xFF, 0x2F, 0x60, - 0x54, 0x63, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, - 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, - 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, - 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, - 0xBD, 0xDB, 0x2F, 0x60, 0x48, 0x64, 0xA0, 0xDD, 0x30, 0x60, 0x74, 0x63, 0x2F, 0x60, 0x4A, 0x64, - 0xA0, 0xDD, 0x2F, 0x60, 0x4C, 0x63, 0x30, 0x44, 0xA3, 0xDB, 0x2F, 0x60, 0x4E, 0x63, 0x31, 0x44, - 0xA3, 0xDB, 0x2F, 0x60, 0x50, 0x63, 0x32, 0x44, 0xA3, 0xDB, 0x2F, 0x60, 0x52, 0x63, 0x33, 0x44, - 0xA3, 0xDB, 0x81, 0xFF, 0x91, 0xFF, 0x58, 0x51, 0x4B, 0x00, 0x82, 0xFF, 0x92, 0xFF, 0x58, 0x51, - 0x47, 0x00, 0x83, 0xFF, 0x93, 0xFF, 0x58, 0x51, 0x43, 0x00, 0x84, 0xFF, 0x94, 0xFF, 0x58, 0x51, - 0x3F, 0x00, 0x85, 0xFF, 0x95, 0xFF, 0x58, 0x51, 0x3B, 0x00, 0x86, 0xFF, 0x96, 0xFF, 0x58, 0x51, - 0x37, 0x00, 0x87, 0xFF, 0x97, 0xFF, 0x58, 0x51, 0x33, 0x00, 0x80, 0xFF, 0x90, 0xFF, 0x99, 0xFF, - 0x2F, 0x60, 0x48, 0x64, 0xA0, 0xD1, 0x30, 0x44, 0x64, 0x43, 0xBD, 0xDB, 0x31, 0x44, 0xBD, 0xDB, - 0x32, 0x44, 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, 0x35, 0x44, 0xBD, 0xDB, - 0x36, 0x44, 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, 0x39, 0x44, 0xBD, 0xDB, - 0x3A, 0x44, 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, 0x3D, 0x44, 0xBD, 0xDB, - 0x3E, 0x44, 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0xEF, 0x60, 0x48, 0x64, 0x0A, 0xFB, 0x40, 0x21, - 0xFE, 0x01, 0x80, 0xFF, 0x90, 0xFF, 0x98, 0xFF, 0x88, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, - 0x42, 0x50, 0x40, 0x53, 0x2F, 0x60, 0x4A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x52, 0x33, 0x44, - 0x32, 0x42, 0xA2, 0xDB, 0xDA, 0x82, 0xA2, 0xDD, 0xDA, 0x83, 0x65, 0x44, 0xBD, 0xDB, 0x61, 0x44, - 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0xBD, 0xD9, 0x30, 0x44, 0xBD, 0xDB, 0x99, 0xFF, 0xA4, 0x4C, - 0xBD, 0xDB, 0xA5, 0x4C, 0xBD, 0xDB, 0xA0, 0x4C, 0xBD, 0xDB, 0xA1, 0x4C, 0xBD, 0xDB, 0x98, 0xFF, - 0x2F, 0x60, 0x4A, 0x64, 0xA0, 0xDD, 0x2F, 0x60, 0x4C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x50, - 0x2F, 0x60, 0x50, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x52, 0x2F, 0x60, 0x52, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x40, 0x53, 0x31, 0x41, 0x2F, 0x60, 0x4E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x40, 0x51, - 0x2F, 0x60, 0x48, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x43, 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, - 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, - 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, - 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, - 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0x2F, 0x60, 0x48, 0x64, 0xA0, 0xDD, - 0x61, 0x58, 0xFF, 0xFF, 0x24, 0xE2, 0x2D, 0xF3, 0x2C, 0xF3, 0x00, 0xBD, 0xCC, 0x84, 0x08, 0x03, - 0x2C, 0xFB, 0x06, 0x02, 0x65, 0x44, 0x2C, 0xFB, 0x8A, 0xFF, 0x80, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0xF2, 0xF3, 0x31, 0x40, 0x01, 0x2A, 0x44, 0x00, 0x60, 0x43, 0x04, 0xB0, 0x02, 0xB0, 0x08, 0x24, - 0x16, 0x02, 0x29, 0x44, 0xFF, 0xFF, 0x00, 0xA8, 0xCC, 0x81, 0x0E, 0x03, 0x41, 0x49, 0x37, 0x02, - 0x63, 0x40, 0x08, 0x2A, 0x09, 0x00, 0xF7, 0xB3, 0x31, 0x60, 0x1E, 0x7C, 0xA4, 0xD1, 0xAD, 0x4F, - 0xFD, 0xB4, 0xA0, 0x5D, 0x44, 0x49, 0x2B, 0x00, 0x63, 0x40, 0x02, 0x2A, 0x14, 0x00, 0x31, 0x60, - 0x20, 0x64, 0xA0, 0xD3, 0x31, 0x60, 0x1C, 0x7C, 0xA4, 0xDB, 0x40, 0x49, 0x31, 0x60, 0x22, 0x64, - 0xA0, 0xD3, 0x31, 0x60, 0x1E, 0x7C, 0xA4, 0xDB, 0x0C, 0xBB, 0xFD, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, - 0x00, 0x7F, 0xA0, 0x5D, 0x14, 0x00, 0x31, 0x60, 0x24, 0x64, 0xA0, 0xD3, 0x31, 0x60, 0x1C, 0x7C, - 0x0E, 0x18, 0xA4, 0xDB, 0x40, 0x49, 0x31, 0x60, 0x26, 0x64, 0xA0, 0xD3, 0x31, 0x60, 0x1E, 0x7C, - 0xA4, 0xDB, 0x08, 0xBB, 0xFB, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0xF2, 0xFD, - 0x01, 0x60, 0x4E, 0x61, 0xA1, 0xD3, 0x61, 0x43, 0x17, 0x18, 0x58, 0xD3, 0x62, 0x41, 0x03, 0x18, - 0xCC, 0x84, 0xA1, 0xDB, 0x11, 0x00, 0x49, 0xD3, 0xA3, 0xDB, 0x06, 0xA1, 0xA1, 0xD3, 0x59, 0xD1, - 0x60, 0x45, 0xA5, 0xD3, 0x59, 0xD1, 0xB0, 0x84, 0xA5, 0xDB, 0x64, 0x44, 0x06, 0x36, 0xCD, 0xFE, - 0x07, 0x36, 0xD6, 0xFE, 0xE5, 0x01, 0x23, 0x46, 0xB0, 0x60, 0xA4, 0x78, 0xFF, 0xFF, 0x46, 0x43, - 0x24, 0x60, 0xA4, 0x61, 0xA1, 0xD3, 0x59, 0xD1, 0x06, 0x1B, 0x59, 0xD3, 0x59, 0xD1, 0x03, 0x1B, - 0x59, 0xD3, 0x59, 0xD1, 0xF0, 0x18, 0x00, 0x63, 0x49, 0xDD, 0x60, 0x40, 0x02, 0x36, 0x11, 0x00, - 0x03, 0x36, 0x32, 0x00, 0x01, 0x36, 0x08, 0x00, 0x05, 0x3A, 0xEA, 0x01, 0xA4, 0xD3, 0x5A, 0xD3, - 0x9C, 0x85, 0xA4, 0x84, 0xA2, 0xDB, 0xE4, 0x01, 0x01, 0x60, 0x4E, 0x61, 0x00, 0x64, 0xA1, 0xDB, - 0xDF, 0x01, 0x31, 0x60, 0x3C, 0x64, 0x40, 0x45, 0x22, 0x00, 0x01, 0x60, 0x4E, 0x66, 0xA6, 0xD3, - 0x04, 0xA1, 0x60, 0x43, 0xA1, 0xD3, 0xC9, 0x81, 0x60, 0x45, 0x00, 0xBB, 0xA1, 0xDB, 0xBE, 0xD3, - 0x09, 0x03, 0xD4, 0x84, 0x9C, 0x84, 0xDC, 0x84, 0xFF, 0xFF, 0x04, 0x0E, 0xA3, 0xD1, 0x63, 0x46, - 0x64, 0x43, 0xF2, 0x01, 0x9C, 0x84, 0xDC, 0x85, 0x49, 0xDD, 0x61, 0x44, 0x00, 0xBB, 0xA6, 0xDB, - 0x02, 0x03, 0x65, 0x44, 0xBE, 0xDB, 0xBC, 0x01, 0x31, 0x60, 0x17, 0x64, 0x40, 0x45, 0x01, 0x60, - 0x4E, 0x66, 0xA6, 0xD3, 0xFF, 0xFF, 0xD0, 0x80, 0x0F, 0x18, 0x02, 0x03, 0x60, 0x46, 0xF9, 0x01, - 0x58, 0xD3, 0xA4, 0xD3, 0x60, 0x45, 0x00, 0x63, 0xA4, 0xDD, 0x05, 0x18, 0x58, 0xD3, 0xFF, 0xFF, - 0xC4, 0x83, 0xA2, 0xDD, 0xCA, 0x84, 0xA6, 0xDB, 0x25, 0x58, 0x64, 0x41, 0x00, 0x60, 0x46, 0x74, - 0xCD, 0xE2, 0x04, 0xE1, 0x02, 0x60, 0x00, 0xE1, 0x3F, 0x44, 0x40, 0x26, 0x0B, 0x00, 0x01, 0x2A, - 0x05, 0x00, 0x42, 0x60, 0x09, 0xE0, 0x60, 0x60, 0x1C, 0xE0, 0x04, 0x00, 0x42, 0x60, 0x09, 0xE0, - 0x80, 0x60, 0x1C, 0xE0, 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x43, 0x64, 0x3A, 0xDB, 0xA4, 0xF3, - 0xFF, 0xFF, 0x60, 0x41, 0x3F, 0x44, 0x02, 0x27, 0x84, 0x00, 0x20, 0x2B, 0xFF, 0x01, 0x80, 0xE1, - 0x95, 0x60, 0x80, 0xE7, 0x61, 0x40, 0x40, 0x2B, 0x0D, 0x00, 0x05, 0x63, 0x32, 0x60, 0x58, 0x4F, - 0x6A, 0x78, 0xFF, 0xFF, 0x28, 0x63, 0xFF, 0xFF, 0xFE, 0x1F, 0x01, 0x63, 0x32, 0x60, 0x58, 0x4F, - 0x6A, 0x78, 0xFF, 0xFF, 0xFF, 0xB1, 0xCD, 0x81, 0xE1, 0x85, 0x27, 0x60, 0x3C, 0x64, 0x44, 0xD1, - 0xFF, 0xFF, 0x64, 0x43, 0x32, 0x60, 0x58, 0x4F, 0x6A, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x00, 0x63, - 0x32, 0x60, 0x58, 0x4F, 0x6A, 0x78, 0xFF, 0xFF, 0x27, 0x60, 0x58, 0x61, 0x29, 0x60, 0xE8, 0x62, - 0xA2, 0xD3, 0x45, 0xD1, 0x47, 0xBC, 0xE0, 0x84, 0x62, 0x45, 0x64, 0x5F, 0xE8, 0x83, 0x32, 0x60, - 0x58, 0x4F, 0x6A, 0x78, 0xFF, 0xFF, 0xA3, 0xF3, 0xCD, 0xE2, 0x60, 0x54, 0x04, 0xE1, 0x04, 0x29, - 0xFE, 0x01, 0xC4, 0xE2, 0x15, 0x60, 0xA2, 0xE7, 0x38, 0x69, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, - 0xFD, 0x01, 0x01, 0x2A, 0x36, 0x00, 0x03, 0x60, 0x80, 0x7C, 0xA3, 0x83, 0x29, 0x60, 0xE8, 0x62, - 0xA2, 0xD1, 0x43, 0xBB, 0xB3, 0x83, 0x95, 0x60, 0x80, 0xE7, 0x32, 0x60, 0x58, 0x4F, 0x6A, 0x78, - 0xFF, 0xFF, 0xE3, 0x83, 0x15, 0x60, 0xA2, 0xE7, 0x38, 0x69, 0xFF, 0xFF, 0x68, 0x41, 0x01, 0x16, - 0xFD, 0x01, 0x63, 0x47, 0x61, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x00, 0x3A, 0xCC, 0x84, 0x02, 0x00, - 0x07, 0x3A, 0xDC, 0x84, 0xFF, 0xB4, 0xA5, 0xDB, 0x60, 0x47, 0xE8, 0x84, 0x47, 0x65, 0x29, 0x60, - 0xE8, 0x62, 0xA2, 0xD3, 0xB4, 0x85, 0xB4, 0x83, 0x80, 0xE1, 0x95, 0x60, 0x80, 0xE7, 0x32, 0x60, - 0x58, 0x4F, 0x6A, 0x78, 0xFF, 0xFF, 0xA3, 0xF3, 0xCD, 0xE2, 0x60, 0x54, 0x04, 0x29, 0xFE, 0x01, - 0xC4, 0xE2, 0xA4, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x2B, 0x04, 0x00, 0x32, 0x60, 0x43, 0x78, - 0xFF, 0xFF, 0xFF, 0x01, 0xA4, 0xF3, 0x80, 0xE1, 0xCC, 0x84, 0xE0, 0x85, 0x15, 0x60, 0xA2, 0xE7, - 0x26, 0x60, 0x78, 0x64, 0x58, 0x4F, 0x4F, 0x00, 0x26, 0x60, 0x94, 0x64, 0x58, 0x4F, 0x4B, 0x00, - 0x26, 0x60, 0xB0, 0x64, 0x58, 0x4F, 0x47, 0x00, 0x26, 0x60, 0xCC, 0x64, 0x58, 0x4F, 0x43, 0x00, - 0x26, 0x60, 0xE8, 0x64, 0x58, 0x4F, 0x3F, 0x00, 0x27, 0x60, 0x04, 0x64, 0x58, 0x4F, 0x3B, 0x00, - 0x27, 0x60, 0x20, 0x64, 0x58, 0x4F, 0x37, 0x00, 0x01, 0x68, 0xFF, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x3F, 0x44, 0x20, 0x27, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x26, 0x08, 0x00, 0x00, 0x60, - 0x18, 0x64, 0x00, 0x60, 0x00, 0x65, 0x94, 0x84, 0xA0, 0x50, 0x1D, 0x60, 0x19, 0xE2, 0xC4, 0xE2, - 0x00, 0x63, 0xA3, 0xFD, 0x32, 0x7B, 0x4D, 0xE2, 0xBF, 0xFE, 0xC4, 0xE2, 0x41, 0xFF, 0xE0, 0xFE, - 0xE1, 0xFE, 0xE2, 0xFE, 0x43, 0xFF, 0x44, 0xFF, 0x46, 0xFF, 0xA5, 0xF3, 0x62, 0xFF, 0x60, 0x40, - 0x05, 0x36, 0x2D, 0xFF, 0x07, 0x36, 0xD5, 0xFE, 0x08, 0xE1, 0x88, 0x60, 0x85, 0x71, 0x8D, 0xE2, - 0xA2, 0x60, 0x16, 0x78, 0xFF, 0xFF, 0x50, 0xEC, 0x63, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x40, 0xEC, 0x2F, 0x58, 0xFF, 0xFF, 0x44, 0xD3, 0x80, 0x7C, 0x60, 0x48, 0x60, 0x47, 0x00, 0x7F, - 0xB0, 0x8A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0x42, 0xFF, 0x40, 0xFF, - 0xDD, 0xFE, 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, 0x19, 0x61, 0xCD, 0x81, - 0xFF, 0xFF, 0xFD, 0x02, 0x43, 0x45, 0x20, 0x44, 0x60, 0xBC, 0x40, 0x40, 0x02, 0x60, 0xEE, 0x63, - 0x7F, 0xF3, 0xA3, 0xFD, 0x40, 0x7F, 0xA4, 0xFB, 0x05, 0x64, 0xA5, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, - 0x24, 0x60, 0xDD, 0x64, 0x3F, 0x40, 0x01, 0x2B, 0x02, 0x00, 0x32, 0x60, 0xA2, 0x64, 0xA6, 0xFB, - 0xBB, 0x60, 0x20, 0x78, 0xFF, 0xFF, 0x04, 0xEE, 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, - 0x19, 0x61, 0xCD, 0x81, 0xFF, 0xFF, 0xFD, 0x02, 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, - 0x00, 0xEE, 0x15, 0x60, 0xA2, 0xE7, 0x25, 0x60, 0x02, 0x63, 0x25, 0x60, 0x76, 0x65, 0xDF, 0xFE, - 0x80, 0xE1, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, 0x00, 0x7F, 0x60, 0x4A, - 0xD7, 0x80, 0xA1, 0xFF, 0xFF, 0xFF, 0xF5, 0x02, 0x25, 0x60, 0x76, 0x63, 0x26, 0x60, 0x78, 0x65, - 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, 0x00, 0x7F, 0x60, 0x4A, 0xD7, 0x80, - 0xA1, 0xFF, 0xFF, 0xFF, 0xF5, 0x02, 0x3F, 0x40, 0x20, 0x2B, 0x00, 0x00, 0x01, 0x68, 0xFF, 0x6A, - 0xBF, 0xFE, 0x33, 0x60, 0x8A, 0x78, 0xFF, 0xFF, 0x3F, 0x40, 0x20, 0x2B, 0xAD, 0x00, 0x01, 0x16, - 0xFE, 0x01, 0x38, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x2A, 0xA5, 0x00, 0x27, 0x60, - 0xB4, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x7F, 0xF1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x9C, 0x01, 0x00, 0x7F, 0xF1, 0xDD, 0xFE, 0xAD, 0x4F, 0x00, 0x7F, - 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x02, 0x60, - 0xEE, 0x64, 0xA3, 0xFB, 0xA4, 0xF9, 0x05, 0x64, 0xA5, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, 0x83, 0x00, - 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x43, 0x45, 0xA4, 0xD1, 0xDA, 0x83, 0xC3, 0x85, 0x80, 0xE1, - 0xDF, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, 0x80, 0xBC, 0x00, 0x7F, 0x60, 0x4A, - 0xD7, 0x80, 0xA1, 0xFF, 0xF6, 0x02, 0xBF, 0xFE, 0x6E, 0x00, 0x3F, 0x40, 0x40, 0x26, 0x13, 0x00, - 0x0B, 0x60, 0xF8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xF8, 0xA2, - 0xA2, 0xD1, 0x0A, 0x60, 0x19, 0x64, 0x90, 0x84, 0xA0, 0x52, 0x06, 0xA2, 0xA2, 0xD1, 0x46, 0x60, - 0x09, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, 0xAD, 0x4F, 0xFD, 0xB4, - 0xA0, 0x5D, 0x02, 0xEE, 0xBD, 0xFE, 0x50, 0x00, 0x80, 0xE1, 0x01, 0x16, 0xFE, 0x01, 0x64, 0x48, - 0x92, 0x6A, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x40, 0x27, 0x60, 0xA2, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x3F, 0x00, 0x80, 0xE1, 0x01, 0x16, 0xFE, 0x01, - 0x01, 0x68, 0xA7, 0x6A, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x40, 0x36, 0x00, 0x20, 0x44, 0x20, 0xBC, - 0x40, 0x40, 0x80, 0xE1, 0x64, 0x46, 0x01, 0x16, 0xFE, 0x01, 0x21, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, - 0x68, 0x5E, 0x01, 0x16, 0xFE, 0x01, 0x22, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x5F, 0x26, 0xFA, - 0x1C, 0xF2, 0x01, 0x16, 0xFE, 0x01, 0x3A, 0x69, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x5F, 0x27, 0xFA, - 0x1B, 0x00, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x43, 0x45, 0xBE, 0xD5, 0xA4, 0xD2, 0x5A, 0x86, - 0xEF, 0xA0, 0x11, 0x61, 0x01, 0x06, 0x60, 0x41, 0x24, 0x60, 0xE0, 0x63, 0x80, 0xE1, 0xBD, 0xD3, - 0x26, 0x42, 0x01, 0x16, 0xFE, 0x01, 0x60, 0x49, 0xA1, 0xFF, 0xFF, 0xFF, 0x68, 0x44, 0xCD, 0x81, - 0xA2, 0xDA, 0x5A, 0x86, 0xF4, 0x02, 0x25, 0x43, 0x21, 0xE1, 0x00, 0x64, 0xBF, 0xDB, 0x20, 0x44, - 0x20, 0x2A, 0x07, 0x00, 0x07, 0xB4, 0x04, 0x36, 0xC3, 0xFE, 0x06, 0x36, 0xCC, 0xFE, 0x07, 0x36, - 0xD5, 0xFE, 0x20, 0x44, 0xD8, 0xB4, 0x40, 0x40, 0x20, 0x44, 0x40, 0x2A, 0x07, 0x00, 0x9F, 0xFE, - 0x1E, 0x05, 0xBF, 0xB4, 0x40, 0x40, 0xA6, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x24, 0x60, 0x80, 0x63, - 0xBD, 0xD3, 0x02, 0x61, 0x17, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x02, 0x61, 0x13, 0x1B, 0x04, 0xA3, - 0xBD, 0xD3, 0x02, 0x61, 0x0F, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x04, 0x61, 0x0B, 0x1B, 0x04, 0xA3, - 0xBD, 0xD3, 0x06, 0x61, 0x07, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x07, 0x61, 0x03, 0x1B, 0xBB, 0x60, - 0x20, 0x78, 0xFF, 0xFF, 0xA3, 0xD1, 0x40, 0x44, 0x20, 0x44, 0x07, 0xB5, 0xD4, 0x85, 0x35, 0x80, - 0x24, 0x45, 0x24, 0x60, 0xBC, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE1, 0x43, 0x45, - 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, 0xBD, 0xD1, 0x40, 0x44, 0x10, 0x27, - 0x10, 0x00, 0xFF, 0x60, 0x7F, 0x65, 0x15, 0x60, 0xA2, 0x64, 0x24, 0x40, 0x08, 0x2B, 0xA4, 0x84, - 0xA0, 0x57, 0xFF, 0xFF, 0x64, 0x49, 0xFF, 0xFF, 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x00, 0x7F, - 0xA3, 0xDB, 0xA1, 0x01, 0x80, 0xE1, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, - 0xBD, 0xD3, 0xBD, 0xD1, 0x40, 0x44, 0x10, 0x2B, 0x11, 0x00, 0xA3, 0xD3, 0xFF, 0xFF, 0x15, 0x60, - 0x80, 0xE7, 0x24, 0x40, 0x07, 0x27, 0x02, 0x00, 0x50, 0xEC, 0x00, 0x00, 0x60, 0x4A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x24, 0x40, 0x20, 0x2B, 0x40, 0xEC, 0x0F, 0x00, 0x15, 0x60, 0x22, 0x64, - 0x24, 0x40, 0x08, 0x27, 0x80, 0xBC, 0xA3, 0xD3, 0xA0, 0x57, 0x60, 0x48, 0x64, 0x44, 0x80, 0xBC, - 0xFF, 0xB4, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x75, 0x01, 0x42, 0x6F, 0x6F, 0x74, - 0x63, 0x6F, 0x64, 0x65, 0x20, 0x21, 0x21, 0x20, 0x20, 0x00, 0x53, 0x54, 0x41, 0x2F, 0x41, 0x50, - 0x20, 0x46, 0x75, 0x6E, 0x63, 0x27, 0x73, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x02, 0x00, 0x24, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x07, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x40, 0x00, - 0x32, 0x00, 0x36, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x40, 0x00, 0x3B, 0x00, 0x40, 0x00, - 0x17, 0x00, 0x07, 0x00, 0x07, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x1E, 0x00, 0x0C, 0x00, - 0x08, 0x00, 0x57, 0x00, 0x4D, 0x00, 0x57, 0x00, 0x2B, 0x00, 0x19, 0x00, 0x08, 0x00, 0x5D, 0x00, - 0x53, 0x00, 0x5D, 0x00, 0x31, 0x00, 0x1F, 0x00, 0x08, 0x00, 0xA9, 0xF3, 0x21, 0x61, 0x00, 0x7C, - 0x01, 0x00, 0x00, 0xFA, 0x60, 0x46, 0xFE, 0x63, 0xA3, 0xD8, 0xFE, 0x1F, 0xCD, 0x81, 0xD8, 0x84, - 0xF8, 0x02, 0x21, 0x61, 0x80, 0x67, 0x40, 0x4A, 0xA9, 0xF5, 0x14, 0x60, 0x02, 0x65, 0x01, 0x7C, - 0x07, 0x18, 0x2A, 0x43, 0x02, 0xFC, 0x5F, 0x8A, 0x8E, 0xF8, 0x70, 0xF8, 0x00, 0xF4, 0xF8, 0x01, - 0x2E, 0x58, 0xFF, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x0A, 0x00, 0x42, 0x60, 0x09, 0xE0, 0x3F, 0x40, - 0x01, 0x2A, 0x03, 0x00, 0x60, 0x60, 0x1C, 0xE0, 0x02, 0x00, 0x80, 0x60, 0x1C, 0xE0, 0x40, 0xEC, - 0x00, 0xED, 0x02, 0xEE, 0x80, 0x60, 0x58, 0xEC, 0x80, 0x60, 0x00, 0xED, 0x80, 0x60, 0x82, 0xEE, - 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, 0x07, 0xED, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, 0x00, 0xF3, - 0x28, 0xFB, 0x40, 0x44, 0x2F, 0x60, 0x52, 0x7C, 0x20, 0xF9, 0xA2, 0x60, 0x00, 0x7C, 0x21, 0xF9, - 0xA2, 0x60, 0xE0, 0x7C, 0x22, 0xF9, 0x18, 0x60, 0x97, 0x7C, 0x23, 0xF9, 0x18, 0x60, 0xA8, 0x7C, - 0x24, 0xF9, 0x18, 0x60, 0xD2, 0x7C, 0x25, 0xF9, 0x18, 0x60, 0xE3, 0x7C, 0x26, 0xF9, 0x91, 0x60, - 0x00, 0xE8, 0x28, 0xE8, 0x44, 0x60, 0x02, 0xE6, 0x10, 0x67, 0x40, 0x52, 0x10, 0x60, 0x04, 0xE6, - 0x08, 0x60, 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xBD, 0xD3, 0x02, 0xA8, 0xD4, 0x80, - 0x4A, 0x02, 0x49, 0x02, 0xDB, 0x83, 0xFA, 0x60, 0x27, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, 0x1A, 0x18, - 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xDB, 0x83, 0xD3, 0x83, 0xD3, 0x86, 0x64, 0x41, - 0xCD, 0x81, 0xA6, 0xD1, 0xDA, 0x86, 0x25, 0x60, 0x02, 0x65, 0x00, 0x60, 0x72, 0x63, 0xA5, 0xD3, - 0xDA, 0x85, 0x90, 0x84, 0xFF, 0x27, 0x02, 0x00, 0xA2, 0xD9, 0x01, 0x00, 0xF8, 0x1F, 0xCD, 0x81, - 0xFF, 0xFF, 0xEF, 0x02, 0x08, 0x60, 0x06, 0x63, 0xFA, 0x60, 0x28, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, - 0x0B, 0x18, 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xBF, 0xD3, 0x29, 0x60, 0xE8, 0x62, - 0x0E, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xA2, 0xDB, 0x08, 0x60, 0x06, 0x63, 0xFD, 0x60, 0x0C, 0x65, - 0x5B, 0xD3, 0xBF, 0xD1, 0x10, 0x18, 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xFA, 0xA3, - 0xA3, 0xD3, 0x02, 0x60, 0x00, 0x65, 0xF7, 0xA0, 0xFC, 0xA0, 0x0D, 0x05, 0x04, 0x05, 0x78, 0x43, - 0x02, 0x61, 0x24, 0x60, 0xDD, 0x78, 0x21, 0x60, 0x00, 0x65, 0x3F, 0x43, 0x3F, 0x43, 0x21, 0x60, - 0x00, 0x65, 0xC0, 0x60, 0x8F, 0xEE, 0xB7, 0x84, 0x40, 0x5F, 0x00, 0x60, 0x30, 0xE2, 0x00, 0x60, - 0x50, 0xE2, 0x00, 0x60, 0x79, 0xE2, 0x00, 0x60, 0x90, 0xE2, 0x01, 0x60, 0xD0, 0xE2, 0x01, 0x60, - 0xF0, 0xE2, 0x01, 0x60, 0xB0, 0xE2, 0x26, 0x64, 0x35, 0xFB, 0x01, 0x60, 0x30, 0x64, 0x0A, 0xA4, - 0x38, 0xFB, 0x60, 0x45, 0x00, 0x60, 0xF8, 0x64, 0x0A, 0xA4, 0x39, 0xFB, 0x35, 0xF1, 0x0A, 0x64, - 0xC4, 0x84, 0x36, 0xFB, 0xC0, 0x84, 0x0A, 0xA4, 0x37, 0xFB, 0x09, 0x60, 0x2A, 0x64, 0xB9, 0xFB, - 0x82, 0xFF, 0x92, 0xFF, 0x5C, 0x41, 0x5C, 0x46, 0x5C, 0x47, 0x00, 0xE1, 0xA3, 0x60, 0x4B, 0x63, - 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x87, 0xFF, 0x97, 0xFF, 0x0C, 0x60, 0x02, 0x64, 0x40, 0x5A, - 0x06, 0xA4, 0x40, 0x5B, 0x5C, 0x5E, 0x5C, 0x51, 0x28, 0x60, 0x44, 0x62, 0xA2, 0xD3, 0x7F, 0xFB, - 0x2D, 0x60, 0xCC, 0x61, 0x27, 0x7C, 0xA1, 0xD9, 0x6D, 0x60, 0x1C, 0x63, 0x7F, 0xA3, 0xE3, 0x87, - 0x00, 0x7F, 0xAA, 0xFB, 0x02, 0x60, 0x7F, 0x64, 0x00, 0x60, 0x42, 0x65, 0xD4, 0x84, 0xAB, 0xFB, - 0xDC, 0x84, 0xA9, 0xFB, 0x24, 0x60, 0x0E, 0x62, 0xA2, 0xDB, 0x34, 0x60, 0x58, 0x4E, 0x64, 0x78, - 0xFF, 0xFF, 0xAB, 0xF1, 0xAA, 0xF3, 0x7C, 0x63, 0xAD, 0xFB, 0x60, 0x46, 0x01, 0xFC, 0xDC, 0x84, - 0xD0, 0x80, 0x00, 0xFA, 0xFA, 0x04, 0xAE, 0xFB, 0x60, 0x46, 0x00, 0x64, 0x00, 0xFA, 0x63, 0x44, - 0x80, 0x7F, 0x01, 0xFA, 0xAB, 0xF3, 0xAA, 0xF1, 0xDC, 0x84, 0xD0, 0x84, 0xAC, 0xFB, 0x03, 0x60, - 0x26, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xB1, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x2E, 0xFB, 0x82, 0xFF, - 0x40, 0x42, 0x87, 0xFF, 0xAC, 0xF3, 0xB4, 0xFB, 0x08, 0x60, 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, - 0xBD, 0xD3, 0xA3, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x24, 0x02, 0x23, 0x02, 0x2D, 0x60, 0x1A, 0x62, - 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x80, 0x26, 0x1C, 0x00, 0x04, 0xA3, 0xFD, 0x60, 0x0D, 0x65, - 0x5B, 0xD3, 0xBF, 0xD1, 0x16, 0x18, 0xC3, 0x83, 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xBF, 0xD3, - 0xAD, 0x49, 0xFE, 0xA0, 0x00, 0x64, 0x0E, 0x04, 0x08, 0xB1, 0x20, 0xBC, 0x08, 0x28, 0x18, 0xBC, - 0x1C, 0x60, 0xB8, 0x63, 0x07, 0x7C, 0xA3, 0xD9, 0x1C, 0x60, 0xB6, 0x63, 0x05, 0x7C, 0xA3, 0xD9, - 0x01, 0x00, 0x00, 0x64, 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xDB, 0x00, 0x64, 0x40, 0x50, 0x63, 0xFF, - 0x60, 0xFF, 0x66, 0xFF, 0x65, 0xFF, 0x64, 0xFF, 0x61, 0xFF, 0x62, 0xFF, 0x49, 0x60, 0x02, 0xE1, - 0x52, 0x60, 0x02, 0xE1, 0x5B, 0x60, 0x02, 0xE1, 0x65, 0x60, 0x02, 0xE1, 0x6C, 0x60, 0x02, 0xE1, - 0x76, 0x60, 0x02, 0xE1, 0x41, 0x60, 0x02, 0xE1, 0x04, 0x65, 0x2D, 0x60, 0x18, 0x64, 0x44, 0xD3, - 0xEF, 0x60, 0x58, 0x4E, 0xBD, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x9E, 0x65, 0x0C, 0x64, 0xA5, 0xDB, - 0x36, 0x60, 0x1E, 0x64, 0xA1, 0xFB, 0x2D, 0xFF, 0x06, 0x61, 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, - 0xAE, 0x60, 0x58, 0x4D, 0xB1, 0x78, 0xFF, 0xFF, 0xF0, 0x67, 0x0E, 0xFA, 0x24, 0x60, 0x7A, 0x62, - 0x24, 0x60, 0x5E, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x2B, 0x41, 0x4D, 0x8B, 0xFF, 0xFF, 0xE9, 0x02, 0x06, 0x61, 0x41, 0x4B, 0x09, 0x60, - 0x08, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xB1, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x7A, 0x62, 0x24, 0x60, - 0x52, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x2B, 0x41, 0x4D, 0x8B, 0xFF, 0xFF, 0xEB, 0x02, 0x19, 0x60, 0x17, 0x78, 0xFF, 0xFF, 0x00, 0xEA, - 0x00, 0xEB, 0x50, 0x60, 0x03, 0xEA, 0x51, 0x60, 0x13, 0xEA, 0x52, 0x60, 0x30, 0xEA, 0x53, 0x60, - 0x40, 0xEA, 0x54, 0x60, 0x52, 0xEA, 0x55, 0x60, 0x6D, 0xEA, 0x56, 0x60, 0x71, 0xEA, 0x57, 0x60, - 0x8B, 0xEA, 0x58, 0x60, 0x47, 0xEA, 0x59, 0x60, 0xA0, 0xEA, 0x5A, 0x60, 0xB2, 0xEA, 0x5B, 0x60, - 0xC1, 0xEA, 0x5C, 0x60, 0xD7, 0xEA, 0x5D, 0x60, 0xEB, 0xEA, 0x5E, 0x60, 0xA0, 0xEA, 0x50, 0x60, - 0x36, 0xEB, 0x51, 0x60, 0x37, 0xEB, 0x52, 0x60, 0x20, 0xEB, 0x53, 0x60, 0xE4, 0xEB, 0x54, 0x60, - 0x34, 0xEB, 0x55, 0x60, 0x58, 0xEB, 0x56, 0x60, 0x48, 0xEB, 0x57, 0x60, 0xD0, 0xEB, 0x58, 0x60, - 0xC3, 0xEB, 0x59, 0x60, 0xFC, 0xEB, 0x5A, 0x60, 0x34, 0xEB, 0x5B, 0x60, 0x58, 0xEB, 0x5C, 0x60, - 0xC0, 0xEB, 0x5D, 0x60, 0xD0, 0xEB, 0x5E, 0x60, 0x91, 0xEB, 0x00, 0xEA, 0x00, 0xEB, 0xE0, 0x60, - 0x02, 0xEA, 0xE0, 0x60, 0x03, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xB0, 0x60, 0x00, 0xEB, 0xAB, 0x48, - 0x40, 0x3B, 0x01, 0x00, 0xFC, 0x01, 0x00, 0xEB, 0x03, 0x60, 0x02, 0x62, 0x62, 0x44, 0xA2, 0xDB, - 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, - 0x00, 0xEA, 0x3F, 0x40, 0x40, 0x26, 0x08, 0x00, 0x00, 0x60, 0x18, 0x64, 0x00, 0x60, 0x00, 0x65, - 0x94, 0x84, 0xA0, 0x50, 0x1D, 0x60, 0x19, 0xE2, 0x24, 0x44, 0xFF, 0xB4, 0x04, 0xFB, 0x50, 0x60, - 0x00, 0x64, 0x05, 0xFB, 0x10, 0x60, 0x10, 0x75, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0x3F, 0x41, - 0xA5, 0x4C, 0x50, 0x37, 0x04, 0x00, 0x01, 0xB9, 0x41, 0x5F, 0xB5, 0x60, 0x55, 0xE0, 0x0C, 0x60, - 0x10, 0x62, 0xA2, 0xD3, 0x01, 0x60, 0x01, 0x65, 0xD4, 0x80, 0x5A, 0xD1, 0x0F, 0x02, 0x5A, 0xD3, - 0x3C, 0x60, 0x00, 0x66, 0xE0, 0x87, 0x40, 0x4A, 0x68, 0x60, 0x28, 0x61, 0x64, 0x44, 0xC8, 0x84, - 0x0C, 0x63, 0xAA, 0x46, 0x58, 0xD0, 0xAA, 0x46, 0x59, 0xD8, 0xFB, 0x1F, 0x08, 0x60, 0x00, 0x63, - 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xA3, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x61, 0x02, 0x60, 0x02, - 0x6E, 0x60, 0x58, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x41, 0x4B, 0x2B, 0x41, 0x6E, 0x60, 0xA0, 0x7C, - 0xD1, 0x80, 0xA1, 0xD2, 0x25, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, - 0x40, 0x4A, 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, - 0xEC, 0x18, 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x67, 0x44, - 0xC0, 0x84, 0xE0, 0x85, 0x2C, 0x44, 0xD4, 0x80, 0x63, 0x41, 0x01, 0x06, 0x65, 0x44, 0xC8, 0x83, - 0xAA, 0x46, 0x59, 0xD1, 0x27, 0xD8, 0x5A, 0x87, 0xFC, 0x1F, 0xAA, 0x46, 0x2B, 0x41, 0xD5, 0x01, - 0x6E, 0x60, 0xA0, 0x61, 0x41, 0x4B, 0x2B, 0x41, 0x6E, 0x60, 0xD8, 0x7C, 0xD1, 0x80, 0xA1, 0xD2, - 0x27, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, 0x40, 0x4A, 0x59, 0xD2, - 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0xEC, 0x18, 0xD4, 0x80, - 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x04, 0xA3, 0xA3, 0xD1, 0x5A, 0x88, - 0x2C, 0x43, 0xD3, 0x80, 0xFF, 0xFF, 0x01, 0x06, 0x64, 0x43, 0xCF, 0x83, 0xAA, 0x46, 0x60, 0xFE, - 0x28, 0xD1, 0x5E, 0x88, 0x27, 0xD8, 0x5A, 0x87, 0xFB, 0x1F, 0x20, 0xFE, 0xAA, 0x46, 0xD3, 0x01, - 0xB8, 0xFE, 0xB9, 0xFE, 0xBA, 0xFE, 0xBB, 0xFE, 0xBD, 0xFE, 0xBF, 0xFE, 0x2D, 0x60, 0x1A, 0x62, - 0xA2, 0xD3, 0x12, 0x63, 0x60, 0x40, 0x01, 0x27, 0x05, 0x00, 0x0B, 0x60, 0xEA, 0x62, 0x00, 0x64, - 0x5A, 0xDB, 0xFE, 0x1F, 0x34, 0x60, 0x81, 0x78, 0xFF, 0xFF, 0xF1, 0xFF, 0xF6, 0x6C, 0x1E, 0x00, - 0x04, 0x00, 0xF2, 0xFF, 0xFA, 0x6C, 0x1E, 0x00, 0x04, 0x00, 0xFB, 0xFF, 0x02, 0x6D, 0x1E, 0x00, - 0x04, 0x00, 0xF1, 0xFF, 0x8C, 0x64, 0x1E, 0x00, 0x04, 0x00, 0xF2, 0xFF, 0x90, 0x64, 0x1E, 0x00, - 0x04, 0x00, 0xFB, 0xFF, 0x98, 0x64, 0x1E, 0x00, 0x04, 0x00, 0x86, 0xFD, 0x50, 0x28, 0x00, 0x00, - 0x06, 0x00, 0x10, 0xFD, 0x74, 0x01, 0x00, 0x00, 0x02, 0x00, 0x14, 0xFD, 0x18, 0x2D, 0x00, 0x00, - 0x0A, 0x00, 0x20, 0xFA, 0x94, 0x26, 0x00, 0x00, 0x0E, 0x00, 0x21, 0xFA, 0x78, 0x26, 0x00, 0x00, - 0x0E, 0x00, 0x22, 0xFA, 0xB0, 0x26, 0x00, 0x00, 0x0E, 0x00, 0x23, 0xFA, 0x64, 0x25, 0x00, 0x00, - 0x01, 0x00, 0x24, 0xFA, 0x58, 0x27, 0x00, 0x00, 0x0E, 0x00, 0x25, 0xFA, 0x78, 0x25, 0x00, 0x00, - 0x80, 0x00, 0x26, 0xFA, 0x5E, 0x25, 0x00, 0x00, 0x01, 0x00, - -}; /* fw_image_3_data */ - -static const hcf_8 fw_image_4_data[] = { - 0xA2, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0xC3, 0x78, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0xC9, 0x78, 0xC4, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0x19, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x44, 0xFF, 0x20, 0x54, 0xCD, 0xE2, 0xA2, 0x60, 0xDB, 0x78, 0x08, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0xDD, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0xDD, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA2, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA8, 0x60, 0x73, 0x78, 0x4C, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA7, 0x60, 0xFB, 0x78, 0x4C, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC4, 0xE2, 0x84, 0xFF, 0x22, 0x58, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA3, 0x60, 0x7E, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE4, 0xE2, 0xA8, 0x60, 0x14, 0x78, 0xB5, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBA, 0x60, 0xCE, 0x78, 0x64, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA8, 0x60, 0x87, 0x78, 0xA4, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA8, 0x60, 0x55, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAE, 0x60, 0x1E, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAE, 0x60, 0x4B, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAC, 0x60, 0xD8, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAD, 0x60, 0x08, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAD, 0x60, 0x08, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAF, 0x60, 0xC0, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAD, 0x60, 0x0B, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x83, 0x64, 0x80, 0x29, 0x09, 0xFB, 0xAD, 0x60, 0xE6, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, - 0x31, 0x60, 0x16, 0x78, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x30, 0x60, 0xA1, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB9, 0x60, 0x4B, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB8, 0x60, 0xBB, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB0, 0x60, 0x89, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0x83, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBB, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xB0, 0xFF, 0xB1, 0xFF, 0x40, 0xFF, 0x43, 0xFF, 0xBB, 0x60, 0x20, 0x78, 0x44, 0xFF, 0xFF, 0x01, - 0xBB, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x33, 0x60, 0x9B, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xBB, 0x60, 0x20, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xBB, 0x60, 0x1F, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xBF, 0x60, 0xDB, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEB, 0x60, 0x1F, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE3, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE3, 0x78, 0x24, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE9, 0x60, 0xE3, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE3, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE3, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE3, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x24, 0x60, 0xE5, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x14, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x32, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x11, 0x78, 0x28, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x11, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x11, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x25, 0x60, 0x11, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x87, 0x64, 0x80, 0x29, 0x09, 0xFB, 0x47, 0xFF, 0x25, 0x60, 0x11, 0x78, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2F, 0x60, 0x63, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2F, 0x60, 0xB3, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x07, 0x02, 0x62, 0xFF, 0x63, 0xFF, 0x64, 0xFF, 0x65, 0xFF, - 0x66, 0xFF, 0xBF, 0xFE, 0xA1, 0xFF, 0x82, 0xFF, 0x88, 0xFF, 0x6C, 0x40, 0x41, 0xFF, 0xC4, 0xE2, - 0x43, 0xFF, 0x5C, 0x49, 0x08, 0xE1, 0xA2, 0x60, 0x16, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0x98, 0xFF, - 0x80, 0x3E, 0x9F, 0xFE, 0x03, 0x04, 0x31, 0x60, 0x75, 0x78, 0xFF, 0xFF, 0xE2, 0xFE, 0x40, 0x05, - 0xE0, 0xFE, 0x5B, 0x05, 0xE1, 0xFE, 0xF2, 0x04, 0x29, 0x40, 0x08, 0x26, 0xEF, 0x01, 0x72, 0x44, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xB5, 0xF3, 0xE8, 0x85, 0xFF, 0xB7, - 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x85, 0x73, 0x44, 0xD4, 0x84, 0x10, 0x65, 0xD4, 0x80, 0xFF, 0xFF, - 0x26, 0x04, 0x3F, 0x40, 0x40, 0x26, 0x13, 0x00, 0x0B, 0x60, 0xF8, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x10, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xF8, 0xA2, 0xA2, 0xD1, 0x0A, 0x60, 0x19, 0x64, 0x90, 0x84, - 0xA0, 0x52, 0x06, 0xA2, 0xA2, 0xD1, 0x46, 0x60, 0x09, 0x64, 0x90, 0x84, 0xA0, 0x50, 0xF2, 0xF4, - 0x31, 0x60, 0x18, 0x7C, 0x63, 0x40, 0x01, 0x26, 0x08, 0x00, 0xA4, 0xD3, 0xFF, 0xFF, 0x01, 0xB4, - 0xFF, 0xFF, 0x03, 0x02, 0xAD, 0x4F, 0xFE, 0xB4, 0xA0, 0x5D, 0x02, 0xEE, 0xBD, 0xFE, 0xBE, 0x01, - 0x21, 0x46, 0x5E, 0x62, 0x9A, 0xFF, 0x07, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x06, 0x25, 0x10, 0x00, - 0xA2, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x62, 0x62, 0x01, 0x5D, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, - 0x7A, 0xDC, 0x44, 0xFF, 0x06, 0x25, 0x04, 0x00, 0x0E, 0xE1, 0x02, 0x60, 0x01, 0xE1, 0x9E, 0x01, - 0x62, 0xFF, 0xC4, 0xE2, 0x41, 0xFF, 0x0A, 0xE1, 0x99, 0x01, 0xC8, 0x74, 0xCD, 0xE2, 0x29, 0x44, - 0x08, 0xBC, 0x40, 0x49, 0x05, 0xE1, 0x31, 0x60, 0x1A, 0x63, 0xA3, 0xD3, 0xF2, 0xF3, 0x06, 0x18, - 0x28, 0x40, 0x08, 0x2A, 0x05, 0x00, 0x28, 0x40, 0x48, 0x36, 0x02, 0x00, 0x02, 0xBC, 0xF2, 0xFB, - 0x3F, 0x40, 0x01, 0x2B, 0xFF, 0xFF, 0xA1, 0xFF, 0x67, 0x4C, 0x06, 0x61, 0xCD, 0x81, 0x04, 0x25, - 0x30, 0x00, 0x87, 0x4C, 0xFB, 0x02, 0x28, 0x40, 0x40, 0x2B, 0x02, 0x00, 0x15, 0x60, 0x6F, 0x6B, - 0xF3, 0x60, 0xA0, 0x64, 0x04, 0x25, 0x25, 0x00, 0x80, 0x4C, 0x30, 0x64, 0x3A, 0xDB, 0x44, 0xFF, - 0x04, 0x25, 0x1F, 0x00, 0x04, 0x60, 0x00, 0x65, 0x25, 0x44, 0x37, 0x36, 0xB4, 0x84, 0x6E, 0x36, - 0xB4, 0x84, 0x80, 0x4E, 0x24, 0x41, 0x04, 0x25, 0x14, 0x00, 0x61, 0x4C, 0x64, 0xA1, 0x61, 0x54, - 0xA1, 0xFF, 0xFF, 0xFF, 0x04, 0x25, 0x0D, 0x00, 0x67, 0x4E, 0x07, 0x64, 0x1C, 0xFB, 0x00, 0xE1, - 0x02, 0x60, 0x01, 0xE1, 0x53, 0x01, 0x33, 0xF3, 0xFD, 0x11, 0xFC, 0x18, 0x40, 0x64, 0x3A, 0xDB, - 0x0A, 0x00, 0xC4, 0xE2, 0x27, 0x44, 0x20, 0x2A, 0x04, 0x00, 0x42, 0x64, 0x3A, 0xDB, 0x67, 0x4C, - 0x02, 0x00, 0x41, 0x64, 0x3A, 0xDB, 0x62, 0xFF, 0x08, 0xE1, 0xE2, 0xFE, 0x72, 0x52, 0x5C, 0x49, - 0x32, 0x7B, 0x4D, 0xE2, 0x3B, 0x01, 0x08, 0xE1, 0x39, 0x01, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x02, 0x02, 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0x88, 0xFF, - 0x48, 0xE2, 0x01, 0x70, 0xCE, 0xF1, 0x00, 0x6B, 0x89, 0xFF, 0x64, 0x54, 0x88, 0xFF, 0x9F, 0xFE, - 0x02, 0x05, 0x64, 0x44, 0x60, 0x54, 0xCD, 0xE2, 0xC2, 0x64, 0x3A, 0xDB, 0xBC, 0xFF, 0xB5, 0xFF, - 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xB4, 0x40, 0x46, 0x3C, 0x44, 0x00, 0xBC, 0xFF, 0xFF, 0x06, 0x03, - 0x27, 0x40, 0x26, 0x22, 0x03, 0x00, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x27, 0x44, 0x20, 0x2A, - 0x04, 0x00, 0xA0, 0x60, 0x00, 0xEA, 0xB0, 0x60, 0x00, 0xEA, 0x5C, 0x4D, 0x27, 0x44, 0x18, 0xB4, - 0x40, 0x47, 0x00, 0xE1, 0x6C, 0x40, 0x44, 0xE2, 0xC4, 0xE2, 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, - 0x32, 0xF1, 0x08, 0x29, 0x09, 0x00, 0x64, 0x40, 0x07, 0x22, 0x06, 0x00, 0x43, 0xFF, 0x27, 0x44, - 0x10, 0xBC, 0x40, 0x47, 0x00, 0x64, 0x32, 0xFB, 0x31, 0x41, 0x3C, 0x44, 0x01, 0xB1, 0x00, 0xBC, - 0x0A, 0x02, 0x09, 0x03, 0x32, 0xF3, 0x00, 0x7C, 0x01, 0xB4, 0xFF, 0xFF, 0x04, 0x03, 0x32, 0xF9, - 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x00, 0x64, - 0x33, 0xFB, 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x32, 0xF3, 0x08, 0x29, - 0x0A, 0x00, 0x60, 0x40, 0x07, 0x22, 0x07, 0x00, 0xFE, 0xB4, 0x32, 0xFB, 0x27, 0x44, 0x10, 0xBC, - 0xF7, 0xB4, 0x40, 0x47, 0x43, 0xFF, 0x00, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, 0x31, 0x40, - 0x01, 0x2A, 0x04, 0x00, 0x00, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x0A, 0xE1, 0xE5, 0xFE, 0x1D, 0x05, - 0x27, 0x44, 0x10, 0x26, 0x1D, 0x00, 0x9F, 0xFE, 0x02, 0x04, 0x02, 0xE1, 0x10, 0x00, 0x3E, 0xE1, - 0x31, 0x44, 0x01, 0x2A, 0x0C, 0x00, 0x0E, 0x0A, 0x28, 0x44, 0x04, 0x27, 0x07, 0x00, 0xD4, 0x36, - 0x05, 0x00, 0xC4, 0x36, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0xBF, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x81, 0x3E, 0xAB, 0x60, 0x2C, 0x78, 0xFF, 0xFF, 0xA3, 0x60, 0xEC, 0x78, 0xFF, 0xFF, - 0x27, 0x44, 0x08, 0x26, 0xFF, 0xFF, 0xBA, 0x60, 0x70, 0x78, 0xFF, 0xFF, 0x48, 0xF3, 0x32, 0xF1, - 0x00, 0x63, 0x64, 0x40, 0x03, 0x22, 0x66, 0x00, 0x31, 0x40, 0x08, 0x26, 0xF4, 0x01, 0xCD, 0xE2, - 0x84, 0xE1, 0x70, 0x41, 0xAD, 0x80, 0x71, 0x40, 0x80, 0x27, 0xED, 0x12, 0x03, 0x03, 0xBA, 0x60, - 0xE7, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0xC4, 0xE2, 0x32, 0xFD, 0x60, 0x40, 0x01, 0x2A, - 0xDF, 0x01, 0x00, 0x63, 0x32, 0xFD, 0x6C, 0x40, 0x3C, 0x46, 0x3E, 0xF2, 0x2A, 0xF0, 0x27, 0x41, - 0x44, 0x48, 0x20, 0xB9, 0x01, 0xB4, 0xF7, 0xB1, 0x0A, 0x03, 0x64, 0x40, 0x08, 0x27, 0x07, 0x00, - 0x0F, 0x60, 0x92, 0x63, 0x00, 0x64, 0x45, 0xFB, 0x46, 0xFB, 0xBD, 0xDB, 0xA3, 0xDB, 0xCB, 0x0A, - 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x17, 0x18, 0x28, 0x40, 0xD4, 0x36, 0x14, 0x00, - 0xAC, 0x4C, 0x80, 0x2A, 0x11, 0x00, 0x31, 0x60, 0x14, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x0C, 0x18, - 0x31, 0x60, 0x16, 0x7C, 0xA4, 0xD3, 0x31, 0x60, 0x10, 0x7C, 0xA4, 0xD3, 0x60, 0x45, 0xD4, 0x80, - 0xDC, 0x84, 0x02, 0x03, 0xA4, 0xDB, 0xAF, 0x01, 0x31, 0x60, 0x10, 0x7C, 0x00, 0x64, 0xA4, 0xDB, - 0x41, 0x47, 0x3F, 0x40, 0x01, 0x2B, 0x0D, 0x00, 0xF6, 0xFE, 0x67, 0x4C, 0x05, 0x60, 0x69, 0x6B, - 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x04, 0x18, 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, - 0xA0, 0x5E, 0x02, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0xF0, 0xFE, 0x84, 0xFF, 0xBB, 0x60, 0x18, 0x64, - 0x40, 0x42, 0x82, 0xFF, 0xE5, 0xFE, 0x03, 0x04, 0xA8, 0x60, 0x24, 0x78, 0xFF, 0xFF, 0xE4, 0xFE, - 0x0A, 0x04, 0x1D, 0xFF, 0x00, 0xEB, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, - 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x43, 0xFF, 0xE6, 0xFE, 0x03, 0x05, 0xA3, 0x60, 0x4B, 0x78, - 0xFF, 0xFF, 0x3C, 0x44, 0x60, 0x46, 0x0F, 0xF0, 0x40, 0x42, 0x64, 0x40, 0x01, 0x2A, 0x03, 0x00, - 0xA6, 0x60, 0xB1, 0x78, 0xFF, 0xFF, 0x0B, 0x64, 0x3A, 0xDB, 0x1C, 0x42, 0x22, 0x46, 0x13, 0xF2, - 0xFF, 0x65, 0x60, 0x47, 0x2A, 0xF2, 0x40, 0x45, 0x40, 0x48, 0x04, 0x2B, 0x17, 0x00, 0x16, 0xF2, - 0x1D, 0xF2, 0x40, 0x43, 0x0F, 0xF2, 0x40, 0x44, 0x25, 0x5E, 0x3F, 0x40, 0x01, 0x27, 0x40, 0x45, - 0x0F, 0x64, 0x14, 0xF0, 0x35, 0xF2, 0xA0, 0x82, 0x0F, 0xB4, 0xCA, 0x85, 0xD4, 0x80, 0x10, 0xF2, - 0x01, 0x02, 0x2B, 0xFA, 0x27, 0x44, 0x40, 0xBC, 0x40, 0x47, 0x13, 0x00, 0x17, 0xF2, 0x2C, 0xF0, - 0x40, 0x43, 0x1B, 0xF2, 0x1D, 0xFA, 0x40, 0x44, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0xAB, 0xFC, - 0x05, 0x00, 0x28, 0x40, 0xA4, 0x36, 0x02, 0x00, 0x11, 0xF2, 0x2B, 0xFA, 0x27, 0x44, 0xBF, 0xB4, - 0x40, 0x47, 0x28, 0x40, 0x40, 0x2B, 0xFF, 0xFF, 0xAB, 0x60, 0x4A, 0x78, 0xFF, 0xFF, 0x22, 0x46, - 0x2C, 0xF0, 0x27, 0x44, 0xDF, 0xB4, 0x40, 0x47, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB7, 0xFF, - 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x64, 0x40, 0x01, 0x2A, 0x09, 0x00, - 0x28, 0x44, 0x04, 0x27, 0x05, 0x00, 0xD4, 0x3A, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, - 0x1B, 0x00, 0x2A, 0xF0, 0x01, 0x65, 0x64, 0x40, 0xA4, 0x3A, 0x04, 0x65, 0x27, 0x44, 0x34, 0x87, - 0x36, 0xF3, 0xB4, 0xFF, 0x60, 0x5B, 0x4D, 0xE2, 0x04, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x0A, 0xE1, - 0x28, 0x44, 0x04, 0x27, 0x05, 0x00, 0xD4, 0x3A, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, - 0x2B, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x06, 0x64, 0x3A, 0xDB, 0x22, 0x46, 0x01, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0xBA, 0x60, 0xF0, 0x78, 0xFF, 0xFF, 0xB5, 0xFF, 0xA1, 0xFF, 0x6C, 0x40, - 0x3F, 0x40, 0x01, 0x2B, 0x03, 0x00, 0x67, 0x4C, 0x05, 0x60, 0x69, 0x6B, 0x02, 0xE1, 0x01, 0x60, - 0x08, 0xE1, 0xC4, 0xE2, 0x08, 0x64, 0x3A, 0xDB, 0xF0, 0xFE, 0x25, 0x46, 0x01, 0xF2, 0x61, 0x45, - 0xD4, 0x9E, 0x21, 0x46, 0x16, 0xFA, 0x2A, 0x44, 0x72, 0x45, 0x24, 0xFA, 0xB5, 0xF3, 0x06, 0x04, - 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, 0xB5, 0xF9, 0x25, 0xFA, 0xB6, 0xF3, - 0x02, 0x04, 0xDC, 0x84, 0xB6, 0xFB, 0x28, 0xFA, 0xB7, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB7, 0xFB, - 0x29, 0xFA, 0x2D, 0x44, 0x04, 0x2A, 0x06, 0x00, 0x28, 0x40, 0xA4, 0x36, 0x03, 0x00, 0xA5, 0x60, - 0x77, 0x78, 0xFF, 0xFF, 0x26, 0x43, 0x84, 0xBB, 0xFC, 0xB3, 0x21, 0x46, 0x01, 0x5D, 0x0F, 0xFC, - 0x5C, 0x46, 0x25, 0x44, 0x06, 0xFA, 0x05, 0xFF, 0x27, 0x44, 0x01, 0x2A, 0x13, 0x00, 0x50, 0xFE, - 0x28, 0x40, 0x08, 0x3A, 0x12, 0x00, 0x2F, 0xF2, 0x30, 0xF0, 0x60, 0x43, 0x31, 0xF2, 0x22, 0x46, - 0x64, 0x41, 0x2C, 0xF0, 0x2D, 0xF0, 0xD3, 0x80, 0x2E, 0xF0, 0xD1, 0x80, 0xD0, 0x80, 0x27, 0x44, - 0x09, 0x0C, 0x03, 0x00, 0x27, 0x44, 0x06, 0x22, 0x05, 0x00, 0xB8, 0xB4, 0x40, 0x47, 0x02, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0xD4, 0x64, 0x40, 0x48, 0x0D, 0x64, 0x3A, 0xDB, 0x31, 0x60, 0x12, 0x7C, - 0x7C, 0x44, 0xA4, 0xDB, 0x21, 0x46, 0x1C, 0xF2, 0x7C, 0xF1, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, - 0x01, 0x06, 0x64, 0x44, 0x40, 0x45, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x3A, - 0x03, 0x00, 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, 0x6E, 0x3A, 0x03, 0x00, 0x84, 0x7F, 0x40, 0x45, - 0x0B, 0x64, 0x40, 0x44, 0x00, 0x63, 0x28, 0x44, 0xA4, 0x36, 0x0B, 0x00, 0x04, 0x2B, 0x09, 0x00, - 0x30, 0xF3, 0x24, 0x45, 0xD4, 0x84, 0xCA, 0x65, 0xD4, 0x83, 0x31, 0x60, 0x12, 0x7C, 0x01, 0x64, - 0xA4, 0xDB, 0xD4, 0x64, 0x1A, 0x00, 0x0F, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x70, 0x63, 0x1C, 0xF2, - 0xCA, 0x65, 0x40, 0x45, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x3A, 0x03, 0x00, - 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, 0x6E, 0x3A, 0x03, 0x00, 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, - 0x40, 0x44, 0x2B, 0xF2, 0xC4, 0x85, 0xD4, 0x83, 0xC4, 0x64, 0x40, 0x48, 0x2F, 0xF0, 0xB0, 0xF0, - 0xB1, 0xF2, 0x00, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x80, 0x4E, 0x83, 0x4C, 0x9A, 0xFF, 0x84, 0x4C, - 0x85, 0x4C, 0x81, 0x4C, 0xA1, 0xFF, 0x98, 0xFF, 0x87, 0x4F, 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, - 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, 0xFF, 0xFF, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, - 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, 0xBC, 0xFF, 0xC4, 0xE2, 0x0C, 0x74, 0x04, 0xE1, 0xA1, 0xFF, - 0x35, 0xF3, 0xC4, 0xE2, 0x60, 0x54, 0x89, 0xFF, 0x13, 0x74, 0x88, 0xFF, 0xB5, 0xFF, 0x47, 0xFF, - 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, - 0x00, 0x6B, 0x28, 0x40, 0xC4, 0x36, 0x08, 0x00, 0x31, 0x60, 0x12, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, - 0x03, 0x1B, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x27, 0x44, 0x01, 0x2A, 0x05, 0x00, 0xFE, 0xB4, - 0x40, 0x47, 0xA4, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0xA3, 0x60, 0x3E, 0x78, 0xFF, 0xFF, 0x28, 0x40, - 0xB4, 0x3A, 0x09, 0x00, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x02, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0x90, 0x01, 0x28, 0x44, 0xD4, 0x36, 0x03, 0x00, 0xA6, 0x60, 0x98, 0x78, - 0xFF, 0xFF, 0x48, 0xE2, 0x27, 0x44, 0xFB, 0xB4, 0x40, 0x47, 0x2D, 0x60, 0x5A, 0x63, 0xA3, 0xD3, - 0xB0, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x34, 0xFB, 0x1C, 0x42, 0x22, 0x46, 0x2A, 0xF0, - 0xF7, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDA, 0x60, 0x40, 0x40, 0x2B, 0xCC, 0x00, 0x22, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x22, 0x26, 0x42, 0x00, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x07, 0x00, - 0xC2, 0x00, 0x04, 0x2B, 0xC0, 0x00, 0xA9, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x01, 0x00, 0x07, 0xF4, - 0x47, 0xF2, 0xFF, 0xFF, 0xDC, 0x84, 0x47, 0xFA, 0x0D, 0x60, 0x3E, 0x62, 0x80, 0xFF, 0xBE, 0x60, - 0x78, 0x44, 0x02, 0xA4, 0xA2, 0xDB, 0xDE, 0x78, 0xFF, 0xFF, 0x82, 0xFF, 0xA9, 0xF3, 0x66, 0x5C, - 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x22, 0x46, 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, - 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x47, 0xF0, 0x64, 0x41, 0x64, 0x47, 0xFF, 0xB4, 0x60, 0x5F, - 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0x22, 0x46, 0x3A, 0xFA, 0x64, 0x44, 0x20, 0x7F, - 0x34, 0x94, 0x3B, 0xFA, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, - 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x85, 0x00, 0x2A, 0xF2, 0x00, 0x60, - 0x7C, 0x62, 0x60, 0x40, 0x40, 0x2B, 0x27, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, - 0xDE, 0x82, 0xA2, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, - 0x04, 0x00, 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, - 0xDC, 0x87, 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0xDA, 0x82, - 0xA2, 0xD1, 0xFF, 0xFF, 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, - 0xA2, 0xDB, 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0x60, 0x7C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD3, - 0x5A, 0xD1, 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, - 0x00, 0x60, 0x80, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, - 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, - 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, - 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, - 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x0B, 0xF2, 0xFF, 0xFF, 0x7F, 0xB4, 0x0C, 0xF0, 0x04, 0x02, - 0x64, 0x46, 0x00, 0xF0, 0x04, 0x64, 0x22, 0x46, 0x03, 0xFA, 0x60, 0x41, 0x64, 0x46, 0x01, 0xF2, - 0xFC, 0xA1, 0x61, 0x45, 0xD4, 0x84, 0xFF, 0xFF, 0x08, 0x02, 0x00, 0xF0, 0x04, 0x63, 0x64, 0x46, - 0x01, 0xF2, 0x22, 0x46, 0x1A, 0xFA, 0x03, 0xFC, 0x02, 0x00, 0x22, 0x46, 0x1A, 0xFA, 0x35, 0xF2, - 0x04, 0xF8, 0xDC, 0x84, 0x35, 0xFA, 0x14, 0xF2, 0x0F, 0xB5, 0x0F, 0xB4, 0xCC, 0x84, 0x94, 0x80, - 0x04, 0x60, 0x00, 0x65, 0x2A, 0xF2, 0x01, 0x02, 0x94, 0x84, 0x2A, 0xFA, 0x95, 0xFC, 0x06, 0x00, - 0xC4, 0x3A, 0x07, 0x00, 0x27, 0x44, 0xFD, 0xB4, 0x40, 0x47, 0x48, 0xE2, 0xA4, 0x60, 0x0B, 0x78, - 0xFF, 0xFF, 0x28, 0x44, 0x04, 0x26, 0x05, 0x00, 0x68, 0x3A, 0x03, 0x00, 0x32, 0x44, 0x00, 0x27, - 0x03, 0x00, 0xA3, 0x60, 0x4B, 0x78, 0xFF, 0xFF, 0x0A, 0x64, 0x3A, 0xDB, 0xA3, 0x60, 0x4B, 0x78, - 0xFF, 0xFF, 0x0E, 0x64, 0x3A, 0xDB, 0x10, 0x60, 0x00, 0x65, 0x3C, 0x46, 0x2A, 0xF2, 0x13, 0xF0, - 0xA4, 0x84, 0xB4, 0xBC, 0x40, 0x48, 0x7C, 0xF1, 0x64, 0x47, 0xFF, 0xB4, 0x60, 0x45, 0xD0, 0x80, - 0x70, 0x61, 0x01, 0x06, 0x64, 0x44, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x36, - 0x15, 0x64, 0x6E, 0x36, 0x0B, 0x64, 0x40, 0x4E, 0xA0, 0x63, 0x0A, 0x64, 0x65, 0x40, 0x0A, 0x36, - 0x03, 0x00, 0x38, 0x61, 0x14, 0x64, 0xEB, 0x83, 0x40, 0x45, 0x43, 0x44, 0x02, 0x60, 0x5E, 0x65, - 0x2A, 0xF2, 0x2B, 0xF2, 0x60, 0x40, 0x04, 0x2B, 0x04, 0x00, 0x2E, 0x45, 0xD4, 0x85, 0xC5, 0x84, - 0x05, 0x00, 0x1B, 0xF0, 0xC5, 0x84, 0xC0, 0x84, 0x2E, 0x45, 0xC4, 0x84, 0x60, 0x43, 0x28, 0x44, - 0x00, 0xE1, 0xA1, 0xFF, 0x80, 0x4E, 0x83, 0x4C, 0x9A, 0xFF, 0x56, 0x62, 0x7A, 0xD4, 0x7A, 0xD4, - 0x7A, 0xD4, 0x5C, 0x62, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0xA1, 0xFF, 0x98, 0xFF, 0x87, 0x4F, - 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, 0xFF, 0xFF, 0x87, 0x4C, - 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, 0xBC, 0xFF, 0xB5, 0xFF, - 0x47, 0xFF, 0x27, 0x44, 0x02, 0xBC, 0x40, 0x47, 0x36, 0xF3, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, - 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x60, 0x5B, 0x4D, 0xE2, 0xA4, 0x60, 0x6C, 0x78, 0xFF, 0xFF, - 0x21, 0x46, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, - 0x08, 0x60, 0x00, 0x6B, 0x28, 0x44, 0x04, 0x27, 0x09, 0x00, 0xD4, 0x36, 0x04, 0x00, 0x0C, 0x22, - 0x02, 0x00, 0x0C, 0x3A, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x26, 0x43, 0x25, 0x44, - 0x06, 0xFA, 0x2A, 0x44, 0x72, 0x45, 0x24, 0xFA, 0xB5, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, - 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, 0xB5, 0xF9, 0x25, 0xFA, 0xB6, 0xF3, 0x02, 0x04, 0xDC, 0x84, - 0xB6, 0xFB, 0x28, 0xFA, 0xB7, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB7, 0xFB, 0x29, 0xFA, 0x2D, 0x40, - 0x01, 0x2A, 0x0E, 0x00, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, 0x40, 0x46, 0x27, 0x44, 0x07, 0x22, - 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x30, 0xF1, 0x76, 0x00, - 0xFC, 0xB3, 0x32, 0x40, 0x01, 0x2A, 0x06, 0x00, 0x0A, 0xBB, 0x0F, 0xFC, 0xCB, 0xFE, 0xA3, 0x60, - 0x4B, 0x78, 0xFF, 0xFF, 0x2D, 0x44, 0x04, 0x26, 0x28, 0x00, 0x0F, 0xFC, 0x05, 0xFF, 0xDC, 0xF3, - 0x28, 0x40, 0x80, 0x3A, 0x22, 0x00, 0x60, 0x40, 0x03, 0x3A, 0x1F, 0x00, 0x32, 0xF2, 0x81, 0xF1, - 0x33, 0xF2, 0xD0, 0x80, 0x82, 0xF1, 0x19, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x83, 0xF1, 0x15, 0x02, - 0xD0, 0x80, 0x3C, 0x44, 0x12, 0x02, 0xAC, 0x86, 0xBB, 0xFE, 0x0F, 0x03, 0x2A, 0xF2, 0x21, 0x46, - 0x60, 0x40, 0x80, 0x3A, 0x0A, 0x00, 0x01, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x00, 0x64, 0x32, 0xFB, - 0x84, 0xFF, 0xBB, 0x60, 0x18, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x30, 0xF1, 0x27, 0x44, 0x05, 0x22, - 0x2D, 0x00, 0xFA, 0xB4, 0x40, 0x47, 0x2D, 0x44, 0x10, 0x2A, 0x24, 0x00, 0x28, 0x40, 0xD4, 0x3A, - 0x21, 0x00, 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, - 0x64, 0x44, 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, - 0x20, 0x29, 0x6D, 0xE2, 0x1C, 0x60, 0x9A, 0x63, 0x1D, 0xF0, 0xC0, 0x64, 0xC0, 0x84, 0xA3, 0xD1, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA3, 0xDB, 0xA4, 0x60, - 0x7C, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x07, 0x00, 0x02, 0x2A, 0x05, 0x00, - 0xFD, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x05, 0x64, 0x3A, 0xDB, 0x28, 0x44, - 0xA4, 0x3A, 0x04, 0x00, 0x39, 0xF1, 0x25, 0x44, 0x0A, 0x36, 0x38, 0xF1, 0x31, 0x40, 0x08, 0x26, - 0x00, 0x7C, 0x2B, 0x44, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, 0x64, 0x44, 0xC4, 0x84, 0xFF, 0xFF, - 0x04, 0x24, 0x00, 0xB4, 0x28, 0x40, 0xE4, 0x36, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, - 0x20, 0x29, 0x6D, 0xE2, 0xA3, 0x60, 0x3E, 0x78, 0xFF, 0xFF, 0x21, 0x46, 0xB5, 0xFF, 0xBC, 0xFF, - 0x47, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0xAE, 0x4F, - 0xF7, 0xB4, 0xA0, 0x5E, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x06, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0xE7, 0x01, 0x27, 0x44, 0x05, 0x22, 0x09, 0x00, 0xBA, 0xB4, 0x40, 0x47, - 0x3C, 0x46, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xA3, 0x60, 0x4B, 0x78, 0xFF, 0xFF, 0x27, 0x44, - 0x02, 0x2A, 0x06, 0x00, 0xFD, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xF4, 0x01, - 0xF3, 0x0A, 0x7C, 0x50, 0x6D, 0xE2, 0xF0, 0x01, 0x72, 0x45, 0xDC, 0x84, 0xB5, 0xFB, 0x11, 0x64, - 0x3A, 0xDB, 0xB6, 0xF3, 0x06, 0x04, 0xDC, 0x84, 0xB6, 0xFB, 0xB7, 0xF3, 0x02, 0x04, 0xDC, 0x84, - 0xB7, 0xFB, 0xA3, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x00, 0x61, 0x12, 0x64, 0x3A, 0xDB, 0x1E, 0x60, - 0xFE, 0x63, 0xBD, 0xD3, 0x72, 0x45, 0x44, 0x8A, 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, 0xDD, 0x81, - 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, 0xDD, 0x81, 0xBD, 0xD3, 0xB5, 0xF1, 0x61, 0x45, 0xC0, 0x84, - 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, 0xC4, 0x84, 0x60, 0x55, 0x2A, 0x52, 0xB5, 0xFB, 0x02, 0x24, - 0x01, 0xB9, 0xBD, 0xD3, 0xB6, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, - 0xC4, 0x84, 0xB6, 0xFB, 0x02, 0x24, 0x01, 0xB9, 0xBD, 0xD3, 0xB7, 0xF1, 0x61, 0x45, 0xC0, 0x84, - 0xC4, 0x84, 0xB7, 0xFB, 0xA3, 0x60, 0xEF, 0x78, 0xFF, 0xFF, 0x31, 0x40, 0x04, 0x0A, 0xAE, 0x4F, - 0xF7, 0xB4, 0xA0, 0x5E, 0x09, 0x00, 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x04, 0x18, - 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x9F, 0x01, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x25, - 0x09, 0x00, 0x04, 0x25, 0x03, 0x00, 0x47, 0xFF, 0x32, 0x74, 0x96, 0x01, 0xC4, 0xE2, 0xAB, 0x60, - 0x2C, 0x78, 0xFF, 0xFF, 0x4C, 0x4E, 0x47, 0xFF, 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, - 0x04, 0x18, 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x32, 0x74, 0xCD, 0xE2, 0xA8, 0x60, - 0x8A, 0x78, 0x00, 0x61, 0x10, 0x64, 0x3A, 0xDB, 0xA3, 0x60, 0x4B, 0x78, 0xFF, 0xFF, 0xA3, 0x60, - 0x4B, 0x78, 0xFF, 0xFF, 0x5C, 0x4D, 0x26, 0x44, 0x02, 0x26, 0x0C, 0x00, 0x3E, 0x46, 0x09, 0xF2, - 0x1E, 0x41, 0x03, 0x1B, 0xAA, 0x60, 0xDB, 0x78, 0xFF, 0xFF, 0x40, 0x5E, 0xFD, 0xFB, 0x21, 0x44, - 0x02, 0x64, 0x40, 0x46, 0x41, 0x5D, 0x21, 0x46, 0x00, 0xF2, 0x46, 0x45, 0x87, 0xFC, 0x4C, 0xE2, - 0x01, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x0E, 0xE1, 0x03, 0xE1, 0x3F, 0x40, 0x01, 0x27, 0x00, 0x00, - 0x21, 0x69, 0xB6, 0xFF, 0xA1, 0xFF, 0x6C, 0x5E, 0xB6, 0xFF, 0xB7, 0xFF, 0x60, 0x5C, 0x20, 0x64, - 0x3A, 0xDB, 0x68, 0x43, 0x26, 0xFC, 0x22, 0x69, 0x64, 0x44, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x5F, - 0x60, 0x43, 0x26, 0xF2, 0xFF, 0xFF, 0x68, 0x5F, 0x26, 0xFA, 0x3A, 0x69, 0x1D, 0xFC, 0x2E, 0x44, - 0x36, 0xF1, 0x1C, 0xFA, 0xC3, 0x94, 0xCD, 0xE2, 0x2E, 0x44, 0x14, 0x36, 0x12, 0x00, 0x0A, 0x36, - 0x0F, 0x00, 0x63, 0x45, 0xE3, 0x83, 0xE3, 0x83, 0xC7, 0x83, 0xE3, 0x83, 0xC7, 0x83, 0xFF, 0xFF, - 0x37, 0x36, 0x05, 0x00, 0x6E, 0x36, 0x04, 0x00, 0xAA, 0x60, 0xF3, 0x78, 0xFF, 0xFF, 0xEB, 0x83, - 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xFF, 0xFF, 0x80, 0x27, 0xCF, 0x83, 0x1B, 0xFC, 0x01, 0x64, - 0x51, 0xFB, 0xA1, 0xFF, 0x1C, 0xF2, 0x29, 0x41, 0xF9, 0x81, 0x52, 0x4A, 0x71, 0x89, 0x68, 0x5F, - 0x27, 0xFA, 0x6C, 0x40, 0x03, 0x15, 0xAB, 0x60, 0x04, 0x78, 0xFF, 0xFF, 0x88, 0x60, 0x85, 0x71, - 0x8D, 0xE2, 0xB9, 0xF1, 0xFC, 0xA3, 0xD3, 0x80, 0x43, 0x43, 0x03, 0x04, 0xAA, 0x60, 0xFB, 0x78, - 0xFF, 0xFF, 0x32, 0x40, 0x01, 0x2A, 0x4C, 0x00, 0x9A, 0xFF, 0x23, 0x43, 0x18, 0x61, 0xA1, 0xFF, - 0x8C, 0x44, 0xCB, 0x83, 0x2A, 0xFA, 0x40, 0x48, 0x40, 0x27, 0x04, 0xA1, 0x60, 0x40, 0x03, 0x2B, - 0x01, 0x00, 0x06, 0xA1, 0x88, 0xB0, 0x88, 0x36, 0xD9, 0x81, 0x62, 0x45, 0x23, 0x44, 0x54, 0x94, - 0x28, 0x40, 0x04, 0x26, 0x00, 0x64, 0x3F, 0xFA, 0xC9, 0x81, 0x65, 0x42, 0x7A, 0xDC, 0x00, 0xB9, - 0xFD, 0x1C, 0x00, 0xF4, 0x6E, 0x61, 0x10, 0x62, 0x14, 0x02, 0x05, 0x1D, 0x12, 0x1E, 0x0C, 0x00, - 0x00, 0xF4, 0x7C, 0x61, 0x02, 0x62, 0x7A, 0xDC, 0x63, 0x40, 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, - 0x08, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0x6C, 0x44, - 0x5A, 0xDA, 0x98, 0xFF, 0x01, 0x60, 0x08, 0xE1, 0x81, 0xE1, 0xA1, 0xFF, 0x6C, 0x40, 0xA1, 0xFF, - 0x47, 0xFF, 0x26, 0x44, 0xFD, 0xB4, 0x84, 0xBC, 0x01, 0x15, 0x7F, 0xB4, 0x40, 0x46, 0xA1, 0xFF, - 0x6C, 0x40, 0x14, 0x63, 0x01, 0x11, 0x01, 0x00, 0xFD, 0x1F, 0xAA, 0x60, 0x6E, 0x78, 0xFF, 0xFF, - 0x9A, 0xFF, 0x54, 0x63, 0x12, 0x64, 0x40, 0x46, 0x00, 0x64, 0x0F, 0xFA, 0xA1, 0xFF, 0xEB, 0xF1, - 0x12, 0x61, 0x50, 0xFE, 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, - 0x0B, 0x00, 0x8C, 0x45, 0x98, 0xF8, 0x00, 0x64, 0x3A, 0xFA, 0x3B, 0xFA, 0x3C, 0xFA, 0x3D, 0xFA, - 0xBF, 0x60, 0xFF, 0x64, 0xA4, 0x84, 0x01, 0x00, 0x8C, 0x44, 0xEC, 0xF0, 0xBD, 0xDA, 0x40, 0x48, - 0x04, 0x26, 0x40, 0x00, 0xA1, 0xFF, 0x8C, 0x44, 0xBD, 0xDA, 0x30, 0xFB, 0x6C, 0x44, 0xBD, 0xDA, - 0xFF, 0xFF, 0x01, 0x26, 0x24, 0x00, 0xD0, 0x80, 0xA1, 0xFF, 0x8C, 0x44, 0x6C, 0x5C, 0xF2, 0xFE, - 0xBD, 0xDA, 0xED, 0xF3, 0xD4, 0x80, 0xD0, 0x80, 0xBD, 0xD8, 0x2D, 0x44, 0x15, 0x0C, 0x32, 0x40, - 0x02, 0x2A, 0x07, 0x00, 0x28, 0x42, 0x0C, 0xB2, 0x08, 0x3A, 0x03, 0x00, 0x10, 0xBC, 0x40, 0x4D, - 0x4D, 0x00, 0x03, 0x0A, 0xAB, 0x60, 0x09, 0x78, 0xFF, 0xFF, 0x11, 0xBC, 0x40, 0x4D, 0x28, 0x45, - 0xBF, 0x60, 0xFF, 0x64, 0x24, 0x88, 0x42, 0x00, 0x30, 0xBC, 0x40, 0x4D, 0x3F, 0x00, 0x20, 0xB9, - 0x5C, 0x8E, 0xA1, 0xFF, 0x8C, 0x44, 0xBD, 0xDA, 0xDC, 0x9C, 0x6C, 0x44, 0xF2, 0xFE, 0xBD, 0xDA, - 0x08, 0x28, 0x44, 0x4E, 0xDC, 0x84, 0x2E, 0x5C, 0xB0, 0x84, 0xEF, 0xB1, 0x08, 0x24, 0x40, 0xB9, - 0x41, 0x46, 0x2C, 0x00, 0x8C, 0x44, 0x04, 0x61, 0xBD, 0xDA, 0x50, 0xFE, 0x80, 0x27, 0x00, 0x64, - 0x30, 0xFB, 0x8C, 0x44, 0xBD, 0xDA, 0xD0, 0x80, 0x8C, 0x44, 0xBD, 0xDA, 0xD4, 0x80, 0x00, 0x65, - 0x8C, 0x44, 0xED, 0xF1, 0xBD, 0xDA, 0xD0, 0x80, 0x28, 0x44, 0x03, 0x0C, 0xA0, 0x2A, 0x0A, 0x00, - 0x11, 0x00, 0x10, 0x65, 0x60, 0x40, 0xC4, 0x36, 0x04, 0x00, 0xD4, 0x3A, 0x08, 0x00, 0x27, 0x40, - 0x40, 0x26, 0x30, 0x65, 0x00, 0x64, 0x3F, 0xFA, 0x46, 0x4E, 0x35, 0x8D, 0x5F, 0x00, 0x40, 0x26, - 0xF9, 0x01, 0x30, 0x65, 0x9D, 0xDC, 0x9D, 0xDC, 0x9D, 0xDC, 0xF4, 0x01, 0x00, 0xE1, 0x23, 0x43, - 0xE8, 0xA3, 0x6A, 0x62, 0x9A, 0xFF, 0xA1, 0xFF, 0x28, 0x44, 0x03, 0x2B, 0x04, 0x00, 0x7A, 0xDC, - 0x7A, 0xDC, 0x7A, 0xDC, 0x28, 0x44, 0x88, 0xB0, 0x88, 0x2A, 0x03, 0x00, 0x70, 0x62, 0x7A, 0xDC, - 0x28, 0x44, 0x40, 0x2B, 0x13, 0x00, 0x72, 0x62, 0x7A, 0xDC, 0x04, 0xE6, 0x7A, 0xDC, 0x3B, 0xF2, - 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x2B, 0x02, 0x00, 0x7A, 0xDC, 0x7A, 0xDC, 0x08, 0x60, 0x00, 0xEB, - 0xFC, 0xA3, 0x25, 0xFF, 0x3F, 0xFC, 0x04, 0xA3, 0xB0, 0xFF, 0x01, 0x00, 0x3F, 0xFC, 0xCF, 0x83, - 0xDF, 0x83, 0x04, 0x02, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, 0x1F, 0x00, 0x27, 0x03, 0xCB, 0x83, - 0xFF, 0x60, 0xFE, 0x65, 0x0E, 0xA3, 0xA7, 0x84, 0xF2, 0xA3, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, - 0x7A, 0xDC, 0xFE, 0x1C, 0x03, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0x0A, 0x02, 0x00, 0xF4, 0x02, 0x62, - 0xA7, 0x84, 0x7A, 0x61, 0x7A, 0xDC, 0xFE, 0x1C, 0xF9, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0xF6, 0x03, - 0xFF, 0xB1, 0x0C, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xA1, 0xFF, 0x01, 0x60, 0x0C, 0xE1, - 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0xCD, 0x81, 0x6C, 0x44, 0x5A, 0xDA, 0x98, 0xFF, 0x00, 0xE6, - 0x7C, 0x44, 0x33, 0xFB, 0x01, 0x60, 0x0C, 0xE1, 0x83, 0xE1, 0xA1, 0xFF, 0x8C, 0x44, 0x46, 0x45, - 0xA1, 0xFF, 0x14, 0x63, 0x01, 0x10, 0xFE, 0x1F, 0x01, 0x60, 0x08, 0xE1, 0x0A, 0x64, 0x60, 0x54, - 0x47, 0xFF, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, 0x6A, 0x40, 0x40, 0x2B, 0x01, 0x15, 0x29, 0x00, - 0x6C, 0x40, 0x28, 0x40, 0x03, 0x26, 0x15, 0x00, 0x31, 0x40, 0x20, 0x2A, 0x03, 0x00, 0x28, 0x40, - 0x50, 0x3A, 0x0F, 0x00, 0x2D, 0x44, 0x20, 0x2A, 0x0C, 0x00, 0x2B, 0x44, 0xAC, 0x80, 0x28, 0x40, - 0xB4, 0x3A, 0x03, 0x00, 0x02, 0x03, 0x30, 0xFB, 0x04, 0x00, 0x2B, 0x50, 0xA4, 0x60, 0x85, 0x78, - 0x04, 0xE1, 0x04, 0xE1, 0xA1, 0xFF, 0x35, 0xF1, 0x26, 0x44, 0x64, 0x54, 0xCD, 0xE2, 0x84, 0xBC, - 0x2D, 0x40, 0x0C, 0x22, 0xFD, 0xB4, 0x40, 0x46, 0x23, 0x64, 0x3A, 0xDB, 0xA7, 0x60, 0x18, 0x78, - 0xFF, 0xFF, 0x27, 0x40, 0x26, 0x22, 0x04, 0x00, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xFF, 0xFF, - 0x6C, 0x40, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, 0x00, 0x6B, 0x37, 0xF3, - 0x2B, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x28, 0x65, 0x44, 0x60, 0x50, 0xA0, 0x4C, 0x20, 0xBC, - 0xFF, 0xB4, 0xA0, 0x51, 0x35, 0xF1, 0x74, 0x44, 0xC0, 0x94, 0x32, 0x40, 0x02, 0x2A, 0x18, 0x00, - 0x28, 0x44, 0xA4, 0x36, 0x04, 0x00, 0x0C, 0xB4, 0xFF, 0xFF, 0x04, 0x36, 0x11, 0x00, 0x26, 0x43, - 0xFD, 0xB3, 0x04, 0xBB, 0x43, 0x46, 0x01, 0x2A, 0x03, 0x00, 0x28, 0x47, 0x40, 0xBF, 0x40, 0x48, - 0x0A, 0xBB, 0x0F, 0xFC, 0x50, 0x4B, 0x67, 0x50, 0x00, 0x64, 0x30, 0xFB, 0x05, 0xFF, 0xC6, 0x01, - 0x24, 0x64, 0x3A, 0xDB, 0x28, 0x44, 0x04, 0x2A, 0x06, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, - 0xA3, 0x60, 0x3E, 0x78, 0xFF, 0xFF, 0x1D, 0xFF, 0x48, 0xE2, 0x27, 0x44, 0x06, 0x22, 0x05, 0x00, - 0xF9, 0xB4, 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x26, 0x40, 0x10, 0x2A, 0x18, 0x00, - 0x26, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0xFF, 0xB4, 0xC0, 0xA0, 0xFF, 0xFF, 0x11, 0x0E, 0xB8, 0xF1, - 0x27, 0x60, 0x92, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0xA7, 0x60, 0xE5, 0x78, 0xFF, 0xFF, 0xB8, 0xF1, 0x27, 0x60, 0x94, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x2A, 0x64, 0x3A, 0xDB, 0x5C, 0x41, 0x87, 0xE1, - 0xA1, 0xFF, 0x6C, 0x40, 0x02, 0x00, 0x29, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, 0x87, 0xE1, - 0xA1, 0xFF, 0x6C, 0x40, 0x11, 0x00, 0x27, 0x60, 0xA6, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, - 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0xF1, 0x01, 0x01, 0x60, 0x08, 0xE1, 0x21, 0x64, 0x3A, 0xDB, - 0x03, 0x00, 0x01, 0x60, 0x08, 0xE1, 0x6C, 0x40, 0x00, 0x64, 0x33, 0xFB, 0x32, 0x74, 0x40, 0x63, - 0x01, 0x16, 0xFE, 0x01, 0x01, 0x68, 0x01, 0x11, 0x09, 0x00, 0xA7, 0x6A, 0x22, 0x64, 0x3A, 0xDB, - 0x03, 0x60, 0xC9, 0x63, 0x01, 0x11, 0x02, 0x00, 0x6C, 0x40, 0xFC, 0x1F, 0x6C, 0x40, 0xB5, 0xFF, - 0x6C, 0x40, 0xBC, 0xFF, 0x6C, 0x40, 0xB7, 0xFF, 0xB4, 0xFF, 0x48, 0x60, 0x2D, 0x7D, 0x08, 0x60, - 0x00, 0x6B, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x03, 0x0A, 0xA3, 0x60, 0x4B, 0x78, 0xFF, 0xFF, - 0x01, 0x64, 0x51, 0xFB, 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x04, 0x18, 0xAE, 0x4F, - 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x27, 0x44, 0x06, 0x22, 0x06, 0x00, 0xF9, 0xB4, 0x40, 0x47, - 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x48, 0xE2, 0x27, 0x64, 0x3A, 0xDB, 0xB3, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x81, 0x3E, 0x54, 0x62, 0x22, 0x46, 0xA2, 0xD0, 0x16, 0x63, 0x7C, 0x41, 0x44, 0x48, - 0x80, 0x36, 0x04, 0x61, 0x28, 0x40, 0x50, 0x36, 0x04, 0x61, 0x41, 0x4E, 0x28, 0x44, 0xA4, 0x36, - 0x0E, 0x63, 0x1C, 0x60, 0x9C, 0x62, 0xA2, 0xD1, 0x24, 0x44, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, 0xA2, 0xDB, 0x9A, 0xFF, 0xA1, 0xFF, 0x2D, 0x60, 0x52, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x06, 0x00, 0x18, 0xF2, 0xAA, 0xF0, 0xFF, 0xFF, - 0xB4, 0x84, 0x08, 0x36, 0x2A, 0xFA, 0x54, 0x62, 0xA2, 0xD2, 0xFF, 0xFF, 0x6A, 0x40, 0x80, 0x4E, - 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0xFF, 0xFF, - 0x01, 0x1D, 0x78, 0x00, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x28, 0x40, 0x03, 0x2B, - 0x04, 0x00, 0x7A, 0xD4, 0x7A, 0xD4, 0x7A, 0xD4, 0x6A, 0x40, 0x70, 0x62, 0x28, 0x44, 0x88, 0xB0, - 0x88, 0x36, 0x7A, 0xD4, 0x28, 0x40, 0x40, 0x2B, 0x0B, 0x00, 0x72, 0x62, 0x7A, 0xD4, 0x7A, 0xD4, - 0xA2, 0xD2, 0xFF, 0xFF, 0x60, 0x40, 0x20, 0x2B, 0x02, 0x00, 0x7A, 0xD4, 0x7A, 0xD4, 0x46, 0x00, - 0x23, 0x43, 0xCF, 0x83, 0xDF, 0x83, 0x02, 0x03, 0x55, 0x03, 0x04, 0x00, 0x03, 0xF0, 0x04, 0xF4, - 0x64, 0x42, 0x37, 0x00, 0x2E, 0x40, 0x04, 0x2A, 0x21, 0x00, 0xA1, 0xFF, 0x02, 0xFE, 0x10, 0x25, - 0x42, 0xFE, 0x72, 0x45, 0x65, 0x4C, 0xB5, 0xF3, 0x03, 0x04, 0xE4, 0xE2, 0xDC, 0x84, 0xB5, 0xFB, - 0xA1, 0xFF, 0x80, 0x4C, 0xB6, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB6, 0xFB, 0x80, 0x4C, 0xB7, 0xF3, - 0x02, 0x04, 0xDC, 0x84, 0xB7, 0xFB, 0x80, 0x4C, 0x5C, 0x4E, 0xF8, 0xA3, 0x03, 0xF2, 0x9A, 0xF2, - 0x04, 0xF4, 0xFF, 0xB1, 0xF8, 0xA1, 0x06, 0xA4, 0x60, 0x42, 0x09, 0x00, 0x03, 0xF2, 0x9A, 0xF2, - 0x04, 0xF4, 0xC8, 0x82, 0xFF, 0xB1, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xB1, 0x7A, 0xD4, - 0xFF, 0xFF, 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, 0x17, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, - 0xDA, 0x82, 0xA2, 0xD2, 0xA1, 0xFF, 0x09, 0x74, 0x80, 0x4D, 0x0E, 0x00, 0x03, 0xF2, 0x9A, 0xF2, - 0x04, 0xF4, 0x23, 0x43, 0xA1, 0xFF, 0xA0, 0xD2, 0xFE, 0xA1, 0xCB, 0x83, 0x80, 0x4E, 0xAF, 0x83, - 0x02, 0x1D, 0x02, 0x03, 0xED, 0x01, 0xE3, 0x01, 0xA1, 0xFF, 0x28, 0x40, 0x40, 0x2B, 0x02, 0x00, - 0x9C, 0x4E, 0x9C, 0x4C, 0xA1, 0xFF, 0xDA, 0x83, 0x66, 0x44, 0x22, 0x46, 0x0C, 0xFA, 0x0B, 0xFC, - 0x87, 0x4F, 0x87, 0x4C, 0x87, 0x4F, 0x87, 0x4D, 0x87, 0x4C, 0x01, 0x08, 0x01, 0x00, 0xFF, 0xFF, - 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x44, 0xBC, 0xFF, - 0x01, 0x60, 0x08, 0xE1, 0x0C, 0x74, 0x04, 0xE1, 0xA1, 0xFF, 0x35, 0xF3, 0xC4, 0xE2, 0x60, 0x54, - 0x89, 0xFF, 0x13, 0x74, 0x88, 0xFF, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0x34, 0x64, 0x3A, 0xDB, - 0x06, 0xE1, 0x47, 0xFF, 0xA4, 0x60, 0x47, 0x78, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x61, 0x7F, 0x60, - 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, 0x26, 0x02, 0x98, 0xFE, 0x1A, 0x05, 0x24, 0x60, - 0x52, 0x62, 0xA2, 0xD5, 0x0E, 0xF2, 0x15, 0x18, 0x02, 0x18, 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, - 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, - 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x08, 0xB9, 0x10, 0x7E, 0x00, 0x7F, 0x0E, 0xFA, 0x00, 0x67, - 0x0A, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xFA, 0xA0, 0x7F, 0x67, 0x07, 0x63, 0x03, 0x05, - 0x45, 0x40, 0x00, 0x67, 0xD8, 0xFE, 0xFF, 0x27, 0x05, 0xFD, 0x0A, 0x7E, 0x04, 0xFB, 0x61, 0x55, - 0x4A, 0x00, 0x28, 0xFB, 0x01, 0xF3, 0x29, 0xFB, 0x44, 0x46, 0x40, 0x45, 0x10, 0x61, 0x7E, 0x60, - 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, 0x31, 0x02, 0xAE, 0x60, 0x58, 0x4F, 0x6F, 0x78, - 0xFF, 0xFF, 0x7F, 0x67, 0x03, 0x63, 0x2A, 0x02, 0x26, 0x40, 0x01, 0x2B, 0x24, 0x00, 0x98, 0xFE, - 0x19, 0x05, 0x24, 0x60, 0x52, 0x62, 0xA2, 0xD5, 0x0E, 0xF2, 0x14, 0x18, 0x02, 0x18, 0x09, 0xF4, - 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, 0x46, 0x43, - 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x08, 0xB9, 0x10, 0x7E, 0x00, 0x7F, - 0x0E, 0xFA, 0x09, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xFA, 0xA0, 0x7F, 0x67, 0x07, 0x63, - 0x05, 0x05, 0x45, 0x40, 0xD8, 0xFE, 0x00, 0x67, 0xD0, 0xFE, 0xD9, 0xFE, 0xFF, 0x27, 0x05, 0xFD, - 0x0B, 0x7E, 0x04, 0xFB, 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB0, 0x80, 0xBC, - 0x08, 0x28, 0xA3, 0xDB, 0x61, 0x55, 0x63, 0x00, 0x04, 0xB5, 0x82, 0xB5, 0x25, 0x02, 0x04, 0x03, - 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, 0xA3, 0xD3, 0x99, 0xFE, 0x04, 0x04, 0x02, 0xBC, 0xFE, 0xB4, - 0xA3, 0xDB, 0x56, 0x00, 0xDC, 0xF3, 0x20, 0x40, 0x80, 0x26, 0x52, 0x00, 0xA3, 0xD3, 0xFF, 0xA0, - 0xF8, 0xB4, 0x02, 0x02, 0xA3, 0xDB, 0x1C, 0x00, 0x04, 0xBC, 0xBF, 0xB4, 0xA3, 0xDB, 0x08, 0xB0, - 0x01, 0x64, 0x08, 0x24, 0x02, 0x64, 0x28, 0xFB, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0xD0, 0xFE, - 0x3F, 0x00, 0xBF, 0xB4, 0xA3, 0xDB, 0x3C, 0x00, 0x40, 0xB0, 0xFF, 0xFF, 0xFA, 0x02, 0xF8, 0xB4, - 0xA3, 0xDB, 0x08, 0xB5, 0x07, 0x7C, 0x01, 0x02, 0xDC, 0xF9, 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, - 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB5, 0x07, 0xB5, 0x08, 0x28, 0xC4, 0x02, - 0x99, 0xFE, 0x26, 0x05, 0x20, 0x44, 0x80, 0x26, 0x23, 0x00, 0x20, 0x2A, 0x00, 0x00, 0x40, 0x2A, - 0x1F, 0x00, 0xBF, 0xB4, 0x40, 0x40, 0x09, 0x00, 0xA8, 0xFF, 0x20, 0x44, 0x99, 0xFE, 0x02, 0x05, - 0x80, 0x2A, 0x03, 0x00, 0x40, 0xBC, 0x40, 0x40, 0x13, 0x00, 0x00, 0xF1, 0x80, 0xBC, 0x40, 0x40, - 0x64, 0x44, 0xE0, 0x84, 0xE8, 0x84, 0x0A, 0x36, 0x29, 0x01, 0x0B, 0x36, 0x5A, 0x01, 0x28, 0xFB, - 0x01, 0xF1, 0x29, 0xF9, 0x02, 0xF1, 0x2A, 0xF9, 0x03, 0xF1, 0x2B, 0xF9, 0xD0, 0xFE, 0xAE, 0xFF, - 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0x3E, 0x75, 0x44, 0x02, 0xB0, 0x01, 0xB0, 0x29, 0x02, 0xDC, 0x02, - 0x04, 0xB0, 0x08, 0xB0, 0x0B, 0x02, 0x20, 0x02, 0x40, 0x26, 0xA7, 0xFF, 0x8C, 0xFF, 0x75, 0x40, - 0x80, 0x2B, 0x01, 0x00, 0xAB, 0xFF, 0x75, 0x44, 0x8D, 0xFF, 0xEA, 0x01, 0x0A, 0xF3, 0xAA, 0xFF, - 0x60, 0x40, 0x20, 0x2B, 0x02, 0x00, 0x60, 0xFF, 0x0D, 0x00, 0x01, 0x26, 0x0C, 0x00, 0xC0, 0x60, - 0x00, 0x7C, 0xA0, 0x84, 0x80, 0x3B, 0x02, 0x00, 0xC0, 0x67, 0x03, 0x00, 0x40, 0x3B, 0x02, 0x00, - 0x00, 0x67, 0x0A, 0xFB, 0xD5, 0x01, 0xD4, 0x01, 0xAB, 0xFF, 0x38, 0xFF, 0x00, 0x00, 0xD0, 0x01, - 0x79, 0x63, 0xFF, 0xFF, 0xFF, 0x1F, 0xA9, 0xFF, 0x77, 0x44, 0x60, 0x57, 0x10, 0x60, 0x00, 0x75, - 0x40, 0x4A, 0x01, 0x2A, 0x1C, 0x00, 0x24, 0x44, 0xAC, 0x86, 0x08, 0xF2, 0x18, 0x03, 0x24, 0x60, - 0x58, 0x65, 0xD4, 0x80, 0x0E, 0xF2, 0x02, 0x03, 0xA5, 0xD5, 0x04, 0x00, 0x01, 0xBC, 0x0E, 0xFA, - 0x09, 0xF4, 0xD1, 0xFE, 0x46, 0x44, 0x0B, 0x18, 0x66, 0x44, 0x10, 0xFB, 0x66, 0x47, 0x20, 0xBF, - 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, 0x01, 0x75, 0x10, 0xBC, 0x0E, 0xFA, 0x2A, 0x44, - 0x08, 0x2A, 0x18, 0x00, 0x23, 0x44, 0x00, 0xA8, 0x5C, 0x43, 0x14, 0x03, 0x24, 0x60, 0x52, 0x62, - 0xA2, 0xD5, 0x01, 0x00, 0x09, 0xF4, 0x0E, 0xF2, 0x0D, 0x18, 0x08, 0xB0, 0x18, 0xAC, 0xFA, 0x03, - 0x0E, 0xFA, 0x66, 0x43, 0x11, 0xFD, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, - 0xA2, 0xDB, 0x08, 0x75, 0x2A, 0x44, 0x06, 0x22, 0x2D, 0x00, 0x22, 0x44, 0x00, 0xA8, 0x60, 0x46, - 0x0E, 0xF2, 0x28, 0x03, 0x10, 0xB0, 0x01, 0xBC, 0x03, 0x02, 0x00, 0x64, 0x40, 0x42, 0x22, 0x00, - 0x0E, 0xFA, 0xD1, 0xFE, 0x24, 0x60, 0x4C, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x84, 0x00, 0x46, 0x42, - 0x19, 0x02, 0x22, 0x47, 0x40, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x23, 0xF2, 0x66, 0x43, - 0x00, 0xA8, 0x0E, 0xF2, 0x08, 0x02, 0x60, 0x40, 0x02, 0x2A, 0xE4, 0x01, 0x12, 0xFD, 0x10, 0x64, - 0x0E, 0xFA, 0x02, 0x75, 0x07, 0x00, 0x60, 0x40, 0x04, 0x2A, 0xDC, 0x01, 0x12, 0xFD, 0x10, 0x64, - 0x0E, 0xFA, 0x04, 0x75, 0x2A, 0x44, 0x80, 0x2A, 0x19, 0x00, 0x21, 0x44, 0xAC, 0x86, 0x0E, 0xF2, - 0x15, 0x03, 0x01, 0xBC, 0x0E, 0xFA, 0xD1, 0xFE, 0x24, 0x60, 0x64, 0x64, 0x40, 0x47, 0x58, 0x4F, - 0x5A, 0x00, 0x46, 0x41, 0x0B, 0x02, 0x21, 0x47, 0x10, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, - 0x0E, 0xF2, 0x66, 0x43, 0x08, 0xFD, 0x10, 0xBC, 0x0E, 0xFA, 0x80, 0x75, 0x2A, 0x44, 0x10, 0xB0, - 0x20, 0x44, 0x15, 0x03, 0x7F, 0xB4, 0x40, 0x40, 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, - 0x20, 0xB0, 0x80, 0xB0, 0x09, 0x03, 0x08, 0x03, 0x40, 0xBC, 0x7F, 0xB4, 0x04, 0xB0, 0xA3, 0xDB, - 0x03, 0x03, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, 0xAC, 0x60, 0xD8, 0x78, 0xFF, 0xFF, 0x2A, 0x40, - 0x08, 0x2B, 0x01, 0x00, 0x10, 0xFF, 0xAD, 0x60, 0x08, 0x78, 0xFF, 0xFF, 0xE8, 0xFE, 0x14, 0x05, - 0xEA, 0xFE, 0x24, 0x05, 0xE9, 0xFE, 0x1C, 0x05, 0xE7, 0xFE, 0x09, 0x05, 0x47, 0xFF, 0x20, 0x44, - 0x0F, 0x22, 0x03, 0x00, 0xCC, 0x84, 0x40, 0x40, 0x0F, 0x22, 0xB8, 0xFE, 0xEC, 0x01, 0x23, 0x41, - 0x00, 0xB9, 0x5C, 0x4A, 0xE8, 0x02, 0x6A, 0x01, 0x24, 0x41, 0x00, 0xB9, 0x24, 0x60, 0x58, 0x65, - 0x45, 0x47, 0xE1, 0x02, 0x58, 0x4F, 0x0F, 0x00, 0xDE, 0x02, 0x5C, 0x4A, 0x46, 0x44, 0x4C, 0x01, - 0x22, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0x08, 0x24, 0x7D, 0x01, 0xD5, 0x01, 0x21, 0x41, 0x00, 0xB9, - 0x5C, 0x4A, 0xA2, 0x03, 0xD0, 0x01, 0x27, 0xD3, 0x03, 0x00, 0x10, 0xB0, 0x09, 0xF2, 0x04, 0x03, - 0xAC, 0x86, 0x0E, 0xF2, 0xFA, 0x02, 0x08, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0E, 0xF3, 0x0F, 0x60, - 0xFE, 0x65, 0x0C, 0xF3, 0x24, 0x86, 0x24, 0x46, 0x60, 0x40, 0xFB, 0x3B, 0x07, 0x00, 0x80, 0x26, - 0x02, 0x00, 0x23, 0x46, 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, 0x0C, 0x00, 0x2E, 0xF3, 0x40, 0x45, - 0xF8, 0x2B, 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x39, 0x00, 0x07, 0x02, 0x58, 0x4F, - 0x45, 0x00, 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, - 0x0E, 0xFB, 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, 0xAC, 0xFF, - 0xAD, 0x60, 0x08, 0x78, 0xFF, 0xFF, 0x8E, 0xFF, 0x0F, 0xF3, 0x0F, 0x60, 0xFE, 0x65, 0x24, 0x86, - 0x0D, 0xF3, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, - 0x16, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x22, 0x00, 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, - 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0F, 0xFB, 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, - 0x00, 0x72, 0x7E, 0x71, 0x8D, 0xFF, 0xAD, 0xFF, 0xAD, 0x60, 0x08, 0x78, 0xFF, 0xFF, 0x25, 0x44, - 0xAA, 0xF1, 0xAB, 0xF1, 0xD0, 0x80, 0xD0, 0x80, 0x07, 0x04, 0x01, 0x06, 0x05, 0x00, 0x25, 0x46, - 0x01, 0xF0, 0x03, 0x67, 0xA0, 0x85, 0x94, 0x80, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x46, 0x26, 0x41, - 0x46, 0x63, 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB5, 0xD5, 0x81, 0x00, 0xF2, 0x05, 0x04, 0x04, 0x63, - 0x60, 0x46, 0xF7, 0x1B, 0x42, 0xFE, 0x0D, 0x00, 0x61, 0x44, 0xC5, 0x81, 0x63, 0x45, 0xC5, 0x81, - 0x9C, 0x84, 0xDC, 0x84, 0x01, 0xF2, 0xF0, 0x85, 0xF0, 0x80, 0x65, 0x44, 0xF8, 0x85, 0xFF, 0xFF, - 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x24, 0x60, 0x6A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0xAC, 0x86, 0x0E, 0xF2, 0x07, 0x03, 0x00, 0xA8, 0x09, 0xF2, 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, - 0x08, 0xFE, 0x17, 0x00, 0xAC, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, 0x00, 0xB4, 0x12, 0x06, 0x09, 0x60, - 0x08, 0x61, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, 0xAE, 0x60, 0x58, 0x4E, 0xE4, 0x78, - 0xFF, 0xFF, 0xA3, 0xFF, 0x06, 0x03, 0x2A, 0x43, 0xAF, 0x60, 0x58, 0x4E, 0x05, 0x78, 0xFF, 0xFF, - 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, - 0xAE, 0x60, 0x58, 0x4E, 0xE4, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x2A, 0x43, 0xAF, 0x60, 0x58, 0x4E, - 0x05, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0x0D, 0x00, 0x24, 0x60, 0x6A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0xAC, 0x86, 0x0E, 0xF2, 0x06, 0x03, 0x00, 0xA8, 0x09, 0xF2, 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, - 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0xAD, 0xF3, 0x7C, 0x63, 0x00, 0xBE, 0x40, 0x45, - 0x1A, 0x03, 0x00, 0x65, 0x65, 0x44, 0xDC, 0x85, 0x84, 0xA1, 0x00, 0xF2, 0x06, 0x06, 0x01, 0xFC, - 0x00, 0xA8, 0x60, 0x46, 0xF7, 0x02, 0x40, 0x45, 0x0E, 0x00, 0xAC, 0xF3, 0x00, 0x63, 0xD4, 0x84, - 0xAC, 0xFB, 0x80, 0x60, 0x7C, 0x64, 0x01, 0xFA, 0x00, 0xF0, 0x00, 0xFC, 0xD3, 0x80, 0xAD, 0xF9, - 0x02, 0x02, 0xAE, 0xF9, 0x08, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x66, 0x44, 0x25, 0x46, 0x05, 0xFA, - 0x06, 0xFA, 0x01, 0xF0, 0x03, 0x67, 0x02, 0xFC, 0xB0, 0x84, 0x3A, 0x7E, 0x01, 0xFA, 0x12, 0x64, - 0x03, 0xFA, 0x00, 0xF0, 0x04, 0xF8, 0x00, 0x64, 0x0C, 0x61, 0x10, 0x63, 0x59, 0xDA, 0xFE, 0x1F, - 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, - 0x01, 0x00, 0xE4, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, 0xA2, 0xDA, 0xBE, 0xD2, - 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, 0xA3, 0xDA, 0x04, 0x00, 0x0A, 0xFA, - 0x60, 0x46, 0x25, 0x44, 0x09, 0xFA, 0x61, 0x46, 0xBE, 0xDA, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x44, - 0x00, 0xA8, 0x07, 0x4B, 0x0C, 0x03, 0x58, 0x4F, 0x33, 0x00, 0x0B, 0x47, 0x24, 0x60, 0x5E, 0x65, - 0x27, 0x44, 0xD4, 0x80, 0x00, 0x64, 0x01, 0x02, 0x0F, 0xFA, 0x58, 0x4F, 0xD3, 0x01, 0x70, 0x00, - 0x25, 0x43, 0xE3, 0x84, 0x7C, 0x41, 0x02, 0x04, 0xE8, 0x81, 0xE4, 0x63, 0x61, 0x46, 0xA3, 0xD2, - 0x00, 0x7C, 0x40, 0x45, 0xBF, 0xD8, 0xA3, 0xD8, 0xBE, 0xD8, 0x27, 0x42, 0x5A, 0xD3, 0x25, 0x5C, - 0x60, 0x41, 0x02, 0x1B, 0x27, 0xD9, 0x05, 0x00, 0x25, 0x46, 0x0A, 0xFA, 0x61, 0x46, 0x25, 0x44, - 0x09, 0xFA, 0x25, 0x44, 0x27, 0x43, 0x00, 0x61, 0x60, 0x46, 0x09, 0xF2, 0x08, 0xFC, 0x00, 0xA8, - 0xDD, 0x81, 0xFA, 0x02, 0xBF, 0xD1, 0x66, 0x44, 0xBE, 0xDB, 0xC1, 0x84, 0xBF, 0xDB, 0x48, 0x00, - 0x25, 0x46, 0xE4, 0x63, 0x08, 0xF2, 0x89, 0xF2, 0x1E, 0x18, 0x40, 0x47, 0xE0, 0x84, 0xE8, 0x85, - 0x02, 0x05, 0xE8, 0x83, 0x00, 0x65, 0x65, 0x46, 0xBF, 0xD2, 0x61, 0x5C, 0xCC, 0x84, 0xA2, 0xDA, - 0x25, 0x46, 0x0A, 0xF2, 0x00, 0xB9, 0x65, 0x46, 0x08, 0x24, 0xBE, 0xDA, 0x02, 0x1B, 0xA3, 0xD8, - 0x02, 0x00, 0x60, 0x46, 0x89, 0xFA, 0x00, 0xB9, 0x61, 0x46, 0x08, 0x28, 0x0A, 0xFA, 0x25, 0x46, - 0x89, 0xFC, 0x8A, 0xFC, 0x88, 0xFC, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x61, 0x28, 0x65, 0x25, 0x43, - 0xAE, 0xF3, 0xAF, 0x83, 0x00, 0xBE, 0x18, 0x03, 0x02, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xAD, 0xFD, - 0x63, 0x46, 0x65, 0x44, 0xCC, 0x85, 0x00, 0xF2, 0x07, 0x02, 0xAE, 0xF5, 0x00, 0x64, 0x00, 0xFA, - 0xDE, 0x60, 0xAF, 0x64, 0x09, 0xFB, 0x08, 0x00, 0x66, 0x43, 0x00, 0xBE, 0xDD, 0x81, 0xF1, 0x02, - 0xAC, 0xF1, 0xAE, 0xFD, 0xC1, 0x84, 0xAC, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x45, - 0x29, 0x43, 0xFC, 0xA3, 0x66, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x00, 0x64, 0xBD, 0xDB, - 0x03, 0x61, 0x0E, 0x65, 0x24, 0x60, 0x72, 0x63, 0x43, 0x49, 0xA3, 0xD3, 0x06, 0xA3, 0x00, 0xA8, - 0xCD, 0x81, 0x04, 0x02, 0xF9, 0x02, 0xAD, 0x60, 0x08, 0x78, 0xFF, 0xFF, 0x01, 0x26, 0xE6, 0x01, - 0xD4, 0x80, 0x60, 0x45, 0xE3, 0x05, 0xF6, 0xA3, 0xBD, 0xD1, 0xBD, 0xD1, 0x44, 0x47, 0x44, 0x48, - 0x44, 0x45, 0x24, 0x60, 0xB0, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x24, 0x60, 0x22, 0x63, - 0x0D, 0x65, 0x00, 0x61, 0x41, 0x48, 0xA3, 0xD3, 0x06, 0xA3, 0xAC, 0x86, 0x00, 0x61, 0x09, 0x03, - 0x00, 0xF2, 0x09, 0xF0, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, - 0xF6, 0x01, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x65, 0x44, 0x28, 0x45, 0x45, 0x88, 0xCC, 0x85, - 0x5A, 0x87, 0xE9, 0x02, 0x00, 0x64, 0x27, 0xDA, 0x5A, 0xDA, 0x5A, 0x87, 0xA9, 0xF3, 0xA8, 0xF1, - 0x02, 0xA4, 0x60, 0x46, 0x60, 0x45, 0x00, 0x61, 0x1E, 0xF2, 0xFF, 0xFF, 0xAC, 0x86, 0x00, 0xF2, - 0x04, 0x03, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x65, 0x44, 0x02, 0xA5, 0x65, 0x46, - 0x64, 0x44, 0xCC, 0x9C, 0xFF, 0xFF, 0xF0, 0x02, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, - 0x28, 0x45, 0x45, 0x88, 0x00, 0x64, 0x27, 0xDA, 0x5A, 0x87, 0x06, 0x60, 0x40, 0x65, 0xAD, 0xF3, - 0x01, 0x61, 0xAC, 0x86, 0x00, 0xF2, 0x03, 0x03, 0xD5, 0x80, 0xDD, 0x81, 0xFA, 0x04, 0xCD, 0x84, - 0x25, 0x46, 0x27, 0xDA, 0x28, 0x45, 0xC4, 0x84, 0x5A, 0xDA, 0xDA, 0x81, 0xAC, 0xF1, 0x59, 0xD8, - 0x24, 0x60, 0x20, 0x64, 0x18, 0x63, 0xA0, 0xD1, 0x06, 0xA4, 0x59, 0xD8, 0xFC, 0x1F, 0x00, 0x64, - 0x59, 0xDA, 0x59, 0xDA, 0x01, 0x60, 0x5C, 0x64, 0x0A, 0x63, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, - 0xDC, 0xF1, 0x59, 0xD8, 0x75, 0x01, 0x07, 0x4B, 0xAF, 0x60, 0x58, 0x4F, 0x70, 0x78, 0xFF, 0xFF, - 0x0B, 0x47, 0x58, 0x4F, 0x21, 0x00, 0x6C, 0x01, 0x07, 0x4B, 0xAF, 0x60, 0x58, 0x4F, 0x70, 0x78, - 0xFF, 0xFF, 0x0B, 0x47, 0x27, 0x44, 0x00, 0xBE, 0x08, 0xF0, 0x15, 0x03, 0x64, 0x42, 0x4A, 0xD3, - 0x09, 0xF2, 0xDC, 0x83, 0xA2, 0xDD, 0x25, 0x43, 0x09, 0xFC, 0x63, 0x46, 0x27, 0x43, 0x0A, 0xFC, - 0x09, 0xFA, 0x08, 0xF8, 0x00, 0xA8, 0x66, 0x43, 0x03, 0x02, 0x64, 0x44, 0x58, 0xDD, 0x03, 0x00, - 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, 0x4C, 0x01, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, - 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, 0xE4, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, - 0xA2, 0xDA, 0xA3, 0xD2, 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, 0xBE, 0xDA, - 0x04, 0x00, 0x09, 0xFA, 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, 0x61, 0x46, 0xA3, 0xDA, 0x2F, 0x58, - 0xFF, 0xFF, 0xA0, 0xFE, 0x07, 0x05, 0xA3, 0xFE, 0x07, 0x05, 0xA1, 0xFE, 0x52, 0x05, 0x60, 0x64, - 0x3B, 0xDB, 0x12, 0x00, 0x20, 0x58, 0xFF, 0xFF, 0x4F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x60, - 0xB8, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0xFB, 0xB4, 0xA3, 0xDB, 0xA0, 0x4C, 0x59, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x83, 0x3E, 0x40, 0x60, - 0x0B, 0x65, 0x2B, 0x44, 0x00, 0x63, 0xE8, 0x80, 0xF8, 0x84, 0x02, 0x24, 0x94, 0x84, 0xF3, 0x83, - 0xCD, 0x81, 0xFF, 0xFF, 0xF8, 0x02, 0xDF, 0x83, 0x2F, 0x58, 0x40, 0x4B, 0x00, 0x62, 0x01, 0x64, - 0xD4, 0x80, 0xE0, 0x84, 0x1A, 0x03, 0xD4, 0x80, 0xE0, 0x84, 0x15, 0x03, 0x61, 0x44, 0x11, 0x61, - 0xE0, 0x84, 0xCD, 0x81, 0xFD, 0x04, 0x01, 0x00, 0xE0, 0x84, 0xF2, 0x82, 0xFF, 0xFF, 0x02, 0x24, - 0xC6, 0x82, 0x02, 0x28, 0xD6, 0x82, 0xE2, 0x80, 0xCD, 0x81, 0x02, 0x28, 0x01, 0xBC, 0xF4, 0x02, - 0x01, 0x2A, 0xC6, 0x82, 0x03, 0x00, 0xE9, 0x81, 0xF2, 0x82, 0x61, 0x44, 0x2D, 0x58, 0xFF, 0xFF, - 0x00, 0xA8, 0x10, 0x61, 0x04, 0x03, 0xF0, 0x84, 0xCD, 0x81, 0xFD, 0x04, 0x61, 0x44, 0x2D, 0x58, - 0xFF, 0xFF, 0x00, 0x64, 0x3B, 0xDB, 0x3C, 0x44, 0xAC, 0x80, 0xFF, 0xFF, 0xBD, 0x02, 0x8B, 0xF3, - 0x8C, 0xF3, 0x02, 0xA8, 0x02, 0xA8, 0x08, 0x02, 0x00, 0x64, 0x8D, 0xFB, 0x8B, 0xFB, 0x8C, 0xFB, - 0x00, 0x64, 0x8E, 0xFB, 0xCA, 0xFE, 0x2D, 0x00, 0x03, 0x02, 0x00, 0x64, 0x8C, 0xFB, 0xCA, 0xFE, - 0x01, 0x64, 0x3B, 0xDB, 0x24, 0x60, 0x28, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x14, 0x03, 0xDC, 0xF3, 0x2A, 0xF2, 0xFD, 0xA0, 0x60, 0x40, 0x80, 0x3A, 0x29, 0x00, 0x28, 0x02, - 0x9B, 0xFE, 0x26, 0x05, 0x24, 0x60, 0x6E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xE5, 0x01, 0x8C, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, - 0xFF, 0xFF, 0x07, 0x02, 0x24, 0x60, 0x22, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x0F, 0x02, 0x86, 0xFF, 0x20, 0x40, 0x52, 0x27, 0x07, 0x00, 0x9A, 0xFE, 0x05, 0x04, 0x9D, 0xFE, - 0x03, 0x04, 0xF1, 0xFE, 0x12, 0x64, 0x3B, 0xDB, 0x84, 0xFF, 0xB0, 0x60, 0x97, 0x78, 0xFF, 0xFF, - 0x66, 0x44, 0xFC, 0xFB, 0x46, 0x5C, 0x2D, 0x60, 0x5A, 0x63, 0xA3, 0xD3, 0xB0, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x0D, 0xF2, 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, 0x11, 0x64, 0x3B, 0xDB, - 0x9D, 0xFE, 0x0B, 0x05, 0x24, 0x60, 0x92, 0x65, 0x08, 0x64, 0xA5, 0xDB, 0xB1, 0x60, 0x4D, 0x64, - 0x4F, 0xFB, 0x2D, 0xFF, 0xB0, 0x60, 0xA4, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x00, 0x64, 0xD0, 0x80, - 0xA9, 0xF3, 0x07, 0x02, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xB8, 0x60, 0x36, 0x78, - 0xFF, 0xFF, 0xD0, 0x80, 0xD8, 0xF3, 0x40, 0x03, 0x60, 0x40, 0x03, 0x3A, 0x3D, 0x00, 0x66, 0x41, - 0x64, 0x46, 0x6F, 0xF2, 0x61, 0x46, 0x64, 0x41, 0x4D, 0xF1, 0x60, 0x40, 0x03, 0x3A, 0x34, 0x00, - 0x64, 0x40, 0xFF, 0x22, 0x31, 0x00, 0x05, 0x7E, 0x66, 0x45, 0x61, 0x46, 0x6F, 0xFA, 0x65, 0x46, - 0x07, 0xF0, 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, - 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, - 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, - 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, - 0xFF, 0xFF, 0x00, 0x64, 0x4D, 0xFB, 0x4C, 0xFB, 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, - 0x61, 0x46, 0xFF, 0xFF, 0xF0, 0x7E, 0x4E, 0xFB, 0x2A, 0xF2, 0x00, 0x63, 0x40, 0x47, 0x50, 0x36, - 0x05, 0x00, 0xA4, 0x36, 0x03, 0x00, 0x80, 0x36, 0x01, 0x00, 0x01, 0x63, 0x48, 0xFD, 0x40, 0x47, - 0x08, 0x2A, 0x0A, 0x00, 0x03, 0x2F, 0x08, 0x00, 0x81, 0xF1, 0x2C, 0xF8, 0x82, 0xF1, 0xFF, 0xFF, - 0x2D, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0xFF, 0xFF, 0x4A, 0xF3, 0x35, 0xFA, 0x10, 0xA4, 0x4A, 0xFB, - 0x00, 0x64, 0x15, 0xFA, 0x16, 0xFA, 0x0F, 0xFA, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, - 0x0E, 0xF0, 0x63, 0x46, 0x00, 0x7F, 0x64, 0x5E, 0x4B, 0xFB, 0x64, 0x44, 0x00, 0x7E, 0xDB, 0xFB, - 0x07, 0xF0, 0xA9, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xDB, 0xF3, 0xDA, 0xFB, - 0x60, 0x41, 0x03, 0xF2, 0x00, 0xF4, 0x01, 0xF2, 0xFC, 0xA5, 0x00, 0x7F, 0xD4, 0x84, 0x27, 0x45, - 0x3C, 0x46, 0x1A, 0xFA, 0x22, 0x63, 0x7B, 0x60, 0xFF, 0x64, 0xA4, 0x84, 0x03, 0x2B, 0x1C, 0x63, - 0x2A, 0xFA, 0x60, 0x40, 0xA4, 0x36, 0x14, 0x63, 0x43, 0x4C, 0x00, 0x7C, 0x22, 0xF8, 0x64, 0x41, - 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x36, 0xF2, 0x63, 0x46, 0xFF, 0xB4, 0x22, 0xFA, 0x60, 0x40, - 0x00, 0x36, 0x76, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x3A, 0xA5, 0x00, 0x03, 0xF2, - 0x00, 0xF4, 0xA0, 0xD2, 0xAA, 0x60, 0xAA, 0x65, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x0A, 0x02, - 0xD0, 0x80, 0x00, 0x64, 0x5A, 0xD0, 0x06, 0x02, 0xD0, 0x80, 0xF8, 0x7F, 0xD0, 0x80, 0x01, 0x03, - 0x01, 0x02, 0x01, 0x61, 0x62, 0x43, 0x46, 0x43, 0x3C, 0x46, 0x07, 0xF4, 0x36, 0xF2, 0xFF, 0xFF, - 0xA3, 0x46, 0x60, 0x40, 0x22, 0x26, 0x5C, 0x00, 0x60, 0x45, 0x63, 0x42, 0x5A, 0xD0, 0xCD, 0x81, - 0x3C, 0x46, 0x14, 0x02, 0x64, 0x44, 0x88, 0x3A, 0x11, 0x00, 0x8E, 0x3B, 0x0F, 0x00, 0x65, 0x44, - 0x01, 0x26, 0x7A, 0x00, 0x04, 0x26, 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x2D, 0x00, 0xA3, 0x46, - 0x37, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, 0x6F, 0x00, 0x56, 0x00, 0xA3, 0x46, 0x65, 0x44, - 0x01, 0x26, 0x0B, 0x00, 0x04, 0x26, 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x1D, 0x00, 0x37, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, 0x48, 0x00, 0x17, 0x00, 0xA9, 0xF3, 0xFF, 0xFF, 0x60, 0x46, - 0x36, 0xF2, 0x66, 0x43, 0xFF, 0xB4, 0x3C, 0x46, 0x22, 0xF0, 0x60, 0x47, 0xB0, 0x84, 0x22, 0xFA, - 0x63, 0x46, 0x37, 0xF0, 0x60, 0x40, 0x04, 0x27, 0x03, 0x00, 0x10, 0x27, 0x01, 0x00, 0x04, 0x00, - 0x64, 0x40, 0x80, 0x27, 0x31, 0x00, 0x00, 0x00, 0x3C, 0x46, 0x02, 0x65, 0xB7, 0x60, 0x66, 0x78, - 0xFF, 0xFF, 0xCD, 0x81, 0x63, 0x42, 0x5A, 0xD0, 0x3C, 0x46, 0x26, 0x02, 0x64, 0x44, 0x88, 0x3A, - 0x23, 0x00, 0x77, 0x37, 0x39, 0x00, 0x78, 0x37, 0x37, 0x00, 0x8E, 0x37, 0x35, 0x00, 0xF1, 0x01, - 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x2D, 0x00, 0x07, 0x00, - 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0xE2, 0x01, 0x3C, 0x46, - 0x3E, 0xF2, 0x40, 0x60, 0x00, 0x65, 0xF0, 0x84, 0xA4, 0x84, 0x18, 0xFA, 0x2A, 0xF2, 0xBF, 0x60, - 0xFF, 0x65, 0xA4, 0x84, 0x2A, 0xFA, 0x18, 0x00, 0x3C, 0x46, 0x22, 0xF0, 0x80, 0x67, 0xB0, 0x84, - 0xA2, 0xDA, 0xFF, 0xFF, 0x3F, 0xF2, 0x3E, 0xF0, 0x08, 0xA4, 0x60, 0x41, 0x22, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x03, 0x00, 0x06, 0x00, 0x04, 0x2B, 0x04, 0x00, - 0x61, 0x44, 0x64, 0x40, 0x10, 0x26, 0x3F, 0xFA, 0x3C, 0x46, 0x2C, 0xF2, 0x27, 0x40, 0x01, 0x27, - 0x32, 0xF2, 0xD5, 0xF1, 0x60, 0x40, 0x01, 0x26, 0x53, 0x00, 0x09, 0x60, 0x00, 0x64, 0xD0, 0x80, - 0x3F, 0xF2, 0x09, 0x06, 0x2C, 0x45, 0xC4, 0x84, 0xD0, 0x80, 0x40, 0x4A, 0x40, 0x06, 0x60, 0x43, - 0x64, 0x44, 0x54, 0x88, 0x18, 0x00, 0x60, 0x45, 0x28, 0x60, 0x36, 0x64, 0xA0, 0xD3, 0xDB, 0xF3, - 0x00, 0xBC, 0x60, 0x47, 0xEC, 0xA0, 0x33, 0x03, 0x32, 0x07, 0x2C, 0x44, 0xC4, 0x81, 0x02, 0x60, - 0x1C, 0x65, 0x45, 0x4A, 0xD5, 0x80, 0x2C, 0x45, 0x2A, 0x06, 0x27, 0x40, 0x04, 0x27, 0x30, 0x00, - 0x2A, 0x43, 0xD7, 0x85, 0x45, 0x48, 0xD6, 0xF1, 0x0F, 0xF2, 0xD3, 0x80, 0x01, 0x65, 0x01, 0x07, - 0x00, 0x65, 0xB4, 0x84, 0x0F, 0xFA, 0x00, 0x63, 0x3F, 0xF2, 0x28, 0x45, 0x60, 0x41, 0xD4, 0x84, - 0xDF, 0x83, 0xFC, 0x07, 0x14, 0xFC, 0x61, 0x44, 0x01, 0x36, 0x02, 0x00, 0x09, 0x3A, 0x06, 0x00, - 0x28, 0x44, 0x48, 0x88, 0x2A, 0x44, 0xC8, 0x83, 0x43, 0x4A, 0xE5, 0x01, 0x17, 0xFA, 0x04, 0x60, - 0x00, 0x64, 0x27, 0x45, 0xB4, 0x84, 0x2A, 0xFA, 0x28, 0x43, 0x16, 0xFC, 0x0D, 0x00, 0x3F, 0xF2, - 0x2C, 0x45, 0xD6, 0xF1, 0xC4, 0x81, 0xD1, 0x80, 0x0F, 0xF2, 0x01, 0x06, 0x01, 0xBC, 0x0F, 0xFA, - 0x3F, 0xF2, 0x17, 0xFA, 0x01, 0x64, 0x14, 0xFA, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x0E, 0xF0, - 0x63, 0x46, 0x00, 0x7F, 0x64, 0x5E, 0x4B, 0xFB, 0x64, 0x44, 0x00, 0x7E, 0xDB, 0xFB, 0x7C, 0xF1, - 0x60, 0x43, 0x60, 0x47, 0xD0, 0x80, 0xC0, 0x65, 0x01, 0x06, 0x64, 0x44, 0x0A, 0x36, 0x70, 0x64, - 0x14, 0x36, 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, 0x6E, 0x36, 0x0B, 0x64, 0x44, 0x86, 0x2A, 0xF2, - 0x07, 0xF0, 0x60, 0x40, 0xB0, 0x3A, 0x03, 0x00, 0x40, 0x3B, 0x01, 0x00, 0x12, 0x00, 0x0C, 0xB4, - 0x08, 0x3A, 0x55, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, 0x50, 0x00, 0x17, 0xF2, - 0x22, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x22, 0x22, 0x04, 0x00, 0x00, 0xA8, 0x01, 0xA8, 0x47, 0x03, - 0x46, 0x03, 0x3C, 0x46, 0x2A, 0xF0, 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x60, 0x45, 0x22, 0xF2, - 0xFF, 0xFF, 0x60, 0x43, 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x0A, 0x00, 0x02, 0x00, - 0x04, 0x27, 0x07, 0x00, 0x65, 0x44, 0x2A, 0x65, 0x60, 0x40, 0x03, 0x2B, 0x24, 0x65, 0x45, 0x4C, - 0x2E, 0x00, 0x65, 0x44, 0x2E, 0x65, 0x60, 0x40, 0x03, 0x2B, 0x28, 0x65, 0x45, 0x4C, 0x07, 0xF0, - 0xA9, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0x00, 0x7C, 0x03, 0x03, 0x63, 0x40, 0x01, 0x2A, 0x01, 0x00, - 0x3D, 0xF1, 0x2A, 0xF2, 0xFF, 0xFF, 0x08, 0xB0, 0x3E, 0xF2, 0x19, 0x03, 0x60, 0x47, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0x03, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x03, 0x24, 0x60, 0x6E, 0x62, - 0x24, 0x60, 0x46, 0x64, 0xA2, 0xDB, 0x3C, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, 0xCE, 0xFE, 0xB0, 0x60, 0xE1, 0x78, 0xFF, 0xFF, 0xDB, 0xF1, - 0x2C, 0x45, 0x64, 0x43, 0x17, 0xF2, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, - 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, 0xB0, 0x60, 0x58, 0x4D, 0xB6, 0x78, 0xFF, 0xFF, - 0xAE, 0x82, 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, - 0x63, 0x44, 0x80, 0x7E, 0xDB, 0xFB, 0x61, 0x44, 0xDC, 0x84, 0x2B, 0xF0, 0x1B, 0xFA, 0x64, 0x44, - 0x80, 0x27, 0x34, 0x00, 0x16, 0xF2, 0x0F, 0xF0, 0xAC, 0x84, 0x2C, 0x45, 0x29, 0x03, 0x4B, 0xF1, - 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, - 0x0F, 0xF0, 0xB0, 0x60, 0x58, 0x4D, 0xB6, 0x78, 0xFF, 0xFF, 0xAE, 0x82, 0xFC, 0xA2, 0x0A, 0x03, - 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, 0x80, 0x67, 0xB0, 0x84, 0x0F, 0xFA, - 0x61, 0x44, 0xDC, 0x84, 0x1D, 0xFA, 0xDE, 0x65, 0xC4, 0x85, 0x26, 0x41, 0xE1, 0x81, 0xC5, 0x84, - 0x2B, 0xFA, 0x1B, 0xF0, 0xDE, 0x64, 0xC0, 0x85, 0x26, 0x44, 0xE0, 0x84, 0xC4, 0x84, 0x10, 0xFA, - 0x26, 0x44, 0x2C, 0xF0, 0x0A, 0xA4, 0x64, 0x40, 0x01, 0x26, 0x00, 0x64, 0x11, 0xFA, 0xDB, 0xF3, - 0x13, 0xFA, 0xFF, 0xFF, 0x0D, 0xF2, 0x3E, 0xF0, 0x60, 0x47, 0xFF, 0xB4, 0x64, 0x41, 0x01, 0xB1, - 0x01, 0x63, 0x1D, 0x02, 0x60, 0x41, 0xFF, 0x22, 0x04, 0x00, 0xB0, 0x60, 0x58, 0x4F, 0xA7, 0x78, - 0xFF, 0xFF, 0x0F, 0x60, 0x92, 0x64, 0xA0, 0xDD, 0x2D, 0x60, 0x5A, 0x62, 0xA2, 0xD3, 0xB0, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x60, 0x41, 0x01, 0x63, 0x61, 0x40, 0xFF, 0x22, 0x04, 0x00, - 0xB0, 0x60, 0x58, 0x4F, 0xA7, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0x94, 0x64, 0xA0, 0xDD, 0x2A, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x03, 0x00, 0xB5, 0x60, 0x19, 0x78, 0xFF, 0xFF, 0x22, 0xF2, - 0x46, 0x43, 0x60, 0x40, 0x22, 0x26, 0x8B, 0x00, 0x01, 0x26, 0x05, 0x00, 0x04, 0x26, 0x0C, 0x00, - 0xB5, 0x60, 0x19, 0x78, 0xFF, 0xFF, 0x04, 0x27, 0x03, 0x00, 0xB5, 0x60, 0x19, 0x78, 0xFF, 0xFF, - 0xA9, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x02, 0x00, 0x07, 0xF4, 0xFF, 0xFF, 0xA3, 0x46, 0x2A, 0xF2, - 0xA3, 0x46, 0x60, 0x40, 0x08, 0x27, 0x3B, 0x00, 0xA9, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x37, 0xF0, - 0x08, 0x03, 0x64, 0x40, 0x10, 0x2A, 0x12, 0x00, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, 0x37, 0xFA, - 0x24, 0x00, 0x3D, 0xF3, 0x01, 0x61, 0x60, 0x43, 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0xE9, 0x81, - 0xA1, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0x91, 0x84, 0x37, 0xFA, 0x17, 0x00, 0x47, 0xF2, 0xFF, 0xFF, - 0x10, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0xFF, 0x60, 0xFF, 0x64, 0xDC, 0x84, 0x47, 0xFA, 0x46, 0xF2, - 0x16, 0x04, 0xDC, 0x84, 0x46, 0xFA, 0x45, 0xF2, 0x08, 0x04, 0xDC, 0x84, 0x45, 0xFA, 0x05, 0x04, - 0x37, 0xF2, 0xFF, 0xFF, 0xE0, 0x84, 0xE8, 0x84, 0x37, 0xFA, 0x0D, 0x60, 0x3E, 0x62, 0x80, 0xFF, - 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xBE, 0x60, 0x66, 0x78, 0xFF, 0xFF, 0x84, 0xFF, 0x0D, 0x60, - 0x3E, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xBE, 0x60, 0xDE, 0x78, 0xFF, 0xFF, - 0x84, 0xFF, 0xA9, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x3C, 0x46, - 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x47, 0xF0, 0x64, 0x41, - 0x64, 0x47, 0xFF, 0xB4, 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0xA3, 0x46, - 0x3A, 0xFA, 0x64, 0x44, 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0xA3, 0x46, 0x46, 0xF2, 0x45, 0xF0, - 0xA3, 0x46, 0x3C, 0xFA, 0x3D, 0xF8, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, - 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x8A, 0x00, 0x2A, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x35, 0x00, 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, 0x60, 0x40, - 0x40, 0x2B, 0x27, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, 0xDE, 0x82, 0xA2, 0xD1, - 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, 0x80, 0x2A, - 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, 0x01, 0x61, - 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0xDA, 0x82, 0xA2, 0xD1, 0xFF, 0xFF, - 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, 0xFF, 0xFF, - 0x20, 0xFE, 0x00, 0x60, 0x7C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, - 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x80, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, 0x0D, 0x3A, - 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, 0x64, 0x47, - 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEE, 0x7F, - 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, 0x65, 0x44, - 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, - 0x00, 0xEA, 0x02, 0x64, 0x3B, 0xDB, 0xB8, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0xFC, 0xFB, - 0x07, 0xF0, 0x00, 0x64, 0xD0, 0x80, 0xA9, 0xF3, 0x17, 0x03, 0xD0, 0x80, 0x66, 0x41, 0x64, 0x46, - 0x6F, 0xF2, 0x61, 0x46, 0x7B, 0x03, 0x60, 0x40, 0x00, 0x36, 0x78, 0x00, 0x47, 0xF1, 0x07, 0xF0, - 0x64, 0x40, 0x02, 0x26, 0x01, 0x00, 0x0B, 0x00, 0x03, 0x12, 0xB6, 0x60, 0x38, 0x78, 0xFF, 0xFF, - 0xFC, 0x0A, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x66, 0x41, - 0x64, 0x46, 0x0E, 0xF2, 0x60, 0x45, 0x61, 0x46, 0x10, 0x7E, 0x4E, 0xFB, 0x65, 0x44, 0x60, 0x40, - 0x01, 0x36, 0x5C, 0x00, 0x02, 0x36, 0x5D, 0x00, 0x03, 0x36, 0x34, 0x00, 0x04, 0x36, 0x45, 0x00, - 0x67, 0x00, 0x00, 0x64, 0x4C, 0xFB, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x05, 0x7E, - 0x6F, 0xFA, 0x61, 0x46, 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, - 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, - 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, - 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, - 0x0C, 0xF4, 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xFF, 0xFF, 0xA0, 0x7E, - 0x4E, 0xFB, 0x24, 0x00, 0x4C, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x4C, 0xFB, 0xCB, 0xF3, 0x60, 0x45, - 0xD4, 0x80, 0xFF, 0xFF, 0x1B, 0x02, 0x24, 0x60, 0xA6, 0x62, 0x0F, 0x60, 0x96, 0x64, 0xA2, 0xDB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xBC, 0x01, 0x4C, 0xF3, 0x66, 0x41, 0xDC, 0x84, - 0x4C, 0xFB, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x03, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x66, 0x41, - 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xFF, 0xFF, 0xA4, 0x7E, 0x4E, 0xFB, 0xB7, 0x60, 0x56, 0x78, - 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x6F, 0xFA, 0x61, 0x46, - 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xFF, 0xFF, 0xA8, 0x7E, 0x4E, 0xFB, 0xEE, 0x01, - 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0x8C, 0xFA, 0x60, 0x47, 0x70, 0xF2, 0xFF, 0xB5, 0x08, 0x18, - 0xE4, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0xFB, 0x04, 0x01, 0x64, 0x01, 0x00, 0x00, 0x64, - 0x0C, 0xF4, 0x00, 0xA8, 0xFF, 0xFF, 0xDD, 0x02, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, - 0x60, 0x47, 0x70, 0xF2, 0xFF, 0xB5, 0x61, 0x46, 0x00, 0xA8, 0xFF, 0xFF, 0x29, 0x03, 0xE0, 0x84, - 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0x66, 0x41, 0x64, 0x46, 0x70, 0xFA, 0x61, 0x46, 0x01, 0x65, - 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, - 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, - 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, - 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0x95, 0x01, - 0x94, 0x01, 0x65, 0x44, 0x60, 0x40, 0x01, 0x36, 0xA1, 0x01, 0x02, 0x36, 0x01, 0x00, 0x9E, 0x01, - 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x00, 0x65, - 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, - 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, - 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, - 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0x66, 0x41, - 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xD0, 0x7E, 0x4E, 0xFB, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, - 0x60, 0x45, 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0x20, 0x7E, 0x4E, 0xFB, 0x65, 0x44, - 0x60, 0x40, 0x01, 0x36, 0x0B, 0x00, 0x02, 0x36, 0x1A, 0x00, 0x03, 0x36, 0x53, 0x00, 0x04, 0x36, - 0x70, 0x00, 0x05, 0x36, 0x14, 0x00, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x41, - 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x02, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x66, 0x41, 0x64, 0x46, - 0x0E, 0xF2, 0x61, 0x46, 0xB0, 0x7E, 0x4E, 0xFB, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x07, 0xF0, - 0x01, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, - 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, - 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, - 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0x00, 0x63, 0x03, 0x7E, 0x6F, 0xFA, 0x61, 0x46, 0x4C, 0xFD, - 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xB4, 0x7E, 0x4E, 0xFB, 0x24, 0x60, 0xA6, 0x62, - 0x0F, 0x60, 0x96, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xB7, 0x60, - 0x56, 0x78, 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x4C, 0xF3, 0x02, 0xB0, 0x61, 0x46, - 0xCC, 0x84, 0x05, 0x03, 0x04, 0x28, 0x4C, 0xFB, 0xB7, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x04, 0x28, - 0x4C, 0xFB, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x04, 0x7E, 0x6F, 0xFA, 0x61, 0x46, - 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xB8, 0x7E, 0x4E, 0xFB, 0xB7, 0x60, 0x56, 0x78, - 0xFF, 0xFF, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, - 0x61, 0x46, 0xFF, 0xA0, 0xFF, 0xFF, 0x35, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, - 0xFB, 0x04, 0x2F, 0x00, 0x64, 0x46, 0x70, 0xFA, 0x01, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, - 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, - 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, - 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, - 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, 0x6F, 0xF2, 0x00, 0x63, 0x03, 0x7E, 0x6F, 0xFA, - 0x3C, 0x46, 0x4C, 0xFD, 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xC0, 0x7E, 0x4E, 0xFB, - 0x5D, 0x00, 0x5C, 0x00, 0x65, 0x44, 0x60, 0x40, 0x01, 0x36, 0x03, 0x00, 0x02, 0x36, 0x18, 0x00, - 0x55, 0x00, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x61, 0x46, 0x01, 0xB0, 0xFF, 0xFF, 0x4E, 0x02, - 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x02, 0x7E, 0x6F, 0xFA, 0x61, 0x46, - 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xE0, 0x7E, 0x4E, 0xFB, 0x3F, 0x00, 0x3E, 0x00, - 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x6F, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x6F, 0xFA, 0x60, 0x47, - 0xFF, 0xB5, 0x70, 0xF2, 0x61, 0x46, 0xFF, 0xA0, 0xFF, 0xFF, 0xF1, 0x06, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0xEB, 0x01, 0x66, 0x41, 0x64, 0x46, 0x70, 0xFA, 0x61, 0x46, - 0x00, 0x65, 0x65, 0x43, 0x66, 0x41, 0x64, 0x46, 0x70, 0xF2, 0x8C, 0xFA, 0x00, 0xA8, 0x6F, 0xF2, - 0x15, 0x03, 0x60, 0x47, 0xFF, 0xB5, 0x70, 0xF2, 0x00, 0xBB, 0xFF, 0xA0, 0x07, 0x03, 0x0E, 0x06, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0x02, 0x02, 0xFB, 0x04, 0x08, 0x00, 0xB9, 0x81, 0xE8, 0x84, - 0xD9, 0x81, 0xFD, 0x04, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x0C, 0xF4, 0xFF, 0xFF, - 0x66, 0x41, 0x64, 0x46, 0x0E, 0xF2, 0x61, 0x46, 0xE4, 0x7E, 0x4E, 0xFB, 0x03, 0x64, 0x3B, 0xDB, - 0xCA, 0xFE, 0x47, 0xF1, 0x01, 0x65, 0x32, 0x40, 0x04, 0x27, 0x08, 0x00, 0x2C, 0xF2, 0x64, 0x45, - 0x02, 0x22, 0x04, 0x00, 0x60, 0x40, 0x01, 0x26, 0x01, 0x00, 0xE3, 0x00, 0x14, 0xF2, 0x65, 0x40, - 0x01, 0x26, 0x1D, 0x00, 0x60, 0x45, 0x05, 0x64, 0x3B, 0xDB, 0x65, 0x44, 0xCC, 0x85, 0xB8, 0xF1, - 0x27, 0x60, 0x78, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, - 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, - 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xAF, 0x00, 0x60, 0x41, - 0x2A, 0xF0, 0x00, 0x60, 0x0C, 0x64, 0xA0, 0x84, 0x04, 0x36, 0x02, 0x00, 0x0C, 0x3A, 0x01, 0x00, - 0xA5, 0x00, 0x61, 0x45, 0x60, 0x41, 0xB8, 0xF1, 0x27, 0x60, 0x78, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x61, 0x40, 0x08, 0x36, 0x01, 0x00, 0x88, 0x00, 0x14, 0xF2, 0x1C, 0x65, - 0x60, 0x41, 0x00, 0x63, 0xCD, 0x81, 0xC7, 0x83, 0xFD, 0x02, 0x3F, 0xF0, 0x2C, 0xF2, 0xC3, 0x83, - 0x60, 0x40, 0x01, 0x2A, 0x29, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x76, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xB8, 0xF1, 0x27, 0x60, 0x7C, 0x64, 0xA0, 0xD3, - 0x63, 0x45, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, - 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x52, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x74, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, - 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xB8, 0xF1, 0x27, 0x60, 0x7A, 0x64, - 0xA0, 0xD3, 0x63, 0x45, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, - 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x15, 0xF2, 0xFF, 0xFF, 0x0F, 0xB4, 0x00, 0xA8, - 0x01, 0xA8, 0x24, 0x03, 0x12, 0x03, 0xB8, 0xF1, 0x27, 0x60, 0x82, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x11, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x80, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x04, 0x64, 0x3B, 0xDB, - 0x24, 0x60, 0x6E, 0x62, 0x24, 0x60, 0x46, 0x64, 0xA2, 0xDB, 0x3C, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, 0xCE, 0xFE, 0xB0, 0x60, 0xE1, 0x78, - 0xFF, 0xFF, 0x0F, 0xF0, 0x15, 0xF2, 0x64, 0x41, 0x01, 0x2A, 0x02, 0x00, 0xD1, 0xF1, 0x02, 0x00, - 0xD0, 0xF1, 0xFF, 0xFF, 0x64, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x15, 0xFA, 0x30, 0x07, 0x61, 0x40, - 0x01, 0x2A, 0x09, 0x00, 0x27, 0x60, 0xA8, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, - 0x08, 0x28, 0xA2, 0xDB, 0x08, 0x00, 0x27, 0x60, 0xAA, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, - 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x2A, 0xF0, 0x08, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x00, 0x64, - 0x48, 0xFB, 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0C, 0x00, - 0x3C, 0x46, 0x3E, 0xF2, 0x40, 0x60, 0x00, 0x65, 0xF0, 0x84, 0xA4, 0x84, 0x18, 0xFA, 0x2A, 0xF2, - 0xBF, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x2A, 0xFA, 0xB2, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x00, 0x64, - 0x49, 0xFB, 0xB8, 0xF1, 0x27, 0x60, 0x82, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0xB8, 0xF1, 0x27, 0x60, 0x84, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, - 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, - 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x2D, 0x60, 0x5A, 0x63, 0xA3, 0xD3, 0xB0, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x0D, 0xF2, 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, 0x23, 0xF0, 0x01, 0x64, - 0xB0, 0x84, 0xA2, 0xDA, 0x7B, 0x01, 0xB9, 0x60, 0x43, 0x78, 0xFF, 0xFF, 0x21, 0x64, 0x3B, 0xDB, - 0x31, 0xF3, 0x01, 0x63, 0xC4, 0xB4, 0x31, 0xFB, 0x32, 0xFD, 0xB8, 0x60, 0xEF, 0x62, 0x42, 0x40, - 0xA0, 0x4C, 0x40, 0xBC, 0x7D, 0xB4, 0xA0, 0x51, 0xA0, 0xFE, 0x1A, 0xFF, 0x24, 0x60, 0x3A, 0x64, - 0x08, 0xF0, 0x07, 0xF0, 0xD0, 0x80, 0x24, 0x60, 0x40, 0x62, 0x14, 0x02, 0xA2, 0xD3, 0x01, 0x63, - 0xAC, 0x86, 0x07, 0xF2, 0x0F, 0x03, 0xD0, 0x80, 0x09, 0xF2, 0xFA, 0x02, 0x23, 0xFC, 0x24, 0x60, - 0x6E, 0x62, 0x24, 0x60, 0x46, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x3C, 0x46, 0x06, 0x64, 0xA1, 0xFF, 0x49, 0xFB, 0x83, 0x3E, 0x31, 0xF3, - 0x87, 0x60, 0x80, 0x61, 0x1D, 0xF0, 0x60, 0x40, 0x01, 0x2A, 0x15, 0x00, 0xFE, 0xB4, 0x31, 0xFB, - 0x00, 0x64, 0x49, 0xFB, 0x01, 0x64, 0x47, 0xFB, 0x2D, 0x60, 0x5A, 0x63, 0xA3, 0xD3, 0xB0, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x71, 0x64, 0x5F, 0x0D, 0xFA, 0x40, 0x64, 0x3B, 0xDB, - 0xB9, 0x60, 0x43, 0x78, 0xFF, 0xFF, 0x02, 0x2A, 0x1B, 0x00, 0xD1, 0x91, 0x8D, 0xE2, 0x41, 0x64, - 0x3B, 0xDB, 0x31, 0xF3, 0x2D, 0x60, 0x62, 0x63, 0xFD, 0xB4, 0x31, 0xFB, 0xA3, 0xD3, 0xB0, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x02, 0x63, 0x60, 0x5C, 0x0D, 0xF2, 0x47, 0xFD, 0xFF, 0xB5, - 0x60, 0x47, 0xD0, 0x80, 0xDC, 0x84, 0x1F, 0x03, 0x60, 0x47, 0xB4, 0x84, 0x0D, 0xFA, 0x1B, 0x00, - 0x08, 0x2A, 0x07, 0x00, 0x42, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xF7, 0xB4, 0x31, 0xFB, - 0x12, 0x00, 0x10, 0x2A, 0x09, 0x00, 0x43, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, - 0x31, 0xFB, 0xB8, 0x60, 0xBE, 0x78, 0xFF, 0xFF, 0x44, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, - 0xDF, 0xB4, 0x31, 0xFB, 0x00, 0x00, 0x2A, 0x64, 0x3B, 0xDB, 0xB0, 0x60, 0x97, 0x64, 0x40, 0x40, - 0xB5, 0x60, 0x1E, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xB8, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x02, 0xB5, - 0x04, 0xB5, 0x04, 0x03, 0x03, 0x03, 0xBA, 0x60, 0x3C, 0x78, 0xFF, 0xFF, 0x86, 0xFF, 0x20, 0x44, - 0x84, 0xFF, 0x20, 0x2A, 0x04, 0x00, 0xF3, 0x60, 0x58, 0x4E, 0x14, 0x78, 0xFF, 0xFF, 0x31, 0x40, - 0x01, 0x26, 0x17, 0x00, 0xA0, 0x4C, 0x49, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x1C, 0x60, 0xB8, 0x63, - 0xA3, 0xD3, 0xFF, 0xFF, 0x02, 0xB5, 0x04, 0xBC, 0x09, 0x03, 0x60, 0x40, 0x01, 0x26, 0xED, 0xE2, - 0xFE, 0xB4, 0xA3, 0xDB, 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0x03, 0x00, 0xA0, 0x4C, 0x6D, 0xB4, - 0xA0, 0x51, 0xDC, 0xF3, 0xFF, 0xFF, 0xFD, 0xA0, 0xFF, 0xFF, 0x48, 0x03, 0x31, 0x40, 0x04, 0x2A, - 0x3E, 0x00, 0x6D, 0xF3, 0x74, 0xF3, 0xCC, 0x83, 0x6D, 0xFD, 0xCC, 0x84, 0x74, 0xFB, 0x1F, 0x02, - 0x31, 0x40, 0x02, 0x2A, 0x12, 0x00, 0x6F, 0xF3, 0x70, 0xF1, 0xCC, 0x84, 0x6F, 0xFB, 0x0D, 0x02, - 0x6F, 0xF9, 0x31, 0x44, 0x08, 0xBC, 0x40, 0x51, 0x72, 0xF3, 0x71, 0xF1, 0x00, 0xB8, 0x64, 0x45, - 0x01, 0x03, 0x67, 0x45, 0x65, 0x50, 0xCC, 0x84, 0x73, 0xFB, 0x28, 0x60, 0x00, 0x64, 0xA0, 0xD3, - 0x6E, 0xF1, 0x00, 0xB8, 0x74, 0xF9, 0x03, 0x03, 0x87, 0xF3, 0x6D, 0xFB, 0x04, 0x00, 0x6D, 0xF3, - 0x87, 0xF1, 0x15, 0x1B, 0x6D, 0xF9, 0x31, 0x40, 0x01, 0x2A, 0x11, 0x00, 0xDD, 0xFE, 0x0F, 0x05, - 0xBA, 0xFE, 0xAD, 0x4F, 0x00, 0x7F, 0x01, 0xBC, 0xA0, 0x5D, 0x00, 0xEE, 0x7F, 0xF1, 0x02, 0x60, - 0xEE, 0x64, 0xA3, 0xFB, 0xA4, 0xF9, 0x04, 0x64, 0xA5, 0xFB, 0xDF, 0xFE, 0x19, 0xFF, 0x1A, 0x60, - 0x42, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xFF, 0x2B, 0xA2, 0xDB, 0x31, 0x40, 0x01, 0x2A, - 0x29, 0x00, 0x9D, 0xFE, 0x27, 0x04, 0x26, 0x0A, 0x9F, 0xFE, 0x24, 0x05, 0x85, 0xFF, 0x20, 0x44, - 0x84, 0xFF, 0x40, 0x26, 0x1F, 0x00, 0x3F, 0x40, 0x20, 0x2B, 0x1C, 0x00, 0x38, 0x69, 0xFF, 0xFF, - 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x01, 0x2A, 0x15, 0x00, 0x27, 0x60, 0xB4, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x7F, 0xF1, 0x02, 0x60, 0xEE, 0x64, - 0xA3, 0xFB, 0xFF, 0xFF, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA4, 0xFB, 0x04, 0x64, 0xA5, 0xFB, - 0xDF, 0xFE, 0x19, 0xFF, 0x10, 0x64, 0x3B, 0xDB, 0x80, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0xC9, 0xFE, 0x49, 0xF3, 0x3C, 0x46, 0x27, 0x18, 0xCC, 0x84, - 0x49, 0xFB, 0x24, 0x02, 0xBB, 0x60, 0x18, 0x64, 0x40, 0x42, 0xFC, 0xFC, 0x00, 0x64, 0x5C, 0x5C, - 0x32, 0xFB, 0x82, 0xFF, 0x5C, 0x47, 0x84, 0xFF, 0x62, 0xFF, 0x27, 0x60, 0xA4, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, - 0xA2, 0xDA, 0x24, 0x60, 0x6E, 0x62, 0x24, 0x60, 0x46, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0xCE, 0xFE, 0x6A, 0xF3, 0xFF, 0xFF, - 0x60, 0x41, 0xFD, 0xB4, 0xA2, 0xDB, 0x61, 0x44, 0x01, 0xB0, 0x02, 0xB0, 0x0C, 0x03, 0x0B, 0x02, - 0x9D, 0xFE, 0x09, 0x04, 0x24, 0x60, 0xA6, 0x62, 0x1A, 0x60, 0xA2, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x07, 0x00, 0x80, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x1C, 0x60, 0xB4, 0x63, 0xA3, 0xD3, 0xAD, 0x49, 0x20, 0xB5, - 0x08, 0xB1, 0x23, 0x03, 0xE1, 0x81, 0x10, 0xB5, 0x95, 0x81, 0x60, 0x41, 0x18, 0x02, 0x1C, 0x60, - 0xB6, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, 0xA4, 0xDB, 0x17, 0x02, 0x05, 0x64, 0xA4, 0xDB, - 0x61, 0x44, 0x07, 0xB4, 0xFF, 0xFF, 0x11, 0x02, 0x08, 0xB1, 0xE1, 0x81, 0x95, 0x81, 0xA3, 0xD3, - 0x0C, 0x03, 0x08, 0xAC, 0x01, 0xBC, 0xA3, 0xDB, 0xFF, 0xFF, 0x13, 0xFF, 0x06, 0x00, 0x10, 0xAC, - 0xA3, 0xDB, 0x1C, 0x60, 0xB6, 0x63, 0x05, 0x7C, 0xA3, 0xD9, 0xB0, 0x60, 0xA4, 0x78, 0xFF, 0xFF, - 0x46, 0xF3, 0x45, 0xF1, 0x05, 0x1B, 0x64, 0x44, 0x03, 0x1B, 0x0F, 0x60, 0x92, 0x62, 0xA2, 0xD3, - 0x45, 0xFB, 0x00, 0x63, 0x46, 0xFD, 0x60, 0x41, 0x25, 0x64, 0x3B, 0xDB, 0x27, 0x44, 0xEF, 0xB4, - 0x40, 0x47, 0x00, 0xB9, 0x71, 0x40, 0x80, 0x27, 0x01, 0x12, 0x2B, 0x03, 0xBA, 0x60, 0x93, 0x62, - 0x84, 0xFF, 0x42, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x31, 0x0A, - 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x2B, 0x0A, 0x71, 0x40, 0x80, 0x27, - 0xF7, 0x12, 0x45, 0xF3, 0x4C, 0x02, 0x15, 0x18, 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, - 0x0B, 0x18, 0x31, 0x60, 0x10, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0x06, 0x18, 0xAC, 0x4C, 0x80, 0x26, - 0x03, 0x00, 0x00, 0x64, 0x45, 0xFB, 0x05, 0x00, 0x45, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0x45, 0xFB, - 0xDF, 0x02, 0x06, 0x0A, 0xA0, 0x4C, 0xFB, 0xB4, 0xA0, 0x51, 0xA3, 0x60, 0x99, 0x78, 0xFF, 0xFF, - 0x84, 0xFF, 0xBA, 0x60, 0x70, 0x64, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0xAB, 0x60, 0x2C, 0x78, 0xFF, 0xFF, 0x3C, 0x44, 0xAC, 0x80, 0x32, 0xF1, 0x25, 0x03, - 0x64, 0x40, 0x07, 0x22, 0x22, 0x00, 0xA3, 0x60, 0x7B, 0x78, 0xFF, 0xFF, 0xA0, 0x4C, 0x1C, 0xBC, - 0xDF, 0xB4, 0xA0, 0x51, 0x31, 0x40, 0x08, 0x2A, 0xEF, 0x01, 0x73, 0xF3, 0x71, 0xF1, 0x00, 0xA0, - 0xDC, 0x80, 0x05, 0x03, 0x08, 0x03, 0xCC, 0x84, 0x73, 0xFB, 0x67, 0x50, 0x08, 0x00, 0xCC, 0x84, - 0x73, 0xFB, 0x64, 0x50, 0x04, 0x00, 0x31, 0x44, 0xF7, 0xB4, 0x40, 0x51, 0x06, 0x00, 0x28, 0x64, - 0x3A, 0xDB, 0xA0, 0x4C, 0x30, 0xBC, 0xF3, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, - 0x28, 0x64, 0x3B, 0xDB, 0x0F, 0x60, 0x94, 0x62, 0xA2, 0xD3, 0x32, 0x40, 0x02, 0x27, 0x16, 0x00, - 0x46, 0xFB, 0x14, 0x18, 0xBB, 0x60, 0x06, 0x64, 0x84, 0xFF, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, - 0x14, 0xBC, 0xF7, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, - 0x46, 0xF3, 0xB7, 0x0A, 0xDC, 0x02, 0xCC, 0x84, 0x46, 0xFB, 0xF5, 0x02, 0x84, 0xFF, 0xBB, 0x60, - 0x18, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x27, 0x44, 0x08, 0xBC, 0x40, 0x47, 0xBB, 0xE1, 0x04, 0x00, - 0x3A, 0xE1, 0x31, 0x40, 0x01, 0x26, 0xBB, 0xE1, 0xA3, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x43, 0xFF, - 0x39, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x84, 0x3E, 0xFB, 0x01, 0xA0, 0x4C, 0x3D, 0x46, 0x2A, 0xF2, - 0x46, 0x4D, 0x10, 0x25, 0x0E, 0x00, 0x09, 0xE1, 0xA1, 0xFF, 0x66, 0x40, 0x0F, 0xF2, 0x01, 0x29, - 0x02, 0x00, 0x40, 0xFF, 0x0A, 0xBC, 0xA2, 0xDA, 0x08, 0x25, 0xE9, 0x01, 0xCB, 0xFE, 0x5C, 0x5D, - 0xE7, 0x01, 0x44, 0xFF, 0x31, 0xF2, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, - 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, - 0x07, 0xFC, 0x3F, 0xF2, 0x09, 0x60, 0xB0, 0x65, 0xD4, 0x80, 0x2A, 0xF2, 0xC4, 0x05, 0x08, 0x25, - 0xB6, 0x01, 0x00, 0x64, 0x0D, 0x60, 0x2C, 0x61, 0x40, 0x4B, 0xA1, 0xDB, 0x2D, 0x46, 0x3B, 0xF2, - 0xA9, 0xF1, 0x87, 0xF4, 0x60, 0x40, 0x20, 0x2B, 0x12, 0x00, 0xD3, 0x80, 0x2C, 0xF0, 0xB3, 0x03, - 0x07, 0xF4, 0x64, 0x40, 0x01, 0x26, 0xA9, 0xF5, 0xB6, 0xF4, 0x2D, 0x46, 0x04, 0x64, 0x04, 0xB3, - 0x22, 0xFA, 0x04, 0x03, 0xBC, 0x60, 0x72, 0x78, 0xFF, 0xFF, 0x01, 0x00, 0xDE, 0x00, 0x74, 0x62, - 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, - 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0x7C, 0x5F, 0xE8, 0x84, 0xE8, 0x85, - 0x0C, 0x60, 0x3A, 0x64, 0x44, 0xD3, 0x5A, 0xD1, 0x03, 0x1B, 0xBC, 0x60, 0x65, 0x78, 0xFF, 0xFF, - 0x60, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, - 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, - 0xE7, 0x7F, 0xA0, 0x5B, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5B, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, - 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, - 0xED, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEF, 0x7F, - 0xA0, 0x5B, 0x65, 0x44, 0xD8, 0x84, 0x08, 0x25, 0x76, 0x00, 0x60, 0x7F, 0xA0, 0x5B, 0x80, 0x60, - 0x00, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xD1, 0x60, 0x00, 0xEB, 0x3F, 0xF2, 0x04, 0x65, 0xC4, 0x83, - 0x0A, 0xE1, 0xB3, 0xFF, 0x9A, 0xFF, 0xCB, 0x83, 0x00, 0xF4, 0x10, 0x62, 0x6C, 0x61, 0x0E, 0xA3, - 0xAB, 0x84, 0xF2, 0xA3, 0xA1, 0xFF, 0x08, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0x02, 0x62, 0xC9, 0x81, - 0xAB, 0x84, 0xA1, 0xFF, 0x01, 0x00, 0xA2, 0xDC, 0x7A, 0xD4, 0xFD, 0x1C, 0xA2, 0xDC, 0x08, 0x25, - 0x52, 0x00, 0xF2, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0xEF, 0x03, 0xFF, 0xB1, 0x09, 0x1E, 0x02, 0x02, - 0x00, 0xF4, 0x02, 0x62, 0x5A, 0xD2, 0x89, 0xFF, 0x80, 0x4F, 0x6F, 0x44, 0xA2, 0xDA, 0x88, 0xFF, - 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, 0x3D, 0x46, 0x08, 0x25, 0x3D, 0x00, 0x40, 0xFF, 0x0F, 0xF0, - 0x0A, 0x64, 0xB0, 0x84, 0x16, 0x14, 0xF7, 0xB4, 0xA2, 0xDA, 0x0D, 0x60, 0x2C, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0C, 0x00, 0xF1, 0xF5, 0xF0, 0xF4, 0x0D, 0x60, 0x2C, 0x61, - 0x59, 0xD1, 0x37, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, 0xFC, 0x02, 0x2D, 0x46, - 0x0D, 0x01, 0xA2, 0xDA, 0x2D, 0x46, 0x3B, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x20, 0x2B, 0x18, 0x00, - 0xF1, 0xF5, 0xB7, 0xF0, 0x2A, 0x44, 0xA4, 0x84, 0xFF, 0xFF, 0x2F, 0x26, 0x10, 0x00, 0x2D, 0x46, - 0x64, 0x44, 0x3A, 0xF0, 0xBC, 0xF0, 0x64, 0x5F, 0x3D, 0xF0, 0x07, 0xF4, 0xF0, 0xF4, 0xFF, 0xFF, - 0x08, 0xA3, 0x5B, 0xD8, 0x65, 0x5C, 0x5B, 0xD8, 0x5B, 0xDA, 0x2D, 0x46, 0x01, 0x00, 0x2D, 0x46, - 0xBB, 0x60, 0x36, 0x78, 0xFF, 0xFF, 0x98, 0xFF, 0x43, 0xFF, 0x40, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, - 0x2D, 0x46, 0x0D, 0x60, 0x2C, 0x61, 0xA1, 0xD3, 0x2D, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, - 0xF1, 0xF5, 0xF0, 0xF4, 0x59, 0xD1, 0x37, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, - 0xFC, 0x02, 0x2D, 0x46, 0xBB, 0x60, 0x20, 0x78, 0xFF, 0xFF, 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, - 0x3D, 0x46, 0x08, 0x25, 0xE0, 0x01, 0x0F, 0xF2, 0x40, 0xFF, 0x02, 0xBC, 0xA2, 0xDA, 0xBB, 0x60, - 0x36, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x0D, 0x60, 0x2C, 0x62, 0xA2, 0xDB, 0x04, 0x64, 0x22, 0xFA, - 0x87, 0xF4, 0xA9, 0xF1, 0xFF, 0xFF, 0xD3, 0x80, 0x3B, 0xF2, 0xE7, 0x03, 0x60, 0x47, 0xC0, 0xB7, - 0x02, 0xFE, 0xF0, 0x84, 0xF0, 0x84, 0xF0, 0x84, 0x00, 0xA8, 0x40, 0x4A, 0x16, 0x03, 0xE0, 0x81, - 0x61, 0x43, 0x42, 0xFE, 0x00, 0x64, 0xF0, 0x84, 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, - 0x2D, 0x46, 0x07, 0xF4, 0xE0, 0x81, 0x37, 0xF0, 0x2A, 0x47, 0x0C, 0x60, 0x7A, 0x63, 0xA0, 0x84, - 0x47, 0x9C, 0x10, 0x03, 0x7C, 0x44, 0xA0, 0x63, 0x11, 0x00, 0x20, 0x64, 0x40, 0x4A, 0x63, 0x46, - 0x37, 0xF0, 0x66, 0x44, 0x64, 0x40, 0x80, 0x2B, 0x05, 0x00, 0x00, 0x60, 0x70, 0x7C, 0x00, 0x60, - 0x90, 0x63, 0x04, 0x00, 0x2D, 0x46, 0xBC, 0x60, 0x65, 0x78, 0xFF, 0xFF, 0x2D, 0x46, 0xEE, 0xFB, - 0xEF, 0xF9, 0xF0, 0xFD, 0x07, 0xF2, 0xF1, 0xFB, 0x60, 0x46, 0x37, 0xF0, 0x2A, 0x44, 0x0D, 0x60, - 0x2C, 0x62, 0x5A, 0xD9, 0x00, 0x65, 0x45, 0x4B, 0xA0, 0x84, 0xFF, 0xFF, 0x3F, 0x22, 0x05, 0x00, - 0x90, 0x84, 0x37, 0xFA, 0x01, 0x64, 0x40, 0x4B, 0x21, 0x00, 0xAD, 0x46, 0x0A, 0xA3, 0x3D, 0xF2, - 0xAD, 0x46, 0xA3, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3C, 0xF2, 0xAD, 0x46, 0x02, 0x03, 0x16, 0x07, - 0x14, 0x04, 0x5B, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3B, 0xF2, 0x03, 0x03, 0xAD, 0x46, 0x0E, 0x07, - 0x0C, 0x04, 0x3A, 0xF0, 0xAD, 0x46, 0x5B, 0xD0, 0x64, 0x5F, 0xD0, 0x80, 0x2B, 0x44, 0x18, 0x07, - 0x04, 0x03, 0xD0, 0x84, 0x10, 0xA4, 0xFF, 0xFF, 0x13, 0x07, 0x7F, 0x01, 0x01, 0x64, 0x0D, 0x60, - 0x2C, 0x62, 0xA2, 0xDB, 0x2D, 0x46, 0x0D, 0x60, 0x3C, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, - 0xA2, 0xDB, 0xBD, 0x60, 0x0B, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x53, 0x01, - 0x2D, 0x46, 0x0D, 0x60, 0x3C, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xBD, 0x60, - 0x94, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x45, 0x01, 0x00, 0x60, 0x0F, 0x64, - 0xBB, 0x60, 0xD3, 0x78, 0xFF, 0xFF, 0x07, 0xF4, 0x66, 0x41, 0x03, 0xF2, 0x04, 0xF2, 0x40, 0x42, - 0x05, 0xF2, 0x40, 0x43, 0x40, 0x44, 0x61, 0x46, 0x3C, 0xF2, 0x3D, 0xF2, 0x40, 0x40, 0x40, 0x41, - 0x0D, 0x60, 0x70, 0x65, 0x00, 0x61, 0xEF, 0xF1, 0xEE, 0xF5, 0x44, 0x4C, 0x2C, 0x5C, 0xE9, 0x80, - 0x00, 0x64, 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x24, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x20, 0x44, 0x40, 0x80, 0xDB, 0x83, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x21, 0x44, 0x40, 0x81, 0xDB, 0x83, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, 0xDB, 0x83, 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xF2, 0xA3, 0xBD, 0xD2, 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x24, 0x44, 0xC0, 0x9C, 0x41, 0x84, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, 0x0D, 0x60, - 0x2E, 0x61, 0x05, 0x64, 0xF0, 0xF4, 0xF1, 0xF5, 0xFE, 0xA3, 0x5B, 0xD0, 0xCC, 0x84, 0x59, 0xD9, - 0xFC, 0x02, 0xF0, 0xF3, 0xF1, 0xF5, 0x60, 0x42, 0x20, 0x44, 0xA2, 0xDA, 0x21, 0x44, 0x5A, 0xDA, - 0x22, 0x44, 0x5A, 0xDA, 0x23, 0x44, 0x5A, 0xDA, 0x24, 0x44, 0x5A, 0xDA, 0x61, 0x46, 0x0D, 0x60, - 0x3C, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x41, 0xF0, 0xF3, 0xF1, 0xF5, 0xA0, 0xD2, - 0x5A, 0xD0, 0x40, 0x40, 0x44, 0x41, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x42, 0x5A, 0xD0, 0x44, 0x43, - 0x61, 0x46, 0xBA, 0xF0, 0x3B, 0xF2, 0x44, 0x44, 0x65, 0x5F, 0x40, 0x85, 0xEF, 0xF4, 0xEE, 0xF5, - 0x43, 0x4C, 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x20, 0x44, 0x40, 0x80, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x21, 0x44, - 0x40, 0x81, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, - 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xBD, 0xD2, - 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0x40, 0x84, 0xBD, 0xD2, 0x24, 0x5C, - 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x25, 0x44, 0x40, 0x85, 0x61, 0x46, 0x3A, 0xF0, 0xFF, 0xFF, - 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5B, 0x64, 0x44, - 0xE2, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xEE, 0xF5, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x84, 0xE8, 0x80, - 0xF8, 0x84, 0x20, 0x5C, 0x40, 0x80, 0x20, 0x44, 0xE4, 0x7F, 0xA0, 0x5B, 0x20, 0x47, 0xE5, 0x7F, - 0xA0, 0x5B, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x21, 0x5C, 0x40, 0x81, - 0x21, 0x44, 0xE6, 0x7F, 0xA0, 0x5B, 0x21, 0x47, 0xE7, 0x7F, 0xA0, 0x5B, 0x21, 0x44, 0xE8, 0x80, - 0xF8, 0x84, 0x22, 0x5C, 0x40, 0x82, 0x22, 0x44, 0xE8, 0x7F, 0xA0, 0x5B, 0x22, 0x47, 0xE9, 0x7F, - 0xA0, 0x5B, 0x22, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x23, 0x5C, 0x40, 0x83, 0x23, 0x44, 0xEA, 0x7F, - 0xA0, 0x5B, 0x23, 0x47, 0xEB, 0x7F, 0xA0, 0x5B, 0x23, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x24, 0x5C, - 0x40, 0x84, 0x24, 0x44, 0xEC, 0x7F, 0xA0, 0x5B, 0x24, 0x47, 0xED, 0x7F, 0xA0, 0x5B, 0x24, 0x44, - 0xE8, 0x80, 0xF8, 0x84, 0x25, 0x5C, 0x40, 0x85, 0x25, 0x44, 0xEE, 0x7F, 0xA0, 0x5B, 0x25, 0x47, - 0xEF, 0x7F, 0xA0, 0x5B, 0x2C, 0x43, 0xA3, 0xD2, 0x25, 0x5C, 0x90, 0x81, 0xE9, 0x84, 0xE3, 0x7F, - 0xA0, 0x5B, 0x0D, 0x60, 0x3C, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xF3, 0x5A, 0xD3, - 0x40, 0x48, 0x5A, 0xD3, 0x40, 0x49, 0x40, 0x4A, 0x00, 0x60, 0x70, 0x7C, 0x44, 0x4D, 0x45, 0xF2, - 0x46, 0xF2, 0x40, 0x47, 0x40, 0x46, 0x0D, 0x60, 0x70, 0x65, 0x00, 0x61, 0x2D, 0x5C, 0xE9, 0x80, - 0x00, 0x64, 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xDB, 0x83, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x27, 0x44, 0x40, 0x87, 0xDB, 0x83, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x28, 0x44, 0x40, 0x88, 0xDB, 0x83, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x29, 0x44, 0x40, 0x89, 0xF2, 0xA3, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x2A, 0x44, 0xC0, 0x9C, 0x41, 0x8A, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, 0x26, 0x44, - 0x40, 0xFA, 0x27, 0x44, 0x41, 0xFA, 0x28, 0x44, 0x42, 0xFA, 0x29, 0x44, 0x43, 0xFA, 0x2A, 0x44, - 0x44, 0xFA, 0x0D, 0x60, 0x3E, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x80, 0x7C, - 0x44, 0x4D, 0x2D, 0x42, 0xA2, 0xD2, 0x5A, 0xD0, 0x40, 0x46, 0x44, 0x47, 0x5A, 0xD2, 0x5A, 0xD0, - 0x40, 0x48, 0x5A, 0xD0, 0x44, 0x49, 0x47, 0xF2, 0x44, 0x4A, 0x40, 0x8B, 0x60, 0x5C, 0x64, 0x47, - 0xE0, 0x7F, 0xA0, 0x5A, 0xFF, 0xB4, 0x20, 0xBC, 0x7F, 0xB4, 0xE1, 0x7F, 0xA0, 0x5A, 0x64, 0x44, - 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x70, 0x63, 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x2B, 0x5C, - 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x27, 0x44, 0x40, 0x87, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x28, 0x44, 0x40, 0x88, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x29, 0x44, 0x40, 0x89, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2A, 0x44, - 0x40, 0x8A, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2B, 0x44, 0x40, 0x8B, - 0xBD, 0xD2, 0x2B, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x26, 0x5C, 0x40, 0x86, 0x26, 0x44, - 0xE4, 0x7F, 0xA0, 0x5A, 0x26, 0x47, 0xE5, 0x7F, 0xA0, 0x5A, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x84, - 0xE8, 0x80, 0xF8, 0x84, 0x27, 0x5C, 0x40, 0x87, 0x27, 0x44, 0xE6, 0x7F, 0xA0, 0x5A, 0x27, 0x47, - 0xE7, 0x7F, 0xA0, 0x5A, 0x27, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x28, 0x5C, 0x40, 0x88, 0x28, 0x44, - 0xE8, 0x7F, 0xA0, 0x5A, 0x28, 0x47, 0xE9, 0x7F, 0xA0, 0x5A, 0x28, 0x44, 0xE8, 0x80, 0xF8, 0x84, - 0x29, 0x5C, 0x40, 0x89, 0x29, 0x44, 0xEA, 0x7F, 0xA0, 0x5A, 0x29, 0x47, 0xEB, 0x7F, 0xA0, 0x5A, - 0x29, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2A, 0x5C, 0x40, 0x8A, 0x2A, 0x44, 0xEC, 0x7F, 0xA0, 0x5A, - 0x2A, 0x47, 0xED, 0x7F, 0xA0, 0x5A, 0x2A, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2B, 0x5C, 0x40, 0x8B, - 0x2B, 0x44, 0xEE, 0x7F, 0xA0, 0x5A, 0x2B, 0x47, 0xEF, 0x7F, 0xA0, 0x5A, 0x38, 0xF0, 0x2B, 0x44, - 0x90, 0x84, 0xE8, 0x84, 0xE3, 0x7F, 0xA0, 0x5A, 0x0D, 0x60, 0x3E, 0x62, 0xA2, 0xD7, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE4, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x32, 0x00, 0xDC, 0xF3, 0x31, 0x41, 0x01, 0xB1, - 0x03, 0xA8, 0x2D, 0x03, 0x17, 0x02, 0x20, 0x40, 0x04, 0x2B, 0x0C, 0x00, 0xBB, 0xFE, 0xCA, 0xFE, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x08, 0x00, 0x0F, 0x60, 0xD2, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x0C, 0x00, 0xA9, 0xFE, 0xD8, 0x05, 0xAB, 0xFE, 0x0C, 0x05, 0xA8, 0xFE, - 0xC8, 0x05, 0xAA, 0xFE, 0xC9, 0x05, 0x78, 0x43, 0x01, 0x61, 0x24, 0x60, 0xDD, 0x78, 0xA1, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x85, 0x3E, 0x24, 0x60, 0x5E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, - 0x60, 0x46, 0x03, 0x02, 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0x26, 0x45, 0xD4, 0x80, 0x0F, 0xF0, - 0xF9, 0x03, 0x64, 0x44, 0x70, 0xB0, 0x70, 0x2A, 0x14, 0x00, 0x27, 0x60, 0xB2, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xFF, 0xFF, 0x08, 0x28, 0xA2, 0xDB, 0xA2, 0xFF, 0xAF, 0xF3, 0xFF, 0xFF, - 0xCC, 0x84, 0xFE, 0xA0, 0xAF, 0xFB, 0x01, 0x07, 0xD4, 0xFE, 0xA3, 0xFF, 0xC5, 0x60, 0x5B, 0x78, - 0xFF, 0xFF, 0x64, 0x40, 0x02, 0x26, 0x09, 0x00, 0x66, 0x45, 0x09, 0xF4, 0x0F, 0xF2, 0x02, 0x18, - 0x65, 0x46, 0xE3, 0x1B, 0x00, 0x64, 0x40, 0x46, 0xCA, 0x01, 0xA2, 0xFF, 0xAF, 0xF3, 0x46, 0x46, - 0xCC, 0x84, 0xFE, 0xA0, 0xAF, 0xFB, 0x01, 0x07, 0xD4, 0xFE, 0xA3, 0xFF, 0x0F, 0xF0, 0xA3, 0xFC, - 0x64, 0x44, 0x80, 0x26, 0x22, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x92, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, - 0x01, 0x64, 0x04, 0x00, 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x01, 0x64, 0x23, 0xFA, 0xC5, 0x60, - 0x67, 0x78, 0xFF, 0xFF, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0x08, 0x26, 0x3F, 0x00, 0x2A, 0xF2, - 0x60, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x66, 0x63, 0xBE, 0xD2, 0x83, 0xF1, 0xA3, 0xD2, 0xD0, 0x80, - 0x82, 0xF1, 0x18, 0x02, 0xBF, 0xD2, 0xD0, 0x80, 0x81, 0xF1, 0x14, 0x02, 0xD0, 0x80, 0xFF, 0xFF, - 0x11, 0x02, 0xB8, 0xF1, 0x27, 0x60, 0x9E, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, 0x02, 0x64, 0x04, 0x00, - 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, 0xC5, 0x60, 0x67, 0x78, 0xFF, 0xFF, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xB0, 0x3A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, - 0xC1, 0x60, 0x11, 0x78, 0xFF, 0xFF, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0x32, 0x44, 0x01, 0x2A, - 0x4A, 0x00, 0x28, 0x60, 0xE2, 0x63, 0xBF, 0xD3, 0x00, 0x65, 0xB4, 0x81, 0xDB, 0x83, 0x3D, 0x03, - 0xBF, 0xD3, 0xA3, 0xD3, 0x40, 0x48, 0xBE, 0xD3, 0x40, 0x4A, 0x2E, 0xF0, 0x40, 0x4C, 0xD0, 0x80, - 0x2D, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x2C, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, - 0xFF, 0xFF, 0x2B, 0x03, 0x31, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x30, 0xF0, 0x08, 0x02, 0x2A, 0x44, - 0xD0, 0x80, 0x2F, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x1E, 0x03, 0x34, 0xF0, - 0x2C, 0x44, 0xD0, 0x80, 0x33, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x32, 0xF0, 0x04, 0x02, - 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x03, 0x38, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x37, 0xF0, - 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x36, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, - 0x04, 0x03, 0xFA, 0xA1, 0x06, 0xA3, 0xB7, 0x03, 0xC3, 0x01, 0x07, 0x60, 0x00, 0x64, 0x23, 0xFA, - 0xC5, 0x60, 0x67, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x0F, 0xF0, 0x60, 0x45, 0xA4, 0x36, 0x08, 0x00, - 0x0C, 0xB4, 0x04, 0x36, 0x02, 0x00, 0x0C, 0x3A, 0x06, 0x00, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, - 0xC2, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x0F, 0xF0, 0x65, 0x40, 0x40, 0x2B, 0x22, 0x00, 0x32, 0x40, - 0x08, 0x26, 0x1F, 0x00, 0x07, 0xF4, 0x36, 0xF2, 0xFF, 0xFF, 0x37, 0xB4, 0x26, 0x46, 0x19, 0x02, - 0x2C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x11, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x98, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xC5, 0x60, 0x5B, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0x64, 0x40, 0x60, 0x26, 0x03, 0x00, 0xC2, 0x60, 0xAF, 0x78, 0xFF, 0xFF, - 0x60, 0x41, 0xA9, 0xF3, 0x07, 0xFA, 0x61, 0x44, 0x80, 0x3A, 0x06, 0x00, 0xE5, 0x60, 0x58, 0x4F, - 0xE7, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x10, 0x00, 0x60, 0x40, 0x40, 0x3A, 0x0D, 0x00, 0xDC, 0xF3, - 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0x3A, 0xE2, 0x01, 0xC6, 0x60, 0x58, 0x4D, 0x4F, 0x78, 0xFF, 0xFF, - 0xDD, 0x02, 0xA9, 0xF3, 0x07, 0xFA, 0xD1, 0x00, 0x5E, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x64, 0x63, - 0x50, 0xFE, 0xBD, 0xD2, 0x81, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, 0x82, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, - 0x83, 0xF1, 0x2A, 0xF2, 0xD0, 0x80, 0x60, 0x40, 0x08, 0x3A, 0x07, 0x00, 0x01, 0x0C, 0xC6, 0x01, - 0xDE, 0x60, 0x58, 0x4F, 0xFE, 0x78, 0xFF, 0xFF, 0xB8, 0x00, 0x26, 0x0C, 0xC6, 0x60, 0x58, 0x4D, - 0x4F, 0x78, 0xFF, 0xFF, 0xBB, 0x02, 0x1F, 0x60, 0x52, 0x61, 0x02, 0x64, 0xA1, 0xDB, 0x1F, 0x60, - 0x5A, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x22, 0x60, 0x58, 0x4E, 0x3E, 0x78, 0xFF, 0xFF, 0x1F, 0x60, - 0x04, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, 0x08, 0x00, 0x0F, 0x60, 0xEA, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1F, 0x60, 0x52, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x9B, 0x01, 0x91, 0x00, 0xC6, 0x60, 0x58, 0x4D, 0x4F, 0x78, 0xFF, 0xFF, - 0xFA, 0x02, 0x0F, 0x60, 0xCE, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, - 0x01, 0x64, 0xA1, 0xDB, 0x01, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x31, 0xF2, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0xA9, 0xF1, 0x43, 0x43, - 0xD3, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xC5, 0x60, 0x58, 0x4F, 0xA5, 0x78, 0xFF, 0xFF, 0x32, 0x40, - 0x08, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x80, 0x60, 0x02, 0x64, 0x06, 0xFA, 0x26, 0x46, 0xD8, 0xF3, - 0x63, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, - 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, - 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, 0x79, 0xF3, - 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, 0xD8, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, - 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, - 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, - 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, - 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, - 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, 0x0C, 0xF4, 0xB8, 0xF1, 0x27, 0x60, 0x8C, 0x64, - 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, - 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x27, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x3B, 0x12, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x9A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x13, 0x00, 0x02, 0x3B, 0x11, 0x00, 0xB8, 0xF1, - 0x27, 0x60, 0x9C, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x1B, 0xF2, 0xFF, 0xFF, 0xE4, 0xA4, 0x3E, 0xFA, 0x2A, 0xF2, 0x28, 0x41, 0x40, 0xA8, 0x01, 0xB1, - 0x02, 0x02, 0x62, 0x02, 0x92, 0x00, 0x60, 0x40, 0x08, 0x2A, 0x2B, 0x00, 0xB8, 0xF1, 0x27, 0x60, - 0x8A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x1B, 0xF2, - 0xFF, 0xFF, 0x60, 0x45, 0xB8, 0xF1, 0x27, 0x60, 0x90, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, - 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, - 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, - 0x88, 0xFF, 0x0F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x26, 0x28, 0x00, 0x32, 0x44, 0x02, 0x26, - 0x25, 0x00, 0x10, 0x2B, 0x29, 0x00, 0x28, 0x60, 0xE2, 0x63, 0xBF, 0xD3, 0x2C, 0xF0, 0x00, 0xA8, - 0x60, 0x41, 0x0D, 0x03, 0x50, 0xFE, 0xBD, 0xD3, 0x2D, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, 0x2E, 0xF0, - 0xD0, 0x80, 0xBD, 0xD3, 0x2C, 0xF0, 0xD0, 0x80, 0xFA, 0xA1, 0x10, 0x0C, 0xF3, 0x02, 0x50, 0xFE, - 0x60, 0x60, 0x01, 0x64, 0xD0, 0x80, 0x2D, 0xF0, 0x1D, 0x64, 0xD0, 0x80, 0x2E, 0xF0, 0x01, 0x64, - 0xD0, 0x80, 0xFF, 0xFF, 0x03, 0x0C, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x2A, - 0x03, 0x00, 0x19, 0x60, 0x22, 0x78, 0xFF, 0xFF, 0xC5, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x32, 0x40, - 0x40, 0x26, 0xF7, 0x01, 0x2A, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x08, 0x2A, 0x2A, 0x00, 0xDC, 0xF3, - 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0xA8, 0xFF, 0xFF, 0x03, 0x03, 0x32, 0x40, 0x02, 0x2A, 0x1D, 0x00, - 0x03, 0x67, 0xA0, 0x84, 0x00, 0x37, 0x64, 0x63, 0x60, 0x40, 0x02, 0x37, 0x5E, 0x63, 0x60, 0x40, - 0x01, 0x37, 0x58, 0x63, 0x60, 0x40, 0x03, 0x37, 0x0D, 0x00, 0xBD, 0xD2, 0x81, 0xF1, 0xBD, 0xD2, - 0xD0, 0x80, 0x82, 0xF1, 0x07, 0x02, 0xD0, 0x80, 0xBD, 0xD2, 0x83, 0xF1, 0x03, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x03, 0x03, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0xDE, 0x60, 0x58, 0x4F, 0xFE, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, 0x06, 0x00, 0x20, 0x40, 0x10, 0x2B, - 0x03, 0x00, 0xC5, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x87, 0xF4, 0xA9, 0xF1, 0x27, 0x1B, 0x31, 0xF2, - 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x03, 0x00, 0xD3, 0x80, 0xFF, 0xFF, - 0xD6, 0x03, 0x43, 0x43, 0xDC, 0xF3, 0x32, 0x40, 0x02, 0x26, 0x04, 0x00, 0x07, 0xB4, 0x03, 0xA8, - 0x2A, 0xF2, 0x5F, 0x02, 0xA9, 0xF1, 0x23, 0x43, 0xD3, 0x80, 0xFF, 0xFF, 0x5A, 0x02, 0xC5, 0x60, - 0x58, 0x4F, 0xA5, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x02, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x02, 0x64, - 0x06, 0xFA, 0x26, 0x46, 0x4E, 0x00, 0x32, 0x40, 0x08, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x80, 0x60, - 0x02, 0x64, 0x06, 0xFA, 0x26, 0x46, 0xD8, 0xF3, 0x63, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, - 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, - 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, 0xFF, 0xFF, - 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, 0x79, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, - 0xD8, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, - 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, 0x60, 0x47, - 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, - 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, - 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, - 0x0C, 0xF4, 0x07, 0xFC, 0x43, 0x43, 0x02, 0xFE, 0x1D, 0xF0, 0x1C, 0x60, 0x9A, 0x62, 0xC0, 0x64, - 0xC0, 0x84, 0xA2, 0xD1, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xC0, 0x84, - 0xA2, 0xDB, 0x2A, 0xF2, 0x63, 0x45, 0x0C, 0xB4, 0x08, 0x3A, 0x0A, 0x00, 0xDC, 0xF3, 0x23, 0x46, - 0x07, 0xB4, 0xFD, 0xA0, 0x06, 0xF2, 0x26, 0x46, 0x03, 0x03, 0x60, 0x40, 0x02, 0x2A, 0x0D, 0x00, - 0x2A, 0xF2, 0x35, 0xF0, 0x60, 0x40, 0xA4, 0x36, 0x0B, 0x00, 0x08, 0x2B, 0x0C, 0x00, 0x23, 0x46, - 0x22, 0xF2, 0x26, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, - 0xC5, 0x60, 0x55, 0x78, 0xFF, 0xFF, 0x23, 0x46, 0x1E, 0xF2, 0x26, 0x46, 0x44, 0x4C, 0x0F, 0x26, - 0x1D, 0x00, 0x00, 0xBC, 0x40, 0x45, 0x0B, 0x03, 0x00, 0x64, 0x23, 0x46, 0x1E, 0xFA, 0x26, 0x46, - 0xA2, 0xFF, 0xAF, 0x60, 0x58, 0x4E, 0x95, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, 0x2A, 0xF0, - 0x2C, 0x44, 0x64, 0x40, 0x04, 0x27, 0x0A, 0x00, 0x23, 0x46, 0x22, 0xFA, 0x26, 0x46, 0x1B, 0xF2, - 0xFF, 0xFF, 0xE4, 0xA4, 0x3E, 0xFA, 0xC4, 0x60, 0xAD, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x02, 0xFA, - 0xA2, 0xFF, 0x16, 0xF0, 0xFF, 0xFF, 0x64, 0x44, 0x01, 0x26, 0xDC, 0x9C, 0xB3, 0xF3, 0x2A, 0xF2, - 0xDC, 0x83, 0xB3, 0xFD, 0x06, 0xF4, 0x01, 0xF8, 0x26, 0x46, 0x60, 0x40, 0x40, 0x2B, 0x18, 0x00, - 0x64, 0x44, 0x00, 0x65, 0xFF, 0xB4, 0xFC, 0xA4, 0x06, 0xF0, 0x03, 0x03, 0x64, 0x46, 0x0C, 0x0D, - 0x02, 0x65, 0x26, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x60, 0x46, - 0xF9, 0x01, 0x01, 0xF2, 0xFF, 0xFF, 0xD4, 0x84, 0x01, 0xFA, 0x66, 0x44, 0x26, 0x46, 0x06, 0xFA, - 0x06, 0xF4, 0x00, 0xF2, 0x80, 0xFC, 0x40, 0x45, 0xAF, 0x60, 0x58, 0x4E, 0x95, 0x78, 0xFF, 0xFF, - 0xA3, 0xFF, 0x26, 0x46, 0x2C, 0x44, 0x0F, 0x26, 0x14, 0x00, 0x23, 0x46, 0x22, 0xFA, 0x26, 0x44, - 0x1E, 0xFA, 0x26, 0x46, 0x1B, 0xF2, 0xFF, 0xFF, 0xE4, 0xA4, 0x3E, 0xFA, 0x24, 0x60, 0x74, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x6F, 0x00, 0xA3, 0x46, 0x22, 0xF2, 0x60, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x22, 0xFA, 0xA3, 0x46, - 0x6C, 0x02, 0x2A, 0xF0, 0xA3, 0x46, 0x1E, 0xF2, 0xA3, 0x46, 0x00, 0xBC, 0x00, 0xF2, 0x01, 0x02, - 0x64, 0x00, 0x44, 0x4C, 0x3F, 0xF0, 0x60, 0x43, 0x23, 0x46, 0x1E, 0xF4, 0x09, 0x60, 0x00, 0x65, - 0x3F, 0xF2, 0x26, 0x46, 0xC0, 0x84, 0xD4, 0x80, 0x60, 0x45, 0x57, 0x07, 0x80, 0xFC, 0x1B, 0xF2, - 0x06, 0xF2, 0x60, 0x41, 0x23, 0x46, 0x1E, 0xF4, 0x1B, 0xF0, 0x06, 0xF0, 0xC1, 0x81, 0x06, 0xFA, - 0x05, 0xFA, 0x9B, 0xFA, 0x65, 0x44, 0x3F, 0xFA, 0x64, 0x46, 0x00, 0xFC, 0x63, 0x46, 0x01, 0xF2, - 0x10, 0x61, 0xF2, 0xA4, 0x01, 0xFA, 0xC8, 0x83, 0x02, 0x64, 0x59, 0xD0, 0x58, 0xD8, 0xFD, 0x1F, - 0x06, 0x45, 0x24, 0x60, 0x74, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, - 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, - 0x05, 0xFA, 0xAF, 0x60, 0x58, 0x4E, 0x95, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0x2C, 0x44, - 0x04, 0x27, 0x16, 0x00, 0x23, 0x46, 0x1E, 0xF2, 0x9E, 0xFC, 0x60, 0x46, 0x46, 0x46, 0x3F, 0xF2, - 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, 0x26, 0x46, 0x2C, 0x43, 0x2A, 0xFC, 0x06, 0xF4, 0x00, 0x64, - 0x00, 0xFA, 0x01, 0xF0, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0x01, 0xFA, 0x26, 0x46, 0x1D, 0x00, - 0x00, 0x66, 0x46, 0x46, 0xBF, 0x60, 0xEB, 0x78, 0xFF, 0xFF, 0xA3, 0x46, 0x1E, 0xF0, 0x9E, 0xFC, - 0x00, 0x63, 0x33, 0x85, 0xA3, 0x46, 0x0D, 0x03, 0xA3, 0x46, 0x22, 0xF2, 0x0F, 0x65, 0xA4, 0x85, - 0xD4, 0x84, 0x22, 0xFA, 0xA3, 0x46, 0xA2, 0xFF, 0xAF, 0x60, 0x58, 0x4E, 0x95, 0x78, 0xFF, 0xFF, - 0xA3, 0xFF, 0x26, 0x46, 0xC5, 0x60, 0x5B, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x32, 0xF0, 0x60, 0x40, - 0x08, 0x2A, 0x5C, 0x00, 0x01, 0x2B, 0x2F, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x2C, 0x00, 0xB8, 0xF1, - 0x27, 0x60, 0x8A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, - 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0xB8, 0xF1, 0x27, 0x60, 0x90, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x2B, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x88, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, - 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, - 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0xB8, 0xF1, - 0x27, 0x60, 0x8E, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, - 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, - 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, - 0x22, 0xF2, 0x26, 0x46, 0x0F, 0xB4, 0xDC, 0x85, 0xB8, 0xF1, 0x27, 0x60, 0x8C, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0B, 0x03, 0x07, 0x05, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, - 0xA2, 0xDB, 0x09, 0x04, 0xC6, 0xFE, 0x07, 0x00, 0x00, 0x64, 0xB8, 0x84, 0xA2, 0xDB, 0x8A, 0xFF, - 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, 0x12, 0x00, - 0xB8, 0xF1, 0x27, 0x60, 0x9A, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, - 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, - 0x88, 0xFF, 0x13, 0x00, 0x02, 0x3B, 0x11, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0x9C, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, - 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xC6, 0x60, 0x85, 0x78, 0xFF, 0xFF, - 0xBF, 0x60, 0xEB, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xBF, 0x60, 0xEB, 0x78, 0xFF, 0xFF, 0x24, 0x60, - 0x74, 0x62, 0x24, 0x60, 0x58, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x00, 0x66, 0x46, 0x46, 0xBF, 0x60, 0xEB, 0x78, 0xFF, 0xFF, - 0x2A, 0xF2, 0x58, 0x63, 0x60, 0x47, 0x01, 0x27, 0x64, 0x63, 0x31, 0x60, 0x28, 0x62, 0x61, 0x5C, - 0xA2, 0xD9, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, 0x00, 0xF4, 0x04, 0xF8, - 0x83, 0xFA, 0x82, 0xF8, 0xA6, 0x46, 0x02, 0xB0, 0x5E, 0x63, 0x04, 0x03, 0x64, 0x63, 0x03, 0xB0, - 0x02, 0x3A, 0x6C, 0x63, 0x3F, 0xF2, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, - 0xA6, 0x46, 0x07, 0xF8, 0x86, 0xFA, 0x85, 0xF8, 0x60, 0x47, 0x08, 0xFA, 0x31, 0x60, 0x28, 0x62, - 0xA2, 0xD1, 0x26, 0x46, 0x64, 0x41, 0x2F, 0x58, 0xFF, 0xFF, 0xA9, 0xF5, 0x00, 0xF2, 0x26, 0x46, - 0x31, 0xF0, 0x39, 0x18, 0x66, 0x41, 0x1C, 0x60, 0xBA, 0x65, 0x64, 0x47, 0x00, 0x7F, 0xA9, 0xF1, - 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, - 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, - 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, - 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, - 0x61, 0x46, 0x1E, 0x60, 0xBC, 0x61, 0xA1, 0xD3, 0x1E, 0x60, 0xFE, 0x7C, 0xD0, 0x80, 0xFF, 0xFF, - 0x07, 0x03, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x49, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA1, 0xDB, - 0xC6, 0x60, 0x40, 0x78, 0xFF, 0xFF, 0x20, 0x7C, 0x72, 0x44, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, - 0x02, 0x04, 0xD0, 0x84, 0xFB, 0x01, 0xE0, 0x83, 0xA9, 0xF3, 0x02, 0xA3, 0x43, 0x93, 0xA9, 0xF3, - 0xFF, 0xFF, 0x02, 0xA5, 0xD7, 0x80, 0x04, 0xA5, 0x08, 0x24, 0x65, 0x43, 0x66, 0x41, 0x63, 0x46, - 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x1C, 0x60, - 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, - 0xA9, 0xF3, 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, - 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, - 0x31, 0xF0, 0x66, 0x41, 0x1C, 0x60, 0xBA, 0x65, 0x64, 0x47, 0x00, 0x7F, 0xA9, 0xF1, 0xE0, 0x84, - 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, - 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, - 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, - 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, - 0x2F, 0xF2, 0x30, 0xF0, 0x31, 0xF0, 0x64, 0x45, 0x46, 0x43, 0x63, 0x46, 0x03, 0xFA, 0x06, 0xF2, - 0x84, 0xF8, 0x00, 0x7E, 0x06, 0xFA, 0x05, 0xF8, 0xA3, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xDC, 0xF3, - 0x2A, 0xF2, 0x07, 0xB0, 0x03, 0x3A, 0x2A, 0x00, 0x00, 0xF4, 0x09, 0xF2, 0x60, 0x45, 0x80, 0x3A, - 0x05, 0x00, 0x0E, 0xF2, 0xFF, 0xFF, 0x02, 0xB0, 0x0F, 0xF2, 0x20, 0x03, 0x60, 0x47, 0x00, 0x3A, - 0x1D, 0x00, 0x60, 0x41, 0x00, 0x36, 0x13, 0x00, 0xDA, 0x85, 0x2D, 0x60, 0x7A, 0x63, 0xBD, 0xD1, - 0xFF, 0xFF, 0xD1, 0x80, 0xFF, 0xFF, 0x12, 0x02, 0x60, 0xFE, 0xBD, 0xD3, 0xA5, 0xD0, 0xDE, 0x85, - 0xD0, 0x80, 0xCD, 0x81, 0x0B, 0x02, 0xF9, 0x02, 0x20, 0xFE, 0x00, 0x64, 0x0A, 0x00, 0x26, 0x46, - 0x48, 0xFE, 0x65, 0x40, 0x40, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x03, 0x00, 0x08, 0xFE, 0x20, 0xFE, - 0x00, 0x64, 0x40, 0x48, 0x26, 0x46, 0x2D, 0x58, 0xFF, 0xFF, 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xD3, - 0x18, 0xF2, 0x60, 0x40, 0x01, 0x26, 0x2A, 0xFA, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, - 0x03, 0x00, 0xC7, 0x60, 0x6D, 0x78, 0xFF, 0xFF, 0x3F, 0xF0, 0x32, 0x40, 0x10, 0x2A, 0x20, 0x00, - 0x2C, 0xF0, 0x64, 0x41, 0x60, 0x40, 0x40, 0x27, 0x1B, 0x00, 0xCD, 0x81, 0xDD, 0x81, 0x18, 0x03, - 0x17, 0x03, 0x64, 0x40, 0x01, 0x26, 0x14, 0x00, 0x01, 0x61, 0x13, 0x00, 0xB8, 0xF1, 0x27, 0x60, - 0xA0, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, - 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x23, 0x00, - 0x00, 0x61, 0x60, 0x40, 0x18, 0x36, 0x1F, 0x00, 0xC5, 0x60, 0x58, 0x4F, 0x78, 0x78, 0xFF, 0xFF, - 0x0F, 0xF0, 0xEB, 0xF1, 0x64, 0x44, 0x60, 0x22, 0x19, 0x00, 0xDC, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, - 0xFD, 0xA0, 0x2A, 0xF2, 0x03, 0x02, 0x08, 0xB0, 0xFF, 0xFF, 0x10, 0x02, 0x32, 0xF2, 0x33, 0xF2, - 0xD0, 0x80, 0xEC, 0xF1, 0x0B, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x08, 0x02, 0xED, 0xF1, 0xFF, 0xFF, - 0xD0, 0x80, 0x0F, 0xF0, 0x03, 0x02, 0xC7, 0x60, 0xB9, 0x78, 0xFF, 0xFF, 0x00, 0xF4, 0xAA, 0x60, - 0xAA, 0x65, 0x09, 0xF2, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x4F, 0x02, 0xD0, 0x80, 0x00, 0x64, - 0x5A, 0xD0, 0x4B, 0x02, 0x64, 0x45, 0xD4, 0x80, 0xF8, 0x7F, 0x08, 0x02, 0x5A, 0xD0, 0x26, 0x46, - 0x64, 0x45, 0x23, 0xF0, 0x20, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x0B, 0x00, 0xD4, 0x80, 0x1D, 0x60, - 0x60, 0x64, 0x16, 0x02, 0x5A, 0xD0, 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, 0x40, 0x67, 0xB0, 0x84, - 0xA2, 0xDA, 0x65, 0x44, 0x88, 0x3A, 0x07, 0x00, 0x77, 0x37, 0x08, 0x00, 0x78, 0x37, 0x06, 0x00, - 0x8E, 0x37, 0x04, 0x00, 0x2A, 0x00, 0x81, 0x3A, 0x28, 0x00, 0x80, 0x37, 0x00, 0x61, 0x25, 0x00, - 0xD4, 0x80, 0x01, 0x60, 0x00, 0x64, 0x5A, 0xD0, 0x20, 0x02, 0xD0, 0x80, 0x5A, 0xD0, 0x1D, 0x02, - 0x26, 0x46, 0x64, 0x47, 0x7F, 0xB4, 0xFD, 0xA0, 0x09, 0x03, 0x17, 0x07, 0x32, 0x40, 0x02, 0x26, - 0x47, 0x00, 0x23, 0xF0, 0x60, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x42, 0x00, 0x0F, 0xF2, 0x32, 0x40, - 0x02, 0x26, 0x3E, 0x00, 0xF2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF2, 0xFB, 0xEB, 0x60, 0x58, 0x4F, - 0xA5, 0x78, 0xFF, 0xFF, 0xC7, 0x60, 0xC3, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x61, 0x40, 0x01, 0x2A, - 0x12, 0x00, 0xB8, 0xF1, 0x27, 0x60, 0xA0, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x04, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0x04, 0x00, 0x8A, 0xFF, 0x20, 0x60, - 0x00, 0x75, 0x88, 0xFF, 0x6E, 0x00, 0x0F, 0xF2, 0x81, 0xF1, 0x2A, 0xF2, 0x60, 0x40, 0x20, 0x2A, - 0x12, 0x00, 0x5E, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x64, 0x63, 0xBD, 0xD2, 0xBD, 0xD2, 0xD0, 0x80, - 0x82, 0xF1, 0x08, 0x02, 0xD0, 0x80, 0xA3, 0xD2, 0x83, 0xF1, 0x04, 0x02, 0xD0, 0x80, 0xFF, 0xFF, - 0x01, 0x02, 0x06, 0x00, 0x56, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0x36, 0x51, 0x00, - 0xF2, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF2, 0xFB, 0x59, 0x00, 0x26, 0x46, 0x2A, 0xF2, 0xFF, 0xFF, - 0xFF, 0xFF, 0x0C, 0x26, 0x46, 0x00, 0xB0, 0x36, 0x15, 0x00, 0x10, 0x36, 0x13, 0x00, 0x30, 0x36, - 0x11, 0x00, 0xC0, 0x36, 0x02, 0x00, 0xA0, 0x3A, 0x12, 0x00, 0x81, 0xF1, 0x32, 0xF2, 0x33, 0xF2, - 0xD0, 0x80, 0x82, 0xF1, 0x36, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x83, 0xF1, 0x32, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x2F, 0x02, 0xDB, 0x60, 0x58, 0x4F, 0xD2, 0x78, 0xFF, 0xFF, 0x26, 0x00, 0x50, 0x3A, - 0x05, 0x00, 0xEF, 0x60, 0x58, 0x4F, 0xE3, 0x78, 0xFF, 0xFF, 0x1F, 0x00, 0x40, 0x3A, 0x05, 0x00, - 0xE8, 0x60, 0x58, 0x4F, 0x60, 0x78, 0xFF, 0xFF, 0x18, 0x00, 0x80, 0x3A, 0x15, 0x00, 0x81, 0xF1, - 0x32, 0xF2, 0x33, 0xF2, 0xD0, 0x80, 0x82, 0xF1, 0x14, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x83, 0xF1, - 0x10, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x0D, 0x02, 0xDF, 0x60, 0x58, 0x4F, 0x28, 0x78, 0xFF, 0xFF, - 0x20, 0x60, 0x58, 0x4F, 0xBF, 0x78, 0xFF, 0xFF, 0x04, 0x00, 0x66, 0x44, 0x00, 0xA8, 0xFF, 0xFF, - 0x0A, 0x03, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xC5, 0x60, 0x58, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x3B, 0xF0, - 0x60, 0x40, 0x40, 0x2B, 0x1E, 0x00, 0xC0, 0x60, 0x00, 0x64, 0x64, 0x40, 0x20, 0x2B, 0x19, 0x00, - 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, 0xFF, 0xFF, 0x14, 0x03, 0xC0, 0x60, 0x00, 0x64, 0x26, 0x46, - 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x23, 0xF2, 0x10, 0xBD, 0xB4, 0x9C, 0x3F, 0xF2, - 0x23, 0xF8, 0x3F, 0xF2, 0xFF, 0xFF, 0xF8, 0xA4, 0x3F, 0xFA, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, - 0x26, 0x46, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x58, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0xCB, 0x01, 0x00, 0x60, 0x30, 0x61, - 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x60, 0xFB, 0x00, 0x60, 0x30, 0x61, - 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x5F, 0xFB, 0x00, 0x60, 0x02, 0x61, - 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x66, 0xFB, 0x10, 0x60, 0x26, 0x62, - 0xC9, 0x60, 0xC7, 0x64, 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x01, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0x0F, 0x60, 0xF0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x14, 0x63, 0x01, 0x60, 0xC4, 0x61, 0x28, 0x60, 0x3E, 0x64, - 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x00, 0x60, 0x88, 0x63, 0x27, 0x60, 0xB4, 0x61, 0x28, 0x60, - 0x54, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, - 0x64, 0x45, 0xA9, 0xF1, 0x66, 0x41, 0x64, 0x46, 0x36, 0xF2, 0xFF, 0xFF, 0x65, 0x40, 0x01, 0x36, - 0x22, 0x64, 0x36, 0xFA, 0x61, 0x46, 0x32, 0x45, 0x28, 0x60, 0x3C, 0x62, 0xA2, 0xD1, 0x10, 0x67, - 0xB4, 0x85, 0x64, 0x40, 0x01, 0x2A, 0x94, 0x85, 0x45, 0x52, 0xFF, 0x60, 0xE7, 0x65, 0x32, 0x41, - 0xA5, 0x81, 0x2D, 0x60, 0x1A, 0x62, 0xA2, 0xD1, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0x64, 0x40, - 0x01, 0x2A, 0x0D, 0x00, 0x08, 0x65, 0xFF, 0xA0, 0xFF, 0xFF, 0x01, 0x03, 0x08, 0x00, 0x28, 0x60, - 0x30, 0x62, 0xA2, 0xD3, 0xB5, 0x81, 0x10, 0x65, 0x60, 0x40, 0x01, 0x26, 0xB5, 0x81, 0x41, 0x52, - 0x2D, 0x60, 0x1A, 0x62, 0xA2, 0xD3, 0x31, 0x60, 0x18, 0x63, 0xF0, 0x84, 0xF0, 0x84, 0xF0, 0x84, - 0x01, 0xB5, 0xF0, 0x84, 0xF0, 0x84, 0x03, 0xB4, 0x65, 0x5C, 0xA3, 0xD9, 0x31, 0x60, 0x1A, 0x63, - 0x02, 0xA8, 0xA3, 0xDB, 0x1B, 0x02, 0x07, 0x60, 0xD0, 0x64, 0x31, 0x60, 0x1C, 0x63, 0xA3, 0xDB, - 0x31, 0x60, 0x24, 0x63, 0xA3, 0xDB, 0x00, 0x60, 0xC8, 0x64, 0x31, 0x60, 0x1E, 0x63, 0xA3, 0xDB, - 0x31, 0x60, 0x26, 0x63, 0xA3, 0xDB, 0x00, 0x60, 0x64, 0x64, 0x31, 0x60, 0x20, 0x63, 0xA3, 0xDB, - 0x01, 0x60, 0x90, 0x64, 0x31, 0x60, 0x22, 0x63, 0xA3, 0xDB, 0x08, 0x00, 0x0A, 0x64, 0x31, 0x60, - 0x20, 0x63, 0xA3, 0xDB, 0x01, 0x64, 0x31, 0x60, 0x22, 0x63, 0xA3, 0xDB, 0x2D, 0x60, 0x1A, 0x62, - 0xA2, 0xD1, 0x01, 0x64, 0x64, 0x40, 0x40, 0x2A, 0x03, 0x00, 0x31, 0x60, 0x0E, 0x7C, 0xA4, 0xDB, - 0x12, 0x60, 0x28, 0x63, 0xBA, 0xF3, 0x0E, 0x61, 0x60, 0x45, 0x65, 0x44, 0xE8, 0x85, 0x05, 0x64, - 0xCD, 0x81, 0x02, 0x28, 0x00, 0x64, 0xBD, 0xDB, 0xF8, 0x02, 0x2D, 0x60, 0x78, 0x61, 0x27, 0x60, - 0xB6, 0x64, 0x20, 0x63, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0xBD, 0xF1, 0x80, 0xF9, 0x1A, 0x63, - 0x01, 0x60, 0x00, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, 0x40, 0x40, 0x01, 0x64, 0x87, 0xFB, - 0x28, 0x60, 0xCC, 0x61, 0xA1, 0xD3, 0x2E, 0x60, 0x96, 0x61, 0xFE, 0xA4, 0xE0, 0x84, 0x04, 0x24, - 0x0F, 0x00, 0xE0, 0x84, 0x41, 0x91, 0x2D, 0x60, 0xCC, 0x62, 0xA2, 0xD3, 0xA1, 0xD1, 0x2D, 0x60, - 0xC4, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0x59, 0xD1, 0x2D, 0x60, 0xC2, 0x62, 0xA0, 0x83, 0xA2, 0xDD, - 0xE5, 0xF3, 0x7F, 0xFB, 0x1B, 0x60, 0xC6, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x00, 0xB8, 0x10, 0x60, - 0x5C, 0x65, 0x0D, 0x03, 0x1B, 0x60, 0xCE, 0x63, 0xE5, 0xF3, 0xA3, 0xD1, 0xE0, 0x84, 0xC4, 0x84, - 0xA0, 0xD3, 0xFF, 0xFF, 0x01, 0xB0, 0xFF, 0xFF, 0x02, 0x02, 0xE5, 0xF9, 0x7F, 0xF9, 0xE5, 0xF3, - 0x01, 0x61, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, 0xFB, 0x01, 0xBA, 0xF3, 0x61, 0x45, - 0xA4, 0x80, 0xFF, 0xFF, 0x0B, 0x02, 0x00, 0xB8, 0x01, 0x63, 0x08, 0x03, 0xE8, 0x84, 0xFF, 0xFF, - 0x02, 0x24, 0x02, 0x00, 0xDF, 0x83, 0xFA, 0x01, 0xE5, 0xFD, 0x7F, 0xFD, 0x0F, 0x60, 0xF0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xF2, 0x62, 0x40, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xC8, 0x60, 0xF7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7F, 0xF1, - 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x0C, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x07, 0x64, - 0xD0, 0xFB, 0x0F, 0x60, 0xF2, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xC9, 0x60, 0x34, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF0, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x01, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xE3, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x05, 0x3A, - 0x03, 0x00, 0x68, 0x60, 0xBA, 0x61, 0x11, 0x00, 0x04, 0x3A, 0x03, 0x00, 0x68, 0x60, 0xAE, 0x61, - 0x0C, 0x00, 0x03, 0x3A, 0x03, 0x00, 0x68, 0x60, 0xA2, 0x61, 0x07, 0x00, 0x02, 0x3A, 0x03, 0x00, - 0x68, 0x60, 0x96, 0x61, 0x02, 0x00, 0x68, 0x60, 0x8A, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x01, 0x60, - 0xB8, 0x64, 0x0A, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, 0x01, 0x60, 0xBE, 0x61, 0xE4, 0xF3, - 0x00, 0x66, 0x00, 0xA8, 0x04, 0x65, 0x01, 0x03, 0xA1, 0xDB, 0x1F, 0x60, 0x08, 0x63, 0x55, 0xD3, - 0xFF, 0xFF, 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x21, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, - 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xF0, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, - 0x0B, 0x04, 0x0F, 0x60, 0xF2, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xC9, 0x60, 0x7B, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, 0x06, 0x64, - 0xA2, 0xDB, 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xF2, 0x62, 0x20, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xC9, 0x60, 0xA0, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xC5, 0xFE, 0x20, 0x40, 0x20, 0x2A, 0x08, 0x00, 0x10, 0x60, 0x02, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xF0, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x5A, 0xDB, 0x0E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xF0, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x8B, 0xFB, - 0xFF, 0xFF, 0xC1, 0xFE, 0x10, 0x60, 0x1A, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0xDF, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x24, 0x60, 0xA8, 0x63, 0x01, 0x64, 0xBD, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x0F, 0x60, 0xF0, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x0F, 0x60, 0xF2, 0x62, 0x00, 0x60, 0x08, 0x64, 0xA2, 0xDB, 0xC9, 0x60, 0xF3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xF0, 0x62, - 0xA2, 0xD1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x8B, 0xF3, 0x00, 0x65, 0xD4, 0x80, - 0xFF, 0xFF, 0x0B, 0x03, 0x0F, 0x60, 0xF2, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xC9, 0x60, - 0xF3, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xDE, 0xFE, 0x0E, 0x04, 0x09, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xF2, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCA, 0x60, - 0x1D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0A, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x24, 0x60, 0x9A, 0x62, 0x06, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xF0, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0xBE, 0xFE, 0xDA, 0xFE, 0x24, 0x60, 0x34, 0x61, 0xCA, 0x60, - 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x22, 0x61, 0xCA, 0x60, 0x58, 0x4E, 0x57, 0x78, - 0xFF, 0xFF, 0x24, 0x60, 0x28, 0x61, 0xCA, 0x60, 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x24, 0x60, - 0x46, 0x61, 0xCA, 0x60, 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x4C, 0x61, 0xCA, 0x60, - 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x58, 0x61, 0xCA, 0x60, 0x58, 0x4E, 0x57, 0x78, - 0xFF, 0xFF, 0xC5, 0xFE, 0x0E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0xA1, 0xD3, - 0x0E, 0x57, 0x24, 0x00, 0x0E, 0xF2, 0x44, 0x4C, 0x80, 0xB0, 0x10, 0xB0, 0x0B, 0x03, 0x24, 0x60, - 0x74, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x13, 0x00, 0x12, 0x02, 0xF0, 0x37, 0x09, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, - 0xD0, 0x80, 0xA2, 0xFF, 0xB0, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0xB0, 0xFB, 0x24, 0x60, 0x74, 0x64, - 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, - 0xD9, 0x02, 0x37, 0x58, 0xFF, 0xFF, 0x1A, 0x60, 0x66, 0x63, 0x00, 0x64, 0xA3, 0xDB, 0x06, 0xA3, - 0x10, 0x60, 0x4C, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0x00, 0x63, 0x10, 0x60, - 0x9E, 0x62, 0xA2, 0xDD, 0x10, 0x60, 0x4A, 0x62, 0xCF, 0x60, 0x16, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x24, 0x62, 0xCE, 0x60, 0xE2, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x02, 0x64, - 0xA2, 0xDB, 0xCA, 0x60, 0xFB, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x68, 0x60, - 0x7E, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x01, 0x60, 0xB8, 0x64, 0x0A, 0x63, 0x59, 0xD0, 0x58, 0xD9, - 0xFD, 0x1F, 0x01, 0x60, 0xBE, 0x61, 0xE4, 0xF3, 0x00, 0x66, 0x00, 0xA8, 0x04, 0x65, 0x01, 0x03, - 0xA1, 0xDB, 0x1F, 0x60, 0x08, 0x63, 0x55, 0xD3, 0xFF, 0xFF, 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, - 0xFF, 0xFF, 0x21, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xCA, 0x60, 0xC7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, 0x06, 0x64, 0xA2, 0xDB, 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCA, 0x60, 0xEC, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x10, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xBA, 0xFE, 0x27, 0x60, 0xB6, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x03, 0xA8, - 0x02, 0xA8, 0x04, 0x03, 0x0F, 0x02, 0xCE, 0x60, 0xB3, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0xEF, 0x78, - 0xFF, 0xFF, 0x1F, 0x60, 0x80, 0x65, 0xA5, 0xD3, 0xFF, 0xFF, 0xF3, 0xB4, 0xA5, 0xDB, 0xCB, 0x60, - 0x22, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0x1A, 0x60, 0x40, 0x64, 0xA0, 0xDD, 0x1F, 0x60, 0x80, 0x64, - 0x00, 0x63, 0xA0, 0xDD, 0x11, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xBA, 0xFE, 0x02, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, 0xF2, 0xFB, - 0x44, 0x60, 0x44, 0x64, 0x81, 0xFB, 0x82, 0xFB, 0x83, 0xFB, 0xFF, 0xFF, 0x20, 0x40, 0x04, 0x2B, - 0x19, 0x00, 0x9B, 0xFE, 0x09, 0x04, 0xBB, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x12, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, - 0xEC, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCB, 0x60, 0x36, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x0D, 0x64, 0x53, 0xFB, - 0x29, 0x60, 0xA4, 0x64, 0x54, 0xFB, 0x13, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xCE, 0x61, - 0xA1, 0xD1, 0x02, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x64, 0x40, 0x01, 0x2A, 0x07, 0x00, - 0x00, 0x64, 0xA1, 0xDB, 0x02, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0xCA, 0x60, - 0x58, 0x4E, 0xA7, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0x80, 0x62, 0x1A, 0x60, 0x40, 0x65, 0xA2, 0xD3, - 0xA5, 0xD1, 0x60, 0x40, 0x0C, 0x22, 0x04, 0x00, 0x04, 0x61, 0xD1, 0x80, 0xFF, 0xFF, 0x2D, 0x05, - 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x4E, 0xE4, 0x60, 0x58, 0x4F, 0xFB, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x60, 0xEC, 0x62, 0x10, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCB, 0x60, - 0x95, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x60, 0x80, 0x64, 0xA0, 0xD3, - 0xFF, 0xFF, 0x60, 0x40, 0x0C, 0x26, 0x11, 0x00, 0xFD, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x38, 0x00, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x0F, 0x4E, 0xEC, 0x60, 0x58, 0x4F, 0xB9, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x60, - 0xEC, 0x62, 0x10, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCB, 0x60, 0xC2, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x14, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xFD, 0x60, 0xFF, 0x65, 0x20, 0x44, - 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x88, 0xF1, 0x19, 0x60, 0x86, 0x63, - 0xD3, 0x80, 0x20, 0x44, 0x05, 0x03, 0x10, 0xBC, 0x40, 0x40, 0xCD, 0x60, 0xE8, 0x78, 0xFF, 0xFF, - 0x89, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0x20, 0x44, 0x06, 0x02, 0xD4, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, - 0xFF, 0xFF, 0x1E, 0x02, 0x72, 0x00, 0x10, 0xBC, 0x40, 0x40, 0x64, 0x42, 0x5A, 0xD1, 0x06, 0x63, - 0xA4, 0xD1, 0xC3, 0x83, 0x7F, 0xF9, 0xBD, 0xD1, 0x81, 0xF9, 0xBD, 0xD1, 0xFF, 0xFF, 0x82, 0xF9, - 0xBD, 0xD1, 0x83, 0xF9, 0x04, 0xA3, 0xBD, 0xD1, 0x2D, 0x60, 0x7A, 0x64, 0x64, 0x41, 0xDD, 0x81, - 0xFE, 0xB1, 0xA0, 0xD9, 0x04, 0x03, 0xBD, 0xD1, 0xC9, 0x81, 0x58, 0xD9, 0xFC, 0x02, 0x1E, 0x00, - 0xE5, 0xF3, 0x7F, 0xFB, 0x29, 0x60, 0xA4, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x2D, 0x60, - 0x7A, 0x63, 0x02, 0x02, 0x27, 0x60, 0xB8, 0x61, 0xA1, 0xD3, 0xBD, 0xDB, 0xDC, 0x84, 0xFE, 0xB4, - 0x59, 0xD1, 0xC8, 0x84, 0xBD, 0xD9, 0xFC, 0x02, 0xED, 0xF3, 0x72, 0x45, 0xEC, 0xF3, 0x94, 0x83, - 0x83, 0xFD, 0x94, 0x83, 0x82, 0xFD, 0x65, 0x5F, 0x02, 0x64, 0x81, 0xFB, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xCC, 0x60, 0x26, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x18, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x7F, 0xF1, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCC, 0x60, - 0x4D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xCC, 0x60, 0xAD, 0x78, 0xFF, 0xFF, 0x16, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0xFF, 0x60, 0xEF, 0x65, 0x20, 0x44, 0x24, 0x80, 0xCA, 0x60, 0x58, 0x4E, 0xA7, 0x78, 0xFF, 0xFF, - 0x17, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x02, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, - 0xF2, 0xFB, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDA, 0xFE, 0xC1, 0xFE, 0x1A, 0x60, 0x40, 0x62, 0xA2, 0xD1, 0x1A, 0x60, 0x6A, 0x62, - 0xA2, 0xD9, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x06, 0x64, 0xA2, 0xDB, 0xCB, 0x60, - 0x22, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1A, 0x60, 0x40, 0x61, 0x75, 0x60, 0x30, 0x65, 0xA1, 0xD3, - 0xFF, 0xFF, 0xFF, 0xA0, 0xE0, 0x84, 0x02, 0x02, 0x03, 0x60, 0xE8, 0x64, 0xD4, 0x80, 0xFF, 0xFF, - 0x01, 0x04, 0x65, 0x44, 0xA1, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x79, 0xF3, 0x7A, 0xFB, 0x1F, 0x60, - 0x52, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xFF, 0x60, 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, 0xBF, 0xF1, - 0x1A, 0x60, 0x6A, 0x62, 0xA2, 0xD9, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, - 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0x10, 0x26, 0x67, 0x00, 0x00, 0x64, 0xB5, 0xFB, 0xB6, 0xFB, 0xB7, 0xFB, 0x00, 0x75, 0x00, 0x72, - 0xBD, 0xF1, 0x80, 0xF9, 0x64, 0x44, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0xE6, 0xF1, - 0x86, 0xF9, 0x28, 0x60, 0xD2, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x08, 0x02, - 0x01, 0x60, 0xB0, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x01, 0x03, 0x02, 0x64, - 0x60, 0x41, 0x2D, 0x60, 0x28, 0x63, 0xBD, 0xD3, 0xA3, 0xD3, 0xFF, 0xB5, 0x65, 0x5C, 0xCD, 0x81, - 0x80, 0xBF, 0x0E, 0x03, 0x80, 0xBF, 0xBD, 0xDB, 0x65, 0x44, 0xC8, 0x84, 0xFF, 0xFF, 0x0B, 0x03, - 0x60, 0x45, 0xCD, 0x81, 0xA3, 0xD3, 0x07, 0x03, 0xCD, 0x81, 0x80, 0xBF, 0x01, 0x03, 0x80, 0xBC, - 0x60, 0x47, 0xBD, 0xDB, 0x00, 0x65, 0x64, 0x41, 0x2D, 0x60, 0x2A, 0x63, 0xBD, 0xD3, 0xFF, 0xFF, - 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, 0x60, 0x45, 0x60, 0x47, 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, - 0x60, 0x45, 0xC9, 0x81, 0xFF, 0xFF, 0xF2, 0x02, 0x65, 0x44, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, - 0x0A, 0x64, 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x14, 0x64, 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, - 0x32, 0x64, 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x37, 0x64, 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, - 0x50, 0x64, 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x6E, 0x64, 0x01, 0x00, 0x14, 0x64, 0x7C, 0xFB, - 0x28, 0x00, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, - 0x84, 0x64, 0xA2, 0xDB, 0xCD, 0x60, 0x40, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x80, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0D, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0x7F, 0x61, 0xA1, 0x84, - 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x04, 0x00, 0xBB, 0xFE, 0xCB, 0x60, 0x22, 0x78, - 0xFF, 0xFF, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD1, 0x00, 0x65, 0x64, 0x40, 0x01, 0x36, 0x22, 0x65, - 0x64, 0x40, 0x07, 0x36, 0x01, 0x65, 0xA9, 0xF3, 0x66, 0x5C, 0x60, 0x46, 0x1F, 0x63, 0xE3, 0x83, - 0xB6, 0xF8, 0x02, 0xA6, 0x66, 0x44, 0xFC, 0x1F, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x60, 0x40, 0x07, 0x3A, 0x04, 0x00, 0xA9, 0xF3, 0x04, 0x65, 0x60, 0x46, 0xB6, 0xF8, 0x64, 0x46, - 0xA9, 0xF3, 0x32, 0x41, 0x60, 0x45, 0x08, 0xB1, 0x66, 0x41, 0x17, 0x03, 0x65, 0x46, 0x29, 0x60, - 0xA2, 0x62, 0xA2, 0xD3, 0x06, 0xF0, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, - 0xB0, 0x84, 0x06, 0xFA, 0x66, 0x43, 0x02, 0xA3, 0x63, 0x46, 0x06, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, - 0x06, 0xFA, 0x61, 0x46, 0x32, 0x44, 0x10, 0xBC, 0x40, 0x52, 0x1F, 0x60, 0x52, 0x62, 0x01, 0x64, - 0xA2, 0xDB, 0x0F, 0x4E, 0xE7, 0x60, 0x58, 0x4F, 0x51, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x0F, 0x60, - 0xEA, 0x62, 0xA2, 0xD1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, - 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0xCB, 0x60, 0x11, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0xBB, 0xFE, 0x20, 0x44, 0x04, 0x27, 0x12, 0x00, 0x10, 0x26, 0x02, 0x00, 0xDB, 0xFE, 0x16, 0x00, - 0x0F, 0x60, 0xCE, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, 0x01, 0x64, - 0xA1, 0xDB, 0x01, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, - 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x64, 0x8C, 0xFB, - 0xFF, 0x60, 0xEF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x03, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, - 0xFE, 0xB4, 0xF2, 0xFB, 0xC1, 0xFE, 0x1E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, - 0x15, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xBB, 0xFE, 0xCF, 0x60, 0xD6, 0x78, 0xFF, 0xFF, 0x28, 0x60, - 0x2C, 0x62, 0xA2, 0xD1, 0x00, 0x65, 0x64, 0x40, 0x01, 0x36, 0x22, 0x65, 0xA9, 0xF3, 0x66, 0x5C, - 0x60, 0x46, 0x1F, 0x63, 0xE3, 0x83, 0xB6, 0xF8, 0x02, 0xA6, 0x66, 0x44, 0xFC, 0x1F, 0x64, 0x46, - 0x79, 0xF1, 0xA9, 0xF3, 0x7A, 0xF9, 0x02, 0xA4, 0xD8, 0xF3, 0x60, 0x45, 0x66, 0x41, 0x65, 0x46, - 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, - 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, - 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, 0x79, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, - 0xAE, 0x65, 0xD8, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, - 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, - 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, - 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, - 0x66, 0x43, 0x0C, 0xF4, 0xA9, 0xF1, 0x02, 0x64, 0xC0, 0x85, 0x0C, 0x61, 0x32, 0x40, 0x08, 0x2A, - 0x15, 0x00, 0x29, 0x60, 0xA2, 0x62, 0xA2, 0xD3, 0x66, 0x41, 0x65, 0x46, 0x06, 0xF0, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, 0xB0, 0x83, 0x06, 0xFC, 0x66, 0x42, 0xFE, 0xA2, - 0x62, 0x46, 0x06, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, 0x06, 0xFA, 0x61, 0x46, 0x1D, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x0B, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0x01, 0x65, - 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0xE5, 0xF1, 0x7F, 0xF9, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xCE, 0x60, 0x76, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7F, 0xF1, - 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, - 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCE, 0x60, 0x9A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0xBE, 0xFE, - 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x01, 0x64, 0x8C, 0xFB, 0xFF, 0x60, 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x1E, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x06, 0x64, 0xDC, 0xFB, - 0xF2, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0xE5, 0xF1, 0x7F, 0xF9, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x64, 0x8C, 0xFB, 0xFF, 0x60, 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0xA9, 0xF1, 0x66, 0x45, 0x64, 0x46, 0x66, 0x43, 0x02, 0xA3, 0x63, 0x46, 0x02, 0x64, 0x06, 0xFA, - 0x04, 0x63, 0x04, 0x61, 0x01, 0x60, 0xCE, 0x64, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, 0x65, 0x46, - 0x01, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x1E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x00, 0x64, 0x68, 0xFB, 0x69, 0xFB, - 0xA9, 0xF1, 0x0E, 0x64, 0x66, 0x41, 0x64, 0x42, 0x02, 0xA2, 0x62, 0x46, 0x06, 0xF0, 0xFF, 0x60, - 0xFC, 0x64, 0xA0, 0x84, 0x06, 0xFA, 0x61, 0x46, 0xDC, 0xF3, 0xFF, 0xFF, 0x04, 0xA8, 0x0F, 0x60, - 0xCE, 0x64, 0x07, 0x03, 0xA0, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0x00, 0x63, - 0xA0, 0xDD, 0x01, 0x64, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, - 0xCA, 0x60, 0xFB, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x28, 0x60, 0x3A, 0x64, 0xA0, 0xD3, 0x00, 0xF4, 0x60, 0x40, 0x01, 0x3A, 0x42, 0x00, 0x18, 0x65, - 0x22, 0x61, 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, - 0x04, 0x65, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, - 0xCD, 0x81, 0xBD, 0xDB, 0xF0, 0x02, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x01, 0xA8, - 0xE0, 0x85, 0x27, 0x02, 0xC7, 0x83, 0xBD, 0xD3, 0xBD, 0xD3, 0x81, 0xA8, 0x0D, 0xA8, 0x21, 0x02, - 0x20, 0x02, 0xBD, 0xD3, 0xBD, 0xD3, 0x00, 0xA8, 0x60, 0xA8, 0x1B, 0x02, 0xBD, 0xD3, 0x19, 0x02, - 0x1D, 0xA8, 0xA3, 0xD1, 0x16, 0x02, 0xE3, 0xF9, 0x01, 0x60, 0xB8, 0x64, 0x63, 0x41, 0x0A, 0x63, - 0x59, 0xD1, 0x58, 0xD9, 0xFD, 0x1F, 0x59, 0xD1, 0x59, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x64, 0x5E, - 0xD6, 0xFB, 0x59, 0xD1, 0x28, 0x60, 0x36, 0x64, 0xA0, 0xD9, 0x28, 0x60, 0xD6, 0x64, 0xA0, 0xD9, - 0x23, 0x00, 0x28, 0x60, 0x40, 0x64, 0xA0, 0xD3, 0xE3, 0xFB, 0x60, 0x40, 0x05, 0x3A, 0x03, 0x00, - 0x68, 0x60, 0xBA, 0x61, 0x11, 0x00, 0x04, 0x3A, 0x03, 0x00, 0x68, 0x60, 0xAE, 0x61, 0x0C, 0x00, - 0x03, 0x3A, 0x03, 0x00, 0x68, 0x60, 0xA2, 0x61, 0x07, 0x00, 0x02, 0x3A, 0x03, 0x00, 0x68, 0x60, - 0x96, 0x61, 0x02, 0x00, 0x68, 0x60, 0x8A, 0x61, 0x3C, 0x60, 0x00, 0x66, 0x01, 0x60, 0xB8, 0x64, - 0x0A, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, 0x01, 0x60, 0xBE, 0x61, 0xE4, 0xF3, 0x00, 0x66, - 0x00, 0xA8, 0x04, 0x65, 0x01, 0x03, 0xA1, 0xDB, 0x1F, 0x60, 0x08, 0x63, 0x55, 0xD3, 0xFF, 0xFF, - 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x21, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, - 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, - 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xCF, 0x60, 0xA2, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, 0x06, 0x64, 0xA2, 0xDB, - 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xCF, 0x60, 0xC7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x40, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0xBC, 0xF1, 0x1A, 0x60, 0x6A, 0x62, 0xA2, 0xD9, 0x60, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, - 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0xBC, 0xF1, 0x19, 0xF8, 0xF8, 0x60, 0x80, 0x64, - 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0xA9, 0xF1, 0x07, 0xF8, 0x00, 0x60, 0xD0, 0x63, 0x19, 0x60, - 0x84, 0x64, 0xA3, 0xDB, 0x44, 0x60, 0x44, 0x64, 0x81, 0xFB, 0x82, 0xFB, 0x83, 0xFB, 0x31, 0x44, - 0xF9, 0xB4, 0x40, 0x51, 0x00, 0x60, 0xD0, 0x63, 0x01, 0x60, 0x10, 0x65, 0xA3, 0xD3, 0xA5, 0xD1, - 0x04, 0xA4, 0xA3, 0xDB, 0xD0, 0x80, 0xA0, 0xD1, 0x0A, 0x06, 0x41, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xCC, 0x60, 0x5D, 0x78, 0xFF, 0xFF, 0x44, 0x47, - 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xFF, 0xA4, 0xFF, 0xFF, 0x08, 0x07, 0x0E, 0x61, - 0x41, 0xD3, 0x32, 0x40, 0x08, 0x26, 0x03, 0x00, 0x10, 0xB0, 0xFF, 0xFF, 0xD3, 0x02, 0x42, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, - 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD0, 0x60, 0x22, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD1, 0x7F, 0xF9, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, - 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xD0, 0x60, 0x47, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1A, 0x60, 0x6A, 0x62, 0x07, 0x60, 0xD0, 0x64, - 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD3, 0x81, 0xFB, 0xBD, 0xD3, 0x82, 0xFB, - 0xA3, 0xD3, 0x83, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, - 0x01, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0xD0, 0x60, 0x79, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xBC, 0xF1, 0x1A, 0x60, 0x6A, 0x62, 0xA2, 0xD9, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, - 0xFE, 0x60, 0xFF, 0x61, 0xA1, 0x84, 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x0F, 0x60, - 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x08, 0x65, 0x20, 0x44, 0x34, 0x80, - 0x5F, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0xBC, 0xF1, - 0x19, 0xF8, 0x80, 0x7E, 0xF8, 0x7F, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0xA9, 0xF1, 0x07, 0xF8, - 0x2B, 0xFA, 0xB0, 0x64, 0x2A, 0xFA, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, 0x32, 0xF8, - 0xBD, 0xD1, 0x2D, 0xF8, 0x33, 0xF8, 0xA3, 0xD1, 0x2E, 0xF8, 0x34, 0xF8, 0x06, 0x63, 0x3F, 0xFC, - 0x1F, 0x60, 0x54, 0x61, 0xDC, 0xF3, 0xA1, 0xD3, 0x03, 0xA8, 0xAC, 0x83, 0x0F, 0x02, 0x0E, 0x03, - 0x1F, 0x60, 0x56, 0x61, 0xA1, 0xD1, 0x66, 0x45, 0x00, 0xF4, 0x09, 0xFC, 0x01, 0x64, 0x0A, 0xFA, - 0x0B, 0xF8, 0x1F, 0x60, 0x54, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x28, 0x00, 0x28, 0x60, 0x2E, 0x64, - 0xA0, 0xD3, 0x66, 0x45, 0x00, 0xF4, 0x60, 0x40, 0x01, 0x36, 0x16, 0x00, 0x02, 0x36, 0xC7, 0x00, - 0x03, 0x36, 0x07, 0x00, 0x04, 0x36, 0x10, 0x00, 0x05, 0x36, 0xC1, 0x00, 0x06, 0x36, 0x01, 0x00, - 0x0B, 0x00, 0x80, 0x64, 0x09, 0xFA, 0x01, 0x63, 0x0A, 0xFC, 0x00, 0x64, 0x0B, 0xFA, 0x2D, 0x60, - 0x54, 0x62, 0x03, 0x64, 0xA2, 0xDB, 0x0A, 0x00, 0x00, 0x64, 0x09, 0xFA, 0x01, 0x63, 0x0A, 0xFC, - 0x00, 0x64, 0x0B, 0xFA, 0x2D, 0x60, 0x54, 0x62, 0x01, 0x64, 0xA2, 0xDB, 0x24, 0x60, 0x74, 0x62, - 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x65, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x00, 0x66, 0xDC, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, 0x02, 0x02, 0x2F, 0x58, - 0xFF, 0xFF, 0x01, 0x64, 0x69, 0xFB, 0x43, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x1A, 0x60, 0x44, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x64, 0xA4, 0xA2, 0xDB, 0x1A, 0x60, 0x44, 0x62, 0xA2, 0xD1, 0x1A, 0x60, - 0x6A, 0x62, 0xA2, 0xD9, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x0C, 0x64, 0xA2, 0xDB, - 0xD1, 0x60, 0x2E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x56, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x26, 0x46, - 0x00, 0xF4, 0x09, 0xF2, 0x0A, 0xF2, 0x00, 0xA8, 0x0B, 0xF2, 0x02, 0xA8, 0x16, 0x02, 0x00, 0xA8, - 0x1A, 0x02, 0x19, 0x02, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xD3, 0x60, - 0x48, 0x78, 0xFF, 0xFF, 0xD9, 0x60, 0x68, 0x78, 0xFF, 0xFF, 0x09, 0xF2, 0x0A, 0xF2, 0x80, 0xA8, - 0x0B, 0xF2, 0x02, 0xA8, 0xE4, 0x03, 0x44, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0B, 0xF2, 0x26, 0x46, - 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, - 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x4C, 0x78, - 0xFF, 0xFF, 0xDC, 0x60, 0xAA, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x20, 0x40, 0x08, 0x2A, - 0x03, 0x00, 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x01, 0x63, - 0x09, 0xFC, 0x32, 0x40, 0x08, 0x26, 0x1A, 0x00, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x60, 0x40, 0x0B, 0x36, 0x03, 0x00, 0xD0, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0xA2, 0xDB, - 0x2D, 0x60, 0x56, 0x62, 0x0B, 0x64, 0xA2, 0xDB, 0x2D, 0x60, 0x54, 0x62, 0x02, 0x64, 0xA2, 0xDB, - 0xA9, 0xF1, 0x66, 0x41, 0x64, 0x46, 0x22, 0x64, 0x36, 0xFA, 0x61, 0x46, 0x01, 0x64, 0x0A, 0xFA, - 0x00, 0x64, 0x0B, 0xFA, 0x01, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x65, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, 0xDC, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, - 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, - 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x0C, 0x64, - 0xA2, 0xDB, 0xD1, 0x60, 0xEF, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x3B, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x69, 0xFB, 0x26, 0x46, 0x00, 0xF4, 0x09, 0xF2, 0x0A, 0xF2, - 0x01, 0xA8, 0x0B, 0xF2, 0x02, 0xA8, 0x04, 0x02, 0x00, 0xA8, 0x02, 0x02, 0x01, 0x02, 0x31, 0x00, - 0xD2, 0x60, 0x58, 0x4D, 0xF6, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, - 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, - 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0xDC, 0x60, - 0xAA, 0x78, 0xFF, 0xFF, 0xD2, 0x60, 0x58, 0x4D, 0xF6, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x69, 0xFB, - 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0xDD, 0x78, - 0xFF, 0xFF, 0x26, 0x46, 0x40, 0x60, 0x00, 0x65, 0x2A, 0xF2, 0x2F, 0xF0, 0xB4, 0x84, 0x2A, 0xFA, - 0x2C, 0xF8, 0x32, 0xF8, 0x30, 0xF2, 0x2D, 0xFA, 0x33, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x34, 0xFA, - 0xEB, 0xF3, 0x2F, 0xFA, 0xEC, 0xF3, 0x30, 0xFA, 0xED, 0xF3, 0x31, 0xFA, 0xCC, 0xF1, 0x19, 0xF8, - 0x1C, 0xF0, 0x13, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x00, 0xF4, 0x03, 0x64, 0x0A, 0xFA, 0x00, 0x64, - 0x0B, 0xFA, 0x01, 0x63, 0x69, 0xFD, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x24, 0x60, - 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, 0xDC, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, 0x02, 0x02, - 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x0C, 0x64, 0xA2, 0xDB, - 0xD2, 0x60, 0x8E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x51, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x00, 0x64, 0x69, 0xFB, 0x26, 0x46, 0x00, 0xF4, 0x09, 0xF2, 0x0A, 0xF2, 0x01, 0xA8, - 0x0B, 0xF2, 0x04, 0xA8, 0x1A, 0x02, 0x00, 0xA8, 0x18, 0x02, 0x17, 0x02, 0xD2, 0x60, 0x58, 0x4D, - 0xF6, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xD3, 0x60, - 0x48, 0x78, 0xFF, 0xFF, 0xD9, 0x60, 0x68, 0x78, 0xFF, 0xFF, 0xD2, 0x60, 0x58, 0x4D, 0xF6, 0x78, - 0xFF, 0xFF, 0x0B, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, - 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, - 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, - 0xE9, 0x60, 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0xDC, 0x60, 0xAA, 0x78, 0xFF, 0xFF, 0xD2, 0x60, - 0x58, 0x4D, 0xF6, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x69, 0xFB, 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, - 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x2D, 0x60, 0x56, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x0B, 0x3A, 0x07, 0x00, 0x28, 0x60, 0x2C, 0x62, 0x0B, 0x64, - 0xA2, 0xDB, 0x2D, 0x60, 0x56, 0x62, 0xA2, 0xDF, 0x2D, 0x58, 0xFF, 0xFF, 0x28, 0x60, 0x2C, 0x62, - 0xA2, 0xD3, 0x61, 0x43, 0xA5, 0xD2, 0x60, 0x40, 0x0B, 0x2A, 0x30, 0x00, 0x85, 0x3A, 0x30, 0x00, - 0x60, 0x41, 0x65, 0x44, 0x0A, 0xA4, 0xA0, 0xD0, 0x2D, 0x60, 0x52, 0x62, 0x64, 0x40, 0x18, 0x26, - 0x06, 0x00, 0xA2, 0xDF, 0x28, 0x60, 0x2C, 0x62, 0x01, 0x64, 0xA2, 0xDB, 0x02, 0x00, 0x01, 0x64, - 0xA2, 0xDB, 0x61, 0x44, 0x60, 0x47, 0xFF, 0xB4, 0x02, 0xA4, 0x2E, 0x60, 0x62, 0x61, 0xA1, 0xD1, - 0xDF, 0x83, 0xC0, 0x84, 0xA1, 0xDB, 0xD0, 0x81, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, - 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, - 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x2D, 0x58, 0xFF, 0xFF, - 0x2D, 0x60, 0x52, 0x62, 0xA2, 0xDF, 0x28, 0x60, 0x2C, 0x62, 0x01, 0x64, 0xA2, 0xDB, 0xF6, 0x01, - 0x45, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2E, 0x60, 0xEA, 0x7C, 0x2E, 0x60, 0xDE, 0x63, 0xA3, 0xD9, - 0x64, 0x41, 0x29, 0x60, 0xA4, 0x63, 0xBD, 0xD3, 0x00, 0x7C, 0x03, 0x1B, 0x27, 0x43, 0x10, 0xA3, - 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x64, 0x5F, 0xA1, 0xDB, 0x65, 0x44, 0xBD, 0xD1, 0xC8, 0x84, - 0x59, 0xD8, 0xFC, 0x05, 0x27, 0x41, 0x10, 0xA1, 0xA1, 0xD1, 0xFF, 0xFF, 0xC1, 0x81, 0x01, 0x26, - 0xDD, 0x81, 0x41, 0x4C, 0x59, 0xD1, 0x7C, 0x44, 0xB0, 0x84, 0x59, 0xD1, 0x59, 0xD1, 0xB0, 0x84, - 0xB0, 0x84, 0xFF, 0xFF, 0x02, 0x02, 0x67, 0x44, 0x5D, 0x00, 0x2D, 0x60, 0xE6, 0x63, 0xDD, 0x60, - 0x18, 0x64, 0xBD, 0xDA, 0x50, 0x60, 0x00, 0x64, 0xBD, 0xDA, 0x01, 0x60, 0xF2, 0x64, 0xBD, 0xDA, - 0x00, 0x60, 0x01, 0x64, 0xBD, 0xDA, 0x2C, 0x41, 0x59, 0xD3, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, - 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xF2, 0x64, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, - 0xF2, 0x64, 0x09, 0x00, 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, 0xF2, 0x64, 0x04, 0x00, 0x20, 0x2A, - 0x04, 0x00, 0x05, 0x60, 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x01, 0x64, 0xBD, 0xDB, 0x59, 0xD3, - 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xF2, 0x64, 0x0E, 0x00, - 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, 0xF2, 0x64, 0x09, 0x00, 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, - 0xF2, 0x64, 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, - 0x01, 0x64, 0xBD, 0xDB, 0x59, 0xD3, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, - 0x00, 0x60, 0xF2, 0x64, 0x09, 0x00, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xF2, 0x64, 0x04, 0x00, - 0x04, 0x2A, 0x02, 0x00, 0x02, 0x60, 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x59, 0xD3, 0xBD, 0xDA, - 0x2D, 0x60, 0xE6, 0x64, 0x2E, 0x60, 0xE4, 0x62, 0xA2, 0xDB, 0x60, 0xF5, 0x00, 0x64, 0x2B, 0xFA, - 0x00, 0x64, 0x2A, 0xFA, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, 0x32, 0xF8, 0xBD, 0xD1, - 0x2D, 0xF8, 0x33, 0xF8, 0xA3, 0xD1, 0x2E, 0xF8, 0x34, 0xF8, 0x00, 0xF4, 0x01, 0x63, 0x32, 0x40, - 0x08, 0x26, 0x10, 0xBB, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0xFE, 0x26, - 0x10, 0xBB, 0x09, 0xFC, 0x27, 0x42, 0x0C, 0xA2, 0x28, 0x60, 0x02, 0x63, 0xA2, 0xD3, 0xA3, 0xD3, - 0x00, 0xBD, 0x01, 0x63, 0xAC, 0x81, 0x09, 0x03, 0x08, 0x03, 0xB0, 0x60, 0x58, 0x4D, 0xB6, 0x78, - 0xFF, 0xFF, 0x00, 0xB8, 0x01, 0x63, 0x01, 0x03, 0x60, 0x43, 0x1A, 0x60, 0x3E, 0x64, 0xA0, 0xDD, - 0x12, 0x61, 0x59, 0xDC, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0x60, 0xFF, 0x7C, 0x60, 0x40, - 0x0B, 0x2A, 0x02, 0x00, 0x2D, 0x60, 0x32, 0x7C, 0x2E, 0x60, 0xE6, 0x62, 0xA2, 0xD9, 0x2E, 0x60, - 0xDE, 0x64, 0x40, 0x48, 0xD9, 0x81, 0xFF, 0x60, 0xF2, 0x64, 0xE8, 0x60, 0x58, 0x4D, 0xE8, 0x78, - 0xFF, 0xFF, 0x60, 0xF5, 0x3F, 0xFC, 0xDB, 0x83, 0x2E, 0x60, 0x08, 0x62, 0xA2, 0xDD, 0x00, 0x7C, - 0x5A, 0xD9, 0x63, 0x41, 0x2E, 0x60, 0x0C, 0x63, 0x12, 0x65, 0x00, 0xF4, 0xCD, 0x84, 0x4C, 0x91, - 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, - 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, - 0x60, 0xF5, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xC1, 0xFE, 0x06, 0x64, - 0x69, 0xFB, 0x46, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, - 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, - 0x1C, 0x64, 0xA2, 0xDB, 0xD4, 0x60, 0x68, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x3A, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x26, 0x46, - 0x00, 0xF4, 0x0A, 0xF2, 0x00, 0x63, 0x00, 0xA8, 0x69, 0xFD, 0x5A, 0x03, 0x0A, 0xF2, 0x26, 0x46, - 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, - 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x05, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x4C, 0x78, - 0xFF, 0xFF, 0xDC, 0x60, 0xAA, 0x78, 0xFF, 0xFF, 0x47, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xCF, 0x60, - 0xF2, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x21, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x49, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xD0, 0x60, 0x94, 0x78, 0xFF, 0xFF, - 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x4A, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, - 0x48, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x09, 0xF0, 0x2E, 0x60, 0x64, 0x63, 0x10, 0x64, 0xBD, 0xDB, - 0xBD, 0xD9, 0x0A, 0xF0, 0xBD, 0xD9, 0x0B, 0xF0, 0xBD, 0xD9, 0x0C, 0xF2, 0xBD, 0xDB, 0x60, 0x47, - 0xFF, 0xB4, 0x0A, 0xA5, 0x2E, 0x60, 0x62, 0x61, 0x65, 0x5C, 0xA1, 0xD9, 0x60, 0x41, 0x1A, 0x65, - 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, - 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, - 0x20, 0xFE, 0xDF, 0x83, 0xD3, 0x60, 0x58, 0x4D, 0x06, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, 0xFF, 0xFF, - 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x61, 0x44, 0x96, 0xFB, - 0x27, 0x45, 0x02, 0x62, 0x46, 0xD3, 0x5A, 0xD1, 0x60, 0x47, 0x56, 0xFB, 0x64, 0x47, 0x55, 0xFB, - 0x00, 0x64, 0x5C, 0xFB, 0x0C, 0x62, 0x46, 0xD3, 0x80, 0xFB, 0x0B, 0xF0, 0x0F, 0x60, 0xFF, 0x64, - 0xA0, 0x84, 0x85, 0xFB, 0x26, 0x46, 0x32, 0xF0, 0x81, 0xF9, 0x33, 0xF0, 0x0E, 0x63, 0xC7, 0x81, - 0x82, 0xF9, 0x34, 0xF0, 0x83, 0xF9, 0x59, 0xD1, 0xFF, 0xFF, 0x64, 0x44, 0x01, 0x2A, 0xC8, 0x84, - 0x60, 0x43, 0x2D, 0x60, 0x78, 0x64, 0x58, 0xD9, 0x59, 0xD1, 0x58, 0xD9, 0xFD, 0x1F, 0x28, 0x60, - 0x2C, 0x62, 0xA2, 0xD1, 0x59, 0xD3, 0x64, 0x40, 0x01, 0x36, 0x22, 0x64, 0x64, 0x40, 0x00, 0x36, - 0x50, 0x94, 0xA9, 0xF1, 0xFF, 0xFF, 0x44, 0x47, 0xA7, 0x46, 0x36, 0xFA, 0xB7, 0xFC, 0xA7, 0x46, - 0x1A, 0x60, 0x3E, 0x62, 0xA2, 0xD3, 0x87, 0xFB, 0x31, 0xF2, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0xA9, 0xF1, 0xFF, 0xFF, 0xD3, 0x80, 0x31, 0xF2, 0x27, 0x02, 0x66, 0x41, - 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xA9, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, - 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, - 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, - 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, - 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x43, 0x47, 0x00, 0xF4, - 0x18, 0x65, 0x0C, 0x61, 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x64, 0x44, 0x00, 0x7F, - 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF4, 0x02, - 0x02, 0x60, 0x02, 0x61, 0xA1, 0xD3, 0x00, 0x65, 0x60, 0x43, 0x59, 0xD3, 0xFF, 0xFF, 0x7F, 0xB4, - 0x02, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x11, 0x00, - 0x0A, 0x3A, 0x02, 0x00, 0x04, 0x64, 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x09, 0x00, - 0x10, 0x3A, 0x02, 0x00, 0x10, 0x64, 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x01, 0x00, - 0x00, 0x64, 0xCF, 0x83, 0xB4, 0x85, 0xE1, 0x02, 0x65, 0x44, 0x7A, 0xFB, 0x02, 0x60, 0x02, 0x61, - 0xA1, 0xD3, 0x00, 0x65, 0x60, 0x43, 0x59, 0xD3, 0xFF, 0xFF, 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, - 0x60, 0x45, 0xCF, 0x83, 0x65, 0x44, 0xF7, 0x02, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x0A, 0x64, - 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x14, 0x64, 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, 0x32, 0x64, - 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x37, 0x64, 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x50, 0x64, - 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x6E, 0x64, 0x01, 0x00, 0x14, 0x64, 0x7C, 0xFB, 0x27, 0x44, - 0xD8, 0xF3, 0x60, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, 0x06, 0x00, - 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, 0x01, 0x00, - 0x01, 0x64, 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, 0x02, 0x02, - 0x79, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, 0xD8, 0xF3, 0xFF, 0xFF, 0xE0, 0x84, - 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, - 0xFC, 0x03, 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, 0x60, 0x47, - 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x70, 0xF0, - 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, 0xE1, 0x81, - 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, 0x0C, 0xF4, 0x2D, 0x60, 0xD2, 0x62, - 0xA2, 0xD3, 0x2D, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x60, 0x47, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD1, - 0xB0, 0x84, 0x64, 0x40, 0x01, 0x36, 0x22, 0x64, 0x64, 0x40, 0x00, 0x36, 0x50, 0x94, 0xA7, 0x46, - 0x36, 0xFA, 0xB7, 0xFC, 0xA7, 0x46, 0x80, 0x60, 0x03, 0x65, 0x32, 0x40, 0x08, 0x2A, 0x03, 0x65, - 0xA7, 0x46, 0x06, 0xF0, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xB4, 0x84, 0x06, 0xFA, 0xB7, 0xFC, - 0xA7, 0x46, 0x26, 0x46, 0x2F, 0xF0, 0x30, 0xF0, 0x64, 0x43, 0x31, 0xF2, 0x27, 0x46, 0x03, 0xFC, - 0x04, 0xF8, 0x05, 0xFA, 0x26, 0x46, 0xCF, 0x60, 0x58, 0x4E, 0x20, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0x01, 0x64, 0x8C, 0xFB, 0x28, 0x60, 0x38, 0x62, 0xA2, 0xD3, 0x20, 0x41, 0x00, 0xBC, - 0x20, 0xB9, 0x01, 0x03, 0x41, 0x40, 0x1F, 0x60, 0x52, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x04, 0x64, - 0xC1, 0xFE, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF2, 0xFB, 0xF7, 0x60, 0xFF, 0x65, - 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x0F, 0x60, - 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0C, 0x64, - 0x69, 0xFB, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x31, 0x64, 0xA2, 0xDB, 0xD6, 0x60, 0xC4, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x0E, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x01, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x10, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x31, 0x60, 0x2C, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x03, 0x1B, - 0xDC, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0xDC, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0x67, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xF8, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0xA9, 0xF3, 0xFF, 0xFF, 0x02, 0xA4, 0x60, 0x43, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, - 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x1C, 0x60, 0xBA, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0xA9, 0xF3, 0x63, 0x45, - 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, - 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x4B, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x2E, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0x10, 0xB0, 0xFF, 0xFF, 0x13, 0x03, 0x0F, 0x60, 0xEC, 0x62, 0x04, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xD7, 0x60, 0x2F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, - 0x01, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x6A, 0xF3, - 0xFF, 0xFF, 0x01, 0xB0, 0xFF, 0xFF, 0x13, 0x03, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xEC, 0x62, 0x02, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xD7, 0x60, 0x47, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x69, 0xFB, 0xD7, 0x60, 0x58, 0x4E, 0x77, 0x78, - 0xFF, 0xFF, 0x02, 0x64, 0x8C, 0xFB, 0x02, 0x64, 0xC1, 0xFE, 0xDC, 0xFB, 0xF2, 0xF3, 0xFF, 0xFF, - 0x01, 0xBC, 0xF2, 0xFB, 0x02, 0x65, 0xE9, 0x60, 0x58, 0x4E, 0x7B, 0x78, 0xFF, 0xFF, 0x03, 0x60, - 0xE8, 0x63, 0x1A, 0x60, 0x40, 0x64, 0xA0, 0xDD, 0xCB, 0x60, 0x1A, 0x78, 0xFF, 0xFF, 0x00, 0x60, - 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xFF, 0xFF, 0x08, 0x24, 0x54, 0x01, 0xA0, 0x84, 0xA2, 0xDB, - 0x00, 0x63, 0x69, 0xFD, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x15, 0x00, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x64, 0x8C, 0xFB, - 0xFF, 0xFF, 0xC1, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x50, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x2E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x10, 0xB0, - 0xFF, 0xFF, 0x13, 0x03, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xEC, 0x62, 0x04, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD7, 0x60, - 0x8F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBC, 0xF1, 0x1A, 0x60, 0x6A, 0x62, - 0xA2, 0xD9, 0x7F, 0xF1, 0x7E, 0xF9, 0x02, 0x64, 0x8C, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x8C, 0xF3, - 0x00, 0x65, 0xD4, 0x80, 0xFF, 0xFF, 0x0F, 0x03, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x0F, 0x60, 0xEC, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD7, 0x60, 0xB3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x51, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x19, 0x60, 0x84, 0x64, 0x68, 0xFB, 0x1A, 0x60, 0x46, 0x63, 0x81, 0xF3, - 0xBD, 0xDB, 0x82, 0xF3, 0xBD, 0xDB, 0x83, 0xF3, 0xA3, 0xDB, 0x01, 0x60, 0x10, 0x65, 0x68, 0xF3, - 0xA5, 0xD1, 0x04, 0xA4, 0x68, 0xFB, 0xD0, 0x80, 0xA0, 0xD3, 0x20, 0x07, 0x40, 0x47, 0x60, 0x41, - 0x0E, 0x65, 0x45, 0xD3, 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x03, 0x1B, 0x10, 0xB0, - 0xFF, 0xFF, 0xEB, 0x02, 0x27, 0x44, 0x06, 0xA4, 0x60, 0x41, 0xA1, 0xD1, 0x81, 0xF3, 0x82, 0xF1, - 0xD0, 0x80, 0x59, 0xD3, 0x08, 0x02, 0xD0, 0x80, 0x83, 0xF3, 0x59, 0xD1, 0x04, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x01, 0x02, 0x03, 0x00, 0xD8, 0x60, 0x99, 0x78, 0xFF, 0xFF, 0x1A, 0x60, 0x46, 0x63, - 0xBD, 0xD3, 0x81, 0xFB, 0xBD, 0xD3, 0x82, 0xFB, 0xA3, 0xD3, 0x83, 0xFB, 0x53, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, - 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD8, 0x60, 0x06, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x7E, 0xF1, 0x7F, 0xF9, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xD8, 0x60, 0x36, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x63, 0x8C, 0xFD, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x54, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x31, 0x44, 0xF9, 0xB4, 0x40, 0x51, 0x01, 0x60, 0xBA, 0x61, 0x1F, 0x60, 0x08, 0x63, - 0xA1, 0xD3, 0xFF, 0xFF, 0x20, 0x7F, 0xBD, 0xDB, 0x59, 0xD3, 0xFF, 0xFF, 0x21, 0x7F, 0xBD, 0xDB, - 0x59, 0xD3, 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD8, 0x60, - 0x64, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, - 0x06, 0x64, 0xA2, 0xDB, 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, - 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD8, 0x60, 0x89, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, - 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xD6, 0x60, 0xB7, 0x78, - 0xFF, 0xFF, 0x27, 0x43, 0x2D, 0x60, 0x7A, 0x65, 0xA5, 0xD3, 0x65, 0x41, 0x10, 0xA3, 0x01, 0xA4, - 0xFE, 0xB4, 0xC4, 0x85, 0xFE, 0xA1, 0xBD, 0xD3, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0xD5, 0x80, - 0x02, 0x02, 0x04, 0x03, 0xF8, 0x01, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x55, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, - 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD8, 0x60, 0xB1, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD1, 0x7F, 0xF9, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xD8, 0x60, 0xD6, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x60, 0xBA, 0x61, 0x1F, 0x60, 0x08, 0x63, 0xA1, 0xD3, - 0xFF, 0xFF, 0x20, 0x7F, 0xBD, 0xDB, 0x21, 0x60, 0x32, 0x64, 0xBD, 0xDB, 0x04, 0xA1, 0xA1, 0xD3, - 0xFF, 0xFF, 0x22, 0x7F, 0xA3, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, - 0x0B, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xD8, 0x60, 0xF3, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0x9A, 0x62, 0x1F, 0x60, 0x06, 0x64, - 0xA2, 0xDB, 0x20, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x20, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xD9, 0x60, 0x18, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, - 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1A, 0x60, 0x6A, 0x62, 0x07, 0x60, - 0xD0, 0x64, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD3, 0x81, 0xFB, 0xBD, 0xD3, - 0x82, 0xFB, 0xA3, 0xD3, 0x83, 0xFB, 0x31, 0x44, 0xF9, 0xB4, 0x40, 0x51, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xEC, 0x62, 0x01, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0xD9, 0x60, - 0x4D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBC, 0xF1, 0x1A, 0x60, 0x6A, 0x62, - 0xA2, 0xD9, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0xFE, 0x60, 0xFF, 0x61, 0xA1, 0x84, 0x5A, 0xD1, - 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, - 0x27, 0x42, 0x0C, 0xA2, 0x28, 0x60, 0x02, 0x63, 0xA2, 0xD3, 0xA3, 0xD3, 0x00, 0xBD, 0x01, 0x63, - 0xAC, 0x81, 0x09, 0x03, 0x08, 0x03, 0xB0, 0x60, 0x58, 0x4D, 0xB6, 0x78, 0xFF, 0xFF, 0x00, 0xB8, - 0x01, 0x63, 0x01, 0x03, 0x60, 0x43, 0x1A, 0x60, 0x3E, 0x64, 0xA0, 0xDD, 0x60, 0xF5, 0x00, 0x64, - 0x2B, 0xFA, 0x20, 0x64, 0x2A, 0xFA, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, 0x32, 0xF8, - 0xBD, 0xD1, 0x2D, 0xF8, 0x33, 0xF8, 0xA3, 0xD1, 0x2E, 0xF8, 0x34, 0xF8, 0xEB, 0xF1, 0x2F, 0xF8, - 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0xBC, 0xF1, 0x19, 0xF8, 0xF8, 0x60, 0x80, 0x64, - 0x0E, 0xFA, 0x00, 0xF4, 0x01, 0x63, 0x32, 0x40, 0x08, 0x26, 0x10, 0xBB, 0x28, 0x60, 0x2C, 0x62, - 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0xFE, 0x26, 0x10, 0xBB, 0x09, 0xFC, 0x1A, 0x60, 0x3E, 0x64, - 0xA0, 0xD3, 0x12, 0x61, 0x59, 0xDA, 0x1A, 0x60, 0x46, 0x63, 0xBD, 0xD1, 0x59, 0xD8, 0xBD, 0xD1, - 0x59, 0xD8, 0xA3, 0xD1, 0x59, 0xD8, 0x2E, 0x60, 0xDE, 0x64, 0x40, 0x48, 0xD9, 0x81, 0xFF, 0x60, - 0xF2, 0x64, 0xE8, 0x60, 0x58, 0x4D, 0xE8, 0x78, 0xFF, 0xFF, 0x60, 0xF5, 0x3F, 0xFC, 0xDB, 0x83, - 0x2E, 0x60, 0x08, 0x62, 0xA2, 0xDD, 0x20, 0x7C, 0x5A, 0xD9, 0x63, 0x41, 0x2E, 0x60, 0x0C, 0x63, - 0x12, 0x65, 0x00, 0xF4, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, - 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, - 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x60, 0xF5, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0xC1, 0xFE, 0x14, 0x64, 0x69, 0xFB, 0x56, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x1A, 0x60, 0x44, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x64, 0xA4, 0xA2, 0xDB, 0x1A, 0x60, 0x44, 0x62, - 0xA2, 0xD1, 0x1A, 0x60, 0x6A, 0x62, 0xA2, 0xD9, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, - 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, - 0x1C, 0x64, 0xA2, 0xDB, 0xDA, 0x60, 0x10, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0E, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x57, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, - 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x17, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x58, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDB, 0x60, - 0xCB, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x3A, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x66, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x69, 0xFB, 0x0F, 0x60, 0xEA, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, 0xFF, 0xFF, 0x2C, 0x18, 0x59, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x0A, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, - 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, - 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x05, 0x65, 0xE9, 0x60, - 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0xDC, 0x60, 0xAA, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0xDD, 0x78, - 0xFF, 0xFF, 0x5A, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x78, 0x43, 0x02, 0x61, 0x24, 0x60, 0xDD, 0x78, - 0xFF, 0xFF, 0x5B, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x09, 0xF0, 0x2E, 0x60, 0x64, 0x63, 0x30, 0x64, - 0xBD, 0xDB, 0xBD, 0xD9, 0x0A, 0xF0, 0xBD, 0xD9, 0x0B, 0xF0, 0xBD, 0xD9, 0x0C, 0xF2, 0xBD, 0xDB, - 0x60, 0x47, 0xFF, 0xB4, 0x0A, 0xA5, 0x2E, 0x60, 0x62, 0x62, 0x65, 0x5C, 0xA2, 0xD9, 0x60, 0x41, - 0x1A, 0x65, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, - 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, - 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0xD3, 0x60, 0x58, 0x4D, 0x06, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, - 0xFF, 0xFF, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x61, 0x44, - 0x96, 0xFB, 0x27, 0x45, 0x02, 0x62, 0x46, 0xD3, 0x5A, 0xD1, 0x60, 0x47, 0x56, 0xFB, 0x64, 0x47, - 0x55, 0xFB, 0x00, 0x64, 0x5C, 0xFB, 0x0C, 0x62, 0x46, 0xD3, 0x80, 0xFB, 0x0B, 0xF0, 0x0F, 0x60, - 0xFF, 0x64, 0xA0, 0x84, 0x85, 0xFB, 0x1A, 0x60, 0x3E, 0x62, 0xA2, 0xD3, 0x87, 0xFB, 0x26, 0x46, - 0x32, 0xF0, 0x81, 0xF9, 0x33, 0xF0, 0x82, 0xF9, 0x34, 0xF0, 0x83, 0xF9, 0x00, 0xF4, 0x18, 0x65, - 0x0C, 0x61, 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, - 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF4, 0x02, 0x02, 0x60, - 0x02, 0x61, 0xA1, 0xD3, 0x00, 0x65, 0x60, 0x43, 0x59, 0xD3, 0xFF, 0xFF, 0x7F, 0xB4, 0x02, 0x3A, - 0x02, 0x00, 0x01, 0x64, 0x15, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x11, 0x00, 0x0A, 0x3A, - 0x02, 0x00, 0x04, 0x64, 0x0D, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x09, 0x00, 0x10, 0x3A, - 0x02, 0x00, 0x10, 0x64, 0x05, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x01, 0x00, 0x00, 0x64, - 0xCF, 0x83, 0xB4, 0x85, 0xE1, 0x02, 0x65, 0x44, 0x7A, 0xFB, 0x02, 0x60, 0x02, 0x61, 0xA1, 0xD3, - 0x00, 0x65, 0x60, 0x43, 0x59, 0xD3, 0xFF, 0xFF, 0x80, 0xB0, 0xFF, 0xFF, 0x01, 0x03, 0x60, 0x45, - 0xCF, 0x83, 0x65, 0x44, 0xF7, 0x02, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x0A, 0x64, 0x15, 0x00, - 0x04, 0x3A, 0x02, 0x00, 0x14, 0x64, 0x11, 0x00, 0x0A, 0x3A, 0x02, 0x00, 0x32, 0x64, 0x0D, 0x00, - 0x0B, 0x3A, 0x02, 0x00, 0x37, 0x64, 0x09, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x50, 0x64, 0x05, 0x00, - 0x16, 0x3A, 0x02, 0x00, 0x6E, 0x64, 0x01, 0x00, 0x14, 0x64, 0x7C, 0xFB, 0xA9, 0xF3, 0xFF, 0xFF, - 0x02, 0xA4, 0xD8, 0xF3, 0x60, 0x45, 0x66, 0x41, 0x65, 0x46, 0x8C, 0xFA, 0x60, 0x40, 0x01, 0x36, - 0x06, 0x00, 0x02, 0x36, 0x04, 0x00, 0x04, 0x36, 0x02, 0x00, 0x05, 0x3A, 0x02, 0x00, 0x00, 0x64, - 0x01, 0x00, 0x01, 0x64, 0x6F, 0xFA, 0x79, 0xF3, 0x7A, 0xF1, 0xFF, 0xFF, 0xA0, 0x84, 0x65, 0x43, - 0x02, 0x02, 0x79, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x0F, 0x60, 0xAE, 0x65, 0xD8, 0xF3, 0xFF, 0xFF, - 0xE0, 0x84, 0x44, 0xD3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x04, 0x02, 0xE8, 0x84, 0xA4, 0x80, - 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, 0x7B, 0xFB, 0x6F, 0xF0, 0x60, 0x47, 0x90, 0x84, 0x6F, 0xFA, - 0x60, 0x47, 0x60, 0x45, 0x80, 0x64, 0xE8, 0x84, 0xA4, 0x80, 0xFF, 0xFF, 0xFC, 0x03, 0xA4, 0x84, - 0x70, 0xF0, 0x70, 0xFA, 0x00, 0x61, 0xE8, 0x84, 0xFF, 0xFF, 0x02, 0x05, 0xDD, 0x81, 0xFB, 0x01, - 0xE1, 0x81, 0x0F, 0x60, 0xA2, 0x65, 0x45, 0xD3, 0x0E, 0xFA, 0x66, 0x43, 0x0C, 0xF4, 0xA9, 0xF3, - 0x1C, 0x60, 0xBA, 0x65, 0x02, 0xA4, 0x60, 0x46, 0x05, 0xF0, 0x60, 0x41, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x00, 0x7C, 0x44, 0xD9, 0x26, 0x46, 0x31, 0xF2, 0x61, 0x5C, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD9, 0x26, 0x46, 0x2F, 0xF0, 0x61, 0x46, 0x03, 0xF8, 0x26, 0x46, 0x30, 0xF0, - 0x61, 0x46, 0x04, 0xF8, 0x26, 0x46, 0x31, 0xF0, 0x61, 0x46, 0x05, 0xF8, 0x26, 0x46, 0xCF, 0x60, - 0x58, 0x4E, 0x20, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xE9, 0x60, 0x58, 0x4E, - 0x7B, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0x8C, 0xFD, 0x0F, 0x60, 0xD8, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x5C, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0xD6, 0x60, 0xB7, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xF7, 0x65, 0x20, 0x44, 0x24, 0x80, 0xD0, 0x60, - 0x98, 0x78, 0xFF, 0xFF, 0xDC, 0xF3, 0xFF, 0xFF, 0xFD, 0xA0, 0x2A, 0xF2, 0x03, 0x03, 0xDC, 0x60, - 0x7B, 0x78, 0xFF, 0xFF, 0x60, 0x40, 0xB0, 0x36, 0x11, 0x00, 0xC0, 0x36, 0x02, 0x00, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x66, 0x45, 0x00, 0xF4, - 0x0A, 0xF2, 0x0B, 0xF2, 0xFE, 0xA0, 0xF3, 0xA0, 0x6F, 0x02, 0x60, 0x41, 0x09, 0xF2, 0x20, 0x03, - 0x00, 0xA0, 0xFF, 0xA0, 0x53, 0x03, 0x65, 0x03, 0x00, 0xA0, 0xFF, 0xFF, 0x4F, 0x03, 0x1F, 0x60, - 0x54, 0x61, 0x01, 0x64, 0xA1, 0xDB, 0x1F, 0x60, 0x56, 0x61, 0x0D, 0x64, 0xA1, 0xDB, 0x1F, 0x60, - 0x58, 0x61, 0x03, 0x64, 0xA1, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, - 0x28, 0x60, 0x2E, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0xFE, 0xA0, 0x1F, 0x60, 0x54, 0x61, 0x17, 0x02, - 0x01, 0x64, 0xA1, 0xDB, 0x1F, 0x60, 0x56, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x1F, 0x60, 0x58, 0x61, - 0x01, 0x64, 0xA1, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, - 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x02, 0x64, - 0xA1, 0xDB, 0x1F, 0x60, 0x56, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0x1F, 0x60, 0x58, 0x61, 0x01, 0x64, - 0xA1, 0xDB, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x65, 0x46, 0x07, 0xF4, - 0x06, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x65, 0x46, 0x26, 0x46, 0x24, 0x60, 0x74, 0x64, - 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, - 0xFF, 0xFF, 0xD2, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, 0x09, 0xF2, 0xFC, 0xA0, 0xFF, 0xA0, - 0x11, 0x02, 0x0A, 0x02, 0x0B, 0xF2, 0x65, 0x46, 0x0A, 0x1B, 0x66, 0x41, 0x07, 0xF4, 0x06, 0xF2, - 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0x65, 0x46, 0x69, 0xF1, 0x2A, 0xF2, 0x64, 0x41, 0x60, 0x40, 0xA0, 0x3A, - 0x02, 0x00, 0x08, 0xB1, 0x04, 0x00, 0xC0, 0x3A, 0x0C, 0x00, 0x04, 0xB1, 0xFF, 0xFF, 0x20, 0x03, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x17, 0x00, 0xB0, 0x3A, 0x02, 0x00, 0x01, 0x65, 0x07, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x02, 0x65, - 0x03, 0x00, 0x30, 0x3A, 0x0D, 0x00, 0x10, 0x65, 0xA5, 0x80, 0xFF, 0xFF, 0x09, 0x03, 0x0F, 0x60, - 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x66, - 0x2F, 0x58, 0xFF, 0xFF, 0x28, 0x60, 0x2E, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xFC, 0xA0, 0xFF, 0xFF, - 0x16, 0x04, 0x0F, 0x60, 0xEC, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0xDC, 0x60, 0xBC, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2D, 0x60, 0x58, 0x65, 0xA5, 0xD1, 0x01, 0x60, - 0x00, 0x64, 0xA0, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xD0, 0x60, 0x98, 0x78, 0xFF, 0xFF, 0x20, 0x40, - 0x08, 0x2A, 0x03, 0x00, 0xCF, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0xD7, 0x60, 0xDD, 0x78, 0xFF, 0xFF, - 0x4E, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2E, 0xF5, 0xFF, 0xFF, 0x27, 0xF2, 0x1C, 0x60, 0xBA, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, - 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, - 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA9, 0xF3, - 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x25, 0xF2, 0x26, 0xF0, 0xA7, 0xF2, 0xA8, 0xF0, 0x66, 0xF5, - 0xFF, 0xFF, 0x00, 0xF4, 0xFF, 0xFF, 0x89, 0xF8, 0x66, 0xF5, 0xFF, 0xFF, 0x07, 0xFC, 0x2C, 0xFA, - 0x2D, 0xF8, 0xAE, 0xFA, 0xEB, 0xF3, 0x2F, 0xFA, 0xEC, 0xF3, 0x30, 0xFA, 0xED, 0xF3, 0x31, 0xFA, - 0x81, 0xF3, 0x32, 0xFA, 0x82, 0xF3, 0x33, 0xFA, 0x83, 0xF3, 0x34, 0xFA, 0x31, 0x60, 0x2C, 0x61, - 0xA1, 0xD3, 0xFF, 0xFF, 0x03, 0x1B, 0x00, 0x60, 0xA0, 0x64, 0x02, 0x00, 0x00, 0x60, 0xC0, 0x64, - 0x2A, 0xFA, 0x02, 0x63, 0x3F, 0xFC, 0xAB, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0xCC, 0xF1, 0x19, 0xF8, - 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xC1, 0xFE, 0x0F, 0x60, 0xEA, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xD6, 0x60, 0xC2, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x3A, 0x61, 0xAE, 0x60, - 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x62, 0xFB, 0xA9, 0xF3, 0x07, 0xFA, 0x0C, 0x60, - 0x80, 0x64, 0xBC, 0xF1, 0x19, 0xF8, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x00, 0x60, - 0x3A, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x61, 0xFB, 0xA9, 0xF3, - 0x07, 0xFA, 0x0C, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0xBC, 0xF1, 0x19, 0xF8, 0x00, 0x64, 0x3E, 0xFA, - 0x3F, 0xFA, 0x10, 0x60, 0x20, 0x62, 0xDE, 0x60, 0xDC, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xE0, 0x62, - 0x00, 0x60, 0x80, 0x64, 0xA2, 0xDB, 0xDD, 0x60, 0x71, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x20, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x27, 0x60, 0xB6, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x01, 0xA8, 0x03, 0xA8, 0x04, 0x03, 0x03, 0x03, 0xDE, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0x04, 0x60, - 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x0F, 0x60, 0xDE, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x9B, 0xFE, - 0x03, 0x05, 0x20, 0x40, 0x4B, 0x23, 0x0E, 0x00, 0x0F, 0x60, 0xE0, 0x62, 0x80, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xDD, 0x60, 0x83, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x21, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x60, 0x86, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, - 0x07, 0x00, 0x90, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x00, 0x64, 0xA1, 0xDB, 0x04, 0x00, - 0x10, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x8C, 0xF3, 0x58, 0xFB, 0x84, 0xF1, 0xBA, 0xFE, - 0x01, 0xA8, 0x59, 0xF9, 0x04, 0x02, 0x02, 0x64, 0x8C, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x64, 0x47, - 0xDC, 0xF3, 0x10, 0xB0, 0x04, 0xA8, 0x33, 0x02, 0x32, 0x02, 0x62, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, - 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x81, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, 0x82, 0xF1, - 0x2D, 0xF8, 0x33, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, 0x10, 0x60, 0x48, 0x64, 0x2A, 0xFA, - 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x22, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, - 0xE0, 0x62, 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0xDD, 0x60, 0xEA, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x23, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x10, 0x67, 0x84, 0xFB, 0x8C, 0xF3, - 0xFF, 0xFF, 0x00, 0xA8, 0xFF, 0xFF, 0x0B, 0x03, 0x0F, 0x60, 0xE0, 0x62, 0x80, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xDD, 0x60, 0xEF, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xDE, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x1B, 0x60, 0xC6, 0x65, 0x1F, 0x60, 0x80, 0x64, 0xA0, 0xD3, - 0x05, 0x7C, 0x08, 0xB0, 0xA5, 0xD3, 0x05, 0x02, 0x00, 0xB8, 0xFF, 0xFF, 0x02, 0x03, 0x15, 0x7C, - 0x0B, 0x00, 0xDC, 0xF3, 0x12, 0x60, 0x26, 0x63, 0x03, 0xA8, 0x7F, 0xF3, 0x05, 0x02, 0xE0, 0x85, - 0x47, 0xD3, 0xFF, 0xFF, 0x07, 0xBC, 0xA2, 0xDB, 0x53, 0xF9, 0x29, 0x60, 0xC6, 0x64, 0x54, 0xFB, - 0x24, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x4E, 0xEC, 0x60, 0x58, 0x4F, 0xB9, 0x78, 0xFF, 0xFF, - 0x0E, 0x4F, 0x0F, 0x60, 0xE0, 0x62, 0x10, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0x60, 0x34, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xFF, 0xFF, - 0x59, 0xF3, 0x84, 0xFB, 0x60, 0x40, 0x10, 0x27, 0xDA, 0xFE, 0xDC, 0xF3, 0x00, 0xA8, 0x04, 0xA8, - 0x27, 0x02, 0x26, 0x02, 0x61, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, - 0x31, 0xF8, 0x81, 0xF1, 0x2C, 0xF8, 0x82, 0xF1, 0x2D, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0xA4, 0x64, - 0x2A, 0xFA, 0x85, 0xF1, 0xC0, 0x67, 0xB0, 0x84, 0x2B, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x20, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x26, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x9E, 0xF5, 0xFF, 0xFF, 0x07, 0x1B, 0x20, 0x40, 0x80, 0x2B, 0x5C, 0x00, 0x7F, 0x60, 0xFF, 0x65, - 0x20, 0x44, 0x24, 0x80, 0x00, 0x64, 0x41, 0xFB, 0xF1, 0x60, 0x01, 0x64, 0x24, 0xFA, 0xDA, 0x85, - 0x19, 0x60, 0x86, 0x63, 0x89, 0xF1, 0x43, 0x4C, 0xD3, 0x80, 0xBE, 0xD1, 0x14, 0x05, 0x65, 0x40, - 0x80, 0x2A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x64, 0x43, 0x32, 0x61, 0x0F, 0x4E, 0x2F, 0x60, - 0x58, 0x4F, 0x01, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x2C, 0x43, 0x04, 0xA3, 0x41, 0xF3, 0xFF, 0xFF, - 0x32, 0xA4, 0x41, 0xFB, 0xE7, 0x01, 0x20, 0x47, 0x20, 0xB0, 0x20, 0xAF, 0x0F, 0x03, 0x40, 0x40, - 0x0F, 0x60, 0xE0, 0x62, 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0xDE, 0x60, 0xA3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x9E, 0xF1, 0x41, 0xF3, - 0xFF, 0xFF, 0x02, 0xA4, 0xE8, 0x84, 0x64, 0x46, 0x23, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x64, 0x64, 0xA2, 0xDB, 0x5A, 0xD9, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x64, - 0x9E, 0xFB, 0xFA, 0xFE, 0xEB, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, - 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x58, 0xF3, 0x8C, 0xFB, - 0xFF, 0xFF, 0xC1, 0xFE, 0x0F, 0x60, 0xDE, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xE0, 0x62, - 0x00, 0x60, 0x80, 0x64, 0xA2, 0xDB, 0xDD, 0x60, 0x71, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2E, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x9E, 0xF1, - 0x00, 0x64, 0xB0, 0x86, 0x9E, 0xFB, 0x07, 0x03, 0x24, 0x60, 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, - 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0xEB, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, - 0xDE, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xE0, 0x62, 0x00, 0x60, 0x80, 0x64, 0xA2, 0xDB, - 0xDD, 0x60, 0x71, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x97, 0xF3, 0x26, 0x46, - 0x60, 0x43, 0x01, 0x2A, 0x22, 0x00, 0x0F, 0xF2, 0x2A, 0xF0, 0x60, 0x40, 0x10, 0x2A, 0x10, 0x00, - 0x64, 0x40, 0x04, 0x27, 0x1A, 0x00, 0xFD, 0xB3, 0x64, 0x40, 0x20, 0x27, 0x02, 0xBB, 0x0F, 0x60, - 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0C, 0x00, - 0xFB, 0xB3, 0x64, 0x40, 0x20, 0x27, 0x04, 0xBB, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x97, 0xFD, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0xDC, 0xF3, 0x3F, 0xF2, 0x04, 0xA8, 0x57, 0xFB, 0x02, 0x03, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0xF4, - 0x1E, 0x63, 0x08, 0x64, 0x40, 0x48, 0xBD, 0xD2, 0xFF, 0xFF, 0x60, 0x47, 0x05, 0x36, 0x0B, 0x00, - 0xFF, 0xB5, 0xC7, 0x83, 0x01, 0x2A, 0xF7, 0x01, 0x4F, 0xD2, 0x5B, 0xD2, 0x60, 0x40, 0x05, 0x37, - 0x08, 0x00, 0xDF, 0x83, 0xF5, 0x01, 0xFF, 0xB5, 0x65, 0x41, 0x47, 0x8A, 0x5B, 0xD2, 0xDF, 0x83, - 0x07, 0x00, 0x00, 0x7F, 0xDC, 0x85, 0x47, 0x8A, 0x60, 0x41, 0x5B, 0xD2, 0xDB, 0x83, 0x60, 0x47, - 0x01, 0xB0, 0xFE, 0xB5, 0x02, 0x03, 0x02, 0x64, 0x40, 0x48, 0x85, 0xF1, 0x65, 0x44, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xFD, 0xA1, 0xE1, 0x81, 0xE1, 0x81, 0xE1, 0x85, 0xC4, 0x81, 0xD0, 0x84, - 0xD1, 0x80, 0x2A, 0x07, 0x29, 0x06, 0x9C, 0x84, 0xDC, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x85, - 0x96, 0xF3, 0xC7, 0x83, 0x01, 0x26, 0x60, 0x47, 0xAB, 0x83, 0xFC, 0xA3, 0x02, 0x00, 0x03, 0x04, - 0x00, 0xF4, 0x84, 0xA3, 0xFC, 0x01, 0x80, 0x65, 0x47, 0xD0, 0x28, 0x41, 0xA0, 0x80, 0xFE, 0xA1, - 0x16, 0x03, 0x09, 0x02, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x1E, 0x00, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x15, 0x00, 0x28, 0x41, 0xFE, 0xA1, 0xFF, 0xFF, 0x09, 0x03, - 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x08, 0x00, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x20, 0x40, 0x20, 0x2A, 0x58, 0x00, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, - 0xF4, 0xA3, 0x00, 0x60, 0x1D, 0x61, 0x00, 0x60, 0x80, 0x65, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, - 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x2D, 0x03, - 0x17, 0x03, 0xCF, 0x83, 0x61, 0x44, 0x80, 0xA0, 0x28, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, - 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0x81, 0xA1, 0x20, 0x03, 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, - 0xDD, 0x81, 0xE4, 0x03, 0xF7, 0x01, 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, 0xE4, 0x03, 0xF2, 0x01, - 0x01, 0x60, 0xFF, 0x63, 0x46, 0x48, 0x41, 0x4A, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, - 0x64, 0x44, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, - 0x7F, 0xA1, 0xF7, 0x04, 0x00, 0xF4, 0x03, 0x61, 0xF4, 0x01, 0x20, 0xFE, 0x00, 0xBB, 0x02, 0x60, - 0x00, 0x63, 0x08, 0x24, 0x11, 0x00, 0xBD, 0xD3, 0x06, 0x65, 0xD4, 0x80, 0xBD, 0xD3, 0x0C, 0x02, - 0x60, 0x40, 0x60, 0x3A, 0x09, 0x00, 0x1D, 0x3B, 0x07, 0x00, 0xBD, 0xD3, 0xFF, 0xFF, 0xFF, 0xB5, - 0x00, 0x7E, 0x5C, 0xFB, 0x65, 0x44, 0x5B, 0xFB, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x02, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x63, 0x97, 0xFD, 0x1A, 0x60, 0x72, 0x63, 0x00, 0x64, - 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x50, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, - 0x10, 0x60, 0x4E, 0x62, 0xE0, 0x60, 0x07, 0x64, 0xA2, 0xDB, 0xD2, 0xF1, 0x1A, 0x60, 0x76, 0x62, - 0xA2, 0xD9, 0x1A, 0x60, 0x7E, 0x63, 0x00, 0x64, 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x54, 0x64, - 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0x10, 0x60, 0x52, 0x62, 0xE0, 0x60, 0x11, 0x64, - 0xA2, 0xDB, 0x28, 0x60, 0x04, 0x62, 0xA2, 0xD1, 0x1A, 0x60, 0x82, 0x62, 0xA2, 0xD9, 0x00, 0x60, - 0x3A, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x64, 0xFB, 0xA9, 0xF3, - 0x07, 0xFA, 0xBC, 0xF3, 0x19, 0xFA, 0xF8, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, - 0x3F, 0xFA, 0x00, 0x60, 0x3A, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x65, 0xFB, 0xA9, 0xF3, 0x07, 0xFA, 0xBC, 0xF3, 0x19, 0xFA, 0x24, 0x60, 0x80, 0x64, 0x0E, 0xFA, - 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x10, 0x60, 0x14, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, - 0x10, 0x60, 0x28, 0x62, 0xE0, 0x60, 0x77, 0x64, 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x63, - 0x97, 0xFD, 0xBA, 0xFE, 0xFE, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x84, 0xFD, 0x0F, 0x60, - 0xEA, 0x62, 0xA2, 0xD1, 0x04, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, - 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x28, 0x60, 0x04, 0x62, - 0xA2, 0xD1, 0x1A, 0x60, 0x82, 0x62, 0xA2, 0xD9, 0x27, 0x60, 0xFE, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x0A, 0x1B, 0x00, 0x64, 0x84, 0xFB, 0xBA, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0xBA, 0xFE, 0x97, 0xF3, 0x00, 0x63, 0x84, 0xFD, 0x10, 0xBC, - 0x97, 0xFB, 0xFE, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x60, 0x64, 0x63, 0x1A, 0x60, - 0x42, 0x64, 0xA0, 0xDD, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, - 0x01, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0xE0, 0x60, 0xC9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xA3, 0x01, 0x31, 0x40, 0x04, 0x2A, 0xE3, 0x01, 0x20, 0x40, - 0x52, 0x23, 0x12, 0x00, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, 0x81, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xE0, 0x60, - 0xC9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xDB, 0x01, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x01, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x65, 0xF5, 0xBC, 0xF1, 0x19, 0xF8, 0x81, 0xF1, - 0x2C, 0xF8, 0x32, 0xF8, 0x82, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, - 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x11, 0x60, 0x48, 0x64, - 0x2A, 0xFA, 0x00, 0x64, 0x2B, 0xFA, 0x23, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x0F, 0x60, 0xF8, 0x62, 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0xE1, 0x60, 0x23, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x65, 0xF5, 0x23, 0xF2, 0xFF, 0xFF, 0x01, 0x18, 0x7B, 0x01, - 0x10, 0x67, 0x84, 0xFB, 0x03, 0x64, 0x98, 0xFB, 0xFE, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, 0x81, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xE1, 0x60, 0x46, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x0D, 0x00, 0x0F, 0x60, 0xF6, 0x62, - 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0xE0, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x46, 0x60, 0x00, 0x65, 0x20, 0x41, 0x8E, 0xF3, 0xA5, 0x80, - 0x01, 0xB0, 0x01, 0x02, 0x06, 0x00, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x2F, 0x58, - 0xFF, 0xFF, 0x1A, 0x60, 0x42, 0x65, 0xA5, 0xD3, 0x01, 0x63, 0x8C, 0xFD, 0x27, 0x1B, 0x00, 0x60, - 0x64, 0x64, 0xA5, 0xDB, 0x65, 0xF5, 0xBC, 0xF1, 0x19, 0xF8, 0x81, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, - 0x82, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, 0xEB, 0xF1, 0x2F, 0xF8, - 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x11, 0x60, 0x48, 0x64, 0x2A, 0xFA, 0x00, 0x64, - 0x2B, 0xFA, 0x23, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x06, 0x00, 0x97, 0xF3, 0x32, 0x40, - 0x02, 0x26, 0x02, 0x00, 0x40, 0x2A, 0xDA, 0xFE, 0xC1, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, 0x01, 0x60, 0x82, 0x64, 0xA2, 0xDB, 0xE1, 0x60, 0xA4, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, - 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xE0, 0x60, 0x77, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x06, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0xBA, 0xFE, 0xE3, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x8C, 0xFB, 0x01, 0x60, 0x00, 0x65, - 0x20, 0x44, 0x34, 0x80, 0xBA, 0xFE, 0xC1, 0xFE, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x10, 0x60, 0x14, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, 0x01, 0x60, 0x46, 0x64, - 0xA2, 0xDB, 0xE1, 0x60, 0xD7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0xE0, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x3C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x34, 0x01, 0x00, 0x60, 0x02, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x28, 0x60, 0x00, 0x62, 0xA2, 0xD1, - 0x97, 0xF3, 0x00, 0x61, 0xD1, 0x80, 0xF7, 0xB4, 0xF0, 0x03, 0x97, 0xFB, 0x35, 0x00, 0x00, 0x60, - 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0F, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x28, 0x60, 0x00, 0x62, - 0xA2, 0xD1, 0x97, 0xF3, 0x00, 0x61, 0xD1, 0x80, 0x08, 0xBC, 0x03, 0x02, 0xE2, 0x60, 0xE8, 0x78, - 0xFF, 0xFF, 0x97, 0xFB, 0x21, 0x00, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0xE2, 0x60, 0xE8, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, - 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xC5, 0x01, - 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xE3, 0x60, - 0xC8, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x02, 0x63, 0x97, 0xF3, 0x8C, 0xFD, 0x01, 0xBC, - 0xC1, 0xFE, 0x97, 0xFB, 0xD2, 0xF1, 0x1A, 0x60, 0x76, 0x62, 0xA2, 0xD9, 0x0F, 0x60, 0xF6, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, - 0x01, 0x60, 0x34, 0x64, 0xA2, 0xDB, 0xE2, 0x60, 0x62, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x0E, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, - 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xE0, 0x60, 0x77, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x17, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x97, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x04, 0x2A, 0x01, 0x00, 0xD2, 0x01, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0x72, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x97, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x08, 0x2A, 0x4D, 0x00, 0x54, 0x00, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x97, 0xF3, 0xFF, 0xFF, - 0x08, 0xBC, 0x97, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xAB, 0x01, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, 0xA2, 0xDB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2B, 0x00, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, - 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x13, 0x00, 0x0F, 0x60, 0xF6, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x97, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x04, 0x00, 0x0A, 0x00, 0x2F, 0x58, 0xFF, 0xFF, - 0x00, 0x00, 0x97, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0x97, 0xFB, 0xE1, 0x60, 0x2A, 0x78, 0xFF, 0xFF, - 0x27, 0x60, 0xFE, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x03, 0x02, 0xE3, 0x60, - 0xD1, 0x78, 0xFF, 0xFF, 0x97, 0xF3, 0x01, 0x63, 0x8C, 0xFD, 0x21, 0xBC, 0x97, 0xFB, 0x64, 0xF5, - 0x81, 0xF1, 0x2C, 0xF8, 0x82, 0xF1, 0x2D, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x85, 0xF1, 0xC0, 0x67, - 0xB0, 0x84, 0x2B, 0xFA, 0xBC, 0xF1, 0x19, 0xF8, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, - 0xED, 0xF1, 0x31, 0xF8, 0x10, 0x60, 0xA4, 0x64, 0x2A, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xC1, 0xFE, 0x1A, 0x60, 0x76, 0x62, 0x00, 0x60, 0x50, 0x64, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x72, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, - 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, - 0xF8, 0x62, 0x01, 0x60, 0x2C, 0x64, 0xA2, 0xDB, 0xE3, 0x60, 0x3A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x0E, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, - 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xE0, 0x60, 0x77, 0x78, 0xFF, 0xFF, - 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x8D, 0x01, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x97, 0xF3, 0xFF, 0xFF, 0x02, 0xB0, - 0xFF, 0xFF, 0x4E, 0x03, 0x7D, 0x01, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x45, 0x00, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x16, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, 0xA2, 0xDB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x28, 0x60, 0x00, 0x62, 0xA2, 0xD3, 0x97, 0xF3, 0x00, 0xA8, - 0xF7, 0xB4, 0x2E, 0x03, 0x97, 0xFB, 0xE2, 0x60, 0x3C, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x17, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0x72, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x28, 0x60, 0x00, 0x62, - 0xA2, 0xD3, 0x97, 0xF3, 0x00, 0xA8, 0x08, 0xBC, 0x01, 0x02, 0x42, 0x01, 0x97, 0xFB, 0xE2, 0x60, - 0x3C, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x02, 0x00, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x00, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x72, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x97, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0x97, 0xFB, 0xE1, 0x60, 0x2A, 0x78, 0xFF, 0xFF, - 0x97, 0xF3, 0x01, 0x63, 0x8C, 0xFD, 0x01, 0xBC, 0x97, 0xFB, 0x00, 0x64, 0x84, 0xFB, 0xC1, 0xFE, - 0x29, 0x00, 0x97, 0xF3, 0x01, 0x63, 0x8C, 0xFD, 0x01, 0xBC, 0x97, 0xFB, 0x00, 0x64, 0x84, 0xFB, - 0x64, 0xF5, 0x81, 0xF1, 0x2C, 0xF8, 0x82, 0xF1, 0x2D, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x85, 0xF1, - 0xC0, 0x67, 0xB0, 0x84, 0x2B, 0xFA, 0xBC, 0xF1, 0x19, 0xF8, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, - 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x00, 0x60, 0xA4, 0x64, 0x2A, 0xFA, 0x24, 0x60, 0x74, 0x62, - 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC1, 0xFE, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x7E, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x14, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x0F, 0x60, 0xF8, 0x62, 0x03, 0x60, 0x0E, 0x64, 0xA2, 0xDB, - 0xE4, 0x60, 0x16, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, - 0xA2, 0xD1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0E, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x7E, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0xE0, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x0A, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xC6, 0x01, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x15, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x8B, 0x01, 0x00, 0x60, 0x12, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xAC, 0x01, 0x0F, 0x60, 0xF6, 0x62, - 0xA2, 0xD1, 0x02, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xAD, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x10, 0x67, 0x84, 0xFB, 0x0F, 0x60, 0xF6, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x14, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x65, 0xF5, 0xBC, 0xF1, 0x19, 0xF8, 0x81, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, - 0x82, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x83, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, 0xEB, 0xF1, 0x2F, 0xF8, - 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x11, 0x60, 0x48, 0x64, 0x2A, 0xFA, 0x00, 0x64, - 0x2B, 0xFA, 0x23, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x97, 0xF3, 0xC1, 0xFE, 0xFE, 0xB4, - 0x97, 0xFB, 0x0F, 0x60, 0xF8, 0x62, 0x00, 0x60, 0x03, 0x64, 0xA2, 0xDB, 0xE4, 0x60, 0x94, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x29, 0x01, 0x65, 0xF5, - 0x23, 0xF2, 0x98, 0xF3, 0x04, 0x18, 0xCC, 0x84, 0x98, 0xFB, 0x01, 0x03, 0x21, 0x01, 0xE1, 0x60, - 0x2A, 0x78, 0xFF, 0xFF, 0x27, 0x60, 0xFE, 0x62, 0xA2, 0xD3, 0x84, 0xF1, 0x02, 0xA8, 0x2A, 0xF2, - 0x03, 0x02, 0xB0, 0x84, 0x2A, 0xFA, 0x08, 0x00, 0x0F, 0x60, 0xF6, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x22, 0x64, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x24, 0x60, 0x34, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0xDB, 0x02, 0xBF, 0x60, - 0xE7, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xFC, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1A, 0x60, 0xAE, 0x63, 0x00, 0x64, 0xA3, 0xDB, - 0x06, 0xA3, 0x10, 0x60, 0x5C, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0x10, 0x60, - 0x5A, 0x62, 0xE4, 0x60, 0xD2, 0x64, 0xA2, 0xDB, 0x1F, 0x60, 0x5C, 0x62, 0xA2, 0xD1, 0x1A, 0x60, - 0xB2, 0x62, 0xA2, 0xD9, 0x10, 0x60, 0x2A, 0x62, 0xE4, 0x60, 0xF9, 0x64, 0xA2, 0xDB, 0x2F, 0x58, - 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x1F, 0x60, 0x80, 0x65, 0xA5, 0xD3, 0xFF, 0xFF, 0x02, 0xBC, - 0xF3, 0xB4, 0x01, 0xB0, 0xA5, 0xDB, 0x0C, 0x02, 0x12, 0x60, 0x26, 0x61, 0x00, 0x64, 0x1A, 0x63, - 0x59, 0xDB, 0xFE, 0x1F, 0x1F, 0x60, 0x5C, 0x61, 0x0A, 0x64, 0x1A, 0x63, 0x59, 0xDB, 0xFE, 0x1F, - 0x7F, 0xF3, 0x7E, 0xFB, 0x01, 0x64, 0x7F, 0xFB, 0x01, 0x61, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, - 0xE1, 0x81, 0xFB, 0x01, 0xBA, 0xF3, 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x69, 0x03, 0x0F, 0x60, - 0xFC, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xFE, 0x62, 0x40, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xE5, 0x60, 0x1F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x7F, 0xF1, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x0F, 0x60, 0xFE, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xE5, 0x60, 0x43, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xFC, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x0F, 0x60, 0xFE, 0x62, 0x00, 0x60, 0x1A, 0x64, 0xA2, 0xDB, 0xE5, 0x60, 0x64, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0xAE, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xFC, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0xAE, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x26, 0x00, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, - 0xAA, 0x62, 0x1A, 0x60, 0xAE, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x12, 0x60, 0x26, 0x65, 0x7F, 0xF3, 0xFF, 0xFF, 0x04, 0xA4, 0xF2, 0xA0, 0xFF, 0xFF, 0x01, 0x06, - 0xF1, 0xA4, 0x01, 0x36, 0x0B, 0x00, 0x00, 0x36, 0x04, 0xA4, 0x60, 0x41, 0xE0, 0x84, 0xC4, 0x84, - 0xA0, 0xD3, 0xFF, 0xFF, 0x00, 0xB8, 0x61, 0x44, 0xEF, 0x02, 0x75, 0x01, 0x1F, 0x60, 0x80, 0x65, - 0xA5, 0xD3, 0x7E, 0xF1, 0xFC, 0xB4, 0xA5, 0xDB, 0x7F, 0xF9, 0x0F, 0x60, 0xFC, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xFE, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, - 0xE5, 0x60, 0xA5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7F, 0xF1, 0x24, 0x60, - 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xFE, 0x62, - 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xE5, 0x60, 0xC9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xFC, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x0F, 0x60, - 0xD0, 0x62, 0xA2, 0xD1, 0x10, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xE6, 0x60, 0xE9, 0x78, 0xFF, 0xFF, 0xE6, 0x60, 0xED, 0x78, 0xFF, 0xFF, 0x1F, 0x60, - 0x80, 0x63, 0xA3, 0xD3, 0x26, 0x46, 0x02, 0xB0, 0x3F, 0xF2, 0xF6, 0x03, 0x02, 0x60, 0x00, 0x63, - 0x01, 0x60, 0x00, 0x65, 0xD4, 0x80, 0x00, 0xF4, 0x02, 0x24, 0x65, 0x44, 0x12, 0x65, 0x60, 0x41, - 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x64, 0x44, 0x00, 0x7F, - 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF0, 0x02, - 0x02, 0x60, 0x14, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x01, 0xB4, 0xFF, 0xFF, 0x37, 0x02, 0x29, 0x60, - 0xA4, 0x64, 0xA0, 0xD1, 0x1F, 0x60, 0x0E, 0x63, 0x31, 0x18, 0x64, 0x41, 0x44, 0x4B, 0x29, 0x60, - 0xA6, 0x65, 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, - 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0xF4, 0x02, 0x02, 0x60, 0x1A, 0x61, 0xA1, 0xD3, - 0x2B, 0x45, 0x60, 0x40, 0x00, 0x36, 0x1A, 0x00, 0x01, 0x36, 0x18, 0x00, 0xD4, 0x80, 0x65, 0x43, - 0xB0, 0x02, 0x1F, 0x60, 0x0C, 0x64, 0xE3, 0x83, 0xFE, 0xA3, 0x59, 0xD1, 0x58, 0xD3, 0x40, 0x4B, - 0xD0, 0x80, 0x2B, 0x44, 0x02, 0x02, 0xF9, 0x1F, 0x09, 0x00, 0x02, 0x60, 0x1A, 0x61, 0x65, 0x43, - 0xE3, 0x83, 0xFE, 0xA3, 0x59, 0xD3, 0xFF, 0xFF, 0x9C, 0x1B, 0xFC, 0x1F, 0x26, 0x46, 0x3F, 0xF0, - 0x01, 0x60, 0x00, 0x64, 0xD0, 0x80, 0x64, 0x41, 0x01, 0x05, 0x60, 0x41, 0xF4, 0xA1, 0x02, 0x60, - 0x18, 0x63, 0xBD, 0xD3, 0xBD, 0xD1, 0xFD, 0xA0, 0xF9, 0xA0, 0x08, 0x03, 0x35, 0x03, 0xFE, 0xA1, - 0x64, 0x42, 0xE2, 0x85, 0xD1, 0x81, 0xC7, 0x83, 0x84, 0x06, 0xF3, 0x01, 0x12, 0x60, 0x26, 0x65, - 0xBD, 0xD3, 0xFD, 0xA1, 0xE0, 0x84, 0xC4, 0x85, 0x05, 0x64, 0xA5, 0xDB, 0x1F, 0x60, 0x80, 0x65, - 0xA5, 0xD3, 0x41, 0x48, 0x04, 0xBC, 0xA5, 0xDB, 0x12, 0x60, 0x28, 0x65, 0x12, 0x60, 0x44, 0x61, - 0x49, 0xD3, 0xD6, 0x80, 0x00, 0xB8, 0x0E, 0x03, 0xFB, 0x03, 0x62, 0x45, 0x12, 0x60, 0x26, 0x61, - 0x59, 0xD3, 0xD6, 0x80, 0x00, 0xB8, 0x06, 0x03, 0xFB, 0x03, 0x05, 0x64, 0xA2, 0xDB, 0xD6, 0x80, - 0x02, 0xA2, 0xFC, 0x02, 0x0F, 0x60, 0xFC, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x28, 0x41, 0xC5, 0x01, 0x63, 0x45, 0x04, 0x60, 0x00, 0x63, 0xD7, 0x83, - 0xEB, 0x83, 0xD3, 0x80, 0x65, 0x43, 0x01, 0x05, 0x54, 0x00, 0xFE, 0xA3, 0x43, 0x4B, 0xA3, 0xD3, - 0x63, 0x41, 0x60, 0x43, 0x1B, 0x60, 0xC6, 0x64, 0xA0, 0xDD, 0xE3, 0x83, 0xFE, 0xA3, 0x59, 0xD1, - 0x58, 0xD9, 0xFD, 0x1F, 0x00, 0x63, 0x58, 0xDD, 0x2B, 0x43, 0xBD, 0xD1, 0x1F, 0x60, 0x78, 0x64, - 0x64, 0x41, 0xBD, 0xD1, 0x58, 0xD9, 0xBD, 0xD1, 0xFC, 0xA1, 0x41, 0x4B, 0x58, 0xD9, 0xBD, 0xD1, - 0xA0, 0xD9, 0x12, 0x60, 0x26, 0x61, 0x12, 0x60, 0x42, 0x65, 0x00, 0x64, 0xD5, 0x80, 0x59, 0xDB, - 0xFD, 0x02, 0x12, 0x60, 0x24, 0x65, 0xBD, 0xD3, 0xA3, 0xD1, 0xE0, 0x84, 0xC4, 0x82, 0x12, 0x60, - 0x44, 0x65, 0x05, 0x64, 0x64, 0x41, 0x5A, 0xDB, 0xD6, 0x80, 0xCD, 0x81, 0x22, 0x03, 0xFB, 0x02, - 0x1F, 0x60, 0x5A, 0x61, 0x4B, 0xD1, 0x04, 0xA3, 0xBD, 0xD3, 0xFF, 0xFF, 0xF6, 0xA0, 0xC1, 0x82, - 0x05, 0x05, 0x64, 0x41, 0x5A, 0xDB, 0xCD, 0x81, 0xFF, 0xFF, 0xFC, 0x02, 0x2B, 0x41, 0xFD, 0xA1, - 0x41, 0x4B, 0xDF, 0x07, 0x0F, 0x60, 0xFC, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x1F, 0x60, 0x80, 0x65, 0xA5, 0xD3, 0xFF, 0xFF, 0x08, 0xBC, 0xA5, 0xDB, - 0xFF, 0xFF, 0x20, 0xFE, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x20, 0xFE, 0x9A, 0xFF, 0x5C, 0x61, - 0x3F, 0xF2, 0xFF, 0xFF, 0x83, 0xA0, 0xFF, 0xFF, 0x04, 0x28, 0x39, 0x00, 0xF4, 0xA4, 0x60, 0x43, - 0x00, 0xF4, 0x1E, 0x62, 0x60, 0xFE, 0xA2, 0xD2, 0xFF, 0xFF, 0x60, 0x40, 0x85, 0x36, 0x10, 0x00, - 0xDE, 0x82, 0xA2, 0xD2, 0xFF, 0xFF, 0x20, 0xFE, 0xFF, 0xB4, 0x02, 0xA4, 0x53, 0x93, 0x51, 0x91, - 0x05, 0x0E, 0xFF, 0xA4, 0x42, 0x92, 0x63, 0x40, 0x61, 0x40, 0xEC, 0x1C, 0x98, 0xFF, 0xD9, 0x01, - 0x20, 0xFE, 0x05, 0x64, 0x00, 0x7C, 0x42, 0x92, 0x60, 0xFE, 0xDE, 0x82, 0xA2, 0xD2, 0xDE, 0x82, - 0xA2, 0xD0, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0x60, 0x43, 0x60, 0xFE, 0xDE, 0x82, 0xA2, 0xD2, - 0xDE, 0x82, 0xA2, 0xD0, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0x98, 0xFF, 0x01, 0xA3, 0x01, 0xA4, - 0x2D, 0x60, 0x5A, 0x62, 0xA2, 0xDD, 0x2D, 0x60, 0x5E, 0x62, 0xA2, 0xDB, 0xBA, 0x01, 0x98, 0xFF, - 0xB8, 0x01, 0x00, 0x60, 0xA0, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x5D, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x80, 0x64, 0x2A, 0xFA, 0xCC, 0xF1, 0x19, 0xF8, 0x00, 0x64, - 0x3E, 0xFA, 0x00, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0xA9, 0xF1, 0x07, 0xF8, 0x67, 0x44, 0x2C, 0xFA, - 0x2D, 0xFA, 0x2E, 0xFA, 0x10, 0x60, 0x1C, 0x62, 0xE8, 0x60, 0xDF, 0x64, 0xA2, 0xDB, 0x2F, 0x58, - 0xFF, 0xFF, 0x5D, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, - 0x81, 0xF1, 0x32, 0xF8, 0x82, 0xF1, 0x33, 0xF8, 0x83, 0xF1, 0x34, 0xF8, 0x28, 0x60, 0x2C, 0x62, - 0xA2, 0xD1, 0x02, 0x64, 0x64, 0x40, 0xFE, 0x26, 0x10, 0xBC, 0x32, 0x40, 0x08, 0x26, 0x10, 0xBC, - 0x2F, 0x60, 0x44, 0x62, 0xA2, 0xDB, 0x28, 0x60, 0x2A, 0x62, 0xA2, 0xD1, 0x2D, 0x60, 0x7A, 0x64, - 0x02, 0x18, 0x27, 0x60, 0xDA, 0x64, 0x2E, 0x60, 0xAE, 0x62, 0xA2, 0xDB, 0x2E, 0x60, 0xCA, 0x62, - 0xA2, 0xDB, 0x2D, 0x60, 0xA6, 0x61, 0x28, 0x60, 0xCC, 0x62, 0xA2, 0xD3, 0x2E, 0x60, 0x96, 0x65, - 0xFE, 0xA4, 0xE0, 0x84, 0x02, 0x05, 0x67, 0x44, 0x99, 0x00, 0xE0, 0x84, 0xC4, 0x85, 0x2D, 0x60, - 0xCC, 0x62, 0xA2, 0xD3, 0xA5, 0xD1, 0xDA, 0x85, 0x2D, 0x60, 0xC4, 0x62, 0xA0, 0x83, 0xA2, 0xDD, - 0xA5, 0xD1, 0x2D, 0x60, 0xC2, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0x2D, 0x60, 0xA0, 0x61, 0xDD, 0x60, - 0x06, 0x64, 0xA1, 0xDB, 0x06, 0xA1, 0x2D, 0x60, 0xCA, 0x62, 0xA2, 0xD3, 0x2D, 0x60, 0xC2, 0x62, - 0x60, 0x40, 0xFD, 0xA0, 0xA2, 0xD3, 0x74, 0x03, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, - 0x03, 0x00, 0x01, 0x60, 0xF2, 0x63, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, 0xF2, 0x63, - 0x09, 0x00, 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, 0xF2, 0x63, 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, - 0x05, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x2D, 0x60, 0xCA, 0x62, 0xA2, 0xD3, 0x2D, 0x60, - 0xC4, 0x62, 0xFE, 0xA0, 0xA2, 0xD3, 0x54, 0x03, 0x00, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x61, 0x45, - 0x60, 0x40, 0x01, 0x2A, 0x04, 0x00, 0x00, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, - 0x02, 0x2A, 0x04, 0x00, 0x01, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x04, 0x2A, - 0x04, 0x00, 0x02, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x10, 0x2A, 0x04, 0x00, - 0x04, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, - 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0xD5, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xA5, 0xDD, 0x2D, 0x60, - 0xCA, 0x62, 0xA2, 0xD3, 0x2D, 0x60, 0xC6, 0x62, 0xFF, 0xA0, 0xA2, 0xD3, 0x21, 0x03, 0x00, 0x60, - 0x00, 0x63, 0x59, 0xDD, 0x61, 0x45, 0x60, 0x40, 0x01, 0x2A, 0x04, 0x00, 0x00, 0x60, 0xF2, 0x63, - 0x59, 0xD9, 0x59, 0xDD, 0x60, 0x40, 0x02, 0x2A, 0x04, 0x00, 0x01, 0x60, 0xF2, 0x63, 0x59, 0xD9, - 0x59, 0xDD, 0x60, 0x40, 0x04, 0x2A, 0x04, 0x00, 0x02, 0x60, 0xF2, 0x63, 0x59, 0xD9, 0x59, 0xDD, - 0xD5, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xA5, 0xDD, 0x2D, 0x60, 0xC8, 0x62, 0xA2, 0xD1, 0x59, 0xD9, - 0x2D, 0x60, 0xA0, 0x65, 0xD5, 0x84, 0xDD, 0x7F, 0xA5, 0xDB, 0x65, 0x44, 0x2E, 0x60, 0xB8, 0x62, - 0xA2, 0xDB, 0x2E, 0x60, 0xD4, 0x62, 0xA2, 0xDB, 0x0F, 0x60, 0xD4, 0x62, 0x00, 0x60, 0x04, 0x64, - 0xA2, 0xDB, 0xE8, 0x60, 0x2F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xD2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x7F, 0xF1, 0x2F, 0x60, 0x0E, 0x62, 0xA2, 0xD9, 0x2E, 0x60, - 0xB6, 0x65, 0xE9, 0x60, 0x58, 0x4D, 0x32, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, 0x00, 0xF4, 0x80, 0xF1, - 0x06, 0xF8, 0x2F, 0x60, 0x44, 0x62, 0xA2, 0xD3, 0x07, 0xFA, 0x2E, 0x60, 0xAE, 0x64, 0x40, 0x48, - 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xE8, 0x60, 0x58, 0x4D, 0xE8, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, - 0x3F, 0xFC, 0xDB, 0xFE, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x04, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xDC, 0xF3, 0x9B, 0xFE, 0xFD, 0xA0, 0x25, 0x04, 0x24, 0x02, 0x04, 0x64, 0x03, 0xFA, 0x00, 0xF4, - 0x09, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x3A, 0x1C, 0x00, 0x60, 0x43, 0x00, 0x36, 0x1C, 0x00, - 0xE0, 0xA0, 0xDA, 0x85, 0x16, 0x07, 0x2D, 0x60, 0x7A, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, 0xD3, 0x80, - 0xCB, 0x83, 0x0F, 0x02, 0x07, 0x0E, 0x59, 0xD3, 0xA5, 0xD0, 0xDA, 0x85, 0xD0, 0x80, 0xFF, 0xFF, - 0x08, 0x02, 0xF9, 0x1F, 0x13, 0x1E, 0xA5, 0xD0, 0x59, 0xD3, 0xFF, 0xFF, 0x90, 0x80, 0xFF, 0x22, - 0x0D, 0x00, 0xE8, 0x60, 0xDD, 0x78, 0xFF, 0xFF, 0x28, 0x60, 0x2A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x27, 0x60, 0xDA, 0x64, 0x02, 0x00, 0x2D, 0x60, 0x7A, 0x64, - 0x2E, 0x60, 0xCA, 0x62, 0xA2, 0xDB, 0x26, 0x46, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, - 0x31, 0xF2, 0x2E, 0xFA, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, - 0x81, 0xF1, 0x32, 0xF8, 0x82, 0xF1, 0x33, 0xF8, 0x83, 0xF1, 0x34, 0xF8, 0x50, 0x63, 0x2A, 0xFC, - 0xCC, 0xF3, 0x19, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0xA9, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x80, 0xF1, - 0x06, 0xF8, 0x2F, 0x60, 0x44, 0x62, 0xA2, 0xD3, 0x07, 0xFA, 0x2E, 0x60, 0xD2, 0x65, 0xE9, 0x60, - 0x58, 0x4D, 0x32, 0x78, 0xFF, 0xFF, 0x2E, 0x60, 0xCA, 0x64, 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, - 0x00, 0x64, 0xE8, 0x60, 0x58, 0x4D, 0xE8, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xFC, 0x24, 0x60, - 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, - 0xD2, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x00, 0x64, 0x94, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, - 0x2F, 0x60, 0x46, 0x62, 0xA2, 0xDB, 0xCD, 0x81, 0x28, 0xD3, 0x5A, 0x88, 0xDC, 0x83, 0x39, 0x18, - 0xFB, 0x03, 0x61, 0x40, 0x7F, 0x3A, 0x07, 0x00, 0x2F, 0x60, 0x46, 0x62, 0xA2, 0xD3, 0x03, 0x61, - 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, 0xA3, 0xD1, 0xDD, 0x81, 0xA1, 0xD8, 0x61, 0x40, - 0x7F, 0x3A, 0x09, 0x00, 0x20, 0xFE, 0x2F, 0x60, 0x46, 0x62, 0xA2, 0xD3, 0x03, 0x61, 0x7C, 0xA4, - 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, 0xCF, 0x83, 0xA3, 0xD3, 0xDD, 0x81, 0xA1, 0xDA, 0xFF, 0xB4, - 0x00, 0x7F, 0x15, 0x03, 0xDB, 0x83, 0x61, 0x40, 0x7F, 0x3A, 0x0B, 0x00, 0x20, 0xFE, 0x60, 0x45, - 0x2F, 0x60, 0x46, 0x62, 0xA2, 0xD3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x65, 0x44, 0x00, 0xF4, - 0x60, 0xFE, 0xA3, 0xD1, 0xDF, 0x83, 0xDD, 0x81, 0xCC, 0x84, 0xA1, 0xD8, 0xEC, 0x02, 0x20, 0xFE, - 0xC3, 0x01, 0x2F, 0x60, 0x46, 0x62, 0xA2, 0xD1, 0xFD, 0xA1, 0xFF, 0xB1, 0xC1, 0x83, 0xA2, 0xDD, - 0x2D, 0x58, 0xFF, 0xFF, 0x67, 0x5C, 0x1B, 0x60, 0xC6, 0x61, 0xA1, 0xD3, 0xA5, 0xD9, 0x12, 0x18, - 0x60, 0x43, 0x2F, 0x60, 0x14, 0x64, 0xA5, 0xDB, 0x60, 0xFE, 0xA0, 0xDD, 0xFF, 0xFF, 0x20, 0xFE, - 0xDC, 0x84, 0xCF, 0x83, 0xE3, 0x83, 0x59, 0xD1, 0xDC, 0x84, 0x60, 0xFE, 0xA0, 0xD9, 0xFF, 0xFF, - 0x20, 0xFE, 0xF9, 0x1F, 0x2D, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x29, 0x00, - 0x45, 0x48, 0x00, 0x60, 0x10, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x21, 0x03, - 0xF2, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x00, 0x60, 0x48, 0x61, 0x28, 0x44, 0x59, 0xDA, 0x03, 0x64, - 0x38, 0x43, 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x39, 0x44, 0x59, 0xDA, 0x28, 0x60, - 0x2E, 0x64, 0xA0, 0xD3, 0x59, 0xDA, 0x07, 0x64, 0x23, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x64, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x1C, 0x00, 0x45, 0x48, - 0x00, 0x60, 0x06, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x14, 0x03, 0x02, 0x64, - 0x23, 0xFA, 0xF2, 0x60, 0x00, 0x64, 0x5A, 0xDA, 0x28, 0x44, 0x5A, 0xDA, 0xFF, 0xFF, 0x24, 0x60, - 0x74, 0x62, 0x24, 0x60, 0x64, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x32, 0x40, 0x40, 0x26, - 0x3E, 0x00, 0x9D, 0xF3, 0x67, 0x43, 0xDC, 0x84, 0xCC, 0x84, 0x39, 0x03, 0x60, 0x46, 0x0A, 0x02, - 0x9D, 0xFD, 0x00, 0x60, 0x46, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x9D, 0xFB, 0x2E, 0x03, 0x46, 0x4B, 0x27, 0x60, 0x72, 0x61, 0x18, 0x64, 0x23, 0xFA, 0xF1, 0x60, - 0x00, 0x64, 0x24, 0xFA, 0x4A, 0x65, 0xA2, 0xFF, 0x2C, 0x63, 0x00, 0x64, 0x59, 0xD1, 0xA2, 0xDB, - 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF7, 0x1F, 0x12, 0x63, - 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, - 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x64, 0x64, 0xA2, 0xDB, 0x2B, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0xA6, 0xFE, 0x00, 0x64, 0x9D, 0xFB, 0xA3, 0xFF, - 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0xA6, 0xFE, 0xB8, 0x05, 0xA7, 0xFE, 0x12, 0x05, 0xA5, 0xFE, - 0x03, 0x04, 0xEA, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0xA4, 0xFE, 0xF2, 0x04, 0x0F, 0x60, 0xDE, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xBF, 0x60, 0xE7, 0x78, - 0xFF, 0xFF, 0x36, 0x45, 0x20, 0x60, 0x08, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xF3, - 0xFF, 0xFF, 0x01, 0xB0, 0x00, 0x64, 0x41, 0x03, 0x9F, 0xFB, 0x31, 0x44, 0xE8, 0xB4, 0x40, 0x51, - 0x6A, 0x44, 0xFF, 0xFF, 0x80, 0x26, 0xFC, 0x01, 0x61, 0xFF, 0x62, 0xFF, 0x10, 0x60, 0x1A, 0x62, - 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x34, 0x60, 0x58, 0x4E, - 0x64, 0x78, 0xFF, 0xFF, 0x1E, 0x60, 0xBC, 0x62, 0x1E, 0x60, 0xBE, 0x64, 0xA2, 0xDB, 0x00, 0x64, - 0x4A, 0xDB, 0x01, 0x60, 0xFE, 0x63, 0x1C, 0x60, 0xB8, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, - 0x1C, 0x63, 0x10, 0x60, 0x5C, 0x64, 0x58, 0xD1, 0xFF, 0xFF, 0x08, 0x1B, 0xFC, 0x1F, 0x00, 0x60, - 0x62, 0x63, 0x1B, 0x60, 0xC4, 0x64, 0x00, 0x7C, 0x58, 0xD9, 0xFE, 0x1F, 0x1C, 0x60, 0xB4, 0x63, - 0xA3, 0xD3, 0xFF, 0xFF, 0x04, 0xB0, 0xFF, 0xFF, 0x05, 0x03, 0x02, 0x65, 0xE9, 0x60, 0x58, 0x4E, - 0x7B, 0x78, 0xFF, 0xFF, 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0xEA, 0x60, 0xC5, 0x78, 0xFF, 0xFF, - 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x74, 0x00, 0x28, 0x60, 0x50, 0x63, 0xBD, 0xD3, 0xBD, 0xD1, 0xBD, 0xD1, 0xB0, 0x84, 0xB0, 0x84, - 0xFF, 0xFF, 0x07, 0x02, 0x8C, 0xFB, 0x31, 0x44, 0xFE, 0xB4, 0x40, 0x51, 0x0D, 0x64, 0x05, 0xFB, - 0x64, 0x00, 0x28, 0xF3, 0x9F, 0xF1, 0x60, 0x47, 0x64, 0x41, 0x07, 0xB1, 0x07, 0xB4, 0x08, 0x24, - 0x67, 0x4C, 0x50, 0xFB, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0xA1, 0x80, - 0xB1, 0x83, 0x53, 0x02, 0x9F, 0xFD, 0x28, 0x60, 0x44, 0x62, 0xA2, 0xD3, 0xE5, 0xFB, 0x7F, 0xFB, - 0x24, 0x60, 0x5E, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x46, 0x5E, 0x31, 0x44, - 0x01, 0xBC, 0x40, 0x51, 0xD8, 0xF3, 0x01, 0x63, 0x03, 0xA8, 0x4E, 0xFD, 0x05, 0x02, 0x02, 0x63, - 0x14, 0x60, 0x00, 0x64, 0xDB, 0xFB, 0x0C, 0x00, 0x02, 0xA8, 0x01, 0x63, 0x03, 0x03, 0x0A, 0x60, - 0x00, 0x64, 0x03, 0x00, 0x02, 0x63, 0x14, 0x60, 0x00, 0x64, 0xDB, 0xFB, 0x00, 0x64, 0x4E, 0xFB, - 0x4B, 0xFD, 0xA9, 0xF5, 0xFF, 0xFF, 0x0E, 0xF0, 0x0F, 0x60, 0xA2, 0x65, 0x28, 0x60, 0xD2, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0xFE, 0xA0, 0x03, 0xA8, 0x11, 0x06, 0x79, 0xF1, 0x06, 0x02, 0x64, 0x44, - 0x08, 0x2A, 0x09, 0x00, 0x06, 0x64, 0x44, 0xD3, 0x0D, 0x00, 0x64, 0x44, 0x20, 0x2A, 0x03, 0x00, - 0x0A, 0x64, 0x44, 0xD3, 0x07, 0x00, 0x01, 0x64, 0x44, 0xD3, 0x04, 0x00, 0xE8, 0x84, 0xE0, 0x84, - 0x44, 0xD3, 0x00, 0x00, 0x0E, 0xFA, 0xED, 0xE2, 0x0F, 0x4E, 0xC8, 0x60, 0x58, 0x4F, 0x15, 0x78, - 0xFF, 0xFF, 0x0E, 0x4F, 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0xD7, 0xFE, 0xBF, 0x60, 0xE7, 0x78, - 0xFF, 0xFF, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xF3, 0x01, 0x24, 0x60, 0x46, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x0E, 0xF2, 0x4D, 0x03, 0x60, 0x40, 0xF0, 0x37, 0x3A, 0x00, 0xFF, 0x37, 0x2F, 0x00, 0xFD, 0x37, - 0x27, 0x00, 0xF8, 0x37, 0x0A, 0x00, 0x60, 0x47, 0xFF, 0xB5, 0x0F, 0x60, 0xD2, 0x62, 0x46, 0xD1, - 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x24, 0x60, 0x74, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xDA, 0x01, - 0x06, 0xB4, 0xFD, 0x7F, 0x0E, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x4C, 0x64, 0xA2, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF9, 0xFE, 0xCA, 0x01, - 0x23, 0xF0, 0x60, 0x40, 0x04, 0x26, 0xEC, 0x1B, 0x02, 0x26, 0xEA, 0x18, 0xA2, 0xFF, 0x02, 0xF0, - 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xB0, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0xB0, 0xFB, 0x24, 0x60, - 0x74, 0x64, 0x40, 0x4B, 0x2C, 0x60, 0x58, 0x4D, 0xD8, 0x78, 0xFF, 0xFF, 0xB3, 0x01, 0xAC, 0xFE, - 0x09, 0x05, 0xAD, 0xFE, 0x10, 0x05, 0xAE, 0xFE, 0xAD, 0x05, 0xAF, 0xFE, 0x3A, 0x05, 0xBF, 0x60, - 0xE7, 0x78, 0xFF, 0xFF, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x20, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xF4, 0x01, 0x10, 0x60, 0x32, 0x65, 0x0B, 0x61, 0x07, 0x00, 0xA2, 0xDD, - 0x58, 0x4F, 0x64, 0x58, 0xFF, 0xFF, 0x00, 0xB9, 0xFF, 0xFF, 0x08, 0x03, 0x00, 0x63, 0xA5, 0xD1, - 0x5A, 0xD3, 0xDA, 0x85, 0x00, 0xA8, 0xCD, 0x81, 0xF2, 0x02, 0xF8, 0x02, 0xE0, 0x01, 0x0F, 0x60, - 0xCE, 0x62, 0x10, 0x60, 0x12, 0x65, 0xEB, 0x60, 0x5F, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xD6, 0x80, - 0xFF, 0xFF, 0x04, 0x03, 0x5A, 0xDB, 0x5A, 0xDB, 0x5A, 0xDD, 0xF9, 0x01, 0x10, 0x60, 0x30, 0x65, - 0x00, 0x64, 0x5A, 0xDB, 0xD6, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x5A, 0xDD, 0xFB, 0x01, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xD2, 0x64, 0x40, 0x41, 0x0F, 0x60, 0xD0, 0x63, 0xA3, 0xD1, 0x00, 0x64, - 0xD0, 0x80, 0x0B, 0x61, 0x08, 0x03, 0xBD, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0xB0, 0x84, 0xCD, 0x81, - 0xA3, 0xDB, 0x06, 0xA3, 0xF9, 0x02, 0x10, 0x60, 0x1A, 0x63, 0xA3, 0xD1, 0x00, 0x64, 0xD0, 0x80, - 0x0C, 0x61, 0x19, 0x03, 0xBD, 0xDB, 0x64, 0x44, 0xFE, 0xA3, 0x02, 0xA3, 0xCD, 0x81, 0xE8, 0x84, - 0xE3, 0x03, 0x02, 0x05, 0xE1, 0x03, 0xF9, 0x01, 0x99, 0xFB, 0x9B, 0xFD, 0x61, 0x5C, 0xA3, 0xD3, - 0x9A, 0xF9, 0x03, 0x18, 0x58, 0x4F, 0x60, 0x58, 0xFF, 0xFF, 0x9B, 0xF3, 0x9A, 0xF1, 0x60, 0x43, - 0x99, 0xF3, 0x64, 0x41, 0xEA, 0x01, 0x21, 0x43, 0x10, 0x60, 0x14, 0x65, 0xD7, 0x80, 0xBD, 0xD1, - 0xBD, 0xD3, 0x03, 0x02, 0xBF, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0xA0, 0x84, 0xBD, 0xD1, 0x43, 0x41, - 0xF5, 0x03, 0xEB, 0x60, 0x64, 0x64, 0x64, 0x58, 0x40, 0x4F, 0x2A, 0xF0, 0x83, 0x60, 0xFF, 0x65, - 0x64, 0x47, 0x03, 0x2B, 0x01, 0x00, 0x14, 0x00, 0x03, 0x26, 0x03, 0xAC, 0x60, 0x47, 0xA4, 0x84, - 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x64, 0x41, - 0xEB, 0xF3, 0x2F, 0xFA, 0x60, 0x43, 0xEC, 0xF3, 0x30, 0xFA, 0xED, 0xF1, 0x31, 0xF8, 0x19, 0x00, - 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, - 0x2E, 0xFA, 0x36, 0xF2, 0x32, 0xFA, 0x37, 0xF2, 0x33, 0xFA, 0x38, 0xF2, 0x34, 0xFA, 0xEB, 0xF3, - 0x2F, 0xFA, 0x36, 0xFA, 0xEC, 0xF3, 0x30, 0xFA, 0x37, 0xFA, 0xED, 0xF3, 0x31, 0xFA, 0x38, 0xFA, - 0x64, 0x41, 0x1C, 0xF2, 0x13, 0xFA, 0x00, 0xF4, 0x0D, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, - 0x18, 0x00, 0x81, 0x67, 0xA2, 0xDA, 0xEC, 0x60, 0x58, 0x4E, 0x5A, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x3F, 0xFC, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF0, 0x42, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x04, 0x3F, 0xFA, - 0x07, 0xF2, 0xA9, 0xF1, 0x01, 0x1B, 0x07, 0xF8, 0x1C, 0xF2, 0x13, 0xFA, 0x26, 0xF2, 0x27, 0xF0, - 0x60, 0x47, 0x00, 0xF4, 0x1F, 0xFA, 0x64, 0x47, 0x20, 0xFA, 0x61, 0x44, 0x21, 0xFA, 0x01, 0x67, - 0x0D, 0xFA, 0x10, 0x61, 0x28, 0x60, 0x06, 0x64, 0x1E, 0x63, 0x58, 0xD1, 0xCD, 0x81, 0xBD, 0xD8, - 0xFC, 0x02, 0xBB, 0xF1, 0xD8, 0xF1, 0x64, 0x5E, 0x64, 0x5F, 0x44, 0x63, 0xBD, 0xDA, 0x28, 0x60, - 0x00, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x4A, 0xD3, 0x60, 0x45, - 0x60, 0x40, 0x01, 0x36, 0x03, 0x64, 0x02, 0x36, 0x01, 0x64, 0xB4, 0x84, 0x06, 0xA2, 0xA2, 0xD1, - 0xBD, 0xDA, 0x64, 0x47, 0xBD, 0xDA, 0xD5, 0xF3, 0xD6, 0xF1, 0x60, 0x47, 0xBD, 0xDA, 0x64, 0x47, - 0xE3, 0xF1, 0xBD, 0xDA, 0x64, 0x44, 0xBD, 0xDA, 0x26, 0x46, 0x00, 0x64, 0x23, 0xF0, 0x3B, 0xF0, - 0x64, 0x40, 0x10, 0x2A, 0x06, 0x00, 0xC0, 0x67, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0x10, 0xBC, 0x3E, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x34, 0x64, 0xA2, 0xDB, 0x26, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0x00, 0x66, 0x46, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0xB4, 0xF3, 0x1F, 0xFA, 0x32, 0x47, 0x07, 0xFA, 0x24, 0x7E, 0x02, 0x7F, - 0x08, 0xFA, 0xD8, 0xF1, 0x09, 0xF8, 0x01, 0x60, 0x01, 0x64, 0x0A, 0xFA, 0x01, 0x64, 0x0B, 0xFA, - 0x24, 0x60, 0x74, 0x62, 0x18, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x0A, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x52, 0x63, 0x2E, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0x2A, 0x61, 0xAE, 0x60, - 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x5E, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x67, 0x44, - 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0x32, 0xFA, 0x33, 0xFA, 0x34, 0xFA, 0x12, 0x60, 0x80, 0x64, - 0xA9, 0xF1, 0x0E, 0xFA, 0x07, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x1A, 0x60, 0x4E, 0x63, 0xA3, 0xDB, - 0x06, 0xA3, 0x10, 0x60, 0x38, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, - 0x10, 0x60, 0x36, 0x62, 0xEF, 0x60, 0xA9, 0x64, 0xA2, 0xDB, 0x1A, 0x60, 0x5A, 0x63, 0x00, 0x64, - 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x3C, 0x64, 0xBD, 0xDB, 0x08, 0x64, 0xBD, 0xDB, 0x06, 0x64, - 0xA3, 0xDB, 0x10, 0x60, 0x3A, 0x62, 0xEF, 0x60, 0xB3, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x22, 0x62, - 0xEF, 0x60, 0x93, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x31, 0x60, 0x2A, 0x62, 0xA2, 0xDB, 0x2F, 0x58, - 0xFF, 0xFF, 0x5E, 0xF5, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, - 0xCC, 0xF1, 0x19, 0xF8, 0x30, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x00, 0x63, 0x8A, 0xFD, 0x1C, 0x60, 0x96, 0x65, 0xA5, 0xDD, 0x19, 0x60, 0x86, 0x63, - 0x88, 0xFD, 0x89, 0xFD, 0x20, 0x40, 0x10, 0x2B, 0x05, 0x00, 0x1F, 0x60, 0x82, 0x61, 0xA1, 0xD3, - 0xFF, 0xFF, 0x59, 0x18, 0x5E, 0xF5, 0x40, 0x64, 0x2A, 0xFA, 0x54, 0xF3, 0x00, 0xF4, 0x60, 0x43, - 0xBD, 0xD1, 0x04, 0x65, 0x64, 0x47, 0xA5, 0xDA, 0x64, 0x41, 0xDD, 0x81, 0xE9, 0x81, 0x62, 0x44, - 0x04, 0x03, 0xBD, 0xD1, 0xCD, 0x81, 0x58, 0xD8, 0xFC, 0x02, 0x58, 0x8B, 0x2D, 0x60, 0x28, 0x63, - 0xA3, 0xD1, 0x2B, 0x44, 0xC8, 0x84, 0x64, 0x41, 0xFF, 0xB1, 0x61, 0x45, 0x03, 0xA1, 0xE9, 0x81, - 0x41, 0x4C, 0xBD, 0xD1, 0xCD, 0x81, 0x58, 0xD8, 0xFC, 0x02, 0x2B, 0xD2, 0x2B, 0x43, 0x60, 0x47, - 0x01, 0x7E, 0x54, 0xF1, 0xA3, 0xDA, 0xA4, 0xD3, 0xCB, 0x83, 0x44, 0x8B, 0xF8, 0x84, 0x2C, 0x41, - 0x0C, 0x04, 0xBE, 0xD2, 0xFF, 0xFF, 0x60, 0x47, 0xBE, 0xDA, 0x00, 0x7E, 0xA3, 0xD2, 0x60, 0x45, - 0x00, 0x7F, 0xB4, 0x84, 0xCD, 0x81, 0xBD, 0xDA, 0xF4, 0x02, 0x5E, 0xF5, 0x2B, 0x44, 0x04, 0xA4, - 0x3F, 0xFA, 0x7F, 0xF3, 0x7E, 0xFB, 0x1F, 0x60, 0x84, 0x61, 0x01, 0x64, 0x54, 0xF1, 0xA1, 0xDB, - 0x7F, 0xFB, 0xA4, 0xD3, 0x04, 0x65, 0x53, 0xF3, 0x01, 0x18, 0x0C, 0x65, 0xF3, 0xB4, 0xB4, 0x84, - 0x53, 0xFB, 0x02, 0xB0, 0xFF, 0xFF, 0x16, 0x03, 0x7F, 0xF3, 0xFF, 0xFF, 0x60, 0x47, 0x0F, 0xB4, - 0x7F, 0xFB, 0x01, 0x03, 0x0F, 0x00, 0xEE, 0x60, 0x4F, 0x78, 0xFF, 0xFF, 0x53, 0xF1, 0x7F, 0xF3, - 0x64, 0x40, 0x02, 0x26, 0xF8, 0x01, 0xF3, 0xA0, 0x04, 0xA4, 0x01, 0x04, 0xF1, 0xA4, 0x10, 0x36, - 0xF2, 0x01, 0x7F, 0xFB, 0x20, 0x40, 0x10, 0x2B, 0x12, 0x00, 0x7F, 0xF3, 0x1F, 0x60, 0x82, 0x61, - 0xA1, 0xD1, 0xCC, 0x84, 0x01, 0x61, 0x08, 0x24, 0x03, 0x00, 0xE1, 0x81, 0xCC, 0x84, 0xFB, 0x01, - 0xA1, 0x84, 0x53, 0xF1, 0xE4, 0x03, 0x1F, 0x60, 0x84, 0x61, 0xA1, 0xDB, 0x19, 0x00, 0x53, 0xF3, - 0xFF, 0xFF, 0x10, 0xB0, 0x12, 0x60, 0x26, 0x63, 0x02, 0x03, 0x10, 0x60, 0x5C, 0x63, 0x31, 0x60, - 0x2A, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0x0C, 0x1B, 0x7F, 0xF3, 0xFF, 0xFF, 0xE0, 0x85, 0x47, 0xD3, - 0x53, 0xF1, 0x01, 0xB0, 0x06, 0xB0, 0xCB, 0x03, 0x64, 0x40, 0x03, 0x26, 0x01, 0x00, 0xC7, 0x03, - 0x7F, 0xF3, 0x01, 0x61, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, 0xFB, 0x01, 0xBA, 0xF3, - 0x61, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0xBB, 0x03, 0x31, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, - 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0B, 0x04, 0x0F, 0x60, 0xE6, 0x62, 0x40, 0x60, - 0x00, 0x64, 0xA2, 0xDB, 0xED, 0x60, 0x70, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x7F, 0xF1, 0x24, 0x60, 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x0F, 0x60, 0xE6, 0x62, 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xED, 0x60, 0xA3, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x5E, 0xF5, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x28, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x64, 0x51, 0xFB, 0x0F, 0x60, 0xE6, 0x62, - 0x00, 0x60, 0x01, 0x64, 0xA2, 0xDB, 0xED, 0x60, 0xCD, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, - 0x33, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x34, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xC6, 0xF1, 0x1A, 0x60, 0x52, 0x62, 0xA2, 0xD9, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x4E, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0xC7, 0xF1, 0x1A, 0x60, 0x5E, 0x62, 0xA2, 0xD9, 0x24, 0x60, 0xA8, 0x62, 0xA2, 0xD3, - 0xFF, 0xFF, 0xFD, 0x1B, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x5A, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x0F, 0x60, 0xE6, 0x62, 0x00, 0x60, 0x08, 0x64, 0xA2, 0xDB, - 0xED, 0x60, 0xFE, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x51, 0xF1, 0x0F, 0x60, - 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x64, 0x40, 0xFF, 0x26, 0x03, 0x00, 0xED, 0x60, 0x36, 0x78, - 0xFF, 0xFF, 0x02, 0x0A, 0x00, 0x64, 0x51, 0xFB, 0xC8, 0xF1, 0x1A, 0x60, 0x5E, 0x62, 0xA2, 0xD9, - 0x0F, 0x60, 0xE6, 0x62, 0x00, 0x60, 0x0C, 0x64, 0xA2, 0xDB, 0xEE, 0x60, 0x24, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x5A, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0xA2, 0xD1, 0x00, 0x60, - 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0C, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x5A, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x14, 0x00, - 0xFF, 0x60, 0xF7, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x51, 0xF3, 0xDB, 0x0A, 0x00, 0xA0, 0x00, 0x64, - 0x02, 0x03, 0x51, 0xFB, 0xD6, 0x01, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x4E, 0x64, 0xA2, 0xDB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xED, 0x60, 0x36, 0x78, 0xFF, 0xFF, 0x35, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0x4E, 0x64, 0xA2, 0xDB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x53, 0xF3, 0xFF, 0xFF, 0xE3, 0xB4, 0x53, 0xFB, 0x1F, 0x60, - 0x80, 0x64, 0xA0, 0xD3, 0xFF, 0xFF, 0xFE, 0xB4, 0xA2, 0xDB, 0x00, 0x64, 0x31, 0x60, 0x2A, 0x62, - 0xA2, 0xDB, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0E, 0x04, 0x32, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0F, 0x60, 0xE6, 0x62, 0x40, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xEE, 0x60, - 0x69, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7E, 0xF1, 0x7F, 0xF9, 0x24, 0x60, - 0x9A, 0x62, 0xA2, 0xD9, 0x1E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x0F, 0x60, 0xE6, 0x62, - 0x20, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xEE, 0x60, 0x91, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xBE, 0xFE, 0x0F, 0x60, 0xD0, 0x62, 0xA2, 0xD1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x1A, 0x60, 0x06, 0x63, 0x1C, 0x61, 0x00, 0x64, 0xCD, 0x81, 0xBD, 0xDB, - 0xFD, 0x02, 0x12, 0x60, 0x46, 0x61, 0x8A, 0xF3, 0x61, 0x43, 0xC6, 0xA5, 0x47, 0xD1, 0x0F, 0x04, - 0xBE, 0xD5, 0x1A, 0x60, 0x02, 0x63, 0xC3, 0x83, 0xC3, 0x83, 0xC3, 0x83, 0x43, 0xD3, 0xBE, 0xD1, - 0xDC, 0x84, 0xA3, 0xDB, 0x66, 0x44, 0xC0, 0x84, 0xBE, 0xDB, 0x65, 0x44, 0xED, 0x01, 0x1A, 0x60, - 0x06, 0x63, 0x0E, 0x61, 0x41, 0x4B, 0xBD, 0xD3, 0xBD, 0xD1, 0x00, 0xBD, 0x64, 0x41, 0x19, 0x03, - 0x01, 0xA8, 0x61, 0x44, 0x02, 0xA8, 0x15, 0x03, 0x02, 0x02, 0xE9, 0x84, 0x12, 0x00, 0x65, 0x47, - 0x60, 0x45, 0x61, 0x44, 0x09, 0x61, 0xCD, 0x81, 0xE0, 0x84, 0xFF, 0x23, 0xFC, 0x01, 0x02, 0x24, - 0xC4, 0x84, 0x02, 0x28, 0xD4, 0x84, 0xCD, 0x81, 0x01, 0x0E, 0x01, 0xBC, 0x02, 0x03, 0xE0, 0x84, - 0xF6, 0x01, 0x00, 0x7F, 0x2B, 0x41, 0x4D, 0x8B, 0xBF, 0xDB, 0xDD, 0x02, 0x12, 0x60, 0x46, 0x61, - 0x8A, 0xF3, 0x61, 0x43, 0xC6, 0xA5, 0x47, 0xD1, 0x0A, 0x04, 0xDA, 0x86, 0x1A, 0x60, 0x04, 0x63, - 0xC3, 0x83, 0xC3, 0x83, 0xC3, 0x83, 0x43, 0xD1, 0xA6, 0xD9, 0x65, 0x44, 0xF2, 0x01, 0x36, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x53, 0xF3, 0x8A, 0xF1, 0xF3, 0xB4, 0x53, 0xFB, 0x12, 0x60, 0x46, 0x63, - 0xC3, 0x85, 0x45, 0x4A, 0x19, 0x60, 0x86, 0x65, 0x89, 0xF3, 0x45, 0x4C, 0x40, 0x48, 0x20, 0x40, - 0x20, 0x2A, 0x02, 0x00, 0x00, 0x65, 0x45, 0x4B, 0x2A, 0x45, 0xD7, 0x80, 0x02, 0x65, 0x23, 0x05, - 0x47, 0xD1, 0x02, 0x65, 0x47, 0xD3, 0x0A, 0x65, 0xD0, 0x81, 0x47, 0xD3, 0x01, 0x05, 0x00, 0x61, - 0xF2, 0xA3, 0x01, 0xB0, 0x61, 0x44, 0x11, 0x03, 0x20, 0x40, 0x20, 0x2A, 0x08, 0x00, 0xF3, 0x60, - 0x58, 0x4E, 0x3E, 0x78, 0xFF, 0xFF, 0x2B, 0x44, 0x02, 0xA4, 0x40, 0x4B, 0x61, 0x44, 0x2C, 0x42, - 0xA2, 0xDB, 0x5A, 0xDD, 0x5A, 0x8C, 0x3A, 0xA3, 0xDF, 0x01, 0x28, 0x42, 0x4A, 0xDD, 0x4A, 0xDB, - 0x42, 0x48, 0x3A, 0xA3, 0xD9, 0x01, 0x28, 0x44, 0x88, 0xFB, 0x88, 0xF1, 0x19, 0x60, 0x86, 0x63, - 0x44, 0x48, 0x28, 0x45, 0xD7, 0x80, 0xA3, 0xD1, 0x15, 0x05, 0x04, 0x65, 0x46, 0xD3, 0x28, 0x45, - 0xD6, 0x80, 0xD0, 0x80, 0x02, 0x04, 0x04, 0xA3, 0xF5, 0x01, 0xF7, 0x06, 0x62, 0x46, 0xA2, 0xD9, - 0xA3, 0xDB, 0x5B, 0xD3, 0x66, 0x42, 0x5A, 0xD1, 0xA2, 0xDB, 0xA3, 0xD9, 0xFE, 0xA3, 0xA3, 0xD1, - 0x66, 0x42, 0xEB, 0x01, 0x88, 0xF3, 0x89, 0xF1, 0x60, 0x43, 0x44, 0x48, 0x28, 0x45, 0xD7, 0x80, - 0xA3, 0xD1, 0x15, 0x05, 0x04, 0x65, 0x46, 0xD3, 0x28, 0x45, 0xD6, 0x80, 0xD0, 0x80, 0x02, 0x04, - 0x04, 0xA3, 0xF5, 0x01, 0xF7, 0x06, 0x62, 0x46, 0xA2, 0xD9, 0xA3, 0xDB, 0x5B, 0xD3, 0x66, 0x42, - 0x5A, 0xD1, 0xA2, 0xDB, 0xA3, 0xD9, 0xFE, 0xA3, 0xA3, 0xD1, 0x66, 0x42, 0xEB, 0x01, 0x0F, 0x60, - 0xD0, 0x62, 0xA2, 0xD1, 0x10, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x20, 0x40, - 0x80, 0x2B, 0x17, 0x00, 0x00, 0x60, 0x04, 0x61, 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, - 0x01, 0x64, 0x23, 0xFA, 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x64, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xFA, 0xFE, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0x3E, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x3F, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x24, 0x60, 0xAA, 0x62, - 0x1A, 0x60, 0x4E, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, - 0x53, 0xFB, 0x0F, 0x60, 0xE4, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0xBE, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0F, 0x60, 0xE4, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x08, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x79, 0xFB, 0xAC, 0x85, 0x60, 0x41, - 0x20, 0x03, 0x01, 0x60, 0x00, 0x63, 0x08, 0x64, 0xE9, 0x81, 0xCC, 0x84, 0x02, 0x24, 0xDF, 0x83, - 0xFB, 0x02, 0x2D, 0x60, 0x28, 0x64, 0xA0, 0xDD, 0x65, 0x41, 0x2D, 0x60, 0x2A, 0x63, 0x0F, 0x60, - 0xC0, 0x64, 0xE9, 0x81, 0x58, 0xD1, 0xFD, 0x04, 0xA3, 0xD9, 0x0B, 0x03, 0x58, 0xD1, 0xE9, 0x81, - 0x60, 0x45, 0xFC, 0x04, 0xA3, 0xD1, 0x64, 0x47, 0xB0, 0x84, 0xBD, 0xDB, 0x00, 0xB9, 0x65, 0x44, - 0xF0, 0x02, 0x2E, 0x58, 0xFF, 0xFF, 0x3C, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x20, 0x40, 0x90, 0x2B, - 0x03, 0x00, 0xF2, 0x60, 0xE5, 0x78, 0xFF, 0xFF, 0x53, 0xF3, 0x8A, 0xF1, 0x04, 0xB0, 0x07, 0x60, - 0x40, 0x64, 0xD0, 0x80, 0x21, 0x03, 0x20, 0x06, 0x26, 0x46, 0x8A, 0xF1, 0x12, 0x60, 0x46, 0x63, - 0xC3, 0x83, 0x7F, 0xF3, 0x26, 0xF0, 0xBD, 0xDB, 0x64, 0x44, 0x00, 0x7F, 0xBD, 0xDB, 0x64, 0x47, - 0x00, 0x7F, 0xBD, 0xDB, 0x32, 0xF0, 0xBD, 0xD9, 0x33, 0xF0, 0xBD, 0xD9, 0x34, 0xF0, 0xBD, 0xD9, - 0x00, 0xF4, 0x0D, 0xF0, 0xBD, 0xD9, 0x0E, 0xF0, 0xBD, 0xD9, 0x00, 0x64, 0x0F, 0xF0, 0xA3, 0xDB, - 0x64, 0x47, 0x60, 0x45, 0x00, 0x37, 0x03, 0x00, 0xF2, 0x60, 0xDF, 0x78, 0xFF, 0xFF, 0xBD, 0xDB, - 0xE0, 0xA0, 0x1F, 0x61, 0x00, 0xB8, 0xF8, 0x07, 0xF7, 0x03, 0x60, 0xFE, 0xDD, 0x81, 0xA1, 0xD0, - 0xCC, 0x84, 0xBD, 0xD9, 0xFB, 0x02, 0x65, 0x40, 0x01, 0x26, 0xDF, 0x83, 0x20, 0xFE, 0x2D, 0x60, - 0xE4, 0x62, 0xA2, 0xDD, 0x60, 0xFE, 0xDD, 0x81, 0xA1, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, - 0x04, 0x00, 0xDD, 0x81, 0xA1, 0xD0, 0xFF, 0xFF, 0xC1, 0x81, 0xDD, 0x81, 0xA1, 0xD0, 0xFF, 0xFF, - 0x64, 0x40, 0x03, 0x36, 0x03, 0x00, 0xF2, 0x60, 0xDF, 0x78, 0xFF, 0xFF, 0xD9, 0x81, 0xA1, 0xD0, - 0x7F, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0x20, 0xFE, 0x08, 0x24, 0x03, 0x00, 0xF2, 0x60, 0xDF, 0x78, - 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, 0x1D, 0x61, - 0x00, 0x60, 0x80, 0x65, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, - 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x2D, 0x03, 0x17, 0x03, 0xCF, 0x83, 0x61, 0x44, - 0x80, 0xA0, 0x28, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, - 0x81, 0xA1, 0x20, 0x03, 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, 0xDD, 0x81, 0xE4, 0x03, 0xF7, 0x01, - 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, 0xE4, 0x03, 0xF2, 0x01, 0x01, 0x60, 0xFF, 0x63, 0x46, 0x48, - 0x41, 0x4A, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, 0x64, 0x44, 0xDD, 0x81, 0xA1, 0xD0, - 0xDF, 0x83, 0xA3, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, 0x7F, 0xA1, 0xF7, 0x04, 0x00, 0xF4, - 0x03, 0x61, 0xF4, 0x01, 0x20, 0xFE, 0x00, 0xBB, 0x02, 0x60, 0x00, 0x61, 0x45, 0x03, 0x60, 0xFE, - 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x3A, 0x3E, 0x00, 0xDD, 0x81, 0xA1, 0xD1, - 0xFF, 0xFF, 0x64, 0x40, 0x60, 0x3A, 0x38, 0x00, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, - 0x1D, 0x3A, 0x32, 0x00, 0xDD, 0x81, 0xA1, 0xD3, 0xFF, 0xFF, 0x20, 0xFE, 0xFF, 0xB4, 0x1C, 0x60, - 0x96, 0x65, 0xA5, 0xD3, 0x60, 0x5C, 0x02, 0xA4, 0xA5, 0xDB, 0xFE, 0xA5, 0x1A, 0x60, 0xC6, 0x64, - 0x44, 0xD9, 0x00, 0x7C, 0x60, 0xFE, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x1B, 0x60, - 0x06, 0x64, 0xC4, 0x82, 0x64, 0x44, 0xFF, 0xB4, 0xA2, 0xDB, 0x12, 0x60, 0x48, 0x65, 0x8A, 0xF3, - 0xFF, 0xFF, 0xC4, 0x82, 0x64, 0x44, 0xA2, 0xD3, 0xFF, 0xB5, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x05, - 0x65, 0x44, 0xA2, 0xDB, 0x09, 0x00, 0x20, 0xFE, 0x28, 0x46, 0x2A, 0x41, 0xFF, 0xB1, 0x60, 0xFE, - 0x82, 0x64, 0xA1, 0xDA, 0xFF, 0xFF, 0x20, 0xFE, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, - 0xF4, 0xA3, 0x00, 0x60, 0x1D, 0x61, 0x00, 0x60, 0xDD, 0x65, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, - 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x2D, 0x03, - 0x17, 0x03, 0xCF, 0x83, 0x61, 0x44, 0x80, 0xA0, 0x28, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, - 0xDD, 0x81, 0xA1, 0xD2, 0xCF, 0x83, 0x81, 0xA1, 0x20, 0x03, 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, - 0xDD, 0x81, 0xE4, 0x03, 0xF7, 0x01, 0x00, 0xF4, 0x00, 0xB8, 0x04, 0x61, 0xE4, 0x03, 0xF2, 0x01, - 0x02, 0x60, 0x00, 0x63, 0x46, 0x48, 0x41, 0x4A, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, - 0x64, 0x44, 0xDD, 0x81, 0xA1, 0xD0, 0xDF, 0x83, 0xA3, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, - 0x7F, 0xA1, 0xF7, 0x04, 0x00, 0xF4, 0x03, 0x61, 0xF4, 0x01, 0x20, 0xFE, 0x00, 0xBB, 0x02, 0x60, - 0x00, 0x61, 0x08, 0x24, 0xA6, 0x00, 0x2D, 0x60, 0xD6, 0x62, 0xA2, 0xDF, 0x2D, 0x60, 0xD8, 0x62, - 0xA2, 0xDF, 0x2D, 0x60, 0xDA, 0x62, 0xA2, 0xDF, 0x2D, 0x60, 0xDC, 0x62, 0xA2, 0xDF, 0x60, 0xFE, - 0xDD, 0x64, 0xA1, 0xDB, 0xDD, 0x81, 0xA1, 0xD3, 0xFF, 0xFF, 0xFA, 0xA4, 0xFF, 0xFF, 0x04, 0x34, - 0x9A, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x3A, 0x94, 0x01, 0xDD, 0x81, - 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x50, 0x3A, 0x8E, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, - 0x64, 0x40, 0xF2, 0x3A, 0x88, 0x01, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, - 0xDC, 0x00, 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, 0xD6, 0x00, 0xDD, 0x81, - 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x3A, 0xD0, 0x00, 0x60, 0x5C, 0x00, 0x36, 0x39, 0x00, - 0x00, 0x64, 0xF2, 0x60, 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x08, 0x26, 0xF7, 0x01, - 0x2D, 0x60, 0xD6, 0x62, 0xA2, 0xDB, 0x64, 0x40, 0x00, 0x36, 0x31, 0x00, 0xDD, 0x81, 0xA1, 0xD3, - 0xDD, 0x81, 0xF2, 0x60, 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x08, 0x26, 0xF5, 0x01, - 0x2D, 0x60, 0xD8, 0x62, 0xA2, 0xDB, 0x64, 0x40, 0x00, 0x36, 0x27, 0x00, 0xDD, 0x81, 0xA1, 0xD3, - 0xDD, 0x81, 0xF2, 0x60, 0x58, 0x4E, 0x57, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x08, 0x26, 0xF5, 0x01, - 0x2D, 0x60, 0xDA, 0x62, 0xA2, 0xDB, 0x64, 0x40, 0x00, 0x36, 0x1D, 0x00, 0xDD, 0x81, 0xA1, 0xD1, - 0x2D, 0x60, 0xDC, 0x62, 0xA2, 0xD9, 0xDD, 0x81, 0xA1, 0xD1, 0x2D, 0x60, 0xDD, 0x62, 0xA2, 0xD9, - 0x18, 0x00, 0x20, 0xFE, 0x2D, 0x60, 0xD6, 0x62, 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0x20, 0xFE, - 0x2D, 0x60, 0xD8, 0x62, 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x2D, 0x60, 0xDA, 0x62, - 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x2D, 0x60, 0xDC, 0x62, 0x00, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0x20, 0xFE, 0x02, 0x60, 0x00, 0x65, 0x2D, 0x60, 0x9E, 0x63, 0xD5, 0x84, 0xDC, 0x84, - 0xBD, 0xDB, 0x60, 0x41, 0x66, 0x44, 0x63, 0x46, 0xCD, 0x83, 0xC7, 0x81, 0x60, 0x45, 0x60, 0xFE, - 0x5D, 0x93, 0xA3, 0xD3, 0x5D, 0x93, 0xA6, 0xDB, 0xDE, 0x86, 0xFA, 0x1F, 0x66, 0x43, 0x65, 0x46, - 0x20, 0xFE, 0x20, 0xFE, 0x2D, 0x60, 0xE4, 0x62, 0xA2, 0xD1, 0xFF, 0xFF, 0x64, 0x43, 0x00, 0x64, - 0x2D, 0x60, 0xCE, 0x61, 0xA1, 0xDB, 0x2D, 0x60, 0xC2, 0x62, 0xA2, 0xD1, 0x2D, 0x60, 0xD6, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0xA0, 0x84, 0xFF, 0xFF, 0x10, 0x26, 0x07, 0x00, 0x04, 0x26, 0x07, 0x00, - 0x20, 0x26, 0x07, 0x00, 0x02, 0x26, 0x07, 0x00, 0x48, 0x00, 0x10, 0x7C, 0x05, 0x00, 0x04, 0x7C, - 0x03, 0x00, 0x20, 0x7C, 0x01, 0x00, 0x02, 0x7C, 0x2D, 0x60, 0xCE, 0x61, 0xA1, 0xD9, 0x50, 0x94, - 0x2D, 0x60, 0xD0, 0x61, 0xA1, 0xDB, 0x2D, 0x60, 0xC4, 0x61, 0xA1, 0xD1, 0x2D, 0x60, 0xD8, 0x61, - 0xA1, 0xD3, 0x2D, 0x60, 0xCE, 0x61, 0xA0, 0x84, 0xA1, 0xD1, 0xFF, 0xFF, 0x10, 0x26, 0x05, 0x00, - 0x04, 0x26, 0x05, 0x00, 0x01, 0x26, 0x08, 0x00, 0x28, 0x00, 0x10, 0x7C, 0x06, 0x00, 0x64, 0x40, - 0x10, 0x26, 0x23, 0x00, 0x04, 0x7C, 0x01, 0x00, 0x01, 0x7C, 0x2D, 0x60, 0xD0, 0x61, 0xA1, 0xD9, - 0x50, 0x94, 0x2D, 0x60, 0xD2, 0x61, 0xA1, 0xDB, 0x2D, 0x60, 0xC6, 0x61, 0xA1, 0xD1, 0x2D, 0x60, - 0xDA, 0x61, 0xA1, 0xD3, 0xFF, 0xFF, 0xA0, 0x84, 0x60, 0x40, 0x02, 0x26, 0x05, 0x00, 0x04, 0x26, - 0x05, 0x00, 0x01, 0x26, 0x05, 0x00, 0x09, 0x00, 0x02, 0x7C, 0x03, 0x00, 0x04, 0x7C, 0x01, 0x00, - 0x20, 0x7C, 0x2D, 0x60, 0xD2, 0x61, 0xA1, 0xD9, 0x0D, 0x00, 0x50, 0x94, 0x2D, 0x60, 0xCE, 0x62, - 0xA2, 0xDB, 0x2D, 0x60, 0xD0, 0x62, 0xA2, 0xDB, 0x2D, 0x60, 0xD2, 0x62, 0xA2, 0xDB, 0x2D, 0x60, - 0xD4, 0x62, 0xA2, 0xDB, 0x7C, 0x44, 0x2D, 0x60, 0xCE, 0x61, 0xA1, 0xD1, 0xBD, 0xD9, 0x2D, 0x60, - 0xD0, 0x61, 0xA1, 0xD1, 0xB0, 0x84, 0xBD, 0xD9, 0x2D, 0x60, 0xD2, 0x61, 0xA1, 0xD1, 0xB0, 0x84, - 0xBD, 0xD9, 0x2D, 0x60, 0xC8, 0x61, 0xA1, 0xD1, 0xB0, 0x84, 0xBD, 0xD9, 0x08, 0x28, 0x68, 0x00, - 0x28, 0x60, 0x2C, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xFF, 0xA0, 0xFF, 0xFF, 0x0C, 0x24, 0x60, 0x00, - 0x60, 0x40, 0x0B, 0x36, 0x5D, 0x00, 0x20, 0x40, 0x10, 0x27, 0x5A, 0x00, 0x88, 0x00, 0x20, 0xFE, - 0x00, 0x65, 0x60, 0xFE, 0x2D, 0x60, 0xDE, 0x62, 0xA2, 0xDB, 0xE0, 0x84, 0xE0, 0x84, 0x08, 0x20, - 0x03, 0x00, 0x01, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x02, 0xA5, 0x64, 0x44, 0xD4, 0x9C, 0xD4, 0x80, - 0x2D, 0x60, 0xE0, 0x62, 0x02, 0x05, 0x08, 0x65, 0x41, 0x00, 0xA2, 0xD9, 0x7C, 0x44, 0x2D, 0x60, - 0xE2, 0x62, 0xA2, 0xDB, 0xDD, 0x81, 0xA1, 0xD1, 0x00, 0x65, 0x64, 0x40, 0x00, 0x3A, 0x01, 0x65, - 0xDD, 0x81, 0xA1, 0xD1, 0xFF, 0xFF, 0x64, 0x40, 0x50, 0x3A, 0x01, 0x65, 0xDD, 0x81, 0xA1, 0xD1, - 0xFF, 0xFF, 0x64, 0x40, 0xF2, 0x3A, 0x01, 0x65, 0xDD, 0x81, 0xA1, 0xD1, 0x65, 0x40, 0x00, 0x3A, - 0x18, 0x00, 0x00, 0x60, 0x00, 0x65, 0x64, 0x40, 0x00, 0x36, 0x01, 0x65, 0x64, 0x40, 0x01, 0x36, - 0x02, 0x65, 0x64, 0x40, 0x02, 0x36, 0x04, 0x65, 0x64, 0x40, 0x04, 0x36, 0x10, 0x65, 0x64, 0x40, - 0x05, 0x36, 0x20, 0x65, 0x65, 0x5C, 0x2D, 0x60, 0xE2, 0x62, 0xA2, 0xD3, 0xFF, 0xFF, 0xB0, 0x84, - 0xA2, 0xDB, 0x2D, 0x60, 0xDE, 0x62, 0xA2, 0xD3, 0x00, 0x65, 0xFF, 0xA4, 0xA2, 0xDB, 0xCA, 0x02, - 0x2D, 0x60, 0xE2, 0x62, 0xA2, 0xD3, 0x2D, 0x60, 0xE0, 0x62, 0xA2, 0xD1, 0x2E, 0x58, 0xFF, 0xFF, - 0x20, 0xFE, 0x8A, 0xF3, 0xFF, 0xFF, 0x3A, 0xA4, 0x8A, 0xFB, 0x3D, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x89, 0xF3, 0x7F, 0xF1, 0x04, 0xA4, 0x89, 0xFB, 0x12, 0x60, 0x22, 0x63, 0x53, 0xF3, 0x64, 0x41, - 0x08, 0xB0, 0xE1, 0x85, 0x1C, 0x03, 0xFE, 0xA1, 0x47, 0xD3, 0x02, 0x06, 0xFB, 0xB4, 0xA3, 0xDB, - 0xDD, 0x81, 0x5B, 0xD3, 0x0C, 0x24, 0x02, 0x00, 0xFB, 0xB4, 0xA3, 0xDB, 0x5B, 0xD3, 0xDD, 0x81, - 0x02, 0xBC, 0xA3, 0xDB, 0x0E, 0x65, 0xDD, 0x81, 0xD5, 0x80, 0x5B, 0xD3, 0x08, 0x05, 0xFB, 0xB4, - 0xA3, 0xDB, 0xDD, 0x81, 0xD5, 0x80, 0x5B, 0xD3, 0x02, 0x03, 0xFB, 0xB4, 0xA3, 0xDB, 0xFF, 0xFF, - 0x20, 0xFE, 0x26, 0x46, 0x31, 0x40, 0x20, 0x2A, 0x18, 0x00, 0x3F, 0xF2, 0x47, 0x65, 0xC4, 0x84, - 0xE8, 0x84, 0x23, 0xFA, 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, - 0x64, 0x64, 0xA2, 0xDB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xFA, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x16, 0x63, 0x1C, 0x60, 0x8C, 0x62, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x5B, 0xFB, 0x5C, 0xFB, - 0x1C, 0x60, 0x92, 0x63, 0x02, 0x64, 0xA3, 0xDB, 0x1A, 0x60, 0xC6, 0x62, 0x3E, 0x63, 0x00, 0x64, - 0x5A, 0xDB, 0xFE, 0x1F, 0x2E, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x98, 0x62, 0xA2, 0xD3, 0x00, 0x63, - 0xF8, 0xA0, 0x01, 0xA4, 0x03, 0x03, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0xA2, 0xDD, 0x1C, 0x60, - 0x9A, 0x62, 0xA2, 0xD1, 0xA2, 0xDD, 0x5A, 0xD3, 0xA2, 0xDD, 0xC0, 0x81, 0x61, 0x44, 0x02, 0x24, - 0xFF, 0xFF, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0x5A, 0xD3, 0xE9, 0x81, 0xE8, 0x83, - 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x85, 0xD4, 0x85, 0xC5, 0x83, 0xA2, 0xDD, 0x1C, 0x60, - 0x8E, 0x62, 0x63, 0x47, 0x00, 0x7F, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0xA0, 0x65, - 0xA5, 0xDD, 0x1B, 0x60, 0x46, 0x65, 0x61, 0x44, 0x2B, 0x41, 0x45, 0xDB, 0x60, 0x41, 0x1B, 0x60, - 0x86, 0x65, 0x0A, 0xA3, 0xA3, 0xD1, 0x2B, 0x44, 0x44, 0xD9, 0x1C, 0x60, 0xA0, 0x65, 0xA5, 0xD3, - 0xFF, 0xFF, 0x60, 0x43, 0x00, 0xB9, 0xFF, 0xFF, 0x4C, 0x03, 0x06, 0xA3, 0xBD, 0xD1, 0x81, 0xF3, - 0x82, 0xF1, 0xD0, 0x80, 0xBD, 0xD3, 0x22, 0x02, 0x83, 0xF3, 0xD0, 0x80, 0xA3, 0xD1, 0x1E, 0x02, - 0xD0, 0x80, 0xFF, 0xFF, 0x1B, 0x02, 0x8A, 0xF3, 0x12, 0x60, 0x46, 0x63, 0xC6, 0xA5, 0x47, 0xD1, - 0x7F, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x08, 0x28, 0xFF, 0x61, 0x61, 0x43, 0x1A, 0x60, - 0xC6, 0x65, 0x2B, 0x44, 0x44, 0xD1, 0x1C, 0x60, 0x8E, 0x65, 0xA5, 0xD1, 0x64, 0x44, 0xD0, 0x81, - 0x1C, 0x60, 0x92, 0x65, 0x01, 0x05, 0x00, 0x61, 0xA5, 0xD3, 0x15, 0x00, 0x1A, 0x60, 0xC6, 0x65, - 0x2B, 0x44, 0x44, 0xD1, 0x1C, 0x60, 0x8E, 0x65, 0x64, 0x43, 0xA5, 0xD1, 0x64, 0x65, 0x63, 0x44, - 0xC0, 0x84, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x06, 0x00, 0x61, 0x13, 0x00, 0x61, 0x43, 0xD0, 0x81, - 0x1C, 0x60, 0x92, 0x65, 0xA5, 0xD3, 0xE9, 0x81, 0xE9, 0x81, 0xCC, 0x84, 0xCC, 0x84, 0x02, 0x03, - 0x02, 0x03, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x85, 0xD7, 0x84, 0x60, 0x41, 0x01, 0x05, - 0x00, 0x61, 0x1C, 0x60, 0xA0, 0x65, 0xA5, 0xD3, 0xFF, 0xFF, 0x60, 0x43, 0x2E, 0x58, 0xFF, 0xFF, - 0x1C, 0x60, 0x94, 0x65, 0xA5, 0xD1, 0x5B, 0xF3, 0x64, 0x41, 0xCD, 0x81, 0xCD, 0x81, 0x02, 0x03, - 0x02, 0x03, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x85, 0x29, 0x44, 0x54, 0x89, 0x2E, 0x58, - 0xFF, 0xFF, 0xED, 0xF3, 0x1A, 0x60, 0xBE, 0x63, 0x0F, 0xB4, 0x01, 0xA4, 0xE0, 0x87, 0xE0, 0x84, - 0xE0, 0x84, 0xBD, 0xDB, 0x10, 0x60, 0x58, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x06, 0x64, - 0xA3, 0xDB, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0xBA, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x2E, 0x58, 0xFF, 0xFF, 0x1A, 0x60, 0xBE, 0x63, 0xEA, 0x60, 0x60, 0x64, - 0xBD, 0xDB, 0x10, 0x60, 0x58, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, - 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, 0xBA, 0x64, 0xA2, 0xDB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x2E, 0x58, 0xFF, 0xFF, 0x16, 0x63, 0x1C, 0x60, 0x8C, 0x62, 0x00, 0x64, 0x5A, 0xDB, - 0xFE, 0x1F, 0x5B, 0xFB, 0x5C, 0xFB, 0x1C, 0x60, 0x92, 0x63, 0x02, 0x64, 0xA3, 0xDB, 0x1A, 0x60, - 0xC6, 0x62, 0x3E, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x10, 0x60, 0x56, 0x62, 0xF5, 0x60, - 0x29, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x2C, 0x62, 0xF5, 0x60, 0x15, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x02, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x04, 0x62, 0x00, 0x60, 0x04, 0x64, 0xA2, 0xDB, - 0xF4, 0x60, 0x16, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x20, 0x44, 0x40, 0x26, - 0x03, 0x00, 0xF4, 0x60, 0xEA, 0x78, 0xFF, 0xFF, 0x20, 0x40, 0x52, 0x23, 0x07, 0x00, 0x5A, 0xF3, - 0xFF, 0xFF, 0x01, 0xA4, 0x5A, 0xFB, 0xF4, 0x60, 0xD7, 0x78, 0xFF, 0xFF, 0x40, 0x60, 0x00, 0x65, - 0x20, 0x44, 0x34, 0x80, 0x1C, 0x60, 0x92, 0x65, 0x02, 0x64, 0xA5, 0xDB, 0x1A, 0x60, 0xC4, 0x62, - 0x7E, 0x63, 0x00, 0x64, 0x5A, 0xDB, 0xFE, 0x1F, 0x1C, 0x60, 0x96, 0x62, 0xA2, 0xDD, 0x8C, 0xF3, - 0x58, 0xFB, 0x02, 0x64, 0x8C, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x8C, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, - 0xFF, 0xFF, 0x0B, 0x03, 0x10, 0x60, 0x04, 0x62, 0x80, 0x60, 0x00, 0x64, 0xA2, 0xDB, 0xF4, 0x60, - 0x3D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x04, 0x64, 0x53, 0xFB, 0x29, 0x60, - 0xA4, 0x64, 0x54, 0xFB, 0x0F, 0x4E, 0xEC, 0x60, 0x58, 0x4F, 0xB9, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, - 0x10, 0x60, 0x02, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x04, 0x62, 0x10, 0x60, 0x00, 0x64, - 0xA2, 0xDB, 0xF4, 0x60, 0x67, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x58, 0xF3, - 0x8C, 0xFB, 0xCA, 0xFE, 0xC1, 0xFE, 0x1C, 0x60, 0xA2, 0x62, 0x66, 0x44, 0xA2, 0xDB, 0x5A, 0xDD, - 0x61, 0x44, 0x5A, 0xDB, 0x67, 0xF5, 0xCC, 0xF1, 0x19, 0xF8, 0xF8, 0x60, 0x80, 0x64, 0x0E, 0xFA, - 0xA9, 0xF1, 0x07, 0xF8, 0x01, 0x60, 0x60, 0x67, 0x2C, 0xFA, 0x1D, 0x64, 0x2D, 0xFA, 0x01, 0x64, - 0x2E, 0xFA, 0xEB, 0xF1, 0x2F, 0xF8, 0xEC, 0xF1, 0x30, 0xF8, 0xED, 0xF1, 0x31, 0xF8, 0x81, 0xF1, - 0x32, 0xF8, 0x82, 0xF1, 0x33, 0xF8, 0x83, 0xF1, 0x34, 0xF8, 0x08, 0x64, 0x2A, 0xFA, 0x40, 0x63, - 0x3F, 0xFC, 0x00, 0xF4, 0x02, 0x62, 0xCB, 0x83, 0x00, 0x64, 0x5A, 0xDA, 0xFE, 0x1F, 0x1C, 0x60, - 0x8E, 0x65, 0xA5, 0xD3, 0x02, 0xFA, 0x19, 0x60, 0x88, 0x64, 0xA0, 0xD1, 0x0A, 0x61, 0x41, 0xD3, - 0x03, 0xFA, 0x06, 0x61, 0x06, 0x63, 0x00, 0x65, 0x1B, 0x60, 0x86, 0x64, 0x44, 0xD1, 0x59, 0xD8, - 0x1B, 0x60, 0x46, 0x64, 0x44, 0xD1, 0x59, 0xD8, 0x1A, 0x60, 0xC6, 0x64, 0x44, 0xD1, 0x59, 0xD8, - 0x1B, 0x60, 0x06, 0x64, 0x44, 0xD1, 0x59, 0xD8, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x45, 0xEC, 0x1F, - 0x67, 0xF5, 0x24, 0x60, 0x74, 0x62, 0x24, 0x60, 0x22, 0x64, 0xA2, 0xDB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x1C, 0x60, 0xA2, 0x62, 0xA2, 0xD5, 0x5A, 0xD3, - 0x5A, 0xD3, 0x60, 0x43, 0x60, 0x41, 0x0F, 0x60, 0xEA, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x20, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xBF, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0xF3, 0x60, - 0x58, 0x4E, 0xD4, 0x78, 0xFF, 0xFF, 0x10, 0x60, 0x02, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x04, 0x62, 0x10, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0xF4, 0x60, 0x16, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0xA4, 0x63, 0x66, 0x44, 0xA3, 0xDB, 0x00, 0x60, 0x40, 0x61, - 0xAE, 0x60, 0x58, 0x4D, 0xC4, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x67, 0xFB, 0x04, 0x64, 0x03, 0xFA, - 0x1C, 0x60, 0xA4, 0x63, 0xA3, 0xD1, 0x00, 0x64, 0x64, 0x46, 0xA3, 0xDB, 0x00, 0x60, 0x40, 0x65, - 0x20, 0x44, 0x34, 0x80, 0xF3, 0x60, 0x58, 0x4E, 0xB9, 0x78, 0xFF, 0xFF, 0x10, 0x60, 0x02, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x04, 0x62, 0x00, 0x60, 0x02, 0x64, 0xA2, 0xDB, 0xF4, 0x60, - 0x16, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x60, 0xAA, 0x62, 0x1A, 0x60, - 0xBA, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x10, 0x60, 0x02, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x5A, 0xDB, 0xFF, 0x60, 0x9F, 0x65, 0x20, 0x44, 0x24, 0x80, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x02, 0x62, 0xA2, 0xD1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - -}; /* fw_image_4_data */ - -static const CFG_IDENTITY_STRCT fw_image_infoidentity[] = { - { - sizeof(CFG_IDENTITY_STRCT) / sizeof(hcf_16) - 1, - CFG_FW_IDENTITY, - COMP_ID_FW_STA, - 3, /* Variant */ - 2, /* Major */ - 36 /* Minor */ - }, - { 0000, 0000, 0000, 0000, 0000, 0000 } /* endsentinel */ -}; - -static const CFG_PROG_STRCT fw_image_code[] = { - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x0186, /* sizeof(fw_image_1_data), */ - 0x00000060, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_1_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x2518, /* sizeof(fw_image_2_data), */ - 0x00000C16, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_2_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0x3daa, /* sizeof(fw_image_3_data), */ - 0x001E312E, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_3_data - }, - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, /* mode */ - 0xaa66, /* sizeof(fw_image_4_data), */ - 0x001F4000, /* Target address in NIC Memory */ - 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 *)fw_image_4_data - }, - { - 5, - CFG_PROG, - CFG_PROG_STOP, /* mode */ - 0000, - 0x000F368E, /* Start execution address */ - }, - { 0000, 0000, 0000, 0000, 00000000, 0000, NULL} -}; - -static const CFG_RANGE20_STRCT fw_image_infocompat[] = { - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_FW_SUP_RANGE, - COMP_ROLE_SUPL, - COMP_ID_STA, - { - { 2, 2, 5 } /* variant, bottom, top */ - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_MFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_MFI, - { - { 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)), - CFG_CFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_CFI, - { - { 2, 1, 2 } /* variant, bottom, top */ - } - }, - { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } /* endsentinel */ -}; - -memimage fw_image = { - "FUPU7D37dhfwci\001C", /* signature, , C/Bin type */ - (CFG_PROG_STRCT *) fw_image_code, - 0x000F368E, - NULL, /* (dummy) pdaplug */ - NULL, /* (dummy) priplug */ - (CFG_RANGE20_STRCT *) fw_image_infocompat, - (CFG_IDENTITY_STRCT *) fw_image_infoidentity, -}; - diff --git a/drivers/staging/wlags49_h2/sta_h25.c b/drivers/staging/wlags49_h2/sta_h25.c deleted file mode 100644 index eccd780ef135..000000000000 --- a/drivers/staging/wlags49_h2/sta_h25.c +++ /dev/null @@ -1,5255 +0,0 @@ -/* - * File: sta_h54.136 - * - * Abstract: This file contains memory image 'fw_image'. - * - * Contents: Total size of the memory image: 81742 bytes. - * Total number of blocks: 4 blocks. - * Block 1 : load address 00000060, 388 bytes. - * Block 2 : load address 00000C16, 11278 bytes. - * Block 3 : load address 001E3824, 21726 bytes. - * Block 4 : load address 001F4000, 48350 bytes. - * - * Identity: component id: 31 (variant 4) version 1.36 - * - * Compatibility: - * supplying interface 4 (variant 4) : 1 - 2 - * acting on interface 1 (variant 7) : 3 - 3 - * acting on interface 1 (variant 8) : 1 - 1 - * acting on interface 2 (variant 4) : 1 - 2 - * - * Generated: by g:\fw\fupu3.exe version 4.26 - * - * Commandline: g:\fw\fupu3.exe /f=4 /n=fw_image /i=r4013600.hex - */ - - -#include "hcfcfg.h" // to get hcf_16 etc defined as well as - // possible settings which influence 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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x0C, 0x00, 0x00, - 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x65, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x1B, 0xB2, 0x1B, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xFF, 0x07, - 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x10, 0x27, 0x10, 0x27, 0x14, 0x00, 0xD0, 0x07, 0xD0, 0x07, - 0x10, 0x27, 0x2F, 0x00, 0x32, 0x00, 0x32, 0x00, 0x05, 0x00, 0x02, 0x00, 0x02, 0x00, 0x10, 0x27, - 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x13, 0x00, 0x07, 0x00, 0x03, 0x00, 0x32, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x09, 0x2B, 0x09, 0x2B, 0x09, 0xFF, 0x0F, 0xF0, 0x0F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x40, 0x00, 0x32, 0x00, 0x32, 0x00, 0x0A, 0x00, - 0x02, 0x00, 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - -}; /* fw_image_1_data */ - -static const hcf_8 fw_image_2_data[] = { - 0xF4, 0xA3, 0x00, 0x16, 0x08, 0x40, 0x0F, 0xD2, 0xE1, 0x28, 0xA5, 0x7C, 0x50, 0x30, 0xF1, 0x84, - 0x44, 0x08, 0xAB, 0xAE, 0xA5, 0xB8, 0xFC, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, - 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC6, 0x84, 0xF8, 0x99, 0xEE, - 0x8D, 0xF6, 0x0D, 0xFF, 0xBD, 0xD6, 0xB1, 0xDE, 0x54, 0x91, 0x50, 0x60, 0x03, 0x02, 0xA9, 0xCE, - 0x7D, 0x56, 0x19, 0xE7, 0x62, 0xB5, 0xE6, 0x4D, 0x9A, 0xEC, 0x45, 0x8F, 0x9D, 0x1F, 0x40, 0x89, - 0x87, 0xFA, 0x15, 0xEF, 0xEB, 0xB2, 0xC9, 0x8E, 0x0B, 0xFB, 0xEC, 0x41, 0x67, 0xB3, 0xFD, 0x5F, - 0xEA, 0x45, 0xBF, 0x23, 0xF7, 0x53, 0x96, 0xE4, 0x5B, 0x9B, 0xC2, 0x75, 0x1C, 0xE1, 0xAE, 0x3D, - 0x6A, 0x4C, 0x5A, 0x6C, 0x41, 0x7E, 0x02, 0xF5, 0x4F, 0x83, 0x5C, 0x68, 0xF4, 0x51, 0x34, 0xD1, - 0x08, 0xF9, 0x93, 0xE2, 0x73, 0xAB, 0x53, 0x62, 0x3F, 0x2A, 0x0C, 0x08, 0x52, 0x95, 0x65, 0x46, - 0x5E, 0x9D, 0x28, 0x30, 0xA1, 0x37, 0x0F, 0x0A, 0xB5, 0x2F, 0x09, 0x0E, 0x36, 0x24, 0x9B, 0x1B, - 0x3D, 0xDF, 0x26, 0xCD, 0x69, 0x4E, 0xCD, 0x7F, 0x9F, 0xEA, 0x1B, 0x12, 0x9E, 0x1D, 0x74, 0x58, - 0x2E, 0x34, 0x2D, 0x36, 0xB2, 0xDC, 0xEE, 0xB4, 0xFB, 0x5B, 0xF6, 0xA4, 0x4D, 0x76, 0x61, 0xB7, - 0xCE, 0x7D, 0x7B, 0x52, 0x3E, 0xDD, 0x71, 0x5E, 0x97, 0x13, 0xF5, 0xA6, 0x68, 0xB9, 0x00, 0x00, - 0x2C, 0xC1, 0x60, 0x40, 0x1F, 0xE3, 0xC8, 0x79, 0xED, 0xB6, 0xBE, 0xD4, 0x46, 0x8D, 0xD9, 0x67, - 0x4B, 0x72, 0xDE, 0x94, 0xD4, 0x98, 0xE8, 0xB0, 0x4A, 0x85, 0x6B, 0xBB, 0x2A, 0xC5, 0xE5, 0x4F, - 0x16, 0xED, 0xC5, 0x86, 0xD7, 0x9A, 0x55, 0x66, 0x94, 0x11, 0xCF, 0x8A, 0x10, 0xE9, 0x06, 0x04, - 0x81, 0xFE, 0xF0, 0xA0, 0x44, 0x78, 0xBA, 0x25, 0xE3, 0x4B, 0xF3, 0xA2, 0xFE, 0x5D, 0xC0, 0x80, - 0x8A, 0x05, 0xAD, 0x3F, 0xBC, 0x21, 0x48, 0x70, 0x04, 0xF1, 0xDF, 0x63, 0xC1, 0x77, 0x75, 0xAF, - 0x63, 0x42, 0x30, 0x20, 0x1A, 0xE5, 0x0E, 0xFD, 0x6D, 0xBF, 0x4C, 0x81, 0x14, 0x18, 0x35, 0x26, - 0x2F, 0xC3, 0xE1, 0xBE, 0xA2, 0x35, 0xCC, 0x88, 0x39, 0x2E, 0x57, 0x93, 0xF2, 0x55, 0x82, 0xFC, - 0x47, 0x7A, 0xAC, 0xC8, 0xE7, 0xBA, 0x2B, 0x32, 0x95, 0xE6, 0xA0, 0xC0, 0x98, 0x19, 0xD1, 0x9E, - 0x7F, 0xA3, 0x66, 0x44, 0x7E, 0x54, 0xAB, 0x3B, 0x83, 0x0B, 0xCA, 0x8C, 0x29, 0xC7, 0xD3, 0x6B, - 0x3C, 0x28, 0x79, 0xA7, 0xE2, 0xBC, 0x1D, 0x16, 0x76, 0xAD, 0x3B, 0xDB, 0x56, 0x64, 0x4E, 0x74, - 0x1E, 0x14, 0xDB, 0x92, 0x0A, 0x0C, 0x6C, 0x48, 0xE4, 0xB8, 0x5D, 0x9F, 0x6E, 0xBD, 0xEF, 0x43, - 0xA6, 0xC4, 0xA8, 0x39, 0xA4, 0x31, 0x37, 0xD3, 0x8B, 0xF2, 0x32, 0xD5, 0x43, 0x8B, 0x59, 0x6E, - 0xB7, 0xDA, 0x8C, 0x01, 0x64, 0xB1, 0xD2, 0x9C, 0xE0, 0x49, 0xB4, 0xD8, 0xFA, 0xAC, 0x07, 0xF3, - 0x25, 0xCF, 0xAF, 0xCA, 0x8E, 0xF4, 0xE9, 0x47, 0x18, 0x10, 0xD5, 0x6F, 0x88, 0xF0, 0x6F, 0x4A, - 0x72, 0x5C, 0x24, 0x38, 0xF1, 0x57, 0xC7, 0x73, 0x51, 0x97, 0x23, 0xCB, 0x7C, 0xA1, 0x9C, 0xE8, - 0x21, 0x3E, 0xDD, 0x96, 0xDC, 0x61, 0x86, 0x0D, 0x85, 0x0F, 0x90, 0xE0, 0x42, 0x7C, 0xC4, 0x71, - 0xAA, 0xCC, 0xD8, 0x90, 0x05, 0x06, 0x01, 0xF7, 0x12, 0x1C, 0xA3, 0xC2, 0x5F, 0x6A, 0xF9, 0xAE, - 0xD0, 0x69, 0x91, 0x17, 0x58, 0x99, 0x27, 0x3A, 0xB9, 0x27, 0x38, 0xD9, 0x13, 0xEB, 0xB3, 0x2B, - 0x33, 0x22, 0xBB, 0xD2, 0x70, 0xA9, 0x89, 0x07, 0xA7, 0x33, 0xB6, 0x2D, 0x22, 0x3C, 0x92, 0x15, - 0x20, 0xC9, 0x49, 0x87, 0xFF, 0xAA, 0x78, 0x50, 0x7A, 0xA5, 0x8F, 0x03, 0xF8, 0x59, 0x80, 0x09, - 0x17, 0x1A, 0xDA, 0x65, 0x31, 0xD7, 0xC6, 0x84, 0xB8, 0xD0, 0xC3, 0x82, 0xB0, 0x29, 0x77, 0x5A, - 0x11, 0x1E, 0xCB, 0x7B, 0xFC, 0xA8, 0xD6, 0x6D, 0x3A, 0x2C, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, - 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3A, 0x00, 0x3B, - 0x00, 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x3F, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x28, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x02, 0x14, 0x05, 0x32, 0x0B, 0x37, 0x08, 0x50, 0x0B, 0x6E, - 0x02, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x16, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, - 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x39, 0x00, 0x20, 0x00, 0x39, 0x00, 0x39, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, - 0x3E, 0x11, 0xF6, 0x10, 0x38, 0x11, 0xFC, 0x10, 0x32, 0x11, 0x02, 0x11, 0x2C, 0x11, 0x08, 0x11, - 0x26, 0x11, 0x0E, 0x11, 0x20, 0x11, 0x14, 0x11, 0x1A, 0x11, 0x07, 0x01, 0x00, 0x00, 0x16, 0x22, - 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x16, 0x26, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x16, 0x2A, - 0x00, 0x04, 0x0A, 0x01, 0x00, 0x00, 0x16, 0x2E, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x00, 0x10, 0x24, - 0x04, 0x04, 0x0C, 0x01, 0x00, 0x00, 0x10, 0x28, 0x04, 0x04, 0x0D, 0x01, 0x00, 0x00, 0x10, 0x2C, - 0x04, 0x04, 0x0E, 0x01, 0x00, 0x00, 0x10, 0x30, 0x04, 0x04, 0x0F, 0x01, 0x00, 0x00, 0x14, 0x34, - 0x08, 0x84, 0x10, 0x01, 0x00, 0x00, 0x14, 0x38, 0x08, 0x84, 0x11, 0x01, 0x00, 0x00, 0x14, 0x3C, - 0x08, 0x84, 0x12, 0x01, 0x00, 0x00, 0x14, 0x40, 0x08, 0x84, 0x13, 0x01, 0x00, 0x00, 0x17, 0x64, - 0x0C, 0x8B, 0x14, 0x01, 0x00, 0x00, 0x17, 0x68, 0x0C, 0x8B, 0x15, 0x01, 0x00, 0x00, 0x17, 0x6C, - 0x0C, 0x8B, 0x16, 0x01, 0x00, 0x00, 0x17, 0x70, 0x0C, 0x8B, 0x17, 0x01, 0x00, 0x00, 0x17, 0x74, - 0x0C, 0x8B, 0x18, 0x01, 0x00, 0x00, 0x17, 0x78, 0x0C, 0x8B, 0x19, 0x01, 0x00, 0x00, 0x17, 0x7C, - 0x0C, 0x8B, 0x1A, 0x01, 0x00, 0x00, 0x17, 0x80, 0x0C, 0x8B, 0x1B, 0x01, 0x00, 0x00, 0x17, 0x84, - 0x0C, 0x8B, 0x1C, 0x01, 0x00, 0x00, 0x17, 0x88, 0x0C, 0x8B, 0x1D, 0x01, 0x00, 0x00, 0x17, 0x8C, - 0x0C, 0x8B, 0x1E, 0x01, 0x00, 0x00, 0x0E, 0x95, 0x17, 0x04, 0x1F, 0x01, 0x00, 0x00, 0x0E, 0x99, - 0x17, 0x04, 0x20, 0x01, 0x00, 0x00, 0x0E, 0x9D, 0x17, 0x04, 0x21, 0x01, 0x00, 0x00, 0x0E, 0xA1, - 0x17, 0x04, 0x22, 0x01, 0x00, 0x00, 0x0E, 0xA5, 0x00, 0x00, 0x60, 0x11, 0x80, 0x11, 0xA0, 0x11, - 0xC0, 0x11, 0x18, 0x12, 0x68, 0x11, 0x88, 0x11, 0xA8, 0x11, 0xC8, 0x11, 0x20, 0x12, 0x70, 0x11, - 0x90, 0x11, 0xB0, 0x11, 0xD0, 0x11, 0x28, 0x12, 0x78, 0x11, 0x98, 0x11, 0xB8, 0x11, 0xD8, 0x11, - 0x30, 0x12, 0xE0, 0x11, 0xE8, 0x11, 0xF0, 0x11, 0xF8, 0x11, 0x00, 0x12, 0x08, 0x12, 0x10, 0x12, - 0x38, 0x12, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x0A, 0x0A, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x10, 0x10, - 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x11, 0x11, 0x11, 0x11, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x16, 0x16, - 0x16, 0x16, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, - 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0A, - 0x0A, 0x0A, 0x0A, 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x10, 0x10, 0x10, 0x10, 0x7F, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x0A, 0x0A, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x9D, 0x9D, 0xA1, 0xB4, - 0x10, 0x10, 0x00, 0x9D, 0x08, 0x02, 0x06, 0x00, 0xA5, 0xA5, 0xAA, 0xB4, 0x10, 0x10, 0x00, 0xA2, - 0x15, 0x05, 0x07, 0x00, 0xAA, 0xAA, 0xB4, 0xB4, 0x10, 0x10, 0x00, 0xA7, 0x1C, 0x0A, 0x08, 0x00, - 0xB7, 0xB7, 0xC1, 0xC1, 0x10, 0x10, 0x00, 0xB4, 0x29, 0x17, 0x08, 0x00, 0xBD, 0xBD, 0xC7, 0xC7, - 0x10, 0x10, 0x00, 0xBA, 0x2F, 0x1D, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x2A, 0x5B, 0x2A, 0x7E, 0x2A, 0x71, 0x30, 0xEE, 0x29, 0x88, 0x30, 0xB8, 0x2A, - 0x9F, 0x30, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0x21, 0x35, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0xEE, 0x29, 0x93, 0x2C, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0xEE, 0x29, 0xDE, 0x2C, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0x61, 0x2C, 0x7C, 0x2C, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, 0xEE, 0x29, - 0xEE, 0x29, 0xE1, 0x27, 0xD7, 0x2A, 0xEA, 0x2A, 0x9A, 0x2B, 0x9E, 0x2B, 0xEE, 0x29, 0xEE, 0x29, - 0x4D, 0x2C, 0xA1, 0xF2, 0x62, 0xF2, 0x00, 0x00, 0x99, 0xF2, 0xEE, 0xF2, 0x12, 0xF3, 0x48, 0xF3, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x2A, 0x94, 0x2A, 0x00, 0x00, 0x67, 0x30, 0x7E, 0x30, 0x95, 0x30, - 0xAF, 0x30, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, 0x45, 0x2D, 0xF7, 0x2F, 0x5A, 0x00, 0x02, 0x00, - 0xF9, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0xFC, 0x00, 0x02, 0x00, 0xF7, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, - 0xAA, 0x2D, 0x06, 0x00, 0xF0, 0xFF, 0x45, 0x2D, 0x22, 0x2D, 0x00, 0x00, 0x00, 0x02, 0xF6, 0xFF, - 0x45, 0x2D, 0x5B, 0x2D, 0x6C, 0x00, 0x02, 0x00, 0xF4, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0xA6, 0x01, - 0x02, 0x00, 0xF5, 0xFF, 0x45, 0x2D, 0x00, 0x30, 0x9C, 0x2D, 0x02, 0x00, 0xED, 0xFF, 0x45, 0x2D, - 0x12, 0x30, 0x98, 0x32, 0x02, 0x00, 0xEC, 0xFF, 0x45, 0x2D, 0x40, 0x30, 0x9A, 0x32, 0x02, 0x00, - 0xEB, 0xFF, 0x45, 0x2D, 0x46, 0x30, 0x9C, 0x32, 0x02, 0x00, 0xEE, 0xFF, 0x45, 0x2D, 0x4C, 0x30, - 0x12, 0x33, 0x02, 0x00, 0xDA, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0xF2, 0x13, 0x0C, 0x00, 0xEA, 0xFF, - 0x45, 0x2D, 0x22, 0x2D, 0x4C, 0x33, 0x06, 0x00, 0xE9, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x52, 0x33, - 0x02, 0x00, 0xE8, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x54, 0x33, 0x02, 0x00, 0xE7, 0xFF, 0x45, 0x2D, - 0x5B, 0x2D, 0x56, 0x33, 0x02, 0x00, 0xE6, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x58, 0x33, 0x02, 0x00, - 0xE5, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x5A, 0x33, 0x10, 0x00, 0xE4, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, - 0x6A, 0x33, 0x18, 0x00, 0xDB, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x82, 0x33, 0x02, 0x00, 0xDC, 0xFF, - 0x45, 0x2D, 0x5B, 0x2D, 0x84, 0x33, 0x02, 0x00, 0xE1, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x5A, 0x34, - 0x02, 0x00, 0xE0, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0x58, 0x34, 0x02, 0x00, 0xE3, 0xFF, 0x45, 0x2D, - 0x5B, 0x2D, 0x3C, 0x34, 0x02, 0x00, 0xE2, 0xFF, 0x93, 0x2D, 0x22, 0x2D, 0xF2, 0x33, 0x24, 0x00, - 0x03, 0xFC, 0x45, 0x2D, 0x01, 0x2F, 0x8C, 0x32, 0x02, 0x00, 0x04, 0xFC, 0x45, 0x2D, 0x55, 0x2D, - 0xB4, 0x2D, 0x22, 0x00, 0x06, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x9A, 0x2D, 0x02, 0x00, 0x07, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0xF8, 0x2D, 0x02, 0x00, 0x0E, 0xFC, 0x45, 0x2D, 0x2A, 0x2F, 0x02, 0x2E, - 0x22, 0x00, 0xB1, 0xFC, 0x45, 0x2D, 0x39, 0x31, 0x00, 0x2F, 0x02, 0x00, 0x20, 0xFC, 0x45, 0x2D, - 0x5B, 0x2D, 0x28, 0x2E, 0x02, 0x00, 0x25, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x34, 0x2E, 0x02, 0x00, - 0x26, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x36, 0x2E, 0x02, 0x00, 0x27, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, - 0x38, 0x2E, 0x02, 0x00, 0xB2, 0xFC, 0x45, 0x2D, 0x55, 0x2D, 0x24, 0x2F, 0x22, 0x00, 0xC1, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0x9E, 0x33, 0x20, 0x00, 0xB0, 0xFC, 0x18, 0x2D, 0x3D, 0x31, 0x00, 0x00, - 0x00, 0x00, 0xC4, 0xFC, 0x18, 0x2D, 0x57, 0x30, 0x00, 0x00, 0x08, 0x00, 0xC8, 0xFC, 0x18, 0x2D, - 0x55, 0x30, 0x00, 0x00, 0x08, 0x00, 0xB4, 0xFC, 0x18, 0x2D, 0x71, 0x31, 0x00, 0x00, 0x00, 0x00, - 0xB6, 0xFC, 0x18, 0x2D, 0x19, 0x32, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xFC, 0x18, 0x2D, 0x43, 0x32, - 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFC, 0x18, 0x2D, 0x99, 0x32, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xFC, - 0x18, 0x2D, 0xD2, 0x32, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xFC, 0x18, 0x2D, 0x58, 0x33, 0x00, 0x00, - 0x00, 0x00, 0xBE, 0xFC, 0x18, 0x2D, 0x82, 0x33, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFC, 0x18, 0x2D, - 0xCF, 0x33, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xA0, 0x0F, 0x10, 0x00, - 0xB5, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x38, 0x34, 0x02, 0x00, 0xB9, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, - 0x3A, 0x34, 0x02, 0x00, 0x90, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0x3E, 0x34, 0x02, 0x00, 0x88, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0x72, 0x32, 0x04, 0x00, 0x89, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x76, 0x32, - 0x04, 0x00, 0xC5, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x7A, 0x32, 0x04, 0x00, 0x23, 0xFC, 0x45, 0x2D, - 0x5B, 0x2D, 0x2E, 0x2E, 0x04, 0x00, 0x2A, 0xFC, 0x45, 0x2D, 0xE9, 0x2D, 0xB0, 0x2D, 0x02, 0x00, - 0xC7, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xA0, 0x32, 0x0A, 0x00, 0x29, 0xFC, 0x3C, 0x2E, 0x00, 0x2E, - 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x80, 0x32, 0x08, 0x00, 0x32, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0x98, 0x01, 0x02, 0x00, 0x33, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x9A, 0x01, - 0x02, 0x00, 0x35, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x88, 0x32, 0x02, 0x00, 0xC7, 0xFC, 0x45, 0x2D, - 0xD3, 0x2F, 0x8A, 0x32, 0x02, 0x00, 0x00, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xB2, 0x2D, 0x02, 0x00, - 0x01, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xAA, 0x2D, 0x06, 0x00, 0x02, 0xFC, 0x45, 0x2D, 0xD5, 0x2D, - 0x02, 0x2F, 0x22, 0x00, 0x05, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xA0, 0x2D, 0x02, 0x00, 0x08, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0xA4, 0x2D, 0x06, 0x00, 0x09, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xFA, 0x2D, - 0x02, 0x00, 0x0B, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xFC, 0x2D, 0x02, 0x00, 0x0C, 0xFC, 0x45, 0x2D, - 0x5B, 0x2D, 0xFE, 0x2D, 0x02, 0x00, 0x0D, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x00, 0x2E, 0x02, 0x00, - 0x21, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0x2A, 0x2E, 0x02, 0x00, 0x80, 0xFC, 0xB1, 0x2D, 0xC1, 0x2D, - 0x40, 0x2E, 0xC0, 0x00, 0x81, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, 0xA4, 0x01, 0x02, 0x00, 0x83, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0xA8, 0x01, 0x02, 0x00, 0x85, 0xFC, 0x45, 0x2D, 0x4A, 0x2F, 0xA0, 0x01, - 0x02, 0x00, 0x86, 0xFC, 0x45, 0x2D, 0x6E, 0x2F, 0xB0, 0x01, 0x02, 0x00, 0x28, 0xFC, 0x45, 0x2D, - 0x5B, 0x2D, 0x3A, 0x2E, 0x02, 0x00, 0x90, 0xFC, 0x45, 0x2D, 0x5C, 0x2F, 0xA2, 0x01, 0x02, 0x00, - 0x87, 0xFC, 0x45, 0x2D, 0x8C, 0x2F, 0x50, 0x2F, 0x22, 0x03, 0x30, 0xFC, 0x45, 0x2D, 0x5B, 0x2D, - 0x3C, 0x2E, 0x02, 0x00, 0x84, 0xFC, 0x45, 0x2D, 0x92, 0x2F, 0xAC, 0x01, 0x04, 0x00, 0x2B, 0xFC, - 0x45, 0x2D, 0x5B, 0x2D, 0xE2, 0x37, 0x02, 0x00, 0xF8, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0xDC, 0x37, - 0x02, 0x00, 0xF3, 0xFF, 0x45, 0x2D, 0x5B, 0x2D, 0xE4, 0x37, 0x02, 0x00, 0x20, 0xFD, 0x76, 0x2D, - 0x22, 0x2D, 0x5E, 0x40, 0x08, 0x00, 0x21, 0xFD, 0x76, 0x2D, 0x22, 0x2D, 0x62, 0x40, 0x0A, 0x00, - 0x22, 0xFD, 0x76, 0x2D, 0x22, 0x2D, 0x67, 0x40, 0x16, 0x00, 0x23, 0xFD, 0x76, 0x2D, 0x22, 0x2D, - 0x72, 0x40, 0x0A, 0x00, 0x45, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xFC, 0x00, 0x02, 0x00, 0x47, 0xFD, - 0x45, 0x2D, 0x22, 0x2D, 0x72, 0x01, 0x02, 0x00, 0x48, 0xFD, 0x91, 0x2E, 0x22, 0x2D, 0x98, 0x01, - 0x02, 0x00, 0x49, 0xFD, 0x91, 0x2E, 0x22, 0x2D, 0x9A, 0x01, 0x02, 0x00, 0x4A, 0xFD, 0x45, 0x2D, - 0x22, 0x2D, 0x92, 0x01, 0x02, 0x00, 0x4B, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0x94, 0x01, 0x02, 0x00, - 0x4D, 0xFD, 0x76, 0x2D, 0x22, 0x2D, 0x77, 0x40, 0x0C, 0x00, 0x4F, 0xFD, 0xA5, 0x2E, 0x22, 0x2D, - 0x90, 0x32, 0x02, 0x00, 0xC2, 0xFD, 0x9B, 0x2E, 0x22, 0x2D, 0x00, 0x00, 0x02, 0x00, 0x40, 0xFD, - 0x6E, 0x2D, 0x22, 0x2D, 0xB6, 0x01, 0x02, 0x00, 0x24, 0xFD, 0xB5, 0x2E, 0x22, 0x2D, 0x00, 0x00, - 0x02, 0x00, 0x91, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xC6, 0x25, 0x02, 0x00, 0x93, 0xFD, 0x45, 0x2D, - 0x22, 0x2D, 0xCC, 0x25, 0x02, 0x00, 0x8F, 0xFD, 0xD5, 0x2E, 0x22, 0x2D, 0x00, 0x00, 0x08, 0x00, - 0xC1, 0xFD, 0x00, 0x31, 0x22, 0x2D, 0xFA, 0x00, 0x02, 0x00, 0xC6, 0xFD, 0x45, 0x2D, 0x22, 0x2D, - 0xF8, 0x37, 0x04, 0x00, 0x25, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0x9E, 0x01, 0x02, 0x00, 0x89, 0xFD, - 0xB9, 0x30, 0x22, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xFD, 0x93, 0x2D, 0x22, 0x2D, 0x12, 0x34, - 0x24, 0x00, 0x41, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xBE, 0x33, 0x22, 0x00, 0x42, 0xFD, 0x45, 0x2D, - 0x22, 0x2D, 0xFE, 0x00, 0x06, 0x00, 0x43, 0xFD, 0xC2, 0x2E, 0x22, 0x2D, 0x00, 0x00, 0x06, 0x00, - 0x44, 0xFD, 0xAC, 0x2E, 0x22, 0x2D, 0xB2, 0x01, 0x02, 0x00, 0x46, 0xFD, 0x21, 0x31, 0x22, 0x2D, - 0x00, 0x00, 0x00, 0x00, 0x4C, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0x46, 0x2F, 0x02, 0x00, 0x50, 0xFD, - 0x45, 0x2D, 0x22, 0x2D, 0xF2, 0x00, 0x02, 0x00, 0x51, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xF4, 0x00, - 0x02, 0x00, 0x52, 0xFD, 0x45, 0x2D, 0x22, 0x2D, 0xC4, 0x01, 0x02, 0x00, 0x8C, 0xFD, 0x38, 0x2D, - 0x22, 0x2D, 0x98, 0x34, 0x56, 0x00, 0x8D, 0xFD, 0x38, 0x2D, 0x22, 0x2D, 0xF2, 0x34, 0x14, 0x00, - 0x00, 0xF1, 0x46, 0x00, 0xDC, 0x2C, 0x36, 0x01, 0x01, 0xF1, 0x84, 0x07, 0xDA, 0x2C, 0x38, 0x01, - 0x00, 0x03, 0xA0, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xFA, 0x00, 0xD4, 0x01, 0xFE, 0x00, 0x3A, 0x01, - 0xB6, 0x01, 0xCC, 0x2C, 0x54, 0x01, 0xC6, 0x25, 0x20, 0x00, 0x00, 0x00, 0xC0, 0x1D, 0x00, 0x00, - 0xC4, 0x1F, 0x4E, 0x01, 0x0B, 0x00, 0xB8, 0x00, 0xEC, 0x00, 0x44, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x09, 0x08, 0x24, 0x28, 0x06, 0x0C, 0x18, 0x08, 0x30, 0x14, 0x0C, - 0x08, 0x36, 0x10, 0x12, 0x24, 0xB7, 0x97, 0xB6, 0xA3, 0xB7, 0xAC, 0xB7, 0xA8, 0xB6, 0x3E, 0xB7, - 0x16, 0xB7, 0x79, 0x3E, 0x57, 0x3D, 0x79, 0x3E, 0xF9, 0x3D, 0x5F, 0x3D, 0x52, 0x3D, 0x33, 0x3E, - 0x55, 0x3E, 0x6A, 0x3E, 0xAC, 0x3E, 0xD8, 0x3E, 0xF8, 0x3D, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, - 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, 0x22, 0x46, - 0x23, 0x46, 0x23, 0x46, 0x23, 0x46, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, 0x1C, 0x47, - 0x1D, 0x47, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, - 0x5A, 0x48, 0x9A, 0x48, 0xDA, 0x48, 0x1A, 0x48, 0x5A, 0x48, 0x9A, 0x48, 0x33, 0x48, 0x78, 0x49, - 0x78, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x79, 0x49, 0x7A, 0x49, 0x7A, 0x49, 0x7A, 0x49, - 0x7A, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7B, 0x49, 0x7C, 0x49, 0xD8, 0x03, 0xDC, 0x03, 0xE0, 0x03, - 0xE4, 0x03, 0xF0, 0x03, 0xF4, 0x03, 0xF8, 0x03, 0x0A, 0x04, 0x0E, 0x04, 0x12, 0x04, 0x16, 0x04, - 0x0C, 0x04, 0x10, 0x04, 0x14, 0x04, 0x18, 0x04, 0x1C, 0x04, 0x20, 0x04, 0x24, 0x04, 0x28, 0x04, - 0x4C, 0x04, 0x50, 0x04, 0x54, 0x04, 0x58, 0x04, 0x5C, 0x04, 0x60, 0x04, 0x64, 0x04, 0x68, 0x04, - 0x6C, 0x04, 0x70, 0x04, 0x74, 0x04, 0x7D, 0x04, 0x81, 0x04, 0x85, 0x04, 0x89, 0x04, 0x8D, 0x04, - 0x10, 0x00, 0x8E, 0x19, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3C, 0x0C, 0x00, 0x00, - 0xFF, 0x3F, 0x44, 0x04, 0x00, 0x00, 0xD3, 0x22, 0x44, 0x04, 0x9C, 0x02, 0xCB, 0x54, 0x44, 0x04, - 0x00, 0x00, 0x01, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x71, 0x00, 0x30, 0x50, - 0x20, 0x00, 0x80, 0xBF, 0x1F, 0xA6, 0x28, 0x00, 0x0B, 0x02, 0x60, 0x84, 0x4C, 0x00, 0x02, 0x00, - 0x4B, 0x1C, 0x98, 0x00, 0x00, 0x00, 0x20, 0x0B, 0x34, 0x04, 0xFD, 0x34, 0x34, 0x00, 0x38, 0x04, - 0xFD, 0x34, 0x34, 0x00, 0x3C, 0x04, 0x01, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x52, 0x14, 0x00, - 0x04, 0x08, 0x0E, 0x32, 0x00, 0xA6, 0x10, 0x08, 0xC4, 0x03, 0x50, 0x60, 0x18, 0x08, 0xF0, 0x3F, - 0xFC, 0x01, 0x10, 0x0C, 0x00, 0x00, 0x80, 0x04, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x41, 0x20, 0x0C, - 0xB0, 0x00, 0xB0, 0xB8, 0x24, 0x0C, 0x00, 0x00, 0xAB, 0x05, 0x2C, 0x0C, 0x80, 0x05, 0x00, 0xFF, - 0x30, 0x0C, 0x00, 0x00, 0xB0, 0x04, 0x34, 0x0C, 0x03, 0x00, 0x00, 0xE8, 0x44, 0x0C, 0x04, 0x00, - 0xFF, 0x0F, 0x00, 0x10, 0x2E, 0x00, 0x0C, 0xE3, 0x44, 0x04, 0x00, 0x00, 0x01, 0x04, 0x44, 0x04, - 0x00, 0x00, 0x01, 0x01, 0x44, 0x04, 0x00, 0x00, 0x01, 0x00, 0x44, 0x04, 0x00, 0x00, 0x01, 0x04, - 0x44, 0x04, 0x00, 0x00, 0x80, 0x03, 0x48, 0x0C, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x04, 0x08, 0x48, - 0x00, 0x00, 0x04, 0x04, 0x08, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x71, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x5E, 0x40, 0x01, 0x00, 0x18, 0x00, 0x36, 0xC0, 0xE8, 0x0E, 0x1C, 0x00, 0x78, 0xC8, 0xA5, 0x40, - 0x24, 0x00, 0x9E, 0xB0, 0xB9, 0x95, 0x08, 0x08, 0x00, 0xEA, 0x40, 0x01, 0x0C, 0x08, 0x00, 0xEA, - 0x00, 0x00, 0x1C, 0x08, 0x00, 0x00, 0x42, 0x07, 0x20, 0x08, 0x7B, 0x00, 0xD4, 0x09, 0x2C, 0x04, - 0x14, 0x00, 0x50, 0x14, 0x30, 0x04, 0x28, 0x0F, 0x28, 0x7F, 0x18, 0x08, 0x20, 0x00, 0xFC, 0x01, - 0x04, 0x10, 0x69, 0x00, 0xFD, 0xC3, 0x08, 0x10, 0x69, 0x00, 0xFD, 0xC3, 0x08, 0x0C, 0x00, 0x00, - 0x00, 0x00, 0x48, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0C, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x04, - 0x08, 0x48, 0x02, 0x00, 0x00, 0x00, 0x5E, 0x48, 0x00, 0x00, 0x04, 0x04, 0x08, 0x40, 0x02, 0x00, - 0x00, 0x0C, 0x71, 0x00, 0x30, 0x50, 0x00, 0x00, 0x5E, 0x48, 0x01, 0x00, 0x18, 0x00, 0x3A, 0xC0, - 0xE8, 0x04, 0x1C, 0x00, 0x78, 0xD0, 0xA5, 0x40, 0x24, 0x00, 0x9E, 0xB0, 0xB9, 0x85, 0x2C, 0x04, - 0x14, 0x00, 0x50, 0x14, 0x30, 0x04, 0x28, 0x0F, 0x28, 0x7F, 0x08, 0x08, 0x00, 0xEA, 0x40, 0x01, - 0x0C, 0x08, 0x00, 0xEA, 0x00, 0x00, 0x1C, 0x08, 0x00, 0x00, 0x42, 0x07, 0x20, 0x08, 0x7B, 0x00, - 0xD4, 0x09, 0x18, 0x08, 0xF0, 0x3F, 0xFC, 0x01, 0x04, 0x10, 0x69, 0x00, 0xDD, 0xCD, 0x08, 0x10, - 0x69, 0x00, 0xDD, 0xCD, 0x08, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0C, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, 0x40, 0x04, 0x41, 0x04, 0x10, 0x04, 0xD6, 0x08, - 0x56, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x56, 0x0A, 0x18, 0x04, 0x56, 0x0A, 0x40, 0x02, 0x1C, 0x04, - 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0xC2, 0x00, 0xD6, 0x08, 0x24, 0x04, 0xD6, 0x08, 0xC0, 0x00, - 0x28, 0x04, 0xC2, 0x08, 0xC2, 0x28, 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, 0x00, 0x01, - 0x01, 0x01, 0x10, 0x04, 0x56, 0x0A, 0x56, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x56, 0x0A, 0x18, 0x04, - 0x56, 0x0A, 0x40, 0x02, 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0x42, 0x02, 0x56, 0x0A, - 0x24, 0x04, 0x56, 0x0A, 0x40, 0x02, 0x28, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x08, 0x04, 0x40, 0x01, - 0x41, 0x01, 0x0C, 0x04, 0x40, 0x04, 0x41, 0x04, 0x10, 0x04, 0xCE, 0x08, 0x4E, 0x0A, 0x14, 0x04, - 0x42, 0x02, 0x4E, 0x0A, 0x18, 0x04, 0x4E, 0x0A, 0x40, 0x02, 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, - 0x20, 0x04, 0xC2, 0x00, 0xCE, 0x08, 0x24, 0x04, 0xCE, 0x08, 0xC0, 0x00, 0x28, 0x04, 0xC2, 0x08, - 0xC2, 0x28, 0x08, 0x04, 0x40, 0x01, 0x41, 0x01, 0x0C, 0x04, 0x00, 0x01, 0x01, 0x01, 0x10, 0x04, - 0x4E, 0x0A, 0x4E, 0x0A, 0x14, 0x04, 0x42, 0x02, 0x4E, 0x0A, 0x18, 0x04, 0x4E, 0x0A, 0x40, 0x02, - 0x1C, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x20, 0x04, 0x42, 0x02, 0x4E, 0x0A, 0x24, 0x04, 0x4E, 0x0A, - 0x40, 0x02, 0x28, 0x04, 0x42, 0x0A, 0x42, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x05, 0x00, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x16, - 0xA0, 0x16, 0xA0, 0x16, 0xA0, 0x17, 0xA0, 0x17, 0xA0, 0x17, 0xA0, 0x18, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, - 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0xFF, 0x06, 0x00, 0x00, 0x65, 0x00, - 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x5D, 0x00, 0x52, 0x00, 0x48, 0x00, 0x40, 0x00, 0x38, 0x00, - 0x31, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x23, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x65, 0x00, 0x65, 0x00, - 0x65, 0x00, 0x65, 0x00, 0x5D, 0x00, 0x52, 0x00, 0x48, 0x00, 0x40, 0x00, 0x38, 0x00, 0x31, 0x00, - 0x2C, 0x00, 0x27, 0x00, 0x23, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, - 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x15, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x53, 0x53, 0x49, 0x44, 0x20, 0x21, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x09, - 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x48, 0x45, 0x52, 0x4D, 0x45, 0x53, - 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x15, 0x00, - 0x6E, 0x6F, 0x6E, 0x2D, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x53, 0x53, - 0x49, 0x44, 0x20, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x01, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x48, 0x45, - 0x52, 0x4D, 0x45, 0x53, 0x20, 0x32, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x20, 0x57, 0x61, 0x76, 0x65, 0x4C, 0x41, 0x4E, 0x20, 0x49, 0x49, 0x20, 0x53, - 0x53, 0x49, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, - 0x0F, 0x00, 0x50, 0x01, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, - 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0xFF, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0A, 0x00, - 0x0B, 0x00, 0x0B, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x02, 0x04, 0x0B, 0x16, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x82, 0x84, 0x8B, 0x96, 0x00, 0x00, - 0x00, 0x00, 0x1C, 0x85, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x20, 0x00, 0x1B, 0x00, 0x17, 0x00, 0x11, 0x00, 0x10, 0x00, 0x0B, 0x00, - 0x0B, 0x00, 0x09, 0x00, 0x17, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x09, 0x00, - 0x08, 0x00, 0x07, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x09, 0x00, 0x08, 0x00, 0x05, 0x00, 0x05, 0x00, - 0xD8, 0x0C, 0xC0, 0x08, 0x90, 0x0D, 0x60, 0x09, 0x48, 0x0E, 0x30, 0x0A, 0x24, 0x0F, 0x18, 0x0B, - 0x0B, 0x6E, 0x0B, 0x37, 0x02, 0x14, 0x01, 0x0A, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6E, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x53, 0x65, 0x74, 0x20, 0x49, - 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xDD, 0x00, 0x50, - 0xF2, 0x01, 0x01, 0x00, 0x00, 0x50, 0xF2, 0x05, 0x02, 0x00, 0x00, 0x50, 0xF2, 0x02, 0x00, 0x50, - 0xF2, 0x04, 0x02, 0x00, 0x00, 0x50, 0xF2, 0x00, 0x00, 0x50, 0xF2, 0x01, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x14, 0x00, 0x15, 0x00, 0x36, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x14, 0x00, - 0x11, 0x00, 0x36, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x10, 0x00, 0xBE, 0x33, 0x1E, 0x33, 0xCC, 0x35, 0xD0, 0x35, 0xD4, 0x35, 0x12, 0x34, - 0x04, 0x36, 0x08, 0x36, 0xF2, 0x33, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2F, 0x14, 0x33, 0x08, 0x36, - 0xFF, 0xFF, 0x00, 0x00, 0xBE, 0x33, 0x1E, 0x33, 0xCC, 0x35, 0xD0, 0x35, 0xD4, 0x35, 0x12, 0x34, - 0x04, 0x36, 0x08, 0x36, 0xF2, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0xBE, 0x33, 0x14, 0x33, 0x08, 0x36, 0x5C, 0x34, 0x2A, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x02, 0x06, 0x00, 0x00, 0x06, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2A, - 0x00, 0x00, 0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x00, 0x30, 0x00, 0xFF, 0xFF, 0x1D, 0xFA, - 0xF9, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x0A, - 0x09, 0x46, 0x1C, 0x60, 0x18, 0x00, 0x19, 0x1D, 0x09, 0x42, 0x1C, 0x60, 0x00, 0x00, - -}; /* fw_image_2_data */ - -static const hcf_8 fw_image_3_data[] = { - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, 0x1A, 0x00, 0x80, 0x3A, 0x15, 0x00, 0x7F, 0xF1, - 0x32, 0xF2, 0x33, 0xF2, 0xD0, 0x80, 0x80, 0xF1, 0x0F, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x81, 0xF1, - 0x0B, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x08, 0x02, 0xE9, 0x60, 0x58, 0x4F, 0x30, 0x78, 0xFF, 0xFF, - 0x24, 0x60, 0x58, 0x4F, 0xE3, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xD7, 0x78, 0xFF, 0xFF, 0x00, 0xF4, - 0xAA, 0x60, 0xAA, 0x65, 0x09, 0xF2, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x12, 0x02, 0xD0, 0x80, - 0x1D, 0x60, 0x60, 0x65, 0x0E, 0x02, 0x5A, 0xD2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x60, 0x00, 0x65, - 0x08, 0x02, 0x5A, 0xD2, 0xFF, 0xFF, 0xD4, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0x1C, 0x60, 0xD7, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0xEA, 0xF1, 0x5A, 0xD1, 0x44, 0x48, 0x5A, 0xD1, 0x44, 0x4A, 0x26, 0x46, - 0x3F, 0xF2, 0x00, 0xF4, 0x44, 0x4C, 0xD8, 0x83, 0x70, 0x61, 0x68, 0x65, 0xD7, 0x80, 0xFF, 0xFF, - 0x07, 0x0E, 0x08, 0xF2, 0x08, 0x00, 0x68, 0x65, 0xD7, 0x80, 0xFF, 0xFF, 0x01, 0x0E, 0x03, 0x00, - 0x1C, 0x60, 0xED, 0x78, 0xFF, 0xFF, 0x58, 0x4F, 0x79, 0x00, 0x9C, 0x80, 0x01, 0x65, 0x02, 0x02, - 0x00, 0x65, 0x02, 0x00, 0xFF, 0x3B, 0xF7, 0x01, 0x58, 0x4F, 0x70, 0x00, 0x9C, 0x80, 0x45, 0x42, - 0xEA, 0x02, 0x58, 0x4F, 0x6B, 0x00, 0x9C, 0x80, 0xFF, 0xFF, 0xE5, 0x02, 0x58, 0x4F, 0x66, 0x00, - 0x9C, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0x00, 0x65, 0x45, 0x42, 0xF8, 0x01, 0xFF, 0x3A, 0x29, 0x00, - 0x60, 0x47, 0xFF, 0xB5, 0x28, 0x44, 0xFF, 0xB4, 0x94, 0x80, 0xFF, 0xFF, 0xD4, 0x02, 0x60, 0x45, - 0x28, 0x47, 0x2A, 0x5F, 0x40, 0x48, 0x2A, 0x47, 0x2C, 0x5F, 0x40, 0x4A, 0x2C, 0x47, 0x65, 0x5F, - 0x40, 0x4C, 0x10, 0x64, 0x40, 0x42, 0x28, 0x45, 0x05, 0x00, 0x58, 0x4F, 0x47, 0x00, 0x94, 0x80, - 0x28, 0x45, 0x26, 0x02, 0x58, 0x4F, 0x42, 0x00, 0x94, 0x80, 0x2A, 0x45, 0x21, 0x02, 0x58, 0x4F, - 0x3D, 0x00, 0x94, 0x80, 0xFF, 0xFF, 0x1C, 0x02, 0x22, 0x44, 0x4C, 0x82, 0x2C, 0x45, 0x31, 0x03, - 0xEC, 0x01, 0x10, 0x65, 0x45, 0x42, 0x28, 0x45, 0x94, 0x80, 0x2A, 0x45, 0x21, 0x02, 0x58, 0x4F, - 0x2D, 0x00, 0x94, 0x80, 0x2C, 0x45, 0x1C, 0x02, 0x58, 0x4F, 0x28, 0x00, 0x94, 0x80, 0xFF, 0xFF, - 0x17, 0x02, 0x22, 0x44, 0x4C, 0x82, 0x28, 0x45, 0x1C, 0x03, 0x58, 0x4F, 0x1F, 0x00, 0xEC, 0x01, - 0x40, 0x4B, 0x28, 0x47, 0x40, 0x48, 0x2A, 0x47, 0x40, 0x4A, 0x2C, 0x47, 0x60, 0x45, 0x2A, 0x5E, - 0x40, 0x4C, 0x2A, 0x44, 0x28, 0x5E, 0x40, 0x4A, 0x28, 0x44, 0x65, 0x5E, 0x40, 0x48, 0x2B, 0x44, - 0x68, 0x65, 0xD7, 0x80, 0xFF, 0xFF, 0x17, 0x0E, 0x90, 0x01, 0x26, 0x46, 0xD0, 0x60, 0xB5, 0x78, - 0xFF, 0xFF, 0xB9, 0xFF, 0x26, 0x46, 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0xC9, 0x81, 0xCB, 0x83, - 0x07, 0x1C, 0x01, 0x1D, 0x08, 0x00, 0x00, 0xF4, 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB4, 0xD8, 0x81, - 0x5A, 0xD2, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0xD0, 0x60, 0x58, 0x4F, 0xD1, 0x78, 0xFF, 0xFF, - 0x01, 0x60, 0xFE, 0x61, 0x00, 0xF4, 0x12, 0x63, 0x6A, 0x64, 0x01, 0x65, 0xBD, 0xD0, 0xC8, 0x84, - 0x59, 0xD9, 0xFC, 0x02, 0x65, 0x40, 0x01, 0x3A, 0x05, 0x00, 0x00, 0xF4, 0x00, 0x65, 0x0E, 0x64, - 0x04, 0x63, 0xF4, 0x01, 0x2F, 0x60, 0x58, 0x64, 0x0E, 0x60, 0xD9, 0xFB, 0x1D, 0x60, 0xB0, 0x64, - 0xA0, 0xDF, 0x17, 0x60, 0xA8, 0xF3, 0x0E, 0x60, 0xDB, 0xFB, 0x0E, 0x60, 0xDB, 0xF3, 0x0E, 0x60, - 0xD8, 0xF3, 0x60, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x03, 0x02, 0x1D, 0x60, 0x7B, 0x78, 0xFF, 0xFF, - 0x01, 0x64, 0x0E, 0x60, 0xD7, 0xFB, 0x0E, 0x60, 0xD9, 0xF3, 0x02, 0x60, 0x00, 0x61, 0x40, 0x48, - 0x40, 0x4A, 0xFA, 0xA4, 0xA0, 0xD3, 0x41, 0x4C, 0xDC, 0x84, 0xA8, 0x84, 0x0E, 0x60, 0xDC, 0xFB, - 0x28, 0x45, 0x44, 0x8B, 0x2B, 0xD3, 0x0E, 0x60, 0xDA, 0xFB, 0x28, 0x42, 0x4A, 0xD3, 0x2C, 0x45, - 0x44, 0x8C, 0x01, 0x64, 0x40, 0x48, 0x0E, 0x60, 0xDC, 0xF3, 0xFF, 0xFF, 0x36, 0x18, 0xCC, 0x84, - 0xA2, 0xDB, 0x0E, 0x60, 0xDA, 0xF3, 0x28, 0x45, 0xA4, 0x80, 0xFF, 0xFF, 0x08, 0x03, 0x60, 0xFE, - 0x2C, 0xD3, 0x2A, 0xD3, 0x60, 0x45, 0xD4, 0x80, 0x20, 0xFE, 0x01, 0x03, 0x12, 0x00, 0x28, 0x44, - 0xE0, 0x84, 0xFF, 0xFF, 0x02, 0x24, 0x01, 0x00, 0x06, 0x00, 0x2B, 0x44, 0x58, 0x8B, 0x2B, 0xD3, - 0x0E, 0x60, 0xDA, 0xFB, 0x01, 0x64, 0x40, 0x48, 0x2A, 0x44, 0x5C, 0x8A, 0x2C, 0x44, 0x5C, 0x8C, - 0xDA, 0x01, 0x00, 0x64, 0x0E, 0x60, 0xD7, 0xFB, 0x0E, 0x60, 0xD9, 0xF3, 0xFF, 0xFF, 0x60, 0x45, - 0xFA, 0xA4, 0xA0, 0xD3, 0xFF, 0xFF, 0xC4, 0x81, 0x65, 0x44, 0xFC, 0xA4, 0xA0, 0xD3, 0x06, 0xA1, - 0xDC, 0x84, 0xA8, 0x84, 0x44, 0x94, 0x0E, 0x60, 0xD9, 0xFB, 0x0E, 0x60, 0xD7, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x26, 0x09, 0x00, 0x0E, 0x60, 0xD8, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0xA2, 0xDB, - 0x94, 0x01, 0x1C, 0x60, 0xD7, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xDB, 0x78, 0xFF, 0xFF, 0x00, 0x60, - 0x2E, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x5F, 0xFB, 0x01, 0x60, - 0x05, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x5E, 0xFB, 0x00, 0x60, - 0x02, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x65, 0xFB, 0x1F, 0x60, - 0x6D, 0x64, 0x08, 0x60, 0x36, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x01, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, - 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, 0x10, 0x60, 0x30, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, - 0x14, 0x63, 0x01, 0x60, 0xC2, 0x61, 0x2D, 0x60, 0x98, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, - 0x00, 0x60, 0x8A, 0x63, 0x2D, 0x60, 0x0C, 0x61, 0x2D, 0x60, 0xB0, 0x64, 0x58, 0xD1, 0x59, 0xD9, - 0xFD, 0x1F, 0x16, 0x60, 0xAB, 0xF3, 0x19, 0x60, 0x48, 0xF1, 0xFF, 0xB5, 0x64, 0x40, 0x02, 0x2B, - 0x0B, 0x00, 0x60, 0x40, 0x03, 0x2E, 0x08, 0x00, 0x80, 0x2B, 0x06, 0x00, 0x32, 0x44, 0x00, 0x60, - 0x80, 0x63, 0x3C, 0x94, 0x40, 0x52, 0x05, 0x00, 0x32, 0x44, 0xFF, 0x60, 0x7F, 0x63, 0x2C, 0x94, - 0x40, 0x52, 0x65, 0x43, 0x16, 0x60, 0xAB, 0xFD, 0x16, 0x60, 0xC2, 0xF1, 0x66, 0x41, 0xA6, 0xF5, - 0x3A, 0xF2, 0x64, 0x40, 0x01, 0x36, 0x22, 0x64, 0x3A, 0xFA, 0x61, 0x46, 0x32, 0x45, 0x16, 0x60, - 0xCB, 0xF1, 0x10, 0x67, 0xB4, 0x85, 0x64, 0x40, 0x01, 0x2A, 0x94, 0x85, 0x45, 0x52, 0xFF, 0x60, - 0xE7, 0x65, 0x32, 0x41, 0xA5, 0x81, 0x16, 0x60, 0xC2, 0xF3, 0x08, 0x65, 0xFF, 0xA0, 0xFF, 0xFF, - 0x01, 0x03, 0x07, 0x00, 0x16, 0x60, 0xC4, 0xF3, 0xB5, 0x81, 0x10, 0x65, 0x60, 0x40, 0x01, 0x26, - 0xB5, 0x81, 0x41, 0x52, 0x19, 0x60, 0x48, 0xF3, 0x37, 0x60, 0xE6, 0x63, 0xF0, 0x84, 0xF0, 0x84, - 0xF0, 0x84, 0x03, 0xB5, 0xF0, 0x84, 0xF0, 0x84, 0x03, 0xB4, 0x65, 0x5C, 0xA3, 0xD9, 0x37, 0x60, - 0xE8, 0x63, 0x02, 0xA8, 0xA3, 0xDB, 0x15, 0x02, 0x00, 0x60, 0xC8, 0x64, 0x1B, 0x60, 0xF5, 0xFB, - 0x1B, 0x60, 0xF9, 0xFB, 0x07, 0x60, 0xD0, 0x64, 0x1B, 0x60, 0xF6, 0xFB, 0x1B, 0x60, 0xFA, 0xFB, - 0x01, 0x60, 0x90, 0x64, 0x1B, 0x60, 0xF7, 0xFB, 0x00, 0x60, 0x64, 0x64, 0x1B, 0x60, 0xF8, 0xFB, - 0x06, 0x00, 0x64, 0x64, 0x1B, 0x60, 0xF7, 0xFB, 0x64, 0x64, 0x1B, 0x60, 0xF8, 0xFB, 0x19, 0x60, - 0x48, 0xF1, 0x01, 0x64, 0x64, 0x40, 0x40, 0x2A, 0x02, 0x00, 0x1B, 0x60, 0xEE, 0xFB, 0x33, 0x60, - 0xBC, 0x61, 0x2D, 0x60, 0x0E, 0x64, 0x20, 0x63, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0xBA, 0xF1, - 0x7E, 0xF9, 0x1A, 0x63, 0x00, 0x60, 0xFC, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, 0x40, 0x40, - 0x01, 0x64, 0x85, 0xFB, 0x17, 0x60, 0x14, 0xF3, 0x35, 0x60, 0x36, 0x61, 0xFE, 0xA4, 0xE0, 0x84, - 0x04, 0x24, 0x0C, 0x00, 0xE0, 0x84, 0x41, 0x91, 0x1A, 0x60, 0x1F, 0xF3, 0xA1, 0xD1, 0x59, 0xD1, - 0xA0, 0x83, 0x1A, 0x60, 0x1B, 0xFD, 0xA0, 0x83, 0x1A, 0x60, 0x1A, 0xFD, 0xE4, 0xF3, 0x7D, 0xFB, - 0xCF, 0xF1, 0x10, 0x60, 0xEC, 0x63, 0x2F, 0x18, 0x60, 0x40, 0x01, 0x27, 0x12, 0x00, 0xCC, 0x84, - 0x06, 0xA3, 0xFD, 0x02, 0xA3, 0xD3, 0x10, 0x60, 0xF2, 0x63, 0x25, 0x1B, 0x11, 0x60, 0x44, 0x65, - 0xA3, 0xD3, 0x06, 0xA3, 0xD7, 0x80, 0x02, 0x1B, 0xFB, 0x04, 0x1D, 0x00, 0xF8, 0xA3, 0xA3, 0xD3, - 0x18, 0x00, 0x11, 0x60, 0x60, 0x63, 0x12, 0x60, 0x40, 0x65, 0xA3, 0xD1, 0x08, 0xA3, 0xD0, 0x80, - 0xD7, 0x80, 0x02, 0x03, 0xFA, 0x04, 0x0F, 0x00, 0xFA, 0xA3, 0xA3, 0xD3, 0x11, 0x60, 0x62, 0x63, - 0x0A, 0x1B, 0xA3, 0xD3, 0x08, 0xA3, 0xD7, 0x80, 0x02, 0x1B, 0xFB, 0x04, 0x04, 0x00, 0xF6, 0xA3, - 0xA3, 0xD3, 0xE4, 0xFB, 0x7D, 0xFB, 0x2E, 0x60, 0x2E, 0x64, 0x2D, 0x60, 0x8A, 0x63, 0xA0, 0xD1, - 0xA3, 0xD9, 0x64, 0x41, 0x58, 0xD1, 0x5B, 0xD9, 0x7D, 0xF3, 0x66, 0x45, 0xA6, 0xF5, 0x60, 0x40, - 0x01, 0x27, 0x08, 0x00, 0x91, 0xFA, 0x61, 0x44, 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, - 0x12, 0xFA, 0x07, 0x00, 0x11, 0xF8, 0x64, 0x44, 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, - 0x12, 0xFA, 0x65, 0x46, 0x46, 0x48, 0xE2, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x05, 0x3A, 0x03, 0x00, - 0x14, 0x60, 0x22, 0x66, 0x11, 0x00, 0x04, 0x3A, 0x03, 0x00, 0x14, 0x60, 0x16, 0x66, 0x0C, 0x00, - 0x03, 0x3A, 0x03, 0x00, 0x14, 0x60, 0x0A, 0x66, 0x07, 0x00, 0x02, 0x3A, 0x03, 0x00, 0x13, 0x60, - 0xFE, 0x66, 0x02, 0x00, 0x13, 0x60, 0xF2, 0x66, 0x60, 0xFE, 0xA6, 0xD3, 0xDE, 0x86, 0x13, 0x60, - 0xDC, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, 0x28, 0x60, 0x29, 0x63, 0xA3, 0xDB, 0x28, 0x60, 0xA1, 0x63, - 0xA3, 0xDB, 0xA6, 0xD3, 0xDE, 0x86, 0x13, 0x60, 0xDB, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, 0x27, 0x60, - 0xB9, 0x63, 0xA3, 0xDB, 0x20, 0xFE, 0xA6, 0xD3, 0xDA, 0x86, 0x60, 0x43, 0x1F, 0xB3, 0x63, 0x5C, - 0x1F, 0x60, 0x00, 0xB4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xB0, 0x85, 0x14, 0x60, 0x12, 0xF3, - 0xFF, 0xFF, 0xFC, 0x60, 0x00, 0xB4, 0xB4, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x4E, 0xFB, 0x28, 0x60, - 0xC4, 0x63, 0xA3, 0xD3, 0xA6, 0xD1, 0xDE, 0x86, 0x80, 0x60, 0x7F, 0xB5, 0x64, 0x44, 0x60, 0x47, - 0xE8, 0x84, 0x7F, 0x60, 0x80, 0xB4, 0xB4, 0x84, 0xA3, 0xDB, 0x60, 0xFE, 0xA6, 0xD3, 0xDE, 0x86, - 0x13, 0x60, 0xDF, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, 0x00, 0x60, 0xDF, 0xFB, 0xA6, 0xD3, 0xDE, 0x86, - 0x00, 0x60, 0xE0, 0xFB, 0xA6, 0xD3, 0x00, 0x60, 0xE1, 0xFB, 0x20, 0xFE, 0x28, 0x46, 0x19, 0x60, - 0x4D, 0xF1, 0x00, 0x60, 0xCF, 0xF3, 0x64, 0x40, 0x00, 0x3A, 0x0F, 0x00, 0x60, 0x40, 0x01, 0x36, - 0x05, 0x00, 0x02, 0x36, 0x03, 0x00, 0x07, 0x36, 0x01, 0x00, 0x07, 0x00, 0x10, 0x60, 0xF0, 0x64, - 0x00, 0x7C, 0x44, 0xA4, 0xA0, 0xD9, 0x06, 0xA4, 0xA0, 0xD9, 0x36, 0x40, 0x08, 0x3A, 0x03, 0x00, - 0xF3, 0x60, 0x0A, 0x78, 0xFF, 0xFF, 0x00, 0x63, 0x10, 0x60, 0x10, 0xFD, 0x10, 0x60, 0x30, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x19, 0xFB, - 0x1E, 0x60, 0x8D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7D, 0xF1, 0x13, 0x60, - 0x1A, 0xF9, 0x0C, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x07, 0x64, 0xCC, 0xFB, 0x20, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x19, 0xFB, 0x1F, 0x60, 0x53, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x30, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, - 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xC5, 0xFE, 0x08, 0x60, 0x15, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x64, 0x08, 0x60, 0x18, 0xFB, - 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x30, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x02, 0x64, - 0x89, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x08, 0x60, 0x30, 0xF1, 0x00, 0x60, 0xDF, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x64, 0x13, 0x60, 0x21, 0xFB, 0xFF, 0xFF, 0x04, 0xFF, 0x08, 0x60, - 0x18, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x60, 0x08, 0x64, - 0x08, 0x60, 0x19, 0xFB, 0x1F, 0x60, 0x92, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x18, 0xF1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x89, 0xF3, 0x00, 0x65, - 0xD4, 0x80, 0xFF, 0xFF, 0x0A, 0x03, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x19, 0xFB, 0x1F, 0x60, - 0x92, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x95, 0xF3, 0xFF, 0xFF, 0x7F, 0xB4, - 0x95, 0xFB, 0xDE, 0xFE, 0x0A, 0x04, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x19, 0xFB, 0x1F, 0x60, - 0xB7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x60, 0x34, 0x62, 0x06, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x18, 0xFB, 0x5A, 0xDB, 0xBE, 0xFE, - 0xDA, 0xFE, 0x25, 0x60, 0xDA, 0x61, 0x1F, 0x60, 0x58, 0x4E, 0xEA, 0x78, 0xFF, 0xFF, 0x25, 0x60, - 0xC8, 0x61, 0x1F, 0x60, 0x58, 0x4E, 0xEA, 0x78, 0xFF, 0xFF, 0x25, 0x60, 0xCE, 0x61, 0x1F, 0x60, - 0x58, 0x4E, 0xEA, 0x78, 0xFF, 0xFF, 0x25, 0x60, 0xEC, 0x61, 0x1F, 0x60, 0x58, 0x4E, 0xEA, 0x78, - 0xFF, 0xFF, 0x25, 0x60, 0xF2, 0x61, 0x1F, 0x60, 0x58, 0x4E, 0xEA, 0x78, 0xFF, 0xFF, 0x25, 0x60, - 0xFE, 0x61, 0x1F, 0x60, 0x58, 0x4E, 0xEA, 0x78, 0xFF, 0xFF, 0xC5, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xA1, 0xD3, 0x0E, 0x57, 0x23, 0x00, 0x0E, 0xF2, 0x44, 0x4C, 0x80, 0xB0, 0x10, 0xB0, 0x0A, 0x03, - 0x00, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x13, 0x00, 0x12, 0x02, 0xF0, 0x37, 0x09, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, - 0xD0, 0x80, 0xA2, 0xFF, 0xAD, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0xAD, 0xFB, 0x26, 0x60, 0x1A, 0x64, - 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x2C, 0x44, 0xAC, 0x86, 0x09, 0xF0, - 0xDA, 0x02, 0x37, 0x58, 0xFF, 0xFF, 0x2E, 0x58, 0xFF, 0xFF, 0x2E, 0x58, 0xFF, 0xFF, 0x23, 0x60, - 0x85, 0x64, 0x08, 0x60, 0x32, 0xFB, 0x1C, 0x60, 0xB6, 0x62, 0xA2, 0xDF, 0x06, 0xA2, 0x10, 0x60, - 0x88, 0x64, 0xA2, 0xDB, 0x06, 0x64, 0x5A, 0xDB, 0x5A, 0xDB, 0x1C, 0x60, 0xC2, 0x62, 0xA2, 0xDF, - 0x06, 0xA2, 0x10, 0x60, 0x8C, 0x64, 0xA2, 0xDB, 0x06, 0x64, 0x5A, 0xDB, 0x5A, 0xDB, 0x1C, 0x60, - 0xCE, 0x62, 0xA2, 0xDF, 0x06, 0xA2, 0x10, 0x60, 0x90, 0x64, 0xA2, 0xDB, 0x06, 0x64, 0x5A, 0xDB, - 0x5A, 0xDB, 0xBD, 0xF1, 0x0E, 0x60, 0x69, 0xF9, 0x24, 0x60, 0xC1, 0x64, 0x08, 0x60, 0x43, 0xFB, - 0x24, 0x60, 0xCA, 0x64, 0x08, 0x60, 0x45, 0xFB, 0x24, 0x60, 0xD3, 0x64, 0x08, 0x60, 0x47, 0xFB, - 0x00, 0x60, 0x3A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x62, 0xFB, - 0x04, 0x64, 0x03, 0xFA, 0xA6, 0xF3, 0x07, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x00, 0x60, - 0x02, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x20, 0x60, 0x63, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x18, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x03, 0x64, 0x69, 0xFB, 0x0F, 0x4E, - 0xEA, 0x60, 0x58, 0x4F, 0x34, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0x00, 0x64, 0x6B, 0xFB, 0x62, 0xF5, - 0xEA, 0xF3, 0x2F, 0xFA, 0xEB, 0xF3, 0x30, 0xFA, 0xEC, 0xF3, 0x31, 0xFA, 0x7F, 0xF3, 0x2C, 0xFA, - 0x32, 0xFA, 0x80, 0xF3, 0x2D, 0xFA, 0x33, 0xFA, 0x81, 0xF3, 0x2E, 0xFA, 0x34, 0xFA, 0xB9, 0xF3, - 0x19, 0xFA, 0x06, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x60, - 0x0C, 0xF1, 0xFF, 0x60, 0x8F, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xBE, 0xF1, 0x0E, 0x60, 0x63, 0xF9, - 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x00, 0x64, 0x6B, 0xFB, 0x00, 0x60, 0x74, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x20, 0x60, 0xAE, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x04, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x23, 0x60, 0x85, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xE2, 0x01, - 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x11, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, - 0x50, 0x27, 0xD8, 0x01, 0xAC, 0xF3, 0xFF, 0xFF, 0xFE, 0xA0, 0xFF, 0xFF, 0x0F, 0x06, 0x6B, 0xF3, - 0xFF, 0xFF, 0xEC, 0xA0, 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0xCC, 0x01, 0x00, 0x60, 0x10, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0xCF, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x01, 0x00, 0xC3, 0x01, 0x01, 0x64, - 0x19, 0x60, 0xF3, 0xFB, 0xDF, 0xF3, 0x29, 0x45, 0xD4, 0x80, 0x6B, 0xF3, 0x03, 0x04, 0x21, 0x60, - 0x28, 0x78, 0xFF, 0xFF, 0xEC, 0xA0, 0x00, 0x64, 0x04, 0x04, 0x40, 0x49, 0x21, 0x60, 0x28, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x64, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x20, 0x60, 0xFD, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x23, 0x60, 0x85, 0x78, 0xFF, 0xFF, 0x00, 0x60, - 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xD0, 0x01, 0x00, 0x60, - 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xE5, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, - 0xE0, 0x01, 0xAC, 0xF3, 0xFF, 0xFF, 0xFE, 0xA0, 0xFF, 0xFF, 0x07, 0x06, 0x6B, 0xF3, 0xFF, 0xFF, - 0xEC, 0xA0, 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0xBA, 0x01, 0xB9, 0x01, 0x33, 0x60, 0xE6, 0x65, - 0xA5, 0xDF, 0xBF, 0xF1, 0x0E, 0x60, 0x63, 0xF9, 0xE0, 0xF3, 0x29, 0x45, 0x03, 0xA4, 0xD4, 0x80, - 0x01, 0x63, 0x01, 0x05, 0x00, 0x63, 0x53, 0xFD, 0x7D, 0xF3, 0x01, 0x60, 0x00, 0x65, 0xA4, 0x80, - 0x24, 0x44, 0xFE, 0xB4, 0x01, 0x03, 0x01, 0xBC, 0x40, 0x44, 0x21, 0x60, 0x45, 0x64, 0x6A, 0xFB, - 0x23, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xFF, 0x60, 0xDF, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x86, 0xF1, 0x1B, 0x60, 0xB2, 0x63, 0xD3, 0x80, 0x67, 0xFD, 0x43, 0x03, 0x67, 0xF3, - 0xE1, 0xF1, 0x60, 0x43, 0x29, 0x44, 0xA3, 0xD3, 0xC0, 0x85, 0xD4, 0x80, 0x5B, 0xD3, 0x3A, 0x06, - 0x60, 0x43, 0x08, 0xA3, 0xBE, 0xD3, 0x81, 0xF1, 0xA3, 0xD3, 0xD0, 0x80, 0x80, 0xF1, 0x05, 0x02, - 0xBF, 0xD3, 0xD0, 0x80, 0x7F, 0xF1, 0x01, 0x02, 0xD0, 0x80, 0xF8, 0xA3, 0x28, 0x02, 0x21, 0x60, - 0x77, 0x64, 0x6A, 0xFB, 0x23, 0x60, 0xB4, 0x78, 0xFF, 0xFF, 0x01, 0xB0, 0x82, 0xF3, 0x22, 0x03, - 0x62, 0xF5, 0x48, 0x7E, 0x2A, 0xFA, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x60, 0x01, 0x64, - 0x08, 0x60, 0x0D, 0xFB, 0x21, 0x60, 0x92, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x0C, 0xF1, 0xFF, 0x60, 0xFE, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x03, 0x00, 0x23, 0x60, - 0x7A, 0x78, 0xFF, 0xFF, 0x6B, 0xF3, 0xFF, 0xFF, 0xEC, 0xA0, 0x00, 0x64, 0x02, 0x04, 0x40, 0x49, - 0x15, 0x00, 0xDF, 0xF3, 0x29, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x0B, 0x07, 0x1C, 0x60, 0xC2, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x20, 0x60, 0x86, 0x78, - 0xFF, 0xFF, 0xE0, 0xF3, 0x29, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x16, 0x06, 0x04, 0x65, 0xF1, 0x60, - 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, 0x05, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, - 0xF1, 0xFB, 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x22, 0x60, 0x1B, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x74, 0x64, 0x08, 0x60, 0x0D, 0xFB, - 0x21, 0x60, 0xD8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, - 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x23, 0x60, - 0x85, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0xB0, 0x01, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x15, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, 0xA6, 0x01, 0xAC, 0xF3, 0x6B, 0xF3, 0xFE, 0xA0, 0xEC, 0xA0, - 0x0A, 0x06, 0x03, 0x04, 0x00, 0x64, 0x55, 0xFB, 0x40, 0x49, 0x6B, 0xF3, 0xFF, 0xFF, 0xEC, 0xA0, - 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0x96, 0x01, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x0D, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x21, 0x60, 0x28, 0x78, 0xFF, 0xFF, 0x21, 0x60, 0x9C, 0x78, - 0xFF, 0xFF, 0x7D, 0xF3, 0x01, 0x60, 0x00, 0x65, 0xA4, 0x80, 0x24, 0x44, 0xFE, 0xB4, 0x01, 0x03, - 0x01, 0xBC, 0x02, 0xB0, 0xFB, 0xB4, 0x01, 0x03, 0x04, 0xBC, 0x40, 0x44, 0xC0, 0xF1, 0x0E, 0x60, - 0x63, 0xF9, 0xCF, 0xF3, 0x20, 0x60, 0x20, 0x65, 0x30, 0x1B, 0xA5, 0xD3, 0x24, 0x40, 0x01, 0x26, - 0x16, 0x00, 0x60, 0x40, 0x20, 0x26, 0x29, 0x00, 0x01, 0xBC, 0xA5, 0xDB, 0x08, 0x60, 0x1E, 0xF1, - 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x0D, 0xFB, 0x22, 0x60, 0x5F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x60, 0x40, - 0x10, 0x26, 0x13, 0x00, 0x01, 0xBC, 0xA5, 0xDB, 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, 0x40, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x22, 0x60, - 0x5F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0D, 0x64, 0x53, 0xFB, 0x22, 0x60, - 0x67, 0x64, 0x6A, 0xFB, 0x23, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xFF, 0x60, - 0xDF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x86, 0xF1, 0x1B, 0x60, 0xB2, 0x63, 0xD3, 0x80, 0x67, 0xFD, - 0x07, 0x02, 0x24, 0x44, 0x04, 0xB0, 0xFF, 0xFF, 0x36, 0x03, 0x05, 0xAC, 0x40, 0x44, 0xA6, 0x01, - 0x67, 0xF3, 0x29, 0x41, 0xA0, 0xD1, 0x58, 0xD3, 0xD1, 0x80, 0x64, 0x45, 0x60, 0x43, 0x2B, 0x05, - 0x08, 0xA3, 0xBE, 0xD3, 0x81, 0xF1, 0xA3, 0xD3, 0xD0, 0x80, 0x80, 0xF1, 0x05, 0x02, 0xBF, 0xD3, - 0xD0, 0x80, 0x7F, 0xF1, 0x01, 0x02, 0xD0, 0x80, 0xF8, 0xA3, 0x07, 0x02, 0x45, 0x49, 0x22, 0x60, - 0xCD, 0x64, 0x6A, 0xFB, 0x23, 0x60, 0xB4, 0x78, 0xFF, 0xFF, 0x05, 0x65, 0xF1, 0x60, 0x58, 0x4E, - 0xC3, 0x78, 0xFF, 0xFF, 0x04, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, - 0x23, 0x60, 0x7A, 0x78, 0xFF, 0xFF, 0x67, 0xF3, 0x86, 0xF1, 0x04, 0xA4, 0xD0, 0x80, 0xFF, 0xFF, - 0x02, 0x03, 0x67, 0xFB, 0xCD, 0x01, 0x6B, 0xF3, 0xFF, 0xFF, 0xEC, 0xA0, 0xFF, 0xFF, 0x01, 0x04, - 0x75, 0x00, 0xE0, 0xF3, 0x29, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x70, 0x05, 0x7D, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x27, 0x08, 0x00, 0x22, 0x60, 0xCD, 0x63, 0x6A, 0xFD, 0x1C, 0x60, 0x78, 0x63, - 0x23, 0x60, 0xB4, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x05, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, - 0x20, 0x60, 0x14, 0x61, 0xA1, 0xDF, 0x04, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, - 0xF1, 0xFB, 0x82, 0xF3, 0x62, 0xF5, 0x48, 0x7E, 0x2A, 0xFA, 0x02, 0x60, 0x00, 0x65, 0x20, 0x44, - 0x34, 0x80, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x60, 0x01, 0x64, 0x08, 0x60, 0x0D, 0xFB, - 0x23, 0x60, 0x00, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, - 0xFF, 0x60, 0xFE, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x00, 0x60, 0x32, 0x64, 0x0E, 0x60, 0x63, 0xFB, - 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x00, 0x60, 0x10, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x23, 0x60, 0x1C, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0xFD, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x20, 0x60, 0x86, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x74, 0x64, - 0x08, 0x60, 0x0D, 0xFB, 0x23, 0x60, 0x3A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x23, 0x60, 0x85, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x40, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x67, 0x01, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x15, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x50, 0x27, 0xE0, 0x01, 0xAC, 0xF3, 0x6B, 0xF3, - 0xFE, 0xA0, 0xEC, 0xA0, 0x0A, 0x06, 0x03, 0x04, 0x00, 0x64, 0x55, 0xFB, 0x40, 0x49, 0x6B, 0xF3, - 0xFF, 0xFF, 0xEC, 0xA0, 0xDC, 0x84, 0x01, 0x05, 0xA2, 0xDB, 0x4D, 0x01, 0x00, 0x60, 0x10, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0xCB, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x22, 0x60, 0x1B, 0x78, 0xFF, 0xFF, - 0x08, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x20, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0xB6, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x0C, 0xFB, 0x5A, 0xDB, 0x00, 0x64, - 0x69, 0xFB, 0x08, 0x60, 0x08, 0xF1, 0x02, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x00, 0x60, 0x02, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x20, 0x60, 0x63, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xA3, 0xD3, 0x7D, 0xF1, 0x7C, 0xFB, 0xD0, 0x80, 0x00, 0x64, 0x39, 0x03, - 0x08, 0x60, 0x0C, 0xF1, 0xBF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, - 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x23, 0x60, 0xBA, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xDF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x7C, 0xF1, 0x7D, 0xF9, 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x23, 0x60, 0xE4, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x0C, 0xF1, 0xDF, 0x60, 0xFF, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x01, 0x64, 0x6A, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, - 0x08, 0x60, 0x0C, 0xF1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x20, 0x40, 0x51, 0x23, - 0x0A, 0x00, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x23, 0x60, 0xFA, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0x7F, 0x60, 0xFF, 0x61, 0xA1, 0x84, - 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x02, 0x64, 0x8A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, - 0x8A, 0xF3, 0x00, 0x65, 0xD4, 0x80, 0xFF, 0xFF, 0x10, 0x03, 0x08, 0x60, 0x0C, 0xF1, 0x7F, 0x60, - 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x24, 0x60, - 0x16, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x33, 0x60, 0xBE, 0x64, 0x54, 0xFB, - 0x08, 0x60, 0x0C, 0xF1, 0xEF, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x24, 0x44, 0x01, 0xB0, - 0xFF, 0xFF, 0x08, 0x02, 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x07, 0x00, 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x0D, 0xFB, 0x24, 0x60, 0x55, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0xC2, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xEF, 0x60, 0xEF, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x01, 0x64, 0x8A, 0xFB, 0x6B, 0xF3, 0x00, 0x60, 0x95, 0xF3, 0xEC, 0xA0, 0x40, 0xBC, - 0x06, 0x04, 0xA2, 0xDB, 0x69, 0xF1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0x69, 0xFB, 0xFD, 0x60, - 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x6A, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0xF1, 0x28, 0x44, - 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, - 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, 0xA2, 0xDB, 0x2E, 0x58, 0xFF, 0xFF, 0x56, 0xF1, 0x28, 0x44, - 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, - 0xC0, 0x84, 0x5B, 0xF1, 0x56, 0xFB, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x05, 0x64, 0x44, 0x52, 0xFB, - 0x2E, 0x58, 0xFF, 0xFF, 0x52, 0xF1, 0x2F, 0x67, 0xD0, 0x80, 0x60, 0x45, 0x02, 0x28, 0x64, 0x45, - 0x55, 0xF1, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, 0x02, 0x24, 0x64, 0x41, 0xD5, 0x84, 0x80, 0x65, - 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, 0x40, 0x49, 0x2E, 0x58, 0xFF, 0xFF, 0x08, 0x60, - 0x0C, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x27, 0xF2, 0x70, 0x63, 0x60, 0x40, 0x0A, 0x36, 0x10, 0x00, 0x14, 0x36, - 0x14, 0x00, 0x37, 0x36, 0x0E, 0x00, 0x6E, 0x36, 0x0E, 0x00, 0x06, 0x36, 0x04, 0x00, 0x09, 0x36, - 0x04, 0x00, 0x18, 0x63, 0x0A, 0x00, 0x30, 0x63, 0x08, 0x00, 0x26, 0x63, 0x06, 0x00, 0xD0, 0x63, - 0x04, 0x00, 0x33, 0x63, 0x02, 0x00, 0x21, 0x63, 0x00, 0x00, 0x10, 0x60, 0x0E, 0xFD, 0x26, 0x46, - 0x3F, 0xF2, 0x87, 0xF0, 0x00, 0xF4, 0x45, 0x43, 0x03, 0x4B, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, - 0x1D, 0x61, 0x00, 0x60, 0x01, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, - 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, 0x40, 0x4A, 0x60, 0xFE, - 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, - 0xFF, 0xFF, 0x20, 0xFE, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, - 0x1D, 0x61, 0x00, 0x60, 0x32, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, - 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, - 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x2A, 0x44, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF2, 0x01, 0x60, - 0x00, 0x65, 0xF4, 0xA4, 0xD4, 0x80, 0x60, 0x41, 0x02, 0x24, 0x65, 0x41, 0x41, 0x48, 0x00, 0xF4, - 0x1E, 0x65, 0x02, 0x60, 0x00, 0x63, 0xA5, 0xD0, 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, - 0x04, 0x65, 0x64, 0x44, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, - 0xCD, 0x81, 0xBD, 0xDB, 0xF0, 0x02, 0x02, 0x60, 0x00, 0x63, 0x28, 0x41, 0xBD, 0xD3, 0xBD, 0xD1, - 0xFD, 0xA0, 0xFE, 0xA1, 0x07, 0x03, 0x09, 0x06, 0x64, 0x44, 0xE0, 0x85, 0xD1, 0x81, 0xC7, 0x83, - 0xF5, 0x07, 0x03, 0x00, 0xA3, 0xD3, 0x0E, 0x60, 0x3C, 0xFB, 0x31, 0x40, 0x06, 0x26, 0x57, 0x00, - 0x00, 0x64, 0x6F, 0xFB, 0x02, 0x60, 0x00, 0x63, 0x28, 0x41, 0xBD, 0xD3, 0xBD, 0xD1, 0xFC, 0xA0, - 0xFB, 0xA0, 0x09, 0x03, 0x28, 0x03, 0x64, 0x44, 0xE0, 0x85, 0xC7, 0x83, 0xD1, 0x81, 0xFE, 0xA1, - 0x46, 0x06, 0xF3, 0x07, 0x44, 0x00, 0xBD, 0xD3, 0xBD, 0xD3, 0x00, 0xB8, 0x6F, 0xFB, 0x6E, 0xFB, - 0xBD, 0xD3, 0x3D, 0x02, 0xA3, 0xD3, 0x60, 0x45, 0x60, 0x47, 0xB4, 0x84, 0x60, 0x41, 0x3F, 0xB5, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x71, 0xFB, 0x65, 0x47, - 0xE0, 0x84, 0xE0, 0x84, 0x70, 0xFB, 0x64, 0x44, 0xE0, 0x85, 0xFA, 0xA3, 0xC7, 0x83, 0x61, 0x44, - 0x0E, 0x60, 0x38, 0xFB, 0xD2, 0x01, 0xBD, 0xD3, 0xA3, 0xD3, 0x00, 0xB8, 0x6D, 0xFB, 0x73, 0xFB, - 0x1E, 0x02, 0x85, 0xF1, 0x6F, 0xF3, 0x6C, 0xF9, 0x04, 0x65, 0x60, 0x40, 0x00, 0x3A, 0x06, 0x65, - 0x31, 0x44, 0xB4, 0x84, 0x40, 0x51, 0x02, 0x2A, 0x0B, 0x00, 0x08, 0xBC, 0x40, 0x51, 0x71, 0xF3, - 0x70, 0xF1, 0x00, 0xB8, 0x64, 0x45, 0x01, 0x03, 0x67, 0x45, 0x65, 0x50, 0xCC, 0x84, 0x72, 0xFB, - 0x08, 0x60, 0x15, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x60, - 0x16, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2A, 0x3F, 0x00, 0x01, 0x64, 0x10, 0x60, 0x0A, 0xFB, - 0x26, 0x60, 0x58, 0x4E, 0x65, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x0D, 0xF2, 0x7E, 0xFB, - 0x00, 0x64, 0x84, 0xFB, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, - 0x1D, 0x61, 0x00, 0x60, 0x07, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, - 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x14, 0x03, 0x02, 0x60, 0x00, 0x65, 0xA5, 0xD3, - 0x1C, 0x60, 0xE6, 0x63, 0xFF, 0xB4, 0x01, 0xA4, 0x60, 0x41, 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x44, - 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, 0x05, 0x03, 0x64, 0x47, 0x00, 0x7F, 0xCD, 0x81, 0xBD, 0xDB, - 0xF4, 0x02, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x32, 0x00, 0x27, 0x60, 0x57, 0x78, 0xFF, 0xFF, 0xDB, 0xF3, 0xFF, 0xFF, 0x03, 0xA8, 0x02, 0xA8, - 0x02, 0x03, 0x3E, 0x02, 0xF6, 0x01, 0x08, 0x60, 0x15, 0xF1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x26, 0x46, 0x10, 0x60, 0x0E, 0xF3, 0x25, 0xF2, 0x60, 0x45, 0x24, 0xF0, 0x00, 0xF4, - 0x64, 0x43, 0xC7, 0x83, 0x60, 0x41, 0x02, 0x24, 0x01, 0xA1, 0x0A, 0xF0, 0x09, 0xF2, 0xD1, 0x80, - 0xFF, 0xFF, 0x09, 0x07, 0x04, 0x04, 0x63, 0x45, 0xD4, 0x80, 0xFF, 0xFF, 0x04, 0x06, 0x26, 0x60, - 0x58, 0x4E, 0x65, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x26, 0xF0, 0xFF, 0x67, 0x20, 0x88, 0x64, 0x5F, - 0x40, 0x4A, 0x24, 0x60, 0x58, 0x4E, 0x80, 0x78, 0xFF, 0xFF, 0x0A, 0x48, 0x24, 0x60, 0x58, 0x4E, - 0x90, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x0D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x22, 0xB3, 0x01, 0x00, 0x60, 0x95, 0xF3, - 0xFF, 0xFF, 0xBF, 0xB4, 0xA2, 0xDB, 0x10, 0x60, 0x0E, 0xF3, 0x26, 0x46, 0x60, 0x45, 0x20, 0x60, - 0x04, 0x63, 0x00, 0xF4, 0x09, 0xF2, 0xBD, 0xDB, 0xFF, 0xFF, 0x0A, 0xF2, 0xBD, 0xDB, 0x0B, 0xF2, - 0xFF, 0xFF, 0xBD, 0xDB, 0x0C, 0xF2, 0xA3, 0xDB, 0xFA, 0xA3, 0x26, 0x46, 0xA3, 0xD3, 0x24, 0xF0, - 0x00, 0x61, 0xD0, 0x84, 0xF1, 0x81, 0xD4, 0x84, 0xF1, 0x81, 0xBD, 0xDB, 0xA3, 0xD3, 0x03, 0xB1, - 0x03, 0xA9, 0x25, 0xF0, 0x42, 0xFE, 0x05, 0x03, 0xFD, 0xA1, 0xCC, 0x84, 0x01, 0x02, 0xCC, 0x84, - 0x00, 0x61, 0xF1, 0x81, 0xD0, 0x84, 0xF1, 0x81, 0xBD, 0xDB, 0xA3, 0xD3, 0x03, 0xB1, 0x03, 0xA9, - 0x28, 0xF0, 0x42, 0xFE, 0x01, 0x03, 0xCC, 0x84, 0xF1, 0x81, 0xD0, 0x84, 0xF1, 0x81, 0xBD, 0xDB, - 0xA3, 0xD3, 0x03, 0xB1, 0x03, 0xA9, 0x29, 0xF0, 0x01, 0x03, 0xCC, 0x84, 0xD0, 0x84, 0xA3, 0xDB, - 0x10, 0x60, 0x0A, 0xF3, 0xFF, 0xFF, 0x02, 0xA8, 0xFF, 0xFF, 0x02, 0x02, 0x2E, 0x58, 0xFF, 0xFF, - 0xF5, 0xFE, 0x10, 0x60, 0x02, 0xF1, 0x06, 0xA2, 0xA2, 0xD3, 0x64, 0x45, 0x60, 0x40, 0x80, 0x2B, - 0x03, 0x00, 0xFF, 0x60, 0xFF, 0x64, 0x94, 0x85, 0x00, 0x60, 0x96, 0x64, 0xD4, 0x80, 0xFF, 0xFF, - 0x0A, 0x06, 0x10, 0x60, 0x0A, 0xF3, 0x69, 0xF3, 0x00, 0xA8, 0x04, 0xB0, 0x04, 0x02, 0x03, 0x03, - 0x27, 0x60, 0x33, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0x09, 0xF2, 0x5A, 0xD2, 0x40, 0x48, - 0x40, 0x4A, 0x5A, 0xD2, 0x5A, 0xD2, 0x40, 0x4C, 0x60, 0x41, 0x5A, 0xD0, 0x7E, 0xF9, 0x40, 0x63, - 0xAD, 0x80, 0xF0, 0xA3, 0x09, 0x02, 0x3C, 0x03, 0x2C, 0x41, 0x2A, 0x44, 0x40, 0x4C, 0x28, 0x44, - 0x40, 0x4A, 0x00, 0x64, 0x40, 0x48, 0xF4, 0x01, 0xD1, 0x80, 0x01, 0x02, 0x31, 0x04, 0x10, 0xA3, - 0x80, 0x60, 0x00, 0x65, 0xA5, 0x80, 0xCF, 0x83, 0x08, 0x02, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, - 0x70, 0x8A, 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF5, 0x01, 0xE7, 0xA3, 0x64, 0x44, 0x00, 0xA8, - 0x00, 0x62, 0x02, 0x02, 0x00, 0x61, 0x1C, 0x00, 0xE0, 0x84, 0xDE, 0x82, 0xFD, 0x04, 0x42, 0xFE, - 0xF8, 0x84, 0x62, 0x45, 0xC7, 0x83, 0x60, 0x45, 0x02, 0xFE, 0xD5, 0x84, 0x02, 0x05, 0x01, 0x05, - 0x61, 0x44, 0xCF, 0x83, 0x60, 0x41, 0x08, 0x03, 0x28, 0x44, 0x60, 0x88, 0x2A, 0x44, 0x70, 0x8A, - 0x2C, 0x44, 0x70, 0x8C, 0xF1, 0x81, 0xF1, 0x01, 0xCE, 0x82, 0xE9, 0x81, 0xFD, 0x02, 0xF1, 0x81, - 0x09, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0xE8, 0x84, 0xE8, 0x84, 0x5A, 0xD2, 0x3F, 0xB5, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x84, 0x61, 0x45, 0xD4, 0x84, - 0xC0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x93, 0x10, 0x60, 0x0A, 0xF3, 0xFF, 0xFF, - 0x02, 0x18, 0x2E, 0x58, 0xFF, 0xFF, 0x16, 0x65, 0x32, 0x40, 0x80, 0x26, 0x16, 0x65, 0x73, 0x44, - 0xD4, 0x93, 0x69, 0xF3, 0x26, 0x46, 0x04, 0xBC, 0xA2, 0xDB, 0x26, 0xF0, 0xFF, 0x67, 0x20, 0x88, - 0x64, 0x5F, 0x40, 0x4A, 0x24, 0x60, 0x58, 0x4E, 0x80, 0x78, 0xFF, 0xFF, 0x0A, 0x48, 0x24, 0x60, - 0x58, 0x4E, 0x90, 0x78, 0xFF, 0xFF, 0x24, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x6B, 0xF3, - 0xFF, 0xFF, 0xC8, 0x84, 0xFF, 0xFF, 0x01, 0x05, 0x00, 0x64, 0x6B, 0xFB, 0x08, 0x60, 0x0C, 0xF1, - 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x08, 0x60, 0x0C, 0xF1, 0xFF, 0x60, - 0xDF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1E, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, - 0xDA, 0x63, 0xA3, 0xDF, 0x06, 0xA3, 0x10, 0x60, 0xA4, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, - 0xA3, 0xDB, 0x27, 0x60, 0x68, 0x64, 0x08, 0x60, 0x51, 0xFB, 0x10, 0x60, 0x0F, 0xF1, 0x0E, 0x60, - 0x6F, 0xF9, 0x27, 0x60, 0xCF, 0x64, 0x08, 0x60, 0x38, 0xFB, 0x11, 0x60, 0x44, 0x63, 0x08, 0x60, - 0x66, 0xFD, 0x12, 0x60, 0x40, 0x63, 0x08, 0x60, 0x67, 0xFD, 0xCF, 0xF3, 0x02, 0x63, 0x01, 0x1B, - 0xCF, 0xFD, 0xCF, 0xF3, 0xFF, 0xFF, 0xF7, 0xA0, 0x01, 0x64, 0x01, 0x06, 0xCF, 0xFB, 0xCF, 0xF3, - 0xCF, 0xFB, 0xCF, 0xF3, 0x12, 0x60, 0x78, 0x63, 0x26, 0x18, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, - 0x2A, 0xA3, 0xFB, 0x01, 0x63, 0x46, 0x10, 0x60, 0xF2, 0x63, 0x0E, 0x61, 0x60, 0xFE, 0xA6, 0xD1, - 0xDE, 0x86, 0x01, 0x64, 0x64, 0x40, 0x7F, 0x36, 0x00, 0x64, 0xA3, 0xDB, 0xDB, 0x83, 0xA3, 0xD9, - 0xCD, 0x81, 0x04, 0xA3, 0xF4, 0x02, 0x11, 0x60, 0x62, 0x63, 0x1C, 0x61, 0xA6, 0xD1, 0xDE, 0x86, - 0x01, 0x64, 0x64, 0x40, 0x7F, 0x36, 0x00, 0x64, 0xA3, 0xDB, 0xDB, 0x83, 0xA3, 0xD9, 0xCD, 0x81, - 0x06, 0xA3, 0xF4, 0x02, 0x20, 0xFE, 0x00, 0x60, 0x60, 0x64, 0x08, 0x60, 0x1F, 0xFB, 0x27, 0x60, - 0xE1, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x11, 0x60, 0x44, 0x63, 0x08, 0x60, - 0x66, 0xFD, 0x12, 0x60, 0x40, 0x63, 0x08, 0x60, 0x67, 0xFD, 0x00, 0x60, 0x60, 0x64, 0x08, 0x60, - 0x1F, 0xFB, 0x27, 0x60, 0xE1, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x28, 0xF3, - 0xFF, 0xFF, 0x60, 0x47, 0x0F, 0xB4, 0x98, 0x00, 0xFF, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x04, 0x64, - 0x13, 0x60, 0x1C, 0xFB, 0x27, 0x00, 0x0C, 0x64, 0x3F, 0x40, 0x02, 0x2B, 0x23, 0x00, 0x29, 0xF1, - 0x13, 0x60, 0x1C, 0xFB, 0x5A, 0xD9, 0x27, 0x60, 0xFD, 0x64, 0x9F, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x29, 0x60, 0x1C, 0x63, 0x09, 0x61, 0x3D, 0x60, 0x58, 0x4D, - 0x23, 0x78, 0xFF, 0xFF, 0x75, 0x00, 0x95, 0xF3, 0xFF, 0xFF, 0x7F, 0xB4, 0x95, 0xFB, 0x06, 0x64, - 0x13, 0x60, 0x1C, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x08, 0x64, - 0x13, 0x60, 0x1C, 0xFB, 0x28, 0x60, 0x7A, 0x64, 0x9F, 0xFB, 0xFF, 0xFF, 0x2D, 0xFF, 0x2A, 0x60, - 0x1D, 0x78, 0xFF, 0xFF, 0x29, 0xF3, 0x12, 0x60, 0x45, 0x65, 0x60, 0x5C, 0x3F, 0x40, 0x02, 0x2B, - 0x13, 0x00, 0x00, 0x37, 0x11, 0x00, 0x01, 0x3B, 0x53, 0x00, 0x11, 0x60, 0x65, 0x63, 0xFF, 0xB7, - 0x60, 0x5C, 0xA3, 0xD3, 0x08, 0xA3, 0x00, 0x7E, 0xD0, 0x80, 0xD7, 0x80, 0x02, 0x03, 0xF9, 0x02, - 0x47, 0x00, 0xF4, 0xA3, 0xA3, 0xD3, 0x05, 0x00, 0x00, 0xBC, 0xF2, 0xA4, 0x41, 0x03, 0x40, 0x07, - 0x64, 0x44, 0x7D, 0xFB, 0xA1, 0xFB, 0x07, 0x64, 0xA2, 0xFB, 0x28, 0x60, 0x7A, 0x64, 0x9F, 0xFB, - 0xFF, 0xFF, 0xDF, 0xFE, 0x00, 0x64, 0x19, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x88, 0xFF, - 0xBA, 0x60, 0x98, 0x71, 0x8D, 0xE2, 0x01, 0x11, 0x09, 0x00, 0x71, 0x40, 0x80, 0x27, 0xFB, 0x01, - 0x88, 0xE2, 0xBA, 0x60, 0xD0, 0x64, 0x03, 0xFB, 0x8D, 0xFF, 0x15, 0x00, 0x8D, 0xFF, 0x28, 0x60, - 0xFB, 0x63, 0x06, 0x60, 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, 0x28, 0x60, 0x67, 0x63, 0x9F, 0xFD, - 0xFF, 0xFF, 0x1A, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0xA3, 0x60, 0xF4, 0x63, 0x06, 0x60, - 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, 0x29, 0xF5, 0x26, 0x60, 0x20, 0x63, 0x25, 0x60, 0xF2, 0x64, - 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0x02, 0x64, 0xA3, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF9, 0xFE, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x68, 0x01, 0x00, 0x36, 0x69, 0x01, 0x01, 0x36, 0x6B, 0x01, - 0x02, 0x36, 0x81, 0x01, 0x03, 0x36, 0x8B, 0x01, 0x04, 0x36, 0xC1, 0x01, 0x05, 0x36, 0xBF, 0x01, - 0x06, 0x36, 0xF1, 0x01, 0x07, 0x36, 0xBB, 0x01, 0x08, 0x36, 0x8C, 0x01, 0x09, 0x36, 0x0C, 0x00, - 0x0A, 0x36, 0x0D, 0x00, 0x0B, 0x36, 0x0E, 0x00, 0x0C, 0x36, 0x17, 0x00, 0x0D, 0x36, 0x0D, 0x00, - 0x0E, 0x36, 0x1D, 0x00, 0x0F, 0x36, 0x41, 0x00, 0x02, 0x60, 0x00, 0x64, 0x08, 0x00, 0x04, 0x60, - 0x00, 0x64, 0x05, 0x00, 0x00, 0x60, 0x01, 0x64, 0x02, 0x00, 0x20, 0x60, 0x00, 0x64, 0x32, 0x45, - 0xB4, 0x85, 0x45, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x29, 0x60, 0xDE, 0x63, 0x06, 0x60, - 0x0B, 0xFD, 0x62, 0xFF, 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x3F, 0x40, - 0x02, 0x2B, 0x15, 0x00, 0x88, 0xFF, 0xBA, 0x60, 0x98, 0x71, 0x8D, 0xE2, 0x01, 0x11, 0x09, 0x00, - 0x71, 0x40, 0x80, 0x27, 0xFB, 0x01, 0x88, 0xE2, 0xBA, 0x60, 0xD0, 0x64, 0x03, 0xFB, 0x8D, 0xFF, - 0x11, 0x00, 0x8D, 0xFF, 0x90, 0x60, 0x00, 0xE8, 0x28, 0x60, 0xFB, 0x63, 0x04, 0x00, 0x91, 0x60, - 0x00, 0xE8, 0x29, 0x60, 0xC4, 0x63, 0x2A, 0xE8, 0x06, 0x60, 0x0B, 0xFD, 0xFF, 0xFF, 0x62, 0xFF, - 0xFF, 0xFF, 0x1A, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xF1, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, - 0xF1, 0xFB, 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0xD0, 0x60, 0x00, 0xE8, 0x2A, 0xE8, 0xD9, 0x60, - 0xFE, 0x64, 0x32, 0x45, 0xA4, 0x85, 0x45, 0x52, 0x99, 0xFF, 0xA5, 0x4F, 0xFF, 0xB4, 0x07, 0xFB, - 0x98, 0xFF, 0xA3, 0x60, 0xF4, 0x63, 0x06, 0x60, 0x0B, 0xFD, 0x62, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x43, 0xFF, 0x01, 0x60, 0x00, 0xE1, 0x28, 0xF3, - 0x47, 0xFF, 0x60, 0x40, 0x07, 0x37, 0x66, 0x00, 0x05, 0x3B, 0x04, 0x00, 0xFF, 0x0A, 0x80, 0xE1, - 0xA1, 0xFF, 0xFF, 0xFF, 0x1B, 0x60, 0xF3, 0xF1, 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, - 0x7D, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, - 0xA0, 0x5D, 0x29, 0xF5, 0x2A, 0xF3, 0x47, 0xFF, 0x3F, 0xF0, 0x01, 0x1B, 0x01, 0x64, 0x60, 0x56, - 0xAD, 0xE2, 0xB5, 0xFF, 0x6C, 0x40, 0x40, 0xE1, 0xA1, 0xFF, 0x00, 0xF4, 0x6E, 0x61, 0x12, 0x62, - 0x64, 0x43, 0x01, 0xE1, 0x03, 0x64, 0xE2, 0xD0, 0xC9, 0x81, 0x64, 0x4C, 0xCC, 0x84, 0xDA, 0x82, - 0xFA, 0x02, 0x01, 0x60, 0x00, 0x6B, 0x9A, 0xFF, 0xCA, 0x82, 0x03, 0x00, 0x00, 0xF4, 0x81, 0xF2, - 0xFF, 0xFF, 0x7A, 0xD0, 0xA1, 0xFF, 0x64, 0x4C, 0xFC, 0x1C, 0xF8, 0x1D, 0x00, 0xB9, 0x06, 0x1E, - 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, 0x5A, 0xD2, 0xA1, 0xFF, 0x60, 0x4D, 0x3F, 0x40, 0x02, 0x2B, - 0x10, 0x00, 0x28, 0xF3, 0xA5, 0x60, 0xC4, 0x65, 0x60, 0x40, 0x0E, 0x3B, 0x0A, 0x00, 0xF1, 0xF3, - 0xFF, 0xFF, 0x10, 0xBC, 0xF1, 0xFB, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x85, 0x4C, - 0xFE, 0x01, 0xF1, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF1, 0xFB, 0xA1, 0xFF, 0x87, 0x4E, 0x87, 0x4C, - 0x87, 0x4C, 0x87, 0x4C, 0x87, 0x4C, 0x67, 0x4C, 0xFF, 0xFF, 0xBC, 0xFF, 0x00, 0xE1, 0xD5, 0xFE, - 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x64, 0x40, 0x46, 0x60, 0x41, 0xB5, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, - 0x29, 0xF5, 0x3F, 0xF0, 0x24, 0xF2, 0x44, 0x43, 0x40, 0x4D, 0x00, 0xF4, 0xF3, 0x60, 0xA0, 0x65, - 0x10, 0x62, 0x5A, 0xD2, 0xD9, 0x81, 0xD4, 0x80, 0xFF, 0xFF, 0xFB, 0x02, 0x61, 0x45, 0x2D, 0x44, - 0xD4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xFD, 0xA5, 0x48, 0x60, 0x00, 0x64, 0xC4, 0x9D, - 0x0D, 0x60, 0x00, 0x6B, 0x2D, 0x44, 0xC0, 0x83, 0xBB, 0xFF, 0x29, 0xF5, 0x01, 0xE1, 0x00, 0xF4, - 0x6C, 0x61, 0x10, 0x62, 0x05, 0x00, 0x00, 0xF4, 0x01, 0xF2, 0xFF, 0xFF, 0x60, 0x41, 0x04, 0x62, - 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x1A, 0x00, 0x26, 0x44, 0x01, 0x26, 0x0C, 0x00, 0x2D, 0x44, - 0xC8, 0x84, 0x40, 0x4D, 0x02, 0x03, 0x6C, 0x45, 0xF3, 0x01, 0x03, 0x15, 0x01, 0x64, 0x05, 0xFA, - 0x15, 0x00, 0x6C, 0x45, 0xED, 0x01, 0x23, 0x44, 0xC8, 0x84, 0x40, 0x43, 0x02, 0x03, 0x6C, 0x45, - 0xE7, 0x01, 0x00, 0x64, 0x01, 0x15, 0x01, 0x64, 0x6C, 0x45, 0x05, 0xFB, 0xE2, 0xD2, 0xDA, 0x82, - 0xC9, 0x81, 0x60, 0x4C, 0xDD, 0x1C, 0xD7, 0x03, 0xBC, 0xFF, 0xDA, 0x01, 0x00, 0xE1, 0xD5, 0xFE, - 0xA1, 0xFF, 0xFF, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0x67, 0x4C, 0x43, 0xFF, 0xF1, 0xF3, 0xFF, 0xFF, - 0x10, 0xBC, 0xF1, 0xFB, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x01, 0xE1, 0x01, 0x60, - 0x69, 0x6B, 0xA5, 0x60, 0xC4, 0x64, 0x60, 0x4C, 0xBB, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, - 0xA1, 0xFF, 0xFF, 0xFF, 0x60, 0x4C, 0xFC, 0x01, 0x29, 0xF3, 0x2A, 0xF1, 0x07, 0xB5, 0x04, 0xE1, - 0x65, 0x41, 0x64, 0x54, 0xCD, 0xE2, 0x95, 0x81, 0xA1, 0x5D, 0xA1, 0xFF, 0xFF, 0xFF, 0xF9, 0x01, - 0x61, 0x44, 0xFE, 0xFB, 0xFF, 0xFD, 0xFF, 0x01, 0x7F, 0x67, 0x01, 0x61, 0x23, 0x58, 0xFF, 0xFF, - 0xB1, 0xFE, 0x08, 0x05, 0xB0, 0xFE, 0x09, 0x05, 0xB2, 0xFE, 0xB3, 0xFE, 0x78, 0x43, 0x01, 0x61, - 0x29, 0x60, 0xEA, 0x78, 0x34, 0x60, 0x8D, 0x78, 0xFF, 0xFF, 0x28, 0xF3, 0x29, 0xF1, 0x40, 0x44, - 0x44, 0x45, 0x2A, 0xF1, 0x2B, 0xF1, 0x44, 0x46, 0x44, 0x47, 0x3F, 0xB4, 0xE0, 0x85, 0x20, 0x60, - 0x28, 0x64, 0x44, 0xD7, 0x58, 0x43, 0xFF, 0xFF, 0x60, 0x45, 0x0E, 0x60, 0xDD, 0xF3, 0x61, 0x43, - 0x04, 0xB4, 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, 0x06, 0x00, 0x3F, 0xB4, 0xB4, 0x84, 0xFF, 0x27, - 0x05, 0xFD, 0x04, 0xFB, 0x10, 0x75, 0xA1, 0xFF, 0xFF, 0xFF, 0x86, 0x3E, 0xB4, 0xFE, 0x0B, 0x05, - 0xB5, 0xFE, 0x02, 0x24, 0x9F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0xFE, 0x07, 0x05, 0x78, 0x43, - 0x01, 0x61, 0x29, 0x60, 0xEA, 0x78, 0x34, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x36, 0x44, 0x00, 0x7F, - 0xEE, 0xA0, 0x60, 0x45, 0x05, 0x05, 0x20, 0x60, 0xBA, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, - 0x78, 0x43, 0x01, 0x61, 0x29, 0x60, 0xEA, 0x78, 0x78, 0x43, 0x01, 0x61, 0x29, 0x60, 0xEA, 0x78, - 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x10, 0x02, 0x10, 0x64, - 0x40, 0x40, 0x02, 0x64, 0x40, 0x50, 0x61, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x04, 0x00, 0x10, 0xE0, - 0x46, 0x60, 0x09, 0xE0, 0x00, 0x00, 0x27, 0xF1, 0x00, 0x66, 0x20, 0x78, 0x42, 0xFE, 0x23, 0x58, - 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x1A, 0x02, - 0x0E, 0x60, 0xDD, 0xF3, 0x07, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, 0x04, 0x03, 0x03, 0x02, 0xDB, 0xF9, - 0x00, 0x67, 0x10, 0x00, 0x00, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0xAD, 0x01, 0x36, 0x47, 0xFF, 0x23, - 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x05, 0x00, 0x62, 0xFF, 0x20, 0x44, 0x80, 0xBC, - 0x40, 0x40, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x7F, 0x67, 0x02, 0x61, 0x31, 0x02, 0x0E, 0x60, 0xDD, 0xF3, 0x01, 0x7C, 0x20, 0xB5, 0x0C, 0xB5, - 0x03, 0x03, 0x02, 0x02, 0xDB, 0xF9, 0xFF, 0xFF, 0x02, 0x61, 0x41, 0x56, 0xC7, 0xFE, 0x2A, 0x60, - 0x1D, 0x78, 0xFF, 0xFF, 0x9D, 0xF1, 0x20, 0x44, 0x64, 0x40, 0xFF, 0x26, 0x1C, 0x00, 0x7F, 0xB4, - 0x40, 0x40, 0x5C, 0x5E, 0x82, 0xFF, 0x26, 0x44, 0xFD, 0xB4, 0x40, 0x46, 0x5C, 0x41, 0x87, 0xFF, - 0x62, 0xFF, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x04, 0x03, 0x09, 0xF2, - 0x8F, 0xFC, 0xAC, 0x86, 0xFB, 0x01, 0x95, 0xF3, 0xFF, 0xFF, 0x7F, 0xB4, 0x95, 0xFB, 0x06, 0x64, - 0x13, 0x60, 0x1C, 0xFB, 0x2D, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x00, 0x67, 0x20, 0x40, - 0x80, 0x2A, 0x02, 0x00, 0x7F, 0x67, 0x06, 0x61, 0x60, 0x45, 0x0E, 0x60, 0xDD, 0xF3, 0x61, 0x43, - 0x04, 0xB4, 0x24, 0x44, 0x02, 0x03, 0x13, 0xFF, 0x56, 0x01, 0x3F, 0xB4, 0xB4, 0x84, 0xFF, 0x27, - 0x05, 0xFD, 0x04, 0xFB, 0x20, 0x40, 0x80, 0x2A, 0x02, 0x00, 0x10, 0x75, 0x05, 0x00, 0x01, 0x64, - 0x19, 0x60, 0xF7, 0xFB, 0x08, 0x60, 0x10, 0x75, 0x46, 0x01, 0x25, 0x46, 0x01, 0xF2, 0x08, 0xF0, - 0x60, 0x47, 0x03, 0xB4, 0x03, 0xAC, 0x7F, 0x67, 0x03, 0x61, 0x08, 0x02, 0x26, 0x60, 0x20, 0x64, - 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x24, 0x40, 0x01, 0x2B, 0x49, 0x00, 0x25, 0x44, 0x1F, 0xB4, 0xE0, 0x85, 0x2A, 0x60, 0xF4, 0x64, - 0xC4, 0x98, 0xFF, 0xFF, 0xC0, 0xFE, 0x3D, 0x00, 0xC1, 0xFE, 0x3B, 0x00, 0xC2, 0xFE, 0x39, 0x00, - 0xC3, 0xFE, 0x37, 0x00, 0xC4, 0xFE, 0x35, 0x00, 0xC5, 0xFE, 0x33, 0x00, 0xC6, 0xFE, 0x31, 0x00, - 0xC7, 0xFE, 0x2F, 0x00, 0xC8, 0xFE, 0x2D, 0x00, 0xC9, 0xFE, 0x2B, 0x00, 0xCA, 0xFE, 0x29, 0x00, - 0xCB, 0xFE, 0x27, 0x00, 0xCC, 0xFE, 0x25, 0x00, 0xCD, 0xFE, 0x23, 0x00, 0xCE, 0xFE, 0x21, 0x00, - 0xCF, 0xFE, 0x1F, 0x00, 0xD0, 0xFE, 0x1D, 0x00, 0xD1, 0xFE, 0x1B, 0x00, 0xD2, 0xFE, 0x19, 0x00, - 0xD3, 0xFE, 0x17, 0x00, 0xD4, 0xFE, 0x15, 0x00, 0xD5, 0xFE, 0x13, 0x00, 0xD6, 0xFE, 0x11, 0x00, - 0xD7, 0xFE, 0x0F, 0x00, 0xD8, 0xFE, 0x0D, 0x00, 0xD9, 0xFE, 0x0B, 0x00, 0xDA, 0xFE, 0x09, 0x00, - 0xDB, 0xFE, 0x07, 0x00, 0xDC, 0xFE, 0x05, 0x00, 0xDD, 0xFE, 0x03, 0x00, 0xDE, 0xFE, 0x01, 0x00, - 0xDF, 0xFE, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x9F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x9E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9D, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9C, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x9B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x9A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x99, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x98, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x97, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x96, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x95, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x94, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x93, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x92, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x91, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x90, 0xFE, 0xF0, 0x84, 0x06, 0xFB, 0x8F, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x8E, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8D, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8C, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x8B, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x8A, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x89, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x88, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x87, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, - 0x86, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x85, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x84, 0xFE, 0xF0, 0x84, - 0xFF, 0xFF, 0x83, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x82, 0xFE, 0xF0, 0x84, 0xFF, 0xFF, 0x81, 0xFE, - 0xF0, 0x84, 0xFF, 0xFF, 0x80, 0xFE, 0xF0, 0x84, 0x05, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x5C, 0x5C, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x27, 0x55, 0x00, 0x05, 0x60, - 0x00, 0x63, 0x05, 0xFD, 0x30, 0x44, 0xBD, 0xDB, 0x31, 0x44, 0xBD, 0xDB, 0x32, 0x44, 0xBD, 0xDB, - 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, 0x35, 0x44, 0xBD, 0xDB, 0x36, 0x44, 0xBD, 0xDB, - 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, 0x39, 0x44, 0xBD, 0xDB, 0x3A, 0x44, 0xBD, 0xDB, - 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, 0x3D, 0x44, 0xBD, 0xDB, 0x3E, 0x44, 0xBD, 0xDB, - 0x3F, 0x44, 0xBD, 0xDB, 0x02, 0x61, 0x61, 0x44, 0x02, 0x36, 0x82, 0xFF, 0x03, 0x36, 0x83, 0xFF, - 0x04, 0x36, 0x84, 0xFF, 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, 0x07, 0x36, 0x87, 0xFF, - 0x20, 0x44, 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, - 0x24, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, - 0x28, 0x44, 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, - 0x2C, 0x44, 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, - 0xDD, 0x81, 0x08, 0x3A, 0xD0, 0x01, 0x54, 0x00, 0x27, 0x40, 0x10, 0x26, 0x30, 0x00, 0x26, 0x44, - 0x01, 0x36, 0x2D, 0x00, 0x02, 0x36, 0x82, 0xFF, 0x03, 0x36, 0x83, 0xFF, 0x04, 0x36, 0x84, 0xFF, - 0x05, 0x36, 0x85, 0xFF, 0x06, 0x36, 0x86, 0xFF, 0x25, 0x44, 0x00, 0x36, 0x44, 0x40, 0x01, 0x36, - 0x44, 0x41, 0x02, 0x36, 0x44, 0x42, 0x03, 0x36, 0x44, 0x43, 0x04, 0x36, 0x44, 0x44, 0x05, 0x36, - 0x44, 0x45, 0x06, 0x36, 0x44, 0x46, 0x07, 0x36, 0x44, 0x47, 0x08, 0x36, 0x44, 0x48, 0x09, 0x36, - 0x44, 0x49, 0x0A, 0x36, 0x44, 0x4A, 0x0B, 0x36, 0x44, 0x4B, 0x0C, 0x36, 0x44, 0x4C, 0x0D, 0x36, - 0x44, 0x4D, 0x0E, 0x36, 0x44, 0x4E, 0x0F, 0x36, 0x44, 0x4F, 0x87, 0xFF, 0x21, 0x00, 0x25, 0x44, - 0x10, 0x36, 0x44, 0x50, 0x11, 0x36, 0x44, 0x51, 0x12, 0x36, 0x44, 0x52, 0x13, 0x36, 0x44, 0x53, - 0x14, 0x36, 0x44, 0x54, 0x15, 0x36, 0x44, 0x55, 0x16, 0x36, 0x44, 0x56, 0x17, 0x36, 0x44, 0x57, - 0x18, 0x36, 0x44, 0x58, 0x19, 0x36, 0x44, 0x59, 0x1A, 0x36, 0x44, 0x5A, 0x1B, 0x36, 0x44, 0x5B, - 0x1C, 0x36, 0x44, 0x5C, 0x1D, 0x36, 0x44, 0x5D, 0x1E, 0x36, 0x44, 0x5E, 0x1F, 0x36, 0x44, 0x5F, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0x46, 0xB5, 0x60, 0x58, 0x4F, 0xCE, 0x78, 0xFF, 0xFF, - 0x03, 0x61, 0x7F, 0x67, 0x0A, 0x02, 0x00, 0xF0, 0x04, 0x64, 0x13, 0x60, 0x10, 0xFB, 0x5A, 0xD9, - 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x12, 0x02, 0x14, 0x64, 0x13, 0x60, - 0x1C, 0xFB, 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, 0x2C, 0x60, 0x75, 0x64, 0x9F, 0xFB, 0x2D, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x2A, 0xF3, 0x05, 0xFB, 0x2B, 0xF3, 0x06, 0xFB, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x40, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, - 0x0E, 0x02, 0x16, 0x64, 0x13, 0x60, 0x1C, 0xFB, 0x00, 0x60, 0x50, 0x63, 0x5A, 0xDD, 0x2C, 0x60, - 0x90, 0x64, 0x9F, 0xFB, 0x2D, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x02, 0x61, 0x38, 0x02, 0x25, 0x45, - 0x20, 0x44, 0x80, 0x2A, 0x34, 0x00, 0xF1, 0x60, 0x00, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x06, 0x03, - 0xF1, 0x60, 0x02, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x2F, 0x03, 0x28, 0x00, 0x19, 0x60, 0x40, 0xF1, - 0xB7, 0xF3, 0x20, 0x60, 0x22, 0x61, 0xA0, 0x84, 0xA1, 0xDB, 0x25, 0x45, 0x25, 0x60, 0x86, 0x63, - 0x02, 0x61, 0xBD, 0xD3, 0xBD, 0xD1, 0xD4, 0x80, 0xBD, 0xD3, 0xBD, 0xD5, 0xCD, 0x81, 0x02, 0x03, - 0x15, 0x03, 0xF7, 0x01, 0xA2, 0xFF, 0xA6, 0xD3, 0x40, 0x4C, 0x00, 0xA8, 0x67, 0x43, 0x0C, 0x02, - 0xA2, 0xDD, 0x42, 0x48, 0x64, 0x41, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x28, 0xDB, 0x02, 0x03, 0x2C, 0x58, 0xA3, 0xFF, 0x0C, 0x61, 0x03, 0x00, 0x04, 0x61, 0x7F, 0x67, - 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x64, 0x10, 0x60, 0x13, 0xFB, 0xFF, 0xFF, - 0xC4, 0xFE, 0xF7, 0x01, 0xC6, 0xFE, 0xF5, 0x01, 0x7E, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, - 0x02, 0x61, 0x3F, 0x02, 0x25, 0x45, 0xF8, 0x2B, 0x3B, 0x00, 0x2E, 0xF5, 0x67, 0x44, 0xD4, 0x80, - 0x20, 0x60, 0xCC, 0x63, 0x39, 0x03, 0x79, 0x61, 0x24, 0x44, 0x01, 0x27, 0x29, 0x00, 0xA3, 0xFC, - 0xA4, 0xF8, 0xBD, 0xD3, 0xA3, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, 0x64, 0x58, 0x08, 0xA3, - 0xF8, 0x02, 0x08, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xA3, 0xD1, 0xFE, 0xA0, 0xFA, 0x60, 0x00, 0x64, - 0xD0, 0x80, 0x14, 0x02, 0x13, 0x02, 0x04, 0xA3, 0xBE, 0xD3, 0xBD, 0xD1, 0x0F, 0x18, 0xD4, 0x80, - 0x0D, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x64, 0x41, 0xDD, 0x81, 0xE1, 0x81, - 0xCB, 0x83, 0x46, 0x65, 0x36, 0x60, 0x58, 0x4F, 0x22, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x0A, 0x00, - 0xBD, 0xD3, 0xBE, 0xD1, 0xD4, 0x80, 0xCD, 0x81, 0x08, 0x24, 0x64, 0x58, 0x08, 0xA3, 0xF8, 0x02, - 0x04, 0x61, 0x7F, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0F, 0x64, 0x23, 0xFA, 0x67, 0x44, 0x24, 0xFA, - 0x62, 0x41, 0x3C, 0x60, 0x00, 0x65, 0x1A, 0x63, 0x80, 0x60, 0x9E, 0x64, 0x65, 0x46, 0x58, 0xD0, - 0x2E, 0xF5, 0x59, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xCB, 0x83, 0xBF, 0xD1, - 0x4A, 0x65, 0x64, 0x43, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0x01, 0x26, 0xDC, 0x81, 0xE9, 0x84, - 0xDC, 0x84, 0x23, 0xFA, 0x09, 0x00, 0x4B, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xE8, 0x84, 0xDC, 0x84, - 0x23, 0xFA, 0xBF, 0xD1, 0x4A, 0x65, 0x64, 0x43, 0x36, 0x60, 0x58, 0x4F, 0x22, 0x78, 0xFF, 0xFF, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xE0, 0xA0, 0x20, 0x64, 0x01, 0x06, - 0x25, 0xFA, 0x23, 0xF2, 0xDF, 0xD1, 0xCC, 0x84, 0xE0, 0x85, 0x0B, 0x06, 0xBF, 0xD1, 0x64, 0x41, - 0xD5, 0x80, 0x64, 0x43, 0x01, 0x06, 0x65, 0x41, 0x4A, 0x65, 0x2E, 0x60, 0x58, 0x4F, 0x7A, 0x78, - 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0xDB, 0xF3, 0x02, 0x63, 0x23, 0xFC, 0x07, 0xB4, - 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x4B, 0xD3, 0xBF, 0xD3, 0x60, 0x41, 0xC9, 0x83, - 0xE9, 0x81, 0xDD, 0x81, 0xA3, 0xFA, 0xE0, 0x81, 0x3C, 0x60, 0x00, 0x67, 0x02, 0x24, 0x02, 0xA4, - 0x60, 0x47, 0x40, 0x4B, 0xC9, 0x81, 0x4A, 0x65, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0xA5, 0xD8, - 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF6, 0x1F, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x60, 0x47, 0x25, 0xFA, - 0x00, 0x7E, 0x60, 0x47, 0x01, 0x26, 0xDC, 0x84, 0x60, 0x41, 0xE8, 0x84, 0xD8, 0x84, 0x23, 0xFA, - 0xAB, 0x01, 0xFC, 0xA3, 0xA3, 0xD1, 0x4C, 0x65, 0xA4, 0xD3, 0xDA, 0x83, 0x00, 0x7F, 0x25, 0xFA, - 0x60, 0x41, 0x01, 0x26, 0xDD, 0x81, 0xE9, 0x84, 0xD8, 0x84, 0x23, 0xFA, 0x9D, 0x01, 0x2E, 0x60, - 0x40, 0x63, 0xBF, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0xE8, 0x84, 0xDC, 0x84, 0x23, 0xFA, 0x4A, 0x65, - 0x36, 0x60, 0x58, 0x4F, 0x22, 0x78, 0xFF, 0xFF, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x2E, 0x60, - 0x40, 0x63, 0x23, 0xF2, 0xC0, 0x65, 0xCC, 0x84, 0xE0, 0x81, 0x0A, 0x04, 0xBF, 0xDB, 0xD5, 0x80, - 0x07, 0x03, 0x01, 0x06, 0x65, 0x41, 0x61, 0x44, 0xBF, 0xDB, 0x4A, 0x65, 0x58, 0x4F, 0xA8, 0x00, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x03, 0x4E, 0x2D, 0x60, 0x58, 0x43, 0x55, 0x78, 0xFF, 0xFF, - 0x2F, 0x60, 0x24, 0x61, 0x17, 0x60, 0x81, 0xF3, 0xA1, 0xDB, 0xCC, 0x84, 0xA8, 0x83, 0x05, 0x04, - 0x2F, 0x60, 0x02, 0x64, 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x0E, 0x43, 0x82, 0x01, 0x23, 0xF2, - 0x25, 0xF2, 0x02, 0xA8, 0xF8, 0xA0, 0x0F, 0x02, 0xEC, 0xA0, 0x0D, 0x04, 0x0C, 0x07, 0x19, 0x60, - 0x4F, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x07, 0x19, 0x60, 0x4F, 0xFB, 0x19, 0x60, - 0x53, 0xFB, 0x16, 0x60, 0xD8, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x1D, 0x60, - 0xAE, 0x65, 0x60, 0x41, 0x1D, 0x60, 0x4A, 0x63, 0xA3, 0xDB, 0xFF, 0xA1, 0x48, 0x64, 0x58, 0xD0, - 0x7E, 0xA8, 0x5B, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xFF, 0xA1, 0xD7, 0x80, 0x02, 0x03, - 0x01, 0x03, 0xF5, 0x01, 0x2E, 0xF5, 0x00, 0x60, 0x2F, 0x65, 0x25, 0xF2, 0x00, 0x63, 0xCC, 0x84, - 0x03, 0xA3, 0xFD, 0x05, 0x4A, 0x64, 0xD7, 0x80, 0x1C, 0x60, 0xE6, 0x61, 0x18, 0x05, 0xA1, 0xDD, - 0xE3, 0x83, 0xFE, 0xA3, 0x58, 0xD0, 0x7E, 0xA8, 0x59, 0xD9, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, - 0xF9, 0x1F, 0x00, 0x63, 0x59, 0xDD, 0x2E, 0xF5, 0x25, 0xF0, 0x0E, 0x60, 0x73, 0xF3, 0xD3, 0x80, - 0x01, 0xB0, 0x04, 0x03, 0x01, 0xA4, 0x03, 0x03, 0xA2, 0xDB, 0x01, 0x00, 0xA2, 0xDD, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x1D, 0x60, 0x4A, 0x61, 0xA1, 0xD3, 0x23, 0xFA, 0xE0, 0x83, 0x4A, 0x65, - 0x04, 0x02, 0x02, 0x63, 0x23, 0xFC, 0xA5, 0xFC, 0x09, 0x00, 0xDB, 0x83, 0x59, 0xD1, 0xA5, 0xD8, - 0xDA, 0x85, 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x0E, 0x60, 0x73, 0xF3, 0x00, 0x61, 0x02, 0xA4, 0xFE, 0xA0, 0x23, 0xFA, 0x1B, 0x03, - 0xFA, 0xA4, 0xFD, 0xA4, 0x01, 0xA1, 0xFD, 0x07, 0x61, 0x43, 0x23, 0xF2, 0x25, 0xFC, 0xE0, 0x83, - 0x02, 0xA3, 0x1C, 0x60, 0xE6, 0x61, 0x00, 0x60, 0x4A, 0x64, 0x59, 0xD1, 0x58, 0xD8, 0x7E, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x25, 0xF2, 0x23, 0xF2, 0x01, 0xB0, 0xCC, 0x84, - 0x04, 0x02, 0x23, 0xFA, 0x02, 0x00, 0x00, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x41, 0x4B, 0x65, 0x42, 0x80, 0x64, 0xD4, 0x85, 0x2B, 0x41, 0x00, 0xA1, 0x55, 0x8B, 0x0D, 0x03, - 0x02, 0x04, 0x65, 0x41, 0x02, 0x00, 0x00, 0x64, 0x40, 0x4B, 0xCA, 0x84, 0x58, 0xD0, 0xC9, 0x81, - 0xBD, 0xD9, 0xFC, 0x02, 0x00, 0xF4, 0x04, 0x65, 0xEC, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, - 0xA3, 0xD3, 0x02, 0x7C, 0xA0, 0xD3, 0x23, 0xF8, 0xDC, 0x84, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, 0x01, 0x64, 0x9D, 0xFE, 0x02, 0x28, 0x02, 0x64, 0x25, 0xFA, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x7C, 0x23, 0xF8, 0x01, 0x64, 0x25, 0xFA, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0xFC, 0xA3, 0xA3, 0xD1, 0x02, 0x64, 0x23, 0xFA, 0xA4, 0xD3, 0x25, 0xFA, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x64, 0x23, 0xFA, 0x88, 0xFF, 0x75, 0x44, 0x8D, 0xFF, - 0xE8, 0x87, 0xE8, 0x84, 0xE8, 0x84, 0x03, 0xB4, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x04, 0x64, 0x23, 0xFA, 0x86, 0xFF, 0x29, 0x44, 0x87, 0xFF, 0x25, 0xFA, 0x55, 0xF3, 0x52, 0xF1, - 0x80, 0x65, 0xC4, 0x87, 0x00, 0x7F, 0x26, 0xFA, 0x64, 0x44, 0xC4, 0x87, 0x00, 0x7F, 0x27, 0xFA, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x05, 0x64, 0x23, 0xFA, 0x52, 0x63, 0xB4, 0xF3, 0x4B, 0xDA, - 0xB3, 0xF3, 0x4B, 0xDA, 0xB2, 0xF3, 0x4B, 0xDA, 0x60, 0x41, 0x88, 0xFF, 0x72, 0x5C, 0x89, 0xFF, - 0x4A, 0xD8, 0xA2, 0x48, 0x20, 0x23, 0x0E, 0x00, 0x64, 0x40, 0x80, 0x27, 0x15, 0x00, 0xDC, 0x84, - 0xBD, 0xDA, 0xBD, 0xD2, 0x11, 0x04, 0xDC, 0x84, 0xA2, 0xDA, 0xA3, 0xD2, 0x0D, 0x04, 0xDC, 0x84, - 0xA3, 0xDA, 0x0A, 0x00, 0x52, 0x63, 0xB4, 0xF3, 0x4B, 0xDA, 0xB3, 0xF3, 0x4B, 0xDA, 0xB2, 0xF3, - 0x4B, 0xDA, 0x54, 0x90, 0x4C, 0x63, 0xE0, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF0, - 0x23, 0xF2, 0x19, 0x60, 0x46, 0xF9, 0x02, 0xA8, 0x64, 0x44, 0x1F, 0x02, 0x3F, 0x40, 0x02, 0x2B, - 0x16, 0x00, 0x00, 0x37, 0x14, 0x00, 0x01, 0x3B, 0x18, 0x00, 0x12, 0x60, 0x45, 0x65, 0x11, 0x60, - 0x65, 0x63, 0xFF, 0xB7, 0x60, 0x5C, 0xA3, 0xD3, 0x08, 0xA3, 0x00, 0x7E, 0xD0, 0x80, 0xD7, 0x80, - 0x03, 0x03, 0xF9, 0x02, 0x7F, 0x67, 0x0A, 0x00, 0xF4, 0xA3, 0xA3, 0xD1, 0x04, 0x00, 0x00, 0xBC, - 0xF2, 0xA4, 0x03, 0x03, 0x02, 0x07, 0x16, 0x60, 0xCF, 0xF9, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x20, 0x63, 0x2E, 0x60, 0x00, 0x61, 0x48, 0x64, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x25, 0xF0, - 0x20, 0x64, 0xD0, 0x81, 0xFF, 0xFF, 0x02, 0x07, 0x25, 0xFA, 0x0F, 0x00, 0x2E, 0x60, 0x04, 0x63, - 0xC3, 0x83, 0x01, 0x2A, 0x06, 0x00, 0xCF, 0x83, 0xA3, 0xD3, 0xCD, 0x81, 0x00, 0x7F, 0xBD, 0xDB, - 0x04, 0x03, 0x00, 0x64, 0xC9, 0x81, 0xBD, 0xDB, 0xFD, 0x02, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x01, 0x60, 0xA0, 0x62, 0x09, 0x02, 0xA2, 0xD9, 0x64, 0x41, - 0x32, 0x44, 0x02, 0xB5, 0x00, 0xB9, 0xD4, 0x84, 0x08, 0x28, 0x02, 0xBC, 0x40, 0x52, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x01, 0x60, 0xA2, 0x62, 0x09, 0x02, - 0xA2, 0xD9, 0x64, 0x41, 0x32, 0x44, 0x04, 0xB5, 0x00, 0xB9, 0xD4, 0x84, 0x08, 0x28, 0x04, 0xBC, - 0x40, 0x52, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, 0x01, 0x60, - 0xB0, 0x62, 0x15, 0x02, 0xA2, 0xD9, 0x64, 0x41, 0x32, 0x44, 0x40, 0xB5, 0x00, 0xB9, 0xD4, 0x84, - 0x08, 0x24, 0x0C, 0x00, 0x40, 0xBC, 0x02, 0xB5, 0xD4, 0x84, 0x43, 0xF9, 0x37, 0x60, 0x76, 0x63, - 0xD3, 0x80, 0x2F, 0x60, 0x50, 0x7C, 0x02, 0x03, 0x43, 0xFD, 0xA4, 0xDF, 0x40, 0x52, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x37, 0x60, 0x76, 0x64, 0x43, 0xFB, 0x2D, 0x60, 0x5B, 0x78, 0xFF, 0xFF, - 0x23, 0xF2, 0x25, 0xF0, 0x01, 0x60, 0xAC, 0x63, 0x7F, 0x67, 0x39, 0x18, 0xA3, 0xD9, 0x26, 0xF0, - 0x7F, 0x67, 0x35, 0x18, 0x5B, 0xD9, 0x16, 0x60, 0x87, 0xF3, 0x25, 0xF0, 0x60, 0x40, 0x03, 0x3A, - 0x2D, 0x00, 0xA6, 0xF3, 0x20, 0x63, 0xE3, 0x83, 0x60, 0x46, 0x0F, 0xF8, 0x30, 0x61, 0x94, 0xFA, - 0x01, 0x61, 0x91, 0xFA, 0x16, 0x64, 0x12, 0xFA, 0x60, 0x40, 0x10, 0x36, 0x05, 0x00, 0x12, 0x36, - 0x08, 0x00, 0x0C, 0x36, 0x0B, 0x00, 0x0F, 0x00, 0x40, 0x61, 0xA1, 0x80, 0x0A, 0x64, 0x11, 0x02, - 0xF3, 0x01, 0x10, 0x61, 0xA1, 0x80, 0x0E, 0x64, 0x0C, 0x02, 0xEE, 0x01, 0x08, 0x61, 0xA1, 0x80, - 0x10, 0x64, 0x07, 0x02, 0xE9, 0x01, 0xE1, 0x81, 0xA1, 0x80, 0x05, 0x05, 0xC8, 0x84, 0x01, 0x02, - 0xE3, 0x01, 0x12, 0xFA, 0x91, 0xFA, 0x66, 0x44, 0x02, 0xA6, 0xD7, 0x1F, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x25, 0xF2, 0x19, 0x60, 0x45, 0xFB, 0x19, 0x60, 0x4C, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x08, 0x26, 0x18, 0x00, 0x19, 0x60, 0x45, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, - 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0x60, 0x44, 0xA2, 0xDB, 0x19, 0x60, 0x45, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x2A, 0x06, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x04, 0xBC, - 0x60, 0x44, 0xA2, 0xDB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, 0x02, 0xA8, - 0x00, 0x67, 0x02, 0x02, 0x2D, 0xF9, 0x2C, 0xF9, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF2, - 0x02, 0xA8, 0x00, 0xA8, 0x0A, 0x02, 0x07, 0x03, 0xD0, 0xA0, 0x30, 0x65, 0x03, 0x04, 0xA7, 0xA0, - 0x59, 0x65, 0x01, 0x06, 0x65, 0x44, 0x16, 0x60, 0xCE, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x25, 0xF2, 0x19, 0x60, 0x4C, 0xFB, 0xFF, 0xFF, 0x08, 0x2A, 0x25, 0x00, 0x19, 0x60, 0x7B, 0xF3, - 0xFF, 0xFF, 0xE9, 0xB4, 0x60, 0x44, 0x19, 0x60, 0x4C, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x26, - 0x02, 0xBC, 0x64, 0x40, 0x02, 0x2A, 0x04, 0xBC, 0x64, 0x40, 0x04, 0x26, 0x08, 0x00, 0x19, 0x60, - 0x7B, 0xFB, 0x13, 0x64, 0xCB, 0xFB, 0x01, 0x60, 0x67, 0x64, 0x37, 0xFB, 0x0C, 0x00, 0x10, 0xBC, - 0x19, 0x60, 0x7B, 0xFB, 0x08, 0x64, 0xCB, 0xFB, 0xA1, 0xF3, 0x01, 0x60, 0x67, 0x7C, 0x60, 0x40, - 0x01, 0x27, 0x5B, 0x7C, 0x37, 0xF9, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x19, 0x60, - 0x4D, 0xFB, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x19, 0x60, 0x4E, 0xFB, 0x00, 0x67, - 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF2, 0x19, 0x60, 0x89, 0xFB, 0xFF, 0xFF, 0x0F, 0x22, 0x41, 0x75, - 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x64, 0x01, 0x00, 0x00, 0x64, 0x1B, 0x60, 0xFE, 0xFB, - 0x7E, 0x60, 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x0E, 0x02, 0x06, 0x61, - 0x41, 0x56, 0xC7, 0xFE, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, - 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, - 0xC0, 0x64, 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x0E, 0x02, 0x08, 0x61, 0x41, 0x56, - 0xC7, 0xFE, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, - 0x60, 0x41, 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7F, 0x60, 0xC0, 0x64, - 0x24, 0x45, 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x0E, 0x02, 0x0A, 0x61, 0x41, 0x56, 0xC7, 0xFE, - 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, 0x00, 0x7F, 0x60, 0x41, - 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x7E, 0x60, 0xC0, 0x64, 0x24, 0x45, - 0xA4, 0x80, 0x7F, 0x67, 0x02, 0x61, 0x11, 0x02, 0x65, 0x43, 0x19, 0x60, 0xA5, 0xFD, 0x0C, 0x61, - 0x41, 0x56, 0xC7, 0xFE, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x36, 0x47, 0xFF, 0x23, 0x04, 0x00, - 0x00, 0x7F, 0x60, 0x41, 0x7F, 0x67, 0x01, 0x00, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x20, 0x64, - 0x23, 0xFA, 0x4A, 0x61, 0x10, 0x60, 0xDA, 0x64, 0xA0, 0xD1, 0xA1, 0xD8, 0x58, 0xD1, 0x59, 0xD8, - 0x58, 0xD1, 0x59, 0xD8, 0x01, 0xA1, 0x10, 0x60, 0xF2, 0x63, 0x5D, 0x65, 0xA3, 0xD3, 0x02, 0xA3, - 0x02, 0x1B, 0x7F, 0x64, 0x01, 0x00, 0xA3, 0xD3, 0x60, 0xFE, 0x5D, 0xDA, 0x20, 0xFE, 0xD5, 0x80, - 0x04, 0xA3, 0xF4, 0x02, 0x01, 0xA1, 0x10, 0x60, 0xE0, 0x64, 0xA0, 0xD1, 0xA1, 0xD8, 0x58, 0xD1, - 0x59, 0xD8, 0x58, 0xD1, 0x59, 0xD8, 0x01, 0xA1, 0x60, 0xFE, 0x07, 0x63, 0x7F, 0x64, 0xCF, 0x83, - 0x5D, 0xDA, 0xFD, 0x02, 0x20, 0xFE, 0x12, 0x60, 0x40, 0x7C, 0x11, 0x60, 0x62, 0x63, 0x7F, 0x65, - 0xA3, 0xD3, 0x02, 0xA3, 0x02, 0x1B, 0x7F, 0x64, 0x01, 0x00, 0xA3, 0xD3, 0x60, 0xFE, 0x5D, 0xDA, - 0x20, 0xFE, 0xD5, 0x80, 0x06, 0xA3, 0x03, 0x02, 0x46, 0x45, 0x00, 0xF4, 0x03, 0x61, 0xD3, 0x80, - 0xFF, 0xFF, 0xEE, 0x04, 0x25, 0x46, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x02, 0x63, 0x7D, 0xF3, - 0x23, 0xFC, 0x60, 0x40, 0x01, 0x23, 0x17, 0x00, 0x01, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x11, 0x60, - 0x60, 0x61, 0x12, 0x60, 0x40, 0x65, 0xA1, 0xD1, 0xD5, 0x80, 0xD0, 0x80, 0x0B, 0x03, 0x02, 0x03, - 0x08, 0xA1, 0xF9, 0x01, 0x04, 0xA1, 0xA1, 0xD3, 0x01, 0x60, 0x00, 0x65, 0x60, 0x47, 0xFF, 0xB4, - 0xB4, 0x84, 0x01, 0x00, 0xFF, 0x64, 0x25, 0xFA, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x0C, 0x63, - 0x23, 0xFC, 0xE2, 0xF3, 0x13, 0x60, 0xF2, 0x63, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x06, 0x0C, 0xA3, - 0xFB, 0x01, 0x48, 0x61, 0x61, 0x44, 0x18, 0xA5, 0x60, 0xFE, 0xBD, 0xD3, 0x20, 0xFE, 0x00, 0x7F, - 0x59, 0xDA, 0xD5, 0x80, 0xFF, 0xFF, 0xF8, 0x04, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, 0x25, 0xF0, - 0x17, 0x60, 0x80, 0xF9, 0x11, 0x00, 0x0C, 0x60, 0xFE, 0x62, 0x40, 0x63, 0x5A, 0xDF, 0xFE, 0x1F, - 0x04, 0x65, 0x0C, 0x60, 0xFE, 0x61, 0x48, 0x64, 0x3E, 0x63, 0x7C, 0xA8, 0x58, 0xD0, 0x59, 0xD9, - 0x02, 0x02, 0x00, 0xF4, 0x02, 0x64, 0xF9, 0x1F, 0x17, 0x60, 0x80, 0xF1, 0x0C, 0x60, 0xDA, 0x65, - 0x02, 0xFE, 0x64, 0x44, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x87, 0x60, 0x41, 0x64, 0x44, 0xE0, 0x84, - 0xE0, 0x84, 0xC4, 0x84, 0x3E, 0xFB, 0x60, 0x42, 0x61, 0x44, 0x03, 0xA2, 0x60, 0xFE, 0xA2, 0xDB, - 0x20, 0xFE, 0x64, 0x44, 0x0D, 0x60, 0x00, 0x65, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xC4, 0x84, 0x40, 0xFB, 0xFF, 0xFF, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x5C, 0x41, - 0x25, 0xF2, 0xFF, 0xFF, 0x40, 0x42, 0x80, 0x2B, 0x04, 0x00, 0xFF, 0xB4, 0x40, 0x42, 0x01, 0x64, - 0x40, 0x41, 0xA6, 0xF3, 0x46, 0x4B, 0x60, 0x46, 0x20, 0x63, 0xE3, 0x83, 0xAB, 0x46, 0x26, 0xF0, - 0xAB, 0x46, 0x59, 0xF8, 0xAB, 0x46, 0x27, 0xF0, 0xAB, 0x46, 0x5A, 0xF8, 0xAB, 0x46, 0x28, 0xF0, - 0xAB, 0x46, 0x5B, 0xF8, 0x66, 0x44, 0x02, 0xA6, 0xF1, 0x1F, 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, - 0xAB, 0x46, 0x0C, 0x60, 0x38, 0x65, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xC4, 0x81, 0xC9, 0x81, 0x52, 0x64, 0x0E, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, - 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF0, 0xA1, 0x76, 0x64, 0x0E, 0x63, 0x59, 0xD1, - 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x22, 0x44, 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0x0C, 0x60, 0x9A, 0x65, 0xC4, 0x81, 0x60, 0x45, 0xC9, 0x81, 0x62, 0x64, 0x06, 0x63, 0x58, 0xD0, - 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF8, 0xA1, 0xB6, 0x64, - 0x06, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x65, 0x44, 0x0C, 0x60, 0xBA, 0x65, - 0xC4, 0x81, 0xC9, 0x81, 0x6A, 0x64, 0x06, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x22, 0x44, - 0xFF, 0xB4, 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x84, 0x0C, 0x60, 0x80, 0x65, 0xC4, 0x81, 0x72, 0x64, - 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0xAB, 0x46, 0x21, 0x44, 0x01, 0x2A, 0x06, 0x00, - 0xFA, 0xA1, 0x90, 0x64, 0x04, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0x3B, 0xF0, 0x21, 0x44, - 0x01, 0x2A, 0x13, 0x00, 0x22, 0x44, 0x3D, 0xFB, 0x60, 0x41, 0x02, 0xFE, 0xF8, 0x84, 0xF8, 0x84, - 0xF8, 0x84, 0x3C, 0xFB, 0x0C, 0x60, 0x7C, 0x63, 0x88, 0xFF, 0xCD, 0x81, 0x06, 0xA3, 0xFD, 0x0D, - 0x8D, 0xFF, 0x3B, 0xFD, 0x64, 0x47, 0x80, 0xBF, 0x60, 0x5C, 0x22, 0x43, 0x80, 0x61, 0x88, 0xFF, - 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0xB1, 0x84, 0x3B, 0xFA, - 0x1F, 0x63, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0x3B, 0xF0, 0x66, 0x44, 0xB1, 0x9C, 0x3B, 0xF8, - 0x02, 0xA6, 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, - 0x25, 0xF0, 0x02, 0xA8, 0x00, 0x67, 0x22, 0x02, 0x3D, 0xF1, 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, - 0xD0, 0x80, 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xBB, 0xF4, 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, - 0xEB, 0x83, 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, - 0x31, 0x91, 0x9D, 0x85, 0xA7, 0x83, 0x3B, 0xFC, 0x1F, 0x63, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, - 0xBB, 0xF2, 0x66, 0x44, 0xA5, 0x81, 0xBB, 0xFA, 0x02, 0xA6, 0xFA, 0x1F, 0x00, 0x67, 0x23, 0x58, - 0xFF, 0xFF, 0x27, 0xF2, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, - 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, - 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, - 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, - 0x2A, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, 0x30, 0x7C, 0xB0, 0x84, 0xA2, 0xDA, - 0x4E, 0x61, 0x76, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, - 0x90, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, - 0xA0, 0x64, 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xD9, 0x81, - 0xB6, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x00, 0x67, - 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, - 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x0D, 0x00, 0x43, 0x4B, - 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, 0x30, 0x61, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDA, 0xAB, 0x46, - 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, - 0x00, 0x64, 0x40, 0x41, 0x4A, 0x64, 0xA0, 0xD2, 0xFF, 0xFF, 0x40, 0x42, 0x80, 0x2B, 0x04, 0x00, - 0xFF, 0xB4, 0x40, 0x42, 0x01, 0x64, 0x40, 0x41, 0xA6, 0xF3, 0x46, 0x4B, 0x60, 0x46, 0x20, 0x63, - 0xE3, 0x83, 0xAB, 0x46, 0x32, 0xF0, 0xAB, 0x46, 0x59, 0xF8, 0xAB, 0x46, 0x33, 0xF0, 0xAB, 0x46, - 0x5A, 0xF8, 0xAB, 0x46, 0x34, 0xF0, 0xAB, 0x46, 0x5B, 0xF8, 0x66, 0x44, 0x02, 0xA6, 0xF1, 0x1F, - 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xAB, 0x46, 0x0C, 0x60, 0x38, 0x65, 0x22, 0x44, 0xFF, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0xC9, 0x81, 0x4A, 0x64, 0x0E, 0x63, - 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x21, 0x44, 0x01, 0x2A, 0x08, 0x00, 0xAB, 0x46, 0xF0, 0xA1, - 0x76, 0x64, 0x0E, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0xAB, 0x46, 0x22, 0x44, 0xFF, 0xB4, - 0xE0, 0x84, 0xE0, 0x85, 0xC4, 0x84, 0x0C, 0x60, 0x80, 0x65, 0xC4, 0x81, 0x5A, 0x64, 0x04, 0x63, - 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0xAB, 0x46, 0x21, 0x44, 0x01, 0x2A, 0x06, 0x00, 0xFA, 0xA1, - 0x90, 0x64, 0x04, 0x63, 0x59, 0xD1, 0x58, 0xD8, 0xFD, 0x1F, 0x3B, 0xF0, 0x21, 0x44, 0x01, 0x2A, - 0x13, 0x00, 0x22, 0x44, 0x3D, 0xFB, 0x60, 0x41, 0x02, 0xFE, 0xF8, 0x84, 0xF8, 0x84, 0xF8, 0x84, - 0x3C, 0xFB, 0x0C, 0x60, 0x7C, 0x63, 0x88, 0xFF, 0xCD, 0x81, 0x06, 0xA3, 0xFD, 0x0D, 0x8D, 0xFF, - 0x3B, 0xFD, 0x64, 0x47, 0x80, 0xBF, 0x60, 0x5C, 0x22, 0x43, 0x80, 0x61, 0x88, 0xFF, 0xCF, 0x83, - 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, 0xB1, 0x84, 0x3B, 0xFA, 0x1F, 0x63, - 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0x3B, 0xF0, 0x66, 0x44, 0xB1, 0x9C, 0x3B, 0xF8, 0x02, 0xA6, - 0xFA, 0x1F, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x23, 0xF2, 0x25, 0xF0, - 0x02, 0xA8, 0x00, 0x67, 0x22, 0x02, 0x3D, 0xF1, 0x64, 0x44, 0x03, 0xB4, 0x40, 0x42, 0xD0, 0x80, - 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0xBB, 0xF4, 0x80, 0x61, 0x02, 0x02, 0xE3, 0x83, 0xEB, 0x83, - 0x22, 0x44, 0x88, 0xFF, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x0D, 0x8D, 0xFF, 0x61, 0x47, 0x31, 0x91, - 0x9D, 0x85, 0xA7, 0x83, 0x3B, 0xFC, 0x1F, 0x63, 0xE3, 0x83, 0x66, 0x44, 0x02, 0xA6, 0xBB, 0xF2, - 0x66, 0x44, 0xA5, 0x81, 0xBB, 0xFA, 0x02, 0xA6, 0xFA, 0x1F, 0x00, 0x67, 0x23, 0x58, 0xFF, 0xFF, - 0x27, 0xF2, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x21, 0x00, - 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, 0x80, 0x60, 0x30, 0x7C, 0xB0, 0x84, 0xA2, 0xDA, 0x4E, 0x61, - 0x76, 0x64, 0x0E, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x90, 0x64, - 0x04, 0x63, 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0xA0, 0x64, 0x04, 0x63, - 0xAB, 0x46, 0x59, 0xD0, 0xAB, 0x46, 0x58, 0xD8, 0xFB, 0x1F, 0x00, 0x67, 0x00, 0x61, 0x23, 0x58, - 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0x1D, 0x60, 0xC0, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, - 0x16, 0x18, 0x61, 0x46, 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, - 0x26, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, - 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x01, 0x03, 0x0D, 0x00, 0x43, 0x4B, 0xAB, 0x46, 0x3B, 0xF2, - 0x80, 0x60, 0x30, 0x61, 0x9D, 0x85, 0xA4, 0x84, 0xA2, 0xDA, 0xAB, 0x46, 0x00, 0x67, 0x00, 0x61, - 0x23, 0x58, 0xFF, 0xFF, 0x01, 0x67, 0x20, 0x61, 0x23, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x46, 0x45, - 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0x00, 0xF4, 0x01, 0xF2, 0x66, 0x5C, 0x25, 0x46, - 0x56, 0x02, 0x70, 0x27, 0x54, 0x00, 0x12, 0x64, 0x03, 0xFA, 0x04, 0xF8, 0x0E, 0xF2, 0x87, 0xFC, - 0x8D, 0xFC, 0x8E, 0xFC, 0xDA, 0x82, 0x16, 0x61, 0x00, 0x63, 0xC9, 0x81, 0x5A, 0xDC, 0xFD, 0x02, - 0x60, 0x40, 0xF0, 0x3B, 0x16, 0x00, 0x32, 0x44, 0xAC, 0xF3, 0x01, 0xB0, 0xFA, 0xA0, 0x08, 0x24, - 0x2C, 0x05, 0xDC, 0x83, 0xF0, 0x67, 0x0E, 0xFA, 0x26, 0x60, 0x04, 0x64, 0x2B, 0xDB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xAC, 0xFD, 0x2B, 0xFF, 0xFE, 0x64, 0x3B, 0x42, 0x4A, 0xDB, - 0x4F, 0x00, 0xAD, 0xF3, 0x05, 0x65, 0xD4, 0x80, 0xDC, 0x83, 0x17, 0x05, 0xAD, 0xFD, 0x98, 0xFE, - 0x04, 0x04, 0x00, 0x7F, 0x08, 0x7E, 0x0E, 0xFA, 0x3B, 0xFF, 0x25, 0x60, 0xF8, 0x64, 0x2B, 0xDB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0x0E, 0xF2, 0x2B, 0xFF, 0x60, 0x40, 0x08, 0x26, - 0xF7, 0xFE, 0xFD, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x32, 0x00, 0xA9, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, - 0xFF, 0xFF, 0x0D, 0x04, 0x26, 0x60, 0x10, 0x64, 0x2B, 0xDB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFC, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0x21, 0x00, 0x46, 0x45, - 0x00, 0x64, 0x2B, 0xDB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, - 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, 0x05, 0xFA, 0xB6, 0x60, 0x58, 0x4E, - 0xF5, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0xFF, 0x64, 0x3B, 0x42, 0x4A, 0xDB, 0xD4, 0xFE, - 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0x25, 0x60, 0xFE, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x0D, 0x00, - 0x25, 0x60, 0xF2, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x18, 0x00, 0x26, 0x60, 0x0A, 0x64, 0x40, 0x47, - 0x58, 0x4F, 0x03, 0x00, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x0B, 0x18, - 0x60, 0x40, 0x01, 0x2A, 0x08, 0x00, 0x26, 0x60, 0x20, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, - 0x08, 0x78, 0xFF, 0xFF, 0xF2, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD5, 0x0E, 0xF2, 0x14, 0x18, - 0x60, 0x40, 0x01, 0x2A, 0x11, 0x00, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xA2, 0xFF, - 0xAD, 0xF3, 0x02, 0x02, 0xCC, 0x84, 0xAD, 0xFB, 0x26, 0x60, 0x20, 0x64, 0x40, 0x4B, 0x34, 0x60, - 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0xE9, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xFB, 0x64, 0x3A, 0x42, - 0x4A, 0xDB, 0xA2, 0xFF, 0xB0, 0xF3, 0xAC, 0xF3, 0xCC, 0x80, 0xFD, 0xA0, 0x01, 0x14, 0x1D, 0x05, - 0xB5, 0x60, 0x58, 0x4D, 0xFA, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, 0x17, 0x03, 0xF0, 0x67, 0x0E, 0xFA, - 0x26, 0x60, 0x04, 0x64, 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xF6, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0xB0, 0xF3, 0xAC, 0xF3, 0xCC, 0x83, - 0xDC, 0x84, 0x01, 0x15, 0xB0, 0xFD, 0xAC, 0xFB, 0xD4, 0xFE, 0xAF, 0xF3, 0xAD, 0xF3, 0x00, 0xA8, - 0xAE, 0xF1, 0x03, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x26, 0x05, 0xB5, 0x60, 0x58, 0x4D, 0xFA, 0x78, - 0xFF, 0xFF, 0xA2, 0xFF, 0x20, 0x03, 0x00, 0x63, 0xAF, 0xF3, 0x0E, 0xFC, 0xCC, 0x84, 0xFF, 0x3A, - 0xAF, 0xFB, 0x98, 0xFE, 0x03, 0x04, 0x08, 0xBB, 0x0E, 0xFC, 0x3B, 0xFF, 0x25, 0x60, 0xF8, 0x64, - 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xF7, 0x64, 0x3A, 0x42, 0x4A, 0xDB, 0xAD, 0xF3, 0x0E, 0xF2, 0xDC, 0x83, 0x08, 0xB0, 0xAD, 0xFD, - 0x08, 0x28, 0xF7, 0xFE, 0xD4, 0xFE, 0xA3, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0xB9, 0xFE, - 0x13, 0xFF, 0x24, 0x40, 0x80, 0x2B, 0x0B, 0x00, 0xA2, 0xFF, 0x25, 0x46, 0x09, 0xF4, 0x0E, 0xF2, - 0x05, 0x18, 0x08, 0xBC, 0x0E, 0xFA, 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0x00, 0xD8, 0xFE, 0xA3, 0xFF, - 0x25, 0x46, 0x3E, 0xF2, 0x00, 0xF4, 0x08, 0xF0, 0x25, 0x46, 0x06, 0xB4, 0xFF, 0x7F, 0x10, 0xBC, - 0x06, 0x26, 0xFD, 0x7F, 0x0E, 0xFA, 0x3E, 0xF2, 0x3F, 0xF2, 0x60, 0x41, 0x08, 0x2A, 0x64, 0x47, - 0x3F, 0xFA, 0x60, 0x45, 0xB9, 0xFC, 0x16, 0x60, 0xAA, 0xF3, 0xA3, 0xFC, 0xAB, 0xFC, 0x91, 0xFC, - 0xD4, 0x80, 0x18, 0x60, 0x21, 0x65, 0xA5, 0x80, 0x01, 0x04, 0x07, 0x03, 0x23, 0xF0, 0x08, 0x64, - 0xB0, 0x84, 0xA2, 0xDA, 0x35, 0x60, 0xEA, 0x78, 0xFF, 0xFF, 0x36, 0x60, 0x58, 0x4F, 0x30, 0x78, - 0xFF, 0xFF, 0x0B, 0x04, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x2C, 0x60, 0xEE, 0x64, - 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x83, 0x00, 0xDB, 0xF3, 0xA6, 0xF1, 0x07, 0xB4, - 0x64, 0x43, 0xFD, 0xA0, 0x2C, 0xF2, 0x71, 0x02, 0x01, 0xB0, 0x64, 0x43, 0x78, 0x02, 0x2E, 0xF2, - 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, - 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x2E, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, - 0x0C, 0x02, 0x61, 0x46, 0x2D, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, - 0x2C, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, - 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x51, 0x03, 0x63, 0x46, 0x80, 0xF6, - 0x25, 0x46, 0x43, 0x18, 0x2E, 0xF2, 0x66, 0x41, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xA6, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, - 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, - 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, - 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, - 0x60, 0x43, 0x61, 0x46, 0x43, 0x4B, 0x2C, 0xF0, 0xAD, 0xF0, 0x2E, 0xF2, 0xAB, 0x46, 0x03, 0xF8, - 0x84, 0xF8, 0x05, 0xFA, 0x03, 0x64, 0x06, 0xFA, 0xAB, 0x46, 0x1F, 0x60, 0xC2, 0x61, 0xA1, 0xD3, - 0x20, 0x60, 0x04, 0x7C, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, - 0x49, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA1, 0xDB, 0x0A, 0x00, 0xDB, 0xF3, 0x02, 0xA3, 0xFE, 0xA0, - 0xF9, 0xA0, 0x01, 0x06, 0x04, 0x02, 0x23, 0xF0, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x07, 0xFC, - 0x23, 0xF2, 0xFF, 0xFF, 0x24, 0x1B, 0x16, 0x60, 0xAB, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x00, 0x3A, - 0x0F, 0x00, 0x25, 0x60, 0xC8, 0x64, 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC1, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x1D, 0x00, - 0x25, 0x60, 0xDA, 0x64, 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x0E, 0xF2, 0xC8, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x0E, 0x00, 0x25, 0x60, - 0xEC, 0x64, 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x0E, 0xF2, 0xCE, 0xFE, 0x10, 0xAC, 0x0E, 0xFA, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, - 0xCB, 0x84, 0xC9, 0x83, 0xFF, 0xFF, 0x08, 0x04, 0x58, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x2F, 0x58, 0xFF, 0xFF, 0x3E, 0xF2, 0xC9, 0xF1, - 0x08, 0xB0, 0x19, 0xF8, 0x57, 0x02, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF3, 0x30, 0xFA, 0x60, 0x45, - 0xEC, 0xF3, 0x31, 0xFA, 0x46, 0x4A, 0x00, 0xF4, 0x60, 0x43, 0x05, 0xF2, 0x06, 0xF2, 0xD0, 0x80, - 0x07, 0xF0, 0x05, 0x02, 0xD4, 0x80, 0xD3, 0x80, 0x02, 0x02, 0xDB, 0xF3, 0x03, 0x03, 0xAA, 0x46, - 0x42, 0xFE, 0x41, 0x00, 0x60, 0x40, 0x03, 0x2A, 0x20, 0x00, 0x02, 0xF2, 0x03, 0xF0, 0x04, 0xF2, - 0x60, 0x43, 0xAA, 0x46, 0x2C, 0xFC, 0x2D, 0xF8, 0x2E, 0xFA, 0x7F, 0xF1, 0x32, 0xF8, 0x80, 0xF1, - 0x33, 0xF8, 0x81, 0xF1, 0x34, 0xF8, 0x08, 0x64, 0x32, 0x40, 0x04, 0x2A, 0x0D, 0x00, 0x2C, 0xF0, - 0x39, 0xF0, 0x64, 0x40, 0x01, 0x26, 0x08, 0x00, 0x3E, 0xF2, 0xFF, 0xFF, 0x00, 0x60, 0xC0, 0xB4, - 0xE8, 0x84, 0xB0, 0x9C, 0x39, 0xF8, 0x88, 0x64, 0x1C, 0x00, 0x02, 0xF2, 0x03, 0xF0, 0x04, 0xF2, - 0x60, 0x43, 0xAA, 0x46, 0x32, 0xFC, 0x33, 0xF8, 0x34, 0xFA, 0x7F, 0xF1, 0x2C, 0xF8, 0x80, 0xF1, - 0x2D, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x01, 0x60, 0x08, 0x64, 0x32, 0x40, 0x04, 0x2A, 0x09, 0x00, - 0x3E, 0xF2, 0x39, 0xF0, 0x00, 0x60, 0xC0, 0xB4, 0xE8, 0x84, 0xB0, 0x9C, 0x39, 0xF8, 0x01, 0x60, - 0x88, 0x64, 0x2A, 0xFA, 0x02, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x36, 0x60, 0x22, 0x63, 0x20, 0x44, - 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, - 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, - 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, - 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0x1B, 0x60, - 0x0B, 0xFD, 0x37, 0x60, 0x42, 0x63, 0x1B, 0x60, 0x0C, 0xFD, 0x30, 0x44, 0x1B, 0x60, 0x0D, 0xFB, - 0x31, 0x44, 0x1B, 0x60, 0x0E, 0xFB, 0x32, 0x44, 0x1B, 0x60, 0x0F, 0xFB, 0x33, 0x44, 0x1B, 0x60, - 0x10, 0xFB, 0x81, 0xFF, 0x91, 0xFF, 0x58, 0x51, 0x44, 0x00, 0x82, 0xFF, 0x92, 0xFF, 0x58, 0x51, - 0x40, 0x00, 0x83, 0xFF, 0x93, 0xFF, 0x58, 0x51, 0x3C, 0x00, 0x84, 0xFF, 0x94, 0xFF, 0x58, 0x51, - 0x38, 0x00, 0x85, 0xFF, 0x95, 0xFF, 0x58, 0x51, 0x34, 0x00, 0x86, 0xFF, 0x96, 0xFF, 0x58, 0x51, - 0x30, 0x00, 0x87, 0xFF, 0x97, 0xFF, 0x58, 0x51, 0x2C, 0x00, 0x80, 0xFF, 0x90, 0xFF, 0x99, 0xFF, - 0x1B, 0x60, 0x0B, 0xF1, 0x30, 0x44, 0x64, 0x43, 0xBD, 0xDB, 0x31, 0x44, 0xBD, 0xDB, 0x32, 0x44, - 0xBD, 0xDB, 0x33, 0x44, 0xBD, 0xDB, 0x34, 0x44, 0xBD, 0xDB, 0x35, 0x44, 0xBD, 0xDB, 0x36, 0x44, - 0xBD, 0xDB, 0x37, 0x44, 0xBD, 0xDB, 0x38, 0x44, 0xBD, 0xDB, 0x39, 0x44, 0xBD, 0xDB, 0x3A, 0x44, - 0xBD, 0xDB, 0x3B, 0x44, 0xBD, 0xDB, 0x3C, 0x44, 0xBD, 0xDB, 0x3D, 0x44, 0xBD, 0xDB, 0x3E, 0x44, - 0xBD, 0xDB, 0x3F, 0x44, 0xBD, 0xDB, 0xF6, 0x60, 0x16, 0x64, 0x0A, 0xFB, 0x40, 0x21, 0xFE, 0x01, - 0x74, 0x00, 0x42, 0x50, 0x40, 0x53, 0x1B, 0x60, 0x0C, 0xF3, 0xFF, 0xFF, 0x40, 0x52, 0x33, 0x44, - 0x32, 0x42, 0xA2, 0xDB, 0xDA, 0x82, 0xA2, 0xDD, 0xDA, 0x83, 0x65, 0x44, 0xBD, 0xDB, 0x61, 0x44, - 0xBD, 0xDB, 0x66, 0x44, 0xBD, 0xDB, 0xBD, 0xD9, 0x30, 0x44, 0xBD, 0xDB, 0x99, 0xFF, 0xA4, 0x4C, - 0xBD, 0xDB, 0xA5, 0x4C, 0xBD, 0xDB, 0xA0, 0x4C, 0xBD, 0xDB, 0xA1, 0x4C, 0xBD, 0xDB, 0x98, 0xFF, - 0x1B, 0x60, 0x0C, 0xFD, 0x1B, 0x60, 0x0D, 0xF3, 0xFF, 0xFF, 0x40, 0x50, 0x1B, 0x60, 0x0F, 0xF3, - 0xFF, 0xFF, 0x40, 0x52, 0x1B, 0x60, 0x10, 0xF3, 0xFF, 0xFF, 0x40, 0x53, 0x31, 0x41, 0x1B, 0x60, - 0x0E, 0xF3, 0xFF, 0xFF, 0x40, 0x51, 0x1B, 0x60, 0x0B, 0xF3, 0xFF, 0xFF, 0x60, 0x43, 0x20, 0x44, - 0xBD, 0xDB, 0x21, 0x44, 0xBD, 0xDB, 0x22, 0x44, 0xBD, 0xDB, 0x23, 0x44, 0xBD, 0xDB, 0x24, 0x44, - 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x26, 0x44, 0xBD, 0xDB, 0x27, 0x44, 0xBD, 0xDB, 0x28, 0x44, - 0xBD, 0xDB, 0x29, 0x44, 0xBD, 0xDB, 0x2A, 0x44, 0xBD, 0xDB, 0x2B, 0x44, 0xBD, 0xDB, 0x2C, 0x44, - 0xBD, 0xDB, 0x2D, 0x44, 0xBD, 0xDB, 0x2E, 0x44, 0xBD, 0xDB, 0x2F, 0x44, 0xBD, 0xDB, 0x1B, 0x60, - 0x0B, 0xFD, 0x61, 0x58, 0xFF, 0xFF, 0x2F, 0x60, 0x4E, 0x63, 0xA3, 0xD3, 0x33, 0x5C, 0x02, 0xA4, - 0xBD, 0xDB, 0xFE, 0xB4, 0xE0, 0x85, 0xC4, 0x85, 0x47, 0xD9, 0x34, 0x44, 0x5B, 0xDB, 0x44, 0xF3, - 0x5B, 0xDB, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, 0x84, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, - 0xFF, 0x01, 0x86, 0xE1, 0x80, 0xFF, 0x90, 0xFF, 0x88, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x87, 0x3E, - 0x19, 0x60, 0xF7, 0xF3, 0xFF, 0xFF, 0x10, 0x1B, 0x32, 0x40, 0x80, 0x2A, 0xF6, 0x01, 0x9D, 0xFE, - 0xF4, 0x05, 0xDB, 0xF3, 0xFF, 0xFF, 0x04, 0xA8, 0x33, 0x60, 0xE2, 0x62, 0x01, 0x02, 0xBD, 0x00, - 0xA2, 0xD3, 0xFF, 0xFF, 0x4A, 0x1B, 0xE9, 0x01, 0x87, 0xFF, 0x20, 0x44, 0x80, 0xFF, 0x60, 0x40, - 0x80, 0x26, 0xE3, 0x01, 0xF1, 0xFC, 0xAD, 0x4F, 0xFD, 0xB4, 0xA0, 0x5D, 0xC0, 0x60, 0x40, 0xEC, - 0xC0, 0x60, 0x00, 0xED, 0xC0, 0x60, 0x80, 0xEE, 0xAC, 0x4F, 0xBF, 0xB4, 0xA0, 0x5C, 0x19, 0x60, - 0x48, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x02, 0x27, 0x06, 0x00, 0x28, 0xE2, 0x24, 0xE2, 0x40, 0x21, - 0xFE, 0x01, 0x75, 0x40, 0x0D, 0x00, 0x28, 0xE2, 0x24, 0xE2, 0x75, 0x40, 0x80, 0x2B, 0xAB, 0xFF, - 0x14, 0xE0, 0x94, 0xE0, 0x40, 0x21, 0xFE, 0x01, 0x10, 0xE0, 0x75, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, - 0x33, 0x60, 0xEE, 0x62, 0xA2, 0xDF, 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0xAC, 0x4F, - 0x40, 0xBC, 0x00, 0x7F, 0xA0, 0x5C, 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, 0x07, 0xED, 0xC0, 0x60, - 0x8F, 0xEE, 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x26, 0x61, 0xCD, 0x81, 0xFF, 0xFF, - 0xFD, 0x02, 0xAE, 0x4F, 0xFB, 0xB4, 0xA0, 0x5E, 0xA0, 0x01, 0xF1, 0xFC, 0xAD, 0x4F, 0xFD, 0xB4, - 0xA0, 0x5D, 0x15, 0x60, 0x80, 0xE7, 0xC0, 0x60, 0x40, 0xEC, 0xC0, 0x60, 0x00, 0xED, 0xAC, 0x4F, - 0xBF, 0xB4, 0xA0, 0x5C, 0xC0, 0x60, 0x84, 0xEE, 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, - 0x00, 0x7A, 0x0F, 0x60, 0x19, 0xE2, 0x0E, 0x60, 0x36, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0x75, 0x44, - 0x80, 0x2B, 0xAB, 0xFF, 0x80, 0x27, 0x08, 0x00, 0x14, 0xE0, 0x94, 0xE0, 0x34, 0xE2, 0x61, 0x5A, - 0x48, 0x21, 0xFE, 0x01, 0x00, 0xE0, 0x75, 0x40, 0x0A, 0x60, 0x19, 0xE2, 0x00, 0x64, 0x19, 0x60, - 0xF1, 0xFB, 0x08, 0x60, 0x15, 0xF1, 0x08, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x01, 0x64, 0x19, 0x60, 0xF2, 0xFB, 0xFF, 0xFF, 0x10, 0xE0, 0x01, 0x60, 0x34, 0xE2, 0xFF, 0xFF, - 0x05, 0x7A, 0xAC, 0x4F, 0x40, 0xBC, 0x00, 0x7F, 0xA0, 0x5C, 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, - 0x07, 0xED, 0xC0, 0x60, 0x8F, 0xEE, 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x1B, 0x60, - 0xF3, 0xF1, 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x7D, 0xF1, 0x02, 0xB1, 0x04, 0x65, - 0x02, 0x02, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x26, 0x61, 0xCD, 0x81, - 0xFF, 0xFF, 0xFD, 0x02, 0xAE, 0x4F, 0xFB, 0xB4, 0xA0, 0x5E, 0x1B, 0x60, 0xF3, 0xF1, 0xAD, 0x4F, - 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x7D, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, - 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x30, 0x01, 0x19, 0x60, 0xF3, 0xF3, 0xFF, 0xFF, - 0x01, 0x1B, 0x2B, 0x01, 0x31, 0x44, 0x04, 0x2A, 0x28, 0x01, 0x08, 0x26, 0x26, 0x01, 0x19, 0x60, - 0xF4, 0xF3, 0xFF, 0xFF, 0x01, 0x18, 0x21, 0x01, 0x7E, 0xF5, 0xF1, 0xFC, 0xAD, 0x4F, 0xFD, 0xB4, - 0xA0, 0x5D, 0x15, 0x60, 0x80, 0xE7, 0xC0, 0x60, 0x40, 0xEC, 0xC0, 0x60, 0x00, 0xED, 0xAC, 0x4F, - 0xBF, 0xB4, 0xA0, 0x5C, 0xC0, 0x60, 0x84, 0xEE, 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, - 0x00, 0x7A, 0x2D, 0x60, 0x5A, 0x63, 0xA3, 0xD1, 0x05, 0x60, 0xDC, 0x64, 0xD0, 0x80, 0x00, 0x64, - 0x01, 0x06, 0x01, 0x64, 0x40, 0x4E, 0xB2, 0xF1, 0x66, 0x41, 0xE1, 0x81, 0xE1, 0x81, 0xE1, 0x81, - 0xE1, 0x81, 0x61, 0x46, 0x73, 0x42, 0x5A, 0x92, 0x3F, 0x64, 0xA0, 0x84, 0x60, 0x47, 0xE0, 0x84, - 0xE0, 0x85, 0x62, 0x47, 0xE8, 0x84, 0xE8, 0x84, 0x3F, 0xB4, 0x60, 0x41, 0x64, 0x44, 0x14, 0x90, - 0x3F, 0x26, 0xCC, 0x84, 0x14, 0x90, 0x3F, 0x26, 0xCC, 0x84, 0x62, 0x41, 0x60, 0x55, 0xB2, 0xFB, - 0x72, 0x5C, 0x67, 0x42, 0xD2, 0x80, 0xA2, 0x48, 0x20, 0x2B, 0x05, 0x00, 0x01, 0x02, 0x7C, 0x5C, - 0x04, 0x60, 0x00, 0x64, 0xC4, 0x85, 0xE8, 0xE2, 0xE4, 0xE2, 0x61, 0x42, 0x49, 0x91, 0x64, 0x44, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xB4, 0x84, 0x60, 0x45, - 0x51, 0x94, 0x04, 0x60, 0x00, 0x61, 0x01, 0x0D, 0x44, 0x94, 0x62, 0x41, 0x19, 0x60, 0xF5, 0xF1, - 0x61, 0x42, 0x64, 0x43, 0xCF, 0x83, 0xCF, 0x83, 0x03, 0x03, 0xE3, 0x83, 0x48, 0x94, 0xFE, 0x1F, - 0x2E, 0x40, 0x01, 0x26, 0xE0, 0x84, 0x60, 0x41, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, - 0x44, 0x94, 0xE9, 0x81, 0xE9, 0x81, 0x54, 0x94, 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0x44, 0x94, - 0xE9, 0x81, 0xE9, 0x81, 0xE9, 0x81, 0x54, 0x94, 0x19, 0xE2, 0x2E, 0x40, 0x01, 0x26, 0xE8, 0x84, - 0x29, 0x61, 0x54, 0x91, 0x61, 0x43, 0x11, 0x06, 0x75, 0x44, 0x80, 0x2B, 0xAB, 0xFF, 0x80, 0x27, - 0x0C, 0x00, 0x14, 0xE0, 0x94, 0xE0, 0x34, 0xE2, 0x61, 0x5A, 0x48, 0x21, 0xFE, 0x01, 0x00, 0xE0, - 0x7A, 0x43, 0x15, 0xA1, 0x75, 0x40, 0x80, 0x2B, 0x06, 0xA1, 0x5D, 0x91, 0x61, 0x44, 0x2E, 0x40, - 0x01, 0x26, 0xE0, 0x84, 0x60, 0x43, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0x89, 0xFF, 0x10, 0xE0, - 0x80, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xEB, 0x83, 0xEB, 0x83, 0x5C, 0x94, 0xEB, 0x83, 0x5C, 0x94, - 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0x4C, 0x94, 0x2E, 0x40, 0x01, 0x26, - 0xE8, 0x84, 0x60, 0x43, 0x65, 0x41, 0x62, 0x45, 0xD5, 0x85, 0x04, 0x60, 0x00, 0x61, 0x01, 0x0D, - 0xC5, 0x85, 0xC4, 0x84, 0x60, 0x43, 0x62, 0x41, 0xE1, 0x81, 0xE1, 0x81, 0xE1, 0x81, 0xE1, 0x81, - 0xE1, 0x81, 0xE1, 0x9C, 0x00, 0x61, 0xDD, 0x81, 0x58, 0x94, 0x4A, 0x92, 0xFC, 0x05, 0x41, 0x4F, - 0x00, 0x61, 0x62, 0x45, 0x1C, 0x60, 0x0A, 0xF3, 0xE3, 0x83, 0xF1, 0x81, 0xE3, 0x83, 0xF1, 0x81, - 0xE3, 0x83, 0xF1, 0x81, 0xE3, 0x83, 0xF1, 0x81, 0xE3, 0x83, 0xF1, 0x81, 0xE3, 0x83, 0xF1, 0x81, - 0xA0, 0x52, 0xB2, 0xF3, 0xC3, 0x9C, 0x44, 0x94, 0x01, 0x04, 0xDC, 0x84, 0x60, 0x55, 0xB2, 0xFB, - 0x64, 0x52, 0xE9, 0xE2, 0x65, 0x53, 0xB3, 0xF3, 0x06, 0x04, 0xDC, 0x84, 0xB3, 0xFB, 0xB4, 0xF3, - 0x02, 0x04, 0xDC, 0x84, 0xB4, 0xFB, 0x2F, 0x43, 0xCF, 0x83, 0x6C, 0xF3, 0xFF, 0xFF, 0x5C, 0x94, - 0xFF, 0xFF, 0x0C, 0x24, 0x01, 0x64, 0x6C, 0xFB, 0x16, 0x60, 0xAC, 0xF1, 0xFF, 0xFF, 0x03, 0x1B, - 0x31, 0x40, 0x02, 0x2A, 0x07, 0x00, 0x73, 0xF3, 0xFF, 0xFF, 0x5C, 0x94, 0xFF, 0xFF, 0x0C, 0x24, - 0x00, 0x64, 0x73, 0xFB, 0x19, 0x60, 0xF5, 0xF3, 0x01, 0x7C, 0x5C, 0x94, 0x00, 0x36, 0x01, 0x64, - 0xA2, 0xDB, 0x19, 0x60, 0xF2, 0xF9, 0x01, 0x60, 0x34, 0xE2, 0x32, 0x7A, 0xAC, 0x4F, 0x40, 0xBC, - 0x00, 0x7F, 0xA0, 0x5C, 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, 0x07, 0xED, 0xC0, 0x60, 0x8F, 0xEE, - 0xAE, 0x4F, 0x04, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x0A, 0x61, 0xCD, 0x81, 0xFF, 0xFF, 0xFD, 0x02, - 0xAE, 0x4F, 0xFB, 0xB4, 0xA0, 0x5E, 0x1B, 0x60, 0xF3, 0xF1, 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, - 0x64, 0x41, 0x7D, 0xF1, 0x02, 0xB1, 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, - 0xB4, 0x84, 0xA0, 0x5D, 0x37, 0x60, 0x7F, 0x78, 0xFF, 0xFF, 0x24, 0xE2, 0x2D, 0xF3, 0x2C, 0xF3, - 0x00, 0xBD, 0xCC, 0x84, 0x08, 0x03, 0x2C, 0xFB, 0x06, 0x02, 0x65, 0x44, 0x2C, 0xFB, 0x8A, 0xFF, - 0x80, 0x60, 0x00, 0x75, 0x88, 0xFF, 0x44, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x44, 0xFB, 0x2F, 0x60, - 0x4A, 0x65, 0x2F, 0x60, 0x48, 0x61, 0xA5, 0xD3, 0xA1, 0xD3, 0x11, 0x18, 0xCC, 0x84, 0xA1, 0xDB, - 0x0E, 0x02, 0xA5, 0xD3, 0xA1, 0xDB, 0x17, 0x60, 0xA7, 0xF3, 0x17, 0x60, 0xA6, 0xF1, 0xA2, 0xDB, - 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0x8A, 0xFF, 0x20, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xF1, 0xF3, - 0x31, 0x40, 0x01, 0x2A, 0x3D, 0x00, 0x60, 0x43, 0x04, 0xB0, 0x02, 0xB0, 0x08, 0x24, 0x16, 0x02, - 0x10, 0xB0, 0x29, 0x44, 0x34, 0x02, 0x00, 0xA8, 0xCC, 0x81, 0x0D, 0x03, 0x41, 0x49, 0x2F, 0x02, - 0x63, 0x40, 0x08, 0x2A, 0x08, 0x00, 0xF7, 0xB3, 0x1B, 0x60, 0xF6, 0xF1, 0xAD, 0x4F, 0xFD, 0xB4, - 0xA0, 0x5D, 0x44, 0x49, 0x24, 0x00, 0x63, 0x40, 0x02, 0x2A, 0x10, 0x00, 0x1B, 0x60, 0xF7, 0xF3, - 0x1B, 0x60, 0xF5, 0xFB, 0x40, 0x49, 0x1B, 0x60, 0xF8, 0xF3, 0x1B, 0x60, 0xF6, 0xFB, 0x0C, 0xBB, - 0xFD, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0x11, 0x00, 0x1B, 0x60, 0xF9, 0xF3, - 0x37, 0x60, 0xEA, 0x7C, 0x0C, 0x18, 0xA4, 0xDB, 0x40, 0x49, 0x1B, 0x60, 0xFA, 0xF3, 0x1B, 0x60, - 0xF6, 0xFB, 0x08, 0xBB, 0xFB, 0xB3, 0xAD, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5D, 0xF1, 0xFD, - 0x00, 0x60, 0xA4, 0xF3, 0x62, 0x43, 0x17, 0x18, 0x58, 0xD3, 0x62, 0x41, 0x03, 0x18, 0xCC, 0x84, - 0xA1, 0xDB, 0x11, 0x00, 0x49, 0xD3, 0xA3, 0xDB, 0x06, 0xA1, 0xA1, 0xD3, 0x59, 0xD1, 0x60, 0x45, - 0xA5, 0xD3, 0x59, 0xD1, 0xB0, 0x84, 0xA5, 0xDB, 0x64, 0x44, 0x06, 0x36, 0xCD, 0xFE, 0x07, 0x36, - 0xD6, 0xFE, 0xE6, 0x01, 0x23, 0x46, 0xB8, 0x60, 0x03, 0x78, 0xFF, 0xFF, 0x46, 0x43, 0x26, 0x60, - 0x3E, 0x61, 0xA1, 0xD3, 0x59, 0xD1, 0x06, 0x1B, 0x59, 0xD3, 0x59, 0xD1, 0x03, 0x1B, 0x59, 0xD3, - 0x59, 0xD1, 0xF0, 0x18, 0x00, 0x63, 0x49, 0xDD, 0x60, 0x40, 0x02, 0x36, 0x11, 0x00, 0x03, 0x36, - 0x32, 0x00, 0x01, 0x36, 0x08, 0x00, 0x05, 0x3A, 0xEA, 0x01, 0xA4, 0xD3, 0x5A, 0xD3, 0x9C, 0x85, - 0xA4, 0x84, 0xA2, 0xDB, 0xE4, 0x01, 0x01, 0x60, 0x48, 0x61, 0x00, 0x64, 0xA1, 0xDB, 0xDF, 0x01, - 0x3A, 0x60, 0x3E, 0x64, 0x40, 0x45, 0x22, 0x00, 0x01, 0x60, 0x48, 0x66, 0xA6, 0xD3, 0x04, 0xA1, - 0x60, 0x43, 0xA1, 0xD3, 0xC9, 0x81, 0x60, 0x45, 0x00, 0xBB, 0xA1, 0xDB, 0xBE, 0xD3, 0x09, 0x03, - 0xD4, 0x84, 0x9C, 0x84, 0xDC, 0x84, 0xFF, 0xFF, 0x04, 0x0E, 0xA3, 0xD1, 0x63, 0x46, 0x64, 0x43, - 0xF2, 0x01, 0x9C, 0x84, 0xDC, 0x85, 0x49, 0xDD, 0x61, 0x44, 0x00, 0xBB, 0xA6, 0xDB, 0x02, 0x03, - 0x65, 0x44, 0xBE, 0xDB, 0xBC, 0x01, 0x3A, 0x60, 0x19, 0x64, 0x40, 0x45, 0x01, 0x60, 0x48, 0x66, - 0xA6, 0xD3, 0xFF, 0xFF, 0xD0, 0x80, 0x0F, 0x18, 0x02, 0x03, 0x60, 0x46, 0xF9, 0x01, 0x58, 0xD3, - 0xA4, 0xD3, 0x60, 0x45, 0x00, 0x63, 0xA4, 0xDD, 0x05, 0x18, 0x58, 0xD3, 0xFF, 0xFF, 0xC4, 0x83, - 0xA2, 0xDD, 0xCA, 0x84, 0xA6, 0xDB, 0x25, 0x58, 0x64, 0x41, 0x00, 0x60, 0x46, 0x74, 0xCD, 0xE2, - 0x04, 0xE1, 0x02, 0x60, 0x00, 0xE1, 0x3F, 0x44, 0x40, 0x26, 0x05, 0x00, 0x1C, 0x60, 0x0F, 0xF3, - 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x50, 0x3F, 0x40, 0x02, 0x2B, 0x03, 0x00, 0x3A, 0x60, 0xB7, 0x78, - 0xFF, 0xFF, 0x04, 0x29, 0xFE, 0x01, 0xC4, 0xE2, 0x43, 0x64, 0x3A, 0xDB, 0xA1, 0xF3, 0xFF, 0xFF, - 0x60, 0x41, 0x3F, 0x44, 0xFF, 0x01, 0x3F, 0x40, 0x40, 0x26, 0x05, 0x00, 0x1C, 0x60, 0x0D, 0xF3, - 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x52, 0xC4, 0xE2, 0x32, 0x7B, 0x4D, 0xE2, 0xBF, 0xFE, 0xC4, 0xE2, - 0x41, 0xFF, 0xE0, 0xFE, 0xE1, 0xFE, 0xE2, 0xFE, 0x43, 0xFF, 0x44, 0xFF, 0x46, 0xFF, 0xA2, 0xF3, - 0x62, 0xFF, 0x60, 0x40, 0x05, 0x36, 0x2D, 0xFF, 0x07, 0x36, 0xD5, 0xFE, 0x08, 0xE1, 0x88, 0x60, - 0x85, 0x71, 0x8D, 0xE2, 0xA2, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x62, 0x3D, 0x60, - 0x58, 0x4D, 0x3B, 0x78, 0xFF, 0xFF, 0x64, 0x41, 0xA9, 0x9C, 0x60, 0x45, 0x3D, 0x60, 0x58, 0x4D, - 0x0F, 0x78, 0xFF, 0xFF, 0xA1, 0xF1, 0x09, 0x60, 0xB4, 0x61, 0x64, 0x44, 0x01, 0x27, 0x24, 0x00, - 0x60, 0x40, 0x0E, 0x3A, 0x0D, 0x00, 0x01, 0x7C, 0x14, 0x60, 0x6F, 0xF9, 0x44, 0x60, 0x08, 0x7C, - 0x14, 0x60, 0x41, 0xF9, 0x16, 0x60, 0x62, 0xF1, 0x02, 0x60, 0xB0, 0x61, 0xB1, 0x9C, 0x26, 0x00, - 0x00, 0x7C, 0x14, 0x60, 0x6F, 0xF9, 0x40, 0x60, 0x08, 0x7C, 0x14, 0x60, 0x41, 0xF9, 0x16, 0x60, - 0x62, 0xF1, 0x02, 0x60, 0x90, 0x61, 0xB1, 0x9C, 0x09, 0x60, 0x67, 0x65, 0xFF, 0xB4, 0xC4, 0x85, - 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x81, 0x12, 0x00, 0xFF, 0xB4, 0xED, 0xA0, 0x2C, 0x60, 0xC6, 0x61, - 0x04, 0x04, 0xE2, 0xA0, 0xD9, 0x81, 0x01, 0x04, 0xD9, 0x81, 0xA1, 0xD1, 0x02, 0x60, 0x50, 0x61, - 0x26, 0x60, 0xF0, 0x65, 0xE0, 0x84, 0x44, 0xD3, 0xB1, 0x9C, 0xC8, 0x81, 0x61, 0x47, 0x00, 0x7E, - 0xE9, 0x81, 0x07, 0x60, 0xF0, 0x65, 0xA5, 0x81, 0x0B, 0xB9, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x85, - 0xB5, 0x85, 0x04, 0x60, 0x44, 0x62, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0xA1, 0xF3, - 0xC8, 0x61, 0x61, 0x54, 0xCD, 0xE2, 0x60, 0x40, 0x01, 0x27, 0x2E, 0x00, 0xCC, 0x84, 0xE0, 0x85, - 0x15, 0x60, 0xA2, 0xE7, 0x26, 0x60, 0x80, 0x64, 0x3D, 0x60, 0x58, 0x4F, 0x04, 0x78, 0xFF, 0xFF, - 0x26, 0x60, 0x9C, 0x64, 0x3D, 0x60, 0x58, 0x4F, 0x04, 0x78, 0xFF, 0xFF, 0x26, 0x60, 0xB8, 0x64, - 0x3D, 0x60, 0x58, 0x4F, 0x04, 0x78, 0xFF, 0xFF, 0x26, 0x60, 0xD4, 0x64, 0x3D, 0x60, 0x58, 0x4F, - 0x04, 0x78, 0xFF, 0xFF, 0x75, 0x64, 0x06, 0x61, 0x61, 0x48, 0x60, 0x44, 0x80, 0xBC, 0xFF, 0xB4, - 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x28, 0x60, 0xE6, 0x7C, 0x07, 0x60, 0xE8, 0xF9, - 0x28, 0x60, 0x6E, 0x63, 0x14, 0x61, 0x21, 0x00, 0x14, 0x60, 0xDF, 0xF1, 0xFF, 0xB4, 0xED, 0xA0, - 0x64, 0x41, 0x04, 0x04, 0xE2, 0xA0, 0xD9, 0x81, 0x01, 0x04, 0xD9, 0x81, 0xA1, 0xD1, 0x14, 0x60, - 0x0E, 0xF3, 0x64, 0x41, 0xFF, 0xB1, 0xFF, 0x60, 0x00, 0x65, 0xA4, 0x84, 0x34, 0x94, 0xA2, 0xDB, - 0x5A, 0xD3, 0x64, 0x41, 0xA5, 0x81, 0xFF, 0xB4, 0x34, 0x94, 0xA2, 0xDB, 0x29, 0x60, 0x52, 0x7C, - 0x07, 0x60, 0xE8, 0xF9, 0x27, 0x60, 0xFC, 0x63, 0x13, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, - 0xFF, 0xFF, 0x07, 0x60, 0xE8, 0xF3, 0x31, 0x40, 0x80, 0x26, 0x36, 0xA4, 0x07, 0x60, 0xE8, 0xFB, - 0x60, 0x43, 0x09, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0xA1, 0xF3, 0x29, 0x60, - 0xBE, 0x61, 0x00, 0x7C, 0x7E, 0x63, 0x59, 0xD9, 0xFE, 0x1F, 0x60, 0x40, 0x01, 0x27, 0x03, 0x00, - 0x2A, 0x60, 0x40, 0x65, 0x15, 0x00, 0xFF, 0xB4, 0xF9, 0xA0, 0x2A, 0x60, 0x62, 0x65, 0x01, 0x7C, - 0x0D, 0x04, 0xED, 0xA0, 0x2A, 0x60, 0x84, 0x65, 0x11, 0x7C, 0x08, 0x04, 0xE2, 0xA0, 0x2A, 0x60, - 0xA6, 0x65, 0x21, 0x7C, 0x03, 0x04, 0x2A, 0x60, 0xC8, 0x65, 0x31, 0x7C, 0x64, 0x5F, 0x7D, 0xFB, - 0xA5, 0xD3, 0xDA, 0x85, 0xF0, 0xA0, 0x29, 0x60, 0xBE, 0x61, 0x08, 0x06, 0x40, 0x54, 0x58, 0x53, - 0x08, 0xFF, 0x37, 0x60, 0x7A, 0x64, 0x43, 0xFB, 0x08, 0xFF, 0xFF, 0x01, 0x60, 0x43, 0x60, 0x46, - 0xA5, 0xD1, 0xDA, 0x85, 0xA5, 0xD3, 0xDA, 0x85, 0x59, 0xD9, 0x59, 0xDB, 0x59, 0xD9, 0x59, 0xDB, - 0xFB, 0x1F, 0x0C, 0x63, 0xA5, 0xD1, 0xDA, 0x85, 0xA5, 0xD3, 0xDA, 0x85, 0x59, 0xD9, 0x59, 0xDB, - 0x59, 0xD9, 0x59, 0xDB, 0xF7, 0x1F, 0x66, 0x44, 0x0E, 0x63, 0x53, 0x93, 0x60, 0x40, 0x10, 0x36, - 0x07, 0x00, 0x65, 0x44, 0x48, 0xD3, 0x59, 0xD9, 0x59, 0xDB, 0x59, 0xD9, 0x59, 0xDB, 0xFB, 0x1F, - 0x16, 0x60, 0x39, 0xF1, 0x7D, 0xF3, 0x64, 0x43, 0xDB, 0x81, 0x2C, 0x60, 0x54, 0x65, 0x60, 0x40, - 0x01, 0x37, 0x12, 0x00, 0x11, 0x37, 0x17, 0x00, 0x21, 0x37, 0x1D, 0x00, 0x31, 0x37, 0x22, 0x00, - 0xA3, 0xD1, 0x16, 0x60, 0x34, 0xF5, 0x64, 0x44, 0xFF, 0xB4, 0x16, 0x60, 0x33, 0xFB, 0x64, 0x47, - 0xFF, 0xB4, 0x16, 0x60, 0x2A, 0xF1, 0x1D, 0x00, 0xA1, 0xD3, 0x16, 0x60, 0x35, 0xF5, 0xFF, 0xB4, - 0x16, 0x60, 0x2B, 0xF1, 0x16, 0x00, 0xA1, 0xD3, 0x16, 0x60, 0x36, 0xF5, 0x60, 0x47, 0xFF, 0xB4, - 0x16, 0x60, 0x2C, 0xF1, 0x0E, 0x00, 0x59, 0xD3, 0x16, 0x60, 0x37, 0xF5, 0xFF, 0xB4, 0x16, 0x60, - 0x2D, 0xF1, 0x07, 0x00, 0x59, 0xD3, 0x16, 0x60, 0x38, 0xF5, 0x60, 0x47, 0xFF, 0xB4, 0x16, 0x60, - 0x2E, 0xF1, 0x16, 0x60, 0x32, 0xFB, 0x16, 0x60, 0x2F, 0xF9, 0x66, 0x42, 0xFC, 0xA2, 0xA2, 0xD3, - 0x2B, 0x60, 0x42, 0x63, 0xCC, 0x84, 0xE8, 0x84, 0xCC, 0x81, 0x63, 0x45, 0xA6, 0xD3, 0xDA, 0x82, - 0xFF, 0xB4, 0xFF, 0xFF, 0x03, 0x03, 0x60, 0x40, 0x80, 0x2B, 0x03, 0x00, 0xDA, 0x86, 0xCD, 0x81, - 0xF5, 0x01, 0x00, 0xB9, 0xA6, 0xD3, 0x0B, 0x03, 0x5A, 0xD1, 0xDA, 0x86, 0xFF, 0xB4, 0xE0, 0x84, - 0xC4, 0x84, 0x5C, 0x90, 0xBD, 0xD9, 0xFD, 0x02, 0xCD, 0x81, 0x66, 0x42, 0xF2, 0x02, 0x5A, 0xD3, - 0x2B, 0x60, 0x80, 0x65, 0xD7, 0x80, 0xBD, 0xDB, 0xFD, 0x02, 0x7D, 0xF3, 0x19, 0x60, 0x7B, 0xF1, - 0x60, 0x40, 0x01, 0x27, 0x09, 0x00, 0x64, 0x40, 0x10, 0x26, 0x06, 0x00, 0x13, 0x64, 0xCB, 0xFB, - 0x01, 0x60, 0x67, 0x64, 0x37, 0xFB, 0x09, 0x00, 0x08, 0x64, 0xCB, 0xFB, 0xA1, 0xF3, 0x01, 0x60, - 0x67, 0x7C, 0x60, 0x40, 0x01, 0x27, 0x5B, 0x7C, 0x37, 0xF9, 0x19, 0x60, 0x4D, 0xF1, 0x7D, 0xF3, - 0x64, 0x40, 0x00, 0x3A, 0x1B, 0x00, 0x60, 0x40, 0x01, 0x27, 0x0D, 0x00, 0x32, 0x60, 0xAB, 0x63, - 0x4C, 0x94, 0x0E, 0xA5, 0x60, 0xFE, 0xA0, 0xD1, 0xA5, 0xD3, 0x19, 0x60, 0x72, 0xF9, 0x19, 0x60, - 0x73, 0xFB, 0x20, 0xFE, 0x0B, 0x00, 0xFF, 0xB4, 0xF8, 0xA4, 0x32, 0x60, 0xC8, 0x63, 0x4C, 0x94, - 0x60, 0xFE, 0xA0, 0xD1, 0xFF, 0xFF, 0x19, 0x60, 0x73, 0xF9, 0x20, 0xFE, 0x19, 0x60, 0x75, 0xF3, - 0x16, 0x60, 0xD8, 0xF1, 0x60, 0x43, 0xD3, 0x80, 0x19, 0x60, 0x76, 0xF3, 0x01, 0x07, 0x63, 0x5C, - 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x07, 0x60, 0x5C, 0x19, 0x60, 0x4F, 0xF9, 0x19, 0x60, 0x53, 0xF9, - 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x0A, 0x00, 0xFF, 0xB5, 0x10, 0x60, 0xF4, 0x63, - 0x65, 0x41, 0xCD, 0x81, 0x06, 0xA3, 0xFD, 0x02, 0xFA, 0xA3, 0xA3, 0xD3, 0x0F, 0x00, 0x01, 0x60, - 0xFF, 0x65, 0xA4, 0x84, 0x11, 0x60, 0x60, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0x08, 0xA1, - 0xFB, 0x02, 0xFC, 0xA1, 0xA1, 0xD3, 0x19, 0x60, 0x4F, 0xF1, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, - 0x04, 0x07, 0x19, 0x60, 0x4F, 0xFB, 0x19, 0x60, 0x53, 0xFB, 0x19, 0x60, 0x4F, 0xF3, 0x19, 0x60, - 0x72, 0xF1, 0x19, 0x60, 0x74, 0xFB, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x04, 0x19, 0x60, 0x74, 0xF9, - 0x2C, 0x60, 0x74, 0x63, 0x2B, 0x60, 0x02, 0x65, 0x16, 0x60, 0x33, 0xF1, 0x2A, 0x60, 0xEA, 0x61, - 0x2C, 0x60, 0x62, 0x64, 0x40, 0x4F, 0x04, 0x64, 0xC3, 0x60, 0x58, 0x4D, 0x1A, 0x78, 0xFF, 0xFF, - 0x19, 0x60, 0x4F, 0xF3, 0x19, 0x60, 0x73, 0xF1, 0x19, 0x60, 0x74, 0xFB, 0xD0, 0x80, 0xFF, 0xFF, - 0x02, 0x04, 0x19, 0x60, 0x74, 0xF9, 0x2C, 0x60, 0x7C, 0x63, 0x16, 0x60, 0x32, 0xF1, 0x2B, 0x60, - 0x42, 0x65, 0x2C, 0x60, 0x60, 0x64, 0x40, 0x4F, 0x08, 0x64, 0xC3, 0x60, 0x58, 0x4D, 0x1A, 0x78, - 0xFF, 0xFF, 0x7D, 0xF3, 0x08, 0x7C, 0x38, 0xF9, 0x2B, 0x60, 0xDA, 0x61, 0x60, 0x40, 0x01, 0x2B, - 0x0E, 0x00, 0x01, 0x37, 0x06, 0x00, 0x11, 0x37, 0x03, 0x00, 0x21, 0x3B, 0x1E, 0xA1, 0x1E, 0xA1, - 0x1E, 0xA1, 0x1C, 0x63, 0x2B, 0x60, 0xBC, 0x64, 0x59, 0xD1, 0x58, 0xD9, 0xFD, 0x1F, 0x16, 0x60, - 0x2F, 0xF3, 0x00, 0x7C, 0x60, 0x45, 0x70, 0x62, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, - 0x04, 0x29, 0xFE, 0x01, 0x00, 0x60, 0x10, 0x62, 0x3D, 0x60, 0x58, 0x4D, 0x3B, 0x78, 0xFF, 0xFF, - 0x01, 0x61, 0xB1, 0x9C, 0x60, 0x45, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x3A, 0x60, - 0x95, 0x78, 0xFF, 0xFF, 0x44, 0xD3, 0x80, 0x7C, 0x60, 0x48, 0x60, 0x47, 0x00, 0x7F, 0xB0, 0x8A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x2F, 0x58, 0xFF, 0xFF, 0xD5, 0x60, 0x84, 0xE7, 0x62, 0x47, - 0x80, 0xBF, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x64, 0x4A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x2D, 0x58, - 0xFF, 0xFF, 0x00, 0x7C, 0xBD, 0xD3, 0xD5, 0x60, 0x84, 0xE7, 0x60, 0x47, 0x80, 0xBF, 0x60, 0x4A, - 0xBD, 0xD3, 0x01, 0x16, 0xFE, 0x01, 0x90, 0x8A, 0xBD, 0xD3, 0x01, 0x16, 0xFE, 0x01, 0x90, 0x8A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0xCD, 0x81, 0x95, 0x60, 0x84, 0xE7, 0xEB, 0x02, 0x2D, 0x58, - 0xFF, 0xFF, 0xD5, 0x60, 0x84, 0xE7, 0x62, 0x4A, 0x02, 0x64, 0x01, 0x16, 0xFE, 0x01, 0xCC, 0x84, - 0xFF, 0xFF, 0xFD, 0x02, 0x7C, 0x49, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x68, 0x5C, 0x7C, 0x49, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x68, 0x44, 0x95, 0x60, 0x84, 0xE7, 0x2D, 0x58, 0xFF, 0xFF, - 0x40, 0xFF, 0x20, 0x44, 0xBF, 0xB4, 0x40, 0x40, 0x03, 0x00, 0x20, 0x44, 0x40, 0xBC, 0x40, 0x40, - 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x02, 0x00, 0x43, 0x45, 0xF6, 0x01, 0x00, 0x64, - 0x19, 0x60, 0xF2, 0xFB, 0x3F, 0x44, 0x40, 0x26, 0x05, 0x00, 0x1C, 0x60, 0x0F, 0xF3, 0x5A, 0xD1, - 0xA0, 0x50, 0xA4, 0x50, 0xAE, 0x4F, 0xFD, 0xB4, 0x04, 0xBC, 0xA0, 0x5E, 0x00, 0x60, 0x02, 0x71, - 0x8D, 0xE2, 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0x04, 0xAC, 0xA0, 0x5E, 0xFF, 0xFF, 0x00, 0x60, - 0x10, 0x62, 0x19, 0x60, 0x8E, 0x7C, 0x00, 0x60, 0xAC, 0x65, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x62, 0x3D, 0x60, 0x58, 0x4D, 0x3B, 0x78, 0xFF, 0xFF, - 0x60, 0x40, 0x19, 0x60, 0x8E, 0x64, 0x64, 0x40, 0xD0, 0x80, 0x14, 0x71, 0x05, 0x03, 0x8D, 0xE2, - 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0xE2, 0x01, 0x3F, 0x44, 0x40, 0x26, 0x05, 0x00, 0x1C, 0x60, - 0x0D, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x52, 0x27, 0x60, 0x36, 0x63, 0x1E, 0x61, 0x3D, 0x60, - 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x14, 0x71, 0x8D, 0xE2, 0x40, 0xE1, 0x40, 0x29, - 0xFE, 0x01, 0x31, 0x44, 0x40, 0x26, 0x02, 0x00, 0x80, 0x26, 0x17, 0x00, 0x28, 0x60, 0xE6, 0x63, - 0x07, 0x60, 0xE8, 0xFD, 0x09, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0x31, 0x44, - 0x40, 0x2A, 0x14, 0x00, 0x31, 0x44, 0x7F, 0xB4, 0x40, 0x51, 0xAE, 0x4C, 0x10, 0x26, 0x0E, 0x00, - 0x07, 0x60, 0xE9, 0xFB, 0x31, 0x44, 0x80, 0xBC, 0x40, 0x51, 0x29, 0x60, 0x1C, 0x63, 0x07, 0x60, - 0xE8, 0xFD, 0x09, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0x27, 0x60, 0xEA, 0x63, - 0x03, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x62, 0x19, 0x60, - 0x8F, 0x7C, 0x00, 0x60, 0xAC, 0x65, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x80, 0xE1, - 0xBF, 0xFE, 0xA1, 0x4F, 0x70, 0xB4, 0x50, 0x36, 0x0C, 0x00, 0x20, 0x36, 0x03, 0x00, 0x3A, 0x60, - 0x77, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x1A, 0xE1, 0xDF, 0xFE, 0x19, 0xFF, 0x00, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x20, 0x44, 0x40, 0x2A, 0x85, 0x00, 0x7D, 0xF1, 0x3B, 0x00, 0x83, 0x00, 0x19, 0x60, - 0xF2, 0xF3, 0xFF, 0xFF, 0x01, 0x18, 0x59, 0x01, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, - 0x1C, 0x60, 0x0F, 0xF3, 0x3F, 0x40, 0x40, 0x26, 0x01, 0x00, 0xA0, 0x50, 0xAE, 0x4F, 0xFD, 0xB4, - 0xA0, 0x5E, 0xAC, 0x4F, 0x10, 0xBC, 0xA0, 0x5C, 0xFF, 0xFF, 0x10, 0xAC, 0xA0, 0x5C, 0x00, 0x60, - 0xC8, 0x71, 0x8D, 0xE2, 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0x7D, 0xF1, 0x30, 0x61, 0x64, 0x44, - 0x01, 0x2B, 0x20, 0xA1, 0x30, 0x64, 0x61, 0x5F, 0x60, 0x45, 0x0C, 0x60, 0x00, 0x62, 0x00, 0x60, - 0x71, 0x7C, 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0xC8, 0x71, 0x8D, 0xE2, - 0x40, 0xE1, 0x40, 0x29, 0xFE, 0x01, 0x01, 0x60, 0x08, 0xE1, 0x7D, 0xF1, 0x20, 0x44, 0x40, 0xBC, - 0x40, 0x40, 0x19, 0x60, 0xF2, 0xF3, 0xFF, 0xFF, 0x03, 0x18, 0x3D, 0x60, 0x57, 0x78, 0xFF, 0xFF, - 0x1B, 0x60, 0xF3, 0xF1, 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x7D, 0xF1, 0x02, 0xB1, - 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x20, 0x44, - 0x40, 0x2A, 0x43, 0x45, 0x20, 0xBC, 0x40, 0x40, 0xA1, 0xF9, 0x05, 0x64, 0xA2, 0xFB, 0xDF, 0xFE, - 0x19, 0xFF, 0xDD, 0xFE, 0x26, 0x00, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x43, 0x45, 0xA4, 0xD1, - 0xDA, 0x83, 0xC3, 0x85, 0x80, 0xE1, 0xDF, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x48, 0x60, 0x47, - 0x80, 0xBC, 0x00, 0x7F, 0x60, 0x4A, 0xD7, 0x80, 0xA1, 0xFF, 0xF6, 0x02, 0xBF, 0xFE, 0x11, 0x00, - 0x43, 0x45, 0xA4, 0xD1, 0xDA, 0x83, 0x0D, 0x18, 0x64, 0x44, 0x00, 0x61, 0xFA, 0xA4, 0xDD, 0x81, - 0xFD, 0x02, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0xBF, 0xFE, 0x02, 0x00, 0xF1, 0xFE, - 0x01, 0x00, 0x25, 0x43, 0x21, 0xE1, 0x00, 0x64, 0xBF, 0xDB, 0x20, 0x44, 0x20, 0x2A, 0x07, 0x00, - 0x07, 0xB4, 0x04, 0x36, 0xC3, 0xFE, 0x06, 0x36, 0xCC, 0xFE, 0x07, 0x36, 0xD5, 0xFE, 0x20, 0x44, - 0x98, 0xB4, 0x40, 0x40, 0x26, 0x60, 0x26, 0x63, 0xBD, 0xD3, 0x03, 0x61, 0x0F, 0x1B, 0x04, 0xA3, - 0xBD, 0xD3, 0x04, 0x61, 0x0B, 0x1B, 0x04, 0xA3, 0xBD, 0xD3, 0x06, 0x61, 0x07, 0x1B, 0x04, 0xA3, - 0xBD, 0xD3, 0x07, 0x61, 0x03, 0x1B, 0xC3, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0xA3, 0xD1, 0x40, 0x44, - 0x20, 0x44, 0x07, 0xB5, 0xD4, 0x85, 0x35, 0x80, 0x24, 0x45, 0x26, 0x60, 0x66, 0x64, 0x44, 0xD7, - 0xFF, 0xFF, 0xFF, 0xFF, 0x43, 0x45, 0x20, 0x44, 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, - 0xBD, 0xD1, 0x40, 0x44, 0x10, 0x27, 0x19, 0x00, 0x3F, 0x40, 0x02, 0x2B, 0x06, 0x00, 0x24, 0x47, - 0x08, 0x2B, 0x13, 0x00, 0x07, 0xB4, 0x01, 0x36, 0x11, 0x00, 0xFF, 0x60, 0x7F, 0x65, 0x15, 0x60, - 0xA2, 0x64, 0x24, 0x40, 0x08, 0x2B, 0xA4, 0x84, 0xA0, 0x57, 0xFF, 0xFF, 0x64, 0x49, 0xFF, 0xFF, - 0x68, 0x44, 0x01, 0x16, 0xFD, 0x01, 0x00, 0x7F, 0xA3, 0xDB, 0xAB, 0x01, 0x64, 0x42, 0x3D, 0x60, - 0x58, 0x4D, 0x3B, 0x78, 0xFF, 0xFF, 0xBD, 0xD9, 0xA3, 0xDB, 0xA3, 0x01, 0x43, 0x45, 0x20, 0x44, - 0x20, 0xBC, 0x40, 0x40, 0x64, 0x43, 0xBD, 0xD3, 0xA3, 0xD1, 0x40, 0x44, 0x10, 0x2B, 0x16, 0x00, - 0xBE, 0xD1, 0xFF, 0xFF, 0x15, 0x60, 0x80, 0xE7, 0x24, 0x40, 0x07, 0x27, 0x04, 0x00, 0xAC, 0x4F, - 0x10, 0xBC, 0x00, 0x7F, 0xA0, 0x5C, 0x64, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x24, 0x40, - 0x20, 0x27, 0x1D, 0x00, 0xAC, 0x4F, 0xEF, 0xB4, 0xA0, 0x5C, 0x19, 0x00, 0x3F, 0x40, 0x02, 0x2B, - 0x06, 0x00, 0x24, 0x47, 0x08, 0x2B, 0x13, 0x00, 0x07, 0xB4, 0x01, 0x36, 0x11, 0x00, 0x15, 0x60, - 0x22, 0x64, 0x24, 0x40, 0x08, 0x27, 0x80, 0xBC, 0x7C, 0x48, 0xBE, 0xD3, 0xA0, 0x57, 0x60, 0x48, - 0x64, 0x44, 0x80, 0xBC, 0xFF, 0xB4, 0x60, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x69, 0x01, - 0x01, 0x61, 0x3D, 0x60, 0x58, 0x4D, 0x23, 0x78, 0xFF, 0xFF, 0x63, 0x01, 0x30, 0x44, 0x02, 0xA8, - 0x00, 0xE1, 0x07, 0x02, 0x62, 0xFF, 0x63, 0xFF, 0x64, 0xFF, 0x65, 0xFF, 0x66, 0xFF, 0xBF, 0xFE, - 0xA1, 0xFF, 0x82, 0xFF, 0x88, 0xFF, 0x6C, 0x40, 0x41, 0xFF, 0xC4, 0xE2, 0x43, 0xFF, 0x5C, 0x49, - 0x08, 0xE1, 0xA2, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x02, 0x02, - 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0xFF, 0x88, 0xFF, 0xA8, 0xE2, 0xCB, 0xF1, 0x00, 0x6B, 0x89, 0xFF, - 0x64, 0x54, 0x88, 0xFF, 0x9F, 0xFE, 0x02, 0x05, 0x64, 0x44, 0x60, 0x54, 0xCD, 0xE2, 0xC2, 0x64, - 0x3A, 0xDB, 0xBC, 0xFF, 0xB5, 0xFF, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xB4, 0x40, 0x46, 0x3C, 0x44, - 0x00, 0xBC, 0xFF, 0xFF, 0x06, 0x03, 0x27, 0x40, 0x26, 0x22, 0x03, 0x00, 0x02, 0x64, 0x31, 0xFB, - 0xC0, 0xFE, 0x27, 0x44, 0x20, 0x2A, 0x04, 0x00, 0xA0, 0x60, 0x00, 0xEA, 0xB0, 0x60, 0x00, 0xEA, - 0x5C, 0x44, 0x27, 0x44, 0x18, 0xB4, 0x40, 0x47, 0x00, 0xE1, 0x29, 0x40, 0x50, 0x2B, 0x37, 0x00, - 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x31, 0x40, 0x08, 0x26, 0x0B, 0x00, 0x21, 0x46, - 0xA7, 0xF4, 0x1D, 0xF2, 0xFF, 0xB3, 0x00, 0x7C, 0x05, 0x03, 0x06, 0x61, 0x5D, 0x91, 0x09, 0x60, - 0x02, 0x65, 0x02, 0x03, 0x00, 0x61, 0x15, 0x00, 0xD4, 0x80, 0x63, 0x45, 0xFB, 0x07, 0x65, 0x43, - 0x80, 0x60, 0x00, 0x62, 0xF6, 0x82, 0x53, 0x90, 0xE3, 0x83, 0xFC, 0x04, 0xEB, 0x83, 0xEB, 0x83, - 0xEA, 0x82, 0x5C, 0x94, 0xB2, 0x9C, 0xF3, 0x07, 0x64, 0x41, 0xDD, 0x81, 0xE1, 0x81, 0xE1, 0x81, - 0xE1, 0x81, 0x2B, 0x44, 0x54, 0x90, 0x70, 0x45, 0x02, 0x28, 0x61, 0x44, 0xC4, 0x84, 0xFF, 0xFF, - 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, 0x20, 0x29, 0x6D, 0xE2, 0xA4, 0xE2, - 0xC4, 0xE2, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0x32, 0xF1, 0x08, 0x29, 0x09, 0x00, - 0x64, 0x40, 0x07, 0x22, 0x06, 0x00, 0x43, 0xFF, 0x27, 0x44, 0x10, 0xBC, 0x40, 0x47, 0x00, 0x64, - 0x32, 0xFB, 0x31, 0x41, 0x3C, 0x44, 0x01, 0xB1, 0x00, 0xBC, 0x0A, 0x02, 0x09, 0x03, 0x32, 0xF3, - 0x00, 0x7C, 0x01, 0xB4, 0xFF, 0xFF, 0x04, 0x03, 0x32, 0xF9, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0xC8, 0x60, 0x09, 0x7D, 0x00, 0x60, 0x00, 0x6B, 0x00, 0x64, 0x33, 0xFB, 0x0C, 0x60, 0x16, 0x64, - 0xA0, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE1, 0x30, 0x40, 0x02, 0x36, 0xA1, 0xFF, 0x83, 0xFF, - 0x8D, 0xFF, 0x5C, 0x44, 0x5C, 0x43, 0x5C, 0x42, 0x5C, 0x41, 0x5C, 0x40, 0xAC, 0xFF, 0xAD, 0xFF, - 0xE7, 0xE1, 0xB3, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x03, 0x02, - 0x28, 0xE2, 0x40, 0xFF, 0xA1, 0xFF, 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0xB7, 0x60, - 0xF7, 0x64, 0x40, 0x40, 0xBA, 0xF3, 0x7E, 0xFB, 0x0F, 0x60, 0xE2, 0x63, 0xC7, 0xF3, 0xBD, 0xDB, - 0x00, 0x60, 0x9A, 0x64, 0xBD, 0xDB, 0x02, 0x64, 0xBD, 0xDB, 0x04, 0x64, 0xA3, 0xDB, 0x5C, 0x49, - 0x0A, 0x64, 0x40, 0x4B, 0x5C, 0x5C, 0x01, 0x60, 0x39, 0xE2, 0x04, 0x60, 0x00, 0x7A, 0x89, 0xFF, - 0x03, 0x60, 0xFF, 0x73, 0x88, 0xFF, 0xB7, 0x60, 0xF7, 0x78, 0xFF, 0xFF, 0x30, 0x44, 0x02, 0xA8, - 0x00, 0xE1, 0x06, 0x02, 0x40, 0xFF, 0x42, 0xFF, 0x43, 0xFF, 0x44, 0xFF, 0x45, 0xFF, 0xA1, 0xFF, - 0x88, 0xFF, 0x85, 0xFF, 0x21, 0xE1, 0x5C, 0x40, 0xC3, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0xA2, 0xFF, - 0x30, 0x44, 0x02, 0xA8, 0x00, 0xE1, 0x01, 0x02, 0xA1, 0xFF, 0x86, 0xFF, 0x88, 0xFF, 0x5C, 0x46, - 0x5C, 0x49, 0x5C, 0x40, 0xEF, 0x60, 0x58, 0x4F, 0x1B, 0x78, 0xFF, 0xFF, 0x1D, 0x60, 0x58, 0x4F, - 0x81, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0x58, 0x4F, 0x58, 0x78, 0xFF, 0xFF, 0xE7, 0x60, 0x58, 0x4F, - 0x99, 0x78, 0xFF, 0xFF, 0x20, 0x60, 0x58, 0x4F, 0x19, 0x78, 0xFF, 0xFF, 0xF4, 0x60, 0x58, 0x4F, - 0xE9, 0x78, 0xFF, 0xFF, 0xE9, 0x60, 0x58, 0x4F, 0xCA, 0x78, 0xFF, 0xFF, 0x27, 0x60, 0x58, 0x4F, - 0x71, 0x78, 0xFF, 0xFF, 0xEE, 0x60, 0x58, 0x4F, 0x69, 0x78, 0xFF, 0xFF, 0x1F, 0xE1, 0xA3, 0xFF, - 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0x03, 0xE1, 0xA3, 0xFF, 0xFE, 0xFC, 0xFF, 0xFC, 0x25, 0x60, - 0x96, 0x63, 0x17, 0xFD, 0xAE, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, 0x42, 0x6F, 0x6F, 0x74, - 0x63, 0x6F, 0x64, 0x65, 0x20, 0x21, 0x21, 0x20, 0x20, 0x00, 0x53, 0x54, 0x41, 0x2F, 0x41, 0x50, - 0x20, 0x46, 0x75, 0x6E, 0x63, 0x27, 0x73, 0x00, 0x1F, 0x00, 0x04, 0x00, 0x01, 0x00, 0x24, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x07, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0xA6, 0xF3, 0x21, 0x61, 0x00, 0x7C, 0x01, 0x00, 0x00, 0xFA, - 0x60, 0x46, 0xFE, 0x63, 0xA3, 0xD8, 0xFE, 0x1F, 0xCD, 0x81, 0xD8, 0x84, 0xF8, 0x02, 0x21, 0x61, - 0x80, 0x67, 0x40, 0x4A, 0xA6, 0xF5, 0x05, 0x18, 0x2A, 0x43, 0x02, 0xFC, 0x5F, 0x8A, 0x00, 0xF4, - 0xFA, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0xA8, 0xF1, 0xA7, 0xF3, 0x7C, 0x63, 0xAA, 0xFB, 0x60, 0x46, - 0x01, 0xFC, 0xDC, 0x84, 0xD0, 0x80, 0x00, 0xFA, 0xFA, 0x04, 0xAB, 0xFB, 0x60, 0x46, 0x00, 0x64, - 0x00, 0xFA, 0x63, 0x44, 0x80, 0x7F, 0x01, 0xFA, 0xA8, 0xF3, 0xA7, 0xF1, 0xDC, 0x84, 0xD0, 0x84, - 0xA9, 0xFB, 0x03, 0x60, 0x26, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x2E, 0xFB, 0x82, 0xFF, 0x40, 0x42, 0x87, 0xFF, 0xA9, 0xF3, 0xB1, 0xFB, 0x00, 0x64, 0x40, 0x50, - 0x63, 0xFF, 0x60, 0xFF, 0x66, 0xFF, 0x65, 0xFF, 0x64, 0xFF, 0x61, 0xFF, 0x62, 0xFF, 0x49, 0x60, - 0x02, 0xE1, 0x52, 0x60, 0x02, 0xE1, 0x5C, 0x60, 0x02, 0xE1, 0x65, 0x60, 0x02, 0xE1, 0x6B, 0x60, - 0x02, 0xE1, 0x76, 0x60, 0x02, 0xE1, 0x41, 0x60, 0x02, 0xE1, 0x0C, 0x64, 0x13, 0x60, 0x1C, 0xFB, - 0x41, 0x60, 0x07, 0x64, 0x9F, 0xFB, 0x2D, 0xFF, 0x06, 0x61, 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, - 0xB6, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0xF0, 0x67, 0x0E, 0xFA, 0x26, 0x60, 0x04, 0x64, - 0x13, 0x60, 0x10, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x2B, 0x41, 0x4D, 0x8B, 0xFF, 0xFF, 0xEA, 0x02, 0x05, 0x61, 0x41, 0x4B, 0x09, 0x60, 0x08, 0x61, - 0xB6, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x25, 0x60, 0xF8, 0x64, 0x13, 0x60, 0x10, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x2B, 0x41, 0x4D, 0x8B, - 0xFF, 0xFF, 0xEC, 0x02, 0x40, 0x60, 0x45, 0x78, 0xFF, 0xFF, 0x00, 0xEA, 0x00, 0xEB, 0x50, 0x60, - 0x03, 0xEA, 0x51, 0x60, 0x13, 0xEA, 0x52, 0x60, 0x30, 0xEA, 0x53, 0x60, 0x40, 0xEA, 0x54, 0x60, - 0x52, 0xEA, 0x55, 0x60, 0x6D, 0xEA, 0x56, 0x60, 0x71, 0xEA, 0x57, 0x60, 0x8B, 0xEA, 0x58, 0x60, - 0x47, 0xEA, 0x59, 0x60, 0xA0, 0xEA, 0x5A, 0x60, 0xB2, 0xEA, 0x5B, 0x60, 0xC1, 0xEA, 0x5C, 0x60, - 0xD7, 0xEA, 0x5D, 0x60, 0xEB, 0xEA, 0x5E, 0x60, 0xA0, 0xEA, 0x50, 0x60, 0x36, 0xEB, 0x51, 0x60, - 0x37, 0xEB, 0x52, 0x60, 0x20, 0xEB, 0x53, 0x60, 0xE4, 0xEB, 0x54, 0x60, 0x34, 0xEB, 0x55, 0x60, - 0x58, 0xEB, 0x56, 0x60, 0x48, 0xEB, 0x57, 0x60, 0xD0, 0xEB, 0x58, 0x60, 0xC3, 0xEB, 0x59, 0x60, - 0xFC, 0xEB, 0x5A, 0x60, 0x34, 0xEB, 0x5B, 0x60, 0x58, 0xEB, 0x5C, 0x60, 0xC0, 0xEB, 0x5D, 0x60, - 0xD0, 0xEB, 0x5E, 0x60, 0x91, 0xEB, 0x00, 0xEA, 0x00, 0xEB, 0xE0, 0x60, 0x02, 0xEA, 0xE0, 0x60, - 0x03, 0xEB, 0xA0, 0x60, 0x00, 0xEB, 0xB0, 0x60, 0x00, 0xEB, 0xAB, 0x48, 0x40, 0x3B, 0x01, 0x00, - 0xFC, 0x01, 0x00, 0xEB, 0x03, 0x60, 0x02, 0x64, 0xA0, 0xDB, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, - 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x24, 0x44, 0xFF, 0xB4, - 0x04, 0xFB, 0x50, 0x60, 0x00, 0x64, 0x05, 0xFB, 0x10, 0x60, 0x10, 0x75, 0x2A, 0x60, 0x1D, 0x78, - 0xFF, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x40, 0x00, 0x05, 0x60, 0xF9, 0xF1, 0x42, 0x60, 0x08, 0x64, - 0x09, 0x60, 0x19, 0x63, 0x64, 0x40, 0x01, 0x2B, 0x04, 0x00, 0x42, 0x60, 0x09, 0x64, 0x0A, 0x60, - 0x19, 0x63, 0x1C, 0x60, 0x0F, 0xFB, 0x04, 0x60, 0x00, 0xBC, 0x1C, 0x60, 0x0B, 0xFB, 0x1C, 0x60, - 0x0A, 0xFD, 0x1D, 0x60, 0x19, 0x63, 0x1C, 0x60, 0x0E, 0xFD, 0x80, 0x60, 0x1C, 0x64, 0x3F, 0x40, - 0x01, 0x2A, 0x02, 0x00, 0x60, 0x60, 0x1C, 0x64, 0x1C, 0x60, 0x10, 0xFB, 0x1C, 0x60, 0x0C, 0xFB, - 0x1C, 0x60, 0x0F, 0xF3, 0xA0, 0x50, 0xA0, 0x50, 0x0B, 0x60, 0xF8, 0x63, 0xA3, 0xD1, 0x38, 0x60, - 0x12, 0x61, 0xA1, 0xD3, 0xF8, 0xA3, 0x90, 0x84, 0xA2, 0xDB, 0xA3, 0xD1, 0x59, 0xD3, 0x06, 0xA3, - 0x90, 0x84, 0xA2, 0xDB, 0xA3, 0xD1, 0x59, 0xD3, 0xFE, 0xA3, 0x90, 0x84, 0xA2, 0xDB, 0xA3, 0xD1, - 0x59, 0xD3, 0xFF, 0xFF, 0x90, 0x84, 0xA2, 0xDB, 0x80, 0x60, 0x58, 0xEC, 0x80, 0x60, 0x00, 0xED, - 0x80, 0x60, 0x80, 0xEE, 0x40, 0xEC, 0x00, 0xED, 0x00, 0xEE, 0xC0, 0x60, 0x59, 0xEC, 0xC0, 0x60, - 0x07, 0xED, 0xC0, 0x60, 0x8F, 0xEE, 0xAD, 0x4F, 0xFA, 0xB4, 0xA0, 0x5D, 0x00, 0xF3, 0x28, 0xFB, - 0x40, 0x44, 0x37, 0x60, 0x7B, 0x7C, 0x20, 0xF9, 0x3F, 0x60, 0x18, 0x7C, 0x21, 0xF9, 0x3F, 0x60, - 0x2E, 0x7C, 0x22, 0xF9, 0x3F, 0x60, 0xC5, 0x7C, 0x23, 0xF9, 0x3F, 0x60, 0xD6, 0x7C, 0x24, 0xF9, - 0x40, 0x60, 0x00, 0x7C, 0x25, 0xF9, 0x40, 0x60, 0x11, 0x7C, 0x26, 0xF9, 0xD0, 0x60, 0x00, 0xE8, - 0x28, 0xE8, 0x44, 0x60, 0x01, 0xE6, 0x10, 0x67, 0x40, 0x52, 0x10, 0x60, 0x04, 0xE6, 0x08, 0x60, - 0x06, 0x63, 0xFD, 0x60, 0x0C, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, 0x10, 0x18, 0xC3, 0x83, 0xD4, 0x80, - 0xC3, 0x83, 0xF9, 0x02, 0xFA, 0xA3, 0xA3, 0xD3, 0x02, 0x60, 0x00, 0x65, 0xF9, 0xA0, 0xFC, 0xA0, - 0x0D, 0x05, 0x04, 0x05, 0x78, 0x43, 0x02, 0x61, 0x29, 0x60, 0xEA, 0x78, 0x21, 0x60, 0x00, 0x65, - 0x3F, 0x43, 0x21, 0x60, 0x00, 0x65, 0xC0, 0x60, 0x8F, 0xEE, 0x08, 0x00, 0x02, 0x60, 0x00, 0x65, - 0x00, 0x60, 0x00, 0x64, 0x18, 0xFB, 0x3F, 0x43, 0x11, 0x60, 0x10, 0xE6, 0xB7, 0x84, 0x40, 0x5F, - 0x37, 0x60, 0xF8, 0x63, 0x3F, 0x40, 0x20, 0x27, 0x06, 0x00, 0x0F, 0x60, 0xFF, 0x64, 0xBD, 0xDB, - 0x0F, 0x60, 0xF0, 0x64, 0x03, 0x00, 0x0F, 0x64, 0xBD, 0xDB, 0x00, 0x64, 0xA3, 0xDB, 0x00, 0x60, - 0x30, 0xE2, 0x00, 0x60, 0x50, 0xE2, 0x00, 0x60, 0x79, 0xE2, 0x00, 0x60, 0x90, 0xE2, 0x01, 0x60, - 0xD0, 0xE2, 0x01, 0x60, 0xF0, 0xE2, 0x01, 0x60, 0xB0, 0xE2, 0x13, 0x64, 0xCB, 0xFB, 0x01, 0x60, - 0x67, 0x64, 0x37, 0xFB, 0x00, 0x60, 0x28, 0x64, 0x36, 0xFB, 0x09, 0x60, 0x2A, 0x64, 0xB6, 0xFB, - 0x82, 0xFF, 0x92, 0xFF, 0x5C, 0x41, 0x5C, 0x46, 0x5C, 0x47, 0x00, 0xE1, 0xA3, 0x60, 0xF4, 0x63, - 0x0C, 0x60, 0x16, 0x64, 0xA0, 0xDD, 0x87, 0xFF, 0x97, 0xFF, 0x0C, 0x60, 0x02, 0x64, 0x40, 0x5A, - 0x06, 0xA4, 0x40, 0x5B, 0x5C, 0x5E, 0x16, 0x60, 0xCF, 0xF3, 0x7D, 0xFB, 0x3F, 0x40, 0x01, 0x22, - 0x03, 0x00, 0x80, 0x60, 0x37, 0x7C, 0x02, 0x00, 0x80, 0x60, 0x27, 0x7C, 0x1A, 0x60, 0x1F, 0xF9, - 0x01, 0x60, 0x06, 0x64, 0xA7, 0xFB, 0x02, 0x60, 0x7F, 0x64, 0x00, 0x60, 0x42, 0x65, 0xD4, 0x84, - 0xA8, 0xFB, 0xDC, 0x84, 0xA6, 0xFB, 0x12, 0x60, 0xD8, 0xFB, 0x40, 0x60, 0x58, 0x4E, 0x7D, 0x78, - 0xFF, 0xFF, 0x3F, 0x40, 0x40, 0x26, 0x05, 0x00, 0x1C, 0x60, 0x0D, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, - 0xA4, 0x52, 0x08, 0x60, 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, 0xA3, 0xD3, 0x02, 0xA8, - 0xD4, 0x80, 0x21, 0x02, 0x20, 0x02, 0x19, 0x60, 0x48, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x80, 0x26, - 0x1A, 0x00, 0x04, 0xA3, 0xFD, 0x60, 0x0D, 0x65, 0x5B, 0xD3, 0xBF, 0xD1, 0x14, 0x18, 0xC3, 0x83, - 0xD4, 0x80, 0xC3, 0x83, 0xF9, 0x02, 0xBF, 0xD3, 0xAD, 0x49, 0xFE, 0xA0, 0x00, 0x64, 0x0C, 0x04, - 0x08, 0xB1, 0x20, 0xBC, 0x08, 0x28, 0x18, 0xBC, 0x07, 0x7C, 0x0E, 0x60, 0xDF, 0xF9, 0x05, 0x7C, - 0x0E, 0x60, 0xDE, 0xF9, 0x01, 0x00, 0x00, 0x64, 0x0E, 0x60, 0xDD, 0xFB, 0x40, 0x60, 0x95, 0x78, - 0xFF, 0xFF, 0x5C, 0x51, 0x3F, 0x41, 0xA5, 0x4C, 0x50, 0x37, 0x0B, 0x00, 0x01, 0xB9, 0x41, 0x5F, - 0xB5, 0x60, 0x55, 0xE0, 0x05, 0x60, 0xF9, 0xF1, 0xC0, 0x67, 0x90, 0x84, 0x3F, 0x40, 0x01, 0x26, - 0xA0, 0x50, 0x06, 0x60, 0x08, 0xF3, 0x01, 0x60, 0x01, 0x65, 0x01, 0x60, 0x02, 0x7C, 0xD4, 0x80, - 0xD0, 0x80, 0x01, 0x03, 0x10, 0x02, 0x5A, 0xD1, 0x5A, 0xD3, 0x3C, 0x60, 0x00, 0x66, 0xE0, 0x87, - 0x40, 0x4A, 0x80, 0x60, 0x9E, 0x61, 0x64, 0x44, 0xC8, 0x84, 0x0C, 0x63, 0xAA, 0x46, 0x58, 0xD0, - 0xAA, 0x46, 0x59, 0xD8, 0xFB, 0x1F, 0x08, 0x60, 0x00, 0x63, 0xFA, 0x60, 0x00, 0x65, 0xBD, 0xD3, - 0xA3, 0xD3, 0x02, 0xA8, 0xD4, 0x80, 0x07, 0x02, 0x06, 0x02, 0x8C, 0x60, 0xBA, 0x61, 0x3C, 0x60, - 0x00, 0x66, 0x41, 0x4B, 0x03, 0x00, 0x46, 0x60, 0x3B, 0x78, 0xFF, 0xFF, 0x2B, 0x41, 0x8D, 0x60, - 0x02, 0x7C, 0xD1, 0x80, 0xA1, 0xD2, 0x25, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, - 0xE0, 0x87, 0x40, 0x4A, 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, - 0xBD, 0xD1, 0xEC, 0x18, 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, - 0x67, 0x44, 0xC0, 0x84, 0xE0, 0x85, 0x2C, 0x44, 0xD4, 0x80, 0x63, 0x41, 0x01, 0x06, 0x65, 0x44, - 0xC8, 0x83, 0xAA, 0x46, 0x59, 0xD1, 0x27, 0xD8, 0x5A, 0x87, 0xFC, 0x1F, 0xAA, 0x46, 0x2B, 0x41, - 0xD5, 0x01, 0x8D, 0x60, 0x02, 0x61, 0x41, 0x4B, 0x2B, 0x41, 0x8D, 0x60, 0x02, 0x7C, 0xD1, 0x80, - 0xA1, 0xD2, 0x27, 0x05, 0x59, 0xD0, 0x60, 0x45, 0x59, 0xD2, 0x44, 0x47, 0xE0, 0x87, 0x40, 0x4A, - 0x59, 0xD2, 0x59, 0x8B, 0x40, 0x4C, 0x08, 0x60, 0x00, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, 0xEC, 0x18, - 0xD4, 0x80, 0xEA, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0x04, 0xA3, 0xA3, 0xD1, - 0x5A, 0x88, 0x2C, 0x43, 0xD3, 0x80, 0xFF, 0xFF, 0x01, 0x06, 0x64, 0x43, 0xCF, 0x83, 0xAA, 0x46, - 0x60, 0xFE, 0x28, 0xD1, 0x5E, 0x88, 0x27, 0xD8, 0x5A, 0x87, 0xFB, 0x1F, 0x20, 0xFE, 0xAA, 0x46, - 0xD3, 0x01, 0x07, 0x60, 0xEC, 0xF3, 0x20, 0x60, 0x00, 0x7C, 0x08, 0xB0, 0x10, 0xB0, 0x05, 0x02, - 0x04, 0x03, 0x07, 0x60, 0xEB, 0xF9, 0x07, 0x60, 0xEA, 0xF9, 0x02, 0xB0, 0x04, 0xB0, 0x0F, 0x02, - 0x13, 0x60, 0xD2, 0xF3, 0x0C, 0x03, 0x02, 0xBC, 0xA2, 0xDB, 0x14, 0x60, 0x65, 0xF3, 0x14, 0x60, - 0x29, 0xF3, 0x02, 0xBD, 0x02, 0xBC, 0xA2, 0xDB, 0x65, 0x44, 0x14, 0x60, 0x65, 0xFB, 0x07, 0x60, - 0xEC, 0xF3, 0x31, 0x41, 0x60, 0x40, 0x20, 0x2A, 0x40, 0xB9, 0x40, 0x26, 0x03, 0x00, 0x60, 0x40, - 0x01, 0x26, 0x80, 0xB9, 0x41, 0x51, 0xFA, 0x60, 0x3A, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, - 0xFF, 0xFF, 0x03, 0x02, 0x44, 0x60, 0xAD, 0x78, 0xFF, 0xFF, 0x5B, 0xD3, 0xF8, 0x60, 0x3F, 0x65, - 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, 0x74, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xBD, 0xD3, 0xFF, 0xFF, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, 0x77, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x28, 0x60, - 0xF4, 0x61, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0xA1, 0xD3, - 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x00, 0x7F, 0xE0, 0x84, - 0xE0, 0x84, 0x59, 0xD3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0x14, 0x60, 0x7D, 0xF3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x14, 0x60, 0x80, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x83, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0xA3, 0xD3, - 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, 0x86, 0xF3, 0xE0, 0x9C, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x14, 0x60, 0x89, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x8C, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x02, 0xA3, 0xA3, 0xD3, - 0xF8, 0x60, 0x3F, 0x65, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, 0x8F, 0xF3, 0xE0, 0x9C, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0xBD, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, 0x92, 0xF3, - 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x29, 0x60, 0x2A, 0x61, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0xE0, 0x84, 0xA1, 0xD3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, - 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x59, 0xD3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA1, 0xDB, - 0x14, 0x60, 0x98, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x9B, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0x9E, 0xF3, - 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, - 0xA2, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0xE0, 0x84, 0x14, 0x60, - 0xA1, 0xF3, 0xE0, 0x9C, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, - 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0xA4, 0xF3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x14, 0x60, 0xA7, 0xF3, 0xFF, 0xFF, - 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0xA4, 0x84, 0xB0, 0x84, 0xA2, 0xDB, - 0x00, 0x60, 0x6A, 0x63, 0x29, 0x60, 0x50, 0x61, 0x28, 0x60, 0xE4, 0x64, 0x58, 0xD1, 0x59, 0xD9, - 0xFD, 0x1F, 0x14, 0x60, 0xB0, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, - 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, 0xB4, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, - 0xB6, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, 0xBD, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, - 0xA2, 0xDB, 0x14, 0x60, 0xBF, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, 0xCB, 0xF3, - 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x5A, 0xD3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, - 0xCF, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, 0xD1, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, - 0xA2, 0xDB, 0x14, 0x60, 0xD8, 0xF3, 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0x14, 0x60, 0xDA, 0xF3, - 0xFF, 0xFF, 0x18, 0xAC, 0xA2, 0xDB, 0xFA, 0x60, 0x2C, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, - 0xFF, 0xFF, 0x0E, 0x03, 0x63, 0x45, 0x2A, 0x60, 0xEA, 0x63, 0x06, 0x61, 0xA5, 0xD1, 0xDA, 0x85, - 0x64, 0x44, 0x0F, 0xB4, 0xBD, 0xDB, 0x64, 0x47, 0x0F, 0xB4, 0xCD, 0x81, 0xBD, 0xDB, 0xF6, 0x02, - 0xFA, 0x60, 0x30, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x14, 0x03, 0xBD, 0xD3, - 0x63, 0x46, 0x2B, 0x60, 0x82, 0x63, 0x15, 0x60, 0xD0, 0xFB, 0xDA, 0x85, 0xBD, 0xDB, 0x0E, 0x61, - 0xA6, 0xD1, 0xDA, 0x86, 0x64, 0x44, 0xFF, 0xB4, 0xA5, 0xDB, 0xDA, 0x85, 0x64, 0x47, 0xFF, 0xB4, - 0xCD, 0x81, 0xBD, 0xDB, 0xF5, 0x02, 0xFA, 0x60, 0x31, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, - 0xFF, 0xFF, 0x22, 0x03, 0xBD, 0xD3, 0x15, 0x60, 0xEE, 0xFB, 0x5A, 0x81, 0x15, 0x60, 0xFD, 0xFB, - 0x5A, 0x82, 0x16, 0x60, 0x0C, 0xFB, 0x5A, 0x83, 0x16, 0x60, 0x1B, 0xFB, 0x5A, 0x84, 0x0E, 0x61, - 0xBD, 0xD1, 0xBD, 0xD5, 0x64, 0x44, 0xFF, 0xB4, 0x21, 0xDB, 0x5A, 0x81, 0x64, 0x47, 0xFF, 0xB4, - 0x22, 0xDB, 0x5A, 0x82, 0x66, 0x44, 0xFF, 0xB4, 0x23, 0xDB, 0x5A, 0x83, 0x66, 0x47, 0xFF, 0xB4, - 0x24, 0xDB, 0xCD, 0x81, 0x5A, 0x84, 0xEC, 0x02, 0xFA, 0x60, 0x47, 0x65, 0x46, 0x60, 0x58, 0x4D, - 0x4E, 0x78, 0xFF, 0xFF, 0x11, 0x03, 0x63, 0x45, 0x2C, 0x60, 0x54, 0x63, 0xA5, 0xD1, 0xDA, 0x85, - 0xBD, 0xD9, 0x02, 0x61, 0xA5, 0xD1, 0xDA, 0x85, 0x64, 0x47, 0x00, 0x7E, 0xBD, 0xDB, 0x64, 0x44, - 0x00, 0x7E, 0xCD, 0x81, 0xBD, 0xDB, 0xF6, 0x02, 0xFA, 0x60, 0x2E, 0x65, 0x46, 0x60, 0x58, 0x4D, - 0x4E, 0x78, 0xFF, 0xFF, 0x1F, 0x03, 0x63, 0x46, 0xFC, 0xA3, 0xA3, 0xD3, 0x2B, 0x60, 0x02, 0x63, - 0xCC, 0x84, 0xE8, 0x84, 0xCC, 0x81, 0x00, 0x36, 0x0D, 0x00, 0x63, 0x45, 0xA6, 0xD3, 0x5A, 0xD1, - 0xDA, 0x86, 0xFF, 0xB4, 0xE0, 0x84, 0xC4, 0x84, 0x5C, 0x90, 0xBD, 0xD9, 0xFD, 0x02, 0xCD, 0x81, - 0x66, 0x42, 0xF4, 0x02, 0x66, 0x42, 0x5A, 0xD3, 0x2B, 0x60, 0x42, 0x65, 0xBD, 0xDB, 0xD7, 0x80, - 0xFF, 0xFF, 0xFC, 0x02, 0x2C, 0x60, 0x68, 0x61, 0xFA, 0x60, 0x46, 0x65, 0x46, 0x60, 0x58, 0x4D, - 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x2F, 0x65, 0x46, 0x60, - 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, 0x3E, 0x65, - 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, 0xFA, 0x60, - 0x3F, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, 0xD9, 0x81, - 0xFA, 0x60, 0x40, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, 0xA1, 0xDD, - 0xD9, 0x81, 0xFA, 0x60, 0x3B, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x01, 0x03, - 0xA1, 0xDD, 0xFA, 0x60, 0x48, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x10, 0x03, - 0xBD, 0xD3, 0x2C, 0x60, 0xC4, 0x61, 0x0E, 0xB4, 0xBD, 0xD1, 0xA1, 0xDB, 0x64, 0x47, 0x0E, 0xB4, - 0xA3, 0xD1, 0x59, 0xDB, 0x64, 0x44, 0x0E, 0xB4, 0x59, 0xDB, 0x64, 0x47, 0x0E, 0xB4, 0x59, 0xDB, - 0xFA, 0x60, 0x29, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x04, 0xA3, - 0xA3, 0xD3, 0x20, 0x60, 0x00, 0x65, 0xB4, 0x84, 0x13, 0x60, 0xA6, 0xFB, 0xFA, 0x60, 0x2A, 0x65, - 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x30, 0x03, 0x04, 0xA3, 0xBD, 0xD1, 0x14, 0x60, - 0x4A, 0xF3, 0x64, 0x41, 0x64, 0x5E, 0xA2, 0xDB, 0x64, 0x47, 0x5A, 0xD3, 0x60, 0x5C, 0x64, 0x5F, - 0xA2, 0xDB, 0x14, 0x60, 0x60, 0xF3, 0xFF, 0x60, 0xC0, 0xB5, 0x61, 0x40, 0x80, 0x27, 0x05, 0x00, - 0xE9, 0x87, 0x3F, 0xB4, 0xB4, 0x84, 0xA2, 0xDB, 0x15, 0x00, 0x65, 0x44, 0xA2, 0xDB, 0xE1, 0x80, - 0xF9, 0x87, 0x01, 0x7F, 0x14, 0x60, 0x63, 0xF3, 0x60, 0x41, 0xE0, 0x84, 0xE0, 0x84, 0xE9, 0x81, - 0xF8, 0x84, 0xE9, 0x81, 0xF8, 0x84, 0xA2, 0xDB, 0x4A, 0xD3, 0xFF, 0x60, 0x80, 0x65, 0xA4, 0x84, - 0x34, 0x94, 0xA2, 0xDB, 0xDB, 0x83, 0x14, 0x60, 0xDF, 0xFD, 0xFA, 0x60, 0x2B, 0x65, 0x46, 0x60, - 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x04, 0xA3, 0xBD, 0xD3, 0x14, 0x60, 0x4D, 0xFB, - 0xA3, 0xD3, 0x14, 0x60, 0x11, 0xFB, 0xFA, 0x60, 0x3C, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, - 0xFF, 0xFF, 0x1F, 0x03, 0xA3, 0xD3, 0xFC, 0x60, 0xFC, 0x65, 0xA4, 0x84, 0x60, 0x5C, 0x00, 0x7E, - 0xC0, 0x60, 0x00, 0xA0, 0x60, 0x43, 0x07, 0x04, 0x14, 0x60, 0x51, 0xF3, 0xFF, 0xFF, 0x03, 0x60, - 0xFF, 0xB4, 0x3C, 0x94, 0xA2, 0xDB, 0x28, 0x60, 0x2A, 0x61, 0x64, 0x44, 0x00, 0x7F, 0xC0, 0xA0, - 0x60, 0x47, 0x07, 0x04, 0x60, 0x43, 0xA1, 0xD3, 0xFF, 0xFF, 0x03, 0x60, 0xFF, 0xB4, 0x3C, 0x94, - 0xA1, 0xDB, 0xFA, 0x60, 0x49, 0x65, 0x46, 0x60, 0x58, 0x4D, 0x4E, 0x78, 0xFF, 0xFF, 0x1B, 0x03, - 0x32, 0x60, 0xAB, 0x61, 0x1C, 0x7C, 0x60, 0xFE, 0xA3, 0xD3, 0x5D, 0xD3, 0x0F, 0xB5, 0xD4, 0x84, - 0xA1, 0xDB, 0xBD, 0xD3, 0xFF, 0xFF, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x5D, 0xD3, - 0x0F, 0xB5, 0xD4, 0x84, 0xA1, 0xDB, 0x67, 0x44, 0xC0, 0x9C, 0x64, 0x40, 0x00, 0x36, 0x10, 0x00, - 0x64, 0x40, 0x0E, 0x3A, 0xE9, 0x01, 0x20, 0xFE, 0xFA, 0x60, 0x4A, 0x65, 0x46, 0x60, 0x58, 0x4D, - 0x4E, 0x78, 0xFF, 0xFF, 0x05, 0x03, 0x32, 0x60, 0xC7, 0x61, 0x0E, 0x7C, 0x60, 0xFE, 0xDC, 0x01, - 0x20, 0xFE, 0xB8, 0xFE, 0xB9, 0xFE, 0xBA, 0xFE, 0xBB, 0xFE, 0xBD, 0xFE, 0xBF, 0xFE, 0x19, 0x60, - 0x48, 0xF3, 0x12, 0x63, 0x60, 0x40, 0x01, 0x27, 0x04, 0x00, 0x0B, 0x60, 0xEA, 0x62, 0x5A, 0xDF, - 0xFE, 0x1F, 0x41, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x06, 0x63, 0xBE, 0xD3, 0xBD, 0xD1, - 0x07, 0x18, 0xD4, 0x80, 0x05, 0x18, 0x03, 0x03, 0xC3, 0x83, 0xC3, 0x83, 0xF7, 0x01, 0xDB, 0x83, - 0x00, 0xBC, 0x2D, 0x58, 0xFF, 0xFF, 0x86, 0xFD, 0xAA, 0x2D, 0x00, 0x00, 0x06, 0x00, 0x10, 0xFD, - 0x6E, 0x01, 0x00, 0x00, 0x02, 0x00, 0x14, 0xFD, 0x8E, 0x32, 0x00, 0x00, 0x0A, 0x00, 0x41, 0xFA, - 0x40, 0x2A, 0x00, 0x00, 0x22, 0x00, 0x42, 0xFA, 0x62, 0x2A, 0x00, 0x00, 0x22, 0x00, 0x43, 0xFA, - 0x84, 0x2A, 0x00, 0x00, 0x22, 0x00, 0x44, 0xFA, 0xA6, 0x2A, 0x00, 0x00, 0x22, 0x00, 0x45, 0xFA, - 0xC8, 0x2A, 0x00, 0x00, 0x22, 0x00, 0x25, 0xFD, 0x9E, 0x01, 0x00, 0x00, 0x02, 0x00, - -}; /* fw_image_3_data */ - -static const hcf_8 fw_image_4_data[] = { - 0x6C, 0x40, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x41, 0xFF, 0x33, 0xF3, 0x02, 0x11, 0x31, 0x18, 0x1E, 0x00, 0x44, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, - 0xC4, 0xE2, 0x27, 0x44, 0x20, 0x2A, 0x01, 0x00, 0xFF, 0xFF, 0x42, 0x64, 0x3A, 0xDB, 0x23, 0x00, - 0x41, 0xFF, 0xA2, 0x60, 0x45, 0x78, 0xE2, 0xFE, 0x40, 0x49, 0x02, 0x60, 0x01, 0xE1, 0x1D, 0x00, - 0x44, 0xFF, 0x1B, 0x09, 0x29, 0x44, 0x10, 0x2A, 0x04, 0x74, 0xCD, 0xE2, 0x10, 0x65, 0x0B, 0x00, - 0xA3, 0x60, 0xC1, 0x78, 0xA4, 0xE2, 0x29, 0x44, 0x20, 0x2A, 0x0D, 0x00, 0x20, 0xAC, 0xEC, 0x01, - 0xA3, 0x60, 0xC1, 0x78, 0x46, 0xFF, 0xB4, 0x84, 0x40, 0x49, 0xA1, 0xFF, 0xFF, 0xFF, 0x80, 0x3E, - 0xA3, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0x62, 0xFF, 0x08, 0xE1, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, - 0xAA, 0x60, 0xA5, 0x78, 0x4C, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAA, 0x60, 0xB3, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC4, 0xE2, 0x84, 0xFF, 0x22, 0x58, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA4, 0x60, 0x39, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0xE1, 0x01, 0xFF, 0xFF, - 0x10, 0x29, 0xFA, 0x01, 0xE4, 0xE2, 0xAA, 0x60, 0x5F, 0x78, 0xB2, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC1, 0x60, 0xFC, 0x78, 0x64, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xAA, 0x60, 0x46, 0x78, 0xAC, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x80, 0x29, 0xE2, 0x01, 0xAA, 0x60, 0xA2, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB5, 0x60, 0x5C, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB5, 0x60, 0x94, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xC9, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xFC, 0x78, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xFC, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB7, 0x60, 0x20, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB3, 0x60, 0xFF, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x83, 0x64, 0x80, 0x29, 0x09, 0xFB, 0xB5, 0x60, 0x25, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, - 0x98, 0xFF, 0x3A, 0x60, 0x18, 0x78, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x39, 0x60, 0x8F, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x60, 0x67, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0x60, 0xE1, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xB7, 0x60, 0xE9, 0x78, 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xA1, 0xFF, 0x98, 0xFF, 0x83, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC3, 0x60, 0x4D, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xB0, 0xFF, 0xB1, 0xFF, 0x40, 0xFF, 0x43, 0xFF, 0xC3, 0x60, 0x48, 0x78, 0x44, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x4D, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0x3E, 0x60, 0x8C, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x48, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xC3, 0x60, 0x47, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, - 0xCA, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0x60, 0x9A, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x42, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x85, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0xD0, 0x78, 0x24, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF2, 0x60, 0x47, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0xD0, 0x78, 0x44, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0xD0, 0x78, 0x84, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCA, 0x60, 0xD0, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x29, 0x60, 0xF2, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x20, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x3E, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0x28, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x2A, 0x60, 0x1D, 0x78, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x60, 0x87, 0x64, 0x80, 0x29, 0x09, 0xFB, 0x47, 0xFF, 0x2A, 0x60, 0x1D, 0x78, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0xF7, 0xA7, 0xFF, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x37, 0x60, 0x82, 0x78, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x60, 0x8F, 0x78, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x41, 0xFF, 0x00, 0x60, 0x03, 0xE1, 0x21, 0x46, 0x66, 0x45, 0x00, 0xF4, 0x2E, 0x44, 0x09, 0xFA, - 0x6A, 0x61, 0x7F, 0x60, 0xFE, 0x63, 0xA1, 0xFF, 0x9A, 0xFF, 0x05, 0x11, 0x0A, 0x00, 0x00, 0xF4, - 0x01, 0xF2, 0x17, 0x18, 0x7A, 0x61, 0x02, 0x25, 0x04, 0x00, 0x6C, 0x44, 0x7A, 0xDA, 0xFB, 0x1C, - 0xF6, 0x11, 0xD9, 0x81, 0x41, 0xFF, 0x02, 0x1C, 0x00, 0xF4, 0xDA, 0x82, 0x41, 0xFF, 0xC9, 0x81, - 0xCB, 0x83, 0x6C, 0x44, 0x5A, 0xDA, 0x02, 0x1C, 0x00, 0xF4, 0x81, 0xF2, 0x6C, 0x44, 0x5A, 0xDA, - 0xCB, 0x83, 0x02, 0x74, 0x02, 0x60, 0x04, 0xE1, 0x80, 0x60, 0x00, 0x61, 0x5D, 0x93, 0xB5, 0xFF, - 0x98, 0xFF, 0x26, 0x44, 0xFD, 0xB4, 0x84, 0xBC, 0x40, 0x46, 0x65, 0x46, 0x00, 0x64, 0x23, 0xFA, - 0x3F, 0xFC, 0x63, 0x47, 0x0A, 0x63, 0x0F, 0xFC, 0x00, 0xF4, 0x08, 0xFA, 0xCB, 0xFE, 0x18, 0xE1, - 0x44, 0xFF, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xE2, 0xFE, 0x03, 0x04, 0xA3, 0x60, 0x05, 0x78, - 0xFF, 0xFF, 0xE0, 0xFE, 0x03, 0x04, 0xA3, 0x60, 0x1B, 0x78, 0xFF, 0xFF, 0xE1, 0xFE, 0x07, 0x05, - 0x9F, 0xFE, 0x03, 0x04, 0x3A, 0x60, 0x77, 0x78, 0xFF, 0xFF, 0x43, 0xFF, 0xA9, 0x01, 0x95, 0xF3, - 0xFF, 0xFF, 0x80, 0xB4, 0xFF, 0xFF, 0x08, 0x24, 0x16, 0x00, 0x29, 0x44, 0x08, 0x26, 0xE1, 0x01, - 0x72, 0x44, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xB2, 0xF3, 0xE8, 0x85, - 0xFF, 0xB7, 0xE0, 0x84, 0xE0, 0x84, 0xB4, 0x85, 0x73, 0x44, 0xD4, 0x84, 0x10, 0x65, 0xD4, 0x80, - 0xFF, 0xFF, 0x01, 0x05, 0x8F, 0x00, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, 0xA1, 0xF3, - 0x7C, 0x45, 0x60, 0x40, 0x01, 0x23, 0x02, 0x65, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x7F, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x48, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x40, 0x60, 0x08, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, - 0x84, 0xE7, 0xBD, 0xFE, 0x0C, 0x60, 0x00, 0x62, 0x00, 0x60, 0x71, 0x7C, 0x00, 0x60, 0xB1, 0x65, - 0x3D, 0x60, 0x58, 0x4D, 0x0F, 0x78, 0xFF, 0xFF, 0x08, 0xE1, 0x62, 0xFF, 0xA3, 0xFF, 0xFF, 0xFF, - 0xA2, 0xFF, 0x02, 0x60, 0x08, 0xE1, 0xAE, 0x4F, 0x02, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x3F, 0x40, - 0x40, 0x26, 0x09, 0x00, 0x1C, 0x60, 0x09, 0xF3, 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x52, 0x5A, 0xD3, - 0x5A, 0xD1, 0xA0, 0x50, 0xA4, 0x50, 0xDB, 0xF3, 0xF1, 0xF1, 0x01, 0xA8, 0x07, 0xA8, 0x0A, 0x03, - 0x09, 0x03, 0x64, 0x40, 0x01, 0x26, 0x09, 0x00, 0x1B, 0x60, 0xF3, 0xF3, 0xFF, 0xFF, 0x01, 0xB4, - 0xFF, 0xFF, 0x03, 0x02, 0xAD, 0x4F, 0xFA, 0xB4, 0xA0, 0x5D, 0x19, 0x60, 0xF6, 0xF1, 0x89, 0xFF, - 0x32, 0x40, 0x80, 0x2A, 0x1E, 0x00, 0x31, 0x40, 0x01, 0x2A, 0x1B, 0x00, 0x12, 0x60, 0xFF, 0xF3, - 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x05, 0x03, 0x0E, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, - 0x10, 0x00, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x03, 0x0F, 0xF2, - 0xFF, 0xFF, 0x07, 0x1B, 0x64, 0x40, 0x01, 0x26, 0x03, 0x00, 0x08, 0x60, 0x00, 0x75, 0x01, 0x00, - 0x10, 0xFF, 0x88, 0xFF, 0xA2, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0x21, 0x46, 0x01, 0x5D, 0x5C, 0x62, - 0x03, 0xE1, 0x44, 0xFF, 0xA1, 0xFF, 0x9A, 0xFF, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x62, 0x62, - 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0xA1, 0xFF, 0x5A, 0xDC, 0x12, 0xE1, 0x02, 0x60, 0x01, 0xE1, - 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, 0x40, 0x2B, 0x03, 0x00, 0x29, 0x40, 0x20, 0x27, - 0xA3, 0x00, 0xC8, 0x74, 0xCD, 0xE2, 0x29, 0x44, 0x08, 0xBC, 0x40, 0x49, 0x44, 0xFF, 0x05, 0xE1, - 0xDB, 0xF3, 0x37, 0x60, 0xE8, 0x63, 0x03, 0xA8, 0x04, 0xA8, 0x06, 0x03, 0x05, 0x03, 0xA3, 0xD3, - 0xFF, 0xFF, 0x01, 0xA8, 0x07, 0x18, 0x0A, 0x03, 0x28, 0x40, 0x08, 0x2A, 0x07, 0x00, 0x28, 0x40, - 0x48, 0x36, 0x04, 0x00, 0xF1, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF1, 0xFB, 0x29, 0x44, 0xFF, 0x60, - 0xEF, 0x65, 0x24, 0x89, 0x40, 0x27, 0x3F, 0x00, 0x00, 0x00, 0x29, 0x40, 0x80, 0x27, 0x0B, 0x00, - 0x07, 0x61, 0xA1, 0xFF, 0xCD, 0x81, 0x04, 0x25, 0x61, 0x00, 0x87, 0x4C, 0xFB, 0x02, 0xF3, 0x60, - 0xA0, 0x64, 0x80, 0x4C, 0x07, 0x00, 0xA1, 0xFF, 0x9C, 0x4C, 0x9C, 0x4C, 0x9C, 0x4D, 0x05, 0x60, - 0xCF, 0x64, 0x80, 0x4C, 0x28, 0x40, 0x40, 0x2B, 0x05, 0x00, 0x29, 0x40, 0x20, 0x27, 0x02, 0x00, - 0x15, 0x60, 0x6F, 0x6B, 0x04, 0x25, 0x4A, 0x00, 0x30, 0x64, 0x3A, 0xDB, 0x44, 0xFF, 0x04, 0x25, - 0x45, 0x00, 0x04, 0x60, 0x00, 0x65, 0x25, 0x44, 0xB4, 0x84, 0x80, 0x4E, 0x2D, 0x41, 0x04, 0x25, - 0x3D, 0x00, 0x61, 0x4C, 0x00, 0x60, 0x8A, 0x65, 0xC5, 0x81, 0x61, 0x54, 0xA1, 0xFF, 0xFF, 0xFF, - 0x04, 0x25, 0x34, 0x00, 0x67, 0x4E, 0x07, 0x64, 0x1C, 0xFB, 0x00, 0xE1, 0x02, 0x60, 0x05, 0xE1, - 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, 0x40, 0x27, 0x0A, 0x00, 0x1C, 0x65, 0x28, 0x40, - 0xA4, 0x36, 0x14, 0x65, 0x23, 0x44, 0xC4, 0x84, 0x28, 0x40, 0x08, 0x2A, 0x0C, 0x00, 0x07, 0x00, - 0x23, 0x44, 0x1C, 0xA4, 0x29, 0x40, 0x20, 0x27, 0x02, 0x00, 0x11, 0x60, 0x0F, 0x6B, 0x3C, 0x46, - 0x98, 0xF0, 0x23, 0x44, 0xC4, 0x84, 0x06, 0x74, 0x25, 0x5C, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xB0, 0x84, 0x80, 0x4C, 0x9C, 0x4C, 0x44, 0xFF, 0x18, 0xE1, 0x0A, 0x64, 0x1E, 0x74, - 0x02, 0x60, 0x05, 0xE1, 0x40, 0x40, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0xC4, 0xE2, 0x27, 0x44, - 0x20, 0x2A, 0x06, 0x00, 0x42, 0x64, 0x3A, 0xDB, 0x67, 0x4C, 0xB1, 0x60, 0xAD, 0x78, 0xFF, 0xFF, - 0x41, 0x64, 0x3A, 0xDB, 0x62, 0xFF, 0x08, 0xE1, 0xE2, 0xFE, 0x72, 0x52, 0xA1, 0xFF, 0x98, 0xFF, - 0x80, 0x3E, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x28, 0x40, 0x08, 0x27, 0x5A, 0x01, 0x3C, 0x46, - 0x8B, 0xFF, 0x84, 0x60, 0x00, 0xE4, 0x0F, 0x60, 0x90, 0x64, 0xC9, 0x60, 0x58, 0x4F, 0x56, 0x78, - 0xFF, 0xFF, 0x3F, 0xF2, 0x00, 0x60, 0x18, 0x70, 0x18, 0x71, 0x20, 0x72, 0x00, 0xF2, 0x60, 0x53, - 0x20, 0xE1, 0xA1, 0xFF, 0x88, 0x75, 0x00, 0xE1, 0xFF, 0xFF, 0x60, 0x50, 0x75, 0x44, 0x12, 0x71, - 0x6E, 0x72, 0x81, 0x75, 0xFF, 0xFF, 0x88, 0xFF, 0xA3, 0x60, 0x21, 0x78, 0xFF, 0xFF, 0x32, 0xF3, - 0x08, 0x29, 0x0A, 0x00, 0x60, 0x40, 0x07, 0x22, 0x07, 0x00, 0xFE, 0xB4, 0x32, 0xFB, 0x27, 0x44, - 0x10, 0xBC, 0xF7, 0xB4, 0x40, 0x47, 0x43, 0xFF, 0x00, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x08, 0xE1, - 0x31, 0x40, 0x01, 0x2A, 0x06, 0x00, 0x00, 0x64, 0x33, 0xFB, 0x01, 0x60, 0x0A, 0xE1, 0x25, 0x11, - 0x24, 0x0A, 0xE5, 0xFE, 0x2D, 0x05, 0x32, 0x40, 0x80, 0x2A, 0x05, 0x00, 0x19, 0x60, 0xF2, 0xF3, - 0xFF, 0xFF, 0x01, 0x18, 0x16, 0x00, 0x9F, 0xFE, 0x14, 0x05, 0x9D, 0xFE, 0x12, 0x04, 0x31, 0x41, - 0x40, 0x2A, 0x0F, 0x00, 0x07, 0x60, 0xE9, 0xF1, 0xAE, 0x4C, 0x90, 0x80, 0x10, 0x2A, 0x09, 0x00, - 0x7F, 0xB1, 0x07, 0x60, 0xE9, 0xFB, 0x60, 0x40, 0x10, 0x2A, 0x80, 0xB9, 0x41, 0x51, 0xDF, 0xFE, - 0x19, 0xFF, 0x9F, 0xFE, 0x02, 0x04, 0x40, 0xE1, 0x08, 0x00, 0x7C, 0xE1, 0x31, 0x44, 0x01, 0x2A, - 0x04, 0x00, 0xFD, 0xE1, 0x27, 0x44, 0x10, 0x26, 0x06, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, - 0xAA, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x08, 0x26, 0xFF, 0xFF, 0xC1, 0x60, 0xA3, 0x78, - 0xFF, 0xFF, 0x48, 0xF3, 0x32, 0xF1, 0x00, 0x63, 0x64, 0x40, 0x07, 0x26, 0x03, 0x00, 0xA5, 0x60, - 0x0F, 0x78, 0xFF, 0xFF, 0x43, 0xFF, 0x31, 0x40, 0x08, 0x26, 0xF0, 0x01, 0xCD, 0xE2, 0x85, 0xE1, - 0x70, 0x41, 0xAD, 0x80, 0x71, 0x40, 0x80, 0x27, 0xE9, 0x12, 0x03, 0x03, 0xC2, 0x60, 0x15, 0x78, - 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0xC4, 0xE2, 0x32, 0xFD, 0x60, 0x40, 0x01, 0x2A, 0xDB, 0x01, - 0x00, 0x63, 0x32, 0xFD, 0x3C, 0x46, 0x3E, 0xF2, 0x2A, 0xF0, 0x27, 0x41, 0x44, 0x48, 0x20, 0xB9, - 0x01, 0xB4, 0xF7, 0xB1, 0x0A, 0x03, 0x64, 0x40, 0x08, 0x27, 0x07, 0x00, 0x0F, 0x60, 0xDA, 0x63, - 0x00, 0x64, 0x45, 0xFB, 0x46, 0xFB, 0xBD, 0xDB, 0xA3, 0xDB, 0xC8, 0x0A, 0xC7, 0x11, 0x1B, 0x60, - 0xEE, 0xF3, 0xFF, 0xFF, 0x14, 0x18, 0x28, 0x40, 0xD4, 0x36, 0x11, 0x00, 0xAC, 0x4C, 0x80, 0x2A, - 0x0E, 0x00, 0x1B, 0x60, 0xF1, 0xF3, 0xFF, 0xFF, 0x0A, 0x18, 0x1B, 0x60, 0xF2, 0xF3, 0x1B, 0x60, - 0xEF, 0xF3, 0x60, 0x45, 0xD4, 0x80, 0xDC, 0x84, 0x02, 0x03, 0xA2, 0xDB, 0xAF, 0x01, 0x00, 0x64, - 0x1B, 0x60, 0xEF, 0xFB, 0x41, 0x47, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x10, 0x26, 0x04, 0x00, - 0x01, 0x2A, 0x05, 0x00, 0x10, 0x2B, 0x03, 0x00, 0x29, 0x47, 0x20, 0xBF, 0x40, 0x49, 0x1B, 0x60, - 0xEE, 0xF3, 0xFF, 0xFF, 0x04, 0x18, 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0x05, 0xE1, - 0x01, 0x60, 0x08, 0xE1, 0x2A, 0xE8, 0x3C, 0x46, 0x0F, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2A, - 0x03, 0x00, 0xA7, 0x60, 0xE1, 0x78, 0xFF, 0xFF, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, - 0x0E, 0x00, 0x1F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x2B, 0x09, 0x00, 0x19, 0x60, 0x7B, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0xA8, 0x60, 0xEC, 0x78, 0xFF, 0xFF, 0x1F, 0xF2, - 0xC0, 0x60, 0x00, 0x65, 0xA4, 0x9C, 0x3F, 0x60, 0xCF, 0x65, 0x29, 0x44, 0xA4, 0x84, 0x30, 0x89, - 0x19, 0x60, 0x77, 0xF3, 0xFF, 0xFF, 0x19, 0x60, 0x55, 0xFB, 0x1F, 0xF2, 0x39, 0xF1, 0xE0, 0x60, - 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, 0x1F, 0xB4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, - 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, 0xB4, 0x81, 0x07, 0x60, 0xEA, 0xF1, 0xFF, 0xFF, - 0xB1, 0x8C, 0x29, 0x40, 0x40, 0x2B, 0x10, 0x00, 0x29, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x1F, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x01, 0x60, 0x09, 0x6B, - 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x14, 0x00, 0x29, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x1F, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, - 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, - 0x00, 0xE1, 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x0D, 0x00, 0xE5, 0xFE, - 0x03, 0x04, 0xAA, 0x60, 0x6F, 0x78, 0xFF, 0xFF, 0x32, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x07, 0x22, - 0x43, 0xFF, 0xA3, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x0B, 0x64, 0x3A, 0xDB, 0x01, 0x60, 0x0A, 0xE1, - 0x1C, 0x42, 0x22, 0x46, 0x13, 0xF2, 0xFF, 0x65, 0x60, 0x47, 0x2A, 0xF2, 0x40, 0x45, 0x40, 0x48, - 0x04, 0x2B, 0x13, 0x00, 0x16, 0xF2, 0x1D, 0xF2, 0x40, 0x43, 0x0F, 0xF2, 0x40, 0x4D, 0x0F, 0x64, - 0x14, 0xF0, 0x35, 0xF2, 0xA0, 0x82, 0x0F, 0xB4, 0xCA, 0x85, 0xD4, 0x80, 0x10, 0xF2, 0x01, 0x02, - 0x2B, 0xFA, 0x27, 0x44, 0x40, 0xBC, 0x40, 0x47, 0x13, 0x00, 0x17, 0xF2, 0x2C, 0xF0, 0x40, 0x43, - 0x1B, 0xF2, 0x1D, 0xFA, 0x40, 0x4D, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0xAB, 0xFC, 0x05, 0x00, - 0x28, 0x40, 0xA4, 0x36, 0x02, 0x00, 0x11, 0xF2, 0x2B, 0xFA, 0x27, 0x44, 0xBF, 0xB4, 0x40, 0x47, - 0xF0, 0xFE, 0xB0, 0x60, 0xB0, 0x78, 0xFF, 0xFF, 0x22, 0x46, 0x2C, 0xF0, 0x27, 0x44, 0xDF, 0xB4, - 0x40, 0x47, 0x64, 0x40, 0x01, 0x26, 0x09, 0x00, 0x2A, 0xF2, 0x39, 0xF0, 0x8F, 0xB0, 0x88, 0x3A, - 0x0D, 0x00, 0x64, 0x44, 0x60, 0xB0, 0x20, 0x3A, 0x09, 0x00, 0x28, 0x44, 0x04, 0x27, 0x05, 0x00, - 0xD4, 0x3A, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x11, 0x00, 0x2A, 0xF0, 0x01, 0x65, - 0x64, 0x40, 0xA4, 0x3A, 0x04, 0x65, 0x27, 0x44, 0x34, 0x87, 0x36, 0xF3, 0xFF, 0xFF, 0x60, 0x56, - 0xAD, 0xE2, 0x04, 0x64, 0x3A, 0xDB, 0x41, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x06, 0x64, - 0x3A, 0xDB, 0x22, 0x46, 0x01, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xC2, 0x60, 0x1E, 0x78, 0xFF, 0xFF, - 0x28, 0x40, 0xC4, 0x3A, 0x0C, 0x00, 0x27, 0x44, 0xFD, 0xB4, 0x40, 0x47, 0xA8, 0xE2, 0x05, 0xE1, - 0x01, 0x60, 0x08, 0xE1, 0x2A, 0xE8, 0x3C, 0x46, 0xA4, 0x60, 0xBF, 0x78, 0xFF, 0xFF, 0x3F, 0x40, - 0x01, 0x2B, 0x05, 0x00, 0x67, 0x4C, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x07, 0x60, - 0xEB, 0xF1, 0x1F, 0xF2, 0x2A, 0xE8, 0xB0, 0x81, 0x29, 0x40, 0x40, 0x2B, 0x14, 0x00, 0x61, 0x4C, - 0x29, 0x60, 0xC0, 0x65, 0x61, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, - 0x01, 0x60, 0x00, 0xE1, 0x01, 0x60, 0x09, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0xFF, 0x60, 0xF2, 0x64, - 0x64, 0x4C, 0x40, 0x43, 0x18, 0x00, 0x29, 0x47, 0x80, 0xB7, 0x34, 0x94, 0x60, 0x4C, 0x29, 0x60, - 0xC0, 0x65, 0x61, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, - 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, - 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0x28, 0x45, 0xBF, 0x60, - 0xFF, 0x64, 0x24, 0x88, 0xC4, 0xE2, 0x08, 0x64, 0x3A, 0xDB, 0x21, 0x46, 0x2A, 0x44, 0x72, 0x45, - 0x24, 0xFA, 0xB2, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, - 0xB2, 0xF9, 0x25, 0xFA, 0xB3, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB3, 0xFB, 0x28, 0xFA, 0xB4, 0xF3, - 0x02, 0x04, 0xDC, 0x84, 0xB4, 0xFB, 0x29, 0xFA, 0x24, 0x44, 0x04, 0x2A, 0x06, 0x00, 0x28, 0x40, - 0xA4, 0x36, 0x03, 0x00, 0xA6, 0x60, 0xB1, 0x78, 0xFF, 0xFF, 0x26, 0x43, 0x84, 0xBB, 0xFC, 0xB3, - 0x21, 0x46, 0x01, 0x5D, 0x0F, 0xFC, 0x5C, 0x46, 0x05, 0xFF, 0x27, 0x44, 0x01, 0x2A, 0x13, 0x00, - 0x50, 0xFE, 0x28, 0x40, 0x08, 0x3A, 0x12, 0x00, 0x2F, 0xF2, 0x30, 0xF0, 0x60, 0x43, 0x31, 0xF2, - 0x22, 0x46, 0x64, 0x41, 0x2C, 0xF0, 0x2D, 0xF0, 0xD3, 0x80, 0x2E, 0xF0, 0xD1, 0x80, 0xD0, 0x80, - 0x27, 0x44, 0x09, 0x0C, 0x03, 0x00, 0x27, 0x44, 0x06, 0x22, 0x05, 0x00, 0xB8, 0xB4, 0x40, 0x47, - 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xD4, 0x64, 0x40, 0x48, 0x0D, 0x64, 0x3A, 0xDB, 0x7C, 0x44, - 0x1B, 0x60, 0xF0, 0xFB, 0x21, 0x46, 0x1C, 0xF2, 0x00, 0xE1, 0xF0, 0xFE, 0x00, 0x63, 0x28, 0x44, - 0xA4, 0x36, 0x0A, 0x00, 0x04, 0x2B, 0x08, 0x00, 0x30, 0xF3, 0x2D, 0x45, 0xD4, 0x84, 0xCA, 0x65, - 0xD4, 0x83, 0x01, 0x64, 0x1B, 0x60, 0xF0, 0xFB, 0xD4, 0x64, 0x35, 0x00, 0x0F, 0x64, 0x3A, 0xDB, - 0x21, 0x46, 0x29, 0x40, 0x40, 0x27, 0x15, 0x00, 0x80, 0x27, 0x02, 0x00, 0xCA, 0x65, 0x01, 0x00, - 0x6A, 0x65, 0x1C, 0xF2, 0xFF, 0xFF, 0x04, 0x7F, 0x40, 0x45, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, - 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, 0x6E, 0x3A, 0x17, 0x00, 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, - 0x13, 0x00, 0x1C, 0xF2, 0x1E, 0x65, 0x40, 0x45, 0x0B, 0x36, 0x1E, 0x64, 0x0F, 0x36, 0x16, 0x64, - 0x0A, 0x36, 0x12, 0x64, 0x0E, 0x36, 0x0E, 0x64, 0x09, 0x36, 0x0E, 0x64, 0x0D, 0x36, 0x0A, 0x64, - 0x08, 0x36, 0x0A, 0x64, 0x0C, 0x36, 0x0A, 0x64, 0x40, 0x4D, 0x00, 0xE1, 0xF0, 0xFE, 0x2B, 0xF2, - 0xC4, 0x85, 0xD4, 0x83, 0xC4, 0x64, 0x40, 0x48, 0x2F, 0xF0, 0xB0, 0xF0, 0xB1, 0xF2, 0xA1, 0xFF, - 0x12, 0x74, 0xCD, 0xE2, 0x80, 0x4E, 0x12, 0x74, 0x83, 0x4C, 0x12, 0x74, 0x9A, 0xFF, 0x84, 0x4C, - 0x12, 0x74, 0x85, 0x4C, 0x12, 0x74, 0x81, 0x4C, 0x12, 0x74, 0xA1, 0xFF, 0x98, 0xFF, 0xB2, 0x60, - 0x58, 0x4F, 0x2D, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x78, 0x44, 0x03, 0xA4, 0x35, 0xFB, - 0xB2, 0x60, 0x70, 0x78, 0xFF, 0xFF, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0x28, 0x40, 0xC4, 0x36, - 0x07, 0x00, 0x1B, 0x60, 0xF0, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, - 0x27, 0x44, 0x01, 0x2A, 0x05, 0x00, 0xFE, 0xB4, 0x40, 0x47, 0xA5, 0x60, 0x7F, 0x78, 0xFF, 0xFF, - 0x16, 0x60, 0xAB, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x36, 0xC1, 0xFE, 0xA3, 0x60, 0xE7, 0x78, - 0xFF, 0xFF, 0x28, 0x40, 0xB4, 0x3A, 0x0B, 0x00, 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, - 0x40, 0x47, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xA6, 0x60, 0x3E, 0x78, 0xFF, 0xFF, 0x28, 0x44, - 0xD4, 0x36, 0x03, 0x00, 0xA7, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0xA8, 0xE2, 0x27, 0x44, 0xFB, 0xB4, - 0x40, 0x47, 0x1C, 0x42, 0x22, 0x46, 0x19, 0x60, 0xCF, 0xF3, 0xFF, 0xFF, 0x34, 0xFB, 0x2A, 0xF0, - 0xF7, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDA, 0x60, 0x40, 0x40, 0x2B, 0xC4, 0x00, 0x22, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x22, 0x26, 0x3F, 0x00, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, 0x05, 0x00, - 0xBA, 0x00, 0x04, 0x2B, 0xB8, 0x00, 0xA6, 0xF5, 0x01, 0x00, 0x07, 0xF4, 0x4B, 0xF2, 0xFF, 0xFF, - 0xDC, 0x84, 0x4B, 0xFA, 0x0C, 0x60, 0xFC, 0x62, 0x80, 0xFF, 0xC8, 0x60, 0x78, 0x44, 0x02, 0xA4, - 0xA2, 0xDB, 0x8C, 0x78, 0xFF, 0xFF, 0x82, 0xFF, 0xA6, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, - 0x07, 0x03, 0x66, 0x43, 0x22, 0x46, 0x22, 0xF2, 0x63, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, - 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x41, 0x64, 0x47, 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, - 0x60, 0x47, 0x22, 0x46, 0x3A, 0xFA, 0x64, 0x44, 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0x08, 0x60, - 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, - 0xD1, 0x60, 0x00, 0xEA, 0x80, 0x00, 0x2A, 0xF2, 0x00, 0x60, 0x7C, 0x62, 0x60, 0x40, 0x40, 0x2B, - 0x24, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, 0x5E, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, - 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, - 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, - 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0x5A, 0xD1, 0xFF, 0xFF, 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, - 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, 0x20, 0xFE, 0x00, 0x60, 0x3E, 0xF3, 0xFF, 0xFF, - 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, - 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, - 0xA0, 0x5A, 0x00, 0x60, 0x40, 0xF3, 0xFF, 0xFF, 0xA0, 0xD1, 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, - 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, - 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, - 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, - 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, - 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, - 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x0B, 0xF2, 0xFF, 0xFF, 0x7F, 0xB4, 0x0C, 0xF0, 0x04, 0x02, - 0x64, 0x46, 0x00, 0xF0, 0x04, 0x64, 0x22, 0x46, 0x03, 0xFA, 0x60, 0x41, 0x64, 0x46, 0x01, 0xF2, - 0xFC, 0xA1, 0x61, 0x45, 0xD4, 0x84, 0xFF, 0xFF, 0x08, 0x02, 0x00, 0xF0, 0x04, 0x63, 0x64, 0x46, - 0x01, 0xF2, 0x22, 0x46, 0x1A, 0xFA, 0x03, 0xFC, 0x02, 0x00, 0x22, 0x46, 0x1A, 0xFA, 0x35, 0xF2, - 0x04, 0xF8, 0xDC, 0x84, 0x35, 0xFA, 0x14, 0xF2, 0x0F, 0xB5, 0x0F, 0xB4, 0xCC, 0x84, 0x94, 0x80, - 0x04, 0x60, 0x00, 0x65, 0x2A, 0xF2, 0x01, 0x02, 0x94, 0x84, 0x2A, 0xFA, 0x95, 0xFC, 0x06, 0x00, - 0xC4, 0x3A, 0x07, 0x00, 0x27, 0x44, 0xFD, 0xB4, 0x40, 0x47, 0xA8, 0xE2, 0xA5, 0x60, 0x1C, 0x78, - 0xFF, 0xFF, 0x28, 0x44, 0x04, 0x26, 0x05, 0x00, 0x68, 0x3A, 0x03, 0x00, 0x32, 0x44, 0x00, 0x27, - 0x03, 0x00, 0xA3, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x0A, 0x64, 0x3A, 0xDB, 0xA3, 0x60, 0xF4, 0x78, - 0xFF, 0xFF, 0x0E, 0x64, 0x3A, 0xDB, 0x3C, 0x44, 0x60, 0x46, 0x1E, 0xF0, 0x40, 0x42, 0x64, 0x40, - 0x40, 0x27, 0x48, 0x00, 0x1F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x3C, 0x00, 0x80, 0x2B, - 0x0B, 0x00, 0xBF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x80, 0x60, 0x00, 0x65, 0x29, 0x44, - 0x34, 0x89, 0x80, 0x60, 0x00, 0x63, 0x05, 0x00, 0x3F, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, - 0x00, 0x63, 0x1E, 0xF2, 0x39, 0xF1, 0xC0, 0x60, 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, 0x1F, 0xB4, - 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, - 0xB4, 0x84, 0x07, 0x60, 0xEA, 0xF1, 0x3C, 0x94, 0xB0, 0x84, 0x60, 0x4C, 0x29, 0x60, 0xC0, 0x65, - 0x60, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, - 0x05, 0x60, 0x69, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, - 0x67, 0x44, 0x60, 0x4C, 0x32, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x04, 0x26, - 0xCB, 0x01, 0xBF, 0x01, 0x40, 0x60, 0x00, 0x65, 0x29, 0x44, 0x34, 0x89, 0x40, 0x60, 0x00, 0x63, - 0x9F, 0xF2, 0x1E, 0xF2, 0x39, 0xF1, 0xC0, 0x60, 0xFF, 0xB5, 0x0A, 0x18, 0x60, 0x47, 0x1F, 0xB4, - 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, - 0xB4, 0x84, 0x07, 0x60, 0xEA, 0xF1, 0x3C, 0x94, 0xB0, 0x81, 0x61, 0x4C, 0x29, 0x60, 0xC0, 0x65, - 0x61, 0x47, 0x1F, 0xB4, 0xE0, 0x84, 0xE0, 0x84, 0x44, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, - 0x01, 0x60, 0x09, 0x6B, 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, - 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x82, 0xFF, 0x2A, 0xF2, 0x10, 0x60, 0x00, 0x65, - 0xA4, 0x84, 0xB4, 0xBC, 0x1E, 0xF0, 0x40, 0x48, 0x64, 0x40, 0x40, 0x27, 0x17, 0x00, 0x1C, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x0A, 0x36, 0x06, 0x00, 0x14, 0x36, 0x07, 0x00, 0x37, 0x36, 0x08, 0x00, - 0x6E, 0x36, 0x09, 0x00, 0x70, 0x7C, 0xA0, 0x63, 0x0F, 0x00, 0x38, 0x7C, 0x50, 0x63, 0x0C, 0x00, - 0x15, 0x7C, 0x1E, 0x63, 0x09, 0x00, 0x0B, 0x7C, 0x0F, 0x63, 0x06, 0x00, 0x9C, 0xF4, 0xFF, 0x65, - 0x63, 0x47, 0xA4, 0x9C, 0xA7, 0x84, 0x23, 0x00, 0x40, 0x45, 0x43, 0x4D, 0x00, 0xE1, 0xF0, 0xFE, - 0x29, 0x40, 0x80, 0x2B, 0x03, 0x00, 0x00, 0x60, 0x6A, 0x65, 0x02, 0x00, 0x00, 0x60, 0xCA, 0x65, - 0x1F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, 0x0E, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x04, 0x27, 0x03, 0x00, 0x65, 0x44, 0xE0, 0x85, 0x12, 0x00, 0x2B, 0xF2, 0x11, 0xF0, 0xC0, 0x84, - 0xD0, 0x84, 0xC4, 0x83, 0x11, 0x00, 0x1E, 0x64, 0xC4, 0x84, 0x60, 0x45, 0x08, 0x00, 0x40, 0x45, - 0xFF, 0x60, 0xF8, 0x64, 0x40, 0x43, 0x00, 0xE1, 0xF0, 0xFE, 0x00, 0x60, 0x3C, 0x65, 0x91, 0xF4, - 0x1B, 0xF0, 0xC3, 0x84, 0xC4, 0x84, 0xC0, 0x83, 0x28, 0x44, 0xA1, 0xFF, 0x12, 0x74, 0x80, 0x4E, - 0x12, 0x74, 0x83, 0x4C, 0x9A, 0xFF, 0x12, 0x74, 0x56, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x5C, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0xA1, 0xFF, 0x98, 0xFF, 0xB2, 0x60, 0x58, 0x4F, 0x2D, 0x78, 0xFF, 0xFF, - 0xBC, 0xFF, 0xB5, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x47, 0xFF, 0x27, 0x44, 0x02, 0xBC, 0x40, 0x47, - 0x36, 0xF3, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x60, 0x56, - 0xAD, 0xE2, 0xA5, 0x60, 0x79, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x7B, 0xF3, 0x19, 0x60, 0x3B, 0xF3, - 0x60, 0x40, 0x04, 0x26, 0x0B, 0x00, 0x07, 0xB4, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, 0x29, 0x44, - 0xBF, 0x60, 0xFF, 0xB7, 0x80, 0xBF, 0x40, 0x49, 0x80, 0x67, 0x05, 0x00, 0x3F, 0x60, 0xFF, 0x65, - 0x29, 0x44, 0x24, 0x89, 0x00, 0x64, 0x16, 0x60, 0x50, 0xF1, 0xFF, 0xFF, 0x19, 0x60, 0x55, 0xF9, - 0x39, 0xF1, 0x16, 0x60, 0x3C, 0xF1, 0x64, 0x41, 0x64, 0x5E, 0x60, 0x45, 0x64, 0x47, 0x1F, 0xB4, - 0x54, 0x94, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, - 0x07, 0x60, 0xEA, 0xF1, 0xB4, 0x84, 0xB0, 0x8C, 0x29, 0x60, 0xC0, 0x7C, 0x60, 0x47, 0x1F, 0xB4, - 0xE0, 0x84, 0xE0, 0x84, 0x40, 0xD3, 0x5A, 0xD1, 0x01, 0x60, 0x00, 0xE1, 0x05, 0x60, 0x69, 0x6B, - 0x60, 0x4C, 0xB5, 0xFF, 0x64, 0x4C, 0x7C, 0x44, 0x29, 0x40, 0x80, 0x2B, 0x67, 0x44, 0x60, 0x4C, - 0x40, 0xE1, 0x01, 0x60, 0x08, 0xE1, 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x82, 0xFF, - 0x3C, 0x44, 0x60, 0x46, 0x40, 0x42, 0x13, 0x64, 0x3A, 0xDB, 0x10, 0x60, 0x00, 0x65, 0x3C, 0x46, - 0x2A, 0xF2, 0x19, 0x60, 0x3B, 0xF1, 0xA4, 0x84, 0xC4, 0xBC, 0x40, 0x48, 0x64, 0x44, 0x04, 0x26, - 0x09, 0x00, 0x02, 0x26, 0x0A, 0x00, 0x01, 0x26, 0x0B, 0x00, 0x08, 0x2A, 0x03, 0x00, 0x0B, 0x63, - 0x6E, 0x64, 0x08, 0x00, 0x15, 0x63, 0x37, 0x64, 0x05, 0x00, 0x38, 0x63, 0x14, 0x64, 0x02, 0x00, - 0x70, 0x63, 0x0A, 0x64, 0x43, 0x4D, 0x40, 0x45, 0x00, 0xE1, 0xF0, 0xFE, 0x00, 0x60, 0x1E, 0x64, - 0x1B, 0xF0, 0x11, 0xF0, 0xC0, 0x84, 0xC0, 0x84, 0x60, 0x43, 0x28, 0x44, 0xA1, 0xFF, 0x12, 0x74, - 0x80, 0x4E, 0x12, 0x74, 0x83, 0x4C, 0x9A, 0xFF, 0x12, 0x74, 0x5C, 0x62, 0x7A, 0xD4, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0xA1, 0xFF, 0x98, 0xFF, 0xB2, 0x60, 0x58, 0x4F, - 0x2D, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x78, 0x44, 0x03, 0xA4, 0x35, 0xFB, 0xB2, 0x60, - 0x70, 0x78, 0xFF, 0xFF, 0xC4, 0xE2, 0x08, 0x64, 0x3A, 0xDB, 0xA4, 0x60, 0xBF, 0x78, 0xFF, 0xFF, - 0x26, 0x43, 0x24, 0x40, 0x01, 0x2A, 0x0E, 0x00, 0x1D, 0xFF, 0x26, 0x44, 0x02, 0xBC, 0x40, 0x46, - 0x27, 0x44, 0x07, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0x30, 0xF1, 0x81, 0x00, 0xFC, 0xB3, 0x32, 0x40, 0x01, 0x2A, 0x06, 0x00, 0x0A, 0xBB, 0x0F, 0xFC, - 0xCB, 0xFE, 0xA3, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x24, 0x44, 0x04, 0x26, 0x29, 0x00, 0x0F, 0xFC, - 0x05, 0xFF, 0xDB, 0xF3, 0x28, 0x40, 0x80, 0x3A, 0x23, 0x00, 0x60, 0x40, 0x03, 0x3A, 0x20, 0x00, - 0x32, 0xF2, 0x7F, 0xF1, 0x33, 0xF2, 0xD0, 0x80, 0x80, 0xF1, 0x1A, 0x02, 0xD0, 0x80, 0x34, 0xF2, - 0x81, 0xF1, 0x16, 0x02, 0xD0, 0x80, 0x3C, 0x44, 0x13, 0x02, 0xAC, 0x86, 0xBB, 0xFE, 0x10, 0x03, - 0x2A, 0xF2, 0x21, 0x46, 0x60, 0x40, 0x80, 0x3A, 0x0B, 0x00, 0x01, 0x64, 0x31, 0xFB, 0xC0, 0xFE, - 0x00, 0x64, 0x32, 0xFB, 0x43, 0xFF, 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x82, 0xFF, - 0x30, 0xF1, 0x27, 0x44, 0x05, 0x22, 0x34, 0x00, 0xFA, 0xB4, 0x40, 0x47, 0x24, 0x44, 0x10, 0x2A, - 0x2B, 0x00, 0x28, 0x40, 0xD4, 0x3A, 0x28, 0x00, 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x29, 0x40, - 0x50, 0x2B, 0x0D, 0x00, 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x31, 0x40, 0x08, 0x2A, - 0x06, 0x00, 0x1C, 0x60, 0x11, 0xF3, 0xFF, 0xFF, 0xE0, 0x85, 0x2B, 0x44, 0x05, 0x05, 0x2B, 0x44, - 0xFF, 0xA4, 0x01, 0xA4, 0x04, 0x24, 0x00, 0x64, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, 0x64, 0x44, - 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, 0x20, 0x29, - 0x6D, 0xE2, 0xA5, 0x60, 0x7F, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x07, 0x00, - 0x02, 0x2A, 0x05, 0x00, 0xFD, 0xB4, 0x40, 0x47, 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x05, 0x64, - 0x3A, 0xDB, 0x28, 0x44, 0xA4, 0x3A, 0x07, 0x00, 0x01, 0x60, 0x02, 0x7C, 0x25, 0x44, 0x0A, 0x3A, - 0x02, 0x00, 0x01, 0x60, 0x3A, 0x7C, 0x31, 0x40, 0x08, 0x26, 0x00, 0x7C, 0x29, 0x40, 0x50, 0x2B, - 0x0D, 0x00, 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x31, 0x40, 0x08, 0x2A, 0x06, 0x00, - 0x1C, 0x60, 0x11, 0xF3, 0xFF, 0xFF, 0xE0, 0x85, 0x2B, 0x44, 0x05, 0x05, 0x2B, 0x44, 0xFF, 0xA4, - 0x01, 0xA4, 0x04, 0x24, 0x00, 0x64, 0xD0, 0x80, 0x70, 0x45, 0x02, 0x28, 0x64, 0x44, 0xC4, 0x84, - 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x28, 0x40, 0xE4, 0x36, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, - 0x01, 0x00, 0x20, 0x29, 0x6D, 0xE2, 0xA3, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x05, 0x22, - 0x09, 0x00, 0xBA, 0xB4, 0x40, 0x47, 0x3C, 0x46, 0x02, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0xA3, 0x60, - 0xF4, 0x78, 0xFF, 0xFF, 0x27, 0x44, 0x02, 0x2A, 0x06, 0x00, 0xFD, 0xB4, 0x40, 0x47, 0x06, 0x64, - 0x31, 0xFB, 0xC0, 0xFE, 0xF4, 0x01, 0xF3, 0x0A, 0x7C, 0x50, 0x6D, 0xE2, 0xF0, 0x01, 0x72, 0x45, - 0xDC, 0x84, 0xB2, 0xFB, 0x11, 0x64, 0x3A, 0xDB, 0xB3, 0xF3, 0x06, 0x04, 0xDC, 0x84, 0xB3, 0xFB, - 0xB4, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB4, 0xFB, 0xA4, 0x60, 0x01, 0x78, 0xFF, 0xFF, 0x00, 0x61, - 0x12, 0x64, 0x3A, 0xDB, 0x20, 0x60, 0x04, 0x63, 0xBD, 0xD3, 0x72, 0x45, 0x44, 0x8A, 0x02, 0x28, - 0x03, 0x00, 0xE4, 0xE2, 0xDD, 0x81, 0x04, 0x00, 0x02, 0x28, 0x02, 0x00, 0xE4, 0xE2, 0xDD, 0x81, - 0xBD, 0xD3, 0xB2, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, 0xC4, 0x84, - 0x60, 0x55, 0x2A, 0x52, 0xE4, 0xE2, 0xB2, 0xFB, 0x02, 0x24, 0x01, 0xB9, 0xBD, 0xD3, 0xB3, 0xF1, - 0x61, 0x45, 0xC0, 0x84, 0x00, 0x61, 0x02, 0x24, 0x01, 0xB9, 0xC4, 0x84, 0xB3, 0xFB, 0x02, 0x24, - 0x01, 0xB9, 0xBD, 0xD3, 0xB4, 0xF1, 0x61, 0x45, 0xC0, 0x84, 0xC4, 0x84, 0xB4, 0xFB, 0xA5, 0x60, - 0x14, 0x78, 0xFF, 0xFF, 0xB0, 0x60, 0x9E, 0x78, 0xFF, 0xFF, 0x47, 0xFF, 0x1B, 0x60, 0xEE, 0xF3, - 0xFF, 0xFF, 0x04, 0x18, 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0xC8, 0x74, 0xCD, 0xE2, - 0xAA, 0x60, 0xB9, 0x78, 0x00, 0x61, 0xA3, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0xAB, 0x60, 0xE8, 0x78, - 0xFF, 0xFF, 0x21, 0x46, 0x5C, 0x44, 0x26, 0x44, 0x02, 0x26, 0x01, 0x00, 0x3E, 0x46, 0x09, 0xF2, - 0x46, 0x41, 0x66, 0x40, 0xF3, 0x18, 0x40, 0x5E, 0xFD, 0xFB, 0x02, 0x64, 0x40, 0x46, 0x41, 0x5D, - 0x00, 0x64, 0x31, 0xFA, 0x00, 0xF2, 0x46, 0x45, 0x87, 0xFC, 0xAC, 0xE2, 0x01, 0x64, 0x33, 0xFB, - 0x32, 0x40, 0x01, 0x2A, 0x21, 0x00, 0x19, 0xF3, 0x01, 0x60, 0x1E, 0xE1, 0x1D, 0x18, 0x80, 0x64, - 0x40, 0x49, 0x00, 0xE1, 0x19, 0xFF, 0x08, 0x64, 0x2A, 0xFA, 0x5A, 0xDA, 0x2C, 0xFA, 0x5A, 0xDA, - 0x5A, 0xDA, 0xF1, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF1, 0xFB, 0x72, 0x44, 0x24, 0xFA, 0xB2, 0xF3, - 0x25, 0xFA, 0xA1, 0xFF, 0xFF, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, - 0x7C, 0x4B, 0xA3, 0x60, 0xF4, 0x78, 0xFF, 0xFF, 0x01, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0x3F, 0x60, - 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x2E, 0x44, 0x00, 0x36, 0x48, 0x00, 0x01, 0x3A, 0xE5, 0x00, - 0x88, 0xFF, 0x40, 0x67, 0x29, 0x45, 0x34, 0x89, 0x04, 0x64, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, - 0xA1, 0xFF, 0x6C, 0x45, 0x65, 0x44, 0x0F, 0xB4, 0x40, 0x45, 0x1C, 0xFA, 0x65, 0x44, 0x29, 0x41, - 0xF9, 0x81, 0x52, 0x4A, 0x71, 0x89, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x83, 0x1D, 0xFC, - 0x1B, 0xFC, 0x10, 0x60, 0x00, 0x65, 0x29, 0x44, 0x34, 0x89, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, - 0xB6, 0xF1, 0xFC, 0xA3, 0xD3, 0x80, 0x43, 0x43, 0x03, 0x04, 0xAB, 0x60, 0xDE, 0x78, 0xFF, 0xFF, - 0x09, 0x7C, 0xD3, 0x80, 0x9A, 0xFF, 0x03, 0x07, 0xAB, 0x60, 0xDE, 0x78, 0xFF, 0xFF, 0x25, 0x44, - 0x01, 0x26, 0x0F, 0xAC, 0x26, 0x60, 0x4A, 0x65, 0x44, 0xD3, 0x12, 0x65, 0x45, 0x46, 0x60, 0x47, - 0x40, 0x7F, 0x27, 0xFA, 0x8F, 0xFC, 0x18, 0x61, 0xEA, 0xF1, 0xA1, 0xFF, 0x6C, 0x44, 0xDC, 0x80, - 0xFF, 0xFF, 0x21, 0x03, 0x50, 0xFE, 0xAC, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0xC8, 0x60, 0x0B, 0x7D, - 0x08, 0x60, 0x00, 0x6B, 0xB5, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xAA, 0x74, 0xCD, 0xE2, 0x01, 0x64, - 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0x01, 0x60, 0x08, 0xE1, 0x05, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, - 0x04, 0x25, 0x8B, 0x00, 0x6C, 0x44, 0x0A, 0x36, 0x07, 0x00, 0x14, 0x36, 0x05, 0x00, 0x37, 0x36, - 0x03, 0x00, 0x6E, 0x36, 0x01, 0x00, 0x81, 0x00, 0x40, 0x45, 0x32, 0x74, 0xA1, 0xFF, 0x1C, 0xFA, - 0x40, 0x4E, 0x8C, 0x44, 0x60, 0x43, 0x1D, 0xFA, 0x01, 0xE1, 0x20, 0x64, 0x3A, 0xDB, 0x2E, 0x44, - 0x14, 0x36, 0x12, 0x00, 0x0A, 0x36, 0x0F, 0x00, 0x63, 0x45, 0xE3, 0x83, 0xE3, 0x83, 0xC7, 0x83, - 0xE3, 0x83, 0xC7, 0x83, 0xFF, 0xFF, 0x37, 0x36, 0x05, 0x00, 0x6E, 0x36, 0x04, 0x00, 0xAC, 0x60, - 0xBF, 0x78, 0xFF, 0xFF, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xEB, 0x83, 0xFF, 0xFF, 0x80, 0x27, - 0xCF, 0x83, 0x1B, 0xFC, 0x01, 0x64, 0x51, 0xFB, 0xA1, 0xFF, 0x29, 0x41, 0xF9, 0x81, 0x52, 0x4A, - 0x71, 0x89, 0x2E, 0x44, 0x27, 0xFA, 0xB6, 0xF1, 0xFC, 0xA3, 0xD3, 0x80, 0x43, 0x43, 0x03, 0x04, - 0xAB, 0x60, 0xDE, 0x78, 0xFF, 0xFF, 0x9A, 0xFF, 0x54, 0x63, 0x12, 0x64, 0x40, 0x46, 0x8F, 0xFC, - 0x18, 0x61, 0xEA, 0xF1, 0x50, 0xFE, 0x6C, 0x40, 0x9E, 0x15, 0x01, 0x60, 0x08, 0xE1, 0x80, 0xE1, - 0x00, 0x64, 0x33, 0xFB, 0x29, 0x40, 0x50, 0x2B, 0x0F, 0x00, 0x2B, 0x44, 0x70, 0x45, 0xC4, 0x84, - 0xFF, 0xFF, 0x04, 0x24, 0x00, 0xB4, 0x60, 0x50, 0x08, 0x28, 0x01, 0x00, 0x20, 0x29, 0x6D, 0xE2, - 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x01, 0x60, 0x18, 0xE1, 0x01, 0x11, 0x12, 0x00, - 0x29, 0x44, 0x20, 0xBC, 0x40, 0x49, 0x01, 0x64, 0x33, 0xFB, 0xB6, 0xFF, 0x00, 0xE1, 0x01, 0x60, - 0x1A, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x40, 0xFC, 0x11, 0x01, 0x60, 0x18, 0xE1, 0xAE, 0x4F, - 0xF7, 0xB4, 0xA0, 0x5E, 0xB5, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, - 0x7C, 0x4B, 0x35, 0xE1, 0xAC, 0xE2, 0xAA, 0x60, 0x46, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0x7F, 0xF3, - 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0x21, 0x64, 0x3A, 0xDB, 0xBD, 0x01, - 0xAC, 0xE2, 0x01, 0x64, 0x33, 0xFB, 0x01, 0xE1, 0x3F, 0x60, 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, - 0x2E, 0x44, 0x00, 0x36, 0x21, 0x00, 0x01, 0x3A, 0xF0, 0x01, 0x88, 0xFF, 0x40, 0x67, 0x29, 0x45, - 0x34, 0x89, 0xA1, 0xFF, 0x6C, 0x45, 0x65, 0x44, 0x0F, 0xB4, 0x40, 0x45, 0x65, 0x44, 0x29, 0x41, - 0xF9, 0x81, 0x52, 0x4A, 0x71, 0x89, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x83, 0x0E, 0x7C, - 0xD3, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xAB, 0x60, 0xDE, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0x6C, 0x44, - 0xDC, 0x80, 0xFF, 0xFF, 0xD2, 0x03, 0x41, 0x00, 0xC8, 0x60, 0x0B, 0x7D, 0x08, 0x60, 0x00, 0x6B, - 0xB5, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xAA, 0x74, 0xCD, 0xE2, 0x01, 0x60, 0x08, 0xE1, 0x05, 0xE1, - 0xA1, 0xFF, 0xFF, 0xFF, 0x04, 0x25, 0xC1, 0x01, 0x6C, 0x44, 0x0A, 0x36, 0x07, 0x00, 0x14, 0x36, - 0x05, 0x00, 0x37, 0x36, 0x03, 0x00, 0x6E, 0x36, 0x01, 0x00, 0xB7, 0x01, 0x40, 0x45, 0x32, 0x74, - 0xA1, 0xFF, 0x40, 0x4E, 0x8C, 0x44, 0x60, 0x43, 0x01, 0xE1, 0x20, 0x64, 0x3A, 0xDB, 0x2E, 0x44, - 0x14, 0x36, 0x09, 0x00, 0x0A, 0x36, 0x07, 0x00, 0x37, 0x36, 0x05, 0x00, 0x6E, 0x36, 0x03, 0x00, - 0xAC, 0x60, 0xBF, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x51, 0xFB, 0xA1, 0xFF, 0x29, 0x41, 0xF9, 0x81, - 0x52, 0x4A, 0x71, 0x89, 0x0E, 0x7C, 0xD3, 0x80, 0x43, 0x43, 0x03, 0x03, 0xAB, 0x60, 0xDE, 0x78, - 0xFF, 0xFF, 0x6C, 0x40, 0xFF, 0xFF, 0x01, 0x15, 0x90, 0x01, 0x12, 0x64, 0x40, 0x46, 0xEA, 0xF1, - 0x50, 0xFE, 0xA1, 0xFF, 0x12, 0x61, 0x8C, 0x44, 0xEB, 0xF0, 0x40, 0x48, 0x8C, 0x44, 0x30, 0xFB, - 0x04, 0x61, 0x50, 0xFE, 0x8C, 0x44, 0xD0, 0x80, 0x8C, 0x44, 0xD4, 0x80, 0x8C, 0x44, 0xEC, 0xF1, - 0x00, 0x65, 0xD0, 0x80, 0x28, 0x44, 0x01, 0x0C, 0x13, 0x00, 0x10, 0x65, 0x60, 0x40, 0xC4, 0x36, - 0x04, 0x00, 0xD4, 0x3A, 0x0D, 0x00, 0x27, 0x40, 0x40, 0x26, 0x30, 0x65, 0x35, 0x84, 0xA1, 0xFF, - 0x8C, 0x44, 0x47, 0xFF, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, 0x6A, 0x44, 0x40, 0x2B, 0x09, 0x15, - 0x2C, 0x60, 0xEC, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x2A, 0x64, 0x3A, 0xDB, - 0x1C, 0x01, 0x29, 0x40, 0x10, 0x26, 0x02, 0x00, 0x04, 0x74, 0xCD, 0xE2, 0x8C, 0x44, 0xB6, 0xFF, - 0xB7, 0xFF, 0x01, 0x60, 0x18, 0xE1, 0x05, 0xE1, 0x00, 0x64, 0x33, 0xFB, 0xA1, 0xFF, 0x6C, 0x44, - 0xA1, 0xFF, 0x6C, 0x44, 0x29, 0x40, 0x40, 0x2B, 0x03, 0x00, 0xB6, 0xFF, 0xA1, 0xFF, 0x6C, 0x44, - 0xA1, 0xFF, 0x02, 0x74, 0x29, 0x44, 0x40, 0x27, 0x05, 0x74, 0xCD, 0xE2, 0xA1, 0xFF, 0xCB, 0xF3, - 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, 0xE0, 0x94, 0x26, 0x44, 0x84, 0xBC, - 0x40, 0x46, 0x23, 0x64, 0x3A, 0xDB, 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, - 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0xA9, 0x60, 0x88, 0x78, 0xFF, 0xFF, 0x29, 0x64, - 0x3A, 0xDB, 0xA2, 0xFC, 0x32, 0x40, 0x01, 0x2A, 0xB9, 0x00, 0x01, 0x60, 0x1A, 0xE1, 0x23, 0x43, - 0xA1, 0xFF, 0xEC, 0x44, 0x2A, 0xFA, 0x40, 0x48, 0xA1, 0xFF, 0x7A, 0xDC, 0x7E, 0x36, 0x04, 0xA2, - 0xFC, 0x1C, 0x03, 0x1D, 0x00, 0x64, 0x3F, 0xFA, 0x2E, 0x00, 0x03, 0x2B, 0x04, 0x00, 0xA1, 0xFF, - 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x8F, 0xB0, 0x88, 0x3A, 0x03, 0x00, 0x70, 0x62, 0xA1, 0xFF, - 0x7A, 0xDC, 0x28, 0x40, 0x40, 0x2B, 0x06, 0x00, 0x72, 0x62, 0xA1, 0xFF, 0x7A, 0xDC, 0x7A, 0xDC, - 0x7A, 0xDC, 0x7A, 0xDC, 0x3F, 0xFC, 0x00, 0xF4, 0x10, 0x62, 0x6E, 0x61, 0xA1, 0xFF, 0x05, 0x1D, - 0x12, 0x1E, 0x0C, 0x00, 0x00, 0xF4, 0x7C, 0x61, 0x02, 0x62, 0x7A, 0xDC, 0x63, 0x40, 0xFD, 0x1C, - 0xF9, 0x1D, 0xFF, 0xB1, 0x08, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xB6, 0xFF, 0xB7, 0xFF, - 0xA1, 0xFF, 0x6C, 0x44, 0x5A, 0xDA, 0x98, 0xFF, 0xA1, 0xFF, 0x6C, 0x40, 0xA1, 0xFF, 0x47, 0xFF, - 0x7C, 0x44, 0x33, 0xFB, 0x26, 0x44, 0xFD, 0xB4, 0x84, 0xBC, 0x01, 0x15, 0x7F, 0xB4, 0x40, 0x46, - 0x6C, 0x40, 0xB6, 0xFF, 0xB7, 0xFF, 0xA1, 0xFF, 0x6C, 0x45, 0xA1, 0xFF, 0x7F, 0x60, 0x7F, 0x7C, - 0x6C, 0x44, 0xA0, 0x84, 0x15, 0xA7, 0x15, 0xA4, 0x21, 0x46, 0x26, 0xFA, 0x29, 0x40, 0x40, 0x2B, - 0x07, 0x00, 0xB6, 0xFF, 0x40, 0x60, 0x00, 0x65, 0xA1, 0xFF, 0x6C, 0x44, 0x1A, 0xFA, 0x09, 0x00, - 0x65, 0x44, 0x0F, 0xB4, 0x06, 0xA8, 0x80, 0x60, 0x00, 0x65, 0x08, 0x28, 0x7C, 0x45, 0x29, 0x44, - 0x34, 0x89, 0x27, 0xF0, 0x65, 0x44, 0x64, 0x5E, 0x27, 0xFA, 0x81, 0xE1, 0x01, 0x60, 0x18, 0xE1, - 0x01, 0x11, 0x12, 0x00, 0x29, 0x44, 0x20, 0xBC, 0x40, 0x49, 0x01, 0x64, 0x33, 0xFB, 0xB6, 0xFF, - 0x00, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x40, 0xFC, 0x11, 0x01, 0x60, - 0x18, 0xE1, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x00, 0x70, 0x00, 0x64, 0x40, 0x4B, 0x21, 0x46, - 0xB5, 0xFF, 0xBC, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, - 0x7C, 0x4B, 0x28, 0x44, 0x04, 0x27, 0x09, 0x00, 0xD4, 0x36, 0x04, 0x00, 0x0C, 0x22, 0x02, 0x00, - 0x0C, 0x3A, 0x03, 0x00, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, 0x2A, 0x44, 0x72, 0x45, 0x24, 0xFA, - 0xB2, 0xF3, 0x06, 0x04, 0xE4, 0xE2, 0xDC, 0x9C, 0x29, 0x40, 0x01, 0x26, 0x64, 0x44, 0xB2, 0xF9, - 0x25, 0xFA, 0xB3, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB3, 0xFB, 0x28, 0xFA, 0xB4, 0xF3, 0x02, 0x04, - 0xDC, 0x84, 0xB4, 0xFB, 0x29, 0xFA, 0xA9, 0x60, 0x88, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0x19, 0x60, - 0xA3, 0xF3, 0x12, 0x61, 0x60, 0x40, 0x01, 0x2A, 0x08, 0x00, 0x00, 0x64, 0x3B, 0xFA, 0xBF, 0x60, - 0xFF, 0x65, 0x8C, 0x44, 0x3D, 0xFA, 0xA4, 0x84, 0x01, 0x00, 0x8C, 0x44, 0xEB, 0xF0, 0x2A, 0xFA, - 0x40, 0x48, 0x04, 0x26, 0x48, 0x00, 0xA1, 0xFF, 0x8C, 0x44, 0x5A, 0xDA, 0x30, 0xFB, 0x6C, 0x44, - 0x2C, 0xFA, 0xFF, 0xFF, 0x01, 0x26, 0x2B, 0x00, 0xD0, 0x80, 0xA1, 0xFF, 0x8C, 0x44, 0x6C, 0x5C, - 0x00, 0xE1, 0xF2, 0xFE, 0x2D, 0xFA, 0xEC, 0xF3, 0xD4, 0x80, 0xD0, 0x80, 0x2E, 0xF8, 0x24, 0x44, - 0x16, 0x0C, 0x32, 0x40, 0x02, 0x2A, 0x07, 0x00, 0x28, 0x42, 0x0C, 0xB2, 0x08, 0x3A, 0x03, 0x00, - 0x10, 0xBC, 0x40, 0x44, 0x61, 0x00, 0x04, 0x0A, 0xA1, 0xFF, 0xAB, 0x60, 0xE7, 0x78, 0xFF, 0xFF, - 0x11, 0xBC, 0x40, 0x44, 0x28, 0x45, 0xBF, 0x60, 0xFF, 0x64, 0x24, 0x88, 0x55, 0x00, 0x30, 0xBC, - 0x40, 0x44, 0x22, 0xF0, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x4D, 0x00, 0x20, 0xB9, - 0x5C, 0x8E, 0xA1, 0xFF, 0x8C, 0x44, 0x2D, 0xFA, 0xDC, 0x9C, 0x6C, 0x44, 0x00, 0xE1, 0xF2, 0xFE, - 0x2E, 0xFA, 0x08, 0x28, 0x44, 0x4E, 0xDC, 0x84, 0x2E, 0x5C, 0xB0, 0x84, 0xEF, 0xB1, 0x08, 0x24, - 0x40, 0xB9, 0x41, 0x46, 0x39, 0x00, 0x23, 0x41, 0x13, 0x64, 0x51, 0x90, 0x56, 0x63, 0x03, 0x04, - 0xAB, 0x60, 0xDE, 0x78, 0xFF, 0xFF, 0x8C, 0x44, 0x04, 0x61, 0x2B, 0xFA, 0x50, 0xFE, 0x80, 0x27, - 0x00, 0x64, 0x30, 0xFB, 0x8C, 0x44, 0x2C, 0xFA, 0xD0, 0x80, 0x8C, 0x44, 0x2D, 0xFA, 0xD4, 0x80, - 0x00, 0x65, 0x8C, 0x44, 0xEC, 0xF1, 0x2E, 0xFA, 0xD0, 0x80, 0x28, 0x44, 0x03, 0x0C, 0xA0, 0x2A, - 0x0A, 0x00, 0x11, 0x00, 0x10, 0x65, 0x60, 0x40, 0xC4, 0x36, 0x04, 0x00, 0xD4, 0x3A, 0x08, 0x00, - 0x27, 0x40, 0x40, 0x26, 0x30, 0x65, 0x00, 0x64, 0x3F, 0xFA, 0x46, 0x4E, 0x35, 0x84, 0x64, 0x00, - 0x40, 0x26, 0xF9, 0x01, 0x30, 0x65, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x04, 0x61, 0xF3, 0x01, - 0xA1, 0xFF, 0xAB, 0x60, 0xA5, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xFE, 0x65, 0x23, 0x43, 0xE8, 0xA3, - 0x80, 0x27, 0xF6, 0x01, 0x20, 0xE6, 0x08, 0x60, 0x00, 0xEB, 0x28, 0x44, 0x03, 0x2B, 0x05, 0x00, - 0x6A, 0x62, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x28, 0x44, 0x8F, 0xB0, 0x88, 0x3A, 0x03, 0x00, - 0x70, 0x62, 0x7A, 0xDC, 0x28, 0x44, 0x40, 0x2B, 0x0D, 0x00, 0x72, 0x62, 0x7A, 0xDC, 0xA1, 0xFF, - 0x6C, 0x5C, 0x5A, 0xD8, 0xE4, 0x40, 0x20, 0x2B, 0x03, 0x00, 0x7A, 0xDC, 0x7A, 0xDC, 0xF8, 0xA3, - 0x25, 0xFF, 0xB0, 0xFF, 0x3F, 0xFC, 0x00, 0xF4, 0x10, 0x62, 0x10, 0x61, 0x57, 0x90, 0x6C, 0x61, - 0xA1, 0xFF, 0x09, 0x07, 0x02, 0x1D, 0x28, 0x1E, 0x1F, 0x00, 0xCB, 0x83, 0x7A, 0xDC, 0xFE, 0x1C, - 0xD9, 0x81, 0x22, 0x1E, 0x19, 0x00, 0xCB, 0x83, 0x0E, 0xA3, 0xA7, 0x84, 0xF2, 0xA3, 0x7A, 0xDC, - 0xFE, 0x1C, 0x03, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0x0A, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xA7, 0x84, - 0x7A, 0x61, 0x7A, 0xDC, 0xFE, 0x1C, 0xF9, 0x1D, 0x7C, 0xA8, 0xD9, 0x81, 0xF6, 0x03, 0xFF, 0xB1, - 0x0B, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x62, 0xA1, 0xFF, 0xFF, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, - 0x6C, 0x44, 0x5A, 0xDA, 0xCD, 0x81, 0x64, 0x40, 0x46, 0x45, 0x28, 0x44, 0x40, 0x2B, 0x0E, 0x00, - 0x64, 0x40, 0x20, 0x2B, 0x0B, 0x00, 0x01, 0xA2, 0x62, 0x44, 0x46, 0x45, 0x21, 0x46, 0x00, 0xF4, - 0x02, 0x62, 0x9A, 0xFF, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x7A, 0xDC, 0x01, 0x60, 0x18, 0xE1, - 0x24, 0x76, 0xAD, 0xE2, 0x41, 0xE1, 0x98, 0xFF, 0x00, 0xE6, 0x01, 0xF2, 0x61, 0x45, 0xD4, 0x9E, - 0x21, 0x46, 0x16, 0xFA, 0x25, 0x44, 0x06, 0xFA, 0xA1, 0xFF, 0x8C, 0x44, 0xA1, 0xFF, 0x47, 0xFF, - 0x29, 0x40, 0x50, 0x2B, 0x06, 0x00, 0x2B, 0x44, 0x1C, 0x60, 0x11, 0xFB, 0x70, 0x45, 0x44, 0x8B, - 0x01, 0x00, 0x50, 0x4B, 0x67, 0x50, 0x69, 0xE2, 0x25, 0x46, 0x01, 0xF2, 0x61, 0x45, 0xD4, 0x9E, - 0x21, 0x46, 0x16, 0xFA, 0x25, 0x45, 0x86, 0xF8, 0xFF, 0xFF, 0x6A, 0x44, 0x40, 0x2B, 0x03, 0x15, - 0xAF, 0x60, 0xF3, 0x78, 0xFF, 0xFF, 0x29, 0x40, 0x10, 0x26, 0x04, 0x00, 0x04, 0x74, 0xCD, 0xE2, - 0xA1, 0xFF, 0xFF, 0xFF, 0x6C, 0x44, 0xB6, 0xFF, 0xB7, 0xFF, 0xC4, 0xE2, 0x01, 0x60, 0x18, 0xE1, - 0x05, 0x76, 0xAD, 0xE2, 0x41, 0xE1, 0xA1, 0xFF, 0x6C, 0x45, 0xA1, 0xFF, 0x65, 0x41, 0x7F, 0x60, - 0x7F, 0x7C, 0x6C, 0x44, 0xA0, 0x84, 0x15, 0xA7, 0x15, 0xA4, 0x21, 0x46, 0x26, 0xFA, 0x22, 0x46, - 0x10, 0xFA, 0x21, 0x46, 0x29, 0x40, 0x40, 0x2B, 0x07, 0x00, 0xB6, 0xFF, 0xA1, 0xFF, 0x40, 0x60, - 0x00, 0x65, 0x6C, 0x44, 0x1A, 0xFA, 0x09, 0x00, 0x65, 0x44, 0x0F, 0xB4, 0x06, 0xA8, 0x80, 0x60, - 0x00, 0x65, 0x08, 0x28, 0x7C, 0x45, 0x29, 0x44, 0x34, 0x89, 0x00, 0x64, 0x33, 0xFB, 0x40, 0x21, - 0x00, 0x00, 0xAC, 0xE2, 0x05, 0xE1, 0x27, 0xF0, 0x65, 0x44, 0x64, 0x5E, 0x27, 0xFA, 0x28, 0x44, - 0x8F, 0xB0, 0x88, 0x3A, 0x09, 0x00, 0x39, 0xF2, 0xFF, 0xFF, 0x60, 0xB0, 0x20, 0x3A, 0x04, 0x00, - 0x24, 0x44, 0xFF, 0x60, 0xDF, 0xB4, 0x40, 0x44, 0x28, 0x40, 0x03, 0x26, 0xE2, 0x00, 0x31, 0x40, - 0x20, 0x2A, 0x03, 0x00, 0x28, 0x40, 0x50, 0x3A, 0xDC, 0x00, 0x24, 0x44, 0x20, 0x2A, 0xD9, 0x00, - 0x29, 0x40, 0x50, 0x2B, 0x0D, 0x00, 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x31, 0x40, - 0x08, 0x2A, 0x06, 0x00, 0x1C, 0x60, 0x11, 0xF3, 0xFF, 0xFF, 0xE0, 0x85, 0x2B, 0x44, 0x06, 0x05, - 0x2B, 0x44, 0xFF, 0xA4, 0x01, 0xA4, 0x04, 0x24, 0x00, 0x64, 0x40, 0x4B, 0xAC, 0x80, 0x28, 0x40, - 0xB4, 0x3A, 0x03, 0x00, 0x02, 0x03, 0x30, 0xFB, 0xBC, 0x00, 0x28, 0x44, 0xBF, 0x60, 0xFF, 0x65, - 0xA4, 0x84, 0x40, 0x48, 0x2B, 0x50, 0xA1, 0xFF, 0xFF, 0xFF, 0x01, 0x60, 0x08, 0xE1, 0x1C, 0xF2, - 0xC4, 0xE2, 0x40, 0x45, 0x28, 0x40, 0xC4, 0x36, 0x9C, 0x00, 0x29, 0x40, 0x40, 0x2B, 0x48, 0x00, - 0x32, 0x60, 0xFA, 0x63, 0x60, 0x40, 0x0B, 0x36, 0x20, 0x00, 0x0F, 0x36, 0x1B, 0x00, 0x0A, 0x36, - 0x16, 0x00, 0x0E, 0x36, 0x11, 0x00, 0x09, 0x36, 0x0C, 0x00, 0x0D, 0x36, 0x07, 0x00, 0x08, 0x36, - 0x02, 0x00, 0xA3, 0xD3, 0x15, 0x00, 0x02, 0xA3, 0xA3, 0xD3, 0x12, 0x00, 0x04, 0xA3, 0xA3, 0xD3, - 0x0F, 0x00, 0x06, 0xA3, 0xA3, 0xD3, 0x0C, 0x00, 0x08, 0xA3, 0xA3, 0xD3, 0x09, 0x00, 0x0A, 0xA3, - 0xA3, 0xD3, 0x06, 0x00, 0x0C, 0xA3, 0xA3, 0xD3, 0x03, 0x00, 0x0E, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, - 0x2C, 0x60, 0x7C, 0x63, 0x60, 0x40, 0x0C, 0x36, 0x19, 0x00, 0x08, 0x36, 0x15, 0x00, 0x0D, 0x36, - 0x11, 0x00, 0x09, 0x36, 0x0D, 0x00, 0x0E, 0x36, 0x09, 0x00, 0x0A, 0x36, 0x05, 0x00, 0x0F, 0x36, - 0x01, 0x00, 0x39, 0x00, 0x02, 0xA3, 0x37, 0x00, 0x04, 0xA3, 0x35, 0x00, 0x06, 0xA3, 0x33, 0x00, - 0x08, 0xA3, 0x31, 0x00, 0x0A, 0xA3, 0x2F, 0x00, 0x0C, 0xA3, 0x2D, 0x00, 0x0E, 0xA3, 0x2B, 0x00, - 0x33, 0x60, 0x0A, 0x63, 0x25, 0x44, 0x0A, 0x36, 0x0C, 0x00, 0x14, 0x36, 0x07, 0x00, 0x37, 0x36, - 0x02, 0x00, 0xA3, 0xD3, 0x09, 0x00, 0x02, 0xA3, 0xA3, 0xD3, 0x06, 0x00, 0x04, 0xA3, 0xA3, 0xD3, - 0x03, 0x00, 0x06, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, 0x40, 0x45, 0x0A, 0x36, 0x0D, 0x00, 0x14, 0x36, - 0x38, 0x64, 0x37, 0x3A, 0x03, 0x00, 0x04, 0x7F, 0x40, 0x45, 0x15, 0x64, 0x6E, 0x3A, 0x09, 0x00, - 0x84, 0x7F, 0x40, 0x45, 0x0B, 0x64, 0x05, 0x00, 0x29, 0x44, 0x7F, 0x60, 0xFF, 0xB4, 0x40, 0x49, - 0x70, 0x64, 0x40, 0x4D, 0x02, 0x00, 0x40, 0x45, 0x0A, 0x00, 0x2C, 0x60, 0x74, 0x63, 0x0A, 0x36, - 0x06, 0x00, 0x14, 0x36, 0x02, 0xA3, 0x37, 0x36, 0x04, 0xA3, 0x6E, 0x36, 0x06, 0xA3, 0x28, 0xA3, - 0xA3, 0xD1, 0xD8, 0xA3, 0x19, 0x60, 0x55, 0xF9, 0x39, 0xF1, 0xA3, 0xD1, 0x64, 0x41, 0x64, 0x5E, - 0x60, 0x45, 0x64, 0x47, 0x1F, 0xB4, 0x54, 0x94, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, - 0x01, 0x04, 0x1F, 0x64, 0x60, 0x47, 0xB4, 0x85, 0x29, 0x44, 0xC0, 0x60, 0x00, 0xB4, 0xB4, 0x84, - 0x1F, 0xFA, 0xB5, 0xFF, 0xA1, 0xFF, 0xCB, 0xF3, 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, - 0xDC, 0x84, 0xE0, 0x94, 0xFF, 0x60, 0xCF, 0x65, 0x29, 0x44, 0x24, 0x89, 0xA5, 0x60, 0x88, 0x78, - 0x04, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0xC4, 0xE2, 0xA1, 0xFF, 0xFF, 0x60, 0xCF, 0x65, 0x29, 0x44, - 0x24, 0x89, 0xCB, 0xF3, 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, 0xE0, 0x94, - 0x26, 0x44, 0x84, 0xBC, 0x24, 0x40, 0x0C, 0x22, 0xFD, 0xB4, 0x40, 0x46, 0x23, 0x64, 0x3A, 0xDB, - 0xAD, 0x60, 0x4F, 0x78, 0xFF, 0xFF, 0x27, 0x40, 0x26, 0x22, 0x05, 0x00, 0xF8, 0xB4, 0x40, 0x47, - 0x06, 0x64, 0x31, 0xFB, 0xC0, 0xFE, 0x29, 0x40, 0x10, 0x26, 0x02, 0x00, 0x04, 0x74, 0xCD, 0xE2, - 0x01, 0x60, 0x18, 0xE1, 0x01, 0x60, 0x18, 0xE1, 0x01, 0x11, 0x12, 0x00, 0x29, 0x44, 0x20, 0xBC, - 0x40, 0x49, 0x01, 0x64, 0x33, 0xFB, 0xB6, 0xFF, 0x00, 0xE1, 0x01, 0x60, 0x1A, 0xE1, 0xA1, 0xFF, - 0xFF, 0xFF, 0x6C, 0x40, 0xFC, 0x11, 0x01, 0x60, 0x18, 0xE1, 0xAE, 0x4F, 0xF7, 0xB4, 0xA0, 0x5E, - 0xB5, 0xFF, 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, - 0x29, 0x40, 0x50, 0x2B, 0x1B, 0x00, 0x31, 0x40, 0x08, 0x2A, 0x0D, 0x00, 0x1C, 0x60, 0x11, 0xF3, - 0xFF, 0xFF, 0xE0, 0x85, 0x2B, 0x44, 0x07, 0x04, 0x70, 0x45, 0xC4, 0x84, 0xEF, 0x60, 0xFF, 0x65, - 0x29, 0x44, 0x24, 0x89, 0x11, 0x00, 0x2B, 0x44, 0x70, 0x45, 0xC4, 0x84, 0xFF, 0xFF, 0x04, 0x24, - 0x00, 0xB4, 0x40, 0x4B, 0xEF, 0x60, 0xFF, 0x65, 0x29, 0x44, 0x24, 0x89, 0x37, 0xF3, 0x2B, 0x45, - 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x28, 0x65, 0x44, 0x60, 0x50, 0xA0, 0x4C, 0x20, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0x00, 0x60, 0x2E, 0x7C, 0x74, 0x44, 0xC0, 0x94, 0x32, 0x40, 0x02, 0x2A, 0x19, 0x00, - 0x28, 0x44, 0xA4, 0x36, 0x03, 0x00, 0x0C, 0xB4, 0x04, 0x36, 0x13, 0x00, 0x26, 0x43, 0xFD, 0xB3, - 0x04, 0xBB, 0x43, 0x46, 0x01, 0x2A, 0x03, 0x00, 0x28, 0x47, 0x40, 0xBF, 0x40, 0x48, 0x0A, 0xBB, - 0x0F, 0xFC, 0x50, 0x4B, 0x67, 0x50, 0x00, 0x64, 0x30, 0xFB, 0x05, 0xFF, 0xAD, 0x60, 0x4F, 0x78, - 0xFF, 0xFF, 0x24, 0x64, 0x3A, 0xDB, 0x28, 0x44, 0x04, 0x2A, 0x03, 0x00, 0xA3, 0x60, 0xE7, 0x78, - 0xFF, 0xFF, 0x32, 0x40, 0x04, 0x2A, 0x1C, 0x00, 0x28, 0x44, 0x0C, 0xB0, 0x08, 0x3A, 0x18, 0x00, - 0x2C, 0xF0, 0x22, 0xF0, 0x64, 0x40, 0x01, 0x26, 0x0B, 0x00, 0x64, 0x40, 0x40, 0x2B, 0x10, 0x00, - 0x8F, 0xB0, 0x88, 0x3A, 0x0D, 0x00, 0x39, 0xF2, 0xFF, 0xFF, 0x60, 0xB0, 0x20, 0x3A, 0x08, 0x00, - 0x26, 0x44, 0xFD, 0xB4, 0x04, 0xBC, 0x40, 0x46, 0xFC, 0xB4, 0x0F, 0xFA, 0x05, 0xFF, 0x01, 0x00, - 0x1D, 0xFF, 0x01, 0xE2, 0x26, 0x40, 0x10, 0x2A, 0x06, 0x00, 0x2C, 0x60, 0xEA, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0xA3, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0x03, 0x0A, 0xA3, 0x60, - 0xF4, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x51, 0xFB, 0x1B, 0x60, 0xEE, 0xF3, 0xFF, 0xFF, 0x04, 0x18, - 0xAE, 0x4F, 0x08, 0xBC, 0x00, 0x7F, 0xA0, 0x5E, 0xE1, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, - 0x54, 0x62, 0x22, 0x46, 0xA2, 0xD0, 0x16, 0x63, 0x7C, 0x41, 0x44, 0x48, 0x80, 0x36, 0x04, 0x61, - 0x28, 0x40, 0x50, 0x36, 0x04, 0x61, 0x41, 0x4E, 0x28, 0x44, 0xA4, 0x36, 0x0E, 0x63, 0x9A, 0xFF, - 0xA1, 0xFF, 0x19, 0x60, 0xA3, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x06, 0x00, 0x3D, 0xF2, - 0xAA, 0xF0, 0xFF, 0xFF, 0xB4, 0x84, 0x08, 0x36, 0x2A, 0xFA, 0x12, 0x74, 0xCD, 0xE2, 0x54, 0x62, - 0xA2, 0xD2, 0xFF, 0xFF, 0x6A, 0x40, 0x80, 0x4E, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, - 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0xFF, 0xFF, 0x01, 0x1D, 0xB2, 0x00, 0x7A, 0xD4, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x28, 0x40, 0x03, 0x2B, - 0x06, 0x00, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x70, 0x62, - 0x28, 0x44, 0x8F, 0xB0, 0x88, 0x3A, 0x02, 0x00, 0x7A, 0xD4, 0x12, 0x74, 0x28, 0x40, 0x40, 0x2B, - 0x16, 0x00, 0x72, 0x62, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD2, 0x12, 0x74, 0x80, 0x4C, 0x20, 0x2B, - 0x05, 0x00, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x22, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x10, 0x26, 0x04, 0x00, 0x26, 0x26, 0x4D, 0x00, 0x26, 0x27, 0x4B, 0x00, 0x23, 0x43, - 0xFF, 0xFF, 0x06, 0x1D, 0x2E, 0x1E, 0x00, 0x00, 0x03, 0xF0, 0x04, 0xF4, 0x64, 0x42, 0x3D, 0x00, - 0x2E, 0x40, 0x04, 0x2A, 0x27, 0x00, 0xA1, 0xFF, 0x02, 0xFE, 0x10, 0x25, 0x42, 0xFE, 0x12, 0x74, - 0x72, 0x45, 0x65, 0x4C, 0xB2, 0xF3, 0x03, 0x04, 0xE4, 0xE2, 0xDC, 0x84, 0xB2, 0xFB, 0xA1, 0xFF, - 0x12, 0x74, 0x80, 0x4C, 0x12, 0x74, 0xB3, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB3, 0xFB, 0x80, 0x4C, - 0x12, 0x74, 0xB4, 0xF3, 0x02, 0x04, 0xDC, 0x84, 0xB4, 0xFB, 0x80, 0x4C, 0x12, 0x74, 0x5C, 0x4E, - 0xF8, 0xA3, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, 0xFF, 0xB1, 0xF8, 0xA1, 0x06, 0xA4, 0x60, 0x42, - 0x0A, 0x00, 0x4E, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, 0xC8, 0x82, 0xFF, 0xB1, 0x03, 0x00, - 0x00, 0xF4, 0x81, 0xF2, 0xFF, 0xB1, 0x7A, 0xD4, 0x12, 0x74, 0xFD, 0x1C, 0xF9, 0x1D, 0xFF, 0xB1, - 0x1B, 0x1E, 0x02, 0x02, 0x00, 0xF4, 0xDA, 0x82, 0xDA, 0x82, 0xA2, 0xD2, 0xA1, 0xFF, 0x09, 0x74, - 0x60, 0x4D, 0x12, 0x00, 0x03, 0xF2, 0x9A, 0xF2, 0x04, 0xF4, 0x23, 0x43, 0xA1, 0xFF, 0x12, 0x74, - 0xA0, 0xD2, 0xFE, 0xA1, 0xCB, 0x83, 0x60, 0x4E, 0xAF, 0x83, 0x03, 0x1D, 0x05, 0x03, 0x12, 0x74, - 0xEB, 0x01, 0xA1, 0xFF, 0x12, 0x74, 0xDF, 0x01, 0x12, 0x74, 0xDA, 0x83, 0x66, 0x44, 0x22, 0x46, - 0x0C, 0xFA, 0x22, 0xF2, 0x0B, 0xFC, 0x28, 0x40, 0x40, 0x2B, 0x1A, 0x00, 0x10, 0x26, 0x04, 0x00, - 0x26, 0x26, 0x0F, 0x00, 0x26, 0x27, 0x0D, 0x00, 0x00, 0xF4, 0x02, 0x62, 0xA1, 0xFF, 0x12, 0x74, - 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, 0x7A, 0xD4, 0x12, 0x74, - 0x07, 0x00, 0xA1, 0xFF, 0x12, 0x74, 0x9C, 0x4E, 0x12, 0x74, 0x9C, 0x4C, 0x12, 0x74, 0x00, 0x00, - 0x88, 0xFF, 0xA1, 0xFF, 0xB2, 0x60, 0x58, 0x4F, 0x2D, 0x78, 0xFF, 0xFF, 0x01, 0x60, 0x18, 0xE1, - 0x78, 0x44, 0x02, 0xA4, 0x35, 0xFB, 0xCC, 0x00, 0x29, 0x44, 0xF7, 0xB4, 0x40, 0x49, 0x34, 0x64, - 0x3A, 0xDB, 0x44, 0xE1, 0xA5, 0x60, 0x54, 0x78, 0xFF, 0xFF, 0x00, 0x6B, 0xBC, 0xFF, 0x15, 0xF3, - 0xFF, 0xFF, 0xDC, 0x84, 0x15, 0xFB, 0x78, 0x5C, 0x07, 0x00, 0x78, 0x5C, 0x2F, 0x00, 0x62, 0xFF, - 0xFF, 0xFF, 0xA1, 0xFF, 0x98, 0xFF, 0x80, 0x3E, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, - 0xA1, 0xF3, 0x40, 0x60, 0x60, 0x40, 0x01, 0x23, 0x48, 0x60, 0x5E, 0x65, 0x80, 0x60, 0x00, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x80, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x01, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x64, 0x58, 0xFF, 0xFF, 0x80, 0x60, 0x01, 0xE0, - 0xD5, 0x60, 0x84, 0xE7, 0xA1, 0xF3, 0x7C, 0x45, 0x60, 0x40, 0x01, 0x23, 0x02, 0x65, 0x8C, 0x60, - 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x00, 0x60, 0x7F, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x48, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x40, 0x60, 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, - 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x64, 0x58, 0xFF, 0xFF, 0x12, 0x74, 0x6A, 0x40, 0x87, 0x4F, - 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, 0x29, 0x40, 0x40, 0x2B, 0x08, 0x00, 0x0A, 0x64, 0x89, 0xFF, - 0x60, 0x54, 0x88, 0xFF, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, 0x09, 0x00, 0x03, 0x64, 0x89, 0xFF, - 0x60, 0x54, 0x88, 0xFF, 0x87, 0x4F, 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, 0x7C, 0x44, - 0x01, 0x08, 0x01, 0x00, 0x67, 0x44, 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, 0x87, 0x4C, 0x12, 0x74, - 0x87, 0x4C, 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, 0x87, 0x4D, 0x12, 0x74, - 0x04, 0x21, 0x04, 0x00, 0xFF, 0x2A, 0x01, 0x00, 0x04, 0x00, 0x03, 0x00, 0xFF, 0x2A, 0x0D, 0x00, - 0x0C, 0x00, 0xBC, 0xFF, 0x61, 0xFF, 0x78, 0x5C, 0x57, 0x01, 0x78, 0x5C, 0x7F, 0x01, 0xB6, 0xFF, - 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x6A, 0x44, 0x2F, 0x58, 0xFF, 0xFF, - 0x04, 0x74, 0xC4, 0xE2, 0x04, 0xE1, 0x29, 0x40, 0x40, 0x2B, 0x05, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, - 0xBC, 0xFF, 0x14, 0x74, 0x01, 0x00, 0x04, 0x74, 0xC4, 0xE2, 0x04, 0xE1, 0xBC, 0xFF, 0xB5, 0xFF, - 0x47, 0xFF, 0xB6, 0xFF, 0xB7, 0xFF, 0xB4, 0xFF, 0xC8, 0x60, 0x09, 0x7D, 0x7C, 0x4B, 0x29, 0x40, - 0x40, 0x27, 0x04, 0x00, 0xC2, 0x60, 0x58, 0x4F, 0xBA, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0x29, 0x40, - 0x10, 0x26, 0x6D, 0x00, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, 0xA1, 0xF3, 0x40, 0x60, - 0x60, 0x40, 0x01, 0x23, 0x48, 0x60, 0x5E, 0x65, 0x80, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, - 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x80, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x01, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x95, 0x60, 0x84, 0xE7, 0x80, 0x60, 0x01, 0xE0, 0xD5, 0x60, 0x84, 0xE7, 0xA1, 0xF3, 0x7C, 0x45, - 0x60, 0x40, 0x01, 0x23, 0x02, 0x65, 0x8C, 0x60, 0x48, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x7F, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x48, 0x60, - 0x08, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x84, 0x60, 0x04, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x40, 0x60, 0x08, 0x6A, 0xFF, 0xFF, - 0x01, 0x16, 0xFE, 0x01, 0x65, 0x4A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x8C, 0x60, 0x48, 0x6A, - 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, - 0x00, 0x60, 0x00, 0x6A, 0xFF, 0xFF, 0x01, 0x16, 0xFE, 0x01, 0x95, 0x60, 0x84, 0xE7, 0x01, 0x60, - 0x08, 0xE1, 0xFF, 0xFF, 0xC4, 0xE2, 0x29, 0x40, 0x40, 0x2B, 0x04, 0x00, 0xC2, 0x60, 0x58, 0x4F, - 0xBA, 0x78, 0xFF, 0xFF, 0xC2, 0x60, 0x58, 0x4F, 0xC5, 0x78, 0xFF, 0xFF, 0xA1, 0xFF, 0xCB, 0xF3, - 0xC4, 0xE2, 0x89, 0xFF, 0x60, 0x54, 0x88, 0xFF, 0xDC, 0x84, 0xE0, 0x94, 0x35, 0xF7, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x61, 0x7F, 0x60, 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, - 0x25, 0x02, 0x98, 0xFE, 0x19, 0x05, 0x12, 0x60, 0xFC, 0xF5, 0x0E, 0xF2, 0x15, 0x18, 0x02, 0x18, - 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, 0x11, 0xFB, - 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x28, 0xB9, 0x10, 0x7E, - 0x00, 0x7F, 0x0E, 0xFA, 0x00, 0x67, 0x0A, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xFB, 0xA0, - 0x7F, 0x67, 0x07, 0x63, 0x03, 0x05, 0x45, 0x40, 0x00, 0x67, 0xD8, 0xFE, 0xFF, 0x27, 0x05, 0xFD, - 0x0A, 0x7E, 0x04, 0xFB, 0x61, 0x55, 0x48, 0x00, 0x28, 0xFB, 0x01, 0xF3, 0x29, 0xFB, 0x44, 0x46, - 0x40, 0x45, 0x10, 0x61, 0x7E, 0x60, 0xC0, 0x64, 0xA0, 0x80, 0x7F, 0x67, 0x02, 0x63, 0x30, 0x02, - 0xB5, 0x60, 0x58, 0x4F, 0xCE, 0x78, 0xFF, 0xFF, 0x7F, 0x67, 0x03, 0x63, 0x29, 0x02, 0x26, 0x40, - 0x01, 0x2B, 0x23, 0x00, 0x98, 0xFE, 0x18, 0x05, 0x12, 0x60, 0xFC, 0xF5, 0x0E, 0xF2, 0x14, 0x18, - 0x02, 0x18, 0x09, 0xF4, 0xFB, 0x01, 0x23, 0x44, 0x00, 0xA8, 0x08, 0x7E, 0x0A, 0x02, 0x66, 0x44, - 0x11, 0xFB, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x08, 0xB9, - 0x10, 0x7E, 0x00, 0x7F, 0x0E, 0xFA, 0x09, 0x00, 0x20, 0x44, 0xDC, 0x85, 0x0F, 0xB4, 0xFB, 0xA0, - 0x7F, 0x67, 0x07, 0x63, 0x05, 0x05, 0x45, 0x40, 0xD8, 0xFE, 0x00, 0x67, 0xD0, 0xFE, 0xD9, 0xFE, - 0xFF, 0x27, 0x05, 0xFD, 0x0B, 0x7E, 0x04, 0xFB, 0x0E, 0x60, 0xDD, 0xF3, 0xFF, 0xFF, 0x20, 0xB0, - 0x80, 0xBC, 0x08, 0x28, 0xA2, 0xDB, 0x61, 0x55, 0x66, 0x00, 0x04, 0xB5, 0x82, 0xB5, 0x25, 0x02, - 0x04, 0x03, 0x20, 0x44, 0x7F, 0xB4, 0x40, 0x40, 0xA3, 0xD3, 0x99, 0xFE, 0x04, 0x04, 0x02, 0xBC, - 0xFE, 0xB4, 0xA3, 0xDB, 0x59, 0x00, 0xDB, 0xF3, 0x20, 0x40, 0x80, 0x26, 0x55, 0x00, 0xA3, 0xD3, - 0xFF, 0xA0, 0xF8, 0xB4, 0x02, 0x02, 0xA3, 0xDB, 0x1C, 0x00, 0x04, 0xBC, 0xBF, 0xB4, 0xA3, 0xDB, - 0x08, 0xB0, 0x01, 0x64, 0x08, 0x24, 0x02, 0x64, 0x28, 0xFB, 0x20, 0x44, 0x80, 0xBC, 0x40, 0x40, - 0xD0, 0xFE, 0x42, 0x00, 0xBF, 0xB4, 0xA3, 0xDB, 0x3F, 0x00, 0x40, 0xB0, 0xFF, 0xFF, 0xFA, 0x02, - 0xF8, 0xB4, 0xA3, 0xDB, 0x08, 0xB5, 0x07, 0x7C, 0x01, 0x02, 0xDB, 0xF9, 0x20, 0x44, 0x7F, 0xB4, - 0x40, 0x40, 0x1D, 0x60, 0xBA, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB5, 0x07, 0xB5, 0x08, 0x28, - 0xC4, 0x02, 0x99, 0xFE, 0x29, 0x05, 0x20, 0x44, 0x80, 0x26, 0x26, 0x00, 0x20, 0x2A, 0x03, 0x00, - 0xDF, 0xB4, 0x40, 0x40, 0x74, 0x00, 0x40, 0x2A, 0x1F, 0x00, 0xBF, 0xB4, 0x40, 0x40, 0x09, 0x00, - 0xA8, 0xFF, 0x20, 0x44, 0x99, 0xFE, 0x02, 0x05, 0x80, 0x2A, 0x03, 0x00, 0x40, 0xBC, 0x40, 0x40, - 0x13, 0x00, 0x00, 0xF1, 0x80, 0xBC, 0x40, 0x40, 0x64, 0x44, 0xE0, 0x84, 0xE8, 0x84, 0x0A, 0x36, - 0x29, 0x01, 0x0B, 0x36, 0x59, 0x01, 0x28, 0xFB, 0x01, 0xF1, 0x29, 0xF9, 0x02, 0xF1, 0x2A, 0xF9, - 0x03, 0xF1, 0x2B, 0xF9, 0xD0, 0xFE, 0xAE, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x82, 0x3E, 0x75, 0x44, - 0x02, 0xB0, 0x01, 0xB0, 0x54, 0x02, 0xDC, 0x02, 0x04, 0xB0, 0x08, 0xB0, 0x10, 0x02, 0x2A, 0x02, - 0x40, 0x26, 0xA7, 0xFF, 0x8C, 0xFF, 0x75, 0x40, 0x80, 0x2B, 0x06, 0x00, 0xAB, 0xFF, 0x19, 0x60, - 0xF6, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xA2, 0xDB, 0x75, 0x44, 0x8D, 0xFF, 0xE5, 0x01, 0x0A, 0xF3, - 0xAA, 0xFF, 0x60, 0x40, 0x20, 0x2B, 0x02, 0x00, 0x38, 0xFF, 0x0D, 0x00, 0x01, 0x26, 0x0C, 0x00, - 0xC0, 0x60, 0x00, 0x7C, 0xA0, 0x84, 0x80, 0x3B, 0x02, 0x00, 0xC0, 0x67, 0x03, 0x00, 0x40, 0x3B, - 0x02, 0x00, 0x00, 0x67, 0x0A, 0xFB, 0xD0, 0x01, 0x19, 0x60, 0xF6, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, - 0xA2, 0xDB, 0xCA, 0x01, 0x0B, 0xF1, 0xAB, 0xFF, 0x64, 0x44, 0xFF, 0x27, 0x1F, 0x00, 0x20, 0x26, - 0x03, 0x00, 0x02, 0x60, 0x00, 0x75, 0x1A, 0x00, 0x19, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, 0x04, 0x60, - 0x00, 0x75, 0x0A, 0x64, 0xCC, 0x84, 0x19, 0xFB, 0x01, 0x60, 0x00, 0x75, 0x64, 0x40, 0x03, 0x22, - 0x0D, 0x00, 0x20, 0x44, 0x80, 0x2A, 0x03, 0x00, 0x20, 0xBC, 0x40, 0x40, 0x07, 0x00, 0xD9, 0xFE, - 0x81, 0x60, 0x0B, 0x64, 0x28, 0xFB, 0x2C, 0x44, 0x29, 0xFB, 0xD0, 0xFE, 0xA5, 0x01, 0xA9, 0xFF, - 0x77, 0x44, 0x60, 0x57, 0x40, 0x4A, 0x01, 0x2A, 0x31, 0x00, 0x24, 0x44, 0xAC, 0x86, 0x08, 0xF2, - 0x2D, 0x03, 0x25, 0x60, 0xFE, 0x65, 0xD4, 0x80, 0x0E, 0xF2, 0x02, 0x03, 0xA5, 0xD5, 0x04, 0x00, - 0x01, 0xBC, 0x0E, 0xFA, 0x09, 0xF4, 0xD1, 0xFE, 0x46, 0x44, 0x11, 0x1B, 0x32, 0x40, 0x80, 0x2A, - 0x1D, 0x00, 0x9D, 0xFE, 0x1B, 0x05, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x03, 0x03, 0x0F, 0xF2, 0xFF, 0xFF, 0x12, 0x1B, 0x08, 0x60, 0x00, 0x75, 0x0F, 0x00, 0x3F, 0xF2, - 0x48, 0x65, 0xC4, 0x84, 0x13, 0xFB, 0x66, 0x44, 0x10, 0xFB, 0x66, 0x47, 0x20, 0xBF, 0x3B, 0x42, - 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, 0x41, 0x75, 0x10, 0xBC, 0x0E, 0xFA, 0x2A, 0x44, 0x08, 0x2A, - 0x17, 0x00, 0x23, 0x44, 0x00, 0xA8, 0x5C, 0x43, 0x13, 0x03, 0x12, 0x60, 0xFC, 0xF5, 0x01, 0x00, - 0x09, 0xF4, 0x0E, 0xF2, 0x0D, 0x18, 0x08, 0xB0, 0x18, 0xAC, 0xFA, 0x03, 0x0E, 0xFA, 0x66, 0x43, - 0x11, 0xFD, 0x46, 0x43, 0x23, 0x47, 0x80, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x28, 0x75, - 0x2A, 0x44, 0x06, 0x22, 0x2D, 0x00, 0x22, 0x44, 0x00, 0xA8, 0x60, 0x46, 0x0E, 0xF2, 0x28, 0x03, - 0x10, 0xB0, 0x01, 0xBC, 0x03, 0x02, 0x00, 0x64, 0x40, 0x42, 0x22, 0x00, 0x0E, 0xFA, 0xD1, 0xFE, - 0x25, 0x60, 0xF2, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x94, 0x00, 0x46, 0x42, 0x19, 0x02, 0x22, 0x47, - 0x40, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x23, 0xF2, 0x66, 0x43, 0x00, 0xA8, 0x0E, 0xF2, - 0x08, 0x02, 0x60, 0x40, 0x02, 0x2A, 0xE4, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, 0x02, 0x75, - 0x07, 0x00, 0x60, 0x40, 0x04, 0x2A, 0xDC, 0x01, 0x12, 0xFD, 0x10, 0x64, 0x0E, 0xFA, 0x04, 0x75, - 0x2A, 0x44, 0x80, 0x2A, 0x19, 0x00, 0x21, 0x44, 0xAC, 0x86, 0x0E, 0xF2, 0x15, 0x03, 0x01, 0xBC, - 0x0E, 0xFA, 0xD1, 0xFE, 0x26, 0x60, 0x0A, 0x64, 0x40, 0x47, 0x58, 0x4F, 0x6A, 0x00, 0x46, 0x41, - 0x0B, 0x02, 0x21, 0x47, 0x10, 0xBF, 0x3B, 0x42, 0x04, 0xA2, 0xA2, 0xDB, 0x0E, 0xF2, 0x66, 0x43, - 0x08, 0xFD, 0x10, 0xBC, 0x0E, 0xFA, 0x80, 0x75, 0x2A, 0x44, 0x10, 0xB0, 0x20, 0x44, 0x18, 0x03, - 0x7F, 0xB4, 0x40, 0x40, 0x1D, 0x60, 0xBA, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, 0x20, 0xB0, 0x80, 0xB0, - 0x09, 0x03, 0x08, 0x03, 0x40, 0xBC, 0x7F, 0xB4, 0x04, 0xB0, 0xA3, 0xDB, 0x03, 0x03, 0x20, 0x44, - 0x80, 0xBC, 0x40, 0x40, 0x2A, 0x40, 0x08, 0x27, 0x03, 0x00, 0xB3, 0x60, 0xC9, 0x78, 0xFF, 0xFF, - 0x2A, 0x40, 0x08, 0x2B, 0x0F, 0x00, 0x32, 0x40, 0x80, 0x26, 0x05, 0x00, 0x19, 0x60, 0xF7, 0xF3, - 0xFF, 0xFF, 0x01, 0x1B, 0x07, 0x00, 0x19, 0x60, 0xF6, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, 0xA2, 0xDB, - 0xFF, 0xFF, 0x10, 0xFF, 0xB3, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0xE8, 0xFE, 0x14, 0x05, 0xEA, 0xFE, - 0x23, 0x05, 0xE9, 0xFE, 0x1C, 0x05, 0xE7, 0xFE, 0x09, 0x05, 0x47, 0xFF, 0x20, 0x44, 0x0F, 0x22, - 0x03, 0x00, 0xCC, 0x84, 0x40, 0x40, 0x0F, 0x22, 0xB8, 0xFE, 0xEC, 0x01, 0x23, 0x41, 0x00, 0xB9, - 0x5C, 0x4A, 0xE8, 0x02, 0x5A, 0x01, 0x24, 0x41, 0x00, 0xB9, 0x25, 0x60, 0xFE, 0x65, 0x45, 0x47, - 0xE1, 0x02, 0x58, 0x4F, 0x0E, 0x00, 0xDE, 0x02, 0x5C, 0x4A, 0x46, 0x44, 0x38, 0x01, 0x22, 0x41, - 0x00, 0xB9, 0x5C, 0x4A, 0xD7, 0x02, 0x6C, 0x01, 0x21, 0x41, 0x00, 0xB9, 0x5C, 0x4A, 0x92, 0x03, - 0xD1, 0x01, 0x27, 0xD3, 0x03, 0x00, 0x10, 0xB0, 0x09, 0xF2, 0x04, 0x03, 0xAC, 0x86, 0x0E, 0xF2, - 0xFA, 0x02, 0x08, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x0E, 0xF3, 0x0F, 0x60, 0xFE, 0x65, 0x0C, 0xF3, - 0x24, 0x86, 0x24, 0x46, 0x60, 0x40, 0xFB, 0x3B, 0x07, 0x00, 0x80, 0x26, 0x02, 0x00, 0x23, 0x46, - 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, 0x0C, 0x00, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, 0x02, 0x00, - 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x5A, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x66, 0x00, 0x04, 0x05, - 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0E, 0xFB, 0x2E, 0xF5, - 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, 0xAC, 0xFF, 0x31, 0x40, 0x01, 0x2A, - 0x08, 0x00, 0x19, 0x60, 0xF2, 0xF3, 0xFF, 0xFF, 0x04, 0x18, 0x0C, 0x64, 0x13, 0x60, 0x13, 0xFB, - 0x2D, 0xFF, 0xB3, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x8E, 0xFF, 0x0F, 0xF3, 0x0F, 0x60, 0xFE, 0x65, - 0x24, 0x86, 0x0D, 0xF3, 0x24, 0x46, 0x60, 0x40, 0xFB, 0x3B, 0x07, 0x00, 0x80, 0x26, 0x02, 0x00, - 0x23, 0x46, 0x03, 0x4C, 0x46, 0x61, 0x3A, 0x65, 0x0C, 0x00, 0x2E, 0xF3, 0x40, 0x45, 0xF8, 0x2B, - 0x02, 0x00, 0x40, 0x45, 0x03, 0x00, 0x58, 0x4F, 0x21, 0x00, 0x07, 0x02, 0x58, 0x4F, 0x2D, 0x00, - 0x04, 0x05, 0x66, 0x50, 0x65, 0x52, 0x61, 0x51, 0x09, 0x00, 0x26, 0x47, 0x00, 0xBF, 0x0F, 0xFB, - 0x2E, 0xF5, 0x05, 0xF0, 0x80, 0x60, 0x64, 0x50, 0x00, 0x72, 0x7E, 0x71, 0x8D, 0xFF, 0xAD, 0xFF, - 0x31, 0x40, 0x01, 0x2A, 0xCE, 0x01, 0x19, 0x60, 0xF2, 0xF3, 0xFF, 0xFF, 0x04, 0x18, 0x0C, 0x64, - 0x13, 0x60, 0x13, 0xFB, 0x2D, 0xFF, 0xB3, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x25, 0x44, 0xA7, 0xF1, - 0xA8, 0xF1, 0xD0, 0x80, 0xD0, 0x80, 0x07, 0x04, 0x01, 0x06, 0x05, 0x00, 0x25, 0x46, 0x01, 0xF0, - 0x03, 0x67, 0xA0, 0x85, 0x94, 0x80, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x46, 0x26, 0x41, 0x46, 0x63, - 0x01, 0xF2, 0xFF, 0xFF, 0xFF, 0xB5, 0xD5, 0x81, 0x00, 0xF2, 0x05, 0x04, 0x04, 0x63, 0x60, 0x46, - 0xF7, 0x1B, 0x42, 0xFE, 0x0D, 0x00, 0x61, 0x44, 0xC5, 0x81, 0x63, 0x45, 0xC5, 0x81, 0x9C, 0x84, - 0xDC, 0x84, 0x01, 0xF2, 0xF0, 0x85, 0xF0, 0x80, 0x65, 0x44, 0xF8, 0x85, 0xFF, 0xFF, 0x02, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xA2, 0xFF, 0x13, 0x60, 0x08, 0xF3, 0xFF, 0xFF, 0xAC, 0x86, 0x0E, 0xF2, - 0x07, 0x03, 0x00, 0xA8, 0x09, 0xF2, 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, 0x08, 0xFE, 0x17, 0x00, - 0xA9, 0xF3, 0xFF, 0xFF, 0xD8, 0xA0, 0x00, 0xB4, 0x12, 0x06, 0x09, 0x60, 0x08, 0x61, 0x41, 0x4A, - 0x7C, 0xA1, 0x0E, 0xA1, 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, 0x44, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, - 0x06, 0x03, 0x2A, 0x43, 0xB6, 0x60, 0x58, 0x4E, 0x65, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0xA3, 0xFF, - 0x2D, 0x58, 0xFF, 0xFF, 0x41, 0x4A, 0x42, 0xA1, 0x03, 0x00, 0x41, 0x4A, 0x7C, 0xA1, 0x0E, 0xA1, - 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, 0x44, 0x78, 0xFF, 0xFF, 0x07, 0x03, 0x2A, 0x43, 0xB6, 0x60, - 0x58, 0x4E, 0x65, 0x78, 0xFF, 0xFF, 0x08, 0xFE, 0x0C, 0x00, 0x13, 0x60, 0x08, 0xF3, 0xFF, 0xFF, - 0xAC, 0x86, 0x0E, 0xF2, 0x06, 0x03, 0x00, 0xA8, 0x09, 0xF2, 0xFA, 0x02, 0x01, 0x67, 0x0E, 0xFA, - 0x08, 0xFE, 0xA3, 0xFF, 0x2D, 0x58, 0xFF, 0xFF, 0xAA, 0xF3, 0x7C, 0x63, 0x00, 0xBE, 0x40, 0x45, - 0x1A, 0x03, 0x00, 0x65, 0x65, 0x44, 0xDC, 0x85, 0x84, 0xA1, 0x00, 0xF2, 0x06, 0x06, 0x01, 0xFC, - 0x00, 0xA8, 0x60, 0x46, 0xF7, 0x02, 0x40, 0x45, 0x0E, 0x00, 0xA9, 0xF3, 0x00, 0x63, 0xD4, 0x84, - 0xA9, 0xFB, 0x80, 0x60, 0x7C, 0x64, 0x01, 0xFA, 0x00, 0xF0, 0x00, 0xFC, 0xD3, 0x80, 0xAA, 0xF9, - 0x02, 0x02, 0xAB, 0xF9, 0x08, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x66, 0x44, 0x25, 0x46, 0x05, 0xFA, - 0x06, 0xFA, 0x01, 0xF0, 0x03, 0x67, 0x02, 0xFC, 0xB0, 0x84, 0x3A, 0x7E, 0x01, 0xFA, 0x12, 0x64, - 0x03, 0xFA, 0x00, 0xF0, 0x04, 0xF8, 0x00, 0x64, 0x0C, 0x61, 0x10, 0x63, 0x59, 0xDA, 0xFE, 0x1F, - 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, 0x16, 0x03, 0x00, 0x61, - 0x01, 0x00, 0xEC, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, 0xA2, 0xDA, 0xBE, 0xD2, - 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, 0xA3, 0xDA, 0x04, 0x00, 0x0A, 0xFA, - 0x60, 0x46, 0x25, 0x44, 0x09, 0xFA, 0x61, 0x46, 0xBE, 0xDA, 0x2F, 0x58, 0xFF, 0xFF, 0x25, 0x44, - 0x00, 0xA8, 0x07, 0x4B, 0x0C, 0x03, 0x58, 0x4F, 0x33, 0x00, 0x0B, 0x47, 0x26, 0x60, 0x04, 0x65, - 0x27, 0x44, 0xD4, 0x80, 0x00, 0x64, 0x01, 0x02, 0x0F, 0xFA, 0x58, 0x4F, 0xD3, 0x01, 0x70, 0x00, - 0x25, 0x43, 0xE3, 0x84, 0x7C, 0x41, 0x02, 0x04, 0xE8, 0x81, 0xEC, 0x63, 0x61, 0x46, 0xA3, 0xD2, - 0x00, 0x7C, 0x40, 0x45, 0xBF, 0xD8, 0xA3, 0xD8, 0xBE, 0xD8, 0x27, 0x42, 0x5A, 0xD3, 0x25, 0x5C, - 0x60, 0x41, 0x02, 0x1B, 0x27, 0xD9, 0x05, 0x00, 0x25, 0x46, 0x0A, 0xFA, 0x61, 0x46, 0x25, 0x44, - 0x09, 0xFA, 0x25, 0x44, 0x27, 0x43, 0x00, 0x61, 0x60, 0x46, 0x09, 0xF2, 0x08, 0xFC, 0x00, 0xA8, - 0xDD, 0x81, 0xFA, 0x02, 0xBF, 0xD1, 0x66, 0x44, 0xBE, 0xDB, 0xC1, 0x84, 0xBF, 0xDB, 0x48, 0x00, - 0x25, 0x46, 0xEC, 0x63, 0x08, 0xF2, 0x89, 0xF2, 0x1E, 0x18, 0x40, 0x47, 0xE0, 0x84, 0xE8, 0x85, - 0x02, 0x05, 0xE8, 0x83, 0x00, 0x65, 0x65, 0x46, 0xBF, 0xD2, 0x61, 0x5C, 0xCC, 0x84, 0xA2, 0xDA, - 0x25, 0x46, 0x0A, 0xF2, 0x00, 0xB9, 0x65, 0x46, 0x08, 0x24, 0xBE, 0xDA, 0x02, 0x1B, 0xA3, 0xD8, - 0x02, 0x00, 0x60, 0x46, 0x89, 0xFA, 0x00, 0xB9, 0x61, 0x46, 0x08, 0x28, 0x0A, 0xFA, 0x25, 0x46, - 0x89, 0xFC, 0x8A, 0xFC, 0x88, 0xFC, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x61, 0x28, 0x65, 0x25, 0x43, - 0xAB, 0xF3, 0xAF, 0x83, 0x00, 0xBE, 0x18, 0x03, 0x02, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xAA, 0xFD, - 0x63, 0x46, 0x65, 0x44, 0xCC, 0x85, 0x00, 0xF2, 0x07, 0x02, 0xAB, 0xF5, 0x00, 0x64, 0x00, 0xFA, - 0xDE, 0x60, 0xAF, 0x64, 0x09, 0xFB, 0x08, 0x00, 0x66, 0x43, 0x00, 0xBE, 0xDD, 0x81, 0xF1, 0x02, - 0xA9, 0xF1, 0xAB, 0xFD, 0xC1, 0x84, 0xA9, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x45, - 0x29, 0x43, 0xFC, 0xA3, 0x66, 0x44, 0xBD, 0xDB, 0x25, 0x44, 0xBD, 0xDB, 0x00, 0x64, 0xBD, 0xDB, - 0x03, 0x61, 0x0E, 0x65, 0x26, 0x60, 0x18, 0x63, 0x43, 0x49, 0xA3, 0xD3, 0x06, 0xA3, 0x00, 0xA8, - 0xCD, 0x81, 0x04, 0x02, 0xF9, 0x02, 0xB3, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x01, 0x26, 0xE6, 0x01, - 0xD4, 0x80, 0x60, 0x45, 0xE3, 0x05, 0xF6, 0xA3, 0xBD, 0xD1, 0xBD, 0xD1, 0x44, 0x47, 0x44, 0x48, - 0x44, 0x45, 0x26, 0x60, 0x5A, 0x64, 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x25, 0x60, 0xC8, 0x63, - 0x0D, 0x65, 0x00, 0x61, 0x41, 0x48, 0xA3, 0xD3, 0x06, 0xA3, 0xAC, 0x86, 0x00, 0x61, 0x09, 0x03, - 0x00, 0xF2, 0x09, 0xF0, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x64, 0x44, 0xAC, 0x86, - 0xF6, 0x01, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x65, 0x44, 0x28, 0x45, 0x45, 0x88, 0xCC, 0x85, - 0x5A, 0x87, 0xE9, 0x02, 0x00, 0x64, 0x27, 0xDA, 0x5A, 0xDA, 0x5A, 0x87, 0xA6, 0xF3, 0xA5, 0xF1, - 0x02, 0xA4, 0x60, 0x46, 0x60, 0x45, 0x00, 0x61, 0x22, 0xF2, 0xFF, 0xFF, 0xAC, 0x86, 0x00, 0xF2, - 0x04, 0x03, 0xAC, 0x86, 0x00, 0xF2, 0xDD, 0x81, 0xFC, 0x02, 0x65, 0x44, 0x02, 0xA5, 0x65, 0x46, - 0x64, 0x44, 0xCC, 0x9C, 0xFF, 0xFF, 0xF0, 0x02, 0x61, 0x44, 0x25, 0x46, 0x27, 0xDA, 0x5A, 0x87, - 0x28, 0x45, 0x45, 0x88, 0x00, 0x64, 0x27, 0xDA, 0x5A, 0x87, 0x06, 0x60, 0x40, 0x65, 0xAA, 0xF3, - 0x01, 0x61, 0xAC, 0x86, 0x00, 0xF2, 0x03, 0x03, 0xD5, 0x80, 0xDD, 0x81, 0xFA, 0x04, 0xCD, 0x84, - 0x25, 0x46, 0x27, 0xDA, 0x28, 0x45, 0xC4, 0x84, 0x5A, 0xDA, 0xDA, 0x81, 0xA9, 0xF1, 0x59, 0xD8, - 0x25, 0x60, 0xC6, 0x64, 0x18, 0x63, 0xA0, 0xD1, 0x06, 0xA4, 0x59, 0xD8, 0xFC, 0x1F, 0x00, 0x64, - 0x59, 0xDA, 0x59, 0xDA, 0x01, 0x60, 0x56, 0x64, 0x0A, 0x63, 0x58, 0xD1, 0x59, 0xD8, 0xFD, 0x1F, - 0xDB, 0xF1, 0x59, 0xD8, 0x75, 0x01, 0x07, 0x4B, 0xB6, 0x60, 0x58, 0x4F, 0xD0, 0x78, 0xFF, 0xFF, - 0x0B, 0x47, 0x58, 0x4F, 0x21, 0x00, 0x6C, 0x01, 0x07, 0x4B, 0xB6, 0x60, 0x58, 0x4F, 0xD0, 0x78, - 0xFF, 0xFF, 0x0B, 0x47, 0x27, 0x44, 0x00, 0xBE, 0x08, 0xF0, 0x15, 0x03, 0x64, 0x42, 0x4A, 0xD3, - 0x09, 0xF2, 0xDC, 0x83, 0xA2, 0xDD, 0x25, 0x43, 0x09, 0xFC, 0x63, 0x46, 0x27, 0x43, 0x0A, 0xFC, - 0x09, 0xFA, 0x08, 0xF8, 0x00, 0xA8, 0x66, 0x43, 0x03, 0x02, 0x64, 0x44, 0x58, 0xDD, 0x03, 0x00, - 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, 0x4C, 0x01, 0x27, 0x43, 0xE3, 0x81, 0xE9, 0x81, 0x03, 0x05, - 0x16, 0x03, 0x00, 0x61, 0x01, 0x00, 0xEC, 0x63, 0x61, 0x46, 0xBF, 0xD2, 0x27, 0x45, 0xDC, 0x84, - 0xA2, 0xDA, 0xA3, 0xD2, 0x25, 0x46, 0x88, 0xF8, 0x04, 0x1B, 0x25, 0x44, 0x61, 0x46, 0xBE, 0xDA, - 0x04, 0x00, 0x09, 0xFA, 0x60, 0x46, 0x25, 0x44, 0x0A, 0xFA, 0x61, 0x46, 0xA3, 0xDA, 0x2F, 0x58, - 0xFF, 0xFF, 0xA0, 0xFE, 0x07, 0x05, 0xA3, 0xFE, 0x07, 0x05, 0xA1, 0xFE, 0x48, 0x05, 0x60, 0x64, - 0x3B, 0xDB, 0x11, 0x00, 0x20, 0x58, 0xFF, 0xFF, 0x4F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x60, - 0xDF, 0xF3, 0xFF, 0xFF, 0xFB, 0xB4, 0xA2, 0xDB, 0xA0, 0x4C, 0x59, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, - 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x83, 0x3E, 0x40, 0x60, 0x0B, 0x65, - 0x2B, 0x44, 0x00, 0x63, 0xE8, 0x80, 0xF8, 0x84, 0x02, 0x24, 0x94, 0x84, 0xF3, 0x83, 0xCD, 0x81, - 0xFF, 0xFF, 0xF8, 0x02, 0xDF, 0x83, 0x2F, 0x58, 0x40, 0x4B, 0x00, 0x62, 0x01, 0x64, 0xD4, 0x80, - 0xE0, 0x84, 0x1A, 0x03, 0xD4, 0x80, 0xE0, 0x84, 0x15, 0x03, 0x61, 0x44, 0x11, 0x61, 0xE0, 0x84, - 0xCD, 0x81, 0xFD, 0x04, 0x01, 0x00, 0xE0, 0x84, 0xF2, 0x82, 0xFF, 0xFF, 0x02, 0x24, 0xC6, 0x82, - 0x02, 0x28, 0xD6, 0x82, 0xE2, 0x80, 0xCD, 0x81, 0x02, 0x28, 0x01, 0xBC, 0xF4, 0x02, 0x01, 0x2A, - 0xC6, 0x82, 0x03, 0x00, 0xE9, 0x81, 0xF2, 0x82, 0x61, 0x44, 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0x64, - 0x3B, 0xDB, 0x3C, 0x44, 0xAC, 0x80, 0xFF, 0xFF, 0xC6, 0x02, 0x89, 0xF3, 0x8A, 0xF3, 0x02, 0xA8, - 0x02, 0xA8, 0x08, 0x02, 0x00, 0x64, 0x8B, 0xFB, 0x89, 0xFB, 0x8A, 0xFB, 0x00, 0x64, 0x8C, 0xFB, - 0xCA, 0xFE, 0x2A, 0x00, 0x03, 0x02, 0x00, 0x64, 0x8A, 0xFB, 0xCA, 0xFE, 0x01, 0x64, 0x3B, 0xDB, - 0x12, 0x60, 0xE7, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x13, 0x03, 0xDB, 0xF3, 0x2A, 0xF2, - 0xFD, 0xA0, 0x60, 0x40, 0x80, 0x3A, 0x33, 0x00, 0x32, 0x02, 0x9B, 0xFE, 0x30, 0x05, 0x00, 0x64, - 0x13, 0x60, 0x0A, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xE7, 0x01, 0x8A, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, 0xFF, 0xFF, 0x06, 0x02, 0x12, 0x60, 0xE4, 0xF3, - 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x1B, 0x02, 0x86, 0xFF, 0x20, 0x40, 0x12, 0x27, 0x13, 0x00, - 0x9A, 0xFE, 0x11, 0x04, 0x9D, 0xFE, 0x0F, 0x04, 0x95, 0xF3, 0xFF, 0xFF, 0x80, 0xBC, 0x95, 0xFB, - 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x06, 0x64, 0x13, 0x60, 0x16, 0xFB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x12, 0x64, 0x3B, 0xDB, 0x84, 0xFF, 0xB7, 0x60, 0xF7, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0xFC, 0xFB, 0x46, 0x5C, 0x19, 0x60, 0xCF, 0xF3, 0x0D, 0xF2, 0x60, 0x5C, 0x64, 0x5F, 0x0D, 0xFA, - 0x11, 0x64, 0x3B, 0xDB, 0x9D, 0xFE, 0x06, 0x05, 0x08, 0x64, 0x13, 0x60, 0x16, 0xFB, 0x2D, 0xFF, - 0xFF, 0xFF, 0xA3, 0xFE, 0x07, 0xF0, 0x00, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x02, 0x23, 0xF0, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0xBF, 0x60, 0x79, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x00, 0x63, - 0x40, 0x47, 0x50, 0x36, 0x05, 0x00, 0xA4, 0x36, 0x03, 0x00, 0x80, 0x36, 0x01, 0x00, 0x01, 0x63, - 0x48, 0xFD, 0x40, 0x47, 0x08, 0x2A, 0x08, 0x00, 0x03, 0x2F, 0x06, 0x00, 0x7F, 0xF1, 0x2C, 0xF8, - 0x80, 0xF1, 0x2D, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x4A, 0xF3, 0x35, 0xFA, 0x10, 0xA4, 0x4A, 0xFB, - 0x00, 0x64, 0x15, 0xFA, 0x16, 0xFA, 0x0F, 0xFA, 0x07, 0xF0, 0xA6, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, - 0xFF, 0xFF, 0x05, 0x03, 0x66, 0x43, 0x64, 0x46, 0x11, 0xF2, 0xD9, 0xFB, 0x63, 0x46, 0x03, 0xF2, - 0x00, 0xF4, 0x01, 0xF2, 0xFC, 0xA5, 0x00, 0x7F, 0xD4, 0x84, 0x27, 0x45, 0x3C, 0x46, 0x1A, 0xFA, - 0x22, 0x63, 0x7B, 0x60, 0xFF, 0x64, 0xA4, 0x84, 0x03, 0x2B, 0x1C, 0x63, 0x2A, 0xFA, 0x8F, 0xB0, - 0x88, 0x36, 0x02, 0xA3, 0x60, 0x40, 0xA4, 0x36, 0x14, 0x63, 0x43, 0x4C, 0x18, 0xFC, 0x00, 0x7C, - 0x22, 0xF8, 0x64, 0x41, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x3A, 0xF2, 0x63, 0x46, 0xFF, 0xB4, - 0x22, 0xFA, 0x60, 0x40, 0x00, 0x36, 0x82, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x0C, 0xB0, 0x08, 0x3A, - 0xAD, 0x00, 0x60, 0x40, 0x40, 0x26, 0xAA, 0x00, 0x03, 0xF2, 0x00, 0xF4, 0xA0, 0xD2, 0xAA, 0x60, - 0xAA, 0x65, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, 0x0A, 0x02, 0xD0, 0x80, 0x00, 0x64, 0x5A, 0xD0, - 0x06, 0x02, 0xD0, 0x80, 0xF8, 0x7F, 0xD0, 0x80, 0x01, 0x03, 0x01, 0x02, 0x01, 0x61, 0x62, 0x43, - 0x46, 0x43, 0x3C, 0x46, 0x07, 0xF4, 0x3A, 0xF2, 0xFF, 0xFF, 0xA3, 0x46, 0x60, 0x40, 0x22, 0x26, - 0x64, 0x00, 0x60, 0x45, 0x63, 0x42, 0x5A, 0xD0, 0xCD, 0x81, 0x3C, 0x46, 0x1B, 0x02, 0x64, 0x44, - 0x88, 0x3A, 0x18, 0x00, 0x8E, 0x37, 0x03, 0x00, 0xC7, 0x37, 0x01, 0x00, 0x13, 0x00, 0x65, 0x44, - 0x01, 0x26, 0x7C, 0x00, 0x04, 0x26, 0x03, 0x00, 0x10, 0x26, 0x01, 0x00, 0x31, 0x00, 0xA3, 0x46, - 0x3B, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, 0x5B, 0x00, 0xA3, 0x46, 0x00, 0x7C, 0x22, 0xF8, - 0xA3, 0x46, 0x6C, 0x00, 0xA3, 0x46, 0x65, 0x44, 0x01, 0x26, 0x0B, 0x00, 0x04, 0x26, 0x03, 0x00, - 0x10, 0x26, 0x01, 0x00, 0x1D, 0x00, 0x3B, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x27, 0x48, 0x00, - 0x17, 0x00, 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x3A, 0xF2, 0x66, 0x43, 0xFF, 0xB4, 0x3C, 0x46, - 0x22, 0xF0, 0x60, 0x47, 0xB0, 0x84, 0x22, 0xFA, 0x63, 0x46, 0x3B, 0xF0, 0x60, 0x40, 0x04, 0x27, - 0x03, 0x00, 0x10, 0x27, 0x01, 0x00, 0x04, 0x00, 0x64, 0x40, 0x80, 0x27, 0x31, 0x00, 0x00, 0x00, - 0x3C, 0x46, 0x02, 0x65, 0xBF, 0x60, 0x19, 0x78, 0xFF, 0xFF, 0xCD, 0x81, 0x63, 0x42, 0x5A, 0xD0, - 0x3C, 0x46, 0x26, 0x02, 0x64, 0x44, 0x88, 0x3A, 0x23, 0x00, 0x77, 0x37, 0x37, 0x00, 0x78, 0x37, - 0x35, 0x00, 0x8E, 0x37, 0x33, 0x00, 0xC7, 0x37, 0x31, 0x00, 0x1A, 0x00, 0x19, 0x60, 0xA3, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x2A, 0x00, 0x06, 0x00, 0x19, 0x60, 0xA3, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x2A, 0xE2, 0x01, 0x3C, 0x46, 0x3E, 0xF2, 0x40, 0x60, 0x00, 0x65, 0xF0, 0x84, - 0xA4, 0x84, 0x3D, 0xFA, 0x2A, 0xF2, 0xBF, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x2A, 0xFA, 0x16, 0x00, - 0x3C, 0x46, 0x22, 0xF0, 0x80, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0xFF, 0xFF, 0x3F, 0xF2, 0x3E, 0xF0, - 0x08, 0xA4, 0x60, 0x41, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x03, 0x00, 0x04, 0x26, - 0x03, 0x00, 0x04, 0x00, 0x04, 0x2B, 0x02, 0x00, 0x61, 0x44, 0x3F, 0xFA, 0x3C, 0x46, 0x2C, 0xF2, - 0x27, 0x40, 0x01, 0x27, 0x32, 0xF2, 0xD3, 0xF1, 0x60, 0x40, 0x01, 0x26, 0x47, 0x00, 0x09, 0x60, - 0x00, 0x64, 0xD0, 0x80, 0x3F, 0xF2, 0x09, 0x06, 0x2C, 0x45, 0xC4, 0x84, 0xD0, 0x80, 0x40, 0x4A, - 0x34, 0x06, 0x60, 0x43, 0x64, 0x44, 0x54, 0x88, 0x17, 0x00, 0x60, 0x45, 0x16, 0x60, 0xC8, 0xF3, - 0xDA, 0xF3, 0x00, 0xBC, 0x60, 0x47, 0xEC, 0xA0, 0x28, 0x03, 0x27, 0x07, 0x2C, 0x44, 0xC4, 0x81, - 0x02, 0x60, 0x1C, 0x65, 0x45, 0x4A, 0xD5, 0x80, 0x2C, 0x45, 0x1F, 0x06, 0x27, 0x40, 0x04, 0x27, - 0x25, 0x00, 0x2A, 0x43, 0xD7, 0x85, 0x45, 0x48, 0xD4, 0xF1, 0x0F, 0xF2, 0xD3, 0x80, 0x01, 0x65, - 0x01, 0x07, 0x00, 0x65, 0xB4, 0x84, 0x0F, 0xFA, 0x00, 0x63, 0x3F, 0xF2, 0x28, 0x45, 0x60, 0x41, - 0xD4, 0x84, 0xDF, 0x83, 0xFC, 0x07, 0x14, 0xFC, 0x17, 0xFA, 0x04, 0x60, 0x00, 0x64, 0x27, 0x45, - 0xB4, 0x84, 0x2A, 0xFA, 0x28, 0x43, 0x16, 0xFC, 0x0D, 0x00, 0x3F, 0xF2, 0x2C, 0x45, 0xD4, 0xF1, - 0xC4, 0x81, 0xD1, 0x80, 0x0F, 0xF2, 0x01, 0x06, 0x01, 0xBC, 0x0F, 0xFA, 0x3F, 0xF2, 0x17, 0xFA, - 0x01, 0x64, 0x14, 0xFA, 0xAA, 0xF2, 0x19, 0x60, 0x3F, 0xF3, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, - 0x44, 0x44, 0x61, 0x40, 0x08, 0x26, 0x02, 0x00, 0x61, 0x40, 0x80, 0x36, 0x12, 0xF2, 0x63, 0x46, - 0x33, 0x60, 0x86, 0x61, 0x00, 0x7F, 0x60, 0x45, 0x45, 0xD3, 0xFF, 0xFF, 0x60, 0x45, 0x00, 0x7F, - 0x4B, 0xFB, 0x65, 0x44, 0x00, 0x7E, 0xDA, 0xFB, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x12, 0xF0, - 0x60, 0x47, 0x63, 0x46, 0x64, 0x40, 0x10, 0x2A, 0x1E, 0x00, 0x33, 0x60, 0x0A, 0x63, 0x60, 0x40, - 0x0A, 0x36, 0x0C, 0x00, 0x14, 0x36, 0x07, 0x00, 0x37, 0x36, 0x02, 0x00, 0xA3, 0xD3, 0x09, 0x00, - 0x02, 0xA3, 0xA3, 0xD3, 0x06, 0x00, 0x04, 0xA3, 0xA3, 0xD3, 0x03, 0x00, 0x06, 0xA3, 0xA3, 0xD3, - 0xFF, 0xFF, 0x60, 0x40, 0x0A, 0x36, 0x70, 0x64, 0x14, 0x36, 0x38, 0x64, 0x37, 0x36, 0x15, 0x64, - 0x6E, 0x36, 0x0B, 0x64, 0x39, 0x00, 0x32, 0x60, 0xFA, 0x63, 0x60, 0x40, 0x0B, 0x36, 0x20, 0x00, - 0x0F, 0x36, 0x1B, 0x00, 0x0A, 0x36, 0x16, 0x00, 0x0E, 0x36, 0x11, 0x00, 0x09, 0x36, 0x0C, 0x00, - 0x0D, 0x36, 0x07, 0x00, 0x08, 0x36, 0x02, 0x00, 0xA3, 0xD3, 0x15, 0x00, 0x02, 0xA3, 0xA3, 0xD3, - 0x12, 0x00, 0x04, 0xA3, 0xA3, 0xD3, 0x0F, 0x00, 0x06, 0xA3, 0xA3, 0xD3, 0x0C, 0x00, 0x08, 0xA3, - 0xA3, 0xD3, 0x09, 0x00, 0x0A, 0xA3, 0xA3, 0xD3, 0x06, 0x00, 0x0C, 0xA3, 0xA3, 0xD3, 0x03, 0x00, - 0x0E, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x40, 0x0B, 0x36, 0x1E, 0x64, 0x0F, 0x36, 0x16, 0x64, - 0x0A, 0x36, 0x12, 0x64, 0x0E, 0x36, 0x0E, 0x64, 0x09, 0x36, 0x0E, 0x64, 0x0D, 0x36, 0x0A, 0x64, - 0x08, 0x36, 0x0A, 0x64, 0x0C, 0x36, 0x0A, 0x64, 0x40, 0x46, 0x2A, 0xF2, 0x07, 0xF0, 0x60, 0x40, - 0xB0, 0x3A, 0x03, 0x00, 0x40, 0x3B, 0x01, 0x00, 0x12, 0x00, 0x0C, 0xB4, 0x08, 0x3A, 0x44, 0x00, - 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, 0x3F, 0x00, 0x17, 0xF2, 0x22, 0xF0, 0xFF, 0xFF, - 0x64, 0x40, 0x22, 0x22, 0x04, 0x00, 0x00, 0xA8, 0x01, 0xA8, 0x36, 0x03, 0x35, 0x03, 0x3C, 0x46, - 0x2A, 0xF0, 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x60, 0x45, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x43, - 0x60, 0x40, 0x01, 0x26, 0x05, 0x00, 0x04, 0x26, 0x1D, 0x00, 0x10, 0x26, 0x10, 0x00, 0x04, 0x00, - 0x04, 0x27, 0x18, 0x00, 0x10, 0x27, 0x0B, 0x00, 0x65, 0x44, 0x2A, 0x61, 0x60, 0x40, 0x03, 0x2B, - 0x24, 0x61, 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA1, 0x41, 0x4C, 0x98, 0xFA, 0x15, 0x00, 0x65, 0x44, - 0x32, 0x61, 0x60, 0x40, 0x03, 0x2B, 0x2C, 0x61, 0x8F, 0xB0, 0x88, 0x36, 0x02, 0xA1, 0x41, 0x4C, - 0x98, 0xFA, 0x0A, 0x00, 0x65, 0x44, 0x2E, 0x61, 0x60, 0x40, 0x03, 0x2B, 0x28, 0x61, 0x8F, 0xB0, - 0x88, 0x36, 0x02, 0xA1, 0x41, 0x4C, 0x98, 0xFA, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x27, - 0x03, 0x00, 0xBC, 0x60, 0x46, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0x46, 0x43, 0x60, 0x40, 0x22, 0x26, - 0x09, 0x00, 0x01, 0x26, 0x0A, 0x00, 0x04, 0x26, 0x4B, 0x00, 0x10, 0x26, 0x10, 0x00, 0xBC, 0x60, - 0x46, 0x78, 0xFF, 0xFF, 0xBB, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0x04, 0x27, 0x3D, 0x00, 0x10, 0x27, - 0x03, 0x00, 0xBC, 0x60, 0x46, 0x78, 0xFF, 0xFF, 0xA6, 0xF3, 0x3C, 0xF1, 0x02, 0x00, 0x07, 0xF2, - 0x00, 0x7C, 0x40, 0x43, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x21, 0x00, 0xA3, 0x46, - 0x4B, 0xF2, 0xFF, 0xFF, 0xDC, 0x84, 0x4B, 0xFA, 0x4A, 0xF2, 0x08, 0x04, 0xDC, 0x84, 0x4A, 0xFA, - 0x49, 0xF2, 0x04, 0x04, 0xDC, 0x84, 0x49, 0xFA, 0x01, 0x04, 0xFF, 0xFF, 0xA6, 0xF3, 0x66, 0x5C, - 0xD0, 0x80, 0x00, 0x7C, 0x01, 0x02, 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x47, 0x20, 0xBF, 0xA3, 0x46, - 0x3A, 0xF8, 0x3B, 0xFA, 0xA3, 0x46, 0x4A, 0xF2, 0x49, 0xF0, 0xA3, 0x46, 0x3C, 0xFA, 0x3D, 0xF8, - 0x0F, 0x60, 0x9E, 0x64, 0xA3, 0x46, 0x76, 0x61, 0x0E, 0x63, 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, - 0xA3, 0x46, 0xBC, 0x60, 0x46, 0x78, 0xFF, 0xFF, 0xA6, 0xF3, 0xFF, 0xFF, 0x60, 0x46, 0x02, 0x00, - 0x07, 0xF4, 0xFF, 0xFF, 0xA3, 0x46, 0x2A, 0xF2, 0xA3, 0x46, 0x60, 0x40, 0x08, 0x27, 0x48, 0x00, - 0xA6, 0xF3, 0x66, 0x5C, 0xD0, 0x80, 0x3B, 0xF0, 0x08, 0x03, 0x64, 0x40, 0x10, 0x2A, 0x12, 0x00, - 0xFF, 0x60, 0xEF, 0x64, 0xA0, 0x84, 0x3B, 0xFA, 0x24, 0x00, 0x3D, 0xF3, 0x01, 0x61, 0x60, 0x43, - 0xCF, 0x83, 0xE1, 0x81, 0xFD, 0x0D, 0xE9, 0x81, 0xA1, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0x91, 0x84, - 0x3B, 0xFA, 0x17, 0x00, 0x4B, 0xF2, 0xFF, 0xFF, 0x10, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0xFF, 0x60, - 0xFF, 0x64, 0xDC, 0x84, 0x4B, 0xFA, 0x4A, 0xF2, 0x16, 0x04, 0xDC, 0x84, 0x4A, 0xFA, 0x49, 0xF2, - 0x08, 0x04, 0xDC, 0x84, 0x49, 0xFA, 0x05, 0x04, 0x3B, 0xF2, 0xFF, 0xFF, 0xE0, 0x84, 0xE8, 0x84, - 0x3B, 0xFA, 0x0C, 0x60, 0xFC, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC8, 0x60, - 0x15, 0x78, 0xFF, 0xFF, 0x84, 0xFF, 0x06, 0x60, 0x17, 0xE1, 0x77, 0x40, 0x8B, 0xFF, 0x02, 0x60, - 0x00, 0x75, 0xC9, 0x60, 0x58, 0x4F, 0xAD, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x06, 0x60, 0x7F, 0xFB, - 0x0C, 0x60, 0xFC, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC8, 0x60, 0x8C, 0x78, - 0xFF, 0xFF, 0x84, 0xFF, 0x00, 0x7C, 0x06, 0x60, 0x7F, 0xF3, 0xA2, 0xD9, 0x60, 0x40, 0x01, 0x2A, - 0x04, 0x00, 0xC9, 0x60, 0x58, 0x4F, 0xF6, 0x78, 0xFF, 0xFF, 0x3C, 0x46, 0x07, 0xF4, 0xA6, 0xF3, - 0x66, 0x5C, 0xD0, 0x80, 0x00, 0x7C, 0x07, 0x03, 0x66, 0x43, 0x3C, 0x46, 0x22, 0xF2, 0x63, 0x46, - 0x60, 0x40, 0x01, 0x2A, 0x01, 0x00, 0x3C, 0xF1, 0x4B, 0xF0, 0x64, 0x41, 0x64, 0x47, 0xFF, 0xB4, - 0x60, 0x5F, 0x20, 0xBC, 0x80, 0x26, 0x80, 0xAC, 0x60, 0x47, 0xA3, 0x46, 0x3A, 0xFA, 0x64, 0x44, - 0x20, 0x7F, 0x34, 0x94, 0x3B, 0xFA, 0xA3, 0x46, 0x4A, 0xF2, 0x49, 0xF0, 0xA3, 0x46, 0x3C, 0xFA, - 0x3D, 0xF8, 0x80, 0x60, 0x10, 0xE0, 0x08, 0x60, 0x00, 0xEA, 0x0F, 0x64, 0x60, 0x7F, 0xA0, 0x5A, - 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0xBC, 0x60, 0x46, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x27, 0x31, 0x00, 0x2A, 0xF2, 0x00, 0x60, - 0x7C, 0x62, 0x60, 0x40, 0x40, 0x2B, 0x24, 0x00, 0xA2, 0xD3, 0x00, 0x61, 0x60, 0xFE, 0xA0, 0xD3, - 0x5E, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x64, 0x5F, 0xDC, 0x84, 0xF1, 0x81, 0xC0, 0x2B, 0x04, 0x00, - 0x80, 0x2A, 0x02, 0x00, 0x7F, 0xA4, 0xDC, 0x84, 0xFF, 0x3B, 0x03, 0x00, 0x60, 0x47, 0xDC, 0x87, - 0x01, 0x61, 0xC0, 0x80, 0x00, 0x36, 0xDC, 0x84, 0x4E, 0xDB, 0x60, 0xFE, 0x5A, 0xD1, 0xFF, 0xFF, - 0xC1, 0x84, 0xF0, 0x22, 0x10, 0xA4, 0xF0, 0x2A, 0x01, 0x00, 0x00, 0x64, 0xA2, 0xDB, 0x20, 0xFE, - 0x00, 0x60, 0x3E, 0xF3, 0xFF, 0xFF, 0xA0, 0xD3, 0x5A, 0xD1, 0x3A, 0xFA, 0x3B, 0xF8, 0x74, 0x62, - 0xA2, 0xD0, 0xFF, 0xFF, 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, - 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, 0x00, 0x60, 0x40, 0xF3, 0xFF, 0xFF, 0xA0, 0xD1, - 0x5A, 0xD1, 0x64, 0x45, 0x64, 0x44, 0xE3, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5A, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5A, 0x65, 0x40, 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, - 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, 0xE9, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, - 0xA0, 0x5A, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, - 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5A, 0x64, 0x47, 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5A, 0x64, 0x44, - 0xEF, 0x7F, 0xA0, 0x5A, 0x08, 0x60, 0x00, 0xEA, 0x65, 0x44, 0x02, 0xA4, 0x60, 0x7F, 0xA0, 0x5A, - 0x80, 0x60, 0x00, 0xEA, 0xA0, 0x60, 0x00, 0xEA, 0xD1, 0x60, 0x00, 0xEA, 0x66, 0x45, 0xAA, 0xF2, - 0x19, 0x60, 0x3F, 0xF3, 0x24, 0x46, 0x61, 0x40, 0x08, 0x26, 0x02, 0x00, 0x61, 0x40, 0x80, 0x36, - 0x12, 0xF2, 0x65, 0x46, 0x60, 0x40, 0x10, 0x26, 0x34, 0x00, 0x2C, 0x45, 0x17, 0xF2, 0x4B, 0xF1, - 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x64, 0x45, 0x16, 0xA1, 0xB8, 0x60, 0x58, 0x4D, - 0x15, 0x78, 0xFF, 0xFF, 0x7D, 0xF1, 0x01, 0xA4, 0xE0, 0x84, 0xE0, 0x84, 0x64, 0x40, 0x01, 0x2B, - 0x06, 0xA4, 0x1B, 0xFA, 0xDA, 0xF3, 0x2C, 0x60, 0x7C, 0x65, 0x60, 0x40, 0x0B, 0x37, 0x00, 0x63, - 0x0F, 0x37, 0x02, 0x63, 0x0A, 0x37, 0x04, 0x63, 0x0E, 0x37, 0x06, 0x63, 0x09, 0x37, 0x08, 0x63, - 0x0D, 0x37, 0x0A, 0x63, 0x08, 0x37, 0x0C, 0x63, 0x0C, 0x37, 0x0E, 0x63, 0x28, 0xA3, 0x47, 0xD1, - 0xD8, 0xA3, 0xD7, 0x83, 0x19, 0x60, 0x77, 0xF9, 0x47, 0xD1, 0x40, 0x67, 0xB0, 0x84, 0x1F, 0xFA, - 0x58, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x36, 0x19, 0x00, 0x50, 0x36, 0x17, 0x00, - 0x40, 0x36, 0x15, 0x00, 0x00, 0x36, 0x13, 0x00, 0x20, 0x36, 0x11, 0x00, 0xA0, 0x36, 0x0F, 0x00, - 0xB0, 0x36, 0x0D, 0x00, 0xC0, 0x36, 0x0B, 0x00, 0xDA, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x0A, 0x37, - 0x06, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0x80, 0x60, 0x00, 0x61, 0x60, 0x40, 0x04, 0x26, 0x00, 0x61, - 0xDA, 0xF3, 0x2C, 0x60, 0x74, 0x65, 0x60, 0x40, 0x0A, 0x37, 0x00, 0x63, 0x14, 0x37, 0x02, 0x63, - 0x37, 0x37, 0x04, 0x63, 0x6E, 0x37, 0x06, 0x63, 0x28, 0xA3, 0x47, 0xD1, 0xD8, 0xA3, 0xD7, 0x83, - 0x19, 0x60, 0x77, 0xF9, 0x47, 0xD1, 0xFF, 0xFF, 0xB1, 0x84, 0x1F, 0xFA, 0xDA, 0xF1, 0x2C, 0x45, - 0x64, 0x43, 0x17, 0xF2, 0x4B, 0xF1, 0xC4, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, - 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, 0xB8, 0x60, 0x58, 0x4D, 0x15, 0x78, 0xFF, 0xFF, 0xAE, 0x82, - 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, 0x63, 0x44, - 0x80, 0x7E, 0xDA, 0xFB, 0x61, 0x44, 0xDC, 0x84, 0x2B, 0xF0, 0x1B, 0xFA, 0x64, 0x44, 0x80, 0x27, - 0x58, 0x00, 0x07, 0xF0, 0x66, 0x45, 0x64, 0x46, 0x12, 0xF2, 0x65, 0x46, 0x60, 0x40, 0x10, 0x2A, - 0x31, 0x00, 0x16, 0xF2, 0x0F, 0xF0, 0xAC, 0x84, 0x2C, 0x45, 0x2C, 0x03, 0x4B, 0xF1, 0xC4, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x81, 0x63, 0x40, 0x37, 0x37, 0xE1, 0x81, 0x64, 0x45, 0x0F, 0xF0, - 0xB8, 0x60, 0x58, 0x4D, 0x15, 0x78, 0xFF, 0xFF, 0xAE, 0x82, 0xFC, 0xA2, 0x0A, 0x03, 0x63, 0x40, - 0x6E, 0x3B, 0x06, 0x00, 0x60, 0x41, 0x04, 0x0D, 0x80, 0x67, 0xB0, 0x84, 0x0F, 0xFA, 0x61, 0x44, - 0xDC, 0x84, 0x1D, 0xFA, 0x1F, 0xF0, 0x01, 0x60, 0x3E, 0x65, 0x64, 0x40, 0x80, 0x27, 0x02, 0x00, - 0x02, 0x60, 0x5E, 0x65, 0x1B, 0xF0, 0x26, 0x41, 0xE1, 0x81, 0xC5, 0x81, 0x44, 0x94, 0xC1, 0x81, - 0x2B, 0xFA, 0x90, 0xFA, 0x26, 0x44, 0x2C, 0xF0, 0x0A, 0xA4, 0x66, 0x45, 0x24, 0x46, 0x92, 0xF2, - 0x65, 0x46, 0x9F, 0xF0, 0x61, 0x40, 0x10, 0x2A, 0x05, 0x00, 0x60, 0xA4, 0x65, 0x40, 0x80, 0x2B, - 0x60, 0xA4, 0x01, 0x00, 0x14, 0xA4, 0x64, 0x40, 0x01, 0x26, 0x00, 0x64, 0x60, 0x45, 0x2A, 0xF2, - 0x39, 0xF0, 0x8F, 0xB0, 0x88, 0x3A, 0x04, 0x00, 0x64, 0x44, 0x60, 0xB0, 0x20, 0x36, 0x00, 0x65, - 0x65, 0x44, 0x11, 0xFA, 0xDA, 0xF3, 0x13, 0xFA, 0x7C, 0x44, 0x1D, 0xFA, 0x0F, 0xF0, 0xFF, 0xFF, - 0x64, 0x40, 0x01, 0x2A, 0x6F, 0x00, 0x7D, 0xF1, 0x19, 0x60, 0x7B, 0xF3, 0x64, 0x40, 0x01, 0x27, - 0x03, 0x00, 0x60, 0x40, 0x02, 0x26, 0x14, 0x00, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x12, 0xF0, - 0x19, 0x60, 0x7C, 0xF3, 0x63, 0x46, 0x64, 0x40, 0x10, 0x2A, 0x20, 0x00, 0x60, 0x40, 0x02, 0x26, - 0x07, 0x00, 0x01, 0x26, 0x08, 0x00, 0x04, 0x26, 0x09, 0x00, 0x06, 0x61, 0x6E, 0x63, 0x08, 0x00, - 0x02, 0x61, 0x14, 0x63, 0x05, 0x00, 0x00, 0x61, 0x0A, 0x63, 0x02, 0x00, 0x04, 0x61, 0x37, 0x63, - 0x00, 0x64, 0x2C, 0x60, 0x9C, 0x65, 0x45, 0xD1, 0xD5, 0x81, 0x19, 0x60, 0x78, 0xF9, 0x2C, 0x60, - 0x74, 0x65, 0x45, 0xD1, 0x1C, 0xFC, 0xB0, 0x84, 0x1E, 0xFA, 0x3C, 0x00, 0x60, 0x40, 0x10, 0x2A, - 0x04, 0x00, 0x08, 0x61, 0x1E, 0x60, 0x0B, 0x63, 0x27, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x0A, 0x61, - 0x16, 0x60, 0x0F, 0x63, 0x21, 0x00, 0x40, 0x2A, 0x04, 0x00, 0x0C, 0x61, 0x12, 0x60, 0x0A, 0x63, - 0x1B, 0x00, 0x80, 0x2A, 0x04, 0x00, 0x0E, 0x61, 0x0E, 0x60, 0x0E, 0x63, 0x15, 0x00, 0x01, 0x2B, - 0x04, 0x00, 0x10, 0x61, 0x0E, 0x60, 0x09, 0x63, 0x0F, 0x00, 0x02, 0x2B, 0x04, 0x00, 0x12, 0x61, - 0x0A, 0x60, 0x0D, 0x63, 0x09, 0x00, 0x04, 0x2B, 0x04, 0x00, 0x14, 0x61, 0x0A, 0x60, 0x08, 0x63, - 0x03, 0x00, 0x16, 0x61, 0x0A, 0x60, 0x0C, 0x63, 0x1E, 0xF0, 0x40, 0x67, 0x2C, 0x60, 0x9C, 0x65, - 0x45, 0xD1, 0xD5, 0x81, 0x19, 0x60, 0x78, 0xF9, 0x2C, 0x60, 0x74, 0x65, 0x45, 0xD1, 0x1C, 0xFC, - 0xB0, 0x84, 0x1E, 0xFA, 0xFF, 0xFF, 0x0D, 0xF2, 0x3E, 0xF0, 0x60, 0x47, 0xFF, 0xB4, 0x64, 0x41, - 0x01, 0xB1, 0x01, 0x63, 0x17, 0x02, 0x60, 0x41, 0xFF, 0x22, 0x04, 0x00, 0xB8, 0x60, 0x58, 0x4F, - 0x06, 0x78, 0xFF, 0xFF, 0x07, 0x60, 0xED, 0xFD, 0x19, 0x60, 0xCF, 0xF3, 0xFF, 0xFF, 0x60, 0x41, - 0x01, 0x63, 0x61, 0x40, 0xFF, 0x22, 0x04, 0x00, 0xB8, 0x60, 0x58, 0x4F, 0x06, 0x78, 0xFF, 0xFF, - 0x07, 0x60, 0xEE, 0xFD, 0x02, 0x64, 0x3B, 0xDB, 0xBF, 0x60, 0xE4, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0xFC, 0xFB, 0x07, 0xF0, 0x00, 0x64, 0xD0, 0x80, 0xA6, 0xF3, 0x0E, 0x03, 0xD0, 0x80, 0xFF, 0xFF, - 0x0B, 0x03, 0x47, 0xF1, 0x07, 0xF0, 0x64, 0x40, 0x02, 0x26, 0x01, 0x00, 0x08, 0x00, 0x03, 0x12, - 0xBE, 0x60, 0xA0, 0x78, 0xFF, 0xFF, 0xFC, 0x0A, 0xBF, 0x60, 0x00, 0x78, 0xFF, 0xFF, 0x87, 0xF0, - 0xA6, 0xF3, 0x10, 0xF0, 0xD4, 0x80, 0xFF, 0xFF, 0x3D, 0x03, 0x66, 0x43, 0x65, 0x46, 0xFF, 0x67, - 0x20, 0x85, 0x64, 0x5F, 0x40, 0x44, 0x15, 0xF0, 0x25, 0x44, 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, - 0xE8, 0x84, 0xE8, 0x84, 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, - 0x15, 0xFA, 0x40, 0x45, 0x14, 0xF0, 0x24, 0x44, 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, 0xC0, 0x84, 0x14, 0xFA, 0x60, 0x5C, 0x2F, 0x67, - 0xD0, 0x80, 0x60, 0x45, 0x02, 0x28, 0x64, 0x45, 0x25, 0x5C, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, - 0x02, 0x24, 0x64, 0x41, 0xD5, 0x84, 0x80, 0x65, 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, - 0x0E, 0xFA, 0x63, 0x46, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x17, 0xF2, 0x63, 0x46, 0x60, 0x40, - 0x00, 0x36, 0x2E, 0x00, 0x01, 0x36, 0x1E, 0x00, 0x03, 0x3A, 0x25, 0x00, 0x64, 0x46, 0x10, 0xF2, - 0x11, 0xFA, 0x12, 0xF2, 0x00, 0x61, 0x60, 0x47, 0x00, 0x7F, 0x12, 0xFA, 0x97, 0xFA, 0x46, 0x44, - 0x63, 0x46, 0xC2, 0x60, 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x00, 0x3A, 0x04, 0x00, - 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x96, 0xFC, - 0x63, 0x46, 0x43, 0x00, 0x64, 0x46, 0x16, 0xF2, 0x00, 0x61, 0x20, 0x28, 0xFF, 0xA4, 0x97, 0xFA, - 0x16, 0xFA, 0x63, 0x46, 0x3A, 0x00, 0x64, 0x46, 0x00, 0x61, 0x97, 0xFA, 0x63, 0x46, 0x35, 0x00, - 0x07, 0xF0, 0x66, 0x41, 0x64, 0x46, 0x16, 0xF2, 0xFF, 0xFF, 0x20, 0x28, 0xFF, 0xA4, 0x16, 0xFA, - 0x93, 0xF4, 0x12, 0xF2, 0x20, 0x28, 0xFF, 0xA3, 0x13, 0xFC, 0x61, 0x46, 0x63, 0x40, 0x00, 0x3A, - 0x24, 0x00, 0xC2, 0x60, 0x58, 0x4E, 0x6D, 0x78, 0xFF, 0xFF, 0x61, 0x40, 0xFF, 0x36, 0x1D, 0x00, - 0x66, 0x41, 0x64, 0x46, 0x12, 0xF2, 0x93, 0xF4, 0x61, 0x46, 0x20, 0x28, 0x16, 0x00, 0x44, 0x44, - 0xC2, 0x60, 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0x24, 0x5C, 0x65, 0x40, 0x00, 0x36, 0x06, 0x00, - 0x66, 0x41, 0x64, 0x46, 0x01, 0x64, 0x17, 0xFA, 0x61, 0x46, 0x07, 0x00, 0x66, 0x43, 0x64, 0x46, - 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x63, 0x46, 0xBF, 0x60, 0x00, 0x78, 0xFF, 0xFF, - 0x07, 0xF0, 0x66, 0x43, 0x64, 0x46, 0x17, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xFF, 0x27, 0xFF, 0xFF, - 0x00, 0x36, 0x07, 0x00, 0x01, 0x36, 0x1C, 0x00, 0x02, 0x36, 0x24, 0x00, 0x03, 0x36, 0x43, 0x00, - 0xFF, 0xFF, 0x19, 0x60, 0xA9, 0xF1, 0x16, 0xF2, 0x43, 0x44, 0xD0, 0x80, 0x33, 0x60, 0x84, 0x61, - 0x09, 0x03, 0xA1, 0xD1, 0x33, 0x60, 0x82, 0x63, 0xC0, 0x84, 0x16, 0xFA, 0xA3, 0xD3, 0xFF, 0xFF, - 0x13, 0xFA, 0x39, 0x00, 0x96, 0xFC, 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x33, 0x00, - 0x43, 0x44, 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0xC1, 0xF3, 0x96, 0xFC, - 0x13, 0xFA, 0x29, 0x00, 0x63, 0x46, 0x33, 0x60, 0x54, 0x63, 0xA3, 0xD3, 0x15, 0xF2, 0x60, 0x45, - 0xD4, 0x80, 0x07, 0xF0, 0x0C, 0x03, 0x66, 0x41, 0x44, 0x44, 0x64, 0x46, 0x12, 0xF2, 0x61, 0x46, - 0xC2, 0x60, 0x58, 0x4E, 0x4C, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x00, 0x3A, 0x19, 0x00, 0x66, 0x43, - 0x24, 0x46, 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x12, 0xF2, 0x91, 0xF2, 0x90, 0xFA, - 0x60, 0x5F, 0x12, 0xFA, 0x04, 0x00, 0xC2, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0x03, 0x64, - 0x17, 0xFA, 0x63, 0x46, 0x05, 0x00, 0x24, 0x43, 0x02, 0x64, 0x17, 0xFA, 0x63, 0x46, 0x00, 0x00, - 0x03, 0x64, 0x3B, 0xDB, 0xCA, 0xFE, 0x47, 0xF1, 0x01, 0x65, 0x32, 0x40, 0x04, 0x27, 0x11, 0x00, - 0x2C, 0xF2, 0x64, 0x45, 0x02, 0x22, 0x0D, 0x00, 0x60, 0x40, 0x01, 0x26, 0x0A, 0x00, 0x2A, 0xF2, - 0x39, 0xF0, 0x8F, 0xB0, 0x88, 0x3A, 0x77, 0x00, 0x64, 0x44, 0x60, 0xB0, 0x20, 0x36, 0x01, 0x00, - 0x72, 0x00, 0x14, 0xF2, 0x65, 0x40, 0x01, 0x26, 0x0C, 0x00, 0x60, 0x45, 0x05, 0x64, 0x3B, 0xDB, - 0x65, 0x44, 0xCC, 0x85, 0x2C, 0x60, 0xD0, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, - 0x50, 0x00, 0x60, 0x41, 0x2A, 0xF0, 0x00, 0x60, 0x0C, 0x64, 0xA0, 0x84, 0x04, 0x36, 0x02, 0x00, - 0x0C, 0x3A, 0x01, 0x00, 0x46, 0x00, 0x61, 0x45, 0x60, 0x43, 0x2C, 0x60, 0xD0, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, 0x63, 0x40, 0x08, 0x36, 0x01, 0x00, 0x3A, 0x00, 0x14, 0xF2, - 0x1C, 0x65, 0x60, 0x41, 0x00, 0x63, 0xCD, 0x81, 0xC7, 0x83, 0xFD, 0x02, 0x3F, 0xF0, 0x2C, 0xF2, - 0xC3, 0x83, 0x60, 0x40, 0x01, 0x2A, 0x0D, 0x00, 0x2C, 0x60, 0xCE, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x2C, 0x60, 0xD4, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xEF, 0x78, 0x63, 0x45, - 0x20, 0x00, 0x2C, 0x60, 0xCC, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x2C, 0x60, - 0xD2, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xEF, 0x78, 0x63, 0x45, 0x15, 0xF2, 0xFF, 0xFF, 0x0F, 0xB4, - 0x00, 0xA8, 0x01, 0xA8, 0x0E, 0x03, 0x07, 0x03, 0x2C, 0x60, 0xDA, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x06, 0x00, 0x2C, 0x60, 0xD8, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, - 0xB5, 0xF1, 0x04, 0x64, 0x3B, 0xDB, 0x25, 0x60, 0xEC, 0x64, 0x13, 0x60, 0x0A, 0xFB, 0x3C, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x5C, 0x5C, 0xFC, 0xFC, 0xCE, 0xFE, - 0xB8, 0x60, 0x37, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x50, 0xA8, 0x02, 0x7C, 0x09, 0x03, - 0x0F, 0xF0, 0x15, 0xF2, 0x64, 0x41, 0x01, 0x2A, 0x02, 0x00, 0xCD, 0xF1, 0x02, 0x00, 0xCC, 0xF1, - 0xFF, 0xFF, 0x64, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x15, 0xFA, 0x2D, 0x07, 0x61, 0x40, 0x01, 0x2A, - 0x08, 0x00, 0x16, 0x60, 0x80, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, - 0x07, 0x00, 0x16, 0x60, 0x81, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, - 0x2A, 0xF0, 0x08, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x00, 0x64, 0x48, 0xFB, 0x19, 0x60, 0xA3, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0C, 0x00, 0x3C, 0x46, 0x3E, 0xF2, 0x40, 0x60, 0x00, 0x65, - 0xF0, 0x84, 0xA4, 0x84, 0x3D, 0xFA, 0x2A, 0xF2, 0xBF, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x2A, 0xFA, - 0xBA, 0x60, 0x02, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x49, 0xFB, 0x2C, 0x60, 0xDA, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x2C, 0x60, 0xDC, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, - 0xB5, 0xF1, 0x27, 0x44, 0xF7, 0xB4, 0x40, 0x47, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDA, - 0x98, 0x01, 0xC0, 0x60, 0x5F, 0x78, 0xFF, 0xFF, 0x21, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0x01, 0x63, - 0xC4, 0xB4, 0x31, 0xFB, 0x32, 0xFD, 0xC0, 0x60, 0x14, 0x62, 0x42, 0x40, 0xA0, 0x4C, 0x40, 0xBC, - 0x7D, 0xB4, 0xA0, 0x51, 0xA0, 0xFE, 0x1A, 0xFF, 0x25, 0x60, 0xE0, 0x64, 0x08, 0xF0, 0x07, 0xF0, - 0xD0, 0x80, 0x25, 0x60, 0xE6, 0x62, 0x13, 0x02, 0xA2, 0xD3, 0x01, 0x63, 0xAC, 0x86, 0x07, 0xF2, - 0x0E, 0x03, 0xD0, 0x80, 0x09, 0xF2, 0xFA, 0x02, 0x23, 0xFC, 0x25, 0x60, 0xEC, 0x64, 0x13, 0x60, - 0x0A, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x3C, 0x46, - 0x06, 0x64, 0xA1, 0xFF, 0x49, 0xFB, 0x83, 0x3E, 0x31, 0xF3, 0x87, 0x60, 0x80, 0x61, 0x1D, 0xF0, - 0x60, 0x40, 0x01, 0x2A, 0x0F, 0x00, 0xFE, 0xB4, 0x31, 0xFB, 0x00, 0x64, 0x49, 0xFB, 0x01, 0x64, - 0x47, 0xFB, 0x00, 0x71, 0x05, 0x64, 0x64, 0x5F, 0x0D, 0xFA, 0x40, 0x64, 0x3B, 0xDB, 0xC0, 0x60, - 0x5F, 0x78, 0xFF, 0xFF, 0x02, 0x2A, 0x18, 0x00, 0xD1, 0x91, 0x8D, 0xE2, 0x41, 0x64, 0x3B, 0xDB, - 0x31, 0xF3, 0x33, 0x60, 0xA6, 0x63, 0xFD, 0xB4, 0x31, 0xFB, 0xA3, 0xD3, 0x02, 0x63, 0x60, 0x5C, - 0x0D, 0xF2, 0x47, 0xFD, 0xFF, 0xB5, 0x60, 0x47, 0xFF, 0xB4, 0xD0, 0x80, 0xDC, 0x84, 0x1F, 0x03, - 0x60, 0x47, 0xB4, 0x84, 0x0D, 0xFA, 0x1B, 0x00, 0x08, 0x2A, 0x07, 0x00, 0x42, 0x64, 0x3B, 0xDB, - 0x31, 0xF3, 0xFF, 0xFF, 0xF7, 0xB4, 0x31, 0xFB, 0x12, 0x00, 0x10, 0x2A, 0x09, 0x00, 0x43, 0x64, - 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, 0x31, 0xFB, 0xBF, 0x60, 0xE4, 0x78, 0xFF, 0xFF, - 0x44, 0x64, 0x3B, 0xDB, 0x31, 0xF3, 0xFF, 0xFF, 0xDF, 0xB4, 0x31, 0xFB, 0x00, 0x00, 0x2A, 0x64, - 0x3B, 0xDB, 0xB7, 0x60, 0xF7, 0x64, 0x40, 0x40, 0xBD, 0x60, 0xD7, 0x78, 0xFF, 0xFF, 0x0E, 0x60, - 0xDF, 0xF3, 0xFF, 0xFF, 0x02, 0xB5, 0x04, 0xB5, 0x04, 0x03, 0x03, 0x03, 0xC1, 0x60, 0x70, 0x78, - 0xFF, 0xFF, 0x31, 0x40, 0x01, 0x26, 0x16, 0x00, 0xA0, 0x4C, 0x49, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, - 0x0E, 0x60, 0xDF, 0xF3, 0xFF, 0xFF, 0x02, 0xB5, 0x04, 0xBC, 0x09, 0x03, 0x60, 0x40, 0x01, 0x26, - 0xED, 0xE2, 0xFE, 0xB4, 0xA2, 0xDB, 0xA0, 0x4C, 0x7D, 0xB4, 0xA0, 0x51, 0x03, 0x00, 0xA0, 0x4C, - 0x6D, 0xB4, 0xA0, 0x51, 0xDB, 0xF3, 0xFF, 0xFF, 0xFD, 0xA0, 0xFF, 0xFF, 0x08, 0x24, 0x59, 0x00, - 0x31, 0x40, 0x04, 0x2A, 0x38, 0x00, 0x01, 0x64, 0x19, 0x60, 0xF4, 0xFB, 0x6C, 0xF3, 0x73, 0xF3, - 0xCC, 0x83, 0x6C, 0xFD, 0xCC, 0x84, 0x73, 0xFB, 0x1E, 0x02, 0x31, 0x40, 0x02, 0x2A, 0x12, 0x00, - 0x6E, 0xF3, 0x6F, 0xF1, 0xCC, 0x84, 0x6E, 0xFB, 0x0D, 0x02, 0x6E, 0xF9, 0x31, 0x44, 0x08, 0xBC, - 0x40, 0x51, 0x71, 0xF3, 0x70, 0xF1, 0x00, 0xB8, 0x64, 0x45, 0x01, 0x03, 0x67, 0x45, 0x65, 0x50, - 0xCC, 0x84, 0x72, 0xFB, 0x16, 0x60, 0xAC, 0xF3, 0x6D, 0xF1, 0x00, 0xB8, 0x73, 0xF9, 0x03, 0x03, - 0x85, 0xF3, 0x6C, 0xFB, 0x04, 0x00, 0x6C, 0xF3, 0x85, 0xF1, 0x0D, 0x1B, 0x6C, 0xF9, 0x31, 0x40, - 0x01, 0x2A, 0x09, 0x00, 0x9D, 0xFE, 0x07, 0x05, 0xBA, 0xFE, 0x08, 0x64, 0x13, 0x60, 0x16, 0xFB, - 0x2D, 0xFF, 0xFF, 0xFF, 0xA3, 0xFE, 0x32, 0x40, 0x80, 0x2A, 0x12, 0x00, 0x31, 0x40, 0x04, 0x2A, - 0x0F, 0x00, 0x16, 0x60, 0xAC, 0xF3, 0x6C, 0xF1, 0x03, 0x1B, 0x31, 0x40, 0x02, 0x2A, 0x06, 0x00, - 0x73, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x07, 0x60, 0x5C, 0x19, 0x60, 0xF5, 0xF9, - 0x00, 0x64, 0x19, 0x60, 0xF4, 0xFB, 0x0E, 0x60, 0x37, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0xFF, 0x2B, - 0xA2, 0xDB, 0xCF, 0xF1, 0x07, 0x60, 0xE9, 0xF3, 0x64, 0x40, 0x02, 0x3A, 0x3A, 0x00, 0x0A, 0x60, - 0x18, 0xF1, 0x10, 0xB4, 0x90, 0x80, 0xFF, 0xFF, 0x34, 0x03, 0x0A, 0x60, 0x18, 0xFB, 0x01, 0x63, - 0x60, 0x40, 0x10, 0x22, 0x00, 0x63, 0x08, 0x60, 0xC1, 0xFD, 0x08, 0x60, 0xC5, 0xFD, 0x08, 0x60, - 0xC9, 0xFD, 0x08, 0x60, 0xCD, 0xFD, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x23, 0x21, 0x00, - 0x0B, 0x36, 0x07, 0x00, 0x0C, 0x36, 0x05, 0x00, 0x0D, 0x36, 0x03, 0x00, 0x0E, 0x36, 0x01, 0x00, - 0x18, 0x00, 0xDB, 0xF3, 0x01, 0x63, 0x0E, 0x60, 0x36, 0xFD, 0x60, 0x40, 0x03, 0x3A, 0x08, 0x00, - 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x09, 0x00, - 0x04, 0x3A, 0x07, 0x00, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x10, 0x64, 0x3B, 0xDB, 0x7E, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xC4, 0x93, 0xC9, 0xFE, 0x49, 0xF3, 0x3C, 0x46, 0x25, 0x18, 0xCC, 0x84, 0x49, 0xFB, - 0x22, 0x02, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0xFC, 0xFC, 0x00, 0x64, 0x5C, 0x5C, 0x32, 0xFB, - 0x82, 0xFF, 0x5C, 0x47, 0x84, 0xFF, 0x62, 0xFF, 0x16, 0x60, 0x7E, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, - 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, 0x23, 0xF0, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDA, 0x25, 0x60, - 0xEC, 0x64, 0x13, 0x60, 0x0A, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xC1, 0xFE, 0xCE, 0xFE, 0x69, 0xF3, 0xFF, 0xFF, 0x60, 0x41, 0xFD, 0xB4, 0xA2, 0xDB, - 0x61, 0x44, 0x01, 0xB0, 0x02, 0xB0, 0x0B, 0x03, 0x0A, 0x02, 0x9D, 0xFE, 0x08, 0x04, 0x1C, 0x60, - 0xCE, 0x64, 0x13, 0x60, 0x20, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x07, 0x00, - 0x7E, 0xF3, 0x73, 0x45, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xC4, 0x93, 0x1D, 0x60, - 0xBA, 0x63, 0xA3, 0xD3, 0xAD, 0x49, 0x20, 0xB5, 0x08, 0xB1, 0x22, 0x03, 0xE1, 0x81, 0x10, 0xB5, - 0x95, 0x81, 0x60, 0x41, 0x18, 0x02, 0x1D, 0x60, 0xBC, 0x7C, 0xA4, 0xD3, 0xFF, 0xFF, 0xCC, 0x84, - 0xA4, 0xDB, 0x16, 0x02, 0x05, 0x64, 0xA4, 0xDB, 0x61, 0x44, 0x07, 0xB4, 0xFF, 0xFF, 0x10, 0x02, - 0x08, 0xB1, 0xE1, 0x81, 0x95, 0x81, 0xA3, 0xD3, 0x0B, 0x03, 0x08, 0xAC, 0x01, 0xBC, 0xA3, 0xDB, - 0xFF, 0xFF, 0x13, 0xFF, 0x05, 0x00, 0x10, 0xAC, 0xA3, 0xDB, 0x05, 0x7C, 0x0E, 0x60, 0xDE, 0xF9, - 0xB8, 0x60, 0x03, 0x78, 0xFF, 0xFF, 0x46, 0xF3, 0x45, 0xF1, 0x04, 0x1B, 0x64, 0x44, 0x02, 0x1B, - 0x07, 0x60, 0xED, 0xF3, 0x45, 0xFB, 0x00, 0x63, 0x46, 0xFD, 0x60, 0x41, 0x25, 0x64, 0x3B, 0xDB, - 0x27, 0x44, 0xEF, 0xB4, 0x40, 0x47, 0x00, 0xB9, 0x71, 0x40, 0x80, 0x27, 0x01, 0x12, 0x27, 0x03, - 0xC1, 0x60, 0xC5, 0x62, 0x84, 0xFF, 0x42, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, - 0xA0, 0x51, 0x2D, 0x0A, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x27, 0x0A, - 0x71, 0x40, 0x80, 0x27, 0xF7, 0x12, 0x45, 0xF3, 0x48, 0x02, 0x11, 0x18, 0x1B, 0x60, 0xEE, 0xF3, - 0x1B, 0x60, 0xEF, 0xF3, 0x07, 0x18, 0x06, 0x18, 0xAC, 0x4C, 0x80, 0x26, 0x03, 0x00, 0x00, 0x64, - 0x45, 0xFB, 0x05, 0x00, 0x45, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0x45, 0xFB, 0xE3, 0x02, 0x06, 0x0A, - 0xA0, 0x4C, 0xFB, 0xB4, 0xA0, 0x51, 0xA4, 0x60, 0x58, 0x78, 0xFF, 0xFF, 0x84, 0xFF, 0xC1, 0x60, - 0xA3, 0x64, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x14, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0xB0, 0x60, - 0x9E, 0x78, 0xFF, 0xFF, 0x3C, 0x44, 0xAC, 0x80, 0x32, 0xF1, 0x25, 0x03, 0x64, 0x40, 0x07, 0x22, - 0x22, 0x00, 0xA4, 0x60, 0x36, 0x78, 0xFF, 0xFF, 0xA0, 0x4C, 0x1C, 0xBC, 0xDF, 0xB4, 0xA0, 0x51, - 0x31, 0x40, 0x08, 0x2A, 0xEF, 0x01, 0x72, 0xF3, 0x70, 0xF1, 0x00, 0xA0, 0xDC, 0x80, 0x05, 0x03, - 0x08, 0x03, 0xCC, 0x84, 0x72, 0xFB, 0x67, 0x50, 0x08, 0x00, 0xCC, 0x84, 0x72, 0xFB, 0x64, 0x50, - 0x04, 0x00, 0x31, 0x44, 0xF7, 0xB4, 0x40, 0x51, 0x06, 0x00, 0x28, 0x64, 0x3A, 0xDB, 0xA0, 0x4C, - 0x30, 0xBC, 0xF3, 0xB4, 0xA0, 0x51, 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x28, 0x64, 0x3B, 0xDB, - 0x07, 0x60, 0xEE, 0xF3, 0x32, 0x40, 0x02, 0x27, 0x16, 0x00, 0x46, 0xFB, 0x14, 0x18, 0xC2, 0x60, - 0x33, 0x64, 0x84, 0xFF, 0x40, 0x42, 0x82, 0xFF, 0xA0, 0x4C, 0x15, 0xBC, 0xF7, 0xB4, 0xA0, 0x51, - 0xA1, 0xFF, 0xFF, 0xFF, 0x81, 0x3E, 0x70, 0x44, 0xAC, 0x80, 0x46, 0xF3, 0xB8, 0x0A, 0xDD, 0x02, - 0xCC, 0x84, 0x46, 0xFB, 0xF5, 0x02, 0x84, 0xFF, 0xC2, 0x60, 0x45, 0x64, 0x40, 0x42, 0x82, 0xFF, - 0x27, 0x44, 0x08, 0xBC, 0x40, 0x47, 0xF9, 0xE1, 0x04, 0x00, 0x78, 0xE1, 0x31, 0x40, 0x01, 0x26, - 0xF9, 0xE1, 0xA4, 0x60, 0x2D, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0xAB, 0xF1, 0x60, 0x45, 0x33, 0x60, - 0x6A, 0x61, 0xC5, 0x83, 0xA3, 0xD3, 0xFF, 0xFF, 0x60, 0x41, 0x66, 0x45, 0x24, 0x46, 0x0E, 0xF2, - 0x65, 0x46, 0x64, 0x45, 0xD5, 0x81, 0x61, 0x45, 0x00, 0x7F, 0xD4, 0x80, 0x64, 0x43, 0x08, 0x04, - 0xE3, 0x83, 0x63, 0x45, 0xC5, 0x81, 0x61, 0x45, 0xD4, 0x80, 0x02, 0x65, 0x03, 0x07, 0x03, 0x00, - 0x00, 0x65, 0x01, 0x00, 0x01, 0x65, 0x2E, 0x58, 0xFF, 0xFF, 0x66, 0x43, 0x64, 0x46, 0x8F, 0xF0, - 0x12, 0xF2, 0x91, 0xF2, 0x60, 0x40, 0x10, 0x36, 0x05, 0x00, 0x12, 0x36, 0x08, 0x00, 0x0C, 0x36, - 0x0B, 0x00, 0x0F, 0x00, 0x40, 0x61, 0xA5, 0x80, 0x0A, 0x64, 0x13, 0x02, 0xF3, 0x01, 0x10, 0x61, - 0xA5, 0x80, 0x0E, 0x64, 0x0E, 0x02, 0xEE, 0x01, 0x08, 0x61, 0xA5, 0x80, 0x10, 0x64, 0x09, 0x02, - 0xE9, 0x01, 0xE1, 0x81, 0xA5, 0x80, 0x03, 0x05, 0xC8, 0x84, 0x03, 0x02, 0xE3, 0x01, 0xFF, 0x61, - 0x02, 0x00, 0x12, 0xFA, 0x91, 0xFA, 0x63, 0x46, 0x2E, 0x58, 0xFF, 0xFF, 0x8F, 0xF0, 0x12, 0xF2, - 0x91, 0xF2, 0x60, 0x40, 0x0A, 0x36, 0x05, 0x00, 0x0E, 0x36, 0x08, 0x00, 0x10, 0x36, 0x0B, 0x00, - 0x0F, 0x00, 0x08, 0x61, 0xA5, 0x80, 0x10, 0x7E, 0x11, 0x02, 0xF3, 0x01, 0x04, 0x61, 0xA5, 0x80, - 0x12, 0x7E, 0x0C, 0x02, 0xEE, 0x01, 0x20, 0x61, 0xA5, 0x80, 0x0C, 0x7E, 0x07, 0x02, 0xE9, 0x01, - 0xE9, 0x81, 0xA5, 0x80, 0x05, 0x05, 0xD8, 0x84, 0x01, 0x02, 0xE3, 0x01, 0x12, 0xFA, 0x91, 0xFA, - 0x2E, 0x58, 0xFF, 0xFF, 0x28, 0x40, 0x08, 0x3A, 0x06, 0x00, 0x04, 0x60, 0x40, 0x62, 0x3D, 0x60, - 0x58, 0x4D, 0x3B, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2B, 0x50, 0x00, - 0x28, 0x40, 0x08, 0x3A, 0x4D, 0x00, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x19, 0x60, - 0x52, 0xFB, 0x7D, 0xF1, 0x2B, 0x60, 0x82, 0x63, 0x64, 0x40, 0x01, 0x27, 0x3C, 0xA3, 0x29, 0x40, - 0x40, 0x2B, 0x1E, 0xA3, 0xBD, 0xD1, 0x63, 0x45, 0x44, 0x4E, 0x0E, 0x61, 0xBD, 0xD1, 0xCD, 0x81, - 0xD0, 0x80, 0x01, 0x03, 0xFB, 0x04, 0xCB, 0x83, 0x19, 0x60, 0x55, 0xF3, 0x39, 0xF1, 0xD7, 0x83, - 0xEB, 0x83, 0x2E, 0x41, 0x5D, 0x93, 0xDF, 0x83, 0x19, 0x60, 0x51, 0xFD, 0x19, 0x60, 0x50, 0xFB, - 0x53, 0x93, 0xDF, 0x80, 0x10, 0x03, 0x38, 0xF3, 0xCF, 0x83, 0x08, 0x03, 0xDF, 0x83, 0x0B, 0x02, - 0xDF, 0x83, 0xDC, 0x84, 0xF0, 0xA0, 0x38, 0xFB, 0x06, 0x03, 0x03, 0x00, 0xCC, 0x84, 0x38, 0xFB, - 0x02, 0x03, 0x00, 0x63, 0x02, 0x00, 0x08, 0x64, 0x38, 0xFB, 0xE3, 0x80, 0xFB, 0x83, 0xC3, 0x83, - 0x63, 0x44, 0xFC, 0xA0, 0x02, 0x0E, 0x08, 0x07, 0x08, 0x00, 0x04, 0xA4, 0xFF, 0xFF, 0x05, 0x0D, - 0xFC, 0x64, 0xFF, 0x7F, 0x60, 0x43, 0x01, 0x00, 0x04, 0x63, 0x39, 0xFD, 0x19, 0x60, 0x54, 0xFD, - 0x2F, 0x58, 0xFF, 0xFF, 0x19, 0x60, 0x74, 0xF3, 0x40, 0x4E, 0x60, 0x46, 0x2F, 0xDB, 0x44, 0x44, - 0xA1, 0xD3, 0xD9, 0x81, 0x48, 0x94, 0x24, 0x5C, 0xD0, 0x9C, 0x66, 0x42, 0x04, 0x06, 0xD2, 0x9C, - 0x2F, 0xD9, 0x64, 0x46, 0x24, 0x44, 0xE0, 0x84, 0x44, 0xD3, 0xA3, 0xDB, 0xFF, 0xB4, 0x60, 0x5C, - 0x66, 0x44, 0x22, 0xA4, 0xD0, 0x84, 0xE0, 0xA0, 0x02, 0x0D, 0x00, 0x64, 0x02, 0x00, 0x01, 0x04, - 0x1F, 0x64, 0xA2, 0xD3, 0x60, 0x5C, 0x64, 0x5E, 0x60, 0x47, 0x2F, 0xD1, 0x28, 0xA3, 0xA3, 0xD9, - 0xD8, 0xA3, 0x2E, 0x42, 0x4E, 0x8E, 0xBD, 0xDB, 0xDB, 0x02, 0x2D, 0x58, 0xFF, 0xFF, 0x43, 0xFF, - 0x39, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x84, 0x3E, 0xFB, 0x01, 0x3D, 0x44, 0x00, 0xA8, 0xFF, 0xFF, - 0x03, 0x02, 0x40, 0xFF, 0x44, 0xFF, 0xF4, 0x01, 0xA0, 0x4C, 0x3D, 0x46, 0x2A, 0xF2, 0x46, 0x4D, - 0x92, 0xFC, 0x10, 0x25, 0x12, 0x00, 0x09, 0xE1, 0xA1, 0xFF, 0x2D, 0x46, 0x0F, 0xF2, 0x01, 0x29, - 0x06, 0x00, 0x2A, 0xF0, 0x40, 0xFF, 0x64, 0x40, 0x40, 0x2B, 0x08, 0xBC, 0x02, 0xBC, 0x0F, 0xFA, - 0x08, 0x25, 0xDD, 0x01, 0xCB, 0xFE, 0x5C, 0x5D, 0xDB, 0x01, 0x44, 0xFF, 0x31, 0xF2, 0x1D, 0x60, - 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, - 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, - 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, - 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x07, 0xFC, 0x3F, 0xF2, 0x09, 0x60, 0xB0, 0x65, - 0xD4, 0x80, 0x2A, 0xF2, 0xC0, 0x05, 0x08, 0x25, 0xAA, 0x01, 0x5C, 0x4B, 0x0C, 0x60, 0xEA, 0x61, - 0xA1, 0xDF, 0x2D, 0x46, 0x3B, 0xF2, 0xA6, 0xF1, 0x87, 0xF4, 0x60, 0x40, 0x20, 0x2B, 0xC1, 0x00, - 0xD3, 0x80, 0x2C, 0xF0, 0xB0, 0x03, 0x07, 0xF4, 0x64, 0x40, 0x01, 0x26, 0xA6, 0xF5, 0xBA, 0xF4, - 0x2D, 0x46, 0x04, 0x64, 0x04, 0xB3, 0x22, 0xF0, 0x03, 0x03, 0xC5, 0x60, 0xE2, 0x78, 0xFF, 0xFF, - 0x10, 0x64, 0xB0, 0x9C, 0x3B, 0xF2, 0x22, 0xF8, 0x60, 0x47, 0xC0, 0xB7, 0x02, 0xFE, 0xF0, 0x84, - 0xF0, 0x84, 0xF0, 0x84, 0x00, 0xA8, 0x40, 0x4A, 0x17, 0x03, 0xE0, 0x81, 0x61, 0x43, 0x42, 0xFE, - 0x00, 0x64, 0xF0, 0x84, 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, 0x2D, 0x46, 0x07, 0xF4, - 0xE0, 0x81, 0x3B, 0xF0, 0x2A, 0x47, 0x0C, 0x60, 0x38, 0x63, 0xA0, 0x84, 0x47, 0x9C, 0x10, 0x03, - 0x7C, 0x44, 0x00, 0x60, 0xB2, 0x63, 0x1C, 0x00, 0x07, 0xF4, 0x3B, 0xF0, 0x66, 0x44, 0x64, 0x40, - 0x80, 0x2B, 0x06, 0x00, 0x00, 0x60, 0x78, 0x7C, 0x00, 0x60, 0xA2, 0x63, 0x43, 0x4C, 0x10, 0x00, - 0x2D, 0x46, 0xC5, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x2D, 0x46, 0x22, 0xF2, 0x10, 0x60, 0x00, 0x7C, - 0xB0, 0x84, 0x22, 0xFA, 0x32, 0x40, 0x04, 0x26, 0x25, 0x00, 0xC5, 0x60, 0xD5, 0x78, 0xFF, 0xFF, - 0xED, 0xFB, 0xEE, 0xF9, 0xEF, 0xFD, 0xAD, 0x46, 0x3D, 0xF2, 0xAD, 0x46, 0xA3, 0xD0, 0xAD, 0x46, - 0xD0, 0x80, 0x3C, 0xF2, 0xAD, 0x46, 0x02, 0x03, 0x15, 0x07, 0xE6, 0x04, 0x5B, 0xD0, 0xAD, 0x46, - 0xD0, 0x80, 0x3A, 0xF2, 0x03, 0x03, 0xAD, 0x46, 0x0D, 0x07, 0xDE, 0x04, 0x3A, 0xF0, 0xAD, 0x46, - 0x5B, 0xD0, 0x64, 0x44, 0xD0, 0x80, 0x2B, 0x44, 0x05, 0x07, 0xD6, 0x03, 0xD0, 0x84, 0x10, 0xA4, - 0xFF, 0xFF, 0x00, 0x07, 0xEE, 0xF3, 0xED, 0xF5, 0xFE, 0xA4, 0x0F, 0x60, 0xBE, 0x61, 0x0E, 0x63, - 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x2D, 0x46, 0x8B, 0xFF, 0x2D, 0x46, 0x22, 0xF2, 0x20, 0x60, - 0x00, 0x7C, 0xB0, 0x84, 0x22, 0xFA, 0x0F, 0x60, 0xB0, 0x64, 0xC9, 0x60, 0x58, 0x4F, 0x56, 0x78, - 0xFF, 0xFF, 0x3F, 0xF2, 0x00, 0x60, 0x18, 0x70, 0x18, 0x71, 0x20, 0x72, 0x60, 0x53, 0x88, 0x75, - 0x00, 0xF2, 0x09, 0xE1, 0x60, 0x50, 0x12, 0x71, 0x6E, 0x72, 0x83, 0x75, 0xA1, 0xFF, 0xFF, 0xFF, - 0x08, 0x25, 0x1D, 0x00, 0x40, 0xFF, 0x02, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x75, 0x40, 0x03, 0x2A, - 0x03, 0x00, 0x80, 0x75, 0x0A, 0x64, 0x0B, 0x00, 0x80, 0x75, 0x1B, 0xF3, 0x8B, 0xFF, 0x02, 0x60, - 0x00, 0x75, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x75, 0xDC, 0x84, 0xA2, 0xDB, 0x02, 0x64, 0x98, 0xFF, - 0x2D, 0x46, 0x0F, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, 0xA2, 0xDA, 0x88, 0xFF, 0x0B, 0x01, 0x8B, 0xFF, - 0x02, 0x60, 0x00, 0x75, 0xFF, 0xFF, 0x02, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xC5, 0x60, 0xBB, 0x78, - 0xFF, 0xFF, 0x22, 0xF0, 0x22, 0x64, 0xB0, 0x84, 0x22, 0xFA, 0x3A, 0xF0, 0xFF, 0xFF, 0x64, 0x44, - 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5B, 0x64, 0x44, 0xE2, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0x7C, 0x5F, 0xE8, 0x84, 0xE8, 0x85, 0x0D, 0x60, 0x00, 0x64, 0x44, 0xD3, - 0x5A, 0xD1, 0x03, 0x1B, 0xC5, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x60, 0x45, 0x64, 0x44, 0xE3, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0xE4, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE5, 0x7F, 0xA0, 0x5B, - 0x64, 0x47, 0xE6, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE7, 0x7F, 0xA0, 0x5B, 0x65, 0x40, - 0x0D, 0x3A, 0x1C, 0x00, 0x64, 0x47, 0xE8, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xE9, 0x7F, - 0xA0, 0x5B, 0x64, 0x47, 0xEA, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEB, 0x7F, 0xA0, 0x5B, - 0x64, 0x47, 0xEC, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xED, 0x7F, 0xA0, 0x5B, 0x64, 0x47, - 0xEE, 0x7F, 0x5A, 0xD1, 0xA0, 0x5B, 0x64, 0x44, 0xEF, 0x7F, 0xA0, 0x5B, 0x65, 0x44, 0xD8, 0x84, - 0x08, 0x25, 0x25, 0x00, 0x60, 0x7F, 0xA0, 0x5B, 0x80, 0x60, 0x00, 0xEB, 0xA0, 0x60, 0x00, 0xEB, - 0xD1, 0x60, 0x00, 0xEB, 0x22, 0xF2, 0x20, 0x60, 0x00, 0x7C, 0xB0, 0x84, 0x22, 0xFA, 0x3F, 0xF2, - 0x3B, 0xF0, 0x60, 0x43, 0xFC, 0xA4, 0x64, 0x40, 0x20, 0x2B, 0x04, 0x00, 0x08, 0xA4, 0x3F, 0xFA, - 0x08, 0xA3, 0xF8, 0xA3, 0x3F, 0xFA, 0x0A, 0xE1, 0xB3, 0xFF, 0x9A, 0xFF, 0xCB, 0x83, 0x00, 0xF4, - 0x10, 0x62, 0x6C, 0x61, 0x0E, 0xA3, 0xAB, 0x84, 0xF2, 0xA3, 0xA1, 0xFF, 0x09, 0x00, 0xDA, 0x00, - 0x00, 0xF4, 0x81, 0xF2, 0xFC, 0x18, 0x02, 0x62, 0xC9, 0x81, 0xAB, 0x84, 0x01, 0x00, 0xA2, 0xDC, - 0x7A, 0xD4, 0xFD, 0x1C, 0xA2, 0xDC, 0x08, 0x25, 0xCE, 0x00, 0xF2, 0x1D, 0x41, 0x44, 0x7C, 0xA8, - 0xD9, 0x81, 0xEE, 0x03, 0xFF, 0xB1, 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, 0xFF, 0xFF, 0x64, 0x40, - 0x20, 0x27, 0x04, 0x00, 0x08, 0x25, 0xBF, 0x00, 0x7B, 0x1E, 0x6F, 0x00, 0x08, 0x25, 0xBB, 0x00, - 0x40, 0xFF, 0x42, 0x42, 0x46, 0x43, 0x06, 0x1E, 0x04, 0x02, 0x00, 0xF4, 0x02, 0x62, 0x42, 0x42, - 0x46, 0x43, 0x01, 0xA2, 0x63, 0x45, 0x01, 0xA2, 0x62, 0x43, 0x46, 0x4C, 0xC6, 0x60, 0x58, 0x4F, - 0x87, 0x78, 0xFF, 0xFF, 0x0A, 0xE1, 0x9A, 0xFF, 0x2D, 0x46, 0x12, 0xF2, 0x3B, 0xF0, 0x33, 0x1B, - 0x64, 0x40, 0x20, 0x2B, 0x38, 0x00, 0x2D, 0x5C, 0x24, 0x41, 0x02, 0xA1, 0x65, 0x43, 0x08, 0xA3, - 0x23, 0x46, 0x22, 0x42, 0x7E, 0x3A, 0x0A, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0xB8, 0x18, 0x02, 0x62, - 0xC9, 0x81, 0xAB, 0x84, 0x03, 0x00, 0xA2, 0xDC, 0x7E, 0x36, 0xF6, 0x01, 0x15, 0x11, 0x7A, 0xD4, - 0xFF, 0xFF, 0xF9, 0x1C, 0xA2, 0xDC, 0xF0, 0x1D, 0xD9, 0x81, 0xFF, 0xB1, 0x41, 0x1E, 0x62, 0x40, - 0x7E, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x62, 0x07, 0x11, 0x5A, 0xD2, 0x89, 0xFF, 0x80, 0x4F, - 0x6F, 0x44, 0xA2, 0xDA, 0x88, 0xFF, 0x34, 0x00, 0x62, 0x45, 0x33, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, - 0x65, 0x42, 0xE5, 0x1D, 0xF2, 0x01, 0x98, 0xFF, 0x2D, 0x46, 0x01, 0x64, 0x12, 0xFA, 0x0F, 0xF0, - 0x0A, 0x64, 0xB0, 0x84, 0x41, 0x00, 0x24, 0x41, 0x02, 0xA1, 0x65, 0x43, 0x08, 0xA3, 0x23, 0x46, - 0x22, 0x42, 0x7E, 0x3A, 0x0A, 0x00, 0x00, 0xF4, 0x81, 0xF2, 0x5C, 0x18, 0x02, 0x62, 0xC9, 0x81, - 0xAB, 0x84, 0x03, 0x00, 0xA2, 0xDC, 0x7E, 0x36, 0xF6, 0x01, 0x7A, 0xD4, 0xFF, 0xFF, 0xFA, 0x1C, - 0xA2, 0xDC, 0xF1, 0x1D, 0xD9, 0x81, 0xFF, 0xB1, 0x0B, 0x1E, 0x62, 0x40, 0x7E, 0x3A, 0x02, 0x00, - 0x00, 0xF4, 0x02, 0x62, 0x5A, 0xD2, 0x89, 0xFF, 0x80, 0x4F, 0x6F, 0x44, 0xA2, 0xDA, 0x88, 0xFF, - 0x98, 0xFF, 0x2D, 0x46, 0x0F, 0xF0, 0x0A, 0x64, 0xB0, 0x84, 0x16, 0x14, 0xF7, 0xB4, 0xA2, 0xDA, - 0x06, 0x60, 0x75, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0B, 0x00, 0xF0, 0xF5, 0xEF, 0xF4, - 0x0C, 0x60, 0xEA, 0x61, 0x59, 0xD1, 0x3B, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, - 0xFC, 0x02, 0xC3, 0x60, 0x6A, 0x78, 0xFF, 0xFF, 0xA2, 0xDA, 0x2D, 0x46, 0x3B, 0xF0, 0xFF, 0xFF, - 0x64, 0x40, 0x20, 0x2B, 0x1C, 0x00, 0x07, 0xF4, 0xBB, 0xF0, 0x2A, 0x44, 0xA4, 0x84, 0xFF, 0xFF, - 0x2F, 0x26, 0x15, 0x00, 0x2D, 0x46, 0x64, 0x44, 0x3A, 0xF0, 0xBC, 0xF0, 0x64, 0x5F, 0x3D, 0xF0, - 0x07, 0xF4, 0xEF, 0xF4, 0xFF, 0xFF, 0x08, 0xA3, 0x5B, 0xD8, 0x65, 0x5C, 0x5B, 0xD8, 0x5B, 0xDA, - 0x2D, 0x46, 0xED, 0xF3, 0x3C, 0xFA, 0xEE, 0xF3, 0x3D, 0xFA, 0x2A, 0x44, 0x23, 0xFA, 0xC3, 0x60, - 0x6A, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0x98, 0xFF, 0x43, 0xFF, 0x40, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, - 0x2D, 0x46, 0x0C, 0x60, 0xEA, 0x61, 0xA1, 0xD3, 0x2D, 0x46, 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, - 0xF0, 0xF5, 0xEF, 0xF4, 0x59, 0xD1, 0x3B, 0xF8, 0x05, 0x64, 0x59, 0xD1, 0xCC, 0x84, 0xBD, 0xD8, - 0xFC, 0x02, 0x2D, 0x46, 0xC3, 0x60, 0x48, 0x78, 0xFF, 0xFF, 0x98, 0xFF, 0x09, 0xE1, 0xA1, 0xFF, - 0x2D, 0x46, 0x08, 0x25, 0xE0, 0x01, 0x0F, 0xF2, 0x40, 0xFF, 0x02, 0xBC, 0xA2, 0xDA, 0xC3, 0x60, - 0x6A, 0x78, 0xFF, 0xFF, 0xB0, 0x84, 0x22, 0xFA, 0xA0, 0x60, 0x00, 0xEB, 0xB0, 0x60, 0x00, 0xEB, - 0x00, 0x63, 0x3B, 0xF2, 0x06, 0x60, 0x75, 0xFD, 0x60, 0x47, 0xC0, 0xB7, 0x02, 0xFE, 0xF0, 0x84, - 0xF0, 0x84, 0xF0, 0x84, 0x00, 0xA8, 0x40, 0x4A, 0x16, 0x03, 0xE0, 0x81, 0x61, 0x43, 0x42, 0xFE, - 0x00, 0x64, 0xF0, 0x84, 0xFE, 0x1F, 0x40, 0x4A, 0xE1, 0x84, 0xE0, 0x84, 0x2D, 0x46, 0x07, 0xF4, - 0xE0, 0x81, 0x3B, 0xF0, 0x2A, 0x47, 0x0C, 0x60, 0x38, 0x63, 0xA0, 0x84, 0x47, 0x9C, 0x10, 0x03, - 0x7C, 0x44, 0xA8, 0x63, 0x0F, 0x00, 0x07, 0xF4, 0x20, 0x64, 0x40, 0x4A, 0x3B, 0xF0, 0x66, 0x44, - 0x64, 0x40, 0x80, 0x2B, 0x05, 0x00, 0x00, 0x60, 0x78, 0x7C, 0x00, 0x60, 0x98, 0x63, 0x02, 0x00, - 0x2D, 0x46, 0xBB, 0x01, 0x2D, 0x46, 0xED, 0xFB, 0xEE, 0xF9, 0xEF, 0xFD, 0x07, 0xF2, 0xF0, 0xFB, - 0x60, 0x46, 0x3B, 0xF0, 0x2A, 0x44, 0x06, 0x60, 0x76, 0xF9, 0x5C, 0x4B, 0xA0, 0x84, 0xFF, 0xFF, - 0x3F, 0x22, 0x05, 0x00, 0x90, 0x84, 0x3B, 0xFA, 0x01, 0x64, 0x40, 0x4B, 0x2C, 0x00, 0xAD, 0x46, - 0x0A, 0xA3, 0x3D, 0xF2, 0xAD, 0x46, 0xA3, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3C, 0xF2, 0xAD, 0x46, - 0x02, 0x03, 0x21, 0x07, 0x14, 0x04, 0x5B, 0xD0, 0xAD, 0x46, 0xD0, 0x80, 0x3B, 0xF2, 0x03, 0x03, - 0xAD, 0x46, 0x19, 0x07, 0x0C, 0x04, 0x3A, 0xF0, 0xAD, 0x46, 0x5B, 0xD0, 0x64, 0x5F, 0xD0, 0x80, - 0x2B, 0x44, 0x22, 0x07, 0x04, 0x03, 0xD0, 0x84, 0x10, 0xA4, 0xFF, 0xFF, 0x1D, 0x07, 0x2D, 0x46, - 0x22, 0xF2, 0x10, 0x60, 0x00, 0x7C, 0xB0, 0x84, 0x22, 0xFA, 0x32, 0x40, 0x04, 0x26, 0x14, 0x00, - 0xC5, 0x60, 0xD5, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x06, 0x60, 0x75, 0xFB, 0x2D, 0x46, 0x0C, 0x60, - 0xFA, 0x62, 0x80, 0xFF, 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC6, 0x60, 0xBC, 0x78, 0xFF, 0xFF, - 0x85, 0xFF, 0x2D, 0x46, 0x08, 0x25, 0x4F, 0x01, 0x2D, 0x46, 0x0C, 0x60, 0xFA, 0x62, 0x80, 0xFF, - 0x78, 0x44, 0x03, 0xA4, 0xA2, 0xDB, 0xC7, 0x60, 0x44, 0x78, 0xFF, 0xFF, 0x85, 0xFF, 0x2D, 0x46, - 0x08, 0x25, 0x41, 0x01, 0x00, 0x60, 0x0F, 0x64, 0x08, 0x25, 0x3C, 0x01, 0x60, 0x7F, 0xA0, 0x5B, - 0x80, 0x60, 0x00, 0xEB, 0xD3, 0x60, 0x00, 0xEB, 0xC4, 0x60, 0xC2, 0x78, 0xFF, 0xFF, 0x2D, 0x46, - 0x3B, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x20, 0x2B, 0x23, 0x00, 0x08, 0x61, 0x23, 0x11, 0x2D, 0x46, - 0x00, 0xF4, 0x0A, 0x62, 0x56, 0x92, 0x5A, 0xD0, 0x2C, 0x46, 0x64, 0x47, 0x63, 0x40, 0x7F, 0x2A, - 0x03, 0x00, 0x00, 0xF4, 0x03, 0x63, 0x46, 0x4C, 0x60, 0xFE, 0xDE, 0xD8, 0x7F, 0x3A, 0x03, 0x00, - 0x00, 0xF4, 0x03, 0x63, 0x46, 0x4C, 0xDE, 0xDA, 0xFE, 0xA1, 0x20, 0xFE, 0xE7, 0x02, 0x63, 0x41, - 0xFD, 0xA1, 0x46, 0x4C, 0x01, 0xF2, 0x2D, 0x46, 0x61, 0x5E, 0x16, 0xFA, 0x2C, 0x44, 0x06, 0xFA, - 0x2F, 0x58, 0xFF, 0xFF, 0x2D, 0x5C, 0x3D, 0x44, 0x00, 0xA8, 0xD0, 0x80, 0xD8, 0x03, 0xD7, 0x03, - 0x2D, 0x46, 0x01, 0x64, 0x12, 0xFA, 0xF4, 0x01, 0x07, 0xF4, 0x66, 0x41, 0x03, 0xF2, 0x04, 0xF2, - 0x40, 0x42, 0x05, 0xF2, 0x40, 0x43, 0x40, 0x44, 0x61, 0x46, 0x3C, 0xF2, 0x3D, 0xF2, 0x40, 0x40, - 0x40, 0x41, 0x0D, 0x60, 0x70, 0x65, 0x00, 0x61, 0xEE, 0xF1, 0xED, 0xF5, 0x44, 0x4C, 0x2C, 0x5C, - 0xE9, 0x80, 0x00, 0x64, 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x24, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x20, 0x44, 0x40, 0x80, 0xDB, 0x83, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x21, 0x44, 0x40, 0x81, 0xDB, 0x83, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, 0xDB, 0x83, 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xF2, 0xA3, 0xBD, 0xD2, 0x23, 0x5C, 0x90, 0x9C, - 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0xC0, 0x9C, 0x41, 0x84, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, - 0x0C, 0x60, 0xEC, 0x61, 0x05, 0x64, 0xEF, 0xF4, 0xF0, 0xF5, 0xFE, 0xA3, 0x5B, 0xD0, 0xCC, 0x84, - 0x59, 0xD9, 0xFC, 0x02, 0xEF, 0xF3, 0xF0, 0xF5, 0x60, 0x42, 0x20, 0x44, 0xA2, 0xDA, 0x21, 0x44, - 0x5A, 0xDA, 0x22, 0x44, 0x5A, 0xDA, 0x23, 0x44, 0x5A, 0xDA, 0x24, 0x44, 0x5A, 0xDA, 0x61, 0x46, - 0x06, 0x60, 0x7D, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x41, 0xEF, 0xF3, 0xF0, 0xF5, 0xA0, 0xD2, - 0x5A, 0xD0, 0x40, 0x40, 0x44, 0x41, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x42, 0x5A, 0xD0, 0x44, 0x43, - 0x61, 0x46, 0xBA, 0xF0, 0x3B, 0xF2, 0x44, 0x44, 0x65, 0x5F, 0x40, 0x85, 0xEE, 0xF4, 0xED, 0xF5, - 0x43, 0x4C, 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x20, 0x44, 0x40, 0x80, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x21, 0x44, - 0x40, 0x81, 0xBD, 0xD2, 0x21, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x22, 0x44, 0x40, 0x82, - 0xBD, 0xD2, 0x22, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x23, 0x44, 0x40, 0x83, 0xBD, 0xD2, - 0x23, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x24, 0x44, 0x40, 0x84, 0xBD, 0xD2, 0x24, 0x5C, - 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x25, 0x44, 0x40, 0x85, 0x61, 0x46, 0x3A, 0xF0, 0xFF, 0xFF, - 0x64, 0x44, 0xE0, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xE1, 0x7F, 0x5A, 0xD0, 0xA0, 0x5B, 0x64, 0x44, - 0xE2, 0x7F, 0xA0, 0x5B, 0x64, 0x47, 0xED, 0xF5, 0xBD, 0xD2, 0x25, 0x5C, 0x90, 0x84, 0xE8, 0x80, - 0xF8, 0x84, 0x20, 0x5C, 0x40, 0x80, 0x20, 0x44, 0xE4, 0x7F, 0xA0, 0x5B, 0x20, 0x47, 0xE5, 0x7F, - 0xA0, 0x5B, 0xBD, 0xD2, 0x20, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x21, 0x5C, 0x40, 0x81, - 0x21, 0x44, 0xE6, 0x7F, 0xA0, 0x5B, 0x21, 0x47, 0xE7, 0x7F, 0xA0, 0x5B, 0x21, 0x44, 0xE8, 0x80, - 0xF8, 0x84, 0x22, 0x5C, 0x40, 0x82, 0x22, 0x44, 0xE8, 0x7F, 0xA0, 0x5B, 0x22, 0x47, 0xE9, 0x7F, - 0xA0, 0x5B, 0x22, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x23, 0x5C, 0x40, 0x83, 0x23, 0x44, 0xEA, 0x7F, - 0xA0, 0x5B, 0x23, 0x47, 0xEB, 0x7F, 0xA0, 0x5B, 0x23, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x24, 0x5C, - 0x40, 0x84, 0x24, 0x44, 0xEC, 0x7F, 0xA0, 0x5B, 0x24, 0x47, 0xED, 0x7F, 0xA0, 0x5B, 0x24, 0x44, - 0xE8, 0x80, 0xF8, 0x84, 0x25, 0x5C, 0x40, 0x85, 0x25, 0x44, 0xEE, 0x7F, 0xA0, 0x5B, 0x25, 0x47, - 0xEF, 0x7F, 0xA0, 0x5B, 0x2C, 0x43, 0xA3, 0xD2, 0x25, 0x5C, 0x90, 0x81, 0xE9, 0x84, 0xE3, 0x7F, - 0xA0, 0x5B, 0x06, 0x60, 0x7D, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xF3, 0x5A, 0xD3, 0x40, 0x48, - 0x5A, 0xD3, 0x40, 0x49, 0x40, 0x4A, 0x00, 0x60, 0x78, 0x7C, 0x44, 0x4D, 0x49, 0xF2, 0x4A, 0xF2, - 0x40, 0x47, 0x40, 0x46, 0x0D, 0x60, 0x70, 0x65, 0x00, 0x61, 0x2D, 0x5C, 0xE9, 0x80, 0x00, 0x64, - 0xF0, 0x84, 0xF0, 0x84, 0xC0, 0x83, 0xBD, 0xD2, 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x26, 0x44, 0x40, 0x86, 0xDB, 0x83, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x27, 0x44, 0x40, 0x87, 0xDB, 0x83, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x28, 0x44, 0x40, 0x88, 0xDB, 0x83, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x29, 0x44, 0x40, 0x89, 0xF2, 0xA3, 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x2A, 0x44, 0xC0, 0x9C, 0x41, 0x8A, 0xDD, 0x81, 0x08, 0x2A, 0xA7, 0x01, 0x26, 0x44, 0x44, 0xFA, - 0x27, 0x44, 0x45, 0xFA, 0x28, 0x44, 0x46, 0xFA, 0x29, 0x44, 0x47, 0xFA, 0x2A, 0x44, 0x48, 0xFA, - 0x06, 0x60, 0x7E, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x88, 0x7C, 0x44, 0x4D, 0x2D, 0x42, - 0xA2, 0xD2, 0x5A, 0xD0, 0x40, 0x46, 0x44, 0x47, 0x5A, 0xD2, 0x5A, 0xD0, 0x40, 0x48, 0x5A, 0xD0, - 0x44, 0x49, 0x4B, 0xF2, 0x44, 0x4A, 0x40, 0x8B, 0x60, 0x5C, 0x64, 0x47, 0xE0, 0x7F, 0xA0, 0x5A, - 0xFF, 0xB4, 0x20, 0xBC, 0x7F, 0xB4, 0xE1, 0x7F, 0xA0, 0x5A, 0x64, 0x44, 0xE2, 0x7F, 0xA0, 0x5A, - 0x00, 0x60, 0x78, 0x63, 0x0D, 0x60, 0x70, 0x65, 0xBD, 0xD2, 0x2B, 0x5C, 0x90, 0x9C, 0x64, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, - 0x90, 0x9C, 0x26, 0x44, 0x40, 0x86, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, - 0x27, 0x44, 0x40, 0x87, 0xBD, 0xD2, 0x27, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, - 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x28, 0x44, - 0x40, 0x88, 0xBD, 0xD2, 0x28, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, - 0x64, 0x44, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x29, 0x44, 0x40, 0x89, - 0xBD, 0xD2, 0x29, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2A, 0x44, 0x40, 0x8A, 0xBD, 0xD2, - 0x2A, 0x5C, 0x90, 0x9C, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x44, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD1, 0x64, 0x47, 0x90, 0x9C, 0x2B, 0x44, 0x40, 0x8B, 0xBD, 0xD2, 0x2B, 0x5C, - 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, 0x26, 0x5C, 0x40, 0x86, 0x26, 0x44, 0xE4, 0x7F, 0xA0, 0x5A, - 0x26, 0x47, 0xE5, 0x7F, 0xA0, 0x5A, 0xBD, 0xD2, 0x26, 0x5C, 0x90, 0x84, 0xE8, 0x80, 0xF8, 0x84, - 0x27, 0x5C, 0x40, 0x87, 0x27, 0x44, 0xE6, 0x7F, 0xA0, 0x5A, 0x27, 0x47, 0xE7, 0x7F, 0xA0, 0x5A, - 0x27, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x28, 0x5C, 0x40, 0x88, 0x28, 0x44, 0xE8, 0x7F, 0xA0, 0x5A, - 0x28, 0x47, 0xE9, 0x7F, 0xA0, 0x5A, 0x28, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x29, 0x5C, 0x40, 0x89, - 0x29, 0x44, 0xEA, 0x7F, 0xA0, 0x5A, 0x29, 0x47, 0xEB, 0x7F, 0xA0, 0x5A, 0x29, 0x44, 0xE8, 0x80, - 0xF8, 0x84, 0x2A, 0x5C, 0x40, 0x8A, 0x2A, 0x44, 0xEC, 0x7F, 0xA0, 0x5A, 0x2A, 0x47, 0xED, 0x7F, - 0xA0, 0x5A, 0x2A, 0x44, 0xE8, 0x80, 0xF8, 0x84, 0x2B, 0x5C, 0x40, 0x8B, 0x2B, 0x44, 0xEE, 0x7F, - 0xA0, 0x5A, 0x2B, 0x47, 0xEF, 0x7F, 0xA0, 0x5A, 0x3C, 0xF0, 0x2B, 0x44, 0x90, 0x84, 0xE8, 0x84, - 0xE3, 0x7F, 0xA0, 0x5A, 0x06, 0x60, 0x7E, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x45, 0x00, 0xF0, - 0x84, 0x60, 0x00, 0xE3, 0x04, 0x71, 0x64, 0x50, 0x01, 0x2A, 0x04, 0x71, 0x5C, 0x61, 0x04, 0x63, - 0x59, 0xD0, 0x58, 0xD9, 0xFD, 0x1F, 0x3D, 0xF2, 0x60, 0x43, 0x60, 0x47, 0x5B, 0xDB, 0x3C, 0xF2, - 0xFF, 0xFF, 0x60, 0x47, 0x5B, 0xDB, 0x3A, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x5B, 0xDB, 0x3F, 0xF2, - 0xFF, 0xFF, 0x60, 0x47, 0x5B, 0xDB, 0x81, 0x60, 0x18, 0xE3, 0x65, 0x43, 0xE3, 0x84, 0x60, 0x47, - 0x00, 0x7F, 0x60, 0x50, 0x7F, 0x64, 0x23, 0x94, 0x60, 0x51, 0x7C, 0x72, 0x04, 0x75, 0x0C, 0x60, - 0x16, 0x61, 0x16, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x2A, 0xF2, 0x87, 0x60, 0x8F, 0x65, 0xA4, 0x87, - 0x40, 0xBF, 0x59, 0xDB, 0x56, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x62, 0x64, - 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x35, 0xF2, 0x0F, 0x65, 0xA4, 0x9C, 0x59, 0xD9, - 0x06, 0x63, 0x59, 0xDF, 0xFE, 0x1F, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0x03, 0x2B, 0x05, 0x00, - 0x6A, 0x64, 0x04, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x65, 0x40, 0x8F, 0xB0, 0x88, 0x3A, - 0x02, 0x00, 0x39, 0xF0, 0x59, 0xD9, 0x2F, 0x58, 0xFF, 0xFF, 0x0C, 0x60, 0x16, 0x61, 0xA3, 0x46, - 0x00, 0xF4, 0x02, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x59, 0xDF, 0x59, 0xDF, - 0xA0, 0x4C, 0x04, 0xBC, 0xFF, 0xB4, 0xA0, 0x51, 0x23, 0x44, 0x01, 0xA7, 0x80, 0xBF, 0x60, 0x50, - 0x80, 0x60, 0x38, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x01, 0x76, 0xFF, 0xFF, 0x76, 0x44, 0x01, 0x3A, - 0xFD, 0x01, 0x40, 0x76, 0x40, 0x76, 0x42, 0xFF, 0xFF, 0xFF, 0x40, 0x76, 0x80, 0x60, 0x18, 0x70, - 0x80, 0x60, 0x18, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x80, 0x60, 0x10, 0x73, 0x02, 0x76, 0x76, 0x44, - 0xFF, 0xFF, 0x76, 0x44, 0x02, 0x3A, 0xFD, 0x01, 0x40, 0x76, 0x42, 0xFF, 0x3C, 0x46, 0x00, 0xF2, - 0x80, 0x60, 0x00, 0xBC, 0x60, 0x50, 0x80, 0x60, 0x12, 0x71, 0x80, 0x60, 0x6E, 0x72, 0x3F, 0xF2, - 0xFF, 0xFF, 0xF8, 0xA7, 0x80, 0xBF, 0x60, 0x53, 0x04, 0x76, 0xFF, 0xFF, 0x88, 0xFF, 0x3C, 0x46, - 0x07, 0xF2, 0xFF, 0xFF, 0x40, 0x43, 0xA3, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x77, 0x40, 0x8B, 0xFF, - 0xA0, 0x4B, 0x04, 0xE1, 0xFF, 0xFF, 0x76, 0x44, 0x04, 0x3A, 0xFD, 0x01, 0x40, 0x76, 0x42, 0xFF, - 0xFF, 0xFF, 0x10, 0x76, 0xFF, 0xFF, 0x76, 0x44, 0x20, 0x3A, 0xFD, 0x01, 0x40, 0x76, 0x42, 0xFF, - 0x63, 0x44, 0x00, 0x7F, 0xA0, 0x51, 0x02, 0x60, 0x00, 0x75, 0x88, 0xFF, 0xA0, 0x4C, 0xFB, 0xB4, - 0xA0, 0x51, 0x06, 0x60, 0x1F, 0xE1, 0x16, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xF2, - 0xFF, 0xFF, 0xF8, 0xA4, 0x3F, 0xFA, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, 0xA0, 0x48, 0x08, 0x26, - 0x07, 0x00, 0xA0, 0x4C, 0x04, 0xE1, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xA0, 0x51, - 0x42, 0xFF, 0x26, 0x46, 0x8B, 0xFF, 0x02, 0x60, 0x00, 0x75, 0x3C, 0xF2, 0x40, 0x76, 0x14, 0x1B, - 0x26, 0x46, 0x3B, 0xF2, 0x0C, 0x60, 0xBA, 0x63, 0x60, 0x47, 0xC0, 0xB4, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0x43, 0x93, 0xE3, 0x9C, 0x64, 0x47, 0x80, 0x7C, 0x64, 0x5F, 0x60, 0x50, 0x7F, 0x64, - 0x23, 0x97, 0x80, 0xBF, 0x60, 0x51, 0x07, 0x00, 0x01, 0xA7, 0x80, 0xBF, 0x60, 0x50, 0x80, 0x60, - 0x40, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x01, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, - 0xFC, 0x01, 0x04, 0x25, 0xD5, 0x01, 0x40, 0x76, 0x43, 0xFF, 0x0C, 0x60, 0x22, 0x61, 0x26, 0x46, - 0x00, 0xF4, 0x02, 0x64, 0x0A, 0x63, 0x58, 0xD0, 0x59, 0xD9, 0xFD, 0x1F, 0x59, 0xDF, 0x59, 0xDF, - 0x80, 0x60, 0x18, 0x70, 0x80, 0x60, 0x24, 0x71, 0x80, 0x60, 0x7C, 0x72, 0x80, 0x60, 0x10, 0x73, - 0x02, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, 0xFC, 0x01, 0x04, 0x25, 0xB8, 0x01, - 0x40, 0x76, 0x43, 0xFF, 0x26, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x80, 0xBF, 0x60, 0x50, - 0x80, 0x60, 0x12, 0x71, 0x3F, 0xF2, 0x80, 0x60, 0x6E, 0x72, 0x60, 0x47, 0x80, 0xBF, 0x60, 0x53, - 0x04, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, 0xFC, 0x01, 0x04, 0x25, 0xA0, 0x01, - 0x40, 0x76, 0x43, 0xFF, 0x08, 0x76, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF, 0x0C, 0x21, 0xFC, 0x01, - 0x04, 0x25, 0x96, 0x01, 0x76, 0x5C, 0xFF, 0xFF, 0x40, 0x76, 0x43, 0xFF, 0x88, 0xFF, 0x26, 0x46, - 0x2F, 0x58, 0xFF, 0xFF, 0xEE, 0x60, 0x60, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x00, 0xDB, 0xF3, 0x31, 0x41, 0x01, 0xB1, - 0x03, 0xA8, 0x2A, 0x03, 0x15, 0x02, 0x20, 0x40, 0x04, 0x2B, 0x0B, 0x00, 0xBB, 0xFE, 0xCA, 0xFE, - 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x07, 0x00, 0x08, 0x60, 0x09, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x0C, 0x00, - 0xA9, 0xFE, 0xDB, 0x05, 0xAB, 0xFE, 0x0C, 0x05, 0xA8, 0xFE, 0xCC, 0x05, 0xAA, 0xFE, 0xCD, 0x05, - 0x78, 0x43, 0x01, 0x61, 0x29, 0x60, 0xEA, 0x78, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x85, 0x3E, - 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x03, 0x02, 0xCA, 0x60, 0xD4, 0x78, - 0xFF, 0xFF, 0x26, 0x45, 0xD4, 0x80, 0x0F, 0xF0, 0xF9, 0x03, 0x64, 0x44, 0x70, 0xB0, 0x70, 0x2A, - 0x13, 0x00, 0x16, 0x60, 0x85, 0xF3, 0xFF, 0xFF, 0xDC, 0x84, 0x00, 0x36, 0x00, 0x3B, 0xA2, 0xDB, - 0xA2, 0xFF, 0xAC, 0xF3, 0xFF, 0xFF, 0xCC, 0x84, 0xFE, 0xA0, 0xAC, 0xFB, 0x01, 0x07, 0xD4, 0xFE, - 0xA3, 0xFF, 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0x64, 0x40, 0x02, 0x26, 0x09, 0x00, 0x66, 0x45, - 0x09, 0xF4, 0x0F, 0xF2, 0x02, 0x18, 0x65, 0x46, 0xE4, 0x1B, 0x00, 0x64, 0x40, 0x46, 0xCC, 0x01, - 0xA2, 0xFF, 0xAC, 0xF3, 0x46, 0x46, 0xCC, 0x84, 0xFE, 0xA0, 0xAC, 0xFB, 0x01, 0x07, 0xD4, 0xFE, - 0xA3, 0xFF, 0x0F, 0xF0, 0xA3, 0xFC, 0x64, 0x44, 0x80, 0x26, 0x35, 0x00, 0x2C, 0x60, 0xEA, 0x64, - 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, 0x07, 0x60, - 0x01, 0x64, 0x22, 0x00, 0x02, 0x2A, 0x03, 0x00, 0x00, 0x60, 0x01, 0x64, 0x1D, 0x00, 0x04, 0x2A, - 0x1F, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x0C, 0xB0, 0x08, 0x3A, 0x1A, 0x00, 0x2C, 0xF0, 0x22, 0xF0, - 0x64, 0x40, 0x01, 0x26, 0x0B, 0x00, 0x64, 0x40, 0x40, 0x2B, 0x12, 0x00, 0x8F, 0xB0, 0x88, 0x3A, - 0x0F, 0x00, 0x39, 0xF2, 0xFF, 0xFF, 0x60, 0xB0, 0x20, 0x3A, 0x0A, 0x00, 0x23, 0xF2, 0x00, 0x60, - 0x01, 0x7C, 0xB0, 0x84, 0x23, 0xFA, 0x0C, 0x00, 0x23, 0xFA, 0xD0, 0x60, 0xC1, 0x78, 0xFF, 0xFF, - 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x10, 0x27, 0xF8, 0x01, - 0x0F, 0xF0, 0xFF, 0xFF, 0x64, 0x44, 0x08, 0x26, 0x64, 0x00, 0x2A, 0xF2, 0x60, 0x63, 0x60, 0x40, - 0x02, 0x2B, 0x66, 0x63, 0xBE, 0xD2, 0x81, 0xF1, 0xA3, 0xD2, 0xD0, 0x80, 0x80, 0xF1, 0x0D, 0x02, - 0xBF, 0xD2, 0xD0, 0x80, 0x7F, 0xF1, 0x09, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0x2C, 0x60, - 0xF6, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x32, 0x44, 0x01, 0x2A, 0x03, 0x00, - 0x07, 0x60, 0x02, 0x64, 0x04, 0x00, 0x02, 0x2A, 0x06, 0x00, 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, - 0xD0, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0xB0, 0x3A, 0x06, 0x00, - 0x00, 0x60, 0x02, 0x64, 0x23, 0xFA, 0xCC, 0x60, 0x31, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x04, 0x2A, - 0x2D, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x0C, 0xB0, 0x08, 0x3A, 0x28, 0x00, 0x2C, 0xF0, 0x22, 0xF0, - 0x64, 0x40, 0x01, 0x26, 0x0B, 0x00, 0x64, 0x40, 0x40, 0x2B, 0x20, 0x00, 0x8F, 0xB0, 0x88, 0x3A, - 0x1D, 0x00, 0x39, 0xF2, 0xFF, 0xFF, 0x60, 0xB0, 0x20, 0x3A, 0x18, 0x00, 0x2C, 0xF0, 0x66, 0x45, - 0x07, 0xF4, 0x64, 0x40, 0x01, 0x26, 0xA6, 0xF5, 0x3A, 0xF2, 0x65, 0x46, 0x60, 0x40, 0x00, 0x36, - 0x0D, 0x00, 0x22, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x10, 0x2A, 0x08, 0x00, 0x20, 0x2B, 0x06, 0x00, - 0x23, 0xF2, 0x00, 0x60, 0x02, 0x7C, 0xB0, 0x84, 0x23, 0xFA, 0x03, 0x00, 0xD0, 0x60, 0xB5, 0x78, - 0xFF, 0xFF, 0x32, 0x44, 0x01, 0x2A, 0x4A, 0x00, 0x2E, 0x60, 0x40, 0x63, 0xBF, 0xD3, 0x00, 0x65, - 0xB4, 0x81, 0xDB, 0x83, 0x3D, 0x03, 0xBF, 0xD3, 0xA3, 0xD3, 0x40, 0x48, 0xBE, 0xD3, 0x40, 0x4A, - 0x2E, 0xF0, 0x40, 0x4C, 0xD0, 0x80, 0x2D, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x2C, 0xF0, - 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x2B, 0x03, 0x31, 0xF0, 0x2C, 0x44, 0xD0, 0x80, - 0x30, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x2F, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, - 0xFF, 0xFF, 0x1E, 0x03, 0x34, 0xF0, 0x2C, 0x44, 0xD0, 0x80, 0x33, 0xF0, 0x08, 0x02, 0x2A, 0x44, - 0xD0, 0x80, 0x32, 0xF0, 0x04, 0x02, 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x11, 0x03, 0x38, 0xF0, - 0x2C, 0x44, 0xD0, 0x80, 0x37, 0xF0, 0x08, 0x02, 0x2A, 0x44, 0xD0, 0x80, 0x36, 0xF0, 0x04, 0x02, - 0x28, 0x44, 0xD0, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0xFA, 0xA1, 0x06, 0xA3, 0xB7, 0x03, 0xC3, 0x01, - 0x07, 0x60, 0x00, 0x64, 0x23, 0xFA, 0xD0, 0x60, 0xC1, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x0F, 0xF0, - 0x60, 0x45, 0xA4, 0x36, 0x08, 0x00, 0x0C, 0xB4, 0x04, 0x36, 0x02, 0x00, 0x0C, 0x3A, 0x06, 0x00, - 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0xCE, 0x60, 0x7C, 0x78, 0xFF, 0xFF, 0x0F, 0xF0, 0x65, 0x40, - 0x40, 0x2B, 0x17, 0x00, 0x32, 0x40, 0x08, 0x26, 0x14, 0x00, 0x07, 0xF4, 0x3A, 0xF2, 0xFF, 0xFF, - 0x37, 0xB4, 0x26, 0x46, 0x0E, 0x02, 0x2C, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x06, 0x00, - 0x2C, 0x60, 0xF0, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0xD0, 0x60, 0xB5, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0x64, 0x40, 0x60, 0x26, 0x03, 0x00, 0xCE, 0x60, 0x4E, 0x78, 0xFF, 0xFF, - 0x60, 0x41, 0xA6, 0xF3, 0x07, 0xFA, 0x61, 0x44, 0x80, 0x3A, 0x02, 0x00, 0x2A, 0xF2, 0x12, 0x00, - 0x60, 0x40, 0x40, 0x3A, 0x0F, 0x00, 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0x3A, 0xE6, 0x01, - 0xD1, 0x60, 0x58, 0x4D, 0xA6, 0x78, 0xFF, 0xFF, 0xE1, 0x02, 0xA6, 0xF3, 0x07, 0xFA, 0xCD, 0x60, - 0xE1, 0x78, 0xFF, 0xFF, 0x5E, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x64, 0x63, 0x50, 0xFE, 0xBD, 0xD2, - 0x7F, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, 0x80, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, 0x81, 0xF1, 0x2A, 0xF2, - 0xD0, 0x80, 0x60, 0x40, 0x08, 0x3A, 0x09, 0x00, 0x01, 0x0C, 0xC8, 0x01, 0xE9, 0x60, 0x58, 0x4F, - 0x08, 0x78, 0xFF, 0xFF, 0xCD, 0x60, 0xE1, 0x78, 0xFF, 0xFF, 0x23, 0x0C, 0xD1, 0x60, 0x58, 0x4D, - 0xA6, 0x78, 0xFF, 0xFF, 0xBB, 0x02, 0x02, 0x64, 0x10, 0x60, 0x0A, 0xFB, 0x00, 0x64, 0x10, 0x60, - 0x0E, 0xFB, 0x26, 0x60, 0x58, 0x4E, 0x65, 0x78, 0xFF, 0xFF, 0x10, 0x60, 0x05, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x80, 0x27, 0x07, 0x00, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x64, 0x10, 0x60, 0x0A, 0xFB, 0xA0, 0x01, 0xCD, 0x60, 0xE1, 0x78, - 0xFF, 0xFF, 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0xFD, 0xA0, 0xFF, 0xFF, 0x03, 0x03, 0x20, 0x40, - 0x10, 0x22, 0xF4, 0x01, 0x08, 0x60, 0x07, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, - 0x01, 0x64, 0xA2, 0xDB, 0x01, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x31, 0xF2, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, - 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, - 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, - 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0xA6, 0xF1, 0x43, 0x43, - 0xD3, 0x80, 0xFF, 0xFF, 0x03, 0x03, 0xCD, 0x60, 0xD9, 0x78, 0xFF, 0xFF, 0xD0, 0x60, 0x58, 0x4F, - 0xFC, 0x78, 0xFF, 0xFF, 0x03, 0x4B, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, - 0x1D, 0x61, 0x00, 0x60, 0x01, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, - 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, 0x40, 0x4A, 0x60, 0xFE, - 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, - 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0x65, 0x00, 0x64, 0x19, 0x60, 0x3B, 0xFB, 0x02, 0x00, 0x20, 0xFE, - 0xFF, 0x65, 0x02, 0x60, 0x00, 0x63, 0x60, 0xFE, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0x20, 0xFE, - 0xCD, 0x81, 0x60, 0x40, 0x80, 0x2A, 0x39, 0x00, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x01, 0x64, - 0x2E, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x2A, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x04, 0x64, - 0x26, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x22, 0x00, 0x0C, 0x3A, 0x02, 0x00, 0x10, 0x64, - 0x1E, 0x00, 0x12, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x1A, 0x00, 0x18, 0x3A, 0x02, 0x00, 0x40, 0x64, - 0x16, 0x00, 0x24, 0x3A, 0x02, 0x00, 0x80, 0x64, 0x12, 0x00, 0x30, 0x3A, 0x02, 0x00, 0x01, 0x67, - 0x0E, 0x00, 0x48, 0x3A, 0x02, 0x00, 0x02, 0x67, 0x0A, 0x00, 0x60, 0x3A, 0x02, 0x00, 0x04, 0x67, - 0x06, 0x00, 0x6C, 0x3A, 0x02, 0x00, 0x08, 0x67, 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x19, 0x60, - 0x3B, 0xF1, 0xFF, 0xFF, 0xB0, 0x84, 0x19, 0x60, 0x3B, 0xFB, 0x61, 0x40, 0x00, 0x36, 0x05, 0x00, - 0x60, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, 0x20, 0xFE, 0xBB, 0x01, 0x65, 0x40, 0x00, 0x3A, 0x1E, 0x00, - 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, 0x00, 0x60, 0x1D, 0x61, 0x00, 0x60, - 0x32, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, 0x7A, 0x78, 0xFF, 0xFF, - 0x00, 0xBB, 0xFF, 0xFF, 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, - 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x91, 0x01, 0x20, 0xFE, 0x00, 0x65, - 0xFC, 0x60, 0x58, 0x4E, 0xC7, 0x78, 0xFF, 0xFF, 0xA1, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, - 0x04, 0x00, 0xFD, 0x60, 0x58, 0x4E, 0x11, 0x78, 0xFF, 0xFF, 0x20, 0xFE, 0x37, 0x60, 0xF8, 0x61, - 0xA1, 0xD1, 0xA1, 0xF3, 0x01, 0x60, 0xAC, 0x63, 0x60, 0x45, 0x2A, 0x44, 0x79, 0xFB, 0xA3, 0xD5, - 0x65, 0x40, 0x01, 0x27, 0x5B, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x59, 0xD1, 0x66, 0x41, 0xA0, 0x84, - 0x24, 0x94, 0x2B, 0x46, 0x0F, 0xFA, 0x7A, 0xFB, 0x16, 0x64, 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, - 0x66, 0x5C, 0xC2, 0x60, 0x58, 0x4E, 0x6D, 0x78, 0xFF, 0xFF, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x27, 0x28, 0x00, 0x19, 0x60, 0x44, 0xF3, 0x32, 0x60, 0x88, 0x63, 0xA3, 0xD3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x2A, 0x0C, 0x00, 0x0F, 0x64, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, - 0xFF, 0x60, 0xFF, 0x63, 0x1A, 0x60, 0xB3, 0xFD, 0x1A, 0x60, 0xC3, 0xFD, 0x1C, 0x00, 0x19, 0x60, - 0x39, 0xF3, 0x3F, 0x40, 0x01, 0x27, 0x08, 0x00, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xFC, 0x60, - 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x0F, 0x00, 0x0F, 0xB4, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, - 0xFF, 0xFF, 0x09, 0x00, 0x19, 0x60, 0x3A, 0xF3, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xFC, 0x60, - 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0x58, 0x4E, 0x78, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x23, 0x43, 0x32, 0x40, 0x08, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x80, 0x60, 0x02, 0x64, 0x06, 0xFA, - 0x26, 0x46, 0x2C, 0x60, 0xE4, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x27, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, 0x07, 0x00, 0x2C, 0x60, 0xF2, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x08, 0x00, 0x02, 0x3B, 0x06, 0x00, 0x2C, 0x60, 0xF4, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0xE4, 0xA4, 0x3E, 0xFA, 0x2A, 0xF2, - 0x28, 0x41, 0x40, 0xA8, 0x01, 0xB1, 0x02, 0x02, 0x46, 0x02, 0x76, 0x00, 0x60, 0x40, 0x08, 0x2A, - 0x0F, 0x00, 0x2C, 0x60, 0xE2, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x1B, 0xF2, - 0xFF, 0xFF, 0x60, 0x45, 0x2C, 0x60, 0xE8, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, - 0x0F, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x40, 0x26, 0x28, 0x00, 0x32, 0x44, 0x02, 0x26, 0x25, 0x00, - 0x10, 0x2B, 0x29, 0x00, 0x2E, 0x60, 0x40, 0x63, 0xBF, 0xD3, 0x2C, 0xF0, 0x00, 0xA8, 0x60, 0x41, - 0x0D, 0x03, 0x50, 0xFE, 0xBD, 0xD3, 0x2D, 0xF0, 0xD0, 0x80, 0xBD, 0xD3, 0x2E, 0xF0, 0xD0, 0x80, - 0xBD, 0xD3, 0x2C, 0xF0, 0xD0, 0x80, 0xFA, 0xA1, 0x10, 0x0C, 0xF3, 0x02, 0x50, 0xFE, 0x60, 0x60, - 0x01, 0x64, 0xD0, 0x80, 0x2D, 0xF0, 0x1D, 0x64, 0xD0, 0x80, 0x2E, 0xF0, 0x01, 0x64, 0xD0, 0x80, - 0xFF, 0xFF, 0x03, 0x0C, 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x2A, 0x03, 0x00, - 0x1C, 0x60, 0x12, 0x78, 0xFF, 0xFF, 0xD0, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x40, 0x26, - 0xF7, 0x01, 0x2A, 0xF0, 0xFF, 0xFF, 0x64, 0x40, 0x08, 0x2A, 0x2A, 0x00, 0xDB, 0xF3, 0xFF, 0xFF, - 0x07, 0xB4, 0x03, 0xA8, 0xFF, 0xFF, 0x03, 0x03, 0x32, 0x40, 0x02, 0x2A, 0x1D, 0x00, 0x03, 0x67, - 0xA0, 0x84, 0x00, 0x37, 0x64, 0x63, 0x60, 0x40, 0x02, 0x37, 0x5E, 0x63, 0x60, 0x40, 0x01, 0x37, - 0x58, 0x63, 0x60, 0x40, 0x03, 0x37, 0x0D, 0x00, 0xBD, 0xD2, 0x7F, 0xF1, 0xBD, 0xD2, 0xD0, 0x80, - 0x80, 0xF1, 0x07, 0x02, 0xD0, 0x80, 0xBD, 0xD2, 0x81, 0xF1, 0x03, 0x02, 0xD0, 0x80, 0xFF, 0xFF, - 0x03, 0x03, 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0xE9, 0x60, 0x58, 0x4F, 0x08, 0x78, 0xFF, 0xFF, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, 0x06, 0x00, 0x20, 0x40, 0x10, 0x2B, 0x03, 0x00, - 0xD0, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x87, 0xF4, 0xA6, 0xF1, 0x27, 0x1B, 0x31, 0xF2, 0x1D, 0x60, - 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, - 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, - 0x61, 0x46, 0x30, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, - 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, 0x61, 0x46, 0x03, 0x00, 0xD3, 0x80, 0xFF, 0xFF, 0xD6, 0x03, - 0x43, 0x43, 0xDB, 0xF3, 0x32, 0x40, 0x02, 0x26, 0x04, 0x00, 0x07, 0xB4, 0x03, 0xA8, 0x2A, 0xF2, - 0x45, 0x02, 0xA6, 0xF1, 0x23, 0x43, 0xD3, 0x80, 0xFF, 0xFF, 0x40, 0x02, 0xD0, 0x60, 0x58, 0x4F, - 0xFC, 0x78, 0xFF, 0xFF, 0x32, 0x40, 0x02, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x02, 0x64, 0x06, 0xFA, - 0x26, 0x46, 0x34, 0x00, 0x32, 0x40, 0x08, 0x2A, 0x05, 0x00, 0x63, 0x46, 0x80, 0x60, 0x02, 0x64, - 0x06, 0xFA, 0x26, 0x46, 0x43, 0x43, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x09, 0x00, - 0x19, 0x60, 0x44, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x23, 0x46, 0x0F, 0x64, - 0x10, 0x00, 0x37, 0x60, 0xF8, 0x61, 0xA1, 0xD1, 0xA1, 0xF3, 0x01, 0x60, 0xAC, 0x63, 0x60, 0x45, - 0xA3, 0xD3, 0x65, 0x40, 0x01, 0x27, 0x5B, 0xD3, 0x65, 0x40, 0x01, 0x27, 0x59, 0xD1, 0x23, 0x46, - 0xA0, 0x84, 0x0F, 0xFA, 0x7A, 0xFB, 0x79, 0xFB, 0x16, 0x64, 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, - 0x66, 0x5C, 0xC2, 0x60, 0x58, 0x4E, 0x6D, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x07, 0xFC, 0x43, 0x43, - 0x2A, 0xF2, 0x63, 0x45, 0x0C, 0xB4, 0x08, 0x3A, 0x0A, 0x00, 0xDB, 0xF3, 0x23, 0x46, 0x07, 0xB4, - 0xFD, 0xA0, 0x06, 0xF2, 0x26, 0x46, 0x03, 0x03, 0x60, 0x40, 0x02, 0x2A, 0x0D, 0x00, 0x2A, 0xF2, - 0x35, 0xF0, 0x60, 0x40, 0xA4, 0x36, 0x0B, 0x00, 0x08, 0x2B, 0x0C, 0x00, 0x23, 0x46, 0x26, 0xF2, - 0x26, 0x46, 0xD0, 0x80, 0xFF, 0xFF, 0x06, 0x02, 0xD0, 0x60, 0xB5, 0x78, 0xFF, 0xFF, 0xD0, 0x60, - 0x6B, 0x78, 0xFF, 0xFF, 0x23, 0x46, 0x22, 0xF2, 0x26, 0x46, 0x44, 0x4C, 0x0F, 0x26, 0x1D, 0x00, - 0x00, 0xBC, 0x40, 0x45, 0x0B, 0x03, 0x00, 0x64, 0x23, 0x46, 0x22, 0xFA, 0x26, 0x46, 0xA2, 0xFF, - 0xB6, 0x60, 0x58, 0x4E, 0xF5, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, 0x2A, 0xF0, 0x2C, 0x44, - 0x64, 0x40, 0x04, 0x27, 0x0A, 0x00, 0x23, 0x46, 0x26, 0xFA, 0x26, 0x46, 0x1B, 0xF2, 0xFF, 0xFF, - 0xE4, 0xA4, 0x3E, 0xFA, 0xD0, 0x60, 0x22, 0x78, 0xFF, 0xFF, 0x3F, 0xF2, 0x02, 0xFA, 0xA2, 0xFF, - 0x16, 0xF0, 0xFF, 0xFF, 0x64, 0x44, 0x01, 0x26, 0xDC, 0x9C, 0xB0, 0xF3, 0x2A, 0xF2, 0xDC, 0x83, - 0xB0, 0xFD, 0x06, 0xF4, 0x01, 0xF8, 0x26, 0x46, 0x60, 0x40, 0x40, 0x2B, 0x18, 0x00, 0x64, 0x44, - 0x00, 0x65, 0xFF, 0xB4, 0xFC, 0xA4, 0x06, 0xF0, 0x03, 0x03, 0x64, 0x46, 0x0C, 0x0D, 0x02, 0x65, - 0x26, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x60, 0x46, 0xF9, 0x01, - 0x01, 0xF2, 0xFF, 0xFF, 0xD4, 0x84, 0x01, 0xFA, 0x66, 0x44, 0x26, 0x46, 0x06, 0xFA, 0x06, 0xF4, - 0x00, 0xF2, 0x80, 0xFC, 0x40, 0x45, 0xB6, 0x60, 0x58, 0x4E, 0xF5, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, - 0x26, 0x46, 0x2C, 0x44, 0x0F, 0x26, 0x13, 0x00, 0x23, 0x46, 0x26, 0xFA, 0x26, 0x44, 0x22, 0xFA, - 0x26, 0x46, 0x1B, 0xF2, 0xFF, 0xFF, 0xE4, 0xA4, 0x3E, 0xFA, 0x00, 0x64, 0x13, 0x60, 0x0D, 0xFB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x6E, 0x00, 0xA3, 0x46, - 0x26, 0xF2, 0x60, 0x45, 0xDC, 0x84, 0xD4, 0x80, 0x26, 0xFA, 0xA3, 0x46, 0x6B, 0x02, 0x2A, 0xF0, - 0xA3, 0x46, 0x22, 0xF2, 0xA3, 0x46, 0x00, 0xBC, 0x00, 0xF2, 0x01, 0x02, 0x63, 0x00, 0x44, 0x4C, - 0x3F, 0xF0, 0x60, 0x43, 0x23, 0x46, 0x22, 0xF4, 0x09, 0x60, 0x00, 0x65, 0x3F, 0xF2, 0x26, 0x46, - 0xC0, 0x84, 0xD4, 0x80, 0x60, 0x45, 0x56, 0x07, 0x80, 0xFC, 0x1B, 0xF2, 0x06, 0xF2, 0x60, 0x41, - 0x23, 0x46, 0x22, 0xF4, 0x1B, 0xF0, 0x06, 0xF0, 0xC1, 0x81, 0x06, 0xFA, 0x05, 0xFA, 0x9B, 0xFA, - 0x65, 0x44, 0x3F, 0xFA, 0x64, 0x46, 0x00, 0xFC, 0x63, 0x46, 0x01, 0xF2, 0x10, 0x61, 0xF2, 0xA4, - 0x01, 0xFA, 0xC8, 0x83, 0x02, 0x64, 0x59, 0xD0, 0x58, 0xD8, 0xFD, 0x1F, 0x06, 0x45, 0x00, 0x64, - 0x13, 0x60, 0x0D, 0xFB, 0x25, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xA2, 0xFF, 0x00, 0xF4, 0x01, 0xF0, 0x0A, 0x18, 0x70, 0x67, 0xA0, 0x80, 0xF0, 0x67, 0x06, 0x03, - 0xC0, 0x84, 0x01, 0xFA, 0x25, 0x46, 0x25, 0x44, 0x80, 0xFC, 0x05, 0xFA, 0xB6, 0x60, 0x58, 0x4E, - 0xF5, 0x78, 0xFF, 0xFF, 0xD4, 0xFE, 0xA3, 0xFF, 0x2C, 0x44, 0x04, 0x27, 0x16, 0x00, 0x23, 0x46, - 0x22, 0xF2, 0xA2, 0xFC, 0x60, 0x46, 0x46, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x47, 0x08, 0xFA, - 0x26, 0x46, 0x2C, 0x43, 0x2A, 0xFC, 0x06, 0xF4, 0x00, 0x64, 0x00, 0xFA, 0x01, 0xF0, 0x80, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0x01, 0xFA, 0x26, 0x46, 0x1D, 0x00, 0x00, 0x66, 0x46, 0x46, 0xCA, 0x60, - 0xD8, 0x78, 0xFF, 0xFF, 0xA3, 0x46, 0x22, 0xF0, 0xA2, 0xFC, 0x00, 0x63, 0x33, 0x85, 0xA3, 0x46, - 0x0D, 0x03, 0xA3, 0x46, 0x26, 0xF2, 0x0F, 0x65, 0xA4, 0x85, 0xD4, 0x84, 0x26, 0xFA, 0xA3, 0x46, - 0xA2, 0xFF, 0xB6, 0x60, 0x58, 0x4E, 0xF5, 0x78, 0xFF, 0xFF, 0xA3, 0xFF, 0x26, 0x46, 0xD0, 0x60, - 0xB5, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x32, 0xF0, 0x60, 0x40, 0x08, 0x2A, 0x24, 0x00, 0x01, 0x2B, - 0x13, 0x00, 0x64, 0x40, 0x01, 0x2A, 0x10, 0x00, 0x2C, 0x60, 0xE2, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0x2C, 0x60, 0xE8, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, 0x0F, 0x00, 0x2C, 0x60, 0xE0, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x1B, 0xF2, 0xFF, 0xFF, 0x60, 0x45, 0x2C, 0x60, 0xE6, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, 0x07, 0xF4, 0xFF, 0xFF, 0x26, 0xF2, 0x26, 0x46, 0x0F, 0xB4, - 0xDC, 0x85, 0x2C, 0x60, 0xE4, 0x64, 0xF1, 0x60, 0x78, 0x41, 0xF0, 0x78, 0xB5, 0xF1, 0x27, 0xF2, - 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3B, 0x07, 0x00, 0x2C, 0x60, 0xF2, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x08, 0x00, 0x02, 0x3B, 0x06, 0x00, 0x2C, 0x60, 0xF4, 0x64, 0xF1, 0x60, - 0x78, 0x41, 0xE4, 0x78, 0xB5, 0xF1, 0x07, 0xF2, 0x26, 0xF0, 0x41, 0x18, 0x60, 0x46, 0xFF, 0x67, - 0x20, 0x88, 0x64, 0x5F, 0x40, 0x4A, 0x15, 0xF0, 0x28, 0x44, 0xD0, 0x84, 0x03, 0xA4, 0x03, 0x0E, - 0xE8, 0x84, 0xE8, 0x84, 0x04, 0x00, 0xFA, 0xA4, 0xE8, 0x84, 0xE8, 0x87, 0xC0, 0xBF, 0xC0, 0x84, - 0x15, 0xFA, 0x40, 0x48, 0x14, 0xF0, 0x2A, 0x44, 0xD0, 0x84, 0x1F, 0xA4, 0x06, 0x0E, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x07, 0x00, 0xC2, 0xA4, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x87, 0xF8, 0xBF, 0xC0, 0x84, 0x14, 0xFA, 0x33, 0x60, 0x4C, 0x63, - 0xBD, 0xDB, 0x60, 0x5C, 0x2F, 0x67, 0xD0, 0x80, 0x60, 0x45, 0x02, 0x28, 0x64, 0x45, 0x28, 0x5C, - 0xBD, 0xD9, 0x8B, 0x67, 0xD0, 0x80, 0x60, 0x41, 0x02, 0x24, 0x64, 0x41, 0xD5, 0x84, 0x80, 0x65, - 0xC4, 0x87, 0x01, 0x05, 0x00, 0x64, 0xFF, 0xB4, 0x0E, 0xFA, 0xA3, 0xDB, 0x26, 0x46, 0xD1, 0x60, - 0xDB, 0x78, 0xFF, 0xFF, 0xCA, 0x60, 0xD8, 0x78, 0xFF, 0xFF, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, - 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xCA, 0x60, 0xD8, 0x78, - 0xFF, 0xFF, 0x25, 0x60, 0xFE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0x00, 0x66, 0x46, 0x46, 0xCA, 0x60, 0xD8, 0x78, - 0xFF, 0xFF, 0x2A, 0xF2, 0x58, 0x63, 0x60, 0x47, 0x01, 0x27, 0x64, 0x63, 0x61, 0x5C, 0x1B, 0x60, - 0xFB, 0xF9, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, 0x00, 0xF4, 0x04, 0xF8, - 0x83, 0xFA, 0x82, 0xF8, 0xA6, 0x46, 0x02, 0xB0, 0x5E, 0x63, 0x04, 0x03, 0x64, 0x63, 0x03, 0xB0, - 0x02, 0x3A, 0x6C, 0x63, 0x3F, 0xF2, 0xBD, 0xD0, 0xBD, 0xD0, 0x64, 0x45, 0x64, 0x41, 0xBD, 0xD0, - 0xA6, 0x46, 0x07, 0xF8, 0x86, 0xFA, 0x85, 0xF8, 0x60, 0x47, 0x08, 0xFA, 0x1B, 0x60, 0xFB, 0xF1, - 0x26, 0x46, 0x64, 0x41, 0x2F, 0x58, 0xFF, 0xFF, 0xA6, 0xF5, 0x00, 0xF2, 0x26, 0x46, 0x31, 0xF0, - 0x39, 0x18, 0x66, 0x41, 0x1D, 0x60, 0xC0, 0x65, 0x64, 0x47, 0x00, 0x7F, 0xA6, 0xF1, 0xE0, 0x84, - 0x44, 0xD3, 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, - 0x64, 0x46, 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, - 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, - 0x60, 0x46, 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, - 0x1F, 0x60, 0xC2, 0x61, 0xA1, 0xD3, 0x20, 0x60, 0x04, 0x7C, 0xD0, 0x80, 0xFF, 0xFF, 0x07, 0x03, - 0xA0, 0xDD, 0xDA, 0x9C, 0xA1, 0xD9, 0x49, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xA1, 0xDB, 0xD1, 0x60, - 0x97, 0x78, 0xFF, 0xFF, 0x20, 0x7C, 0x72, 0x44, 0xFF, 0xB4, 0xD0, 0x80, 0xFF, 0xFF, 0x02, 0x04, - 0xD0, 0x84, 0xFB, 0x01, 0xE0, 0x83, 0xA6, 0xF3, 0x02, 0xA3, 0x43, 0x93, 0xA6, 0xF3, 0xFF, 0xFF, - 0x02, 0xA5, 0xD7, 0x80, 0x04, 0xA5, 0x08, 0x24, 0x65, 0x43, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, - 0x00, 0xF0, 0x81, 0xF0, 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x1D, 0x60, 0xC0, 0x65, - 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0xA6, 0xF3, - 0x63, 0x45, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, - 0x65, 0x46, 0x00, 0xFA, 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x31, 0xF0, - 0x66, 0x41, 0x1D, 0x60, 0xC0, 0x65, 0x64, 0x47, 0x00, 0x7F, 0xA6, 0xF1, 0xE0, 0x84, 0x44, 0xD3, - 0x64, 0x43, 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, - 0x80, 0xF0, 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, - 0x64, 0x46, 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, - 0x80, 0xF0, 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x2F, 0xF2, - 0x30, 0xF0, 0x31, 0xF0, 0x64, 0x45, 0x46, 0x43, 0x63, 0x46, 0x03, 0xFA, 0x06, 0xF2, 0x84, 0xF8, - 0x00, 0x7E, 0x06, 0xFA, 0x05, 0xF8, 0xA3, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xDB, 0xF3, 0x2A, 0xF2, - 0x07, 0xB0, 0x03, 0x3A, 0x2A, 0x00, 0x00, 0xF4, 0x09, 0xF2, 0x60, 0x45, 0x80, 0x3A, 0x05, 0x00, - 0x0E, 0xF2, 0xFF, 0xFF, 0x02, 0xB0, 0x0F, 0xF2, 0x20, 0x03, 0x60, 0x47, 0x00, 0x3A, 0x1D, 0x00, - 0x60, 0x41, 0x00, 0x36, 0x13, 0x00, 0xDA, 0x85, 0x33, 0x60, 0xBE, 0x63, 0xBD, 0xD1, 0xFF, 0xFF, - 0xD1, 0x80, 0xFF, 0xFF, 0x12, 0x02, 0x60, 0xFE, 0xBD, 0xD3, 0xA5, 0xD0, 0xDE, 0x85, 0xD0, 0x80, - 0xCD, 0x81, 0x0B, 0x02, 0xF9, 0x02, 0x20, 0xFE, 0x00, 0x64, 0x09, 0x00, 0x26, 0x46, 0x48, 0xFE, - 0x65, 0x40, 0x40, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x02, 0x00, 0x28, 0xFE, 0x00, 0x64, 0x40, 0x48, - 0x26, 0x46, 0x2D, 0x58, 0xFF, 0xFF, 0x19, 0x60, 0xA3, 0xF3, 0x3D, 0xF2, 0x60, 0x40, 0x01, 0x26, - 0x2A, 0xFA, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x26, 0x03, 0x00, 0xD2, 0x60, 0xB5, 0x78, - 0xFF, 0xFF, 0x3F, 0xF0, 0x32, 0x40, 0x10, 0x2A, 0x0E, 0x00, 0x2C, 0xF0, 0x64, 0x41, 0x60, 0x40, - 0x40, 0x27, 0x09, 0x00, 0xCD, 0x81, 0xDD, 0x81, 0x06, 0x03, 0x05, 0x03, 0x64, 0x40, 0x01, 0x26, - 0x02, 0x00, 0x01, 0x61, 0x01, 0x00, 0x00, 0x61, 0x60, 0x40, 0x18, 0x36, 0x1F, 0x00, 0xD0, 0x60, - 0x58, 0x4F, 0xD1, 0x78, 0xFF, 0xFF, 0x0F, 0xF0, 0xEA, 0xF1, 0x64, 0x44, 0x60, 0x22, 0x19, 0x00, - 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0xFD, 0xA0, 0x2A, 0xF2, 0x03, 0x02, 0x08, 0xB0, 0xFF, 0xFF, - 0x10, 0x02, 0x32, 0xF2, 0x33, 0xF2, 0xD0, 0x80, 0xEB, 0xF1, 0x0B, 0x02, 0xD0, 0x80, 0x34, 0xF2, - 0x08, 0x02, 0xEC, 0xF1, 0xFF, 0xFF, 0xD0, 0x80, 0x0F, 0xF0, 0x03, 0x02, 0xD3, 0x60, 0x10, 0x78, - 0xFF, 0xFF, 0x00, 0xF4, 0xAA, 0x60, 0xAA, 0x65, 0x09, 0xF2, 0x5A, 0xD0, 0xD4, 0x80, 0x03, 0x64, - 0x57, 0x02, 0xD0, 0x80, 0x00, 0x64, 0x5A, 0xD0, 0x53, 0x02, 0x64, 0x45, 0xD4, 0x80, 0xF8, 0x7F, - 0x08, 0x02, 0x5A, 0xD0, 0x26, 0x46, 0x64, 0x45, 0x23, 0xF0, 0x20, 0x67, 0xB0, 0x84, 0xA2, 0xDA, - 0x0B, 0x00, 0xD4, 0x80, 0x1D, 0x60, 0x60, 0x64, 0x16, 0x02, 0x5A, 0xD0, 0x26, 0x46, 0x64, 0x45, - 0x23, 0xF0, 0x40, 0x67, 0xB0, 0x84, 0xA2, 0xDA, 0x65, 0x44, 0x88, 0x3A, 0x07, 0x00, 0x77, 0x37, - 0x08, 0x00, 0x78, 0x37, 0x06, 0x00, 0x8E, 0x37, 0x04, 0x00, 0x32, 0x00, 0x81, 0x3A, 0x30, 0x00, - 0x80, 0x37, 0x00, 0x61, 0x2D, 0x00, 0xD4, 0x80, 0x01, 0x60, 0x00, 0x64, 0x5A, 0xD0, 0x28, 0x02, - 0xD0, 0x80, 0x5A, 0xD0, 0x25, 0x02, 0x26, 0x46, 0x64, 0x47, 0x7F, 0xB4, 0xFD, 0xA0, 0x09, 0x03, - 0x1F, 0x07, 0x32, 0x40, 0x02, 0x26, 0x44, 0x00, 0x23, 0xF0, 0x60, 0x67, 0xB0, 0x84, 0xA2, 0xDA, - 0x3F, 0x00, 0x0F, 0xF2, 0x32, 0x40, 0x02, 0x26, 0x3B, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x08, 0x2A, 0x07, 0x00, 0x60, 0x40, 0x48, 0x36, 0x04, 0x00, 0xF1, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, - 0xF1, 0xFB, 0xF4, 0x60, 0x58, 0x4F, 0x1D, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0x1A, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0x61, 0x40, 0x01, 0x2A, 0x07, 0x00, 0x2C, 0x60, 0xF8, 0x64, 0xF1, 0x60, 0x78, 0x41, - 0xE4, 0x78, 0xB5, 0xF1, 0x85, 0x00, 0x0F, 0xF2, 0x7F, 0xF1, 0x2A, 0xF2, 0x60, 0x40, 0x20, 0x2A, - 0x12, 0x00, 0x5E, 0x63, 0x60, 0x40, 0x02, 0x2B, 0x64, 0x63, 0xBD, 0xD2, 0xBD, 0xD2, 0xD0, 0x80, - 0x80, 0xF1, 0x08, 0x02, 0xD0, 0x80, 0xA3, 0xD2, 0x81, 0xF1, 0x04, 0x02, 0xD0, 0x80, 0xFF, 0xFF, - 0x01, 0x02, 0x06, 0x00, 0x6D, 0x00, 0x2A, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0x36, 0x68, 0x00, - 0x2A, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x07, 0x00, 0x60, 0x40, 0x48, 0x36, 0x04, 0x00, - 0xF1, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0xF1, 0xFB, 0x68, 0x00, 0x26, 0x46, 0x2A, 0xF2, 0xFF, 0xFF, - 0xFF, 0xFF, 0x0C, 0x26, 0x55, 0x00, 0xB0, 0x36, 0x15, 0x00, 0x10, 0x36, 0x13, 0x00, 0x30, 0x36, - 0x11, 0x00, 0xC0, 0x36, 0x02, 0x00, 0xA0, 0x3A, 0x12, 0x00, 0x7F, 0xF1, 0x32, 0xF2, 0x33, 0xF2, - 0xD0, 0x80, 0x80, 0xF1, 0x45, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x81, 0xF1, 0x41, 0x02, 0xD0, 0x80, - 0xFF, 0xFF, 0x3E, 0x02, 0xE6, 0x60, 0x58, 0x4F, 0x3D, 0x78, 0xFF, 0xFF, 0x35, 0x00, 0x50, 0x3A, - 0x05, 0x00, 0xF8, 0x60, 0x58, 0x4F, 0xE1, 0x78, 0xFF, 0xFF, 0x2E, 0x00, 0x40, 0x3A, 0x05, 0x00, - 0xF0, 0x60, 0x58, 0x4F, 0x99, 0x78, 0xFF, 0xFF, 0x27, 0x00, 0x80, 0x3A, 0x24, 0x00, 0x7F, 0xF1, - 0x32, 0xF2, 0x33, 0xF2, 0xD0, 0x80, 0x80, 0xF1, 0x23, 0x02, 0xD0, 0x80, 0x34, 0xF2, 0x81, 0xF1, - 0x1F, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x1C, 0x02, 0xE9, 0x60, 0x58, 0x4F, 0x30, 0x78, 0xFF, 0xFF, - 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x0A, 0x00, 0x19, 0x60, 0x4C, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x08, 0x26, 0x04, 0x00, 0xEE, 0x60, 0x58, 0x4F, 0x81, 0x78, 0xFF, 0xFF, 0x24, 0x60, - 0x58, 0x4F, 0xE3, 0x78, 0xFF, 0xFF, 0x04, 0x00, 0x66, 0x44, 0x00, 0xA8, 0xFF, 0xFF, 0x0A, 0x03, - 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0xD0, 0x60, 0xB2, 0x78, 0xFF, 0xFF, 0x2A, 0xF2, 0x3B, 0xF0, 0x60, 0x40, - 0x40, 0x2B, 0x06, 0x00, 0xC0, 0x60, 0x00, 0x64, 0x64, 0x40, 0x20, 0x2B, 0x01, 0x00, 0x03, 0x00, - 0xD3, 0x60, 0x4C, 0x78, 0xFF, 0xFF, 0x22, 0xF2, 0xFF, 0xFF, 0x04, 0xB4, 0xFF, 0xFF, 0xF8, 0x03, - 0x23, 0xF2, 0x07, 0xF4, 0xBB, 0xF0, 0x26, 0x46, 0xA4, 0x84, 0xFF, 0xFF, 0x60, 0x40, 0x2F, 0x26, - 0xD7, 0x01, 0x12, 0xF0, 0xFF, 0xFF, 0x10, 0x1B, 0xCA, 0x60, 0x58, 0x4F, 0x16, 0x78, 0xFF, 0xFF, - 0x64, 0x40, 0x18, 0x36, 0x09, 0x00, 0x04, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, - 0x26, 0x46, 0xD3, 0x60, 0x10, 0x78, 0xFF, 0xFF, 0x25, 0x60, 0xFE, 0x64, 0x13, 0x60, 0x0D, 0xFB, - 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xF8, 0xFE, 0xC0, 0x01, - 0x1C, 0x60, 0x92, 0x63, 0x00, 0x64, 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x94, 0x64, 0xBD, 0xDB, - 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0x00, 0x63, 0x08, 0x60, 0x77, 0xFD, 0xD9, 0x60, 0xA5, 0x64, - 0x08, 0x60, 0x49, 0xFB, 0xD9, 0x60, 0x6A, 0x64, 0x08, 0x60, 0x35, 0xFB, 0x00, 0x60, 0x02, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xD3, 0x60, 0x9C, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x7D, 0xF3, 0x33, 0x60, 0x20, 0x63, 0x60, 0x40, 0x01, 0x27, 0x03, 0x00, 0x19, 0x60, 0x3B, 0xF3, - 0x02, 0x00, 0x19, 0x60, 0x3C, 0xF3, 0x08, 0x61, 0x60, 0xFE, 0xA3, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, - 0x00, 0xA8, 0xE8, 0x84, 0x0F, 0x03, 0x60, 0xFE, 0x02, 0x28, 0xF6, 0x01, 0x80, 0x62, 0xB2, 0x9C, - 0xBD, 0xD9, 0x7B, 0xF9, 0xCD, 0x81, 0x00, 0x36, 0x01, 0x00, 0xEE, 0x01, 0x36, 0x60, 0x0A, 0x63, - 0x08, 0x61, 0xEA, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xBA, 0xFE, 0x16, 0x60, 0x87, 0xF3, 0xFF, 0xFF, 0x03, 0xA8, 0x02, 0xA8, 0x04, 0x03, 0x28, 0x02, - 0xD9, 0x60, 0x41, 0x78, 0xFF, 0xFF, 0xD8, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, - 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x11, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xAC, 0xF3, - 0xFF, 0xFF, 0xFE, 0xA0, 0xFF, 0xFF, 0x0A, 0x07, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, - 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x20, 0x60, 0x20, 0x65, - 0xA5, 0xDF, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, 0xD4, 0x60, 0xF6, 0x78, 0xFF, 0xFF, - 0x01, 0x63, 0x0E, 0x60, 0x36, 0xFD, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, - 0x08, 0x60, 0x15, 0xFB, 0x5A, 0xDB, 0xBA, 0xFE, 0x02, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, - 0x01, 0xBC, 0xF1, 0xFB, 0x44, 0x60, 0x44, 0x64, 0x7F, 0xFB, 0x80, 0xFB, 0x81, 0xFB, 0x08, 0x60, - 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x08, 0x60, 0x77, 0xF3, 0xFF, 0xFF, 0x15, 0x18, 0xA2, 0xDF, - 0x40, 0x60, 0x58, 0x4E, 0x7D, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0xC4, 0x64, 0x0F, 0x60, 0xE1, 0xFB, - 0x4A, 0xDF, 0x01, 0x60, 0xFE, 0x63, 0x1D, 0x60, 0xBE, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, - 0x10, 0x60, 0x0E, 0x62, 0xA2, 0xDF, 0x5B, 0x00, 0xCF, 0xF3, 0xFF, 0xFF, 0x52, 0x1B, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x24, 0x40, 0x02, 0x22, 0x26, 0x00, 0x08, 0x60, 0x1E, 0xF1, - 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xD4, 0x60, 0x1F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0x59, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x24, 0x40, 0x01, 0x26, 0x11, 0x00, 0x08, 0x60, - 0x1E, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0x59, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, 0x40, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0x59, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xFD, 0x60, 0x89, 0x65, 0xF3, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x08, 0x60, 0x15, 0xFB, 0x5A, 0xDB, 0x10, 0x60, - 0x4E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, - 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xBB, 0xFE, 0xFD, 0x60, - 0x40, 0x65, 0xF3, 0x60, 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x03, 0x64, 0x08, 0x60, - 0x28, 0xFB, 0xD4, 0x60, 0x87, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, - 0x27, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x07, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x10, 0x60, 0x4E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xE2, 0x01, 0x10, 0x60, 0x4E, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, 0x20, 0x40, 0x04, 0x2B, 0x14, 0x00, - 0x9B, 0xFE, 0x08, 0x04, 0xBB, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0x95, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, - 0x16, 0x60, 0xCC, 0xF3, 0x00, 0x61, 0x60, 0x40, 0x00, 0x36, 0x00, 0xB9, 0x60, 0x40, 0x01, 0x36, - 0x01, 0xB9, 0x60, 0x40, 0x02, 0x36, 0x06, 0xB9, 0x60, 0x40, 0x03, 0x36, 0x07, 0xB9, 0x41, 0x44, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0xC8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x7D, 0xF1, 0x13, 0x60, 0x1A, 0xF9, 0x0C, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD4, 0x60, 0xE9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, - 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x75, 0x00, 0x10, 0x60, 0x2A, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xBA, 0xFE, 0x02, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, - 0xF1, 0xFB, 0x44, 0x60, 0x44, 0x64, 0x7F, 0xFB, 0x80, 0xFB, 0x81, 0xFB, 0xFF, 0xFF, 0x20, 0x40, - 0x04, 0x2B, 0x14, 0x00, 0x9B, 0xFE, 0x08, 0x04, 0xBB, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xD5, 0x60, 0x07, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x00, 0x65, - 0x20, 0x44, 0x34, 0x80, 0x08, 0x60, 0x07, 0xF1, 0x02, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, - 0x64, 0x40, 0x01, 0x2A, 0x06, 0x00, 0xA2, 0xDF, 0x02, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, - 0xFF, 0xFF, 0xCF, 0xF3, 0x20, 0x60, 0x20, 0x65, 0x36, 0x1B, 0xA5, 0xD3, 0x24, 0x40, 0x01, 0x26, - 0x16, 0x00, 0x60, 0x40, 0x20, 0x26, 0x2F, 0x00, 0x01, 0xBC, 0xA5, 0xDB, 0x08, 0x60, 0x1E, 0xF1, - 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xD5, 0x60, 0x65, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x60, 0x40, - 0x10, 0x26, 0x19, 0x00, 0x01, 0xBC, 0xA5, 0xDB, 0x08, 0x60, 0x1E, 0xF1, 0x00, 0x60, 0x40, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD5, 0x60, - 0x65, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xFD, 0x60, 0x89, 0x65, 0xF3, 0x60, - 0x58, 0x4E, 0x27, 0x78, 0xFF, 0xFF, 0xCF, 0xF1, 0x07, 0x60, 0xE9, 0xF3, 0x64, 0x40, 0x02, 0x3A, - 0x0C, 0x00, 0x01, 0x63, 0x60, 0x40, 0x10, 0x22, 0x00, 0x63, 0x08, 0x60, 0xC1, 0xFD, 0x08, 0x60, - 0xC5, 0xFD, 0x08, 0x60, 0xC9, 0xFD, 0x08, 0x60, 0xCD, 0xFD, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x01, 0x64, 0x53, 0xFB, 0x2F, 0x60, 0x02, 0x64, 0x54, 0xFB, 0x24, 0x40, 0x01, 0x26, - 0x11, 0x00, 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD5, 0x60, 0xAB, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD5, 0x60, 0xAB, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xFD, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, - 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x2A, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x86, 0xF1, 0x1B, 0x60, 0xB2, 0x63, 0xD3, 0x80, 0x20, 0x44, 0x03, 0x03, - 0xD8, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x87, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, 0xFF, 0xFF, 0x1B, 0x02, - 0x24, 0x44, 0x04, 0x22, 0x12, 0x00, 0x24, 0x44, 0x01, 0xAC, 0xFB, 0xB4, 0x40, 0x44, 0xF7, 0x60, - 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xD4, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0xD2, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, - 0xFF, 0xFF, 0x1F, 0x02, 0x87, 0x00, 0x20, 0x44, 0x10, 0xBC, 0x40, 0x40, 0x64, 0x42, 0x5A, 0xD1, - 0x06, 0x63, 0xA4, 0xD1, 0xC3, 0x83, 0x7D, 0xF9, 0xBD, 0xD1, 0x7F, 0xF9, 0xBD, 0xD1, 0xFF, 0xFF, - 0x80, 0xF9, 0xBD, 0xD1, 0x81, 0xF9, 0x04, 0xA3, 0xBD, 0xD1, 0x33, 0x60, 0xBE, 0x64, 0x64, 0x41, - 0xDD, 0x81, 0xFE, 0xB1, 0xA0, 0xD9, 0x04, 0x03, 0xBD, 0xD1, 0xC9, 0x81, 0x58, 0xD9, 0xFC, 0x02, - 0x39, 0x00, 0xE4, 0xF3, 0x7D, 0xFB, 0x66, 0x41, 0x60, 0x40, 0x01, 0x27, 0x06, 0x00, 0x10, 0x60, - 0xF0, 0x63, 0x11, 0x60, 0x44, 0x65, 0x06, 0x66, 0x05, 0x00, 0x11, 0x60, 0x60, 0x63, 0x12, 0x60, - 0x40, 0x65, 0x08, 0x66, 0xA3, 0xD1, 0x4B, 0x93, 0xD0, 0x80, 0xD7, 0x80, 0x02, 0x03, 0xFA, 0x04, - 0x04, 0x00, 0x5B, 0x93, 0x02, 0xA3, 0x01, 0x64, 0xA3, 0xDB, 0x61, 0x46, 0x2F, 0x60, 0x02, 0x61, - 0xA1, 0xD3, 0xFF, 0xFF, 0x00, 0xA8, 0x33, 0x60, 0xBE, 0x63, 0x02, 0x02, 0x2D, 0x60, 0x10, 0x61, - 0xA1, 0xD3, 0xBD, 0xDB, 0xDC, 0x84, 0xFE, 0xB4, 0x59, 0xD1, 0xC8, 0x84, 0xBD, 0xD9, 0xFC, 0x02, - 0xEC, 0xF3, 0x72, 0x45, 0xEB, 0xF3, 0x94, 0x83, 0x81, 0xFD, 0x94, 0x83, 0x80, 0xFD, 0x65, 0x5F, - 0x02, 0x64, 0x7F, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, - 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD6, 0x60, 0x3A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x7D, 0xF1, 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD6, 0x60, 0x5B, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, - 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xD7, 0x60, - 0x7B, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xEF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x02, 0x64, 0xDB, 0xFB, - 0xF1, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, 0xF1, 0xFB, 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, - 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x24, 0x44, 0x02, 0x22, 0x03, 0x00, 0x01, 0xAC, 0x04, 0xBC, - 0x40, 0x44, 0x32, 0x40, 0x80, 0x2A, 0x8C, 0x00, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD6, 0x60, 0x8C, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x95, 0xF3, 0xFF, 0xFF, 0x7F, 0xB4, 0x95, 0xFB, 0x26, 0x60, 0x34, 0x62, 0x06, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x2D, 0xFF, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xDA, 0xFE, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x12, 0x60, 0xFF, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x05, 0x03, 0x0E, 0xF2, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x2A, 0x22, 0x00, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, - 0x03, 0x03, 0x0F, 0xF2, 0xFF, 0xFF, 0x19, 0x1B, 0x08, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xD6, 0x60, 0xE5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x01, 0x64, 0x19, 0x60, 0xF1, 0xFB, 0x19, 0x60, - 0xF6, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x26, 0x05, 0x00, 0x89, 0xFF, 0x08, 0x60, 0x00, 0x75, - 0x88, 0xFF, 0x01, 0x00, 0x10, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD6, 0x60, - 0xE5, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x7D, 0xF1, 0x13, 0x60, 0x1A, 0xF9, 0x08, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, - 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD7, 0x60, 0x0A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0xBA, 0xFE, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x1E, 0x00, - 0xDA, 0xFE, 0xC1, 0xFE, 0x0E, 0x60, 0x36, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x1C, 0x60, 0x92, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x60, 0x06, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xD7, 0x60, 0x4E, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x00, 0x60, 0x02, 0x64, - 0x08, 0x60, 0x28, 0xFB, 0xD7, 0x60, 0x55, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0x6C, 0x61, - 0x75, 0x60, 0x30, 0x65, 0xA1, 0xD3, 0xFF, 0xFF, 0xFF, 0xA0, 0xE0, 0x84, 0x02, 0x02, 0x03, 0x60, - 0xE8, 0x64, 0xD4, 0x80, 0xFF, 0xFF, 0x01, 0x04, 0x65, 0x44, 0xA1, 0xDB, 0x32, 0x40, 0x80, 0x2A, - 0x03, 0x00, 0xD4, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, - 0x27, 0xFB, 0x5A, 0xDB, 0xD4, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0x20, 0x40, 0x06, 0x23, 0x10, 0x00, - 0x08, 0x60, 0x27, 0xF1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x80, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x28, 0xFB, 0xD7, 0x60, 0x55, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x10, 0x60, 0x4E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, - 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0xD3, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x78, 0xF3, 0x79, 0xFB, 0x20, 0x60, 0x14, 0x62, 0xA2, 0xDF, - 0xFF, 0x60, 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, 0xBC, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x1C, 0x60, - 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xF7, 0x60, - 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x10, 0x26, 0x38, 0x00, 0x00, 0x64, 0xB2, 0xFB, 0xB3, 0xFB, - 0xB4, 0xFB, 0x00, 0x75, 0x00, 0x72, 0xBA, 0xF1, 0x7E, 0xF9, 0x64, 0x44, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x93, 0xE5, 0xF1, 0x84, 0xF9, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, - 0x1E, 0x00, 0x19, 0x60, 0x44, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2A, 0x0A, 0x00, 0x0F, 0x64, - 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x67, 0x43, 0x1A, 0x60, 0xB3, 0xFD, 0x1A, 0x60, - 0xC3, 0xFD, 0xD3, 0x60, 0x58, 0x4E, 0x78, 0x78, 0xFF, 0xFF, 0x00, 0x65, 0xFC, 0x60, 0x58, 0x4E, - 0xC7, 0x78, 0xFF, 0xFF, 0xFD, 0x60, 0x58, 0x4E, 0x11, 0x78, 0xFF, 0xFF, 0x05, 0x00, 0xFF, 0x65, - 0xFC, 0x60, 0x58, 0x4E, 0xC7, 0x78, 0xFF, 0xFF, 0x44, 0x00, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x00, 0x60, 0x84, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD7, 0x60, 0xDB, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x80, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x2B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x08, 0x60, 0x15, 0xF1, 0xFF, 0x60, 0x7F, 0x61, - 0xA1, 0x84, 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x2E, 0x60, 0x2E, 0x64, 0x2D, 0x60, - 0x8A, 0x63, 0xA0, 0xD1, 0xA3, 0xD9, 0x64, 0x41, 0x58, 0xD1, 0x5B, 0xD9, 0x7D, 0xF3, 0x66, 0x45, - 0xA6, 0xF5, 0x60, 0x40, 0x01, 0x27, 0x08, 0x00, 0x91, 0xFA, 0x61, 0x44, 0xFD, 0x60, 0x58, 0x4E, - 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x07, 0x00, 0x11, 0xF8, 0x64, 0x44, 0xFD, 0x60, 0x58, 0x4E, - 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x65, 0x46, 0x04, 0x00, 0xBB, 0xFE, 0xD4, 0x60, 0xF6, 0x78, - 0xFF, 0xFF, 0x16, 0x60, 0xC2, 0xF1, 0x00, 0x65, 0x64, 0x40, 0x01, 0x36, 0x22, 0x65, 0x64, 0x40, - 0x07, 0x36, 0x01, 0x65, 0x64, 0x40, 0x0A, 0x36, 0x01, 0x65, 0x64, 0x40, 0x0B, 0x36, 0x22, 0x65, - 0xA6, 0xF3, 0x66, 0x5C, 0x60, 0x46, 0x1F, 0x63, 0xE3, 0x83, 0xBA, 0xF8, 0x02, 0xA6, 0x66, 0x44, - 0xFC, 0x1F, 0x16, 0x60, 0xC2, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x07, 0x36, 0x03, 0x00, 0x0A, 0x36, - 0x06, 0x00, 0x09, 0x00, 0xA6, 0xF3, 0x04, 0x65, 0x60, 0x46, 0xBA, 0xF8, 0x04, 0x00, 0xA6, 0xF3, - 0x10, 0x65, 0x60, 0x46, 0xBA, 0xF8, 0x64, 0x46, 0xA6, 0xF3, 0x32, 0x41, 0x60, 0x45, 0x08, 0xB1, - 0x66, 0x41, 0x16, 0x03, 0x65, 0x46, 0x17, 0x60, 0x80, 0xF3, 0x06, 0xF0, 0xE0, 0x84, 0xE0, 0x84, - 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, 0xB0, 0x84, 0x06, 0xFA, 0x66, 0x43, 0x02, 0xA3, 0x63, 0x46, - 0x06, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, 0x06, 0xFA, 0x61, 0x46, 0x32, 0x44, 0x10, 0xBC, 0x40, 0x52, - 0x01, 0x64, 0x10, 0x60, 0x0A, 0xFB, 0x0F, 0x4E, 0xEF, 0x60, 0x58, 0x4F, 0x3A, 0x78, 0xFF, 0xFF, - 0x0E, 0x4F, 0x08, 0x60, 0x15, 0xF1, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x00, 0x60, - 0x04, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD3, 0x60, 0xAE, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, - 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xBB, 0xFE, - 0x20, 0x44, 0x04, 0x27, 0x11, 0x00, 0x10, 0x26, 0x02, 0x00, 0xDB, 0xFE, 0x14, 0x00, 0x08, 0x60, - 0x07, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x36, 0x07, 0x00, 0x01, 0x64, 0xA2, 0xDB, 0x01, 0x65, - 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x64, 0x8A, 0xFB, 0xFF, 0x60, 0xEF, 0x65, 0x20, 0x44, - 0x24, 0x80, 0x03, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, 0xC1, 0xFE, - 0x00, 0x60, 0x02, 0x64, 0x08, 0x60, 0x28, 0xFB, 0xD8, 0x60, 0xAA, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x20, 0x40, 0x06, 0x23, 0x10, 0x00, 0x08, 0x60, 0x27, 0xF1, 0x7F, 0x60, - 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x28, 0xFB, 0xD8, 0x60, - 0xAA, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x4E, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xD3, 0x60, 0xD0, 0x78, 0xFF, 0xFF, - 0xBB, 0xFE, 0xD9, 0x60, 0xB0, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0xC2, 0xF1, 0x00, 0x65, 0x64, 0x40, - 0x01, 0x36, 0x22, 0x65, 0xA6, 0xF3, 0x66, 0x5C, 0x60, 0x46, 0x1F, 0x63, 0xE3, 0x83, 0xBA, 0xF8, - 0x02, 0xA6, 0x66, 0x44, 0xFC, 0x1F, 0x64, 0x46, 0xA6, 0xF1, 0x02, 0x64, 0xC0, 0x85, 0x0C, 0x61, - 0x32, 0x40, 0x08, 0x2A, 0x14, 0x00, 0x17, 0x60, 0x80, 0xF3, 0x66, 0x41, 0x65, 0x46, 0x06, 0xF0, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x80, 0xBF, 0xB0, 0x83, 0x06, 0xFC, 0x66, 0x42, - 0xFE, 0xA2, 0x62, 0x46, 0x06, 0xF0, 0xFF, 0xFF, 0xB0, 0x84, 0x06, 0xFA, 0x61, 0x46, 0x0B, 0x64, - 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, 0x01, 0x65, 0xF1, 0x60, 0x58, 0x4E, - 0xC3, 0x78, 0xFF, 0xFF, 0xE4, 0xF1, 0x7D, 0xF9, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD9, 0x60, 0x0C, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7D, 0xF1, 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD9, 0x60, - 0x2D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x15, 0xFB, - 0x5A, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x01, 0x64, 0x8A, 0xFB, 0xFF, 0x60, 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x2F, 0x58, - 0xFF, 0xFF, 0x06, 0x64, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, 0xE4, 0xF1, - 0x7D, 0xF9, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x64, 0x8A, 0xFB, 0xFF, 0x60, - 0xDF, 0x65, 0x20, 0x44, 0x24, 0x80, 0xA6, 0xF1, 0x66, 0x45, 0x64, 0x46, 0x66, 0x43, 0x02, 0xA3, - 0x63, 0x46, 0x02, 0x64, 0x06, 0xFA, 0x04, 0x63, 0x04, 0x61, 0x01, 0x60, 0xCC, 0x64, 0x58, 0xD1, - 0x59, 0xD8, 0xFD, 0x1F, 0x65, 0x46, 0x01, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x67, 0xFB, 0x68, 0xFB, 0xA6, 0xF1, 0x0E, 0x64, 0x66, 0x41, - 0x64, 0x42, 0x02, 0xA2, 0x62, 0x46, 0x06, 0xF0, 0xFF, 0x60, 0xFC, 0x64, 0xA0, 0x84, 0x06, 0xFA, - 0x61, 0x46, 0xDB, 0xF3, 0xFF, 0xFF, 0x04, 0xA8, 0x10, 0x60, 0x0E, 0x64, 0x07, 0x03, 0xA0, 0xD1, - 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x2A, 0x02, 0x00, 0x00, 0x63, 0xA0, 0xDD, 0x01, 0x64, 0xDB, 0xFB, - 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, 0x00, 0x63, 0x08, 0x60, 0x77, 0xFD, 0x10, 0x60, - 0x4E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x02, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD3, 0x60, - 0x9C, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, - 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2E, 0x58, 0xFF, 0xFF, - 0x40, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xB9, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x5F, 0xF5, 0xEA, 0xF1, - 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0xB9, 0xF1, 0x19, 0xF8, 0xF8, 0x60, - 0x80, 0x64, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0xA6, 0xF1, 0x07, 0xF8, 0x1B, 0x60, 0xB0, 0x64, - 0x00, 0x60, 0x67, 0xFB, 0x44, 0x60, 0x44, 0x64, 0x7F, 0xFB, 0x80, 0xFB, 0x81, 0xFB, 0x31, 0x44, - 0xF9, 0xB4, 0x40, 0x51, 0x00, 0x60, 0xCE, 0x63, 0x01, 0x60, 0x0C, 0x65, 0xA3, 0xD3, 0xA5, 0xD1, - 0x04, 0xA4, 0xA3, 0xDB, 0xD0, 0x80, 0xA0, 0xD1, 0x0A, 0x06, 0x41, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xD6, 0x60, 0x6A, 0x78, 0xFF, 0xFF, 0x44, 0x47, - 0x16, 0x60, 0xC2, 0xF3, 0xFF, 0xFF, 0xFF, 0xA4, 0xFF, 0xFF, 0x09, 0x07, 0x0E, 0x61, 0x41, 0xD3, - 0x32, 0x40, 0x08, 0x26, 0x04, 0x00, 0x10, 0xB0, 0xFF, 0xFF, 0x01, 0x03, 0xD3, 0x01, 0x42, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, - 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xD9, 0x60, 0xFA, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD1, 0x7D, 0xF9, 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xDA, 0x60, 0x1C, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x07, 0x60, 0xD0, 0x64, 0x0E, 0x60, 0x4B, 0xFB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, - 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD3, 0x7F, 0xFB, - 0xBD, 0xD3, 0x80, 0xFB, 0xA3, 0xD3, 0x81, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x01, 0x60, 0x04, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xDA, 0x60, 0x4A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xB9, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x08, 0x60, 0x15, 0xF1, 0xFE, 0x60, - 0xFF, 0x61, 0xA1, 0x84, 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x08, 0x60, 0x15, 0xF1, - 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xD9, 0x60, - 0xCA, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x08, 0x65, 0x20, 0x44, 0x34, 0x80, 0x7D, 0xF1, 0x32, 0x60, - 0x7A, 0x61, 0xA1, 0xD3, 0x64, 0x40, 0x01, 0x27, 0x59, 0xD3, 0x32, 0x60, 0x7E, 0x61, 0xFD, 0x60, - 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0xA1, 0xDB, 0x5E, 0xF5, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, - 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0xB9, 0xF1, 0x19, 0xF8, 0x80, 0x7E, 0xF8, 0x7F, 0x0E, 0xFA, - 0x00, 0x64, 0x3E, 0xFA, 0xA6, 0xF1, 0x07, 0xF8, 0x2B, 0xFA, 0xB0, 0x64, 0x2A, 0xFA, 0x27, 0x43, - 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, 0x32, 0xF8, 0xBD, 0xD1, 0x2D, 0xF8, 0x33, 0xF8, 0xA3, 0xD1, - 0x2E, 0xF8, 0x34, 0xF8, 0x06, 0x63, 0x3F, 0xFC, 0x20, 0x60, 0x16, 0x61, 0xDB, 0xF3, 0xA1, 0xD3, - 0x03, 0xA8, 0xAC, 0x83, 0x0E, 0x02, 0x0D, 0x03, 0x20, 0x60, 0x18, 0x61, 0xA1, 0xD1, 0x66, 0x45, - 0x00, 0xF4, 0x09, 0xFC, 0x01, 0x64, 0x0A, 0xFA, 0x0B, 0xF8, 0x20, 0x60, 0x16, 0x61, 0xA1, 0xDF, - 0x25, 0x00, 0x16, 0x60, 0xC3, 0xF3, 0x66, 0x45, 0x00, 0xF4, 0x60, 0x40, 0x01, 0x36, 0x15, 0x00, - 0x02, 0x36, 0xBD, 0x00, 0x03, 0x36, 0x07, 0x00, 0x04, 0x36, 0x0F, 0x00, 0x05, 0x36, 0xB7, 0x00, - 0x06, 0x36, 0x01, 0x00, 0x0A, 0x00, 0x80, 0x64, 0x09, 0xFA, 0x01, 0x63, 0x0A, 0xFC, 0x00, 0x64, - 0x0B, 0xFA, 0x80, 0x60, 0xF4, 0x62, 0xA2, 0xDF, 0x09, 0x00, 0x00, 0x64, 0x09, 0xFA, 0x01, 0x63, - 0x0A, 0xFC, 0x00, 0x64, 0x0B, 0xFA, 0x80, 0x60, 0xF4, 0x62, 0xA2, 0xDF, 0x25, 0x60, 0xCE, 0x64, - 0x13, 0x60, 0x0D, 0xFB, 0x65, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x00, 0x66, 0xDB, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, - 0x01, 0x64, 0x68, 0xFB, 0x43, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0E, 0x60, 0x38, 0xF3, 0xFF, 0xFF, - 0x64, 0xA4, 0xA2, 0xDB, 0x0E, 0x60, 0x38, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x1C, 0x60, 0x92, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x60, 0x0C, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xDB, 0x60, 0x00, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x55, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x26, 0x46, - 0x00, 0xF4, 0x09, 0xF2, 0x0A, 0xF2, 0x00, 0xA8, 0x0B, 0xF2, 0x02, 0xA8, 0x16, 0x02, 0x00, 0xA8, - 0x1A, 0x02, 0x19, 0x02, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, - 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xDC, 0x60, - 0xF6, 0x78, 0xFF, 0xFF, 0xE3, 0x60, 0x69, 0x78, 0xFF, 0xFF, 0x09, 0xF2, 0x0A, 0xF2, 0x80, 0xA8, - 0x0B, 0xF2, 0x02, 0xA8, 0xE4, 0x03, 0x44, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0B, 0xF2, 0x26, 0x46, - 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, - 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, - 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, - 0xFF, 0xFF, 0xE7, 0x60, 0x0B, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x20, 0x40, 0x08, 0x2A, - 0x03, 0x00, 0xD9, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0xE2, 0x60, 0x73, 0x78, 0xFF, 0xFF, 0x01, 0x63, - 0x09, 0xFC, 0x32, 0x40, 0x08, 0x26, 0x14, 0x00, 0x16, 0x60, 0xC2, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x0B, 0x36, 0x03, 0x00, 0xDA, 0x60, 0xC5, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0xA2, 0xDB, 0x0B, 0x64, - 0x19, 0x60, 0xA4, 0xFB, 0xA6, 0xF1, 0x66, 0x41, 0x64, 0x46, 0x22, 0x64, 0x3A, 0xFA, 0x61, 0x46, - 0x01, 0x64, 0x0A, 0xFA, 0x00, 0x64, 0x0B, 0xFA, 0x01, 0x64, 0x40, 0x60, 0x7A, 0xFB, 0x01, 0x64, - 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x65, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, - 0xDB, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, 0x02, 0x02, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, - 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x60, - 0x0C, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xDB, 0x60, 0xB9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x3A, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x68, 0xFB, 0x26, 0x46, 0x00, 0xF4, 0x09, 0xF2, 0x0A, 0xF2, - 0x01, 0xA8, 0x0B, 0xF2, 0x02, 0xA8, 0x04, 0x02, 0x00, 0xA8, 0x02, 0x02, 0x01, 0x02, 0x31, 0x00, - 0xDC, 0x60, 0x58, 0x4D, 0xB9, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, - 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, - 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0xE7, 0x60, - 0x0B, 0x78, 0xFF, 0xFF, 0xDC, 0x60, 0x58, 0x4D, 0xB9, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x68, 0xFB, - 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xD9, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0xE2, 0x60, 0x73, 0x78, - 0xFF, 0xFF, 0x26, 0x46, 0x40, 0x60, 0x00, 0x65, 0x2A, 0xF2, 0x2F, 0xF0, 0xB4, 0x84, 0x2A, 0xFA, - 0x2C, 0xF8, 0x32, 0xF8, 0x30, 0xF2, 0x2D, 0xFA, 0x33, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x34, 0xFA, - 0xEA, 0xF3, 0x2F, 0xFA, 0xEB, 0xF3, 0x30, 0xFA, 0xEC, 0xF3, 0x31, 0xFA, 0xC9, 0xF1, 0x19, 0xF8, - 0x1C, 0xF0, 0x13, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x00, 0xF4, 0x03, 0x64, 0x0A, 0xFA, 0x00, 0x64, - 0x0B, 0xFA, 0x01, 0x63, 0x68, 0xFD, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x25, 0x60, - 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0x00, 0x66, 0xDB, 0xF3, 0x46, 0x46, 0xFD, 0xA0, 0xC1, 0xFE, 0x02, 0x02, 0x2F, 0x58, - 0xFF, 0xFF, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x00, 0x60, 0x0C, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xDC, 0x60, 0x53, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x50, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x68, 0xFB, 0x26, 0x46, 0x00, 0xF4, - 0x09, 0xF2, 0x0A, 0xF2, 0x01, 0xA8, 0x0B, 0xF2, 0x04, 0xA8, 0x1A, 0x02, 0x00, 0xA8, 0x18, 0x02, - 0x17, 0x02, 0xDC, 0x60, 0x58, 0x4D, 0xB9, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, - 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x20, 0x40, - 0x08, 0x2A, 0x03, 0x00, 0xDC, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0xE3, 0x60, 0x69, 0x78, 0xFF, 0xFF, - 0xDC, 0x60, 0x58, 0x4D, 0xB9, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, - 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, - 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0x03, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0xE7, 0x60, - 0x0B, 0x78, 0xFF, 0xFF, 0xDC, 0x60, 0x58, 0x4D, 0xB9, 0x78, 0xFF, 0xFF, 0x00, 0x64, 0x68, 0xFB, - 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, 0xD9, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0xE2, 0x60, 0x73, 0x78, - 0xFF, 0xFF, 0x19, 0x60, 0xA4, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x0B, 0x3A, 0x06, 0x00, 0x0B, 0x64, - 0x16, 0x60, 0xC2, 0xFB, 0x33, 0x60, 0x48, 0x62, 0xA2, 0xDF, 0x2D, 0x58, 0xFF, 0xFF, 0x16, 0x60, - 0xC2, 0xF1, 0xA5, 0xD2, 0x64, 0x40, 0x0B, 0x2A, 0x20, 0x00, 0x85, 0x36, 0x0B, 0x00, 0x32, 0x3A, - 0x1E, 0x00, 0x60, 0x47, 0xFF, 0xB4, 0x02, 0xA4, 0xC4, 0x85, 0xA5, 0xD2, 0xFF, 0xFF, 0x60, 0x40, - 0x85, 0x3A, 0x15, 0x00, 0x65, 0x44, 0x0A, 0xA4, 0xA0, 0xD0, 0x33, 0x60, 0x46, 0x62, 0x64, 0x40, - 0x18, 0x26, 0x09, 0x00, 0xA2, 0xDF, 0x01, 0x64, 0x16, 0x60, 0xC2, 0xFB, 0x32, 0x41, 0x08, 0x65, - 0xB5, 0x81, 0x41, 0x52, 0x02, 0x00, 0x01, 0x64, 0xA2, 0xDB, 0x2D, 0x58, 0xFF, 0xFF, 0x33, 0x60, - 0x46, 0x62, 0xA2, 0xDF, 0x01, 0x64, 0x16, 0x60, 0xC2, 0xFB, 0xF7, 0x01, 0x45, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x35, 0x60, 0xAA, 0x7C, 0x35, 0x60, 0x98, 0x63, 0xA3, 0xD9, 0x64, 0x41, 0x2F, 0x60, - 0x02, 0x63, 0xBD, 0xD3, 0x00, 0x7C, 0x03, 0x1B, 0x27, 0x43, 0x10, 0xA3, 0xBD, 0xD3, 0xFF, 0xFF, - 0x60, 0x45, 0x64, 0x5F, 0xA1, 0xDB, 0x65, 0x44, 0xBD, 0xD1, 0xC8, 0x84, 0x59, 0xD8, 0xFC, 0x05, - 0x27, 0x41, 0x10, 0xA1, 0xA1, 0xD1, 0xFF, 0xFF, 0xC1, 0x81, 0x01, 0x26, 0xDD, 0x81, 0x41, 0x4C, - 0x59, 0xD1, 0x7C, 0x44, 0xB0, 0x84, 0x59, 0xD1, 0x59, 0xD1, 0xB0, 0x84, 0xB0, 0x84, 0xFF, 0xFF, - 0x02, 0x02, 0x67, 0x44, 0xC2, 0x00, 0x34, 0x60, 0x5C, 0x63, 0xD9, 0x81, 0x59, 0xD3, 0x38, 0x60, - 0x10, 0x62, 0x00, 0xBC, 0xA2, 0xDF, 0x09, 0x03, 0x01, 0x7C, 0xA2, 0xD9, 0x30, 0x60, 0x14, 0x64, - 0xBD, 0xDA, 0x00, 0x60, 0x01, 0x64, 0xBD, 0xDA, 0x58, 0x00, 0xDD, 0x60, 0x18, 0x64, 0xBD, 0xDA, - 0x50, 0x60, 0x00, 0x64, 0xBD, 0xDA, 0x01, 0x60, 0xF2, 0x64, 0xBD, 0xDA, 0x00, 0x60, 0x01, 0x64, - 0xBD, 0xDA, 0x2C, 0x41, 0x59, 0xD3, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, - 0x01, 0x60, 0xF2, 0x64, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, 0xF2, 0x64, 0x09, 0x00, - 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, 0xF2, 0x64, 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, - 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x01, 0x64, 0xBD, 0xDB, 0x59, 0xD3, 0x50, 0x60, 0x00, 0x7C, - 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xF2, 0x64, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, - 0x02, 0x60, 0xF2, 0x64, 0x09, 0x00, 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, 0xF2, 0x64, 0x04, 0x00, - 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x01, 0x64, 0xBD, 0xDB, - 0x59, 0xD3, 0x50, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x00, 0x60, 0xF2, 0x64, - 0x09, 0x00, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xF2, 0x64, 0x04, 0x00, 0x04, 0x2A, 0x02, 0x00, - 0x02, 0x60, 0xF2, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x4B, 0x00, 0x2C, 0x41, 0x59, 0xD3, 0x0F, 0x60, - 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, 0xAC, 0x64, 0x0E, 0x00, 0x04, 0x2A, - 0x03, 0x00, 0x02, 0x60, 0xAC, 0x64, 0x09, 0x00, 0x10, 0x2A, 0x03, 0x00, 0x04, 0x60, 0xAC, 0x64, - 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xAC, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, 0x01, 0x64, - 0xBD, 0xDB, 0x59, 0xD3, 0x0F, 0x60, 0x00, 0x7C, 0x60, 0x40, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, - 0xAC, 0x64, 0x0E, 0x00, 0x04, 0x2A, 0x03, 0x00, 0x02, 0x60, 0xAC, 0x64, 0x09, 0x00, 0x10, 0x2A, - 0x03, 0x00, 0x04, 0x60, 0xAC, 0x64, 0x04, 0x00, 0x20, 0x2A, 0x04, 0x00, 0x05, 0x60, 0xAC, 0x64, - 0xBD, 0xD9, 0xBD, 0xDB, 0x01, 0x64, 0xBD, 0xDB, 0x59, 0xD3, 0x0F, 0x60, 0x00, 0x7C, 0x60, 0x40, - 0x01, 0x2A, 0x03, 0x00, 0x00, 0x60, 0xAC, 0x64, 0x09, 0x00, 0x02, 0x2A, 0x03, 0x00, 0x01, 0x60, - 0xAC, 0x64, 0x04, 0x00, 0x04, 0x2A, 0x02, 0x00, 0x02, 0x60, 0xAC, 0x64, 0xBD, 0xD9, 0xBD, 0xDB, - 0x1C, 0x60, 0x08, 0xF3, 0xFF, 0xFF, 0x03, 0x18, 0x1A, 0x60, 0x2D, 0xF3, 0x03, 0x00, 0x1A, 0x60, - 0x1D, 0xF3, 0xFF, 0xFF, 0xBD, 0xDA, 0x34, 0x60, 0x5C, 0x64, 0x1A, 0x60, 0xCF, 0xFB, 0x5F, 0xF5, - 0x00, 0x64, 0x2B, 0xFA, 0x00, 0x64, 0x2A, 0xFA, 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, - 0x32, 0xF8, 0xBD, 0xD1, 0x2D, 0xF8, 0x33, 0xF8, 0xA3, 0xD1, 0x2E, 0xF8, 0x34, 0xF8, 0x00, 0xF4, - 0x01, 0x63, 0x32, 0x40, 0x08, 0x26, 0x10, 0xBB, 0x16, 0x60, 0xC2, 0xF1, 0xFF, 0xFF, 0x64, 0x40, - 0xFE, 0x26, 0x10, 0xBB, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x0A, 0x00, 0x19, 0x60, - 0x45, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x22, 0x20, 0xBB, 0x63, 0x44, 0xFF, 0xFF, 0x04, 0x7F, - 0x60, 0x43, 0x09, 0xFC, 0x27, 0x42, 0x0C, 0xA2, 0x2D, 0x60, 0x5A, 0x63, 0xA2, 0xD3, 0xA3, 0xD3, - 0x00, 0xBD, 0x01, 0x63, 0xAC, 0x81, 0x09, 0x03, 0x08, 0x03, 0xB8, 0x60, 0x58, 0x4D, 0x15, 0x78, - 0xFF, 0xFF, 0x00, 0xB8, 0x01, 0x63, 0x01, 0x03, 0x60, 0x43, 0x0E, 0x60, 0x35, 0xFD, 0x12, 0x61, - 0x59, 0xDC, 0x16, 0x60, 0xC2, 0xF3, 0xFF, 0x60, 0xFF, 0x7C, 0x60, 0x40, 0x0B, 0x2A, 0x02, 0x00, - 0x33, 0x60, 0x28, 0x7C, 0x1A, 0x60, 0xD0, 0xF9, 0x35, 0x60, 0x98, 0x64, 0x40, 0x48, 0xD9, 0x81, - 0xFF, 0x60, 0xF2, 0x64, 0xF1, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x5F, 0xF5, 0x3F, 0xFC, - 0xDB, 0x83, 0x1A, 0x60, 0x4C, 0xFD, 0x00, 0x7C, 0x5A, 0xD9, 0x63, 0x41, 0x34, 0x60, 0x9C, 0x63, - 0x12, 0x65, 0x00, 0xF4, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, - 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, - 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x5F, 0xF5, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0xC1, 0xFE, 0x06, 0x64, 0x68, 0xFB, 0x46, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x1C, 0x60, - 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x60, - 0x1C, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xDE, 0x60, 0x84, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xDE, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x08, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0xF6, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, 0x00, 0x63, 0x00, 0xA8, 0x68, 0xFD, 0x06, 0x02, - 0x09, 0xF2, 0xFF, 0xFF, 0x01, 0xB0, 0x01, 0x7C, 0x5A, 0x02, 0x0A, 0xF8, 0x0A, 0xF2, 0x26, 0x46, - 0x40, 0x59, 0x02, 0x60, 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, - 0x31, 0xF2, 0x59, 0xDB, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, - 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x05, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, - 0xFF, 0xFF, 0xE7, 0x60, 0x0B, 0x78, 0xFF, 0xFF, 0x47, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xD9, 0x60, - 0xCA, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x20, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, - 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x49, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xDA, 0x60, 0x62, 0x78, 0xFF, 0xFF, 0xFF, 0x60, - 0xFB, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x4A, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xD9, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0x48, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x0C, 0xF2, 0xFF, 0xFF, 0x60, 0x41, 0xFF, 0xB1, 0xFF, 0xA1, 0x60, 0x47, - 0xFF, 0xB4, 0x9B, 0x02, 0x9A, 0x03, 0x34, 0x60, 0xF4, 0x63, 0x10, 0x64, 0xBD, 0xDB, 0x66, 0x45, - 0x26, 0x46, 0x3F, 0xF2, 0x34, 0x60, 0xF2, 0x61, 0xC2, 0xA0, 0xFF, 0xFF, 0x01, 0x04, 0x3E, 0x64, - 0x65, 0x46, 0x02, 0xA4, 0xA1, 0xDB, 0xC8, 0x81, 0x12, 0x65, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, - 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, - 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x0C, 0xF2, - 0xFF, 0xFF, 0x1A, 0x65, 0x60, 0x47, 0xFF, 0xB4, 0xC4, 0x85, 0xDC, 0x60, 0x58, 0x4D, 0xC7, 0x78, - 0xFF, 0xFF, 0x0B, 0xF2, 0xFF, 0xFF, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, - 0xFD, 0x02, 0x61, 0x44, 0x94, 0xFB, 0x27, 0x45, 0x02, 0x62, 0x46, 0xD3, 0x5A, 0xD1, 0x60, 0x47, - 0x56, 0xFB, 0x64, 0x47, 0x55, 0xFB, 0x00, 0x64, 0x5B, 0xFB, 0x0C, 0x62, 0x46, 0xD3, 0x7E, 0xFB, - 0x0B, 0xF0, 0x0F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0x83, 0xFB, 0x26, 0x46, 0x32, 0xF0, 0x7F, 0xF9, - 0x33, 0xF0, 0x0E, 0x63, 0xC7, 0x81, 0x80, 0xF9, 0x34, 0xF0, 0x81, 0xF9, 0x59, 0xD1, 0xFF, 0xFF, - 0x64, 0x44, 0x01, 0x2A, 0xC8, 0x84, 0x60, 0x43, 0x33, 0x60, 0xBC, 0x64, 0x58, 0xD9, 0x59, 0xD1, - 0x58, 0xD9, 0xFD, 0x1F, 0x16, 0x60, 0xC2, 0xF1, 0x59, 0xD3, 0x64, 0x40, 0x01, 0x36, 0x22, 0x64, - 0x64, 0x40, 0x00, 0x36, 0x50, 0x94, 0xA6, 0xF1, 0xFF, 0xFF, 0x44, 0x47, 0xA7, 0x46, 0x3A, 0xFA, - 0xBB, 0xFC, 0xA7, 0x46, 0x0E, 0x60, 0x35, 0xF3, 0x85, 0xFB, 0x2E, 0x60, 0x2E, 0x64, 0x2D, 0x60, - 0x8A, 0x63, 0xA0, 0xD1, 0xA3, 0xD9, 0x64, 0x41, 0x58, 0xD1, 0x5B, 0xD9, 0x7D, 0xF3, 0x66, 0x45, - 0xA6, 0xF5, 0x60, 0x40, 0x01, 0x27, 0x08, 0x00, 0x91, 0xFA, 0x61, 0x44, 0xFD, 0x60, 0x58, 0x4E, - 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x07, 0x00, 0x11, 0xF8, 0x64, 0x44, 0xFD, 0x60, 0x58, 0x4E, - 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x65, 0x46, 0x31, 0xF2, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, - 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, - 0x61, 0x46, 0x31, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x30, 0xF0, - 0x63, 0x46, 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x2F, 0xF0, 0x63, 0x46, 0xD0, 0x80, - 0xFF, 0xFF, 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, - 0x60, 0x43, 0x61, 0x46, 0xA6, 0xF1, 0xFF, 0xFF, 0xD3, 0x80, 0x31, 0xF2, 0x27, 0x02, 0x66, 0x41, - 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, 0xA6, 0xF1, 0xE0, 0x84, 0x44, 0xD3, 0x64, 0x43, - 0x11, 0x18, 0x60, 0x46, 0x00, 0xF2, 0xFF, 0xFF, 0xFC, 0x1B, 0x66, 0x44, 0x64, 0x46, 0x80, 0xF0, - 0x60, 0x46, 0x80, 0xF8, 0x65, 0x46, 0x65, 0x43, 0x80, 0xF0, 0x01, 0xFA, 0x80, 0xFC, 0x64, 0x46, - 0x80, 0xF8, 0x0B, 0x00, 0x64, 0x46, 0x62, 0x43, 0x00, 0xF2, 0xA3, 0xDB, 0x60, 0x46, 0x80, 0xF0, - 0x81, 0xFC, 0x80, 0xFC, 0x64, 0x46, 0x80, 0xF8, 0x60, 0x43, 0x61, 0x46, 0x43, 0x4B, 0x01, 0x65, - 0xFD, 0x60, 0x58, 0x4E, 0xDD, 0x78, 0xFF, 0xFF, 0x43, 0x47, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, - 0xFA, 0xA3, 0x00, 0x60, 0x17, 0x61, 0x00, 0x60, 0x01, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, - 0xFD, 0x60, 0x58, 0x4E, 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, - 0x40, 0x4A, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, - 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0x65, 0x00, 0x64, 0x19, 0x60, 0x3B, 0xFB, - 0x02, 0x00, 0x20, 0xFE, 0xFF, 0x65, 0x02, 0x60, 0x00, 0x63, 0x60, 0xFE, 0xBD, 0xD3, 0xBD, 0xD3, - 0x60, 0x41, 0x20, 0xFE, 0xCD, 0x81, 0x60, 0x40, 0x80, 0x2A, 0x39, 0x00, 0x7F, 0xB4, 0x02, 0x3A, - 0x02, 0x00, 0x01, 0x64, 0x2E, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x2A, 0x00, 0x0B, 0x3A, - 0x02, 0x00, 0x04, 0x64, 0x26, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x22, 0x00, 0x0C, 0x3A, - 0x02, 0x00, 0x10, 0x64, 0x1E, 0x00, 0x12, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x1A, 0x00, 0x18, 0x3A, - 0x02, 0x00, 0x40, 0x64, 0x16, 0x00, 0x24, 0x3A, 0x02, 0x00, 0x80, 0x64, 0x12, 0x00, 0x30, 0x3A, - 0x02, 0x00, 0x01, 0x67, 0x0E, 0x00, 0x48, 0x3A, 0x02, 0x00, 0x02, 0x67, 0x0A, 0x00, 0x60, 0x3A, - 0x02, 0x00, 0x04, 0x67, 0x06, 0x00, 0x6C, 0x3A, 0x02, 0x00, 0x08, 0x67, 0x02, 0x00, 0x00, 0x64, - 0x00, 0x00, 0x19, 0x60, 0x3B, 0xF1, 0xFF, 0xFF, 0xB0, 0x84, 0x19, 0x60, 0x3B, 0xFB, 0x61, 0x40, - 0x00, 0x36, 0x05, 0x00, 0x60, 0xFE, 0xBD, 0xD3, 0xFF, 0xFF, 0x20, 0xFE, 0xBB, 0x01, 0x65, 0x40, - 0x00, 0x3A, 0x1E, 0x00, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xFA, 0xA3, 0x00, 0x60, - 0x17, 0x61, 0x00, 0x60, 0x32, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, - 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, - 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x91, 0x01, - 0x20, 0xFE, 0x00, 0x65, 0xFC, 0x60, 0x58, 0x4E, 0xC7, 0x78, 0xFF, 0xFF, 0xA1, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x27, 0x04, 0x00, 0xFD, 0x60, 0x58, 0x4E, 0x11, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x37, 0x60, 0xF8, 0x61, 0xA1, 0xD1, 0xA1, 0xF3, 0x01, 0x60, 0xAC, 0x63, 0x60, 0x45, 0x2A, 0x44, - 0x79, 0xFB, 0xA3, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x5B, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x59, 0xD1, - 0x66, 0x41, 0xA0, 0x84, 0x24, 0x94, 0x2B, 0x46, 0x0F, 0xFA, 0x7A, 0xFB, 0x16, 0x64, 0x12, 0xFA, - 0x01, 0x64, 0x11, 0xFA, 0x66, 0x5C, 0xC2, 0x60, 0x58, 0x4E, 0x6D, 0x78, 0xFF, 0xFF, 0x1A, 0x60, - 0x22, 0xF3, 0x1A, 0x60, 0x21, 0xF1, 0x60, 0x47, 0xB0, 0x84, 0x1C, 0x60, 0x08, 0xF1, 0xFF, 0xFF, - 0x01, 0x18, 0x80, 0xBC, 0x16, 0x60, 0xC2, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x22, 0x64, - 0x64, 0x40, 0x00, 0x36, 0x50, 0x94, 0xA7, 0x46, 0x3A, 0xFA, 0xBB, 0xFC, 0xA7, 0x46, 0x80, 0x60, - 0x03, 0x65, 0x32, 0x40, 0x08, 0x2A, 0x03, 0x65, 0xA7, 0x46, 0x06, 0xF0, 0x7F, 0x60, 0xFF, 0x64, - 0xA0, 0x84, 0xB4, 0x84, 0x06, 0xFA, 0xBB, 0xFC, 0xA7, 0x46, 0x26, 0x46, 0x2F, 0xF0, 0x30, 0xF0, - 0x64, 0x43, 0x31, 0xF2, 0x27, 0x46, 0x03, 0xFC, 0x04, 0xF8, 0x05, 0xFA, 0x26, 0x46, 0xD9, 0x60, - 0x58, 0x4E, 0xAE, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, - 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0x01, 0x64, 0x8A, 0xFB, 0x16, 0x60, - 0xC9, 0xF3, 0x20, 0x41, 0x00, 0xBC, 0x20, 0xB9, 0x01, 0x03, 0x41, 0x40, 0x20, 0x60, 0x14, 0x61, - 0xA1, 0xDF, 0x04, 0x64, 0xC1, 0xFE, 0xDB, 0xFB, 0xF1, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xF1, 0xFB, - 0xF7, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, - 0x33, 0x60, 0xE6, 0x65, 0xA5, 0xDF, 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x0C, 0x64, 0x68, 0xFB, 0x00, 0x60, 0x31, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xE1, 0x60, 0x36, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x00, 0x60, 0x02, 0x64, 0x08, 0x60, 0x28, 0xFB, - 0xE1, 0x60, 0xF7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, - 0x27, 0xFB, 0x5A, 0xDB, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x01, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x0F, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1B, 0x60, 0xFE, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, 0xE7, 0x60, - 0x2E, 0x78, 0xFF, 0xFF, 0xE7, 0x60, 0x2E, 0x78, 0xFF, 0xFF, 0xE1, 0x60, 0xE7, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xF8, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xA6, 0xF3, - 0xFF, 0xFF, 0x02, 0xA4, 0x60, 0x43, 0x66, 0x41, 0x63, 0x46, 0x05, 0xF2, 0x00, 0xF0, 0x81, 0xF0, - 0x02, 0x18, 0x64, 0x46, 0x81, 0xF8, 0x07, 0x1B, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD9, 0x02, 0x00, 0x65, 0x46, 0x00, 0xF8, 0xA6, 0xF3, 0x63, 0x45, 0x60, 0x46, - 0x00, 0xF2, 0xFF, 0xFF, 0xD4, 0x80, 0x01, 0x18, 0xFA, 0x04, 0x80, 0xF8, 0x65, 0x46, 0x00, 0xFA, - 0x06, 0xF2, 0xFF, 0xFF, 0x00, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0x4B, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x95, 0xF3, 0xFF, 0xFF, 0x10, 0xB0, - 0xFF, 0xFF, 0x11, 0x03, 0x04, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE1, 0x60, 0x9B, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x69, 0xF3, 0xFF, 0xFF, 0x01, 0xB0, 0xFF, 0xFF, 0x11, 0x03, - 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x02, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE1, 0x60, 0xB1, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x64, 0x68, 0xFB, 0xE2, 0x60, - 0x58, 0x4E, 0x13, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x8A, 0xFB, 0x02, 0x64, 0xC1, 0xFE, 0xDB, 0xFB, - 0xF1, 0xF3, 0xFF, 0xFF, 0x01, 0xBC, 0xF1, 0xFB, 0x02, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, - 0xFF, 0xFF, 0x03, 0x60, 0xE8, 0x63, 0x0E, 0x60, 0x36, 0xFD, 0x08, 0x60, 0x77, 0xF3, 0xFF, 0xFF, - 0x13, 0x1B, 0x16, 0x60, 0xCC, 0xF3, 0x00, 0x61, 0x60, 0x40, 0x00, 0x36, 0x00, 0xB9, 0x60, 0x40, - 0x01, 0x36, 0x01, 0xB9, 0x60, 0x40, 0x02, 0x36, 0x06, 0xB9, 0x60, 0x40, 0x03, 0x36, 0x07, 0xB9, - 0x41, 0x44, 0xD4, 0x60, 0xF6, 0x78, 0xFF, 0xFF, 0xD3, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x00, 0x60, - 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xFF, 0xFF, 0x08, 0x24, 0x46, 0x01, 0xA0, 0x84, 0xA2, 0xDB, - 0x00, 0x63, 0x68, 0xFD, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x30, 0x00, 0x20, 0x40, - 0x06, 0x23, 0x10, 0x00, 0x08, 0x60, 0x27, 0xF1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, - 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x28, 0xFB, 0xE1, 0x60, 0xF7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, 0x10, 0x60, 0x4E, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x44, 0x01, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x01, 0x64, 0x8A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x50, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x95, 0xF3, - 0xFF, 0xFF, 0x10, 0xB0, 0xFF, 0xFF, 0x11, 0x03, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x04, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE2, 0x60, - 0x2A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xB9, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, - 0x7D, 0xF1, 0x7C, 0xF9, 0x02, 0x64, 0x8A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x8A, 0xF3, 0x00, 0x65, - 0xD4, 0x80, 0xFF, 0xFF, 0x0E, 0x03, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x80, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE2, 0x60, 0x4A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x51, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x1B, 0x60, 0xB0, 0x64, 0x67, 0xFB, 0x1C, 0x60, 0x72, 0x63, 0x7F, 0xF3, 0xBD, 0xDB, 0x80, 0xF3, - 0xBD, 0xDB, 0x81, 0xF3, 0xA3, 0xDB, 0x67, 0xF3, 0x00, 0x60, 0x86, 0xF1, 0x04, 0xA4, 0x67, 0xFB, - 0xD0, 0x80, 0xA0, 0xD3, 0x1F, 0x07, 0x40, 0x47, 0x60, 0x41, 0x0E, 0x65, 0x45, 0xD3, 0x16, 0x60, - 0xC2, 0xF1, 0xFF, 0xFF, 0x03, 0x1B, 0x10, 0xB0, 0xFF, 0xFF, 0xED, 0x02, 0x27, 0x44, 0x06, 0xA4, - 0x60, 0x41, 0xA1, 0xD1, 0x7F, 0xF3, 0x80, 0xF1, 0xD0, 0x80, 0x59, 0xD3, 0x08, 0x02, 0xD0, 0x80, - 0x81, 0xF3, 0x59, 0xD1, 0x04, 0x02, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x02, 0x03, 0x00, 0xE2, 0x60, - 0xE6, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0x72, 0x63, 0xBD, 0xD3, 0x7F, 0xFB, 0xBD, 0xD3, 0x80, 0xFB, - 0xA3, 0xD3, 0x81, 0xFB, 0x53, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE2, 0x60, - 0x9A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7C, 0xF1, 0x7D, 0xF9, 0x13, 0x60, - 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x16, 0xFB, 0xE2, 0x60, 0xC7, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x01, 0x63, 0x8A, 0xFD, 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, - 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, 0x54, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x31, 0x44, 0xF9, 0xB4, 0x40, 0x51, 0xE1, 0x60, 0x22, 0x78, 0xFF, 0xFF, 0x27, 0x43, 0x33, 0x60, - 0xBE, 0x65, 0xA5, 0xD3, 0x65, 0x41, 0x10, 0xA3, 0x01, 0xA4, 0xFE, 0xB4, 0xC4, 0x85, 0xFE, 0xA1, - 0xBD, 0xD3, 0x59, 0xD1, 0xFF, 0xFF, 0xD0, 0x80, 0xD5, 0x80, 0x02, 0x02, 0x04, 0x03, 0xF8, 0x01, - 0xE2, 0x60, 0x73, 0x78, 0xFF, 0xFF, 0x55, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x10, 0x60, 0x2A, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x16, 0xFB, - 0xE2, 0x60, 0xFE, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x27, 0xD1, 0x7D, 0xF9, - 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x16, 0xFB, 0xE3, 0x60, 0x20, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x07, 0x60, 0xD0, 0x64, 0x0E, 0x60, 0x4B, 0xFB, - 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, - 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD3, 0x7F, 0xFB, 0xBD, 0xD3, 0x80, 0xFB, 0xA3, 0xD3, 0x81, 0xFB, - 0x31, 0x44, 0xF9, 0xB4, 0x40, 0x51, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, - 0x04, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE3, 0x60, 0x51, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xB9, 0xF1, 0x0E, 0x60, 0x4B, 0xF9, 0x08, 0x60, 0x15, 0xF1, 0xFE, 0x60, 0xFF, 0x61, - 0xA1, 0x84, 0x5A, 0xD1, 0x4A, 0xDB, 0xA1, 0x84, 0x5A, 0xDB, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, - 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xE2, 0x60, 0x73, 0x78, - 0xFF, 0xFF, 0x7D, 0xF1, 0x32, 0x60, 0x7A, 0x61, 0xA1, 0xD3, 0x64, 0x40, 0x01, 0x27, 0x59, 0xD3, - 0x32, 0x60, 0x7E, 0x61, 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0xA1, 0xDB, 0x27, 0x42, - 0x0C, 0xA2, 0xA2, 0xD3, 0x16, 0x60, 0xAD, 0xF3, 0x00, 0xBD, 0x01, 0x63, 0xAC, 0x81, 0x09, 0x03, - 0x08, 0x03, 0xB8, 0x60, 0x58, 0x4D, 0x15, 0x78, 0xFF, 0xFF, 0x00, 0xB8, 0x01, 0x63, 0x01, 0x03, - 0x60, 0x43, 0x0E, 0x60, 0x35, 0xFD, 0x5F, 0xF5, 0x00, 0x64, 0x2B, 0xFA, 0x20, 0x64, 0x2A, 0xFA, - 0x27, 0x43, 0x06, 0xA3, 0xBD, 0xD1, 0x2C, 0xF8, 0x32, 0xF8, 0xBD, 0xD1, 0x2D, 0xF8, 0x33, 0xF8, - 0xA3, 0xD1, 0x2E, 0xF8, 0x34, 0xF8, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, - 0x31, 0xF8, 0xB9, 0xF1, 0x19, 0xF8, 0xF8, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0x00, 0xF4, 0x01, 0x63, - 0x32, 0x40, 0x08, 0x26, 0x10, 0xBB, 0x16, 0x60, 0xC2, 0xF1, 0xFF, 0xFF, 0x64, 0x40, 0xFE, 0x26, - 0x10, 0xBB, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x0A, 0x00, 0x19, 0x60, 0x45, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x22, 0x20, 0xBB, 0x63, 0x44, 0xFF, 0xFF, 0x04, 0x7F, 0x60, 0x43, - 0x09, 0xFC, 0x0E, 0x60, 0x35, 0xF3, 0x12, 0x61, 0x59, 0xDA, 0x1C, 0x60, 0x72, 0x63, 0xBD, 0xD1, - 0x59, 0xD8, 0xBD, 0xD1, 0x59, 0xD8, 0xA3, 0xD1, 0x59, 0xD8, 0x35, 0x60, 0x98, 0x64, 0x40, 0x48, - 0xD9, 0x81, 0xFF, 0x60, 0xF2, 0x64, 0xF1, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x5F, 0xF5, - 0x3F, 0xFC, 0xDB, 0x83, 0x1A, 0x60, 0x4C, 0xFD, 0x20, 0x7C, 0x5A, 0xD9, 0x63, 0x41, 0x34, 0x60, - 0x9C, 0x63, 0x12, 0x65, 0x00, 0xF4, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, - 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, - 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x5F, 0xF5, 0x25, 0x60, 0xCE, 0x64, - 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0xC1, 0xFE, 0x16, 0x64, 0x68, 0xFB, 0x56, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x0E, 0x60, 0x38, 0xF3, 0xFF, 0xFF, 0x64, 0xA4, 0xA2, 0xDB, 0x0E, 0x60, 0x38, 0xF1, 0x0E, 0x60, - 0x4B, 0xF9, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x00, 0x60, 0x1C, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE4, 0x60, 0x23, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x0E, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x57, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x00, 0x64, - 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xE2, 0x60, 0x73, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x16, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, - 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x58, 0x64, - 0x3B, 0x42, 0x5A, 0xDB, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xE6, 0x60, 0x36, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x3D, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x92, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x68, 0xFB, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x26, 0x46, 0x00, 0xF4, 0x0A, 0xF2, 0x09, 0xF2, 0x04, 0x1B, 0x01, 0xB0, 0x01, 0x7C, 0x2D, 0x02, - 0x0A, 0xF8, 0x59, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0x0A, 0xF2, 0x26, 0x46, 0x40, 0x59, 0x02, 0x60, - 0x00, 0x61, 0x2F, 0xF2, 0xA1, 0xDB, 0x30, 0xF2, 0x41, 0x58, 0x59, 0xDB, 0x31, 0xF2, 0x59, 0xDB, - 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0x05, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0x96, 0x78, 0xFF, 0xFF, 0xE7, 0x60, - 0x0B, 0x78, 0xFF, 0xFF, 0xE2, 0x60, 0x73, 0x78, 0xFF, 0xFF, 0x5A, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x78, 0x43, 0x02, 0x61, 0x29, 0x60, 0xEA, 0x78, 0xFF, 0xFF, 0x5B, 0x64, 0x3B, 0x42, 0x5A, 0xDB, - 0x0C, 0xF2, 0xFF, 0xFF, 0x60, 0x41, 0xFF, 0xB1, 0xFF, 0xA1, 0x60, 0x47, 0xFF, 0xB4, 0xC8, 0x02, - 0xC7, 0x03, 0x34, 0x60, 0xF4, 0x63, 0x30, 0x64, 0xBD, 0xDB, 0x66, 0x45, 0x26, 0x46, 0x3F, 0xF2, - 0x34, 0x60, 0xF2, 0x61, 0xC2, 0xA0, 0xFF, 0xFF, 0x01, 0x04, 0x3E, 0x64, 0x65, 0x46, 0x02, 0xA4, - 0xA1, 0xDB, 0xC8, 0x81, 0x12, 0x65, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, - 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, - 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x0C, 0xF2, 0xFF, 0xFF, 0x1A, 0x65, - 0x60, 0x47, 0xFF, 0xB4, 0xC4, 0x85, 0xDC, 0x60, 0x58, 0x4D, 0xC7, 0x78, 0xFF, 0xFF, 0x0B, 0xF2, - 0xFF, 0xFF, 0x07, 0xB4, 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0x61, 0x44, - 0x94, 0xFB, 0x27, 0x45, 0x02, 0x62, 0x46, 0xD3, 0x5A, 0xD1, 0x60, 0x47, 0x56, 0xFB, 0x64, 0x47, - 0x55, 0xFB, 0x00, 0x64, 0x5B, 0xFB, 0x0C, 0x62, 0x46, 0xD3, 0x7E, 0xFB, 0x0B, 0xF0, 0x0F, 0x60, - 0xFF, 0x64, 0xA0, 0x84, 0x83, 0xFB, 0x1C, 0x60, 0x6A, 0x62, 0xA2, 0xD3, 0x85, 0xFB, 0x26, 0x46, - 0x32, 0xF0, 0x7F, 0xF9, 0x33, 0xF0, 0x80, 0xF9, 0x34, 0xF0, 0x81, 0xF9, 0x2E, 0x60, 0x2E, 0x64, - 0x2D, 0x60, 0x8A, 0x63, 0xA0, 0xD1, 0xA3, 0xD9, 0x64, 0x41, 0x58, 0xD1, 0x5B, 0xD9, 0x7D, 0xF3, - 0x66, 0x45, 0xA6, 0xF5, 0x60, 0x40, 0x01, 0x27, 0x08, 0x00, 0x91, 0xFA, 0x61, 0x44, 0xFD, 0x60, - 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x07, 0x00, 0x11, 0xF8, 0x64, 0x44, 0xFD, 0x60, - 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x12, 0xFA, 0x65, 0x46, 0xA6, 0xF3, 0xFF, 0xFF, 0x02, 0xA4, - 0x40, 0x4B, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xFA, 0xA3, 0x00, 0x60, 0x17, 0x61, 0x00, 0x60, - 0x01, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, 0x7A, 0x78, 0xFF, 0xFF, - 0x00, 0xBB, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x64, 0x40, 0x4A, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, - 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x00, 0x65, 0x00, 0x64, 0x19, 0x60, 0x3B, 0xFB, 0x02, 0x00, 0x20, 0xFE, 0xFF, 0x65, 0x02, 0x60, - 0x00, 0x63, 0x60, 0xFE, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0x20, 0xFE, 0xCD, 0x81, 0x60, 0x40, - 0x80, 0x2A, 0x39, 0x00, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, 0x01, 0x64, 0x2E, 0x00, 0x04, 0x3A, - 0x02, 0x00, 0x02, 0x64, 0x2A, 0x00, 0x0B, 0x3A, 0x02, 0x00, 0x04, 0x64, 0x26, 0x00, 0x16, 0x3A, - 0x02, 0x00, 0x08, 0x64, 0x22, 0x00, 0x0C, 0x3A, 0x02, 0x00, 0x10, 0x64, 0x1E, 0x00, 0x12, 0x3A, - 0x02, 0x00, 0x20, 0x64, 0x1A, 0x00, 0x18, 0x3A, 0x02, 0x00, 0x40, 0x64, 0x16, 0x00, 0x24, 0x3A, - 0x02, 0x00, 0x80, 0x64, 0x12, 0x00, 0x30, 0x3A, 0x02, 0x00, 0x01, 0x67, 0x0E, 0x00, 0x48, 0x3A, - 0x02, 0x00, 0x02, 0x67, 0x0A, 0x00, 0x60, 0x3A, 0x02, 0x00, 0x04, 0x67, 0x06, 0x00, 0x6C, 0x3A, - 0x02, 0x00, 0x08, 0x67, 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x19, 0x60, 0x3B, 0xF1, 0xFF, 0xFF, - 0xB0, 0x84, 0x19, 0x60, 0x3B, 0xFB, 0x61, 0x40, 0x00, 0x36, 0x05, 0x00, 0x60, 0xFE, 0xBD, 0xD3, - 0xFF, 0xFF, 0x20, 0xFE, 0xBB, 0x01, 0x65, 0x40, 0x00, 0x3A, 0x1E, 0x00, 0x26, 0x46, 0x3F, 0xF2, - 0x00, 0xF4, 0x60, 0x43, 0xFA, 0xA3, 0x00, 0x60, 0x17, 0x61, 0x00, 0x60, 0x32, 0x65, 0x01, 0x60, - 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, 0x58, 0x4E, 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, - 0x0B, 0x03, 0x60, 0xFE, 0x02, 0x60, 0x00, 0x63, 0xBD, 0xD3, 0xBD, 0xD3, 0x60, 0x41, 0xFE, 0x60, - 0x58, 0x4E, 0x2C, 0x78, 0xFF, 0xFF, 0x91, 0x01, 0x20, 0xFE, 0x00, 0x65, 0xFC, 0x60, 0x58, 0x4E, - 0xC7, 0x78, 0xFF, 0xFF, 0xA1, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x27, 0x04, 0x00, 0xFD, 0x60, - 0x58, 0x4E, 0x11, 0x78, 0xFF, 0xFF, 0x20, 0xFE, 0x37, 0x60, 0xF8, 0x61, 0xA1, 0xD1, 0xA1, 0xF3, - 0x01, 0x60, 0xAC, 0x63, 0x60, 0x45, 0x2A, 0x44, 0x79, 0xFB, 0xA3, 0xD5, 0x65, 0x40, 0x01, 0x27, - 0x5B, 0xD5, 0x65, 0x40, 0x01, 0x27, 0x59, 0xD1, 0x66, 0x41, 0xA0, 0x84, 0x24, 0x94, 0x2B, 0x46, - 0x0F, 0xFA, 0x7A, 0xFB, 0x16, 0x64, 0x12, 0xFA, 0x01, 0x64, 0x11, 0xFA, 0x66, 0x5C, 0xC2, 0x60, - 0x58, 0x4E, 0x6D, 0x78, 0xFF, 0xFF, 0xA6, 0xF3, 0xFF, 0xFF, 0x02, 0xA4, 0x40, 0x4B, 0x60, 0x46, - 0x00, 0x64, 0x17, 0xFA, 0x00, 0x64, 0x16, 0xFA, 0x13, 0xFA, 0x00, 0x65, 0x26, 0x46, 0xFD, 0x60, - 0x58, 0x4E, 0xDD, 0x78, 0xFF, 0xFF, 0xA6, 0xF3, 0x1D, 0x60, 0xC0, 0x65, 0x02, 0xA4, 0x60, 0x46, - 0x05, 0xF0, 0x60, 0x41, 0x64, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x00, 0x7C, 0x44, 0xD9, 0x26, 0x46, - 0x31, 0xF2, 0x61, 0x5C, 0x60, 0x47, 0x00, 0x7F, 0xE0, 0x84, 0x44, 0xD9, 0x26, 0x46, 0x2F, 0xF0, - 0x61, 0x46, 0x03, 0xF8, 0x26, 0x46, 0x30, 0xF0, 0x61, 0x46, 0x04, 0xF8, 0x26, 0x46, 0x31, 0xF0, - 0x61, 0x46, 0x05, 0xF8, 0x26, 0x46, 0xD9, 0x60, 0x58, 0x4E, 0xAE, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0x03, 0x65, 0xF1, 0x60, 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, 0x01, 0x63, 0x8A, 0xFD, - 0x08, 0x60, 0x0C, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xC1, 0xFE, - 0x5C, 0x64, 0x3B, 0x42, 0x5A, 0xDB, 0xE1, 0x60, 0x22, 0x78, 0xFF, 0xFF, 0xFF, 0x60, 0xF7, 0x65, - 0x20, 0x44, 0x24, 0x80, 0xDA, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0xDB, 0xF3, 0xFF, 0xFF, 0xFD, 0xA0, - 0x2A, 0xF2, 0x03, 0x03, 0xE6, 0x60, 0xDE, 0x78, 0xFF, 0xFF, 0x60, 0x40, 0xB0, 0x36, 0x11, 0x00, - 0xC0, 0x36, 0x02, 0x00, 0x2F, 0x58, 0xFF, 0xFF, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, - 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xDA, 0x60, 0x74, 0x78, - 0xFF, 0xFF, 0x66, 0x45, 0x00, 0xF4, 0x0A, 0xF2, 0x0B, 0xF2, 0xFE, 0xA0, 0xF3, 0xA0, 0x67, 0x02, - 0x60, 0x41, 0x09, 0xF2, 0x1D, 0x03, 0x00, 0xA0, 0xFF, 0xA0, 0x4B, 0x03, 0x5D, 0x03, 0x00, 0xA0, - 0xFF, 0xFF, 0x47, 0x03, 0x01, 0x64, 0x10, 0x60, 0x0B, 0xFB, 0x0D, 0x64, 0x10, 0x60, 0x0C, 0xFB, - 0x03, 0x64, 0x10, 0x60, 0x0D, 0xFB, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, - 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xDA, 0x60, 0x74, 0x78, 0xFF, 0xFF, - 0x16, 0x60, 0xC3, 0xF3, 0xFF, 0xFF, 0xFE, 0xA0, 0x20, 0x60, 0x16, 0x61, 0x15, 0x02, 0x01, 0x64, - 0xA1, 0xDB, 0x00, 0x64, 0x10, 0x60, 0x0C, 0xFB, 0x01, 0x64, 0x10, 0x60, 0x0D, 0xFB, 0x26, 0x46, - 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0xDA, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0xA1, 0xDB, 0x00, 0x64, 0x10, 0x60, - 0x0C, 0xFB, 0x01, 0x64, 0x10, 0x60, 0x0D, 0xFB, 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, - 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0x00, 0x66, 0x46, 0x46, 0xDA, 0x60, 0x74, 0x78, - 0xFF, 0xFF, 0x65, 0x46, 0x07, 0xF4, 0x06, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x65, 0x46, - 0x26, 0x46, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, - 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xDC, 0x60, 0x09, 0x78, 0xFF, 0xFF, 0x0A, 0xF2, - 0x09, 0xF2, 0xFC, 0xA0, 0xFF, 0xA0, 0x11, 0x02, 0x0A, 0x02, 0x0B, 0xF2, 0x65, 0x46, 0x0A, 0x1B, - 0x66, 0x41, 0x07, 0xF4, 0x06, 0xF2, 0xFF, 0xFF, 0x01, 0x7E, 0x06, 0xFA, 0x61, 0x46, 0xDA, 0x60, - 0x74, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x65, 0x46, 0x68, 0xF1, 0x2A, 0xF2, - 0x64, 0x41, 0x60, 0x40, 0xA0, 0x3A, 0x02, 0x00, 0x08, 0xB1, 0x04, 0x00, 0xC0, 0x3A, 0x0B, 0x00, - 0x04, 0xB1, 0xFF, 0xFF, 0x1E, 0x03, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x16, 0x00, 0xB0, 0x3A, 0x02, 0x00, 0x01, 0x65, 0x07, 0x00, 0x10, 0x3A, - 0x02, 0x00, 0x02, 0x65, 0x03, 0x00, 0x30, 0x3A, 0x0C, 0x00, 0x10, 0x65, 0xA5, 0x80, 0xFF, 0xFF, - 0x08, 0x03, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x00, 0x66, 0x2F, 0x58, 0xFF, 0xFF, 0x16, 0x60, 0xC3, 0xF3, 0xFF, 0xFF, 0xFC, 0xA0, 0xFF, 0xFF, - 0x14, 0x04, 0x00, 0x60, 0x02, 0x64, 0x08, 0x60, 0x16, 0xFB, 0xE7, 0x60, 0x1B, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x19, 0x60, 0xA5, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, - 0xFF, 0xFF, 0x03, 0x03, 0xDA, 0x60, 0x74, 0x78, 0xFF, 0xFF, 0x20, 0x40, 0x08, 0x2A, 0x03, 0x00, - 0xD9, 0x60, 0xCA, 0x78, 0xFF, 0xFF, 0xE2, 0x60, 0x73, 0x78, 0xFF, 0xFF, 0x4E, 0x64, 0x3B, 0x42, - 0x5A, 0xDB, 0x2E, 0xF5, 0xFF, 0xFF, 0x27, 0xF2, 0x1D, 0x60, 0xC0, 0x65, 0x60, 0x47, 0x00, 0x7F, - 0xE0, 0x84, 0x44, 0xD3, 0x66, 0x41, 0x60, 0x46, 0x60, 0x43, 0x05, 0xF2, 0x16, 0x18, 0x61, 0x46, - 0x27, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0x04, 0xF2, 0x0C, 0x02, 0x61, 0x46, 0x26, 0xF0, 0x63, 0x46, - 0xD0, 0x80, 0x03, 0xF2, 0x06, 0x02, 0x61, 0x46, 0x25, 0xF0, 0x63, 0x46, 0xD0, 0x80, 0xFF, 0xFF, - 0x07, 0x03, 0x80, 0xF4, 0xFF, 0xFF, 0x63, 0x46, 0xE8, 0x1B, 0xA6, 0xF3, 0x08, 0xFE, 0x60, 0x43, - 0x61, 0x46, 0x25, 0xF2, 0x26, 0xF0, 0xA7, 0xF2, 0xA8, 0xF0, 0x65, 0xF5, 0xFF, 0xFF, 0x00, 0xF4, - 0xFF, 0xFF, 0x89, 0xF8, 0x65, 0xF5, 0xFF, 0xFF, 0x07, 0xFC, 0x2C, 0xFA, 0x2D, 0xF8, 0xAE, 0xFA, - 0xEA, 0xF3, 0x2F, 0xFA, 0xEB, 0xF3, 0x30, 0xFA, 0xEC, 0xF3, 0x31, 0xFA, 0x7F, 0xF3, 0x32, 0xFA, - 0x80, 0xF3, 0x33, 0xFA, 0x81, 0xF3, 0x34, 0xFA, 0x1B, 0x60, 0xFE, 0xF3, 0xFF, 0xFF, 0x03, 0x1B, - 0x00, 0x60, 0xA0, 0x64, 0x02, 0x00, 0x00, 0x60, 0xC0, 0x64, 0x2A, 0xFA, 0x02, 0x63, 0x3F, 0xFC, - 0xAB, 0xFC, 0x00, 0x64, 0x3E, 0xFA, 0xC9, 0xF1, 0x19, 0xF8, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x66, - 0x46, 0x46, 0xC1, 0xFE, 0x10, 0x60, 0x2A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xE1, 0x60, 0x34, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x3A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x61, 0xFB, 0xA6, 0xF3, 0x07, 0xFA, 0x0C, 0x60, 0x80, 0x64, 0xB9, 0xF1, 0x19, 0xF8, 0x0E, 0xFA, - 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x00, 0x60, 0x3A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, - 0xFF, 0xFF, 0x66, 0x44, 0x60, 0xFB, 0xA6, 0xF3, 0x07, 0xFA, 0x0C, 0x60, 0x80, 0x64, 0x0E, 0xFA, - 0xB9, 0xF1, 0x19, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0xE8, 0x60, 0xEA, 0x64, 0x08, 0x60, - 0x33, 0xFB, 0x00, 0x60, 0x80, 0x64, 0x08, 0x60, 0x10, 0xFB, 0xE7, 0x60, 0xCB, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x16, 0x60, 0x87, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, 0x03, 0xA8, - 0x04, 0x03, 0x03, 0x03, 0xE8, 0x60, 0xDC, 0x78, 0xFF, 0xFF, 0x04, 0x60, 0x00, 0x65, 0x20, 0x44, - 0x34, 0x80, 0x10, 0x60, 0x1E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x9B, 0xFE, 0x03, 0x05, 0x20, 0x40, - 0x4B, 0x23, 0x0A, 0x00, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, 0x10, 0xFB, 0xE7, 0x60, 0xD9, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x13, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x2A, 0x07, 0x00, 0x90, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x00, 0x64, 0xA2, 0xDB, - 0x04, 0x00, 0x10, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x8A, 0xF3, 0x58, 0xFB, 0x82, 0xF1, - 0xBA, 0xFE, 0x01, 0xA8, 0x59, 0xF9, 0x04, 0x02, 0x02, 0x64, 0x8A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, - 0x64, 0x47, 0xDB, 0xF3, 0x10, 0xB0, 0x04, 0xA8, 0x2B, 0x02, 0x2A, 0x02, 0x61, 0xF5, 0xEA, 0xF1, - 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x7F, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, - 0x80, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, 0x10, 0x60, 0x48, 0x64, - 0x2A, 0xFA, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x60, 0x01, 0x64, 0x08, 0x60, 0x10, 0xFB, - 0xE8, 0x60, 0x36, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x67, 0x82, 0xFB, - 0x8A, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0xFF, 0xFF, 0x0A, 0x03, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x10, 0xFB, 0xE8, 0x60, 0x38, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, - 0x1E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x05, 0x7C, 0x53, 0xF9, 0x2F, 0x60, 0x24, 0x64, 0x54, 0xFB, - 0x19, 0x60, 0x40, 0xF3, 0xFF, 0xFF, 0x15, 0x18, 0x10, 0x60, 0x1E, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, - 0x00, 0x64, 0x08, 0x60, 0x10, 0xFB, 0xE8, 0x60, 0x69, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x19, 0x60, 0x41, 0xF3, 0xFF, 0x60, 0x80, 0x65, 0xA4, 0x80, 0x5A, 0xD3, 0x05, 0x02, - 0x04, 0x1B, 0x5A, 0xD3, 0xFF, 0xFF, 0x01, 0x1B, 0x15, 0x00, 0x10, 0x60, 0x1E, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x10, 0x60, 0x00, 0x64, 0x08, 0x60, 0x10, 0xFB, 0xE8, 0x60, 0x8A, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x59, 0xF3, 0x82, 0xFB, 0x60, 0x40, 0x10, 0x27, 0xDA, 0xFE, - 0xDB, 0xF3, 0x00, 0xA8, 0x04, 0xA8, 0x23, 0x02, 0x22, 0x02, 0x60, 0xF5, 0xEA, 0xF1, 0x2F, 0xF8, - 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x7F, 0xF1, 0x2C, 0xF8, 0x80, 0xF1, 0x2D, 0xF8, - 0x81, 0xF1, 0x2E, 0xF8, 0xA4, 0x64, 0x2A, 0xFA, 0x83, 0xF1, 0xC0, 0x67, 0xB0, 0x84, 0x2B, 0xFA, - 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x20, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x00, 0x60, - 0x04, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x01, 0x64, 0x23, 0xFA, 0xF1, 0x60, - 0x02, 0x64, 0x24, 0xFA, 0x26, 0x60, 0x0A, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0xEB, 0x60, 0xFF, 0x65, 0x20, 0x44, - 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x58, 0xF3, 0x8A, 0xFB, 0xFF, 0xFF, 0xC1, 0xFE, 0x10, 0x60, 0x1E, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x00, 0x60, 0x80, 0x64, 0x08, 0x60, 0x10, 0xFB, 0xE7, 0x60, 0xCB, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x9C, 0xF1, 0x00, 0x64, 0xB0, 0x86, 0x9C, 0xFB, 0x07, 0x03, 0x26, 0x60, - 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, 0xFF, 0xFF, 0xEB, 0x60, 0xFF, 0x65, - 0x20, 0x44, 0x24, 0x80, 0x10, 0x60, 0x1E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x80, 0x64, - 0x08, 0x60, 0x10, 0xFB, 0xE7, 0x60, 0xCB, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x95, 0xF3, 0x26, 0x46, 0x60, 0x43, 0x01, 0x2A, 0x20, 0x00, 0x0F, 0xF2, 0x2A, 0xF0, 0x60, 0x40, - 0x10, 0x2A, 0x0F, 0x00, 0x64, 0x40, 0x04, 0x27, 0x18, 0x00, 0xFD, 0xB3, 0x64, 0x40, 0x20, 0x27, - 0x02, 0xBB, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x0B, 0x00, 0xFB, 0xB3, 0x64, 0x40, 0x20, 0x27, 0x04, 0xBB, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, - 0x10, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x95, 0xFD, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0xDB, 0xF3, 0x3F, 0xF2, 0x04, 0xA8, 0x57, 0xFB, 0x02, 0x03, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0xF4, - 0x1E, 0x63, 0x08, 0x64, 0x40, 0x48, 0xBD, 0xD2, 0xFF, 0xFF, 0x60, 0x47, 0x05, 0x36, 0x0B, 0x00, - 0xFF, 0xB5, 0xC7, 0x83, 0x01, 0x2A, 0xF7, 0x01, 0x4F, 0xD2, 0x5B, 0xD2, 0x60, 0x40, 0x05, 0x37, - 0x0B, 0x00, 0xDF, 0x83, 0xF5, 0x01, 0xFF, 0xB5, 0x65, 0x41, 0xA3, 0xD2, 0x47, 0x8A, 0x60, 0x47, - 0x40, 0x4C, 0x5B, 0xD2, 0xDF, 0x83, 0x08, 0x00, 0x40, 0x4C, 0x00, 0x7F, 0xDC, 0x85, 0x47, 0x8A, - 0x60, 0x41, 0x5B, 0xD2, 0xDB, 0x83, 0x60, 0x47, 0x01, 0xB0, 0xFE, 0xB5, 0x02, 0x03, 0x02, 0x64, - 0x40, 0x48, 0x2C, 0x47, 0xFF, 0xB4, 0x73, 0xF1, 0x08, 0x28, 0x73, 0xFB, 0x83, 0xF1, 0x65, 0x44, - 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0xFD, 0xA1, 0xE1, 0x81, 0xE1, 0x81, 0xE1, 0x85, 0xC4, 0x81, - 0xD0, 0x84, 0xD1, 0x80, 0x28, 0x07, 0x27, 0x06, 0x9C, 0x84, 0xDC, 0x84, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x85, 0x94, 0xF3, 0xC7, 0x83, 0x01, 0x26, 0x60, 0x47, 0xAB, 0x83, 0xFC, 0xA3, 0x02, 0x00, - 0x03, 0x04, 0x00, 0xF4, 0x84, 0xA3, 0xFC, 0x01, 0x80, 0x65, 0x47, 0xD0, 0x28, 0x41, 0xA0, 0x80, - 0xFE, 0xA1, 0x14, 0x03, 0x08, 0x02, 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x1B, 0x00, 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x13, 0x00, 0x28, 0x41, 0xFE, 0xA1, 0xFF, 0xFF, 0x08, 0x03, 0x08, 0x60, - 0x2D, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x07, 0x00, 0x08, 0x60, - 0x2D, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x08, 0x60, 0x1B, 0xF1, - 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x02, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x63, 0x95, 0xFD, 0x1C, 0x60, 0x9E, 0x63, 0x00, 0x64, 0xA3, 0xDB, - 0x06, 0xA3, 0x10, 0x60, 0x98, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, 0xA3, 0xDB, 0xE9, 0x60, - 0xB8, 0x64, 0x08, 0x60, 0x4B, 0xFB, 0xCE, 0xF1, 0x0E, 0x60, 0x51, 0xF9, 0x1C, 0x60, 0xAA, 0x63, - 0x00, 0x64, 0xA3, 0xDB, 0x06, 0xA3, 0x10, 0x60, 0x9C, 0x64, 0xBD, 0xDB, 0xBD, 0xDB, 0x06, 0x64, - 0xA3, 0xDB, 0xE9, 0x60, 0xC1, 0x64, 0x08, 0x60, 0x4D, 0xFB, 0x16, 0x60, 0xAE, 0xF1, 0x0E, 0x60, - 0x57, 0xF9, 0x00, 0x60, 0x3A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x63, 0xFB, 0xA6, 0xF3, 0x07, 0xFA, 0xB9, 0xF3, 0x19, 0xFA, 0xF8, 0x60, 0x80, 0x64, 0x0E, 0xFA, - 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x00, 0x60, 0x3A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, - 0xFF, 0xFF, 0x66, 0x44, 0x64, 0xFB, 0xA6, 0xF3, 0x07, 0xFA, 0xB9, 0xF3, 0x19, 0xFA, 0x24, 0x60, - 0x80, 0x64, 0x0E, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0x3F, 0xFA, 0x00, 0x64, 0x08, 0x60, 0x2D, 0xFB, - 0x5A, 0xDB, 0xEA, 0x60, 0x1F, 0x64, 0x08, 0x60, 0x37, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x63, - 0x95, 0xFD, 0xBA, 0xFE, 0xFE, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x82, 0xFD, 0x08, 0x60, - 0x15, 0xF1, 0x04, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x64, 0x08, 0x60, - 0x1B, 0xFB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x16, 0x60, 0xAB, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, - 0xFF, 0xFF, 0x05, 0x03, 0x19, 0x60, 0xF0, 0xF1, 0x0E, 0x60, 0x57, 0xF9, 0x04, 0x00, 0x16, 0x60, - 0xAE, 0xF1, 0x0E, 0x60, 0x57, 0xF9, 0x16, 0x60, 0xAB, 0xF3, 0xFF, 0xFF, 0x09, 0x1B, 0x00, 0x64, - 0x82, 0xFB, 0xBA, 0xFE, 0x00, 0x64, 0x08, 0x60, 0x1B, 0xFB, 0x5A, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, - 0xBA, 0xFE, 0x95, 0xF3, 0x00, 0x63, 0x82, 0xFD, 0x10, 0xBC, 0x95, 0xFB, 0xFE, 0x60, 0xFF, 0x65, - 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0x00, 0x60, 0x64, 0x63, 0x0E, 0x60, 0x37, 0xFD, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x01, 0x60, 0x04, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEA, 0x60, 0x73, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xA2, 0x01, 0x31, 0x40, 0x04, 0x2A, 0xE5, 0x01, - 0x20, 0x40, 0x12, 0x23, 0x11, 0x00, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x81, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEA, 0x60, - 0x73, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0xDD, 0x01, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x01, 0x60, 0x00, 0x65, 0x20, 0x44, 0x34, 0x80, 0x64, 0xF5, 0xB9, 0xF1, 0x19, 0xF8, 0x7F, 0xF1, - 0x2C, 0xF8, 0x32, 0xF8, 0x80, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, - 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x11, 0x60, 0x48, 0x64, - 0x2A, 0xFA, 0x00, 0x64, 0x2B, 0xFA, 0x23, 0xFA, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x60, - 0x01, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEA, 0x60, 0xC9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x64, 0xF5, 0x23, 0xF2, 0xFF, 0xFF, 0x01, 0x18, 0x82, 0x01, 0x10, 0x67, 0x82, 0xFB, - 0x03, 0x64, 0x96, 0xFB, 0xFE, 0x60, 0xFF, 0x65, 0x20, 0x44, 0x24, 0x80, 0x08, 0x60, 0x08, 0xF1, - 0x80, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0x81, 0x60, 0x00, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEA, 0x60, 0xEA, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x0C, 0x00, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xEA, 0x60, 0x1F, 0x78, 0xFF, 0xFF, 0x06, 0x60, 0x00, 0x65, - 0x20, 0x41, 0x8C, 0xF3, 0xA5, 0x80, 0x01, 0xB0, 0x01, 0x02, 0x06, 0x00, 0x10, 0x60, 0x36, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x6E, 0x65, 0xA5, 0xD3, 0x01, 0x63, - 0x8A, 0xFD, 0x26, 0x1B, 0x00, 0x60, 0x64, 0x64, 0xA5, 0xDB, 0x64, 0xF5, 0xB9, 0xF1, 0x19, 0xF8, - 0x7F, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, 0x80, 0xF1, 0x2D, 0xF8, 0x33, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, - 0x34, 0xF8, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x11, 0x60, - 0x48, 0x64, 0x2A, 0xFA, 0x00, 0x64, 0x2B, 0xFA, 0x23, 0xFA, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x06, 0x00, - 0x95, 0xF3, 0x32, 0x40, 0x02, 0x26, 0x02, 0x00, 0x40, 0x2A, 0xDA, 0xFE, 0xC1, 0xFE, 0x10, 0x60, - 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x82, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEB, 0x60, - 0x45, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, - 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xEA, 0x60, 0x1F, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x06, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0xBA, 0xFE, 0xED, 0x60, 0x6D, 0x78, 0xFF, 0xFF, 0x02, 0x64, 0x8A, 0xFB, 0x01, 0x60, 0x00, 0x65, - 0x20, 0x44, 0x34, 0x80, 0xBA, 0xFE, 0xC1, 0xFE, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x10, 0x60, 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x46, 0x64, 0x08, 0x60, 0x1C, 0xFB, - 0xEB, 0x60, 0x76, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, - 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xEA, 0x60, - 0x1F, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x45, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0F, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xED, 0x60, 0x6D, 0x78, 0xFF, 0xFF, 0x31, 0x01, 0x00, 0x60, - 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x16, 0x60, 0xAC, 0xF1, - 0x95, 0xF3, 0x00, 0x61, 0xD1, 0x80, 0xF7, 0xB4, 0xF1, 0x03, 0x95, 0xFB, 0x33, 0x00, 0x00, 0x60, - 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0E, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x16, 0x60, 0xAC, 0xF1, - 0x95, 0xF3, 0x00, 0x61, 0xD1, 0x80, 0x08, 0xBC, 0x03, 0x02, 0xEC, 0x60, 0x9C, 0x78, 0xFF, 0xFF, - 0x95, 0xFB, 0x20, 0x00, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0xEC, 0x60, 0x9C, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x40, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xC8, 0x01, 0x00, 0x60, 0x02, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x05, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xED, 0x60, 0x6D, 0x78, 0xFF, 0xFF, - 0x2F, 0x58, 0xFF, 0xFF, 0x02, 0x63, 0x95, 0xF3, 0x8A, 0xFD, 0x01, 0xBC, 0xC1, 0xFE, 0x95, 0xFB, - 0xCE, 0xF1, 0x0E, 0x60, 0x51, 0xF9, 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, - 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, 0x34, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, - 0x05, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0x9E, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, - 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0D, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xEA, 0x60, 0x1F, 0x78, - 0xFF, 0xFF, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x22, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x95, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x04, 0x2A, 0x01, 0x00, 0xD5, 0x01, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x95, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x08, 0x2A, 0x01, 0x00, 0x68, 0x00, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x02, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x59, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xED, 0x60, 0x6D, 0x78, 0xFF, 0xFF, - 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x95, 0xF3, 0xFF, 0xFF, 0x08, 0xBC, 0x95, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, - 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xA4, 0x01, 0x00, 0x60, - 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x35, 0x00, 0x00, 0x60, - 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x1E, 0x00, 0x08, 0x60, - 0x1B, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x14, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x95, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x08, 0x2A, 0x01, 0x00, 0x16, 0x00, 0x08, 0x60, 0x1B, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xED, 0x60, - 0x6D, 0x78, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x00, 0x95, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, - 0x95, 0xFB, 0xEA, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0xAB, 0xF3, 0xFF, 0xFF, 0x01, 0xA8, - 0xFF, 0xFF, 0x03, 0x02, 0xED, 0x60, 0x76, 0x78, 0xFF, 0xFF, 0x95, 0xF3, 0x01, 0x63, 0x8A, 0xFD, - 0x21, 0xBC, 0x95, 0xFB, 0x63, 0xF5, 0x7F, 0xF1, 0x2C, 0xF8, 0x80, 0xF1, 0x2D, 0xF8, 0x81, 0xF1, - 0x2E, 0xF8, 0x83, 0xF1, 0xC0, 0x67, 0xB0, 0x84, 0x2B, 0xFA, 0xB9, 0xF1, 0x19, 0xF8, 0xEA, 0xF1, - 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x10, 0x60, 0xA4, 0x64, 0x2A, 0xFA, - 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x60, 0x50, 0x64, 0x0E, 0x60, 0x51, 0xFB, 0x1C, 0x60, - 0x9E, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x10, 0x60, - 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x01, 0x60, - 0x2C, 0x64, 0x08, 0x60, 0x1C, 0xFB, 0xEC, 0x60, 0xE9, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0D, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, - 0xFF, 0xFF, 0x04, 0xFF, 0xEA, 0x60, 0x1F, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, - 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x95, 0x01, 0x08, 0x60, - 0x1B, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x08, 0x03, 0xA0, 0x84, 0xA2, 0xDB, - 0x95, 0xF3, 0xFF, 0xFF, 0x02, 0xB0, 0xFF, 0xFF, 0x49, 0x03, 0x86, 0x01, 0x00, 0x60, 0x08, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x40, 0x00, 0x00, 0x60, 0x02, 0x64, - 0xA0, 0x80, 0x9C, 0x84, 0x14, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x16, 0x60, 0xAC, 0xF3, 0x95, 0xF3, - 0x00, 0xA8, 0xF7, 0xB4, 0x2B, 0x03, 0x95, 0xFB, 0xEB, 0x60, 0xE2, 0x78, 0xFF, 0xFF, 0x00, 0x60, - 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x15, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x16, 0x60, 0xAC, 0xF3, - 0x95, 0xF3, 0x00, 0xA8, 0x08, 0xBC, 0x01, 0x02, 0x4F, 0x01, 0x95, 0xFB, 0xEB, 0x60, 0xE2, 0x78, - 0xFF, 0xFF, 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, - 0xA0, 0x84, 0xA2, 0xDB, 0x02, 0x00, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x00, 0x1C, 0x60, 0x9E, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x95, 0xF3, 0xFF, 0xFF, - 0xFE, 0xB4, 0x95, 0xFB, 0xEA, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x95, 0xF3, 0x01, 0x63, 0x8A, 0xFD, - 0x01, 0xBC, 0x95, 0xFB, 0x00, 0x64, 0x82, 0xFB, 0xC1, 0xFE, 0x28, 0x00, 0x95, 0xF3, 0x01, 0x63, - 0x8A, 0xFD, 0x01, 0xBC, 0x95, 0xFB, 0x00, 0x64, 0x82, 0xFB, 0x63, 0xF5, 0x7F, 0xF1, 0x2C, 0xF8, - 0x80, 0xF1, 0x2D, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x83, 0xF1, 0xC0, 0x67, 0xB0, 0x84, 0x2B, 0xFA, - 0xB9, 0xF1, 0x19, 0xF8, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, - 0x00, 0x60, 0xA4, 0x64, 0x2A, 0xFA, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x1C, 0x60, 0xAA, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x10, 0x60, 0x36, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x03, 0x60, 0x0E, 0x64, - 0x08, 0x60, 0x1C, 0xFB, 0xED, 0x60, 0xB8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x1B, 0xF1, 0x01, 0x60, 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0D, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0xAA, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0xEA, 0x60, 0x1F, 0x78, 0xFF, 0xFF, 0x00, 0x60, 0x0A, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xCA, 0x01, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, - 0x14, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x08, 0x60, 0x2D, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x91, 0x01, 0x00, 0x60, 0x12, 0x64, 0xA0, 0x80, - 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0xB1, 0x01, 0x08, 0x60, 0x1B, 0xF1, 0x02, 0x60, - 0x00, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0xB2, 0x03, 0xA0, 0x84, 0xA2, 0xDB, 0x10, 0x67, 0x82, 0xFB, - 0x10, 0x60, 0x36, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x10, 0x60, 0x5A, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x64, 0xF5, 0xB9, 0xF1, 0x19, 0xF8, 0x7F, 0xF1, 0x2C, 0xF8, 0x32, 0xF8, 0x80, 0xF1, 0x2D, 0xF8, - 0x33, 0xF8, 0x81, 0xF1, 0x2E, 0xF8, 0x34, 0xF8, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, - 0xEC, 0xF1, 0x31, 0xF8, 0x11, 0x60, 0x48, 0x64, 0x2A, 0xFA, 0x00, 0x64, 0x2B, 0xFA, 0x23, 0xFA, - 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0x95, 0xF3, 0xC1, 0xFE, 0xFE, 0xB4, 0x95, 0xFB, 0x00, 0x60, 0x03, 0x64, - 0x08, 0x60, 0x1C, 0xFB, 0xEE, 0x60, 0x30, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x1B, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x33, 0x01, 0x64, 0xF5, 0x23, 0xF2, 0x96, 0xF3, 0x04, 0x18, 0xCC, 0x84, 0x96, 0xFB, - 0x01, 0x03, 0x2B, 0x01, 0xEA, 0x60, 0xD0, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0xAB, 0xF3, 0x82, 0xF1, - 0x02, 0xA8, 0x2A, 0xF2, 0x03, 0x02, 0xB0, 0x84, 0x2A, 0xFA, 0x07, 0x00, 0x08, 0x60, 0x1B, 0xF1, - 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x25, 0x60, 0xC8, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x12, 0x60, 0xED, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0xDF, 0x02, 0xCA, 0x60, 0xD4, 0x78, - 0xFF, 0xFF, 0x10, 0x60, 0x48, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x00, 0x60, 0x06, 0x64, 0x08, 0x60, - 0x25, 0xFB, 0xEE, 0x60, 0x77, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, - 0x18, 0x64, 0x08, 0x60, 0x25, 0xFB, 0xEE, 0x60, 0x77, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x00, 0xF4, 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0x36, 0x1B, 0x00, - 0x0E, 0xF0, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0xEF, 0xB4, 0x60, 0x44, 0x64, 0x40, 0x04, 0x27, - 0x07, 0x00, 0xA2, 0xDB, 0x13, 0x64, 0xCB, 0xFB, 0x01, 0x60, 0x67, 0x64, 0x37, 0xFB, 0x0B, 0x00, - 0x10, 0xBC, 0xA2, 0xDB, 0x08, 0x64, 0xCB, 0xFB, 0xA1, 0xF3, 0x01, 0x60, 0x67, 0x7C, 0x60, 0x40, - 0x01, 0x27, 0x5B, 0x7C, 0x37, 0xF9, 0x26, 0x46, 0x3F, 0xF2, 0x00, 0xF4, 0x60, 0x43, 0xF4, 0xA3, - 0x00, 0x60, 0x1D, 0x61, 0x00, 0x60, 0x2A, 0x65, 0x01, 0x60, 0xFF, 0x64, 0x40, 0x4C, 0xFD, 0x60, - 0x58, 0x4E, 0x7A, 0x78, 0xFF, 0xFF, 0x00, 0xBB, 0xFF, 0xFF, 0x01, 0x02, 0x3B, 0x00, 0x02, 0x60, - 0x01, 0x63, 0xA3, 0xD1, 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0x36, 0x1F, 0x00, 0x19, 0x60, - 0x45, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x26, 0x09, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, - 0xFD, 0xB4, 0x60, 0x44, 0x64, 0x40, 0x02, 0x27, 0x02, 0xBC, 0xA2, 0xDB, 0x19, 0x60, 0x45, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x26, 0x1C, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0xFB, 0xB4, - 0x60, 0x44, 0x64, 0x40, 0x04, 0x27, 0x04, 0xBC, 0xA2, 0xDB, 0x12, 0x00, 0x64, 0x40, 0x02, 0x2B, - 0x06, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0x60, 0x44, 0xA2, 0xDB, 0x64, 0x40, - 0x04, 0x2B, 0x06, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x04, 0xBC, 0x60, 0x44, 0xA2, 0xDB, - 0x2F, 0x58, 0xFF, 0xFF, 0x0E, 0xF0, 0xDB, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0x03, 0x36, 0x18, 0x00, - 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x02, 0xBC, 0x60, 0x44, 0xFB, 0xB4, 0x60, 0x44, 0x64, 0x40, - 0x20, 0x2A, 0x0A, 0x00, 0x60, 0x43, 0x19, 0x60, 0x45, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x02, 0x26, - 0x02, 0x00, 0x63, 0x44, 0x02, 0x00, 0x63, 0x44, 0x04, 0xBC, 0x19, 0x60, 0x7B, 0xFB, 0x09, 0x00, - 0x64, 0x40, 0x20, 0x26, 0x06, 0x00, 0x19, 0x60, 0x7B, 0xF3, 0xFF, 0xFF, 0x04, 0xBC, 0x60, 0x44, - 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0xB0, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, - 0xFF, 0xFF, 0x66, 0x44, 0x5C, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x80, 0x64, 0x2A, 0xFA, 0xC9, 0xF1, - 0x19, 0xF8, 0x00, 0x64, 0x3E, 0xFA, 0x00, 0x60, 0x80, 0x64, 0x0E, 0xFA, 0xA6, 0xF1, 0x07, 0xF8, - 0x67, 0x44, 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0xF1, 0x60, 0x2C, 0x64, 0x08, 0x60, 0x31, 0xFB, - 0x2F, 0x58, 0xFF, 0xFF, 0x5C, 0xF5, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, - 0x31, 0xF8, 0x7F, 0xF1, 0x32, 0xF8, 0x80, 0xF1, 0x33, 0xF8, 0x81, 0xF1, 0x34, 0xF8, 0x16, 0x60, - 0xC2, 0xF1, 0x02, 0x64, 0x64, 0x40, 0xFE, 0x26, 0x10, 0xBC, 0x32, 0x40, 0x08, 0x26, 0x10, 0xBC, - 0x20, 0xBC, 0xFB, 0x60, 0xFF, 0x65, 0x60, 0x44, 0xA4, 0x84, 0x1B, 0x60, 0x09, 0xFB, 0x16, 0x60, - 0xC1, 0xF1, 0x33, 0x60, 0xBE, 0x64, 0x02, 0x18, 0x2D, 0x60, 0x32, 0x64, 0x1A, 0x60, 0xAD, 0xFB, - 0x1A, 0x60, 0xBD, 0xFB, 0x34, 0x60, 0x18, 0x61, 0x17, 0x60, 0x14, 0xF3, 0x35, 0x60, 0x36, 0x65, - 0xFE, 0xA4, 0xE0, 0x84, 0x06, 0x05, 0x67, 0x44, 0x1A, 0x60, 0xB5, 0xFB, 0x1A, 0x60, 0xC5, 0xFB, - 0x4B, 0x00, 0xE0, 0x84, 0xC4, 0x85, 0x1A, 0x60, 0x1F, 0xF3, 0xA5, 0xD1, 0xDA, 0x85, 0xA0, 0x83, - 0x1A, 0x60, 0x1B, 0xFD, 0xA5, 0xD1, 0x34, 0x60, 0x34, 0x62, 0xA0, 0x83, 0xA2, 0xDD, 0x67, 0x44, - 0x1A, 0x60, 0xB5, 0xFB, 0x1A, 0x60, 0xC5, 0xFB, 0x1A, 0x60, 0x2C, 0xF3, 0xFF, 0xFF, 0x21, 0x18, - 0x33, 0x60, 0xF4, 0x61, 0x0F, 0x60, 0x00, 0x7C, 0x00, 0x60, 0xAC, 0x65, 0xEF, 0x60, 0x58, 0x4D, - 0xC1, 0x78, 0xFF, 0xFF, 0x1A, 0x60, 0x2D, 0xF1, 0x59, 0xD9, 0x33, 0x60, 0xF2, 0x65, 0xD5, 0x84, - 0x30, 0x7F, 0xA5, 0xDB, 0x65, 0x44, 0x1A, 0x60, 0xB5, 0xFB, 0x1A, 0x60, 0xC5, 0xFB, 0x1A, 0x60, - 0x2C, 0xF3, 0xFF, 0xFF, 0xFE, 0xA4, 0xFF, 0xFF, 0x08, 0x24, 0x03, 0x00, 0xFF, 0x60, 0xFF, 0x64, - 0x13, 0x00, 0x34, 0x60, 0x18, 0x61, 0x50, 0x60, 0x00, 0x7C, 0x00, 0x60, 0xF2, 0x65, 0xEF, 0x60, - 0x58, 0x4D, 0xC1, 0x78, 0xFF, 0xFF, 0x1A, 0x60, 0x1D, 0xF1, 0x59, 0xD9, 0x34, 0x60, 0x12, 0x65, - 0xD5, 0x84, 0xDD, 0x7F, 0xA5, 0xDB, 0x65, 0x44, 0x1A, 0x60, 0xB2, 0xFB, 0x1A, 0x60, 0xC2, 0xFB, - 0x79, 0x00, 0x1A, 0x60, 0x1E, 0xF3, 0x34, 0x60, 0x34, 0x62, 0xFD, 0xA0, 0xA2, 0xD3, 0xEE, 0x03, - 0x60, 0x40, 0x02, 0x2A, 0x02, 0x00, 0x01, 0x63, 0x0B, 0x00, 0x04, 0x2A, 0x02, 0x00, 0x02, 0x63, - 0x07, 0x00, 0x10, 0x2A, 0x02, 0x00, 0x04, 0x63, 0x03, 0x00, 0x20, 0x2A, 0x01, 0x00, 0x05, 0x63, - 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x1A, 0x60, 0x1E, 0xF3, 0x1A, 0x60, 0x1B, 0xF3, - 0xFE, 0xA0, 0x40, 0x4C, 0xD3, 0x03, 0x00, 0x60, 0x00, 0x63, 0x59, 0xDD, 0x41, 0x4A, 0x2C, 0x40, - 0x01, 0x2A, 0x05, 0x00, 0x00, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, - 0x02, 0x2A, 0x03, 0x00, 0x01, 0x63, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x04, 0x2A, 0x05, 0x00, - 0x02, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x10, 0x2A, 0x05, 0x00, - 0x04, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x20, 0x2A, 0x05, 0x00, - 0x05, 0x63, 0x63, 0x47, 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2A, 0x44, 0x51, 0x93, 0xEB, 0x83, - 0xEB, 0x83, 0xA0, 0xDD, 0x1A, 0x60, 0x1E, 0xF3, 0x1A, 0x60, 0x1C, 0xF3, 0xFF, 0xA0, 0x40, 0x4C, - 0x9D, 0x03, 0x59, 0xDF, 0x41, 0x4A, 0x2C, 0x40, 0x01, 0x2A, 0x05, 0x00, 0x00, 0x63, 0x63, 0x47, - 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x02, 0x2A, 0x05, 0x00, 0x01, 0x63, 0x63, 0x47, - 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2C, 0x40, 0x04, 0x2A, 0x05, 0x00, 0x02, 0x63, 0x63, 0x47, - 0xB4, 0x83, 0x59, 0xD9, 0x59, 0xDD, 0x2A, 0x44, 0x51, 0x93, 0xEB, 0x83, 0xEB, 0x83, 0xA0, 0xDD, - 0x2D, 0x58, 0xFF, 0xFF, 0x00, 0x60, 0x04, 0x64, 0x08, 0x60, 0x0A, 0xFB, 0xF0, 0x60, 0x44, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x12, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0x7D, 0xF1, 0x35, 0x60, 0xCC, 0x64, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x00, 0x67, 0x44, 0x1A, 0x60, - 0xAF, 0xFB, 0x1A, 0x60, 0xBF, 0xFB, 0x1A, 0x60, 0xE7, 0xF9, 0x35, 0x60, 0x62, 0x65, 0xF1, 0x60, - 0x58, 0x4D, 0x74, 0x78, 0xFF, 0xFF, 0x7D, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x2B, 0x05, 0x00, - 0xFF, 0x60, 0xFF, 0x63, 0x1A, 0x60, 0xB3, 0xFD, 0x08, 0x00, 0x36, 0x60, 0x04, 0x63, 0x1A, 0x60, - 0xB3, 0xFD, 0xF1, 0x60, 0x58, 0x4D, 0x8C, 0x78, 0xFF, 0xFF, 0x5C, 0xF5, 0x00, 0xF4, 0x7E, 0xF1, - 0x06, 0xF8, 0x1B, 0x60, 0x09, 0xF3, 0x19, 0x60, 0x7B, 0xF1, 0xFB, 0x60, 0xFF, 0x65, 0x60, 0x44, - 0xA4, 0x84, 0x60, 0x47, 0x64, 0x40, 0x10, 0x26, 0x04, 0xBC, 0x60, 0x47, 0x07, 0xFA, 0x35, 0x60, - 0x5A, 0x64, 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xF1, 0x60, 0x58, 0x4D, 0x34, 0x78, - 0xFF, 0xFF, 0x5C, 0xF5, 0x3F, 0xFC, 0xDB, 0xFE, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x04, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0xDB, 0xF3, 0x9B, 0xFE, 0xFD, 0xA0, 0x25, 0x04, 0x24, 0x02, 0x04, 0x64, 0x03, 0xFA, - 0x00, 0xF4, 0x09, 0xF2, 0xFF, 0xFF, 0x60, 0x47, 0x00, 0x3A, 0x1C, 0x00, 0x60, 0x43, 0x00, 0x36, - 0x1C, 0x00, 0xE0, 0xA0, 0xDA, 0x85, 0x16, 0x07, 0x33, 0x60, 0xBE, 0x61, 0xA1, 0xD1, 0xFF, 0xFF, - 0xD3, 0x80, 0xCB, 0x83, 0x0F, 0x02, 0x07, 0x0E, 0x59, 0xD3, 0xA5, 0xD0, 0xDA, 0x85, 0xD0, 0x80, - 0xFF, 0xFF, 0x08, 0x02, 0xF9, 0x1F, 0x12, 0x1E, 0xA5, 0xD0, 0x59, 0xD3, 0xFF, 0xFF, 0x90, 0x80, - 0xFF, 0x22, 0x0C, 0x00, 0xF1, 0x60, 0x2A, 0x78, 0xFF, 0xFF, 0x16, 0x60, 0xC1, 0xF3, 0xFF, 0xFF, - 0x60, 0x40, 0x01, 0x2A, 0x03, 0x00, 0x2D, 0x60, 0x32, 0x64, 0x02, 0x00, 0x33, 0x60, 0xBE, 0x64, - 0x1A, 0x60, 0xBD, 0xFB, 0x26, 0x46, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, - 0x2E, 0xFA, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, 0x7F, 0xF1, - 0x32, 0xF8, 0x80, 0xF1, 0x33, 0xF8, 0x81, 0xF1, 0x34, 0xF8, 0x00, 0x65, 0xFD, 0x60, 0x58, 0x4E, - 0xDD, 0x78, 0xFF, 0xFF, 0x61, 0x44, 0x19, 0x60, 0x3F, 0xFB, 0x50, 0x63, 0x2A, 0xFC, 0xC9, 0xF3, - 0x19, 0xFA, 0x00, 0x64, 0x3E, 0xFA, 0xA6, 0xF3, 0x07, 0xFA, 0x00, 0xF4, 0x7E, 0xF1, 0x06, 0xF8, - 0x1B, 0x60, 0x09, 0xF3, 0x19, 0x60, 0x7B, 0xF1, 0xFB, 0x60, 0xFF, 0xB7, 0x64, 0x40, 0x10, 0x26, - 0x04, 0xBC, 0x60, 0x47, 0x07, 0xFA, 0x35, 0x60, 0x82, 0x65, 0xF1, 0x60, 0x58, 0x4D, 0x74, 0x78, - 0xFF, 0xFF, 0x7D, 0xF3, 0x36, 0x60, 0x04, 0x63, 0x60, 0x40, 0x01, 0x27, 0x67, 0x43, 0x1A, 0x60, - 0xC3, 0xFD, 0x35, 0x60, 0x7A, 0x64, 0x40, 0x48, 0x10, 0x61, 0x00, 0x60, 0x00, 0x64, 0xF1, 0x60, - 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x26, 0x46, 0x3F, 0xFC, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, - 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x09, 0xFB, 0x5A, 0xDB, - 0x00, 0x64, 0x92, 0xFB, 0x2F, 0x58, 0xFF, 0xFF, 0x1B, 0x60, 0x0A, 0xFB, 0xCD, 0x81, 0x28, 0xD3, - 0x5A, 0x88, 0xDC, 0x83, 0x31, 0x18, 0xFB, 0x03, 0x61, 0x40, 0x7F, 0x3A, 0x06, 0x00, 0x1B, 0x60, - 0x0A, 0xF3, 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, 0xA3, 0xD1, 0x5D, 0xD8, - 0x61, 0x40, 0x7F, 0x3A, 0x08, 0x00, 0x20, 0xFE, 0x1B, 0x60, 0x0A, 0xF3, 0x03, 0x61, 0x7C, 0xA4, - 0xA2, 0xDB, 0x00, 0xF4, 0x60, 0xFE, 0xBF, 0xD3, 0x5D, 0xDA, 0xFF, 0xB4, 0x00, 0x7F, 0x12, 0x03, - 0xDF, 0x83, 0x61, 0x40, 0x7F, 0x3A, 0x0A, 0x00, 0x20, 0xFE, 0x60, 0x45, 0x1B, 0x60, 0x0A, 0xF3, - 0x03, 0x61, 0x7C, 0xA4, 0xA2, 0xDB, 0x65, 0x44, 0x00, 0xF4, 0x60, 0xFE, 0xBD, 0xD1, 0xCC, 0x84, - 0x5D, 0xD8, 0xEF, 0x02, 0x20, 0xFE, 0xCB, 0x01, 0x1B, 0x60, 0x0A, 0xF1, 0xFD, 0xA1, 0xFF, 0xB1, - 0xC1, 0x83, 0xA2, 0xDD, 0x2D, 0x58, 0xFF, 0xFF, 0x67, 0x5C, 0x1C, 0x60, 0xE6, 0x61, 0xA1, 0xD3, - 0xA5, 0xD9, 0x10, 0x18, 0x60, 0x43, 0x35, 0x60, 0xD4, 0x64, 0xA5, 0xDB, 0x60, 0xFE, 0xA0, 0xDD, - 0x20, 0xFE, 0xDC, 0x84, 0xCF, 0x83, 0xE3, 0x83, 0x59, 0xD1, 0xDC, 0x84, 0x60, 0xFE, 0xA0, 0xD9, - 0x20, 0xFE, 0xFA, 0x1F, 0x2D, 0x58, 0xFF, 0xFF, 0x19, 0x60, 0x7B, 0xF3, 0x36, 0x60, 0x06, 0x62, - 0x07, 0xB4, 0x60, 0xFE, 0xA2, 0xDB, 0x20, 0xFE, 0x2D, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, - 0x40, 0x26, 0x27, 0x00, 0x45, 0x48, 0x00, 0x60, 0x10, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, - 0xFF, 0xFF, 0x1F, 0x03, 0xF2, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x00, 0x60, 0x48, 0x61, 0x28, 0x44, - 0x59, 0xDA, 0x03, 0x64, 0x38, 0x43, 0xBD, 0xD1, 0xCC, 0x84, 0x59, 0xD8, 0xFC, 0x02, 0x39, 0x44, - 0x59, 0xDA, 0x16, 0x60, 0xC3, 0xF3, 0x59, 0xDA, 0x07, 0x64, 0x23, 0xFA, 0x26, 0x60, 0x0A, 0x64, - 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, - 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0x0E, 0x57, 0x32, 0x40, 0x40, 0x26, 0x1B, 0x00, 0x45, 0x48, - 0x00, 0x60, 0x06, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x13, 0x03, 0x02, 0x64, - 0x23, 0xFA, 0xF2, 0x60, 0x00, 0x64, 0x5A, 0xDA, 0x28, 0x44, 0x5A, 0xDA, 0xFF, 0xFF, 0x26, 0x60, - 0x0A, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, 0xA0, 0xD3, 0xFF, 0xFF, 0xDC, 0x84, 0xDC, 0x80, - 0xD0, 0x80, 0x03, 0x03, 0xA2, 0xDB, 0x08, 0x24, 0xC6, 0xFE, 0xDD, 0x98, 0xFF, 0xFF, 0xB5, 0xF1, - 0xA0, 0xD3, 0xFF, 0xFF, 0xD8, 0x80, 0xC4, 0x84, 0x0C, 0x03, 0x08, 0x05, 0xDC, 0x80, 0xD0, 0x80, - 0x05, 0x03, 0xA2, 0xDB, 0x02, 0x24, 0xC6, 0xFE, 0xDD, 0x98, 0xFF, 0xFF, 0xFF, 0x60, 0xFE, 0x64, - 0xA2, 0xDB, 0xDD, 0x98, 0xFF, 0xFF, 0xA2, 0xFF, 0x32, 0x40, 0x40, 0x26, 0x3C, 0x00, 0x9B, 0xF3, - 0x67, 0x43, 0xDC, 0x84, 0xCC, 0x84, 0x37, 0x03, 0x60, 0x46, 0x0A, 0x02, 0x9B, 0xFD, 0x00, 0x60, - 0x46, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x22, 0x78, 0xFF, 0xFF, 0x66, 0x44, 0x9B, 0xFB, 0x2C, 0x03, - 0x46, 0x4B, 0x2C, 0x60, 0xCA, 0x61, 0x18, 0x64, 0x23, 0xFA, 0xF1, 0x60, 0x00, 0x64, 0x24, 0xFA, - 0x4A, 0x65, 0xA2, 0xFF, 0x2C, 0x63, 0x59, 0xD1, 0xA2, 0xDF, 0xA5, 0xD8, 0xDA, 0x85, 0x80, 0x3A, - 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF7, 0x1F, 0x12, 0x63, 0x59, 0xD1, 0xA5, 0xD8, 0xDA, 0x85, - 0x80, 0x3A, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0xF8, 0x1F, 0x26, 0x60, 0x0A, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x2B, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, - 0xA6, 0xFE, 0x00, 0x64, 0x9B, 0xFB, 0xA3, 0xFF, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0xA6, 0xFE, - 0xBA, 0x05, 0xA7, 0xFE, 0x11, 0x05, 0xA5, 0xFE, 0x03, 0x04, 0xF2, 0x60, 0xD8, 0x78, 0xFF, 0xFF, - 0xA4, 0xFE, 0xF2, 0x04, 0x08, 0x60, 0x0F, 0xF1, 0x00, 0x60, 0x80, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0x36, 0x45, 0x20, 0x60, 0xA8, 0x64, 0x44, 0xD7, - 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0xF3, 0xFF, 0xFF, 0x01, 0xB0, 0x00, 0x64, 0x2F, 0x03, 0x9D, 0xFB, - 0x31, 0x44, 0xE8, 0xB4, 0x40, 0x51, 0x6A, 0x44, 0xFF, 0xFF, 0x80, 0x26, 0xFC, 0x01, 0x61, 0xFF, - 0x62, 0xFF, 0x08, 0x60, 0x30, 0xF1, 0x00, 0x60, 0x20, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x40, 0x60, 0x58, 0x4E, 0x7D, 0x78, 0xFF, 0xFF, 0x1F, 0x60, 0xC4, 0x64, 0x0F, 0x60, 0xE1, 0xFB, - 0x4A, 0xDF, 0x01, 0x60, 0xFE, 0x63, 0x1D, 0x60, 0xBE, 0x61, 0x00, 0x64, 0x59, 0xDB, 0xFE, 0x1F, - 0x0E, 0x60, 0xDD, 0xF3, 0xFF, 0xFF, 0x04, 0xB0, 0xFF, 0xFF, 0x05, 0x03, 0x02, 0x65, 0xF1, 0x60, - 0x58, 0x4E, 0xC3, 0x78, 0xFF, 0xFF, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0xF2, 0x60, 0xD8, 0x78, - 0xFF, 0xFF, 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x37, 0x00, 0x2D, 0x60, 0xAA, 0x63, 0xBD, 0xD3, 0xBD, 0xD1, 0xBD, 0xD1, 0xB0, 0x84, 0xB0, 0x84, - 0xFF, 0xFF, 0x07, 0x02, 0x8A, 0xFB, 0x31, 0x44, 0xFE, 0xB4, 0x40, 0x51, 0x0D, 0x64, 0x05, 0xFB, - 0x27, 0x00, 0x28, 0xF3, 0x9D, 0xF1, 0x60, 0x47, 0x64, 0x41, 0x07, 0xB1, 0x07, 0xB4, 0x50, 0xFB, - 0x01, 0x61, 0x03, 0x03, 0xCC, 0x84, 0xE1, 0x81, 0xFD, 0x02, 0xA1, 0x80, 0xB1, 0x83, 0x18, 0x02, - 0x9D, 0xFD, 0x16, 0x60, 0xCF, 0xF3, 0xE4, 0xFB, 0x7D, 0xFB, 0x13, 0x60, 0x02, 0xF3, 0xFF, 0xFF, - 0x00, 0xA8, 0x60, 0x46, 0x46, 0x5E, 0x31, 0x44, 0x01, 0xBC, 0x40, 0x51, 0xED, 0xE2, 0x0F, 0x4E, - 0x1D, 0x60, 0x58, 0x4F, 0x9F, 0x78, 0xFF, 0xFF, 0x0E, 0x4F, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, - 0xD7, 0xFE, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0xF2, 0x60, 0xE4, 0x64, 0x08, 0x60, 0x3B, 0xFB, - 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x00, 0x64, 0x08, 0x60, 0x27, 0xFB, 0x5A, 0xDB, - 0x10, 0x60, 0x4E, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, 0x28, 0xF3, - 0xFF, 0xFF, 0x01, 0xB0, 0xFF, 0xFF, 0x1D, 0x03, 0x20, 0x40, 0x06, 0x23, 0x10, 0x00, 0x08, 0x60, - 0x27, 0xF1, 0x7F, 0x60, 0xFF, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x80, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x28, 0xFB, 0xF2, 0x60, 0xF4, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x1D, 0x60, - 0xA9, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x27, 0xF1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xC6, 0x01, 0x08, 0x60, 0x27, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, - 0xCF, 0xFE, 0xDB, 0xF3, 0x01, 0x63, 0xFD, 0xA0, 0x08, 0x60, 0x77, 0xFD, 0x07, 0x02, 0x08, 0x60, - 0x30, 0xF1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xB1, 0x01, 0x0E, 0x57, - 0x32, 0x40, 0x40, 0x26, 0x1B, 0x00, 0x45, 0x48, 0x00, 0x60, 0x06, 0x61, 0xB6, 0x60, 0x58, 0x4D, - 0x22, 0x78, 0xFF, 0xFF, 0x13, 0x03, 0x02, 0x64, 0x23, 0xFA, 0xF2, 0x60, 0x04, 0x64, 0x5A, 0xDA, - 0x28, 0x44, 0x5A, 0xDA, 0xFF, 0xFF, 0x26, 0x60, 0x0A, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, - 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x37, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x15, 0xF1, 0x00, 0x60, 0x02, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x88, 0x01, - 0x12, 0x60, 0xF6, 0xF3, 0xFF, 0xFF, 0x00, 0xA8, 0x60, 0x46, 0x0E, 0xF2, 0x4B, 0x03, 0x60, 0x40, - 0xF0, 0x37, 0x38, 0x00, 0xFF, 0x37, 0x2D, 0x00, 0xFD, 0x37, 0x25, 0x00, 0xF8, 0x37, 0x0A, 0x00, - 0x60, 0x47, 0xFF, 0xB5, 0x10, 0x60, 0x12, 0x62, 0x46, 0xD1, 0x00, 0x60, 0x01, 0x64, 0xB0, 0x84, - 0xA2, 0xDB, 0xCF, 0xFE, 0x00, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xDC, 0x01, 0x06, 0xB4, 0xFD, 0x7F, 0x0E, 0xFA, 0x25, 0x60, - 0xF2, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, - 0x2B, 0xFF, 0xF9, 0xFE, 0xCD, 0x01, 0x23, 0xF0, 0x60, 0x40, 0x04, 0x26, 0xED, 0x1B, 0x02, 0x26, - 0xEB, 0x18, 0xA2, 0xFF, 0x02, 0xF0, 0x09, 0x60, 0x08, 0x64, 0xD0, 0x80, 0xAD, 0xF3, 0x02, 0x02, - 0xCC, 0x84, 0xAD, 0xFB, 0x26, 0x60, 0x1A, 0x64, 0x40, 0x4B, 0x34, 0x60, 0x58, 0x4D, 0x08, 0x78, - 0xFF, 0xFF, 0xB6, 0x01, 0xAC, 0xFE, 0x09, 0x05, 0xAD, 0xFE, 0x0F, 0x05, 0xAE, 0xFE, 0xB0, 0x05, - 0xAF, 0xFE, 0x37, 0x05, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0x08, 0x60, 0x08, 0xF1, 0x20, 0x60, - 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0xF5, 0x01, 0x10, 0x60, 0x7A, 0x65, 0x0D, 0x61, - 0x07, 0x00, 0xA2, 0xDD, 0x58, 0x4F, 0x64, 0x58, 0xFF, 0xFF, 0x00, 0xB9, 0xFF, 0xFF, 0x08, 0x03, - 0x00, 0x63, 0xA5, 0xD1, 0x5A, 0xD3, 0xDA, 0x85, 0x00, 0xA8, 0xCD, 0x81, 0xF2, 0x02, 0xF8, 0x02, - 0xE1, 0x01, 0x10, 0x60, 0x0E, 0x62, 0x10, 0x60, 0x58, 0x65, 0xF3, 0x60, 0xD7, 0x63, 0x5A, 0xDF, - 0xD6, 0x80, 0xFF, 0xFF, 0x04, 0x03, 0x5A, 0xDF, 0x5A, 0xDF, 0x5A, 0xDD, 0xF9, 0x01, 0x10, 0x60, - 0x78, 0x65, 0x5A, 0xDF, 0xD6, 0x80, 0xFF, 0xFF, 0x02, 0x03, 0x5A, 0xDD, 0xFB, 0x01, 0x2F, 0x58, - 0xFF, 0xFF, 0x10, 0x60, 0x12, 0x64, 0x40, 0x41, 0x10, 0x60, 0x10, 0x63, 0xA3, 0xD1, 0x00, 0x64, - 0xD0, 0x80, 0x0C, 0x61, 0x08, 0x03, 0xBD, 0xDB, 0xA3, 0xD3, 0xFF, 0xFF, 0xB0, 0x84, 0xCD, 0x81, - 0xA3, 0xDB, 0x06, 0xA3, 0xF9, 0x02, 0x10, 0x60, 0x60, 0x63, 0xA3, 0xD1, 0x00, 0x64, 0xD0, 0x80, - 0x0D, 0x61, 0x19, 0x03, 0xBD, 0xDB, 0x64, 0x44, 0xFE, 0xA3, 0x02, 0xA3, 0xCD, 0x81, 0xE8, 0x84, - 0xE3, 0x03, 0x02, 0x05, 0xE1, 0x03, 0xF9, 0x01, 0x97, 0xFB, 0x99, 0xFD, 0x61, 0x5C, 0xA3, 0xD3, - 0x98, 0xF9, 0x03, 0x18, 0x58, 0x4F, 0x60, 0x58, 0xFF, 0xFF, 0x99, 0xF3, 0x98, 0xF1, 0x60, 0x43, - 0x97, 0xF3, 0x64, 0x41, 0xEA, 0x01, 0x21, 0x43, 0x10, 0x60, 0x5A, 0x65, 0xD7, 0x80, 0xBD, 0xD1, - 0xBD, 0xD3, 0x03, 0x02, 0xCA, 0x60, 0xD4, 0x78, 0xFF, 0xFF, 0xA0, 0x84, 0xBD, 0xD1, 0x43, 0x41, - 0xF5, 0x03, 0xF3, 0x60, 0xDC, 0x64, 0x64, 0x58, 0x40, 0x4F, 0x2A, 0xF0, 0x83, 0x60, 0xFF, 0x65, - 0x64, 0x47, 0x03, 0x2B, 0x01, 0x00, 0x14, 0x00, 0x03, 0x26, 0x03, 0xAC, 0x60, 0x47, 0xA4, 0x84, - 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, 0x2E, 0xFA, 0x64, 0x41, - 0xEA, 0xF3, 0x2F, 0xFA, 0x60, 0x43, 0xEB, 0xF3, 0x30, 0xFA, 0xEC, 0xF1, 0x31, 0xF8, 0x19, 0x00, - 0x60, 0x47, 0xA4, 0x84, 0x2A, 0xFA, 0x2F, 0xF2, 0x2C, 0xFA, 0x30, 0xF2, 0x2D, 0xFA, 0x31, 0xF2, - 0x2E, 0xFA, 0x36, 0xF2, 0x32, 0xFA, 0x37, 0xF2, 0x33, 0xFA, 0x38, 0xF2, 0x34, 0xFA, 0xEA, 0xF3, - 0x2F, 0xFA, 0x36, 0xFA, 0xEB, 0xF3, 0x30, 0xFA, 0x37, 0xFA, 0xEC, 0xF3, 0x31, 0xFA, 0x38, 0xFA, - 0x64, 0x41, 0x1C, 0xF2, 0x13, 0xFA, 0x00, 0xF4, 0x0D, 0xF2, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2B, - 0x17, 0x00, 0x81, 0x67, 0xA2, 0xDA, 0xF4, 0x60, 0x58, 0x4E, 0xCF, 0x78, 0xFF, 0xFF, 0x26, 0x46, - 0x3F, 0xFC, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, - 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xC1, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, - 0x26, 0x46, 0x3F, 0xF0, 0x42, 0x64, 0xD0, 0x80, 0xFF, 0xFF, 0x01, 0x04, 0x3F, 0xFA, 0x07, 0xF2, - 0xA6, 0xF1, 0x01, 0x1B, 0x07, 0xF8, 0x1C, 0xF2, 0x13, 0xFA, 0x26, 0xF2, 0x27, 0xF0, 0x60, 0x47, - 0x00, 0xF4, 0x1F, 0xFA, 0x64, 0x47, 0x20, 0xFA, 0x61, 0x44, 0x21, 0xFA, 0x01, 0x67, 0x0D, 0xFA, - 0x10, 0x61, 0x2D, 0x60, 0x5E, 0x64, 0x1E, 0x63, 0x58, 0xD1, 0xCD, 0x81, 0xBD, 0xD8, 0xFC, 0x02, - 0xB8, 0xF1, 0xD6, 0xF1, 0x64, 0x5E, 0x64, 0x5F, 0x44, 0x63, 0xBD, 0xDA, 0x16, 0x60, 0xAC, 0xF3, - 0xFF, 0xFF, 0xE0, 0x84, 0xE0, 0x84, 0xE0, 0x84, 0x4A, 0xD3, 0x60, 0x45, 0x60, 0x40, 0x01, 0x36, - 0x03, 0x64, 0x02, 0x36, 0x01, 0x64, 0xB4, 0x84, 0x06, 0xA2, 0xA2, 0xD1, 0xBD, 0xDA, 0x64, 0x47, - 0xBD, 0xDA, 0xD3, 0xF3, 0xD4, 0xF1, 0x60, 0x47, 0xBD, 0xDA, 0x64, 0x47, 0xE2, 0xF1, 0xBD, 0xDA, - 0x64, 0x44, 0xBD, 0xDA, 0x26, 0x46, 0x00, 0x64, 0x23, 0xF0, 0x3B, 0xF0, 0x64, 0x40, 0x10, 0x2A, - 0x06, 0x00, 0xC0, 0x67, 0xA0, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0xE8, 0x84, 0x10, 0xBC, 0x3E, 0xFA, - 0x25, 0x60, 0xDA, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x26, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, - 0xFF, 0xFF, 0x2B, 0xFF, 0xC8, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0xB1, 0xF3, - 0x1F, 0xFA, 0x32, 0x47, 0x07, 0xFA, 0x24, 0x7E, 0x01, 0x7F, 0x08, 0xFA, 0xD6, 0xF1, 0x09, 0xF8, - 0x01, 0x60, 0x01, 0x64, 0x0A, 0xFA, 0x01, 0x64, 0x0B, 0xFA, 0x18, 0x64, 0x13, 0x60, 0x0D, 0xFB, - 0x66, 0x44, 0x5A, 0xDB, 0x0A, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x52, 0x63, 0x2E, 0x58, - 0xFF, 0xFF, 0x00, 0x60, 0x2A, 0x61, 0xB6, 0x60, 0x58, 0x4D, 0x25, 0x78, 0xFF, 0xFF, 0x66, 0x44, - 0x5D, 0xFB, 0x04, 0x64, 0x03, 0xFA, 0x67, 0x44, 0x2C, 0xFA, 0x2D, 0xFA, 0x2E, 0xFA, 0x32, 0xFA, - 0x33, 0xFA, 0x34, 0xFA, 0x12, 0x60, 0x80, 0x64, 0xA6, 0xF1, 0x0E, 0xFA, 0x07, 0xF8, 0x00, 0x64, - 0x3E, 0xFA, 0x0E, 0x60, 0x3D, 0xFB, 0x06, 0xA2, 0x10, 0x60, 0x80, 0x64, 0xA2, 0xDB, 0x04, 0x64, - 0x5A, 0xDB, 0x06, 0x64, 0x5A, 0xDB, 0xF8, 0x60, 0xCF, 0x64, 0x08, 0x60, 0x3F, 0xFB, 0x00, 0x64, - 0x0E, 0x60, 0x43, 0xFB, 0x06, 0xA2, 0x10, 0x60, 0x84, 0x64, 0xA2, 0xDB, 0x08, 0x64, 0x5A, 0xDB, - 0x06, 0x64, 0x5A, 0xDB, 0xF8, 0x60, 0xD8, 0x64, 0x08, 0x60, 0x41, 0xFB, 0xF8, 0x60, 0xB4, 0x64, - 0x08, 0x60, 0x34, 0xFB, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF5, 0x60, 0x31, 0x64, - 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0xF7, 0x60, 0x6C, 0x78, - 0xFF, 0xFF, 0x5D, 0xF5, 0xEA, 0xF1, 0x2F, 0xF8, 0xEB, 0xF1, 0x30, 0xF8, 0xEC, 0xF1, 0x31, 0xF8, - 0xC9, 0xF1, 0x19, 0xF8, 0x00, 0x63, 0x88, 0xFD, 0x1B, 0x60, 0xB2, 0x63, 0x86, 0xFD, 0x87, 0xFD, - 0x20, 0x40, 0x10, 0x2B, 0x00, 0x00, 0x5D, 0xF5, 0x40, 0x64, 0x2A, 0xFA, 0x7D, 0xF3, 0x7C, 0xFB, - 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x10, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x03, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x03, 0x00, 0xF6, 0x60, 0xC6, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x3D, 0xF3, 0xFD, 0x60, - 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x3F, 0xFB, 0x19, 0x60, 0x39, 0xF3, 0x3F, 0x40, - 0x01, 0x27, 0x08, 0x00, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, - 0xFF, 0xFF, 0x05, 0x00, 0x0F, 0xB4, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, - 0x35, 0x60, 0x70, 0x64, 0x00, 0xF4, 0x40, 0x48, 0x2F, 0x60, 0x24, 0x64, 0x20, 0x40, 0x10, 0x27, - 0x02, 0x00, 0x2F, 0x60, 0x02, 0x64, 0x28, 0xDB, 0x04, 0x61, 0x00, 0x60, 0x00, 0x64, 0xF1, 0x60, - 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, 0x3F, 0xFC, 0x01, 0x64, 0x54, 0xF1, 0x10, 0x60, - 0x12, 0xFB, 0x7D, 0xFB, 0xA4, 0xD3, 0x04, 0x65, 0x53, 0xF3, 0x01, 0x18, 0x0C, 0x65, 0xF3, 0xB4, - 0xB4, 0x84, 0x53, 0xFB, 0x0D, 0x00, 0xF7, 0x60, 0x6C, 0x78, 0xFF, 0xFF, 0x53, 0xF1, 0x7D, 0xF3, - 0xFF, 0xFF, 0xF3, 0xA0, 0x04, 0xA4, 0x01, 0x04, 0xF1, 0xA4, 0x10, 0x36, 0xF4, 0x01, 0x7D, 0xFB, - 0x20, 0x40, 0x10, 0x2B, 0x10, 0x00, 0x7D, 0xF3, 0x32, 0x60, 0x80, 0x61, 0xA1, 0xD1, 0xCC, 0x84, - 0x01, 0x61, 0x08, 0x24, 0x03, 0x00, 0xE1, 0x81, 0xCC, 0x84, 0xFB, 0x01, 0xA1, 0x84, 0x53, 0xF1, - 0xE6, 0x03, 0x10, 0x60, 0x12, 0xFB, 0x7D, 0xF3, 0x10, 0x60, 0xF2, 0x61, 0xCC, 0x84, 0xFF, 0xFF, - 0x02, 0x03, 0x06, 0xA1, 0xFB, 0x01, 0xA1, 0xD3, 0x53, 0xF1, 0x01, 0xB0, 0x02, 0xB0, 0xD7, 0x03, - 0x64, 0x40, 0x01, 0x26, 0x05, 0x00, 0x20, 0x40, 0x10, 0x27, 0x02, 0x00, 0xD0, 0x03, 0x00, 0x00, - 0x9D, 0xFE, 0x3D, 0x05, 0xBA, 0xFE, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, - 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF5, 0x60, 0xCB, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x7D, 0xF1, - 0x13, 0x60, 0x1A, 0xF9, 0x08, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x13, 0xFB, 0xF5, 0x60, 0xF0, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x1B, 0x60, 0xF3, 0xF1, 0xAD, 0x4F, 0x00, 0x7F, 0xFA, 0xB4, 0x64, 0x41, 0x7D, 0xF1, 0x02, 0xB1, - 0x04, 0x65, 0x02, 0x02, 0x64, 0x40, 0x01, 0x2B, 0x01, 0x65, 0xB4, 0x84, 0xA0, 0x5D, 0x10, 0x60, - 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x13, 0xFB, 0xF5, 0x60, 0xC8, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7D, 0xF1, - 0x13, 0x60, 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, - 0x08, 0x60, 0x13, 0xFB, 0xF6, 0x60, 0x28, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0xBE, 0xFE, 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, - 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, 0x5D, 0xF5, 0x25, 0x60, 0xCE, 0x64, 0x13, 0x60, - 0x0D, 0xFB, 0x66, 0x44, 0x5A, 0xDB, 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0x00, 0x64, - 0x51, 0xFB, 0x00, 0x60, 0x01, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF6, 0x60, 0x4C, 0x64, 0x5A, 0xDB, - 0xCF, 0xFE, 0xC1, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, 0xA2, 0xDB, - 0xC3, 0xF1, 0x0E, 0x60, 0x3F, 0xF9, 0x1C, 0x60, 0x7A, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xC4, 0xF1, 0x0E, 0x60, 0x45, 0xF9, 0x26, 0x60, 0x42, 0x62, - 0xA2, 0xD3, 0xFF, 0xFF, 0xFD, 0x1B, 0x1C, 0x60, 0x86, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, - 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x60, 0x08, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF6, 0x60, - 0x75, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x51, 0xF1, 0x10, 0x60, 0x24, 0x62, - 0x00, 0x64, 0xA2, 0xDB, 0x64, 0x40, 0xFF, 0x26, 0x0B, 0x00, 0x53, 0xF3, 0xFF, 0xFF, 0x80, 0xB0, - 0xFF, 0xFF, 0x03, 0x03, 0xF7, 0x60, 0x65, 0x78, 0xFF, 0xFF, 0xF5, 0x60, 0x96, 0x78, 0xFF, 0xFF, - 0x02, 0x0A, 0x00, 0x64, 0x51, 0xFB, 0xC5, 0xF1, 0x0E, 0x60, 0x45, 0xF9, 0x00, 0x60, 0x0C, 0x64, - 0x08, 0x60, 0x13, 0xFB, 0xF6, 0x60, 0xA0, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x1C, 0x60, 0x86, 0x64, - 0x13, 0x60, 0x22, 0xFB, 0x02, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xA0, 0x80, 0x9C, 0x84, 0x0B, 0x03, 0xA0, 0x84, - 0xA2, 0xDB, 0x1C, 0x60, 0x86, 0x64, 0x13, 0x60, 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, - 0x04, 0xFF, 0x13, 0x00, 0xFF, 0x60, 0xF7, 0x64, 0xA0, 0x84, 0xA2, 0xDB, 0x51, 0xF3, 0xDE, 0x0A, - 0x00, 0xA0, 0x00, 0x64, 0x02, 0x03, 0x51, 0xFB, 0xD9, 0x01, 0x1C, 0x60, 0x7A, 0x64, 0x13, 0x60, - 0x22, 0xFB, 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0xB7, 0x01, 0x19, 0x60, 0x3E, 0xF3, - 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x3F, 0xFB, 0x19, 0x60, 0x3A, 0xF3, - 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, - 0x35, 0x60, 0x70, 0x64, 0x00, 0xF4, 0x40, 0x48, 0x2F, 0x60, 0x24, 0x64, 0x20, 0x40, 0x10, 0x27, - 0x02, 0x00, 0x2F, 0x60, 0x02, 0x64, 0x28, 0xDB, 0x04, 0x61, 0x00, 0x60, 0x00, 0x64, 0xF1, 0x60, - 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x5D, 0xF5, 0x3F, 0xFC, 0x53, 0xF3, 0x20, 0x40, 0x10, 0x23, - 0x02, 0x00, 0x20, 0xBC, 0x04, 0x00, 0x60, 0x40, 0x01, 0x22, 0x40, 0xBC, 0x04, 0xBC, 0x80, 0xBC, - 0x53, 0xFB, 0x11, 0x60, 0x62, 0x64, 0x08, 0x60, 0x6C, 0xFB, 0x06, 0x64, 0x08, 0x60, 0x73, 0xFB, - 0x19, 0x60, 0x43, 0xF3, 0xFF, 0xFF, 0x07, 0xB4, 0xA2, 0xDB, 0x53, 0xF3, 0x08, 0x60, 0x6C, 0xF1, - 0x60, 0x40, 0x20, 0x26, 0x03, 0x00, 0x01, 0x26, 0x32, 0x00, 0x45, 0x00, 0x08, 0x60, 0x73, 0xF3, - 0xFF, 0xFF, 0xDD, 0xA0, 0x01, 0xA4, 0x58, 0x03, 0xA2, 0xDB, 0x32, 0x60, 0x82, 0x61, 0xE0, 0xA0, - 0xF0, 0xA0, 0x05, 0x05, 0x01, 0x05, 0x05, 0x00, 0x02, 0xA1, 0xF0, 0xA4, 0x02, 0x00, 0x04, 0xA1, - 0xE0, 0xA4, 0xA1, 0xD1, 0x01, 0x61, 0xDC, 0x84, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0xE1, 0x81, - 0xFB, 0x01, 0xA1, 0x80, 0x10, 0x60, 0xE6, 0x64, 0x01, 0x02, 0xE0, 0x01, 0xA0, 0xD3, 0x11, 0x60, - 0x5A, 0x63, 0xFA, 0xA4, 0xCC, 0x84, 0x08, 0xA3, 0xFD, 0x02, 0xCF, 0xF1, 0xA3, 0xD3, 0x01, 0x18, - 0xD5, 0x18, 0xFE, 0xA3, 0xA3, 0xD3, 0x7D, 0xFB, 0xF5, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x12, 0x60, - 0x40, 0x65, 0x64, 0x41, 0xA1, 0xD3, 0xD5, 0x80, 0x00, 0xB8, 0x26, 0x07, 0x02, 0x02, 0x08, 0xA1, - 0xF9, 0x01, 0x61, 0x44, 0x08, 0x60, 0x6C, 0xFB, 0x01, 0x64, 0xA1, 0xDB, 0x49, 0xD3, 0x7D, 0xFB, - 0xF5, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x12, 0x60, 0x40, 0x65, 0x64, 0x41, 0xA1, 0xD3, 0xD5, 0x80, - 0x04, 0xB0, 0x12, 0x07, 0x02, 0x02, 0x08, 0xA1, 0xF9, 0x01, 0x61, 0x44, 0x08, 0x60, 0x6C, 0xFB, - 0x49, 0xD3, 0x7D, 0xFB, 0xF5, 0x60, 0xC8, 0x78, 0xFF, 0xFF, 0x10, 0x60, 0xD8, 0x65, 0xA5, 0xD3, - 0xFF, 0xFF, 0x08, 0xA4, 0xA5, 0xDB, 0x99, 0x01, 0x1C, 0x60, 0x7A, 0x64, 0x13, 0x60, 0x22, 0xFB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x53, 0xF3, 0xFF, 0xFF, 0xE3, 0xB4, 0x53, 0xFB, - 0x10, 0x60, 0x10, 0xF3, 0xFF, 0xFF, 0xFE, 0xB4, 0xA2, 0xDB, 0x10, 0x60, 0x24, 0x62, 0x00, 0x64, - 0xA2, 0xDB, 0xDE, 0xFE, 0x0A, 0x04, 0x40, 0x60, 0x00, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF7, 0x60, - 0x7D, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x7C, 0xF1, 0x7D, 0xF9, 0x13, 0x60, - 0x1A, 0xF9, 0x0E, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x2D, 0xFF, 0x20, 0x60, 0x00, 0x64, 0x08, 0x60, - 0x13, 0xFB, 0xF7, 0x60, 0x9F, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0xBE, 0xFE, - 0x08, 0x60, 0x08, 0xF1, 0x40, 0x60, 0x00, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x53, 0xF3, - 0xFF, 0xFF, 0x80, 0xB0, 0xFF, 0xFF, 0x54, 0x02, 0x1C, 0x60, 0x32, 0x63, 0x1C, 0x61, 0xCD, 0x81, - 0xBD, 0xDF, 0xFD, 0x02, 0x14, 0x60, 0x32, 0x61, 0x88, 0xF3, 0x61, 0x43, 0xC4, 0xA5, 0x47, 0xD1, - 0x0F, 0x04, 0xBE, 0xD5, 0x1C, 0x60, 0x2E, 0x63, 0xC3, 0x83, 0xC3, 0x83, 0xC3, 0x83, 0x43, 0xD3, - 0xBE, 0xD1, 0xDC, 0x84, 0xA3, 0xDB, 0x66, 0x44, 0xC0, 0x84, 0xBE, 0xDB, 0x65, 0x44, 0xED, 0x01, - 0x1C, 0x60, 0x32, 0x63, 0x0E, 0x61, 0x41, 0x4B, 0xBD, 0xD3, 0xBD, 0xD1, 0x00, 0xBD, 0x64, 0x41, - 0x19, 0x03, 0x01, 0xA8, 0x61, 0x44, 0x02, 0xA8, 0x15, 0x03, 0x02, 0x02, 0xE9, 0x84, 0x12, 0x00, - 0x65, 0x47, 0x60, 0x45, 0x61, 0x44, 0x09, 0x61, 0xCD, 0x81, 0xE0, 0x84, 0xFF, 0x23, 0xFC, 0x01, - 0x02, 0x24, 0xC4, 0x84, 0x02, 0x28, 0xD4, 0x84, 0xCD, 0x81, 0x01, 0x0E, 0x01, 0xBC, 0x02, 0x03, - 0xE0, 0x84, 0xF6, 0x01, 0x00, 0x7F, 0x2B, 0x41, 0x4D, 0x8B, 0xBF, 0xDB, 0xDD, 0x02, 0x14, 0x60, - 0x32, 0x61, 0x88, 0xF3, 0x61, 0x43, 0xC4, 0xA5, 0x47, 0xD1, 0x0A, 0x04, 0xDA, 0x86, 0x1C, 0x60, - 0x30, 0x63, 0xC3, 0x83, 0xC3, 0x83, 0xC3, 0x83, 0x43, 0xD1, 0xA6, 0xD9, 0x65, 0x44, 0xF2, 0x01, - 0x53, 0xF3, 0x88, 0xF1, 0xF3, 0xB4, 0x53, 0xFB, 0x14, 0x60, 0x32, 0x63, 0xC3, 0x85, 0x45, 0x4A, - 0x1B, 0x60, 0xB2, 0x65, 0x87, 0xF3, 0x45, 0x4C, 0x40, 0x48, 0x2A, 0x45, 0xD7, 0x80, 0x02, 0x65, - 0x17, 0x05, 0x47, 0xD1, 0x02, 0x65, 0x47, 0xD3, 0x0A, 0x65, 0xD0, 0x81, 0x47, 0xD3, 0x01, 0x05, - 0x00, 0x61, 0xF2, 0xA3, 0x01, 0xB0, 0x61, 0x44, 0x05, 0x03, 0x2C, 0xDB, 0x5A, 0xDD, 0x5A, 0x8C, - 0x3C, 0xA3, 0xEB, 0x01, 0x28, 0x42, 0x4A, 0xDD, 0x4A, 0xDB, 0x42, 0x48, 0x3C, 0xA3, 0xE5, 0x01, - 0x28, 0x44, 0x86, 0xFB, 0x86, 0xF1, 0x1B, 0x60, 0xB2, 0x63, 0x44, 0x48, 0x28, 0x45, 0xD7, 0x80, - 0xA3, 0xD1, 0x15, 0x05, 0x04, 0x65, 0x46, 0xD3, 0x28, 0x45, 0xD6, 0x80, 0xD0, 0x80, 0x02, 0x04, - 0x04, 0xA3, 0xF5, 0x01, 0xF7, 0x06, 0x62, 0x46, 0xA2, 0xD9, 0xA3, 0xDB, 0x5B, 0xD3, 0x66, 0x42, - 0x5A, 0xD1, 0xA2, 0xDB, 0xA3, 0xD9, 0xFE, 0xA3, 0xA3, 0xD1, 0x66, 0x42, 0xEB, 0x01, 0x86, 0xF3, - 0x87, 0xF1, 0x60, 0x43, 0x44, 0x48, 0x28, 0x45, 0xD7, 0x80, 0xA3, 0xD1, 0x15, 0x05, 0x04, 0x65, - 0x46, 0xD3, 0x28, 0x45, 0xD6, 0x80, 0xD0, 0x80, 0x02, 0x04, 0x04, 0xA3, 0xF5, 0x01, 0xF7, 0x06, - 0x62, 0x46, 0xA2, 0xD9, 0xA3, 0xDB, 0x5B, 0xD3, 0x66, 0x42, 0x5A, 0xD1, 0xA2, 0xDB, 0xA3, 0xD9, - 0xFE, 0xA3, 0xA3, 0xD1, 0x66, 0x42, 0xEB, 0x01, 0x08, 0x60, 0x08, 0xF1, 0x10, 0x60, 0x00, 0x64, - 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x7D, 0xF1, 0x19, 0x60, 0x3D, 0xF3, 0x64, 0x40, 0x01, 0x27, - 0x27, 0x00, 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x3F, 0xFB, 0x19, 0x60, - 0x39, 0xF3, 0x3F, 0x40, 0x01, 0x27, 0x16, 0x00, 0x0F, 0x60, 0xFF, 0x65, 0x60, 0x41, 0xDB, 0xF3, - 0xFF, 0xFF, 0x60, 0x40, 0x03, 0x36, 0x07, 0x00, 0x19, 0x60, 0x44, 0xF3, 0xFF, 0xFF, 0x60, 0x40, - 0x01, 0x2A, 0x01, 0x00, 0x0F, 0x61, 0x61, 0x44, 0xA4, 0x84, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, - 0xFF, 0xFF, 0x16, 0x00, 0x0F, 0xB4, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, 0x10, 0x00, - 0x5A, 0xD3, 0xFD, 0x60, 0x58, 0x4E, 0xAC, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x3F, 0xFB, 0x19, 0x60, - 0x3A, 0xF3, 0x0F, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0xFC, 0x60, 0x58, 0x4E, 0x34, 0x78, 0xFF, 0xFF, - 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF5, 0x60, 0x31, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, - 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x1C, 0x60, 0x7A, 0x64, 0x13, 0x60, 0x22, 0xFB, - 0x03, 0x64, 0x4A, 0xDB, 0xFF, 0xFF, 0x04, 0xFF, 0x00, 0x64, 0x53, 0xFB, 0x00, 0x64, 0x08, 0x60, - 0x12, 0xFB, 0x5A, 0xDB, 0xBE, 0xFE, 0x00, 0x60, 0x30, 0x64, 0x08, 0x60, 0x13, 0xFB, 0xF5, 0x60, - 0x31, 0x64, 0x5A, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, 0x2F, 0x58, 0xFF, 0xFF, 0x08, 0x60, - 0x12, 0xF1, 0x00, 0x60, 0x04, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, 0xFF, 0xFF, - 0x08, 0x60, 0x12, 0xF1, 0x00, 0x60, 0x08, 0x64, 0xB0, 0x84, 0xA2, 0xDB, 0xCF, 0xFE, 0x2F, 0x58, - 0xFF, 0xFF, 0x20, 0x40, 0x90, 0x2B, 0x03, 0x00, 0xFB, 0x60, 0xFC, 0x78, 0xFF, 0xFF, 0x53, 0xF3, - 0x88, 0xF1, 0x04, 0xB0, 0x07, 0x60, 0x80, 0x64, 0xD0, 0x80, 0x20, 0x03, 0x1F, 0x06, 0x26, 0x46, - 0x88, 0xF1, 0x14, 0x60, 0x32, 0x63, 0xC3, 0x83, 0x7D, 0xF3, 0x26, 0xF0, 0xBD, 0xDB, 0x64, 0x44, - 0x00, 0x7F, 0xBD, 0xDB, 0x64, 0x47, 0x00, 0x7F, 0xBD, 0xDB, 0x32, 0xF0, 0xBD, 0xD9, 0x33, 0xF0, - 0xBD, 0xD9, 0x34, 0xF0, 0xBD, 0xD9, 0x00, 0xF4, 0x0D, 0xF0, 0xBD, 0xD9, 0x0E, 0xF0, 0xBD, 0xD9, - 0x0F, 0xF0, 0xA3, 0xDF, 0x64, 0x47, 0x60, 0x45, 0x00, 0x37, 0x03, 0x00, 0xFB, 0x60, 0xF7, 0x78, - 0xFF, 0xFF, 0xBD, 0xDB, 0xE0, 0xA0, 0x1F, 0x61, 0x00, 0xB8, 0xF8, 0x07, 0xF7, 0x03, 0x60, 0xFE, - 0x5D, 0xD0, 0xCC, 0x84, 0xBD, 0xD9, 0xFC, 0x02, 0x65, 0x40, 0x01, 0x26, 0xDF, 0x83, 0x5D, 0xD0, - 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x3A, 0x03, 0x00, 0x5D, 0xD0, 0xFF, 0xFF, 0xC1, 0x81, 0x5D, 0xD0, - 0xFF, 0xFF, 0x64, 0x40, 0x03, 0x36, 0x07, 0x00, 0x53, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2A, - 0xDD, 0x01, 0xCD, 0x81, 0x13, 0x00, 0x53, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x2A, 0x04, 0x00, - 0x5D, 0xD0, 0xFF, 0xFF, 0xC1, 0x81, 0x0A, 0x00, 0x59, 0xD0, 0x7D, 0xF3, 0xFF, 0xFF, 0xD0, 0x80, - 0x20, 0xFE, 0x08, 0x24, 0x03, 0x00, 0xFB, 0x60, 0xF7, 0x78, 0xFF, 0xFF, 0x7C, 0x44, 0x1A, 0x60, - 0x24, 0xFB, 0x1A, 0x60, 0x25, 0xFB, 0x1A, 0x60, 0x26, 0xFB, 0x1A, 0x60, 0x27, 0xFB, 0x1C, 0x60, - 0x08, 0xFB, 0x1C, 0x60, 0x04, 0xFB, 0x00, 0x64, 0x1C, 0x60, 0x04, 0xFB, 0x20, 0xFE, 0x37, 0x60, - 0xFE, 0x64, 0x40, 0x4A, 0xF9, 0x60, 0x58, 0x4D, 0xC3, 0x78, 0xFF, 0xFF, 0x1C, 0x60, 0x04, 0xF3, - 0xFF, 0xFF, 0x09, 0x18, 0xFF, 0xFF, 0x1C, 0x60, 0x06, 0xF3, 0x1C, 0x60, 0x07, 0xF5, 0x60, 0x41, - 0x00, 0x64, 0x1C, 0x60, 0x04, 0xFB, 0x20, 0xFE, 0x2A, 0xD1, 0xDA, 0x85, 0x64, 0x44, 0x01, 0xA0, - 0xFF, 0xFF, 0x01, 0x02, 0x79, 0x00, 0x45, 0x4A, 0x7C, 0x44, 0x60, 0xFE, 0xA1, 0xD2, 0xFF, 0xFF, - 0xD0, 0x80, 0x20, 0xFE, 0x01, 0x03, 0xEF, 0x01, 0x1C, 0x60, 0x04, 0xF3, 0xFF, 0xFF, 0x02, 0x18, - 0xDD, 0x81, 0x35, 0x00, 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0x60, 0x5C, 0x41, 0x94, 0x81, 0xA0, - 0x20, 0xFE, 0x2D, 0x04, 0x01, 0x64, 0x1C, 0x60, 0x04, 0xFB, 0xC1, 0x84, 0x84, 0xA4, 0x1C, 0x60, - 0x06, 0xFB, 0x00, 0xF2, 0x1C, 0x60, 0x07, 0xFB, 0x1C, 0x60, 0x05, 0xFD, 0x02, 0x60, 0x00, 0x63, - 0xCD, 0x85, 0x64, 0x44, 0xD8, 0x81, 0xCD, 0x84, 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, - 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, - 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, 0xDF, 0x83, 0x00, 0x60, 0x01, 0x61, 0x02, 0x60, - 0x00, 0x64, 0xE0, 0x87, 0x60, 0x46, 0x1C, 0x60, 0x05, 0xF3, 0xFF, 0xFF, 0x60, 0x43, 0x60, 0xFE, - 0xCD, 0x81, 0x20, 0xFE, 0x2A, 0x44, 0x38, 0x60, 0x00, 0x7C, 0xD0, 0x84, 0x38, 0x60, 0x04, 0x65, - 0x44, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x60, 0x04, 0xF3, 0xFF, 0xFF, 0x08, 0x18, 0x1C, 0x60, - 0x06, 0xF3, 0x1C, 0x60, 0x07, 0xF5, 0x60, 0x41, 0x00, 0x64, 0x1C, 0x60, 0x04, 0xFB, 0x26, 0x44, - 0x01, 0xA4, 0x58, 0x90, 0xFF, 0xFF, 0x03, 0x02, 0x61, 0x44, 0x0B, 0xA5, 0x04, 0x00, 0x61, 0x44, - 0xFC, 0xA4, 0x8B, 0x7C, 0xC0, 0x85, 0xDD, 0x81, 0x66, 0x44, 0x1C, 0x60, 0x07, 0xFB, 0x26, 0x46, - 0x1B, 0xF0, 0x1C, 0x60, 0x07, 0xF5, 0x64, 0x44, 0xD4, 0x80, 0xFF, 0xFF, 0x02, 0x06, 0x2D, 0x58, - 0xFF, 0xFF, 0xFA, 0x60, 0xE7, 0x78, 0xFF, 0xFF, 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0x20, 0xFE, - 0xFF, 0xB4, 0x41, 0x94, 0x81, 0xA0, 0xFF, 0xFF, 0x02, 0x04, 0x00, 0xF4, 0x84, 0xA4, 0x60, 0x41, - 0x5D, 0x01, 0x1A, 0x60, 0x2C, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x01, 0x3A, 0x6C, 0x01, 0x61, 0x5C, - 0x1A, 0x60, 0x2B, 0xF9, 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0xFE, 0xA4, 0xFF, 0xFF, 0x04, 0x20, - 0x02, 0x00, 0xFF, 0xA1, 0x60, 0x01, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x02, 0x00, - 0xFE, 0xA1, 0x59, 0x01, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x36, 0x02, 0x00, 0xFD, 0xA1, - 0x52, 0x01, 0x01, 0x7C, 0x1C, 0x60, 0x08, 0xF9, 0x4C, 0x00, 0x1A, 0x60, 0x2C, 0xF3, 0xFF, 0xFF, - 0x01, 0x18, 0x49, 0x01, 0x00, 0x7C, 0x1C, 0x60, 0x08, 0xF9, 0x61, 0x5C, 0x1A, 0x60, 0x2B, 0xF9, - 0x60, 0xFE, 0x5D, 0xD2, 0xFF, 0xFF, 0xFA, 0xA4, 0xFF, 0xFF, 0x04, 0x20, 0x04, 0x00, 0xFF, 0xA1, - 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x36, 0x04, 0x00, - 0xC9, 0x81, 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x50, 0x36, - 0x04, 0x00, 0xFD, 0xA1, 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, - 0xF2, 0x36, 0x04, 0x00, 0xFC, 0xA1, 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, 0xFF, 0xFF, - 0x64, 0x40, 0x01, 0x36, 0x04, 0x00, 0xFB, 0xA1, 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, 0x5D, 0xD0, - 0xFF, 0xFF, 0x64, 0x40, 0x01, 0x36, 0x04, 0x00, 0xFA, 0xA1, 0xF9, 0x60, 0x6B, 0x78, 0xFF, 0xFF, - 0x5D, 0xD0, 0xFF, 0xFF, 0x64, 0x40, 0x00, 0x36, 0x04, 0x00, 0xF9, 0xA1, 0xF9, 0x60, 0x6B, 0x78, - 0xFF, 0xFF, 0x60, 0x5C, 0x00, 0x36, 0x32, 0x00, 0x00, 0x64, 0xFB, 0x60, 0x58, 0x4E, 0x66, 0x78, - 0xFF, 0xFF, 0x65, 0x40, 0x08, 0x26, 0xF7, 0x01, 0x1A, 0x60, 0x24, 0xFB, 0x64, 0x40, 0x00, 0x36, - 0x2A, 0x00, 0x5D, 0xD2, 0xDD, 0x81, 0xFB, 0x60, 0x58, 0x4E, 0x66, 0x78, 0xFF, 0xFF, 0x65, 0x40, - 0x08, 0x26, 0xF6, 0x01, 0x1A, 0x60, 0x25, 0xFB, 0x64, 0x40, 0x00, 0x36, 0x21, 0x00, 0x5D, 0xD2, - 0xDD, 0x81, 0xFB, 0x60, 0x58, 0x4E, 0x66, 0x78, 0xFF, 0xFF, 0x65, 0x40, 0x08, 0x26, 0xF6, 0x01, - 0x1A, 0x60, 0x26, 0xFB, 0x64, 0x40, 0x00, 0x36, 0x18, 0x00, 0x5D, 0xD0, 0x34, 0x60, 0x4E, 0x62, - 0xA2, 0xD9, 0x5D, 0xD0, 0x34, 0x60, 0x4F, 0x62, 0xA2, 0xD9, 0x14, 0x00, 0x20, 0xFE, 0x00, 0x60, - 0x04, 0x64, 0x1A, 0x60, 0x24, 0xFB, 0x20, 0xFE, 0x00, 0x60, 0x04, 0x64, 0x1A, 0x60, 0x25, 0xFB, - 0x20, 0xFE, 0x00, 0x60, 0x02, 0x64, 0x1A, 0x60, 0x26, 0xFB, 0x20, 0xFE, 0x00, 0x60, 0x00, 0x64, - 0x1A, 0x60, 0x27, 0xFB, 0x20, 0xFE, 0x1C, 0x60, 0x08, 0xF1, 0xFF, 0xFF, 0x03, 0x18, 0x01, 0x7C, - 0x1C, 0x60, 0x08, 0xF9, 0x1A, 0x60, 0x2B, 0xF1, 0xA2, 0xDD, 0x61, 0x44, 0x1A, 0x60, 0x28, 0xFB, - 0xD1, 0x84, 0xDC, 0x84, 0x64, 0x45, 0x34, 0x60, 0x10, 0x63, 0xBD, 0xDB, 0x60, 0x41, 0xCD, 0x84, - 0x4C, 0x91, 0x60, 0x43, 0x60, 0xFE, 0xA5, 0xD2, 0xDE, 0x85, 0x7F, 0x26, 0x02, 0x00, 0x00, 0xF4, - 0x04, 0x65, 0x5D, 0x93, 0xA3, 0xDB, 0x5D, 0x93, 0xA5, 0xD2, 0xF6, 0x1F, 0x5D, 0x93, 0x20, 0xFE, - 0xDF, 0x83, 0x1A, 0x60, 0x09, 0xF3, 0xFF, 0xFF, 0x60, 0x47, 0xA2, 0xDB, 0x1A, 0x60, 0x28, 0xF3, - 0x1A, 0x60, 0x2B, 0xF1, 0x60, 0x41, 0x64, 0x43, 0xF9, 0x60, 0x56, 0x78, 0xFF, 0xFF, 0x20, 0xFE, - 0x7C, 0x44, 0x1A, 0x60, 0x20, 0xFB, 0x1A, 0x60, 0x1A, 0xF1, 0x1A, 0x60, 0x24, 0xF3, 0xFF, 0xFF, - 0xA0, 0x84, 0xFF, 0xFF, 0x10, 0x26, 0x07, 0x00, 0x04, 0x26, 0x07, 0x00, 0x20, 0x26, 0x07, 0x00, - 0x02, 0x26, 0x07, 0x00, 0x3F, 0x00, 0x10, 0x7C, 0x05, 0x00, 0x04, 0x7C, 0x03, 0x00, 0x20, 0x7C, - 0x01, 0x00, 0x02, 0x7C, 0x1A, 0x60, 0x20, 0xF9, 0x7C, 0x44, 0x1A, 0x60, 0x21, 0xFB, 0x1A, 0x60, - 0x1B, 0xF1, 0x1A, 0x60, 0x25, 0xF3, 0x34, 0x60, 0x40, 0x61, 0xA0, 0x84, 0xA1, 0xD1, 0xFF, 0xFF, - 0x10, 0x26, 0x05, 0x00, 0x04, 0x26, 0x05, 0x00, 0x01, 0x26, 0x08, 0x00, 0x23, 0x00, 0x10, 0x7C, - 0x06, 0x00, 0x64, 0x40, 0x10, 0x26, 0x1E, 0x00, 0x04, 0x7C, 0x01, 0x00, 0x01, 0x7C, 0x1A, 0x60, - 0x21, 0xF9, 0x7C, 0x44, 0x1A, 0x60, 0x22, 0xFB, 0x1A, 0x60, 0x1C, 0xF1, 0x1A, 0x60, 0x26, 0xF3, - 0xFF, 0xFF, 0xA0, 0x84, 0x60, 0x40, 0x02, 0x26, 0x05, 0x00, 0x04, 0x26, 0x05, 0x00, 0x01, 0x26, - 0x05, 0x00, 0x08, 0x00, 0x02, 0x7C, 0x03, 0x00, 0x04, 0x7C, 0x01, 0x00, 0x20, 0x7C, 0x1A, 0x60, - 0x22, 0xF9, 0x09, 0x00, 0x7C, 0x44, 0x1A, 0x60, 0x20, 0xFB, 0x1A, 0x60, 0x21, 0xFB, 0x1A, 0x60, - 0x22, 0xFB, 0x1A, 0x60, 0x23, 0xFB, 0x7C, 0x44, 0x1A, 0x60, 0x20, 0xF1, 0xBD, 0xD9, 0x1A, 0x60, - 0x21, 0xF1, 0xB0, 0x84, 0xBD, 0xD9, 0x1A, 0x60, 0x22, 0xF1, 0xB0, 0x84, 0xBD, 0xD9, 0x1A, 0x60, - 0x1D, 0xF1, 0xB0, 0x84, 0xBD, 0xD9, 0x04, 0x03, 0x1C, 0x60, 0x08, 0xF1, 0xBD, 0xD9, 0x72, 0x00, - 0x16, 0x60, 0xC2, 0xF3, 0xFF, 0xFF, 0xFF, 0xA0, 0xFF, 0xFF, 0x0C, 0x24, 0x6B, 0x00, 0x60, 0x40, - 0x0B, 0x36, 0x68, 0x00, 0x20, 0x40, 0x10, 0x27, 0x65, 0x00, 0x91, 0x00, 0x20, 0xFE, 0x00, 0x65, - 0x60, 0xFE, 0x1A, 0x60, 0x28, 0xFB, 0xE0, 0x84, 0xE0, 0x84, 0x08, 0x20, 0x03, 0x00, 0x01, 0x64, - 0xA2, 0xDB, 0x02, 0x64, 0x02, 0xA5, 0x64, 0x44, 0xD4, 0x9C, 0xD4, 0x80, 0x34, 0x60, 0x52, 0x62, - 0x02, 0x05, 0x08, 0x65, 0x4D, 0x00, 0xA2, 0xD9, 0x7C, 0x44, 0x34, 0x60, 0x54, 0x62, 0xA2, 0xDB, - 0x20, 0xFE, 0x00, 0x64, 0x60, 0xFE, 0x1C, 0x60, 0x08, 0xF3, 0xFF, 0xFF, 0x00, 0xA0, 0x5D, 0xD0, - 0x00, 0x65, 0x04, 0x03, 0x64, 0x40, 0x00, 0x3A, 0x01, 0x65, 0x03, 0x00, 0x64, 0x40, 0x00, 0x3A, - 0x01, 0x65, 0x5D, 0xD0, 0x04, 0x03, 0x64, 0x40, 0x0F, 0x3A, 0x01, 0x65, 0x03, 0x00, 0x64, 0x40, - 0x50, 0x3A, 0x01, 0x65, 0x5D, 0xD0, 0x04, 0x03, 0x64, 0x40, 0xAC, 0x3A, 0x01, 0x65, 0x03, 0x00, - 0x64, 0x40, 0xF2, 0x3A, 0x01, 0x65, 0x5D, 0xD0, 0x65, 0x40, 0x00, 0x3A, 0x17, 0x00, 0x00, 0x60, - 0x00, 0x65, 0x64, 0x40, 0x00, 0x36, 0x01, 0x65, 0x64, 0x40, 0x01, 0x36, 0x02, 0x65, 0x64, 0x40, - 0x02, 0x36, 0x04, 0x65, 0x64, 0x40, 0x04, 0x36, 0x10, 0x65, 0x64, 0x40, 0x05, 0x36, 0x20, 0x65, - 0x65, 0x5C, 0x1A, 0x60, 0x2A, 0xF3, 0xFF, 0xFF, 0xB0, 0x84, 0xA2, 0xDB, 0x1A, 0x60, 0x28, 0xF3, - 0x00, 0x65, 0xFF, 0xA4, 0xA2, 0xDB, 0xBC, 0x02, 0x1A, 0x60, 0x2A, 0xF3, 0x1A, 0x60, 0x29, 0xF1, - 0x2E, 0x58, 0xFF, 0xFF, 0x20, 0xFE, 0x88, 0xF3, 0xFF, 0xFF, 0x3C, 0xA4, 0x88, 0xFB, 0x87, 0xF3, - 0x7D, 0xF1, 0x04, 0xA4, 0x87, 0xFB, 0x53, 0xF3, 0xFF, 0xFF, 0x60, 0x40, 0x80, 0x26, 0x0D, 0x00, - 0x7D, 0xF3, 0x10, 0x60, 0xF2, 0x61, 0xCC, 0x84, 0xFF, 0xFF, 0x02, 0x03, 0x06, 0xA1, 0xFB, 0x01, - 0xA1, 0xD3, 0xFF, 0xFF, 0x02, 0xBC, 0xA1, 0xDB, 0x12, 0x00, 0x7D, 0xF3, 0x11, 0x60, 0x60, 0x63, - 0x01, 0x60, 0xFF, 0x65, 0xA4, 0x84, 0x12, 0x60, 0x40, 0x65, 0xA3, 0xD1, 0xD7, 0x80, 0xD0, 0x80, - 0x06, 0x03, 0x02, 0x03, 0x08, 0xA3, 0xF9, 0x01, 0x02, 0xA3, 0x04, 0x64, 0xA3, 0xDB, 0x20, 0xFE, - 0x26, 0x46, 0x31, 0x40, 0x20, 0x2A, 0x35, 0x00, 0x3F, 0xF2, 0x47, 0x65, 0xC4, 0x84, 0xE8, 0x84, - 0x23, 0xFA, 0xF1, 0x60, 0x02, 0x64, 0x24, 0xFA, 0x7D, 0xF3, 0x01, 0x60, 0xFF, 0x65, 0xA4, 0x84, - 0x01, 0x23, 0x14, 0x00, 0x11, 0x60, 0x60, 0x61, 0x12, 0x60, 0x40, 0x65, 0xA1, 0xD1, 0xD5, 0x80, - 0xD0, 0x80, 0x0B, 0x03, 0x02, 0x03, 0x08, 0xA1, 0xF9, 0x01, 0x04, 0xA1, 0xA1, 0xD3, 0x01, 0x60, - 0x00, 0x65, 0x60, 0x47, 0xFF, 0xB4, 0xB4, 0x84, 0x01, 0x00, 0x01, 0x64, 0x00, 0xF4, 0x08, 0xFA, - 0xFF, 0xFF, 0x26, 0x46, 0x26, 0x60, 0x0A, 0x64, 0x13, 0x60, 0x0D, 0xFB, 0x26, 0x44, 0x5A, 0xDB, - 0x02, 0x64, 0x5A, 0xDB, 0xFF, 0xFF, 0x2B, 0xFF, 0xFA, 0xFE, 0x00, 0x66, 0x46, 0x46, 0x2F, 0x58, - 0xFF, 0xFF, 0x26, 0x46, 0x2F, 0x58, 0xFF, 0xFF, 0x78, 0xFB, 0xAC, 0x85, 0x60, 0x41, 0x55, 0x03, - 0x32, 0x60, 0x00, 0x63, 0x1B, 0x60, 0x04, 0xFD, 0x62, 0x43, 0x1A, 0x60, 0xB4, 0xFD, 0x1A, 0x60, - 0xBA, 0xFD, 0x1A, 0x60, 0xC4, 0xFD, 0x1A, 0x60, 0xCE, 0xFD, 0x00, 0x63, 0xE9, 0x81, 0x08, 0x64, - 0x02, 0x24, 0xDF, 0x83, 0xFB, 0x02, 0x53, 0x94, 0x32, 0x7F, 0x03, 0x06, 0x1B, 0x60, 0x04, 0xFB, - 0x08, 0x63, 0x63, 0x5E, 0x01, 0x7F, 0x19, 0x60, 0x8A, 0xFB, 0x65, 0x41, 0x33, 0x60, 0x16, 0x65, - 0x0F, 0x60, 0xF4, 0x64, 0xE9, 0x81, 0x58, 0xD1, 0xFD, 0x04, 0xCF, 0x83, 0xA5, 0xD9, 0x0C, 0x03, - 0xE9, 0x81, 0x58, 0xD1, 0xFD, 0x04, 0x40, 0x48, 0xA5, 0xD1, 0x64, 0x5F, 0x64, 0x5E, 0xA5, 0xDB, - 0xDA, 0x85, 0xCF, 0x83, 0x28, 0x44, 0xEE, 0x02, 0x00, 0xB9, 0xD8, 0x83, 0x15, 0x03, 0x36, 0x60, - 0x0A, 0x65, 0xE9, 0x81, 0xBD, 0xD1, 0x02, 0x05, 0xFC, 0x02, 0x17, 0x00, 0xA5, 0xD9, 0x15, 0x03, - 0xE9, 0x81, 0xBD, 0xD1, 0x02, 0x05, 0xFC, 0x02, 0x10, 0x00, 0xA5, 0xD3, 0xFF, 0xFF, 0x64, 0x5F, - 0xA5, 0xDB, 0xDA, 0x85, 0xEE, 0x02, 0x09, 0x00, 0x67, 0x43, 0x1A, 0x60, 0xB4, 0xFD, 0x1A, 0x60, - 0xBA, 0xFD, 0x1A, 0x60, 0xC4, 0xFD, 0x1A, 0x60, 0xCE, 0xFD, 0x2E, 0x45, 0x25, 0x60, 0x46, 0x64, - 0xD4, 0x80, 0xFF, 0xFF, 0x10, 0x03, 0x20, 0x40, 0x10, 0x27, 0x0D, 0x00, 0x33, 0x60, 0x1E, 0x61, - 0x19, 0x60, 0x8A, 0xF3, 0xA1, 0xDB, 0xFF, 0xB4, 0xCC, 0x84, 0xA8, 0x83, 0x33, 0x60, 0x14, 0x64, - 0x58, 0xD1, 0x59, 0xD9, 0xFD, 0x1F, 0x7D, 0xF3, 0x33, 0x60, 0x20, 0x63, 0x60, 0x40, 0x01, 0x27, - 0x03, 0x00, 0x19, 0x60, 0x3B, 0xF3, 0x02, 0x00, 0x19, 0x60, 0x3C, 0xF3, 0x08, 0x61, 0x60, 0xFE, - 0xA3, 0xD1, 0xFF, 0xFF, 0x20, 0xFE, 0x00, 0xA8, 0xE8, 0x84, 0x0F, 0x03, 0x60, 0xFE, 0x02, 0x28, - 0xF6, 0x01, 0x80, 0x62, 0xB2, 0x9C, 0xBD, 0xD9, 0x7B, 0xF9, 0xCD, 0x81, 0x00, 0x36, 0x01, 0x00, - 0xEE, 0x01, 0x36, 0x60, 0x0A, 0x63, 0x08, 0x61, 0xEA, 0x01, 0x2E, 0x58, 0xFF, 0xFF, 0x32, 0x60, - 0x76, 0x63, 0x65, 0x40, 0xFF, 0x36, 0x02, 0xA3, 0xA3, 0xD3, 0xFF, 0xFF, 0xE8, 0x84, 0xE8, 0x84, - 0xE8, 0x84, 0xE8, 0x84, 0x40, 0x26, 0x7F, 0xB4, 0x20, 0x26, 0x3F, 0xB4, 0x60, 0x45, 0x80, 0x63, - 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x7D, 0xFB, 0x40, 0x63, 0xFD, 0x60, - 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x7E, 0xFB, 0x20, 0x63, 0xFD, 0x60, 0x58, 0x4D, - 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x7F, 0xFB, 0x10, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, - 0xFF, 0xFF, 0x19, 0x60, 0x80, 0xFB, 0x08, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, - 0x19, 0x60, 0x81, 0xFB, 0x04, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, - 0x82, 0xFB, 0x02, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x83, 0xFB, - 0x01, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x34, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x84, 0xFB, 0x2E, 0x58, - 0xFF, 0xFF, 0x19, 0x60, 0x3B, 0xF3, 0xFF, 0xFF, 0x0F, 0xB4, 0x60, 0x45, 0x08, 0x63, 0xFD, 0x60, - 0x58, 0x4D, 0x5F, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x85, 0xFB, 0x04, 0x63, 0xFD, 0x60, 0x58, 0x4D, - 0x5F, 0x78, 0xFF, 0xFF, 0x19, 0x60, 0x86, 0xFB, 0x02, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x5F, 0x78, - 0xFF, 0xFF, 0x19, 0x60, 0x87, 0xFB, 0x01, 0x63, 0xFD, 0x60, 0x58, 0x4D, 0x5F, 0x78, 0xFF, 0xFF, - 0x19, 0x60, 0x88, 0xFB, 0x2E, 0x58, 0xFF, 0xFF, 0x63, 0x5C, 0xA7, 0x84, 0xEB, 0x83, 0x14, 0x02, - 0x01, 0x03, 0xFB, 0x01, 0x64, 0x44, 0x01, 0x36, 0x0B, 0x64, 0x02, 0x36, 0x0B, 0x64, 0x04, 0x36, - 0x0A, 0x64, 0x08, 0x36, 0x0A, 0x64, 0x10, 0x36, 0x09, 0x64, 0x20, 0x36, 0x09, 0x64, 0x40, 0x36, - 0x09, 0x64, 0x80, 0x36, 0x09, 0x64, 0x11, 0x00, 0x60, 0x40, 0x01, 0x36, 0x0B, 0x64, 0x02, 0x36, - 0x0F, 0x64, 0x04, 0x36, 0x0A, 0x64, 0x08, 0x36, 0x0E, 0x64, 0x10, 0x36, 0x09, 0x64, 0x20, 0x36, - 0x0D, 0x64, 0x40, 0x36, 0x08, 0x64, 0x80, 0x36, 0x0C, 0x64, 0x2D, 0x58, 0xFF, 0xFF, 0x63, 0x5C, - 0xA7, 0x84, 0xEB, 0x83, 0x0C, 0x02, 0x01, 0x03, 0xFB, 0x01, 0x64, 0x44, 0x01, 0x36, 0x0A, 0x64, - 0x02, 0x36, 0x14, 0x64, 0x04, 0x36, 0x37, 0x64, 0x08, 0x36, 0x6E, 0x64, 0x09, 0x00, 0x60, 0x40, - 0x01, 0x36, 0x0A, 0x64, 0x02, 0x36, 0x14, 0x64, 0x04, 0x36, 0x37, 0x64, 0x08, 0x36, 0x6E, 0x64, - 0x2D, 0x58, 0xFF, 0xFF, 0x60, 0xFE, 0x81, 0xA1, 0x7F, 0xA1, 0x02, 0x06, 0x00, 0xF4, 0x03, 0x61, - 0x5D, 0xD2, 0xCF, 0x83, 0xD4, 0x80, 0x25, 0x03, 0x16, 0x03, 0xCF, 0x83, 0x61, 0x44, 0x80, 0xA0, - 0x20, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x03, 0x61, 0x5D, 0xD2, 0xCF, 0x83, 0x81, 0xA1, 0x19, 0x03, - 0x05, 0x07, 0x7F, 0xA1, 0xCC, 0x84, 0xDD, 0x81, 0xE6, 0x03, 0xF7, 0x01, 0x00, 0xF4, 0x00, 0xB8, - 0x04, 0x61, 0xE6, 0x03, 0xF2, 0x01, 0x2C, 0x43, 0x5D, 0xD0, 0xDE, 0xD9, 0x64, 0x44, 0x5D, 0xD0, - 0xDE, 0xD9, 0xCC, 0x84, 0x81, 0xA1, 0x05, 0x03, 0x7F, 0xA1, 0xF9, 0x04, 0x00, 0xF4, 0x03, 0x61, - 0xF6, 0x01, 0x20, 0xFE, 0x2E, 0x58, 0xFF, 0xFF, 0x01, 0x3A, 0x02, 0x00, 0x16, 0x64, 0x2B, 0x00, - 0x02, 0x3A, 0x02, 0x00, 0x14, 0x64, 0x27, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x12, 0x64, 0x23, 0x00, - 0x08, 0x3A, 0x02, 0x00, 0x10, 0x64, 0x1F, 0x00, 0x10, 0x3A, 0x02, 0x00, 0x0E, 0x64, 0x1B, 0x00, - 0x20, 0x3A, 0x02, 0x00, 0x0C, 0x64, 0x17, 0x00, 0x40, 0x3A, 0x02, 0x00, 0x0A, 0x64, 0x13, 0x00, - 0x80, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x0F, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x06, 0x64, 0x0B, 0x00, - 0x02, 0x3B, 0x02, 0x00, 0x04, 0x64, 0x07, 0x00, 0x04, 0x3B, 0x02, 0x00, 0x02, 0x64, 0x03, 0x00, - 0x08, 0x3B, 0xFF, 0x01, 0x00, 0x64, 0x2E, 0x58, 0xFF, 0xFF, 0x27, 0xF2, 0xFF, 0xFF, 0x60, 0x40, - 0x36, 0x3A, 0x02, 0x00, 0x00, 0x61, 0x30, 0x00, 0x30, 0x3A, 0x02, 0x00, 0x02, 0x61, 0x2C, 0x00, - 0x24, 0x3A, 0x02, 0x00, 0x04, 0x61, 0x28, 0x00, 0x18, 0x3A, 0x02, 0x00, 0x06, 0x61, 0x24, 0x00, - 0x12, 0x3A, 0x02, 0x00, 0x08, 0x61, 0x20, 0x00, 0x0C, 0x3A, 0x02, 0x00, 0x0A, 0x61, 0x1C, 0x00, - 0x09, 0x3A, 0x02, 0x00, 0x0C, 0x61, 0x18, 0x00, 0x06, 0x3A, 0x02, 0x00, 0x0E, 0x61, 0x14, 0x00, - 0x6E, 0x3A, 0x02, 0x00, 0x10, 0x61, 0x10, 0x00, 0x37, 0x3A, 0x02, 0x00, 0x12, 0x61, 0x0C, 0x00, - 0x14, 0x3A, 0x02, 0x00, 0x14, 0x61, 0x08, 0x00, 0x0A, 0x3A, 0x02, 0x00, 0x16, 0x61, 0x04, 0x00, - 0x78, 0x43, 0x03, 0x61, 0x29, 0x60, 0xEA, 0x78, 0x65, 0x40, 0x01, 0x3A, 0x13, 0x00, 0x66, 0x45, - 0x2B, 0x46, 0x92, 0xFA, 0x65, 0x46, 0x26, 0xF2, 0xFF, 0xFF, 0x60, 0x41, 0x00, 0x7F, 0x60, 0x45, - 0x61, 0x47, 0x00, 0x7F, 0xD4, 0x84, 0x66, 0x41, 0x2B, 0x46, 0x0E, 0xF2, 0x60, 0x45, 0x65, 0x5E, - 0x0E, 0xFA, 0x61, 0x46, 0x2E, 0x58, 0xFF, 0xFF, 0xCD, 0x81, 0x7F, 0xB4, 0x02, 0x3A, 0x02, 0x00, - 0x01, 0x64, 0x32, 0x00, 0x04, 0x3A, 0x02, 0x00, 0x02, 0x64, 0x2E, 0x00, 0x0B, 0x3A, 0x02, 0x00, - 0x04, 0x64, 0x2A, 0x00, 0x16, 0x3A, 0x02, 0x00, 0x08, 0x64, 0x26, 0x00, 0x0C, 0x3A, 0x02, 0x00, - 0x10, 0x64, 0x22, 0x00, 0x12, 0x3A, 0x02, 0x00, 0x20, 0x64, 0x1E, 0x00, 0x18, 0x3A, 0x02, 0x00, - 0x40, 0x64, 0x1A, 0x00, 0x24, 0x3A, 0x02, 0x00, 0x80, 0x64, 0x16, 0x00, 0x30, 0x3A, 0x03, 0x00, - 0x00, 0x7E, 0x01, 0x7F, 0x11, 0x00, 0x48, 0x3A, 0x03, 0x00, 0x00, 0x7E, 0x02, 0x7F, 0x0C, 0x00, - 0x60, 0x3A, 0x03, 0x00, 0x00, 0x7E, 0x04, 0x7F, 0x07, 0x00, 0x6C, 0x3A, 0x03, 0x00, 0x00, 0x7E, - 0x08, 0x7F, 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x20, 0xFE, 0x2A, 0x45, 0x34, 0x8A, 0x60, 0xFE, - 0x61, 0x40, 0x00, 0x36, 0x02, 0x00, 0xBD, 0xD3, 0xBF, 0x01, 0x2E, 0x58, 0xFF, 0xFF, - -}; /* fw_image_4_data */ - -static const CFG_IDENTITY_STRCT fw_image_infoidentity[] = { - { - sizeof( CFG_IDENTITY_STRCT ) / sizeof(hcf_16) - 1, - CFG_FW_IDENTITY, - COMP_ID_FW_STA, - 4, //Variant - 1, //Major - 36 //Minor - }, - { 0000, 0000, 0000, 0000, 0000, 0000 } //endsentinel -}; - -static const CFG_PROG_STRCT fw_image_code[] = { - { - 8, - CFG_PROG, - CFG_PROG_VOLATILE, // mode - 0x0184, // 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 - 0x2c0e, // 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 - 0x54de, // sizeof(fw_image_3_data), - 0x001E3824, // 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 - 0xbcde, // 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 - 0000, - 0x000F429B, // Start execution address - }, - { 0000, 0000, 0000, 0000, 00000000, 0000, NULL} -}; - -static const CFG_RANGE20_STRCT fw_image_infocompat[] = { - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_FW_SUP_RANGE, - COMP_ROLE_SUPL, - COMP_ID_STA, - { - { 4, 1, 2 } //variant, bottom, top - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_MFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_MFI, - { - { 7, 3, 3 }, //variant, bottom, top - { 8, 1, 1 } //variant, bottom, top - } - }, - { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), - CFG_CFI_ACT_RANGES_STA, - COMP_ROLE_ACT, - COMP_ID_CFI, - { - { 4, 1, 2 } //variant, bottom, top - } - }, - { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } //endsentinel -}; - -memimage fw_image = { - "FUPU7D37dhfwci\001C", //signature, , C/Bin type - (CFG_PROG_STRCT *) fw_image_code, - 0x000F429B, - NULL, //(dummy) pdaplug - NULL, //(dummy) priplug - (CFG_RANGE20_STRCT *) fw_image_infocompat, - (CFG_IDENTITY_STRCT *) fw_image_infoidentity, -}; - diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c deleted file mode 100644 index efbbefa1abc4..000000000000 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ /dev/null @@ -1,441 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file contains processing and initialization specific to Card Services - * devices (PCMCIA, CF). - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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 (c) 2003 Agere Systems Inc. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include 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 - -/******************************************************************************* - * wl_adapter_attach() - ******************************************************************************* - * - * DESCRIPTION: - * - * Creates an instance of the driver, allocating local data structures for - * one device. The device is registered with Card Services. - * - * PARAMETERS: - * - * none - * - * RETURNS: - * - * pointer to an allocated dev_link_t structure - * NULL on failure - * - ******************************************************************************/ -static int wl_adapter_attach(struct pcmcia_device *link) -{ - struct net_device *dev; - struct wl_private *lp; - int ret; - - dev = wl_device_alloc(); - if (dev == NULL) { - DBG_ERROR(DbgInfo, "wl_device_alloc returned NULL\n"); - return -ENOMEM; - } - - link->resource[0]->end = HCF_NUM_IO_PORTS; - link->resource[0]->flags = IO_DATA_PATH_WIDTH_16; - link->config_flags |= CONF_ENABLE_IRQ; - link->config_index = 5; - link->config_regs = PRESENT_OPTION; - - link->priv = dev; - lp = wl_priv(dev); - lp->link = link; - - ret = wl_adapter_insert(link); - if (ret != 0) - wl_device_dealloc(dev); - - return ret; -} /* wl_adapter_attach */ -/*============================================================================*/ - - - -static void wl_adapter_detach(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - DBG_PARAM(DbgInfo, "link", "0x%p", link); - - wl_adapter_release(link); - - if (dev) { - unregister_netdev(dev); - wl_device_dealloc(dev); - } -} /* wl_adapter_detach */ -/*============================================================================*/ - - -void wl_adapter_release(struct pcmcia_device *link) -{ - DBG_PARAM(DbgInfo, "link", "0x%p", link); - - /* Stop hardware */ - wl_remove(link->priv); - - pcmcia_disable_device(link); -} /* wl_adapter_release */ -/*============================================================================*/ - -static int wl_adapter_suspend(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - /* if (link->open) { */ - netif_device_detach(dev); - wl_suspend(dev); - /* CHECK! pcmcia_release_configuration(link->handle); */ - /* } */ - - return 0; -} /* wl_adapter_suspend */ - -static int wl_adapter_resume(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - wl_resume(dev); - - netif_device_attach(dev); - - return 0; -} /* wl_adapter_resume */ - -int wl_adapter_insert(struct pcmcia_device *link) -{ - struct net_device *dev; - int ret; - - DBG_PARAM(DbgInfo, "link", "0x%p", link); - - dev = link->priv; - - /* Do we need to allocate an interrupt? */ - link->config_flags |= CONF_ENABLE_IRQ; - link->io_lines = 6; - - ret = pcmcia_request_io(link); - if (ret != 0) - goto failed; - - ret = pcmcia_request_irq(link, (void *) wl_isr); - if (ret != 0) - goto failed; - - ret = pcmcia_enable_device(link); - if (ret != 0) - goto failed; - - dev->irq = link->irq; - dev->base_addr = link->resource[0]->start; - - SET_NETDEV_DEV(dev, &link->dev); - ret = register_netdev(dev); - if (ret != 0) { - printk("%s: register_netdev() failed\n", KBUILD_MODNAME); - goto failed; - } - - printk(KERN_INFO "%s: Wireless, io_addr %#03lx, irq %d, mac_address" - " %pM\n", dev->name, dev->base_addr, dev->irq, dev->dev_addr); - - return 0; - -failed: - wl_adapter_release(link); - return ret; -} /* wl_adapter_insert */ -/*============================================================================*/ - - -/******************************************************************************* - * wl_adapter_open() - ******************************************************************************* - * - * DESCRIPTION: - * - * Open the device. - * - * PARAMETERS: - * - * dev - a pointer to a net_device structure representing the network - * device to open. - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wl_adapter_open(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - struct pcmcia_device *link = lp->link; - int result = 0; - int hcf_status = HCF_SUCCESS; - - DBG_PRINT("%s\n", VERSION_INFO); - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - if (!pcmcia_dev_present(link)) - return -ENODEV; - - link->open++; - - hcf_status = wl_open(dev); - - if (hcf_status != HCF_SUCCESS) { - link->open--; - result = -ENODEV; - } - - return result; -} /* wl_adapter_open */ -/*============================================================================*/ - - -/******************************************************************************* - * wl_adapter_close() - ******************************************************************************* - * - * DESCRIPTION: - * - * Close the device. - * - * PARAMETERS: - * - * dev - a pointer to a net_device structure representing the network - * device to close. - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wl_adapter_close(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - struct pcmcia_device *link = lp->link; - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - if (link == NULL) - return -ENODEV; - - DBG_TRACE(DbgInfo, "%s: Shutting down adapter.\n", dev->name); - wl_close(dev); - - link->open--; - - return 0; -} /* wl_adapter_close */ -/*============================================================================*/ - -static const struct pcmcia_device_id wl_adapter_ids[] = { -#if !((HCF_TYPE) & HCF_TYPE_HII5) - PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0003), - PCMCIA_DEVICE_PROD_ID12("Agere Systems", "Wireless PC Card Model 0110", - 0x33103a9b, 0xe175b0dd), -#else - PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0004), - PCMCIA_DEVICE_PROD_ID12("Linksys", - "WCF54G_Wireless-G_CompactFlash_Card", 0x0733cc81, - 0x98a599e1), -#endif /* (HCF_TYPE) & HCF_TYPE_HII5 */ - PCMCIA_DEVICE_NULL, -}; -MODULE_DEVICE_TABLE(pcmcia, wl_adapter_ids); - -static struct pcmcia_driver wlags49_driver = { - .owner = THIS_MODULE, - .name = DRIVER_NAME, - .probe = wl_adapter_attach, - .remove = wl_adapter_detach, - .id_table = wl_adapter_ids, - .suspend = wl_adapter_suspend, - .resume = wl_adapter_resume, -}; - - - -/******************************************************************************* - * wl_adapter_init_module() - ******************************************************************************* - * - * DESCRIPTION: - * - * Called by init_module() to perform PCMCIA driver initialization. - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * 0 on success - * -1 on error - * - ******************************************************************************/ -int wl_adapter_init_module(void) -{ - return pcmcia_register_driver(&wlags49_driver); -} /* wl_adapter_init_module */ -/*============================================================================*/ - - -/******************************************************************************* - * wl_adapter_cleanup_module() - ******************************************************************************* - * - * DESCRIPTION: - * - * Called by cleanup_module() to perform driver uninitialization. - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_adapter_cleanup_module(void) -{ - pcmcia_unregister_driver(&wlags49_driver); -} /* wl_adapter_cleanup_module */ -/*============================================================================*/ - - -/******************************************************************************* - * wl_adapter_is_open() - ******************************************************************************* - * - * DESCRIPTION: - * - * Check with Card Services to determine if this device is open. - * - * PARAMETERS: - * - * dev - a pointer to the net_device structure whose open status will be - * checked - * - * RETURNS: - * - * nonzero if device is open - * 0 otherwise - * - ******************************************************************************/ -int wl_adapter_is_open(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - struct pcmcia_device *link = lp->link; - - if (!pcmcia_dev_present(link)) - return 0; - - return link->open; -} /* wl_adapter_is_open */ -/*============================================================================*/ diff --git a/drivers/staging/wlags49_h2/wl_cs.h b/drivers/staging/wlags49_h2/wl_cs.h deleted file mode 100644 index 9a597a9f145f..000000000000 --- a/drivers/staging/wlags49_h2/wl_cs.h +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required for the driver to support PCMCIA. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_CS_H__ -#define __WL_CS_H__ - - - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ - -int wl_adapter_insert(struct pcmcia_device *link); - -void wl_adapter_release(struct pcmcia_device *link); - -int wl_adapter_init_module( void ); - -void wl_adapter_cleanup_module( void ); - -int wl_adapter_open(struct net_device *dev); - -int wl_adapter_close(struct net_device *dev); - -int wl_adapter_is_open(struct net_device *dev); - -const char *DbgEvent( int mask ); - - - -#endif /* __WL_CS_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_enc.c b/drivers/staging/wlags49_h2/wl_enc.c deleted file mode 100644 index 389c23bdc28f..000000000000 --- a/drivers/staging/wlags49_h2/wl_enc.c +++ /dev/null @@ -1,217 +0,0 @@ - -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file defines functions related to WEP key coding/decoding. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include files - ******************************************************************************/ -#include -#include - -#include -#include - -#include - -/******************************************************************************* - * wl_wep_code() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function encodes a set of wep keys for privacy - * - * PARAMETERS: - * - * szCrypt - - * szDest - - * Data - - * nLen - - * - * RETURNS: - * - * OK - * - ******************************************************************************/ -int wl_wep_code(char *szCrypt, char *szDest, void *Data, int nLen) -{ - int i; - int t; - int k ; - char bits; - char *szData = (char *) Data; - /*------------------------------------------------------------------------*/ - - - for (i = bits = 0; i < MACADDRESS_STR_LEN; i++) { - bits ^= szCrypt[i]; - bits += szCrypt[i]; - } - - for (i = t = *szDest = 0; i < nLen; i++, t++) { - k = szData[i] ^ (bits + i); - - - switch (i % 3) { - - case 0: - - szDest[t] = ((k & 0xFC) >> 2) + CH_START ; - szDest[t+1] = ((k & 0x03) << 4) + CH_START ; - szDest[t+2] = '\0'; - - break; - - - case 1: - - szDest[t] += ((k & 0xF0) >> 4); - szDest[t+1] = ((k & 0x0F) << 2) + CH_START ; - szDest[t+2] = '\0'; - - break; - - - case 2: - - szDest[t] += ((k & 0xC0) >> 6); - szDest[t+1] = (k & 0x3F) + CH_START ; - szDest[t+2] = '\0'; - t++; - - break; - } - } - - return strlen(szDest); - -} -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wep_decode() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function decodes a set of WEP keys for use by the card. - * - * PARAMETERS: - * - * szCrypt - - * szDest - - * Data - - * - * RETURNS: - * - * OK - * - ******************************************************************************/ -int wl_wep_decode(char *szCrypt, void *Dest, char *szData) -{ - int i; - int t; - int nLen; - char bits; - char *szDest = Dest; - /*------------------------------------------------------------------------*/ - - - for (i = bits = 0; i < 12; i++) { - bits ^= szCrypt[i] ; - bits += szCrypt[i] ; - } - - nLen = (strlen(szData) * 3) / 4 ; - - for (i = t = 0; i < nLen; i++, t++) { - switch (i % 3) { - case 0: - - szDest[i] = (((szData[t] - CH_START) & 0x3f) << 2) + - (((szData[t+1] - CH_START) & 0x30) >> 4); - break; - - - case 1: - szDest[i] = (((szData[t] - CH_START) & 0x0f) << 4) + - (((szData[t+1] - CH_START) & 0x3c) >> 2); - break; - - - case 2: - szDest[i] = (((szData[t] - CH_START) & 0x03) << 6) + - ((szData[t+1] - CH_START) & 0x3f); - t++; - break; - } - - szDest[i] ^= (bits + i); - - } - - return i; - -} -/*============================================================================*/ - diff --git a/drivers/staging/wlags49_h2/wl_enc.h b/drivers/staging/wlags49_h2/wl_enc.h deleted file mode 100644 index 03a52fbd3c09..000000000000 --- a/drivers/staging/wlags49_h2/wl_enc.h +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header for performing coding/decoding of the WEP keys. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WAVELAN2_ENCRYPTION_H__ -#define __WAVELAN2_ENCRYPTION_H__ - - - - -/******************************************************************************* - * constant definitions - ******************************************************************************/ -#define CRYPT_CODE "57617665A5D6" -#define ENCRYPTION_LEN 102 -#define ENCRYPTION_MAGIC 0x48576877L /* HWhw */ -#define DEF_CRYPT_STR "G?TIUEA]d5MAdZV'eUb&&6.)'&:,'VF/(FR2)6^5*'*8*W6;+GB>,7NA-'ZD-X&G.H2J/8>M0(JP0XVS1HbV29.Y3):\\3YF_4IRb56" - -#define DEFAULT_CRYPT_MAC "W\x01\x6B\x66\xA5\x5A" -#define CH_START '&' -#define MACADDRESS_STR_LEN 12 - -#define KEY_LEN 14 -#define NUM_KEYS 4 - -#define KEY_LENGTH_NONE_ASCII 0 -#define KEY_LENGTH_64_BIT_ASCII 5 -#define KEY_LENGTH_128_BIT_ASCII 13 - -#define KEY_LENGTH_NONE_HEX ( KEY_LENGTH_NONE_ASCII * sizeof( unsigned short )) -#define KEY_LENGTH_64_BIT_HEX ( KEY_LENGTH_64_BIT_ASCII * sizeof( unsigned short )) -#define KEY_LENGTH_128_BIT_HEX ( KEY_LENGTH_128_BIT_ASCII * sizeof( unsigned short )) - - - - -/******************************************************************************* - * type definitions - ******************************************************************************/ -typedef struct _encstct -{ - hcf_32 dwMagic; - hcf_16 wTxKeyID; - hcf_16 wEnabled; - CFG_DEFAULT_KEYS_STRCT EncStr; -} -ENCSTRCT, *PENCSTRCT; - - - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -int wl_wep_code( char *szCrypt, char *szDest, void *Data, int nLen ); - -int wl_wep_decode( char *szCrypt, void *Dest, char *szData ); - - - - -#endif /* __WAVELAN2_ENCRYPTION_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_if.h b/drivers/staging/wlags49_h2/wl_if.h deleted file mode 100644 index 425d3733b362..000000000000 --- a/drivers/staging/wlags49_h2/wl_if.h +++ /dev/null @@ -1,221 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Driver common header for info needed by driver source and user-space - * processes communicating with the driver. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WAVELAN2_IF_H__ -#define __WAVELAN2_IF_H__ - - - - -/******************************************************************************* - * constant definitions - ******************************************************************************/ -#define MAX_LTV_BUF_SIZE (512 - (sizeof(hcf_16) * 2)) - -#define HCF_TALLIES_SIZE (sizeof(CFG_HERMES_TALLIES_STRCT) + \ - (sizeof(hcf_16) * 2)) - -#define HCF_MAX_MULTICAST 16 -#define HCF_MAX_NAME_LEN 32 -#define MAX_LINE_SIZE 256 -#define HCF_NUM_IO_PORTS 0x80 -#define TX_TIMEOUT ((800 * HZ) / 1000) - - -/* PE1DNN - * Better data from the real world. Not scientific but empirical data gathered - * from a Thomson Speedtouch 110 which is identified as: - * PCMCIA Info: "Agere Systems" "Wireless PC Card Model 0110" - * Manufacture ID: 0156,0003 - * Lowest measurment for noise floor seen is value 54 - * Highest signal strength in close proximity to the AP seen is value 118 - * Very good must be around 100 (otherwise its never "full scale" - * All other constants are derrived from these. This makes the signal gauge - * work for me... - */ -#define HCF_MIN_SIGNAL_LEVEL 54 -#define HCF_MAX_SIGNAL_LEVEL 100 -#define HCF_MIN_NOISE_LEVEL HCF_MIN_SIGNAL_LEVEL -#define HCF_MAX_NOISE_LEVEL HCF_MAX_SIGNAL_LEVEL -#define HCF_0DBM_OFFSET (HCF_MAX_SIGNAL_LEVEL + 1) -#define HCF_MIN_COMM_QUALITY 0 -#define HCF_MAX_COMM_QUALITY (HCF_MAX_SIGNAL_LEVEL - \ - HCF_MIN_NOISE_LEVEL + 1) - - -/* For encryption (WEP) */ -#define MIN_KEY_SIZE 5 /* 40 bits RC4 - WEP */ -#define MAX_KEY_SIZE 13 /* 104 bits */ -#define MAX_KEYS 4 - -#define RADIO_CHANNELS 14 -#define RADIO_SENSITIVITY_LEVELS 3 -#define RADIO_TX_POWER_MWATT 32 -#define RADIO_TX_POWER_DBM 15 - -#define MIN_RTS_BYTES 0 -#define MAX_RTS_BYTES 2347 - -#define MAX_RATES 8 -#define MEGABIT (1024 * 1024) - -#define HCF_FAILURE 0xFF -#define UIL_FAILURE 0xFF -#define CFG_UIL_CONNECT 0xA123 /* Define differently? */ -#define CFG_UIL_CONNECT_ACK_CODE 0x5653435A /* VSCZ */ -#define WVLAN2_UIL_CONNECTED (0x01L << 0) -#define WVLAN2_UIL_BUSY (0x01L << 1) - - - - -/******************************************************************************* - * driver ioctl interface - ******************************************************************************/ -#define WVLAN2_IOCTL_UIL SIOCDEVPRIVATE - -/* The UIL Interface used in conjunction with the WVLAN2_IOCTL_UIL code above - is defined in mdd.h. A quick reference of the UIL codes is listed below */ -/* -UIL_FUN_CONNECT -UIL_FUN_DISCONNECT -UIL_FUN_ACTION - UIL_ACT_BLOCK - UIL_ACT_UNBLOCK - UIL_ACT_SCA - UIL_ACT_DIAG - UIL_ACT_APPLY -UIL_FUN_SEND_DIAG_MSG -UIL_FUN_GET_INFO -UIL_FUN_PUT_INFO -*/ - -#define SIOCSIWNETNAME (SIOCDEVPRIVATE + 1) -#define SIOCGIWNETNAME (SIOCDEVPRIVATE + 2) -#define SIOCSIWSTANAME (SIOCDEVPRIVATE + 3) -#define SIOCGIWSTANAME (SIOCDEVPRIVATE + 4) -#define SIOCSIWPORTTYPE (SIOCDEVPRIVATE + 5) -#define SIOCGIWPORTTYPE (SIOCDEVPRIVATE + 6) - -/* IOCTL code for the RTS interface */ -#define WL_IOCTL_RTS (SIOCDEVPRIVATE + 7) - -/* IOCTL subcodes for WL_IOCTL_RTS */ -#define WL_IOCTL_RTS_READ 1 -#define WL_IOCTL_RTS_WRITE 2 -#define WL_IOCTL_RTS_BATCH_READ 3 -#define WL_IOCTL_RTS_BATCH_WRITE 4 - - -/******************************************************************************* - * STRUCTURE DEFINITIONS - ******************************************************************************/ -typedef struct { - __u16 length; - __u8 name[HCF_MAX_NAME_LEN]; -} -wvName_t; - - -typedef struct { - hcf_16 len; - hcf_16 typ; - union { - hcf_8 u8[MAX_LTV_BUF_SIZE / sizeof(hcf_8)]; - hcf_16 u16[MAX_LTV_BUF_SIZE / sizeof(hcf_16)]; - hcf_32 u32[MAX_LTV_BUF_SIZE / sizeof(hcf_32)]; - } u; -} -ltv_t; - - -struct uilreq { - union { - char ifrn_name[IFNAMSIZ]; - } ifr_ifrn; - - IFBP hcfCtx; - __u8 command; - __u8 result; - - /* The data field in this structure is typically an LTV of some type. - The len field is the size of the buffer in bytes, as opposed to words - (like the L-field in the LTV */ - __u16 len; - void *data; -}; - - -struct rtsreq { - union { - char ifrn_name[IFNAMSIZ]; - } - ifr_ifrn; - - __u16 typ; - __u16 reg; - __u16 len; - __u16 *data; -}; - - -#endif /* __WAVELAN2_IF_H__ */ - diff --git a/drivers/staging/wlags49_h2/wl_internal.h b/drivers/staging/wlags49_h2/wl_internal.h deleted file mode 100644 index 1ecb5cb44bd5..000000000000 --- a/drivers/staging/wlags49_h2/wl_internal.h +++ /dev/null @@ -1,1040 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header for definitions and macros internal to the drvier. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WAVELAN2_H__ -#define __WAVELAN2_H__ - - - - -/******************************************************************************* - * include files - ******************************************************************************/ -#ifdef BUS_PCMCIA -#include -#include -#include -#include -#endif // BUS_PCMCIA - -#include -#include - -#include - -#include - - - - -/******************************************************************************* - * constant definitions - ******************************************************************************/ -#define p_u8 __u8 -#define p_s8 __s8 -#define p_u16 __u16 -#define p_s16 __s16 -#define p_u32 __u32 -#define p_s32 __s32 -#define p_char char - -#define MAX_KEY_LEN (2 + (13 * 2)) // 0x plus 13 hex digit pairs -#define MB_SIZE 1024 -#define MAX_ENC_LEN 104 - -#define MAX_SCAN_TIME_SEC 8 -#define MAX_NAPS 32 - -#define CFG_MB_INFO 0x0820 //Mail Box Info Block - -#define NUM_WDS_PORTS 6 - -#define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */ - - -/* Min/Max/Default Parameter Values */ -#if 0 //;? (HCF_TYPE) & HCF_TYPE_AP -//;? why this difference depending on compile option, seems to me it should depend on runtime if anything -#define PARM_DEFAULT_SSID "LinuxAP" -#else -#define PARM_DEFAULT_SSID "ANY" -#endif // HCF_TYPE_AP - -#define PARM_MIN_NAME_LEN 1 -#define PARM_MAX_NAME_LEN 32 - - -/* The following definitions pertain to module and profile parameters */ -// #define PARM_AP_MODE APMode -// #define PARM_NAME_AP_MODE TEXT("APMode") -// #define PARM_DEFAULT_AP_MODE FALSE - -#define PARM_AUTHENTICATION Authentication -#define PARM_NAME_AUTHENTICATION TEXT("Authentication") -#define PARM_MIN_AUTHENTICATION 1 -#define PARM_MAX_AUTHENTICATION 2 -#define PARM_DEFAULT_AUTHENTICATION 1 - -#define PARM_AUTH_KEY_MGMT_SUITE AuthKeyMgmtSuite -#define PARM_NAME_AUTH_KEY_MGMT_SUITE TEXT("AuthKeyMgmtSuite") -#define PARM_MIN_AUTH_KEY_MGMT_SUITE 0 -#define PARM_MAX_AUTH_KEY_MGMT_SUITE 4 -#define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE 0 - -#define PARM_BRSC_2GHZ BRSC2GHz -#define PARM_NAME_BRSC_2GHZ TEXT("BRSC2GHz") -#define PARM_MIN_BRSC 0x0000 -#define PARM_MAX_BRSC 0x0FFF -#define PARM_DEFAULT_BRSC_2GHZ 0x000F - -#define PARM_BRSC_5GHZ BRSC5GHz -#define PARM_NAME_BRSC_5GHZ TEXT("BRSC5GHz") -#define PARM_DEFAULT_BRSC_5GHZ 0x0150 - -#define PARM_COEXISTENCE Coexistence -#define PARM_NAME_COEXISTENCE TEXT("Coexistence") -#define PARM_MIN_COEXISTENCE 0x0000 -#define PARM_MAX_COEXISTENCE 0x0007 -#define PARM_DEFAULT_COEXISTENCE 0x0000 - -#define PARM_CONFIGURED Configured -#define PARM_NAME_CONFIGURED TEXT("Configured") - -#define PARM_CONNECTION_CONTROL ConnectionControl -#define PARM_NAME_CONNECTION_CONTROL TEXT("ConnectionControl") -#define PARM_MIN_CONNECTION_CONTROL 0 -#define PARM_MAX_CONNECTION_CONTROL 3 -#define PARM_DEFAULT_CONNECTION_CONTROL 2 - -#define PARM_CREATE_IBSS CreateIBSS -#define PARM_NAME_CREATE_IBSS TEXT("CreateIBSS") -#define PARM_DEFAULT_CREATE_IBSS FALSE -#define PARM_DEFAULT_CREATE_IBSS_STR "N" - -#define PARM_DEBUG_FLAG DebugFlag -#define PARM_NAME_DEBUG_FLAG TEXT("DebugFlag") -#define PARM_MIN_DEBUG_FLAG 0 -#define PARM_MAX_DEBUG_FLAG 0xFFFF -#define PARM_DEFAULT_DEBUG_FLAG 0xFFFF - -#define PARM_DESIRED_SSID DesiredSSID -#define PARM_NAME_DESIRED_SSID TEXT("DesiredSSID") - -#define PARM_DOWNLOAD_FIRMWARE DownloadFirmware -#define PARM_NAME_DOWNLOAD_FIRMWARE TEXT("DownloadFirmware") - -#define PARM_DRIVER_ENABLE DriverEnable -#define PARM_NAME_DRIVER_ENABLE TEXT("DriverEnable") -#define PARM_DEFAULT_DRIVER_ENABLE TRUE - -#define PARM_ENABLE_ENCRYPTION EnableEncryption -#define PARM_NAME_ENABLE_ENCRYPTION TEXT("EnableEncryption") -#define PARM_MIN_ENABLE_ENCRYPTION 0 -#define PARM_MAX_ENABLE_ENCRYPTION 7 -#define PARM_DEFAULT_ENABLE_ENCRYPTION 0 - -#define PARM_ENCRYPTION Encryption -#define PARM_NAME_ENCRYPTION TEXT("Encryption") - -#define PARM_EXCLUDE_UNENCRYPTED ExcludeUnencrypted -#define PARM_NAME_EXCLUDE_UNENCRYPTED TEXT("ExcludeUnencrypted") -#define PARM_DEFAULT_EXCLUDE_UNENCRYPTED TRUE -#define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR "N" - -#define PARM_INTRA_BSS_RELAY IntraBSSRelay -#define PARM_NAME_INTRA_BSS_RELAY TEXT("IntraBSSRelay") -#define PARM_DEFAULT_INTRA_BSS_RELAY TRUE -#define PARM_DEFAULT_INTRA_BSS_RELAY_STR "Y" - -#define PARM_KEY1 Key1 -#define PARM_NAME_KEY1 TEXT("Key1") -#define PARM_KEY2 Key2 -#define PARM_NAME_KEY2 TEXT("Key2") -#define PARM_KEY3 Key3 -#define PARM_NAME_KEY3 TEXT("Key3") -#define PARM_KEY4 Key4 -#define PARM_NAME_KEY4 TEXT("Key4") - -//;? #define PARM_KEY_FORMAT AsciiHex -//;? #define PARM_NAME_KEY_FORMAT TEXT("AsciiHex") - -#define PARM_LOAD_BALANCING LoadBalancing -#define PARM_NAME_LOAD_BALANCING TEXT("LoadBalancing") -#define PARM_DEFAULT_LOAD_BALANCING TRUE -#define PARM_DEFAULT_LOAD_BALANCING_STR "Y" - -#define PARM_MAX_DATA_LENGTH MaxDataLength -#define PARM_NAME_MAX_DATA_LENGTH TEXT("MaxDataLength") - -#define PARM_MAX_SLEEP MaxSleepDuration -#define PARM_NAME_MAX_SLEEP TEXT("MaxSleepDuration") -#define PARM_MIN_MAX_PM_SLEEP 1 //;?names nearly right? -#define PARM_MAX_MAX_PM_SLEEP 65535 -#define PARM_DEFAULT_MAX_PM_SLEEP 100 - -#define PARM_MEDIUM_DISTRIBUTION MediumDistribution -#define PARM_NAME_MEDIUM_DISTRIBUTION TEXT("MediumDistribution") -#define PARM_DEFAULT_MEDIUM_DISTRIBUTION TRUE -#define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR "Y" - -#define PARM_MICROWAVE_ROBUSTNESS MicroWaveRobustness -#define PARM_NAME_MICROWAVE_ROBUSTNESS TEXT("MicroWaveRobustness") -#define PARM_DEFAULT_MICROWAVE_ROBUSTNESS FALSE -#define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR "N" - -#define PARM_MULTICAST_PM_BUFFERING MulticastPMBuffering -#define PARM_NAME_MULTICAST_PM_BUFFERING TEXT("MulticastPMBuffering") -#define PARM_DEFAULT_MULTICAST_PM_BUFFERING TRUE -#define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y" - -#define PARM_MULTICAST_RATE MulticastRate -#define PARM_NAME_MULTICAST_RATE TEXT("MulticastRate") -#ifdef WARP -#define PARM_MIN_MULTICAST_RATE 0x0001 -#define PARM_MAX_MULTICAST_RATE 0x0fff -#define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0004 -#define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0010 -#else -#define PARM_MIN_MULTICAST_RATE 0x0001 -#define PARM_MAX_MULTICAST_RATE 0x0004 -#define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0002 -#define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0000 -#endif // WARP - -#define PARM_MULTICAST_RX MulticastReceive -#define PARM_NAME_MULTICAST_RX TEXT("MulticastReceive") -#define PARM_DEFAULT_MULTICAST_RX TRUE -#define PARM_DEFAULT_MULTICAST_RX_STR "Y" - -#define PARM_NETWORK_ADDR NetworkAddress -#define PARM_NAME_NETWORK_ADDR TEXT("NetworkAddress") -#define PARM_DEFAULT_NETWORK_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } - -#define PARM_NETWORK_TYPE NetworkType -#define PARM_NAME_NETWORK_TYPE TEXT("NetworkType") -#define PARM_DEFAULT_NETWORK_TYPE 0 - -#define PARM_OWN_ATIM_WINDOW OwnATIMWindow -#define PARM_NAME_OWN_ATIM_WINDOW TEXT("OwnATIMWindow") -#define PARM_MIN_OWN_ATIM_WINDOW 0 -#define PARM_MAX_OWN_ATIM_WINDOW 100 -#define PARM_DEFAULT_OWN_ATIM_WINDOW 0 - -#define PARM_OWN_BEACON_INTERVAL OwnBeaconInterval -#define PARM_NAME_OWN_BEACON_INTERVAL TEXT("OwnBeaconInterval") -#define PARM_MIN_OWN_BEACON_INTERVAL 20 -#define PARM_MAX_OWN_BEACON_INTERVAL 200 -#define PARM_DEFAULT_OWN_BEACON_INTERVAL 100 - -#define PARM_OWN_CHANNEL OwnChannel -#define PARM_NAME_OWN_CHANNEL TEXT("OwnChannel") -#define PARM_MIN_OWN_CHANNEL 1 -#define PARM_MAX_OWN_CHANNEL 161 -#define PARM_DEFAULT_OWN_CHANNEL 10 - -#define PARM_OWN_DTIM_PERIOD OwnDTIMPeriod -#define PARM_NAME_OWN_DTIM_PERIOD TEXT("OwnDTIMPeriod") -#define PARM_MIN_OWN_DTIM_PERIOD 1 -#define PARM_MAX_OWN_DTIM_PERIOD 65535 -#define PARM_DEFAULT_OWN_DTIM_PERIOD 1 - -#define PARM_OWN_NAME OwnName -#define PARM_NAME_OWN_NAME TEXT("OwnName") -#define PARM_DEFAULT_OWN_NAME "Linux" - -#define PARM_OWN_SSID OwnSSID -#define PARM_NAME_OWN_SSID TEXT("OwnSSID") - -#define PARM_PM_ENABLED PMEnabled -#define PARM_NAME_PM_ENABLED TEXT("PMEnabled") -#define PARM_MAX_PM_ENABLED 3 - -#define PARM_PMEPS PMEPS -#define PARM_NAME_PMEPS TEXT("PMEPS") - -#define PARM_PM_HOLDOVER_DURATION PMHoldoverDuration -#define PARM_NAME_PM_HOLDOVER_DURATION TEXT("PMHoldoverDuration") -#define PARM_MIN_PM_HOLDOVER_DURATION 1 -#define PARM_MAX_PM_HOLDOVER_DURATION 1000 -#define PARM_DEFAULT_PM_HOLDOVER_DURATION 100 - -#define PARM_PM_MODE PowerMode -#define PARM_NAME_PM_MODE TEXT("PowerMode") - -#define PARM_PORT_TYPE PortType -#define PARM_NAME_PORT_TYPE TEXT("PortType") -#define PARM_MIN_PORT_TYPE 1 -#define PARM_MAX_PORT_TYPE 3 -#define PARM_DEFAULT_PORT_TYPE 1 - -#define PARM_PROMISCUOUS_MODE PromiscuousMode -#define PARM_NAME_PROMISCUOUS_MODE TEXT("PromiscuousMode") -#define PARM_DEFAULT_PROMISCUOUS_MODE FALSE -#define PARM_DEFAULT_PROMISCUOUS_MODE_STR "N" - -#define PARM_REJECT_ANY RejectANY -#define PARM_NAME_REJECT_ANY TEXT("RejectANY") -#define PARM_DEFAULT_REJECT_ANY FALSE -#define PARM_DEFAULT_REJECT_ANY_STR "N" - -#define PARM_RTS_THRESHOLD RTSThreshold -#define PARM_NAME_RTS_THRESHOLD TEXT("RTSThreshold") -#define PARM_MIN_RTS_THRESHOLD 0 -#define PARM_MAX_RTS_THRESHOLD 2347 -#define PARM_DEFAULT_RTS_THRESHOLD 2347 - -#define PARM_RTS_THRESHOLD1 RTSThreshold1 -#define PARM_NAME_RTS_THRESHOLD1 TEXT("RTSThreshold1") -#define PARM_RTS_THRESHOLD2 RTSThreshold2 -#define PARM_NAME_RTS_THRESHOLD2 TEXT("RTSThreshold2") -#define PARM_RTS_THRESHOLD3 RTSThreshold3 -#define PARM_NAME_RTS_THRESHOLD3 TEXT("RTSThreshold3") -#define PARM_RTS_THRESHOLD4 RTSThreshold4 -#define PARM_NAME_RTS_THRESHOLD4 TEXT("RTSThreshold4") -#define PARM_RTS_THRESHOLD5 RTSThreshold5 -#define PARM_NAME_RTS_THRESHOLD5 TEXT("RTSThreshold5") -#define PARM_RTS_THRESHOLD6 RTSThreshold6 -#define PARM_NAME_RTS_THRESHOLD6 TEXT("RTSThreshold6") - -#define PARM_SRSC_2GHZ SRSC2GHz -#define PARM_NAME_SRSC_2GHZ TEXT("SRSC2GHz") -#define PARM_MIN_SRSC 0x0000 -#define PARM_MAX_SRSC 0x0FFF -#define PARM_DEFAULT_SRSC_2GHZ 0x0FFF - -#define PARM_SRSC_5GHZ SRSC5GHz -#define PARM_NAME_SRSC_5GHZ TEXT("SRSC5GHz") -#define PARM_DEFAULT_SRSC_5GHZ 0x0FF0 - -#define PARM_SYSTEM_SCALE SystemScale -#define PARM_NAME_SYSTEM_SCALE TEXT("SystemScale") -#define PARM_MIN_SYSTEM_SCALE 1 -#define PARM_MAX_SYSTEM_SCALE 5 -#define PARM_DEFAULT_SYSTEM_SCALE 1 - -#define PARM_TX_KEY TxKey -#define PARM_NAME_TX_KEY TEXT("TxKey") -#define PARM_MIN_TX_KEY 1 -#define PARM_MAX_TX_KEY 4 -#define PARM_DEFAULT_TX_KEY 1 - -#define PARM_TX_POW_LEVEL TxPowLevel -#define PARM_NAME_TX_POW_LEVEL TEXT("TxPowLevel") -#define PARM_MIN_TX_POW_LEVEL 1 // 20 dBm -#define PARM_MAX_TX_POW_LEVEL 6 // 8 dBm -#define PARM_DEFAULT_TX_POW_LEVEL 3 // 15 dBm - -#define PARM_TX_RATE TxRateControl -#define PARM_NAME_TX_RATE TEXT("TxRateControl") -#define PARM_MIN_TX_RATE 0x0001 -#ifdef WARP -#define PARM_MAX_TX_RATE 0x0FFF -#define PARM_DEFAULT_TX_RATE_2GHZ 0x0FFF -#define PARM_DEFAULT_TX_RATE_5GHZ 0x0FF0 -#else -#define PARM_MAX_TX_RATE 0x0007 -#define PARM_DEFAULT_TX_RATE_2GHZ 0x0003 -#define PARM_DEFAULT_TX_RATE_5GHZ 0x0000 -#endif // WARP - -#define PARM_TX_RATE1 TxRateControl1 -#define PARM_NAME_TX_RATE1 TEXT("TxRateControl1") -#define PARM_TX_RATE2 TxRateControl2 -#define PARM_NAME_TX_RATE2 TEXT("TxRateControl2") -#define PARM_TX_RATE3 TxRateControl3 -#define PARM_NAME_TX_RATE3 TEXT("TxRateControl3") -#define PARM_TX_RATE4 TxRateControl4 -#define PARM_NAME_TX_RATE4 TEXT("TxRateControl4") -#define PARM_TX_RATE5 TxRateControl5 -#define PARM_NAME_TX_RATE5 TEXT("TxRateControl5") -#define PARM_TX_RATE6 TxRateControl6 -#define PARM_NAME_TX_RATE6 TEXT("TxRateControl6") - -#define PARM_VENDORDESCRIPTION VendorDescription -#define PARM_NAME_VENDORDESCRIPTION TEXT("VendorDescription") - -#define PARM_WDS_ADDRESS WDSAddress -#define PARM_NAME_WDS_ADDRESS TEXT("WDSAddress") - -#define PARM_WDS_ADDRESS1 WDSAddress1 -#define PARM_NAME_WDS_ADDRESS1 TEXT("WDSAddress1") -#define PARM_WDS_ADDRESS2 WDSAddress2 -#define PARM_NAME_WDS_ADDRESS2 TEXT("WDSAddress2") -#define PARM_WDS_ADDRESS3 WDSAddress3 -#define PARM_NAME_WDS_ADDRESS3 TEXT("WDSAddress3") -#define PARM_WDS_ADDRESS4 WDSAddress4 -#define PARM_NAME_WDS_ADDRESS4 TEXT("WDSAddress4") -#define PARM_WDS_ADDRESS5 WDSAddress5 -#define PARM_NAME_WDS_ADDRESS5 TEXT("WDSAddress5") -#define PARM_WDS_ADDRESS6 WDSAddress6 -#define PARM_NAME_WDS_ADDRESS6 TEXT("WDSAddress6") - -/* -#define PARM_LONG_RETRY_LIMIT LongRetryLimit -#define PARM_NAME_LONG_RETRY_LIMIT TEXT("LongRetryLimit") -#define PARM_MIN_LONG_RETRY_LIMIT 1 -#define PARM_MAX_LONG_RETRY_LIMIT 15 -#define PARM_DEFAULT_LONG_RETRY_LIMIT 3 - - -#define PARM_PROBE_DATA_RATES ProbeDataRates -#define PARM_NAME_PROBE_DATA_RATES TEXT("ProbeDataRates") -#define PARM_MIN_PROBE_DATA_RATES 0x0000 -#define PARM_MAX_PROBE_DATA_RATES 0x0FFF -#define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ 0x0002 -#define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ 0x0010 - -#define PARM_SHORT_RETRY_LIMIT ShortRetryLimit -#define PARM_NAME_SHORT_RETRY_LIMIT TEXT("ShortRetryLimit") -#define PARM_MIN_SHORT_RETRY_LIMIT 1 -#define PARM_MAX_SHORT_RETRY_LIMIT 15 -#define PARM_DEFAULT_SHORT_RETRY_LIMIT 7 - - -*/ - -/******************************************************************************* - * state definitions - ******************************************************************************/ -/* The following constants are used to track state the device */ -#define WL_FRIMWARE_PRESENT 1 // Download if needed -#define WL_FRIMWARE_NOT_PRESENT 0 // Skip over download, assume its already there -#define WL_HANDLING_INT 1 // Actually call the HCF to switch interrupts on/off -#define WL_NOT_HANDLING_INT 0 // Not yet handling interrupts, do not switch on/off - -/******************************************************************************* - * macro definitions - ******************************************************************************/ -/* The following macro ensures that no symbols are exported, minimizing the - chance of a symbol collision in the kernel */ -// EXPORT_NO_SYMBOLS; - -#define NELEM(arr) (sizeof(arr) / sizeof(arr[0])) - -#define WVLAN_VALID_MAC_ADDRESS( x ) \ -((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF)) - - - - -/******************************************************************************* - * type definitions - ******************************************************************************/ -#undef FALSE -#undef TRUE - -typedef enum -{ - FALSE = 0, - TRUE = 1 -} -bool_t; - - -typedef struct _ScanResult -{ - //hcf_16 len; - //hcf_16 typ; - int scan_complete; - int num_aps; - SCAN_RS_STRCT APTable [MAX_NAPS]; -} -ScanResult; - - -typedef struct _LINK_STATUS_STRCT -{ - hcf_16 len; - hcf_16 typ; - hcf_16 linkStatus; /* 1..5 */ -} -LINK_STATUS_STRCT; - - -typedef struct _ASSOC_STATUS_STRCT -{ - hcf_16 len; - hcf_16 typ; - hcf_16 assocStatus; /* 1..3 */ - hcf_8 staAddr[ETH_ALEN]; - hcf_8 oldApAddr[ETH_ALEN]; -} -ASSOC_STATUS_STRCT; - - -typedef struct _SECURITY_STATUS_STRCT -{ - hcf_16 len; - hcf_16 typ; - hcf_16 securityStatus; /* 1..3 */ - hcf_8 staAddr[ETH_ALEN]; - hcf_16 reason; -} -SECURITY_STATUS_STRCT; - -#define WVLAN_WMP_PDU_TYPE_LT_REQ 0x00 -#define WVLAN_WMP_PDU_TYPE_LT_RSP 0x01 -#define WVLAN_WMP_PDU_TYPE_APL_REQ 0x02 -#define WVLAN_WMP_PDU_TYPE_APL_RSP 0x03 - -typedef struct wvlan_eth_hdr -{ - unsigned char dst[ETH_ALEN]; /* Destination address. */ - unsigned char src[ETH_ALEN]; /* Source address. */ - unsigned short len; /* Length of the PDU. */ -} -WVLAN_ETH_HDR, *PWVLAN_ETH_HDR; - -typedef struct wvlan_llc_snap -{ - unsigned char dsap; /* DSAP (0xAA) */ - unsigned char ssap; /* SSAP (0xAA) */ - unsigned char ctrl; /* Control (0x03) */ - unsigned char oui[3]; /* Organization Unique ID (00-60-1d). */ - unsigned char specid[2]; /* Specific ID code (00-01). */ -} -WVLAN_LLC_SNAP, *PWVLAN_LLC_SNAP; - - -typedef struct wvlan_lt_hdr -{ - unsigned char version; /* Version (0x00) */ - unsigned char type; /* PDU type: 0-req/1-resp. */ - unsigned short id; /* Identifier to associate resp to req. */ -} -WVLAN_LT_HDR, *PWVLAN_LT_HDR; - - -typedef struct wvlan_wmp_hdr -{ - unsigned char version; /* Version */ - unsigned char type; /* PDU type */ -} -WVLAN_WMP_HDR, *PWVLAN_WMP_HDR; - - -#define FILLER_SIZE 1554 -#define TEST_PATTERN_SIZE 54 - - -typedef struct wvlan_lt_req -{ - unsigned char Filler[TEST_PATTERN_SIZE]; /* minimal length of 54 bytes */ -} -WVLAN_LT_REQ, *PWVLAN_LT_REQ; - - -typedef struct wvlan_lt_rsp -{ - char name[32]; - /* Measured Data */ - unsigned char signal; - unsigned char noise; - unsigned char rxFlow; - unsigned char dataRate; - unsigned short protocol; - /* Capabilities */ - unsigned char station; - unsigned char dataRateCap; - unsigned char powerMgmt[4]; - unsigned char robustness[4]; - unsigned char scaling; - unsigned char reserved[5]; -} -WVLAN_LT_RSP, *PWVLAN_LT_RSP; - - -typedef struct wvlan_rx_wmp_hdr -{ - unsigned short status; - unsigned short reserved1[2]; - unsigned char silence; - unsigned char signal; - unsigned char rate; - unsigned char rxFlow; - unsigned short reserved2[2]; - unsigned short frameControl; - unsigned short duration; - unsigned short address1[3]; - unsigned short address2[3]; - unsigned short address3[3]; - unsigned short sequenceControl; - unsigned short address4[3]; -#ifndef HERMES25 //;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2 - unsigned short seems_to_be_unused_reserved3[5]; //;? - unsigned short seems_to_be_unused_reserved4; //;? -#endif // HERMES25 - unsigned short HeaderDataLen; -} -WVLAN_RX_WMP_HDR, *PWVLAN_RX_WMP_HDR; - - -typedef struct wvlan_linktest_req_pdu -{ - WVLAN_ETH_HDR ethHdr; - WVLAN_LLC_SNAP llcSnap; - WVLAN_LT_HDR ltHdr; - WVLAN_LT_REQ ltReq; -} -WVLAN_LINKTEST_REQ_PDU, *PWVLAN_LINKTEST_REQ_PDU; - - -typedef struct wvlan_linktest_rsp_pdu -{ - WVLAN_RX_WMP_HDR wmpRxHdr; - WVLAN_ETH_HDR ethHdr; - WVLAN_LLC_SNAP llcSnap; - WVLAN_LT_HDR ltHdr; - WVLAN_LT_RSP ltRsp; -} -WVLAN_LINKTEST_RSP_PDU, *PWVLAN_LINKTEST_RSP_PDU; - - -typedef struct _LINKTEST_RSP_STRCT -{ - hcf_16 len; - hcf_16 typ; - WVLAN_LINKTEST_RSP_PDU ltRsp; -} -LINKTEST_RSP_STRCT; - - -typedef struct wvlan_wmp_rsp_pdu -{ - WVLAN_RX_WMP_HDR wmpRxHdr; - WVLAN_ETH_HDR ethHdr; - WVLAN_LLC_SNAP llcSnap; - WVLAN_WMP_HDR wmpHdr; -} -WVLAN_WMP_RSP_PDU, *PWVLAN_WMP_RSP_PDU; - - -typedef struct _WMP_RSP_STRCT -{ - hcf_16 len; - hcf_16 typ; - WVLAN_WMP_RSP_PDU wmpRsp; -} -WMP_RSP_STRCT; - - -typedef struct _PROBE_RESP -{ - // first part: 802.11 - hcf_16 length; - hcf_16 infoType; - hcf_16 reserved0; - //hcf_8 signal; - hcf_8 silence; - hcf_8 signal; // Moved signal here as signal/noise values were flipped - hcf_8 rxFlow; - hcf_8 rate; - hcf_16 reserved1[2]; - - // second part: - hcf_16 frameControl; - hcf_16 durID; - hcf_8 address1[6]; - hcf_8 address2[6]; - hcf_8 BSSID[6]; //! this is correct, right ? - hcf_16 sequence; - hcf_8 address4[6]; - -#ifndef WARP - hcf_8 reserved2[12]; -#endif // WARP - - hcf_16 dataLength; - // the information in the next 3 fields (DA/SA/LenType) is actually not filled in. - hcf_8 DA[6]; - hcf_8 SA[6]; - -#ifdef WARP - hcf_8 channel; - hcf_8 band; -#else - hcf_16 lenType; -#endif // WARP - - hcf_8 timeStamp[8]; - hcf_16 beaconInterval; - hcf_16 capability; - hcf_8 rawData[200]; //! <<< think about this number ! - hcf_16 flags; -} -PROBE_RESP, *PPROBE_RESP; - - -typedef struct _ProbeResult -{ - int scan_complete; - int num_aps; - PROBE_RESP ProbeTable[MAX_NAPS]; -} -ProbeResult; - -/* Definitions used to parse capabilities out of the probe responses */ -#define CAPABILITY_ESS 0x0001 -#define CAPABILITY_IBSS 0x0002 -#define CAPABILITY_PRIVACY 0x0010 - -/* Definitions used to parse the Information Elements out of probe responses */ -#define DS_INFO_ELEM 0x03 -#define GENERIC_INFO_ELEM 0xdd -#define WPA_MAX_IE_LEN 40 -#define WPA_SELECTOR_LEN 4 -#define WPA_OUI_TYPE { 0x00, 0x50, 0xf2, 1 } -#define WPA_VERSION 1 -#define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X { 0x00, 0x50, 0xf2, 1 } -#define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X { 0x00, 0x50, 0xf2, 2 } -#define WPA_CIPHER_SUITE_NONE { 0x00, 0x50, 0xf2, 0 } -#define WPA_CIPHER_SUITE_WEP40 { 0x00, 0x50, 0xf2, 1 } -#define WPA_CIPHER_SUITE_TKIP { 0x00, 0x50, 0xf2, 2 } -#define WPA_CIPHER_SUITE_WRAP { 0x00, 0x50, 0xf2, 3 } -#define WPA_CIPHER_SUITE_CCMP { 0x00, 0x50, 0xf2, 4 } -#define WPA_CIPHER_SUITE_WEP104 { 0x00, 0x50, 0xf2, 5 } - -typedef enum wvlan_drv_mode -{ - WVLAN_DRV_MODE_NO_DOWNLOAD, /* this is the same as STA for Hermes 1 */ - /* it is also only applicable for Hermes 1 */ - WVLAN_DRV_MODE_STA, - WVLAN_DRV_MODE_AP, - WVLAN_DRV_MODE_MAX -} -WVLAN_DRV_MODE, *PWVLAN_DRV_MODE; - - -typedef enum wvlan_port_state -{ - WVLAN_PORT_STATE_ENABLED, - WVLAN_PORT_STATE_DISABLED, - WVLAN_PORT_STATE_CONNECTED -} -WVLAN_PORT_STATE, *PWVLAN_PORT_STATE; - -/* -typedef enum wvlan_connect_state -{ - WVLAN_CONNECT_STATE_CONNECTED, - WVLAN_CONNECT_STATE_DISCONNECTED -} -WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE; -*/ - -typedef enum wvlan_pm_state -{ - WVLAN_PM_STATE_DISABLED, - WVLAN_PM_STATE_ENHANCED, - WVLAN_PM_STATE_STANDARD -} -WVLAN_PM_STATE, *PWVLAN_PM_STATE; - - -typedef struct wvlan_frame -{ - struct sk_buff *skb; /* sk_buff for frame. */ - hcf_16 port; /* MAC port for the frame. */ - hcf_16 len; /* Length of the frame. */ -} -WVLAN_FRAME, *PWVLAN_FRAME; - - -typedef struct wvlan_lframe -{ - struct list_head node; /* Node in the list */ - WVLAN_FRAME frame; /* Frame. */ -} -WVLAN_LFRAME, *PWVLAN_LFRAME; - - - -#define DEFAULT_NUM_TX_FRAMES 48 -#define TX_Q_LOW_WATER_MARK (DEFAULT_NUM_TX_FRAMES/3) - -#define WVLAN_MAX_TX_QUEUES 1 - - -#ifdef USE_WDS - -typedef struct wvlan_wds_if -{ - struct net_device *dev; - int is_registered; - int netif_queue_on; - struct net_device_stats stats; - hcf_16 rtsThreshold; - hcf_16 txRateCntl; - hcf_8 wdsAddress[ETH_ALEN]; -} WVLAN_WDS_IF, *PWVLAN_WDS_IF; - -#endif // USE_WDS - - - -#define NUM_RX_DESC 5 -#define NUM_TX_DESC 5 - -typedef struct dma_strct -{ - DESC_STRCT *tx_packet[NUM_TX_DESC]; - DESC_STRCT *rx_packet[NUM_RX_DESC]; - DESC_STRCT *rx_reclaim_desc, *tx_reclaim_desc; // Descriptors for host-reclaim purposes (see HCF) - int tx_rsc_ind; // DMA Tx resource indicator is maintained in the MSF, not in the HCF - int rx_rsc_ind; // Also added rx resource indicator so that cleanup can be performed if alloc fails - int status; -} DMA_STRCT; - - -/* Macros used in DMA support */ -/* get bus address of {rx,tx}dma structure member, in little-endian byte order */ -#define WL_DMA_BUS_ADDR_LE(str, i, mem) \ - cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)])) - - -struct wl_private -{ - -#ifdef BUS_PCMCIA - struct pcmcia_device *link; -#endif // BUS_PCMCIA - - - struct net_device *dev; -// struct net_device *dev_next; - spinlock_t slock; - struct tasklet_struct task; - struct net_device_stats stats; - - -#ifdef WIRELESS_EXT - struct iw_statistics wstats; -// int spy_number; -// u_char spy_address[IW_MAX_SPY][ETH_ALEN]; -// struct iw_quality spy_stat[IW_MAX_SPY]; - struct iw_spy_data spy_data; - struct iw_public_data wireless_data; -#endif // WIRELESS_EXT - - - IFB_STRCT hcfCtx; -//;? struct timer_list timer_oor; -//;? hcf_16 timer_oor_cnt; - u_long wlags49_type; //controls output in /proc/wlags49 - u_long flags; - hcf_16 DebugFlag; - int is_registered; - int is_handling_int; - int firmware_present; - CFG_DRV_INFO_STRCT driverInfo; - CFG_IDENTITY_STRCT driverIdentity; - CFG_FW_IDENTITY_STRCT StationIdentity; - CFG_PRI_IDENTITY_STRCT PrimaryIdentity; - CFG_PRI_IDENTITY_STRCT NICIdentity; - - ltv_t ltvRecord; - u_long txBytes; - hcf_16 maxPort; /* 0 for STA, 6 for AP */ - - /* Elements used for async notification from hardware */ - RID_LOG_STRCT RidList[10]; - ltv_t updatedRecord; - PROBE_RESP ProbeResp; - ASSOC_STATUS_STRCT assoc_stat; - SECURITY_STATUS_STRCT sec_stat; - - u_char lookAheadBuf[WVLAN_MAX_LOOKAHEAD]; - - hcf_8 PortType; // 1 - 3 (1 [Normal] | 3 [AdHoc]) - hcf_16 Channel; // 0 - 14 (0) - hcf_16 TxRateControl[2]; - hcf_8 DistanceBetweenAPs; // 1 - 3 (1) - hcf_16 RTSThreshold; // 0 - 2347 (2347) - hcf_16 PMEnabled; // 0 - 2, 8001 - 8002 (0) - hcf_8 MicrowaveRobustness;// 0 - 1 (0) - hcf_8 CreateIBSS; // 0 - 1 (0) - hcf_8 MulticastReceive; // 0 - 1 (1) - hcf_16 MaxSleepDuration; // 0 - 65535 (100) - hcf_8 MACAddress[ETH_ALEN]; - char NetworkName[HCF_MAX_NAME_LEN+1]; - char StationName[HCF_MAX_NAME_LEN+1]; - hcf_8 EnableEncryption; // 0 - 1 (0) - char Key1[MAX_KEY_LEN+1]; - char Key2[MAX_KEY_LEN+1]; - char Key3[MAX_KEY_LEN+1]; - char Key4[MAX_KEY_LEN+1]; - hcf_8 TransmitKeyID; // 1 - 4 (1) - CFG_DEFAULT_KEYS_STRCT DefaultKeys; - u_char mailbox[MB_SIZE]; - char szEncryption[MAX_ENC_LEN]; - - hcf_16 driverEnable; - hcf_16 wolasEnable; - hcf_16 atimWindow; - hcf_16 holdoverDuration; - hcf_16 MulticastRate[2]; - - hcf_16 authentication; // is this AP specific? - hcf_16 promiscuousMode; - WVLAN_DRV_MODE DownloadFirmware; // 0 - 2 (0 [None] | 1 [STA] | 2 [AP]) - - char fw_image_filename[MAX_LINE_SIZE+1]; - - hcf_16 AuthKeyMgmtSuite; - - hcf_16 loadBalancing; - hcf_16 mediumDistribution; - hcf_16 txPowLevel; - //hcf_16 shortRetryLimit; - //hcf_16 longRetryLimit; - hcf_16 srsc[2]; - hcf_16 brsc[2]; - hcf_16 connectionControl; - //hcf_16 probeDataRates[2]; - hcf_16 ownBeaconInterval; - hcf_16 coexistence; - - WVLAN_FRAME txF; - WVLAN_LFRAME txList[DEFAULT_NUM_TX_FRAMES]; - struct list_head txFree; - struct list_head txQ[WVLAN_MAX_TX_QUEUES]; - int netif_queue_on; - int txQ_count; - DESC_STRCT desc_rx; - DESC_STRCT desc_tx; - - WVLAN_PORT_STATE portState; - - ScanResult scan_results; - ProbeResult probe_results; - int probe_num_aps; - - int use_dma; - DMA_STRCT dma; -#ifdef USE_RTS - int useRTS; -#endif // USE_RTS - hcf_8 DTIMPeriod; // 1 - 255 (1) - hcf_16 multicastPMBuffering; - hcf_8 RejectAny; // 0 - 1 (0) - hcf_8 ExcludeUnencrypted; // 0 - 1 (1) - hcf_16 intraBSSRelay; -#ifdef USE_WDS - WVLAN_WDS_IF wds_port[NUM_WDS_PORTS]; -#endif // USE_WDS - - /* Track whether the card is using WEP encryption or WPA - * so we know what to disable next time through. - * IW_ENCODE_ALG_NONE, IW_ENCODE_ALG_WEP, IW_ENCODE_ALG_TKIP - */ - int wext_enc; -}; // wl_private - -#define wl_priv(dev) ((struct wl_private *) netdev_priv(dev)) - -/********************************************************************/ -/* Locking and synchronization functions */ -/********************************************************************/ - -/* These functions *must* be inline or they will break horribly on - * 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. */ -static inline void wl_lock(struct wl_private *lp, - unsigned long *flags) -{ - spin_lock_irqsave(&lp->slock, *flags); -} - -static inline void wl_unlock(struct wl_private *lp, - unsigned long *flags) -{ - spin_unlock_irqrestore(&lp->slock, *flags); -} - -/********************************************************************/ -/* Interrupt enable disable functions */ -/********************************************************************/ - -static inline void wl_act_int_on(struct wl_private *lp) -{ - /* - * Only do something when the driver is handling - * interrupts. Handling starts at wl_open and - * ends at wl_close when not in RTS mode - */ - if(lp->is_handling_int == WL_HANDLING_INT) { - hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON ); - } -} - -static inline void wl_act_int_off(struct wl_private *lp) -{ - /* - * Only do something when the driver is handling - * interrupts. Handling starts at wl_open and - * ends at wl_close when not in RTS mode - */ - if(lp->is_handling_int == WL_HANDLING_INT) { - hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF ); - } -} - -#endif // __WAVELAN2_H__ diff --git a/drivers/staging/wlags49_h2/wl_main.c b/drivers/staging/wlags49_h2/wl_main.c deleted file mode 100644 index fc98b6dbdb89..000000000000 --- a/drivers/staging/wlags49_h2/wl_main.c +++ /dev/null @@ -1,3702 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file contains the main driver entry points and other adapter - * specific routines. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * constant definitions - ******************************************************************************/ - -/* Allow support for calling system fcns to access F/W image file */ -#define __KERNEL_SYSCALLS__ - -/******************************************************************************* - * include files - ******************************************************************************/ -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#define BIN_DL 0 -#if BIN_DL -#include -#endif /* BIN_DL */ - - -#include - -#include -#include -/* in order to get around:: wl_main.c:2229: `HREG_EV_RDMAD' undeclared (first use in this function) */ -#include - -#include -#include -#include -#include -#include -#include - -#ifdef USE_PROFILE -#include -#endif /* USE_PROFILE */ - -#ifdef BUS_PCMCIA -#include -#endif /* BUS_PCMCIA */ - -#ifdef BUS_PCI -#include -#endif /* BUS_PCI */ -/******************************************************************************* - * macro definitions - ******************************************************************************/ -#define VALID_PARAM(C) \ - { \ - if (!(C)) { \ - printk(KERN_INFO "Wireless, parameter error: \"%s\"\n", #C); \ - goto failed; \ - } \ - } -/******************************************************************************* - * local functions - ******************************************************************************/ -void wl_isr_handler(unsigned long p); - -#if 0 //SCULL_USE_PROC /* don't waste space if unused */ -static int scull_read_procmem(struct seq_file *m, void *v); -static int write_int(struct file *file, const char *buffer, unsigned long count, void *data); - -/* - * seq_file wrappers for procfile show routines. - */ -static int scull_read_procmem_open(struct inode *inode, struct file *file) -{ - return single_open(file, scull_read_procmem, PDE_DATA(inode)); -} - -static const struct file_operations scull_read_procmem_fops = { - .open = scull_read_procmem_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -#endif /* SCULL_USE_PROC */ - -/******************************************************************************* - * module parameter definitions - set with 'insmod' - ******************************************************************************/ -static p_u16 irq_mask = 0xdeb8; /* IRQ3,4,5,7,9,10,11,12,14,15 */ -static p_s8 irq_list[4] = { -1 }; - -#if 0 -MODULE_PARM(irq_mask, "h"); -MODULE_PARM_DESC(irq_mask, "IRQ mask [0xdeb8]"); -MODULE_PARM(irq_list, "1-4b"); -MODULE_PARM_DESC(irq_list, "IRQ list []"); -#endif - -static p_u8 PARM_AUTHENTICATION = PARM_DEFAULT_AUTHENTICATION; -static p_u16 PARM_AUTH_KEY_MGMT_SUITE = PARM_DEFAULT_AUTH_KEY_MGMT_SUITE; -static p_u16 PARM_BRSC_2GHZ = PARM_DEFAULT_BRSC_2GHZ; -static p_u16 PARM_BRSC_5GHZ = PARM_DEFAULT_BRSC_5GHZ; -static p_u16 PARM_COEXISTENCE = PARM_DEFAULT_COEXISTENCE; -static p_u16 PARM_CONNECTION_CONTROL = PARM_DEFAULT_CONNECTION_CONTROL; /* ;?rename and move */ -static p_char *PARM_CREATE_IBSS = PARM_DEFAULT_CREATE_IBSS_STR; -static p_char *PARM_DESIRED_SSID = PARM_DEFAULT_SSID; -static p_char *PARM_DOWNLOAD_FIRMWARE = ""; -static p_u16 PARM_ENABLE_ENCRYPTION = PARM_DEFAULT_ENABLE_ENCRYPTION; -static p_char *PARM_EXCLUDE_UNENCRYPTED = PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR; -static p_char *PARM_INTRA_BSS_RELAY = PARM_DEFAULT_INTRA_BSS_RELAY_STR; -static p_char *PARM_KEY1 = ""; -static p_char *PARM_KEY2 = ""; -static p_char *PARM_KEY3 = ""; -static p_char *PARM_KEY4 = ""; -static p_char *PARM_LOAD_BALANCING = PARM_DEFAULT_LOAD_BALANCING_STR; -static p_u16 PARM_MAX_SLEEP = PARM_DEFAULT_MAX_PM_SLEEP; -static p_char *PARM_MEDIUM_DISTRIBUTION = PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR; -static p_char *PARM_MICROWAVE_ROBUSTNESS = PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR; -static p_char *PARM_MULTICAST_PM_BUFFERING = PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR; -static p_u16 PARM_MULTICAST_RATE = PARM_DEFAULT_MULTICAST_RATE_2GHZ; -static p_char *PARM_MULTICAST_RX = PARM_DEFAULT_MULTICAST_RX_STR; -static p_u8 PARM_NETWORK_ADDR[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u16 PARM_OWN_ATIM_WINDOW = PARM_DEFAULT_OWN_ATIM_WINDOW; -static p_u16 PARM_OWN_BEACON_INTERVAL = PARM_DEFAULT_OWN_BEACON_INTERVAL; -static p_u8 PARM_OWN_CHANNEL = PARM_DEFAULT_OWN_CHANNEL; -static p_u8 PARM_OWN_DTIM_PERIOD = PARM_DEFAULT_OWN_DTIM_PERIOD; -static p_char *PARM_OWN_NAME = PARM_DEFAULT_OWN_NAME; -static p_char *PARM_OWN_SSID = PARM_DEFAULT_SSID; -static p_u16 PARM_PM_ENABLED = WVLAN_PM_STATE_DISABLED; -static p_u16 PARM_PM_HOLDOVER_DURATION = PARM_DEFAULT_PM_HOLDOVER_DURATION; -static p_u8 PARM_PORT_TYPE = PARM_DEFAULT_PORT_TYPE; -static p_char *PARM_PROMISCUOUS_MODE = PARM_DEFAULT_PROMISCUOUS_MODE_STR; -static p_char *PARM_REJECT_ANY = PARM_DEFAULT_REJECT_ANY_STR; -#ifdef USE_WDS -static p_u16 PARM_RTS_THRESHOLD1 = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_RTS_THRESHOLD2 = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_RTS_THRESHOLD3 = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_RTS_THRESHOLD4 = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_RTS_THRESHOLD5 = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_RTS_THRESHOLD6 = PARM_DEFAULT_RTS_THRESHOLD; -#endif /* USE_WDS */ -static p_u16 PARM_RTS_THRESHOLD = PARM_DEFAULT_RTS_THRESHOLD; -static p_u16 PARM_SRSC_2GHZ = PARM_DEFAULT_SRSC_2GHZ; -static p_u16 PARM_SRSC_5GHZ = PARM_DEFAULT_SRSC_5GHZ; -static p_u8 PARM_SYSTEM_SCALE = PARM_DEFAULT_SYSTEM_SCALE; -static p_u8 PARM_TX_KEY = PARM_DEFAULT_TX_KEY; -static p_u16 PARM_TX_POW_LEVEL = PARM_DEFAULT_TX_POW_LEVEL; -#ifdef USE_WDS -static p_u16 PARM_TX_RATE1 = PARM_DEFAULT_TX_RATE_2GHZ; -static p_u16 PARM_TX_RATE2 = PARM_DEFAULT_TX_RATE_2GHZ; -static p_u16 PARM_TX_RATE3 = PARM_DEFAULT_TX_RATE_2GHZ; -static p_u16 PARM_TX_RATE4 = PARM_DEFAULT_TX_RATE_2GHZ; -static p_u16 PARM_TX_RATE5 = PARM_DEFAULT_TX_RATE_2GHZ; -static p_u16 PARM_TX_RATE6 = PARM_DEFAULT_TX_RATE_2GHZ; -#endif /* USE_WDS */ -static p_u16 PARM_TX_RATE = PARM_DEFAULT_TX_RATE_2GHZ; -#ifdef USE_WDS -static p_u8 PARM_WDS_ADDRESS1[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u8 PARM_WDS_ADDRESS2[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u8 PARM_WDS_ADDRESS3[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u8 PARM_WDS_ADDRESS4[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u8 PARM_WDS_ADDRESS5[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -static p_u8 PARM_WDS_ADDRESS6[ETH_ALEN] = PARM_DEFAULT_NETWORK_ADDR; -#endif /* USE_WDS */ - - -#if 0 -MODULE_PARM(PARM_DESIRED_SSID, "s"); -MODULE_PARM_DESC(PARM_DESIRED_SSID, "Network Name () [ANY]"); -MODULE_PARM(PARM_OWN_SSID, "s"); -MODULE_PARM_DESC(PARM_OWN_SSID, "Network Name () [ANY]"); -MODULE_PARM(PARM_OWN_CHANNEL, "b"); -MODULE_PARM_DESC(PARM_OWN_CHANNEL, "Channel (0 - 14) [0]"); -MODULE_PARM(PARM_SYSTEM_SCALE, "b"); -MODULE_PARM_DESC(PARM_SYSTEM_SCALE, "Distance Between APs (1 - 3) [1]"); -MODULE_PARM(PARM_TX_RATE, "b"); -MODULE_PARM_DESC(PARM_TX_RATE, "Transmit Rate Control"); -MODULE_PARM(PARM_RTS_THRESHOLD, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD, "Medium Reservation (RTS/CTS Fragment Length) (256 - 2347) [2347]"); -MODULE_PARM(PARM_MICROWAVE_ROBUSTNESS, "s"); -MODULE_PARM_DESC(PARM_MICROWAVE_ROBUSTNESS, "Microwave Oven Robustness Enabled ( N or Y) [N]"); -MODULE_PARM(PARM_OWN_NAME, "s"); -MODULE_PARM_DESC(PARM_OWN_NAME, "Station Name () [Linux]"); - -MODULE_PARM(PARM_ENABLE_ENCRYPTION, "b"); -MODULE_PARM_DESC(PARM_ENABLE_ENCRYPTION, "Encryption Mode (0 - 7) [0]"); - -MODULE_PARM(PARM_KEY1, "s"); -MODULE_PARM_DESC(PARM_KEY1, "Data Encryption Key 1 () []"); -MODULE_PARM(PARM_KEY2, "s"); -MODULE_PARM_DESC(PARM_KEY2, "Data Encryption Key 2 () []"); -MODULE_PARM(PARM_KEY3, "s"); -MODULE_PARM_DESC(PARM_KEY3, "Data Encryption Key 3 () []"); -MODULE_PARM(PARM_KEY4, "s"); -MODULE_PARM_DESC(PARM_KEY4, "Data Encryption Key 4 () []"); -MODULE_PARM(PARM_TX_KEY, "b"); -MODULE_PARM_DESC(PARM_TX_KEY, "Transmit Key ID (1 - 4) [1]"); -MODULE_PARM(PARM_MULTICAST_RATE, "b"); -MODULE_PARM_DESC(PARM_MULTICAST_RATE, "Multicast Rate"); -MODULE_PARM(PARM_DOWNLOAD_FIRMWARE, "s"); -MODULE_PARM_DESC(PARM_DOWNLOAD_FIRMWARE, "filename of firmware image"); - -MODULE_PARM(PARM_AUTH_KEY_MGMT_SUITE, "b"); -MODULE_PARM_DESC(PARM_AUTH_KEY_MGMT_SUITE, "Authentication Key Management suite (0-4) [0]"); - -MODULE_PARM(PARM_LOAD_BALANCING, "s"); -MODULE_PARM_DESC(PARM_LOAD_BALANCING, "Load Balancing Enabled ( N or Y) [Y]"); -MODULE_PARM(PARM_MEDIUM_DISTRIBUTION, "s"); -MODULE_PARM_DESC(PARM_MEDIUM_DISTRIBUTION, "Medium Distribution Enabled ( N or Y) [Y]"); -MODULE_PARM(PARM_TX_POW_LEVEL, "b"); -MODULE_PARM_DESC(PARM_TX_POW_LEVEL, "Transmit Power (0 - 6) [3]"); -MODULE_PARM(PARM_SRSC_2GHZ, "b"); -MODULE_PARM_DESC(PARM_SRSC_2GHZ, "Supported Rate Set Control 2.4 GHz"); -MODULE_PARM(PARM_SRSC_5GHZ, "b"); -MODULE_PARM_DESC(PARM_SRSC_5GHZ, "Supported Rate Set Control 5.0 GHz"); -MODULE_PARM(PARM_BRSC_2GHZ, "b"); -MODULE_PARM_DESC(PARM_BRSC_2GHZ, "Basic Rate Set Control 2.4 GHz"); -MODULE_PARM(PARM_BRSC_5GHZ, "b"); -MODULE_PARM_DESC(PARM_BRSC_5GHZ, "Basic Rate Set Control 5.0 GHz"); -#if 1 /* (HCF_TYPE) & HCF_TYPE_STA */ -/* ;?seems reasonable that even an AP-only driver could afford this small additional footprint */ -MODULE_PARM(PARM_PM_ENABLED, "h"); -MODULE_PARM_DESC(PARM_PM_ENABLED, "Power Management State (0 - 2, 8001 - 8002) [0]"); -MODULE_PARM(PARM_PORT_TYPE, "b"); -MODULE_PARM_DESC(PARM_PORT_TYPE, "Port Type (1 - 3) [1]"); -/* - * ;?MODULE_PARM(PARM_CREATE_IBSS, "s"); - *;?MODULE_PARM_DESC(PARM_CREATE_IBSS, "Create IBSS ( N or Y) [N]"); - *;?MODULE_PARM(PARM_MULTICAST_RX, "s"); - *;?MODULE_PARM_DESC(PARM_MULTICAST_RX, "Multicast Receive Enable ( N or Y) [Y]"); - *;?MODULE_PARM(PARM_MAX_SLEEP, "h"); - *;?MODULE_PARM_DESC(PARM_MAX_SLEEP, "Maximum Power Management Sleep Duration (0 - 65535) [100]"); - *;?MODULE_PARM(PARM_NETWORK_ADDR, "6b"); - *;?MODULE_PARM_DESC(PARM_NETWORK_ADDR, "Hardware Ethernet Address ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) []"); - *;?MODULE_PARM(PARM_AUTHENTICATION, "b"); - * - *tracker 12448 - *;?MODULE_PARM_DESC(PARM_AUTHENTICATION, "Authentication Type (0-2) [0] 0=Open 1=SharedKey 2=LEAP"); - *;?MODULE_PARM_DESC(authentication, "Authentication Type (1-2) [1] 1=Open 2=SharedKey"); - *tracker 12448 - * - *;?MODULE_PARM(PARM_OWN_ATIM_WINDOW, "b"); - *;?MODULE_PARM_DESC(PARM_OWN_ATIM_WINDOW, "ATIM Window time in TU for IBSS creation (0-100) [0]"); - *;?MODULE_PARM(PARM_PM_HOLDOVER_DURATION, "b"); - *;?MODULE_PARM_DESC(PARM_PM_HOLDOVER_DURATION, "Time station remains awake after MAC frame transfer when PM is on (0-65535) [100]"); - *;?MODULE_PARM(PARM_PROMISCUOUS_MODE, "s"); - *;?MODULE_PARM_DESC(PARM_PROMISCUOUS_MODE, "Promiscuous Mode Enable ( Y or N ) [N]" ); - *;? - */ -MODULE_PARM(PARM_CONNECTION_CONTROL, "b"); -MODULE_PARM_DESC(PARM_CONNECTION_CONTROL, "Connection Control (0 - 3) [2]"); -#endif /* HCF_STA */ -#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */ - /* ;?should we restore this to allow smaller memory footprint */ -MODULE_PARM(PARM_OWN_DTIM_PERIOD, "b"); -MODULE_PARM_DESC(PARM_OWN_DTIM_PERIOD, "DTIM Period (0 - 255) [1]"); -MODULE_PARM(PARM_REJECT_ANY, "s"); -MODULE_PARM_DESC(PARM_REJECT_ANY, "Closed System ( N or Y) [N]"); -MODULE_PARM(PARM_EXCLUDE_UNENCRYPTED, "s"); -MODULE_PARM_DESC(PARM_EXCLUDE_UNENCRYPTED, "Deny non-encrypted ( N or Y) [Y]"); -MODULE_PARM(PARM_MULTICAST_PM_BUFFERING,"s"); -MODULE_PARM_DESC(PARM_MULTICAST_PM_BUFFERING, "Buffer MAC frames for Tx after DTIM ( Y or N) [Y]"); -MODULE_PARM(PARM_INTRA_BSS_RELAY, "s"); -MODULE_PARM_DESC(PARM_INTRA_BSS_RELAY, "IntraBSS Relay ( N or Y) [Y]"); -MODULE_PARM(PARM_RTS_THRESHOLD1, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD1, "RTS Threshold, WDS Port 1 (256 - 2347) [2347]"); -MODULE_PARM(PARM_RTS_THRESHOLD2, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD2, "RTS Threshold, WDS Port 2 (256 - 2347) [2347]"); -MODULE_PARM(PARM_RTS_THRESHOLD3, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD3, "RTS Threshold, WDS Port 3 (256 - 2347) [2347]"); -MODULE_PARM(PARM_RTS_THRESHOLD4, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD4, "RTS Threshold, WDS Port 4 (256 - 2347) [2347]"); -MODULE_PARM(PARM_RTS_THRESHOLD5, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD5, "RTS Threshold, WDS Port 5 (256 - 2347) [2347]"); -MODULE_PARM(PARM_RTS_THRESHOLD6, "h"); -MODULE_PARM_DESC(PARM_RTS_THRESHOLD6, "RTS Threshold, WDS Port 6 (256 - 2347) [2347]"); -MODULE_PARM(PARM_TX_RATE1, "b"); -MODULE_PARM_DESC(PARM_TX_RATE1, "Transmit Rate Control, WDS Port 1 (1 - 7) [3]"); -MODULE_PARM(PARM_TX_RATE2, "b"); -MODULE_PARM_DESC(PARM_TX_RATE2, "Transmit Rate Control, WDS Port 2 (1 - 7) [3]"); -MODULE_PARM(PARM_TX_RATE3, "b"); -MODULE_PARM_DESC(PARM_TX_RATE3, "Transmit Rate Control, WDS Port 3 (1 - 7) [3]"); -MODULE_PARM(PARM_TX_RATE4, "b"); -MODULE_PARM_DESC(PARM_TX_RATE4, "Transmit Rate Control, WDS Port 4 (1 - 7) [3]"); -MODULE_PARM(PARM_TX_RATE5, "b"); -MODULE_PARM_DESC(PARM_TX_RATE5, "Transmit Rate Control, WDS Port 5 (1 - 7) [3]"); -MODULE_PARM(PARM_TX_RATE6, "b"); -MODULE_PARM_DESC(PARM_TX_RATE6, "Transmit Rate Control, WDS Port 6 (1 - 7) [3]"); -MODULE_PARM(PARM_WDS_ADDRESS1, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS1, "MAC Address, WDS Port 1 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); -MODULE_PARM(PARM_WDS_ADDRESS2, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS2, "MAC Address, WDS Port 2 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); -MODULE_PARM(PARM_WDS_ADDRESS3, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS3, "MAC Address, WDS Port 3 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); -MODULE_PARM(PARM_WDS_ADDRESS4, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS4, "MAC Address, WDS Port 4 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); -MODULE_PARM(PARM_WDS_ADDRESS5, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS5, "MAC Address, WDS Port 5 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); -MODULE_PARM(PARM_WDS_ADDRESS6, "6b"); -MODULE_PARM_DESC(PARM_WDS_ADDRESS6, "MAC Address, WDS Port 6 ([0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff],[0x00-0xff]) [{0}]"); - -MODULE_PARM(PARM_OWN_BEACON_INTERVAL, "b"); -MODULE_PARM_DESC(PARM_OWN_BEACON_INTERVAL, "Own Beacon Interval (20 - 200) [100]"); -MODULE_PARM(PARM_COEXISTENCE, "b"); -MODULE_PARM_DESC(PARM_COEXISTENCE, "Coexistence (0-7) [0]"); - -#endif /* HCF_AP */ -#endif - -/* END NEW PARAMETERS */ -/******************************************************************************* - * debugging specifics - ******************************************************************************/ -#if DBG - -static p_u32 pc_debug = DBG_LVL; -/* - * MODULE_PARM(pc_debug, "i"); - *static ;?conflicts with my understanding of CL parameters and breaks now I moved - * the correspondig logic to wl_profile - */ p_u32 DebugFlag = ~0; /* recognizable "undefined value" rather then DBG_DEFAULTS; */ -/* MODULE_PARM(DebugFlag, "l"); */ - -static struct dbg_info wl_info = { KBUILD_MODNAME, 0, 0 }; -struct dbg_info *DbgInfo = &wl_info; - -#endif /* DBG */ -#ifdef USE_RTS - -static p_char *useRTS = "N"; -MODULE_PARM(useRTS, "s"); -MODULE_PARM_DESC(useRTS, "Use RTS test interface ( N or Y) [N]"); - -#endif /* USE_RTS */ -/******************************************************************************* - * firmware download specifics - ******************************************************************************/ -extern struct CFG_RANGE2_STRCT BASED - cfg_drv_act_ranges_pri; // describes primary-actor range of HCF - -#if 0 //;? (HCF_TYPE) & HCF_TYPE_AP -extern memimage ap; // AP firmware image to be downloaded -#endif /* HCF_AP */ - -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA -//extern memimage station; // STA firmware image to be downloaded -extern memimage fw_image; // firmware image to be downloaded -#endif /* HCF_STA */ - - -int wl_insert(struct net_device *dev) -{ - int result = 0; - int hcf_status = HCF_SUCCESS; - int i; - unsigned long flags = 0; - struct wl_private *lp = wl_priv(dev); - - /* Initialize the adapter hardware. */ - memset(&(lp->hcfCtx), 0, sizeof(IFB_STRCT)); - - /* Initialize the adapter parameters. */ - spin_lock_init(&(lp->slock)); - - /* Initialize states */ - //lp->lockcount = 0; //PE1DNN - lp->is_handling_int = WL_NOT_HANDLING_INT; - lp->firmware_present = WL_FRIMWARE_NOT_PRESENT; - - lp->dev = dev; - - DBG_PARAM(DbgInfo, "irq_mask", "0x%04x", irq_mask & 0x0FFFF); - DBG_PARAM(DbgInfo, "irq_list", "0x%02x 0x%02x 0x%02x 0x%02x", - irq_list[0] & 0x0FF, irq_list[1] & 0x0FF, - irq_list[2] & 0x0FF, irq_list[3] & 0x0FF); - DBG_PARAM(DbgInfo, PARM_NAME_DESIRED_SSID, "\"%s\"", PARM_DESIRED_SSID); - DBG_PARAM(DbgInfo, PARM_NAME_OWN_SSID, "\"%s\"", PARM_OWN_SSID); - DBG_PARAM(DbgInfo, PARM_NAME_OWN_CHANNEL, "%d", PARM_OWN_CHANNEL); - DBG_PARAM(DbgInfo, PARM_NAME_SYSTEM_SCALE, "%d", PARM_SYSTEM_SCALE); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE, "%d", PARM_TX_RATE); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD, "%d", PARM_RTS_THRESHOLD); - DBG_PARAM(DbgInfo, PARM_NAME_MICROWAVE_ROBUSTNESS, "\"%s\"", PARM_MICROWAVE_ROBUSTNESS); - DBG_PARAM(DbgInfo, PARM_NAME_OWN_NAME, "\"%s\"", PARM_OWN_NAME); -//;? DBG_PARAM( DbgInfo, PARM_NAME_ENABLE_ENCRYPTION, "\"%s\"", PARM_ENABLE_ENCRYPTION ); - DBG_PARAM(DbgInfo, PARM_NAME_KEY1, "\"%s\"", PARM_KEY1); - DBG_PARAM(DbgInfo, PARM_NAME_KEY2, "\"%s\"", PARM_KEY2); - DBG_PARAM(DbgInfo, PARM_NAME_KEY3, "\"%s\"", PARM_KEY3); - DBG_PARAM(DbgInfo, PARM_NAME_KEY4, "\"%s\"", PARM_KEY4); - DBG_PARAM(DbgInfo, PARM_NAME_TX_KEY, "%d", PARM_TX_KEY); - DBG_PARAM(DbgInfo, PARM_NAME_MULTICAST_RATE, "%d", PARM_MULTICAST_RATE); - DBG_PARAM(DbgInfo, PARM_NAME_DOWNLOAD_FIRMWARE, "\"%s\"", PARM_DOWNLOAD_FIRMWARE); - DBG_PARAM(DbgInfo, PARM_NAME_AUTH_KEY_MGMT_SUITE, "%d", PARM_AUTH_KEY_MGMT_SUITE); -//;?#if (HCF_TYPE) & HCF_TYPE_STA - //;?should we make this code conditional depending on in STA mode -//;? DBG_PARAM( DbgInfo, PARM_NAME_PORT_TYPE, "%d", PARM_PORT_TYPE ); - DBG_PARAM(DbgInfo, PARM_NAME_PM_ENABLED, "%04x", PARM_PM_ENABLED); -//;? DBG_PARAM( DbgInfo, PARM_NAME_CREATE_IBSS, "\"%s\"", PARM_CREATE_IBSS ); -//;? DBG_PARAM( DbgInfo, PARM_NAME_MULTICAST_RX, "\"%s\"", PARM_MULTICAST_RX ); -//;? DBG_PARAM( DbgInfo, PARM_NAME_MAX_SLEEP, "%d", PARM_MAX_SLEEP ); -/* - DBG_PARAM(DbgInfo, PARM_NAME_NETWORK_ADDR, "\"%pM\"", - PARM_NETWORK_ADDR); - */ -//;? DBG_PARAM( DbgInfo, PARM_NAME_AUTHENTICATION, "%d", PARM_AUTHENTICATION ); -//;? DBG_PARAM( DbgInfo, PARM_NAME_OWN_ATIM_WINDOW, "%d", PARM_OWN_ATIM_WINDOW ); -//;? DBG_PARAM( DbgInfo, PARM_NAME_PM_HOLDOVER_DURATION, "%d", PARM_PM_HOLDOVER_DURATION ); -//;? DBG_PARAM( DbgInfo, PARM_NAME_PROMISCUOUS_MODE, "\"%s\"", PARM_PROMISCUOUS_MODE ); -//;?#endif /* HCF_STA */ -#if 1 //;? (HCF_TYPE) & HCF_TYPE_AP - //;?should we restore this to allow smaller memory footprint - //;?I guess: no, since this is Debug mode only - DBG_PARAM(DbgInfo, PARM_NAME_OWN_DTIM_PERIOD, "%d", PARM_OWN_DTIM_PERIOD); - DBG_PARAM(DbgInfo, PARM_NAME_REJECT_ANY, "\"%s\"", PARM_REJECT_ANY); - DBG_PARAM(DbgInfo, PARM_NAME_EXCLUDE_UNENCRYPTED, "\"%s\"", PARM_EXCLUDE_UNENCRYPTED); - DBG_PARAM(DbgInfo, PARM_NAME_MULTICAST_PM_BUFFERING, "\"%s\"", PARM_MULTICAST_PM_BUFFERING); - DBG_PARAM(DbgInfo, PARM_NAME_INTRA_BSS_RELAY, "\"%s\"", PARM_INTRA_BSS_RELAY); -#ifdef USE_WDS - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD1, "%d", PARM_RTS_THRESHOLD1); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD2, "%d", PARM_RTS_THRESHOLD2); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD3, "%d", PARM_RTS_THRESHOLD3); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD4, "%d", PARM_RTS_THRESHOLD4); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD5, "%d", PARM_RTS_THRESHOLD5); - DBG_PARAM(DbgInfo, PARM_NAME_RTS_THRESHOLD6, "%d", PARM_RTS_THRESHOLD6); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE1, "%d", PARM_TX_RATE1); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE2, "%d", PARM_TX_RATE2); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE3, "%d", PARM_TX_RATE3); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE4, "%d", PARM_TX_RATE4); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE5, "%d", PARM_TX_RATE5); - DBG_PARAM(DbgInfo, PARM_NAME_TX_RATE6, "%d", PARM_TX_RATE6); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS1, "\"%pM\"", - PARM_WDS_ADDRESS1); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS2, "\"%pM\"", - PARM_WDS_ADDRESS2); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS3, "\"%pM\"", - PARM_WDS_ADDRESS3); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS4, "\"%pM\"", - PARM_WDS_ADDRESS4); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS5, "\"%pM\"", - PARM_WDS_ADDRESS5); - DBG_PARAM(DbgInfo, PARM_NAME_WDS_ADDRESS6, "\"%pM\"", - PARM_WDS_ADDRESS6); -#endif /* USE_WDS */ -#endif /* HCF_AP */ - - VALID_PARAM(!PARM_DESIRED_SSID || (strlen(PARM_DESIRED_SSID) <= PARM_MAX_NAME_LEN)); - VALID_PARAM(!PARM_OWN_SSID || (strlen(PARM_OWN_SSID) <= PARM_MAX_NAME_LEN)); - VALID_PARAM((PARM_OWN_CHANNEL <= PARM_MAX_OWN_CHANNEL)); - VALID_PARAM((PARM_SYSTEM_SCALE >= PARM_MIN_SYSTEM_SCALE) && (PARM_SYSTEM_SCALE <= PARM_MAX_SYSTEM_SCALE)); - VALID_PARAM((PARM_TX_RATE >= PARM_MIN_TX_RATE) && (PARM_TX_RATE <= PARM_MAX_TX_RATE)); - VALID_PARAM((PARM_RTS_THRESHOLD <= PARM_MAX_RTS_THRESHOLD)); - VALID_PARAM(!PARM_MICROWAVE_ROBUSTNESS || strchr("NnYy", PARM_MICROWAVE_ROBUSTNESS[0]) != NULL); - VALID_PARAM(!PARM_OWN_NAME || (strlen(PARM_NAME_OWN_NAME) <= PARM_MAX_NAME_LEN)); - VALID_PARAM((PARM_ENABLE_ENCRYPTION <= PARM_MAX_ENABLE_ENCRYPTION)); - VALID_PARAM(is_valid_key_string(PARM_KEY1)); - VALID_PARAM(is_valid_key_string(PARM_KEY2)); - VALID_PARAM(is_valid_key_string(PARM_KEY3)); - VALID_PARAM(is_valid_key_string(PARM_KEY4)); - VALID_PARAM((PARM_TX_KEY >= PARM_MIN_TX_KEY) && (PARM_TX_KEY <= PARM_MAX_TX_KEY)); - - VALID_PARAM((PARM_MULTICAST_RATE >= PARM_MIN_MULTICAST_RATE) && - (PARM_MULTICAST_RATE <= PARM_MAX_MULTICAST_RATE)); - - VALID_PARAM(!PARM_DOWNLOAD_FIRMWARE || (strlen(PARM_DOWNLOAD_FIRMWARE) <= 255 /*;?*/)); - VALID_PARAM((PARM_AUTH_KEY_MGMT_SUITE < PARM_MAX_AUTH_KEY_MGMT_SUITE)); - - VALID_PARAM(!PARM_LOAD_BALANCING || strchr("NnYy", PARM_LOAD_BALANCING[0]) != NULL); - VALID_PARAM( !PARM_MEDIUM_DISTRIBUTION || strchr( "NnYy", PARM_MEDIUM_DISTRIBUTION[0] ) != NULL ); - VALID_PARAM(( PARM_TX_POW_LEVEL <= PARM_MAX_TX_POW_LEVEL )); - - VALID_PARAM(( PARM_PORT_TYPE >= PARM_MIN_PORT_TYPE ) && ( PARM_PORT_TYPE <= PARM_MAX_PORT_TYPE )); - VALID_PARAM( PARM_PM_ENABLED <= WVLAN_PM_STATE_STANDARD || - ( PARM_PM_ENABLED & 0x7FFF ) <= WVLAN_PM_STATE_STANDARD ); - VALID_PARAM( !PARM_CREATE_IBSS || strchr( "NnYy", PARM_CREATE_IBSS[0] ) != NULL ); - VALID_PARAM( !PARM_MULTICAST_RX || strchr( "NnYy", PARM_MULTICAST_RX[0] ) != NULL ); - VALID_PARAM(( PARM_MAX_SLEEP <= PARM_MAX_MAX_PM_SLEEP )); - VALID_PARAM(( PARM_AUTHENTICATION <= PARM_MAX_AUTHENTICATION )); - VALID_PARAM(( PARM_OWN_ATIM_WINDOW <= PARM_MAX_OWN_ATIM_WINDOW )); - VALID_PARAM(( PARM_PM_HOLDOVER_DURATION <= PARM_MAX_PM_HOLDOVER_DURATION )); - VALID_PARAM( !PARM_PROMISCUOUS_MODE || strchr( "NnYy", PARM_PROMISCUOUS_MODE[0] ) != NULL ); - VALID_PARAM(( PARM_CONNECTION_CONTROL <= PARM_MAX_CONNECTION_CONTROL )); - - VALID_PARAM(( PARM_OWN_DTIM_PERIOD >= PARM_MIN_OWN_DTIM_PERIOD )); - VALID_PARAM( !PARM_REJECT_ANY || strchr( "NnYy", PARM_REJECT_ANY[0] ) != NULL ); - VALID_PARAM( !PARM_EXCLUDE_UNENCRYPTED || strchr( "NnYy", PARM_EXCLUDE_UNENCRYPTED[0] ) != NULL ); - VALID_PARAM( !PARM_MULTICAST_PM_BUFFERING || strchr( "NnYy", PARM_MULTICAST_PM_BUFFERING[0] ) != NULL ); - VALID_PARAM( !PARM_INTRA_BSS_RELAY || strchr( "NnYy", PARM_INTRA_BSS_RELAY[0] ) != NULL ); -#ifdef USE_WDS - VALID_PARAM(( PARM_RTS_THRESHOLD1 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_RTS_THRESHOLD2 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_RTS_THRESHOLD3 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_RTS_THRESHOLD4 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_RTS_THRESHOLD5 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_RTS_THRESHOLD6 <= PARM_MAX_RTS_THRESHOLD )); - VALID_PARAM(( PARM_TX_RATE1 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE1 <= PARM_MAX_TX_RATE )); - VALID_PARAM(( PARM_TX_RATE2 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE2 <= PARM_MAX_TX_RATE )); - VALID_PARAM(( PARM_TX_RATE3 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE3 <= PARM_MAX_TX_RATE )); - VALID_PARAM(( PARM_TX_RATE4 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE4 <= PARM_MAX_TX_RATE )); - VALID_PARAM(( PARM_TX_RATE5 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE5 <= PARM_MAX_TX_RATE )); - VALID_PARAM(( PARM_TX_RATE6 >= PARM_MIN_TX_RATE ) && (PARM_TX_RATE6 <= PARM_MAX_TX_RATE )); -#endif /* USE_WDS */ - - VALID_PARAM(( PARM_OWN_BEACON_INTERVAL >= PARM_MIN_OWN_BEACON_INTERVAL ) && ( PARM_OWN_BEACON_INTERVAL <= PARM_MAX_OWN_BEACON_INTERVAL )); - VALID_PARAM(( PARM_COEXISTENCE <= PARM_COEXISTENCE )); - - /* Set the driver parameters from the passed in parameters. */ - - /* THESE MODULE PARAMETERS ARE TO BE DEPRECATED IN FAVOR OF A NAMING CONVENTION - WHICH IS INLINE WITH THE FORTHCOMING WAVELAN API */ - - /* START NEW PARAMETERS */ - - lp->Channel = PARM_OWN_CHANNEL; - lp->DistanceBetweenAPs = PARM_SYSTEM_SCALE; - - /* Need to determine how to handle the new bands for 5GHz */ - lp->TxRateControl[0] = PARM_DEFAULT_TX_RATE_2GHZ; - lp->TxRateControl[1] = PARM_DEFAULT_TX_RATE_5GHZ; - - lp->RTSThreshold = PARM_RTS_THRESHOLD; - - /* Need to determine how to handle the new bands for 5GHz */ - lp->MulticastRate[0] = PARM_DEFAULT_MULTICAST_RATE_2GHZ; - lp->MulticastRate[1] = PARM_DEFAULT_MULTICAST_RATE_5GHZ; - - if ( strchr( "Yy", PARM_MICROWAVE_ROBUSTNESS[0] ) != NULL ) - lp->MicrowaveRobustness = 1; - else - lp->MicrowaveRobustness = 0; - if ( PARM_DESIRED_SSID && ( strlen( PARM_DESIRED_SSID ) <= HCF_MAX_NAME_LEN )) - strcpy( lp->NetworkName, PARM_DESIRED_SSID ); - if ( PARM_OWN_SSID && ( strlen( PARM_OWN_SSID ) <= HCF_MAX_NAME_LEN )) - strcpy( lp->NetworkName, PARM_OWN_SSID ); - if ( PARM_OWN_NAME && ( strlen( PARM_OWN_NAME ) <= HCF_MAX_NAME_LEN )) - strcpy( lp->StationName, PARM_OWN_NAME ); - lp->EnableEncryption = PARM_ENABLE_ENCRYPTION; - if ( PARM_KEY1 && ( strlen( PARM_KEY1 ) <= MAX_KEY_LEN )) - strcpy( lp->Key1, PARM_KEY1 ); - if ( PARM_KEY2 && ( strlen( PARM_KEY2 ) <= MAX_KEY_LEN )) - strcpy( lp->Key2, PARM_KEY2 ); - if ( PARM_KEY3 && ( strlen( PARM_KEY3 ) <= MAX_KEY_LEN )) - strcpy( lp->Key3, PARM_KEY3 ); - if ( PARM_KEY4 && ( strlen( PARM_KEY4 ) <= MAX_KEY_LEN )) - strcpy( lp->Key4, PARM_KEY4 ); - - lp->TransmitKeyID = PARM_TX_KEY; - - key_string2key( lp->Key1, &(lp->DefaultKeys.key[0] )); - key_string2key( lp->Key2, &(lp->DefaultKeys.key[1] )); - key_string2key( lp->Key3, &(lp->DefaultKeys.key[2] )); - key_string2key( lp->Key4, &(lp->DefaultKeys.key[3] )); - - lp->DownloadFirmware = 1 ; //;?to be upgraded PARM_DOWNLOAD_FIRMWARE; - lp->AuthKeyMgmtSuite = PARM_AUTH_KEY_MGMT_SUITE; - - if ( strchr( "Yy", PARM_LOAD_BALANCING[0] ) != NULL ) - lp->loadBalancing = 1; - else - lp->loadBalancing = 0; - - if ( strchr( "Yy", PARM_MEDIUM_DISTRIBUTION[0] ) != NULL ) - lp->mediumDistribution = 1; - else - lp->mediumDistribution = 0; - - lp->txPowLevel = PARM_TX_POW_LEVEL; - - lp->srsc[0] = PARM_SRSC_2GHZ; - lp->srsc[1] = PARM_SRSC_5GHZ; - lp->brsc[0] = PARM_BRSC_2GHZ; - lp->brsc[1] = PARM_BRSC_5GHZ; -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA -//;?seems reasonable that even an AP-only driver could afford this small additional footprint - lp->PortType = PARM_PORT_TYPE; - lp->MaxSleepDuration = PARM_MAX_SLEEP; - lp->authentication = PARM_AUTHENTICATION; - lp->atimWindow = PARM_OWN_ATIM_WINDOW; - lp->holdoverDuration = PARM_PM_HOLDOVER_DURATION; - lp->PMEnabled = PARM_PM_ENABLED; //;? - if ( strchr( "Yy", PARM_CREATE_IBSS[0] ) != NULL ) - lp->CreateIBSS = 1; - else - lp->CreateIBSS = 0; - if ( strchr( "Nn", PARM_MULTICAST_RX[0] ) != NULL ) - lp->MulticastReceive = 0; - else - lp->MulticastReceive = 1; - if ( strchr( "Yy", PARM_PROMISCUOUS_MODE[0] ) != NULL ) - lp->promiscuousMode = 1; - else - lp->promiscuousMode = 0; - for( i = 0; i < ETH_ALEN; i++ ) - lp->MACAddress[i] = PARM_NETWORK_ADDR[i]; - - lp->connectionControl = PARM_CONNECTION_CONTROL; - -#endif /* HCF_STA */ -#if 1 //;? (HCF_TYPE) & HCF_TYPE_AP - //;?should we restore this to allow smaller memory footprint - lp->DTIMPeriod = PARM_OWN_DTIM_PERIOD; - - if ( strchr( "Yy", PARM_REJECT_ANY[0] ) != NULL ) - lp->RejectAny = 1; - else - lp->RejectAny = 0; - if ( strchr( "Nn", PARM_EXCLUDE_UNENCRYPTED[0] ) != NULL ) - lp->ExcludeUnencrypted = 0; - else - lp->ExcludeUnencrypted = 1; - if ( strchr( "Yy", PARM_MULTICAST_PM_BUFFERING[0] ) != NULL ) - lp->multicastPMBuffering = 1; - else - lp->multicastPMBuffering = 0; - if ( strchr( "Yy", PARM_INTRA_BSS_RELAY[0] ) != NULL ) - lp->intraBSSRelay = 1; - else - lp->intraBSSRelay = 0; - - lp->ownBeaconInterval = PARM_OWN_BEACON_INTERVAL; - lp->coexistence = PARM_COEXISTENCE; - -#ifdef USE_WDS - lp->wds_port[0].rtsThreshold = PARM_RTS_THRESHOLD1; - lp->wds_port[1].rtsThreshold = PARM_RTS_THRESHOLD2; - lp->wds_port[2].rtsThreshold = PARM_RTS_THRESHOLD3; - lp->wds_port[3].rtsThreshold = PARM_RTS_THRESHOLD4; - lp->wds_port[4].rtsThreshold = PARM_RTS_THRESHOLD5; - lp->wds_port[5].rtsThreshold = PARM_RTS_THRESHOLD6; - lp->wds_port[0].txRateCntl = PARM_TX_RATE1; - lp->wds_port[1].txRateCntl = PARM_TX_RATE2; - lp->wds_port[2].txRateCntl = PARM_TX_RATE3; - lp->wds_port[3].txRateCntl = PARM_TX_RATE4; - lp->wds_port[4].txRateCntl = PARM_TX_RATE5; - lp->wds_port[5].txRateCntl = PARM_TX_RATE6; - - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[0].wdsAddress[i] = PARM_WDS_ADDRESS1[i]; - } - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[1].wdsAddress[i] = PARM_WDS_ADDRESS2[i]; - } - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[2].wdsAddress[i] = PARM_WDS_ADDRESS3[i]; - } - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[3].wdsAddress[i] = PARM_WDS_ADDRESS4[i]; - } - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[4].wdsAddress[i] = PARM_WDS_ADDRESS5[i]; - } - for( i = 0; i < ETH_ALEN; i++ ) { - lp->wds_port[5].wdsAddress[i] = PARM_WDS_ADDRESS6[i]; - } -#endif /* USE_WDS */ -#endif /* HCF_AP */ -#ifdef USE_RTS - if ( strchr( "Yy", useRTS[0] ) != NULL ) - lp->useRTS = 1; - else - lp->useRTS = 0; -#endif /* USE_RTS */ - - - /* END NEW PARAMETERS */ - - - wl_lock( lp, &flags ); - - /* Initialize the portState variable */ - lp->portState = WVLAN_PORT_STATE_DISABLED; - - /* Initialize the ScanResult struct */ - memset( &( lp->scan_results ), 0, sizeof( lp->scan_results )); - lp->scan_results.scan_complete = FALSE; - - /* Initialize the ProbeResult struct */ - memset( &( lp->probe_results ), 0, sizeof( lp->probe_results )); - lp->probe_results.scan_complete = FALSE; - lp->probe_num_aps = 0; - - - /* Initialize Tx queue stuff */ - memset( lp->txList, 0, sizeof( lp->txList )); - - INIT_LIST_HEAD( &( lp->txFree )); - - lp->txF.skb = NULL; - lp->txF.port = 0; - - - for( i = 0; i < DEFAULT_NUM_TX_FRAMES; i++ ) { - list_add_tail( &( lp->txList[i].node ), &( lp->txFree )); - } - - - for( i = 0; i < WVLAN_MAX_TX_QUEUES; i++ ) { - INIT_LIST_HEAD( &( lp->txQ[i] )); - } - - lp->netif_queue_on = TRUE; - lp->txQ_count = 0; - /* Initialize the use_dma element in the adapter structure. Not sure if - this should be a compile-time or run-time configurable. So for now, - implement as run-time and just define here */ -#ifdef WARP -#ifdef ENABLE_DMA - DBG_TRACE( DbgInfo, "HERMES 2.5 BUSMASTER DMA MODE\n" ); - lp->use_dma = 1; -#else - DBG_TRACE( DbgInfo, "HERMES 2.5 PORT I/O MODE\n" ); - lp->use_dma = 0; -#endif // ENABLE_DMA -#endif // WARP - - /* Register the ISR handler information here, so that it's not done - repeatedly in the ISR */ - tasklet_init(&lp->task, wl_isr_handler, (unsigned long)lp); - - /* Connect to the adapter */ - DBG_TRACE( DbgInfo, "Calling hcf_connect()...\n" ); - hcf_status = hcf_connect( &lp->hcfCtx, dev->base_addr ); - //HCF_ERR_INCOMP_FW is acceptable, because download must still take place - //HCF_ERR_INCOMP_PRI is not acceptable - if ( hcf_status != HCF_SUCCESS && hcf_status != HCF_ERR_INCOMP_FW ) { - DBG_ERROR( DbgInfo, "hcf_connect() failed, status: 0x%x\n", hcf_status ); - wl_unlock( lp, &flags ); - goto hcf_failed; - } - - //;?should set HCF_version and how about driver_stat - lp->driverInfo.IO_address = dev->base_addr; - lp->driverInfo.IO_range = HCF_NUM_IO_PORTS; //;?conditionally 0x40 or 0x80 seems better - lp->driverInfo.IRQ_number = dev->irq; - lp->driverInfo.card_stat = lp->hcfCtx.IFB_CardStat; - //;? what happened to frame_type - - /* Fill in the driver identity structure */ - lp->driverIdentity.len = ( sizeof( lp->driverIdentity ) / sizeof( hcf_16 )) - 1; - lp->driverIdentity.typ = CFG_DRV_IDENTITY; - lp->driverIdentity.comp_id = DRV_IDENTITY; - lp->driverIdentity.variant = DRV_VARIANT; - lp->driverIdentity.version_major = DRV_MAJOR_VERSION; - lp->driverIdentity.version_minor = DRV_MINOR_VERSION; - - - /* Start the card here - This needs to be done in order to get the - MAC address for the network layer */ - DBG_TRACE( DbgInfo, "Calling wvlan_go() to perform a card reset...\n" ); - hcf_status = wl_go( lp ); - - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "wl_go() failed\n" ); - wl_unlock( lp, &flags ); - goto hcf_failed; - } - - /* Certain RIDs must be set before enabling the ports */ - wl_put_ltv_init( lp ); - -#if 0 //;?why was this already commented out in wl_lkm_720 - /* Enable the ports */ - if ( wl_adapter_is_open( lp->dev )) { - /* Enable the ports */ - DBG_TRACE( DbgInfo, "Enabling Port 0\n" ); - hcf_status = wl_enable( lp ); - - if ( hcf_status != HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "Enable port 0 failed: 0x%x\n", hcf_status ); - } - -#if (HCF_TYPE) & HCF_TYPE_AP - DBG_TRACE( DbgInfo, "Enabling WDS Ports\n" ); - //wl_enable_wds_ports( lp ); -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - } -#endif - - /* Fill out the MAC address information in the net_device struct */ - memcpy( lp->dev->dev_addr, lp->MACAddress, ETH_ALEN ); - dev->addr_len = ETH_ALEN; - - lp->is_registered = TRUE; - -#ifdef USE_PROFILE - /* Parse the config file for the sake of creating WDS ports if WDS is - configured there but not in the module options */ - parse_config( dev ); -#endif /* USE_PROFILE */ - - /* If we're going into AP Mode, register the "virtual" ethernet devices - needed for WDS */ - WL_WDS_NETDEV_REGISTER( lp ); - - /* Reset the DownloadFirmware variable in the private struct. If the - config file is not used, this will not matter; if it is used, it - will be reparsed in wl_open(). This is done because logic in wl_open - used to check if a firmware download is needed is broken by parsing - the file here; however, this parsing is needed to register WDS ports - in AP mode, if they are configured */ - lp->DownloadFirmware = WVLAN_DRV_MODE_STA; //;?download_firmware; - -#ifdef USE_RTS - if ( lp->useRTS == 1 ) { - DBG_TRACE( DbgInfo, "ENTERING RTS MODE...\n" ); - wl_act_int_off( lp ); - lp->is_handling_int = WL_NOT_HANDLING_INT; // Not handling interrupts anymore - - wl_disable( lp ); - - hcf_connect( &lp->hcfCtx, HCF_DISCONNECT); - } -#endif /* USE_RTS */ - - wl_unlock( lp, &flags ); - - DBG_TRACE( DbgInfo, "%s: Wireless, io_addr %#03lx, irq %d, ""mac_address ", - dev->name, dev->base_addr, dev->irq ); - - for( i = 0; i < ETH_ALEN; i++ ) { - printk( "%02X%c", dev->dev_addr[i], (( i < ( ETH_ALEN-1 )) ? ':' : '\n' )); - } - -#if 0 //SCULL_USE_PROC /* don't waste space if unused */ - proc_create_data( "wlags", 0, NULL, &scull_read_procmem_fops, dev ); - proc_mkdir("driver/wlags49", 0); -#endif /* SCULL_USE_PROC */ - - return result; - -hcf_failed: - wl_hcf_error( dev, hcf_status ); - -failed: - - DBG_ERROR( DbgInfo, "wl_insert() FAILED\n" ); - - if ( lp->is_registered == TRUE ) { - lp->is_registered = FALSE; - } - - WL_WDS_NETDEV_DEREGISTER( lp ); - - result = -EFAULT; - - return result; -} // wl_insert -/*============================================================================*/ - - -/******************************************************************************* - * wl_reset() - ******************************************************************************* - * - * DESCRIPTION: - * - * Reset the adapter. - * - * PARAMETERS: - * - * dev - a pointer to the net_device struct of the wireless device - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_reset(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - int hcf_status = HCF_SUCCESS; - - DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); - DBG_PARAM( DbgInfo, "dev->base_addr", "(%#03lx)", dev->base_addr ); - - /* - * The caller should already have a lock and - * disable the interrupts, we do not lock here, - * nor do we enable/disable interrupts! - */ - - DBG_TRACE( DbgInfo, "Device Base Address: %#03lx\n", dev->base_addr ); - if ( dev->base_addr ) { - /* Shutdown the adapter. */ - hcf_connect( &lp->hcfCtx, HCF_DISCONNECT ); - - /* Reset the driver information. */ - lp->txBytes = 0; - - /* Connect to the adapter. */ - hcf_status = hcf_connect( &lp->hcfCtx, dev->base_addr ); - if ( hcf_status != HCF_SUCCESS && hcf_status != HCF_ERR_INCOMP_FW ) { - DBG_ERROR( DbgInfo, "hcf_connect() failed, status: 0x%x\n", hcf_status ); - goto out; - } - - /* Check if firmware is present, if not change state */ - if ( hcf_status == HCF_ERR_INCOMP_FW ) { - lp->firmware_present = WL_FRIMWARE_NOT_PRESENT; - } - - /* Initialize the portState variable */ - lp->portState = WVLAN_PORT_STATE_DISABLED; - - /* Restart the adapter. */ - hcf_status = wl_go( lp ); - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "wl_go() failed, status: 0x%x\n", hcf_status ); - goto out; - } - - /* Certain RIDs must be set before enabling the ports */ - wl_put_ltv_init( lp ); - } else { - DBG_ERROR( DbgInfo, "Device Base Address INVALID!!!\n" ); - } - -out: - return hcf_status; -} // wl_reset -/*============================================================================*/ - - -/******************************************************************************* - * wl_go() - ******************************************************************************* - * - * DESCRIPTION: - * - * Reset the adapter. - * - * PARAMETERS: - * - * dev - a pointer to the net_device struct of the wireless device - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_go( struct wl_private *lp ) -{ - int hcf_status = HCF_SUCCESS; - char *cp = NULL; //fw_image - int retries = 0; - - hcf_status = wl_disable( lp ); - if ( hcf_status != HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "Disable port 0 failed: 0x%x\n", hcf_status ); - - while (( hcf_status != HCF_SUCCESS ) && (retries < 10)) { - retries++; - hcf_status = wl_disable( lp ); - } - if ( hcf_status == HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "Disable port 0 succes : %d retries\n", retries ); - } else { - DBG_TRACE( DbgInfo, "Disable port 0 failed after: %d retries\n", retries ); - } - } - -#if 1 //;? (HCF_TYPE) & HCF_TYPE_AP - //DBG_TRACE( DbgInfo, "Disabling WDS Ports\n" ); - //wl_disable_wds_ports( lp ); -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - -//;?what was the purpose of this -// /* load the appropriate firmware image, depending on driver mode */ -// lp->ltvRecord.len = ( sizeof( CFG_RANGE20_STRCT ) / sizeof( hcf_16 )) - 1; -// lp->ltvRecord.typ = CFG_DRV_ACT_RANGES_PRI; -// hcf_get_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - -#if BIN_DL - if ( strlen( lp->fw_image_filename ) ) { -mm_segment_t fs; -int file_desc; -int rc; - - DBG_TRACE( DbgInfo, "F/W image:%s:\n", lp->fw_image_filename ); - /* Obtain a user-space process context, storing the original context */ - fs = get_fs( ); - set_fs( get_ds( )); - file_desc = open( lp->fw_image_filename, O_RDONLY, 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 - 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 ) { //;/change to an until-loop at 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 ); - DBG_ERROR( DbgInfo, "still have to change code to get a real download now !!!!!!!!\n" ); - } else { - DBG_TRACE( DbgInfo, "before dhf_download_binary\n" ); - hcf_status = dhf_download_binary( (memimage *)cp ); - DBG_TRACE( DbgInfo, "after dhf_download_binary, before dhf_download_fw\n" ); - //;?improve error flow/handling - hcf_status = dhf_download_fw( &lp->hcfCtx, (memimage *)cp ); - DBG_TRACE( DbgInfo, "after dhf_download_fw\n" ); - } - vfree( cp ); - } - close( file_desc ); - } - set_fs( fs ); /* Return to the original context */ - } -#endif // BIN_DL - - /* If firmware is present but the type is unknown then download anyway */ - if ( (lp->firmware_present == WL_FRIMWARE_PRESENT) - && - ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) != COMP_ID_FW_STA ) - && - ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) != COMP_ID_FW_AP ) ) { - /* Unknown type, download needed. */ - lp->firmware_present = WL_FRIMWARE_NOT_PRESENT; - } - - if(lp->firmware_present == WL_FRIMWARE_NOT_PRESENT) - { - if ( cp == NULL ) { - DBG_TRACE( DbgInfo, "Downloading STA firmware...\n" ); -// hcf_status = dhf_download_fw( &lp->hcfCtx, &station ); - hcf_status = dhf_download_fw( &lp->hcfCtx, &fw_image ); - } - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "Firmware Download failed\n" ); - return hcf_status; - } - } - /* Report the FW versions */ - //;?obsolete, use the available IFB info:: wl_get_pri_records( lp ); - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { - DBG_TRACE( DbgInfo, "downloaded station F/W\n" ); - } else if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - DBG_TRACE( DbgInfo, "downloaded AP F/W\n" ); - } else { - DBG_ERROR( DbgInfo, "unknown F/W type\n" ); - } - - /* - * Downloaded, no need to repeat this next time, assume the - * contents stays in the card until it is powered off. Note we - * do not switch firmware on the fly, the firmware is fixed in - * the driver for now. - */ - lp->firmware_present = WL_FRIMWARE_PRESENT; - - DBG_TRACE( DbgInfo, "ComponentID:%04x variant:%04x major:%04x minor:%04x\n", - CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ), - CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.variant ), - CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.version_major ), - CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.version_minor )); - - /* now we will get the MAC address of the card */ - lp->ltvRecord.len = 4; - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - lp->ltvRecord.typ = CFG_NIC_MAC_ADDR; - } else - { - lp->ltvRecord.typ = CFG_CNF_OWN_MAC_ADDR; - } - hcf_status = hcf_get_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "Could not retrieve MAC address\n" ); - return hcf_status; - } - memcpy( lp->MACAddress, &lp->ltvRecord.u.u8[0], ETH_ALEN ); - DBG_TRACE(DbgInfo, "Card MAC Address: %pM\n", lp->MACAddress); - - /* Write out configuration to the device, enable, and reconnect. However, - only reconnect if in AP mode. For STA mode, need to wait for passive scan - completion before a connect can be issued */ - wl_put_ltv( lp ); - /* Enable the ports */ - hcf_status = wl_enable( lp ); - - if ( lp->DownloadFirmware == WVLAN_DRV_MODE_AP ) { -#ifdef USE_WDS - wl_enable_wds_ports( lp ); -#endif // USE_WDS - hcf_status = wl_connect( lp ); - } - return hcf_status; -} // wl_go -/*============================================================================*/ - - -/******************************************************************************* - * wl_set_wep_keys() - ******************************************************************************* - * - * DESCRIPTION: - * - * Write TxKeyID and WEP keys to the adapter. This is separated from - * wl_apply() to allow dynamic WEP key updates through the wireless - * extensions. - * - * PARAMETERS: - * - * lp - a pointer to the wireless adapter's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_set_wep_keys( struct wl_private *lp ) -{ - int count = 0; - - DBG_PARAM( DbgInfo, "lp", "%s (0x%p)", lp->dev->name, lp ); - if ( lp->EnableEncryption ) { - /* NOTE: CFG_CNF_ENCRYPTION is set in wl_put_ltv() as it's a static - RID */ - - /* set TxKeyID */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_KEY_ID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->TransmitKeyID - 1); - - hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - DBG_TRACE( DbgInfo, "Key 1 len: %d\n", lp->DefaultKeys.key[0].len ); - DBG_TRACE( DbgInfo, "Key 2 len: %d\n", lp->DefaultKeys.key[1].len ); - DBG_TRACE( DbgInfo, "Key 3 len: %d\n", lp->DefaultKeys.key[2].len ); - DBG_TRACE( DbgInfo, "Key 4 len: %d\n", lp->DefaultKeys.key[3].len ); - - /* write keys */ - lp->DefaultKeys.len = sizeof( lp->DefaultKeys ) / sizeof( hcf_16 ) - 1; - lp->DefaultKeys.typ = CFG_DEFAULT_KEYS; - - /* endian translate the appropriate key information */ - for( count = 0; count < MAX_KEYS; count++ ) { - lp->DefaultKeys.key[count].len = CNV_INT_TO_LITTLE( lp->DefaultKeys.key[count].len ); - } - - hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->DefaultKeys )); - - /* Reverse the above endian translation, since these keys are accessed - elsewhere */ - for( count = 0; count < MAX_KEYS; count++ ) { - lp->DefaultKeys.key[count].len = CNV_INT_TO_LITTLE( lp->DefaultKeys.key[count].len ); - } - - DBG_NOTICE( DbgInfo, "encrypt: %d, ID: %d\n", lp->EnableEncryption, lp->TransmitKeyID ); - DBG_NOTICE( DbgInfo, "set key: %s(%d) [%d]\n", lp->DefaultKeys.key[lp->TransmitKeyID-1].key, lp->DefaultKeys.key[lp->TransmitKeyID-1].len, lp->TransmitKeyID-1 ); - } -} // wl_set_wep_keys -/*============================================================================*/ - - -/******************************************************************************* - * wl_apply() - ******************************************************************************* - * - * DESCRIPTION: - * - * Write the parameters to the adapter. (re-)enables the card if device is - * open. Returns hcf_status of hcf_enable(). - * - * PARAMETERS: - * - * lp - a pointer to the wireless adapter's private structure - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_apply(struct wl_private *lp) -{ - int hcf_status = HCF_SUCCESS; - - DBG_ASSERT( lp != NULL); - DBG_PARAM( DbgInfo, "lp", "%s (0x%p)", lp->dev->name, lp ); - - if ( !( lp->flags & WVLAN2_UIL_BUSY )) { - /* The adapter parameters have changed: - disable card - reload parameters - enable card - */ - - if ( wl_adapter_is_open( lp->dev )) { - /* Disconnect and disable if necessary */ - hcf_status = wl_disconnect( lp ); - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "Disconnect failed\n" ); - return -1; - } - hcf_status = wl_disable( lp ); - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "Disable failed\n" ); - return -1; - } else { - /* Write out configuration to the device, enable, and reconnect. - However, only reconnect if in AP mode. For STA mode, need to - wait for passive scan completion before a connect can be - issued */ - hcf_status = wl_put_ltv( lp ); - - if ( hcf_status == HCF_SUCCESS ) { - hcf_status = wl_enable( lp ); - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - hcf_status = wl_connect( lp ); - } - } else { - DBG_WARNING( DbgInfo, "wl_put_ltv() failed\n" ); - } - } - } - } - - return hcf_status; -} // wl_apply -/*============================================================================*/ - - -/******************************************************************************* - * wl_put_ltv_init() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to set basic parameters for card initialization. - * - * PARAMETERS: - * - * lp - a pointer to the wireless adapter's private structure - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_put_ltv_init( struct wl_private *lp ) -{ - int i; - int hcf_status; - CFG_RID_LOG_STRCT *RidLog; - - if ( lp == NULL ) { - DBG_ERROR( DbgInfo, "lp pointer is NULL\n" ); - return -1; - } - /* DMA/IO */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNTL_OPT; - - /* The Card Services build must ALWAYS be configured for 16-bit I/O. PCI or - CardBus can be set to either 16/32 bit I/O, or Bus Master DMA, but only - for Hermes-2.5 */ -#ifdef BUS_PCMCIA - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( USE_16BIT ); -#else - if ( lp->use_dma ) { - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( USE_DMA ); - } else { - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - } - -#endif - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - DBG_TRACE( DbgInfo, "CFG_CNTL_OPT : 0x%04x\n", - lp->ltvRecord.u.u16[0] ); - DBG_TRACE( DbgInfo, "CFG_CNTL_OPT result : 0x%04x\n", - hcf_status ); - - /* Register the list of RIDs on which asynchronous notification is - required. Note that this mechanism replaces the mailbox, so the mailbox - can be queried by the host (if desired) without contention from us */ - i=0; - - lp->RidList[i].len = sizeof( lp->ProbeResp ); - lp->RidList[i].typ = CFG_ACS_SCAN; - lp->RidList[i].bufp = (wci_recordp)&lp->ProbeResp; - //lp->ProbeResp.infoType = 0xFFFF; - i++; - - lp->RidList[i].len = sizeof( lp->assoc_stat ); - lp->RidList[i].typ = CFG_ASSOC_STAT; - lp->RidList[i].bufp = (wci_recordp)&lp->assoc_stat; - lp->assoc_stat.len = 0xFFFF; - i++; - - lp->RidList[i].len = 4; - lp->RidList[i].typ = CFG_UPDATED_INFO_RECORD; - lp->RidList[i].bufp = (wci_recordp)&lp->updatedRecord; - lp->updatedRecord.len = 0xFFFF; - i++; - - lp->RidList[i].len = sizeof( lp->sec_stat ); - lp->RidList[i].typ = CFG_SECURITY_STAT; - lp->RidList[i].bufp = (wci_recordp)&lp->sec_stat; - lp->sec_stat.len = 0xFFFF; - i++; - - lp->RidList[i].typ = 0; // Terminate List - - RidLog = (CFG_RID_LOG_STRCT *)&lp->ltvRecord; - RidLog->len = 3; - RidLog->typ = CFG_REG_INFO_LOG; - RidLog->recordp = (RID_LOGP)&lp->RidList[0]; - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - DBG_TRACE( DbgInfo, "CFG_REG_INFO_LOG\n" ); - DBG_TRACE( DbgInfo, "CFG_REG_INFO_LOG result : 0x%04x\n", - hcf_status ); - return hcf_status; -} // wl_put_ltv_init -/*============================================================================*/ - - -/******************************************************************************* - * wl_put_ltv() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used by wvlan_apply() and wvlan_go to set the card's configuration. - * - * PARAMETERS: - * - * lp - a pointer to the wireless adapter's private structure - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_put_ltv( struct wl_private *lp ) -{ - int len; - int hcf_status; - - if ( lp == NULL ) { - DBG_ERROR( DbgInfo, "lp pointer is NULL\n" ); - return -1; - } - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - lp->maxPort = 6; //;?why set this here and not as part of download process - } else { - lp->maxPort = 0; - } - - /* Send our configuration to the card. Perform any endian translation - necessary */ - /* Register the Mailbox; VxWorks does this elsewhere; why;? */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_REG_MB; - lp->ltvRecord.u.u32[0] = (u_long)&( lp->mailbox ); - lp->ltvRecord.u.u16[2] = ( MB_SIZE / sizeof( hcf_16 )); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Max Data Length */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MAX_DATA_LEN; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( HCF_MAX_PACKET_SIZE ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* System Scale / Distance between APs */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_SYSTEM_SCALE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->DistanceBetweenAPs ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Channel */ - if ( lp->CreateIBSS && ( lp->Channel == 0 )) { - DBG_TRACE( DbgInfo, "Create IBSS" ); - lp->Channel = 10; - } - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_OWN_CHANNEL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->Channel ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Microwave Robustness */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MICRO_WAVE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->MicrowaveRobustness ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Load Balancing */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_LOAD_BALANCING; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->loadBalancing ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Medium Distribution */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MEDIUM_DISTRIBUTION; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->mediumDistribution ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - /* Country Code */ - -#ifdef WARP - /* Tx Power Level (for supported cards) */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_TX_POW_LVL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->txPowLevel ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Short Retry Limit */ - /*lp->ltvRecord.len = 2; - lp->ltvRecord.typ = 0xFC32; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->shortRetryLimit ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - */ - - /* Long Retry Limit */ - /*lp->ltvRecord.len = 2; - lp->ltvRecord.typ = 0xFC33; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->longRetryLimit ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - */ - - /* Supported Rate Set Control */ - lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_SUPPORTED_RATE_SET_CNTL; //0xFC88; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->srsc[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->srsc[1] ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Basic Rate Set Control */ - lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_BASIC_RATE_SET_CNTL; //0xFC89; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->brsc[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->brsc[1] ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Frame Burst Limit */ - /* Defined, but not currently available in Firmware */ - -#endif // WARP - -#ifdef WARP - /* Multicast Rate */ - lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_CNF_MCAST_RATE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->MulticastRate[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->MulticastRate[1] ); -#else - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MCAST_RATE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->MulticastRate[0] ); -#endif // WARP - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Own Name (Station Nickname) */ - len = (strlen(lp->StationName) + 1) & ~0x01; - if (len != 0) { - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_NAME : %s\n", - // lp->StationName ); - - lp->ltvRecord.len = 2 + ( len / sizeof( hcf_16 )); - lp->ltvRecord.typ = CFG_CNF_OWN_NAME; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( strlen( lp->StationName )); - - memcpy( &( lp->ltvRecord.u.u8[2] ), lp->StationName, len ); - } else { - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_NAME : EMPTY\n" ); - - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_OWN_NAME; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - } - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_NAME result : 0x%04x\n", - // hcf_status ); - - /* The following are set in STA mode only */ - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { - - /* RTS Threshold */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->RTSThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Port Type */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_PORT_TYPE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->PortType ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Tx Rate Control */ -#ifdef WARP - lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->TxRateControl[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->TxRateControl[1] ); -#else - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->TxRateControl[0] ); -#endif // WARP - -//;?skip temporarily to see whether the RID or something else is the problem hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - DBG_TRACE( DbgInfo, "CFG_TX_RATE_CNTL 2.4GHz : 0x%04x\n", - lp->TxRateControl[0] ); - DBG_TRACE( DbgInfo, "CFG_TX_RATE_CNTL 5.0GHz : 0x%04x\n", - lp->TxRateControl[1] ); - DBG_TRACE( DbgInfo, "CFG_TX_RATE_CNTL result : 0x%04x\n", - hcf_status ); - /* Power Management */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_PM_ENABLED; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->PMEnabled ); -// lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0x8001 ); - DBG_TRACE( DbgInfo, "CFG_CNF_PM_ENABLED : 0x%04x\n", lp->PMEnabled ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - /* Multicast Receive */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MCAST_RX; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->MulticastReceive ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Max Sleep Duration */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MAX_SLEEP_DURATION; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->MaxSleepDuration ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Create IBSS */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CREATE_IBSS; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->CreateIBSS ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Desired SSID */ - if ((( len = ( strlen( lp->NetworkName ) + 1 ) & ~0x01 ) != 0 ) && - ( strcmp( lp->NetworkName, "ANY" ) != 0 ) && - ( strcmp( lp->NetworkName, "any" ) != 0 )) { - //DBG_TRACE( DbgInfo, "CFG_DESIRED_SSID : %s\n", - // lp->NetworkName ); - - lp->ltvRecord.len = 2 + (len / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_DESIRED_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( strlen( lp->NetworkName )); - - memcpy( &( lp->ltvRecord.u.u8[2] ), lp->NetworkName, len ); - } else { - //DBG_TRACE( DbgInfo, "CFG_DESIRED_SSID : ANY\n" ); - - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_DESIRED_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - } - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - //DBG_TRACE( DbgInfo, "CFG_DESIRED_SSID result : 0x%04x\n", - // hcf_status ); - /* Own ATIM window */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_OWN_ATIM_WINDOW; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->atimWindow ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - - /* Holdover Duration */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_HOLDOVER_DURATION; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->holdoverDuration ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Promiscuous Mode */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_PROMISCUOUS_MODE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->promiscuousMode ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Authentication */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_AUTHENTICATION; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->authentication ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); -#ifdef WARP - /* Connection Control */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_CONNECTION_CNTL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->connectionControl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - - - /* Probe data rate */ - /*lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_PROBE_DATA_RATE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->probeDataRates[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->probeDataRates[1] ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - DBG_TRACE( DbgInfo, "CFG_PROBE_DATA_RATE 2.4GHz : 0x%04x\n", - lp->probeDataRates[0] ); - DBG_TRACE( DbgInfo, "CFG_PROBE_DATA_RATE 5.0GHz : 0x%04x\n", - lp->probeDataRates[1] ); - DBG_TRACE( DbgInfo, "CFG_PROBE_DATA_RATE result : 0x%04x\n", - hcf_status );*/ -#endif // WARP - } else { - /* The following are set in AP mode only */ -#if 0 //;? (HCF_TYPE) & HCF_TYPE_AP - //;?should we restore this to allow smaller memory footprint - - /* DTIM Period */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_OWN_DTIM_PERIOD; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->DTIMPeriod ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Multicast PM Buffering */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_MCAST_PM_BUF; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->multicastPMBuffering ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Reject ANY - Closed System */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_REJECT_ANY; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->RejectAny ); - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Exclude Unencrypted */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_EXCL_UNENCRYPTED; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->ExcludeUnencrypted ); - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* IntraBSS Relay */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_INTRA_BSS_RELAY; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->intraBSSRelay ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* RTS Threshold 0 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH0; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->RTSThreshold ); - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Tx Rate Control 0 */ -#ifdef WARP - lp->ltvRecord.len = 3; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL0; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->TxRateControl[0] ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( lp->TxRateControl[1] ); -#else - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL0; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->TxRateControl[0] ); -#endif // WARP - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Own Beacon Interval */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = 0xFC31; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->ownBeaconInterval ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Co-Existence Behavior */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = 0xFCC7; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->coexistence ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - -#ifdef USE_WDS - - /* RTS Threshold 1 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH1; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[0].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* RTS Threshold 2 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH2; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[1].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - - /* RTS Threshold 3 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH3; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[2].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - - /* RTS Threshold 4 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH4; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[3].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - - /* RTS Threshold 5 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH5; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[4].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* RTS Threshold 6 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_RTS_THRH6; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[5].rtsThreshold ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); -#if 0 - /* TX Rate Control 1 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL1; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[0].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* TX Rate Control 2 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL2; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[1].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* TX Rate Control 3 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL3; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[2].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* TX Rate Control 4 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL4; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[3].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* TX Rate Control 5 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL5; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[4].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* TX Rate Control 6 */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_TX_RATE_CNTL6; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->wds_port[5].txRateCntl ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - -#endif - - /* WDS addresses. It's okay to blindly send these parameters, because - the port needs to be enabled, before anything is done with it. */ - - /* WDS Address 1 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR1; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[0].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* WDS Address 2 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR2; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[1].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* WDS Address 3 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR3; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[2].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* WDS Address 4 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR4; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[3].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* WDS Address 5 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR5; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[4].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* WDS Address 6 */ - lp->ltvRecord.len = 4; - lp->ltvRecord.typ = CFG_CNF_WDS_ADDR6; - - memcpy( &lp->ltvRecord.u.u8[0], lp->wds_port[5].wdsAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); -#endif /* USE_WDS */ -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - } - - /* Own MAC Address */ -/* - DBG_TRACE(DbgInfo, "MAC Address : %pM\n", - lp->MACAddress); - */ - - if ( WVLAN_VALID_MAC_ADDRESS( lp->MACAddress )) { - /* Make the MAC address valid by: - Clearing the multicast bit - Setting the local MAC address bit - */ - //lp->MACAddress[0] &= ~0x03; //;?why is this commented out already in 720 - //lp->MACAddress[0] |= 0x02; - - lp->ltvRecord.len = 1 + ( ETH_ALEN / sizeof( hcf_16 )); - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - //DBG_TRACE( DbgInfo, "CFG_NIC_MAC_ADDR\n" ); - lp->ltvRecord.typ = CFG_NIC_MAC_ADDR; - } else { - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_MAC_ADDR\n" ); - lp->ltvRecord.typ = CFG_CNF_OWN_MAC_ADDR; - } - /* MAC address is byte aligned, no endian conversion needed */ - memcpy( &( lp->ltvRecord.u.u8[0] ), lp->MACAddress, ETH_ALEN ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - //DBG_TRACE( DbgInfo, "CFG_XXX_MAC_ADDR result : 0x%04x\n", - // hcf_status ); - - /* Update the MAC address in the netdevice struct */ - memcpy( lp->dev->dev_addr, lp->MACAddress, ETH_ALEN ); //;?what is the purpose of this seemingly complex logic - } - /* Own SSID */ - if ((( len = ( strlen( lp->NetworkName ) + 1 ) & ~0x01 ) != 0 ) && - ( strcmp( lp->NetworkName, "ANY" ) != 0 ) && - ( strcmp( lp->NetworkName, "any" ) != 0 )) { - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_SSID : %s\n", - // lp->NetworkName ); - lp->ltvRecord.len = 2 + (len / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CNF_OWN_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( strlen( lp->NetworkName )); - - memcpy( &( lp->ltvRecord.u.u8[2] ), lp->NetworkName, len ); - } else { - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_SSID : ANY\n" ); - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_OWN_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - } - - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - //DBG_TRACE( DbgInfo, "CFG_CNF_OWN_SSID result : 0x%04x\n", - // hcf_status ); - /* enable/disable encryption */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_ENCRYPTION; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->EnableEncryption ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* Set the Authentication Key Management Suite */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_SET_WPA_AUTH_KEY_MGMT_SUITE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( lp->AuthKeyMgmtSuite ); - hcf_status = hcf_put_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - /* If WEP (or no) keys are being used, write (or clear) them */ - if (lp->wext_enc != IW_ENCODE_ALG_TKIP) - wl_set_wep_keys(lp); - - /* Country Code */ - /* countryInfo, ltvCountryInfo, CFG_CNF_COUNTRY_INFO */ - - return hcf_status; -} // wl_put_ltv -/*============================================================================*/ - - -/******************************************************************************* - * init_module() - ******************************************************************************* - * - * DESCRIPTION: - * - * Load the kernel module. - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * 0 on success - * an errno value otherwise - * - ******************************************************************************/ -static int __init wl_module_init( void ) -{ - int result; - /*------------------------------------------------------------------------*/ - - -#if DBG - /* Convert "standard" PCMCIA parameter pc_debug to a reasonable DebugFlag value. - * NOTE: The values all fall through to the lower values. */ - DbgInfo->DebugFlag = 0; - DbgInfo->DebugFlag = DBG_TRACE_ON; //;?get this mess resolved one day - if ( pc_debug ) switch( pc_debug ) { - case 8: - DbgInfo->DebugFlag |= DBG_DS_ON; - case 7: - DbgInfo->DebugFlag |= DBG_RX_ON | DBG_TX_ON; - case 6: - DbgInfo->DebugFlag |= DBG_PARAM_ON; - case 5: - DbgInfo->DebugFlag |= DBG_TRACE_ON; - case 4: - DbgInfo->DebugFlag |= DBG_VERBOSE_ON; - case 1: - DbgInfo->DebugFlag |= DBG_DEFAULTS; - default: - break; - } -#endif /* DBG */ - - printk(KERN_INFO "%s\n", VERSION_INFO); - printk(KERN_INFO "*** Modified for kernel 2.6 by Henk de Groot \n"); - printk(KERN_INFO "*** Based on 7.18 version by Andrey Borzenkov $Revision: 39 $\n"); - - -// ;?#if (HCF_TYPE) & HCF_TYPE_AP -// DBG_PRINT( "Access Point Mode (AP) Support: YES\n" ); -// #else -// DBG_PRINT( "Access Point Mode (AP) Support: NO\n" ); -// #endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - result = wl_adapter_init_module( ); - return result; -} // init_module -/*============================================================================*/ - - -/******************************************************************************* - * cleanup_module() - ******************************************************************************* - * - * DESCRIPTION: - * - * Unload the kernel module. - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -static void __exit wl_module_exit( void ) -{ - wl_adapter_cleanup_module( ); -#if 0 //SCULL_USE_PROC /* don't waste space if unused */ - remove_proc_entry( "wlags", NULL ); //;?why so a-symmetric compared to location of proc_create_data -#endif -} // cleanup_module -/*============================================================================*/ - -module_init(wl_module_init); -module_exit(wl_module_exit); - -/******************************************************************************* - * wl_isr() - ******************************************************************************* - * - * DESCRIPTION: - * - * The Interrupt Service Routine for the driver. - * - * PARAMETERS: - * - * irq - the irq the interrupt came in on - * dev_id - a buffer containing information about the request - * regs - - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -irqreturn_t wl_isr( int irq, void *dev_id, struct pt_regs *regs ) -{ - int events; - struct net_device *dev = (struct net_device *) dev_id; - struct wl_private *lp = NULL; - /*------------------------------------------------------------------------*/ - if (( dev == NULL ) || ( !netif_device_present( dev ))) { - return IRQ_NONE; - } - - /* Set the wl_private pointer (lp), now that we know that dev is non-null */ - lp = wl_priv(dev); - -#ifdef USE_RTS - if ( lp->useRTS == 1 ) { - DBG_PRINT( "EXITING ISR, IN RTS MODE...\n" ); - return; - } -#endif /* USE_RTS */ - - /* If we have interrupts pending, then put them on a system task - queue. Otherwise turn interrupts back on */ - events = hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF ); - - if ( events == HCF_INT_PENDING ) { - /* Schedule the ISR handler as a bottom-half task in the - tq_immediate queue */ - tasklet_schedule(&lp->task); - } else { - //DBG_PRINT( "NOT OUR INTERRUPT\n" ); - hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON ); - } - - return IRQ_RETVAL(events == HCF_INT_PENDING); -} // wl_isr -/*============================================================================*/ - - -/******************************************************************************* - * wl_isr_handler() - ******************************************************************************* - * - * DESCRIPTION: - * - * The ISR handler, scheduled to run in a deferred context by the ISR. This - * is where the ISR's work actually gets done. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -#define WVLAN_MAX_INT_SERVICES 50 - -void wl_isr_handler( unsigned long p ) -{ - struct net_device *dev; - unsigned long flags; - bool_t stop = TRUE; - int count; - int result; - struct wl_private *lp = (struct wl_private *)p; - /*------------------------------------------------------------------------*/ - - if ( lp == NULL ) { - DBG_PRINT( "wl_isr_handler lp adapter pointer is NULL!!!\n" ); - } else { - wl_lock( lp, &flags ); - - dev = (struct net_device *)lp->dev; - if ( dev != NULL && netif_device_present( dev ) ) stop = FALSE; - for( count = 0; stop == FALSE && count < WVLAN_MAX_INT_SERVICES; count++ ) { - stop = TRUE; - result = hcf_service_nic( &lp->hcfCtx, - (wci_bufp)lp->lookAheadBuf, - sizeof( lp->lookAheadBuf )); - if ( result == HCF_ERR_MIC ) { - wl_wext_event_mic_failed( dev ); /* Send an event that MIC failed */ - //;?this seems wrong if HCF_ERR_MIC coincides with another event, stop gets FALSE - //so why not do it always ;? - } - -#ifndef USE_MBOX_SYNC - if ( lp->hcfCtx.IFB_MBInfoLen != 0 ) { /* anything in the mailbox */ - wl_mbx( lp ); - stop = FALSE; - } -#endif - /* Check for a Link status event */ - if ( ( lp->hcfCtx.IFB_LinkStat & CFG_LINK_STAT_FW ) != 0 ) { - wl_process_link_status( lp ); - stop = FALSE; - } - /* Check for probe response events */ - if ( lp->ProbeResp.infoType != 0 && - lp->ProbeResp.infoType != 0xFFFF ) { - wl_process_probe_response( lp ); - memset( &lp->ProbeResp, 0, sizeof( lp->ProbeResp )); - lp->ProbeResp.infoType = 0xFFFF; - stop = FALSE; - } - /* Check for updated record events */ - if ( lp->updatedRecord.len != 0xFFFF ) { - wl_process_updated_record( lp ); - lp->updatedRecord.len = 0xFFFF; - stop = FALSE; - } - /* Check for association status events */ - if ( lp->assoc_stat.len != 0xFFFF ) { - wl_process_assoc_status( lp ); - lp->assoc_stat.len = 0xFFFF; - stop = FALSE; - } - /* Check for security status events */ - if ( lp->sec_stat.len != 0xFFFF ) { - wl_process_security_status( lp ); - lp->sec_stat.len = 0xFFFF; - stop = FALSE; - } - -#ifdef ENABLE_DMA - if ( lp->use_dma ) { - /* Check for DMA Rx packets */ - if ( lp->hcfCtx.IFB_DmaPackets & HREG_EV_RDMAD ) { - wl_rx_dma( dev ); - stop = FALSE; - } - /* Return Tx DMA descriptors to host */ - if ( lp->hcfCtx.IFB_DmaPackets & HREG_EV_TDMAD ) { - wl_pci_dma_hcf_reclaim_tx( lp ); - stop = FALSE; - } - } - else -#endif // ENABLE_DMA - { - /* Check for Rx packets */ - if ( lp->hcfCtx.IFB_RxLen != 0 ) { - wl_rx( dev ); - stop = FALSE; - } - /* Make sure that queued frames get sent */ - if ( wl_send( lp )) { - stop = FALSE; - } - } - } - /* We're done, so turn interrupts which were turned off in wl_isr, back on */ - hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON ); - wl_unlock( lp, &flags ); - } - return; -} // wl_isr_handler -/*============================================================================*/ - - -/******************************************************************************* - * wl_remove() - ******************************************************************************* - * - * DESCRIPTION: - * - * Notify the adapter that it has been removed. Since the adapter is gone, - * we should no longer try to talk to it. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_remove( struct net_device *dev ) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); - - wl_lock( lp, &flags ); - - /* stop handling interrupts */ - wl_act_int_off( lp ); - lp->is_handling_int = WL_NOT_HANDLING_INT; - - /* - * Disable the ports: just change state: since the - * card is gone it is useless to talk to it and at - * disconnect all state information is lost anyway. - */ - /* Reset portState */ - lp->portState = WVLAN_PORT_STATE_DISABLED; - -#if 0 //;? (HCF_TYPE) & HCF_TYPE_AP -#ifdef USE_WDS - //wl_disable_wds_ports( lp ); -#endif // USE_WDS -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - /* Mark the device as unregistered */ - lp->is_registered = FALSE; - - /* Deregister the WDS ports as well */ - WL_WDS_NETDEV_DEREGISTER( lp ); -#ifdef USE_RTS - if ( lp->useRTS == 1 ) { - wl_unlock( lp, &flags ); - return; - } -#endif /* USE_RTS */ - - /* Inform the HCF that the card has been removed */ - hcf_connect( &lp->hcfCtx, HCF_DISCONNECT ); - - wl_unlock( lp, &flags ); -} // wl_remove -/*============================================================================*/ - - -/******************************************************************************* - * wl_suspend() - ******************************************************************************* - * - * DESCRIPTION: - * - * Power-down and halt the adapter. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_suspend( struct net_device *dev ) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); - - /* The adapter is suspended: - Stop the adapter - Power down - */ - wl_lock( lp, &flags ); - - /* Disable interrupt handling */ - wl_act_int_off( lp ); - - /* Disconnect */ - wl_disconnect( lp ); - - /* Disable */ - wl_disable( lp ); - - /* Disconnect from the adapter */ - hcf_connect( &lp->hcfCtx, HCF_DISCONNECT ); - - /* Reset portState to be sure (should have been done by wl_disable */ - lp->portState = WVLAN_PORT_STATE_DISABLED; - - wl_unlock( lp, &flags ); -} // wl_suspend -/*============================================================================*/ - - -/******************************************************************************* - * wl_resume() - ******************************************************************************* - * - * DESCRIPTION: - * - * Resume a previously suspended adapter. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_resume(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); - - wl_lock( lp, &flags ); - - /* Connect to the adapter */ - hcf_connect( &lp->hcfCtx, dev->base_addr ); - - /* Reset portState */ - lp->portState = WVLAN_PORT_STATE_DISABLED; - - /* Power might have been off, assume the card lost the firmware*/ - lp->firmware_present = WL_FRIMWARE_NOT_PRESENT; - - /* Reload the firmware and restart */ - wl_reset( dev ); - - /* Resume interrupt handling */ - wl_act_int_on( lp ); - - wl_unlock( lp, &flags ); -} // wl_resume -/*============================================================================*/ - - -/******************************************************************************* - * wl_release() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function performs a check on the device and calls wl_remove() if - * necessary. This function can be used for all bus types, but exists mostly - * for the benefit of the Card Services driver, as there are times when - * wl_remove() does not get called. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_release( struct net_device *dev ) -{ - struct wl_private *lp = wl_priv(dev); - - DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); - /* If wl_remove() hasn't been called (i.e. when Card Services is shut - down with the card in the slot), then call it */ - if ( lp->is_registered == TRUE ) { - DBG_TRACE( DbgInfo, "Calling unregister_netdev(), as it wasn't called yet\n" ); - wl_remove( dev ); - - lp->is_registered = FALSE; - } -} // wl_release -/*============================================================================*/ - - -/******************************************************************************* - * wl_get_irq_mask() - ******************************************************************************* - * - * DESCRIPTION: - * - * Accessor function to retrieve the irq_mask module parameter - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * The irq_mask module parameter - * - ******************************************************************************/ -p_u16 wl_get_irq_mask( void ) -{ - return irq_mask; -} // wl_get_irq_mask -/*============================================================================*/ - - -/******************************************************************************* - * wl_get_irq_list() - ******************************************************************************* - * - * DESCRIPTION: - * - * Accessor function to retrieve the irq_list module parameter - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * The irq_list module parameter - * - ******************************************************************************/ -p_s8 * wl_get_irq_list( void ) -{ - return irq_list; -} // wl_get_irq_list -/*============================================================================*/ - - - -/******************************************************************************* - * wl_enable() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to enable MAC ports - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_enable( struct wl_private *lp ) -{ - int hcf_status = HCF_SUCCESS; - - if ( lp->portState == WVLAN_PORT_STATE_ENABLED ) { - DBG_TRACE( DbgInfo, "No action: Card already enabled\n" ); - } else if ( lp->portState == WVLAN_PORT_STATE_CONNECTED ) { - //;?suspicuous logic, how can you be connected without being enabled so this is probably dead code - DBG_TRACE( DbgInfo, "No action: Card already connected\n" ); - } else { - hcf_status = hcf_cntl( &lp->hcfCtx, HCF_CNTL_ENABLE ); - if ( hcf_status == HCF_SUCCESS ) { - /* Set the status of the NIC to enabled */ - lp->portState = WVLAN_PORT_STATE_ENABLED; //;?bad mnemonic, NIC iso PORT -#ifdef ENABLE_DMA - if ( lp->use_dma ) { - wl_pci_dma_hcf_supply( lp ); //;?always successful? - } -#endif - } - } - if ( hcf_status != HCF_SUCCESS ) { //;?make this an assert - DBG_TRACE( DbgInfo, "failed: 0x%x\n", hcf_status ); - } - return hcf_status; -} // wl_enable -/*============================================================================*/ - - -#ifdef USE_WDS -/******************************************************************************* - * wl_enable_wds_ports() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to enable the WDS MAC ports 1-6 - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_enable_wds_ports( struct wl_private * lp ) -{ - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ){ - DBG_ERROR( DbgInfo, "!!!!;? someone misunderstood something !!!!!\n" ); - } -} // wl_enable_wds_ports -#endif /* USE_WDS */ -/*============================================================================*/ - - -/******************************************************************************* - * wl_connect() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to connect a MAC port - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_connect( struct wl_private *lp ) -{ - int hcf_status; - - if ( lp->portState != WVLAN_PORT_STATE_ENABLED ) { - DBG_TRACE( DbgInfo, "No action: Not in enabled state\n" ); - return HCF_SUCCESS; - } - hcf_status = hcf_cntl( &lp->hcfCtx, HCF_CNTL_CONNECT ); - if ( hcf_status == HCF_SUCCESS ) { - lp->portState = WVLAN_PORT_STATE_CONNECTED; - } - return hcf_status; -} // wl_connect -/*============================================================================*/ - - -/******************************************************************************* - * wl_disconnect() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to disconnect a MAC port - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_disconnect( struct wl_private *lp ) -{ - int hcf_status; - - if ( lp->portState != WVLAN_PORT_STATE_CONNECTED ) { - DBG_TRACE( DbgInfo, "No action: Not in connected state\n" ); - return HCF_SUCCESS; - } - hcf_status = hcf_cntl( &lp->hcfCtx, HCF_CNTL_DISCONNECT ); - if ( hcf_status == HCF_SUCCESS ) { - lp->portState = WVLAN_PORT_STATE_ENABLED; - } - return hcf_status; -} // wl_disconnect -/*============================================================================*/ - - -/******************************************************************************* - * wl_disable() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to disable MAC ports - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * port - the MAC port to disable - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_disable( struct wl_private *lp ) -{ - int hcf_status = HCF_SUCCESS; - - if ( lp->portState == WVLAN_PORT_STATE_DISABLED ) { - DBG_TRACE( DbgInfo, "No action: Port state is disabled\n" ); - } else { - hcf_status = hcf_cntl( &lp->hcfCtx, HCF_CNTL_DISABLE ); - if ( hcf_status == HCF_SUCCESS ) { - /* Set the status of the port to disabled */ //;?bad mnemonic use NIC iso PORT - lp->portState = WVLAN_PORT_STATE_DISABLED; - -#ifdef ENABLE_DMA - if ( lp->use_dma ) { - wl_pci_dma_hcf_reclaim( lp ); - } -#endif - } - } - if ( hcf_status != HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "failed: 0x%x\n", hcf_status ); - } - return hcf_status; -} // wl_disable -/*============================================================================*/ - - -#ifdef USE_WDS -/******************************************************************************* - * wl_disable_wds_ports() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to disable the WDS MAC ports 1-6 - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_disable_wds_ports( struct wl_private * lp ) -{ - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ){ - DBG_ERROR( DbgInfo, "!!!!;? someone misunderstood something !!!!!\n" ); - } -// if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { -// wl_disable( lp, HCF_PORT_1 ); -// wl_disable( lp, HCF_PORT_2 ); -// wl_disable( lp, HCF_PORT_3 ); -// wl_disable( lp, HCF_PORT_4 ); -// wl_disable( lp, HCF_PORT_5 ); -// wl_disable( lp, HCF_PORT_6 ); -// } - return; -} // wl_disable_wds_ports -#endif // USE_WDS -/*============================================================================*/ - - -#ifndef USE_MBOX_SYNC -/******************************************************************************* - * wl_mbx() - ******************************************************************************* - * - * DESCRIPTION: - * This function is used to read and process a mailbox message. - * - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * an HCF status code - * - ******************************************************************************/ -int wl_mbx( struct wl_private *lp ) -{ - int hcf_status = HCF_SUCCESS; - - DBG_TRACE( DbgInfo, "Mailbox Info: IFB_MBInfoLen: %d\n", - lp->hcfCtx.IFB_MBInfoLen ); - - memset( &( lp->ltvRecord ), 0, sizeof( ltv_t )); - - lp->ltvRecord.len = MB_SIZE; - lp->ltvRecord.typ = CFG_MB_INFO; - hcf_status = hcf_get_info( &lp->hcfCtx, (LTVP)&( lp->ltvRecord )); - - if ( hcf_status != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "hcf_get_info returned 0x%x\n", hcf_status ); - return hcf_status; - } - - if ( lp->ltvRecord.typ == CFG_MB_INFO ) - return hcf_status; - - /* Endian translate the mailbox data, then process the message */ - wl_endian_translate_mailbox( &( lp->ltvRecord )); - wl_process_mailbox( lp ); - return hcf_status; -} // wl_mbx -/*============================================================================*/ - - -/******************************************************************************* - * wl_endian_translate_mailbox() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function will perform the tedious task of endian translating all - * fields within a mailbox message which need translating. - * - * PARAMETERS: - * - * ltv - pointer to the LTV to endian translate - * - * RETURNS: - * - * none - * - ******************************************************************************/ -void wl_endian_translate_mailbox( ltv_t *ltv ) -{ - switch( ltv->typ ) { - case CFG_TALLIES: - break; - - case CFG_SCAN: - { - int num_aps; - SCAN_RS_STRCT *aps = (SCAN_RS_STRCT *)<v->u.u8[0]; - - num_aps = (hcf_16)(( (size_t)(ltv->len - 1 ) * 2 ) / - ( sizeof( SCAN_RS_STRCT ))); - - while( num_aps >= 1 ) { - num_aps--; - - aps[num_aps].channel_id = - CNV_LITTLE_TO_INT( aps[num_aps].channel_id ); - - aps[num_aps].noise_level = - CNV_LITTLE_TO_INT( aps[num_aps].noise_level ); - - aps[num_aps].signal_level = - CNV_LITTLE_TO_INT( aps[num_aps].signal_level ); - - aps[num_aps].beacon_interval_time = - CNV_LITTLE_TO_INT( aps[num_aps].beacon_interval_time ); - - aps[num_aps].capability = - CNV_LITTLE_TO_INT( aps[num_aps].capability ); - - aps[num_aps].ssid_len = - CNV_LITTLE_TO_INT( aps[num_aps].ssid_len ); - - aps[num_aps].ssid_val[aps[num_aps].ssid_len] = 0; - } - } - break; - - case CFG_ACS_SCAN: - { - PROBE_RESP *probe_resp = (PROBE_RESP *)ltv; - - probe_resp->frameControl = CNV_LITTLE_TO_INT( probe_resp->frameControl ); - probe_resp->durID = CNV_LITTLE_TO_INT( probe_resp->durID ); - probe_resp->sequence = CNV_LITTLE_TO_INT( probe_resp->sequence ); - probe_resp->dataLength = CNV_LITTLE_TO_INT( probe_resp->dataLength ); -#ifndef WARP - probe_resp->lenType = CNV_LITTLE_TO_INT( probe_resp->lenType ); -#endif // WARP - probe_resp->beaconInterval = CNV_LITTLE_TO_INT( probe_resp->beaconInterval ); - probe_resp->capability = CNV_LITTLE_TO_INT( probe_resp->capability ); - probe_resp->flags = CNV_LITTLE_TO_INT( probe_resp->flags ); - } - break; - - case CFG_LINK_STAT: -#define ls ((LINK_STATUS_STRCT *)ltv) - ls->linkStatus = CNV_LITTLE_TO_INT( ls->linkStatus ); - break; -#undef ls - - case CFG_ASSOC_STAT: - { - ASSOC_STATUS_STRCT *as = (ASSOC_STATUS_STRCT *)ltv; - - as->assocStatus = CNV_LITTLE_TO_INT( as->assocStatus ); - } - break; - - case CFG_SECURITY_STAT: - { - SECURITY_STATUS_STRCT *ss = (SECURITY_STATUS_STRCT *)ltv; - - ss->securityStatus = CNV_LITTLE_TO_INT( ss->securityStatus ); - ss->reason = CNV_LITTLE_TO_INT( ss->reason ); - } - break; - - case CFG_WMP: - break; - - case CFG_NULL: - break; - - default: - break; - } -} // wl_endian_translate_mailbox -/*============================================================================*/ - -/******************************************************************************* - * wl_process_mailbox() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function processes the mailbox data. - * - * PARAMETERS: - * - * ltv - pointer to the LTV to be processed. - * - * RETURNS: - * - * none - * - ******************************************************************************/ -void wl_process_mailbox( struct wl_private *lp ) -{ - ltv_t *ltv; - hcf_16 ltv_val = 0xFFFF; - - ltv = &( lp->ltvRecord ); - - switch( ltv->typ ) { - - case CFG_TALLIES: - DBG_TRACE( DbgInfo, "CFG_TALLIES\n" ); - break; - case CFG_SCAN: - DBG_TRACE( DbgInfo, "CFG_SCAN\n" ); - - { - int num_aps; - SCAN_RS_STRCT *aps = (SCAN_RS_STRCT *)<v->u.u8[0]; - - num_aps = (hcf_16)(( (size_t)(ltv->len - 1 ) * 2 ) / - ( sizeof( SCAN_RS_STRCT ))); - - lp->scan_results.num_aps = num_aps; - - DBG_TRACE( DbgInfo, "Number of APs: %d\n", num_aps ); - - while( num_aps >= 1 ) { - num_aps--; - - DBG_TRACE( DbgInfo, "AP : %d\n", num_aps ); - DBG_TRACE( DbgInfo, "=========================\n" ); - DBG_TRACE( DbgInfo, "Channel ID : 0x%04x\n", - aps[num_aps].channel_id ); - DBG_TRACE( DbgInfo, "Noise Level : 0x%04x\n", - aps[num_aps].noise_level ); - DBG_TRACE( DbgInfo, "Signal Level : 0x%04x\n", - aps[num_aps].signal_level ); - DBG_TRACE( DbgInfo, "Beacon Interval : 0x%04x\n", - aps[num_aps].beacon_interval_time ); - DBG_TRACE( DbgInfo, "Capability : 0x%04x\n", - aps[num_aps].capability ); - DBG_TRACE( DbgInfo, "SSID Length : 0x%04x\n", - aps[num_aps].ssid_len ); - DBG_TRACE(DbgInfo, "BSSID : %pM\n", - aps[num_aps].bssid); - - if ( aps[num_aps].ssid_len != 0 ) { - DBG_TRACE( DbgInfo, "SSID : %s.\n", - aps[num_aps].ssid_val ); - } else { - DBG_TRACE( DbgInfo, "SSID : %s.\n", "ANY" ); - } - - DBG_TRACE( DbgInfo, "\n" ); - - /* Copy the info to the ScanResult structure in the private - adapter struct */ - memcpy( &( lp->scan_results.APTable[num_aps]), &( aps[num_aps] ), - sizeof( SCAN_RS_STRCT )); - } - - /* Set scan result to true so that any scan requests will - complete */ - lp->scan_results.scan_complete = TRUE; - } - - break; - case CFG_ACS_SCAN: - DBG_TRACE( DbgInfo, "CFG_ACS_SCAN\n" ); - - { - PROBE_RESP *probe_rsp = (PROBE_RESP *)ltv; - hcf_8 *wpa_ie = NULL; - hcf_16 wpa_ie_len = 0; - - DBG_TRACE( DbgInfo, "(%s) =========================\n", - lp->dev->name ); - - DBG_TRACE( DbgInfo, "(%s) length : 0x%04x.\n", - lp->dev->name, probe_rsp->length ); - - if ( probe_rsp->length > 1 ) { - DBG_TRACE( DbgInfo, "(%s) infoType : 0x%04x.\n", - lp->dev->name, probe_rsp->infoType ); - - DBG_TRACE( DbgInfo, "(%s) signal : 0x%02x.\n", - lp->dev->name, probe_rsp->signal ); - - DBG_TRACE( DbgInfo, "(%s) silence : 0x%02x.\n", - lp->dev->name, probe_rsp->silence ); - - DBG_TRACE( DbgInfo, "(%s) rxFlow : 0x%02x.\n", - lp->dev->name, probe_rsp->rxFlow ); - - DBG_TRACE( DbgInfo, "(%s) rate : 0x%02x.\n", - lp->dev->name, probe_rsp->rate ); - - DBG_TRACE( DbgInfo, "(%s) frame cntl : 0x%04x.\n", - lp->dev->name, probe_rsp->frameControl ); - - DBG_TRACE( DbgInfo, "(%s) durID : 0x%04x.\n", - lp->dev->name, probe_rsp->durID ); - - DBG_TRACE(DbgInfo, "(%s) address1 : %pM\n", - lp->dev->name, probe_rsp->address1); - - DBG_TRACE(DbgInfo, "(%s) address2 : %pM\n", - lp->dev->name, probe_rsp->address2); - - DBG_TRACE(DbgInfo, "(%s) BSSID : %pM\n", - lp->dev->name, probe_rsp->BSSID); - - DBG_TRACE( DbgInfo, "(%s) sequence : 0x%04x.\n", - lp->dev->name, probe_rsp->sequence ); - - DBG_TRACE(DbgInfo, "(%s) address4 : %pM\n", - lp->dev->name, probe_rsp->address4); - - DBG_TRACE( DbgInfo, "(%s) datalength : 0x%04x.\n", - lp->dev->name, probe_rsp->dataLength ); - - DBG_TRACE(DbgInfo, "(%s) DA : %pM\n", - lp->dev->name, probe_rsp->DA); - - DBG_TRACE(DbgInfo, "(%s) SA : %pM\n", - lp->dev->name, probe_rsp->SA); - - //DBG_TRACE( DbgInfo, "(%s) lenType : 0x%04x.\n", - // lp->dev->name, probe_rsp->lenType ); - - DBG_TRACE(DbgInfo, "(%s) timeStamp : " - "%d.%d.%d.%d.%d.%d.%d.%d\n", - lp->dev->name, - probe_rsp->timeStamp[0], - probe_rsp->timeStamp[1], - probe_rsp->timeStamp[2], - probe_rsp->timeStamp[3], - probe_rsp->timeStamp[4], - probe_rsp->timeStamp[5], - probe_rsp->timeStamp[6], - probe_rsp->timeStamp[7]); - - DBG_TRACE( DbgInfo, "(%s) beaconInt : 0x%04x.\n", - lp->dev->name, probe_rsp->beaconInterval ); - - DBG_TRACE( DbgInfo, "(%s) capability : 0x%04x.\n", - lp->dev->name, probe_rsp->capability ); - - DBG_TRACE( DbgInfo, "(%s) SSID len : 0x%04x.\n", - lp->dev->name, probe_rsp->rawData[1] ); - - if ( probe_rsp->rawData[1] > 0 ) { - char ssid[HCF_MAX_NAME_LEN]; - - memset( ssid, 0, sizeof( ssid )); - strncpy( ssid, &probe_rsp->rawData[2], - min_t(u8, - probe_rsp->rawData[1], - HCF_MAX_NAME_LEN - 1)); - - DBG_TRACE( DbgInfo, "(%s) SSID : %s\n", - lp->dev->name, ssid ); - } - - /* Parse out the WPA-IE, if one exists */ - wpa_ie = wl_parse_wpa_ie( probe_rsp, &wpa_ie_len ); - if ( wpa_ie != NULL ) { - DBG_TRACE( DbgInfo, "(%s) WPA-IE : %s\n", - lp->dev->name, wl_print_wpa_ie( wpa_ie, wpa_ie_len )); - } - - DBG_TRACE( DbgInfo, "(%s) flags : 0x%04x.\n", - lp->dev->name, probe_rsp->flags ); - } - - DBG_TRACE( DbgInfo, "\n\n" ); - /* If probe response length is 1, then the scan is complete */ - if ( probe_rsp->length == 1 ) { - DBG_TRACE( DbgInfo, "SCAN COMPLETE\n" ); - lp->probe_results.num_aps = lp->probe_num_aps; - lp->probe_results.scan_complete = TRUE; - - /* Reset the counter for the next scan request */ - lp->probe_num_aps = 0; - - /* Send a wireless extensions event that the scan completed */ - wl_wext_event_scan_complete( lp->dev ); - } else { - /* Only copy to the table if the entry is unique; APs sometimes - respond more than once to a probe */ - if ( lp->probe_num_aps == 0 ) { - /* Copy the info to the ScanResult structure in the private - adapter struct */ - memcpy( &( lp->probe_results.ProbeTable[lp->probe_num_aps] ), - probe_rsp, sizeof( PROBE_RESP )); - - /* Increment the number of APs detected */ - lp->probe_num_aps++; - } else { - int count; - int unique = 1; - - for( count = 0; count < lp->probe_num_aps; count++ ) { - if ( memcmp( &( probe_rsp->BSSID ), - lp->probe_results.ProbeTable[count].BSSID, - ETH_ALEN ) == 0 ) { - unique = 0; - } - } - - if ( unique ) { - /* Copy the info to the ScanResult structure in the - private adapter struct. Only copy if there's room in the - table */ - if ( lp->probe_num_aps < MAX_NAPS ) - { - memcpy( &( lp->probe_results.ProbeTable[lp->probe_num_aps] ), - probe_rsp, sizeof( PROBE_RESP )); - } - else - { - DBG_WARNING( DbgInfo, "Num of scan results exceeds storage, truncating\n" ); - } - - /* Increment the number of APs detected. Note I do this - here even when I don't copy the probe response to the - buffer in order to detect the overflow condition */ - lp->probe_num_aps++; - } - } - } - } - - break; - - case CFG_LINK_STAT: -#define ls ((LINK_STATUS_STRCT *)ltv) - DBG_TRACE( DbgInfo, "CFG_LINK_STAT\n" ); - - switch( ls->linkStatus ) { - case 1: - DBG_TRACE( DbgInfo, "Link Status : Connected\n" ); - wl_wext_event_ap( lp->dev ); - break; - - case 2: - DBG_TRACE( DbgInfo, "Link Status : Disconnected\n" ); - break; - - case 3: - DBG_TRACE( DbgInfo, "Link Status : Access Point Change\n" ); - break; - - case 4: - DBG_TRACE( DbgInfo, "Link Status : Access Point Out of Range\n" ); - break; - - case 5: - DBG_TRACE( DbgInfo, "Link Status : Access Point In Range\n" ); - break; - - default: - DBG_TRACE( DbgInfo, "Link Status : UNKNOWN (0x%04x)\n", - ls->linkStatus ); - break; - } - - break; -#undef ls - - case CFG_ASSOC_STAT: - DBG_TRACE( DbgInfo, "CFG_ASSOC_STAT\n" ); - - { - ASSOC_STATUS_STRCT *as = (ASSOC_STATUS_STRCT *)ltv; - - switch( as->assocStatus ) { - case 1: - DBG_TRACE( DbgInfo, "Association Status : STA Associated\n" ); - break; - - case 2: - DBG_TRACE( DbgInfo, "Association Status : STA Reassociated\n" ); - break; - - case 3: - DBG_TRACE( DbgInfo, "Association Status : STA Disassociated\n" ); - break; - - default: - DBG_TRACE( DbgInfo, "Association Status : UNKNOWN (0x%04x)\n", - as->assocStatus ); - break; - } - - DBG_TRACE(DbgInfo, "STA Address : %pM\n", - as->staAddr); - - if (( as->assocStatus == 2 ) && ( as->len == 8 )) { - DBG_TRACE(DbgInfo, "Old AP Address : %pM\n", - as->oldApAddr); - } - } - - break; - - case CFG_SECURITY_STAT: - DBG_TRACE( DbgInfo, "CFG_SECURITY_STAT\n" ); - - { - SECURITY_STATUS_STRCT *ss = (SECURITY_STATUS_STRCT *)ltv; - - switch( ss->securityStatus ) { - case 1: - DBG_TRACE( DbgInfo, "Security Status : Dissassociate [AP]\n" ); - break; - - case 2: - DBG_TRACE( DbgInfo, "Security Status : Deauthenticate [AP]\n" ); - break; - - case 3: - DBG_TRACE( DbgInfo, "Security Status : Authenticate Fail [STA] or [AP]\n" ); - break; - - case 4: - DBG_TRACE( DbgInfo, "Security Status : MIC Fail\n" ); - break; - - case 5: - DBG_TRACE( DbgInfo, "Security Status : Associate Fail\n" ); - break; - - default: - DBG_TRACE( DbgInfo, "Security Status : UNKNOWN %d\n", - ss->securityStatus ); - break; - } - - DBG_TRACE(DbgInfo, "STA Address : %pM\n", - ss->staAddr); - - DBG_TRACE(DbgInfo, "Reason : 0x%04x\n", - ss->reason); - } - - break; - - case CFG_WMP: - DBG_TRACE( DbgInfo, "CFG_WMP, size is %d bytes\n", ltv->len ); - { - WMP_RSP_STRCT *wmp_rsp = (WMP_RSP_STRCT *)ltv; - - DBG_TRACE( DbgInfo, "CFG_WMP, pdu type is 0x%x\n", - wmp_rsp->wmpRsp.wmpHdr.type ); - - switch( wmp_rsp->wmpRsp.wmpHdr.type ) { - case WVLAN_WMP_PDU_TYPE_LT_RSP: - { -#if DBG - LINKTEST_RSP_STRCT *lt_rsp = (LINKTEST_RSP_STRCT *)ltv; -#endif // DBG - DBG_TRACE( DbgInfo, "LINK TEST RESULT\n" ); - DBG_TRACE( DbgInfo, "================\n" ); - DBG_TRACE( DbgInfo, "Length : %d.\n", lt_rsp->len ); - - DBG_TRACE( DbgInfo, "Name : %s.\n", lt_rsp->ltRsp.ltRsp.name ); - DBG_TRACE( DbgInfo, "Signal Level : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.signal ); - DBG_TRACE( DbgInfo, "Noise Level : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.noise ); - DBG_TRACE( DbgInfo, "Receive Flow : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.rxFlow ); - DBG_TRACE( DbgInfo, "Data Rate : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.dataRate ); - DBG_TRACE( DbgInfo, "Protocol : 0x%04x.\n", lt_rsp->ltRsp.ltRsp.protocol ); - DBG_TRACE( DbgInfo, "Station : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.station ); - DBG_TRACE( DbgInfo, "Data Rate Cap : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.dataRateCap ); - - DBG_TRACE( DbgInfo, "Power Mgmt : 0x%02x 0x%02x 0x%02x 0x%02x.\n", - lt_rsp->ltRsp.ltRsp.powerMgmt[0], - lt_rsp->ltRsp.ltRsp.powerMgmt[1], - lt_rsp->ltRsp.ltRsp.powerMgmt[2], - lt_rsp->ltRsp.ltRsp.powerMgmt[3] ); - - DBG_TRACE( DbgInfo, "Robustness : 0x%02x 0x%02x 0x%02x 0x%02x.\n", - lt_rsp->ltRsp.ltRsp.robustness[0], - lt_rsp->ltRsp.ltRsp.robustness[1], - lt_rsp->ltRsp.ltRsp.robustness[2], - lt_rsp->ltRsp.ltRsp.robustness[3] ); - - DBG_TRACE( DbgInfo, "Scaling : 0x%02x.\n", lt_rsp->ltRsp.ltRsp.scaling ); - } - - break; - - default: - break; - } - } - - break; - - case CFG_NULL: - DBG_TRACE( DbgInfo, "CFG_NULL\n" ); - break; - - case CFG_UPDATED_INFO_RECORD: // Updated Information Record - DBG_TRACE( DbgInfo, "UPDATED INFORMATION RECORD\n" ); - - ltv_val = CNV_INT_TO_LITTLE( ltv->u.u16[0] ); - - /* Check and see which RID was updated */ - switch( ltv_val ) { - case CFG_CUR_COUNTRY_INFO: // Indicate Passive Scan Completion - DBG_TRACE( DbgInfo, "Updated country info\n" ); - - /* Do I need to hold off on updating RIDs until the process is - complete? */ - wl_connect( lp ); - break; - - case CFG_PORT_STAT: // Wait for Connect Event - //wl_connect( lp ); - - break; - - default: - DBG_WARNING( DbgInfo, "Unknown RID: 0x%04x\n", ltv_val ); - } - - break; - - default: - DBG_TRACE( DbgInfo, "UNKNOWN MESSAGE: 0x%04x\n", ltv->typ ); - break; - } -} // wl_process_mailbox -/*============================================================================*/ -#endif /* ifndef USE_MBOX_SYNC */ - -#ifdef USE_WDS -/******************************************************************************* - * wl_wds_netdev_register() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function registers net_device structures with the system's network - * layer for use with the WDS ports. - * - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netdev_register( struct wl_private *lp ) -{ - int count; - - //;?why is there no USE_WDS clause like in wl_enable_wds_ports - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - for( count = 0; count < NUM_WDS_PORTS; count++ ) { - if ( WVLAN_VALID_MAC_ADDRESS( lp->wds_port[count].wdsAddress )) { - if ( register_netdev( lp->wds_port[count].dev ) != 0 ) { - DBG_WARNING( DbgInfo, "net device for WDS port %d could not be registered\n", - ( count + 1 )); - } - lp->wds_port[count].is_registered = TRUE; - - /* Fill out the net_device structs with the MAC addr */ - memcpy( lp->wds_port[count].dev->dev_addr, lp->MACAddress, ETH_ALEN ); - lp->wds_port[count].dev->addr_len = ETH_ALEN; - } - } - } -} // wl_wds_netdev_register -/*============================================================================*/ - - -/******************************************************************************* - * wl_wds_netdev_deregister() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function deregisters the WDS net_device structures used by the - * system's network layer. - * - * - * PARAMETERS: - * - * lp - pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netdev_deregister( struct wl_private *lp ) -{ - int count; - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - for( count = 0; count < NUM_WDS_PORTS; count++ ) { - if ( WVLAN_VALID_MAC_ADDRESS( lp->wds_port[count].wdsAddress )) { - unregister_netdev( lp->wds_port[count].dev ); - } - lp->wds_port[count].is_registered = FALSE; - } - } -} // wl_wds_netdev_deregister -/*============================================================================*/ -#endif /* USE_WDS */ - - -#if 0 //SCULL_USE_PROC /* don't waste space if unused */ -/* - * The proc filesystem: function to read and entry - */ -static void printf_hcf_16(struct seq_file *m, const char *s, hcf_16 *p, int n) -{ - int i, len; - - seq_printf(m, "%-20.20s: ", s); - len = 22; - - for (i = 0; i < n; i++) { - if (len % 80 > 75) - seq_putc(m, '\n'); - seq_printf(m, "%04X ", p[i]); - } - seq_putc(m, '\n'); -} - -static void printf_hcf_8(struct seq_file *m, const char *s, hcf_8 *p, int n) -{ - int i, len; - - seq_printf(m, "%-20.20s: ", s); - len = 22; - - for (i = 0; i <= n; i++) { - if (len % 80 > 77) - seq_putc(m, '\n'); - seq_printf(m, "%02X ", p[i]); - } - seq_putc(m, '\n'); -} - -static void printf_strct(struct seq_file *m, const char *s, hcf_16 *p) -{ - int i, len; - - seq_printf(m, "%-20.20s: ", s); - len = 22; - - for ( i = 0; i <= *p; i++ ) { - if (len % 80 > 75) - seq_putc(m, '\n'); - seq_printf(m,"%04X ", p[i]); - } - seq_putc(m, '\n'); -} - -int scull_read_procmem(struct seq_file *m, void *v) -{ - struct wl_private *lp = m->private; - IFBP ifbp; - CFG_HERMES_TALLIES_STRCT *p; - - if (lp == NULL) { - seq_puts(m, "No wl_private in scull_read_procmem\n" ); - } else if ( lp->wlags49_type == 0 ){ - ifbp = &lp->hcfCtx; - seq_printf(m, "Magic: 0x%04X\n", ifbp->IFB_Magic ); - seq_printf(m, "IOBase: 0x%04X\n", ifbp->IFB_IOBase ); - seq_printf(m, "LinkStat: 0x%04X\n", ifbp->IFB_LinkStat ); - seq_printf(m, "DSLinkStat: 0x%04X\n", ifbp->IFB_DSLinkStat ); - seq_printf(m, "TickIni: 0x%08lX\n", ifbp->IFB_TickIni ); - seq_printf(m, "TickCnt: 0x%04X\n", ifbp->IFB_TickCnt ); - seq_printf(m, "IntOffCnt: 0x%04X\n", ifbp->IFB_IntOffCnt ); - printf_hcf_16(m, "IFB_FWIdentity", - &ifbp->IFB_FWIdentity.len, ifbp->IFB_FWIdentity.len + 1 ); - } else if ( lp->wlags49_type == 1 ) { - seq_printf(m, "Channel: 0x%04X\n", lp->Channel ); -/****** seq_printf(m, "slock: %d\n", lp->slock ); */ -//x struct tq_struct "task: 0x%04X\n", lp->task ); -//x struct net_device_stats "stats: 0x%04X\n", lp->stats ); -#ifdef WIRELESS_EXT -//x struct iw_statistics "wstats: 0x%04X\n", lp->wstats ); -//x seq_printf(m, "spy_number: 0x%04X\n", lp->spy_number ); -//x u_char spy_address[IW_MAX_SPY][ETH_ALEN]; -//x struct iw_quality spy_stat[IW_MAX_SPY]; -#endif // WIRELESS_EXT - seq_printf(m, "IFB: 0x%p\n", &lp->hcfCtx ); - seq_printf(m, "flags: %#.8lX\n", lp->flags ); //;?use this format from now on - seq_printf(m, "DebugFlag(wl_private) 0x%04X\n", lp->DebugFlag ); -#if DBG - seq_printf(m, "DebugFlag (DbgInfo): 0x%08lX\n", DbgInfo->DebugFlag ); -#endif // DBG - seq_printf(m, "is_registered: 0x%04X\n", lp->is_registered ); -//x CFG_DRV_INFO_STRCT "driverInfo: 0x%04X\n", lp->driverInfo ); - printf_strct( m, "driverInfo", (hcf_16*)&lp->driverInfo ); -//x CFG_IDENTITY_STRCT "driverIdentity: 0x%04X\n", lp->driverIdentity ); - printf_strct( m, "driverIdentity", (hcf_16*)&lp->driverIdentity ); -//x CFG_FW_IDENTITY_STRCT "StationIdentity: 0x%04X\n", lp->StationIdentity ); - printf_strct( m, "StationIdentity", (hcf_16*)&lp->StationIdentity ); -//x CFG_PRI_IDENTITY_STRCT "PrimaryIdentity: 0x%04X\n", lp->PrimaryIdentity ); - printf_strct( m, "PrimaryIdentity", (hcf_16*)&lp->hcfCtx.IFB_PRIIdentity ); - printf_strct( m, "PrimarySupplier", (hcf_16*)&lp->hcfCtx.IFB_PRISup ); -//x CFG_PRI_IDENTITY_STRCT "NICIdentity: 0x%04X\n", lp->NICIdentity ); - printf_strct( m, "NICIdentity", (hcf_16*)&lp->NICIdentity ); -//x ltv_t "ltvRecord: 0x%04X\n", lp->ltvRecord ); - seq_printf(m, "txBytes: 0x%08lX\n", lp->txBytes ); - seq_printf(m, "maxPort: 0x%04X\n", lp->maxPort ); /* 0 for STA, 6 for AP */ - /* Elements used for async notification from hardware */ -//x RID_LOG_STRCT RidList[10]; -//x ltv_t "updatedRecord: 0x%04X\n", lp->updatedRecord ); -//x PROBE_RESP "ProbeResp: 0x%04X\n", lp->ProbeResp ); -//x ASSOC_STATUS_STRCT "assoc_stat: 0x%04X\n", lp->assoc_stat ); -//x SECURITY_STATUS_STRCT "sec_stat: 0x%04X\n", lp->sec_stat ); -//x u_char lookAheadBuf[WVLAN_MAX_LOOKAHEAD]; - seq_printf(m, "PortType: 0x%04X\n", lp->PortType ); // 1 - 3 (1 [Normal] | 3 [AdHoc]) - seq_printf(m, "Channel: 0x%04X\n", lp->Channel ); // 0 - 14 (0) -//x hcf_16 TxRateControl[2]; - seq_printf(m, "TxRateControl[2]: 0x%04X 0x%04X\n", - lp->TxRateControl[0], lp->TxRateControl[1] ); - seq_printf(m, "DistanceBetweenAPs: 0x%04X\n", lp->DistanceBetweenAPs ); // 1 - 3 (1) - seq_printf(m, "RTSThreshold: 0x%04X\n", lp->RTSThreshold ); // 0 - 2347 (2347) - seq_printf(m, "PMEnabled: 0x%04X\n", lp->PMEnabled ); // 0 - 2, 8001 - 8002 (0) - seq_printf(m, "MicrowaveRobustness: 0x%04X\n", lp->MicrowaveRobustness );// 0 - 1 (0) - seq_printf(m, "CreateIBSS: 0x%04X\n", lp->CreateIBSS ); // 0 - 1 (0) - seq_printf(m, "MulticastReceive: 0x%04X\n", lp->MulticastReceive ); // 0 - 1 (1) - seq_printf(m, "MaxSleepDuration: 0x%04X\n", lp->MaxSleepDuration ); // 0 - 65535 (100) -//x hcf_8 MACAddress[ETH_ALEN]; - printf_hcf_8(m, "MACAddress", lp->MACAddress, ETH_ALEN ); -//x char NetworkName[HCF_MAX_NAME_LEN+1]; - seq_printf(m, "NetworkName: %.32s\n", lp->NetworkName ); -//x char StationName[HCF_MAX_NAME_LEN+1]; - seq_printf(m, "EnableEncryption: 0x%04X\n", lp->EnableEncryption ); // 0 - 1 (0) -//x char Key1[MAX_KEY_LEN+1]; - printf_hcf_8( m, "Key1", lp->Key1, MAX_KEY_LEN ); -//x char Key2[MAX_KEY_LEN+1]; -//x char Key3[MAX_KEY_LEN+1]; -//x char Key4[MAX_KEY_LEN+1]; - seq_printf(m, "TransmitKeyID: 0x%04X\n", lp->TransmitKeyID ); // 1 - 4 (1) -//x CFG_DEFAULT_KEYS_STRCT "DefaultKeys: 0x%04X\n", lp->DefaultKeys ); -//x u_char mailbox[MB_SIZE]; -//x char szEncryption[MAX_ENC_LEN]; - seq_printf(m, "driverEnable: 0x%04X\n", lp->driverEnable ); - seq_printf(m, "wolasEnable: 0x%04X\n", lp->wolasEnable ); - seq_printf(m, "atimWindow: 0x%04X\n", lp->atimWindow ); - seq_printf(m, "holdoverDuration: 0x%04X\n", lp->holdoverDuration ); -//x hcf_16 MulticastRate[2]; - seq_printf(m, "authentication: 0x%04X\n", lp->authentication ); // is this AP specific? - seq_printf(m, "promiscuousMode: 0x%04X\n", lp->promiscuousMode ); - seq_printf(m, "DownloadFirmware: 0x%04X\n", lp->DownloadFirmware ); // 0 - 2 (0 [None] | 1 [STA] | 2 [AP]) - seq_printf(m, "AuthKeyMgmtSuite: 0x%04X\n", lp->AuthKeyMgmtSuite ); - seq_printf(m, "loadBalancing: 0x%04X\n", lp->loadBalancing ); - seq_printf(m, "mediumDistribution: 0x%04X\n", lp->mediumDistribution ); - seq_printf(m, "txPowLevel: 0x%04X\n", lp->txPowLevel ); -// seq_printf(m, "shortRetryLimit: 0x%04X\n", lp->shortRetryLimit ); -// seq_printf(m, "longRetryLimit: 0x%04X\n", lp->longRetryLimit ); -//x hcf_16 srsc[2]; -//x hcf_16 brsc[2]; - seq_printf(m, "connectionControl: 0x%04X\n", lp->connectionControl ); -//x //hcf_16 probeDataRates[2]; - seq_printf(m, "ownBeaconInterval: 0x%04X\n", lp->ownBeaconInterval ); - seq_printf(m, "coexistence: 0x%04X\n", lp->coexistence ); -//x WVLAN_FRAME "txF: 0x%04X\n", lp->txF ); -//x WVLAN_LFRAME txList[DEFAULT_NUM_TX_FRAMES]; -//x struct list_head "txFree: 0x%04X\n", lp->txFree ); -//x struct list_head txQ[WVLAN_MAX_TX_QUEUES]; - seq_printf(m, "netif_queue_on: 0x%04X\n", lp->netif_queue_on ); - seq_printf(m, "txQ_count: 0x%04X\n", lp->txQ_count ); -//x DESC_STRCT "desc_rx: 0x%04X\n", lp->desc_rx ); -//x DESC_STRCT "desc_tx: 0x%04X\n", lp->desc_tx ); -//x WVLAN_PORT_STATE "portState: 0x%04X\n", lp->portState ); -//x ScanResult "scan_results: 0x%04X\n", lp->scan_results ); -//x ProbeResult "probe_results: 0x%04X\n", lp->probe_results ); - seq_printf(m, "probe_num_aps: 0x%04X\n", lp->probe_num_aps ); - seq_printf(m, "use_dma: 0x%04X\n", lp->use_dma ); -//x DMA_STRCT "dma: 0x%04X\n", lp->dma ); -#ifdef USE_RTS - seq_printf(m, "useRTS: 0x%04X\n", lp->useRTS ); -#endif // USE_RTS -#if 1 //;? (HCF_TYPE) & HCF_TYPE_AP - //;?should we restore this to allow smaller memory footprint - //;?I guess not. This should be brought under Debug mode only - seq_printf(m, "DTIMPeriod: 0x%04X\n", lp->DTIMPeriod ); // 1 - 255 (1) - seq_printf(m, "multicastPMBuffering: 0x%04X\n", lp->multicastPMBuffering ); - seq_printf(m, "RejectAny: 0x%04X\n", lp->RejectAny ); // 0 - 1 (0) - seq_printf(m, "ExcludeUnencrypted: 0x%04X\n", lp->ExcludeUnencrypted ); // 0 - 1 (1) - seq_printf(m, "intraBSSRelay: 0x%04X\n", lp->intraBSSRelay ); - seq_printf(m, "wlags49_type: 0x%08lX\n", lp->wlags49_type ); -#ifdef USE_WDS -//x WVLAN_WDS_IF wds_port[NUM_WDS_PORTS]; -#endif // USE_WDS -#endif // HCF_AP - } else if ( lp->wlags49_type == 2 ){ - seq_printf(m, "tallies to be added\n" ); -//Hermes Tallies (IFB substructure) { - p = &lp->hcfCtx.IFB_NIC_Tallies; - seq_printf(m, "TxUnicastFrames: %08lX\n", p->TxUnicastFrames ); - seq_printf(m, "TxMulticastFrames: %08lX\n", p->TxMulticastFrames ); - seq_printf(m, "TxFragments: %08lX\n", p->TxFragments ); - seq_printf(m, "TxUnicastOctets: %08lX\n", p->TxUnicastOctets ); - seq_printf(m, "TxMulticastOctets: %08lX\n", p->TxMulticastOctets ); - seq_printf(m, "TxDeferredTransmissions: %08lX\n", p->TxDeferredTransmissions ); - seq_printf(m, "TxSingleRetryFrames: %08lX\n", p->TxSingleRetryFrames ); - seq_printf(m, "TxMultipleRetryFrames: %08lX\n", p->TxMultipleRetryFrames ); - seq_printf(m, "TxRetryLimitExceeded: %08lX\n", p->TxRetryLimitExceeded ); - seq_printf(m, "TxDiscards: %08lX\n", p->TxDiscards ); - seq_printf(m, "RxUnicastFrames: %08lX\n", p->RxUnicastFrames ); - seq_printf(m, "RxMulticastFrames: %08lX\n", p->RxMulticastFrames ); - seq_printf(m, "RxFragments: %08lX\n", p->RxFragments ); - seq_printf(m, "RxUnicastOctets: %08lX\n", p->RxUnicastOctets ); - seq_printf(m, "RxMulticastOctets: %08lX\n", p->RxMulticastOctets ); - seq_printf(m, "RxFCSErrors: %08lX\n", p->RxFCSErrors ); - seq_printf(m, "RxDiscardsNoBuffer: %08lX\n", p->RxDiscardsNoBuffer ); - seq_printf(m, "TxDiscardsWrongSA: %08lX\n", p->TxDiscardsWrongSA ); - seq_printf(m, "RxWEPUndecryptable: %08lX\n", p->RxWEPUndecryptable ); - seq_printf(m, "RxMsgInMsgFragments: %08lX\n", p->RxMsgInMsgFragments ); - seq_printf(m, "RxMsgInBadMsgFragments: %08lX\n", p->RxMsgInBadMsgFragments ); - seq_printf(m, "RxDiscardsWEPICVError: %08lX\n", p->RxDiscardsWEPICVError ); - seq_printf(m, "RxDiscardsWEPExcluded: %08lX\n", p->RxDiscardsWEPExcluded ); -#if (HCF_EXT) & HCF_EXT_TALLIES_FW - //to be added ;? -#endif // HCF_EXT_TALLIES_FW - } else if ( lp->wlags49_type & 0x8000 ) { //;?kludgy but it is unclear to me were else to place this -#if DBG - DbgInfo->DebugFlag = lp->wlags49_type & 0x7FFF; -#endif // DBG - lp->wlags49_type = 0; //default to IFB again ;? - } else { - seq_printf(m, "unknown value for wlags49_type: 0x%08lX\n", lp->wlags49_type ); - seq_puts(m, - "0x0000 - IFB\n" - "0x0001 - wl_private\n" - "0x0002 - Tallies\n" - "0x8xxx - Change debufflag\n" - "ERROR 0001\nWARNING 0002\nNOTICE 0004\nTRACE 0008\n" - "VERBOSE 0010\nPARAM 0020\nBREAK 0040\nRX 0100\n" - "TX 0200\nDS 0400\n"); - } - return 0; -} // scull_read_procmem - -static int write_int(struct file *file, const char *buffer, unsigned long count, void *data) -{ - static char proc_number[11]; - unsigned int nr = 0; - - if (count > 9) { - count = -EINVAL; - } else if ( copy_from_user(proc_number, buffer, count) ) { - count = -EFAULT; - } - if (count > 0 ) { - proc_number[count] = 0; - nr = simple_strtoul(proc_number , NULL, 0); - *(unsigned int *)data = nr; - if ( nr & 0x8000 ) { //;?kludgy but it is unclear to me were else to place this -#if DBG - DbgInfo->DebugFlag = nr & 0x7FFF; -#endif // DBG - } - } - DBG_PRINT( "value: %08X\n", nr ); - return count; -} // write_int - -#endif /* SCULL_USE_PROC */ - -#ifdef DN554 -#define RUN_AT(x) (jiffies+(x)) //"borrowed" from include/pcmcia/k_compat.h -#define DS_OOR 0x8000 //Deepsleep OutOfRange Status - - lp->timer_oor_cnt = DS_OOR; - init_timer( &lp->timer_oor ); - lp->timer_oor.function = timer_oor; - lp->timer_oor.data = (unsigned long)lp; - lp->timer_oor.expires = RUN_AT( 3 * HZ ); - add_timer( &lp->timer_oor ); - printk(KERN_NOTICE "wl_enable: %ld\n", jiffies ); //;?remove me 1 day -#endif //DN554 -#ifdef DN554 -/******************************************************************************* - * timer_oor() - ******************************************************************************* - * - * DESCRIPTION: - * - * - * PARAMETERS: - * - * arg - a u_long representing a pointer to a dev_link_t structure for the - * device to be released. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void timer_oor( u_long arg ) -{ - struct wl_private *lp = (struct wl_private *)arg; - - DBG_PARAM( DbgInfo, "arg", "0x%08lx", arg ); - - printk(KERN_NOTICE "timer_oor: %ld 0x%04X\n", jiffies, lp->timer_oor_cnt ); //;?remove me 1 day - lp->timer_oor_cnt += 10; - if ( (lp->timer_oor_cnt & ~DS_OOR) > 300 ) { - lp->timer_oor_cnt = 300; - } - lp->timer_oor_cnt |= DS_OOR; - init_timer( &lp->timer_oor ); - lp->timer_oor.function = timer_oor; - lp->timer_oor.data = (unsigned long)lp; - lp->timer_oor.expires = RUN_AT( (lp->timer_oor_cnt & ~DS_OOR) * HZ ); - add_timer( &lp->timer_oor ); -} // timer_oor -#endif //DN554 - -MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/staging/wlags49_h2/wl_main.h b/drivers/staging/wlags49_h2/wl_main.h deleted file mode 100644 index 3806e744d7f6..000000000000 --- a/drivers/staging/wlags49_h2/wl_main.h +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing device specific routines and driver init/un-init. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_MAIN_H__ -#define __WL_MAIN_H__ - - - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -int wl_insert( struct net_device *dev ); - -void wl_set_wep_keys( struct wl_private *lp ); - -int wl_put_ltv_init( struct wl_private *lp ); - -int wl_put_ltv( struct wl_private *lp ); - -p_u16 wl_get_irq_mask( void ); - -p_s8 * wl_get_irq_list( void ); - -int wl_reset( struct net_device *dev ); - -int wl_go( struct wl_private *lp ); - -int wl_apply( struct wl_private *lp ); - -irqreturn_t wl_isr( int irq, void *dev_id, struct pt_regs *regs ); - -void wl_remove( struct net_device *dev ); - -void wl_suspend( struct net_device *dev ); - -void wl_resume( struct net_device *dev ); - -void wl_release( struct net_device *dev ); - -int wl_enable( struct wl_private *lp ); - -int wl_connect( struct wl_private *lp ); - -int wl_disable( struct wl_private *lp ); - -int wl_disconnect( struct wl_private *lp ); - -void wl_enable_wds_ports( struct wl_private * lp ); - -void wl_disable_wds_ports( struct wl_private * lp ); - -#ifndef USE_MBOX_SYNC - -int wl_mbx( struct wl_private *lp ); -void wl_endian_translate_mailbox( ltv_t *ltv ); -void wl_process_mailbox( struct wl_private *lp ); - -#endif /* USE_MBOX_SYNC */ - - -#ifdef USE_WDS - -void wl_wds_netdev_register( struct wl_private *lp ); -void wl_wds_netdev_deregister( struct wl_private *lp ); - -#endif /* USE_WDS */ - - -#ifdef USE_WDS - -#define WL_WDS_NETDEV_REGISTER( ARG ) wl_wds_netdev_register( ARG ) -#define WL_WDS_NETDEV_DEREGISTER( ARG ) wl_wds_netdev_deregister( ARG ) - -#else - -#define WL_WDS_NETDEV_REGISTER( ARG ) -#define WL_WDS_NETDEV_DEREGISTER( ARG ) - -#endif /* USE_WDS */ -#endif /* __WL_MAIN_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_netdev.c b/drivers/staging/wlags49_h2/wl_netdev.c deleted file mode 100644 index 60701d4325d0..000000000000 --- a/drivers/staging/wlags49_h2/wl_netdev.c +++ /dev/null @@ -1,1950 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file contains handler functions registered with the net_device - * structure. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include files - ******************************************************************************/ -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef USE_PROFILE -#include -#endif /* USE_PROFILE */ - -#ifdef BUS_PCMCIA -#include -#endif /* BUS_PCMCIA */ - -#ifdef BUS_PCI -#include -#endif /* BUS_PCI */ - -#if HCF_ENCAP -#define MTU_MAX (HCF_MAX_MSG - ETH_HLEN - 8) -#else -#define MTU_MAX (HCF_MAX_MSG - ETH_HLEN) -#endif - -/******************************************************************************* - * macros - ******************************************************************************/ -#define BLOCK_INPUT(buf, len) \ - do { \ - desc->buf_addr = buf; \ - desc->BUF_SIZE = len; \ - status = hcf_rcv_msg(&(lp->hcfCtx), desc, 0); \ - } while (0) - -#define BLOCK_INPUT_DMA(buf, len) memcpy( buf, desc_next->buf_addr, pktlen ) - -/******************************************************************************* - * function prototypes - ******************************************************************************/ - -/******************************************************************************* - * wl_init() - ******************************************************************************* - * - * DESCRIPTION: - * - * We never need to do anything when a "Wireless" device is "initialized" - * by the net software, because we only register already-found cards. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wl_init(struct net_device *dev) -{ - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - return 0; -} /* wl_init */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_config() - ******************************************************************************* - * - * DESCRIPTION: - * - * Implement the SIOCSIFMAP interface. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * map - a pointer to the device's ifmap structure - * - * RETURNS: - * - * 0 on success - * errno otherwise - * - ******************************************************************************/ -int wl_config(struct net_device *dev, struct ifmap *map) -{ - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - DBG_PARAM(DbgInfo, "map", "0x%p", map); - - /* - * The only thing we care about here is a port change. - * Since this not needed, ignore the request. - */ - DBG_TRACE(DbgInfo, "%s: %s called.\n", dev->name, __func__); - - return 0; -} /* wl_config */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_stats() - ******************************************************************************* - * - * DESCRIPTION: - * - * Return the current device statistics. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * a pointer to a net_device_stats structure containing the network - * statistics. - * - ******************************************************************************/ -struct net_device_stats *wl_stats(struct net_device *dev) -{ -#ifdef USE_WDS - int count; -#endif /* USE_WDS */ - unsigned long flags; - struct net_device_stats *pStats; - struct wl_private *lp = wl_priv(dev); - - /*DBG_PARAM( DbgInfo, "dev", "%s (0x%p)", dev->name, dev ); */ - - pStats = NULL; - - wl_lock(lp, &flags); - -#ifdef USE_RTS - if (lp->useRTS == 1) { - wl_unlock(lp, &flags); - return NULL; - } -#endif /* USE_RTS */ - - /* Return the statistics for the appropriate device */ -#ifdef USE_WDS - - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (dev == lp->wds_port[count].dev) - pStats = &(lp->wds_port[count].stats); - } - -#endif /* USE_WDS */ - - /* If pStats is still NULL, then the device is not a WDS port */ - if (pStats == NULL) - pStats = &(lp->stats); - - wl_unlock(lp, &flags); - - return pStats; -} /* wl_stats */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_open() - ******************************************************************************* - * - * DESCRIPTION: - * - * Open the device. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * 0 on success - * errno otherwise - * - ******************************************************************************/ -int wl_open(struct net_device *dev) -{ - int status = HCF_SUCCESS; - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - wl_lock(lp, &flags); - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_TRACE(DbgInfo, "Skipping device open, in RTS mode\n"); - wl_unlock(lp, &flags); - return -EIO; - } -#endif /* USE_RTS */ - -#ifdef USE_PROFILE - parse_config(dev); -#endif - - if (lp->portState == WVLAN_PORT_STATE_DISABLED) { - DBG_TRACE(DbgInfo, "Enabling Port 0\n"); - status = wl_enable(lp); - - if (status != HCF_SUCCESS) { - DBG_TRACE(DbgInfo, "Enable port 0 failed: 0x%x\n", - status); - } - } - - /* Holding the lock too long, make a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock(lp, &flags); - - if (strlen(lp->fw_image_filename)) { - DBG_TRACE(DbgInfo, ";???? Kludgy way to force a download\n"); - status = wl_go(lp); - } else { - status = wl_apply(lp); - } - - /* Holding the lock too long, make a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock(lp, &flags); - - /* Unsuccessful, try reset of the card to recover */ - if (status != HCF_SUCCESS) - status = wl_reset(dev); - - /* Holding the lock too long, make a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock(lp, &flags); - - if (status == HCF_SUCCESS) { - netif_carrier_on(dev); - WL_WDS_NETIF_CARRIER_ON(lp); - - /* Start handling interrupts */ - lp->is_handling_int = WL_HANDLING_INT; - wl_act_int_on(lp); - - netif_start_queue(dev); - WL_WDS_NETIF_START_QUEUE(lp); - } else { - wl_hcf_error(dev, status); /* Report the error */ - netif_device_detach(dev); /* Stop the device and queue */ - } - - wl_unlock(lp, &flags); - - return status; -} /* wl_open */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_close() - ******************************************************************************* - * - * DESCRIPTION: - * - * Close the device. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * 0 on success - * errno otherwise - * - ******************************************************************************/ -int wl_close(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - /* Mark the adapter as busy */ - netif_stop_queue(dev); - WL_WDS_NETIF_STOP_QUEUE(lp); - - netif_carrier_off(dev); - WL_WDS_NETIF_CARRIER_OFF(lp); - - /* - * Shutdown the adapter: - * Disable adapter interrupts - * Stop Tx/Rx - * Update statistics - * Set low power mode - */ - - wl_lock(lp, &flags); - - wl_act_int_off(lp); - /* Stop handling interrupts */ - lp->is_handling_int = WL_NOT_HANDLING_INT; - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_TRACE(DbgInfo, "Skipping device close, in RTS mode\n"); - wl_unlock(lp, &flags); - return -EIO; - } -#endif /* USE_RTS */ - - /* Disable the ports */ - wl_disable(lp); - - wl_unlock(lp, &flags); - - return 0; -} /* wl_close */ - -/*============================================================================*/ - -static void wl_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) -{ - strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); - strlcpy(info->version, DRV_VERSION_STR, sizeof(info->version)); - - if (dev->dev.parent) { - dev_set_name(dev->dev.parent, "%s", info->bus_info); - } else { - snprintf(info->bus_info, sizeof(info->bus_info), - "PCMCIA FIXME"); - } -} /* wl_get_drvinfo */ - -static struct ethtool_ops wl_ethtool_ops = { - .get_drvinfo = wl_get_drvinfo, - .get_link = ethtool_op_get_link, -}; - -/******************************************************************************* - * wl_ioctl() - ******************************************************************************* - * - * DESCRIPTION: - * - * The IOCTL handler for the device. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device struct. - * rq - a pointer to the IOCTL request buffer. - * cmd - the IOCTL command code. - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - DBG_PARAM(DbgInfo, "rq", "0x%p", rq); - DBG_PARAM(DbgInfo, "cmd", "0x%04x", cmd); - - wl_lock(lp, &flags); - - wl_act_int_off(lp); - -#ifdef USE_RTS - if (lp->useRTS == 1) { - /* Handle any RTS IOCTL here */ - if (cmd == WL_IOCTL_RTS) { - DBG_TRACE(DbgInfo, "IOCTL: WL_IOCTL_RTS\n"); - ret = wvlan_rts((struct rtsreq *)rq, dev->base_addr); - } else { - DBG_TRACE(DbgInfo, - "IOCTL not supported in RTS mode: 0x%X\n", - cmd); - ret = -EOPNOTSUPP; - } - - goto out_act_int_on_unlock; - } -#endif /* USE_RTS */ - - /* Only handle UIL IOCTL requests when the UIL has the system blocked. */ - if (!((lp->flags & WVLAN2_UIL_BUSY) && (cmd != WVLAN2_IOCTL_UIL))) { -#ifdef USE_UIL - struct uilreq *urq = (struct uilreq *)rq; -#endif /* USE_UIL */ - - switch (cmd) { - /* ================== Private IOCTLs (up to 16) ================== */ -#ifdef USE_UIL - case WVLAN2_IOCTL_UIL: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL\n"); - ret = wvlan_uil(urq, lp); - break; -#endif /* USE_UIL */ - - default: - DBG_TRACE(DbgInfo, "IOCTL CODE NOT SUPPORTED: 0x%X\n", - cmd); - ret = -EOPNOTSUPP; - break; - } - } else { - DBG_WARNING(DbgInfo, - "DEVICE IS BUSY, CANNOT PROCESS REQUEST\n"); - ret = -EBUSY; - } - -#ifdef USE_RTS -out_act_int_on_unlock: -#endif /* USE_RTS */ - wl_act_int_on(lp); - - wl_unlock(lp, &flags); - - return ret; -} /* wl_ioctl */ - -/*============================================================================*/ - -#ifdef CONFIG_NET_POLL_CONTROLLER -static void wl_poll(struct net_device *dev) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - struct pt_regs regs; - - wl_lock(lp, &flags); - wl_isr(dev->irq, dev, ®s); - wl_unlock(lp, &flags); -} -#endif - -/******************************************************************************* - * wl_tx_timeout() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler called when, for some reason, a Tx request is not completed. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device struct. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_tx_timeout(struct net_device *dev) -{ -#ifdef USE_WDS - int count; -#endif /* USE_WDS */ - unsigned long flags; - struct wl_private *lp = wl_priv(dev); - struct net_device_stats *pStats = NULL; - - DBG_WARNING(DbgInfo, "%s: Transmit timeout.\n", dev->name); - - wl_lock(lp, &flags); - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_TRACE(DbgInfo, - "Skipping tx_timeout handler, in RTS mode\n"); - wl_unlock(lp, &flags); - return; - } -#endif /* USE_RTS */ - - /* Figure out which device (the "root" device or WDS port) this timeout - is for */ -#ifdef USE_WDS - - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (dev == lp->wds_port[count].dev) { - pStats = &(lp->wds_port[count].stats); - - /* Break the loop so that we can use the counter to access WDS - information in the private structure */ - break; - } - } - -#endif /* USE_WDS */ - - /* If pStats is still NULL, then the device is not a WDS port */ - if (pStats == NULL) - pStats = &(lp->stats); - - /* Accumulate the timeout error */ - pStats->tx_errors++; - - wl_unlock(lp, &flags); -} /* wl_tx_timeout */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_send() - ******************************************************************************* - * - * DESCRIPTION: - * - * The routine which performs data transmits. - * - * PARAMETERS: - * - * lp - a pointer to the device's wl_private struct. - * - * RETURNS: - * - * 0 on success - * 1 on error - * - ******************************************************************************/ -int wl_send(struct wl_private *lp) -{ - - int status; - DESC_STRCT *desc; - WVLAN_LFRAME *txF = NULL; - struct list_head *element; - int len; - /*------------------------------------------------------------------------*/ - - if (lp == NULL) { - DBG_ERROR(DbgInfo, "Private adapter struct is NULL\n"); - return FALSE; - } - if (lp->dev == NULL) { - DBG_ERROR(DbgInfo, "net_device struct in wl_private is NULL\n"); - return FALSE; - } - - /* - * Check for the availability of FIDs; if none are available, - * don't take any frames off the txQ - */ - if (lp->hcfCtx.IFB_RscInd == 0) - return FALSE; - - /* Reclaim the TxQ Elements and place them back on the free queue */ - if (!list_empty(&(lp->txQ[0]))) { - element = lp->txQ[0].next; - - txF = (WVLAN_LFRAME *) list_entry(element, WVLAN_LFRAME, node); - if (txF != NULL) { - lp->txF.skb = txF->frame.skb; - lp->txF.port = txF->frame.port; - - txF->frame.skb = NULL; - txF->frame.port = 0; - - list_del(&(txF->node)); - list_add(element, &(lp->txFree)); - - lp->txQ_count--; - - if (lp->txQ_count < TX_Q_LOW_WATER_MARK) { - if (lp->netif_queue_on == FALSE) { - DBG_TX(DbgInfo, "Kickstarting Q: %d\n", - lp->txQ_count); - netif_wake_queue(lp->dev); - WL_WDS_NETIF_WAKE_QUEUE(lp); - lp->netif_queue_on = TRUE; - } - } - } - } - - if (lp->txF.skb == NULL) - return FALSE; - - /* If the device has resources (FIDs) available, then Tx the packet */ - /* Format the TxRequest and send it to the adapter */ - len = lp->txF.skb->len < ETH_ZLEN ? ETH_ZLEN : lp->txF.skb->len; - - desc = &(lp->desc_tx); - desc->buf_addr = lp->txF.skb->data; - desc->BUF_CNT = len; - desc->next_desc_addr = NULL; - - status = hcf_send_msg(&(lp->hcfCtx), desc, lp->txF.port); - - if (status == HCF_SUCCESS) { - lp->dev->trans_start = jiffies; - - DBG_TX(DbgInfo, "Transmit...\n"); - - if (lp->txF.port == HCF_PORT_0) { - lp->stats.tx_packets++; - lp->stats.tx_bytes += lp->txF.skb->len; - } -#ifdef USE_WDS - else { - lp->wds_port[((lp->txF.port >> 8) - - 1)].stats.tx_packets++; - lp->wds_port[((lp->txF.port >> 8) - - 1)].stats.tx_bytes += lp->txF.skb->len; - } - -#endif /* USE_WDS */ - - /* Free the skb and perform queue cleanup, as the buffer was - transmitted successfully */ - dev_consume_skb_any( lp->txF.skb ); - - lp->txF.skb = NULL; - lp->txF.port = 0; - } - - return TRUE; -} /* wl_send */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx() - ******************************************************************************* - * - * DESCRIPTION: - * - * The Tx handler function for the network layer. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff structure containing the data to transfer. - * dev - a pointer to the device's net_device structure. - * - * RETURNS: - * - * 0 on success - * 1 on error - * - ******************************************************************************/ -int wl_tx(struct sk_buff *skb, struct net_device *dev, int port) -{ - unsigned long flags; - struct wl_private *lp = wl_priv(dev); - WVLAN_LFRAME *txF = NULL; - struct list_head *element; - /*------------------------------------------------------------------------*/ - - /* Grab the spinlock */ - wl_lock(lp, &flags); - - if (lp->flags & WVLAN2_UIL_BUSY) { - DBG_WARNING(DbgInfo, "UIL has device blocked\n"); - /* Start dropping packets here??? */ - wl_unlock(lp, &flags); - return 1; - } -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_PRINT("RTS: we're getting a Tx...\n"); - wl_unlock(lp, &flags); - return 1; - } -#endif /* USE_RTS */ - - if (!lp->use_dma) { - /* Get an element from the queue */ - element = lp->txFree.next; - txF = (WVLAN_LFRAME *) list_entry(element, WVLAN_LFRAME, node); - if (txF == NULL) { - DBG_ERROR(DbgInfo, "Problem with list_entry\n"); - wl_unlock(lp, &flags); - return 1; - } - /* Fill out the frame */ - txF->frame.skb = skb; - txF->frame.port = port; - /* Move the frame to the txQ */ - /* NOTE: Here's where we would do priority queueing */ - list_move(&(txF->node), &(lp->txQ[0])); - - lp->txQ_count++; - if (lp->txQ_count >= DEFAULT_NUM_TX_FRAMES) { - DBG_TX(DbgInfo, "Q Full: %d\n", lp->txQ_count); - if (lp->netif_queue_on == TRUE) { - netif_stop_queue(lp->dev); - WL_WDS_NETIF_STOP_QUEUE(lp); - lp->netif_queue_on = FALSE; - } - } - } - wl_act_int_off(lp); /* Disable Interrupts */ - - /* Send the data to the hardware using the appropriate method */ -#ifdef ENABLE_DMA - if (lp->use_dma) { - wl_send_dma(lp, skb, port); - } else -#endif - { - wl_send(lp); - } - /* Re-enable Interrupts, release the spinlock and return */ - wl_act_int_on(lp); - wl_unlock(lp, &flags); - return 0; -} /* wl_tx */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_rx() - ******************************************************************************* - * - * DESCRIPTION: - * - * The routine which performs data reception. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure. - * - * RETURNS: - * - * 0 on success - * 1 on error - * - ******************************************************************************/ -int wl_rx(struct net_device *dev) -{ - int port; - struct sk_buff *skb; - struct wl_private *lp = wl_priv(dev); - int status; - hcf_16 pktlen; - hcf_16 hfs_stat; - DESC_STRCT *desc; - /*------------------------------------------------------------------------*/ - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - if (!(lp->flags & WVLAN2_UIL_BUSY)) { - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_PRINT("RTS: We're getting an Rx...\n"); - return -EIO; - } -#endif /* USE_RTS */ - - /* Read the HFS_STAT register from the lookahead buffer */ - hfs_stat = (hcf_16) ((lp->lookAheadBuf[HFS_STAT]) | - (lp->lookAheadBuf[HFS_STAT + 1] << 8)); - - /* Make sure the frame isn't bad */ - if ((hfs_stat & HFS_STAT_ERR) != HCF_SUCCESS) { - DBG_WARNING(DbgInfo, - "HFS_STAT_ERROR (0x%x) in Rx Packet\n", - lp->lookAheadBuf[HFS_STAT]); - return -EIO; - } - - /* Determine what port this packet is for */ - port = (hfs_stat >> 8) & 0x0007; - DBG_RX(DbgInfo, "Rx frame for port %d\n", port); - - 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 - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - skb->dev = lp->wds_port[port - 1].dev; - break; -#endif /* USE_WDS */ - - case 0: - default: - skb->dev = dev; - break; - } - - desc = &(lp->desc_rx); - - desc->next_desc_addr = NULL; - -/* -#define BLOCK_INPUT(buf, len) \ - desc->buf_addr = buf; \ - desc->BUF_SIZE = len; \ - status = hcf_rcv_msg(&(lp->hcfCtx), desc, 0) -*/ - - GET_PACKET(skb->dev, skb, pktlen); - - if (status == HCF_SUCCESS) { - if (port == 0) { - lp->stats.rx_packets++; - lp->stats.rx_bytes += pktlen; - } -#ifdef USE_WDS - else { - lp->wds_port[port - - 1].stats. - rx_packets++; - lp->wds_port[port - - 1].stats. - rx_bytes += pktlen; - } -#endif /* USE_WDS */ - - dev->last_rx = jiffies; - -#ifdef WIRELESS_EXT -#ifdef WIRELESS_SPY - if (lp->spydata.spy_number > 0) { - char *srcaddr = - skb->mac.raw + - MAC_ADDR_SIZE; - - wl_spy_gather(dev, srcaddr); - } -#endif /* WIRELESS_SPY */ -#endif /* WIRELESS_EXT */ - netif_rx(skb); - } else { - DBG_ERROR(DbgInfo, - "Rx request to card FAILED\n"); - - if (port == 0) - lp->stats.rx_dropped++; -#ifdef USE_WDS - else { - lp->wds_port[port - - 1].stats. - rx_dropped++; - } -#endif /* USE_WDS */ - - dev_kfree_skb(skb); - } - } else { - DBG_ERROR(DbgInfo, "Could not alloc skb\n"); - - if (port == 0) - lp->stats.rx_dropped++; -#ifdef USE_WDS - else { - lp->wds_port[port - - 1].stats.rx_dropped++; - } -#endif /* USE_WDS */ - } - } - } - - return 0; -} /* wl_rx */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_multicast() - ******************************************************************************* - * - * DESCRIPTION: - * - * Function to handle multicast packets - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -#ifdef NEW_MULTICAST - -void wl_multicast(struct net_device *dev) -{ -#if 1 /* (HCF_TYPE) & HCF_TYPE_STA */ - /* - * should we return an error status in AP mode ? - * seems reasonable that even an AP-only driver - * could afford this small additional footprint - */ - - int x; - struct netdev_hw_addr *ha; - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - if (!wl_adapter_is_open(dev)) - return; - -#if DBG - if (DBG_FLAGS(DbgInfo) & DBG_PARAM_ON) { - DBG_PRINT(" flags: %s%s%s\n", - (dev->flags & IFF_PROMISC) ? "Promiscuous " : "", - (dev->flags & IFF_MULTICAST) ? "Multicast " : "", - (dev->flags & IFF_ALLMULTI) ? "All-Multicast" : ""); - - DBG_PRINT(" mc_count: %d\n", netdev_mc_count(dev)); - - netdev_for_each_mc_addr(ha, dev) - DBG_PRINT(" %pM (%d)\n", ha->addr, dev->addr_len); - } -#endif /* DBG */ - - if (!(lp->flags & WVLAN2_UIL_BUSY)) { - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_TRACE(DbgInfo, "Skipping multicast, in RTS mode\n"); - return; - } -#endif /* USE_RTS */ - - wl_lock(lp, &flags); - wl_act_int_off(lp); - - if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == - COMP_ID_FW_STA) { - if (dev->flags & IFF_PROMISC) { - /* Enable promiscuous mode */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_PROMISCUOUS_MODE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(1); - DBG_PRINT - ("Enabling Promiscuous mode (IFF_PROMISC)\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - } else if ((netdev_mc_count(dev) > HCF_MAX_MULTICAST) - || (dev->flags & IFF_ALLMULTI)) { - /* Shutting off this filter will enable all multicast frames to - be sent up from the device; however, this is a static RID, so - a call to wl_apply() is needed */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_RX_ALL_GROUP_ADDR; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(0); - DBG_PRINT - ("Enabling all multicast mode (IFF_ALLMULTI)\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - wl_apply(lp); - } else if (!netdev_mc_empty(dev)) { - /* Set the multicast addresses */ - lp->ltvRecord.len = - (netdev_mc_count(dev) * 3) + 1; - lp->ltvRecord.typ = CFG_GROUP_ADDR; - - x = 0; - netdev_for_each_mc_addr(ha, dev) - memcpy(& - (lp->ltvRecord.u.u8[x++ * ETH_ALEN]), - ha->addr, ETH_ALEN); - DBG_PRINT("Setting multicast list\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - } else { - /* Disable promiscuous mode */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_PROMISCUOUS_MODE; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(0); - DBG_PRINT("Disabling Promiscuous mode\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - - /* Disable multicast mode */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_GROUP_ADDR; - DBG_PRINT("Disabling Multicast mode\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - - /* - * Turning on this filter will prevent all multicast frames from - * being sent up from the device; however, this is a static RID, - * so a call to wl_apply() is needed - */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CNF_RX_ALL_GROUP_ADDR; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(1); - DBG_PRINT - ("Disabling all multicast mode (IFF_ALLMULTI)\n"); - hcf_put_info(&(lp->hcfCtx), - (LTVP) & (lp->ltvRecord)); - wl_apply(lp); - } - } - wl_act_int_on(lp); - wl_unlock(lp, &flags); - } -#endif /* HCF_STA */ -} /* wl_multicast */ - -/*============================================================================*/ - -#else /* NEW_MULTICAST */ - -void wl_multicast(struct net_device *dev, int num_addrs, void *addrs) -{ - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - DBG_PARAM(DbgInfo, "num_addrs", "%d", num_addrs); - DBG_PARAM(DbgInfo, "addrs", "0x%p", addrs); - -#error Obsolete set multicast interface! -} /* wl_multicast */ - -/*============================================================================*/ - -#endif /* NEW_MULTICAST */ - -static const struct net_device_ops wl_netdev_ops = { - .ndo_start_xmit = &wl_tx_port0, - - .ndo_set_config = &wl_config, - .ndo_get_stats = &wl_stats, - .ndo_set_rx_mode = &wl_multicast, - - .ndo_init = &wl_insert, - .ndo_open = &wl_adapter_open, - .ndo_stop = &wl_adapter_close, - .ndo_do_ioctl = &wl_ioctl, - - .ndo_tx_timeout = &wl_tx_timeout, - -#ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = wl_poll, -#endif -}; - -/******************************************************************************* - * wl_device_alloc() - ******************************************************************************* - * - * DESCRIPTION: - * - * Create instances of net_device and wl_private for the new adapter - * and register the device's entry points in the net_device structure. - * - * PARAMETERS: - * - * N/A - * - * RETURNS: - * - * a pointer to an allocated and initialized net_device struct for this - * device. - * - ******************************************************************************/ -struct net_device *wl_device_alloc(void) -{ - struct net_device *dev = NULL; - struct wl_private *lp = NULL; - - /* Alloc a net_device struct */ - dev = alloc_etherdev(sizeof(struct wl_private)); - if (!dev) - return NULL; - - /* - * Initialize the 'next' pointer in the struct. - * Currently only used for PCI, - * but do it here just in case it's used - * for other buses in the future - */ - lp = wl_priv(dev); - - /* Check MTU */ - if (dev->mtu > MTU_MAX) { - DBG_WARNING(DbgInfo, "%s: MTU set too high, limiting to %d.\n", - dev->name, MTU_MAX); - dev->mtu = MTU_MAX; - } - - /* Setup the function table in the device structure. */ - - dev->wireless_handlers = (struct iw_handler_def *)&wl_iw_handler_def; - lp->wireless_data.spy_data = &lp->spy_data; - dev->wireless_data = &lp->wireless_data; - - dev->netdev_ops = &wl_netdev_ops; - - dev->watchdog_timeo = TX_TIMEOUT; - - dev->ethtool_ops = &wl_ethtool_ops; - - netif_stop_queue(dev); - - /* Allocate virtual devices for WDS support if needed */ - WL_WDS_DEVICE_ALLOC(lp); - - return dev; -} /* wl_device_alloc */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_device_dealloc() - ******************************************************************************* - * - * DESCRIPTION: - * - * Free instances of net_device and wl_private strcutres for an adapter - * and perform basic cleanup. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_device_dealloc(struct net_device *dev) -{ - /* Dealloc the WDS ports */ - WL_WDS_DEVICE_DEALLOC(lp); - - free_netdev(dev); -} /* wl_device_dealloc */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port0() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_0. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_0. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port0(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 0\n"); - - return wl_tx(skb, dev, HCF_PORT_0); -#ifdef ENABLE_DMA - return wl_tx_dma(skb, dev, HCF_PORT_0); -#endif -} /* wl_tx_port0i */ - -/*============================================================================*/ - -#ifdef USE_WDS - -/******************************************************************************* - * wl_tx_port1() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_1. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_1. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port1(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 1\n"); - return wl_tx(skb, dev, HCF_PORT_1); -} /* wl_tx_port1 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port2() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_2. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_2. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port2(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 2\n"); - return wl_tx(skb, dev, HCF_PORT_2); -} /* wl_tx_port2 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port3() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_3. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_3. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port3(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 3\n"); - return wl_tx(skb, dev, HCF_PORT_3); -} /* wl_tx_port3 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port4() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_4. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_4. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port4(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 4\n"); - return wl_tx(skb, dev, HCF_PORT_4); -} /* wl_tx_port4 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port5() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_5. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_5. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port5(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 5\n"); - return wl_tx(skb, dev, HCF_PORT_5); -} /* wl_tx_port5 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_tx_port6() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler routine for Tx over HCF_PORT_6. - * - * PARAMETERS: - * - * skb - a pointer to the sk_buff to transmit. - * dev - a pointer to a net_device structure representing HCF_PORT_6. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -int wl_tx_port6(struct sk_buff *skb, struct net_device *dev) -{ - DBG_TX(DbgInfo, "Tx on Port 6\n"); - return wl_tx(skb, dev, HCF_PORT_6); -} /* wl_tx_port6 */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_device_alloc() - ******************************************************************************* - * - * DESCRIPTION: - * - * Create instances of net_device to represent the WDS ports, and register - * the device's entry points in the net_device structure. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A, but will place pointers to the allocated and initialized net_device - * structs in the private adapter structure. - * - ******************************************************************************/ -void wl_wds_device_alloc(struct wl_private *lp) -{ - int count; - - /* WDS support requires additional net_device structs to be allocated, - so that user space apps can use these virtual devices to specify the - port on which to Tx/Rx */ - for (count = 0; count < NUM_WDS_PORTS; count++) { - struct net_device *dev_wds = NULL; - - dev_wds = kzalloc(sizeof(struct net_device), GFP_KERNEL); - if (!dev_wds) - return; - - ether_setup(dev_wds); - - lp->wds_port[count].dev = dev_wds; - - /* Re-use wl_init for all the devices, as it currently does nothing, but - * is required. Re-use the stats/tx_timeout handler for all as well; the - * WDS port which is requesting these operations can be determined by - * the net_device pointer. Set the private member of all devices to point - * to the same net_device struct; that way, all information gets - * funnelled through the one "real" net_device. Name the WDS ports - * "wds" - * */ - lp->wds_port[count].dev->init = &wl_init; - lp->wds_port[count].dev->get_stats = &wl_stats; - lp->wds_port[count].dev->tx_timeout = &wl_tx_timeout; - lp->wds_port[count].dev->watchdog_timeo = TX_TIMEOUT; - lp->wds_port[count].dev->priv = lp; - - sprintf(lp->wds_port[count].dev->name, "wds%d", count); - } - - /* Register the Tx handlers */ - lp->wds_port[0].dev->hard_start_xmit = &wl_tx_port1; - lp->wds_port[1].dev->hard_start_xmit = &wl_tx_port2; - lp->wds_port[2].dev->hard_start_xmit = &wl_tx_port3; - lp->wds_port[3].dev->hard_start_xmit = &wl_tx_port4; - lp->wds_port[4].dev->hard_start_xmit = &wl_tx_port5; - lp->wds_port[5].dev->hard_start_xmit = &wl_tx_port6; - - WL_WDS_NETIF_STOP_QUEUE(lp); -} /* wl_wds_device_alloc */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_device_dealloc() - ******************************************************************************* - * - * DESCRIPTION: - * - * Free instances of net_device structures used to support WDS. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_device_dealloc(struct wl_private *lp) -{ - int count; - - for (count = 0; count < NUM_WDS_PORTS; count++) { - struct net_device *dev_wds = NULL; - - dev_wds = lp->wds_port[count].dev; - - if (dev_wds != NULL) { - if (dev_wds->flags & IFF_UP) { - dev_close(dev_wds); - dev_wds->flags &= ~(IFF_UP | IFF_RUNNING); - } - - free_netdev(dev_wds); - lp->wds_port[count].dev = NULL; - } - } -} /* wl_wds_device_dealloc */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_netif_start_queue() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to start the netif queues of all the "virtual" network devices - * which represent the WDS ports. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netif_start_queue(struct wl_private *lp) -{ - int count; - /*------------------------------------------------------------------------*/ - - if (lp != NULL) { - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (lp->wds_port[count].is_registered && - lp->wds_port[count].netif_queue_on == FALSE) { - netif_start_queue(lp->wds_port[count].dev); - lp->wds_port[count].netif_queue_on = TRUE; - } - } - } -} /* wl_wds_netif_start_queue */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_netif_stop_queue() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to stop the netif queues of all the "virtual" network devices - * which represent the WDS ports. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netif_stop_queue(struct wl_private *lp) -{ - int count; - /*------------------------------------------------------------------------*/ - - if (lp != NULL) { - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (lp->wds_port[count].is_registered && - lp->wds_port[count].netif_queue_on == TRUE) { - netif_stop_queue(lp->wds_port[count].dev); - lp->wds_port[count].netif_queue_on = FALSE; - } - } - } -} /* wl_wds_netif_stop_queue */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_netif_wake_queue() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to wake the netif queues of all the "virtual" network devices - * which represent the WDS ports. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netif_wake_queue(struct wl_private *lp) -{ - int count; - /*------------------------------------------------------------------------*/ - - if (lp != NULL) { - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (lp->wds_port[count].is_registered && - lp->wds_port[count].netif_queue_on == FALSE) { - netif_wake_queue(lp->wds_port[count].dev); - lp->wds_port[count].netif_queue_on = TRUE; - } - } - } -} /* wl_wds_netif_wake_queue */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_netif_carrier_on() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to signal the network layer that carrier is present on all of the - * "virtual" network devices which represent the WDS ports. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netif_carrier_on(struct wl_private *lp) -{ - int count; - /*------------------------------------------------------------------------*/ - - if (lp != NULL) { - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (lp->wds_port[count].is_registered) - netif_carrier_on(lp->wds_port[count].dev); - } - } -} /* wl_wds_netif_carrier_on */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_wds_netif_carrier_off() - ******************************************************************************* - * - * DESCRIPTION: - * - * Used to signal the network layer that carrier is NOT present on all of - * the "virtual" network devices which represent the WDS ports. - * - * PARAMETERS: - * - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wds_netif_carrier_off(struct wl_private *lp) -{ - int count; - - if (lp != NULL) { - for (count = 0; count < NUM_WDS_PORTS; count++) { - if (lp->wds_port[count].is_registered) - netif_carrier_off(lp->wds_port[count].dev); - } - } - -} /* wl_wds_netif_carrier_off */ - -/*============================================================================*/ - -#endif /* USE_WDS */ - -#ifdef ENABLE_DMA -/******************************************************************************* - * wl_send_dma() - ******************************************************************************* - * - * DESCRIPTION: - * - * The routine which performs data transmits when using busmaster DMA. - * - * PARAMETERS: - * - * lp - a pointer to the device's wl_private struct. - * skb - a pointer to the network layer's data buffer. - * port - the Hermes port on which to transmit. - * - * RETURNS: - * - * 0 on success - * 1 on error - * - ******************************************************************************/ -int wl_send_dma(struct wl_private *lp, struct sk_buff *skb, int port) -{ - int len; - DESC_STRCT *desc = NULL; - DESC_STRCT *desc_next = NULL; - /*------------------------------------------------------------------------*/ - - if (lp == NULL) { - DBG_ERROR(DbgInfo, "Private adapter struct is NULL\n"); - return FALSE; - } - - if (lp->dev == NULL) { - DBG_ERROR(DbgInfo, "net_device struct in wl_private is NULL\n"); - return FALSE; - } - - /* AGAIN, ALL THE QUEUEING DONE HERE IN I/O MODE IS NOT PERFORMED */ - - if (skb == NULL) { - DBG_WARNING(DbgInfo, "Nothing to send.\n"); - return FALSE; - } - - len = skb->len; - - /* Get a free descriptor */ - desc = wl_pci_dma_get_tx_packet(lp); - - if (desc == NULL) { - if (lp->netif_queue_on == TRUE) { - netif_stop_queue(lp->dev); - WL_WDS_NETIF_STOP_QUEUE(lp); - lp->netif_queue_on = FALSE; - - dev_kfree_skb_any( skb ); - return 0; - } - } - - SET_BUF_CNT(desc, /*HCF_DMA_FD_CNT */ HFS_ADDR_DEST); - SET_BUF_SIZE(desc, HCF_DMA_TX_BUF1_SIZE); - - desc_next = desc->next_desc_addr; - - if (desc_next->buf_addr == NULL) { - DBG_ERROR(DbgInfo, "DMA descriptor buf_addr is NULL\n"); - return FALSE; - } - - /* Copy the payload into the DMA packet */ - memcpy(desc_next->buf_addr, skb->data, len); - - SET_BUF_CNT(desc_next, len); - SET_BUF_SIZE(desc_next, HCF_MAX_PACKET_SIZE); - - hcf_dma_tx_put(&(lp->hcfCtx), desc, 0); - - /* Free the skb and perform queue cleanup, as the buffer was - transmitted successfully */ - dev_consume_skb_any( skb ); - - return TRUE; -} /* wl_send_dma */ - -/*============================================================================*/ - -/******************************************************************************* - * wl_rx_dma() - ******************************************************************************* - * - * DESCRIPTION: - * - * The routine which performs data reception when using busmaster DMA. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure. - * - * RETURNS: - * - * 0 on success - * 1 on error - * - ******************************************************************************/ -int wl_rx_dma(struct net_device *dev) -{ - int port; - hcf_16 pktlen; - hcf_16 hfs_stat; - struct sk_buff *skb; - struct wl_private *lp = NULL; - DESC_STRCT *desc, *desc_next; - /*------------------------------------------------------------------------*/ - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - lp = dev->priv; - if ((lp != NULL) && !(lp->flags & WVLAN2_UIL_BUSY)) { - -#ifdef USE_RTS - if (lp->useRTS == 1) { - DBG_PRINT("RTS: We're getting an Rx...\n"); - return -EIO; - } -#endif /* USE_RTS */ - - /* - *if( lp->dma.status == 0 ) - *{ - */ - desc = hcf_dma_rx_get(&(lp->hcfCtx)); - - if (desc != NULL) { - /* Check and see if we rcvd. a WMP frame */ - /* - if((( *(hcf_8 *)&desc->buf_addr[HFS_STAT] ) & - ( HFS_STAT_MSG_TYPE | HFS_STAT_ERR )) == HFS_STAT_WMP_MSG ) - { - DBG_TRACE( DbgInfo, "Got a WMP frame\n" ); - - x.len = sizeof( CFG_MB_INFO_RANGE2_STRCT ) / sizeof( hcf_16 ); - x.typ = CFG_MB_INFO; - x.base_typ = CFG_WMP; - x.frag_cnt = 2; - x.frag_buf[0].frag_len = GET_BUF_CNT( descp ) / sizeof( hcf_16 ); - x.frag_buf[0].frag_addr = (hcf_8 *) descp->buf_addr ; - x.frag_buf[1].frag_len = ( GET_BUF_CNT( descp->next_desc_addr ) + 1 ) / sizeof( hcf_16 ); - x.frag_buf[1].frag_addr = (hcf_8 *) descp->next_desc_addr->buf_addr ; - - hcf_put_info( &( lp->hcfCtx ), (LTVP)&x ); - } - */ - - desc_next = desc->next_desc_addr; - - /* Make sure the buffer isn't empty */ - if (GET_BUF_CNT(desc) == 0) { - DBG_WARNING(DbgInfo, "Buffer is empty!\n"); - - /* Give the descriptor back to the HCF */ - hcf_dma_rx_put(&(lp->hcfCtx), desc); - return -EIO; - } - - /* Read the HFS_STAT register from the lookahead buffer */ - hfs_stat = (hcf_16) (desc->buf_addr[HFS_STAT / 2]); - - /* Make sure the frame isn't bad */ - if ((hfs_stat & HFS_STAT_ERR) != HCF_SUCCESS) { - DBG_WARNING(DbgInfo, - "HFS_STAT_ERROR (0x%x) in Rx Packet\n", - desc->buf_addr[HFS_STAT / 2]); - - /* Give the descriptor back to the HCF */ - hcf_dma_rx_put(&(lp->hcfCtx), desc); - return -EIO; - } - - /* Determine what port this packet is for */ - port = (hfs_stat >> 8) & 0x0007; - DBG_RX(DbgInfo, "Rx frame for port %d\n", port); - - pktlen = GET_BUF_CNT(desc_next); - if (pktlen != 0) { - skb = ALLOC_SKB(pktlen); - if (skb != NULL) { - switch (port) { -#ifdef USE_WDS - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - skb->dev = - lp->wds_port[port - 1].dev; - break; -#endif /* USE_WDS */ - - case 0: - default: - skb->dev = dev; - break; - } - - GET_PACKET_DMA(skb->dev, skb, pktlen); - - /* Give the descriptor back to the HCF */ - hcf_dma_rx_put(&(lp->hcfCtx), desc); - - netif_rx(skb); - - if (port == 0) { - lp->stats.rx_packets++; - lp->stats.rx_bytes += pktlen; - } -#ifdef USE_WDS - else { - lp->wds_port[port - - 1].stats. - rx_packets++; - lp->wds_port[port - - 1].stats. - rx_bytes += pktlen; - } -#endif /* USE_WDS */ - - dev->last_rx = jiffies; - - } else { - DBG_ERROR(DbgInfo, - "Could not alloc skb\n"); - - if (port == 0) - lp->stats.rx_dropped++; -#ifdef USE_WDS - else { - lp->wds_port[port - - 1].stats. - rx_dropped++; - } -#endif /* USE_WDS */ - } - } - } - /*}*/ - } - - return 0; -} /* wl_rx_dma */ - -/*============================================================================*/ -#endif /* ENABLE_DMA */ diff --git a/drivers/staging/wlags49_h2/wl_netdev.h b/drivers/staging/wlags49_h2/wl_netdev.h deleted file mode 100644 index 95bfbebf35d6..000000000000 --- a/drivers/staging/wlags49_h2/wl_netdev.h +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required by the network layerentry points - * into the driver. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_NETDEV_H__ -#define __WL_NETDEV_H__ - - - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -int wl_init(struct net_device *dev); - -int wl_config(struct net_device *dev, struct ifmap *map); - -struct net_device *wl_device_alloc(void); - -void wl_device_dealloc(struct net_device *dev); - -int wl_open(struct net_device *dev); - -int wl_close(struct net_device *dev); - -int wl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); - -int wl_tx(struct sk_buff *skb, struct net_device *dev, int port); - -int wl_send(struct wl_private *lp); - -int wl_rx(struct net_device *dev); - -void wl_tx_timeout(struct net_device *dev); - -struct net_device_stats *wl_stats(struct net_device *dev); - - -#ifdef ENABLE_DMA -int wl_send_dma(struct wl_private *lp, struct sk_buff *skb, int port); -int wl_rx_dma(struct net_device *dev); -#endif - -#ifdef NEW_MULTICAST -void wl_multicast(struct net_device *dev); -#else -void wl_multicast(struct net_device *dev, int num_addrs, void *addrs); -#endif /* NEW_MULTICAST */ - - -int wl_tx_port0(struct sk_buff *skb, struct net_device *dev); - - -#ifdef USE_WDS - -int wl_tx_port1(struct sk_buff *skb, struct net_device *dev); -int wl_tx_port2(struct sk_buff *skb, struct net_device *dev); -int wl_tx_port3(struct sk_buff *skb, struct net_device *dev); -int wl_tx_port4(struct sk_buff *skb, struct net_device *dev); -int wl_tx_port5(struct sk_buff *skb, struct net_device *dev); -int wl_tx_port6(struct sk_buff *skb, struct net_device *dev); - -void wl_wds_device_alloc(struct wl_private *lp); -void wl_wds_device_dealloc(struct wl_private *lp); -void wl_wds_netif_start_queue(struct wl_private *lp); -void wl_wds_netif_stop_queue(struct wl_private *lp); -void wl_wds_netif_wake_queue(struct wl_private *lp); -void wl_wds_netif_carrier_on(struct wl_private *lp); -void wl_wds_netif_carrier_off(struct wl_private *lp); - -#endif /* USE_WDS */ - - -#ifdef USE_WDS - -#define WL_WDS_DEVICE_ALLOC(ARG) wl_wds_device_alloc(ARG) -#define WL_WDS_DEVICE_DEALLOC(ARG) wl_wds_device_dealloc(ARG) -#define WL_WDS_NETIF_START_QUEUE(ARG) wl_wds_netif_start_queue(ARG) -#define WL_WDS_NETIF_STOP_QUEUE(ARG) wl_wds_netif_stop_queue(ARG) -#define WL_WDS_NETIF_WAKE_QUEUE(ARG) wl_wds_netif_wake_queue(ARG) -#define WL_WDS_NETIF_CARRIER_ON(ARG) wl_wds_netif_carrier_on(ARG) -#define WL_WDS_NETIF_CARRIER_OFF(ARG) wl_wds_netif_carrier_off(ARG) - -#else - -#define WL_WDS_DEVICE_ALLOC(ARG) -#define WL_WDS_DEVICE_DEALLOC(ARG) -#define WL_WDS_NETIF_START_QUEUE(ARG) -#define WL_WDS_NETIF_STOP_QUEUE(ARG) -#define WL_WDS_NETIF_WAKE_QUEUE(ARG) -#define WL_WDS_NETIF_CARRIER_ON(ARG) -#define WL_WDS_NETIF_CARRIER_OFF(ARG) - -#endif /* USE_WDS */ - - -#endif /* __WL_NETDEV_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_priv.c b/drivers/staging/wlags49_h2/wl_priv.c deleted file mode 100644 index aff927350222..000000000000 --- a/drivers/staging/wlags49_h2/wl_priv.c +++ /dev/null @@ -1,1928 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file defines handling routines for the private IOCTLs - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include files - ******************************************************************************/ -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -int wvlan_uil_connect(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_disconnect(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_action(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_block(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_unblock(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_send_diag_msg(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_put_info(struct uilreq *urq, struct wl_private *lp); -int wvlan_uil_get_info(struct uilreq *urq, struct wl_private *lp); - -int cfg_driver_info(struct uilreq *urq, struct wl_private *lp); -int cfg_driver_identity(struct uilreq *urq, struct wl_private *lp); - - -/* If USE_UIL is not defined, then none of the UIL Interface code below will - be included in the build */ -#ifdef USE_UIL - -/******************************************************************************* - * wvlan_uil() - ******************************************************************************* - * - * DESCRIPTION: - * - * The handler function for the UIL interface. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_uil(struct uilreq *urq, struct wl_private *lp) -{ - int ioctl_ret = 0; - - switch (urq->command) { - case UIL_FUN_CONNECT: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_CONNECT\n"); - ioctl_ret = wvlan_uil_connect(urq, lp); - break; - case UIL_FUN_DISCONNECT: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_DISCONNECT\n"); - ioctl_ret = wvlan_uil_disconnect(urq, lp); - break; - case UIL_FUN_ACTION: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_ACTION\n"); - ioctl_ret = wvlan_uil_action(urq, lp); - break; - case UIL_FUN_SEND_DIAG_MSG: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_SEND_DIAG_MSG\n"); - ioctl_ret = wvlan_uil_send_diag_msg(urq, lp); - break; - case UIL_FUN_GET_INFO: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_GET_INFO\n"); - ioctl_ret = wvlan_uil_get_info(urq, lp); - break; - case UIL_FUN_PUT_INFO: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- WVLAN2_UIL_PUT_INFO\n"); - ioctl_ret = wvlan_uil_put_info(urq, lp); - break; - default: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_UIL -- UNSUPPORTED UIL CODE: 0x%X", urq->command); - ioctl_ret = -EOPNOTSUPP; - break; - } - return ioctl_ret; -} /* wvlan_uil */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_connect() - ******************************************************************************* - * - * DESCRIPTION: - * - * Connect to the UIL in order to make a request. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_connect(struct uilreq *urq, struct wl_private *lp) -{ - if (!(lp->flags & WVLAN2_UIL_CONNECTED)) { - lp->flags |= WVLAN2_UIL_CONNECTED; - urq->hcfCtx = &(lp->hcfCtx); - urq->result = UIL_SUCCESS; - } else { - DBG_WARNING(DbgInfo, "UIL_ERR_IN_USE\n"); - urq->result = UIL_ERR_IN_USE; - } - - return 0; -} /* wvlan_uil_connect */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_disconnect() - ******************************************************************************* - * - * DESCRIPTION: - * - * Disconnect from the UIL after a request has been completed. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_disconnect(struct uilreq *urq, struct wl_private *lp) -{ - if (urq->hcfCtx == &(lp->hcfCtx)) { - if (lp->flags & WVLAN2_UIL_CONNECTED) { - lp->flags &= ~WVLAN2_UIL_CONNECTED; - /* - if (lp->flags & WVLAN2_UIL_BUSY) { - lp->flags &= ~WVLAN2_UIL_BUSY; - netif_start_queue(lp->dev); - } - */ - } - - urq->hcfCtx = NULL; - urq->result = UIL_SUCCESS; - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return 0; -} /* wvlan_uil_disconnect */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_action() - ******************************************************************************* - * - * DESCRIPTION: - * - * Handler for the UIL_ACT_xxx subcodes associated with UIL_FUN_ACTION - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_action(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - ltv_t *ltv; - - if (urq->hcfCtx == &(lp->hcfCtx)) { - /* Make sure there's an LTV in the request buffer */ - ltv = (ltv_t *)urq->data; - if (ltv != NULL) { - /* Switch on the Type field of the LTV contained in the request - buffer */ - switch (ltv->typ) { - case UIL_ACT_BLOCK: - DBG_TRACE(DbgInfo, "UIL_ACT_BLOCK\n"); - result = wvlan_uil_block(urq, lp); - break; - case UIL_ACT_UNBLOCK: - DBG_TRACE(DbgInfo, "UIL_ACT_UNBLOCK\n"); - result = wvlan_uil_unblock(urq, lp); - break; - case UIL_ACT_SCAN: - DBG_TRACE(DbgInfo, "UIL_ACT_SCAN\n"); - urq->result = hcf_action(&(lp->hcfCtx), MDD_ACT_SCAN); - break; - case UIL_ACT_APPLY: - DBG_TRACE(DbgInfo, "UIL_ACT_APPLY\n"); - urq->result = wl_apply(lp); - break; - case UIL_ACT_RESET: - DBG_TRACE(DbgInfo, "UIL_ACT_RESET\n"); - urq->result = wl_go(lp); - break; - default: - DBG_WARNING(DbgInfo, "Unknown action code: 0x%x\n", ltv->typ); - break; - } - } else { - DBG_ERROR(DbgInfo, "Bad LTV for this action\n"); - urq->result = UIL_ERR_LEN; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_action */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_block() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets a block in the driver to prevent access to the card by other - * processes. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ - -int wvlan_uil_block(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - - if (urq->hcfCtx == &(lp->hcfCtx)) { - if (capable(CAP_NET_ADMIN)) { - lp->flags |= WVLAN2_UIL_BUSY; - netif_stop_queue(lp->dev); - WL_WDS_NETIF_STOP_QUEUE(lp); - urq->result = UIL_SUCCESS; - } else { - DBG_ERROR(DbgInfo, "EPERM\n"); - urq->result = UIL_FAILURE; - result = -EPERM; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_block */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_unblock() - ******************************************************************************* - * - * DESCRIPTION: - * - * Unblocks the driver to restore access to the card by other processes. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_unblock(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - - if (urq->hcfCtx == &(lp->hcfCtx)) { - if (capable(CAP_NET_ADMIN)) { - if (lp->flags & WVLAN2_UIL_BUSY) { - lp->flags &= ~WVLAN2_UIL_BUSY; - netif_wake_queue(lp->dev); - WL_WDS_NETIF_WAKE_QUEUE(lp); - } - } else { - DBG_ERROR(DbgInfo, "EPERM\n"); - urq->result = UIL_FAILURE; - result = -EPERM; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_unblock */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_uil_send_diag_msg() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sends a diagnostic message to the card. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_send_diag_msg(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - DESC_STRCT Descp[1]; - - if (urq->hcfCtx == &(lp->hcfCtx)) { - if (capable(CAP_NET_ADMIN)) { - if ((urq->data != NULL) && (urq->len != 0)) { - if (lp->hcfCtx.IFB_RscInd != 0) { - u_char *data; - - /* Verify the user buffer */ - result = verify_area(VERIFY_READ, urq->data, urq->len); - if (result != 0) { - DBG_ERROR(DbgInfo, "verify_area failed, result: %d\n", result); - urq->result = UIL_FAILURE; - return result; - } - - data = kmalloc(urq->len, GFP_KERNEL); - if (data != NULL) { - memset(Descp, 0, sizeof(DESC_STRCT)); - memcpy(data, urq->data, urq->len); - - Descp[0].buf_addr = (wci_bufp)data; - Descp[0].BUF_CNT = urq->len; - Descp[0].next_desc_addr = 0; /* terminate list */ - - hcf_send_msg(&(lp->hcfCtx), &Descp[0], HCF_PORT_0); - kfree(data); - } else { - DBG_ERROR(DbgInfo, "ENOMEM\n"); - urq->result = UIL_FAILURE; - result = -ENOMEM; - return result; - } - - } else { - urq->result = UIL_ERR_BUSY; - } - - } else { - urq->result = UIL_FAILURE; - } - } else { - DBG_ERROR(DbgInfo, "EPERM\n"); - urq->result = UIL_FAILURE; - result = -EPERM; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_send_diag_msg */ -/*============================================================================*/ - - -/******************************************************************************* - * wvlan_uil_put_info() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sends a specific RID directly to the driver to set configuration info. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_put_info(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - ltv_t *pLtv; - bool_t ltvAllocated = FALSE; - ENCSTRCT sEncryption; - size_t len; - -#ifdef USE_WDS - hcf_16 hcfPort = HCF_PORT_0; -#endif /* USE_WDS */ - - if (urq->hcfCtx == &(lp->hcfCtx)) { - if (capable(CAP_NET_ADMIN)) { - if ((urq->data != NULL) && (urq->len != 0)) { - /* Make sure that we have at least a command and length to send. */ - if (urq->len < (sizeof(hcf_16) * 2)) { - urq->len = sizeof(lp->ltvRecord); - urq->result = UIL_ERR_LEN; - DBG_ERROR(DbgInfo, "No Length/Type in LTV!!!\n"); - DBG_ERROR(DbgInfo, "UIL_ERR_LEN\n"); - return result; - } - - /* Verify the user buffer */ - result = verify_area(VERIFY_READ, urq->data, urq->len); - if (result != 0) { - urq->result = UIL_FAILURE; - DBG_ERROR(DbgInfo, "verify_area(), VERIFY_READ FAILED\n"); - return result; - } - - /* Get only the command and length information. */ - copy_from_user(&(lp->ltvRecord), urq->data, sizeof(hcf_16) * 2); - - /* Make sure the incoming LTV record length is within the bounds of the - IOCTL length */ - if (((lp->ltvRecord.len + 1) * sizeof(hcf_16)) > urq->len) { - urq->len = sizeof(lp->ltvRecord); - urq->result = UIL_ERR_LEN; - DBG_ERROR(DbgInfo, "UIL_ERR_LEN\n"); - return result; - } - - /* If the requested length is greater than the size of our local - 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 = kmalloc(urq->len, GFP_KERNEL); - if (pLtv != NULL) { - ltvAllocated = TRUE; - } else { - DBG_ERROR(DbgInfo, "Alloc FAILED\n"); - urq->len = sizeof(lp->ltvRecord); - urq->result = UIL_ERR_LEN; - result = -ENOMEM; - return result; - } - } else { - pLtv = &(lp->ltvRecord); - } - - /* Copy the data from the user's buffer into the local LTV - record data area. */ - copy_from_user(pLtv, urq->data, urq->len); - - - /* We need to snoop the commands to see if there is anything we - need to store for the purposes of a reset or start/stop - sequence. Perform endian translation as needed */ - switch (pLtv->typ) { - case CFG_CNF_PORT_TYPE: - lp->PortType = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_OWN_MAC_ADDR: - /* TODO: determine if we are going to store anything based on this */ - break; - case CFG_CNF_OWN_CHANNEL: - lp->Channel = pLtv->u.u16[0]; - 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 separate storage for this? */ - /* case CFG_CNF_OWN_SSID: */ - case CFG_CNF_OWN_ATIM_WINDOW: - lp->atimWindow = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_SYSTEM_SCALE: - lp->DistanceBetweenAPs = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - - case CFG_CNF_MAX_DATA_LEN: - /* TODO: determine if we are going to store anything based - on this */ - break; - case CFG_CNF_PM_ENABLED: - lp->PMEnabled = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_MCAST_RX: - lp->MulticastReceive = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_MAX_SLEEP_DURATION: - lp->MaxSleepDuration = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_HOLDOVER_DURATION: - lp->holdoverDuration = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_OWN_NAME: - memset(lp->StationName, 0, sizeof(lp->StationName)); - len = min_t(size_t, pLtv->u.u16[0], sizeof(lp->StationName)); - strlcpy(lp->StationName, &pLtv->u.u8[2], len); - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_LOAD_BALANCING: - lp->loadBalancing = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_MEDIUM_DISTRIBUTION: - lp->mediumDistribution = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#ifdef WARP - case CFG_CNF_TX_POW_LVL: - lp->txPowLevel = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - /* case CFG_CNF_SHORT_RETRY_LIMIT: */ /* Short Retry Limit */ - /* case 0xFC33: */ /* Long Retry Limit */ - case CFG_SUPPORTED_RATE_SET_CNTL: /* Supported Rate Set Control */ - lp->srsc[0] = pLtv->u.u16[0]; - lp->srsc[1] = pLtv->u.u16[1]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - pLtv->u.u16[1] = CNV_INT_TO_LITTLE(pLtv->u.u16[1]); - break; - case CFG_BASIC_RATE_SET_CNTL: /* Basic Rate Set Control */ - lp->brsc[0] = pLtv->u.u16[0]; - lp->brsc[1] = pLtv->u.u16[1]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - pLtv->u.u16[1] = CNV_INT_TO_LITTLE(pLtv->u.u16[1]); - break; - case CFG_CNF_CONNECTION_CNTL: - lp->connectionControl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - /* case CFG_PROBE_DATA_RATE: */ -#endif /* HERMES25 */ - -#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */ - /* ;?should we restore this to allow smaller memory footprint */ - - case CFG_CNF_OWN_DTIM_PERIOD: - lp->DTIMPeriod = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#ifdef WARP - case CFG_CNF_OWN_BEACON_INTERVAL: /* Own Beacon Interval */ - lp->ownBeaconInterval = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#endif /* WARP */ - case CFG_COEXISTENSE_BEHAVIOUR: /* Coexistence behavior */ - lp->coexistence = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#ifdef USE_WDS - case CFG_CNF_WDS_ADDR1: - memcpy(&lp->wds_port[0].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_1; - break; - case CFG_CNF_WDS_ADDR2: - memcpy(&lp->wds_port[1].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_2; - break; - case CFG_CNF_WDS_ADDR3: - memcpy(&lp->wds_port[2].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_3; - break; - case CFG_CNF_WDS_ADDR4: - memcpy(&lp->wds_port[3].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_4; - break; - case CFG_CNF_WDS_ADDR5: - memcpy(&lp->wds_port[4].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_5; - break; - case CFG_CNF_WDS_ADDR6: - memcpy(&lp->wds_port[5].wdsAddress, &pLtv->u.u8[0], ETH_ALEN); - hcfPort = HCF_PORT_6; - break; -#endif /* USE_WDS */ - - case CFG_CNF_MCAST_PM_BUF: - lp->multicastPMBuffering = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_REJECT_ANY: - lp->RejectAny = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#endif - - case CFG_CNF_ENCRYPTION: - lp->EnableEncryption = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_CNF_AUTHENTICATION: - lp->authentication = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */ - /* ;?should we restore this to allow smaller memory footprint */ - - /* case CFG_CNF_EXCL_UNENCRYPTED: - lp->ExcludeUnencrypted = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; */ - case CFG_CNF_MCAST_RATE: - /* TODO: determine if we are going to store anything based on this */ - break; - case CFG_CNF_INTRA_BSS_RELAY: - lp->intraBSSRelay = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#endif - - case CFG_CNF_MICRO_WAVE: - /* TODO: determine if we are going to store anything based on this */ - break; - /*case CFG_CNF_LOAD_BALANCING:*/ - /* TODO: determine if we are going to store anything based on this */ - /* break; */ - /* case CFG_CNF_MEDIUM_DISTRIBUTION: */ - /* TODO: determine if we are going to store anything based on this */ - /* break; */ - /* case CFG_CNF_RX_ALL_GROUP_ADDRESS: */ - /* TODO: determine if we are going to store anything based on this */ - /* break; */ - /* case CFG_CNF_COUNTRY_INFO: */ - /* TODO: determine if we are going to store anything based on this */ - /* break; */ - case CFG_CNF_OWN_SSID: - /* case CNF_DESIRED_SSID: */ - case CFG_DESIRED_SSID: - memset(lp->NetworkName, 0, sizeof(lp->NetworkName)); - memcpy((void *)lp->NetworkName, (void *)&pLtv->u.u8[2], (size_t)pLtv->u.u16[0]); - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - - /* take care of the special network name "ANY" case */ - if ((strlen(&pLtv->u.u8[2]) == 0) || - (strcmp(&pLtv->u.u8[2], "ANY") == 0) || - (strcmp(&pLtv->u.u8[2], "any") == 0)) { - /* set the SSID_STRCT llen field (u16[0]) to zero, and the - effectually null the string u8[2] */ - pLtv->u.u16[0] = 0; - pLtv->u.u8[2] = 0; - } - break; - case CFG_GROUP_ADDR: - /* TODO: determine if we are going to store anything based on this */ - break; - case CFG_CREATE_IBSS: - lp->CreateIBSS = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_RTS_THRH: - lp->RTSThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_TX_RATE_CNTL: - lp->TxRateControl[0] = pLtv->u.u16[0]; - lp->TxRateControl[1] = pLtv->u.u16[1]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - pLtv->u.u16[1] = CNV_INT_TO_LITTLE(pLtv->u.u16[1]); - break; - case CFG_PROMISCUOUS_MODE: - /* TODO: determine if we are going to store anything based on this */ - break; - /* case CFG_WAKE_ON_LAN: */ - /* TODO: determine if we are going to store anything based on this */ - /* break; */ -#if 1 /* ;? #if (HCF_TYPE) & HCF_TYPE_AP */ - /* ;?should we restore this to allow smaller memory footprint */ - case CFG_RTS_THRH0: - lp->RTSThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_TX_RATE_CNTL0: -/*;?no idea what this should be, get going so comment it out lp->TxRateControl = pLtv->u.u16[0];*/ - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; -#ifdef USE_WDS - case CFG_RTS_THRH1: - lp->wds_port[0].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_1; - break; - case CFG_RTS_THRH2: - lp->wds_port[1].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_2; - break; - case CFG_RTS_THRH3: - lp->wds_port[2].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_3; - break; - case CFG_RTS_THRH4: - lp->wds_port[3].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_4; - break; - case CFG_RTS_THRH5: - lp->wds_port[4].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_5; - break; - case CFG_RTS_THRH6: - lp->wds_port[5].rtsThreshold = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_6; - break; - case CFG_TX_RATE_CNTL1: - lp->wds_port[0].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_1; - break; - case CFG_TX_RATE_CNTL2: - lp->wds_port[1].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_2; - break; - case CFG_TX_RATE_CNTL3: - lp->wds_port[2].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_3; - break; - case CFG_TX_RATE_CNTL4: - lp->wds_port[3].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_4; - break; - case CFG_TX_RATE_CNTL5: - lp->wds_port[4].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_5; - break; - case CFG_TX_RATE_CNTL6: - lp->wds_port[5].txRateCntl = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - hcfPort = HCF_PORT_6; - break; -#endif /* USE_WDS */ -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - case CFG_DEFAULT_KEYS: - { - CFG_DEFAULT_KEYS_STRCT *pKeys = (CFG_DEFAULT_KEYS_STRCT *)pLtv; - - pKeys->key[0].len = CNV_INT_TO_LITTLE(pKeys->key[0].len); - pKeys->key[1].len = CNV_INT_TO_LITTLE(pKeys->key[1].len); - pKeys->key[2].len = CNV_INT_TO_LITTLE(pKeys->key[2].len); - pKeys->key[3].len = CNV_INT_TO_LITTLE(pKeys->key[3].len); - - memcpy((void *)&(lp->DefaultKeys), (void *)pKeys, - sizeof(CFG_DEFAULT_KEYS_STRCT)); - } - break; - case CFG_TX_KEY_ID: - lp->TransmitKeyID = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_SCAN_SSID: - /* TODO: determine if we are going to store anything based on this */ - break; - case CFG_TICK_TIME: - /* TODO: determine if we are going to store anything based on this */ - break; - /* these RIDS are Info RIDs, and should they be allowed for puts??? */ - case CFG_MAX_LOAD_TIME: - case CFG_DL_BUF: - /* case CFG_HSI_SUP_RANGE: */ - case CFG_NIC_SERIAL_NUMBER: - case CFG_NIC_IDENTITY: - case CFG_NIC_MFI_SUP_RANGE: - case CFG_NIC_CFI_SUP_RANGE: - case CFG_NIC_TEMP_TYPE: - case CFG_NIC_PROFILE: - case CFG_FW_IDENTITY: - case CFG_FW_SUP_RANGE: - case CFG_MFI_ACT_RANGES_STA: - case CFG_CFI_ACT_RANGES_STA: - case CFG_PORT_STAT: - case CFG_CUR_SSID: - case CFG_CUR_BSSID: - case CFG_COMMS_QUALITY: - case CFG_CUR_TX_RATE: - case CFG_CUR_BEACON_INTERVAL: - case CFG_CUR_SCALE_THRH: - case CFG_PROTOCOL_RSP_TIME: - case CFG_CUR_SHORT_RETRY_LIMIT: - case CFG_CUR_LONG_RETRY_LIMIT: - case CFG_MAX_TX_LIFETIME: - case CFG_MAX_RX_LIFETIME: - case CFG_CF_POLLABLE: - case CFG_AUTHENTICATION_ALGORITHMS: - case CFG_PRIVACY_OPT_IMPLEMENTED: - /* case CFG_CURRENT_REMOTE_RATES: */ - /* case CFG_CURRENT_USED_RATES: */ - /* case CFG_CURRENT_SYSTEM_SCALE: */ - /* case CFG_CURRENT_TX_RATE1: */ - /* case CFG_CURRENT_TX_RATE2: */ - /* case CFG_CURRENT_TX_RATE3: */ - /* case CFG_CURRENT_TX_RATE4: */ - /* case CFG_CURRENT_TX_RATE5: */ - /* case CFG_CURRENT_TX_RATE6: */ - case CFG_NIC_MAC_ADDR: - case CFG_PCF_INFO: - /* case CFG_CURRENT_COUNTRY_INFO: */ - case CFG_PHY_TYPE: - case CFG_CUR_CHANNEL: - /* case CFG_CURRENT_POWER_STATE: */ - /* case CFG_CCAMODE: */ - case CFG_SUPPORTED_DATA_RATES: - break; - case CFG_AP_MODE: -/*;? lp->DownloadFirmware = (pLtv->u.u16[0]) + 1; */ - DBG_ERROR(DbgInfo, "set CFG_AP_MODE no longer supported\n"); - break; - case CFG_ENCRYPT_STRING: - /* TODO: ENDIAN TRANSLATION HERE??? */ - memset(lp->szEncryption, 0, sizeof(lp->szEncryption)); - memcpy((void *)lp->szEncryption, (void *)&pLtv->u.u8[0], - (pLtv->len * sizeof(hcf_16))); - wl_wep_decode(CRYPT_CODE, &sEncryption, - lp->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 - base used 0-3 in the API DLL, which was ported to Linux. For - the sake of the user experience, we decided to keep 0-3 as the - numbers used in the DLL; and will perform the +1 conversion here. - We could have converted the entire Linux driver, but this is - less obtrusive. This may be a "todo" to convert the whole driver */ - lp->TransmitKeyID = sEncryption.wTxKeyID + 1; - lp->EnableEncryption = sEncryption.wEnabled; - - memcpy(&lp->DefaultKeys, &sEncryption.EncStr, - sizeof(CFG_DEFAULT_KEYS_STRCT)); - break; - /*case CFG_COUNTRY_STRING: - memset(lp->countryString, 0, sizeof(lp->countryString)); - memcpy((void *)lp->countryString, (void *)&pLtv->u.u8[2], (size_t)pLtv->u.u16[0]); - break; - */ - - case CFG_DRIVER_ENABLE: - lp->driverEnable = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_WOLAS_ENABLE: - lp->wolasEnable = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_SET_WPA_AUTH_KEY_MGMT_SUITE: - lp->AuthKeyMgmtSuite = pLtv->u.u16[0]; - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_DISASSOCIATE_ADDR: - pLtv->u.u16[ETH_ALEN / 2] = CNV_INT_TO_LITTLE(pLtv->u.u16[ETH_ALEN / 2]); - break; - case CFG_ADD_TKIP_DEFAULT_KEY: - case CFG_REMOVE_TKIP_DEFAULT_KEY: - /* Endian convert the Tx Key Information */ - pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]); - break; - case CFG_ADD_TKIP_MAPPED_KEY: - break; - case CFG_REMOVE_TKIP_MAPPED_KEY: - break; - /* some RIDs just can't be put */ - case CFG_MB_INFO: - case CFG_IFB: - default: - break; - } - - /* This code will prevent Static Configuration Entities from - being sent to the card, as they require a call to - UIL_ACT_APPLY to take effect. Dynamic Entities will be sent - immediately */ - switch (pLtv->typ) { - case CFG_CNF_PORT_TYPE: - case CFG_CNF_OWN_MAC_ADDR: - case CFG_CNF_OWN_CHANNEL: - case CFG_CNF_OWN_SSID: - case CFG_CNF_OWN_ATIM_WINDOW: - case CFG_CNF_SYSTEM_SCALE: - case CFG_CNF_MAX_DATA_LEN: - case CFG_CNF_PM_ENABLED: - case CFG_CNF_MCAST_RX: - case CFG_CNF_MAX_SLEEP_DURATION: - case CFG_CNF_HOLDOVER_DURATION: - case CFG_CNF_OWN_NAME: - case CFG_CNF_LOAD_BALANCING: - case CFG_CNF_MEDIUM_DISTRIBUTION: -#ifdef WARP - case CFG_CNF_TX_POW_LVL: - case CFG_CNF_CONNECTION_CNTL: - /*case CFG_PROBE_DATA_RATE: */ -#endif /* HERMES25 */ -#if 1 /*;? (HCF_TYPE) & HCF_TYPE_AP */ - /*;?should we restore this to allow smaller memory footprint */ - case CFG_CNF_OWN_DTIM_PERIOD: -#ifdef WARP - case CFG_CNF_OWN_BEACON_INTERVAL: /* Own Beacon Interval */ -#endif /* WARP */ -#ifdef USE_WDS - case CFG_CNF_WDS_ADDR1: - case CFG_CNF_WDS_ADDR2: - case CFG_CNF_WDS_ADDR3: - case CFG_CNF_WDS_ADDR4: - case CFG_CNF_WDS_ADDR5: - case CFG_CNF_WDS_ADDR6: -#endif - case CFG_CNF_MCAST_PM_BUF: - case CFG_CNF_REJECT_ANY: -#endif - - case CFG_CNF_ENCRYPTION: - case CFG_CNF_AUTHENTICATION: -#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */ - /* ;?should we restore this to allow smaller memory footprint */ - - case CFG_CNF_EXCL_UNENCRYPTED: - case CFG_CNF_MCAST_RATE: - case CFG_CNF_INTRA_BSS_RELAY: -#endif - - case CFG_CNF_MICRO_WAVE: - /* case CFG_CNF_LOAD_BALANCING: */ - /* case CFG_CNF_MEDIUM_DISTRIBUTION: */ - /* case CFG_CNF_RX_ALL_GROUP_ADDRESS: */ - /* case CFG_CNF_COUNTRY_INFO: */ - /* case CFG_COUNTRY_STRING: */ - case CFG_AP_MODE: - case CFG_ENCRYPT_STRING: - /* case CFG_DRIVER_ENABLE: */ - case CFG_WOLAS_ENABLE: - case CFG_MB_INFO: - case CFG_IFB: - break; - /* Deal with this dynamic MSF RID, as it's required for WPA */ - case CFG_DRIVER_ENABLE: - if (lp->driverEnable) { - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_ENABLE | HCF_PORT_0); - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_CONNECT); - } else { - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_DISABLE | HCF_PORT_0); - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_DISCONNECT); - } - break; - default: - wl_act_int_off(lp); - urq->result = hcf_put_info(&(lp->hcfCtx), (LTVP) pLtv); - wl_act_int_on(lp); - break; - } - - if (ltvAllocated) - kfree(pLtv); - } else { - urq->result = UIL_FAILURE; - } - } else { - DBG_ERROR(DbgInfo, "EPERM\n"); - urq->result = UIL_FAILURE; - result = -EPERM; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_put_info */ - -/*============================================================================*/ - -/******************************************************************************* - * wvlan_uil_get_info() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sends a specific RID directly to the driver to retrieve configuration - * info. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int wvlan_uil_get_info(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - int i; - - if (urq->hcfCtx == &(lp->hcfCtx)) { - if ((urq->data != NULL) && (urq->len != 0)) { - ltv_t *pLtv; - bool_t ltvAllocated = FALSE; - - /* Make sure that we have at least a command and length */ - if (urq->len < (sizeof(hcf_16) * 2)) { - urq->len = sizeof(lp->ltvRecord); - DBG_ERROR(DbgInfo, "No Length/Type in LTV!!!\n"); - DBG_ERROR(DbgInfo, "UIL_ERR_LEN\n"); - urq->result = UIL_ERR_LEN; - return result; - } - - /* Verify the user's LTV record header. */ - result = verify_area(VERIFY_READ, urq->data, sizeof(hcf_16) * 2); - if (result != 0) { - DBG_ERROR(DbgInfo, "verify_area(), VERIFY_READ FAILED\n"); - urq->result = UIL_FAILURE; - return result; - } - - /* Get only the command and length information. */ - result = copy_from_user(&(lp->ltvRecord), urq->data, sizeof(hcf_16) * 2); - - /* Make sure the incoming LTV record length is within the bounds of - the IOCTL length. */ - if (((lp->ltvRecord.len + 1) * sizeof(hcf_16)) > urq->len) { - DBG_ERROR(DbgInfo, "Incoming LTV too big\n"); - urq->len = sizeof(lp->ltvRecord); - urq->result = UIL_ERR_LEN; - return result; - } - - /* Determine if hcf_get_info() is needed or not */ - switch (lp->ltvRecord.typ) { - case CFG_NIC_IDENTITY: - memcpy(&lp->ltvRecord.u.u8[0], &lp->NICIdentity, sizeof(lp->NICIdentity)); - break; - case CFG_PRI_IDENTITY: - memcpy(&lp->ltvRecord.u.u8[0], &lp->PrimaryIdentity, sizeof(lp->PrimaryIdentity)); - break; - case CFG_AP_MODE: - DBG_ERROR(DbgInfo, "set CFG_AP_MODE no longer supported, so is get useful ????\n"); - lp->ltvRecord.u.u16[0] = - CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_AP; - break; - /* case CFG_DRV_INFO: */ - case CFG_ENCRYPT_STRING: - case CFG_COUNTRY_STRING: - case CFG_DRIVER_ENABLE: - case CFG_WOLAS_ENABLE: - /* TODO: determine if we're going to support these */ - urq->result = UIL_FAILURE; - break; - case CFG_DRV_INFO: - DBG_TRACE(DbgInfo, "Intercept CFG_DRV_INFO\n"); - result = cfg_driver_info(urq, lp); - break; - case CFG_DRV_IDENTITY: - DBG_TRACE(DbgInfo, "Intercept CFG_DRV_IDENTITY\n"); - result = cfg_driver_identity(urq, lp); - break; - case CFG_IFB: - /* IFB can be a security hole */ - if (!capable(CAP_NET_ADMIN)) { - result = -EPERM; - break; - } - - /* Else fall through to the default */ - - case CFG_FW_IDENTITY: /* For Hermes-1, this is cached */ - default: - - /* Verify the user buffer */ - result = verify_area(VERIFY_WRITE, urq->data, urq->len); - if (result != 0) { - DBG_ERROR(DbgInfo, "verify_area(), VERIFY_WRITE FAILED\n"); - urq->result = UIL_FAILURE; - break; - } - - /* If the requested length is greater than the size of our local - 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 = kmalloc(urq->len, GFP_KERNEL); - if (pLtv != NULL) { - ltvAllocated = TRUE; - - /* Copy the command/length information into the new buffer. */ - memcpy(pLtv, &(lp->ltvRecord), sizeof(hcf_16) * 2); - } else { - urq->len = sizeof(lp->ltvRecord); - urq->result = UIL_ERR_LEN; - DBG_ERROR(DbgInfo, "kmalloc FAILED\n"); - DBG_ERROR(DbgInfo, "UIL_ERR_LEN\n"); - result = -ENOMEM; - break; - } - } else { - pLtv = &(lp->ltvRecord); - } - - wl_act_int_off(lp); - urq->result = hcf_get_info(&(lp->hcfCtx), (LTVP) pLtv); - wl_act_int_on(lp); - - /* Copy the LTV into the user's buffer. */ - /*copy_to_user(urq->data, pLtv, urq->len); */ - - /*if(ltvAllocated) - { - kfree(pLtv); - }*/ - - /* urq->result = UIL_SUCCESS; */ - break; - } - - /* Handle endian conversion of special fields */ - switch (lp->ltvRecord.typ) { - /* simple int gets just need the first hcf_16 byte flipped */ - case CFG_CNF_PORT_TYPE: - case CFG_CNF_OWN_CHANNEL: - case CFG_CNF_OWN_ATIM_WINDOW: - case CFG_CNF_SYSTEM_SCALE: - case CFG_CNF_MAX_DATA_LEN: - case CFG_CNF_PM_ENABLED: - case CFG_CNF_MCAST_RX: - case CFG_CNF_MAX_SLEEP_DURATION: - case CFG_CNF_HOLDOVER_DURATION: - case CFG_CNF_OWN_DTIM_PERIOD: - case CFG_CNF_MCAST_PM_BUF: - case CFG_CNF_REJECT_ANY: - case CFG_CNF_ENCRYPTION: - case CFG_CNF_AUTHENTICATION: - case CFG_CNF_EXCL_UNENCRYPTED: - case CFG_CNF_INTRA_BSS_RELAY: - case CFG_CNF_MICRO_WAVE: - case CFG_CNF_LOAD_BALANCING: - case CFG_CNF_MEDIUM_DISTRIBUTION: -#ifdef WARP - case CFG_CNF_TX_POW_LVL: - case CFG_CNF_CONNECTION_CNTL: - case CFG_CNF_OWN_BEACON_INTERVAL: /* Own Beacon Interval */ - case CFG_COEXISTENSE_BEHAVIOUR: /* Coexistence Behavior */ - /*case CFG_CNF_RX_ALL_GROUP_ADDRESS: */ -#endif /* HERMES25 */ - case CFG_CREATE_IBSS: - case CFG_RTS_THRH: - case CFG_PROMISCUOUS_MODE: - /*case CFG_WAKE_ON_LAN: */ - case CFG_RTS_THRH0: - case CFG_RTS_THRH1: - case CFG_RTS_THRH2: - case CFG_RTS_THRH3: - case CFG_RTS_THRH4: - case CFG_RTS_THRH5: - case CFG_RTS_THRH6: - case CFG_TX_RATE_CNTL0: - case CFG_TX_RATE_CNTL1: - case CFG_TX_RATE_CNTL2: - case CFG_TX_RATE_CNTL3: - case CFG_TX_RATE_CNTL4: - case CFG_TX_RATE_CNTL5: - case CFG_TX_RATE_CNTL6: - case CFG_TX_KEY_ID: - case CFG_TICK_TIME: - case CFG_MAX_LOAD_TIME: - case CFG_NIC_TEMP_TYPE: - case CFG_PORT_STAT: - case CFG_CUR_TX_RATE: - case CFG_CUR_BEACON_INTERVAL: - case CFG_PROTOCOL_RSP_TIME: - case CFG_CUR_SHORT_RETRY_LIMIT: - case CFG_CUR_LONG_RETRY_LIMIT: - case CFG_MAX_TX_LIFETIME: - case CFG_MAX_RX_LIFETIME: - case CFG_CF_POLLABLE: - case CFG_PRIVACY_OPT_IMPLEMENTED: - /* case CFG_CURRENT_REMOTE_RATES: */ - /* case CFG_CURRENT_USED_RATES: */ - /* case CFG_CURRENT_SYSTEM_SCALE: */ - /* case CFG_CURRENT_TX_RATE1: */ - /* case CFG_CURRENT_TX_RATE2: */ - /* case CFG_CURRENT_TX_RATE3: */ - /* case CFG_CURRENT_TX_RATE4: */ - /* case CFG_CURRENT_TX_RATE5: */ - /* case CFG_CURRENT_TX_RATE6: */ - case CFG_PHY_TYPE: - case CFG_CUR_CHANNEL: - /* case CFG_CURRENT_POWER_STATE: */ - /* case CFG_CCAMODE: */ - /* lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); */ - /* break; */ - /* name string gets just need the first hcf_16 byte flipped (length of string) */ - case CFG_CNF_OWN_SSID: - case CFG_CNF_OWN_NAME: - /* case CNF_DESIRED_SSID: */ - case CFG_DESIRED_SSID: - case CFG_SCAN_SSID: - case CFG_CUR_SSID: - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - break; - /* non-length counted strings need no byte flipping */ - case CFG_CNF_OWN_MAC_ADDR: - /* this case is no longer valid: CFG_CNF_WDS_ADDR */ - case CFG_CNF_WDS_ADDR1: - case CFG_CNF_WDS_ADDR2: - case CFG_CNF_WDS_ADDR3: - case CFG_CNF_WDS_ADDR4: - case CFG_CNF_WDS_ADDR5: - case CFG_CNF_WDS_ADDR6: - case CFG_GROUP_ADDR: - case CFG_NIC_SERIAL_NUMBER: - case CFG_CUR_BSSID: - case CFG_NIC_MAC_ADDR: - case CFG_SUPPORTED_DATA_RATES: /* need to ensure we can treat this as a string */ - break; - /* case CFG_CNF_COUNTRY_INFO: */ /* special case, see page 75 of 022486, Rev C. */ - /* case CFG_CURRENT_COUNTRY_INFO: */ /* special case, see page 101 of 022486, Rev C. */ - /* - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - lp->ltvRecord.u.u16[3] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[3]); - - for(i = 4; i < lp->ltvRecord.len; i++) { - lp->ltvRecord.u.u16[i] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[i]); - } - break; - */ - - case CFG_DEFAULT_KEYS: - { - CFG_DEFAULT_KEYS_STRCT *pKeys = (CFG_DEFAULT_KEYS_STRCT *)&lp->ltvRecord.u.u8[0]; - - pKeys[0].len = CNV_INT_TO_LITTLE(pKeys[0].len); - pKeys[1].len = CNV_INT_TO_LITTLE(pKeys[1].len); - pKeys[2].len = CNV_INT_TO_LITTLE(pKeys[2].len); - pKeys[3].len = CNV_INT_TO_LITTLE(pKeys[3].len); - } - break; - case CFG_CNF_MCAST_RATE: - case CFG_TX_RATE_CNTL: - case CFG_SUPPORTED_RATE_SET_CNTL: /* Supported Rate Set Control */ - case CFG_BASIC_RATE_SET_CNTL: /* Basic Rate Set Control */ - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[1]); - break; - case CFG_DL_BUF: - case CFG_NIC_IDENTITY: - case CFG_COMMS_QUALITY: - case CFG_PCF_INFO: - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[1]); - lp->ltvRecord.u.u16[2] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[2]); - break; - case CFG_FW_IDENTITY: - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[1]); - lp->ltvRecord.u.u16[2] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[2]); - lp->ltvRecord.u.u16[3] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[3]); - break; - /* case CFG_HSI_SUP_RANGE: */ - case CFG_NIC_MFI_SUP_RANGE: - case CFG_NIC_CFI_SUP_RANGE: - case CFG_NIC_PROFILE: - case CFG_FW_SUP_RANGE: - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[0]); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[1]); - lp->ltvRecord.u.u16[2] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[2]); - lp->ltvRecord.u.u16[3] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[3]); - lp->ltvRecord.u.u16[4] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[4]); - break; - case CFG_MFI_ACT_RANGES_STA: - case CFG_CFI_ACT_RANGES_STA: - case CFG_CUR_SCALE_THRH: - case CFG_AUTHENTICATION_ALGORITHMS: - for (i = 0; i < (lp->ltvRecord.len - 1); i++) - lp->ltvRecord.u.u16[i] = CNV_INT_TO_LITTLE(lp->ltvRecord.u.u16[i]); - break; - /* done at init time, and endian handled then */ - case CFG_PRI_IDENTITY: - break; - case CFG_MB_INFO: - /* wvlanEndianTranslateMailbox(pLtv); */ - break; - /* MSF and HCF RIDS */ - case CFG_IFB: - case CFG_DRV_INFO: - case CFG_AP_MODE: - case CFG_ENCRYPT_STRING: - case CFG_COUNTRY_STRING: - case CFG_DRIVER_ENABLE: - case CFG_WOLAS_ENABLE: - default: - break; - } - - /* Copy the LTV into the user's buffer. */ - copy_to_user(urq->data, &(lp->ltvRecord), urq->len); - - if (ltvAllocated) - kfree(&(lp->ltvRecord)); - urq->result = UIL_SUCCESS; - } else { - urq->result = UIL_FAILURE; - } - } else { - DBG_ERROR(DbgInfo, "UIL_ERR_WRONG_IFB\n"); - urq->result = UIL_ERR_WRONG_IFB; - } - - return result; -} /* wvlan_uil_get_info */ -/*============================================================================*/ - - - - - -/******************************************************************************* - * cfg_driver_info() - ******************************************************************************* - * - * DESCRIPTION: - * - * Retrieves driver information. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int cfg_driver_info(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - - /* Make sure that user buffer can handle the driver information buffer */ - if (urq->len < sizeof(lp->driverInfo)) { - urq->len = sizeof(lp->driverInfo); - urq->result = UIL_ERR_LEN; - return result; - } - - /* Verify the user buffer. */ - result = verify_area(VERIFY_WRITE, urq->data, sizeof(lp->driverInfo)); - if (result != 0) { - urq->result = UIL_FAILURE; - return result; - } - - lp->driverInfo.card_stat = lp->hcfCtx.IFB_CardStat; - - /* Copy the driver information into the user's buffer. */ - urq->result = UIL_SUCCESS; - copy_to_user(urq->data, &(lp->driverInfo), sizeof(lp->driverInfo)); - - return result; -} /* cfg_driver_info */ -/*============================================================================*/ - - - - -/******************************************************************************* - * cfg_driver_identity() - ******************************************************************************* - * - * DESCRIPTION: - * - * Retrieves ID information from the card. - * - * PARAMETERS: - * - * urq - a pointer to the UIL request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * UIL_SUCCESS - * UIL_ERR_xxx value otherwise - * - ******************************************************************************/ -int cfg_driver_identity(struct uilreq *urq, struct wl_private *lp) -{ - int result = 0; - - /* Make sure that user buffer can handle the driver identity structure. */ - if (urq->len < sizeof(lp->driverIdentity)) { - urq->len = sizeof(lp->driverIdentity); - urq->result = UIL_ERR_LEN; - return result; - } - - /* Verify the user buffer. */ - result = verify_area(VERIFY_WRITE, urq->data, sizeof(lp->driverIdentity)); - if (result != 0) { - urq->result = UIL_FAILURE; - return result; - } - - /* Copy the driver identity into the user's buffer. */ - urq->result = UIL_SUCCESS; - copy_to_user(urq->data, &(lp->driverIdentity), sizeof(lp->driverIdentity)); - - return result; -} /* cfg_driver_identity */ -/*============================================================================*/ - - -#endif /* USE_UIL */ - - -/* If WIRELESS_EXT is not defined, then the functions that follow will not be - included in the build. */ -/* NOTE: Are these still even needed? */ -#ifdef WIRELESS_EXT - - -/******************************************************************************* - * wvlan_set_netname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Set the ESSID of the card. - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_set_netname(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - wl_lock(lp, &flags); - - memset(lp->NetworkName, 0, sizeof(lp->NetworkName)); - memcpy(lp->NetworkName, extra, wrqu->data.length); - - /* Commit the adapter parameters */ - wl_apply(lp); - wl_unlock(lp, &flags); - - return 0; -} /* wvlan_set_netname */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_get_netname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Get the ESSID of the card. - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_get_netname(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - wvName_t *pName; - - wl_lock(lp, &flags); - - /* Get the current network name */ - lp->ltvRecord.len = 1 + (sizeof(*pName) / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CUR_SSID; - - status = hcf_get_info(&(lp->hcfCtx), (LTVP)&(lp->ltvRecord)); - - if (status == HCF_SUCCESS) { - pName = (wvName_t *)&(lp->ltvRecord.u.u32); - - memset(extra, '\0', HCF_MAX_NAME_LEN); - wrqu->data.length = pName->length; - - memcpy(extra, pName->name, pName->length); - } else { - ret = -EFAULT; - } - - wl_unlock(lp, &flags); - - return ret; -} /* wvlan_get_netname */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_set_station_nickname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Set the card's station nickname. - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_set_station_nickname(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - size_t len; - - wl_lock(lp, &flags); - - memset(lp->StationName, 0, sizeof(lp->StationName)); - len = min_t(size_t, wrqu->data.length, sizeof(lp->StationName)); - strlcpy(lp->StationName, extra, len); - - /* Commit the adapter parameters */ - wl_apply(lp); - wl_unlock(lp, &flags); - - return 0; -} /* wvlan_set_station_nickname */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_get_station_nickname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Get the card's station nickname. - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_get_station_nickname(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - wvName_t *pName; - - wl_lock(lp, &flags); - - /* Get the current station name */ - lp->ltvRecord.len = 1 + (sizeof(*pName) / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CNF_OWN_NAME; - - status = hcf_get_info(&(lp->hcfCtx), (LTVP)&(lp->ltvRecord)); - - if (status == HCF_SUCCESS) { - pName = (wvName_t *)&(lp->ltvRecord.u.u32); - - memset(extra, '\0', HCF_MAX_NAME_LEN); - wrqu->data.length = pName->length; - memcpy(extra, pName->name, pName->length); - } else { - ret = -EFAULT; - } - - wl_unlock(lp, &flags); - -/* out: */ - return ret; -} /* wvlan_get_station_nickname */ -/*============================================================================*/ - - - - -/******************************************************************************* - * wvlan_set_porttype() - ******************************************************************************* - * - * DESCRIPTION: - * - * Set the card's porttype - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_set_porttype(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - hcf_16 portType; - - wl_lock(lp, &flags); - - /* Validate the new value */ - portType = *((__u32 *)extra); - - if (!((portType == 1) || (portType == 3))) { - ret = -EINVAL; - goto out_unlock; - } - - lp->PortType = portType; - - /* Commit the adapter parameters */ - wl_apply(lp); - -out_unlock: - wl_unlock(lp, &flags); - -/* out: */ - return ret; -} - -/*============================================================================*/ - - -/******************************************************************************* - * wvlan_get_porttype() - ******************************************************************************* - * - * DESCRIPTION: - * - * Get the card's porttype - * - * PARAMETERS: - * - * wrq - a pointer to the wireless request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_get_porttype(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - hcf_16 *pPortType; - __u32 *pData = (__u32 *)extra; - - wl_lock(lp, &flags); - - /* Get the current port type */ - lp->ltvRecord.len = 1 + (sizeof(*pPortType) / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CNF_PORT_TYPE; - - status = hcf_get_info(&(lp->hcfCtx), (LTVP)&(lp->ltvRecord)); - - if (status == HCF_SUCCESS) { - pPortType = (hcf_16 *)&(lp->ltvRecord.u.u32); - - *pData = CNV_LITTLE_TO_INT(*pPortType); - } else { - ret = -EFAULT; - } - - wl_unlock(lp, &flags); - -/* out: */ - return ret; -} /* wvlan_get_porttype */ -/*============================================================================*/ - -#endif /* WIRELESS_EXT */ - - - - -#ifdef USE_RTS -/******************************************************************************* - * wvlan_rts() - ******************************************************************************* - * - * DESCRIPTION: - * - * IOCTL handler for RTS commands - * - * PARAMETERS: - * - * rrq - a pointer to the rts request buffer - * lp - a pointer to the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wvlan_rts(struct rtsreq *rrq, __u32 io_base) -{ - int ioctl_ret = 0; - - DBG_PRINT("io_base: 0x%08x\n", io_base); - - switch (rrq->typ) { - case WL_IOCTL_RTS_READ: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_RTS -- WL_IOCTL_RTS_READ\n"); - rrq->data[0] = IN_PORT_WORD(io_base + rrq->reg); - DBG_TRACE(DbgInfo, " reg 0x%04x ==> 0x%04x\n", rrq->reg, CNV_LITTLE_TO_SHORT(rrq->data[0])); - break; - case WL_IOCTL_RTS_WRITE: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_RTS -- WL_IOCTL_RTS_WRITE\n"); - OUT_PORT_WORD(io_base + rrq->reg, rrq->data[0]); - DBG_TRACE(DbgInfo, " reg 0x%04x <== 0x%04x\n", rrq->reg, CNV_LITTLE_TO_SHORT(rrq->data[0])); - break; - case WL_IOCTL_RTS_BATCH_READ: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_RTS -- WL_IOCTL_RTS_BATCH_READ\n"); - IN_PORT_STRING_16(io_base + rrq->reg, rrq->data, rrq->len); - DBG_TRACE(DbgInfo, " reg 0x%04x ==> %d bytes\n", rrq->reg, rrq->len * sizeof(__u16)); - break; - case WL_IOCTL_RTS_BATCH_WRITE: - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_RTS -- WL_IOCTL_RTS_BATCH_WRITE\n"); - OUT_PORT_STRING_16(io_base + rrq->reg, rrq->data, rrq->len); - DBG_TRACE(DbgInfo, " reg 0x%04x <== %d bytes\n", rrq->reg, rrq->len * sizeof(__u16)); - break; - default: - - DBG_TRACE(DbgInfo, "IOCTL: WVLAN2_IOCTL_RTS -- UNSUPPORTED RTS CODE: 0x%X", rrq->typ); - ioctl_ret = -EOPNOTSUPP; - break; - } - - return ioctl_ret; -} /* wvlan_rts */ -/*============================================================================*/ - -#endif /* USE_RTS */ diff --git a/drivers/staging/wlags49_h2/wl_priv.h b/drivers/staging/wlags49_h2/wl_priv.h deleted file mode 100644 index f35e79486428..000000000000 --- a/drivers/staging/wlags49_h2/wl_priv.h +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required for the private IOCTL handlers. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_PRIV_H__ -#define __WL_PRIV_H__ - - - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -#ifdef WIRELESS_EXT - - -int wvlan_set_netname(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - -int wvlan_get_netname(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - -int wvlan_set_station_nickname(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - -int wvlan_get_station_nickname(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - -int wvlan_set_porttype(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - -int wvlan_get_porttype(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *extra); - - -#endif /* WIRELESS_EXT */ - - - - -#ifdef USE_UIL - -int wvlan_uil(struct uilreq *urq, struct wl_private *lp); - -/* int wvlan_uil_connect( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_disconnect( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_action( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_block( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_unblock( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_send_diag_msg( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_put_info( struct uilreq *urq, struct wl_private *lp ); */ -/* int wvlan_uil_get_info( struct uilreq *urq, struct wl_private *lp ); */ - -/* int cfg_driver_info( struct uilreq *urq, struct wl_private *lp ); */ -/* int cfg_driver_identity( struct uilreq *urq, struct wl_private *lp ); */ - -#endif /* USE_UIL */ - - -#ifdef USE_RTS - -int wvlan_rts(struct rtsreq *rrq, __u32 io_base); -int wvlan_rts_read(__u16 reg, __u16 *val, __u32 io_base); -int wvlan_rts_write(__u16 reg, __u16 val, __u32 io_base); -int wvlan_rts_batch_read(struct rtsreq *rrq, __u32 io_base); -int wvlan_rts_batch_write(struct rtsreq *rrq, __u32 io_base); - -#endif /* USE_RTS */ - - -#endif /* __WL_PRIV_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_profile.c b/drivers/staging/wlags49_h2/wl_profile.c deleted file mode 100644 index 28cc5765e5c1..000000000000 --- a/drivers/staging/wlags49_h2/wl_profile.c +++ /dev/null @@ -1,995 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file defines routines required to parse configuration parameters - * listed in a config file, if that config file exists. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/* Only include this file if USE_PROFILE is defined */ -#ifdef USE_PROFILE - - - - -/******************************************************************************* - * constant definitions - ******************************************************************************/ - - -/* Allow support for calling system fcns to parse config file */ -#define __KERNEL_SYSCALLS__ - - - - -/******************************************************************************* - * include files - ******************************************************************************/ -#include - -#include -#include -#include -#include -#include - -#define BIN_DL 1 - -#include -#include -/* #include */ - -#include -#include -#include -#include -#include -#include - - -/* Definition needed to prevent unresolved external in unistd.h */ -static int errno; - -#if DBG -extern p_u32 DebugFlag; -#endif - -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; - /* } 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_config() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function opens the device's config file and parses the options from - * it, so that it can properly configure itself. If no configuration file - * or configuration is present, then continue to use the options already - * parsed from config.opts or wireless.opts. - * - * PARAMETERS: - * - * dev - a pointer to the device's net_device structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void parse_config(struct net_device *dev) -{ - int file_desc; -#if 0 /* BIN_DL */ - int rc; - char *cp = NULL; -#endif /* BIN_DL */ - char buffer[MAX_LINE_SIZE]; - char filename[MAX_LINE_SIZE]; - mm_segment_t fs; - struct wl_private *wvlan_config = NULL; - ENCSTRCT sEncryption; - - /* Get the wavelan specific info for this device */ - wvlan_config = dev->priv; - 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); - - /* Obtain a user-space process context, storing the original context */ - 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"); - - /* Read out the options */ - while (readline(file_desc, buffer)) - translate_option(buffer, wvlan_config); - /* Close the file */ - 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"); - } - /* Return to the original context */ - 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)); - - 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 - base used 0-3 in the API DLL, which was ported to Linux. For - the sake of the user experience, we decided to keep 0-3 as the - numbers used in the DLL; and will perform the +1 conversion here. - We could have converted the entire Linux driver, but this is - less obtrusive. This may be a "todo" to convert the whole driver */ - sEncryption.wEnabled = wvlan_config->EnableEncryption; - sEncryption.wTxKeyID = wvlan_config->TransmitKeyID - 1; - - memcpy(&sEncryption.EncStr, &wvlan_config->DefaultKeys, - sizeof(CFG_DEFAULT_KEYS_STRCT)); - - memset(wvlan_config->szEncryption, 0, sizeof(wvlan_config->szEncryption)); - - 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); - - wvlan_config->TransmitKeyID = sEncryption.wTxKeyID + 1; - wvlan_config->EnableEncryption = sEncryption.wEnabled; - - 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()); - - /* ;?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 */ - cp = 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"); - } - 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); - } - close(file_desc); - } - set_fs(fs); /* Return to the original context */ -#endif /* BIN_DL */ - - return; -} /* parse_config */ - -/******************************************************************************* - * readline() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function reads in data from a given file one line at a time, - * converting the detected newline character '\n' to a null '\0'. Note that - * the file descriptor must be valid before calling this function. - * - * PARAMETERS: - * - * filedesc - the file descriptor for the open configuration file - * buffer - a buffer pointer, passed in by the caller, to which the - * line will be stored. - * - * RETURNS: - * - * the number of bytes read - * -1 on error - * - ******************************************************************************/ -int readline(int filedesc, char *buffer) -{ - int result = -1; - int bytes_read = 0; - /*------------------------------------------------------------------------*/ - - /* Make sure the file descriptor is good */ - 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') { - buffer[bytes_read] = '\0'; - bytes_read++; - break; - } - bytes_read++; - } - } - - /* Return the number of bytes read */ - if (result == -1) - return result; - else - return bytes_read; -} /* readline */ -/*============================================================================*/ - -/******************************************************************************* - * translate_option() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function takes a line read in from the config file and parses out - * the key/value pairs. It then determines which key has been parsed and sets - * the card's configuration based on the value given. - * - * PARAMETERS: - * - * buffer - a buffer containing a line to translate - * config - a pointer to the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void translate_option(char *buffer, struct wl_private *lp) -{ - unsigned int value_convert = 0; - int string_length = 0; - char *key = NULL; - char *value = NULL; - u_char mac_value[ETH_ALEN]; - /*------------------------------------------------------------------------*/ - - if (buffer == NULL || lp == NULL) { - DBG_ERROR(DbgInfo, "Config file buffer and/or wavelan buffer ptr NULL\n"); - return; - } - - ParseConfigLine(buffer, &key, &value); - - if (key == NULL || value == NULL) - return; - - /* Determine which key it is and perform the appropriate action */ - - /* Configuration parameters used in all scenarios */ -#if DBG - /* 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 - * not specified or specified outside the 4-8 range - */ - DbgInfo->DebugFlag |= DBG_DEFAULTS; - } - } else { - DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); /* ;?DebugFlag; */ - } - 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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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)) - lp->brsc[0] = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; 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)) - lp->brsc[1] = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; 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); - - 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 = PARM_MAX_NAME_LEN; - } - - 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)); - /* 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"); - 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)) - lp->EnableEncryption = value_convert; - 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); - - 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); - } - - 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); - - key_string2key(value, &lp->DefaultKeys.key[0]); - } else { - 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); - - if (is_valid_key_string(value)) { - memset(lp->DefaultKeys.key[1].key, 0, MAX_KEY_SIZE); - - key_string2key(value, &lp->DefaultKeys.key[1]); - } else { - 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); - - if (is_valid_key_string(value)) { - memset(lp->DefaultKeys.key[2].key, 0, MAX_KEY_SIZE); - - key_string2key(value, &lp->DefaultKeys.key[2]); - } else { - 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); - - if (is_valid_key_string(value)) { - memset(lp->DefaultKeys.key[3].key, 0, MAX_KEY_SIZE); - - key_string2key(value, &lp->DefaultKeys.key[3]); - } else { - 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); - 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); - 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); - 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); - - value_convert = simple_strtoul(value, NULL, 0); - - 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); - } 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) - value_convert = value_convert | 0x100; - lp->Channel = value_convert; - } else { - 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); - - 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 = 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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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)) - lp->srsc[0] = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; 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)) - lp->srsc[1] = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; 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)) - lp->DistanceBetweenAPs = value_convert; - 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)) - lp->TransmitKeyID = simple_strtoul(value, NULL, 0); - 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)) - lp->TxRateControl[0] = value_convert; - 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)) - lp->txPowLevel = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_POW_LEVEL); - } - - /* 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 (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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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); - */ - 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); - /* ;?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); - 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); - 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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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); - 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)) - lp->authentication = value_convert; - 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)) - lp->atimWindow = value_convert; - 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)) - lp->holdoverDuration = value_convert; - 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); - } 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)) - lp->connectionControl = value_convert; - else - DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_CONNECTION_CONTROL); - } - - /* Need to add? : Probe Data Rate */ - } -#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 (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) - lp->DTIMPeriod = value_convert; - 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); - } 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); - 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); - 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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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) - lp->coexistence = value_convert; - else - 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); - - value_convert = simple_strtoul(value, NULL, 0); - 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); - } 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)) - lp->wds_port[1].rtsThreshold = value_convert; - 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)) - lp->wds_port[2].rtsThreshold = value_convert; - 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)) - lp->wds_port[3].rtsThreshold = value_convert; - 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)) - lp->wds_port[4].rtsThreshold = value_convert; - 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)) - lp->wds_port[5].rtsThreshold = value_convert; - 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)) - lp->wds_port[0].txRateCntl = value_convert; - 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)) - lp->wds_port[1].txRateCntl = value_convert; - 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)) - lp->wds_port[2].txRateCntl = value_convert; - 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)) - lp->wds_port[3].txRateCntl = value_convert; - 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)) - lp->wds_port[4].txRateCntl = value_convert; - 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)) - lp->wds_port[5].txRateCntl = value_convert; - 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) - memcpy(lp->wds_port[0].wdsAddress, mac_value, ETH_ALEN); - 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) - memcpy(lp->wds_port[1].wdsAddress, mac_value, ETH_ALEN); - 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) - memcpy(lp->wds_port[2].wdsAddress, mac_value, ETH_ALEN); - 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) - memcpy(lp->wds_port[3].wdsAddress, mac_value, ETH_ALEN); - 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) - memcpy(lp->wds_port[4].wdsAddress, mac_value, ETH_ALEN); - 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) - memcpy(lp->wds_port[5].wdsAddress, mac_value, ETH_ALEN); - else - DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS6); - } -#endif /* USE_WDS */ - } -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - return; -} /* translate_option */ -/*============================================================================*/ - -/******************************************************************************* - * parse_mac_address() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function will parse a mac address string and convert it to a byte - * array. - * - * PARAMETERS: - * - * value - the MAC address, represented as a string - * byte_array - the MAC address, represented as a byte array of length - * ETH_ALEN - * - * RETURNS: - * - * 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 value_offset = 0; - int array_offset = 0; - int field_offset = 0; - char byte_field[3]; - /*------------------------------------------------------------------------*/ - - memset(byte_field, '\0', 3); - - while (value[value_offset] != '\0') { - /* Skip over the colon chars separating the bytes, if they exist */ - if (value[value_offset] == ':') { - value_offset++; - continue; - } - - byte_field[field_offset] = value[value_offset]; - field_offset++; - value_offset++; - - /* Once the byte_field is filled, convert it and store it */ - if (field_offset == 2) { - byte_field[field_offset] = '\0'; - byte_array[array_offset] = simple_strtoul(byte_field, NULL, 16); - field_offset = 0; - array_offset++; - } - } - - /* Use the array_offset as a check; 6 bytes should be written to the - byte_array */ - return array_offset; -} /* parse_mac_address */ -/*============================================================================*/ - -/******************************************************************************* - * ParseConfigLine() - ******************************************************************************* - * - * DESCRIPTION: - * - * Parses a line from the configuration file into an L-val and an R-val, - * representing a key/value pair. - * - * PARAMETERS: - * - * pszLine - the line from the config file to parse - * ppszLVal - the resulting L-val (Key) - * ppszRVal - the resulting R-val (Value) - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void ParseConfigLine(char *pszLine, char **ppszLVal, char **ppszRVal) -{ - int i; - int size; - - /* get a snapshot of our string size */ - 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 */ - ) { - /* advance past any whitespace, and assign the L-value */ - 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] == '=') { - 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] == '=') { - pszLine[i] = '\0'; - continue; - } - *ppszRVal = &pszLine[i]; - break; - } - /* make the line ending character(s) a NULL */ - for (i++; i < size; i++) { - if (pszLine[i] == '\n') - pszLine[i] = '\0'; - if ((pszLine[i] == '\r') && (pszLine[i+1] == '\n')) - pszLine[i] = '\0'; - } - } -} /* ParseConfigLine */ -/*============================================================================*/ - -#endif /* USE_PROFILE */ diff --git a/drivers/staging/wlags49_h2/wl_profile.h b/drivers/staging/wlags49_h2/wl_profile.h deleted file mode 100644 index d615c836f950..000000000000 --- a/drivers/staging/wlags49_h2/wl_profile.h +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required for the config parsing routines. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_PROFILE_H__ -#define __WL_PROFILE_H__ - - - - -/******************************************************************************* - * constant definitions - ******************************************************************************/ -#define ROOT_CONFIG_FILENAME "/etc/agere/iwconfig-" - - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -void parse_config(struct net_device *dev); - -int readline(int filedesc, char *buffer); - -void translate_option(char *buffer, struct wl_private *lp); - -int parse_mac_address(char *value, u_char *byte_array); - -void ParseConfigLine(char *pszLine, char **ppszLVal, char **ppszRVal); - - -#endif /* __WL_PROFILE_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_util.c b/drivers/staging/wlags49_h2/wl_util.c deleted file mode 100644 index 75019c171d57..000000000000 --- a/drivers/staging/wlags49_h2/wl_util.c +++ /dev/null @@ -1,1367 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This file defines misc utility functions. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include 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 - - - -/******************************************************************************* - * global variables - ******************************************************************************/ - -/* A matrix which maps channels to frequencies */ -static const long chan_freq_list[][2] = -{ - {1,2412}, - {2,2417}, - {3,2422}, - {4,2427}, - {5,2432}, - {6,2437}, - {7,2442}, - {8,2447}, - {9,2452}, - {10,2457}, - {11,2462}, - {12,2467}, - {13,2472}, - {14,2484}, - {36,5180}, - {40,5200}, - {44,5220}, - {48,5240}, - {52,5260}, - {56,5280}, - {60,5300}, - {64,5320}, - {149,5745}, - {153,5765}, - {157,5785}, - {161,5805} -}; - -/******************************************************************************* - * dbm() - ******************************************************************************* - * - * DESCRIPTION: - * - * Return an energy value in dBm. - * - * PARAMETERS: - * - * value - the energy value to be converted - * - * RETURNS: - * - * the value in dBm - * - ******************************************************************************/ -int dbm( int value ) -{ - /* Truncate the value to be between min and max. */ - if( value < HCF_MIN_SIGNAL_LEVEL ) - value = HCF_MIN_SIGNAL_LEVEL; - - if( value > HCF_MAX_SIGNAL_LEVEL ) - value = HCF_MAX_SIGNAL_LEVEL; - - /* Return the energy value in dBm. */ - return ( value - HCF_0DBM_OFFSET ); -} // dbm -/*============================================================================*/ - - - -/******************************************************************************* - * is_valid_key_string() - ******************************************************************************* - * - * DESCRIPTION: - * - * Checks to determine if the WEP key string is valid - * - * PARAMETERS: - * - * s - the string in question - * - * RETURNS: - * - * non-zero if the string contains a valid key - * - ******************************************************************************/ -int is_valid_key_string( char *s ) -{ - int l; - int i; - /*------------------------------------------------------------------------*/ - - - l = strlen( s ); - - /* 0x followed by 5 or 13 hexadecimal digit pairs is valid */ - if( s[0] == '0' && ( s[1] == 'x' || s[1] == 'X' )) { - if( l == 12 || l == 28 ) { - for( i = 2; i < l; i++ ) { - if( !isxdigit( s[i] )) - return 0; - } - - return 1; - } else { - return 0; - } - } - - /* string with 0, 5, or 13 characters is valid */ - else - { - return( l == 0 || l == 5 || l == 13 ); - } -} // is_valid_key_string -/*============================================================================*/ - - - - -/******************************************************************************* - * key_string2key() - ******************************************************************************* - * - * DESCRIPTION: - * - * Converts a key_string to a key, Assumes the key_string is validated with - * is_valid_key_string(). - * - * PARAMETERS: - * - * ks - the valid key string - * key - a pointer to a KEY_STRUCT where the converted key information will - * be stored. - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void key_string2key( char *ks, KEY_STRCT *key ) -{ - int l,i,n; - char *p; - /*------------------------------------------------------------------------*/ - - - l = strlen( ks ); - - /* 0x followed by hexadecimal digit pairs */ - if( ks[0] == '0' && ( ks[1] == 'x' || ks[1] == 'X' )) { - n = 0; - p = (char *)key->key; - - for( i = 2; i < l; i+=2 ) { - *p++ = (hex_to_bin(ks[i]) << 4) + hex_to_bin(ks[i+1]); - n++; - } - - /* Note that endian translation of the length field is not needed here - because it's performed in wl_put_ltv() */ - key->len = n; - } - /* character string */ - else - { - strcpy( (char *)key->key, ks ); - key->len = l; - } - - return; -} // key_string2key -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_has_wep() - ******************************************************************************* - * - * DESCRIPTION: - * - * Checks to see if the device supports WEP - * - * PARAMETERS: - * - * ifbp - the IFB pointer of the device in question - * - * RETURNS: - * - * 1 if WEP is known enabled, else 0 - * - ******************************************************************************/ -int wl_has_wep (IFBP ifbp) -{ - CFG_PRIVACY_OPT_IMPLEMENTED_STRCT ltv; - int rc, privacy; - /*------------------------------------------------------------------------*/ - - - /* This function allows us to distiguish bronze cards from other types, to - know if WEP exists. Does not distinguish (because there's no way to) - between silver and gold cards. */ - ltv.len = 2; - ltv.typ = CFG_PRIVACY_OPT_IMPLEMENTED; - - rc = hcf_get_info( ifbp, (LTVP) <v ); - - privacy = CNV_LITTLE_TO_INT( ltv.privacy_opt_implemented ); - - //return rc ? 0 : privacy; - return 1; -} // wl_has_wep -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_hcf_error() - ******************************************************************************* - * - * DESCRIPTION: - * - * Report the type of HCF error message - * - * PARAMETERS: - * - * none - * - * RETURNS: - * - * A descriptive string indicating the error, quiet otherwise. - * - ******************************************************************************/ -void wl_hcf_error( struct net_device *dev, int hcfStatus ) -{ - char buffer[64], *pMsg; - /*------------------------------------------------------------------------*/ - - - if( hcfStatus != HCF_SUCCESS ) { - switch( hcfStatus ) { - - case HCF_ERR_TIME_OUT: - - pMsg = "Expected adapter event did not occur in expected time"; - break; - - - case HCF_ERR_NO_NIC: - - pMsg = "Card not found (ejected unexpectedly)"; - break; - - - case HCF_ERR_LEN: - - pMsg = "Command buffer size insufficient"; - break; - - - case HCF_ERR_INCOMP_PRI: - - pMsg = "Primary functions are not compatible"; - break; - - - case HCF_ERR_INCOMP_FW: - - pMsg = "Primary functions are compatible, " - "station/ap functions are not"; - break; - - - case HCF_ERR_BUSY: - - pMsg = "Inquire cmd while another Inquire in progress"; - break; - - - //case HCF_ERR_SEQ_BUG: - - // pMsg = "Unexpected command completed"; - // break; - - - case HCF_ERR_DEFUNCT_AUX: - - pMsg = "Timeout on ack for enable/disable of AUX registers"; - break; - - - case HCF_ERR_DEFUNCT_TIMER: - pMsg = "Timeout on timer calibration during initialization process"; - break; - - - case HCF_ERR_DEFUNCT_TIME_OUT: - pMsg = "Timeout on Busy bit drop during BAP setup"; - break; - - - case HCF_ERR_DEFUNCT_CMD_SEQ: - pMsg = "Hermes and HCF are out of sync"; - break; - - - default: - - sprintf( buffer, "Error code %d", hcfStatus ); - pMsg = buffer; - break; - } - - printk( KERN_INFO "%s: Wireless, HCF failure: \"%s\"\n", - dev->name, pMsg ); - } -} // wl_hcf_error -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_endian_translate_event() - ******************************************************************************* - * - * DESCRIPTION: - * - * Determines what type of data is in the mailbox and performs the proper - * endian translation. - * - * PARAMETERS: - * - * pLtv - an LTV pointer - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_endian_translate_event( ltv_t *pLtv ) -{ - switch( pLtv->typ ) { - case CFG_TALLIES: - break; - - - case CFG_SCAN: - { - int numAPs; - SCAN_RS_STRCT *pAps = (SCAN_RS_STRCT*)&pLtv->u.u8[0]; - - numAPs = (hcf_16)(( (size_t)( pLtv->len - 1 ) * 2 ) / - (sizeof( SCAN_RS_STRCT ))); - - while( numAPs >= 1 ) { - numAPs--; - - pAps[numAPs].channel_id = - CNV_LITTLE_TO_INT( pAps[numAPs].channel_id ); - - pAps[numAPs].noise_level = - CNV_LITTLE_TO_INT( pAps[numAPs].noise_level ); - - pAps[numAPs].signal_level = - CNV_LITTLE_TO_INT( pAps[numAPs].signal_level ); - - pAps[numAPs].beacon_interval_time = - CNV_LITTLE_TO_INT( pAps[numAPs].beacon_interval_time ); - - pAps[numAPs].capability = - CNV_LITTLE_TO_INT( pAps[numAPs].capability ); - - pAps[numAPs].ssid_len = - CNV_LITTLE_TO_INT( pAps[numAPs].ssid_len ); - - pAps[numAPs].ssid_val[pAps[numAPs].ssid_len] = 0; - - } - } - break; - - - case CFG_ACS_SCAN: - { - PROBE_RESP *probe_resp = (PROBE_RESP *)pLtv; - - probe_resp->frameControl = CNV_LITTLE_TO_INT( probe_resp->frameControl ); - probe_resp->durID = CNV_LITTLE_TO_INT( probe_resp->durID ); - probe_resp->sequence = CNV_LITTLE_TO_INT( probe_resp->sequence ); - probe_resp->dataLength = CNV_LITTLE_TO_INT( probe_resp->dataLength ); - -#ifndef WARP - probe_resp->lenType = CNV_LITTLE_TO_INT( probe_resp->lenType ); -#endif // WARP - - probe_resp->beaconInterval = CNV_LITTLE_TO_INT( probe_resp->beaconInterval ); - probe_resp->capability = CNV_LITTLE_TO_INT( probe_resp->capability ); - probe_resp->flags = CNV_LITTLE_TO_INT( probe_resp->flags ); - } - break; - - - case CFG_LINK_STAT: -#define ls ((LINK_STATUS_STRCT *)pLtv) - ls->linkStatus = CNV_LITTLE_TO_INT( ls->linkStatus ); - break; -#undef ls - - case CFG_ASSOC_STAT: - { - ASSOC_STATUS_STRCT *pAs = (ASSOC_STATUS_STRCT *)pLtv; - - pAs->assocStatus = CNV_LITTLE_TO_INT( pAs->assocStatus ); - } - break; - - - case CFG_SECURITY_STAT: - { - SECURITY_STATUS_STRCT *pSs = (SECURITY_STATUS_STRCT *)pLtv; - - pSs->securityStatus = CNV_LITTLE_TO_INT( pSs->securityStatus ); - pSs->reason = CNV_LITTLE_TO_INT( pSs->reason ); - } - break; - - - case CFG_WMP: - break; - - - case CFG_NULL: - break; - - - default: - break; - } -} // wl_endian_translate_event -/*============================================================================*/ - - -/******************************************************************************* - * msf_assert() - ******************************************************************************* - * - * DESCRIPTION: - * - * Print statement used to display asserts from within the HCF. Only called - * when asserts in the HCF are turned on. See hcfcfg.h for more information. - * - * PARAMETERS: - * - * file_namep - the filename in which the assert occurred. - * line_number - the line number on which the assert occurred. - * trace - a comment associated with the assert. - * qual - return code or other value related to the assert - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void msf_assert( unsigned int line_number, hcf_16 trace, hcf_32 qual ) -{ - DBG_PRINT( "HCF ASSERT: Line %d, VAL: 0x%.8x\n", line_number, /*;?*/(u32)qual ); -} // msf_assert -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_parse_ds_ie() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function parses the Direct Sequence Parameter Set IE, used to - * determine channel/frequency information. - * - * PARAMETERS: - * - * probe_rsp - a pointer to a PROBE_RESP structure containing the probe - * response. - * - * RETURNS: - * - * The channel on which the BSS represented by this probe response is - * transmitting. - * - ******************************************************************************/ -hcf_8 wl_parse_ds_ie( PROBE_RESP *probe_rsp ) -{ - int i; - int ie_length = 0; - hcf_8 *buf; - hcf_8 buf_size; - /*------------------------------------------------------------------------*/ - - - if( probe_rsp == NULL ) { - return 0; - } - - buf = probe_rsp->rawData; - buf_size = sizeof( probe_rsp->rawData ); - - - for( i = 0; i < buf_size; i++ ) { - if( buf[i] == DS_INFO_ELEM ) { - /* Increment by 1 to get the length, and test it; in a DS element, - length should always be 1 */ - i++; - ie_length = buf[i]; - - if( buf[i] == 1 ) { - /* Get the channel information */ - i++; - return buf[i]; - } - } - } - - /* If we get here, we didn't find a DS-IE, which is strange */ - return 0; -} // wl_parse_ds_ie - - -/******************************************************************************* - * wl_parse_wpa_ie() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function parses the Probe Response for a valid WPA-IE. - * - * PARAMETERS: - * - * probe_rsp - a pointer to a PROBE_RESP structure containing the probe - * response - * length - a pointer to an hcf_16 in which the size of the WPA-IE will - * be stored (if found). - * - * RETURNS: - * - * A pointer to the location in the probe response buffer where a valid - * WPA-IE lives. The length of this IE is written back to the 'length' - * argument passed to the function. - * - ******************************************************************************/ -hcf_8 * wl_parse_wpa_ie( PROBE_RESP *probe_rsp, hcf_16 *length ) -{ - int i; - int ie_length = 0; - hcf_8 *buf; - hcf_8 buf_size; - hcf_8 wpa_oui[] = WPA_OUI_TYPE; - /*------------------------------------------------------------------------*/ - - - if( probe_rsp == NULL || length == NULL ) { - return NULL; - } - - buf = probe_rsp->rawData; - buf_size = sizeof( probe_rsp->rawData ); - *length = 0; - - - for( i = 0; i < buf_size; i++ ) { - if( buf[i] == GENERIC_INFO_ELEM ) { - /* Increment by one to get the IE length */ - i++; - ie_length = probe_rsp->rawData[i]; - - /* Increment by one to point to the IE payload */ - i++; - - /* Does the IE contain a WPA OUI? If not, it's a proprietary IE */ - if( memcmp( &buf[i], &wpa_oui, WPA_SELECTOR_LEN ) == 0 ) { - /* Pass back length and return a pointer to the WPA-IE */ - /* NOTE: Length contained in the WPA-IE is only the length of - the payload. The entire WPA-IE, including the IE identifier - and the length, is 2 bytes larger */ - *length = ie_length + 2; - - /* Back up the pointer 2 bytes to include the IE identifier and - the length in the buffer returned */ - i -= 2; - return &buf[i]; - } - - /* Increment past this non-WPA IE and continue looking */ - i += ( ie_length - 1 ); - } - } - - /* If we're here, we didn't find a WPA-IE in the buffer */ - return NULL; -} // wl_parse_wpa_ie - - -/******************************************************************************* - * wl_print_wpa_ie() - ******************************************************************************* - * - * DESCRIPTION: - * - * Function used to take a WPA Information Element (WPA-IE) buffer and - * display it in a readable format. - * - * PARAMETERS: - * - * buffer - the byte buffer containing the WPA-IE - * length - the length of the above buffer - * - * RETURNS: - * - * A pointer to the formatted WPA-IE string. Note that the format used is - * byte-by-byte printing as %02x hex values with no spaces. This is - * required for proper operation with some WPA supplicants. - * - ******************************************************************************/ -hcf_8 * wl_print_wpa_ie( hcf_8 *buffer, int length ) -{ - int count; - int rows; - int remainder; - int rowsize = 4; - hcf_8 row_buf[64]; - static hcf_8 output[512]; - /*------------------------------------------------------------------------*/ - - - memset( output, 0, sizeof( output )); - memset( row_buf, 0, sizeof( row_buf )); - - - /* Determine how many rows will be needed, and the remainder */ - rows = length / rowsize; - remainder = length % rowsize; - - - /* Format the rows */ - for( count = 0; count < rows; count++ ) { - sprintf( row_buf, "%02x%02x%02x%02x", - buffer[count*rowsize], buffer[count*rowsize+1], - buffer[count*rowsize+2], buffer[count*rowsize+3]); - strcat( output, row_buf ); - } - - memset( row_buf, 0, sizeof( row_buf )); - - - /* Format the remainder */ - for( count = 0; count < remainder; count++ ) { - sprintf( row_buf, "%02x", buffer[(rows*rowsize)+count]); - strcat( output, row_buf ); - } - - return output; -} // wl_print_wpa_ie -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_is_a_valid_chan() - ******************************************************************************* - * - * DESCRIPTION: - * - * Checks if a given channel is valid - * - * PARAMETERS: - * - * channel - the channel - * - * RETURNS: - * - * 1 if TRUE - * 0 if FALSE - * - ******************************************************************************/ -int wl_is_a_valid_chan( int channel ) -{ - int i; - /*------------------------------------------------------------------------*/ - - - /* Strip out the high bit set by the FW for 802.11a channels */ - if( channel & 0x100 ) { - channel = channel & 0x0FF; - } - - /* Iterate through the matrix and retrieve the frequency */ - for( i = 0; i < ARRAY_SIZE(chan_freq_list); i++ ) { - if( chan_freq_list[i][0] == channel ) { - return 1; - } - } - - return 0; -} // wl_is_a_valid_chan -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_get_chan_from_freq() - ******************************************************************************* - * - * DESCRIPTION: - * - * Checks if a given frequency is valid - * - * PARAMETERS: - * - * freq - the frequency - * - * RETURNS: - * - * 1 if TRUE - * 0 if FALSE - * - ******************************************************************************/ -int wl_is_a_valid_freq( long frequency ) -{ - int i; - /*------------------------------------------------------------------------*/ - - - /* Iterate through the matrix and retrieve the channel */ - for( i = 0; i < ARRAY_SIZE(chan_freq_list); i++ ) { - if( chan_freq_list[i][1] == frequency ) { - return 1; - } - } - - return 0; -} // wl_is_a_valid_freq -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_get_freq_from_chan() - ******************************************************************************* - * - * DESCRIPTION: - * - * Function used to look up the frequency for a given channel on which the - * adapter is Tx/Rx. - * - * PARAMETERS: - * - * channel - the channel - * - * RETURNS: - * - * The corresponding frequency - * - ******************************************************************************/ -long wl_get_freq_from_chan( int channel ) -{ - int i; - /*------------------------------------------------------------------------*/ - - - /* Strip out the high bit set by the FW for 802.11a channels */ - if( channel & 0x100 ) { - channel = channel & 0x0FF; - } - - /* Iterate through the matrix and retrieve the frequency */ - for( i = 0; i < ARRAY_SIZE(chan_freq_list); i++ ) { - if( chan_freq_list[i][0] == channel ) { - return chan_freq_list[i][1]; - } - } - - return 0; -} // wl_get_freq_from_chan -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_get_chan_from_freq() - ******************************************************************************* - * - * DESCRIPTION: - * - * Function used to look up the channel for a given frequency on which the - * adapter is Tx/Rx. - * - * PARAMETERS: - * - * frequency - the frequency - * - * RETURNS: - * - * The corresponding channel - * - ******************************************************************************/ -int wl_get_chan_from_freq( long frequency ) -{ - int i; - /*------------------------------------------------------------------------*/ - - - /* Iterate through the matrix and retrieve the channel */ - for( i = 0; i < ARRAY_SIZE(chan_freq_list); i++ ) { - if( chan_freq_list[i][1] == frequency ) { - return chan_freq_list[i][0]; - } - } - - return 0; -} // wl_get_chan_from_freq -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_process_link_status() - ******************************************************************************* - * - * DESCRIPTION: - * - * Process the link status message signaled by the device. - * - * PARAMETERS: - * - * lp - a pointer to the device's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_process_link_status( struct wl_private *lp ) -{ - hcf_16 link_stat; - - if( lp != NULL ) { - //link_stat = lp->hcfCtx.IFB_DSLinkStat & CFG_LINK_STAT_FW; - link_stat = lp->hcfCtx.IFB_LinkStat & CFG_LINK_STAT_FW; - switch( link_stat ) { - case 1: - DBG_TRACE( DbgInfo, "Link Status : Connected\n" ); - wl_wext_event_ap( lp->dev ); - break; - case 2: - DBG_TRACE( DbgInfo, "Link Status : Disconnected\n" ); - break; - case 3: - DBG_TRACE( DbgInfo, "Link Status : Access Point Change\n" ); - break; - case 4: - DBG_TRACE( DbgInfo, "Link Status : Access Point Out of Range\n" ); - break; - case 5: - DBG_TRACE( DbgInfo, "Link Status : Access Point In Range\n" ); - break; - default: - DBG_TRACE( DbgInfo, "Link Status : UNKNOWN (0x%04x)\n", link_stat ); - break; - } - } -} // wl_process_link_status -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_process_probe_response() - ******************************************************************************* - * - * DESCRIPTION: - * - * Process the probe responses retunred by the device as a result of an - * active scan. - * - * PARAMETERS: - * - * lp - a pointer to the device's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_process_probe_response( struct wl_private *lp ) -{ - PROBE_RESP *probe_rsp; - hcf_8 *wpa_ie = NULL; - hcf_16 wpa_ie_len = 0; - - if( lp != NULL ) { - probe_rsp = (PROBE_RESP *)&lp->ProbeResp; - - wl_endian_translate_event( (ltv_t *)probe_rsp ); - - DBG_TRACE( DbgInfo, "(%s) =========================\n", lp->dev->name ); - DBG_TRACE( DbgInfo, "(%s) length : 0x%04x.\n", lp->dev->name, - probe_rsp->length ); - - if( probe_rsp->length > 1 ) { - DBG_TRACE( DbgInfo, "(%s) infoType : 0x%04x.\n", lp->dev->name, - probe_rsp->infoType ); - - DBG_TRACE( DbgInfo, "(%s) signal : 0x%02x.\n", lp->dev->name, - probe_rsp->signal ); - - DBG_TRACE( DbgInfo, "(%s) silence : 0x%02x.\n", lp->dev->name, - probe_rsp->silence ); - - DBG_TRACE( DbgInfo, "(%s) rxFlow : 0x%02x.\n", lp->dev->name, - probe_rsp->rxFlow ); - - DBG_TRACE( DbgInfo, "(%s) rate : 0x%02x.\n", lp->dev->name, - probe_rsp->rate ); - - DBG_TRACE( DbgInfo, "(%s) frame cntl : 0x%04x.\n", lp->dev->name, - probe_rsp->frameControl ); - - DBG_TRACE( DbgInfo, "(%s) durID : 0x%04x.\n", lp->dev->name, - probe_rsp->durID ); - - DBG_TRACE(DbgInfo, "(%s) address1 : %pM\n", lp->dev->name, - probe_rsp->address1); - - DBG_TRACE(DbgInfo, "(%s) address2 : %pM\n", lp->dev->name, - probe_rsp->address2); - - DBG_TRACE(DbgInfo, "(%s) BSSID : %pM\n", lp->dev->name, - probe_rsp->BSSID); - - DBG_TRACE( DbgInfo, "(%s) sequence : 0x%04x.\n", lp->dev->name, - probe_rsp->sequence ); - - DBG_TRACE(DbgInfo, "(%s) address4 : %pM\n", lp->dev->name, - probe_rsp->address4); - - DBG_TRACE( DbgInfo, "(%s) datalength : 0x%04x.\n", lp->dev->name, - probe_rsp->dataLength ); - - DBG_TRACE(DbgInfo, "(%s) DA : %pM\n", lp->dev->name, - probe_rsp->DA); - - DBG_TRACE(DbgInfo, "(%s) SA : %pM\n", lp->dev->name, - probe_rsp->SA); - -#ifdef WARP - - DBG_TRACE( DbgInfo, "(%s) channel : %d\n", lp->dev->name, - probe_rsp->channel ); - - DBG_TRACE( DbgInfo, "(%s) band : %d\n", lp->dev->name, - probe_rsp->band ); -#else - DBG_TRACE( DbgInfo, "(%s) lenType : 0x%04x.\n", lp->dev->name, - probe_rsp->lenType ); -#endif // WARP - - DBG_TRACE( DbgInfo, "(%s) timeStamp : %d.%d.%d.%d.%d.%d.%d.%d\n", - lp->dev->name, - probe_rsp->timeStamp[0], - probe_rsp->timeStamp[1], - probe_rsp->timeStamp[2], - probe_rsp->timeStamp[3], - probe_rsp->timeStamp[4], - probe_rsp->timeStamp[5], - probe_rsp->timeStamp[6], - probe_rsp->timeStamp[7]); - - DBG_TRACE( DbgInfo, "(%s) beaconInt : 0x%04x.\n", lp->dev->name, - probe_rsp->beaconInterval ); - - DBG_TRACE( DbgInfo, "(%s) capability : 0x%04x.\n", lp->dev->name, - probe_rsp->capability ); - - DBG_TRACE( DbgInfo, "(%s) SSID len : 0x%04x.\n", lp->dev->name, - probe_rsp->rawData[1] ); - - - if( probe_rsp->rawData[1] > 0 ) { - char ssid[HCF_MAX_NAME_LEN]; - - memset( ssid, 0, sizeof( ssid )); - strncpy( ssid, &probe_rsp->rawData[2], - probe_rsp->rawData[1] ); - - DBG_TRACE( DbgInfo, "(%s) SSID : %s\n", - lp->dev->name, ssid ); - } - - - /* Parse out the WPA-IE, if one exists */ - wpa_ie = wl_parse_wpa_ie( probe_rsp, &wpa_ie_len ); - if( wpa_ie != NULL ) { - DBG_TRACE( DbgInfo, "(%s) WPA-IE : %s\n", - lp->dev->name, wl_print_wpa_ie( wpa_ie, wpa_ie_len )); - } - - DBG_TRACE( DbgInfo, "(%s) flags : 0x%04x.\n", - lp->dev->name, probe_rsp->flags ); - } - - DBG_TRACE( DbgInfo, "\n" ); - - - /* If probe response length is 1, then the scan is complete */ - if( probe_rsp->length == 1 ) { - DBG_TRACE( DbgInfo, "SCAN COMPLETE\n" ); - lp->probe_results.num_aps = lp->probe_num_aps; - lp->probe_results.scan_complete = TRUE; - - /* Reset the counter for the next scan request */ - lp->probe_num_aps = 0; - - /* Send a wireless extensions event that the scan completed */ - wl_wext_event_scan_complete( lp->dev ); - } else { - /* Only copy to the table if the entry is unique; APs sometimes - respond more than once to a probe */ - if( lp->probe_num_aps == 0 ) { - /* Copy the info to the ScanResult structure in the private - adapter struct */ - memcpy( &( lp->probe_results.ProbeTable[lp->probe_num_aps] ), - probe_rsp, sizeof( PROBE_RESP )); - - /* Increment the number of APs detected */ - lp->probe_num_aps++; - } else { - int count; - int unique = 1; - - for( count = 0; count < lp->probe_num_aps; count++ ) { - if( memcmp( &( probe_rsp->BSSID ), - lp->probe_results.ProbeTable[count].BSSID, - ETH_ALEN ) == 0 ) { - unique = 0; - } - } - - if( unique ) { - /* Copy the info to the ScanResult structure in the - private adapter struct. Only copy if there's room in the - table */ - if( lp->probe_num_aps < MAX_NAPS ) - { - memcpy( &( lp->probe_results.ProbeTable[lp->probe_num_aps] ), - probe_rsp, sizeof( PROBE_RESP )); - } - else - { - DBG_WARNING( DbgInfo, "Num of scan results exceeds storage, truncating\n" ); - } - - /* Increment the number of APs detected. Note I do this - here even when I don't copy the probe response to the - buffer in order to detect the overflow condition */ - lp->probe_num_aps++; - } - } - } - } -} // wl_process_probe_response -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_process_updated_record() - ******************************************************************************* - * - * DESCRIPTION: - * - * Process the updated information record message signaled by the device. - * - * PARAMETERS: - * - * lp - a pointer to the device's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_process_updated_record( struct wl_private *lp ) -{ - if( lp != NULL ) { - lp->updatedRecord.u.u16[0] = CNV_LITTLE_TO_INT( lp->updatedRecord.u.u16[0] ); - - switch( lp->updatedRecord.u.u16[0] ) { - case CFG_CUR_COUNTRY_INFO: - DBG_TRACE( DbgInfo, "Updated Record: CFG_CUR_COUNTRY_INFO\n" ); - wl_connect( lp ); - break; - - case CFG_PORT_STAT: - DBG_TRACE( DbgInfo, "Updated Record: WAIT_FOR_CONNECT (0xFD40)\n" ); - //wl_connect( lp ); - break; - - default: - DBG_TRACE( DbgInfo, "UNKNOWN: 0x%04x\n", - lp->updatedRecord.u.u16[0] ); - } - } -} // wl_process_updated_record -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_process_assoc_status() - ******************************************************************************* - * - * DESCRIPTION: - * - * Process the association status event signaled by the device. - * - * PARAMETERS: - * - * lp - a pointer to the device's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_process_assoc_status( struct wl_private *lp ) -{ - ASSOC_STATUS_STRCT *assoc_stat; - - if( lp != NULL ) { - assoc_stat = (ASSOC_STATUS_STRCT *)&lp->assoc_stat; - - wl_endian_translate_event( (ltv_t *)assoc_stat ); - - switch( assoc_stat->assocStatus ) { - case 1: - DBG_TRACE( DbgInfo, "Association Status : STA Associated\n" ); - break; - - case 2: - DBG_TRACE( DbgInfo, "Association Status : STA Reassociated\n" ); - break; - - case 3: - DBG_TRACE( DbgInfo, "Association Status : STA Disassociated\n" ); - break; - - default: - DBG_TRACE( DbgInfo, "Association Status : UNKNOWN (0x%04x)\n", - assoc_stat->assocStatus ); - break; - } - - DBG_TRACE(DbgInfo, "STA Address : %pM\n", assoc_stat->staAddr); - - if(( assoc_stat->assocStatus == 2 ) && ( assoc_stat->len == 8 )) { - DBG_TRACE(DbgInfo, "Old AP Address : %pM\n", - assoc_stat->oldApAddr); - } - } -} // wl_process_assoc_status -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_process_security_status() - ******************************************************************************* - * - * DESCRIPTION: - * - * Process the security status message signaled by the device. - * - * PARAMETERS: - * - * lp - a pointer to the device's private structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_process_security_status( struct wl_private *lp ) -{ - SECURITY_STATUS_STRCT *sec_stat; - - if( lp != NULL ) { - sec_stat = (SECURITY_STATUS_STRCT *)&lp->sec_stat; - - wl_endian_translate_event( (ltv_t *)sec_stat ); - - switch( sec_stat->securityStatus ) { - case 1: - DBG_TRACE( DbgInfo, "Security Status : Dissassociate [AP]\n" ); - break; - - case 2: - DBG_TRACE( DbgInfo, "Security Status : Deauthenticate [AP]\n" ); - break; - - case 3: - DBG_TRACE( DbgInfo, "Security Status : Authenticate Fail [STA] or [AP]\n" ); - break; - - case 4: - DBG_TRACE( DbgInfo, "Security Status : MIC Fail\n" ); - break; - - case 5: - DBG_TRACE( DbgInfo, "Security Status : Associate Fail\n" ); - break; - - default: - DBG_TRACE( DbgInfo, "Security Status : UNKNOWN (0x%04x)\n", - sec_stat->securityStatus ); - break; - } - - DBG_TRACE(DbgInfo, "STA Address : %pM\n", sec_stat->staAddr); - DBG_TRACE(DbgInfo, "Reason : 0x%04x\n", sec_stat->reason); - - } -} // wl_process_security_status -/*============================================================================*/ - -int wl_get_tallies(struct wl_private *lp, - CFG_HERMES_TALLIES_STRCT *tallies) -{ - int ret = 0; - int status; - CFG_HERMES_TALLIES_STRCT *pTallies; - - /* Get the current tallies from the adapter */ - lp->ltvRecord.len = 1 + HCF_TOT_TAL_CNT * sizeof(hcf_16); - lp->ltvRecord.typ = CFG_TALLIES; - - status = hcf_get_info(&(lp->hcfCtx), (LTVP)&(lp->ltvRecord)); - - if( status == HCF_SUCCESS ) { - pTallies = (CFG_HERMES_TALLIES_STRCT *)&(lp->ltvRecord.u.u32); - memcpy(tallies, pTallies, sizeof(*tallies)); - DBG_TRACE( DbgInfo, "Get tallies okay, dixe: %d\n", sizeof(*tallies) ); - } else { - DBG_TRACE( DbgInfo, "Get tallies failed\n" ); - ret = -EFAULT; - } - - return ret; -} - diff --git a/drivers/staging/wlags49_h2/wl_util.h b/drivers/staging/wlags49_h2/wl_util.h deleted file mode 100644 index 57bfd7fac6fa..000000000000 --- a/drivers/staging/wlags49_h2/wl_util.h +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required for utility functions used - * throughout the driver. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_UTIL_H__ -#define __WL_UTIL_H__ - -/******************************************************************************* - * function prototypes - ******************************************************************************/ -int dbm(int value); - -int is_valid_key_string(char *s); - -void key_string2key(char *ks, KEY_STRCT *key); - -void wl_hcf_error(struct net_device *dev, int hcfStatus); - -void wl_endian_translate_event(ltv_t *pLtv); - -int wl_has_wep(IFBP ifbp); - -hcf_8 wl_parse_ds_ie(PROBE_RESP *probe_rsp); -hcf_8 *wl_parse_wpa_ie(PROBE_RESP *probe_rsp, hcf_16 *length); -hcf_8 *wl_print_wpa_ie(hcf_8 *buffer, int length); - -int wl_get_tallies(struct wl_private *, CFG_HERMES_TALLIES_STRCT *); -int wl_is_a_valid_chan(int channel); -int wl_is_a_valid_freq(long frequency); -long wl_get_freq_from_chan(int channel); -int wl_get_chan_from_freq(long frequency); - -void wl_process_link_status(struct wl_private *lp); -void wl_process_probe_response(struct wl_private *lp); -void wl_process_updated_record(struct wl_private *lp); -void wl_process_assoc_status(struct wl_private *lp); -void wl_process_security_status(struct wl_private *lp); - -#endif /* __WL_UTIL_H__ */ diff --git a/drivers/staging/wlags49_h2/wl_version.h b/drivers/staging/wlags49_h2/wl_version.h deleted file mode 100644 index bbc484a6b80f..000000000000 --- a/drivers/staging/wlags49_h2/wl_version.h +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * This header file contains version information for the code base, as well as - * special definitions and macros needed by certain versions of the code. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_VERSION_H__ -#define __WL_VERSION_H__ - -/******************************************************************************* - * include files - ******************************************************************************/ -//#include - -#ifndef CONFIG_MODVERSIONS -#define __NO_VERSION__ -#endif // CONFIG_MODVERSIONS - -/******************************************************************************* - * constant definitions - ******************************************************************************/ - -#define VENDOR_NAME "Agere Systems, http://www.agere.com" - -#define DRIVER_NAME "wlags49" -#define DRV_IDENTITY 49 - -#define DRV_MAJOR_VERSION 7 -#define DRV_MINOR_VERSION 22 -#define DRV_VERSION_STR "7.22" - - -#if defined BUS_PCMCIA -#define BUS_TYPE "PCMCIA" -#elif defined BUS_PCI -#define BUS_TYPE "PCI" -#else -err: define bus type; -#endif // BUS_XXX - -#if defined HERMES25 -#define HW_TYPE "HII.5" -#else -#define HW_TYPE "HII" -#endif // HERMES25 - -#if defined WARP -#define FW_TYPE "WARP" -#else -#define FW_TYPE "BEAGLE" -#endif // WARP - -#if defined HERMES25 -#if defined WARP -#define DRV_VARIANT 3 -#else -#define DRV_VARIANT 4 -#endif // WARP -#else -#define DRV_VARIANT 2 -#endif // HERMES25 - -#define VERSION_INFO KBUILD_MODNAME " v" DRV_VERSION_STR \ - " for " BUS_TYPE ", by " VENDOR_NAME - -/* The version of wireless extensions we support */ -#define WIRELESS_SUPPORT 21 - -/******************************************************************************* - * bus architecture specific defines, includes, etc. - ******************************************************************************/ -/* - * There doesn't seem to be a difference for PCMCIA and PCI anymore, at least - * for PCMCIA the same defines are needed now as previously only used for PCI - */ - -#define NEW_MULTICAST -#define ALLOC_SKB(len) dev_alloc_skb(len+2) -#define GET_PACKET(dev, skb, count)\ - skb_reserve((skb), 2); \ - BLOCK_INPUT(skb_put((skb), (count)), (count)); \ - (skb)->protocol = eth_type_trans((skb), (dev)) -#define GET_PACKET_DMA(dev, skb, count)\ - skb_reserve((skb), 2); \ - BLOCK_INPUT_DMA(skb_put((skb), (count)), (count)); \ - (skb)->protocol = eth_type_trans((skb), (dev)) - - - - -#endif // __WL_VERSION_H__ diff --git a/drivers/staging/wlags49_h2/wl_wext.c b/drivers/staging/wlags49_h2/wl_wext.c deleted file mode 100644 index 3aeff818afc2..000000000000 --- a/drivers/staging/wlags49_h2/wl_wext.c +++ /dev/null @@ -1,3794 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -/******************************************************************************* - * include files - ******************************************************************************/ -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -/* Set up the LTV to program the appropriate key */ -static int hermes_set_tkip_keys(ltv_t *ltv, u16 key_idx, u8 *addr, - int set_tx, u8 *seq, u8 *key, size_t key_len) -{ - int ret = -EINVAL; - int buf_idx = 0; - hcf_8 tsc[IW_ENCODE_SEQ_MAX_SIZE] = - { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00 }; - - /* - * Check the key index here; if 0, load as Pairwise Key, otherwise, - * load as a group key. Note that for the Hermes, the RIDs for - * group/pairwise keys are different from each other and different - * than the default WEP keys as well. - */ - switch (key_idx) { - case 0: - ltv->len = 28; - ltv->typ = CFG_ADD_TKIP_MAPPED_KEY; - - /* Load the BSSID */ - memcpy(<v->u.u8[buf_idx], addr, ETH_ALEN); - buf_idx += ETH_ALEN; - - /* Load the TKIP key */ - memcpy(<v->u.u8[buf_idx], &key[0], 16); - buf_idx += 16; - - /* Load the TSC */ - memcpy(<v->u.u8[buf_idx], tsc, IW_ENCODE_SEQ_MAX_SIZE); - buf_idx += IW_ENCODE_SEQ_MAX_SIZE; - - /* Load the RSC */ - memcpy(<v->u.u8[buf_idx], seq, IW_ENCODE_SEQ_MAX_SIZE); - buf_idx += IW_ENCODE_SEQ_MAX_SIZE; - - /* Load the TxMIC key */ - memcpy(<v->u.u8[buf_idx], &key[16], 8); - buf_idx += 8; - - /* Load the RxMIC key */ - memcpy(<v->u.u8[buf_idx], &key[24], 8); - - ret = 0; - break; - case 1: - case 2: - case 3: - ltv->len = 26; - ltv->typ = CFG_ADD_TKIP_DEFAULT_KEY; - - /* Load the key Index */ - - /* If this is a Tx Key, set bit 8000 */ - if (set_tx) - key_idx |= 0x8000; - ltv->u.u16[buf_idx] = cpu_to_le16(key_idx); - buf_idx += 2; - - /* Load the RSC */ - memcpy(<v->u.u8[buf_idx], seq, IW_ENCODE_SEQ_MAX_SIZE); - buf_idx += IW_ENCODE_SEQ_MAX_SIZE; - - /* Load the TKIP, TxMIC, and RxMIC keys in one shot, because in - CFG_ADD_TKIP_DEFAULT_KEY they are back-to-back */ - memcpy(<v->u.u8[buf_idx], key, key_len); - buf_idx += key_len; - - /* Load the TSC */ - memcpy(<v->u.u8[buf_idx], tsc, IW_ENCODE_SEQ_MAX_SIZE); - - ret = 0; - break; - default: - break; - } - - return ret; -} - -/* Set up the LTV to clear the appropriate key */ -static int hermes_clear_tkip_keys(ltv_t *ltv, u16 key_idx, u8 *addr) -{ - switch (key_idx) { - case 0: - if (!is_broadcast_ether_addr(addr)) { - ltv->len = 7; - ltv->typ = CFG_REMOVE_TKIP_MAPPED_KEY; - memcpy(<v->u.u8[0], addr, ETH_ALEN); - } - break; - case 1: - case 2: - case 3: - /* Clear the Group TKIP keys by index */ - ltv->len = 2; - ltv->typ = CFG_REMOVE_TKIP_DEFAULT_KEY; - ltv->u.u16[0] = cpu_to_le16(key_idx); - - break; - default: - break; - } - - return 0; -} - -/* Set the WEP keys in the wl_private structure */ -static int hermes_set_wep_keys(struct wl_private *lp, u16 key_idx, - u8 *key, size_t key_len, - bool enable, bool set_tx) -{ - hcf_8 encryption_state = lp->EnableEncryption; - int tk = lp->TransmitKeyID - 1; /* current key */ - int ret = 0; - - /* Is encryption supported? */ - if (!wl_has_wep(&(lp->hcfCtx))) { - DBG_WARNING(DbgInfo, "WEP not supported on this device\n"); - ret = -EOPNOTSUPP; - goto out; - } - - DBG_NOTICE(DbgInfo, "pointer: %p, length: %d\n", - key, key_len); - - /* Check the size of the key */ - switch (key_len) { - case MIN_KEY_SIZE: - case MAX_KEY_SIZE: - - /* Check the index */ - if ((key_idx < 0) || (key_idx >= MAX_KEYS)) - key_idx = tk; - - /* Cleanup */ - memset(lp->DefaultKeys.key[key_idx].key, 0, MAX_KEY_SIZE); - - /* Copy the key in the driver */ - memcpy(lp->DefaultKeys.key[key_idx].key, key, key_len); - - /* Set the length */ - lp->DefaultKeys.key[key_idx].len = key_len; - - DBG_NOTICE(DbgInfo, "encoding.length: %d\n", key_len); - DBG_NOTICE(DbgInfo, "set key: %s(%d) [%d]\n", - lp->DefaultKeys.key[key_idx].key, - lp->DefaultKeys.key[key_idx].len, key_idx); - - /* Enable WEP (if possible) */ - if ((key_idx == tk) && (lp->DefaultKeys.key[tk].len > 0)) - lp->EnableEncryption = 1; - - break; - - case 0: - /* Do we want to just set the current transmit key? */ - if (set_tx && (key_idx >= 0) && (key_idx < MAX_KEYS)) { - DBG_NOTICE(DbgInfo, "index: %d; len: %d\n", key_idx, - lp->DefaultKeys.key[key_idx].len); - - if (lp->DefaultKeys.key[key_idx].len > 0) { - lp->TransmitKeyID = key_idx + 1; - lp->EnableEncryption = 1; - } else { - DBG_WARNING(DbgInfo, "Problem setting the current TxKey\n"); - ret = -EINVAL; - } - } - break; - - default: - DBG_WARNING(DbgInfo, "Invalid Key length\n"); - ret = -EINVAL; - goto out; - } - - /* Read the flags */ - if (enable) { - lp->EnableEncryption = 1; - lp->wext_enc = IW_ENCODE_ALG_WEP; - } else { - lp->EnableEncryption = 0; /* disable encryption */ - lp->wext_enc = IW_ENCODE_ALG_NONE; - } - - DBG_TRACE(DbgInfo, "encryption_state : %d\n", encryption_state); - DBG_TRACE(DbgInfo, "lp->EnableEncryption : %d\n", lp->EnableEncryption); - DBG_TRACE(DbgInfo, "erq->length : %d\n", key_len); - - /* Write the changes to the card */ - if (ret == 0) { - DBG_NOTICE(DbgInfo, "encrypt: %d, ID: %d\n", lp->EnableEncryption, - lp->TransmitKeyID); - - if (lp->EnableEncryption == encryption_state) { - if (key_len != 0) { - /* Dynamic WEP key update */ - wl_set_wep_keys(lp); - } - } else { - /* To switch encryption on/off, soft reset is - * required */ - wl_apply(lp); - } - } - -out: - return ret; -} - -/******************************************************************************* - * wireless_commit() - ******************************************************************************* - * - * DESCRIPTION: - * - * Commit - * protocol used. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -static int wireless_commit(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *rqu, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - wl_apply(lp); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_commit -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_protocol() - ******************************************************************************* - * - * DESCRIPTION: - * - * Returns a vendor-defined string that should identify the wireless - * protocol used. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -static int wireless_get_protocol(struct net_device *dev, struct iw_request_info *info, char *name, char *extra) -{ - /* Originally, the driver was placing the string "Wireless" here. However, - the wireless extensions (/linux/wireless.h) indicate this string should - describe the wireless protocol. */ - - strcpy(name, "IEEE 802.11b"); - - return 0; -} // wireless_get_protocol -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_frequency() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the frequency (channel) on which the card should Tx/Rx. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_frequency(struct net_device *dev, struct iw_request_info *info, struct iw_freq *freq, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int channel = 0; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if( !capable( CAP_NET_ADMIN )) { - ret = -EPERM; - return ret; - } - - - /* If frequency specified, look up channel */ - if( freq->e == 1 ) { - int f = freq->m / 100000; - channel = wl_get_chan_from_freq( f ); - } - - - /* Channel specified */ - if( freq->e == 0 ) { - channel = freq->m; - } - - - /* If the channel is an 802.11a channel, set Bit 8 */ - if( channel > 14 ) { - channel = channel | 0x100; - } - - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - lp->Channel = channel; - - - /* Commit the adapter parameters */ - wl_apply( lp ); - - /* Send an event that channel/freq has been set */ - wl_wext_event_freq( lp->dev ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_frequency -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_frequency() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the frequency (channel) on which the card is Tx/Rx. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -static int wireless_get_frequency(struct net_device *dev, struct iw_request_info *info, struct iw_freq *freq, char *extra) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = -1; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CUR_CHANNEL; - - ret = hcf_get_info( &(lp->hcfCtx), (LTVP)&( lp->ltvRecord )); - if( ret == HCF_SUCCESS ) { - hcf_16 channel = CNV_LITTLE_TO_INT( lp->ltvRecord.u.u16[0] ); - - freq->m = wl_get_freq_from_chan( channel ) * 100000; - freq->e = 1; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - - ret = (ret == HCF_SUCCESS ? 0 : -EFAULT); - -out: - return ret; -} // wireless_get_frequency -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_range() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to provide misc info and statistics about the - * wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_range(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - struct iw_range *range = (struct iw_range *) extra; - int ret = 0; - int status = -1; - int count; - __u16 *pTxRate; - int retries = 0; - - /* Set range information */ - data->length = sizeof(struct iw_range); - memset(range, 0, sizeof(struct iw_range)); - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Set range information */ - memset( range, 0, sizeof( struct iw_range )); - -retry: - /* Get the current transmit rate from the adapter */ - lp->ltvRecord.len = 1 + (sizeof(*pTxRate) / sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CUR_TX_RATE; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - if( status != HCF_SUCCESS ) { - /* Recovery action: reset and retry up to 10 times */ - DBG_TRACE( DbgInfo, "Get CFG_CUR_TX_RATE failed: 0x%x\n", status ); - - if (retries < 10) { - retries++; - - /* Holding the lock too long, makes a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - status = wl_reset( dev ); - if ( status != HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "reset failed: 0x%x\n", status ); - - ret = -EFAULT; - goto out_unlock; - } - - /* Holding the lock too long, makes a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - goto retry; - - } else { - DBG_TRACE( DbgInfo, "Get CFG_CUR_TX_RATE failed: %d retries\n", retries ); - ret = -EFAULT; - goto out_unlock; - } - } - - /* Holding the lock too long, makes a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - pTxRate = (__u16 *)&( lp->ltvRecord.u.u32 ); - - range->throughput = CNV_LITTLE_TO_INT( *pTxRate ) * MEGABIT; - - if (retries > 0) { - DBG_TRACE( DbgInfo, "Get CFG_CUR_TX_RATE succes: %d retries\n", retries ); - } - - // NWID - NOT SUPPORTED - - - /* Channel/Frequency Info */ - range->num_channels = RADIO_CHANNELS; - - - /* Signal Level Thresholds */ - range->sensitivity = RADIO_SENSITIVITY_LEVELS; - - - /* Link quality */ - range->max_qual.qual = (u_char)HCF_MAX_COMM_QUALITY; - - /* If the value returned in /proc/net/wireless is greater than the maximum range, - iwconfig assumes that the value is in dBm. Because an unsigned char is used, - it requires a bit of contorsion... */ - - range->max_qual.level = (u_char)( dbm( HCF_MIN_SIGNAL_LEVEL ) - 1 ); - range->max_qual.noise = (u_char)( dbm( HCF_MIN_NOISE_LEVEL ) - 1 ); - - - /* Set available rates */ - range->num_bitrates = 0; - - lp->ltvRecord.len = 6; - lp->ltvRecord.typ = CFG_SUPPORTED_DATA_RATES; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - if( status == HCF_SUCCESS ) { - for( count = 0; count < MAX_RATES; count++ ) - if( lp->ltvRecord.u.u8[count+2] != 0 ) { - range->bitrate[count] = lp->ltvRecord.u.u8[count+2] * MEGABIT / 2; - range->num_bitrates++; - } - } else { - DBG_TRACE( DbgInfo, "CFG_SUPPORTED_DATA_RATES: 0x%x\n", status ); - ret = -EFAULT; - goto out_unlock; - } - - /* RTS Threshold info */ - range->min_rts = MIN_RTS_BYTES; - range->max_rts = MAX_RTS_BYTES; - - // Frag Threshold info - NOT SUPPORTED - - // Power Management info - NOT SUPPORTED - - /* Encryption */ - - /* Holding the lock too long, makes a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - /* Is WEP supported? */ - - if( wl_has_wep( &( lp->hcfCtx ))) { - /* WEP: RC4 40 bits */ - range->encoding_size[0] = MIN_KEY_SIZE; - - /* RC4 ~128 bits */ - range->encoding_size[1] = MAX_KEY_SIZE; - range->num_encoding_sizes = 2; - range->max_encoding_tokens = MAX_KEYS; - } - - /* Tx Power Info */ - range->txpower_capa = IW_TXPOW_MWATT; - range->num_txpower = 1; - range->txpower[0] = RADIO_TX_POWER_MWATT; - - /* Wireless Extension Info */ - range->we_version_compiled = WIRELESS_EXT; - range->we_version_source = WIRELESS_SUPPORT; - - // Retry Limits and Lifetime - NOT SUPPORTED - - /* Holding the lock too long, makes a gap to allow other processes */ - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - DBG_TRACE( DbgInfo, "calling wl_wireless_stats\n" ); - wl_wireless_stats( lp->dev ); - range->avg_qual = lp->wstats.qual; - DBG_TRACE( DbgInfo, "wl_wireless_stats done\n" ); - - /* Event capability (kernel + driver) */ - IW_EVENT_CAPA_SET_KERNEL(range->event_capa); - IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWAP); - IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWSCAN); - IW_EVENT_CAPA_SET(range->event_capa, IWEVREGISTERED); - IW_EVENT_CAPA_SET(range->event_capa, IWEVEXPIRED); - IW_EVENT_CAPA_SET(range->event_capa, IWEVMICHAELMICFAILURE); - IW_EVENT_CAPA_SET(range->event_capa, IWEVASSOCREQIE); - IW_EVENT_CAPA_SET(range->event_capa, IWEVASSOCRESPIE); - - range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_CIPHER_TKIP; - range->scan_capa = IW_SCAN_CAPA_NONE; - -out_unlock: - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - - return ret; -} // wireless_get_range -/*============================================================================*/ - - -/******************************************************************************* - * wireless_get_bssid() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the BSSID the wireless device is currently associated with. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_bssid(struct net_device *dev, struct iw_request_info *info, struct sockaddr *ap_addr, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - int status = -1; -#endif /* (HCF_TYPE) & HCF_TYPE_STA */ - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - ap_addr->sa_family = ARPHRD_ETHER; - - /* Assume AP mode here, which means the BSSID is our own MAC address. In - STA mode, this address will be overwritten with the actual BSSID using - the code below. */ - memcpy(&ap_addr->sa_data, lp->dev->dev_addr, ETH_ALEN); - - -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - //;?should we return an error status in AP mode - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { - /* Get Current BSSID */ - lp->ltvRecord.typ = CFG_CUR_BSSID; - lp->ltvRecord.len = 4; - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - /* Copy info into sockaddr struct */ - memcpy(&ap_addr->sa_data, lp->ltvRecord.u.u8, ETH_ALEN); - } else { - ret = -EFAULT; - } - } - -#endif // (HCF_TYPE) & HCF_TYPE_STA - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_bssid -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_ap_list() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the results of a network scan. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - * NOTE: SIOCGIWAPLIST has been deprecated by SIOCSIWSCAN. This function - * implements SIOCGIWAPLIST only to provide backwards compatibility. For - * all systems using WIRELESS_EXT v14 and higher, use SIOCSIWSCAN! - * - ******************************************************************************/ -static int wireless_get_ap_list (struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret; - int num_aps = -1; - int sec_count = 0; - hcf_32 count; - struct sockaddr *hwa = NULL; - struct iw_quality *qual = NULL; -#ifdef WARP - ScanResult *p = &lp->scan_results; -#else - ProbeResult *p = &lp->probe_results; -#endif // WARP - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Set the completion state to FALSE */ - lp->scan_results.scan_complete = FALSE; - lp->probe_results.scan_complete = FALSE; - /* Channels to scan */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_SCAN_CHANNELS_2GHZ; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0x7FFF ); - ret = hcf_put_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - DBG_TRACE( DbgInfo, "CFG_SCAN_CHANNELS_2GHZ result: 0x%x\n", ret ); - - /* Set the SCAN_SSID to "ANY". Using this RID for scan prevents the need to - disassociate from the network we are currently on */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_SCAN_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - ret = hcf_put_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - DBG_TRACE( DbgInfo, "CFG_SCAN_SSID to 'any' ret: 0x%x\n", ret ); - - /* Initiate the scan */ -#ifdef WARP - ret = hcf_action( &( lp->hcfCtx ), MDD_ACT_SCAN ); -#else - ret = hcf_action( &( lp->hcfCtx ), HCF_ACT_ACS_SCAN ); -#endif // WARP - - wl_act_int_on( lp ); - - //;? unlock? what about the access to lp below? is it broken? - wl_unlock(lp, &flags); - - if( ret == HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "SUCCESSFULLY INITIATED SCAN...\n" ); - while( (*p).scan_complete == FALSE && ret == HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "Waiting for scan results...\n" ); - /* Abort the scan if we've waited for more than MAX_SCAN_TIME_SEC */ - if( sec_count++ > MAX_SCAN_TIME_SEC ) { - ret = -EIO; - } else { - /* Wait for 1 sec in 10ms intervals, scheduling the kernel to do - other things in the meantime, This prevents system lockups by - giving some time back to the kernel */ - for( count = 0; count < 100; count ++ ) { - mdelay( 10 ); - schedule( ); - } - } - } - - rmb(); - - if ( ret != HCF_SUCCESS ) { - DBG_ERROR( DbgInfo, "timeout waiting for scan results\n" ); - } else { - num_aps = (*p)/*lp->probe_results*/.num_aps; - if (num_aps > IW_MAX_AP) { - num_aps = IW_MAX_AP; - } - data->length = num_aps; - hwa = (struct sockaddr *)extra; - qual = (struct iw_quality *) extra + - ( sizeof( struct sockaddr ) * num_aps ); - - /* This flag is used to tell the user if we provide quality - information. Since we provide signal/noise levels but no - quality info on a scan, this is set to 0. Setting to 1 and - providing a quality of 0 produces weird results. If we ever - provide quality (or can calculate it), this can be changed */ - data->flags = 0; - - for( count = 0; count < num_aps; count++ ) { -#ifdef WARP - memcpy( hwa[count].sa_data, - (*p)/*lp->scan_results*/.APTable[count].bssid, ETH_ALEN ); -#else //;?why use BSSID and bssid as names in seemingly very comparable situations - DBG_PRINT("BSSID: %pM\n", - (*p).ProbeTable[count].BSSID); - memcpy( hwa[count].sa_data, - (*p)/*lp->probe_results*/.ProbeTable[count].BSSID, ETH_ALEN ); -#endif // WARP - } - /* Once the data is copied to the wireless struct, invalidate the - scan result to initiate a rescan on the next request */ - (*p)/*lp->probe_results*/.scan_complete = FALSE; - /* Send the wireless event that the scan has completed, just in case - it's needed */ - wl_wext_event_scan_complete( lp->dev ); - } - } -out: - return ret; -} // wireless_get_ap_list -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_sensitivity() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the sensitivity (distance between APs) of the wireless card. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_sensitivity(struct net_device *dev, struct iw_request_info *info, struct iw_param *sens, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int dens = sens->value; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if(( dens < 1 ) || ( dens > 3 )) { - ret = -EINVAL; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - lp->DistanceBetweenAPs = dens; - wl_apply( lp ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_sensitivity -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_sensitivity() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the sensitivity (distance between APs) of the wireless card. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_sensitivity(struct net_device *dev, struct iw_request_info *info, struct iw_param *sens, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - /* not worth locking ... */ - sens->value = lp->DistanceBetweenAPs; - sens->fixed = 0; /* auto */ -out: - return ret; -} // wireless_get_sensitivity -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_essid() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the ESSID (network name) that the wireless device should associate - * with. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *ssid) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if (data->flags != 0 && data->length > HCF_MAX_NAME_LEN) { - ret = -EINVAL; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - memset( lp->NetworkName, 0, sizeof( lp->NetworkName )); - - /* data->flags is zero to ask for "any" */ - if( data->flags == 0 ) { - /* Need this because in STAP build PARM_DEFAULT_SSID is "LinuxAP" - * ;?but there ain't no STAP anymore*/ - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { - strcpy( lp->NetworkName, "ANY" ); - } else { - //strcpy( lp->NetworkName, "ANY" ); - strcpy( lp->NetworkName, PARM_DEFAULT_SSID ); - } - } else { - memcpy( lp->NetworkName, ssid, data->length ); - } - - DBG_NOTICE( DbgInfo, "set NetworkName: %s\n", ssid ); - - /* Commit the adapter parameters */ - wl_apply( lp ); - - /* Send an event that ESSID has been set */ - wl_wext_event_essid( lp->dev ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_essid -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_essid() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the ESSID (network name) that the wireless device is associated - * with. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_essid(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *essid) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - wvName_t *pName; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Get the desired network name */ - lp->ltvRecord.len = 1 + ( sizeof( *pName ) / sizeof( hcf_16 )); - - -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - //;?should we return an error status in AP mode - - lp->ltvRecord.typ = CFG_DESIRED_SSID; - -#endif - - -#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 ) { - lp->ltvRecord.typ = CFG_CNF_OWN_SSID; - } - -#endif // HCF_AP - - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - if( status == HCF_SUCCESS ) { - pName = (wvName_t *)&( lp->ltvRecord.u.u32 ); - - /* Endian translate the string length */ - pName->length = CNV_LITTLE_TO_INT( pName->length ); - - /* Copy the information into the user buffer */ - data->length = pName->length; - - if( pName->length < HCF_MAX_NAME_LEN ) { - pName->name[pName->length] = '\0'; - } - - data->flags = 1; - - -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - //;?should we return an error status in AP mode - - /* if desired is null ("any"), return current or "any" */ - if( pName->name[0] == '\0' ) { - /* Get the current network name */ - lp->ltvRecord.len = 1 + ( sizeof(*pName ) / sizeof( hcf_16 )); - lp->ltvRecord.typ = CFG_CUR_SSID; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - pName = (wvName_t *)&( lp->ltvRecord.u.u32 ); - - /* Endian translate the string length */ - pName->length = CNV_LITTLE_TO_INT( pName->length ); - - /* Copy the information into the user buffer */ - data->length = pName->length; - data->flags = 1; - } else { - ret = -EFAULT; - goto out_unlock; - } - } - -#endif // HCF_STA - - if (pName->length > IW_ESSID_MAX_SIZE) { - ret = -EFAULT; - goto out_unlock; - } - - memcpy(essid, pName->name, pName->length); - } else { - ret = -EFAULT; - goto out_unlock; - } - -out_unlock: - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_essid -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_encode() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the encryption keys and status (enable or disable). - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_encode(struct net_device *dev, struct iw_request_info *info, struct iw_point *erq, char *keybuf) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int key_idx = (erq->flags & IW_ENCODE_INDEX) - 1; - int ret = 0; - bool enable = true; - - if (lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if (erq->flags & IW_ENCODE_DISABLED) - enable = false; - - wl_lock(lp, &flags); - - wl_act_int_off(lp); - - ret = hermes_set_wep_keys(lp, key_idx, keybuf, erq->length, - enable, true); - - /* Send an event that Encryption has been set */ - if (ret == 0) - wl_wext_event_encode(dev); - - wl_act_int_on(lp); - - wl_unlock(lp, &flags); - -out: - return ret; -} - -/******************************************************************************* - * wireless_get_encode() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the encryption keys and status. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_encode(struct net_device *dev, struct iw_request_info *info, struct iw_point *erq, char *key) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int index; - - DBG_NOTICE(DbgInfo, "GIWENCODE: encrypt: %d, ID: %d\n", lp->EnableEncryption, lp->TransmitKeyID); - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - /* Only super-user can see WEP key */ - if( !capable( CAP_NET_ADMIN )) { - ret = -EPERM; - return ret; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Is it supported? */ - if( !wl_has_wep( &( lp->hcfCtx ))) { - ret = -EOPNOTSUPP; - goto out_unlock; - } - - /* Basic checking */ - index = (erq->flags & IW_ENCODE_INDEX ) - 1; - - - /* Set the flags */ - erq->flags = 0; - - if( lp->EnableEncryption == 0 ) { - erq->flags |= IW_ENCODE_DISABLED; - } - - /* Which key do we want */ - if(( index < 0 ) || ( index >= MAX_KEYS )) { - index = lp->TransmitKeyID - 1; - } - - erq->flags |= index + 1; - - /* Copy the key to the user buffer */ - erq->length = lp->DefaultKeys.key[index].len; - - memcpy(key, lp->DefaultKeys.key[index].key, erq->length); - -out_unlock: - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_encode -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_nickname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the nickname, or station name, of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_nickname(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *nickname) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - -#if 0 //;? Needed, was present in original code but not in 7.18 Linux 2.6 kernel version - if( !capable(CAP_NET_ADMIN )) { - ret = -EPERM; - return ret; - } -#endif - - /* Validate the new value */ - if(data->length > HCF_MAX_NAME_LEN) { - ret = -EINVAL; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - memset( lp->StationName, 0, sizeof( lp->StationName )); - - memcpy( lp->StationName, nickname, data->length ); - - /* Commit the adapter parameters */ - wl_apply( lp ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_nickname -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_nickname() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the nickname, or station name, of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_nickname(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *nickname) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - wvName_t *pName; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Get the current station name */ - lp->ltvRecord.len = 1 + ( sizeof( *pName ) / sizeof( hcf_16 )); - lp->ltvRecord.typ = CFG_CNF_OWN_NAME; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - pName = (wvName_t *)&( lp->ltvRecord.u.u32 ); - - /* Endian translate the length */ - pName->length = CNV_LITTLE_TO_INT( pName->length ); - - if ( pName->length > IW_ESSID_MAX_SIZE ) { - ret = -EFAULT; - } else { - /* Copy the information into the user buffer */ - data->length = pName->length; - memcpy(nickname, pName->name, pName->length); - } - } else { - ret = -EFAULT; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_nickname -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_porttype() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the port type of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_porttype(struct net_device *dev, struct iw_request_info *info, __u32 *mode, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - hcf_16 portType; - hcf_16 createIBSS; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Validate the new value */ - switch( *mode ) { - case IW_MODE_ADHOC: - - /* When user requests ad-hoc, set IBSS mode! */ - portType = 1; - createIBSS = 1; - - lp->DownloadFirmware = WVLAN_DRV_MODE_STA; //1; - - break; - - - case IW_MODE_AUTO: - case IW_MODE_INFRA: - - /* Both automatic and infrastructure set port to BSS/STA mode */ - portType = 1; - createIBSS = 0; - - lp->DownloadFirmware = WVLAN_DRV_MODE_STA; //1; - - break; - - -#if 0 //;? (HCF_TYPE) & HCF_TYPE_AP - - case IW_MODE_MASTER: - - /* Set BSS/AP mode */ - portType = 1; - - lp->CreateIBSS = 0; - lp->DownloadFirmware = WVLAN_DRV_MODE_AP; //2; - - break; - -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ - - - default: - - portType = 0; - createIBSS = 0; - ret = -EINVAL; - } - - if( portType != 0 ) { - /* Only do something if there is a mode change */ - if( ( lp->PortType != portType ) || (lp->CreateIBSS != createIBSS)) { - lp->PortType = portType; - lp->CreateIBSS = createIBSS; - - /* Commit the adapter parameters */ - wl_go( lp ); - - /* Send an event that mode has been set */ - wl_wext_event_mode( lp->dev ); - } - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_porttype -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_porttype() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the port type of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_porttype(struct net_device *dev, struct iw_request_info *info, __u32 *mode, char *extra) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - hcf_16 *pPortType; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Get the current port type */ - lp->ltvRecord.len = 1 + ( sizeof( *pPortType ) / sizeof( hcf_16 )); - lp->ltvRecord.typ = CFG_CNF_PORT_TYPE; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - pPortType = (hcf_16 *)&( lp->ltvRecord.u.u32 ); - - *pPortType = CNV_LITTLE_TO_INT( *pPortType ); - - switch( *pPortType ) { - case 1: - -#if 0 -#if (HCF_TYPE) & HCF_TYPE_AP - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - *mode = IW_MODE_MASTER; - } else { - *mode = IW_MODE_INFRA; - } - -#else - - *mode = IW_MODE_INFRA; - -#endif /* (HCF_TYPE) & HCF_TYPE_AP */ -#endif - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - *mode = IW_MODE_MASTER; - } else { - if( lp->CreateIBSS ) { - *mode = IW_MODE_ADHOC; - } else { - *mode = IW_MODE_INFRA; - } - } - - break; - - - case 3: - *mode = IW_MODE_ADHOC; - break; - - default: - ret = -EFAULT; - break; - } - } else { - ret = -EFAULT; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_porttype -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_power() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the power management settings of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *wrq, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - DBG_PRINT( "THIS CORRUPTS PMEnabled ;?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" ); - -#if 0 //;? Needed, was present in original code but not in 7.18 Linux 2.6 kernel version - if( !capable( CAP_NET_ADMIN )) { - ret = -EPERM; - return ret; - } -#endif - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Set the power management state based on the 'disabled' value */ - if( wrq->disabled ) { - lp->PMEnabled = 0; - } else { - lp->PMEnabled = 1; - } - - /* Commit the adapter parameters */ - wl_apply( lp ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_power -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_power() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the power management settings of the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *rrq, char *extra) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - DBG_PRINT( "THIS IS PROBABLY AN OVER-SIMPLIFICATION ;?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" ); - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - rrq->flags = 0; - rrq->value = 0; - - if( lp->PMEnabled ) { - rrq->disabled = 0; - } else { - rrq->disabled = 1; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_power -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_tx_power() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the transmit power of the wireless device's radio. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_tx_power(struct net_device *dev, struct iw_request_info *info, struct iw_param *rrq, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - -#ifdef USE_POWER_DBM - rrq->value = RADIO_TX_POWER_DBM; - rrq->flags = IW_TXPOW_DBM; -#else - rrq->value = RADIO_TX_POWER_MWATT; - rrq->flags = IW_TXPOW_MWATT; -#endif - rrq->fixed = 1; - rrq->disabled = 0; - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_tx_power -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_set_rts_threshold() - ******************************************************************************* - * - * DESCRIPTION: - * - * Sets the RTS threshold for the wireless card. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_rts_threshold (struct net_device *dev, struct iw_request_info *info, struct iw_param *rts, char *extra) -{ - int ret = 0; - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int rthr = rts->value; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if(rts->fixed == 0) { - ret = -EINVAL; - goto out; - } - - if( rts->disabled ) { - rthr = 2347; - } - - if(( rthr < 256 ) || ( rthr > 2347 )) { - ret = -EINVAL; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - lp->RTSThreshold = rthr; - - wl_apply( lp ); - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_rts_threshold -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_rts_threshold() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gets the RTS threshold for the wireless card. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_rts_threshold (struct net_device *dev, struct iw_request_info *info, struct iw_param *rts, char *extra) -{ - int ret = 0; - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - rts->value = lp->RTSThreshold; - - rts->disabled = ( rts->value == 2347 ); - - rts->fixed = 1; - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_rts_threshold -/*============================================================================*/ - - - - - -/******************************************************************************* - * wireless_set_rate() - ******************************************************************************* - * - * DESCRIPTION: - * - * Set the default data rate setting used by the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *rrq, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; -#ifdef WARP - int status = -1; - int index = 0; -#endif // WARP - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - -#ifdef WARP - - /* Determine if the card is operating in the 2.4 or 5.0 GHz band; check - if Bit 9 is set in the current channel RID */ - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_CUR_CHANNEL; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - index = ( CNV_LITTLE_TO_INT( lp->ltvRecord.u.u16[0] ) & 0x100 ) ? 1 : 0; - - DBG_PRINT( "Index: %d\n", index ); - } else { - DBG_ERROR( DbgInfo, "Could not determine radio frequency\n" ); - ret = -EINVAL; - goto out_unlock; - } - - if( rrq->value > 0 && - rrq->value <= 1 * MEGABIT ) { - lp->TxRateControl[index] = 0x0001; - } - else if( rrq->value > 1 * MEGABIT && - rrq->value <= 2 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0002; - } else { - lp->TxRateControl[index] = 0x0003; - } - } - else if( rrq->value > 2 * MEGABIT && - rrq->value <= 5 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0004; - } else { - lp->TxRateControl[index] = 0x0007; - } - } - else if( rrq->value > 5 * MEGABIT && - rrq->value <= 6 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0010; - } else { - lp->TxRateControl[index] = 0x0017; - } - } - else if( rrq->value > 6 * MEGABIT && - rrq->value <= 9 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0020; - } else { - lp->TxRateControl[index] = 0x0037; - } - } - else if( rrq->value > 9 * MEGABIT && - rrq->value <= 11 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0008; - } else { - lp->TxRateControl[index] = 0x003F; - } - } - else if( rrq->value > 11 * MEGABIT && - rrq->value <= 12 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0040; - } else { - lp->TxRateControl[index] = 0x007F; - } - } - else if( rrq->value > 12 * MEGABIT && - rrq->value <= 18 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0080; - } else { - lp->TxRateControl[index] = 0x00FF; - } - } - else if( rrq->value > 18 * MEGABIT && - rrq->value <= 24 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0100; - } else { - lp->TxRateControl[index] = 0x01FF; - } - } - else if( rrq->value > 24 * MEGABIT && - rrq->value <= 36 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0200; - } else { - lp->TxRateControl[index] = 0x03FF; - } - } - else if( rrq->value > 36 * MEGABIT && - rrq->value <= 48 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0400; - } else { - lp->TxRateControl[index] = 0x07FF; - } - } - else if( rrq->value > 48 * MEGABIT && - rrq->value <= 54 * MEGABIT ) { - if( rrq->fixed == 1 ) { - lp->TxRateControl[index] = 0x0800; - } else { - lp->TxRateControl[index] = 0x0FFF; - } - } - else if( rrq->fixed == 0 ) { - /* In this case, the user has not specified a bitrate, only the "auto" - moniker. So, set to all supported rates */ - lp->TxRateControl[index] = PARM_MAX_TX_RATE; - } else { - rrq->value = 0; - ret = -EINVAL; - goto out_unlock; - } - - -#else - - if( rrq->value > 0 && - rrq->value <= 1 * MEGABIT ) { - lp->TxRateControl[0] = 1; - } - else if( rrq->value > 1 * MEGABIT && - rrq->value <= 2 * MEGABIT ) { - if( rrq->fixed ) { - lp->TxRateControl[0] = 2; - } else { - lp->TxRateControl[0] = 6; - } - } - else if( rrq->value > 2 * MEGABIT && - rrq->value <= 5 * MEGABIT ) { - if( rrq->fixed ) { - lp->TxRateControl[0] = 4; - } else { - lp->TxRateControl[0] = 7; - } - } - else if( rrq->value > 5 * MEGABIT && - rrq->value <= 11 * MEGABIT ) { - if( rrq->fixed) { - lp->TxRateControl[0] = 5; - } else { - lp->TxRateControl[0] = 3; - } - } - else if( rrq->fixed == 0 ) { - /* In this case, the user has not specified a bitrate, only the "auto" - moniker. So, set the rate to 11Mb auto */ - lp->TxRateControl[0] = 3; - } else { - rrq->value = 0; - ret = -EINVAL; - goto out_unlock; - } - -#endif // WARP - - - /* Commit the adapter parameters */ - wl_apply( lp ); - -out_unlock: - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_rate -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_rate() - ******************************************************************************* - * - * DESCRIPTION: - * - * Get the default data rate setting used by the wireless device. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_rate(struct net_device *dev, struct iw_request_info *info, struct iw_param *rrq, char *extra) - -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - hcf_16 txRate; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* Get the current transmit rate from the adapter */ - lp->ltvRecord.len = 1 + ( sizeof(txRate)/sizeof(hcf_16)); - lp->ltvRecord.typ = CFG_CUR_TX_RATE; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { -#ifdef WARP - - txRate = CNV_LITTLE_TO_INT( lp->ltvRecord.u.u16[0] ); - - if( txRate & 0x0001 ) { - txRate = 1; - } - else if( txRate & 0x0002 ) { - txRate = 2; - } - else if( txRate & 0x0004 ) { - txRate = 5; - } - else if( txRate & 0x0008 ) { - txRate = 11; - } - else if( txRate & 0x00010 ) { - txRate = 6; - } - else if( txRate & 0x00020 ) { - txRate = 9; - } - else if( txRate & 0x00040 ) { - txRate = 12; - } - else if( txRate & 0x00080 ) { - txRate = 18; - } - else if( txRate & 0x00100 ) { - txRate = 24; - } - else if( txRate & 0x00200 ) { - txRate = 36; - } - else if( txRate & 0x00400 ) { - txRate = 48; - } - else if( txRate & 0x00800 ) { - txRate = 54; - } - -#else - - txRate = (hcf_16)CNV_LITTLE_TO_LONG( lp->ltvRecord.u.u32[0] ); - -#endif // WARP - - rrq->value = txRate * MEGABIT; - } else { - rrq->value = 0; - ret = -EFAULT; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_rate -/*============================================================================*/ - - - - -#if 0 //;? Not used anymore -/******************************************************************************* - * wireless_get_private_interface() - ******************************************************************************* - * - * DESCRIPTION: - * - * Returns the Linux Wireless Extensions' compatible private interface of - * the driver. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -int wireless_get_private_interface( struct iwreq *wrq, struct wl_private *lp ) -{ - int ret = 0; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if( wrq->u.data.pointer != NULL ) { - struct iw_priv_args priv[] = - { - { SIOCSIWNETNAME, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, 0, "snetwork_name" }, - { SIOCGIWNETNAME, 0, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, "gnetwork_name" }, - { SIOCSIWSTANAME, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, 0, "sstation_name" }, - { SIOCGIWSTANAME, 0, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, "gstation_name" }, - { SIOCSIWPORTTYPE, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "sport_type" }, - { SIOCGIWPORTTYPE, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "gport_type" }, - }; - - /* Verify the user buffer */ - ret = verify_area( VERIFY_WRITE, wrq->u.data.pointer, sizeof( priv )); - - if( ret != 0 ) - return ret; - - /* Copy the data into the user's buffer */ - wrq->u.data.length = NELEM( priv ); - copy_to_user( wrq->u.data.pointer, &priv, sizeof( priv )); - } - -out: - return ret; -} // wireless_get_private_interface -/*============================================================================*/ -#endif - - - -/******************************************************************************* - * wireless_set_scan() - ******************************************************************************* - * - * DESCRIPTION: - * - * Instructs the driver to initiate a network scan. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_set_scan(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int status = -1; - int retries = 0; - - //;? Note: shows results as trace, returns always 0 unless BUSY - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* - * This looks like a nice place to test if the HCF is still - * communicating with the card. It seems that sometimes BAP_1 - * gets corrupted. By looking at the comments in HCF the - * cause is still a mystery. Okay, the communication to the - * card is dead, reset the card to revive. - */ - if((lp->hcfCtx.IFB_CardStat & CARD_STAT_DEFUNCT) != 0) - { - DBG_TRACE( DbgInfo, "CARD is in DEFUNCT mode, reset it to bring it back to life\n" ); - wl_reset( dev ); - } - -retry: - /* Set the completion state to FALSE */ - lp->probe_results.scan_complete = FALSE; - - - /* Channels to scan */ -#ifdef WARP - lp->ltvRecord.len = 5; - lp->ltvRecord.typ = CFG_SCAN_CHANNEL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0x3FFF ); // 2.4 GHz Band - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( 0xFFFF ); // 5.0 GHz Band - lp->ltvRecord.u.u16[2] = CNV_INT_TO_LITTLE( 0xFFFF ); // .. - lp->ltvRecord.u.u16[3] = CNV_INT_TO_LITTLE( 0x0007 ); // .. -#else - lp->ltvRecord.len = 2; - lp->ltvRecord.typ = CFG_SCAN_CHANNEL; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0x7FFF ); -#endif // WARP - - status = hcf_put_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - DBG_TRACE( DbgInfo, "CFG_SCAN_CHANNEL result : 0x%x\n", status ); - - // Holding the lock too long, makes a gap to allow other processes - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - if( status != HCF_SUCCESS ) { - //Recovery - retries++; - if(retries <= 10) { - DBG_TRACE( DbgInfo, "Reset card to recover, attempt: %d\n", retries ); - wl_reset( dev ); - - // Holding the lock too long, makes a gap to allow other processes - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - goto retry; - } - } - - /* Set the SCAN_SSID to "ANY". Using this RID for scan prevents the need to - disassociate from the network we are currently on */ - lp->ltvRecord.len = 18; - lp->ltvRecord.typ = CFG_SCAN_SSID; - lp->ltvRecord.u.u16[0] = CNV_INT_TO_LITTLE( 0 ); - lp->ltvRecord.u.u16[1] = CNV_INT_TO_LITTLE( 0 ); - - status = hcf_put_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - // Holding the lock too long, makes a gap to allow other processes - wl_unlock(lp, &flags); - wl_lock( lp, &flags ); - - DBG_TRACE( DbgInfo, "CFG_SCAN_SSID to 'any' status: 0x%x\n", status ); - - /* Initiate the scan */ - /* NOTE: Using HCF_ACT_SCAN has been removed, as using HCF_ACT_ACS_SCAN to - retrieve probe response must always be used to support WPA */ - status = hcf_action( &( lp->hcfCtx ), HCF_ACT_ACS_SCAN ); - - if( status == HCF_SUCCESS ) { - DBG_TRACE( DbgInfo, "SUCCESSFULLY INITIATED SCAN...\n" ); - } else { - DBG_TRACE( DbgInfo, "INITIATE SCAN FAILED...\n" ); - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_scan -/*============================================================================*/ - - - - -/******************************************************************************* - * wireless_get_scan() - ******************************************************************************* - * - * DESCRIPTION: - * - * Instructs the driver to gather and return the results of a network scan. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -static int wireless_get_scan(struct net_device *dev, struct iw_request_info *info, struct iw_point *data, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret = 0; - int count; - char *buf; - char *buf_end; - struct iw_event iwe; - PROBE_RESP *probe_resp; - hcf_8 msg[512]; - hcf_8 *wpa_ie; - hcf_16 wpa_ie_len; - - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - /* If the scan is not done, tell the calling process to try again later */ - if( !lp->probe_results.scan_complete ) { - ret = -EAGAIN; - goto out_unlock; - } - - DBG_TRACE( DbgInfo, "SCAN COMPLETE, Num of APs: %d\n", - lp->probe_results.num_aps ); - - buf = extra; - buf_end = extra + IW_SCAN_MAX_DATA; - - for( count = 0; count < lp->probe_results.num_aps; count++ ) { - /* Reference the probe response from the table */ - probe_resp = (PROBE_RESP *)&lp->probe_results.ProbeTable[count]; - - - /* First entry MUST be the MAC address */ - memset( &iwe, 0, sizeof( iwe )); - - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy( iwe.u.ap_addr.sa_data, probe_resp->BSSID, ETH_ALEN); - iwe.len = IW_EV_ADDR_LEN; - - buf = iwe_stream_add_event(info, buf, buf_end, - &iwe, IW_EV_ADDR_LEN); - - /* Use the mode to indicate if it's a station or AP */ - /* Won't always be an AP if in IBSS mode */ - memset( &iwe, 0, sizeof( iwe )); - - iwe.cmd = SIOCGIWMODE; - - if( probe_resp->capability & CAPABILITY_IBSS ) { - iwe.u.mode = IW_MODE_INFRA; - } else { - iwe.u.mode = IW_MODE_MASTER; - } - - iwe.len = IW_EV_UINT_LEN; - - buf = iwe_stream_add_event(info, buf, buf_end, - &iwe, IW_EV_UINT_LEN); - - /* Any quality information */ - memset(&iwe, 0, sizeof(iwe)); - - iwe.cmd = IWEVQUAL; - iwe.u.qual.level = dbm(probe_resp->signal); - iwe.u.qual.noise = dbm(probe_resp->silence); - iwe.u.qual.qual = iwe.u.qual.level - iwe.u.qual.noise; - iwe.u.qual.updated = lp->probe_results.scan_complete | IW_QUAL_DBM; - iwe.len = IW_EV_QUAL_LEN; - - buf = iwe_stream_add_event(info, buf, buf_end, - &iwe, IW_EV_QUAL_LEN); - - - /* ESSID information */ - if( probe_resp->rawData[1] > 0 ) { - memset( &iwe, 0, sizeof( iwe )); - - iwe.cmd = SIOCGIWESSID; - iwe.u.data.length = probe_resp->rawData[1]; - iwe.u.data.flags = 1; - - buf = iwe_stream_add_point(info, buf, buf_end, - &iwe, &probe_resp->rawData[2]); - } - - - /* Encryption Information */ - memset( &iwe, 0, sizeof( iwe )); - - iwe.cmd = SIOCGIWENCODE; - iwe.u.data.length = 0; - - /* Check the capabilities field of the Probe Response to see if - 'privacy' is supported on the AP in question */ - if( probe_resp->capability & CAPABILITY_PRIVACY ) { - iwe.u.data.flags |= IW_ENCODE_ENABLED; - } else { - iwe.u.data.flags |= IW_ENCODE_DISABLED; - } - - buf = iwe_stream_add_point(info, buf, buf_end, &iwe, NULL); - - - /* Frequency Info */ - memset( &iwe, 0, sizeof( iwe )); - - iwe.cmd = SIOCGIWFREQ; - iwe.len = IW_EV_FREQ_LEN; - iwe.u.freq.m = wl_parse_ds_ie( probe_resp ); - iwe.u.freq.e = 0; - - buf = iwe_stream_add_event(info, buf, buf_end, - &iwe, IW_EV_FREQ_LEN); - - - /* Custom info (Beacon Interval) */ - memset( &iwe, 0, sizeof( iwe )); - memset( msg, 0, sizeof( msg )); - - iwe.cmd = IWEVCUSTOM; - sprintf( msg, "beacon_interval=%d", probe_resp->beaconInterval ); - iwe.u.data.length = strlen( msg ); - - buf = iwe_stream_add_point(info, buf, buf_end, &iwe, msg); - - - /* WPA-IE */ - wpa_ie = NULL; - wpa_ie_len = 0; - - wpa_ie = wl_parse_wpa_ie( probe_resp, &wpa_ie_len ); - if( wpa_ie != NULL ) { - memset(&iwe, 0, sizeof(iwe)); - - iwe.cmd = IWEVGENIE; - iwe.u.data.length = wpa_ie_len; - - buf = iwe_stream_add_point(info, buf, buf_end, - &iwe, wpa_ie); - } - - /* Add other custom info in formatted string format as needed... */ - } - - data->length = buf - extra; - -out_unlock: - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_get_scan -/*============================================================================*/ - -#if DBG -static const char * const auth_names[] = { - "IW_AUTH_WPA_VERSION", - "IW_AUTH_CIPHER_PAIRWISE", - "IW_AUTH_CIPHER_GROUP", - "IW_AUTH_KEY_MGMT", - "IW_AUTH_TKIP_COUNTERMEASURES", - "IW_AUTH_DROP_UNENCRYPTED", - "IW_AUTH_80211_AUTH_ALG", - "IW_AUTH_WPA_ENABLED", - "IW_AUTH_RX_UNENCRYPTED_EAPOL", - "IW_AUTH_ROAMING_CONTROL", - "IW_AUTH_PRIVACY_INVOKED", - "IW_AUTH_CIPHER_GROUP_MGMT", - "IW_AUTH_MFP", - "Unsupported" -}; -#endif - -static int wireless_set_auth(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *data, char *extra) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - ltv_t ltv; - int ret; - int iwa_idx = data->flags & IW_AUTH_INDEX; - int iwa_val = data->value; - - if (lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - - if (iwa_idx > IW_AUTH_MFP) - iwa_idx = IW_AUTH_MFP + 1; - DBG_TRACE(DbgInfo, "%s\n", auth_names[iwa_idx]); - switch (iwa_idx) { - case IW_AUTH_WPA_VERSION: - /* We do support WPA */ - if ((iwa_val == IW_AUTH_WPA_VERSION_WPA) || - (iwa_val == IW_AUTH_WPA_VERSION_DISABLED)) - ret = 0; - else - ret = -EINVAL; - break; - - case IW_AUTH_WPA_ENABLED: - DBG_TRACE(DbgInfo, "val = %d\n", iwa_val); - if (iwa_val) - lp->EnableEncryption = 2; - else - lp->EnableEncryption = 0; - - /* Write straight to the card */ - ltv.len = 2; - ltv.typ = CFG_CNF_ENCRYPTION; - ltv.u.u16[0] = cpu_to_le16(lp->EnableEncryption); - ret = hcf_put_info(&lp->hcfCtx, (LTVP)<v); - - break; - - case IW_AUTH_TKIP_COUNTERMEASURES: - - /* Immediately disable card */ - lp->driverEnable = !iwa_val; - if (lp->driverEnable) - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_ENABLE | HCF_PORT_0); - else - hcf_cntl(&(lp->hcfCtx), HCF_CNTL_DISABLE | HCF_PORT_0); - ret = 0; - break; - - case IW_AUTH_MFP: - /* Management Frame Protection not supported. - * Only fail if set to required. - */ - if (iwa_val == IW_AUTH_MFP_REQUIRED) - ret = -EINVAL; - else - ret = 0; - break; - - case IW_AUTH_KEY_MGMT: - - /* Record required management suite. - * Will take effect on next commit */ - if (iwa_val != 0) - lp->AuthKeyMgmtSuite = 4; - else - lp->AuthKeyMgmtSuite = 0; - - ret = -EINPROGRESS; - break; - - case IW_AUTH_80211_AUTH_ALG: - - /* Just record whether open or shared is required. - * Will take effect on next commit */ - ret = -EINPROGRESS; - - if (iwa_val & IW_AUTH_ALG_SHARED_KEY) - lp->authentication = 1; - else if (iwa_val & IW_AUTH_ALG_OPEN_SYSTEM) - lp->authentication = 0; - else - ret = -EINVAL; - break; - - case IW_AUTH_DROP_UNENCRYPTED: - /* Only needed for AP */ - lp->ExcludeUnencrypted = iwa_val; - ret = -EINPROGRESS; - break; - - case IW_AUTH_CIPHER_PAIRWISE: - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_ROAMING_CONTROL: - case IW_AUTH_PRIVACY_INVOKED: - /* Not used. May need to do something with - * CIPHER_PAIRWISE and CIPHER_GROUP*/ - ret = -EINPROGRESS; - break; - - default: - DBG_TRACE(DbgInfo, "IW_AUTH_?? (%d) unknown\n", iwa_idx); - /* return an error */ - ret = -EOPNOTSUPP; - break; - } - - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - -out: - return ret; -} // wireless_set_auth -/*============================================================================*/ - - -static void flush_tx(struct wl_private *lp) -{ - ltv_t ltv; - int count; - - /* - * Make sure that there is no data queued up in the firmware - * before setting the TKIP keys. If this check is not - * performed, some data may be sent out with incorrect MIC - * and cause synchronization errors with the AP - */ - /* Check every 1ms for 100ms */ - for (count = 0; count < 100; count++) { - udelay(1000); - - ltv.len = 2; - ltv.typ = 0xFD91; /* This RID not defined in HCF yet!!! */ - ltv.u.u16[0] = 0; - - hcf_get_info(&(lp->hcfCtx), (LTVP)<v); - - if (ltv.u.u16[0] == 0) - break; - } - - if (count >= 100) - DBG_TRACE(DbgInfo, "Timed out waiting for TxQ flush!\n"); - -} - -static int wireless_set_encodeext(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *erq, char *keybuf) -{ - struct wl_private *lp = wl_priv(dev); - unsigned long flags; - int ret; - int key_idx = (erq->flags & IW_ENCODE_INDEX) - 1; - ltv_t ltv; - struct iw_encode_ext *ext = (struct iw_encode_ext *)keybuf; - bool enable = true; - bool set_tx = false; - - if (lp->portState == WVLAN_PORT_STATE_DISABLED) { - ret = -EBUSY; - goto out; - } - - if (erq->flags & IW_ENCODE_DISABLED) { - ext->alg = IW_ENCODE_ALG_NONE; - enable = false; - } - - if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) - set_tx = true; - - wl_lock(lp, &flags); - - wl_act_int_off(lp); - - memset(<v, 0, sizeof(ltv)); - - switch (ext->alg) { - case IW_ENCODE_ALG_TKIP: - DBG_TRACE(DbgInfo, "IW_ENCODE_ALG_TKIP: key(%d)\n", key_idx); - - if (sizeof(ext->rx_seq) != 8) { - DBG_TRACE(DbgInfo, "rx_seq size mismatch\n"); - ret = -EINVAL; - goto out_unlock; - } - - ret = hermes_set_tkip_keys(<v, key_idx, ext->addr.sa_data, - set_tx, - ext->rx_seq, ext->key, ext->key_len); - - if (ret != 0) { - DBG_TRACE(DbgInfo, "hermes_set_tkip_keys returned != 0, key not set\n"); - goto out_unlock; - } - - flush_tx(lp); - - lp->wext_enc = IW_ENCODE_ALG_TKIP; - - /* Write the key */ - ret = hcf_put_info(&(lp->hcfCtx), (LTVP)<v); - break; - - case IW_ENCODE_ALG_WEP: - DBG_TRACE(DbgInfo, "IW_ENCODE_ALG_WEP: key(%d)\n", key_idx); - - if (erq->flags & IW_ENCODE_RESTRICTED) { - DBG_WARNING(DbgInfo, "IW_ENCODE_RESTRICTED invalid\n"); - ret = -EINVAL; - goto out_unlock; - } - - ret = hermes_set_wep_keys(lp, key_idx, ext->key, ext->key_len, - enable, set_tx); - - break; - - case IW_ENCODE_ALG_CCMP: - DBG_TRACE(DbgInfo, "IW_ENCODE_ALG_CCMP: key(%d)\n", key_idx); - ret = -EOPNOTSUPP; - break; - - case IW_ENCODE_ALG_NONE: - DBG_TRACE(DbgInfo, "IW_ENCODE_ALG_NONE: key(%d)\n", key_idx); - - if (lp->wext_enc == IW_ENCODE_ALG_TKIP) { - ret = hermes_clear_tkip_keys(<v, key_idx, - ext->addr.sa_data); - flush_tx(lp); - lp->wext_enc = IW_ENCODE_ALG_NONE; - ret = hcf_put_info(&(lp->hcfCtx), (LTVP)<v); - - } else if (lp->wext_enc == IW_ENCODE_ALG_WEP) { - ret = hermes_set_wep_keys(lp, key_idx, - ext->key, ext->key_len, - false, false); - } else { - ret = 0; - } - - break; - - default: - DBG_TRACE( DbgInfo, "IW_ENCODE_??: key(%d)\n", key_idx); - ret = -EOPNOTSUPP; - break; - } - -out_unlock: - - wl_act_int_on(lp); - - wl_unlock(lp, &flags); - -out: - return ret; -} -/*============================================================================*/ - - - -static int wireless_set_genie(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) - -{ - /* We can't write this to the card, but apparently this - * operation needs to succeed */ - - return 0; -} -/*============================================================================*/ - - -/******************************************************************************* - * wl_wireless_stats() - ******************************************************************************* - * - * DESCRIPTION: - * - * Return the current device wireless statistics. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -struct iw_statistics * wl_wireless_stats( struct net_device *dev ) -{ - struct iw_statistics *pStats; - struct wl_private *lp = wl_priv(dev); - - DBG_PARAM(DbgInfo, "dev", "%s (0x%p)", dev->name, dev); - - pStats = NULL; - - /* Initialize the statistics */ - pStats = &( lp->wstats ); - pStats->qual.updated = 0x00; - - if( !( lp->flags & WVLAN2_UIL_BUSY )) - { - CFG_COMMS_QUALITY_STRCT *pQual; - CFG_HERMES_TALLIES_STRCT tallies; - int status; - - /* Update driver status */ - pStats->status = 0; - - /* Get the current link quality information */ - lp->ltvRecord.len = 1 + ( sizeof( *pQual ) / sizeof( hcf_16 )); - lp->ltvRecord.typ = CFG_COMMS_QUALITY; - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - - if( status == HCF_SUCCESS ) { - pQual = (CFG_COMMS_QUALITY_STRCT *)&( lp->ltvRecord ); - - pStats->qual.qual = (u_char) CNV_LITTLE_TO_INT( pQual->coms_qual ); - pStats->qual.level = (u_char) dbm( CNV_LITTLE_TO_INT( pQual->signal_lvl )); - pStats->qual.noise = (u_char) dbm( CNV_LITTLE_TO_INT( pQual->noise_lvl )); - - pStats->qual.updated |= (IW_QUAL_QUAL_UPDATED | - IW_QUAL_LEVEL_UPDATED | - IW_QUAL_NOISE_UPDATED | - IW_QUAL_DBM); - } else { - memset( &( pStats->qual ), 0, sizeof( pStats->qual )); - } - - /* Get the current tallies from the adapter */ - /* Only possible when the device is open */ - if(lp->portState == WVLAN_PORT_STATE_DISABLED) { - if( wl_get_tallies( lp, &tallies ) == 0 ) { - /* No endian translation is needed here, as CFG_TALLIES is an - MSF RID; all processing is done on the host, not the card! */ - pStats->discard.nwid = 0L; - pStats->discard.code = tallies.RxWEPUndecryptable; - pStats->discard.misc = tallies.TxDiscards + - tallies.RxFCSErrors + - //tallies.RxDiscardsNoBuffer + - tallies.TxDiscardsWrongSA; - //;? Extra taken over from Linux driver based on 7.18 version - pStats->discard.retries = tallies.TxRetryLimitExceeded; - pStats->discard.fragment = tallies.RxMsgInBadMsgFragments; - } else { - memset( &( pStats->discard ), 0, sizeof( pStats->discard )); - } - } else { - memset( &( pStats->discard ), 0, sizeof( pStats->discard )); - } - } - - return pStats; -} // wl_wireless_stats -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_get_wireless_stats() - ******************************************************************************* - * - * DESCRIPTION: - * - * Return the current device wireless statistics. This function calls - * wl_wireless_stats, but acquires spinlocks first as it can be called - * directly by the network layer. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -struct iw_statistics * wl_get_wireless_stats( struct net_device *dev ) -{ - unsigned long flags; - struct wl_private *lp = wl_priv(dev); - struct iw_statistics *pStats = NULL; - - wl_lock( lp, &flags ); - - wl_act_int_off( lp ); - -#ifdef USE_RTS - if( lp->useRTS == 1 ) { - DBG_TRACE( DbgInfo, "Skipping wireless stats, in RTS mode\n" ); - } else -#endif - { - pStats = wl_wireless_stats( dev ); - } - wl_act_int_on( lp ); - - wl_unlock(lp, &flags); - - return pStats; -} // wl_get_wireless_stats - - -/******************************************************************************* - * wl_spy_gather() - ******************************************************************************* - * - * DESCRIPTION: - * - * Gather wireless spy statistics. - * - * PARAMETERS: - * - * wrq - the wireless request buffer - * lp - the device's private adapter structure - * - * RETURNS: - * - * 0 on success - * errno value otherwise - * - ******************************************************************************/ -inline void wl_spy_gather( struct net_device *dev, u_char *mac ) -{ - struct iw_quality wstats; - int status; - u_char stats[2]; - DESC_STRCT desc[1]; - struct wl_private *lp = wl_priv(dev); - /*------------------------------------------------------------------------*/ - - /* shortcut */ - if (!lp->spy_data.spy_number) { - return; - } - - /* Gather wireless spy statistics: for each packet, compare the source - address with out list, and if match, get the stats. */ - memset( stats, 0, sizeof(stats)); - memset( desc, 0, sizeof(DESC_STRCT)); - - desc[0].buf_addr = stats; - desc[0].BUF_SIZE = sizeof(stats); - desc[0].next_desc_addr = 0; // terminate list - - status = hcf_rcv_msg( &( lp->hcfCtx ), &desc[0], 0 ); - - if( status == HCF_SUCCESS ) { - wstats.level = (u_char) dbm(stats[1]); - wstats.noise = (u_char) dbm(stats[0]); - wstats.qual = wstats.level > wstats.noise ? wstats.level - wstats.noise : 0; - - wstats.updated = (IW_QUAL_QUAL_UPDATED | - IW_QUAL_LEVEL_UPDATED | - IW_QUAL_NOISE_UPDATED | - IW_QUAL_DBM); - - wireless_spy_update( dev, mac, &wstats ); - } -} // wl_spy_gather -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_freq() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that the channel/freq - * configuration for a specific device has changed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_freq( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - wrqu.freq.m = lp->Channel; - wrqu.freq.e = 0; - - wireless_send_event( dev, SIOCSIWFREQ, &wrqu, NULL ); - - return; -} // wl_wext_event_freq -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_mode() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that the mode of operation - * for a specific device has changed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_mode( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { - wrqu.mode = IW_MODE_INFRA; - } else { - wrqu.mode = IW_MODE_MASTER; - } - - wireless_send_event( dev, SIOCSIWMODE, &wrqu, NULL ); - - return; -} // wl_wext_event_mode -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_essid() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that the ESSID configuration for - * a specific device has changed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_essid( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - /* Fill out the buffer. Note that the buffer doesn't actually contain the - ESSID, but a pointer to the contents. In addition, the 'extra' field of - the call to wireless_send_event() must also point to where the ESSID - lives */ - wrqu.essid.length = strlen( lp->NetworkName ); - wrqu.essid.pointer = (void __user *)lp->NetworkName; - wrqu.essid.flags = 1; - - wireless_send_event( dev, SIOCSIWESSID, &wrqu, lp->NetworkName ); - - return; -} // wl_wext_event_essid -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_encode() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that the encryption configuration - * for a specific device has changed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_encode( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - int index = 0; - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - if( lp->EnableEncryption == 0 ) { - wrqu.encoding.flags = IW_ENCODE_DISABLED; - } else { - wrqu.encoding.flags |= lp->TransmitKeyID; - - index = lp->TransmitKeyID - 1; - - /* Only set IW_ENCODE_RESTRICTED/OPEN flag using lp->ExcludeUnencrypted - if we're in 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( lp->ExcludeUnencrypted ) { - wrqu.encoding.flags |= IW_ENCODE_RESTRICTED; - } else { - wrqu.encoding.flags |= IW_ENCODE_OPEN; - } - } - -#endif // HCF_TYPE_AP - - /* Only provide the key if permissions allow */ - if( capable( CAP_NET_ADMIN )) { - wrqu.encoding.pointer = (void __user *)lp->DefaultKeys.key[index].key; - wrqu.encoding.length = lp->DefaultKeys.key[index].len; - } else { - wrqu.encoding.flags |= IW_ENCODE_NOKEY; - } - } - - wireless_send_event( dev, SIOCSIWENCODE, &wrqu, - lp->DefaultKeys.key[index].key ); - - return; -} // wl_wext_event_encode -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_ap() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that the device has been - * associated to a new AP. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_ap( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - int status; - /*------------------------------------------------------------------------*/ - - - /* Retrieve the WPA-IEs used by the firmware and send an event. We must send - this event BEFORE sending the association event, as there are timing - issues with the hostap supplicant. The supplicant will attempt to process - an EAPOL-Key frame from an AP before receiving this information, which - is required for a proper processed frame. */ - wl_wext_event_assoc_ie( dev ); - - /* Get the BSSID */ - lp->ltvRecord.typ = CFG_CUR_BSSID; - lp->ltvRecord.len = 4; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - if( status == HCF_SUCCESS ) { - memset( &wrqu, 0, sizeof( wrqu )); - - memcpy( wrqu.addr.sa_data, lp->ltvRecord.u.u8, ETH_ALEN ); - - wrqu.addr.sa_family = ARPHRD_ETHER; - - wireless_send_event( dev, SIOCGIWAP, &wrqu, NULL ); - } - - return; -} // wl_wext_event_ap -/*============================================================================*/ - - - -/******************************************************************************* - * wl_wext_event_scan_complete() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that a request for a network scan - * has completed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_scan_complete( struct net_device *dev ) -{ - union iwreq_data wrqu; - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - wrqu.addr.sa_family = ARPHRD_ETHER; - wireless_send_event( dev, SIOCGIWSCAN, &wrqu, NULL ); - - return; -} // wl_wext_event_scan_complete -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_new_sta() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that an AP has registered a new - * station. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_new_sta( struct net_device *dev ) -{ - union iwreq_data wrqu; - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - /* Send the station's mac address here */ - memcpy( wrqu.addr.sa_data, dev->dev_addr, ETH_ALEN ); - wrqu.addr.sa_family = ARPHRD_ETHER; - wireless_send_event( dev, IWEVREGISTERED, &wrqu, NULL ); - - return; -} // wl_wext_event_new_sta -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_expired_sta() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that an AP has deregistered a - * station. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_expired_sta( struct net_device *dev ) -{ - union iwreq_data wrqu; - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - memcpy( wrqu.addr.sa_data, dev->dev_addr, ETH_ALEN ); - wrqu.addr.sa_family = ARPHRD_ETHER; - wireless_send_event( dev, IWEVEXPIRED, &wrqu, NULL ); - - return; -} // wl_wext_event_expired_sta -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_mic_failed() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event that MIC calculations failed. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_mic_failed( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - struct iw_michaelmicfailure wxmic; - int key_idx; - char *addr1; - char *addr2; - WVLAN_RX_WMP_HDR *hdr; - /*------------------------------------------------------------------------*/ - - - key_idx = lp->lookAheadBuf[HFS_STAT+1] >> 3; - key_idx &= 0x03; - - /* Cast the lookahead buffer into a RFS format */ - hdr = (WVLAN_RX_WMP_HDR *)&lp->lookAheadBuf[HFS_STAT]; - - /* Cast the addresses to byte buffers, as in the above RFS they are word - length */ - addr1 = (char *)hdr->address1; - addr2 = (char *)hdr->address2; - - DBG_PRINT( "MIC FAIL - KEY USED : %d, STATUS : 0x%04x\n", key_idx, - hdr->status ); - - memset(&wrqu, 0, sizeof(wrqu)); - memset(&wxmic, 0, sizeof(wxmic)); - - wxmic.flags = key_idx & IW_MICFAILURE_KEY_ID; - wxmic.flags |= (addr1[0] & 1) ? - IW_MICFAILURE_GROUP : IW_MICFAILURE_PAIRWISE; - wxmic.src_addr.sa_family = ARPHRD_ETHER; - memcpy(wxmic.src_addr.sa_data, addr2, ETH_ALEN); - - wrqu.data.length = sizeof(wxmic); - wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&wxmic); - - return; -} // wl_wext_event_mic_failed -/*============================================================================*/ - - - - -/******************************************************************************* - * wl_wext_event_assoc_ie() - ******************************************************************************* - * - * DESCRIPTION: - * - * This function is used to send an event containing the WPA-IE generated - * by the firmware in an association request. - * - * - * PARAMETERS: - * - * dev - the network device for which this event is to be issued - * - * RETURNS: - * - * N/A - * - ******************************************************************************/ -void wl_wext_event_assoc_ie( struct net_device *dev ) -{ - union iwreq_data wrqu; - struct wl_private *lp = wl_priv(dev); - int status; - PROBE_RESP data; - hcf_16 length; - hcf_8 *wpa_ie; - /*------------------------------------------------------------------------*/ - - - memset( &wrqu, 0, sizeof( wrqu )); - - /* Retrieve the Association Request IE */ - lp->ltvRecord.len = 45; - lp->ltvRecord.typ = CFG_CUR_ASSOC_REQ_INFO; - - status = hcf_get_info( &( lp->hcfCtx ), (LTVP)&( lp->ltvRecord )); - if( status == HCF_SUCCESS ) - { - length = 0; - memcpy( &data.rawData, &( lp->ltvRecord.u.u8[1] ), 88 ); - wpa_ie = wl_parse_wpa_ie( &data, &length ); - - if( length != 0 ) - { - wrqu.data.length = wpa_ie[1] + 2; - wireless_send_event(dev, IWEVASSOCREQIE, - &wrqu, wpa_ie); - - /* This bit is a hack. We send the respie - * event at the same time */ - wireless_send_event(dev, IWEVASSOCRESPIE, - &wrqu, wpa_ie); - } - } - - return; -} // wl_wext_event_assoc_ie -/*============================================================================*/ -/* Structures to export the Wireless Handlers */ - -static const iw_handler wl_handler[] = -{ - IW_HANDLER(SIOCSIWCOMMIT, (iw_handler) wireless_commit), - IW_HANDLER(SIOCGIWNAME, (iw_handler) wireless_get_protocol), - IW_HANDLER(SIOCSIWFREQ, (iw_handler) wireless_set_frequency), - IW_HANDLER(SIOCGIWFREQ, (iw_handler) wireless_get_frequency), - IW_HANDLER(SIOCSIWMODE, (iw_handler) wireless_set_porttype), - IW_HANDLER(SIOCGIWMODE, (iw_handler) wireless_get_porttype), - IW_HANDLER(SIOCSIWSENS, (iw_handler) wireless_set_sensitivity), - IW_HANDLER(SIOCGIWSENS, (iw_handler) wireless_get_sensitivity), - IW_HANDLER(SIOCGIWRANGE, (iw_handler) wireless_get_range), - IW_HANDLER(SIOCSIWSPY, iw_handler_set_spy), - IW_HANDLER(SIOCGIWSPY, iw_handler_get_spy), -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - IW_HANDLER(SIOCGIWAP, (iw_handler) wireless_get_bssid), -#endif - IW_HANDLER(SIOCGIWAPLIST, (iw_handler) wireless_get_ap_list), - IW_HANDLER(SIOCSIWSCAN, (iw_handler) wireless_set_scan), - IW_HANDLER(SIOCGIWSCAN, (iw_handler) wireless_get_scan), - IW_HANDLER(SIOCSIWESSID, (iw_handler) wireless_set_essid), - IW_HANDLER(SIOCGIWESSID, (iw_handler) wireless_get_essid), - IW_HANDLER(SIOCSIWNICKN, (iw_handler) wireless_set_nickname), - IW_HANDLER(SIOCGIWNICKN, (iw_handler) wireless_get_nickname), - IW_HANDLER(SIOCSIWRATE, (iw_handler) wireless_set_rate), - IW_HANDLER(SIOCGIWRATE, (iw_handler) wireless_get_rate), - IW_HANDLER(SIOCSIWRTS, (iw_handler) wireless_set_rts_threshold), - IW_HANDLER(SIOCGIWRTS, (iw_handler) wireless_get_rts_threshold), - IW_HANDLER(SIOCGIWTXPOW, (iw_handler) wireless_get_tx_power), - IW_HANDLER(SIOCSIWENCODE, (iw_handler) wireless_set_encode), - IW_HANDLER(SIOCGIWENCODE, (iw_handler) wireless_get_encode), - IW_HANDLER(SIOCSIWPOWER, (iw_handler) wireless_set_power), - IW_HANDLER(SIOCGIWPOWER, (iw_handler) wireless_get_power), - IW_HANDLER(SIOCSIWGENIE, (iw_handler) wireless_set_genie), - IW_HANDLER(SIOCSIWAUTH, (iw_handler) wireless_set_auth), - IW_HANDLER(SIOCSIWENCODEEXT, (iw_handler) wireless_set_encodeext), -}; - -static const iw_handler wl_private_handler[] = -{ /* SIOCIWFIRSTPRIV + */ - wvlan_set_netname, /* 0: SIOCSIWNETNAME */ - wvlan_get_netname, /* 1: SIOCGIWNETNAME */ - wvlan_set_station_nickname, /* 2: SIOCSIWSTANAME */ - wvlan_get_station_nickname, /* 3: SIOCGIWSTANAME */ -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA - wvlan_set_porttype, /* 4: SIOCSIWPORTTYPE */ - wvlan_get_porttype, /* 5: SIOCGIWPORTTYPE */ -#endif -}; - -static struct iw_priv_args wl_priv_args[] = { - {SIOCSIWNETNAME, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, 0, "snetwork_name" }, - {SIOCGIWNETNAME, 0, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, "gnetwork_name" }, - {SIOCSIWSTANAME, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, 0, "sstation_name" }, - {SIOCGIWSTANAME, 0, IW_PRIV_TYPE_CHAR | HCF_MAX_NAME_LEN, "gstation_name" }, -#if 1 //;? #if (HCF_TYPE) & HCF_TYPE_STA - {SIOCSIWPORTTYPE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "sport_type" }, - {SIOCGIWPORTTYPE, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "gport_type" }, -#endif -}; - -const struct iw_handler_def wl_iw_handler_def = -{ - .num_private = sizeof(wl_private_handler) / sizeof(iw_handler), - .private = (iw_handler *) wl_private_handler, - .private_args = (struct iw_priv_args *) wl_priv_args, - .num_private_args = sizeof(wl_priv_args) / sizeof(struct iw_priv_args), - .num_standard = sizeof(wl_handler) / sizeof(iw_handler), - .standard = (iw_handler *) wl_handler, - .get_wireless_stats = wl_get_wireless_stats, -}; diff --git a/drivers/staging/wlags49_h2/wl_wext.h b/drivers/staging/wlags49_h2/wl_wext.h deleted file mode 100644 index 4a85dc889a12..000000000000 --- a/drivers/staging/wlags49_h2/wl_wext.h +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Agere Systems Inc. - * Wireless device driver for Linux (wlags49). - * - * Copyright (c) 1998-2003 Agere Systems Inc. - * All rights reserved. - * http://www.agere.com - * - * Initially developed by TriplePoint, Inc. - * http://www.triplepoint.com - * - *------------------------------------------------------------------------------ - * - * Header describing information required for the wireless IOCTL handlers. - * - *------------------------------------------------------------------------------ - * - * SOFTWARE LICENSE - * - * This software is provided subject to the following terms and conditions, - * which you should read carefully before using the software. Using this - * 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. - * All rights reserved. - * - * Redistribution and use in source or binary forms, with or without - * modifications, are permitted provided that the following conditions are met: - * - * . Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following Disclaimer as comments in the code as - * well as in the documentation and/or other materials provided with the - * distribution. - * - * . Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following Disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * . Neither the name of Agere Systems Inc. nor the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * Disclaimer - * - * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY - * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN - * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - ******************************************************************************/ - -#ifndef __WL_WEXT_H__ -#define __WL_WEXT_H__ - - -/******************************************************************************* - * function protoypes - ******************************************************************************/ - -struct iw_statistics *wl_wireless_stats( struct net_device *dev ); - -struct iw_statistics * wl_get_wireless_stats( struct net_device *dev ); - -inline void wl_spy_gather (struct net_device *dev, u_char *mac); - -void wl_wext_event_freq( struct net_device *dev ); -void wl_wext_event_mode( struct net_device *dev ); -void wl_wext_event_essid( struct net_device *dev ); -void wl_wext_event_encode( struct net_device *dev ); -void wl_wext_event_ap( struct net_device *dev ); -void wl_wext_event_scan_complete( struct net_device *dev ); -void wl_wext_event_new_sta( struct net_device *dev ); -void wl_wext_event_expired_sta( struct net_device *dev ); -void wl_wext_event_mic_failed( struct net_device *dev ); -void wl_wext_event_assoc_ie( struct net_device *dev ); - -extern const struct iw_handler_def wl_iw_handler_def; - -#endif /* __WL_WEXT_H__ */ diff --git a/drivers/staging/wlags49_h25/Kconfig b/drivers/staging/wlags49_h25/Kconfig deleted file mode 100644 index dd8dc4d62c64..000000000000 --- a/drivers/staging/wlags49_h25/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config WLAGS49_H25 - tristate "Linksys HERMES II.5 WCF54G_Wireless-G_CompactFlash_Card" - depends on WLAN && PCMCIA - select WIRELESS_EXT - select WEXT_SPY - select WEXT_PRIV - ---help--- - Driver for wireless cards using Agere's HERMES II.5 chipset - which are identified with Manufacture ID: 0156,0004 - The software is a modified version of wl_lkm_722_abg.tar.gz - from the Agere Systems website, adapted for Ubuntu 9.04. diff --git a/drivers/staging/wlags49_h25/Makefile b/drivers/staging/wlags49_h25/Makefile deleted file mode 100644 index 513ba01c2d59..000000000000 --- a/drivers/staging/wlags49_h25/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Makefile for wlags49_h2_cs.ko and wlags49_h25_cs.ko -# -# Default build for Hermes-II base cards (possibly identified with -# "manfid: 0x0156, 0x0003" in "pccardctl ident" output), comment -# -DHERMES25 below -# -# If you want to build for Hermes-II.5 base cards (possibly identified with -# "manfid: 0x0156, 0x0004" in "pccardctl ident" output), uncomment -# -DHERMES25 below -# -# If you want to build AP support (untested), comment out -DSTA_ONLY - -ccflags-y := -I$(KERNELDIR)/include -ccflags-y += -I$(src) \ - -DBUS_PCMCIA \ - -DUSE_WEXT \ - -DSTA_ONLY \ - -DWVLAN_49 \ - -DHERMES25 \ -# -DDBG \ -# -DDBG_LVL=5 \ -# -DUSE_UIL \ -# -DUSE_PROFILE \ - -ifeq ($(findstring HERMES25,$(ccflags-y)),) -WLNAME := wlags49_h2_cs -$(WLNAME)-y := sta_h2.o -ifeq ($(findstring STA_ONLY,$(ccflags-y)),) -$(WLNAME)-y += ap_h2.o -endif -else -WLNAME=wlags49_h25_cs -$(WLNAME)-y := sta_h25.o -ifeq ($(findstring STA_ONLY,$(ccflags-y)),) -$(WLNAME)-y += ap_h25.o -endif -endif - -obj-m += $(WLNAME).o - -$(WLNAME)-y += wl_profile.o \ - wl_wext.o \ - wl_priv.o \ - wl_main.o \ - wl_enc.o \ - wl_util.o \ - wl_netdev.o \ - wl_cs.o \ - mmd.o \ - hcf.o \ - dhf.o diff --git a/drivers/staging/wlags49_h25/README.txt b/drivers/staging/wlags49_h25/README.txt deleted file mode 100644 index 4c7a836972d7..000000000000 --- a/drivers/staging/wlags49_h25/README.txt +++ /dev/null @@ -1,30 +0,0 @@ -======================================================================= -WLAN driver for cards using the HERMES II and HERMES II.5 chipset - -HERMES II Card - -PCMCIA Info: "Agere Systems" "Wireless PC Card Model 0110" - Manufacture ID: 0156,0003 - -HERMES II.5 Card - -PCMCIA Info: "Linksys" "WCF54G_Wireless-G_CompactFlash_Card" - Manufacture ID: 0156,0004 - -Based on Agere Systems Linux LKM Wireless Driver Source Code, -Version 7.22; complies with Open Source BSD License. -======================================================================= - -DESCRIPTION - -This directory only contains files that refer to the source in wlags49_h2. -Only real sourcefiles are the Makefile which has been configured to build -the driver for the HERMES II.5 chipset and Kconfig to describe the driver. - -The wlags49_h2 directory contains the full source, including the files -exclusively used by this driver. - -For more information about the driver look at the wlags49_h2 direcory. - -======================================================================= - diff --git a/drivers/staging/wlags49_h25/TODO b/drivers/staging/wlags49_h25/TODO deleted file mode 100644 index ec71ad3245e4..000000000000 --- a/drivers/staging/wlags49_h25/TODO +++ /dev/null @@ -1,33 +0,0 @@ -First of all, the best thing would be that this driver becomes obsolete by -adding support for Hermes II and Hermes II.5 cards to the existing orinoco -driver. The orinoco driver currently only supports Hermes I based cards. -Since this will not happen by magic and has not happened until now this -driver provides a stop-gap solution for these type of cards. - -Having said that, the following wishlist comes to mind to make the driver -suitable as fully supported kernel driver. Feel free to expand/enhance the -list. - -TODO: - - verify against a Hermes II.5 card - - verify with WPA encryption (both with H2 and H2.5 cards) - - sometimes the card does not initialize correctly, retry mechanisms - are build in to catch most cases but not all - - once the driver runs it is very stable, but I have the impression - some the critical sections take to long - - the driver is split into a Hermes II and a Hermes II.5 part, it - would be nice to handle both with one module instead of two - - review by the wireless developer community - - verify the code against the coding standards for a proper linux - driver - - resolve license issues (?) - -DONE: - - verified against a Hermes II card (Thomson Speedtouch 110 PCMCIA - card) - - verified with WEP encryption - -Please send any patches or complaints about this driver to Greg -Kroah-Hartman and Cc: Henk de Groot -Don't bother the upstream wireless kernel developers about it, they -want nothing to do with it. diff --git a/drivers/staging/wlags49_h25/ap_h25.c b/drivers/staging/wlags49_h25/ap_h25.c deleted file mode 100644 index 0344fa58dda6..000000000000 --- a/drivers/staging/wlags49_h25/ap_h25.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/ap_h25.c" diff --git a/drivers/staging/wlags49_h25/debug.h b/drivers/staging/wlags49_h25/debug.h deleted file mode 100644 index b5fb136a2d54..000000000000 --- a/drivers/staging/wlags49_h25/debug.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/debug.h" diff --git a/drivers/staging/wlags49_h25/dhf.c b/drivers/staging/wlags49_h25/dhf.c deleted file mode 100644 index 81762c80189c..000000000000 --- a/drivers/staging/wlags49_h25/dhf.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/dhf.c" diff --git a/drivers/staging/wlags49_h25/dhf.h b/drivers/staging/wlags49_h25/dhf.h deleted file mode 100644 index 54181dc70a72..000000000000 --- a/drivers/staging/wlags49_h25/dhf.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/dhf.h" diff --git a/drivers/staging/wlags49_h25/dhfcfg.h b/drivers/staging/wlags49_h25/dhfcfg.h deleted file mode 100644 index 2586e3980214..000000000000 --- a/drivers/staging/wlags49_h25/dhfcfg.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/dhfcfg.h" diff --git a/drivers/staging/wlags49_h25/hcf.c b/drivers/staging/wlags49_h25/hcf.c deleted file mode 100644 index eeeba1f5553e..000000000000 --- a/drivers/staging/wlags49_h25/hcf.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/hcf.c" diff --git a/drivers/staging/wlags49_h25/hcf.h b/drivers/staging/wlags49_h25/hcf.h deleted file mode 100644 index d1143d9fce2d..000000000000 --- a/drivers/staging/wlags49_h25/hcf.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/hcf.h" diff --git a/drivers/staging/wlags49_h25/hcfcfg.h b/drivers/staging/wlags49_h25/hcfcfg.h deleted file mode 100644 index f88c4bcb3ff8..000000000000 --- a/drivers/staging/wlags49_h25/hcfcfg.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/hcfcfg.h" diff --git a/drivers/staging/wlags49_h25/hcfdef.h b/drivers/staging/wlags49_h25/hcfdef.h deleted file mode 100644 index f6a0060c3a53..000000000000 --- a/drivers/staging/wlags49_h25/hcfdef.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/hcfdef.h" diff --git a/drivers/staging/wlags49_h25/mdd.h b/drivers/staging/wlags49_h25/mdd.h deleted file mode 100644 index 4d8e142ffa34..000000000000 --- a/drivers/staging/wlags49_h25/mdd.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/mdd.h" diff --git a/drivers/staging/wlags49_h25/mmd.c b/drivers/staging/wlags49_h25/mmd.c deleted file mode 100644 index b20782d334d2..000000000000 --- a/drivers/staging/wlags49_h25/mmd.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/mmd.c" diff --git a/drivers/staging/wlags49_h25/mmd.h b/drivers/staging/wlags49_h25/mmd.h deleted file mode 100644 index 8284dd9155ed..000000000000 --- a/drivers/staging/wlags49_h25/mmd.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/mmd.h" diff --git a/drivers/staging/wlags49_h25/sta_h25.c b/drivers/staging/wlags49_h25/sta_h25.c deleted file mode 100644 index 83c76bbdc6e7..000000000000 --- a/drivers/staging/wlags49_h25/sta_h25.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/sta_h25.c" diff --git a/drivers/staging/wlags49_h25/wl_cs.c b/drivers/staging/wlags49_h25/wl_cs.c deleted file mode 100644 index e6e1f199ea68..000000000000 --- a/drivers/staging/wlags49_h25/wl_cs.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_cs.c" diff --git a/drivers/staging/wlags49_h25/wl_cs.h b/drivers/staging/wlags49_h25/wl_cs.h deleted file mode 100644 index 657acee525cb..000000000000 --- a/drivers/staging/wlags49_h25/wl_cs.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_cs.h" diff --git a/drivers/staging/wlags49_h25/wl_enc.c b/drivers/staging/wlags49_h25/wl_enc.c deleted file mode 100644 index fe59df145150..000000000000 --- a/drivers/staging/wlags49_h25/wl_enc.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_enc.c" diff --git a/drivers/staging/wlags49_h25/wl_enc.h b/drivers/staging/wlags49_h25/wl_enc.h deleted file mode 100644 index f2e860e14be9..000000000000 --- a/drivers/staging/wlags49_h25/wl_enc.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_enc.h" diff --git a/drivers/staging/wlags49_h25/wl_if.h b/drivers/staging/wlags49_h25/wl_if.h deleted file mode 100644 index 70d86f09f87a..000000000000 --- a/drivers/staging/wlags49_h25/wl_if.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_if.h" diff --git a/drivers/staging/wlags49_h25/wl_internal.h b/drivers/staging/wlags49_h25/wl_internal.h deleted file mode 100644 index c1687a3056cd..000000000000 --- a/drivers/staging/wlags49_h25/wl_internal.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_internal.h" diff --git a/drivers/staging/wlags49_h25/wl_main.c b/drivers/staging/wlags49_h25/wl_main.c deleted file mode 100644 index d2c06ad8f88a..000000000000 --- a/drivers/staging/wlags49_h25/wl_main.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_main.c" diff --git a/drivers/staging/wlags49_h25/wl_main.h b/drivers/staging/wlags49_h25/wl_main.h deleted file mode 100644 index c98376e71957..000000000000 --- a/drivers/staging/wlags49_h25/wl_main.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_main.h" diff --git a/drivers/staging/wlags49_h25/wl_netdev.c b/drivers/staging/wlags49_h25/wl_netdev.c deleted file mode 100644 index f7512c3891a8..000000000000 --- a/drivers/staging/wlags49_h25/wl_netdev.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_netdev.c" diff --git a/drivers/staging/wlags49_h25/wl_netdev.h b/drivers/staging/wlags49_h25/wl_netdev.h deleted file mode 100644 index 519cd5f0461c..000000000000 --- a/drivers/staging/wlags49_h25/wl_netdev.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_netdev.h" diff --git a/drivers/staging/wlags49_h25/wl_priv.c b/drivers/staging/wlags49_h25/wl_priv.c deleted file mode 100644 index 160c8014051a..000000000000 --- a/drivers/staging/wlags49_h25/wl_priv.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_priv.c" diff --git a/drivers/staging/wlags49_h25/wl_priv.h b/drivers/staging/wlags49_h25/wl_priv.h deleted file mode 100644 index 28492b362db4..000000000000 --- a/drivers/staging/wlags49_h25/wl_priv.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_priv.h" diff --git a/drivers/staging/wlags49_h25/wl_profile.c b/drivers/staging/wlags49_h25/wl_profile.c deleted file mode 100644 index 6baa201c132a..000000000000 --- a/drivers/staging/wlags49_h25/wl_profile.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_profile.c" diff --git a/drivers/staging/wlags49_h25/wl_profile.h b/drivers/staging/wlags49_h25/wl_profile.h deleted file mode 100644 index 5f253a5fb60e..000000000000 --- a/drivers/staging/wlags49_h25/wl_profile.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_profile.h" diff --git a/drivers/staging/wlags49_h25/wl_util.c b/drivers/staging/wlags49_h25/wl_util.c deleted file mode 100644 index 771bebeeac4c..000000000000 --- a/drivers/staging/wlags49_h25/wl_util.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_util.c" diff --git a/drivers/staging/wlags49_h25/wl_util.h b/drivers/staging/wlags49_h25/wl_util.h deleted file mode 100644 index ccd74e73a4be..000000000000 --- a/drivers/staging/wlags49_h25/wl_util.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_util.h" diff --git a/drivers/staging/wlags49_h25/wl_version.h b/drivers/staging/wlags49_h25/wl_version.h deleted file mode 100644 index ad38e8f7214c..000000000000 --- a/drivers/staging/wlags49_h25/wl_version.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_version.h" diff --git a/drivers/staging/wlags49_h25/wl_wext.c b/drivers/staging/wlags49_h25/wl_wext.c deleted file mode 100644 index f660e791b620..000000000000 --- a/drivers/staging/wlags49_h25/wl_wext.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_wext.c" diff --git a/drivers/staging/wlags49_h25/wl_wext.h b/drivers/staging/wlags49_h25/wl_wext.h deleted file mode 100644 index 31d63865c222..000000000000 --- a/drivers/staging/wlags49_h25/wl_wext.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Use common source from wlags49_h2 */ -#include "../wlags49_h2/wl_wext.h" -- cgit From 929b2d483d9a3dc5680e83e444cb99061d57d547 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Tue, 1 Jul 2014 00:50:55 +0300 Subject: staging: serqt_usb2: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the driver as it hasn't been cleaned up and it doesn't look like anyone is going to work on it anymore. This can be reverted if someone wants to work to fix the remaining issues the driver has. Signed-off-by: Kristina MartÅ¡enko Cc: Bill Pemberton Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/serqt_usb2/Kconfig | 9 - drivers/staging/serqt_usb2/Makefile | 1 - drivers/staging/serqt_usb2/serqt_usb2.c | 1528 ------------------------------- 5 files changed, 1541 deletions(-) delete mode 100644 drivers/staging/serqt_usb2/Kconfig delete mode 100644 drivers/staging/serqt_usb2/Makefile delete mode 100644 drivers/staging/serqt_usb2/serqt_usb2.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index ba76ab17902b..85dde86e8965 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -64,8 +64,6 @@ source "drivers/staging/octeon/Kconfig" source "drivers/staging/octeon-usb/Kconfig" -source "drivers/staging/serqt_usb2/Kconfig" - source "drivers/staging/vt6655/Kconfig" source "drivers/staging/vt6656/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 22bb98e46d36..59e5e0968a1a 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -23,7 +23,6 @@ obj-$(CONFIG_TRANZPORT) += frontier/ obj-$(CONFIG_IDE_PHISON) += phison/ obj-$(CONFIG_LINE6_USB) += line6/ obj-$(CONFIG_NETLOGIC_XLR_NET) += netlogic/ -obj-$(CONFIG_USB_SERIAL_QUATECH2) += serqt_usb2/ obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ obj-$(CONFIG_OCTEON_USB) += octeon-usb/ obj-$(CONFIG_VT6655) += vt6655/ diff --git a/drivers/staging/serqt_usb2/Kconfig b/drivers/staging/serqt_usb2/Kconfig deleted file mode 100644 index f4fed40e23dd..000000000000 --- a/drivers/staging/serqt_usb2/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -config USB_SERIAL_QUATECH2 - tristate "USB Quatech ESU-100 8 Port Serial Driver" - depends on USB_SERIAL - help - Say Y here if you want to use the Quatech ESU-100 8 port usb to - serial adapter. - - To compile this driver as a module, choose M here: the - module will be called serqt_usb2. diff --git a/drivers/staging/serqt_usb2/Makefile b/drivers/staging/serqt_usb2/Makefile deleted file mode 100644 index 21578617f7e8..000000000000 --- a/drivers/staging/serqt_usb2/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_USB_SERIAL_QUATECH2) += serqt_usb2.o diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c deleted file mode 100644 index 999757de8fd5..000000000000 --- a/drivers/staging/serqt_usb2/serqt_usb2.c +++ /dev/null @@ -1,1528 +0,0 @@ -/* - * This code was developed for the Quatech USB line for linux, it used - * much of the code developed by Greg Kroah-Hartman for USB serial devices - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Version Information */ -#define DRIVER_VERSION "v2.14" -#define DRIVER_AUTHOR "Tim Gobeli, Quatech, Inc" -#define DRIVER_DESC "Quatech USB to Serial Driver" - -#define USB_VENDOR_ID_QUATECH 0x061d /* Quatech VID */ -#define QUATECH_SSU200 0xC030 /* SSU200 */ -#define QUATECH_DSU100 0xC040 /* DSU100 */ -#define QUATECH_DSU200 0xC050 /* DSU200 */ -#define QUATECH_QSU100 0xC060 /* QSU100 */ -#define QUATECH_QSU200 0xC070 /* QSU200 */ -#define QUATECH_ESU100A 0xC080 /* ESU100A */ -#define QUATECH_ESU100B 0xC081 /* ESU100B */ -#define QUATECH_ESU200A 0xC0A0 /* ESU200A */ -#define QUATECH_ESU200B 0xC0A1 /* ESU200B */ -#define QUATECH_HSU100A 0xC090 /* HSU100A */ -#define QUATECH_HSU100B 0xC091 /* HSU100B */ -#define QUATECH_HSU100C 0xC092 /* HSU100C */ -#define QUATECH_HSU100D 0xC093 /* HSU100D */ -#define QUATECH_HSU200A 0xC0B0 /* HSU200A */ -#define QUATECH_HSU200B 0xC0B1 /* HSU200B */ -#define QUATECH_HSU200C 0xC0B2 /* HSU200C */ -#define QUATECH_HSU200D 0xC0B3 /* HSU200D */ - -#define QT_SET_GET_DEVICE 0xc2 -#define QT_OPEN_CLOSE_CHANNEL 0xca -#define QT_GET_SET_PREBUF_TRIG_LVL 0xcc -#define QT_SET_ATF 0xcd -#define QT_GET_SET_REGISTER 0xc0 -#define QT_GET_SET_UART 0xc1 -#define QT_HW_FLOW_CONTROL_MASK 0xc5 -#define QT_SW_FLOW_CONTROL_MASK 0xc6 -#define QT_SW_FLOW_CONTROL_DISABLE 0xc7 -#define QT_BREAK_CONTROL 0xc8 - -#define USBD_TRANSFER_DIRECTION_IN 0xc0 -#define USBD_TRANSFER_DIRECTION_OUT 0x40 - -#define MAX_BAUD_RATE 460800 -#define MAX_BAUD_REMAINDER 4608 - -#define DIV_LATCH_LS 0x00 -#define XMT_HOLD_REGISTER 0x00 -#define XVR_BUFFER_REGISTER 0x00 -#define DIV_LATCH_MS 0x01 -#define FIFO_CONTROL_REGISTER 0x02 -#define LINE_CONTROL_REGISTER 0x03 -#define MODEM_CONTROL_REGISTER 0x04 -#define LINE_STATUS_REGISTER 0x05 -#define MODEM_STATUS_REGISTER 0x06 - -#define SERIAL_MCR_DTR 0x01 -#define SERIAL_MCR_RTS 0x02 -#define SERIAL_MCR_LOOP 0x10 - -#define SERIAL_MSR_CTS 0x10 -#define SERIAL_MSR_CD 0x80 -#define SERIAL_MSR_RI 0x40 -#define SERIAL_MSR_DSR 0x20 -#define SERIAL_MSR_MASK 0xf0 - -#define SERIAL_8_DATA 0x03 -#define SERIAL_7_DATA 0x02 -#define SERIAL_6_DATA 0x01 -#define SERIAL_5_DATA 0x00 - -#define SERIAL_ODD_PARITY 0X08 -#define SERIAL_EVEN_PARITY 0X18 -#define SERIAL_TWO_STOPB 0x04 -#define SERIAL_ONE_STOPB 0x00 - -#define DEFAULT_DIVISOR 0x30 /* gives 9600 baud rate */ -#define DEFAULT_LCR SERIAL_8_DATA /* 8, none , 1 */ - -#define FULLPWRBIT 0x00000080 -#define NEXT_BOARD_POWER_BIT 0x00000004 - -#define SERIAL_LSR_OE 0x02 -#define SERIAL_LSR_PE 0x04 -#define SERIAL_LSR_FE 0x08 -#define SERIAL_LSR_BI 0x10 - -#define SERIAL_MSR_CTS 0x10 -#define SERIAL_MSR_CD 0x80 -#define SERIAL_MSR_RI 0x40 -#define SERIAL_MSR_DSR 0x20 -#define SERIAL_MSR_MASK 0xf0 - -#define PREFUFF_LEVEL_CONSERVATIVE 128 -#define ATC_DISABLED 0x0 - -#define RR_BITS 0x03 /* for clearing clock bits */ -#define DUPMODE_BITS 0xc0 -#define CLKS_X4 0x02 - -#define LOOPMODE_BITS 0x41 /* LOOP1 = b6, LOOP0 = b0 (PORT B) */ -#define ALL_LOOPBACK 0x01 -#define MODEM_CTRL 0x40 -#define RS232_MODE 0x00 - -static const struct usb_device_id id_table[] = { - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU200)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU100)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU200)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU100)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU200)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU100A)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU100B)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU200A)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU200B)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU100A)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU100B)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU100C)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU100D)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200A)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200B)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200C)}, - {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_HSU200D)}, - {} /* Terminating entry */ -}; -MODULE_DEVICE_TABLE(usb, id_table); - -struct qt_get_device_data { - __u8 porta; - __u8 portb; - __u8 portc; -}; - -struct qt_open_channel_data { - __u8 line_status; - __u8 modem_status; -}; - -struct quatech_port { - int port_num; /* number of the port */ - struct urb *write_urb; /* write URB for this port */ - struct urb *read_urb; /* read URB for this port */ - struct urb *int_urb; - - __u8 shadow_lcr; /* last LCR value received */ - __u8 shadow_mcr; /* last MCR value received */ - __u8 shadow_msr; /* last MSR value received */ - __u8 shadow_lsr; /* last LSR value received */ - char open_ports; - - /* Used for TIOCMIWAIT */ - wait_queue_head_t msr_wait; - char prev_status, diff_status; - - wait_queue_head_t wait; - - struct async_icount icount; - - struct usb_serial_port *port; /* owner of this object */ - struct qt_get_device_data device_data; - struct mutex lock; - bool read_urb_busy; - int rx_holding; - int read_bulk_stopped; - char close_pending; -}; - -static int port_paranoia_check(struct usb_serial_port *port, - const char *function) -{ - if (!port) { - pr_debug("%s - port == NULL", function); - return -1; - } - if (!port->serial) { - pr_debug("%s - port->serial == NULL\n", function); - return -1; - } - - return 0; -} - -static int serial_paranoia_check(struct usb_serial *serial, - const char *function) -{ - if (!serial) { - pr_debug("%s - serial == NULL\n", function); - return -1; - } - - if (!serial->type) { - pr_debug("%s - serial->type == NULL!", function); - return -1; - } - - return 0; -} - -static inline struct quatech_port *qt_get_port_private(struct usb_serial_port - *port) -{ - return (struct quatech_port *)usb_get_serial_port_data(port); -} - -static inline void qt_set_port_private(struct usb_serial_port *port, - struct quatech_port *data) -{ - usb_set_serial_port_data(port, (void *)data); -} - -static struct usb_serial *get_usb_serial(struct usb_serial_port *port, - const char *function) -{ - /* if no port was specified, or it fails a paranoia check */ - if (!port || - port_paranoia_check(port, function) || - serial_paranoia_check(port->serial, function)) { - /* - * then say that we dont have a valid usb_serial thing, - * which will end up genrating -ENODEV return values - */ - return NULL; - } - - return port->serial; -} - -static void process_line_status(struct quatech_port *qt_port, - unsigned char line_status) -{ - - qt_port->shadow_lsr = - line_status & (SERIAL_LSR_OE | SERIAL_LSR_PE | SERIAL_LSR_FE | - SERIAL_LSR_BI); -} - -static void process_modem_status(struct quatech_port *qt_port, - unsigned char modem_status) -{ - - qt_port->shadow_msr = modem_status; - wake_up_interruptible(&qt_port->wait); -} - -static void process_rx_char(struct usb_serial_port *port, unsigned char data) -{ - struct urb *urb = port->read_urb; - - if (urb->actual_length) - tty_insert_flip_char(&port->port, data, TTY_NORMAL); -} - -static void qt_write_bulk_callback(struct urb *urb) -{ - int status; - struct quatech_port *quatech_port; - - status = urb->status; - - if (status) { - dev_dbg(&urb->dev->dev, - "nonzero write bulk status received:%d\n", status); - return; - } - - quatech_port = urb->context; - - tty_port_tty_wakeup(&quatech_port->port->port); -} - -static void qt_interrupt_callback(struct urb *urb) -{ - /* FIXME */ -} - -static void qt_status_change_check(struct urb *urb, - struct quatech_port *qt_port, - struct usb_serial_port *port) -{ - int flag, i; - unsigned char *data = urb->transfer_buffer; - unsigned int rx_count = urb->actual_length; - - for (i = 0; i < rx_count; ++i) { - /* Look ahead code here */ - if ((i <= (rx_count - 3)) && (data[i] == 0x1b) - && (data[i + 1] == 0x1b)) { - flag = 0; - switch (data[i + 2]) { - case 0x00: - if (i > (rx_count - 4)) { - dev_dbg(&port->dev, - "Illegal escape seuences in received data\n"); - break; - } - - process_line_status(qt_port, data[i + 3]); - - i += 3; - flag = 1; - break; - - case 0x01: - if (i > (rx_count - 4)) { - dev_dbg(&port->dev, - "Illegal escape seuences in received data\n"); - break; - } - - process_modem_status(qt_port, data[i + 3]); - - i += 3; - flag = 1; - break; - - case 0xff: - dev_dbg(&port->dev, "No status sequence.\n"); - - process_rx_char(port, data[i]); - process_rx_char(port, data[i + 1]); - - i += 2; - break; - } - if (flag == 1) - continue; - } - - if (urb->actual_length) - tty_insert_flip_char(&port->port, data[i], TTY_NORMAL); - - } - tty_flip_buffer_push(&port->port); -} - -static void qt_read_bulk_callback(struct urb *urb) -{ - - struct usb_serial_port *port = urb->context; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port = qt_get_port_private(port); - int result; - - if (urb->status) { - qt_port->read_bulk_stopped = 1; - dev_dbg(&urb->dev->dev, - "%s - nonzero write bulk status received: %d\n", - __func__, urb->status); - return; - } - - dev_dbg(&port->dev, - "%s - port->rx_holding = %d\n", __func__, qt_port->rx_holding); - - if (port_paranoia_check(port, __func__) != 0) { - qt_port->read_bulk_stopped = 1; - return; - } - - if (!serial) - return; - - if (qt_port->close_pending == 1) { - /* Were closing , stop reading */ - dev_dbg(&port->dev, - "%s - (qt_port->close_pending == 1\n", __func__); - qt_port->read_bulk_stopped = 1; - return; - } - - /* - * rx_holding is asserted by throttle, if we assert it, we're not - * receiving any more characters and let the box handle the flow - * control - */ - if (qt_port->rx_holding == 1) { - qt_port->read_bulk_stopped = 1; - return; - } - - if (urb->status) { - qt_port->read_bulk_stopped = 1; - - dev_dbg(&port->dev, - "%s - nonzero read bulk status received: %d\n", - __func__, urb->status); - return; - } - - if (urb->actual_length) - qt_status_change_check(urb, qt_port, port); - - /* Continue trying to always read */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, - port->bulk_in_endpointAddress), - port->read_urb->transfer_buffer, - port->read_urb->transfer_buffer_length, - qt_read_bulk_callback, port); - result = usb_submit_urb(port->read_urb, GFP_ATOMIC); - if (result) - dev_dbg(&port->dev, - "%s - failed resubmitting read urb, error %d", - __func__, result); - else { - if (urb->actual_length) { - tty_flip_buffer_push(&port->port); - tty_schedule_flip(&port->port); - } - } - - schedule_work(&port->work); -} - -/* - * qt_get_device - * Issue a GET_DEVICE vendor-specific request on the default control pipe If - * successful, fills in the qt_get_device_data structure pointed to by - * device_data, otherwise return a negative error number of the problem. - */ - -static int qt_get_device(struct usb_serial *serial, - struct qt_get_device_data *device_data) -{ - int result; - unsigned char *transfer_buffer; - - transfer_buffer = - kmalloc(sizeof(struct qt_get_device_data), GFP_KERNEL); - if (!transfer_buffer) - return -ENOMEM; - - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - QT_SET_GET_DEVICE, 0xc0, 0, 0, - transfer_buffer, - sizeof(struct qt_get_device_data), 300); - if (result > 0) - memcpy(device_data, transfer_buffer, - sizeof(struct qt_get_device_data)); - kfree(transfer_buffer); - - return result; -} - -/**************************************************************************** - * box_set_prebuffer_level - TELLS BOX WHEN TO ASSERT FLOW CONTROL - ****************************************************************************/ -static int box_set_prebuffer_level(struct usb_serial *serial) -{ - int result; - __u16 buffer_length; - - buffer_length = PREFUFF_LEVEL_CONSERVATIVE; - result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_GET_SET_PREBUF_TRIG_LVL, 0x40, - buffer_length, 0, NULL, 0, 300); - return result; -} - -/**************************************************************************** - * box_set_atc - TELLS BOX WHEN TO ASSERT automatic transmitter control - ****************************************************************************/ -static int box_set_atc(struct usb_serial *serial, __u16 n_mode) -{ - int result; - __u16 buffer_length; - - buffer_length = PREFUFF_LEVEL_CONSERVATIVE; - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_SET_ATF, 0x40, n_mode, 0, NULL, 0, 300); - - return result; -} - -/** - * qt_set_device - * Issue a SET_DEVICE vendor-specific request on the default control pipe If - * successful returns the number of bytes written, otherwise it returns a - * negative error number of the problem. - */ -static int qt_set_device(struct usb_serial *serial, - struct qt_get_device_data *device_data) -{ - int result; - __u16 length; - __u16 port_settings; - - port_settings = ((__u16) (device_data->portb)); - port_settings = (port_settings << 8); - port_settings += ((__u16) (device_data->porta)); - - length = sizeof(struct qt_get_device_data); - - result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_SET_GET_DEVICE, 0x40, port_settings, - 0, NULL, 0, 300); - return result; -} - -static int qt_open_channel(struct usb_serial *serial, __u16 uart_num, - struct qt_open_channel_data *pdevice_data) -{ - int result; - - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - QT_OPEN_CLOSE_CHANNEL, - USBD_TRANSFER_DIRECTION_IN, 1, uart_num, - pdevice_data, - sizeof(struct qt_open_channel_data), 300); - - return result; - -} - -static int qt_close_channel(struct usb_serial *serial, __u16 uart_num) -{ - int result; - - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - QT_OPEN_CLOSE_CHANNEL, - USBD_TRANSFER_DIRECTION_OUT, 0, uart_num, - NULL, 0, 300); - - return result; - -} - -/**************************************************************************** -* box_get_register -* issuse a GET_REGISTER vendor-spcific request on the default control pipe -* If successful, fills in the p_value with the register value asked for -****************************************************************************/ -static int box_get_register(struct usb_serial *serial, unsigned short uart_num, - unsigned short register_num, __u8 *p_value) -{ - int result; - __u16 current_length; - - current_length = sizeof(struct qt_get_device_data); - - result = - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - QT_GET_SET_REGISTER, 0xC0, register_num, - uart_num, (void *)p_value, sizeof(*p_value), 300); - - return result; -} - -/**************************************************************************** -* box_set_register -* issuse a GET_REGISTER vendor-spcific request on the default control pipe -* If successful, fills in the p_value with the register value asked for -****************************************************************************/ -static int box_set_register(struct usb_serial *serial, unsigned short uart_num, - unsigned short register_num, unsigned short value) -{ - int result; - unsigned short reg_and_byte; - - reg_and_byte = value; - reg_and_byte = reg_and_byte << 8; - reg_and_byte = reg_and_byte + register_num; - -/* - result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_GET_SET_REGISTER, 0xC0, register_num, - uart_num, NULL, 0, 300); -*/ - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_GET_SET_REGISTER, 0x40, reg_and_byte, uart_num, - NULL, 0, 300); - - return result; -} - -/* - * qt_setuart - * issues a SET_UART vendor-specific request on the default control pipe - * If successful sets baud rate divisor and LCR value - */ -static int qt_setuart(struct usb_serial *serial, unsigned short uart_num, - unsigned short default_divisor, unsigned char default_lcr) -{ - int result; - unsigned short uart_num_and_lcr; - - uart_num_and_lcr = (default_lcr << 8) + uart_num; - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_GET_SET_UART, 0x40, default_divisor, - uart_num_and_lcr, NULL, 0, 300); - - return result; -} - -static int box_set_hw_flow_ctrl(struct usb_serial *serial, unsigned int index, - int b_set) -{ - __u8 mcr = 0; - __u8 msr = 0, mout_value = 0; - unsigned int status; - - if (b_set == 1) { - /* flow control, box will clear RTS line to prevent remote */ - mcr = SERIAL_MCR_RTS; - } /* device from xmitting more chars */ - else { - /* no flow control to remote device */ - mcr = 0; - - } - mout_value = mcr << 8; - - if (b_set == 1) { - /* flow control, box will inhibit xmit data if CTS line is - * asserted */ - msr = SERIAL_MSR_CTS; - } else { - /* Box will not inhimbe xmit data due to CTS line */ - msr = 0; - } - mout_value |= msr; - - status = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_HW_FLOW_CONTROL_MASK, 0x40, mout_value, - index, NULL, 0, 300); - return status; - -} - -static int box_set_sw_flow_ctrl(struct usb_serial *serial, __u16 index, - unsigned char stop_char, unsigned char start_char) -{ - __u16 n_sw_flow_out; - int result; - - n_sw_flow_out = start_char << 8; - n_sw_flow_out = (unsigned short)stop_char; - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_SW_FLOW_CONTROL_MASK, 0x40, n_sw_flow_out, - index, NULL, 0, 300); - return result; - -} - -static int box_disable_sw_flow_ctrl(struct usb_serial *serial, __u16 index) -{ - int result; - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_SW_FLOW_CONTROL_DISABLE, 0x40, 0, index, - NULL, 0, 300); - return result; - -} - -static int qt_startup(struct usb_serial *serial) -{ - struct device *dev = &serial->dev->dev; - struct usb_serial_port *port; - struct quatech_port *qt_port; - struct qt_get_device_data device_data; - int i; - int status; - - /* Now setup per port private data */ - for (i = 0; i < serial->num_ports; i++) { - port = serial->port[i]; - qt_port = kzalloc(sizeof(*qt_port), GFP_KERNEL); - if (!qt_port) { - for (--i; i >= 0; i--) { - port = serial->port[i]; - kfree(usb_get_serial_port_data(port)); - usb_set_serial_port_data(port, NULL); - } - return -ENOMEM; - } - mutex_init(&qt_port->lock); - - usb_set_serial_port_data(port, qt_port); - - } - - status = qt_get_device(serial, &device_data); - if (status < 0) - goto startup_error; - - dev_dbg(dev, "device_data.portb = 0x%x\n", device_data.portb); - - device_data.portb &= ~FULLPWRBIT; - dev_dbg(dev, "Changing device_data.portb to 0x%x\n", device_data.portb); - - status = qt_set_device(serial, &device_data); - if (status < 0) { - dev_dbg(dev, "qt_set_device failed\n"); - goto startup_error; - } - - status = qt_get_device(serial, &device_data); - if (status < 0) { - dev_dbg(dev, "qt_get_device failed\n"); - goto startup_error; - } - - switch (le16_to_cpu(serial->dev->descriptor.idProduct)) { - case QUATECH_DSU100: - case QUATECH_QSU100: - case QUATECH_ESU100A: - case QUATECH_ESU100B: - case QUATECH_HSU100A: - case QUATECH_HSU100B: - case QUATECH_HSU100C: - case QUATECH_HSU100D: - device_data.porta &= ~(RR_BITS | DUPMODE_BITS); - device_data.porta |= CLKS_X4; - device_data.portb &= ~(LOOPMODE_BITS); - device_data.portb |= RS232_MODE; - break; - - case QUATECH_SSU200: - case QUATECH_DSU200: - case QUATECH_QSU200: - case QUATECH_ESU200A: - case QUATECH_ESU200B: - case QUATECH_HSU200A: - case QUATECH_HSU200B: - case QUATECH_HSU200C: - case QUATECH_HSU200D: - device_data.porta &= ~(RR_BITS | DUPMODE_BITS); - device_data.porta |= CLKS_X4; - device_data.portb &= ~(LOOPMODE_BITS); - device_data.portb |= ALL_LOOPBACK; - break; - default: - device_data.porta &= ~(RR_BITS | DUPMODE_BITS); - device_data.porta |= CLKS_X4; - device_data.portb &= ~(LOOPMODE_BITS); - device_data.portb |= RS232_MODE; - break; - - } - - status = box_set_prebuffer_level(serial); /* sets to - * default value - */ - if (status < 0) { - dev_dbg(dev, "box_set_prebuffer_level failed\n"); - goto startup_error; - } - - status = box_set_atc(serial, ATC_DISABLED); - if (status < 0) { - dev_dbg(dev, "box_set_atc failed\n"); - goto startup_error; - } - - dev_dbg(dev, "device_data.portb = 0x%x\n", device_data.portb); - - device_data.portb |= NEXT_BOARD_POWER_BIT; - dev_dbg(dev, "Changing device_data.portb to 0x%x\n", device_data.portb); - - status = qt_set_device(serial, &device_data); - if (status < 0) { - dev_dbg(dev, "qt_set_device failed\n"); - goto startup_error; - } - - return 0; - -startup_error: - for (i = 0; i < serial->num_ports; i++) { - port = serial->port[i]; - qt_port = qt_get_port_private(port); - kfree(qt_port); - usb_set_serial_port_data(port, NULL); - } - - return -EIO; -} - -static void qt_release(struct usb_serial *serial) -{ - struct usb_serial_port *port; - struct quatech_port *qt_port; - int i; - - for (i = 0; i < serial->num_ports; i++) { - port = serial->port[i]; - if (!port) - continue; - - qt_port = usb_get_serial_port_data(port); - kfree(qt_port); - usb_set_serial_port_data(port, NULL); - } - -} - -static void qt_submit_urb_from_open(struct usb_serial *serial, - struct usb_serial_port *port) -{ - int result; - struct usb_serial_port *port0 = serial->port[0]; - - /* set up interrupt urb */ - usb_fill_int_urb(port0->interrupt_in_urb, - serial->dev, - usb_rcvintpipe(serial->dev, - port0->interrupt_in_endpointAddress), - port0->interrupt_in_buffer, - port0->interrupt_in_urb->transfer_buffer_length, - qt_interrupt_callback, serial, - port0->interrupt_in_urb->interval); - - result = usb_submit_urb(port0->interrupt_in_urb, - GFP_KERNEL); - if (result) { - dev_err(&port->dev, - "%s - Error %d submitting interrupt urb\n", - __func__, result); - } -} - -static int qt_open(struct tty_struct *tty, - struct usb_serial_port *port) -{ - struct usb_serial *serial; - struct quatech_port *quatech_port; - struct quatech_port *port0; - struct qt_open_channel_data channel_data; - - int result; - - if (port_paranoia_check(port, __func__)) - return -ENODEV; - - serial = port->serial; - - if (serial_paranoia_check(serial, __func__)) - return -ENODEV; - - quatech_port = qt_get_port_private(port); - port0 = qt_get_port_private(serial->port[0]); - - if (quatech_port == NULL || port0 == NULL) - return -ENODEV; - - usb_clear_halt(serial->dev, port->write_urb->pipe); - usb_clear_halt(serial->dev, port->read_urb->pipe); - port0->open_ports++; - - result = qt_get_device(serial, &port0->device_data); - - /* Port specific setups */ - result = qt_open_channel(serial, port->port_number, &channel_data); - if (result < 0) { - dev_dbg(&port->dev, "qt_open_channel failed\n"); - return result; - } - dev_dbg(&port->dev, "qt_open_channel completed.\n"); - -/* FIXME: are these needed? Does it even do anything useful? */ - quatech_port->shadow_lsr = channel_data.line_status & - (SERIAL_LSR_OE | SERIAL_LSR_PE | SERIAL_LSR_FE | SERIAL_LSR_BI); - - quatech_port->shadow_msr = channel_data.modem_status & - (SERIAL_MSR_CTS | SERIAL_MSR_DSR | SERIAL_MSR_RI | SERIAL_MSR_CD); - - /* Set Baud rate to default and turn off (default)flow control here */ - result = qt_setuart(serial, port->port_number, DEFAULT_DIVISOR, - DEFAULT_LCR); - if (result < 0) { - dev_dbg(&port->dev, "qt_setuart failed\n"); - return result; - } - dev_dbg(&port->dev, "qt_setuart completed.\n"); - - /* - * Put this here to make it responsive to stty and defaults set by - * the tty layer - */ - - /* Check to see if we've set up our endpoint info yet */ - if (port0->open_ports == 1) { - if (serial->port[0]->interrupt_in_buffer == NULL) - qt_submit_urb_from_open(serial, port); - } - - dev_dbg(&port->dev, "minor number is %d\n", port->minor); - dev_dbg(&port->dev, - "Bulkin endpoint is %d\n", port->bulk_in_endpointAddress); - dev_dbg(&port->dev, - "BulkOut endpoint is %d\n", port->bulk_out_endpointAddress); - dev_dbg(&port->dev, "Interrupt endpoint is %d\n", - port->interrupt_in_endpointAddress); - dev_dbg(&port->dev, "port's number in the device is %d\n", - quatech_port->port_num); - quatech_port->read_urb = port->read_urb; - - /* set up our bulk in urb */ - - usb_fill_bulk_urb(quatech_port->read_urb, - serial->dev, - usb_rcvbulkpipe(serial->dev, - port->bulk_in_endpointAddress), - port->bulk_in_buffer, - quatech_port->read_urb->transfer_buffer_length, - qt_read_bulk_callback, quatech_port); - - dev_dbg(&port->dev, "qt_open: bulkin endpoint is %d\n", - port->bulk_in_endpointAddress); - quatech_port->read_urb_busy = true; - result = usb_submit_urb(quatech_port->read_urb, GFP_KERNEL); - if (result) { - dev_err(&port->dev, - "%s - Error %d submitting control urb\n", - __func__, result); - quatech_port->read_urb_busy = false; - } - - /* initialize our wait queues */ - init_waitqueue_head(&quatech_port->wait); - init_waitqueue_head(&quatech_port->msr_wait); - - /* initialize our icount structure */ - memset(&(quatech_port->icount), 0x00, sizeof(quatech_port->icount)); - - return 0; - -} - -static int qt_chars_in_buffer(struct tty_struct *tty) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial; - int chars = 0; - - serial = get_usb_serial(port, __func__); - - if (serial->num_bulk_out) { - if (port->write_urb->status == -EINPROGRESS) - chars = port->write_urb->transfer_buffer_length; - } - - return chars; -} - -static void qt_block_until_empty(struct tty_struct *tty, - struct quatech_port *qt_port) -{ - int timeout = HZ / 10; - int wait = 30; - - /* returns if we get a signal, an error, or the buffer is empty */ - while (wait_event_interruptible_timeout(qt_port->wait, - qt_chars_in_buffer(tty) <= 0, - timeout) == 0) { - wait--; - if (wait == 0) { - dev_dbg(&qt_port->port->dev, "%s - TIMEOUT", __func__); - return; - } - wait = 30; - } -} - -static void qt_close(struct usb_serial_port *port) -{ - struct usb_serial *serial = port->serial; - struct tty_struct *tty = tty_port_tty_get(&port->port); - unsigned int index = port->port_number; - struct quatech_port *qt_port = qt_get_port_private(port); - struct quatech_port *port0 = qt_get_port_private(serial->port[0]); - - /* shutdown any bulk reads that might be going on */ - if (serial->num_bulk_out) - usb_unlink_urb(port->write_urb); - if (serial->num_bulk_in) - usb_unlink_urb(port->read_urb); - - /* wait up to for transmitter to empty */ - if (serial->dev) - qt_block_until_empty(tty, qt_port); - tty_kref_put(tty); - - /* Close uart channel */ - if (qt_close_channel(serial, index) < 0) - dev_dbg(&port->dev, "%s - qt_close_channel failed.\n", - __func__); - - port0->open_ports--; - - dev_dbg(&port->dev, "qt_num_open_ports in close%d\n", - port0->open_ports); - - if (port0->open_ports == 0) { - if (serial->port[0]->interrupt_in_urb) { - dev_dbg(&port->dev, "Shutdown interrupt_in_urb\n"); - usb_kill_urb(serial->port[0]->interrupt_in_urb); - } - - } - - if (qt_port->write_urb) { - /* if this urb had a transfer buffer already (old tx) free it */ - kfree(qt_port->write_urb->transfer_buffer); - usb_free_urb(qt_port->write_urb); - } - -} - -static int qt_write(struct tty_struct *tty, struct usb_serial_port *port, - const unsigned char *buf, int count) -{ - int result; - struct usb_serial *serial = get_usb_serial(port, __func__); - - if (serial == NULL) - return -ENODEV; - - if (count == 0) { - dev_dbg(&port->dev, - "%s - write request of 0 bytes\n", __func__); - return 0; - } - - /* only do something if we have a bulk out endpoint */ - if (serial->num_bulk_out) { - if (port->write_urb->status == -EINPROGRESS) { - dev_dbg(&port->dev, "%s - already writing\n", __func__); - return 0; - } - - count = - (count > port->bulk_out_size) ? port->bulk_out_size : count; - memcpy(port->write_urb->transfer_buffer, buf, count); - - /* set up our urb */ - - usb_fill_bulk_urb(port->write_urb, serial->dev, - usb_sndbulkpipe(serial->dev, - port-> - bulk_out_endpointAddress), - port->write_urb->transfer_buffer, count, - qt_write_bulk_callback, port); - - /* send the data out the bulk port */ - result = usb_submit_urb(port->write_urb, GFP_ATOMIC); - if (result) - dev_dbg(&port->dev, - "%s - failed submitting write urb, error %d\n", - __func__, result); - else - result = count; - - return result; - } - - /* no bulk out, so return 0 bytes written */ - return 0; -} - -static int qt_write_room(struct tty_struct *tty) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial; - struct quatech_port *qt_port; - - int retval = -EINVAL; - - if (port_paranoia_check(port, __func__)) - return -1; - - serial = get_usb_serial(port, __func__); - - if (!serial) - return -ENODEV; - - qt_port = qt_get_port_private(port); - - mutex_lock(&qt_port->lock); - - if (serial->num_bulk_out) { - if (port->write_urb->status != -EINPROGRESS) - retval = port->bulk_out_size; - } - - mutex_unlock(&qt_port->lock); - return retval; - -} - -static int qt_ioctl(struct tty_struct *tty, - unsigned int cmd, unsigned long arg) -{ - struct usb_serial_port *port = tty->driver_data; - struct quatech_port *qt_port = qt_get_port_private(port); - unsigned int index; - char diff; - - dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd); - - index = port->port_number; - - if (cmd == TIOCMIWAIT) { - while (qt_port != NULL) { -#if 0 - /* this never wakes up */ - interruptible_sleep_on(&qt_port->msr_wait); -#endif - if (signal_pending(current)) - return -ERESTARTSYS; - - diff = qt_port->diff_status; - - if (diff == 0) - return -EIO; /* no change => error */ - - /* Consume all events */ - qt_port->diff_status = 0; - - if (((arg & TIOCM_RNG) - && (diff & SERIAL_MSR_RI)) - || ((arg & TIOCM_DSR) - && (diff & SERIAL_MSR_DSR)) - || ((arg & TIOCM_CD) - && (diff & SERIAL_MSR_CD)) - || ((arg & TIOCM_CTS) - && (diff & SERIAL_MSR_CTS))) { - return 0; - } - } - return 0; - } - - dev_dbg(&port->dev, "%s -No ioctl for that one.\n", __func__); - return -ENOIOCTLCMD; -} - -static void qt_set_termios(struct tty_struct *tty, - struct usb_serial_port *port, - struct ktermios *old_termios) -{ - struct ktermios *termios = &tty->termios; - unsigned char new_lcr = 0; - unsigned int cflag = termios->c_cflag; - unsigned int index; - int baud, divisor, remainder; - int status; - - index = port->port_number; - - switch (cflag & CSIZE) { - case CS5: - new_lcr |= SERIAL_5_DATA; - break; - case CS6: - new_lcr |= SERIAL_6_DATA; - break; - case CS7: - new_lcr |= SERIAL_7_DATA; - break; - default: - termios->c_cflag &= ~CSIZE; - termios->c_cflag |= CS8; - case CS8: - new_lcr |= SERIAL_8_DATA; - break; - } - - /* Parity stuff */ - if (cflag & PARENB) { - if (cflag & PARODD) - new_lcr |= SERIAL_ODD_PARITY; - else - new_lcr |= SERIAL_EVEN_PARITY; - } - if (cflag & CSTOPB) - new_lcr |= SERIAL_TWO_STOPB; - else - new_lcr |= SERIAL_ONE_STOPB; - - dev_dbg(&port->dev, "%s - 4\n", __func__); - - /* Thats the LCR stuff, go ahead and set it */ - baud = tty_get_baud_rate(tty); - if (!baud) - /* pick a default, any default... */ - baud = 9600; - - dev_dbg(&port->dev, "%s - got baud = %d\n", __func__, baud); - - divisor = MAX_BAUD_RATE / baud; - remainder = MAX_BAUD_RATE % baud; - /* Round to nearest divisor */ - if (((remainder * 2) >= baud) && (baud != 110)) - divisor++; - - /* - * Set Baud rate to default and turn off (default)flow control here - */ - status = - qt_setuart(port->serial, index, (unsigned short)divisor, new_lcr); - if (status < 0) { - dev_dbg(&port->dev, "qt_setuart failed\n"); - return; - } - - /* Now determine flow control */ - if (cflag & CRTSCTS) { - dev_dbg(&port->dev, "%s - Enabling HW flow control\n", - __func__); - - /* Enable RTS/CTS flow control */ - status = box_set_hw_flow_ctrl(port->serial, index, 1); - - if (status < 0) { - dev_dbg(&port->dev, "box_set_hw_flow_ctrl failed\n"); - return; - } - } else { - /* Disable RTS/CTS flow control */ - dev_dbg(&port->dev, - "%s - disabling HW flow control\n", __func__); - - status = box_set_hw_flow_ctrl(port->serial, index, 0); - if (status < 0) { - dev_dbg(&port->dev, "box_set_hw_flow_ctrl failed\n"); - return; - } - - } - - /* if we are implementing XON/XOFF, set the start and stop character in - * the device */ - if (I_IXOFF(tty) || I_IXON(tty)) { - unsigned char stop_char = STOP_CHAR(tty); - unsigned char start_char = START_CHAR(tty); - - status = box_set_sw_flow_ctrl(port->serial, index, stop_char, - start_char); - if (status < 0) - dev_dbg(&port->dev, - "box_set_sw_flow_ctrl (enabled) failed\n"); - - } else { - /* disable SW flow control */ - status = box_disable_sw_flow_ctrl(port->serial, index); - if (status < 0) - dev_dbg(&port->dev, - "box_set_sw_flow_ctrl (diabling) failed\n"); - - } - termios->c_cflag &= ~CMSPAR; - /* FIXME: - Error cases should be returning the actual bits changed only - */ -} - -static void qt_break(struct tty_struct *tty, int break_state) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port; - u16 index, onoff; - unsigned int result; - - index = port->port_number; - - qt_port = qt_get_port_private(port); - - if (break_state == -1) - onoff = 1; - else - onoff = 0; - - mutex_lock(&qt_port->lock); - - result = - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - QT_BREAK_CONTROL, 0x40, onoff, index, NULL, 0, 300); - - mutex_unlock(&qt_port->lock); -} - -static inline int qt_real_tiocmget(struct tty_struct *tty, - struct usb_serial_port *port, - struct usb_serial *serial) -{ - - u8 mcr; - u8 msr; - unsigned int result = 0; - int status; - unsigned int index; - - index = port->port_number; - status = - box_get_register(port->serial, index, MODEM_CONTROL_REGISTER, &mcr); - if (status >= 0) { - status = - box_get_register(port->serial, index, - MODEM_STATUS_REGISTER, &msr); - - } - - if (status >= 0) { - result = ((mcr & SERIAL_MCR_DTR) ? TIOCM_DTR : 0) - /* DTR IS SET */ - | ((mcr & SERIAL_MCR_RTS) ? TIOCM_RTS : 0) - /* RTS IS SET */ - | ((msr & SERIAL_MSR_CTS) ? TIOCM_CTS : 0) - /* CTS is set */ - | ((msr & SERIAL_MSR_CD) ? TIOCM_CAR : 0) - /* Carrier detect is set */ - | ((msr & SERIAL_MSR_RI) ? TIOCM_RI : 0) - /* Ring indicator set */ - | ((msr & SERIAL_MSR_DSR) ? TIOCM_DSR : 0); - /* DSR is set */ - return result; - - } else - return -ESPIPE; -} - -static inline int qt_real_tiocmset(struct tty_struct *tty, - struct usb_serial_port *port, - struct usb_serial *serial, - unsigned int value) -{ - - u8 mcr; - int status; - unsigned int index; - - index = port->port_number; - status = - box_get_register(port->serial, index, MODEM_CONTROL_REGISTER, &mcr); - if (status < 0) - return -ESPIPE; - - /* - * Turn off the RTS and DTR and loopback and then only turn on what was - * asked for - */ - mcr &= ~(SERIAL_MCR_RTS | SERIAL_MCR_DTR | SERIAL_MCR_LOOP); - if (value & TIOCM_RTS) - mcr |= SERIAL_MCR_RTS; - if (value & TIOCM_DTR) - mcr |= SERIAL_MCR_DTR; - if (value & TIOCM_LOOP) - mcr |= SERIAL_MCR_LOOP; - - status = - box_set_register(port->serial, index, MODEM_CONTROL_REGISTER, mcr); - if (status < 0) - return -ESPIPE; - - return 0; -} - -static int qt_tiocmget(struct tty_struct *tty) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port = qt_get_port_private(port); - int retval; - - if (!serial) - return -ENODEV; - - mutex_lock(&qt_port->lock); - retval = qt_real_tiocmget(tty, port, serial); - mutex_unlock(&qt_port->lock); - return retval; -} - -static int qt_tiocmset(struct tty_struct *tty, - unsigned int set, unsigned int clear) -{ - - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port = qt_get_port_private(port); - int retval; - - if (!serial) - return -ENODEV; - - mutex_lock(&qt_port->lock); - retval = qt_real_tiocmset(tty, port, serial, set); - mutex_unlock(&qt_port->lock); - return retval; -} - -static void qt_throttle(struct tty_struct *tty) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port; - - if (!serial) - return; - - qt_port = qt_get_port_private(port); - - mutex_lock(&qt_port->lock); - - /* pass on to the driver specific version of this function */ - qt_port->rx_holding = 1; - - mutex_unlock(&qt_port->lock); -} - -static void qt_submit_urb_from_unthrottle(struct usb_serial_port *port, - struct usb_serial *serial) -{ - int result; - - /* Start reading from the device */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, - port->bulk_in_endpointAddress), - port->read_urb->transfer_buffer, - port->read_urb->transfer_buffer_length, - qt_read_bulk_callback, port); - - result = usb_submit_urb(port->read_urb, GFP_ATOMIC); - - if (result) - dev_err(&port->dev, - "%s - failed restarting read urb, error %d\n", - __func__, result); -} - -static void qt_unthrottle(struct tty_struct *tty) -{ - struct usb_serial_port *port = tty->driver_data; - struct usb_serial *serial = get_usb_serial(port, __func__); - struct quatech_port *qt_port; - - if (!serial) - return; - - qt_port = qt_get_port_private(port); - - mutex_lock(&qt_port->lock); - - if (qt_port->rx_holding == 1) { - dev_dbg(&port->dev, "%s -qt_port->rx_holding == 1\n", __func__); - - qt_port->rx_holding = 0; - dev_dbg(&port->dev, "%s - qt_port->rx_holding = 0\n", __func__); - - /* if we have a bulk endpoint, start it up */ - if ((serial->num_bulk_in) && (qt_port->read_bulk_stopped == 1)) - qt_submit_urb_from_unthrottle(port, serial); - } - mutex_unlock(&qt_port->lock); -} - -static int qt_calc_num_ports(struct usb_serial *serial) -{ - int num_ports; - - num_ports = - (serial->interface->cur_altsetting->desc.bNumEndpoints - 1) / 2; - - return num_ports; -} - -static struct usb_serial_driver quatech_device = { - .driver = { - .owner = THIS_MODULE, - .name = "serqt", - }, - .description = DRIVER_DESC, - .id_table = id_table, - .num_ports = 8, - .open = qt_open, - .close = qt_close, - .write = qt_write, - .write_room = qt_write_room, - .chars_in_buffer = qt_chars_in_buffer, - .throttle = qt_throttle, - .unthrottle = qt_unthrottle, - .calc_num_ports = qt_calc_num_ports, - .ioctl = qt_ioctl, - .set_termios = qt_set_termios, - .break_ctl = qt_break, - .tiocmget = qt_tiocmget, - .tiocmset = qt_tiocmset, - .attach = qt_startup, - .release = qt_release, -}; - -static struct usb_serial_driver * const serial_drivers[] = { - &quatech_device, NULL -}; - -module_usb_serial_driver(serial_drivers, id_table); - -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE("GPL"); -- cgit From 19b1e7695be8cbdf14e85ddefc9c5a9d3e88bdfd Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Tue, 1 Jul 2014 02:14:02 +0300 Subject: staging: dgrp: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the driver as it hasn't been cleaned up and it doesn't look like anyone is going to work on it anymore. This can be reverted if someone wants to work to fix the remaining issues the driver has. Signed-off-by: Kristina MartÅ¡enko Cc: Bill Pemberton Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/dgrp/Kconfig | 9 - drivers/staging/dgrp/Makefile | 12 - drivers/staging/dgrp/README | 2 - drivers/staging/dgrp/TODO | 13 - drivers/staging/dgrp/dgrp_common.c | 169 -- drivers/staging/dgrp/dgrp_common.h | 150 -- drivers/staging/dgrp/dgrp_dpa_ops.c | 534 ----- drivers/staging/dgrp/dgrp_driver.c | 105 - drivers/staging/dgrp/dgrp_mon_ops.c | 327 --- drivers/staging/dgrp/dgrp_net_ops.c | 3666 --------------------------------- drivers/staging/dgrp/dgrp_ports_ops.c | 156 -- drivers/staging/dgrp/dgrp_specproc.c | 541 ----- drivers/staging/dgrp/dgrp_sysfs.c | 558 ----- drivers/staging/dgrp/dgrp_tty.c | 3337 ------------------------------ drivers/staging/dgrp/digirp.h | 129 -- drivers/staging/dgrp/drp.h | 693 ------- 18 files changed, 10404 deletions(-) delete mode 100644 drivers/staging/dgrp/Kconfig delete mode 100644 drivers/staging/dgrp/Makefile delete mode 100644 drivers/staging/dgrp/README delete mode 100644 drivers/staging/dgrp/TODO delete mode 100644 drivers/staging/dgrp/dgrp_common.c delete mode 100644 drivers/staging/dgrp/dgrp_common.h delete mode 100644 drivers/staging/dgrp/dgrp_dpa_ops.c delete mode 100644 drivers/staging/dgrp/dgrp_driver.c delete mode 100644 drivers/staging/dgrp/dgrp_mon_ops.c delete mode 100644 drivers/staging/dgrp/dgrp_net_ops.c delete mode 100644 drivers/staging/dgrp/dgrp_ports_ops.c delete mode 100644 drivers/staging/dgrp/dgrp_specproc.c delete mode 100644 drivers/staging/dgrp/dgrp_sysfs.c delete mode 100644 drivers/staging/dgrp/dgrp_tty.c delete mode 100644 drivers/staging/dgrp/digirp.h delete mode 100644 drivers/staging/dgrp/drp.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 85dde86e8965..91ebf62497bc 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -114,8 +114,6 @@ source "drivers/staging/ced1401/Kconfig" source "drivers/staging/imx-drm/Kconfig" -source "drivers/staging/dgrp/Kconfig" - source "drivers/staging/fwserial/Kconfig" source "drivers/staging/goldfish/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 59e5e0968a1a..a1e0b1c5f72f 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -50,7 +50,6 @@ obj-$(CONFIG_LTE_GDM724X) += gdm724x/ obj-$(CONFIG_NET_VENDOR_SILICOM) += silicom/ obj-$(CONFIG_CED1401) += ced1401/ obj-$(CONFIG_DRM_IMX) += imx-drm/ -obj-$(CONFIG_DGRP) += dgrp/ obj-$(CONFIG_FIREWIRE_SERIAL) += fwserial/ obj-$(CONFIG_GOLDFISH) += goldfish/ obj-$(CONFIG_LUSTRE_FS) += lustre/ diff --git a/drivers/staging/dgrp/Kconfig b/drivers/staging/dgrp/Kconfig deleted file mode 100644 index e4c41552923a..000000000000 --- a/drivers/staging/dgrp/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -config DGRP - tristate "Digi Realport driver" - default n - depends on SYSFS && TTY - ---help--- - Support for Digi Realport devices. These devices allow you to - access remote serial ports as if they are local tty devices. This - will build the kernel driver, you will still need the userspace - component to make your Realport device work. diff --git a/drivers/staging/dgrp/Makefile b/drivers/staging/dgrp/Makefile deleted file mode 100644 index d9c3b88d7162..000000000000 --- a/drivers/staging/dgrp/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -obj-$(CONFIG_DGRP) += dgrp.o - -dgrp-y := \ - dgrp_common.o \ - dgrp_dpa_ops.o \ - dgrp_driver.o \ - dgrp_mon_ops.o \ - dgrp_net_ops.o \ - dgrp_ports_ops.o \ - dgrp_specproc.o \ - dgrp_tty.o \ - dgrp_sysfs.o diff --git a/drivers/staging/dgrp/README b/drivers/staging/dgrp/README deleted file mode 100644 index 1d8aaee270e8..000000000000 --- a/drivers/staging/dgrp/README +++ /dev/null @@ -1,2 +0,0 @@ -The user space code to work with this driver is located at -https://github.com/wfp5p/dgrp-utils diff --git a/drivers/staging/dgrp/TODO b/drivers/staging/dgrp/TODO deleted file mode 100644 index 3ef2611bc6d7..000000000000 --- a/drivers/staging/dgrp/TODO +++ /dev/null @@ -1,13 +0,0 @@ -- Use configfs for config stuff. This will require changes to the - user space code. - -- dgrp_send() and dgrp_receive() could use some refactoring - -- Don't automatically create CHAN_MAX (64) channel array entries for - every device as many devices are going to have much less than 64 - channels. - -- The locking needs to be checked. It seems haphazardly done in most - places. - -- Check Kconfig dependencies diff --git a/drivers/staging/dgrp/dgrp_common.c b/drivers/staging/dgrp/dgrp_common.c deleted file mode 100644 index 9a9b45624ba9..000000000000 --- a/drivers/staging/dgrp/dgrp_common.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_common.c - * - * Description: - * - * Definitions of global variables and functions which are either - * shared by the tty, mon, and net drivers; or which cross them - * functionally (like the poller). - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include - -#include "dgrp_common.h" - -/** - * dgrp_carrier -- check for carrier change state and act - * @ch: struct ch_struct * - */ -void dgrp_carrier(struct ch_struct *ch) -{ - struct nd_struct *nd; - - int virt_carrier = 0; - int phys_carrier = 0; - - /* fix case when the tty has already closed. */ - - if (!ch) - return; - nd = ch->ch_nd; - if (!nd) - return; - - /* - * If we are currently waiting to determine the status of the port, - * we don't yet know the state of the modem lines. As a result, - * we ignore state changes when we are waiting for the modem lines - * to be established. We know, as a result of code in dgrp_net_ops, - * that we will be called again immediately following the reception - * of the status message with the true modem status flags in it. - */ - if (ch->ch_expect & RR_STATUS) - return; - - /* - * If CH_HANGUP is set, we gotta keep trying to get all the processes - * that have the port open to close the port. - * So lets just keep sending a hangup every time we get here. - */ - if ((ch->ch_flag & CH_HANGUP) && - (ch->ch_tun.un_open_count > 0)) - tty_hangup(ch->ch_tun.un_tty); - - /* - * Compute the effective state of both the physical and virtual - * senses of carrier. - */ - - if (ch->ch_s_mlast & DM_CD) - phys_carrier = 1; - - if ((ch->ch_s_mlast & DM_CD) || - (ch->ch_digi.digi_flags & DIGI_FORCEDCD) || - (ch->ch_flag & CH_CLOCAL)) - virt_carrier = 1; - - /* - * Test for a VIRTUAL carrier transition to HIGH. - * - * The CH_HANGUP condition is intended to prevent any action - * except for close. As a result, we ignore positive carrier - * transitions during CH_HANGUP. - */ - if (((ch->ch_flag & CH_HANGUP) == 0) && - ((ch->ch_flag & CH_VIRT_CD) == 0) && - (virt_carrier == 1)) { - /* - * When carrier rises, wake any threads waiting - * for carrier in the open routine. - */ - nd->nd_tx_work = 1; - - if (waitqueue_active(&ch->ch_flag_wait)) - wake_up_interruptible(&ch->ch_flag_wait); - } - - /* - * Test for a PHYSICAL transition to low, so long as we aren't - * currently ignoring physical transitions (which is what "virtual - * carrier" indicates). - * - * The transition of the virtual carrier to low really doesn't - * matter... it really only means "ignore carrier state", not - * "make pretend that carrier is there". - */ - if ((virt_carrier == 0) && - ((ch->ch_flag & CH_PHYS_CD) != 0) && - (phys_carrier == 0)) { - /* - * When carrier drops: - * - * Do a Hard Hangup if that is called for. - * - * Drop carrier on all open units. - * - * Flush queues, waking up any task waiting in the - * line discipline. - * - * Send a hangup to the control terminal. - * - * Enable all select calls. - */ - - nd->nd_tx_work = 1; - - ch->ch_flag &= ~(CH_LOW | CH_EMPTY | CH_DRAIN | CH_INPUT); - - if (waitqueue_active(&ch->ch_flag_wait)) - wake_up_interruptible(&ch->ch_flag_wait); - - if (ch->ch_tun.un_open_count > 0) - tty_hangup(ch->ch_tun.un_tty); - - if (ch->ch_pun.un_open_count > 0) - tty_hangup(ch->ch_pun.un_tty); - } - - /* - * Make sure that our cached values reflect the current reality. - */ - if (virt_carrier == 1) - ch->ch_flag |= CH_VIRT_CD; - else - ch->ch_flag &= ~CH_VIRT_CD; - - if (phys_carrier == 1) - ch->ch_flag |= CH_PHYS_CD; - else - ch->ch_flag &= ~CH_PHYS_CD; - -} diff --git a/drivers/staging/dgrp/dgrp_common.h b/drivers/staging/dgrp/dgrp_common.h deleted file mode 100644 index 23aba6c4d22c..000000000000 --- a/drivers/staging/dgrp/dgrp_common.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -#ifndef __DGRP_COMMON_H -#define __DGRP_COMMON_H - -#define DIGI_VERSION "1.9-29" - -#include -#include -#include "drp.h" - -#define DGRP_TTIME 100 -#define DGRP_RTIME 100 - -/************************************************************************ - * All global storage allocation. - ************************************************************************/ - -extern int dgrp_register_cudevices; /* enable legacy cu devices */ -extern int dgrp_register_prdevices; /* enable transparent print devices */ -extern int dgrp_poll_tick; /* Poll interval - in ms */ - -extern struct list_head nd_struct_list; - -struct dgrp_poll_data { - spinlock_t poll_lock; - struct timer_list timer; - int poll_tick; - ulong poll_round; /* Timer rouding factor */ - long node_active_count; -}; - -extern struct dgrp_poll_data dgrp_poll_data; -extern void dgrp_poll_handler(unsigned long arg); - -/* from dgrp_mon_ops.c */ -extern const struct file_operations dgrp_mon_ops; - -/* from dgrp_tty.c */ -extern int dgrp_tty_init(struct nd_struct *nd); -extern void dgrp_tty_uninit(struct nd_struct *nd); - -/* from dgrp_ports_ops.c */ -extern const struct file_operations dgrp_ports_ops; - -/* from dgrp_net_ops.c */ -extern const struct file_operations dgrp_net_ops; - -/* from dgrp_dpa_ops.c */ -extern const struct file_operations dgrp_dpa_ops; -extern void dgrp_dpa_data(struct nd_struct *, int, u8 *, int); - -/* from dgrp_sysfs.c */ -extern int dgrp_create_class_sysfs_files(void); -extern void dgrp_remove_class_sysfs_files(void); - -extern void dgrp_create_node_class_sysfs_files(struct nd_struct *nd); -extern void dgrp_remove_node_class_sysfs_files(struct nd_struct *nd); - -extern void dgrp_create_tty_sysfs(struct un_struct *un, struct device *c); -extern void dgrp_remove_tty_sysfs(struct device *c); - -/* from dgrp_specproc.c */ -extern void dgrp_unregister_proc(void); -extern void dgrp_register_proc(void); - -/*-----------------------------------------------------------------------* - * - * Declarations for common operations: - * - * (either used by more than one of net, mon, or tty, - * or in interrupt context (i.e. the poller)) - * - *-----------------------------------------------------------------------*/ - -void dgrp_carrier(struct ch_struct *ch); - - -/* - * ID manipulation macros (where c1 & c2 are characters, i is - * a long integer, and s is a character array of at least three members - */ - -static inline void ID_TO_CHAR(long i, char *s) -{ - s[0] = ((i & 0xff00)>>8); - s[1] = (i & 0xff); - s[2] = 0; -} - -static inline long CHAR_TO_ID(char *s) -{ - return ((s[0] & 0xff) << 8) | (s[1] & 0xff); -} - -static inline struct nd_struct *nd_struct_get(long major) -{ - struct nd_struct *nd; - - list_for_each_entry(nd, &nd_struct_list, list) { - if (major == nd->nd_major) - return nd; - } - - return NULL; -} - -static inline int nd_struct_add(struct nd_struct *entry) -{ - struct nd_struct *ptr; - - ptr = nd_struct_get(entry->nd_major); - - if (ptr) - return -EBUSY; - - list_add_tail(&entry->list, &nd_struct_list); - - return 0; -} - -static inline int nd_struct_del(struct nd_struct *entry) -{ - struct nd_struct *nd; - - nd = nd_struct_get(entry->nd_major); - - if (!nd) - return -ENODEV; - - list_del(&nd->list); - return 0; -} - -#endif /* __DGRP_COMMON_H */ diff --git a/drivers/staging/dgrp/dgrp_dpa_ops.c b/drivers/staging/dgrp/dgrp_dpa_ops.c deleted file mode 100644 index 69bfe309376d..000000000000 --- a/drivers/staging/dgrp/dgrp_dpa_ops.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_dpa_ops.c - * - * Description: - * - * Handle the file operations required for the "dpa" devices. - * Includes those functions required to register the "dpa" devices - * in "/proc". - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "dgrp_common.h" - -/* File operation declarations */ -static int dgrp_dpa_open(struct inode *, struct file *); -static int dgrp_dpa_release(struct inode *, struct file *); -static ssize_t dgrp_dpa_read(struct file *, char __user *, size_t, loff_t *); -static long dgrp_dpa_ioctl(struct file *file, unsigned int cmd, - unsigned long arg); -static unsigned int dgrp_dpa_select(struct file *, struct poll_table_struct *); - -const struct file_operations dgrp_dpa_ops = { - .owner = THIS_MODULE, - .read = dgrp_dpa_read, - .poll = dgrp_dpa_select, - .unlocked_ioctl = dgrp_dpa_ioctl, - .open = dgrp_dpa_open, - .release = dgrp_dpa_release, -}; - -struct digi_node { - uint nd_state; /* Node state: 1 = up, 0 = down. */ - uint nd_chan_count; /* Number of channels found */ - uint nd_tx_byte; /* Tx data count */ - uint nd_rx_byte; /* RX data count */ - u8 nd_ps_desc[MAX_DESC_LEN]; /* Description from PS */ -}; - -#define DIGI_GETNODE (('d'<<8) | 249) /* get board info */ - - -struct digi_chan { - uint ch_port; /* Port number to get info on */ - uint ch_open; /* 1 if open, 0 if not */ - uint ch_txcount; /* TX data count */ - uint ch_rxcount; /* RX data count */ - uint ch_s_brate; /* Realport BRATE */ - uint ch_s_estat; /* Realport ELAST */ - uint ch_s_cflag; /* Realport CFLAG */ - uint ch_s_iflag; /* Realport IFLAG */ - uint ch_s_oflag; /* Realport OFLAG */ - uint ch_s_xflag; /* Realport XFLAG */ - uint ch_s_mstat; /* Realport MLAST */ -}; - -#define DIGI_GETCHAN (('d'<<8) | 248) /* get channel info */ - - -struct digi_vpd { - int vpd_len; - char vpd_data[VPDSIZE]; -}; - -#define DIGI_GETVPD (('d'<<8) | 246) /* get VPD info */ - - -struct digi_debug { - int onoff; - int port; -}; - -#define DIGI_SETDEBUG (('d'<<8) | 247) /* set debug info */ - - -/* - * dgrp_dpa_open -- open the DPA device for a particular PortServer - */ -static int dgrp_dpa_open(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - int rtn = 0; - - rtn = try_module_get(THIS_MODULE); - if (!rtn) - return -ENXIO; - - rtn = 0; - - if (!capable(CAP_SYS_ADMIN)) { - rtn = -EPERM; - goto done; - } - - /* - * Make sure that the "private_data" field hasn't already been used. - */ - if (file->private_data) { - rtn = -EINVAL; - goto done; - } - - /* - * Get the node pointer, and fail if it doesn't exist. - */ - nd = PDE_DATA(inode); - if (!nd) { - rtn = -ENXIO; - goto done; - } - - file->private_data = (void *) nd; - - /* - * Allocate the DPA buffer. - */ - - if (nd->nd_dpa_buf) { - rtn = -EBUSY; - } else { - nd->nd_dpa_buf = kmalloc(DPA_MAX, GFP_KERNEL); - - if (!nd->nd_dpa_buf) { - rtn = -ENOMEM; - } else { - nd->nd_dpa_out = 0; - nd->nd_dpa_in = 0; - nd->nd_dpa_lbolt = jiffies; - } - } - -done: - - if (rtn) - module_put(THIS_MODULE); - return rtn; -} - -/* - * dgrp_dpa_release -- close the DPA device for a particular PortServer - */ -static int dgrp_dpa_release(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - u8 *buf; - unsigned long lock_flags; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - goto done; - - /* - * Free the dpa buffer. - */ - - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - - buf = nd->nd_dpa_buf; - - nd->nd_dpa_buf = NULL; - nd->nd_dpa_out = nd->nd_dpa_in; - - /* - * Wakeup any thread waiting for buffer space. - */ - - if (nd->nd_dpa_flag & DPA_WAIT_SPACE) { - nd->nd_dpa_flag &= ~DPA_WAIT_SPACE; - wake_up_interruptible(&nd->nd_dpa_wqueue); - } - - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - - kfree(buf); - -done: - module_put(THIS_MODULE); - file->private_data = NULL; - return 0; -} - -/* - * dgrp_dpa_read - * - * Copy data from the monitoring buffer to the user, freeing space - * in the monitoring buffer for more messages - */ -static ssize_t dgrp_dpa_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) -{ - struct nd_struct *nd; - int n; - int r; - int offset = 0; - int res = 0; - ssize_t rtn; - unsigned long lock_flags; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - return -ENXIO; - - /* - * Wait for some data to appear in the buffer. - */ - - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - - for (;;) { - n = (nd->nd_dpa_in - nd->nd_dpa_out) & DPA_MASK; - - if (n != 0) - break; - - nd->nd_dpa_flag |= DPA_WAIT_DATA; - - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - - /* - * Go to sleep waiting until the condition becomes true. - */ - rtn = wait_event_interruptible(nd->nd_dpa_wqueue, - ((nd->nd_dpa_flag & DPA_WAIT_DATA) == 0)); - - if (rtn) - return rtn; - - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - } - - /* - * Read whatever is there. - */ - - if (n > count) - n = count; - - res = n; - - r = DPA_MAX - nd->nd_dpa_out; - - if (r <= n) { - - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - rtn = copy_to_user((void __user *)buf, - nd->nd_dpa_buf + nd->nd_dpa_out, r); - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - - if (rtn) { - rtn = -EFAULT; - goto done; - } - - nd->nd_dpa_out = 0; - n -= r; - offset = r; - } - - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - rtn = copy_to_user((void __user *)buf + offset, - nd->nd_dpa_buf + nd->nd_dpa_out, n); - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - - if (rtn) { - rtn = -EFAULT; - goto done; - } - - nd->nd_dpa_out += n; - - *ppos += res; - - rtn = res; - - /* - * Wakeup any thread waiting for buffer space. - */ - - n = (nd->nd_dpa_in - nd->nd_dpa_out) & DPA_MASK; - - if (nd->nd_dpa_flag & DPA_WAIT_SPACE && - (DPA_MAX - n) > DPA_HIGH_WATER) { - nd->nd_dpa_flag &= ~DPA_WAIT_SPACE; - wake_up_interruptible(&nd->nd_dpa_wqueue); - } - - done: - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - return rtn; -} - -static unsigned int dgrp_dpa_select(struct file *file, - struct poll_table_struct *table) -{ - unsigned int retval = 0; - struct nd_struct *nd = file->private_data; - - if (nd->nd_dpa_out != nd->nd_dpa_in) - retval |= POLLIN | POLLRDNORM; /* Conditionally readable */ - - retval |= POLLOUT | POLLWRNORM; /* Always writeable */ - - return retval; -} - -static long dgrp_dpa_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - - struct nd_struct *nd; - struct digi_chan getchan; - struct digi_node getnode; - struct ch_struct *ch; - struct digi_debug setdebug; - struct digi_vpd vpd; - unsigned int port; - void __user *uarg = (void __user *) arg; - - nd = file->private_data; - - switch (cmd) { - case DIGI_GETCHAN: - if (copy_from_user(&getchan, uarg, sizeof(struct digi_chan))) - return -EFAULT; - - port = getchan.ch_port; - - if (port > nd->nd_chan_count) - return -EINVAL; - - ch = nd->nd_chan + port; - - getchan.ch_open = (ch->ch_open_count > 0) ? 1 : 0; - getchan.ch_txcount = ch->ch_txcount; - getchan.ch_rxcount = ch->ch_rxcount; - getchan.ch_s_brate = ch->ch_s_brate; - getchan.ch_s_estat = ch->ch_s_elast; - getchan.ch_s_cflag = ch->ch_s_cflag; - getchan.ch_s_iflag = ch->ch_s_iflag; - getchan.ch_s_oflag = ch->ch_s_oflag; - getchan.ch_s_xflag = ch->ch_s_xflag; - getchan.ch_s_mstat = ch->ch_s_mlast; - - if (copy_to_user(uarg, &getchan, sizeof(struct digi_chan))) - return -EFAULT; - break; - - - case DIGI_GETNODE: - getnode.nd_state = (nd->nd_state & NS_READY) ? 1 : 0; - getnode.nd_chan_count = nd->nd_chan_count; - getnode.nd_tx_byte = nd->nd_tx_byte; - getnode.nd_rx_byte = nd->nd_rx_byte; - - memset(&getnode.nd_ps_desc, 0, MAX_DESC_LEN); - strlcpy(getnode.nd_ps_desc, nd->nd_ps_desc, MAX_DESC_LEN); - - if (copy_to_user(uarg, &getnode, sizeof(struct digi_node))) - return -EFAULT; - break; - - - case DIGI_SETDEBUG: - if (copy_from_user(&setdebug, uarg, sizeof(struct digi_debug))) - return -EFAULT; - - nd->nd_dpa_debug = setdebug.onoff; - nd->nd_dpa_port = setdebug.port; - break; - - - case DIGI_GETVPD: - memset(&vpd, 0, sizeof(vpd)); - if (nd->nd_vpd_len > 0) { - vpd.vpd_len = nd->nd_vpd_len; - memcpy(&vpd.vpd_data, &nd->nd_vpd, nd->nd_vpd_len); - } else { - vpd.vpd_len = 0; - } - - if (copy_to_user(uarg, &vpd, sizeof(struct digi_vpd))) - return -EFAULT; - break; - } - - return 0; -} - -/** - * dgrp_dpa() -- send data to the device monitor queue - * @nd: pointer to a node structure - * @buf: buffer of data to copy to the monitoring buffer - * @len: number of bytes to transfer to the buffer - * - * Called by the net device routines to send data to the device - * monitor queue. If the device monitor buffer is too full to - * accept the data, it waits until the buffer is ready. - */ -static void dgrp_dpa(struct nd_struct *nd, u8 *buf, int nbuf) -{ - int n; - int r; - unsigned long lock_flags; - - /* - * Grab DPA lock. - */ - spin_lock_irqsave(&nd->nd_dpa_lock, lock_flags); - - /* - * Loop while data remains. - */ - while (nbuf > 0 && nd->nd_dpa_buf != NULL) { - - n = (nd->nd_dpa_out - nd->nd_dpa_in - 1) & DPA_MASK; - - /* - * Enforce flow control on the DPA device. - */ - if (n < (DPA_MAX - DPA_HIGH_WATER)) - nd->nd_dpa_flag |= DPA_WAIT_SPACE; - - /* - * This should never happen, as the flow control above - * should have stopped things before they got to this point. - */ - if (n == 0) { - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); - return; - } - - /* - * Copy as much data as will fit. - */ - - if (n > nbuf) - n = nbuf; - - r = DPA_MAX - nd->nd_dpa_in; - - if (r <= n) { - memcpy(nd->nd_dpa_buf + nd->nd_dpa_in, buf, r); - - n -= r; - - nd->nd_dpa_in = 0; - - buf += r; - nbuf -= r; - } - - memcpy(nd->nd_dpa_buf + nd->nd_dpa_in, buf, n); - - nd->nd_dpa_in += n; - - buf += n; - nbuf -= n; - - if (nd->nd_dpa_in >= DPA_MAX) - pr_info_ratelimited("%s - nd->nd_dpa_in (%i) >= DPA_MAX\n", - __func__, nd->nd_dpa_in); - - /* - * Wakeup any thread waiting for data - */ - if (nd->nd_dpa_flag & DPA_WAIT_DATA) { - nd->nd_dpa_flag &= ~DPA_WAIT_DATA; - wake_up_interruptible(&nd->nd_dpa_wqueue); - } - } - - /* - * Release the DPA lock. - */ - spin_unlock_irqrestore(&nd->nd_dpa_lock, lock_flags); -} - -/** - * dgrp_monitor_data() -- builds a DPA data packet - * @nd: pointer to a node structure - * @type: type of message to be logged in the DPA buffer - * @buf: buffer of data to be logged in the DPA buffer - * @size -- number of bytes in the "buf" buffer - */ -void dgrp_dpa_data(struct nd_struct *nd, int type, u8 *buf, int size) -{ - u8 header[5]; - - header[0] = type; - - put_unaligned_be32(size, header + 1); - - dgrp_dpa(nd, header, sizeof(header)); - dgrp_dpa(nd, buf, size); -} diff --git a/drivers/staging/dgrp/dgrp_driver.c b/drivers/staging/dgrp/dgrp_driver.c deleted file mode 100644 index b60a8da6350a..000000000000 --- a/drivers/staging/dgrp/dgrp_driver.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * - * Copyright 1999-2003 Digi International (www.digi.com) - * Jeff Randall - * James Puzzo - * Scott Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * Driver specific includes - */ -#include -#include -#include - -/* - * PortServer includes - */ -#include "dgrp_common.h" - - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Digi International, http://www.digi.com"); -MODULE_DESCRIPTION("RealPort driver for Digi's ethernet-based serial connectivity product line"); -MODULE_VERSION(DIGI_VERSION); - -struct list_head nd_struct_list; -struct dgrp_poll_data dgrp_poll_data; - -int dgrp_register_cudevices = 1;/* Turn on/off registering legacy cu devices */ -int dgrp_register_prdevices = 1;/* Turn on/off registering transparent print */ -int dgrp_poll_tick = 20; /* Poll interval - in ms */ - -module_param_named(register_cudevices, dgrp_register_cudevices, int, 0644); -MODULE_PARM_DESC(register_cudevices, "Turn on/off registering legacy cu devices"); - -module_param_named(register_prdevices, dgrp_register_prdevices, int, 0644); -MODULE_PARM_DESC(register_prdevices, "Turn on/off registering transparent print devices"); - -module_param_named(pollrate, dgrp_poll_tick, int, 0644); -MODULE_PARM_DESC(pollrate, "Poll interval in ms"); - -/* - * init_module() - * - * Module load. This is where it all starts. - */ -static int __init dgrp_init_module(void) -{ - int ret; - - INIT_LIST_HEAD(&nd_struct_list); - - spin_lock_init(&dgrp_poll_data.poll_lock); - init_timer(&dgrp_poll_data.timer); - dgrp_poll_data.poll_tick = dgrp_poll_tick; - dgrp_poll_data.timer.function = dgrp_poll_handler; - dgrp_poll_data.timer.data = (unsigned long) &dgrp_poll_data; - - ret = dgrp_create_class_sysfs_files(); - if (ret) - return ret; - - dgrp_register_proc(); - - return 0; -} - - -/* - * Module unload. This is where it all ends. - */ -static void __exit dgrp_cleanup_module(void) -{ - struct nd_struct *nd, *next; - - /* - * Attempting to free resources in backwards - * order of allocation, in case that helps - * memory pool fragmentation. - */ - dgrp_unregister_proc(); - - dgrp_remove_class_sysfs_files(); - - - list_for_each_entry_safe(nd, next, &nd_struct_list, list) { - dgrp_tty_uninit(nd); - kfree(nd); - } -} - -module_init(dgrp_init_module); -module_exit(dgrp_cleanup_module); diff --git a/drivers/staging/dgrp/dgrp_mon_ops.c b/drivers/staging/dgrp/dgrp_mon_ops.c deleted file mode 100644 index d18be4180e3b..000000000000 --- a/drivers/staging/dgrp/dgrp_mon_ops.c +++ /dev/null @@ -1,327 +0,0 @@ -/***************************************************************************** - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_mon_ops.c - * - * Description: - * - * Handle the file operations required for the "monitor" devices. - * Includes those functions required to register the "mon" devices - * in "/proc". - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "dgrp_common.h" - -/* File operation declarations */ -static int dgrp_mon_open(struct inode *, struct file *); -static int dgrp_mon_release(struct inode *, struct file *); -static ssize_t dgrp_mon_read(struct file *, char __user *, size_t, loff_t *); -static long dgrp_mon_ioctl(struct file *file, unsigned int cmd, - unsigned long arg); - -const struct file_operations dgrp_mon_ops = { - .owner = THIS_MODULE, - .read = dgrp_mon_read, - .unlocked_ioctl = dgrp_mon_ioctl, - .open = dgrp_mon_open, - .release = dgrp_mon_release, -}; - -/** - * dgrp_mon_open() -- open /proc/dgrp/ports device for a PortServer - * @inode: struct inode * - * @file: struct file * - * - * Open function to open the /proc/dgrp/ports device for a PortServer. - */ -static int dgrp_mon_open(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - struct timeval tv; - uint32_t time; - u8 *buf; - int rtn; - - rtn = try_module_get(THIS_MODULE); - if (!rtn) - return -ENXIO; - - rtn = 0; - - if (!capable(CAP_SYS_ADMIN)) { - rtn = -EPERM; - goto done; - } - - /* - * Make sure that the "private_data" field hasn't already been used. - */ - if (file->private_data) { - rtn = -EINVAL; - goto done; - } - - /* - * Get the node pointer, and fail if it doesn't exist. - */ - nd = PDE_DATA(inode); - if (!nd) { - rtn = -ENXIO; - goto done; - } - - file->private_data = (void *) nd; - - /* - * Allocate the monitor buffer. - */ - - /* - * Grab the MON lock. - */ - down(&nd->nd_mon_semaphore); - - if (nd->nd_mon_buf) { - rtn = -EBUSY; - goto done_up; - } - - nd->nd_mon_buf = kmalloc(MON_MAX, GFP_KERNEL); - - if (!nd->nd_mon_buf) { - rtn = -ENOMEM; - goto done_up; - } - - /* - * Enter an RPDUMP file header into the buffer. - */ - - buf = nd->nd_mon_buf; - - strcpy(buf, RPDUMP_MAGIC); - buf += strlen(buf) + 1; - - do_gettimeofday(&tv); - - /* - * tv.tv_sec might be a 64 bit quantity. Pare - * it down to 32 bits before attempting to encode - * it. - */ - time = (uint32_t) (tv.tv_sec & 0xffffffff); - - put_unaligned_be32(time, buf); - put_unaligned_be16(0, buf + 4); - buf += 6; - - if (nd->nd_tx_module) { - buf[0] = RPDUMP_CLIENT; - put_unaligned_be32(0, buf + 1); - put_unaligned_be16(1, buf + 5); - buf[7] = 0xf0 + nd->nd_tx_module; - buf += 8; - } - - if (nd->nd_rx_module) { - buf[0] = RPDUMP_SERVER; - put_unaligned_be32(0, buf + 1); - put_unaligned_be16(1, buf + 5); - buf[7] = 0xf0 + nd->nd_rx_module; - buf += 8; - } - - nd->nd_mon_out = 0; - nd->nd_mon_in = buf - nd->nd_mon_buf; - nd->nd_mon_lbolt = jiffies; - -done_up: - up(&nd->nd_mon_semaphore); - -done: - if (rtn) - module_put(THIS_MODULE); - return rtn; -} - - -/** - * dgrp_mon_release() - Close the MON device for a particular PortServer - * @inode: struct inode * - * @file: struct file * - */ -static int dgrp_mon_release(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - goto done; - - /* - * Free the monitor buffer. - */ - - down(&nd->nd_mon_semaphore); - - kfree(nd->nd_mon_buf); - nd->nd_mon_buf = NULL; - nd->nd_mon_out = nd->nd_mon_in; - - /* - * Wakeup any thread waiting for buffer space. - */ - - if (nd->nd_mon_flag & MON_WAIT_SPACE) { - nd->nd_mon_flag &= ~MON_WAIT_SPACE; - wake_up_interruptible(&nd->nd_mon_wqueue); - } - - up(&nd->nd_mon_semaphore); - - /* - * Make sure there is no thread in the middle of writing a packet. - */ - down(&nd->nd_net_semaphore); - up(&nd->nd_net_semaphore); - -done: - module_put(THIS_MODULE); - file->private_data = NULL; - return 0; -} - -/** - * dgrp_mon_read() -- Copy data from the monitoring buffer to the user - */ -static ssize_t dgrp_mon_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) -{ - struct nd_struct *nd; - int r; - int offset = 0; - int res = 0; - ssize_t rtn; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - return -ENXIO; - - /* - * Wait for some data to appear in the buffer. - */ - - down(&nd->nd_mon_semaphore); - - for (;;) { - res = (nd->nd_mon_in - nd->nd_mon_out) & MON_MASK; - - if (res) - break; - - nd->nd_mon_flag |= MON_WAIT_DATA; - - up(&nd->nd_mon_semaphore); - - /* - * Go to sleep waiting until the condition becomes true. - */ - rtn = wait_event_interruptible(nd->nd_mon_wqueue, - ((nd->nd_mon_flag & MON_WAIT_DATA) == 0)); - - if (rtn) - return rtn; - - down(&nd->nd_mon_semaphore); - } - - /* - * Read whatever is there. - */ - - if (res > count) - res = count; - - r = MON_MAX - nd->nd_mon_out; - - if (r <= res) { - rtn = copy_to_user((void __user *)buf, - nd->nd_mon_buf + nd->nd_mon_out, r); - if (rtn) { - up(&nd->nd_mon_semaphore); - return -EFAULT; - } - - nd->nd_mon_out = 0; - res -= r; - offset = r; - } - - rtn = copy_to_user((void __user *) buf + offset, - nd->nd_mon_buf + nd->nd_mon_out, res); - if (rtn) { - up(&nd->nd_mon_semaphore); - return -EFAULT; - } - - nd->nd_mon_out += res; - - *ppos += res; - - up(&nd->nd_mon_semaphore); - - /* - * Wakeup any thread waiting for buffer space. - */ - - if (nd->nd_mon_flag & MON_WAIT_SPACE) { - nd->nd_mon_flag &= ~MON_WAIT_SPACE; - wake_up_interruptible(&nd->nd_mon_wqueue); - } - - return res; -} - -/* ioctl is not valid on monitor device */ -static long dgrp_mon_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - return -EINVAL; -} diff --git a/drivers/staging/dgrp/dgrp_net_ops.c b/drivers/staging/dgrp/dgrp_net_ops.c deleted file mode 100644 index 33ac7fb88cbd..000000000000 --- a/drivers/staging/dgrp/dgrp_net_ops.c +++ /dev/null @@ -1,3666 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_net_ops.c - * - * Description: - * - * Handle the file operations required for the "network" devices. - * Includes those functions required to register the "net" devices - * in "/proc". - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define MYFLIPLEN TBUF_MAX - -#include "dgrp_common.h" - -#define TTY_FLIPBUF_SIZE 512 -#define DEVICE_NAME_SIZE 50 - -/* - * Generic helper function declarations - */ -static void parity_scan(struct ch_struct *ch, unsigned char *cbuf, - unsigned char *fbuf, int *len); - -/* - * File operation declarations - */ -static int dgrp_net_open(struct inode *, struct file *); -static int dgrp_net_release(struct inode *, struct file *); -static ssize_t dgrp_net_read(struct file *, char __user *, size_t, loff_t *); -static ssize_t dgrp_net_write(struct file *, const char __user *, size_t, - loff_t *); -static long dgrp_net_ioctl(struct file *file, unsigned int cmd, - unsigned long arg); -static unsigned int dgrp_net_select(struct file *file, - struct poll_table_struct *table); - -const struct file_operations dgrp_net_ops = { - .owner = THIS_MODULE, - .read = dgrp_net_read, - .write = dgrp_net_write, - .poll = dgrp_net_select, - .unlocked_ioctl = dgrp_net_ioctl, - .open = dgrp_net_open, - .release = dgrp_net_release, -}; - -/** - * dgrp_dump() -- prints memory for debugging purposes. - * @mem: Memory location which should be printed to the console - * @len: Number of bytes to be dumped - */ -static void dgrp_dump(u8 *mem, int len) -{ - int i; - - pr_debug("dgrp dump length = %d, data = ", len); - for (i = 0; i < len; ++i) - pr_debug("%.2x ", mem[i]); - pr_debug("\n"); -} - -/** - * dgrp_read_data_block() -- Read a data block - * @ch: struct ch_struct * - * @flipbuf: u8 * - * @flipbuf_size: size of flipbuf - */ -static void dgrp_read_data_block(struct ch_struct *ch, u8 *flipbuf, - int flipbuf_size) -{ - int t; - int n; - - if (flipbuf_size <= 0) - return; - - t = RBUF_MAX - ch->ch_rout; - n = flipbuf_size; - - if (n >= t) { - memcpy(flipbuf, ch->ch_rbuf + ch->ch_rout, t); - flipbuf += t; - n -= t; - ch->ch_rout = 0; - } - - memcpy(flipbuf, ch->ch_rbuf + ch->ch_rout, n); - flipbuf += n; - ch->ch_rout += n; -} - - -/** - * dgrp_input() -- send data to the line disipline - * @ch: pointer to channel struct - * - * Copys the rbuf to the flipbuf and sends to line discipline. - * Sends input buffer data to the line discipline. - * - */ -static void dgrp_input(struct ch_struct *ch) -{ - struct nd_struct *nd; - struct tty_struct *tty; - int data_len; - int len; - int tty_count; - ulong lock_flags; - u8 *myflipbuf; - u8 *myflipflagbuf; - - if (!ch) - return; - - nd = ch->ch_nd; - - if (!nd) - return; - - spin_lock_irqsave(&nd->nd_lock, lock_flags); - - myflipbuf = nd->nd_inputbuf; - myflipflagbuf = nd->nd_inputflagbuf; - - if (!ch->ch_open_count) { - ch->ch_rout = ch->ch_rin; - goto out; - } - - if (ch->ch_tun.un_flag & UN_CLOSING) { - ch->ch_rout = ch->ch_rin; - goto out; - } - - tty = (ch->ch_tun).un_tty; - - - if (!tty || tty->magic != TTY_MAGIC) { - ch->ch_rout = ch->ch_rin; - goto out; - } - - tty_count = tty->count; - if (!tty_count) { - ch->ch_rout = ch->ch_rin; - goto out; - } - - if (tty->closing || test_bit(TTY_CLOSING, &tty->flags)) { - ch->ch_rout = ch->ch_rin; - goto out; - } - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - - /* data_len should be the number of chars that we read in */ - data_len = (ch->ch_rin - ch->ch_rout) & RBUF_MASK; - - /* len is the amount of data we are going to transfer here */ - len = tty_buffer_request_room(&ch->port, data_len); - - /* Check DPA flow control */ - if ((nd->nd_dpa_debug) && - (nd->nd_dpa_flag & DPA_WAIT_SPACE) && - (nd->nd_dpa_port == MINOR(tty_devnum(ch->ch_tun.un_tty)))) - len = 0; - - if ((len) && !(ch->ch_flag & CH_RXSTOP)) { - - dgrp_read_data_block(ch, myflipbuf, len); - - if (I_PARMRK(tty) || I_BRKINT(tty) || I_INPCK(tty)) - parity_scan(ch, myflipbuf, myflipflagbuf, &len); - else - memset(myflipflagbuf, TTY_NORMAL, len); - - if ((nd->nd_dpa_debug) && - (nd->nd_dpa_port == PORT_NUM(MINOR(tty_devnum(tty))))) - dgrp_dpa_data(nd, 1, myflipbuf, len); - - tty_insert_flip_string_flags(&ch->port, myflipbuf, - myflipflagbuf, len); - tty_flip_buffer_push(&ch->port); - - ch->ch_rxcount += len; - } - - /* - * Wake up any sleepers (maybe dgrp close) that might be waiting - * for a channel flag state change. - */ - wake_up_interruptible(&ch->ch_flag_wait); - return; - -out: - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); -} - - -/* - * parity_scan - * - * Loop to inspect each single character or 0xFF escape. - * - * if PARMRK & ~DOSMODE: - * 0xFF 0xFF Normal 0xFF character, escaped - * to eliminate confusion. - * 0xFF 0x00 0x00 Break - * 0xFF 0x00 CC Error character CC. - * CC Normal character CC. - * - * if PARMRK & DOSMODE: - * 0xFF 0x18 0x00 Break - * 0xFF 0x08 0x00 Framing Error - * 0xFF 0x04 0x00 Parity error - * 0xFF 0x0C 0x00 Both Framing and Parity error - * - * TODO: do we need to do the XMODEM, XOFF, XON, XANY processing?? - * as per protocol - */ -static void parity_scan(struct ch_struct *ch, unsigned char *cbuf, - unsigned char *fbuf, int *len) -{ - int l = *len; - int count = 0; - int DOS = ((ch->ch_iflag & IF_DOSMODE) == 0 ? 0 : 1); - unsigned char *cout; /* character buffer */ - unsigned char *fout; /* flag buffer */ - unsigned char *in; - unsigned char c; - - in = cbuf; - cout = cbuf; - fout = fbuf; - - while (l--) { - c = *in; - in++; - - switch (ch->ch_pscan_state) { - default: - /* reset to sanity and fall through */ - ch->ch_pscan_state = 0; - - case 0: - /* No FF seen yet */ - if (c == 0xff) /* delete this character from stream */ - ch->ch_pscan_state = 1; - else { - *cout++ = c; - *fout++ = TTY_NORMAL; - count += 1; - } - break; - - case 1: - /* first FF seen */ - if (c == 0xff) { - /* doubled ff, transform to single ff */ - *cout++ = c; - *fout++ = TTY_NORMAL; - count += 1; - ch->ch_pscan_state = 0; - } else { - /* save value examination in next state */ - ch->ch_pscan_savechar = c; - ch->ch_pscan_state = 2; - } - break; - - case 2: - /* third character of ff sequence */ - *cout++ = c; - if (DOS) { - if (ch->ch_pscan_savechar & 0x10) - *fout++ = TTY_BREAK; - else if (ch->ch_pscan_savechar & 0x08) - *fout++ = TTY_FRAME; - else - /* - * either marked as a parity error, - * indeterminate, or not in DOSMODE - * call it a parity error - */ - *fout++ = TTY_PARITY; - } else { - /* case FF XX ?? where XX is not 00 */ - if (ch->ch_pscan_savechar & 0xff) { - /* this should not happen */ - pr_info("%s: parity_scan: error unexpected byte\n", - __func__); - *fout++ = TTY_PARITY; - } - /* case FF 00 XX where XX is not 00 */ - else if (c == 0xff) - *fout++ = TTY_PARITY; - /* case FF 00 00 */ - else - *fout++ = TTY_BREAK; - - } - count += 1; - ch->ch_pscan_state = 0; - } - } - *len = count; -} - - -/** - * dgrp_net_idle() -- Idle the network connection - * @nd: pointer to node structure to idle - */ -static void dgrp_net_idle(struct nd_struct *nd) -{ - struct ch_struct *ch; - int i; - - nd->nd_tx_work = 1; - - nd->nd_state = NS_IDLE; - nd->nd_flag = 0; - - for (i = nd->nd_seq_out; ; i = (i + 1) & SEQ_MASK) { - if (!nd->nd_seq_wait[i]) { - nd->nd_seq_wait[i] = 0; - wake_up_interruptible(&nd->nd_seq_wque[i]); - } - - if (i == nd->nd_seq_in) - break; - } - - nd->nd_seq_out = nd->nd_seq_in; - - nd->nd_unack = 0; - nd->nd_remain = 0; - - nd->nd_tx_module = 0x10; - nd->nd_rx_module = 0x00; - - for (i = 0, ch = nd->nd_chan; i < CHAN_MAX; i++, ch++) { - ch->ch_state = CS_IDLE; - - ch->ch_otype = 0; - ch->ch_otype_waiting = 0; - } -} - -/* - * Increase the number of channels, waking up any - * threads that might be waiting for the channels - * to appear. - */ -static void increase_channel_count(struct nd_struct *nd, int n) -{ - struct ch_struct *ch; - struct device *classp; - char name[DEVICE_NAME_SIZE]; - int ret; - u8 *buf; - int i; - - for (i = nd->nd_chan_count; i < n; ++i) { - ch = nd->nd_chan + i; - - /* FIXME: return a useful error instead! */ - buf = kmalloc(TBUF_MAX, GFP_KERNEL); - if (!buf) - return; - - if (ch->ch_tbuf) - pr_info_ratelimited("%s - ch_tbuf was not NULL\n", - __func__); - - ch->ch_tbuf = buf; - - buf = kmalloc(RBUF_MAX, GFP_KERNEL); - if (!buf) - return; - - if (ch->ch_rbuf) - pr_info("%s - ch_rbuf was not NULL\n", - __func__); - ch->ch_rbuf = buf; - - classp = tty_port_register_device(&ch->port, - nd->nd_serial_ttdriver, i, - NULL); - - ch->ch_tun.un_sysfs = classp; - snprintf(name, DEVICE_NAME_SIZE, "tty_%d", i); - - dgrp_create_tty_sysfs(&ch->ch_tun, classp); - ret = sysfs_create_link(&nd->nd_class_dev->kobj, - &classp->kobj, name); - - /* NOTE: We don't support "cu" devices anymore, - * so you will notice we don't register them - * here anymore. */ - if (dgrp_register_prdevices) { - classp = tty_register_device(nd->nd_xprint_ttdriver, - i, NULL); - ch->ch_pun.un_sysfs = classp; - snprintf(name, DEVICE_NAME_SIZE, "pr_%d", i); - - dgrp_create_tty_sysfs(&ch->ch_pun, classp); - ret = sysfs_create_link(&nd->nd_class_dev->kobj, - &classp->kobj, name); - } - - nd->nd_chan_count = i + 1; - wake_up_interruptible(&ch->ch_flag_wait); - } -} - -/* - * Decrease the number of channels, and wake up any threads that might - * be waiting on the channels that vanished. - */ -static void decrease_channel_count(struct nd_struct *nd, int n) -{ - struct ch_struct *ch; - char name[DEVICE_NAME_SIZE]; - int i; - - for (i = nd->nd_chan_count - 1; i >= n; --i) { - ch = nd->nd_chan + i; - - /* - * Make any open ports inoperative. - */ - ch->ch_state = CS_IDLE; - - ch->ch_otype = 0; - ch->ch_otype_waiting = 0; - - /* - * Only "HANGUP" if we care about carrier - * transitions and we are already open. - */ - if (ch->ch_open_count != 0) { - ch->ch_flag |= CH_HANGUP; - dgrp_carrier(ch); - } - - /* - * Unlike the CH_HANGUP flag above, use another - * flag to indicate to the RealPort state machine - * that this port has disappeared. - */ - if (ch->ch_open_count != 0) - ch->ch_flag |= CH_PORT_GONE; - - wake_up_interruptible(&ch->ch_flag_wait); - - nd->nd_chan_count = i; - - kfree(ch->ch_tbuf); - ch->ch_tbuf = NULL; - - kfree(ch->ch_rbuf); - ch->ch_rbuf = NULL; - - nd->nd_chan_count = i; - - dgrp_remove_tty_sysfs(ch->ch_tun.un_sysfs); - snprintf(name, DEVICE_NAME_SIZE, "tty_%d", i); - sysfs_remove_link(&nd->nd_class_dev->kobj, name); - tty_unregister_device(nd->nd_serial_ttdriver, i); - - /* - * NOTE: We don't support "cu" devices anymore, so don't - * unregister them here anymore. - */ - - if (dgrp_register_prdevices) { - dgrp_remove_tty_sysfs(ch->ch_pun.un_sysfs); - snprintf(name, DEVICE_NAME_SIZE, "pr_%d", i); - sysfs_remove_link(&nd->nd_class_dev->kobj, name); - tty_unregister_device(nd->nd_xprint_ttdriver, i); - } - } -} - -/** - * dgrp_chan_count() -- Adjust the node channel count. - * @nd: pointer to a node structure - * @n: new value for channel count - * - * Adjusts the node channel count. If new ports have appeared, it tries - * to signal those processes that might have been waiting for ports to - * appear. If ports have disappeared it tries to signal those processes - * that might be hung waiting for a response for the now non-existant port. - */ -static void dgrp_chan_count(struct nd_struct *nd, int n) -{ - if (n == nd->nd_chan_count) - return; - - if (n > nd->nd_chan_count) - increase_channel_count(nd, n); - - if (n < nd->nd_chan_count) - decrease_channel_count(nd, n); -} - -/** - * dgrp_monitor() -- send data to the device monitor queue - * @nd: pointer to a node structure - * @buf: data to copy to the monitoring buffer - * @len: number of bytes to transfer to the buffer - * - * Called by the net device routines to send data to the device - * monitor queue. If the device monitor buffer is too full to - * accept the data, it waits until the buffer is ready. - */ -static void dgrp_monitor(struct nd_struct *nd, u8 *buf, int len) -{ - int n; - int r; - int rtn; - - /* - * Grab monitor lock. - */ - down(&nd->nd_mon_semaphore); - - /* - * Loop while data remains. - */ - while ((len > 0) && (nd->nd_mon_buf)) { - /* - * Determine the amount of available space left in the - * buffer. If there's none, wait until some appears. - */ - - n = (nd->nd_mon_out - nd->nd_mon_in - 1) & MON_MASK; - - if (!n) { - nd->nd_mon_flag |= MON_WAIT_SPACE; - - up(&nd->nd_mon_semaphore); - - /* - * Go to sleep waiting until the condition becomes true. - */ - rtn = wait_event_interruptible(nd->nd_mon_wqueue, - ((nd->nd_mon_flag & MON_WAIT_SPACE) == 0)); - -/* FIXME: really ignore rtn? */ - - /* - * We can't exit here if we receive a signal, since - * to do so would trash the debug stream. - */ - - down(&nd->nd_mon_semaphore); - - continue; - } - - /* - * Copy as much data as will fit. - */ - - if (n > len) - n = len; - - r = MON_MAX - nd->nd_mon_in; - - if (r <= n) { - memcpy(nd->nd_mon_buf + nd->nd_mon_in, buf, r); - - n -= r; - - nd->nd_mon_in = 0; - - buf += r; - len -= r; - } - - memcpy(nd->nd_mon_buf + nd->nd_mon_in, buf, n); - - nd->nd_mon_in += n; - - buf += n; - len -= n; - - if (nd->nd_mon_in >= MON_MAX) - pr_info_ratelimited("%s - nd_mon_in (%i) >= MON_MAX\n", - __func__, nd->nd_mon_in); - - /* - * Wakeup any thread waiting for data - */ - - if (nd->nd_mon_flag & MON_WAIT_DATA) { - nd->nd_mon_flag &= ~MON_WAIT_DATA; - wake_up_interruptible(&nd->nd_mon_wqueue); - } - } - - /* - * Release the monitor lock. - */ - up(&nd->nd_mon_semaphore); -} - -/** - * dgrp_encode_time() -- Encodes rpdump time into a 4-byte quantity. - * @nd: pointer to a node structure - * @buf: destination buffer - * - * Encodes "rpdump" time into a 4-byte quantity. Time is measured since - * open. - */ -static void dgrp_encode_time(struct nd_struct *nd, u8 *buf) -{ - ulong t; - - /* - * Convert time in HZ since open to time in milliseconds - * since open. - */ - t = jiffies - nd->nd_mon_lbolt; - t = 1000 * (t / HZ) + 1000 * (t % HZ) / HZ; - - put_unaligned_be32((uint)(t & 0xffffffff), buf); -} - - - -/** - * dgrp_monitor_message() -- Builds a rpdump style message. - * @nd: pointer to a node structure - * @message: destination buffer - */ -static void dgrp_monitor_message(struct nd_struct *nd, char *message) -{ - u8 header[7]; - int n; - - header[0] = RPDUMP_MESSAGE; - - dgrp_encode_time(nd, header + 1); - - n = strlen(message); - - put_unaligned_be16(n, header + 5); - - dgrp_monitor(nd, header, sizeof(header)); - dgrp_monitor(nd, (u8 *) message, n); -} - - - -/** - * dgrp_monitor_reset() -- Note a reset in the monitoring buffer. - * @nd: pointer to a node structure - */ -static void dgrp_monitor_reset(struct nd_struct *nd) -{ - u8 header[5]; - - header[0] = RPDUMP_RESET; - - dgrp_encode_time(nd, header + 1); - - dgrp_monitor(nd, header, sizeof(header)); -} - -/** - * dgrp_monitor_data() -- builds a monitor data packet - * @nd: pointer to a node structure - * @type: type of message to be logged - * @buf: data to be logged - * @size: number of bytes in the buffer - */ -static void dgrp_monitor_data(struct nd_struct *nd, u8 type, u8 *buf, int size) -{ - u8 header[7]; - - header[0] = type; - - dgrp_encode_time(nd, header + 1); - - put_unaligned_be16(size, header + 5); - - dgrp_monitor(nd, header, sizeof(header)); - dgrp_monitor(nd, buf, size); -} - -static int alloc_nd_buffers(struct nd_struct *nd) -{ - - nd->nd_iobuf = NULL; - nd->nd_writebuf = NULL; - nd->nd_inputbuf = NULL; - nd->nd_inputflagbuf = NULL; - - /* - * Allocate the network read/write buffer. - */ - nd->nd_iobuf = kzalloc(UIO_MAX + 10, GFP_KERNEL); - if (!nd->nd_iobuf) - goto out_err; - - /* - * Allocate a buffer for doing the copy from user space to - * kernel space in the write routines. - */ - nd->nd_writebuf = kzalloc(WRITEBUFLEN, GFP_KERNEL); - if (!nd->nd_writebuf) - goto out_err; - - /* - * Allocate a buffer for doing the copy from kernel space to - * tty buffer space in the read routines. - */ - nd->nd_inputbuf = kzalloc(MYFLIPLEN, GFP_KERNEL); - if (!nd->nd_inputbuf) - goto out_err; - - /* - * Allocate a buffer for doing the copy from kernel space to - * tty buffer space in the read routines. - */ - nd->nd_inputflagbuf = kzalloc(MYFLIPLEN, GFP_KERNEL); - if (!nd->nd_inputflagbuf) - goto out_err; - - return 0; - -out_err: - kfree(nd->nd_iobuf); - kfree(nd->nd_writebuf); - kfree(nd->nd_inputbuf); - kfree(nd->nd_inputflagbuf); - return -ENOMEM; -} - -/* - * dgrp_net_open() -- Open the NET device for a particular PortServer - */ -static int dgrp_net_open(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - ulong lock_flags; - int rtn; - - rtn = try_module_get(THIS_MODULE); - if (!rtn) - return -EAGAIN; - - if (!capable(CAP_SYS_ADMIN)) { - rtn = -EPERM; - goto done; - } - - /* - * Make sure that the "private_data" field hasn't already been used. - */ - if (file->private_data) { - rtn = -EINVAL; - goto done; - } - - /* - * Get the node pointer, and fail if it doesn't exist. - */ - nd = PDE_DATA(inode); - if (!nd) { - rtn = -ENXIO; - goto done; - } - - file->private_data = (void *) nd; - - /* - * Grab the NET lock. - */ - down(&nd->nd_net_semaphore); - - if (nd->nd_state != NS_CLOSED) { - rtn = -EBUSY; - goto unlock; - } - - /* - * Initialize the link speed parameters. - */ - - nd->nd_link.lk_fast_rate = UIO_MAX; - nd->nd_link.lk_slow_rate = UIO_MAX; - - nd->nd_link.lk_fast_delay = 1000; - nd->nd_link.lk_slow_delay = 1000; - - nd->nd_link.lk_header_size = 46; - - - rtn = alloc_nd_buffers(nd); - if (rtn) - goto unlock; - - /* - * The port is now open, so move it to the IDLE state - */ - dgrp_net_idle(nd); - - nd->nd_tx_time = jiffies; - - /* - * If the polling routing is not running, start it running here - */ - spin_lock_irqsave(&dgrp_poll_data.poll_lock, lock_flags); - - if (!dgrp_poll_data.node_active_count) { - dgrp_poll_data.node_active_count = 2; - dgrp_poll_data.timer.expires = jiffies + - dgrp_poll_tick * HZ / 1000; - add_timer(&dgrp_poll_data.timer); - } - - spin_unlock_irqrestore(&dgrp_poll_data.poll_lock, lock_flags); - - dgrp_monitor_message(nd, "Net Open"); - -unlock: - /* - * Release the NET lock. - */ - up(&nd->nd_net_semaphore); - -done: - if (rtn) - module_put(THIS_MODULE); - - return rtn; -} - -/* dgrp_net_release() -- close the NET device for a particular PortServer */ -static int dgrp_net_release(struct inode *inode, struct file *file) -{ - struct nd_struct *nd; - ulong lock_flags; - - nd = (struct nd_struct *)(file->private_data); - if (!nd) - goto done; - -/* TODO : historical locking placeholder */ -/* - * In the HPUX version of the RealPort driver (which served as a basis - * for this driver) this locking code was used. Saved if ever we need - * to review the locking under Linux. - */ -/* spinlock(&nd->nd_lock); */ - - - /* - * Grab the NET lock. - */ - down(&nd->nd_net_semaphore); - - /* - * Before "closing" the internal connection, make sure all - * ports are "idle". - */ - dgrp_net_idle(nd); - - nd->nd_state = NS_CLOSED; - nd->nd_flag = 0; - - /* - * TODO ... must the wait queue be reset on close? - * should any pending waiters be reset? - * Let's decide to assert that the waitq is empty... and see - * how soon we break. - */ - if (waitqueue_active(&nd->nd_tx_waitq)) - pr_info("%s - expected waitqueue_active to be false\n", - __func__); - - nd->nd_send = 0; - - kfree(nd->nd_iobuf); - nd->nd_iobuf = NULL; - -/* TODO : historical locking placeholder */ -/* - * In the HPUX version of the RealPort driver (which served as a basis - * for this driver) this locking code was used. Saved if ever we need - * to review the locking under Linux. - */ -/* spinunlock( &nd->nd_lock ); */ - - - kfree(nd->nd_writebuf); - nd->nd_writebuf = NULL; - - kfree(nd->nd_inputbuf); - nd->nd_inputbuf = NULL; - - kfree(nd->nd_inputflagbuf); - nd->nd_inputflagbuf = NULL; - -/* TODO : historical locking placeholder */ -/* - * In the HPUX version of the RealPort driver (which served as a basis - * for this driver) this locking code was used. Saved if ever we need - * to review the locking under Linux. - */ -/* spinlock(&nd->nd_lock); */ - - /* - * Set the active port count to zero. - */ - dgrp_chan_count(nd, 0); - -/* TODO : historical locking placeholder */ -/* - * In the HPUX version of the RealPort driver (which served as a basis - * for this driver) this locking code was used. Saved if ever we need - * to review the locking under Linux. - */ -/* spinunlock(&nd->nd_lock); */ - - /* - * Release the NET lock. - */ - up(&nd->nd_net_semaphore); - - /* - * Cause the poller to stop scheduling itself if this is - * the last active node. - */ - spin_lock_irqsave(&dgrp_poll_data.poll_lock, lock_flags); - - if (dgrp_poll_data.node_active_count == 2) { - del_timer(&dgrp_poll_data.timer); - dgrp_poll_data.node_active_count = 0; - } - - spin_unlock_irqrestore(&dgrp_poll_data.poll_lock, lock_flags); - - down(&nd->nd_net_semaphore); - - dgrp_monitor_message(nd, "Net Close"); - - up(&nd->nd_net_semaphore); - -done: - module_put(THIS_MODULE); - file->private_data = NULL; - return 0; -} - -/* used in dgrp_send to setup command header */ -static inline u8 *set_cmd_header(u8 *b, u8 port, u8 cmd) -{ - *b++ = 0xb0 + (port & 0x0f); - *b++ = cmd; - return b; -} - -/** - * dgrp_send() -- build a packet for transmission to the server - * @nd: pointer to a node structure - * @tmax: maximum bytes to transmit - * - * returns number of bytes sent - */ -static int dgrp_send(struct nd_struct *nd, long tmax) -{ - struct ch_struct *ch = nd->nd_chan; - u8 *b; - u8 *buf; - u8 *mbuf; - u8 port; - int mod; - long send; - int maxport; - long lastport = -1; - ushort rwin; - long in; - ushort n; - long t; - long ttotal; - long tchan; - long tsend; - ushort tsafe; - long work; - long send_sync; - long wanted_sync_port = -1; - ushort tdata[CHAN_MAX]; - long used_buffer; - - mbuf = nd->nd_iobuf + UIO_BASE; - buf = b = mbuf; - - send_sync = nd->nd_link.lk_slow_rate < UIO_MAX; - - ttotal = 0; - tchan = 0; - - memset(tdata, 0, sizeof(tdata)); - - - /* - * If there are any outstanding requests to be serviced, - * service them here. - */ - if (nd->nd_send & NR_PASSWORD) { - - /* - * Send Password response. - */ - - b[0] = 0xfc; - b[1] = 0x20; - put_unaligned_be16(strlen(nd->password), b + 2); - b += 4; - b += strlen(nd->password); - nd->nd_send &= ~(NR_PASSWORD); - } - - - /* - * Loop over all modules to generate commands, and determine - * the amount of data queued for transmit. - */ - - for (mod = 0, port = 0; port < nd->nd_chan_count; mod++) { - /* - * If this is not the current module, enter a module select - * code in the buffer. - */ - - if (mod != nd->nd_tx_module) - mbuf = ++b; - - /* - * Loop to process one module. - */ - - maxport = port + 16; - - if (maxport > nd->nd_chan_count) - maxport = nd->nd_chan_count; - - for (; port < maxport; port++, ch++) { - /* - * Switch based on channel state. - */ - - switch (ch->ch_state) { - /* - * Send requests when the port is closed, and there - * are no Open, Close or Cancel requests expected. - */ - - case CS_IDLE: - /* - * Wait until any open error code - * has been delivered to all - * associated ports. - */ - - if (ch->ch_open_error) { - if (ch->ch_wait_count[ch->ch_otype]) { - work = 1; - break; - } - - ch->ch_open_error = 0; - } - - /* - * Wait until the channel HANGUP flag is reset - * before sending the first open. We can only - * get to this state after a server disconnect. - */ - - if ((ch->ch_flag & CH_HANGUP) != 0) - break; - - /* - * If recovering from a TCP disconnect, or if - * there is an immediate open pending, send an - * Immediate Open request. - */ - if ((ch->ch_flag & CH_PORT_GONE) || - ch->ch_wait_count[OTYPE_IMMEDIATE] != 0) { - b = set_cmd_header(b, port, 10); - *b++ = 0; - - ch->ch_state = CS_WAIT_OPEN; - ch->ch_otype = OTYPE_IMMEDIATE; - break; - } - - /* - * If there is no Persistent or Incoming Open on the wait - * list in the server, and a thread is waiting for a - * Persistent or Incoming Open, send a Persistent or Incoming - * Open Request. - */ - if (ch->ch_otype_waiting == 0) { - if (ch->ch_wait_count[OTYPE_PERSISTENT] != 0) { - b = set_cmd_header(b, port, 10); - *b++ = 1; - - ch->ch_state = CS_WAIT_OPEN; - ch->ch_otype = OTYPE_PERSISTENT; - } else if (ch->ch_wait_count[OTYPE_INCOMING] != 0) { - b = set_cmd_header(b, port, 10); - *b++ = 2; - - ch->ch_state = CS_WAIT_OPEN; - ch->ch_otype = OTYPE_INCOMING; - } - break; - } - - /* - * If a Persistent or Incoming Open is pending in - * the server, but there is no longer an open - * thread waiting for it, cancel the request. - */ - - if (ch->ch_wait_count[ch->ch_otype_waiting] == 0) { - b = set_cmd_header(b, port, 10); - *b++ = 4; - - ch->ch_state = CS_WAIT_CANCEL; - ch->ch_otype = ch->ch_otype_waiting; - } - break; - - /* - * Send port parameter queries. - */ - case CS_SEND_QUERY: - /* - * Clear out all FEP state that might remain - * from the last connection. - */ - - ch->ch_flag |= CH_PARAM; - - ch->ch_flag &= ~CH_RX_FLUSH; - - ch->ch_expect = 0; - - ch->ch_s_tin = 0; - ch->ch_s_tpos = 0; - ch->ch_s_tsize = 0; - ch->ch_s_treq = 0; - ch->ch_s_elast = 0; - - ch->ch_s_rin = 0; - ch->ch_s_rwin = 0; - ch->ch_s_rsize = 0; - - ch->ch_s_tmax = 0; - ch->ch_s_ttime = 0; - ch->ch_s_rmax = 0; - ch->ch_s_rtime = 0; - ch->ch_s_rlow = 0; - ch->ch_s_rhigh = 0; - - ch->ch_s_brate = 0; - ch->ch_s_iflag = 0; - ch->ch_s_cflag = 0; - ch->ch_s_oflag = 0; - ch->ch_s_xflag = 0; - - ch->ch_s_mout = 0; - ch->ch_s_mflow = 0; - ch->ch_s_mctrl = 0; - ch->ch_s_xon = 0; - ch->ch_s_xoff = 0; - ch->ch_s_lnext = 0; - ch->ch_s_xxon = 0; - ch->ch_s_xxoff = 0; - - /* Send Sequence Request */ - b = set_cmd_header(b, port, 14); - - /* Configure Event Conditions Packet */ - b = set_cmd_header(b, port, 42); - put_unaligned_be16(0x02c0, b); - b += 2; - *b++ = (DM_DTR | DM_RTS | DM_CTS | - DM_DSR | DM_RI | DM_CD); - - /* Send Status Request */ - b = set_cmd_header(b, port, 16); - - /* Send Buffer Request */ - b = set_cmd_header(b, port, 20); - - /* Send Port Capability Request */ - b = set_cmd_header(b, port, 22); - - ch->ch_expect = (RR_SEQUENCE | - RR_STATUS | - RR_BUFFER | - RR_CAPABILITY); - - ch->ch_state = CS_WAIT_QUERY; - - /* Raise modem signals */ - b = set_cmd_header(b, port, 44); - - if (ch->ch_flag & CH_PORT_GONE) - ch->ch_s_mout = ch->ch_mout; - else - ch->ch_s_mout = ch->ch_mout = DM_DTR | DM_RTS; - - *b++ = ch->ch_mout; - *b++ = ch->ch_s_mflow = 0; - *b++ = ch->ch_s_mctrl = ch->ch_mctrl = 0; - - if (ch->ch_flag & CH_PORT_GONE) - ch->ch_flag &= ~CH_PORT_GONE; - - break; - - /* - * Handle normal open and ready mode. - */ - - case CS_READY: - - /* - * If the port is not open, and there are no - * no longer any ports requesting an open, - * then close the port. - */ - - if (ch->ch_open_count == 0 && - ch->ch_wait_count[ch->ch_otype] == 0) { - goto send_close; - } - - /* - * Process waiting input. - * - * If there is no one to read it, discard the data. - * - * Otherwise if we are not in fastcook mode, or if there is a - * fastcook thread waiting for data, send the data to the - * line discipline. - */ - if (ch->ch_rin != ch->ch_rout) { - if (ch->ch_tun.un_open_count == 0 || - (ch->ch_tun.un_flag & UN_CLOSING) || - (ch->ch_cflag & CF_CREAD) == 0) { - ch->ch_rout = ch->ch_rin; - } else if ((ch->ch_flag & CH_FAST_READ) == 0 || - ch->ch_inwait != 0) { - dgrp_input(ch); - - if (ch->ch_rin != ch->ch_rout) - work = 1; - } - } - - /* - * Handle receive flush, and changes to - * server port parameters. - */ - - if (ch->ch_flag & (CH_RX_FLUSH | CH_PARAM)) { - /* - * If we are in receive flush mode, - * and enough data has gone by, reset - * receive flush mode. - */ - if (ch->ch_flag & CH_RX_FLUSH) { - if (((ch->ch_flush_seq - nd->nd_seq_out) & SEQ_MASK) > - ((nd->nd_seq_in - nd->nd_seq_out) & SEQ_MASK)) - ch->ch_flag &= ~CH_RX_FLUSH; - else - work = 1; - } - - /* - * Send TMAX, TTIME. - */ - - if (ch->ch_s_tmax != ch->ch_tmax || - ch->ch_s_ttime != ch->ch_ttime) { - b = set_cmd_header(b, port, 48); - - ch->ch_s_tmax = ch->ch_tmax; - ch->ch_s_ttime = ch->ch_ttime; - - put_unaligned_be16(ch->ch_s_tmax, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_ttime, - b); - b += 2; - } - - /* - * Send RLOW, RHIGH. - */ - - if (ch->ch_s_rlow != ch->ch_rlow || - ch->ch_s_rhigh != ch->ch_rhigh) { - b = set_cmd_header(b, port, 45); - - ch->ch_s_rlow = ch->ch_rlow; - ch->ch_s_rhigh = ch->ch_rhigh; - - put_unaligned_be16(ch->ch_s_rlow, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_rhigh, - b); - b += 2; - } - - /* - * Send BRATE, CFLAG, IFLAG, - * OFLAG, XFLAG. - */ - - if (ch->ch_s_brate != ch->ch_brate || - ch->ch_s_cflag != ch->ch_cflag || - ch->ch_s_iflag != ch->ch_iflag || - ch->ch_s_oflag != ch->ch_oflag || - ch->ch_s_xflag != ch->ch_xflag) { - b = set_cmd_header(b, port, 40); - - ch->ch_s_brate = ch->ch_brate; - ch->ch_s_cflag = ch->ch_cflag; - ch->ch_s_iflag = ch->ch_iflag; - ch->ch_s_oflag = ch->ch_oflag; - ch->ch_s_xflag = ch->ch_xflag; - - put_unaligned_be16(ch->ch_s_brate, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_cflag, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_iflag, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_oflag, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_xflag, - b); - b += 2; - } - - /* - * Send MOUT, MFLOW, MCTRL. - */ - - if (ch->ch_s_mout != ch->ch_mout || - ch->ch_s_mflow != ch->ch_mflow || - ch->ch_s_mctrl != ch->ch_mctrl) { - b = set_cmd_header(b, port, 44); - - *b++ = ch->ch_s_mout = ch->ch_mout; - *b++ = ch->ch_s_mflow = ch->ch_mflow; - *b++ = ch->ch_s_mctrl = ch->ch_mctrl; - } - - /* - * Send Flow control characters. - */ - - if (ch->ch_s_xon != ch->ch_xon || - ch->ch_s_xoff != ch->ch_xoff || - ch->ch_s_lnext != ch->ch_lnext || - ch->ch_s_xxon != ch->ch_xxon || - ch->ch_s_xxoff != ch->ch_xxoff) { - b = set_cmd_header(b, port, 46); - - *b++ = ch->ch_s_xon = ch->ch_xon; - *b++ = ch->ch_s_xoff = ch->ch_xoff; - *b++ = ch->ch_s_lnext = ch->ch_lnext; - *b++ = ch->ch_s_xxon = ch->ch_xxon; - *b++ = ch->ch_s_xxoff = ch->ch_xxoff; - } - - /* - * Send RMAX, RTIME. - */ - - if (ch->ch_s_rmax != ch->ch_rmax || - ch->ch_s_rtime != ch->ch_rtime) { - b = set_cmd_header(b, port, 47); - - ch->ch_s_rmax = ch->ch_rmax; - ch->ch_s_rtime = ch->ch_rtime; - - put_unaligned_be16(ch->ch_s_rmax, - b); - b += 2; - - put_unaligned_be16(ch->ch_s_rtime, - b); - b += 2; - } - - ch->ch_flag &= ~CH_PARAM; - wake_up_interruptible(&ch->ch_flag_wait); - } - - - /* - * Handle action commands. - */ - - if (ch->ch_send != 0) { - /* int send = ch->ch_send & ~ch->ch_expect; */ - send = ch->ch_send & ~ch->ch_expect; - - /* Send character immediate */ - if ((send & RR_TX_ICHAR) != 0) { - b = set_cmd_header(b, port, 60); - - *b++ = ch->ch_xon; - ch->ch_expect |= RR_TX_ICHAR; - } - - /* BREAK request */ - if ((send & RR_TX_BREAK) != 0) { - if (ch->ch_break_time != 0) { - b = set_cmd_header(b, port, 61); - put_unaligned_be16(ch->ch_break_time, - b); - b += 2; - - ch->ch_expect |= RR_TX_BREAK; - ch->ch_break_time = 0; - } else { - ch->ch_send &= ~RR_TX_BREAK; - ch->ch_flag &= ~CH_TX_BREAK; - wake_up_interruptible(&ch->ch_flag_wait); - } - } - - /* - * Flush input/output buffers. - */ - - if ((send & (RR_RX_FLUSH | RR_TX_FLUSH)) != 0) { - b = set_cmd_header(b, port, 62); - - *b++ = ((send & RR_TX_FLUSH) == 0 ? 1 : - (send & RR_RX_FLUSH) == 0 ? 2 : 3); - - if (send & RR_RX_FLUSH) { - ch->ch_flush_seq = nd->nd_seq_in; - ch->ch_flag |= CH_RX_FLUSH; - work = 1; - send_sync = 1; - wanted_sync_port = port; - } - - ch->ch_send &= ~(RR_RX_FLUSH | RR_TX_FLUSH); - } - - /* Pause input/output */ - if ((send & (RR_RX_STOP | RR_TX_STOP)) != 0) { - b = set_cmd_header(b, port, 63); - *b = 0; - - if ((send & RR_TX_STOP) != 0) - *b |= EV_OPU; - - if ((send & RR_RX_STOP) != 0) - *b |= EV_IPU; - - b++; - - ch->ch_send &= ~(RR_RX_STOP | RR_TX_STOP); - } - - /* Start input/output */ - if ((send & (RR_RX_START | RR_TX_START)) != 0) { - b = set_cmd_header(b, port, 64); - *b = 0; - - if ((send & RR_TX_START) != 0) - *b |= EV_OPU | EV_OPS | EV_OPX; - - if ((send & RR_RX_START) != 0) - *b |= EV_IPU | EV_IPS; - - b++; - - ch->ch_send &= ~(RR_RX_START | RR_TX_START); - } - } - - - /* - * Send a window sequence to acknowledge received data. - */ - - rwin = (ch->ch_s_rin + - ((ch->ch_rout - ch->ch_rin - 1) & RBUF_MASK)); - - n = (rwin - ch->ch_s_rwin) & 0xffff; - - if (n >= RBUF_MAX / 4) { - b[0] = 0xa0 + (port & 0xf); - ch->ch_s_rwin = rwin; - put_unaligned_be16(rwin, b + 1); - b += 3; - } - - /* - * If the terminal is waiting on LOW - * water or EMPTY, and the condition - * is now satisfied, call the line - * discipline to put more data in the - * buffer. - */ - - n = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - - if ((ch->ch_tun.un_flag & (UN_EMPTY|UN_LOW)) != 0) { - if ((ch->ch_tun.un_flag & UN_LOW) != 0 ? - (n <= TBUF_LOW) : - (n == 0 && ch->ch_s_tpos == ch->ch_s_tin)) { - ch->ch_tun.un_flag &= ~(UN_EMPTY|UN_LOW); - - if (waitqueue_active(&((ch->ch_tun.un_tty)->write_wait))) - wake_up_interruptible(&((ch->ch_tun.un_tty)->write_wait)); - tty_wakeup(ch->ch_tun.un_tty); - n = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - } - } - - /* - * If the printer is waiting on LOW - * water, TIME, EMPTY or PWAIT, and is - * now ready to put more data in the - * buffer, call the line discipline to - * do the job. - */ - - /* FIXME: jiffies - ch->ch_waketime can never - be < 0. Someone needs to work out what is - actually intended here */ - if (ch->ch_pun.un_open_count && - (ch->ch_pun.un_flag & - (UN_EMPTY|UN_TIME|UN_LOW|UN_PWAIT)) != 0) { - - if ((ch->ch_pun.un_flag & UN_LOW) != 0 ? - (n <= TBUF_LOW) : - (ch->ch_pun.un_flag & UN_TIME) != 0 ? - time_is_before_jiffies(ch->ch_waketime) : - (n == 0 && ch->ch_s_tpos == ch->ch_s_tin) && - ((ch->ch_pun.un_flag & UN_EMPTY) != 0 || - ((ch->ch_tun.un_open_count && - ch->ch_tun.un_tty->ops->chars_in_buffer) ? - (ch->ch_tun.un_tty->ops->chars_in_buffer)(ch->ch_tun.un_tty) == 0 - : 1 - ) - )) { - ch->ch_pun.un_flag &= ~(UN_EMPTY | UN_TIME | UN_LOW | UN_PWAIT); - - if (waitqueue_active(&((ch->ch_pun.un_tty)->write_wait))) - wake_up_interruptible(&((ch->ch_pun.un_tty)->write_wait)); - tty_wakeup(ch->ch_pun.un_tty); - n = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - - } else if ((ch->ch_pun.un_flag & UN_TIME) != 0) { - work = 1; - } - } - - - /* - * Determine the max number of bytes - * this port can send, including - * packet header overhead. - */ - - t = ((ch->ch_s_tsize + ch->ch_s_tpos - ch->ch_s_tin) & 0xffff); - - if (n > t) - n = t; - - if (n != 0) { - n += (n <= 8 ? 1 : n <= 255 ? 2 : 3); - - tdata[tchan++] = n; - ttotal += n; - } - break; - - /* - * Close the port. - */ - -send_close: - case CS_SEND_CLOSE: - b = set_cmd_header(b, port, 10); - if (ch->ch_otype == OTYPE_IMMEDIATE) - *b++ = 3; - else - *b++ = 4; - - ch->ch_state = CS_WAIT_CLOSE; - break; - - /* - * Wait for a previous server request. - */ - - case CS_WAIT_OPEN: - case CS_WAIT_CANCEL: - case CS_WAIT_FAIL: - case CS_WAIT_QUERY: - case CS_WAIT_CLOSE: - break; - - default: - pr_info("%s - unexpected channel state (%i)\n", - __func__, ch->ch_state); - } - } - - /* - * If a module select code is needed, drop one in. If space - * was reserved for one, but none is needed, recover the space. - */ - - if (mod != nd->nd_tx_module) { - if (b != mbuf) { - mbuf[-1] = 0xf0 | mod; - nd->nd_tx_module = mod; - } else { - b--; - } - } - } - - /* - * Adjust "tmax" so that under worst case conditions we do - * not overflow either the daemon buffer or the internal - * buffer in the loop that follows. Leave a safe area - * of 64 bytes so we start getting asserts before we start - * losing data or clobbering memory. - */ - - n = UIO_MAX - UIO_BASE; - - if (tmax > n) - tmax = n; - - tmax -= 64; - - tsafe = tmax; - - /* - * Allocate space for 5 Module Selects, 1 Sequence Request, - * and 1 Set TREQ for each active channel. - */ - - tmax -= 5 + 3 + 4 * nd->nd_chan_count; - - /* - * Further reduce "tmax" to the available transmit credit. - * Note that this is a soft constraint; The transmit credit - * can go negative for a time and then recover. - */ - - n = nd->nd_tx_deposit - nd->nd_tx_charge - nd->nd_link.lk_header_size; - - if (tmax > n) - tmax = n; - - /* - * Finally reduce tmax by the number of bytes already in - * the buffer. - */ - - tmax -= b - buf; - - /* - * Suspend data transmit unless every ready channel can send - * at least 1 character. - */ - if (tmax < 2 * nd->nd_chan_count) { - tsend = 1; - - } else if (tchan > 1 && ttotal > tmax) { - - /* - * If transmit is limited by the credit budget, find the - * largest number of characters we can send without driving - * the credit negative. - */ - - long tm = tmax; - int tc = tchan; - int try; - - tsend = tm / tc; - - for (try = 0; try < 3; try++) { - int i; - int c = 0; - - for (i = 0; i < tc; i++) { - if (tsend < tdata[i]) - tdata[c++] = tdata[i]; - else - tm -= tdata[i]; - } - - if (c == tc) - break; - - tsend = tm / c; - - if (c == 1) - break; - - tc = c; - } - - tsend = tm / nd->nd_chan_count; - - if (tsend < 2) - tsend = 1; - - } else { - /* - * If no budgetary constraints, or only one channel ready - * to send, set the character limit to the remaining - * buffer size. - */ - - tsend = tmax; - } - - tsend -= (tsend <= 9) ? 1 : (tsend <= 257) ? 2 : 3; - - /* - * Loop over all channels, sending queued data. - */ - - port = 0; - ch = nd->nd_chan; - used_buffer = tmax; - - for (mod = 0; port < nd->nd_chan_count; mod++) { - /* - * If this is not the current module, enter a module select - * code in the buffer. - */ - - if (mod != nd->nd_tx_module) - mbuf = ++b; - - /* - * Loop to process one module. - */ - - maxport = port + 16; - - if (maxport > nd->nd_chan_count) - maxport = nd->nd_chan_count; - - for (; port < maxport; port++, ch++) { - if (ch->ch_state != CS_READY) - continue; - - lastport = port; - - n = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - - /* - * If there is data that can be sent, send it. - */ - - if (n != 0 && used_buffer > 0) { - t = (ch->ch_s_tsize + ch->ch_s_tpos - ch->ch_s_tin) & 0xffff; - - if (n > t) - n = t; - - if (n > tsend) { - work = 1; - n = tsend; - } - - if (n > used_buffer) { - work = 1; - n = used_buffer; - } - - if (n <= 0) - continue; - - /* - * Create the correct size transmit header, - * depending on the amount of data to transmit. - */ - - if (n <= 8) { - - b[0] = ((n - 1) << 4) + (port & 0xf); - b += 1; - - } else if (n <= 255) { - - b[0] = 0x80 + (port & 0xf); - b[1] = n; - b += 2; - - } else { - - b[0] = 0x90 + (port & 0xf); - put_unaligned_be16(n, b + 1); - b += 3; - } - - ch->ch_s_tin = (ch->ch_s_tin + n) & 0xffff; - - /* - * Copy transmit data to the packet. - */ - - t = TBUF_MAX - ch->ch_tout; - - if (n >= t) { - memcpy(b, ch->ch_tbuf + ch->ch_tout, t); - b += t; - n -= t; - used_buffer -= t; - ch->ch_tout = 0; - } - - memcpy(b, ch->ch_tbuf + ch->ch_tout, n); - b += n; - used_buffer -= n; - ch->ch_tout += n; - n = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - } - - /* - * Wake any terminal unit process waiting in the - * dgrp_write routine for low water. - */ - - if (n > TBUF_LOW) - continue; - - if ((ch->ch_flag & CH_LOW) != 0) { - ch->ch_flag &= ~CH_LOW; - wake_up_interruptible(&ch->ch_flag_wait); - } - - /* selwakeup tty_sel */ - if (ch->ch_tun.un_open_count) { - struct tty_struct *tty = (ch->ch_tun.un_tty); - - if (waitqueue_active(&tty->write_wait)) - wake_up_interruptible(&tty->write_wait); - - tty_wakeup(tty); - } - - if (ch->ch_pun.un_open_count) { - struct tty_struct *tty = (ch->ch_pun.un_tty); - - if (waitqueue_active(&tty->write_wait)) - wake_up_interruptible(&tty->write_wait); - - tty_wakeup(tty); - } - - /* - * Do EMPTY processing. - */ - - if (n != 0) - continue; - - if ((ch->ch_flag & (CH_EMPTY | CH_DRAIN)) != 0 || - (ch->ch_pun.un_flag & UN_EMPTY) != 0) { - /* - * If there is still data in the server, ask the server - * to notify us when its all gone. - */ - - if (ch->ch_s_treq != ch->ch_s_tin) { - b = set_cmd_header(b, port, 43); - - ch->ch_s_treq = ch->ch_s_tin; - put_unaligned_be16(ch->ch_s_treq, - b); - b += 2; - } - - /* - * If there is a thread waiting for buffer empty, - * and we are truly empty, wake the thread. - */ - - else if ((ch->ch_flag & CH_EMPTY) != 0 && - (ch->ch_send & RR_TX_BREAK) == 0) { - ch->ch_flag &= ~CH_EMPTY; - - wake_up_interruptible(&ch->ch_flag_wait); - } - } - } - - /* - * If a module select code is needed, drop one in. If space - * was reserved for one, but none is needed, recover the space. - */ - - if (mod != nd->nd_tx_module) { - if (b != mbuf) { - mbuf[-1] = 0xf0 | mod; - nd->nd_tx_module = mod; - } else { - b--; - } - } - } - - /* - * Send a synchronization sequence associated with the last open - * channel that sent data, and remember the time when the data was - * sent. - */ - - in = nd->nd_seq_in; - - if ((send_sync || nd->nd_seq_wait[in] != 0) && lastport >= 0) { - u8 *bb = b; - - /* - * Attempt the use the port that really wanted the sync. - * This gets around a race condition where the "lastport" is in - * the middle of the close() routine, and by the time we - * send this command, it will have already acked the close, and - * thus not send the sync response. - */ - if (wanted_sync_port >= 0) - lastport = wanted_sync_port; - /* - * Set a flag just in case the port is in the middle of a close, - * it will not be permitted to actually close until we get an - * sync response, and clear the flag there. - */ - ch = nd->nd_chan + lastport; - ch->ch_flag |= CH_WAITING_SYNC; - - mod = lastport >> 4; - - if (mod != nd->nd_tx_module) { - bb[0] = 0xf0 + mod; - bb += 1; - - nd->nd_tx_module = mod; - } - - bb = set_cmd_header(bb, lastport, 12); - *bb++ = in; - - nd->nd_seq_size[in] = bb - buf; - nd->nd_seq_time[in] = jiffies; - - if (++in >= SEQ_MAX) - in = 0; - - if (in != nd->nd_seq_out) { - b = bb; - nd->nd_seq_in = in; - nd->nd_unack += b - buf; - } - } - - /* - * If there are no open ports, a sync cannot be sent. - * There is nothing left to wait for anyway, so wake any - * thread waiting for an acknowledgement. - */ - - else if (nd->nd_seq_wait[in] != 0) { - nd->nd_seq_wait[in] = 0; - - wake_up_interruptible(&nd->nd_seq_wque[in]); - } - - /* - * If there is no traffic for an interval of IDLE_MAX, then - * send a single byte packet. - */ - - if (b != buf) { - nd->nd_tx_time = jiffies; - } else if ((ulong)(jiffies - nd->nd_tx_time) >= IDLE_MAX) { - *b++ = 0xf0 | nd->nd_tx_module; - nd->nd_tx_time = jiffies; - } - - n = b - buf; - - if (n >= tsafe) - pr_info("%s - n(%i) >= tsafe(%i)\n", - __func__, n, tsafe); - - if (tsend < 0) - dgrp_dump(buf, n); - - nd->nd_tx_work = work; - - return n; -} - -/* - * dgrp_net_read() - * Data to be sent TO the PortServer from the "async." half of the driver. - */ -static ssize_t dgrp_net_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) -{ - struct nd_struct *nd; - long n; - u8 *local_buf; - u8 *b; - ssize_t rtn; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - return -ENXIO; - - if (count < UIO_MIN) - return -EINVAL; - - /* - * Only one read/write operation may be in progress at - * any given time. - */ - - /* - * Grab the NET lock. - */ - down(&nd->nd_net_semaphore); - - nd->nd_read_count++; - - nd->nd_tx_ready = 0; - - /* - * Determine the effective size of the buffer. - */ - - if (nd->nd_remain > UIO_BASE) - pr_info_ratelimited("%s - nd_remain(%i) > UIO_BASE\n", - __func__, nd->nd_remain); - - b = local_buf = nd->nd_iobuf + UIO_BASE; - - /* - * Generate data according to the node state. - */ - - switch (nd->nd_state) { - /* - * Initialize the connection. - */ - - case NS_IDLE: - if (nd->nd_mon_buf) - dgrp_monitor_reset(nd); - - /* - * Request a Product ID Packet. - */ - - b[0] = 0xfb; - b[1] = 0x01; - b += 2; - - nd->nd_expect |= NR_IDENT; - - /* - * Request a Server Capability ID Response. - */ - - b[0] = 0xfb; - b[1] = 0x02; - b += 2; - - nd->nd_expect |= NR_CAPABILITY; - - /* - * Request a Server VPD Response. - */ - - b[0] = 0xfb; - b[1] = 0x18; - b += 2; - - nd->nd_expect |= NR_VPD; - - nd->nd_state = NS_WAIT_QUERY; - break; - - /* - * We do serious communication with the server only in - * the READY state. - */ - - case NS_READY: - b = dgrp_send(nd, count) + local_buf; - break; - - /* - * Send off an error after receiving a bogus message - * from the server. - */ - - case NS_SEND_ERROR: - n = strlen(nd->nd_error); - - b[0] = 0xff; - b[1] = n; - memcpy(b + 2, nd->nd_error, n); - b += 2 + n; - - dgrp_net_idle(nd); - /* - * Set the active port count to zero. - */ - dgrp_chan_count(nd, 0); - break; - - default: - break; - } - - n = b - local_buf; - - if (n != 0) { - nd->nd_send_count++; - - nd->nd_tx_byte += n + nd->nd_link.lk_header_size; - nd->nd_tx_charge += n + nd->nd_link.lk_header_size; - } - - rtn = copy_to_user((void __user *)buf, local_buf, n); - if (rtn) { - rtn = -EFAULT; - goto done; - } - - *ppos += n; - - rtn = n; - - if (nd->nd_mon_buf) - dgrp_monitor_data(nd, RPDUMP_CLIENT, local_buf, n); - - /* - * Release the NET lock. - */ -done: - up(&nd->nd_net_semaphore); - - return rtn; -} - -/** - * dgrp_receive() -- decode data packets received from the remote PortServer. - * @nd: pointer to a node structure - */ -static void dgrp_receive(struct nd_struct *nd) -{ - struct ch_struct *ch; - u8 *buf; - u8 *b; - u8 *dbuf; - char *error; - long port; - long dlen; - long plen; - long remain; - long n; - long mlast; - long elast; - long mstat; - long estat; - - char ID[3]; - - nd->nd_tx_time = jiffies; - - ID_TO_CHAR(nd->nd_ID, ID); - - b = buf = nd->nd_iobuf; - remain = nd->nd_remain; - - /* - * Loop to process Realport protocol packets. - */ - - while (remain > 0) { - int n0 = b[0] >> 4; - int n1 = b[0] & 0x0f; - - if (n0 <= 12) { - port = (nd->nd_rx_module << 4) + n1; - - if (port >= nd->nd_chan_count) { - error = "Improper Port Number"; - goto prot_error; - } - - ch = nd->nd_chan + port; - } else { - port = -1; - ch = NULL; - } - - /* - * Process by major packet type. - */ - - switch (n0) { - - /* - * Process 1-byte header data packet. - */ - - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - dlen = n0 + 1; - plen = dlen + 1; - - dbuf = b + 1; - goto data; - - /* - * Process 2-byte header data packet. - */ - - case 8: - if (remain < 3) - goto done; - - dlen = b[1]; - plen = dlen + 2; - - dbuf = b + 2; - goto data; - - /* - * Process 3-byte header data packet. - */ - - case 9: - if (remain < 4) - goto done; - - dlen = get_unaligned_be16(b + 1); - plen = dlen + 3; - - dbuf = b + 3; - - /* - * Common packet handling code. - */ - -data: - nd->nd_tx_work = 1; - - /* - * Otherwise data should appear only when we are - * in the CS_READY state. - */ - - if (ch->ch_state < CS_READY) { - error = "Data received before RWIN established"; - goto prot_error; - } - - /* - * Assure that the data received is within the - * allowable window. - */ - - n = (ch->ch_s_rwin - ch->ch_s_rin) & 0xffff; - - if (dlen > n) { - error = "Receive data overrun"; - goto prot_error; - } - - /* - * If we received 3 or less characters, - * assume it is a human typing, and set RTIME - * to 10 milliseconds. - * - * If we receive 10 or more characters, - * assume its not a human typing, and set RTIME - * to 100 milliseconds. - */ - - if (ch->ch_edelay != DGRP_RTIME) { - if (ch->ch_rtime != ch->ch_edelay) { - ch->ch_rtime = ch->ch_edelay; - ch->ch_flag |= CH_PARAM; - } - } else if (dlen <= 3) { - if (ch->ch_rtime != 10) { - ch->ch_rtime = 10; - ch->ch_flag |= CH_PARAM; - } - } else { - if (ch->ch_rtime != DGRP_RTIME) { - ch->ch_rtime = DGRP_RTIME; - ch->ch_flag |= CH_PARAM; - } - } - - /* - * If a portion of the packet is outside the - * buffer, shorten the effective length of the - * data packet to be the amount of data received. - */ - - if (remain < plen) - dlen -= plen - remain; - - /* - * Detect if receive flush is now complete. - */ - - if ((ch->ch_flag & CH_RX_FLUSH) != 0 && - ((ch->ch_flush_seq - nd->nd_seq_out) & SEQ_MASK) >= - ((nd->nd_seq_in - nd->nd_seq_out) & SEQ_MASK)) { - ch->ch_flag &= ~CH_RX_FLUSH; - } - - /* - * If we are ready to receive, move the data into - * the receive buffer. - */ - - ch->ch_s_rin = (ch->ch_s_rin + dlen) & 0xffff; - - if (ch->ch_state == CS_READY && - (ch->ch_tun.un_open_count != 0) && - (ch->ch_tun.un_flag & UN_CLOSING) == 0 && - (ch->ch_cflag & CF_CREAD) != 0 && - (ch->ch_flag & (CH_BAUD0 | CH_RX_FLUSH)) == 0 && - (ch->ch_send & RR_RX_FLUSH) == 0) { - - if (ch->ch_rin + dlen >= RBUF_MAX) { - n = RBUF_MAX - ch->ch_rin; - - memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, n); - - ch->ch_rin = 0; - dbuf += n; - dlen -= n; - } - - memcpy(ch->ch_rbuf + ch->ch_rin, dbuf, dlen); - - ch->ch_rin += dlen; - - - /* - * If we are not in fastcook mode, or - * if there is a fastcook thread - * waiting for data, send the data to - * the line discipline. - */ - - if ((ch->ch_flag & CH_FAST_READ) == 0 || - ch->ch_inwait != 0) { - dgrp_input(ch); - } - - /* - * If there is a read thread waiting - * in select, and we are in fastcook - * mode, wake him up. - */ - - if (waitqueue_active(&ch->ch_tun.un_tty->read_wait) && - (ch->ch_flag & CH_FAST_READ) != 0) - wake_up_interruptible(&ch->ch_tun.un_tty->read_wait); - - /* - * Wake any thread waiting in the - * fastcook loop. - */ - - if ((ch->ch_flag & CH_INPUT) != 0) { - ch->ch_flag &= ~CH_INPUT; - - wake_up_interruptible(&ch->ch_flag_wait); - } - } - - /* - * Fabricate and insert a data packet header to - * preced the remaining data when it comes in. - */ - - if (remain < plen) { - dlen = plen - remain; - b = buf; - - b[0] = 0x90 + n1; - put_unaligned_be16(dlen, b + 1); - - remain = 3; - goto done; - } - break; - - /* - * Handle Window Sequence packets. - */ - - case 10: - plen = 3; - if (remain < plen) - goto done; - - nd->nd_tx_work = 1; - - { - ushort tpos = get_unaligned_be16(b + 1); - - ushort ack = (tpos - ch->ch_s_tpos) & 0xffff; - ushort unack = (ch->ch_s_tin - ch->ch_s_tpos) & 0xffff; - ushort notify = (ch->ch_s_treq - ch->ch_s_tpos) & 0xffff; - - if (ch->ch_state < CS_READY || ack > unack) { - error = "Improper Window Sequence"; - goto prot_error; - } - - ch->ch_s_tpos = tpos; - - if (notify <= ack) - ch->ch_s_treq = tpos; - } - break; - - /* - * Handle Command response packets. - */ - - case 11: - - /* - * RealPort engine fix - 03/11/2004 - * - * This check did not used to be here. - * - * We were using b[1] without verifying that the data - * is actually there and valid. On a split packet, it - * might not be yet. - * - * NOTE: I have never actually seen the failure happen - * under Linux, but since I have seen it occur - * under both Solaris and HP-UX, the assumption - * is that it *could* happen here as well... - */ - if (remain < 2) - goto done; - - - switch (b[1]) { - - /* - * Handle Open Response. - */ - - case 11: - plen = 6; - if (remain < plen) - goto done; - - nd->nd_tx_work = 1; - - { - int req = b[2]; - int resp = b[3]; - port = get_unaligned_be16(b + 4); - - if (port >= nd->nd_chan_count) { - error = "Open channel number out of range"; - goto prot_error; - } - - ch = nd->nd_chan + port; - - /* - * How we handle an open response depends primarily - * on our current channel state. - */ - - switch (ch->ch_state) { - case CS_IDLE: - - /* - * Handle a delayed open. - */ - - if (ch->ch_otype_waiting != 0 && - req == ch->ch_otype_waiting && - resp == 0) { - ch->ch_otype = req; - ch->ch_otype_waiting = 0; - ch->ch_state = CS_SEND_QUERY; - break; - } - goto open_error; - - case CS_WAIT_OPEN: - - /* - * Handle the open response. - */ - - if (req == ch->ch_otype) { - switch (resp) { - - /* - * On successful response, open the - * port and proceed normally. - */ - - case 0: - ch->ch_state = CS_SEND_QUERY; - break; - - /* - * On a busy response to a persistent open, - * remember that the open is pending. - */ - - case 1: - case 2: - if (req != OTYPE_IMMEDIATE) { - ch->ch_otype_waiting = req; - ch->ch_state = CS_IDLE; - break; - } - - /* - * Otherwise the server open failed. If - * the Unix port is open, hang it up. - */ - - default: - if (ch->ch_open_count != 0) { - ch->ch_flag |= CH_HANGUP; - dgrp_carrier(ch); - ch->ch_state = CS_IDLE; - break; - } - - ch->ch_open_error = resp; - ch->ch_state = CS_IDLE; - - wake_up_interruptible(&ch->ch_flag_wait); - } - break; - } - - /* - * Handle delayed response arrival preceding - * the open response we are waiting for. - */ - - if (ch->ch_otype_waiting != 0 && - req == ch->ch_otype_waiting && - resp == 0) { - ch->ch_otype = ch->ch_otype_waiting; - ch->ch_otype_waiting = 0; - ch->ch_state = CS_WAIT_FAIL; - break; - } - goto open_error; - - - case CS_WAIT_FAIL: - - /* - * Handle response to immediate open arriving - * after a delayed open success. - */ - - if (req == OTYPE_IMMEDIATE) { - ch->ch_state = CS_SEND_QUERY; - break; - } - goto open_error; - - - case CS_WAIT_CANCEL: - /* - * Handle delayed open response arriving before - * the cancel response. - */ - - if (req == ch->ch_otype_waiting && - resp == 0) { - ch->ch_otype_waiting = 0; - break; - } - - /* - * Handle cancel response. - */ - - if (req == 4 && resp == 0) { - ch->ch_otype_waiting = 0; - ch->ch_state = CS_IDLE; - break; - } - goto open_error; - - - case CS_WAIT_CLOSE: - /* - * Handle a successful response to a port - * close. - */ - - if (req >= 3) { - ch->ch_state = CS_IDLE; - break; - } - goto open_error; - -open_error: - default: - { - error = "Improper Open Response"; - goto prot_error; - } - } - } - break; - - /* - * Handle Synchronize Response. - */ - - case 13: - plen = 3; - if (remain < plen) - goto done; - { - int seq = b[2]; - int s; - - /* - * If channel was waiting for this sync response, - * unset the flag, and wake up anyone waiting - * on the event. - */ - if (ch->ch_flag & CH_WAITING_SYNC) { - ch->ch_flag &= ~(CH_WAITING_SYNC); - wake_up_interruptible(&ch->ch_flag_wait); - } - - if (((seq - nd->nd_seq_out) & SEQ_MASK) >= - ((nd->nd_seq_in - nd->nd_seq_out) & SEQ_MASK)) { - break; - } - - for (s = nd->nd_seq_out;; s = (s + 1) & SEQ_MASK) { - if (nd->nd_seq_wait[s] != 0) { - nd->nd_seq_wait[s] = 0; - - wake_up_interruptible(&nd->nd_seq_wque[s]); - } - - nd->nd_unack -= nd->nd_seq_size[s]; - - if (s == seq) - break; - } - - nd->nd_seq_out = (seq + 1) & SEQ_MASK; - } - break; - - /* - * Handle Sequence Response. - */ - - case 15: - plen = 6; - if (remain < plen) - goto done; - - { - /* Record that we have received the Sequence - * Response, but we aren't interested in the - * sequence numbers. We were using RIN like it - * was ROUT and that was causing problems, - * fixed 7-13-2001 David Fries. See comment in - * drp.h for ch_s_rin variable. - int rin = get_unaligned_be16(b + 2); - int tpos = get_unaligned_be16(b + 4); - */ - - ch->ch_send &= ~RR_SEQUENCE; - ch->ch_expect &= ~RR_SEQUENCE; - } - goto check_query; - - /* - * Handle Status Response. - */ - - case 17: - plen = 5; - if (remain < plen) - goto done; - - { - ch->ch_s_elast = get_unaligned_be16(b + 2); - ch->ch_s_mlast = b[4]; - - ch->ch_expect &= ~RR_STATUS; - ch->ch_send &= ~RR_STATUS; - - /* - * CH_PHYS_CD is cleared because something _could_ be - * waiting for the initial sense of carrier... and if - * carrier is high immediately, we want to be sure to - * wake them as soon as possible. - */ - ch->ch_flag &= ~CH_PHYS_CD; - - dgrp_carrier(ch); - } - goto check_query; - - /* - * Handle Line Error Response. - */ - - case 19: - plen = 14; - if (remain < plen) - goto done; - - break; - - /* - * Handle Buffer Response. - */ - - case 21: - plen = 6; - if (remain < plen) - goto done; - - { - ch->ch_s_rsize = get_unaligned_be16(b + 2); - ch->ch_s_tsize = get_unaligned_be16(b + 4); - - ch->ch_send &= ~RR_BUFFER; - ch->ch_expect &= ~RR_BUFFER; - } - goto check_query; - - /* - * Handle Port Capability Response. - */ - - case 23: - plen = 32; - if (remain < plen) - goto done; - - { - ch->ch_send &= ~RR_CAPABILITY; - ch->ch_expect &= ~RR_CAPABILITY; - } - - /* - * When all queries are complete, set those parameters - * derived from the query results, then transition - * to the READY state. - */ - -check_query: - if (ch->ch_state == CS_WAIT_QUERY && - (ch->ch_expect & (RR_SEQUENCE | - RR_STATUS | - RR_BUFFER | - RR_CAPABILITY)) == 0) { - ch->ch_tmax = ch->ch_s_tsize / 4; - - if (ch->ch_edelay == DGRP_TTIME) - ch->ch_ttime = DGRP_TTIME; - else - ch->ch_ttime = ch->ch_edelay; - - ch->ch_rmax = ch->ch_s_rsize / 4; - - if (ch->ch_edelay == DGRP_RTIME) - ch->ch_rtime = DGRP_RTIME; - else - ch->ch_rtime = ch->ch_edelay; - - ch->ch_rlow = 2 * ch->ch_s_rsize / 8; - ch->ch_rhigh = 6 * ch->ch_s_rsize / 8; - - ch->ch_state = CS_READY; - - nd->nd_tx_work = 1; - wake_up_interruptible(&ch->ch_flag_wait); - - } - break; - - default: - goto decode_error; - } - break; - - /* - * Handle Events. - */ - - case 12: - plen = 4; - if (remain < plen) - goto done; - - mlast = ch->ch_s_mlast; - elast = ch->ch_s_elast; - - mstat = ch->ch_s_mlast = b[1]; - estat = ch->ch_s_elast = get_unaligned_be16(b + 2); - - /* - * Handle modem changes. - */ - - if (((mstat ^ mlast) & DM_CD) != 0) - dgrp_carrier(ch); - - - /* - * Handle received break. - */ - - if ((estat & ~elast & EV_RXB) != 0 && - (ch->ch_tun.un_open_count != 0) && - I_BRKINT(ch->ch_tun.un_tty) && - !(I_IGNBRK(ch->ch_tun.un_tty))) { - - tty_buffer_request_room(&ch->port, 1); - tty_insert_flip_char(&ch->port, 0, TTY_BREAK); - tty_flip_buffer_push(&ch->port); - - } - - /* - * On transmit break complete, if more break traffic - * is waiting then send it. Otherwise wake any threads - * waiting for transmitter empty. - */ - - if ((~estat & elast & EV_TXB) != 0 && - (ch->ch_expect & RR_TX_BREAK) != 0) { - - nd->nd_tx_work = 1; - - ch->ch_expect &= ~RR_TX_BREAK; - - if (ch->ch_break_time != 0) { - ch->ch_send |= RR_TX_BREAK; - } else { - ch->ch_send &= ~RR_TX_BREAK; - ch->ch_flag &= ~CH_TX_BREAK; - wake_up_interruptible(&ch->ch_flag_wait); - } - } - break; - - case 13: - case 14: - error = "Unrecognized command"; - goto prot_error; - - /* - * Decode Special Codes. - */ - - case 15: - switch (n1) { - /* - * One byte module select. - */ - - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - plen = 1; - nd->nd_rx_module = n1; - break; - - /* - * Two byte module select. - */ - - case 8: - plen = 2; - if (remain < plen) - goto done; - - nd->nd_rx_module = b[1]; - break; - - /* - * ID Request packet. - */ - - case 11: - if (remain < 4) - goto done; - - plen = get_unaligned_be16(b + 2); - - if (plen < 12 || plen > 1000) { - error = "Response Packet length error"; - goto prot_error; - } - - nd->nd_tx_work = 1; - - switch (b[1]) { - /* - * Echo packet. - */ - - case 0: - nd->nd_send |= NR_ECHO; - break; - - /* - * ID Response packet. - */ - - case 1: - nd->nd_send |= NR_IDENT; - break; - - /* - * ID Response packet. - */ - - case 32: - nd->nd_send |= NR_PASSWORD; - break; - - } - break; - - /* - * Various node-level response packets. - */ - - case 12: - if (remain < 4) - goto done; - - plen = get_unaligned_be16(b + 2); - - if (plen < 4 || plen > 1000) { - error = "Response Packet length error"; - goto prot_error; - } - - nd->nd_tx_work = 1; - - switch (b[1]) { - /* - * Echo packet. - */ - - case 0: - nd->nd_expect &= ~NR_ECHO; - break; - - /* - * Product Response Packet. - */ - - case 1: - { - int desclen; - - nd->nd_hw_ver = (b[8] << 8) | b[9]; - nd->nd_sw_ver = (b[10] << 8) | b[11]; - nd->nd_hw_id = b[6]; - desclen = (plen - 12 > MAX_DESC_LEN - 1) ? MAX_DESC_LEN - 1 : - plen - 12; - - if (desclen <= 0) { - error = "Response Packet desclen error"; - goto prot_error; - } - - strncpy(nd->nd_ps_desc, b + 12, desclen); - nd->nd_ps_desc[desclen] = 0; - } - - nd->nd_expect &= ~NR_IDENT; - break; - - /* - * Capability Response Packet. - */ - - case 2: - { - int nn = get_unaligned_be16(b + 4); - - if (nn > CHAN_MAX) - nn = CHAN_MAX; - - dgrp_chan_count(nd, nn); - } - - nd->nd_expect &= ~NR_CAPABILITY; - break; - - /* - * VPD Response Packet. - */ - - case 15: - /* - * NOTE: case 15 is here ONLY because the EtherLite - * is broken, and sends a response to 24 back as 15. - * To resolve this, the EtherLite firmware is now - * fixed to send back 24 correctly, but, for backwards - * compatibility, we now have reserved 15 for the - * bad EtherLite response to 24 as well. - */ - - /* Fallthru! */ - - case 24: - - /* - * If the product doesn't support VPD, - * it will send back a null IDRESP, - * which is a length of 4 bytes. - */ - if (plen > 4) { - memcpy(nd->nd_vpd, b + 4, min(plen - 4, (long) VPDSIZE)); - nd->nd_vpd_len = min(plen - 4, (long) VPDSIZE); - } - - nd->nd_expect &= ~NR_VPD; - break; - - default: - goto decode_error; - } - - if (nd->nd_expect == 0 && - nd->nd_state == NS_WAIT_QUERY) { - nd->nd_state = NS_READY; - } - break; - - /* - * Debug packet. - */ - - case 14: - if (remain < 4) - goto done; - - plen = get_unaligned_be16(b + 2) + 4; - - if (plen > 1000) { - error = "Debug Packet too large"; - goto prot_error; - } - - if (remain < plen) - goto done; - break; - - /* - * Handle reset packet. - */ - - case 15: - if (remain < 2) - goto done; - - plen = 2 + b[1]; - - if (remain < plen) - goto done; - - nd->nd_tx_work = 1; - - n = b[plen]; - b[plen] = 0; - - b[plen] = n; - - error = "Client Reset Acknowledge"; - goto prot_error; - - default: - goto decode_error; - } - break; - - default: - goto decode_error; - } - - b += plen; - remain -= plen; - } - - /* - * When the buffer is exhausted, copy any data left at the - * top of the buffer back down to the bottom for the next - * read request. - */ - -done: - if (remain > 0 && b != buf) - memcpy(buf, b, remain); - - nd->nd_remain = remain; - return; - -/* - * Handle a decode error. - */ - -decode_error: - error = "Protocol decode error"; - -/* - * Handle a general protocol error. - */ - -prot_error: - nd->nd_remain = 0; - nd->nd_state = NS_SEND_ERROR; - nd->nd_error = error; -} - -/* - * dgrp_net_write() -- write data to the network device. - * - * A zero byte write indicates that the connection to the RealPort - * device has been broken. - * - * A non-zero write indicates data from the RealPort device. - */ -static ssize_t dgrp_net_write(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) -{ - struct nd_struct *nd; - ssize_t rtn = 0; - long n; - long total = 0; - - /* - * Get the node pointer, and quit if it doesn't exist. - */ - nd = (struct nd_struct *)(file->private_data); - if (!nd) - return -ENXIO; - - /* - * Grab the NET lock. - */ - down(&nd->nd_net_semaphore); - - nd->nd_write_count++; - - /* - * Handle disconnect. - */ - - if (count == 0) { - dgrp_net_idle(nd); - /* - * Set the active port count to zero. - */ - dgrp_chan_count(nd, 0); - goto unlock; - } - - /* - * Loop to process entire receive packet. - */ - - while (count > 0) { - n = UIO_MAX - nd->nd_remain; - - if (n > count) - n = count; - - nd->nd_rx_byte += n + nd->nd_link.lk_header_size; - - rtn = copy_from_user(nd->nd_iobuf + nd->nd_remain, - (void __user *) buf + total, n); - if (rtn) { - rtn = -EFAULT; - goto unlock; - } - - *ppos += n; - - total += n; - - count -= n; - - if (nd->nd_mon_buf) - dgrp_monitor_data(nd, RPDUMP_SERVER, - nd->nd_iobuf + nd->nd_remain, n); - - nd->nd_remain += n; - - dgrp_receive(nd); - } - - rtn = total; - -unlock: - /* - * Release the NET lock. - */ - up(&nd->nd_net_semaphore); - - return rtn; -} - - -/* - * dgrp_net_select() - * Determine whether a device is ready to be read or written to, and - * sleep if not. - */ -static unsigned int dgrp_net_select(struct file *file, - struct poll_table_struct *table) -{ - unsigned int retval = 0; - struct nd_struct *nd = file->private_data; - - poll_wait(file, &nd->nd_tx_waitq, table); - - if (nd->nd_tx_ready) - retval |= POLLIN | POLLRDNORM; /* Conditionally readable */ - - retval |= POLLOUT | POLLWRNORM; /* Always writeable */ - - return retval; -} - -/* - * dgrp_net_ioctl - * - * Implement those functions which allow the network daemon to control - * the network parameters in the driver. The ioctls include ones to - * get and set the link speed parameters for the PortServer. - */ -static long dgrp_net_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - struct nd_struct *nd; - int rtn = 0; - long size = _IOC_SIZE(cmd); - struct link_struct link; - - nd = file->private_data; - - if (_IOC_DIR(cmd) & _IOC_READ) - rtn = access_ok(VERIFY_WRITE, (void __user *) arg, size); - else if (_IOC_DIR(cmd) & _IOC_WRITE) - rtn = access_ok(VERIFY_READ, (void __user *) arg, size); - - if (!rtn) - return rtn; - - switch (cmd) { - case DIGI_SETLINK: - if (size != sizeof(struct link_struct)) - return -EINVAL; - - if (copy_from_user(&link, (void __user *)arg, size)) - return -EFAULT; - - if (link.lk_fast_rate < 9600) - link.lk_fast_rate = 9600; - - if (link.lk_slow_rate < 2400) - link.lk_slow_rate = 2400; - - if (link.lk_fast_rate > 10000000) - link.lk_fast_rate = 10000000; - - if (link.lk_slow_rate > link.lk_fast_rate) - link.lk_slow_rate = link.lk_fast_rate; - - if (link.lk_fast_delay > 2000) - link.lk_fast_delay = 2000; - - if (link.lk_slow_delay > 10000) - link.lk_slow_delay = 10000; - - if (link.lk_fast_delay < 60) - link.lk_fast_delay = 60; - - if (link.lk_slow_delay < link.lk_fast_delay) - link.lk_slow_delay = link.lk_fast_delay; - - if (link.lk_header_size < 2) - link.lk_header_size = 2; - - if (link.lk_header_size > 128) - link.lk_header_size = 128; - - link.lk_fast_rate /= 8 * 1000 / dgrp_poll_tick; - link.lk_slow_rate /= 8 * 1000 / dgrp_poll_tick; - - link.lk_fast_delay /= dgrp_poll_tick; - link.lk_slow_delay /= dgrp_poll_tick; - - nd->nd_link = link; - - break; - - case DIGI_GETLINK: - if (size != sizeof(struct link_struct)) - return -EINVAL; - - if (copy_to_user((void __user *)arg, (void *)(&nd->nd_link), - size)) - return -EFAULT; - - break; - - default: - return -EINVAL; - - } - - return 0; -} - -/** - * dgrp_poll_handler() -- handler for poll timer - * - * As each timer expires, it determines (a) whether the "transmit" - * waiter needs to be woken up, and (b) whether the poller needs to - * be rescheduled. - */ -void dgrp_poll_handler(unsigned long arg) -{ - struct dgrp_poll_data *poll_data; - struct nd_struct *nd; - struct link_struct *lk; - ulong time; - ulong poll_time; - ulong freq; - ulong lock_flags; - - poll_data = (struct dgrp_poll_data *) arg; - freq = 1000 / poll_data->poll_tick; - poll_data->poll_round += 17; - - if (poll_data->poll_round >= freq) - poll_data->poll_round -= freq; - - /* - * Loop to process all open nodes. - * - * For each node, determine the rate at which it should - * be transmitting data. Then if the node should wake up - * and transmit data now, enable the net receive select - * to get the transmit going. - */ - - list_for_each_entry(nd, &nd_struct_list, list) { - - lk = &nd->nd_link; - - /* - * Decrement statistics. These are only for use with - * KME, so don't worry that the operations are done - * unlocked, and so the results are occasionally wrong. - */ - - nd->nd_read_count -= (nd->nd_read_count + - poll_data->poll_round) / freq; - nd->nd_write_count -= (nd->nd_write_count + - poll_data->poll_round) / freq; - nd->nd_send_count -= (nd->nd_send_count + - poll_data->poll_round) / freq; - nd->nd_tx_byte -= (nd->nd_tx_byte + - poll_data->poll_round) / freq; - nd->nd_rx_byte -= (nd->nd_rx_byte + - poll_data->poll_round) / freq; - - /* - * Wake the daemon to transmit data only when there is - * enough byte credit to send data. - * - * The results are approximate because the operations - * are performed unlocked, and we are inspecting - * data asynchronously updated elsewhere. The whole - * thing is just approximation anyway, so that should - * be okay. - */ - - if (lk->lk_slow_rate >= UIO_MAX) { - - nd->nd_delay = 0; - nd->nd_rate = UIO_MAX; - - nd->nd_tx_deposit = nd->nd_tx_charge + 3 * UIO_MAX; - nd->nd_tx_credit = 3 * UIO_MAX; - - } else { - - long rate; - long delay; - long deposit; - long charge; - long size; - long excess; - - long seq_in = nd->nd_seq_in; - long seq_out = nd->nd_seq_out; - - /* - * If there are no outstanding packets, run at the - * fastest rate. - */ - - if (seq_in == seq_out) { - delay = 0; - rate = lk->lk_fast_rate; - } - - /* - * Otherwise compute the transmit rate based on the - * delay since the oldest packet. - */ - - else { - /* - * The actual delay is computed as the - * time since the oldest unacknowledged - * packet was sent, minus the time it - * took to send that packet to the server. - */ - - delay = ((jiffies - nd->nd_seq_time[seq_out]) - - (nd->nd_seq_size[seq_out] / - lk->lk_fast_rate)); - - /* - * If the delay is less than the "fast" - * delay, transmit full speed. If greater - * than the "slow" delay, transmit at the - * "slow" speed. In between, interpolate - * between the fast and slow speeds. - */ - - rate = - (delay <= lk->lk_fast_delay ? - lk->lk_fast_rate : - delay >= lk->lk_slow_delay ? - lk->lk_slow_rate : - (lk->lk_slow_rate + - (lk->lk_slow_delay - delay) * - (lk->lk_fast_rate - lk->lk_slow_rate) / - (lk->lk_slow_delay - lk->lk_fast_delay) - ) - ); - } - - nd->nd_delay = delay; - nd->nd_rate = rate; - - /* - * Increase the transmit credit by depositing the - * current transmit rate. - */ - - deposit = nd->nd_tx_deposit; - charge = nd->nd_tx_charge; - - deposit += rate; - - /* - * If the available transmit credit becomes too large, - * reduce the deposit to correct the value. - * - * Too large is the max of: - * 6 times the header size - * 3 times the current transmit rate. - */ - - size = 2 * nd->nd_link.lk_header_size; - - if (size < rate) - size = rate; - - size *= 3; - - excess = deposit - charge - size; - - if (excess > 0) - deposit -= excess; - - nd->nd_tx_deposit = deposit; - nd->nd_tx_credit = deposit - charge; - - /* - * Wake the transmit task only if the transmit credit - * is at least 3 times the transmit header size. - */ - - size = 3 * lk->lk_header_size; - - if (nd->nd_tx_credit < size) - continue; - } - - - /* - * Enable the READ select to wake the daemon if there - * is useful work for the drp_read routine to perform. - */ - - if (waitqueue_active(&nd->nd_tx_waitq) && - (nd->nd_tx_work != 0 || - (ulong)(jiffies - nd->nd_tx_time) >= IDLE_MAX)) { - nd->nd_tx_ready = 1; - - wake_up_interruptible(&nd->nd_tx_waitq); - - /* not needed */ - /* nd->nd_flag &= ~ND_SELECT; */ - } - } - - - /* - * Schedule ourself back at the nominal wakeup interval. - */ - spin_lock_irqsave(&poll_data->poll_lock, lock_flags); - - poll_data->node_active_count--; - if (poll_data->node_active_count > 0) { - poll_data->node_active_count++; - poll_time = poll_data->timer.expires + - poll_data->poll_tick * HZ / 1000; - - time = poll_time - jiffies; - - if (time >= 2 * poll_data->poll_tick) - poll_time = jiffies + dgrp_poll_tick * HZ / 1000; - - poll_data->timer.expires = poll_time; - add_timer(&poll_data->timer); - } - - spin_unlock_irqrestore(&poll_data->poll_lock, lock_flags); -} diff --git a/drivers/staging/dgrp/dgrp_ports_ops.c b/drivers/staging/dgrp/dgrp_ports_ops.c deleted file mode 100644 index 4ce030815f27..000000000000 --- a/drivers/staging/dgrp/dgrp_ports_ops.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * - * Copyright 1999-2000 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; 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. - * - */ - -/* - * - * Filename: - * - * dgrp_ports_ops.c - * - * Description: - * - * Handle the file operations required for the /proc/dgrp/ports/... - * devices. Basically gathers tty status for the node and returns it. - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include -#include - -#include "dgrp_common.h" - -/* File operation declarations */ -static int dgrp_ports_open(struct inode *, struct file *); - -const struct file_operations dgrp_ports_ops = { - .owner = THIS_MODULE, - .open = dgrp_ports_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; - -static void *dgrp_ports_seq_start(struct seq_file *seq, loff_t *pos) -{ - if (*pos == 0) - seq_puts(seq, "#num tty_open pr_open tot_wait MSTAT IFLAG OFLAG CFLAG BPS DIGIFLAGS\n"); - - return pos; -} - -static void *dgrp_ports_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - struct nd_struct *nd = seq->private; - - if (*pos >= nd->nd_chan_count) - return NULL; - - *pos += 1; - - return pos; -} - -static void dgrp_ports_seq_stop(struct seq_file *seq, void *v) -{ -} - -static int dgrp_ports_seq_show(struct seq_file *seq, void *v) -{ - loff_t *pos = v; - struct nd_struct *nd; - struct ch_struct *ch; - struct un_struct *tun, *pun; - unsigned int totcnt; - - nd = seq->private; - if (!nd) - return 0; - - if (*pos >= nd->nd_chan_count) - return 0; - - ch = &nd->nd_chan[*pos]; - tun = &ch->ch_tun; - pun = &ch->ch_pun; - - /* - * If port is not open and no one is waiting to - * open it, the modem signal values can't be - * trusted, and will be zeroed. - */ - totcnt = tun->un_open_count + - pun->un_open_count + - ch->ch_wait_count[0] + - ch->ch_wait_count[1] + - ch->ch_wait_count[2]; - - seq_printf(seq, "%02d %02d %02d %02d 0x%04X 0x%04X 0x%04X 0x%04X %-6d 0x%04X\n", - (int) *pos, - tun->un_open_count, - pun->un_open_count, - ch->ch_wait_count[0] + - ch->ch_wait_count[1] + - ch->ch_wait_count[2], - (totcnt ? ch->ch_s_mlast : 0), - ch->ch_s_iflag, - ch->ch_s_oflag, - ch->ch_s_cflag, - (ch->ch_s_brate ? (1843200 / ch->ch_s_brate) : 0), - ch->ch_digi.digi_flags); - - return 0; -} - -static const struct seq_operations ports_seq_ops = { - .start = dgrp_ports_seq_start, - .next = dgrp_ports_seq_next, - .stop = dgrp_ports_seq_stop, - .show = dgrp_ports_seq_show, -}; - -/** - * dgrp_ports_open -- open the /proc/dgrp/ports/... device - * @inode: struct inode * - * @file: struct file * - * - * Open function to open the /proc/dgrp/ports device for a PortServer. - * This is the open function for struct file_operations - */ -static int dgrp_ports_open(struct inode *inode, struct file *file) -{ - struct seq_file *seq; - int rtn; - - rtn = seq_open(file, &ports_seq_ops); - if (!rtn) { - seq = file->private_data; - seq->private = PDE_DATA(inode); - } - - return rtn; -} diff --git a/drivers/staging/dgrp/dgrp_specproc.c b/drivers/staging/dgrp/dgrp_specproc.c deleted file mode 100644 index 205d80ef4455..000000000000 --- a/drivers/staging/dgrp/dgrp_specproc.c +++ /dev/null @@ -1,541 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * James Puzzo - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_specproc.c - * - * Description: - * - * Handle the "config" proc entry for the linux realport device driver - * and provide slots for the "net" and "mon" devices - * - * Author: - * - * James A. Puzzo - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "dgrp_common.h" - -static struct proc_dir_entry *dgrp_proc_dir_entry; - -static int dgrp_add_id(long id); -static int dgrp_remove_nd(struct nd_struct *nd); -static struct proc_dir_entry *add_proc_file(struct nd_struct *node, - struct proc_dir_entry *root, - const struct file_operations *fops); - -/* File operation declarations */ -static int parse_write_config(char *); - -static ssize_t dgrp_config_proc_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *pos); - -static int dgrp_nodeinfo_proc_open(struct inode *inode, struct file *file); -static int dgrp_info_proc_open(struct inode *inode, struct file *file); -static int dgrp_config_proc_open(struct inode *inode, struct file *file); - -static const struct file_operations config_proc_file_ops = { - .owner = THIS_MODULE, - .open = dgrp_config_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, - .write = dgrp_config_proc_write, -}; - -static const struct file_operations info_proc_file_ops = { - .owner = THIS_MODULE, - .open = dgrp_info_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static const struct file_operations nodeinfo_proc_file_ops = { - .owner = THIS_MODULE, - .open = dgrp_nodeinfo_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static struct proc_dir_entry *net_entry_pointer; -static struct proc_dir_entry *mon_entry_pointer; -static struct proc_dir_entry *dpa_entry_pointer; -static struct proc_dir_entry *ports_entry_pointer; - -static void remove_files(struct nd_struct *nd) -{ - char buf[3]; - ID_TO_CHAR(nd->nd_ID, buf); - dgrp_remove_node_class_sysfs_files(nd); - if (nd->nd_net_de) - remove_proc_entry(buf, net_entry_pointer); - if (nd->nd_mon_de) - remove_proc_entry(buf, mon_entry_pointer); - if (nd->nd_dpa_de) - remove_proc_entry(buf, dpa_entry_pointer); - if (nd->nd_ports_de) - remove_proc_entry(buf, ports_entry_pointer); -} - -void dgrp_unregister_proc(void) -{ - net_entry_pointer = NULL; - mon_entry_pointer = NULL; - dpa_entry_pointer = NULL; - ports_entry_pointer = NULL; - - if (dgrp_proc_dir_entry) { - struct nd_struct *nd; - list_for_each_entry(nd, &nd_struct_list, list) - remove_files(nd); - remove_proc_entry("dgrp/config", NULL); - remove_proc_entry("dgrp/info", NULL); - remove_proc_entry("dgrp/nodeinfo", NULL); - remove_proc_entry("dgrp/net", NULL); - remove_proc_entry("dgrp/mon", NULL); - remove_proc_entry("dgrp/dpa", NULL); - remove_proc_entry("dgrp/ports", NULL); - remove_proc_entry("dgrp", NULL); - dgrp_proc_dir_entry = NULL; - } -} - -void dgrp_register_proc(void) -{ - /* - * Register /proc/dgrp - */ - dgrp_proc_dir_entry = proc_mkdir("dgrp", NULL); - if (!dgrp_proc_dir_entry) - return; - proc_create("dgrp/config", 0644, NULL, &config_proc_file_ops); - proc_create("dgrp/info", 0644, NULL, &info_proc_file_ops); - proc_create("dgrp/nodeinfo", 0644, NULL, &nodeinfo_proc_file_ops); - net_entry_pointer = proc_mkdir_mode("dgrp/net", 0500, NULL); - mon_entry_pointer = proc_mkdir_mode("dgrp/mon", 0500, NULL); - dpa_entry_pointer = proc_mkdir_mode("dgrp/dpa", 0500, NULL); - ports_entry_pointer = proc_mkdir_mode("dgrp/ports", 0500, NULL); -} - -static void *dgrp_config_proc_start(struct seq_file *m, loff_t *pos) -{ - return seq_list_start_head(&nd_struct_list, *pos); -} - -static void *dgrp_config_proc_next(struct seq_file *p, void *v, loff_t *pos) -{ - return seq_list_next(v, &nd_struct_list, pos); -} - -static void dgrp_config_proc_stop(struct seq_file *m, void *v) -{ -} - -static int dgrp_config_proc_show(struct seq_file *m, void *v) -{ - struct nd_struct *nd; - char tmp_id[4]; - - if (v == &nd_struct_list) { - seq_puts(m, "#-----------------------------------------------------------------------------\n"); - seq_puts(m, "# Avail\n"); - seq_puts(m, "# ID Major State Ports\n"); - return 0; - } - - nd = list_entry(v, struct nd_struct, list); - - ID_TO_CHAR(nd->nd_ID, tmp_id); - - seq_printf(m, " %-2.2s %-5ld %-10.10s %-5d\n", - tmp_id, - nd->nd_major, - ND_STATE_STR(nd->nd_state), - nd->nd_chan_count); - - return 0; -} - -static const struct seq_operations proc_config_ops = { - .start = dgrp_config_proc_start, - .next = dgrp_config_proc_next, - .stop = dgrp_config_proc_stop, - .show = dgrp_config_proc_show, -}; - -static int dgrp_config_proc_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &proc_config_ops); -} - - -/* - * When writing configuration information, each "record" (i.e. each - * write) is treated as an independent request. See the "parse" - * description for more details. - */ -static ssize_t dgrp_config_proc_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *pos) -{ - ssize_t retval; - char *inbuf, *sp; - char *line, *ldelim; - - if (count > 32768) - return -EINVAL; - - inbuf = sp = vzalloc(count + 1); - if (!inbuf) - return -ENOMEM; - - if (copy_from_user(inbuf, buffer, count)) { - retval = -EFAULT; - goto done; - } - - inbuf[count] = 0; - - ldelim = "\n"; - - line = strpbrk(sp, ldelim); - while (line) { - *line = 0; - retval = parse_write_config(sp); - if (retval) - goto done; - - sp = line + 1; - line = strpbrk(sp, ldelim); - } - - retval = count; -done: - vfree(inbuf); - return retval; -} - -/* - * ------------------------------------------------------------------------ - * - * The following are the functions to parse input - * - * ------------------------------------------------------------------------ - */ -static inline char *skip_past_ws(const char *str) -{ - while ((*str) && !isspace(*str)) - ++str; - - return skip_spaces(str); -} - -static int parse_id(char **c, char *cID) -{ - int tmp = **c; - - if (isalnum(tmp) || (tmp == '_')) - cID[0] = tmp; - else - return -EINVAL; - - (*c)++; tmp = **c; - - if (isalnum(tmp) || (tmp == '_')) { - cID[1] = tmp; - (*c)++; - } else - cID[1] = 0; - - return 0; -} - -static int parse_add_config(char *buf) -{ - char *c = buf; - int retval; - char cID[2]; - long ID; - - c = skip_past_ws(c); - - retval = parse_id(&c, cID); - if (retval < 0) - return retval; - - ID = CHAR_TO_ID(cID); - - c = skip_past_ws(c); - - return dgrp_add_id(ID); -} - -static int parse_del_config(char *buf) -{ - char *c = buf; - int retval; - struct nd_struct *nd; - char cID[2]; - long ID; - long major; - - c = skip_past_ws(c); - - retval = parse_id(&c, cID); - if (retval < 0) - return retval; - - ID = CHAR_TO_ID(cID); - - c = skip_past_ws(c); - - retval = kstrtol(c, 10, &major); - if (retval) - return retval; - - nd = nd_struct_get(major); - if (!nd) - return -EINVAL; - - if ((nd->nd_major != major) || (nd->nd_ID != ID)) - return -EINVAL; - - return dgrp_remove_nd(nd); -} - -static int parse_chg_config(char *buf) -{ - return -EINVAL; -} - -/* - * The passed character buffer represents a single configuration request. - * If the first character is a "+", it is parsed as a request to add a - * PortServer - * If the first character is a "-", it is parsed as a request to delete a - * PortServer - * If the first character is a "*", it is parsed as a request to change a - * PortServer - * Any other character (including whitespace) causes the record to be - * ignored. - */ -static int parse_write_config(char *buf) -{ - int retval; - - switch (buf[0]) { - case '+': - retval = parse_add_config(buf); - break; - case '-': - retval = parse_del_config(buf); - break; - case '*': - retval = parse_chg_config(buf); - break; - default: - retval = -EINVAL; - } - - return retval; -} - -static int dgrp_info_proc_show(struct seq_file *m, void *v) -{ - seq_printf(m, "version: %s\n", DIGI_VERSION); - seq_puts(m, "register_with_sysfs: 1\n"); - seq_printf(m, "pollrate: 0x%08x\t(%d)\n", - dgrp_poll_tick, dgrp_poll_tick); - - return 0; -} - -static int dgrp_info_proc_open(struct inode *inode, struct file *file) -{ - return single_open(file, dgrp_info_proc_show, NULL); -} - - -static void *dgrp_nodeinfo_start(struct seq_file *m, loff_t *pos) -{ - return seq_list_start_head(&nd_struct_list, *pos); -} - -static void *dgrp_nodeinfo_next(struct seq_file *p, void *v, loff_t *pos) -{ - return seq_list_next(v, &nd_struct_list, pos); -} - -static void dgrp_nodeinfo_stop(struct seq_file *m, void *v) -{ -} - -static int dgrp_nodeinfo_show(struct seq_file *m, void *v) -{ - struct nd_struct *nd; - char hwver[8]; - char swver[8]; - char tmp_id[4]; - - if (v == &nd_struct_list) { - seq_puts(m, "#-----------------------------------------------------------------------------\n"); - seq_puts(m, "# HW HW SW\n"); - seq_puts(m, "# ID State Version ID Version Description\n"); - return 0; - } - - nd = list_entry(v, struct nd_struct, list); - - ID_TO_CHAR(nd->nd_ID, tmp_id); - - if (nd->nd_state == NS_READY) { - sprintf(hwver, "%d.%d", (nd->nd_hw_ver >> 8) & 0xff, - nd->nd_hw_ver & 0xff); - sprintf(swver, "%d.%d", (nd->nd_sw_ver >> 8) & 0xff, - nd->nd_sw_ver & 0xff); - seq_printf(m, " %-2.2s %-10.10s %-7.7s %-3d %-7.7s %-35.35s\n", - tmp_id, - ND_STATE_STR(nd->nd_state), - hwver, - nd->nd_hw_id, - swver, - nd->nd_ps_desc); - - } else { - seq_printf(m, " %-2.2s %-10.10s\n", - tmp_id, - ND_STATE_STR(nd->nd_state)); - } - - return 0; -} - - -static const struct seq_operations nodeinfo_ops = { - .start = dgrp_nodeinfo_start, - .next = dgrp_nodeinfo_next, - .stop = dgrp_nodeinfo_stop, - .show = dgrp_nodeinfo_show, -}; - -static int dgrp_nodeinfo_proc_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &nodeinfo_ops); -} - -/** - * dgrp_add_id() -- creates new nd struct and adds it to list - * @id: id of device to add - */ -static int dgrp_add_id(long id) -{ - struct nd_struct *nd; - int ret; - int i; - - nd = kzalloc(sizeof(struct nd_struct), GFP_KERNEL); - if (!nd) - return -ENOMEM; - - nd->nd_major = 0; - nd->nd_ID = id; - - spin_lock_init(&nd->nd_lock); - - init_waitqueue_head(&nd->nd_tx_waitq); - init_waitqueue_head(&nd->nd_mon_wqueue); - init_waitqueue_head(&nd->nd_dpa_wqueue); - sema_init(&nd->nd_mon_semaphore, 1); - sema_init(&nd->nd_net_semaphore, 1); - spin_lock_init(&nd->nd_dpa_lock); - nd->nd_state = NS_CLOSED; - for (i = 0; i < SEQ_MAX; i++) - init_waitqueue_head(&nd->nd_seq_wque[i]); - - /* setup the structures to get the major number */ - ret = dgrp_tty_init(nd); - if (ret) - goto error_out; - - nd->nd_major = nd->nd_serial_ttdriver->major; - - ret = nd_struct_add(nd); - if (ret) - goto error_out; - - dgrp_create_node_class_sysfs_files(nd); - nd->nd_net_de = add_proc_file(nd, net_entry_pointer, &dgrp_net_ops); - nd->nd_mon_de = add_proc_file(nd, mon_entry_pointer, &dgrp_mon_ops); - nd->nd_dpa_de = add_proc_file(nd, dpa_entry_pointer, &dgrp_dpa_ops); - nd->nd_ports_de = add_proc_file(nd, ports_entry_pointer, - &dgrp_ports_ops); - return 0; - - /* FIXME this guy should free the tty driver stored in nd and destroy - * all channel ports */ -error_out: - kfree(nd); - return ret; - -} - -static int dgrp_remove_nd(struct nd_struct *nd) -{ - int ret; - - /* Check to see if the selected structure is in use */ - if (nd->nd_tty_ref_cnt) - return -EBUSY; - - remove_files(nd); - - dgrp_tty_uninit(nd); - - ret = nd_struct_del(nd); - if (ret) - return ret; - - kfree(nd); - return 0; -} - -static struct proc_dir_entry *add_proc_file(struct nd_struct *node, - struct proc_dir_entry *root, - const struct file_operations *fops) -{ - char buf[3]; - ID_TO_CHAR(node->nd_ID, buf); - return proc_create_data(buf, 0600, root, fops, node); -} diff --git a/drivers/staging/dgrp/dgrp_sysfs.c b/drivers/staging/dgrp/dgrp_sysfs.c deleted file mode 100644 index 2f9345ff0abb..000000000000 --- a/drivers/staging/dgrp/dgrp_sysfs.c +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright 2004 Digi International (www.digi.com) - * Scott H Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -#include "dgrp_common.h" - -#include -#include -#include -#include -#include -#include -#include - - -#define PORTSERVER_DIVIDEND 1843200 -#define SERIAL_TYPE_NORMAL 1 -#define SERIAL_TYPE_CALLOUT 2 -#define SERIAL_TYPE_XPRINT 3 - - -static struct class *dgrp_class; -static struct device *dgrp_class_nodes_dev; -static struct device *dgrp_class_global_settings_dev; - - -static ssize_t dgrp_class_version_show(struct class *class, - struct class_attribute *attr, char *buf) -{ - return snprintf(buf, PAGE_SIZE, "%s\n", DIGI_VERSION); -} -static CLASS_ATTR(driver_version, 0400, dgrp_class_version_show, NULL); - - -static ssize_t dgrp_class_register_with_sysfs_show(struct device *c, - struct device_attribute *attr, - char *buf) -{ - return snprintf(buf, PAGE_SIZE, "1\n"); -} -static DEVICE_ATTR(register_with_sysfs, 0400, - dgrp_class_register_with_sysfs_show, NULL); - - -static ssize_t dgrp_class_pollrate_show(struct device *c, - struct device_attribute *attr, - char *buf) -{ - return snprintf(buf, PAGE_SIZE, "%d\n", dgrp_poll_tick); -} - -static ssize_t dgrp_class_pollrate_store(struct device *c, - struct device_attribute *attr, - const char *buf, size_t count) -{ - if (sscanf(buf, "0x%x\n", &dgrp_poll_tick) != 1) - return -EINVAL; - - return count; -} -static DEVICE_ATTR(pollrate, 0600, dgrp_class_pollrate_show, - dgrp_class_pollrate_store); - -static struct attribute *dgrp_sysfs_global_settings_entries[] = { - &dev_attr_pollrate.attr, - &dev_attr_register_with_sysfs.attr, - NULL -}; - - -static struct attribute_group dgrp_global_settings_attribute_group = { - .name = NULL, - .attrs = dgrp_sysfs_global_settings_entries, -}; - - - -int dgrp_create_class_sysfs_files(void) -{ - int ret = 0; - int max_majors = 1U << (32 - MINORBITS); - - dgrp_class = class_create(THIS_MODULE, "digi_realport"); - if (IS_ERR(dgrp_class)) - return PTR_ERR(dgrp_class); - ret = class_create_file(dgrp_class, &class_attr_driver_version); - if (ret) - goto err_class; - - dgrp_class_global_settings_dev = device_create(dgrp_class, NULL, - MKDEV(0, max_majors + 1), NULL, "driver_settings"); - if (IS_ERR(dgrp_class_global_settings_dev)) { - ret = PTR_ERR(dgrp_class_global_settings_dev); - goto err_file; - } - ret = sysfs_create_group(&dgrp_class_global_settings_dev->kobj, - &dgrp_global_settings_attribute_group); - if (ret) { - pr_alert("%s: failed to create sysfs global settings device attributes.\n", - __func__); - goto err_dev1; - } - - dgrp_class_nodes_dev = device_create(dgrp_class, NULL, - MKDEV(0, max_majors + 2), NULL, "nodes"); - if (IS_ERR(dgrp_class_nodes_dev)) { - ret = PTR_ERR(dgrp_class_nodes_dev); - goto err_group; - } - - return 0; -err_group: - sysfs_remove_group(&dgrp_class_global_settings_dev->kobj, - &dgrp_global_settings_attribute_group); -err_dev1: - device_destroy(dgrp_class, MKDEV(0, max_majors + 1)); -err_file: - class_remove_file(dgrp_class, &class_attr_driver_version); -err_class: - class_destroy(dgrp_class); - return ret; -} - - -void dgrp_remove_class_sysfs_files(void) -{ - struct nd_struct *nd; - int max_majors = 1U << (32 - MINORBITS); - - list_for_each_entry(nd, &nd_struct_list, list) - dgrp_remove_node_class_sysfs_files(nd); - - sysfs_remove_group(&dgrp_class_global_settings_dev->kobj, - &dgrp_global_settings_attribute_group); - - class_remove_file(dgrp_class, &class_attr_driver_version); - - device_destroy(dgrp_class, MKDEV(0, max_majors + 1)); - device_destroy(dgrp_class, MKDEV(0, max_majors + 2)); - class_destroy(dgrp_class); -} - -static ssize_t dgrp_node_state_show(struct device *c, - struct device_attribute *attr, char *buf) -{ - struct nd_struct *nd; - - if (!c) - return 0; - nd = dev_get_drvdata(c); - if (!nd) - return 0; - - return snprintf(buf, PAGE_SIZE, "%s\n", ND_STATE_STR(nd->nd_state)); -} - -static DEVICE_ATTR(state, 0600, dgrp_node_state_show, NULL); - -static ssize_t dgrp_node_description_show(struct device *c, - struct device_attribute *attr, - char *buf) -{ - struct nd_struct *nd; - - if (!c) - return 0; - nd = dev_get_drvdata(c); - if (!nd) - return 0; - - if (nd->nd_state == NS_READY) - return snprintf(buf, PAGE_SIZE, "%s\n", nd->nd_ps_desc); - return 0; -} -static DEVICE_ATTR(description_info, 0600, dgrp_node_description_show, NULL); - -static ssize_t dgrp_node_hw_version_show(struct device *c, - struct device_attribute *attr, - char *buf) -{ - struct nd_struct *nd; - - if (!c) - return 0; - nd = dev_get_drvdata(c); - if (!nd) - return 0; - - if (nd->nd_state == NS_READY) - return snprintf(buf, PAGE_SIZE, "%d.%d\n", - (nd->nd_hw_ver >> 8) & 0xff, - nd->nd_hw_ver & 0xff); - - return 0; -} -static DEVICE_ATTR(hw_version_info, 0600, dgrp_node_hw_version_show, NULL); - -static ssize_t dgrp_node_hw_id_show(struct device *c, - struct device_attribute *attr, char *buf) -{ - struct nd_struct *nd; - - if (!c) - return 0; - nd = dev_get_drvdata(c); - if (!nd) - return 0; - - - if (nd->nd_state == NS_READY) - return snprintf(buf, PAGE_SIZE, "%d\n", nd->nd_hw_id); - return 0; -} -static DEVICE_ATTR(hw_id_info, 0600, dgrp_node_hw_id_show, NULL); - -static ssize_t dgrp_node_sw_version_show(struct device *c, - struct device_attribute *attr, - char *buf) -{ - struct nd_struct *nd; - - if (!c) - return 0; - - nd = dev_get_drvdata(c); - if (!nd) - return 0; - - if (nd->nd_state == NS_READY) - return snprintf(buf, PAGE_SIZE, "%d.%d\n", - (nd->nd_sw_ver >> 8) & 0xff, - nd->nd_sw_ver & 0xff); - - return 0; -} -static DEVICE_ATTR(sw_version_info, 0600, dgrp_node_sw_version_show, NULL); - - -static struct attribute *dgrp_sysfs_node_entries[] = { - &dev_attr_state.attr, - &dev_attr_description_info.attr, - &dev_attr_hw_version_info.attr, - &dev_attr_hw_id_info.attr, - &dev_attr_sw_version_info.attr, - NULL -}; - - -static struct attribute_group dgrp_node_attribute_group = { - .name = NULL, - .attrs = dgrp_sysfs_node_entries, -}; - - -void dgrp_create_node_class_sysfs_files(struct nd_struct *nd) -{ - int ret; - char name[10]; - - if (nd->nd_ID) - ID_TO_CHAR(nd->nd_ID, name); - else - sprintf(name, "node%ld", nd->nd_major); - - nd->nd_class_dev = device_create(dgrp_class, dgrp_class_nodes_dev, - MKDEV(0, nd->nd_major), NULL, "%s", name); - - ret = sysfs_create_group(&nd->nd_class_dev->kobj, - &dgrp_node_attribute_group); - - if (ret) { - pr_alert("%s: failed to create sysfs node device attributes.\n", - __func__); - sysfs_remove_group(&nd->nd_class_dev->kobj, - &dgrp_node_attribute_group); - return; - } - - dev_set_drvdata(nd->nd_class_dev, nd); - -} - - -void dgrp_remove_node_class_sysfs_files(struct nd_struct *nd) -{ - if (nd->nd_class_dev) { - sysfs_remove_group(&nd->nd_class_dev->kobj, - &dgrp_node_attribute_group); - - device_destroy(dgrp_class, MKDEV(0, nd->nd_major)); - nd->nd_class_dev = NULL; - } -} - - - -static ssize_t dgrp_tty_state_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - - return snprintf(buf, PAGE_SIZE, "%s\n", - un->un_open_count ? "Open" : "Closed"); -} -static DEVICE_ATTR(state_info, 0600, dgrp_tty_state_show, NULL); - -static ssize_t dgrp_tty_baud_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%d\n", - un->un_open_count ? (PORTSERVER_DIVIDEND / ch->ch_s_brate) : 0); -} -static DEVICE_ATTR(baud_info, 0400, dgrp_tty_baud_show, NULL); - - -static ssize_t dgrp_tty_msignals_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - - if (ch->ch_open_count) { - return snprintf(buf, PAGE_SIZE, "%s %s %s %s %s %s\n", - (ch->ch_s_mlast & DM_RTS) ? "RTS" : "", - (ch->ch_s_mlast & DM_CTS) ? "CTS" : "", - (ch->ch_s_mlast & DM_DTR) ? "DTR" : "", - (ch->ch_s_mlast & DM_DSR) ? "DSR" : "", - (ch->ch_s_mlast & DM_CD) ? "DCD" : "", - (ch->ch_s_mlast & DM_RI) ? "RI" : ""); - } - return 0; -} -static DEVICE_ATTR(msignals_info, 0400, dgrp_tty_msignals_show, NULL); - - -static ssize_t dgrp_tty_iflag_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_s_iflag); -} -static DEVICE_ATTR(iflag_info, 0600, dgrp_tty_iflag_show, NULL); - - -static ssize_t dgrp_tty_cflag_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_s_cflag); -} -static DEVICE_ATTR(cflag_info, 0600, dgrp_tty_cflag_show, NULL); - - -static ssize_t dgrp_tty_oflag_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_s_oflag); -} -static DEVICE_ATTR(oflag_info, 0600, dgrp_tty_oflag_show, NULL); - - -static ssize_t dgrp_tty_digi_flag_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_digi.digi_flags); -} -static DEVICE_ATTR(digi_flag_info, 0600, dgrp_tty_digi_flag_show, NULL); - - -static ssize_t dgrp_tty_rxcount_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%d\n", ch->ch_rxcount); -} -static DEVICE_ATTR(rxcount_info, 0600, dgrp_tty_rxcount_show, NULL); - - -static ssize_t dgrp_tty_txcount_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct ch_struct *ch; - struct un_struct *un; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - return snprintf(buf, PAGE_SIZE, "%d\n", ch->ch_txcount); -} -static DEVICE_ATTR(txcount_info, 0600, dgrp_tty_txcount_show, NULL); - - -static ssize_t dgrp_tty_name_show(struct device *d, - struct device_attribute *attr, char *buf) -{ - struct nd_struct *nd; - struct ch_struct *ch; - struct un_struct *un; - char name[10]; - - if (!d) - return 0; - un = dev_get_drvdata(d); - if (!un) - return 0; - ch = un->un_ch; - if (!ch) - return 0; - nd = ch->ch_nd; - if (!nd) - return 0; - - ID_TO_CHAR(nd->nd_ID, name); - - return snprintf(buf, PAGE_SIZE, "%s%s%02d\n", - un->un_type == SERIAL_TYPE_XPRINT ? "pr" : "tty", - name, ch->ch_portnum); -} -static DEVICE_ATTR(custom_name, 0600, dgrp_tty_name_show, NULL); - - -static struct attribute *dgrp_sysfs_tty_entries[] = { - &dev_attr_state_info.attr, - &dev_attr_baud_info.attr, - &dev_attr_msignals_info.attr, - &dev_attr_iflag_info.attr, - &dev_attr_cflag_info.attr, - &dev_attr_oflag_info.attr, - &dev_attr_digi_flag_info.attr, - &dev_attr_rxcount_info.attr, - &dev_attr_txcount_info.attr, - &dev_attr_custom_name.attr, - NULL -}; - - -static struct attribute_group dgrp_tty_attribute_group = { - .name = NULL, - .attrs = dgrp_sysfs_tty_entries, -}; - - -void dgrp_create_tty_sysfs(struct un_struct *un, struct device *c) -{ - int ret; - - ret = sysfs_create_group(&c->kobj, &dgrp_tty_attribute_group); - if (ret) { - pr_alert("%s: failed to create sysfs tty device attributes.\n", - __func__); - sysfs_remove_group(&c->kobj, &dgrp_tty_attribute_group); - return; - } - - dev_set_drvdata(c, un); - -} - - -void dgrp_remove_tty_sysfs(struct device *c) -{ - sysfs_remove_group(&c->kobj, &dgrp_tty_attribute_group); -} diff --git a/drivers/staging/dgrp/dgrp_tty.c b/drivers/staging/dgrp/dgrp_tty.c deleted file mode 100644 index 30d26029b21e..000000000000 --- a/drivers/staging/dgrp/dgrp_tty.c +++ /dev/null @@ -1,3337 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * Gene Olson - * James Puzzo - * Jeff Randall - * Scott Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/* - * - * Filename: - * - * dgrp_tty.c - * - * Description: - * - * This file implements the tty driver functionality for the - * RealPort driver software. - * - * Author: - * - * James A. Puzzo - * Ann-Marie Westgate - * - */ - -#include -#include -#include -#include -#include -#include - -#include "dgrp_common.h" - -#ifndef _POSIX_VDISABLE -#define _POSIX_VDISABLE ('\0') -#endif - -/* - * forward declarations - */ - -static void drp_param(struct ch_struct *); -static void dgrp_tty_close(struct tty_struct *, struct file *); - -/* ioctl helper functions */ -static int set_modem_info(struct ch_struct *, unsigned int, unsigned int *); -static int get_modem_info(struct ch_struct *, unsigned int *); -static void dgrp_set_custom_speed(struct ch_struct *, int); -static int dgrp_tty_digigetedelay(struct tty_struct *, int *); -static int dgrp_tty_digisetedelay(struct tty_struct *, int *); -static int dgrp_send_break(struct ch_struct *, int); - -static ushort tty_to_ch_flags(struct tty_struct *, char); -static tcflag_t ch_to_tty_flags(unsigned short, char); - -static void dgrp_tty_input_start(struct tty_struct *); -static void dgrp_tty_input_stop(struct tty_struct *); - -static void drp_wmove(struct ch_struct *, int, void*, int); - -static int dgrp_tty_open(struct tty_struct *, struct file *); -static void dgrp_tty_close(struct tty_struct *, struct file *); -static int dgrp_tty_write(struct tty_struct *, const unsigned char *, int); -static int dgrp_tty_write_room(struct tty_struct *); -static void dgrp_tty_flush_buffer(struct tty_struct *); -static int dgrp_tty_chars_in_buffer(struct tty_struct *); -static int dgrp_tty_ioctl(struct tty_struct *, unsigned int, unsigned long); -static void dgrp_tty_set_termios(struct tty_struct *, struct ktermios *); -static void dgrp_tty_stop(struct tty_struct *); -static void dgrp_tty_start(struct tty_struct *); -static void dgrp_tty_throttle(struct tty_struct *); -static void dgrp_tty_unthrottle(struct tty_struct *); -static void dgrp_tty_hangup(struct tty_struct *); -static int dgrp_tty_put_char(struct tty_struct *, unsigned char); -static int dgrp_tty_tiocmget(struct tty_struct *); -static int dgrp_tty_tiocmset(struct tty_struct *, unsigned int, unsigned int); -static int dgrp_tty_send_break(struct tty_struct *, int); -static void dgrp_tty_send_xchar(struct tty_struct *, char); - -/* - * tty defines - */ -#define SERIAL_TYPE_NORMAL 1 -#define SERIAL_TYPE_CALLOUT 2 -#define SERIAL_TYPE_XPRINT 3 - - -/* - * tty globals/statics - */ - - -#define PORTSERVER_DIVIDEND 1843200 - -/* - * Default transparent print information. - */ -static struct digi_struct digi_init = { - .digi_flags = DIGI_COOK, /* Flags */ - .digi_maxcps = 100, /* Max CPS */ - .digi_maxchar = 50, /* Max chars in print queue */ - .digi_bufsize = 100, /* Printer buffer size */ - .digi_onlen = 4, /* size of printer on string */ - .digi_offlen = 4, /* size of printer off string */ - .digi_onstr = "\033[5i", /* ANSI printer on string */ - .digi_offstr = "\033[4i", /* ANSI printer off string */ - .digi_term = "ansi" /* default terminal type */ -}; - -/* - * Define a local default termios struct. All ports will be created - * with this termios initially. - * - * This defines a raw port at 9600 baud, 8 data bits, no parity, - * 1 stop bit. - */ -static struct ktermios DefaultTermios = { - .c_iflag = (ICRNL | IXON), - .c_oflag = (OPOST | ONLCR), - .c_cflag = (B9600 | CS8 | CREAD | HUPCL | CLOCAL), - .c_lflag = (ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHOCTL - | ECHOKE | IEXTEN), - .c_cc = INIT_C_CC, - .c_line = 0, -}; - -/* Define our tty operations struct */ -static const struct tty_operations dgrp_tty_ops = { - .open = dgrp_tty_open, - .close = dgrp_tty_close, - .write = dgrp_tty_write, - .write_room = dgrp_tty_write_room, - .flush_buffer = dgrp_tty_flush_buffer, - .chars_in_buffer = dgrp_tty_chars_in_buffer, - .flush_chars = NULL, - .ioctl = dgrp_tty_ioctl, - .set_termios = dgrp_tty_set_termios, - .stop = dgrp_tty_stop, - .start = dgrp_tty_start, - .throttle = dgrp_tty_throttle, - .unthrottle = dgrp_tty_unthrottle, - .hangup = dgrp_tty_hangup, - .put_char = dgrp_tty_put_char, - .tiocmget = dgrp_tty_tiocmget, - .tiocmset = dgrp_tty_tiocmset, - .break_ctl = dgrp_tty_send_break, - .send_xchar = dgrp_tty_send_xchar -}; - - -static int calc_baud_rate(struct un_struct *un) -{ - int i; - int brate; - - struct baud_rates { - unsigned int rate; - unsigned int cflag; - }; - - static struct baud_rates baud_rates[] = { - { 921600, B921600 }, - { 460800, B460800 }, - { 230400, B230400 }, - { 115200, B115200 }, - { 57600, B57600 }, - { 38400, B38400 }, - { 19200, B19200 }, - { 9600, B9600 }, - { 4800, B4800 }, - { 2400, B2400 }, - { 1200, B1200 }, - { 600, B600 }, - { 300, B300 }, - { 200, B200 }, - { 150, B150 }, - { 134, B134 }, - { 110, B110 }, - { 75, B75 }, - { 50, B50 }, - { 0, B9600 } - }; - - brate = C_BAUD(un->un_tty); - - for (i = 0; baud_rates[i].rate; i++) { - if (baud_rates[i].cflag == brate) - break; - } - - return baud_rates[i].rate; -} - -static int calc_fastbaud_rate(struct un_struct *un, struct ktermios *uts) -{ - int i; - int brate; - - ulong bauds[2][16] = { - { /* fastbaud*/ - 0, 57600, 76800, 115200, - 131657, 153600, 230400, 460800, - 921600, 1200, 1800, 2400, - 4800, 9600, 19200, 38400 }, - { /* fastbaud & CBAUDEX */ - 0, 57600, 115200, 230400, - 460800, 150, 200, 921600, - 600, 1200, 1800, 2400, - 4800, 9600, 19200, 38400 } - }; - - brate = C_BAUD(un->un_tty) & 0xff; - - i = (uts->c_cflag & CBAUDEX) ? 1 : 0; - - - if ((i >= 0) && (i < 2) && (brate >= 0) && (brate < 16)) - brate = bauds[i][brate]; - else - brate = 0; - - return brate; -} - -/** - * drp_param() -- send parameter values to be sent to the node - * @ch: channel structure of port to modify - * - * Interprets the tty and modem changes made by an application - * program (by examining the termios structures) and sets up - * parameter values to be sent to the node. - */ -static void drp_param(struct ch_struct *ch) -{ - struct nd_struct *nd; - struct un_struct *un; - int brate; - int mflow; - int xflag; - int iflag; - struct ktermios *tts, *pts, *uts; - - nd = ch->ch_nd; - - /* - * If the terminal device is open, use it to set up all tty - * modes and functions. Otherwise use the printer device. - */ - - if (ch->ch_tun.un_open_count) { - - un = &ch->ch_tun; - tts = &ch->ch_tun.un_tty->termios; - - /* - * If both devices are open, copy critical line - * parameters from the tty device to the printer, - * so that if the tty is closed, the printer will - * continue without disruption. - */ - - if (ch->ch_pun.un_open_count) { - - pts = &ch->ch_pun.un_tty->termios; - - pts->c_cflag ^= - (pts->c_cflag ^ tts->c_cflag) & - (CBAUD | CSIZE | CSTOPB | CREAD | PARENB | - PARODD | HUPCL | CLOCAL); - - pts->c_iflag ^= - (pts->c_iflag ^ tts->c_iflag) & - (IGNBRK | BRKINT | IGNPAR | PARMRK | INPCK | - ISTRIP | IXON | IXANY | IXOFF); - - pts->c_cc[VSTART] = tts->c_cc[VSTART]; - pts->c_cc[VSTOP] = tts->c_cc[VSTOP]; - } - } else if (ch->ch_pun.un_open_count == 0) { - pr_warn("%s - ch_pun.un_open_count shouldn't be 0\n", - __func__); - return; - } else { - un = &ch->ch_pun; - } - - uts = &un->un_tty->termios; - - /* - * Determine if FAST writes can be performed. - */ - - if ((ch->ch_digi.digi_flags & DIGI_COOK) != 0 && - (ch->ch_tun.un_open_count != 0) && - !((un->un_tty)->ldisc->ops->flags & LDISC_FLAG_DEFINED) && - !(L_XCASE(un->un_tty))) { - ch->ch_flag |= CH_FAST_WRITE; - } else { - ch->ch_flag &= ~CH_FAST_WRITE; - } - - /* - * If FAST writes can be performed, and OPOST is on in the - * terminal device, do OPOST handling in the server. - */ - - if ((ch->ch_flag & CH_FAST_WRITE) && - O_OPOST(un->un_tty) != 0) { - int oflag = tty_to_ch_flags(un->un_tty, 'o'); - - /* add to ch_ocook any processing flags set in the termio */ - ch->ch_ocook |= oflag & (OF_OLCUC | - OF_ONLCR | - OF_OCRNL | - OF_ONLRET | - OF_TABDLY); - - /* - * the hpux driver clears any flags set in ch_ocook - * from the termios oflag. It is STILL reported though - * by a TCGETA - */ - - oflag = ch_to_tty_flags(ch->ch_ocook, 'o'); - uts->c_oflag &= ~oflag; - - } else { - /* clear the ch->ch_ocook flag */ - int oflag = ch_to_tty_flags(ch->ch_ocook, 'o'); - uts->c_oflag |= oflag; - ch->ch_ocook = 0; - } - - ch->ch_oflag = ch->ch_ocook; - - - ch->ch_flag &= ~CH_FAST_READ; - - /* - * Generate channel flags - */ - - if (C_BAUD(un->un_tty) == B0) { - if (!(ch->ch_flag & CH_BAUD0)) { - /* TODO : the HPUX driver flushes line */ - /* TODO : discipline, I assume I don't have to */ - - ch->ch_tout = ch->ch_tin; - ch->ch_rout = ch->ch_rin; - - ch->ch_break_time = 0; - - ch->ch_send |= RR_TX_FLUSH | RR_RX_FLUSH; - - ch->ch_mout &= ~(DM_DTR | DM_RTS); - - ch->ch_flag |= CH_BAUD0; - } - } else if (ch->ch_custom_speed) { - ch->ch_brate = PORTSERVER_DIVIDEND / ch->ch_custom_speed; - - if (ch->ch_flag & CH_BAUD0) { - ch->ch_mout |= DM_DTR | DM_RTS; - - ch->ch_flag &= ~CH_BAUD0; - } - } else { - /* - * Baud rate mapping. - * - * If FASTBAUD isn't on, we can scan the new baud rate list - * as required. - * - * However, if FASTBAUD is on, we must go to the old - * baud rate mapping that existed many many moons ago, - * for compatibility reasons. - */ - - if (!(ch->ch_digi.digi_flags & DIGI_FAST)) - brate = calc_baud_rate(un); - else - brate = calc_fastbaud_rate(un, uts); - - if (brate == 0) - brate = 9600; - - ch->ch_brate = PORTSERVER_DIVIDEND / brate; - - if (ch->ch_flag & CH_BAUD0) { - ch->ch_mout |= DM_DTR | DM_RTS; - - ch->ch_flag &= ~CH_BAUD0; - } - } - - /* - * Generate channel cflags from the termio. - */ - - ch->ch_cflag = tty_to_ch_flags(un->un_tty, 'c'); - - /* - * Generate channel iflags from the termio. - */ - - iflag = (int) tty_to_ch_flags(un->un_tty, 'i'); - - if (START_CHAR(un->un_tty) == _POSIX_VDISABLE || - STOP_CHAR(un->un_tty) == _POSIX_VDISABLE) { - iflag &= ~(IF_IXON | IF_IXANY | IF_IXOFF); - } - - ch->ch_iflag = iflag; - - /* - * Generate flow control characters - */ - - /* - * From the POSIX.1 spec (7.1.2.6): "If {_POSIX_VDISABLE} - * is defined for the terminal device file, and the value - * of one of the changeable special control characters (see - * 7.1.1.9) is {_POSIX_VDISABLE}, that function shall be - * disabled, that is, no input data shall be recognized as - * the disabled special character." - * - * OK, so we don't ever assign S/DXB XON or XOFF to _POSIX_VDISABLE. - */ - - if (uts->c_cc[VSTART] != _POSIX_VDISABLE) - ch->ch_xon = uts->c_cc[VSTART]; - if (uts->c_cc[VSTOP] != _POSIX_VDISABLE) - ch->ch_xoff = uts->c_cc[VSTOP]; - - ch->ch_lnext = (uts->c_cc[VLNEXT] == _POSIX_VDISABLE ? 0 : - uts->c_cc[VLNEXT]); - - /* - * Also, if either c_cc[START] or c_cc[STOP] is set to - * _POSIX_VDISABLE, we can't really do software flow - * control--in either direction--so we turn it off as - * far as S/DXB is concerned. In essence, if you disable - * one, you disable the other too. - */ - if ((uts->c_cc[VSTART] == _POSIX_VDISABLE) || - (uts->c_cc[VSTOP] == _POSIX_VDISABLE)) - ch->ch_iflag &= ~(IF_IXOFF | IF_IXON); - - /* - * Update xflags. - */ - - xflag = 0; - - if (ch->ch_digi.digi_flags & DIGI_AIXON) - xflag = XF_XIXON; - - if ((ch->ch_xxon == _POSIX_VDISABLE) || - (ch->ch_xxoff == _POSIX_VDISABLE)) - xflag &= ~XF_XIXON; - - ch->ch_xflag = xflag; - - - /* - * Figure effective DCD value. - */ - - if (C_CLOCAL(un->un_tty)) - ch->ch_flag |= CH_CLOCAL; - else - ch->ch_flag &= ~CH_CLOCAL; - - /* - * Check modem signals - */ - - dgrp_carrier(ch); - - /* - * Get hardware handshake value. - */ - - mflow = 0; - - if (C_CRTSCTS(un->un_tty)) - mflow |= (DM_RTS | DM_CTS); - - if (ch->ch_digi.digi_flags & RTSPACE) - mflow |= DM_RTS; - - if (ch->ch_digi.digi_flags & DTRPACE) - mflow |= DM_DTR; - - if (ch->ch_digi.digi_flags & CTSPACE) - mflow |= DM_CTS; - - if (ch->ch_digi.digi_flags & DSRPACE) - mflow |= DM_DSR; - - if (ch->ch_digi.digi_flags & DCDPACE) - mflow |= DM_CD; - - if (ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE) - mflow |= DM_RTS_TOGGLE; - - ch->ch_mflow = mflow; - - /* - * Send the changes to the server. - */ - - ch->ch_flag |= CH_PARAM; - (ch->ch_nd)->nd_tx_work = 1; - - if (waitqueue_active(&ch->ch_flag_wait)) - wake_up_interruptible(&ch->ch_flag_wait); -} - -/* - * This function is just used as a callback for timeouts - * waiting on the ch_sleep flag. - */ -static void wake_up_drp_sleep_timer(unsigned long ptr) -{ - struct ch_struct *ch = (struct ch_struct *) ptr; - if (ch) - wake_up(&ch->ch_sleep); -} - - -/* - * Set up our own sleep that can't be cancelled - * until our timeout occurs. - */ -static void drp_my_sleep(struct ch_struct *ch) -{ - struct timer_list drp_wakeup_timer; - DECLARE_WAITQUEUE(wait, current); - - /* - * First make sure we're ready to receive the wakeup. - */ - - add_wait_queue(&ch->ch_sleep, &wait); - current->state = TASK_UNINTERRUPTIBLE; - - /* - * Since we are uninterruptible, set a timer to - * unset the uninterruptable state in 1 second. - */ - - init_timer(&drp_wakeup_timer); - drp_wakeup_timer.function = wake_up_drp_sleep_timer; - drp_wakeup_timer.data = (unsigned long) ch; - drp_wakeup_timer.expires = jiffies + (1 * HZ); - add_timer(&drp_wakeup_timer); - - schedule(); - - del_timer(&drp_wakeup_timer); - - remove_wait_queue(&ch->ch_sleep, &wait); -} - -/* - * dgrp_tty_open() - * - * returns: - * -EBUSY - this is a callout device and the normal device is active - * - there is an error in opening the tty - * -ENODEV - the channel does not exist - * -EAGAIN - we are in the middle of hanging up or closing - * - IMMEDIATE_OPEN fails - * -ENXIO or -EAGAIN - * - if the port is outside physical range - * -EINTR - the open is interrupted - * - */ -static int dgrp_tty_open(struct tty_struct *tty, struct file *file) -{ - int retval = 0; - struct nd_struct *nd; - struct ch_struct *ch; - struct un_struct *un; - int port; - int delay_error; - int otype; - int unf; - int wait_carrier; - int category; - int counts_were_incremented = 0; - ulong lock_flags; - DECLARE_WAITQUEUE(wait, current); - - /* - * Do some initial checks to see if the node and port exist - */ - - nd = nd_struct_get(MAJOR(tty_devnum(tty))); - port = PORT_NUM(MINOR(tty_devnum(tty))); - category = OPEN_CATEGORY(MINOR(tty_devnum(tty))); - - if (!nd) - return -ENODEV; - - if (port >= CHAN_MAX) - return -ENODEV; - - /* - * The channel exists. - */ - - ch = nd->nd_chan + port; - - un = IS_PRINT(MINOR(tty_devnum(tty))) ? &ch->ch_pun : &ch->ch_tun; - un->un_tty = tty; - tty->driver_data = un; - - /* - * If we are in the middle of hanging up, - * then return an error - */ - if (tty_hung_up_p(file)) { - retval = ((un->un_flag & UN_HUP_NOTIFY) ? - -EAGAIN : -ERESTARTSYS); - goto done; - } - - /* - * If the port is in the middle of closing, then block - * until it is done, then try again. - */ - retval = wait_event_interruptible(un->un_close_wait, - ((un->un_flag & UN_CLOSING) == 0)); - - if (retval) - goto done; - - /* - * If the port is in the middle of a reopen after a network disconnect, - * wait until it is done, then try again. - */ - retval = wait_event_interruptible(ch->ch_flag_wait, - ((ch->ch_flag & CH_PORT_GONE) == 0)); - - if (retval) - goto done; - - /* - * If this is a callout device, then just make sure the normal - * device isn't being used. - */ - - if (tty->driver->subtype == SERIAL_TYPE_CALLOUT) { - if (un->un_flag & UN_NORMAL_ACTIVE) { - retval = -EBUSY; - goto done; - } else { - un->un_flag |= UN_CALLOUT_ACTIVE; - } - } - - /* - * Loop waiting until the open can be successfully completed. - */ - - spin_lock_irqsave(&nd->nd_lock, lock_flags); - - nd->nd_tx_work = 1; - - for (;;) { - wait_carrier = 0; - - /* - * Determine the open type from the flags provided. - */ - - /* - * If the port is not enabled, then exit - */ - if (test_bit(TTY_IO_ERROR, &tty->flags)) { - /* there was an error in opening the tty */ - if (un->un_flag & UN_CALLOUT_ACTIVE) - retval = -EBUSY; - else - un->un_flag |= UN_NORMAL_ACTIVE; - goto unlock; - } - - if (file->f_flags & O_NONBLOCK) { - - /* - * if the O_NONBLOCK is set, errors on read and write - * must return -EAGAIN immediately and NOT sleep - * on the waitqs. - */ - otype = OTYPE_IMMEDIATE; - delay_error = -EAGAIN; - - } else if (!OPEN_WAIT_AVAIL(category) || - (file->f_flags & O_NDELAY) != 0) { - otype = OTYPE_IMMEDIATE; - delay_error = -EBUSY; - - } else if (!OPEN_WAIT_CARRIER(category) || - ((ch->ch_digi.digi_flags & DIGI_FORCEDCD) != 0) || - C_CLOCAL(tty)) { - otype = OTYPE_PERSISTENT; - delay_error = 0; - - } else { - otype = OTYPE_INCOMING; - delay_error = 0; - } - - /* - * Handle port currently outside physical port range. - */ - - if (port >= nd->nd_chan_count) { - if (otype == OTYPE_IMMEDIATE) { - retval = (nd->nd_state == NS_READY) ? - -ENXIO : -EAGAIN; - goto unlock; - } - } - - /* - * Handle port not currently open. - */ - - else if (ch->ch_open_count == 0) { - /* - * Return an error when an Incoming Open - * response indicates the port is busy. - */ - - if (ch->ch_open_error != 0 && otype == ch->ch_otype) { - retval = (ch->ch_open_error <= 2) ? - delay_error : -ENXIO; - goto unlock; - } - - /* - * Fail any new Immediate open if we do not have - * a normal connection to the server. - */ - - if (nd->nd_state != NS_READY && - otype == OTYPE_IMMEDIATE) { - retval = -EAGAIN; - goto unlock; - } - - /* - * If a Realport open of the correct type has - * succeeded, complete the open. - */ - - if (ch->ch_state == CS_READY && ch->ch_otype == otype) - break; - } - - /* - * Handle port already open and active as a device - * of same category. - */ - - else if ((ch->ch_category == category) || - IS_PRINT(MINOR(tty_devnum(tty)))) { - /* - * Fail if opening the device now would - * violate exclusive use. - */ - unf = ch->ch_tun.un_flag | ch->ch_pun.un_flag; - - if ((file->f_flags & O_EXCL) || (unf & UN_EXCL)) { - retval = -EBUSY; - goto unlock; - } - - /* - * If the open device is in the hangup state, all - * system calls fail except close(). - */ - - /* TODO : check on hangup_p calls */ - - if (ch->ch_flag & CH_HANGUP) { - retval = -ENXIO; - goto unlock; - } - - /* - * If the port is ready, and carrier is ignored - * or present, then complete the open. - */ - - if (ch->ch_state == CS_READY && - (otype != OTYPE_INCOMING || - ch->ch_flag & CH_VIRT_CD)) - break; - - wait_carrier = 1; - } - - /* - * Handle port active with a different category device. - */ - - else { - if (otype == OTYPE_IMMEDIATE) { - retval = delay_error; - goto unlock; - } - } - - /* - * Wait until conditions change, then take another - * try at the open. - */ - - ch->ch_wait_count[otype]++; - - if (wait_carrier) - ch->ch_wait_carrier++; - - /* - * Prepare the task to accept the wakeup, then - * release our locks and release control. - */ - - add_wait_queue(&ch->ch_flag_wait, &wait); - current->state = TASK_INTERRUPTIBLE; - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - - /* - * Give up control, we'll come back if we're - * interrupted or are woken up. - */ - schedule(); - remove_wait_queue(&ch->ch_flag_wait, &wait); - - spin_lock_irqsave(&nd->nd_lock, lock_flags); - - current->state = TASK_RUNNING; - - ch->ch_wait_count[otype]--; - - if (wait_carrier) - ch->ch_wait_carrier--; - - nd->nd_tx_work = 1; - - if (signal_pending(current)) { - retval = -EINTR; - goto unlock; - } - } /* end for(;;) */ - - /* - * The open has succeeded. No turning back. - */ - counts_were_incremented = 1; - un->un_open_count++; - ch->ch_open_count++; - - /* - * Initialize the channel, if it's not already open. - */ - - if (ch->ch_open_count == 1) { - ch->ch_flag = 0; - ch->ch_inwait = 0; - ch->ch_category = category; - ch->ch_pscan_state = 0; - - /* TODO : find out what PS-1 bug Gene was referring to */ - /* TODO : in the following comment. */ - - ch->ch_send = RR_TX_START | RR_RX_START; /* PS-1 bug */ - - if (C_CLOCAL(tty) || - ch->ch_s_mlast & DM_CD || - ch->ch_digi.digi_flags & DIGI_FORCEDCD) - ch->ch_flag |= CH_VIRT_CD; - else if (OPEN_FORCES_CARRIER(category)) - ch->ch_flag |= CH_VIRT_CD; - - } - - /* - * Initialize the unit, if it is not already open. - */ - - if (un->un_open_count == 1) { - /* - * Since all terminal options are always sticky in Linux, - * we don't need the UN_STICKY flag to be handled specially. - */ - /* clears all the digi flags, leaves serial flags */ - un->un_flag &= ~UN_DIGI_MASK; - - if (file->f_flags & O_EXCL) - un->un_flag |= UN_EXCL; - - /* TODO : include "session" and "pgrp" */ - - /* - * In Linux, all terminal parameters are intended to be sticky. - * as a result, we "remove" the code which once reset the ports - * to sane values. - */ - - drp_param(ch); - - } - - un->un_flag |= UN_INITIALIZED; - - retval = 0; - -unlock: - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - -done: - /* - * Linux does a close for every open, even failed ones! - */ - if (!counts_were_incremented) { - un->un_open_count++; - ch->ch_open_count++; - } - - if (retval) - dev_err(tty->dev, "tty open bad return (%i)\n", retval); - - return retval; -} - - - - -/* - * dgrp_tty_close() -- close function for tty_operations - */ -static void dgrp_tty_close(struct tty_struct *tty, struct file *file) -{ - struct ch_struct *ch; - struct un_struct *un; - struct nd_struct *nd; - int tpos; - int port; - int err = 0; - int s = 0; - ulong waketime; - ulong lock_flags; - int sent_printer_offstr = 0; - - port = PORT_NUM(MINOR(tty_devnum(tty))); - - un = tty->driver_data; - - if (!un) - return; - - ch = un->un_ch; - - if (!ch) - return; - - nd = ch->ch_nd; - - if (!nd) - return; - - spin_lock_irqsave(&nd->nd_lock, lock_flags); - - - /* Used to be on channel basis, now we check on a unit basis. */ - if (un->un_open_count != 1) - goto unlock; - - /* - * OK, its the last close on the unit - */ - un->un_flag |= UN_CLOSING; - - /* - * Notify the discipline to only process XON/XOFF characters. - */ - tty->closing = 1; - - /* - * Wait for output to drain only if this is - * the last close against the channel - */ - - if (ch->ch_open_count == 1) { - /* - * If its the print device, we need to ensure at all costs that - * the offstr will fit. If it won't, flush our tbuf. - */ - if (IS_PRINT(MINOR(tty_devnum(tty))) && - (((ch->ch_tout - ch->ch_tin - 1) & TBUF_MASK) < - ch->ch_digi.digi_offlen)) - ch->ch_tin = ch->ch_tout; - - /* - * Turn off the printer. Don't bother checking to see if its - * IS_PRINT... Since this is the last close the flag is going - * to be cleared, so we MUST make sure the offstr gets inserted - * into tbuf. - */ - - if ((ch->ch_flag & CH_PRON) != 0) { - drp_wmove(ch, 0, ch->ch_digi.digi_offstr, - ch->ch_digi.digi_offlen); - ch->ch_flag &= ~CH_PRON; - sent_printer_offstr = 1; - } - } - - /* - * Wait until either the output queue has drained, or we see - * absolutely no progress for 15 seconds. - */ - - tpos = ch->ch_s_tpos; - - waketime = jiffies + 15 * HZ; - - for (;;) { - - /* - * Make sure the port still exists. - */ - - if (port >= nd->nd_chan_count) { - err = 1; - break; - } - - if (signal_pending(current)) { - err = 1; - break; - } - - /* - * If the port is idle (not opened on the server), we have - * no way of draining/flushing/closing the port on that server. - * So break out of loop. - */ - if (ch->ch_state == CS_IDLE) - break; - - nd->nd_tx_work = 1; - - /* - * Exit if the queues for this unit are empty, - * and either the other unit is still open or all - * data has drained. - */ - - if ((un->un_tty)->ops->chars_in_buffer ? - ((un->un_tty)->ops->chars_in_buffer)(un->un_tty) == 0 : 1) { - - /* - * We don't need to wait for a buffer to drain - * if the other unit is open. - */ - - if (ch->ch_open_count != un->un_open_count) - break; - - /* - * The wait is complete when all queues are - * drained, and any break in progress is complete. - */ - - if (ch->ch_tin == ch->ch_tout && - ch->ch_s_tin == ch->ch_s_tpos && - (ch->ch_send & RR_TX_BREAK) == 0) { - break; - } - } - - /* - * Flush TX data and exit the wait if NDELAY is set, - * or this is not a DIGI printer, and the close timeout - * expires. - */ - - if ((file->f_flags & (O_NDELAY | O_NONBLOCK)) || - ((long)(jiffies - waketime) >= 0 && - (ch->ch_digi.digi_flags & DIGI_PRINTER) == 0)) { - - /* - * If we sent the printer off string, we cannot - * flush our internal buffers, or we might lose - * the offstr. - */ - if (!sent_printer_offstr) - dgrp_tty_flush_buffer(tty); - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - tty_ldisc_flush(tty); - spin_lock_irqsave(&nd->nd_lock, lock_flags); - break; - } - - /* - * Otherwise take a short nap. - */ - - ch->ch_flag |= CH_DRAIN; - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - - schedule_timeout_interruptible(1); - s = signal_pending(current); - - spin_lock_irqsave(&nd->nd_lock, lock_flags); - - if (s) { - /* - * If we had sent the printer off string, we now have - * some problems. - * - * The system won't let us sleep since we got an error - * back from sleep, presumably because the user did - * a ctrl-c... - * But we need to ensure that the offstr gets sent! - * Thus, we have to do something else besides sleeping. - * The plan: - * 1) Make this task uninterruptable. - * 2) Set up a timer to go off in 1 sec. - * 3) Act as tho we just got out of the sleep above. - * - * Thankfully, in the real world, this just - * never happens. - */ - - if (sent_printer_offstr) { - spin_unlock_irqrestore(&nd->nd_lock, - lock_flags); - drp_my_sleep(ch); - spin_lock_irqsave(&nd->nd_lock, lock_flags); - } else { - err = 1; - break; - } - } - - /* - * Restart the wait if any progress is seen. - */ - - if (ch->ch_s_tpos != tpos) { - tpos = ch->ch_s_tpos; - - /* TODO: this gives us timeout problems with nist ?? */ - waketime = jiffies + 15 * HZ; - } - } - - /* - * Close the line discipline - */ - - /* this is done in tty_io.c */ - /* if ((un->un_tty)->ldisc.close) - * ((un->un_tty)->ldisc.close)(un->un_tty); - */ - - /* don't do this here */ - /* un->un_flag = 0; */ - - /* - * Flush the receive buffer on terminal unit close only. - */ - - if (!IS_PRINT(MINOR(tty_devnum(tty)))) - ch->ch_rout = ch->ch_rin; - - - /* - * Don't permit the close to happen until we get any pending - * sync request responses. - * There could be other ports depending upon the response as well. - * - * Also, don't permit the close to happen until any parameter - * changes have been sent out from the state machine as well. - * This is required because of a ditty -a race with -HUPCL - * We MUST make sure all channel parameters have been sent to the - * Portserver before sending a close. - */ - - if ((err != 1) && (ch->ch_state != CS_IDLE)) { - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - s = wait_event_interruptible(ch->ch_flag_wait, - ((ch->ch_flag & (CH_WAITING_SYNC | CH_PARAM)) == 0)); - spin_lock_irqsave(&nd->nd_lock, lock_flags); - } - - /* - * Cleanup the channel if last unit open. - */ - - if (ch->ch_open_count == 1) { - ch->ch_flag = 0; - ch->ch_category = 0; - ch->ch_send = 0; - ch->ch_expect = 0; - ch->ch_tout = ch->ch_tin; - /* (un->un_tty)->device = 0; */ - - if (ch->ch_state == CS_READY) - ch->ch_state = CS_SEND_CLOSE; - } - - /* - * Send the changes to the server - */ - if (ch->ch_state != CS_IDLE) { - ch->ch_flag |= CH_PARAM; - wake_up_interruptible(&ch->ch_flag_wait); - } - - nd->nd_tx_work = 1; - nd->nd_tx_ready = 1; - -unlock: - tty->closing = 0; - - if (ch->ch_open_count <= 0) - dev_info(tty->dev, - "%s - unexpected value for ch->ch_open_count: %i\n", - __func__, ch->ch_open_count); - else - ch->ch_open_count--; - - if (un->un_open_count <= 0) - dev_info(tty->dev, - "%s - unexpected value for un->un_open_count: %i\n", - __func__, un->un_open_count); - else - un->un_open_count--; - - un->un_flag &= ~(UN_NORMAL_ACTIVE | UN_CALLOUT_ACTIVE | UN_CLOSING); - if (waitqueue_active(&un->un_close_wait)) - wake_up_interruptible(&un->un_close_wait); - - spin_unlock_irqrestore(&nd->nd_lock, lock_flags); - - return; - -} - -static void drp_wmove(struct ch_struct *ch, int from_user, void *buf, int count) -{ - int n; - int ret = 0; - - ch->ch_nd->nd_tx_work = 1; - - n = TBUF_MAX - ch->ch_tin; - - if (count >= n) { - if (from_user) - ret = copy_from_user(ch->ch_tbuf + ch->ch_tin, - (void __user *) buf, n); - else - memcpy(ch->ch_tbuf + ch->ch_tin, buf, n); - - buf = (char *) buf + n; - count -= n; - ch->ch_tin = 0; - } - - if (from_user) - ret = copy_from_user(ch->ch_tbuf + ch->ch_tin, - (void __user *) buf, count); - else - memcpy(ch->ch_tbuf + ch->ch_tin, buf, count); - - ch->ch_tin += count; -} - - -static int dgrp_calculate_txprint_bounds(struct ch_struct *ch, int space, - int *un_flag) -{ - clock_t tt; - clock_t mt; - unsigned short tmax = 0; - - /* - * If the terminal device is busy, reschedule when - * the terminal device becomes idle. - */ - - if (ch->ch_tun.un_open_count != 0 && - ch->ch_tun.un_tty->ops->chars_in_buffer && - ((ch->ch_tun.un_tty->ops->chars_in_buffer) - (ch->ch_tun.un_tty) != 0)) { - *un_flag = UN_PWAIT; - return 0; - } - - /* - * Assure that whenever there is printer data in the output - * buffer, there always remains enough space after it to - * turn the printer off. - */ - space -= ch->ch_digi.digi_offlen; - - if (space <= 0) { - *un_flag = UN_EMPTY; - return 0; - } - - /* - * We measure printer CPS speed by incrementing - * ch_cpstime by (HZ / digi_maxcps) for every - * character we output, restricting output so - * that ch_cpstime never exceeds lbolt. - * - * However if output has not been done for some - * time, lbolt will grow to very much larger than - * ch_cpstime, which would allow essentially - * unlimited amounts of output until ch_cpstime - * finally caught up. To avoid this, we adjust - * cps_time when necessary so the difference - * between lbolt and ch_cpstime never results - * in sending more than digi_bufsize characters. - * - * This nicely models a printer with an internal - * buffer of digi_bufsize characters. - * - * Get the time between lbolt and ch->ch_cpstime; - */ - - tt = jiffies - ch->ch_cpstime; - - /* - * Compute the time required to send digi_bufsize - * characters. - */ - - mt = HZ * ch->ch_digi.digi_bufsize / ch->ch_digi.digi_maxcps; - - /* - * Compute the number of characters that can be sent - * without violating the time constraint. If the - * direct calculation of this number is bigger than - * digi_bufsize, limit the number to digi_bufsize, - * and adjust cpstime to match. - */ - - if ((clock_t)(tt + HZ) > (clock_t)(mt + HZ)) { - tmax = ch->ch_digi.digi_bufsize; - ch->ch_cpstime = jiffies - mt; - } else { - tmax = ch->ch_digi.digi_maxcps * tt / HZ; - } - - /* - * If the time constraint now binds, limit the transmit - * count accordingly, and tentatively arrange to be - * rescheduled based on time. - */ - - if (tmax < space) { - *un_flag = UN_TIME; - space = tmax; - } - - /* - * Compute the total number of characters we can - * output before the total number of characters known - * to be in the output queue exceeds digi_maxchar. - */ - - tmax = (ch->ch_digi.digi_maxchar - - ((ch->ch_tin - ch->ch_tout) & TBUF_MASK) - - ((ch->ch_s_tin - ch->ch_s_tpos) & 0xffff)); - - - /* - * If the digi_maxchar constraint now holds, limit - * the transmit count accordingly, and arrange to - * be rescheduled when the queue becomes empty. - */ - - if (space > tmax) { - *un_flag = UN_EMPTY; - space = tmax; - } - - if (space <= 0) - *un_flag |= UN_EMPTY; - - return space; -} - - -static int dgrp_tty_write(struct tty_struct *tty, - const unsigned char *buf, - int count) -{ - struct nd_struct *nd; - struct un_struct *un; - struct ch_struct *ch; - int space; - int n; - int t; - int sendcount; - int un_flag; - ulong lock_flags; - - if (tty == NULL) - return 0; - - un = tty->driver_data; - if (!un) - return 0; - - ch = un->un_ch; - if (!ch) - return 0; - - nd = ch->ch_nd; - if (!nd) - return 0; - - /* - * Ignore the request if the channel is not ready. - */ - if (ch->ch_state != CS_READY) - return 0; - - spin_lock_irqsave(&dgrp_poll_data.poll_lock, lock_flags); - - /* - * Ignore the request if output is blocked. - */ - if ((un->un_flag & (UN_EMPTY | UN_LOW | UN_TIME | UN_PWAIT)) != 0) { - count = 0; - goto out; - } - - /* - * Also ignore the request if DPA has this port open, - * and is flow controlled on reading more data. - */ - if (nd->nd_dpa_debug && nd->nd_dpa_flag & DPA_WAIT_SPACE && - nd->nd_dpa_port == MINOR(tty_devnum(ch->ch_tun.un_tty))) { - count = 0; - goto out; - } - - /* - * Limit amount we will write to the amount of space - * available in the channel buffer. - */ - sendcount = 0; - - space = (ch->ch_tout - ch->ch_tin - 1) & TBUF_MASK; - - /* - * Handle the printer device. - */ - - un_flag = UN_LOW; - - if (IS_PRINT(MINOR(tty_devnum(tty)))) { - clock_t tt; - clock_t mt; - unsigned short tmax = 0; - - /* - * If the terminal device is busy, reschedule when - * the terminal device becomes idle. - */ - - if (ch->ch_tun.un_open_count != 0 && - ((ch->ch_tun.un_tty->ops->chars_in_buffer) - (ch->ch_tun.un_tty) != 0)) { - un->un_flag |= UN_PWAIT; - count = 0; - goto out; - } - - /* - * Assure that whenever there is printer data in the output - * buffer, there always remains enough space after it to - * turn the printer off. - */ - space -= ch->ch_digi.digi_offlen; - - /* - * Output the printer on string. - */ - - if ((ch->ch_flag & CH_PRON) == 0) { - space -= ch->ch_digi.digi_onlen; - - if (space < 0) { - un->un_flag |= UN_EMPTY; - (ch->ch_nd)->nd_tx_work = 1; - count = 0; - goto out; - } - - drp_wmove(ch, 0, ch->ch_digi.digi_onstr, - ch->ch_digi.digi_onlen); - - ch->ch_flag |= CH_PRON; - } - - /* - * We measure printer CPS speed by incrementing - * ch_cpstime by (HZ / digi_maxcps) for every - * character we output, restricting output so - * that ch_cpstime never exceeds lbolt. - * - * However if output has not been done for some - * time, lbolt will grow to very much larger than - * ch_cpstime, which would allow essentially - * unlimited amounts of output until ch_cpstime - * finally caught up. To avoid this, we adjust - * cps_time when necessary so the difference - * between lbolt and ch_cpstime never results - * in sending more than digi_bufsize characters. - * - * This nicely models a printer with an internal - * buffer of digi_bufsize characters. - * - * Get the time between lbolt and ch->ch_cpstime; - */ - - tt = jiffies - ch->ch_cpstime; - - /* - * Compute the time required to send digi_bufsize - * characters. - */ - - mt = HZ * ch->ch_digi.digi_bufsize / ch->ch_digi.digi_maxcps; - - /* - * Compute the number of characters that can be sent - * without violating the time constraint. If the - * direct calculation of this number is bigger than - * digi_bufsize, limit the number to digi_bufsize, - * and adjust cpstime to match. - */ - - if ((clock_t)(tt + HZ) > (clock_t)(mt + HZ)) { - tmax = ch->ch_digi.digi_bufsize; - ch->ch_cpstime = jiffies - mt; - } else { - tmax = ch->ch_digi.digi_maxcps * tt / HZ; - } - - /* - * If the time constraint now binds, limit the transmit - * count accordingly, and tentatively arrange to be - * rescheduled based on time. - */ - - if (tmax < space) { - space = tmax; - un_flag = UN_TIME; - } - - /* - * Compute the total number of characters we can - * output before the total number of characters known - * to be in the output queue exceeds digi_maxchar. - */ - - tmax = (ch->ch_digi.digi_maxchar - - ((ch->ch_tin - ch->ch_tout) & TBUF_MASK) - - ((ch->ch_s_tin - ch->ch_s_tpos) & 0xffff)); - - - /* - * If the digi_maxchar constraint now holds, limit - * the transmit count accordingly, and arrange to - * be rescheduled when the queue becomes empty. - */ - - if (space > tmax) { - space = tmax; - un_flag = UN_EMPTY; - } - - } - /* - * Handle the terminal device. - */ - else { - - /* - * If the printer device is on, turn it off. - */ - - if ((ch->ch_flag & CH_PRON) != 0) { - - space -= ch->ch_digi.digi_offlen; - - drp_wmove(ch, 0, ch->ch_digi.digi_offstr, - ch->ch_digi.digi_offlen); - - ch->ch_flag &= ~CH_PRON; - } - } - - /* - * If space is 0 and its because the ch->tbuf - * is full, then Linux will handle a callback when queue - * space becomes available. - * tty_write returns count = 0 - */ - - if (space <= 0) { - /* the linux tty_io.c handles this if we return 0 */ - /* if (fp->flags & O_NONBLOCK) return -EAGAIN; */ - - un->un_flag |= UN_EMPTY; - (ch->ch_nd)->nd_tx_work = 1; - count = 0; - goto out; - } - - count = min(count, space); - - if (count > 0) { - - un->un_tbusy++; - - /* - * Copy the buffer contents to the ch_tbuf - * being careful to wrap around the circular queue - */ - - t = TBUF_MAX - ch->ch_tin; - n = count; - - if (n >= t) { - memcpy(ch->ch_tbuf + ch->ch_tin, buf, t); - if (nd->nd_dpa_debug && nd->nd_dpa_port == - PORT_NUM(MINOR(tty_devnum(un->un_tty)))) - dgrp_dpa_data(nd, 0, (char *) buf, t); - buf += t; - n -= t; - ch->ch_tin = 0; - sendcount += n; - } - - memcpy(ch->ch_tbuf + ch->ch_tin, buf, n); - if (nd->nd_dpa_debug && nd->nd_dpa_port == - PORT_NUM(MINOR(tty_devnum(un->un_tty)))) - dgrp_dpa_data(nd, 0, (char *) buf, n); - buf += n; - ch->ch_tin += n; - sendcount += n; - - un->un_tbusy--; - (ch->ch_nd)->nd_tx_work = 1; - if (ch->ch_edelay != DGRP_RTIME) { - (ch->ch_nd)->nd_tx_ready = 1; - wake_up_interruptible(&nd->nd_tx_waitq); - } - } - - ch->ch_txcount += count; - - if (IS_PRINT(MINOR(tty_devnum(tty)))) { - - /* - * Adjust ch_cpstime to account - * for the characters just output. - */ - - if (sendcount > 0) { - int cc = HZ * sendcount + ch->ch_cpsrem; - - ch->ch_cpstime += cc / ch->ch_digi.digi_maxcps; - ch->ch_cpsrem = cc % ch->ch_digi.digi_maxcps; - } - - /* - * If we are now waiting on time, schedule ourself - * back when we'll be able to send a block of - * digi_maxchar characters. - */ - - if ((un_flag & UN_TIME) != 0) { - ch->ch_waketime = (ch->ch_cpstime + - (ch->ch_digi.digi_maxchar * HZ / - ch->ch_digi.digi_maxcps)); - } - } - - /* - * If the printer unit is waiting for completion - * of terminal output, get him going again. - */ - - if ((ch->ch_pun.un_flag & UN_PWAIT) != 0) - (ch->ch_nd)->nd_tx_work = 1; - -out: - spin_unlock_irqrestore(&dgrp_poll_data.poll_lock, lock_flags); - - return count; -} - - -/* - * Put a character into ch->ch_buf - * - * - used by the line discipline for OPOST processing - */ - -static int dgrp_tty_put_char(struct tty_struct *tty, unsigned char new_char) -{ - struct un_struct *un; - struct ch_struct *ch; - ulong lock_flags; - int space; - int retval = 0; - - if (tty == NULL) - return 0; - - un = tty->driver_data; - if (!un) - return 0; - - ch = un->un_ch; - if (!ch) - return 0; - - if (ch->ch_state != CS_READY) - return 0; - - spin_lock_irqsave(&dgrp_poll_data.poll_lock, lock_flags); - - - /* - * If space is 0 and its because the ch->tbuf - * Warn and dump the character, there isn't anything else - * we can do about it. David_Fries@digi.com - */ - - space = (ch->ch_tout - ch->ch_tin - 1) & TBUF_MASK; - - un->un_tbusy++; - - /* - * Output the printer on string if device is TXPrint. - */ - if (IS_PRINT(MINOR(tty_devnum(tty))) && (ch->ch_flag & CH_PRON) == 0) { - if (space < ch->ch_digi.digi_onlen) { - un->un_tbusy--; - goto out; - } - space -= ch->ch_digi.digi_onlen; - drp_wmove(ch, 0, ch->ch_digi.digi_onstr, - ch->ch_digi.digi_onlen); - ch->ch_flag |= CH_PRON; - } - - /* - * Output the printer off string if device is NOT TXPrint. - */ - - if (!IS_PRINT(MINOR(tty_devnum(tty))) && - ((ch->ch_flag & CH_PRON) != 0)) { - if (space < ch->ch_digi.digi_offlen) { - un->un_tbusy--; - goto out; - } - - space -= ch->ch_digi.digi_offlen; - drp_wmove(ch, 0, ch->ch_digi.digi_offstr, - ch->ch_digi.digi_offlen); - ch->ch_flag &= ~CH_PRON; - } - - if (!space) { - un->un_tbusy--; - goto out; - } - - /* - * Copy the character to the ch_tbuf being - * careful to wrap around the circular queue - */ - ch->ch_tbuf[ch->ch_tin] = new_char; - ch->ch_tin = (1 + ch->ch_tin) & TBUF_MASK; - - if (IS_PRINT(MINOR(tty_devnum(tty)))) { - - /* - * Adjust ch_cpstime to account - * for the character just output. - */ - - int cc = HZ + ch->ch_cpsrem; - - ch->ch_cpstime += cc / ch->ch_digi.digi_maxcps; - ch->ch_cpsrem = cc % ch->ch_digi.digi_maxcps; - - /* - * If we are now waiting on time, schedule ourself - * back when we'll be able to send a block of - * digi_maxchar characters. - */ - - ch->ch_waketime = (ch->ch_cpstime + - (ch->ch_digi.digi_maxchar * HZ / - ch->ch_digi.digi_maxcps)); - } - - - un->un_tbusy--; - (ch->ch_nd)->nd_tx_work = 1; - - retval = 1; -out: - spin_unlock_irqrestore(&dgrp_poll_data.poll_lock, lock_flags); - return retval; -} - - - -/* - * Flush TX buffer (make in == out) - * - * check tty_ioctl.c -- this is called after TCOFLUSH - */ -static void dgrp_tty_flush_buffer(struct tty_struct *tty) -{ - struct un_struct *un; - struct ch_struct *ch; - - if (!tty) - return; - un = tty->driver_data; - if (!un) - return; - - ch = un->un_ch; - if (!ch) - return; - - ch->ch_tout = ch->ch_tin; - /* do NOT do this here! */ - /* ch->ch_s_tpos = ch->ch_s_tin = 0; */ - - /* send the flush output command now */ - ch->ch_send |= RR_TX_FLUSH; - (ch->ch_nd)->nd_tx_ready = 1; - (ch->ch_nd)->nd_tx_work = 1; - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - - if (waitqueue_active(&tty->write_wait)) - wake_up_interruptible(&tty->write_wait); - - tty_wakeup(tty); - -} - -/* - * Return space available in Tx buffer - * count = ( ch->ch_tout - ch->ch_tin ) mod (TBUF_MAX - 1) - */ -static int dgrp_tty_write_room(struct tty_struct *tty) -{ - struct un_struct *un; - struct ch_struct *ch; - int count; - - if (!tty) - return 0; - - un = tty->driver_data; - if (!un) - return 0; - - ch = un->un_ch; - if (!ch) - return 0; - - count = (ch->ch_tout - ch->ch_tin - 1) & TBUF_MASK; - - /* We *MUST* check this, and return 0 if the Printer Unit cannot - * take any more data within its time constraints... If we don't - * return 0 and the printer has hit it time constraint, the ld will - * call us back doing a put_char, which cannot be rejected!!! - */ - if (IS_PRINT(MINOR(tty_devnum(tty)))) { - int un_flag = 0; - count = dgrp_calculate_txprint_bounds(ch, count, &un_flag); - if (count <= 0) - count = 0; - - ch->ch_pun.un_flag |= un_flag; - (ch->ch_nd)->nd_tx_work = 1; - } - - return count; -} - -/* - * Return number of characters that have not been transmitted yet. - * chars_in_buffer = ( ch->ch_tin - ch->ch_tout ) mod (TBUF_MAX - 1) - * + ( ch->ch_s_tin - ch->ch_s_tout ) mod (0xffff) - * = number of characters "in transit" - * - * Remember that sequence number math is always with a sixteen bit - * mask, not the TBUF_MASK. - */ - -static int dgrp_tty_chars_in_buffer(struct tty_struct *tty) -{ - struct un_struct *un; - struct ch_struct *ch; - int count; - int count1; - - if (!tty) - return 0; - - un = tty->driver_data; - if (!un) - return 0; - - ch = un->un_ch; - if (!ch) - return 0; - - count1 = count = (ch->ch_tin - ch->ch_tout) & TBUF_MASK; - count += (ch->ch_s_tin - ch->ch_s_tpos) & 0xffff; - /* one for tbuf, one for the PS */ - - /* - * If we are busy transmitting add 1 - */ - count += un->un_tbusy; - - return count; -} - - -/***************************************************************************** - * - * Helper applications for dgrp_tty_ioctl() - * - ***************************************************************************** - */ - - -/** - * ch_to_tty_flags() -- convert channel flags to termio flags - * @ch_flag: Digi channel flags - * @flagtype: type of ch_flag (iflag, oflag or cflag) - * - * take the channel flags of the specified type and return the - * corresponding termio flag - */ -static tcflag_t ch_to_tty_flags(ushort ch_flag, char flagtype) -{ - tcflag_t retval = 0; - - switch (flagtype) { - case 'i': - retval = ((ch_flag & IF_IGNBRK) ? IGNBRK : 0) - | ((ch_flag & IF_BRKINT) ? BRKINT : 0) - | ((ch_flag & IF_IGNPAR) ? IGNPAR : 0) - | ((ch_flag & IF_PARMRK) ? PARMRK : 0) - | ((ch_flag & IF_INPCK) ? INPCK : 0) - | ((ch_flag & IF_ISTRIP) ? ISTRIP : 0) - | ((ch_flag & IF_IXON) ? IXON : 0) - | ((ch_flag & IF_IXANY) ? IXANY : 0) - | ((ch_flag & IF_IXOFF) ? IXOFF : 0); - break; - - case 'o': - retval = ((ch_flag & OF_OLCUC) ? OLCUC : 0) - | ((ch_flag & OF_ONLCR) ? ONLCR : 0) - | ((ch_flag & OF_OCRNL) ? OCRNL : 0) - | ((ch_flag & OF_ONOCR) ? ONOCR : 0) - | ((ch_flag & OF_ONLRET) ? ONLRET : 0) - /* | ((ch_flag & OF_OTAB3) ? OFILL : 0) */ - | ((ch_flag & OF_TABDLY) ? TABDLY : 0); - break; - - case 'c': - retval = ((ch_flag & CF_CSTOPB) ? CSTOPB : 0) - | ((ch_flag & CF_CREAD) ? CREAD : 0) - | ((ch_flag & CF_PARENB) ? PARENB : 0) - | ((ch_flag & CF_PARODD) ? PARODD : 0) - | ((ch_flag & CF_HUPCL) ? HUPCL : 0); - - switch (ch_flag & CF_CSIZE) { - case CF_CS5: - retval |= CS5; - break; - case CF_CS6: - retval |= CS6; - break; - case CF_CS7: - retval |= CS7; - break; - case CF_CS8: - retval |= CS8; - break; - default: - retval |= CS8; - break; - } - break; - case 'x': - break; - case 'l': - break; - default: - return 0; - } - - return retval; -} - - -/** - * tty_to_ch_flags() -- convert termio flags to digi channel flags - * @tty: pointer to a TTY structure holding flag to be converted - * @flagtype: identifies which flag (iflags, oflags, or cflags) should - * be converted - * - * take the termio flag of the specified type and return the - * corresponding Digi version of the flags - */ -static ushort tty_to_ch_flags(struct tty_struct *tty, char flagtype) -{ - ushort retval = 0; - tcflag_t tflag = 0; - - switch (flagtype) { - case 'i': - tflag = tty->termios.c_iflag; - retval = (I_IGNBRK(tty) ? IF_IGNBRK : 0) - | (I_BRKINT(tty) ? IF_BRKINT : 0) - | (I_IGNPAR(tty) ? IF_IGNPAR : 0) - | (I_PARMRK(tty) ? IF_PARMRK : 0) - | (I_INPCK(tty) ? IF_INPCK : 0) - | (I_ISTRIP(tty) ? IF_ISTRIP : 0) - | (I_IXON(tty) ? IF_IXON : 0) - | (I_IXANY(tty) ? IF_IXANY : 0) - | (I_IXOFF(tty) ? IF_IXOFF : 0); - break; - case 'o': - tflag = tty->termios.c_oflag; - /* - * If OPOST is set, then do the post processing in the - * firmware by setting all the processing flags on. - * If ~OPOST, then make sure we are not doing any - * output processing!! - */ - if (!O_OPOST(tty)) - retval = 0; - else - retval = (O_OLCUC(tty) ? OF_OLCUC : 0) - | (O_ONLCR(tty) ? OF_ONLCR : 0) - | (O_OCRNL(tty) ? OF_OCRNL : 0) - | (O_ONOCR(tty) ? OF_ONOCR : 0) - | (O_ONLRET(tty) ? OF_ONLRET : 0) - /* | (O_OFILL(tty) ? OF_TAB3 : 0) */ - | (O_TABDLY(tty) ? OF_TABDLY : 0); - break; - case 'c': - tflag = tty->termios.c_cflag; - retval = (C_CSTOPB(tty) ? CF_CSTOPB : 0) - | (C_CREAD(tty) ? CF_CREAD : 0) - | (C_PARENB(tty) ? CF_PARENB : 0) - | (C_PARODD(tty) ? CF_PARODD : 0) - | (C_HUPCL(tty) ? CF_HUPCL : 0); - switch (C_CSIZE(tty)) { - case CS8: - retval |= CF_CS8; - break; - case CS7: - retval |= CF_CS7; - break; - case CS6: - retval |= CF_CS6; - break; - case CS5: - retval |= CF_CS5; - break; - default: - retval |= CF_CS8; - break; - } - break; - case 'x': - break; - case 'l': - break; - default: - return 0; - } - - return retval; -} - - -static int dgrp_tty_send_break(struct tty_struct *tty, int msec) -{ - struct un_struct *un; - struct ch_struct *ch; - int ret = -EIO; - - if (!tty) - return ret; - - un = tty->driver_data; - if (!un) - return ret; - - ch = un->un_ch; - if (!ch) - return ret; - - dgrp_send_break(ch, msec); - return 0; -} - - -/* - * This routine sends a break character out the serial port. - * - * duration is in 1/1000's of a second - */ -static int dgrp_send_break(struct ch_struct *ch, int msec) -{ - ulong x; - - wait_event_interruptible(ch->ch_flag_wait, - ((ch->ch_flag & CH_TX_BREAK) == 0)); - ch->ch_break_time += max(msec, 250); - ch->ch_send |= RR_TX_BREAK; - ch->ch_flag |= CH_TX_BREAK; - (ch->ch_nd)->nd_tx_work = 1; - - x = (msec * HZ) / 1000; - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - - return 0; -} - - -/* - * Return modem signals to ld. - */ -static int dgrp_tty_tiocmget(struct tty_struct *tty) -{ - unsigned int mlast; - struct un_struct *un = tty->driver_data; - struct ch_struct *ch; - - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - mlast = ((ch->ch_s_mlast & ~(DM_RTS | DM_DTR)) | - (ch->ch_mout & (DM_RTS | DM_DTR))); - - /* defined in /usr/include/asm/termios.h */ - mlast = ((mlast & DM_RTS) ? TIOCM_RTS : 0) - | ((mlast & DM_DTR) ? TIOCM_DTR : 0) - | ((mlast & DM_CD) ? TIOCM_CAR : 0) - | ((mlast & DM_RI) ? TIOCM_RNG : 0) - | ((mlast & DM_DSR) ? TIOCM_DSR : 0) - | ((mlast & DM_CTS) ? TIOCM_CTS : 0); - - return mlast; -} - - -/* - * Set modem lines - */ -static int dgrp_tty_tiocmset(struct tty_struct *tty, - unsigned int set, unsigned int clear) -{ - ulong lock_flags; - struct un_struct *un = tty->driver_data; - struct ch_struct *ch; - - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - if (set & TIOCM_RTS) - ch->ch_mout |= DM_RTS; - - if (set & TIOCM_DTR) - ch->ch_mout |= DM_DTR; - - if (clear & TIOCM_RTS) - ch->ch_mout &= ~(DM_RTS); - - if (clear & TIOCM_DTR) - ch->ch_mout &= ~(DM_DTR); - - spin_lock_irqsave(&(ch->ch_nd)->nd_lock, lock_flags); - ch->ch_flag |= CH_PARAM; - (ch->ch_nd)->nd_tx_work = 1; - wake_up_interruptible(&ch->ch_flag_wait); - - spin_unlock_irqrestore(&(ch->ch_nd)->nd_lock, lock_flags); - - return 0; -} - - - -/* - * Get current modem status - */ -static int get_modem_info(struct ch_struct *ch, unsigned int *value) -{ - unsigned int mlast; - - mlast = ((ch->ch_s_mlast & ~(DM_RTS | DM_DTR)) | - (ch->ch_mout & (DM_RTS | DM_DTR))); - - /* defined in /usr/include/asm/termios.h */ - mlast = ((mlast & DM_RTS) ? TIOCM_RTS : 0) - | ((mlast & DM_DTR) ? TIOCM_DTR : 0) - | ((mlast & DM_CD) ? TIOCM_CAR : 0) - | ((mlast & DM_RI) ? TIOCM_RNG : 0) - | ((mlast & DM_DSR) ? TIOCM_DSR : 0) - | ((mlast & DM_CTS) ? TIOCM_CTS : 0); - return put_user(mlast, (unsigned int __user *) value); -} - -/* - * Set modem lines - */ -static int set_modem_info(struct ch_struct *ch, unsigned int command, - unsigned int *value) -{ - int error; - unsigned int arg; - int mval = 0; - ulong lock_flags; - - error = access_ok(VERIFY_READ, (void __user *) value, sizeof(int)); - if (error == 0) - return -EFAULT; - - if (get_user(arg, (unsigned int __user *) value)) - return -EFAULT; - mval |= ((arg & TIOCM_RTS) ? DM_RTS : 0) - | ((arg & TIOCM_DTR) ? DM_DTR : 0); - - switch (command) { - case TIOCMBIS: /* set flags */ - ch->ch_mout |= mval; - break; - case TIOCMBIC: /* clear flags */ - ch->ch_mout &= ~mval; - break; - case TIOCMSET: - ch->ch_mout = mval; - break; - default: - return -EINVAL; - } - - spin_lock_irqsave(&(ch->ch_nd)->nd_lock, lock_flags); - - ch->ch_flag |= CH_PARAM; - (ch->ch_nd)->nd_tx_work = 1; - wake_up_interruptible(&ch->ch_flag_wait); - - spin_unlock_irqrestore(&(ch->ch_nd)->nd_lock, lock_flags); - - return 0; -} - - -/* - * Assign the custom baud rate to the channel structure - */ -static void dgrp_set_custom_speed(struct ch_struct *ch, int newrate) -{ - int testdiv; - int testrate_high; - int testrate_low; - - int deltahigh, deltalow; - - if (newrate < 0) - newrate = 0; - - /* - * Since the divisor is stored in a 16-bit integer, we make sure - * we don't allow any rates smaller than a 16-bit integer would allow. - * And of course, rates above the dividend won't fly. - */ - if (newrate && newrate < ((PORTSERVER_DIVIDEND / 0xFFFF) + 1)) - newrate = ((PORTSERVER_DIVIDEND / 0xFFFF) + 1); - if (newrate && newrate > PORTSERVER_DIVIDEND) - newrate = PORTSERVER_DIVIDEND; - - while (newrate > 0) { - testdiv = PORTSERVER_DIVIDEND / newrate; - - /* - * If we try to figure out what rate the PortServer would use - * with the test divisor, it will be either equal or higher - * than the requested baud rate. If we then determine the - * rate with a divisor one higher, we will get the next lower - * supported rate below the requested. - */ - testrate_high = PORTSERVER_DIVIDEND / testdiv; - testrate_low = PORTSERVER_DIVIDEND / (testdiv + 1); - - /* - * If the rate for the requested divisor is correct, just - * use it and be done. - */ - if (testrate_high == newrate) - break; - - /* - * Otherwise, pick the rate that is closer (i.e. whichever rate - * has a smaller delta). - */ - deltahigh = testrate_high - newrate; - deltalow = newrate - testrate_low; - - if (deltahigh < deltalow) - newrate = testrate_high; - else - newrate = testrate_low; - - break; - } - - ch->ch_custom_speed = newrate; - - drp_param(ch); - - return; -} - - -/* - # dgrp_tty_digiseta() - * - * Ioctl to set the information from ditty. - * - * NOTE: DIGI_IXON, DSRPACE, DCDPACE, and DTRPACE are unsupported. JAR 990922 - */ -static int dgrp_tty_digiseta(struct tty_struct *tty, - struct digi_struct *new_info) -{ - struct un_struct *un = tty->driver_data; - struct ch_struct *ch; - - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - if (copy_from_user(&ch->ch_digi, (void __user *) new_info, - sizeof(struct digi_struct))) - return -EFAULT; - - if ((ch->ch_digi.digi_flags & RTSPACE) || - (ch->ch_digi.digi_flags & CTSPACE)) - tty->termios.c_cflag |= CRTSCTS; - else - tty->termios.c_cflag &= ~CRTSCTS; - - if (ch->ch_digi.digi_maxcps < 1) - ch->ch_digi.digi_maxcps = 1; - - if (ch->ch_digi.digi_maxcps > 10000) - ch->ch_digi.digi_maxcps = 10000; - - if (ch->ch_digi.digi_bufsize < 10) - ch->ch_digi.digi_bufsize = 10; - - if (ch->ch_digi.digi_maxchar < 1) - ch->ch_digi.digi_maxchar = 1; - - if (ch->ch_digi.digi_maxchar > ch->ch_digi.digi_bufsize) - ch->ch_digi.digi_maxchar = ch->ch_digi.digi_bufsize; - - if (ch->ch_digi.digi_onlen > DIGI_PLEN) - ch->ch_digi.digi_onlen = DIGI_PLEN; - - if (ch->ch_digi.digi_offlen > DIGI_PLEN) - ch->ch_digi.digi_offlen = DIGI_PLEN; - - /* make the changes now */ - drp_param(ch); - - return 0; -} - - - -/* - * dgrp_tty_digigetedelay() - * - * Ioctl to get the current edelay setting. - * - * - * - */ -static int dgrp_tty_digigetedelay(struct tty_struct *tty, int *retinfo) -{ - struct un_struct *un; - struct ch_struct *ch; - int tmp; - - if (!retinfo) - return -EFAULT; - - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - tmp = ch->ch_edelay; - - if (copy_to_user((void __user *) retinfo, &tmp, sizeof(*retinfo))) - return -EFAULT; - - return 0; -} - - -/* - * dgrp_tty_digisetedelay() - * - * Ioctl to set the EDELAY setting - * - */ -static int dgrp_tty_digisetedelay(struct tty_struct *tty, int *new_info) -{ - struct un_struct *un; - struct ch_struct *ch; - int new_digi; - - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - if (copy_from_user(&new_digi, (void __user *)new_info, sizeof(int))) - return -EFAULT; - - ch->ch_edelay = new_digi; - - /* make the changes now */ - drp_param(ch); - - return 0; -} - - -/* - * The usual assortment of ioctl's - * - * note: use tty_check_change to make sure that we are not - * changing the state of a terminal when we are not a process - * in the forground. See tty_io.c - * rc = tty_check_change(tty); - * if (rc) return rc; - */ -static int dgrp_tty_ioctl(struct tty_struct *tty, unsigned int cmd, - unsigned long arg) -{ - struct un_struct *un; - struct ch_struct *ch; - int rc; - struct digiflow_struct dflow; - - if (!tty) - return -ENODEV; - - un = tty->driver_data; - if (!un) - return -ENODEV; - - ch = un->un_ch; - if (!ch) - return -ENODEV; - - switch (cmd) { - - /* - * Here are all the standard ioctl's that we MUST implement - */ - - case TCSBRK: - /* - * TCSBRK is SVID version: non-zero arg --> no break - * this behaviour is exploited by tcdrain(). - * - * According to POSIX.1 spec (7.2.2.1.2) breaks should be - * between 0.25 and 0.5 seconds - */ - - rc = tty_check_change(tty); - if (rc) - return rc; - tty_wait_until_sent(tty, 0); - - if (!arg) - rc = dgrp_send_break(ch, 250); /* 1/4 second */ - - if (dgrp_tty_chars_in_buffer(tty) != 0) - return -EINTR; - - return 0; - - case TCSBRKP: - /* support for POSIX tcsendbreak() - * - * According to POSIX.1 spec (7.2.2.1.2) breaks should be - * between 0.25 and 0.5 seconds so we'll ask for something - * in the middle: 0.375 seconds. - */ - rc = tty_check_change(tty); - if (rc) - return rc; - tty_wait_until_sent(tty, 0); - - rc = dgrp_send_break(ch, arg ? arg*250 : 250); - - if (dgrp_tty_chars_in_buffer(tty) != 0) - return -EINTR; - return 0; - - case TIOCSBRK: - rc = tty_check_change(tty); - if (rc) - return rc; - tty_wait_until_sent(tty, 0); - - /* - * RealPort doesn't support turning on a break unconditionally. - * The RealPort device will stop sending a break automatically - * after the specified time value that we send in. - */ - rc = dgrp_send_break(ch, 250); /* 1/4 second */ - - if (dgrp_tty_chars_in_buffer(tty) != 0) - return -EINTR; - return 0; - - case TIOCCBRK: - /* - * RealPort doesn't support turning off a break unconditionally. - * The RealPort device will stop sending a break automatically - * after the specified time value that was sent when turning on - * the break. - */ - return 0; - - case TIOCMGET: - rc = access_ok(VERIFY_WRITE, (void __user *) arg, - sizeof(unsigned int)); - if (rc == 0) - return -EFAULT; - return get_modem_info(ch, (unsigned int *) arg); - - case TIOCMBIS: - case TIOCMBIC: - case TIOCMSET: - return set_modem_info(ch, cmd, (unsigned int *) arg); - - /* - * Here are any additional ioctl's that we want to implement - */ - - case TCFLSH: - /* - * The linux tty driver doesn't have a flush - * input routine for the driver, assuming all backed - * up data is in the line disc. buffers. However, - * we all know that's not the case. Here, we - * act on the ioctl, but then lie and say we didn't - * so the line discipline will process the flush - * also. - */ - rc = tty_check_change(tty); - if (rc) - return rc; - - switch (arg) { - case TCIFLUSH: - case TCIOFLUSH: - /* only flush input if this is the only open unit */ - if (!IS_PRINT(MINOR(tty_devnum(tty)))) { - ch->ch_rout = ch->ch_rin; - ch->ch_send |= RR_RX_FLUSH; - (ch->ch_nd)->nd_tx_work = 1; - (ch->ch_nd)->nd_tx_ready = 1; - wake_up_interruptible( - &(ch->ch_nd)->nd_tx_waitq); - } - if (arg == TCIFLUSH) - break; - - case TCOFLUSH: /* flush output, or the receive buffer */ - /* - * This is handled in the tty_ioctl.c code - * calling tty_flush_buffer - */ - break; - - default: - /* POSIX.1 says return EINVAL if we got a bad arg */ - return -EINVAL; - } - /* pretend we didn't recognize this IOCTL */ - return -ENOIOCTLCMD; - -#ifdef TIOCGETP - case TIOCGETP: -#endif - /***************************************** - Linux HPUX Function - TCSETA TCSETA - set the termios - TCSETAF TCSETAF - wait for drain first, then set termios - TCSETAW TCSETAW - wait for drain, - flush the input queue, then set termios - - looking at the tty_ioctl code, these command all call our - tty_set_termios at the driver's end, when a TCSETA* is sent, - it is expecting the tty to have a termio structure, - NOT a termios structure. These two structures differ in size - and the tty_ioctl code does a conversion before processing them both. - - we should treat the TCSETAW TCSETAF ioctls the same, and let - the tty_ioctl code do the conversion stuff. - - TCSETS - TCSETSF (none) - TCSETSW - - the associated tty structure has a termios structure. - *****************************************/ - - case TCGETS: - case TCGETA: - return -ENOIOCTLCMD; - - case TCSETAW: - case TCSETAF: - case TCSETSF: - case TCSETSW: - /* - * The linux tty driver doesn't have a flush - * input routine for the driver, assuming all backed - * up data is in the line disc. buffers. However, - * we all know that's not the case. Here, we - * act on the ioctl, but then lie and say we didn't - * so the line discipline will process the flush - * also. - */ - - /* - * Also, now that we have TXPrint, we have to check - * if this is the TXPrint device and the terminal - * device is open. If so, do NOT run check_change, - * as the terminal device is ALWAYS the parent. - */ - if (!IS_PRINT(MINOR(tty_devnum(tty))) || - !ch->ch_tun.un_open_count) { - rc = tty_check_change(tty); - if (rc) - return rc; - } - - /* wait for all the characters in tbuf to drain */ - tty_wait_until_sent(tty, 0); - - if ((cmd == TCSETSF) || (cmd == TCSETAF)) { - /* flush the contents of the rbuf queue */ - /* TODO: check if this is print device? */ - ch->ch_send |= RR_RX_FLUSH; - (ch->ch_nd)->nd_tx_ready = 1; - (ch->ch_nd)->nd_tx_work = 1; - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - /* do we need to do this? just to be safe! */ - ch->ch_rout = ch->ch_rin; - } - - /* pretend we didn't recognize this */ - return -ENOIOCTLCMD; - - case TCXONC: - /* - * The Linux Line Discipline (LD) would do this for us if we - * let it, but we have the special firmware options to do this - * the "right way" regardless of hardware or software flow - * control so we'll do it outselves instead of letting the LD - * do it. - */ - rc = tty_check_change(tty); - if (rc) - return rc; - - switch (arg) { - case TCOON: - dgrp_tty_start(tty); - return 0; - case TCOOFF: - dgrp_tty_stop(tty); - return 0; - case TCION: - dgrp_tty_input_start(tty); - return 0; - case TCIOFF: - dgrp_tty_input_stop(tty); - return 0; - default: - return -EINVAL; - } - - case DIGI_GETA: - /* get information for ditty */ - if (copy_to_user((struct digi_struct __user *) arg, - &ch->ch_digi, sizeof(struct digi_struct))) - return -EFAULT; - break; - - case DIGI_SETAW: - case DIGI_SETAF: - /* wait for all the characters in tbuf to drain */ - tty_wait_until_sent(tty, 0); - - if (cmd == DIGI_SETAF) { - /* flush the contents of the rbuf queue */ - /* send down a packet with RR_RX_FLUSH set */ - ch->ch_send |= RR_RX_FLUSH; - (ch->ch_nd)->nd_tx_ready = 1; - (ch->ch_nd)->nd_tx_work = 1; - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - /* do we need to do this? just to be safe! */ - ch->ch_rout = ch->ch_rin; - } - - /* pretend we didn't recognize this */ - /* fall-through */ - - case DIGI_SETA: - return dgrp_tty_digiseta(tty, (struct digi_struct *) arg); - - case DIGI_SEDELAY: - return dgrp_tty_digisetedelay(tty, (int *) arg); - - case DIGI_GEDELAY: - return dgrp_tty_digigetedelay(tty, (int *) arg); - - case DIGI_GETFLOW: - case DIGI_GETAFLOW: - if (cmd == (DIGI_GETFLOW)) { - dflow.startc = tty->termios.c_cc[VSTART]; - dflow.stopc = tty->termios.c_cc[VSTOP]; - } else { - dflow.startc = ch->ch_xxon; - dflow.stopc = ch->ch_xxoff; - } - - if (copy_to_user((char __user *)arg, &dflow, sizeof(dflow))) - return -EFAULT; - break; - - case DIGI_SETFLOW: - case DIGI_SETAFLOW: - - if (copy_from_user(&dflow, (char __user *)arg, sizeof(dflow))) - return -EFAULT; - - if (cmd == (DIGI_SETFLOW)) { - tty->termios.c_cc[VSTART] = dflow.startc; - tty->termios.c_cc[VSTOP] = dflow.stopc; - } else { - ch->ch_xxon = dflow.startc; - ch->ch_xxoff = dflow.stopc; - } - break; - - case DIGI_GETCUSTOMBAUD: - if (put_user(ch->ch_custom_speed, (unsigned int __user *) arg)) - return -EFAULT; - break; - - case DIGI_SETCUSTOMBAUD: - { - int new_rate; - - if (get_user(new_rate, (unsigned int __user *) arg)) - return -EFAULT; - dgrp_set_custom_speed(ch, new_rate); - - break; - } - - default: - return -ENOIOCTLCMD; - } - - return 0; -} - -/* - * This routine allows the tty driver to be notified when - * the device's termios setting have changed. Note that we - * should be prepared to accept the case where old == NULL - * and try to do something rational. - * - * So we need to make sure that our copies of ch_oflag, - * ch_clag, and ch_iflag reflect the tty->termios flags. - */ -static void dgrp_tty_set_termios(struct tty_struct *tty, struct ktermios *old) -{ - struct ktermios *ts; - struct ch_struct *ch; - struct un_struct *un; - - /* seems silly, but we have to check all these! */ - if (!tty) - return; - - un = tty->driver_data; - if (!un) - return; - - ts = &tty->termios; - - ch = un->un_ch; - if (!ch) - return; - - drp_param(ch); - - /* the CLOCAL flag has just been set */ - if (!(old->c_cflag & CLOCAL) && C_CLOCAL(tty)) - wake_up_interruptible(&un->un_open_wait); -} - - -/* - * Throttle receiving data. We just set a bit and stop reading - * data out of the channel buffer. It will back up and the - * FEP will do whatever is necessary to stop the far end. - */ -static void dgrp_tty_throttle(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - ch->ch_flag |= CH_RXSTOP; -} - - -static void dgrp_tty_unthrottle(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - ch->ch_flag &= ~CH_RXSTOP; -} - -/* - * Stop the transmitter - */ -static void dgrp_tty_stop(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - ch->ch_send |= RR_TX_STOP; - ch->ch_send &= ~RR_TX_START; - - /* make the change NOW! */ - (ch->ch_nd)->nd_tx_ready = 1; - if (waitqueue_active(&(ch->ch_nd)->nd_tx_waitq)) - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); -} - -/* - * Start the transmitter - */ -static void dgrp_tty_start(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - /* TODO: don't do anything if the transmitter is not stopped */ - - ch->ch_send |= RR_TX_START; - ch->ch_send &= ~RR_TX_STOP; - - /* make the change NOW! */ - (ch->ch_nd)->nd_tx_ready = 1; - (ch->ch_nd)->nd_tx_work = 1; - if (waitqueue_active(&(ch->ch_nd)->nd_tx_waitq)) - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - -} - -/* - * Stop the receiver - */ -static void dgrp_tty_input_stop(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - ch->ch_send |= RR_RX_STOP; - ch->ch_send &= ~RR_RX_START; - (ch->ch_nd)->nd_tx_ready = 1; - if (waitqueue_active(&(ch->ch_nd)->nd_tx_waitq)) - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - -} - - -static void dgrp_tty_send_xchar(struct tty_struct *tty, char c) -{ - struct un_struct *un; - struct ch_struct *ch; - - if (!tty) - return; - - un = tty->driver_data; - if (!un) - return; - - ch = un->un_ch; - if (!ch) - return; - if (c == STOP_CHAR(tty)) - ch->ch_send |= RR_RX_STOP; - else if (c == START_CHAR(tty)) - ch->ch_send |= RR_RX_START; - - ch->ch_nd->nd_tx_ready = 1; - ch->ch_nd->nd_tx_work = 1; - - return; -} - - -static void dgrp_tty_input_start(struct tty_struct *tty) -{ - struct ch_struct *ch; - - if (!tty) - return; - - ch = ((struct un_struct *) tty->driver_data)->un_ch; - if (!ch) - return; - - ch->ch_send |= RR_RX_START; - ch->ch_send &= ~RR_RX_STOP; - (ch->ch_nd)->nd_tx_ready = 1; - (ch->ch_nd)->nd_tx_work = 1; - if (waitqueue_active(&(ch->ch_nd)->nd_tx_waitq)) - wake_up_interruptible(&(ch->ch_nd)->nd_tx_waitq); - -} - - -/* - * Hangup the port. Like a close, but don't wait for output - * to drain. - * - * How do we close all the channels that are open? - */ -static void dgrp_tty_hangup(struct tty_struct *tty) -{ - struct ch_struct *ch; - struct nd_struct *nd; - struct un_struct *un; - - if (!tty) - return; - - un = tty->driver_data; - if (!un) - return; - - ch = un->un_ch; - if (!ch) - return; - - nd = ch->ch_nd; - - if (C_HUPCL(tty)) { - /* LOWER DTR */ - ch->ch_mout &= ~DM_DTR; - /* Don't do this here */ - /* ch->ch_flag |= CH_HANGUP; */ - ch->ch_nd->nd_tx_ready = 1; - ch->ch_nd->nd_tx_work = 1; - if (waitqueue_active(&ch->ch_flag_wait)) - wake_up_interruptible(&ch->ch_flag_wait); - } - -} - -/************************************************************************/ -/* */ -/* TTY Initialization/Cleanup Functions */ -/* */ -/************************************************************************/ - -/* - * Uninitialize the TTY portion of the supplied node. Free all - * memory and resources associated with this node. Do it in reverse - * allocation order: this might possibly result in less fragmentation - * of memory, though I don't know this for sure. - */ -void -dgrp_tty_uninit(struct nd_struct *nd) -{ - unsigned int i; - char id[3]; - - ID_TO_CHAR(nd->nd_ID, id); - - if (nd->nd_ttdriver_flags & SERIAL_TTDRV_REG) { - tty_unregister_driver(nd->nd_serial_ttdriver); - - kfree(nd->nd_serial_ttdriver->ttys); - nd->nd_serial_ttdriver->ttys = NULL; - - put_tty_driver(nd->nd_serial_ttdriver); - nd->nd_ttdriver_flags &= ~SERIAL_TTDRV_REG; - } - - if (nd->nd_ttdriver_flags & CALLOUT_TTDRV_REG) { - tty_unregister_driver(nd->nd_callout_ttdriver); - - kfree(nd->nd_callout_ttdriver->ttys); - nd->nd_callout_ttdriver->ttys = NULL; - - put_tty_driver(nd->nd_callout_ttdriver); - nd->nd_ttdriver_flags &= ~CALLOUT_TTDRV_REG; - } - - if (nd->nd_ttdriver_flags & XPRINT_TTDRV_REG) { - tty_unregister_driver(nd->nd_xprint_ttdriver); - - kfree(nd->nd_xprint_ttdriver->ttys); - nd->nd_xprint_ttdriver->ttys = NULL; - - put_tty_driver(nd->nd_xprint_ttdriver); - nd->nd_ttdriver_flags &= ~XPRINT_TTDRV_REG; - } - for (i = 0; i < CHAN_MAX; i++) - tty_port_destroy(&nd->nd_chan[i].port); -} - - - -/* - * Initialize the TTY portion of the supplied node. - */ -int -dgrp_tty_init(struct nd_struct *nd) -{ - char id[3]; - int rc; - int i; - - ID_TO_CHAR(nd->nd_ID, id); - - /* - * Initialize the TTDRIVER structures. - */ - - nd->nd_serial_ttdriver = alloc_tty_driver(CHAN_MAX); - if (!nd->nd_serial_ttdriver) - return -ENOMEM; - - sprintf(nd->nd_serial_name, "tty_dgrp_%s_", id); - - nd->nd_serial_ttdriver->owner = THIS_MODULE; - nd->nd_serial_ttdriver->name = nd->nd_serial_name; - nd->nd_serial_ttdriver->name_base = 0; - nd->nd_serial_ttdriver->major = 0; - nd->nd_serial_ttdriver->minor_start = 0; - nd->nd_serial_ttdriver->type = TTY_DRIVER_TYPE_SERIAL; - nd->nd_serial_ttdriver->subtype = SERIAL_TYPE_NORMAL; - nd->nd_serial_ttdriver->init_termios = DefaultTermios; - nd->nd_serial_ttdriver->driver_name = "dgrp"; - nd->nd_serial_ttdriver->flags = (TTY_DRIVER_REAL_RAW | - TTY_DRIVER_DYNAMIC_DEV | - TTY_DRIVER_HARDWARE_BREAK); - - /* The kernel wants space to store pointers to tty_structs. */ - nd->nd_serial_ttdriver->ttys = - kzalloc(CHAN_MAX * sizeof(struct tty_struct *), GFP_KERNEL); - if (!nd->nd_serial_ttdriver->ttys) - return -ENOMEM; - - tty_set_operations(nd->nd_serial_ttdriver, &dgrp_tty_ops); - - if (!(nd->nd_ttdriver_flags & SERIAL_TTDRV_REG)) { - /* - * Register tty devices - */ - rc = tty_register_driver(nd->nd_serial_ttdriver); - if (rc < 0) { - /* - * If errno is EBUSY, this means there are no more - * slots available to have us auto-majored. - * (Which is currently supported up to 256) - * - * We can still request majors above 256, - * we just have to do it manually. - */ - if (rc == -EBUSY) { - int i; - int max_majors = 1U << (32 - MINORBITS); - for (i = 256; i < max_majors; i++) { - nd->nd_serial_ttdriver->major = i; - rc = tty_register_driver - (nd->nd_serial_ttdriver); - if (rc >= 0) - break; - } - /* Really fail now, since we ran out - * of majors to try. */ - if (i == max_majors) - return rc; - - } else { - return rc; - } - } - nd->nd_ttdriver_flags |= SERIAL_TTDRV_REG; - } - - nd->nd_callout_ttdriver = alloc_tty_driver(CHAN_MAX); - if (!nd->nd_callout_ttdriver) - return -ENOMEM; - - sprintf(nd->nd_callout_name, "cu_dgrp_%s_", id); - - nd->nd_callout_ttdriver->owner = THIS_MODULE; - nd->nd_callout_ttdriver->name = nd->nd_callout_name; - nd->nd_callout_ttdriver->name_base = 0; - nd->nd_callout_ttdriver->major = nd->nd_serial_ttdriver->major; - nd->nd_callout_ttdriver->minor_start = 0x40; - nd->nd_callout_ttdriver->type = TTY_DRIVER_TYPE_SERIAL; - nd->nd_callout_ttdriver->subtype = SERIAL_TYPE_CALLOUT; - nd->nd_callout_ttdriver->init_termios = DefaultTermios; - nd->nd_callout_ttdriver->driver_name = "dgrp"; - nd->nd_callout_ttdriver->flags = (TTY_DRIVER_REAL_RAW | - TTY_DRIVER_DYNAMIC_DEV | - TTY_DRIVER_HARDWARE_BREAK); - - /* The kernel wants space to store pointers to tty_structs. */ - nd->nd_callout_ttdriver->ttys = - kzalloc(CHAN_MAX * sizeof(struct tty_struct *), GFP_KERNEL); - if (!nd->nd_callout_ttdriver->ttys) - return -ENOMEM; - - tty_set_operations(nd->nd_callout_ttdriver, &dgrp_tty_ops); - - if (dgrp_register_cudevices) { - if (!(nd->nd_ttdriver_flags & CALLOUT_TTDRV_REG)) { - /* - * Register cu devices - */ - rc = tty_register_driver(nd->nd_callout_ttdriver); - if (rc < 0) - return rc; - nd->nd_ttdriver_flags |= CALLOUT_TTDRV_REG; - } - } - - - nd->nd_xprint_ttdriver = alloc_tty_driver(CHAN_MAX); - if (!nd->nd_xprint_ttdriver) - return -ENOMEM; - - sprintf(nd->nd_xprint_name, "pr_dgrp_%s_", id); - - nd->nd_xprint_ttdriver->owner = THIS_MODULE; - nd->nd_xprint_ttdriver->name = nd->nd_xprint_name; - nd->nd_xprint_ttdriver->name_base = 0; - nd->nd_xprint_ttdriver->major = nd->nd_serial_ttdriver->major; - nd->nd_xprint_ttdriver->minor_start = 0x80; - nd->nd_xprint_ttdriver->type = TTY_DRIVER_TYPE_SERIAL; - nd->nd_xprint_ttdriver->subtype = SERIAL_TYPE_XPRINT; - nd->nd_xprint_ttdriver->init_termios = DefaultTermios; - nd->nd_xprint_ttdriver->driver_name = "dgrp"; - nd->nd_xprint_ttdriver->flags = (TTY_DRIVER_REAL_RAW | - TTY_DRIVER_DYNAMIC_DEV | - TTY_DRIVER_HARDWARE_BREAK); - - /* The kernel wants space to store pointers to tty_structs. */ - nd->nd_xprint_ttdriver->ttys = - kzalloc(CHAN_MAX * sizeof(struct tty_struct *), GFP_KERNEL); - if (!nd->nd_xprint_ttdriver->ttys) - return -ENOMEM; - - tty_set_operations(nd->nd_xprint_ttdriver, &dgrp_tty_ops); - - if (dgrp_register_prdevices) { - if (!(nd->nd_ttdriver_flags & XPRINT_TTDRV_REG)) { - /* - * Register transparent print devices - */ - rc = tty_register_driver(nd->nd_xprint_ttdriver); - if (rc < 0) - return rc; - nd->nd_ttdriver_flags |= XPRINT_TTDRV_REG; - } - } - - for (i = 0; i < CHAN_MAX; i++) { - struct ch_struct *ch = nd->nd_chan + i; - - ch->ch_nd = nd; - ch->ch_digi = digi_init; - ch->ch_edelay = 100; - ch->ch_custom_speed = 0; - ch->ch_portnum = i; - ch->ch_tun.un_ch = ch; - ch->ch_pun.un_ch = ch; - ch->ch_tun.un_type = SERIAL_TYPE_NORMAL; - ch->ch_pun.un_type = SERIAL_TYPE_XPRINT; - - init_waitqueue_head(&(ch->ch_flag_wait)); - init_waitqueue_head(&(ch->ch_sleep)); - - init_waitqueue_head(&(ch->ch_tun.un_open_wait)); - init_waitqueue_head(&(ch->ch_tun.un_close_wait)); - - init_waitqueue_head(&(ch->ch_pun.un_open_wait)); - init_waitqueue_head(&(ch->ch_pun.un_close_wait)); - tty_port_init(&ch->port); - } - return 0; -} diff --git a/drivers/staging/dgrp/digirp.h b/drivers/staging/dgrp/digirp.h deleted file mode 100644 index 33c1394fade7..000000000000 --- a/drivers/staging/dgrp/digirp.h +++ /dev/null @@ -1,129 +0,0 @@ -/************************************************************************ - * HP-UX Realport Daemon interface file. - * - * Copyright (C) 1998, by Digi International. All Rights Reserved. - ************************************************************************/ - -#ifndef _DIGIDRP_H -#define _DIGIDRP_H - -/************************************************************************ - * This file contains defines for the ioctl() interface to - * the realport driver. This ioctl() interface is used by the - * daemon to set speed setup parameters honored by the driver. - ************************************************************************/ - -struct link_struct { - int lk_fast_rate; /* Fast line rate to be used - when the delay is less-equal - to lk_fast_delay */ - - int lk_fast_delay; /* Fast line rate delay in - milliseconds */ - - int lk_slow_rate; /* Slow line rate to be used when - the delay is greater-equal - to lk_slow_delay */ - - int lk_slow_delay; /* Slow line rate delay in - milliseconds */ - - int lk_header_size; /* Estimated packet header size - when sent across the slowest - link. */ -}; - -#define DIGI_GETLINK _IOW('e', 103, struct link_struct) /* Get link parameters */ -#define DIGI_SETLINK _IOW('e', 104, struct link_struct) /* Set link parameters */ - - -/************************************************************************ - * This module provides application access to special Digi - * serial line enhancements which are not standard UNIX(tm) features. - ************************************************************************/ - -struct digiflow_struct { - unsigned char startc; /* flow cntl start char */ - unsigned char stopc; /* flow cntl stop char */ -}; - -/************************************************************************ - * Values for digi_flags - ************************************************************************/ -#define DIGI_IXON 0x0001 /* Handle IXON in the FEP */ -#define DIGI_FAST 0x0002 /* Fast baud rates */ -#define RTSPACE 0x0004 /* RTS input flow control */ -#define CTSPACE 0x0008 /* CTS output flow control */ -#define DSRPACE 0x0010 /* DSR output flow control */ -#define DCDPACE 0x0020 /* DCD output flow control */ -#define DTRPACE 0x0040 /* DTR input flow control */ -#define DIGI_COOK 0x0080 /* Cooked processing done in FEP */ -#define DIGI_FORCEDCD 0x0100 /* Force carrier */ -#define DIGI_ALTPIN 0x0200 /* Alternate RJ-45 pin config */ -#define DIGI_AIXON 0x0400 /* Aux flow control in fep */ -#define DIGI_PRINTER 0x0800 /* Hold port open for flow cntrl */ -#define DIGI_PP_INPUT 0x1000 /* Change parallel port to input */ -#define DIGI_422 0x4000 /* Change parallel port to input */ -#define DIGI_RTS_TOGGLE 0x8000 /* Support RTS Toggle */ - - -/************************************************************************ - * Values associated with transparent print - ************************************************************************/ -#define DIGI_PLEN 8 /* String length */ -#define DIGI_TSIZ 10 /* Terminal string len */ - - -/************************************************************************ - * Structure used with ioctl commands for DIGI parameters. - ************************************************************************/ -struct digi_struct { - unsigned short digi_flags; /* Flags (see above) */ - unsigned short digi_maxcps; /* Max printer CPS */ - unsigned short digi_maxchar; /* Max chars in print queue */ - unsigned short digi_bufsize; /* Buffer size */ - unsigned char digi_onlen; /* Length of ON string */ - unsigned char digi_offlen; /* Length of OFF string */ - char digi_onstr[DIGI_PLEN]; /* Printer on string */ - char digi_offstr[DIGI_PLEN]; /* Printer off string */ - char digi_term[DIGI_TSIZ]; /* terminal string */ -}; - -/************************************************************************ - * Ioctl command arguments for DIGI parameters. - ************************************************************************/ -/* Read params */ -#define DIGI_GETA _IOR('e', 94, struct digi_struct) - -/* Set params */ -#define DIGI_SETA _IOW('e', 95, struct digi_struct) - -/* Drain & set params */ -#define DIGI_SETAW _IOW('e', 96, struct digi_struct) - -/* Drain, flush & set params */ -#define DIGI_SETAF _IOW('e', 97, struct digi_struct) - -/* Get startc/stopc flow control characters */ -#define DIGI_GETFLOW _IOR('e', 99, struct digiflow_struct) - -/* Set startc/stopc flow control characters */ -#define DIGI_SETFLOW _IOW('e', 100, struct digiflow_struct) - -/* Get Aux. startc/stopc flow control chars */ -#define DIGI_GETAFLOW _IOR('e', 101, struct digiflow_struct) - -/* Set Aux. startc/stopc flow control chars */ -#define DIGI_SETAFLOW _IOW('e', 102, struct digiflow_struct) - -/* Set integer baud rate */ -#define DIGI_SETCUSTOMBAUD _IOW('e', 106, int) - -/* Get integer baud rate */ -#define DIGI_GETCUSTOMBAUD _IOR('e', 107, int) - -#define DIGI_GEDELAY _IOR('d', 246, int) /* Get edelay */ -#define DIGI_SEDELAY _IOW('d', 247, int) /* Get edelay */ - - -#endif /* _DIGIDRP_H */ diff --git a/drivers/staging/dgrp/drp.h b/drivers/staging/dgrp/drp.h deleted file mode 100644 index 4024b488eba9..000000000000 --- a/drivers/staging/dgrp/drp.h +++ /dev/null @@ -1,693 +0,0 @@ -/* - * - * Copyright 1999 Digi International (www.digi.com) - * Gene Olson - * James Puzzo - * Scott Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - */ - -/************************************************************************ - * Master include file for Linux Realport Driver. - ************************************************************************/ - -#ifndef __DRP_H -#define __DRP_H - -#include -#include -#include -#include - - -#include "digirp.h" - -/************************************************************************ - * Tuning parameters. - ************************************************************************/ - -#define CHAN_MAX 64 /* Max # ports per server */ - -#define SEQ_MAX 128 /* Max # transmit sequences (2^n) */ -#define SEQ_MASK (SEQ_MAX-1) /* Sequence buffer modulus mask */ - -#define TBUF_MAX 4096 /* Size of transmit buffer (2^n) */ -#define RBUF_MAX 4096 /* Size of receive buffer (2^n) */ - -#define TBUF_MASK (TBUF_MAX-1) /* Transmit buffer modulus mask */ -#define RBUF_MASK (RBUF_MAX-1) /* Receive buffer modulus mask */ - -#define TBUF_LOW 1000 /* Transmit low water mark */ - -#define UIO_BASE 1000 /* Base for write operations */ -#define UIO_MIN 2000 /* Minimum size application buffer */ -#define UIO_MAX 8100 /* Unix I/O buffer size */ - -#define MON_MAX 65536 /* Monitor buffer size (2^n) */ -#define MON_MASK (MON_MAX-1) /* Monitor wrap mask */ - -#define DPA_MAX 65536 /* DPA buffer size (2^n) */ -#define DPA_MASK (DPA_MAX-1) /* DPA wrap mask */ -#define DPA_HIGH_WATER 58000 /* Enforce flow control when - * over this amount - */ - -#define IDLE_MAX (20 * HZ) /* Max TCP link idle time */ - -#define MAX_DESC_LEN 100 /* Maximum length of stored PS - * description - */ - -#define WRITEBUFLEN ((4096) + 4) /* 4 extra for alignment play space */ - -#define VPDSIZE 512 - -/************************************************************************ - * Minor device decoding conventions. - ************************************************************************ - * - * For Linux, the net and mon devices are handled via "proc", so we - * only have to mux the "tty" devices. Since every PortServer will - * have an individual major number, the PortServer number does not - * need to be encoded, and in fact, does not need to exist. - * - */ - -/* - * Port device decoding conventions: - * - * Device 00 - 3f 64 dial-in modem devices. (tty) - * Device 40 - 7f 64 dial-out tty devices. (cu) - * Device 80 - bf 64 dial-out printer devices. - * - * IS_PRINT(dev) This is a printer device. - * - * OPEN_CATEGORY(dev) Specifies the device category. No two - * devices of different categories may be open - * at the same time. - * - * The following require the category returned by OPEN_CATEGORY(). - * - * OPEN_WAIT_AVAIL(cat) Waits on open until the device becomes - * available. Fails if NDELAY specified. - * - * OPEN_WAIT_CARRIER(cat) Waits on open if carrier is not present. - * Succeeds if NDELAY is given. - * - * OPEN_FORCES_CARRIER(cat) Carrier is forced high on open. - * - */ - -#define PORT_NUM(dev) ((dev) & 0x3f) - -#define OPEN_CATEGORY(dev) ((((dev) & 0x80) & 0x40)) -#define IS_PRINT(dev) (((dev) & 0xff) >= 0x80) - -#define OPEN_WAIT_AVAIL(cat) (((cat) & 0x40) == 0x000) -#define OPEN_WAIT_CARRIER(cat) (((cat) & 0x40) == 0x000) -#define OPEN_FORCES_CARRIER(cat) (((cat) & 0x40) != 0x000) - - -/************************************************************************ - * Modem signal defines for 16450/16550 compatible FEP. - * set in ch_mout, ch_mflow, ch_mlast etc - ************************************************************************/ - -/* TODO : Re-verify that these modem signal definitions are correct */ - -#define DM_DTR 0x01 -#define DM_RTS 0x02 -#define DM_RTS_TOGGLE 0x04 - -#define DM_OUT1 0x04 -#define DM_OUT2 0x08 - -#define DM_CTS 0x10 -#define DM_DSR 0x20 -#define DM_RI 0x40 -#define DM_CD 0x80 /* This is the DCD flag */ - - -/************************************************************************ - * Realport Event Flags. - ************************************************************************/ - -#define EV_OPU 0x0001 /* Ouput paused by client */ -#define EV_OPS 0x0002 /* Output paused by XOFF */ -#define EV_OPX 0x0004 /* Output paused by XXOFF */ -#define EV_OPH 0x0008 /* Output paused by MFLOW */ -#define EV_IPU 0x0010 /* Input paused by client */ -#define EV_IPS 0x0020 /* Input paused by hi/low water */ -#define EV_TXB 0x0040 /* Transmit break pending */ -#define EV_TXI 0x0080 /* Transmit immediate pending */ -#define EV_TXF 0x0100 /* Transmit flow control pending */ -#define EV_RXB 0x0200 /* Break received */ - - -/************************************************************************ - * Realport CFLAGS. - ************************************************************************/ - -#define CF_CS5 0x0000 /* 5 bit characters */ -#define CF_CS6 0x0010 /* 6 bit characters */ -#define CF_CS7 0x0020 /* 7 bit characters */ -#define CF_CS8 0x0030 /* 8 bit characters */ -#define CF_CSIZE 0x0030 /* Character size */ -#define CF_CSTOPB 0x0040 /* Two stop bits */ -#define CF_CREAD 0x0080 /* Enable receiver */ -#define CF_PARENB 0x0100 /* Enable parity */ -#define CF_PARODD 0x0200 /* Odd parity */ -#define CF_HUPCL 0x0400 /* Drop DTR on close */ - - -/************************************************************************ - * Realport XFLAGS. - ************************************************************************/ - -#define XF_XPAR 0x0001 /* Enable Mark/Space Parity */ -#define XF_XMODEM 0x0002 /* Enable in-band modem signalling */ -#define XF_XCASE 0x0004 /* Convert special characters */ -#define XF_XEDATA 0x0008 /* Error data in stream */ -#define XF_XTOSS 0x0010 /* Toss IXANY characters */ -#define XF_XIXON 0x0020 /* xxon/xxoff enable */ - - -/************************************************************************ - * Realport IFLAGS. - ************************************************************************/ - -#define IF_IGNBRK 0x0001 /* Ignore input break */ -#define IF_BRKINT 0x0002 /* Break interrupt */ -#define IF_IGNPAR 0x0004 /* Ignore error characters */ -#define IF_PARMRK 0x0008 /* Error chars marked with 0xff */ -#define IF_INPCK 0x0010 /* Input parity checking enabled */ -#define IF_ISTRIP 0x0020 /* Input chars masked with 0x7F */ -#define IF_IXON 0x0400 /* Output software flow control */ -#define IF_IXANY 0x0800 /* Restart output on any char */ -#define IF_IXOFF 0x1000 /* Input software flow control */ -#define IF_DOSMODE 0x8000 /* 16450-compatible errors */ - - -/************************************************************************ - * Realport OFLAGS. - ************************************************************************/ - -#define OF_OLCUC 0x0002 /* Map lower to upper case */ -#define OF_ONLCR 0x0004 /* Map NL to CR-NL */ -#define OF_OCRNL 0x0008 /* Map CR to NL */ -#define OF_ONOCR 0x0010 /* No CR output at column 0 */ -#define OF_ONLRET 0x0020 /* Assume NL does NL/CR */ -#define OF_TAB3 0x1800 /* Tabs expand to 8 spaces */ -#define OF_TABDLY 0x1800 /* Tab delay */ - -/************************************************************************ - * Unit flag definitions for un_flag. - ************************************************************************/ - -/* These are the DIGI unit flags */ -#define UN_EXCL 0x00010000 /* Exclusive open */ -#define UN_STICKY 0x00020000 /* TTY Settings are now sticky */ -#define UN_BUSY 0x00040000 /* Some work this channel */ -#define UN_PWAIT 0x00080000 /* Printer waiting for terminal */ -#define UN_TIME 0x00100000 /* Waiting on time */ -#define UN_EMPTY 0x00200000 /* Waiting output queue empty */ -#define UN_LOW 0x00400000 /* Waiting output low water */ -#define UN_DIGI_MASK 0x00FF0000 /* Waiting output low water */ - -/* - * Definitions for async_struct (and serial_struct) flags field - * - * these are the ASYNC flags copied from serial.h - * - */ -#define UN_HUP_NOTIFY 0x0001 /* Notify getty on hangups and - * closes on the callout port - */ -#define UN_FOURPORT 0x0002 /* Set OU1, OUT2 per AST Fourport settings */ -#define UN_SAK 0x0004 /* Secure Attention Key (Orange book) */ -#define UN_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */ - -#define UN_SPD_MASK 0x0030 -#define UN_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */ -#define UN_SPD_VHI 0x0020 /* Use 115200 instead of 38400 bps */ -#define UN_SPD_CUST 0x0030 /* Use user-specified divisor */ - -#define UN_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */ -#define UN_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */ - -#define UN_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */ -#define UN_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */ -#define UN_CALLOUT_NOHUP 0x0400 /* Don't do hangups for cua device */ - -#define UN_FLAGS 0x0FFF /* Possible legal async flags */ -#define UN_USR_MASK 0x0430 /* Legal flags that non-privileged - * users can set or reset - */ - -#define UN_INITIALIZED 0x80000000 /* Serial port was initialized */ -#define UN_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */ -#define UN_NORMAL_ACTIVE 0x20000000 /* Normal device is active */ -#define UN_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */ -#define UN_CLOSING 0x08000000 /* Serial port is closing */ -#define UN_CTS_FLOW 0x04000000 /* Do CTS flow control */ -#define UN_CHECK_CD 0x02000000 /* i.e., CLOCAL */ -#define UN_SHARE_IRQ 0x01000000 /* for multifunction cards */ - - -/************************************************************************ - * Structure for terminal or printer unit. struct un_struct - * - * Note that in some places the code assumes the "tty_t" is placed - * first in the structure. - ************************************************************************/ - -struct un_struct { - struct tty_struct *un_tty; /* System TTY struct */ - struct ch_struct *un_ch; /* Associated channel */ - - ushort un_open_count; /* Successful open count */ - int un_flag; /* Unit flags */ - ushort un_tbusy; /* Busy transmit count */ - - wait_queue_head_t un_open_wait; - wait_queue_head_t un_close_wait; - ushort un_type; - struct device *un_sysfs; -}; - - -/************************************************************************ - * Channel State Numbers for ch_state. - ************************************************************************/ - -/* - * The ordering is important. - * - * state <= CS_WAIT_CANCEL implies the channel is definitely closed. - * - * state >= CS_WAIT_FAIL implies the channel is definitely open. - * - * state >= CS_READY implies data is allowed on the channel. - */ - -enum dgrp_ch_state_t { - CS_IDLE = 0, /* Channel is idle */ - CS_WAIT_OPEN = 1, /* Waiting for Immediate Open Resp */ - CS_WAIT_CANCEL = 2, /* Waiting for Per/Incom Cancel Resp */ - CS_WAIT_FAIL = 3, /* Waiting for Immed Open Failure */ - CS_SEND_QUERY = 4, /* Ready to send Port Query */ - CS_WAIT_QUERY = 5, /* Waiting for Port Query Response */ - CS_READY = 6, /* Ready to accept commands and data */ - CS_SEND_CLOSE = 7, /* Ready to send Close Request */ - CS_WAIT_CLOSE = 8 /* Waiting for Close Response */ -}; - -/************************************************************************ - * Device flag definitions for ch_flag. - ************************************************************************/ - -/* - * Note that the state of the two carrier based flags is key. When - * we check for carrier state transitions, we look at the current - * physical state of the DCD line and compare it with PHYS_CD (which - * was the state the last time we checked), and we also determine - * a new virtual state (composite of the physical state, FORCEDCD, - * CLOCAL, etc.) and compare it with VIRT_CD. - * - * VIRTUAL transitions high will have the side effect of waking blocked - * opens. - * - * PHYSICAL transitions low will cause hangups to occur _IF_ the virtual - * state is also low. We DON'T want to hangup on a PURE virtual drop. - */ - -#define CH_HANGUP 0x00002 /* Server port ready to close */ - -#define CH_VIRT_CD 0x00004 /* Carrier was virtually present */ -#define CH_PHYS_CD 0x00008 /* Carrier was physically present */ - -#define CH_CLOCAL 0x00010 /* CLOCAL set in cflags */ -#define CH_BAUD0 0x00020 /* Baud rate zero hangup */ - -#define CH_FAST_READ 0x00040 /* Fast reads are enabled */ -#define CH_FAST_WRITE 0x00080 /* Fast writes are enabled */ - -#define CH_PRON 0x00100 /* Printer on string active */ -#define CH_RX_FLUSH 0x00200 /* Flushing receive data */ -#define CH_LOW 0x00400 /* Thread waiting for LOW water */ -#define CH_EMPTY 0x00800 /* Thread waiting for EMPTY */ -#define CH_DRAIN 0x01000 /* Close is waiting to drain */ -#define CH_INPUT 0x02000 /* Thread waiting for INPUT */ -#define CH_RXSTOP 0x04000 /* Stop output to ldisc */ -#define CH_PARAM 0x08000 /* A parameter was updated */ -#define CH_WAITING_SYNC 0x10000 /* A pending sync was assigned - * to this port. - */ -#define CH_PORT_GONE 0x20000 /* Port has disappeared */ -#define CH_TX_BREAK 0x40000 /* TX Break to be sent, - * but has not yet. - */ - -/************************************************************************ - * Types of Open Requests for ch_otype. - ************************************************************************/ - -#define OTYPE_IMMEDIATE 0 /* Immediate Open */ -#define OTYPE_PERSISTENT 1 /* Persistent Open */ -#define OTYPE_INCOMING 2 /* Incoming Open */ - - -/************************************************************************ - * Request/Response flags. - ************************************************************************/ - -#define RR_SEQUENCE 0x0001 /* Get server RLAST, TIN */ -#define RR_STATUS 0x0002 /* Get server MINT, EINT */ -#define RR_BUFFER 0x0004 /* Get server RSIZE, TSIZE */ -#define RR_CAPABILITY 0x0008 /* Get server port capabilities */ - -#define RR_TX_FLUSH 0x0040 /* Flush output buffers */ -#define RR_RX_FLUSH 0x0080 /* Flush input buffers */ - -#define RR_TX_STOP 0x0100 /* Pause output */ -#define RR_RX_STOP 0x0200 /* Pause input */ -#define RR_TX_START 0x0400 /* Start output */ -#define RR_RX_START 0x0800 /* Start input */ - -#define RR_TX_BREAK 0x1000 /* Send BREAK */ -#define RR_TX_ICHAR 0x2000 /* Send character immediate */ - - -/************************************************************************ - * Channel information structure. struct ch_struct - ************************************************************************/ - -struct ch_struct { - struct digi_struct ch_digi; /* Digi variables */ - int ch_edelay; /* Digi edelay */ - - struct tty_port port; - struct un_struct ch_tun; /* Terminal unit info */ - struct un_struct ch_pun; /* Printer unit info */ - - struct nd_struct *ch_nd; /* Node pointer */ - u8 *ch_tbuf; /* Local Transmit Buffer */ - u8 *ch_rbuf; /* Local Receive Buffer */ - ulong ch_cpstime; /* Printer CPS time */ - ulong ch_waketime; /* Printer wake time */ - - ulong ch_flag; /* CH_* flags */ - - enum dgrp_ch_state_t ch_state; /* CS_* Protocol state */ - ushort ch_send; /* Bit vector of RR_* requests */ - ushort ch_expect; /* Bit vector of RR_* responses */ - ushort ch_wait_carrier; /* Thread count waiting for carrier */ - ushort ch_wait_count[3]; /* Thread count waiting by otype */ - - ushort ch_portnum; /* Port number */ - ushort ch_open_count; /* Successful open count */ - ushort ch_category; /* Device category */ - ushort ch_open_error; /* Last open error number */ - ushort ch_break_time; /* Pending break request time */ - ushort ch_cpsrem; /* Printer CPS remainder */ - ushort ch_ocook; /* Realport fastcook oflags */ - ushort ch_inwait; /* Thread count in CLIST input */ - - ushort ch_tin; /* Local transmit buffer in ptr */ - ushort ch_tout; /* Local transmit buffer out ptr */ - ushort ch_s_tin; /* Realport TIN */ - ushort ch_s_tpos; /* Realport TPOS */ - ushort ch_s_tsize; /* Realport TSIZE */ - ushort ch_s_treq; /* Realport TREQ */ - ushort ch_s_elast; /* Realport ELAST */ - - ushort ch_rin; /* Local receive buffer in ptr */ - ushort ch_rout; /* Local receive buffer out ptr */ - ushort ch_s_rin; /* Realport RIN */ - /* David Fries 7-13-2001, ch_s_rin should be renamed ch_s_rout because - * the variable we want to represent is the PortServer's ROUT, which is - * the sequence number for the next byte the PortServer will send us. - * RIN is the sequence number for the next byte the PortServer will - * receive from the uart. The port server will send data as long as - * ROUT is less than RWIN. What would happen is the port is opened, it - * receives data, it gives the value of RIN, we set the RWIN to - * RIN+RBUF_MAX-1, it sends us RWIN-ROUT bytes which overflows. ROUT - * is set to zero when the port is opened, so we start at zero and - * count up as data is received. - */ - ushort ch_s_rwin; /* Realport RWIN */ - ushort ch_s_rsize; /* Realport RSIZE */ - - ushort ch_tmax; /* Local TMAX */ - ushort ch_ttime; /* Local TTIME */ - ushort ch_rmax; /* Local RMAX */ - ushort ch_rtime; /* Local RTIME */ - ushort ch_rlow; /* Local RLOW */ - ushort ch_rhigh; /* Local RHIGH */ - - ushort ch_s_tmax; /* Realport TMAX */ - ushort ch_s_ttime; /* Realport TTIME */ - ushort ch_s_rmax; /* Realport RMAX */ - ushort ch_s_rtime; /* Realport RTIME */ - ushort ch_s_rlow; /* Realport RLOW */ - ushort ch_s_rhigh; /* Realport RHIGH */ - - ushort ch_brate; /* Local baud rate */ - ushort ch_cflag; /* Local tty cflags */ - ushort ch_iflag; /* Local tty iflags */ - ushort ch_oflag; /* Local tty oflags */ - ushort ch_xflag; /* Local tty xflags */ - - ushort ch_s_brate; /* Realport BRATE */ - ushort ch_s_cflag; /* Realport CFLAG */ - ushort ch_s_iflag; /* Realport IFLAG */ - ushort ch_s_oflag; /* Realport OFLAG */ - ushort ch_s_xflag; /* Realport XFLAG */ - - u8 ch_otype; /* Open request type */ - u8 ch_pscan_savechar; /* Last character read by parity scan */ - u8 ch_pscan_state; /* PScan State based on last 2 chars */ - u8 ch_otype_waiting; /* Type of open pending in server */ - u8 ch_flush_seq; /* Receive flush end sequence */ - u8 ch_s_mlast; /* Realport MLAST */ - - u8 ch_mout; /* Local MOUT */ - u8 ch_mflow; /* Local MFLOW */ - u8 ch_mctrl; /* Local MCTRL */ - u8 ch_xon; /* Local XON */ - u8 ch_xoff; /* Local XOFF */ - u8 ch_lnext; /* Local LNEXT */ - u8 ch_xxon; /* Local XXON */ - u8 ch_xxoff; /* Local XXOFF */ - - u8 ch_s_mout; /* Realport MOUT */ - u8 ch_s_mflow; /* Realport MFLOW */ - u8 ch_s_mctrl; /* Realport MCTRL */ - u8 ch_s_xon; /* Realport XON */ - u8 ch_s_xoff; /* Realport XOFF */ - u8 ch_s_lnext; /* Realport LNEXT */ - u8 ch_s_xxon; /* Realport XXON */ - u8 ch_s_xxoff; /* Realport XXOFF */ - - wait_queue_head_t ch_flag_wait; /* Wait queue for ch_flag changes */ - wait_queue_head_t ch_sleep; /* Wait queue for my_sleep() */ - - int ch_custom_speed; /* Realport custom speed */ - int ch_txcount; /* Running TX count */ - int ch_rxcount; /* Running RX count */ -}; - - -/************************************************************************ - * Node State definitions. - ************************************************************************/ - -enum dgrp_nd_state_t { - NS_CLOSED = 0, /* Network device is closed */ - NS_IDLE = 1, /* Network connection inactive */ - NS_SEND_QUERY = 2, /* Send server query */ - NS_WAIT_QUERY = 3, /* Wait for query response */ - NS_READY = 4, /* Network ready */ - NS_SEND_ERROR = 5 /* Must send error hangup */ -}; - -#define ND_STATE_STR(x) \ - ((x) == NS_CLOSED ? "CLOSED" : \ - ((x) == NS_IDLE ? "IDLE" : \ - ((x) == NS_SEND_QUERY ? "SEND_QUERY" : \ - ((x) == NS_WAIT_QUERY ? "WAIT_QUERY" : \ - ((x) == NS_READY ? "READY" : \ - ((x) == NS_SEND_ERROR ? "SEND_ERROR" : "UNKNOWN")))))) - -/************************************************************************ - * Node Flag definitions. - ************************************************************************/ - -#define ND_SELECT 0x0001 /* Multiple net read selects */ -#define ND_DEB_WAIT 0x0002 /* Debug Device waiting */ - - -/************************************************************************ - * Monitoring flag definitions. - ************************************************************************/ - -#define MON_WAIT_DATA 0x0001 /* Waiting for buffer data */ -#define MON_WAIT_SPACE 0x0002 /* Waiting for buffer space */ - -/************************************************************************ - * DPA flag definitions. - ************************************************************************/ - -#define DPA_WAIT_DATA 0x0001 /* Waiting for buffer data */ -#define DPA_WAIT_SPACE 0x0002 /* Waiting for buffer space */ - - -/************************************************************************ - * Definitions taken from Realport Dump. - ************************************************************************/ - -#define RPDUMP_MAGIC "Digi-RealPort-1.0" - -#define RPDUMP_MESSAGE 0xE2 /* Descriptive message */ -#define RPDUMP_RESET 0xE7 /* Connection reset */ -#define RPDUMP_CLIENT 0xE8 /* Client data */ -#define RPDUMP_SERVER 0xE9 /* Server data */ - - -/************************************************************************ - * Node request/response definitions. - ************************************************************************/ - -#define NR_ECHO 0x0001 /* Server echo packet */ -#define NR_IDENT 0x0002 /* Server Product ID */ -#define NR_CAPABILITY 0x0004 /* Server Capabilties */ -#define NR_VPD 0x0008 /* Server VPD, if any */ -#define NR_PASSWORD 0x0010 /* Server Password */ - -/************************************************************************ - * Registration status of the node's Linux struct tty_driver structures. - ************************************************************************/ -#define SERIAL_TTDRV_REG 0x0001 /* nd_serial_ttdriver registered */ -#define CALLOUT_TTDRV_REG 0x0002 /* nd_callout_ttdriver registered */ -#define XPRINT_TTDRV_REG 0x0004 /* nd_xprint_ttdriver registered */ - - -/************************************************************************ - * Node structure. There exists one of these for each associated - * realport server. - ************************************************************************/ - -struct nd_struct { - struct list_head list; - long nd_major; /* Node's major number */ - long nd_ID; /* Node's ID code */ - - char nd_serial_name[50]; /* "tty_dgrp__" + null */ - char nd_callout_name[50]; /* "cu_dgrp__" + null */ - char nd_xprint_name[50]; /* "pr_dgrp__" + null */ - - char password[16]; /* Password for server, if needed */ - int nd_tty_ref_cnt; /* Linux tty reference count */ - - struct proc_dir_entry *nd_net_de; /* Dir entry for /proc/dgrp/net */ - struct proc_dir_entry *nd_mon_de; /* Dir entry for /proc/dgrp/mon */ - struct proc_dir_entry *nd_ports_de; /* Dir entry for /proc/dgrp/ports*/ - struct proc_dir_entry *nd_dpa_de; /* Dir entry for /proc/dgrp/dpa */ - - spinlock_t nd_lock; /* General node lock */ - - struct semaphore nd_net_semaphore; /* Net read/write lock */ - struct semaphore nd_mon_semaphore; /* Monitor buffer lock */ - spinlock_t nd_dpa_lock; /* DPA buffer lock */ - - enum dgrp_nd_state_t nd_state; /* NS_* network state */ - int nd_chan_count; /* # active channels */ - int nd_flag; /* Node flags */ - int nd_send; /* Responses to send */ - int nd_expect; /* Responses we expect */ - - u8 *nd_iobuf; /* Network R/W Buffer */ - wait_queue_head_t nd_tx_waitq; /* Network select wait queue */ - - u8 *nd_inputbuf; /* Input Buffer */ - u8 *nd_inputflagbuf; /* Input Flags Buffer */ - - int nd_tx_deposit; /* Accumulated transmit deposits */ - int nd_tx_charge; /* Accumulated transmit charges */ - int nd_tx_credit; /* Current TX credit */ - int nd_tx_ready; /* Ready to transmit */ - int nd_tx_work; /* TX work waiting */ - ulong nd_tx_time; /* Last transmit time */ - ulong nd_poll_time; /* Next scheduled poll time */ - - int nd_delay; /* Current TX delay */ - int nd_rate; /* Current TX rate */ - struct link_struct nd_link; /* Link speed params. */ - - int nd_seq_in; /* TX seq in ptr */ - int nd_seq_out; /* TX seq out ptr */ - int nd_unack; /* Unacknowledged byte count */ - int nd_remain; /* Remaining receive bytes */ - int nd_tx_module; /* Current TX module # */ - int nd_rx_module; /* Current RX module # */ - char *nd_error; /* Protocol error message */ - - int nd_write_count; /* drp_write() call count */ - int nd_read_count; /* drp_read() count */ - int nd_send_count; /* TCP message sent */ - int nd_tx_byte; /* Transmit byte count */ - int nd_rx_byte; /* Receive byte count */ - - ulong nd_mon_lbolt; /* Monitor start time */ - int nd_mon_flag; /* Monitor flags */ - int nd_mon_in; /* Monitor in pointer */ - int nd_mon_out; /* Monitor out pointer */ - wait_queue_head_t nd_mon_wqueue; /* Monitor wait queue (on flags) */ - u8 *nd_mon_buf; /* Monitor buffer */ - - ulong nd_dpa_lbolt; /* DPA start time */ - int nd_dpa_flag; /* DPA flags */ - int nd_dpa_in; /* DPA in pointer */ - int nd_dpa_out; /* DPA out pointer */ - wait_queue_head_t nd_dpa_wqueue; /* DPA wait queue (on flags) */ - u8 *nd_dpa_buf; /* DPA buffer */ - - uint nd_dpa_debug; - uint nd_dpa_port; - - wait_queue_head_t nd_seq_wque[SEQ_MAX]; /* TX thread wait queues */ - u8 nd_seq_wait[SEQ_MAX]; /* Transmit thread wait count */ - - ushort nd_seq_size[SEQ_MAX]; /* Transmit seq packet size */ - ulong nd_seq_time[SEQ_MAX]; /* Transmit seq packet time */ - - ushort nd_hw_ver; /* HW version returned from PS */ - ushort nd_sw_ver; /* SW version returned from PS */ - uint nd_hw_id; /* HW ID returned from PS */ - u8 nd_ps_desc[MAX_DESC_LEN]; /* Description from PS */ - uint nd_vpd_len; /* VPD len, if any */ - u8 nd_vpd[VPDSIZE]; /* VPD, if any */ - - ulong nd_ttdriver_flags; /* Registration status */ - struct tty_driver *nd_serial_ttdriver; /* Linux TTYDRIVER structure */ - struct tty_driver *nd_callout_ttdriver; /* Linux TTYDRIVER structure */ - struct tty_driver *nd_xprint_ttdriver; /* Linux TTYDRIVER structure */ - - u8 *nd_writebuf; /* Used to cache data read - * from user - */ - struct ch_struct nd_chan[CHAN_MAX]; /* Channel array */ - struct device *nd_class_dev; /* Hang our sysfs stuff off of here */ -}; - -#endif /* __DRP_H */ -- cgit From 14b596c9d80bf63da3f0fcbddfd67eb62197afb4 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Tue, 1 Jul 2014 18:54:43 +0300 Subject: staging: cxt1e1: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the driver as it hasn't been cleaned up and it doesn't look like anyone is going to work on it anymore. This can be reverted if someone wants to work to fix the remaining issues the driver has. Signed-off-by: Kristina MartÅ¡enko Cc: Bob Beers Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/cxt1e1/Kconfig | 21 - drivers/staging/cxt1e1/Makefile | 18 - drivers/staging/cxt1e1/comet.c | 596 --------- drivers/staging/cxt1e1/comet.h | 353 ------ drivers/staging/cxt1e1/comet_tables.c | 538 -------- drivers/staging/cxt1e1/comet_tables.h | 61 - drivers/staging/cxt1e1/functions.c | 318 ----- drivers/staging/cxt1e1/hwprobe.c | 382 ------ drivers/staging/cxt1e1/libsbew.h | 549 -------- drivers/staging/cxt1e1/linux.c | 1142 ----------------- drivers/staging/cxt1e1/musycc.c | 1736 -------------------------- drivers/staging/cxt1e1/musycc.h | 427 ------- drivers/staging/cxt1e1/pmc93x6_eeprom.c | 532 -------- drivers/staging/cxt1e1/pmc93x6_eeprom.h | 39 - drivers/staging/cxt1e1/pmcc4.h | 108 -- drivers/staging/cxt1e1/pmcc4_cpld.h | 91 -- drivers/staging/cxt1e1/pmcc4_defs.h | 68 - drivers/staging/cxt1e1/pmcc4_drv.c | 1613 ------------------------ drivers/staging/cxt1e1/pmcc4_ioctls.h | 65 - drivers/staging/cxt1e1/pmcc4_private.h | 296 ----- drivers/staging/cxt1e1/pmcc4_sysdep.h | 63 - drivers/staging/cxt1e1/sbe_bid.h | 47 - drivers/staging/cxt1e1/sbe_promformat.h | 130 -- drivers/staging/cxt1e1/sbecom_inline_linux.h | 193 --- drivers/staging/cxt1e1/sbecrc.c | 134 -- drivers/staging/cxt1e1/sbeid.c | 205 --- drivers/staging/cxt1e1/sbeproc.c | 219 ---- drivers/staging/cxt1e1/sbeproc.h | 42 - drivers/staging/cxt1e1/sbew_ioc.h | 81 -- 31 files changed, 10070 deletions(-) delete mode 100644 drivers/staging/cxt1e1/Kconfig delete mode 100644 drivers/staging/cxt1e1/Makefile delete mode 100644 drivers/staging/cxt1e1/comet.c delete mode 100644 drivers/staging/cxt1e1/comet.h delete mode 100644 drivers/staging/cxt1e1/comet_tables.c delete mode 100644 drivers/staging/cxt1e1/comet_tables.h delete mode 100644 drivers/staging/cxt1e1/functions.c delete mode 100644 drivers/staging/cxt1e1/hwprobe.c delete mode 100644 drivers/staging/cxt1e1/libsbew.h delete mode 100644 drivers/staging/cxt1e1/linux.c delete mode 100644 drivers/staging/cxt1e1/musycc.c delete mode 100644 drivers/staging/cxt1e1/musycc.h delete mode 100644 drivers/staging/cxt1e1/pmc93x6_eeprom.c delete mode 100644 drivers/staging/cxt1e1/pmc93x6_eeprom.h delete mode 100644 drivers/staging/cxt1e1/pmcc4.h delete mode 100644 drivers/staging/cxt1e1/pmcc4_cpld.h delete mode 100644 drivers/staging/cxt1e1/pmcc4_defs.h delete mode 100644 drivers/staging/cxt1e1/pmcc4_drv.c delete mode 100644 drivers/staging/cxt1e1/pmcc4_ioctls.h delete mode 100644 drivers/staging/cxt1e1/pmcc4_private.h delete mode 100644 drivers/staging/cxt1e1/pmcc4_sysdep.h delete mode 100644 drivers/staging/cxt1e1/sbe_bid.h delete mode 100644 drivers/staging/cxt1e1/sbe_promformat.h delete mode 100644 drivers/staging/cxt1e1/sbecom_inline_linux.h delete mode 100644 drivers/staging/cxt1e1/sbecrc.c delete mode 100644 drivers/staging/cxt1e1/sbeid.c delete mode 100644 drivers/staging/cxt1e1/sbeproc.c delete mode 100644 drivers/staging/cxt1e1/sbeproc.h delete mode 100644 drivers/staging/cxt1e1/sbew_ioc.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 91ebf62497bc..0fd87443412a 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -72,8 +72,6 @@ source "drivers/staging/sep/Kconfig" source "drivers/staging/iio/Kconfig" -source "drivers/staging/cxt1e1/Kconfig" - source "drivers/staging/xgifb/Kconfig" source "drivers/staging/tidspbridge/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index a1e0b1c5f72f..9aeecc9b07e0 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -30,7 +30,6 @@ obj-$(CONFIG_VT6656) += vt6656/ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ -obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/ obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/ diff --git a/drivers/staging/cxt1e1/Kconfig b/drivers/staging/cxt1e1/Kconfig deleted file mode 100644 index 947f42a65c59..000000000000 --- a/drivers/staging/cxt1e1/Kconfig +++ /dev/null @@ -1,21 +0,0 @@ -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. - 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 - here to allow the driver to operate with the NCOMM product. diff --git a/drivers/staging/cxt1e1/Makefile b/drivers/staging/cxt1e1/Makefile deleted file mode 100644 index b879e7b553c2..000000000000 --- a/drivers/staging/cxt1e1/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -obj-$(CONFIG_CXT1E1) += cxt1e1.o - -ccflags-y := -DSBE_PMCC4_ENABLE -ccflags-y += -DSBE_ISR_TASKLET - -cxt1e1-y := \ - musycc.o \ - pmcc4_drv.o \ - comet.o \ - linux.o \ - functions.o \ - hwprobe.o \ - pmc93x6_eeprom.o \ - sbecrc.o \ - comet_tables.o \ - sbeid.o - -cxt1e1-$(CONFIG_PROC_FS) += sbeproc.o diff --git a/drivers/staging/cxt1e1/comet.c b/drivers/staging/cxt1e1/comet.c deleted file mode 100644 index 7005ad022339..000000000000 --- a/drivers/staging/cxt1e1/comet.c +++ /dev/null @@ -1,596 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include "pmcc4_sysdep.h" -#include "sbecom_inline_linux.h" -#include "libsbew.h" -#include "pmcc4.h" -#include "comet.h" -#include "comet_tables.h" - - -#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(struct s_comet_reg *comet); -static void WrtRcvEqualizerTbl(ci_t *ci, struct s_comet_reg *comet, - u_int32_t *table); -static void WrtXmtWaveformTbl(ci_t *ci, struct s_comet_reg *comet, - u_int8_t table[COMET_NUM_SAMPLES] - [COMET_NUM_UNITS]); - - -static void *TWV_table[12] = { - TWVLongHaul0DB, TWVLongHaul7_5DB, TWVLongHaul15DB, TWVLongHaul22_5DB, - TWVShortHaul0, TWVShortHaul1, TWVShortHaul2, TWVShortHaul3, - TWVShortHaul4, TWVShortHaul5, - /** PORT POINT - 75 Ohm not supported **/ - TWV_E1_75Ohm, - TWV_E1_120Ohm -}; - - -static int -lbo_tbl_lkup(int t1, int lbo) { - /* error switches to default */ - if ((lbo < CFG_LBO_LH0) || (lbo > CFG_LBO_E120)) { - if (t1) - /* default T1 waveform table */ - lbo = CFG_LBO_LH0; - - else - /* default E1 waveform table */ - lbo = CFG_LBO_E120; - } - /* make index ZERO relative */ - return lbo - 1; -} - -void init_comet(void *ci, struct s_comet_reg *comet, u_int32_t port_mode, - int clockmaster, u_int8_t moreParams) -{ - u_int8_t isT1mode; - /* T1 default */ - u_int8_t tix = CFG_LBO_LH0; - isT1mode = IS_FRAME_ANY_T1(port_mode); - /* T1 or E1 */ - if (isT1mode) { - /* Select T1 Mode & PIO output enabled */ - pci_write_32((u_int32_t *) &comet->gbl_cfg, 0xa0); - /* default T1 waveform table */ - tix = lbo_tbl_lkup(isT1mode, CFG_LBO_LH0); - } else { - /* Select E1 Mode & PIO output enabled */ - pci_write_32((u_int32_t *) &comet->gbl_cfg, 0x81); - /* default E1 waveform table */ - tix = lbo_tbl_lkup(isT1mode, CFG_LBO_E120); - } - - if (moreParams & CFG_LBO_MASK) - /* dial-in requested waveform table */ - tix = lbo_tbl_lkup(isT1mode, moreParams & CFG_LBO_MASK); - /* Tx line Intfc cfg Set for analog & no special patterns */ - /* Transmit Line Interface Config. */ - pci_write_32((u_int32_t *) &comet->tx_line_cfg, 0x00); - /* master test Ignore Test settings for now */ - /* making sure it's Default value */ - pci_write_32((u_int32_t *) &comet->mtest, 0x00); - /* Turn on Center (CENT) and everything else off */ - /* RJAT cfg */ - pci_write_32((u_int32_t *) &comet->rjat_cfg, 0x10); - /* Set Jitter Attenuation to recommend T1 values */ - if (isT1mode) { - /* RJAT Divider N1 Control */ - pci_write_32((u_int32_t *) &comet->rjat_n1clk, 0x2F); - /* RJAT Divider N2 Control */ - pci_write_32((u_int32_t *) &comet->rjat_n2clk, 0x2F); - } else { - /* RJAT Divider N1 Control */ - pci_write_32((u_int32_t *) &comet->rjat_n1clk, 0xFF); - /* RJAT Divider N2 Control */ - pci_write_32((u_int32_t *) &comet->rjat_n2clk, 0xFF); - } - - /* Turn on Center (CENT) and everything else off */ - /* TJAT Config. */ - pci_write_32((u_int32_t *) &comet->tjat_cfg, 0x10); - - /* Do not bypass jitter attenuation and bypass elastic store */ - /* rx opts */ - pci_write_32((u_int32_t *) &comet->rx_opt, 0x00); - - /* TJAT ctrl & TJAT divider ctrl */ - /* Set Jitter Attenuation to recommended T1 values */ - if (isT1mode) { - /* TJAT Divider N1 Control */ - pci_write_32((u_int32_t *) &comet->tjat_n1clk, 0x2F); - /* TJAT Divider N2 Control */ - pci_write_32((u_int32_t *) &comet->tjat_n2clk, 0x2F); - } else { - /* TJAT Divider N1 Control */ - pci_write_32((u_int32_t *) &comet->tjat_n1clk, 0xFF); - /* TJAT Divider N2 Control */ - pci_write_32((u_int32_t *) &comet->tjat_n2clk, 0xFF); - } - - /* 1c: rx ELST cfg 20: tx ELST cfg 28&38: rx&tx data link ctrl */ - - /* Select 193-bit frame format */ - if (isT1mode) { - 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); - /* disable T1 data link receive */ - pci_write_32((u_int32_t *) &comet->rxce1_ctl, 0x00); - /* disable T1 data link transmit */ - pci_write_32((u_int32_t *) &comet->txci1_ctl, 0x00); - } - - /* the following is a default value */ - /* Enable 8 out of 10 validation */ - /* t1RBOC enable(BOC:BitOriented Code) */ - pci_write_32((u_int32_t *) &comet->t1_rboc_ena, 0x00); - if (isT1mode) { - /* IBCD cfg: aka Inband Code Detection ** loopback code length - * set to - */ - /* 6 bit down, 5 bit up (assert) */ - pci_write_32((u_int32_t *) &comet->ibcd_cfg, 0x04); - /* line loopback activate pattern */ - pci_write_32((u_int32_t *) &comet->ibcd_act, 0x08); - /* deactivate code pattern (i.e.001) */ - pci_write_32((u_int32_t *) &comet->ibcd_deact, 0x24); - } - /* 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) { - /* 1 - T1 B8ZS */ - case CFG_FRAME_SF: - 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); - /* 5:B8ZS */ - pci_write_32((u_int32_t *) &comet->t1_xbas_cfg, 0x20); - pci_write_32((u_int32_t *) &comet->t1_almi_cfg, 0); - break; - /* 2 - T1 B8ZS */ - case CFG_FRAME_ESF: - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0); - /* Bit 5: T1 DataLink Enable */ - pci_write_32((u_int32_t *) &comet->rxce1_ctl, 0x20); - /* 5: T1 DataLink Enable */ - pci_write_32((u_int32_t *) &comet->txci1_ctl, 0x20); - /* 4:ESF 5:ESFFA */ - pci_write_32((u_int32_t *) &comet->t1_frmr_cfg, 0x30); - /* 2:ESF */ - pci_write_32((u_int32_t *) &comet->sigx_cfg, 0x04); - /* 4:ESF 5:B8ZS */ - pci_write_32((u_int32_t *) &comet->t1_xbas_cfg, 0x30); - /* 4:ESF */ - pci_write_32((u_int32_t *) &comet->t1_almi_cfg, 0x10); - break; - /* 3 - HDB3 */ - case CFG_FRAME_E1PLAIN: - 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; - /* 4 - HDB3 */ - case CFG_FRAME_E1CAS: - 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; - /* 5 - HDB3 */ - case CFG_FRAME_E1CRC: - 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; - /* 6 - HDB3 */ - case CFG_FRAME_E1CRC_CAS: - 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; - /* 7 - T1 AMI */ - case CFG_FRAME_SF_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - 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; - /* 8 - T1 AMI */ - case CFG_FRAME_ESF_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - /* 5: T1 DataLink Enable */ - pci_write_32((u_int32_t *) &comet->rxce1_ctl, 0x20); - /* 5: T1 DataLink Enable */ - pci_write_32((u_int32_t *) &comet->txci1_ctl, 0x20); - /* Bit 4:ESF 5:ESFFA */ - pci_write_32((u_int32_t *) &comet->t1_frmr_cfg, 0x30); - /* 2:ESF */ - pci_write_32((u_int32_t *) &comet->sigx_cfg, 0x04); - /* 4: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); - break; - /* 9 - AMI */ - case CFG_FRAME_E1PLAIN_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - 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; - /* 10 - AMI */ - case CFG_FRAME_E1CAS_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - 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; - /* 11 - AMI */ - case CFG_FRAME_E1CRC_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - 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; - /* 12 - AMI */ - case CFG_FRAME_E1CRC_CAS_AMI: - /* Enable AMI Line Decoding */ - pci_write_32((u_int32_t *) &comet->cdrc_cfg, 0x80); - 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) - */ - /* rate = 1.544 Mb/s */ - if (isT1mode) - /* Comet 0 Master Mode(CMODE=0) */ - pci_write_32((u_int32_t *) &comet->brif_cfg, 0x00); - /* rate = 2.048 Mb/s */ - else - /* Comet 0 Master Mode(CMODE=0) */ - pci_write_32((u_int32_t *) &comet->brif_cfg, 0x01); - - /* 31: BRIF frame pulse cfg 06: tx timing options */ - - /* Master Mode i.e.FPMODE=0 (@0x20) */ - pci_write_32((u_int32_t *) &comet->brif_fpcfg, 0x00); - if ((moreParams & CFG_CLK_PORT_MASK) == CFG_CLK_PORT_INTERNAL) { - if (cxt1e1_log_level >= LOG_SBEBUG12) - pr_info(">> %s: clockmaster internal clock\n", - __func__); - /* internal oscillator */ - pci_write_32((u_int32_t *) &comet->tx_time, 0x0d); - } else { - /* external clock source */ - if (cxt1e1_log_level >= LOG_SBEBUG12) - pr_info(">> %s: clockmaster external clock\n", - __func__); - /* loop timing(external) */ - pci_write_32((u_int32_t *) &comet->tx_time, 0x09); - } - - } else { - /* slave */ - if (isT1mode) - /* Slave Mode(CMODE=1, see above) */ - pci_write_32((u_int32_t *) &comet->brif_cfg, 0x20); - else - /* Slave Mode(CMODE=1)*/ - pci_write_32((u_int32_t *) &comet->brif_cfg, 0x21); - /* Slave Mode i.e. FPMODE=1 (@0x20) */ - pci_write_32((u_int32_t *) &comet->brif_fpcfg, 0x20); - if (cxt1e1_log_level >= LOG_SBEBUG12) - pr_info(">> %s: clockslave internal clock\n", __func__); - /* oscillator timing */ - pci_write_32((u_int32_t *) &comet->tx_time, 0x0d); - } - - /* 32: BRIF parity F-bit cfg */ - /* Totem-pole operation */ - /* Receive Backplane Parity/F-bit */ - pci_write_32((u_int32_t *) &comet->brif_pfcfg, 0x01); - - /* dc: RLPS equalizer V ref */ - /* Configuration */ - if (isT1mode) - /* RLPS Equalizer Voltage */ - pci_write_32((u_int32_t *) &comet->rlps_eqvr, 0x2c); - else - /* RLPS Equalizer Voltage */ - pci_write_32((u_int32_t *) &comet->rlps_eqvr, 0x34); - - /* Reserved bit set and SQUELCH enabled */ - /* f8: RLPS cfg & status f9: RLPS ALOS detect/clear threshold */ - /* RLPS Configuration Status */ - pci_write_32((u_int32_t *) &comet->rlps_cfgsts, 0x11); - 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: loop timing(external) */ - /*BTIF frame pulse cfg */ - if (isT1mode) - /* BTIF Configuration Reg. */ - pci_write_32((u_int32_t *) &comet->btif_cfg, 0x38); - else - /* BTIF Configuration Reg. */ - pci_write_32((u_int32_t *) &comet->btif_cfg, 0x39); - /* BTIF Frame Pulse Config. */ - pci_write_32((u_int32_t *) &comet->btif_fpcfg, 0x01); - - /* 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, struct s_comet_reg *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); - /* for write order preservation when Optimizing driver */ - pci_flush_write(ci); - 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, struct s_comet_reg *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, struct s_comet_reg *comet, u_int32_t *table) -{ - u_int32_t ramaddr; - u_int32_t value; - - for (ramaddr = 0; ramaddr < 256; ramaddr++) { - /*** the following lines are per Errata 7, 2.5 ***/ - { - /* Set up for a read operation */ - pci_write_32((u_int32_t *) &comet->rlps_eq_rwsel, 0x80); - /* for write order preservation when Optimizing driver */ - pci_flush_write(ci); - /* write the addr, initiate a read */ - pci_write_32((u_int32_t *) &comet->rlps_eq_iaddr, - (u_int8_t) ramaddr); - /* for write order preservation when Optimizing driver */ - pci_flush_write(ci); - /* - * wait 3 line rate clock cycles to ensure address bits are - * captured by T1/E1 clock - */ - - /* 683ns * 3 = 1366 ns, approx 2us (but use 4us) */ - OS_uwait(4, "wret"); - } - - 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); - /* for write order preservation when Optimizing driver */ - pci_flush_write(ci); - - /* Storing RAM address, causes RAM to be updated */ - - /* Set up for a write operation */ - pci_write_32((u_int32_t *) &comet->rlps_eq_rwsel, 0); - /* for write order preservation when optimizing driver */ - pci_flush_write(ci); - /* write the addr, initiate a read */ - pci_write_32((u_int32_t *) &comet->rlps_eq_iaddr, - (u_int8_t) ramaddr); - /* for write order preservation when optimizing driver */ - pci_flush_write(ci); - - /* - * wait 3 line rate clock cycles to ensure address bits are captured - * by T1/E1 clock - */ - /* 683ns * 3 = 1366 ns, approx 2us (but use 4us) */ - OS_uwait(4, "wret"); - } - - /* Enable Equalizer & set it to use 256 periods */ - pci_write_32((u_int32_t *) &comet->rlps_eq_cfg, 0xCB); -} - - -/* -** Name: SetPwrLevel -** Description: Implement power level setting algorithm described below -** Returns: Nothing -*/ - -static void -SetPwrLevel(struct s_comet_reg *comet) -{ - 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 -*/ - /* XLPG Fuse Data Select */ - pci_write_32((u_int32_t *) &comet->xlpg_fdata_sel, 0x00); - /* XLPG Analog Test Positive control */ - pci_write_32((u_int32_t *) &comet->xlpg_atest_pctl, 0x01); - 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); - pci_write_32((u_int32_t *) &comet->xlpg_atest_nctl, 0x01); - /* XLPG Analog Test Negative control */ - temp = pci_read_32((u_int32_t *) &comet->xlpg_atest_nctl) & 0xfe; - pci_write_32((u_int32_t *) &comet->xlpg_atest_nctl, temp); - /* XLPG */ - pci_write_32((u_int32_t *) &comet->xlpg_fdata_sel, 0x01); -} - - -/* -** 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(struct s_comet_reg *comet) -{ - u_int8_t rd_value; - - if (comet == mConfig.C4Func1Base + (COMET0_OFFSET >> 2)) { - /* read the BRIF Configuration */ - rd_value = (u_int8_t) pci_read_32((u_int32_t *) - &comet->brif_cfg); - rd_value &= ~0x20; - pci_write_32((u_int32_t *) &comet->brif_cfg, - (u_int32_t) rd_value); - /* read the BRIF Frame Pulse Configuration */ - rd_value = (u_int8_t) pci_read_32((u_int32_t *) - &comet->brif_fpcfg); - rd_value &= ~0x20; - pci_write_32((u_int32_t *) &comet->brif_fpcfg, - (u_int8_t) rd_value); - } else { - /* read the BRIF Configuration */ - rd_value = (u_int8_t) pci_read_32((u_int32_t *) &comet->brif_cfg); - rd_value |= 0x20; - pci_write_32((u_int32_t *) &comet->brif_cfg, (u_int32_t) rd_value); - /* read the BRIF Frame Pulse Configuration */ - rd_value = (u_int8_t) pci_read_32((u_int32_t *) &comet->brif_fpcfg); - 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 deleted file mode 100644 index d5d286e47a4b..000000000000 --- a/drivers/staging/cxt1e1/comet.h +++ /dev/null @@ -1,353 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#include - -#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 */ -}; - -/* 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 *, struct s_comet_reg *, 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 deleted file mode 100644 index e96665ea3662..000000000000 --- a/drivers/staging/cxt1e1/comet_tables.c +++ /dev/null @@ -1,538 +0,0 @@ -/*----------------------------------------------------------------------------- - * 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. - *----------------------------------------------------------------------------- - */ - -#include -#include "comet_tables.h" - -/***************************************************************************** -* -* 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 deleted file mode 100644 index 3e2e5badf787..000000000000 --- a/drivers/staging/cxt1e1/comet_tables.h +++ /dev/null @@ -1,61 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - - -/***************************************************************************** -* -* 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 deleted file mode 100644 index 65b6fc36edf6..000000000000 --- a/drivers/staging/cxt1e1/functions.c +++ /dev/null @@ -1,318 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include "pmcc4_sysdep.h" -#include "sbecom_inline_linux.h" -#include "libsbew.h" -#include "pmcc4.h" - - -#ifndef USE_MAX_INT_DELAY -static int dummy = 0; - -#endif - -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 (cxt1e1_log_level >= LOG_DEBUG) - pr_info("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 (cxt1e1_log_level >= LOG_DEBUG) - 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 - * 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 (cxt1e1_log_level >= LOG_MONITOR) - pr_warning("%s: drvr not available (%x)\n", - __func__, drvr_state); - return; - } - schedule_work(&wd->work); - 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: - sema_init((struct semaphore *) sem, 0); - break; - case SEM_AVAILABLE: - sema_init((struct semaphore *) sem, 1); - 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_TRIGGER(ci_t *ci, int x) -{ - struct s_comet_reg *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 deleted file mode 100644 index 4fa27c8931b1..000000000000 --- a/drivers/staging/cxt1e1/hwprobe.c +++ /dev/null @@ -1,382 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#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 - -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 banner[80]; - char sn[6] = {0,}; - - ci = (ci_t *)(netdev_priv(hi->ndev)); - bid = sbeid_get_bdname(ci); - switch (hi->promfmt) { - case PROM_FORMAT_TYPE1: - memcpy(sn, hi->mfg_info.pft1.Serial, 6); - break; - case PROM_FORMAT_TYPE2: - memcpy(sn, hi->mfg_info.pft2.Serial, 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]); - - pr_info("%s\n", banner); - - pdev = hi->pdev[0]; - 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]; - 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), - (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; - - 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)); - 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)); - 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)); - 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)); - 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)); - 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 - 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], - hi->mfg_info.Serial[3], - hi->mfg_info.Serial[4], - hi->mfg_info.Serial[5]); -#endif - - hi->promfmt = pmc_verify_cksum(&hi->mfg_info.data); - if (hi->promfmt == PROM_FORMAT_Unk) { - /* bad crc, data is suspect */ - if (cxt1e1_log_level >= LOG_WARN) - pr_info("%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 = NULL; - hi->addr[0] = 0L; - hi->addr[1] = 0L; - hi->addr_mapped[0] = NULL; - hi->addr_mapped[1] = NULL; - } -} - -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(hi->addr_mapped[0]); - release_mem_region((long) hi->addr[0], hi->len[0]); - hi->addr_mapped[0] = NULL; - } - if (hi->addr_mapped[1]) { - iounmap(hi->addr_mapped[1]); - release_mem_region((long) hi->addr[1], hi->len[1]); - hi->addr_mapped[1] = NULL; - } - } -} - - -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 - 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 */ - fun = PCI_FUNC(pdev->devfn); - if (fun > 1) { - pr_warning("unexpected devfun: 0x%x\n", pdev->devfn); - return 0; - } - - /* obtain bus number */ - if (pdev->bus) - 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 - * fisrt found - */ - if ((hi->pci_slot == 0xff) || /* new board */ - ((hi->pci_slot == slot) && (hi->bus == pdev->bus))) - break; /* found for-loop exit */ - } - - /* no match in above loop means MAX exceeded */ - if (i == MAX_BOARDS) { - pr_warning("exceeded number of allowed devices (>%d)?\n", - 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, KBUILD_MODNAME); - 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 */ - while ((pdev = pci_get_device(PCI_VENDOR_ID_CONEXANT, - PCI_DEVICE_ID_CN8474, - pdev))) { - if (c4_hdw_init(pdev, found)) - found++; - } - - if (!found) { - pr_warning("No boards found\n"); - return -ENODEV; - } - - /* sanity check for consistent hardware found */ - for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) { - if (hi->pci_slot != 0xff && (!hi->addr[0] || !hi->addr[1])) { - pr_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)) { - 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] = ioremap(hi->addr[j], hi->len[j]); - if (!hi->addr_mapped[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 - 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 - } - } - - 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; - pr_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]); - 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); - if (!hi->ndev) { - 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 deleted file mode 100644 index bd2bfba604b3..000000000000 --- a/drivers/staging/cxt1e1/libsbew.h +++ /dev/null @@ -1,549 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -/********************************/ -/** 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 - - -/* Possible 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 - -#endif /*** _INC_LIBSBEW_H_ ***/ diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c deleted file mode 100644 index 09f3d5ca75ac..000000000000 --- a/drivers/staging/cxt1e1/linux.c +++ /dev/null @@ -1,1142 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#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 - -/*******************************************************************************/ - -#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 *); -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 ci_t *CI; -extern struct s_hdw_info hdw_info[]; - -int error_flag; /* module load error reporting */ -int cxt1e1_log_level = LOG_ERROR; -static int log_level_default = LOG_ERROR; -module_param(cxt1e1_log_level, int, 0444); - -int cxt1e1_max_mru = MUSYCC_MRU; -static int max_mru_default = MUSYCC_MRU; -module_param(cxt1e1_max_mru, int, 0444); - -int cxt1e1_max_mtu = MUSYCC_MTU; -int max_mtu_default = MUSYCC_MTU; -module_param(cxt1e1_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 : NULL; -} - - -char * -get_hdlc_name(hdlc_device *hdlc) -{ - struct c4_priv *priv = hdlc->priv; - struct net_device *dev = getuserbychan(priv->channum); - - return dev->name; -} - -/***************************************************************************/ -#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 - 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 */ - - /** 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]; /* NOTE: name of the queue limited by system - * to 10 characters */ - if (pi->wq_port) - return 0; /* already initialized */ - - /* IE pmcc4-01 */ - snprintf(name, sizeof(name), "%s%d", pi->up->devname, pi->portnum); - -#ifdef RLD_RESTART_DEBUG - pr_info(">> %s: creating workqueue <%s> for Port %d.\n", - __func__, name, pi->portnum); /* RLD DEBUG */ -#endif - pi->wq_port = create_singlethread_workqueue(name); - if (!pi->wq_port) - 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 = NULL; - } -} - -/***************************************************************************/ - -static 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 -static 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) -{ - pr_info("%s: trying to open master device !\n", ndev->name); - return -1; -} - - -static int -chan_open(struct net_device *ndev) -{ - hdlc_device *hdlc = dev_to_hdlc(ndev); - const struct c4_priv *priv = hdlc->priv; - int ret; - - ret = hdlc_open(ndev); - if (ret) { - pr_info("hdlc_open failure, err %d.\n", ret); - return ret; - } - - ret = c4_chan_up(priv->ci, priv->channum); - if (ret < 0) - return ret; - try_module_get(THIS_MODULE); - netif_start_queue(ndev); - return 0; /* no error = success */ -} - - -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; -} - - -static int -chan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -{ - return hdlc_ioctl(dev, ifr, cmd); -} - - -static int -chan_attach_noop(struct net_device *ndev, unsigned short foo_1, - unsigned short foo_2) -{ - /* our driver has nothing to do here, show's - * over, go home - */ - return 0; -} - - -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; - - { - struct c4_priv *priv; - - priv = (struct c4_priv *)dev_to_hdlc(ndev)->priv; - channum = priv->channum; - } - - 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)); -} - - -static int -c4_linux_xmit(struct sk_buff *skb, struct net_device *ndev) -{ - const struct c4_priv *priv; - int rval; - - hdlc_device *hdlc = dev_to_hdlc(ndev); - - priv = hdlc->priv; - - rval = musycc_start_xmit(priv->ci, priv->channum, skb); - return rval; -} - -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 NULL; /* channel already exists */ - - { - struct c4_priv *priv; - - /* allocate then fill in private data structure */ - priv = kzalloc(sizeof(struct c4_priv), GFP_KERNEL); - if (!priv) { - pr_warning("%s: no memory for net_device !\n", - ci->devname); - return NULL; - } - dev = alloc_hdlcdev(priv); - if (!dev) { - pr_warning("%s: no memory for hdlc_device !\n", - ci->devname); - kfree(priv); - return NULL; - } - 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; - - /* needed due to Ioctl calling sequence */ - rtnl_unlock(); - ret = register_hdlc_device(dev); - /* NOTE: setting must occur AFTER registration in order to "take" */ - dev->tx_queue_len = MAX_DEFAULT_IFQLEN; - - /* needed due to Ioctl calling sequence */ - rtnl_lock(); - if (ret) { - if (cxt1e1_log_level >= LOG_WARN) - pr_info("%s: create_chan[%d] registration error = %d.\n", - ci->devname, cp->channum, ret); - /* cleanup */ - free_netdev(dev); - /* failed to register */ - return NULL; - } - 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 = c4_get_port(ci, pp.portnum); - if (ret < 0) - 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 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 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 = c4_frame_rw(ci, &pp); - if (ret < 0) - 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 = 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 = c4_musycc_rw(ci, &mp); - if (ret < 0) - 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; - - ret = c4_get_chan(cp.channum, &cp); - if (ret < 0) - 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; - 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; - return c4_set_chan(cp.channum, &cp); -} - -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 = c4_new_chan(ci, cp.port, cp.channum, dev); - if (ret < 0) { - /* needed due to Ioctl calling sequence */ - rtnl_unlock(); - unregister_hdlc_device(dev); - /* needed due to Ioctl calling sequence */ - rtnl_lock(); - free_netdev(dev); - } - 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; - - ret = c4_get_chan_stats(ccs.channum, &ccs.stats); - if (ret < 0) - 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 cxt1e1_log_level; - - if (copy_from_user(&cxt1e1_log_level, data, sizeof(int))) - return -EFAULT; - sbecom_set_loglevel(cxt1e1_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; - - priv = (struct c4_priv *)dev_to_hdlc(ndev)->priv; - ci = priv->ci; - channum = priv->channum; - - ch = c4_find_chan(channum); - if (ch == NULL) - return -ENOENT; - ch->user = NULL; /* will be freed, below */ - } - - /* needed if Ioctl calling sequence */ - if (lockit) - rtnl_unlock(); - unregister_hdlc_device(ndev); - /* needed if Ioctl calling sequence */ - if (lockit) - rtnl_lock(); - free_netdev(ndev); - 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; - if (cp.channum > 999) - return -EINVAL; - snprintf(buf, sizeof(buf), CHANNAME "%d", cp.channum); - dev = __dev_get_by_name(&init_net, buf); - if (!dev) - return -ENODEV; - 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); - ndev = __dev_get_by_name(&init_net, buf); - if (!ndev) - continue; - priv = dev_to_hdlc(ndev)->priv; - - if ((unsigned long) (priv->ci) == - (unsigned long) (netdev_priv(musycc_dev))) { - ndev->flags &= ~IFF_UP; - netif_stop_queue(ndev); - do_deluser(ndev, 1); - } - } - 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 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; - ci = get_ci_by_dev(ndev); - if (!ci) - 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 - 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 - iolen = _IOC_SIZE(iocmd); - if (iolen > sizeof(arg)) - return -EFAULT; - data = ifr->ifr_data + sizeof(iocmd); - if (copy_from_user(&arg, data, iolen)) - return -EFAULT; - - ret = 0; - switch (iocmd) { - case SBE_IOC_PORT_GET: - ret = do_get_port(ndev, data); - break; - case SBE_IOC_PORT_SET: - ret = do_set_port(ndev, data); - break; - case SBE_IOC_CHAN_GET: - ret = do_get_chan(ndev, data); - break; - case SBE_IOC_CHAN_SET: - ret = do_set_chan(ndev, data); - break; - case C4_DEL_CHAN: - 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: - ret = -EINVAL; - break; - } - return 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) { - pr_warning("%s: no memory for struct net_device !\n", - hi->devname); - error_flag = -ENOMEM; - return NULL; - } - 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) - CI = ci; /* DEBUG, only board 0 usage */ - - strcpy(ci->devname, hi->devname); - - /* 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)) { - kfree(netdev_priv(ndev)); - kfree(ndev); - error_flag = -ENODEV; - return NULL; - } - /************************************************************* - * 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, - IRQF_SHARED, - ndev->name, ndev)) { - pr_warning("%s: MUSYCC could not get irq: %d\n", - ndev->name, irq0); - unregister_netdev(ndev); - kfree(netdev_priv(ndev)); - kfree(ndev); - error_flag = -EIO; - return NULL; - } -#ifdef CONFIG_SBE_PMCC4_NCOMM - if (request_irq(irq1, &c4_ebus_interrupt, IRQF_SHARED, ndev->name, ndev)) { - pr_warning("%s: EBUS could not get irq: %d\n", hi->devname, irq1); - unregister_netdev(ndev); - free_irq(irq0, ndev); - kfree(netdev_priv(ndev)); - kfree(ndev); - error_flag = -EIO; - return NULL; - } -#endif - - /* setup board identification information */ - - { - u_int32_t tmp; - - /* also sets PROM format type (promfmt) for later usage */ - hdw_sn_get(hi, brdno); - - switch (hi->promfmt) { - case PROM_FORMAT_TYPE1: - memcpy(ndev->dev_addr, - (FLD_TYPE1 *) (hi->mfg_info.pft1.Serial), 6); - /* unaligned data acquisition */ - memcpy(&tmp, (FLD_TYPE1 *) (hi->mfg_info.pft1.Id), 4); - ci->brd_id = cpu_to_be32(tmp); - break; - case PROM_FORMAT_TYPE2: - memcpy(ndev->dev_addr, - (FLD_TYPE2 *) (hi->mfg_info.pft2.Serial), 6); - /* unaligned data acquisition */ - memcpy(&tmp, (FLD_TYPE2 *) (hi->mfg_info.pft2.Id), 4); - ci->brd_id = cpu_to_be32(tmp); - break; - default: - ci->brd_id = 0; - memset(ndev->dev_addr, 0, 6); - break; - } - -#if 1 - /* requires bid to be preset */ - sbeid_set_hdwbid(ci); -#else - /* requires hdw_bid to be preset */ - sbeid_set_bdtype(ci); -#endif - } - -#ifdef CONFIG_PROC_FS - sbecom_proc_brd_init(ci); -#endif -#if defined(SBE_ISR_TASKLET) - tasklet_enable(&ci->ci_musycc_isr_tasklet); -#endif - - error_flag = c4_init2(ci); - if (error_flag != SBE_DRVR_SUCCESS) { -#ifdef CONFIG_PROC_FS - sbecom_proc_brd_cleanup(ci); -#endif - unregister_netdev(ndev); - free_irq(irq1, ndev); - free_irq(irq0, ndev); - kfree(netdev_priv(ndev)); - kfree(ndev); - /* failure, error_flag is set */ - return NULL; - } - return ndev; -} - -static int __init -c4_mod_init(void) -{ - int rtn; - - rtn = c4hw_attach_all(); - if (rtn) - return -rtn; /* installation failure - see system log */ - - /* housekeeping notifications */ - if (cxt1e1_log_level != log_level_default) - pr_info("NOTE: driver parameter changed from default %d to %d.\n", - log_level_default, cxt1e1_log_level); - if (cxt1e1_max_mru != max_mru_default) - pr_info("NOTE: driver parameter changed from default %d to %d.\n", - max_mru_default, cxt1e1_max_mru); - if (cxt1e1_max_mtu != max_mtu_default) - pr_info("NOTE: driver parameter changed from default %d to %d.\n", - max_mtu_default, cxt1e1_max_mtu); - if (max_rxdesc_used != max_rxdesc_default) { - if (max_rxdesc_used > 2000) - max_rxdesc_used = 2000; /* out-of-bounds reset */ - 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 */ - pr_info("NOTE: driver parameter changed from default %d to %d.\n", - 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++) { - ndev = ci->port[j].chan[k]->user; - if (ndev) - do_deluser(ndev, 0); - } - } - } -} - - -static void __exit -c4_mod_remove(void) -{ - cleanup_hdlc(); /* delete any missed channels */ - cleanup_devs(); - c4_cleanup(); - cleanup_ioremap(); - pr_info("SBE - driver removed.\n"); -} - -module_init(c4_mod_init); -module_exit(c4_mod_remove); - -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 deleted file mode 100644 index 9495c0b91966..000000000000 --- a/drivers/staging/cxt1e1/musycc.c +++ /dev/null @@ -1,1736 +0,0 @@ -static unsigned int max_intcnt; -static unsigned int max_bh; - -/*----------------------------------------------------------------------------- - * 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. - *----------------------------------------------------------------------------- - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#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" - -#define sd_find_chan(ci,ch) c4_find_chan(ch) - - -/*******************************************************************/ -/* global driver variables */ -extern ci_t *c4_list; -extern int drvr_state; - -extern int cxt1e1_max_mru; -extern int cxt1e1_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 *); -void musycc_intr_bh_tasklet(ci_t *); -void musycc_serv_req(mpi_t *, u_int32_t); -void musycc_update_timeslots(mpi_t *); - -/*******************************************************************/ - -static int -musycc_dump_rxbuffer_ring_locked(mch_t *ch) -{ - struct mdesc *m; - - u_int32_t status; - int n; - -#ifdef RLD_DUMP_BUFDATA - u_int32_t *dp; - int len = 0; -#endif - if (ch->rxd_num == 0) - pr_info(" 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); - 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, - 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 - len = status & LENGTH_MASK; - -#if 1 - if (m->data && (status & HOST_RX_OWNED)) -#else - /* always dump regardless of valid RX data */ - if (m->data) -#endif - { - dp = (u_int32_t *)OS_phystov((void *)(le32_to_cpu(m->data))); - if (len >= 0x10) - 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) - pr_info(" %x[%x]: %08X %08X\n", - (u_int32_t)dp, len, - *dp, *(dp + 1)); - else - pr_info(" %x[%x]: %08X\n", - (u_int32_t)dp, - len, *dp); - } -#endif - m = m->snext; - } - } - pr_info("\n"); - - return 0; -} - -static int -musycc_dump_rxbuffer_ring(mch_t *ch) -{ - unsigned long flags = 0; - int ret; - - spin_lock_irqsave(&ch->ch_rxlock, flags); - ret = musycc_dump_rxbuffer_ring_locked(ch); - spin_unlock_irqrestore(&ch->ch_rxlock, flags); - - return ret; -} - -static int -musycc_dump_txbuffer_ring_locked(mch_t *ch) -{ - struct mdesc *m; - u_int32_t status; - int n; -#ifdef RLD_DUMP_BUFDATA - u_int32_t *dp; - int len = 0; -#endif - - if (ch->txd_num == 0) - pr_info(" 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); - 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, - 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 - len = status & LENGTH_MASK; - - if (m->data) { - dp = (u_int32_t *)OS_phystov((void *)(le32_to_cpu(m->data))); - if (len >= 0x10) - 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) - pr_info(" %x[%x]: %08X %08X\n", - (u_int32_t)dp, len, - *dp, *(dp + 1)); - else - pr_info(" %x[%x]: %08X\n", - (u_int32_t)dp, len, *dp); - } -#endif - m = m->snext; - } - } /* -for- */ - pr_info("\n"); - - return 0; -} - -static int -musycc_dump_txbuffer_ring(mch_t *ch) -{ - unsigned long flags = 0; - int ret; - - spin_lock_irqsave(&ch->ch_txlock, flags); - ret = musycc_dump_txbuffer_ring_locked(ch); - spin_unlock_irqrestore(&ch->ch_txlock, flags); - - return ret; -} - -/* - * 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; - int bh; - - if (chan >= MAX_CHANS_USED) - return SBE_DRVR_FAIL; /* E2BIG */ - - bh = atomic_read(&ci->bh_pending); - 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, - ci->wdcount, ci->wd_notify); - max_bh = 0; /* reset counter */ - max_intcnt = 0; /* reset counter */ - - ch = sd_find_chan(dummy, chan); - if (!ch) { - pr_info(">> musycc_dump_ring: channel %d not up.\n", chan); - return ENOENT; - } - pr_info(">> CI %p CHANNEL %3d @ %p: state %x status/p %x/%x\n", - ci, chan, ch, ch->state, - ch->status, ch->p.status); - pr_info("--------------------------------\n"); - pr_info("TX 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); - 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); - 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); - - 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 - pr_info("++ musycc_update_tx_thp[%d]: setting thp = %p, sts %x\n", - ch->channum, md, md->status); -#endif -} - - -/* - * 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 defined(RLD_TRANS_DEBUG) || defined(RLD_RXACT_DEBUG) - static int hereb4 = 7; -#endif - - ch = container_of(arg, struct c4_chan_info, ch_work); - pi = ch->up; - -#ifdef RLD_TRANS_DEBUG - 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 - - /**********************************/ - /** 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) - if (hereb4) { /* RLD DEBUG */ - hereb4--; -#ifdef RLD_TRANS_DEBUG - md = &ch->mdr[ch->rxix_irq_srv]; - 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]; - 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); /* 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); - - md = ch->txd_irq_srv; - if (!md) { -#ifdef RLD_TRANS_DEBUG - pr_info("-- musycc_wq_chan_restart[%d]: WARNING, starting NULL md\n", - ch->channum); -#endif - } else if (md->data && ((le32_to_cpu(md->status)) & - MUSYCC_TX_OWNED)) { - ch->ch_start_tx = 0; - -#ifdef RLD_TRANS_DEBUG - 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); - } -#ifdef RLD_RESTART_DEBUG - else { - /* retain request to start until retried and we have data to xmit */ - 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); - musycc_dump_txbuffer_ring_locked(ch); - } -#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 - 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 - - /* 2.6 - find next unprocessed message, then set TX thp to it */ -#ifdef RLD_RESTART_DEBUG - 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 () */ -} - - -void -rld_put_led(mpi_t *pi, u_int32_t ledval) -{ - static u_int32_t led; - - if (ledval == 0) - led = 0; - else - led |= ledval; - - /* RLD DEBUG TRANHANG */ - pci_write_32((u_int32_t *) &pi->up->cpldbase->leds, led); -} - - -#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 - pr_info(">> 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 - pr_info(">> same CHAN ACT SR, Port %d Req %x => issue SR_NOOP CMD\n", pi->portnum, req); -#endif - /* allow this next request */ - SD_SEM_GIVE(&pi->sr_sem_busy); - musycc_serv_req(pi, SR_NOOP); - /* relock & continue w/ original req */ - SD_SEM_TAKE(&pi->sr_sem_busy, "serv"); - } else if (req == SR_NOOP) { - /* no need to issue back-to-back - * SR_NOOP commands at this time - */ -#ifdef RLD_TRANS_DEBUG - pr_info(">> same Port SR_NOOP skipped, Port %d\n", - pi->portnum); -#endif - /* allow this next request */ - SD_SEM_GIVE(&pi->sr_sem_busy); - 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." - */ - - /* adhere to write timing imposition */ - r = pci_read_32((u_int32_t *) &pi->reg->srd); - - - if ((r != req) && (req != SR_CHIP_RESET) && - (++rcnt <= MUSYCC_SR_RETRY_CNT)) { - if (cxt1e1_log_level >= LOG_MONITOR) - 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)); - /* this delay helps reduce reissue counts - * (reason not yet researched) - */ - OS_uwait_dummy(); - goto rewrite; - } - if (rcnt > MUSYCC_SR_RETRY_CNT) { - 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; - } - 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(); - /* sleep until SACK interrupt occurs */ - SD_SEM_TAKE(&pi->sr_sem_wait, "sakack"); - } - 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 */ - /* make tslot unavailable for this mode */ - pi->tsm[i] = 0xff; - else - /* make tslot available for assignment */ - pi->tsm[i] = 0x00; - 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(cxt1e1_max_mru | (cxt1e1_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 = kzalloc((INT_QUEUE_SIZE + 1) * sizeof(u_int32_t), - GFP_KERNEL | GFP_DMA); - if (!regaddr) - return -ENOMEM; - ci->iqd_p_saved = regaddr; /* save orig value for free's usage */ - /* this calculates closest boundary */ - ci->iqd_p = (u_int32_t *) ((unsigned long)(regaddr + INT_QUEUE_BOUNDARY - 1) & - (~(INT_QUEUE_BOUNDARY - 1))); - - 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 = kzalloc(sizeof(struct musycc_groupr) + GROUP_BOUNDARY, - GFP_KERNEL | GFP_DMA); - if (!regaddr) { - for (gchan = 0; gchan < i; gchan++) { - pi = &ci->port[gchan]; - kfree(pi->reg); - pi->reg = NULL; - } - return -ENOMEM; - } - pi->regram_saved = regaddr; /* save orig value for free's usage */ - /* this calculates closest boundary */ - pi->regram = (struct musycc_groupr *) ((unsigned long)(regaddr + GROUP_BOUNDARY - 1) & - (~(GROUP_BOUNDARY - 1))); - } - - /* 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 (cxt1e1_max_mru > 0xffe) { - pr_warning("Maximum allowed MRU exceeded, resetting %d to %d.\n", - cxt1e1_max_mru, 0xffe); - cxt1e1_max_mru = 0xffe; - } - if (cxt1e1_max_mtu > 0xffe) { - pr_warning("Maximum allowed MTU exceeded, resetting %d to %d.\n", - cxt1e1_max_mtu, 0xffe); - cxt1e1_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; - - volatile u_int32_t status; - - ch = pi->chan[gchan]; - if (!ch || ch->state != UP) { - if (cxt1e1_log_level >= LOG_ERROR) - pr_info("%s: intr: xmit EOM on uninitialized channel %d\n", - pi->up->devname, gchan); - } - if (!ch || !ch->mdt) - return; /* note: mdt==0 implies a malloc() - * failure w/in chan_up() routine */ - - 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++) - /* use call to avoid optimization - * removal of dummy delay */ - OS_uwait_dummy(); - FLUSH_MEM_READ(); - status = le32_to_cpu(md->status); - if (readCount++ > 40) - break; /* don't wait any longer */ - } - if (status & MUSYCC_TX_OWNED) { - if (cxt1e1_log_level >= LOG_MONITOR) { - 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); - musycc_dump_txbuffer_ring_locked(ch); - } - break; /* Not our mdesc, done */ - } else { - if (cxt1e1_log_level >= LOG_MONITOR) - 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); - } - } - ch->txd_irq_srv = md->snext; - - md->data = 0; - if (md->mem_token) { - /* 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 - OS_mem_token_free_irq(md->mem_token); - md->mem_token = NULL; - } - md->status = 0; -#ifdef RLD_TXFULL_DEBUG - if (cxt1e1_log_level >= LOG_MONITOR2) - 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(); - - if ((ch->p.chan_mode != CFG_CH_PROTO_TRANS) && - (status & EOBIRQ_ENABLE)) { - if (cxt1e1_log_level >= LOG_MONITOR) - pr_info("%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 (cxt1e1_log_level >= LOG_MONITOR2) - 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 - ch->tx_full = 0; - ch->txd_required = 0; - /* re-enable to catch flow controlled channel */ - sd_enable_xmit(ch->user); - } - } -#ifdef RLD_TXFULL_DEBUG - else if (ch->tx_full) { - if (cxt1e1_log_level >= LOG_MONITOR2) - 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); - } -#endif - - FLUSH_MEM_WRITE(); -} - - -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 || ch->state != UP) { - if (cxt1e1_log_level > LOG_ERROR) - pr_info("%s: intr: receive EOM on uninitialized channel %d\n", - pi->up->devname, gchan); - return; - } - if (!ch->mdr) - 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) { - { - m2 = OS_mem_token_alloc(cxt1e1_max_mru); - if (m2) { - /* 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 = cxt1e1_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 (cxt1e1_log_level >= LOG_MONITOR) { - pr_info("%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. - */ - 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 ((cxt1e1_log_level >= LOG_WARN) && (status & INTRPTS_INTFULL_M)) - pr_info("%s: Interrupt queue full condition occurred\n", - ci->devname); - if (cxt1e1_log_level >= LOG_DEBUG) - 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)); - - 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++) - /* use call to avoid optimization - * removal of dummy delay - */ - OS_uwait_dummy(); - FLUSH_MEM_READ(); - currInt = le32_to_cpu(ci->iqd_p[headx]); - if (readCount++ > 20) - break; - } - - /* catch failure of Bug Fix checking */ - if ((currInt == badInt) || (currInt == badInt2)) { - if (cxt1e1_log_level >= LOG_WARN) - pr_info("%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 losing - * 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); - /* insure wrapness */ - ci->iqp_headx = (headx + 1) & (INT_QUEUE_SIZE - 1); - 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 (cxt1e1_log_level >= LOG_DEBUG) { - if (err != 0) - pr_info(" %08x -> err: %2d,", currInt, err); - - pr_info("+ interrupt event: %d, grp: %d, chan: %2d, side: %cX\n", - event, group, gchan, tx ? 'T' : 'R'); - } - /* notice that here we assume 1-1 group - port mapping */ - pi = &ci->port[group]; - ch = pi->chan[gchan]; - switch (event) { - case EVE_SACK: /* Service Request Acknowledge */ - if (cxt1e1_log_level >= LOG_DEBUG) { - volatile u_int32_t r; - - r = pci_read_32((u_int32_t *) &pi->reg->srd); - pr_info("- SACK cmd: %08x (hdw= %08x)\n", - pi->sr_last, r); - } - /* wake up waiting process */ - SD_SEM_GIVE(&pi->sr_sem_wait); - 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); - /* - * 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... - */ - case EVE_NONE: - if (err == ERR_SHT) - ch->s.rx_length_errors++; - break; - default: - if (cxt1e1_log_level >= LOG_WARN) - pr_info("%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 || cxt1e1_log_level >= LOG_MONITOR) -#else - if (cxt1e1_log_level >= LOG_MONITOR) -#endif - { - 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 - /* problem = ONR on HDLC mode */ - if (ch->p.chan_mode == 2) { - 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); - musycc_dump_txbuffer_ring_locked(ch); - } -#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 (cxt1e1_log_level >= LOG_WARN) { - pr_info("%s: RX buffer overflow [ONR] on channel %d, mode %x\n", - ci->devname, ch->channum, - ch->p.chan_mode); -#ifdef RLD_DEBUG - musycc_dump_rxbuffer_ring_locked(ch); -#endif - } - } - 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 (cxt1e1_log_level >= LOG_MONITOR) - 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 */ - 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 (cxt1e1_log_level >= LOG_WARN) - 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], - * 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) && - (cxt1e1_log_level >= LOG_ERROR)) - pr_info("%s: Interrupt queue overflow - ILOST asserted\n", - ci->devname); - /* insure wrapness */ - ci->iqp_headx = (headx + 1) & (INT_QUEUE_SIZE - 1); - FLUSH_MEM_WRITE(); - FLUSH_MEM_READ(); - } /* while */ - if ((cxt1e1_log_level >= LOG_MONITOR2) && - (ci->iqp_headx != ci->iqp_tailx)) { - int bh; - - bh = atomic_read(&CI->bh_pending); - pr_info("_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 */ -} - -#ifdef SBE_PMCC4_ENABLE - status_t -musycc_chan_down(ci_t *dummy, int channum) -{ - mpi_t *pi; - mch_t *ch; - int i, gchan; - - ch = sd_find_chan(dummy, channum); - if (!ch) - 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) - OS_mem_token_free(ch->mdt[i].mem_token); - - for (i = 0; i < ch->rxd_num; i++) - if (ch->mdr[i].mem_token) - OS_mem_token_free(ch->mdr[i].mem_token); - - kfree(ch->mdr); - ch->mdr = NULL; - ch->rxd_num = 0; - kfree(ch->mdt); - ch->mdt = NULL; - ch->txd_num = 0; - - musycc_update_timeslots(pi); - c4_fifo_free(pi, ch->gchan); - - pi->openchans--; - return 0; -} -#endif - -int -musycc_start_xmit(ci_t *ci, int channum, void *mem_token) -{ - mch_t *ch; - struct mdesc *md; - void *m2; - int txd_need_cnt; - u_int32_t len; - - ch = sd_find_chan(ci, channum); - if (!ch) - return -ENOENT; - - /* full interrupt processing available */ - if (ci->state != C_RUNNING) - return -EINVAL; - if (ch->state != UP) - return -EINVAL; - - /* how else to flag unwritable state ? */ - if (!(ch->status & TX_ENABLED)) - return -EROFS; - -#ifdef RLD_TRANS_DEBUG - if (1 || cxt1e1_log_level >= LOG_MONITOR2) -#else - if (cxt1e1_log_level >= LOG_MONITOR2) -#endif - { - 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)); - } - /***********************************************/ - /** 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 (cxt1e1_log_level >= LOG_MONITOR2) - 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 */ - } - /*************************************************/ - /** Are there sufficient descriptors available? **/ - /*************************************************/ - if (txd_need_cnt > ch->txd_num) { /* never enough descriptors for this - * large a buffer */ - if (cxt1e1_log_level >= LOG_DEBUG) - pr_info("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; - } - - /************************************************************/ - /** flow control the line if not enough descriptors remain **/ - /************************************************************/ - if (txd_need_cnt > ch->txd_free) { - if (cxt1e1_log_level >= LOG_MONITOR2) - 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; - ch->txd_required = txd_need_cnt; - sd_disable_xmit(ch->user); - 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 */ - /* transfer ownership from HOST to MUSYCC */ - u |= MUSYCC_TX_OWNED; - - 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) { - u |= (PADFILL_ENABLE | (ch->p.pad_fill_count << EXTRA_FLAGS)); - } - /* Fill in mds on last segment, others set ZERO - * so that entire token is removed ONLY when ALL - * segments have been transmitted. - */ - md->mem_token = len ? NULL : mem_token; - - 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 an ONR was seen, then channel requires poking to restart - * transmission. - */ - if (ch->ch_start_tx) - musycc_chan_restart(ch); -#ifdef SBE_WAN256T3_ENABLE - wan256t3_led(ci, LED_TX, LEDV_G); -#endif - return 0; -} - - -/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/musycc.h b/drivers/staging/cxt1e1/musycc.h deleted file mode 100644 index 56fb42f0f64e..000000000000 --- a/drivers/staging/cxt1e1/musycc.h +++ /dev/null @@ -1,427 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#include - -#define VINT8 volatile u_int8_t -#define VINT32 volatile u_int32_t - -#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 laid 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 laid 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 - -#undef VINT32 -#undef VINT8 - -#endif /*** _INC_MUSYCC_H_ ***/ - -/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/pmc93x6_eeprom.c b/drivers/staging/cxt1e1/pmc93x6_eeprom.c deleted file mode 100644 index ba588f1b2110..000000000000 --- a/drivers/staging/cxt1e1/pmc93x6_eeprom.c +++ /dev/null @@ -1,532 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include "pmcc4_sysdep.h" -#include "sbecom_inline_linux.h" -#include "pmcc4.h" -#include "sbe_promformat.h" -#include "pmc93x6_eeprom.h" - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#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 - *------------------------------------------------------------------------ - */ - -static u8 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) -{ - /* Used to build by powers to 2 */ - long half; - 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. - */ - -static void eeprom_put_byte(long addr, long data, int count) -{ - u_int32_t output; - - while (--count >= 0) { - /* Get next data bit */ - output = (data & EPROM_ACTIVE_OUT_BIT) ? 1 : 0; - /* Add Chip Select */ - output |= EPROM_ENCS; - data >>= 1; - - eeprom_delay(); - /* Output it */ - pci_write_32((u_int32_t *) addr, output); - } -} - -/*------------------------------------------------------------------------ - * eeprom_get_byte - Receive a byte from the EEPROM serially - *------------------------------------------------------------------------ - * - * Given the PCI address, this routine serially fetches the data - * from the EEPROM. - */ - -static 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); - - /* Shift data over */ - data <<= 1; - 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); - - /* this removes Chip Select from EEPROM */ - pci_write_32((u_int32_t *) addr, 0); -} - -/*------------------------------------------------------------------------ - * 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); - - /* this removes Chip Select from EEPROM */ - pci_write_32((u_int32_t *) addr, 0); -} - -/*------------------------------------------------------------------------ - * 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. - */ - -static u_int32_t pmc_eeprom_read(long addr, long mem_offset) -{ - /* Data from chip */ - u_int32_t data; - - if (!ByteReverseBuilt) - BuildByteReverse(); - - /* Reverse address */ - mem_offset = ByteReverse[0x7F & mem_offset]; - - /* - * 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. - */ - - /* Shift for command */ - mem_offset <<= 2; - /* Add command */ - mem_offset |= EPROM_READ; - - /* Output chip address */ - eeprom_put_byte(addr, mem_offset, SIZE_ADDR_OP); - - /* Read chip data */ - data = eeprom_get_byte(addr); - - /* Remove Chip Select from EEPROM */ - pci_write_32((u_int32_t *) addr, 0); - - 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. - */ - -static int pmc_eeprom_write(long addr, long mem_offset, u_int32_t data) -{ - u_int32_t temp; - int count; - - if (!ByteReverseBuilt) - BuildByteReverse(); - - /* Reverse address */ - mem_offset = ByteReverse[0x7F & mem_offset]; - - /* - * 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. - */ - - /* Shift for command */ - mem_offset <<= 2; - /* Add command */ - mem_offset |= EPROM_WRITE; - - /* Output chip address */ - eeprom_put_byte(addr, mem_offset, SIZE_ADDR_OP); - - /* Reverse data */ - data = ByteReverse[0xFF & data]; - /* Output chip data */ - eeprom_put_byte(addr, data, NUM_OF_BITS); - - /* Remove Chip Select from EEPROM */ - pci_write_32((u_int32_t *) addr, 0); - -/* - * 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. - */ - /* Re-enable Chip Select */ - pci_write_32((u_int32_t *) addr, EPROM_ENCS); - /* discard first read */ - temp = pci_read_32((u_int32_t *) addr); - 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) { - /* Remove Chip Select from EEPROM */ - pci_write_32((u_int32_t *) addr, 0); - 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 - *------------------------------------------------------------------------ - */ - -static 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 - *------------------------------------------------------------------------ - */ - -static 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 - *------------------------------------------------------------------------ - */ - -static u_int32_t pmcCalcCrc_T01(void *bufp) -{ - FLD_TYPE2 *buf = bufp; - /* CRC of the structure */ - u_int32_t crc; - - /* 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 - /* RLD DEBUG */ - pr_info("sbeCrc: crc 1 calculated as %08x\n", crc); -#endif - return ~crc; -} - -static u_int32_t pmcCalcCrc_T02(void *bufp) -{ - FLD_TYPE2 *buf = bufp; - /* CRC of the structure */ - u_int32_t crc; - - /* 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 - /* RLD DEBUG */ - pr_info("sbeCrc: crc 2 calculated as %08x\n", crc); -#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) -{ - /* Memory image of structure */ - PROMFORMAT buffer; - /* CRC of structure */ - u_int32_t crc; - time_t createTime; - - createTime = get_seconds(); - - /* use template data */ - memcpy(&buffer.fldType2, mfg_template, sizeof(buffer.fldType2)); - - /* 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) - pr_info("[%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; - /* CRC read from EEPROM */ - u_int32_t crc1, crc2; - - /* Retrieve contents of CRC field */ - crc1 = pmcGetBuffValue(&buf1->Crc32[0], sizeof(buf1->Crc32)); -#ifdef EEPROM_TYPE_DEBUG - /* RLD DEBUG */ - pr_info("EEPROM: chksum 1 reads as %08x\n", crc1); -#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 - /* RLD DEBUG */ - pr_info("EEPROM: chksum 2 reads as %08x\n", crc2); -#endif - if ((buf2->type == PROM_FORMAT_TYPE2) && - (pmcCalcCrc_T02((void *)buf2) == crc2)) - return PROM_FORMAT_TYPE2; /* checksum type 2 verified */ - - /* failed to validate */ - return PROM_FORMAT_Unk; -} diff --git a/drivers/staging/cxt1e1/pmc93x6_eeprom.h b/drivers/staging/cxt1e1/pmc93x6_eeprom.h deleted file mode 100644 index 96c48cb83260..000000000000 --- a/drivers/staging/cxt1e1/pmc93x6_eeprom.h +++ /dev/null @@ -1,39 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#include - -#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 deleted file mode 100644 index 0220bbf3445a..000000000000 --- a/drivers/staging/cxt1e1/pmcc4.h +++ /dev/null @@ -1,108 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#include - -typedef int status_t; - -#define SBE_DRVR_FAIL 0 -#define SBE_DRVR_SUCCESS 1 - -/********************/ -/* 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 __KERNEL__ - -/* - * Device Driver interface, routines are for internal use only. - */ - -#include "pmcc4_private.h" - -char *get_hdlc_name (hdlc_device *); - -/* - * 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); -void sbeCrc(u_int8_t *, u_int32_t, u_int32_t, u_int32_t *); - -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 deleted file mode 100644 index a51209bc5274..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_cpld.h +++ /dev/null @@ -1,91 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#include - -/********************************/ -/* 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 - -#endif /* _INC_PMCC4_CPLD_H_ */ diff --git a/drivers/staging/cxt1e1/pmcc4_defs.h b/drivers/staging/cxt1e1/pmcc4_defs.h deleted file mode 100644 index 83ceae4324b2..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_defs.h +++ /dev/null @@ -1,68 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - - -#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 minimum # of TX descriptors */ -#define MUSYCC_RXDESC_TRANS 12 /* Transparent mode minimum # 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 deleted file mode 100644 index 76bebdd18b3a..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_drv.c +++ /dev/null @@ -1,1613 +0,0 @@ -/*----------------------------------------------------------------------------- - * 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. - *----------------------------------------------------------------------------- - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include "pmcc4_sysdep.h" -#include -#include -#include /* include for timer */ -#include /* include for timer */ -#include -#include - -#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" - -#define KERN_WARN KERN_WARNING - -/* forward references */ -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 *); - -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 cxt1e1_log_level; -extern int cxt1e1_max_mru; -extern int cxt1e1_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 = NULL; -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 (cxt1e1_log_level != d) - { - pr_info("log level changed from %d to %d\n", cxt1e1_log_level, d); - cxt1e1_log_level = d; /* set new */ - } else - pr_info("log level is %d\n", cxt1e1_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++) - { - ch = ci->port[portnum].chan[gchan]; - if (ch) { - if ((ch->state != UNASSIGNED) && - (ch->channum == channum)) - return ch; - } - } - return NULL; -} - -/*** - * 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. - */ - - struct s_comet_reg *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) - pr_warning("%s: Port %d momentarily recovered.\n", - ci->devname, portnum); - else - pr_warning("%s: Warning: Port %d link was briefly down.\n", - ci->devname, portnum); - } else if (value & sbeLinkDown) - pr_warning("%s: Warning: Port %d link is down.\n", - ci->devname, portnum); - else - { - 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 */ - } - 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) - pr_warning("%s: E1 Port %d Codeword Sa4 change detected.\n", - ci->devname, portnum); - if (value & 0x08) - pr_warning("%s: E1 Port %d Codeword Sa5 change detected.\n", - ci->devname, portnum); - if (value & 0x04) - pr_warning("%s: E1 Port %d Codeword Sa6 change detected.\n", - ci->devname, portnum); - if (value & 0x02) - pr_warning("%s: E1 Port %d Codeword Sa7 change detected.\n", - ci->devname, portnum); - if (value & 0x01) - 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) - pr_warning("%s: E1 Port %d CRC-4 error(s) detected.\n", - ci->devname, portnum); - if (value & sbeE1errSMF) /* error in sub-multiframe */ - 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 */ - /* - * 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; - pr_warning("%s: E1 Port %d LOF alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) - { - copyVal |= sbeRedAlm; - pr_warning("%s: E1 Warning: Port %d LOF alarm.\n", - ci->devname, portnum); - } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) - { - copyVal &= ~sbeYelAlm; - pr_warning("%s: E1 Port %d RAI alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) - { - copyVal |= sbeYelAlm; - pr_warning("%s: E1 Warning: Port %d RAI alarm.\n", - ci->devname, portnum); - } else if ((copyVal & sbeE1RMAI) && !(value & sbeE1RMAI)) - { - copyVal &= ~sbeE1RMAI; - pr_warning("%s: E1 Port %d RMAI alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeE1RMAI) && (value & sbeE1RMAI)) - { - copyVal |= sbeE1RMAI; - pr_warning("%s: E1 Warning: Port %d RMAI alarm.\n", - ci->devname, portnum); - } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) - { - copyVal &= ~sbeAISAlm; - pr_warning("%s: E1 Port %d AIS alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) - { - copyVal |= sbeAISAlm; - pr_warning("%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; - pr_warning("%s: Port %d red alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) - { - copyVal |= sbeRedAlm; - pr_warning("%s: Warning: Port %d red alarm.\n", - ci->devname, portnum); - } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) - { - copyVal &= ~sbeYelAlm; - pr_warning("%s: Port %d yellow (RAI) alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) - { - copyVal |= sbeYelAlm; - pr_warning("%s: Warning: Port %d yellow (RAI) alarm.\n", - ci->devname, portnum); - } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) - { - copyVal &= ~sbeAISAlm; - pr_warning("%s: Port %d blue (AIS) alarm ended.\n", - ci->devname, portnum); - } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) - { - copyVal |= sbeAISAlm; - pr_warning("%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 (cxt1e1_log_level >= LOG_DEBUG) - if (value != 0x3f) - pr_warning("%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 (drvr_state != SBE_DRVR_AVAILABLE) - { - if (cxt1e1_log_level >= LOG_MONITOR) - pr_info("drvr not available (%x)\n", drvr_state); - return; - } - ci->wdcount++; - checkPorts (ci); - ci->wd_notify = 0; -} - - -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]; - c4_wq_port_cleanup (pi); - for (j = 0; j < MUSYCC_NCHANS; j++) - { - if (pi->chan[j]) - kfree(pi->chan[j]); /* free mch_t struct */ - } - kfree(pi->regram_saved); - } - kfree(ci->iqd_p_saved); - 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) -{ - struct s_comet_reg *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 = (struct s_comet_reg *) ((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 - pr_info("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; - pr_warning("%s: illegal port configuration (%x)\n", - ci->devname, pmsk); - return SBE_DRVR_FAIL; - } -#ifdef SBE_MAP_DEBUG - pr_info(">> %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 = kzalloc(sizeof(mch_t), GFP_KERNEL | GFP_DMA); - 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 - { - pr_warning("failed mch_t malloc, port %d channel %d size %u.\n", - 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 */ - ret = musycc_init(ci); - if (ret != 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) -{ - struct s_comet_reg *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 (cxt1e1_log_level >= LOG_WARN) - 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 (cxt1e1_log_level >= LOG_ERROR) - pr_info("%s: write to loop register failed, unknown state for Port %d\n", - ci->devname, portnum); - } - } else - { - if (cxt1e1_log_level >= LOG_WARN) - pr_info("%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) -{ - struct s_comet_reg *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) - 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, - 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 = NULL; /* 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; - //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); - //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 */ - } - - - if (mcp->RWportnum & 0x80) - { /* control says this is a register - * _write_ */ - if (mcp->value == data) - pr_info("%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 (cxt1e1_log_level >= LOG_MONITOR2) - { - pr_info("%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 */ - - { - status_t ret; - - ret = c4_wq_port_init(pi); - if (ret) /* create/init workqueue_struct */ - return ret; - } - - 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 (cxt1e1_max_mru | (cxt1e1_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); - - { - status_t ret; - - ret = c4_wk_chan_init(pi, ch); - if (ret) - return ret; - } - - /* save off interface assignments which bound a board */ - if (!ci->first_if) /* 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; - - ch = c4_find_chan(channum); - if (!ch) - 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; - - ch = c4_find_chan(channum); - if (!ch) - 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; - - ch = c4_find_chan(channum); - if (!ch) - 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; - - ret = musycc_chan_down((ci_t *)0, channum); - if (ret) - return ret; - ret = c4_chan_up(ch->up->up, channum); - if (ret) - 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; - - ch = c4_find_chan(channum); - if (!ch) - return -ENOENT; - - *p = ch->p; - return 0; -} - -status_t -c4_get_chan_stats (int channum, struct sbecom_chan_stats *p) -{ - mch_t *ch; - - ch = c4_find_chan(channum); - if (!ch) - 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 (cxt1e1_log_level >= LOG_WARN) - pr_info("%s: wanted to allocate %d fifo space, but got only %d\n", - pi->up->devname, *len, max); - *len = max; - } - if (cxt1e1_log_level >= LOG_DEBUG) - 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; - return start; -} - -void -c4_fifo_free (mpi_t *pi, int chan) -{ - int i; - - if (cxt1e1_log_level >= LOG_DEBUG) - 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) - 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 */ - - ch = c4_find_chan(channum); - if (!ch) - return -ENOENT; - - if (ch->state == UP) - { - if (cxt1e1_log_level >= LOG_MONITOR) - pr_info("%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 || cxt1e1_log_level >= LOG_WARN) - { - pr_info("%s: c4_chan_up[%d] EINVAL (attempt to cfg in-use or unavailable TimeSlot[%d])\n", - ci->devname, channum, i); - pr_info("+ 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( cxt1e1_log_level >= LOG_WARN) */ - 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); - 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 (cxt1e1_log_level >= LOG_MONITOR) - 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); -#endif - - ch->rxd_num = rxnum; - ch->txd_num = txnum; - ch->rxix_irq_srv = 0; - - ch->mdr = kzalloc(sizeof(struct mdesc) * rxnum, GFP_KERNEL | GFP_DMA); - ch->mdt = kzalloc(sizeof(struct mdesc) * txnum, GFP_KERNEL | GFP_DMA); - if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) - tmp = __constant_cpu_to_le32 (cxt1e1_max_mru | EOBIRQ_ENABLE); - else - tmp = __constant_cpu_to_le32 (cxt1e1_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)); - - m = OS_mem_token_alloc(cxt1e1_max_mru); - if (!m) { - if (cxt1e1_log_level >= LOG_MONITOR) - pr_info( - "%s: c4_chan_up[%d] - token alloc failure, size = %d.\n", - ci->devname, channum, cxt1e1_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 = NULL; - 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 - 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); - } - if (ch->p.status & TX_ENABLED) - { -#ifdef RLD_TRANS_DEBUG - 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 - * 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); - } - kfree(ch->mdt); - ch->mdt = NULL; - ch->txd_num = 0; - kfree(ch->mdr); - ch->mdr = NULL; - 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) - { - { - struct net_device *dev; - - dev = (struct net_device *) ci->first_if; - np = (char *) dev->name; - } - strncpy (bip->first_iname, np, CHNM_STRLEN - 1); - } else - strcpy (bip->first_iname, ""); - if (ci->last_if) - { - { - struct net_device *dev; - - dev = (struct net_device *) ci->last_if; - np = (char *) dev->name; - } - 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; - - dev = getuserbychan(iip->channum); - if (!dev) - return -ENOENT; - - np = dev->name; - strncpy (iip->iname, np, CHNM_STRLEN - 1); - iip->iname[CHNM_STRLEN - 1] = '\0'; - 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 - - return IRQ_RETVAL (handled); -} - - -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 deleted file mode 100644 index 56a1ee39be18..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_ioctls.h +++ /dev/null @@ -1,65 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - -#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 deleted file mode 100644 index 134ddd6562e9..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_private.h +++ /dev/null @@ -1,296 +0,0 @@ -#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 -#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" -#include "sbecom_inline_linux.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. */ - struct s_comet_reg *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 */ - 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]; - void __iomem *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 deleted file mode 100644 index 2916c2cb13f9..000000000000 --- a/drivers/staging/cxt1e1/pmcc4_sysdep.h +++ /dev/null @@ -1,63 +0,0 @@ -#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_ ***/ -extern int cxt1e1_log_level; diff --git a/drivers/staging/cxt1e1/sbe_bid.h b/drivers/staging/cxt1e1/sbe_bid.h deleted file mode 100644 index abc2e55f62fc..000000000000 --- a/drivers/staging/cxt1e1/sbe_bid.h +++ /dev/null @@ -1,47 +0,0 @@ -#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. - * - *----------------------------------------------------------------------------- - */ - -#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 deleted file mode 100644 index aad411d185f5..000000000000 --- a/drivers/staging/cxt1e1/sbe_promformat.h +++ /dev/null @@ -1,130 +0,0 @@ -#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. - * - *----------------------------------------------------------------------------- - */ - - -/*** - * 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 - * - */ - -#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; - -#endif /*** _INC_SBE_PROMFORMAT_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbecom_inline_linux.h b/drivers/staging/cxt1e1/sbecom_inline_linux.h deleted file mode 100644 index f5835c29ef32..000000000000 --- a/drivers/staging/cxt1e1/sbecom_inline_linux.h +++ /dev/null @@ -1,193 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - - -#include -#include -#include /* resolves kmalloc references */ -#include /* resolves skb references */ -#include /* resolves dev_kree_skb_any */ -#include /* resolves cpu_to_le32 */ - -/* forward reference */ -u_int32_t pci_read_32 (u_int32_t *p); -void pci_write_32 (u_int32_t *p, u_int32_t v); - - -/* - * system dependent callbacks - */ - -/****************/ -/* memory token */ -/****************/ - -static inline void * -OS_mem_token_alloc (size_t size) -{ - struct sk_buff *skb; - - skb = dev_alloc_skb (size); - if (!skb) - { - //pr_warning("no mem in OS_mem_token_alloc !\n"); - return NULL; - } - 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 NULL; -} - - -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; - struct work_struct work; - 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); - 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 deleted file mode 100644 index 52d3f71e5470..000000000000 --- a/drivers/staging/cxt1e1/sbecrc.c +++ /dev/null @@ -1,134 +0,0 @@ -/* 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.h" -#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 = NULL; - u_int32_t temp1, temp2, crc; - - /* - * if table not yet created, do so. Don't care about "extra" time - * checking this every time sbeCrc() is called, since CRC calculations - * are already time consuming - */ - if (!crcTableInit) { -#ifdef STATIC_CRC_TABLE - tbl = &CRCTable; - genCrcTable(tbl); -#else - tbl = kzalloc(CRC_TABLE_ENTRIES * sizeof(u_int32_t), - GFP_KERNEL); - if (!tbl) { - *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; - kfree(tbl); -#endif -} - -/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/sbeid.c b/drivers/staging/cxt1e1/sbeid.c deleted file mode 100644 index 97c5c6e7e299..000000000000 --- a/drivers/staging/cxt1e1/sbeid.c +++ /dev/null @@ -1,205 +0,0 @@ -/* 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" - -char * -sbeid_get_bdname(ci_t *ci) -{ - char *np = NULL; - - 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 deleted file mode 100644 index 1c2e52e8b5fe..000000000000 --- a/drivers/staging/cxt1e1/sbeproc.c +++ /dev/null @@ -1,219 +0,0 @@ -/* 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. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pmcc4_sysdep.h" -#include "sbecom_inline_linux.h" -#include "pmcc4_private.h" -#include "sbeproc.h" - -extern void sbecom_get_brdinfo(ci_t *, struct sbe_brd_info *, u_int8_t *); -extern struct s_hdw_info hdw_info[MAX_BOARDS]; - -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 void sbecom_proc_get_brdinfo(ci_t *ci, struct sbe_brd_info *bip) -{ - hdw_info_t *hi = &hdw_info[ci->brdno]; - u_int8_t *bsn = NULL; - - 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); - - pr_devel(">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", - bip->first_iname, bip->first_iname, - bip->last_iname, bip->last_iname); -} - -/* - * Describe the driver state through /proc - */ -static int sbecom_proc_get_sbe_info(struct seq_file *m, void *v) -{ - ci_t *ci = m->private; - char *spd; - struct sbe_brd_info *bip; - - bip = kzalloc(sizeof(struct sbe_brd_info), GFP_KERNEL | GFP_DMA); - if (!bip) - return -ENOMEM; - - pr_devel(">> sbecom_proc_get_sbe_info: entered\n"); - - sbecom_proc_get_brdinfo(ci, bip); - - seq_puts(m, "Board Type: "); - switch (bip->brd_id) { - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T3): - seq_puts(m, "wanPMC-C1T3"); - break; - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): - seq_puts(m, "wanPTMC-256T3 "); - break; - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1): - seq_puts(m, "wanPTMC-256T3 "); - break; - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_C24TE1): - seq_puts(m, "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): - seq_puts(m, "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): - seq_puts(m, "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): - seq_puts(m, "wanPMC-C1T1E1"); - break; - - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1): - seq_puts(m, "wanPCI-C4T1E1"); - break; - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1): - seq_puts(m, "wanPCI-C2T1E1"); - break; - case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1): - seq_puts(m, "wanPCI-C1T1E1"); - break; - - default: - seq_puts(m, "unknown"); - break; - } - - seq_printf(m, " [%08X]\n", bip->brd_id); - - seq_printf(m, "Board Number: %d\n", bip->brdno); - seq_printf(m, "Hardware ID: 0x%02X\n", ci->hdw_bid); - seq_printf(m, "Board SN: %06X\n", bip->brd_sn); - seq_printf(m, "Board MAC: %pMF\n", bip->brd_mac_addr); - seq_printf(m, "Ports: %d\n", ci->max_port); - seq_printf(m, "Channels: %d\n", bip->brd_chan_cnt); -#if 1 - seq_printf(m, "Interface: %s -> %s\n", - bip->first_iname, bip->last_iname); -#else - seq_printf(m, "Interface: 1st %p lst %p\n", - bip->first_iname, 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; - } - seq_printf(m, "PCI Bus Speed: %s\n", spd); - -#ifdef SBE_PMCC4_ENABLE - { - extern int cxt1e1_max_mru; -#if 0 - extern int max_chans_used; - extern int cxt1e1_max_mtu; -#endif - extern int max_rxdesc_used, max_txdesc_used; - - seq_printf(m, "\ncxt1e1_max_mru: %d\n", cxt1e1_max_mru); -#if 0 - seq_printf(m, "\nmax_chans_used: %d\n", max_chans_used); - seq_printf(m, "cxt1e1_max_mtu: %d\n", cxt1e1_max_mtu); -#endif - seq_printf(m, "max_rxdesc_used: %d\n", max_rxdesc_used); - seq_printf(m, "max_txdesc_used: %d\n", max_txdesc_used); - } -#endif - - kfree(bip); - - pr_devel(">> proc_fs: finished\n"); - return 0; -} - -/* - * seq_file wrappers for procfile show routines. - */ -static int sbecom_proc_open(struct inode *inode, struct file *file) -{ - return single_open(file, sbecom_proc_get_sbe_info, PDE_DATA(inode)); -} - -static const struct file_operations sbecom_proc_fops = { - .open = sbecom_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -/* - * Initialize the /proc subsystem for the specific SBE driver - */ -int __init sbecom_proc_brd_init(ci_t *ci) -{ - char dir[7 + SBE_IFACETMPL_SIZE + 1]; - - snprintf(dir, sizeof(dir), "driver/%s", ci->devname); - ci->dir_dev = proc_mkdir(dir, NULL); - if (!ci->dir_dev) { - pr_err("Unable to create directory /proc/driver/%s\n", ci->devname); - goto fail; - } - - if (!proc_create_data("info", S_IFREG | S_IRUGO, ci->dir_dev, - &sbecom_proc_fops, ci)) { - pr_err("Unable to create entry /proc/driver/%s/info\n", ci->devname); - goto fail; - } - return 0; - -fail: - sbecom_proc_brd_cleanup(ci); - return 1; -} diff --git a/drivers/staging/cxt1e1/sbeproc.h b/drivers/staging/cxt1e1/sbeproc.h deleted file mode 100644 index 37285df359c1..000000000000 --- a/drivers/staging/cxt1e1/sbeproc.h +++ /dev/null @@ -1,42 +0,0 @@ -#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. - *----------------------------------------------------------------------------- - */ - - -#ifdef CONFIG_PROC_FS -void sbecom_proc_brd_cleanup (ci_t *); -int __init sbecom_proc_brd_init (ci_t *); - -#else - -static inline void sbecom_proc_brd_cleanup(ci_t *ci) -{ -} - -static inline int __init sbecom_proc_brd_init(ci_t *ci) -{ - return 0; -} - -#endif /*** CONFIG_PROC_FS ***/ - -#endif /*** _INC_SBEPROC_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbew_ioc.h b/drivers/staging/cxt1e1/sbew_ioc.h deleted file mode 100644 index e1e5bfc9ad37..000000000000 --- a/drivers/staging/cxt1e1/sbew_ioc.h +++ /dev/null @@ -1,81 +0,0 @@ -#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. - * - *----------------------------------------------------------------------------- - */ - -#include - -#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 - -#endif /*** _INC_SBEWIOC_H_ ***/ -- cgit From 9e5e2ffda320bacb761e4812e3ef7a7decd592a9 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sat, 19 Apr 2014 11:21:33 +0100 Subject: imx-drm: update to use component match support Update the imx-drm driver to use the component match support rather than add_components. Signed-off-by: Russell King --- drivers/staging/imx-drm/imx-drm-core.c | 57 +++------------------------------- 1 file changed, 4 insertions(+), 53 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c index def8280d7ee6..47ee6c79857a 100644 --- a/drivers/staging/imx-drm/imx-drm-core.c +++ b/drivers/staging/imx-drm/imx-drm-core.c @@ -570,22 +570,6 @@ static int compare_of(struct device *dev, void *data) return dev->of_node == np; } -static LIST_HEAD(imx_drm_components); - -static int imx_drm_add_components(struct device *master, struct master *m) -{ - struct imx_drm_component *component; - int ret; - - list_for_each_entry(component, &imx_drm_components, list) { - ret = component_master_add_child(m, compare_of, - component->of_node); - if (ret) - return ret; - } - return 0; -} - static int imx_drm_bind(struct device *dev) { return drm_platform_init(&imx_drm_driver, to_platform_device(dev)); @@ -597,43 +581,14 @@ static void imx_drm_unbind(struct device *dev) } static const struct component_master_ops imx_drm_ops = { - .add_components = imx_drm_add_components, .bind = imx_drm_bind, .unbind = imx_drm_unbind, }; -static struct imx_drm_component *imx_drm_find_component(struct device *dev, - struct device_node *node) -{ - struct imx_drm_component *component; - - list_for_each_entry(component, &imx_drm_components, list) - if (component->of_node == node) - return component; - - return NULL; -} - -static int imx_drm_add_component(struct device *dev, struct device_node *node) -{ - struct imx_drm_component *component; - - if (imx_drm_find_component(dev, node)) - return 0; - - component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL); - if (!component) - return -ENOMEM; - - component->of_node = node; - list_add_tail(&component->list, &imx_drm_components); - - return 0; -} - static int imx_drm_platform_probe(struct platform_device *pdev) { struct device_node *ep, *port, *remote; + struct component_match *match = NULL; int ret; int i; @@ -647,9 +602,7 @@ static int imx_drm_platform_probe(struct platform_device *pdev) if (!port) break; - ret = imx_drm_add_component(&pdev->dev, port); - if (ret < 0) - return ret; + component_match_add(&pdev->dev, &match, compare_of, port); } if (i == 0) { @@ -675,10 +628,8 @@ static int imx_drm_platform_probe(struct platform_device *pdev) continue; } - ret = imx_drm_add_component(&pdev->dev, remote); + component_match_add(&pdev->dev, &match, compare_of, remote); of_node_put(remote); - if (ret < 0) - return ret; } of_node_put(port); } @@ -687,7 +638,7 @@ static int imx_drm_platform_probe(struct platform_device *pdev) if (ret) return ret; - return component_master_add(&pdev->dev, &imx_drm_ops); + return component_master_add_with_match(&pdev->dev, &imx_drm_ops, match); } static int imx_drm_platform_remove(struct platform_device *pdev) -- cgit From 82695ef549b5299d3d9e088d6648289bda8ef3d8 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Sun, 22 Jun 2014 20:59:00 +0100 Subject: iio: adis: Switch sampling frequency attr to core support. By using the info_mask_shared_by_all element of the channel spec, acce to the sampling frequency becomes available to in kernel users of the driver. It also shortens and simplifies the code. This particular conversion was made more complicated by the shared library and the fact that a number of the drivers do not actually have support for setting or reading the sampling frequency. The hardware, in those cases investigated supports it. It's just never been implemented. Signed-off-by: Jonathan Cameron Reviewed-by: Hartmut Knaack Acked-by: Lars-Peter Clausen --- drivers/staging/iio/accel/adis16201_core.c | 14 +++++++------- drivers/staging/iio/accel/adis16203_core.c | 11 ++++++----- drivers/staging/iio/accel/adis16204_core.c | 12 ++++++------ drivers/staging/iio/accel/adis16209_core.c | 18 ++++++++++-------- drivers/staging/iio/accel/adis16240_core.c | 12 ++++++------ 5 files changed, 35 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c index 2105576fa77c..50ba1fa7f98a 100644 --- a/drivers/staging/iio/accel/adis16201_core.c +++ b/drivers/staging/iio/accel/adis16201_core.c @@ -131,17 +131,17 @@ static int adis16201_write_raw(struct iio_dev *indio_dev, } static const struct iio_chan_spec adis16201_channels[] = { - ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 12), - ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 12), + ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 0, 12), + ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 0, 12), ADIS_ACCEL_CHAN(X, ADIS16201_XACCL_OUT, ADIS16201_SCAN_ACC_X, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), ADIS_ACCEL_CHAN(Y, ADIS16201_YACCL_OUT, ADIS16201_SCAN_ACC_Y, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), - ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 12), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), + ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 0, 12), ADIS_INCLI_CHAN(X, ADIS16201_XINCL_OUT, ADIS16201_SCAN_INCLI_X, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), ADIS_INCLI_CHAN(X, ADIS16201_YINCL_OUT, ADIS16201_SCAN_INCLI_Y, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), IIO_CHAN_SOFT_TIMESTAMP(7) }; diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c index 409a28ed9043..f472137b0069 100644 --- a/drivers/staging/iio/accel/adis16203_core.c +++ b/drivers/staging/iio/accel/adis16203_core.c @@ -99,13 +99,14 @@ static int adis16203_read_raw(struct iio_dev *indio_dev, } static const struct iio_chan_spec adis16203_channels[] = { - ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 12), - ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 12), + ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 0, 12), + ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 0, 12), ADIS_INCLI_CHAN(X, ADIS16203_XINCL_OUT, ADIS16203_SCAN_INCLI_X, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), /* Fixme: Not what it appears to be - see data sheet */ - ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, 0, 14), - ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 12), + ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, + 0, 0, 14), + ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 0, 12), IIO_CHAN_SOFT_TIMESTAMP(5), }; diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index b8ea76857cd6..19eaebc77d7a 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c @@ -136,15 +136,15 @@ static int adis16204_write_raw(struct iio_dev *indio_dev, } static const struct iio_chan_spec adis16204_channels[] = { - ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 12), - ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 12), - ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 12), + ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 0, 12), + ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 0, 12), + ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 0, 12), ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X, - BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 14), ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y, - BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 14), ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT, - ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 14), + ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 0, 14), IIO_CHAN_SOFT_TIMESTAMP(5), }; diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c index 4492e51d8886..374dc6edbcf5 100644 --- a/drivers/staging/iio/accel/adis16209_core.c +++ b/drivers/staging/iio/accel/adis16209_core.c @@ -130,16 +130,18 @@ static int adis16209_read_raw(struct iio_dev *indio_dev, } static const struct iio_chan_spec adis16209_channels[] = { - ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 14), - ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 12), + ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 0, 14), + ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 0, 12), ADIS_ACCEL_CHAN(X, ADIS16209_XACCL_OUT, ADIS16209_SCAN_ACC_X, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), ADIS_ACCEL_CHAN(Y, ADIS16209_YACCL_OUT, ADIS16209_SCAN_ACC_Y, - BIT(IIO_CHAN_INFO_CALIBBIAS), 14), - ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 12), - ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, 0, 14), - ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, 0, 14), - ADIS_ROT_CHAN(X, ADIS16209_ROT_OUT, ADIS16209_SCAN_ROT, 0, 14), + BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), + ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 0, 12), + ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, + 0, 0, 14), + ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, + 0, 0, 14), + ADIS_ROT_CHAN(X, ADIS16209_ROT_OUT, ADIS16209_SCAN_ROT, 0, 0, 14), IIO_CHAN_SOFT_TIMESTAMP(8) }; diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c index 3a303a03d028..74ace2a8769d 100644 --- a/drivers/staging/iio/accel/adis16240_core.c +++ b/drivers/staging/iio/accel/adis16240_core.c @@ -173,15 +173,15 @@ static int adis16240_write_raw(struct iio_dev *indio_dev, } static const struct iio_chan_spec adis16240_channels[] = { - ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 10), - ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 10), + ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 0, 10), + ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 0, 10), ADIS_ACCEL_CHAN(X, ADIS16240_XACCL_OUT, ADIS16240_SCAN_ACC_X, - BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), + BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), ADIS_ACCEL_CHAN(Y, ADIS16240_YACCL_OUT, ADIS16240_SCAN_ACC_Y, - BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), + BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), ADIS_ACCEL_CHAN(Z, ADIS16240_ZACCL_OUT, ADIS16240_SCAN_ACC_Z, - BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), - ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 10), + BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), + ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 0, 10), IIO_CHAN_SOFT_TIMESTAMP(6) }; -- cgit From 260974704ea4c01fb21166182e8b0cf266cbd77a Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Fri, 7 Mar 2014 12:56:00 +0000 Subject: staging: iio: ad9832: Remove redundant check 'val' is unsigned and cannot be negative. Signed-off-by: Sachin Kamat Cc: Michael Hennerich Signed-off-by: Jonathan Cameron --- drivers/staging/iio/frequency/ad9832.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c index b7c8351ce2ff..cf68159a5848 100644 --- a/drivers/staging/iio/frequency/ad9832.c +++ b/drivers/staging/iio/frequency/ad9832.c @@ -120,7 +120,7 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr, ret = spi_sync(st->spi, &st->msg); break; case AD9832_PHASE_SYM: - if (val < 0 || val > 3) { + if (val > 3) { ret = -EINVAL; break; } -- cgit From 49f681fab6a1e8e9d354bba692ba17cdcaa1fb1e Mon Sep 17 00:00:00 2001 From: Daniel Baluta Date: Mon, 7 Jul 2014 15:12:00 +0100 Subject: staging: iio: remove duplicate case labels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise, compiling iio_event_monitor program fails: io_event_monitor.c: In function ‘event_is_known’: iio_event_monitor.c:125:2: error: duplicate case value case IIO_MOD_LIGHT_BOTH: ^ iio_event_monitor.c:121:2: error: previously used here case IIO_MOD_LIGHT_BOTH: Fixes: da4db94 (iio staging: add recently added modifiers to iio_event_monitor) Signed-off-by: Daniel Baluta Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_event_monitor.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/Documentation/iio_event_monitor.c b/drivers/staging/iio/Documentation/iio_event_monitor.c index cb35a97f00c3..569d6f8face5 100644 --- a/drivers/staging/iio/Documentation/iio_event_monitor.c +++ b/drivers/staging/iio/Documentation/iio_event_monitor.c @@ -122,8 +122,6 @@ static bool event_is_known(struct iio_event_data *event) case IIO_MOD_LIGHT_IR: case IIO_MOD_ROOT_SUM_SQUARED_X_Y: case IIO_MOD_SUM_SQUARED_X_Y_Z: - case IIO_MOD_LIGHT_BOTH: - case IIO_MOD_LIGHT_IR: case IIO_MOD_LIGHT_CLEAR: case IIO_MOD_LIGHT_RED: case IIO_MOD_LIGHT_GREEN: -- cgit From 744966d6dc7d9945d8b9cc511d98a0ec5aeee9ed Mon Sep 17 00:00:00 2001 From: Himangi Saraogi Date: Tue, 7 Jan 2014 19:44:00 +0000 Subject: staging: iio: Introduce the use of devm_ioremap_resource This patch introduces the use of devm_ioremap_resource. It does away with call to request_mem_region and the error checking on platform_get_resource. Also, the calls to free the allocated resources like release_mem_region and iounmap are done away with. The ret variable in the probe function is also eliminated. Also, a bug is fixed as the goto in the error handling of request_mem_region should not have called release_mem_region which releases a resource that has not been allocated. Signed-off-by: Himangi Saraogi Acked-by: Julia Lawall Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7606_par.c | 37 ++++++------------------------------ 1 file changed, 6 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7606_par.c b/drivers/staging/iio/adc/ad7606_par.c index 8a48d18de788..7511839ba94e 100644 --- a/drivers/staging/iio/adc/ad7606_par.c +++ b/drivers/staging/iio/adc/ad7606_par.c @@ -53,7 +53,7 @@ static int ad7606_par_probe(struct platform_device *pdev) struct iio_dev *indio_dev; void __iomem *addr; resource_size_t remap_size; - int ret, irq; + int irq; irq = platform_get_irq(pdev, 0); if (irq < 0) { @@ -62,56 +62,31 @@ static int ad7606_par_probe(struct platform_device *pdev) } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - return -ENODEV; + addr = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(addr)) + return PTR_ERR(addr); remap_size = resource_size(res); - /* Request the regions */ - if (!request_mem_region(res->start, remap_size, "iio-ad7606")) { - ret = -EBUSY; - goto out1; - } - addr = ioremap(res->start, remap_size); - if (!addr) { - ret = -ENOMEM; - goto out1; - } - indio_dev = ad7606_probe(&pdev->dev, irq, addr, platform_get_device_id(pdev)->driver_data, remap_size > 1 ? &ad7606_par16_bops : &ad7606_par8_bops); - if (IS_ERR(indio_dev)) { - ret = PTR_ERR(indio_dev); - goto out2; - } + if (IS_ERR(indio_dev)) + return PTR_ERR(indio_dev); platform_set_drvdata(pdev, indio_dev); return 0; - -out2: - iounmap(addr); -out1: - release_mem_region(res->start, remap_size); - - return ret; } static int ad7606_par_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); - struct resource *res; - struct ad7606_state *st = iio_priv(indio_dev); ad7606_remove(indio_dev, platform_get_irq(pdev, 0)); - iounmap(st->base_address); - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - release_mem_region(res->start, resource_size(res)); - return 0; } -- cgit From f64c3052b62ca6684f43f923dcc19fefcc8606c2 Mon Sep 17 00:00:00 2001 From: Himangi Saraogi Date: Tue, 7 Jan 2014 22:19:00 +0000 Subject: iio:trigger: Introduce the use of devm_kzalloc This patch introduces the use of the managed version of kzalloc and removes the kfrees in the probe and remove functions. More return paths are added and the labels are renamed to order them. Signed-off-by: Himangi Saraogi Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 31 ++++++++--------------- 1 file changed, 11 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c index 16f1a06bcd89..a21b7c514776 100644 --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c @@ -182,45 +182,40 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev) unsigned int config; int ret; - st = kzalloc(sizeof(*st), GFP_KERNEL); - if (st == NULL) { - ret = -ENOMEM; - goto out; - } + st = devm_kzalloc(&pdev->dev, sizeof(*st), GFP_KERNEL); + if (st == NULL) + return -ENOMEM; st->irq = platform_get_irq(pdev, 0); if (!st->irq) { dev_err(&pdev->dev, "No IRQs specified"); - ret = -ENODEV; - goto out1; + return -ENODEV; } ret = iio_bfin_tmr_get_number(st->irq); if (ret < 0) - goto out1; + return ret; st->timer_num = ret; st->t = &iio_bfin_timer_code[st->timer_num]; st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num); - if (!st->trig) { - ret = -ENOMEM; - goto out1; - } + if (!st->trig) + return -ENOMEM; st->trig->ops = &iio_bfin_tmr_trigger_ops; st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups; iio_trigger_set_drvdata(st->trig, st); ret = iio_trigger_register(st->trig); if (ret) - goto out2; + goto out; ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr, 0, st->trig->name, st); if (ret) { dev_err(&pdev->dev, "request IRQ-%d failed", st->irq); - goto out4; + goto out1; } config = PWM_OUT | PERIOD_CNT | IRQ_ENA; @@ -260,13 +255,10 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev) return 0; out_free_irq: free_irq(st->irq, st); -out4: - iio_trigger_unregister(st->trig); -out2: - iio_trigger_put(st->trig); out1: - kfree(st); + iio_trigger_unregister(st->trig); out: + iio_trigger_put(st->trig); return ret; } @@ -280,7 +272,6 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev) free_irq(st->irq, st); iio_trigger_unregister(st->trig); iio_trigger_put(st->trig); - kfree(st); return 0; } -- cgit From 48d58a58dc37fd7d53745738512ebee30b5f7f41 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Thu, 7 Aug 2014 12:06:00 +0100 Subject: staging:iio:ad7291 remove double define Remove second instance of definition of AD7291_BITS. Signed-off-by: Hartmut Knaack Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7291.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index 357cef2a6f4c..e6ef35c24061 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -73,8 +73,6 @@ #define AD7291_T_VALUE_FLOAT_OFFSET 2 #define AD7291_T_VALUE_FLOAT_MASK 0x2 -#define AD7291_BITS 12 - struct ad7291_chip_info { struct i2c_client *client; struct regulator *reg; -- cgit From 975d98cef83043d3aad3ec3f4554494071a01531 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Thu, 7 Aug 2014 12:06:00 +0100 Subject: staging:iio:ad7291 fix coding style Fix indention and comment style. Signed-off-by: Hartmut Knaack Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7291.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index e6ef35c24061..0de28d81490e 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -31,7 +31,6 @@ * is in the read mask. * * The noise-delayed bit as per datasheet suggestion is always enabled. - * */ /* @@ -163,7 +162,8 @@ static irqreturn_t ad7291_event_handler(int irq, void *private) } static unsigned int ad7291_threshold_reg(const struct iio_chan_spec *chan, - enum iio_event_direction dir, enum iio_event_info info) + enum iio_event_direction dir, + enum iio_event_info info) { unsigned int offset; @@ -180,14 +180,14 @@ static unsigned int ad7291_threshold_reg(const struct iio_chan_spec *chan, switch (info) { case IIO_EV_INFO_VALUE: - if (dir == IIO_EV_DIR_FALLING) - return AD7291_DATA_HIGH(offset); - else - return AD7291_DATA_LOW(offset); + if (dir == IIO_EV_DIR_FALLING) + return AD7291_DATA_HIGH(offset); + else + return AD7291_DATA_LOW(offset); case IIO_EV_INFO_HYSTERESIS: - return AD7291_HYST(offset); + return AD7291_HYST(offset); default: - break; + break; } return 0; } @@ -204,7 +204,7 @@ static int ad7291_read_event_value(struct iio_dev *indio_dev, u16 uval; ret = ad7291_i2c_read(chip, ad7291_threshold_reg(chan, dir, info), - &uval); + &uval); if (ret < 0) return ret; @@ -235,7 +235,7 @@ static int ad7291_write_event_value(struct iio_dev *indio_dev, } return ad7291_i2c_write(chip, ad7291_threshold_reg(chan, dir, info), - val); + val); } static int ad7291_read_event_config(struct iio_dev *indio_dev, @@ -244,8 +244,10 @@ static int ad7291_read_event_config(struct iio_dev *indio_dev, enum iio_event_direction dir) { struct ad7291_chip_info *chip = iio_priv(indio_dev); - /* To be enabled the channel must simply be on. If any are enabled - we are in continuous sampling mode */ + /* + * To be enabled the channel must simply be on. If any are enabled + * we are in continuous sampling mode + */ switch (chan->type) { case IIO_VOLTAGE: @@ -342,7 +344,7 @@ static int ad7291_read_raw(struct iio_dev *indio_dev, } /* Read voltage */ ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_VOLTAGE); + AD7291_VOLTAGE); if (ret < 0) { mutex_unlock(&chip->state_lock); return ret; @@ -353,7 +355,7 @@ static int ad7291_read_raw(struct iio_dev *indio_dev, case IIO_TEMP: /* Assumes tsense bit of command register always set */ ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_T_SENSE); + AD7291_T_SENSE); if (ret < 0) return ret; *val = sign_extend32(ret, 11); @@ -363,7 +365,7 @@ static int ad7291_read_raw(struct iio_dev *indio_dev, } case IIO_CHAN_INFO_AVERAGE_RAW: ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_T_AVERAGE); + AD7291_T_AVERAGE); if (ret < 0) return ret; *val = sign_extend32(ret, 11); @@ -458,7 +460,7 @@ static const struct iio_info ad7291_info = { }; static int ad7291_probe(struct i2c_client *client, - const struct i2c_device_id *id) + const struct i2c_device_id *id) { struct ad7291_platform_data *pdata = client->dev.platform_data; struct ad7291_chip_info *chip; -- cgit From 5714d0c13a34e04436974b61a3bc805fd055459a Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Thu, 7 Aug 2014 12:06:00 +0100 Subject: staging:iio:ad7291 cleanup defines Use BIT and GENMASK, remove unused defines, use AD7291_VOLTAGE_OFFSET definition and move AD7291_BITS. Signed-off-by: Hartmut Knaack Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7291.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index 0de28d81490e..0ec6454b33a1 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -46,31 +46,27 @@ #define AD7291_VOLTAGE_ALERT_STATUS 0x1F #define AD7291_T_ALERT_STATUS 0x20 +#define AD7291_BITS 12 #define AD7291_VOLTAGE_LIMIT_COUNT 8 /* * AD7291 command */ -#define AD7291_AUTOCYCLE (1 << 0) -#define AD7291_RESET (1 << 1) -#define AD7291_ALERT_CLEAR (1 << 2) -#define AD7291_ALERT_POLARITY (1 << 3) -#define AD7291_EXT_REF (1 << 4) -#define AD7291_NOISE_DELAY (1 << 5) -#define AD7291_T_SENSE_MASK (1 << 7) -#define AD7291_VOLTAGE_MASK 0xFF00 -#define AD7291_VOLTAGE_OFFSET 0x8 +#define AD7291_AUTOCYCLE BIT(0) +#define AD7291_RESET BIT(1) +#define AD7291_ALERT_CLEAR BIT(2) +#define AD7291_ALERT_POLARITY BIT(3) +#define AD7291_EXT_REF BIT(4) +#define AD7291_NOISE_DELAY BIT(5) +#define AD7291_T_SENSE_MASK BIT(7) +#define AD7291_VOLTAGE_MASK GENMASK(15, 8) +#define AD7291_VOLTAGE_OFFSET 8 /* * AD7291 value masks */ -#define AD7291_CHANNEL_MASK 0xF000 -#define AD7291_BITS 12 -#define AD7291_VALUE_MASK 0xFFF -#define AD7291_T_VALUE_SIGN 0x400 -#define AD7291_T_VALUE_FLOAT_OFFSET 2 -#define AD7291_T_VALUE_FLOAT_MASK 0x2 +#define AD7291_VALUE_MASK GENMASK(11, 0) struct ad7291_chip_info { struct i2c_client *client; @@ -172,7 +168,7 @@ static unsigned int ad7291_threshold_reg(const struct iio_chan_spec *chan, offset = chan->channel; break; case IIO_TEMP: - offset = 8; + offset = AD7291_VOLTAGE_OFFSET; break; default: return 0; @@ -251,7 +247,7 @@ static int ad7291_read_event_config(struct iio_dev *indio_dev, switch (chan->type) { case IIO_VOLTAGE: - if (chip->c_mask & (1 << (15 - chan->channel))) + if (chip->c_mask & BIT(15 - chan->channel)) return 1; else return 0; @@ -336,7 +332,7 @@ static int ad7291_read_raw(struct iio_dev *indio_dev, } /* Enable this channel alone */ regval = chip->command & (~AD7291_VOLTAGE_MASK); - regval |= 1 << (15 - chan->channel); + regval |= BIT(15 - chan->channel); ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval); if (ret < 0) { mutex_unlock(&chip->state_lock); -- cgit From 8a32f65f389396267ae50a78d3416bcac5d4d959 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Thu, 7 Aug 2014 12:06:00 +0100 Subject: staging:iio:ad7291 faciliate ad7291_read_event_config() Save some lines in returning a voltage event. Signed-off-by: Hartmut Knaack Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7291.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index 0ec6454b33a1..40f1cea25e1f 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -247,10 +247,7 @@ static int ad7291_read_event_config(struct iio_dev *indio_dev, switch (chan->type) { case IIO_VOLTAGE: - if (chip->c_mask & BIT(15 - chan->channel)) - return 1; - else - return 0; + return !!(chip->c_mask & BIT(15 - chan->channel)); case IIO_TEMP: /* always on */ return 1; -- cgit From cfa71bf35c87c79ad9a03a29a7426b495446b2bf Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Thu, 7 Aug 2014 12:06:00 +0100 Subject: staging:iio:ad7291 define alert register bits Define some names for alert register bits and apply them to ad7291_event_handler(). Signed-off-by: Hartmut Knaack Acked-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7291.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index 40f1cea25e1f..9139958da787 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -68,6 +68,17 @@ */ #define AD7291_VALUE_MASK GENMASK(11, 0) +/* + * AD7291 alert register bits + */ +#define AD7291_T_LOW BIT(0) +#define AD7291_T_HIGH BIT(1) +#define AD7291_T_AVG_LOW BIT(2) +#define AD7291_T_AVG_HIGH BIT(3) +#define AD7291_V_LOW(x) BIT((x) * 2) +#define AD7291_V_HIGH(x) BIT((x) * 2 + 1) + + struct ad7291_chip_info { struct i2c_client *client; struct regulator *reg; @@ -122,14 +133,14 @@ static irqreturn_t ad7291_event_handler(int irq, void *private) ad7291_i2c_write(chip, AD7291_COMMAND, command); /* For now treat t_sense and t_sense_average the same */ - if ((t_status & (1 << 0)) || (t_status & (1 << 2))) + if ((t_status & AD7291_T_LOW) || (t_status & AD7291_T_AVG_LOW)) iio_push_event(indio_dev, IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING), timestamp); - if ((t_status & (1 << 1)) || (t_status & (1 << 3))) + if ((t_status & AD7291_T_HIGH) || (t_status & AD7291_T_AVG_HIGH)) iio_push_event(indio_dev, IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0, @@ -137,18 +148,18 @@ static irqreturn_t ad7291_event_handler(int irq, void *private) IIO_EV_DIR_RISING), timestamp); - for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT*2; i += 2) { - if (v_status & (1 << i)) + for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT; i++) { + if (v_status & AD7291_V_LOW(i)) iio_push_event(indio_dev, IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, - i/2, + i, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING), timestamp); - if (v_status & (1 << (i + 1))) + if (v_status & AD7291_V_HIGH(i)) iio_push_event(indio_dev, IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, - i/2, + i, IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING), timestamp); -- cgit From 3b1cae7c2c2b801b8530db07a02587bc1a41b3fe Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Mon, 30 Jun 2014 09:50:00 +0100 Subject: staging:iio:ad7291: Move out of staging The ad7291 driver is in a reasonable shape. It does not use non-standard API/ABI and there are no major style issues with the driver. So this patch moves it out of staging. There is one small warning from checkpatch which is also fixed in this patch. The patch also sorts the #include directives in alphabetical order. Signed-off-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/Kconfig | 7 - drivers/staging/iio/adc/Makefile | 1 - drivers/staging/iio/adc/ad7291.c | 584 --------------------------------------- drivers/staging/iio/adc/ad7291.h | 12 - 4 files changed, 604 deletions(-) delete mode 100644 drivers/staging/iio/adc/ad7291.c delete mode 100644 drivers/staging/iio/adc/ad7291.h (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index b87e382ad768..75d2d1bf93d1 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig @@ -3,13 +3,6 @@ # menu "Analog to digital converters" -config AD7291 - tristate "Analog Devices AD7291 ADC driver" - depends on I2C - help - Say yes here to build support for Analog Devices AD7291 - 8 Channel ADC with temperature sensor. - config AD7606 tristate "Analog Devices AD7606 ADC driver" depends on GPIOLIB diff --git a/drivers/staging/iio/adc/Makefile b/drivers/staging/iio/adc/Makefile index afdcd1ff08ff..1c4277dbd318 100644 --- a/drivers/staging/iio/adc/Makefile +++ b/drivers/staging/iio/adc/Makefile @@ -8,7 +8,6 @@ ad7606-$(CONFIG_AD7606_IFACE_PARALLEL) += ad7606_par.o ad7606-$(CONFIG_AD7606_IFACE_SPI) += ad7606_spi.o obj-$(CONFIG_AD7606) += ad7606.o -obj-$(CONFIG_AD7291) += ad7291.o obj-$(CONFIG_AD7780) += ad7780.o obj-$(CONFIG_AD7816) += ad7816.o obj-$(CONFIG_AD7192) += ad7192.o diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c deleted file mode 100644 index 9139958da787..000000000000 --- a/drivers/staging/iio/adc/ad7291.c +++ /dev/null @@ -1,584 +0,0 @@ -/* - * AD7291 8-Channel, I2C, 12-Bit SAR ADC with Temperature Sensor - * - * Copyright 2010-2011 Analog Devices Inc. - * - * Licensed under the GPL-2 or later. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "ad7291.h" - -/* - * Simplified handling - * - * If no events enabled - single polled channel read - * If event enabled direct reads disable unless channel - * is in the read mask. - * - * The noise-delayed bit as per datasheet suggestion is always enabled. - */ - -/* - * AD7291 registers definition - */ -#define AD7291_COMMAND 0x00 -#define AD7291_VOLTAGE 0x01 -#define AD7291_T_SENSE 0x02 -#define AD7291_T_AVERAGE 0x03 -#define AD7291_DATA_HIGH(x) ((x) * 3 + 0x4) -#define AD7291_DATA_LOW(x) ((x) * 3 + 0x5) -#define AD7291_HYST(x) ((x) * 3 + 0x6) -#define AD7291_VOLTAGE_ALERT_STATUS 0x1F -#define AD7291_T_ALERT_STATUS 0x20 - -#define AD7291_BITS 12 -#define AD7291_VOLTAGE_LIMIT_COUNT 8 - - -/* - * AD7291 command - */ -#define AD7291_AUTOCYCLE BIT(0) -#define AD7291_RESET BIT(1) -#define AD7291_ALERT_CLEAR BIT(2) -#define AD7291_ALERT_POLARITY BIT(3) -#define AD7291_EXT_REF BIT(4) -#define AD7291_NOISE_DELAY BIT(5) -#define AD7291_T_SENSE_MASK BIT(7) -#define AD7291_VOLTAGE_MASK GENMASK(15, 8) -#define AD7291_VOLTAGE_OFFSET 8 - -/* - * AD7291 value masks - */ -#define AD7291_VALUE_MASK GENMASK(11, 0) - -/* - * AD7291 alert register bits - */ -#define AD7291_T_LOW BIT(0) -#define AD7291_T_HIGH BIT(1) -#define AD7291_T_AVG_LOW BIT(2) -#define AD7291_T_AVG_HIGH BIT(3) -#define AD7291_V_LOW(x) BIT((x) * 2) -#define AD7291_V_HIGH(x) BIT((x) * 2 + 1) - - -struct ad7291_chip_info { - struct i2c_client *client; - struct regulator *reg; - u16 command; - u16 c_mask; /* Active voltage channels for events */ - struct mutex state_lock; -}; - -static int ad7291_i2c_read(struct ad7291_chip_info *chip, u8 reg, u16 *data) -{ - struct i2c_client *client = chip->client; - int ret = 0; - - ret = i2c_smbus_read_word_swapped(client, reg); - if (ret < 0) { - dev_err(&client->dev, "I2C read error\n"); - return ret; - } - - *data = ret; - - return 0; -} - -static int ad7291_i2c_write(struct ad7291_chip_info *chip, u8 reg, u16 data) -{ - return i2c_smbus_write_word_swapped(chip->client, reg, data); -} - -static irqreturn_t ad7291_event_handler(int irq, void *private) -{ - struct iio_dev *indio_dev = private; - struct ad7291_chip_info *chip = iio_priv(private); - u16 t_status, v_status; - u16 command; - int i; - s64 timestamp = iio_get_time_ns(); - - if (ad7291_i2c_read(chip, AD7291_T_ALERT_STATUS, &t_status)) - return IRQ_HANDLED; - - if (ad7291_i2c_read(chip, AD7291_VOLTAGE_ALERT_STATUS, &v_status)) - return IRQ_HANDLED; - - if (!(t_status || v_status)) - return IRQ_HANDLED; - - command = chip->command | AD7291_ALERT_CLEAR; - ad7291_i2c_write(chip, AD7291_COMMAND, command); - - command = chip->command & ~AD7291_ALERT_CLEAR; - ad7291_i2c_write(chip, AD7291_COMMAND, command); - - /* For now treat t_sense and t_sense_average the same */ - if ((t_status & AD7291_T_LOW) || (t_status & AD7291_T_AVG_LOW)) - iio_push_event(indio_dev, - IIO_UNMOD_EVENT_CODE(IIO_TEMP, - 0, - IIO_EV_TYPE_THRESH, - IIO_EV_DIR_FALLING), - timestamp); - if ((t_status & AD7291_T_HIGH) || (t_status & AD7291_T_AVG_HIGH)) - iio_push_event(indio_dev, - IIO_UNMOD_EVENT_CODE(IIO_TEMP, - 0, - IIO_EV_TYPE_THRESH, - IIO_EV_DIR_RISING), - timestamp); - - for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT; i++) { - if (v_status & AD7291_V_LOW(i)) - iio_push_event(indio_dev, - IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, - i, - IIO_EV_TYPE_THRESH, - IIO_EV_DIR_FALLING), - timestamp); - if (v_status & AD7291_V_HIGH(i)) - iio_push_event(indio_dev, - IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, - i, - IIO_EV_TYPE_THRESH, - IIO_EV_DIR_RISING), - timestamp); - } - - return IRQ_HANDLED; -} - -static unsigned int ad7291_threshold_reg(const struct iio_chan_spec *chan, - enum iio_event_direction dir, - enum iio_event_info info) -{ - unsigned int offset; - - switch (chan->type) { - case IIO_VOLTAGE: - offset = chan->channel; - break; - case IIO_TEMP: - offset = AD7291_VOLTAGE_OFFSET; - break; - default: - return 0; - } - - switch (info) { - case IIO_EV_INFO_VALUE: - if (dir == IIO_EV_DIR_FALLING) - return AD7291_DATA_HIGH(offset); - else - return AD7291_DATA_LOW(offset); - case IIO_EV_INFO_HYSTERESIS: - return AD7291_HYST(offset); - default: - break; - } - return 0; -} - -static int ad7291_read_event_value(struct iio_dev *indio_dev, - const struct iio_chan_spec *chan, - enum iio_event_type type, - enum iio_event_direction dir, - enum iio_event_info info, - int *val, int *val2) -{ - struct ad7291_chip_info *chip = iio_priv(indio_dev); - int ret; - u16 uval; - - ret = ad7291_i2c_read(chip, ad7291_threshold_reg(chan, dir, info), - &uval); - if (ret < 0) - return ret; - - if (info == IIO_EV_INFO_HYSTERESIS || chan->type == IIO_VOLTAGE) - *val = uval & AD7291_VALUE_MASK; - - else - *val = sign_extend32(uval, 11); - - return IIO_VAL_INT; -} - -static int ad7291_write_event_value(struct iio_dev *indio_dev, - const struct iio_chan_spec *chan, - enum iio_event_type type, - enum iio_event_direction dir, - enum iio_event_info info, - int val, int val2) -{ - struct ad7291_chip_info *chip = iio_priv(indio_dev); - - if (info == IIO_EV_INFO_HYSTERESIS || chan->type == IIO_VOLTAGE) { - if (val > AD7291_VALUE_MASK || val < 0) - return -EINVAL; - } else { - if (val > 2047 || val < -2048) - return -EINVAL; - } - - return ad7291_i2c_write(chip, ad7291_threshold_reg(chan, dir, info), - val); -} - -static int ad7291_read_event_config(struct iio_dev *indio_dev, - const struct iio_chan_spec *chan, - enum iio_event_type type, - enum iio_event_direction dir) -{ - struct ad7291_chip_info *chip = iio_priv(indio_dev); - /* - * To be enabled the channel must simply be on. If any are enabled - * we are in continuous sampling mode - */ - - switch (chan->type) { - case IIO_VOLTAGE: - return !!(chip->c_mask & BIT(15 - chan->channel)); - case IIO_TEMP: - /* always on */ - return 1; - default: - return -EINVAL; - } - -} - -static int ad7291_write_event_config(struct iio_dev *indio_dev, - const struct iio_chan_spec *chan, - enum iio_event_type type, - enum iio_event_direction dir, - int state) -{ - int ret = 0; - struct ad7291_chip_info *chip = iio_priv(indio_dev); - unsigned int mask; - u16 regval; - - mutex_lock(&chip->state_lock); - regval = chip->command; - /* - * To be enabled the channel must simply be on. If any are enabled - * use continuous sampling mode. - * Possible to disable temp as well but that makes single read tricky. - */ - - mask = BIT(15 - chan->channel); - - switch (chan->type) { - case IIO_VOLTAGE: - if ((!state) && (chip->c_mask & mask)) - chip->c_mask &= ~mask; - else if (state && (!(chip->c_mask & mask))) - chip->c_mask |= mask; - else - break; - - regval &= ~AD7291_AUTOCYCLE; - regval |= chip->c_mask; - if (chip->c_mask) /* Enable autocycle? */ - regval |= AD7291_AUTOCYCLE; - - ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval); - if (ret < 0) - goto error_ret; - - chip->command = regval; - break; - default: - ret = -EINVAL; - } - -error_ret: - mutex_unlock(&chip->state_lock); - return ret; -} - -static int ad7291_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, - int *val2, - long mask) -{ - int ret; - struct ad7291_chip_info *chip = iio_priv(indio_dev); - u16 regval; - - switch (mask) { - case IIO_CHAN_INFO_RAW: - switch (chan->type) { - case IIO_VOLTAGE: - mutex_lock(&chip->state_lock); - /* If in autocycle mode drop through */ - if (chip->command & AD7291_AUTOCYCLE) { - mutex_unlock(&chip->state_lock); - return -EBUSY; - } - /* Enable this channel alone */ - regval = chip->command & (~AD7291_VOLTAGE_MASK); - regval |= BIT(15 - chan->channel); - ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval); - if (ret < 0) { - mutex_unlock(&chip->state_lock); - return ret; - } - /* Read voltage */ - ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_VOLTAGE); - if (ret < 0) { - mutex_unlock(&chip->state_lock); - return ret; - } - *val = ret & AD7291_VALUE_MASK; - mutex_unlock(&chip->state_lock); - return IIO_VAL_INT; - case IIO_TEMP: - /* Assumes tsense bit of command register always set */ - ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_T_SENSE); - if (ret < 0) - return ret; - *val = sign_extend32(ret, 11); - return IIO_VAL_INT; - default: - return -EINVAL; - } - case IIO_CHAN_INFO_AVERAGE_RAW: - ret = i2c_smbus_read_word_swapped(chip->client, - AD7291_T_AVERAGE); - if (ret < 0) - return ret; - *val = sign_extend32(ret, 11); - return IIO_VAL_INT; - case IIO_CHAN_INFO_SCALE: - switch (chan->type) { - case IIO_VOLTAGE: - if (chip->reg) { - int vref; - vref = regulator_get_voltage(chip->reg); - if (vref < 0) - return vref; - *val = vref / 1000; - } else { - *val = 2500; - } - *val2 = AD7291_BITS; - return IIO_VAL_FRACTIONAL_LOG2; - case IIO_TEMP: - /* - * One LSB of the ADC corresponds to 0.25 deg C. - * The temperature reading is in 12-bit twos - * complement format - */ - *val = 250; - return IIO_VAL_INT; - default: - return -EINVAL; - } - default: - return -EINVAL; - } -} - -static const struct iio_event_spec ad7291_events[] = { - { - .type = IIO_EV_TYPE_THRESH, - .dir = IIO_EV_DIR_RISING, - .mask_separate = BIT(IIO_EV_INFO_VALUE) | - BIT(IIO_EV_INFO_ENABLE), - }, { - .type = IIO_EV_TYPE_THRESH, - .dir = IIO_EV_DIR_FALLING, - .mask_separate = BIT(IIO_EV_INFO_VALUE) | - BIT(IIO_EV_INFO_ENABLE), - }, { - .type = IIO_EV_TYPE_THRESH, - .dir = IIO_EV_DIR_EITHER, - .mask_separate = BIT(IIO_EV_INFO_HYSTERESIS), - }, -}; - -#define AD7291_VOLTAGE_CHAN(_chan) \ -{ \ - .type = IIO_VOLTAGE, \ - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ - .indexed = 1, \ - .channel = _chan, \ - .event_spec = ad7291_events, \ - .num_event_specs = ARRAY_SIZE(ad7291_events), \ -} - -static const struct iio_chan_spec ad7291_channels[] = { - AD7291_VOLTAGE_CHAN(0), - AD7291_VOLTAGE_CHAN(1), - AD7291_VOLTAGE_CHAN(2), - AD7291_VOLTAGE_CHAN(3), - AD7291_VOLTAGE_CHAN(4), - AD7291_VOLTAGE_CHAN(5), - AD7291_VOLTAGE_CHAN(6), - AD7291_VOLTAGE_CHAN(7), - { - .type = IIO_TEMP, - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | - BIT(IIO_CHAN_INFO_AVERAGE_RAW) | - BIT(IIO_CHAN_INFO_SCALE), - .indexed = 1, - .channel = 0, - .event_spec = ad7291_events, - .num_event_specs = ARRAY_SIZE(ad7291_events), - } -}; - -static const struct iio_info ad7291_info = { - .read_raw = &ad7291_read_raw, - .read_event_config = &ad7291_read_event_config, - .write_event_config = &ad7291_write_event_config, - .read_event_value = &ad7291_read_event_value, - .write_event_value = &ad7291_write_event_value, - .driver_module = THIS_MODULE, -}; - -static int ad7291_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct ad7291_platform_data *pdata = client->dev.platform_data; - struct ad7291_chip_info *chip; - struct iio_dev *indio_dev; - int ret = 0; - - indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); - if (!indio_dev) - return -ENOMEM; - chip = iio_priv(indio_dev); - - if (pdata && pdata->use_external_ref) { - chip->reg = devm_regulator_get(&client->dev, "vref"); - if (IS_ERR(chip->reg)) - return ret; - - ret = regulator_enable(chip->reg); - if (ret) - return ret; - } - - mutex_init(&chip->state_lock); - /* this is only used for device removal purposes */ - i2c_set_clientdata(client, indio_dev); - - chip->client = client; - - chip->command = AD7291_NOISE_DELAY | - AD7291_T_SENSE_MASK | /* Tsense always enabled */ - AD7291_ALERT_POLARITY; /* set irq polarity low level */ - - if (pdata && pdata->use_external_ref) - chip->command |= AD7291_EXT_REF; - - indio_dev->name = id->name; - indio_dev->channels = ad7291_channels; - indio_dev->num_channels = ARRAY_SIZE(ad7291_channels); - - indio_dev->dev.parent = &client->dev; - indio_dev->info = &ad7291_info; - indio_dev->modes = INDIO_DIRECT_MODE; - - ret = ad7291_i2c_write(chip, AD7291_COMMAND, AD7291_RESET); - if (ret) { - ret = -EIO; - goto error_disable_reg; - } - - ret = ad7291_i2c_write(chip, AD7291_COMMAND, chip->command); - if (ret) { - ret = -EIO; - goto error_disable_reg; - } - - if (client->irq > 0) { - ret = request_threaded_irq(client->irq, - NULL, - &ad7291_event_handler, - IRQF_TRIGGER_LOW | IRQF_ONESHOT, - id->name, - indio_dev); - if (ret) - goto error_disable_reg; - } - - ret = iio_device_register(indio_dev); - if (ret) - goto error_unreg_irq; - - return 0; - -error_unreg_irq: - if (client->irq) - free_irq(client->irq, indio_dev); -error_disable_reg: - if (chip->reg) - regulator_disable(chip->reg); - - return ret; -} - -static int ad7291_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(client); - struct ad7291_chip_info *chip = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - - if (client->irq) - free_irq(client->irq, indio_dev); - - if (chip->reg) - regulator_disable(chip->reg); - - return 0; -} - -static const struct i2c_device_id ad7291_id[] = { - { "ad7291", 0 }, - {} -}; - -MODULE_DEVICE_TABLE(i2c, ad7291_id); - -static struct i2c_driver ad7291_driver = { - .driver = { - .name = KBUILD_MODNAME, - }, - .probe = ad7291_probe, - .remove = ad7291_remove, - .id_table = ad7291_id, -}; -module_i2c_driver(ad7291_driver); - -MODULE_AUTHOR("Sonic Zhang "); -MODULE_DESCRIPTION("Analog Devices AD7291 ADC driver"); -MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/adc/ad7291.h b/drivers/staging/iio/adc/ad7291.h deleted file mode 100644 index bbd89fa51188..000000000000 --- a/drivers/staging/iio/adc/ad7291.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __IIO_AD7291_H__ -#define __IIO_AD7291_H__ - -/** - * struct ad7291_platform_data - AD7291 platform data - * @use_external_ref: Whether to use an external or internal reference voltage - */ -struct ad7291_platform_data { - bool use_external_ref; -}; - -#endif -- cgit From 55afa336f97f5790fccc0434f778f6845e1913cd Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Mon, 30 Jun 2014 08:06:33 -0500 Subject: Staging:unisys: Add Kconfig dependency on UNISYS_VISORUTIL to UNISYS_CHANNELSTUB The visorchannelstub module references the variable unisys_spar_platform which is declared in the visorutil module. Add the proper dependency to Kconfig to ensure that visorutil is enabled when building visorchannelstub. This address the build error: drivers/built-in.o: In function `channel_mod_init': chanstub.c:(.init.text+0xbe24): undefined reference to `unisys_spar_platform' Reported by: kbuild test robot Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/channels/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/channels/Kconfig b/drivers/staging/unisys/channels/Kconfig index 47a235385567..179c6cea2824 100644 --- a/drivers/staging/unisys/channels/Kconfig +++ b/drivers/staging/unisys/channels/Kconfig @@ -4,7 +4,7 @@ config UNISYS_CHANNELSTUB tristate "Unisys channelstub driver" - depends on UNISYSSPAR + depends on UNISYSSPAR && UNISYS_VISORUTIL ---help--- If you say Y here, you will enable the Unisys channels driver. -- cgit From 960e0a5fbbd748ab1333cee716c92d91d28e287f Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 3 Jul 2014 10:02:15 -0500 Subject: Staging: unisys: use Linux coding convention for function names Change function names to conform to Linux kernel coding convention. ULTRA_VBUS_init_channel() --> ultra_vbus_init_channel() VBUSCHANNEL_devInfoToStringBuffer() --> vbuschannel_devinfo_to_string() VBUSCHANNEL_sanitize_buffer() --> vbuschannel_sanitize_buffer() VBUSCHANNEL_itoa() --> vbuschannel_itoa() Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- .../common-spar/include/channels/vbuschannel.h | 4 ++-- .../unisys/common-spar/include/vbusdeviceinfo.h | 28 +++++++++++----------- drivers/staging/unisys/uislib/uislib.c | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h index 0dd3e2dd0e1d..000182cdb42a 100644 --- a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h @@ -94,8 +94,8 @@ typedef struct _ULTRA_VBUS_CHANNEL_PROTOCOL { sizeof(ULTRA_VBUS_DEVICEINFO))) #define VBUS_CH_SIZE(MAXDEVICES) COVER(VBUS_CH_SIZE_EXACT(MAXDEVICES), 4096) -static INLINE void -ULTRA_VBUS_init_channel(ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *x, +static inline void +ultra_vbus_init_channel(ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *x, int bytesAllocated) { /* Please note that the memory at does NOT necessarily have space diff --git a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h index 8c0259a2cbce..71648680c5ff 100644 --- a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h +++ b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h @@ -50,7 +50,7 @@ typedef struct _ULTRA_VBUS_DEVICEINFO { * to a buffer at

, had it been infinitely big. */ static inline int -VBUSCHANNEL_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax) +vbuschannel_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax) { int chars = 0; int nonprintable_streak = 0; @@ -99,7 +99,7 @@ VBUSCHANNEL_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax) * an environment-independent way (since we are in a common header file). */ static inline int -VBUSCHANNEL_itoa(char *p, int remain, int num) +vbuschannel_itoa(char *p, int remain, int num) { int digits = 0; char s[32]; @@ -146,22 +146,22 @@ VBUSCHANNEL_itoa(char *p, int remain, int num) * Returns the number of bytes written to

. */ static inline int -VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO __iomem *devInfo, +vbuschannel_devinfo_to_string(ULTRA_VBUS_DEVICEINFO __iomem *devinfo, char *p, int remain, int devix) { char __iomem *psrc; int nsrc, x, i, pad; int chars = 0; - psrc = &(devInfo->devType[0]); - nsrc = sizeof(devInfo->devType); - if (VBUSCHANNEL_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0) + psrc = &(devinfo->devType[0]); + nsrc = sizeof(devinfo->devType); + if (vbuschannel_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0) return 0; /* emit device index */ if (devix >= 0) { VBUSCHANNEL_ADDACHAR('[', p, remain, chars); - x = VBUSCHANNEL_itoa(p, remain, devix); + x = vbuschannel_itoa(p, remain, devix); p += x; remain -= x; chars += x; @@ -173,7 +173,7 @@ VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO __iomem *devInfo, } /* emit device type */ - x = VBUSCHANNEL_sanitize_buffer(p, remain, psrc, nsrc); + x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); p += x; remain -= x; chars += x; @@ -183,9 +183,9 @@ VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO __iomem *devInfo, VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); /* emit driver name */ - psrc = &(devInfo->drvName[0]); - nsrc = sizeof(devInfo->drvName); - x = VBUSCHANNEL_sanitize_buffer(p, remain, psrc, nsrc); + psrc = &(devinfo->drvName[0]); + nsrc = sizeof(devinfo->drvName); + x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); p += x; remain -= x; chars += x; @@ -195,9 +195,9 @@ VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO __iomem *devInfo, VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); /* emit strings */ - psrc = &(devInfo->infoStrings[0]); - nsrc = sizeof(devInfo->infoStrings); - x = VBUSCHANNEL_sanitize_buffer(p, remain, psrc, nsrc); + psrc = &(devinfo->infoStrings[0]); + nsrc = sizeof(devinfo->infoStrings); + x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); p += x; remain -= x; chars += x; diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index d4a7ef821bae..70cc00f1ec7f 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -148,7 +148,7 @@ init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer) rc = NULL; goto Away; } - ULTRA_VBUS_init_channel(pChan, channelBytes); + ultra_vbus_init_channel(pChan, channelBytes); } else { if (!ULTRA_VBUS_CHANNEL_OK_CLIENT(pChan, NULL)) { ERRDRV("%s channel cannot be used", __func__); -- cgit From 548950a26123d917346ba1284a21e6de0ee136b3 Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 3 Jul 2014 10:02:16 -0500 Subject: Staging: unisys: Remove isServer arg from init_vbus_channel() The init_vbus_channel() function is never called with the isServer argument equal to TRUE, so just get rid of the argument altogether. This also means that the code in the function that would be executed in the server case can be removed since it is never executed. Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/uislib/uislib.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index 70cc00f1ec7f..5c7bffca005b 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -129,7 +129,7 @@ init_msg_header(CONTROLVM_MESSAGE *msg, U32 id, uint rsp, uint svr) } static __iomem void * -init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer) +init_vbus_channel(U64 channelAddr, U32 channelBytes) { void __iomem *rc = NULL; void __iomem *pChan = uislib_ioremap_cache(channelAddr, channelBytes); @@ -140,22 +140,11 @@ init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer) rc = NULL; goto Away; } - if (isServer) { - memset_io(pChan, 0, channelBytes); - if (!ULTRA_VBUS_CHANNEL_OK_SERVER(channelBytes, NULL)) { - ERRDRV("%s channel cannot be used", __func__); - uislib_iounmap(pChan); - rc = NULL; - goto Away; - } - ultra_vbus_init_channel(pChan, channelBytes); - } else { - if (!ULTRA_VBUS_CHANNEL_OK_CLIENT(pChan, NULL)) { - ERRDRV("%s channel cannot be used", __func__); - uislib_iounmap(pChan); - rc = NULL; - goto Away; - } + if (!ULTRA_VBUS_CHANNEL_OK_CLIENT(pChan, NULL)) { + ERRDRV("%s channel cannot be used", __func__); + uislib_iounmap(pChan); + rc = NULL; + goto Away; } rc = pChan; Away: @@ -235,8 +224,7 @@ create_bus(CONTROLVM_MESSAGE *msg, char *buf) bus->busChannelBytes = msg->cmd.createBus.channelBytes; bus->pBusChannel = init_vbus_channel(msg->cmd.createBus.channelAddr, - msg->cmd.createBus.channelBytes, - msg->hdr.Flags.server); + msg->cmd.createBus.channelBytes); } /* the msg is bound for virtpci; send guest_msgs struct to callback */ if (!msg->hdr.Flags.server) { -- cgit From b7801a2e6bf4013ab9eefa5ed11e94246cdf86bb Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 3 Jul 2014 10:02:17 -0500 Subject: Staging: unisys: Remove ultra_vbus_init_channel function The function ultra_vbus_init_channel() is never called since previous server code was removed. Remove the dead code. Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- .../common-spar/include/channels/vbuschannel.h | 36 ---------------------- 1 file changed, 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h index 000182cdb42a..69de9d944fd3 100644 --- a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h @@ -94,42 +94,6 @@ typedef struct _ULTRA_VBUS_CHANNEL_PROTOCOL { sizeof(ULTRA_VBUS_DEVICEINFO))) #define VBUS_CH_SIZE(MAXDEVICES) COVER(VBUS_CH_SIZE_EXACT(MAXDEVICES), 4096) -static inline void -ultra_vbus_init_channel(ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *x, - int bytesAllocated) -{ - /* Please note that the memory at does NOT necessarily have space - * for DevInfo structs allocated at the end, which is why we do NOT use - * to clear. */ - memset_io(x, 0, sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL)); - if (bytesAllocated < (int) sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL)) - return; - writel(ULTRA_VBUS_CHANNEL_PROTOCOL_VERSIONID, - &x->ChannelHeader.VersionId); - writeq(ULTRA_VBUS_CHANNEL_PROTOCOL_SIGNATURE, - &x->ChannelHeader.Signature); - writel(CHANNELSRV_READY, &x->ChannelHeader.SrvState); - writel(sizeof(x->ChannelHeader), &x->ChannelHeader.HeaderSize); - writeq(bytesAllocated, &x->ChannelHeader.Size); - memcpy_toio(&x->ChannelHeader.Type, &UltraVbusChannelProtocolGuid, - sizeof(x->ChannelHeader.Type)); - memcpy_toio(&x->ChannelHeader.ZoneGuid, &NULL_UUID_LE, sizeof(uuid_le)); - writel(sizeof(ULTRA_VBUS_HEADERINFO), &x->HdrInfo.structBytes); - writel(sizeof(ULTRA_VBUS_HEADERINFO), &x->HdrInfo.chpInfoByteOffset); - writel(readl(&x->HdrInfo.chpInfoByteOffset) + - sizeof(ULTRA_VBUS_DEVICEINFO), - &x->HdrInfo.busInfoByteOffset); - writel(readl(&x->HdrInfo.busInfoByteOffset) - + sizeof(ULTRA_VBUS_DEVICEINFO), - &x->HdrInfo.devInfoByteOffset); - writel(sizeof(ULTRA_VBUS_DEVICEINFO), - &x->HdrInfo.deviceInfoStructBytes); - bytesAllocated -= (sizeof(ULTRA_CHANNEL_PROTOCOL) - + readl(&x->HdrInfo.devInfoByteOffset)); - writel(bytesAllocated / readl(&x->HdrInfo.deviceInfoStructBytes), - &x->HdrInfo.devInfoCount); -} - #pragma pack(pop) #endif -- cgit From e4c293c9a343929bb2c7d1717c8e60a43231dd64 Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 3 Jul 2014 10:02:18 -0500 Subject: Staging: unisys: Fix noderef sparse warnings in vbusdeviceinfo.h vbuschannel_devinfo_to_string() was declared with the devinfo argument as a pointer to __iomem space. No callers of this function need the __iomem space, so I removed that constraint. Same thing goes for vbuschannel_sanitize_buffer(). It doesn't need to operate on I/O space. Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h index 71648680c5ff..45e311cdf8de 100644 --- a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h +++ b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h @@ -50,12 +50,12 @@ typedef struct _ULTRA_VBUS_DEVICEINFO { * to a buffer at

, had it been infinitely big. */ static inline int -vbuschannel_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax) +vbuschannel_sanitize_buffer(char *p, int remain, char *src, int srcmax) { int chars = 0; int nonprintable_streak = 0; while (srcmax > 0) { - if ((readb(src) >= ' ') && (readb(src) < 0x7f)) { + if ((*src >= ' ') && (*src < 0x7f)) { if (nonprintable_streak) { if (remain > 0) { *p = ' '; @@ -67,7 +67,7 @@ vbuschannel_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax) nonprintable_streak = 0; } if (remain > 0) { - *p = readb(src); + *p = *src; p++; remain--; chars++; @@ -146,10 +146,10 @@ vbuschannel_itoa(char *p, int remain, int num) * Returns the number of bytes written to

. */ static inline int -vbuschannel_devinfo_to_string(ULTRA_VBUS_DEVICEINFO __iomem *devinfo, +vbuschannel_devinfo_to_string(ULTRA_VBUS_DEVICEINFO *devinfo, char *p, int remain, int devix) { - char __iomem *psrc; + char *psrc; int nsrc, x, i, pad; int chars = 0; -- cgit From 5b796fe8fc8d534747151d8b8bbc8e2547ce68cd Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Tue, 8 Jul 2014 13:21:30 -0400 Subject: staging: unisys: remove all proc entries from virtpci This patch removes all proc entries from virtpci Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virtpci/virtpci.c | 309 +------------------------------ 1 file changed, 1 insertion(+), 308 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virtpci/virtpci.c b/drivers/staging/unisys/virtpci/virtpci.c index 5ab17e76c804..7d840b0618eb 100644 --- a/drivers/staging/unisys/virtpci/virtpci.c +++ b/drivers/staging/unisys/virtpci/virtpci.c @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include "version.h" @@ -100,18 +99,7 @@ static int virtpci_device_suspend(struct device *dev, pm_message_t state); static int virtpci_device_resume(struct device *dev); static int virtpci_device_probe(struct device *dev); static int virtpci_device_remove(struct device *dev); -static ssize_t virt_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos); -static ssize_t info_proc_read(struct file *file, char __user *buf, - size_t len, loff_t *offset); -static const struct file_operations proc_virt_fops = { - .write = virt_proc_write, -}; - -static const struct file_operations proc_info_fops = { - .read = info_proc_read, -}; /*****************************************************/ /* Globals */ @@ -152,19 +140,6 @@ static DEFINE_RWLOCK(VpcidevListLock); /* filled in with info about this driver, wrt it servicing client busses */ static ULTRA_VBUS_DEVICEINFO Bus_DriverInfo; -/* virtpci_proc_dir_entry is used to create the proc entry directory - * for virtpci - */ -static struct proc_dir_entry *virtpci_proc_dir; -/* virt_proc_entry is used to tell virtpci to add/delete vhbas/vnics/vbuses */ -static struct proc_dir_entry *virt_proc_entry; -/* info_proc_entry is used to tell virtpci to display current info - * kept in the driver - */ -static struct proc_dir_entry *info_proc_entry; -#define VIRT_PROC_ENTRY_FN "virt" -#define INFO_PROC_ENTRY_FN "info" -#define DIR_PROC_ENTRY "virtpci" struct virtpci_busdev { struct device virtpci_bus_device; @@ -1401,274 +1376,6 @@ void virtpci_unregister_driver(struct virtpci_driver *drv) } EXPORT_SYMBOL_GPL(virtpci_unregister_driver); -/*****************************************************/ -/* proc filesystem functions */ -/*****************************************************/ -struct print_vbus_info { - int *length; - char *buf; -}; - -static int print_vbus(struct device *vbus, void *data) -{ - struct print_vbus_info *p = (struct print_vbus_info *) data; - int l = *(p->length); - - *(p->length) = l + sprintf(p->buf + l, "bus_id:%s\n", dev_name(vbus)); - return 0; /* no error */ -} - -static ssize_t info_proc_read(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - int length = 0; - struct virtpci_dev *tmpvpcidev; - unsigned long flags; - struct print_vbus_info printparam; - char *vbuf; - loff_t pos = *offset; - - if (pos < 0) - return -EINVAL; - - if (pos > 0 || !len) - return 0; - - vbuf = kzalloc(len, GFP_KERNEL); - if (!vbuf) - return -ENOMEM; - - length += sprintf(vbuf + length, "CHANSOCK is not defined.\n"); - - length += sprintf(vbuf + length, "\n Virtual PCI Bus devices\n"); - printparam.length = &length; - printparam.buf = vbuf; - if (bus_for_each_dev(&virtpci_bus_type, NULL, - (void *) &printparam, print_vbus)) - LOGERR("delete of all vbus failed\n"); - - length += sprintf(vbuf + length, "\n Virtual PCI devices\n"); - read_lock_irqsave(&VpcidevListLock, flags); - tmpvpcidev = VpcidevListHead; - while (tmpvpcidev) { - if (tmpvpcidev->devtype == VIRTHBA_TYPE) { - length += sprintf(vbuf + length, "[%d:%d] VHba:%08x:%08x max-config:%d-%d-%d-%d", - tmpvpcidev->busNo, tmpvpcidev->deviceNo, - tmpvpcidev->scsi.wwnn.wwnn1, - tmpvpcidev->scsi.wwnn.wwnn2, - tmpvpcidev->scsi.max.max_channel, - tmpvpcidev->scsi.max.max_id, - tmpvpcidev->scsi.max.max_lun, - tmpvpcidev->scsi.max.cmd_per_lun); - } else { - length += sprintf(vbuf + length, "[%d:%d] VNic:%02x:%02x:%02x:%02x:%02x:%02x num_rcv_bufs:%d mtu:%d", - tmpvpcidev->busNo, tmpvpcidev->deviceNo, - tmpvpcidev->net.mac_addr[0], - tmpvpcidev->net.mac_addr[1], - tmpvpcidev->net.mac_addr[2], - tmpvpcidev->net.mac_addr[3], - tmpvpcidev->net.mac_addr[4], - tmpvpcidev->net.mac_addr[5], - tmpvpcidev->net.num_rcv_bufs, - tmpvpcidev->net.mtu); - } - length += - sprintf(vbuf + length, " chanptr:%p\n", - tmpvpcidev->queueinfo.chan); - tmpvpcidev = tmpvpcidev->next; - } - read_unlock_irqrestore(&VpcidevListLock, flags); - - length += sprintf(vbuf + length, "\n"); - if (copy_to_user(buf, vbuf, length)) { - kfree(vbuf); - return -EFAULT; - } - - kfree(vbuf); - *offset += length; - return length; -} - -static ssize_t virt_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char buf[16]; - int type, i, action = 0xffff; - unsigned int busno, deviceno; - void __iomem *chanptr; - struct add_vbus_guestpart busaddparams; - struct add_virt_guestpart addparams; - struct del_vbus_guestpart busdelparams; - struct del_virt_guestpart delparams; -#ifdef STORAGE_CHANNEL - U64 storagechannel; -#endif - -#define PRINT_USAGE_RETURN {\ - LOGERR("usage: 0-0- ==> delete vhba\n"); \ - LOGERR("usage: 0-1--- ==> add vhba\n"); \ - LOGERR("usage: 0-f- ==> delete all vhbas\n"); \ - LOGERR("\n"); \ - LOGERR("usage: 1-0- ==> delete vnic\n"); \ - LOGERR("usage: 1-1--- ==> add vnic\n"); \ - LOGERR("usage: 1-f- ==> delete all vnics\n"); \ - LOGERR("\n"); \ - LOGERR("usage: 6-0- ==> delete vbus\n"); \ - LOGERR("usage: 6-1- ==> add vbus\n"); \ - LOGERR("usage: 6-f ==> delete all vbuses\n"); \ - LOGERR("usage: 98-- ==> INJECT Client delete vnic\n"); \ - LOGERR("usage: 99--- ==> INJECT Client add vnic\n"); \ - return -EINVAL; \ -} - - if (count >= ARRAY_SIZE(buf)) - return -EINVAL; - - if (copy_from_user(buf, buffer, count)) { - LOGERR("copy_from_user failed.\n"); - return -EFAULT; - } - - i = sscanf(buf, "%x-%x", &type, &action); - if (i < 2) - PRINT_USAGE_RETURN; - - if (type == 0x98) { - /* client inject delete vnic */ - i = sscanf(buf, "%x-%d-%d", &type, &busno, &deviceno); - if (i != 3) - PRINT_USAGE_RETURN; - uislib_client_inject_del_vnic(busno, deviceno); - return count; /* success */ - } else if (type == 0x99) { - /* client inject add vnic */ - i = sscanf(buf, "%x-%p-%d-%d", &type, &chanptr, &busno, - &deviceno); - if (i != 4) - PRINT_USAGE_RETURN; - if (!uislib_client_inject_add_vnic(busno, deviceno, - __pa(chanptr), - MIN_IO_CHANNEL_SIZE, - 1, /* test msg */ - NULL_UUID_LE, /* inst guid */ - NULL)) { /*interrupt info */ - LOGERR("FAILED to inject add vnic\n"); - return -EFAULT; - } - return count; /* success */ - } - - if ((type != VIRTHBA_TYPE) && (type != VIRTNIC_TYPE) - && (type != VIRTBUS_TYPE)) - PRINT_USAGE_RETURN; - - if (type == VIRTBUS_TYPE) { - i = sscanf(buf, "%x-%x-%d", &type, &action, &busno); - switch (action) { - case 0: - /* delete vbus */ - if (i != 3) - break; - busdelparams.busNo = busno; - if (delete_vbus(&busdelparams)) - return count; /* success */ - return -EFAULT; - - case 1: - /* add vbus */ - if (i != 3) - break; - busaddparams.chanptr = NULL; /* NOT YET USED */ - busaddparams.busNo = busno; - if (add_vbus(&busaddparams)) - return count; /* success */ - return -EFAULT; - - case 0xf: - /* delete all vbuses and all vhbas/vnics on the buses */ - if (i != 2) - break; - delete_all(); - return count; /* success */ - default: - break; - } - PRINT_USAGE_RETURN; - } - - /* if (type == VIRTNIC_TYPE) or if (type == VIRTHBA_TYPE) */ - switch (action) { - case 0: - /* delete vhba/vnic */ - i = sscanf(buf, "%x-%x-%p", &type, &action, &chanptr); - if (i != 3) - break; - delparams.chanptr = chanptr; - if (type == VIRTHBA_TYPE) { - if (delete_vhba(&delparams)) - return count; /* success */ - } else { - if (delete_vnic(&delparams)) - return count; /* success */ - } - return -EFAULT; - - case 1: - /* add vhba/vnic */ - i = sscanf(buf, "%x-%x-%p-%d-%d", &type, &action, &chanptr, - &busno, &deviceno); - if (i != 5) - break; - addparams.chanptr = chanptr; - addparams.busNo = busno; - addparams.deviceNo = deviceno; - if (type == VIRTHBA_TYPE) { - if (add_vhba(&addparams)) - return count; /* success */ - } else { - if (add_vnic(&addparams)) - return count; /* success */ - } - return -EFAULT; - -#ifdef STORAGE_CHANNEL - case 2: - /* add vhba */ - i = sscanf(buf, "%x-%x-%d-%d", &type, &action, &busno, - &deviceno); - if (i != 4) - break; - storagechannel = uislib_storage_channel(0); /* Get my storage channel */ - /* ioremap_cache it now */ - addparams.chanptr = - (void *) ioremap_cache(storagechannel, IO_CHANNEL_SIZE); - if (addparams.chanptr == NULL) { - LOGERR("Failure to get remap storage channel.\n"); - return -EFAULT; - } - addparams.busNo = busno; - addparams.deviceNo = deviceno; - if (type == VIRTHBA_TYPE) { - if (add_vhba(&addparams)) - return count; /* success */ - } - return -EFAULT; -#endif - case 0xf: - /* delete all vhbas/vnics */ - i = sscanf(buf, "%x-%x-%d", &type, &action, &busno); - if (i != 3) - break; - busdelparams.busNo = busno; - delete_all_virt(type, &busdelparams); - return count; /* success */ - default: - break; - } - PRINT_USAGE_RETURN; -} - /*****************************************************/ /* Module Init & Exit functions */ /*****************************************************/ @@ -1719,12 +1426,7 @@ static int __init virtpci_mod_init(void) LOGINF("successfully registered virtpci_ctrlchan_func (0x%p) as callback.\n", (void *) &virtpci_ctrlchan_func); - /* create the proc directories */ - virtpci_proc_dir = proc_mkdir(DIR_PROC_ENTRY, NULL); - virt_proc_entry = proc_create(VIRT_PROC_ENTRY_FN, 0, virtpci_proc_dir, - &proc_virt_fops); - info_proc_entry = proc_create(INFO_PROC_ENTRY_FN, 0, virtpci_proc_dir, - &proc_info_fops); + LOGINF("Leaving\n"); POSTCODE_LINUX_2(VPCI_CREATE_EXIT_PC, POSTCODE_SEVERITY_INFO); return 0; @@ -1741,15 +1443,6 @@ static void __exit virtpci_mod_exit(void) device_unregister(&virtpci_rootbus_device); bus_unregister(&virtpci_bus_type); - if (virt_proc_entry) - remove_proc_entry(VIRT_PROC_ENTRY_FN, virtpci_proc_dir); - - if (info_proc_entry) - remove_proc_entry(INFO_PROC_ENTRY_FN, virtpci_proc_dir); - - if (virtpci_proc_dir) - remove_proc_entry(DIR_PROC_ENTRY, NULL); - LOGINF("Leaving\n"); } -- cgit From ddac7d5fba555967654bf47b7b458b050391dc1f Mon Sep 17 00:00:00 2001 From: Vinayak Menon Date: Mon, 2 Jun 2014 18:17:59 +0530 Subject: staging: binder: add vm_fault handler An issue was observed when a userspace task exits. The page which hits error here is the zero page. In binder mmap, the whole of vma is not mapped. On a task crash, when debuggerd reads the binder regions, the unmapped areas fall to do_anonymous_page in handle_pte_fault, due to the absence of a vm_fault handler. This results in zero page being mapped. Later in zap_pte_range, vm_normal_page returns zero page in the case of VM_MIXEDMAP and it results in the error. BUG: Bad page map in process mediaserver pte:9dff379f pmd:9bfbd831 page:c0ed8e60 count:1 mapcount:-1 mapping: (null) index:0x0 page flags: 0x404(referenced|reserved) addr:40c3f000 vm_flags:10220051 anon_vma: (null) mapping:d9fe0764 index:fd vma->vm_ops->fault: (null) vma->vm_file->f_op->mmap: binder_mmap+0x0/0x274 CPU: 0 PID: 1463 Comm: mediaserver Tainted: G W 3.10.17+ #1 [] (unwind_backtrace+0x0/0x11c) from [] (show_stack+0x10/0x14) [] (show_stack+0x10/0x14) from [] (print_bad_pte+0x158/0x190) [] (print_bad_pte+0x158/0x190) from [] (unmap_single_vma+0x2e4/0x598) [] (unmap_single_vma+0x2e4/0x598) from [] (unmap_vmas+0x34/0x50) [] (unmap_vmas+0x34/0x50) from [] (exit_mmap+0xc8/0x1e8) [] (exit_mmap+0xc8/0x1e8) from [] (mmput+0x54/0xd0) [] (mmput+0x54/0xd0) from [] (do_exit+0x360/0x990) [] (do_exit+0x360/0x990) from [] (do_group_exit+0x84/0xc0) [] (do_group_exit+0x84/0xc0) from [] (get_signal_to_deliver+0x4d4/0x548) [] (get_signal_to_deliver+0x4d4/0x548) from [] (do_signal+0xa8/0x3b8) Add a vm_fault handler which returns VM_FAULT_SIGBUS, and prevents the wrong fallback to do_anonymous_page. Signed-off-by: Vinayak Menon Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/binder.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 589cfc81f419..2f38e44ce44b 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -2768,9 +2768,15 @@ static void binder_vma_close(struct vm_area_struct *vma) binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES); } +static int binder_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + return VM_FAULT_SIGBUS; +} + static struct vm_operations_struct binder_vm_ops = { .open = binder_vma_open, .close = binder_vma_close, + .fault = binder_vm_fault, }; static int binder_mmap(struct file *filp, struct vm_area_struct *vma) -- cgit From 78260ac625e91d2402d72dd2f8c7109f98c1d19a Mon Sep 17 00:00:00 2001 From: Tair Rzayev Date: Tue, 3 Jun 2014 22:27:21 +0300 Subject: staging: android: binder.c: binder_ioctl() cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit binder_ioctl() is quite huge and checkpatch dirty - mostly because of the amount of code for the BINDER_WRITE_READ and BINDER_SET_CONTEXT_MGR. Moved that code into the new binder_ioctl_write_read() and binder_ioctl_set_ctx_mgr() Signed-off-by: Tair Rzayev Cc: Arve HjønnevÃ¥g Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/binder.c | 186 ++++++++++++++++++++++----------------- 1 file changed, 107 insertions(+), 79 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 2f38e44ce44b..e446f624a04e 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -2593,6 +2593,106 @@ static unsigned int binder_poll(struct file *filp, return 0; } +static int binder_ioctl_write_read(struct file *filp, + unsigned int cmd, unsigned long arg, + struct binder_thread *thread) +{ + int ret = 0; + struct binder_proc *proc = filp->private_data; + unsigned int size = _IOC_SIZE(cmd); + void __user *ubuf = (void __user *)arg; + struct binder_write_read bwr; + + if (size != sizeof(struct binder_write_read)) { + ret = -EINVAL; + goto out; + } + if (copy_from_user(&bwr, ubuf, sizeof(bwr))) { + ret = -EFAULT; + goto out; + } + binder_debug(BINDER_DEBUG_READ_WRITE, + "%d:%d write %lld at %016llx, read %lld at %016llx\n", + proc->pid, thread->pid, + (u64)bwr.write_size, (u64)bwr.write_buffer, + (u64)bwr.read_size, (u64)bwr.read_buffer); + + if (bwr.write_size > 0) { + ret = binder_thread_write(proc, thread, + bwr.write_buffer, + bwr.write_size, + &bwr.write_consumed); + trace_binder_write_done(ret); + if (ret < 0) { + bwr.read_consumed = 0; + if (copy_to_user(ubuf, &bwr, sizeof(bwr))) + ret = -EFAULT; + goto out; + } + } + if (bwr.read_size > 0) { + ret = binder_thread_read(proc, thread, bwr.read_buffer, + bwr.read_size, + &bwr.read_consumed, + filp->f_flags & O_NONBLOCK); + trace_binder_read_done(ret); + if (!list_empty(&proc->todo)) + wake_up_interruptible(&proc->wait); + if (ret < 0) { + if (copy_to_user(ubuf, &bwr, sizeof(bwr))) + ret = -EFAULT; + goto out; + } + } + binder_debug(BINDER_DEBUG_READ_WRITE, + "%d:%d wrote %lld of %lld, read return %lld of %lld\n", + proc->pid, thread->pid, + (u64)bwr.write_consumed, (u64)bwr.write_size, + (u64)bwr.read_consumed, (u64)bwr.read_size); + if (copy_to_user(ubuf, &bwr, sizeof(bwr))) { + ret = -EFAULT; + goto out; + } +out: + return ret; +} + +static int binder_ioctl_set_ctx_mgr(struct file *filp) +{ + int ret = 0; + struct binder_proc *proc = filp->private_data; + kuid_t curr_euid = current_euid(); + + if (binder_context_mgr_node != NULL) { + pr_err("BINDER_SET_CONTEXT_MGR already set\n"); + ret = -EBUSY; + goto out; + } + if (uid_valid(binder_context_mgr_uid)) { + if (!uid_eq(binder_context_mgr_uid, curr_euid)) { + pr_err("BINDER_SET_CONTEXT_MGR bad uid %d != %d\n", + from_kuid(&init_user_ns, curr_euid), + from_kuid(&init_user_ns, + binder_context_mgr_uid)); + ret = -EPERM; + goto out; + } + } else { + binder_context_mgr_uid = curr_euid; + } + binder_context_mgr_node = binder_new_node(proc, 0, 0); + if (binder_context_mgr_node == NULL) { + ret = -ENOMEM; + goto out; + } + binder_context_mgr_node->local_weak_refs++; + binder_context_mgr_node->local_strong_refs++; + binder_context_mgr_node->has_strong_ref = 1; + binder_context_mgr_node->has_weak_ref = 1; +out: + return ret; +} + static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { int ret; @@ -2600,9 +2700,9 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) struct binder_thread *thread; unsigned int size = _IOC_SIZE(cmd); void __user *ubuf = (void __user *)arg; - kuid_t curr_euid = current_euid(); - /*pr_info("binder_ioctl: %d:%d %x %lx\n", proc->pid, current->pid, cmd, arg);*/ + /*pr_info("binder_ioctl: %d:%d %x %lx\n", + proc->pid, current->pid, cmd, arg);*/ trace_binder_ioctl(cmd, arg); @@ -2618,61 +2718,11 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) } switch (cmd) { - case BINDER_WRITE_READ: { - struct binder_write_read bwr; - - if (size != sizeof(struct binder_write_read)) { - ret = -EINVAL; + case BINDER_WRITE_READ: + ret = binder_ioctl_write_read(filp, cmd, arg, thread); + if (ret) goto err; - } - if (copy_from_user(&bwr, ubuf, sizeof(bwr))) { - ret = -EFAULT; - goto err; - } - binder_debug(BINDER_DEBUG_READ_WRITE, - "%d:%d write %lld at %016llx, read %lld at %016llx\n", - proc->pid, thread->pid, - (u64)bwr.write_size, (u64)bwr.write_buffer, - (u64)bwr.read_size, (u64)bwr.read_buffer); - - if (bwr.write_size > 0) { - ret = binder_thread_write(proc, thread, - bwr.write_buffer, - bwr.write_size, - &bwr.write_consumed); - trace_binder_write_done(ret); - if (ret < 0) { - bwr.read_consumed = 0; - if (copy_to_user(ubuf, &bwr, sizeof(bwr))) - ret = -EFAULT; - goto err; - } - } - if (bwr.read_size > 0) { - ret = binder_thread_read(proc, thread, bwr.read_buffer, - bwr.read_size, - &bwr.read_consumed, - filp->f_flags & O_NONBLOCK); - trace_binder_read_done(ret); - if (!list_empty(&proc->todo)) - wake_up_interruptible(&proc->wait); - if (ret < 0) { - if (copy_to_user(ubuf, &bwr, sizeof(bwr))) - ret = -EFAULT; - goto err; - } - } - binder_debug(BINDER_DEBUG_READ_WRITE, - "%d:%d wrote %lld of %lld, read return %lld of %lld\n", - proc->pid, thread->pid, - (u64)bwr.write_consumed, (u64)bwr.write_size, - (u64)bwr.read_consumed, (u64)bwr.read_size); - if (copy_to_user(ubuf, &bwr, sizeof(bwr))) { - ret = -EFAULT; - goto err; - } break; - } case BINDER_SET_MAX_THREADS: if (copy_from_user(&proc->max_threads, ubuf, sizeof(proc->max_threads))) { ret = -EINVAL; @@ -2680,31 +2730,9 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) } break; case BINDER_SET_CONTEXT_MGR: - if (binder_context_mgr_node != NULL) { - pr_err("BINDER_SET_CONTEXT_MGR already set\n"); - ret = -EBUSY; + ret = binder_ioctl_set_ctx_mgr(filp); + if (ret) goto err; - } - if (uid_valid(binder_context_mgr_uid)) { - if (!uid_eq(binder_context_mgr_uid, curr_euid)) { - pr_err("BINDER_SET_CONTEXT_MGR bad uid %d != %d\n", - from_kuid(&init_user_ns, curr_euid), - from_kuid(&init_user_ns, binder_context_mgr_uid)); - ret = -EPERM; - goto err; - } - } else { - binder_context_mgr_uid = curr_euid; - } - binder_context_mgr_node = binder_new_node(proc, 0, 0); - if (binder_context_mgr_node == NULL) { - ret = -ENOMEM; - goto err; - } - binder_context_mgr_node->local_weak_refs++; - binder_context_mgr_node->local_strong_refs++; - binder_context_mgr_node->has_strong_ref = 1; - binder_context_mgr_node->has_weak_ref = 1; break; case BINDER_THREAD_EXIT: binder_debug(BINDER_DEBUG_THREADS, "%d:%d exit\n", -- cgit From 403f8af323f0b3b1893ef257be5c5a41cd213d55 Mon Sep 17 00:00:00 2001 From: Chen Gang Date: Mon, 7 Jul 2014 16:49:24 +0800 Subject: drivers: staging: android: ion: Kconfig: Let it also depend on HAS_DMA ION need HAS_DMA (e.g. need DMA_SHARED_BUFFER), so it has to depend on HAS_DMA, or can not pass compiling with allmodconfig under score which NO_DMA. And the related error: CC drivers/staging/android/ion/ion_cma_heap.o drivers/staging/android/ion/ion_cma_heap.c: In function 'ion_cma_mmap': drivers/staging/android/ion/ion_cma_heap.c:168:2: error: implicit declaration of function 'dma_mmap_coherent' [-Werror=implicit-function-declaration] return dma_mmap_coherent(dev, vma, info->cpu_addr, info->handle, ^ cc1: some warnings being treated as errors make[4]: *** [drivers/staging/android/ion/ion_cma_heap.o] Error 1 make[3]: *** [drivers/staging/android/ion] Error 2 make[2]: *** [drivers/staging/android] Error 2 make[1]: *** [drivers/staging] Error 2 make: *** [drivers] Error 2 Signed-off-by: Chen Gang Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig index 0f8fec1f84e5..0a6e4d03c78a 100644 --- a/drivers/staging/android/ion/Kconfig +++ b/drivers/staging/android/ion/Kconfig @@ -1,6 +1,6 @@ menuconfig ION bool "Ion Memory Manager" - depends on HAVE_MEMBLOCK + depends on HAVE_MEMBLOCK && HAS_DMA select GENERIC_ALLOCATOR select DMA_SHARED_BUFFER ---help--- -- cgit From 48d5bb4403a0380613267770f9dccb73ab7f98fa Mon Sep 17 00:00:00 2001 From: Jerry Stralko Date: Tue, 1 Jul 2014 07:13:18 -0400 Subject: staging: android: logger: fixed checkpatch.pl warnings. Signed-off-by: Jerry Stralko Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/logger.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/logger.c b/drivers/staging/android/logger.c index 2772e01b37f5..9b47e66599a3 100644 --- a/drivers/staging/android/logger.c +++ b/drivers/staging/android/logger.c @@ -110,8 +110,8 @@ static inline struct logger_log *file_get_log(struct file *file) struct logger_reader *reader = file->private_data; return reader->log; - } else - return file->private_data; + } + return file->private_data; } /* @@ -159,8 +159,7 @@ static size_t get_user_hdr_len(int ver) { if (ver < 2) return sizeof(struct user_logger_entry_compat); - else - return sizeof(struct logger_entry); + return sizeof(struct logger_entry); } static ssize_t copy_header_to_user(int ver, struct logger_entry *entry, -- cgit From c742e339d5ed554cc20f20df56ae90b553405c9c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:14 +0200 Subject: staging: rtl8723au: Clean up rtw_pm_set_ips23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 15 ++++++--------- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 6 ------ 2 files changed, 6 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c index 7dc7c90eba0e..ef29118ddbde 100644 --- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c @@ -615,19 +615,16 @@ int rtw_pm_set_ips23a(struct rtw_adapter *padapter, u8 mode) { struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv; - if (mode == IPS_NORMAL || mode == IPS_LEVEL_2) { - rtw_ips_mode_req(pwrctrlpriv, mode); - DBG_8723A("%s %s\n", __func__, - mode == IPS_NORMAL?"IPS_NORMAL":"IPS_LEVEL_2"); - return 0; - } else if (mode == IPS_NONE) { - rtw_ips_mode_req(pwrctrlpriv, mode); + if (mode != IPS_NORMAL && mode != IPS_LEVEL_2 && mode != IPS_NONE) + return -EINVAL; + + pwrctrlpriv->ips_mode_req = mode; + if (mode == IPS_NONE) { DBG_8723A("%s %s\n", __func__, "IPS_NONE"); if (padapter->bSurpriseRemoved == 0 && rtw_pwr_wakeup(padapter) == _FAIL) return -EFAULT; - } else - return -EINVAL; + } return 0; } diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 577914dc93be..97bb569524cc 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -214,12 +214,6 @@ struct pwrctrl_priv { unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT]; }; -#define rtw_get_ips_mode_req(pwrctrlpriv) \ - ((pwrctrlpriv)->ips_mode_req) - -#define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \ - ((pwrctrlpriv)->ips_mode_req = (ips_mode)) - #define RTW_PWR_STATE_CHK_INTERVAL 2000 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \ -- cgit From 462eb49eae7060081d6e29e93c6defb866580e91 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:15 +0200 Subject: staging: rtl8723au: Fold power_saving_wk_hdl() into rtw_drvextra_cmd_hdl23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_cmd.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c index 35f879eaa665..f44f9415a391 100644 --- a/drivers/staging/rtl8723au/core/rtw_cmd.c +++ b/drivers/staging/rtl8723au/core/rtw_cmd.c @@ -1113,11 +1113,6 @@ exit: return res; } -static void power_saving_wk_hdl(struct rtw_adapter *padapter, u8 *pbuf, int sz) -{ - rtw_ps_processor23a(padapter); -} - int rtw_ps_cmd23a(struct rtw_adapter*padapter) { struct cmd_obj *ppscmd; @@ -1332,8 +1327,7 @@ int rtw_drvextra_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) pdrvextra_cmd->type_size); break; case POWER_SAVING_CTRL_WK_CID: - power_saving_wk_hdl(padapter, pdrvextra_cmd->pbuf, - pdrvextra_cmd->type_size); + rtw_ps_processor23a(padapter); break; case LPS_CTRL_WK_CID: lps_ctrl_wk_hdl(padapter, (u8)pdrvextra_cmd->type_size); -- cgit From bf51ee79fd468f958ce191f01bf4995fb3eb354c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:16 +0200 Subject: staging: rtl8723au: Remove unused pwrctrl_priv->brfoffbyhw Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 1 - drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 1 - drivers/staging/rtl8723au/os_dep/usb_intf.c | 1 - 3 files changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c index ef29118ddbde..ad06335575e3 100644 --- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c @@ -165,7 +165,6 @@ void rtw_ps_processor23a(struct rtw_adapter*padapter) if (rfpwrstate!= pwrpriv->rf_pwrstate) { if (rfpwrstate == rf_off) { pwrpriv->change_rfpwrstate = rf_off; - pwrpriv->brfoffbyhw = true; padapter->bCardDisableWOHSM = true; rtw_hw_suspend23a(padapter); } else { diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 97bb569524cc..110bad971a36 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -210,7 +210,6 @@ struct pwrctrl_priv { u8 bHWPowerdown;/* if support hw power down */ u8 bHWPwrPindetect; u8 bkeepfwalive; - u8 brfoffbyhw; unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT]; }; diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index d0a3a1e6f5aa..e0d55144627e 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -416,7 +416,6 @@ int rtw_hw_resume23a(struct rtw_adapter *padapter) netif_tx_wake_all_queues(pnetdev); pwrpriv->bkeepfwalive = false; - pwrpriv->brfoffbyhw = false; pwrpriv->rf_pwrstate = rf_on; pwrpriv->bips_processing = false; -- cgit From 46eff7392d23d6ec8e2b1d02bc90e6cdb2c72d41 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:17 +0200 Subject: staging: rtl8723au: Remove unused variables from struct pwrctrl_priv Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 110bad971a36..2142255903e1 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -155,18 +155,14 @@ struct pwrctrl_priv { * read from HCPWM 2. driver lowers power level */ volatile u8 tog; /* toggling */ - volatile u8 cpwm_tog; /* toggling */ u8 pwr_mode; u8 smart_ps; u8 bcn_ant_mode; - u32 alives; - struct work_struct cpwm_event; u8 bpower_saving; u8 reg_rfoff; - u8 reg_pdnmode; /* powerdown mode */ u32 rfoff_reason; /* RF OFF Level */ @@ -206,7 +202,6 @@ struct pwrctrl_priv { enum rt_rf_power_state rf_pwrstate;/* cur power state */ enum rt_rf_power_state change_rfpwrstate; - u8 wepkeymask; u8 bHWPowerdown;/* if support hw power down */ u8 bHWPwrPindetect; u8 bkeepfwalive; -- cgit From e976cf6f135713cb6f4c904bf24fadfbbf325160 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:18 +0200 Subject: staging: rtl8723au: pnp_bstop_trx is never set In addition remove unused pnp_current_pwr_state Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_ops_linux.c | 11 ++++------- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 2 -- drivers/staging/rtl8723au/os_dep/usb_ops_linux.c | 8 +++----- 3 files changed, 7 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c index 23af71899151..780658c80160 100644 --- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c @@ -34,10 +34,9 @@ static int usbctrl_vendorreq(struct rtw_adapter *padapter, u8 request, u8 *pIo_buf; int vendorreq_times = 0; - if (padapter->bSurpriseRemoved || padapter->pwrctrlpriv.pnp_bstop_trx) { + if (padapter->bSurpriseRemoved) { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usbctrl_vendorreq:(padapter->bSurpriseRemoved||" - "adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); + ("usbctrl_vendorreq:(padapter->bSurpriseRemoved)!!!")); status = -EPERM; goto exit; } @@ -743,12 +742,10 @@ int rtl8723au_read_port(struct rtw_adapter *adapter, u32 addr, u32 cnt, struct recv_priv *precvpriv = &adapter->recvpriv; struct usb_device *pusbd = pdvobj->pusbdev; - if (adapter->bDriverStopped || adapter->bSurpriseRemoved || - adapter->pwrctrlpriv.pnp_bstop_trx) { + if (adapter->bDriverStopped || adapter->bSurpriseRemoved) { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port:(padapter->bDriverStopped ||" - "padapter->bSurpriseRemoved ||adapter->" - "pwrctrlpriv.pnp_bstop_trx)!!!\n")); + "padapter->bSurpriseRemoved)!!!\n")); return _FAIL; } diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 2142255903e1..45e13ce2b516 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -184,8 +184,6 @@ struct pwrctrl_priv { u8 bFwCurrentInPSMode; unsigned long DelayLPSLastTimeStamp; u8 btcoex_rfon; - s32 pnp_current_pwr_state; - u8 pnp_bstop_trx; u8 bInSuspend; #ifdef CONFIG_8723AU_BT_COEXIST diff --git a/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c b/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c index 33528072cb6a..a3349ac57bae 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c @@ -153,12 +153,10 @@ int rtl8723au_write_port(struct rtw_adapter *padapter, u32 addr, u32 cnt, RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("+usb_write_port23a\n")); - if (padapter->bDriverStopped || padapter->bSurpriseRemoved || - padapter->pwrctrlpriv.pnp_bstop_trx) { + if (padapter->bDriverStopped || padapter->bSurpriseRemoved) { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_write_port23a:( padapter->bDriverStopped || " - "padapter->bSurpriseRemoved || " - "adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n")); + ("%s:(padapter->bDriverStopped || " + "padapter->bSurpriseRemoved)!!!\n", __func__)); rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY); goto exit; } -- cgit From c3a3e226113dc43a0acdca3b98a7e175cc8b622b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:19 +0200 Subject: staging: rtl8723au: pwrctrl_priv->ps_flag is never set Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 2 -- drivers/staging/rtl8723au/os_dep/os_intfs.c | 5 ----- 2 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 45e13ce2b516..1fa712fbd0a3 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -195,8 +195,6 @@ struct pwrctrl_priv { int pwr_state_check_interval; u8 pwr_state_check_cnts; - int ps_flag; - enum rt_rf_power_state rf_pwrstate;/* cur power state */ enum rt_rf_power_state change_rfpwrstate; diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index ee3d62cc1ab0..7fa5c4c0c8ba 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -663,10 +663,6 @@ int netdev_open23a(struct net_device *pnetdev) mutex_lock(&adapter_to_dvobj(padapter)->hw_init_mutex); pwrctrlpriv = &padapter->pwrctrlpriv; - if (pwrctrlpriv->ps_flag) { - padapter->net_closed = false; - goto netdev_open23a_normal_process; - } if (!padapter->bup) { padapter->bDriverStopped = false; @@ -711,7 +707,6 @@ int netdev_open23a(struct net_device *pnetdev) else netif_tx_wake_all_queues(pnetdev); -netdev_open23a_normal_process: RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-871x_drv - dev_open\n")); DBG_8723A("-871x_drv - drv_open, bup =%d\n", padapter->bup); exit: -- cgit From a4f3d3c776140bb739353ca8614fd1105c696d97 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:20 +0200 Subject: staging: rtl8723au: Remove never set struct rtw_adapter->bNotifyChannelChange Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 4 ---- drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c | 3 --- drivers/staging/rtl8723au/include/drv_types.h | 2 -- drivers/staging/rtl8723au/os_dep/os_intfs.c | 1 - 4 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 66e72e267310..25dae51fa979 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -360,10 +360,6 @@ void set_channel_bwmode23a(struct rtw_adapter *padapter, unsigned char channel, { u8 center_ch; - if (padapter->bNotifyChannelChange) - DBG_8723A("[%s] ch = %d, offset = %d, bwmode = %d\n", - __func__, channel, channel_offset, bwmode); - if (bwmode == HT_CHANNEL_WIDTH_20 || channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE) { /* SelectChannel23a(padapter, channel); */ diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c index d23525e664fb..8a6ba63151cd 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c @@ -1098,9 +1098,6 @@ static void _PHY_SwChnl8723A(struct rtw_adapter *Adapter, u8 channel) u32 param1, param2; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); - if (Adapter->bNotifyChannelChange) - DBG_8723A("[%s] ch = %d\n", __func__, channel); - /* s1. pre common command - CmdID_SetTxPowerLevel */ PHY_SetTxPowerLevel8723A(Adapter, channel); diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h index 3ef9d7a045f2..c06de681c74f 100644 --- a/drivers/staging/rtl8723au/include/drv_types.h +++ b/drivers/staging/rtl8723au/include/drv_types.h @@ -257,8 +257,6 @@ struct rtw_adapter { u8 bFWReady; u8 bReadPortCancel; u8 bWritePortCancel; - /* The driver will show the desired chan nor when this flag is 1. */ - u8 bNotifyChannelChange; /* extend to support multi interface */ /* IFACE_ID0 is equals to PRIMARY_ADAPTER */ diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index 7fa5c4c0c8ba..d72305dc800f 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -425,7 +425,6 @@ static int rtw_init_default_value(struct rtw_adapter *padapter) /* misc. */ padapter->bReadPortCancel = false; padapter->bWritePortCancel = false; - padapter->bNotifyChannelChange = 0; return ret; } -- cgit From 2786faa33bfc8d61b4fa45dd2e31664de796c837 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 12:07:00 +0200 Subject: staging: rtl8723au: Sanitize USB read/write functions The original Realtek provided functions suffered badly from clutter to accommodate broken operating systems. Lets try this lean and clean version instead. v2: Do not use the stack for data passed to usb_control_msg(). This requires reintroducing the mutex used in the old function. In addition, get rid of the no longer used 'usb_vendor_req_buf'. Note that rtl8723au_writeN() remains unlocked, so it can be used for bulk block transfers without having to retake the mutex for every write(). Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_ops_linux.c | 299 +++++++--------------- drivers/staging/rtl8723au/include/drv_types.h | 9 +- drivers/staging/rtl8723au/include/usb_ops_linux.h | 14 +- drivers/staging/rtl8723au/os_dep/usb_intf.c | 21 +- 4 files changed, 105 insertions(+), 238 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c index 780658c80160..c1b04c13c392 100644 --- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c @@ -22,270 +22,149 @@ #include #include -static int usbctrl_vendorreq(struct rtw_adapter *padapter, u8 request, - u16 value, u16 index, void *pdata, u16 len, - u8 requesttype) +u8 rtl8723au_read8(struct rtw_adapter *padapter, u16 addr) { struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); struct usb_device *udev = pdvobjpriv->pusbdev; - unsigned int pipe; - int status = 0; - u8 reqtype; - u8 *pIo_buf; - int vendorreq_times = 0; - - if (padapter->bSurpriseRemoved) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usbctrl_vendorreq:(padapter->bSurpriseRemoved)!!!")); - status = -EPERM; - goto exit; - } - - if (len > MAX_VENDOR_REQ_CMD_SIZE) { - DBG_8723A("[%s] Buffer len error , vendor request failed\n", - __func__); - status = -EINVAL; - goto exit; - } + int len; + u8 data; mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ, + addr, 0, &pdvobjpriv->usb_buf.val8, sizeof(data), + RTW_USB_CONTROL_MSG_TIMEOUT); - /* Acquire IO memory for vendorreq */ - pIo_buf = pdvobjpriv->usb_vendor_req_buf; - - if (pIo_buf == NULL) { - DBG_8723A("[%s] pIo_buf == NULL \n", __func__); - status = -ENOMEM; - goto release_mutex; - } - - while (++vendorreq_times <= MAX_USBCTRL_VENDORREQ_TIMES) { - memset(pIo_buf, 0, len); - - if (requesttype == 0x01) { - pipe = usb_rcvctrlpipe(udev, 0);/* read_in */ - reqtype = REALTEK_USB_VENQT_READ; - } else { - pipe = usb_sndctrlpipe(udev, 0);/* write_out */ - reqtype = REALTEK_USB_VENQT_WRITE; - memcpy(pIo_buf, pdata, len); - } - - status = usb_control_msg(udev, pipe, request, reqtype, - value, index, pIo_buf, len, - RTW_USB_CONTROL_MSG_TIMEOUT); - - if (status == len) { /* Success this control transfer. */ - rtw_reset_continual_urb_error(pdvobjpriv); - if (requesttype == 0x01) { - /* For Control read transfer, we have to copy - * the read data from pIo_buf to pdata. - */ - memcpy(pdata, pIo_buf, len); - } - } else { /* error cases */ - DBG_8723A("reg 0x%x, usb %s %u fail, status:%d value =" - " 0x%x, vendorreq_times:%d\n", - value, (requesttype == 0x01) ? - "read" : "write", - len, status, *(u32 *)pdata, vendorreq_times); - - if (status < 0) { - if (status == -ESHUTDOWN || status == -ENODEV) - padapter->bSurpriseRemoved = true; - } else { /* status != len && status >= 0 */ - if (status > 0) { - if (requesttype == 0x01) { - /* - * For Control read transfer, - * we have to copy the read - * data from pIo_buf to pdata. - */ - memcpy(pdata, pIo_buf, len); - } - } - } - - if (rtw_inc_and_chk_continual_urb_error(pdvobjpriv)) { - padapter->bSurpriseRemoved = true; - break; - } - } - - /* firmware download is checksumed, don't retry */ - if ((value >= FW_8723A_START_ADDRESS && - value <= FW_8723A_END_ADDRESS) || status == len) - break; - } - -release_mutex: + data = pdvobjpriv->usb_buf.val8; mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); -exit: - return status; -} - -u8 rtl8723au_read8(struct rtw_adapter *padapter, u32 addr) -{ - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 data = 0; - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 1; - - usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); return data; } -u16 rtl8723au_read16(struct rtw_adapter *padapter, u32 addr) +u16 rtl8723au_read16(struct rtw_adapter *padapter, u16 addr) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le16 data; - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; + int len; + u16 data; - wvalue = (u16)(addr&0x0000ffff); - len = 2; + mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ, + addr, 0, &pdvobjpriv->usb_buf.val16, sizeof(data), + RTW_USB_CONTROL_MSG_TIMEOUT); - usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); + data = le16_to_cpu(pdvobjpriv->usb_buf.val16); + mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); - return le16_to_cpu(data); + return data; } -u32 rtl8723au_read32(struct rtw_adapter *padapter, u32 addr) +u32 rtl8723au_read32(struct rtw_adapter *padapter, u16 addr) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; - - request = 0x05; - requesttype = 0x01;/* read_in */ - index = 0;/* n/a */ + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; + int len; + u32 data; - wvalue = (u16)(addr&0x0000ffff); - len = 4; + mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ, + addr, 0, &pdvobjpriv->usb_buf.val32, sizeof(data), + RTW_USB_CONTROL_MSG_TIMEOUT); - usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); + data = le32_to_cpu(pdvobjpriv->usb_buf.val32); + mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); - return le32_to_cpu(data); + return data; } -int rtl8723au_write8(struct rtw_adapter *padapter, u32 addr, u8 val) +int rtl8723au_write8(struct rtw_adapter *padapter, u16 addr, u8 val) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 data; + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; int ret; - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = 1; + mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + pdvobjpriv->usb_buf.val8 = val; - data = val; + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, + REALTEK_USB_VENQT_WRITE, + addr, 0, &pdvobjpriv->usb_buf.val8, sizeof(val), + RTW_USB_CONTROL_MSG_TIMEOUT); - ret = usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); + if (ret != sizeof(val)) + ret = _FAIL; + else + ret = _SUCCESS; + mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); return ret; } -int rtl8723au_write16(struct rtw_adapter *padapter, u32 addr, u16 val) +int rtl8723au_write16(struct rtw_adapter *padapter, u16 addr, u16 val) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le16 data; + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; int ret; - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ + mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + pdvobjpriv->usb_buf.val16 = cpu_to_le16(val); - wvalue = (u16)(addr&0x0000ffff); - len = 2; + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, + REALTEK_USB_VENQT_WRITE, + addr, 0, &pdvobjpriv->usb_buf.val16, sizeof(val), + RTW_USB_CONTROL_MSG_TIMEOUT); - data = cpu_to_le16(val); + if (ret != sizeof(val)) + ret = _FAIL; + else + ret = _SUCCESS; - ret = usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); + mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); return ret; } -int rtl8723au_write32(struct rtw_adapter *padapter, u32 addr, u32 val) +int rtl8723au_write32(struct rtw_adapter *padapter, u16 addr, u32 val) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - __le32 data; + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; int ret; - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ + mutex_lock(&pdvobjpriv->usb_vendor_req_mutex); + pdvobjpriv->usb_buf.val32 = cpu_to_le32(val); - wvalue = (u16)(addr&0x0000ffff); - len = 4; - data = cpu_to_le32(val); + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, + REALTEK_USB_VENQT_WRITE, + addr, 0, &pdvobjpriv->usb_buf.val32, sizeof(val), + RTW_USB_CONTROL_MSG_TIMEOUT); - ret = usbctrl_vendorreq(padapter, request, wvalue, index, &data, - len, requesttype); + if (ret != sizeof(val)) + ret = _FAIL; + else + ret = _SUCCESS; + mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex); return ret; } -int rtl8723au_writeN(struct rtw_adapter *padapter, - u32 addr, u32 length, u8 *pdata) +int rtl8723au_writeN(struct rtw_adapter *padapter, u16 addr, u16 len, u8 *buf) { - u8 request; - u8 requesttype; - u16 wvalue; - u16 index; - u16 len; - u8 buf[VENDOR_CMD_MAX_DATA_LEN] = {0}; + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); + struct usb_device *udev = pdvobjpriv->pusbdev; int ret; - request = 0x05; - requesttype = 0x00;/* write_out */ - index = 0;/* n/a */ - - wvalue = (u16)(addr&0x0000ffff); - len = length; - memcpy(buf, pdata, len); + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + REALTEK_USB_VENQT_CMD_REQ, + REALTEK_USB_VENQT_WRITE, + addr, 0, buf, len, RTW_USB_CONTROL_MSG_TIMEOUT); - ret = usbctrl_vendorreq(padapter, request, wvalue, index, buf, - len, requesttype); - - return ret; + if (ret != len) + return _FAIL; + return _SUCCESS; } /* diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h index c06de681c74f..df55e5bbb6f2 100644 --- a/drivers/staging/rtl8723au/include/drv_types.h +++ b/drivers/staging/rtl8723au/include/drv_types.h @@ -177,10 +177,13 @@ struct dvobj_priv { u8 RtNumOutPipes; int ep_num[5]; /* endpoint number */ - struct mutex usb_vendor_req_mutex; + struct mutex usb_vendor_req_mutex; - u8 *usb_alloc_vendor_req_buf; - u8 *usb_vendor_req_buf; + union { + __le32 val32; + __le16 val16; + u8 val8; + } usb_buf; struct usb_interface *pusbintf; struct usb_device *pusbdev; diff --git a/drivers/staging/rtl8723au/include/usb_ops_linux.h b/drivers/staging/rtl8723au/include/usb_ops_linux.h index e540a4bad087..bf68bbb41f9c 100644 --- a/drivers/staging/rtl8723au/include/usb_ops_linux.h +++ b/drivers/staging/rtl8723au/include/usb_ops_linux.h @@ -29,13 +29,13 @@ int rtl8723au_write_port(struct rtw_adapter *padapter, u32 addr, u32 cnt, void rtl8723au_write_port_cancel(struct rtw_adapter *padapter); int rtl8723au_read_interrupt(struct rtw_adapter *adapter, u32 addr); -u8 rtl8723au_read8(struct rtw_adapter *padapter, u32 addr); -u16 rtl8723au_read16(struct rtw_adapter *padapter, u32 addr); -u32 rtl8723au_read32(struct rtw_adapter *padapter, u32 addr); -int rtl8723au_write8(struct rtw_adapter *padapter, u32 addr, u8 val); -int rtl8723au_write16(struct rtw_adapter *padapter, u32 addr, u16 val); -int rtl8723au_write32(struct rtw_adapter *padapter, u32 addr, u32 val); +u8 rtl8723au_read8(struct rtw_adapter *padapter, u16 addr); +u16 rtl8723au_read16(struct rtw_adapter *padapter, u16 addr); +u32 rtl8723au_read32(struct rtw_adapter *padapter, u16 addr); +int rtl8723au_write8(struct rtw_adapter *padapter, u16 addr, u8 val); +int rtl8723au_write16(struct rtw_adapter *padapter, u16 addr, u16 val); +int rtl8723au_write32(struct rtw_adapter *padapter, u16 addr, u32 val); int rtl8723au_writeN(struct rtw_adapter *padapter, - u32 addr, u32 length, u8 *pdata); + u16 addr, u16 length, u8 *pdata); #endif diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index e0d55144627e..ec9021601b3e 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -101,31 +101,16 @@ static inline int RT_usb_endpoint_num(const struct usb_endpoint_descriptor *epd) static int rtw_init_intf_priv(struct dvobj_priv *dvobj) { - int rst = _SUCCESS; - mutex_init(&dvobj->usb_vendor_req_mutex); - dvobj->usb_alloc_vendor_req_buf = kzalloc(MAX_USB_IO_CTL_SIZE, - GFP_KERNEL); - if (dvobj->usb_alloc_vendor_req_buf == NULL) { - DBG_8723A("alloc usb_vendor_req_buf failed...\n"); - rst = _FAIL; - goto exit; - } - dvobj->usb_vendor_req_buf = - PTR_ALIGN(dvobj->usb_alloc_vendor_req_buf, ALIGNMENT_UNIT); -exit: - return rst; + + return _SUCCESS; } static int rtw_deinit_intf_priv(struct dvobj_priv *dvobj) { - int rst = _SUCCESS; - - kfree(dvobj->usb_alloc_vendor_req_buf); - mutex_destroy(&dvobj->usb_vendor_req_mutex); - return rst; + return _SUCCESS; } static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) -- cgit From 42f984eb6f0ed957825d13fa81c308a50c4cab17 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Tue, 1 Jul 2014 10:11:22 +0200 Subject: staging: rtl8723au: Simplify _BlockWrite() based on saner rtl8723au_writeN() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 89 ++--------------------- 1 file changed, 5 insertions(+), 84 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index 8b3473fd7102..2bc830f9e51b 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -49,93 +49,14 @@ static void _FWDownloadEnable(struct rtw_adapter *padapter, bool enable) static int _BlockWrite(struct rtw_adapter *padapter, void *buffer, u32 buffSize) { - int ret = _SUCCESS; - /* (Default) Phase #1 : PCI muse use 4-byte write to download FW */ - u32 blockSize_p1 = 4; - /* Phase #2 : Use 8-byte, if Phase#1 use big size to write FW. */ - u32 blockSize_p2 = 8; - /* Phase #3 : Use 1-byte, the remnant of FW image. */ - u32 blockSize_p3 = 1; - u32 blockCount_p1 = 0, blockCount_p2 = 0, blockCount_p3 = 0; - u32 remainSize_p1 = 0, remainSize_p2 = 0; - u8 *bufferPtr = (u8 *) buffer; - u32 i = 0, offset = 0; - - blockSize_p1 = 254; - - /* 3 Phase #1 */ - blockCount_p1 = buffSize / blockSize_p1; - remainSize_p1 = buffSize % blockSize_p1; + int ret; - if (blockCount_p1) { - RT_TRACE(_module_hal_init_c_, _drv_notice_, - ("_BlockWrite: [P1] buffSize(%d) blockSize_p1(%d) " - "blockCount_p1(%d) remainSize_p1(%d)\n", - buffSize, blockSize_p1, blockCount_p1, - remainSize_p1)); - } - - for (i = 0; i < blockCount_p1; i++) { - ret = rtl8723au_writeN(padapter, (FW_8723A_START_ADDRESS + - i * blockSize_p1), - blockSize_p1, - (bufferPtr + i * blockSize_p1)); - if (ret == _FAIL) - goto exit; - } - - /* 3 Phase #2 */ - if (remainSize_p1) { - offset = blockCount_p1 * blockSize_p1; - - blockCount_p2 = remainSize_p1 / blockSize_p2; - remainSize_p2 = remainSize_p1 % blockSize_p2; - - if (blockCount_p2) { - RT_TRACE(_module_hal_init_c_, _drv_notice_, - ("_BlockWrite: [P2] buffSize_p2(%d) " - "blockSize_p2(%d) blockCount_p2(%d) " - "remainSize_p2(%d)\n", - (buffSize - offset), blockSize_p2, - blockCount_p2, remainSize_p2)); - } - - for (i = 0; i < blockCount_p2; i++) { - ret = rtl8723au_writeN(padapter, - (FW_8723A_START_ADDRESS + - offset + i * blockSize_p2), - blockSize_p2, - (bufferPtr + offset + - i * blockSize_p2)); - - if (ret == _FAIL) - goto exit; - } - } - - /* 3 Phase #3 */ - if (remainSize_p2) { - offset = (blockCount_p1 * blockSize_p1) + - (blockCount_p2 * blockSize_p2); - - blockCount_p3 = remainSize_p2 / blockSize_p3; - - RT_TRACE(_module_hal_init_c_, _drv_notice_, - ("_BlockWrite: [P3] buffSize_p3(%d) blockSize_p3(%d) " - "blockCount_p3(%d)\n", - (buffSize - offset), blockSize_p3, blockCount_p3)); - - for (i = 0; i < blockCount_p3; i++) { - ret = rtl8723au_write8(padapter, - (FW_8723A_START_ADDRESS + offset + i), - *(bufferPtr + offset + i)); + if (buffSize > MAX_PAGE_SIZE) + return _FAIL; - if (ret == _FAIL) - goto exit; - } - } + ret = rtl8723au_writeN(padapter, FW_8723A_START_ADDRESS, + buffSize, buffer); -exit: return ret; } -- cgit From 352f145d8fce34aa75b58cca102587ba7bce4412 Mon Sep 17 00:00:00 2001 From: Fabian Frederick Date: Tue, 1 Jul 2014 10:11:23 +0200 Subject: staging: rtl8723au: Remove unnecessary null test before kfree Fix checkpatch warning: WARNING: kfree(NULL) is safe this check is probably not required Cc: Larry Finger Cc: Jes Sorensen Cc: linux-wireless@vger.kernel.org Signed-off-by: Fabian Frederick Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_cmd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c index f44f9415a391..df1ffb375afe 100644 --- a/drivers/staging/rtl8723au/core/rtw_cmd.c +++ b/drivers/staging/rtl8723au/core/rtw_cmd.c @@ -515,9 +515,7 @@ int rtw_joinbss_cmd23a(struct rtw_adapter *padapter, psecnetwork = &psecuritypriv->sec_bss; if (!psecnetwork) { - if (pcmd) - kfree(pcmd); - + kfree(pcmd); res = _FAIL; RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, -- cgit From 7c7aaa83b082f3172cbe0e608def03f19c0fbdb7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:41 +0200 Subject: staging: ced1401: rename CanAcceptIoRequests() rename camel case function CanAcceptIoRequests() to can_accept_io_requests() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 284abc08922c..dc985a0e6f8f 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -245,13 +245,13 @@ static int ced_flush(struct file *file, fl_owner_t id) } /*************************************************************************** -** CanAcceptIoRequests +** can_accept_io_requests ** If the device is removed, interface is set NULL. We also clear our pointer ** from the interface, so we should make sure that pdx is not NULL. This will ** not help with a device extension held by a file. ** return true if can accept new io requests, else false */ -static bool CanAcceptIoRequests(DEVICE_EXTENSION *pdx) +static bool can_accept_io_requests(DEVICE_EXTENSION *pdx) { return pdx && pdx->interface; /* Can we accept IO requests */ } @@ -345,7 +345,7 @@ int SendChars(DEVICE_EXTENSION *pdx) if ((!pdx->bSendCharsPending) && /* Not currently sending */ (pdx->dwNumOutput > 0) && /* has characters to output */ - (CanAcceptIoRequests(pdx))) { /* and current activity is OK */ + (can_accept_io_requests(pdx))) { /* and current activity is OK */ unsigned int dwCount = pdx->dwNumOutput; /* Get a copy of the character count */ pdx->bSendCharsPending = true; /* Set flag to lock out other threads */ @@ -706,7 +706,7 @@ static int StageChunk(DEVICE_EXTENSION *pdx) if (nPipe < 0) /* and trap case that should never happen */ return U14ERR_FAIL; - if (!CanAcceptIoRequests(pdx)) { /* got sudden remove? */ + if (!can_accept_io_requests(pdx)) { /* got sudden remove? */ dev_info(&pdx->interface->dev, "%s: sudden remove, giving up\n", __func__); return U14ERR_FAIL; /* could do with a better error */ @@ -763,7 +763,7 @@ int ReadWriteMem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, { TRANSAREA *pArea = &pdx->rTransDef[wIdent]; /* Transfer area info */ - if (!CanAcceptIoRequests(pdx)) { /* Are we in a state to accept new requests? */ + if (!can_accept_io_requests(pdx)) { /* Are we in a state to accept new requests? */ dev_err(&pdx->interface->dev, "%s: can't accept requests\n", __func__); return U14ERR_FAIL; @@ -1173,7 +1173,7 @@ int Allowi(DEVICE_EXTENSION *pdx) (pdx->dwNumInput < (INBUF_SZ / 2)) && /* and there is some space */ (pdx->dwDMAFlag == MODE_CHAR) && /* not doing any DMA */ (!pdx->bXFerWaiting) && /* no xfer waiting to start */ - (CanAcceptIoRequests(pdx))) { /* and activity is generally OK */ + (can_accept_io_requests(pdx))) { /* and activity is generally OK */ /* then off we go */ unsigned int nMax = INBUF_SZ - pdx->dwNumInput; /* max we could read */ int nPipe = pdx->nPipes == 4 ? 1 : 0; /* The pipe number to use */ @@ -1215,7 +1215,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) { int err = 0; DEVICE_EXTENSION *pdx = file->private_data; - if (!CanAcceptIoRequests(pdx)) /* check we still exist */ + if (!can_accept_io_requests(pdx)) /* check we still exist */ return -ENODEV; /* Check that access is allowed, where is is needed. Anything that would have an indeterminate */ -- cgit From 3c469dfdc2625cc9d047db43f0d406749242f97f Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:42 +0200 Subject: staging: ced1401: rename SendChars() rename camel case function SendChars() to ced_send_chars() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 12 ++++++------ drivers/staging/ced1401/usb1401.c | 4 ++-- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index ebbc5090f219..ed62dbf66084 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -92,7 +92,7 @@ static int PutChars(DEVICE_EXTENSION *pdx, const char *pCh, } pdx->dwNumOutput += uCount; spin_unlock_irq(&pdx->charOutLock); - iReturn = SendChars(pdx); /* ...give a chance to transmit data */ + iReturn = ced_send_chars(pdx); /* ...give a chance to transmit data */ } else { iReturn = U14ERR_NOOUT; /* no room at the out (ha-ha) */ spin_unlock_irq(&pdx->charOutLock); @@ -427,7 +427,7 @@ int GetChar(DEVICE_EXTENSION *pdx) dev_dbg(&pdx->interface->dev, "%s\n", __func__); Allowi(pdx); /* Make sure char reads are running */ - SendChars(pdx); /* and send any buffered chars */ + ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); if (pdx->dwNumInput > 0) { /* worth looking */ @@ -465,7 +465,7 @@ int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n) mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ Allowi(pdx); /* Make sure char reads are running */ - SendChars(pdx); /* and send any buffered chars */ + ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); nAvailable = pdx->dwNumInput; /* characters available now */ @@ -521,7 +521,7 @@ int Stat1401(DEVICE_EXTENSION *pdx) int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ Allowi(pdx); /* make sure we allow pending chars */ - SendChars(pdx); /* in both directions */ + ced_send_chars(pdx); /* in both directions */ iReturn = pdx->dwNumInput; /* no lock as single read */ mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ return iReturn; @@ -540,7 +540,7 @@ int LineCount(DEVICE_EXTENSION *pdx) mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ Allowi(pdx); /* Make sure char reads are running */ - SendChars(pdx); /* and send any buffered chars */ + ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); /* Get protection */ if (pdx->dwNumInput > 0) { /* worth looking? */ @@ -570,7 +570,7 @@ int GetOutBufSpace(DEVICE_EXTENSION *pdx) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - SendChars(pdx); /* send any buffered chars */ + ced_send_chars(pdx); /* send any buffered chars */ iReturn = (int)(OUTBUF_SZ - pdx->dwNumOutput); /* no lock needed for single read */ dev_dbg(&pdx->interface->dev, "%s: %d\n", __func__, iReturn); mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index dc985a0e6f8f..2ad3560a3128 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -333,11 +333,11 @@ static void ced_writechar_callback(struct urb *pUrb) } /**************************************************************************** -** SendChars +** ced_send_chars ** Transmit the characters in the output buffer to the 1401. This may need ** breaking down into multiple transfers. ****************************************************************************/ -int SendChars(DEVICE_EXTENSION *pdx) +int ced_send_chars(DEVICE_EXTENSION *pdx) { int iReturn = U14ERR_NOERROR; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 8327e9ce93c3..67901b86aa38 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -202,7 +202,7 @@ typedef struct _DEVICE_EXTENSION { /* Definitions of routimes used between compilation object files */ /* in usb1401.c */ extern int Allowi(DEVICE_EXTENSION *pdx); -extern int SendChars(DEVICE_EXTENSION *pdx); +extern int ced_send_chars(DEVICE_EXTENSION *pdx); extern void ced_draw_down(DEVICE_EXTENSION *pdx); extern int ReadWriteMem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen); -- cgit From 799a9158f4fde61972524cf3a5169a4cc8ad6ae5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:43 +0200 Subject: staging: ced1401: rename CopyUserSpace() rename camel case function CopyUserSpace() to ced_copy_user_space() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 2ad3560a3128..8897dddbaa4f 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -76,7 +76,7 @@ pages that we hold a pointer to in the device driver. We also allocate a coherent transfer buffer of size STAGED_SZ (this must be a multiple of the bulk endpoint size so that the 1401 does not realise that we break large transfers down into smaller pieces). We use kmap_atomic() to get a kernel -va for each page, as it is required, for copying; see CopyUserSpace(). +va for each page, as it is required, for copying; see ced_copy_user_space(). All character and data transfers are done using asynchronous IO. All Urbs are tracked by anchoring them. Status and debug ioctls are implemented with the @@ -424,7 +424,7 @@ int ced_send_chars(DEVICE_EXTENSION *pdx) } /*************************************************************************** -** CopyUserSpace +** ced_copy_user_space ** This moves memory between pinned down user space and the pCoherStagedIO ** memory buffer we use for transfers. Copy n bytes in the directions that ** is defined by pdx->StagedRead. The user space is determined by the area @@ -437,7 +437,7 @@ int ced_send_chars(DEVICE_EXTENSION *pdx) ** pdx Is our device extension which holds all we know about the transfer. ** n The number of bytes to move one way or the other. ***************************************************************************/ -static void CopyUserSpace(DEVICE_EXTENSION *pdx, int n) +static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) { unsigned int nArea = pdx->StagedId; if (nArea < MAX_TRANSAREAS) { @@ -528,7 +528,7 @@ static void staged_callback(struct urb *pUrb) dev_dbg(&pdx->interface->dev, "%s: %d chars xferred\n", __func__, nGot); if (pdx->StagedRead) /* if reading, save to user space */ - CopyUserSpace(pdx, nGot); /* copy from buffer to user */ + ced_copy_user_space(pdx, nGot); /* copy from buffer to user */ if (nGot == 0) dev_dbg(&pdx->interface->dev, "%s: ZLP\n", __func__); } @@ -717,7 +717,7 @@ static int StageChunk(DEVICE_EXTENSION *pdx) ChunkSize = STAGED_SZ; /* limit to max allowed */ if (!pdx->StagedRead) /* if writing... */ - CopyUserSpace(pdx, ChunkSize); /* ...copy data into the buffer */ + ced_copy_user_space(pdx, ChunkSize); /* ...copy data into the buffer */ usb_fill_bulk_urb(pdx->pStagedUrb, pdx->udev, pdx->StagedRead ? usb_rcvbulkpipe(pdx->udev, -- cgit From 77cac964663160504771f8cf24f1321259e23a06 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:44 +0200 Subject: staging: ced1401: rename StageChunk() rename camel case function StageChunk() to ced_stage_chunk() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 8897dddbaa4f..8aad4a326c0a 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -492,7 +492,7 @@ static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) } /* Forward declarations for stuff used circularly */ -static int StageChunk(DEVICE_EXTENSION *pdx); +static int ced_stage_chunk(DEVICE_EXTENSION *pdx); /*************************************************************************** ** ReadWrite_Complete ** @@ -670,7 +670,7 @@ static void staged_callback(struct urb *pUrb) } } else /* Here for more to do */ - StageChunk(pdx); /* fire off the next bit */ + ced_stage_chunk(pdx); /* fire off the next bit */ /* While we hold the stagedLock, see if we should reallow character input ints */ /* Don't allow if cancelled, or if a new block has started or if there is a waiting block. */ @@ -689,14 +689,14 @@ static void staged_callback(struct urb *pUrb) } /**************************************************************************** -** StageChunk +** ced_stage_chunk ** ** Generates the next chunk of data making up a staged transfer. ** ** The calling code must have acquired the staging spinlock before calling ** this function, and is responsible for releasing it. We are at callback level. ****************************************************************************/ -static int StageChunk(DEVICE_EXTENSION *pdx) +static int ced_stage_chunk(DEVICE_EXTENSION *pdx) { int iReturn = U14ERR_NOERROR; unsigned int ChunkSize; @@ -838,7 +838,7 @@ int ReadWriteMem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, pdx->bXFerWaiting = false; /* Clearly not a transfer waiting now */ /* KeClearEvent(&pdx->StagingDoneEvent); // Clear the transfer done event */ - StageChunk(pdx); /* fire off the first chunk */ + ced_stage_chunk(pdx); /* fire off the first chunk */ return U14ERR_NOERROR; } -- cgit From 4ec00e760ba58b8c7d4df6334663326dfa9c8fb7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:45 +0200 Subject: staging: ced1401: rename ReadWriteMem() rename camel case function ReadWriteMem() to ced_read_write_mem() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- drivers/staging/ced1401/usb1401.c | 16 ++++++++-------- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index ed62dbf66084..35a0387811fb 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1470,7 +1470,7 @@ int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) /* If we have one, kick off pending transfer */ if (bWaiting) { /* Got a block xfer waiting? */ int RWMStat = - ReadWriteMem(pdx, !pdx->rDMAInfo.bOutWard, + ced_read_write_mem(pdx, !pdx->rDMAInfo.bOutWard, pdx->rDMAInfo.wIdent, pdx->rDMAInfo.dwOffset, pdx->rDMAInfo.dwSize); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 8aad4a326c0a..6af8c2fdd56c 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -505,7 +505,7 @@ static void staged_callback(struct urb *pUrb) bool bCancel = false; bool bRestartCharInput; /* used at the end */ - spin_lock(&pdx->stagedLock); /* stop ReadWriteMem() action while this routine is running */ + spin_lock(&pdx->stagedLock); /* stop ced_read_write_mem() action while this routine is running */ pdx->bStagedUrbPending = false; /* clear the flag for staged IRP pending */ if (pUrb->status) { /* sync/async unlink faults aren't errors */ @@ -549,7 +549,7 @@ static void staged_callback(struct urb *pUrb) /* Here is where we sort out what to do with this transfer if using a circular buffer. We have */ /* a completed transfer that can be assumed to fit into the transfer area. We should be able to */ /* add this to the end of a growing block or to use it to start a new block unless the code */ - /* that calculates the offset to use (in ReadWriteMem) is totally duff. */ + /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ if ((pArea->bCircular) && (pArea->bCircToHost) && (!bCancel) && /* Time to sort out circular buffer info? */ (pdx->StagedRead)) { /* Only for tohost transfers for now */ if (pArea->aBlocks[1].dwSize > 0) { /* If block 1 is in use we must append to it */ @@ -648,7 +648,7 @@ static void staged_callback(struct urb *pUrb) } } - pdx->dwDMAFlag = MODE_CHAR; /* Switch back to char mode before ReadWriteMem call */ + pdx->dwDMAFlag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ if (!bCancel) { /* Don't look for waiting transfer if cancelled */ /* If we have a transfer waiting, kick it off */ @@ -657,7 +657,7 @@ static void staged_callback(struct urb *pUrb) dev_info(&pdx->interface->dev, "*** RWM_Complete *** pending transfer will now be set up!!!\n"); iReturn = - ReadWriteMem(pdx, !pdx->rDMAInfo.bOutWard, + ced_read_write_mem(pdx, !pdx->rDMAInfo.bOutWard, pdx->rDMAInfo.wIdent, pdx->rDMAInfo.dwOffset, pdx->rDMAInfo.dwSize); @@ -742,7 +742,7 @@ static int ced_stage_chunk(DEVICE_EXTENSION *pdx) } /*************************************************************************** -** ReadWriteMem +** ced_read_write_mem ** ** This routine is used generally for block read and write operations. ** Breaks up a read or write in to specified sized chunks, as specified by pipe @@ -758,7 +758,7 @@ static int ced_stage_chunk(DEVICE_EXTENSION *pdx) ** transfer. ** dwLen - the number of bytes to transfer. */ -int ReadWriteMem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, +int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen) { TRANSAREA *pArea = &pdx->rTransDef[wIdent]; /* Transfer area info */ @@ -1058,7 +1058,7 @@ static int Handle1401Esc(DEVICE_EXTENSION *pdx, char *pCh, if ((wTransType == TM_EXTTOHOST) || (wTransType == TM_EXTTO1401)) { iReturn = - ReadWriteMem(pdx, + ced_read_write_mem(pdx, !pdx->rDMAInfo. bOutWard, pdx->rDMAInfo.wIdent, @@ -1066,7 +1066,7 @@ static int Handle1401Esc(DEVICE_EXTENSION *pdx, char *pCh, pdx->rDMAInfo.dwSize); if (iReturn != U14ERR_NOERROR) dev_err(&pdx->interface->dev, - "%s: ReadWriteMem() failed %d\n", + "%s: ced_read_write_mem() failed %d\n", __func__, iReturn); } else /* This covers non-linear transfer setup */ dev_err(&pdx->interface->dev, diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 67901b86aa38..a91250133310 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -204,7 +204,7 @@ typedef struct _DEVICE_EXTENSION { extern int Allowi(DEVICE_EXTENSION *pdx); extern int ced_send_chars(DEVICE_EXTENSION *pdx); extern void ced_draw_down(DEVICE_EXTENSION *pdx); -extern int ReadWriteMem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, +extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen); /* in ced_ioc.c */ -- cgit From fcc2171f245673ca11d2e9ebf508b79a2920eb93 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:46 +0200 Subject: staging: ced1401: rename ReadChar() rename camel case function ReadChar() to ced_read_char() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 6af8c2fdd56c..b34e84002ad5 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -845,13 +845,13 @@ int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, /**************************************************************************** ** -** ReadChar +** ced_read_char ** ** Reads a character a buffer. If there is no more ** data we return FALSE. Used as part of decoding a DMA request. ** ****************************************************************************/ -static bool ReadChar(unsigned char *pChar, char *pBuf, unsigned int *pdDone, +static bool ced_read_char(unsigned char *pChar, char *pBuf, unsigned int *pdDone, unsigned int dGot) { bool bRead = false; @@ -872,14 +872,14 @@ static bool ReadChar(unsigned char *pChar, char *pBuf, unsigned int *pdDone, ** ** ReadWord ** -** Reads a word from the 1401, just uses ReadChar twice; passes on any error +** Reads a word from the 1401, just uses ced_read_char twice; passes on any error ** *****************************************************************************/ static bool ReadWord(unsigned short *pWord, char *pBuf, unsigned int *pdDone, unsigned int dGot) { - if (ReadChar((unsigned char *)pWord, pBuf, pdDone, dGot)) - return ReadChar(((unsigned char *)pWord) + 1, pBuf, pdDone, + if (ced_read_char((unsigned char *)pWord, pBuf, pdDone, dGot)) + return ced_read_char(((unsigned char *)pWord) + 1, pBuf, pdDone, dGot); else return false; @@ -899,19 +899,19 @@ static bool ReadWord(unsigned short *pWord, char *pBuf, unsigned int *pdDone, static bool ReadHuff(volatile unsigned int *pDWord, char *pBuf, unsigned int *pdDone, unsigned int dGot) { - unsigned char ucData; /* for each read to ReadChar */ + unsigned char ucData; /* for each read to ced_read_char */ bool bReturn = true; /* assume we will succeed */ unsigned int dwData = 0; /* Accumulator for the data */ - if (ReadChar(&ucData, pBuf, pdDone, dGot)) { + if (ced_read_char(&ucData, pBuf, pdDone, dGot)) { dwData = ucData; /* copy the data */ if ((dwData & 0x00000080) != 0) { /* Bit set for more data ? */ dwData &= 0x0000007F; /* Clear the relevant bit */ - if (ReadChar(&ucData, pBuf, pdDone, dGot)) { + if (ced_read_char(&ucData, pBuf, pdDone, dGot)) { dwData = (dwData << 8) | ucData; if ((dwData & 0x00004000) != 0) { /* three byte sequence ? */ dwData &= 0x00003FFF; /* Clear the relevant bit */ - if (ReadChar + if (ced_read_char (&ucData, pBuf, pdDone, dGot)) dwData = (dwData << 8) | ucData; else @@ -950,7 +950,7 @@ static bool ReadDMAInfo(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, dev_dbg(&pdx->interface->dev, "%s\n", __func__); - if (ReadChar(&ucData, pBuf, &dDone, dwCount)) { + if (ced_read_char(&ucData, pBuf, &dDone, dwCount)) { unsigned char ucTransCode = (ucData & 0x0F); /* get code for transfer type */ unsigned short wIdent = ((ucData >> 4) & 0x07); /* and area identifier */ -- cgit From 026a8210513fa8b6c6643fbe72df3ca667695aa5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:47 +0200 Subject: staging: ced1401: rename ReadWord() rename camel case function ReadWord() to ced_read_word() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index b34e84002ad5..22e0c33aa91c 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -870,12 +870,12 @@ static bool ced_read_char(unsigned char *pChar, char *pBuf, unsigned int *pdDone #ifdef NOTUSED /**************************************************************************** ** -** ReadWord +** ced_read_word ** ** Reads a word from the 1401, just uses ced_read_char twice; passes on any error ** *****************************************************************************/ -static bool ReadWord(unsigned short *pWord, char *pBuf, unsigned int *pdDone, +static bool ced_read_word(unsigned short *pWord, char *pBuf, unsigned int *pdDone, unsigned int dGot) { if (ced_read_char((unsigned char *)pWord, pBuf, pdDone, dGot)) -- cgit From 2732a875ad32d39f3e0421d3b77ad88301911850 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:48 +0200 Subject: staging: ced1401: rename ReadHuff() rename camel case function ReadHuff() to ced_read_huff() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 22e0c33aa91c..0eb96732d20c 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -887,7 +887,7 @@ static bool ced_read_word(unsigned short *pWord, char *pBuf, unsigned int *pdDon #endif /**************************************************************************** -** ReadHuff +** ced_read_huff ** ** Reads a coded number in and returns it, Code is: ** If data is in range 0..127 we receive 1 byte. If data in range 128-16383 @@ -896,7 +896,7 @@ static bool ced_read_word(unsigned short *pWord, char *pBuf, unsigned int *pdDon ** to indicate three byte total. ** *****************************************************************************/ -static bool ReadHuff(volatile unsigned int *pDWord, char *pBuf, +static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, unsigned int *pdDone, unsigned int dGot) { unsigned char ucData; /* for each read to ced_read_char */ @@ -970,9 +970,9 @@ static bool ReadDMAInfo(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, case TM_EXTTO1401: { bResult = - ReadHuff(&(pDmaDesc->dwOffset), pBuf, + ced_read_huff(&(pDmaDesc->dwOffset), pBuf, &dDone, dwCount) - && ReadHuff(&(pDmaDesc->dwSize), pBuf, + && ced_read_huff(&(pDmaDesc->dwSize), pBuf, &dDone, dwCount); if (bResult) { dev_dbg(&pdx->interface->dev, -- cgit From c429117e946fc2b113980ef5a2355c352bcdd2e8 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:49 +0200 Subject: staging: ced1401: rename ReadDMAInfo() rename camel case function ReadDMAInfo() to ced_read_dma_info() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 0eb96732d20c..1fabdfaad225 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -929,7 +929,7 @@ static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, /*************************************************************************** ** -** ReadDMAInfo +** ced_read_dma_info ** ** Tries to read info about the dma request from the 1401 and decode it into ** the dma descriptor block. We have at this point had the escape character @@ -941,7 +941,7 @@ static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, ** we start handling the data at offset zero. ** *****************************************************************************/ -static bool ReadDMAInfo(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, +static bool ced_read_dma_info(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, char *pBuf, unsigned int dwCount) { bool bResult = false; /* assume we won't succeed */ @@ -1041,7 +1041,7 @@ static int Handle1401Esc(DEVICE_EXTENSION *pdx, char *pCh, } else { spin_lock(&pdx->stagedLock); /* Lock others out */ - if (ReadDMAInfo(&pdx->rDMAInfo, pdx, pCh, dwCount)) { /* Get DMA parameters */ + if (ced_read_dma_info(&pdx->rDMAInfo, pdx, pCh, dwCount)) { /* Get DMA parameters */ unsigned short wTransType = pdx->rDMAInfo.wTransType; /* check transfer type */ dev_dbg(&pdx->interface->dev, @@ -1074,7 +1074,7 @@ static int Handle1401Esc(DEVICE_EXTENSION *pdx, char *pCh, __func__, wTransType); } } else /* Failed to read parameters */ - dev_err(&pdx->interface->dev, "%s: ReadDMAInfo() fail\n", + dev_err(&pdx->interface->dev, "%s: ced_read_dma_info() fail\n", __func__); spin_unlock(&pdx->stagedLock); /* OK here */ -- cgit From 380dff8ce40377d1df3d59cc7ecc8245accc629b Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:50 +0200 Subject: staging: ced1401: rename Handle1401Esc() rename camel case function Handle1401Esc() to ced_handle_esc() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 1fabdfaad225..2e2a1c07913b 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1016,7 +1016,7 @@ static bool ced_read_dma_info(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, /**************************************************************************** ** -** Handle1401Esc +** ced_handle_esc ** ** Deals with an escape sequence coming from the 1401. This can either be ** a DMA transfer request of various types or a response to an escape sequence @@ -1028,7 +1028,7 @@ static bool ced_read_dma_info(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, ** this is known to be at least 2 or we will not be called. ** ****************************************************************************/ -static int Handle1401Esc(DEVICE_EXTENSION *pdx, char *pCh, +static int ced_handle_esc(DEVICE_EXTENSION *pdx, char *pCh, unsigned int dwCount) { int iReturn = U14ERR_FAIL; @@ -1116,7 +1116,7 @@ static void ced_readchar_callback(struct urb *pUrb) pdx->bPipeError[nPipe] = 1; /* Flag an error for later */ } else { if ((nGot > 1) && ((pdx->pCoherCharIn[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ - Handle1401Esc(pdx, &pdx->pCoherCharIn[1], nGot - 1); /* handle it */ + ced_handle_esc(pdx, &pdx->pCoherCharIn[1], nGot - 1); /* handle it */ spin_lock(&pdx->charInLock); /* already at irq level */ } else { spin_lock(&pdx->charInLock); /* already at irq level */ -- cgit From 8fac82f036b397c25793b42f8b3b5176de48da6a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:51 +0200 Subject: staging: ced1401: rename Allowi() rename camel case function Allowi() to ced_allowi() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 16 ++++++++-------- drivers/staging/ced1401/usb1401.c | 10 +++++----- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 35a0387811fb..5fb3ae021bf2 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -123,7 +123,7 @@ int SendString(DEVICE_EXTENSION *pdx, const char __user *pData, iReturn = PutChars(pdx, buffer, n); } - Allowi(pdx); /* make sure we have input int */ + ced_allowi(pdx); /* make sure we have input int */ mutex_unlock(&pdx->io_mutex); return iReturn; @@ -140,7 +140,7 @@ int SendChar(DEVICE_EXTENSION *pdx, char c) mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ iReturn = PutChars(pdx, &c, 1); dev_dbg(&pdx->interface->dev, "SendChar >%c< (0x%02x)\n", c, c); - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ mutex_unlock(&pdx->io_mutex); return iReturn; } @@ -426,7 +426,7 @@ int GetChar(DEVICE_EXTENSION *pdx) dev_dbg(&pdx->interface->dev, "%s\n", __func__); - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); @@ -439,7 +439,7 @@ int GetChar(DEVICE_EXTENSION *pdx) iReturn = U14ERR_NOIN; /* no input data to read */ spin_unlock_irq(&pdx->charInLock); - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ return iReturn; @@ -464,7 +464,7 @@ int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n) return -ENOMEM; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); @@ -507,7 +507,7 @@ int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n) } else spin_unlock_irq(&pdx->charInLock); - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ return iReturn; @@ -520,7 +520,7 @@ int Stat1401(DEVICE_EXTENSION *pdx) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - Allowi(pdx); /* make sure we allow pending chars */ + ced_allowi(pdx); /* make sure we allow pending chars */ ced_send_chars(pdx); /* in both directions */ iReturn = pdx->dwNumInput; /* no lock as single read */ mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ @@ -539,7 +539,7 @@ int LineCount(DEVICE_EXTENSION *pdx) int iReturn = 0; /* will be count of line ends */ mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - Allowi(pdx); /* Make sure char reads are running */ + ced_allowi(pdx); /* Make sure char reads are running */ ced_send_chars(pdx); /* and send any buffered chars */ spin_lock_irq(&pdx->charInLock); /* Get protection */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 2e2a1c07913b..e94668176be3 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -681,10 +681,10 @@ static void staged_callback(struct urb *pUrb) spin_unlock(&pdx->stagedLock); /* Finally release the lock again */ /* This is not correct as dwDMAFlag is protected by the staged lock, but it is treated */ - /* in Allowi as if it were protected by the char lock. In any case, most systems will */ + /* in ced_allowi as if it were protected by the char lock. In any case, most systems will */ /* not be upset by char input during DMA... sigh. Needs sorting out. */ if (bRestartCharInput) /* may be out of date, but... */ - Allowi(pdx); /* ...Allowi tests a lock too. */ + ced_allowi(pdx); /* ...ced_allowi tests a lock too. */ dev_dbg(&pdx->interface->dev, "%s: done\n", __func__); } @@ -1148,17 +1148,17 @@ static void ced_readchar_callback(struct urb *pUrb) pdx->bReadCharsPending = false; /* No longer have a pending read */ spin_unlock(&pdx->charInLock); /* already at irq level */ - Allowi(pdx); /* see if we can do the next one */ + ced_allowi(pdx); /* see if we can do the next one */ } /**************************************************************************** -** Allowi +** ced_allowi ** ** This is used to make sure that there is always a pending input transfer so ** we can pick up any inward transfers. This can be called in multiple contexts ** so we use the irqsave version of the spinlock. ****************************************************************************/ -int Allowi(DEVICE_EXTENSION *pdx) +int ced_allowi(DEVICE_EXTENSION *pdx) { int iReturn = U14ERR_NOERROR; unsigned long flags; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index a91250133310..a8d74da0422d 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -201,7 +201,7 @@ typedef struct _DEVICE_EXTENSION { /* Definitions of routimes used between compilation object files */ /* in usb1401.c */ -extern int Allowi(DEVICE_EXTENSION *pdx); +extern int ced_allowi(DEVICE_EXTENSION *pdx); extern int ced_send_chars(DEVICE_EXTENSION *pdx); extern void ced_draw_down(DEVICE_EXTENSION *pdx); extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, -- cgit From 59e58f59e830c1e35ee24d56780d7b87575c9d12 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:52 +0200 Subject: staging: ced1401: rename FlushOutBuff() rename camel case function FlushOutBuff() to ced_flush_out_buff() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 5fb3ae021bf2..8223a88b175d 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -32,11 +32,11 @@ #include "usb1401.h" /**************************************************************************** -** FlushOutBuff +** ced_flush_out_buff ** ** Empties the Output buffer and sets int lines. Used from user level only ****************************************************************************/ -static void FlushOutBuff(DEVICE_EXTENSION *pdx) +static void ced_flush_out_buff(DEVICE_EXTENSION *pdx) { dev_dbg(&pdx->interface->dev, "%s: currentState=%d\n", __func__, pdx->sCurrentState); @@ -308,7 +308,7 @@ bool Is1401(DEVICE_EXTENSION *pdx) ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ FlushInBuff(pdx); /* Clear out input buffer & pipe */ - FlushOutBuff(pdx); /* Clear output buffer & pipe */ + ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ /* The next call returns 0 if OK, but has returned 1 in the past, meaning that */ /* usb_unlock_device() is needed... now it always is */ @@ -925,7 +925,7 @@ int KillIO1401(DEVICE_EXTENSION *pdx) { dev_dbg(&pdx->interface->dev, "%s\n", __func__); mutex_lock(&pdx->io_mutex); - FlushOutBuff(pdx); + ced_flush_out_buff(pdx); FlushInBuff(pdx); mutex_unlock(&pdx->io_mutex); return U14ERR_NOERROR; @@ -976,7 +976,7 @@ int StartSelfTest(DEVICE_EXTENSION *pdx) ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ FlushInBuff(pdx); /* Clear out input buffer & pipe */ - FlushOutBuff(pdx); /* Clear output buffer & pipe */ + ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ /* so things stay tidy */ /* ReadWrite_Cancel(pDeviceObject); */ pdx->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flags here */ -- cgit From 4fe4dff73923d0dedd53b899ad62b87ba22b244c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:53 +0200 Subject: staging: ced1401: rename FlushInBuff() rename camel case function FlushInBuff() to ced_flush_in_buff() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 8223a88b175d..b99434b53928 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -53,11 +53,11 @@ static void ced_flush_out_buff(DEVICE_EXTENSION *pdx) /**************************************************************************** ** -** FlushInBuff +** ced_flush_in_buff ** ** Empties the input buffer and sets int lines ****************************************************************************/ -static void FlushInBuff(DEVICE_EXTENSION *pdx) +static void ced_flush_in_buff(DEVICE_EXTENSION *pdx) { dev_dbg(&pdx->interface->dev, "%s: currentState=%d\n", __func__, pdx->sCurrentState); @@ -307,7 +307,7 @@ bool Is1401(DEVICE_EXTENSION *pdx) dev_dbg(&pdx->interface->dev, "%s\n", __func__); ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ - FlushInBuff(pdx); /* Clear out input buffer & pipe */ + ced_flush_in_buff(pdx); /* Clear out input buffer & pipe */ ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ /* The next call returns 0 if OK, but has returned 1 in the past, meaning that */ @@ -926,7 +926,7 @@ int KillIO1401(DEVICE_EXTENSION *pdx) dev_dbg(&pdx->interface->dev, "%s\n", __func__); mutex_lock(&pdx->io_mutex); ced_flush_out_buff(pdx); - FlushInBuff(pdx); + ced_flush_in_buff(pdx); mutex_unlock(&pdx->io_mutex); return U14ERR_NOERROR; } @@ -975,7 +975,7 @@ int StartSelfTest(DEVICE_EXTENSION *pdx) dev_dbg(&pdx->interface->dev, "%s\n", __func__); ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ - FlushInBuff(pdx); /* Clear out input buffer & pipe */ + ced_flush_in_buff(pdx); /* Clear out input buffer & pipe */ ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ /* so things stay tidy */ /* ReadWrite_Cancel(pDeviceObject); */ -- cgit From 8b35f368091e3573407383b1c8dab41510cb7c75 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:54 +0200 Subject: staging: ced1401: rename PutChars() rename camel case function PutChars() to ced_put_chars() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index b99434b53928..be0350b44a0c 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -73,12 +73,12 @@ static void ced_flush_in_buff(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** PutChars +** ced_put_chars ** ** Utility routine to copy chars into the output buffer and fire them off. ** called from user mode, holds charOutLock. ****************************************************************************/ -static int PutChars(DEVICE_EXTENSION *pdx, const char *pCh, +static int ced_put_chars(DEVICE_EXTENSION *pdx, const char *pCh, unsigned int uCount) { int iReturn; @@ -120,7 +120,7 @@ int SendString(DEVICE_EXTENSION *pdx, const char __user *pData, if (n > 0) { /* do nothing if nowt to do! */ dev_dbg(&pdx->interface->dev, "%s: n=%d>%s<\n", __func__, n, buffer); - iReturn = PutChars(pdx, buffer, n); + iReturn = ced_put_chars(pdx, buffer, n); } ced_allowi(pdx); /* make sure we have input int */ @@ -138,7 +138,7 @@ int SendChar(DEVICE_EXTENSION *pdx, char c) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - iReturn = PutChars(pdx, &c, 1); + iReturn = ced_put_chars(pdx, &c, 1); dev_dbg(&pdx->interface->dev, "SendChar >%c< (0x%02x)\n", c, c); ced_allowi(pdx); /* Make sure char reads are running */ mutex_unlock(&pdx->io_mutex); -- cgit From 747ce5829ec58447321dff9ceef68a3f67e24c4f Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:55 +0200 Subject: staging: ced1401: rename SendString() rename camel case function SendString() to ced_send_string() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index be0350b44a0c..b71b2bcafe1e 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -105,7 +105,7 @@ static int ced_put_chars(DEVICE_EXTENSION *pdx, const char *pCh, ** trigger an output transfer if this is appropriate. User mode. ** Holds the io_mutex *****************************************************************************/ -int SendString(DEVICE_EXTENSION *pdx, const char __user *pData, +int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n) { int iReturn = U14ERR_NOERROR; /* assume all will be well */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index e94668176be3..6d2c836f4321 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1229,7 +1229,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) switch (_IOC_NR(cmd)) { case _IOC_NR(IOCTL_CED_SENDSTRING(0)): - return SendString(pdx, (const char __user *)ulArg, + return ced_send_string(pdx, (const char __user *)ulArg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_RESET1401): diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index a8d74da0422d..969b93297120 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -209,7 +209,7 @@ extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short w /* in ced_ioc.c */ extern int ClearArea(DEVICE_EXTENSION *pdx, int nArea); -extern int SendString(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); +extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); extern int SendChar(DEVICE_EXTENSION *pdx, char c); extern int Get1401State(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ReadWrite_Cancel(DEVICE_EXTENSION *pdx); -- cgit From 1a0f2ccdebefae6c149b815be05e4baf5bbe54ff Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:56 +0200 Subject: staging: ced1401: rename SendChar() rename camel case function SendChar() to ced_send_char() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index b71b2bcafe1e..eb74ade725d8 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -130,16 +130,16 @@ int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, } /**************************************************************************** -** SendChar +** ced_send_char ** ** Sends a single character to the 1401. User mode, holds io_mutex. ****************************************************************************/ -int SendChar(DEVICE_EXTENSION *pdx, char c) +int ced_send_char(DEVICE_EXTENSION *pdx, char c) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ iReturn = ced_put_chars(pdx, &c, 1); - dev_dbg(&pdx->interface->dev, "SendChar >%c< (0x%02x)\n", c, c); + dev_dbg(&pdx->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); ced_allowi(pdx); /* Make sure char reads are running */ mutex_unlock(&pdx->io_mutex); return iReturn; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 6d2c836f4321..b7e4255a3ab7 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1239,7 +1239,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return GetChar(pdx); case _IOC_NR(IOCTL_CED_SENDCHAR): - return SendChar(pdx, (char)ulArg); + return ced_send_char(pdx, (char)ulArg); case _IOC_NR(IOCTL_CED_STAT1401): return Stat1401(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 969b93297120..8c8ecfd604a1 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -210,7 +210,7 @@ extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short w /* in ced_ioc.c */ extern int ClearArea(DEVICE_EXTENSION *pdx, int nArea); extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); -extern int SendChar(DEVICE_EXTENSION *pdx, char c); +extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int Get1401State(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ReadWrite_Cancel(DEVICE_EXTENSION *pdx); extern bool Is1401(DEVICE_EXTENSION *pdx); -- cgit From 46e6a290ed6b20a771e4c26f33fb078b67f8b7d7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:57 +0200 Subject: staging: ced1401: rename Get1401State() rename camel case function Get1401State() to ced_get_state() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 24 ++++++++++++------------ drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index eb74ade725d8..d9410816e6c5 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -147,7 +147,7 @@ int ced_send_char(DEVICE_EXTENSION *pdx, char c) /*************************************************************************** ** -** Get1401State +** ced_get_state ** ** Retrieves state information from the 1401, adjusts the 1401 state held ** in the device extension to indicate the current 1401 type. @@ -171,7 +171,7 @@ int ced_send_char(DEVICE_EXTENSION *pdx, char c) ** ** return error code (U14ERR_NOERROR for OK) */ -int Get1401State(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error) +int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error) { int nGot; dev_dbg(&pdx->interface->dev, "%s: entry\n", __func__); @@ -275,7 +275,7 @@ int ReadWrite_Cancel(DEVICE_EXTENSION *pdx) static int InSelfTest(DEVICE_EXTENSION *pdx, unsigned int *pState) { unsigned int state, error; - int iReturn = Get1401State(pdx, &state, &error); /* see if in self-test */ + int iReturn = ced_get_state(pdx, &state, &error); /* see if in self-test */ if (iReturn == U14ERR_NOERROR) /* if all still OK */ iReturn = (state == (unsigned int)-1) || /* TX problem or... */ ((state & 0xff) == 0x80); /* ...self test */ @@ -382,8 +382,8 @@ bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) if (bShortTest || !bCanReset) { /* Still OK to try the short test? */ /* Always test if no reset - we want state update */ unsigned int state, error; - dev_dbg(&pdx->interface->dev, "%s: Get1401State\n", __func__); - if (Get1401State(pdx, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ + dev_dbg(&pdx->interface->dev, "%s: ced_get_state\n", __func__); + if (ced_get_state(pdx, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ if ((state & 0xFF) == 0) /* If call worked, check the status value */ bRet = true; /* If that was zero, all is OK, no reset needed */ } @@ -1007,23 +1007,23 @@ int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s\n", __func__); - iReturn = Get1401State(pdx, &state, &error); + iReturn = ced_get_state(pdx, &state, &error); if (iReturn == U14ERR_NOERROR) /* Only accept zero if it happens twice */ - iReturn = Get1401State(pdx, &state, &error); + iReturn = ced_get_state(pdx, &state, &error); if (iReturn != U14ERR_NOERROR) { /* Self-test can cause comms errors */ /* so we assume still testing */ dev_err(&pdx->interface->dev, - "%s: Get1401State=%d, assuming still testing\n", + "%s: ced_get_state=%d, assuming still testing\n", __func__, iReturn); state = 0x80; /* Force still-testing, no error */ error = 0; iReturn = U14ERR_NOERROR; } - if ((state == -1) && (error == -1)) { /* If Get1401State had problems */ + if ((state == -1) && (error == -1)) { /* If ced_get_state had problems */ dev_err(&pdx->interface->dev, - "%s: Get1401State failed, assuming still testing\n", + "%s: ced_get_state failed, assuming still testing\n", __func__); state = 0x80; /* Force still-testing, no error */ error = 0; @@ -1294,7 +1294,7 @@ int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) /**************************************************************************** ** DbgStopLoop ** -** Stop any never-ending debug loop, we just call Get1401State for USB +** Stop any never-ending debug loop, we just call ced_get_state for USB ** ****************************************************************************/ int DbgStopLoop(DEVICE_EXTENSION *pdx) @@ -1304,7 +1304,7 @@ int DbgStopLoop(DEVICE_EXTENSION *pdx) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s\n", __func__); - iReturn = Get1401State(pdx, &uState, &uErr); + iReturn = ced_get_state(pdx, &uState, &uErr); mutex_unlock(&pdx->io_mutex); return iReturn; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 8c8ecfd604a1..3bf8783eee43 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -211,7 +211,7 @@ extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short w extern int ClearArea(DEVICE_EXTENSION *pdx, int nArea); extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); -extern int Get1401State(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); +extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ReadWrite_Cancel(DEVICE_EXTENSION *pdx); extern bool Is1401(DEVICE_EXTENSION *pdx); extern bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset); -- cgit From a5830de9bd19af55051df1ea1d4824a6e821c47f Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:58 +0200 Subject: staging: ced1401: rename ReadWrite_Cancel() rename camel case function ReadWrite_Cancel() to ced_read_write_cancel() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 +++++----- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index d9410816e6c5..6faf1dc9fd74 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -214,11 +214,11 @@ int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error) } /**************************************************************************** -** ReadWrite_Cancel +** ced_read_write_cancel ** ** Kills off staged read\write request from the USB if one is pending. ****************************************************************************/ -int ReadWrite_Cancel(DEVICE_EXTENSION *pdx) +int ced_read_write_cancel(DEVICE_EXTENSION *pdx) { dev_dbg(&pdx->interface->dev, "%s: entry %d\n", __func__, pdx->bStagedUrbPending); @@ -231,7 +231,7 @@ int ReadWrite_Cancel(DEVICE_EXTENSION *pdx) if (pdx->bStagedUrbPending) { /* anything to be cancelled? May need more... */ dev_info(&pdx->interface - dev, - "ReadWrite_Cancel about to cancel Urb\n"); + "ced_read_write_cancel about to cancel Urb\n"); /* Clear the staging done flag */ /* KeClearEvent(&pdx->StagingDoneEvent); */ USB_ASSERT(pdx->pStagedIrp != NULL); @@ -255,7 +255,7 @@ int ReadWrite_Cancel(DEVICE_EXTENSION *pdx) ntStatus = U14ERR_FAIL; } USB_KdPrint(DBGLVL_DEFAULT, - ("ReadWrite_Cancel ntStatus = 0x%x decimal %d\n", + ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", ntStatus, ntStatus)); } else spin_unlock_irq(&pdx->stagedLock); @@ -978,7 +978,7 @@ int StartSelfTest(DEVICE_EXTENSION *pdx) ced_flush_in_buff(pdx); /* Clear out input buffer & pipe */ ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ /* so things stay tidy */ - /* ReadWrite_Cancel(pDeviceObject); */ + /* ced_read_write_cancel(pDeviceObject); */ pdx->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flags here */ nGot = usb_control_msg(pdx->udev, usb_rcvctrlpipe(pdx->udev, 0), diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 3bf8783eee43..7b541e9dce67 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -212,7 +212,7 @@ extern int ClearArea(DEVICE_EXTENSION *pdx, int nArea); extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); -extern int ReadWrite_Cancel(DEVICE_EXTENSION *pdx); +extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); extern bool Is1401(DEVICE_EXTENSION *pdx); extern bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset); extern int Reset1401(DEVICE_EXTENSION *pdx); -- cgit From fd813a798df33c64ca71486ed9f2d5ca763a1634 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:57:59 +0200 Subject: staging: ced1401: rename InSelfTest() rename camel case function InSelfTest() to ced_in_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 6faf1dc9fd74..cb49eab7dbcc 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -269,10 +269,10 @@ int ced_read_write_cancel(DEVICE_EXTENSION *pdx) } /*************************************************************************** -** InSelfTest - utility to check in self test. Return 1 for ST, 0 for not or +** ced_in_self_test - utility to check in self test. Return 1 for ST, 0 for not or ** a -ve error code if we failed for some reason. ***************************************************************************/ -static int InSelfTest(DEVICE_EXTENSION *pdx, unsigned int *pState) +static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) { unsigned int state, error; int iReturn = ced_get_state(pdx, &state, &error); /* see if in self-test */ @@ -326,12 +326,12 @@ bool Is1401(DEVICE_EXTENSION *pdx) pdx->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flag regardless! */ if (iReturn == 0) { /* if all is OK still */ unsigned int state; - iReturn = InSelfTest(pdx, &state); /* see if likely in self test */ + iReturn = ced_in_self_test(pdx, &state); /* see if likely in self test */ if (iReturn > 0) { /* do we need to wait for self-test? */ unsigned long ulTimeOut = jiffies + 30 * HZ; /* when to give up */ while ((iReturn > 0) && time_before(jiffies, ulTimeOut)) { schedule(); /* let other stuff run */ - iReturn = InSelfTest(pdx, &state); /* see if done yet */ + iReturn = ced_in_self_test(pdx, &state); /* see if done yet */ } } -- cgit From 6841e79ed682183d135e6c624af48638983a15a5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:00 +0200 Subject: staging: ced1401: rename Is1401() rename camel case function Is1401() to ced_is_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 12 ++++++------ drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index cb49eab7dbcc..1131443bebf5 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -284,7 +284,7 @@ static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) } /*************************************************************************** -** Is1401 - ALWAYS CALLED HOLDING THE io_mutex +** ced_is_1401 - ALWAYS CALLED HOLDING THE io_mutex ** ** Tests for the current state of the 1401. Sets sCurrentState: ** @@ -301,7 +301,7 @@ static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) ** ** Returns TRUE if a 1401 detected and OK, else FALSE ****************************************************************************/ -bool Is1401(DEVICE_EXTENSION *pdx) +bool ced_is_1401(DEVICE_EXTENSION *pdx) { int iReturn; dev_dbg(&pdx->interface->dev, "%s\n", __func__); @@ -353,7 +353,7 @@ bool Is1401(DEVICE_EXTENSION *pdx) ** all is OK. ** ** If any of the above conditions are not met, or if the state or type of the -** 1401 has changed since the previous test, the full Is1401 test is done, but +** 1401 has changed since the previous test, the full ced_is_1401 test is done, but ** only if bCanReset is also TRUE. ** ** The return value is TRUE if a useable 1401 is found, FALSE if not @@ -390,10 +390,10 @@ bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) } if (!bRet && bCanReset) { /* If all not OK, then */ - dev_info(&pdx->interface->dev, "%s: Is1401 %d %d %d %d\n", + dev_info(&pdx->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", __func__, bShortTest, pdx->sCurrentState, bTestBuff, pdx->bForceReset); - bRet = Is1401(pdx); /* do full test */ + bRet = ced_is_1401(pdx); /* do full test */ } return bRet; @@ -1054,7 +1054,7 @@ int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) if (gst.code < 0) { /* If we have a problem or finished */ /* If using the 2890 we should reset properly */ if ((pdx->nPipes == 4) && (pdx->s1401Type <= TYPEPOWER)) - Is1401(pdx); /* Get 1401 reset and OK */ + ced_is_1401(pdx); /* Get 1401 reset and OK */ else QuickCheck(pdx, true, true); /* Otherwise check without reset unless problems */ } diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 7b541e9dce67..c002880a2b01 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -213,7 +213,7 @@ extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsi extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); -extern bool Is1401(DEVICE_EXTENSION *pdx); +extern bool ced_is_1401(DEVICE_EXTENSION *pdx); extern bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset); extern int Reset1401(DEVICE_EXTENSION *pdx); extern int GetChar(DEVICE_EXTENSION *pdx); -- cgit From 93234ff46cc1ec683c1ffa58853ead0bc1b5cefb Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:01 +0200 Subject: staging: ced1401: make ced_is_1401() static Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- drivers/staging/ced1401/usb1401.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 1131443bebf5..d3791fc269a2 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -301,7 +301,7 @@ static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) ** ** Returns TRUE if a 1401 detected and OK, else FALSE ****************************************************************************/ -bool ced_is_1401(DEVICE_EXTENSION *pdx) +static bool ced_is_1401(DEVICE_EXTENSION *pdx) { int iReturn; dev_dbg(&pdx->interface->dev, "%s\n", __func__); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c002880a2b01..3d94559c9b87 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -213,7 +213,6 @@ extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsi extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); -extern bool ced_is_1401(DEVICE_EXTENSION *pdx); extern bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset); extern int Reset1401(DEVICE_EXTENSION *pdx); extern int GetChar(DEVICE_EXTENSION *pdx); -- cgit From 9629dbf142eb7527038edd5d8315e6c329b43d35 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:02 +0200 Subject: staging: ced1401: rename QuickCheck() rename camel case function QuickCheck() to ced_quick_check() and make it static Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 12 ++++++------ drivers/staging/ced1401/usb1401.h | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index d3791fc269a2..02085fa58da3 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -345,7 +345,7 @@ static bool ced_is_1401(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** QuickCheck - ALWAYS CALLED HOLDING THE io_mutex +** ced_quick_check - ALWAYS CALLED HOLDING THE io_mutex ** This is used to test for a 1401. It will try to do a quick check if all is ** OK, that is the 1401 was OK the last time it was asked, and there is no DMA ** in progress, and if the bTestBuff flag is set, the character buffers must be @@ -358,7 +358,7 @@ static bool ced_is_1401(DEVICE_EXTENSION *pdx) ** ** The return value is TRUE if a useable 1401 is found, FALSE if not */ -bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) +static bool ced_quick_check(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) { bool bRet = false; /* assume it will fail and we will reset */ bool bShortTest; @@ -407,9 +407,9 @@ bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) int Reset1401(DEVICE_EXTENSION *pdx) { mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - dev_dbg(&pdx->interface->dev, "%s: About to call QuickCheck\n", + dev_dbg(&pdx->interface->dev, "%s: About to call ced_quick_check\n", __func__); - QuickCheck(pdx, true, true); /* Check 1401, reset if not OK */ + ced_quick_check(pdx, true, true); /* Check 1401, reset if not OK */ mutex_unlock(&pdx->io_mutex); return U14ERR_NOERROR; } @@ -953,7 +953,7 @@ int StateOf1401(DEVICE_EXTENSION *pdx) int iReturn; mutex_lock(&pdx->io_mutex); - QuickCheck(pdx, false, false); /* get state up to date, no reset */ + ced_quick_check(pdx, false, false); /* get state up to date, no reset */ iReturn = pdx->sCurrentState; mutex_unlock(&pdx->io_mutex); @@ -1056,7 +1056,7 @@ int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) if ((pdx->nPipes == 4) && (pdx->s1401Type <= TYPEPOWER)) ced_is_1401(pdx); /* Get 1401 reset and OK */ else - QuickCheck(pdx, true, true); /* Otherwise check without reset unless problems */ + ced_quick_check(pdx, true, true); /* Otherwise check without reset unless problems */ } mutex_unlock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 3d94559c9b87..23c755795925 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -213,7 +213,6 @@ extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsi extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); -extern bool QuickCheck(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset); extern int Reset1401(DEVICE_EXTENSION *pdx); extern int GetChar(DEVICE_EXTENSION *pdx); extern int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n); -- cgit From 0e218f17172861cedb7637274bc7586447f21df7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:03 +0200 Subject: staging: ced1401: rename Reset1401() rename camel case function Reset1401() to ced_reset() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 02085fa58da3..112cc13dd3f2 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -400,11 +400,11 @@ static bool ced_quick_check(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanRese } /**************************************************************************** -** Reset1401 +** ced_reset ** ** Resets the 1401 and empties the i/o buffers *****************************************************************************/ -int Reset1401(DEVICE_EXTENSION *pdx) +int ced_reset(DEVICE_EXTENSION *pdx) { mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ dev_dbg(&pdx->interface->dev, "%s: About to call ced_quick_check\n", diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index b7e4255a3ab7..f8507b5725cf 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1233,7 +1233,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_RESET1401): - return Reset1401(pdx); + return ced_reset(pdx); case _IOC_NR(IOCTL_CED_GETCHAR): return GetChar(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 23c755795925..26c76f2b088f 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -213,7 +213,7 @@ extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsi extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); -extern int Reset1401(DEVICE_EXTENSION *pdx); +extern int ced_reset(DEVICE_EXTENSION *pdx); extern int GetChar(DEVICE_EXTENSION *pdx); extern int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n); extern int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -- cgit From 395b78e0ba1fa86eb92f11b58ba15f9f844bf593 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:04 +0200 Subject: staging: ced1401: rename GetString() rename camel case function GetString() to ced_get_string() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- drivers/staging/ced1401/usb1401.c | 4 ++-- drivers/staging/ced1401/usb1401.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 112cc13dd3f2..94244c47cef5 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -415,11 +415,11 @@ int ced_reset(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** GetChar +** ced_get_char ** ** Gets a single character from the 1401 ****************************************************************************/ -int GetChar(DEVICE_EXTENSION *pdx) +int ced_get_char(DEVICE_EXTENSION *pdx) { int iReturn = U14ERR_NOIN; /* assume we will get nothing */ mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ @@ -446,7 +446,7 @@ int GetChar(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** GetString +** ced_get_string ** ** Gets a string from the 1401. Returns chars up to the next CR or when ** there are no more to read or nowhere to put them. CR is translated to @@ -456,7 +456,7 @@ int GetChar(DEVICE_EXTENSION *pdx) ** returns the count of characters (including the terminator, or 0 if none ** or a negative error code. ****************************************************************************/ -int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n) +int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) { int nAvailable; /* character in the buffer */ int iReturn = U14ERR_NOIN; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index f8507b5725cf..6977dacaed43 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1236,7 +1236,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_reset(pdx); case _IOC_NR(IOCTL_CED_GETCHAR): - return GetChar(pdx); + return ced_get_char(pdx); case _IOC_NR(IOCTL_CED_SENDCHAR): return ced_send_char(pdx, (char)ulArg); @@ -1248,7 +1248,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return LineCount(pdx); case _IOC_NR(IOCTL_CED_GETSTRING(0)): - return GetString(pdx, (char __user *)ulArg, _IOC_SIZE(cmd)); + return ced_get_string(pdx, (char __user *)ulArg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_SETTRANSFER): return SetTransfer(pdx, (struct transfer_area_desc __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 26c76f2b088f..9c409f3e36f4 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -214,8 +214,8 @@ extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); extern int ced_reset(DEVICE_EXTENSION *pdx); -extern int GetChar(DEVICE_EXTENSION *pdx); -extern int GetString(DEVICE_EXTENSION *pdx, char __user *pUser, int n); +extern int ced_get_char(DEVICE_EXTENSION *pdx); +extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); extern int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); -- cgit From 1de8f0a972118a0704e8f11a1e676e79e617e175 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:05 +0200 Subject: staging: ced1401: rename Stat1401() rename camel case function Stat1401() to ced_stat_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 94244c47cef5..306213668b53 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -516,7 +516,7 @@ int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) /******************************************************************************* ** Get count of characters in the inout buffer. *******************************************************************************/ -int Stat1401(DEVICE_EXTENSION *pdx) +int ced_stat_1401(DEVICE_EXTENSION *pdx) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 6977dacaed43..bcb0ce0c6a9b 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1242,7 +1242,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_send_char(pdx, (char)ulArg); case _IOC_NR(IOCTL_CED_STAT1401): - return Stat1401(pdx); + return ced_stat_1401(pdx); case _IOC_NR(IOCTL_CED_LINECOUNT): return LineCount(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 9c409f3e36f4..707290f68953 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -219,7 +219,7 @@ extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); extern int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); -extern int Stat1401(DEVICE_EXTENSION *pdx); +extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int LineCount(DEVICE_EXTENSION *pdx); extern int GetOutBufSpace(DEVICE_EXTENSION *pdx); extern int GetTransfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); -- cgit From 5dc137dd0920e54ab343e6d4b2c591977a86fe5b Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:06 +0200 Subject: staging: ced1401: rename LineCount() rename camel case function LineCount() to ced_line_count() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 306213668b53..09a5b7375f81 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -528,13 +528,13 @@ int ced_stat_1401(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** LineCount +** ced_line_count ** ** Returns the number of newline chars in the buffer. There is no need for ** any fancy interlocks as we only read the interrupt routine data, and the ** system is arranged so nothing can be destroyed. ****************************************************************************/ -int LineCount(DEVICE_EXTENSION *pdx) +int ced_line_count(DEVICE_EXTENSION *pdx) { int iReturn = 0; /* will be count of line ends */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index bcb0ce0c6a9b..4cf8b1346586 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1245,7 +1245,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_stat_1401(pdx); case _IOC_NR(IOCTL_CED_LINECOUNT): - return LineCount(pdx); + return ced_line_count(pdx); case _IOC_NR(IOCTL_CED_GETSTRING(0)): return ced_get_string(pdx, (char __user *)ulArg, _IOC_SIZE(cmd)); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 707290f68953..86c8233a2625 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -220,7 +220,7 @@ extern int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user * extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); extern int ced_stat_1401(DEVICE_EXTENSION *pdx); -extern int LineCount(DEVICE_EXTENSION *pdx); +extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int GetOutBufSpace(DEVICE_EXTENSION *pdx); extern int GetTransfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int KillIO1401(DEVICE_EXTENSION *pdx); -- cgit From 6e5155d0b81204df3a2b00741b789d5ee118f19f Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:07 +0200 Subject: staging: ced1401: rename GetOutBufSpace() rename camel case function GetOutBufSpace() to ced_get_out_buf_space() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 09a5b7375f81..93c5d6470911 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -562,11 +562,11 @@ int ced_line_count(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** GetOutBufSpace +** ced_get_out_buf_space ** ** Gets the space in the output buffer. Called from user code. *****************************************************************************/ -int GetOutBufSpace(DEVICE_EXTENSION *pdx) +int ced_get_out_buf_space(DEVICE_EXTENSION *pdx) { int iReturn; mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 4cf8b1346586..20b89812dac6 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1260,7 +1260,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return SetEvent(pdx, (struct transfer_event __user *) ulArg); case _IOC_NR(IOCTL_CED_GETOUTBUFSPACE): - return GetOutBufSpace(pdx); + return ced_get_out_buf_space(pdx); case _IOC_NR(IOCTL_CED_GETBASEADDRESS): return -1; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 86c8233a2625..e9a87f50c6f4 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -221,7 +221,7 @@ extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int ced_line_count(DEVICE_EXTENSION *pdx); -extern int GetOutBufSpace(DEVICE_EXTENSION *pdx); +extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); extern int GetTransfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int KillIO1401(DEVICE_EXTENSION *pdx); extern int BlkTransState(DEVICE_EXTENSION *pdx); -- cgit From 119f4cf0948f7c8b104e3f0d3525b210cdd9537e Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:08 +0200 Subject: staging: ced1401: rename ClearArea() rename camel case function ClearArea() to ced_clear_area() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 93c5d6470911..df35b6d4ca91 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -579,12 +579,12 @@ int ced_get_out_buf_space(DEVICE_EXTENSION *pdx) /**************************************************************************** ** -** ClearArea +** ced_clear_area ** ** Clears up a transfer area. This is always called in the context of a user ** request, never from a call-back. ****************************************************************************/ -int ClearArea(DEVICE_EXTENSION *pdx, int nArea) +int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) { int iReturn = U14ERR_NOERROR; @@ -674,7 +674,7 @@ static int SetArea(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, struct page **pPages = NULL; /* space for page tables */ int nPages = 0; /* and number of pages */ - int iReturn = ClearArea(pdx, nArea); /* see if OK to use this area */ + int iReturn = ced_clear_area(pdx, nArea); /* see if OK to use this area */ if ((iReturn != U14ERR_NOTSET) && /* if not area unused and... */ (iReturn != U14ERR_NOERROR)) /* ...not all OK, then... */ return iReturn; /* ...we cannot use this area */ @@ -766,7 +766,7 @@ int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea) { int iReturn; mutex_lock(&pdx->io_mutex); - iReturn = ClearArea(pdx, nArea); + iReturn = ced_clear_area(pdx, nArea); mutex_unlock(&pdx->io_mutex); return iReturn; } diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 20b89812dac6..f277aecfbc80 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1492,7 +1492,7 @@ static void ced_disconnect(struct usb_interface *interface) mutex_lock(&pdx->io_mutex); /* stop more I/O starting while... */ ced_draw_down(pdx); /* ...wait for then kill any io */ for (i = 0; i < MAX_TRANSAREAS; ++i) { - int iErr = ClearArea(pdx, i); /* ...release any used memory */ + int iErr = ced_clear_area(pdx, i); /* ...release any used memory */ if (iErr == U14ERR_UNLOCKFAIL) dev_err(&pdx->interface->dev, "%s: Area %d was in used\n", __func__, i); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index e9a87f50c6f4..2a9b6632ca91 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -208,7 +208,7 @@ extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short w unsigned int dwOffs, unsigned int dwLen); /* in ced_ioc.c */ -extern int ClearArea(DEVICE_EXTENSION *pdx, int nArea); +extern int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea); extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); -- cgit From bb19c8c39c6e3786520bdcd95e62736c57c6e330 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:09 +0200 Subject: staging: ced1401: rename SetArea() rename camel case function SetArea() to ced_set_area() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index df35b6d4ca91..287b2553cd3a 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -655,12 +655,12 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) } /**************************************************************************** -** SetArea +** ced_set_area ** ** Sets up a transfer area - the functional part. Called by both ** SetTransfer and SetCircular. ****************************************************************************/ -static int SetArea(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, +static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, unsigned int dwLength, bool bCircular, bool bCircToHost) { /* Start by working out the page aligned start of the area and the size */ @@ -751,7 +751,7 @@ int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ iReturn = - SetArea(pdx, td.wAreaNum, + ced_set_area(pdx, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, false, false); mutex_unlock(&pdx->io_mutex); @@ -1336,7 +1336,7 @@ int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ iReturn = - SetArea(pdx, td.wAreaNum, + ced_set_area(pdx, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, true, bToHost); mutex_unlock(&pdx->io_mutex); -- cgit From 991037533f1de5953339e7c100aa4419772e14f9 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:10 +0200 Subject: staging: ced1401: rename SetTransfer() rename camel case function SetTransfer() to ced_set_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 287b2553cd3a..ec08069ced66 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -658,7 +658,7 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) ** ced_set_area ** ** Sets up a transfer area - the functional part. Called by both -** SetTransfer and SetCircular. +** ced_set_transfer and SetCircular. ****************************************************************************/ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, unsigned int dwLength, bool bCircular, bool bCircToHost) @@ -730,13 +730,13 @@ error: } /**************************************************************************** -** SetTransfer +** ced_set_transfer ** ** Sets up a transfer area record. If the area is already set, we attempt to ** unset it. Unsetting will fail if the area is booked, and a transfer to that ** area is in progress. Otherwise, we will release the area and re-assign it. ****************************************************************************/ -int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) +int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) { int iReturn; struct transfer_area_desc td; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index f277aecfbc80..4f71330f0851 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1251,7 +1251,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_get_string(pdx, (char __user *)ulArg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_SETTRANSFER): - return SetTransfer(pdx, (struct transfer_area_desc __user *) ulArg); + return ced_set_transfer(pdx, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_UNSETTRANSFER): return UnsetTransfer(pdx, (int)ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 2a9b6632ca91..707074857786 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -216,7 +216,7 @@ extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); extern int ced_reset(DEVICE_EXTENSION *pdx); extern int ced_get_char(DEVICE_EXTENSION *pdx); extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); -extern int SetTransfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); +extern int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); extern int ced_stat_1401(DEVICE_EXTENSION *pdx); -- cgit From 0f6f679a15989f857f0ac1e42c35b237364d6969 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:11 +0200 Subject: staging: ced1401: rename UnsetTransfer() rename camel case function UnsetTransfer() to ced_unset_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index ec08069ced66..124fffa22bab 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -762,7 +762,7 @@ int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT ** UnSetTransfer ** Erases a transfer area record ****************************************************************************/ -int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea) +int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea) { int iReturn; mutex_lock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 4f71330f0851..3e7c0c1a54f5 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1254,7 +1254,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_set_transfer(pdx, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_UNSETTRANSFER): - return UnsetTransfer(pdx, (int)ulArg); + return ced_unset_transfer(pdx, (int)ulArg); case _IOC_NR(IOCTL_CED_SETEVENT): return SetEvent(pdx, (struct transfer_event __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 707074857786..ff2526100672 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -217,7 +217,7 @@ extern int ced_reset(DEVICE_EXTENSION *pdx); extern int ced_get_char(DEVICE_EXTENSION *pdx); extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); extern int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -extern int UnsetTransfer(DEVICE_EXTENSION *pdx, int nArea); +extern int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea); extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int ced_line_count(DEVICE_EXTENSION *pdx); -- cgit From 617bfec33c6cdef1f9ddb67beed059f11cb2a089 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:12 +0200 Subject: staging: ced1401: rename SetEvent() rename camel case function SetEvent() to ced_set_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 124fffa22bab..6210dde70e11 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -772,14 +772,14 @@ int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea) } /**************************************************************************** -** SetEvent +** ced_set_event ** Creates an event that we can test for based on a transfer to/from an area. ** The area must be setup for a transfer. We attempt to simulate the Windows ** driver behavior for events (as we don't actually use them), which is to ** pretend that whatever the user asked for was achieved, so we return 1 if ** try to create one, and 0 if they ask to remove (assuming all else was OK). ****************************************************************************/ -int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) +int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) { int iReturn = U14ERR_NOERROR; struct transfer_event te; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 3e7c0c1a54f5..c9b01bef4515 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1257,7 +1257,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_unset_transfer(pdx, (int)ulArg); case _IOC_NR(IOCTL_CED_SETEVENT): - return SetEvent(pdx, (struct transfer_event __user *) ulArg); + return ced_set_event(pdx, (struct transfer_event __user *) ulArg); case _IOC_NR(IOCTL_CED_GETOUTBUFSPACE): return ced_get_out_buf_space(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index ff2526100672..a1968a8088df 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -218,7 +218,7 @@ extern int ced_get_char(DEVICE_EXTENSION *pdx); extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); extern int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea); -extern int SetEvent(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); +extern int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); -- cgit From 1971a00e5d6f779428bbc2cc147fd31c39e10ed5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:13 +0200 Subject: staging: ced1401: rename WaitEvent() rename camel case function WaitEvent() to ced_wait_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 6210dde70e11..5972fd0c4f8b 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -809,12 +809,12 @@ int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) } /**************************************************************************** -** WaitEvent +** ced_wait_event ** Sleep the process with a timeout waiting for an event. Returns the number ** of times that a block met the event condition since we last cleared it or ** 0 if timed out, or -ve error (bad area or not set, or signal). ****************************************************************************/ -int WaitEvent(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) +int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) { int iReturn; if ((unsigned)nArea >= MAX_TRANSAREAS) @@ -857,7 +857,7 @@ int WaitEvent(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) /**************************************************************************** ** TestEvent -** Test the event to see if a WaitEvent would return immediately. Returns the +** Test the event to see if a ced_wait_event would return immediately. Returns the ** number of times a block completed since the last call, or 0 if none or a ** negative error. ****************************************************************************/ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index c9b01bef4515..1e1f6dcb48cd 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1325,7 +1325,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return FreeCircBlock(pdx, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_WAITEVENT): - return WaitEvent(pdx, (int)(ulArg & 0xff), (int)(ulArg >> 8)); + return ced_wait_event(pdx, (int)(ulArg & 0xff), (int)(ulArg >> 8)); case _IOC_NR(IOCTL_CED_TESTEVENT): return TestEvent(pdx, (int)ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index a1968a8088df..3a6db9ca3e13 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -239,6 +239,6 @@ extern int DbgStopLoop(DEVICE_EXTENSION *pdx); extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -extern int WaitEvent(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); +extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); extern int TestEvent(DEVICE_EXTENSION *pdx, int nArea); #endif -- cgit From b76530bba88fa43ece9caa1f5e46c91b793012cb Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:14 +0200 Subject: staging: ced1401: rename TestEvent() rename camel case function TestEvent() to ced_test_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 5972fd0c4f8b..f868a65292ca 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -856,12 +856,12 @@ int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) } /**************************************************************************** -** TestEvent +** ced_test_event ** Test the event to see if a ced_wait_event would return immediately. Returns the ** number of times a block completed since the last call, or 0 if none or a ** negative error. ****************************************************************************/ -int TestEvent(DEVICE_EXTENSION *pdx, int nArea) +int ced_test_event(DEVICE_EXTENSION *pdx, int nArea) { int iReturn; if ((unsigned)nArea >= MAX_TRANSAREAS) diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 1e1f6dcb48cd..25f4a47744b6 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1328,7 +1328,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_wait_event(pdx, (int)(ulArg & 0xff), (int)(ulArg >> 8)); case _IOC_NR(IOCTL_CED_TESTEVENT): - return TestEvent(pdx, (int)ulArg); + return ced_test_event(pdx, (int)ulArg); default: return U14ERR_NO_SUCH_FN; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 3a6db9ca3e13..11ffb5921a92 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -240,5 +240,5 @@ extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user * extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); -extern int TestEvent(DEVICE_EXTENSION *pdx, int nArea); +extern int ced_test_event(DEVICE_EXTENSION *pdx, int nArea); #endif -- cgit From 3d012b01a84d9de6eb1ba4db13911047ba171950 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:15 +0200 Subject: staging: ced1401: rename GetTransfer() rename camel case function GetTransfer() to ced_get_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index f868a65292ca..2901552f1329 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -879,10 +879,10 @@ int ced_test_event(DEVICE_EXTENSION *pdx, int nArea) } /**************************************************************************** -** GetTransferInfo +** ced_get_transferInfo ** Puts the current state of the 1401 in a TGET_TX_BLOCK. *****************************************************************************/ -int GetTransfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) +int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) { int iReturn = U14ERR_NOERROR; unsigned int dwIdent; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 25f4a47744b6..2e4b20100edf 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1269,7 +1269,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return (2 << 24) | (DRIVERMAJREV << 16) | DRIVERMINREV; /* USB | MAJOR | MINOR */ case _IOC_NR(IOCTL_CED_GETTRANSFER): - return GetTransfer(pdx, (TGET_TX_BLOCK __user *) ulArg); + return ced_get_transfer(pdx, (TGET_TX_BLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_KILLIO1401): return KillIO1401(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 11ffb5921a92..85f5ec6a1db7 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -222,7 +222,7 @@ extern int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pT extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); -extern int GetTransfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); +extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int KillIO1401(DEVICE_EXTENSION *pdx); extern int BlkTransState(DEVICE_EXTENSION *pdx); extern int StateOf1401(DEVICE_EXTENSION *pdx); -- cgit From d2c4040b722e9953e8ad7213d3362acd3fa64c0a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 11:58:16 +0200 Subject: staging: ced1401: rename KillIO1401() rename camel case function KillIO1401() to ced_kill_io() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 2901552f1329..30162a896646 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -917,11 +917,11 @@ int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) } /**************************************************************************** -** KillIO1401 +** ced_kill_io ** ** Empties the host i/o buffers ****************************************************************************/ -int KillIO1401(DEVICE_EXTENSION *pdx) +int ced_kill_io(DEVICE_EXTENSION *pdx) { dev_dbg(&pdx->interface->dev, "%s\n", __func__); mutex_lock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 2e4b20100edf..b83f8e11791a 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1272,7 +1272,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_get_transfer(pdx, (TGET_TX_BLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_KILLIO1401): - return KillIO1401(pdx); + return ced_kill_io(pdx); case _IOC_NR(IOCTL_CED_STATEOF1401): return StateOf1401(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 85f5ec6a1db7..157bce091c5a 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -223,7 +223,7 @@ extern int ced_stat_1401(DEVICE_EXTENSION *pdx); extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); -extern int KillIO1401(DEVICE_EXTENSION *pdx); +extern int ced_kill_io(DEVICE_EXTENSION *pdx); extern int BlkTransState(DEVICE_EXTENSION *pdx); extern int StateOf1401(DEVICE_EXTENSION *pdx); extern int StartSelfTest(DEVICE_EXTENSION *pdx); -- cgit From 9ee52ef6ada93d6af850f011495f97a1d66a0f18 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:29 +0200 Subject: staging: ced1401: remove unused func BlkTransState Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 12 ------------ drivers/staging/ced1401/usb1401.h | 1 - 2 files changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 30162a896646..f05cef5c6204 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -931,18 +931,6 @@ int ced_kill_io(DEVICE_EXTENSION *pdx) return U14ERR_NOERROR; } -/**************************************************************************** -** BlkTransState -** Returns a 0 or a 1 for whether DMA is happening. No point holding a mutex -** for this as it only does one read. -*****************************************************************************/ -int BlkTransState(DEVICE_EXTENSION *pdx) -{ - int iReturn = pdx->dwDMAFlag != MODE_CHAR; - dev_dbg(&pdx->interface->dev, "%s: %d\n", __func__, iReturn); - return iReturn; -} - /**************************************************************************** ** StateOf1401 ** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 157bce091c5a..d75a81303d82 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -224,7 +224,6 @@ extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int ced_kill_io(DEVICE_EXTENSION *pdx); -extern int BlkTransState(DEVICE_EXTENSION *pdx); extern int StateOf1401(DEVICE_EXTENSION *pdx); extern int StartSelfTest(DEVICE_EXTENSION *pdx); extern int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); -- cgit From 21d46fc4ed241fd17f61210e46d79daad9494680 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:30 +0200 Subject: staging: ced1401: rename StateOf1401() rename camel case function StateOf1401() to ced_state_of_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index f05cef5c6204..cd16bd5548a9 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -932,11 +932,11 @@ int ced_kill_io(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** StateOf1401 +** ced_state_of_1401 ** ** Puts the current state of the 1401 in the Irp return buffer. *****************************************************************************/ -int StateOf1401(DEVICE_EXTENSION *pdx) +int ced_state_of_1401(DEVICE_EXTENSION *pdx) { int iReturn; mutex_lock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index b83f8e11791a..ede5e6afaafd 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1275,7 +1275,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_kill_io(pdx); case _IOC_NR(IOCTL_CED_STATEOF1401): - return StateOf1401(pdx); + return ced_state_of_1401(pdx); case _IOC_NR(IOCTL_CED_GRAB1401): case _IOC_NR(IOCTL_CED_FREE1401): diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index d75a81303d82..c15302d8234b 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -224,7 +224,7 @@ extern int ced_line_count(DEVICE_EXTENSION *pdx); extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int ced_kill_io(DEVICE_EXTENSION *pdx); -extern int StateOf1401(DEVICE_EXTENSION *pdx); +extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); extern int StartSelfTest(DEVICE_EXTENSION *pdx); extern int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); extern int TypeOf1401(DEVICE_EXTENSION *pdx); -- cgit From 2b7e29e592adaefc95138dffed527592aa62de88 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:31 +0200 Subject: staging: ced1401: rename StartSelfTest() rename camel case function StartSelfTest() to ced_start_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index cd16bd5548a9..01ff639b133b 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -951,12 +951,12 @@ int ced_state_of_1401(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** StartSelfTest +** ced_start_self_test ** ** Initiates a self-test cycle. The assumption is that we have no interrupts ** active, so we should make sure that this is the case. *****************************************************************************/ -int StartSelfTest(DEVICE_EXTENSION *pdx) +int ced_start_self_test(DEVICE_EXTENSION *pdx) { int nGot; mutex_lock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index ede5e6afaafd..292e8bf33de1 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1282,7 +1282,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return U14ERR_NOERROR; case _IOC_NR(IOCTL_CED_STARTSELFTEST): - return StartSelfTest(pdx); + return ced_start_self_test(pdx); case _IOC_NR(IOCTL_CED_CHECKSELFTEST): return CheckSelfTest(pdx, (TGET_SELFTEST __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c15302d8234b..73dc750c824d 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -225,7 +225,7 @@ extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int ced_kill_io(DEVICE_EXTENSION *pdx); extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); -extern int StartSelfTest(DEVICE_EXTENSION *pdx); +extern int ced_start_self_test(DEVICE_EXTENSION *pdx); extern int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); extern int TypeOf1401(DEVICE_EXTENSION *pdx); extern int TransferFlags(DEVICE_EXTENSION *pdx); -- cgit From 4eb66246f321677391d930092677559d8dc51efb Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:32 +0200 Subject: staging: ced1401: rename CheckSelfTest() rename camel case function CheckSelfTest() to ced_check_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 01ff639b133b..1cc75bf55643 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -981,11 +981,11 @@ int ced_start_self_test(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** CheckSelfTest +** ced_check_self_test ** ** Check progress of a self-test cycle ****************************************************************************/ -int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) +int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) { unsigned int state, error; int iReturn; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 292e8bf33de1..3f82875f491e 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1285,7 +1285,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_start_self_test(pdx); case _IOC_NR(IOCTL_CED_CHECKSELFTEST): - return CheckSelfTest(pdx, (TGET_SELFTEST __user *) ulArg); + return ced_check_self_test(pdx, (TGET_SELFTEST __user *) ulArg); case _IOC_NR(IOCTL_CED_TYPEOF1401): return TypeOf1401(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 73dc750c824d..0c7ad233a7c5 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -226,7 +226,7 @@ extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); extern int ced_kill_io(DEVICE_EXTENSION *pdx); extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); extern int ced_start_self_test(DEVICE_EXTENSION *pdx); -extern int CheckSelfTest(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); +extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); extern int TypeOf1401(DEVICE_EXTENSION *pdx); extern int TransferFlags(DEVICE_EXTENSION *pdx); extern int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -- cgit From 9056249f275914207ccafa46c7688e3749f499cf Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:33 +0200 Subject: staging: ced1401: rename TypeOf1401() rename camel case function TypeOf1401() to ced_type_of_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 1cc75bf55643..6b31c9f33030 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1055,11 +1055,11 @@ int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) } /**************************************************************************** -** TypeOf1401 +** ced_type_of_1401 ** ** Returns code for standard, plus, micro1401, power1401 or none ****************************************************************************/ -int TypeOf1401(DEVICE_EXTENSION *pdx) +int ced_type_of_1401(DEVICE_EXTENSION *pdx) { int iReturn = TYPEUNKNOWN; mutex_lock(&pdx->io_mutex); diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 3f82875f491e..f3577b91d823 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1288,7 +1288,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_check_self_test(pdx, (TGET_SELFTEST __user *) ulArg); case _IOC_NR(IOCTL_CED_TYPEOF1401): - return TypeOf1401(pdx); + return ced_type_of_1401(pdx); case _IOC_NR(IOCTL_CED_TRANSFERFLAGS): return TransferFlags(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 0c7ad233a7c5..19d7296a18a9 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -227,7 +227,7 @@ extern int ced_kill_io(DEVICE_EXTENSION *pdx); extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); extern int ced_start_self_test(DEVICE_EXTENSION *pdx); extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); -extern int TypeOf1401(DEVICE_EXTENSION *pdx); +extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); extern int TransferFlags(DEVICE_EXTENSION *pdx); extern int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -- cgit From 4b8c94c918d0a5909dbab86d6bbea014eb322de5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:34 +0200 Subject: staging: ced1401: rename TransferFlags() rename camel case function TransferFlags() to ced_transfer_flags() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 6b31c9f33030..3e99758701e1 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1088,11 +1088,11 @@ int ced_type_of_1401(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** TransferFlags +** ced_transfer_flags ** ** Returns flags on block transfer abilities ****************************************************************************/ -int TransferFlags(DEVICE_EXTENSION *pdx) +int ced_transfer_flags(DEVICE_EXTENSION *pdx) { int iReturn = U14TF_MULTIA | U14TF_DIAG | /* we always have multiple DMA area */ U14TF_NOTIFY | U14TF_CIRCTH; /* diagnostics, notify and circular */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index f3577b91d823..1110eef29a99 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1291,7 +1291,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_type_of_1401(pdx); case _IOC_NR(IOCTL_CED_TRANSFERFLAGS): - return TransferFlags(pdx); + return ced_transfer_flags(pdx); case _IOC_NR(IOCTL_CED_DBGPEEK): return DbgPeek(pdx, (TDBGBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 19d7296a18a9..80e94986cf54 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -228,7 +228,7 @@ extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); extern int ced_start_self_test(DEVICE_EXTENSION *pdx); extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); -extern int TransferFlags(DEVICE_EXTENSION *pdx); +extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); extern int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -- cgit From d783de8dd490aa3e7c91935fc20691cb1e2910cd Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:35 +0200 Subject: staging: ced1401: rename DbgCmd1401() rename camel case function DbgCmd1401() to ced_dbg_cmd() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 3e99758701e1..7031dce63281 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1106,11 +1106,11 @@ int ced_transfer_flags(DEVICE_EXTENSION *pdx) } /*************************************************************************** -** DbgCmd1401 +** ced_dbg_cmd ** Issues a debug\diagnostic command to the 1401 along with a 32-bit datum ** This is a utility command used for dbg operations. */ -static int DbgCmd1401(DEVICE_EXTENSION *pdx, unsigned char cmd, +static int ced_dbg_cmd(DEVICE_EXTENSION *pdx, unsigned char cmd, unsigned int data) { int iReturn; @@ -1143,13 +1143,13 @@ int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = DbgCmd1401(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_PEEK, 0); + iReturn = ced_dbg_cmd(pdx, DB_PEEK, 0); mutex_unlock(&pdx->io_mutex); return iReturn; @@ -1172,13 +1172,13 @@ int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = DbgCmd1401(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_POKE, db.iData); + iReturn = ced_dbg_cmd(pdx, DB_POKE, db.iData); mutex_unlock(&pdx->io_mutex); return iReturn; @@ -1201,17 +1201,17 @@ int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = DbgCmd1401(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_SETDEF, db.iDefault); + iReturn = ced_dbg_cmd(pdx, DB_SETDEF, db.iDefault); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_SETMASK, db.iMask); + iReturn = ced_dbg_cmd(pdx, DB_SETMASK, db.iMask); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_RAMPD, 0); + iReturn = ced_dbg_cmd(pdx, DB_RAMPD, 0); mutex_unlock(&pdx->io_mutex); return iReturn; @@ -1233,15 +1233,15 @@ int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) mutex_lock(&pdx->io_mutex); dev_dbg(&pdx->interface->dev, "%s\n", __func__); - iReturn = DbgCmd1401(pdx, DB_SETDEF, db.iDefault); + iReturn = ced_dbg_cmd(pdx, DB_SETDEF, db.iDefault); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_SETMASK, db.iMask); + iReturn = ced_dbg_cmd(pdx, DB_SETMASK, db.iMask); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = DbgCmd1401(pdx, DB_RAMPA, 0); + iReturn = ced_dbg_cmd(pdx, DB_RAMPA, 0); mutex_unlock(&pdx->io_mutex); return iReturn; -- cgit From 3c625b6ae07953cf2ba0bcba56ea0a574e97dd81 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:36 +0200 Subject: staging: ced1401: rename DbgPeek() rename camel case function DbgPeek() to ced_dbg_peek() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 7031dce63281..e97bd7574b83 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1128,11 +1128,11 @@ static int ced_dbg_cmd(DEVICE_EXTENSION *pdx, unsigned char cmd, } /**************************************************************************** -** DbgPeek +** ced_dbg_peek ** ** Execute the diagnostic peek operation. Uses address, width and repeats. ****************************************************************************/ -int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 1110eef29a99..95c89035ef5a 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1294,7 +1294,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_transfer_flags(pdx); case _IOC_NR(IOCTL_CED_DBGPEEK): - return DbgPeek(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_peek(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGPOKE): return DbgPoke(pdx, (TDBGBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 80e94986cf54..06540afcb2d0 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -229,7 +229,7 @@ extern int ced_start_self_test(DEVICE_EXTENSION *pdx); extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); -extern int DbgPeek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); +extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -- cgit From d8d66ea4c9a6f14eb4675bee0d01c891541a9efc Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:37 +0200 Subject: staging: ced1401: rename DbgPoke() rename camel case function DbgPoke() to ced_dbg_poke() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index e97bd7574b83..3dfcbbdd4640 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1156,12 +1156,12 @@ int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) } /**************************************************************************** -** DbgPoke +** ced_dbg_poke ** ** Execute the diagnostic poke operation. Parameters are in the CSBLOCK struct ** in order address, size, repeats and value to poke. ****************************************************************************/ -int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 95c89035ef5a..538551a93987 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1297,7 +1297,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_peek(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGPOKE): - return DbgPoke(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_poke(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPDATA): return DbgRampData(pdx, (TDBGBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 06540afcb2d0..cf84e9d85bfa 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -230,7 +230,7 @@ extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int DbgPoke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); +extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -- cgit From d5e850727261f47385bc3e5493b621f2e97b911c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:38 +0200 Subject: staging: ced1401: rename DbgRampData() rename camel case function DbgRampData() to ced_dbg_ramp_data() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 3dfcbbdd4640..3ccad9dc536f 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1185,12 +1185,12 @@ int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) } /**************************************************************************** -** DbgRampData +** ced_dbg_ramp_data ** ** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK struct ** in order address, default, enable mask, size and repeats. ****************************************************************************/ -int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 538551a93987..6286c822e187 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1300,7 +1300,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_poke(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPDATA): - return DbgRampData(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_data(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPADDR): return DbgRampAddr(pdx, (TDBGBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index cf84e9d85bfa..09b806ecf74c 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -231,7 +231,7 @@ extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int DbgRampData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); +extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgStopLoop(DEVICE_EXTENSION *pdx); -- cgit From 9f740cf62f405abbadbe87dfcb1ca7c600a89c46 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:39 +0200 Subject: staging: ced1401: rename DbgRampAddr() rename camel case function DbgRampAddr() to ced_dbg_ramp_addr() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 3ccad9dc536f..7317ba5231fe 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1218,11 +1218,11 @@ int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) } /**************************************************************************** -** DbgRampAddr +** ced_dbg_ramp_addr ** ** Execute the diagnostic ramp address operation ****************************************************************************/ -int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 6286c822e187..a3422bee8b60 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1303,7 +1303,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_ramp_data(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPADDR): - return DbgRampAddr(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_addr(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGGETDATA): return DbgGetData(pdx, (TDBGBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 09b806ecf74c..b9164930b36d 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -232,7 +232,7 @@ extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int DbgRampAddr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); +extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgStopLoop(DEVICE_EXTENSION *pdx); extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -- cgit From 9527a1a4d40c2ea2e8f85a13560f6b5414288e51 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:40 +0200 Subject: staging: ced1401: rename DbgGetData() rename camel case function DbgGetData() to ced_dbg_get_data() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 7317ba5231fe..693d51b62aaf 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1248,11 +1248,11 @@ int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) } /**************************************************************************** -** DbgGetData +** ced_dbg_get_data ** ** Retrieve the data resulting from the last debug Peek operation ****************************************************************************/ -int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index a3422bee8b60..904f747b4c03 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1306,7 +1306,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_ramp_addr(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGGETDATA): - return DbgGetData(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_get_data(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGSTOPLOOP): return DbgStopLoop(pdx); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index b9164930b36d..677b3731e48d 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -233,7 +233,7 @@ extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int DbgGetData(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); +extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int DbgStopLoop(DEVICE_EXTENSION *pdx); extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -- cgit From 2cf025938d45468f5172a8ef797c3adf17cd34dd Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:41 +0200 Subject: staging: ced1401: rename DbgStopLoop() rename camel case function DbgStopLoop() to ced_dbg_stop_loop() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 693d51b62aaf..e46a7b656870 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1280,12 +1280,12 @@ int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) } /**************************************************************************** -** DbgStopLoop +** ced_dbg_stop_loop ** ** Stop any never-ending debug loop, we just call ced_get_state for USB ** ****************************************************************************/ -int DbgStopLoop(DEVICE_EXTENSION *pdx) +int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx) { int iReturn; unsigned int uState, uErr; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 904f747b4c03..3c65c550585b 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1309,7 +1309,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_get_data(pdx, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGSTOPLOOP): - return DbgStopLoop(pdx); + return ced_dbg_stop_loop(pdx); case _IOC_NR(IOCTL_CED_FULLRESET): pdx->bForceReset = true; /* Set a flag for a full reset */ diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 677b3731e48d..8f7b7e3c832b 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -234,7 +234,7 @@ extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int DbgStopLoop(DEVICE_EXTENSION *pdx); +extern int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx); extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -- cgit From 31530abba10578b65e89716f1129051e7fa9eb2b Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:42 +0200 Subject: staging: ced1401: rename SetCircular() rename camel case function SetCircular() to ced_set_circular() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index e46a7b656870..7b6ea79839b6 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -658,7 +658,7 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) ** ced_set_area ** ** Sets up a transfer area - the functional part. Called by both -** ced_set_transfer and SetCircular. +** ced_set_transfer and ced_set_circular. ****************************************************************************/ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, unsigned int dwLength, bool bCircular, bool bCircToHost) @@ -1299,14 +1299,14 @@ int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx) } /**************************************************************************** -** SetCircular +** ced_set_circular ** ** Sets up a transfer area record for circular transfers. If the area is ** already set, we attempt to unset it. Unsetting will fail if the area is ** booked and a transfer to that area is in progress. Otherwise, we will ** release the area and re-assign it. ****************************************************************************/ -int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) +int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) { int iReturn; bool bToHost; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 3c65c550585b..ddaa06f4b632 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1316,7 +1316,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) break; case _IOC_NR(IOCTL_CED_SETCIRCULAR): - return SetCircular(pdx, (struct transfer_area_desc __user *) ulArg); + return ced_set_circular(pdx, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_GETCIRCBLOCK): return GetCircBlock(pdx, (TCIRCBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 8f7b7e3c832b..200c0dae9c5c 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -235,7 +235,7 @@ extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx); -extern int SetCircular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); +extern int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); -- cgit From 24d71e9d24744a3c2d3ea9140b1c8cb17646a846 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:43 +0200 Subject: staging: ced1401: rename GetCircBlock() rename camel case function GetCircBlock() to ced_get_circ_block() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 7b6ea79839b6..113d4c5de23b 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1332,11 +1332,11 @@ int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT } /**************************************************************************** -** GetCircBlock +** ced_get_circ_block ** ** Return the next available block of circularly-transferred data. ****************************************************************************/ -int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) +int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) { int iReturn = U14ERR_NOERROR; unsigned int nArea; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index ddaa06f4b632..554e8446261f 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1319,7 +1319,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_set_circular(pdx, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_GETCIRCBLOCK): - return GetCircBlock(pdx, (TCIRCBLOCK __user *) ulArg); + return ced_get_circ_block(pdx, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_FREECIRCBLOCK): return FreeCircBlock(pdx, (TCIRCBLOCK __user *) ulArg); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 200c0dae9c5c..6fa4e598ec3f 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -236,7 +236,7 @@ extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx); extern int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -extern int GetCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); +extern int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); extern int ced_test_event(DEVICE_EXTENSION *pdx, int nArea); -- cgit From 9db5b4e98c207cc6f743d838c60e0b4eb763f678 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:44 +0200 Subject: staging: ced1401: rename FreeCircBlock() rename camel case function FreeCircBlock() to ced_free_circ_block() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 4 ++-- drivers/staging/ced1401/usb1401.c | 2 +- drivers/staging/ced1401/usb1401.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 113d4c5de23b..36cf974c106a 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1381,11 +1381,11 @@ int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) } /**************************************************************************** -** FreeCircBlock +** ced_free_circ_block ** ** Frees a block of circularly-transferred data and returns the next one. ****************************************************************************/ -int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) +int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) { int iReturn = U14ERR_NOERROR; unsigned int nArea, uStart, uSize; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 554e8446261f..b44140f2e225 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1322,7 +1322,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_get_circ_block(pdx, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_FREECIRCBLOCK): - return FreeCircBlock(pdx, (TCIRCBLOCK __user *) ulArg); + return ced_free_circ_block(pdx, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_WAITEVENT): return ced_wait_event(pdx, (int)(ulArg & 0xff), (int)(ulArg >> 8)); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 6fa4e598ec3f..8e2e68e167cb 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -237,7 +237,7 @@ extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); extern int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx); extern int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); extern int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -extern int FreeCircBlock(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); +extern int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); extern int ced_test_event(DEVICE_EXTENSION *pdx, int nArea); #endif -- cgit From 1795f89542dc3117de87e14513ee39f426f46bfa Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Mon, 30 Jun 2014 12:00:45 +0200 Subject: staging: ced1401: remove typedef for CIRCBLK Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 8e2e68e167cb..5e1d24ea77a2 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -92,11 +92,12 @@ #define CR_CHAR 0x0D /* The carriage return character */ #define CR_CHAR_80 0x8d /* and with bit 7 set */ -/* A structure holding information about a block of memory for use in circular transfers */ -typedef struct circBlk { - volatile UINT dwOffset; /* Offset within area of block start */ - volatile UINT dwSize; /* Size of the block, in bytes (0 = unused) */ -} CIRCBLK; +/* A structure holding information about a block */ +/* of memory for use in circular transfers */ +struct circ_blk { + volatile UINT dwOffset; /* Offset within area of block start */ + volatile UINT dwSize; /* Size of the block, in bytes (0 = unused) */ +}; /* A structure holding all of the information about a transfer area - an area of */ /* memory set up for use either as a source or destination in DMA transfers. */ @@ -113,7 +114,7 @@ typedef struct transarea { int iWakeUp; /* Set 1 on event, cleared by TestEvent() */ UINT dwEventSt; /* Defines section within xfer area for... */ UINT dwEventSz; /* ...notification by the event SZ is 0 if unset */ - CIRCBLK aBlocks[2]; /* Info on a pair of circular blocks */ + struct circ_blk aBlocks[2]; /* Info on a pair of circular blocks */ wait_queue_head_t wqEvent; /* The wait queue for events in this area MUST BE LAST */ } TRANSAREA; -- cgit From fb3cdd16f2f89f535f66531c3f811af8f0f0428b Mon Sep 17 00:00:00 2001 From: Chi Pham Date: Thu, 3 Jul 2014 15:03:59 +0200 Subject: staging: ced1401: Add void declarations in zero-arg functions. Added explicit void declarations to zero-argument function headers. The following coccinelle script was used: @addvoid@ identifier f; @@ f( + void ) { ... } Signed-off-by: Chi Pham Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/userspace/use1401.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/userspace/use1401.c b/drivers/staging/ced1401/userspace/use1401.c index 9ebddbd07e8d..d589311f1528 100644 --- a/drivers/staging/ced1401/userspace/use1401.c +++ b/drivers/staging/ced1401/userspace/use1401.c @@ -376,7 +376,7 @@ static short U14Control1401(short sHand, LONG lCode, TCSBLOCK* pBlk) ** SafeTickCount ** Gets time in approximately units of a millisecond. *****************************************************************************/ -static long SafeTickCount() +static long SafeTickCount(void) { #ifdef _IS_WINDOWS_ return GetTickCount(); -- cgit From 1786384e13e9e380ee3a0507d041663ff0ca124c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 29 Jun 2014 20:39:54 +0100 Subject: staging: vt6656: implement get_stats ieee80211_low_level_stats The driver already report low_level_stats via vnt_interrupt_data. Allow mac80211 to collect them via vnt_get_stats Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/int.c | 6 ++++++ drivers/staging/vt6656/main_usb.c | 11 +++++++++++ 3 files changed, 18 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index f1ed43e19b9c..4d1eb226260e 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -438,6 +438,7 @@ struct vnt_private { u8 byChannelSwitchCount; struct iw_statistics wstats; /* wireless stats */ + struct ieee80211_low_level_stats low_stats; }; #define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \ diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 23d045c257be..1913b73cbec6 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -79,6 +79,7 @@ void INTnsProcessData(struct vnt_private *priv) { struct vnt_interrupt_data *int_data; struct net_device_stats *stats = &priv->stats; + struct ieee80211_low_level_stats *low_stats = &priv->low_stats; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); @@ -133,6 +134,11 @@ void INTnsProcessData(struct vnt_private *priv) #endif } priv->qwCurrTSF = le64_to_cpu(int_data->tsf); + + low_stats->dot11RTSSuccessCount += int_data->rts_success; + low_stats->dot11RTSFailureCount += int_data->rts_fail; + low_stats->dot11ACKFailureCount += int_data->ack_fail; + low_stats->dot11FCSErrorCount += int_data->fcs_err; } if (int_data->isr1 != 0) diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 14845ec94f7e..8a4695eca813 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1006,6 +1006,16 @@ static void vnt_sw_scan_complete(struct ieee80211_hw *hw) BBvUpdatePreEDThreshold(priv, false); } +static int vnt_get_stats(struct ieee80211_hw *hw, + struct ieee80211_low_level_stats *stats) +{ + struct vnt_private *priv = hw->priv; + + memcpy(stats, &priv->low_stats, sizeof(*stats)); + + return 0; +} + static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) { struct vnt_private *priv = hw->priv; @@ -1043,6 +1053,7 @@ static const struct ieee80211_ops vnt_mac_ops = { .set_key = vnt_set_key, .sw_scan_start = vnt_sw_scan_start, .sw_scan_complete = vnt_sw_scan_complete, + .get_stats = vnt_get_stats, .get_tsf = vnt_get_tsf, .set_tsf = vnt_set_tsf, .reset_tsf = vnt_reset_tsf, -- cgit From a5615b9775164ae6f63b8636f46fdedf33f13d67 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 29 Jun 2014 20:39:55 +0100 Subject: staging: vt6656: s_nsBulkOutIoCompleteWrite fix bug of 5GHZ a rates idx On 2GHz band the values of wCurrentRate match the idx rates. However, on 5GHz they do not because in channel.c vnt_rates_a do not match idx. Instead use the info->control.rates[0].idx the value that was tried. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 428193e1497f..c5d4047befe0 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -419,9 +419,14 @@ static void s_nsBulkOutIoCompleteWrite(struct urb *urb) } if (context->skb) { + s8 idx; + info = IEEE80211_SKB_CB(context->skb); + + idx = info->control.rates[0].idx; + ieee80211_tx_info_clear_status(info); - info->status.rates[0].idx = priv->wCurrentRate; + info->status.rates[0].idx = idx; info->status.rates[0].count = 0; if (!urb->status) info->flags |= IEEE80211_TX_STAT_ACK; -- cgit From ba911c9b5b950900992a73099ae95ef522bc49bc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:20 +0100 Subject: staging: vt6656: turn radio off after mac registered. Turn the radio off to save power is the device is unused on system. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 8a4695eca813..9d0441f3d9d9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1074,6 +1074,8 @@ int vnt_init(struct vnt_private *priv) priv->mac_hw = true; + vnt_radio_power_off(priv); + return 0; } -- cgit From 72183c6b0cc95e040c0ad4b8117f83704a31618c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:21 +0100 Subject: staging: vt6656: vnt_rf_set_txpower use power for priv->byCurPwr The byCurPwr value can change state while in another thread,. Change to local variable power which is the last set value. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 8c2c2bd28571..971f84480117 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -821,11 +821,10 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) switch (priv->byRFType) { case RF_AL2230: - if (priv->byCurPwr >= AL2230_PWR_IDX_LEN) + if (power >= AL2230_PWR_IDX_LEN) return false; - ret &= vnt_rf_write_embedded(priv, - al2230_power_table[priv->byCurPwr]); + ret &= vnt_rf_write_embedded(priv, al2230_power_table[power]); if (rate <= RATE_11M) ret &= vnt_rf_write_embedded(priv, 0x0001b400 + @@ -835,11 +834,10 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); break; case RF_AL2230S: - if (priv->byCurPwr >= AL2230_PWR_IDX_LEN) + if (power >= AL2230_PWR_IDX_LEN) return false; - ret &= vnt_rf_write_embedded(priv, - al2230_power_table[priv->byCurPwr]); + ret &= vnt_rf_write_embedded(priv, al2230_power_table[power]); if (rate <= RATE_11M) { ret &= vnt_rf_write_embedded(priv, 0x040c1400 + @@ -862,14 +860,14 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) ret &= vnt_rf_write_embedded(priv, 0x221bb900 + (BY_AL7230_REG_LEN << 3)+IFREGCTL_REGW); - if (priv->byCurPwr > AL7230_PWR_IDX_LEN) + if (power >= AL7230_PWR_IDX_LEN) return false; /* * 0x080F1B00 for 3 wire control TxGain(D10) * and 0x31 as TX Gain value */ - power_setting = 0x080c0b00 | ((priv->byCurPwr) << 12) | + power_setting = 0x080c0b00 | (power << 12) | (BY_AL7230_REG_LEN << 3) | IFREGCTL_REGW; ret &= vnt_rf_write_embedded(priv, power_setting); @@ -877,22 +875,22 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) break; case RF_VT3226: - if (priv->byCurPwr >= VT3226_PWR_IDX_LEN) + if (power >= VT3226_PWR_IDX_LEN) return false; - power_setting = ((0x3f - priv->byCurPwr) << 20) | (0x17 << 8) | + power_setting = ((0x3f - power) << 20) | (0x17 << 8) | (BY_VT3226_REG_LEN << 3) | IFREGCTL_REGW; ret &= vnt_rf_write_embedded(priv, power_setting); break; case RF_VT3226D0: - if (priv->byCurPwr >= VT3226_PWR_IDX_LEN) + if (power >= VT3226_PWR_IDX_LEN) return false; if (rate <= RATE_11M) { u16 hw_value = priv->hw->conf.chandef.chan->hw_value; - power_setting = ((0x3f-priv->byCurPwr) << 20) | + power_setting = ((0x3f - power) << 20) | (0xe07 << 8) | (BY_VT3226_REG_LEN << 3) | IFREGCTL_REGW; @@ -915,7 +913,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) dev_dbg(&priv->usb->dev, "@@@@ vnt_rf_set_txpower> 11G mode\n"); - power_setting = ((0x3f-priv->byCurPwr) << 20) | + power_setting = ((0x3f - power) << 20) | (0x7 << 8) | (BY_VT3226_REG_LEN << 3) | IFREGCTL_REGW; @@ -930,10 +928,10 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) break; case RF_VT3342A0: - if (priv->byCurPwr >= VT3342_PWR_IDX_LEN) + if (power >= VT3342_PWR_IDX_LEN) return false; - power_setting = ((0x3F-priv->byCurPwr) << 20) | + power_setting = ((0x3f - power) << 20) | (0x27 << 8) | (BY_VT3342_REG_LEN << 3) | IFREGCTL_REGW; -- cgit From 89daee6ff54172c147bcbdad60c8b8db141c8d20 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:22 +0100 Subject: staging: vt6656: vnt_rf_setpower rate <= RATE_11M check array bound decrement channel by one and check array bound. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 971f84480117..4124131fba20 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -744,7 +744,10 @@ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) case RATE_2M: case RATE_5M: case RATE_11M: - power = priv->abyCCKPwrTbl[channel-1]; + channel--; + + if (channel < sizeof(priv->abyCCKPwrTbl)) + power = priv->abyCCKPwrTbl[channel]; break; case RATE_6M: case RATE_9M: -- cgit From 5091d963b877a48705128eba961524bc1bab687e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:23 +0100 Subject: staging: vt6656: vnt_tx_packet don't change power when off channel. The changing channel is so fast when off channel that changing power is pointless. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index e896dfe5d3fc..95b6cf307af6 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -900,7 +900,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) rate = ieee80211_get_tx_rate(priv->hw, info); current_rate = rate->hw_value; - if (priv->wCurrentRate != current_rate) { + if (priv->wCurrentRate != current_rate && + !(priv->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) { priv->wCurrentRate = current_rate; bScheduleCommand(priv, WLAN_CMD_SETPOWER, NULL); } -- cgit From 47b41d9f44da5ff32121b9d47f6ba8b5daab5b53 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:24 +0100 Subject: staging: vt6656: vnt_rx_data add track rsr and new_rsr errors Add rsr and new_rsr error packet error drop. if NEWRSR_DECRYPTOK fails drop packet altogether. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index ca5555482377..f3da0db77c04 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -143,7 +143,10 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, new_rsr = skb_data + 8 + pay_load_with_padding + 9; rssi = skb_data + 8 + pay_load_with_padding + 10; + rsr = skb_data + 8 + pay_load_with_padding + 11; + if (*rsr & (RSR_IVLDTYP | RSR_IVLDLEN)) + return false; frame_size = *pay_load_len; @@ -163,14 +166,24 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, rx_status.flag = 0; rx_status.freq = hw->conf.chandef.chan->center_freq; + if (!(*rsr & RSR_CRCOK)) + rx_status.flag |= RX_FLAG_FAILED_FCS_CRC; + hdr = (struct ieee80211_hdr *)(skb->data); fc = hdr->frame_control; rx_status.rate_idx = rate_idx; if (ieee80211_has_protected(fc)) { - if (priv->byLocalID > REV_ID_VT3253_A1) - rx_status.flag = RX_FLAG_DECRYPTED; + if (priv->byLocalID > REV_ID_VT3253_A1) { + rx_status.flag |= RX_FLAG_DECRYPTED; + + /* Drop packet */ + if (!(*new_rsr & NEWRSR_DECRYPTOK)) { + dev_kfree_skb(skb); + return true; + } + } } memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); -- cgit From 04f2ff16e06614af986c5f5b5ef7896925989e5e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:25 +0100 Subject: staging: vt6656: vnt_set_channel remove power setting functions Power setting is already done in vnt_config and vnt_tx_packet. Just check that for connection_channel, if invalid return. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 1849e34237a5..a5f8df173135 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -74,15 +74,8 @@ static const u16 cwRXBCNTSFOff[MAX_RATE] = void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) { - if (priv->byBBType == BB_TYPE_11A) { - if ((connection_channel < (CB_MAX_CHANNEL_24G + 1)) || - (connection_channel > CB_MAX_CHANNEL)) - connection_channel = (CB_MAX_CHANNEL_24G + 1); - } else { - if ((connection_channel > CB_MAX_CHANNEL_24G) || - (connection_channel == 0)) - connection_channel = 1; - } + if (connection_channel > CB_MAX_CHANNEL || !connection_channel) + return; /* clear NAV */ vnt_mac_reg_bits_on(priv, MAC_REG_MACCR, MACCR_CLRNAV); @@ -93,20 +86,6 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) vnt_control_out(priv, MESSAGE_TYPE_SELECT_CHANNLE, connection_channel, 0, 0, NULL); - if (priv->byBBType == BB_TYPE_11A) { - priv->byCurPwr = 0xff; - vnt_rf_set_txpower(priv, - priv->abyOFDMAPwrTbl[connection_channel-15], RATE_54M); - } else if (priv->byBBType == BB_TYPE_11G) { - priv->byCurPwr = 0xff; - vnt_rf_set_txpower(priv, - priv->abyOFDMPwrTbl[connection_channel-1], RATE_54M); - } else { - priv->byCurPwr = 0xff; - vnt_rf_set_txpower(priv, - priv->abyCCKPwrTbl[connection_channel-1], RATE_1M); - } - vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_CHANNEL, (u8)(connection_channel|0x80)); } -- cgit From f5283274ccf531a7bb9231c777352f4852e2ded1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:26 +0100 Subject: staging: vt6656: Include re_alloc_skb within lock. Remove variable re_alloc_skb and merge code within urb->actual_length. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index c5d4047befe0..a7af4f58898e 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -276,7 +276,6 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) struct vnt_rcb *rcb = urb->context; struct vnt_private *priv = rcb->pDevice; unsigned long flags; - int re_alloc_skb = false; switch (urb->status) { case 0: @@ -294,24 +293,22 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) if (urb->actual_length) { spin_lock_irqsave(&priv->lock, flags); - if (vnt_rx_data(priv, rcb, urb->actual_length)) - re_alloc_skb = true; + if (vnt_rx_data(priv, rcb, urb->actual_length)) { + rcb->skb = dev_alloc_skb(priv->rx_buf_sz); + if (!rcb->skb) { + dev_dbg(&priv->usb->dev, + "Failed to re-alloc rx skb\n"); - spin_unlock_irqrestore(&priv->lock, flags); - } - - if (re_alloc_skb) { - rcb->skb = dev_alloc_skb(priv->rx_buf_sz); - if (!rcb->skb) { - dev_dbg(&priv->usb->dev, "Failed to re-alloc rx skb\n"); - - rcb->bBoolInUse = false; - - return; + rcb->bBoolInUse = false; + spin_unlock_irqrestore(&priv->lock, flags); + return; + } } urb->transfer_buffer = skb_put(rcb->skb, skb_tailroom(rcb->skb)); + + spin_unlock_irqrestore(&priv->lock, flags); } if (usb_submit_urb(urb, GFP_ATOMIC)) { -- cgit From 71d764aefeb6010b496f2c47ea06d9389fa9b780 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 5 Jul 2014 19:24:27 +0100 Subject: stagingL vt6656: implement fall back rates reporting. The driver reports the rate tried in struct vnt_interrupt_data tsr* variables which is available in INTnsProcessData via interrupt urb context. Instead of closing apTD tx context in s_nsBulkOutIoCompleteWrite by setting in_use to false. Keep the context open and allow vnt_int_report_rate to close it. If the tx_retry value is correct it will report back the sucessful RATE tried. struct vnt_usb_send_context add pkt_no which is index of apTD Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 + drivers/staging/vt6656/int.c | 104 +++++++++++++++++++++++++++++--------- drivers/staging/vt6656/main_usb.c | 1 + drivers/staging/vt6656/rxtx.c | 8 +-- drivers/staging/vt6656/usbpipe.c | 23 +++------ 5 files changed, 93 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 4d1eb226260e..789c55d1050c 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -246,6 +246,8 @@ struct vnt_usb_send_context { unsigned int buf_len; u16 tx_hdr_size; u8 type; + u8 pkt_no; + u8 fb_option; bool in_use; unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; }; diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 1913b73cbec6..1cc936455e8e 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -39,6 +39,22 @@ static int msglevel = MSG_LEVEL_INFO; /* MSG_LEVEL_DEBUG */ +static const u8 fallback_rate0[5][5] = { + {RATE_18M, RATE_18M, RATE_12M, RATE_12M, RATE_12M}, + {RATE_24M, RATE_24M, RATE_18M, RATE_12M, RATE_12M}, + {RATE_36M, RATE_36M, RATE_24M, RATE_18M, RATE_18M}, + {RATE_48M, RATE_48M, RATE_36M, RATE_24M, RATE_24M}, + {RATE_54M, RATE_54M, RATE_48M, RATE_36M, RATE_36M} +}; + +static const u8 fallback_rate1[5][5] = { + {RATE_18M, RATE_18M, RATE_12M, RATE_6M, RATE_6M}, + {RATE_24M, RATE_24M, RATE_18M, RATE_6M, RATE_6M}, + {RATE_36M, RATE_36M, RATE_24M, RATE_12M, RATE_12M}, + {RATE_48M, RATE_48M, RATE_24M, RATE_12M, RATE_12M}, + {RATE_54M, RATE_54M, RATE_36M, RATE_18M, RATE_18M} +}; + /*+ * * Function: InterruptPollingThread @@ -75,6 +91,62 @@ void INTvWorkItem(struct vnt_private *pDevice) spin_unlock_irqrestore(&pDevice->lock, flags); } +static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) +{ + struct vnt_usb_send_context *context; + struct ieee80211_tx_info *info; + struct ieee80211_rate *rate; + u8 tx_retry = (tsr & 0xf0) >> 4; + s8 idx; + + if (pkt_no >= priv->cbTD) + return -EINVAL; + + context = priv->apTD[pkt_no]; + + if (!context->skb) + return -EINVAL; + + info = IEEE80211_SKB_CB(context->skb); + idx = info->control.rates[0].idx; + + if (context->fb_option && !(tsr & (TSR_TMO | TSR_RETRYTMO))) { + u8 tx_rate; + u8 retry = tx_retry; + + rate = ieee80211_get_tx_rate(priv->hw, info); + tx_rate = rate->hw_value - RATE_18M; + + if (retry > 4) + retry = 4; + + if (context->fb_option == AUTO_FB_0) + tx_rate = fallback_rate0[tx_rate][retry]; + else if (context->fb_option == AUTO_FB_1) + tx_rate = fallback_rate1[tx_rate][retry]; + + if (info->band == IEEE80211_BAND_5GHZ) + idx = tx_rate - RATE_6M; + else + idx = tx_rate; + } + + ieee80211_tx_info_clear_status(info); + + info->status.rates[0].count = tx_retry; + + if (!(tsr & (TSR_TMO | TSR_RETRYTMO))) { + info->status.rates[0].idx = idx; + info->flags |= IEEE80211_TX_STAT_ACK; + } + + ieee80211_tx_status_irqsafe(priv->hw, context->skb); + + context->in_use = false; + + return 0; +} + void INTnsProcessData(struct vnt_private *priv) { struct vnt_interrupt_data *int_data; @@ -85,33 +157,17 @@ void INTnsProcessData(struct vnt_private *priv) int_data = (struct vnt_interrupt_data *)priv->int_buf.data_buf; - if (int_data->tsr0 & TSR_VALID) { - if (int_data->tsr0 & (TSR_TMO | TSR_RETRYTMO)) - priv->wstats.discard.retries++; - else - stats->tx_packets++; - } + if (int_data->tsr0 & TSR_VALID) + vnt_int_report_rate(priv, int_data->pkt0, int_data->tsr0); - if (int_data->tsr1 & TSR_VALID) { - if (int_data->tsr1 & (TSR_TMO | TSR_RETRYTMO)) - priv->wstats.discard.retries++; - else - stats->tx_packets++; - } + if (int_data->tsr1 & TSR_VALID) + vnt_int_report_rate(priv, int_data->pkt1, int_data->tsr1); - if (int_data->tsr2 & TSR_VALID) { - if (int_data->tsr2 & (TSR_TMO | TSR_RETRYTMO)) - priv->wstats.discard.retries++; - else - stats->tx_packets++; - } + if (int_data->tsr2 & TSR_VALID) + vnt_int_report_rate(priv, int_data->pkt2, int_data->tsr2); - if (int_data->tsr3 & TSR_VALID) { - if (int_data->tsr3 & (TSR_TMO | TSR_RETRYTMO)) - priv->wstats.discard.retries++; - else - stats->tx_packets++; - } + if (int_data->tsr3 & TSR_VALID) + vnt_int_report_rate(priv, int_data->pkt3, int_data->tsr3); if (int_data->isr0 != 0) { if (int_data->isr0 & ISR_BNTX && diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 9d0441f3d9d9..4cdf29eb593e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -557,6 +557,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) priv->apTD[ii] = tx_context; tx_context->priv = priv; + tx_context->pkt_no = ii; /* allocate URBs */ tx_context->urb = usb_alloc_urb(0, GFP_ATOMIC); diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 95b6cf307af6..264e3c9b6412 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -1021,6 +1021,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) } } + tx_context->fb_option = fb_option; + duration_id = s_vGenerateTxParameter(tx_context, pkt_type, current_rate, tx_buffer, &mic_hdr, need_mic, frame_size, need_ack, NULL, need_rts); @@ -1050,8 +1052,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) IEEE80211_SCTL_SEQ) >> 4; tx_buffer->tx_byte_count = cpu_to_le16(tx_bytes); - tx_buffer->byPKTNO = (u8)(((current_rate << 4) & 0xf0) | - (priv->wSeqCounter & 0xf)); + tx_buffer->byPKTNO = tx_context->pkt_no; tx_buffer->byType = 0x00; tx_bytes += 4; @@ -1147,8 +1148,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, count = sizeof(struct vnt_tx_short_buf_head) + skb->len; beacon_buffer->tx_byte_count = cpu_to_le16(count); - beacon_buffer->byPKTNO = (u8)(((current_rate << 4) & 0xf0) | - ((priv->wSeqCounter - 1) & 0x000f)); + beacon_buffer->byPKTNO = context->pkt_no; beacon_buffer->byType = 0x01; context->type = CONTEXT_BEACON_PACKET; diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index a7af4f58898e..c8b0ed5adf7a 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -398,7 +398,6 @@ static void s_nsBulkOutIoCompleteWrite(struct urb *urb) { struct vnt_usb_send_context *context = urb->context; struct vnt_private *priv = context->priv; - struct ieee80211_tx_info *info; switch (urb->status) { case 0: @@ -415,25 +414,15 @@ static void s_nsBulkOutIoCompleteWrite(struct urb *urb) break; } - if (context->skb) { - s8 idx; - - info = IEEE80211_SKB_CB(context->skb); - - idx = info->control.rates[0].idx; - - ieee80211_tx_info_clear_status(info); - info->status.rates[0].idx = idx; - info->status.rates[0].count = 0; - if (!urb->status) - info->flags |= IEEE80211_TX_STAT_ACK; - ieee80211_tx_status_irqsafe(priv->hw, context->skb); - } - if (context->type == CONTEXT_DATA_PACKET) ieee80211_wake_queues(priv->hw); - context->in_use = false; + if (urb->status || context->type == CONTEXT_BEACON_PACKET) { + if (context->skb) + ieee80211_free_txskb(priv->hw, context->skb); + + context->in_use = false; + } return; } -- cgit From 83e771fc88991c64785be00b4c771632c1055b40 Mon Sep 17 00:00:00 2001 From: Anton Protopopov Date: Tue, 1 Jul 2014 21:06:29 +0400 Subject: staging: vt6655: fixed sparse warnings This commit fixes a few sparse warnings for missing the 'static' keyword in array definitions: drivers/staging//vt6655/rxtx.c:81:22: warning: symbol 'wTimeStampOff' was not declared. Should it be static? drivers/staging//vt6655/rxtx.c:86:22: warning: symbol 'wFB_Opt0' was not declared. Should it be static? drivers/staging//vt6655/rxtx.c:90:22: warning: symbol 'wFB_Opt1' was not declared. Should it be static? Signed-off-by: Anton Protopopov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/rxtx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 2219d71885a8..60fe6dbd8a9e 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -78,16 +78,16 @@ static int msglevel = MSG_LEVEL_INFO; #define CRITICAL_PACKET_LEN 256 // if packet size < 256 -> in-direct send // packet size >= 256 -> direct send -const unsigned short wTimeStampOff[2][MAX_RATE] = { +static const unsigned short wTimeStampOff[2][MAX_RATE] = { {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23}, // Long Preamble {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23}, // Short Preamble }; -const unsigned short wFB_Opt0[2][5] = { +static const unsigned short wFB_Opt0[2][5] = { {RATE_12M, RATE_18M, RATE_24M, RATE_36M, RATE_48M}, // fallback_rate0 {RATE_12M, RATE_12M, RATE_18M, RATE_24M, RATE_36M}, // fallback_rate1 }; -const unsigned short wFB_Opt1[2][5] = { +static const unsigned short wFB_Opt1[2][5] = { {RATE_12M, RATE_18M, RATE_24M, RATE_24M, RATE_36M}, // fallback_rate0 {RATE_6M , RATE_6M, RATE_12M, RATE_12M, RATE_18M}, // fallback_rate1 }; -- cgit From 618ff9cebe873681e6b0edab15528890577afd27 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 6 Jul 2014 23:19:46 +0100 Subject: staging: vt6656: s_nsBulkInUsbIoCompleteRead check that used sk_buff is clean and ready to reuse. skb_push the headroom and trimmed back to 0 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index c8b0ed5adf7a..dd031bbb25ba 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -303,6 +303,9 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) spin_unlock_irqrestore(&priv->lock, flags); return; } + } else { + skb_push(rcb->skb, skb_headroom(rcb->skb)); + skb_trim(rcb->skb, 0); } urb->transfer_buffer = skb_put(rcb->skb, -- cgit From 4473c8cccdf50cd8ab16d65bbbbacfc6a02c9e36 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 6 Jul 2014 23:19:47 +0100 Subject: staging: vt6656: vnt_set_keymode don't save pairwise key entry. The device refuses to associate to older access points even though in the logs it appears to be associated in tkip or ccmp mode. Clear bit from key_entry_inuse in pairwise key so the entry is over written by group address. This doesn't seem to make any difference to newer access points and is a temporary fix until a better solution is found. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/key.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index a7c7a2d3ba4c..7275f09e88b7 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -98,6 +98,8 @@ static int vnt_set_keymode(struct ieee80211_hw *hw, u8 *mac_addr, case VNT_KEY_PAIRWISE: key_mode |= mode; key_inx = 4; + /* Don't save entry for pairwise key */ + clear_bit(entry, &priv->key_entry_inuse); break; default: return -EINVAL; -- cgit From 9fe109c153f6ffff4186dc7d0275e2a84df6b1e6 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 6 Jul 2014 23:19:48 +0100 Subject: staging: vt6656: vnt_update_ifs vendor changes to uSIFS/uDIFS The latest vendor code makes changes to uSIFS and uDIFS. The orginal codes have been rearranged into a fall through switch statement. These reduce the time that device allows to TX packets and improves throughput. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index a5f8df173135..ea06b637a328 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -408,6 +408,36 @@ void vnt_update_ifs(struct vnt_private *priv) priv->uCwMax = C_CWMAX; priv->uEIFS = C_EIFS; + switch (priv->byRFType) { + case RF_VT3226D0: + if (priv->byBBType != BB_TYPE_11B) { + priv->uSIFS -= 1; + priv->uDIFS -= 1; + break; + } + case RF_AIROHA7230: + case RF_AL2230: + case RF_AL2230S: + if (priv->byBBType != BB_TYPE_11B) + break; + case RF_RFMD2959: + case RF_VT3226: + case RF_VT3342A0: + priv->uSIFS -= 3; + priv->uDIFS -= 3; + break; + case RF_MAXIM2829: + if (priv->byBBType == BB_TYPE_11A) { + priv->uSIFS -= 5; + priv->uDIFS -= 5; + } else { + priv->uSIFS -= 2; + priv->uDIFS -= 2; + } + + break; + } + data[0] = (u8)priv->uSIFS; data[1] = (u8)priv->uDIFS; data[2] = (u8)priv->uEIFS; -- cgit From f5c86ab9b622a526a37e7217eef7227d77fb00c1 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:10:01 +0200 Subject: Staging: bcm: InterfaceRx.c: Lines shortened Acked-by: Kevin McKinney Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceRx.c | 87 ++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c index 11008173f915..9d6e1d0a7254 100644 --- a/drivers/staging/bcm/InterfaceRx.c +++ b/drivers/staging/bcm/InterfaceRx.c @@ -24,8 +24,9 @@ GetBulkInRcb(struct bcm_interface_adapter *psIntfAdapter) pRcb = &psIntfAdapter->asUsbRcb[index]; pRcb->bUsed = TRUE; pRcb->psIntfAdapter = psIntfAdapter; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "Got Rx desc %d used %d", - index, atomic_read(&psIntfAdapter->uNumRcbUsed)); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DPC, + DBG_LVL_ALL, "Got Rx desc %d used %d", index, + atomic_read(&psIntfAdapter->uNumRcbUsed)); index = (index + 1) % MAXIMUM_USB_RCB; atomic_set(&psIntfAdapter->uCurrRcb, index); atomic_inc(&psIntfAdapter->uNumRcbUsed); @@ -63,7 +64,10 @@ static void read_bulk_callback(struct urb *urb) Adapter->bEndPointHalted = TRUE; wake_up(&Adapter->tx_packet_wait_queue); } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "Rx URB has got cancelled. status :%d", urb->status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, + DBG_LVL_ALL, + "Rx URB has got cancelled. status :%d", + urb->status); } pRcb->bUsed = false; atomic_dec(&psIntfAdapter->uNumRcbUsed); @@ -72,17 +76,22 @@ static void read_bulk_callback(struct urb *urb) } if (Adapter->bDoSuspend && (Adapter->bPreparingForLowPowerMode)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "device is going in low power mode while PMU option selected..hence rx packet should not be process"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, + "device is going in low power mode while PMU option selected..hence rx packet should not be process"); return; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "Read back done len %d\n", pLeader->PLength); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, + "Read back done len %d\n", pLeader->PLength); if (!pLeader->PLength) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "Leader Length 0"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, + "Leader Length 0"); atomic_dec(&psIntfAdapter->uNumRcbUsed); return; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "Leader Status:0x%hX, Length:0x%hX, VCID:0x%hX", pLeader->Status, pLeader->PLength, pLeader->Vcid); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, + "Leader Status:0x%hX, Length:0x%hX, VCID:0x%hX", + pLeader->Status, pLeader->PLength, pLeader->Vcid); if (MAX_CNTL_PKT_SIZE < pLeader->PLength) { if (netif_msg_rx_err(Adapter)) pr_info(PFX "%s: corrupted leader length...%d\n", @@ -100,23 +109,27 @@ static void read_bulk_callback(struct urb *urb) bHeaderSupressionEnabled & Adapter->bPHSEnabled; } - skb = dev_alloc_skb(pLeader->PLength + SKB_RESERVE_PHS_BYTES + SKB_RESERVE_ETHERNET_HEADER); + skb = dev_alloc_skb(pLeader->PLength + SKB_RESERVE_PHS_BYTES + + SKB_RESERVE_ETHERNET_HEADER); if (!skb) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "NO SKBUFF!!! Dropping the Packet"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, + "NO SKBUFF!!! Dropping the Packet"); atomic_dec(&psIntfAdapter->uNumRcbUsed); return; } /* If it is a control Packet, then call handle_bcm_packet ()*/ if ((ntohs(pLeader->Vcid) == VCID_CONTROL_PACKET) || (!(pLeader->Status >= 0x20 && pLeader->Status <= 0x3F))) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_CTRL, DBG_LVL_ALL, "Received control pkt..."); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_CTRL, + DBG_LVL_ALL, "Received control pkt..."); *(PUSHORT)skb->data = pLeader->Status; memcpy(skb->data+sizeof(USHORT), urb->transfer_buffer + (sizeof(struct bcm_leader)), pLeader->PLength); skb->len = pLeader->PLength + sizeof(USHORT); spin_lock(&Adapter->control_queue_lock); - ENQUEUEPACKET(Adapter->RxControlHead, Adapter->RxControlTail, skb); + ENQUEUEPACKET(Adapter->RxControlHead, Adapter->RxControlTail, + skb); spin_unlock(&Adapter->control_queue_lock); atomic_inc(&Adapter->cntrlpktCnt); @@ -126,16 +139,22 @@ static void read_bulk_callback(struct urb *urb) * Data Packet, Format a proper Ethernet Header * and give it to the stack */ - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, DBG_LVL_ALL, "Received Data pkt..."); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, + DBG_LVL_ALL, "Received Data pkt..."); skb_reserve(skb, 2 + SKB_RESERVE_PHS_BYTES); - memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer + sizeof(struct bcm_leader), pLeader->PLength); + memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer + + sizeof(struct bcm_leader), pLeader->PLength); skb->dev = Adapter->dev; /* currently skb->len has extra ETH_HLEN bytes in the beginning */ skb_put(skb, pLeader->PLength + ETH_HLEN); - Adapter->PackInfo[QueueIndex].uiTotalRxBytes += pLeader->PLength; - Adapter->PackInfo[QueueIndex].uiThisPeriodRxBytes += pLeader->PLength; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, DBG_LVL_ALL, "Received Data pkt of len :0x%X", pLeader->PLength); + Adapter->PackInfo[QueueIndex].uiTotalRxBytes += + pLeader->PLength; + Adapter->PackInfo[QueueIndex].uiThisPeriodRxBytes += + pLeader->PLength; + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, + DBG_LVL_ALL, "Received Data pkt of len :0x%X", + pLeader->PLength); if (netif_running(Adapter->dev)) { /* Moving ahead by ETH_HLEN to the data ptr as received from FW */ @@ -157,7 +176,9 @@ static void read_bulk_callback(struct urb *urb) skb->protocol = eth_type_trans(skb, Adapter->dev); process_done = netif_rx(skb); } else { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, DBG_LVL_ALL, "i/f not up hance freeing SKB..."); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, + RX_DATA, DBG_LVL_ALL, + "i/f not up hance freeing SKB..."); dev_kfree_skb(skb); } @@ -165,8 +186,11 @@ static void read_bulk_callback(struct urb *urb) Adapter->dev->stats.rx_bytes += pLeader->PLength; for (uiIndex = 0; uiIndex < MIBS_MAX_HIST_ENTRIES; uiIndex++) { - if ((pLeader->PLength <= MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) && - (pLeader->PLength > MIBS_PKTSIZEHIST_RANGE*(uiIndex))) + if ((pLeader->PLength <= + MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) && + (pLeader->PLength > + MIBS_PKTSIZEHIST_RANGE*(uiIndex))) + Adapter->aRxPktSizeHist[uiIndex]++; } } @@ -175,20 +199,29 @@ static void read_bulk_callback(struct urb *urb) atomic_dec(&psIntfAdapter->uNumRcbUsed); } -static int ReceiveRcb(struct bcm_interface_adapter *psIntfAdapter, struct bcm_usb_rcb *pRcb) +static int ReceiveRcb(struct bcm_interface_adapter *psIntfAdapter, + struct bcm_usb_rcb *pRcb) { struct urb *urb = pRcb->urb; int retval = 0; - usb_fill_bulk_urb(urb, psIntfAdapter->udev, usb_rcvbulkpipe(psIntfAdapter->udev, psIntfAdapter->sBulkIn.bulk_in_endpointAddr), - urb->transfer_buffer, BCM_USB_MAX_READ_LENGTH, read_bulk_callback, pRcb); + usb_fill_bulk_urb(urb, psIntfAdapter->udev, + usb_rcvbulkpipe(psIntfAdapter->udev, + psIntfAdapter->sBulkIn.bulk_in_endpointAddr), + urb->transfer_buffer, + BCM_USB_MAX_READ_LENGTH, + read_bulk_callback, pRcb); + if (false == psIntfAdapter->psAdapter->device_removed && false == psIntfAdapter->psAdapter->bEndPointHalted && false == psIntfAdapter->bSuspended && false == psIntfAdapter->bPreparingForBusSuspend) { retval = usb_submit_urb(urb, GFP_ATOMIC); if (retval) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DPC, DBG_LVL_ALL, "failed submitting read urb, error %d", retval); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, + RX_DPC, DBG_LVL_ALL, + "failed submitting read urb, error %d", + retval); /* if this return value is because of pipe halt. need to clear this. */ if (retval == -EPIPE) { psIntfAdapter->psAdapter->bEndPointHalted = TRUE; @@ -216,13 +249,17 @@ Return: TRUE - If Rx was successful. bool InterfaceRx(struct bcm_interface_adapter *psIntfAdapter) { - USHORT RxDescCount = NUM_RX_DESC - atomic_read(&psIntfAdapter->uNumRcbUsed); + USHORT RxDescCount = NUM_RX_DESC - + atomic_read(&psIntfAdapter->uNumRcbUsed); + struct bcm_usb_rcb *pRcb = NULL; while (RxDescCount) { pRcb = GetBulkInRcb(psIntfAdapter); if (pRcb == NULL) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, "Unable to get Rcb pointer"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, + DBG_TYPE_PRINTK, 0, 0, + "Unable to get Rcb pointer"); return false; } ReceiveRcb(psIntfAdapter, pRcb); -- cgit From c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:10:02 +0200 Subject: Staging: bcm: InterfaceRx.c: Outsourced control packet handling Acked-by: Kevin McKinney Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceRx.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c index 9d6e1d0a7254..47b6de7ee80b 100644 --- a/drivers/staging/bcm/InterfaceRx.c +++ b/drivers/staging/bcm/InterfaceRx.c @@ -1,5 +1,26 @@ #include "headers.h" +static void handle_control_packet(struct bcm_interface_adapter *interface, + struct bcm_mini_adapter *ad, + struct bcm_leader *leader, + struct sk_buff *skb, + struct urb *urb) +{ + BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_CTRL, DBG_LVL_ALL, + "Received control pkt..."); + *(PUSHORT)skb->data = leader->Status; + memcpy(skb->data+sizeof(USHORT), urb->transfer_buffer + + (sizeof(struct bcm_leader)), leader->PLength); + skb->len = leader->PLength + sizeof(USHORT); + + spin_lock(&ad->control_queue_lock); + ENQUEUEPACKET(ad->RxControlHead, ad->RxControlTail, skb); + spin_unlock(&ad->control_queue_lock); + + atomic_inc(&ad->cntrlpktCnt); + wake_up(&ad->process_rx_cntrlpkt); +} + static int SearchVcid(struct bcm_mini_adapter *Adapter, unsigned short usVcid) { int iIndex = 0; @@ -120,20 +141,8 @@ static void read_bulk_callback(struct urb *urb) /* If it is a control Packet, then call handle_bcm_packet ()*/ if ((ntohs(pLeader->Vcid) == VCID_CONTROL_PACKET) || (!(pLeader->Status >= 0x20 && pLeader->Status <= 0x3F))) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_CTRL, - DBG_LVL_ALL, "Received control pkt..."); - *(PUSHORT)skb->data = pLeader->Status; - memcpy(skb->data+sizeof(USHORT), urb->transfer_buffer + - (sizeof(struct bcm_leader)), pLeader->PLength); - skb->len = pLeader->PLength + sizeof(USHORT); - - spin_lock(&Adapter->control_queue_lock); - ENQUEUEPACKET(Adapter->RxControlHead, Adapter->RxControlTail, - skb); - spin_unlock(&Adapter->control_queue_lock); - - atomic_inc(&Adapter->cntrlpktCnt); - wake_up(&Adapter->process_rx_cntrlpkt); + handle_control_packet(psIntfAdapter, Adapter, pLeader, skb, + urb); } else { /* * Data Packet, Format a proper Ethernet Header -- cgit From 3a162b194890dc4bfeacc15885ffdd0e260ce167 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:10:03 +0200 Subject: Staging: bcm: InterfaceRx.c: Outsourced code chunk This patch outsources a chunk of code into a function. Acked-by: Kevin McKinney Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceRx.c | 129 +++++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c index 47b6de7ee80b..f2c323d6c1a2 100644 --- a/drivers/staging/bcm/InterfaceRx.c +++ b/drivers/staging/bcm/InterfaceRx.c @@ -21,6 +21,73 @@ static void handle_control_packet(struct bcm_interface_adapter *interface, wake_up(&ad->process_rx_cntrlpkt); } +static void format_eth_hdr_to_stack(struct bcm_interface_adapter *interface, + struct bcm_mini_adapter *ad, + struct bcm_leader *p_leader, + struct sk_buff *skb, + struct urb *urb, + UINT ui_index, + int queue_index, + bool b_header_supression_endabled, + int *process_done) +{ + /* + * Data Packet, Format a proper Ethernet Header + * and give it to the stack + */ + BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_DATA, + DBG_LVL_ALL, "Received Data pkt..."); + skb_reserve(skb, 2 + SKB_RESERVE_PHS_BYTES); + memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer + + sizeof(struct bcm_leader), p_leader->PLength); + skb->dev = ad->dev; + + /* currently skb->len has extra ETH_HLEN bytes in the beginning */ + skb_put(skb, p_leader->PLength + ETH_HLEN); + ad->PackInfo[queue_index].uiTotalRxBytes += p_leader->PLength; + ad->PackInfo[queue_index].uiThisPeriodRxBytes += p_leader->PLength; + BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_DATA, + DBG_LVL_ALL, "Received Data pkt of len :0x%X", + p_leader->PLength); + + if (netif_running(ad->dev)) { + /* Moving ahead by ETH_HLEN to the data ptr as received from FW */ + skb_pull(skb, ETH_HLEN); + PHSReceive(ad, p_leader->Vcid, skb, &skb->len, + NULL, b_header_supression_endabled); + + if (!ad->PackInfo[queue_index].bEthCSSupport) { + skb_push(skb, ETH_HLEN); + + memcpy(skb->data, skb->dev->dev_addr, 6); + memcpy(skb->data+6, skb->dev->dev_addr, 6); + (*(skb->data+11))++; + *(skb->data+12) = 0x08; + *(skb->data+13) = 0x00; + p_leader->PLength += ETH_HLEN; + } + + skb->protocol = eth_type_trans(skb, ad->dev); + *process_done = netif_rx(skb); + } else { + BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, + RX_DATA, DBG_LVL_ALL, + "i/f not up hance freeing SKB..."); + dev_kfree_skb(skb); + } + + ++ad->dev->stats.rx_packets; + ad->dev->stats.rx_bytes += p_leader->PLength; + + for (ui_index = 0; ui_index < MIBS_MAX_HIST_ENTRIES; ui_index++) { + if ((p_leader->PLength <= + MIBS_PKTSIZEHIST_RANGE*(ui_index+1)) && + (p_leader->PLength > MIBS_PKTSIZEHIST_RANGE*(ui_index))) + + ad->aRxPktSizeHist[ui_index]++; + } +} + static int SearchVcid(struct bcm_mini_adapter *Adapter, unsigned short usVcid) { int iIndex = 0; @@ -144,64 +211,10 @@ static void read_bulk_callback(struct urb *urb) handle_control_packet(psIntfAdapter, Adapter, pLeader, skb, urb); } else { - /* - * Data Packet, Format a proper Ethernet Header - * and give it to the stack - */ - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, - DBG_LVL_ALL, "Received Data pkt..."); - skb_reserve(skb, 2 + SKB_RESERVE_PHS_BYTES); - memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer + - sizeof(struct bcm_leader), pLeader->PLength); - skb->dev = Adapter->dev; - - /* currently skb->len has extra ETH_HLEN bytes in the beginning */ - skb_put(skb, pLeader->PLength + ETH_HLEN); - Adapter->PackInfo[QueueIndex].uiTotalRxBytes += - pLeader->PLength; - Adapter->PackInfo[QueueIndex].uiThisPeriodRxBytes += - pLeader->PLength; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA, - DBG_LVL_ALL, "Received Data pkt of len :0x%X", - pLeader->PLength); - - if (netif_running(Adapter->dev)) { - /* Moving ahead by ETH_HLEN to the data ptr as received from FW */ - skb_pull(skb, ETH_HLEN); - PHSReceive(Adapter, pLeader->Vcid, skb, &skb->len, - NULL, bHeaderSupressionEnabled); - - if (!Adapter->PackInfo[QueueIndex].bEthCSSupport) { - skb_push(skb, ETH_HLEN); - - memcpy(skb->data, skb->dev->dev_addr, 6); - memcpy(skb->data+6, skb->dev->dev_addr, 6); - (*(skb->data+11))++; - *(skb->data+12) = 0x08; - *(skb->data+13) = 0x00; - pLeader->PLength += ETH_HLEN; - } - - skb->protocol = eth_type_trans(skb, Adapter->dev); - process_done = netif_rx(skb); - } else { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, - RX_DATA, DBG_LVL_ALL, - "i/f not up hance freeing SKB..."); - dev_kfree_skb(skb); - } - - ++Adapter->dev->stats.rx_packets; - Adapter->dev->stats.rx_bytes += pLeader->PLength; - - for (uiIndex = 0; uiIndex < MIBS_MAX_HIST_ENTRIES; uiIndex++) { - if ((pLeader->PLength <= - MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) && - (pLeader->PLength > - MIBS_PKTSIZEHIST_RANGE*(uiIndex))) - - Adapter->aRxPktSizeHist[uiIndex]++; - } + format_eth_hdr_to_stack(psIntfAdapter, Adapter, pLeader, skb, + urb, uiIndex, QueueIndex, + bHeaderSupressionEnabled, + &process_done); } Adapter->PrevNumRecvDescs++; pRcb->bUsed = false; -- cgit From 8139b8d5358e873d90db1ccb54ed0b2c0611febc Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:10:04 +0200 Subject: Staging: bcm: InterfaceRx.c: Removed unused variable This patch removes the `process_done` variable from both format_eth_hdr_to_stack() and read_bulk_callback() (where it is declared), as it is not used anywhere (it is set in the format_eth_hdr_to_stack() function, but afterwards not used). Acked-by: Kevin McKinney Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceRx.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c index f2c323d6c1a2..0f179b9382d3 100644 --- a/drivers/staging/bcm/InterfaceRx.c +++ b/drivers/staging/bcm/InterfaceRx.c @@ -28,8 +28,7 @@ static void format_eth_hdr_to_stack(struct bcm_interface_adapter *interface, struct urb *urb, UINT ui_index, int queue_index, - bool b_header_supression_endabled, - int *process_done) + bool b_header_supression_endabled) { /* * Data Packet, Format a proper Ethernet Header @@ -68,7 +67,7 @@ static void format_eth_hdr_to_stack(struct bcm_interface_adapter *interface, } skb->protocol = eth_type_trans(skb, ad->dev); - *process_done = netif_rx(skb); + netif_rx(skb); } else { BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_DATA, DBG_LVL_ALL, @@ -129,7 +128,6 @@ static void read_bulk_callback(struct urb *urb) bool bHeaderSupressionEnabled = false; int QueueIndex = NO_OF_QUEUES + 1; UINT uiIndex = 0; - int process_done = 1; struct bcm_usb_rcb *pRcb = (struct bcm_usb_rcb *)urb->context; struct bcm_interface_adapter *psIntfAdapter = pRcb->psIntfAdapter; struct bcm_mini_adapter *Adapter = psIntfAdapter->psAdapter; @@ -213,8 +211,7 @@ static void read_bulk_callback(struct urb *urb) } else { format_eth_hdr_to_stack(psIntfAdapter, Adapter, pLeader, skb, urb, uiIndex, QueueIndex, - bHeaderSupressionEnabled, - &process_done); + bHeaderSupressionEnabled); } Adapter->PrevNumRecvDescs++; pRcb->bUsed = false; -- cgit From 5faf33007f882fa2973f111a0352601f88e19570 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:20:22 +0200 Subject: Staging: bcm: InterfaceTx.c: Shortened lines + Whitespace cleanup Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceTx.c | 86 +++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceTx.c b/drivers/staging/bcm/InterfaceTx.c index ea7707b8e60e..b1f28994915a 100644 --- a/drivers/staging/bcm/InterfaceTx.c +++ b/drivers/staging/bcm/InterfaceTx.c @@ -5,37 +5,47 @@ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) { struct bcm_usb_tcb *pTcb = (struct bcm_usb_tcb *)urb->context; struct bcm_interface_adapter *psIntfAdapter = pTcb->psIntfAdapter; - struct bcm_link_request *pControlMsg = (struct bcm_link_request *)urb->transfer_buffer; + struct bcm_link_request *pControlMsg = + (struct bcm_link_request *)urb->transfer_buffer; struct bcm_mini_adapter *psAdapter = psIntfAdapter->psAdapter; bool bpowerDownMsg = false; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (unlikely(netif_msg_tx_done(Adapter))) - pr_info(PFX "%s: transmit status %d\n", Adapter->dev->name, urb->status); + pr_info(PFX "%s: transmit status %d\n", Adapter->dev->name, + urb->status); if (urb->status != STATUS_SUCCESS) { if (urb->status == -EPIPE) { psIntfAdapter->psAdapter->bEndPointHalted = TRUE; wake_up(&psIntfAdapter->psAdapter->tx_packet_wait_queue); } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Tx URB has got cancelled. status :%d", urb->status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Tx URB has got cancelled. status :%d", + urb->status); } } pTcb->bUsed = false; atomic_dec(&psIntfAdapter->uNumTcbUsed); - - if (TRUE == psAdapter->bPreparingForLowPowerMode) { if (((pControlMsg->szData[0] == GO_TO_IDLE_MODE_PAYLOAD) && - (pControlMsg->szData[1] == TARGET_CAN_GO_TO_IDLE_MODE))) { + (pControlMsg->szData[1] == + TARGET_CAN_GO_TO_IDLE_MODE))) { + bpowerDownMsg = TRUE; - /* This covers the bus err while Idle Request msg sent down. */ + /* + * This covers the bus err while Idle Request msg + * sent down. + */ if (urb->status != STATUS_SUCCESS) { psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Idle Mode Request msg failed to reach to Modem"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Idle Mode Request msg failed to reach to Modem"); /* Signalling the cntrl pkt path in Ioctl */ wake_up(&psAdapter->lowpower_mode_wait_queue); StartInterruptUrb(psIntfAdapter); @@ -47,19 +57,28 @@ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) /* since going in Idle mode completed hence making this var false */ psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Host Entered in Idle Mode State..."); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Host Entered in Idle Mode State..."); /* Signalling the cntrl pkt path in Ioctl*/ wake_up(&psAdapter->lowpower_mode_wait_queue); } - } else if ((pControlMsg->Leader.Status == LINK_UP_CONTROL_REQ) && + } else if ((pControlMsg->Leader.Status == + LINK_UP_CONTROL_REQ) && (pControlMsg->szData[0] == LINK_UP_ACK) && - (pControlMsg->szData[1] == LINK_SHUTDOWN_REQ_FROM_FIRMWARE) && + (pControlMsg->szData[1] == + LINK_SHUTDOWN_REQ_FROM_FIRMWARE) && (pControlMsg->szData[2] == SHUTDOWN_ACK_FROM_DRIVER)) { - /* This covers the bus err while shutdown Request msg sent down. */ + /* + * This covers the bus err while shutdown Request + * msg sent down. + */ if (urb->status != STATUS_SUCCESS) { psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Shutdown Request Msg failed to reach to Modem"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Shutdown Request Msg failed to reach to Modem"); /* Signalling the cntrl pkt path in Ioctl */ wake_up(&psAdapter->lowpower_mode_wait_queue); StartInterruptUrb(psIntfAdapter); @@ -69,9 +88,14 @@ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) bpowerDownMsg = TRUE; if (psAdapter->bDoSuspend == false) { psAdapter->bShutStatus = TRUE; - /* since going in shutdown mode completed hence making this var false */ + /* + * since going in shutdown mode completed hence + * making this var false + */ psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Host Entered in shutdown Mode State..."); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Host Entered in shutdown Mode State..."); /* Signalling the cntrl pkt path in Ioctl */ wake_up(&psAdapter->lowpower_mode_wait_queue); } @@ -79,7 +103,9 @@ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) if (psAdapter->bDoSuspend && bpowerDownMsg) { /* issuing bus suspend request */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Issuing the Bus suspend request to USB stack"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Issuing the Bus suspend request to USB stack"); psIntfAdapter->bPreparingForBusSuspend = TRUE; schedule_work(&psIntfAdapter->usbSuspendWork); @@ -104,8 +130,11 @@ static struct bcm_usb_tcb *GetBulkOutTcb(struct bcm_interface_adapter *psIntfAda pTcb = &psIntfAdapter->asUsbTcb[index]; pTcb->bUsed = TRUE; pTcb->psIntfAdapter = psIntfAdapter; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Got Tx desc %d used %d", - index, atomic_read(&psIntfAdapter->uNumTcbUsed)); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, + NEXT_SEND, DBG_LVL_ALL, + "Got Tx desc %d used %d", + index, + atomic_read(&psIntfAdapter->uNumTcbUsed)); index = (index + 1) % MAXIMUM_USB_TCB; atomic_set(&psIntfAdapter->uCurrTcb, index); atomic_inc(&psIntfAdapter->uNumTcbUsed); @@ -113,7 +142,8 @@ static struct bcm_usb_tcb *GetBulkOutTcb(struct bcm_interface_adapter *psIntfAda return pTcb; } -static int TransmitTcb(struct bcm_interface_adapter *psIntfAdapter, struct bcm_usb_tcb *pTcb, PVOID data, int len) +static int TransmitTcb(struct bcm_interface_adapter *psIntfAdapter, + struct bcm_usb_tcb *pTcb, PVOID data, int len) { struct urb *urb = pTcb->urb; @@ -122,15 +152,18 @@ static int TransmitTcb(struct bcm_interface_adapter *psIntfAdapter, struct bcm_u urb->transfer_buffer = usb_alloc_coherent(psIntfAdapter->udev, len, GFP_ATOMIC, &urb->transfer_dma); if (!urb->transfer_buffer) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, "Error allocating memory\n"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + "Error allocating memory\n"); return -ENOMEM; } memcpy(urb->transfer_buffer, data, len); urb->transfer_buffer_length = len; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "Sending Bulk out packet\n"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, "Sending Bulk out packet\n"); /* For T3B,INT OUT end point will be used as bulk out end point */ - if ((psIntfAdapter->psAdapter->chip_id == T3B) && (psIntfAdapter->bHighSpeedDevice == TRUE)) { + if ((psIntfAdapter->psAdapter->chip_id == T3B) && + (psIntfAdapter->bHighSpeedDevice == TRUE)) { usb_fill_int_urb(urb, psIntfAdapter->udev, psIntfAdapter->sBulkOut.bulk_out_pipe, urb->transfer_buffer, len, write_bulk_callback, pTcb, @@ -148,7 +181,10 @@ static int TransmitTcb(struct bcm_interface_adapter *psIntfAdapter, struct bcm_u false == psIntfAdapter->bPreparingForBusSuspend) { retval = usb_submit_urb(urb, GFP_ATOMIC); if (retval) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "failed submitting write urb, error %d", retval); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_TX, + NEXT_SEND, DBG_LVL_ALL, + "failed submitting write urb, error %d", + retval); if (retval == -EPIPE) { psIntfAdapter->psAdapter->bEndPointHalted = TRUE; wake_up(&psIntfAdapter->psAdapter->tx_packet_wait_queue); @@ -165,10 +201,10 @@ int InterfaceTransmitPacket(PVOID arg, PVOID data, UINT len) struct bcm_interface_adapter *psIntfAdapter = arg; pTcb = GetBulkOutTcb(psIntfAdapter); if (pTcb == NULL) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, "No URB to transmit packet, dropping packet"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + "No URB to transmit packet, dropping packet"); return -EFAULT; } return TransmitTcb(psIntfAdapter, pTcb, data, len); } - -- cgit From 26fba8e4e5821a9013ad5f27f197d6a191f4afd3 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:20:23 +0200 Subject: Staging: bcm: InterfaceTx.c: Outsourced code chunk This patch outsources a chunk of code into an own function and refactors the variable names inside the new function. Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceTx.c | 165 +++++++++++++++++++------------------- 1 file changed, 84 insertions(+), 81 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceTx.c b/drivers/staging/bcm/InterfaceTx.c index b1f28994915a..89e9e79c7c20 100644 --- a/drivers/staging/bcm/InterfaceTx.c +++ b/drivers/staging/bcm/InterfaceTx.c @@ -1,5 +1,87 @@ #include "headers.h" +static void prepare_low_power_mode(struct urb *urb, + struct bcm_interface_adapter *interface, + struct bcm_mini_adapter *ps_adapter, + struct bcm_mini_adapter *ad, + struct bcm_link_request *p_control_msg, + bool *b_power_down_msg) +{ + if (((p_control_msg->szData[0] == GO_TO_IDLE_MODE_PAYLOAD) && + (p_control_msg->szData[1] == TARGET_CAN_GO_TO_IDLE_MODE))) { + + *b_power_down_msg = TRUE; + /* + * This covers the bus err while Idle Request msg + * sent down. + */ + if (urb->status != STATUS_SUCCESS) { + ps_adapter->bPreparingForLowPowerMode = false; + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Idle Mode Request msg failed to reach to Modem"); + /* Signalling the cntrl pkt path in Ioctl */ + wake_up(&ps_adapter->lowpower_mode_wait_queue); + StartInterruptUrb(interface); + return; + } + + if (ps_adapter->bDoSuspend == false) { + ps_adapter->IdleMode = TRUE; + /* since going in Idle mode completed hence making this var false */ + ps_adapter->bPreparingForLowPowerMode = false; + + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Host Entered in Idle Mode State..."); + /* Signalling the cntrl pkt path in Ioctl*/ + wake_up(&ps_adapter->lowpower_mode_wait_queue); + } + + } else if ((p_control_msg->Leader.Status == LINK_UP_CONTROL_REQ) && + (p_control_msg->szData[0] == LINK_UP_ACK) && + (p_control_msg->szData[1] == LINK_SHUTDOWN_REQ_FROM_FIRMWARE) && + (p_control_msg->szData[2] == SHUTDOWN_ACK_FROM_DRIVER)) { + /* + * This covers the bus err while shutdown Request + * msg sent down. + */ + if (urb->status != STATUS_SUCCESS) { + ps_adapter->bPreparingForLowPowerMode = false; + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Shutdown Request Msg failed to reach to Modem"); + /* Signalling the cntrl pkt path in Ioctl */ + wake_up(&ps_adapter->lowpower_mode_wait_queue); + StartInterruptUrb(interface); + return; + } + + *b_power_down_msg = TRUE; + if (ps_adapter->bDoSuspend == false) { + ps_adapter->bShutStatus = TRUE; + /* + * since going in shutdown mode completed hence + * making this var false + */ + ps_adapter->bPreparingForLowPowerMode = false; + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "Host Entered in shutdown Mode State..."); + /* Signalling the cntrl pkt path in Ioctl */ + wake_up(&ps_adapter->lowpower_mode_wait_queue); + } + } + + if (ps_adapter->bDoSuspend && *b_power_down_msg) { + /* issuing bus suspend request */ + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, + "Issuing the Bus suspend request to USB stack"); + interface->bPreparingForBusSuspend = TRUE; + schedule_work(&interface->usbSuspendWork); + } +} + /*this is transmit call-back(BULK OUT)*/ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) { @@ -31,89 +113,10 @@ static void write_bulk_callback(struct urb *urb/*, struct pt_regs *regs*/) atomic_dec(&psIntfAdapter->uNumTcbUsed); if (TRUE == psAdapter->bPreparingForLowPowerMode) { - - if (((pControlMsg->szData[0] == GO_TO_IDLE_MODE_PAYLOAD) && - (pControlMsg->szData[1] == - TARGET_CAN_GO_TO_IDLE_MODE))) { - - bpowerDownMsg = TRUE; - /* - * This covers the bus err while Idle Request msg - * sent down. - */ - if (urb->status != STATUS_SUCCESS) { - psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, - DBG_LVL_ALL, - "Idle Mode Request msg failed to reach to Modem"); - /* Signalling the cntrl pkt path in Ioctl */ - wake_up(&psAdapter->lowpower_mode_wait_queue); - StartInterruptUrb(psIntfAdapter); - goto err_exit; - } - - if (psAdapter->bDoSuspend == false) { - psAdapter->IdleMode = TRUE; - /* since going in Idle mode completed hence making this var false */ - psAdapter->bPreparingForLowPowerMode = false; - - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, - DBG_LVL_ALL, - "Host Entered in Idle Mode State..."); - /* Signalling the cntrl pkt path in Ioctl*/ - wake_up(&psAdapter->lowpower_mode_wait_queue); - } - - } else if ((pControlMsg->Leader.Status == - LINK_UP_CONTROL_REQ) && - (pControlMsg->szData[0] == LINK_UP_ACK) && - (pControlMsg->szData[1] == - LINK_SHUTDOWN_REQ_FROM_FIRMWARE) && - (pControlMsg->szData[2] == SHUTDOWN_ACK_FROM_DRIVER)) { - /* - * This covers the bus err while shutdown Request - * msg sent down. - */ - if (urb->status != STATUS_SUCCESS) { - psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, - DBG_LVL_ALL, - "Shutdown Request Msg failed to reach to Modem"); - /* Signalling the cntrl pkt path in Ioctl */ - wake_up(&psAdapter->lowpower_mode_wait_queue); - StartInterruptUrb(psIntfAdapter); - goto err_exit; - } - - bpowerDownMsg = TRUE; - if (psAdapter->bDoSuspend == false) { - psAdapter->bShutStatus = TRUE; - /* - * since going in shutdown mode completed hence - * making this var false - */ - psAdapter->bPreparingForLowPowerMode = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, - DBG_LVL_ALL, - "Host Entered in shutdown Mode State..."); - /* Signalling the cntrl pkt path in Ioctl */ - wake_up(&psAdapter->lowpower_mode_wait_queue); - } - } - - if (psAdapter->bDoSuspend && bpowerDownMsg) { - /* issuing bus suspend request */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, - DBG_LVL_ALL, - "Issuing the Bus suspend request to USB stack"); - psIntfAdapter->bPreparingForBusSuspend = TRUE; - schedule_work(&psIntfAdapter->usbSuspendWork); - - } - + prepare_low_power_mode(urb, psIntfAdapter, psAdapter, Adapter, + pControlMsg, &bpowerDownMsg); } -err_exit: usb_free_coherent(urb->dev, urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma); } -- cgit From 792d9211075e6d3a72f4f5e0eca4b74b1f2df6cc Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:20:24 +0200 Subject: Staging: bcm: InterfaceTx.c: checkpath fix: Blank line after declarations Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceTx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceTx.c b/drivers/staging/bcm/InterfaceTx.c index 89e9e79c7c20..9b3f64b821ed 100644 --- a/drivers/staging/bcm/InterfaceTx.c +++ b/drivers/staging/bcm/InterfaceTx.c @@ -200,8 +200,8 @@ static int TransmitTcb(struct bcm_interface_adapter *psIntfAdapter, int InterfaceTransmitPacket(PVOID arg, PVOID data, UINT len) { struct bcm_usb_tcb *pTcb = NULL; - struct bcm_interface_adapter *psIntfAdapter = arg; + pTcb = GetBulkOutTcb(psIntfAdapter); if (pTcb == NULL) { BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, -- cgit From f1220c7d6b21aca65bc52dda8bf94c3ceb1d10d7 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:25:17 +0200 Subject: Staging: bcm: LeakyBucket.c: Replaced member accessing by variable Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/LeakyBucket.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c index f95b06713a28..151f6203cb38 100644 --- a/drivers/staging/bcm/LeakyBucket.c +++ b/drivers/staging/bcm/LeakyBucket.c @@ -20,6 +20,7 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) ULONG liCurrentTime; INT i = 0; struct timeval tv; + struct bcm_packet_info *curr_pi; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "=====>\n"); @@ -31,23 +32,25 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) do_gettimeofday(&tv); for (i = 0; i < NO_OF_QUEUES; i++) { - if (TRUE == Adapter->PackInfo[i].bValid && - (1 == Adapter->PackInfo[i].ucDirection)) { + curr_pi = &Adapter->PackInfo[i]; + + if (TRUE == curr_pi->bValid && + (1 == curr_pi->ucDirection)) { liCurrentTime = ((tv.tv_sec- - Adapter->PackInfo[i].stLastUpdateTokenAt.tv_sec)*1000 + - (tv.tv_usec-Adapter->PackInfo[i].stLastUpdateTokenAt.tv_usec)/ + curr_pi->stLastUpdateTokenAt.tv_sec)*1000 + + (tv.tv_usec-curr_pi->stLastUpdateTokenAt.tv_usec)/ 1000); if (0 != liCurrentTime) { - Adapter->PackInfo[i].uiCurrentTokenCount += (ULONG) - ((Adapter->PackInfo[i].uiMaxAllowedRate) * + curr_pi->uiCurrentTokenCount += (ULONG) + ((curr_pi->uiMaxAllowedRate) * ((ULONG)((liCurrentTime)))/1000); - memcpy(&Adapter->PackInfo[i].stLastUpdateTokenAt, + memcpy(&curr_pi->stLastUpdateTokenAt, &tv, sizeof(struct timeval)); - Adapter->PackInfo[i].liLastUpdateTokenAt = liCurrentTime; - if (Adapter->PackInfo[i].uiCurrentTokenCount >= - Adapter->PackInfo[i].uiMaxBucketSize) { - Adapter->PackInfo[i].uiCurrentTokenCount = - Adapter->PackInfo[i].uiMaxBucketSize; + curr_pi->liLastUpdateTokenAt = liCurrentTime; + if (curr_pi->uiCurrentTokenCount >= + curr_pi->uiMaxBucketSize) { + curr_pi->uiCurrentTokenCount = + curr_pi->uiMaxBucketSize; } } } -- cgit From 0acfe734fa85d113205b71133bfac87e3786395f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:25:18 +0200 Subject: Staging: bcm: LeakyBucket.c: Shortened lines Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/LeakyBucket.c | 153 ++++++++++++++++++++++++++------------ 1 file changed, 104 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c index 151f6203cb38..1151c835a32f 100644 --- a/drivers/staging/bcm/LeakyBucket.c +++ b/drivers/staging/bcm/LeakyBucket.c @@ -34,18 +34,17 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) for (i = 0; i < NO_OF_QUEUES; i++) { curr_pi = &Adapter->PackInfo[i]; - if (TRUE == curr_pi->bValid && - (1 == curr_pi->ucDirection)) { - liCurrentTime = ((tv.tv_sec- + if (TRUE == curr_pi->bValid && (1 == curr_pi->ucDirection)) { + liCurrentTime = ((tv.tv_sec - curr_pi->stLastUpdateTokenAt.tv_sec)*1000 + - (tv.tv_usec-curr_pi->stLastUpdateTokenAt.tv_usec)/ + (tv.tv_usec - curr_pi->stLastUpdateTokenAt.tv_usec) / 1000); if (0 != liCurrentTime) { curr_pi->uiCurrentTokenCount += (ULONG) ((curr_pi->uiMaxAllowedRate) * ((ULONG)((liCurrentTime)))/1000); - memcpy(&curr_pi->stLastUpdateTokenAt, - &tv, sizeof(struct timeval)); + memcpy(&curr_pi->stLastUpdateTokenAt, &tv, + sizeof(struct timeval)); curr_pi->liLastUpdateTokenAt = liCurrentTime; if (curr_pi->uiCurrentTokenCount >= curr_pi->uiMaxBucketSize) { @@ -55,7 +54,8 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) } } } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "<=====\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, + "<=====\n"); return; } @@ -77,26 +77,35 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) ***********************************************************************/ static ULONG GetSFTokenCount(struct bcm_mini_adapter *Adapter, struct bcm_packet_info *psSF) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "IsPacketAllowedForFlow ===>"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, + "IsPacketAllowedForFlow ===>"); + /* Validate the parameters */ if (NULL == Adapter || (psSF < Adapter->PackInfo && (uintptr_t)psSF > (uintptr_t) &Adapter->PackInfo[HiPriority])) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "IPAFF: Got wrong Parameters:Adapter: %p, QIndex: %zd\n", Adapter, (psSF-Adapter->PackInfo)); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, + "IPAFF: Got wrong Parameters:Adapter: %p, QIndex: %zd\n", + Adapter, (psSF-Adapter->PackInfo)); return 0; } if (false != psSF->bValid && psSF->ucDirection) { if (0 != psSF->uiCurrentTokenCount) { - return psSF->uiCurrentTokenCount; + return psSF->uiCurrentTokenCount; } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "Not enough tokens in queue %zd Available %u\n", - psSF-Adapter->PackInfo, psSF->uiCurrentTokenCount); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, + DBG_LVL_ALL, + "Not enough tokens in queue %zd Available %u\n", + psSF-Adapter->PackInfo, psSF->uiCurrentTokenCount); psSF->uiPendedLast = 1; } } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "IPAFF: Queue %zd not valid\n", psSF-Adapter->PackInfo); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, + "IPAFF: Queue %zd not valid\n", + psSF-Adapter->PackInfo); } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "IsPacketAllowedForFlow <==="); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, + "IsPacketAllowedForFlow <==="); return 0; } @@ -106,15 +115,17 @@ This function despatches packet from the specified queue. @return Zero(success) or Negative value(failure) */ static INT SendPacketFromQueue(struct bcm_mini_adapter *Adapter,/**"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, SEND_QUEUE, DBG_LVL_ALL, + "=====>"); if (!Adapter || !Packet || !psSF) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, SEND_QUEUE, DBG_LVL_ALL, "Got NULL Adapter or Packet"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, SEND_QUEUE, DBG_LVL_ALL, + "Got NULL Adapter or Packet"); return -EINVAL; } @@ -125,11 +136,13 @@ static INT SendPacketFromQueue(struct bcm_mini_adapter *Adapter,/**usVCID_Value); if (Status == 0) { for (uiIndex = 0; uiIndex < MIBS_MAX_HIST_ENTRIES; uiIndex++) { - if ((PktLen <= MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) && (PktLen > MIBS_PKTSIZEHIST_RANGE*(uiIndex))) + if ((PktLen <= MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) && + (PktLen > MIBS_PKTSIZEHIST_RANGE*(uiIndex))) Adapter->aTxPktSizeHist[uiIndex]++; } } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, SEND_QUEUE, DBG_LVL_ALL, "<====="); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, SEND_QUEUE, DBG_LVL_ALL, + "<====="); return Status; } @@ -145,7 +158,8 @@ static INT SendPacketFromQueue(struct bcm_mini_adapter *Adapter,/**", (psSF-Adapter->PackInfo)); - if ((psSF != &Adapter->PackInfo[HiPriority]) && Adapter->LinkUpStatus && atomic_read(&psSF->uiPerSFTxResourceCount)) { /* Get data packet */ + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "%zd ====>", (psSF-Adapter->PackInfo)); + if ((psSF != &Adapter->PackInfo[HiPriority]) && + Adapter->LinkUpStatus && + atomic_read(&psSF->uiPerSFTxResourceCount)) { /* Get data packet */ if (!psSF->ucDirection) return; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "UpdateTokenCount "); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "UpdateTokenCount "); if (Adapter->IdleMode || Adapter->bPreparingForLowPowerMode) return; /* in idle mode */ /* Check for Free Descriptors */ - if (atomic_read(&Adapter->CurrNumFreeTxDesc) <= MINIMUM_PENDING_DESCRIPTORS) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, " No Free Tx Descriptor(%d) is available for Data pkt..", atomic_read(&Adapter->CurrNumFreeTxDesc)); + if (atomic_read(&Adapter->CurrNumFreeTxDesc) <= + MINIMUM_PENDING_DESCRIPTORS) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + " No Free Tx Descriptor(%d) is available for Data pkt..", + atomic_read(&Adapter->CurrNumFreeTxDesc)); return; } @@ -172,7 +194,8 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, struct QueuePacket = psSF->FirstTxQueue; if (QueuePacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Dequeuing Data Packet"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, "Dequeuing Data Packet"); if (psSF->bEthCSSupport) iPacketLen = QueuePacket->len; @@ -181,24 +204,36 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, struct iPacketLen <<= 3; if (iPacketLen <= GetSFTokenCount(Adapter, psSF)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Allowed bytes %d", + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + "Allowed bytes %d", (iPacketLen >> 3)); - DEQUEUEPACKET(psSF->FirstTxQueue, psSF->LastTxQueue); - psSF->uiCurrentBytesOnHost -= (QueuePacket->len); + DEQUEUEPACKET(psSF->FirstTxQueue, + psSF->LastTxQueue); + psSF->uiCurrentBytesOnHost -= + (QueuePacket->len); psSF->uiCurrentPacketsOnHost--; atomic_dec(&Adapter->TotalPacketCount); spin_unlock_bh(&psSF->SFQueueLock); - Status = SendPacketFromQueue(Adapter, psSF, QueuePacket); + Status = SendPacketFromQueue(Adapter, psSF, + QueuePacket); psSF->uiPendedLast = false; } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "For Queue: %zd\n", psSF-Adapter->PackInfo); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "\nAvailable Tokens = %d required = %d\n", + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + "For Queue: %zd\n", + psSF-Adapter->PackInfo); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + "\nAvailable Tokens = %d required = %d\n", psSF->uiCurrentTokenCount, iPacketLen); /* - this part indicates that because of non-availability of the tokens - pkt has not been send out hence setting the pending flag indicating the host to send it out + this part indicates that because of + non-availability of the tokens + pkt has not been send out hence setting the + pending flag indicating the host to send it out first next iteration. */ psSF->uiPendedLast = TRUE; @@ -215,8 +250,11 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, struct pControlPacket = Adapter->txctlpacket [(atomic_read(&Adapter->index_rd_txcntrlpkt)%MAX_CNTRL_PKTS)]; if (pControlPacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Sending Control packet"); - Status = SendControlPacket(Adapter, pControlPacket); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + "Sending Control packet"); + Status = SendControlPacket(Adapter, + pControlPacket); if (STATUS_SUCCESS == Status) { spin_lock_bh(&psSF->SFQueueLock); psSF->NumOfPacketsSent++; @@ -228,10 +266,14 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, struct atomic_inc(&Adapter->index_rd_txcntrlpkt); spin_unlock_bh(&psSF->SFQueueLock); } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "SendControlPacket Failed\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + "SendControlPacket Failed\n"); } } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, " Control Pkt is not available, Indexing is wrong...."); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + " Control Pkt is not available, Indexing is wrong...."); } } } @@ -255,22 +297,27 @@ VOID transmit_packets(struct bcm_mini_adapter *Adapter) bool exit_flag = TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "=====>"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "=====>"); if (NULL == Adapter) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Got NULL Adapter"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "Got NULL Adapter"); return; } if (Adapter->device_removed == TRUE) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Device removed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "Device removed"); return; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "\nUpdateTokenCount ====>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "\nUpdateTokenCount ====>\n"); UpdateTokenCount(Adapter); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "\nPruneQueueAllSF ====>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "\nPruneQueueAllSF ====>\n"); PruneQueueAllSF(Adapter); @@ -283,8 +330,11 @@ VOID transmit_packets(struct bcm_mini_adapter *Adapter) if (Adapter->PackInfo[iIndex].bValid && Adapter->PackInfo[iIndex].uiPendedLast && Adapter->PackInfo[iIndex].uiCurrentBytesOnHost) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Calling CheckAndSendPacketFromIndex.."); - CheckAndSendPacketFromIndex(Adapter, &Adapter->PackInfo[iIndex]); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + "Calling CheckAndSendPacketFromIndex.."); + CheckAndSendPacketFromIndex(Adapter, + &Adapter->PackInfo[iIndex]); uiPrevTotalCount--; } } @@ -293,13 +343,16 @@ VOID transmit_packets(struct bcm_mini_adapter *Adapter) exit_flag = TRUE; /* second iteration to parse non-pending queues */ for (iIndex = HiPriority; iIndex >= 0; iIndex--) { - if (!uiPrevTotalCount || (TRUE == Adapter->device_removed)) + if (!uiPrevTotalCount || + (TRUE == Adapter->device_removed)) break; if (Adapter->PackInfo[iIndex].bValid && Adapter->PackInfo[iIndex].uiCurrentBytesOnHost && !Adapter->PackInfo[iIndex].uiPendedLast) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Calling CheckAndSendPacketFromIndex.."); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, + TX_PACKETS, DBG_LVL_ALL, + "Calling CheckAndSendPacketFromIndex.."); CheckAndSendPacketFromIndex(Adapter, &Adapter->PackInfo[iIndex]); uiPrevTotalCount--; exit_flag = false; @@ -307,7 +360,8 @@ VOID transmit_packets(struct bcm_mini_adapter *Adapter) } if (Adapter->IdleMode || Adapter->bPreparingForLowPowerMode) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "In Idle Mode\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, "In Idle Mode\n"); break; } if (exit_flag == TRUE) @@ -316,5 +370,6 @@ VOID transmit_packets(struct bcm_mini_adapter *Adapter) update_per_cid_rx(Adapter); Adapter->txtransmit_running = 0; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "<======"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "<======"); } -- cgit From b61124f99da7b1fa9a6a052d894e90419363cbb0 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:25:19 +0200 Subject: Staging: bcm: LeakyBucket.c: Outsourced code chunk into function Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/LeakyBucket.c | 146 +++++++++++++++++++------------------- 1 file changed, 74 insertions(+), 72 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c index 1151c835a32f..0d1a6e5adebb 100644 --- a/drivers/staging/bcm/LeakyBucket.c +++ b/drivers/staging/bcm/LeakyBucket.c @@ -146,6 +146,79 @@ static INT SendPacketFromQueue(struct bcm_mini_adapter *Adapter,/**ucDirection) + return; + + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "UpdateTokenCount "); + if (ad->IdleMode || ad->bPreparingForLowPowerMode) + return; /* in idle mode */ + + /* Check for Free Descriptors */ + if (atomic_read(&ad->CurrNumFreeTxDesc) <= + MINIMUM_PENDING_DESCRIPTORS) { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + " No Free Tx Descriptor(%d) is available for Data pkt..", + atomic_read(&ad->CurrNumFreeTxDesc)); + return; + } + + spin_lock_bh(&ps_sf->SFQueueLock); + qpacket = ps_sf->FirstTxQueue; + + if (qpacket) { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, + "Dequeuing Data Packet"); + + if (ps_sf->bEthCSSupport) + packet_len = qpacket->len; + else + packet_len = qpacket->len - ETH_HLEN; + + packet_len <<= 3; + if (packet_len <= GetSFTokenCount(ad, ps_sf)) { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, "Allowed bytes %d", + (packet_len >> 3)); + + DEQUEUEPACKET(ps_sf->FirstTxQueue, ps_sf->LastTxQueue); + ps_sf->uiCurrentBytesOnHost -= (qpacket->len); + ps_sf->uiCurrentPacketsOnHost--; + atomic_dec(&ad->TotalPacketCount); + spin_unlock_bh(&ps_sf->SFQueueLock); + + SendPacketFromQueue(ad, ps_sf, qpacket); + ps_sf->uiPendedLast = false; + } else { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, "For Queue: %zd\n", + ps_sf - ad->PackInfo); + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + "\nAvailable Tokens = %d required = %d\n", + ps_sf->uiCurrentTokenCount, + packet_len); + /* + this part indicates that because of + non-availability of the tokens + pkt has not been send out hence setting the + pending flag indicating the host to send it out + first next iteration. + */ + ps_sf->uiPendedLast = TRUE; + spin_unlock_bh(&ps_sf->SFQueueLock); + } + } else { + spin_unlock_bh(&ps_sf->SFQueueLock); + } +} + /************************************************************************ * Function - CheckAndSendPacketFromIndex() * @@ -161,87 +234,16 @@ static INT SendPacketFromQueue(struct bcm_mini_adapter *Adapter,/**", (psSF-Adapter->PackInfo)); if ((psSF != &Adapter->PackInfo[HiPriority]) && Adapter->LinkUpStatus && atomic_read(&psSF->uiPerSFTxResourceCount)) { /* Get data packet */ - if (!psSF->ucDirection) - return; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, - "UpdateTokenCount "); - if (Adapter->IdleMode || Adapter->bPreparingForLowPowerMode) - return; /* in idle mode */ - - /* Check for Free Descriptors */ - if (atomic_read(&Adapter->CurrNumFreeTxDesc) <= - MINIMUM_PENDING_DESCRIPTORS) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, - DBG_LVL_ALL, - " No Free Tx Descriptor(%d) is available for Data pkt..", - atomic_read(&Adapter->CurrNumFreeTxDesc)); - return; - } - - spin_lock_bh(&psSF->SFQueueLock); - QueuePacket = psSF->FirstTxQueue; - - if (QueuePacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, - DBG_LVL_ALL, "Dequeuing Data Packet"); - - if (psSF->bEthCSSupport) - iPacketLen = QueuePacket->len; - else - iPacketLen = QueuePacket->len-ETH_HLEN; - - iPacketLen <<= 3; - if (iPacketLen <= GetSFTokenCount(Adapter, psSF)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, - TX_PACKETS, DBG_LVL_ALL, - "Allowed bytes %d", - (iPacketLen >> 3)); - - DEQUEUEPACKET(psSF->FirstTxQueue, - psSF->LastTxQueue); - psSF->uiCurrentBytesOnHost -= - (QueuePacket->len); - psSF->uiCurrentPacketsOnHost--; - atomic_dec(&Adapter->TotalPacketCount); - spin_unlock_bh(&psSF->SFQueueLock); - - Status = SendPacketFromQueue(Adapter, psSF, - QueuePacket); - psSF->uiPendedLast = false; - } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, - TX_PACKETS, DBG_LVL_ALL, - "For Queue: %zd\n", - psSF-Adapter->PackInfo); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, - TX_PACKETS, DBG_LVL_ALL, - "\nAvailable Tokens = %d required = %d\n", - psSF->uiCurrentTokenCount, iPacketLen); - /* - this part indicates that because of - non-availability of the tokens - pkt has not been send out hence setting the - pending flag indicating the host to send it out - first next iteration. - */ - psSF->uiPendedLast = TRUE; - spin_unlock_bh(&psSF->SFQueueLock); - } - } else { - spin_unlock_bh(&psSF->SFQueueLock); - } + get_data_packet(Adapter, psSF); } else { if ((atomic_read(&Adapter->CurrNumFreeTxDesc) > 0) && -- cgit From 504d33d5fbb81ffa2de57e797e38806fdccb40b1 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:25:20 +0200 Subject: Staging: bcm: LeakyBucket.c: Outsourced ctrl packet sending Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/LeakyBucket.c | 76 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c index 0d1a6e5adebb..f2852c9eede6 100644 --- a/drivers/staging/bcm/LeakyBucket.c +++ b/drivers/staging/bcm/LeakyBucket.c @@ -219,6 +219,45 @@ static void get_data_packet(struct bcm_mini_adapter *ad, } } +static void send_control_packet(struct bcm_mini_adapter *ad, + struct bcm_packet_info *ps_sf) +{ + char *ctrl_packet = NULL; + INT status = 0; + + if ((atomic_read(&ad->CurrNumFreeTxDesc) > 0) && + (atomic_read(&ad->index_rd_txcntrlpkt) != + atomic_read(&ad->index_wr_txcntrlpkt))) { + ctrl_packet = ad->txctlpacket + [(atomic_read(&ad->index_rd_txcntrlpkt)%MAX_CNTRL_PKTS)]; + if (ctrl_packet) { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + "Sending Control packet"); + status = SendControlPacket(ad, ctrl_packet); + if (STATUS_SUCCESS == status) { + spin_lock_bh(&ps_sf->SFQueueLock); + ps_sf->NumOfPacketsSent++; + ps_sf->uiSentBytes += ((struct bcm_leader *)ctrl_packet)->PLength; + ps_sf->uiSentPackets++; + atomic_dec(&ad->TotalPacketCount); + ps_sf->uiCurrentBytesOnHost -= ((struct bcm_leader *)ctrl_packet)->PLength; + ps_sf->uiCurrentPacketsOnHost--; + atomic_inc(&ad->index_rd_txcntrlpkt); + spin_unlock_bh(&ps_sf->SFQueueLock); + } else { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + "SendControlPacket Failed\n"); + } + } else { + BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS, + DBG_LVL_ALL, + " Control Pkt is not available, Indexing is wrong...."); + } + } +} + /************************************************************************ * Function - CheckAndSendPacketFromIndex() * @@ -234,9 +273,6 @@ static void get_data_packet(struct bcm_mini_adapter *ad, static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, struct bcm_packet_info *psSF) { - char *pControlPacket = NULL; - INT Status = 0; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "%zd ====>", (psSF-Adapter->PackInfo)); if ((psSF != &Adapter->PackInfo[HiPriority]) && @@ -245,39 +281,7 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter, get_data_packet(Adapter, psSF); } else { - - if ((atomic_read(&Adapter->CurrNumFreeTxDesc) > 0) && - (atomic_read(&Adapter->index_rd_txcntrlpkt) != - atomic_read(&Adapter->index_wr_txcntrlpkt))) { - pControlPacket = Adapter->txctlpacket - [(atomic_read(&Adapter->index_rd_txcntrlpkt)%MAX_CNTRL_PKTS)]; - if (pControlPacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, - DBG_LVL_ALL, - "Sending Control packet"); - Status = SendControlPacket(Adapter, - pControlPacket); - if (STATUS_SUCCESS == Status) { - spin_lock_bh(&psSF->SFQueueLock); - psSF->NumOfPacketsSent++; - psSF->uiSentBytes += ((struct bcm_leader *)pControlPacket)->PLength; - psSF->uiSentPackets++; - atomic_dec(&Adapter->TotalPacketCount); - psSF->uiCurrentBytesOnHost -= ((struct bcm_leader *)pControlPacket)->PLength; - psSF->uiCurrentPacketsOnHost--; - atomic_inc(&Adapter->index_rd_txcntrlpkt); - spin_unlock_bh(&psSF->SFQueueLock); - } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, - TX_PACKETS, DBG_LVL_ALL, - "SendControlPacket Failed\n"); - } - } else { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, - TX_PACKETS, DBG_LVL_ALL, - " Control Pkt is not available, Indexing is wrong...."); - } - } + send_control_packet(Adapter, psSF); } } -- cgit From 66dcb017b30498a94f601efbb56790f8d34ac41d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:25:21 +0200 Subject: Staging: bcm: LeakyBucket.c: Removed unneccessary return; statement Signed-off-by: Matthias Beyer Acked-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/LeakyBucket.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c index f2852c9eede6..8c4030dfa7d5 100644 --- a/drivers/staging/bcm/LeakyBucket.c +++ b/drivers/staging/bcm/LeakyBucket.c @@ -56,8 +56,6 @@ static VOID UpdateTokenCount(register struct bcm_mini_adapter *Adapter) } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "<=====\n"); - return; - } -- cgit From 970e4c4a882beda6592b342f805763d724e19cfa Mon Sep 17 00:00:00 2001 From: Kevin McKinney Date: Mon, 30 Jun 2014 16:30:26 -0400 Subject: Staging: bcm: Change TODO to include maintainers. Add myself and Matthias Beyer to the TODO file as the list of maintainers. Signed-off-by: Kevin McKinney Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/TODO | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/TODO b/drivers/staging/bcm/TODO index cd3e9f2ed87a..8467f45d08a6 100644 --- a/drivers/staging/bcm/TODO +++ b/drivers/staging/bcm/TODO @@ -1,5 +1,9 @@ This driver is barely functional in its current state. +Kevin McKinney(klmckinney1@gmail.com) and Matthias Beyer(mail@beyermatthias.de) +are currently maintaining/cleaning up this driver. Please copy us on all +patches. More maintainers are aways welcomed. + BIG: - existing API is (/dev/tarang) should be replaced Is it possible to use same API as Intel Wimax stack and -- cgit From 8e7e2805efa17cdf13682e0934c825905f3864ff Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 1 Jul 2014 09:50:08 +0200 Subject: Staging: bcm: Shortened lines This patch fixes line lengths in the drivers/staging/bcm/InterfaceMisc.c file. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceMisc.c | 98 +++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceMisc.c b/drivers/staging/bcm/InterfaceMisc.c index 4173fd7d671c..fff7d68e1fe4 100644 --- a/drivers/staging/bcm/InterfaceMisc.c +++ b/drivers/staging/bcm/InterfaceMisc.c @@ -11,17 +11,24 @@ int InterfaceRDM(struct bcm_interface_adapter *psIntfAdapter, return -EINVAL; if (psIntfAdapter->psAdapter->device_removed == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, "Device got removed"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + "Device got removed"); return -ENODEV; } - if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "Currently Xaction is not allowed on the bus"); + if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && + (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + DBG_LVL_ALL, + "Currently Xaction is not allowed on the bus"); return -EACCES; } - if (psIntfAdapter->bSuspended == TRUE || psIntfAdapter->bPreparingForBusSuspend == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "Bus is in suspended states hence RDM not allowed.."); + if (psIntfAdapter->bSuspended == TRUE || + psIntfAdapter->bPreparingForBusSuspend == TRUE) { + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + DBG_LVL_ALL, + "Bus is in suspended states hence RDM not allowed.."); return -EACCES; } psIntfAdapter->psAdapter->DeviceAccess = TRUE; @@ -40,9 +47,11 @@ int InterfaceRDM(struct bcm_interface_adapter *psIntfAdapter, psIntfAdapter->psAdapter->device_removed = TRUE; if (bytes < 0) - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "RDM failed status :%d", bytes); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + DBG_LVL_ALL, "RDM failed status :%d", bytes); else - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "RDM sent %d", bytes); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + DBG_LVL_ALL, "RDM sent %d", bytes); psIntfAdapter->psAdapter->DeviceAccess = false; return bytes; @@ -59,17 +68,24 @@ int InterfaceWRM(struct bcm_interface_adapter *psIntfAdapter, return -EINVAL; if (psIntfAdapter->psAdapter->device_removed == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, "Device got removed"); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + "Device got removed"); return -ENODEV; } - if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, DBG_LVL_ALL, "Currently Xaction is not allowed on the bus..."); + if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && + (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, + DBG_LVL_ALL, + "Currently Xaction is not allowed on the bus..."); return -EACCES; } - if (psIntfAdapter->bSuspended == TRUE || psIntfAdapter->bPreparingForBusSuspend == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, DBG_LVL_ALL, "Bus is in suspended states hence RDM not allowed.."); + if (psIntfAdapter->bSuspended == TRUE || + psIntfAdapter->bPreparingForBusSuspend == TRUE) { + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, + DBG_LVL_ALL, + "Bus is in suspended states hence RDM not allowed.."); return -EACCES; } @@ -89,12 +105,14 @@ int InterfaceWRM(struct bcm_interface_adapter *psIntfAdapter, psIntfAdapter->psAdapter->device_removed = TRUE; if (retval < 0) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, DBG_LVL_ALL, "WRM failed status :%d", retval); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, + DBG_LVL_ALL, "WRM failed status :%d", retval); psIntfAdapter->psAdapter->DeviceAccess = false; return retval; } else { psIntfAdapter->psAdapter->DeviceAccess = false; - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, DBG_LVL_ALL, "WRM sent %d", retval); + BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, + DBG_LVL_ALL, "WRM sent %d", retval); return STATUS_SUCCESS; } } @@ -104,7 +122,8 @@ int BcmRDM(void *arg, void *buff, int len) { - return InterfaceRDM((struct bcm_interface_adapter *)arg, addr, buff, len); + return InterfaceRDM((struct bcm_interface_adapter *)arg, addr, buff, + len); } int BcmWRM(void *arg, @@ -112,12 +131,14 @@ int BcmWRM(void *arg, void *buff, int len) { - return InterfaceWRM((struct bcm_interface_adapter *)arg, addr, buff, len); + return InterfaceWRM((struct bcm_interface_adapter *)arg, addr, buff, + len); } int Bcm_clear_halt_of_endpoints(struct bcm_mini_adapter *Adapter) { - struct bcm_interface_adapter *psIntfAdapter = (struct bcm_interface_adapter *)(Adapter->pvInterfaceAdapter); + struct bcm_interface_adapter *psIntfAdapter = + (struct bcm_interface_adapter *)(Adapter->pvInterfaceAdapter); int status = STATUS_SUCCESS; /* @@ -126,12 +147,14 @@ int Bcm_clear_halt_of_endpoints(struct bcm_mini_adapter *Adapter) * @pipe: endpoint "pipe" being cleared * @ Context: !in_interrupt () * - * usb_clear_halt is the synchrnous call and returns 0 on success else returns with error code. - * This is used to clear halt conditions for bulk and interrupt endpoints only. + * usb_clear_halt is the synchrnous call and returns 0 on success else + * returns with error code. + * This is used to clear halt conditions for bulk and interrupt + * endpoints only. * Control and isochronous endpoints never halts. * - * Any URBs queued for such an endpoint should normally be unlinked by the driver - * before clearing the halt condition. + * Any URBs queued for such an endpoint should normally be unlinked by + * the driver before clearing the halt condition. * */ @@ -139,17 +162,29 @@ int Bcm_clear_halt_of_endpoints(struct bcm_mini_adapter *Adapter) Bcm_kill_all_URBs(psIntfAdapter); /* clear the halted/stalled state for every end point */ - status = usb_clear_halt(psIntfAdapter->udev, psIntfAdapter->sIntrIn.int_in_pipe); + status = usb_clear_halt(psIntfAdapter->udev, + psIntfAdapter->sIntrIn.int_in_pipe); if (status != STATUS_SUCCESS) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, DBG_LVL_ALL, "Unable to Clear Halt of Interrupt IN end point. :%d ", status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, + DBG_LVL_ALL, + "Unable to Clear Halt of Interrupt IN end point. :%d ", + status); - status = usb_clear_halt(psIntfAdapter->udev, psIntfAdapter->sBulkIn.bulk_in_pipe); + status = usb_clear_halt(psIntfAdapter->udev, + psIntfAdapter->sBulkIn.bulk_in_pipe); if (status != STATUS_SUCCESS) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, DBG_LVL_ALL, "Unable to Clear Halt of Bulk IN end point. :%d ", status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, + DBG_LVL_ALL, + "Unable to Clear Halt of Bulk IN end point. :%d ", + status); - status = usb_clear_halt(psIntfAdapter->udev, psIntfAdapter->sBulkOut.bulk_out_pipe); + status = usb_clear_halt(psIntfAdapter->udev, + psIntfAdapter->sBulkOut.bulk_out_pipe); if (status != STATUS_SUCCESS) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, DBG_LVL_ALL, "Unable to Clear Halt of Bulk OUT end point. :%d ", status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, INTF_INIT, + DBG_LVL_ALL, + "Unable to Clear Halt of Bulk OUT end point. :%d ", + status); return status; } @@ -168,9 +203,9 @@ void Bcm_kill_all_URBs(struct bcm_interface_adapter *psIntfAdapter) * upon return all completion handlers will have finished and the URB * will be totally idle and available for reuse * - * This routine may not be used in an interrupt context (such as a bottom - * half or a completion handler), or when holding a spinlock, or in other - * situations where the caller can't schedule(). + * This routine may not be used in an interrupt context (such as a + * bottom half or a completion handler), or when holding a spinlock, or + * in other situations where the caller can't schedule(). * */ @@ -208,7 +243,8 @@ void putUsbSuspend(struct work_struct *work) { struct bcm_interface_adapter *psIntfAdapter = NULL; struct usb_interface *intf = NULL; - psIntfAdapter = container_of(work, struct bcm_interface_adapter, usbSuspendWork); + psIntfAdapter = container_of(work, struct bcm_interface_adapter, + usbSuspendWork); intf = psIntfAdapter->interface; if (psIntfAdapter->bSuspended == false) -- cgit From 40e61d1279eb0746af2c02c10e3d261bdea70046 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 1 Jul 2014 09:50:09 +0200 Subject: Staging: bcm: InterfaceMisc.c: Outsourced doubled error checking Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceMisc.c | 69 +++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/InterfaceMisc.c b/drivers/staging/bcm/InterfaceMisc.c index fff7d68e1fe4..a0f159e17149 100644 --- a/drivers/staging/bcm/InterfaceMisc.c +++ b/drivers/staging/bcm/InterfaceMisc.c @@ -1,36 +1,46 @@ #include "headers.h" -int InterfaceRDM(struct bcm_interface_adapter *psIntfAdapter, - unsigned int addr, - void *buff, - int len) +static int adapter_err_occurred(const struct bcm_interface_adapter *ad) { - int bytes; - - if (!psIntfAdapter) - return -EINVAL; - - if (psIntfAdapter->psAdapter->device_removed == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, + if (ad->psAdapter->device_removed == TRUE) { + BCM_DEBUG_PRINT(ad->psAdapter, DBG_TYPE_PRINTK, 0, 0, "Device got removed"); return -ENODEV; } - if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && - (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + if ((ad->psAdapter->StopAllXaction == TRUE) && + (ad->psAdapter->chip_id >= T3LPB)) { + BCM_DEBUG_PRINT(ad->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "Currently Xaction is not allowed on the bus"); return -EACCES; } - if (psIntfAdapter->bSuspended == TRUE || - psIntfAdapter->bPreparingForBusSuspend == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, RDM, + if (ad->bSuspended == TRUE || ad->bPreparingForBusSuspend == TRUE) { + BCM_DEBUG_PRINT(ad->psAdapter, DBG_TYPE_OTHERS, RDM, DBG_LVL_ALL, "Bus is in suspended states hence RDM not allowed.."); return -EACCES; } + + return 0; +} + +int InterfaceRDM(struct bcm_interface_adapter *psIntfAdapter, + unsigned int addr, + void *buff, + int len) +{ + int bytes; + int err = 0; + + if (!psIntfAdapter) + return -EINVAL; + + err = adapter_err_occurred(psIntfAdapter); + if (err) + return err; + psIntfAdapter->psAdapter->DeviceAccess = TRUE; bytes = usb_control_msg(psIntfAdapter->udev, @@ -63,31 +73,14 @@ int InterfaceWRM(struct bcm_interface_adapter *psIntfAdapter, int len) { int retval = 0; + int err = 0; if (!psIntfAdapter) return -EINVAL; - if (psIntfAdapter->psAdapter->device_removed == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_PRINTK, 0, 0, - "Device got removed"); - return -ENODEV; - } - - if ((psIntfAdapter->psAdapter->StopAllXaction == TRUE) && - (psIntfAdapter->psAdapter->chip_id >= T3LPB)) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, - DBG_LVL_ALL, - "Currently Xaction is not allowed on the bus..."); - return -EACCES; - } - - if (psIntfAdapter->bSuspended == TRUE || - psIntfAdapter->bPreparingForBusSuspend == TRUE) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_OTHERS, WRM, - DBG_LVL_ALL, - "Bus is in suspended states hence RDM not allowed.."); - return -EACCES; - } + err = adapter_err_occurred(psIntfAdapter); + if (err) + return err; psIntfAdapter->psAdapter->DeviceAccess = TRUE; -- cgit From f94f771cc667bdf9ab6a4869bcd19de41c180602 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Wed, 2 Jul 2014 21:16:39 -0500 Subject: staging: comedi: addi_apci_1564: move addi_watchdog.h include to addi_apci_1564.c Commit aed3f9d (staging: comedi: addi_apci_1564: absorb apci1564_reset()) moved the only use of addi_watchdog.h from hwdrv_apci1564.c to addi_apci_1564.c, but left the include statement itself in the former file. Move this include to the file which actually uses it. Signed-off-by: Chase Southwood Cc: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c | 2 -- drivers/staging/comedi/drivers/addi_apci_1564.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 4007fd2d9fa4..7326f3aff901 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -21,8 +21,6 @@ * */ -#include "../addi_watchdog.h" - #define APCI1564_ADDRESS_RANGE 128 /* Digital Input IRQ Function Selection */ diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index f71ee02ed626..59786e7c9582 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -4,6 +4,7 @@ #include "../comedidev.h" #include "comedi_fc.h" #include "amcc_s5933.h" +#include "addi_watchdog.h" #include "addi-data/addi_common.h" -- cgit From f89ced89d8c0d155e8d802612e3860a440d04afe Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Wed, 2 Jul 2014 21:17:04 -0500 Subject: staging: comedi: addi_apci_1564: fix use of apci1564_reset() to disable DI interrupts apci1564_cos_insn_config() is currently using apci1564_reset() to disable digital input interrupts when the configuration operation is COMEDI_DIGITAL_TRIG_DISABLE. However, this is incorrect as the device reset function also resets the registers for the digital outputs, timer, watchdog, and counters as well. Replace the reset function call with a direct disabling of just the digital input interrupts. Signed-off-by: Chase Southwood Cc: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 59786e7c9582..0141ed9592da 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -285,7 +285,10 @@ static int apci1564_cos_insn_config(struct comedi_device *dev, devpriv->ctrl = 0; devpriv->mode1 = 0; devpriv->mode2 = 0; - apci1564_reset(dev); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE1_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_DI_INT_MODE2_REG); break; case COMEDI_DIGITAL_TRIG_ENABLE_EDGES: if (devpriv->ctrl != (APCI1564_DI_INT_ENABLE | -- cgit From b11771aa4c22074df2b804c02433c5357514f5c5 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Wed, 2 Jul 2014 21:17:21 -0500 Subject: staging: comedi: addi_apci_1564: clean up apci1564_interrupt() Remove the checks for interrupts from unknown sources. This situation should never occur and the checks were doing nothing to help the situation. Also, the portion of the function for handling counter interrupts is reapeated four times (once for each counter), but is completely identical save for the register is is accessing, so we can handle all four counters with a for loop. Finally, the interrupt handler is incorrectly setting and then checking devpriv->timer_select_mode before processing some of the triggered interrupts, so just remove all occurrences of this. Signed-off-by: Chase Southwood Cc: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 133 +++++------------------- 1 file changed, 27 insertions(+), 106 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 0141ed9592da..5924421bc949 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -58,48 +58,33 @@ static irqreturn_t apci1564_interrupt(int irq, void *d) struct comedi_device *dev = d; struct apci1564_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; - unsigned int ui_DO, ui_DI; - unsigned int ui_Timer; - unsigned int ui_C1, ui_C2, ui_C3, ui_C4; - unsigned int ul_Command2 = 0; + unsigned int status; + unsigned int ctrl; + unsigned int chan; /* check interrupt is from this device */ if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) & INTCSR_INTR_ASSERTED) == 0) return IRQ_NONE; - /* check which interrupt was triggered */ - ui_DI = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG) & - APCI1564_DI_INT_ENABLE; - ui_DO = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG) & 0x01; - ui_Timer = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG) & 0x01; - ui_C1 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER1)) & 0x1; - ui_C2 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER2)) & 0x1; - ui_C3 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER3)) & 0x1; - ui_C4 = - inl(dev->iobase + APCI1564_TCW_IRQ_REG(APCI1564_COUNTER4)) & 0x1; - if (ui_DI == 0 && ui_DO == 0 && ui_Timer == 0 && ui_C1 == 0 - && ui_C2 == 0 && ui_C3 == 0 && ui_C4 == 0) { - return IRQ_HANDLED; - } - - if (ui_DI) { + status = inl(devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + if (status & APCI1564_DI_INT_ENABLE) { /* disable the interrupt */ - outl(ui_DI & APCI1564_DI_INT_DISABLE, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + outl(status & APCI1564_DI_INT_DISABLE, + devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); - s->state = inl(dev->iobase + APCI1564_DI_INT_STATUS_REG) & 0xffff; + s->state = inl(dev->iobase + APCI1564_DI_INT_STATUS_REG) + & 0xffff; comedi_buf_put(s, s->state); s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS; comedi_event(dev, s); /* enable the interrupt */ - outl(ui_DI, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); + outl(status, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); } - if (ui_DO == 1) { + status = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG); + if (status & 0x01) { /* Check for Digital Output interrupt Type */ /* 1: VCC interrupt */ /* 2: CC interrupt */ @@ -112,98 +97,34 @@ static irqreturn_t apci1564_interrupt(int irq, void *d) send_sig(SIGIO, devpriv->tsk_current, 0); } - if (ui_Timer == 1) { - devpriv->timer_select_mode = ADDIDATA_TIMER; - if (devpriv->timer_select_mode) { - - /* Disable Timer Interrupt */ - ul_Command2 = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Timer Interrupt */ - - outl(ul_Command2, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - } - } - - if (ui_C1 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER1)); - } - } - - if (ui_C2 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { + status = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG); + if (status & 0x01) { + /* Disable Timer Interrupt */ + ctrl = inl(devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); + outl(0x0, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); + /* Send a signal to from kernel to user space */ + send_sig(SIGIO, devpriv->tsk_current, 0); - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER2)); - } + /* Enable Timer Interrupt */ + outl(ctrl, devpriv->amcc_iobase + APCI1564_TIMER_CTRL_REG); } - if (ui_C3 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - + for (chan = 0; chan < 4; chan++) { + status = inl(dev->iobase + APCI1564_TCW_IRQ_REG(chan)); + if (status & 0x01) { /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + ctrl = inl(dev->iobase + APCI1564_TCW_CTRL_REG(chan)); + outl(0x0, dev->iobase + APCI1564_TCW_CTRL_REG(chan)); /* Send a signal to from kernel to user space */ send_sig(SIGIO, devpriv->tsk_current, 0); /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER3)); + outl(ctrl, dev->iobase + APCI1564_TCW_CTRL_REG(chan)); } } - if (ui_C4 == 1) { - devpriv->timer_select_mode = ADDIDATA_COUNTER; - if (devpriv->timer_select_mode) { - - /* Disable Counter Interrupt */ - ul_Command2 = - inl(dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - outl(0x0, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - - /* Send a signal to from kernel to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - - /* Enable Counter Interrupt */ - outl(ul_Command2, - dev->iobase + APCI1564_TCW_CTRL_REG(APCI1564_COUNTER4)); - } - } return IRQ_HANDLED; } -- cgit From 0e02dcae1ce238a2afda25da8cfd829c540088bb Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 2 Jul 2014 12:02:16 +0100 Subject: staging: comedi: allow COMEDI_BUFINFO, COMEDI_CANCEL and COMEDI_POLL on locked subdevice Comedi subdevices can be locked for mostly exclusive access by a particular file object by means of the COMEDI_LOCK ioctl. Some operations disregard the lock. For example, the read() and write() file operations are allowed for the file object that set up an asynchronous command on the subdevice (making it "busy") regardless of whether it is locked. The COMEDI_BUFINFO, COMEDI_CANCEL and COMEDI_POLL ioctls are also associated with the file object that made the subdevice "busy" with a command. They currently obey the exclusive access lock on the subdevice as well, but it makes more sense for them to ignore it like the read() and write() file operations. Remove the exclusive subdevice access checks for these ioctls. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index d4904cc50f77..e8e38098dcf8 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -968,9 +968,6 @@ static int do_bufinfo_ioctl(struct comedi_device *dev, s = &dev->subdevices[bi.subdevice]; - if (s->lock && s->lock != file) - return -EACCES; - async = s->async; if (!async) { @@ -1744,9 +1741,6 @@ static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg, if (s->async == NULL) return -EINVAL; - if (s->lock && s->lock != file) - return -EACCES; - if (!s->busy) return 0; @@ -1781,9 +1775,6 @@ static int do_poll_ioctl(struct comedi_device *dev, unsigned int arg, return -EINVAL; s = &dev->subdevices[arg]; - if (s->lock && s->lock != file) - return -EACCES; - if (!s->busy) return 0; -- cgit From 30c760c1e68b49e11a22ea0febe161e5eeb49530 Mon Sep 17 00:00:00 2001 From: Bernd Porr Date: Tue, 1 Jul 2014 22:14:42 +0100 Subject: staging: comedi: usbduxsigma: fixing rounding error in the range struct The AD converter on the usbsigma turns vref (2.5V/2) into the binary value 0x780000. However the full scale range goes up to 0x800000 so that vref/2 needs to be upscaled by 0x800000/0x780000 which is 1.06bar. In the driver it's been 1.06 without the infinite 6666. I've put the fraction in the code so that the compiler can calculate the most precise scaling value by itself. Signed-off-by: Bernd Porr Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/usbduxsigma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c index ccc3ef7ba55c..e869af4784c6 100644 --- a/drivers/staging/comedi/drivers/usbduxsigma.c +++ b/drivers/staging/comedi/drivers/usbduxsigma.c @@ -136,7 +136,7 @@ static const struct comedi_lrange usbduxsigma_ai_range = { 1, { - BIP_RANGE(2.65 / 2.0) + BIP_RANGE(2.5 * 0x800000 / 0x780000 / 2.0) } }; -- cgit From cdd15d892582a2d11418cce04c13cb806a8a94f0 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 29 Jun 2014 22:52:52 +0300 Subject: staging: octeon-usb: drop dequeue tasklet Cancel requests synchronously instead of using the dequeue tasklet. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 38 +-------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index c4c731f60529..fca4d3407eb6 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -422,8 +422,6 @@ struct cvmx_usb_state { struct octeon_hcd { spinlock_t lock; struct cvmx_usb_state usb; - struct tasklet_struct dequeue_tasklet; - struct list_head dequeue_list; }; /* This macro spins on a field waiting for it to reach a value */ @@ -2167,15 +2165,6 @@ static void octeon_usb_urb_complete_callback(struct cvmx_usb_state *usb, urb->actual_length = bytes_transferred; urb->hcpriv = NULL; - if (!list_empty(&urb->urb_list)) - /* - * It is on the dequeue_list, but we are going to call - * usb_hcd_giveback_urb(), so we must clear it from - * the list. We got to it before the - * octeon_usb_urb_dequeue_work() tasklet did. - */ - list_del_init(&urb->urb_list); - /* For Isochronous transactions we need to update the URB packet status list from data in our private copy */ if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) { @@ -3304,7 +3293,6 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd, struct usb_host_endpoint *ep = urb->ep; urb->status = 0; - INIT_LIST_HEAD(&urb->urb_list); /* not enqueued on dequeue_list */ spin_lock_irqsave(&priv->lock, flags); if (!ep->hcpriv) { @@ -3461,23 +3449,6 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd, return 0; } -static void octeon_usb_urb_dequeue_work(unsigned long arg) -{ - struct urb *urb; - struct urb *next; - unsigned long flags; - struct octeon_hcd *priv = (struct octeon_hcd *)arg; - - spin_lock_irqsave(&priv->lock, flags); - - list_for_each_entry_safe(urb, next, &priv->dequeue_list, urb_list) { - list_del_init(&urb->urb_list); - cvmx_usb_cancel(&priv->usb, urb->ep->hcpriv, urb->hcpriv); - } - - spin_unlock_irqrestore(&priv->lock, flags); -} - static int octeon_usb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) @@ -3491,12 +3462,10 @@ static int octeon_usb_urb_dequeue(struct usb_hcd *hcd, spin_lock_irqsave(&priv->lock, flags); urb->status = status; - list_add_tail(&urb->urb_list, &priv->dequeue_list); + cvmx_usb_cancel(&priv->usb, urb->ep->hcpriv, urb->hcpriv); spin_unlock_irqrestore(&priv->lock, flags); - tasklet_schedule(&priv->dequeue_tasklet); - return 0; } @@ -3868,10 +3837,6 @@ static int octeon_usb_probe(struct platform_device *pdev) spin_lock_init(&priv->lock); - tasklet_init(&priv->dequeue_tasklet, octeon_usb_urb_dequeue_work, - (unsigned long)priv); - INIT_LIST_HEAD(&priv->dequeue_list); - status = cvmx_usb_initialize(&priv->usb, usb_num, initialize_flags); if (status) { dev_dbg(dev, "USB initialization failed with %d\n", status); @@ -3908,7 +3873,6 @@ static int octeon_usb_remove(struct platform_device *pdev) unsigned long flags; usb_remove_hcd(hcd); - tasklet_kill(&priv->dequeue_tasklet); spin_lock_irqsave(&priv->lock, flags); status = cvmx_usb_shutdown(&priv->usb); spin_unlock_irqrestore(&priv->lock, flags); -- cgit From e5b90898d6360d8904ba439cafa308b073f27a83 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 29 Jun 2014 22:52:53 +0300 Subject: staging: octeon-usb: use usb_hcd_link_urb_to_ep() The driver did not use link_urb_to_ep() / unlink_urb_from_ep(). This caused odd behaviour in some error recovery situations, all requests would start to fail after the first failure. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index fca4d3407eb6..ab237c5b61b5 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -2230,6 +2230,7 @@ static void octeon_usb_urb_complete_callback(struct cvmx_usb_state *usb, urb->status = -EPROTO; break; } + usb_hcd_unlink_urb_from_ep(octeon_to_hcd(priv), urb); spin_unlock(&priv->lock); usb_hcd_giveback_urb(octeon_to_hcd(priv), urb, urb->status); spin_lock(&priv->lock); @@ -3291,10 +3292,17 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd, unsigned long flags; struct cvmx_usb_iso_packet *iso_packet; struct usb_host_endpoint *ep = urb->ep; + int rc; urb->status = 0; spin_lock_irqsave(&priv->lock, flags); + rc = usb_hcd_link_urb_to_ep(hcd, urb); + if (rc) { + spin_unlock_irqrestore(&priv->lock, flags); + return rc; + } + if (!ep->hcpriv) { enum cvmx_usb_transfer transfer_type; enum cvmx_usb_speed speed; @@ -3370,6 +3378,7 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd, >> 11) & 0x3, split_device, split_port); if (!pipe) { + usb_hcd_unlink_urb_from_ep(hcd, urb); spin_unlock_irqrestore(&priv->lock, flags); dev_dbg(dev, "Failed to create pipe\n"); return -ENOMEM; @@ -3440,6 +3449,7 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd, break; } if (!transaction) { + usb_hcd_unlink_urb_from_ep(hcd, urb); spin_unlock_irqrestore(&priv->lock, flags); dev_dbg(dev, "Failed to submit\n"); return -ENOMEM; @@ -3455,18 +3465,24 @@ static int octeon_usb_urb_dequeue(struct usb_hcd *hcd, { struct octeon_hcd *priv = hcd_to_octeon(hcd); unsigned long flags; + int rc; if (!urb->dev) return -EINVAL; spin_lock_irqsave(&priv->lock, flags); + rc = usb_hcd_check_unlink_urb(hcd, urb, status); + if (rc) + goto out; + urb->status = status; cvmx_usb_cancel(&priv->usb, urb->ep->hcpriv, urb->hcpriv); +out: spin_unlock_irqrestore(&priv->lock, flags); - return 0; + return rc; } static void octeon_usb_endpoint_disable(struct usb_hcd *hcd, -- cgit From d8c39d3f20049473a6d489deb82b5219f2a21316 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 29 Jun 2014 22:52:54 +0300 Subject: staging: octeon-usb: don't retry on data toggle error On data toggle error, we don't know if and how many bytes were successfully transferred by DMA. We should just fail the transaction instead of trying a retry. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index ab237c5b61b5..59cf921f1b59 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -2840,8 +2840,9 @@ static int __cvmx_usb_poll_channel(struct cvmx_usb_state *usb, int channel) __cvmx_usb_perform_complete(usb, pipe, transaction, CVMX_USB_COMPLETE_BABBLEERR); } else if (usbc_hcint.s.datatglerr) { - /* We'll retry the exact same transaction again */ - transaction->retries++; + /* Data toggle error */ + __cvmx_usb_perform_complete(usb, pipe, transaction, + CVMX_USB_COMPLETE_DATATGLERR); } else if (usbc_hcint.s.nyet) { /* * NYET as a response is only allowed in three cases: as a -- cgit From 8dcf4ecea91582ec9c816d91f06475ba92a65ed7 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 29 Jun 2014 22:52:55 +0300 Subject: staging: octeon-usb: return transferred bytes only on success Return transferred bytes only when transfer was successful. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index 59cf921f1b59..a65b708b804a 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -2162,7 +2162,11 @@ static void octeon_usb_urb_complete_callback(struct cvmx_usb_state *usb, struct usb_hcd *hcd = octeon_to_hcd(priv); struct device *dev = hcd->self.controller; - urb->actual_length = bytes_transferred; + if (likely(status == CVMX_USB_COMPLETE_SUCCESS)) + urb->actual_length = bytes_transferred; + else + urb->actual_length = 0; + urb->hcpriv = NULL; /* For Isochronous transactions we need to update the URB packet status -- cgit From e5873388e2fe04aca439a44ae00ccfeb8536fc37 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 29 Jun 2014 22:52:56 +0300 Subject: staging: octeon-usb: fix endianness bug wHubCharacteristics gets wrong value on big-endian CPUs. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index a65b708b804a..095cc146eefc 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -3628,7 +3628,7 @@ static int octeon_usb_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, desc->bDescLength = 9; desc->bDescriptorType = 0x29; desc->bNbrPorts = 1; - desc->wHubCharacteristics = 0x08; + desc->wHubCharacteristics = cpu_to_le16(0x08); desc->bPwrOn2PwrGood = 1; desc->bHubContrCurrent = 0; desc->u.hs.DeviceRemovable[0] = 0; -- cgit From fd6f578822fdc2ecd74f4f51550c1144a3c9c613 Mon Sep 17 00:00:00 2001 From: Fabian Frederick Date: Mon, 30 Jun 2014 20:31:26 +0200 Subject: staging/lustre/obdclass: use static const for seq_operations lprocfs_stats_seq_sops is only used in static int lprocfs_stats_seq_open with seq_open as const struct seq_operations * Cc: Greg Kroah-Hartman Cc: Peng Tao Cc: devel@driverdev.osuosl.org Signed-off-by: Fabian Frederick Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 1432dd74fe95..b0a12c4a24b8 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -1196,7 +1196,7 @@ out: return (rc < 0) ? rc : 0; } -struct seq_operations lprocfs_stats_seq_sops = { +static const struct seq_operations lprocfs_stats_seq_sops = { .start = lprocfs_stats_seq_start, .stop = lprocfs_stats_seq_stop, .next = lprocfs_stats_seq_next, -- cgit From a71d10df0d7ee1a65905d99b72d8d37edf5c81ef Mon Sep 17 00:00:00 2001 From: Fabian Frederick Date: Tue, 1 Jul 2014 21:38:02 +0200 Subject: staging/lustre/libcfs: use ARRAY_SIZE instead of sizeof/sizeof[0] use macro definition Cc: Greg Kroah-Hartman Cc: Josh Triplett Cc: devel@driverdev.osuosl.org Signed-off-by: Fabian Frederick Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/nidstrings.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/nidstrings.c b/drivers/staging/lustre/lustre/libcfs/nidstrings.c index 87705ae4480f..4fc7b452f3ba 100644 --- a/drivers/staging/lustre/lustre/libcfs/nidstrings.c +++ b/drivers/staging/lustre/lustre/libcfs/nidstrings.c @@ -74,8 +74,7 @@ libcfs_next_nidstring(void) spin_lock_irqsave(&libcfs_nidstring_lock, flags); str = libcfs_nidstrings[libcfs_nidstring_idx++]; - if (libcfs_nidstring_idx == - sizeof(libcfs_nidstrings)/sizeof(libcfs_nidstrings[0])) + if (libcfs_nidstring_idx == ARRAY_SIZE(libcfs_nidstrings)) libcfs_nidstring_idx = 0; spin_unlock_irqrestore(&libcfs_nidstring_lock, flags); @@ -198,7 +197,7 @@ static struct netstrfns libcfs_netstrfns[] = { {/* .nf_type */ -1}, }; -const int libcfs_nnetstrfns = sizeof(libcfs_netstrfns)/sizeof(libcfs_netstrfns[0]); +const int libcfs_nnetstrfns = ARRAY_SIZE(libcfs_netstrfns); int libcfs_lo_str2addr(const char *str, int nob, __u32 *addr) -- cgit From 57fc3b7c4d4dbc368d1b108d63fc9c465204c43a Mon Sep 17 00:00:00 2001 From: Rasmus Villemoes Date: Tue, 1 Jul 2014 12:25:44 +0200 Subject: staging: rtl8821ae: Pass large struct by const reference struct rtl_stats is rather huge (152 bytes), and since rtl8812ae_rx_command_packet_handler() does not modify it, it might as well be passed by const reference. Reported by Coverity: CID 1167285 Signed-off-by: Rasmus Villemoes Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/pci.c | 2 +- drivers/staging/rtl8821ae/rtl8821ae/sw.c | 4 ++-- drivers/staging/rtl8821ae/wifi.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/pci.c b/drivers/staging/rtl8821ae/pci.c index e194ffe58acc..f9847d1fbdeb 100644 --- a/drivers/staging/rtl8821ae/pci.c +++ b/drivers/staging/rtl8821ae/pci.c @@ -861,7 +861,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) break; } - rtlpriv->cfg->ops->rx_command_packet_handler(hw, status, skb); + rtlpriv->cfg->ops->rx_command_packet_handler(hw, &status, skb); /* *NOTICE This can not be use for mac80211, diff --git a/drivers/staging/rtl8821ae/rtl8821ae/sw.c b/drivers/staging/rtl8821ae/rtl8821ae/sw.c index 26212755f88e..115002f98e2d 100644 --- a/drivers/staging/rtl8821ae/rtl8821ae/sw.c +++ b/drivers/staging/rtl8821ae/rtl8821ae/sw.c @@ -227,14 +227,14 @@ void rtl8821ae_deinit_sw_vars(struct ieee80211_hw *hw) static u32 rtl8812ae_rx_command_packet_handler( struct ieee80211_hw *hw, - struct rtl_stats status, + const struct rtl_stats *status, struct sk_buff *skb ) { u32 result = 0; struct rtl_priv *rtlpriv = rtl_priv(hw); - switch (status.packet_report_type) { + switch (status->packet_report_type) { case NORMAL_RX: result = 0; break; diff --git a/drivers/staging/rtl8821ae/wifi.h b/drivers/staging/rtl8821ae/wifi.h index e8250dad613b..218cd44fbc64 100644 --- a/drivers/staging/rtl8821ae/wifi.h +++ b/drivers/staging/rtl8821ae/wifi.h @@ -1853,7 +1853,7 @@ struct rtl_hal_ops { u32 cmd_len, u8 *p_cmdbuffer); bool (*get_btc_status)(void); u32 (*rx_command_packet_handler)(struct ieee80211_hw *hw, - struct rtl_stats status, + const struct rtl_stats *status, struct sk_buff *skb); }; -- cgit From bc4f07c86eec8d530d8124530067b589b4be5c71 Mon Sep 17 00:00:00 2001 From: Rasmus Villemoes Date: Tue, 1 Jul 2014 12:25:45 +0200 Subject: staging: rtl8192ee: Pass large struct by const reference struct rtl_stats is rather huge (152 bytes), and since rtl92ee_rx_command_packet() does not modify it, it might as well be passed by const reference. Reported by Coverity: CID 1222131 Signed-off-by: Rasmus Villemoes Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/pci.c | 2 +- drivers/staging/rtl8192ee/rtl8192ee/trx.c | 4 ++-- drivers/staging/rtl8192ee/rtl8192ee/trx.h | 2 +- drivers/staging/rtl8192ee/wifi.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/pci.c b/drivers/staging/rtl8192ee/pci.c index 3fe9b7ba01d6..f3abbcc9f3ba 100644 --- a/drivers/staging/rtl8192ee/pci.c +++ b/drivers/staging/rtl8192ee/pci.c @@ -892,7 +892,7 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) } /* handle command packet here */ - if (rtlpriv->cfg->ops->rx_command_packet(hw, stats, skb)) { + if (rtlpriv->cfg->ops->rx_command_packet(hw, &stats, skb)) { dev_kfree_skb_any(skb); goto end; } diff --git a/drivers/staging/rtl8192ee/rtl8192ee/trx.c b/drivers/staging/rtl8192ee/rtl8192ee/trx.c index c930f52ec8c8..1190c8bdb0d3 100644 --- a/drivers/staging/rtl8192ee/rtl8192ee/trx.c +++ b/drivers/staging/rtl8192ee/rtl8192ee/trx.c @@ -1263,13 +1263,13 @@ bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index) } u32 rtl92ee_rx_command_packet(struct ieee80211_hw *hw, - struct rtl_stats status, + const struct rtl_stats *status, struct sk_buff *skb) { u32 result = 0; struct rtl_priv *rtlpriv = rtl_priv(hw); - switch (status.packet_report_type) { + switch (status->packet_report_type) { case NORMAL_RX: result = 0; break; diff --git a/drivers/staging/rtl8192ee/rtl8192ee/trx.h b/drivers/staging/rtl8192ee/rtl8192ee/trx.h index c2cd5813a2b9..e04ee7e6d9b2 100644 --- a/drivers/staging/rtl8192ee/rtl8192ee/trx.h +++ b/drivers/staging/rtl8192ee/rtl8192ee/trx.h @@ -872,6 +872,6 @@ void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, bool b_firstseg, bool b_lastseg, struct sk_buff *skb); u32 rtl92ee_rx_command_packet(struct ieee80211_hw *hw, - struct rtl_stats status, + const struct rtl_stats *status, struct sk_buff *skb); #endif diff --git a/drivers/staging/rtl8192ee/wifi.h b/drivers/staging/rtl8192ee/wifi.h index 96fa261a70a5..a37176af845e 100644 --- a/drivers/staging/rtl8192ee/wifi.h +++ b/drivers/staging/rtl8192ee/wifi.h @@ -1946,7 +1946,7 @@ struct rtl_hal_ops { u32 cmd_len, u8 *p_cmdbuffer); bool (*get_btc_status)(void); u32 (*rx_command_packet)(struct ieee80211_hw *hw, - struct rtl_stats status, struct sk_buff *skb); + const struct rtl_stats *status, struct sk_buff *skb); void (*add_wowlan_pattern)(struct ieee80211_hw *hw, struct rtl_wow_pattern *rtl_pattern, u8 index); -- cgit From dd3fde11d3642e37f563e43ef10cd03377923e50 Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Mon, 30 Jun 2014 18:55:48 +0530 Subject: staging: speakup: speakup_dectlk.c - use time_before_eq() - this replaces jiffies comparision with safer function using time_after_eq() Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/speakup/speakup_dectlk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/speakup/speakup_dectlk.c b/drivers/staging/speakup/speakup_dectlk.c index af848686be71..c07c9670eef4 100644 --- a/drivers/staging/speakup/speakup_dectlk.c +++ b/drivers/staging/speakup/speakup_dectlk.c @@ -267,7 +267,7 @@ static void do_catch_up(struct spk_synth *synth) else if (ch <= SPACE) { if (!in_escape && strchr(",.!?;:", last)) spk_serial_out(PROCSPEECH); - if (jiffies >= jiff_max) { + if (time_after_eq(jiffies, jiff_max)) { if (!in_escape) spk_serial_out(PROCSPEECH); spin_lock_irqsave(&speakup_info.spinlock, -- cgit From 4fa426021426bb1846b3e86dee74517e481e089f Mon Sep 17 00:00:00 2001 From: Emil Goode Date: Wed, 2 Jul 2014 11:25:51 +0200 Subject: Staging: rtl8192e: Fix potential NULL pointer dereference We need to make sure the struct rtllib_device pointer ieee is not NULL after the goto rx_dropped label since it is dereferenced there. Signed-off-by: Emil Goode Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192e/rtllib_rx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192e/rtllib_rx.c b/drivers/staging/rtl8192e/rtllib_rx.c index 60de54cc601f..7db3e7445428 100644 --- a/drivers/staging/rtl8192e/rtllib_rx.c +++ b/drivers/staging/rtl8192e/rtllib_rx.c @@ -1496,7 +1496,8 @@ int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, return ret; rx_dropped: - ieee->stats.rx_dropped++; + if (ieee) + ieee->stats.rx_dropped++; return 0; } EXPORT_SYMBOL(rtllib_rx); -- cgit From 4fb6a37c3f94c1cb4b828bfcc4347771e1628f88 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Tue, 8 Jul 2014 16:54:59 +0300 Subject: staging: rtl8192ee: Correct bitmask in comparsion The issue is discovered by static checker. The proposed change (0x000c0 -> 0x000c) is likely correct because: 1. 16-bit `map` holds value coming from struct ieee80211_vht_mcs_info.tx_mcs_map, which is described so: "TX MCS map 2 bits for each stream, total 8 streams". The changed code refers to case of 2 TX streams, and 0x000c mask filters two bits related to the second stream. Some codelines below 0x0003 mask is used to test first stream. 2. Mask 0x000c is used 3 more times in that place. 3. Specifying 5 digits of hex value is uncommon, especially while working with `u16` variable. So likely the trailing zero is a typo. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=78041 Reported-by: David Binderman Signed-off-by: Andrey Utkin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/base.c b/drivers/staging/rtl8192ee/base.c index a7c69f704623..71ed12e9deb3 100644 --- a/drivers/staging/rtl8192ee/base.c +++ b/drivers/staging/rtl8192ee/base.c @@ -827,7 +827,7 @@ static u8 _rtl_get_vht_highest_n_rate(struct ieee80211_hw *hw, u16 map = le16_to_cpu(sta->vht_cap.vht_mcs.tx_mcs_map); if ((get_rf_type(rtlphy) == RF_2T2R) && - (map & 0x000c) != 0x000c0) { + (map & 0x000c) != 0x000c) { if ((map & 0x000c) >> 2 == IEEE80211_VHT_MCS_SUPPORT_0_7) hw_rate = rtlpriv->cfg->maps[RTL_RC_VHT_RATE_2SS_MCS7]; -- cgit From 6de2a1a7b9e22b267024e9adbb12360ef8139669 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Mon, 30 Jun 2014 13:46:40 +0530 Subject: staging: emxx_udc: Fix build error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ‘strict_strtol’ is deprecated. Use kstrtol instead. Fixes the following build error: drivers/staging/emxx_udc/emxx_udc.c:3288:3: error: implicit declaration of function ‘strict_strtol’ Signed-off-by: Sachin Kamat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/emxx_udc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c index ce1b95b0abfc..0003463cd231 100644 --- a/drivers/staging/emxx_udc/emxx_udc.c +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -3285,7 +3285,7 @@ static void __init nbu2ss_drv_set_ep_info( tempbuf[0] = name[2]; tempbuf[1] = '\0'; - res = strict_strtol(tempbuf, 16, &num); + res = kstrtol(tempbuf, 16, &num); if (num == 0) ep->ep.maxpacket = EP0_PACKETSIZE; -- cgit From bbd500d8cdb071e7964fc07ab988817d719e1578 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Mon, 30 Jun 2014 22:13:17 -0700 Subject: staging: gdm72xx: use consistent style for header guards Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_qos.h | 6 +++--- drivers/staging/gdm72xx/gdm_sdio.h | 6 +++--- drivers/staging/gdm72xx/gdm_usb.h | 6 +++--- drivers/staging/gdm72xx/gdm_wimax.h | 6 +++--- drivers/staging/gdm72xx/hci.h | 6 +++--- drivers/staging/gdm72xx/netlink_k.h | 7 ++++--- drivers/staging/gdm72xx/sdio_boot.h | 6 +++--- drivers/staging/gdm72xx/usb_boot.h | 6 +++--- drivers/staging/gdm72xx/usb_ids.h | 6 +++--- drivers/staging/gdm72xx/wm_ioctl.h | 7 ++++--- 10 files changed, 32 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_qos.h b/drivers/staging/gdm72xx/gdm_qos.h index 8f742f320f22..bbc8aab338b5 100644 --- a/drivers/staging/gdm72xx/gdm_qos.h +++ b/drivers/staging/gdm72xx/gdm_qos.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#if !defined(GDM_QOS_H_20090403) -#define GDM_QOS_H_20090403 +#ifndef __GDM72XX_GDM_QOS_H__ +#define __GDM72XX_GDM_QOS_H__ #include #include @@ -71,4 +71,4 @@ void gdm_qos_release_list(void *nic_ptr); int gdm_qos_send_hci_pkt(struct sk_buff *skb, struct net_device *dev); void gdm_recv_qos_hci_packet(void *nic_ptr, u8 *buf, int size); -#endif +#endif /* __GDM72XX_GDM_QOS_H__ */ diff --git a/drivers/staging/gdm72xx/gdm_sdio.h b/drivers/staging/gdm72xx/gdm_sdio.h index 0c0e2cbb727e..77ad9d686f8e 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.h +++ b/drivers/staging/gdm72xx/gdm_sdio.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#ifndef __GDM_SDIO_H__ -#define __GDM_SDIO_H__ +#ifndef __GDM72XX_GDM_SDIO_H__ +#define __GDM72XX_GDM_SDIO_H__ #include #include @@ -60,4 +60,4 @@ struct sdiowm_dev { struct work_struct ws; }; -#endif /* __GDM_SDIO_H__ */ +#endif /* __GDM72XX_GDM_SDIO_H__ */ diff --git a/drivers/staging/gdm72xx/gdm_usb.h b/drivers/staging/gdm72xx/gdm_usb.h index 30506529a8cc..8e58a25e7143 100644 --- a/drivers/staging/gdm72xx/gdm_usb.h +++ b/drivers/staging/gdm72xx/gdm_usb.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#ifndef __GDM_USB_H__ -#define __GDM_USB_H__ +#ifndef __GDM72XX_GDM_USB_H__ +#define __GDM72XX_GDM_USB_H__ #include #include @@ -75,4 +75,4 @@ struct usbwm_dev { int padding; }; -#endif /* __GDM_USB_H__ */ +#endif /* __GDM72XX_GDM_USB_H__ */ diff --git a/drivers/staging/gdm72xx/gdm_wimax.h b/drivers/staging/gdm72xx/gdm_wimax.h index 7e2c88877ed0..c640d2cc50ff 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.h +++ b/drivers/staging/gdm72xx/gdm_wimax.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#ifndef __GDM_WIMAX_H__ -#define __GDM_WIMAX_H__ +#ifndef __GDM72XX_GDM_WIMAX_H__ +#define __GDM72XX_GDM_WIMAX_H__ #include #include @@ -57,4 +57,4 @@ int register_wimax_device(struct phy_dev *phy_dev, struct device *pdev); int gdm_wimax_send_tx(struct sk_buff *skb, struct net_device *dev); void unregister_wimax_device(struct phy_dev *phy_dev); -#endif +#endif /* __GDM72XX_GDM_WIMAX_H__ */ diff --git a/drivers/staging/gdm72xx/hci.h b/drivers/staging/gdm72xx/hci.h index 059ba0021d47..ff6941eb7646 100644 --- a/drivers/staging/gdm72xx/hci.h +++ b/drivers/staging/gdm72xx/hci.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#ifndef HCI_H_20080801 -#define HCI_H_20080801 +#ifndef __GDM72XX_HCI_H__ +#define __GDM72XX_HCI_H__ #define HCI_HEADER_SIZE 4 #define HCI_VALUE_OFFS (HCI_HEADER_SIZE) @@ -204,4 +204,4 @@ struct hci_s { unsigned char data[0]; } __packed; -#endif +#endif /* __GDM72XX_HCI_H__ */ diff --git a/drivers/staging/gdm72xx/netlink_k.h b/drivers/staging/gdm72xx/netlink_k.h index b6caac16b3d3..1fe7198d539e 100644 --- a/drivers/staging/gdm72xx/netlink_k.h +++ b/drivers/staging/gdm72xx/netlink_k.h @@ -11,8 +11,9 @@ * GNU General Public License for more details. */ -#if !defined(NETLINK_H_20081202) -#define NETLINK_H_20081202 +#ifndef __GDM72XX_NETLINK_K_H__ +#define __GDM72XX_NETLINK_K_H__ + #include #include @@ -21,4 +22,4 @@ struct sock *netlink_init(int unit, void (*cb)(struct net_device *dev, u16 type, void netlink_exit(struct sock *sock); int netlink_send(struct sock *sock, int group, u16 type, void *msg, int len); -#endif +#endif /* __GDM72XX_NETLINK_K_H__ */ diff --git a/drivers/staging/gdm72xx/sdio_boot.h b/drivers/staging/gdm72xx/sdio_boot.h index 045c1f450539..e0800c6fe2fd 100644 --- a/drivers/staging/gdm72xx/sdio_boot.h +++ b/drivers/staging/gdm72xx/sdio_boot.h @@ -11,11 +11,11 @@ * GNU General Public License for more details. */ -#ifndef __SDIO_BOOT_H__ -#define __SDIO_BOOT_H__ +#ifndef __GDM72XX_SDIO_BOOT_H__ +#define __GDM72XX_SDIO_BOOT_H__ struct sdio_func; int sdio_boot(struct sdio_func *func); -#endif /* __SDIO_BOOT_H__ */ +#endif /* __GDM72XX_SDIO_BOOT_H__ */ diff --git a/drivers/staging/gdm72xx/usb_boot.h b/drivers/staging/gdm72xx/usb_boot.h index 05308e253050..5bf7190377e2 100644 --- a/drivers/staging/gdm72xx/usb_boot.h +++ b/drivers/staging/gdm72xx/usb_boot.h @@ -11,12 +11,12 @@ * GNU General Public License for more details. */ -#ifndef __USB_BOOT_H__ -#define __USB_BOOT_H__ +#ifndef __GDM72XX_USB_BOOT_H__ +#define __GDM72XX_USB_BOOT_H__ struct usb_device; int usb_boot(struct usb_device *usbdev, u16 pid); int usb_emergency(struct usb_device *usbdev); -#endif /* __USB_BOOT_H__ */ +#endif /* __GDM72XX_USB_BOOT_H__ */ diff --git a/drivers/staging/gdm72xx/usb_ids.h b/drivers/staging/gdm72xx/usb_ids.h index 1a61b3599765..8ce544de7342 100644 --- a/drivers/staging/gdm72xx/usb_ids.h +++ b/drivers/staging/gdm72xx/usb_ids.h @@ -11,8 +11,8 @@ * GNU General Public License for more details. */ -#ifndef __USB_IDS_H__ -#define __USB_IDS_H__ +#ifndef __GDM72XX_USB_IDS_H__ +#define __GDM72XX_USB_IDS_H__ /*You can replace vendor-ID as yours.*/ #define GCT_VID 0x1076 @@ -79,4 +79,4 @@ static const struct usb_device_id id_table[] = { { } }; -#endif /* __USB_IDS_H__ */ +#endif /* __GDM72XX_USB_IDS_H__ */ diff --git a/drivers/staging/gdm72xx/wm_ioctl.h b/drivers/staging/gdm72xx/wm_ioctl.h index d022c6ca0e23..ed8f649c0042 100644 --- a/drivers/staging/gdm72xx/wm_ioctl.h +++ b/drivers/staging/gdm72xx/wm_ioctl.h @@ -11,8 +11,9 @@ * GNU General Public License for more details. */ -#if !defined(WM_IOCTL_H_20080714) -#define WM_IOCTL_H_20080714 +#ifndef __GDM72XX_WM_IOCTL_H__ +#define __GDM72XX_WM_IOCTL_H__ + #if !defined(__KERNEL__) #include #endif @@ -92,4 +93,4 @@ struct wm_req_s { #define ifr_name ifr_ifrn.ifrn_name #endif -#endif +#endif /* __GDM72XX_WM_IOCTL_H__ */ -- cgit From a8a175d9fc2ddb513baf5f043c1e9de512f886f7 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Mon, 30 Jun 2014 23:32:27 -0700 Subject: staging: gdm72xx: clean up endianness conversions This patch cleans up the endianness conversions in the gdm72xx driver: - Directly use the generic byte-reordering macros for endianness conversion instead of some custom-defined macros. - Convert values on the constant side instead of the variable side when appropriate. - Add endianness annotations. Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_qos.c | 4 +-- drivers/staging/gdm72xx/gdm_sdio.c | 5 +-- drivers/staging/gdm72xx/gdm_usb.c | 12 +++---- drivers/staging/gdm72xx/gdm_wimax.c | 64 +++++++++++++++++++------------------ drivers/staging/gdm72xx/gdm_wimax.h | 10 ------ drivers/staging/gdm72xx/hci.h | 6 ++-- drivers/staging/gdm72xx/usb_boot.c | 10 +++--- 7 files changed, 49 insertions(+), 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_qos.c b/drivers/staging/gdm72xx/gdm_qos.c index b08c8e10d211..af24c57b8232 100644 --- a/drivers/staging/gdm72xx/gdm_qos.c +++ b/drivers/staging/gdm72xx/gdm_qos.c @@ -24,8 +24,6 @@ #include "hci.h" #include "gdm_qos.h" -#define B2H(x) __be16_to_cpu(x) - #define MAX_FREE_LIST_CNT 32 static struct { struct list_head head; @@ -266,7 +264,7 @@ int gdm_qos_send_hci_pkt(struct sk_buff *skb, struct net_device *dev) tcph = (struct tcphdr *)iph + iph->ihl*4; - if (B2H(ethh->h_proto) == ETH_P_IP) { + if (ethh->h_proto == cpu_to_be16(ETH_P_IP)) { if (qcb->qos_list_cnt && !qos_free_list.cnt) { entry = alloc_qos_entry(); entry->skb = skb; diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index 9d2de6ff7903..a9031738588f 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -275,8 +275,9 @@ static void send_sdu(struct sdio_func *func, struct tx_cxt *tx) aggr_len = pos; hci = (struct hci_s *)(tx->sdu_buf + TYPE_A_HEADER_SIZE); - hci->cmd_evt = H2B(WIMAX_TX_SDU_AGGR); - hci->length = H2B(aggr_len - TYPE_A_HEADER_SIZE - HCI_HEADER_SIZE); + hci->cmd_evt = cpu_to_be16(WIMAX_TX_SDU_AGGR); + hci->length = cpu_to_be16(aggr_len - TYPE_A_HEADER_SIZE - + HCI_HEADER_SIZE); spin_unlock_irqrestore(&tx->lock, flags); diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index 971976cd8d0c..5a6b86a180b3 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -36,10 +36,6 @@ MODULE_DEVICE_TABLE(usb, id_table); #define GDM7205_PADDING 256 -#define H2B(x) __cpu_to_be16(x) -#define B2H(x) __be16_to_cpu(x) -#define DB2H(x) __be32_to_cpu(x) - #define DOWNLOAD_CONF_VALUE 0x21 #ifdef CONFIG_WIMAX_GDM72XX_K_MODE @@ -541,9 +537,9 @@ static int gdm_usb_probe(struct usb_interface *intf, bConfigurationValue = usbdev->actconfig->desc.bConfigurationValue; /*USB description is set up with Little-Endian*/ - idVendor = L2H(usbdev->descriptor.idVendor); - idProduct = L2H(usbdev->descriptor.idProduct); - bcdDevice = L2H(usbdev->descriptor.bcdDevice); + idVendor = le16_to_cpu(usbdev->descriptor.idVendor); + idProduct = le16_to_cpu(usbdev->descriptor.idProduct); + bcdDevice = le16_to_cpu(usbdev->descriptor.bcdDevice); dev_info(&intf->dev, "Found GDM USB VID = 0x%04x PID = 0x%04x...\n", idVendor, idProduct); @@ -626,7 +622,7 @@ static void gdm_usb_disconnect(struct usb_interface *intf) phy_dev = usb_get_intfdata(intf); /*USB description is set up with Little-Endian*/ - idProduct = L2H(usbdev->descriptor.idProduct); + idProduct = le16_to_cpu(usbdev->descriptor.idProduct); if (idProduct != EMERGENCY_PID && bConfigurationValue != DOWNLOAD_CONF_VALUE && diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index 41480132e512..cc3e80a211f6 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -166,6 +166,7 @@ static void dump_eth_packet(struct net_device *dev, const char *title, static inline int gdm_wimax_header(struct sk_buff **pskb) { u16 buf[HCI_HEADER_SIZE / sizeof(u16)]; + struct hci_s *hci = (struct hci_s *)buf; struct sk_buff *skb = *pskb; if (unlikely(skb_headroom(skb) < HCI_HEADER_SIZE)) { @@ -181,8 +182,8 @@ static inline int gdm_wimax_header(struct sk_buff **pskb) } skb_push(skb, HCI_HEADER_SIZE); - buf[0] = H2B(WIMAX_TX_SDU); - buf[1] = H2B(skb->len - HCI_HEADER_SIZE); + hci->cmd_evt = cpu_to_be16(WIMAX_TX_SDU); + hci->length = cpu_to_be16(skb->len - HCI_HEADER_SIZE); memcpy(skb->data, buf, HCI_HEADER_SIZE); *pskb = skb; @@ -409,7 +410,7 @@ static int gdm_wimax_set_config(struct net_device *dev, struct ifmap *map) static void __gdm_wimax_set_mac_addr(struct net_device *dev, char *mac_addr) { u16 hci_pkt_buf[32 / sizeof(u16)]; - u8 *pkt = (u8 *)&hci_pkt_buf[0]; + struct hci_s *hci = (struct hci_s *)hci_pkt_buf; struct nic *nic = netdev_priv(dev); /* Since dev is registered as a ethernet device, @@ -420,13 +421,13 @@ static void __gdm_wimax_set_mac_addr(struct net_device *dev, char *mac_addr) /* Let lower layer know of this change by sending * SetInformation(MAC Address) */ - hci_pkt_buf[0] = H2B(WIMAX_SET_INFO); /* cmd_evt */ - hci_pkt_buf[1] = H2B(8); /* size */ - pkt[4] = 0; /* T */ - pkt[5] = 6; /* L */ - memcpy(pkt + 6, mac_addr, dev->addr_len); /* V */ + hci->cmd_evt = cpu_to_be16(WIMAX_SET_INFO); + hci->length = cpu_to_be16(8); + hci->data[0] = 0; /* T */ + hci->data[1] = 6; /* L */ + memcpy(&hci->data[2], mac_addr, dev->addr_len); /* V */ - gdm_wimax_send(nic, pkt, HCI_HEADER_SIZE + 8); + gdm_wimax_send(nic, hci, HCI_HEADER_SIZE + 8); } /* A driver function */ @@ -608,6 +609,7 @@ static void gdm_wimax_prepare_device(struct net_device *dev) struct hci_s *hci = (struct hci_s *)buf; u16 len = 0; u32 val = 0; + __be32 val_be32; #define BIT_MULTI_CS 0 #define BIT_WIMAX 1 @@ -616,9 +618,9 @@ static void gdm_wimax_prepare_device(struct net_device *dev) /* GetInformation mac address */ len = 0; - hci->cmd_evt = H2B(WIMAX_GET_INFO); + hci->cmd_evt = cpu_to_be16(WIMAX_GET_INFO); hci->data[len++] = TLV_T(T_MAC_ADDRESS); - hci->length = H2B(len); + hci->length = cpu_to_be16(len); gdm_wimax_send(nic, hci, HCI_HEADER_SIZE+len); val = (1<cmd_evt = H2B(WIMAX_SET_INFO); + hci->cmd_evt = cpu_to_be16(WIMAX_SET_INFO); hci->data[len++] = TLV_T(T_CAPABILITY); hci->data[len++] = TLV_L(T_CAPABILITY); - val = DH2B(val); - memcpy(&hci->data[len], &val, TLV_L(T_CAPABILITY)); + val_be32 = cpu_to_be32(val); + memcpy(&hci->data[len], &val_be32, TLV_L(T_CAPABILITY)); len += TLV_L(T_CAPABILITY); - hci->length = H2B(len); + hci->length = cpu_to_be16(len); gdm_wimax_send(nic, hci, HCI_HEADER_SIZE+len); - netdev_info(dev, "GDM WiMax Set CAPABILITY: 0x%08X\n", DB2H(val)); + netdev_info(dev, "GDM WiMax Set CAPABILITY: 0x%08X\n", val); } static int gdm_wimax_hci_get_tlv(u8 *buf, u8 *T, u16 *L, u8 **V) @@ -650,7 +652,7 @@ static int gdm_wimax_hci_get_tlv(u8 *buf, u8 *T, u16 *L, u8 **V) *T = buf[0]; if (buf[1] == 0x82) { - *L = B2H(__U82U16(&buf[2])); + *L = be16_to_cpu(__U82U16(&buf[2])); next_pos = 1/*type*/+3/*len*/; } else { *L = buf[1]; @@ -670,8 +672,8 @@ static int gdm_wimax_get_prepared_info(struct net_device *dev, char *buf, u16 cmd_evt, cmd_len; int pos = HCI_HEADER_SIZE; - cmd_evt = B2H(*(u16 *)&buf[0]); - cmd_len = B2H(*(u16 *)&buf[2]); + cmd_evt = be16_to_cpup((const __be16 *)&buf[0]); + cmd_len = be16_to_cpup((const __be16 *)&buf[2]); if (len < cmd_len + HCI_HEADER_SIZE) { netdev_err(dev, "%s: invalid length [%d/%d]\n", __func__, @@ -744,13 +746,13 @@ static void gdm_wimax_transmit_aggr_pkt(struct net_device *dev, char *buf, while (len > 0) { hci = (struct hci_s *)buf; - if (B2H(hci->cmd_evt) != WIMAX_RX_SDU) { + if (hci->cmd_evt != cpu_to_be16(WIMAX_RX_SDU)) { netdev_err(dev, "Wrong cmd_evt(0x%04X)\n", - B2H(hci->cmd_evt)); + be16_to_cpu(hci->cmd_evt)); break; } - length = B2H(hci->length); + length = be16_to_cpu(hci->length); gdm_wimax_netif_rx(dev, hci->data, length); if (length & 0x3) { @@ -775,8 +777,8 @@ static void gdm_wimax_transmit_pkt(struct net_device *dev, char *buf, int len) if (len == 0) return; - cmd_evt = B2H(*(u16 *)&buf[0]); - cmd_len = B2H(*(u16 *)&buf[2]); + cmd_evt = be16_to_cpup((const __be16 *)&buf[0]); + cmd_len = be16_to_cpup((const __be16 *)&buf[2]); if (len < cmd_len + HCI_HEADER_SIZE) { if (len) @@ -816,14 +818,14 @@ static void gdm_wimax_transmit_pkt(struct net_device *dev, char *buf, int len) static void gdm_wimax_ind_fsm_update(struct net_device *dev, struct fsm_s *fsm) { u16 buf[32 / sizeof(u16)]; - u8 *hci_pkt_buf = (u8 *)&buf[0]; + struct hci_s *hci = (struct hci_s *)buf; /* Indicate updating fsm */ - buf[0] = H2B(WIMAX_FSM_UPDATE); - buf[1] = H2B(sizeof(struct fsm_s)); - memcpy(&hci_pkt_buf[HCI_HEADER_SIZE], fsm, sizeof(struct fsm_s)); + hci->cmd_evt = cpu_to_be16(WIMAX_FSM_UPDATE); + hci->length = cpu_to_be16(sizeof(struct fsm_s)); + memcpy(&hci->data[0], fsm, sizeof(struct fsm_s)); - gdm_wimax_event_send(dev, hci_pkt_buf, + gdm_wimax_event_send(dev, (char *)hci, HCI_HEADER_SIZE + sizeof(struct fsm_s)); } @@ -836,8 +838,8 @@ static void gdm_wimax_ind_if_updown(struct net_device *dev, int if_up) up_down = if_up ? WIMAX_IF_UP : WIMAX_IF_DOWN; /* Indicate updating fsm */ - hci->cmd_evt = H2B(WIMAX_IF_UPDOWN); - hci->length = H2B(sizeof(up_down)); + hci->cmd_evt = cpu_to_be16(WIMAX_IF_UPDOWN); + hci->length = cpu_to_be16(sizeof(up_down)); hci->data[0] = up_down; gdm_wimax_event_send(dev, (char *)hci, HCI_HEADER_SIZE+sizeof(up_down)); diff --git a/drivers/staging/gdm72xx/gdm_wimax.h b/drivers/staging/gdm72xx/gdm_wimax.h index c640d2cc50ff..ae852ddebb87 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.h +++ b/drivers/staging/gdm72xx/gdm_wimax.h @@ -23,16 +23,6 @@ #define DRIVER_VERSION "3.2.3" -#define H2L(x) __cpu_to_le16(x) -#define L2H(x) __le16_to_cpu(x) -#define DH2L(x) __cpu_to_le32(x) -#define DL2H(x) __le32_to_cpu(x) - -#define H2B(x) __cpu_to_be16(x) -#define B2H(x) __be16_to_cpu(x) -#define DH2B(x) __cpu_to_be32(x) -#define DB2H(x) __be32_to_cpu(x) - struct phy_dev { void *priv_dev; struct net_device *netdev; diff --git a/drivers/staging/gdm72xx/hci.h b/drivers/staging/gdm72xx/hci.h index ff6941eb7646..dd2931d00451 100644 --- a/drivers/staging/gdm72xx/hci.h +++ b/drivers/staging/gdm72xx/hci.h @@ -199,9 +199,9 @@ #define T_DUPLEX_MODE (0xdb | (4 << 16)) struct hci_s { - unsigned short cmd_evt; - unsigned short length; - unsigned char data[0]; + __be16 cmd_evt; + __be16 length; + u8 data[0]; } __packed; #endif /* __GDM72XX_HCI_H__ */ diff --git a/drivers/staging/gdm72xx/usb_boot.c b/drivers/staging/gdm72xx/usb_boot.c index d59bac872ffe..3ccc447730e8 100644 --- a/drivers/staging/gdm72xx/usb_boot.c +++ b/drivers/staging/gdm72xx/usb_boot.c @@ -36,8 +36,8 @@ #define FW_FS "ramdisk.jffs2" struct dn_header { - u32 magic_num; - u32 file_size; + __be32 magic_num; + __be32 file_size; }; struct img_header { @@ -69,7 +69,7 @@ static void array_le32_to_cpu(u32 *arr, int num) int i; for (i = 0; i < num; i++, arr++) - *arr = __le32_to_cpu(*arr); + le32_to_cpus(arr); } static u8 *tx_buf; @@ -115,8 +115,8 @@ static int download_image(struct usb_device *usbdev, u32 size; size = ALIGN(img_len, DOWNLOAD_SIZE); - h.magic_num = __cpu_to_be32(magic_num); - h.file_size = __cpu_to_be32(size); + h.magic_num = cpu_to_be32(magic_num); + h.file_size = cpu_to_be32(size); ret = gdm_wibro_send(usbdev, &h, sizeof(h)); if (ret < 0) -- cgit From 9b34519040a268d70a5f8538e6fbc11e0b420440 Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Tue, 1 Jul 2014 14:00:14 +0100 Subject: staging: gdm72xx: remove unused code Remove code surrounded by otherwise unused #define LOOPBACK_TEST Signed-off-by: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index cc3e80a211f6..ad3d6bc0f91f 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -369,8 +369,6 @@ int gdm_wimax_send_tx(struct sk_buff *skb, struct net_device *dev) static int gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev) { int ret = 0; - struct nic *nic = netdev_priv(dev); - struct fsm_s *fsm = (struct fsm_s *)nic->sdk_data[SIOC_DATA_FSM].buf; dump_eth_packet(dev, "TX", skb->data, skb->len); @@ -380,17 +378,6 @@ static int gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev) return ret; } - #if !defined(LOOPBACK_TEST) - if (!fsm) { - netdev_err(dev, "ASSERTION ERROR: fsm is NULL!!\n"); - } else if (fsm->m_status != M_CONNECTED) { - netdev_emerg(dev, "ASSERTION ERROR: Device is NOT ready. status=%d\n", - fsm->m_status); - kfree_skb(skb); - return 0; - } - #endif - #if defined(CONFIG_WIMAX_GDM72XX_QOS) ret = gdm_qos_send_hci_pkt(skb, dev); #else @@ -921,12 +908,7 @@ int register_wimax_device(struct phy_dev *phy_dev, struct device *pdev) if (ret) goto cleanup; - #if defined(LOOPBACK_TEST) - netif_start_queue(dev); - netif_carrier_on(dev); - #else netif_carrier_off(dev); - #endif #ifdef CONFIG_WIMAX_GDM72XX_QOS gdm_qos_init(nic); -- cgit From 10ebe37884b84bb5f05be1adb7eed4520df22e39 Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Wed, 2 Jul 2014 01:26:48 -0700 Subject: staging: gdm72xx: add help text to Kconfig The descriptions are provided by GCT Semiconductor, Inc. Signed-off-by: Ben Chan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/Kconfig | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/Kconfig b/drivers/staging/gdm72xx/Kconfig index dd8a3913f6b9..5836503caa7b 100644 --- a/drivers/staging/gdm72xx/Kconfig +++ b/drivers/staging/gdm72xx/Kconfig @@ -6,21 +6,29 @@ menuconfig WIMAX_GDM72XX tristate "GCT GDM72xx WiMAX support" depends on NET && (USB || MMC) help - Support for the GCT GDM72xx WiMAX chip + Support a WiMAX module based on the GCT GDM72xx WiMAX chip. if WIMAX_GDM72XX config WIMAX_GDM72XX_QOS bool "Enable QoS support" default n + help + Enable Quality of Service support based on the data protocol of + transmitting packets. config WIMAX_GDM72XX_K_MODE bool "Enable K mode" default n + help + Enable support for proprietary functions for KT (Korea Telecom). config WIMAX_GDM72XX_WIMAX2 bool "Enable WiMAX2 support" default n + help + Enable support for transmitting multiple packets (packet + aggregation) from the WiMAX module to the host processor. choice prompt "Select interface" @@ -28,10 +36,16 @@ choice config WIMAX_GDM72XX_USB bool "USB interface" depends on (USB = y || USB = WIMAX_GDM72XX) + help + Select this option if the WiMAX module interfaces with the host + processor via USB. config WIMAX_GDM72XX_SDIO bool "SDIO interface" depends on (MMC = y || MMC = WIMAX_GDM72XX) + help + Select this option if the WiMAX module interfaces with the host + processor via SDIO. endchoice @@ -40,6 +54,9 @@ if WIMAX_GDM72XX_USB config WIMAX_GDM72XX_USB_PM bool "Enable power management support" depends on PM_RUNTIME + help + Enable USB power management in order to reduce power consumption + while the interface is not in use. endif # WIMAX_GDM72XX_USB -- cgit From b92274e78a587dde4e4cf87228c4dc4d1ad5039d Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 8 Jul 2014 08:47:47 +0200 Subject: staging: gdm72xx: Use net_device_stats from struct net_device Instead of using an own copy of struct net_device_stats in struct nic, use stats from struct net_device. Also remove the thus unnecessary .ndo_get_stats function, as it would now just return netdev->stats, which is the default in dev_get_stats(). Signed-off-by: Tobias Klauser Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 17 ++++------------- drivers/staging/gdm72xx/gdm_wimax.h | 1 - 2 files changed, 4 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index ad3d6bc0f91f..f96f1d0b0951 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -360,8 +360,8 @@ int gdm_wimax_send_tx(struct sk_buff *skb, struct net_device *dev) return ret; } - nic->stats.tx_packets++; - nic->stats.tx_bytes += skb->len - HCI_HEADER_SIZE; + dev->stats.tx_packets++; + dev->stats.tx_bytes += skb->len - HCI_HEADER_SIZE; kfree_skb(skb); return ret; } @@ -433,13 +433,6 @@ static int gdm_wimax_set_mac_addr(struct net_device *dev, void *p) return 0; } -static struct net_device_stats *gdm_wimax_stats(struct net_device *dev) -{ - struct nic *nic = netdev_priv(dev); - - return &nic->stats; -} - static int gdm_wimax_open(struct net_device *dev) { struct nic *nic = netdev_priv(dev); @@ -696,7 +689,6 @@ static int gdm_wimax_get_prepared_info(struct net_device *dev, char *buf, static void gdm_wimax_netif_rx(struct net_device *dev, char *buf, int len) { - struct nic *nic = netdev_priv(dev); struct sk_buff *skb; int ret; @@ -709,8 +701,8 @@ static void gdm_wimax_netif_rx(struct net_device *dev, char *buf, int len) } skb_reserve(skb, 2); - nic->stats.rx_packets++; - nic->stats.rx_bytes += len; + dev->stats.rx_packets++; + dev->stats.rx_bytes += len; memcpy(skb_put(skb, len), buf, len); @@ -866,7 +858,6 @@ static struct net_device_ops gdm_netdev_ops = { .ndo_stop = gdm_wimax_close, .ndo_set_config = gdm_wimax_set_config, .ndo_start_xmit = gdm_wimax_tx, - .ndo_get_stats = gdm_wimax_stats, .ndo_set_mac_address = gdm_wimax_set_mac_addr, .ndo_do_ioctl = gdm_wimax_ioctl, }; diff --git a/drivers/staging/gdm72xx/gdm_wimax.h b/drivers/staging/gdm72xx/gdm_wimax.h index ae852ddebb87..3330cd798c69 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.h +++ b/drivers/staging/gdm72xx/gdm_wimax.h @@ -36,7 +36,6 @@ struct phy_dev { struct nic { struct net_device *netdev; struct phy_dev *phy_dev; - struct net_device_stats stats; struct data_s sdk_data[SIOC_DATA_MAX]; #if defined(CONFIG_WIMAX_GDM72XX_QOS) struct qos_cb_s qos; -- cgit From cd687a4073d58b5763ed085b942302714f0fa73d Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 8 Jul 2014 10:00:56 +0200 Subject: staging: gdm72xx: Remove unnecessary memset of netdev private data The memory for struct net_device private data is allocated using kzalloc/vzalloc in alloc_netdev_mqs, thus there is no need to zero it again in the driver. Signed-off-by: Tobias Klauser Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index f96f1d0b0951..0f71d419ede6 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -882,8 +882,6 @@ int register_wimax_device(struct phy_dev *phy_dev, struct device *pdev) memcpy(dev->dev_addr, gdm_wimax_macaddr, sizeof(gdm_wimax_macaddr)); nic = netdev_priv(dev); - memset(nic, 0, sizeof(*nic)); - nic->netdev = dev; nic->phy_dev = phy_dev; phy_dev->netdev = dev; -- cgit From 9630f6b97a5918c7a14803954ae2ff5ff3f9fb3c Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 8 Jul 2014 08:37:00 +0200 Subject: staging: wlan-ng: Use net_device_stats from struct net_device Instead of using an own copy of struct net_device_stats in struct wlandevice, use stats from struct net_device. Also remove the thus unnecessary .ndo_get_stats function, as it would now just return netdev->stats, which is the default in dev_get_stats(). Furthermore, convert prefix increment of stats counters to the more common postfix increment idiom. Signed-off-by: Tobias Klauser Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/hfa384x_usb.c | 18 +++++++-------- drivers/staging/wlan-ng/p80211netdev.c | 40 ++++++---------------------------- drivers/staging/wlan-ng/p80211netdev.h | 1 - drivers/staging/wlan-ng/prism2sta.c | 2 +- 4 files changed, 17 insertions(+), 44 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c index 07cee5637276..2f63e0c6d445 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -3158,8 +3158,8 @@ static void hfa384x_usbin_callback(struct urb *urb) /* Check for short packet */ if (urb->actual_length == 0) { - ++(wlandev->linux_stats.rx_errors); - ++(wlandev->linux_stats.rx_length_errors); + wlandev->netdev->stats.rx_errors++; + wlandev->netdev->stats.rx_length_errors++; action = RESUBMIT; } break; @@ -3169,7 +3169,7 @@ static void hfa384x_usbin_callback(struct urb *urb) wlandev->netdev->name); if (!test_and_set_bit(WORK_RX_HALT, &hw->usb_flags)) schedule_work(&hw->usb_work); - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = ABORT; break; @@ -3180,12 +3180,12 @@ static void hfa384x_usbin_callback(struct urb *urb) !timer_pending(&hw->throttle)) { mod_timer(&hw->throttle, jiffies + THROTTLE_JIFFIES); } - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = ABORT; break; case -EOVERFLOW: - ++(wlandev->linux_stats.rx_over_errors); + wlandev->netdev->stats.rx_over_errors++; action = RESUBMIT; break; @@ -3204,7 +3204,7 @@ static void hfa384x_usbin_callback(struct urb *urb) default: pr_debug("urb status=%d, transfer flags=0x%x\n", urb->status, urb->transfer_flags); - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = RESUBMIT; break; } @@ -3712,7 +3712,7 @@ static void hfa384x_usbout_callback(struct urb *urb) if (!test_and_set_bit (WORK_TX_HALT, &hw->usb_flags)) schedule_work(&hw->usb_work); - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; break; } @@ -3728,7 +3728,7 @@ static void hfa384x_usbout_callback(struct urb *urb) mod_timer(&hw->throttle, jiffies + THROTTLE_JIFFIES); } - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; netif_stop_queue(wlandev->netdev); break; } @@ -3741,7 +3741,7 @@ static void hfa384x_usbout_callback(struct urb *urb) default: netdev_info(wlandev->netdev, "unknown urb->status=%d\n", urb->status); - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; break; } /* switch */ } diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c index 00b186c59725..29afa573cc99 100644 --- a/drivers/staging/wlan-ng/p80211netdev.c +++ b/drivers/staging/wlan-ng/p80211netdev.c @@ -92,7 +92,6 @@ /* netdevice method functions */ static int p80211knetdev_init(netdevice_t *netdev); -static struct net_device_stats *p80211knetdev_get_stats(netdevice_t *netdev); static int p80211knetdev_open(netdevice_t *netdev); static int p80211knetdev_stop(netdevice_t *netdev); static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, @@ -133,30 +132,6 @@ static int p80211knetdev_init(netdevice_t *netdev) return 0; } -/*---------------------------------------------------------------- -* p80211knetdev_get_stats -* -* Statistics retrieval for linux netdevices. Here we're reporting -* the Linux i/f level statistics. Hence, for the primary numbers, -* we don't want to report the numbers from the MIB. Eventually, -* it might be useful to collect some of the error counters though. -* -* Arguments: -* netdev Linux netdevice -* -* Returns: -* the address of the statistics structure -----------------------------------------------------------------*/ -static struct net_device_stats *p80211knetdev_get_stats(netdevice_t *netdev) -{ - wlandevice_t *wlandev = netdev->ml_priv; - - /* TODO: review the MIB stats for items that correspond to - linux stats */ - - return &(wlandev->linux_stats); -} - /*---------------------------------------------------------------- * p80211knetdev_open * @@ -273,8 +248,8 @@ static int p80211_convert_to_ether(wlandevice_t *wlandev, struct sk_buff *skb) if (skb_p80211_to_ether(wlandev, wlandev->ethconv, skb) == 0) { skb->dev->last_rx = jiffies; - wlandev->linux_stats.rx_packets++; - wlandev->linux_stats.rx_bytes += skb->len; + wlandev->netdev->stats.rx_packets++; + wlandev->netdev->stats.rx_bytes += skb->len; netif_rx_ni(skb); return 0; } @@ -310,8 +285,8 @@ static void p80211netdev_rx_bh(unsigned long arg) skb->protocol = htons(ETH_P_80211_RAW); dev->last_rx = jiffies; - wlandev->linux_stats.rx_packets++; - wlandev->linux_stats.rx_bytes += skb->len; + dev->stats.rx_packets++; + dev->stats.rx_bytes += skb->len; netif_rx_ni(skb); continue; } else { @@ -386,7 +361,7 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, if (skb->protocol != ETH_P_80211_RAW) { netif_start_queue(wlandev->netdev); netdev_notice(netdev, "Tx attempt prior to association, frame dropped.\n"); - wlandev->linux_stats.tx_dropped++; + netdev->stats.tx_dropped++; result = 0; goto failed; } @@ -420,9 +395,9 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, netdev->trans_start = jiffies; - wlandev->linux_stats.tx_packets++; + netdev->stats.tx_packets++; /* count only the packet payload */ - wlandev->linux_stats.tx_bytes += skb->len; + netdev->stats.tx_bytes += skb->len; txresult = wlandev->txframe(wlandev, skb, &p80211_hdr, &p80211_wep); @@ -710,7 +685,6 @@ static const struct net_device_ops p80211_netdev_ops = { .ndo_init = p80211knetdev_init, .ndo_open = p80211knetdev_open, .ndo_stop = p80211knetdev_stop, - .ndo_get_stats = p80211knetdev_get_stats, .ndo_start_xmit = p80211knetdev_hard_start_xmit, .ndo_set_rx_mode = p80211knetdev_set_multicast_list, .ndo_do_ioctl = p80211knetdev_do_ioctl, diff --git a/drivers/staging/wlan-ng/p80211netdev.h b/drivers/staging/wlan-ng/p80211netdev.h index 2e0bd24f997c..69a4f59c8312 100644 --- a/drivers/staging/wlan-ng/p80211netdev.h +++ b/drivers/staging/wlan-ng/p80211netdev.h @@ -209,7 +209,6 @@ typedef struct wlandevice { /* queue for indications waiting for cmd completion */ /* Linux netdevice and support */ netdevice_t *netdev; /* ptr to linux netdevice */ - struct net_device_stats linux_stats; /* Rx bottom half */ struct tasklet_struct rx_bh; diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c index 209e4db6979a..799ce8aa70ef 100644 --- a/drivers/staging/wlan-ng/prism2sta.c +++ b/drivers/staging/wlan-ng/prism2sta.c @@ -1848,7 +1848,7 @@ void prism2sta_ev_tx(wlandevice_t *wlandev, u16 status) { pr_debug("Tx Complete, status=0x%04x\n", status); /* update linux network stats */ - wlandev->linux_stats.tx_packets++; + wlandev->netdev->stats.tx_packets++; } /*---------------------------------------------------------------- -- cgit From 1177ce46a1231d66ba67409bbfabf2b7b2f90de0 Mon Sep 17 00:00:00 2001 From: Matt Kurz Date: Wed, 2 Jul 2014 05:59:54 +1000 Subject: staging: wlan-ng/prism2fw.c: Add blank line after declarations Fix checkpatch.pl warnings due to missing blank line after declarations Signed-off-by: Matt Kurz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2fw.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2fw.c b/drivers/staging/wlan-ng/prism2fw.c index f7870355c69f..42c14b0b6833 100644 --- a/drivers/staging/wlan-ng/prism2fw.c +++ b/drivers/staging/wlan-ng/prism2fw.c @@ -445,6 +445,7 @@ static int crcimage(struct imgchunk *fchunk, unsigned int nfchunks, static void free_chunks(struct imgchunk *fchunk, unsigned int *nfchunks) { int i; + for (i = 0; i < *nfchunks; i++) kfree(fchunk[i].data); @@ -1060,6 +1061,7 @@ static int writeimage(wlandevice_t *wlandev, struct imgchunk *fchunk, for (j = 0; j < nwrites; j++) { /* TODO Move this to a separate function */ int lenleft = fchunk[i].len - (WRITESIZE_MAX * j); + if (fchunk[i].len > WRITESIZE_MAX) currlen = WRITESIZE_MAX; else -- cgit From 1b804e2b12341ad85576ebf56525bedc52fbfa9e Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Wed, 2 Jul 2014 16:06:04 +0900 Subject: staging: dgap: fixed "foo* bar should be foo * bar" in dgap.c clean up checkpatch.pl error: ERROR: "foo* bar" should be "foo *bar" Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index d4f80afe947d..0036f353794e 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -202,7 +202,7 @@ static int dgap_test_bios(struct board_t *brd); static int dgap_test_fep(struct board_t *brd); static int dgap_tty_register_ports(struct board_t *brd); static int dgap_firmware_load(struct pci_dev *pdev, int card_type, - struct board_t* brd); + struct board_t *brd); static void dgap_cleanup_module(void); @@ -574,7 +574,7 @@ static int dgap_init_pci(void) static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int rc; - struct board_t* brd; + struct board_t *brd; if (dgap_numboards >= MAXBOARDS) return -EPERM; @@ -872,7 +872,7 @@ static void dgap_free_irq(struct board_t *brd) } static int dgap_firmware_load(struct pci_dev *pdev, int card_type, - struct board_t* brd) + struct board_t *brd) { const struct firmware *fw; char *tmp_ptr; -- cgit From c10fccf82a1ba70302a749e9769d3b0fe526792e Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Wed, 2 Jul 2014 16:06:37 +0900 Subject: staging: dgap: remove "return" statement in void function clean up checkpatch warning: WARNING: void function return statements are not generally useful Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 0036f353794e..b5ea9ff310ff 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -3077,8 +3077,6 @@ static void dgap_tty_send_xchar(struct tty_struct *tty, char c) spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - - return; } /* -- cgit From 96045db8a42ac7f542cf445e36acc27746fbac28 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Wed, 2 Jul 2014 16:07:16 +0900 Subject: staging: dgap: Adds a blank line after declaration clean up checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index b5ea9ff310ff..5bccd14dd8dd 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -5388,6 +5388,7 @@ static int dgap_param(struct tty_struct *tty) */ if (bd->bd_flags & BD_FEP5PLUS) { u16 hflow2 = 0; + if (ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE) hflow2 |= (D_RTS(ch)); if (ch->ch_digi.digi_flags & DIGI_DTR_TOGGLE) @@ -5797,6 +5798,7 @@ static int dgap_create_driver_sysfiles(struct pci_driver *dgap_driver) static void dgap_remove_driver_sysfiles(struct pci_driver *dgap_driver) { struct device_driver *driverfs = &dgap_driver->driver; + driver_remove_file(driverfs, &driver_attr_version); driver_remove_file(driverfs, &driver_attr_boards); driver_remove_file(driverfs, &driver_attr_maxboards); @@ -6390,6 +6392,7 @@ static ssize_t dgap_tty_name_show(struct device *d, if (cptr->type == TNODE && found == TRUE) { char *ptr1; + if (strstr(cptr->u.ttyname, "tty")) { ptr1 = cptr->u.ttyname; ptr1 += 3; -- cgit From 77343eb973804873345c1638b9e99141a5d98105 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 4 Jul 2014 19:29:11 +0900 Subject: staging: dgap: remove unneccessary dgap_init_pci() function The dgap_init_pci() calls only pci_register_driver(). It doesn't need to make a function for that. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 5bccd14dd8dd..b193d20c7daf 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -74,7 +74,6 @@ static struct board_t *dgap_found_board(struct pci_dev *pdev, int id, int boardnum); static void dgap_cleanup_board(struct board_t *brd); static void dgap_poll_handler(ulong dummy); -static int dgap_init_pci(void); static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); static void dgap_remove_one(struct pci_dev *dev); static int dgap_do_remap(struct board_t *brd); @@ -479,7 +478,7 @@ static int dgap_init_module(void) if (rc) return rc; - rc = dgap_init_pci(); + rc = pci_register_driver(&dgap_driver); if (rc) goto err_cleanup; @@ -563,14 +562,6 @@ failed_class: return rc; } -/* - * Register pci driver, and return how many boards we have. - */ -static int dgap_init_pci(void) -{ - return pci_register_driver(&dgap_driver); -} - static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int rc; -- cgit From 32af5ae73cd154cdab08fdf925ae1bd7c7af1b39 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 4 Jul 2014 19:29:55 +0900 Subject: staging: dgap: remove unused waitqueues dgap_dl_wait and kme_wait are not used in dgap. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 8 -------- drivers/staging/dgap/dgap.h | 1 - 2 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index b193d20c7daf..e8d3c99880f5 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -218,7 +218,6 @@ static uint dgap_numboards; static struct board_t *dgap_board[MAXBOARDS]; static ulong dgap_poll_counter; static int dgap_driver_state = DRIVER_INITIALIZED; -static wait_queue_head_t dgap_dl_wait; static int dgap_poll_tick = 20; /* Poll interval - 20 ms */ static struct class *dgap_class; @@ -1200,8 +1199,6 @@ static void dgap_init_globals(void) dgap_board[i] = NULL; init_timer(&dgap_poll_timer); - - init_waitqueue_head(&dgap_dl_wait); } /************************************************************************ @@ -4161,11 +4158,6 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, static int dgap_alloc_flipbuf(struct board_t *brd) { - /* - * Initialize KME waitqueues... - */ - init_waitqueue_head(&brd->kme_wait); - /* * allocate flip buffer for board. */ diff --git a/drivers/staging/dgap/dgap.h b/drivers/staging/dgap/dgap.h index c00b2e2ddc8d..9728d59c94d1 100644 --- a/drivers/staging/dgap/dgap.h +++ b/drivers/staging/dgap/dgap.h @@ -603,7 +603,6 @@ struct board_t { /* by DPA */ u16 dpastatus; /* The board "status", as defined */ /* by DPA */ - wait_queue_head_t kme_wait; /* Needed for DPA support */ u32 conc_dl_status; /* Status of any pending conc */ /* download */ -- cgit From 039879e8c11a2fa62def79df4bcb39b701d6aefe Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Wed, 9 Jul 2014 16:29:33 +0900 Subject: staging: dgap: use kzalloc instead of kmalloc/memset Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index e8d3c99880f5..522a4a86e27c 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -7322,11 +7322,9 @@ static struct cnode *dgap_newnode(int t) { struct cnode *n; - n = kmalloc(sizeof(struct cnode), GFP_KERNEL); - if (n) { - memset((char *)n, 0, sizeof(struct cnode)); + n = kzalloc(sizeof(struct cnode), GFP_KERNEL); + if (n) n->type = t; - } return n; } -- cgit From 4c0e01496b0ee28b926ff8256f4406525b7aed01 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Wed, 9 Jul 2014 16:29:58 +0900 Subject: staging: dgap: remove redundant NULL check in dgap_tty_init() The brd is already checked by earlier function in dgap_init_one(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 522a4a86e27c..cc21dd228ba8 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -1363,9 +1363,6 @@ static int dgap_tty_init(struct board_t *brd) struct cm_t __iomem *cm; int ret; - if (!brd) - return -EIO; - /* * Initialize board structure elements. */ -- cgit From 5b4af85eedea141026214fb40827a718633c5ccf Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 3 Jul 2014 19:12:01 +0900 Subject: staging: dgnc: remove redundant null check for kfree() Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_tty.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index 4135cb0ed9f5..8081621cc9c0 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -417,10 +417,8 @@ int dgnc_tty_init(struct dgnc_board *brd) */ void dgnc_tty_post_uninit(void) { - if (dgnc_TmpWriteBuf) { - kfree(dgnc_TmpWriteBuf); - dgnc_TmpWriteBuf = NULL; - } + kfree(dgnc_TmpWriteBuf); + dgnc_TmpWriteBuf = NULL; } @@ -456,14 +454,10 @@ void dgnc_tty_uninit(struct dgnc_board *brd) brd->dgnc_Major_TransparentPrint_Registered = FALSE; } - if (brd->SerialDriver.ttys) { - kfree(brd->SerialDriver.ttys); - brd->SerialDriver.ttys = NULL; - } - if (brd->PrintDriver.ttys) { - kfree(brd->PrintDriver.ttys); - brd->PrintDriver.ttys = NULL; - } + kfree(brd->SerialDriver.ttys); + brd->SerialDriver.ttys = NULL; + kfree(brd->PrintDriver.ttys); + brd->PrintDriver.ttys = NULL; } -- cgit From 3098e514686305f03d695a2c5c73ba96ad4cc273 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 3 Jul 2014 19:12:31 +0900 Subject: staging: dgnc: Fix unsigned value for less than zero The "un->un_open_count" is unsigned variable, so it cannot be less than zero. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_tty.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index 8081621cc9c0..f7409d909781 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -1636,10 +1636,10 @@ static void dgnc_tty_close(struct tty_struct *tty, struct file *file) un->un_open_count = 1; } - if (--un->un_open_count < 0) { + if (un->un_open_count) + un->un_open_count--; + else APR(("bad serial port open count of %d\n", un->un_open_count)); - un->un_open_count = 0; - } ch->ch_open_count--; -- cgit From 354579c2eed32c25ae8e65b94b058a9dad2df072 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 3 Jul 2014 19:13:06 +0900 Subject: staging: dgnc: removes unreachable code dgnc_tty_ioctl() cannot reach the end of function. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_tty.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index f7409d909781..c07ec74b8995 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -3430,11 +3430,4 @@ static int dgnc_tty_ioctl(struct tty_struct *tty, unsigned int cmd, return -ENOIOCTLCMD; } - - DGNC_UNLOCK(ch->ch_lock, lock_flags); - - DPR_IOCTL(("dgnc_tty_ioctl end - cmd %s (%x), arg %lx\n", - dgnc_ioctl_name(cmd), cmd, arg)); - - return 0; } -- cgit From f420c6c8e88cb25811b9f5acc99d843ede153aaf Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 3 Jul 2014 19:13:39 +0900 Subject: staging: dgnc: remove redundant memset call The brd is allocated by kzalloc() in dgnc_found_board() so do not need to set 0 to member variable. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_tty.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index c07ec74b8995..714a069831a8 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -200,9 +200,6 @@ int dgnc_tty_register(struct dgnc_board *brd) DPR_INIT(("tty_register start\n")); - memset(&brd->SerialDriver, 0, sizeof(brd->SerialDriver)); - memset(&brd->PrintDriver, 0, sizeof(brd->PrintDriver)); - brd->SerialDriver.magic = TTY_DRIVER_MAGIC; snprintf(brd->SerialName, MAXTTYNAMELEN, "tty_dgnc_%d_", brd->boardnum); -- cgit From fa7996178650377994b1e42ea6c00df304d48065 Mon Sep 17 00:00:00 2001 From: Pawel Lebioda Date: Thu, 3 Jul 2014 21:15:57 +0200 Subject: staging: nvec: insert blank lines after declarations This patch fixes coding style warnings reported by checkpatch.pl: "Missing a blank line after declarations". Signed-off-by: Pawel Lebioda Acked-by: Marc Dietrich Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec_paz00.c | 1 + drivers/staging/nvec/nvec_power.c | 1 + drivers/staging/nvec/nvec_ps2.c | 2 ++ 3 files changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec_paz00.c b/drivers/staging/nvec/nvec_paz00.c index 934b796222a2..e2e675a6e95a 100644 --- a/drivers/staging/nvec/nvec_paz00.c +++ b/drivers/staging/nvec/nvec_paz00.c @@ -35,6 +35,7 @@ static void nvec_led_brightness_set(struct led_classdev *led_cdev, { struct nvec_led *led = to_nvec_led(led_cdev); unsigned char buf[] = NVEC_LED_REQ; + buf[4] = value; nvec_write_async(led->nvec, buf, sizeof(buf)); diff --git a/drivers/staging/nvec/nvec_power.c b/drivers/staging/nvec/nvec_power.c index aacfcd6954a3..6446e151866f 100644 --- a/drivers/staging/nvec/nvec_power.c +++ b/drivers/staging/nvec/nvec_power.c @@ -226,6 +226,7 @@ static int nvec_power_get_property(struct power_supply *psy, union power_supply_propval *val) { struct nvec_power *power = dev_get_drvdata(psy->dev->parent); + switch (psp) { case POWER_SUPPLY_PROP_ONLINE: val->intval = power->on; diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c index 45b2f1308e01..f56f1db15bad 100644 --- a/drivers/staging/nvec/nvec_ps2.c +++ b/drivers/staging/nvec/nvec_ps2.c @@ -53,12 +53,14 @@ static struct nvec_ps2 ps2_dev; static int ps2_startstreaming(struct serio *ser_dev) { unsigned char buf[] = { NVEC_PS2, AUTO_RECEIVE_N, PACKET_SIZE }; + return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf)); } static void ps2_stopstreaming(struct serio *ser_dev) { unsigned char buf[] = { NVEC_PS2, CANCEL_AUTO_RECEIVE }; + nvec_write_async(ps2_dev.nvec, buf, sizeof(buf)); } -- cgit From aea2cda3d817a53ee13ffe0105644d1ac500cc5e Mon Sep 17 00:00:00 2001 From: Pawel Lebioda Date: Sat, 5 Jul 2014 22:30:55 +0200 Subject: staging: nvec: remove unnecessary 'else' after 'return' statement Fix the following warning reported by checkpatch.pl: WARNING: else is not generally useful after a break or return 235: FILE: drivers/staging/nvec/nvec.c:235 Signed-off-by: Pawel Lebioda Acked-by: Marc Dietrich Reviewed-by: Thierry Reding Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index 90f1c4d7fa89..8a3dd4700bd2 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -232,8 +232,7 @@ static size_t nvec_msg_size(struct nvec_msg *msg) return 2; else if (event_length == NVEC_3BYTES) return 3; - else - return 0; + return 0; } /** -- cgit From 5a9077a83321abe390b2dffde0e3fe2be0f4e6bb Mon Sep 17 00:00:00 2001 From: Pawel Lebioda Date: Sat, 5 Jul 2014 22:30:56 +0200 Subject: staging: nvec: remove unneccessary 'out of memory' message Fix the following warning reported by checkpatch.pl: WARNING: Possible unnecessary 'out of memory' message 811: FILE: drivers/staging/nvec/nvec.c:811 Signed-off-by: Pawel Lebioda Acked-by: Marc Dietrich Reviewed-by: Thierry Reding Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index 8a3dd4700bd2..d32504844896 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -806,10 +806,9 @@ static int tegra_nvec_probe(struct platform_device *pdev) } nvec = devm_kzalloc(&pdev->dev, sizeof(struct nvec_chip), GFP_KERNEL); - if (nvec == NULL) { - dev_err(&pdev->dev, "failed to reserve memory\n"); + if (nvec == NULL) return -ENOMEM; - } + platform_set_drvdata(pdev, nvec); nvec->dev = &pdev->dev; -- cgit From 85f28332e3de1eeb7c902fd2763cf79012ccf26b Mon Sep 17 00:00:00 2001 From: Himangi Saraogi Date: Fri, 4 Jul 2014 22:49:57 +0530 Subject: staging: goldfish: Introduce the use of managed interfaces This patch introduces the use of managed interfaces like devm_kzalloc, devm_ioremap, dmam_alloc_coherent, devm_request_irq and does away with the calls to functions to free the allocated memory in the probe and remove functions. Also, the labels are removed in the probe function. Signed-off-by: Himangi Saraogi Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/goldfish/goldfish_audio.c | 53 ++++++++----------------------- 1 file changed, 13 insertions(+), 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/goldfish/goldfish_audio.c b/drivers/staging/goldfish/goldfish_audio.c index a166424b3478..9df4ad88772b 100644 --- a/drivers/staging/goldfish/goldfish_audio.c +++ b/drivers/staging/goldfish/goldfish_audio.c @@ -274,11 +274,9 @@ static int goldfish_audio_probe(struct platform_device *pdev) struct goldfish_audio *data; dma_addr_t buf_addr; - data = kzalloc(sizeof(*data), GFP_KERNEL); - if (data == NULL) { - ret = -ENOMEM; - goto err_data_alloc_failed; - } + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); + if (data == NULL) + return -ENOMEM; spin_lock_init(&data->lock); init_waitqueue_head(&data->wait); platform_set_drvdata(pdev, data); @@ -286,38 +284,33 @@ static int goldfish_audio_probe(struct platform_device *pdev) r = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (r == NULL) { dev_err(&pdev->dev, "platform_get_resource failed\n"); - ret = -ENODEV; - goto err_no_io_base; - } - data->reg_base = ioremap(r->start, PAGE_SIZE); - if (data->reg_base == NULL) { - ret = -ENOMEM; - goto err_no_io_base; + return -ENODEV; } + data->reg_base = devm_ioremap(&pdev->dev, r->start, PAGE_SIZE); + if (data->reg_base == NULL) + return -ENOMEM; data->irq = platform_get_irq(pdev, 0); if (data->irq < 0) { dev_err(&pdev->dev, "platform_get_irq failed\n"); - ret = -ENODEV; - goto err_no_irq; + return -ENODEV; } - data->buffer_virt = dma_alloc_coherent(&pdev->dev, + data->buffer_virt = dmam_alloc_coherent(&pdev->dev, COMBINED_BUFFER_SIZE, &buf_addr, GFP_KERNEL); if (data->buffer_virt == 0) { - ret = -ENOMEM; dev_err(&pdev->dev, "allocate buffer failed\n"); - goto err_alloc_write_buffer_failed; + return -ENOMEM; } data->buffer_phys = buf_addr; data->write_buffer1 = data->buffer_virt; data->write_buffer2 = data->buffer_virt + WRITE_BUFFER_SIZE; data->read_buffer = data->buffer_virt + 2 * WRITE_BUFFER_SIZE; - ret = request_irq(data->irq, goldfish_audio_interrupt, + ret = devm_request_irq(&pdev->dev, data->irq, goldfish_audio_interrupt, IRQF_SHARED, pdev->name, data); if (ret) { dev_err(&pdev->dev, "request_irq failed\n"); - goto err_request_irq_failed; + return ret; } ret = misc_register(&goldfish_audio_device); @@ -325,7 +318,7 @@ static int goldfish_audio_probe(struct platform_device *pdev) dev_err(&pdev->dev, "misc_register returned %d in goldfish_audio_init\n", ret); - goto err_misc_register_failed; + return ret; } AUDIO_WRITE64(data, AUDIO_SET_WRITE_BUFFER_1, @@ -344,31 +337,11 @@ static int goldfish_audio_probe(struct platform_device *pdev) audio_data = data; return 0; - -err_misc_register_failed: - free_irq(data->irq, data); -err_request_irq_failed: - dma_free_coherent(&pdev->dev, COMBINED_BUFFER_SIZE, - data->buffer_virt, data->buffer_phys); -err_alloc_write_buffer_failed: -err_no_irq: - iounmap(data->reg_base); -err_no_io_base: - kfree(data); -err_data_alloc_failed: - return ret; } static int goldfish_audio_remove(struct platform_device *pdev) { - struct goldfish_audio *data = platform_get_drvdata(pdev); - misc_deregister(&goldfish_audio_device); - free_irq(data->irq, data); - dma_free_coherent(&pdev->dev, COMBINED_BUFFER_SIZE, - data->buffer_virt, data->buffer_phys); - iounmap(data->reg_base); - kfree(data); audio_data = NULL; return 0; } -- cgit From eedd8d7ee8536adb42ddc7a91c9aea4a08a7b6f4 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Tue, 8 Jul 2014 17:02:42 +0300 Subject: staging: ft1000-usb: check for errors in card_send_command kmalloc() result check was lacking. Fixing that required also changing card_send_command() return type from void to int, and checking its return code everywhere. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=78561 Reported-by: Maksymilian Arciemowicz Signed-off-by: Andrey Utkin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ft1000/ft1000-usb/ft1000_debug.c | 6 +++--- drivers/staging/ft1000/ft1000-usb/ft1000_hw.c | 25 +++++++++++++++++------- drivers/staging/ft1000/ft1000-usb/ft1000_usb.h | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c index a8945b785967..9f4c7858a059 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c @@ -482,14 +482,14 @@ static long ft1000_ioctl(struct file *file, unsigned int command, /* Connect Message */ DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_CONNECT\n"); ConnectionMsg[79] = 0xfc; - card_send_command(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); + result = card_send_command(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); break; case IOCTL_DISCONNECT: /* Disconnect Message */ DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_DISCONNECT\n"); ConnectionMsg[79] = 0xfd; - card_send_command(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); + result = card_send_command(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); break; case IOCTL_GET_DSP_STAT_CMD: /* DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_GET_DSP_STAT called\n"); */ @@ -652,7 +652,7 @@ static long ft1000_ioctl(struct file *file, unsigned int command, } pmsg++; ppseudo_hdr = (struct pseudo_hdr *)pmsg; - card_send_command(ft1000dev,(unsigned short*)dpram_data,total_len+2); + result = card_send_command(ft1000dev,(unsigned short*)dpram_data,total_len+2); ft1000dev->app_info[app_index].nTxMsg++; diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c index b6a77088cfe4..7012e09a1599 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c @@ -322,18 +322,23 @@ static void card_reset_dsp(struct ft1000_usb *ft1000dev, bool value) * ptempbuffer - command buffer * size - command buffer size */ -void card_send_command(struct ft1000_usb *ft1000dev, void *ptempbuffer, +int card_send_command(struct ft1000_usb *ft1000dev, void *ptempbuffer, int size) { + int ret; unsigned short temp; unsigned char *commandbuf; DEBUG("card_send_command: enter card_send_command... size=%d\n", size); commandbuf = kmalloc(size + 2, GFP_KERNEL); + if (!commandbuf) + return -ENOMEM; memcpy((void *)commandbuf + 2, (void *)ptempbuffer, size); - ft1000_read_register(ft1000dev, &temp, FT1000_REG_DOORBELL); + ret = ft1000_read_register(ft1000dev, &temp, FT1000_REG_DOORBELL); + if (ret) + return ret; if (temp & 0x0100) usleep_range(900, 1100); @@ -345,19 +350,23 @@ void card_send_command(struct ft1000_usb *ft1000dev, void *ptempbuffer, if (size % 4) size += 4 - (size % 4); - ft1000_write_dpram32(ft1000dev, 0, commandbuf, size); + ret = ft1000_write_dpram32(ft1000dev, 0, commandbuf, size); + if (ret) + return ret; usleep_range(900, 1100); - ft1000_write_register(ft1000dev, FT1000_DB_DPRAM_TX, + ret = ft1000_write_register(ft1000dev, FT1000_DB_DPRAM_TX, FT1000_REG_DOORBELL); + if (ret) + return ret; usleep_range(900, 1100); - ft1000_read_register(ft1000dev, &temp, FT1000_REG_DOORBELL); + ret = ft1000_read_register(ft1000dev, &temp, FT1000_REG_DOORBELL); #if 0 if ((temp & 0x0100) == 0) DEBUG("card_send_command: Message sent\n"); #endif - + return ret; } /* load or reload the DSP */ @@ -1375,8 +1384,10 @@ static int ft1000_proc_drvmsg(struct ft1000_usb *dev, u16 size) *pmsg++ = convert.wrd; *pmsg++ = htons(info->DrvErrNum); - card_send_command(dev, (unsigned char *)&tempbuffer[0], + status = card_send_command(dev, (unsigned char *)&tempbuffer[0], (u16)(0x0012 + PSEUDOSZ)); + if (status) + goto out; info->DrvErrNum = 0; } dev->DrvMsgPend = 0; diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h index 2d4b02e2382d..464e5ab583c1 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h @@ -136,7 +136,7 @@ extern spinlock_t free_buff_lock; int ft1000_create_dev(struct ft1000_usb *dev); void ft1000_destroy_dev(struct net_device *dev); -extern void card_send_command(struct ft1000_usb *ft1000dev, +extern int card_send_command(struct ft1000_usb *ft1000dev, void *ptempbuffer, int size); struct dpram_blk *ft1000_get_buffer(struct list_head *bufflist); -- cgit From a5bde3a163cc4701e693c7c1d9cb9d6c9b888c75 Mon Sep 17 00:00:00 2001 From: Anton Protopopov Date: Wed, 9 Jul 2014 09:12:37 +0400 Subject: Staging: comedi: check the return value of kobject_set_name Added a check of the return value of the kobject_set_name function. Signed-off-by: Anton Protopopov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index e8e38098dcf8..038b69a93185 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2587,7 +2587,14 @@ static int __init comedi_init(void) return -EIO; cdev_init(&comedi_cdev, &comedi_fops); comedi_cdev.owner = THIS_MODULE; - kobject_set_name(&comedi_cdev.kobj, "comedi"); + + retval = kobject_set_name(&comedi_cdev.kobj, "comedi"); + if (retval) { + unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0), + COMEDI_NUM_MINORS); + return retval; + } + if (cdev_add(&comedi_cdev, MKDEV(COMEDI_MAJOR, 0), COMEDI_NUM_MINORS)) { unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0), COMEDI_NUM_MINORS); -- cgit From 11306d1f20ca4ef8a0f383618423e0ee7979e94a Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 8 Jul 2014 13:54:23 +0300 Subject: staging: rtl8188eu: use GFP_ATOMIC under spinlock We're holding a spinlock here so we can't do sleeping allocations. The call tree is: rtw_sta_flush() <-- takes spin_lock_bh(&pstapriv->asoc_list_lock); --> ap_free_sta() --> rtw_clearstakey_cmd() Originally these calls were rtw_zmalloc() and then we switched them to kzalloc() in fadbe0cd5292 ('staging: rtl8188eu:Remove rtw_zmalloc(), wrapper for kzalloc()') and that made the bugs show up for my static checker. The original code was buggy as well but my static checker couldn't parse it. Signed-off-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index aeaa873bfeb1..1222b9ba6940 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1106,20 +1106,20 @@ u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue) if (!enqueue) { clear_cam_entry(padapter, entry); } else { - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC); if (ph2c == NULL) { res = _FAIL; goto exit; } - psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); + psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_ATOMIC); if (psetstakey_para == NULL) { kfree(ph2c); res = _FAIL; goto exit; } - psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp), GFP_KERNEL); + psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp), GFP_ATOMIC); if (psetstakey_rsp == NULL) { kfree(ph2c); kfree(psetstakey_para); -- cgit From 1f765d9f4cfca6ef77dd19a0e48590324e579c72 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 8 Jul 2014 09:11:56 +0200 Subject: staging: et131x: Use net_device_stats from struct net_device Instead of using an own copy of struct net_device_stats in struct et131x_adapter, use stats from struct net_device. Signed-off-by: Tobias Klauser Signed-off-by: Greg Kroah-Hartman --- drivers/staging/et131x/et131x.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/et131x/et131x.c b/drivers/staging/et131x/et131x.c index 08356b6955a4..ada02430eacd 100644 --- a/drivers/staging/et131x/et131x.c +++ b/drivers/staging/et131x/et131x.c @@ -532,8 +532,6 @@ struct et131x_adapter { /* Stats */ struct ce_stats stats; - - struct net_device_stats net_stats; }; static int eeprom_wait_ready(struct pci_dev *pdev, u32 *status) @@ -2618,7 +2616,7 @@ static struct rfd *nic_rx_pkts(struct et131x_adapter *adapter) return NULL; } - adapter->net_stats.rx_bytes += rfd->len; + adapter->netdev->stats.rx_bytes += rfd->len; memcpy(skb_put(skb, rfd->len), fbr->virt[buff_index], rfd->len); @@ -2666,7 +2664,7 @@ static void et131x_handle_recv_interrupt(struct et131x_adapter *adapter) continue; /* Increment the number of packets we received */ - adapter->net_stats.rx_packets++; + adapter->netdev->stats.rx_packets++; /* Set the status on the packet, either resources or success */ if (rx_ring->num_ready_recv < RFD_LOW_WATER_MARK) @@ -3037,7 +3035,7 @@ static int et131x_send_packets(struct sk_buff *skb, struct net_device *netdev) dev_kfree_skb_any(skb); skb = NULL; - adapter->net_stats.tx_dropped++; + adapter->netdev->stats.tx_dropped++; } else { status = send_packet(skb, adapter); if (status != 0 && status != -ENOMEM) { @@ -3046,7 +3044,7 @@ static int et131x_send_packets(struct sk_buff *skb, struct net_device *netdev) */ dev_kfree_skb_any(skb); skb = NULL; - adapter->net_stats.tx_dropped++; + adapter->netdev->stats.tx_dropped++; } } } @@ -3065,7 +3063,7 @@ static inline void free_send_packet(struct et131x_adapter *adapter, { unsigned long flags; struct tx_desc *desc = NULL; - struct net_device_stats *stats = &adapter->net_stats; + struct net_device_stats *stats = &adapter->netdev->stats; struct tx_ring *tx_ring = &adapter->tx_ring; u64 dma_addr; @@ -3110,7 +3108,7 @@ static inline void free_send_packet(struct et131x_adapter *adapter, /* Add the TCB to the Ready Q */ spin_lock_irqsave(&adapter->tcb_ready_qlock, flags); - adapter->net_stats.tx_packets++; + stats->tx_packets++; if (tx_ring->tcb_qtail) tx_ring->tcb_qtail->next = tcb; @@ -4134,7 +4132,7 @@ out: static struct net_device_stats *et131x_stats(struct net_device *netdev) { struct et131x_adapter *adapter = netdev_priv(netdev); - struct net_device_stats *stats = &adapter->net_stats; + struct net_device_stats *stats = &adapter->netdev->stats; struct ce_stats *devstat = &adapter->stats; stats->rx_errors = devstat->rx_length_errs + @@ -4426,7 +4424,7 @@ static void et131x_tx_timeout(struct net_device *netdev) tcb->index, tcb->flags); - adapter->net_stats.tx_errors++; + adapter->netdev->stats.tx_errors++; /* perform reset of tx/rx */ et131x_disable_txrx(netdev); -- cgit From cc6289fa1469831b806f2a857a19169d15759c31 Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Sat, 5 Jul 2014 12:45:07 +0300 Subject: staging: xillybus: Add sanity check in interrupt handler Data arriving from the hardware is verified prior to its use. The lack of this check has never been reported to cause a problem, but it's necessary nevertheless. Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus_core.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index 5fca58e4e082..fa799795f714 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -267,6 +267,12 @@ irqreturn_t xillybus_isr(int irq, void *data) break; case XILLYMSG_OPCODE_FIFOEOF: + if ((msg_channel > ep->num_channels) || + (msg_channel == 0) || (!msg_dir) || + !ep->channels[msg_channel]->num_wr_buffers) { + malformed_message(ep, &buf[i]); + break; + } channel = ep->channels[msg_channel]; spin_lock(&channel->wr_spinlock); channel->wr_eof = msg_bufno; -- cgit From 049c1fb4fc2a45a51b51bf9abb24cd5fd1b3fcf3 Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Sat, 5 Jul 2014 12:45:08 +0300 Subject: staging: xillybus: Reorganizing xilly_setupchannels() Duplicate code in this function was moved into a new function, xilly_get_dma_buffers(). There is no change in functionality. Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus_core.c | 345 +++++++++++++------------------ 1 file changed, 138 insertions(+), 207 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index fa799795f714..134800de13eb 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -319,28 +319,130 @@ EXPORT_SYMBOL(xillybus_isr); static void xillybus_autoflush(struct work_struct *work); +struct xilly_alloc_state { + void *salami; + int left_of_salami; + int nbuffer; + enum dma_data_direction direction; + u32 regdirection; +}; + +static int xilly_get_dma_buffers(struct xilly_endpoint *ep, + struct xilly_alloc_state *s, + struct xilly_buffer **buffers, + int bufnum, int bytebufsize) +{ + int i, rc; + dma_addr_t dma_addr; + struct device *dev = ep->dev; + struct xilly_buffer *this_buffer = NULL; /* Init to silence warning */ + + if (buffers) { /* Not the message buffer */ + this_buffer = devm_kzalloc( + dev, bufnum * sizeof(struct xilly_buffer), + GFP_KERNEL); + + if (!this_buffer) + return -ENOMEM; + } + + for (i = 0; i < bufnum; i++) { + /* + * Buffers are expected in descending size order, so there + * is either enough space for this buffer or none at all. + */ + + if ((s->left_of_salami < bytebufsize) && + (s->left_of_salami > 0)) { + dev_err(ep->dev, + "Corrupt buffer allocation in IDT. Aborting.\n"); + return -ENODEV; + } + + if (s->left_of_salami == 0) { + int allocorder, allocsize; + + allocsize = PAGE_SIZE; + allocorder = 0; + while (bytebufsize > allocsize) { + allocsize *= 2; + allocorder++; + } + + s->salami = (void *) devm_get_free_pages( + dev, + GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO, + allocorder); + + if (!s->salami) + return -ENOMEM; + s->left_of_salami = allocsize; + } + + rc = ep->ephw->map_single(ep, s->salami, + bytebufsize, s->direction, + &dma_addr); + + if (rc) + return rc; + + iowrite32((u32) (dma_addr & 0xffffffff), + &ep->registers[fpga_dma_bufaddr_lowaddr_reg]); + iowrite32(((u32) ((((u64) dma_addr) >> 32) & 0xffffffff)), + &ep->registers[fpga_dma_bufaddr_highaddr_reg]); + mmiowb(); + + if (buffers) { /* Not the message buffer */ + this_buffer->addr = s->salami; + this_buffer->dma_addr = dma_addr; + buffers[i] = this_buffer++; + + iowrite32(s->regdirection | s->nbuffer++, + &ep->registers[fpga_dma_bufno_reg]); + } else { + ep->msgbuf_addr = s->salami; + ep->msgbuf_dma_addr = dma_addr; + ep->msg_buf_size = bytebufsize; + + iowrite32(s->regdirection, + &ep->registers[fpga_dma_bufno_reg]); + } + + s->left_of_salami -= bytebufsize; + s->salami += bytebufsize; + } + return 0; /* Success */ +} + static int xilly_setupchannels(struct xilly_endpoint *ep, unsigned char *chandesc, int entries ) { struct device *dev = ep->dev; - int i, entry, wr_nbuffer, rd_nbuffer; + int i, entry, rc; struct xilly_channel *channel; int channelnum, bufnum, bufsize, format, is_writebuf; int bytebufsize; int synchronous, allowpartial, exclusive_open, seekable; int supports_nonempty; - void *wr_salami = NULL; - void *rd_salami = NULL; - int left_of_wr_salami = 0; - int left_of_rd_salami = 0; - dma_addr_t dma_addr; int msg_buf_done = 0; - const gfp_t gfp_mask = GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO; - struct xilly_buffer *this_buffer = NULL; /* Init to silence warning */ - int rc = 0; + struct xilly_alloc_state rd_alloc = { + .salami = NULL, + .left_of_salami = 0, + .nbuffer = 1, + .direction = DMA_TO_DEVICE, + .regdirection = 0, + }; + + struct xilly_alloc_state wr_alloc = { + .salami = NULL, + .left_of_salami = 0, + .nbuffer = 1, + .direction = DMA_FROM_DEVICE, + .regdirection = 0x80000000, + }; channel = devm_kzalloc(dev, ep->num_channels * sizeof(struct xilly_channel), GFP_KERNEL); @@ -395,17 +497,9 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, ep->channels[i] = channel++; } - /* - * The DMA buffer address update is atomic on the FPGA, so even if - * it was in the middle of sending messages to some buffer, changing - * the address is safe, since the data will go to either of the - * buffers. Not that this situation should occur at all anyhow. - */ - - wr_nbuffer = 1; - rd_nbuffer = 1; /* Buffer zero isn't used at all */ - for (entry = 0; entry < entries; entry++, chandesc += 4) { + struct xilly_buffer **buffers = NULL; + is_writebuf = chandesc[0] & 0x01; channelnum = (chandesc[0] >> 1) | ((chandesc[1] & 0x0f) << 7); format = (chandesc[1] >> 4) & 0x03; @@ -426,40 +520,35 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, channel = ep->channels[channelnum]; /* NULL for msg channel */ - bytebufsize = bufsize << 2; /* Overwritten just below */ - - if (!is_writebuf) { - channel->num_rd_buffers = bufnum; + if (!is_writebuf || channelnum > 0) { channel->log2_element_size = ((format > 2) ? 2 : format); + bytebufsize = channel->rd_buf_size = bufsize * (1 << channel->log2_element_size); - channel->rd_allow_partial = allowpartial; - channel->rd_synchronous = synchronous; - channel->rd_exclusive_open = exclusive_open; - channel->seekable = seekable; - channel->rd_buffers = devm_kzalloc(dev, + buffers = devm_kzalloc(dev, bufnum * sizeof(struct xilly_buffer *), GFP_KERNEL); - if (!channel->rd_buffers) + if (!buffers) goto memfail; + } else + bytebufsize = bufsize << 2; - this_buffer = devm_kzalloc(dev, - bufnum * sizeof(struct xilly_buffer), - GFP_KERNEL); + if (!is_writebuf) { + channel->num_rd_buffers = bufnum; + channel->rd_allow_partial = allowpartial; + channel->rd_synchronous = synchronous; + channel->rd_exclusive_open = exclusive_open; + channel->seekable = seekable; - if (!this_buffer) - goto memfail; + channel->rd_buffers = buffers; + rc = xilly_get_dma_buffers(ep, &rd_alloc, buffers, + bufnum, bytebufsize); } - else if (channelnum > 0) { channel->num_wr_buffers = bufnum; - channel->log2_element_size = ((format > 2) ? - 2 : format); - bytebufsize = channel->wr_buf_size = bufsize * - (1 << channel->log2_element_size); channel->seekable = seekable; channel->wr_supports_nonempty = supports_nonempty; @@ -468,171 +557,17 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, channel->wr_synchronous = synchronous; channel->wr_exclusive_open = exclusive_open; - channel->wr_buffers = devm_kzalloc(dev, - bufnum * sizeof(struct xilly_buffer *), - GFP_KERNEL); - - if (!channel->wr_buffers) - goto memfail; - - this_buffer = devm_kzalloc(dev, - bufnum * sizeof(struct xilly_buffer), - GFP_KERNEL); - - if (!this_buffer) - goto memfail; + channel->wr_buffers = buffers; + rc = xilly_get_dma_buffers(ep, &wr_alloc, buffers, + bufnum, bytebufsize); + } else { + rc = xilly_get_dma_buffers(ep, &wr_alloc, NULL, + bufnum, bytebufsize); + msg_buf_done++; } - /* - * Although daunting, we cut the chunks for read buffers - * from a different salami than the write buffers', - * possibly improving performance. - */ - - if (is_writebuf) - for (i = 0; i < bufnum; i++) { - /* - * Buffers are expected in descending - * byte-size order, so there is either - * enough for this buffer or none at all. - */ - if ((left_of_wr_salami < bytebufsize) && - (left_of_wr_salami > 0)) { - dev_err(ep->dev, - "Corrupt buffer allocation in IDT. Aborting.\n"); - return -ENODEV; - } - - if (left_of_wr_salami == 0) { - int allocorder, allocsize; - - allocsize = PAGE_SIZE; - allocorder = 0; - while (bytebufsize > allocsize) { - allocsize *= 2; - allocorder++; - } - - wr_salami = (void *) - devm_get_free_pages( - dev, gfp_mask, - allocorder); - - if (!wr_salami) - goto memfail; - left_of_wr_salami = allocsize; - } - - rc = ep->ephw->map_single(ep, wr_salami, - bytebufsize, - DMA_FROM_DEVICE, - &dma_addr); - - if (rc) - goto dmafail; - - iowrite32( - (u32) (dma_addr & 0xffffffff), - &ep->registers[ - fpga_dma_bufaddr_lowaddr_reg] - ); - iowrite32( - ((u32) ((((u64) dma_addr) >> 32) - & 0xffffffff)), - &ep->registers[ - fpga_dma_bufaddr_highaddr_reg] - ); - mmiowb(); - - if (channelnum > 0) { - this_buffer->addr = wr_salami; - this_buffer->dma_addr = dma_addr; - channel->wr_buffers[i] = this_buffer++; - - iowrite32( - 0x80000000 | wr_nbuffer++, - &ep->registers[ - fpga_dma_bufno_reg]); - } else { - ep->msgbuf_addr = wr_salami; - ep->msgbuf_dma_addr = dma_addr; - ep->msg_buf_size = bytebufsize; - msg_buf_done++; - - iowrite32( - 0x80000000, &ep->registers[ - fpga_dma_bufno_reg]); - } - - left_of_wr_salami -= bytebufsize; - wr_salami += bytebufsize; - } - else /* Read buffers */ - for (i = 0; i < bufnum; i++) { - /* - * Buffers are expected in descending - * byte-size order, so there is either - * enough for this buffer or none at all. - */ - if ((left_of_rd_salami < bytebufsize) && - (left_of_rd_salami > 0)) { - dev_err(ep->dev, - "Corrupt buffer allocation in IDT. Aborting.\n"); - return -ENODEV; - } - - if (left_of_rd_salami == 0) { - int allocorder, allocsize; - - allocsize = PAGE_SIZE; - allocorder = 0; - while (bytebufsize > allocsize) { - allocsize *= 2; - allocorder++; - } - - rd_salami = (void *) - devm_get_free_pages( - dev, gfp_mask, - allocorder); - - if (!rd_salami) - goto memfail; - left_of_rd_salami = allocsize; - } - - - rc = ep->ephw->map_single(ep, rd_salami, - bytebufsize, - DMA_TO_DEVICE, - &dma_addr); - - if (rc) - goto dmafail; - - iowrite32( - (u32) (dma_addr & 0xffffffff), - &ep->registers[ - fpga_dma_bufaddr_lowaddr_reg] - ); - iowrite32( - ((u32) ((((u64) dma_addr) >> 32) - & 0xffffffff)), - &ep->registers[ - fpga_dma_bufaddr_highaddr_reg] - ); - mmiowb(); - - this_buffer->addr = rd_salami; - this_buffer->dma_addr = dma_addr; - channel->rd_buffers[i] = this_buffer++; - - iowrite32(rd_nbuffer++, - &ep->registers[fpga_dma_bufno_reg]); - - left_of_rd_salami -= bytebufsize; - rd_salami += bytebufsize; - } + if (rc) + goto memfail; } if (!msg_buf_done) { @@ -640,16 +575,12 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, "Corrupt IDT: No message buffer. Aborting.\n"); return -ENODEV; } - return 0; memfail: dev_err(ep->dev, - "Failed to allocate write buffer memory. Aborting.\n"); + "Failed to assign DMA buffer memory. Aborting.\n"); return -ENOMEM; -dmafail: - dev_err(ep->dev, "Failed to map DMA memory!. Aborting.\n"); - return rc; } static void xilly_scan_idt(struct xilly_endpoint *endpoint, -- cgit From 539889ee491a9d7633c340a6edb311c693e1cbf7 Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Sat, 5 Jul 2014 12:45:09 +0300 Subject: staging: xillybus: Register's address offset notation update In iowrite32() calls, the address of registers was expressed as e.g. &ep->registers[fpga_msg_ctrl_reg]. This changes to the more common format e.g. ep->registers + fpga_msg_ctrl_reg. There is no functional change. Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus.h | 2 +- drivers/staging/xillybus/xillybus_core.c | 88 ++++++++++++++++---------------- 2 files changed, 45 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus.h b/drivers/staging/xillybus/xillybus.h index ae58a3eeb293..a0806b5ee2cb 100644 --- a/drivers/staging/xillybus/xillybus.h +++ b/drivers/staging/xillybus/xillybus.h @@ -99,7 +99,7 @@ struct xilly_endpoint { struct list_head ep_list; int dma_using_dac; /* =1 if 64-bit DMA is used, =0 otherwise. */ - __iomem u32 *registers; + __iomem void *registers; int fatal_error; struct mutex register_mutex; diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index 134800de13eb..ab6502caa72c 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -44,14 +44,14 @@ MODULE_LICENSE("GPL v2"); #define XILLY_RX_TIMEOUT (10*HZ/1000) #define XILLY_TIMEOUT (100*HZ/1000) -#define fpga_msg_ctrl_reg 0x0002 -#define fpga_dma_control_reg 0x0008 -#define fpga_dma_bufno_reg 0x0009 -#define fpga_dma_bufaddr_lowaddr_reg 0x000a -#define fpga_dma_bufaddr_highaddr_reg 0x000b -#define fpga_buf_ctrl_reg 0x000c -#define fpga_buf_offset_reg 0x000d -#define fpga_endian_reg 0x0010 +#define fpga_msg_ctrl_reg 0x0008 +#define fpga_dma_control_reg 0x0020 +#define fpga_dma_bufno_reg 0x0024 +#define fpga_dma_bufaddr_lowaddr_reg 0x0028 +#define fpga_dma_bufaddr_highaddr_reg 0x002c +#define fpga_buf_ctrl_reg 0x0030 +#define fpga_buf_offset_reg 0x0034 +#define fpga_endian_reg 0x0040 #define XILLYMSG_OPCODE_RELEASEBUF 1 #define XILLYMSG_OPCODE_QUIESCEACK 2 @@ -170,7 +170,7 @@ irqreturn_t xillybus_isr(int irq, void *data) DMA_FROM_DEVICE); iowrite32(0x01, /* Message NACK */ - &ep->registers[fpga_msg_ctrl_reg]); + ep->registers + fpga_msg_ctrl_reg); } return IRQ_HANDLED; } else if (buf[i] & (1 << 22)) /* Last message */ @@ -305,7 +305,7 @@ irqreturn_t xillybus_isr(int irq, void *data) ep->msg_counter = (ep->msg_counter + 1) & 0xf; ep->failed_messages = 0; - iowrite32(0x03, &ep->registers[fpga_msg_ctrl_reg]); /* Message ACK */ + iowrite32(0x03, ep->registers + fpga_msg_ctrl_reg); /* Message ACK */ return IRQ_HANDLED; } @@ -387,9 +387,9 @@ static int xilly_get_dma_buffers(struct xilly_endpoint *ep, return rc; iowrite32((u32) (dma_addr & 0xffffffff), - &ep->registers[fpga_dma_bufaddr_lowaddr_reg]); + ep->registers + fpga_dma_bufaddr_lowaddr_reg); iowrite32(((u32) ((((u64) dma_addr) >> 32) & 0xffffffff)), - &ep->registers[fpga_dma_bufaddr_highaddr_reg]); + ep->registers + fpga_dma_bufaddr_highaddr_reg); mmiowb(); if (buffers) { /* Not the message buffer */ @@ -398,14 +398,14 @@ static int xilly_get_dma_buffers(struct xilly_endpoint *ep, buffers[i] = this_buffer++; iowrite32(s->regdirection | s->nbuffer++, - &ep->registers[fpga_dma_bufno_reg]); + ep->registers + fpga_dma_bufno_reg); } else { ep->msgbuf_addr = s->salami; ep->msgbuf_dma_addr = dma_addr; ep->msg_buf_size = bytebufsize; iowrite32(s->regdirection, - &ep->registers[fpga_dma_bufno_reg]); + ep->registers + fpga_dma_bufno_reg); } s->left_of_salami -= bytebufsize; @@ -640,7 +640,7 @@ static int xilly_obtain_idt(struct xilly_endpoint *endpoint) iowrite32(1 | (3 << 24), /* Opcode 3 for channel 0 = Send IDT */ - &endpoint->registers[fpga_buf_ctrl_reg]); + endpoint->registers + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ wait_event_interruptible_timeout(channel->wr_wait, @@ -812,8 +812,8 @@ static ssize_t xillybus_read(struct file *filp, char __user *userbuf, iowrite32(1 | (channel->chan_num << 1) | (bufidx << 12), - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ } @@ -899,15 +899,15 @@ static ssize_t xillybus_read(struct file *filp, char __user *userbuf, mutex_lock(&channel->endpoint->register_mutex); iowrite32(offsetlimit, - &channel->endpoint->registers[ - fpga_buf_offset_reg]); + channel->endpoint->registers + + fpga_buf_offset_reg); mmiowb(); iowrite32(1 | (channel->chan_num << 1) | (2 << 24) | /* 2 = offset limit */ (waiting_bufidx << 12), - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ @@ -999,8 +999,8 @@ desperate: iowrite32(1 | (channel->chan_num << 1) | (3 << 24) | /* Opcode 3, flush it all! */ (waiting_bufidx << 12), - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ } @@ -1112,13 +1112,13 @@ static int xillybus_myflush(struct xilly_channel *channel, long timeout) mutex_lock(&channel->endpoint->register_mutex); iowrite32(end_offset_plus1 - 1, - &channel->endpoint->registers[fpga_buf_offset_reg]); + channel->endpoint->registers + fpga_buf_offset_reg); mmiowb(); iowrite32((channel->chan_num << 1) | /* Channel ID */ (2 << 24) | /* Opcode 2, submit buffer */ (bufidx << 12), - &channel->endpoint->registers[fpga_buf_ctrl_reg]); + channel->endpoint->registers + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ mutex_unlock(&channel->endpoint->register_mutex); @@ -1362,14 +1362,14 @@ static ssize_t xillybus_write(struct file *filp, const char __user *userbuf, mutex_lock(&channel->endpoint->register_mutex); iowrite32(end_offset_plus1 - 1, - &channel->endpoint->registers[ - fpga_buf_offset_reg]); + channel->endpoint->registers + + fpga_buf_offset_reg); mmiowb(); iowrite32((channel->chan_num << 1) | (2 << 24) | /* 2 = submit buffer */ (bufidx << 12), - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ mutex_unlock(&channel->endpoint-> @@ -1564,8 +1564,8 @@ static int xillybus_open(struct inode *inode, struct file *filp) iowrite32(1 | (channel->chan_num << 1) | (4 << 24) | /* Opcode 4, open channel */ ((channel->wr_synchronous & 1) << 23), - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ } @@ -1586,8 +1586,8 @@ static int xillybus_open(struct inode *inode, struct file *filp) iowrite32((channel->chan_num << 1) | (4 << 24), /* Opcode 4, open channel */ - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ } @@ -1639,8 +1639,8 @@ static int xillybus_release(struct inode *inode, struct file *filp) iowrite32((channel->chan_num << 1) | /* Channel ID */ (5 << 24), /* Opcode 5, close channel */ - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ } mutex_unlock(&channel->rd_mutex); @@ -1660,8 +1660,8 @@ static int xillybus_release(struct inode *inode, struct file *filp) iowrite32(1 | (channel->chan_num << 1) | (5 << 24), /* Opcode 5, close channel */ - &channel->endpoint->registers[ - fpga_buf_ctrl_reg]); + channel->endpoint->registers + + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ /* @@ -1766,11 +1766,11 @@ static loff_t xillybus_llseek(struct file *filp, loff_t offset, int whence) mutex_lock(&channel->endpoint->register_mutex); iowrite32(pos >> channel->log2_element_size, - &channel->endpoint->registers[fpga_buf_offset_reg]); + channel->endpoint->registers + fpga_buf_offset_reg); mmiowb(); iowrite32((channel->chan_num << 1) | (6 << 24), /* Opcode 6, set address */ - &channel->endpoint->registers[fpga_buf_ctrl_reg]); + channel->endpoint->registers + fpga_buf_ctrl_reg); mmiowb(); /* Just to appear safe */ mutex_unlock(&channel->endpoint->register_mutex); @@ -1987,7 +1987,7 @@ static int xilly_quiesce(struct xilly_endpoint *endpoint) endpoint->idtlen = -1; wmb(); /* Make sure idtlen is set before sending command */ iowrite32((u32) (endpoint->dma_using_dac & 0x0001), - &endpoint->registers[fpga_dma_control_reg]); + endpoint->registers + fpga_dma_control_reg); mmiowb(); wait_event_interruptible_timeout(endpoint->ep_wait, @@ -2027,7 +2027,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) * necessary. */ - iowrite32(1, &endpoint->registers[fpga_endian_reg]); + iowrite32(1, endpoint->registers + fpga_endian_reg); mmiowb(); /* Writes below are affected by the one above. */ /* Bootstrap phase I: Allocate temporary message buffer */ @@ -2044,7 +2044,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) return rc; /* Clear the message subsystem (and counter in particular) */ - iowrite32(0x04, &endpoint->registers[fpga_msg_ctrl_reg]); + iowrite32(0x04, endpoint->registers + fpga_msg_ctrl_reg); mmiowb(); endpoint->idtlen = -1; @@ -2056,7 +2056,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) * buffer size. */ iowrite32((u32) (endpoint->dma_using_dac & 0x0001), - &endpoint->registers[fpga_dma_control_reg]); + endpoint->registers + fpga_dma_control_reg); mmiowb(); wait_event_interruptible_timeout(endpoint->ep_wait, @@ -2070,7 +2070,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint) /* Enable DMA */ iowrite32((u32) (0x0002 | (endpoint->dma_using_dac & 0x0001)), - &endpoint->registers[fpga_dma_control_reg]); + endpoint->registers + fpga_dma_control_reg); mmiowb(); /* Bootstrap phase II: Allocate buffer for IDT and obtain it */ -- cgit From 89fa037b82bd63b687b97e9613786ca90c9ddcf8 Mon Sep 17 00:00:00 2001 From: Pawel Lebioda Date: Wed, 9 Jul 2014 17:59:29 +0200 Subject: staging: bcm: add missing blank lines after declarations Fix "Missing blank line after declaration" warnings reported by checkpatch.pl. Signed-off-by: Pawel Lebioda Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/CmHost.c | 1 + drivers/staging/bcm/IPv6Protocol.c | 6 ++++++ drivers/staging/bcm/InterfaceDld.c | 1 + drivers/staging/bcm/InterfaceInit.c | 1 + drivers/staging/bcm/InterfaceMisc.c | 1 + drivers/staging/bcm/PHSModule.c | 1 + drivers/staging/bcm/Qos.c | 9 ++++++++- drivers/staging/bcm/Transmit.c | 1 + drivers/staging/bcm/led_control.c | 4 ++++ drivers/staging/bcm/nvm.c | 6 ++++++ 10 files changed, 30 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/CmHost.c b/drivers/staging/bcm/CmHost.c index 3dbdf0eb49ac..adca0ce4d05f 100644 --- a/drivers/staging/bcm/CmHost.c +++ b/drivers/staging/bcm/CmHost.c @@ -972,6 +972,7 @@ static VOID DumpCmControlPacket(PVOID pvBuffer) pstAddIndication->sfAuthorizedSet.bValid = 1; for (nIndex = 0; nIndex < nCurClassifierCnt; nIndex++) { struct bcm_convergence_types *psfCSType = NULL; + psfCSType = &pstAddIndication->sfAuthorizedSet.cConvergenceSLTypes[nIndex]; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_CONTROL, DBG_LVL_ALL, "psfCSType = %p", psfCSType); diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index cd160670e028..e013c5ad9660 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -45,6 +45,7 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, case IPV6HDR_TYPE_ROUTING: { struct bcm_ipv6_routing_hdr *pstIpv6RoutingHeader; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Routing Header"); pstIpv6RoutingHeader = (struct bcm_ipv6_routing_hdr *)pucPayloadPtr; @@ -66,6 +67,7 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, { struct bcm_ipv6_dest_options_hdr *pstIpv6DestOptsHdr = (struct bcm_ipv6_dest_options_hdr *)pucPayloadPtr; int nTotalOptions = pstIpv6DestOptsHdr->ucHdrExtLen; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 DestOpts Header Header"); @@ -78,6 +80,7 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, { struct bcm_ipv6_authentication_hdr *pstIpv6AuthHdr = (struct bcm_ipv6_authentication_hdr *)pucPayloadPtr; int nHdrLen = pstIpv6AuthHdr->ucLength; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Authentication Header"); @@ -275,6 +278,7 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, if (bClassificationSucceed == TRUE) { INT iMatchedSFQueueIndex = 0; + iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); if (iMatchedSFQueueIndex >= NO_OF_QUEUES) { bClassificationSucceed = false; @@ -407,6 +411,7 @@ VOID DumpIpv6Address(ULONG *puIpv6Address) UINT uiIpv6AddrNoLongWords = 4; UINT uiIpv6AddIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, ":%lx", puIpv6Address[uiIpv6AddIndex]); @@ -419,6 +424,7 @@ static VOID DumpIpv6Header(struct bcm_ipv6_hdr *pstIpv6Header) UCHAR ucVersion; UCHAR ucPrio; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "----Ipv6 Header---"); ucVersion = pstIpv6Header->ucVersionPrio & 0xf0; diff --git a/drivers/staging/bcm/InterfaceDld.c b/drivers/staging/bcm/InterfaceDld.c index e1925bdc127c..abc7a7ab782a 100644 --- a/drivers/staging/bcm/InterfaceDld.c +++ b/drivers/staging/bcm/InterfaceDld.c @@ -244,6 +244,7 @@ static INT buffDnld(struct bcm_mini_adapter *Adapter, { unsigned int len = 0; int retval = STATUS_SUCCESS; + len = u32FirmwareLength; while (u32FirmwareLength) { diff --git a/drivers/staging/bcm/InterfaceInit.c b/drivers/staging/bcm/InterfaceInit.c index bef13a61b7c9..bb61d34886b3 100644 --- a/drivers/staging/bcm/InterfaceInit.c +++ b/drivers/staging/bcm/InterfaceInit.c @@ -440,6 +440,7 @@ static int select_alternate_setting_for_highspeed_modem( * Else USB_IF will fail. */ UINT _uiData = ntohl(EP2_CFG_INT); + BCM_DEBUG_PRINT(psAd, DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Reverting Bulk to INT as it is in Full Speed mode.\n"); diff --git a/drivers/staging/bcm/InterfaceMisc.c b/drivers/staging/bcm/InterfaceMisc.c index a0f159e17149..e5bcfec2a6cf 100644 --- a/drivers/staging/bcm/InterfaceMisc.c +++ b/drivers/staging/bcm/InterfaceMisc.c @@ -236,6 +236,7 @@ void putUsbSuspend(struct work_struct *work) { struct bcm_interface_adapter *psIntfAdapter = NULL; struct usb_interface *intf = NULL; + psIntfAdapter = container_of(work, struct bcm_interface_adapter, usbSuspendWork); intf = psIntfAdapter->interface; diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index bd68c6f814af..4b6de7683deb 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -287,6 +287,7 @@ int phs_init(struct bcm_phs_extension *pPhsdeviceExtension, struct bcm_mini_adap pstServiceFlowTable = pPhsdeviceExtension->pstServiceFlowPhsRulesTable; for (i = 0; i < MAX_SERVICEFLOWS; i++) { struct bcm_phs_entry sServiceFlow = pstServiceFlowTable->stSFList[i]; + sServiceFlow.pstClassifierTable = kzalloc(sizeof(struct bcm_phs_classifier_table), GFP_KERNEL); if (!sServiceFlow.pstClassifierTable) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAllocation failed"); diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 42c135144e1d..c5213b3485e1 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -94,8 +94,8 @@ static bool MatchDestIpAddress(struct bcm_classifier_rule *pstClassifierRule, UL **************************************************************************/ static bool MatchTos(struct bcm_classifier_rule *pstClassifierRule, UCHAR ucTypeOfService) { - struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + if (3 != pstClassifierRule->ucIPTypeOfServiceLength) return TRUE; @@ -121,6 +121,7 @@ bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, UCHAR ucProtoc { UCHAR ucLoopIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + if (0 == pstClassifierRule->ucProtocolLength) return TRUE; for (ucLoopIndex = 0; ucLoopIndex < pstClassifierRule->ucProtocolLength; ucLoopIndex++) { @@ -269,6 +270,7 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, if (TRUE == bClassificationSucceed) { INT iMatchedSFQueueIndex = 0; + iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); if (iMatchedSFQueueIndex >= NO_OF_QUEUES) bClassificationSucceed = false; @@ -580,6 +582,7 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) * Create Frag CLS Entry */ struct bcm_fragmented_packet_info stFragPktInfo; + stFragPktInfo.bUsed = TRUE; stFragPktInfo.ulSrcIpAddress = pIpHeader->saddr; stFragPktInfo.usIpIdentification = pIpHeader->id; @@ -601,6 +604,7 @@ static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRul { UINT i = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + if (pstClassifierRule->ucEthCSSrcMACLen == 0) return TRUE; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s\n", __func__); @@ -617,6 +621,7 @@ static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRu { UINT i = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + if (pstClassifierRule->ucEthCSDestMACLen == 0) return TRUE; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s\n", __func__); @@ -632,6 +637,7 @@ static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRu static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo) { struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + if ((pstClassifierRule->ucEtherTypeLen == 0) || (pstClassifierRule->au8EthCSEtherType[0] == 0)) return TRUE; @@ -719,6 +725,7 @@ static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, struct sk_buff *s B_UINT8 EthCSCupport) { bool bClassificationSucceed = false; + bClassificationSucceed = EthCSMatchSrcMACAddress(pstClassifierRule, ((struct bcm_eth_header *)(skb->data))->au8SourceAddress); if (!bClassificationSucceed) return false; diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c index 49767468ac23..cd27bd8a2e37 100644 --- a/drivers/staging/bcm/Transmit.c +++ b/drivers/staging/bcm/Transmit.c @@ -148,6 +148,7 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH status); } else { struct net_device_stats *netstats = &Adapter->dev->stats; + Adapter->PackInfo[QueueIndex].uiTotalTxBytes += Leader.PLength; netstats->tx_bytes += Leader.PLength; diff --git a/drivers/staging/bcm/led_control.c b/drivers/staging/bcm/led_control.c index 835367780a8a..074fc39ed678 100644 --- a/drivers/staging/bcm/led_control.c +++ b/drivers/staging/bcm/led_control.c @@ -6,6 +6,7 @@ static B_UINT16 CFG_CalculateChecksum(B_UINT8 *pu8Buffer, B_UINT32 u32Size) { B_UINT16 u16CheckSum = 0; + while (u32Size--) { u16CheckSum += (B_UINT8)~(*pu8Buffer); pu8Buffer++; @@ -16,6 +17,7 @@ static B_UINT16 CFG_CalculateChecksum(B_UINT8 *pu8Buffer, B_UINT32 u32Size) bool IsReqGpioIsLedInNVM(struct bcm_mini_adapter *Adapter, UINT gpios) { INT Status; + Status = (Adapter->gpioBitMap & gpios) ^ gpios; if (Status) return false; @@ -489,6 +491,7 @@ static int ReadConfigFileStructure(struct bcm_mini_adapter *Adapter, PUCHAR puCFGData = NULL; UCHAR bData = 0; struct bcm_led_state_info *curr_led_state; + memset(GPIO_Array, DISABLE_GPIO_NUM, NUM_OF_LEDS+1); if (!Adapter->pstargetparams || IS_ERR(Adapter->pstargetparams)) { @@ -715,6 +718,7 @@ static void handle_adapter_driver_state(struct bcm_mini_adapter *ad, UCHAR GPIO_num_rx = DISABLE_GPIO_NUM; UCHAR uiLEDTx = 0; UCHAR uiLEDRx = 0; + currdriverstate = NORMAL_OPERATION; ad->LEDInfo.bIdle_led_off = false; diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 99b82d82acb6..8ce4d416baf8 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -361,6 +361,7 @@ int BeceemEEPROMBulkRead(struct bcm_mini_adapter *Adapter, } else { /* Handle the reads less than 4 bytes... */ PUCHAR pCharBuff = (PUCHAR)pBuffer; + pCharBuff += uiIndex; if (ReadBeceemEEPROM(Adapter, uiOffset, &uiData[0]) == 0) { memcpy(pCharBuff, &uiData[0], uiBytesRemaining); /* copy only bytes requested. */ @@ -914,6 +915,7 @@ static int flashWriteStatus(struct bcm_mini_adapter *Adapter, static VOID BcmRestoreBlockProtectStatus(struct bcm_mini_adapter *Adapter, ULONG ulWriteStatus) { unsigned int value; + value = (FLASH_CMD_WRITE_ENABLE << 24); wrmalt(Adapter, FLASH_SPI_CMDQ_REG, &value, sizeof(value)); @@ -1154,6 +1156,7 @@ static int BeceemFlashBulkWrite(struct bcm_mini_adapter *Adapter, if (STATUS_SUCCESS == BeceemFlashBulkRead(Adapter, (PUINT)ucReadBk, uiOffsetFromSectStart + uiIndex, MAX_RW_SIZE)) { if (Adapter->ulFlashWriteSize == 1) { unsigned int uiReadIndex = 0; + for (uiReadIndex = 0; uiReadIndex < 16; uiReadIndex++) { if (ucReadBk[uiReadIndex] != pTempBuff[uiIndex + uiReadIndex]) { if (STATUS_SUCCESS != (*Adapter->fpFlashWriteWithStatusCheck)(Adapter, uiPartOffset + uiIndex + uiReadIndex, &pTempBuff[uiIndex+uiReadIndex])) { @@ -1868,6 +1871,7 @@ int BeceemNVMWrite(struct bcm_mini_adapter *Adapter, if ((uiOffset + uiNumBytes) > EEPROM_CALPARAM_START) { ULONG ulBytesTobeSkipped = 0; PUCHAR pcBuffer = (PUCHAR)pBuffer; /* char pointer to take care of odd byte cases. */ + uiNumBytes -= (EEPROM_CALPARAM_START - uiOffset); ulBytesTobeSkipped += (EEPROM_CALPARAM_START - uiOffset); uiOffset += (EEPROM_CALPARAM_START - uiOffset); @@ -2455,6 +2459,7 @@ static int BcmGetFlashCSInfo(struct bcm_mini_adapter *Adapter) #endif unsigned int uiFlashLayoutMajorVersion; + Adapter->uiFlashLayoutMinorVersion = 0; Adapter->uiFlashLayoutMajorVersion = 0; Adapter->ulFlashControlSectionStart = FLASH_CS_INFO_START_ADDR; @@ -4319,6 +4324,7 @@ static int ReadISOSignature(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_s static int ReadISOPriority(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val iso) { unsigned int ISOPri = STATUS_FAILURE; + if (IsSectionWritable(Adapter, iso)) { if (ReadISOSignature(Adapter, iso) == ISO_IMAGE_MAGIC_NUMBER) { BcmFlash2xBulkRead(Adapter, -- cgit From 9f952489fd05b376f4f1e2518dac20b996f8f096 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Wed, 9 Jul 2014 15:10:45 -0400 Subject: staging: rtl8712: remove wrapper function _init_workitem() The inline function _init_workitem() is just a wrapper around INIT_WORK(). Oddly, this wrapper accepts 3 parameters while INIT_WORK() only accepts 2. The third parameter is unused. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_led.c | 2 +- drivers/staging/rtl8712/rtl871x_pwrctrl.c | 6 ++---- drivers/staging/rtl8712/rtl871x_xmit.c | 2 +- 4 files changed, 4 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 67c53d569be6..2cf9a0200141 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -81,11 +81,6 @@ static inline void _cancel_timer(struct timer_list *ptimer, u8 *bcancelled) *bcancelled = true; /*true ==1; false==0*/ } -static inline void _init_workitem(_workitem *pwork, void *pfunc, void *cntx) -{ - INIT_WORK(pwork, pfunc); -} - static inline void _set_workitem(_workitem *pwork) { schedule_work(pwork); diff --git a/drivers/staging/rtl8712/rtl8712_led.c b/drivers/staging/rtl8712/rtl8712_led.c index 6cb1a0af5177..a84ae2f27497 100644 --- a/drivers/staging/rtl8712/rtl8712_led.c +++ b/drivers/staging/rtl8712/rtl8712_led.c @@ -98,7 +98,7 @@ static void InitLed871x(struct _adapter *padapter, struct LED_871x *pLed, pLed->BlinkTimes = 0; pLed->BlinkingLedState = LED_UNKNOWN; _init_timer(&(pLed->BlinkTimer), nic, BlinkTimerCallback, pLed); - _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed); + INIT_WORK(&pLed->BlinkWorkItem, BlinkWorkItemCallback); } /* diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.c b/drivers/staging/rtl8712/rtl871x_pwrctrl.c index 9fd2ec7596cc..6cf051fcb382 100644 --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.c +++ b/drivers/staging/rtl8712/rtl871x_pwrctrl.c @@ -184,10 +184,8 @@ void r8712_init_pwrctrl_priv(struct _adapter *padapter) pwrctrlpriv->tog = 0x80; /* clear RPWM to ensure driver and fw back to initial state. */ r8712_write8(padapter, 0x1025FE58, 0); - _init_workitem(&(pwrctrlpriv->SetPSModeWorkItem), - SetPSModeWorkItemCallback, padapter); - _init_workitem(&(pwrctrlpriv->rpwm_workitem), - rpwm_workitem_callback, padapter); + INIT_WORK(&pwrctrlpriv->SetPSModeWorkItem, SetPSModeWorkItemCallback); + INIT_WORK(&pwrctrlpriv->rpwm_workitem, rpwm_workitem_callback); _init_timer(&(pwrctrlpriv->rpwm_check_timer), padapter->pnetdev, rpwm_check_handler, (u8 *)padapter); } diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c index a104b7722815..b985edc158b9 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -148,7 +148,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, pxmitbuf++; } pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF; - _init_workitem(&padapter->wkFilterRxFF0, r8712_SetFilter, padapter); + INIT_WORK(&padapter->wkFilterRxFF0, r8712_SetFilter); alloc_hwxmits(padapter); init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry); tasklet_init(&pxmitpriv->xmit_tasklet, -- cgit From f2355b69ef829bfc62391e7f38bbf5e6cbb057b0 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Wed, 9 Jul 2014 15:10:46 -0400 Subject: staging: rtl8712: remove wrapper function _set_workitem() The inline function _set_workitem() simply wraps schedule_work(). Removed. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_led.c | 2 +- drivers/staging/rtl8712/rtl871x_pwrctrl.c | 4 ++-- 3 files changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 2cf9a0200141..43795e77940e 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -81,11 +81,6 @@ static inline void _cancel_timer(struct timer_list *ptimer, u8 *bcancelled) *bcancelled = true; /*true ==1; false==0*/ } -static inline void _set_workitem(_workitem *pwork) -{ - schedule_work(pwork); -} - #ifndef BIT #define BIT(x) (1 << (x)) #endif diff --git a/drivers/staging/rtl8712/rtl8712_led.c b/drivers/staging/rtl8712/rtl8712_led.c index a84ae2f27497..56e8add30a20 100644 --- a/drivers/staging/rtl8712/rtl8712_led.c +++ b/drivers/staging/rtl8712/rtl8712_led.c @@ -827,7 +827,7 @@ static void BlinkTimerCallback(unsigned long data) if ((pLed->padapter->bSurpriseRemoved == true) || (pLed->padapter->bDriverStopped == true)) return; - _set_workitem(&(pLed->BlinkWorkItem)); + schedule_work(&pLed->BlinkWorkItem); } /* Description: diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.c b/drivers/staging/rtl8712/rtl871x_pwrctrl.c index 6cf051fcb382..89ce527940fe 100644 --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.c +++ b/drivers/staging/rtl8712/rtl871x_pwrctrl.c @@ -83,7 +83,7 @@ void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode, uint smart_ps) pwrpriv->bSleep = false; pwrpriv->pwr_mode = ps_mode; pwrpriv->smart_ps = smart_ps; - _set_workitem(&(pwrpriv->SetPSModeWorkItem)); + schedule_work(&pwrpriv->SetPSModeWorkItem); } } @@ -133,7 +133,7 @@ static void _rpwm_check_handler (struct _adapter *padapter) padapter->bSurpriseRemoved == true) return; if (pwrpriv->cpwm != pwrpriv->rpwm) - _set_workitem(&(pwrpriv->rpwm_workitem)); + schedule_work(&pwrpriv->rpwm_workitem); } static void SetPSModeWorkItemCallback(struct work_struct *work) -- cgit From 143198fd31f8e7d659d1ae7a59b63c35433dad02 Mon Sep 17 00:00:00 2001 From: James A Shackleford Date: Wed, 9 Jul 2014 15:10:47 -0400 Subject: staging: rtl8712: remove #define _workitem struct work_struct _workitem is just a #define for work_struct. Remove the #define and use struct work_struct directly instead. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/drv_types.h | 2 +- drivers/staging/rtl8712/osdep_service.h | 1 - drivers/staging/rtl8712/rtl871x_led.h | 2 +- drivers/staging/rtl8712/rtl871x_pwrctrl.h | 4 ++-- drivers/staging/rtl8712/rtl871x_xmit.h | 6 +++--- 5 files changed, 7 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/drv_types.h b/drivers/staging/rtl8712/drv_types.h index 0168745ba191..3d0a98b6d8e5 100644 --- a/drivers/staging/rtl8712/drv_types.h +++ b/drivers/staging/rtl8712/drv_types.h @@ -173,7 +173,7 @@ struct _adapter { struct net_device_stats stats; struct iw_statistics iwstats; int pid; /*process id from UI*/ - _workitem wkFilterRxFF0; + struct work_struct wkFilterRxFF0; u8 blnEnableRxFF0Filter; spinlock_t lockRxFF0Filter; const struct firmware *fw; diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index 43795e77940e..c80f00683b0f 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -50,7 +50,6 @@ struct __queue { #define _pkt struct sk_buff #define _buffer unsigned char #define thread_exit() complete_and_exit(NULL, 0) -#define _workitem struct work_struct #define _init_queue(pqueue) \ do { \ diff --git a/drivers/staging/rtl8712/rtl871x_led.h b/drivers/staging/rtl8712/rtl871x_led.h index 1a90c7f4d8f3..eb612053a3dd 100644 --- a/drivers/staging/rtl8712/rtl871x_led.h +++ b/drivers/staging/rtl8712/rtl871x_led.h @@ -99,7 +99,7 @@ struct LED_871x { * either LED_ON or OFF.*/ struct timer_list BlinkTimer; /* Timer object for led blinking.*/ - _workitem BlinkWorkItem; /* Workitem used by BlinkTimer */ + struct work_struct BlinkWorkItem; /* Workitem used by BlinkTimer */ }; struct led_priv { diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.h b/drivers/staging/rtl8712/rtl871x_pwrctrl.h index 70ff924fba04..0526ba077bfc 100644 --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.h +++ b/drivers/staging/rtl8712/rtl871x_pwrctrl.h @@ -107,8 +107,8 @@ struct pwrctrl_priv { uint ImrContent; /* used to store original imr. */ uint bSleep; /* sleep -> active is different from active -> sleep. */ - _workitem SetPSModeWorkItem; - _workitem rpwm_workitem; + struct work_struct SetPSModeWorkItem; + struct work_struct rpwm_workitem; struct timer_list rpwm_check_timer; u8 rpwm_retry; uint bSetPSModeWorkItemInProgress; diff --git a/drivers/staging/rtl8712/rtl871x_xmit.h b/drivers/staging/rtl8712/rtl871x_xmit.h index ee906987735a..a9633c3f73d0 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.h +++ b/drivers/staging/rtl8712/rtl871x_xmit.h @@ -233,9 +233,9 @@ struct xmit_priv { u8 hwxmit_entry; u8 txirp_cnt; struct tasklet_struct xmit_tasklet; - _workitem xmit_pipe4_reset_wi; - _workitem xmit_pipe6_reset_wi; - _workitem xmit_piped_reset_wi; + struct work_struct xmit_pipe4_reset_wi; + struct work_struct xmit_pipe6_reset_wi; + struct work_struct xmit_piped_reset_wi; /*per AC pending irp*/ int beq_cnt; int bkq_cnt; -- cgit From 79374daf9890d47a31da3eca765be50b916cad42 Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Thu, 10 Jul 2014 09:11:20 +0530 Subject: staging: rtl8188eu: re-use mac_pton() helper The helper mac_pton() validates and converts MAC address from string format to a number. Originally code uses simple code to do that. With mac_pton() the driver now validates input as well. Signed-off-by: Andy Shevchenko Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 11 ++- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 101 +++++++------------------ 2 files changed, 32 insertions(+), 80 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 54ebf3424572..3eeab2c822bd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -1092,16 +1092,15 @@ u8 key_2char2num(u8 hch, u8 lch) void rtw_macaddr_cfg(u8 *mac_addr) { u8 mac[ETH_ALEN]; + if (mac_addr == NULL) return; - if (rtw_initmac) { /* Users specify the mac address */ - int jj, kk; - - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - mac[jj] = key_2char2num(rtw_initmac[kk], rtw_initmac[kk + 1]); + if (rtw_initmac && mac_pton(rtw_initmac, mac)) { + /* Users specify the mac address */ memcpy(mac_addr, mac, ETH_ALEN); - } else { /* Use the mac address stored in the Efuse */ + } else { + /* Use the mac address stored in the Efuse */ memcpy(mac, mac_addr, ETH_ALEN); } diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 221366fbf1e7..762920643037 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -105,44 +105,6 @@ static const char * const iw_operation_mode[] = { "Secondary", "Monitor" }; -static int hex2num_i(char c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - return -1; -} - -/** - * hwaddr_aton - Convert ASCII string to MAC address - * @txt: MAC address as a string (e.g., "00:11:22:33:44:55") - * @addr: Buffer for the MAC address (ETH_ALEN = 6 bytes) - * Returns: 0 on success, -1 on failure (e.g., string not a MAC address) - */ -static int hwaddr_aton_i(const char *txt, u8 *addr) -{ - int i; - - for (i = 0; i < 6; i++) { - int a, b; - - a = hex2num_i(*txt++); - if (a < 0) - return -1; - b = hex2num_i(*txt++); - if (b < 0) - return -1; - *addr++ = (a << 4) | b; - if (i < 5 && *txt++ != ':') - return -1; - } - - return 0; -} - void indicate_wx_scan_complete_event(struct adapter *padapter) { union iwreq_data wrqu; @@ -2553,7 +2515,7 @@ static int rtw_get_ap_info(struct net_device *dev, while (phead != plist) { pnetwork = container_of(plist, struct wlan_network, list); - if (hwaddr_aton_i(data, bssid)) { + if (!mac_pton(data, bssid)) { DBG_88E("Invalid BSSID '%s'.\n", (u8 *)data); spin_unlock_bh(&pmlmepriv->scanned_queue.lock); return -EINVAL; @@ -2837,12 +2799,11 @@ static int rtw_p2p_profilefound(struct net_device *dev, if (pwdinfo->profileindex >= P2P_MAX_PERSISTENT_GROUP_NUM) { ret = -1; } else { - int jj, kk; - /* Add this profile information into pwdinfo->profileinfo */ /* Ex: 1XX:XX:XX:XX:XX:XXYYSSID */ - for (jj = 0, kk = 1; jj < ETH_ALEN; jj++, kk += 3) - pwdinfo->profileinfo[pwdinfo->profileindex].peermac[jj] = key_2char2num(extra[kk], extra[kk + 1]); + if (!mac_pton(extra + 1, + pwdinfo->profileinfo[pwdinfo->profileindex].peermac)) + return -EINVAL; pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen = (extra[18] - '0') * 10 + (extra[19] - '0'); memcpy(pwdinfo->profileinfo[pwdinfo->profileindex].ssid, &extra[20], pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen); @@ -3021,8 +2982,7 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; - u8 peerMACStr[17] = {0x00}; + u8 peerMACStr[18] = {0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3042,8 +3002,8 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev, if (copy_from_user(peerMACStr, wrqu->data.pointer + 6, 17)) return -EFAULT; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]); + if (!mac_pton(peerMACStr, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3089,8 +3049,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; - u8 peerMACStr[17] = {0x00}; + u8 peerMACStr[18] = {0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3109,8 +3068,8 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev, if (copy_from_user(peerMACStr, wrqu->data.pointer + 10, 17)) return -EFAULT; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]); + if (!mac_pton(peerMACStr, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3170,8 +3129,7 @@ static int rtw_p2p_get_device_type(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; - u8 peerMACStr[17] = {0x00}; + u8 peerMACStr[18] = {0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3190,8 +3148,8 @@ static int rtw_p2p_get_device_type(struct net_device *dev, if (copy_from_user(peerMACStr, wrqu->data.pointer + 9, 17)) return -EFAULT; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]); + if (!mac_pton(peerMACStr, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3246,8 +3204,7 @@ static int rtw_p2p_get_device_name(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; - u8 peerMACStr[17] = {0x00}; + u8 peerMACStr[18] = {0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3266,8 +3223,8 @@ static int rtw_p2p_get_device_name(struct net_device *dev, if (copy_from_user(peerMACStr, wrqu->data.pointer + 5, 17)) return -EFAULT; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]); + if (!mac_pton(peerMACStr, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3312,8 +3269,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; - u8 peerMACStr[17] = {0x00}; + u8 peerMACStr[18] = {0x00}; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3334,8 +3290,8 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, if (copy_from_user(peerMACStr, wrqu->data.pointer + 8, 17)) return -EFAULT; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]); + if (!mac_pton(peerMACStr, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3389,7 +3345,6 @@ static int rtw_p2p_connect(struct net_device *dev, struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3413,8 +3368,8 @@ static int rtw_p2p_connect(struct net_device *dev, if (pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO) return -1; - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(extra[kk], extra[kk + 1]); + if (!mac_pton(extra, peerMAC)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3467,7 +3422,6 @@ static int rtw_p2p_invite_req(struct net_device *dev, int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - int jj, kk; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3505,8 +3459,8 @@ static int rtw_p2p_invite_req(struct net_device *dev, pinvite_req_info->token = 3; } - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - pinvite_req_info->peer_macaddr[jj] = key_2char2num(extra[kk], extra[kk + 1]); + if (!mac_pton(extra, pinvite_req_info->peer_macaddr)) + return -EINVAL; spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); @@ -3546,8 +3500,8 @@ static int rtw_p2p_invite_req(struct net_device *dev, if (uintPeerChannel) { /* Store the GO's bssid */ - for (jj = 0, kk = 18; jj < ETH_ALEN; jj++, kk += 3) - pinvite_req_info->go_bssid[jj] = key_2char2num(extra[kk], extra[kk + 1]); + if (!mac_pton(extra + 18, pinvite_req_info->go_bssid)) + return -EINVAL; /* Store the GO's ssid */ pinvite_req_info->ssidlen = wrqu->data.length - 36; @@ -3606,7 +3560,6 @@ static int rtw_p2p_prov_disc(struct net_device *dev, struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); u8 peerMAC[ETH_ALEN] = {0x00}; - int jj, kk; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct list_head *plist, *phead; struct __queue *queue = &(pmlmepriv->scanned_queue); @@ -3639,8 +3592,8 @@ static int rtw_p2p_prov_disc(struct net_device *dev, pwdinfo->tx_prov_disc_info.benable = false; } - for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3) - peerMAC[jj] = key_2char2num(extra[kk], extra[kk + 1]); + if (!mac_pton(extra, peerMAC)) + return -EINVAL; if (!memcmp(&extra[18], "display", 7)) { pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA; -- cgit From 529a929912ac9b23faa243ee624e2177f13e0774 Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Thu, 10 Jul 2014 09:11:21 +0530 Subject: staging: rtl8188eu: substitute custom hex2bin() Instead of using custom code to convert hexdecinal strings to their binary represantation let's use kernel's library function. Signed-off-by: Andy Shevchenko Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 5 --- drivers/staging/rtl8188eu/include/wlan_bssdef.h | 1 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 46 +++++++++++++++++-------- 3 files changed, 31 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 3eeab2c822bd..02bd3b032f12 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -1084,11 +1084,6 @@ u8 str_2char2num(u8 hch, u8 lch) return (key_char2num(hch) * 10) + key_char2num(lch); } -u8 key_2char2num(u8 hch, u8 lch) -{ - return (key_char2num(hch) << 4) | key_char2num(lch); -} - void rtw_macaddr_cfg(u8 *mac_addr) { u8 mac[ETH_ALEN]; diff --git a/drivers/staging/rtl8188eu/include/wlan_bssdef.h b/drivers/staging/rtl8188eu/include/wlan_bssdef.h index e70075d586d7..85e4b9250c00 100644 --- a/drivers/staging/rtl8188eu/include/wlan_bssdef.h +++ b/drivers/staging/rtl8188eu/include/wlan_bssdef.h @@ -340,7 +340,6 @@ struct ndis_802_11_cap { struct ndis_802_11_auth_encrypt AuthenticationEncryptionSupported[1]; }; -u8 key_2char2num(u8 hch, u8 lch); u8 key_char2num(u8 ch); u8 str_2char2num(u8 hch, u8 lch); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 762920643037..6402f48bbd1b 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -5855,7 +5855,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, struct efuse_hal *pEfuseHal; u8 ips_mode = 0, lps_mode = 0; - u32 i, jj, kk; + u32 i; u8 *setdata = NULL; u8 *ShadowMapBT = NULL; u8 *ShadowMapWiFi = NULL; @@ -5933,8 +5933,11 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: map data =%s\n", __func__, tmp[2]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); + if (hex2bin(setdata, tmp[2], cnts) < 0) { + err = -EINVAL; + goto exit; + } + /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { @@ -5972,8 +5975,10 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: raw data =%s\n", __func__, tmp[2]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - setrawdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); + if (hex2bin(setrawdata, tmp[2], cnts) < 0) { + err = -EINVAL; + goto exit; + } if (rtw_efuse_access(padapter, true, addr, cnts, setrawdata) == _FAIL) { DBG_88E("%s: rtw_efuse_access error!!\n", __func__); @@ -6008,8 +6013,11 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: MAC address =%s\n", __func__, tmp[1]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk + 1]); + if (hex2bin(setdata, tmp[1], cnts) < 0) { + err = -EINVAL; + goto exit; + } + /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { @@ -6046,8 +6054,10 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: VID/PID =%s\n", __func__, tmp[1]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk + 1]); + if (hex2bin(setdata, tmp[1], cnts) < 0) { + err = -EINVAL; + goto exit; + } EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { @@ -6085,8 +6095,10 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: BT data =%s\n", __func__, tmp[2]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); + if (hex2bin(setdata, tmp[2], cnts) < 0) { + err = -EINVAL; + goto exit; + } EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); if ((addr+cnts) > max_available_size) { @@ -6119,8 +6131,10 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: BT tmp data =%s\n", __func__, tmp[2]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - pEfuseHal->fakeBTEfuseModifiedMap[addr+jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); + if (hex2bin(pEfuseHal->fakeBTEfuseModifiedMap + addr, tmp[2], cnts) < 0) { + err = -EINVAL; + goto exit; + } } else if (strcmp(tmp[0], "wldumpfake") == 0) { if (rtw_efuse_map_read(padapter, 0, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeEfuseModifiedMap) == _SUCCESS) { DBG_88E("%s: BT read all map success\n", __func__); @@ -6173,8 +6187,10 @@ static int rtw_mp_efuse_set(struct net_device *dev, DBG_88E("%s: cnts =%d\n", __func__, cnts); DBG_88E("%s: map tmp data =%s\n", __func__, tmp[2]); - for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) - pEfuseHal->fakeEfuseModifiedMap[addr+jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); + if (hex2bin(pEfuseHal->fakeEfuseModifiedMap + addr, tmp[2], cnts) < 0) { + err = -EINVAL; + goto exit; + } } exit: -- cgit From 57373690dba28abf483cc62da0963e9e990f3657 Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Thu, 10 Jul 2014 09:11:22 +0530 Subject: staging: rtl8188eu: re-use hex_to_bin() instead of custom code hex_to_bin could be used to convert hexdecimal digit to its binary representation. Signed-off-by: Andy Shevchenko Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 17 ----------------- drivers/staging/rtl8188eu/include/wlan_bssdef.h | 3 --- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6 +++--- 3 files changed, 3 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 02bd3b032f12..a375b75998d2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -1067,23 +1067,6 @@ enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len, return unknown ? ParseUnknown : ParseOK; } -u8 key_char2num(u8 ch) -{ - if ((ch >= '0') && (ch <= '9')) - return ch - '0'; - else if ((ch >= 'a') && (ch <= 'f')) - return ch - 'a' + 10; - else if ((ch >= 'A') && (ch <= 'F')) - return ch - 'A' + 10; - else - return 0xff; -} - -u8 str_2char2num(u8 hch, u8 lch) -{ - return (key_char2num(hch) * 10) + key_char2num(lch); -} - void rtw_macaddr_cfg(u8 *mac_addr) { u8 mac[ETH_ALEN]; diff --git a/drivers/staging/rtl8188eu/include/wlan_bssdef.h b/drivers/staging/rtl8188eu/include/wlan_bssdef.h index 85e4b9250c00..53b1bd8e9946 100644 --- a/drivers/staging/rtl8188eu/include/wlan_bssdef.h +++ b/drivers/staging/rtl8188eu/include/wlan_bssdef.h @@ -340,7 +340,4 @@ struct ndis_802_11_cap { struct ndis_802_11_auth_encrypt AuthenticationEncryptionSupported[1]; }; -u8 key_char2num(u8 ch); -u8 str_2char2num(u8 hch, u8 lch); - #endif /* ifndef WLAN_BSSDEF_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 6402f48bbd1b..78ab27093299 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -2697,7 +2697,7 @@ static int rtw_p2p_set_intent(struct net_device *dev, intent = extra[0] - '0'; break; case 2: - intent = str_2char2num(extra[0], extra[1]); + intent = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); break; } if (intent <= 15) @@ -2722,7 +2722,7 @@ static int rtw_p2p_set_listen_ch(struct net_device *dev, listen_ch = extra[0] - '0'; break; case 2: - listen_ch = str_2char2num(extra[0], extra[1]); + listen_ch = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); break; } @@ -2755,7 +2755,7 @@ static int rtw_p2p_set_op_ch(struct net_device *dev, op_ch = extra[0] - '0'; break; case 2: - op_ch = str_2char2num(extra[0], extra[1]); + op_ch = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); break; } -- cgit From 42ec30efb4096f25017f13154b6ffff10d5e0b7d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:23 +0530 Subject: staging: rtl8188eu: Remove WEXT_PRIV private ioctl handlers Remove WEXT_PRIV (non-standard) ioctl handlers. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6335 +++--------------------- 1 file changed, 744 insertions(+), 5591 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 78ab27093299..7de9c7255a8c 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -54,48 +54,6 @@ #define WEXT_CSCAN_HOME_DWELL_SECTION 'H' #define WEXT_CSCAN_TYPE_SECTION 'T' -static struct mp_ioctl_handler mp_ioctl_hdl[] = { -/*0*/ GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_start_test_hdl, OID_RT_PRO_START_TEST) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_stop_test_hdl, OID_RT_PRO_STOP_TEST) - - GEN_HANDLER(sizeof(struct rwreg_param), rtl8188eu_oid_rt_pro_read_register_hdl, OID_RT_PRO_READ_REGISTER) - GEN_HANDLER(sizeof(struct rwreg_param), rtl8188eu_oid_rt_pro_write_register_hdl, OID_RT_PRO_WRITE_REGISTER) - GEN_HANDLER(sizeof(struct bb_reg_param), rtl8188eu_oid_rt_pro_read_bb_reg_hdl, OID_RT_PRO_READ_BB_REG) -/*5*/ GEN_HANDLER(sizeof(struct bb_reg_param), rtl8188eu_oid_rt_pro_write_bb_reg_hdl, OID_RT_PRO_WRITE_BB_REG) - GEN_HANDLER(sizeof(struct rf_reg_param), rtl8188eu_oid_rt_pro_read_rf_reg_hdl, OID_RT_PRO_RF_READ_REGISTRY) - GEN_HANDLER(sizeof(struct rf_reg_param), rtl8188eu_oid_rt_pro_write_rf_reg_hdl, OID_RT_PRO_RF_WRITE_REGISTRY) - - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl, OID_RT_PRO_SET_CHANNEL_DIRECT_CALL) - GEN_HANDLER(sizeof(struct txpower_param), rtl8188eu_oid_rt_pro_set_tx_power_control_hdl, OID_RT_PRO_SET_TX_POWER_CONTROL) -/*10*/ GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_data_rate_hdl, OID_RT_PRO_SET_DATA_RATE) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_set_bandwidth_hdl, OID_RT_SET_BANDWIDTH) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_antenna_bb_hdl, OID_RT_PRO_SET_ANTENNA_BB) - - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_continuous_tx_hdl, OID_RT_PRO_SET_CONTINUOUS_TX) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl, OID_RT_PRO_SET_SINGLE_CARRIER_TX) -/*15*/ GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl, OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl, OID_RT_PRO_SET_SINGLE_TONE_TX) - - EXT_MP_IOCTL_HANDLER(0, xmit_packet, 0) - - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_set_rx_packet_type_hdl, OID_RT_SET_RX_PACKET_TYPE) - GEN_HANDLER(0, rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl, OID_RT_RESET_PHY_RX_PACKET_COUNT) -/*20*/ GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl, OID_RT_GET_PHY_RX_PACKET_RECEIVED) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl, OID_RT_GET_PHY_RX_PACKET_CRC32_ERROR) - - GEN_HANDLER(sizeof(struct eeprom_rw_param), NULL, 0) - GEN_HANDLER(sizeof(struct eeprom_rw_param), NULL, 0) - GEN_HANDLER(sizeof(struct efuse_access_struct), rtl8188eu_oid_rt_pro_efuse_hdl, OID_RT_PRO_EFUSE) -/*25*/ GEN_HANDLER(0, rtl8188eu_oid_rt_pro_efuse_map_hdl, OID_RT_PRO_EFUSE_MAP) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_get_efuse_max_size_hdl, OID_RT_GET_EFUSE_MAX_SIZE) - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_get_efuse_current_size_hdl, OID_RT_GET_EFUSE_CURRENT_SIZE) - - GEN_HANDLER(sizeof(u32), rtl8188eu_oid_rt_get_thermal_meter_hdl, OID_RT_PRO_GET_THERMAL_METER) - GEN_HANDLER(sizeof(u8), rtl8188eu_oid_rt_pro_set_power_tracking_hdl, OID_RT_PRO_SET_POWER_TRACKING) -/*30*/ GEN_HANDLER(sizeof(u8), rtl8188eu_oid_rt_set_power_down_hdl, OID_RT_SET_POWER_DOWN) -/*31*/ GEN_HANDLER(0, rtl8188eu_oid_rt_pro_trigger_gpio_hdl, 0) -}; - static u32 rtw_rates[] = {1000000, 2000000, 5500000, 11000000, 6000000, 9000000, 12000000, 18000000, 24000000, 36000000, 48000000, 54000000}; @@ -2091,5344 +2049,1049 @@ static int rtw_wx_get_nick(struct net_device *dev, return 0; } -static int rtw_wx_read32(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int dummy(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) { - struct adapter *padapter; - struct iw_point *p; - u16 len; - u32 addr; - u32 data32; - u32 bytes; - u8 *ptmp; - int rv; - int ret = 0; + return -1; +} - padapter = (struct adapter *)rtw_netdev_priv(dev); - p = &wrqu->data; - len = p->length; - ptmp = (u8 *)rtw_malloc(len); - if (NULL == ptmp) - return -ENOMEM; +static int wpa_set_param(struct net_device *dev, u8 name, u32 value) +{ + uint ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - if (copy_from_user(ptmp, p->pointer, len)) { - ret = -EFAULT; - goto exit; - } + switch (name) { + case IEEE_PARAM_WPA_ENABLED: + padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_8021X; /* 802.1x */ + switch ((value)&0xff) { + case 1: /* WPA */ + padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPAPSK; /* WPA_PSK */ + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled; + break; + case 2: /* WPA2 */ + padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPA2PSK; /* WPA2_PSK */ + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled; + break; + } + RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, + ("wpa_set_param:padapter->securitypriv.ndisauthtype =%d\n", padapter->securitypriv.ndisauthtype)); + break; + case IEEE_PARAM_TKIP_COUNTERMEASURES: + break; + case IEEE_PARAM_DROP_UNENCRYPTED: { + /* HACK: + * + * wpa_supplicant calls set_wpa_enabled when the driver + * is loaded and unloaded, regardless of if WPA is being + * used. No other calls are made which can be used to + * determine if encryption will be used or not prior to + * association being expected. If encryption is not being + * used, drop_unencrypted is set to false, else true -- we + * can use this to determine if the CAP_PRIVACY_ON bit should + * be set. + */ - bytes = 0; - addr = 0; - rv = sscanf(ptmp, "%d,%x", &bytes, &addr); - if (rv != 2) { - ret = -EINVAL; - goto exit; + break; } + case IEEE_PARAM_PRIVACY_INVOKED: + break; - switch (bytes) { - case 1: - data32 = usb_read8(padapter, addr); - sprintf(extra, "0x%02X", data32); + case IEEE_PARAM_AUTH_ALGS: + ret = wpa_set_auth_algs(dev, value); break; - case 2: - data32 = usb_read16(padapter, addr); - sprintf(extra, "0x%04X", data32); + case IEEE_PARAM_IEEE_802_1X: break; - case 4: - data32 = usb_read32(padapter, addr); - sprintf(extra, "0x%08X", data32); + case IEEE_PARAM_WPAX_SELECT: break; default: - DBG_88E(KERN_INFO "%s: usage> read [bytes],[address(hex)]\n", __func__); - ret = -EINVAL; - goto exit; + ret = -EOPNOTSUPP; + break; } - DBG_88E(KERN_INFO "%s: addr = 0x%08X data =%s\n", __func__, addr, extra); - -exit: - kfree(ptmp); return ret; } -static int rtw_wx_write32(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int wpa_mlme(struct net_device *dev, u32 command, u32 reason) { + int ret = 0; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - int rv; - - u32 addr; - u32 data32; - u32 bytes; - - bytes = 0; - addr = 0; - data32 = 0; - rv = sscanf(extra, "%d,%x,%x", &bytes, &addr, &data32); - if (rv != 3) - return -EINVAL; - switch (bytes) { - case 1: - usb_write8(padapter, addr, (u8)data32); - DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%02X\n", __func__, addr, (u8)data32); - break; - case 2: - usb_write16(padapter, addr, (u16)data32); - DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%04X\n", __func__, addr, (u16)data32); + switch (command) { + case IEEE_MLME_STA_DEAUTH: + if (!rtw_set_802_11_disassociate(padapter)) + ret = -1; break; - case 4: - usb_write32(padapter, addr, data32); - DBG_88E(KERN_INFO "%s: addr = 0x%08X data = 0x%08X\n", __func__, addr, data32); + case IEEE_MLME_STA_DISASSOC: + if (!rtw_set_802_11_disassociate(padapter)) + ret = -1; break; default: - DBG_88E(KERN_INFO "%s: usage> write [bytes],[address(hex)],[data(hex)]\n", __func__); - return -EINVAL; + ret = -EOPNOTSUPP; + break; } - return 0; + return ret; } -static int rtw_wx_read_rf(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p) { - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u32 path, addr, data32; - - path = *(u32 *)extra; - addr = *((u32 *)extra + 1); - data32 = rtw_hal_read_rfreg(padapter, path, addr, 0xFFFFF); - /* - * IMPORTANT!! - * Only when wireless private ioctl is at odd order, - * "extra" would be copied to user space. - */ - sprintf(extra, "0x%05x", data32); - - return 0; -} + struct ieee_param *param; + uint ret = 0; -static int rtw_wx_write_rf(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u32 path, addr, data32; + if (p->length < sizeof(struct ieee_param) || !p->pointer) { + ret = -EINVAL; + goto out; + } - path = *(u32 *)extra; - addr = *((u32 *)extra + 1); - data32 = *((u32 *)extra + 2); - rtw_hal_write_rfreg(padapter, path, addr, 0xFFFFF, data32); + param = (struct ieee_param *)rtw_malloc(p->length); + if (param == NULL) { + ret = -ENOMEM; + goto out; + } - return 0; -} + if (copy_from_user(param, p->pointer, p->length)) { + kfree(param); + ret = -EFAULT; + goto out; + } -static int rtw_wx_priv_null(struct net_device *dev, struct iw_request_info *a, - union iwreq_data *wrqu, char *b) -{ - return -1; -} + switch (param->cmd) { + case IEEE_CMD_SET_WPA_PARAM: + ret = wpa_set_param(dev, param->u.wpa_param.name, param->u.wpa_param.value); + break; -static int dummy(struct net_device *dev, struct iw_request_info *a, - union iwreq_data *wrqu, char *b) -{ - return -1; -} + case IEEE_CMD_SET_WPA_IE: + ret = rtw_set_wpa_ie((struct adapter *)rtw_netdev_priv(dev), + (char *)param->u.wpa_ie.data, (u16)param->u.wpa_ie.len); + break; -static int rtw_wx_set_channel_plan(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - u8 channel_plan_req = (u8) (*((int *)wrqu)); + case IEEE_CMD_SET_ENCRYPTION: + ret = wpa_set_encryption(dev, param, p->length); + break; - if (_SUCCESS == rtw_set_chplan_cmd(padapter, channel_plan_req, 1)) - DBG_88E("%s set channel_plan = 0x%02X\n", __func__, pmlmepriv->ChannelPlan); - else - return -EPERM; + case IEEE_CMD_MLME: + ret = wpa_mlme(dev, param->u.mlme.command, param->u.mlme.reason_code); + break; - return 0; -} + default: + DBG_88E("Unknown WPA supplicant request: %d\n", param->cmd); + ret = -EOPNOTSUPP; + break; + } -static int rtw_wx_set_mtk_wps_probe_ie(struct net_device *dev, - struct iw_request_info *a, - union iwreq_data *wrqu, char *b) -{ - return 0; -} + if (ret == 0 && copy_to_user(p->pointer, param, p->length)) + ret = -EFAULT; -static int rtw_wx_get_sensitivity(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *buf) -{ - return 0; -} + kfree(param); -static int rtw_wx_set_mtk_wps_ie(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return 0; -} +out: -/* - * For all data larger than 16 octets, we need to use a - * pointer to memory allocated in user space. - */ -static int rtw_drvext_hdl(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return 0; + return ret; } -static void rtw_dbg_mode_hdl(struct adapter *padapter, u32 id, u8 *pdata, u32 len) +#ifdef CONFIG_88EU_AP_MODE +static u8 set_pairwise_key(struct adapter *padapter, struct sta_info *psta) { - struct mp_rw_reg *RegRWStruct; - struct rf_reg_param *prfreg; - u8 path; - u8 offset; - u32 value; - - DBG_88E("%s\n", __func__); - - switch (id) { - case GEN_MP_IOCTL_SUBCODE(MP_START): - DBG_88E("871x_driver is only for normal mode, can't enter mp mode\n"); - break; - case GEN_MP_IOCTL_SUBCODE(READ_REG): - RegRWStruct = (struct mp_rw_reg *)pdata; - switch (RegRWStruct->width) { - case 1: - RegRWStruct->value = usb_read8(padapter, RegRWStruct->offset); - break; - case 2: - RegRWStruct->value = usb_read16(padapter, RegRWStruct->offset); - break; - case 4: - RegRWStruct->value = usb_read32(padapter, RegRWStruct->offset); - break; - default: - break; - } - - break; - case GEN_MP_IOCTL_SUBCODE(WRITE_REG): - RegRWStruct = (struct mp_rw_reg *)pdata; - switch (RegRWStruct->width) { - case 1: - usb_write8(padapter, RegRWStruct->offset, (u8)RegRWStruct->value); - break; - case 2: - usb_write16(padapter, RegRWStruct->offset, (u16)RegRWStruct->value); - break; - case 4: - usb_write32(padapter, RegRWStruct->offset, (u32)RegRWStruct->value); - break; - default: - break; - } - - break; - case GEN_MP_IOCTL_SUBCODE(READ_RF_REG): + struct cmd_obj *ph2c; + struct set_stakey_parm *psetstakey_para; + struct cmd_priv *pcmdpriv = &padapter->cmdpriv; + u8 res = _SUCCESS; - prfreg = (struct rf_reg_param *)pdata; + ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); + if (ph2c == NULL) { + res = _FAIL; + goto exit; + } - path = (u8)prfreg->path; - offset = (u8)prfreg->offset; + psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); + if (psetstakey_para == NULL) { + kfree(ph2c); + res = _FAIL; + goto exit; + } - value = rtw_hal_read_rfreg(padapter, path, offset, 0xffffffff); + init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_); - prfreg->value = value; + psetstakey_para->algorithm = (u8)psta->dot118021XPrivacy; - break; - case GEN_MP_IOCTL_SUBCODE(WRITE_RF_REG): + memcpy(psetstakey_para->addr, psta->hwaddr, ETH_ALEN); - prfreg = (struct rf_reg_param *)pdata; + memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16); - path = (u8)prfreg->path; - offset = (u8)prfreg->offset; - value = prfreg->value; + res = rtw_enqueue_cmd(pcmdpriv, ph2c); - rtw_hal_write_rfreg(padapter, path, offset, 0xffffffff, value); +exit: - break; - case GEN_MP_IOCTL_SUBCODE(TRIGGER_GPIO): - DBG_88E("==> trigger gpio 0\n"); - rtw_hal_set_hwreg(padapter, HW_VAR_TRIGGER_GPIO_0, NULL); - break; - case GEN_MP_IOCTL_SUBCODE(GET_WIFI_STATUS): - *pdata = rtw_hal_sreset_get_wifi_status(padapter); - break; - default: - break; - } + return res; } -static int rtw_mp_ioctl_hdl(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) { - int ret = 0; - u32 BytesRead, BytesWritten, BytesNeeded; - struct oid_par_priv oid_par; - struct mp_ioctl_handler *phandler; - struct mp_ioctl_param *poidparam; - uint status = 0; - u16 len; - u8 *pparmbuf = NULL, bset; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct iw_point *p = &wrqu->data; + u8 keylen; + struct cmd_obj *pcmd; + struct setkey_parm *psetkeyparm; + struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); + int res = _SUCCESS; - if ((!p->length) || (!p->pointer)) { - ret = -EINVAL; - goto _rtw_mp_ioctl_hdl_exit; - } - pparmbuf = NULL; - bset = (u8)(p->flags & 0xFFFF); - len = p->length; - pparmbuf = (u8 *)rtw_malloc(len); - if (pparmbuf == NULL) { - ret = -ENOMEM; - goto _rtw_mp_ioctl_hdl_exit; - } + DBG_88E("%s\n", __func__); - if (copy_from_user(pparmbuf, p->pointer, len)) { - ret = -EFAULT; - goto _rtw_mp_ioctl_hdl_exit; + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); + if (pcmd == NULL) { + res = _FAIL; + goto exit; } - - poidparam = (struct mp_ioctl_param *)pparmbuf; - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, - ("rtw_mp_ioctl_hdl: subcode [%d], len[%d], buffer_len[%d]\r\n", - poidparam->subcode, poidparam->len, len)); - - if (poidparam->subcode >= ARRAY_SIZE(mp_ioctl_hdl)) { - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("no matching drvext subcodes\r\n")); - ret = -EINVAL; - goto _rtw_mp_ioctl_hdl_exit; + psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL); + if (psetkeyparm == NULL) { + kfree(pcmd); + res = _FAIL; + goto exit; } - if (padapter->registrypriv.mp_mode == 1) { - phandler = mp_ioctl_hdl + poidparam->subcode; - - if ((phandler->paramsize != 0) && (poidparam->len < phandler->paramsize)) { - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, - ("no matching drvext param size %d vs %d\r\n", - poidparam->len, phandler->paramsize)); - ret = -EINVAL; - goto _rtw_mp_ioctl_hdl_exit; - } + memset(psetkeyparm, 0, sizeof(struct setkey_parm)); - if (phandler->handler) { - oid_par.adapter_context = padapter; - oid_par.oid = phandler->oid; - oid_par.information_buf = poidparam->data; - oid_par.information_buf_len = poidparam->len; - oid_par.dbg = 0; + psetkeyparm->keyid = (u8)keyid; - BytesWritten = 0; - BytesNeeded = 0; + psetkeyparm->algorithm = alg; - if (bset) { - oid_par.bytes_rw = &BytesRead; - oid_par.bytes_needed = &BytesNeeded; - oid_par.type_of_oid = SET_OID; - } else { - oid_par.bytes_rw = &BytesWritten; - oid_par.bytes_needed = &BytesNeeded; - oid_par.type_of_oid = QUERY_OID; - } + psetkeyparm->set_tx = 1; - status = phandler->handler(&oid_par); - } else { - DBG_88E("rtw_mp_ioctl_hdl(): err!, subcode =%d, oid =%d, handler =%p\n", - poidparam->subcode, phandler->oid, phandler->handler); - ret = -EFAULT; - goto _rtw_mp_ioctl_hdl_exit; - } - } else { - rtw_dbg_mode_hdl(padapter, poidparam->subcode, poidparam->data, poidparam->len); + switch (alg) { + case _WEP40_: + keylen = 5; + break; + case _WEP104_: + keylen = 13; + break; + case _TKIP_: + case _TKIP_WTMIC_: + case _AES_: + default: + keylen = 16; } - if (bset == 0x00) {/* query info */ - if (copy_to_user(p->pointer, pparmbuf, len)) - ret = -EFAULT; - } + memcpy(&(psetkeyparm->key[0]), key, keylen); - if (status) { - ret = -EFAULT; - goto _rtw_mp_ioctl_hdl_exit; - } + pcmd->cmdcode = _SetKey_CMD_; + pcmd->parmbuf = (u8 *)psetkeyparm; + pcmd->cmdsz = (sizeof(struct setkey_parm)); + pcmd->rsp = NULL; + pcmd->rspsz = 0; + + INIT_LIST_HEAD(&pcmd->list); -_rtw_mp_ioctl_hdl_exit: + res = rtw_enqueue_cmd(pcmdpriv, pcmd); - kfree(pparmbuf); - return ret; +exit: + + return res; +} + +static int set_wep_key(struct adapter *padapter, u8 *key, u8 keylen, int keyid) +{ + u8 alg; + + switch (keylen) { + case 5: + alg = _WEP40_; + break; + case 13: + alg = _WEP104_; + break; + default: + alg = _NO_PRIVACY_; + } + + return set_group_key(padapter, key, alg, keyid); } -static int rtw_get_ap_info(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len) { int ret = 0; - u32 cnt = 0, wpa_ielen; - struct list_head *plist, *phead; - unsigned char *pbuf; - u8 bssid[ETH_ALEN]; - char data[32]; - struct wlan_network *pnetwork = NULL; + u32 wep_key_idx, wep_key_len, wep_total_len; + struct ndis_802_11_wep *pwep = NULL; + struct sta_info *psta = NULL, *pbcmc_sta = NULL; struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct iw_point *pdata = &wrqu->data; - - DBG_88E("+rtw_get_aplist_info\n"); + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; + struct security_priv *psecuritypriv = &(padapter->securitypriv); + struct sta_priv *pstapriv = &padapter->stapriv; - if ((padapter->bDriverStopped) || (pdata == NULL)) { - ret = -EINVAL; + DBG_88E("%s\n", __func__); + param->u.crypt.err = 0; + param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; + if (param_len != sizeof(struct ieee_param) + param->u.crypt.key_len) { + ret = -EINVAL; goto exit; } - - while ((check_fwstate(pmlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)))) { - msleep(30); - cnt++; - if (cnt > 100) - break; - } - pdata->flags = 0; - if (pdata->length >= 32) { - if (copy_from_user(data, pdata->pointer, 32)) { + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) { + if (param->u.crypt.idx >= WEP_KEYS) { ret = -EINVAL; goto exit; } } else { - ret = -EINVAL; - goto exit; + psta = rtw_get_stainfo(pstapriv, param->sta_addr); + if (!psta) { + DBG_88E("rtw_set_encryption(), sta has already been removed or never been added\n"); + goto exit; + } } - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); + if (strcmp(param->u.crypt.alg, "none") == 0 && (psta == NULL)) { + /* todo:clear default encryption keys */ - phead = get_list_head(queue); - plist = phead->next; + DBG_88E("clear default encryption keys, keyid =%d\n", param->u.crypt.idx); + goto exit; + } + if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta == NULL)) { + DBG_88E("r871x_set_encryption, crypt.alg = WEP\n"); + wep_key_idx = param->u.crypt.idx; + wep_key_len = param->u.crypt.key_len; + DBG_88E("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len); + if ((wep_key_idx >= WEP_KEYS) || (wep_key_len <= 0)) { + ret = -EINVAL; + goto exit; + } - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); + if (wep_key_len > 0) { + wep_key_len = wep_key_len <= 5 ? 5 : 13; + wep_total_len = wep_key_len + FIELD_OFFSET(struct ndis_802_11_wep, KeyMaterial); + pwep = (struct ndis_802_11_wep *)rtw_malloc(wep_total_len); + if (pwep == NULL) { + DBG_88E(" r871x_set_encryption: pwep allocate fail !!!\n"); + goto exit; + } - if (!mac_pton(data, bssid)) { - DBG_88E("Invalid BSSID '%s'.\n", (u8 *)data); - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - return -EINVAL; + memset(pwep, 0, wep_total_len); + + pwep->KeyLength = wep_key_len; + pwep->Length = wep_total_len; } - if (!memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN)) { - /* BSSID match, then check if supporting wpa/wpa2 */ - DBG_88E("BSSID:%pM\n", (bssid)); + pwep->KeyIndex = wep_key_idx; - pbuf = rtw_get_wpa_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength-12); - if (pbuf && (wpa_ielen > 0)) { - pdata->flags = 1; - break; - } + memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength); - pbuf = rtw_get_wpa2_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength-12); - if (pbuf && (wpa_ielen > 0)) { - pdata->flags = 2; - break; - } - } + if (param->u.crypt.set_tx) { + DBG_88E("wep, set_tx = 1\n"); - plist = plist->next; - } + psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled; + psecuritypriv->dot11PrivacyAlgrthm = _WEP40_; + psecuritypriv->dot118021XGrpPrivacy = _WEP40_; - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); + if (pwep->KeyLength == 13) { + psecuritypriv->dot11PrivacyAlgrthm = _WEP104_; + psecuritypriv->dot118021XGrpPrivacy = _WEP104_; + } - if (pdata->length >= 34) { - if (copy_to_user(pdata->pointer+32, (u8 *)&pdata->flags, 1)) { - ret = -EINVAL; - goto exit; - } - } + psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx; -exit: + memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength); - return ret; -} + psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength; -static int rtw_set_pid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = rtw_netdev_priv(dev); - int *pdata = (int *)wrqu; - int selector; + set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx); + } else { + DBG_88E("wep, set_tx = 0\n"); - if ((padapter->bDriverStopped) || (pdata == NULL)) { - ret = -EINVAL; - goto exit; - } + /* don't update "psecuritypriv->dot11PrivacyAlgrthm" and */ + /* psecuritypriv->dot11PrivacyKeyIndex = keyid", but can rtw_set_key to cam */ - selector = *pdata; - if (selector < 3 && selector >= 0) { - padapter->pid[selector] = *(pdata+1); - ui_pid[selector] = *(pdata+1); - DBG_88E("%s set pid[%d] =%d\n", __func__, selector, padapter->pid[selector]); - } else { - DBG_88E("%s selector %d error\n", __func__, selector); - } -exit: - return ret; -} + memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength); -static int rtw_wps_start(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct iw_point *pdata = &wrqu->data; - u32 u32wps_start = 0; + psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength; - if ((padapter->bDriverStopped) || (pdata == NULL)) { - ret = -EINVAL; - goto exit; - } + set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx); + } - ret = copy_from_user((void *)&u32wps_start, pdata->pointer, 4); - if (ret) { - ret = -EINVAL; goto exit; } - if (u32wps_start == 0) - u32wps_start = *extra; - - DBG_88E("[%s] wps_start = %d\n", __func__, u32wps_start); + if (!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* group key */ + if (param->u.crypt.set_tx == 1) { + if (strcmp(param->u.crypt.alg, "WEP") == 0) { + DBG_88E("%s, set group_key, WEP\n", __func__); - if (u32wps_start == 1) /* WPS Start */ - rtw_led_control(padapter, LED_CTL_START_WPS); - else if (u32wps_start == 2) /* WPS Stop because of wps success */ - rtw_led_control(padapter, LED_CTL_STOP_WPS); - else if (u32wps_start == 3) /* WPS Stop because of wps fail */ - rtw_led_control(padapter, LED_CTL_STOP_WPS_FAIL); + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); -exit: - return ret; -} + psecuritypriv->dot118021XGrpPrivacy = _WEP40_; + if (param->u.crypt.key_len == 13) + psecuritypriv->dot118021XGrpPrivacy = _WEP104_; + } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { + DBG_88E("%s, set group_key, TKIP\n", __func__); + psecuritypriv->dot118021XGrpPrivacy = _TKIP_; + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); + /* set mic key */ + memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8); + memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8); -#ifdef CONFIG_88EU_P2P -static int rtw_wext_p2p_enable(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - enum P2P_ROLE init_role = P2P_ROLE_DISABLE; - - if (*extra == '0') - init_role = P2P_ROLE_DISABLE; - else if (*extra == '1') - init_role = P2P_ROLE_DEVICE; - else if (*extra == '2') - init_role = P2P_ROLE_CLIENT; - else if (*extra == '3') - init_role = P2P_ROLE_GO; - - if (_FAIL == rtw_p2p_enable(padapter, init_role)) { - ret = -EFAULT; + psecuritypriv->busetkipkey = true; + } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { + DBG_88E("%s, set group_key, CCMP\n", __func__); + psecuritypriv->dot118021XGrpPrivacy = _AES_; + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); + } else { + DBG_88E("%s, set group_key, none\n", __func__); + psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_; + } + psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; + psecuritypriv->binstallGrpkey = true; + psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;/* */ + set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx); + pbcmc_sta = rtw_get_bcmc_stainfo(padapter); + if (pbcmc_sta) { + pbcmc_sta->ieee8021x_blocked = false; + pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */ + } + } goto exit; } - /* set channel/bandwidth */ - if (init_role != P2P_ROLE_DISABLE) { - u8 channel, ch_offset; - u16 bwmode; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)) { - /* Stay at the listen state and wait for discovery. */ - channel = pwdinfo->listen_channel; - pwdinfo->operating_channel = pwdinfo->listen_channel; - ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE; - bwmode = HT_CHANNEL_WIDTH_20; - } else { - pwdinfo->operating_channel = pmlmeext->cur_channel; - - channel = pwdinfo->operating_channel; - ch_offset = pmlmeext->cur_ch_offset; - bwmode = pmlmeext->cur_bwmode; - } + if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) { /* psk/802_1x */ + if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { + if (param->u.crypt.set_tx == 1) { + memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - set_channel_bwmode(padapter, channel, ch_offset, bwmode); - } + if (strcmp(param->u.crypt.alg, "WEP") == 0) { + DBG_88E("%s, set pairwise key, WEP\n", __func__); -exit: - return ret; -} + psta->dot118021XPrivacy = _WEP40_; + if (param->u.crypt.key_len == 13) + psta->dot118021XPrivacy = _WEP104_; + } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { + DBG_88E("%s, set pairwise key, TKIP\n", __func__); -static int rtw_p2p_set_go_nego_ssid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); + psta->dot118021XPrivacy = _TKIP_; - DBG_88E("[%s] ssid = %s, len = %zu\n", __func__, extra, strlen(extra)); - memcpy(pwdinfo->nego_ssid, extra, strlen(extra)); - pwdinfo->nego_ssidlen = strlen(extra); + /* set mic key */ + memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8); + memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8); - return ret; -} + psecuritypriv->busetkipkey = true; + } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { + DBG_88E("%s, set pairwise key, CCMP\n", __func__); -static int rtw_p2p_set_intent(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 intent = pwdinfo->intent; + psta->dot118021XPrivacy = _AES_; + } else { + DBG_88E("%s, set pairwise key, none\n", __func__); - switch (wrqu->data.length) { - case 1: - intent = extra[0] - '0'; - break; - case 2: - intent = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); - break; - } - if (intent <= 15) - pwdinfo->intent = intent; - else - ret = -1; - DBG_88E("[%s] intent = %d\n", __func__, intent); - return ret; -} - -static int rtw_p2p_set_listen_ch(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 listen_ch = pwdinfo->listen_channel; /* Listen channel number */ - - switch (wrqu->data.length) { - case 1: - listen_ch = extra[0] - '0'; - break; - case 2: - listen_ch = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); - break; - } - - if ((listen_ch == 1) || (listen_ch == 6) || (listen_ch == 11)) { - pwdinfo->listen_channel = listen_ch; - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - } else { - ret = -1; - } - - DBG_88E("[%s] listen_ch = %d\n", __func__, pwdinfo->listen_channel); - - return ret; -} - -static int rtw_p2p_set_op_ch(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ -/* Commented by Albert 20110524 */ -/* This function is used to set the operating channel if the driver will become the group owner */ - - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 op_ch = pwdinfo->operating_channel; /* Operating channel number */ - - switch (wrqu->data.length) { - case 1: - op_ch = extra[0] - '0'; - break; - case 2: - op_ch = hex_to_bin(extra[0]) * 10 + hex_to_bin(extra[1]); - break; - } - - if (op_ch > 0) - pwdinfo->operating_channel = op_ch; - else - ret = -1; - - DBG_88E("[%s] op_ch = %d\n", __func__, pwdinfo->operating_channel); - - return ret; -} - -static int rtw_p2p_profilefound(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - /* Comment by Albert 2010/10/13 */ - /* Input data format: */ - /* Ex: 0 */ - /* Ex: 1XX:XX:XX:XX:XX:XXYYSSID */ - /* 0 => Reflush the profile record list. */ - /* 1 => Add the profile list */ - /* XX:XX:XX:XX:XX:XX => peer's MAC Address (ex: 00:E0:4C:00:00:01) */ - /* YY => SSID Length */ - /* SSID => SSID for persistence group */ - - DBG_88E("[%s] In value = %s, len = %d\n", __func__, extra, wrqu->data.length - 1); - - /* The upper application should pass the SSID to driver by using this rtw_p2p_profilefound function. */ - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - if (extra[0] == '0') { - /* Remove all the profile information of wifidirect_info structure. */ - memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); - pwdinfo->profileindex = 0; - } else { - if (pwdinfo->profileindex >= P2P_MAX_PERSISTENT_GROUP_NUM) { - ret = -1; - } else { - /* Add this profile information into pwdinfo->profileinfo */ - /* Ex: 1XX:XX:XX:XX:XX:XXYYSSID */ - if (!mac_pton(extra + 1, - pwdinfo->profileinfo[pwdinfo->profileindex].peermac)) - return -EINVAL; - - pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen = (extra[18] - '0') * 10 + (extra[19] - '0'); - memcpy(pwdinfo->profileinfo[pwdinfo->profileindex].ssid, &extra[20], pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen); - pwdinfo->profileindex++; - } - } - } - - return ret; -} - -static int rtw_p2p_setDN(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] %s %d\n", __func__, extra, wrqu->data.length - 1); - memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); - memcpy(pwdinfo->device_name, extra, wrqu->data.length - 1); - pwdinfo->device_name_len = wrqu->data.length - 1; - - return ret; -} - -static int rtw_p2p_get_status(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - if (padapter->bShowGetP2PState) - DBG_88E("[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), - pwdinfo->p2p_peer_interface_addr[0], pwdinfo->p2p_peer_interface_addr[1], pwdinfo->p2p_peer_interface_addr[2], - pwdinfo->p2p_peer_interface_addr[3], pwdinfo->p2p_peer_interface_addr[4], pwdinfo->p2p_peer_interface_addr[5]); - - /* Commented by Albert 2010/10/12 */ - /* Because of the output size limitation, I had removed the "Role" information. */ - /* About the "Role" information, we will use the new private IOCTL to get the "Role" information. */ - sprintf(extra, "\n\nStatus=%.2d\n", rtw_p2p_state(pwdinfo)); - wrqu->data.length = strlen(extra); - - return ret; -} - -/* Commented by Albert 20110520 */ -/* This function will return the config method description */ -/* This config method description will show us which config method the remote P2P device is intended to use */ -/* by sending the provisioning discovery request frame. */ - -static int rtw_p2p_get_req_cm(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - sprintf(extra, "\n\nCM=%s\n", pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_role(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), - pwdinfo->p2p_peer_interface_addr[0], pwdinfo->p2p_peer_interface_addr[1], pwdinfo->p2p_peer_interface_addr[2], - pwdinfo->p2p_peer_interface_addr[3], pwdinfo->p2p_peer_interface_addr[4], pwdinfo->p2p_peer_interface_addr[5]); - - sprintf(extra, "\n\nRole=%.2d\n", rtw_p2p_role(pwdinfo)); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_peer_ifaddr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] Role = %d, Status = %d, peer addr = %pM\n", __func__, - rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), - pwdinfo->p2p_peer_interface_addr); - sprintf(extra, "\nMAC %pM", - pwdinfo->p2p_peer_interface_addr); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_peer_devaddr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) - -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] Role = %d, Status = %d, peer addr = %pM\n", __func__, - rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), - pwdinfo->rx_prov_disc_info.peerDevAddr); - sprintf(extra, "\n%pM", - pwdinfo->rx_prov_disc_info.peerDevAddr); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_peer_devaddr_by_invitation(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) - -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] Role = %d, Status = %d, peer addr = %pM\n", - __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), - pwdinfo->p2p_peer_device_addr); - sprintf(extra, "\nMAC %pM", - pwdinfo->p2p_peer_device_addr); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_groupid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) - -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - sprintf(extra, "\n%.2X:%.2X:%.2X:%.2X:%.2X:%.2X %s", - pwdinfo->groupid_info.go_device_addr[0], pwdinfo->groupid_info.go_device_addr[1], - pwdinfo->groupid_info.go_device_addr[2], pwdinfo->groupid_info.go_device_addr[3], - pwdinfo->groupid_info.go_device_addr[4], pwdinfo->groupid_info.go_device_addr[5], - pwdinfo->groupid_info.ssid); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_op_ch(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) - -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] Op_ch = %02x\n", __func__, pwdinfo->operating_channel); - - sprintf(extra, "\n\nOp_ch=%.2d\n", pwdinfo->operating_channel); - wrqu->data.length = strlen(extra); - return ret; -} - -static int rtw_p2p_get_wps_configmethod(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u8 peerMAC[ETH_ALEN] = {0x00}; - u8 peerMACStr[18] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - u8 blnMatch = 0; - u16 attr_content = 0; - uint attr_contentlen = 0; - /* 6 is the string "wpsCM=", 17 is the MAC addr, we have to clear it at wrqu->data.pointer */ - u8 attr_content_str[6 + 17] = {0x00}; - - /* Commented by Albert 20110727 */ - /* The input data is the MAC address which the application wants to know its WPS config method. */ - /* After knowing its WPS config method, the application can decide the config method for provisioning discovery. */ - /* Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, (char *)extra); - if (copy_from_user(peerMACStr, wrqu->data.pointer + 6, 17)) - return -EFAULT; - - if (!mac_pton(peerMACStr, peerMAC)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - u8 *wpsie; - uint wpsie_len = 0; - __be16 be_tmp; - - /* The mac address is matched. */ - wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len); - if (wpsie) { - rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *) &be_tmp, &attr_contentlen); - if (attr_contentlen) { - attr_content = be16_to_cpu(be_tmp); - sprintf(attr_content_str, "\n\nM=%.4d", attr_content); - blnMatch = 1; - } - } - break; - } - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (!blnMatch) - sprintf(attr_content_str, "\n\nM=0000"); - - if (copy_to_user(wrqu->data.pointer, attr_content_str, 6 + 17)) - return -EFAULT; - return ret; -} - -static int rtw_p2p_get_go_device_address(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u8 peerMAC[ETH_ALEN] = {0x00}; - u8 peerMACStr[18] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - u8 blnMatch = 0; - u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; - u8 attr_content[100] = {0x00}; - u8 go_devadd_str[17 + 12] = {}; - - /* Commented by Albert 20121209 */ - /* The input data is the GO's interface address which the application wants to know its device address. */ - /* Format: iwpriv wlanx p2p_get2 go_devadd = 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, (char *)extra); - if (copy_from_user(peerMACStr, wrqu->data.pointer + 10, 17)) - return -EFAULT; - - if (!mac_pton(peerMACStr, peerMAC)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - /* Commented by Albert 2011/05/18 */ - /* Match the device address located in the P2P IE */ - /* This is for the case that the P2P device address is not the same as the P2P interface address. */ - - p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen); - if (p2pie) { - while (p2pie) { - /* The P2P Device ID attribute is included in the Beacon frame. */ - /* The P2P Device Info attribute is included in the probe response frame. */ - - memset(attr_content, 0x00, 100); - if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { - /* Handle the P2P Device ID attribute of Beacon first */ - blnMatch = 1; - break; - } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) { - /* Handle the P2P Device Info attribute of probe response */ - blnMatch = 1; - break; - } - - /* Get the next P2P IE */ - p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen); - } - } - } - - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (!blnMatch) - snprintf(go_devadd_str, sizeof(go_devadd_str), "\n\ndev_add=NULL"); - else - snprintf(go_devadd_str, sizeof(go_devadd_str), "\n\ndev_add=%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", - attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]); - - if (copy_to_user(wrqu->data.pointer, go_devadd_str, sizeof(go_devadd_str))) - return -EFAULT; - return ret; -} - -static int rtw_p2p_get_device_type(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u8 peerMAC[ETH_ALEN] = {0x00}; - u8 peerMACStr[18] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - u8 blnMatch = 0; - u8 dev_type[8] = {0x00}; - uint dev_type_len = 0; - u8 dev_type_str[17 + 9] = {0x00}; /* +9 is for the str "dev_type=", we have to clear it at wrqu->data.pointer */ - - /* Commented by Albert 20121209 */ - /* The input data is the MAC address which the application wants to know its device type. */ - /* Such user interface could know the device type. */ - /* Format: iwpriv wlanx p2p_get2 dev_type = 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, (char *)extra); - if (copy_from_user(peerMACStr, wrqu->data.pointer + 9, 17)) - return -EFAULT; - - if (!mac_pton(peerMACStr, peerMAC)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - u8 *wpsie; - uint wpsie_len = 0; - - /* The mac address is matched. */ - - wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], - pnetwork->network.IELength - 12, - NULL, &wpsie_len); - if (wpsie) { - rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len); - if (dev_type_len) { - u16 type = 0; - __be16 be_tmp; - - memcpy(&be_tmp, dev_type, 2); - type = be16_to_cpu(be_tmp); - sprintf(dev_type_str, "\n\nN=%.2d", type); - blnMatch = 1; + psta->dot118021XPrivacy = _NO_PRIVACY_; } - } - break; - } - - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (!blnMatch) - sprintf(dev_type_str, "\n\nN=00"); - - if (copy_to_user(wrqu->data.pointer, dev_type_str, 9 + 17)) { - return -EFAULT; - } - - return ret; -} -static int rtw_p2p_get_device_name(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u8 peerMAC[ETH_ALEN] = {0x00}; - u8 peerMACStr[18] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - u8 blnMatch = 0; - u8 dev_name[WPS_MAX_DEVICE_NAME_LEN] = {0x00}; - uint dev_len = 0; - u8 dev_name_str[WPS_MAX_DEVICE_NAME_LEN + 5] = {0x00}; /* +5 is for the str "devN=", we have to clear it at wrqu->data.pointer */ - - /* Commented by Albert 20121225 */ - /* The input data is the MAC address which the application wants to know its device name. */ - /* Such user interface could show peer device's device name instead of ssid. */ - /* Format: iwpriv wlanx p2p_get2 devN = 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, (char *)extra); - if (copy_from_user(peerMACStr, wrqu->data.pointer + 5, 17)) - return -EFAULT; + set_pairwise_key(padapter, psta); - if (!mac_pton(peerMACStr, peerMAC)) - return -EINVAL; + psta->ieee8021x_blocked = false; + } else { /* group key??? */ + if (strcmp(param->u.crypt.alg, "WEP") == 0) { + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); + psecuritypriv->dot118021XGrpPrivacy = _WEP40_; + if (param->u.crypt.key_len == 13) + psecuritypriv->dot118021XGrpPrivacy = _WEP104_; + } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { + psecuritypriv->dot118021XGrpPrivacy = _TKIP_; - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - u8 *wpsie; - uint wpsie_len = 0; - - /* The mac address is matched. */ - wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len); - if (wpsie) { - rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len); - if (dev_len) { - sprintf(dev_name_str, "\n\nN=%s", dev_name); - blnMatch = 1; - } - } - break; - } - - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (!blnMatch) - sprintf(dev_name_str, "\n\nN=0000"); - - if (copy_to_user(wrqu->data.pointer, dev_name_str, 5 + ((dev_len > 17) ? dev_len : 17))) - return -EFAULT; - return ret; -} - -static int rtw_p2p_get_invitation_procedure(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - u8 peerMAC[ETH_ALEN] = {0x00}; - u8 peerMACStr[18] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - u8 blnMatch = 0; - u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; - u8 attr_content[2] = {0x00}; - - u8 inv_proc_str[17 + 8] = {0x00}; - /* +8 is for the str "InvProc=", we have to clear it at wrqu->data.pointer */ - - /* Commented by Ouden 20121226 */ - /* The application wants to know P2P initiation procedure is supported or not. */ - /* Format: iwpriv wlanx p2p_get2 InvProc = 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, (char *)extra); - if (copy_from_user(peerMACStr, wrqu->data.pointer + 8, 17)) - return -EFAULT; - - if (!mac_pton(peerMACStr, peerMAC)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - /* Commented by Albert 20121226 */ - /* Match the device address located in the P2P IE */ - /* This is for the case that the P2P device address is not the same as the P2P interface address. */ - - p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen); - if (p2pie) { - while (p2pie) { - if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_CAPABILITY, attr_content, &attr_contentlen)) { - /* Handle the P2P capability attribute */ - blnMatch = 1; - break; - } - - /* Get the next P2P IE */ - p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen); - } - } - } - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (!blnMatch) { - sprintf(inv_proc_str, "\nIP=-1"); - } else { - if (attr_content[0] & 0x20) - sprintf(inv_proc_str, "\nIP=1"); - else - sprintf(inv_proc_str, "\nIP=0"); - } - if (copy_to_user(wrqu->data.pointer, inv_proc_str, 8 + 17)) - return -EFAULT; - return ret; -} - -static int rtw_p2p_connect(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 peerMAC[ETH_ALEN] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - uint uintPeerChannel = 0; - - /* Commented by Albert 20110304 */ - /* The input data contains two informations. */ - /* 1. First information is the MAC address which wants to formate with */ - /* 2. Second information is the WPS PINCode or "pbc" string for push button method */ - /* Format: 00:E0:4C:00:00:05 */ - /* Format: 00:E0:4C:00:00:05 */ - - DBG_88E("[%s] data = %s\n", __func__, extra); - - if (pwdinfo->p2p_state == P2P_STATE_NONE) { - DBG_88E("[%s] WiFi Direct is disable!\n", __func__); - return ret; - } - - if (pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO) - return -1; - - if (!mac_pton(extra, peerMAC)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) { - uintPeerChannel = pnetwork->network.Configuration.DSConfig; - break; - } - - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (uintPeerChannel) { - memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); - memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); - - pwdinfo->nego_req_info.peer_channel_num[0] = uintPeerChannel; - memcpy(pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN); - pwdinfo->nego_req_info.benable = true; - - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - if (rtw_p2p_state(pwdinfo) != P2P_STATE_GONEGO_OK) { - /* Restore to the listen state if the current p2p state is not nego OK */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN); - } - - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING); - - DBG_88E("[%s] Start PreTx Procedure!\n", __func__); - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT); - } else { - DBG_88E("[%s] Not Found in Scanning Queue~\n", __func__); - ret = -1; - } - return ret; -} - -static int rtw_p2p_invite_req(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - uint uintPeerChannel = 0; - u8 attr_content[50] = {0x00}; - u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; - struct tx_invite_req_info *pinvite_req_info = &pwdinfo->invitereq_info; - - /* The input data contains two informations. */ - /* 1. First information is the P2P device address which you want to send to. */ - /* 2. Second information is the group id which combines with GO's mac address, space and GO's ssid. */ - /* Command line sample: iwpriv wlan0 p2p_set invite="00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy" */ - /* Format: 00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy */ - - DBG_88E("[%s] data = %s\n", __func__, extra); - - if (wrqu->data.length <= 37) { - DBG_88E("[%s] Wrong format!\n", __func__); - return ret; - } - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - DBG_88E("[%s] WiFi Direct is disable!\n", __func__); - return ret; - } else { - /* Reset the content of struct tx_invite_req_info */ - pinvite_req_info->benable = false; - memset(pinvite_req_info->go_bssid, 0x00, ETH_ALEN); - memset(pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN); - pinvite_req_info->ssidlen = 0x00; - pinvite_req_info->operating_ch = pwdinfo->operating_channel; - memset(pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN); - pinvite_req_info->token = 3; - } - - if (!mac_pton(extra, pinvite_req_info->peer_macaddr)) - return -EINVAL; - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - pnetwork = container_of(plist, struct wlan_network, list); - - /* Commented by Albert 2011/05/18 */ - /* Match the device address located in the P2P IE */ - /* This is for the case that the P2P device address is not the same as the P2P interface address. */ - - p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen); - if (p2pie) { - /* The P2P Device ID attribute is included in the Beacon frame. */ - /* The P2P Device Info attribute is included in the probe response frame. */ - - if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { - /* Handle the P2P Device ID attribute of Beacon first */ - if (!memcmp(attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN)) { - uintPeerChannel = pnetwork->network.Configuration.DSConfig; - break; - } - } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) { - /* Handle the P2P Device Info attribute of probe response */ - if (!memcmp(attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN)) { - uintPeerChannel = pnetwork->network.Configuration.DSConfig; - break; - } - } - } - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (uintPeerChannel) { - /* Store the GO's bssid */ - if (!mac_pton(extra + 18, pinvite_req_info->go_bssid)) - return -EINVAL; - - /* Store the GO's ssid */ - pinvite_req_info->ssidlen = wrqu->data.length - 36; - memcpy(pinvite_req_info->go_ssid, &extra[36], (u32) pinvite_req_info->ssidlen); - pinvite_req_info->benable = true; - pinvite_req_info->peer_ch = uintPeerChannel; - - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INVITE_REQ); - - set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - - _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT); - } else { - DBG_88E("[%s] NOT Found in the Scanning Queue!\n", __func__); - } - return ret; -} - -static int rtw_p2p_set_persistent(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - /* The input data is 0 or 1 */ - /* 0: disable persistent group functionality */ - /* 1: enable persistent group founctionality */ - - DBG_88E("[%s] data = %s\n", __func__, extra); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - DBG_88E("[%s] WiFi Direct is disable!\n", __func__); - return ret; - } else { - if (extra[0] == '0') /* Disable the persistent group function. */ - pwdinfo->persistent_supported = false; - else if (extra[0] == '1') /* Enable the persistent group function. */ - pwdinfo->persistent_supported = true; - else - pwdinfo->persistent_supported = false; - } - pr_info("[%s] persistent_supported = %d\n", __func__, pwdinfo->persistent_supported); - return ret; -} - -static int rtw_p2p_prov_disc(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 peerMAC[ETH_ALEN] = {0x00}; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct list_head *plist, *phead; - struct __queue *queue = &(pmlmepriv->scanned_queue); - struct wlan_network *pnetwork = NULL; - uint uintPeerChannel = 0; - u8 attr_content[100] = {0x00}; - u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; - - /* The input data contains two informations. */ - /* 1. First information is the MAC address which wants to issue the provisioning discovery request frame. */ - /* 2. Second information is the WPS configuration method which wants to discovery */ - /* Format: 00:E0:4C:00:00:05_display */ - /* Format: 00:E0:4C:00:00:05_keypad */ - /* Format: 00:E0:4C:00:00:05_pbc */ - /* Format: 00:E0:4C:00:00:05_label */ - - DBG_88E("[%s] data = %s\n", __func__, extra); - - if (pwdinfo->p2p_state == P2P_STATE_NONE) { - DBG_88E("[%s] WiFi Direct is disable!\n", __func__); - return ret; - } else { - /* Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request. */ - memset(pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN); - memset(pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN); - memset(&pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof(struct ndis_802_11_ssid)); - pwdinfo->tx_prov_disc_info.peer_channel_num[0] = 0; - pwdinfo->tx_prov_disc_info.peer_channel_num[1] = 0; - pwdinfo->tx_prov_disc_info.benable = false; - } - - if (!mac_pton(extra, peerMAC)) - return -EINVAL; - - if (!memcmp(&extra[18], "display", 7)) { - pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA; - } else if (!memcmp(&extra[18], "keypad", 7)) { - pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD; - } else if (!memcmp(&extra[18], "pbc", 3)) { - pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON; - } else if (!memcmp(&extra[18], "label", 5)) { - pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL; - } else { - DBG_88E("[%s] Unknown WPS config methodn", __func__); - return ret; - } - - spin_lock_bh(&(pmlmepriv->scanned_queue.lock)); - - phead = get_list_head(queue); - plist = phead->next; - - while (phead != plist) { - - if (uintPeerChannel != 0) - break; - - pnetwork = container_of(plist, struct wlan_network, list); - - /* Commented by Albert 2011/05/18 */ - /* Match the device address located in the P2P IE */ - /* This is for the case that the P2P device address is not the same as the P2P interface address. */ - - p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen); - if (p2pie) { - while (p2pie) { - /* The P2P Device ID attribute is included in the Beacon frame. */ - /* The P2P Device Info attribute is included in the probe response frame. */ - - if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { - /* Handle the P2P Device ID attribute of Beacon first */ - if (!memcmp(attr_content, peerMAC, ETH_ALEN)) { - uintPeerChannel = pnetwork->network.Configuration.DSConfig; - break; - } - } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) { - /* Handle the P2P Device Info attribute of probe response */ - if (!memcmp(attr_content, peerMAC, ETH_ALEN)) { - uintPeerChannel = pnetwork->network.Configuration.DSConfig; - break; - } - } - - /* Get the next P2P IE */ - p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen); - } - } - - plist = plist->next; - } - - spin_unlock_bh(&pmlmepriv->scanned_queue.lock); - - if (uintPeerChannel) { - DBG_88E("[%s] peer channel: %d!\n", __func__, uintPeerChannel); - memcpy(pwdinfo->tx_prov_disc_info.peerIFAddr, pnetwork->network.MacAddress, ETH_ALEN); - memcpy(pwdinfo->tx_prov_disc_info.peerDevAddr, peerMAC, ETH_ALEN); - pwdinfo->tx_prov_disc_info.peer_channel_num[0] = (u16) uintPeerChannel; - pwdinfo->tx_prov_disc_info.benable = true; - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ); - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { - memcpy(&pwdinfo->tx_prov_disc_info.ssid, &pnetwork->network.Ssid, sizeof(struct ndis_802_11_ssid)); - } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - memcpy(pwdinfo->tx_prov_disc_info.ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN); - pwdinfo->tx_prov_disc_info.ssid.SsidLength = P2P_WILDCARD_SSID_LEN; - } - - set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - - _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT); - } else { - DBG_88E("[%s] NOT Found in the Scanning Queue!\n", __func__); - } - return ret; -} - -/* This function is used to inform the driver the user had specified the pin code value or pbc */ -/* to application. */ - -static int rtw_p2p_got_wpsinfo(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - DBG_88E("[%s] data = %s\n", __func__, extra); - /* Added by Albert 20110328 */ - /* if the input data is P2P_NO_WPSINFO -> reset the wpsinfo */ - /* if the input data is P2P_GOT_WPSINFO_PEER_DISPLAY_PIN -> the utility just input the PIN code got from the peer P2P device. */ - /* if the input data is P2P_GOT_WPSINFO_SELF_DISPLAY_PIN -> the utility just got the PIN code from itself. */ - /* if the input data is P2P_GOT_WPSINFO_PBC -> the utility just determine to use the PBC */ - - if (*extra == '0') - pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO; - else if (*extra == '1') - pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_PEER_DISPLAY_PIN; - else if (*extra == '2') - pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_SELF_DISPLAY_PIN; - else if (*extra == '3') - pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_PBC; - else - pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO; - return ret; -} - -#endif /* CONFIG_88EU_P2P */ - -static int rtw_p2p_set(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - -#ifdef CONFIG_88EU_P2P - DBG_88E("[%s] extra = %s\n", __func__, extra); - if (!memcmp(extra, "enable=", 7)) { - rtw_wext_p2p_enable(dev, info, wrqu, &extra[7]); - } else if (!memcmp(extra, "setDN=", 6)) { - wrqu->data.length -= 6; - rtw_p2p_setDN(dev, info, wrqu, &extra[6]); - } else if (!memcmp(extra, "profilefound=", 13)) { - wrqu->data.length -= 13; - rtw_p2p_profilefound(dev, info, wrqu, &extra[13]); - } else if (!memcmp(extra, "prov_disc=", 10)) { - wrqu->data.length -= 10; - rtw_p2p_prov_disc(dev, info, wrqu, &extra[10]); - } else if (!memcmp(extra, "nego=", 5)) { - wrqu->data.length -= 5; - rtw_p2p_connect(dev, info, wrqu, &extra[5]); - } else if (!memcmp(extra, "intent=", 7)) { - /* Commented by Albert 2011/03/23 */ - /* The wrqu->data.length will include the null character */ - /* So, we will decrease 7 + 1 */ - wrqu->data.length -= 8; - rtw_p2p_set_intent(dev, info, wrqu, &extra[7]); - } else if (!memcmp(extra, "ssid=", 5)) { - wrqu->data.length -= 5; - rtw_p2p_set_go_nego_ssid(dev, info, wrqu, &extra[5]); - } else if (!memcmp(extra, "got_wpsinfo=", 12)) { - wrqu->data.length -= 12; - rtw_p2p_got_wpsinfo(dev, info, wrqu, &extra[12]); - } else if (!memcmp(extra, "listen_ch=", 10)) { - /* Commented by Albert 2011/05/24 */ - /* The wrqu->data.length will include the null character */ - /* So, we will decrease (10 + 1) */ - wrqu->data.length -= 11; - rtw_p2p_set_listen_ch(dev, info, wrqu, &extra[10]); - } else if (!memcmp(extra, "op_ch=", 6)) { - /* Commented by Albert 2011/05/24 */ - /* The wrqu->data.length will include the null character */ - /* So, we will decrease (6 + 1) */ - wrqu->data.length -= 7; - rtw_p2p_set_op_ch(dev, info, wrqu, &extra[6]); - } else if (!memcmp(extra, "invite=", 7)) { - wrqu->data.length -= 8; - rtw_p2p_invite_req(dev, info, wrqu, &extra[7]); - } else if (!memcmp(extra, "persistent=", 11)) { - wrqu->data.length -= 11; - rtw_p2p_set_persistent(dev, info, wrqu, &extra[11]); - } -#endif /* CONFIG_88EU_P2P */ - - return ret; -} - -static int rtw_p2p_get(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - -#ifdef CONFIG_88EU_P2P - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - if (padapter->bShowGetP2PState) - DBG_88E("[%s] extra = %s\n", __func__, - (char __user *)wrqu->data.pointer); - if (!memcmp((__force const char *)wrqu->data.pointer, - "status", 6)) { - rtw_p2p_get_status(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "role", 4)) { - rtw_p2p_get_role(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "peer_ifa", 8)) { - rtw_p2p_get_peer_ifaddr(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "req_cm", 6)) { - rtw_p2p_get_req_cm(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "peer_deva", 9)) { - /* Get the P2P device address when receiving the provision discovery request frame. */ - rtw_p2p_get_peer_devaddr(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "group_id", 8)) { - rtw_p2p_get_groupid(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "peer_deva_inv", 13)) { - /* Get the P2P device address when receiving the P2P Invitation request frame. */ - rtw_p2p_get_peer_devaddr_by_invitation(dev, info, wrqu, extra); - } else if (!memcmp((__force const char *)wrqu->data.pointer, - "op_ch", 5)) { - rtw_p2p_get_op_ch(dev, info, wrqu, extra); - } -#endif /* CONFIG_88EU_P2P */ - return ret; -} - -static int rtw_p2p_get2(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - -#ifdef CONFIG_88EU_P2P - DBG_88E("[%s] extra = %s\n", __func__, - (char __user *)wrqu->data.pointer); - if (!memcmp(extra, "wpsCM =", 6)) { - wrqu->data.length -= 6; - rtw_p2p_get_wps_configmethod(dev, info, wrqu, &extra[6]); - } else if (!memcmp(extra, "devN =", 5)) { - wrqu->data.length -= 5; - rtw_p2p_get_device_name(dev, info, wrqu, &extra[5]); - } else if (!memcmp(extra, "dev_type =", 9)) { - wrqu->data.length -= 9; - rtw_p2p_get_device_type(dev, info, wrqu, &extra[9]); - } else if (!memcmp(extra, "go_devadd =", 10)) { - wrqu->data.length -= 10; - rtw_p2p_get_go_device_address(dev, info, wrqu, &extra[10]); - } else if (!memcmp(extra, "InvProc =", 8)) { - wrqu->data.length -= 8; - rtw_p2p_get_invitation_procedure(dev, info, wrqu, &extra[8]); - } - -#endif /* CONFIG_88EU_P2P */ - - return ret; -} - -static int rtw_cta_test_start(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - DBG_88E("%s %s\n", __func__, extra); - if (!strcmp(extra, "1")) - padapter->in_cta_test = 1; - else - padapter->in_cta_test = 0; - - if (padapter->in_cta_test) { - u32 v = usb_read32(padapter, REG_RCR); - v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */ - usb_write32(padapter, REG_RCR, v); - DBG_88E("enable RCR_ADF\n"); - } else { - u32 v = usb_read32(padapter, REG_RCR); - v |= RCR_CBSSID_DATA | RCR_CBSSID_BCN;/* RCR_ADF */ - usb_write32(padapter, REG_RCR, v); - DBG_88E("disable RCR_ADF\n"); - } - return ret; -} - -static int rtw_rereg_nd_name(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - struct adapter *padapter = rtw_netdev_priv(dev); - struct rereg_nd_name_data *rereg_priv = &padapter->rereg_nd_name_priv; - char new_ifname[IFNAMSIZ]; - - if (rereg_priv->old_ifname[0] == 0) { - char *reg_ifname; - reg_ifname = padapter->registrypriv.if2name; - - strncpy(rereg_priv->old_ifname, reg_ifname, IFNAMSIZ); - rereg_priv->old_ifname[IFNAMSIZ-1] = 0; - } - - if (wrqu->data.length > IFNAMSIZ) - return -EFAULT; - - if (copy_from_user(new_ifname, wrqu->data.pointer, IFNAMSIZ)) - return -EFAULT; - - if (0 == strcmp(rereg_priv->old_ifname, new_ifname)) - return ret; - - DBG_88E("%s new_ifname:%s\n", __func__, new_ifname); - ret = rtw_change_ifname(padapter, new_ifname); - if (0 != ret) - goto exit; - - if (!memcmp(rereg_priv->old_ifname, "disable%d", 9)) { - padapter->ledpriv.bRegUseLed = rereg_priv->old_bRegUseLed; - rtw_hal_sw_led_init(padapter); - rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode); - } - - strncpy(rereg_priv->old_ifname, new_ifname, IFNAMSIZ); - rereg_priv->old_ifname[IFNAMSIZ-1] = 0; - - if (!memcmp(new_ifname, "disable%d", 9)) { - DBG_88E("%s disable\n", __func__); - /* free network queue for Android's timming issue */ - rtw_free_network_queue(padapter, true); - - /* close led */ - rtw_led_control(padapter, LED_CTL_POWER_OFF); - rereg_priv->old_bRegUseLed = padapter->ledpriv.bRegUseLed; - padapter->ledpriv.bRegUseLed = false; - rtw_hal_sw_led_deinit(padapter); - - /* the interface is being "disabled", we can do deeper IPS */ - rereg_priv->old_ips_mode = rtw_get_ips_mode_req(&padapter->pwrctrlpriv); - rtw_ips_mode_req(&padapter->pwrctrlpriv, IPS_NORMAL); - } -exit: - return ret; -} - -static void mac_reg_dump(struct adapter *padapter) -{ - int i, j = 1; - pr_info("\n ======= MAC REG =======\n"); - for (i = 0x0; i < 0x300; i += 4) { - if (j%4 == 1) - pr_info("0x%02x", i); - pr_info(" 0x%08x ", usb_read32(padapter, i)); - if ((j++)%4 == 0) - pr_info("\n"); - } - for (i = 0x400; i < 0x800; i += 4) { - if (j%4 == 1) - pr_info("0x%02x", i); - pr_info(" 0x%08x ", usb_read32(padapter, i)); - if ((j++)%4 == 0) - pr_info("\n"); - } -} - -static void bb_reg_dump(struct adapter *padapter) -{ - int i, j = 1; - pr_info("\n ======= BB REG =======\n"); - for (i = 0x800; i < 0x1000; i += 4) { - if (j%4 == 1) - pr_info("0x%02x", i); - - pr_info(" 0x%08x ", usb_read32(padapter, i)); - if ((j++)%4 == 0) - pr_info("\n"); - } -} - -static void rf_reg_dump(struct adapter *padapter) -{ - int i, j = 1, path; - u32 value; - u8 rf_type, path_nums = 0; - rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type)); - - pr_info("\n ======= RF REG =======\n"); - if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) - path_nums = 1; - else - path_nums = 2; - - for (path = 0; path < path_nums; path++) { - pr_info("\nRF_Path(%x)\n", path); - for (i = 0; i < 0x100; i++) { - value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff); - if (j%4 == 1) - pr_info("0x%02x ", i); - pr_info(" 0x%08x ", value); - if ((j++)%4 == 0) - pr_info("\n"); - } - } -} - -static int rtw_dbg_port(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - u8 major_cmd, minor_cmd; - u16 arg; - s32 extra_arg; - u32 *pdata, val32; - struct sta_info *psta; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - struct security_priv *psecuritypriv = &padapter->securitypriv; - struct wlan_network *cur_network = &(pmlmepriv->cur_network); - struct sta_priv *pstapriv = &padapter->stapriv; - - pdata = (u32 *)&wrqu->data; - - val32 = *pdata; - arg = (u16)(val32 & 0x0000ffff); - major_cmd = (u8)(val32 >> 24); - minor_cmd = (u8)((val32 >> 16) & 0x00ff); - - extra_arg = *(pdata+1); - - switch (major_cmd) { - case 0x70:/* read_reg */ - switch (minor_cmd) { - case 1: - DBG_88E("usb_read8(0x%x) = 0x%02x\n", arg, usb_read8(padapter, arg)); - break; - case 2: - DBG_88E("usb_read16(0x%x) = 0x%04x\n", arg, usb_read16(padapter, arg)); - break; - case 4: - DBG_88E("usb_read32(0x%x) = 0x%08x\n", arg, usb_read32(padapter, arg)); - break; - } - break; - case 0x71:/* write_reg */ - switch (minor_cmd) { - case 1: - usb_write8(padapter, arg, extra_arg); - DBG_88E("usb_write8(0x%x) = 0x%02x\n", arg, usb_read8(padapter, arg)); - break; - case 2: - usb_write16(padapter, arg, extra_arg); - DBG_88E("usb_write16(0x%x) = 0x%04x\n", arg, usb_read16(padapter, arg)); - break; - case 4: - usb_write32(padapter, arg, extra_arg); - DBG_88E("usb_write32(0x%x) = 0x%08x\n", arg, usb_read32(padapter, arg)); - break; - } - break; - case 0x72:/* read_bb */ - DBG_88E("read_bbreg(0x%x) = 0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff)); - break; - case 0x73:/* write_bb */ - rtw_hal_write_bbreg(padapter, arg, 0xffffffff, extra_arg); - DBG_88E("write_bbreg(0x%x) = 0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff)); - break; - case 0x74:/* read_rf */ - DBG_88E("read RF_reg path(0x%02x), offset(0x%x), value(0x%08x)\n", minor_cmd, arg, rtw_hal_read_rfreg(padapter, minor_cmd, arg, 0xffffffff)); - break; - case 0x75:/* write_rf */ - rtw_hal_write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg); - DBG_88E("write RF_reg path(0x%02x), offset(0x%x), value(0x%08x)\n", minor_cmd, arg, rtw_hal_read_rfreg(padapter, minor_cmd, arg, 0xffffffff)); - break; - - case 0x76: - switch (minor_cmd) { - case 0x00: /* normal mode, */ - padapter->recvpriv.is_signal_dbg = 0; - break; - case 0x01: /* dbg mode */ - padapter->recvpriv.is_signal_dbg = 1; - extra_arg = extra_arg > 100 ? 100 : extra_arg; - extra_arg = extra_arg < 0 ? 0 : extra_arg; - padapter->recvpriv.signal_strength_dbg = extra_arg; - break; - } - break; - case 0x78: /* IOL test */ - switch (minor_cmd) { - case 0x04: /* LLT table initialization test */ - { - u8 page_boundary = 0xf9; - struct xmit_frame *xmit_frame; - - xmit_frame = rtw_IOL_accquire_xmit_frame(padapter); - if (xmit_frame == NULL) { - ret = -ENOMEM; - break; - } - - rtw_IOL_append_LLT_cmd(xmit_frame, page_boundary); - - if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 500, 0)) - ret = -EPERM; - } - break; - case 0x05: /* blink LED test */ - { - u16 reg = 0x4c; - u32 blink_num = 50; - u32 blink_delay_ms = 200; - int i; - struct xmit_frame *xmit_frame; - - xmit_frame = rtw_IOL_accquire_xmit_frame(padapter); - if (xmit_frame == NULL) { - ret = -ENOMEM; - break; - } - - for (i = 0; i < blink_num; i++) { - rtw_IOL_append_WB_cmd(xmit_frame, reg, 0x00, 0xff); - rtw_IOL_append_DELAY_MS_cmd(xmit_frame, blink_delay_ms); - rtw_IOL_append_WB_cmd(xmit_frame, reg, 0x08, 0xff); - rtw_IOL_append_DELAY_MS_cmd(xmit_frame, blink_delay_ms); - } - if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, (blink_delay_ms*blink_num*2)+200, 0)) - ret = -EPERM; - } - break; - - case 0x06: /* continuous write byte test */ - { - u16 reg = arg; - u16 start_value = 0; - u32 write_num = extra_arg; - int i; - u8 final; - struct xmit_frame *xmit_frame; - - xmit_frame = rtw_IOL_accquire_xmit_frame(padapter); - if (xmit_frame == NULL) { - ret = -ENOMEM; - break; - } - - for (i = 0; i < write_num; i++) - rtw_IOL_append_WB_cmd(xmit_frame, reg, i+start_value, 0xFF); - if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) - ret = -EPERM; - - final = usb_read8(padapter, reg); - if (start_value+write_num-1 == final) - DBG_88E("continuous IOL_CMD_WB_REG to 0x%x %u times Success, start:%u, final:%u\n", reg, write_num, start_value, final); - else - DBG_88E("continuous IOL_CMD_WB_REG to 0x%x %u times Fail, start:%u, final:%u\n", reg, write_num, start_value, final); - } - break; - - case 0x07: /* continuous write word test */ - { - u16 reg = arg; - u16 start_value = 200; - u32 write_num = extra_arg; - - int i; - u16 final; - struct xmit_frame *xmit_frame; - - xmit_frame = rtw_IOL_accquire_xmit_frame(padapter); - if (xmit_frame == NULL) { - ret = -ENOMEM; - break; - } - - for (i = 0; i < write_num; i++) - rtw_IOL_append_WW_cmd(xmit_frame, reg, i+start_value, 0xFFFF); - if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) - ret = -EPERM; - - final = usb_read16(padapter, reg); - if (start_value+write_num-1 == final) - DBG_88E("continuous IOL_CMD_WW_REG to 0x%x %u times Success, start:%u, final:%u\n", reg, write_num, start_value, final); - else - DBG_88E("continuous IOL_CMD_WW_REG to 0x%x %u times Fail, start:%u, final:%u\n", reg, write_num, start_value, final); - } - break; - case 0x08: /* continuous write dword test */ - { - u16 reg = arg; - u32 start_value = 0x110000c7; - u32 write_num = extra_arg; - - int i; - u32 final; - struct xmit_frame *xmit_frame; - - xmit_frame = rtw_IOL_accquire_xmit_frame(padapter); - if (xmit_frame == NULL) { - ret = -ENOMEM; - break; - } - - for (i = 0; i < write_num; i++) - rtw_IOL_append_WD_cmd(xmit_frame, reg, i+start_value, 0xFFFFFFFF); - if (_SUCCESS != rtw_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0)) - ret = -EPERM; - - final = usb_read32(padapter, reg); - if (start_value+write_num-1 == final) - DBG_88E("continuous IOL_CMD_WD_REG to 0x%x %u times Success, start:%u, final:%u\n", - reg, write_num, start_value, final); - else - DBG_88E("continuous IOL_CMD_WD_REG to 0x%x %u times Fail, start:%u, final:%u\n", - reg, write_num, start_value, final); - } - break; - } - break; - case 0x79: - { - /* - * dbg 0x79000000 [value], set RESP_TXAGC to + value, value:0~15 - * dbg 0x79010000 [value], set RESP_TXAGC to - value, value:0~15 - */ - u8 value = extra_arg & 0x0f; - u8 sign = minor_cmd; - u16 write_value = 0; - - DBG_88E("%s set RESP_TXAGC to %s %u\n", __func__, sign ? "minus" : "plus", value); - - if (sign) - value = value | 0x10; - - write_value = value | (value << 5); - usb_write16(padapter, 0x6d9, write_value); - } - break; - case 0x7a: - receive_disconnect(padapter, pmlmeinfo->network.MacAddress - , WLAN_REASON_EXPIRATION_CHK); - break; - case 0x7F: - switch (minor_cmd) { - case 0x0: - DBG_88E("fwstate = 0x%x\n", get_fwstate(pmlmepriv)); - break; - case 0x01: - DBG_88E("auth_alg = 0x%x, enc_alg = 0x%x, auth_type = 0x%x, enc_type = 0x%x\n", - psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, - psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus); - break; - case 0x02: - DBG_88E("pmlmeinfo->state = 0x%x\n", pmlmeinfo->state); - break; - case 0x03: - DBG_88E("qos_option =%d\n", pmlmepriv->qospriv.qos_option); - DBG_88E("ht_option =%d\n", pmlmepriv->htpriv.ht_option); - break; - case 0x04: - DBG_88E("cur_ch =%d\n", pmlmeext->cur_channel); - DBG_88E("cur_bw =%d\n", pmlmeext->cur_bwmode); - DBG_88E("cur_ch_off =%d\n", pmlmeext->cur_ch_offset); - break; - case 0x05: - psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress); - if (psta) { - int i; - struct recv_reorder_ctrl *preorder_ctrl; - - DBG_88E("SSID =%s\n", cur_network->network.Ssid.Ssid); - DBG_88E("sta's macaddr: %pM\n", psta->hwaddr); - DBG_88E("cur_channel =%d, cur_bwmode =%d, cur_ch_offset =%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset); - DBG_88E("rtsen =%d, cts2slef =%d\n", psta->rtsen, psta->cts2self); - DBG_88E("state = 0x%x, aid =%d, macid =%d, raid =%d\n", psta->state, psta->aid, psta->mac_id, psta->raid); - DBG_88E("qos_en =%d, ht_en =%d, init_rate =%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate); - DBG_88E("bwmode =%d, ch_offset =%d, sgi =%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi); - DBG_88E("ampdu_enable = %d\n", psta->htpriv.ampdu_enable); - DBG_88E("agg_enable_bitmap =%x, candidate_tid_bitmap =%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap); - for (i = 0; i < 16; i++) { - preorder_ctrl = &psta->recvreorder_ctrl[i]; - if (preorder_ctrl->enable) - DBG_88E("tid =%d, indicate_seq =%d\n", i, preorder_ctrl->indicate_seq); - } - } else { - DBG_88E("can't get sta's macaddr, cur_network's macaddr:%pM\n", (cur_network->network.MacAddress)); - } - break; - case 0x06: - { - u32 ODMFlag; - rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&ODMFlag)); - DBG_88E("(B)DMFlag = 0x%x, arg = 0x%x\n", ODMFlag, arg); - ODMFlag = (u32)(0x0f&arg); - DBG_88E("(A)DMFlag = 0x%x\n", ODMFlag); - rtw_hal_set_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&ODMFlag)); - } - break; - case 0x07: - DBG_88E("bSurpriseRemoved =%d, bDriverStopped =%d\n", - padapter->bSurpriseRemoved, padapter->bDriverStopped); - break; - case 0x08: - { - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct recv_priv *precvpriv = &padapter->recvpriv; - - DBG_88E("free_xmitbuf_cnt =%d, free_xmitframe_cnt =%d, free_xmit_extbuf_cnt =%d\n", - pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt, pxmitpriv->free_xmit_extbuf_cnt); - DBG_88E("rx_urb_pending_cn =%d\n", precvpriv->rx_pending_cnt); - } - break; - case 0x09: - { - int i, j; - struct list_head *plist, *phead; - struct recv_reorder_ctrl *preorder_ctrl; - -#ifdef CONFIG_88EU_AP_MODE - DBG_88E("sta_dz_bitmap = 0x%x, tim_bitmap = 0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap); -#endif - spin_lock_bh(&pstapriv->sta_hash_lock); - - for (i = 0; i < NUM_STA; i++) { - phead = &(pstapriv->sta_hash[i]); - plist = phead->next; - - while (phead != plist) { - psta = container_of(plist, struct sta_info, hash_list); - - plist = plist->next; - - if (extra_arg == psta->aid) { - DBG_88E("sta's macaddr:%pM\n", (psta->hwaddr)); - DBG_88E("rtsen =%d, cts2slef =%d\n", psta->rtsen, psta->cts2self); - DBG_88E("state = 0x%x, aid =%d, macid =%d, raid =%d\n", psta->state, psta->aid, psta->mac_id, psta->raid); - DBG_88E("qos_en =%d, ht_en =%d, init_rate =%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate); - DBG_88E("bwmode =%d, ch_offset =%d, sgi =%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi); - DBG_88E("ampdu_enable = %d\n", psta->htpriv.ampdu_enable); - DBG_88E("agg_enable_bitmap =%x, candidate_tid_bitmap =%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap); - -#ifdef CONFIG_88EU_AP_MODE - DBG_88E("capability = 0x%x\n", psta->capability); - DBG_88E("flags = 0x%x\n", psta->flags); - DBG_88E("wpa_psk = 0x%x\n", psta->wpa_psk); - DBG_88E("wpa2_group_cipher = 0x%x\n", psta->wpa2_group_cipher); - DBG_88E("wpa2_pairwise_cipher = 0x%x\n", psta->wpa2_pairwise_cipher); - DBG_88E("qos_info = 0x%x\n", psta->qos_info); -#endif - DBG_88E("dot118021XPrivacy = 0x%x\n", psta->dot118021XPrivacy); - - for (j = 0; j < 16; j++) { - preorder_ctrl = &psta->recvreorder_ctrl[j]; - if (preorder_ctrl->enable) - DBG_88E("tid =%d, indicate_seq =%d\n", j, preorder_ctrl->indicate_seq); - } - } - } - } - spin_unlock_bh(&pstapriv->sta_hash_lock); - } - break; - case 0x0c:/* dump rx/tx packet */ - if (arg == 0) { - DBG_88E("dump rx packet (%d)\n", extra_arg); - rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg)); - } else if (arg == 1) { - DBG_88E("dump tx packet (%d)\n", extra_arg); - rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_TXPKT, &(extra_arg)); - } - break; - case 0x0f: - break; - case 0x15: - { - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - DBG_88E("==>silent resete cnts:%d\n", pwrpriv->ips_enter_cnts); - } - break; - case 0x10:/* driver version display */ - DBG_88E("rtw driver version =%s\n", DRIVERVERSION); - break; - case 0x11: - DBG_88E("turn %s Rx RSSI display function\n", (extra_arg == 1) ? "on" : "off"); - padapter->bRxRSSIDisplay = extra_arg; - rtw_hal_set_def_var(padapter, HW_DEF_FA_CNT_DUMP, &extra_arg); - break; - case 0x12: /* set rx_stbc */ - { - struct registry_priv *pregpriv = &padapter->registrypriv; - /* 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, 0x3: enable both 2.4g and 5g */ - /* default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */ - if (!pregpriv) - break; - if (extra_arg >= 0 && extra_arg <= 3) { - pregpriv->rx_stbc = extra_arg; - DBG_88E("set rx_stbc =%d\n", pregpriv->rx_stbc); - } else { - DBG_88E("get rx_stbc =%d\n", pregpriv->rx_stbc); - } - } - break; - case 0x13: /* set ampdu_enable */ - { - struct registry_priv *pregpriv = &padapter->registrypriv; - /* 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec) */ - if (!pregpriv) - break; - if (extra_arg >= 0 && extra_arg < 3) { - pregpriv->ampdu_enable = extra_arg; - DBG_88E("set ampdu_enable =%d\n", pregpriv->ampdu_enable); - } else { - DBG_88E("get ampdu_enable =%d\n", pregpriv->ampdu_enable); - } - } - break; - case 0x14: /* get wifi_spec */ - { - struct registry_priv *pregpriv = &padapter->registrypriv; - DBG_88E("get wifi_spec =%d\n", pregpriv->wifi_spec); - } - break; - case 0x16: - if (arg == 0xff) { - pr_info("ODM_COMP_DIG\t\tBIT0\n"); - pr_info("ODM_COMP_RA_MASK\t\tBIT1\n"); - pr_info("ODM_COMP_DYNAMIC_TXPWR\tBIT2\n"); - pr_info("ODM_COMP_FA_CNT\t\tBIT3\n"); - pr_info("ODM_COMP_RSSI_MONITOR\tBIT4\n"); - pr_info("ODM_COMP_CCK_PD\t\tBIT5\n"); - pr_info("ODM_COMP_ANT_DIV\t\tBIT6\n"); - pr_info("ODM_COMP_PWR_SAVE\t\tBIT7\n"); - pr_info("ODM_COMP_PWR_TRAIN\tBIT8\n"); - pr_info("ODM_COMP_RATE_ADAPTIVE\tBIT9\n"); - pr_info("ODM_COMP_PATH_DIV\t\tBIT10\n"); - pr_info("ODM_COMP_PSD \tBIT11\n"); - pr_info("ODM_COMP_DYNAMIC_PRICCA\tBIT12\n"); - pr_info("ODM_COMP_RXHP\t\tBIT13\n"); - pr_info("ODM_COMP_EDCA_TURBO\tBIT16\n"); - pr_info("ODM_COMP_EARLY_MODE\tBIT17\n"); - pr_info("ODM_COMP_TX_PWR_TRACK\tBIT24\n"); - pr_info("ODM_COMP_RX_GAIN_TRACK\tBIT25\n"); - pr_info("ODM_COMP_CALIBRATION\tBIT26\n"); - rtw_hal_get_def_var(padapter, HW_DEF_ODM_DBG_FLAG, &extra_arg); - } else { - rtw_hal_set_def_var(padapter, HW_DEF_ODM_DBG_FLAG, &extra_arg); - } - break; - case 0x23: - DBG_88E("turn %s the bNotifyChannelChange Variable\n", (extra_arg == 1) ? "on" : "off"); - padapter->bNotifyChannelChange = extra_arg; - break; - case 0x24: -#ifdef CONFIG_88EU_P2P - DBG_88E("turn %s the bShowGetP2PState Variable\n", (extra_arg == 1) ? "on" : "off"); - padapter->bShowGetP2PState = extra_arg; -#endif /* CONFIG_88EU_P2P */ - break; - case 0xaa: - if (extra_arg > 0x13) - extra_arg = 0xFF; - DBG_88E("chang data rate to :0x%02x\n", extra_arg); - padapter->fix_rate = extra_arg; - break; - case 0xdd:/* registers dump, 0 for mac reg, 1 for bb reg, 2 for rf reg */ - if (extra_arg == 0) - mac_reg_dump(padapter); - else if (extra_arg == 1) - bb_reg_dump(padapter); - else if (extra_arg == 2) - rf_reg_dump(padapter); - break; - case 0xee:/* turn on/off dynamic funcs */ - { - u32 odm_flag; - - if (0xf == extra_arg) { - rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &odm_flag); - DBG_88E(" === DMFlag(0x%08x) ===\n", odm_flag); - DBG_88E("extra_arg = 0 - disable all dynamic func\n"); - DBG_88E("extra_arg = 1 - disable DIG- BIT(0)\n"); - DBG_88E("extra_arg = 2 - disable High power - BIT(1)\n"); - DBG_88E("extra_arg = 3 - disable tx power tracking - BIT(2)\n"); - DBG_88E("extra_arg = 4 - disable BT coexistence - BIT(3)\n"); - DBG_88E("extra_arg = 5 - disable antenna diversity - BIT(4)\n"); - DBG_88E("extra_arg = 6 - enable all dynamic func\n"); - } else { - /* extra_arg = 0 - disable all dynamic func - extra_arg = 1 - disable DIG - extra_arg = 2 - disable tx power tracking - extra_arg = 3 - turn on all dynamic func - */ - rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg)); - rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &odm_flag); - DBG_88E(" === DMFlag(0x%08x) ===\n", odm_flag); - } - } - break; - - case 0xfd: - usb_write8(padapter, 0xc50, arg); - DBG_88E("wr(0xc50) = 0x%x\n", usb_read8(padapter, 0xc50)); - usb_write8(padapter, 0xc58, arg); - DBG_88E("wr(0xc58) = 0x%x\n", usb_read8(padapter, 0xc58)); - break; - case 0xfe: - DBG_88E("rd(0xc50) = 0x%x\n", usb_read8(padapter, 0xc50)); - DBG_88E("rd(0xc58) = 0x%x\n", usb_read8(padapter, 0xc58)); - break; - case 0xff: - DBG_88E("dbg(0x210) = 0x%x\n", usb_read32(padapter, 0x210)); - DBG_88E("dbg(0x608) = 0x%x\n", usb_read32(padapter, 0x608)); - DBG_88E("dbg(0x280) = 0x%x\n", usb_read32(padapter, 0x280)); - DBG_88E("dbg(0x284) = 0x%x\n", usb_read32(padapter, 0x284)); - DBG_88E("dbg(0x288) = 0x%x\n", usb_read32(padapter, 0x288)); - - DBG_88E("dbg(0x664) = 0x%x\n", usb_read32(padapter, 0x664)); - - DBG_88E("\n"); - - DBG_88E("dbg(0x430) = 0x%x\n", usb_read32(padapter, 0x430)); - DBG_88E("dbg(0x438) = 0x%x\n", usb_read32(padapter, 0x438)); - - DBG_88E("dbg(0x440) = 0x%x\n", usb_read32(padapter, 0x440)); - - DBG_88E("dbg(0x458) = 0x%x\n", usb_read32(padapter, 0x458)); - - DBG_88E("dbg(0x484) = 0x%x\n", usb_read32(padapter, 0x484)); - DBG_88E("dbg(0x488) = 0x%x\n", usb_read32(padapter, 0x488)); - - DBG_88E("dbg(0x444) = 0x%x\n", usb_read32(padapter, 0x444)); - DBG_88E("dbg(0x448) = 0x%x\n", usb_read32(padapter, 0x448)); - DBG_88E("dbg(0x44c) = 0x%x\n", usb_read32(padapter, 0x44c)); - DBG_88E("dbg(0x450) = 0x%x\n", usb_read32(padapter, 0x450)); - break; - } - break; - default: - DBG_88E("error dbg cmd!\n"); - break; - } - return ret; -} - -static int wpa_set_param(struct net_device *dev, u8 name, u32 value) -{ - uint ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - switch (name) { - case IEEE_PARAM_WPA_ENABLED: - padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_8021X; /* 802.1x */ - switch ((value)&0xff) { - case 1: /* WPA */ - padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPAPSK; /* WPA_PSK */ - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled; - break; - case 2: /* WPA2 */ - padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPA2PSK; /* WPA2_PSK */ - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled; - break; - } - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, - ("wpa_set_param:padapter->securitypriv.ndisauthtype =%d\n", padapter->securitypriv.ndisauthtype)); - break; - case IEEE_PARAM_TKIP_COUNTERMEASURES: - break; - case IEEE_PARAM_DROP_UNENCRYPTED: { - /* HACK: - * - * wpa_supplicant calls set_wpa_enabled when the driver - * is loaded and unloaded, regardless of if WPA is being - * used. No other calls are made which can be used to - * determine if encryption will be used or not prior to - * association being expected. If encryption is not being - * used, drop_unencrypted is set to false, else true -- we - * can use this to determine if the CAP_PRIVACY_ON bit should - * be set. - */ - - break; - } - case IEEE_PARAM_PRIVACY_INVOKED: - break; - - case IEEE_PARAM_AUTH_ALGS: - ret = wpa_set_auth_algs(dev, value); - break; - case IEEE_PARAM_IEEE_802_1X: - break; - case IEEE_PARAM_WPAX_SELECT: - break; - default: - ret = -EOPNOTSUPP; - break; - } - return ret; -} - -static int wpa_mlme(struct net_device *dev, u32 command, u32 reason) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - switch (command) { - case IEEE_MLME_STA_DEAUTH: - if (!rtw_set_802_11_disassociate(padapter)) - ret = -1; - break; - case IEEE_MLME_STA_DISASSOC: - if (!rtw_set_802_11_disassociate(padapter)) - ret = -1; - break; - default: - ret = -EOPNOTSUPP; - break; - } - - return ret; -} - -static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p) -{ - struct ieee_param *param; - uint ret = 0; - - if (p->length < sizeof(struct ieee_param) || !p->pointer) { - ret = -EINVAL; - goto out; - } - - param = (struct ieee_param *)rtw_malloc(p->length); - if (param == NULL) { - ret = -ENOMEM; - goto out; - } - - if (copy_from_user(param, p->pointer, p->length)) { - kfree(param); - ret = -EFAULT; - goto out; - } - - switch (param->cmd) { - case IEEE_CMD_SET_WPA_PARAM: - ret = wpa_set_param(dev, param->u.wpa_param.name, param->u.wpa_param.value); - break; - - case IEEE_CMD_SET_WPA_IE: - ret = rtw_set_wpa_ie((struct adapter *)rtw_netdev_priv(dev), - (char *)param->u.wpa_ie.data, (u16)param->u.wpa_ie.len); - break; - - case IEEE_CMD_SET_ENCRYPTION: - ret = wpa_set_encryption(dev, param, p->length); - break; - - case IEEE_CMD_MLME: - ret = wpa_mlme(dev, param->u.mlme.command, param->u.mlme.reason_code); - break; - - default: - DBG_88E("Unknown WPA supplicant request: %d\n", param->cmd); - ret = -EOPNOTSUPP; - break; - } - - if (ret == 0 && copy_to_user(p->pointer, param, p->length)) - ret = -EFAULT; - - kfree(param); - -out: - - return ret; -} - -#ifdef CONFIG_88EU_AP_MODE -static u8 set_pairwise_key(struct adapter *padapter, struct sta_info *psta) -{ - struct cmd_obj *ph2c; - struct set_stakey_parm *psetstakey_para; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL); - if (psetstakey_para == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_); - - psetstakey_para->algorithm = (u8)psta->dot118021XPrivacy; - - memcpy(psetstakey_para->addr, psta->hwaddr, ETH_ALEN); - - memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - return res; -} - -static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) -{ - u8 keylen; - struct cmd_obj *pcmd; - struct setkey_parm *psetkeyparm; - struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - int res = _SUCCESS; - - DBG_88E("%s\n", __func__); - - pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (pcmd == NULL) { - res = _FAIL; - goto exit; - } - psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL); - if (psetkeyparm == NULL) { - kfree(pcmd); - res = _FAIL; - goto exit; - } - - memset(psetkeyparm, 0, sizeof(struct setkey_parm)); - - psetkeyparm->keyid = (u8)keyid; - - psetkeyparm->algorithm = alg; - - psetkeyparm->set_tx = 1; - - switch (alg) { - case _WEP40_: - keylen = 5; - break; - case _WEP104_: - keylen = 13; - break; - case _TKIP_: - case _TKIP_WTMIC_: - case _AES_: - default: - keylen = 16; - } - - memcpy(&(psetkeyparm->key[0]), key, keylen); - - pcmd->cmdcode = _SetKey_CMD_; - pcmd->parmbuf = (u8 *)psetkeyparm; - pcmd->cmdsz = (sizeof(struct setkey_parm)); - pcmd->rsp = NULL; - pcmd->rspsz = 0; - - INIT_LIST_HEAD(&pcmd->list); - - res = rtw_enqueue_cmd(pcmdpriv, pcmd); - -exit: - - return res; -} - -static int set_wep_key(struct adapter *padapter, u8 *key, u8 keylen, int keyid) -{ - u8 alg; - - switch (keylen) { - case 5: - alg = _WEP40_; - break; - case 13: - alg = _WEP104_; - break; - default: - alg = _NO_PRIVACY_; - } - - return set_group_key(padapter, key, alg, keyid); -} - -static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len) -{ - int ret = 0; - u32 wep_key_idx, wep_key_len, wep_total_len; - struct ndis_802_11_wep *pwep = NULL; - struct sta_info *psta = NULL, *pbcmc_sta = NULL; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct security_priv *psecuritypriv = &(padapter->securitypriv); - struct sta_priv *pstapriv = &padapter->stapriv; - - DBG_88E("%s\n", __func__); - param->u.crypt.err = 0; - param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; - if (param_len != sizeof(struct ieee_param) + param->u.crypt.key_len) { - ret = -EINVAL; - goto exit; - } - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) { - if (param->u.crypt.idx >= WEP_KEYS) { - ret = -EINVAL; - goto exit; - } - } else { - psta = rtw_get_stainfo(pstapriv, param->sta_addr); - if (!psta) { - DBG_88E("rtw_set_encryption(), sta has already been removed or never been added\n"); - goto exit; - } - } - - if (strcmp(param->u.crypt.alg, "none") == 0 && (psta == NULL)) { - /* todo:clear default encryption keys */ - - DBG_88E("clear default encryption keys, keyid =%d\n", param->u.crypt.idx); - goto exit; - } - if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta == NULL)) { - DBG_88E("r871x_set_encryption, crypt.alg = WEP\n"); - wep_key_idx = param->u.crypt.idx; - wep_key_len = param->u.crypt.key_len; - DBG_88E("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len); - if ((wep_key_idx >= WEP_KEYS) || (wep_key_len <= 0)) { - ret = -EINVAL; - goto exit; - } - - if (wep_key_len > 0) { - wep_key_len = wep_key_len <= 5 ? 5 : 13; - wep_total_len = wep_key_len + FIELD_OFFSET(struct ndis_802_11_wep, KeyMaterial); - pwep = (struct ndis_802_11_wep *)rtw_malloc(wep_total_len); - if (pwep == NULL) { - DBG_88E(" r871x_set_encryption: pwep allocate fail !!!\n"); - goto exit; - } - - memset(pwep, 0, wep_total_len); - - pwep->KeyLength = wep_key_len; - pwep->Length = wep_total_len; - } - - pwep->KeyIndex = wep_key_idx; - - memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength); - - if (param->u.crypt.set_tx) { - DBG_88E("wep, set_tx = 1\n"); - - psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled; - psecuritypriv->dot11PrivacyAlgrthm = _WEP40_; - psecuritypriv->dot118021XGrpPrivacy = _WEP40_; - - if (pwep->KeyLength == 13) { - psecuritypriv->dot11PrivacyAlgrthm = _WEP104_; - psecuritypriv->dot118021XGrpPrivacy = _WEP104_; - } - - psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx; - - memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength); - - psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength; - - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx); - } else { - DBG_88E("wep, set_tx = 0\n"); - - /* don't update "psecuritypriv->dot11PrivacyAlgrthm" and */ - /* psecuritypriv->dot11PrivacyKeyIndex = keyid", but can rtw_set_key to cam */ - - memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength); - - psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength; - - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx); - } - - goto exit; - } - - if (!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) { /* group key */ - if (param->u.crypt.set_tx == 1) { - if (strcmp(param->u.crypt.alg, "WEP") == 0) { - DBG_88E("%s, set group_key, WEP\n", __func__); - - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - - psecuritypriv->dot118021XGrpPrivacy = _WEP40_; - if (param->u.crypt.key_len == 13) - psecuritypriv->dot118021XGrpPrivacy = _WEP104_; - } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { - DBG_88E("%s, set group_key, TKIP\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = _TKIP_; - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - /* set mic key */ - memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8); - memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8); - - psecuritypriv->busetkipkey = true; - } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { - DBG_88E("%s, set group_key, CCMP\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = _AES_; - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - } else { - DBG_88E("%s, set group_key, none\n", __func__); - psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_; - } - psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; - psecuritypriv->binstallGrpkey = true; - psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;/* */ - set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx); - pbcmc_sta = rtw_get_bcmc_stainfo(padapter); - if (pbcmc_sta) { - pbcmc_sta->ieee8021x_blocked = false; - pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */ - } - } - goto exit; - } - - if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) { /* psk/802_1x */ - if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { - if (param->u.crypt.set_tx == 1) { - memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - - if (strcmp(param->u.crypt.alg, "WEP") == 0) { - DBG_88E("%s, set pairwise key, WEP\n", __func__); - - psta->dot118021XPrivacy = _WEP40_; - if (param->u.crypt.key_len == 13) - psta->dot118021XPrivacy = _WEP104_; - } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { - DBG_88E("%s, set pairwise key, TKIP\n", __func__); - - psta->dot118021XPrivacy = _TKIP_; - - /* set mic key */ - memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8); - memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8); - - psecuritypriv->busetkipkey = true; - } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { - DBG_88E("%s, set pairwise key, CCMP\n", __func__); - - psta->dot118021XPrivacy = _AES_; - } else { - DBG_88E("%s, set pairwise key, none\n", __func__); - - psta->dot118021XPrivacy = _NO_PRIVACY_; - } - - set_pairwise_key(padapter, psta); - - psta->ieee8021x_blocked = false; - } else { /* group key??? */ - if (strcmp(param->u.crypt.alg, "WEP") == 0) { - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - psecuritypriv->dot118021XGrpPrivacy = _WEP40_; - if (param->u.crypt.key_len == 13) - psecuritypriv->dot118021XGrpPrivacy = _WEP104_; - } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { - psecuritypriv->dot118021XGrpPrivacy = _TKIP_; - - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - - /* set mic key */ - memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8); - memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8); - - psecuritypriv->busetkipkey = true; - } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { - psecuritypriv->dot118021XGrpPrivacy = _AES_; - - memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, - param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - } else { - psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_; - } - - psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; - - psecuritypriv->binstallGrpkey = true; - - psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;/* */ - - set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx); - - pbcmc_sta = rtw_get_bcmc_stainfo(padapter); - if (pbcmc_sta) { - pbcmc_sta->ieee8021x_blocked = false; - pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */ - } - } - } - } - -exit: - - kfree(pwep); - - return ret; -} - -static int rtw_set_beacon(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct sta_priv *pstapriv = &padapter->stapriv; - unsigned char *pbuf = param->u.bcn_ie.buf; - - DBG_88E("%s, len =%d\n", __func__, len); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2); - - if ((pstapriv->max_num_sta > NUM_STA) || (pstapriv->max_num_sta <= 0)) - pstapriv->max_num_sta = NUM_STA; - - if (rtw_check_beacon_data(padapter, pbuf, (len-12-2)) == _SUCCESS)/* 12 = param header, 2:no packed */ - ret = 0; - else - ret = -EINVAL; - - return ret; -} - -static int rtw_hostapd_sta_flush(struct net_device *dev) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - DBG_88E("%s\n", __func__); - - flush_all_cam_entry(padapter); /* clear CAM */ - - ret = rtw_sta_flush(padapter); - - return ret; -} - -static int rtw_add_sta(struct net_device *dev, struct ieee_param *param) -{ - int ret = 0; - struct sta_info *psta = NULL; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct sta_priv *pstapriv = &padapter->stapriv; - - DBG_88E("rtw_add_sta(aid =%d) =%pM\n", param->u.add_sta.aid, (param->sta_addr)); - - if (!check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE))) - return -EINVAL; - - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) - return -EINVAL; - - psta = rtw_get_stainfo(pstapriv, param->sta_addr); - if (psta) { - int flags = param->u.add_sta.flags; - - psta->aid = param->u.add_sta.aid;/* aid = 1~2007 */ - - memcpy(psta->bssrateset, param->u.add_sta.tx_supp_rates, 16); - - /* check wmm cap. */ - if (WLAN_STA_WME&flags) - psta->qos_option = 1; - else - psta->qos_option = 0; - - if (pmlmepriv->qospriv.qos_option == 0) - psta->qos_option = 0; - - /* chec 802.11n ht cap. */ - if (WLAN_STA_HT&flags) { - psta->htpriv.ht_option = true; - psta->qos_option = 1; - memcpy((void *)&psta->htpriv.ht_cap, (void *)¶m->u.add_sta.ht_cap, sizeof(struct rtw_ieee80211_ht_cap)); - } else { - psta->htpriv.ht_option = false; - } - - if (pmlmepriv->htpriv.ht_option == false) - psta->htpriv.ht_option = false; - - update_sta_info_apmode(padapter, psta); - } else { - ret = -ENOMEM; - } - - return ret; -} - -static int rtw_del_sta(struct net_device *dev, struct ieee_param *param) -{ - int ret = 0; - struct sta_info *psta = NULL; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct sta_priv *pstapriv = &padapter->stapriv; - int updated = 0; - - DBG_88E("rtw_del_sta =%pM\n", (param->sta_addr)); - - if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) - return -EINVAL; - - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) - return -EINVAL; - - psta = rtw_get_stainfo(pstapriv, param->sta_addr); - if (psta) { - spin_lock_bh(&pstapriv->asoc_list_lock); - if (!list_empty(&psta->asoc_list)) { - list_del_init(&psta->asoc_list); - pstapriv->asoc_list_cnt--; - updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); - } - spin_unlock_bh(&pstapriv->asoc_list_lock); - associated_clients_update(padapter, updated); - psta = NULL; - } else { - DBG_88E("rtw_del_sta(), sta has already been removed or never been added\n"); - } - - return ret; -} - -static int rtw_ioctl_get_sta_data(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct sta_info *psta = NULL; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct sta_priv *pstapriv = &padapter->stapriv; - struct ieee_param_ex *param_ex = (struct ieee_param_ex *)param; - struct sta_data *psta_data = (struct sta_data *)param_ex->data; - - DBG_88E("rtw_ioctl_get_sta_info, sta_addr: %pM\n", (param_ex->sta_addr)); - - if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) - return -EINVAL; - - if (param_ex->sta_addr[0] == 0xff && param_ex->sta_addr[1] == 0xff && - param_ex->sta_addr[2] == 0xff && param_ex->sta_addr[3] == 0xff && - param_ex->sta_addr[4] == 0xff && param_ex->sta_addr[5] == 0xff) - return -EINVAL; - - psta = rtw_get_stainfo(pstapriv, param_ex->sta_addr); - if (psta) { - psta_data->aid = (u16)psta->aid; - psta_data->capability = psta->capability; - psta_data->flags = psta->flags; - -/* - nonerp_set : BIT(0) - no_short_slot_time_set : BIT(1) - no_short_preamble_set : BIT(2) - no_ht_gf_set : BIT(3) - no_ht_set : BIT(4) - ht_20mhz_set : BIT(5) -*/ - - psta_data->sta_set = ((psta->nonerp_set) | - (psta->no_short_slot_time_set << 1) | - (psta->no_short_preamble_set << 2) | - (psta->no_ht_gf_set << 3) | - (psta->no_ht_set << 4) | - (psta->ht_20mhz_set << 5)); - psta_data->tx_supp_rates_len = psta->bssratelen; - memcpy(psta_data->tx_supp_rates, psta->bssrateset, psta->bssratelen); - memcpy(&psta_data->ht_cap, &psta->htpriv.ht_cap, sizeof(struct rtw_ieee80211_ht_cap)); - psta_data->rx_pkts = psta->sta_stats.rx_data_pkts; - psta_data->rx_bytes = psta->sta_stats.rx_bytes; - psta_data->rx_drops = psta->sta_stats.rx_drops; - psta_data->tx_pkts = psta->sta_stats.tx_pkts; - psta_data->tx_bytes = psta->sta_stats.tx_bytes; - psta_data->tx_drops = psta->sta_stats.tx_drops; - } else { - ret = -1; - } - - return ret; -} - -static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param) -{ - int ret = 0; - struct sta_info *psta = NULL; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct sta_priv *pstapriv = &padapter->stapriv; - - DBG_88E("rtw_get_sta_wpaie, sta_addr: %pM\n", (param->sta_addr)); - - if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) - return -EINVAL; - - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) - return -EINVAL; - - psta = rtw_get_stainfo(pstapriv, param->sta_addr); - if (psta) { - if ((psta->wpa_ie[0] == WLAN_EID_RSN) || (psta->wpa_ie[0] == WLAN_EID_GENERIC)) { - int wpa_ie_len; - int copy_len; - - wpa_ie_len = psta->wpa_ie[1]; - copy_len = ((wpa_ie_len+2) > sizeof(psta->wpa_ie)) ? (sizeof(psta->wpa_ie)) : (wpa_ie_len+2); - param->u.wpa_ie.len = copy_len; - memcpy(param->u.wpa_ie.reserved, psta->wpa_ie, copy_len); - } else { - DBG_88E("sta's wpa_ie is NONE\n"); - } - } else { - ret = -1; - } - - return ret; -} - -static int rtw_set_wps_beacon(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - unsigned char wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - int ie_len; - - DBG_88E("%s, len =%d\n", __func__, len); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - ie_len = len-12-2;/* 12 = param header, 2:no packed */ - - if (pmlmepriv->wps_beacon_ie) { - kfree(pmlmepriv->wps_beacon_ie); - pmlmepriv->wps_beacon_ie = NULL; - } - - if (ie_len > 0) { - pmlmepriv->wps_beacon_ie = rtw_malloc(ie_len); - pmlmepriv->wps_beacon_ie_len = ie_len; - if (pmlmepriv->wps_beacon_ie == NULL) { - DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); - return -EINVAL; - } - - memcpy(pmlmepriv->wps_beacon_ie, param->u.bcn_ie.buf, ie_len); - - update_beacon(padapter, _VENDOR_SPECIFIC_IE_, wps_oui, true); - - pmlmeext->bstart_bss = true; - } - - return ret; -} - -static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - int ie_len; - - DBG_88E("%s, len =%d\n", __func__, len); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - ie_len = len-12-2;/* 12 = param header, 2:no packed */ - - if (pmlmepriv->wps_probe_resp_ie) { - kfree(pmlmepriv->wps_probe_resp_ie); - pmlmepriv->wps_probe_resp_ie = NULL; - } - - if (ie_len > 0) { - pmlmepriv->wps_probe_resp_ie = rtw_malloc(ie_len); - pmlmepriv->wps_probe_resp_ie_len = ie_len; - if (pmlmepriv->wps_probe_resp_ie == NULL) { - DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); - return -EINVAL; - } - memcpy(pmlmepriv->wps_probe_resp_ie, param->u.bcn_ie.buf, ie_len); - } - - return ret; -} - -static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - int ie_len; - - DBG_88E("%s, len =%d\n", __func__, len); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - ie_len = len-12-2;/* 12 = param header, 2:no packed */ - - if (pmlmepriv->wps_assoc_resp_ie) { - kfree(pmlmepriv->wps_assoc_resp_ie); - pmlmepriv->wps_assoc_resp_ie = NULL; - } - - if (ie_len > 0) { - pmlmepriv->wps_assoc_resp_ie = rtw_malloc(ie_len); - pmlmepriv->wps_assoc_resp_ie_len = ie_len; - if (pmlmepriv->wps_assoc_resp_ie == NULL) { - DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); - return -EINVAL; - } - - memcpy(pmlmepriv->wps_assoc_resp_ie, param->u.bcn_ie.buf, ie_len); - } - - return ret; -} - -static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - - u8 value; - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - if (param->u.wpa_param.name != 0) /* dummy test... */ - DBG_88E("%s name(%u) != 0\n", __func__, param->u.wpa_param.name); - value = param->u.wpa_param.value; - - /* use the same definition of hostapd's ignore_broadcast_ssid */ - if (value != 1 && value != 2) - value = 0; - DBG_88E("%s value(%u)\n", __func__, value); - pmlmeinfo->hidden_ssid_mode = value; - return ret; -} - -static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) - return -EINVAL; - ret = rtw_acl_remove_sta(padapter, param->sta_addr); - return ret; -} - -static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) - return -EINVAL; - ret = rtw_acl_add_sta(padapter, param->sta_addr); - return ret; -} - -static int rtw_ioctl_set_macaddr_acl(struct net_device *dev, struct ieee_param *param, int len) -{ - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - - if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) - return -EINVAL; - - rtw_set_macaddr_acl(padapter, param->u.mlme.command); - - return ret; -} - -static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p) -{ - struct ieee_param *param; - int ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - /* - * this function is expect to call in master mode, which allows no power saving - * so, we just check hw_init_completed - */ - - if (!padapter->hw_init_completed) { - ret = -EPERM; - goto out; - } - - if (!p->pointer) { - ret = -EINVAL; - goto out; - } - - param = (struct ieee_param *)rtw_malloc(p->length); - if (param == NULL) { - ret = -ENOMEM; - goto out; - } - - if (copy_from_user(param, p->pointer, p->length)) { - kfree(param); - ret = -EFAULT; - goto out; - } - - switch (param->cmd) { - case RTL871X_HOSTAPD_FLUSH: - ret = rtw_hostapd_sta_flush(dev); - break; - case RTL871X_HOSTAPD_ADD_STA: - ret = rtw_add_sta(dev, param); - break; - case RTL871X_HOSTAPD_REMOVE_STA: - ret = rtw_del_sta(dev, param); - break; - case RTL871X_HOSTAPD_SET_BEACON: - ret = rtw_set_beacon(dev, param, p->length); - break; - case RTL871X_SET_ENCRYPTION: - ret = rtw_set_encryption(dev, param, p->length); - break; - case RTL871X_HOSTAPD_GET_WPAIE_STA: - ret = rtw_get_sta_wpaie(dev, param); - break; - case RTL871X_HOSTAPD_SET_WPS_BEACON: - ret = rtw_set_wps_beacon(dev, param, p->length); - break; - case RTL871X_HOSTAPD_SET_WPS_PROBE_RESP: - ret = rtw_set_wps_probe_resp(dev, param, p->length); - break; - case RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP: - ret = rtw_set_wps_assoc_resp(dev, param, p->length); - break; - case RTL871X_HOSTAPD_SET_HIDDEN_SSID: - ret = rtw_set_hidden_ssid(dev, param, p->length); - break; - case RTL871X_HOSTAPD_GET_INFO_STA: - ret = rtw_ioctl_get_sta_data(dev, param, p->length); - break; - case RTL871X_HOSTAPD_SET_MACADDR_ACL: - ret = rtw_ioctl_set_macaddr_acl(dev, param, p->length); - break; - case RTL871X_HOSTAPD_ACL_ADD_STA: - ret = rtw_ioctl_acl_add_sta(dev, param, p->length); - break; - case RTL871X_HOSTAPD_ACL_REMOVE_STA: - ret = rtw_ioctl_acl_remove_sta(dev, param, p->length); - break; - default: - DBG_88E("Unknown hostapd request: %d\n", param->cmd); - ret = -EOPNOTSUPP; - break; - } - - if (ret == 0 && copy_to_user(p->pointer, param, p->length)) - ret = -EFAULT; - kfree(param); -out: - return ret; -} -#endif - -#include -static int rtw_wx_set_priv(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *awrq, - char *extra) -{ - int ret = 0; - int len = 0; - char *ext; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - struct iw_point *dwrq = (struct iw_point *)awrq; - - if (dwrq->length == 0) - return -EFAULT; - - len = dwrq->length; - ext = vmalloc(len); - if (!ext) - return -ENOMEM; - - if (copy_from_user(ext, dwrq->pointer, len)) { - vfree(ext); - return -EFAULT; - } - - /* added for wps2.0 @20110524 */ - if (dwrq->flags == 0x8766 && len > 8) { - u32 cp_sz; - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - u8 *probereq_wpsie = ext; - int probereq_wpsie_len = len; - u8 wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; - - if ((_VENDOR_SPECIFIC_IE_ == probereq_wpsie[0]) && - (!memcmp(&probereq_wpsie[2], wps_oui, 4))) { - cp_sz = probereq_wpsie_len > MAX_WPS_IE_LEN ? MAX_WPS_IE_LEN : probereq_wpsie_len; - - pmlmepriv->wps_probe_req_ie_len = 0; - kfree(pmlmepriv->wps_probe_req_ie); - pmlmepriv->wps_probe_req_ie = NULL; - - pmlmepriv->wps_probe_req_ie = rtw_malloc(cp_sz); - if (pmlmepriv->wps_probe_req_ie == NULL) { - pr_info("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); - ret = -EINVAL; - goto FREE_EXT; - } - memcpy(pmlmepriv->wps_probe_req_ie, probereq_wpsie, cp_sz); - pmlmepriv->wps_probe_req_ie_len = cp_sz; - } - goto FREE_EXT; - } - - if (len >= WEXT_CSCAN_HEADER_SIZE && - !memcmp(ext, WEXT_CSCAN_HEADER, WEXT_CSCAN_HEADER_SIZE)) { - ret = rtw_wx_set_scan(dev, info, awrq, ext); - goto FREE_EXT; - } - -FREE_EXT: - - vfree(ext); - - return ret; -} - -static int rtw_pm_set(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret = 0; - unsigned mode = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - - DBG_88E("[%s] extra = %s\n", __func__, extra); - - if (!memcmp(extra, "lps =", 4)) { - ret = sscanf(extra+4, "%u", &mode); - if (ret != 1) - return -EINVAL; - ret = rtw_pm_set_lps(padapter, mode); - } else if (!memcmp(extra, "ips =", 4)) { - ret = sscanf(extra+4, "%u", &mode); - if (ret != 1) - return -EINVAL; - ret = rtw_pm_set_ips(padapter, mode); - } else { - ret = -EINVAL; - } - - return ret; -} - -static int rtw_mp_efuse_get(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wdata, char *extra) -{ - struct adapter *padapter = rtw_netdev_priv(dev); - struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter); - struct hal_data_8188e *haldata = GET_HAL_DATA(padapter); - struct efuse_hal *pEfuseHal; - struct iw_point *wrqu; - - u8 *PROMContent = pEEPROM->efuse_eeprom_data; - u8 ips_mode = 0, lps_mode = 0; - struct pwrctrl_priv *pwrctrlpriv; - u8 *data = NULL; - u8 *rawdata = NULL; - char *pch, *ptmp, *token, *tmp[3] = {NULL, NULL, NULL}; - u16 i = 0, j = 0, mapLen = 0, addr = 0, cnts = 0; - u16 max_available_size = 0, raw_cursize = 0, raw_maxsize = 0; - int err; - u8 org_fw_iol = padapter->registrypriv.fw_iol;/* 0:Disable, 1:enable, 2:by usb speed */ - - wrqu = (struct iw_point *)wdata; - pwrctrlpriv = &padapter->pwrctrlpriv; - pEfuseHal = &haldata->EfuseHal; - - err = 0; - data = kzalloc(EFUSE_BT_MAX_MAP_LEN, GFP_KERNEL); - if (data == NULL) { - err = -ENOMEM; - goto exit; - } - rawdata = kzalloc(EFUSE_BT_MAX_MAP_LEN, GFP_KERNEL); - if (rawdata == NULL) { - err = -ENOMEM; - goto exit; - } - - if (copy_from_user(extra, wrqu->pointer, wrqu->length)) { - err = -EFAULT; - goto exit; - } - lps_mode = pwrctrlpriv->power_mgnt;/* keep org value */ - rtw_pm_set_lps(padapter, PS_MODE_ACTIVE); - - ips_mode = pwrctrlpriv->ips_mode;/* keep org value */ - rtw_pm_set_ips(padapter, IPS_NONE); - - pch = extra; - DBG_88E("%s: in =%s\n", __func__, extra); - - i = 0; - /* mac 16 "00e04c871200" rmap, 00, 2 */ - while ((token = strsep(&pch, ",")) != NULL) { - if (i > 2) - break; - tmp[i] = token; - i++; - } - padapter->registrypriv.fw_iol = 0;/* 0:Disable, 1:enable, 2:by usb speed */ - - if (strcmp(tmp[0], "status") == 0) { - sprintf(extra, "Load File efuse =%s, Load File MAC =%s", (pEEPROM->bloadfile_fail_flag ? "FAIL" : "OK"), (pEEPROM->bloadmac_fail_flag ? "FAIL" : "OK")); - - goto exit; - } else if (strcmp(tmp[0], "filemap") == 0) { - mapLen = EFUSE_MAP_SIZE; - - sprintf(extra, "\n"); - for (i = 0; i < EFUSE_MAP_SIZE; i += 16) { - sprintf(extra, "%s0x%02x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, PROMContent[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, PROMContent[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "realmap") == 0) { - mapLen = EFUSE_MAP_SIZE; - if (rtw_efuse_map_read(padapter, 0, mapLen, pEfuseHal->fakeEfuseInitMap) == _FAIL) { - DBG_88E("%s: read realmap Fail!!\n", __func__); - err = -EFAULT; - goto exit; - } - - sprintf(extra, "\n"); - for (i = 0; i < EFUSE_MAP_SIZE; i += 16) { - sprintf(extra, "%s0x%02x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "rmap") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - DBG_88E("%s: rmap Fail!! Parameters error!\n", __func__); - err = -EINVAL; - goto exit; - } - - /* rmap addr cnts */ - addr = simple_strtoul(tmp[1], &ptmp, 16); - DBG_88E("%s: addr =%x\n", __func__, addr); - - cnts = simple_strtoul(tmp[2], &ptmp, 10); - if (cnts == 0) { - DBG_88E("%s: rmap Fail!! cnts error!\n", __func__); - err = -EINVAL; - goto exit; - } - DBG_88E("%s: cnts =%d\n", __func__, cnts); - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr + cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EINVAL; - goto exit; - } - - if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_read error!\n", __func__); - err = -EFAULT; - goto exit; - } - - *extra = 0; - for (i = 0; i < cnts; i++) - sprintf(extra, "%s0x%02X ", extra, data[i]); - } else if (strcmp(tmp[0], "realraw") == 0) { - addr = 0; - mapLen = EFUSE_MAX_SIZE; - if (rtw_efuse_access(padapter, false, addr, mapLen, rawdata) == _FAIL) { - DBG_88E("%s: rtw_efuse_access Fail!!\n", __func__); - err = -EFAULT; - goto exit; - } - - sprintf(extra, "\n"); - for (i = 0; i < mapLen; i++) { - sprintf(extra, "%s%02X", extra, rawdata[i]); - - if ((i & 0xF) == 0xF) - sprintf(extra, "%s\n", extra); - else if ((i & 0x7) == 0x7) - sprintf(extra, "%s\t", extra); - else - sprintf(extra, "%s ", extra); - } - } else if (strcmp(tmp[0], "mac") == 0) { - cnts = 6; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr + cnts) > max_available_size) { - DBG_88E("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_read error!\n", __func__); - err = -EFAULT; - goto exit; - } - - *extra = 0; - for (i = 0; i < cnts; i++) { - sprintf(extra, "%s%02X", extra, data[i]); - if (i != (cnts-1)) - sprintf(extra, "%s:", extra); - } - } else if (strcmp(tmp[0], "vidpid") == 0) { - cnts = 4; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr + cnts) > max_available_size) { - DBG_88E("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL) { - DBG_88E("%s: rtw_efuse_access error!!\n", __func__); - err = -EFAULT; - goto exit; - } - - *extra = 0; - for (i = 0; i < cnts; i++) { - sprintf(extra, "%s0x%02X", extra, data[i]); - if (i != (cnts-1)) - sprintf(extra, "%s,", extra); - } - } else if (strcmp(tmp[0], "ableraw") == 0) { - efuse_GetCurrentSize(padapter, &raw_cursize); - raw_maxsize = efuse_GetMaxSize(padapter); - sprintf(extra, "[available raw size] = %d bytes", raw_maxsize-raw_cursize); - } else if (strcmp(tmp[0], "btffake") == 0) { - sprintf(extra, "\n"); - for (i = 0; i < 512; i += 16) { - sprintf(extra, "%s0x%03x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "btbfake") == 0) { - sprintf(extra, "\n"); - for (i = 512; i < 1024; i += 16) { - sprintf(extra, "%s0x%03x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else if (strcmp(tmp[0], "wlrfkmap") == 0) { - sprintf(extra, "\n"); - for (i = 0; i < EFUSE_MAP_SIZE; i += 16) { - sprintf(extra, "%s0x%02x\t", extra, i); - for (j = 0; j < 8; j++) - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]); - sprintf(extra, "%s\t", extra); - for (; j < 16; j++) - sprintf(extra, "%s %02X", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]); - sprintf(extra, "%s\n", extra); - } - } else { - sprintf(extra, "Command not found!"); - } - -exit: - kfree(data); - kfree(rawdata); - if (!err) - wrqu->length = strlen(extra); - - rtw_pm_set_ips(padapter, ips_mode); - rtw_pm_set_lps(padapter, lps_mode); - padapter->registrypriv.fw_iol = org_fw_iol;/* 0:Disable, 1:enable, 2:by usb speed */ - return err; -} - -static int rtw_mp_efuse_set(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wdata, char *extra) -{ - struct adapter *padapter; - struct pwrctrl_priv *pwrctrlpriv; - struct hal_data_8188e *haldata; - struct efuse_hal *pEfuseHal; - - u8 ips_mode = 0, lps_mode = 0; - u32 i; - u8 *setdata = NULL; - u8 *ShadowMapBT = NULL; - u8 *ShadowMapWiFi = NULL; - u8 *setrawdata = NULL; - char *pch, *ptmp, *token, *tmp[3] = {NULL, NULL, NULL}; - u16 addr = 0, cnts = 0, max_available_size = 0; - int err; - - padapter = rtw_netdev_priv(dev); - pwrctrlpriv = &padapter->pwrctrlpriv; - haldata = GET_HAL_DATA(padapter); - pEfuseHal = &haldata->EfuseHal; - err = 0; - setdata = kzalloc(1024, GFP_KERNEL); - if (setdata == NULL) { - err = -ENOMEM; - goto exit; - } - ShadowMapBT = _rtw_malloc(EFUSE_BT_MAX_MAP_LEN); - if (ShadowMapBT == NULL) { - err = -ENOMEM; - goto exit; - } - ShadowMapWiFi = _rtw_malloc(EFUSE_MAP_SIZE); - if (ShadowMapWiFi == NULL) { - err = -ENOMEM; - goto exit; - } - setrawdata = _rtw_malloc(EFUSE_MAX_SIZE); - if (setrawdata == NULL) { - err = -ENOMEM; - goto exit; - } - - lps_mode = pwrctrlpriv->power_mgnt;/* keep org value */ - rtw_pm_set_lps(padapter, PS_MODE_ACTIVE); - - ips_mode = pwrctrlpriv->ips_mode;/* keep org value */ - rtw_pm_set_ips(padapter, IPS_NONE); - - pch = extra; - DBG_88E("%s: in =%s\n", __func__, extra); - - i = 0; - while ((token = strsep(&pch, ",")) != NULL) { - if (i > 2) - break; - tmp[i] = token; - i++; - } - - /* tmp[0],[1],[2] */ - /* wmap, addr, 00e04c871200 */ - if (strcmp(tmp[0], "wmap") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - addr = simple_strtoul(tmp[1], &ptmp, 16); - addr &= 0xFFF; - - cnts = strlen(tmp[2]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: map data =%s\n", __func__, tmp[2]); - - if (hex2bin(setdata, tmp[2], cnts) < 0) { - err = -EINVAL; - goto exit; - } - - /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); - if ((addr+cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_write error!!\n", __func__); - err = -EFAULT; - goto exit; - } - } else if (strcmp(tmp[0], "wraw") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - addr = simple_strtoul(tmp[1], &ptmp, 16); - addr &= 0xFFF; - - cnts = strlen(tmp[2]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: raw data =%s\n", __func__, tmp[2]); - - if (hex2bin(setrawdata, tmp[2], cnts) < 0) { - err = -EINVAL; - goto exit; - } - - if (rtw_efuse_access(padapter, true, addr, cnts, setrawdata) == _FAIL) { - DBG_88E("%s: rtw_efuse_access error!!\n", __func__); - err = -EFAULT; - goto exit; - } - } else if (strcmp(tmp[0], "mac") == 0) { - if (tmp[1] == NULL) { - err = -EINVAL; - goto exit; - } - - /* mac, 00e04c871200 */ - addr = EEPROM_MAC_ADDR_88EU; - cnts = strlen(tmp[1]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - if (cnts > 6) { - DBG_88E("%s: error data for mac addr =\"%s\"\n", __func__, tmp[1]); - err = -EFAULT; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: MAC address =%s\n", __func__, tmp[1]); - - if (hex2bin(setdata, tmp[1], cnts) < 0) { - err = -EINVAL; - goto exit; - } - - /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size); - if ((addr+cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_write error!!\n", __func__); - err = -EFAULT; - goto exit; - } - } else if (strcmp(tmp[0], "vidpid") == 0) { - if (tmp[1] == NULL) { - err = -EINVAL; - goto exit; - } - - /* pidvid, da0b7881 */ - addr = EEPROM_VID_88EE; - cnts = strlen(tmp[1]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: VID/PID =%s\n", __func__, tmp[1]); - - if (hex2bin(setdata, tmp[1], cnts) < 0) { - err = -EINVAL; - goto exit; - } - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr+cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_write error!!\n", __func__); - err = -EFAULT; - goto exit; - } - } else if (strcmp(tmp[0], "btwmap") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - addr = simple_strtoul(tmp[1], &ptmp, 16); - addr &= 0xFFF; - - cnts = strlen(tmp[2]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: BT data =%s\n", __func__, tmp[2]); - - if (hex2bin(setdata, tmp[2], cnts) < 0) { - err = -EINVAL; - goto exit; - } - - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if ((addr+cnts) > max_available_size) { - DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); - err = -EFAULT; - goto exit; - } - - } else if (strcmp(tmp[0], "btwfake") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - addr = simple_strtoul(tmp[1], &ptmp, 16); - addr &= 0xFFF; - - cnts = strlen(tmp[2]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: BT tmp data =%s\n", __func__, tmp[2]); - - if (hex2bin(pEfuseHal->fakeBTEfuseModifiedMap + addr, tmp[2], cnts) < 0) { - err = -EINVAL; - goto exit; - } - } else if (strcmp(tmp[0], "wldumpfake") == 0) { - if (rtw_efuse_map_read(padapter, 0, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeEfuseModifiedMap) == _SUCCESS) { - DBG_88E("%s: BT read all map success\n", __func__); - } else { - DBG_88E("%s: BT read all map Fail\n", __func__); - err = -EFAULT; - } - } else if (strcmp(tmp[0], "btfk2map") == 0) { - memcpy(pEfuseHal->BTEfuseModifiedMap, pEfuseHal->fakeBTEfuseModifiedMap, EFUSE_BT_MAX_MAP_LEN); - - EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if (max_available_size < 1) { - err = -EFAULT; - goto exit; - } - - } else if (strcmp(tmp[0], "wlfk2map") == 0) { - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if (max_available_size < 1) { - err = -EFAULT; - goto exit; - } - - if (rtw_efuse_map_write(padapter, 0x00, EFUSE_MAX_MAP_LEN, pEfuseHal->fakeEfuseModifiedMap) == _FAIL) { - DBG_88E("%s: rtw_efuse_map_write error!\n", __func__); - err = -EFAULT; - goto exit; - } - } else if (strcmp(tmp[0], "wlwfake") == 0) { - if ((tmp[1] == NULL) || (tmp[2] == NULL)) { - err = -EINVAL; - goto exit; - } - - addr = simple_strtoul(tmp[1], &ptmp, 16); - addr &= 0xFFF; - - cnts = strlen(tmp[2]); - if (cnts%2) { - err = -EINVAL; - goto exit; - } - cnts /= 2; - if (cnts == 0) { - err = -EINVAL; - goto exit; - } - - DBG_88E("%s: addr = 0x%X\n", __func__, addr); - DBG_88E("%s: cnts =%d\n", __func__, cnts); - DBG_88E("%s: map tmp data =%s\n", __func__, tmp[2]); - - if (hex2bin(pEfuseHal->fakeEfuseModifiedMap + addr, tmp[2], cnts) < 0) { - err = -EINVAL; - goto exit; - } - } - -exit: - kfree(setdata); - kfree(ShadowMapBT); - kfree(ShadowMapWiFi); - kfree(setrawdata); - - rtw_pm_set_ips(padapter, ips_mode); - rtw_pm_set_lps(padapter, lps_mode); - - return err; -} - -/* - * Input Format: %s,%d,%d - * %s is width, could be - * "b" for 1 byte - * "w" for WORD (2 bytes) - * "dw" for DWORD (4 bytes) - * 1st %d is address(offset) - * 2st %d is data to write - */ -static int rtw_mp_write_reg(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - char *pch, *pnext, *ptmp; - char *width_str; - char width; - u32 addr, data; - int ret; - struct adapter *padapter = rtw_netdev_priv(dev); - - pch = extra; - pnext = strpbrk(pch, ",.-"); - if (pnext == NULL) - return -EINVAL; - *pnext = 0; - width_str = pch; - - pch = pnext + 1; - pnext = strpbrk(pch, ",.-"); - if (pnext == NULL) - return -EINVAL; - *pnext = 0; - addr = simple_strtoul(pch, &ptmp, 16); - if (addr > 0x3FFF) - return -EINVAL; - - pch = pnext + 1; - if ((pch - extra) >= wrqu->length) - return -EINVAL; - data = simple_strtoul(pch, &ptmp, 16); - - ret = 0; - width = width_str[0]; - switch (width) { - case 'b': - /* 1 byte */ - if (data > 0xFF) { - ret = -EINVAL; - break; - } - usb_write8(padapter, addr, data); - break; - case 'w': - /* 2 bytes */ - if (data > 0xFFFF) { - ret = -EINVAL; - break; - } - usb_write16(padapter, addr, data); - break; - case 'd': - /* 4 bytes */ - usb_write32(padapter, addr, data); - break; - default: - ret = -EINVAL; - break; - } + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); - return ret; -} + /* set mic key */ + memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8); + memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8); -/* - * Input Format: %s,%d - * %s is width, could be - * "b" for 1 byte - * "w" for WORD (2 bytes) - * "dw" for DWORD (4 bytes) - * %d is address(offset) - * - * Return: - * %d for data readed - */ -static int rtw_mp_read_reg(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->length, GFP_KERNEL); - char *pch, *pnext, *ptmp; - char *width_str; - char width; - char data[20], tmp[20]; - u32 addr; - u32 ret, i = 0, j = 0, strtout = 0; - - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } - memset(data, 0, 20); - memset(tmp, 0, 20); - memset(extra, 0, wrqu->length); - - pch = input; - pnext = strpbrk(pch, ",.-"); - if (pnext == NULL) { - kfree(input); - return -EINVAL; - } - *pnext = 0; - width_str = pch; + psecuritypriv->busetkipkey = true; + } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { + psecuritypriv->dot118021XGrpPrivacy = _AES_; - pch = pnext + 1; - if ((pch - input) >= wrqu->length) { - kfree(input); - return -EINVAL; - } - kfree(input); - addr = simple_strtoul(pch, &ptmp, 16); - if (addr > 0x3FFF) - return -EINVAL; + memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, + param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len)); + } else { + psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_; + } - ret = 0; - width = width_str[0]; - switch (width) { - case 'b': - /* 1 byte */ - sprintf(extra, "%d\n", usb_read8(padapter, addr)); - wrqu->length = strlen(extra); - break; - case 'w': - /* 2 bytes */ - sprintf(data, "%04x\n", usb_read16(padapter, addr)); - for (i = 0; i <= strlen(data); i++) { - if (i%2 == 0) { - tmp[j] = ' '; - j++; - } - if (data[i] != '\0') - tmp[j] = data[i]; - j++; - } - pch = tmp; - DBG_88E("pch =%s", pch); + psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx; - while (*pch != '\0') { - pnext = strpbrk(pch, " "); - if (!pnext) - break; + psecuritypriv->binstallGrpkey = true; - pnext++; - if (*pnext != '\0') { - strtout = simple_strtoul(pnext, &ptmp, 16); - sprintf(extra, "%s %d", extra, strtout); - } else { - break; - } - pch = pnext; - } - wrqu->length = 6; - break; - case 'd': - /* 4 bytes */ - sprintf(data, "%08x", usb_read32(padapter, addr)); - /* add read data format blank */ - for (i = 0; i <= strlen(data); i++) { - if (i%2 == 0) { - tmp[j] = ' '; - j++; - } - if (data[i] != '\0') - tmp[j] = data[i]; + psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;/* */ - j++; - } - pch = tmp; - DBG_88E("pch =%s", pch); + set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx); - while (*pch != '\0') { - pnext = strpbrk(pch, " "); - if (!pnext) - break; - pnext++; - if (*pnext != '\0') { - strtout = simple_strtoul(pnext, &ptmp, 16); - sprintf(extra, "%s %d", extra, strtout); - } else { - break; + pbcmc_sta = rtw_get_bcmc_stainfo(padapter); + if (pbcmc_sta) { + pbcmc_sta->ieee8021x_blocked = false; + pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */ + } } - pch = pnext; } - wrqu->length = strlen(extra); - break; - default: - wrqu->length = 0; - ret = -EINVAL; - break; } +exit: + + kfree(pwep); + return ret; } -/* - * Input Format: %d,%x,%x - * %d is RF path, should be smaller than MAX_RF_PATH_NUMS - * 1st %x is address(offset) - * 2st %x is data to write - */ - static int rtw_mp_write_rf(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_set_beacon(struct net_device *dev, struct ieee_param *param, int len) { - u32 path, addr, data; - int ret; - struct adapter *padapter = rtw_netdev_priv(dev); + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct sta_priv *pstapriv = &padapter->stapriv; + unsigned char *pbuf = param->u.bcn_ie.buf; - ret = sscanf(extra, "%d,%x,%x", &path, &addr, &data); - if (ret < 3) - return -EINVAL; + DBG_88E("%s, len =%d\n", __func__, len); - if (path >= MAX_RF_PATH_NUMS) - return -EINVAL; - if (addr > 0xFF) - return -EINVAL; - if (data > 0xFFFFF) + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) return -EINVAL; - memset(extra, 0, wrqu->length); + memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2); - write_rfreg(padapter, path, addr, data); + if ((pstapriv->max_num_sta > NUM_STA) || (pstapriv->max_num_sta <= 0)) + pstapriv->max_num_sta = NUM_STA; - sprintf(extra, "write_rf completed\n"); - wrqu->length = strlen(extra); + if (rtw_check_beacon_data(padapter, pbuf, (len-12-2)) == _SUCCESS)/* 12 = param header, 2:no packed */ + ret = 0; + else + ret = -EINVAL; - return 0; + return ret; } -/* - * Input Format: %d,%x - * %d is RF path, should be smaller than MAX_RF_PATH_NUMS - * %x is address(offset) - * - * Return: - * %d for data readed - */ -static int rtw_mp_read_rf(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_hostapd_sta_flush(struct net_device *dev) { - char *input = kmalloc(wrqu->length, GFP_KERNEL); - char *pch, *pnext, *ptmp; - char data[20], tmp[20]; - u32 path, addr; - u32 ret, i = 0, j = 0, strtou = 0; - struct adapter *padapter = rtw_netdev_priv(dev); - - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } - ret = sscanf(input, "%d,%x", &path, &addr); - kfree(input); - if (ret < 2) - return -EINVAL; - - if (path >= MAX_RF_PATH_NUMS) - return -EINVAL; - if (addr > 0xFF) - return -EINVAL; - - memset(extra, 0, wrqu->length); - - sprintf(data, "%08x", read_rfreg(padapter, path, addr)); - /* add read data format blank */ - for (i = 0; i <= strlen(data); i++) { - if (i%2 == 0) { - tmp[j] = ' '; - j++; - } - tmp[j] = data[i]; - j++; - } - pch = tmp; - DBG_88E("pch =%s", pch); - - while (*pch != '\0') { - pnext = strpbrk(pch, " "); - pnext++; - if (*pnext != '\0') { - strtou = simple_strtoul(pnext, &ptmp, 16); - sprintf(extra, "%s %d", extra, strtou); - } else { - break; - } - pch = pnext; - } - wrqu->length = strlen(extra); - return 0; -} + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); -static int rtw_mp_start(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - struct adapter *padapter = rtw_netdev_priv(dev); + DBG_88E("%s\n", __func__); - if (padapter->registrypriv.mp_mode == 0) { - padapter->registrypriv.mp_mode = 1; + flush_all_cam_entry(padapter); /* clear CAM */ - rtw_pm_set_ips(padapter, IPS_NONE); - LeaveAllPowerSaveMode(padapter); + ret = rtw_sta_flush(padapter); - MPT_InitializeAdapter(padapter, 1); - } - if (padapter->registrypriv.mp_mode == 0) - return -EPERM; - if (padapter->mppriv.mode == MP_OFF) { - if (mp_start_test(padapter) == _FAIL) - return -EPERM; - padapter->mppriv.mode = MP_ON; - } - return 0; + return ret; } -static int rtw_mp_stop(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_add_sta(struct net_device *dev, struct ieee_param *param) { - struct adapter *padapter = rtw_netdev_priv(dev); - - if (padapter->registrypriv.mp_mode == 1) { - MPT_DeInitAdapter(padapter); - padapter->registrypriv.mp_mode = 0; - } - - if (padapter->mppriv.mode != MP_OFF) { - mp_stop_test(padapter); - padapter->mppriv.mode = MP_OFF; - } + int ret = 0; + struct sta_info *psta = NULL; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct sta_priv *pstapriv = &padapter->stapriv; - return 0; -} + DBG_88E("rtw_add_sta(aid =%d) =%pM\n", param->u.add_sta.aid, (param->sta_addr)); -extern int wifirate2_ratetbl_inx(unsigned char rate); + if (!check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE))) + return -EINVAL; -static int rtw_mp_rate(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - unsigned long rate = MPT_RATE_1M; - char *input = kmalloc(wrqu->length, GFP_KERNEL); - struct adapter *padapter = rtw_netdev_priv(dev); - int status; + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) + return -EINVAL; - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } + psta = rtw_get_stainfo(pstapriv, param->sta_addr); + if (psta) { + int flags = param->u.add_sta.flags; - status = kstrtoul(input, 0, &rate); - if (status) - return status; + psta->aid = param->u.add_sta.aid;/* aid = 1~2007 */ - sprintf(extra, "Set data rate to %lu", rate); - kfree(input); - if (rate <= 0x7f) - rate = wifirate2_ratetbl_inx((u8)rate); - else - rate = (rate-0x80+MPT_RATE_MCS0); + memcpy(psta->bssrateset, param->u.add_sta.tx_supp_rates, 16); - if (rate >= MPT_RATE_LAST) - return -EINVAL; + /* check wmm cap. */ + if (WLAN_STA_WME&flags) + psta->qos_option = 1; + else + psta->qos_option = 0; - padapter->mppriv.rateidx = rate; - Hal_SetDataRate(padapter); + if (pmlmepriv->qospriv.qos_option == 0) + psta->qos_option = 0; - wrqu->length = strlen(extra) + 1; - return 0; -} + /* chec 802.11n ht cap. */ + if (WLAN_STA_HT&flags) { + psta->htpriv.ht_option = true; + psta->qos_option = 1; + memcpy((void *)&psta->htpriv.ht_cap, (void *)¶m->u.add_sta.ht_cap, sizeof(struct rtw_ieee80211_ht_cap)); + } else { + psta->htpriv.ht_option = false; + } -static int rtw_mp_channel(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->length, GFP_KERNEL); - unsigned long channel = 1; - int status; + if (pmlmepriv->htpriv.ht_option == false) + psta->htpriv.ht_option = false; - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; + update_sta_info_apmode(padapter, psta); + } else { + ret = -ENOMEM; } - status = kstrtoul(input, 0, &channel); - if (status) - return status; - - sprintf(extra, "Change channel %d to channel %lu", padapter->mppriv.channel, channel); - - padapter->mppriv.channel = channel; - Hal_SetChannel(padapter); - - wrqu->length = strlen(extra) + 1; - kfree(input); - return 0; + return ret; } -static int rtw_mp_bandwidth(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_del_sta(struct net_device *dev, struct ieee_param *param) { - u32 bandwidth = 0, sg = 0; - struct adapter *padapter = rtw_netdev_priv(dev); - int rv; + int ret = 0; + struct sta_info *psta = NULL; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct sta_priv *pstapriv = &padapter->stapriv; + int updated = 0; - rv = sscanf(extra, "40M =%d, shortGI =%d", &bandwidth, &sg); - if (rv != 2) - return -EINVAL; + DBG_88E("rtw_del_sta =%pM\n", (param->sta_addr)); - if (bandwidth != HT_CHANNEL_WIDTH_40) - bandwidth = HT_CHANNEL_WIDTH_20; + if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) + return -EINVAL; - padapter->mppriv.bandwidth = (u8)bandwidth; - padapter->mppriv.preamble = sg; + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) + return -EINVAL; - SetBandwidth(padapter); + psta = rtw_get_stainfo(pstapriv, param->sta_addr); + if (psta) { + spin_lock_bh(&pstapriv->asoc_list_lock); + if (!list_empty(&psta->asoc_list)) { + list_del_init(&psta->asoc_list); + pstapriv->asoc_list_cnt--; + updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING); + } + spin_unlock_bh(&pstapriv->asoc_list_lock); + associated_clients_update(padapter, updated); + psta = NULL; + } else { + DBG_88E("rtw_del_sta(), sta has already been removed or never been added\n"); + } - return 0; + return ret; } -static int rtw_mp_txpower(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_ioctl_get_sta_data(struct net_device *dev, struct ieee_param *param, int len) { - u32 idx_a = 0, idx_b = 0; - char *input = kmalloc(wrqu->length, GFP_KERNEL); - struct adapter *padapter = rtw_netdev_priv(dev); - int rv; - - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } - rv = sscanf(input, "patha =%d, pathb =%d", &idx_a, &idx_b); - if (rv != 2) { - kfree(input); - return -EINVAL; - } + int ret = 0; + struct sta_info *psta = NULL; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct sta_priv *pstapriv = &padapter->stapriv; + struct ieee_param_ex *param_ex = (struct ieee_param_ex *)param; + struct sta_data *psta_data = (struct sta_data *)param_ex->data; - sprintf(extra, "Set power level path_A:%d path_B:%d", idx_a, idx_b); - padapter->mppriv.txpoweridx = (u8)idx_a; - padapter->mppriv.txpoweridx_b = (u8)idx_b; - padapter->mppriv.bSetTxPower = 1; - Hal_SetAntennaPathPower(padapter); + DBG_88E("rtw_ioctl_get_sta_info, sta_addr: %pM\n", (param_ex->sta_addr)); - wrqu->length = strlen(extra) + 1; - kfree(input); - return 0; -} + if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) + return -EINVAL; -static int rtw_mp_ant_tx(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - u8 i; - char *input = kmalloc(wrqu->length, GFP_KERNEL); - u16 antenna = 0; - struct adapter *padapter = rtw_netdev_priv(dev); + if (param_ex->sta_addr[0] == 0xff && param_ex->sta_addr[1] == 0xff && + param_ex->sta_addr[2] == 0xff && param_ex->sta_addr[3] == 0xff && + param_ex->sta_addr[4] == 0xff && param_ex->sta_addr[5] == 0xff) + return -EINVAL; - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } + psta = rtw_get_stainfo(pstapriv, param_ex->sta_addr); + if (psta) { + psta_data->aid = (u16)psta->aid; + psta_data->capability = psta->capability; + psta_data->flags = psta->flags; - sprintf(extra, "switch Tx antenna to %s", input); +/* + nonerp_set : BIT(0) + no_short_slot_time_set : BIT(1) + no_short_preamble_set : BIT(2) + no_ht_gf_set : BIT(3) + no_ht_set : BIT(4) + ht_20mhz_set : BIT(5) +*/ - for (i = 0; i < strlen(input); i++) { - switch (input[i]) { - case 'a': - antenna |= ANTENNA_A; - break; - case 'b': - antenna |= ANTENNA_B; - break; - } + psta_data->sta_set = ((psta->nonerp_set) | + (psta->no_short_slot_time_set << 1) | + (psta->no_short_preamble_set << 2) | + (psta->no_ht_gf_set << 3) | + (psta->no_ht_set << 4) | + (psta->ht_20mhz_set << 5)); + psta_data->tx_supp_rates_len = psta->bssratelen; + memcpy(psta_data->tx_supp_rates, psta->bssrateset, psta->bssratelen); + memcpy(&psta_data->ht_cap, &psta->htpriv.ht_cap, sizeof(struct rtw_ieee80211_ht_cap)); + psta_data->rx_pkts = psta->sta_stats.rx_data_pkts; + psta_data->rx_bytes = psta->sta_stats.rx_bytes; + psta_data->rx_drops = psta->sta_stats.rx_drops; + psta_data->tx_pkts = psta->sta_stats.tx_pkts; + psta_data->tx_bytes = psta->sta_stats.tx_bytes; + psta_data->tx_drops = psta->sta_stats.tx_drops; + } else { + ret = -1; } - padapter->mppriv.antenna_tx = antenna; - - Hal_SetAntenna(padapter); - wrqu->length = strlen(extra) + 1; - kfree(input); - return 0; + return ret; } -static int rtw_mp_ant_rx(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param) { - u8 i; - u16 antenna = 0; - char *input = kmalloc(wrqu->length, GFP_KERNEL); - struct adapter *padapter = rtw_netdev_priv(dev); - - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } - memset(extra, 0, wrqu->length); - - sprintf(extra, "switch Rx antenna to %s", input); - - for (i = 0; i < strlen(input); i++) { - switch (input[i]) { - case 'a': - antenna |= ANTENNA_A; - break; - case 'b': - antenna |= ANTENNA_B; - break; - } - } + int ret = 0; + struct sta_info *psta = NULL; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct sta_priv *pstapriv = &padapter->stapriv; - padapter->mppriv.antenna_rx = antenna; - Hal_SetAntenna(padapter); - wrqu->length = strlen(extra); - kfree(input); - return 0; -} + DBG_88E("rtw_get_sta_wpaie, sta_addr: %pM\n", (param->sta_addr)); -static int rtw_mp_ctx(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - u32 pkTx = 1, countPkTx = 1, cotuTx = 1, CarrSprTx = 1, scTx = 1, sgleTx = 1, stop = 1; - u32 bStartTest = 1; - u32 count = 0; - int rv; - struct mp_priv *pmp_priv; - struct pkt_attrib *pattrib; - - struct adapter *padapter = rtw_netdev_priv(dev); - - pmp_priv = &padapter->mppriv; - - if (copy_from_user(extra, wrqu->pointer, wrqu->length)) - return -EFAULT; - - DBG_88E("%s: in =%s\n", __func__, extra); - - countPkTx = strncmp(extra, "count=", 6); /* strncmp true is 0 */ - cotuTx = strncmp(extra, "background", 20); - CarrSprTx = strncmp(extra, "background, cs", 20); - scTx = strncmp(extra, "background, sc", 20); - sgleTx = strncmp(extra, "background, stone", 20); - pkTx = strncmp(extra, "background, pkt", 20); - stop = strncmp(extra, "stop", 4); - rv = sscanf(extra, "count =%d, pkt", &count); - if (rv != 2) + if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != true) return -EINVAL; - memset(extra, '\0', sizeof(*extra)); + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) + return -EINVAL; - if (stop == 0) { - bStartTest = 0; /* To set Stop */ - pmp_priv->tx.stop = 1; - sprintf(extra, "Stop continuous Tx"); - } else { - bStartTest = 1; - if (pmp_priv->mode != MP_ON) { - if (pmp_priv->tx.stop != 1) { - DBG_88E("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode); - return -EFAULT; - } - } - } + psta = rtw_get_stainfo(pstapriv, param->sta_addr); + if (psta) { + if ((psta->wpa_ie[0] == WLAN_EID_RSN) || (psta->wpa_ie[0] == WLAN_EID_GENERIC)) { + int wpa_ie_len; + int copy_len; - if (pkTx == 0 || countPkTx == 0) - pmp_priv->mode = MP_PACKET_TX; - if (sgleTx == 0) - pmp_priv->mode = MP_SINGLE_TONE_TX; - if (cotuTx == 0) - pmp_priv->mode = MP_CONTINUOUS_TX; - if (CarrSprTx == 0) - pmp_priv->mode = MP_CARRIER_SUPPRISSION_TX; - if (scTx == 0) - pmp_priv->mode = MP_SINGLE_CARRIER_TX; - - switch (pmp_priv->mode) { - case MP_PACKET_TX: - if (bStartTest == 0) { - pmp_priv->tx.stop = 1; - pmp_priv->mode = MP_ON; - sprintf(extra, "Stop continuous Tx"); - } else if (pmp_priv->tx.stop == 1) { - sprintf(extra, "Start continuous DA = ffffffffffff len = 1500 count =%u,\n", count); - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = count; - pmp_priv->tx.payload = 2; - pattrib = &pmp_priv->tx.attrib; - pattrib->pktlen = 1500; - memset(pattrib->dst, 0xFF, ETH_ALEN); - SetPacketTx(padapter); + wpa_ie_len = psta->wpa_ie[1]; + copy_len = ((wpa_ie_len+2) > sizeof(psta->wpa_ie)) ? (sizeof(psta->wpa_ie)) : (wpa_ie_len+2); + param->u.wpa_ie.len = copy_len; + memcpy(param->u.wpa_ie.reserved, psta->wpa_ie, copy_len); } else { - return -EFAULT; - } - wrqu->length = strlen(extra); - return 0; - case MP_SINGLE_TONE_TX: - if (bStartTest != 0) - sprintf(extra, "Start continuous DA = ffffffffffff len = 1500\n infinite = yes."); - Hal_SetSingleToneTx(padapter, (u8)bStartTest); - break; - case MP_CONTINUOUS_TX: - if (bStartTest != 0) - sprintf(extra, "Start continuous DA = ffffffffffff len = 1500\n infinite = yes."); - Hal_SetContinuousTx(padapter, (u8)bStartTest); - break; - case MP_CARRIER_SUPPRISSION_TX: - if (bStartTest != 0) { - if (pmp_priv->rateidx <= MPT_RATE_11M) { - sprintf(extra, "Start continuous DA = ffffffffffff len = 1500\n infinite = yes."); - Hal_SetCarrierSuppressionTx(padapter, (u8)bStartTest); - } else { - sprintf(extra, "Specify carrier suppression but not CCK rate"); - } - } - break; - case MP_SINGLE_CARRIER_TX: - if (bStartTest != 0) - sprintf(extra, "Start continuous DA = ffffffffffff len = 1500\n infinite = yes."); - Hal_SetSingleCarrierTx(padapter, (u8)bStartTest); - break; - default: - sprintf(extra, "Error! Continuous-Tx is not on-going."); - return -EFAULT; - } - - if (bStartTest == 1 && pmp_priv->mode != MP_ON) { - struct mp_priv *pmp_priv = &padapter->mppriv; - if (pmp_priv->tx.stop == 0) { - pmp_priv->tx.stop = 1; - msleep(5); + DBG_88E("sta's wpa_ie is NONE\n"); } - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = 1; - SetPacketTx(padapter); } else { - pmp_priv->mode = MP_ON; + ret = -1; } - wrqu->length = strlen(extra); - return 0; -} - -static int rtw_mp_arx(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - u8 bStartRx = 0, bStopRx = 0, bQueryPhy; - u32 cckok = 0, cckcrc = 0, ofdmok = 0, ofdmcrc = 0, htok = 0, htcrc = 0, OFDM_FA = 0, CCK_FA = 0; - char *input = kmalloc(wrqu->length, GFP_KERNEL); - struct adapter *padapter = rtw_netdev_priv(dev); - - if (!input) - return -ENOMEM; - - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } - DBG_88E("%s: %s\n", __func__, input); - - bStartRx = (strncmp(input, "start", 5) == 0) ? 1 : 0; /* strncmp true is 0 */ - bStopRx = (strncmp(input, "stop", 4) == 0) ? 1 : 0; /* strncmp true is 0 */ - bQueryPhy = (strncmp(input, "phy", 3) == 0) ? 1 : 0; /* strncmp true is 0 */ - - if (bStartRx) { - sprintf(extra, "start"); - SetPacketRx(padapter, bStartRx); - } else if (bStopRx) { - SetPacketRx(padapter, 0); - sprintf(extra, "Received packet OK:%d CRC error:%d", padapter->mppriv.rx_pktcount, padapter->mppriv.rx_crcerrpktcount); - } else if (bQueryPhy) { - /* - OFDM FA - RegCF0[15:0] - RegCF2[31:16] - RegDA0[31:16] - RegDA4[15:0] - RegDA4[31:16] - RegDA8[15:0] - CCK FA - (RegA5B<<8) | RegA5C - */ - cckok = read_bbreg(padapter, 0xf88, 0xffffffff); - cckcrc = read_bbreg(padapter, 0xf84, 0xffffffff); - ofdmok = read_bbreg(padapter, 0xf94, 0x0000FFFF); - ofdmcrc = read_bbreg(padapter, 0xf94, 0xFFFF0000); - htok = read_bbreg(padapter, 0xf90, 0x0000FFFF); - htcrc = read_bbreg(padapter, 0xf90, 0xFFFF0000); - - OFDM_FA = read_bbreg(padapter, 0xcf0, 0x0000FFFF); - OFDM_FA = read_bbreg(padapter, 0xcf2, 0xFFFF0000); - OFDM_FA = read_bbreg(padapter, 0xda0, 0xFFFF0000); - OFDM_FA = read_bbreg(padapter, 0xda4, 0x0000FFFF); - OFDM_FA = read_bbreg(padapter, 0xda4, 0xFFFF0000); - OFDM_FA = read_bbreg(padapter, 0xda8, 0x0000FFFF); - CCK_FA = (usb_read8(padapter, 0xa5b)<<8) | (usb_read8(padapter, 0xa5c)); - - sprintf(extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d", cckok+ofdmok+htok, cckcrc+ofdmcrc+htcrc, OFDM_FA+CCK_FA); - } - wrqu->length = strlen(extra) + 1; - kfree(input); - return 0; + return ret; } -static int rtw_mp_trx_query(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_set_wps_beacon(struct net_device *dev, struct ieee_param *param, int len) { - u32 txok, txfail, rxok, rxfail; - struct adapter *padapter = rtw_netdev_priv(dev); - - txok = padapter->mppriv.tx.sended; - txfail = 0; - rxok = padapter->mppriv.rx_pktcount; - rxfail = padapter->mppriv.rx_crcerrpktcount; - - memset(extra, '\0', 128); - - sprintf(extra, "Tx OK:%d, Tx Fail:%d, Rx OK:%d, CRC error:%d ", txok, txfail, rxok, rxfail); - - wrqu->length = strlen(extra)+1; + int ret = 0; + unsigned char wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); + int ie_len; - return 0; -} + DBG_88E("%s, len =%d\n", __func__, len); -static int rtw_mp_pwrtrk(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - u8 enable; - u32 thermal; - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->length, GFP_KERNEL); - int ret = 0; + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - ret = -EFAULT; - goto exit; - } - memset(extra, 0, wrqu->length); - - enable = 1; - if (wrqu->length > 1) {/* not empty string */ - if (strncmp(input, "stop", 4) == 0) { - enable = 0; - sprintf(extra, "mp tx power tracking stop"); - } else if (sscanf(input, "ther =%d", &thermal)) { - ret = Hal_SetThermalMeter(padapter, (u8)thermal); - if (ret == _FAIL) { - ret = -EPERM; - goto exit; - } - sprintf(extra, "mp tx power tracking start, target value =%d ok ", thermal); - } else { - ret = -EINVAL; - goto exit; - } - } + ie_len = len-12-2;/* 12 = param header, 2:no packed */ - ret = Hal_SetPowerTracking(padapter, enable); - if (ret == _FAIL) { - ret = -EPERM; - goto exit; + if (pmlmepriv->wps_beacon_ie) { + kfree(pmlmepriv->wps_beacon_ie); + pmlmepriv->wps_beacon_ie = NULL; } - wrqu->length = strlen(extra); + if (ie_len > 0) { + pmlmepriv->wps_beacon_ie = rtw_malloc(ie_len); + pmlmepriv->wps_beacon_ie_len = ie_len; + if (pmlmepriv->wps_beacon_ie == NULL) { + DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); + return -EINVAL; + } -exit: - kfree(input); - return ret; -} + memcpy(pmlmepriv->wps_beacon_ie, param->u.bcn_ie.buf, ie_len); -static int rtw_mp_psd(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->length, GFP_KERNEL); + update_beacon(padapter, _VENDOR_SPECIFIC_IE_, wps_oui, true); - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; + pmlmeext->bstart_bss = true; } - strcpy(extra, input); - - wrqu->length = mp_query_psd(padapter, extra); - kfree(input); - return 0; + return ret; } -static int rtw_mp_thermal(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *param, int len) { - u8 val; - u16 bwrite = 1; - u16 addr = EEPROM_THERMAL_METER_88E; + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + int ie_len; - u16 cnt = 1; - u16 max_available_size = 0; - struct adapter *padapter = rtw_netdev_priv(dev); + DBG_88E("%s, len =%d\n", __func__, len); - if (copy_from_user(extra, wrqu->pointer, wrqu->length)) - return -EFAULT; + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; - bwrite = strncmp(extra, "write", 6); /* strncmp true is 0 */ + ie_len = len-12-2;/* 12 = param header, 2:no packed */ - Hal_GetThermalMeter(padapter, &val); + if (pmlmepriv->wps_probe_resp_ie) { + kfree(pmlmepriv->wps_probe_resp_ie); + pmlmepriv->wps_probe_resp_ie = NULL; + } - if (bwrite == 0) { - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - if (2 > max_available_size) { - DBG_88E("no available efuse!\n"); - return -EFAULT; - } - if (rtw_efuse_map_write(padapter, addr, cnt, &val) == _FAIL) { - DBG_88E("rtw_efuse_map_write error\n"); - return -EFAULT; - } else { - sprintf(extra, " efuse write ok :%d", val); + if (ie_len > 0) { + pmlmepriv->wps_probe_resp_ie = rtw_malloc(ie_len); + pmlmepriv->wps_probe_resp_ie_len = ie_len; + if (pmlmepriv->wps_probe_resp_ie == NULL) { + DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); + return -EINVAL; } - } else { - sprintf(extra, "%d", val); + memcpy(pmlmepriv->wps_probe_resp_ie, param->u.bcn_ie.buf, ie_len); } - wrqu->length = strlen(extra); - return 0; + return ret; } -static int rtw_mp_reset_stats(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *param, int len) { - struct mp_priv *pmp_priv; - struct adapter *padapter = rtw_netdev_priv(dev); + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + int ie_len; - pmp_priv = &padapter->mppriv; + DBG_88E("%s, len =%d\n", __func__, len); - pmp_priv->tx.sended = 0; - pmp_priv->tx_pktcount = 0; - pmp_priv->rx_pktcount = 0; - pmp_priv->rx_crcerrpktcount = 0; + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; - /* reset phy counter */ - write_bbreg(padapter, 0xf14, BIT16, 0x1); - msleep(10); - write_bbreg(padapter, 0xf14, BIT16, 0x0); + ie_len = len-12-2;/* 12 = param header, 2:no packed */ - return 0; -} + if (pmlmepriv->wps_assoc_resp_ie) { + kfree(pmlmepriv->wps_assoc_resp_ie); + pmlmepriv->wps_assoc_resp_ie = NULL; + } -static int rtw_mp_dump(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) -{ - u32 value; - u8 rf_type, path_nums = 0; - u32 i, j = 1, path; - struct adapter *padapter = rtw_netdev_priv(dev); - - if (strncmp(extra, "all", 4) == 0) { - DBG_88E("\n ======= MAC REG =======\n"); - for (i = 0x0; i < 0x300; i += 4) { - if (j%4 == 1) - DBG_88E("0x%02x", i); - DBG_88E(" 0x%08x ", usb_read32(padapter, i)); - if ((j++)%4 == 0) - DBG_88E("\n"); - } - for (i = 0x400; i < 0x1000; i += 4) { - if (j%4 == 1) - DBG_88E("0x%02x", i); - DBG_88E(" 0x%08x ", usb_read32(padapter, i)); - if ((j++)%4 == 0) - DBG_88E("\n"); + if (ie_len > 0) { + pmlmepriv->wps_assoc_resp_ie = rtw_malloc(ie_len); + pmlmepriv->wps_assoc_resp_ie_len = ie_len; + if (pmlmepriv->wps_assoc_resp_ie == NULL) { + DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); + return -EINVAL; } - j = 1; - rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type)); - - DBG_88E("\n ======= RF REG =======\n"); - if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) - path_nums = 1; - else - path_nums = 2; - - for (path = 0; path < path_nums; path++) { - for (i = 0; i < 0x34; i++) { - value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff); - if (j%4 == 1) - DBG_88E("0x%02x ", i); - DBG_88E(" 0x%08x ", value); - if ((j++)%4 == 0) - DBG_88E("\n"); - } - } + memcpy(pmlmepriv->wps_assoc_resp_ie, param->u.bcn_ie.buf, ie_len); } - return 0; + + return ret; } -static int rtw_mp_phypara(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *wrqu, char *extra) +static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len) { - char *input = kmalloc(wrqu->length, GFP_KERNEL); - u32 valxcap; - int rv; - - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->pointer, wrqu->length)) { - kfree(input); - return -EFAULT; - } + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - DBG_88E("%s:iwpriv in =%s\n", __func__, input); + u8 value; - rv = sscanf(input, "xcap =%d", &valxcap); - if (rv != 1) { - kfree(input); + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) return -EINVAL; - } - kfree(input); - return 0; + if (param->u.wpa_param.name != 0) /* dummy test... */ + DBG_88E("%s name(%u) != 0\n", __func__, param->u.wpa_param.name); + value = param->u.wpa_param.value; + + /* use the same definition of hostapd's ignore_broadcast_ssid */ + if (value != 1 && value != 2) + value = 0; + DBG_88E("%s value(%u)\n", __func__, value); + pmlmeinfo->hidden_ssid_mode = value; + return ret; } -static int rtw_mp_SetRFPath(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *param, int len) { - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->data.length, GFP_KERNEL); - u8 bMain = 1, bTurnoff = 1; int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - if (!input) - return -ENOMEM; - if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length)) { - ret = -EFAULT; - goto exit; - } - DBG_88E("%s:iwpriv in =%s\n", __func__, input); - - bMain = strncmp(input, "1", 2); /* strncmp true is 0 */ - bTurnoff = strncmp(input, "0", 3); /* strncmp true is 0 */ - - if (bMain == 0) { - MP_PHY_SetRFPathSwitch(padapter, true); - DBG_88E("%s:PHY_SetRFPathSwitch = true\n", __func__); - } else if (bTurnoff == 0) { - MP_PHY_SetRFPathSwitch(padapter, false); - DBG_88E("%s:PHY_SetRFPathSwitch = false\n", __func__); - } + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; -exit: - kfree(input); + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) + return -EINVAL; + ret = rtw_acl_remove_sta(padapter, param->sta_addr); return ret; } -static int rtw_mp_QueryDrv(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *param, int len) { - struct adapter *padapter = rtw_netdev_priv(dev); - char *input = kmalloc(wrqu->data.length, GFP_KERNEL); - u8 qAutoLoad = 1; - struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter); int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - if (!input) - return -ENOMEM; + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; - if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length)) { - ret = -EFAULT; - goto exit; - } - DBG_88E("%s:iwpriv in =%s\n", __func__, input); + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) + return -EINVAL; + ret = rtw_acl_add_sta(padapter, param->sta_addr); + return ret; +} - qAutoLoad = strncmp(input, "autoload", 8); /* strncmp true is 0 */ +static int rtw_ioctl_set_macaddr_acl(struct net_device *dev, struct ieee_param *param, int len) +{ + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - if (qAutoLoad == 0) { - DBG_88E("%s:qAutoLoad\n", __func__); + if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true) + return -EINVAL; - if (pEEPROM->bautoload_fail_flag) - sprintf(extra, "fail"); - else - sprintf(extra, "ok"); - } - wrqu->data.length = strlen(extra) + 1; + rtw_set_macaddr_acl(padapter, param->u.mlme.command); -exit: - kfree(input); return ret; } -static int rtw_mp_set(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wdata, char *extra) +static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p) { - struct iw_point *wrqu = (struct iw_point *)wdata; - u32 subcmd = wrqu->flags; - struct adapter *padapter = rtw_netdev_priv(dev); + struct ieee_param *param; + int ret = 0; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); - if (padapter == NULL) - return -ENETDOWN; + /* + * this function is expect to call in master mode, which allows no power saving + * so, we just check hw_init_completed + */ - if (extra == NULL) { - wrqu->length = 0; - return -EIO; + if (!padapter->hw_init_completed) { + ret = -EPERM; + goto out; } - switch (subcmd) { - case MP_START: - DBG_88E("set case mp_start\n"); - rtw_mp_start(dev, info, wrqu, extra); - break; - case MP_STOP: - DBG_88E("set case mp_stop\n"); - rtw_mp_stop(dev, info, wrqu, extra); - break; - case MP_BANDWIDTH: - DBG_88E("set case mp_bandwidth\n"); - rtw_mp_bandwidth(dev, info, wrqu, extra); - break; - case MP_RESET_STATS: - DBG_88E("set case MP_RESET_STATS\n"); - rtw_mp_reset_stats(dev, info, wrqu, extra); - break; - case MP_SetRFPathSwh: - DBG_88E("set MP_SetRFPathSwitch\n"); - rtw_mp_SetRFPath(dev, info, wdata, extra); - break; - case CTA_TEST: - DBG_88E("set CTA_TEST\n"); - rtw_cta_test_start(dev, info, wdata, extra); - break; + if (!p->pointer) { + ret = -EINVAL; + goto out; } - return 0; -} + param = (struct ieee_param *)rtw_malloc(p->length); + if (param == NULL) { + ret = -ENOMEM; + goto out; + } -static int rtw_mp_get(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wdata, char *extra) -{ - struct iw_point *wrqu = (struct iw_point *)wdata; - u32 subcmd = wrqu->flags; - struct adapter *padapter = rtw_netdev_priv(dev); - - if (padapter == NULL) - return -ENETDOWN; - if (extra == NULL) { - wrqu->length = 0; - return -EIO; + if (copy_from_user(param, p->pointer, p->length)) { + kfree(param); + ret = -EFAULT; + goto out; } - switch (subcmd) { - case WRITE_REG: - rtw_mp_write_reg(dev, info, wrqu, extra); - break; - case WRITE_RF: - rtw_mp_write_rf(dev, info, wrqu, extra); - break; - case MP_PHYPARA: - DBG_88E("mp_get MP_PHYPARA\n"); - rtw_mp_phypara(dev, info, wrqu, extra); + switch (param->cmd) { + case RTL871X_HOSTAPD_FLUSH: + ret = rtw_hostapd_sta_flush(dev); break; - case MP_CHANNEL: - DBG_88E("set case mp_channel\n"); - rtw_mp_channel(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_ADD_STA: + ret = rtw_add_sta(dev, param); break; - case READ_REG: - DBG_88E("mp_get READ_REG\n"); - rtw_mp_read_reg(dev, info, wrqu, extra); - break; - case READ_RF: - DBG_88E("mp_get READ_RF\n"); - rtw_mp_read_rf(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_REMOVE_STA: + ret = rtw_del_sta(dev, param); break; - case MP_RATE: - DBG_88E("set case mp_rate\n"); - rtw_mp_rate(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_BEACON: + ret = rtw_set_beacon(dev, param, p->length); break; - case MP_TXPOWER: - DBG_88E("set case MP_TXPOWER\n"); - rtw_mp_txpower(dev, info, wrqu, extra); + case RTL871X_SET_ENCRYPTION: + ret = rtw_set_encryption(dev, param, p->length); break; - case MP_ANT_TX: - DBG_88E("set case MP_ANT_TX\n"); - rtw_mp_ant_tx(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_GET_WPAIE_STA: + ret = rtw_get_sta_wpaie(dev, param); break; - case MP_ANT_RX: - DBG_88E("set case MP_ANT_RX\n"); - rtw_mp_ant_rx(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_WPS_BEACON: + ret = rtw_set_wps_beacon(dev, param, p->length); break; - case MP_QUERY: - rtw_mp_trx_query(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_WPS_PROBE_RESP: + ret = rtw_set_wps_probe_resp(dev, param, p->length); break; - case MP_CTX: - DBG_88E("set case MP_CTX\n"); - rtw_mp_ctx(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP: + ret = rtw_set_wps_assoc_resp(dev, param, p->length); break; - case MP_ARX: - DBG_88E("set case MP_ARX\n"); - rtw_mp_arx(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_HIDDEN_SSID: + ret = rtw_set_hidden_ssid(dev, param, p->length); break; - case EFUSE_GET: - DBG_88E("efuse get EFUSE_GET\n"); - rtw_mp_efuse_get(dev, info, wdata, extra); - break; - case MP_DUMP: - DBG_88E("set case MP_DUMP\n"); - rtw_mp_dump(dev, info, wrqu, extra); - break; - case MP_PSD: - DBG_88E("set case MP_PSD\n"); - rtw_mp_psd(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_GET_INFO_STA: + ret = rtw_ioctl_get_sta_data(dev, param, p->length); break; - case MP_THER: - DBG_88E("set case MP_THER\n"); - rtw_mp_thermal(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_SET_MACADDR_ACL: + ret = rtw_ioctl_set_macaddr_acl(dev, param, p->length); break; - case MP_QueryDrvStats: - DBG_88E("mp_get MP_QueryDrvStats\n"); - rtw_mp_QueryDrv (dev, info, wdata, extra); + case RTL871X_HOSTAPD_ACL_ADD_STA: + ret = rtw_ioctl_acl_add_sta(dev, param, p->length); break; - case MP_PWRTRK: - DBG_88E("set case MP_PWRTRK\n"); - rtw_mp_pwrtrk(dev, info, wrqu, extra); + case RTL871X_HOSTAPD_ACL_REMOVE_STA: + ret = rtw_ioctl_acl_remove_sta(dev, param, p->length); break; - case EFUSE_SET: - DBG_88E("set case efuse set\n"); - rtw_mp_efuse_set(dev, info, wdata, extra); + default: + DBG_88E("Unknown hostapd request: %d\n", param->cmd); + ret = -EOPNOTSUPP; break; } - msleep(10); /* delay 5ms for sending pkt before exit adb shell operation */ - return 0; -} - -static int rtw_tdls(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return 0; + if (ret == 0 && copy_to_user(p->pointer, param, p->length)) + ret = -EFAULT; + kfree(param); +out: + return ret; } +#endif -static int rtw_tdls_get(struct net_device *dev, +#include +static int rtw_wx_set_priv(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - return 0; -} - -static int rtw_test( - struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) + union iwreq_data *awrq, + char *extra) { - u32 len; - u8 *pbuf, *pch; - char *ptmp; - u8 *delim = ","; + int ret = 0; + int len = 0; + char *ext; + struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); + struct iw_point *dwrq = (struct iw_point *)awrq; - DBG_88E("+%s\n", __func__); - len = wrqu->data.length; + if (dwrq->length == 0) + return -EFAULT; - pbuf = kzalloc(len, GFP_KERNEL); - if (pbuf == NULL) { - DBG_88E("%s: no memory!\n", __func__); + len = dwrq->length; + ext = vmalloc(len); + if (!ext) return -ENOMEM; - } - if (copy_from_user(pbuf, wrqu->data.pointer, len)) { - kfree(pbuf); - DBG_88E("%s: copy from user fail!\n", __func__); + if (copy_from_user(ext, dwrq->pointer, len)) { + vfree(ext); return -EFAULT; } - DBG_88E("%s: string =\"%s\"\n", __func__, pbuf); - ptmp = (char *)pbuf; - pch = strsep(&ptmp, delim); - if ((pch == NULL) || (strlen(pch) == 0)) { - kfree(pbuf); - DBG_88E("%s: parameter error(level 1)!\n", __func__); - return -EFAULT; + /* added for wps2.0 @20110524 */ + if (dwrq->flags == 0x8766 && len > 8) { + u32 cp_sz; + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + u8 *probereq_wpsie = ext; + int probereq_wpsie_len = len; + u8 wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; + + if ((_VENDOR_SPECIFIC_IE_ == probereq_wpsie[0]) && + (!memcmp(&probereq_wpsie[2], wps_oui, 4))) { + cp_sz = probereq_wpsie_len > MAX_WPS_IE_LEN ? MAX_WPS_IE_LEN : probereq_wpsie_len; + + pmlmepriv->wps_probe_req_ie_len = 0; + kfree(pmlmepriv->wps_probe_req_ie); + pmlmepriv->wps_probe_req_ie = NULL; + + pmlmepriv->wps_probe_req_ie = rtw_malloc(cp_sz); + if (pmlmepriv->wps_probe_req_ie == NULL) { + pr_info("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__); + ret = -EINVAL; + goto FREE_EXT; + } + memcpy(pmlmepriv->wps_probe_req_ie, probereq_wpsie, cp_sz); + pmlmepriv->wps_probe_req_ie_len = cp_sz; + } + goto FREE_EXT; } - kfree(pbuf); - return 0; + + if (len >= WEXT_CSCAN_HEADER_SIZE && + !memcmp(ext, WEXT_CSCAN_HEADER, WEXT_CSCAN_HEADER_SIZE)) { + ret = rtw_wx_set_scan(dev, info, awrq, ext); + goto FREE_EXT; + } + +FREE_EXT: + + vfree(ext); + + return ret; } static iw_handler rtw_handlers[] = { @@ -7490,175 +3153,6 @@ static iw_handler rtw_handlers[] = { NULL, /*---hole---*/ }; -static const struct iw_priv_args rtw_private_args[] = { - { - SIOCIWFIRSTPRIV + 0x0, - IW_PRIV_TYPE_CHAR | 0x7FF, 0, "write" - }, - { - SIOCIWFIRSTPRIV + 0x1, - IW_PRIV_TYPE_CHAR | 0x7FF, - IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "read" - }, - { - SIOCIWFIRSTPRIV + 0x2, 0, 0, "driver_ext" - }, - { - SIOCIWFIRSTPRIV + 0x3, 0, 0, "mp_ioctl" - }, - { - SIOCIWFIRSTPRIV + 0x4, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "apinfo" - }, - { - SIOCIWFIRSTPRIV + 0x5, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "setpid" - }, - { - SIOCIWFIRSTPRIV + 0x6, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_start" - }, - { - SIOCIWFIRSTPRIV + 0x7, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "get_sensitivity" - }, - { - SIOCIWFIRSTPRIV + 0x8, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_prob_req_ie" - }, - { - SIOCIWFIRSTPRIV + 0x9, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_assoc_req_ie" - }, - - { - SIOCIWFIRSTPRIV + 0xA, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "channel_plan" - }, - - { - SIOCIWFIRSTPRIV + 0xB, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "dbg" - }, - { - SIOCIWFIRSTPRIV + 0xC, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "rfw" - }, - { - SIOCIWFIRSTPRIV + 0xD, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rfr" - }, - { - SIOCIWFIRSTPRIV + 0x10, - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "p2p_set" - }, - { - SIOCIWFIRSTPRIV + 0x11, - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN, "p2p_get" - }, - { - SIOCIWFIRSTPRIV + 0x12, - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IFNAMSIZ, "p2p_get2" - }, - {SIOCIWFIRSTPRIV + 0x13, IW_PRIV_TYPE_CHAR | 128, 0, "NULL"}, - { - SIOCIWFIRSTPRIV + 0x14, - IW_PRIV_TYPE_CHAR | 64, 0, "tdls" - }, - { - SIOCIWFIRSTPRIV + 0x15, - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN, "tdls_get" - }, - { - SIOCIWFIRSTPRIV + 0x16, - IW_PRIV_TYPE_CHAR | 64, 0, "pm_set" - }, - - {SIOCIWFIRSTPRIV + 0x18, IW_PRIV_TYPE_CHAR | IFNAMSIZ, 0, "rereg_nd_name"}, - - {SIOCIWFIRSTPRIV + 0x1A, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set"}, - {SIOCIWFIRSTPRIV + 0x1B, IW_PRIV_TYPE_CHAR | 128, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get"}, - {SIOCIWFIRSTPRIV + 0x1D, IW_PRIV_TYPE_CHAR | 40, IW_PRIV_TYPE_CHAR | 0x7FF, "test" - }, - - {SIOCIWFIRSTPRIV + 0x0E, IW_PRIV_TYPE_CHAR | 1024, 0, ""}, /* set */ - {SIOCIWFIRSTPRIV + 0x0F, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, ""},/* get */ -/* --- sub-ioctls definitions --- */ - - {MP_START, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start"}, /* set */ - {MP_PHYPARA, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_phypara"},/* get */ - {MP_STOP, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_stop"}, /* set */ - {MP_CHANNEL, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_channel"},/* get */ - {MP_BANDWIDTH, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_bandwidth"}, /* set */ - {MP_RATE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate"},/* get */ - {MP_RESET_STATS, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_reset_stats"}, - {MP_QUERY, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_query"}, /* get */ - {READ_REG, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg"}, - {MP_RATE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate"}, - {READ_RF, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_rf"}, - {MP_PSD, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_psd"}, - {MP_DUMP, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_dump"}, - {MP_TXPOWER, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_txpower"}, - {MP_ANT_TX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_tx"}, - {MP_ANT_RX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_rx"}, - {WRITE_REG, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_reg"}, - {WRITE_RF, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_rf"}, - {MP_CTX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ctx"}, - {MP_ARX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_arx"}, - {MP_THER, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"}, - {EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_set"}, - {EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get"}, - {MP_PWRTRK, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_pwrtrk"}, - {MP_QueryDrvStats, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_drvquery"}, - {MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, /* mp_ioctl */ - {MP_SetRFPathSwh, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_setrfpath"}, - {CTA_TEST, IW_PRIV_TYPE_CHAR | 1024, 0, "cta_test"}, -}; - -static iw_handler rtw_private_handler[] = { -rtw_wx_write32, /* 0x00 */ -rtw_wx_read32, /* 0x01 */ -rtw_drvext_hdl, /* 0x02 */ -rtw_mp_ioctl_hdl, /* 0x03 */ - -/* for MM DTV platform */ - rtw_get_ap_info, /* 0x04 */ - - rtw_set_pid, /* 0x05 */ - rtw_wps_start, /* 0x06 */ - - rtw_wx_get_sensitivity, /* 0x07 */ - rtw_wx_set_mtk_wps_probe_ie, /* 0x08 */ - rtw_wx_set_mtk_wps_ie, /* 0x09 */ - -/* Set Channel depend on the country code */ - rtw_wx_set_channel_plan, /* 0x0A */ - - rtw_dbg_port, /* 0x0B */ - rtw_wx_write_rf, /* 0x0C */ - rtw_wx_read_rf, /* 0x0D */ - - rtw_mp_set, /* 0x0E */ - rtw_mp_get, /* 0x0F */ - rtw_p2p_set, /* 0x10 */ - rtw_p2p_get, /* 0x11 */ - rtw_p2p_get2, /* 0x12 */ - - NULL, /* 0x13 */ - rtw_tdls, /* 0x14 */ - rtw_tdls_get, /* 0x15 */ - - rtw_pm_set, /* 0x16 */ - rtw_wx_priv_null, /* 0x17 */ - rtw_rereg_nd_name, /* 0x18 */ - rtw_wx_priv_null, /* 0x19 */ - - rtw_mp_efuse_set, /* 0x1A */ - rtw_mp_efuse_get, /* 0x1B */ - NULL, /* 0x1C is reserved for hostapd */ - rtw_test, /* 0x1D */ -}; - static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev) { struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); @@ -7687,347 +3181,9 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev) struct iw_handler_def rtw_handlers_def = { .standard = rtw_handlers, .num_standard = sizeof(rtw_handlers) / sizeof(iw_handler), - .private = rtw_private_handler, - .private_args = (struct iw_priv_args *)rtw_private_args, - .num_private = sizeof(rtw_private_handler) / sizeof(iw_handler), - .num_private_args = sizeof(rtw_private_args) / sizeof(struct iw_priv_args), .get_wireless_stats = rtw_get_wireless_stats, }; -/* copy from net/wireless/wext.c start */ -/* ---------------------------------------------------------------- */ -/* - * Calculate size of private arguments - */ -static const char iw_priv_type_size[] = { - 0, /* IW_PRIV_TYPE_NONE */ - 1, /* IW_PRIV_TYPE_BYTE */ - 1, /* IW_PRIV_TYPE_CHAR */ - 0, /* Not defined */ - sizeof(__u32), /* IW_PRIV_TYPE_INT */ - sizeof(struct iw_freq), /* IW_PRIV_TYPE_FLOAT */ - sizeof(struct sockaddr), /* IW_PRIV_TYPE_ADDR */ - 0, /* Not defined */ -}; - -static int get_priv_size(__u16 args) -{ - int num = args & IW_PRIV_SIZE_MASK; - int type = (args & IW_PRIV_TYPE_MASK) >> 12; - - return num * iw_priv_type_size[type]; -} -/* copy from net/wireless/wext.c end */ - -static int rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq_data) -{ - int err = 0; - u8 *input = NULL; - u32 input_len = 0; - const char delim[] = " "; - u8 *output = NULL; - u32 output_len = 0; - u32 count = 0; - u8 *buffer = NULL; - u32 buffer_len = 0; - char *ptr = NULL; - u8 cmdname[17] = {0}; /* IFNAMSIZ+1 */ - u32 cmdlen; - s32 len; - u8 *extra = NULL; - u32 extra_size = 0; - int rv; - - s32 k; - const iw_handler *priv; /* Private ioctl */ - const struct iw_priv_args *priv_args; /* Private ioctl description */ - u32 num_priv_args; /* Number of descriptions */ - iw_handler handler; - int temp; - int subcmd = 0; /* sub-ioctl index */ - int offset = 0; /* Space for sub-ioctl index */ - - union iwreq_data wdata; - - memcpy(&wdata, wrq_data, sizeof(wdata)); - - input_len = wdata.data.length; - input = kzalloc(input_len, GFP_KERNEL); - if (NULL == input) - return -ENOMEM; - if (copy_from_user(input, wdata.data.pointer, input_len)) { - err = -EFAULT; - goto exit; - } - ptr = input; - len = input_len; - - rv = sscanf(ptr, "%16s", cmdname); - if (rv != 1) { - err = -EINVAL; - goto exit; - } - cmdlen = strlen(cmdname); - DBG_88E("%s: cmd =%s\n", __func__, cmdname); - - /* skip command string */ - if (cmdlen > 0) - cmdlen += 1; /* skip one space */ - ptr += cmdlen; - len -= cmdlen; - DBG_88E("%s: parameters =%s\n", __func__, ptr); - - priv = rtw_private_handler; - priv_args = rtw_private_args; - num_priv_args = sizeof(rtw_private_args) / sizeof(struct iw_priv_args); - - if (num_priv_args == 0) { - err = -EOPNOTSUPP; - goto exit; - } - - /* Search the correct ioctl */ - k = -1; - while ((++k < num_priv_args) && strcmp(priv_args[k].name, cmdname)); - - /* If not found... */ - if (k == num_priv_args) { - err = -EOPNOTSUPP; - goto exit; - } - - /* Watch out for sub-ioctls ! */ - if (priv_args[k].cmd < SIOCDEVPRIVATE) { - int j = -1; - - /* Find the matching *real* ioctl */ - while ((++j < num_priv_args) && ((priv_args[j].name[0] != '\0') || - (priv_args[j].set_args != priv_args[k].set_args) || - (priv_args[j].get_args != priv_args[k].get_args))); - - /* If not found... */ - if (j == num_priv_args) { - err = -EINVAL; - goto exit; - } - - /* Save sub-ioctl number */ - subcmd = priv_args[k].cmd; - /* Reserve one int (simplify alignment issues) */ - offset = sizeof(__u32); - /* Use real ioctl definition from now on */ - k = j; - } - - buffer = kzalloc(4096, GFP_KERNEL); - if (NULL == buffer) { - err = -ENOMEM; - goto exit; - } - - /* If we have to set some data */ - if ((priv_args[k].set_args & IW_PRIV_TYPE_MASK) && - (priv_args[k].set_args & IW_PRIV_SIZE_MASK)) { - u8 *str; - - switch (priv_args[k].set_args & IW_PRIV_TYPE_MASK) { - case IW_PRIV_TYPE_BYTE: - /* Fetch args */ - count = 0; - do { - str = strsep(&ptr, delim); - if (NULL == str) - break; - sscanf(str, "%i", &temp); - buffer[count++] = (u8)temp; - } while (1); - buffer_len = count; - /* Number of args to fetch */ - wdata.data.length = count; - if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK)) - wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK; - break; - case IW_PRIV_TYPE_INT: - /* Fetch args */ - count = 0; - do { - str = strsep(&ptr, delim); - if (NULL == str) - break; - sscanf(str, "%i", &temp); - ((s32 *)buffer)[count++] = (s32)temp; - } while (1); - buffer_len = count * sizeof(s32); - /* Number of args to fetch */ - wdata.data.length = count; - if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK)) - wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK; - break; - case IW_PRIV_TYPE_CHAR: - if (len > 0) { - /* Size of the string to fetch */ - wdata.data.length = len; - if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK)) - wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK; - - /* Fetch string */ - memcpy(buffer, ptr, wdata.data.length); - } else { - wdata.data.length = 1; - buffer[0] = '\0'; - } - buffer_len = wdata.data.length; - break; - default: - DBG_88E("%s: Not yet implemented...\n", __func__); - err = -1; - goto exit; - } - - if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) && - (wdata.data.length != (priv_args[k].set_args & IW_PRIV_SIZE_MASK))) { - DBG_88E("%s: The command %s needs exactly %d argument(s)...\n", - __func__, cmdname, priv_args[k].set_args & IW_PRIV_SIZE_MASK); - err = -EINVAL; - goto exit; - } - } else { - /* if args to set */ - wdata.data.length = 0L; - } - - /* Those two tests are important. They define how the driver - * will have to handle the data */ - if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) && - ((get_priv_size(priv_args[k].set_args) + offset) <= IFNAMSIZ)) { - /* First case : all SET args fit within wrq */ - if (offset) - wdata.mode = subcmd; - memcpy(wdata.name + offset, buffer, IFNAMSIZ - offset); - } else { - if ((priv_args[k].set_args == 0) && - (priv_args[k].get_args & IW_PRIV_SIZE_FIXED) && - (get_priv_size(priv_args[k].get_args) <= IFNAMSIZ)) { - /* Second case : no SET args, GET args fit within wrq */ - if (offset) - wdata.mode = subcmd; - } else { - /* Third case : args won't fit in wrq, or variable number of args */ - if (copy_to_user(wdata.data.pointer, buffer, buffer_len)) { - err = -EFAULT; - goto exit; - } - wdata.data.flags = subcmd; - } - } - - kfree(input); - input = NULL; - - extra_size = 0; - if (IW_IS_SET(priv_args[k].cmd)) { - /* Size of set arguments */ - extra_size = get_priv_size(priv_args[k].set_args); - - /* Does it fits in iwr ? */ - if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) && - ((extra_size + offset) <= IFNAMSIZ)) - extra_size = 0; - } else { - /* Size of get arguments */ - extra_size = get_priv_size(priv_args[k].get_args); - - /* Does it fits in iwr ? */ - if ((priv_args[k].get_args & IW_PRIV_SIZE_FIXED) && - (extra_size <= IFNAMSIZ)) - extra_size = 0; - } - - if (extra_size == 0) { - extra = (u8 *)&wdata; - kfree(buffer); - buffer = NULL; - } else { - extra = buffer; - } - - handler = priv[priv_args[k].cmd - SIOCIWFIRSTPRIV]; - err = handler(dev, NULL, &wdata, extra); - - /* If we have to get some data */ - if ((priv_args[k].get_args & IW_PRIV_TYPE_MASK) && - (priv_args[k].get_args & IW_PRIV_SIZE_MASK)) { - int j; - int n = 0; /* number of args */ - u8 str[20] = {0}; - - /* Check where is the returned data */ - if ((priv_args[k].get_args & IW_PRIV_SIZE_FIXED) && - (get_priv_size(priv_args[k].get_args) <= IFNAMSIZ)) - n = priv_args[k].get_args & IW_PRIV_SIZE_MASK; - else - n = wdata.data.length; - - output = kzalloc(4096, GFP_KERNEL); - if (NULL == output) { - err = -ENOMEM; - goto exit; - } - switch (priv_args[k].get_args & IW_PRIV_TYPE_MASK) { - case IW_PRIV_TYPE_BYTE: - /* Display args */ - for (j = 0; j < n; j++) { - sprintf(str, "%d ", extra[j]); - len = strlen(str); - output_len = strlen(output); - if ((output_len + len + 1) > 4096) { - err = -E2BIG; - goto exit; - } - memcpy(output+output_len, str, len); - } - break; - case IW_PRIV_TYPE_INT: - /* Display args */ - for (j = 0; j < n; j++) { - sprintf(str, "%d ", ((__s32 *)extra)[j]); - len = strlen(str); - output_len = strlen(output); - if ((output_len + len + 1) > 4096) { - err = -E2BIG; - goto exit; - } - memcpy(output+output_len, str, len); - } - break; - case IW_PRIV_TYPE_CHAR: - /* Display args */ - memcpy(output, extra, n); - break; - default: - DBG_88E("%s: Not yet implemented...\n", __func__); - err = -1; - goto exit; - } - - output_len = strlen(output) + 1; - wrq_data->data.length = output_len; - if (copy_to_user(wrq_data->data.pointer, output, output_len)) { - err = -EFAULT; - goto exit; - } - } else { - /* if args to set */ - wrq_data->data.length = 0; - } - -exit: - kfree(input); - kfree(buffer); - kfree(output); - return err; -} - #include int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { @@ -8043,9 +3199,6 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ret = rtw_hostapd_ioctl(dev, &wrq->u.data); break; #endif /* CONFIG_88EU_AP_MODE */ - case SIOCDEVPRIVATE: - ret = rtw_ioctl_wext_private(dev, &wrq->u); - break; case (SIOCDEVPRIVATE+1): ret = rtw_android_priv_cmd(dev, rq, cmd); break; -- cgit From 6609ed9a3313f1d1ad66de4c265c25a35c175d2a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:24 +0530 Subject: staging: rtl8188eu: Remove files rtw_mp_ioctl.[c,h] files are not required after removal of private ioctl handlers. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c | 1430 ---------------------- drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h | 340 ----- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 1 - 4 files changed, 1772 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c delete mode 100644 drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 2745076f930f..841e4354635f 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -10,7 +10,6 @@ r8188eu-y := \ core/rtw_mlme.o \ core/rtw_mlme_ext.o \ core/rtw_mp.o \ - core/rtw_mp_ioctl.o \ core/rtw_pwrctrl.o \ core/rtw_p2p.o \ core/rtw_recv.o \ diff --git a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c b/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c deleted file mode 100644 index 10c9b6d22742..000000000000 --- a/drivers/staging/rtl8188eu/core/rtw_mp_ioctl.c +++ /dev/null @@ -1,1430 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTW_MP_IOCTL_C_ - -#include -#include -#include -#include -/* include */ -#include - - -/* rtl8188eu_oid_rtl_seg_81_85 section start **************** */ -int rtl8188eu_oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->information_buf_len < sizeof(u8)) - return NDIS_STATUS_INVALID_LENGTH; - - if (poid_par_priv->type_of_oid == SET_OID) { - Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf; - } else if (poid_par_priv->type_of_oid == QUERY_OID) { - *(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - RT_TRACE(_module_mp_, _drv_info_, ("-query Wireless Mode=%d\n", Adapter->registrypriv.wireless_mode)); - } else { - status = NDIS_STATUS_NOT_ACCEPTED; - } - - - return status; -} -/* rtl8188eu_oid_rtl_seg_81_87_80 section start **************** */ -int rtl8188eu_oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv) -{ - struct bb_reg_param *pbbreg; - u16 offset; - u32 value; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_write_bb_reg_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param)) - return NDIS_STATUS_INVALID_LENGTH; - - pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf); - - offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */ - if (offset < BB_REG_BASE_ADDR) - offset |= BB_REG_BASE_ADDR; - - value = pbbreg->value; - - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_write_bb_reg_hdl: offset=0x%03X value=0x%08X\n", - offset, value)); - - _irqlevel_changed_(&oldirql, LOWER); - write_bbreg(Adapter, offset, 0xFFFFFFFF, value); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv) -{ - struct bb_reg_param *pbbreg; - u16 offset; - u32 value; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_read_bb_reg_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param)) - return NDIS_STATUS_INVALID_LENGTH; - - pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf); - - offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */ - if (offset < BB_REG_BASE_ADDR) - offset |= BB_REG_BASE_ADDR; - - _irqlevel_changed_(&oldirql, LOWER); - value = read_bbreg(Adapter, offset, 0xFFFFFFFF); - _irqlevel_changed_(&oldirql, RAISE); - - pbbreg->value = value; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - - RT_TRACE(_module_mp_, _drv_notice_, - ("-rtl8188eu_oid_rt_pro_read_bb_reg_hdl: offset=0x%03X value:0x%08X\n", - offset, value)); - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv) -{ - struct rf_reg_param *pbbreg; - u8 path; - u8 offset; - u32 value; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_write_rf_reg_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param)) - return NDIS_STATUS_INVALID_LENGTH; - - pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf); - - if (pbbreg->path >= MAX_RF_PATH_NUMS) - return NDIS_STATUS_NOT_ACCEPTED; - if (pbbreg->offset > 0xFF) - return NDIS_STATUS_NOT_ACCEPTED; - if (pbbreg->value > 0xFFFFF) - return NDIS_STATUS_NOT_ACCEPTED; - - path = (u8)pbbreg->path; - offset = (u8)pbbreg->offset; - value = pbbreg->value; - - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_write_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n", - path, offset, value)); - - _irqlevel_changed_(&oldirql, LOWER); - write_rfreg(Adapter, path, offset, value); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv) -{ - struct rf_reg_param *pbbreg; - u8 path; - u8 offset; - u32 value; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - int status = NDIS_STATUS_SUCCESS; - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_read_rf_reg_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param)) - return NDIS_STATUS_INVALID_LENGTH; - - pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf); - - if (pbbreg->path >= MAX_RF_PATH_NUMS) - return NDIS_STATUS_NOT_ACCEPTED; - if (pbbreg->offset > 0xFF) - return NDIS_STATUS_NOT_ACCEPTED; - - path = (u8)pbbreg->path; - offset = (u8)pbbreg->offset; - - _irqlevel_changed_(&oldirql, LOWER); - value = read_rfreg(Adapter, path, offset); - _irqlevel_changed_(&oldirql, RAISE); - - pbbreg->value = value; - - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - - RT_TRACE(_module_mp_, _drv_notice_, - ("-rtl8188eu_oid_rt_pro_read_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n", - path, offset, value)); - - - return status; -} -/* rtl8188eu_oid_rtl_seg_81_87_00 section end**************** */ -/* */ - -/* rtl8188eu_oid_rtl_seg_81_80_00 section start **************** */ -/* */ -int rtl8188eu_oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 ratevalue;/* 4 */ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, - ("+rtl8188eu_oid_rt_pro_set_data_rate_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - ratevalue = *((u32 *)poid_par_priv->information_buf);/* 4 */ - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_set_data_rate_hdl: data rate idx=%d\n", ratevalue)); - if (ratevalue >= MPT_RATE_LAST) - return NDIS_STATUS_INVALID_DATA; - - Adapter->mppriv.rateidx = ratevalue; - - _irqlevel_changed_(&oldirql, LOWER); - SetDataRate(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 mode; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_start_test_hdl\n")); - - if (Adapter->registrypriv.mp_mode == 0) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - - /* IQCalibrateBcut(Adapter); */ - - mode = *((u32 *)poid_par_priv->information_buf); - Adapter->mppriv.mode = mode;/* 1 for loopback */ - - if (mp_start_test(Adapter) == _FAIL) { - status = NDIS_STATUS_NOT_ACCEPTED; - goto exit; - } - -exit: - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_notice_, ("-rtl8188eu_oid_rt_pro_start_test_hdl: mp_mode=%d\n", Adapter->mppriv.mode)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_STOP_TEST\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - mp_stop_test(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_notice_, ("-Set OID_RT_PRO_STOP_TEST\n")); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 Channel; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl\n")); - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - if (poid_par_priv->type_of_oid == QUERY_OID) { - *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel; - return NDIS_STATUS_SUCCESS; - } - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - Channel = *((u32 *)poid_par_priv->information_buf); - RT_TRACE(_module_mp_, _drv_notice_, ("rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl: Channel=%d\n", Channel)); - if (Channel > 14) - return NDIS_STATUS_NOT_ACCEPTED; - Adapter->mppriv.channel = Channel; - - _irqlevel_changed_(&oldirql, LOWER); - SetChannel(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv) -{ - u16 bandwidth; - u16 channel_offset; - int status = NDIS_STATUS_SUCCESS; - struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, - ("+rtl8188eu_oid_rt_set_bandwidth_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - bandwidth = *((u32 *)poid_par_priv->information_buf);/* 4 */ - channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE; - - if (bandwidth != HT_CHANNEL_WIDTH_40) - bandwidth = HT_CHANNEL_WIDTH_20; - padapter->mppriv.bandwidth = (u8)bandwidth; - padapter->mppriv.prime_channel_offset = (u8)channel_offset; - - _irqlevel_changed_(&oldirql, LOWER); - SetBandwidth(padapter); - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_notice_, - ("-rtl8188eu_oid_rt_set_bandwidth_hdl: bandwidth=%d channel_offset=%d\n", - bandwidth, channel_offset)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 antenna; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_set_antenna_bb_hdl\n")); - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - if (poid_par_priv->type_of_oid == SET_OID) { - antenna = *(u32 *)poid_par_priv->information_buf; - - Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16); - Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF); - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_set_antenna_bb_hdl: tx_ant=0x%04x rx_ant=0x%04x\n", - Adapter->mppriv.antenna_tx, Adapter->mppriv.antenna_rx)); - - _irqlevel_changed_(&oldirql, LOWER); - SetAntenna(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - } else { - antenna = (Adapter->mppriv.antenna_tx << 16)|Adapter->mppriv.antenna_rx; - *(u32 *)poid_par_priv->information_buf = antenna; - } - - - return status; -} - -int rtl8188eu_oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 tx_pwr_idx; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, ("+rtl8188eu_oid_rt_pro_set_tx_power_control_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - tx_pwr_idx = *((u32 *)poid_par_priv->information_buf); - if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE) - return NDIS_STATUS_NOT_ACCEPTED; - - Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx; - - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_set_tx_power_control_hdl: idx=0x%2x\n", - Adapter->mppriv.txpoweridx)); - - _irqlevel_changed_(&oldirql, LOWER); - SetTxPower(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} - -/* */ -/* rtl8188eu_oid_rtl_seg_81_80_20 section start **************** */ -/* */ -int rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - - if (poid_par_priv->information_buf_len == sizeof(u32)) { - *(u32 *)poid_par_priv->information_buf = Adapter->mppriv.tx_pktcount; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - } else { - status = NDIS_STATUS_INVALID_LENGTH; - } - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - RT_TRACE(_module_mp_, _drv_alert_, ("===> rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl.\n")); - if (poid_par_priv->information_buf_len == sizeof(u32)) { - *(u32 *)poid_par_priv->information_buf = Adapter->mppriv.rx_pktcount; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - RT_TRACE(_module_mp_, _drv_alert_, ("recv_ok:%d\n", Adapter->mppriv.rx_pktcount)); - } else { - status = NDIS_STATUS_INVALID_LENGTH; - } - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - RT_TRACE(_module_mp_, _drv_alert_, ("===> rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl.\n")); - if (poid_par_priv->information_buf_len == sizeof(u32)) { - *(u32 *)poid_par_priv->information_buf = Adapter->mppriv.rx_crcerrpktcount; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - RT_TRACE(_module_mp_, _drv_alert_, ("recv_err:%d\n", Adapter->mppriv.rx_crcerrpktcount)); - } else { - status = NDIS_STATUS_INVALID_LENGTH; - } - - - return status; -} -/* */ - -int rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != SET_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - - RT_TRACE(_module_mp_, _drv_alert_, ("===> rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl.\n")); - Adapter->mppriv.tx_pktcount = 0; - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != SET_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - - if (poid_par_priv->information_buf_len == sizeof(u32)) { - Adapter->mppriv.rx_pktcount = 0; - Adapter->mppriv.rx_crcerrpktcount = 0; - } else { - status = NDIS_STATUS_INVALID_LENGTH; - } - - - return status; -} -/* */ -int rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != SET_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - - _irqlevel_changed_(&oldirql, LOWER); - ResetPhyRxPktCount(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, ("+rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - _irqlevel_changed_(&oldirql, LOWER); - *(u32 *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - - RT_TRACE(_module_mp_, _drv_notice_, ("-rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl: recv_ok=%d\n", *(u32 *)poid_par_priv->information_buf)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, ("+rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - - if (poid_par_priv->information_buf_len != sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - _irqlevel_changed_(&oldirql, LOWER); - *(u32 *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter); - _irqlevel_changed_(&oldirql, RAISE); - - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - - RT_TRACE(_module_mp_, _drv_info_, - ("-rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl: recv_err =%d\n", - *(u32 *)poid_par_priv->information_buf)); - - - return status; -} -/* rtl8188eu_oid_rtl_seg_81_80_20 section end **************** */ -int rtl8188eu_oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 bStartTest; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_set_continuous_tx_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - bStartTest = *((u32 *)poid_par_priv->information_buf); - - _irqlevel_changed_(&oldirql, LOWER); - SetContinuousTx(Adapter, (u8)bStartTest); - if (bStartTest) { - struct mp_priv *pmp_priv = &Adapter->mppriv; - if (pmp_priv->tx.stop == 0) { - pmp_priv->tx.stop = 1; - DBG_88E("%s: pkt tx is running...\n", __func__); - msleep(5); - } - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = 1; - SetPacketTx(Adapter); - } - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} - -int rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 bStartTest; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_alert_, ("+rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - bStartTest = *((u32 *)poid_par_priv->information_buf); - - _irqlevel_changed_(&oldirql, LOWER); - SetSingleCarrierTx(Adapter, (u8)bStartTest); - if (bStartTest) { - struct mp_priv *pmp_priv = &Adapter->mppriv; - if (pmp_priv->tx.stop == 0) { - pmp_priv->tx.stop = 1; - DBG_88E("%s: pkt tx is running...\n", __func__); - msleep(5); - } - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = 1; - SetPacketTx(Adapter); - } - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} - -int rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 bStartTest; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - bStartTest = *((u32 *)poid_par_priv->information_buf); - - _irqlevel_changed_(&oldirql, LOWER); - SetCarrierSuppressionTx(Adapter, (u8)bStartTest); - if (bStartTest) { - struct mp_priv *pmp_priv = &Adapter->mppriv; - if (pmp_priv->tx.stop == 0) { - pmp_priv->tx.stop = 1; - DBG_88E("%s: pkt tx is running...\n", __func__); - msleep(5); - } - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = 1; - SetPacketTx(Adapter); - } - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} - -int rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv) -{ - u32 bStartTest; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_alert_, ("+rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - bStartTest = *((u32 *)poid_par_priv->information_buf); - - _irqlevel_changed_(&oldirql, LOWER); - SetSingleToneTx(Adapter, (u8)bStartTest); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} - -int rtl8188eu_oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv) -{ - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - int status = NDIS_STATUS_SUCCESS; - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, NULL); - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* rtl8188eu_oid_rtl_seg_81_80_00 section end **************** */ -/* */ -int rtl8188eu_oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv) -{ - struct mp_rw_reg *RegRWStruct; - u32 offset, width; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, - ("+rtl8188eu_oid_rt_pro_read_register_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf; - offset = RegRWStruct->offset; - width = RegRWStruct->width; - - if (offset > 0xFFF) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - - switch (width) { - case 1: - RegRWStruct->value = usb_read8(Adapter, offset); - break; - case 2: - RegRWStruct->value = usb_read16(Adapter, offset); - break; - default: - width = 4; - RegRWStruct->value = usb_read32(Adapter, offset); - break; - } - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_read_register_hdl: offset:0x%04X value:0x%X\n", - offset, RegRWStruct->value)); - - _irqlevel_changed_(&oldirql, RAISE); - - *poid_par_priv->bytes_rw = width; - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv) -{ - struct mp_rw_reg *RegRWStruct; - u32 offset, width, value; - int status = NDIS_STATUS_SUCCESS; - struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_info_, - ("+rtl8188eu_oid_rt_pro_write_register_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf; - offset = RegRWStruct->offset; - width = RegRWStruct->width; - value = RegRWStruct->value; - - if (offset > 0xFFF) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - - switch (RegRWStruct->width) { - case 1: - if (value > 0xFF) { - status = NDIS_STATUS_NOT_ACCEPTED; - break; - } - usb_write8(padapter, offset, (u8)value); - break; - case 2: - if (value > 0xFFFF) { - status = NDIS_STATUS_NOT_ACCEPTED; - break; - } - usb_write16(padapter, offset, (u16)value); - break; - case 4: - usb_write32(padapter, offset, value); - break; - default: - status = NDIS_STATUS_NOT_ACCEPTED; - break; - } - - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_info_, - ("-rtl8188eu_oid_rt_pro_write_register_hdl: offset=0x%08X width=%d value=0x%X\n", - offset, width, value)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -/* */ -int rtl8188eu_oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -/* */ -int rtl8188eu_oid_rt_pro_write16_eeprom_hdl (struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_wr_attrib_mem_hdl (struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv) -{ - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - int status = NDIS_STATUS_SUCCESS; - - - RT_TRACE(_module_mp_, _drv_notice_, ("+OID_RT_PRO_SET_DATA_RATE_EX\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, LOWER); - - if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS) - status = NDIS_STATUS_NOT_ACCEPTED; - - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - u8 thermal = 0; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_get_thermal_meter_hdl\n")); - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - _irqlevel_changed_(&oldirql, LOWER); - GetThermalMeter(Adapter, &thermal); - _irqlevel_changed_(&oldirql, RAISE); - - *(u32 *)poid_par_priv->information_buf = (u32)thermal; - *poid_par_priv->bytes_rw = sizeof(u32); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - - if (poid_par_priv->information_buf_len < sizeof(u8)) - return NDIS_STATUS_INVALID_LENGTH; - - _irqlevel_changed_(&oldirql, LOWER); - if (poid_par_priv->type_of_oid == SET_OID) { - u8 enable; - - enable = *(u8 *)poid_par_priv->information_buf; - RT_TRACE(_module_mp_, _drv_notice_, - ("+rtl8188eu_oid_rt_pro_set_power_tracking_hdl: enable =%d\n", enable)); - - SetPowerTracking(Adapter, enable); - } else { - GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf); - } - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} -/* */ -int rtl8188eu_oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -/* rtl8188eu_oid_rtl_seg_87_12_00 section start **************** */ -int rtl8188eu_oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv) -{ - return NDIS_STATUS_SUCCESS; -} -/* */ -int rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv) -{ - struct efuse_access_struct *pefuse; - u8 *data; - u16 addr = 0, cnts = 0, max_available_size = 0; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(struct efuse_access_struct)) - return NDIS_STATUS_INVALID_LENGTH; - - pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf; - addr = pefuse->start_addr; - cnts = pefuse->cnts; - data = pefuse->data; - - RT_TRACE(_module_mp_, _drv_notice_, - ("+rtl8188eu_oid_rt_pro_read_efuse_hd: buf_len=%d addr=%d cnts=%d\n", - poid_par_priv->information_buf_len, addr, cnts)); - - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - - if ((addr + cnts) > max_available_size) { - RT_TRACE(_module_mp_, _drv_err_, ("!rtl8188eu_oid_rt_pro_read_efuse_hdl: parameter error!\n")); - return NDIS_STATUS_NOT_ACCEPTED; - } - - _irqlevel_changed_(&oldirql, LOWER); - if (rtw_efuse_access(Adapter, false, addr, cnts, data) == _FAIL) { - RT_TRACE(_module_mp_, _drv_err_, ("!rtl8188eu_oid_rt_pro_read_efuse_hdl: rtw_efuse_access FAIL!\n")); - status = NDIS_STATUS_FAILURE; - } else { - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - } - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv) -{ - struct efuse_access_struct *pefuse; - u8 *data; - u16 addr = 0, cnts = 0, max_available_size = 0; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf; - addr = pefuse->start_addr; - cnts = pefuse->cnts; - data = pefuse->data; - - RT_TRACE(_module_mp_, _drv_notice_, - ("+rtl8188eu_oid_rt_pro_write_efuse_hdl: buf_len=%d addr=0x%04x cnts=%d\n", - poid_par_priv->information_buf_len, addr, cnts)); - - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - - if ((addr + cnts) > max_available_size) { - RT_TRACE(_module_mp_, _drv_err_, ("!rtl8188eu_oid_rt_pro_write_efuse_hdl: parameter error")); - return NDIS_STATUS_NOT_ACCEPTED; - } - - _irqlevel_changed_(&oldirql, LOWER); - if (rtw_efuse_access(Adapter, true, addr, cnts, data) == _FAIL) - status = NDIS_STATUS_FAILURE; - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv) -{ - struct pgpkt *ppgpkt; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - *poid_par_priv->bytes_rw = 0; - - if (poid_par_priv->information_buf_len < sizeof(struct pgpkt *)) - return NDIS_STATUS_INVALID_LENGTH; - - ppgpkt = (struct pgpkt *)poid_par_priv->information_buf; - - _irqlevel_changed_(&oldirql, LOWER); - - if (poid_par_priv->type_of_oid == QUERY_OID) { - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl: Read offset=0x%x\n",\ - ppgpkt->offset)); - - Efuse_PowerSwitch(Adapter, false, true); - if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data) == true) - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - else - status = NDIS_STATUS_FAILURE; - Efuse_PowerSwitch(Adapter, false, false); - } else { - RT_TRACE(_module_mp_, _drv_notice_, - ("rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl: Write offset=0x%x word_en=0x%x\n",\ - ppgpkt->offset, ppgpkt->word_en)); - - Efuse_PowerSwitch(Adapter, true, true); - if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data) == true) - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - else - status = NDIS_STATUS_FAILURE; - Efuse_PowerSwitch(Adapter, true, false); - } - - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_info_, - ("-rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl: status=0x%08X\n", status)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv) -{ - u16 size; - u8 ret; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - _irqlevel_changed_(&oldirql, LOWER); - ret = efuse_GetCurrentSize(Adapter, &size); - _irqlevel_changed_(&oldirql, RAISE); - if (ret == _SUCCESS) { - *(u32 *)poid_par_priv->information_buf = size; - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - } else { - status = NDIS_STATUS_FAILURE; - } - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - - - if (poid_par_priv->type_of_oid != QUERY_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(u32)) - return NDIS_STATUS_INVALID_LENGTH; - - *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter); - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; - - RT_TRACE(_module_mp_, _drv_info_, - ("-rtl8188eu_oid_rt_get_efuse_max_size_hdl: size=%d status=0x%08X\n", - *(int *)poid_par_priv->information_buf, status)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv) -{ - int status; - - - RT_TRACE(_module_mp_, _drv_info_, ("+rtl8188eu_oid_rt_pro_efuse_hdl\n")); - - if (poid_par_priv->type_of_oid == QUERY_OID) - status = rtl8188eu_oid_rt_pro_read_efuse_hdl(poid_par_priv); - else - status = rtl8188eu_oid_rt_pro_write_efuse_hdl(poid_par_priv); - - RT_TRACE(_module_mp_, _drv_info_, ("-rtl8188eu_oid_rt_pro_efuse_hdl: status=0x%08X\n", status)); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv) -{ - u8 *data; - int status = NDIS_STATUS_SUCCESS; - struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context); - u16 maplen = 0; - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_pro_efuse_map_hdl\n")); - - EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&maplen); - - *poid_par_priv->bytes_rw = 0; - - if (poid_par_priv->information_buf_len < maplen) - return NDIS_STATUS_INVALID_LENGTH; - - data = (u8 *)poid_par_priv->information_buf; - - _irqlevel_changed_(&oldirql, LOWER); - - if (poid_par_priv->type_of_oid == QUERY_OID) { - RT_TRACE(_module_mp_, _drv_info_, - ("rtl8188eu_oid_rt_pro_efuse_map_hdl: READ\n")); - - if (rtw_efuse_map_read(Adapter, 0, maplen, data) == _SUCCESS) { - *poid_par_priv->bytes_rw = maplen; - } else { - RT_TRACE(_module_mp_, _drv_err_, - ("rtl8188eu_oid_rt_pro_efuse_map_hdl: READ fail\n")); - status = NDIS_STATUS_FAILURE; - } - } else { - /* SET_OID */ - RT_TRACE(_module_mp_, _drv_info_, - ("rtl8188eu_oid_rt_pro_efuse_map_hdl: WRITE\n")); - - if (rtw_efuse_map_write(Adapter, 0, maplen, data) == _SUCCESS) { - *poid_par_priv->bytes_rw = maplen; - } else { - RT_TRACE(_module_mp_, _drv_err_, - ("rtl8188eu_oid_rt_pro_efuse_map_hdl: WRITE fail\n")); - status = NDIS_STATUS_FAILURE; - } - } - - _irqlevel_changed_(&oldirql, RAISE); - - RT_TRACE(_module_mp_, _drv_info_, - ("-rtl8188eu_oid_rt_pro_efuse_map_hdl: status=0x%08X\n", status)); - - - return status; -} - -int rtl8188eu_oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - return status; -} - -int rtl8188eu_oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv) -{ - u8 rx_pkt_type; - int status = NDIS_STATUS_SUCCESS; - - - RT_TRACE(_module_mp_, _drv_notice_, ("+rtl8188eu_oid_rt_set_rx_packet_type_hdl\n")); - - if (poid_par_priv->type_of_oid != SET_OID) - return NDIS_STATUS_NOT_ACCEPTED; - - if (poid_par_priv->information_buf_len < sizeof(u8)) - return NDIS_STATUS_INVALID_LENGTH; - - rx_pkt_type = *((u8 *)poid_par_priv->information_buf);/* 4 */ - - RT_TRACE(_module_mp_, _drv_info_, ("rx_pkt_type: %x\n", rx_pkt_type)); - - return status; -} - -int rtl8188eu_oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} - -int rtl8188eu_mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv) -{ - struct mp_xmit_parm *pparm; - struct adapter *padapter; - struct mp_priv *pmp_priv; - struct pkt_attrib *pattrib; - - RT_TRACE(_module_mp_, _drv_notice_, ("+%s\n", __func__)); - - pparm = (struct mp_xmit_parm *)poid_par_priv->information_buf; - padapter = (struct adapter *)poid_par_priv->adapter_context; - pmp_priv = &padapter->mppriv; - - if (poid_par_priv->type_of_oid == QUERY_OID) { - pparm->enable = !pmp_priv->tx.stop; - pparm->count = pmp_priv->tx.sended; - } else { - if (pparm->enable == 0) { - pmp_priv->tx.stop = 1; - } else if (pmp_priv->tx.stop == 1) { - pmp_priv->tx.stop = 0; - pmp_priv->tx.count = pparm->count; - pmp_priv->tx.payload = pparm->payload_type; - pattrib = &pmp_priv->tx.attrib; - pattrib->pktlen = pparm->length; - memcpy(pattrib->dst, pparm->da, ETH_ALEN); - SetPacketTx(padapter); - } else { - return NDIS_STATUS_FAILURE; - } - } - - return NDIS_STATUS_SUCCESS; -} - -/* */ -int rtl8188eu_oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv) -{ - int status = NDIS_STATUS_SUCCESS; - - - if (poid_par_priv->type_of_oid != SET_OID) { - status = NDIS_STATUS_NOT_ACCEPTED; - return status; - } - - RT_TRACE(_module_mp_, _drv_info_, - ("\n ===> Setrtl8188eu_oid_rt_set_power_down_hdl.\n")); - - _irqlevel_changed_(&oldirql, LOWER); - - /* CALL the power_down function */ - _irqlevel_changed_(&oldirql, RAISE); - - - return status; -} -/* */ -int rtl8188eu_oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv) -{ - return 0; -} diff --git a/drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h b/drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h deleted file mode 100644 index 9388368a6b19..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h +++ /dev/null @@ -1,340 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_MP_IOCTL_H_ -#define _RTW_MP_IOCTL_H_ - -#include -#include -#include -#include -#include -#include - -/* */ -struct cfg_dbg_msg_struct { - u32 DebugLevel; - u32 DebugComponent_H32; - u32 DebugComponent_L32; -}; - -struct mp_rw_reg { - u32 offset; - u32 width; - u32 value; -}; - -struct efuse_access_struct { - u16 start_addr; - u16 cnts; - u8 data[0]; -}; - -struct burst_rw_reg { - u32 offset; - u32 len; - u8 Data[256]; -}; - -struct usb_vendor_req { - u8 bRequest; - u16 wValue; - u16 wIndex; - u16 wLength; - u8 u8Dir;/* 0:OUT, 1:IN */ - u8 u8InData; -}; - -struct dr_variable_struct { - u8 offset; - u32 variable; -}; - -#define _irqlevel_changed_(a, b) - -/* rtl8188eu_oid_rtl_seg_81_80_00 */ -int rtl8188eu_oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv); - -/* rtl8188eu_oid_rtl_seg_81_80_20 */ -int rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *par_priv); -int rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *par_priv); -int rtl8188eu_oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *par_priv); -int rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv); - -/* rtl8188eu_oid_rtl_seg_81_87 */ -int rtl8188eu_oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv); - -/* rtl8188eu_oid_rtl_seg_81_85 */ -int rtl8188eu_oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv); - -/* rtl8188eu_oid_rtl_seg_87_11_00 */ -int rtl8188eu_oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_wr_attrib_mem_hdl (struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv); -/* rtl8188eu_oid_rtl_seg_87_11_20 */ -int rtl8188eu_oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv); -/* rtl8188eu_oid_rtl_seg_87_11_50 */ -int rtl8188eu_oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv); -/* rtl8188eu_oid_rtl_seg_87_11_F0 */ -int rtl8188eu_oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv); - -/* rtl8188eu_oid_rtl_seg_87_12_00 */ -int rtl8188eu_oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *par_priv); -int rtl8188eu_oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv); -int rtl8188eu_oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv); - -#ifdef _RTW_MP_IOCTL_C_ - -static const struct oid_obj_priv rtl8188eu_oid_rtl_seg_81_80_00[] = { - {1, &oid_null_function}, /* 0x00 OID_RT_PRO_RESET_DUT */ - {1, &rtl8188eu_oid_rt_pro_set_data_rate_hdl}, /* 0x01 */ - {1, &rtl8188eu_oid_rt_pro_start_test_hdl}, /* 0x02 */ - {1, &rtl8188eu_oid_rt_pro_stop_test_hdl}, /* 0x03 */ - {1, &oid_null_function}, /* 0x04 OID_RT_PRO_SET_PREAMBLE */ - {1, &oid_null_function}, /* 0x05 OID_RT_PRO_SET_SCRAMBLER */ - {1, &oid_null_function}, /* 0x06 OID_RT_PRO_SET_FILTER_BB */ - {1, &oid_null_function},/* 0x07 OID_RT_PRO_SET_MANUAL_DIVERSITY_BB */ - {1, &rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl}, /* 0x08 */ - {1, &oid_null_function},/* 0x09 OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL */ - {1, &oid_null_function},/* 0x0A OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL */ - {1, &rtl8188eu_oid_rt_pro_set_continuous_tx_hdl}, /* 0x0B OID_RT_PRO_SET_TX_CONTINUOUS_DIRECT_CALL */ - {1, &rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl},/* 0x0C OID_RT_PRO_SET_SINGLE_CARRIER_TX_CONTINUOUS */ - {1, &oid_null_function}, /* 0x0D OID_RT_PRO_SET_TX_ANTENNA_BB */ - {1, &rtl8188eu_oid_rt_pro_set_antenna_bb_hdl}, /* 0x0E */ - {1, &oid_null_function}, /* 0x0F OID_RT_PRO_SET_CR_SCRAMBLER */ - {1, &oid_null_function}, /* 0x10 OID_RT_PRO_SET_CR_NEW_FILTER */ - {1, &rtl8188eu_oid_rt_pro_set_tx_power_control_hdl},/* 0x11 OID_RT_PRO_SET_TX_POWER_CONTROL */ - {1, &oid_null_function}, /* 0x12 OID_RT_PRO_SET_CR_TX_CONFIG */ - {1, &oid_null_function}, /* 0x13 OID_RT_PRO_GET_TX_POWER_CONTROL */ - {1, &oid_null_function}, /* 0x14 OID_RT_PRO_GET_CR_SIGNAL_QUALITY */ - {1, &oid_null_function}, /* 0x15 OID_RT_PRO_SET_CR_SETPOINT */ - {1, &oid_null_function}, /* 0x16 OID_RT_PRO_SET_INTEGRATOR */ - {1, &oid_null_function}, /* 0x17 OID_RT_PRO_SET_SIGNAL_QUALITY */ - {1, &oid_null_function}, /* 0x18 OID_RT_PRO_GET_INTEGRATOR */ - {1, &oid_null_function}, /* 0x19 OID_RT_PRO_GET_SIGNAL_QUALITY */ - {1, &oid_null_function}, /* 0x1A OID_RT_PRO_QUERY_EEPROM_TYPE */ - {1, &oid_null_function}, /* 0x1B OID_RT_PRO_WRITE_MAC_ADDRESS */ - {1, &oid_null_function}, /* 0x1C OID_RT_PRO_READ_MAC_ADDRESS */ - {1, &oid_null_function}, /* 0x1D OID_RT_PRO_WRITE_CIS_DATA */ - {1, &oid_null_function}, /* 0x1E OID_RT_PRO_READ_CIS_DATA */ - {1, &oid_null_function} /* 0x1F OID_RT_PRO_WRITE_POWER_CONTROL */ -}; - -static const struct oid_obj_priv rtl8188eu_oid_rtl_seg_81_80_20[] = { - {1, &oid_null_function}, /* 0x20 OID_RT_PRO_READ_POWER_CONTROL */ - {1, &oid_null_function}, /* 0x21 OID_RT_PRO_WRITE_EEPROM */ - {1, &oid_null_function}, /* 0x22 OID_RT_PRO_READ_EEPROM */ - {1, &rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl}, /* 0x23 */ - {1, &rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl}, /* 0x24 */ - {1, &rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl}, /* 0x25 */ - {1, &rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl}, /* 0x26 */ - {1, &rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl}, /* 0x27 */ - {1, &oid_null_function}, /* 0x28 OID_RT_PRO_QUERY_CURRENT_ADDRESS */ - {1, &oid_null_function}, /* 0x29 OID_RT_PRO_QUERY_PERMANENT_ADDRESS */ - {1, &oid_null_function}, /* 0x2A OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS */ - {1, &rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl},/* 0x2B OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX */ - {1, &oid_null_function}, /* 0x2C OID_RT_PRO_RECEIVE_PACKET */ - {1, &oid_null_function}, /* 0x2D OID_RT_PRO_WRITE_EEPROM_BYTE */ - {1, &oid_null_function}, /* 0x2E OID_RT_PRO_READ_EEPROM_BYTE */ - {1, &rtl8188eu_oid_rt_pro_set_modulation_hdl} /* 0x2F */ -}; - -static const struct oid_obj_priv rtl8188eu_oid_rtl_seg_81_80_40[] = { - {1, &oid_null_function}, /* 0x40 */ - {1, &oid_null_function}, /* 0x41 */ - {1, &oid_null_function}, /* 0x42 */ - {1, &rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl}, /* 0x43 */ - {1, &oid_null_function}, /* 0x44 */ - {1, &oid_null_function} /* 0x45 */ -}; - -static const struct oid_obj_priv rtl8188eu_oid_rtl_seg_81_80_80[] = { - {1, &oid_null_function}, /* 0x80 OID_RT_DRIVER_OPTION */ - {1, &oid_null_function}, /* 0x81 OID_RT_RF_OFF */ - {1, &oid_null_function} /* 0x82 OID_RT_AUTH_STATUS */ -}; - -static const struct oid_obj_priv rtl8188eu_oid_rtl_seg_81_85[] = { - {1, &rtl8188eu_oid_rt_wireless_mode_hdl} /* 0x00 OID_RT_WIRELESS_MODE */ -}; - -#endif /* _RTL871X_MP_IOCTL_C_ */ - -struct rwreg_param { - u32 offset; - u32 width; - u32 value; -}; - -struct bbreg_param { - u32 offset; - u32 phymask; - u32 value; -}; - -struct txpower_param { - u32 pwr_index; -}; - -struct datarate_param { - u32 rate_index; -}; - -struct rfintfs_parm { - u32 rfintfs; -}; - -struct mp_xmit_parm { - u8 enable; - u32 count; - u16 length; - u8 payload_type; - u8 da[ETH_ALEN]; -}; - -struct mp_xmit_packet { - u32 len; - u32 mem[MAX_MP_XMITBUF_SZ >> 2]; -}; - -struct psmode_param { - u32 ps_mode; - u32 smart_ps; -}; - -/* for OID_RT_PRO_READ16_EEPROM & OID_RT_PRO_WRITE16_EEPROM */ -struct eeprom_rw_param { - u32 offset; - u16 value; -}; - -struct mp_ioctl_handler { - u32 paramsize; - s32 (*handler)(struct oid_par_priv *poid_par_priv); - u32 oid; -}; - -struct mp_ioctl_param{ - u32 subcode; - u32 len; - u8 data[0]; -}; - -#define GEN_MP_IOCTL_SUBCODE(code) _MP_IOCTL_ ## code ## _CMD_ - -enum RTL871X_MP_IOCTL_SUBCODE { - GEN_MP_IOCTL_SUBCODE(MP_START), /*0*/ - GEN_MP_IOCTL_SUBCODE(MP_STOP), - GEN_MP_IOCTL_SUBCODE(READ_REG), - GEN_MP_IOCTL_SUBCODE(WRITE_REG), - GEN_MP_IOCTL_SUBCODE(READ_BB_REG), - GEN_MP_IOCTL_SUBCODE(WRITE_BB_REG), /*5*/ - GEN_MP_IOCTL_SUBCODE(READ_RF_REG), - GEN_MP_IOCTL_SUBCODE(WRITE_RF_REG), - GEN_MP_IOCTL_SUBCODE(SET_CHANNEL), - GEN_MP_IOCTL_SUBCODE(SET_TXPOWER), - GEN_MP_IOCTL_SUBCODE(SET_DATARATE), /*10*/ - GEN_MP_IOCTL_SUBCODE(SET_BANDWIDTH), - GEN_MP_IOCTL_SUBCODE(SET_ANTENNA), - GEN_MP_IOCTL_SUBCODE(CNTU_TX), - GEN_MP_IOCTL_SUBCODE(SC_TX), - GEN_MP_IOCTL_SUBCODE(CS_TX), /*15*/ - GEN_MP_IOCTL_SUBCODE(ST_TX), - GEN_MP_IOCTL_SUBCODE(IOCTL_XMIT_PACKET), - GEN_MP_IOCTL_SUBCODE(SET_RX_PKT_TYPE), - GEN_MP_IOCTL_SUBCODE(RESET_PHY_RX_PKT_CNT), - GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_RECV), /*20*/ - GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_ERROR), - GEN_MP_IOCTL_SUBCODE(READ16_EEPROM), - GEN_MP_IOCTL_SUBCODE(WRITE16_EEPROM), - GEN_MP_IOCTL_SUBCODE(EFUSE), - GEN_MP_IOCTL_SUBCODE(EFUSE_MAP), /*25*/ - GEN_MP_IOCTL_SUBCODE(GET_EFUSE_MAX_SIZE), - GEN_MP_IOCTL_SUBCODE(GET_EFUSE_CURRENT_SIZE), - GEN_MP_IOCTL_SUBCODE(GET_THERMAL_METER), - GEN_MP_IOCTL_SUBCODE(SET_PTM), - GEN_MP_IOCTL_SUBCODE(SET_POWER_DOWN), /*30*/ - GEN_MP_IOCTL_SUBCODE(TRIGGER_GPIO), - GEN_MP_IOCTL_SUBCODE(SET_DM_BT), /*35*/ - GEN_MP_IOCTL_SUBCODE(DEL_BA), /*36*/ - GEN_MP_IOCTL_SUBCODE(GET_WIFI_STATUS), /*37*/ - MAX_MP_IOCTL_SUBCODE, -}; - -s32 rtl8188eu_mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv); - -#define GEN_HANDLER(sz, hdl, oid) {sz, hdl, oid}, - -#define EXT_MP_IOCTL_HANDLER(sz, subcode, oid) \ - {sz, rtl8188eu_mp_ioctl_##subcode##_hdl, oid}, - - -#endif diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 7de9c7255a8c..7eba5e50367a 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include -- cgit From 0aba3f417fff530fbf031b8f31c37e2d018e44c2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:25 +0530 Subject: staging: rtl8188eu: Remove usb_osintf.h header file. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 2 +- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 2 -- drivers/staging/rtl8188eu/core/rtw_mlme.c | 1 - drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 1 - drivers/staging/rtl8188eu/core/rtw_xmit.c | 1 - drivers/staging/rtl8188eu/hal/usb_halinit.c | 1 - drivers/staging/rtl8188eu/include/osdep_intf.h | 5 +++- drivers/staging/rtl8188eu/include/usb_osintf.h | 38 -------------------------- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 1 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 19 ++++++------- drivers/staging/rtl8188eu/os_dep/xmit_linux.c | 1 - 11 files changed, 14 insertions(+), 58 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/usb_osintf.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index a375b75998d2..24665d615697 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -20,11 +20,11 @@ #define _IEEE80211_C #include +#include #include #include #include #include -#include u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 }; u16 RTW_WPA_VERSION = 1; diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index a97da87f317c..39932cbc4837 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -25,8 +25,6 @@ #include #include -#include - extern void indicate_wx_scan_complete_event(struct adapter *padapter); #define IS_MAC_ADDRESS_BROADCAST(addr) \ diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 0cb9e152cc5e..45e2739442e3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -30,7 +30,6 @@ #include #include #include -#include #include extern unsigned char MCS_rate_2R[16]; diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 9b80c8aa00c1..5605d95d99fa 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -24,7 +24,6 @@ #include #include #include -#include static int rtw_hw_suspend(struct adapter *padapter) { diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index 95c508a09b23..639ace06a3d6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -23,7 +23,6 @@ #include #include #include -#include #include static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 }; diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 19cf5f551c40..2bec1c358474 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -27,7 +27,6 @@ #include #include #include -#include #define HAL_MAC_ENABLE 1 #define HAL_BB_ENABLE 1 diff --git a/drivers/staging/rtl8188eu/include/osdep_intf.h b/drivers/staging/rtl8188eu/include/osdep_intf.h index 523141a9eab4..efa786887962 100644 --- a/drivers/staging/rtl8188eu/include/osdep_intf.h +++ b/drivers/staging/rtl8188eu/include/osdep_intf.h @@ -24,6 +24,9 @@ #include #include +extern char *rtw_initmac; +extern int rtw_mc2u_disable; + u8 rtw_init_drv_sw(struct adapter *padapter); u8 rtw_free_drv_sw(struct adapter *padapter); u8 rtw_reset_drv_sw(struct adapter *padapter); @@ -40,8 +43,8 @@ u16 rtw_recv_select_queue(struct sk_buff *skb); void rtw_proc_init_one(struct net_device *dev); void rtw_proc_remove_one(struct net_device *dev); +int pm_netdev_open(struct net_device *pnetdev, u8 bnormal); void rtw_ips_dev_unload(struct adapter *padapter); - int rtw_ips_pwr_up(struct adapter *padapter); void rtw_ips_pwr_down(struct adapter *padapter); diff --git a/drivers/staging/rtl8188eu/include/usb_osintf.h b/drivers/staging/rtl8188eu/include/usb_osintf.h deleted file mode 100644 index 85805cad682f..000000000000 --- a/drivers/staging/rtl8188eu/include/usb_osintf.h +++ /dev/null @@ -1,38 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __USB_OSINTF_H -#define __USB_OSINTF_H - -#include -#include - -extern char *rtw_initmac; -extern int rtw_mc2u_disable; - -#define USBD_HALTED(Status) ((u32)(Status) >> 30 == 3) - -int pm_netdev_open(struct net_device *pnetdev, u8 bnormal); -void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb); -void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, - unsigned char *ipAddr); - -int rtw_resume_process(struct adapter *padapter); - -#endif diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 7536be678a40..e3c03539f98a 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -27,7 +27,6 @@ #include #include -#include #include MODULE_LICENSE("GPL"); diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 3c8720c8598d..f1630c22e888 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -29,7 +29,6 @@ #include #include -#include #include #include @@ -302,15 +301,7 @@ exit: return ret; } -static int rtw_resume(struct usb_interface *pusb_intf) -{ - struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf); - struct adapter *padapter = dvobj->if1; - - return rtw_resume_process(padapter); -} - -int rtw_resume_process(struct adapter *padapter) +static int rtw_resume_process(struct adapter *padapter) { struct net_device *pnetdev; struct pwrctrl_priv *pwrpriv = NULL; @@ -357,6 +348,14 @@ exit: return ret; } +static int rtw_resume(struct usb_interface *pusb_intf) +{ + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf); + struct adapter *padapter = dvobj->if1; + + return rtw_resume_process(padapter); +} + /* * drv_init() - a device potentially for us * diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c index b4f220d3afac..0ce47b07ef86 100644 --- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c @@ -26,7 +26,6 @@ #include #include #include -#include uint rtw_remainder_len(struct pkt_file *pfile) { -- cgit From 0cccd45f0ac066d11d5ae3e64afb7e70c621ffd1 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:26 +0530 Subject: staging: rtl8188eu: Remove mp( mesh point) mode support We've already removed non-standard ioctl handlers, used by driver to support mp mode. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Makefile | 2 - drivers/staging/rtl8188eu/core/rtw_cmd.c | 5 - drivers/staging/rtl8188eu/core/rtw_mp.c | 995 ------------------------- drivers/staging/rtl8188eu/core/rtw_recv.c | 27 - drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 11 - drivers/staging/rtl8188eu/hal/rtl8188e_mp.c | 854 --------------------- drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c | 3 - drivers/staging/rtl8188eu/hal/usb_halinit.c | 51 +- drivers/staging/rtl8188eu/include/drv_types.h | 2 - drivers/staging/rtl8188eu/include/rtw_mp.h | 495 ------------ drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 8 +- 12 files changed, 24 insertions(+), 2430 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/core/rtw_mp.c delete mode 100644 drivers/staging/rtl8188eu/hal/rtl8188e_mp.c delete mode 100644 drivers/staging/rtl8188eu/include/rtw_mp.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 841e4354635f..227dcdbe0310 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -9,7 +9,6 @@ r8188eu-y := \ core/rtw_led.o \ core/rtw_mlme.o \ core/rtw_mlme_ext.o \ - core/rtw_mp.o \ core/rtw_pwrctrl.o \ core/rtw_p2p.o \ core/rtw_recv.o \ @@ -36,7 +35,6 @@ r8188eu-y := \ hal/rtl8188e_cmd.o \ hal/rtl8188e_dm.o \ hal/rtl8188e_hal_init.o \ - hal/rtl8188e_mp.o \ hal/rtl8188e_phycfg.o \ hal/rtl8188e_rf6052.o \ hal/rtl8188e_rxdesc.o \ diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 1222b9ba6940..e187c9f39389 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -738,8 +738,6 @@ void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *p kfree(pcmd->parmbuf); kfree(pcmd); - if (padapter->registrypriv.mp_mode == 1) - padapter->mppriv.workparam.bcompleted = true; } void rtw_readtssi_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd) @@ -747,9 +745,6 @@ void rtw_readtssi_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcm kfree(pcmd->parmbuf); kfree(pcmd); - - if (padapter->registrypriv.mp_mode == 1) - padapter->mppriv.workparam.bcompleted = true; } u8 rtw_createbss_cmd(struct adapter *padapter) diff --git a/drivers/staging/rtl8188eu/core/rtw_mp.c b/drivers/staging/rtl8188eu/core/rtw_mp.c deleted file mode 100644 index d879948e0a60..000000000000 --- a/drivers/staging/rtl8188eu/core/rtw_mp.c +++ /dev/null @@ -1,995 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTW_MP_C_ - -#include -#include -#include "rtl8188e_hal.h" -#include - -u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz) -{ - u32 val = 0; - - switch (sz) { - case 1: - val = usb_read8(padapter, addr); - break; - case 2: - val = usb_read16(padapter, addr); - break; - case 4: - val = usb_read32(padapter, addr); - break; - default: - val = 0xffffffff; - break; - } - - return val; -} - -void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz) -{ - switch (sz) { - case 1: - usb_write8(padapter, addr, (u8)val); - break; - case 2: - usb_write16(padapter, addr, (u16)val); - break; - case 4: - usb_write32(padapter, addr, val); - break; - default: - break; - } -} - -u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask) -{ - return rtw_hal_read_bbreg(padapter, addr, bitmask); -} - -void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val) -{ - rtw_hal_write_bbreg(padapter, addr, bitmask, val); -} - -u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask) -{ - return rtw_hal_read_rfreg(padapter, (enum rf_radio_path)rfpath, addr, bitmask); -} - -void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val) -{ - rtw_hal_write_rfreg(padapter, (enum rf_radio_path)rfpath, addr, bitmask, val); -} - -u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr) -{ - return _read_rfreg(padapter, (enum rf_radio_path)rfpath, addr, bRFRegOffsetMask); -} - -void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val) -{ - _write_rfreg(padapter, (enum rf_radio_path)rfpath, addr, bRFRegOffsetMask, val); -} - -static void _init_mp_priv_(struct mp_priv *pmp_priv) -{ - struct wlan_bssid_ex *pnetwork; - - memset(pmp_priv, 0, sizeof(struct mp_priv)); - - pmp_priv->mode = MP_OFF; - - pmp_priv->channel = 1; - pmp_priv->bandwidth = HT_CHANNEL_WIDTH_20; - pmp_priv->prime_channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE; - pmp_priv->rateidx = MPT_RATE_1M; - pmp_priv->txpoweridx = 0x2A; - - pmp_priv->antenna_tx = ANTENNA_A; - pmp_priv->antenna_rx = ANTENNA_AB; - - pmp_priv->check_mp_pkt = 0; - - pmp_priv->tx_pktcount = 0; - - pmp_priv->rx_pktcount = 0; - pmp_priv->rx_crcerrpktcount = 0; - - pmp_priv->network_macaddr[0] = 0x00; - pmp_priv->network_macaddr[1] = 0xE0; - pmp_priv->network_macaddr[2] = 0x4C; - pmp_priv->network_macaddr[3] = 0x87; - pmp_priv->network_macaddr[4] = 0x66; - pmp_priv->network_macaddr[5] = 0x55; - - pnetwork = &pmp_priv->mp_network.network; - memcpy(pnetwork->MacAddress, pmp_priv->network_macaddr, ETH_ALEN); - - pnetwork->Ssid.SsidLength = 8; - memcpy(pnetwork->Ssid.Ssid, "mp_871x", pnetwork->Ssid.SsidLength); -} - -static void mp_init_xmit_attrib(struct mp_tx *pmptx, struct adapter *padapter) -{ - struct pkt_attrib *pattrib; - struct tx_desc *desc; - - /* init xmitframe attribute */ - pattrib = &pmptx->attrib; - memset(pattrib, 0, sizeof(struct pkt_attrib)); - desc = &pmptx->desc; - memset(desc, 0, TXDESC_SIZE); - - pattrib->ether_type = 0x8712; - memset(pattrib->dst, 0xFF, ETH_ALEN); - pattrib->ack_policy = 0; - pattrib->hdrlen = WLAN_HDR_A3_LEN; - pattrib->subtype = WIFI_DATA; - pattrib->priority = 0; - pattrib->qsel = pattrib->priority; - pattrib->nr_frags = 1; - pattrib->encrypt = 0; - pattrib->bswenc = false; - pattrib->qos_en = false; -} - -s32 init_mp_priv(struct adapter *padapter) -{ - struct mp_priv *pmppriv = &padapter->mppriv; - - _init_mp_priv_(pmppriv); - pmppriv->papdater = padapter; - - pmppriv->tx.stop = 1; - mp_init_xmit_attrib(&pmppriv->tx, padapter); - - switch (padapter->registrypriv.rf_config) { - case RF_1T1R: - pmppriv->antenna_tx = ANTENNA_A; - pmppriv->antenna_rx = ANTENNA_A; - break; - case RF_1T2R: - default: - pmppriv->antenna_tx = ANTENNA_A; - pmppriv->antenna_rx = ANTENNA_AB; - break; - case RF_2T2R: - case RF_2T2R_GREEN: - pmppriv->antenna_tx = ANTENNA_AB; - pmppriv->antenna_rx = ANTENNA_AB; - break; - case RF_2T4R: - pmppriv->antenna_tx = ANTENNA_AB; - pmppriv->antenna_rx = ANTENNA_ABCD; - break; - } - - return _SUCCESS; -} - -void free_mp_priv(struct mp_priv *pmp_priv) -{ - kfree(pmp_priv->pallocated_mp_xmitframe_buf); - pmp_priv->pallocated_mp_xmitframe_buf = NULL; - pmp_priv->pmp_xmtframe_buf = NULL; -} - -#define PHY_IQCalibrate(a, b) PHY_IQCalibrate_8188E(a, b) -#define PHY_LCCalibrate(a) PHY_LCCalibrate_8188E(a) -#define PHY_SetRFPathSwitch(a, b) PHY_SetRFPathSwitch_8188E(a, b) - -s32 MPT_InitializeAdapter(struct adapter *pAdapter, u8 Channel) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - s32 rtStatus = _SUCCESS; - struct mpt_context *pMptCtx = &pAdapter->mppriv.MptCtx; - struct mlme_priv *pmlmepriv = &pAdapter->mlmepriv; - - /* HW Initialization for 8190 MPT. */ - /* SW Initialization for 8190 MP. */ - pMptCtx->bMptDrvUnload = false; - pMptCtx->bMassProdTest = false; - pMptCtx->bMptIndexEven = true; /* default gain index is -6.0db */ - pMptCtx->h2cReqNum = 0x0; - /* Init mpt event. */ - /* init for BT MP */ - - pMptCtx->bMptWorkItemInProgress = false; - pMptCtx->CurrMptAct = NULL; - /* */ - - /* Don't accept any packets */ - usb_write32(pAdapter, REG_RCR, 0); - - PHY_IQCalibrate(pAdapter, false); - dm_CheckTXPowerTracking(&pHalData->odmpriv); /* trigger thermal meter */ - PHY_LCCalibrate(pAdapter); - - pMptCtx->backup0xc50 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0); - pMptCtx->backup0xc58 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0); - pMptCtx->backup0xc30 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_RxDetector1, bMaskByte0); - pMptCtx->backup0x52_RF_A = (u8)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0); - pMptCtx->backup0x52_RF_B = (u8)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0); - - /* set ant to wifi side in mp mode */ - usb_write16(pAdapter, 0x870, 0x300); - usb_write16(pAdapter, 0x860, 0x110); - - if (pAdapter->registrypriv.mp_mode == 1) - pmlmepriv->fw_state = WIFI_MP_STATE; - - return rtStatus; -} - -/*----------------------------------------------------------------------------- - * Function: MPT_DeInitAdapter() - * - * Overview: Extra DeInitialization for Mass Production Test. - * - * Input: struct adapter * pAdapter - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 05/08/2007 MHC Create Version 0. - * 05/18/2007 MHC Add normal driver MPHalt code. - * - *---------------------------------------------------------------------------*/ -void MPT_DeInitAdapter(struct adapter *pAdapter) -{ - struct mpt_context *pMptCtx = &pAdapter->mppriv.MptCtx; - - pMptCtx->bMptDrvUnload = true; -} - -static u8 mpt_ProStartTest(struct adapter *padapter) -{ - struct mpt_context *pMptCtx = &padapter->mppriv.MptCtx; - - pMptCtx->bMassProdTest = true; - pMptCtx->bStartContTx = false; - pMptCtx->bCckContTx = false; - pMptCtx->bOfdmContTx = false; - pMptCtx->bSingleCarrier = false; - pMptCtx->bCarrierSuppression = false; - pMptCtx->bSingleTone = false; - - return _SUCCESS; -} - -/* - * General use - */ -s32 SetPowerTracking(struct adapter *padapter, u8 enable) -{ - Hal_SetPowerTracking(padapter, enable); - return 0; -} - -void GetPowerTracking(struct adapter *padapter, u8 *enable) -{ - Hal_GetPowerTracking(padapter, enable); -} - -static void disable_dm(struct adapter *padapter) -{ - u8 v8; - - /* 3 1. disable firmware dynamic mechanism */ - /* disable Power Training, Rate Adaptive */ - v8 = usb_read8(padapter, REG_BCN_CTRL); - v8 &= ~EN_BCN_FUNCTION; - usb_write8(padapter, REG_BCN_CTRL, v8); - - /* 3 2. disable driver dynamic mechanism */ - /* disable Dynamic Initial Gain */ - /* disable High Power */ - /* disable Power Tracking */ - Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, false); - - /* enable APK, LCK and IQK but disable power tracking */ - Switch_DM_Func(padapter, DYNAMIC_RF_CALIBRATION, true); -} - -/* This function initializes the DUT to the MP test mode */ -s32 mp_start_test(struct adapter *padapter) -{ - struct wlan_bssid_ex bssid; - struct sta_info *psta; - u32 length; - u8 val8; - s32 res = _SUCCESS; - struct mp_priv *pmppriv = &padapter->mppriv; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct wlan_network *tgt_network = &pmlmepriv->cur_network; - - padapter->registrypriv.mp_mode = 1; - pmppriv->bSetTxPower = 0; /* for manually set tx power */ - - /* 3 disable dynamic mechanism */ - disable_dm(padapter); - - /* 3 0. update mp_priv */ - - if (padapter->registrypriv.rf_config == RF_819X_MAX_TYPE) { - switch (GET_RF_TYPE(padapter)) { - case RF_1T1R: - pmppriv->antenna_tx = ANTENNA_A; - pmppriv->antenna_rx = ANTENNA_A; - break; - case RF_1T2R: - default: - pmppriv->antenna_tx = ANTENNA_A; - pmppriv->antenna_rx = ANTENNA_AB; - break; - case RF_2T2R: - case RF_2T2R_GREEN: - pmppriv->antenna_tx = ANTENNA_AB; - pmppriv->antenna_rx = ANTENNA_AB; - break; - case RF_2T4R: - pmppriv->antenna_tx = ANTENNA_AB; - pmppriv->antenna_rx = ANTENNA_ABCD; - break; - } - } - - mpt_ProStartTest(padapter); - - /* 3 1. initialize a new struct wlan_bssid_ex */ - memcpy(bssid.MacAddress, pmppriv->network_macaddr, ETH_ALEN); - bssid.Ssid.SsidLength = strlen("mp_pseudo_adhoc"); - memcpy(bssid.Ssid.Ssid, (u8 *)"mp_pseudo_adhoc", bssid.Ssid.SsidLength); - bssid.InfrastructureMode = Ndis802_11IBSS; - bssid.NetworkTypeInUse = Ndis802_11DS; - bssid.IELength = 0; - - length = get_wlan_bssid_ex_sz(&bssid); - if (length % 4) - bssid.Length = ((length >> 2) + 1) << 2; /* round up to multiple of 4 bytes. */ - else - bssid.Length = length; - - spin_lock_bh(&pmlmepriv->lock); - - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == true) - goto end_of_mp_start_test; - - /* init mp_start_test status */ - if (check_fwstate(pmlmepriv, _FW_LINKED) == true) { - rtw_disassoc_cmd(padapter, 500, true); - rtw_indicate_disconnect(padapter); - rtw_free_assoc_resources(padapter, 1); - } - pmppriv->prev_fw_state = get_fwstate(pmlmepriv); - if (padapter->registrypriv.mp_mode == 1) - pmlmepriv->fw_state = WIFI_MP_STATE; - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - - /* 3 2. create a new psta for mp driver */ - /* clear psta in the cur_network, if any */ - psta = rtw_get_stainfo(&padapter->stapriv, tgt_network->network.MacAddress); - if (psta) - rtw_free_stainfo(padapter, psta); - - psta = rtw_alloc_stainfo(&padapter->stapriv, bssid.MacAddress); - if (psta == NULL) { - RT_TRACE(_module_mp_, _drv_err_, ("mp_start_test: Can't alloc sta_info!\n")); - pmlmepriv->fw_state = pmppriv->prev_fw_state; - res = _FAIL; - goto end_of_mp_start_test; - } - - /* 3 3. join pseudo AdHoc */ - tgt_network->join_res = 1; - tgt_network->aid = 1; - psta->aid = 1; - memcpy(&tgt_network->network, &bssid, length); - - rtw_indicate_connect(padapter); - _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); - -end_of_mp_start_test: - - spin_unlock_bh(&pmlmepriv->lock); - - if (res == _SUCCESS) { - /* set MSR to WIFI_FW_ADHOC_STATE */ - val8 = usb_read8(padapter, MSR) & 0xFC; /* 0x0102 */ - val8 |= WIFI_FW_ADHOC_STATE; - usb_write8(padapter, MSR, val8); /* Link in ad hoc network */ - } - return res; -} -/* */ -/* This function change the DUT from the MP test mode into normal mode */ -void mp_stop_test(struct adapter *padapter) -{ - struct mp_priv *pmppriv = &padapter->mppriv; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct wlan_network *tgt_network = &pmlmepriv->cur_network; - struct sta_info *psta; - - if (pmppriv->mode == MP_ON) { - pmppriv->bSetTxPower = 0; - spin_lock_bh(&pmlmepriv->lock); - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == false) - goto end_of_mp_stop_test; - - /* 3 1. disconnect pseudo AdHoc */ - rtw_indicate_disconnect(padapter); - - /* 3 2. clear psta used in mp test mode. */ - psta = rtw_get_stainfo(&padapter->stapriv, tgt_network->network.MacAddress); - if (psta) - rtw_free_stainfo(padapter, psta); - - /* 3 3. return to normal state (default:station mode) */ - pmlmepriv->fw_state = pmppriv->prev_fw_state; /* WIFI_STATION_STATE; */ - - /* flush the cur_network */ - memset(tgt_network, 0, sizeof(struct wlan_network)); - - _clr_fwstate_(pmlmepriv, WIFI_MP_STATE); - -end_of_mp_stop_test: - - spin_unlock_bh(&pmlmepriv->lock); - } -} - -/*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/ -/* - * SetChannel - * Description - * Use H2C command to change channel, - * not only modify rf register, but also other setting need to be done. - */ -void SetChannel(struct adapter *pAdapter) -{ - Hal_SetChannel(pAdapter); -} - -/* - * Notice - * Switch bandwitdth may change center frequency(channel) - */ -void SetBandwidth(struct adapter *pAdapter) -{ - Hal_SetBandwidth(pAdapter); -} - -void SetAntenna(struct adapter *pAdapter) -{ - Hal_SetAntenna(pAdapter); -} - -void SetAntennaPathPower(struct adapter *pAdapter) -{ - Hal_SetAntennaPathPower(pAdapter); -} - -void SetTxPower(struct adapter *pAdapter) -{ - Hal_SetTxPower(pAdapter); - } - -void SetDataRate(struct adapter *pAdapter) -{ - Hal_SetDataRate(pAdapter); -} - -void MP_PHY_SetRFPathSwitch(struct adapter *pAdapter , bool bMain) -{ - PHY_SetRFPathSwitch(pAdapter, bMain); -} - -s32 SetThermalMeter(struct adapter *pAdapter, u8 target_ther) -{ - return Hal_SetThermalMeter(pAdapter, target_ther); -} - -void GetThermalMeter(struct adapter *pAdapter, u8 *value) -{ - Hal_GetThermalMeter(pAdapter, value); -} - -void SetSingleCarrierTx(struct adapter *pAdapter, u8 bStart) -{ - PhySetTxPowerLevel(pAdapter); - Hal_SetSingleCarrierTx(pAdapter, bStart); -} - -void SetSingleToneTx(struct adapter *pAdapter, u8 bStart) -{ - PhySetTxPowerLevel(pAdapter); - Hal_SetSingleToneTx(pAdapter, bStart); -} - -void SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart) -{ - PhySetTxPowerLevel(pAdapter); - Hal_SetCarrierSuppressionTx(pAdapter, bStart); -} - -void SetContinuousTx(struct adapter *pAdapter, u8 bStart) -{ - PhySetTxPowerLevel(pAdapter); - Hal_SetContinuousTx(pAdapter, bStart); -} - - -void PhySetTxPowerLevel(struct adapter *pAdapter) -{ - struct mp_priv *pmp_priv = &pAdapter->mppriv; - - if (pmp_priv->bSetTxPower == 0) /* for NO manually set power index */ - PHY_SetTxPowerLevel8188E(pAdapter, pmp_priv->channel); -} - -/* */ -static void dump_mpframe(struct adapter *padapter, struct xmit_frame *pmpframe) -{ - rtw_hal_mgnt_xmit(padapter, pmpframe); -} - -static struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv) -{ - struct xmit_frame *pmpframe; - struct xmit_buf *pxmitbuf; - - pmpframe = rtw_alloc_xmitframe(pxmitpriv); - if (pmpframe == NULL) - return NULL; - - pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv); - if (pxmitbuf == NULL) { - rtw_free_xmitframe(pxmitpriv, pmpframe); - return NULL; - } - - pmpframe->frame_tag = MP_FRAMETAG; - - pmpframe->pxmitbuf = pxmitbuf; - - pmpframe->buf_addr = pxmitbuf->pbuf; - - pxmitbuf->priv_data = pmpframe; - - return pmpframe; -} - -static int mp_xmit_packet_thread(void *context) -{ - struct xmit_frame *pxmitframe; - struct mp_tx *pmptx; - struct mp_priv *pmp_priv; - struct xmit_priv *pxmitpriv; - struct adapter *padapter; - - pmp_priv = (struct mp_priv *)context; - pmptx = &pmp_priv->tx; - padapter = pmp_priv->papdater; - pxmitpriv = &(padapter->xmitpriv); - - allow_signal(SIGTERM); - - /* DBG_88E("%s:pkTx Start\n", __func__); */ - while (1) { - pxmitframe = alloc_mp_xmitframe(pxmitpriv); - if (pxmitframe == NULL) { - if (pmptx->stop || - padapter->bSurpriseRemoved || - padapter->bDriverStopped) { - goto exit; - } else { - msleep(1); - continue; - } - } - - memcpy((u8 *)(pxmitframe->buf_addr+TXDESC_OFFSET), pmptx->buf, pmptx->write_size); - memcpy(&(pxmitframe->attrib), &(pmptx->attrib), sizeof(struct pkt_attrib)); - - dump_mpframe(padapter, pxmitframe); - - pmptx->sended++; - pmp_priv->tx_pktcount++; - - if (pmptx->stop || - padapter->bSurpriseRemoved || - padapter->bDriverStopped) - goto exit; - if ((pmptx->count != 0) && - (pmptx->count == pmptx->sended)) - goto exit; - - if (signal_pending(current)) - flush_signals(current); - } - -exit: - kfree(pmptx->pallocated_buf); - pmptx->pallocated_buf = NULL; - pmptx->stop = 1; - - complete_and_exit(NULL, 0); -} - -void fill_txdesc_for_mp(struct adapter *padapter, struct tx_desc *ptxdesc) -{ - struct mp_priv *pmp_priv = &padapter->mppriv; - memcpy(ptxdesc, &(pmp_priv->tx.desc), TXDESC_SIZE); -} - -void SetPacketTx(struct adapter *padapter) -{ - u8 *ptr, *pkt_start, *pkt_end; - u32 pkt_size; - struct tx_desc *desc; - struct rtw_ieee80211_hdr *hdr; - u8 payload; - s32 bmcast; - struct pkt_attrib *pattrib; - struct mp_priv *pmp_priv; - - - pmp_priv = &padapter->mppriv; - if (pmp_priv->tx.stop) - return; - pmp_priv->tx.sended = 0; - pmp_priv->tx.stop = 0; - pmp_priv->tx_pktcount = 0; - - /* 3 1. update_attrib() */ - pattrib = &pmp_priv->tx.attrib; - memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN); - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); - bmcast = IS_MCAST(pattrib->ra); - if (bmcast) { - pattrib->mac_id = 1; - pattrib->psta = rtw_get_bcmc_stainfo(padapter); - } else { - pattrib->mac_id = 0; - pattrib->psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv)); - } - - pattrib->last_txcmdsz = pattrib->hdrlen + pattrib->pktlen; - - /* 3 2. allocate xmit buffer */ - pkt_size = pattrib->last_txcmdsz; - - kfree(pmp_priv->tx.pallocated_buf); - pmp_priv->tx.write_size = pkt_size; - pmp_priv->tx.buf_size = pkt_size + XMITBUF_ALIGN_SZ; - pmp_priv->tx.pallocated_buf = kzalloc(pmp_priv->tx.buf_size, GFP_KERNEL); - if (pmp_priv->tx.pallocated_buf == NULL) { - DBG_88E("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size); - return; - } - pmp_priv->tx.buf = (u8 *)N_BYTE_ALIGMENT((size_t)(pmp_priv->tx.pallocated_buf), XMITBUF_ALIGN_SZ); - ptr = pmp_priv->tx.buf; - - desc = &(pmp_priv->tx.desc); - memset(desc, 0, TXDESC_SIZE); - pkt_start = ptr; - pkt_end = pkt_start + pkt_size; - - /* 3 3. init TX descriptor */ - /* offset 0 */ - desc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); - desc->txdw0 |= cpu_to_le32(pkt_size & 0x0000FFFF); /* packet size */ - desc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & 0x00FF0000); /* 32 bytes for TX Desc */ - if (bmcast) - desc->txdw0 |= cpu_to_le32(BMC); /* broadcast packet */ - - desc->txdw1 |= cpu_to_le32((0x01 << 26) & 0xff000000); - /* offset 4 */ - desc->txdw1 |= cpu_to_le32((pattrib->mac_id) & 0x3F); /* CAM_ID(MAC_ID) */ - desc->txdw1 |= cpu_to_le32((pattrib->qsel << QSEL_SHT) & 0x00001F00); /* Queue Select, TID */ - - desc->txdw1 |= cpu_to_le32((pattrib->raid << RATE_ID_SHT) & 0x000F0000); /* Rate Adaptive ID */ - /* offset 8 */ - /* offset 12 */ - - desc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0x0fff0000); - - /* offset 16 */ - desc->txdw4 |= cpu_to_le32(HW_SSN); - desc->txdw4 |= cpu_to_le32(USERATE); - desc->txdw4 |= cpu_to_le32(DISDATAFB); - - if (pmp_priv->preamble) { - if (pmp_priv->rateidx <= MPT_RATE_54M) - desc->txdw4 |= cpu_to_le32(DATA_SHORT); /* CCK Short Preamble */ - } - if (pmp_priv->bandwidth == HT_CHANNEL_WIDTH_40) - desc->txdw4 |= cpu_to_le32(DATA_BW); - - /* offset 20 */ - desc->txdw5 |= cpu_to_le32(pmp_priv->rateidx & 0x0000001F); - - if (pmp_priv->preamble) { - if (pmp_priv->rateidx > MPT_RATE_54M) - desc->txdw5 |= cpu_to_le32(SGI); /* MCS Short Guard Interval */ - } - desc->txdw5 |= cpu_to_le32(RTY_LMT_EN); /* retry limit enable */ - desc->txdw5 |= cpu_to_le32(0x00180000); /* DATA/RTS Rate Fallback Limit */ - - /* 3 4. make wlan header, make_wlanhdr() */ - hdr = (struct rtw_ieee80211_hdr *)pkt_start; - SetFrameSubType(&hdr->frame_ctl, pattrib->subtype); - memcpy(hdr->addr1, pattrib->dst, ETH_ALEN); /* DA */ - memcpy(hdr->addr2, pattrib->src, ETH_ALEN); /* SA */ - memcpy(hdr->addr3, get_bssid(&padapter->mlmepriv), ETH_ALEN); /* RA, BSSID */ - - /* 3 5. make payload */ - ptr = pkt_start + pattrib->hdrlen; - - switch (pmp_priv->tx.payload) { - case 0: - payload = 0x00; - break; - case 1: - payload = 0x5a; - break; - case 2: - payload = 0xa5; - break; - case 3: - payload = 0xff; - break; - default: - payload = 0x00; - break; - } - - memset(ptr, payload, pkt_end - ptr); - - /* 3 6. start thread */ - pmp_priv->tx.PktTxThread = kthread_run(mp_xmit_packet_thread, pmp_priv, "RTW_MP_THREAD"); - if (IS_ERR(pmp_priv->tx.PktTxThread)) - DBG_88E("Create PktTx Thread Fail !!!!!\n"); -} - -void SetPacketRx(struct adapter *pAdapter, u8 bStartRx) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - - if (bStartRx) { - /* Accept CRC error and destination address */ - pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS; - - pHalData->ReceiveConfig |= ACRC32; - - usb_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig); - - /* Accept all data frames */ - usb_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF); - } else { - usb_write32(pAdapter, REG_RCR, 0); - } -} - -void ResetPhyRxPktCount(struct adapter *pAdapter) -{ - u32 i, phyrx_set = 0; - - for (i = 0; i <= 0xF; i++) { - phyrx_set = 0; - phyrx_set |= _RXERR_RPT_SEL(i); /* select */ - phyrx_set |= RXERR_RPT_RST; /* set counter to zero */ - usb_write32(pAdapter, REG_RXERR_RPT, phyrx_set); - } -} - -static u32 GetPhyRxPktCounts(struct adapter *pAdapter, u32 selbit) -{ - /* selection */ - u32 phyrx_set = 0, count = 0; - - phyrx_set = _RXERR_RPT_SEL(selbit & 0xF); - usb_write32(pAdapter, REG_RXERR_RPT, phyrx_set); - - /* Read packet count */ - count = usb_read32(pAdapter, REG_RXERR_RPT) & RXERR_COUNTER_MASK; - - return count; -} - -u32 GetPhyRxPktReceived(struct adapter *pAdapter) -{ - u32 OFDM_cnt = 0, CCK_cnt = 0, HT_cnt = 0; - - OFDM_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_OFDM_MPDU_OK); - CCK_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_CCK_MPDU_OK); - HT_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_HT_MPDU_OK); - - return OFDM_cnt + CCK_cnt + HT_cnt; -} - -u32 GetPhyRxPktCRC32Error(struct adapter *pAdapter) -{ - u32 OFDM_cnt = 0, CCK_cnt = 0, HT_cnt = 0; - - OFDM_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_OFDM_MPDU_FAIL); - CCK_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_CCK_MPDU_FAIL); - HT_cnt = GetPhyRxPktCounts(pAdapter, RXERR_TYPE_HT_MPDU_FAIL); - - return OFDM_cnt + CCK_cnt + HT_cnt; -} - -/* reg 0x808[9:0]: FFT data x */ -/* reg 0x808[22]: 0 --> 1 to get 1 FFT data y */ -/* reg 0x8B4[15:0]: FFT data y report */ -static u32 rtw_GetPSDData(struct adapter *pAdapter, u32 point) -{ - int psd_val; - - - psd_val = usb_read32(pAdapter, 0x808); - psd_val &= 0xFFBFFC00; - psd_val |= point; - - usb_write32(pAdapter, 0x808, psd_val); - mdelay(1); - psd_val |= 0x00400000; - - usb_write32(pAdapter, 0x808, psd_val); - mdelay(1); - psd_val = usb_read32(pAdapter, 0x8B4); - - psd_val &= 0x0000FFFF; - - return psd_val; -} - -/* - *pts start_point_min stop_point_max - * 128 64 64 + 128 = 192 - * 256 128 128 + 256 = 384 - * 512 256 256 + 512 = 768 - * 1024 512 512 + 1024 = 1536 - * - */ -u32 mp_query_psd(struct adapter *pAdapter, u8 *data) -{ - u32 i, psd_pts = 0, psd_start = 0, psd_stop = 0; - u32 psd_data = 0; - int ret; - - if (!netif_running(pAdapter->pnetdev)) { - RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! interface not opened!\n")); - return 0; - } - - if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == false) { - RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! not in MP mode!\n")); - return 0; - } - - if (strlen(data) == 0) { /* default value */ - psd_pts = 128; - psd_start = 64; - psd_stop = 128; - } else { - ret = sscanf(data, "pts =%d, start =%d, stop =%d", - &psd_pts, &psd_start, &psd_stop); - if (ret != 3) - return 0; - } - - memset(data, '\0', sizeof(*data)); - - i = psd_start; - while (i < psd_stop) { - if (i >= psd_pts) { - psd_data = rtw_GetPSDData(pAdapter, i-psd_pts); - } else { - psd_data = rtw_GetPSDData(pAdapter, i); - } - sprintf(data, "%s%x ", data, psd_data); - i++; - } - - msleep(100); - return strlen(data)+1; -} - -void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv) -{ - int i, res; - struct adapter *padapter = pxmitpriv->adapter; - struct xmit_buf *pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf; - - u32 max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ; - u32 num_xmit_extbuf = NR_XMIT_EXTBUFF; - if (padapter->registrypriv.mp_mode == 0) { - max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ; - num_xmit_extbuf = NR_XMIT_EXTBUFF; - } else { - max_xmit_extbuf_size = 20000; - num_xmit_extbuf = 1; - } - - pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf; - for (i = 0; i < num_xmit_extbuf; i++) { - rtw_os_xmit_resource_free(padapter, pxmitbuf, (max_xmit_extbuf_size + XMITBUF_ALIGN_SZ)); - - pxmitbuf++; - } - - if (pxmitpriv->pallocated_xmit_extbuf) - vfree(pxmitpriv->pallocated_xmit_extbuf); - - if (padapter->registrypriv.mp_mode == 0) { - max_xmit_extbuf_size = 20000; - num_xmit_extbuf = 1; - } else { - max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ; - num_xmit_extbuf = NR_XMIT_EXTBUFF; - } - - /* Init xmit extension buff */ - _rtw_init_queue(&pxmitpriv->free_xmit_extbuf_queue); - - pxmitpriv->pallocated_xmit_extbuf = vzalloc(num_xmit_extbuf * sizeof(struct xmit_buf) + 4); - - if (pxmitpriv->pallocated_xmit_extbuf == NULL) { - RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("alloc xmit_extbuf fail!\n")); - res = _FAIL; - goto exit; - } - - pxmitpriv->pxmit_extbuf = (u8 *)N_BYTE_ALIGMENT((size_t)(pxmitpriv->pallocated_xmit_extbuf), 4); - - pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf; - - for (i = 0; i < num_xmit_extbuf; i++) { - INIT_LIST_HEAD(&pxmitbuf->list); - - pxmitbuf->priv_data = NULL; - pxmitbuf->padapter = padapter; - pxmitbuf->ext_tag = true; - - res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, max_xmit_extbuf_size + XMITBUF_ALIGN_SZ); - if (res == _FAIL) { - res = _FAIL; - goto exit; - } - - list_add_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue)); - pxmitbuf++; - } - - pxmitpriv->free_xmit_extbuf_cnt = num_xmit_extbuf; - -exit: - ; -} diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index e0f0765f3c64..4d56dbad2a7d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -789,10 +789,6 @@ int sta2sta_data_frame(struct adapter *adapter, struct recv_frame *precv_frame, if (*psta == NULL) { RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("can't get psta under sta2sta_data_frame ; drop pkt\n")); - if (adapter->registrypriv.mp_mode == 1) { - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == true) - adapter->mppriv.rx_pktloss++; - } ret = _FAIL; goto exit; } @@ -2012,25 +2008,7 @@ static int recv_func_prehandle(struct adapter *padapter, struct recv_frame *rframe) { int ret = _SUCCESS; - struct rx_pkt_attrib *pattrib = &rframe->attrib; struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - if (padapter->registrypriv.mp_mode == 1) { - if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == true)) { /* padapter->mppriv.check_mp_pkt == 0)) */ - if (pattrib->crc_err == 1) - padapter->mppriv.rx_crcerrpktcount++; - else - padapter->mppriv.rx_pktcount++; - - if (check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE) == false) { - RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt\n")); - ret = _FAIL; - rtw_free_recvframe(rframe, pfree_recv_queue);/* free this recv_frame */ - goto exit; - } - } - } /* check the frame crtl field and decache */ ret = validate_recv_frame(padapter, rframe); @@ -2151,11 +2129,6 @@ s32 rtw_recv_entry(struct recv_frame *precvframe) return ret; _recv_entry_drop: - - if (padapter->registrypriv.mp_mode == 1) - padapter->mppriv.rx_pktloss = precvpriv->rx_drop; - - return ret; } diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 3a7d35d2f08b..7fa744b5027d 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -1258,7 +1258,6 @@ void PHY_IQCalibrate_8188E(struct adapter *adapt, bool recovery) { struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); struct odm_dm_struct *dm_odm = &pHalData->odmpriv; - struct mpt_context *pMptCtx = &(adapt->mppriv.MptCtx); s32 result[4][8]; /* last is final result */ u8 i, final_candidate, Indexforchannel; bool pathaok, pathbok; @@ -1278,11 +1277,6 @@ void PHY_IQCalibrate_8188E(struct adapter *adapt, bool recovery) if (!(dm_odm->SupportAbility & ODM_RF_CALIBRATION)) return; - if (*(dm_odm->mp_mode) == 1) { - singletone = pMptCtx->bSingleTone; - carrier_sup = pMptCtx->bCarrierSuppression; - } - /* 20120213 Turn on when continuous Tx to pass lab testing. (required by Edlu) */ if (singletone || carrier_sup) return; @@ -1410,12 +1404,7 @@ void PHY_LCCalibrate_8188E(struct adapter *adapt) u32 timeout = 2000, timecount = 0; struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); struct odm_dm_struct *dm_odm = &pHalData->odmpriv; - struct mpt_context *pMptCtx = &(adapt->mppriv.MptCtx); - if (*(dm_odm->mp_mode) == 1) { - singletone = pMptCtx->bSingleTone; - carrier_sup = pMptCtx->bCarrierSuppression; - } if (!(dm_odm->SupportAbility & ODM_RF_CALIBRATION)) return; /* 20120213 Turn on when continuous Tx to pass lab testing. (required by Edlu) */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c b/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c deleted file mode 100644 index 1e942501da20..000000000000 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_mp.c +++ /dev/null @@ -1,854 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTL8188E_MP_C_ - -#include -#include -#include -#include - -s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); - struct odm_dm_struct *pDM_Odm = &(pHalData->odmpriv); - - if (!netif_running(padapter->pnetdev)) { - RT_TRACE(_module_mp_, _drv_warning_, - ("SetPowerTracking! Fail: interface not opened!\n")); - return _FAIL; - } - - if (!check_fwstate(&padapter->mlmepriv, WIFI_MP_STATE)) { - RT_TRACE(_module_mp_, _drv_warning_, - ("SetPowerTracking! Fail: not in MP mode!\n")); - return _FAIL; - } - - if (enable) - pDM_Odm->RFCalibrateInfo.bTXPowerTracking = true; - else - pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = false; - - return _SUCCESS; -} - -void Hal_GetPowerTracking(struct adapter *padapter, u8 *enable) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); - struct odm_dm_struct *pDM_Odm = &(pHalData->odmpriv); - - *enable = pDM_Odm->RFCalibrateInfo.TxPowerTrackControl; -} - -/*----------------------------------------------------------------------------- - * Function: mpt_SwitchRfSetting - * - * Overview: Change RF Setting when we siwthc channel/rate/BW for MP. - * - * Input: struct adapter * pAdapter - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 01/08/2009 MHC Suggestion from SD3 Willis for 92S series. - * 01/09/2009 MHC Add CCK modification for 40MHZ. Suggestion from SD3. - * - *---------------------------------------------------------------------------*/ -void Hal_mpt_SwitchRfSetting(struct adapter *pAdapter) -{ - struct mp_priv *pmp = &pAdapter->mppriv; - - /* <20120525, Kordan> Dynamic mechanism for APK, asked by Dennis. */ - pmp->MptCtx.backup0x52_RF_A = (u8)PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0); - pmp->MptCtx.backup0x52_RF_B = (u8)PHY_QueryRFReg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0); - PHY_SetRFReg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, 0xD); - PHY_SetRFReg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, 0xD); - - return; -} -/*---------------------------hal\rtl8192c\MPT_Phy.c---------------------------*/ - -/*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/ -void Hal_MPT_CCKTxPowerAdjust(struct adapter *Adapter, bool bInCH14) -{ - u32 TempVal = 0, TempVal2 = 0, TempVal3 = 0; - u32 CurrCCKSwingVal = 0, CCKSwingIndex = 12; - u8 i; - - /* get current cck swing value and check 0xa22 & 0xa23 later to match the table. */ - CurrCCKSwingVal = read_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord); - - if (!bInCH14) { - /* Readback the current bb cck swing value and compare with the table to */ - /* get the current swing index */ - for (i = 0; i < CCK_TABLE_SIZE; i++) { - if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch1_Ch13[i][0]) && - (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch1_Ch13[i][1])) { - CCKSwingIndex = i; - break; - } - } - - /* Write 0xa22 0xa23 */ - TempVal = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][0] + - (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][1]<<8); - - - /* Write 0xa24 ~ 0xa27 */ - TempVal2 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][2] + - (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][3]<<8) + - (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][4]<<16)+ - (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][5]<<24); - - /* Write 0xa28 0xa29 */ - TempVal3 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][6] + - (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][7]<<8); - } else { - for (i = 0; i < CCK_TABLE_SIZE; i++) { - if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch14[i][0]) && - (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch14[i][1])) { - CCKSwingIndex = i; - break; - } - } - - /* Write 0xa22 0xa23 */ - TempVal = CCKSwingTable_Ch14[CCKSwingIndex][0] + - (CCKSwingTable_Ch14[CCKSwingIndex][1]<<8); - - /* Write 0xa24 ~ 0xa27 */ - TempVal2 = CCKSwingTable_Ch14[CCKSwingIndex][2] + - (CCKSwingTable_Ch14[CCKSwingIndex][3]<<8) + - (CCKSwingTable_Ch14[CCKSwingIndex][4]<<16)+ - (CCKSwingTable_Ch14[CCKSwingIndex][5]<<24); - - /* Write 0xa28 0xa29 */ - TempVal3 = CCKSwingTable_Ch14[CCKSwingIndex][6] + - (CCKSwingTable_Ch14[CCKSwingIndex][7]<<8); - } - - write_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord, TempVal); - write_bbreg(Adapter, rCCK0_TxFilter2, bMaskDWord, TempVal2); - write_bbreg(Adapter, rCCK0_DebugPort, bMaskLWord, TempVal3); -} - -void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *pAdapter, bool beven) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - struct mpt_context *pMptCtx = &pAdapter->mppriv.MptCtx; - struct odm_dm_struct *pDM_Odm = &(pHalData->odmpriv); - s32 TempCCk; - u8 CCK_index, CCK_index_old = 0; - u8 Action = 0; /* 0: no action, 1: even->odd, 2:odd->even */ - s32 i = 0; - - - if (!IS_92C_SERIAL(pHalData->VersionID)) - return; - if (beven && !pMptCtx->bMptIndexEven) { - /* odd->even */ - Action = 2; - pMptCtx->bMptIndexEven = true; - } else if (!beven && pMptCtx->bMptIndexEven) { - /* even->odd */ - Action = 1; - pMptCtx->bMptIndexEven = false; - } - - if (Action != 0) { - /* Query CCK default setting From 0xa24 */ - TempCCk = read_bbreg(pAdapter, rCCK0_TxFilter2, bMaskDWord) & bMaskCCK; - for (i = 0; i < CCK_TABLE_SIZE; i++) { - if (pDM_Odm->RFCalibrateInfo.bCCKinCH14) { - if (!memcmp((void *)&TempCCk, (void *)&CCKSwingTable_Ch14[i][2], 4)) { - CCK_index_old = (u8)i; - break; - } - } else { - if (!memcmp((void *)&TempCCk, (void *)&CCKSwingTable_Ch1_Ch13[i][2], 4)) { - CCK_index_old = (u8)i; - break; - } - } - } - - if (Action == 1) - CCK_index = CCK_index_old - 1; - else - CCK_index = CCK_index_old + 1; - - if (CCK_index > 32) - CCK_index = 32; - /* Adjust CCK according to gain index */ - if (!pDM_Odm->RFCalibrateInfo.bCCKinCH14) { - usb_write8(pAdapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]); - usb_write8(pAdapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]); - usb_write8(pAdapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]); - usb_write8(pAdapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]); - usb_write8(pAdapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]); - usb_write8(pAdapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]); - usb_write8(pAdapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]); - usb_write8(pAdapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]); - } else { - usb_write8(pAdapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]); - usb_write8(pAdapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]); - usb_write8(pAdapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]); - usb_write8(pAdapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]); - usb_write8(pAdapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]); - usb_write8(pAdapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]); - usb_write8(pAdapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]); - usb_write8(pAdapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]); - } - } -} -/*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/ - -/* - * SetChannel - * Description - * Use H2C command to change channel, - * not only modify rf register, but also other setting need to be done. - */ -void Hal_SetChannel(struct adapter *pAdapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - struct mp_priv *pmp = &pAdapter->mppriv; - struct odm_dm_struct *pDM_Odm = &(pHalData->odmpriv); - u8 eRFPath; - u8 channel = pmp->channel; - - /* set RF channel register */ - for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) - _write_rfreg(pAdapter, eRFPath, ODM_CHANNEL, 0x3FF, channel); - Hal_mpt_SwitchRfSetting(pAdapter); - - SelectChannel(pAdapter, channel); - - if (pHalData->CurrentChannel == 14 && !pDM_Odm->RFCalibrateInfo.bCCKinCH14) { - pDM_Odm->RFCalibrateInfo.bCCKinCH14 = true; - Hal_MPT_CCKTxPowerAdjust(pAdapter, pDM_Odm->RFCalibrateInfo.bCCKinCH14); - } else if (pHalData->CurrentChannel != 14 && pDM_Odm->RFCalibrateInfo.bCCKinCH14) { - pDM_Odm->RFCalibrateInfo.bCCKinCH14 = false; - Hal_MPT_CCKTxPowerAdjust(pAdapter, pDM_Odm->RFCalibrateInfo.bCCKinCH14); - } -} - -/* - * Notice - * Switch bandwitdth may change center frequency(channel) - */ -void Hal_SetBandwidth(struct adapter *pAdapter) -{ - struct mp_priv *pmp = &pAdapter->mppriv; - - - SetBWMode(pAdapter, pmp->bandwidth, pmp->prime_channel_offset); - Hal_mpt_SwitchRfSetting(pAdapter); -} - -void Hal_SetCCKTxPower(struct adapter *pAdapter, u8 *TxPower) -{ - u32 tmpval = 0; - - - /* rf-A cck tx power */ - write_bbreg(pAdapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, TxPower[RF_PATH_A]); - tmpval = (TxPower[RF_PATH_A]<<16) | (TxPower[RF_PATH_A]<<8) | TxPower[RF_PATH_A]; - write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval); - - /* rf-B cck tx power */ - write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, TxPower[RF_PATH_B]); - tmpval = (TxPower[RF_PATH_B]<<16) | (TxPower[RF_PATH_B]<<8) | TxPower[RF_PATH_B]; - write_bbreg(pAdapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval); - - RT_TRACE(_module_mp_, _drv_notice_, - ("-SetCCKTxPower: A[0x%02x] B[0x%02x]\n", - TxPower[RF_PATH_A], TxPower[RF_PATH_B])); -} - -void Hal_SetOFDMTxPower(struct adapter *pAdapter, u8 *TxPower) -{ - u32 TxAGC = 0; - u8 tmpval = 0; - - /* HT Tx-rf(A) */ - tmpval = TxPower[RF_PATH_A]; - TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval; - - write_bbreg(pAdapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_A_Mcs03_Mcs00, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_A_Mcs07_Mcs04, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC); - - /* HT Tx-rf(B) */ - tmpval = TxPower[RF_PATH_B]; - TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval; - - write_bbreg(pAdapter, rTxAGC_B_Rate18_06, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_B_Rate54_24, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_B_Mcs03_Mcs00, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_B_Mcs07_Mcs04, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC); - write_bbreg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC); -} - -void Hal_SetAntennaPathPower(struct adapter *pAdapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - u8 TxPowerLevel[MAX_RF_PATH_NUMS]; - u8 rfPath; - - TxPowerLevel[RF_PATH_A] = pAdapter->mppriv.txpoweridx; - TxPowerLevel[RF_PATH_B] = pAdapter->mppriv.txpoweridx_b; - - switch (pAdapter->mppriv.antenna_tx) { - case ANTENNA_A: - default: - rfPath = RF_PATH_A; - break; - case ANTENNA_B: - rfPath = RF_PATH_B; - break; - case ANTENNA_C: - rfPath = RF_PATH_C; - break; - } - - switch (pHalData->rf_chip) { - case RF_8225: - case RF_8256: - case RF_6052: - Hal_SetCCKTxPower(pAdapter, TxPowerLevel); - if (pAdapter->mppriv.rateidx < MPT_RATE_6M) /* CCK rate */ - Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0); - Hal_SetOFDMTxPower(pAdapter, TxPowerLevel); - break; - default: - break; - } -} - -void Hal_SetTxPower(struct adapter *pAdapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - u8 TxPower = pAdapter->mppriv.txpoweridx; - u8 TxPowerLevel[MAX_RF_PATH_NUMS]; - u8 rf, rfPath; - - for (rf = 0; rf < MAX_RF_PATH_NUMS; rf++) - TxPowerLevel[rf] = TxPower; - - switch (pAdapter->mppriv.antenna_tx) { - case ANTENNA_A: - default: - rfPath = RF_PATH_A; - break; - case ANTENNA_B: - rfPath = RF_PATH_B; - break; - case ANTENNA_C: - rfPath = RF_PATH_C; - break; - } - - switch (pHalData->rf_chip) { - /* 2008/09/12 MH Test only !! We enable the TX power tracking for MP!!!!! */ - /* We should call normal driver API later!! */ - case RF_8225: - case RF_8256: - case RF_6052: - Hal_SetCCKTxPower(pAdapter, TxPowerLevel); - if (pAdapter->mppriv.rateidx < MPT_RATE_6M) /* CCK rate */ - Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0); - Hal_SetOFDMTxPower(pAdapter, TxPowerLevel); - break; - default: - break; - } -} - -void Hal_SetDataRate(struct adapter *pAdapter) -{ - Hal_mpt_SwitchRfSetting(pAdapter); -} - -void Hal_SetAntenna(struct adapter *pAdapter) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - - struct ant_sel_ofdm *p_ofdm_tx; /* OFDM Tx register */ - struct ant_sel_cck *p_cck_txrx; - u8 r_rx_antenna_ofdm = 0, r_ant_select_cck_val = 0; - u8 chgTx = 0, chgRx = 0; - u32 r_ant_select_ofdm_val = 0, r_ofdm_tx_en_val = 0; - - - p_ofdm_tx = (struct ant_sel_ofdm *)&r_ant_select_ofdm_val; - p_cck_txrx = (struct ant_sel_cck *)&r_ant_select_cck_val; - - p_ofdm_tx->r_ant_ht1 = 0x1; - p_ofdm_tx->r_ant_ht2 = 0x2; /* Second TX RF path is A */ - p_ofdm_tx->r_ant_non_ht = 0x3; /* 0x1+0x2=0x3 */ - - switch (pAdapter->mppriv.antenna_tx) { - case ANTENNA_A: - p_ofdm_tx->r_tx_antenna = 0x1; - r_ofdm_tx_en_val = 0x1; - p_ofdm_tx->r_ant_l = 0x1; - p_ofdm_tx->r_ant_ht_s1 = 0x1; - p_ofdm_tx->r_ant_non_ht_s1 = 0x1; - p_cck_txrx->r_ccktx_enable = 0x8; - chgTx = 1; - - /* From SD3 Willis suggestion !!! Set RF A=TX and B as standby */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 1); - r_ofdm_tx_en_val = 0x3; - - /* Power save */ - - /* We need to close RFB by SW control */ - if (pHalData->rf_type == RF_2T2R) { - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 1); - PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 0); - } - break; - case ANTENNA_B: - p_ofdm_tx->r_tx_antenna = 0x2; - r_ofdm_tx_en_val = 0x2; - p_ofdm_tx->r_ant_l = 0x2; - p_ofdm_tx->r_ant_ht_s1 = 0x2; - p_ofdm_tx->r_ant_non_ht_s1 = 0x2; - p_cck_txrx->r_ccktx_enable = 0x4; - chgTx = 1; - /* From SD3 Willis suggestion !!! Set RF A as standby */ - PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 1); - PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2); - - /* Power save */ - /* cosa r_ant_select_ofdm_val = 0x22222222; */ - - /* 2008/10/31 MH From SD3 Willi's suggestion. We must read RF 1T table. */ - /* 2009/01/08 MH From Sd3 Willis. We need to close RFA by SW control */ - if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_1T2R) { - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 1); - PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1); - } - break; - case ANTENNA_AB: /* For 8192S */ - p_ofdm_tx->r_tx_antenna = 0x3; - r_ofdm_tx_en_val = 0x3; - p_ofdm_tx->r_ant_l = 0x3; - p_ofdm_tx->r_ant_ht_s1 = 0x3; - p_ofdm_tx->r_ant_non_ht_s1 = 0x3; - p_cck_txrx->r_ccktx_enable = 0xC; - chgTx = 1; - - /* From SD3 Willis suggestion !!! Set RF B as standby */ - PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2); - PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2); - - /* Disable Power save */ - /* cosa r_ant_select_ofdm_val = 0x3321333; */ - /* 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control */ - if (pHalData->rf_type == RF_2T2R) { - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1); - PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1); - } - break; - default: - break; - } - - /* r_rx_antenna_ofdm, bit0=A, bit1=B, bit2=C, bit3=D */ - /* r_cckrx_enable : CCK default, 0=A, 1=B, 2=C, 3=D */ - /* r_cckrx_enable_2 : CCK option, 0=A, 1=B, 2=C, 3=D */ - switch (pAdapter->mppriv.antenna_rx) { - case ANTENNA_A: - r_rx_antenna_ofdm = 0x1; /* A */ - p_cck_txrx->r_cckrx_enable = 0x0; /* default: A */ - p_cck_txrx->r_cckrx_enable_2 = 0x0; /* option: A */ - chgRx = 1; - break; - case ANTENNA_B: - r_rx_antenna_ofdm = 0x2; /* B */ - p_cck_txrx->r_cckrx_enable = 0x1; /* default: B */ - p_cck_txrx->r_cckrx_enable_2 = 0x1; /* option: B */ - chgRx = 1; - break; - case ANTENNA_AB: - r_rx_antenna_ofdm = 0x3; /* AB */ - p_cck_txrx->r_cckrx_enable = 0x0; /* default:A */ - p_cck_txrx->r_cckrx_enable_2 = 0x1; /* option:B */ - chgRx = 1; - break; - default: - break; - } - - if (chgTx && chgRx) { - switch (pHalData->rf_chip) { - case RF_8225: - case RF_8256: - case RF_6052: - /* r_ant_sel_cck_val = r_ant_select_cck_val; */ - PHY_SetBBReg(pAdapter, rFPGA1_TxInfo, 0x7fffffff, r_ant_select_ofdm_val); /* OFDM Tx */ - PHY_SetBBReg(pAdapter, rFPGA0_TxInfo, 0x0000000f, r_ofdm_tx_en_val); /* OFDM Tx */ - PHY_SetBBReg(pAdapter, rOFDM0_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); /* OFDM Rx */ - PHY_SetBBReg(pAdapter, rOFDM1_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); /* OFDM Rx */ - PHY_SetBBReg(pAdapter, rCCK0_AFESetting, bMaskByte3, r_ant_select_cck_val); /* CCK TxRx */ - - break; - default: - break; - } - } - - RT_TRACE(_module_mp_, _drv_notice_, ("-SwitchAntenna: finished\n")); -} - -s32 Hal_SetThermalMeter(struct adapter *pAdapter, u8 target_ther) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - - - if (!netif_running(pAdapter->pnetdev)) { - RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter! Fail: interface not opened!\n")); - return _FAIL; - } - - if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == false) { - RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter: Fail! not in MP mode!\n")); - return _FAIL; - } - - target_ther &= 0xff; - if (target_ther < 0x07) - target_ther = 0x07; - else if (target_ther > 0x1d) - target_ther = 0x1d; - - pHalData->EEPROMThermalMeter = target_ther; - - return _SUCCESS; -} - -void Hal_TriggerRFThermalMeter(struct adapter *pAdapter) -{ - _write_rfreg(pAdapter, RF_PATH_A , RF_T_METER_88E , BIT17 | BIT16 , 0x03); -} - -u8 Hal_ReadRFThermalMeter(struct adapter *pAdapter) -{ - u32 ThermalValue = 0; - - ThermalValue = _read_rfreg(pAdapter, RF_PATH_A, RF_T_METER_88E, 0xfc00); - return (u8)ThermalValue; -} - -void Hal_GetThermalMeter(struct adapter *pAdapter, u8 *value) -{ - Hal_TriggerRFThermalMeter(pAdapter); - msleep(1000); - *value = Hal_ReadRFThermalMeter(pAdapter); -} - -void Hal_SetSingleCarrierTx(struct adapter *pAdapter, u8 bStart) -{ - pAdapter->mppriv.MptCtx.bSingleCarrier = bStart; - if (bStart) { - /* Start Single Carrier. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetSingleCarrierTx: test start\n")); - /* 1. if OFDM block on? */ - if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn)) - write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);/* set OFDM block on */ - - /* 2. set CCK test mode off, set to CCK normal mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable); - /* 3. turn on scramble setting */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); - /* 4. Turn On Single Carrier Tx and turn off the other test modes. */ - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - /* for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500); - } else { - /* Stop Single Carrier. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetSingleCarrierTx: test stop\n")); - - /* Turn off all test modes. */ - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - msleep(10); - - /* BB Reset */ - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); - - /* Stop for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100); - } -} - - -void Hal_SetSingleToneTx(struct adapter *pAdapter, u8 bStart) -{ - struct hal_data_8188e *pHalData = GET_HAL_DATA(pAdapter); - bool is92C = IS_92C_SERIAL(pHalData->VersionID); - - u8 rfPath; - u32 reg58 = 0x0; - switch (pAdapter->mppriv.antenna_tx) { - case ANTENNA_A: - default: - rfPath = RF_PATH_A; - break; - case ANTENNA_B: - rfPath = RF_PATH_B; - break; - case ANTENNA_C: - rfPath = RF_PATH_C; - break; - } - - pAdapter->mppriv.MptCtx.bSingleTone = bStart; - if (bStart) { - /* Start Single Tone. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetSingleToneTx: test start\n")); - /* <20120326, Kordan> To amplify the power of tone for Xtal calibration. (asked by Edlu) */ - reg58 = PHY_QueryRFReg(pAdapter, RF_PATH_A, LNA_Low_Gain_3, bRFRegOffsetMask); - reg58 &= 0xFFFFFFF0; - reg58 += 2; - PHY_SetRFReg(pAdapter, RF_PATH_A, LNA_Low_Gain_3, bRFRegOffsetMask, reg58); - PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x0); - PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x0); - - if (is92C) { - _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x01); - msleep(1); - if (rfPath == RF_PATH_A) - write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x10000); /* PAD all on. */ - else if (rfPath == RF_PATH_B) - write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x10000); /* PAD all on. */ - write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); /* PAD all on. */ - msleep(1); - } else { - write_rfreg(pAdapter, rfPath, 0x21, 0xd4000); - msleep(1); - write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); /* PAD all on. */ - msleep(1); - } - - /* for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500); - - } else { - /* Stop Single Tone. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetSingleToneTx: test stop\n")); - - /* <20120326, Kordan> To amplify the power of tone for Xtal calibration. (asked by Edlu) */ - /* <20120326, Kordan> Only in single tone mode. (asked by Edlu) */ - reg58 = PHY_QueryRFReg(pAdapter, RF_PATH_A, LNA_Low_Gain_3, bRFRegOffsetMask); - reg58 &= 0xFFFFFFF0; - PHY_SetRFReg(pAdapter, RF_PATH_A, LNA_Low_Gain_3, bRFRegOffsetMask, reg58); - write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x1); - write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x1); - if (is92C) { - _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x00); - msleep(1); - write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x32d75); /* PAD all on. */ - write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x32d75); /* PAD all on. */ - msleep(1); - } else { - write_rfreg(pAdapter, rfPath, 0x21, 0x54000); - msleep(1); - write_rfreg(pAdapter, rfPath, 0x00, 0x30000); /* PAD all on. */ - msleep(1); - } - - /* Stop for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100); - } -} - - - -void Hal_SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart) -{ - pAdapter->mppriv.MptCtx.bCarrierSuppression = bStart; - if (bStart) { - /* Start Carrier Suppression. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetCarrierSuppressionTx: test start\n")); - if (pAdapter->mppriv.rateidx <= MPT_RATE_11M) { - /* 1. if CCK block on? */ - if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn)) - write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);/* set CCK block on */ - - /* Turn Off All Test Mode */ - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); /* transmit mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x0); /* turn off scramble setting */ - - /* Set CCK Tx Test Rate */ - write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, 0x0); /* Set FTxRate to 1Mbps */ - } - - /* for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500); - } else { - /* Stop Carrier Suppression. */ - RT_TRACE(_module_mp_, _drv_alert_, ("SetCarrierSuppressionTx: test stop\n")); - if (pAdapter->mppriv.rateidx <= MPT_RATE_11M) { - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /* normal mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /* turn on scramble setting */ - - /* BB Reset */ - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); - } - - /* Stop for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100); - } -} - -void Hal_SetCCKContinuousTx(struct adapter *pAdapter, u8 bStart) -{ - u32 cckrate; - - if (bStart) { - RT_TRACE(_module_mp_, _drv_alert_, - ("SetCCKContinuousTx: test start\n")); - - /* 1. if CCK block on? */ - if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn)) - write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);/* set CCK block on */ - - /* Turn Off All Test Mode */ - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - /* Set CCK Tx Test Rate */ - cckrate = pAdapter->mppriv.rateidx; - write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, cckrate); - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); /* transmit mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); /* turn on scramble setting */ - - /* for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500); - } else { - RT_TRACE(_module_mp_, _drv_info_, - ("SetCCKContinuousTx: test stop\n")); - - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /* normal mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); /* turn on scramble setting */ - - /* BB Reset */ - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); - - /* Stop for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100); - } - - pAdapter->mppriv.MptCtx.bCckContTx = bStart; - pAdapter->mppriv.MptCtx.bOfdmContTx = false; -} /* mpt_StartCckContTx */ - -void Hal_SetOFDMContinuousTx(struct adapter *pAdapter, u8 bStart) -{ - if (bStart) { - RT_TRACE(_module_mp_, _drv_info_, ("SetOFDMContinuousTx: test start\n")); - /* 1. if OFDM block on? */ - if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn)) - write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);/* set OFDM block on */ - - /* 2. set CCK test mode off, set to CCK normal mode */ - write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable); - - /* 3. turn on scramble setting */ - write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); - /* 4. Turn On Continue Tx and turn off the other test modes. */ - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bEnable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - - /* for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500); - - } else { - RT_TRACE(_module_mp_, _drv_info_, ("SetOFDMContinuousTx: test stop\n")); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); - write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); - /* Delay 10 ms */ - msleep(10); - /* BB Reset */ - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); - write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); - - /* Stop for dynamic set Power index. */ - write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100); - write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100); - } - - pAdapter->mppriv.MptCtx.bCckContTx = false; - pAdapter->mppriv.MptCtx.bOfdmContTx = bStart; -} /* mpt_StartOfdmContTx */ - -void Hal_SetContinuousTx(struct adapter *pAdapter, u8 bStart) -{ - RT_TRACE(_module_mp_, _drv_info_, - ("SetContinuousTx: rate:%d\n", pAdapter->mppriv.rateidx)); - - pAdapter->mppriv.MptCtx.bStartContTx = bStart; - if (pAdapter->mppriv.rateidx <= MPT_RATE_11M) - Hal_SetCCKContinuousTx(pAdapter, bStart); - else if ((pAdapter->mppriv.rateidx >= MPT_RATE_6M) && - (pAdapter->mppriv.rateidx <= MPT_RATE_MCS15)) - Hal_SetOFDMContinuousTx(pAdapter, bStart); -} diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 7004e0b745b8..3494ac697456 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -306,9 +306,6 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bag ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate)); } else if ((pxmitframe->frame_tag&0x0f) == TXAGG_FRAMETAG) { DBG_88E("pxmitframe->frame_tag == TXAGG_FRAMETAG\n"); - } else if (((pxmitframe->frame_tag&0x0f) == MP_FRAMETAG) && - (adapt->registrypriv.mp_mode == 1)) { - fill_txdesc_for_mp(adapt, ptxdesc); } else { DBG_88E("pxmitframe->frame_tag = %d\n", pxmitframe->frame_tag); diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index 2bec1c358474..c98928b33d27 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -880,48 +880,43 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM); rtl8188e_InitHalDm(Adapter); - if (Adapter->registrypriv.mp_mode == 1) { - Adapter->mppriv.channel = haldata->CurrentChannel; - MPT_InitializeAdapter(Adapter, Adapter->mppriv.channel); - } else { - /* 2010/08/11 MH Merge from 8192SE for Minicard init. We need to confirm current radio status */ - /* and then decide to enable RF or not.!!!??? For Selective suspend mode. We may not */ - /* call initstruct adapter. May cause some problem?? */ - /* Fix the bug that Hw/Sw radio off before S3/S4, the RF off action will not be executed */ - /* in MgntActSet_RF_State() after wake up, because the value of haldata->eRFPowerState */ - /* is the same as eRfOff, we should change it to eRfOn after we config RF parameters. */ - /* Added by tynli. 2010.03.30. */ - pwrctrlpriv->rf_pwrstate = rf_on; + /* 2010/08/11 MH Merge from 8192SE for Minicard init. We need to confirm current radio status */ + /* and then decide to enable RF or not.!!!??? For Selective suspend mode. We may not */ + /* call initstruct adapter. May cause some problem?? */ + /* Fix the bug that Hw/Sw radio off before S3/S4, the RF off action will not be executed */ + /* in MgntActSet_RF_State() after wake up, because the value of haldata->eRFPowerState */ + /* is the same as eRfOff, we should change it to eRfOn after we config RF parameters. */ + /* Added by tynli. 2010.03.30. */ + pwrctrlpriv->rf_pwrstate = rf_on; - /* enable Tx report. */ - usb_write8(Adapter, REG_FWHW_TXQ_CTRL+1, 0x0F); + /* enable Tx report. */ + usb_write8(Adapter, REG_FWHW_TXQ_CTRL+1, 0x0F); - /* Suggested by SD1 pisa. Added by tynli. 2011.10.21. */ - usb_write8(Adapter, REG_EARLY_MODE_CONTROL+3, 0x01);/* Pretx_en, for WEP/TKIP SEC */ + /* Suggested by SD1 pisa. Added by tynli. 2011.10.21. */ + usb_write8(Adapter, REG_EARLY_MODE_CONTROL+3, 0x01);/* Pretx_en, for WEP/TKIP SEC */ - /* tynli_test_tx_report. */ - usb_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); + /* tynli_test_tx_report. */ + usb_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0); - /* enable tx DMA to drop the redundate data of packet */ - usb_write16(Adapter, REG_TXDMA_OFFSET_CHK, (usb_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); + /* enable tx DMA to drop the redundate data of packet */ + usb_write16(Adapter, REG_TXDMA_OFFSET_CHK, (usb_read16(Adapter, REG_TXDMA_OFFSET_CHK) | DROP_DATA_EN)); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_IQK); /* 2010/08/26 MH Merge from 8192CE. */ - if (pwrctrlpriv->rf_pwrstate == rf_on) { - if (haldata->odmpriv.RFCalibrateInfo.bIQKInitialized) { + if (pwrctrlpriv->rf_pwrstate == rf_on) { + if (haldata->odmpriv.RFCalibrateInfo.bIQKInitialized) { PHY_IQCalibrate_8188E(Adapter, true); - } else { - PHY_IQCalibrate_8188E(Adapter, false); - haldata->odmpriv.RFCalibrateInfo.bIQKInitialized = true; - } + } else { + PHY_IQCalibrate_8188E(Adapter, false); + haldata->odmpriv.RFCalibrateInfo.bIQKInitialized = true; + } HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_PW_TRACK); - ODM_TXPowerTrackingCheck(&haldata->odmpriv); + ODM_TXPowerTrackingCheck(&haldata->odmpriv); HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_LCK); PHY_LCCalibrate_8188E(Adapter); - } } /* HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_PABIAS); */ diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 097fcc9b54e1..00a207ca391f 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -50,7 +50,6 @@ #include #include #include -#include #define SPEC_DEV_ID_NONE BIT(0) #define SPEC_DEV_ID_DISABLE_HT BIT(1) @@ -200,7 +199,6 @@ struct adapter { struct pwrctrl_priv pwrctrlpriv; struct eeprom_priv eeprompriv; struct led_priv ledpriv; - struct mp_priv mppriv; #ifdef CONFIG_88EU_AP_MODE struct hostapd_priv *phostapdpriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_mp.h b/drivers/staging/rtl8188eu/include/rtw_mp.h deleted file mode 100644 index ffa299b8a6cb..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_mp.h +++ /dev/null @@ -1,495 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_MP_H_ -#define _RTW_MP_H_ - -/* 00 - Success */ -/* 11 - Error */ -#define STATUS_SUCCESS (0x00000000L) -#define STATUS_PENDING (0x00000103L) - -#define STATUS_UNSUCCESSFUL (0xC0000001L) -#define STATUS_INSUFFICIENT_RESOURCES (0xC000009AL) -#define STATUS_NOT_SUPPORTED (0xC00000BBL) - -#define NDIS_STATUS_SUCCESS ((int)STATUS_SUCCESS) -#define NDIS_STATUS_PENDING ((int)STATUS_PENDING) -#define NDIS_STATUS_NOT_RECOGNIZED ((int)0x00010001L) -#define NDIS_STATUS_NOT_COPIED ((int)0x00010002L) -#define NDIS_STATUS_NOT_ACCEPTED ((int)0x00010003L) -#define NDIS_STATUS_CALL_ACTIVE ((int)0x00010007L) - -#define NDIS_STATUS_FAILURE ((int)STATUS_UNSUCCESSFUL) -#define NDIS_STATUS_RESOURCES ((int)STATUS_INSUFFICIENT_RESOURCES) -#define NDIS_STATUS_CLOSING ((int)0xC0010002L) -#define NDIS_STATUS_BAD_VERSION ((int)0xC0010004L) -#define NDIS_STATUS_BAD_CHARACTERISTICS ((int)0xC0010005L) -#define NDIS_STATUS_ADAPTER_NOT_FOUND ((int)0xC0010006L) -#define NDIS_STATUS_OPEN_FAILED ((int)0xC0010007L) -#define NDIS_STATUS_DEVICE_FAILED ((int)0xC0010008L) -#define NDIS_STATUS_MULTICAST_FULL ((int)0xC0010009L) -#define NDIS_STATUS_MULTICAST_EXISTS ((int)0xC001000AL) -#define NDIS_STATUS_MULTICAST_NOT_FOUND ((int)0xC001000BL) -#define NDIS_STATUS_REQUEST_ABORTED ((int)0xC001000CL) -#define NDIS_STATUS_RESET_IN_PROGRESS ((int)0xC001000DL) -#define NDIS_STATUS_CLOSING_INDICATING ((int)0xC001000EL) -#define NDIS_STATUS_NOT_SUPPORTED ((int)STATUS_NOT_SUPPORTED) -#define NDIS_STATUS_INVALID_PACKET ((int)0xC001000FL) -#define NDIS_STATUS_OPEN_LIST_FULL ((int)0xC0010010L) -#define NDIS_STATUS_ADAPTER_NOT_READY ((int)0xC0010011L) -#define NDIS_STATUS_ADAPTER_NOT_OPEN ((int)0xC0010012L) -#define NDIS_STATUS_NOT_INDICATING ((int)0xC0010013L) -#define NDIS_STATUS_INVALID_LENGTH ((int)0xC0010014L) -#define NDIS_STATUS_INVALID_DATA ((int)0xC0010015L) -#define NDIS_STATUS_BUFFER_TOO_SHORT ((int)0xC0010016L) -#define NDIS_STATUS_INVALID_OID ((int)0xC0010017L) -#define NDIS_STATUS_ADAPTER_REMOVED ((int)0xC0010018L) -#define NDIS_STATUS_UNSUPPORTED_MEDIA ((int)0xC0010019L) -#define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((int)0xC001001AL) -#define NDIS_STATUS_FILE_NOT_FOUND ((int)0xC001001BL) -#define NDIS_STATUS_ERROR_READING_FILE ((int)0xC001001CL) -#define NDIS_STATUS_ALREADY_MAPPED ((int)0xC001001DL) -#define NDIS_STATUS_RESOURCE_CONFLICT ((int)0xC001001EL) -#define NDIS_STATUS_NO_CABLE ((int)0xC001001FL) - -#define NDIS_STATUS_INVALID_SAP ((int)0xC0010020L) -#define NDIS_STATUS_SAP_IN_USE ((int)0xC0010021L) -#define NDIS_STATUS_INVALID_ADDRESS ((int)0xC0010022L) -#define NDIS_STATUS_VC_NOT_ACTIVATED ((int)0xC0010023L) -#define NDIS_STATUS_DEST_OUT_OF_ORDER ((int)0xC0010024L) /*cause 27*/ -#define NDIS_STATUS_VC_NOT_AVAILABLE ((int)0xC0010025L) /*cause 35,45 */ -#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((int)0xC0010026L) /*cause 37*/ -#define NDIS_STATUS_INCOMPATABLE_QOS ((int)0xC0010027L) /*cause 49*/ -#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((int)0xC0010028L) /*cause 93*/ -#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((int)0xC0010029L) /*cause 3 */ - -enum antenna_path { - ANTENNA_NONE = 0x00, - ANTENNA_D, - ANTENNA_C, - ANTENNA_CD, - ANTENNA_B, - ANTENNA_BD, - ANTENNA_BC, - ANTENNA_BCD, - ANTENNA_A, - ANTENNA_AD, - ANTENNA_AC, - ANTENNA_ACD, - ANTENNA_AB, - ANTENNA_ABD, - ANTENNA_ABC, - ANTENNA_ABCD -}; - - -#define MAX_MP_XMITBUF_SZ 2048 -#define NR_MP_XMITFRAME 8 - -struct mp_xmit_frame { - struct list_head list; - struct pkt_attrib attrib; - struct sk_buff *pkt; - int frame_tag; - struct adapter *padapter; - struct urb *pxmit_urb[8]; - /* insert urb, irp, and irpcnt info below... */ - u8 *mem_addr; - u32 sz[8]; - u8 bpending[8]; - int ac_tag[8]; - int last[8]; - uint irpcnt; - uint fragcnt; - uint mem[(MAX_MP_XMITBUF_SZ >> 2)]; -}; - -struct mp_wiparam { - u32 bcompleted; - u32 act_type; - u32 io_offset; - u32 io_value; -}; - -typedef void(*wi_act_func)(void *padapter); - -struct mp_tx { - u8 stop; - u32 count, sended; - u8 payload; - struct pkt_attrib attrib; - struct tx_desc desc; - u8 *pallocated_buf; - u8 *buf; - u32 buf_size, write_size; - void *PktTxThread; -}; - -#include - -#define MP_MAX_LINES 1000 -#define MP_MAX_LINES_BYTES 256 - -typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter); - -struct mpt_context { - /* Indicate if we have started Mass Production Test. */ - bool bMassProdTest; - - /* Indicate if the driver is unloading or unloaded. */ - bool bMptDrvUnload; - - struct semaphore MPh2c_Sema; - struct timer_list MPh2c_timeout_timer; -/* Event used to sync H2c for BT control */ - - bool MptH2cRspEvent; - bool MptBtC2hEvent; - bool bMPh2c_timeout; - - /* 8190 PCI does not support NDIS_WORK_ITEM. */ - /* Work Item for Mass Production Test. */ - /* Event used to sync the case unloading driver and MptWorkItem - * is still in progress. */ - /* Indicate a MptWorkItem is scheduled and not yet finished. */ - bool bMptWorkItemInProgress; - /* An instance which implements function and context of MptWorkItem. */ - MPT_WORK_ITEM_HANDLER CurrMptAct; - - /* 1=Start, 0=Stop from UI. */ - u32 MptTestStart; - /* _TEST_MODE, defined in MPT_Req2.h */ - u32 MptTestItem; - /* Variable needed in each implementation of CurrMptAct. */ - u32 MptActType; /* Type of action performed in CurrMptAct. */ - /* The Offset of IO operation is depend of MptActType. */ - u32 MptIoOffset; - /* The Value of IO operation is depend of MptActType. */ - u32 MptIoValue; - /* The RfPath of IO operation is depend of MptActType. */ - u32 MptRfPath; - - enum wireless_mode MptWirelessModeToSw; /* Wireless mode to switch. */ - u8 MptChannelToSw; /* Channel to switch. */ - u8 MptInitGainToSet; /* Initial gain to set. */ - u32 MptBandWidth; /* bandwidth to switch. */ - u32 MptRateIndex; /* rate index. */ - /* Register value kept for Single Carrier Tx test. */ - u8 btMpCckTxPower; - /* Register value kept for Single Carrier Tx test. */ - u8 btMpOfdmTxPower; - /* For MP Tx Power index */ - u8 TxPwrLevel[2]; /* rf-A, rf-B */ - - /* Content of RCR Regsiter for Mass Production Test. */ - u32 MptRCR; - /* true if we only receive packets with specific pattern. */ - bool bMptFilterPattern; - /* Rx OK count, statistics used in Mass Production Test. */ - u32 MptRxOkCnt; - /* Rx CRC32 error count, statistics used in Mass Production Test. */ - u32 MptRxCrcErrCnt; - - bool bCckContTx; /* true if we are in CCK Continuous Tx test. */ - bool bOfdmContTx; /* true if we are in OFDM Continuous Tx test. */ - bool bStartContTx; /* true if we have start Continuous Tx test. */ - /* true if we are in Single Carrier Tx test. */ - bool bSingleCarrier; - /* true if we are in Carrier Suppression Tx Test. */ - bool bCarrierSuppression; - /* true if we are in Single Tone Tx test. */ - bool bSingleTone; - - /* ACK counter asked by K.Y.. */ - bool bMptEnableAckCounter; - u32 MptAckCounter; - - u8 APK_bound[2]; /* for APK path A/path B */ - bool bMptIndexEven; - - u8 backup0xc50; - u8 backup0xc58; - u8 backup0xc30; - u8 backup0x52_RF_A; - u8 backup0x52_RF_B; - - u8 h2cReqNum; - u8 c2hBuf[20]; - - u8 btInBuf[100]; - u32 mptOutLen; - u8 mptOutBuf[100]; -}; - -enum { - WRITE_REG = 1, - READ_REG, - WRITE_RF, - READ_RF, - MP_START, - MP_STOP, - MP_RATE, - MP_CHANNEL, - MP_BANDWIDTH, - MP_TXPOWER, - MP_ANT_TX, - MP_ANT_RX, - MP_CTX, - MP_QUERY, - MP_ARX, - MP_PSD, - MP_PWRTRK, - MP_THER, - MP_IOCTL, - EFUSE_GET, - EFUSE_SET, - MP_RESET_STATS, - MP_DUMP, - MP_PHYPARA, - MP_SetRFPathSwh, - MP_QueryDrvStats, - MP_SetBT, - CTA_TEST, - MP_NULL, -}; - -struct mp_priv { - struct adapter *papdater; - - /* Testing Flag */ - /* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */ - u32 mode; - - u32 prev_fw_state; - - /* OID cmd handler */ - struct mp_wiparam workparam; - - /* Tx Section */ - u8 TID; - u32 tx_pktcount; - struct mp_tx tx; - - /* Rx Section */ - u32 rx_pktcount; - u32 rx_crcerrpktcount; - u32 rx_pktloss; - - struct recv_stat rxstat; - - /* RF/BB relative */ - u8 channel; - u8 bandwidth; - u8 prime_channel_offset; - u8 txpoweridx; - u8 txpoweridx_b; - u8 rateidx; - u32 preamble; - u32 CrystalCap; - - u16 antenna_tx; - u16 antenna_rx; - - u8 check_mp_pkt; - - u8 bSetTxPower; - - struct wlan_network mp_network; - unsigned char network_macaddr[ETH_ALEN]; - - u8 *pallocated_mp_xmitframe_buf; - u8 *pmp_xmtframe_buf; - struct __queue free_mp_xmitqueue; - u32 free_mp_xmitframe_cnt; - - struct mpt_context MptCtx; -}; - -struct iocmd_struct { - u8 cmdclass; - u16 value; - u8 index; -}; - -struct rf_reg_param { - u32 path; - u32 offset; - u32 value; -}; - -struct bb_reg_param { - u32 offset; - u32 value; -}; -/* */ - -#define LOWER true -#define RAISE false - -/* Hardware Registers */ -#define BB_REG_BASE_ADDR 0x800 - -/* MP variables */ -enum mp_mode_{ - MP_OFF, - MP_ON, - MP_ERR, - MP_CONTINUOUS_TX, - MP_SINGLE_CARRIER_TX, - MP_CARRIER_SUPPRISSION_TX, - MP_SINGLE_TONE_TX, - MP_PACKET_TX, - MP_PACKET_RX -}; - -#define MAX_RF_PATH_NUMS RF_PATH_MAX - -extern u8 mpdatarate[NumRates]; - -/* MP set force data rate base on the definition. */ -enum mpt_rate_index { - /* CCK rate. */ - MPT_RATE_1M, /* 0 */ - MPT_RATE_2M, - MPT_RATE_55M, - MPT_RATE_11M, /* 3 */ - - /* OFDM rate. */ - MPT_RATE_6M, /* 4 */ - MPT_RATE_9M, - MPT_RATE_12M, - MPT_RATE_18M, - MPT_RATE_24M, - MPT_RATE_36M, - MPT_RATE_48M, - MPT_RATE_54M, /* 11 */ - - /* HT rate. */ - MPT_RATE_MCS0, /* 12 */ - MPT_RATE_MCS1, - MPT_RATE_MCS2, - MPT_RATE_MCS3, - MPT_RATE_MCS4, - MPT_RATE_MCS5, - MPT_RATE_MCS6, - MPT_RATE_MCS7, /* 19 */ - MPT_RATE_MCS8, - MPT_RATE_MCS9, - MPT_RATE_MCS10, - MPT_RATE_MCS11, - MPT_RATE_MCS12, - MPT_RATE_MCS13, - MPT_RATE_MCS14, - MPT_RATE_MCS15, /* 27 */ - MPT_RATE_LAST -}; - -#define MAX_TX_PWR_INDEX_N_MODE 64 /* 0x3F */ - -enum power_mode { - POWER_LOW = 0, - POWER_NORMAL -}; - -#define RX_PKT_BROADCAST 1 -#define RX_PKT_DEST_ADDR 2 -#define RX_PKT_PHY_MATCH 3 - -enum encry_ctrl_state { - HW_CONTROL, /* hw encryption& decryption */ - SW_CONTROL, /* sw encryption& decryption */ - HW_ENCRY_SW_DECRY, /* hw encryption & sw decryption */ - SW_ENCRY_HW_DECRY /* sw encryption & hw decryption */ -}; - -s32 init_mp_priv(struct adapter *padapter); -void free_mp_priv(struct mp_priv *pmp_priv); -s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel); -void MPT_DeInitAdapter(struct adapter *padapter); -s32 mp_start_test(struct adapter *padapter); -void mp_stop_test(struct adapter *padapter); - -u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask); -void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val); - -u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz); -void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz); -u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask); -void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val); -u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr); -void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val); - -void SetChannel(struct adapter *pAdapter); -void SetBandwidth(struct adapter *pAdapter); -void SetTxPower(struct adapter *pAdapter); -void SetAntennaPathPower(struct adapter *pAdapter); -void SetDataRate(struct adapter *pAdapter); - -void SetAntenna(struct adapter *pAdapter); - -s32 SetThermalMeter(struct adapter *pAdapter, u8 target_ther); -void GetThermalMeter(struct adapter *pAdapter, u8 *value); - -void SetContinuousTx(struct adapter *pAdapter, u8 bStart); -void SetSingleCarrierTx(struct adapter *pAdapter, u8 bStart); -void SetSingleToneTx(struct adapter *pAdapter, u8 bStart); -void SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart); -void PhySetTxPowerLevel(struct adapter *pAdapter); - -void fill_txdesc_for_mp(struct adapter *padapter, struct tx_desc *ptxdesc); -void SetPacketTx(struct adapter *padapter); -void SetPacketRx(struct adapter *pAdapter, u8 bStartRx); - -void ResetPhyRxPktCount(struct adapter *pAdapter); -u32 GetPhyRxPktReceived(struct adapter *pAdapter); -u32 GetPhyRxPktCRC32Error(struct adapter *pAdapter); - -s32 SetPowerTracking(struct adapter *padapter, u8 enable); -void GetPowerTracking(struct adapter *padapter, u8 *enable); -u32 mp_query_psd(struct adapter *pAdapter, u8 *data); -void Hal_SetAntenna(struct adapter *pAdapter); -void Hal_SetBandwidth(struct adapter *pAdapter); -void Hal_SetTxPower(struct adapter *pAdapter); -void Hal_SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart); -void Hal_SetSingleToneTx(struct adapter *pAdapter, u8 bStart); -void Hal_SetSingleCarrierTx (struct adapter *pAdapter, u8 bStart); -void Hal_SetContinuousTx (struct adapter *pAdapter, u8 bStart); -void Hal_SetBandwidth(struct adapter *pAdapter); -void Hal_SetDataRate(struct adapter *pAdapter); -void Hal_SetChannel(struct adapter *pAdapter); -void Hal_SetAntennaPathPower(struct adapter *pAdapter); -s32 Hal_SetThermalMeter(struct adapter *pAdapter, u8 target_ther); -s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable); -void Hal_GetPowerTracking(struct adapter *padapter, u8 *enable); -void Hal_GetThermalMeter(struct adapter *pAdapter, u8 *value); -void Hal_mpt_SwitchRfSetting(struct adapter *pAdapter); -void Hal_MPT_CCKTxPowerAdjust(struct adapter *Adapter, bool bInCH14); -void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *pAdapter, bool beven); -void Hal_SetCCKTxPower(struct adapter *pAdapter, u8 *TxPower); -void Hal_SetOFDMTxPower(struct adapter *pAdapter, u8 *TxPower); -void Hal_TriggerRFThermalMeter(struct adapter *pAdapter); -u8 Hal_ReadRFThermalMeter(struct adapter *pAdapter); -void Hal_SetCCKContinuousTx(struct adapter *pAdapter, u8 bStart); -void Hal_SetOFDMContinuousTx(struct adapter *pAdapter, u8 bStart); -void Hal_ProSetCrystalCap (struct adapter *pAdapter , u32 CrystalCapVal); -void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv); -void MP_PHY_SetRFPathSwitch(struct adapter *pAdapter , bool bMain); - -#endif /* _RTW_MP_H_ */ diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 7eba5e50367a..5e06e040a9b6 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -30,7 +30,6 @@ #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index e3c03539f98a..c2f55e2c731c 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -66,8 +66,6 @@ static int rtw_short_retry_lmt = 7; static int rtw_busy_thresh = 40; static int rtw_ack_policy = NORMAL_ACK; -static int rtw_mp_mode; - static int rtw_software_encrypt; static int rtw_software_decrypt; @@ -127,7 +125,6 @@ module_param(rtw_rfintfs, int, 0644); module_param(rtw_lbkmode, int, 0644); module_param(rtw_network_mode, int, 0644); module_param(rtw_channel, int, 0644); -module_param(rtw_mp_mode, int, 0644); module_param(rtw_wmm_enable, int, 0644); module_param(rtw_vrtl_carrier_sense, int, 0644); module_param(rtw_vcs_type, int, 0644); @@ -545,7 +542,7 @@ static uint loadparam(struct adapter *padapter, struct net_device *pnetdev) registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt; registry_par->busy_thresh = (u16)rtw_busy_thresh; registry_par->ack_policy = (u8)rtw_ack_policy; - registry_par->mp_mode = (u8)rtw_mp_mode; + registry_par->mp_mode = 0; registry_par->software_encrypt = (u8)rtw_software_encrypt; registry_par->software_decrypt = (u8)rtw_software_decrypt; registry_par->acm_method = (u8)rtw_acm_method; @@ -906,9 +903,6 @@ u8 rtw_init_drv_sw(struct adapter *padapter) rtw_init_pwrctrl_priv(padapter); - if (init_mp_priv(padapter) == _FAIL) - DBG_88E("%s: initialize MP private data Fail!\n", __func__); - ret8 = rtw_init_default_value(padapter); rtw_hal_dm_init(padapter); -- cgit From 2454e79ac22da26c5ef42a0db0aef8d968d55d0f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:27 +0530 Subject: staging: rtl8188eu: Remove P2P support We've already removed non-standard ioctl handlers used by driver to support P2P mode. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/Kconfig | 8 - drivers/staging/rtl8188eu/Makefile | 1 - drivers/staging/rtl8188eu/core/rtw_ap.c | 8 - drivers/staging/rtl8188eu/core/rtw_cmd.c | 61 - drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 206 -- drivers/staging/rtl8188eu/core/rtw_mlme.c | 17 +- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 3157 ++-------------------- drivers/staging/rtl8188eu/core/rtw_p2p.c | 2015 -------------- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 36 +- drivers/staging/rtl8188eu/core/rtw_wlan_util.c | 9 - drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 72 - drivers/staging/rtl8188eu/hal/usb_halinit.c | 8 - drivers/staging/rtl8188eu/include/drv_types.h | 6 - drivers/staging/rtl8188eu/include/ieee80211.h | 13 - drivers/staging/rtl8188eu/include/rtl8188e_cmd.h | 4 - drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 4 - drivers/staging/rtl8188eu/include/rtw_cmd.h | 3 - drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 12 - drivers/staging/rtl8188eu/include/rtw_p2p.h | 135 - drivers/staging/rtl8188eu/include/sta_info.h | 15 - drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 72 +- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 28 - drivers/staging/rtl8188eu/os_dep/usb_intf.c | 4 - 23 files changed, 162 insertions(+), 5732 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/core/rtw_p2p.c delete mode 100644 drivers/staging/rtl8188eu/include/rtw_p2p.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/Kconfig b/drivers/staging/rtl8188eu/Kconfig index e45c106c2162..5a38b4149408 100644 --- a/drivers/staging/rtl8188eu/Kconfig +++ b/drivers/staging/rtl8188eu/Kconfig @@ -17,12 +17,4 @@ config 88EU_AP_MODE will never be used as an AP, or the target system has limited memory, "Y" should be selected. -config 88EU_P2P - bool "Realtek RTL8188EU Peer-to-peer mode" - default y - ---help--- - This option enables peer-to-peer mode for the r8188eu driver. Unless you - know that peer-to-peer (P2P) mode will never be used, or the target system has - limited memory, "Y" should be selected. - endif diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 227dcdbe0310..aeebf9311f15 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -10,7 +10,6 @@ r8188eu-y := \ core/rtw_mlme.o \ core/rtw_mlme_ext.o \ core/rtw_pwrctrl.o \ - core/rtw_p2p.o \ core/rtw_recv.o \ core/rtw_rf.o \ core/rtw_security.o \ diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index 768a35946052..9224e029ef2b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -723,9 +723,6 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf) struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct wlan_bssid_ex *pnetwork_mlmeext = &(pmlmeinfo->network); struct HT_info_element *pht_info = NULL; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod; cur_channel = pnetwork->Configuration.DSConfig; @@ -827,11 +824,6 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf) /* let pnetwork_mlmeext == pnetwork_mlme. */ memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length); -#ifdef CONFIG_88EU_P2P - memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength); - pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength; -#endif /* CONFIG_88EU_P2P */ - if (pmlmeext->bstart_bss) { update_beacon(padapter, _TIM_IE_, NULL, false); diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e187c9f39389..ae1901682d93 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -434,9 +434,6 @@ u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, if (check_fwstate(pmlmepriv, _FW_LINKED) == true) rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SCAN, 1); - if (check_fwstate(pmlmepriv, _FW_LINKED) == true) - p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1); - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (ph2c == NULL) return _FAIL; @@ -1715,47 +1712,6 @@ static void power_saving_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz) rtw_ps_processor(padapter); } -#ifdef CONFIG_88EU_P2P -u8 p2p_protocol_wk_cmd(struct adapter *padapter, int intCmdType) -{ - struct cmd_obj *ph2c; - struct drvextra_cmd_parm *pdrvextra_cmd_parm; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return res; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); - if (pdrvextra_cmd_parm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm->ec_id = P2P_PROTO_WK_CID; - pdrvextra_cmd_parm->type_size = intCmdType; /* As the command tppe. */ - pdrvextra_cmd_parm->pbuf = NULL; /* Must be NULL here */ - - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra)); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - - return res; -} -#endif /* CONFIG_88EU_P2P */ - u8 rtw_ps_cmd(struct adapter *padapter) { struct cmd_obj *ppscmd; @@ -1957,11 +1913,6 @@ static void c2h_wk_callback(struct work_struct *work) /* Handle CCX report here */ rtw_hal_c2h_handler(adapter, c2h_evt); kfree(c2h_evt); - } else { -#ifdef CONFIG_88EU_P2P - /* Enqueue into cmd_thread for others */ - rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt); -#endif } } @@ -1993,18 +1944,6 @@ u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) case ANT_SELECT_WK_CID: antenna_select_wk_hdl(padapter, pdrvextra_cmd->type_size); break; -#ifdef CONFIG_88EU_P2P - case P2P_PS_WK_CID: - p2p_ps_wk_hdl(padapter, pdrvextra_cmd->type_size); - break; - case P2P_PROTO_WK_CID: - /* - * Commented by Albert 2011/07/01 - * I used the type_size as the type command - */ - p2p_protocol_wk_hdl(padapter, pdrvextra_cmd->type_size); - break; -#endif #ifdef CONFIG_88EU_AP_MODE case CHECK_HIQ_WK_CID: rtw_chk_hi_queue_hdl(padapter); diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index 24665d615697..755d3effd0a7 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -1110,9 +1110,6 @@ void dump_ies(u8 *buf, u32 buf_len) len = *(pos+1); DBG_88E("%s ID:%u, LEN:%u\n", __func__, id, len); - #ifdef CONFIG_88EU_P2P - dump_p2p_ie(pos, len); - #endif dump_wps_ie(pos, len); pos += (2 + len); @@ -1140,209 +1137,6 @@ void dump_wps_ie(u8 *ie, u32 ie_len) } } -#ifdef CONFIG_88EU_P2P -void dump_p2p_ie(u8 *ie, u32 ie_len) -{ - u8 *pos = (u8 *)ie; - u8 id; - u16 len; - u8 *p2p_ie; - uint p2p_ielen; - - p2p_ie = rtw_get_p2p_ie(ie, ie_len, NULL, &p2p_ielen); - if (p2p_ie != ie || p2p_ielen == 0) - return; - - pos += 6; - while (pos-ie < ie_len) { - id = *pos; - len = get_unaligned_le16(pos+1); - DBG_88E("%s ID:%u, LEN:%u\n", __func__, id, len); - pos += (3+len); - } -} - -/** - * rtw_get_p2p_ie - Search P2P IE from a series of IEs - * @in_ie: Address of IEs to search - * @in_len: Length limit from in_ie - * @p2p_ie: If not NULL and P2P IE is found, P2P IE will be copied to the buf starting from p2p_ie - * @p2p_ielen: If not NULL and P2P IE is found, will set to the length of the entire P2P IE - * - * Returns: The address of the P2P IE found, or NULL - */ -u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen) -{ - uint cnt = 0; - u8 *p2p_ie_ptr; - u8 eid, p2p_oui[4] = {0x50, 0x6F, 0x9A, 0x09}; - - if (p2p_ielen != NULL) - *p2p_ielen = 0; - - while (cnt < in_len) { - eid = in_ie[cnt]; - if ((in_len < 0) || (cnt > MAX_IE_SZ)) { - dump_stack(); - return NULL; - } - if ((eid == _VENDOR_SPECIFIC_IE_) && (!memcmp(&in_ie[cnt+2], p2p_oui, 4))) { - p2p_ie_ptr = in_ie + cnt; - - if (p2p_ie != NULL) - memcpy(p2p_ie, &in_ie[cnt], in_ie[cnt + 1] + 2); - if (p2p_ielen != NULL) - *p2p_ielen = in_ie[cnt + 1] + 2; - return p2p_ie_ptr; - } else { - cnt += in_ie[cnt + 1] + 2; /* goto next */ - } - } - return NULL; -} - -/** - * rtw_get_p2p_attr - Search a specific P2P attribute from a given P2P IE - * @p2p_ie: Address of P2P IE to search - * @p2p_ielen: Length limit from p2p_ie - * @target_attr_id: The attribute ID of P2P attribute to search - * @buf_attr: If not NULL and the P2P attribute is found, P2P attribute will be copied to the buf starting from buf_attr - * @len_attr: If not NULL and the P2P attribute is found, will set to the length of the entire P2P attribute - * - * Returns: the address of the specific WPS attribute found, or NULL - */ -u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id , u8 *buf_attr, u32 *len_attr) -{ - u8 *attr_ptr = NULL; - u8 *target_attr_ptr = NULL; - u8 p2p_oui[4] = {0x50, 0x6F, 0x9A, 0x09}; - - if (len_attr) - *len_attr = 0; - - if (!p2p_ie || (p2p_ie[0] != _VENDOR_SPECIFIC_IE_) || - (memcmp(p2p_ie + 2, p2p_oui , 4))) - return attr_ptr; - - /* 6 = 1(Element ID) + 1(Length) + 3 (OUI) + 1(OUI Type) */ - attr_ptr = p2p_ie + 6; /* goto first attr */ - - while (attr_ptr - p2p_ie < p2p_ielen) { - /* 3 = 1(Attribute ID) + 2(Length) */ - u8 attr_id = *attr_ptr; - u16 attr_data_len = get_unaligned_le16(attr_ptr + 1); - u16 attr_len = attr_data_len + 3; - - if (attr_id == target_attr_id) { - target_attr_ptr = attr_ptr; - - if (buf_attr) - memcpy(buf_attr, attr_ptr, attr_len); - if (len_attr) - *len_attr = attr_len; - break; - } else { - attr_ptr += attr_len; /* goto next */ - } - } - return target_attr_ptr; -} - -/** - * rtw_get_p2p_attr_content - Search a specific P2P attribute content from a given P2P IE - * @p2p_ie: Address of P2P IE to search - * @p2p_ielen: Length limit from p2p_ie - * @target_attr_id: The attribute ID of P2P attribute to search - * @buf_content: If not NULL and the P2P attribute is found, P2P attribute content will be copied to the buf starting from buf_content - * @len_content: If not NULL and the P2P attribute is found, will set to the length of the P2P attribute content - * - * Returns: the address of the specific P2P attribute content found, or NULL - */ -u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id , u8 *buf_content, uint *len_content) -{ - u8 *attr_ptr; - u32 attr_len; - - if (len_content) - *len_content = 0; - - attr_ptr = rtw_get_p2p_attr(p2p_ie, p2p_ielen, target_attr_id, NULL, &attr_len); - - if (attr_ptr && attr_len) { - if (buf_content) - memcpy(buf_content, attr_ptr+3, attr_len-3); - - if (len_content) - *len_content = attr_len-3; - - return attr_ptr+3; - } - - return NULL; -} - -u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr) -{ - u32 a_len; - - *pbuf = attr_id; - - *(u16 *)(pbuf + 1) = cpu_to_le16(attr_len); - - if (pdata_attr) - memcpy(pbuf + 3, pdata_attr, attr_len); - - a_len = attr_len + 3; - - return a_len; -} - -static uint rtw_p2p_attr_remove(u8 *ie, uint ielen_ori, u8 attr_id) -{ - u8 *target_attr; - u32 target_attr_len; - uint ielen = ielen_ori; - - while (1) { - target_attr = rtw_get_p2p_attr(ie, ielen, attr_id, NULL, &target_attr_len); - if (target_attr && target_attr_len) { - u8 *next_attr = target_attr+target_attr_len; - uint remain_len = ielen-(next_attr-ie); - - memset(target_attr, 0, target_attr_len); - memcpy(target_attr, next_attr, remain_len); - memset(target_attr+remain_len, 0, target_attr_len); - *(ie+1) -= target_attr_len; - ielen -= target_attr_len; - } else { - break; - } - } - return ielen; -} - -void rtw_wlan_bssid_ex_remove_p2p_attr(struct wlan_bssid_ex *bss_ex, u8 attr_id) -{ - u8 *p2p_ie; - uint p2p_ielen, p2p_ielen_ori; - - p2p_ie = rtw_get_p2p_ie(bss_ex->IEs+_FIXED_IE_LENGTH_, bss_ex->IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen_ori); - if (p2p_ie) { - p2p_ielen = rtw_p2p_attr_remove(p2p_ie, p2p_ielen_ori, attr_id); - if (p2p_ielen != p2p_ielen_ori) { - u8 *next_ie_ori = p2p_ie+p2p_ielen_ori; - u8 *next_ie = p2p_ie+p2p_ielen; - uint remain_len = bss_ex->IELength-(next_ie_ori-bss_ex->IEs); - - memcpy(next_ie, next_ie_ori, remain_len); - memset(next_ie+remain_len, 0, p2p_ielen_ori-p2p_ielen); - bss_ex->IELength -= p2p_ielen_ori-p2p_ielen; - } - } -} - -#endif /* CONFIG_88EU_P2P */ - /* Baron adds to avoid FreeBSD warning */ int ieee80211_is_empty_essid(const char *essid, int essid_len) { diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 45e2739442e3..1eef47d465de 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -597,9 +597,6 @@ exit: static void rtw_add_network(struct adapter *adapter, struct wlan_bssid_ex *pnetwork) { -#if defined(CONFIG_88EU_P2P) - rtw_wlan_bssid_ex_remove_p2p_attr(pnetwork, P2P_ATTR_GROUP_INFO); -#endif update_current_network(adapter, pnetwork); rtw_update_scanned_network(adapter, pnetwork); } @@ -791,9 +788,6 @@ void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf) spin_unlock_bh(&pmlmepriv->lock); - if (check_fwstate(pmlmepriv, _FW_LINKED) == true) - p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0); - rtw_os_xmit_schedule(adapter); pmlmeext = &adapter->mlmeextpriv; @@ -936,7 +930,6 @@ void rtw_indicate_disconnect(struct adapter *padapter) rtw_led_control(padapter, LED_CTL_NO_LINK); rtw_clear_scan_deny(padapter); } - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1); rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1); } @@ -1521,14 +1514,8 @@ void rtw_dynamic_check_timer_handlder(struct adapter *adapter) rtw_dynamic_chk_wk_cmd(adapter); if (pregistrypriv->wifi_spec == 1) { -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) -#endif - { - /* auto site survey */ - rtw_auto_scan_handler(adapter); - } + /* auto site survey */ + rtw_auto_scan_handler(adapter); } } diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index dc194324899d..c42d9fdc748d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -508,23 +508,6 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame) #endif } -#ifdef CONFIG_88EU_P2P -static u32 p2p_listen_state_process(struct adapter *padapter, unsigned char *da) -{ - bool response = true; - - /* do nothing if the device name is empty */ - if (!padapter->wdinfo.device_name_len) - response = false; - - if (response) - issue_probersp_p2p(padapter, da); - - return _SUCCESS; -} -#endif /* CONFIG_88EU_P2P */ - - /**************************************************************************** Following are the callback functions for each subtype of the management frames @@ -543,43 +526,6 @@ unsigned int OnProbeReq(struct adapter *padapter, struct recv_frame *precv_frame uint len = precv_frame->len; u8 is_valid_p2p_probereq = false; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 wifi_test_chk_rate = 1; - - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && - !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE) && - !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && - !rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH) && - !rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN)) { - /* mcs_rate = 0 -> CCK 1M rate */ - /* mcs_rate = 1 -> CCK 2M rate */ - /* mcs_rate = 2 -> CCK 5.5M rate */ - /* mcs_rate = 3 -> CCK 11M rate */ - /* In the P2P mode, the driver should not support the CCK rate */ - - /* Commented by Kurt 2012/10/16 */ - /* IOT issue: Google Nexus7 use 1M rate to send p2p_probe_req after GO nego completed and Nexus7 is client */ - if (wifi_test_chk_rate == 1) { - is_valid_p2p_probereq = process_probe_req_p2p_ie(pwdinfo, pframe, len); - if (is_valid_p2p_probereq) { - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) { - /* FIXME */ - report_survey_event(padapter, precv_frame); - p2p_listen_state_process(padapter, get_sa(pframe)); - - return _SUCCESS; - } - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) - goto _continue; - } - } - } - -_continue: -#endif /* CONFIG_88EU_P2P */ - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) return _SUCCESS; @@ -611,48 +557,6 @@ _issue_probersp: unsigned int OnProbeRsp(struct adapter *padapter, struct recv_frame *precv_frame) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - u8 *pframe = precv_frame->rx_data; -#endif - -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ)) { - if (pwdinfo->tx_prov_disc_info.benable) { - if (!memcmp(pwdinfo->tx_prov_disc_info.peerIFAddr, GetAddr2Ptr(pframe), ETH_ALEN)) { - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { - pwdinfo->tx_prov_disc_info.benable = false; - issue_p2p_provision_request(padapter, - pwdinfo->tx_prov_disc_info.ssid.Ssid, - pwdinfo->tx_prov_disc_info.ssid.SsidLength, - pwdinfo->tx_prov_disc_info.peerDevAddr); - } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - pwdinfo->tx_prov_disc_info.benable = false; - issue_p2p_provision_request(padapter, NULL, 0, - pwdinfo->tx_prov_disc_info.peerDevAddr); - } - } - } - return _SUCCESS; - } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) { - if (pwdinfo->nego_req_info.benable) { - DBG_88E("[%s] P2P State is GONEGO ING!\n", __func__); - if (!memcmp(pwdinfo->nego_req_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN)) { - pwdinfo->nego_req_info.benable = false; - issue_p2p_GO_request(padapter, pwdinfo->nego_req_info.peerDevAddr); - } - } - } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ)) { - if (pwdinfo->invitereq_info.benable) { - DBG_88E("[%s] P2P_STATE_TX_INVITE_REQ!\n", __func__); - if (!memcmp(pwdinfo->invitereq_info.peer_macaddr, GetAddr2Ptr(pframe), ETH_ALEN)) { - pwdinfo->invitereq_info.benable = false; - issue_p2p_invitation_request(padapter, pwdinfo->invitereq_info.peer_macaddr); - } - } - } -#endif - if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { report_survey_event(padapter, precv_frame); @@ -717,7 +621,6 @@ unsigned int OnBeacon(struct adapter *padapter, struct recv_frame *precv_frame) /* todo: the timer is used instead of the number of the beacon received */ if ((sta_rx_pkts(psta) & 0xf) == 0) update_beacon_info(padapter, pframe, len, psta); - process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN)); } } else if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) { psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe)); @@ -1021,12 +924,6 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame struct sta_priv *pstapriv = &padapter->stapriv; u8 *pframe = precv_frame->rx_data; uint pkt_len = precv_frame->len; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 p2p_status_code = P2P_STATUS_SUCCESS; - u8 *p2pie; - u32 p2pielen = 0; -#endif /* CONFIG_88EU_P2P */ if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) return _FAIL; @@ -1356,23 +1253,6 @@ unsigned int OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame if (status != _STATS_SUCCESSFUL_) goto OnAssocReqFail; -#ifdef CONFIG_88EU_P2P - pstat->is_p2p_device = false; - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - p2pie = rtw_get_p2p_ie(pframe + WLAN_HDR_A3_LEN + ie_offset , pkt_len - WLAN_HDR_A3_LEN - ie_offset , NULL, &p2pielen); - if (p2pie) { - pstat->is_p2p_device = true; - p2p_status_code = (u8)process_assoc_req_p2p_ie(pwdinfo, pframe, pkt_len, pstat); - if (p2p_status_code > 0) { - pstat->p2p_status_code = p2p_status_code; - status = _STATS_CAP_FAIL_; - goto OnAssocReqFail; - } - } - } - pstat->p2p_status_code = p2p_status_code; -#endif /* CONFIG_88EU_P2P */ - /* TODO: identify_proprietary_vendor_ie(); */ /* Realtek proprietary IE */ /* identify if this is Broadcom sta */ @@ -1566,22 +1446,12 @@ unsigned int OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); u8 *pframe = precv_frame->rx_data; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ /* check A3 */ if (memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)) return _SUCCESS; -#ifdef CONFIG_88EU_P2P - if (pwdinfo->rx_invitereq_info.scan_op_ch_only) { - del_timer_sync(&pwdinfo->reset_ch_sitesurvey); - _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); - } -#endif /* CONFIG_88EU_P2P */ - reason = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN)); DBG_88E("%s Reason code(%d)\n", __func__, reason); @@ -1630,22 +1500,12 @@ unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); u8 *pframe = precv_frame->rx_data; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ /* check A3 */ if (memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)) return _SUCCESS; -#ifdef CONFIG_88EU_P2P - if (pwdinfo->rx_invitereq_info.scan_op_ch_only) { - del_timer_sync(&pwdinfo->reset_ch_sitesurvey); - _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); - } -#endif /* CONFIG_88EU_P2P */ - reason = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN)); DBG_88E("%s Reason code(%d)\n", __func__, reason); @@ -1723,2139 +1583,102 @@ unsigned int on_action_spct(struct adapter *padapter, struct recv_frame *precv_f case RTW_WLAN_ACTION_SPCT_CHL_SWITCH: break; default: - break; - } - -exit: - return ret; -} - -unsigned int OnAction_qos(struct adapter *padapter, struct recv_frame *precv_frame) -{ - return _SUCCESS; -} - -unsigned int OnAction_dls(struct adapter *padapter, struct recv_frame *precv_frame) -{ - return _SUCCESS; -} - -unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame) -{ - u8 *addr; - struct sta_info *psta = NULL; - struct recv_reorder_ctrl *preorder_ctrl; - unsigned char *frame_body; - unsigned char category, action; - unsigned short tid, status, reason_code = 0; - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - u8 *pframe = precv_frame->rx_data; - struct sta_priv *pstapriv = &padapter->stapriv; - /* check RA matches or not */ - if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), - ETH_ALEN))/* for if1, sta/ap mode */ - return _SUCCESS; - - DBG_88E("%s\n", __func__); - - if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) - if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) - return _SUCCESS; - - addr = GetAddr2Ptr(pframe); - psta = rtw_get_stainfo(pstapriv, addr); - - if (psta == NULL) - return _SUCCESS; - - frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); - - category = frame_body[0]; - if (category == RTW_WLAN_CATEGORY_BACK) { /* representing Block Ack */ - if (!pmlmeinfo->HT_enable) - return _SUCCESS; - action = frame_body[1]; - DBG_88E("%s, action=%d\n", __func__, action); - switch (action) { - case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */ - memcpy(&(pmlmeinfo->ADDBA_req), &(frame_body[2]), sizeof(struct ADDBA_request)); - process_addba_req(padapter, (u8 *)&(pmlmeinfo->ADDBA_req), addr); - - if (pmlmeinfo->bAcceptAddbaReq) - issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 0); - else - issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */ - break; - case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */ - status = get_unaligned_le16(&frame_body[3]); - tid = ((frame_body[5] >> 2) & 0x7); - if (status == 0) { /* successful */ - DBG_88E("agg_enable for TID=%d\n", tid); - psta->htpriv.agg_enable_bitmap |= 1 << tid; - psta->htpriv.candidate_tid_bitmap &= ~BIT(tid); - } else { - psta->htpriv.agg_enable_bitmap &= ~BIT(tid); - } - break; - case RTW_WLAN_ACTION_DELBA: /* DELBA */ - if ((frame_body[3] & BIT(3)) == 0) { - psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); - psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); - reason_code = get_unaligned_le16(&frame_body[4]); - } else if ((frame_body[3] & BIT(3)) == BIT(3)) { - tid = (frame_body[3] >> 4) & 0x0F; - preorder_ctrl = &psta->recvreorder_ctrl[tid]; - preorder_ctrl->enable = false; - preorder_ctrl->indicate_seq = 0xffff; - } - DBG_88E("%s(): DELBA: %x(%x)\n", __func__, pmlmeinfo->agg_enable_bitmap, reason_code); - /* todo: how to notify the host while receiving DELETE BA */ - break; - default: - break; - } - } - return _SUCCESS; -} - -#ifdef CONFIG_88EU_P2P - -static int get_reg_classes_full_count(struct p2p_channels *channel_list) -{ - int cnt = 0; - int i; - - for (i = 0; i < channel_list->reg_classes; i++) { - cnt += channel_list->reg_class[i].channels; - } - - return cnt; -} - -void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_GO_NEGO_REQ; - u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 }; - u8 wpsielen = 0, p2pielen = 0; - u16 len_channellist_attr = 0; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - DBG_88E("[%s] In\n", __func__); - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pwdinfo->negotiation_dialog_token = 1; /* Initialize the dialog value */ - pframe = rtw_set_fixed_ie(pframe, 1, &pwdinfo->negotiation_dialog_token, &(pattrib->pktlen)); - - - - /* WPS Section */ - wpsielen = 0; - /* WPS OUI */ - *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* WPS version */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_VERSION_1; /* Version 1.0 */ - - /* Device Password ID */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - - if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PEER_DISPLAY_PIN) - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_USER_SPEC); - else if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_SELF_DISPLAY_PIN) - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC); - else if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PBC) - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_PBC); - - wpsielen += 2; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - - /* P2P IE Section. */ - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20110306 */ - /* According to the P2P Specification, the group negotiation request frame should contain 9 P2P attributes */ - /* 1. P2P Capability */ - /* 2. Group Owner Intent */ - /* 3. Configuration Timeout */ - /* 4. Listen Channel */ - /* 5. Extended Listen Timing */ - /* 6. Intended P2P Interface Address */ - /* 7. Channel List */ - /* 8. P2P Device Info */ - /* 9. Operating Channel */ - - - /* P2P Capability */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP; - else - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN; - - /* Group Owner Intent */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GO_INTENT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - /* Todo the tie breaker bit. */ - p2pie[p2pielen++] = ((pwdinfo->intent << 1) | BIT(0)); - - /* Configuration Timeout */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P GO */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P Client */ - - - /* Listen Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_LISTEN_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; /* Copy from SD7 */ - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->listen_channel; /* listening channel number */ - - - /* Extended Listen Timing ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004); - p2pielen += 2; - - /* Value: */ - /* Availability Period */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - /* Availability Interval */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - - /* Intended P2P Interface Address */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_INTENTED_IF_ADDR; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - - /* Channel List */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CH_LIST; - - /* Length: */ - /* Country String(3) */ - /* + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */ - /* + number of channels in all classes */ - len_channellist_attr = 3 - + (1 + 1) * (u16)(pmlmeext->channel_list.reg_classes) - + get_reg_classes_full_count(&pmlmeext->channel_list); - - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Channel Entry List */ - - { - int i, j; - for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) { - /* Operating Class */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class; - - /* Number of Channels */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels; - - /* Channel List */ - for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) { - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i]; - } - } - } - - /* Device Info */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); - - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name , pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - - /* Operating Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->operating_channel; /* operating channel number */ - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame_body, uint len, u8 result) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_GO_NEGO_RESP; - u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 }; - u8 p2pielen = 0; - uint wpsielen = 0; - u16 wps_devicepassword_id = 0x0000; - __be16 be_tmp; - uint wps_devicepassword_id_len = 0; - u16 len_channellist_attr = 0; - - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - DBG_88E("[%s] In, result=%d\n", __func__, result); - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pwdinfo->negotiation_dialog_token = frame_body[7]; /* The Dialog Token of provisioning discovery request frame. */ - pframe = rtw_set_fixed_ie(pframe, 1, &(pwdinfo->negotiation_dialog_token), &(pattrib->pktlen)); - - /* Commented by Albert 20110328 */ - /* Try to get the device password ID from the WPS IE of group negotiation request frame */ - /* WiFi Direct test plan 5.1.15 */ - rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen); - rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8 *)&be_tmp, &wps_devicepassword_id_len); - wps_devicepassword_id = be16_to_cpu(be_tmp); - - memset(wpsie, 0x00, 255); - wpsielen = 0; - - /* WPS Section */ - wpsielen = 0; - /* WPS OUI */ - *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* WPS version */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_VERSION_1; /* Version 1.0 */ - - /* Device Password ID */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - if (wps_devicepassword_id == WPS_DPID_USER_SPEC) - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC); - else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC) - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_USER_SPEC); - else - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_PBC); - wpsielen += 2; - - /* Commented by Kurt 20120113 */ - /* If some device wants to do p2p handshake without sending prov_disc_req */ - /* We have to get peer_req_cm from here. */ - if (!memcmp(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3)) { - if (wps_devicepassword_id == WPS_DPID_USER_SPEC) - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3); - else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC) - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3); - else - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3); - } - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - - /* P2P IE Section. */ - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20100908 */ - /* According to the P2P Specification, the group negotiation response frame should contain 9 P2P attributes */ - /* 1. Status */ - /* 2. P2P Capability */ - /* 3. Group Owner Intent */ - /* 4. Configuration Timeout */ - /* 5. Operating Channel */ - /* 6. Intended P2P Interface Address */ - /* 7. Channel List */ - /* 8. Device Info */ - /* 9. Group ID (Only GO) */ - - - /* ToDo: */ - - /* P2P Status */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_STATUS; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = result; - - /* P2P Capability */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { - /* Commented by Albert 2011/03/08 */ - /* According to the P2P specification */ - /* if the sending device will be client, the P2P Capability should be reserved of group negotiation response frame */ - p2pie[p2pielen++] = 0; - } else { - /* Be group owner or meet the error case */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - } - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) { - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP; - } else { - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN; - } - - /* Group Owner Intent */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GO_INTENT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - if (pwdinfo->peer_intent & 0x01) { - /* Peer's tie breaker bit is 1, our tie breaker bit should be 0 */ - p2pie[p2pielen++] = (pwdinfo->intent << 1); - } else { - /* Peer's tie breaker bit is 0, our tie breaker bit should be 1 */ - p2pie[p2pielen++] = ((pwdinfo->intent << 1) | BIT(0)); - } - - - /* Configuration Timeout */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P GO */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P Client */ - - /* Operating Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->operating_channel; /* operating channel number */ - - /* Intended P2P Interface Address */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_INTENTED_IF_ADDR; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Channel List */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CH_LIST; - - /* Country String(3) */ - /* + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */ - /* + number of channels in all classes */ - len_channellist_attr = 3 - + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes - + get_reg_classes_full_count(&pmlmeext->channel_list); - - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr); - - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Channel Entry List */ - - { - int i, j; - for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) { - /* Operating Class */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class; - - /* Number of Channels */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels; - - /* Channel List */ - for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) { - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i]; - } - } - } - - /* Device Info */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); - - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name , pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* Group ID Attribute */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_ID; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + pwdinfo->nego_ssidlen); - p2pielen += 2; - - /* Value: */ - /* p2P Device Address */ - memcpy(p2pie + p2pielen , pwdinfo->device_addr, ETH_ALEN); - p2pielen += ETH_ALEN; - - /* SSID */ - memcpy(p2pie + p2pielen, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen); - p2pielen += pwdinfo->nego_ssidlen; - } - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - return; -} - -static void issue_p2p_GO_confirm(struct adapter *padapter, u8 *raddr, u8 result) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_GO_NEGO_CONF; - u8 p2pie[255] = { 0x00 }; - u8 p2pielen = 0; - - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - DBG_88E("[%s] In\n", __func__); - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(pwdinfo->negotiation_dialog_token), &(pattrib->pktlen)); - - - - /* P2P IE Section. */ - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20110306 */ - /* According to the P2P Specification, the group negotiation request frame should contain 5 P2P attributes */ - /* 1. Status */ - /* 2. P2P Capability */ - /* 3. Operating Channel */ - /* 4. Channel List */ - /* 5. Group ID (if this WiFi is GO) */ - - /* P2P Status */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_STATUS; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = result; - - /* P2P Capability */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP; - else - p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN; - - /* Operating Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { - /* Operating Class */ - p2pie[p2pielen++] = 0x51; - p2pie[p2pielen++] = pwdinfo->peer_operating_ch; - } else { - /* Operating Class */ - p2pie[p2pielen++] = 0x51; - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->operating_channel; /* Use the listen channel as the operating channel */ - } - - - /* Channel List */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CH_LIST; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(pwdinfo->channel_list_attr_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len); - p2pielen += pwdinfo->channel_list_attr_len; - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* Group ID Attribute */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_ID; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + pwdinfo->nego_ssidlen); - p2pielen += 2; - - /* Value: */ - /* p2P Device Address */ - memcpy(p2pie + p2pielen , pwdinfo->device_addr, ETH_ALEN); - p2pielen += ETH_ALEN; - - /* SSID */ - memcpy(p2pie + p2pielen, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen); - p2pielen += pwdinfo->nego_ssidlen; - } - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - pattrib->last_txcmdsz = pattrib->pktlen; - dump_mgntframe(padapter, pmgntframe); - return; -} - -void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_INVIT_REQ; - u8 p2pie[255] = { 0x00 }; - u8 p2pielen = 0; - u8 dialogToken = 3; - u16 len_channellist_attr = 0; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, raddr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - /* P2P IE Section. */ - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20101011 */ - /* According to the P2P Specification, the P2P Invitation request frame should contain 7 P2P attributes */ - /* 1. Configuration Timeout */ - /* 2. Invitation Flags */ - /* 3. Operating Channel (Only GO) */ - /* 4. P2P Group BSSID (Should be included if I am the GO) */ - /* 5. Channel List */ - /* 6. P2P Group ID */ - /* 7. P2P Device Info */ - - /* Configuration Timeout */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P GO */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P Client */ - - /* Invitation Flags */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_INVITATION_FLAGS; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = P2P_INVITATION_FLAGS_PERSISTENT; - - - /* Operating Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->invitereq_info.operating_ch; /* operating channel number */ - - if (!memcmp(myid(&padapter->eeprompriv), - pwdinfo->invitereq_info.go_bssid, ETH_ALEN)) { - /* P2P Group BSSID */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_BSSID; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address for GO */ - memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN); - p2pielen += ETH_ALEN; - } - - /* Channel List */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CH_LIST; - - - /* Length: */ - /* Country String(3) */ - /* + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */ - /* + number of channels in all classes */ - len_channellist_attr = 3 - + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes - + get_reg_classes_full_count(&pmlmeext->channel_list); - - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr); - - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Channel Entry List */ - { - int i, j; - for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) { - /* Operating Class */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class; - - /* Number of Channels */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels; - - /* Channel List */ - for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) { - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i]; - } - } - } - - - /* P2P Group ID */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_ID; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(6 + pwdinfo->invitereq_info.ssidlen); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address for GO */ - memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN); - p2pielen += ETH_ALEN; - - /* SSID */ - memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_ssid, pwdinfo->invitereq_info.ssidlen); - p2pielen += pwdinfo->invitereq_info.ssidlen; - - - /* Device Info */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, u8 dialogToken, u8 status_code) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_INVIT_RESP; - u8 p2pie[255] = { 0x00 }; - u8 p2pielen = 0; - u16 len_channellist_attr = 0; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, raddr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - /* P2P IE Section. */ - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20101005 */ - /* According to the P2P Specification, the P2P Invitation response frame should contain 5 P2P attributes */ - /* 1. Status */ - /* 2. Configuration Timeout */ - /* 3. Operating Channel (Only GO) */ - /* 4. P2P Group BSSID (Only GO) */ - /* 5. Channel List */ - - /* P2P Status */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_STATUS; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001); - p2pielen += 2; - - /* Value: */ - /* When status code is P2P_STATUS_FAIL_INFO_UNAVAILABLE. */ - /* Sent the event receiving the P2P Invitation Req frame to DMP UI. */ - /* DMP had to compare the MAC address to find out the profile. */ - /* So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB. */ - /* If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req */ - /* to NB to rebuild the persistent group. */ - p2pie[p2pielen++] = status_code; - - /* Configuration Timeout */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P GO */ - p2pie[p2pielen++] = 200; /* 2 seconds needed to be the P2P Client */ - - if (status_code == P2P_STATUS_SUCCESS) { - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* The P2P Invitation request frame asks this Wi-Fi device to be the P2P GO */ - /* In this case, the P2P Invitation response frame should carry the two more P2P attributes. */ - /* First one is operating channel attribute. */ - /* Second one is P2P Group BSSID attribute. */ - - /* Operating Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; /* Copy from SD7 */ - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->operating_channel; /* operating channel number */ - - - /* P2P Group BSSID */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_BSSID; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address for GO */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - } - - /* Channel List */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CH_LIST; - - /* Length: */ - /* Country String(3) */ - /* + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */ - /* + number of channels in all classes */ - len_channellist_attr = 3 - + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes - + get_reg_classes_full_count(&pmlmeext->channel_list); - - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Channel Entry List */ - { - int i, j; - for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) { - /* Operating Class */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class; - - /* Number of Channels */ - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels; - - /* Channel List */ - for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) { - p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i]; - } - } - } - } - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, u8 ussidlen, u8 *pdev_raddr) -{ - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - u8 dialogToken = 1; - u8 oui_subtype = P2P_PROVISION_DISC_REQ; - u8 wpsie[100] = { 0x00 }; - u8 wpsielen = 0; - __be32 p2poui = cpu_to_be32(P2POUI); - u32 p2pielen = 0; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - DBG_88E("[%s] In\n", __func__); - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - p2pielen = build_prov_disc_request_p2p_ie(pwdinfo, pframe, pssid, ussidlen, pdev_raddr); - - pframe += p2pielen; - pattrib->pktlen += p2pielen; - - wpsielen = 0; - /* WPS OUI */ - *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* WPS version */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_VERSION_1; /* Version 1.0 */ - - /* Config Method */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->tx_prov_disc_info.wps_config_method_request); - wpsielen += 2; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -static u8 is_matched_in_profilelist(u8 *peermacaddr, struct profile_info *profileinfo) -{ - u8 i, match_result = 0; - - DBG_88E("[%s] peermac=%.2X %.2X %.2X %.2X %.2X %.2X\n", __func__, - peermacaddr[0], peermacaddr[1], peermacaddr[2], peermacaddr[3], peermacaddr[4], peermacaddr[5]); - - for (i = 0; i < P2P_MAX_PERSISTENT_GROUP_NUM; i++, profileinfo++) { - DBG_88E("[%s] profileinfo_mac=%.2X %.2X %.2X %.2X %.2X %.2X\n", __func__, - profileinfo->peermac[0], profileinfo->peermac[1], profileinfo->peermac[2], profileinfo->peermac[3], profileinfo->peermac[4], profileinfo->peermac[5]); - if (!memcmp(peermacaddr, profileinfo->peermac, ETH_ALEN)) { - match_result = 1; - DBG_88E("[%s] Match!\n", __func__); - break; - } - } - return match_result; -} - -void issue_probersp_p2p(struct adapter *padapter, unsigned char *da) -{ - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - unsigned char *mac; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - u16 beacon_interval = 100; - u16 capInfo = 0; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 wpsie[255] = { 0x00 }; - u32 wpsielen = 0, p2pielen = 0; - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - mac = myid(&(padapter->eeprompriv)); - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - memcpy(pwlanhdr->addr1, da, ETH_ALEN); - memcpy(pwlanhdr->addr2, mac, ETH_ALEN); - - /* Use the device address for BSSID field. */ - memcpy(pwlanhdr->addr3, mac, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(fctrl, WIFI_PROBERSP); - - pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = pattrib->hdrlen; - pframe += pattrib->hdrlen; - - /* timestamp will be inserted by hardware */ - pframe += 8; - pattrib->pktlen += 8; - - /* beacon interval: 2 bytes */ - memcpy(pframe, (unsigned char *)&beacon_interval, 2); - pframe += 2; - pattrib->pktlen += 2; - - /* capability info: 2 bytes */ - /* ESS and IBSS bits must be 0 (defined in the 3.1.2.1.1 of WiFi Direct Spec) */ - capInfo |= cap_ShortPremble; - capInfo |= cap_ShortSlot; - - memcpy(pframe, (unsigned char *)&capInfo, 2); - pframe += 2; - pattrib->pktlen += 2; - - - /* SSID */ - pframe = rtw_set_ie(pframe, _SSID_IE_, 7, pwdinfo->p2p_wildcard_ssid, &pattrib->pktlen); - - /* supported rates... */ - /* Use the OFDM rate in the P2P probe response frame. (6(B), 9(B), 12, 18, 24, 36, 48, 54) */ - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen); - - /* DS parameter set */ - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen); - - /* Todo: WPS IE */ - /* Noted by Albert 20100907 */ - /* According to the WPS specification, all the WPS attribute is presented by Big Endian. */ - - wpsielen = 0; - /* WPS OUI */ - *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* WPS version */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_VERSION_1; /* Version 1.0 */ - - /* WiFi Simple Config State */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_SIMPLE_CONF_STATE); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_WSC_STATE_NOT_CONFIG; /* Not Configured. */ - - /* Response Type */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_RESP_TYPE); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_RESPONSE_TYPE_8021X; - - /* UUID-E */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_UUID_E); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0010); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, myid(&padapter->eeprompriv), ETH_ALEN); - wpsielen += 0x10; - - /* Manufacturer */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MANUFACTURER); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0007); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, "Realtek", 7); - wpsielen += 7; - - /* Model Name */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MODEL_NAME); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0006); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, "8188EU", 6); - wpsielen += 6; - - /* Model Number */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MODEL_NUMBER); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = 0x31; /* character 1 */ - - /* Serial Number */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_SERIAL_NUMBER); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(ETH_ALEN); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, "123456" , ETH_ALEN); - wpsielen += ETH_ALEN; - - /* Primary Device Type */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0008); - wpsielen += 2; - - /* Value: */ - /* Category ID */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - wpsielen += 2; - - /* OUI */ - *(__be32 *)(wpsie + wpsielen) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* Sub Category ID */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - wpsielen += 2; - - /* Device Name */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->device_name_len); - wpsielen += 2; - - /* Value: */ - if (pwdinfo->device_name_len) { - memcpy(wpsie + wpsielen, pwdinfo->device_name, pwdinfo->device_name_len); - wpsielen += pwdinfo->device_name_len; - } - - /* Config Method */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->supported_wps_cm); - wpsielen += 2; - - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - - p2pielen = build_probe_resp_p2p_ie(pwdinfo, pframe); - pframe += p2pielen; - pattrib->pktlen += p2pielen; - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -static int _issue_probereq_p2p(struct adapter *padapter, u8 *da, int wait_ack) -{ - int ret = _FAIL; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - unsigned char *mac; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 }; - u16 wpsielen = 0, p2pielen = 0; - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - goto exit; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - mac = myid(&(padapter->eeprompriv)); - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - if (da) { - memcpy(pwlanhdr->addr1, da, ETH_ALEN); - memcpy(pwlanhdr->addr3, da, ETH_ALEN); - } else { - if ((pwdinfo->p2p_info.scan_op_ch_only) || (pwdinfo->rx_invitereq_info.scan_op_ch_only)) { - /* This two flags will be set when this is only the P2P client mode. */ - memcpy(pwlanhdr->addr1, pwdinfo->p2p_peer_interface_addr, ETH_ALEN); - memcpy(pwlanhdr->addr3, pwdinfo->p2p_peer_interface_addr, ETH_ALEN); - } else { - /* broadcast probe request frame */ - memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN); - memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN); - } - } - memcpy(pwlanhdr->addr2, mac, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_PROBEREQ); - - pframe += sizeof (struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ)) - pframe = rtw_set_ie(pframe, _SSID_IE_, pwdinfo->tx_prov_disc_info.ssid.SsidLength, pwdinfo->tx_prov_disc_info.ssid.Ssid, &(pattrib->pktlen)); - else - pframe = rtw_set_ie(pframe, _SSID_IE_, P2P_WILDCARD_SSID_LEN, pwdinfo->p2p_wildcard_ssid, &(pattrib->pktlen)); - - /* Use the OFDM rate in the P2P probe request frame. (6(B), 9(B), 12(B), 24(B), 36, 48, 54) */ - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen); - - - /* WPS IE */ - /* Noted by Albert 20110221 */ - /* According to the WPS specification, all the WPS attribute is presented by Big Endian. */ - - wpsielen = 0; - /* WPS OUI */ - *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* WPS version */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001); - wpsielen += 2; - - /* Value: */ - wpsie[wpsielen++] = WPS_VERSION_1; /* Version 1.0 */ - - if (pmlmepriv->wps_probe_req_ie == NULL) { - /* UUID-E */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_UUID_E); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0010); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, myid(&padapter->eeprompriv), ETH_ALEN); - wpsielen += 0x10; - - /* Config Method */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->supported_wps_cm); - wpsielen += 2; - } - - /* Device Name */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->device_name_len); - wpsielen += 2; - - /* Value: */ - memcpy(wpsie + wpsielen, pwdinfo->device_name, pwdinfo->device_name_len); - wpsielen += pwdinfo->device_name_len; - - /* Primary Device Type */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0008); - wpsielen += 2; - - /* Value: */ - /* Category ID */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_CID_RTK_WIDI); - wpsielen += 2; - - /* OUI */ - *(__be32 *)(wpsie + wpsielen) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* Sub Category ID */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_SCID_RTK_DMP); - wpsielen += 2; - - /* Device Password ID */ - /* Type: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID); - wpsielen += 2; - - /* Length: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC); /* Registrar-specified */ - wpsielen += 2; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20110221 */ - /* According to the P2P Specification, the probe request frame should contain 5 P2P attributes */ - /* 1. P2P Capability */ - /* 2. P2P Device ID if this probe request wants to find the specific P2P device */ - /* 3. Listen Channel */ - /* 4. Extended Listen Timing */ - /* 5. Operating Channel if this WiFi is working as the group owner now */ - - /* P2P Capability */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT; - else - p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT; - - /* Listen Channel */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_LISTEN_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; /* Copy from SD7 */ - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->listen_channel; /* listen channel */ - - - /* Extended Listen Timing */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004); - p2pielen += 2; - - /* Value: */ - /* Availability Period */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - /* Availability Interval */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* Operating Channel (if this WiFi is working as the group owner now) */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005); - p2pielen += 2; - - /* Value: */ - /* Country String */ - p2pie[p2pielen++] = 'X'; - p2pie[p2pielen++] = 'X'; - - /* The third byte should be set to 0x04. */ - /* Described in the "Operating Channel Attribute" section. */ - p2pie[p2pielen++] = 0x04; - - /* Operating Class */ - p2pie[p2pielen++] = 0x51; /* Copy from SD7 */ - - /* Channel Number */ - p2pie[p2pielen++] = pwdinfo->operating_channel; /* operating channel number */ - } - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - - if (pmlmepriv->wps_probe_req_ie != NULL) { - /* WPS IE */ - memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len); - pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len; - pframe += pmlmepriv->wps_probe_req_ie_len; - } - - pattrib->last_txcmdsz = pattrib->pktlen; - - RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz)); - - if (wait_ack) { - ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe); - } else { - dump_mgntframe(padapter, pmgntframe); - ret = _SUCCESS; + break; } exit: return ret; } -inline void issue_probereq_p2p(struct adapter *adapter, u8 *da) +unsigned int OnAction_qos(struct adapter *padapter, struct recv_frame *precv_frame) { - _issue_probereq_p2p(adapter, da, false); + return _SUCCESS; } -int issue_probereq_p2p_ex(struct adapter *adapter, u8 *da, int try_cnt, int wait_ms) +unsigned int OnAction_dls(struct adapter *padapter, struct recv_frame *precv_frame) { - int ret; - int i = 0; - u32 start = jiffies; + return _SUCCESS; +} - do { - ret = _issue_probereq_p2p(adapter, da, wait_ms > 0 ? true : false); +unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame) +{ + u8 *addr; + struct sta_info *psta = NULL; + struct recv_reorder_ctrl *preorder_ctrl; + unsigned char *frame_body; + unsigned char category, action; + unsigned short tid, status, reason_code = 0; + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); + u8 *pframe = precv_frame->rx_data; + struct sta_priv *pstapriv = &padapter->stapriv; + /* check RA matches or not */ + if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), + ETH_ALEN))/* for if1, sta/ap mode */ + return _SUCCESS; - i++; + DBG_88E("%s\n", __func__); - if (adapter->bDriverStopped || adapter->bSurpriseRemoved) - break; + if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) + if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) + return _SUCCESS; - if (i < try_cnt && wait_ms > 0 && ret == _FAIL) - msleep(wait_ms); - } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0))); + addr = GetAddr2Ptr(pframe); + psta = rtw_get_stainfo(pstapriv, addr); - if (ret != _FAIL) { - ret = _SUCCESS; - goto exit; - } + if (psta == NULL) + return _SUCCESS; - if (try_cnt && wait_ms) { - if (da) - DBG_88E(FUNC_ADPT_FMT" to %pM, ch:%u%s, %d/%d in %u ms\n", - FUNC_ADPT_ARG(adapter), da, rtw_get_oper_ch(adapter), - ret == _SUCCESS ? ", acked" : "", i, try_cnt, rtw_get_passing_time_ms(start)); - else - DBG_88E(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n", - FUNC_ADPT_ARG(adapter), rtw_get_oper_ch(adapter), - ret == _SUCCESS ? ", acked" : "", i, try_cnt, rtw_get_passing_time_ms(start)); + frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); + + category = frame_body[0]; + if (category == RTW_WLAN_CATEGORY_BACK) { /* representing Block Ack */ + if (!pmlmeinfo->HT_enable) + return _SUCCESS; + action = frame_body[1]; + DBG_88E("%s, action=%d\n", __func__, action); + switch (action) { + case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */ + memcpy(&(pmlmeinfo->ADDBA_req), &(frame_body[2]), sizeof(struct ADDBA_request)); + process_addba_req(padapter, (u8 *)&(pmlmeinfo->ADDBA_req), addr); + + if (pmlmeinfo->bAcceptAddbaReq) + issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 0); + else + issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */ + break; + case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */ + status = get_unaligned_le16(&frame_body[3]); + tid = ((frame_body[5] >> 2) & 0x7); + if (status == 0) { /* successful */ + DBG_88E("agg_enable for TID=%d\n", tid); + psta->htpriv.agg_enable_bitmap |= 1 << tid; + psta->htpriv.candidate_tid_bitmap &= ~BIT(tid); + } else { + psta->htpriv.agg_enable_bitmap &= ~BIT(tid); + } + break; + case RTW_WLAN_ACTION_DELBA: /* DELBA */ + if ((frame_body[3] & BIT(3)) == 0) { + psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); + psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf)); + reason_code = get_unaligned_le16(&frame_body[4]); + } else if ((frame_body[3] & BIT(3)) == BIT(3)) { + tid = (frame_body[3] >> 4) & 0x0F; + preorder_ctrl = &psta->recvreorder_ctrl[tid]; + preorder_ctrl->enable = false; + preorder_ctrl->indicate_seq = 0xffff; + } + DBG_88E("%s(): DELBA: %x(%x)\n", __func__, pmlmeinfo->agg_enable_bitmap, reason_code); + /* todo: how to notify the host while receiving DELETE BA */ + break; + default: + break; + } } -exit: - return ret; + return _SUCCESS; } -#endif /* CONFIG_88EU_P2P */ - static s32 rtw_action_public_decache(struct recv_frame *recv_frame, s32 token) { struct adapter *adapter = recv_frame->adapter; @@ -3893,16 +1716,6 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) u8 *pframe = precv_frame->rx_data; u8 *frame_body; u8 dialogToken = 0; -#ifdef CONFIG_88EU_P2P - struct adapter *padapter = precv_frame->adapter; - uint len = precv_frame->len; - u8 *p2p_ie; - u32 p2p_ielen; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 result = P2P_STATUS_SUCCESS; - u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -#endif /* CONFIG_88EU_P2P */ - frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); dialogToken = frame_body[7]; @@ -3910,272 +1723,6 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame) if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL) return _FAIL; -#ifdef CONFIG_88EU_P2P - del_timer_sync(&pwdinfo->reset_ch_sitesurvey); - /* Do nothing if the driver doesn't enable the P2P function. */ - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) - return _SUCCESS; - - len -= sizeof(struct rtw_ieee80211_hdr_3addr); - - switch (frame_body[6]) { /* OUI Subtype */ - case P2P_GO_NEGO_REQ: - DBG_88E("[%s] Got GO Nego Req Frame\n", __func__); - memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ)) - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL)) { - /* Commented by Albert 20110526 */ - /* In this case, this means the previous nego fail doesn't be reset yet. */ - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - /* Restore the previous p2p state */ - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); - DBG_88E("[%s] Restore the previous p2p state to %d\n", __func__, rtw_p2p_state(pwdinfo)); - } - - /* Commented by Kurt 20110902 */ - /* Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered. */ - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - - /* Commented by Kurt 20120113 */ - /* Get peer_dev_addr here if peer doesn't issue prov_disc frame. */ - if (!memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, - ETH_ALEN)) - memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN); - - result = process_p2p_group_negotation_req(pwdinfo, frame_body, len); - issue_p2p_GO_response(padapter, GetAddr2Ptr(pframe), frame_body, len, result); - - /* Commented by Albert 20110718 */ - /* No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer. */ - _set_timer(&pwdinfo->restore_p2p_state_timer, 5000); - break; - case P2P_GO_NEGO_RESP: - DBG_88E("[%s] Got GO Nego Resp Frame\n", __func__); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) { - /* Commented by Albert 20110425 */ - /* The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function. */ - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - pwdinfo->nego_req_info.benable = false; - result = process_p2p_group_negotation_resp(pwdinfo, frame_body, len); - issue_p2p_GO_confirm(pwdinfo->padapter, GetAddr2Ptr(pframe), result); - if (P2P_STATUS_SUCCESS == result) { - if (rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT) { - pwdinfo->p2p_info.operation_ch[0] = pwdinfo->peer_operating_ch; - pwdinfo->p2p_info.scan_op_ch_only = 1; - _set_timer(&pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH); - } - } - /* Reset the dialog token for group negotiation frames. */ - pwdinfo->negotiation_dialog_token = 1; - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL)) - _set_timer(&pwdinfo->restore_p2p_state_timer, 5000); - } else { - DBG_88E("[%s] Skipped GO Nego Resp Frame (p2p_state != P2P_STATE_GONEGO_ING)\n", __func__); - } - break; - case P2P_GO_NEGO_CONF: - DBG_88E("[%s] Got GO Nego Confirm Frame\n", __func__); - result = process_p2p_group_negotation_confirm(pwdinfo, frame_body, len); - if (P2P_STATUS_SUCCESS == result) { - if (rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT) { - pwdinfo->p2p_info.operation_ch[0] = pwdinfo->peer_operating_ch; - pwdinfo->p2p_info.scan_op_ch_only = 1; - _set_timer(&pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH); - } - } - break; - case P2P_INVIT_REQ: - /* Added by Albert 2010/10/05 */ - /* Received the P2P Invite Request frame. */ - - DBG_88E("[%s] Got invite request frame!\n", __func__); - p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen); - if (p2p_ie) { - /* Parse the necessary information from the P2P Invitation Request frame. */ - /* For example: The MAC address of sending this P2P Invitation Request frame. */ - u32 attr_contentlen = 0; - u8 status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - struct group_id_info group_id; - u8 invitation_flag = 0; - - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen); - if (attr_contentlen) { - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen); - /* Commented by Albert 20120510 */ - /* Copy to the pwdinfo->p2p_peer_interface_addr. */ - /* So that the WFD UI (or Sigma) can get the peer interface address by using the following command. */ - /* #> iwpriv wlan0 p2p_get peer_ifa */ - /* After having the peer interface address, the sigma can find the correct conf file for wpa_supplicant. */ - - if (attr_contentlen) { - DBG_88E("[%s] GO's BSSID = %.2X %.2X %.2X %.2X %.2X %.2X\n", __func__, - pwdinfo->p2p_peer_interface_addr[0], pwdinfo->p2p_peer_interface_addr[1], - pwdinfo->p2p_peer_interface_addr[2], pwdinfo->p2p_peer_interface_addr[3], - pwdinfo->p2p_peer_interface_addr[4], pwdinfo->p2p_peer_interface_addr[5]); - } - - if (invitation_flag & P2P_INVITATION_FLAGS_PERSISTENT) { - /* Re-invoke the persistent group. */ - - memset(&group_id, 0x00, sizeof(struct group_id_info)); - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen); - if (attr_contentlen) { - if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) { - /* The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO. */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - status_code = P2P_STATUS_SUCCESS; - } else { - /* The p2p device sending this p2p invitation request wants to be the persistent GO. */ - if (is_matched_in_profilelist(pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[0])) { - u8 operatingch_info[5] = { 0x00 }; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { - if (rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, (u32)operatingch_info[4])) { - /* The operating channel is acceptable for this device. */ - pwdinfo->rx_invitereq_info.operation_ch[0] = operatingch_info[4]; - pwdinfo->rx_invitereq_info.scan_op_ch_only = 1; - _set_timer(&pwdinfo->reset_ch_sitesurvey, P2P_RESET_SCAN_CH); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - status_code = P2P_STATUS_SUCCESS; - } else { - /* The operating channel isn't supported by this device. */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - status_code = P2P_STATUS_FAIL_NO_COMMON_CH; - _set_timer(&pwdinfo->restore_p2p_state_timer, 3000); - } - } else { - /* Commented by Albert 20121130 */ - /* Intel will use the different P2P IE to store the operating channel information */ - /* Workaround for Intel WiDi 3.5 */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - status_code = P2P_STATUS_SUCCESS; - } - } else { - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH); - status_code = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP; - } - } - } else { - DBG_88E("[%s] P2P Group ID Attribute NOT FOUND!\n", __func__); - status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - } - } else { - /* Received the invitation to join a P2P group. */ - - memset(&group_id, 0x00, sizeof(struct group_id_info)); - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen); - if (attr_contentlen) { - if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) { - /* In this case, the GO can't be myself. */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH); - status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - } else { - /* The p2p device sending this p2p invitation request wants to join an existing P2P group */ - /* Commented by Albert 2012/06/28 */ - /* In this case, this Wi-Fi device should use the iwpriv command to get the peer device address. */ - /* The peer device address should be the destination address for the provisioning discovery request. */ - /* Then, this Wi-Fi device should use the iwpriv command to get the peer interface address. */ - /* The peer interface address should be the address for WPS mac address */ - memcpy(pwdinfo->p2p_peer_device_addr, group_id.go_device_addr , ETH_ALEN); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_JOIN); - status_code = P2P_STATUS_SUCCESS; - } - } else { - DBG_88E("[%s] P2P Group ID Attribute NOT FOUND!\n", __func__); - status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - } - } - } else { - DBG_88E("[%s] P2P Invitation Flags Attribute NOT FOUND!\n", __func__); - status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - } - - DBG_88E("[%s] status_code = %d\n", __func__, status_code); - - pwdinfo->inviteresp_info.token = frame_body[7]; - issue_p2p_invitation_response(padapter, GetAddr2Ptr(pframe), pwdinfo->inviteresp_info.token, status_code); - } - break; - case P2P_INVIT_RESP: { - u8 attr_content = 0x00; - u32 attr_contentlen = 0; - - DBG_88E("[%s] Got invite response frame!\n", __func__); - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen); - if (p2p_ie) { - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); - - if (attr_contentlen == 1) { - DBG_88E("[%s] Status = %d\n", __func__, attr_content); - pwdinfo->invitereq_info.benable = false; - - if (attr_content == P2P_STATUS_SUCCESS) { - if (!memcmp(pwdinfo->invitereq_info.go_bssid, myid(&padapter->eeprompriv), ETH_ALEN)) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - } - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_OK); - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL); - } - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL); - } - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL); - } - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL)) - _set_timer(&pwdinfo->restore_p2p_state_timer, 5000); - break; - } - case P2P_DEVDISC_REQ: - process_p2p_devdisc_req(pwdinfo, pframe, len); - break; - case P2P_DEVDISC_RESP: - process_p2p_devdisc_resp(pwdinfo, pframe, len); - break; - case P2P_PROVISION_DISC_REQ: - DBG_88E("[%s] Got Provisioning Discovery Request Frame\n", __func__); - process_p2p_provdisc_req(pwdinfo, pframe, len); - memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN); - - /* 20110902 Kurt */ - /* Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered. */ - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ)) - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ); - _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT); - break; - case P2P_PROVISION_DISC_RESP: - /* Commented by Albert 20110707 */ - /* Should we check the pwdinfo->tx_prov_disc_info.bsent flag here?? */ - DBG_88E("[%s] Got Provisioning Discovery Response Frame\n", __func__); - /* Commented by Albert 20110426 */ - /* The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function. */ - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP); - process_p2p_provdisc_resp(pwdinfo, pframe); - _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT); - break; - } -#endif /* CONFIG_88EU_P2P */ - return _SUCCESS; } @@ -4250,46 +1797,6 @@ unsigned int OnAction_wmm(struct adapter *padapter, struct recv_frame *precv_fra unsigned int OnAction_p2p(struct adapter *padapter, struct recv_frame *precv_frame) { -#ifdef CONFIG_88EU_P2P - u8 *frame_body; - u8 category, OUI_Subtype; - u8 *pframe = precv_frame->rx_data; - uint len = precv_frame->len; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - - DBG_88E("%s\n", __func__); - - /* check RA matches or not */ - if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))/* for if1, sta/ap mode */ - return _SUCCESS; - - frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); - - category = frame_body[0]; - if (category != RTW_WLAN_CATEGORY_P2P) - return _SUCCESS; - - if (be32_to_cpu(*((__be32 *)(frame_body + 1))) != P2POUI) - return _SUCCESS; - - len -= sizeof(struct rtw_ieee80211_hdr_3addr); - OUI_Subtype = frame_body[5]; - - switch (OUI_Subtype) { - case P2P_NOTICE_OF_ABSENCE: - break; - case P2P_PRESENCE_REQUEST: - process_p2p_presence_req(pwdinfo, pframe, len); - break; - case P2P_PRESENCE_RESPONSE: - break; - case P2P_GO_DISC_REQUEST: - break; - default: - break; - } -#endif /* CONFIG_88EU_P2P */ return _SUCCESS; } @@ -4487,9 +1994,6 @@ void issue_beacon(struct adapter *padapter, int timeout_ms) struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct wlan_bssid_ex *cur_network = &(pmlmeinfo->network); u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ pmgntframe = alloc_mgtxmitframe(pxmitpriv); if (pmgntframe == NULL) { @@ -4526,108 +2030,26 @@ void issue_beacon(struct adapter *padapter, int timeout_ms) pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr); if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { -#ifdef CONFIG_88EU_P2P - /* for P2P : Primary Device Type & Device Name */ - u32 wpsielen = 0, insert_len = 0; - u8 *wpsie = NULL; - wpsie = rtw_get_wps_ie(cur_network->IEs+_FIXED_IE_LENGTH_, cur_network->IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen); - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && wpsie && wpsielen > 0) { - uint wps_offset, remainder_ielen; - u8 *premainder_ie, *pframe_wscie; - - wps_offset = (uint)(wpsie - cur_network->IEs); - premainder_ie = wpsie + wpsielen; - remainder_ielen = cur_network->IELength - wps_offset - wpsielen; - pframe_wscie = pframe + wps_offset; - memcpy(pframe, cur_network->IEs, wps_offset+wpsielen); - pframe += (wps_offset + wpsielen); - pattrib->pktlen += (wps_offset + wpsielen); - - /* now pframe is end of wsc ie, insert Primary Device Type & Device Name */ - /* Primary Device Type */ - /* Type: */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE); - insert_len += 2; - - /* Length: */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(0x0008); - insert_len += 2; - - /* Value: */ - /* Category ID */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - insert_len += 2; - - /* OUI */ - *(__be32 *)(pframe + insert_len) = cpu_to_be32(WPSOUI); - insert_len += 4; - - /* Sub Category ID */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - insert_len += 2; - - /* Device Name */ - /* Type: */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - insert_len += 2; - - /* Length: */ - *(__be16 *)(pframe + insert_len) = cpu_to_be16(pwdinfo->device_name_len); - insert_len += 2; - - /* Value: */ - memcpy(pframe + insert_len, pwdinfo->device_name, pwdinfo->device_name_len); - insert_len += pwdinfo->device_name_len; - - /* update wsc ie length */ - *(pframe_wscie+1) = (wpsielen-2) + insert_len; - - /* pframe move to end */ - pframe += insert_len; - pattrib->pktlen += insert_len; - - /* copy remainder_ie to pframe */ - memcpy(pframe, premainder_ie, remainder_ielen); - pframe += remainder_ielen; - pattrib->pktlen += remainder_ielen; - } else -#endif /* CONFIG_88EU_P2P */ - { - int len_diff; - memcpy(pframe, cur_network->IEs, cur_network->IELength); - len_diff = update_hidden_ssid( - pframe+_BEACON_IE_OFFSET_ - , cur_network->IELength-_BEACON_IE_OFFSET_ - , pmlmeinfo->hidden_ssid_mode + int len_diff; + u8 *wps_ie; + uint wps_ielen; + u8 sr = 0; + memcpy(pframe, cur_network->IEs, cur_network->IELength); + len_diff = update_hidden_ssid( + pframe+_BEACON_IE_OFFSET_ + , cur_network->IELength-_BEACON_IE_OFFSET_ + , pmlmeinfo->hidden_ssid_mode ); - pframe += (cur_network->IELength+len_diff); - pattrib->pktlen += (cur_network->IELength+len_diff); - } - - { - u8 *wps_ie; - uint wps_ielen; - u8 sr = 0; - wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof (struct rtw_ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_, - pattrib->pktlen-sizeof (struct rtw_ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen); - if (wps_ie && wps_ielen > 0) - rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8 *)(&sr), NULL); - if (sr != 0) - set_fwstate(pmlmepriv, WIFI_UNDER_WPS); - else - _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS); - } - -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - u32 len; - len = build_beacon_p2p_ie(pwdinfo, pframe); - - pframe += len; - pattrib->pktlen += len; - } -#endif /* CONFIG_88EU_P2P */ + pframe += (cur_network->IELength+len_diff); + pattrib->pktlen += (cur_network->IELength+len_diff); + wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof (struct rtw_ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_, + pattrib->pktlen-sizeof (struct rtw_ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen); + if (wps_ie && wps_ielen > 0) + rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8 *)(&sr), NULL); + if (sr != 0) + set_fwstate(pmlmepriv, WIFI_UNDER_WPS); + else + _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS); goto _issue_bcn; } @@ -4717,9 +2139,6 @@ void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct wlan_bssid_ex *cur_network = &(pmlmeinfo->network); unsigned int rate_len; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ pmgntframe = alloc_mgtxmitframe(pxmitpriv); if (pmgntframe == NULL) { @@ -4844,16 +2263,6 @@ void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p /* todo:HT for adhoc */ } -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && is_valid_p2p_probereq) { - u32 len; - len = build_probe_resp_p2p_ie(pwdinfo, pframe); - - pframe += len; - pattrib->pktlen += len; - } -#endif /* CONFIG_88EU_P2P */ - pattrib->last_txcmdsz = pattrib->pktlen; dump_mgntframe(padapter, pmgntframe); @@ -5153,9 +2562,6 @@ void issue_asocrsp(struct adapter *padapter, unsigned short status, struct sta_i struct wlan_bssid_ex *pnetwork = &(pmlmeinfo->network); u8 *ie = pnetwork->IEs; __le16 lestatus, leval; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ DBG_88E("%s\n", __func__); @@ -5260,16 +2666,6 @@ void issue_asocrsp(struct adapter *padapter, unsigned short status, struct sta_i pattrib->pktlen += pmlmepriv->wps_assoc_resp_ie_len; } -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device)) { - u32 len; - - len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code); - - pframe += len; - pattrib->pktlen += len; - } -#endif /* CONFIG_88EU_P2P */ pattrib->last_txcmdsz = pattrib->pktlen; dump_mgntframe(padapter, pmgntframe); #endif @@ -5293,11 +2689,6 @@ void issue_assocreq(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); int bssrate_len = 0, sta_bssrate_len = 0; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 p2pie[255] = { 0x00 }; - u16 p2pielen = 0; -#endif /* CONFIG_88EU_P2P */ pmgntframe = alloc_mgtxmitframe(pxmitpriv); if (pmgntframe == NULL) @@ -5464,137 +2855,6 @@ void issue_assocreq(struct adapter *padapter) if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK) pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 6 , REALTEK_96B_IE, &(pattrib->pktlen)); -#ifdef CONFIG_88EU_P2P - - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) { - /* Should add the P2P IE in the association request frame. */ - /* P2P OUI */ - - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20101109 */ - /* According to the P2P Specification, the association request frame should contain 3 P2P attributes */ - /* 1. P2P Capability */ - /* 2. Extended Listen Timing */ - /* 3. Device Info */ - /* Commented by Albert 20110516 */ - /* 4. P2P Interface */ - - /* P2P Capability */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT; - else - p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT; - - /* Extended Listen Timing */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004); - p2pielen += 2; - - /* Value: */ - /* Availability Period */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - /* Availability Interval */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - /* Device Info */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - if ((pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PEER_DISPLAY_PIN) || - (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_SELF_DISPLAY_PIN)) - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); - else - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC); - - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - /* P2P Interface */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_INTERFACE; - - /* Length: */ - *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x000D); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN); /* P2P Device Address */ - p2pielen += ETH_ALEN; - - p2pie[p2pielen++] = 1; /* P2P Interface Address Count */ - - memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN); /* P2P Interface Address List */ - p2pielen += ETH_ALEN; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen); - } - -#endif /* CONFIG_88EU_P2P */ - pattrib->last_txcmdsz = pattrib->pktlen; dump_mgntframe(padapter, pmgntframe); @@ -5859,16 +3119,6 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); int ret = _FAIL; __le16 le_tmp; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ - -#ifdef CONFIG_88EU_P2P - if (!(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) && (pwdinfo->rx_invitereq_info.scan_op_ch_only)) { - del_timer_sync(&pwdinfo->reset_ch_sitesurvey); - _set_timer(&pwdinfo->reset_ch_sitesurvey, 10); - } -#endif /* CONFIG_88EU_P2P */ pmgntframe = alloc_mgtxmitframe(pxmitpriv); if (pmgntframe == NULL) @@ -6375,38 +3625,15 @@ void site_survey(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); u32 initialgain = 0; + struct rtw_ieee80211_channel *ch; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - if ((pwdinfo->rx_invitereq_info.scan_op_ch_only) || (pwdinfo->p2p_info.scan_op_ch_only)) { - if (pwdinfo->rx_invitereq_info.scan_op_ch_only) { - survey_channel = pwdinfo->rx_invitereq_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx]; - } else { - survey_channel = pwdinfo->p2p_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx]; - } - ScanType = SCAN_ACTIVE; - } else if (rtw_p2p_findphase_ex_is_social(pwdinfo)) { - /* Commented by Albert 2011/06/03 */ - /* The driver is in the find phase, it should go through the social channel. */ - int ch_set_idx; - survey_channel = pwdinfo->social_chan[pmlmeext->sitesurvey_res.channel_idx]; - ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, survey_channel); - if (ch_set_idx >= 0) - ScanType = pmlmeext->channel_set[ch_set_idx].ScanType; - else - ScanType = SCAN_ACTIVE; - } else -#endif /* CONFIG_88EU_P2P */ - { - struct rtw_ieee80211_channel *ch; - if (pmlmeext->sitesurvey_res.channel_idx < pmlmeext->sitesurvey_res.ch_num) { - ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx]; - survey_channel = ch->hw_value; - ScanType = (ch->flags & RTW_IEEE80211_CHAN_PASSIVE_SCAN) ? SCAN_PASSIVE : SCAN_ACTIVE; - } + if (pmlmeext->sitesurvey_res.channel_idx < pmlmeext->sitesurvey_res.ch_num) { + ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx]; + survey_channel = ch->hw_value; + ScanType = (ch->flags & RTW_IEEE80211_CHAN_PASSIVE_SCAN) ? SCAN_PASSIVE : SCAN_ACTIVE; } + if (survey_channel != 0) { /* PAUSE 4-AC Queue when site_survey */ /* rtw_hal_get_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8)); */ @@ -6418,118 +3645,78 @@ void site_survey(struct adapter *padapter) SelectChannel(padapter, survey_channel); if (ScanType == SCAN_ACTIVE) { /* obey the channel plan setting... */ - #ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || - rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)) { - issue_probereq_p2p(padapter, NULL); - issue_probereq_p2p(padapter, NULL); - issue_probereq_p2p(padapter, NULL); - } else - #endif /* CONFIG_88EU_P2P */ - { - int i; - for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) { - if (pmlmeext->sitesurvey_res.ssid[i].SsidLength) { - /* todo: to issue two probe req??? */ - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL); - /* msleep(SURVEY_TO>>1); */ - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL); - } - } - - if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) { + int i; + for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) { + if (pmlmeext->sitesurvey_res.ssid[i].SsidLength) { /* todo: to issue two probe req??? */ - issue_probereq(padapter, NULL, NULL); + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL); /* msleep(SURVEY_TO>>1); */ - issue_probereq(padapter, NULL, NULL); + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL); } } + + if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) { + /* todo: to issue two probe req??? */ + issue_probereq(padapter, NULL, NULL); + /* msleep(SURVEY_TO>>1); */ + issue_probereq(padapter, NULL, NULL); + } + + if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) { + /* todo: to issue two probe req??? */ + issue_probereq(padapter, NULL, NULL); + /* msleep(SURVEY_TO>>1); */ + issue_probereq(padapter, NULL, NULL); + } } set_survey_timer(pmlmeext, pmlmeext->chan_scan_time); } else { - /* channel number is 0 or this channel is not valid. */ - -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)) { - if ((pwdinfo->rx_invitereq_info.scan_op_ch_only) || (pwdinfo->p2p_info.scan_op_ch_only)) { - /* Set the find_phase_state_exchange_cnt to P2P_FINDPHASE_EX_CNT. */ - /* This will let the following flow to run the scanning end. */ - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX); - } - } - if (rtw_p2p_findphase_ex_is_needed(pwdinfo)) { - /* Set the P2P State to the listen state of find phase and set the current channel to the listen channel */ - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_LISTEN); - pmlmeext->sitesurvey_res.state = SCAN_DISABLE; - - initialgain = 0xff; /* restore RX GAIN */ - rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); - /* turn on dynamic functions */ - Restore_DM_Func_Flag(padapter); - /* Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, true); */ - - _set_timer(&pwdinfo->find_phase_timer, (u32)((u32)(pwdinfo->listen_dwell) * 100)); - } else -#endif /* CONFIG_88EU_P2P */ - { - /* 20100721:Interrupt scan operation here. */ - /* For SW antenna diversity before link, it needs to switch to another antenna and scan again. */ - /* It compares the scan result and select better one to do connection. */ - if (rtw_hal_antdiv_before_linked(padapter)) { - pmlmeext->sitesurvey_res.bss_cnt = 0; - pmlmeext->sitesurvey_res.channel_idx = -1; - pmlmeext->chan_scan_time = SURVEY_TO / 2; - set_survey_timer(pmlmeext, pmlmeext->chan_scan_time); - return; - } -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)) - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE); -#endif /* CONFIG_88EU_P2P */ + /* 20100721:Interrupt scan operation here. */ + /* For SW antenna diversity before link, it needs to switch to another antenna and scan again. */ + /* It compares the scan result and select better one to do connection. */ + if (rtw_hal_antdiv_before_linked(padapter)) { + pmlmeext->sitesurvey_res.bss_cnt = 0; + pmlmeext->sitesurvey_res.channel_idx = -1; + pmlmeext->chan_scan_time = SURVEY_TO / 2; + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time); + return; + } - pmlmeext->sitesurvey_res.state = SCAN_COMPLETE; + pmlmeext->sitesurvey_res.state = SCAN_COMPLETE; - /* switch back to the original channel */ + /* switch back to the original channel */ -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)) - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - else - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); -#endif /* CONFIG_88EU_P2P */ + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); - /* flush 4-AC Queue after site_survey */ - /* val8 = 0; */ - /* rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8)); */ + /* flush 4-AC Queue after site_survey */ + /* val8 = 0; */ + /* rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8)); */ - /* config MSR */ - Set_MSR(padapter, (pmlmeinfo->state & 0x3)); + /* config MSR */ + Set_MSR(padapter, (pmlmeinfo->state & 0x3)); - initialgain = 0xff; /* restore RX GAIN */ - rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); - /* turn on dynamic functions */ - Restore_DM_Func_Flag(padapter); - /* Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true); */ + initialgain = 0xff; /* restore RX GAIN */ + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); + /* turn on dynamic functions */ + Restore_DM_Func_Flag(padapter); + /* Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true); */ - if (is_client_associated_to_ap(padapter)) - issue_nulldata(padapter, NULL, 0, 3, 500); + if (is_client_associated_to_ap(padapter)) + issue_nulldata(padapter, NULL, 0, 3, 500); - val8 = 0; /* survey done */ - rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8)); + val8 = 0; /* survey done */ + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8)); - report_surveydone_event(padapter); + report_surveydone_event(padapter); - pmlmeext->chan_scan_time = SURVEY_TO; - pmlmeext->sitesurvey_res.state = SCAN_DISABLE; + pmlmeext->chan_scan_time = SURVEY_TO; + pmlmeext->sitesurvey_res.state = SCAN_DISABLE; - issue_action_BSSCoexistPacket(padapter); - issue_action_BSSCoexistPacket(padapter); - issue_action_BSSCoexistPacket(padapter); - } + issue_action_BSSCoexistPacket(padapter); + issue_action_BSSCoexistPacket(padapter); + issue_action_BSSCoexistPacket(padapter); } return; } @@ -7555,9 +4742,6 @@ void linked_status_chk(struct adapter *padapter) psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress); if (psta != NULL) { bool is_p2p_enable = false; - #ifdef CONFIG_88EU_P2P - is_p2p_enable = !rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE); - #endif if (!chk_ap_is_alive(padapter, psta)) rx_chk = _FAIL; @@ -7655,9 +4839,6 @@ void survey_timer_hdl(struct adapter *padapter) struct sitesurvey_parm *psurveyPara; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* issue rtw_sitesurvey_cmd */ if (pmlmeext->sitesurvey_res.state > SCAN_START) { @@ -7665,22 +4846,9 @@ void survey_timer_hdl(struct adapter *padapter) pmlmeext->sitesurvey_res.channel_idx++; if (pmlmeext->scan_abort) { - #ifdef CONFIG_88EU_P2P - if (!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE)) { - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX); - pmlmeext->sitesurvey_res.channel_idx = 3; - DBG_88E("%s idx:%d, cnt:%u\n", __func__ - , pmlmeext->sitesurvey_res.channel_idx - , pwdinfo->find_phase_state_exchange_cnt - ); - } else - #endif - { - pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num; - DBG_88E("%s idx:%d\n", __func__ - , pmlmeext->sitesurvey_res.channel_idx - ); - } + pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num; + DBG_88E("%s idx:%d\n", __func__ + , pmlmeext->sitesurvey_res.channel_idx); pmlmeext->scan_abort = false;/* reset */ } @@ -8056,10 +5224,6 @@ u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf) u32 initialgain; u32 i; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; -#endif - if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE) { /* for first time sitesurvey_cmd */ rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, NULL); @@ -8105,14 +5269,7 @@ u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf) Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, false); /* config the initial gain under scanning, need to write the BB registers */ -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - initialgain = 0x1E; - else - initialgain = 0x28; -#else /* CONFIG_88EU_P2P */ initialgain = 0x1E; -#endif /* CONFIG_88EU_P2P */ rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c deleted file mode 100644 index e1fd198eae30..000000000000 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ /dev/null @@ -1,2015 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _RTW_P2P_C_ - -#include -#include -#include - -#ifdef CONFIG_88EU_P2P - -static int rtw_p2p_is_channel_list_ok(u8 desired_ch, u8 *ch_list, u8 ch_cnt) -{ - int found = 0, i = 0; - - for (i = 0; i < ch_cnt; i++) { - if (ch_list[i] == desired_ch) { - found = 1; - break; - } - } - return found; -} - -static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf) -{ - struct list_head *phead, *plist; - u32 len = 0; - u16 attr_len = 0; - u8 tmplen, *pdata_attr, *pstart, *pcur; - struct sta_info *psta = NULL; - struct adapter *padapter = pwdinfo->padapter; - struct sta_priv *pstapriv = &padapter->stapriv; - - DBG_88E("%s\n", __func__); - - pdata_attr = kzalloc(MAX_P2P_IE_LEN, GFP_KERNEL); - - pstart = pdata_attr; - pcur = pdata_attr; - - spin_lock_bh(&pstapriv->asoc_list_lock); - phead = &pstapriv->asoc_list; - plist = phead->next; - - /* look up sta asoc_queue */ - while (phead != plist) { - psta = container_of(plist, struct sta_info, asoc_list); - - plist = plist->next; - - - if (psta->is_p2p_device) { - tmplen = 0; - - pcur++; - - /* P2P device address */ - memcpy(pcur, psta->dev_addr, ETH_ALEN); - pcur += ETH_ALEN; - - /* P2P interface address */ - memcpy(pcur, psta->hwaddr, ETH_ALEN); - pcur += ETH_ALEN; - - *pcur = psta->dev_cap; - pcur++; - - *((u16 *)(pcur)) = cpu_to_be16(psta->config_methods); - pcur += 2; - - memcpy(pcur, psta->primary_dev_type, 8); - pcur += 8; - - *pcur = psta->num_of_secdev_type; - pcur++; - - memcpy(pcur, psta->secdev_types_list, psta->num_of_secdev_type*8); - pcur += psta->num_of_secdev_type*8; - - if (psta->dev_name_len > 0) { - *(u16 *)(pcur) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - pcur += 2; - - *(u16 *)(pcur) = cpu_to_be16(psta->dev_name_len); - pcur += 2; - - memcpy(pcur, psta->dev_name, psta->dev_name_len); - pcur += psta->dev_name_len; - } - - - tmplen = (u8)(pcur-pstart); - - *pstart = (tmplen-1); - - attr_len += tmplen; - - /* pstart += tmplen; */ - pstart = pcur; - } - } - spin_unlock_bh(&pstapriv->asoc_list_lock); - - if (attr_len > 0) - len = rtw_set_p2p_attr_content(pbuf, P2P_ATTR_GROUP_INFO, attr_len, pdata_attr); - - kfree(pdata_attr); - return len; -} - -static void issue_group_disc_req(struct wifidirect_info *pwdinfo, u8 *da) -{ - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct adapter *padapter = pwdinfo->padapter; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - unsigned char category = RTW_WLAN_CATEGORY_P2P;/* P2P action frame */ - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_GO_DISC_REQUEST; - u8 dialogToken = 0; - - DBG_88E("[%s]\n", __func__); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, da, ETH_ALEN); - memcpy(pwlanhdr->addr2, pwdinfo->interface_addr, ETH_ALEN); - memcpy(pwlanhdr->addr3, pwdinfo->interface_addr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - /* Build P2P action frame header */ - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - /* there is no IE in this P2P action frame */ - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); -} - -static void issue_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 status, u8 dialogToken) -{ - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct adapter *padapter = pwdinfo->padapter; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_DEVDISC_RESP; - u8 p2pie[8] = { 0x00 }; - u32 p2pielen = 0; - - DBG_88E("[%s]\n", __func__); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, da, ETH_ALEN); - memcpy(pwlanhdr->addr2, pwdinfo->device_addr, ETH_ALEN); - memcpy(pwlanhdr->addr3, pwdinfo->device_addr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - /* Build P2P public action frame header */ - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - - /* Build P2P IE */ - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* P2P_ATTR_STATUS */ - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status); - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, p2pie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); -} - -static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, u8 *frame_body, u16 config_method) -{ - struct adapter *padapter = pwdinfo->padapter; - unsigned char category = RTW_WLAN_CATEGORY_PUBLIC; - u8 action = P2P_PUB_ACTION_ACTION; - u8 dialogToken = frame_body[7]; /* The Dialog Token of provisioning discovery request frame. */ - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_PROVISION_DISC_RESP; - u8 wpsie[100] = { 0x00 }; - u8 wpsielen = 0; - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, raddr, ETH_ALEN); - memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); - memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - wpsielen = 0; - /* WPS OUI */ - *((u32 *)(wpsie+wpsielen)) = cpu_to_be32(WPSOUI); - wpsielen += 4; - - /* Config Method */ - /* Type: */ - *(u16 *)(wpsie+wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD); - wpsielen += 2; - - /* Length: */ - *(u16 *)(wpsie+wpsielen) = cpu_to_be16(0x0002); - wpsielen += 2; - - /* Value: */ - *(u16 *)(wpsie+wpsielen) = cpu_to_be16(config_method); - wpsielen += 2; - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen); - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); - - return; -} - -static void issue_p2p_presence_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 status, u8 dialogToken) -{ - struct xmit_frame *pmgntframe; - struct pkt_attrib *pattrib; - unsigned char *pframe; - struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - struct adapter *padapter = pwdinfo->padapter; - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); - unsigned char category = RTW_WLAN_CATEGORY_P2P;/* P2P action frame */ - __be32 p2poui = cpu_to_be32(P2POUI); - u8 oui_subtype = P2P_PRESENCE_RESPONSE; - u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 }; - u8 noa_attr_content[32] = { 0x00 }; - u32 p2pielen = 0; - - DBG_88E("[%s]\n", __func__); - - pmgntframe = alloc_mgtxmitframe(pxmitpriv); - if (pmgntframe == NULL) - return; - - /* update attribute */ - pattrib = &pmgntframe->attrib; - update_mgntframe_attrib(padapter, pattrib); - - memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET); - - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; - - fctrl = &(pwlanhdr->frame_ctl); - *(fctrl) = 0; - - memcpy(pwlanhdr->addr1, da, ETH_ALEN); - memcpy(pwlanhdr->addr2, pwdinfo->interface_addr, ETH_ALEN); - memcpy(pwlanhdr->addr3, pwdinfo->interface_addr, ETH_ALEN); - - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq); - pmlmeext->mgnt_seq++; - SetFrameSubType(pframe, WIFI_ACTION); - - pframe += sizeof(struct rtw_ieee80211_hdr_3addr); - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr); - - /* Build P2P action frame header */ - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&(p2poui), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen)); - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen)); - - - /* Add P2P IE header */ - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Add Status attribute in P2P IE */ - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status); - - /* Add NoA attribute in P2P IE */ - noa_attr_content[0] = 0x1;/* index */ - noa_attr_content[1] = 0x0;/* CTWindow and OppPS Parameters */ - - /* todo: Notice of Absence Descriptor(s) */ - - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_NOA, 2, noa_attr_content); - - - - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, p2pie, &(pattrib->pktlen)); - - - pattrib->last_txcmdsz = pattrib->pktlen; - - dump_mgntframe(padapter, pmgntframe); -} - -u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) -{ - u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 }; - u16 capability = 0; - u32 len = 0, p2pielen = 0; - __le16 le_tmp; - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - - /* According to the P2P Specification, the beacon frame should contain 3 P2P attributes */ - /* 1. P2P Capability */ - /* 2. P2P Device ID */ - /* 3. Notice of Absence (NOA) */ - - /* P2P Capability ATTR */ - /* Type: */ - /* Length: */ - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - /* Be able to participate in additional P2P Groups and */ - /* support the P2P Invitation Procedure */ - /* Group Capability Bitmap, 1 byte */ - capability = P2P_DEVCAP_INVITATION_PROC|P2P_DEVCAP_CLIENT_DISCOVERABILITY; - capability |= ((P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS) << 8); - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING)) - capability |= (P2P_GRPCAP_GROUP_FORMATION<<8); - - le_tmp = cpu_to_le16(capability); - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_CAPABILITY, 2, (u8 *)&le_tmp); - - /* P2P Device ID ATTR */ - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_DEVICE_ID, ETH_ALEN, pwdinfo->device_addr); - - /* Notice of Absence ATTR */ - /* Type: */ - /* Length: */ - /* Value: */ - - pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len); - return len; -} - -u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) -{ - u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 }; - u32 len = 0, p2pielen = 0; - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20100907 */ - /* According to the P2P Specification, the probe response frame should contain 5 P2P attributes */ - /* 1. P2P Capability */ - /* 2. Extended Listen Timing */ - /* 3. Notice of Absence (NOA) (Only GO needs this) */ - /* 4. Device Info */ - /* 5. Group Info (Only GO need this) */ - - /* P2P Capability ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - p2pie[p2pielen] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING)) - p2pie[p2pielen] |= P2P_GRPCAP_GROUP_FORMATION; - - p2pielen++; - } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) { - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT; - else - p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT; - } - - /* Extended Listen Timing ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0004); - p2pielen += 2; - - /* Value: */ - /* Availability Period */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - /* Availability Interval */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); - p2pielen += 2; - - - /* Notice of Absence ATTR */ - /* Type: */ - /* Length: */ - /* Value: */ - - /* Device Info ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *((u32 *)(p2pie + p2pielen)) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - /* Group Info ATTR */ - /* Type: */ - /* Length: */ - /* Value: */ - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) - p2pielen += go_add_group_info_attr(pwdinfo, p2pie + p2pielen); - - - pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len); - - - return len; -} - -u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 *pssid, u8 ussidlen, u8 *pdev_raddr) -{ - u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 }; - u32 len = 0, p2pielen = 0; - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* Commented by Albert 20110301 */ - /* According to the P2P Specification, the provision discovery request frame should contain 3 P2P attributes */ - /* 1. P2P Capability */ - /* 2. Device Info */ - /* 3. Group ID (When joining an operating P2P Group) */ - - /* P2P Capability ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_CAPABILITY; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(0x0002); - p2pielen += 2; - - /* Value: */ - /* Device Capability Bitmap, 1 byte */ - p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT; - - /* Group Capability Bitmap, 1 byte */ - if (pwdinfo->persistent_supported) - p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT; - else - p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT; - - - /* Device Info ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO; - - /* Length: */ - /* 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */ - /* + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - /* P2P Device Address */ - memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN); - p2pielen += ETH_ALEN; - - /* Config Method */ - /* This field should be big endian. Noted by P2P specification. */ - if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PBC) { - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC); - } else { - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); - } - - p2pielen += 2; - - /* Primary Device Type */ - /* Category ID */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); - p2pielen += 2; - - /* OUI */ - *((u32 *)(p2pie + p2pielen)) = cpu_to_be32(WPSOUI); - p2pielen += 4; - - /* Sub Category ID */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); - p2pielen += 2; - - /* Number of Secondary Device Types */ - p2pie[p2pielen++] = 0x00; /* No Secondary Device Type List */ - - /* Device Name */ - /* Type: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); - p2pielen += 2; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len); - p2pielen += pwdinfo->device_name_len; - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { - /* Added by Albert 2011/05/19 */ - /* In this case, the pdev_raddr is the device address of the group owner. */ - - /* P2P Group ID ATTR */ - /* Type: */ - p2pie[p2pielen++] = P2P_ATTR_GROUP_ID; - - /* Length: */ - *(u16 *) (p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + ussidlen); - p2pielen += 2; - - /* Value: */ - memcpy(p2pie + p2pielen, pdev_raddr, ETH_ALEN); - p2pielen += ETH_ALEN; - - memcpy(p2pie + p2pielen, pssid, ussidlen); - p2pielen += ussidlen; - } - - pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len); - - - return len; -} - - -u32 build_assoc_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 status_code) -{ - u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 }; - u32 len = 0, p2pielen = 0; - - /* P2P OUI */ - p2pielen = 0; - p2pie[p2pielen++] = 0x50; - p2pie[p2pielen++] = 0x6F; - p2pie[p2pielen++] = 0x9A; - p2pie[p2pielen++] = 0x09; /* WFA P2P v1.0 */ - - /* According to the P2P Specification, the Association response frame should contain 2 P2P attributes */ - /* 1. Status */ - /* 2. Extended Listen Timing (optional) */ - - - /* Status ATTR */ - p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status_code); - - - /* Extended Listen Timing ATTR */ - /* Type: */ - /* Length: */ - /* Value: */ - - pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len); - - return len; -} - -u32 build_deauth_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf) -{ - u32 len = 0; - - return len; -} - -u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - u8 *p; - u32 ret = false; - u8 *p2pie; - u32 p2pielen = 0; - int ssid_len = 0, rate_cnt = 0; - - p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SUPPORTEDRATES_IE_, (int *)&rate_cnt, - len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_); - - if (rate_cnt <= 4) { - int i, g_rate = 0; - - for (i = 0; i < rate_cnt; i++) { - if (((*(p + 2 + i) & 0xff) != 0x02) && - ((*(p + 2 + i) & 0xff) != 0x04) && - ((*(p + 2 + i) & 0xff) != 0x0B) && - ((*(p + 2 + i) & 0xff) != 0x16)) - g_rate = 1; - } - - if (g_rate == 0) { - /* There is no OFDM rate included in SupportedRates IE of this probe request frame */ - /* The driver should response this probe request. */ - return ret; - } - } else { - /* rate_cnt > 4 means the SupportRates IE contains the OFDM rate because the count of CCK rates are 4. */ - /* We should proceed the following check for this probe request. */ - } - - /* Added comments by Albert 20100906 */ - /* There are several items we should check here. */ - /* 1. This probe request frame must contain the P2P IE. (Done) */ - /* 2. This probe request frame must contain the wildcard SSID. (Done) */ - /* 3. Wildcard BSSID. (Todo) */ - /* 4. Destination Address. (Done in mgt_dispatcher function) */ - /* 5. Requested Device Type in WSC IE. (Todo) */ - /* 6. Device ID attribute in P2P IE. (Todo) */ - - p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ssid_len, - len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_); - - ssid_len &= 0xff; /* Just last 1 byte is valid for ssid len of the probe request */ - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - p2pie = rtw_get_p2p_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_ , len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_ , NULL, &p2pielen); - if (p2pie) { - if ((p != NULL) && !memcmp((void *)(p+2), (void *)pwdinfo->p2p_wildcard_ssid , 7)) { - /* todo: */ - /* Check Requested Device Type attributes in WSC IE. */ - /* Check Device ID attribute in P2P IE */ - - ret = true; - } else if ((p != NULL) && (ssid_len == 0)) { - ret = true; - } - } else { - /* non -p2p device */ - } - } - - - return ret; -} - -u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint len, struct sta_info *psta) -{ - u8 status_code = P2P_STATUS_SUCCESS; - u8 *pbuf, *pattr_content = NULL; - u32 attr_contentlen = 0; - u16 cap_attr = 0; - unsigned short frame_type, ie_offset = 0; - u8 *ies; - u32 ies_len; - u8 *p2p_ie; - u32 p2p_ielen = 0; - __be16 be_tmp; - __le16 le_tmp; - - if (!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) - return P2P_STATUS_FAIL_REQUEST_UNABLE; - - frame_type = GetFrameSubType(pframe); - if (frame_type == WIFI_ASSOCREQ) - ie_offset = _ASOCREQ_IE_OFFSET_; - else /* WIFI_REASSOCREQ */ - ie_offset = _REASOCREQ_IE_OFFSET_; - - ies = pframe + WLAN_HDR_A3_LEN + ie_offset; - ies_len = len - WLAN_HDR_A3_LEN - ie_offset; - - p2p_ie = rtw_get_p2p_ie(ies , ies_len , NULL, &p2p_ielen); - - if (!p2p_ie) { - DBG_88E("[%s] P2P IE not Found!!\n", __func__); - status_code = P2P_STATUS_FAIL_INVALID_PARAM; - } else { - DBG_88E("[%s] P2P IE Found!!\n", __func__); - } - - while (p2p_ie) { - /* Check P2P Capability ATTR */ - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&le_tmp, (uint *)&attr_contentlen)) { - DBG_88E("[%s] Got P2P Capability Attr!!\n", __func__); - cap_attr = le16_to_cpu(le_tmp); - psta->dev_cap = cap_attr&0xff; - } - - /* Check Extended Listen Timing ATTR */ - - - /* Check P2P Device Info ATTR */ - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, NULL, (uint *)&attr_contentlen)) { - DBG_88E("[%s] Got P2P DEVICE INFO Attr!!\n", __func__); - pattr_content = kzalloc(attr_contentlen, GFP_KERNEL); - pbuf = pattr_content; - if (pattr_content) { - u8 num_of_secdev_type; - u16 dev_name_len; - - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO , pattr_content, (uint *)&attr_contentlen); - - memcpy(psta->dev_addr, pattr_content, ETH_ALEN);/* P2P Device Address */ - - pattr_content += ETH_ALEN; - - memcpy(&be_tmp, pattr_content, 2);/* Config Methods */ - psta->config_methods = be16_to_cpu(be_tmp); - - pattr_content += 2; - - memcpy(psta->primary_dev_type, pattr_content, 8); - - pattr_content += 8; - - num_of_secdev_type = *pattr_content; - pattr_content += 1; - - if (num_of_secdev_type == 0) { - psta->num_of_secdev_type = 0; - } else { - u32 len; - - psta->num_of_secdev_type = num_of_secdev_type; - - len = (sizeof(psta->secdev_types_list) < (num_of_secdev_type*8)) ? - (sizeof(psta->secdev_types_list)) : (num_of_secdev_type*8); - - memcpy(psta->secdev_types_list, pattr_content, len); - - pattr_content += (num_of_secdev_type*8); - } - - - psta->dev_name_len = 0; - if (WPS_ATTR_DEVICE_NAME == be16_to_cpu(*(__be16 *)pattr_content)) { - dev_name_len = be16_to_cpu(*(__be16 *)(pattr_content+2)); - - psta->dev_name_len = (sizeof(psta->dev_name) < dev_name_len) ? sizeof(psta->dev_name) : dev_name_len; - - memcpy(psta->dev_name, pattr_content+4, psta->dev_name_len); - } - kfree(pbuf); - } - } - - /* Get the next P2P IE */ - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen); - } - - return status_code; -} - -u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - u8 *frame_body; - u8 status, dialogToken; - struct sta_info *psta = NULL; - struct adapter *padapter = pwdinfo->padapter; - struct sta_priv *pstapriv = &padapter->stapriv; - u8 *p2p_ie; - u32 p2p_ielen = 0; - - frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); - - dialogToken = frame_body[7]; - status = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP; - - p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen); - if (p2p_ie) { - u8 groupid[38] = { 0x00 }; - u8 dev_addr[ETH_ALEN] = { 0x00 }; - u32 attr_contentlen = 0; - - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { - if (!memcmp(pwdinfo->device_addr, groupid, ETH_ALEN) && - !memcmp(pwdinfo->p2p_group_ssid, groupid+ETH_ALEN, pwdinfo->p2p_group_ssid_len)) { - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_ID, dev_addr, &attr_contentlen)) { - struct list_head *phead, *plist; - - spin_lock_bh(&pstapriv->asoc_list_lock); - phead = &pstapriv->asoc_list; - plist = phead->next; - - /* look up sta asoc_queue */ - while (phead != plist) { - psta = container_of(plist, struct sta_info, asoc_list); - - plist = plist->next; - - if (psta->is_p2p_device && (psta->dev_cap&P2P_DEVCAP_CLIENT_DISCOVERABILITY) && - !memcmp(psta->dev_addr, dev_addr, ETH_ALEN)) { - /* issue GO Discoverability Request */ - issue_group_disc_req(pwdinfo, psta->hwaddr); - status = P2P_STATUS_SUCCESS; - break; - } else { - status = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - } - } - spin_unlock_bh(&pstapriv->asoc_list_lock); - } else { - status = P2P_STATUS_FAIL_INVALID_PARAM; - } - } else { - status = P2P_STATUS_FAIL_INVALID_PARAM; - } - } - } - - - /* issue Device Discoverability Response */ - issue_p2p_devdisc_resp(pwdinfo, GetAddr2Ptr(pframe), status, dialogToken); - - return (status == P2P_STATUS_SUCCESS) ? true : false; -} - -u32 process_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - return true; -} - -u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - u8 *frame_body; - u8 *wpsie; - uint wps_ielen = 0, attr_contentlen = 0; - u16 uconfig_method = 0; - __be16 be_tmp; - - frame_body = (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); - - wpsie = rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen); - if (wpsie) { - if (rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_CONF_METHOD, (u8 *)&be_tmp, &attr_contentlen)) { - uconfig_method = be16_to_cpu(be_tmp); - switch (uconfig_method) { - case WPS_CM_DISPLYA: - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3); - break; - case WPS_CM_LABEL: - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "lab", 3); - break; - case WPS_CM_PUSH_BUTTON: - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3); - break; - case WPS_CM_KEYPAD: - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3); - break; - } - issue_p2p_provision_resp(pwdinfo, GetAddr2Ptr(pframe), frame_body, uconfig_method); - } - } - DBG_88E("[%s] config method = %s\n", __func__, pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req); - return true; -} - -u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe) -{ - return true; -} - -static u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list) -{ - u8 i = 0, j = 0; - u8 temp = 0; - u8 ch_no = 0; - ch_content += 3; - ch_cnt -= 3; - - while (ch_cnt > 0) { - ch_content += 1; - ch_cnt -= 1; - temp = *ch_content; - for (i = 0 ; i < temp ; i++, j++) - peer_ch_list[j] = *(ch_content + 1 + i); - ch_content += (temp + 1); - ch_cnt -= (temp + 1); - ch_no += temp ; - } - - return ch_no; -} - -static u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned) -{ - int i = 0, j = 0, temp = 0; - u8 ch_no = 0; - - for (i = 0; i < peer_ch_num; i++) { - for (j = temp; j < pmlmeext->max_chan_nums; j++) { - if (*(peer_ch_list + i) == pmlmeext->channel_set[j].ChannelNum) { - ch_list_inclusioned[ch_no++] = *(peer_ch_list + i); - temp = j; - break; - } - } - } - - return ch_no; -} - -u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - struct adapter *padapter = pwdinfo->padapter; - u8 result = P2P_STATUS_SUCCESS; - u32 p2p_ielen = 0, wps_ielen = 0; - u8 *ies; - u32 ies_len; - u8 *p2p_ie; - u8 *wpsie; - u16 wps_devicepassword_id = 0x0000; - uint wps_devicepassword_id_len = 0; - __be16 be_tmp; - - wpsie = rtw_get_wps_ie(pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen); - if (wpsie) { - /* Commented by Kurt 20120113 */ - /* If some device wants to do p2p handshake without sending prov_disc_req */ - /* We have to get peer_req_cm from here. */ - if (!memcmp(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3)) { - rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_DEVICE_PWID, (u8 *)&be_tmp, &wps_devicepassword_id_len); - wps_devicepassword_id = be16_to_cpu(be_tmp); - - if (wps_devicepassword_id == WPS_DPID_USER_SPEC) - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3); - else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC) - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3); - else - memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3); - } - } else { - DBG_88E("[%s] WPS IE not Found!!\n", __func__); - result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - return result; - } - - if (pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO) { - result = P2P_STATUS_FAIL_INFO_UNAVAILABLE; - rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INFOR_NOREADY); - return result; - } - - ies = pframe + _PUBLIC_ACTION_IE_OFFSET_; - ies_len = len - _PUBLIC_ACTION_IE_OFFSET_; - - p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen); - - if (!p2p_ie) { - DBG_88E("[%s] P2P IE not Found!!\n", __func__); - result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - } - - while (p2p_ie) { - u8 attr_content = 0x00; - u32 attr_contentlen = 0; - u8 ch_content[50] = { 0x00 }; - uint ch_cnt = 0; - u8 peer_ch_list[50] = { 0x00 }; - u8 peer_ch_num = 0; - u8 ch_list_inclusioned[50] = { 0x00 }; - u8 ch_num_inclusioned = 0; - - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING); - - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen)) { - DBG_88E("[%s] GO Intent = %d, tie = %d\n", __func__, attr_content >> 1, attr_content & 0x01); - pwdinfo->peer_intent = attr_content; /* include both intent and tie breaker values. */ - - if (pwdinfo->intent == (pwdinfo->peer_intent >> 1)) { - /* Try to match the tie breaker value */ - if (pwdinfo->intent == P2P_MAX_INTENT) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - result = P2P_STATUS_FAIL_BOTH_GOINTENT_15; - } else { - if (attr_content & 0x01) - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - else - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } - } else if (pwdinfo->intent > (pwdinfo->peer_intent >> 1)) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - } - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* Store the group id information. */ - memcpy(pwdinfo->groupid_info.go_device_addr, pwdinfo->device_addr, ETH_ALEN); - memcpy(pwdinfo->groupid_info.ssid, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen); - } - } - - - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { - if (attr_contentlen != ETH_ALEN) - memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); - } - - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt)) { - peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, ch_content, ch_cnt, peer_ch_list); - ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned); - - if (ch_num_inclusioned == 0) { - DBG_88E("[%s] No common channel in channel list!\n", __func__); - result = P2P_STATUS_FAIL_NO_COMMON_CH; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - break; - } - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - if (!rtw_p2p_is_channel_list_ok(pwdinfo->operating_channel, - ch_list_inclusioned, ch_num_inclusioned)) { - u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0; - attr_contentlen = 0; - - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) - peer_operating_ch = operatingch_info[4]; - - if (rtw_p2p_is_channel_list_ok(peer_operating_ch, - ch_list_inclusioned, ch_num_inclusioned)) { - /** - * Change our operating channel as peer's for compatibility. - */ - pwdinfo->operating_channel = peer_operating_ch; - DBG_88E("[%s] Change op ch to %02x as peer's\n", __func__, pwdinfo->operating_channel); - } else { - /* Take first channel of ch_list_inclusioned as operating channel */ - pwdinfo->operating_channel = ch_list_inclusioned[0]; - DBG_88E("[%s] Change op ch to %02x\n", __func__, pwdinfo->operating_channel); - } - } - } - } - - /* Get the next P2P IE */ - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen); - } - return result; -} - -u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - struct adapter *padapter = pwdinfo->padapter; - u8 result = P2P_STATUS_SUCCESS; - u32 p2p_ielen, wps_ielen; - u8 *ies; - u32 ies_len; - u8 *p2p_ie; - - ies = pframe + _PUBLIC_ACTION_IE_OFFSET_; - ies_len = len - _PUBLIC_ACTION_IE_OFFSET_; - - /* Be able to know which one is the P2P GO and which one is P2P client. */ - - if (rtw_get_wps_ie(ies, ies_len, NULL, &wps_ielen)) { - } else { - DBG_88E("[%s] WPS IE not Found!!\n", __func__); - result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - } - - p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen); - if (!p2p_ie) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM; - } else { - u8 attr_content = 0x00; - u32 attr_contentlen = 0; - u8 operatingch_info[5] = { 0x00 }; - u8 groupid[38]; - u8 peer_ch_list[50] = { 0x00 }; - u8 peer_ch_num = 0; - u8 ch_list_inclusioned[50] = { 0x00 }; - u8 ch_num_inclusioned = 0; - - while (p2p_ie) { /* Found the P2P IE. */ - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); - if (attr_contentlen == 1) { - DBG_88E("[%s] Status = %d\n", __func__, attr_content); - if (attr_content == P2P_STATUS_SUCCESS) { - /* Do nothing. */ - } else { - if (P2P_STATUS_FAIL_INFO_UNAVAILABLE == attr_content) { - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INFOR_NOREADY); - } else { - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - } - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - result = attr_content; - break; - } - } - - /* Try to get the peer's interface address */ - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { - if (attr_contentlen != ETH_ALEN) - memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); - } - - /* Try to get the peer's intent and tie breaker value. */ - attr_content = 0x00; - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen)) { - DBG_88E("[%s] GO Intent = %d, tie = %d\n", __func__, attr_content >> 1, attr_content & 0x01); - pwdinfo->peer_intent = attr_content; /* include both intent and tie breaker values. */ - - if (pwdinfo->intent == (pwdinfo->peer_intent >> 1)) { - /* Try to match the tie breaker value */ - if (pwdinfo->intent == P2P_MAX_INTENT) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - result = P2P_STATUS_FAIL_BOTH_GOINTENT_15; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - } else { - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - if (attr_content & 0x01) - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - else - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } - } else if (pwdinfo->intent > (pwdinfo->peer_intent >> 1)) { - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } else { - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - } - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - /* Store the group id information. */ - memcpy(pwdinfo->groupid_info.go_device_addr, pwdinfo->device_addr, ETH_ALEN); - memcpy(pwdinfo->groupid_info.ssid, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen); - } - } - - /* Try to get the operation channel information */ - - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { - DBG_88E("[%s] Peer's operating channel = %d\n", __func__, operatingch_info[4]); - pwdinfo->peer_operating_ch = operatingch_info[4]; - } - - /* Try to get the channel list information */ - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, pwdinfo->channel_list_attr, &pwdinfo->channel_list_attr_len)) { - DBG_88E("[%s] channel list attribute found, len = %d\n", __func__, pwdinfo->channel_list_attr_len); - - peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len, peer_ch_list); - ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned); - - if (ch_num_inclusioned == 0) { - DBG_88E("[%s] No common channel in channel list!\n", __func__); - result = P2P_STATUS_FAIL_NO_COMMON_CH; - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - break; - } - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) { - if (!rtw_p2p_is_channel_list_ok(pwdinfo->operating_channel, - ch_list_inclusioned, ch_num_inclusioned)) { - u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0; - attr_contentlen = 0; - - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) - peer_operating_ch = operatingch_info[4]; - - if (rtw_p2p_is_channel_list_ok(peer_operating_ch, - ch_list_inclusioned, ch_num_inclusioned)) { - /** - * Change our operating channel as peer's for compatibility. - */ - pwdinfo->operating_channel = peer_operating_ch; - DBG_88E("[%s] Change op ch to %02x as peer's\n", __func__, pwdinfo->operating_channel); - } else { - /* Take first channel of ch_list_inclusioned as operating channel */ - pwdinfo->operating_channel = ch_list_inclusioned[0]; - DBG_88E("[%s] Change op ch to %02x\n", __func__, pwdinfo->operating_channel); - } - } - } - } else { - DBG_88E("[%s] channel list attribute not found!\n", __func__); - } - - /* Try to get the group id information if peer is GO */ - attr_contentlen = 0; - memset(groupid, 0x00, 38); - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { - memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); - memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN); - } - - /* Get the next P2P IE */ - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen); - } - } - return result; -} - -u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - u8 *ies; - u32 ies_len; - u8 *p2p_ie; - u32 p2p_ielen = 0; - u8 result = P2P_STATUS_SUCCESS; - ies = pframe + _PUBLIC_ACTION_IE_OFFSET_; - ies_len = len - _PUBLIC_ACTION_IE_OFFSET_; - - p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen); - while (p2p_ie) { /* Found the P2P IE. */ - u8 attr_content = 0x00, operatingch_info[5] = { 0x00 }; - u8 groupid[38] = { 0x00 }; - u32 attr_contentlen = 0; - - pwdinfo->negotiation_dialog_token = 1; - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); - if (attr_contentlen == 1) { - DBG_88E("[%s] Status = %d\n", __func__, attr_content); - result = attr_content; - - if (attr_content == P2P_STATUS_SUCCESS) { - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - - /* Commented by Albert 20100911 */ - /* Todo: Need to handle the case which both Intents are the same. */ - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - if ((pwdinfo->intent) > (pwdinfo->peer_intent >> 1)) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } else if ((pwdinfo->intent) < (pwdinfo->peer_intent >> 1)) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - } else { - /* Have to compare the Tie Breaker */ - if (pwdinfo->peer_intent & 0x01) - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - else - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - } - } else { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL); - break; - } - } - - /* Try to get the group id information */ - attr_contentlen = 0; - memset(groupid, 0x00, 38); - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { - DBG_88E("[%s] Ssid = %s, ssidlen = %zu\n", __func__, &groupid[ETH_ALEN], strlen(&groupid[ETH_ALEN])); - memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); - memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN); - } - - attr_contentlen = 0; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { - DBG_88E("[%s] Peer's operating channel = %d\n", __func__, operatingch_info[4]); - pwdinfo->peer_operating_ch = operatingch_info[4]; - } - - /* Get the next P2P IE */ - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen); - } - return result; -} - -u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len) -{ - u8 *frame_body; - u8 dialogToken = 0; - u8 status = P2P_STATUS_SUCCESS; - - frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr)); - - dialogToken = frame_body[6]; - - /* todo: check NoA attribute */ - - issue_p2p_presence_resp(pwdinfo, GetAddr2Ptr(pframe), status, dialogToken); - - return true; -} - -static void find_phase_handler(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - struct ndis_802_11_ssid ssid; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - - memset((unsigned char *)&ssid, 0, sizeof(struct ndis_802_11_ssid)); - memcpy(ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN); - ssid.SsidLength = P2P_WILDCARD_SSID_LEN; - - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH); - - spin_lock_bh(&pmlmepriv->lock); - rtw_sitesurvey_cmd(padapter, &ssid, 1, NULL, 0); - spin_unlock_bh(&pmlmepriv->lock); -} - -void p2p_concurrent_handler(struct adapter *padapter); - -static void restore_p2p_state_handler(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL)) - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo)); - - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) { - /* In the P2P client mode, the driver should not switch back to its listen channel */ - /* because this P2P client should stay at the operating channel of P2P GO. */ - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - } -} - -static void pre_tx_invitereq_handler(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - u8 val8 = 1; - - set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8)); - issue_probereq_p2p(padapter, NULL); - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - -} - -static void pre_tx_provdisc_handler(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - u8 val8 = 1; - - set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8)); - issue_probereq_p2p(padapter, NULL); - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - -} - -static void pre_tx_negoreq_handler(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - u8 val8 = 1; - - set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); - rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8)); - issue_probereq_p2p(padapter, NULL); - _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); - -} - -void p2p_protocol_wk_hdl(struct adapter *padapter, int intCmdType) -{ - switch (intCmdType) { - case P2P_FIND_PHASE_WK: - find_phase_handler(padapter); - break; - case P2P_RESTORE_STATE_WK: - restore_p2p_state_handler(padapter); - break; - case P2P_PRE_TX_PROVDISC_PROCESS_WK: - pre_tx_provdisc_handler(padapter); - break; - case P2P_PRE_TX_INVITEREQ_PROCESS_WK: - pre_tx_invitereq_handler(padapter); - break; - case P2P_PRE_TX_NEGOREQ_PROCESS_WK: - pre_tx_negoreq_handler(padapter); - break; - } - -} - -void process_p2p_ps_ie(struct adapter *padapter, u8 *IEs, u32 IELength) -{ - u8 *ies; - u32 ies_len; - u8 *p2p_ie; - u32 p2p_ielen = 0; - u8 noa_attr[MAX_P2P_IE_LEN] = { 0x00 };/* NoA length should be n*(13) + 2 */ - u32 attr_contentlen = 0; - - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - u8 find_p2p = false, find_p2p_ps = false; - u8 noa_offset, noa_num, noa_index; - - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - if (IELength <= _BEACON_IE_OFFSET_) - return; - - ies = IEs + _BEACON_IE_OFFSET_; - ies_len = IELength - _BEACON_IE_OFFSET_; - - p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen); - - while (p2p_ie) { - find_p2p = true; - /* Get Notice of Absence IE. */ - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen)) { - find_p2p_ps = true; - noa_index = noa_attr[0]; - - if ((pwdinfo->p2p_ps_mode == P2P_PS_NONE) || - (noa_index != pwdinfo->noa_index)) { /* if index change, driver should reconfigure related setting. */ - pwdinfo->noa_index = noa_index; - pwdinfo->opp_ps = noa_attr[1] >> 7; - pwdinfo->ctwindow = noa_attr[1] & 0x7F; - - noa_offset = 2; - noa_num = 0; - /* NoA length should be n*(13) + 2 */ - if (attr_contentlen > 2) { - while (noa_offset < attr_contentlen) { - /* memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1); */ - pwdinfo->noa_count[noa_num] = noa_attr[noa_offset]; - noa_offset += 1; - - memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4); - noa_offset += 4; - - memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4); - noa_offset += 4; - - memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4); - noa_offset += 4; - - noa_num++; - } - } - pwdinfo->noa_num = noa_num; - - if (pwdinfo->opp_ps == 1) { - pwdinfo->p2p_ps_mode = P2P_PS_CTWINDOW; - /* driver should wait LPS for entering CTWindow */ - if (padapter->pwrctrlpriv.bFwCurrentInPSMode) - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1); - } else if (pwdinfo->noa_num > 0) { - pwdinfo->p2p_ps_mode = P2P_PS_NOA; - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1); - } else if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) { - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1); - } - } - - break; /* find target, just break. */ - } - - /* Get the next P2P IE */ - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen); - } - - if (find_p2p) { - if ((pwdinfo->p2p_ps_mode > P2P_PS_NONE) && !find_p2p_ps) - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1); - } - -} - -void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state) -{ - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - - /* Pre action for p2p state */ - switch (p2p_ps_state) { - case P2P_PS_DISABLE: - pwdinfo->p2p_ps_state = p2p_ps_state; - - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state)); - - pwdinfo->noa_index = 0; - pwdinfo->ctwindow = 0; - pwdinfo->opp_ps = 0; - pwdinfo->noa_num = 0; - pwdinfo->p2p_ps_mode = P2P_PS_NONE; - if (padapter->pwrctrlpriv.bFwCurrentInPSMode) { - if (pwrpriv->smart_ps == 0) { - pwrpriv->smart_ps = 2; - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode))); - } - } - break; - case P2P_PS_ENABLE: - if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) { - pwdinfo->p2p_ps_state = p2p_ps_state; - - if (pwdinfo->ctwindow > 0) { - if (pwrpriv->smart_ps != 0) { - pwrpriv->smart_ps = 0; - DBG_88E("%s(): Enter CTW, change SmartPS\n", __func__); - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode))); - } - } - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state)); - } - break; - case P2P_PS_SCAN: - case P2P_PS_SCAN_DONE: - case P2P_PS_ALLSTASLEEP: - if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) { - pwdinfo->p2p_ps_state = p2p_ps_state; - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state)); - } - break; - default: - break; - } - -} - -u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue) -{ - struct cmd_obj *ph2c; - struct drvextra_cmd_parm *pdrvextra_cmd_parm; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return res; - - if (enqueue) { - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); - if (pdrvextra_cmd_parm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID; - pdrvextra_cmd_parm->type_size = p2p_ps_state; - pdrvextra_cmd_parm->pbuf = NULL; - - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra)); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - } else { - p2p_ps_wk_hdl(padapter, p2p_ps_state); - } - -exit: - - - return res; -} - -static void reset_ch_sitesurvey_timer_process (void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - - DBG_88E("[%s] In\n", __func__); - /* Reset the operation channel information */ - pwdinfo->rx_invitereq_info.operation_ch[0] = 0; - pwdinfo->rx_invitereq_info.scan_op_ch_only = 0; -} - -static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - - DBG_88E("[%s] In\n", __func__); - /* Reset the operation channel information */ - pwdinfo->p2p_info.operation_ch[0] = 0; - pwdinfo->p2p_info.scan_op_ch_only = 0; -} - -static void restore_p2p_state_timer_process (void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - - p2p_protocol_wk_cmd(adapter, P2P_RESTORE_STATE_WK); -} - -static void pre_tx_scan_timer_process(void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - - spin_lock_bh(&pmlmepriv->lock); - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ)) { - if (pwdinfo->tx_prov_disc_info.benable) { /* the provision discovery request frame is trigger to send or not */ - p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_PROVDISC_PROCESS_WK); - /* issue_probereq_p2p(adapter, NULL); */ - /* _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); */ - } - } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) { - if (pwdinfo->nego_req_info.benable) - p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_NEGOREQ_PROCESS_WK); - } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ)) { - if (pwdinfo->invitereq_info.benable) - p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_INVITEREQ_PROCESS_WK); - } else { - DBG_88E("[%s] p2p_state is %d, ignore!!\n", __func__, rtw_p2p_state(pwdinfo)); - } - - spin_unlock_bh(&pmlmepriv->lock); -} - -static void find_phase_timer_process(void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - struct wifidirect_info *pwdinfo = &adapter->wdinfo; - - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; - - adapter->wdinfo.find_phase_state_exchange_cnt++; - - p2p_protocol_wk_cmd(adapter, P2P_FIND_PHASE_WK); -} - -void reset_global_wifidirect_info(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo; - - pwdinfo = &padapter->wdinfo; - pwdinfo->persistent_supported = 0; - pwdinfo->session_available = true; - pwdinfo->wfd_tdls_enable = 0; - pwdinfo->wfd_tdls_weaksec = 0; -} - -void rtw_init_wifidirect_timers(struct adapter *padapter) -{ - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - - _init_timer(&pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter); - _init_timer(&pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter); - _init_timer(&pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter); - _init_timer(&pwdinfo->reset_ch_sitesurvey, padapter->pnetdev, reset_ch_sitesurvey_timer_process, padapter); - _init_timer(&pwdinfo->reset_ch_sitesurvey2, padapter->pnetdev, reset_ch_sitesurvey_timer_process2, padapter); -} - -void rtw_init_wifidirect_addrs(struct adapter *padapter, u8 *dev_addr, u8 *iface_addr) -{ -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - - /*init device&interface address */ - if (dev_addr) - memcpy(pwdinfo->device_addr, dev_addr, ETH_ALEN); - if (iface_addr) - memcpy(pwdinfo->interface_addr, iface_addr, ETH_ALEN); -#endif -} - -void init_wifidirect_info(struct adapter *padapter, enum P2P_ROLE role) -{ - struct wifidirect_info *pwdinfo; - - pwdinfo = &padapter->wdinfo; - pwdinfo->padapter = padapter; - - /* 1, 6, 11 are the social channel defined in the WiFi Direct specification. */ - pwdinfo->social_chan[0] = 1; - pwdinfo->social_chan[1] = 6; - pwdinfo->social_chan[2] = 11; - pwdinfo->social_chan[3] = 0; /* channel 0 for scanning ending in site survey function. */ - - /* Use the channel 11 as the listen channel */ - pwdinfo->listen_channel = 11; - - if (role == P2P_ROLE_DEVICE) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE); - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN); - pwdinfo->intent = 1; - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN); - } else if (role == P2P_ROLE_CLIENT) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT); - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - pwdinfo->intent = 1; - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - } else if (role == P2P_ROLE_GO) { - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO); - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK); - pwdinfo->intent = 15; - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK); - } - -/* Use the OFDM rate in the P2P probe response frame. (6(B), 9(B), 12, 18, 24, 36, 48, 54) */ - pwdinfo->support_rate[0] = 0x8c; /* 6(B) */ - pwdinfo->support_rate[1] = 0x92; /* 9(B) */ - pwdinfo->support_rate[2] = 0x18; /* 12 */ - pwdinfo->support_rate[3] = 0x24; /* 18 */ - pwdinfo->support_rate[4] = 0x30; /* 24 */ - pwdinfo->support_rate[5] = 0x48; /* 36 */ - pwdinfo->support_rate[6] = 0x60; /* 48 */ - pwdinfo->support_rate[7] = 0x6c; /* 54 */ - - memcpy(pwdinfo->p2p_wildcard_ssid, "DIRECT-", 7); - - memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN); - pwdinfo->device_name_len = 0; - - memset(&pwdinfo->invitereq_info, 0x00, sizeof(struct tx_invite_req_info)); - pwdinfo->invitereq_info.token = 3; /* Token used for P2P invitation request frame. */ - - memset(&pwdinfo->inviteresp_info, 0x00, sizeof(struct tx_invite_resp_info)); - pwdinfo->inviteresp_info.token = 0; - - pwdinfo->profileindex = 0; - memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM); - - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE); - - pwdinfo->listen_dwell = (u8) ((jiffies % 3) + 1); - - memset(&pwdinfo->tx_prov_disc_info, 0x00, sizeof(struct tx_provdisc_req_info)); - pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_NONE; - - memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info)); - - pwdinfo->device_password_id_for_nego = WPS_DPID_PBC; - pwdinfo->negotiation_dialog_token = 1; - - memset(pwdinfo->nego_ssid, 0x00, WLAN_SSID_MAXLEN); - pwdinfo->nego_ssidlen = 0; - - pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO; - pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC | WPS_CONFIG_METHOD_KEYPAD; - pwdinfo->channel_list_attr_len = 0; - memset(pwdinfo->channel_list_attr, 0x00, 100); - - memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4); - memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3); - memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info)); - pwdinfo->wfd_tdls_enable = 0; - memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); - memset(pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN); - - pwdinfo->rx_invitereq_info.operation_ch[0] = 0; - pwdinfo->rx_invitereq_info.operation_ch[1] = 0; /* Used to indicate the scan end in site survey function */ - pwdinfo->rx_invitereq_info.scan_op_ch_only = 0; - pwdinfo->p2p_info.operation_ch[0] = 0; - pwdinfo->p2p_info.operation_ch[1] = 0; /* Used to indicate the scan end in site survey function */ - pwdinfo->p2p_info.scan_op_ch_only = 0; -} - -int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role) -{ - int ret = _SUCCESS; - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); - - if (role == P2P_ROLE_DEVICE || role == P2P_ROLE_CLIENT || role == P2P_ROLE_GO) { - /* leave IPS/Autosuspend */ - if (_FAIL == rtw_pwr_wakeup(padapter)) { - ret = _FAIL; - goto exit; - } - - /* Added by Albert 2011/03/22 */ - /* In the P2P mode, the driver should not support the b mode. */ - /* So, the Tx packet shouldn't use the CCK rate */ - update_tx_basic_rate(padapter, WIRELESS_11AGN); - - /* Enable P2P function */ - init_wifidirect_info(padapter, role); - - rtw_hal_set_odm_var(padapter, HAL_ODM_P2P_STATE, NULL, true); - } else if (role == P2P_ROLE_DISABLE) { - if (_FAIL == rtw_pwr_wakeup(padapter)) { - ret = _FAIL; - goto exit; - } - - /* Disable P2P function */ - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - del_timer_sync(&pwdinfo->find_phase_timer); - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - del_timer_sync(&pwdinfo->pre_tx_scan_timer); - del_timer_sync(&pwdinfo->reset_ch_sitesurvey); - del_timer_sync(&pwdinfo->reset_ch_sitesurvey2); - reset_ch_sitesurvey_timer_process(padapter); - reset_ch_sitesurvey_timer_process2(padapter); - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE); - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE); - memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info)); - } - - rtw_hal_set_odm_var(padapter, HAL_ODM_P2P_STATE, NULL, false); - - /* Restore to initial setting. */ - update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode); - } - -exit: - return ret; -} - -#else -u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue) -{ - return _FAIL; -} - -void process_p2p_ps_ie(struct adapter *padapter, u8 *IEs, u32 IELength) -{ -} - -#endif /* CONFIG_88EU_P2P */ diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 5605d95d99fa..439bc8f70d03 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -218,10 +218,6 @@ int ips_leave(struct adapter *padapter) static bool rtw_pwr_unassociated_idle(struct adapter *adapter) { struct mlme_priv *pmlmepriv = &(adapter->mlmepriv); -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(adapter->wdinfo); -#endif - bool ret = false; if (time_after_eq(adapter->pwrctrlpriv.ips_deny_time, jiffies)) @@ -230,12 +226,7 @@ static bool rtw_pwr_unassociated_idle(struct adapter *adapter) if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR) || check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS) || check_fwstate(pmlmepriv, WIFI_AP_STATE) || - check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE) || -#if defined(CONFIG_88EU_P2P) - !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) -#else - 0) -#endif + check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)) goto exit; ret = true; @@ -387,9 +378,6 @@ static u8 PS_RDY_CHECK(struct adapter *padapter) void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode) { struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_, ("%s: PowerMode=%d Smart_PS=%d\n", @@ -411,16 +399,6 @@ void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_a /* if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) */ if (ps_mode == PS_MODE_ACTIVE) { -#ifdef CONFIG_88EU_P2P - if (pwdinfo->opp_ps == 0) { - DBG_88E("rtw_set_ps_mode: Leave 802.11 power save\n"); - pwrpriv->pwr_mode = ps_mode; - rtw_set_rpwm(padapter, PS_STATE_S4); - rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode)); - pwrpriv->bFwCurrentInPSMode = false; - } - } else { -#endif /* CONFIG_88EU_P2P */ if (PS_RDY_CHECK(padapter)) { DBG_88E("%s: Enter 802.11 power save\n", __func__); pwrpriv->bFwCurrentInPSMode = true; @@ -428,13 +406,6 @@ void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_a pwrpriv->smart_ps = smart_ps; pwrpriv->bcn_ant_mode = bcn_ant_mode; rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode)); - -#ifdef CONFIG_88EU_P2P - /* Set CTWindow after LPS */ - if (pwdinfo->opp_ps == 1) - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 0); -#endif /* CONFIG_88EU_P2P */ - rtw_set_rpwm(padapter, PS_STATE_S2); } } @@ -531,11 +502,8 @@ void LeaveAllPowerSaveMode(struct adapter *Adapter) struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv); u8 enqueue = 0; - if (check_fwstate(pmlmepriv, _FW_LINKED)) { /* connect */ - p2p_ps_wk_cmd(Adapter, P2P_PS_DISABLE, enqueue); - + if (check_fwstate(pmlmepriv, _FW_LINKED)) rtw_lps_ctrl_wk_cmd(Adapter, LPS_CTRL_LEAVE, enqueue); - } } void rtw_init_pwrctrl_priv(struct adapter *padapter) diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c index 2e709e678cb9..83e706fa5b1d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c @@ -1357,15 +1357,6 @@ void set_sta_rate(struct adapter *padapter, struct sta_info *psta) void update_tx_basic_rate(struct adapter *padapter, u8 wirelessmode) { unsigned char supported_rates[NDIS_802_11_LENGTH_RATES_EX]; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - - /* Added by Albert 2011/03/22 */ - /* In the P2P mode, the driver should not support the b mode. */ - /* So, the Tx packet shouldn't use the CCK rate */ - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) - return; -#endif /* CONFIG_88EU_P2P */ memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX); if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 99ad9c706f7d..6ad3bd4db3f3 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -687,75 +687,3 @@ void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus) usb_write8(adapt, REG_CR+1, haldata->RegCR_1); } } - -void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state) -{ -#ifdef CONFIG_88EU_P2P - struct hal_data_8188e *haldata = GET_HAL_DATA(adapt); - struct wifidirect_info *pwdinfo = &(adapt->wdinfo); - struct P2P_PS_Offload_t *p2p_ps_offload = &haldata->p2p_ps_offload; - u8 i; - - - switch (p2p_ps_state) { - case P2P_PS_DISABLE: - DBG_88E("P2P_PS_DISABLE\n"); - memset(p2p_ps_offload, 0, 1); - break; - case P2P_PS_ENABLE: - DBG_88E("P2P_PS_ENABLE\n"); - /* update CTWindow value. */ - if (pwdinfo->ctwindow > 0) { - p2p_ps_offload->CTWindow_En = 1; - usb_write8(adapt, REG_P2P_CTWIN, pwdinfo->ctwindow); - } - - /* hw only support 2 set of NoA */ - for (i = 0; i < pwdinfo->noa_num; i++) { - /* To control the register setting for which NOA */ - usb_write8(adapt, REG_NOA_DESC_SEL, (i << 4)); - if (i == 0) - p2p_ps_offload->NoA0_En = 1; - else - p2p_ps_offload->NoA1_En = 1; - - /* config P2P NoA Descriptor Register */ - usb_write32(adapt, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]); - usb_write32(adapt, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]); - usb_write32(adapt, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]); - usb_write8(adapt, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]); - } - - if ((pwdinfo->opp_ps == 1) || (pwdinfo->noa_num > 0)) { - /* rst p2p circuit */ - usb_write8(adapt, REG_DUAL_TSF_RST, BIT(4)); - - p2p_ps_offload->Offload_En = 1; - - if (pwdinfo->role == P2P_ROLE_GO) { - p2p_ps_offload->role = 1; - p2p_ps_offload->AllStaSleep = 0; - } else { - p2p_ps_offload->role = 0; - } - - p2p_ps_offload->discovery = 0; - } - break; - case P2P_PS_SCAN: - DBG_88E("P2P_PS_SCAN\n"); - p2p_ps_offload->discovery = 1; - break; - case P2P_PS_SCAN_DONE: - DBG_88E("P2P_PS_SCAN_DONE\n"); - p2p_ps_offload->discovery = 0; - pwdinfo->p2p_ps_state = P2P_PS_ENABLE; - break; - default: - break; - } - - FillH2CCmd_88E(adapt, H2C_PS_P2P_OFFLOAD, 1, (u8 *)p2p_ps_offload); -#endif - -} diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index c98928b33d27..e18393317bdc 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -1735,14 +1735,6 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val) rtl8188e_set_FwJoinBssReport_cmd(Adapter, mstatus); } break; -#ifdef CONFIG_88EU_P2P - case HW_VAR_H2C_FW_P2P_PS_OFFLOAD: - { - u8 p2p_ps_state = (*(u8 *)val); - rtl8188e_set_p2p_ps_offload_cmd(Adapter, p2p_ps_state); - } - break; -#endif case HW_VAR_INITIAL_GAIN: { struct rtw_dig *pDigTable = &podmpriv->DM_DigTable; diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index 00a207ca391f..fdf2c797c1ae 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -48,7 +48,6 @@ #include #include #include -#include #include #define SPEC_DEV_ID_NONE BIT(0) @@ -241,11 +240,6 @@ struct adapter { /* The driver will show up the desired channel number * when this flag is 1. */ u8 bNotifyChannelChange; -#ifdef CONFIG_88EU_P2P - /* The driver will show the current P2P status when the - * upper application reads it. */ - u8 bShowGetP2PState; -#endif struct mutex hw_init_mutex; diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h b/drivers/staging/rtl8188eu/include/ieee80211.h index c4d38d14abf1..3299571e339f 100644 --- a/drivers/staging/rtl8188eu/include/ieee80211.h +++ b/drivers/staging/rtl8188eu/include/ieee80211.h @@ -1233,19 +1233,6 @@ u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, void dump_ies(u8 *buf, u32 buf_len); void dump_wps_ie(u8 *ie, u32 ie_len); -#ifdef CONFIG_88EU_P2P -void dump_p2p_ie(u8 *ie, u32 ie_len); -u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen); -u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id, - u8 *buf_attr, u32 *len_attr); -u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id, - u8 *buf_content, uint *len_content); -u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, - u8 *pdata_attr); -void rtw_wlan_bssid_ex_remove_p2p_attr(struct wlan_bssid_ex *bss_ex, - u8 attr_id); -#endif - uint rtw_get_rateset_len(u8 *rateset); struct registry_priv; diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h b/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h index 460116949a9b..0e78e2a357bd 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_cmd.h @@ -112,10 +112,6 @@ u8 rtl8188e_set_raid_cmd(struct adapter *padapter, u32 mask); void rtl8188e_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level); -#ifdef CONFIG_88EU_P2P -void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state); -#endif /* CONFIG_88EU_P2P */ - void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt); #endif/* __RTL8188E_CMD_H__ */ diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index ed3204fa993c..a0a3ca792881 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -386,10 +386,6 @@ struct hal_data_8188e { u16 EfuseUsedBytes; -#ifdef CONFIG_88EU_P2P - struct P2P_PS_Offload_t p2p_ps_offload; -#endif - /* Auto FSM to Turn On, include clock, isolation, power control * for MAC only */ u8 bMacPwrCtrlOn; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index c478bdebcbd9..d7fbff20fea4 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -107,9 +107,6 @@ u32 rtw_init_evt_priv(struct evt_priv *pevtpriv); void rtw_free_evt_priv(struct evt_priv *pevtpriv); void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); void rtw_evt_notify_isr(struct evt_priv *pevtpriv); -#ifdef CONFIG_88EU_P2P -u8 p2p_protocol_wk_cmd(struct adapter *padapter, int intCmdType); -#endif /* CONFIG_88EU_P2P */ enum rtw_drvextra_cmd_id { NONE_WK_CID, diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 09e2a3980ea7..17c680fa9002 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -565,18 +565,6 @@ s32 dump_mgntframe_and_wait(struct adapter *padapter, s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmgntframe); -#ifdef CONFIG_88EU_P2P -void issue_probersp_p2p(struct adapter *padapter, unsigned char *da); -void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, - u8 ussidlen, u8 *pdev_raddr); -void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr); -void issue_probereq_p2p(struct adapter *padapter, u8 *da); -int issue_probereq_p2p_ex(struct adapter *adapter, u8 *da, int try_cnt, - int wait_ms); -void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, - u8 dialogToken, u8 success); -void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr); -#endif /* CONFIG_88EU_P2P */ void issue_beacon(struct adapter *padapter, int timeout_ms); void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq); diff --git a/drivers/staging/rtl8188eu/include/rtw_p2p.h b/drivers/staging/rtl8188eu/include/rtw_p2p.h deleted file mode 100644 index a3e3adc92b99..000000000000 --- a/drivers/staging/rtl8188eu/include/rtw_p2p.h +++ /dev/null @@ -1,135 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_P2P_H_ -#define __RTW_P2P_H_ - -#include - -u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf); -u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf); -u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, - u8 *pbuf, u8 *pssid, u8 ussidlen, - u8 *pdev_raddr); -u32 build_assoc_resp_p2p_ie(struct wifidirect_info *pwdinfo, - u8 *pbuf, u8 status_code); -u32 build_deauth_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf); -u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len, struct sta_info *psta); -u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u32 process_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe); -u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, - u8 *pframe, uint len); -u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, - uint len); -void p2p_protocol_wk_hdl(struct adapter *padapter, int intcmdtype); -void process_p2p_ps_ie(struct adapter *padapter, u8 *ies, u32 ielength); -void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state); -u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue); -void reset_global_wifidirect_info(struct adapter *padapter); -int rtw_init_wifi_display_info(struct adapter *padapter); -void rtw_init_wifidirect_timers(struct adapter *padapter); -void rtw_init_wifidirect_addrs(struct adapter *padapter, u8 *dev_addr, - u8 *iface_addr); -void init_wifidirect_info(struct adapter *padapter, enum P2P_ROLE role); -int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role); - -static inline void _rtw_p2p_set_state(struct wifidirect_info *wdinfo, - enum P2P_STATE state) -{ - if (wdinfo->p2p_state != state) - wdinfo->p2p_state = state; -} - -static inline void _rtw_p2p_set_pre_state(struct wifidirect_info *wdinfo, - enum P2P_STATE state) -{ - if (wdinfo->pre_p2p_state != state) - wdinfo->pre_p2p_state = state; -} - -static inline void _rtw_p2p_set_role(struct wifidirect_info *wdinfo, - enum P2P_ROLE role) -{ - if (wdinfo->role != role) - wdinfo->role = role; -} - -static inline int _rtw_p2p_state(struct wifidirect_info *wdinfo) -{ - return wdinfo->p2p_state; -} - -static inline int _rtw_p2p_pre_state(struct wifidirect_info *wdinfo) -{ - return wdinfo->pre_p2p_state; -} - -static inline int _rtw_p2p_role(struct wifidirect_info *wdinfo) -{ - return wdinfo->role; -} - -static inline bool _rtw_p2p_chk_state(struct wifidirect_info *wdinfo, - enum P2P_STATE state) -{ - return wdinfo->p2p_state == state; -} - -static inline bool _rtw_p2p_chk_role(struct wifidirect_info *wdinfo, - enum P2P_ROLE role) -{ - return wdinfo->role == role; -} - -#define rtw_p2p_set_state(wdinfo, state) _rtw_p2p_set_state(wdinfo, state) -#define rtw_p2p_set_pre_state(wdinfo, state) \ - _rtw_p2p_set_pre_state(wdinfo, state) -#define rtw_p2p_set_role(wdinfo, role) _rtw_p2p_set_role(wdinfo, role) - -#define rtw_p2p_state(wdinfo) _rtw_p2p_state(wdinfo) -#define rtw_p2p_pre_state(wdinfo) _rtw_p2p_pre_state(wdinfo) -#define rtw_p2p_role(wdinfo) _rtw_p2p_role(wdinfo) -#define rtw_p2p_chk_state(wdinfo, state) _rtw_p2p_chk_state(wdinfo, state) -#define rtw_p2p_chk_role(wdinfo, role) _rtw_p2p_chk_role(wdinfo, role) - -#define rtw_p2p_findphase_ex_set(wdinfo, value) \ - ((wdinfo)->find_phase_state_exchange_cnt = (value)) - -/* is this find phase exchange for social channel scan? */ -#define rtw_p2p_findphase_ex_is_social(wdinfo) \ -((wdinfo)->find_phase_state_exchange_cnt >= P2P_FINDPHASE_EX_SOCIAL_FIRST) - -/* should we need find phase exchange anymore? */ -#define rtw_p2p_findphase_ex_is_needed(wdinfo) \ - ((wdinfo)->find_phase_state_exchange_cnt < P2P_FINDPHASE_EX_MAX && \ - (wdinfo)->find_phase_state_exchange_cnt != P2P_FINDPHASE_EX_NONE) - -#endif diff --git a/drivers/staging/rtl8188eu/include/sta_info.h b/drivers/staging/rtl8188eu/include/sta_info.h index 3e909db1d41a..9612490539b3 100644 --- a/drivers/staging/rtl8188eu/include/sta_info.h +++ b/drivers/staging/rtl8188eu/include/sta_info.h @@ -182,21 +182,6 @@ struct sta_info { unsigned int sleepq_ac_len; #endif /* CONFIG_88EU_AP_MODE */ -#ifdef CONFIG_88EU_P2P - /* p2p priv data */ - u8 is_p2p_device; - u8 p2p_status_code; - - /* p2p client info */ - u8 dev_addr[ETH_ALEN]; - u8 dev_cap; - u16 config_methods; - u8 primary_dev_type[8]; - u8 num_of_secdev_type; - u8 secdev_types_list[32];/* 32/8 == 4; */ - u16 dev_name_len; - u8 dev_name[32]; -#endif /* CONFIG_88EU_P2P */ u8 under_exist_checking; u8 keep_alive_trycnt; diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 5e06e040a9b6..1f46ade993bf 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -114,35 +114,6 @@ static char *translate_scan(struct adapter *padapter, u8 bw_40MHz = 0, short_GI = 0; u16 mcs_rate = 0; u8 ss, sq; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - u32 blnGotP2PIE = false; - - /* User is doing the P2P device discovery */ - /* The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE. */ - /* If not, the driver should ignore this AP and go to the next AP. */ - - /* Verifying the SSID */ - if (!memcmp(pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN)) { - u32 p2pielen = 0; - - if (pnetwork->network.Reserved[0] == 2) {/* Probe Request */ - /* Verifying the P2P IE */ - if (rtw_get_p2p_ie(pnetwork->network.IEs, pnetwork->network.IELength, NULL, &p2pielen)) - blnGotP2PIE = true; - } else {/* Beacon or Probe Respones */ - /* Verifying the P2P IE */ - if (rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) - blnGotP2PIE = true; - } - } - - if (!blnGotP2PIE) - return start; - } -#endif /* CONFIG_88EU_P2P */ /* AP MAC address */ iwe.cmd = SIOCGIWAP; @@ -385,9 +356,6 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct security_priv *psecuritypriv = &padapter->securitypriv; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; -#endif /* CONFIG_88EU_P2P */ param->u.crypt.err = 0; param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; @@ -505,10 +473,6 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx; rtw_set_key(padapter, &padapter->securitypriv, param->u.crypt.idx, 1); -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING)) - rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE); -#endif /* CONFIG_88EU_P2P */ } } pbcmc_sta = rtw_get_bcmc_stainfo(padapter); @@ -537,9 +501,6 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie u8 *buf = NULL; int group_cipher = 0, pairwise_cipher = 0; int ret = 0; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; -#endif /* CONFIG_88EU_P2P */ if ((ielen > MAX_WPA_IE_LEN) || (pie == NULL)) { _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS); @@ -645,10 +606,6 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len); set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS); -#ifdef CONFIG_88EU_P2P - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK)) - rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING); -#endif /* CONFIG_88EU_P2P */ cnt += buf[cnt+1]+2; break; } else { @@ -1126,9 +1083,6 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a, struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT]; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &(padapter->wdinfo); -#endif /* CONFIG_88EU_P2P */ RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_wx_set_scan\n")); if (padapter->registrypriv.mp_mode == 1) { @@ -1175,15 +1129,6 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a, /* the pmlmepriv->scan_interval is always equal to 3. */ /* So, the wpa_supplicant won't find out the WPS SoftAP. */ -#ifdef CONFIG_88EU_P2P - if (pwdinfo->p2p_state != P2P_STATE_NONE) { - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo)); - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH); - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_FULL); - rtw_free_network_queue(padapter, true); - } -#endif /* CONFIG_88EU_P2P */ - memset(ssid, 0, sizeof(struct ndis_802_11_ssid)*RTW_SSID_SCAN_AMOUNT); if (wrqu->data.length == sizeof(struct iw_scan_req)) { @@ -1278,9 +1223,6 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a, u32 cnt = 0; u32 wait_for_surveydone; int wait_status; -#ifdef CONFIG_88EU_P2P - struct wifidirect_info *pwdinfo = &padapter->wdinfo; -#endif /* CONFIG_88EU_P2P */ RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_wx_get_scan\n")); RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, (" Start of Query SIOCGIWSCAN .\n")); @@ -1289,19 +1231,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a, goto exit; } -#ifdef CONFIG_88EU_P2P - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - /* P2P is enabled */ - wait_for_surveydone = 200; - } else { - /* P2P is disabled */ - wait_for_surveydone = 100; - } -#else - { - wait_for_surveydone = 100; - } -#endif /* CONFIG_88EU_P2P */ + wait_for_surveydone = 100; wait_status = _FW_UNDER_SURVEY | _FW_UNDER_LINKING; diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index c2f55e2c731c..aac9473a8548 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -804,9 +804,6 @@ static u8 rtw_init_default_value(struct adapter *padapter) padapter->bWritePortCancel = false; padapter->bRxRSSIDisplay = 0; padapter->bNotifyChannelChange = 0; -#ifdef CONFIG_88EU_P2P - padapter->bShowGetP2PState = 1; -#endif return ret; } @@ -867,12 +864,6 @@ u8 rtw_init_drv_sw(struct adapter *padapter) goto exit; } -#ifdef CONFIG_88EU_P2P - rtw_init_wifidirect_timers(padapter); - init_wifidirect_info(padapter, P2P_ROLE_DISABLE); - reset_global_wifidirect_info(padapter); -#endif /* CONFIG_88EU_P2P */ - if (init_mlme_ext_priv(padapter) == _FAIL) { RT_TRACE(_module_os_intfs_c_, _drv_err_, ("\n Can't init mlme_ext_priv\n")); ret8 = _FAIL; @@ -945,21 +936,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter) { RT_TRACE(_module_os_intfs_c_, _drv_info_, ("==>rtw_free_drv_sw")); - /* we can call rtw_p2p_enable here, but: */ - /* 1. rtw_p2p_enable may have IO operation */ - /* 2. rtw_p2p_enable is bundled with wext interface */ - #ifdef CONFIG_88EU_P2P - { - struct wifidirect_info *pwdinfo = &padapter->wdinfo; - if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) { - del_timer_sync(&pwdinfo->find_phase_timer); - del_timer_sync(&pwdinfo->restore_p2p_state_timer); - del_timer_sync(&pwdinfo->pre_tx_scan_timer); - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE); - } - } - #endif - free_mlme_ext_priv(&padapter->mlmeextpriv); rtw_free_cmd_priv(&padapter->cmdpriv); @@ -1190,10 +1166,6 @@ int netdev_close(struct net_device *pnetdev) rtw_led_control(padapter, LED_CTL_POWER_OFF); } -#ifdef CONFIG_88EU_P2P - rtw_p2p_enable(padapter, P2P_ROLE_DISABLE); -#endif /* CONFIG_88EU_P2P */ - kfree(dvobj->firmware.szFwBuffer); dvobj->firmware.szFwBuffer = NULL; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index f1630c22e888..b8676ac77b0c 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -428,10 +428,6 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, /* alloc dev name after read efuse. */ rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname); rtw_macaddr_cfg(padapter->eeprompriv.mac_addr); -#ifdef CONFIG_88EU_P2P - rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, - padapter->eeprompriv.mac_addr); -#endif memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN); DBG_88E("MAC Address from pnetdev->dev_addr = %pM\n", pnetdev->dev_addr); -- cgit From 20334b5e72f77cb037a81a6b64ec202d7899fc20 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:28 +0530 Subject: staging: rtl8188eu: Remove struct evt_priv and its uses c2h_wk (work_struct) is naver scheduled to handle events, so no use of keeping event data. And also function rtw_hal_c2h_handler() responsible for handling c2h events, is a dummy function. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 86 --------------------------- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 4 -- drivers/staging/rtl8188eu/include/cmd_osdep.h | 1 - drivers/staging/rtl8188eu/include/drv_types.h | 1 - drivers/staging/rtl8188eu/include/rtw_cmd.h | 14 ----- drivers/staging/rtl8188eu/os_dep/os_intfs.c | 8 --- 6 files changed, 114 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index ae1901682d93..0d2e88cff9e2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -72,43 +72,6 @@ exit: return res; } -static void c2h_wk_callback(struct work_struct *work); - -int _rtw_init_evt_priv(struct evt_priv *pevtpriv) -{ - int res = _SUCCESS; - - - /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */ - atomic_set(&pevtpriv->event_seq, 0); - pevtpriv->evt_done_cnt = 0; - - INIT_WORK(&pevtpriv->c2h_wk, c2h_wk_callback); - pevtpriv->c2h_wk_alive = false; - pevtpriv->c2h_queue = rtw_cbuf_alloc(C2H_QUEUE_MAX_LEN+1); - - - return res; -} - -void rtw_free_evt_priv(struct evt_priv *pevtpriv) -{ - - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("+rtw_free_evt_priv\n")); - - cancel_work_sync(&pevtpriv->c2h_wk); - while (pevtpriv->c2h_wk_alive) - msleep(10); - - while (!rtw_cbuf_empty(pevtpriv->c2h_queue)) { - void *c2h = rtw_cbuf_pop(pevtpriv->c2h_queue); - if (c2h != NULL && c2h != (void *)pevtpriv) - kfree(c2h); - } - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("-rtw_free_evt_priv\n")); - -} - void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) { @@ -175,13 +138,6 @@ u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) return res; } -u32 rtw_init_evt_priv(struct evt_priv *pevtpriv) -{ - int res; - res = _rtw_init_evt_priv(pevtpriv); - return res; -} - void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) { RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("rtw_free_cmd_priv\n")); @@ -1877,48 +1833,6 @@ exit: return ret; } -static void c2h_wk_callback(struct work_struct *work) -{ - struct evt_priv *evtpriv = container_of(work, struct evt_priv, c2h_wk); - struct adapter *adapter = container_of(evtpriv, struct adapter, evtpriv); - struct c2h_evt_hdr *c2h_evt; - c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(adapter); - - evtpriv->c2h_wk_alive = true; - - while (!rtw_cbuf_empty(evtpriv->c2h_queue)) { - c2h_evt = (struct c2h_evt_hdr *) - rtw_cbuf_pop(evtpriv->c2h_queue); - if (c2h_evt != NULL) - /* This C2H event is read, clear it */ - c2h_evt_clear(adapter); - else { - c2h_evt = (struct c2h_evt_hdr *)rtw_malloc(16); - /* This C2H event is not read, read & clear now */ - if (c2h_evt != NULL && - c2h_evt_read(adapter, (u8 *)c2h_evt) != _SUCCESS) - continue; - } - - /* Special pointer to trigger c2h_evt_clear only */ - if ((void *)c2h_evt == (void *)evtpriv) - continue; - - if (!c2h_evt_exist(c2h_evt)) { - kfree(c2h_evt); - continue; - } - - if (ccx_id_filter(c2h_evt->id) == true) { - /* Handle CCX report here */ - rtw_hal_c2h_handler(adapter, c2h_evt); - kfree(c2h_evt); - } - } - - evtpriv->c2h_wk_alive = false; -} - u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) { struct drvextra_cmd_parm *pdrvextra_cmd; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index c42d9fdc748d..c4888b15c22c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5461,7 +5461,6 @@ u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf) u16 evt_sz; uint *peventbuf; void (*event_callback)(struct adapter *dev, u8 *pbuf); - struct evt_priv *pevt_priv = &(padapter->evtpriv); peventbuf = (uint *)pbuf; evt_sz = (u16)(*peventbuf&0xffff); @@ -5482,15 +5481,12 @@ u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf) goto _abort_event_; } - atomic_inc(&pevt_priv->event_seq); - peventbuf += 2; if (peventbuf) { event_callback = wlanevents[evt_code].event_callback; event_callback(padapter, (u8 *)peventbuf); - pevt_priv->evt_done_cnt++; } _abort_event_: diff --git a/drivers/staging/rtl8188eu/include/cmd_osdep.h b/drivers/staging/rtl8188eu/include/cmd_osdep.h index 5a8465e147b3..7a93e1d6c0ca 100644 --- a/drivers/staging/rtl8188eu/include/cmd_osdep.h +++ b/drivers/staging/rtl8188eu/include/cmd_osdep.h @@ -24,7 +24,6 @@ #include extern int _rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -extern int _rtw_init_evt_priv(struct evt_priv *pevtpriv); extern void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); extern int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj); extern struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue); diff --git a/drivers/staging/rtl8188eu/include/drv_types.h b/drivers/staging/rtl8188eu/include/drv_types.h index fdf2c797c1ae..8f42d48243f0 100644 --- a/drivers/staging/rtl8188eu/include/drv_types.h +++ b/drivers/staging/rtl8188eu/include/drv_types.h @@ -189,7 +189,6 @@ struct adapter { struct mlme_priv mlmepriv; struct mlme_ext_priv mlmeextpriv; struct cmd_priv cmdpriv; - struct evt_priv evtpriv; struct xmit_priv xmitpriv; struct recv_priv recvpriv; struct sta_priv stapriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index d7fbff20fea4..7a70f0276f4f 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -64,17 +64,6 @@ struct cmd_priv { struct adapter *padapter; }; -struct evt_priv { - struct work_struct c2h_wk; - bool c2h_wk_alive; - struct rtw_cbuf *c2h_queue; - #define C2H_QUEUE_MAX_LEN 10 - atomic_t event_seq; - u8 *evt_buf; /* shall be non-paged, and 4 bytes aligned */ - u8 *evt_allocated_buf; - u32 evt_done_cnt; -}; - #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ do {\ INIT_LIST_HEAD(&pcmd->list);\ @@ -103,10 +92,7 @@ int rtw_cmd_thread(void *context); u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); -u32 rtw_init_evt_priv(struct evt_priv *pevtpriv); -void rtw_free_evt_priv(struct evt_priv *pevtpriv); void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); -void rtw_evt_notify_isr(struct evt_priv *pevtpriv); enum rtw_drvextra_cmd_id { NONE_WK_CID, diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index aac9473a8548..f331aae6d92e 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -852,12 +852,6 @@ u8 rtw_init_drv_sw(struct adapter *padapter) padapter->cmdpriv.padapter = padapter; - if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL) { - RT_TRACE(_module_os_intfs_c_, _drv_err_, ("\n Can't init evt_priv\n")); - ret8 = _FAIL; - goto exit; - } - if (rtw_init_mlme_priv(padapter) == _FAIL) { RT_TRACE(_module_os_intfs_c_, _drv_err_, ("\n Can't init mlme_priv\n")); ret8 = _FAIL; @@ -940,8 +934,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter) rtw_free_cmd_priv(&padapter->cmdpriv); - rtw_free_evt_priv(&padapter->evtpriv); - rtw_free_mlme_priv(&padapter->mlmepriv); _rtw_free_xmit_priv(&padapter->xmitpriv); -- cgit From b9f64e0c552b452388a6d8f6b61c08842d007c7e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:29 +0530 Subject: staging: rtl8188eu: Remove function c2h_evt_hdl() c2h_evt_hdl() calls a dummy function rtw_hal_c2h_handler() to handle events, so no use of keeping it. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 28 ---------------------------- 1 file changed, 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 0d2e88cff9e2..e1d320471d40 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1808,31 +1808,6 @@ exit: return res; } -static s32 c2h_evt_hdl(struct adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter) -{ - s32 ret = _FAIL; - u8 buf[16]; - - if (!c2h_evt) { - /* No c2h event in cmd_obj, read c2h event before handling*/ - if (c2h_evt_read(adapter, buf) == _SUCCESS) { - c2h_evt = (struct c2h_evt_hdr *)buf; - - if (filter && filter(c2h_evt->id) == false) - goto exit; - - ret = rtw_hal_c2h_handler(adapter, c2h_evt); - } - } else { - if (filter && filter(c2h_evt->id) == false) - goto exit; - - ret = rtw_hal_c2h_handler(adapter, c2h_evt); - } -exit: - return ret; -} - u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) { struct drvextra_cmd_parm *pdrvextra_cmd; @@ -1863,9 +1838,6 @@ u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) rtw_chk_hi_queue_hdl(padapter); break; #endif /* CONFIG_88EU_AP_MODE */ - case C2H_WK_CID: - c2h_evt_hdl(padapter, (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf, NULL); - break; default: break; } -- cgit From 4bb1136eb385783940f5ab3bae808be8577e597f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:30 +0530 Subject: staging: rtl8188eu: Remove unused function c2h_evt_read() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_com.c | 49 ----------------------------- drivers/staging/rtl8188eu/include/hal_com.h | 2 -- 2 files changed, 51 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_com.c b/drivers/staging/rtl8188eu/hal/hal_com.c index baefb467be22..c91a58c566c4 100644 --- a/drivers/staging/rtl8188eu/hal/hal_com.c +++ b/drivers/staging/rtl8188eu/hal/hal_com.c @@ -330,52 +330,3 @@ void c2h_evt_clear(struct adapter *adapter) { usb_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); } - -s32 c2h_evt_read(struct adapter *adapter, u8 *buf) -{ - s32 ret = _FAIL; - struct c2h_evt_hdr *c2h_evt; - int i; - u8 trigger; - - if (buf == NULL) - goto exit; - - trigger = usb_read8(adapter, REG_C2HEVT_CLEAR); - - if (trigger == C2H_EVT_HOST_CLOSE) - goto exit; /* Not ready */ - else if (trigger != C2H_EVT_FW_CLOSE) - goto clear_evt; /* Not a valid value */ - - c2h_evt = (struct c2h_evt_hdr *)buf; - - memset(c2h_evt, 0, 16); - - *buf = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL); - *(buf+1) = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1); - - RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): ", - &c2h_evt , sizeof(c2h_evt)); - - /* Read the content */ - for (i = 0; i < c2h_evt->plen; i++) - c2h_evt->payload[i] = usb_read8(adapter, REG_C2HEVT_MSG_NORMAL + - sizeof(*c2h_evt) + i); - - RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, - "c2h_evt_read(): Command Content:\n", - c2h_evt->payload, c2h_evt->plen); - - ret = _SUCCESS; - -clear_evt: - /* - * Clear event to notify FW we have read the command. - * If this field isn't clear, the FW won't update the next - * command message. - */ - c2h_evt_clear(adapter); -exit: - return ret; -} diff --git a/drivers/staging/rtl8188eu/include/hal_com.h b/drivers/staging/rtl8188eu/include/hal_com.h index 81c27090dd52..1527efa35b6c 100644 --- a/drivers/staging/rtl8188eu/include/hal_com.h +++ b/drivers/staging/rtl8188eu/include/hal_com.h @@ -168,6 +168,4 @@ bool Hal_MappingOutPipe(struct adapter *pAdapter, u8 NumOutPipe); void hal_init_macaddr(struct adapter *adapter); void c2h_evt_clear(struct adapter *adapter); -s32 c2h_evt_read(struct adapter *adapter, u8 *buf); - #endif /* __HAL_COMMON_H__ */ -- cgit From 63fa56eedbe28e3ccfdb0862f8c33acfa7bcc2db Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:31 +0530 Subject: staging: rtl8188eu: Remove unused function c2h_evt_clear() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_com.c | 11 ----------- drivers/staging/rtl8188eu/include/hal_com.h | 2 -- 2 files changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_com.c b/drivers/staging/rtl8188eu/hal/hal_com.c index c91a58c566c4..170e3de5eab4 100644 --- a/drivers/staging/rtl8188eu/hal/hal_com.c +++ b/drivers/staging/rtl8188eu/hal/hal_com.c @@ -319,14 +319,3 @@ void hal_init_macaddr(struct adapter *adapter) rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter->eeprompriv.mac_addr); } - -/* -* C2H event format: -* Field TRIGGER CONTENT CMD_SEQ CMD_LEN CMD_ID -* BITS [127:120] [119:16] [15:8] [7:4] [3:0] -*/ - -void c2h_evt_clear(struct adapter *adapter) -{ - usb_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); -} diff --git a/drivers/staging/rtl8188eu/include/hal_com.h b/drivers/staging/rtl8188eu/include/hal_com.h index 1527efa35b6c..47715d949d54 100644 --- a/drivers/staging/rtl8188eu/include/hal_com.h +++ b/drivers/staging/rtl8188eu/include/hal_com.h @@ -166,6 +166,4 @@ void HalSetBrateCfg(struct adapter *Adapter, u8 *mBratesOS, u16 *pBrateCfg); bool Hal_MappingOutPipe(struct adapter *pAdapter, u8 NumOutPipe); void hal_init_macaddr(struct adapter *adapter); - -void c2h_evt_clear(struct adapter *adapter); #endif /* __HAL_COMMON_H__ */ -- cgit From 815877f1f8336af8d40c627a90eb26172c85d36f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:32 +0530 Subject: staging: rtl8188eu: Remove dummy function rtw_hal_c2h_handler() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 9 --------- drivers/staging/rtl8188eu/include/hal_intf.h | 4 ---- 2 files changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index f002c43f372f..279dd0bc9ec6 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -376,15 +376,6 @@ void rtw_hal_reset_security_engine(struct adapter *adapter) adapter->HalFunc.hal_reset_security_engine(adapter); } -s32 rtw_hal_c2h_handler(struct adapter *adapter, struct c2h_evt_hdr *c2h_evt) -{ - s32 ret = _FAIL; - - if (adapter->HalFunc.c2h_handler) - ret = adapter->HalFunc.c2h_handler(adapter, c2h_evt); - return ret; -} - c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter) { return adapter->HalFunc.c2h_id_filter_ccx; diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index fb797c762ba2..f7ce9dec17e0 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -236,8 +236,6 @@ struct hal_ops { void (*hal_notch_filter)(struct adapter *adapter, bool enable); void (*hal_reset_security_engine)(struct adapter *adapter); - s32 (*c2h_handler)(struct adapter *padapter, - struct c2h_evt_hdr *c2h_evt); c2h_id_filter c2h_id_filter_ccx; }; @@ -342,8 +340,6 @@ int rtw_hal_iol_cmd(struct adapter *adapter, struct xmit_frame *xmit_frame, void rtw_hal_notch_filter(struct adapter *adapter, bool enable); void rtw_hal_reset_security_engine(struct adapter *adapter); -s32 rtw_hal_c2h_handler(struct adapter *adapter, - struct c2h_evt_hdr *c2h_evt); c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter); void indicate_wx_scan_complete_event(struct adapter *padapter); u8 rtw_do_join(struct adapter *padapter); -- cgit From 72b2fc51dfa7c3dcfa98b348d4ab253d539b6b98 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:33 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_hal_c2h_id_filter_ccx() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/hal_intf.c | 5 ----- drivers/staging/rtl8188eu/include/hal_intf.h | 4 ---- 2 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/hal_intf.c b/drivers/staging/rtl8188eu/hal/hal_intf.c index 279dd0bc9ec6..2faa690f7e26 100644 --- a/drivers/staging/rtl8188eu/hal/hal_intf.c +++ b/drivers/staging/rtl8188eu/hal/hal_intf.c @@ -375,8 +375,3 @@ void rtw_hal_reset_security_engine(struct adapter *adapter) if (adapter->HalFunc.hal_reset_security_engine) adapter->HalFunc.hal_reset_security_engine(adapter); } - -c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter) -{ - return adapter->HalFunc.c2h_id_filter_ccx; -} diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h index f7ce9dec17e0..56d5c50bb734 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h @@ -144,8 +144,6 @@ enum hal_intf_ps_func { HAL_MAX_ID, }; -typedef s32 (*c2h_id_filter)(u8 id); - struct hal_ops { u32 (*hal_power_on)(struct adapter *padapter); u32 (*hal_init)(struct adapter *padapter); @@ -236,7 +234,6 @@ struct hal_ops { void (*hal_notch_filter)(struct adapter *adapter, bool enable); void (*hal_reset_security_engine)(struct adapter *adapter); - c2h_id_filter c2h_id_filter_ccx; }; enum rt_eeprom_type { @@ -340,7 +337,6 @@ int rtw_hal_iol_cmd(struct adapter *adapter, struct xmit_frame *xmit_frame, void rtw_hal_notch_filter(struct adapter *adapter, bool enable); void rtw_hal_reset_security_engine(struct adapter *adapter); -c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter); void indicate_wx_scan_complete_event(struct adapter *padapter); u8 rtw_do_join(struct adapter *padapter); -- cgit From 2f1def9979da0d4df9743ca78c63f62d7c6c4486 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:34 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused macro and structure Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 7a70f0276f4f..049e112e0210 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -74,15 +74,6 @@ do {\ pcmd->rspsz = 0;\ } while (0) -struct c2h_evt_hdr { - u8 id:4; - u8 plen:4; - u8 seq; - u8 payload[0]; -}; - -#define c2h_evt_exist(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen) - u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); void rtw_free_cmd_obj(struct cmd_obj *pcmd); -- cgit From 7b71cf432089e91232e2dbda4437b1accd7a65cc Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:35 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_getrttbl_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 34 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 8 ------- 2 files changed, 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e1d320471d40..e95ff432e20b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1122,40 +1122,6 @@ exit: return res; } -u8 rtw_getrttbl_cmd(struct adapter *padapter, struct getratable_rsp *pval) -{ - struct cmd_obj *ph2c; - struct getratable_parm *pgetrttblparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - pgetrttblparm = kzalloc(sizeof(struct getratable_parm), GFP_KERNEL); - - if (pgetrttblparm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - INIT_LIST_HEAD(&ph2c->list); - ph2c->cmdcode = GEN_CMD_CODE(_GetRaTable); - ph2c->parmbuf = (unsigned char *)pgetrttblparm; - ph2c->cmdsz = sizeof(struct getratable_parm); - ph2c->rsp = (u8 *)pval; - ph2c->rspsz = sizeof(struct getratable_rsp); - - pgetrttblparm->rsvd = 0x0; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - u8 rtw_setassocsta_cmd(struct adapter *padapter, u8 *mac_addr) { struct cmd_priv *pcmdpriv = &padapter->cmdpriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 049e112e0210..bb1f8f0966e7 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -601,13 +601,6 @@ struct getratable_parm { uint rsvd; }; -struct getratable_rsp { - u8 ss_ForceUp[NumRates]; - u8 ss_ULevel[NumRates]; - u8 ss_DLevel[NumRates]; - u8 count_judge[NumRates]; -}; - /* to get TX,RX retry count */ struct gettxretrycnt_parm { @@ -758,7 +751,6 @@ u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode); u8 rtw_setrttbl_cmd(struct adapter *padapter, struct setratable_parm *prate_table); -u8 rtw_getrttbl_cmd(struct adapter *padapter, struct getratable_rsp *pval); u8 rtw_gettssi_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type); -- cgit From 0b96f324c089c4a2db25423bc2161170ea16c47f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:36 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_c2h_wk_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 33 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e95ff432e20b..514d931724e8 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1741,39 +1741,6 @@ exit: } #endif -u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt) -{ - struct cmd_obj *ph2c; - struct drvextra_cmd_parm *pdrvextra_cmd_parm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_KERNEL); - if (pdrvextra_cmd_parm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - pdrvextra_cmd_parm->ec_id = C2H_WK_CID; - pdrvextra_cmd_parm->type_size = c2h_evt ? 16 : 0; - pdrvextra_cmd_parm->pbuf = c2h_evt; - - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra)); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - return res; -} - u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) { struct drvextra_cmd_parm *pdrvextra_cmd; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index bb1f8f0966e7..ca17145a26bb 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -776,8 +776,6 @@ u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue); u8 rtw_set_csa_cmd(struct adapter *padapter, u8 new_ch_no); u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option); -u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt); - u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf); void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd); -- cgit From 2f3c7d5362fb54876a274bcdf9d91d3d02caa4bd Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:37 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setbasicrate_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 33 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 514d931724e8..7ad09f97847f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -482,39 +482,6 @@ exit: return res; } -u8 rtw_setbasicrate_cmd(struct adapter *padapter, u8 *rateset) -{ - struct cmd_obj *ph2c; - struct setbasicrate_parm *pssetbasicratepara; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - pssetbasicratepara = kzalloc(sizeof(struct setbasicrate_parm), GFP_KERNEL); - - if (pssetbasicratepara == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, pssetbasicratepara, _SetBasicRate_CMD_); - - memcpy(pssetbasicratepara->basicrates, rateset, NumRates); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - - - return res; -} - - /* unsigned char rtw_setphy_cmd(unsigned char *adapter) diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index ca17145a26bb..fb999fc48dcc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -743,7 +743,6 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); -u8 rtw_setbasicrate_cmd(struct adapter *padapter, u8 *rateset); u8 rtw_setbbreg_cmd(struct adapter *padapter, u8 offset, u8 val); u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val); u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); -- cgit From c87166299fd00e85c14c6dee1a4df40a4500d656 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:38 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setphy_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 40 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 7ad09f97847f..151d29f04b7a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -482,46 +482,6 @@ exit: return res; } -/* -unsigned char rtw_setphy_cmd(unsigned char *adapter) - -1. be called only after rtw_update_registrypriv_dev_network(~) or mp testing program -2. for AdHoc/Ap mode or mp mode? - -*/ -u8 rtw_setphy_cmd(struct adapter *padapter, u8 modem, u8 ch) -{ - struct cmd_obj *ph2c; - struct setphy_parm *psetphypara; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - psetphypara = kzalloc(sizeof(struct setphy_parm), GFP_KERNEL); - - if (psetphypara == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, psetphypara, _SetPhy_CMD_); - - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("CH =%d, modem =%d", ch, modem)); - - psetphypara->modem = modem; - psetphypara->rfchannel = ch; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - u8 rtw_setbbreg_cmd(struct adapter *padapter, u8 offset, u8 val) { struct cmd_obj *ph2c; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index fb999fc48dcc..9bae5541da43 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -733,7 +733,6 @@ u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, u8 rtw_createbss_cmd(struct adapter *padapter); u8 rtw_createbss_cmd_ex(struct adapter *padapter, unsigned char *pbss, unsigned int sz); -u8 rtw_setphy_cmd(struct adapter *padapter, u8 modem, u8 ch); u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key); u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue); -- cgit From 298c7d35e83bc1ac07903950e34cc2a22a769b7a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:39 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setbbreg_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 30 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 151d29f04b7a..ff8d914c8198 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -482,36 +482,6 @@ exit: return res; } -u8 rtw_setbbreg_cmd(struct adapter *padapter, u8 offset, u8 val) -{ - struct cmd_obj *ph2c; - struct writeBB_parm *pwritebbparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - pwritebbparm = kzalloc(sizeof(struct writeBB_parm), GFP_KERNEL); - - if (pwritebbparm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, pwritebbparm, GEN_CMD_CODE(_SetBBReg)); - - pwritebbparm->offset = offset; - pwritebbparm->value = val; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) { struct cmd_obj *ph2c; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 9bae5541da43..fe21838af580 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -742,7 +742,6 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); -u8 rtw_setbbreg_cmd(struct adapter *padapter, u8 offset, u8 val); u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val); u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); -- cgit From 0bf14722c0042d30f6d22040ce925ba276c393eb Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:40 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_getbbreg_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 33 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index ff8d914c8198..54ac41bce339 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -482,39 +482,6 @@ exit: return res; } -u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) -{ - struct cmd_obj *ph2c; - struct readBB_parm *prdbbparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - prdbbparm = kzalloc(sizeof(struct readBB_parm), GFP_KERNEL); - - if (prdbbparm == NULL) { - kfree(ph2c); - return _FAIL; - } - - INIT_LIST_HEAD(&ph2c->list); - ph2c->cmdcode = GEN_CMD_CODE(_GetBBReg); - ph2c->parmbuf = (unsigned char *)prdbbparm; - ph2c->cmdsz = sizeof(struct readBB_parm); - ph2c->rsp = pval; - ph2c->rspsz = sizeof(struct readBB_rsp); - - prdbbparm->offset = offset; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val) { struct cmd_obj *ph2c; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index fe21838af580..f2ddb8aea440 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -743,7 +743,6 @@ u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val); -u8 rtw_getbbreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode); u8 rtw_setrttbl_cmd(struct adapter *padapter, -- cgit From 844c1308089212262d7ef83df476d3963fb34ad5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:41 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_[set, get]rfreg_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 67 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 - 2 files changed, 69 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 54ac41bce339..5aaaabc63e47 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -482,73 +482,6 @@ exit: return res; } -u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val) -{ - struct cmd_obj *ph2c; - struct writeRF_parm *pwriterfparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - pwriterfparm = kzalloc(sizeof(struct writeRF_parm), GFP_KERNEL); - - if (pwriterfparm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, pwriterfparm, GEN_CMD_CODE(_SetRFReg)); - - pwriterfparm->offset = offset; - pwriterfparm->value = val; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - -u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval) -{ - struct cmd_obj *ph2c; - struct readRF_parm *prdrfparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - prdrfparm = kzalloc(sizeof(struct readRF_parm), GFP_KERNEL); - if (prdrfparm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - INIT_LIST_HEAD(&ph2c->list); - ph2c->cmdcode = GEN_CMD_CODE(_GetRFReg); - ph2c->parmbuf = (unsigned char *)prdrfparm; - ph2c->cmdsz = sizeof(struct readRF_parm); - ph2c->rsp = pval; - ph2c->rspsz = sizeof(struct readRF_rsp); - - prdrfparm->offset = offset; - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - - return res; -} - void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd) { diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index f2ddb8aea440..432fbd2896f7 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -742,8 +742,6 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); -u8 rtw_setrfreg_cmd(struct adapter *padapter, u8 offset, u32 val); -u8 rtw_getrfreg_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode); u8 rtw_setrttbl_cmd(struct adapter *padapter, struct setratable_parm *prate_table); -- cgit From faf3c4bf2fd8a55eb8296998235314b5a1d66d69 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:42 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setrttbl_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 29 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 9 --------- 2 files changed, 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 5aaaabc63e47..20125d520b12 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -890,35 +890,6 @@ exit: return res; } -u8 rtw_setrttbl_cmd(struct adapter *padapter, struct setratable_parm *prate_table) -{ - struct cmd_obj *ph2c; - struct setratable_parm *psetrttblparm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - psetrttblparm = kzalloc(sizeof(struct setratable_parm), GFP_KERNEL); - - if (psetrttblparm == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, psetrttblparm, GEN_CMD_CODE(_SetRaTable)); - - memcpy(psetrttblparm, prate_table, sizeof(struct setratable_parm)); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - return res; -} - u8 rtw_setassocsta_cmd(struct adapter *padapter, u8 *mac_addr) { struct cmd_priv *pcmdpriv = &padapter->cmdpriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 432fbd2896f7..af18c75b575a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -590,13 +590,6 @@ struct getcountjudge_rsp { u8 count_judge[MAX_RATES_LENGTH]; }; -struct setratable_parm { - u8 ss_ForceUp[NumRates]; - u8 ss_ULevel[NumRates]; - u8 ss_DLevel[NumRates]; - u8 count_judge[NumRates]; -}; - struct getratable_parm { uint rsvd; }; @@ -743,8 +736,6 @@ u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode); -u8 rtw_setrttbl_cmd(struct adapter *padapter, - struct setratable_parm *prate_table); u8 rtw_gettssi_cmd(struct adapter *padapter, u8 offset, u8 *pval); u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type); -- cgit From 81ee7567464acd94d05a5830686d11d41eaed389 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:43 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_ch_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 53 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 55 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 20125d520b12..ae45f378ef7a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1005,59 +1005,6 @@ exit: return res; } -u8 rtw_set_ch_cmd(struct adapter *padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue) -{ - struct cmd_obj *pcmdobj; - struct set_ch_parm *set_ch_parm; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - - u8 res = _SUCCESS; - - - DBG_88E(FUNC_NDEV_FMT" ch:%u, bw:%u, ch_offset:%u\n", - FUNC_NDEV_ARG(padapter->pnetdev), ch, bw, ch_offset); - - /* check input parameter */ - - /* prepare cmd parameter */ - set_ch_parm = kzalloc(sizeof(*set_ch_parm), GFP_KERNEL); - if (set_ch_parm == NULL) { - res = _FAIL; - goto exit; - } - set_ch_parm->ch = ch; - set_ch_parm->bw = bw; - set_ch_parm->ch_offset = ch_offset; - - if (enqueue) { - /* need enqueue, prepare cmd_obj and enqueue */ - pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (pcmdobj == NULL) { - kfree(set_ch_parm); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(pcmdobj, set_ch_parm, GEN_CMD_CODE(_SetChannel)); - res = rtw_enqueue_cmd(pcmdpriv, pcmdobj); - } else { - /* no need to enqueue, do the cmd hdl directly and free cmd parameter */ - if (H2C_SUCCESS != set_ch_hdl(padapter, (u8 *)set_ch_parm)) - res = _FAIL; - - kfree(set_ch_parm); - } - - /* do something based on res... */ - -exit: - - DBG_88E(FUNC_NDEV_FMT" res:%u\n", FUNC_NDEV_ARG(padapter->pnetdev), res); - - - return res; -} - u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue) { struct cmd_obj *pcmdobj; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index af18c75b575a..6ed4a90a3026 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -755,8 +755,6 @@ u8 rtw_ps_cmd(struct adapter *padapter); u8 rtw_chk_hi_queue_cmd(struct adapter *padapter); #endif -u8 rtw_set_ch_cmd(struct adapter *padapter, u8 ch, u8 bw, u8 ch_offset, - u8 enqueue); u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue); u8 rtw_set_csa_cmd(struct adapter *padapter, u8 new_ch_no); u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option); -- cgit From 6c7e40ea16f6e75f01ce2f8db81a76fb80580cb4 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:44 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_csa_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 35 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index ae45f378ef7a..14d3c9905eef 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1059,41 +1059,6 @@ exit: return res; } -u8 rtw_set_csa_cmd(struct adapter *padapter, u8 new_ch_no) -{ - struct cmd_obj *pcmdobj; - struct SetChannelSwitch_param *setChannelSwitch_param; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - - u8 res = _SUCCESS; - - - RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_set_csa_cmd\n")); - - pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (pcmdobj == NULL) { - res = _FAIL; - goto exit; - } - - setChannelSwitch_param = kzalloc(sizeof(struct SetChannelSwitch_param), GFP_KERNEL); - if (setChannelSwitch_param == NULL) { - kfree(pcmdobj); - res = _FAIL; - goto exit; - } - - setChannelSwitch_param->new_ch_no = new_ch_no; - - init_h2fwcmd_w_parm_no_rsp(pcmdobj, setChannelSwitch_param, GEN_CMD_CODE(_SetChannelSwitch)); - res = rtw_enqueue_cmd(pcmdpriv, pcmdobj); - -exit: - - - return res; -} - u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option) { return _SUCCESS; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 6ed4a90a3026..108cf30a54cf 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -756,7 +756,6 @@ u8 rtw_chk_hi_queue_cmd(struct adapter *padapter); #endif u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue); -u8 rtw_set_csa_cmd(struct adapter *padapter, u8 new_ch_no); u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option); u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf); -- cgit From 444881028c4831961f4c9b8c19cbc5f4fb8767e2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:45 +0530 Subject: staging: rtl8188eu: Remove dummy function rtw_tdls_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 5 ----- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 14d3c9905eef..f8a537c1d5b2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1059,11 +1059,6 @@ exit: return res; } -u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option) -{ - return _SUCCESS; -} - static void traffic_status_watchdog(struct adapter *padapter) { u8 bEnterPS; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 108cf30a54cf..fa9d5f73ebe5 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -756,7 +756,6 @@ u8 rtw_chk_hi_queue_cmd(struct adapter *padapter); #endif u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue); -u8 rtw_tdls_cmd(struct adapter *padapter, u8 *addr, u8 option); u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf); -- cgit From 1469534c0d2105ec67fcd4ca9d46616843537fb8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:46 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setassocsta_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 44 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index f8a537c1d5b2..6a015b992c55 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -890,50 +890,6 @@ exit: return res; } -u8 rtw_setassocsta_cmd(struct adapter *padapter, u8 *mac_addr) -{ - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - struct cmd_obj *ph2c; - struct set_assocsta_parm *psetassocsta_para; - struct set_stakey_rsp *psetassocsta_rsp = NULL; - - u8 res = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - psetassocsta_para = kzalloc(sizeof(struct set_assocsta_parm), GFP_KERNEL); - if (psetassocsta_para == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - psetassocsta_rsp = kzalloc(sizeof(struct set_assocsta_rsp), GFP_KERNEL); - if (psetassocsta_rsp == NULL) { - kfree(ph2c); - kfree(psetassocsta_para); - return _FAIL; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, psetassocsta_para, _SetAssocSta_CMD_); - ph2c->rsp = (u8 *)psetassocsta_rsp; - ph2c->rspsz = sizeof(struct set_assocsta_rsp); - - ether_addr_copy(psetassocsta_para->addr, mac_addr); - - res = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - - return res; -} - u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr) { struct cmd_priv *pcmdpriv = &padapter->cmdpriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index fa9d5f73ebe5..278208df3909 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -718,7 +718,6 @@ Result: #define H2C_CMD_OVERFLOW 0x06 #define H2C_RESERVED 0x07 -u8 rtw_setassocsta_cmd(struct adapter *padapter, u8 *mac_addr); u8 rtw_setstandby_cmd(struct adapter *padapter, uint action); u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, -- cgit From 968675d880f7ac05725e015bab332328bb014364 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:47 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_setstandby_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 34 ----------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 6a015b992c55..85d38d438156 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -339,40 +339,6 @@ post_process: complete_and_exit(NULL, 0); } -u8 rtw_setstandby_cmd(struct adapter *padapter, uint action) -{ - struct cmd_obj *ph2c; - struct usb_suspend_parm *psetusbsuspend; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - - u8 ret = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - ret = _FAIL; - goto exit; - } - - psetusbsuspend = kzalloc(sizeof(struct usb_suspend_parm), GFP_KERNEL); - if (psetusbsuspend == NULL) { - kfree(ph2c); - ret = _FAIL; - goto exit; - } - - psetusbsuspend->action = action; - - init_h2fwcmd_w_parm_no_rsp(ph2c, psetusbsuspend, GEN_CMD_CODE(_SetUsbSuspend)); - - ret = rtw_enqueue_cmd(pcmdpriv, ph2c); - -exit: - - - return ret; -} - /* rtw_sitesurvey_cmd(~) ### NOTE:#### (!!!!) diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 278208df3909..77981cd3ef47 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -718,7 +718,6 @@ Result: #define H2C_CMD_OVERFLOW 0x06 #define H2C_RESERVED 0x07 -u8 rtw_setstandby_cmd(struct adapter *padapter, uint action); u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num); -- cgit From a4112c77d034a68b5bb9263e967d86b3e3ed65c2 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:48 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_createbss_cmd_ex() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 28 ---------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 85d38d438156..269a9947b8b4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -499,34 +499,6 @@ exit: return res; } -u8 rtw_createbss_cmd_ex(struct adapter *padapter, unsigned char *pbss, unsigned int sz) -{ - struct cmd_obj *pcmd; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (pcmd == NULL) { - res = _FAIL; - goto exit; - } - - INIT_LIST_HEAD(&pcmd->list); - pcmd->cmdcode = GEN_CMD_CODE(_CreateBss); - pcmd->parmbuf = pbss; - pcmd->cmdsz = sz; - pcmd->rsp = NULL; - pcmd->rspsz = 0; - - res = rtw_enqueue_cmd(pcmdpriv, pcmd); - -exit: - - - return res; -} - u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork) { u8 res = _SUCCESS; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 77981cd3ef47..d356cf47d4ad 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -722,8 +722,6 @@ u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num); u8 rtw_createbss_cmd(struct adapter *padapter); -u8 rtw_createbss_cmd_ex(struct adapter *padapter, unsigned char *pbss, - unsigned int sz); u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key); u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue); -- cgit From 589c10ef09ad1217ad9e6c6119f5d24961148d93 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:49 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused function declaration Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index d356cf47d4ad..1e3161e88e42 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -731,11 +731,6 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); -u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode); - -u8 rtw_gettssi_cmd(struct adapter *padapter, u8 offset, u8 *pval); -u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type); -u8 rtw_setfwra_cmd(struct adapter *padapter, u8 type); u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr); @@ -752,7 +747,6 @@ u8 rtw_chk_hi_queue_cmd(struct adapter *padapter); #endif u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue); - u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf); void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd); -- cgit From 46fe6ec52c8f613376ce5aeec315c9577a557c90 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:50 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused macros Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 1e3161e88e42..0803742c2e41 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -24,16 +24,11 @@ #include #include -#define C2H_MEM_SZ (16*1024) - #include #include /* */ -#define FREE_CMDOBJ_SZ 128 - #define MAX_CMDSZ 1024 #define MAX_RSPSZ 512 -#define MAX_EVTSZ 1024 #define CMDBUFF_ALIGN_SZ 512 @@ -707,16 +702,11 @@ Result: */ -#define H2C_RSP_OFFSET 512 - #define H2C_SUCCESS 0x00 #define H2C_SUCCESS_RSP 0x01 -#define H2C_DUPLICATED 0x02 #define H2C_DROPPED 0x03 #define H2C_PARAMETERS_ERROR 0x04 #define H2C_REJECTED 0x05 -#define H2C_CMD_OVERFLOW 0x06 -#define H2C_RESERVED 0x07 u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, @@ -841,11 +831,6 @@ enum rtw_h2c_cmd { MAX_H2CCMD }; -#define _GetBBReg_CMD_ _Read_BBREG_CMD_ -#define _SetBBReg_CMD_ _Write_BBREG_CMD_ -#define _GetRFReg_CMD_ _Read_RFREG_CMD_ -#define _SetRFReg_CMD_ _Write_RFREG_CMD_ - #ifdef _RTW_CMD_C_ static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/ -- cgit From 840eace35d67bfa3776367eb458e7ef86d0e274f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:51 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused structures Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 216 ---------------------------- 1 file changed, 216 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 0803742c2e41..b8adc05f8e1a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -112,27 +112,6 @@ enum RFINTFS { HWPI, }; -/* -Caller Mode: Infra, Ad-HoC(C) - -Notes: To enter USB suspend mode - -Command Mode - -*/ -struct usb_suspend_parm { - u32 action;/* 1: sleep, 0:resume */ -}; - -/* -Caller Mode: Infra, Ad-HoC - -Notes: To join a known BSS. - -Command-Event Mode - -*/ - /* Caller Mode: Infra, Ad-Hoc @@ -321,10 +300,6 @@ struct getbasicrate_parm { u32 rsvd; }; -struct getbasicrate_rsp { - u8 basicrates[NumRates]; -}; - /* Caller Mode: Any @@ -376,11 +351,6 @@ struct getphyinfo_parm { u32 rsvd; }; -struct getphyinfo_rsp { - struct regulatory_class class_sets[NUM_REGULATORYS]; - u8 status; -}; - /* Caller Mode: Any @@ -407,45 +377,6 @@ struct getphy_parm { u32 rsvd; }; -struct getphy_rsp { - u8 rfchannel; - u8 modem; -}; - -struct readBB_parm { - u8 offset; -}; -struct readBB_rsp { - u8 value; -}; - -struct readTSSI_parm { - u8 offset; -}; -struct readTSSI_rsp { - u8 value; -}; - -struct writeBB_parm { - u8 offset; - u8 value; -}; - -struct readRF_parm { - u8 offset; -}; -struct readRF_rsp { - u32 value; -}; - -struct writeRF_parm { - u32 offset; - u32 value; -}; - -struct getrfintfs_parm { - u8 rfintfs; -}; struct Tx_Beacon_param { struct wlan_bssid_ex network; @@ -509,153 +440,6 @@ struct drvextra_cmd_parm { unsigned char *pbuf; }; -/*------------------- Below are used for RF/BB tunning ---------------------*/ - -struct setantenna_parm { - u8 tx_antset; - u8 rx_antset; - u8 tx_antenna; - u8 rx_antenna; -}; - -struct enrateadaptive_parm { - u32 en; -}; - -struct settxagctbl_parm { - u32 txagc[MAX_RATES_LENGTH]; -}; - -struct gettxagctbl_parm { - u32 rsvd; -}; -struct gettxagctbl_rsp { - u32 txagc[MAX_RATES_LENGTH]; -}; - -struct setagcctrl_parm { - u32 agcctrl; /* 0: pure hw, 1: fw */ -}; - -struct setssup_parm { - u32 ss_ForceUp[MAX_RATES_LENGTH]; -}; - -struct getssup_parm { - u32 rsvd; -}; - -struct getssup_rsp { - u8 ss_ForceUp[MAX_RATES_LENGTH]; -}; - -struct setssdlevel_parm { - u8 ss_DLevel[MAX_RATES_LENGTH]; -}; - -struct getssdlevel_parm { - u32 rsvd; -}; - -struct getssdlevel_rsp { - u8 ss_DLevel[MAX_RATES_LENGTH]; -}; - -struct setssulevel_parm { - u8 ss_ULevel[MAX_RATES_LENGTH]; -}; - -struct getssulevel_parm { - u32 rsvd; -}; - -struct getssulevel_rsp { - u8 ss_ULevel[MAX_RATES_LENGTH]; -}; - -struct setcountjudge_parm { - u8 count_judge[MAX_RATES_LENGTH]; -}; - -struct getcountjudge_parm { - u32 rsvd; -}; - -struct getcountjudge_rsp { - u8 count_judge[MAX_RATES_LENGTH]; -}; - -struct getratable_parm { - uint rsvd; -}; - -/* to get TX,RX retry count */ - -struct gettxretrycnt_parm { - unsigned int rsvd; -}; - -struct gettxretrycnt_rsp { - unsigned long tx_retrycnt; -}; - -struct getrxretrycnt_parm { - unsigned int rsvd; -}; - -struct getrxretrycnt_rsp { - unsigned long rx_retrycnt; -}; - -/* to get BCNOK,BCNERR count */ -struct getbcnokcnt_parm { - unsigned int rsvd; -}; - -struct getbcnokcnt_rsp { - unsigned long bcnokcnt; -}; - -struct getbcnerrcnt_parm { - unsigned int rsvd; -}; - -struct getbcnerrcnt_rsp { - unsigned long bcnerrcnt; -}; - -/* to get current TX power level */ -struct getcurtxpwrlevel_parm { - unsigned int rsvd; -}; -struct getcurtxpwrlevel_rspi { - unsigned short tx_power; -}; - -struct setprobereqextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setassocreqextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setproberspextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setassocrspextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - struct addBaReq_parm { unsigned int tid; u8 addr[ETH_ALEN]; -- cgit From 4ef0fa7500de04916611cf9059f355c2b886c992 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:52 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_cmd_clr_isr() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 6 ------ drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 269a9947b8b4..acce19212fd1 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -205,12 +205,6 @@ struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv) return cmd_obj; } -void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv) -{ - pcmdpriv->cmd_done_cnt++; - /* up(&(pcmdpriv->cmd_done_sema)); */ -} - void rtw_free_cmd_obj(struct cmd_obj *pcmd) { diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index b8adc05f8e1a..bfd7eafc7b95 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -78,8 +78,6 @@ int rtw_cmd_thread(void *context); u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); -void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); - enum rtw_drvextra_cmd_id { NONE_WK_CID, DYNAMIC_CHK_WK_CID, -- cgit From 3c98d810ded1427e660d792534fef9aaec4c27a6 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:53 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove struct [join, create]bss_parm These two structures have only one member. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 10 +++++----- drivers/staging/rtl8188eu/include/rtw_cmd.h | 23 ----------------------- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 4 ++-- 3 files changed, 7 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index c4888b15c22c..3bd3962de176 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -4959,11 +4959,11 @@ u8 createbss_hdl(struct adapter *padapter, u8 *pbuf) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&(pmlmeinfo->network)); - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf; + struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf; /* u32 initialgain; */ - if (pparm->network.InfrastructureMode == Ndis802_11APMode) { + if (pparm->InfrastructureMode == Ndis802_11APMode) { #ifdef CONFIG_88EU_AP_MODE if (pmlmeinfo->state == WIFI_FW_AP_STATE) { @@ -4974,7 +4974,7 @@ u8 createbss_hdl(struct adapter *padapter, u8 *pbuf) } /* below is for ad-hoc master */ - if (pparm->network.InfrastructureMode == Ndis802_11IBSS) { + if (pparm->InfrastructureMode == Ndis802_11IBSS) { rtw_joinbss_reset(padapter); pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20; @@ -5023,7 +5023,7 @@ u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&(pmlmeinfo->network)); - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf; + struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf; u32 i; /* check already connecting to AP or not */ @@ -5045,7 +5045,7 @@ u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf) rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, NULL); } - rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, false); + rtw_antenna_select_cmd(padapter, pparm->PhyInfo.Optimum_antenna, false); rtw_joinbss_reset(padapter); diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index bfd7eafc7b95..6ff500c6fbaf 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -110,18 +110,6 @@ enum RFINTFS { HWPI, }; -/* -Caller Mode: Infra, Ad-Hoc - -Notes: To join the specified bss - -Command Event Mode - -*/ -struct joinbss_parm { - struct wlan_bssid_ex network; -}; - /* Caller Mode: Infra, Ad-HoC(C) @@ -134,17 +122,6 @@ struct disconnect_parm { u32 deauth_timeout_ms; }; -/* -Caller Mode: AP, Ad-HoC(M) - -Notes: To create a BSS - -Command Mode -*/ -struct createbss_parm { - struct wlan_bssid_ex network; -}; - struct setopmode_parm { u8 mode; u8 rsvd[3]; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 17c680fa9002..1fdd1f8ed014 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -722,9 +722,9 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(0, NULL) GEN_MLME_EXT_HANDLER(0, NULL) GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl) /*14*/ + GEN_MLME_EXT_HANDLER(sizeof (struct wlan_bssid_ex), join_cmd_hdl) /*14*/ GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl) + GEN_MLME_EXT_HANDLER(sizeof (struct wlan_bssid_ex), createbss_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm), sitesurvey_cmd_hdl) /*18*/ -- cgit From acc10c67a3fba62a92f5a31861b2b754989fc074 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:54 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove struct Tx_Beacon_param struct Tx_Beacon_param has only one member. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 12 ++++++------ drivers/staging/rtl8188eu/include/rtw_cmd.h | 4 ---- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 3bd3962de176..b4dd14e21531 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5416,7 +5416,7 @@ u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf) u8 set_tx_beacon_cmd(struct adapter *padapter) { struct cmd_obj *ph2c; - struct Tx_Beacon_param *ptxBeacon_parm; + struct wlan_bssid_ex *ptxBeacon_parm; struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -5430,19 +5430,19 @@ u8 set_tx_beacon_cmd(struct adapter *padapter) goto exit; } - ptxBeacon_parm = kzalloc(sizeof(struct Tx_Beacon_param), GFP_KERNEL); + ptxBeacon_parm = kzalloc(sizeof(struct wlan_bssid_ex), GFP_KERNEL); if (ptxBeacon_parm == NULL) { kfree(ph2c); res = _FAIL; goto exit; } - memcpy(&(ptxBeacon_parm->network), &(pmlmeinfo->network), sizeof(struct wlan_bssid_ex)); + memcpy(ptxBeacon_parm, &(pmlmeinfo->network), sizeof(struct wlan_bssid_ex)); - len_diff = update_hidden_ssid(ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_, - ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_, + len_diff = update_hidden_ssid(ptxBeacon_parm->IEs+_BEACON_IE_OFFSET_, + ptxBeacon_parm->IELength-_BEACON_IE_OFFSET_, pmlmeinfo->hidden_ssid_mode); - ptxBeacon_parm->network.IELength += len_diff; + ptxBeacon_parm->IELength += len_diff; init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon)); diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 6ff500c6fbaf..d6b87243326d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -353,10 +353,6 @@ struct getphy_parm { }; -struct Tx_Beacon_param { - struct wlan_bssid_ex network; -}; - /* Notes: This command is used for H2C/C2H loopback testing diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 1fdd1f8ed014..2a32caa72b7e 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -764,7 +764,7 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(0, NULL) GEN_MLME_EXT_HANDLER(0, NULL) GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), + GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), tx_beacon_hdl) /*55*/ GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/ -- cgit From a117c12475e102d02b6af84be68eb66cd7ac9526 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:55 +0530 Subject: staging: rtl8188eu: Remove header file cmd_osdep.h cmd_osdep.h is not required. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 1 - drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 1 - drivers/staging/rtl8188eu/include/cmd_osdep.h | 31 --------------------------- 3 files changed, 33 deletions(-) delete mode 100644 drivers/staging/rtl8188eu/include/cmd_osdep.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index acce19212fd1..d62de370af89 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 6ad3bd4db3f3..023a3d84ee8b 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include diff --git a/drivers/staging/rtl8188eu/include/cmd_osdep.h b/drivers/staging/rtl8188eu/include/cmd_osdep.h deleted file mode 100644 index 7a93e1d6c0ca..000000000000 --- a/drivers/staging/rtl8188eu/include/cmd_osdep.h +++ /dev/null @@ -1,31 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __CMD_OSDEP_H_ -#define __CMD_OSDEP_H_ - -#include -#include - -extern int _rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -extern void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); -extern int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj); -extern struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue); - -#endif -- cgit From 4690d2da85ad893cf346230efc21203744a194cd Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:56 +0530 Subject: staging: rtl8188eu: Remove wrapper function power_saving_wk_hdl() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index d62de370af89..e399737308a6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -1191,11 +1191,6 @@ exit: return res; } -static void power_saving_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz) -{ - rtw_ps_processor(padapter); -} - u8 rtw_ps_cmd(struct adapter *padapter) { struct cmd_obj *ppscmd; @@ -1317,7 +1312,7 @@ u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf) dynamic_chk_wk_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size); break; case POWER_SAVING_CTRL_WK_CID: - power_saving_wk_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size); + rtw_ps_processor(padapter); break; case LPS_CTRL_WK_CID: lps_ctrl_wk_hdl(padapter, (u8)pdrvextra_cmd->type_size); -- cgit From b6d423025a962bf0013a47bf1bd190609a991c95 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:57 +0530 Subject: staging: rtl8188eu: Rename _rtw_init_cmd_priv() to rtw_init_cmd_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 9 +-------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e399737308a6..dc893605b533 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -30,7 +30,7 @@ Caller and the rtw_cmd_thread can protect cmd_q by spin_lock. No irqsave is necessary. */ -int _rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) +int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) { int res = _SUCCESS; @@ -130,13 +130,6 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue) return obj; } -u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) -{ - u32 res; - res = _rtw_init_cmd_priv(pcmdpriv); - return res; -} - void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) { RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("rtw_free_cmd_priv\n")); diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index d6b87243326d..cc75c7dce1d0 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -75,7 +75,7 @@ void rtw_free_cmd_obj(struct cmd_obj *pcmd); int rtw_cmd_thread(void *context); -u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); +int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); enum rtw_drvextra_cmd_id { -- cgit From 11431bdb5769afc8bc57e63d81966796dd5e6056 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:58 +0530 Subject: staging: rtl8188eu: Rename _rtw_free_cmd_priv() to rtw_free_cmd_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index dc893605b533..c9c00b2b00ca 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -71,7 +71,7 @@ exit: return res; } -void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) +void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) { if (pcmdpriv) { @@ -130,12 +130,6 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue) return obj; } -void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) -{ - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("rtw_free_cmd_priv\n")); - _rtw_free_cmd_priv(pcmdpriv); -} - static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj) { u8 bAllow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */ -- cgit From 4680f1589d43be642ec8985309ce26414a44d0e9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:11:59 +0530 Subject: staging: rtl8188eu: Rename _rtw_dequeue_cmd() to rtw_dequeue_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 16 +++------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 +- 2 files changed, 4 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index c9c00b2b00ca..6cf29bfad3ae 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -110,7 +110,7 @@ exit: return _SUCCESS; } -struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue) +struct cmd_obj * rtw_dequeue_cmd(struct __queue *queue) { unsigned long irqL; struct cmd_obj *obj; @@ -181,16 +181,6 @@ exit: return res; } -struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv) -{ - struct cmd_obj *cmd_obj; - - - cmd_obj = _rtw_dequeue_cmd(&pcmdpriv->cmd_queue); - - return cmd_obj; -} - void rtw_free_cmd_obj(struct cmd_obj *pcmd) { @@ -248,7 +238,7 @@ _next: break; } - pcmd = rtw_dequeue_cmd(pcmdpriv); + pcmd = rtw_dequeue_cmd(&pcmdpriv->cmd_queue); if (!pcmd) continue; @@ -304,7 +294,7 @@ post_process: /* free all cmd_obj resources */ do { - pcmd = rtw_dequeue_cmd(pcmdpriv); + pcmd = rtw_dequeue_cmd(&pcmdpriv->cmd_queue); if (pcmd == NULL) break; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index cc75c7dce1d0..b3529dac7aa5 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -70,7 +70,7 @@ do {\ } while (0) u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); -struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); +struct cmd_obj *rtw_dequeue_cmd(struct __queue *queue); void rtw_free_cmd_obj(struct cmd_obj *pcmd); int rtw_cmd_thread(void *context); -- cgit From e6f33afca7392ad2d574a89c27450f98bae47aa8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:00 +0530 Subject: staging: rtl8188eu: Remove unused member rsp_cnt from struct cmd_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 1 - drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 6cf29bfad3ae..7f69885ee96b 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -66,7 +66,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->cmd_issued_cnt = 0; pcmdpriv->cmd_done_cnt = 0; - pcmdpriv->rsp_cnt = 0; exit: return res; } diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index b3529dac7aa5..60f953b4e9a2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -54,7 +54,6 @@ struct cmd_priv { u8 *rsp_allocated_buf; u32 cmd_issued_cnt; u32 cmd_done_cnt; - u32 rsp_cnt; u8 cmdthd_running; struct adapter *padapter; }; -- cgit From 8edacacfc2e7275b75e5841acbf4bc3126818ba9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:01 +0530 Subject: staging: rtl8188eu: Remove unused member cmd_issued_cnt from struct cmd_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 3 --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 7f69885ee96b..2e70203c4e6d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -64,7 +64,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ((size_t)(pcmdpriv->rsp_allocated_buf) & 3); - pcmdpriv->cmd_issued_cnt = 0; pcmdpriv->cmd_done_cnt = 0; exit: return res; @@ -246,8 +245,6 @@ _next: goto post_process; } - pcmdpriv->cmd_issued_cnt++; - pcmd->cmdsz = round_up(pcmd->cmdsz, 4); memcpy(pcmdbuf, pcmd->parmbuf, pcmd->cmdsz); diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 60f953b4e9a2..b4ee2c8dfdf4 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -52,7 +52,6 @@ struct cmd_priv { u8 *cmd_allocated_buf; u8 *rsp_buf; /* shall be non-paged, and 4 bytes aligned */ u8 *rsp_allocated_buf; - u32 cmd_issued_cnt; u32 cmd_done_cnt; u8 cmdthd_running; struct adapter *padapter; -- cgit From 4b55f02b4a96d761c57e9a6b1959f2b254f7ef8f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:02 +0530 Subject: staging: rtl8188eu: Remove unused member cmd_done_cnt from struct cmd_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 1 - drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 2e70203c4e6d..4035ae22a937 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -64,7 +64,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ((size_t)(pcmdpriv->rsp_allocated_buf) & 3); - pcmdpriv->cmd_done_cnt = 0; exit: return res; } diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index b4ee2c8dfdf4..ca69511caf2a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -52,7 +52,6 @@ struct cmd_priv { u8 *cmd_allocated_buf; u8 *rsp_buf; /* shall be non-paged, and 4 bytes aligned */ u8 *rsp_allocated_buf; - u32 cmd_done_cnt; u8 cmdthd_running; struct adapter *padapter; }; -- cgit From ce7780eda02f3febfbfc8ba5558d3b7cd774452e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:03 +0530 Subject: staging: rtl8188eu: Remove unused members rsp_[allocated, ]_buf from struct cmd_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 10 ---------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 4035ae22a937..aff252859b01 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -55,15 +55,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ((size_t)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1)); - pcmdpriv->rsp_allocated_buf = kzalloc(MAX_RSPSZ + 4, GFP_KERNEL); - - if (pcmdpriv->rsp_allocated_buf == NULL) { - res = _FAIL; - goto exit; - } - - pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ((size_t)(pcmdpriv->rsp_allocated_buf) & 3); - exit: return res; } @@ -73,7 +64,6 @@ void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) if (pcmdpriv) { kfree(pcmdpriv->cmd_allocated_buf); - kfree(pcmdpriv->rsp_allocated_buf); } } diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index ca69511caf2a..d8817108fe82 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -50,8 +50,6 @@ struct cmd_priv { u8 cmd_seq; u8 *cmd_buf; /* shall be non-paged, and 4 bytes aligned */ u8 *cmd_allocated_buf; - u8 *rsp_buf; /* shall be non-paged, and 4 bytes aligned */ - u8 *rsp_allocated_buf; u8 cmdthd_running; struct adapter *padapter; }; -- cgit From caeadfb0219e5fb6d4a1ee8ce5b61301560a014b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:04 +0530 Subject: staging: rtl8188eu: Remove members cmd_[allocated,]_buf from struct cmd_priv Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 32 ++--------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- 2 files changed, 2 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index aff252859b01..7d34315e99f3 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -32,39 +32,18 @@ No irqsave is necessary. int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) { - int res = _SUCCESS; - - sema_init(&(pcmdpriv->cmd_queue_sema), 0); - /* sema_init(&(pcmdpriv->cmd_done_sema), 0); */ sema_init(&(pcmdpriv->terminate_cmdthread_sema), 0); - _rtw_init_queue(&(pcmdpriv->cmd_queue)); - /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */ - pcmdpriv->cmd_seq = 1; - - pcmdpriv->cmd_allocated_buf = kzalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ, GFP_KERNEL); - - if (pcmdpriv->cmd_allocated_buf == NULL) { - res = _FAIL; - goto exit; - } - - pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ((size_t)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1)); - -exit: - return res; + return _SUCCESS; } void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) { - if (pcmdpriv) { - kfree(pcmdpriv->cmd_allocated_buf); - } } /* @@ -192,7 +171,6 @@ int rtw_cmd_thread(void *context) { u8 ret; struct cmd_obj *pcmd; - u8 *pcmdbuf; u8 (*cmd_hdl)(struct adapter *padapter, u8 *pbuf); void (*pcmd_callback)(struct adapter *dev, struct cmd_obj *pcmd); struct adapter *padapter = (struct adapter *)context; @@ -200,8 +178,6 @@ int rtw_cmd_thread(void *context) allow_signal(SIGTERM); - pcmdbuf = pcmdpriv->cmd_buf; - pcmdpriv->cmdthd_running = true; up(&pcmdpriv->terminate_cmdthread_sema); @@ -234,15 +210,11 @@ _next: goto post_process; } - pcmd->cmdsz = round_up(pcmd->cmdsz, 4); - - memcpy(pcmdbuf, pcmd->parmbuf, pcmd->cmdsz); - if (pcmd->cmdcode < ARRAY_SIZE(wlancmds)) { cmd_hdl = wlancmds[pcmd->cmdcode].h2cfuns; if (cmd_hdl) { - ret = cmd_hdl(pcmd->padapter, pcmdbuf); + ret = cmd_hdl(pcmd->padapter, pcmd->parmbuf); pcmd->res = ret; } diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index d8817108fe82..08b371d9246d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -48,8 +48,6 @@ struct cmd_priv { struct semaphore terminate_cmdthread_sema; struct __queue cmd_queue; u8 cmd_seq; - u8 *cmd_buf; /* shall be non-paged, and 4 bytes aligned */ - u8 *cmd_allocated_buf; u8 cmdthd_running; struct adapter *padapter; }; -- cgit From 88263a066adb5aec9515be90d21e081ceeab28f5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:05 +0530 Subject: staging: rtl8188eu: Remove function rtw_getbbrfreg_cmdrsp_callback() rtw_getbbrfreg_cmdrsp_callback() is a callback for _Read_BBREG and _Read_RFREG commands but these commands are never issued by driver. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 8 -------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 5 ++--- 2 files changed, 2 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 7d34315e99f3..e140325cffd5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -375,14 +375,6 @@ exit: return res; } -void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd) -{ - - kfree(pcmd->parmbuf); - kfree(pcmd); - -} - void rtw_readtssi_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd) { diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 08b371d9246d..3f3f257ec923 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -491,7 +491,6 @@ void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd); void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd); void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd); void rtw_createbss_cmd_callback(struct adapter *adapt, struct cmd_obj *pcmd); -void rtw_getbbrfreg_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd); void rtw_readtssi_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd); void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd); @@ -583,9 +582,9 @@ enum rtw_h2c_cmd { static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/ {GEN_CMD_CODE(_Write_MACREG), NULL}, - {GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback}, + {GEN_CMD_CODE(_Read_BBREG), NULL}, {GEN_CMD_CODE(_Write_BBREG), NULL}, - {GEN_CMD_CODE(_Read_RFREG), &rtw_getbbrfreg_cmdrsp_callback}, + {GEN_CMD_CODE(_Read_RFREG), NULL}, {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/ {GEN_CMD_CODE(_Read_EEPROM), NULL}, {GEN_CMD_CODE(_Write_EEPROM), NULL}, -- cgit From 1aef69ecacdaed16865d92dc702b4125a14cc95a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:06 +0530 Subject: staging: rtl8188eu: Remove function rtw_setdatarate_cmd() rtw_setdatarate_cmd() enqueue _SetDataRate command but there is not handler mapped in wlancmds[] to handle this command. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 31 -------------------------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 7 ------ 3 files changed, 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index e140325cffd5..08980eceae02 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -344,37 +344,6 @@ u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, return res; } -u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset) -{ - struct cmd_obj *ph2c; - struct setdatarate_parm *pbsetdataratepara; - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; - u8 res = _SUCCESS; - - - ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); - if (ph2c == NULL) { - res = _FAIL; - goto exit; - } - - pbsetdataratepara = kzalloc(sizeof(struct setdatarate_parm), GFP_KERNEL); - if (pbsetdataratepara == NULL) { - kfree(ph2c); - res = _FAIL; - goto exit; - } - - init_h2fwcmd_w_parm_no_rsp(ph2c, pbsetdataratepara, GEN_CMD_CODE(_SetDataRate)); - pbsetdataratepara->mac_id = 5; - memcpy(pbsetdataratepara->datarates, rateset, NumRates); - res = rtw_enqueue_cmd(pcmdpriv, ph2c); -exit: - - - return res; -} - void rtw_readtssi_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd) { diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 3f3f257ec923..47fdef1d3669 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -468,8 +468,6 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueue); u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype); -u8 rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset); - u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr); u8 rtw_dynamic_chk_wk_cmd(struct adapter *adapter); diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index 1f46ade993bf..d9cee8cec66f 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -1417,7 +1417,6 @@ static int rtw_wx_set_rate(struct net_device *dev, union iwreq_data *wrqu, char *extra) { int i, ret = 0; - struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev); u8 datarates[NumRates]; u32 target_rate = wrqu->bitrate.value; u32 fixed = wrqu->bitrate.fixed; @@ -1490,12 +1489,6 @@ set_rate: RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, ("datarate_inx =%d\n", datarates[i])); } - if (rtw_setdatarate_cmd(padapter, datarates) != _SUCCESS) { - RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, ("rtw_wx_set_rate Fail!!!\n")); - ret = -1; - } - - return ret; } -- cgit From 7c8b4f4afea9148afa5b7dae5c7bd059a0332d7d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:07 +0530 Subject: staging: rtl8188eu: rtw_[cmd, mlme_ext].h: Remove unused command codes Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 159 ++++------------------- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 77 ++--------- 2 files changed, 40 insertions(+), 196 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 47fdef1d3669..8e8092b3952b 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -501,153 +501,50 @@ struct _cmd_callback { }; enum rtw_h2c_cmd { - GEN_CMD_CODE(_Read_MACREG), /*0*/ - GEN_CMD_CODE(_Write_MACREG), - GEN_CMD_CODE(_Read_BBREG), - GEN_CMD_CODE(_Write_BBREG), - GEN_CMD_CODE(_Read_RFREG), - GEN_CMD_CODE(_Write_RFREG), /*5*/ - GEN_CMD_CODE(_Read_EEPROM), - GEN_CMD_CODE(_Write_EEPROM), - GEN_CMD_CODE(_Read_EFUSE), - GEN_CMD_CODE(_Write_EFUSE), - - GEN_CMD_CODE(_Read_CAM), /*10*/ - GEN_CMD_CODE(_Write_CAM), - GEN_CMD_CODE(_setBCNITV), - GEN_CMD_CODE(_setMBIDCFG), - GEN_CMD_CODE(_JoinBss), /*14*/ - GEN_CMD_CODE(_DisConnect), /*15*/ + GEN_CMD_CODE(_JoinBss), + GEN_CMD_CODE(_DisConnect), GEN_CMD_CODE(_CreateBss), GEN_CMD_CODE(_SetOpMode), - GEN_CMD_CODE(_SiteSurvey), /*18*/ + GEN_CMD_CODE(_SiteSurvey), GEN_CMD_CODE(_SetAuth), - - GEN_CMD_CODE(_SetKey), /*20*/ + GEN_CMD_CODE(_SetKey), GEN_CMD_CODE(_SetStaKey), GEN_CMD_CODE(_SetAssocSta), - GEN_CMD_CODE(_DelAssocSta), - GEN_CMD_CODE(_SetStaPwrState), - GEN_CMD_CODE(_SetBasicRate), /*25*/ - GEN_CMD_CODE(_GetBasicRate), - GEN_CMD_CODE(_SetDataRate), - GEN_CMD_CODE(_GetDataRate), - GEN_CMD_CODE(_SetPhyInfo), - - GEN_CMD_CODE(_GetPhyInfo), /*30*/ - GEN_CMD_CODE(_SetPhy), - GEN_CMD_CODE(_GetPhy), - GEN_CMD_CODE(_readRssi), - GEN_CMD_CODE(_readGain), - GEN_CMD_CODE(_SetAtim), /*35*/ - GEN_CMD_CODE(_SetPwrMode), - GEN_CMD_CODE(_JoinbssRpt), - GEN_CMD_CODE(_SetRaTable), - GEN_CMD_CODE(_GetRaTable), - - GEN_CMD_CODE(_GetCCXReport), /*40*/ - GEN_CMD_CODE(_GetDTMReport), - GEN_CMD_CODE(_GetTXRateStatistics), - GEN_CMD_CODE(_SetUsbSuspend), - GEN_CMD_CODE(_SetH2cLbk), - GEN_CMD_CODE(_AddBAReq), /*45*/ - GEN_CMD_CODE(_SetChannel), /*46*/ - GEN_CMD_CODE(_SetTxPower), - GEN_CMD_CODE(_SwitchAntenna), - GEN_CMD_CODE(_SetCrystalCap), - GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/ - - GEN_CMD_CODE(_SetSingleToneTx),/*51*/ - GEN_CMD_CODE(_SetCarrierSuppressionTx), - GEN_CMD_CODE(_SetContinuousTx), - GEN_CMD_CODE(_SwitchBandwidth), /*54*/ - GEN_CMD_CODE(_TX_Beacon), /*55*/ - - GEN_CMD_CODE(_Set_MLME_EVT), /*56*/ - GEN_CMD_CODE(_Set_Drv_Extra), /*57*/ - GEN_CMD_CODE(_Set_H2C_MSG), /*58*/ - - GEN_CMD_CODE(_SetChannelPlan), /*59*/ - GEN_CMD_CODE(_LedBlink), /*60*/ - - GEN_CMD_CODE(_SetChannelSwitch), /*61*/ - GEN_CMD_CODE(_TDLS), /*62*/ + GEN_CMD_CODE(_AddBAReq), + GEN_CMD_CODE(_SetChannel), + GEN_CMD_CODE(_TX_Beacon), + GEN_CMD_CODE(_Set_MLME_EVT), + GEN_CMD_CODE(_Set_Drv_Extra), + GEN_CMD_CODE(_Set_H2C_MSG), + GEN_CMD_CODE(_SetChannelPlan), + GEN_CMD_CODE(_LedBlink), + GEN_CMD_CODE(_SetChannelSwitch), + GEN_CMD_CODE(_TDLS), MAX_H2CCMD }; #ifdef _RTW_CMD_C_ static struct _cmd_callback rtw_cmd_callback[] = { - {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/ - {GEN_CMD_CODE(_Write_MACREG), NULL}, - {GEN_CMD_CODE(_Read_BBREG), NULL}, - {GEN_CMD_CODE(_Write_BBREG), NULL}, - {GEN_CMD_CODE(_Read_RFREG), NULL}, - {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/ - {GEN_CMD_CODE(_Read_EEPROM), NULL}, - {GEN_CMD_CODE(_Write_EEPROM), NULL}, - {GEN_CMD_CODE(_Read_EFUSE), NULL}, - {GEN_CMD_CODE(_Write_EFUSE), NULL}, - - {GEN_CMD_CODE(_Read_CAM), NULL}, /*10*/ - {GEN_CMD_CODE(_Write_CAM), NULL}, - {GEN_CMD_CODE(_setBCNITV), NULL}, - {GEN_CMD_CODE(_setMBIDCFG), NULL}, - {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd_callback}, /*14*/ - {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd_callback}, /*15*/ + {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd_callback}, + {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd_callback}, {GEN_CMD_CODE(_CreateBss), &rtw_createbss_cmd_callback}, {GEN_CMD_CODE(_SetOpMode), NULL}, - {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback}, /*18*/ + {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback}, {GEN_CMD_CODE(_SetAuth), NULL}, - - {GEN_CMD_CODE(_SetKey), NULL}, /*20*/ + {GEN_CMD_CODE(_SetKey), NULL}, {GEN_CMD_CODE(_SetStaKey), &rtw_setstaKey_cmdrsp_callback}, {GEN_CMD_CODE(_SetAssocSta), &rtw_setassocsta_cmdrsp_callback}, - {GEN_CMD_CODE(_DelAssocSta), NULL}, - {GEN_CMD_CODE(_SetStaPwrState), NULL}, - {GEN_CMD_CODE(_SetBasicRate), NULL}, /*25*/ - {GEN_CMD_CODE(_GetBasicRate), NULL}, - {GEN_CMD_CODE(_SetDataRate), NULL}, - {GEN_CMD_CODE(_GetDataRate), NULL}, - {GEN_CMD_CODE(_SetPhyInfo), NULL}, - - {GEN_CMD_CODE(_GetPhyInfo), NULL}, /*30*/ - {GEN_CMD_CODE(_SetPhy), NULL}, - {GEN_CMD_CODE(_GetPhy), NULL}, - {GEN_CMD_CODE(_readRssi), NULL}, - {GEN_CMD_CODE(_readGain), NULL}, - {GEN_CMD_CODE(_SetAtim), NULL}, /*35*/ - {GEN_CMD_CODE(_SetPwrMode), NULL}, - {GEN_CMD_CODE(_JoinbssRpt), NULL}, - {GEN_CMD_CODE(_SetRaTable), NULL}, - {GEN_CMD_CODE(_GetRaTable), NULL}, - - {GEN_CMD_CODE(_GetCCXReport), NULL}, /*40*/ - {GEN_CMD_CODE(_GetDTMReport), NULL}, - {GEN_CMD_CODE(_GetTXRateStatistics), NULL}, - {GEN_CMD_CODE(_SetUsbSuspend), NULL}, - {GEN_CMD_CODE(_SetH2cLbk), NULL}, - {GEN_CMD_CODE(_AddBAReq), NULL}, /*45*/ - {GEN_CMD_CODE(_SetChannel), NULL}, /*46*/ - {GEN_CMD_CODE(_SetTxPower), NULL}, - {GEN_CMD_CODE(_SwitchAntenna), NULL}, - {GEN_CMD_CODE(_SetCrystalCap), NULL}, - {GEN_CMD_CODE(_SetSingleCarrierTx), NULL}, /*50*/ - - {GEN_CMD_CODE(_SetSingleToneTx), NULL}, /*51*/ - {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL}, - {GEN_CMD_CODE(_SetContinuousTx), NULL}, - {GEN_CMD_CODE(_SwitchBandwidth), NULL}, /*54*/ - {GEN_CMD_CODE(_TX_Beacon), NULL},/*55*/ - - {GEN_CMD_CODE(_Set_MLME_EVT), NULL},/*56*/ - {GEN_CMD_CODE(_Set_Drv_Extra), NULL},/*57*/ - {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/ - {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/ - {GEN_CMD_CODE(_LedBlink), NULL},/*60*/ - - {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/ - {GEN_CMD_CODE(_TDLS), NULL},/*62*/ + {GEN_CMD_CODE(_AddBAReq), NULL}, + {GEN_CMD_CODE(_SetChannel), NULL}, + {GEN_CMD_CODE(_TX_Beacon), NULL}, + {GEN_CMD_CODE(_Set_MLME_EVT), NULL}, + {GEN_CMD_CODE(_Set_Drv_Extra), NULL}, + {GEN_CMD_CODE(_Set_H2C_MSG), NULL}, + {GEN_CMD_CODE(_SetChannelPlan), NULL}, + {GEN_CMD_CODE(_LedBlink), NULL}, + {GEN_CMD_CODE(_SetChannelSwitch), NULL}, + {GEN_CMD_CODE(_TDLS), NULL}, }; #endif diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 2a32caa72b7e..484e874183a0 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -708,78 +708,25 @@ u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf); #ifdef _RTW_CMD_C_ static struct cmd_hdl wlancmds[] = { - GEN_DRV_CMD_HANDLER(0, NULL) /*0*/ - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*10*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct wlan_bssid_ex), join_cmd_hdl) /*14*/ + GEN_MLME_EXT_HANDLER(sizeof (struct wlan_bssid_ex), join_cmd_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct wlan_bssid_ex), createbss_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm), - sitesurvey_cmd_hdl) /*18*/ + GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm), sitesurvey_cmd_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) /*20*/ + GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl) GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL) /*30*/ - GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*40*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl) - GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*50*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), - tx_beacon_hdl) /*55*/ - - GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/ - GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/ - - GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/ - GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), - set_chplan_hdl) /*59*/ - GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), - led_blink_hdl) /*60*/ - - GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), - set_csa_hdl) /*61*/ - GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), - tdls_hdl) /*62*/ + GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) + GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), tx_beacon_hdl) + GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) + GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) + GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) + GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) + GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) + GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl) + GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) }; #endif -- cgit From 45f2ff2f7e256e4824c51217f98d9b676d8c1b4f Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:08 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused structures Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 102 ---------------------------- 1 file changed, 102 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 8e8092b3952b..8b0712f1ce98 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -244,108 +244,6 @@ struct setstapwrstate_parm { u8 hwaddr[6]; }; -/* -Caller Mode: Any - -Notes: To setup the basic rate of RTL8711 - -Command Mode - -*/ -struct setbasicrate_parm { - u8 basicrates[NumRates]; -}; - -/* -Caller Mode: Any - -Notes: To read the current basic rate - -Command-Rsp Mode - -*/ -struct getbasicrate_parm { - u32 rsvd; -}; - -/* -Caller Mode: Any - -Notes: To setup the data rate of RTL8711 - -Command Mode - -*/ -struct setdatarate_parm { - u8 mac_id; - u8 datarates[NumRates]; -}; - -/* -Caller Mode: Any - -Notes: To read the current data rate - -Command-Rsp Mode - -*/ -struct getdatarate_parm { - u32 rsvd; - -}; -struct getdatarate_rsp { - u8 datarates[NumRates]; -}; - -/* -Caller Mode: Any -AP: AP can use the info for the contents of beacon frame -Infra: STA can use the info when sitesurveying -Ad-HoC(M): Like AP -Ad-HoC(C): Like STA - -Notes: To set the phy capability of the NIC - -Command Mode - -*/ - -struct setphyinfo_parm { - struct regulatory_class class_sets[NUM_REGULATORYS]; - u8 status; -}; - -struct getphyinfo_parm { - u32 rsvd; -}; - -/* -Caller Mode: Any - -Notes: To set the channel/modem/band -This command will be used when channel/modem/band is changed. - -Command Mode - -*/ -struct setphy_parm { - u8 rfchannel; - u8 modem; -}; - -/* -Caller Mode: Any - -Notes: To get the current setting of channel/modem/band - -Command-Rsp Mode - -*/ -struct getphy_parm { - u32 rsvd; - -}; - /* Notes: This command is used for H2C/C2H loopback testing -- cgit From 98724384f5c8a0f072fb3565bdd1adde07f52ab7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:09 +0530 Subject: staging: rtl8188eu: Remove command _TDLS and its handler _TDLS command is never issued by driver and its handler is a dummy function. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 18 ------------------ drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 1 - 3 files changed, 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index b4dd14e21531..54816f70ec3d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5605,21 +5605,3 @@ u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf) { return H2C_REJECTED; } - -/* TDLS_WRCR : write RCR DATA BIT */ -/* TDLS_SD_PTI : issue peer traffic indication */ -/* TDLS_CS_OFF : go back to the channel linked with AP, terminating channel switch procedure */ -/* TDLS_INIT_CH_SEN : init channel sensing, receive all data and mgnt frame */ -/* TDLS_DONE_CH_SEN: channel sensing and report candidate channel */ -/* TDLS_OFF_CH : first time set channel to off channel */ -/* TDLS_BASE_CH : go back tp the channel linked with AP when set base channel as target channel */ -/* TDLS_P_OFF_CH : periodically go to off channel */ -/* TDLS_P_BASE_CH : periodically go back to base channel */ -/* TDLS_RS_RCR : restore RCR */ -/* TDLS_CKALV_PH1 : check alive timer phase1 */ -/* TDLS_CKALV_PH2 : check alive timer phase2 */ -/* TDLS_FREE_STA : free tdls sta */ -u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf) -{ - return H2C_REJECTED; -} diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 8b0712f1ce98..1d2fc5f9a29c 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -417,7 +417,6 @@ enum rtw_h2c_cmd { GEN_CMD_CODE(_SetChannelPlan), GEN_CMD_CODE(_LedBlink), GEN_CMD_CODE(_SetChannelSwitch), - GEN_CMD_CODE(_TDLS), MAX_H2CCMD }; @@ -442,7 +441,6 @@ static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_SetChannelPlan), NULL}, {GEN_CMD_CODE(_LedBlink), NULL}, {GEN_CMD_CODE(_SetChannelSwitch), NULL}, - {GEN_CMD_CODE(_TDLS), NULL}, }; #endif diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 484e874183a0..43ed4331ad6a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -726,7 +726,6 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl) - GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) }; #endif -- cgit From 7fd600f6199ee36c604640f21a13a57c128f3cd9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:10 +0530 Subject: staging: rtl8188eu: Remove command _SetChannelSwitch and its handler _SetChannelSwitch command is never issued by driver and its handler is a dummy function. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 5 ----- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 1 - 3 files changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 54816f70ec3d..662096dce823 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5600,8 +5600,3 @@ u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf) return H2C_PARAMETERS_ERROR; return H2C_SUCCESS; } - -u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf) -{ - return H2C_REJECTED; -} diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 1d2fc5f9a29c..088db152af35 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -416,7 +416,6 @@ enum rtw_h2c_cmd { GEN_CMD_CODE(_Set_H2C_MSG), GEN_CMD_CODE(_SetChannelPlan), GEN_CMD_CODE(_LedBlink), - GEN_CMD_CODE(_SetChannelSwitch), MAX_H2CCMD }; @@ -440,7 +439,6 @@ static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_Set_H2C_MSG), NULL}, {GEN_CMD_CODE(_SetChannelPlan), NULL}, {GEN_CMD_CODE(_LedBlink), NULL}, - {GEN_CMD_CODE(_SetChannelSwitch), NULL}, }; #endif diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 43ed4331ad6a..d5c02f268cc2 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -725,7 +725,6 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) - GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl) }; #endif -- cgit From 949d4a0d3111ed1dd4455011927367e3a0c7ba4d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:11 +0530 Subject: staging: rtl8188eu: Remove command _LedBlink and its handler _LedBlink command is never issued by driver and its handler is a dummy function. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 7 ------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 1 - 3 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 662096dce823..e774a6fa71bb 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5593,10 +5593,3 @@ u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf) return H2C_SUCCESS; } - -u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf) -{ - if (!pbuf) - return H2C_PARAMETERS_ERROR; - return H2C_SUCCESS; -} diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 088db152af35..f5e2c4580c2e 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -415,7 +415,6 @@ enum rtw_h2c_cmd { GEN_CMD_CODE(_Set_Drv_Extra), GEN_CMD_CODE(_Set_H2C_MSG), GEN_CMD_CODE(_SetChannelPlan), - GEN_CMD_CODE(_LedBlink), MAX_H2CCMD }; @@ -438,7 +437,6 @@ static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_Set_Drv_Extra), NULL}, {GEN_CMD_CODE(_Set_H2C_MSG), NULL}, {GEN_CMD_CODE(_SetChannelPlan), NULL}, - {GEN_CMD_CODE(_LedBlink), NULL}, }; #endif diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index d5c02f268cc2..7fa1c0569329 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -724,7 +724,6 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) - GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) }; #endif -- cgit From 563c8ad9247d975281a7d8bf182f578d2da1be86 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:12 +0530 Subject: staging: rtl8188eu: Remove command _Set_H2C_MSG and its handler _Set_H2C_MSG command is never issued by driver and its handler is a dummy function. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 8 -------- drivers/staging/rtl8188eu/include/rtw_cmd.h | 2 -- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 1 - 3 files changed, 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index e774a6fa71bb..41cfd30a1a7e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -5493,14 +5493,6 @@ _abort_event_: return H2C_SUCCESS; } -u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf) -{ - if (!pbuf) - return H2C_PARAMETERS_ERROR; - - return H2C_SUCCESS; -} - u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf) { if (send_beacon(padapter) == _FAIL) { diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index f5e2c4580c2e..7dfbd8b9f75a 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -413,7 +413,6 @@ enum rtw_h2c_cmd { GEN_CMD_CODE(_TX_Beacon), GEN_CMD_CODE(_Set_MLME_EVT), GEN_CMD_CODE(_Set_Drv_Extra), - GEN_CMD_CODE(_Set_H2C_MSG), GEN_CMD_CODE(_SetChannelPlan), MAX_H2CCMD @@ -435,7 +434,6 @@ static struct _cmd_callback rtw_cmd_callback[] = { {GEN_CMD_CODE(_TX_Beacon), NULL}, {GEN_CMD_CODE(_Set_MLME_EVT), NULL}, {GEN_CMD_CODE(_Set_Drv_Extra), NULL}, - {GEN_CMD_CODE(_Set_H2C_MSG), NULL}, {GEN_CMD_CODE(_SetChannelPlan), NULL}, }; #endif diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 7fa1c0569329..654bd365f969 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -722,7 +722,6 @@ static struct cmd_hdl wlancmds[] = { GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), tx_beacon_hdl) GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) - GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) }; -- cgit From ffca5747cf42a22dfc4ac5beb78f23c393521314 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:13 +0530 Subject: staging: rtl8188eu: rtw_cmd.h: Remove unused structures Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_cmd.h | 16 ---------------- 1 file changed, 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 7dfbd8b9f75a..bad84b2fed10 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -319,22 +319,6 @@ struct SetChannelPlan_param { u8 channel_plan; }; -/*H2C Handler index: 60 */ -struct LedBlink_param { - struct LED_871x *pLed; -}; - -/*H2C Handler index: 61 */ -struct SetChannelSwitch_param { - u8 new_ch_no; -}; - -/*H2C Handler index: 62 */ -struct TDLSoption_param { - u8 addr[ETH_ALEN]; - u8 option; -}; - #define GEN_CMD_CODE(cmd) cmd ## _CMD_ /* -- cgit From faf427665d1e693f030d314b624b10f5724018ad Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:14 +0530 Subject: staging: rtl8188eu: Remove cmd_seq from struct cmd_priv Value stored in cmd_seq isn't used by driver. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 4 ---- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - 2 files changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 08980eceae02..07c1e3ddf9ba 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -36,8 +36,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) sema_init(&(pcmdpriv->terminate_cmdthread_sema), 0); _rtw_init_queue(&(pcmdpriv->cmd_queue)); - - pcmdpriv->cmd_seq = 1; return _SUCCESS; } @@ -217,8 +215,6 @@ _next: ret = cmd_hdl(pcmd->padapter, pcmd->parmbuf); pcmd->res = ret; } - - pcmdpriv->cmd_seq++; } else { pcmd->res = H2C_PARAMETERS_ERROR; } diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index bad84b2fed10..e59d6d401a3c 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -47,7 +47,6 @@ struct cmd_priv { struct semaphore cmd_queue_sema; struct semaphore terminate_cmdthread_sema; struct __queue cmd_queue; - u8 cmd_seq; u8 cmdthd_running; struct adapter *padapter; }; -- cgit From 4dfeb7beb371a211d3d5eeac436cecfec7c71043 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:15 +0530 Subject: staging: rtl8188eu: Remove dummy function rtw_free_cmd_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 5 ----- drivers/staging/rtl8188eu/include/rtw_cmd.h | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 2 -- 3 files changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 07c1e3ddf9ba..08c325eceee7 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -39,11 +39,6 @@ int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv) return _SUCCESS; } -void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv) -{ - -} - /* Calling Context: diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index e59d6d401a3c..9e9f5f4af8f1 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -68,7 +68,6 @@ void rtw_free_cmd_obj(struct cmd_obj *pcmd); int rtw_cmd_thread(void *context); int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); enum rtw_drvextra_cmd_id { NONE_WK_CID, diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index f331aae6d92e..b0c38a45fbf7 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -932,8 +932,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter) free_mlme_ext_priv(&padapter->mlmeextpriv); - rtw_free_cmd_priv(&padapter->cmdpriv); - rtw_free_mlme_priv(&padapter->mlmepriv); _rtw_free_xmit_priv(&padapter->xmitpriv); -- cgit From 9ed24e1f1a3619ca6e99c192d2bd22619ee7e928 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:16 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_change_ifname() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 55 ----------------------- 2 files changed, 56 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 187fe1f32478..005ec17fcbbc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -45,6 +45,5 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter); int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode); int rtw_set_channel_plan(struct adapter *adapter, u8 channel_plan); int rtw_set_country(struct adapter *adapter, const char *country_code); -int rtw_change_ifname(struct adapter *padapter, const char *ifname); #endif diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index de0efe2759ff..76eddcdb6ad1 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -153,61 +153,6 @@ RETURN: return; } -int rtw_change_ifname(struct adapter *padapter, const char *ifname) -{ - struct net_device *pnetdev; - struct net_device *cur_pnetdev; - struct rereg_nd_name_data *rereg_priv; - int ret; - - if (!padapter) - goto error; - - cur_pnetdev = padapter->pnetdev; - rereg_priv = &padapter->rereg_nd_name_priv; - - /* free the old_pnetdev */ - if (rereg_priv->old_pnetdev) { - free_netdev(rereg_priv->old_pnetdev); - rereg_priv->old_pnetdev = NULL; - } - - if (!rtnl_is_locked()) - unregister_netdev(cur_pnetdev); - else - unregister_netdevice(cur_pnetdev); - - rtw_proc_remove_one(cur_pnetdev); - - rereg_priv->old_pnetdev = cur_pnetdev; - - pnetdev = rtw_init_netdev(padapter); - if (!pnetdev) { - ret = -1; - goto error; - } - - SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter))); - - rtw_init_netdev_name(pnetdev, ifname); - - memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN); - - if (!rtnl_is_locked()) - ret = register_netdev(pnetdev); - else - ret = register_netdevice(pnetdev); - if (ret != 0) { - RT_TRACE(_module_hci_intfs_c_, _drv_err_, - ("register_netdev() failed\n")); - goto error; - } - rtw_proc_init_one(pnetdev); - return 0; -error: - return -1; -} - u64 rtw_modular64(u64 x, u64 y) { return do_div(x, y); -- cgit From 0fb7778790811d1d838e57891ba320a0011e8ff6 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:17 +0530 Subject: staging: rtl8188eu: Remove function rtw_alloc_etherdev() rtw_alloc_etherdev() is used in rtw_init_netdev() but never gets called because old_padapter is never NULL. Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/os_intfs.c | 4 +--- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 23 ----------------------- 3 files changed, 1 insertion(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 95131fe5c2b5..a52dcd56229b 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -164,7 +164,6 @@ struct rtw_netdev_priv_indicator { }; struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv); -struct net_device *rtw_alloc_etherdev(int sizeof_priv); #define rtw_netdev_priv(netdev) \ (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv) diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index b0c38a45fbf7..c7a44ab33d64 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -707,14 +707,12 @@ static const struct device_type wlan_type = { struct net_device *rtw_init_netdev(struct adapter *old_padapter) { struct adapter *padapter; - struct net_device *pnetdev; + struct net_device *pnetdev = NULL; RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+init_net_dev\n")); if (old_padapter != NULL) pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(struct adapter), (void *)old_padapter); - else - pnetdev = rtw_alloc_etherdev(sizeof(struct adapter)); if (!pnetdev) return NULL; diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 76eddcdb6ad1..93c76d7e8181 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -111,29 +111,6 @@ RETURN: return pnetdev; } -struct net_device *rtw_alloc_etherdev(int sizeof_priv) -{ - struct net_device *pnetdev; - struct rtw_netdev_priv_indicator *pnpi; - - pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4); - if (!pnetdev) - goto RETURN; - - pnpi = netdev_priv(pnetdev); - - pnpi->priv = vzalloc(sizeof_priv); - if (!pnpi->priv) { - free_netdev(pnetdev); - pnetdev = NULL; - goto RETURN; - } - - pnpi->sizeof_priv = sizeof_priv; -RETURN: - return pnetdev; -} - void rtw_free_netdev(struct net_device *netdev) { struct rtw_netdev_priv_indicator *pnpi; -- cgit From 3b23bc43cdb163be9da7095ad15d65a6f348fb56 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:18 +0530 Subject: staging: rtl8188eu: Remove unused function efuse_GetCurrentSize() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 9 --------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 1 - 2 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 82a54b56aff6..0e20d5cd005a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -1042,15 +1042,6 @@ u16 efuse_GetMaxSize(struct adapter *padapter) return max_size; } -u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size) -{ - Efuse_PowerSwitch(padapter, false, true); - *size = Efuse_GetCurrentSize(padapter); - Efuse_PowerSwitch(padapter, false, false); - - return _SUCCESS; -} - u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u16 mapLen = 0; diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index b608b92bd22c..6b5650134337 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -99,7 +99,6 @@ struct efuse_hal { u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; }; -u8 efuse_GetCurrentSize(struct adapter *adapter, u16 *size); u16 efuse_GetMaxSize(struct adapter *adapter); u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, u16 cnts, u8 *data); -- cgit From f447dc2d5f2770bbcb556e820ed6226309fab239 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:19 +0530 Subject: staging: rtl8188eu: Remove function efuse_GetMaxSize() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 7 ------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 1 - 2 files changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 0e20d5cd005a..ede77088fc13 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -1035,13 +1035,6 @@ u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 cnts return res; } -u16 efuse_GetMaxSize(struct adapter *padapter) -{ - u16 max_size; - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size); - return max_size; -} - u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u16 mapLen = 0; diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 6b5650134337..86a1832d1422 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -99,7 +99,6 @@ struct efuse_hal { u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; }; -u16 efuse_GetMaxSize(struct adapter *adapter); u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, u16 cnts, u8 *data); u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -- cgit From 6e226b4e8ea5aac4166904739fc08650ce19a338 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:20 +0530 Subject: staging: rtl8188eu: rtw_efuse.c : Remove unused functions Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 49 --------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 -- 2 files changed, 51 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index ede77088fc13..2189183a9cd2 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -982,58 +982,9 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) } } -static u8 efuse_read8(struct adapter *padapter, u16 address, u8 *value) -{ - return efuse_OneByteRead(padapter, address, value); -} - -static u8 efuse_write8(struct adapter *padapter, u16 address, u8 *value) -{ - return efuse_OneByteWrite(padapter, address, *value); -} - /* * read/wirte raw efuse data */ -u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 cnts, u8 *data) -{ - int i = 0; - u16 real_content_len = 0, max_available_size = 0; - u8 res = _FAIL; - u8 (*rw8)(struct adapter *, u16, u8*); - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&real_content_len); - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size); - - if (start_addr > real_content_len) - return _FAIL; - - if (write) { - if ((start_addr + cnts) > max_available_size) - return _FAIL; - rw8 = &efuse_write8; - } else { - rw8 = &efuse_read8; - } - - Efuse_PowerSwitch(padapter, write, true); - - /* e-fuse one byte read / write */ - for (i = 0; i < cnts; i++) { - if (start_addr >= real_content_len) { - res = _FAIL; - break; - } - - res = rw8(padapter, start_addr++, data++); - if (_FAIL == res) - break; - } - - Efuse_PowerSwitch(padapter, write, false); - - return res; -} u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 86a1832d1422..6d20fcca1b67 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -99,8 +99,6 @@ struct efuse_hal { u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; }; -u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr, - u16 cnts, u8 *data); u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u16 Efuse_GetCurrentSize(struct adapter *adapter); -- cgit From f06a68f7dff738e12dfc5ad67b9f82985122e36e Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:21 +0530 Subject: staging: rtl8188eu: Remove unused functions rtw_efuse_map_[read, write]() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 113 -------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 - 2 files changed, 115 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 2189183a9cd2..df8d934e88af 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -982,119 +982,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) } } -/* - * read/wirte raw efuse data - */ - -u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) -{ - u16 mapLen = 0; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); - - if ((addr + cnts) > mapLen) - return _FAIL; - - Efuse_PowerSwitch(padapter, false, true); - - efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data); - - Efuse_PowerSwitch(padapter, false, false); - - return _SUCCESS; -} - -u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) -{ - u8 offset, word_en; - u8 *map; - u8 newdata[PGPKT_DATA_SIZE + 1]; - s32 i, idx; - u8 ret = _SUCCESS; - u16 mapLen = 0; - - EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen); - - if ((addr + cnts) > mapLen) - return _FAIL; - - map = kzalloc(mapLen, GFP_KERNEL); - if (map == NULL) - return _FAIL; - - ret = rtw_efuse_map_read(padapter, 0, mapLen, map); - if (ret == _FAIL) - goto exit; - - Efuse_PowerSwitch(padapter, true, true); - - offset = (addr >> 3); - word_en = 0xF; - memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); - i = addr & 0x7; /* index of one package */ - idx = 0; /* data index */ - - if (i & 0x1) { - /* odd start */ - if (data[idx] != map[addr+idx]) { - word_en &= ~BIT(i >> 1); - newdata[i-1] = map[addr+idx-1]; - newdata[i] = data[idx]; - } - i++; - idx++; - } - do { - for (; i < PGPKT_DATA_SIZE; i += 2) { - if (cnts == idx) - break; - if ((cnts - idx) == 1) { - if (data[idx] != map[addr+idx]) { - word_en &= ~BIT(i >> 1); - newdata[i] = data[idx]; - newdata[i+1] = map[addr+idx+1]; - } - idx++; - break; - } else { - if ((data[idx] != map[addr+idx]) || - (data[idx+1] != map[addr+idx+1])) { - word_en &= ~BIT(i >> 1); - newdata[i] = data[idx]; - newdata[i+1] = data[idx + 1]; - } - idx += 2; - } - if (idx == cnts) - break; - } - - if (word_en != 0xF) { - ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata); - DBG_88E("offset=%x\n", offset); - DBG_88E("word_en=%x\n", word_en); - - for (i = 0; i < PGPKT_DATA_SIZE; i++) - DBG_88E("data=%x \t", newdata[i]); - if (ret == _FAIL) - break; - } - - if (idx == cnts) - break; - - offset++; - i = 0; - word_en = 0xF; - memset(newdata, 0xFF, PGPKT_DATA_SIZE); - } while (1); - - Efuse_PowerSwitch(padapter, true, false); -exit: - kfree(map); - return ret; -} - /* * Function: efuse_ShadowRead1Byte * efuse_ShadowRead2Byte diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index 6d20fcca1b67..adeb50111337 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -99,8 +99,6 @@ struct efuse_hal { u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; }; -u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); -u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data); u16 Efuse_GetCurrentSize(struct adapter *adapter); u8 Efuse_CalculateWordCnts(u8 word_en); void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1, -- cgit From 636accde4c0de5305214b7423e109d243333bc8c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:22 +0530 Subject: staging: rtl8188eu: Remove unused function HalDetectPwrDownMode88E() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 19 ------------------- drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 2 -- 2 files changed, 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 1abf97461d0f..161138f7aeb9 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -1079,25 +1079,6 @@ void Hal_ReadThermalMeter_88E(struct adapter *Adapter, u8 *PROMContent, bool Aut DBG_88E("ThermalMeter = 0x%x\n", pHalData->EEPROMThermalMeter); } -bool HalDetectPwrDownMode88E(struct adapter *Adapter) -{ - u8 tmpvalue = 0; - struct hal_data_8188e *pHalData = GET_HAL_DATA(Adapter); - struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv; - - EFUSE_ShadowRead(Adapter, 1, EEPROM_RF_FEATURE_OPTION_88E, (u32 *)&tmpvalue); - - /* 2010/08/25 MH INF priority > PDN Efuse value. */ - if (tmpvalue & BIT(4) && pwrctrlpriv->reg_pdnmode) - pHalData->pwrdown = true; - else - pHalData->pwrdown = false; - - DBG_88E("HalDetectPwrDownMode(): PDN =%d\n", pHalData->pwrdown); - - return pHalData->pwrdown; -} /* HalDetectPwrDownMode */ - /* This function is used only for 92C to set REG_BCN_CTRL(0x550) register. */ /* We just reserve the value of the register in variable pHalData->RegBcnCtrlVal and then operate */ /* the value of the register via atomic operation. */ diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index a0a3ca792881..4b7b06933ff7 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -451,8 +451,6 @@ void Hal_EfuseParseBoardType88E(struct adapter *pAdapter, u8 *hwinfo, void Hal_ReadPowerSavingMode88E(struct adapter *pAdapter, u8 *hwinfo, bool AutoLoadFail); -bool HalDetectPwrDownMode88E(struct adapter *Adapter); - void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc); /* register */ -- cgit From 73d474a99b9a010ef9887ff94b5ef4b3a3f200a5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:23 +0530 Subject: staging: rtl8188eu: rtw_efuse.c: Remove unused functions Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_efuse.c | 60 --------------------------- drivers/staging/rtl8188eu/include/rtw_efuse.h | 2 - 2 files changed, 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index df8d934e88af..5b997b2b404a 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -982,53 +982,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata) } } -/* - * Function: efuse_ShadowRead1Byte - * efuse_ShadowRead2Byte - * efuse_ShadowRead4Byte - * - * Overview: Read from efuse init map by one/two/four bytes !!!!! - */ -static void -efuse_ShadowRead1Byte( - struct adapter *pAdapter, - u16 Offset, - u8 *Value) -{ - struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); - - *Value = pEEPROM->efuse_eeprom_data[Offset]; - -} - -static void -efuse_ShadowRead2Byte( - struct adapter *pAdapter, - u16 Offset, - u16 *Value) -{ - struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); - - *Value = pEEPROM->efuse_eeprom_data[Offset]; - *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8; - -} - -static void -efuse_ShadowRead4Byte( - struct adapter *pAdapter, - u16 Offset, - u32 *Value) -{ - struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); - - *Value = pEEPROM->efuse_eeprom_data[Offset]; - *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8; - *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16; - *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24; - -} - /* * Overview: Read All Efuse content */ @@ -1062,16 +1015,3 @@ void EFUSE_ShadowMapUpdate( else Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data); } - -/* - * Overview: Read from efuse init map !!!!! - */ -void EFUSE_ShadowRead(struct adapter *pAdapter, u8 Type, u16 Offset, u32 *Value) -{ - if (Type == 1) - efuse_ShadowRead1Byte(pAdapter, Offset, (u8 *)Value); - else if (Type == 2) - efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value); - else if (Type == 4) - efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value); -} diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h b/drivers/staging/rtl8188eu/include/rtw_efuse.h index adeb50111337..720f9ea24d52 100644 --- a/drivers/staging/rtl8188eu/include/rtw_efuse.h +++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h @@ -116,6 +116,4 @@ u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 efuse_addr, u8 word_en, u8 *data); void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype); -void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val); - #endif -- cgit From 788253860c21f4e40add556d7ed715fefb2bafb3 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:24 +0530 Subject: staging: rtl8188eu: use jiffies_to_msecs() instead of rtw_systime_to_ms() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 7 +------ 2 files changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index a52dcd56229b..3ddaa34c761a 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -154,7 +154,6 @@ u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); -u32 rtw_systime_to_ms(u32 systime); u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 93c76d7e8181..96f8eb88b06d 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -77,11 +77,6 @@ void _rtw_init_queue(struct __queue *pqueue) spin_lock_init(&(pqueue->lock)); } -inline u32 rtw_systime_to_ms(u32 systime) -{ - return systime * 1000 / HZ; -} - inline u32 rtw_ms_to_systime(u32 ms) { return ms * HZ / 1000; @@ -90,7 +85,7 @@ inline u32 rtw_ms_to_systime(u32 ms) /* the input parameter start must be in jiffies */ inline s32 rtw_get_passing_time_ms(u32 start) { - return rtw_systime_to_ms(jiffies-start); + return jiffies_to_msecs(jiffies-start); } struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, -- cgit From ace050139cee44d06b06b4c78074b4eb80fb7c0a Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:25 +0530 Subject: staging: rtl8188eu: Use msecs_to_jiffies() instead of rtw_ms_to_systime() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_pwrctrl.c | 10 +++++----- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 5 ----- 3 files changed, 5 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index 439bc8f70d03..27ed83cca193 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -551,7 +551,7 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter) inline void rtw_set_ips_deny(struct adapter *padapter, u32 ms) { struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - pwrpriv->ips_deny_time = jiffies + rtw_ms_to_systime(ms); + pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ms); } /* @@ -568,9 +568,9 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *cal unsigned long expires; int ret = _SUCCESS; - expires = jiffies + rtw_ms_to_systime(ips_deffer_ms); + expires = jiffies + msecs_to_jiffies(ips_deffer_ms); if (time_before(pwrpriv->ips_deny_time, expires)) - pwrpriv->ips_deny_time = jiffies + rtw_ms_to_systime(ips_deffer_ms); + pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms); { u32 start = jiffies; @@ -624,9 +624,9 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *cal } exit: - expires = jiffies + rtw_ms_to_systime(ips_deffer_ms); + expires = jiffies + msecs_to_jiffies(ips_deffer_ms); if (time_before(pwrpriv->ips_deny_time, expires)) - pwrpriv->ips_deny_time = jiffies + rtw_ms_to_systime(ips_deffer_ms); + pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms); return ret; } diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 3ddaa34c761a..238930c7d430 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -154,7 +154,6 @@ u32 _rtw_down_sema(struct semaphore *sema); void _rtw_init_queue(struct __queue *pqueue); -u32 rtw_ms_to_systime(u32 ms); s32 rtw_get_passing_time_ms(u32 start); struct rtw_netdev_priv_indicator { diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index 96f8eb88b06d..db6ee3103e24 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -77,11 +77,6 @@ void _rtw_init_queue(struct __queue *pqueue) spin_lock_init(&(pqueue->lock)); } -inline u32 rtw_ms_to_systime(u32 ms) -{ - return ms * HZ / 1000; -} - /* the input parameter start must be in jiffies */ inline s32 rtw_get_passing_time_ms(u32 start) { -- cgit From 1e28b63db9cd207281d0ae378de9a2e9674a177c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:26 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_cbuf_alloc() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 1 - drivers/staging/rtl8188eu/os_dep/osdep_service.c | 21 --------------------- 2 files changed, 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 238930c7d430..2a20fca1c878 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -199,6 +199,5 @@ bool rtw_cbuf_full(struct rtw_cbuf *cbuf); bool rtw_cbuf_empty(struct rtw_cbuf *cbuf); bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf); void *rtw_cbuf_pop(struct rtw_cbuf *cbuf); -struct rtw_cbuf *rtw_cbuf_alloc(u32 size); #endif diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index db6ee3103e24..f54cf5219524 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -228,24 +228,3 @@ void *rtw_cbuf_pop(struct rtw_cbuf *cbuf) return buf; } - -/** - * rtw_cbuf_alloc - allocate a rtw_cbuf with given size and do initialization - * @size: size of pointer - * - * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure - */ -struct rtw_cbuf *rtw_cbuf_alloc(u32 size) -{ - struct rtw_cbuf *cbuf; - - cbuf = (struct rtw_cbuf *)rtw_malloc(sizeof(*cbuf) + - sizeof(void *)*size); - - if (cbuf) { - cbuf->write = 0; - cbuf->read = 0; - cbuf->size = size; - } - return cbuf; -} -- cgit From 67db20f0bbdd2d649f2126a2a75cf1e3bffa1377 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:27 +0530 Subject: staging: rtl8188eu: Remove unused functions rtw_cbuf_[full, empty, push, pop]() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 6 --- drivers/staging/rtl8188eu/os_dep/osdep_service.c | 65 ----------------------- 2 files changed, 71 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 2a20fca1c878..3a620f84a12a 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -194,10 +194,4 @@ struct rtw_cbuf { u32 size; void *bufs[0]; }; - -bool rtw_cbuf_full(struct rtw_cbuf *cbuf); -bool rtw_cbuf_empty(struct rtw_cbuf *cbuf); -bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf); -void *rtw_cbuf_pop(struct rtw_cbuf *cbuf); - #endif diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index f54cf5219524..8af4a8d24cce 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -163,68 +163,3 @@ keep_ori: /* free ori */ kfree(ori); } - - -/** - * rtw_cbuf_full - test if cbuf is full - * @cbuf: pointer of struct rtw_cbuf - * - * Returns: true if cbuf is full - */ -inline bool rtw_cbuf_full(struct rtw_cbuf *cbuf) -{ - return (cbuf->write == cbuf->read-1) ? true : false; -} - -/** - * rtw_cbuf_empty - test if cbuf is empty - * @cbuf: pointer of struct rtw_cbuf - * - * Returns: true if cbuf is empty - */ -inline bool rtw_cbuf_empty(struct rtw_cbuf *cbuf) -{ - return (cbuf->write == cbuf->read) ? true : false; -} - -/** - * rtw_cbuf_push - push a pointer into cbuf - * @cbuf: pointer of struct rtw_cbuf - * @buf: pointer to push in - * - * Lock free operation, be careful of the use scheme - * Returns: true push success - */ -bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf) -{ - if (rtw_cbuf_full(cbuf)) - return _FAIL; - - if (0) - DBG_88E("%s on %u\n", __func__, cbuf->write); - cbuf->bufs[cbuf->write] = buf; - cbuf->write = (cbuf->write+1)%cbuf->size; - - return _SUCCESS; -} - -/** - * rtw_cbuf_pop - pop a pointer from cbuf - * @cbuf: pointer of struct rtw_cbuf - * - * Lock free operation, be careful of the use scheme - * Returns: pointer popped out - */ -void *rtw_cbuf_pop(struct rtw_cbuf *cbuf) -{ - void *buf; - if (rtw_cbuf_empty(cbuf)) - return NULL; - - if (0) - DBG_88E("%s on %u\n", __func__, cbuf->read); - buf = cbuf->bufs[cbuf->read]; - cbuf->read = (cbuf->read+1)%cbuf->size; - - return buf; -} -- cgit From 07ff1c27e8ee6907008f0bcdb56c9f5487cfeca8 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Thu, 10 Jul 2014 09:12:28 +0530 Subject: staging: rtl8188eu: osdep_service.h: Remove unused struct rtw_cbuf Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/osdep_service.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 3a620f84a12a..fed9c86890b4 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -187,11 +187,4 @@ u64 rtw_modular64(u64 x, u64 y); void rtw_buf_free(u8 **buf, u32 *buf_len); void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len); - -struct rtw_cbuf { - u32 write; - u32 read; - u32 size; - void *bufs[0]; -}; #endif -- cgit From bdf4d4f23b17a0f0fe687ac709bbeb6536bd27c0 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Thu, 10 Jul 2014 12:26:04 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_maxcps_room() Null checks for tty, un and ch are already done by caller, so replace parameter "tty" with "ch" and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index cc21dd228ba8..9affc5bf7228 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -2507,22 +2507,9 @@ static int dgap_wait_for_drain(struct tty_struct *tty) * returns the new bytes_available. This only affects printer * output. */ -static int dgap_maxcps_room(struct tty_struct *tty, int bytes_available) +static int dgap_maxcps_room(struct channel_t *ch, struct un_t *un, + int bytes_available) { - struct channel_t *ch; - struct un_t *un; - - if (!tty) - return bytes_available; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return bytes_available; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return bytes_available; - /* * If its not the Transparent print device, return * the full data amount. @@ -2624,7 +2611,7 @@ static int dgap_tty_write_room(struct tty_struct *tty) ret += ch->ch_tsize; /* Limit printer to maxcps */ - ret = dgap_maxcps_room(tty, ret); + ret = dgap_maxcps_room(ch, un, ret); /* * If we are printer device, leave space for @@ -2729,7 +2716,7 @@ static int dgap_tty_write(struct tty_struct *tty, const unsigned char *buf, * Limit printer output to maxcps overall, with bursts allowed * up to bufsize characters. */ - bufcount = dgap_maxcps_room(tty, bufcount); + bufcount = dgap_maxcps_room(ch, un, bufcount); /* * Take minimum of what the user wants to send, and the -- cgit From 7ba58220ee2d305de89d725c19de351898f8ed06 Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Wed, 9 Jul 2014 20:21:21 +0100 Subject: staging: gdm72xx: move T_CAPABILITY definitions to hci.h Signed-off-by: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 11 +++-------- drivers/staging/gdm72xx/hci.h | 6 ++++++ 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index 0f71d419ede6..1693cc0970ba 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -591,11 +591,6 @@ static void gdm_wimax_prepare_device(struct net_device *dev) u32 val = 0; __be32 val_be32; - #define BIT_MULTI_CS 0 - #define BIT_WIMAX 1 - #define BIT_QOS 2 - #define BIT_AGGREGATION 3 - /* GetInformation mac address */ len = 0; hci->cmd_evt = cpu_to_be16(WIMAX_GET_INFO); @@ -603,12 +598,12 @@ static void gdm_wimax_prepare_device(struct net_device *dev) hci->length = cpu_to_be16(len); gdm_wimax_send(nic, hci, HCI_HEADER_SIZE+len); - val = (1< Date: Wed, 9 Jul 2014 15:26:23 -0400 Subject: staging: rtl8712: remove wrapper function thread_enter() The inline function thread_enter() accepts a single ignored parameter and is just a wrapper for allow_signal(SIGTERM). Removed. Signed-off-by: James A Shackleford Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/osdep_service.h | 5 ----- drivers/staging/rtl8712/rtl8712_cmd.c | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h index c80f00683b0f..d7a357b8d2d1 100644 --- a/drivers/staging/rtl8712/osdep_service.h +++ b/drivers/staging/rtl8712/osdep_service.h @@ -118,11 +118,6 @@ static inline unsigned char _cancel_timer_ex(struct timer_list *ptimer) return del_timer(ptimer); } -static inline void thread_enter(void *context) -{ - allow_signal(SIGTERM); -} - static inline void flush_signals_thread(void) { if (signal_pending(current)) diff --git a/drivers/staging/rtl8712/rtl8712_cmd.c b/drivers/staging/rtl8712/rtl8712_cmd.c index 61519774a25e..ab0c7eb248d3 100644 --- a/drivers/staging/rtl8712/rtl8712_cmd.c +++ b/drivers/staging/rtl8712/rtl8712_cmd.c @@ -326,7 +326,7 @@ int r8712_cmd_thread(void *context) struct _adapter *padapter = (struct _adapter *)context; struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - thread_enter(padapter); + allow_signal(SIGTERM); while (1) { if ((_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL) break; -- cgit From 1aa8ae70432f0b2f54d41497ffdea8c8184608c6 Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Wed, 9 Jul 2014 20:44:18 +0100 Subject: staging: gdm72xx: reorder functions and remove forward declarations Signed-off-by: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_sdio.c | 77 ++++++++-------- drivers/staging/gdm72xx/gdm_usb.c | 87 +++++++++--------- drivers/staging/gdm72xx/gdm_wimax.c | 179 +++++++++++++++++------------------- 3 files changed, 164 insertions(+), 179 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index a9031738588f..6a23bef33e0a 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -38,9 +38,6 @@ #define TX_HZ 2000 #define TX_INTERVAL (1000000/TX_HZ) -static int init_sdio(struct sdiowm_dev *sdev); -static void release_sdio(struct sdiowm_dev *sdev); - static struct sdio_tx *alloc_tx_struct(struct tx_cxt *tx) { struct sdio_tx *t = kzalloc(sizeof(*t), GFP_ATOMIC); @@ -124,6 +121,43 @@ static void put_rx_struct(struct rx_cxt *rx, struct sdio_rx *r) list_add_tail(&r->list, &rx->free_list); } +static void release_sdio(struct sdiowm_dev *sdev) +{ + struct tx_cxt *tx = &sdev->tx; + struct rx_cxt *rx = &sdev->rx; + struct sdio_tx *t, *t_next; + struct sdio_rx *r, *r_next; + + kfree(tx->sdu_buf); + + list_for_each_entry_safe(t, t_next, &tx->free_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + list_for_each_entry_safe(t, t_next, &tx->sdu_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + kfree(rx->rx_buf); + + list_for_each_entry_safe(r, r_next, &rx->free_list, list) { + list_del(&r->list); + free_rx_struct(r); + } + + list_for_each_entry_safe(r, r_next, &rx->req_list, list) { + list_del(&r->list); + free_rx_struct(r); + } +} + static int init_sdio(struct sdiowm_dev *sdev) { int ret = 0, i; @@ -176,43 +210,6 @@ fail: return ret; } -static void release_sdio(struct sdiowm_dev *sdev) -{ - struct tx_cxt *tx = &sdev->tx; - struct rx_cxt *rx = &sdev->rx; - struct sdio_tx *t, *t_next; - struct sdio_rx *r, *r_next; - - kfree(tx->sdu_buf); - - list_for_each_entry_safe(t, t_next, &tx->free_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - list_for_each_entry_safe(t, t_next, &tx->sdu_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - kfree(rx->rx_buf); - - list_for_each_entry_safe(r, r_next, &rx->free_list, list) { - list_del(&r->list); - free_rx_struct(r); - } - - list_for_each_entry_safe(r, r_next, &rx->req_list, list) { - list_del(&r->list); - free_rx_struct(r); - } -} - static void send_sdio_pkt(struct sdio_func *func, u8 *data, int len) { int n, blocks, ret, remain; diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index 5a6b86a180b3..45b3dda9cbd6 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -49,9 +49,6 @@ static int k_mode_stop; #endif /* CONFIG_WIMAX_GDM72XX_K_MODE */ -static int init_usb(struct usbwm_dev *udev); -static void release_usb(struct usbwm_dev *udev); - static struct usb_tx *alloc_tx_struct(struct tx_cxt *tx) { struct usb_tx *t = kzalloc(sizeof(*t), GFP_ATOMIC); @@ -160,6 +157,48 @@ static void put_rx_struct(struct rx_cxt *rx, struct usb_rx *r) list_move(&r->list, &rx->free_list); } +static void release_usb(struct usbwm_dev *udev) +{ + struct tx_cxt *tx = &udev->tx; + struct rx_cxt *rx = &udev->rx; + struct usb_tx *t, *t_next; + struct usb_rx *r, *r_next; + unsigned long flags; + + spin_lock_irqsave(&tx->lock, flags); + + list_for_each_entry_safe(t, t_next, &tx->sdu_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + list_for_each_entry_safe(t, t_next, &tx->free_list, list) { + list_del(&t->list); + free_tx_struct(t); + } + + spin_unlock_irqrestore(&tx->lock, flags); + + spin_lock_irqsave(&rx->lock, flags); + + list_for_each_entry_safe(r, r_next, &rx->free_list, list) { + list_del(&r->list); + free_rx_struct(r); + } + + list_for_each_entry_safe(r, r_next, &rx->used_list, list) { + list_del(&r->list); + free_rx_struct(r); + } + + spin_unlock_irqrestore(&rx->lock, flags); +} + static int init_usb(struct usbwm_dev *udev) { int ret = 0, i; @@ -210,48 +249,6 @@ fail: return ret; } -static void release_usb(struct usbwm_dev *udev) -{ - struct tx_cxt *tx = &udev->tx; - struct rx_cxt *rx = &udev->rx; - struct usb_tx *t, *t_next; - struct usb_rx *r, *r_next; - unsigned long flags; - - spin_lock_irqsave(&tx->lock, flags); - - list_for_each_entry_safe(t, t_next, &tx->sdu_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - list_for_each_entry_safe(t, t_next, &tx->free_list, list) { - list_del(&t->list); - free_tx_struct(t); - } - - spin_unlock_irqrestore(&tx->lock, flags); - - spin_lock_irqsave(&rx->lock, flags); - - list_for_each_entry_safe(r, r_next, &rx->free_list, list) { - list_del(&r->list); - free_rx_struct(r); - } - - list_for_each_entry_safe(r, r_next, &rx->used_list, list) { - list_del(&r->list); - free_rx_struct(r); - } - - spin_unlock_irqrestore(&rx->lock, flags); -} - static void __gdm_usb_send_complete(struct urb *urb) { struct usb_tx *t = urb->context; diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index 1693cc0970ba..726c943efac2 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -41,12 +41,6 @@ struct evt_entry { int size; }; -static void __gdm_wimax_event_send(struct work_struct *work); -static inline struct evt_entry *alloc_event_entry(void); -static inline void free_event_entry(struct evt_entry *e); -static struct evt_entry *get_event_entry(void); -static void put_event_entry(struct evt_entry *e); - static struct { int ref_cnt; struct sock *sock; @@ -58,9 +52,6 @@ static struct { static u8 gdm_wimax_macaddr[6] = {0x00, 0x0a, 0x3b, 0xf0, 0x01, 0x30}; -static void gdm_wimax_ind_fsm_update(struct net_device *dev, struct fsm_s *fsm); -static void gdm_wimax_ind_if_updown(struct net_device *dev, int if_up); - static const char *get_protocol_name(u16 protocol) { static char buf[32]; @@ -190,6 +181,37 @@ static inline int gdm_wimax_header(struct sk_buff **pskb) return 0; } +static inline struct evt_entry *alloc_event_entry(void) +{ + return kmalloc(sizeof(struct evt_entry), GFP_ATOMIC); +} + +static inline void free_event_entry(struct evt_entry *e) +{ + kfree(e); +} + +static struct evt_entry *get_event_entry(void) +{ + struct evt_entry *e; + + if (list_empty(&wm_event.freeq)) { + e = alloc_event_entry(); + } else { + e = list_entry(wm_event.freeq.next, struct evt_entry, list); + list_del(&e->list); + } + + return e; +} + +static void put_event_entry(struct evt_entry *e) +{ + BUG_ON(!e); + + list_add_tail(&e->list, &wm_event.freeq); +} + static void gdm_wimax_event_rcv(struct net_device *dev, u16 type, void *msg, int len) { @@ -204,6 +226,30 @@ static void gdm_wimax_event_rcv(struct net_device *dev, u16 type, void *msg, gdm_wimax_send(nic, msg, len); } +static void __gdm_wimax_event_send(struct work_struct *work) +{ + int idx; + unsigned long flags; + struct evt_entry *e; + + spin_lock_irqsave(&wm_event.evt_lock, flags); + + while (!list_empty(&wm_event.evtq)) { + e = list_entry(wm_event.evtq.next, struct evt_entry, list); + spin_unlock_irqrestore(&wm_event.evt_lock, flags); + + if (sscanf(e->dev->name, "wm%d", &idx) == 1) + netlink_send(wm_event.sock, idx, 0, e->evt_data, + e->size); + + spin_lock_irqsave(&wm_event.evt_lock, flags); + list_del(&e->list); + put_event_entry(e); + } + + spin_unlock_irqrestore(&wm_event.evt_lock, flags); +} + static int gdm_wimax_event_init(void) { if (!wm_event.ref_cnt) { @@ -249,61 +295,6 @@ static void gdm_wimax_event_exit(void) } } -static inline struct evt_entry *alloc_event_entry(void) -{ - return kmalloc(sizeof(struct evt_entry), GFP_ATOMIC); -} - -static inline void free_event_entry(struct evt_entry *e) -{ - kfree(e); -} - -static struct evt_entry *get_event_entry(void) -{ - struct evt_entry *e; - - if (list_empty(&wm_event.freeq)) { - e = alloc_event_entry(); - } else { - e = list_entry(wm_event.freeq.next, struct evt_entry, list); - list_del(&e->list); - } - - return e; -} - -static void put_event_entry(struct evt_entry *e) -{ - BUG_ON(!e); - - list_add_tail(&e->list, &wm_event.freeq); -} - -static void __gdm_wimax_event_send(struct work_struct *work) -{ - int idx; - unsigned long flags; - struct evt_entry *e; - - spin_lock_irqsave(&wm_event.evt_lock, flags); - - while (!list_empty(&wm_event.evtq)) { - e = list_entry(wm_event.evtq.next, struct evt_entry, list); - spin_unlock_irqrestore(&wm_event.evt_lock, flags); - - if (sscanf(e->dev->name, "wm%d", &idx) == 1) - netlink_send(wm_event.sock, idx, 0, e->evt_data, - e->size); - - spin_lock_irqsave(&wm_event.evt_lock, flags); - list_del(&e->list); - put_event_entry(e); - } - - spin_unlock_irqrestore(&wm_event.evt_lock, flags); -} - static int gdm_wimax_event_send(struct net_device *dev, char *buf, int size) { struct evt_entry *e; @@ -433,6 +424,22 @@ static int gdm_wimax_set_mac_addr(struct net_device *dev, void *p) return 0; } +static void gdm_wimax_ind_if_updown(struct net_device *dev, int if_up) +{ + u16 buf[32 / sizeof(u16)]; + struct hci_s *hci = (struct hci_s *)buf; + unsigned char up_down; + + up_down = if_up ? WIMAX_IF_UP : WIMAX_IF_DOWN; + + /* Indicate updating fsm */ + hci->cmd_evt = cpu_to_be16(WIMAX_IF_UPDOWN); + hci->length = cpu_to_be16(sizeof(up_down)); + hci->data[0] = up_down; + + gdm_wimax_event_send(dev, (char *)hci, HCI_HEADER_SIZE+sizeof(up_down)); +} + static int gdm_wimax_open(struct net_device *dev) { struct nic *nic = netdev_priv(dev); @@ -515,6 +522,20 @@ static void gdm_wimax_cleanup_ioctl(struct net_device *dev) kdelete(&nic->sdk_data[i].buf); } +static void gdm_wimax_ind_fsm_update(struct net_device *dev, struct fsm_s *fsm) +{ + u16 buf[32 / sizeof(u16)]; + struct hci_s *hci = (struct hci_s *)buf; + + /* Indicate updating fsm */ + hci->cmd_evt = cpu_to_be16(WIMAX_FSM_UPDATE); + hci->length = cpu_to_be16(sizeof(struct fsm_s)); + memcpy(&hci->data[0], fsm, sizeof(struct fsm_s)); + + gdm_wimax_event_send(dev, (char *)hci, + HCI_HEADER_SIZE + sizeof(struct fsm_s)); +} + static void gdm_update_fsm(struct net_device *dev, struct fsm_s *new_fsm) { struct nic *nic = netdev_priv(dev); @@ -789,36 +810,6 @@ static void gdm_wimax_transmit_pkt(struct net_device *dev, char *buf, int len) } } -static void gdm_wimax_ind_fsm_update(struct net_device *dev, struct fsm_s *fsm) -{ - u16 buf[32 / sizeof(u16)]; - struct hci_s *hci = (struct hci_s *)buf; - - /* Indicate updating fsm */ - hci->cmd_evt = cpu_to_be16(WIMAX_FSM_UPDATE); - hci->length = cpu_to_be16(sizeof(struct fsm_s)); - memcpy(&hci->data[0], fsm, sizeof(struct fsm_s)); - - gdm_wimax_event_send(dev, (char *)hci, - HCI_HEADER_SIZE + sizeof(struct fsm_s)); -} - -static void gdm_wimax_ind_if_updown(struct net_device *dev, int if_up) -{ - u16 buf[32 / sizeof(u16)]; - struct hci_s *hci = (struct hci_s *)buf; - unsigned char up_down; - - up_down = if_up ? WIMAX_IF_UP : WIMAX_IF_DOWN; - - /* Indicate updating fsm */ - hci->cmd_evt = cpu_to_be16(WIMAX_IF_UPDOWN); - hci->length = cpu_to_be16(sizeof(up_down)); - hci->data[0] = up_down; - - gdm_wimax_event_send(dev, (char *)hci, HCI_HEADER_SIZE+sizeof(up_down)); -} - static void rx_complete(void *arg, void *data, int len) { struct nic *nic = arg; -- cgit From d13778d537a0ed6115d2a79a942af999cfb8eec6 Mon Sep 17 00:00:00 2001 From: Stephen Rothwell Date: Fri, 20 Jun 2014 14:14:17 +1000 Subject: staging: board: disable as it breaks the build Cc: Magnus Damm Signed-off-by: Stephen Rothwell Signed-off-by: Greg Kroah-Hartman --- drivers/staging/board/Kconfig | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/board/Kconfig b/drivers/staging/board/Kconfig index 09d94b48c9c9..7eda0b8b7aab 100644 --- a/drivers/staging/board/Kconfig +++ b/drivers/staging/board/Kconfig @@ -1,6 +1,7 @@ config STAGING_BOARD boolean "Staging Board Support" depends on OF_ADDRESS + depends on BROKEN help Select to enable per-board staging support code. -- cgit From 82a5e7f98f9a1e05d12b47b15c3f550564b877ae Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:45 +0200 Subject: staging: ced1401: remove typedef for TRANSAREA Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 21 ++++++++++++--------- drivers/staging/ced1401/usb1401.c | 9 ++++++--- drivers/staging/ced1401/usb1401.h | 6 +++--- 3 files changed, 21 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 36cf974c106a..f6f681f2b9b7 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -593,7 +593,8 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) dev_err(&pdx->interface->dev, "%s: Attempt to clear area %d\n", __func__, nArea); } else { - TRANSAREA *pTA = &pdx->rTransDef[nArea]; /* to save typing */ + /* to save typing */ + struct transarea *pTA = &pdx->rTransDef[nArea]; if (!pTA->bUsed) /* if not used... */ iReturn = U14ERR_NOTSET; /* ...nothing to be done */ else { @@ -622,10 +623,10 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) && (pdx->rDMAInfo.wIdent == nArea)) pdx->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ - /* Clean out the TRANSAREA except for the wait queue, which is at the end */ + /* Clean out the struct transarea except for the wait queue, which is at the end */ /* This sets bUsed to false and dwEventSz to 0 to say area not used and no events. */ memset(pTA, 0, - sizeof(TRANSAREA) - + sizeof(struct transarea) - sizeof(wait_queue_head_t)); } spin_unlock_irq(&pdx->stagedLock); @@ -670,7 +671,7 @@ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, unsigned int ulOffset = ((unsigned long)puBuf) & (PAGE_SIZE - 1); int len = (dwLength + ulOffset + PAGE_SIZE - 1) >> PAGE_SHIFT; - TRANSAREA *pTA = &pdx->rTransDef[nArea]; /* to save typing */ + struct transarea *pTA = &pdx->rTransDef[nArea]; /* to save typing */ struct page **pPages = NULL; /* space for page tables */ int nPages = 0; /* and number of pages */ @@ -791,7 +792,7 @@ int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ return U14ERR_BADAREA; else { - TRANSAREA *pTA = &pdx->rTransDef[te.wAreaNum]; + struct transarea *pTA = &pdx->rTransDef[te.wAreaNum]; mutex_lock(&pdx->io_mutex); /* make sure we have no competitor */ spin_lock_irq(&pdx->stagedLock); if (pTA->bUsed) { /* area must be in use */ @@ -821,7 +822,7 @@ int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) return U14ERR_BADAREA; else { int iWait; - TRANSAREA *pTA = &pdx->rTransDef[nArea]; + struct transarea *pTA = &pdx->rTransDef[nArea]; msTimeOut = (msTimeOut * HZ + 999) / 1000; /* convert timeout to jiffies */ /* We cannot wait holding the mutex, but we check the flags while holding */ @@ -867,7 +868,7 @@ int ced_test_event(DEVICE_EXTENSION *pdx, int nArea) if ((unsigned)nArea >= MAX_TRANSAREAS) iReturn = U14ERR_BADAREA; else { - TRANSAREA *pTA = &pdx->rTransDef[nArea]; + struct transarea *pTA = &pdx->rTransDef[nArea]; mutex_lock(&pdx->io_mutex); /* make sure we have no competitor */ spin_lock_irq(&pdx->stagedLock); iReturn = pTA->iWakeUp; /* get wakeup count since last call */ @@ -1354,7 +1355,8 @@ int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) cb.dwSize = 0; if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ - TRANSAREA *pArea = &pdx->rTransDef[nArea]; /* Pointer to relevant info */ + /* Pointer to relevant info */ + struct transarea *pArea = &pdx->rTransDef[nArea]; spin_lock_irq(&pdx->stagedLock); /* Lock others out */ if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ @@ -1405,7 +1407,8 @@ int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) cb.dwSize = 0; if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ - TRANSAREA *pArea = &pdx->rTransDef[nArea]; /* Pointer to relevant info */ + /* Pointer to relevant info */ + struct transarea *pArea = &pdx->rTransDef[nArea]; spin_lock_irq(&pdx->stagedLock); /* Lock others out */ if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index b44140f2e225..ee16353719ab 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -441,7 +441,8 @@ static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) { unsigned int nArea = pdx->StagedId; if (nArea < MAX_TRANSAREAS) { - TRANSAREA *pArea = &pdx->rTransDef[nArea]; /* area to be used */ + /* area to be used */ + struct transarea *pArea = &pdx->rTransDef[nArea]; unsigned int dwOffset = pdx->StagedDone + pdx->StagedOffset + pArea->dwBaseOffset; char *pCoherBuf = pdx->pCoherStagedIO; /* coherent buffer */ @@ -541,7 +542,8 @@ static void staged_callback(struct urb *pUrb) if ((pdx->StagedDone == pdx->StagedLength) || /* If no more to do */ (bCancel)) { /* or this IRP was cancelled */ - TRANSAREA *pArea = &pdx->rTransDef[pdx->StagedId]; /* Transfer area info */ + /* Transfer area info */ + struct transarea *pArea = &pdx->rTransDef[pdx->StagedId]; dev_dbg(&pdx->interface->dev, "%s: transfer done, bytes %d, cancel %d\n", __func__, pdx->StagedDone, bCancel); @@ -761,7 +763,8 @@ static int ced_stage_chunk(DEVICE_EXTENSION *pdx) int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen) { - TRANSAREA *pArea = &pdx->rTransDef[wIdent]; /* Transfer area info */ + /* Transfer area info */ + struct transarea *pArea = &pdx->rTransDef[wIdent]; if (!can_accept_io_requests(pdx)) { /* Are we in a state to accept new requests? */ dev_err(&pdx->interface->dev, "%s: can't accept requests\n", diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 5e1d24ea77a2..689251dc0959 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -101,7 +101,7 @@ struct circ_blk { /* A structure holding all of the information about a transfer area - an area of */ /* memory set up for use either as a source or destination in DMA transfers. */ -typedef struct transarea { +struct transarea { void __user *lpvBuff; /* User address of xfer area saved for completeness */ UINT dwBaseOffset; /* offset to start of xfer area in first page */ UINT dwLength; /* Length of xfer area, in bytes */ @@ -116,7 +116,7 @@ typedef struct transarea { UINT dwEventSz; /* ...notification by the event SZ is 0 if unset */ struct circ_blk aBlocks[2]; /* Info on a pair of circular blocks */ wait_queue_head_t wqEvent; /* The wait queue for events in this area MUST BE LAST */ -} TRANSAREA; +}; /* The DMADESC structure is used to hold information on the transfer in progress. It */ /* is set up by ReadDMAInfo, using information sent by the 1401 in an escape sequence. */ @@ -156,7 +156,7 @@ typedef struct _DEVICE_EXTENSION { __u8 bInterval; /* Interrupt end point interval */ volatile unsigned int dwDMAFlag; /* state of DMA */ - TRANSAREA rTransDef[MAX_TRANSAREAS];/* transfer area info */ + struct transarea rTransDef[MAX_TRANSAREAS]; /* transfer area info */ volatile DMADESC rDMAInfo; /* info on current DMA transfer */ volatile bool bXFerWaiting; /* Flag set if DMA transfer stalled */ volatile bool bInDrawDown; /* Flag that we want to halt transfers */ -- cgit From 70bc3dbedb0e4d67b7d3842187958595140b56f5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:46 +0200 Subject: staging: ced1401: remove typedef for DMADESC Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 5 +++-- drivers/staging/ced1401/usb1401.h | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index ee16353719ab..9cc79a8090d6 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -944,8 +944,9 @@ static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, ** we start handling the data at offset zero. ** *****************************************************************************/ -static bool ced_read_dma_info(volatile DMADESC *pDmaDesc, DEVICE_EXTENSION *pdx, - char *pBuf, unsigned int dwCount) +static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, + DEVICE_EXTENSION *pdx, + char *pBuf, unsigned int dwCount) { bool bResult = false; /* assume we won't succeed */ unsigned char ucData; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 689251dc0959..d269d83c3fc3 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -120,13 +120,13 @@ struct transarea { /* The DMADESC structure is used to hold information on the transfer in progress. It */ /* is set up by ReadDMAInfo, using information sent by the 1401 in an escape sequence. */ -typedef struct dmadesc { +struct dmadesc { unsigned short wTransType; /* transfer type as TM_xxx above */ unsigned short wIdent; /* identifier word */ unsigned int dwSize; /* bytes to transfer */ unsigned int dwOffset; /* offset into transfer area for trans */ bool bOutWard; /* true when data is going TO 1401 */ -} DMADESC; +}; #define INBUF_SZ 256 /* input buffer size */ #define OUTBUF_SZ 256 /* output buffer size */ @@ -157,7 +157,7 @@ typedef struct _DEVICE_EXTENSION { volatile unsigned int dwDMAFlag; /* state of DMA */ struct transarea rTransDef[MAX_TRANSAREAS]; /* transfer area info */ - volatile DMADESC rDMAInfo; /* info on current DMA transfer */ + volatile struct dmadesc rDMAInfo; /* info on current DMA transfer */ volatile bool bXFerWaiting; /* Flag set if DMA transfer stalled */ volatile bool bInDrawDown; /* Flag that we want to halt transfers */ -- cgit From 1cc7b53c62fca85ab36cb85167216cb8b2b224e3 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:47 +0200 Subject: staging: ced1401: remove typedef DEVICE_EXTENSION Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 698 ++++++++++++++--------------- drivers/staging/ced1401/usb1401.c | 894 +++++++++++++++++++------------------- drivers/staging/ced1401/usb1401.h | 79 ++-- 3 files changed, 836 insertions(+), 835 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index f6f681f2b9b7..982112155279 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -36,19 +36,19 @@ ** ** Empties the Output buffer and sets int lines. Used from user level only ****************************************************************************/ -static void ced_flush_out_buff(DEVICE_EXTENSION *pdx) +static void ced_flush_out_buff(struct ced_data *ced) { - dev_dbg(&pdx->interface->dev, "%s: currentState=%d\n", - __func__, pdx->sCurrentState); - if (pdx->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ + dev_dbg(&ced->interface->dev, "%s: currentState=%d\n", + __func__, ced->sCurrentState); + if (ced->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ return; /* Kill off any pending I/O */ - /* CharSend_Cancel(pdx); */ - spin_lock_irq(&pdx->charOutLock); - pdx->dwNumOutput = 0; - pdx->dwOutBuffGet = 0; - pdx->dwOutBuffPut = 0; - spin_unlock_irq(&pdx->charOutLock); + /* CharSend_Cancel(ced); */ + spin_lock_irq(&ced->charOutLock); + ced->dwNumOutput = 0; + ced->dwOutBuffGet = 0; + ced->dwOutBuffPut = 0; + spin_unlock_irq(&ced->charOutLock); } /**************************************************************************** @@ -57,19 +57,19 @@ static void ced_flush_out_buff(DEVICE_EXTENSION *pdx) ** ** Empties the input buffer and sets int lines ****************************************************************************/ -static void ced_flush_in_buff(DEVICE_EXTENSION *pdx) +static void ced_flush_in_buff(struct ced_data *ced) { - dev_dbg(&pdx->interface->dev, "%s: currentState=%d\n", - __func__, pdx->sCurrentState); - if (pdx->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ + dev_dbg(&ced->interface->dev, "%s: currentState=%d\n", + __func__, ced->sCurrentState); + if (ced->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ return; /* Kill off any pending I/O */ /* CharRead_Cancel(pDevObject); */ - spin_lock_irq(&pdx->charInLock); - pdx->dwNumInput = 0; - pdx->dwInBuffGet = 0; - pdx->dwInBuffPut = 0; - spin_unlock_irq(&pdx->charInLock); + spin_lock_irq(&ced->charInLock); + ced->dwNumInput = 0; + ced->dwInBuffGet = 0; + ced->dwInBuffPut = 0; + spin_unlock_irq(&ced->charInLock); } /**************************************************************************** @@ -78,24 +78,24 @@ static void ced_flush_in_buff(DEVICE_EXTENSION *pdx) ** Utility routine to copy chars into the output buffer and fire them off. ** called from user mode, holds charOutLock. ****************************************************************************/ -static int ced_put_chars(DEVICE_EXTENSION *pdx, const char *pCh, +static int ced_put_chars(struct ced_data *ced, const char *pCh, unsigned int uCount) { int iReturn; - spin_lock_irq(&pdx->charOutLock); /* get the output spin lock */ - if ((OUTBUF_SZ - pdx->dwNumOutput) >= uCount) { + spin_lock_irq(&ced->charOutLock); /* get the output spin lock */ + if ((OUTBUF_SZ - ced->dwNumOutput) >= uCount) { unsigned int u; for (u = 0; u < uCount; u++) { - pdx->outputBuffer[pdx->dwOutBuffPut++] = pCh[u]; - if (pdx->dwOutBuffPut >= OUTBUF_SZ) - pdx->dwOutBuffPut = 0; + ced->outputBuffer[ced->dwOutBuffPut++] = pCh[u]; + if (ced->dwOutBuffPut >= OUTBUF_SZ) + ced->dwOutBuffPut = 0; } - pdx->dwNumOutput += uCount; - spin_unlock_irq(&pdx->charOutLock); - iReturn = ced_send_chars(pdx); /* ...give a chance to transmit data */ + ced->dwNumOutput += uCount; + spin_unlock_irq(&ced->charOutLock); + iReturn = ced_send_chars(ced); /* ...give a chance to transmit data */ } else { iReturn = U14ERR_NOOUT; /* no room at the out (ha-ha) */ - spin_unlock_irq(&pdx->charOutLock); + spin_unlock_irq(&ced->charOutLock); } return iReturn; } @@ -105,7 +105,7 @@ static int ced_put_chars(DEVICE_EXTENSION *pdx, const char *pCh, ** trigger an output transfer if this is appropriate. User mode. ** Holds the io_mutex *****************************************************************************/ -int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, +int ced_send_string(struct ced_data *ced, const char __user *pData, unsigned int n) { int iReturn = U14ERR_NOERROR; /* assume all will be well */ @@ -116,15 +116,15 @@ int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, return -EFAULT; buffer[n] = 0; /* terminate for debug purposes */ - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ if (n > 0) { /* do nothing if nowt to do! */ - dev_dbg(&pdx->interface->dev, "%s: n=%d>%s<\n", + dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, n, buffer); - iReturn = ced_put_chars(pdx, buffer, n); + iReturn = ced_put_chars(ced, buffer, n); } - ced_allowi(pdx); /* make sure we have input int */ - mutex_unlock(&pdx->io_mutex); + ced_allowi(ced); /* make sure we have input int */ + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -134,14 +134,14 @@ int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, ** ** Sends a single character to the 1401. User mode, holds io_mutex. ****************************************************************************/ -int ced_send_char(DEVICE_EXTENSION *pdx, char c) +int ced_send_char(struct ced_data *ced, char c) { int iReturn; - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - iReturn = ced_put_chars(pdx, &c, 1); - dev_dbg(&pdx->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); - ced_allowi(pdx); /* Make sure char reads are running */ - mutex_unlock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + iReturn = ced_put_chars(ced, &c, 1); + dev_dbg(&ced->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); + ced_allowi(ced); /* Make sure char reads are running */ + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -171,46 +171,46 @@ int ced_send_char(DEVICE_EXTENSION *pdx, char c) ** ** return error code (U14ERR_NOERROR for OK) */ -int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error) +int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) { int nGot; - dev_dbg(&pdx->interface->dev, "%s: entry\n", __func__); + dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); *state = 0xFFFFFFFF; /* Start off with invalid state */ - nGot = usb_control_msg(pdx->udev, usb_rcvctrlpipe(pdx->udev, 0), + nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), GET_STATUS, (D_TO_H | VENDOR | DEVREQ), 0, 0, - pdx->statBuf, sizeof(pdx->statBuf), HZ); - if (nGot != sizeof(pdx->statBuf)) { - dev_err(&pdx->interface->dev, + ced->statBuf, sizeof(ced->statBuf), HZ); + if (nGot != sizeof(ced->statBuf)) { + dev_err(&ced->interface->dev, "%s: FAILED, return code %d\n", __func__, nGot); - pdx->sCurrentState = U14ERR_TIME; /* Indicate that things are very wrong indeed */ + ced->sCurrentState = U14ERR_TIME; /* Indicate that things are very wrong indeed */ *state = 0; /* Force status values to a known state */ *error = 0; } else { int nDevice; - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: Success, state: 0x%x, 0x%x\n", - __func__, pdx->statBuf[0], pdx->statBuf[1]); + __func__, ced->statBuf[0], ced->statBuf[1]); - *state = pdx->statBuf[0]; /* Return the state values to the calling code */ - *error = pdx->statBuf[1]; + *state = ced->statBuf[0]; /* Return the state values to the calling code */ + *error = ced->statBuf[1]; - nDevice = pdx->udev->descriptor.bcdDevice >> 8; /* 1401 type code value */ + nDevice = ced->udev->descriptor.bcdDevice >> 8; /* 1401 type code value */ switch (nDevice) { /* so we can clean up current state */ case 0: - pdx->sCurrentState = U14ERR_U1401; + ced->sCurrentState = U14ERR_U1401; break; default: /* allow lots of device codes for future 1401s */ if ((nDevice >= 1) && (nDevice <= 23)) - pdx->sCurrentState = (short)(nDevice + 6); + ced->sCurrentState = (short)(nDevice + 6); else - pdx->sCurrentState = U14ERR_ILL; + ced->sCurrentState = U14ERR_ILL; break; } } - return pdx->sCurrentState >= 0 ? U14ERR_NOERROR : pdx->sCurrentState; + return ced->sCurrentState >= 0 ? U14ERR_NOERROR : ced->sCurrentState; } /**************************************************************************** @@ -218,39 +218,39 @@ int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error) ** ** Kills off staged read\write request from the USB if one is pending. ****************************************************************************/ -int ced_read_write_cancel(DEVICE_EXTENSION *pdx) +int ced_read_write_cancel(struct ced_data *ced) { - dev_dbg(&pdx->interface->dev, "%s: entry %d\n", - __func__, pdx->bStagedUrbPending); + dev_dbg(&ced->interface->dev, "%s: entry %d\n", + __func__, ced->bStagedUrbPending); #ifdef NOT_WRITTEN_YET int ntStatus = STATUS_SUCCESS; bool bResult = false; unsigned int i; /* We can fill this in when we know how we will implement the staged transfer stuff */ - spin_lock_irq(&pdx->stagedLock); + spin_lock_irq(&ced->stagedLock); - if (pdx->bStagedUrbPending) { /* anything to be cancelled? May need more... */ - dev_info(&pdx->interface - dev, + if (ced->bStagedUrbPending) { /* anything to be cancelled? May need more... */ + dev_info(&ced->interface - dev, "ced_read_write_cancel about to cancel Urb\n"); /* Clear the staging done flag */ - /* KeClearEvent(&pdx->StagingDoneEvent); */ - USB_ASSERT(pdx->pStagedIrp != NULL); + /* KeClearEvent(&ced->StagingDoneEvent); */ + USB_ASSERT(ced->pStagedIrp != NULL); /* Release the spinlock first otherwise the completion routine may hang */ /* on the spinlock while this function hands waiting for the event. */ - spin_unlock_irq(&pdx->stagedLock); - bResult = IoCancelIrp(pdx->pStagedIrp); /* Actually do the cancel */ + spin_unlock_irq(&ced->stagedLock); + bResult = IoCancelIrp(ced->pStagedIrp); /* Actually do the cancel */ if (bResult) { LARGE_INTEGER timeout; timeout.QuadPart = -10000000; /* Use a timeout of 1 second */ - dev_info(&pdx->interface - dev, + dev_info(&ced->interface - dev, "%s: about to wait till done\n", __func__); ntStatus = - KeWaitForSingleObject(&pdx->StagingDoneEvent, + KeWaitForSingleObject(&ced->StagingDoneEvent, Executive, KernelMode, FALSE, &timeout); } else { - dev_info(&pdx->interface - dev, + dev_info(&ced->interface - dev, "%s: cancellation failed\n", __func__); ntStatus = U14ERR_FAIL; } @@ -258,9 +258,9 @@ int ced_read_write_cancel(DEVICE_EXTENSION *pdx) ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", ntStatus, ntStatus)); } else - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); - dev_info(&pdx->interface - dev, "%s: done\n", __func__); + dev_info(&ced->interface - dev, "%s: done\n", __func__); return ntStatus; #else return U14ERR_NOERROR; @@ -272,10 +272,10 @@ int ced_read_write_cancel(DEVICE_EXTENSION *pdx) ** ced_in_self_test - utility to check in self test. Return 1 for ST, 0 for not or ** a -ve error code if we failed for some reason. ***************************************************************************/ -static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) +static int ced_in_self_test(struct ced_data *ced, unsigned int *pState) { unsigned int state, error; - int iReturn = ced_get_state(pdx, &state, &error); /* see if in self-test */ + int iReturn = ced_get_state(ced, &state, &error); /* see if in self-test */ if (iReturn == U14ERR_NOERROR) /* if all still OK */ iReturn = (state == (unsigned int)-1) || /* TX problem or... */ ((state & 0xff) == 0x80); /* ...self test */ @@ -301,37 +301,37 @@ static int ced_in_self_test(DEVICE_EXTENSION *pdx, unsigned int *pState) ** ** Returns TRUE if a 1401 detected and OK, else FALSE ****************************************************************************/ -static bool ced_is_1401(DEVICE_EXTENSION *pdx) +static bool ced_is_1401(struct ced_data *ced) { int iReturn; - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + dev_dbg(&ced->interface->dev, "%s\n", __func__); - ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ - ced_flush_in_buff(pdx); /* Clear out input buffer & pipe */ - ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ + ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ + ced_flush_in_buff(ced); /* Clear out input buffer & pipe */ + ced_flush_out_buff(ced); /* Clear output buffer & pipe */ /* The next call returns 0 if OK, but has returned 1 in the past, meaning that */ /* usb_unlock_device() is needed... now it always is */ - iReturn = usb_lock_device_for_reset(pdx->udev, pdx->interface); + iReturn = usb_lock_device_for_reset(ced->udev, ced->interface); /* release the io_mutex because if we don't, we will deadlock due to system */ /* calls back into the driver. */ - mutex_unlock(&pdx->io_mutex); /* locked, so we will not get system calls */ + mutex_unlock(&ced->io_mutex); /* locked, so we will not get system calls */ if (iReturn >= 0) { /* if we failed */ - iReturn = usb_reset_device(pdx->udev); /* try to do the reset */ - usb_unlock_device(pdx->udev); /* undo the lock */ + iReturn = usb_reset_device(ced->udev); /* try to do the reset */ + usb_unlock_device(ced->udev); /* undo the lock */ } - mutex_lock(&pdx->io_mutex); /* hold stuff off while we wait */ - pdx->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flag regardless! */ + mutex_lock(&ced->io_mutex); /* hold stuff off while we wait */ + ced->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flag regardless! */ if (iReturn == 0) { /* if all is OK still */ unsigned int state; - iReturn = ced_in_self_test(pdx, &state); /* see if likely in self test */ + iReturn = ced_in_self_test(ced, &state); /* see if likely in self test */ if (iReturn > 0) { /* do we need to wait for self-test? */ unsigned long ulTimeOut = jiffies + 30 * HZ; /* when to give up */ while ((iReturn > 0) && time_before(jiffies, ulTimeOut)) { schedule(); /* let other stuff run */ - iReturn = ced_in_self_test(pdx, &state); /* see if done yet */ + iReturn = ced_in_self_test(ced, &state); /* see if done yet */ } } @@ -339,7 +339,7 @@ static bool ced_is_1401(DEVICE_EXTENSION *pdx) iReturn = state == 0; /* then success is that the state is 0 */ } else iReturn = 0; /* we failed */ - pdx->bForceReset = false; /* Clear forced reset flag now */ + ced->bForceReset = false; /* Clear forced reset flag now */ return iReturn > 0; } @@ -358,42 +358,42 @@ static bool ced_is_1401(DEVICE_EXTENSION *pdx) ** ** The return value is TRUE if a useable 1401 is found, FALSE if not */ -static bool ced_quick_check(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanReset) +static bool ced_quick_check(struct ced_data *ced, bool bTestBuff, bool bCanReset) { bool bRet = false; /* assume it will fail and we will reset */ bool bShortTest; - bShortTest = ((pdx->dwDMAFlag == MODE_CHAR) && /* no DMA running */ - (!pdx->bForceReset) && /* Not had a real reset forced */ - (pdx->sCurrentState >= U14ERR_STD)); /* No 1401 errors stored */ + bShortTest = ((ced->dwDMAFlag == MODE_CHAR) && /* no DMA running */ + (!ced->bForceReset) && /* Not had a real reset forced */ + (ced->sCurrentState >= U14ERR_STD)); /* No 1401 errors stored */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: DMAFlag:%d, state:%d, force:%d, testBuff:%d, short:%d\n", - __func__, pdx->dwDMAFlag, pdx->sCurrentState, pdx->bForceReset, + __func__, ced->dwDMAFlag, ced->sCurrentState, ced->bForceReset, bTestBuff, bShortTest); if ((bTestBuff) && /* Buffer check requested, and... */ - (pdx->dwNumInput || pdx->dwNumOutput)) { /* ...characters were in the buffer? */ + (ced->dwNumInput || ced->dwNumOutput)) { /* ...characters were in the buffer? */ bShortTest = false; /* Then do the full test */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: will reset as buffers not empty\n", __func__); } if (bShortTest || !bCanReset) { /* Still OK to try the short test? */ /* Always test if no reset - we want state update */ unsigned int state, error; - dev_dbg(&pdx->interface->dev, "%s: ced_get_state\n", __func__); - if (ced_get_state(pdx, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ + dev_dbg(&ced->interface->dev, "%s: ced_get_state\n", __func__); + if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ if ((state & 0xFF) == 0) /* If call worked, check the status value */ bRet = true; /* If that was zero, all is OK, no reset needed */ } } if (!bRet && bCanReset) { /* If all not OK, then */ - dev_info(&pdx->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", - __func__, bShortTest, pdx->sCurrentState, bTestBuff, - pdx->bForceReset); - bRet = ced_is_1401(pdx); /* do full test */ + dev_info(&ced->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", + __func__, bShortTest, ced->sCurrentState, bTestBuff, + ced->bForceReset); + bRet = ced_is_1401(ced); /* do full test */ } return bRet; @@ -404,13 +404,13 @@ static bool ced_quick_check(DEVICE_EXTENSION *pdx, bool bTestBuff, bool bCanRese ** ** Resets the 1401 and empties the i/o buffers *****************************************************************************/ -int ced_reset(DEVICE_EXTENSION *pdx) +int ced_reset(struct ced_data *ced) { - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - dev_dbg(&pdx->interface->dev, "%s: About to call ced_quick_check\n", + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + dev_dbg(&ced->interface->dev, "%s: About to call ced_quick_check\n", __func__); - ced_quick_check(pdx, true, true); /* Check 1401, reset if not OK */ - mutex_unlock(&pdx->io_mutex); + ced_quick_check(ced, true, true); /* Check 1401, reset if not OK */ + mutex_unlock(&ced->io_mutex); return U14ERR_NOERROR; } @@ -419,29 +419,29 @@ int ced_reset(DEVICE_EXTENSION *pdx) ** ** Gets a single character from the 1401 ****************************************************************************/ -int ced_get_char(DEVICE_EXTENSION *pdx) +int ced_get_char(struct ced_data *ced) { int iReturn = U14ERR_NOIN; /* assume we will get nothing */ - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + dev_dbg(&ced->interface->dev, "%s\n", __func__); - ced_allowi(pdx); /* Make sure char reads are running */ - ced_send_chars(pdx); /* and send any buffered chars */ + ced_allowi(ced); /* Make sure char reads are running */ + ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&pdx->charInLock); - if (pdx->dwNumInput > 0) { /* worth looking */ - iReturn = pdx->inputBuffer[pdx->dwInBuffGet++]; - if (pdx->dwInBuffGet >= INBUF_SZ) - pdx->dwInBuffGet = 0; - pdx->dwNumInput--; + spin_lock_irq(&ced->charInLock); + if (ced->dwNumInput > 0) { /* worth looking */ + iReturn = ced->inputBuffer[ced->dwInBuffGet++]; + if (ced->dwInBuffGet >= INBUF_SZ) + ced->dwInBuffGet = 0; + ced->dwNumInput--; } else iReturn = U14ERR_NOIN; /* no input data to read */ - spin_unlock_irq(&pdx->charInLock); + spin_unlock_irq(&ced->charInLock); - ced_allowi(pdx); /* Make sure char reads are running */ + ced_allowi(ced); /* Make sure char reads are running */ - mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -456,19 +456,19 @@ int ced_get_char(DEVICE_EXTENSION *pdx) ** returns the count of characters (including the terminator, or 0 if none ** or a negative error code. ****************************************************************************/ -int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) +int ced_get_string(struct ced_data *ced, char __user *pUser, int n) { int nAvailable; /* character in the buffer */ int iReturn = U14ERR_NOIN; if (n <= 0) return -ENOMEM; - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(pdx); /* Make sure char reads are running */ - ced_send_chars(pdx); /* and send any buffered chars */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + ced_allowi(ced); /* Make sure char reads are running */ + ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&pdx->charInLock); - nAvailable = pdx->dwNumInput; /* characters available now */ + spin_lock_irq(&ced->charInLock); + nAvailable = ced->dwNumInput; /* characters available now */ if (nAvailable > n) /* read max of space in pUser... */ nAvailable = n; /* ...or input characters */ @@ -478,12 +478,12 @@ int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) int nCopyToUser; /* number to copy to user */ char cData; do { - cData = pdx->inputBuffer[pdx->dwInBuffGet++]; + cData = ced->inputBuffer[ced->dwInBuffGet++]; if (cData == CR_CHAR) /* replace CR with zero */ cData = (char)0; - if (pdx->dwInBuffGet >= INBUF_SZ) - pdx->dwInBuffGet = 0; /* wrap buffer pointer */ + if (ced->dwInBuffGet >= INBUF_SZ) + ced->dwInBuffGet = 0; /* wrap buffer pointer */ buffer[nGot++] = cData; /* save the output */ } while ((nGot < nAvailable) && cData); @@ -495,20 +495,20 @@ int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) ++nCopyToUser; /* ...copy the 0 as well. */ } - pdx->dwNumInput -= nGot; - spin_unlock_irq(&pdx->charInLock); + ced->dwNumInput -= nGot; + spin_unlock_irq(&ced->charInLock); - dev_dbg(&pdx->interface->dev, "%s: read %d characters >%s<\n", + dev_dbg(&ced->interface->dev, "%s: read %d characters >%s<\n", __func__, nGot, buffer); if (copy_to_user(pUser, buffer, nCopyToUser)) iReturn = -EFAULT; else iReturn = nGot; /* report characters read */ } else - spin_unlock_irq(&pdx->charInLock); + spin_unlock_irq(&ced->charInLock); - ced_allowi(pdx); /* Make sure char reads are running */ - mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + ced_allowi(ced); /* Make sure char reads are running */ + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -516,14 +516,14 @@ int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n) /******************************************************************************* ** Get count of characters in the inout buffer. *******************************************************************************/ -int ced_stat_1401(DEVICE_EXTENSION *pdx) +int ced_stat_1401(struct ced_data *ced) { int iReturn; - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(pdx); /* make sure we allow pending chars */ - ced_send_chars(pdx); /* in both directions */ - iReturn = pdx->dwNumInput; /* no lock as single read */ - mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + ced_allowi(ced); /* make sure we allow pending chars */ + ced_send_chars(ced); /* in both directions */ + iReturn = ced->dwNumInput; /* no lock as single read */ + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -534,20 +534,20 @@ int ced_stat_1401(DEVICE_EXTENSION *pdx) ** any fancy interlocks as we only read the interrupt routine data, and the ** system is arranged so nothing can be destroyed. ****************************************************************************/ -int ced_line_count(DEVICE_EXTENSION *pdx) +int ced_line_count(struct ced_data *ced) { int iReturn = 0; /* will be count of line ends */ - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(pdx); /* Make sure char reads are running */ - ced_send_chars(pdx); /* and send any buffered chars */ - spin_lock_irq(&pdx->charInLock); /* Get protection */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + ced_allowi(ced); /* Make sure char reads are running */ + ced_send_chars(ced); /* and send any buffered chars */ + spin_lock_irq(&ced->charInLock); /* Get protection */ - if (pdx->dwNumInput > 0) { /* worth looking? */ - unsigned int dwIndex = pdx->dwInBuffGet; /* start at first available */ - unsigned int dwEnd = pdx->dwInBuffPut; /* Position for search end */ + if (ced->dwNumInput > 0) { /* worth looking? */ + unsigned int dwIndex = ced->dwInBuffGet; /* start at first available */ + unsigned int dwEnd = ced->dwInBuffPut; /* Position for search end */ do { - if (pdx->inputBuffer[dwIndex++] == CR_CHAR) + if (ced->inputBuffer[dwIndex++] == CR_CHAR) ++iReturn; /* inc count if CR */ if (dwIndex >= INBUF_SZ) /* see if we fall off buff */ @@ -555,9 +555,9 @@ int ced_line_count(DEVICE_EXTENSION *pdx) } while (dwIndex != dwEnd); /* go to last available */ } - spin_unlock_irq(&pdx->charInLock); - dev_dbg(&pdx->interface->dev, "%s: returned %d\n", __func__, iReturn); - mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + spin_unlock_irq(&ced->charInLock); + dev_dbg(&ced->interface->dev, "%s: returned %d\n", __func__, iReturn); + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -566,14 +566,14 @@ int ced_line_count(DEVICE_EXTENSION *pdx) ** ** Gets the space in the output buffer. Called from user code. *****************************************************************************/ -int ced_get_out_buf_space(DEVICE_EXTENSION *pdx) +int ced_get_out_buf_space(struct ced_data *ced) { int iReturn; - mutex_lock(&pdx->io_mutex); /* Protect disconnect from new i/o */ - ced_send_chars(pdx); /* send any buffered chars */ - iReturn = (int)(OUTBUF_SZ - pdx->dwNumOutput); /* no lock needed for single read */ - dev_dbg(&pdx->interface->dev, "%s: %d\n", __func__, iReturn); - mutex_unlock(&pdx->io_mutex); /* Protect disconnect from new i/o */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + ced_send_chars(ced); /* send any buffered chars */ + iReturn = (int)(OUTBUF_SZ - ced->dwNumOutput); /* no lock needed for single read */ + dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -584,17 +584,17 @@ int ced_get_out_buf_space(DEVICE_EXTENSION *pdx) ** Clears up a transfer area. This is always called in the context of a user ** request, never from a call-back. ****************************************************************************/ -int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) +int ced_clear_area(struct ced_data *ced, int nArea) { int iReturn = U14ERR_NOERROR; if ((nArea < 0) || (nArea >= MAX_TRANSAREAS)) { iReturn = U14ERR_BADAREA; - dev_err(&pdx->interface->dev, "%s: Attempt to clear area %d\n", + dev_err(&ced->interface->dev, "%s: Attempt to clear area %d\n", __func__, nArea); } else { /* to save typing */ - struct transarea *pTA = &pdx->rTransDef[nArea]; + struct transarea *pTA = &ced->rTransDef[nArea]; if (!pTA->bUsed) /* if not used... */ iReturn = U14ERR_NOTSET; /* ...nothing to be done */ else { @@ -604,13 +604,13 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) int nPages = 0; /* and number of pages */ int np; - dev_dbg(&pdx->interface->dev, "%s: area %d\n", + dev_dbg(&ced->interface->dev, "%s: area %d\n", __func__, nArea); - spin_lock_irq(&pdx->stagedLock); - if ((pdx->StagedId == nArea) - && (pdx->dwDMAFlag > MODE_CHAR)) { + spin_lock_irq(&ced->stagedLock); + if ((ced->StagedId == nArea) + && (ced->dwDMAFlag > MODE_CHAR)) { iReturn = U14ERR_UNLOCKFAIL; /* cannot delete as in use */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: call on area %d while active\n", __func__, nArea); } else { @@ -619,9 +619,9 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) if (pTA->dwEventSz) /* if events flagging in use */ wake_up_interruptible(&pTA->wqEvent); /* release anything that was waiting */ - if (pdx->bXFerWaiting - && (pdx->rDMAInfo.wIdent == nArea)) - pdx->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ + if (ced->bXFerWaiting + && (ced->rDMAInfo.wIdent == nArea)) + ced->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ /* Clean out the struct transarea except for the wait queue, which is at the end */ /* This sets bUsed to false and dwEventSz to 0 to say area not used and no events. */ @@ -629,13 +629,13 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) sizeof(struct transarea) - sizeof(wait_queue_head_t)); } - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); if (pPages) { /* if we decided to release the memory */ /* Now we must undo the pinning down of the pages. We will assume the worst and mark */ /* all the pages as dirty. Don't be tempted to move this up above as you must not be */ /* holding a spin lock to do this stuff as it is not atomic. */ - dev_dbg(&pdx->interface->dev, "%s: nPages=%d\n", + dev_dbg(&ced->interface->dev, "%s: nPages=%d\n", __func__, nPages); for (np = 0; np < nPages; ++np) { @@ -646,7 +646,7 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) } kfree(pPages); - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: kfree(pPages) done\n", __func__); } } @@ -661,7 +661,7 @@ int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea) ** Sets up a transfer area - the functional part. Called by both ** ced_set_transfer and ced_set_circular. ****************************************************************************/ -static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, +static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, unsigned int dwLength, bool bCircular, bool bCircToHost) { /* Start by working out the page aligned start of the area and the size */ @@ -671,11 +671,11 @@ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, unsigned int ulOffset = ((unsigned long)puBuf) & (PAGE_SIZE - 1); int len = (dwLength + ulOffset + PAGE_SIZE - 1) >> PAGE_SHIFT; - struct transarea *pTA = &pdx->rTransDef[nArea]; /* to save typing */ + struct transarea *pTA = &ced->rTransDef[nArea]; /* to save typing */ struct page **pPages = NULL; /* space for page tables */ int nPages = 0; /* and number of pages */ - int iReturn = ced_clear_area(pdx, nArea); /* see if OK to use this area */ + int iReturn = ced_clear_area(ced, nArea); /* see if OK to use this area */ if ((iReturn != U14ERR_NOTSET) && /* if not area unused and... */ (iReturn != U14ERR_NOERROR)) /* ...not all OK, then... */ return iReturn; /* ...we cannot use this area */ @@ -689,18 +689,18 @@ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, iReturn = U14ERR_NOMEMORY; goto error; } - dev_dbg(&pdx->interface->dev, "%s: %p, length=%06x, circular %d\n", + dev_dbg(&ced->interface->dev, "%s: %p, length=%06x, circular %d\n", __func__, puBuf, dwLength, bCircular); /* To pin down user pages we must first acquire the mapping semaphore. */ nPages = get_user_pages_fast(ulStart, len, 1, pPages); - dev_dbg(&pdx->interface->dev, "%s: nPages = %d\n", __func__, nPages); + dev_dbg(&ced->interface->dev, "%s: nPages = %d\n", __func__, nPages); if (nPages > 0) { /* if we succeeded */ /* If you are tempted to use page_address (form LDD3), forget it. You MUST use */ /* kmap() or kmap_atomic() to get a virtual address. page_address will give you */ /* (null) or at least it does in this context with an x86 machine. */ - spin_lock_irq(&pdx->stagedLock); + spin_lock_irq(&ced->stagedLock); pTA->lpvBuff = puBuf; /* keep start of region (user address) */ pTA->dwBaseOffset = ulOffset; /* save offset in first page to start of xfer */ pTA->dwLength = dwLength; /* Size if the region in bytes */ @@ -716,7 +716,7 @@ static int ced_set_area(DEVICE_EXTENSION *pdx, int nArea, char __user *puBuf, pTA->aBlocks[1].dwSize = 0; pTA->bUsed = true; /* This is now a used block */ - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); iReturn = U14ERR_NOERROR; /* say all was well */ } else { iReturn = U14ERR_LOCKFAIL; @@ -737,7 +737,7 @@ error: ** unset it. Unsetting will fail if the area is booked, and a transfer to that ** area is in progress. Otherwise, we will release the area and re-assign it. ****************************************************************************/ -int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) +int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *pTD) { int iReturn; struct transfer_area_desc td; @@ -745,17 +745,17 @@ int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT if (copy_from_user(&td, pTD, sizeof(td))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: area:%d, size:%08x\n", + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", __func__, td.wAreaNum, td.dwLength); /* The strange cast is done so that we don't get warnings in 32-bit linux about the size of the */ /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ iReturn = - ced_set_area(pdx, td.wAreaNum, + ced_set_area(ced, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, false, false); - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -763,12 +763,12 @@ int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT ** UnSetTransfer ** Erases a transfer area record ****************************************************************************/ -int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea) +int ced_unset_transfer(struct ced_data *ced, int nArea) { int iReturn; - mutex_lock(&pdx->io_mutex); - iReturn = ced_clear_area(pdx, nArea); - mutex_unlock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); + iReturn = ced_clear_area(ced, nArea); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -780,7 +780,7 @@ int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea) ** pretend that whatever the user asked for was achieved, so we return 1 if ** try to create one, and 0 if they ask to remove (assuming all else was OK). ****************************************************************************/ -int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) +int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE) { int iReturn = U14ERR_NOERROR; struct transfer_event te; @@ -792,9 +792,9 @@ int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ return U14ERR_BADAREA; else { - struct transarea *pTA = &pdx->rTransDef[te.wAreaNum]; - mutex_lock(&pdx->io_mutex); /* make sure we have no competitor */ - spin_lock_irq(&pdx->stagedLock); + struct transarea *pTA = &ced->rTransDef[te.wAreaNum]; + mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ + spin_lock_irq(&ced->stagedLock); if (pTA->bUsed) { /* area must be in use */ pTA->dwEventSt = te.dwStart; /* set area regions */ pTA->dwEventSz = te.dwLength; /* set size (0 cancels it) */ @@ -802,8 +802,8 @@ int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) pTA->iWakeUp = 0; /* zero the wake up count */ } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&pdx->stagedLock); - mutex_unlock(&pdx->io_mutex); + spin_unlock_irq(&ced->stagedLock); + mutex_unlock(&ced->io_mutex); } return iReturn == U14ERR_NOERROR ? (te.iSetEvent ? 1 : U14ERR_NOERROR) : iReturn; @@ -815,24 +815,24 @@ int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE) ** of times that a block met the event condition since we last cleared it or ** 0 if timed out, or -ve error (bad area or not set, or signal). ****************************************************************************/ -int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) +int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut) { int iReturn; if ((unsigned)nArea >= MAX_TRANSAREAS) return U14ERR_BADAREA; else { int iWait; - struct transarea *pTA = &pdx->rTransDef[nArea]; + struct transarea *pTA = &ced->rTransDef[nArea]; msTimeOut = (msTimeOut * HZ + 999) / 1000; /* convert timeout to jiffies */ /* We cannot wait holding the mutex, but we check the flags while holding */ /* it. This may well be pointless as another thread could get in between */ /* releasing it and the wait call. However, this would have to clear the */ /* iWakeUp flag. However, the !pTA-bUsed may help us in this case. */ - mutex_lock(&pdx->io_mutex); /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ if (!pTA->bUsed || !pTA->dwEventSz) /* check something to wait for... */ return U14ERR_NOTSET; /* ...else we do nothing */ - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); if (msTimeOut) iWait = @@ -849,9 +849,9 @@ int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) else iReturn = pTA->iWakeUp; /* else the wakeup count */ - spin_lock_irq(&pdx->stagedLock); + spin_lock_irq(&ced->stagedLock); pTA->iWakeUp = 0; /* clear the flag */ - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); } return iReturn; } @@ -862,19 +862,19 @@ int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut) ** number of times a block completed since the last call, or 0 if none or a ** negative error. ****************************************************************************/ -int ced_test_event(DEVICE_EXTENSION *pdx, int nArea) +int ced_test_event(struct ced_data *ced, int nArea) { int iReturn; if ((unsigned)nArea >= MAX_TRANSAREAS) iReturn = U14ERR_BADAREA; else { - struct transarea *pTA = &pdx->rTransDef[nArea]; - mutex_lock(&pdx->io_mutex); /* make sure we have no competitor */ - spin_lock_irq(&pdx->stagedLock); + struct transarea *pTA = &ced->rTransDef[nArea]; + mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ + spin_lock_irq(&ced->stagedLock); iReturn = pTA->iWakeUp; /* get wakeup count since last call */ pTA->iWakeUp = 0; /* clear the count */ - spin_unlock_irq(&pdx->stagedLock); - mutex_unlock(&pdx->io_mutex); + spin_unlock_irq(&ced->stagedLock); + mutex_unlock(&ced->io_mutex); } return iReturn; } @@ -883,13 +883,13 @@ int ced_test_event(DEVICE_EXTENSION *pdx, int nArea) ** ced_get_transferInfo ** Puts the current state of the 1401 in a TGET_TX_BLOCK. *****************************************************************************/ -int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) +int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) { int iReturn = U14ERR_NOERROR; unsigned int dwIdent; - mutex_lock(&pdx->io_mutex); - dwIdent = pdx->StagedId; /* area ident for last xfer */ + mutex_lock(&ced->io_mutex); + dwIdent = ced->StagedId; /* area ident for last xfer */ if (dwIdent >= MAX_TRANSAREAS) iReturn = U14ERR_BADAREA; else { @@ -898,22 +898,22 @@ int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) tx = kzalloc(sizeof(*tx), GFP_KERNEL); if (!tx) { - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return -ENOMEM; } - tx->size = pdx->rTransDef[dwIdent].dwLength; - tx->linear = (long long)((long)pdx->rTransDef[dwIdent].lpvBuff); + tx->size = ced->rTransDef[dwIdent].dwLength; + tx->linear = (long long)((long)ced->rTransDef[dwIdent].lpvBuff); tx->avail = GET_TX_MAXENTRIES; /* how many blocks we could return */ tx->used = 1; /* number we actually return */ tx->entries[0].physical = - (long long)(tx->linear + pdx->StagedOffset); + (long long)(tx->linear + ced->StagedOffset); tx->entries[0].size = tx->size; if (copy_to_user(pTX, tx, sizeof(*tx))) iReturn = -EFAULT; kfree(tx); } - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -922,13 +922,13 @@ int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pTX) ** ** Empties the host i/o buffers ****************************************************************************/ -int ced_kill_io(DEVICE_EXTENSION *pdx) +int ced_kill_io(struct ced_data *ced) { - dev_dbg(&pdx->interface->dev, "%s\n", __func__); - mutex_lock(&pdx->io_mutex); - ced_flush_out_buff(pdx); - ced_flush_in_buff(pdx); - mutex_unlock(&pdx->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + ced_flush_out_buff(ced); + ced_flush_in_buff(ced); + mutex_unlock(&ced->io_mutex); return U14ERR_NOERROR; } @@ -937,16 +937,16 @@ int ced_kill_io(DEVICE_EXTENSION *pdx) ** ** Puts the current state of the 1401 in the Irp return buffer. *****************************************************************************/ -int ced_state_of_1401(DEVICE_EXTENSION *pdx) +int ced_state_of_1401(struct ced_data *ced) { int iReturn; - mutex_lock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); - ced_quick_check(pdx, false, false); /* get state up to date, no reset */ - iReturn = pdx->sCurrentState; + ced_quick_check(ced, false, false); /* get state up to date, no reset */ + iReturn = ced->sCurrentState; - mutex_unlock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: %d\n", __func__, iReturn); + mutex_unlock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); return iReturn; } @@ -957,27 +957,27 @@ int ced_state_of_1401(DEVICE_EXTENSION *pdx) ** Initiates a self-test cycle. The assumption is that we have no interrupts ** active, so we should make sure that this is the case. *****************************************************************************/ -int ced_start_self_test(DEVICE_EXTENSION *pdx) +int ced_start_self_test(struct ced_data *ced) { int nGot; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); - ced_draw_down(pdx); /* wait for, then kill outstanding Urbs */ - ced_flush_in_buff(pdx); /* Clear out input buffer & pipe */ - ced_flush_out_buff(pdx); /* Clear output buffer & pipe */ + ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ + ced_flush_in_buff(ced); /* Clear out input buffer & pipe */ + ced_flush_out_buff(ced); /* Clear output buffer & pipe */ /* so things stay tidy */ /* ced_read_write_cancel(pDeviceObject); */ - pdx->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flags here */ + ced->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flags here */ - nGot = usb_control_msg(pdx->udev, usb_rcvctrlpipe(pdx->udev, 0), + nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), DB_SELFTEST, (H_TO_D | VENDOR | DEVREQ), 0, 0, NULL, 0, HZ); /* allow 1 second timeout */ - pdx->ulSelfTestTime = jiffies + HZ * 30; /* 30 seconds into the future */ + ced->ulSelfTestTime = jiffies + HZ * 30; /* 30 seconds into the future */ - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); if (nGot < 0) - dev_err(&pdx->interface->dev, "%s: err=%d\n", __func__, nGot); + dev_err(&ced->interface->dev, "%s: err=%d\n", __func__, nGot); return nGot < 0 ? U14ERR_FAIL : U14ERR_NOERROR; } @@ -986,23 +986,23 @@ int ced_start_self_test(DEVICE_EXTENSION *pdx) ** ** Check progress of a self-test cycle ****************************************************************************/ -int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) +int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) { unsigned int state, error; int iReturn; TGET_SELFTEST gst; /* local work space */ memset(&gst, 0, sizeof(gst)); /* clear out the space (sets code 0) */ - mutex_lock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); - iReturn = ced_get_state(pdx, &state, &error); + dev_dbg(&ced->interface->dev, "%s\n", __func__); + iReturn = ced_get_state(ced, &state, &error); if (iReturn == U14ERR_NOERROR) /* Only accept zero if it happens twice */ - iReturn = ced_get_state(pdx, &state, &error); + iReturn = ced_get_state(ced, &state, &error); if (iReturn != U14ERR_NOERROR) { /* Self-test can cause comms errors */ /* so we assume still testing */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: ced_get_state=%d, assuming still testing\n", __func__, iReturn); state = 0x80; /* Force still-testing, no error */ @@ -1011,7 +1011,7 @@ int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) } if ((state == -1) && (error == -1)) { /* If ced_get_state had problems */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: ced_get_state failed, assuming still testing\n", __func__); state = 0x80; /* Force still-testing, no error */ @@ -1023,31 +1023,31 @@ int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) gst.code = (state & 0x00FF0000) >> 16; /* read the error code */ gst.x = error & 0x0000FFFF; /* Error data X */ gst.y = (error & 0xFFFF0000) >> 16; /* and data Y */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Self-test error code %d\n", gst.code); } else { /* No error, check for timeout */ unsigned long ulNow = jiffies; /* get current time */ - if (time_after(ulNow, pdx->ulSelfTestTime)) { + if (time_after(ulNow, ced->ulSelfTestTime)) { gst.code = -2; /* Flag the timeout */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Self-test timed-out\n"); } else - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Self-test on-going\n"); } } else { gst.code = -1; /* Flag the test is done */ - dev_dbg(&pdx->interface->dev, "Self-test done\n"); + dev_dbg(&ced->interface->dev, "Self-test done\n"); } if (gst.code < 0) { /* If we have a problem or finished */ /* If using the 2890 we should reset properly */ - if ((pdx->nPipes == 4) && (pdx->s1401Type <= TYPEPOWER)) - ced_is_1401(pdx); /* Get 1401 reset and OK */ + if ((ced->nPipes == 4) && (ced->s1401Type <= TYPEPOWER)) + ced_is_1401(ced); /* Get 1401 reset and OK */ else - ced_quick_check(pdx, true, true); /* Otherwise check without reset unless problems */ + ced_quick_check(ced, true, true); /* Otherwise check without reset unless problems */ } - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); if (copy_to_user(pGST, &gst, sizeof(gst))) return -EFAULT; @@ -1060,13 +1060,13 @@ int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST) ** ** Returns code for standard, plus, micro1401, power1401 or none ****************************************************************************/ -int ced_type_of_1401(DEVICE_EXTENSION *pdx) +int ced_type_of_1401(struct ced_data *ced) { int iReturn = TYPEUNKNOWN; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); - switch (pdx->s1401Type) { + switch (ced->s1401Type) { case TYPE1401: iReturn = U14ERR_STD; break; /* Handle these types directly */ @@ -1077,13 +1077,13 @@ int ced_type_of_1401(DEVICE_EXTENSION *pdx) iReturn = U14ERR_U1401; break; default: - if ((pdx->s1401Type >= TYPEPOWER) && (pdx->s1401Type <= 25)) - iReturn = pdx->s1401Type + 4; /* We can calculate types */ + if ((ced->s1401Type >= TYPEPOWER) && (ced->s1401Type <= 25)) + iReturn = ced->s1401Type + 4; /* We can calculate types */ else /* for up-coming 1401 designs */ iReturn = TYPEUNKNOWN; /* Don't know or not there */ } - dev_dbg(&pdx->interface->dev, "%s %d\n", __func__, iReturn); - mutex_unlock(&pdx->io_mutex); + dev_dbg(&ced->interface->dev, "%s %d\n", __func__, iReturn); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1093,15 +1093,15 @@ int ced_type_of_1401(DEVICE_EXTENSION *pdx) ** ** Returns flags on block transfer abilities ****************************************************************************/ -int ced_transfer_flags(DEVICE_EXTENSION *pdx) +int ced_transfer_flags(struct ced_data *ced) { int iReturn = U14TF_MULTIA | U14TF_DIAG | /* we always have multiple DMA area */ U14TF_NOTIFY | U14TF_CIRCTH; /* diagnostics, notify and circular */ - dev_dbg(&pdx->interface->dev, "%s\n", __func__); - mutex_lock(&pdx->io_mutex); - if (pdx->bIsUSB2) /* Set flag for USB2 if appropriate */ + dev_dbg(&ced->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + if (ced->bIsUSB2) /* Set flag for USB2 if appropriate */ iReturn |= U14TF_USB2; - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1111,18 +1111,18 @@ int ced_transfer_flags(DEVICE_EXTENSION *pdx) ** Issues a debug\diagnostic command to the 1401 along with a 32-bit datum ** This is a utility command used for dbg operations. */ -static int ced_dbg_cmd(DEVICE_EXTENSION *pdx, unsigned char cmd, +static int ced_dbg_cmd(struct ced_data *ced, unsigned char cmd, unsigned int data) { int iReturn; - dev_dbg(&pdx->interface->dev, "%s: entry\n", __func__); - iReturn = usb_control_msg(pdx->udev, usb_sndctrlpipe(pdx->udev, 0), cmd, + dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); + iReturn = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), cmd, (H_TO_D | VENDOR | DEVREQ), (unsigned short)data, (unsigned short)(data >> 16), NULL, 0, HZ); /* allow 1 second timeout */ if (iReturn < 0) - dev_err(&pdx->interface->dev, "%s: fail code=%d\n", + dev_err(&ced->interface->dev, "%s: fail code=%d\n", __func__, iReturn); return iReturn; @@ -1133,7 +1133,7 @@ static int ced_dbg_cmd(DEVICE_EXTENSION *pdx, unsigned char cmd, ** ** Execute the diagnostic peek operation. Uses address, width and repeats. ****************************************************************************/ -int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; @@ -1141,17 +1141,17 @@ int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) if (copy_from_user(&db, pDB, sizeof(db))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_PEEK, 0); - mutex_unlock(&pdx->io_mutex); + iReturn = ced_dbg_cmd(ced, DB_PEEK, 0); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1162,7 +1162,7 @@ int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) ** Execute the diagnostic poke operation. Parameters are in the CSBLOCK struct ** in order address, size, repeats and value to poke. ****************************************************************************/ -int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; @@ -1170,17 +1170,17 @@ int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) if (copy_from_user(&db, pDB, sizeof(db))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_POKE, db.iData); - mutex_unlock(&pdx->io_mutex); + iReturn = ced_dbg_cmd(ced, DB_POKE, db.iData); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1191,7 +1191,7 @@ int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) ** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK struct ** in order address, default, enable mask, size and repeats. ****************************************************************************/ -int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; @@ -1199,21 +1199,21 @@ int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) if (copy_from_user(&db, pDB, sizeof(db))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(pdx, DB_SETADD, db.iAddr); + iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_SETDEF, db.iDefault); + iReturn = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_SETMASK, db.iMask); + iReturn = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_RAMPD, 0); - mutex_unlock(&pdx->io_mutex); + iReturn = ced_dbg_cmd(ced, DB_RAMPD, 0); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1223,7 +1223,7 @@ int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) ** ** Execute the diagnostic ramp address operation ****************************************************************************/ -int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; @@ -1231,19 +1231,19 @@ int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) if (copy_from_user(&db, pDB, sizeof(db))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); - iReturn = ced_dbg_cmd(pdx, DB_SETDEF, db.iDefault); + iReturn = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_SETMASK, db.iMask); + iReturn = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_WIDTH, db.iWidth); + iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_REPEATS, db.iRepeats); + iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(pdx, DB_RAMPA, 0); - mutex_unlock(&pdx->io_mutex); + iReturn = ced_dbg_cmd(ced, DB_RAMPA, 0); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1253,17 +1253,17 @@ int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) ** ** Retrieve the data resulting from the last debug Peek operation ****************************************************************************/ -int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) +int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB) { int iReturn; TDBGBLOCK db; memset(&db, 0, sizeof(db)); /* fill returned block with 0s */ - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); /* Read back the last peeked value from the 1401. */ - iReturn = usb_control_msg(pdx->udev, usb_rcvctrlpipe(pdx->udev, 0), + iReturn = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), DB_DATA, (D_TO_H | VENDOR | DEVREQ), 0, 0, &db.iData, sizeof(db.iData), HZ); if (iReturn == sizeof(db.iData)) { @@ -1272,10 +1272,10 @@ int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) else iReturn = U14ERR_NOERROR; } else - dev_err(&pdx->interface->dev, "%s: failed, code %d\n", + dev_err(&ced->interface->dev, "%s: failed, code %d\n", __func__, iReturn); - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1286,15 +1286,15 @@ int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB) ** Stop any never-ending debug loop, we just call ced_get_state for USB ** ****************************************************************************/ -int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx) +int ced_dbg_stop_loop(struct ced_data *ced) { int iReturn; unsigned int uState, uErr; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); - iReturn = ced_get_state(pdx, &uState, &uErr); - mutex_unlock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s\n", __func__); + iReturn = ced_get_state(ced, &uState, &uErr); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1307,7 +1307,7 @@ int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx) ** booked and a transfer to that area is in progress. Otherwise, we will ** release the area and re-assign it. ****************************************************************************/ -int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD) +int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD) { int iReturn; bool bToHost; @@ -1316,8 +1316,8 @@ int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT if (copy_from_user(&td, pTD, sizeof(td))) return -EFAULT; - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: area:%d, size:%08x\n", + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", __func__, td.wAreaNum, td.dwLength); bToHost = td.eSize != 0; /* this is used as the tohost flag */ @@ -1325,10 +1325,10 @@ int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ iReturn = - ced_set_area(pdx, td.wAreaNum, + ced_set_area(ced, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, true, bToHost); - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1337,18 +1337,18 @@ int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pT ** ** Return the next available block of circularly-transferred data. ****************************************************************************/ -int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) +int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) { int iReturn = U14ERR_NOERROR; unsigned int nArea; TCIRCBLOCK cb; - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + dev_dbg(&ced->interface->dev, "%s\n", __func__); if (copy_from_user(&cb, pCB, sizeof(cb))) return -EFAULT; - mutex_lock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); nArea = cb.nArea; /* Retrieve parameters first */ cb.dwOffset = 0; /* set default result (nothing) */ @@ -1356,29 +1356,29 @@ int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &pdx->rTransDef[nArea]; - spin_lock_irq(&pdx->stagedLock); /* Lock others out */ + struct transarea *pArea = &ced->rTransDef[nArea]; + spin_lock_irq(&ced->stagedLock); /* Lock others out */ if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ (pArea->bCircToHost)) { /* For now at least must be to host */ if (pArea->aBlocks[0].dwSize > 0) { /* Got anything? */ cb.dwOffset = pArea->aBlocks[0].dwOffset; cb.dwSize = pArea->aBlocks[0].dwSize; - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: return block 0: %d bytes at %d\n", __func__, cb.dwSize, cb.dwOffset); } } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); } else iReturn = U14ERR_BADAREA; if (copy_to_user(pCB, &cb, sizeof(cb))) iReturn = -EFAULT; - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } @@ -1387,18 +1387,18 @@ int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) ** ** Frees a block of circularly-transferred data and returns the next one. ****************************************************************************/ -int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) +int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) { int iReturn = U14ERR_NOERROR; unsigned int nArea, uStart, uSize; TCIRCBLOCK cb; - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + dev_dbg(&ced->interface->dev, "%s\n", __func__); if (copy_from_user(&cb, pCB, sizeof(cb))) return -EFAULT; - mutex_lock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); nArea = cb.nArea; /* Retrieve parameters first */ uStart = cb.dwOffset; @@ -1408,8 +1408,8 @@ int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &pdx->rTransDef[nArea]; - spin_lock_irq(&pdx->stagedLock); /* Lock others out */ + struct transarea *pArea = &ced->rTransDef[nArea]; + spin_lock_irq(&ced->stagedLock); /* Lock others out */ if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ (pArea->bCircToHost)) { /* For now at least must be to host */ @@ -1428,12 +1428,12 @@ int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) pArea->aBlocks[0].dwOffset = 0; } - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: free %d bytes at %d, return %d bytes at %d, wait=%d\n", __func__, uSize, uStart, pArea->aBlocks[0].dwSize, pArea->aBlocks[0].dwOffset, - pdx->bXFerWaiting); + ced->bXFerWaiting); /* Return the next available block of memory as well */ if (pArea->aBlocks[0].dwSize > 0) { /* Got anything? */ @@ -1442,15 +1442,15 @@ int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) cb.dwSize = pArea->aBlocks[0].dwSize; } - bWaiting = pdx->bXFerWaiting; - if (bWaiting && pdx->bStagedUrbPending) { - dev_err(&pdx->interface->dev, + bWaiting = ced->bXFerWaiting; + if (bWaiting && ced->bStagedUrbPending) { + dev_err(&ced->interface->dev, "%s: ERROR: waiting xfer and staged Urb pending!\n", __func__); bWaiting = false; } } else { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: ERROR: freeing %d bytes at %d, block 0 is %d bytes at %d\n", __func__, uSize, uStart, pArea->aBlocks[0].dwSize, @@ -1461,25 +1461,25 @@ int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB) /* If we have one, kick off pending transfer */ if (bWaiting) { /* Got a block xfer waiting? */ int RWMStat = - ced_read_write_mem(pdx, !pdx->rDMAInfo.bOutWard, - pdx->rDMAInfo.wIdent, - pdx->rDMAInfo.dwOffset, - pdx->rDMAInfo.dwSize); + ced_read_write_mem(ced, !ced->rDMAInfo.bOutWard, + ced->rDMAInfo.wIdent, + ced->rDMAInfo.dwOffset, + ced->rDMAInfo.dwSize); if (RWMStat != U14ERR_NOERROR) - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: rw setup failed %d\n", __func__, RWMStat); } } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&pdx->stagedLock); + spin_unlock_irq(&ced->stagedLock); } else iReturn = U14ERR_BADAREA; if (copy_to_user(pCB, &cb, sizeof(cb))) iReturn = -EFAULT; - mutex_unlock(&pdx->io_mutex); + mutex_unlock(&ced->io_mutex); return iReturn; } diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 9cc79a8090d6..83c608c2b748 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -70,7 +70,7 @@ it is very out of date. A lot of information was gleaned from the latest usb_skeleton.c code (you need to download the kernel sources to get this). To match the Windows version, everything is done using ioctl calls. All the -device state is held in the DEVICE_EXTENSION (named to match Windows use). +device state is held in the struct ced_data. Block transfers are done by using get_user_pages() to pin down a list of pages that we hold a pointer to in the device driver. We also allocate a coherent transfer buffer of size STAGED_SZ (this must be a multiple of the @@ -123,32 +123,32 @@ static struct usb_driver ced_driver; static void ced_delete(struct kref *kref) { - DEVICE_EXTENSION *pdx = to_DEVICE_EXTENSION(kref); + struct ced_data *ced = to_ced_data(kref); /* Free up the output buffer, then free the output urb. Note that the interface member */ - /* of pdx will probably be NULL, so cannot be used to get to dev. */ - usb_free_coherent(pdx->udev, OUTBUF_SZ, pdx->pCoherCharOut, - pdx->pUrbCharOut->transfer_dma); - usb_free_urb(pdx->pUrbCharOut); + /* of ced will probably be NULL, so cannot be used to get to dev. */ + usb_free_coherent(ced->udev, OUTBUF_SZ, ced->pCoherCharOut, + ced->pUrbCharOut->transfer_dma); + usb_free_urb(ced->pUrbCharOut); /* Do the same for chan input */ - usb_free_coherent(pdx->udev, INBUF_SZ, pdx->pCoherCharIn, - pdx->pUrbCharIn->transfer_dma); - usb_free_urb(pdx->pUrbCharIn); + usb_free_coherent(ced->udev, INBUF_SZ, ced->pCoherCharIn, + ced->pUrbCharIn->transfer_dma); + usb_free_urb(ced->pUrbCharIn); /* Do the same for the block transfers */ - usb_free_coherent(pdx->udev, STAGED_SZ, pdx->pCoherStagedIO, - pdx->pStagedUrb->transfer_dma); - usb_free_urb(pdx->pStagedUrb); + usb_free_coherent(ced->udev, STAGED_SZ, ced->pCoherStagedIO, + ced->pStagedUrb->transfer_dma); + usb_free_urb(ced->pStagedUrb); - usb_put_dev(pdx->udev); - kfree(pdx); + usb_put_dev(ced->udev); + kfree(ced); } /* This is the driver end of the open() call from user space. */ static int ced_open(struct inode *inode, struct file *file) { - DEVICE_EXTENSION *pdx; + struct ced_data *ced; int retval = 0; int subminor = iminor(inode); struct usb_interface *interface = @@ -160,42 +160,42 @@ static int ced_open(struct inode *inode, struct file *file) goto exit; } - pdx = usb_get_intfdata(interface); - if (!pdx) { + ced = usb_get_intfdata(interface); + if (!ced) { retval = -ENODEV; goto exit; } - dev_dbg(&interface->dev, "%s: got pdx\n", __func__); + dev_dbg(&interface->dev, "%s: got ced\n", __func__); /* increment our usage count for the device */ - kref_get(&pdx->kref); + kref_get(&ced->kref); /* lock the device to allow correctly handling errors * in resumption */ - mutex_lock(&pdx->io_mutex); + mutex_lock(&ced->io_mutex); - if (!pdx->open_count++) { + if (!ced->open_count++) { retval = usb_autopm_get_interface(interface); if (retval) { - pdx->open_count--; - mutex_unlock(&pdx->io_mutex); - kref_put(&pdx->kref, ced_delete); + ced->open_count--; + mutex_unlock(&ced->io_mutex); + kref_put(&ced->kref, ced_delete); goto exit; } } else { /* uncomment this block if you want exclusive open */ dev_err(&interface->dev, "%s: fail: already open\n", __func__); retval = -EBUSY; - pdx->open_count--; - mutex_unlock(&pdx->io_mutex); - kref_put(&pdx->kref, ced_delete); + ced->open_count--; + mutex_unlock(&ced->io_mutex); + kref_put(&ced->kref, ced_delete); goto exit; } /* prevent the device from being autosuspended */ /* save our object in the file's private structure */ - file->private_data = pdx; - mutex_unlock(&pdx->io_mutex); + file->private_data = ced; + mutex_unlock(&ced->io_mutex); exit: return retval; @@ -203,43 +203,43 @@ exit: static int ced_release(struct inode *inode, struct file *file) { - DEVICE_EXTENSION *pdx = file->private_data; - if (pdx == NULL) + struct ced_data *ced = file->private_data; + if (ced == NULL) return -ENODEV; - dev_dbg(&pdx->interface->dev, "%s: called\n", __func__); - mutex_lock(&pdx->io_mutex); - if (!--pdx->open_count && pdx->interface) /* Allow autosuspend */ - usb_autopm_put_interface(pdx->interface); - mutex_unlock(&pdx->io_mutex); + dev_dbg(&ced->interface->dev, "%s: called\n", __func__); + mutex_lock(&ced->io_mutex); + if (!--ced->open_count && ced->interface) /* Allow autosuspend */ + usb_autopm_put_interface(ced->interface); + mutex_unlock(&ced->io_mutex); - kref_put(&pdx->kref, ced_delete); /* decrement the count on our device */ + kref_put(&ced->kref, ced_delete); /* decrement the count on our device */ return 0; } static int ced_flush(struct file *file, fl_owner_t id) { int res; - DEVICE_EXTENSION *pdx = file->private_data; - if (pdx == NULL) + struct ced_data *ced = file->private_data; + if (ced == NULL) return -ENODEV; - dev_dbg(&pdx->interface->dev, "%s: char in pend=%d\n", - __func__, pdx->bReadCharsPending); + dev_dbg(&ced->interface->dev, "%s: char in pend=%d\n", + __func__, ced->bReadCharsPending); /* wait for io to stop */ - mutex_lock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: got io_mutex\n", __func__); - ced_draw_down(pdx); + mutex_lock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: got io_mutex\n", __func__); + ced_draw_down(ced); /* read out errors, leave subsequent opens a clean slate */ - spin_lock_irq(&pdx->err_lock); - res = pdx->errors ? (pdx->errors == -EPIPE ? -EPIPE : -EIO) : 0; - pdx->errors = 0; - spin_unlock_irq(&pdx->err_lock); + spin_lock_irq(&ced->err_lock); + res = ced->errors ? (ced->errors == -EPIPE ? -EPIPE : -EIO) : 0; + ced->errors = 0; + spin_unlock_irq(&ced->err_lock); - mutex_unlock(&pdx->io_mutex); - dev_dbg(&pdx->interface->dev, "%s: exit reached\n", __func__); + mutex_unlock(&ced->io_mutex); + dev_dbg(&ced->interface->dev, "%s: exit reached\n", __func__); return res; } @@ -247,13 +247,13 @@ static int ced_flush(struct file *file, fl_owner_t id) /*************************************************************************** ** can_accept_io_requests ** If the device is removed, interface is set NULL. We also clear our pointer -** from the interface, so we should make sure that pdx is not NULL. This will +** from the interface, so we should make sure that ced is not NULL. This will ** not help with a device extension held by a file. ** return true if can accept new io requests, else false */ -static bool can_accept_io_requests(DEVICE_EXTENSION *pdx) +static bool can_accept_io_requests(struct ced_data *ced) { - return pdx && pdx->interface; /* Can we accept IO requests */ + return ced && ced->interface; /* Can we accept IO requests */ } /**************************************************************************** @@ -262,73 +262,73 @@ static bool can_accept_io_requests(DEVICE_EXTENSION *pdx) ****************************************************************************/ static void ced_writechar_callback(struct urb *pUrb) { - DEVICE_EXTENSION *pdx = pUrb->context; + struct ced_data *ced = pUrb->context; int nGot = pUrb->actual_length; /* what we transferred */ if (pUrb->status) { /* sync/async unlink faults aren't errors */ if (! (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET || pUrb->status == -ESHUTDOWN)) { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", __func__, pUrb->status); } - spin_lock(&pdx->err_lock); - pdx->errors = pUrb->status; - spin_unlock(&pdx->err_lock); + spin_lock(&ced->err_lock); + ced->errors = pUrb->status; + spin_unlock(&ced->err_lock); nGot = 0; /* and tidy up again if so */ - spin_lock(&pdx->charOutLock); /* already at irq level */ - pdx->dwOutBuffGet = 0; /* Reset the output buffer */ - pdx->dwOutBuffPut = 0; - pdx->dwNumOutput = 0; /* Clear the char count */ - pdx->bPipeError[0] = 1; /* Flag an error for later */ - pdx->bSendCharsPending = false; /* Allow other threads again */ - spin_unlock(&pdx->charOutLock); /* already at irq level */ - dev_dbg(&pdx->interface->dev, + spin_lock(&ced->charOutLock); /* already at irq level */ + ced->dwOutBuffGet = 0; /* Reset the output buffer */ + ced->dwOutBuffPut = 0; + ced->dwNumOutput = 0; /* Clear the char count */ + ced->bPipeError[0] = 1; /* Flag an error for later */ + ced->bSendCharsPending = false; /* Allow other threads again */ + spin_unlock(&ced->charOutLock); /* already at irq level */ + dev_dbg(&ced->interface->dev, "%s: char out done, 0 chars sent\n", __func__); } else { - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: char out done, %d chars sent\n", __func__, nGot); - spin_lock(&pdx->charOutLock); /* already at irq level */ - pdx->dwNumOutput -= nGot; /* Now adjust the char send buffer */ - pdx->dwOutBuffGet += nGot; /* to match what we did */ - if (pdx->dwOutBuffGet >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ - pdx->dwOutBuffGet = 0; + spin_lock(&ced->charOutLock); /* already at irq level */ + ced->dwNumOutput -= nGot; /* Now adjust the char send buffer */ + ced->dwOutBuffGet += nGot; /* to match what we did */ + if (ced->dwOutBuffGet >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ + ced->dwOutBuffGet = 0; - if (pdx->dwNumOutput > 0) { /* if more to be done... */ + if (ced->dwNumOutput > 0) { /* if more to be done... */ int nPipe = 0; /* The pipe number to use */ int iReturn; - char *pDat = &pdx->outputBuffer[pdx->dwOutBuffGet]; - unsigned int dwCount = pdx->dwNumOutput; /* maximum to send */ - if ((pdx->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - pdx->dwOutBuffGet; - spin_unlock(&pdx->charOutLock); /* we are done with stuff that changes */ - memcpy(pdx->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ - usb_fill_bulk_urb(pdx->pUrbCharOut, pdx->udev, - usb_sndbulkpipe(pdx->udev, - pdx->epAddr[0]), - pdx->pCoherCharOut, dwCount, - ced_writechar_callback, pdx); - pdx->pUrbCharOut->transfer_flags |= + char *pDat = &ced->outputBuffer[ced->dwOutBuffGet]; + unsigned int dwCount = ced->dwNumOutput; /* maximum to send */ + if ((ced->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ + dwCount = OUTBUF_SZ - ced->dwOutBuffGet; + spin_unlock(&ced->charOutLock); /* we are done with stuff that changes */ + memcpy(ced->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ + usb_fill_bulk_urb(ced->pUrbCharOut, ced->udev, + usb_sndbulkpipe(ced->udev, + ced->epAddr[0]), + ced->pCoherCharOut, dwCount, + ced_writechar_callback, ced); + ced->pUrbCharOut->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(pdx->pUrbCharOut, &pdx->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(pdx->pUrbCharOut, GFP_ATOMIC); - dev_dbg(&pdx->interface->dev, "%s: n=%d>%s<\n", + usb_anchor_urb(ced->pUrbCharOut, &ced->submitted); /* in case we need to kill it */ + iReturn = usb_submit_urb(ced->pUrbCharOut, GFP_ATOMIC); + dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, dwCount, pDat); - spin_lock(&pdx->charOutLock); /* grab lock for errors */ + spin_lock(&ced->charOutLock); /* grab lock for errors */ if (iReturn) { - pdx->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - pdx->bSendCharsPending = false; /* Allow other threads again */ - usb_unanchor_urb(pdx->pUrbCharOut); - dev_err(&pdx->interface->dev, + ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + ced->bSendCharsPending = false; /* Allow other threads again */ + usb_unanchor_urb(ced->pUrbCharOut); + dev_err(&ced->interface->dev, "%s: usb_submit_urb() returned %d\n", __func__, iReturn); } } else - pdx->bSendCharsPending = false; /* Allow other threads again */ - spin_unlock(&pdx->charOutLock); /* already at irq level */ + ced->bSendCharsPending = false; /* Allow other threads again */ + spin_unlock(&ced->charOutLock); /* already at irq level */ } } @@ -337,89 +337,89 @@ static void ced_writechar_callback(struct urb *pUrb) ** Transmit the characters in the output buffer to the 1401. This may need ** breaking down into multiple transfers. ****************************************************************************/ -int ced_send_chars(DEVICE_EXTENSION *pdx) +int ced_send_chars(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; - spin_lock_irq(&pdx->charOutLock); /* Protect ourselves */ + spin_lock_irq(&ced->charOutLock); /* Protect ourselves */ - if ((!pdx->bSendCharsPending) && /* Not currently sending */ - (pdx->dwNumOutput > 0) && /* has characters to output */ - (can_accept_io_requests(pdx))) { /* and current activity is OK */ - unsigned int dwCount = pdx->dwNumOutput; /* Get a copy of the character count */ - pdx->bSendCharsPending = true; /* Set flag to lock out other threads */ + if ((!ced->bSendCharsPending) && /* Not currently sending */ + (ced->dwNumOutput > 0) && /* has characters to output */ + (can_accept_io_requests(ced))) { /* and current activity is OK */ + unsigned int dwCount = ced->dwNumOutput; /* Get a copy of the character count */ + ced->bSendCharsPending = true; /* Set flag to lock out other threads */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Send %d chars to 1401, EP0 flag %d\n", - dwCount, pdx->nPipes == 3); + dwCount, ced->nPipes == 3); /* If we have only 3 end points we must send the characters to the 1401 using EP0. */ - if (pdx->nPipes == 3) { + if (ced->nPipes == 3) { /* For EP0 character transmissions to the 1401, we have to hang about until they */ /* are gone, as otherwise without more character IO activity they will never go. */ unsigned int count = dwCount; /* Local char counter */ unsigned int index = 0; /* The index into the char buffer */ - spin_unlock_irq(&pdx->charOutLock); /* Free spinlock as we call USBD */ + spin_unlock_irq(&ced->charOutLock); /* Free spinlock as we call USBD */ while ((count > 0) && (iReturn == U14ERR_NOERROR)) { /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ int n = count > 64 ? 64 : count; /* Chars for this xfer, max of 64 */ - int nSent = usb_control_msg(pdx->udev, - usb_sndctrlpipe(pdx->udev, 0), /* use end point 0 */ + int nSent = usb_control_msg(ced->udev, + usb_sndctrlpipe(ced->udev, 0), /* use end point 0 */ DB_CHARS, /* bRequest */ (H_TO_D | VENDOR | DEVREQ), /* to the device, vendor request to the device */ 0, 0, /* value and index are both 0 */ - &pdx->outputBuffer[index], /* where to send from */ + &ced->outputBuffer[index], /* where to send from */ n, /* how much to send */ 1000); /* timeout in jiffies */ if (nSent <= 0) { iReturn = nSent ? nSent : -ETIMEDOUT; /* if 0 chars says we timed out */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "Send %d chars by EP0 failed: %d\n", n, iReturn); } else { - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Sent %d chars by EP0\n", n); count -= nSent; index += nSent; } } - spin_lock_irq(&pdx->charOutLock); /* Protect pdx changes, released by general code */ - pdx->dwOutBuffGet = 0; /* so reset the output buffer */ - pdx->dwOutBuffPut = 0; - pdx->dwNumOutput = 0; /* and clear the buffer count */ - pdx->bSendCharsPending = false; /* Allow other threads again */ + spin_lock_irq(&ced->charOutLock); /* Protect ced changes, released by general code */ + ced->dwOutBuffGet = 0; /* so reset the output buffer */ + ced->dwOutBuffPut = 0; + ced->dwNumOutput = 0; /* and clear the buffer count */ + ced->bSendCharsPending = false; /* Allow other threads again */ } else { /* Here for sending chars normally - we hold the spin lock */ int nPipe = 0; /* The pipe number to use */ - char *pDat = &pdx->outputBuffer[pdx->dwOutBuffGet]; - - if ((pdx->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - pdx->dwOutBuffGet; - spin_unlock_irq(&pdx->charOutLock); /* we are done with stuff that changes */ - memcpy(pdx->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ - usb_fill_bulk_urb(pdx->pUrbCharOut, pdx->udev, - usb_sndbulkpipe(pdx->udev, - pdx->epAddr[0]), - pdx->pCoherCharOut, dwCount, - ced_writechar_callback, pdx); - pdx->pUrbCharOut->transfer_flags |= + char *pDat = &ced->outputBuffer[ced->dwOutBuffGet]; + + if ((ced->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ + dwCount = OUTBUF_SZ - ced->dwOutBuffGet; + spin_unlock_irq(&ced->charOutLock); /* we are done with stuff that changes */ + memcpy(ced->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ + usb_fill_bulk_urb(ced->pUrbCharOut, ced->udev, + usb_sndbulkpipe(ced->udev, + ced->epAddr[0]), + ced->pCoherCharOut, dwCount, + ced_writechar_callback, ced); + ced->pUrbCharOut->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(pdx->pUrbCharOut, &pdx->submitted); - iReturn = usb_submit_urb(pdx->pUrbCharOut, GFP_KERNEL); - spin_lock_irq(&pdx->charOutLock); /* grab lock for errors */ + usb_anchor_urb(ced->pUrbCharOut, &ced->submitted); + iReturn = usb_submit_urb(ced->pUrbCharOut, GFP_KERNEL); + spin_lock_irq(&ced->charOutLock); /* grab lock for errors */ if (iReturn) { - pdx->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - pdx->bSendCharsPending = false; /* Allow other threads again */ - usb_unanchor_urb(pdx->pUrbCharOut); /* remove from list of active urbs */ + ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + ced->bSendCharsPending = false; /* Allow other threads again */ + usb_unanchor_urb(ced->pUrbCharOut); /* remove from list of active urbs */ } } - } else if (pdx->bSendCharsPending && (pdx->dwNumOutput > 0)) - dev_dbg(&pdx->interface->dev, + } else if (ced->bSendCharsPending && (ced->dwNumOutput > 0)) + dev_dbg(&ced->interface->dev, "%s: bSendCharsPending:true\n", __func__); - dev_dbg(&pdx->interface->dev, "%s: exit code: %d\n", __func__, iReturn); - spin_unlock_irq(&pdx->charOutLock); /* Now let go of the spinlock */ + dev_dbg(&ced->interface->dev, "%s: exit code: %d\n", __func__, iReturn); + spin_unlock_irq(&ced->charOutLock); /* Now let go of the spinlock */ return iReturn; } @@ -427,27 +427,27 @@ int ced_send_chars(DEVICE_EXTENSION *pdx) ** ced_copy_user_space ** This moves memory between pinned down user space and the pCoherStagedIO ** memory buffer we use for transfers. Copy n bytes in the directions that -** is defined by pdx->StagedRead. The user space is determined by the area -** in pdx->StagedId and the offset in pdx->StagedDone. The user +** is defined by ced->StagedRead. The user space is determined by the area +** in ced->StagedId and the offset in ced->StagedDone. The user ** area may well not start on a page boundary, so allow for that. ** ** We have a table of physical pages that describe the area, so we can use ** this to get a virtual address that the kernel can use. ** -** pdx Is our device extension which holds all we know about the transfer. +** ced Is our device extension which holds all we know about the transfer. ** n The number of bytes to move one way or the other. ***************************************************************************/ -static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) +static void ced_copy_user_space(struct ced_data *ced, int n) { - unsigned int nArea = pdx->StagedId; + unsigned int nArea = ced->StagedId; if (nArea < MAX_TRANSAREAS) { /* area to be used */ - struct transarea *pArea = &pdx->rTransDef[nArea]; + struct transarea *pArea = &ced->rTransDef[nArea]; unsigned int dwOffset = - pdx->StagedDone + pdx->StagedOffset + pArea->dwBaseOffset; - char *pCoherBuf = pdx->pCoherStagedIO; /* coherent buffer */ + ced->StagedDone + ced->StagedOffset + pArea->dwBaseOffset; + char *pCoherBuf = ced->pCoherStagedIO; /* coherent buffer */ if (!pArea->bUsed) { - dev_err(&pdx->interface->dev, "%s: area %d unused\n", + dev_err(&ced->interface->dev, "%s: area %d unused\n", __func__, nArea); return; } @@ -462,7 +462,7 @@ static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) size_t uiXfer = PAGE_SIZE - uiPageOff; /* max to transfer on this page */ if (uiXfer > n) /* limit byte count if too much */ uiXfer = n; /* for the page */ - if (pdx->StagedRead) + if (ced->StagedRead) memcpy(pvAddress + uiPageOff, pCoherBuf, uiXfer); else @@ -474,26 +474,26 @@ static void ced_copy_user_space(DEVICE_EXTENSION *pdx, int n) pCoherBuf += uiXfer; n -= uiXfer; } else { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: did not map page %d\n", __func__, nPage); return; } } else { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: exceeded pages %d\n", __func__, nPage); return; } } } else - dev_err(&pdx->interface->dev, "%s: bad area %d\n", + dev_err(&ced->interface->dev, "%s: bad area %d\n", __func__, nArea); } /* Forward declarations for stuff used circularly */ -static int ced_stage_chunk(DEVICE_EXTENSION *pdx); +static int ced_stage_chunk(struct ced_data *ced); /*************************************************************************** ** ReadWrite_Complete ** @@ -501,76 +501,76 @@ static int ced_stage_chunk(DEVICE_EXTENSION *pdx); */ static void staged_callback(struct urb *pUrb) { - DEVICE_EXTENSION *pdx = pUrb->context; + struct ced_data *ced = pUrb->context; unsigned int nGot = pUrb->actual_length; /* what we transferred */ bool bCancel = false; bool bRestartCharInput; /* used at the end */ - spin_lock(&pdx->stagedLock); /* stop ced_read_write_mem() action while this routine is running */ - pdx->bStagedUrbPending = false; /* clear the flag for staged IRP pending */ + spin_lock(&ced->stagedLock); /* stop ced_read_write_mem() action while this routine is running */ + ced->bStagedUrbPending = false; /* clear the flag for staged IRP pending */ if (pUrb->status) { /* sync/async unlink faults aren't errors */ if (! (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET || pUrb->status == -ESHUTDOWN)) { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", __func__, pUrb->status); } else - dev_info(&pdx->interface->dev, + dev_info(&ced->interface->dev, "%s: staged xfer cancelled\n", __func__); - spin_lock(&pdx->err_lock); - pdx->errors = pUrb->status; - spin_unlock(&pdx->err_lock); + spin_lock(&ced->err_lock); + ced->errors = pUrb->status; + spin_unlock(&ced->err_lock); nGot = 0; /* and tidy up again if so */ bCancel = true; } else { - dev_dbg(&pdx->interface->dev, "%s: %d chars xferred\n", + dev_dbg(&ced->interface->dev, "%s: %d chars xferred\n", __func__, nGot); - if (pdx->StagedRead) /* if reading, save to user space */ - ced_copy_user_space(pdx, nGot); /* copy from buffer to user */ + if (ced->StagedRead) /* if reading, save to user space */ + ced_copy_user_space(ced, nGot); /* copy from buffer to user */ if (nGot == 0) - dev_dbg(&pdx->interface->dev, "%s: ZLP\n", __func__); + dev_dbg(&ced->interface->dev, "%s: ZLP\n", __func__); } /* Update the transfer length based on the TransferBufferLength value in the URB */ - pdx->StagedDone += nGot; + ced->StagedDone += nGot; - dev_dbg(&pdx->interface->dev, "%s: done %d bytes of %d\n", - __func__, pdx->StagedDone, pdx->StagedLength); + dev_dbg(&ced->interface->dev, "%s: done %d bytes of %d\n", + __func__, ced->StagedDone, ced->StagedLength); - if ((pdx->StagedDone == pdx->StagedLength) || /* If no more to do */ + if ((ced->StagedDone == ced->StagedLength) || /* If no more to do */ (bCancel)) { /* or this IRP was cancelled */ /* Transfer area info */ - struct transarea *pArea = &pdx->rTransDef[pdx->StagedId]; - dev_dbg(&pdx->interface->dev, + struct transarea *pArea = &ced->rTransDef[ced->StagedId]; + dev_dbg(&ced->interface->dev, "%s: transfer done, bytes %d, cancel %d\n", - __func__, pdx->StagedDone, bCancel); + __func__, ced->StagedDone, bCancel); /* Here is where we sort out what to do with this transfer if using a circular buffer. We have */ /* a completed transfer that can be assumed to fit into the transfer area. We should be able to */ /* add this to the end of a growing block or to use it to start a new block unless the code */ /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ if ((pArea->bCircular) && (pArea->bCircToHost) && (!bCancel) && /* Time to sort out circular buffer info? */ - (pdx->StagedRead)) { /* Only for tohost transfers for now */ + (ced->StagedRead)) { /* Only for tohost transfers for now */ if (pArea->aBlocks[1].dwSize > 0) { /* If block 1 is in use we must append to it */ - if (pdx->StagedOffset == + if (ced->StagedOffset == (pArea->aBlocks[1].dwOffset + pArea->aBlocks[1].dwSize)) { pArea->aBlocks[1].dwSize += - pdx->StagedLength; - dev_dbg(&pdx->interface->dev, + ced->StagedLength; + dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 now %d bytes at %d\n", pArea->aBlocks[1].dwSize, pArea->aBlocks[1].dwOffset); } else { /* Here things have gone very, very, wrong, but I cannot see how this can actually be achieved */ pArea->aBlocks[1].dwOffset = - pdx->StagedOffset; + ced->StagedOffset; pArea->aBlocks[1].dwSize = - pdx->StagedLength; - dev_err(&pdx->interface->dev, + ced->StagedLength; + dev_err(&ced->interface->dev, "%s: ERROR, circ block 1 re-started %d bytes at %d\n", __func__, pArea->aBlocks[1].dwSize, @@ -579,11 +579,11 @@ static void staged_callback(struct urb *pUrb) } else { /* If block 1 is not used, we try to add to block 0 */ if (pArea->aBlocks[0].dwSize > 0) { /* Got stored block 0 information? */ /* Must append onto the existing block 0 */ - if (pdx->StagedOffset == + if (ced->StagedOffset == (pArea->aBlocks[0].dwOffset + pArea->aBlocks[0].dwSize)) { - pArea->aBlocks[0].dwSize += pdx->StagedLength; /* Just add this transfer in */ - dev_dbg(&pdx->interface->dev, + pArea->aBlocks[0].dwSize += ced->StagedLength; /* Just add this transfer in */ + dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 now %d bytes at %d\n", pArea->aBlocks[0]. dwSize, @@ -591,10 +591,10 @@ static void staged_callback(struct urb *pUrb) dwOffset); } else { /* If it doesn't append, put into new block 1 */ pArea->aBlocks[1].dwOffset = - pdx->StagedOffset; + ced->StagedOffset; pArea->aBlocks[1].dwSize = - pdx->StagedLength; - dev_dbg(&pdx->interface->dev, + ced->StagedLength; + dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 started %d bytes at %d\n", pArea->aBlocks[1]. dwSize, @@ -603,10 +603,10 @@ static void staged_callback(struct urb *pUrb) } } else { /* No info stored yet, just save in block 0 */ pArea->aBlocks[0].dwOffset = - pdx->StagedOffset; + ced->StagedOffset; pArea->aBlocks[0].dwSize = - pdx->StagedLength; - dev_dbg(&pdx->interface->dev, + ced->StagedLength; + dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 started %d bytes at %d\n", pArea->aBlocks[0].dwSize, pArea->aBlocks[0].dwOffset); @@ -615,12 +615,12 @@ static void staged_callback(struct urb *pUrb) } if (!bCancel) { /* Don't generate an event if cancelled */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "RWM_Complete, bCircular %d, bToHost %d, eStart %d, eSize %d\n", pArea->bCircular, pArea->bEventToHost, pArea->dwEventSt, pArea->dwEventSz); if ((pArea->dwEventSz) && /* Set a user-mode event... */ - (pdx->StagedRead == pArea->bEventToHost)) { /* ...on transfers in this direction? */ + (ced->StagedRead == pArea->bEventToHost)) { /* ...on transfers in this direction? */ int iWakeUp = 0; /* assume */ /* If we have completed the right sort of DMA transfer then set the event to notify */ /* the user code to wake up anyone that is waiting. */ @@ -633,16 +633,16 @@ static void staged_callback(struct urb *pUrb) iWakeUp = (dwTotal >= pArea->dwEventSz); } else { unsigned int transEnd = - pdx->StagedOffset + - pdx->StagedLength; + ced->StagedOffset + + ced->StagedLength; unsigned int eventEnd = pArea->dwEventSt + pArea->dwEventSz; - iWakeUp = (pdx->StagedOffset < eventEnd) + iWakeUp = (ced->StagedOffset < eventEnd) && (transEnd > pArea->dwEventSt); } if (iWakeUp) { - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "About to set event to notify app\n"); wake_up_interruptible(&pArea->wqEvent); /* wake up waiting processes */ ++pArea->iWakeUp; /* increment wakeup count */ @@ -650,44 +650,44 @@ static void staged_callback(struct urb *pUrb) } } - pdx->dwDMAFlag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ + ced->dwDMAFlag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ if (!bCancel) { /* Don't look for waiting transfer if cancelled */ /* If we have a transfer waiting, kick it off */ - if (pdx->bXFerWaiting) { /* Got a block xfer waiting? */ + if (ced->bXFerWaiting) { /* Got a block xfer waiting? */ int iReturn; - dev_info(&pdx->interface->dev, + dev_info(&ced->interface->dev, "*** RWM_Complete *** pending transfer will now be set up!!!\n"); iReturn = - ced_read_write_mem(pdx, !pdx->rDMAInfo.bOutWard, - pdx->rDMAInfo.wIdent, - pdx->rDMAInfo.dwOffset, - pdx->rDMAInfo.dwSize); + ced_read_write_mem(ced, !ced->rDMAInfo.bOutWard, + ced->rDMAInfo.wIdent, + ced->rDMAInfo.dwOffset, + ced->rDMAInfo.dwSize); if (iReturn) - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "RWM_Complete rw setup failed %d\n", iReturn); } } } else /* Here for more to do */ - ced_stage_chunk(pdx); /* fire off the next bit */ + ced_stage_chunk(ced); /* fire off the next bit */ /* While we hold the stagedLock, see if we should reallow character input ints */ /* Don't allow if cancelled, or if a new block has started or if there is a waiting block. */ /* This feels wrong as we should ask which spin lock protects dwDMAFlag. */ - bRestartCharInput = !bCancel && (pdx->dwDMAFlag == MODE_CHAR) - && !pdx->bXFerWaiting; + bRestartCharInput = !bCancel && (ced->dwDMAFlag == MODE_CHAR) + && !ced->bXFerWaiting; - spin_unlock(&pdx->stagedLock); /* Finally release the lock again */ + spin_unlock(&ced->stagedLock); /* Finally release the lock again */ /* This is not correct as dwDMAFlag is protected by the staged lock, but it is treated */ /* in ced_allowi as if it were protected by the char lock. In any case, most systems will */ /* not be upset by char input during DMA... sigh. Needs sorting out. */ if (bRestartCharInput) /* may be out of date, but... */ - ced_allowi(pdx); /* ...ced_allowi tests a lock too. */ - dev_dbg(&pdx->interface->dev, "%s: done\n", __func__); + ced_allowi(ced); /* ...ced_allowi tests a lock too. */ + dev_dbg(&ced->interface->dev, "%s: done\n", __func__); } /**************************************************************************** @@ -698,47 +698,47 @@ static void staged_callback(struct urb *pUrb) ** The calling code must have acquired the staging spinlock before calling ** this function, and is responsible for releasing it. We are at callback level. ****************************************************************************/ -static int ced_stage_chunk(DEVICE_EXTENSION *pdx) +static int ced_stage_chunk(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; unsigned int ChunkSize; - int nPipe = pdx->StagedRead ? 3 : 2; /* The pipe number to use for reads or writes */ - if (pdx->nPipes == 3) + int nPipe = ced->StagedRead ? 3 : 2; /* The pipe number to use for reads or writes */ + if (ced->nPipes == 3) nPipe--; /* Adjust for the 3-pipe case */ if (nPipe < 0) /* and trap case that should never happen */ return U14ERR_FAIL; - if (!can_accept_io_requests(pdx)) { /* got sudden remove? */ - dev_info(&pdx->interface->dev, "%s: sudden remove, giving up\n", + if (!can_accept_io_requests(ced)) { /* got sudden remove? */ + dev_info(&ced->interface->dev, "%s: sudden remove, giving up\n", __func__); return U14ERR_FAIL; /* could do with a better error */ } - ChunkSize = (pdx->StagedLength - pdx->StagedDone); /* transfer length remaining */ + ChunkSize = (ced->StagedLength - ced->StagedDone); /* transfer length remaining */ if (ChunkSize > STAGED_SZ) /* make sure to keep legal */ ChunkSize = STAGED_SZ; /* limit to max allowed */ - if (!pdx->StagedRead) /* if writing... */ - ced_copy_user_space(pdx, ChunkSize); /* ...copy data into the buffer */ + if (!ced->StagedRead) /* if writing... */ + ced_copy_user_space(ced, ChunkSize); /* ...copy data into the buffer */ - usb_fill_bulk_urb(pdx->pStagedUrb, pdx->udev, - pdx->StagedRead ? usb_rcvbulkpipe(pdx->udev, - pdx-> + usb_fill_bulk_urb(ced->pStagedUrb, ced->udev, + ced->StagedRead ? usb_rcvbulkpipe(ced->udev, + ced-> epAddr[nPipe]) : - usb_sndbulkpipe(pdx->udev, pdx->epAddr[nPipe]), - pdx->pCoherStagedIO, ChunkSize, staged_callback, pdx); - pdx->pStagedUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(pdx->pStagedUrb, &pdx->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(pdx->pStagedUrb, GFP_ATOMIC); + usb_sndbulkpipe(ced->udev, ced->epAddr[nPipe]), + ced->pCoherStagedIO, ChunkSize, staged_callback, ced); + ced->pStagedUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + usb_anchor_urb(ced->pStagedUrb, &ced->submitted); /* in case we need to kill it */ + iReturn = usb_submit_urb(ced->pStagedUrb, GFP_ATOMIC); if (iReturn) { - usb_unanchor_urb(pdx->pStagedUrb); /* kill it */ - pdx->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - dev_err(&pdx->interface->dev, "%s: submit urb failed, code %d\n", + usb_unanchor_urb(ced->pStagedUrb); /* kill it */ + ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + dev_err(&ced->interface->dev, "%s: submit urb failed, code %d\n", __func__, iReturn); } else - pdx->bStagedUrbPending = true; /* Set the flag for staged URB pending */ - dev_dbg(&pdx->interface->dev, "%s: done so far:%d, this size:%d\n", - __func__, pdx->StagedDone, ChunkSize); + ced->bStagedUrbPending = true; /* Set the flag for staged URB pending */ + dev_dbg(&ced->interface->dev, "%s: done so far:%d, this size:%d\n", + __func__, ced->StagedDone, ChunkSize); return iReturn; } @@ -760,34 +760,34 @@ static int ced_stage_chunk(DEVICE_EXTENSION *pdx) ** transfer. ** dwLen - the number of bytes to transfer. */ -int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, +int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen) { /* Transfer area info */ - struct transarea *pArea = &pdx->rTransDef[wIdent]; + struct transarea *pArea = &ced->rTransDef[wIdent]; - if (!can_accept_io_requests(pdx)) { /* Are we in a state to accept new requests? */ - dev_err(&pdx->interface->dev, "%s: can't accept requests\n", + if (!can_accept_io_requests(ced)) { /* Are we in a state to accept new requests? */ + dev_err(&ced->interface->dev, "%s: can't accept requests\n", __func__); return U14ERR_FAIL; } - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: xfer %d bytes to %s, offset %d, area %d\n", __func__, dwLen, Read ? "host" : "1401", dwOffs, wIdent); /* Amazingly, we can get an escape sequence back before the current staged Urb is done, so we */ /* have to check for this situation and, if so, wait until all is OK. */ - if (pdx->bStagedUrbPending) { - pdx->bXFerWaiting = true; /* Flag we are waiting */ - dev_info(&pdx->interface->dev, + if (ced->bStagedUrbPending) { + ced->bXFerWaiting = true; /* Flag we are waiting */ + dev_info(&ced->interface->dev, "%s: xfer is waiting, as previous staged pending\n", __func__); return U14ERR_NOERROR; } if (dwLen == 0) { /* allow 0-len read or write; just return success */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: OK; zero-len read/write request\n", __func__); return U14ERR_NOERROR; } @@ -797,7 +797,7 @@ int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, /* If so, we sort out offset ourself */ bool bWait = false; /* Flag for transfer having to wait */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "Circular buffers are %d at %d and %d at %d\n", pArea->aBlocks[0].dwSize, pArea->aBlocks[0].dwOffset, pArea->aBlocks[1].dwSize, pArea->aBlocks[1].dwOffset); @@ -820,28 +820,28 @@ int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, } if (bWait) { /* This transfer will have to wait? */ - pdx->bXFerWaiting = true; /* Flag we are waiting */ - dev_dbg(&pdx->interface->dev, + ced->bXFerWaiting = true; /* Flag we are waiting */ + dev_dbg(&ced->interface->dev, "%s: xfer waiting for circular buffer space\n", __func__); return U14ERR_NOERROR; } - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: circular xfer, %d bytes starting at %d\n", __func__, dwLen, dwOffs); } /* Save the parameters for the read\write transfer */ - pdx->StagedRead = Read; /* Save the parameters for this read */ - pdx->StagedId = wIdent; /* ID allows us to get transfer area info */ - pdx->StagedOffset = dwOffs; /* The area within the transfer area */ - pdx->StagedLength = dwLen; - pdx->StagedDone = 0; /* Initialise the byte count */ - pdx->dwDMAFlag = MODE_LINEAR; /* Set DMA mode flag at this point */ - pdx->bXFerWaiting = false; /* Clearly not a transfer waiting now */ + ced->StagedRead = Read; /* Save the parameters for this read */ + ced->StagedId = wIdent; /* ID allows us to get transfer area info */ + ced->StagedOffset = dwOffs; /* The area within the transfer area */ + ced->StagedLength = dwLen; + ced->StagedDone = 0; /* Initialise the byte count */ + ced->dwDMAFlag = MODE_LINEAR; /* Set DMA mode flag at this point */ + ced->bXFerWaiting = false; /* Clearly not a transfer waiting now */ -/* KeClearEvent(&pdx->StagingDoneEvent); // Clear the transfer done event */ - ced_stage_chunk(pdx); /* fire off the first chunk */ +/* KeClearEvent(&ced->StagingDoneEvent); // Clear the transfer done event */ + ced_stage_chunk(ced); /* fire off the first chunk */ return U14ERR_NOERROR; } @@ -945,14 +945,14 @@ static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, ** *****************************************************************************/ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, - DEVICE_EXTENSION *pdx, + struct ced_data *ced, char *pBuf, unsigned int dwCount) { bool bResult = false; /* assume we won't succeed */ unsigned char ucData; unsigned int dDone = 0; /* We haven't parsed anything so far */ - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + dev_dbg(&ced->interface->dev, "%s\n", __func__); if (ced_read_char(&ucData, pBuf, &dDone, dwCount)) { unsigned char ucTransCode = (ucData & 0x0F); /* get code for transfer type */ @@ -964,7 +964,7 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, pDmaDesc->dwSize = 0; /* initialise other bits */ pDmaDesc->dwOffset = 0; - dev_dbg(&pdx->interface->dev, "%s: type: %d ident: %d\n", + dev_dbg(&ced->interface->dev, "%s: type: %d ident: %d\n", __func__, pDmaDesc->wTransType, pDmaDesc->wIdent); pDmaDesc->bOutWard = (ucTransCode != TM_EXTTOHOST); /* set transfer direction */ @@ -979,27 +979,27 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, && ced_read_huff(&(pDmaDesc->dwSize), pBuf, &dDone, dwCount); if (bResult) { - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: xfer offset & size %d %d\n", __func__, pDmaDesc->dwOffset, pDmaDesc->dwSize); if ((wIdent >= MAX_TRANSAREAS) || /* Illegal area number, or... */ - (!pdx->rTransDef[wIdent].bUsed) || /* area not set up, or... */ - (pDmaDesc->dwOffset > pdx->rTransDef[wIdent].dwLength) || /* range/size */ + (!ced->rTransDef[wIdent].bUsed) || /* area not set up, or... */ + (pDmaDesc->dwOffset > ced->rTransDef[wIdent].dwLength) || /* range/size */ ((pDmaDesc->dwOffset + pDmaDesc->dwSize) > - (pdx->rTransDef[wIdent]. + (ced->rTransDef[wIdent]. dwLength))) { bResult = false; /* bad parameter(s) */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", __func__, wIdent, - pdx->rTransDef[wIdent]. + ced->rTransDef[wIdent]. bUsed, pDmaDesc->dwOffset, pDmaDesc->dwSize, - pdx->rTransDef[wIdent]. + ced->rTransDef[wIdent]. dwLength); } } @@ -1012,7 +1012,7 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, bResult = false; if (!bResult) /* now check parameters for validity */ - dev_err(&pdx->interface->dev, "%s: error reading Esc sequence\n", + dev_err(&ced->interface->dev, "%s: error reading Esc sequence\n", __func__); return bResult; @@ -1032,7 +1032,7 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, ** this is known to be at least 2 or we will not be called. ** ****************************************************************************/ -static int ced_handle_esc(DEVICE_EXTENSION *pdx, char *pCh, +static int ced_handle_esc(struct ced_data *ced, char *pCh, unsigned int dwCount) { int iReturn = U14ERR_FAIL; @@ -1043,48 +1043,48 @@ static int ced_handle_esc(DEVICE_EXTENSION *pdx, char *pCh, if (pCh[0] == '?') { /* Is this an information response */ /* Parse and save the information */ } else { - spin_lock(&pdx->stagedLock); /* Lock others out */ + spin_lock(&ced->stagedLock); /* Lock others out */ - if (ced_read_dma_info(&pdx->rDMAInfo, pdx, pCh, dwCount)) { /* Get DMA parameters */ - unsigned short wTransType = pdx->rDMAInfo.wTransType; /* check transfer type */ + if (ced_read_dma_info(&ced->rDMAInfo, ced, pCh, dwCount)) { /* Get DMA parameters */ + unsigned short wTransType = ced->rDMAInfo.wTransType; /* check transfer type */ - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: xfer to %s, offset %d, length %d\n", __func__, - pdx->rDMAInfo.bOutWard ? "1401" : "host", - pdx->rDMAInfo.dwOffset, pdx->rDMAInfo.dwSize); + ced->rDMAInfo.bOutWard ? "1401" : "host", + ced->rDMAInfo.dwOffset, ced->rDMAInfo.dwSize); - if (pdx->bXFerWaiting) { /* Check here for badly out of kilter... */ + if (ced->bXFerWaiting) { /* Check here for badly out of kilter... */ /* This can never happen, really */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "ERROR: DMA setup while transfer still waiting\n"); } else { if ((wTransType == TM_EXTTOHOST) || (wTransType == TM_EXTTO1401)) { iReturn = - ced_read_write_mem(pdx, - !pdx->rDMAInfo. + ced_read_write_mem(ced, + !ced->rDMAInfo. bOutWard, - pdx->rDMAInfo.wIdent, - pdx->rDMAInfo.dwOffset, - pdx->rDMAInfo.dwSize); + ced->rDMAInfo.wIdent, + ced->rDMAInfo.dwOffset, + ced->rDMAInfo.dwSize); if (iReturn != U14ERR_NOERROR) - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: ced_read_write_mem() failed %d\n", __func__, iReturn); } else /* This covers non-linear transfer setup */ - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: Unknown block xfer type %d\n", __func__, wTransType); } } else /* Failed to read parameters */ - dev_err(&pdx->interface->dev, "%s: ced_read_dma_info() fail\n", + dev_err(&ced->interface->dev, "%s: ced_read_dma_info() fail\n", __func__); - spin_unlock(&pdx->stagedLock); /* OK here */ + spin_unlock(&ced->stagedLock); /* OK here */ } - dev_dbg(&pdx->interface->dev, "%s: returns %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s: returns %d\n", __func__, iReturn); return iReturn; } @@ -1094,65 +1094,65 @@ static int ced_handle_esc(DEVICE_EXTENSION *pdx, char *pCh, ****************************************************************************/ static void ced_readchar_callback(struct urb *pUrb) { - DEVICE_EXTENSION *pdx = pUrb->context; + struct ced_data *ced = pUrb->context; int nGot = pUrb->actual_length; /* what we transferred */ if (pUrb->status) { /* Do we have a problem to handle? */ - int nPipe = pdx->nPipes == 4 ? 1 : 0; /* The pipe number to use for error */ + int nPipe = ced->nPipes == 4 ? 1 : 0; /* The pipe number to use for error */ /* sync/async unlink faults aren't errors... just saying device removed or stopped */ if (! (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET || pUrb->status == -ESHUTDOWN)) { - dev_err(&pdx->interface->dev, + dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", __func__, pUrb->status); } else - dev_dbg(&pdx->interface->dev, + dev_dbg(&ced->interface->dev, "%s: 0 chars pUrb->status=%d (shutdown?)\n", __func__, pUrb->status); - spin_lock(&pdx->err_lock); - pdx->errors = pUrb->status; - spin_unlock(&pdx->err_lock); + spin_lock(&ced->err_lock); + ced->errors = pUrb->status; + spin_unlock(&ced->err_lock); nGot = 0; /* and tidy up again if so */ - spin_lock(&pdx->charInLock); /* already at irq level */ - pdx->bPipeError[nPipe] = 1; /* Flag an error for later */ + spin_lock(&ced->charInLock); /* already at irq level */ + ced->bPipeError[nPipe] = 1; /* Flag an error for later */ } else { - if ((nGot > 1) && ((pdx->pCoherCharIn[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ - ced_handle_esc(pdx, &pdx->pCoherCharIn[1], nGot - 1); /* handle it */ - spin_lock(&pdx->charInLock); /* already at irq level */ + if ((nGot > 1) && ((ced->pCoherCharIn[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ + ced_handle_esc(ced, &ced->pCoherCharIn[1], nGot - 1); /* handle it */ + spin_lock(&ced->charInLock); /* already at irq level */ } else { - spin_lock(&pdx->charInLock); /* already at irq level */ + spin_lock(&ced->charInLock); /* already at irq level */ if (nGot > 0) { unsigned int i; if (nGot < INBUF_SZ) { - pdx->pCoherCharIn[nGot] = 0; /* tidy the string */ - dev_dbg(&pdx->interface->dev, + ced->pCoherCharIn[nGot] = 0; /* tidy the string */ + dev_dbg(&ced->interface->dev, "%s: got %d chars >%s<\n", __func__, nGot, - pdx->pCoherCharIn); + ced->pCoherCharIn); } /* We know that whatever we read must fit in the input buffer */ for (i = 0; i < nGot; i++) { - pdx->inputBuffer[pdx->dwInBuffPut++] = - pdx->pCoherCharIn[i] & 0x7F; - if (pdx->dwInBuffPut >= INBUF_SZ) - pdx->dwInBuffPut = 0; + ced->inputBuffer[ced->dwInBuffPut++] = + ced->pCoherCharIn[i] & 0x7F; + if (ced->dwInBuffPut >= INBUF_SZ) + ced->dwInBuffPut = 0; } - if ((pdx->dwNumInput + nGot) <= INBUF_SZ) - pdx->dwNumInput += nGot; /* Adjust the buffer count accordingly */ + if ((ced->dwNumInput + nGot) <= INBUF_SZ) + ced->dwNumInput += nGot; /* Adjust the buffer count accordingly */ } else - dev_dbg(&pdx->interface->dev, "%s: read ZLP\n", + dev_dbg(&ced->interface->dev, "%s: read ZLP\n", __func__); } } - pdx->bReadCharsPending = false; /* No longer have a pending read */ - spin_unlock(&pdx->charInLock); /* already at irq level */ + ced->bReadCharsPending = false; /* No longer have a pending read */ + spin_unlock(&ced->charInLock); /* already at irq level */ - ced_allowi(pdx); /* see if we can do the next one */ + ced_allowi(ced); /* see if we can do the next one */ } /**************************************************************************** @@ -1162,47 +1162,47 @@ static void ced_readchar_callback(struct urb *pUrb) ** we can pick up any inward transfers. This can be called in multiple contexts ** so we use the irqsave version of the spinlock. ****************************************************************************/ -int ced_allowi(DEVICE_EXTENSION *pdx) +int ced_allowi(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; unsigned long flags; - spin_lock_irqsave(&pdx->charInLock, flags); /* can be called in multiple contexts */ + spin_lock_irqsave(&ced->charInLock, flags); /* can be called in multiple contexts */ /* We don't want char input running while DMA is in progress as we know that this */ /* can cause sequencing problems for the 2270. So don't. It will also allow the */ /* ERR response to get back to the host code too early on some PCs, even if there */ /* is no actual driver failure, so we don't allow this at all. */ - if (!pdx->bInDrawDown && /* stop input if */ - !pdx->bReadCharsPending && /* If no read request outstanding */ - (pdx->dwNumInput < (INBUF_SZ / 2)) && /* and there is some space */ - (pdx->dwDMAFlag == MODE_CHAR) && /* not doing any DMA */ - (!pdx->bXFerWaiting) && /* no xfer waiting to start */ - (can_accept_io_requests(pdx))) { /* and activity is generally OK */ + if (!ced->bInDrawDown && /* stop input if */ + !ced->bReadCharsPending && /* If no read request outstanding */ + (ced->dwNumInput < (INBUF_SZ / 2)) && /* and there is some space */ + (ced->dwDMAFlag == MODE_CHAR) && /* not doing any DMA */ + (!ced->bXFerWaiting) && /* no xfer waiting to start */ + (can_accept_io_requests(ced))) { /* and activity is generally OK */ /* then off we go */ - unsigned int nMax = INBUF_SZ - pdx->dwNumInput; /* max we could read */ - int nPipe = pdx->nPipes == 4 ? 1 : 0; /* The pipe number to use */ - - dev_dbg(&pdx->interface->dev, "%s: %d chars in input buffer\n", - __func__, pdx->dwNumInput); - - usb_fill_int_urb(pdx->pUrbCharIn, pdx->udev, - usb_rcvintpipe(pdx->udev, pdx->epAddr[nPipe]), - pdx->pCoherCharIn, nMax, ced_readchar_callback, - pdx, pdx->bInterval); - pdx->pUrbCharIn->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; /* short xfers are OK by default */ - usb_anchor_urb(pdx->pUrbCharIn, &pdx->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(pdx->pUrbCharIn, GFP_ATOMIC); + unsigned int nMax = INBUF_SZ - ced->dwNumInput; /* max we could read */ + int nPipe = ced->nPipes == 4 ? 1 : 0; /* The pipe number to use */ + + dev_dbg(&ced->interface->dev, "%s: %d chars in input buffer\n", + __func__, ced->dwNumInput); + + usb_fill_int_urb(ced->pUrbCharIn, ced->udev, + usb_rcvintpipe(ced->udev, ced->epAddr[nPipe]), + ced->pCoherCharIn, nMax, ced_readchar_callback, + ced, ced->bInterval); + ced->pUrbCharIn->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; /* short xfers are OK by default */ + usb_anchor_urb(ced->pUrbCharIn, &ced->submitted); /* in case we need to kill it */ + iReturn = usb_submit_urb(ced->pUrbCharIn, GFP_ATOMIC); if (iReturn) { - usb_unanchor_urb(pdx->pUrbCharIn); /* remove from list of active Urbs */ - pdx->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - dev_err(&pdx->interface->dev, + usb_unanchor_urb(ced->pUrbCharIn); /* remove from list of active Urbs */ + ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + dev_err(&ced->interface->dev, "%s: submit urb failed: %d\n", __func__, iReturn); } else - pdx->bReadCharsPending = true; /* Flag that we are active here */ + ced->bReadCharsPending = true; /* Flag that we are active here */ } - spin_unlock_irqrestore(&pdx->charInLock, flags); + spin_unlock_irqrestore(&ced->charInLock, flags); return iReturn; @@ -1211,15 +1211,15 @@ int ced_allowi(DEVICE_EXTENSION *pdx) /***************************************************************************** ** The ioctl entry point to the driver that is used by us to talk to it. ** inode The device node (no longer in 3.0.0 kernels) -** file The file that is open, which holds our pdx pointer +** file The file that is open, which holds our ced pointer ** ulArg The argument passed in. Note that long is 64-bits in 64-bit system, i.e. it is big ** enough for a 64-bit pointer. *****************************************************************************/ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) { int err = 0; - DEVICE_EXTENSION *pdx = file->private_data; - if (!can_accept_io_requests(pdx)) /* check we still exist */ + struct ced_data *ced = file->private_data; + if (!can_accept_io_requests(ced)) /* check we still exist */ return -ENODEV; /* Check that access is allowed, where is is needed. Anything that would have an indeterminate */ @@ -1233,38 +1233,38 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) switch (_IOC_NR(cmd)) { case _IOC_NR(IOCTL_CED_SENDSTRING(0)): - return ced_send_string(pdx, (const char __user *)ulArg, + return ced_send_string(ced, (const char __user *)ulArg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_RESET1401): - return ced_reset(pdx); + return ced_reset(ced); case _IOC_NR(IOCTL_CED_GETCHAR): - return ced_get_char(pdx); + return ced_get_char(ced); case _IOC_NR(IOCTL_CED_SENDCHAR): - return ced_send_char(pdx, (char)ulArg); + return ced_send_char(ced, (char)ulArg); case _IOC_NR(IOCTL_CED_STAT1401): - return ced_stat_1401(pdx); + return ced_stat_1401(ced); case _IOC_NR(IOCTL_CED_LINECOUNT): - return ced_line_count(pdx); + return ced_line_count(ced); case _IOC_NR(IOCTL_CED_GETSTRING(0)): - return ced_get_string(pdx, (char __user *)ulArg, _IOC_SIZE(cmd)); + return ced_get_string(ced, (char __user *)ulArg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_SETTRANSFER): - return ced_set_transfer(pdx, (struct transfer_area_desc __user *) ulArg); + return ced_set_transfer(ced, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_UNSETTRANSFER): - return ced_unset_transfer(pdx, (int)ulArg); + return ced_unset_transfer(ced, (int)ulArg); case _IOC_NR(IOCTL_CED_SETEVENT): - return ced_set_event(pdx, (struct transfer_event __user *) ulArg); + return ced_set_event(ced, (struct transfer_event __user *) ulArg); case _IOC_NR(IOCTL_CED_GETOUTBUFSPACE): - return ced_get_out_buf_space(pdx); + return ced_get_out_buf_space(ced); case _IOC_NR(IOCTL_CED_GETBASEADDRESS): return -1; @@ -1273,66 +1273,66 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return (2 << 24) | (DRIVERMAJREV << 16) | DRIVERMINREV; /* USB | MAJOR | MINOR */ case _IOC_NR(IOCTL_CED_GETTRANSFER): - return ced_get_transfer(pdx, (TGET_TX_BLOCK __user *) ulArg); + return ced_get_transfer(ced, (TGET_TX_BLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_KILLIO1401): - return ced_kill_io(pdx); + return ced_kill_io(ced); case _IOC_NR(IOCTL_CED_STATEOF1401): - return ced_state_of_1401(pdx); + return ced_state_of_1401(ced); case _IOC_NR(IOCTL_CED_GRAB1401): case _IOC_NR(IOCTL_CED_FREE1401): return U14ERR_NOERROR; case _IOC_NR(IOCTL_CED_STARTSELFTEST): - return ced_start_self_test(pdx); + return ced_start_self_test(ced); case _IOC_NR(IOCTL_CED_CHECKSELFTEST): - return ced_check_self_test(pdx, (TGET_SELFTEST __user *) ulArg); + return ced_check_self_test(ced, (TGET_SELFTEST __user *) ulArg); case _IOC_NR(IOCTL_CED_TYPEOF1401): - return ced_type_of_1401(pdx); + return ced_type_of_1401(ced); case _IOC_NR(IOCTL_CED_TRANSFERFLAGS): - return ced_transfer_flags(pdx); + return ced_transfer_flags(ced); case _IOC_NR(IOCTL_CED_DBGPEEK): - return ced_dbg_peek(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_peek(ced, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGPOKE): - return ced_dbg_poke(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_poke(ced, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPDATA): - return ced_dbg_ramp_data(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_data(ced, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGRAMPADDR): - return ced_dbg_ramp_addr(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_addr(ced, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGGETDATA): - return ced_dbg_get_data(pdx, (TDBGBLOCK __user *) ulArg); + return ced_dbg_get_data(ced, (TDBGBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_DBGSTOPLOOP): - return ced_dbg_stop_loop(pdx); + return ced_dbg_stop_loop(ced); case _IOC_NR(IOCTL_CED_FULLRESET): - pdx->bForceReset = true; /* Set a flag for a full reset */ + ced->bForceReset = true; /* Set a flag for a full reset */ break; case _IOC_NR(IOCTL_CED_SETCIRCULAR): - return ced_set_circular(pdx, (struct transfer_area_desc __user *) ulArg); + return ced_set_circular(ced, (struct transfer_area_desc __user *) ulArg); case _IOC_NR(IOCTL_CED_GETCIRCBLOCK): - return ced_get_circ_block(pdx, (TCIRCBLOCK __user *) ulArg); + return ced_get_circ_block(ced, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_FREECIRCBLOCK): - return ced_free_circ_block(pdx, (TCIRCBLOCK __user *) ulArg); + return ced_free_circ_block(ced, (TCIRCBLOCK __user *) ulArg); case _IOC_NR(IOCTL_CED_WAITEVENT): - return ced_wait_event(pdx, (int)(ulArg & 0xff), (int)(ulArg >> 8)); + return ced_wait_event(ced, (int)(ulArg & 0xff), (int)(ulArg >> 8)); case _IOC_NR(IOCTL_CED_TESTEVENT): - return ced_test_event(pdx, (int)ulArg); + return ced_test_event(ced, (int)ulArg); default: return U14ERR_NO_SUCH_FN; @@ -1360,47 +1360,47 @@ static struct usb_class_driver ced_class = { }; /* Check that the device that matches a 1401 vendor and product ID is OK to use and */ -/* initialise our DEVICE_EXTENSION. */ +/* initialise our struct ced_data. */ static int ced_probe(struct usb_interface *interface, const struct usb_device_id *id) { - DEVICE_EXTENSION *pdx; + struct ced_data *ced; struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; int i, bcdDevice; int retval = -ENOMEM; /* allocate memory for our device extension and initialize it */ - pdx = kzalloc(sizeof(*pdx), GFP_KERNEL); - if (!pdx) + ced = kzalloc(sizeof(*ced), GFP_KERNEL); + if (!ced) goto error; for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ - init_waitqueue_head(&pdx->rTransDef[i].wqEvent); + init_waitqueue_head(&ced->rTransDef[i].wqEvent); } - /* Put initialises for our stuff here. Note that all of *pdx is zero, so */ + /* Put initialises for our stuff here. Note that all of *ced is zero, so */ /* no need to explicitly zero it. */ - spin_lock_init(&pdx->charOutLock); - spin_lock_init(&pdx->charInLock); - spin_lock_init(&pdx->stagedLock); + spin_lock_init(&ced->charOutLock); + spin_lock_init(&ced->charInLock); + spin_lock_init(&ced->stagedLock); /* Initialises from the skeleton stuff */ - kref_init(&pdx->kref); - mutex_init(&pdx->io_mutex); - spin_lock_init(&pdx->err_lock); - init_usb_anchor(&pdx->submitted); + kref_init(&ced->kref); + mutex_init(&ced->io_mutex); + spin_lock_init(&ced->err_lock); + init_usb_anchor(&ced->submitted); - pdx->udev = usb_get_dev(interface_to_usbdev(interface)); - pdx->interface = interface; + ced->udev = usb_get_dev(interface_to_usbdev(interface)); + ced->interface = interface; /* Attempt to identify the device */ - bcdDevice = pdx->udev->descriptor.bcdDevice; + bcdDevice = ced->udev->descriptor.bcdDevice; i = (bcdDevice >> 8); if (i == 0) - pdx->s1401Type = TYPEU1401; + ced->s1401Type = TYPEU1401; else if ((i >= 1) && (i <= 23)) - pdx->s1401Type = i + 2; + ced->s1401Type = i + 2; else { dev_err(&interface->dev, "%s: Unknown device. bcdDevice = %d\n", __func__, bcdDevice); @@ -1409,58 +1409,58 @@ static int ced_probe(struct usb_interface *interface, /* set up the endpoint information. We only care about the number of EP as */ /* we know that we are dealing with a 1401 device. */ iface_desc = interface->cur_altsetting; - pdx->nPipes = iface_desc->desc.bNumEndpoints; + ced->nPipes = iface_desc->desc.bNumEndpoints; dev_info(&interface->dev, "1401Type=%d with %d End Points\n", - pdx->s1401Type, pdx->nPipes); - if ((pdx->nPipes < 3) || (pdx->nPipes > 4)) + ced->s1401Type, ced->nPipes); + if ((ced->nPipes < 3) || (ced->nPipes > 4)) goto error; /* Allocate the URBs we hold for performing transfers */ - pdx->pUrbCharOut = usb_alloc_urb(0, GFP_KERNEL); /* character output URB */ - pdx->pUrbCharIn = usb_alloc_urb(0, GFP_KERNEL); /* character input URB */ - pdx->pStagedUrb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ - if (!pdx->pUrbCharOut || !pdx->pUrbCharIn || !pdx->pStagedUrb) { + ced->pUrbCharOut = usb_alloc_urb(0, GFP_KERNEL); /* character output URB */ + ced->pUrbCharIn = usb_alloc_urb(0, GFP_KERNEL); /* character input URB */ + ced->pStagedUrb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ + if (!ced->pUrbCharOut || !ced->pUrbCharIn || !ced->pStagedUrb) { dev_err(&interface->dev, "%s: URB alloc failed\n", __func__); goto error; } - pdx->pCoherStagedIO = - usb_alloc_coherent(pdx->udev, STAGED_SZ, GFP_KERNEL, - &pdx->pStagedUrb->transfer_dma); - pdx->pCoherCharOut = - usb_alloc_coherent(pdx->udev, OUTBUF_SZ, GFP_KERNEL, - &pdx->pUrbCharOut->transfer_dma); - pdx->pCoherCharIn = - usb_alloc_coherent(pdx->udev, INBUF_SZ, GFP_KERNEL, - &pdx->pUrbCharIn->transfer_dma); - if (!pdx->pCoherCharOut || !pdx->pCoherCharIn || !pdx->pCoherStagedIO) { + ced->pCoherStagedIO = + usb_alloc_coherent(ced->udev, STAGED_SZ, GFP_KERNEL, + &ced->pStagedUrb->transfer_dma); + ced->pCoherCharOut = + usb_alloc_coherent(ced->udev, OUTBUF_SZ, GFP_KERNEL, + &ced->pUrbCharOut->transfer_dma); + ced->pCoherCharIn = + usb_alloc_coherent(ced->udev, INBUF_SZ, GFP_KERNEL, + &ced->pUrbCharIn->transfer_dma); + if (!ced->pCoherCharOut || !ced->pCoherCharIn || !ced->pCoherStagedIO) { dev_err(&interface->dev, "%s: Coherent buffer alloc failed\n", __func__); goto error; } - for (i = 0; i < pdx->nPipes; ++i) { + for (i = 0; i < ced->nPipes; ++i) { endpoint = &iface_desc->endpoint[i].desc; - pdx->epAddr[i] = endpoint->bEndpointAddress; + ced->epAddr[i] = endpoint->bEndpointAddress; dev_info(&interface->dev, "Pipe %d, ep address %02x\n", - i, pdx->epAddr[i]); - if (((pdx->nPipes == 3) && (i == 0)) || /* if char input end point */ - ((pdx->nPipes == 4) && (i == 1))) { - pdx->bInterval = endpoint->bInterval; /* save the endpoint interrupt interval */ + i, ced->epAddr[i]); + if (((ced->nPipes == 3) && (i == 0)) || /* if char input end point */ + ((ced->nPipes == 4) && (i == 1))) { + ced->bInterval = endpoint->bInterval; /* save the endpoint interrupt interval */ dev_info(&interface->dev, "Pipe %d, bInterval = %d\n", - i, pdx->bInterval); + i, ced->bInterval); } /* Detect USB2 by checking last ep size (64 if USB1) */ - if (i == pdx->nPipes - 1) { /* if this is the last ep (bulk) */ - pdx->bIsUSB2 = + if (i == ced->nPipes - 1) { /* if this is the last ep (bulk) */ + ced->bIsUSB2 = le16_to_cpu(endpoint->wMaxPacketSize) > 64; - dev_info(&pdx->interface->dev, "USB%d\n", - pdx->bIsUSB2 + 1); + dev_info(&ced->interface->dev, "USB%d\n", + ced->bIsUSB2 + 1); } } /* save our data pointer in this interface device */ - usb_set_intfdata(interface, pdx); + usb_set_intfdata(interface, ced); /* we can register the device now, as it is ready */ retval = usb_register_dev(interface, &ced_class); @@ -1479,34 +1479,34 @@ static int ced_probe(struct usb_interface *interface, return 0; error: - if (pdx) - kref_put(&pdx->kref, ced_delete); /* frees allocated memory */ + if (ced) + kref_put(&ced->kref, ced_delete); /* frees allocated memory */ return retval; } static void ced_disconnect(struct usb_interface *interface) { - DEVICE_EXTENSION *pdx = usb_get_intfdata(interface); + struct ced_data *ced = usb_get_intfdata(interface); int minor = interface->minor; int i; - usb_set_intfdata(interface, NULL); /* remove the pdx from the interface */ + usb_set_intfdata(interface, NULL); /* remove the ced from the interface */ usb_deregister_dev(interface, &ced_class); /* give back our minor device number */ - mutex_lock(&pdx->io_mutex); /* stop more I/O starting while... */ - ced_draw_down(pdx); /* ...wait for then kill any io */ + mutex_lock(&ced->io_mutex); /* stop more I/O starting while... */ + ced_draw_down(ced); /* ...wait for then kill any io */ for (i = 0; i < MAX_TRANSAREAS; ++i) { - int iErr = ced_clear_area(pdx, i); /* ...release any used memory */ + int iErr = ced_clear_area(ced, i); /* ...release any used memory */ if (iErr == U14ERR_UNLOCKFAIL) - dev_err(&pdx->interface->dev, "%s: Area %d was in used\n", + dev_err(&ced->interface->dev, "%s: Area %d was in used\n", __func__, i); } - pdx->interface = NULL; /* ...we kill off link to interface */ - mutex_unlock(&pdx->io_mutex); + ced->interface = NULL; /* ...we kill off link to interface */ + mutex_unlock(&ced->io_mutex); - usb_kill_anchored_urbs(&pdx->submitted); + usb_kill_anchored_urbs(&ced->submitted); - kref_put(&pdx->kref, ced_delete); /* decrement our usage count */ + kref_put(&ced->kref, ced_delete); /* decrement our usage count */ dev_info(&interface->dev, "USB cedusb #%d now disconnected\n", minor); } @@ -1515,57 +1515,57 @@ static void ced_disconnect(struct usb_interface *interface) /* are left. NBNB we will need to have a mechanism to stop circular xfers */ /* from trying to fire off more urbs. We will wait up to 3 seconds for Urbs */ /* to be done. */ -void ced_draw_down(DEVICE_EXTENSION *pdx) +void ced_draw_down(struct ced_data *ced) { int time; - dev_dbg(&pdx->interface->dev, "%s: called\n", __func__); + dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - pdx->bInDrawDown = true; - time = usb_wait_anchor_empty_timeout(&pdx->submitted, 3000); + ced->bInDrawDown = true; + time = usb_wait_anchor_empty_timeout(&ced->submitted, 3000); if (!time) { /* if we timed out we kill the urbs */ - usb_kill_anchored_urbs(&pdx->submitted); - dev_err(&pdx->interface->dev, "%s: timed out\n", __func__); + usb_kill_anchored_urbs(&ced->submitted); + dev_err(&ced->interface->dev, "%s: timed out\n", __func__); } - pdx->bInDrawDown = false; + ced->bInDrawDown = false; } static int ced_suspend(struct usb_interface *intf, pm_message_t message) { - DEVICE_EXTENSION *pdx = usb_get_intfdata(intf); - if (!pdx) + struct ced_data *ced = usb_get_intfdata(intf); + if (!ced) return 0; - ced_draw_down(pdx); + ced_draw_down(ced); - dev_dbg(&pdx->interface->dev, "%s: called\n", __func__); + dev_dbg(&ced->interface->dev, "%s: called\n", __func__); return 0; } static int ced_resume(struct usb_interface *intf) { - DEVICE_EXTENSION *pdx = usb_get_intfdata(intf); - if (!pdx) + struct ced_data *ced = usb_get_intfdata(intf); + if (!ced) return 0; - dev_dbg(&pdx->interface->dev, "%s: called\n", __func__); + dev_dbg(&ced->interface->dev, "%s: called\n", __func__); return 0; } static int ced_pre_reset(struct usb_interface *intf) { - DEVICE_EXTENSION *pdx = usb_get_intfdata(intf); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); - mutex_lock(&pdx->io_mutex); - ced_draw_down(pdx); + struct ced_data *ced = usb_get_intfdata(intf); + dev_dbg(&ced->interface->dev, "%s\n", __func__); + mutex_lock(&ced->io_mutex); + ced_draw_down(ced); return 0; } static int ced_post_reset(struct usb_interface *intf) { - DEVICE_EXTENSION *pdx = usb_get_intfdata(intf); - dev_dbg(&pdx->interface->dev, "%s\n", __func__); + struct ced_data *ced = usb_get_intfdata(intf); + dev_dbg(&ced->interface->dev, "%s\n", __func__); /* we are sure no URBs are active - no locking needed */ - pdx->errors = -EPIPE; - mutex_unlock(&pdx->io_mutex); + ced->errors = -EPIPE; + mutex_unlock(&ced->io_mutex); return 0; } diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index d269d83c3fc3..c4b562fa6e09 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -134,7 +134,7 @@ struct dmadesc { /* Structure to hold all of our device specific stuff. We are making this as similar as we */ /* can to the Windows driver to help in our understanding of what is going on. */ -typedef struct _DEVICE_EXTENSION { +struct ced_data { char inputBuffer[INBUF_SZ]; /* The two buffers */ char outputBuffer[OUTBUF_SZ]; /* accessed by the host functions */ volatile unsigned int dwNumInput; /* num of chars in input buffer */ @@ -197,48 +197,49 @@ typedef struct _DEVICE_EXTENSION { int open_count; /* count the number of openers */ spinlock_t err_lock; /* lock for errors */ struct kref kref; -} DEVICE_EXTENSION, *PDEVICE_EXTENSION; -#define to_DEVICE_EXTENSION(d) container_of(d, DEVICE_EXTENSION, kref) +}; + +#define to_ced_data(d) container_of(d, struct ced_data, kref) /* Definitions of routimes used between compilation object files */ /* in usb1401.c */ -extern int ced_allowi(DEVICE_EXTENSION *pdx); -extern int ced_send_chars(DEVICE_EXTENSION *pdx); -extern void ced_draw_down(DEVICE_EXTENSION *pdx); -extern int ced_read_write_mem(DEVICE_EXTENSION *pdx, bool Read, unsigned short wIdent, +extern int ced_allowi(struct ced_data * ced); +extern int ced_send_chars(struct ced_data *ced); +extern void ced_draw_down(struct ced_data *ced); +extern int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen); /* in ced_ioc.c */ -extern int ced_clear_area(DEVICE_EXTENSION *pdx, int nArea); -extern int ced_send_string(DEVICE_EXTENSION *pdx, const char __user *pData, unsigned int n); -extern int ced_send_char(DEVICE_EXTENSION *pdx, char c); -extern int ced_get_state(DEVICE_EXTENSION *pdx, __u32 *state, __u32 *error); -extern int ced_read_write_cancel(DEVICE_EXTENSION *pdx); -extern int ced_reset(DEVICE_EXTENSION *pdx); -extern int ced_get_char(DEVICE_EXTENSION *pdx); -extern int ced_get_string(DEVICE_EXTENSION *pdx, char __user *pUser, int n); -extern int ced_set_transfer(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -extern int ced_unset_transfer(DEVICE_EXTENSION *pdx, int nArea); -extern int ced_set_event(DEVICE_EXTENSION *pdx, struct transfer_event __user *pTE); -extern int ced_stat_1401(DEVICE_EXTENSION *pdx); -extern int ced_line_count(DEVICE_EXTENSION *pdx); -extern int ced_get_out_buf_space(DEVICE_EXTENSION *pdx); -extern int ced_get_transfer(DEVICE_EXTENSION *pdx, TGET_TX_BLOCK __user *pGTB); -extern int ced_kill_io(DEVICE_EXTENSION *pdx); -extern int ced_state_of_1401(DEVICE_EXTENSION *pdx); -extern int ced_start_self_test(DEVICE_EXTENSION *pdx); -extern int ced_check_self_test(DEVICE_EXTENSION *pdx, TGET_SELFTEST __user *pGST); -extern int ced_type_of_1401(DEVICE_EXTENSION *pdx); -extern int ced_transfer_flags(DEVICE_EXTENSION *pdx); -extern int ced_dbg_peek(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int ced_dbg_poke(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int ced_dbg_ramp_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int ced_dbg_ramp_addr(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int ced_dbg_get_data(DEVICE_EXTENSION *pdx, TDBGBLOCK __user *pDB); -extern int ced_dbg_stop_loop(DEVICE_EXTENSION *pdx); -extern int ced_set_circular(DEVICE_EXTENSION *pdx, struct transfer_area_desc __user *pTD); -extern int ced_get_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -extern int ced_free_circ_block(DEVICE_EXTENSION *pdx, TCIRCBLOCK __user *pCB); -extern int ced_wait_event(DEVICE_EXTENSION *pdx, int nArea, int msTimeOut); -extern int ced_test_event(DEVICE_EXTENSION *pdx, int nArea); +extern int ced_clear_area(struct ced_data *ced, int nArea); +extern int ced_send_string(struct ced_data *ced, const char __user *pData, unsigned int n); +extern int ced_send_char(struct ced_data *ced, char c); +extern int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error); +extern int ced_read_write_cancel(struct ced_data *ced); +extern int ced_reset(struct ced_data *ced); +extern int ced_get_char(struct ced_data *ced); +extern int ced_get_string(struct ced_data *ced, char __user *pUser, int n); +extern int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *pTD); +extern int ced_unset_transfer(struct ced_data *ced, int nArea); +extern int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE); +extern int ced_stat_1401(struct ced_data *ced); +extern int ced_line_count(struct ced_data *ced); +extern int ced_get_out_buf_space(struct ced_data *ced); +extern int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pGTB); +extern int ced_kill_io(struct ced_data *ced); +extern int ced_state_of_1401(struct ced_data *ced); +extern int ced_start_self_test(struct ced_data *ced); +extern int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST); +extern int ced_type_of_1401(struct ced_data *ced); +extern int ced_transfer_flags(struct ced_data *ced); +extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_stop_loop(struct ced_data *ced); +extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); +extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); +extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); +extern int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut); +extern int ced_test_event(struct ced_data *ced, int nArea); #endif -- cgit From 077e02d0395715a14c928ddf7037eb551e85777a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:48 +0200 Subject: staging: ced1401: rename members of struct circ_blk Rename members with CamelCase and Hungarian notation Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 46 ++++++++++++------------ drivers/staging/ced1401/usb1401.c | 74 +++++++++++++++++++-------------------- drivers/staging/ced1401/usb1401.h | 4 +-- 3 files changed, 62 insertions(+), 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 982112155279..20acda2f2ea8 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -710,10 +710,10 @@ static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, pTA->bCircular = bCircular; pTA->bCircToHost = bCircToHost; - pTA->aBlocks[0].dwOffset = 0; - pTA->aBlocks[0].dwSize = 0; - pTA->aBlocks[1].dwOffset = 0; - pTA->aBlocks[1].dwSize = 0; + pTA->aBlocks[0].offset = 0; + pTA->aBlocks[0].size = 0; + pTA->aBlocks[1].offset = 0; + pTA->aBlocks[1].size = 0; pTA->bUsed = true; /* This is now a used block */ spin_unlock_irq(&ced->stagedLock); @@ -1361,9 +1361,9 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ (pArea->bCircToHost)) { /* For now at least must be to host */ - if (pArea->aBlocks[0].dwSize > 0) { /* Got anything? */ - cb.dwOffset = pArea->aBlocks[0].dwOffset; - cb.dwSize = pArea->aBlocks[0].dwSize; + if (pArea->aBlocks[0].size > 0) { /* Got anything? */ + cb.dwOffset = pArea->aBlocks[0].offset; + cb.dwSize = pArea->aBlocks[0].size; dev_dbg(&ced->interface->dev, "%s: return block 0: %d bytes at %d\n", __func__, cb.dwSize, cb.dwOffset); @@ -1415,31 +1415,31 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) (pArea->bCircToHost)) { /* For now at least must be to host */ bool bWaiting = false; - if ((pArea->aBlocks[0].dwSize >= uSize) && /* Got anything? */ - (pArea->aBlocks[0].dwOffset == uStart)) { /* Must be legal data */ - pArea->aBlocks[0].dwSize -= uSize; - pArea->aBlocks[0].dwOffset += uSize; - if (pArea->aBlocks[0].dwSize == 0) { /* Have we emptied this block? */ - if (pArea->aBlocks[1].dwSize) { /* Is there a second block? */ + if ((pArea->aBlocks[0].size >= uSize) && /* Got anything? */ + (pArea->aBlocks[0].offset == uStart)) { /* Must be legal data */ + pArea->aBlocks[0].size -= uSize; + pArea->aBlocks[0].offset += uSize; + if (pArea->aBlocks[0].size == 0) { /* Have we emptied this block? */ + if (pArea->aBlocks[1].size) { /* Is there a second block? */ pArea->aBlocks[0] = pArea->aBlocks[1]; /* Copy down block 2 data */ - pArea->aBlocks[1].dwSize = 0; /* and mark the second block as unused */ - pArea->aBlocks[1].dwOffset = 0; + pArea->aBlocks[1].size = 0; /* and mark the second block as unused */ + pArea->aBlocks[1].offset = 0; } else - pArea->aBlocks[0].dwOffset = 0; + pArea->aBlocks[0].offset = 0; } dev_dbg(&ced->interface->dev, "%s: free %d bytes at %d, return %d bytes at %d, wait=%d\n", __func__, uSize, uStart, - pArea->aBlocks[0].dwSize, - pArea->aBlocks[0].dwOffset, + pArea->aBlocks[0].size, + pArea->aBlocks[0].offset, ced->bXFerWaiting); /* Return the next available block of memory as well */ - if (pArea->aBlocks[0].dwSize > 0) { /* Got anything? */ + if (pArea->aBlocks[0].size > 0) { /* Got anything? */ cb.dwOffset = - pArea->aBlocks[0].dwOffset; - cb.dwSize = pArea->aBlocks[0].dwSize; + pArea->aBlocks[0].offset; + cb.dwSize = pArea->aBlocks[0].size; } bWaiting = ced->bXFerWaiting; @@ -1453,8 +1453,8 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) dev_err(&ced->interface->dev, "%s: ERROR: freeing %d bytes at %d, block 0 is %d bytes at %d\n", __func__, uSize, uStart, - pArea->aBlocks[0].dwSize, - pArea->aBlocks[0].dwOffset); + pArea->aBlocks[0].size, + pArea->aBlocks[0].offset); iReturn = U14ERR_NOMEMORY; } diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 83c608c2b748..0d3abc25ce33 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -554,62 +554,62 @@ static void staged_callback(struct urb *pUrb) /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ if ((pArea->bCircular) && (pArea->bCircToHost) && (!bCancel) && /* Time to sort out circular buffer info? */ (ced->StagedRead)) { /* Only for tohost transfers for now */ - if (pArea->aBlocks[1].dwSize > 0) { /* If block 1 is in use we must append to it */ + if (pArea->aBlocks[1].size > 0) { /* If block 1 is in use we must append to it */ if (ced->StagedOffset == - (pArea->aBlocks[1].dwOffset + - pArea->aBlocks[1].dwSize)) { - pArea->aBlocks[1].dwSize += + (pArea->aBlocks[1].offset + + pArea->aBlocks[1].size)) { + pArea->aBlocks[1].size += ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 now %d bytes at %d\n", - pArea->aBlocks[1].dwSize, - pArea->aBlocks[1].dwOffset); + pArea->aBlocks[1].size, + pArea->aBlocks[1].offset); } else { /* Here things have gone very, very, wrong, but I cannot see how this can actually be achieved */ - pArea->aBlocks[1].dwOffset = + pArea->aBlocks[1].offset = ced->StagedOffset; - pArea->aBlocks[1].dwSize = + pArea->aBlocks[1].size = ced->StagedLength; dev_err(&ced->interface->dev, "%s: ERROR, circ block 1 re-started %d bytes at %d\n", __func__, - pArea->aBlocks[1].dwSize, - pArea->aBlocks[1].dwOffset); + pArea->aBlocks[1].size, + pArea->aBlocks[1].offset); } } else { /* If block 1 is not used, we try to add to block 0 */ - if (pArea->aBlocks[0].dwSize > 0) { /* Got stored block 0 information? */ + if (pArea->aBlocks[0].size > 0) { /* Got stored block 0 information? */ /* Must append onto the existing block 0 */ if (ced->StagedOffset == - (pArea->aBlocks[0].dwOffset + - pArea->aBlocks[0].dwSize)) { - pArea->aBlocks[0].dwSize += ced->StagedLength; /* Just add this transfer in */ + (pArea->aBlocks[0].offset + + pArea->aBlocks[0].size)) { + pArea->aBlocks[0].size += ced->StagedLength; /* Just add this transfer in */ dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 now %d bytes at %d\n", pArea->aBlocks[0]. - dwSize, + size, pArea->aBlocks[0]. - dwOffset); + offset); } else { /* If it doesn't append, put into new block 1 */ - pArea->aBlocks[1].dwOffset = + pArea->aBlocks[1].offset = ced->StagedOffset; - pArea->aBlocks[1].dwSize = + pArea->aBlocks[1].size = ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 started %d bytes at %d\n", pArea->aBlocks[1]. - dwSize, + size, pArea->aBlocks[1]. - dwOffset); + offset); } } else { /* No info stored yet, just save in block 0 */ - pArea->aBlocks[0].dwOffset = + pArea->aBlocks[0].offset = ced->StagedOffset; - pArea->aBlocks[0].dwSize = + pArea->aBlocks[0].size = ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 started %d bytes at %d\n", - pArea->aBlocks[0].dwSize, - pArea->aBlocks[0].dwOffset); + pArea->aBlocks[0].size, + pArea->aBlocks[0].offset); } } } @@ -628,8 +628,8 @@ static void staged_callback(struct urb *pUrb) (pArea->bCircToHost)) { /* only in supported direction */ /* Is total data waiting up to size limit? */ unsigned int dwTotal = - pArea->aBlocks[0].dwSize + - pArea->aBlocks[1].dwSize; + pArea->aBlocks[0].size + + pArea->aBlocks[1].size; iWakeUp = (dwTotal >= pArea->dwEventSz); } else { unsigned int transEnd = @@ -799,22 +799,22 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, dev_dbg(&ced->interface->dev, "Circular buffers are %d at %d and %d at %d\n", - pArea->aBlocks[0].dwSize, pArea->aBlocks[0].dwOffset, - pArea->aBlocks[1].dwSize, pArea->aBlocks[1].dwOffset); - if (pArea->aBlocks[1].dwSize > 0) { /* Using the second block already? */ - dwOffs = pArea->aBlocks[1].dwOffset + pArea->aBlocks[1].dwSize; /* take offset from that */ - bWait = (dwOffs + dwLen) > pArea->aBlocks[0].dwOffset; /* Wait if will overwrite block 0? */ + pArea->aBlocks[0].size, pArea->aBlocks[0].offset, + pArea->aBlocks[1].size, pArea->aBlocks[1].offset); + if (pArea->aBlocks[1].size > 0) { /* Using the second block already? */ + dwOffs = pArea->aBlocks[1].offset + pArea->aBlocks[1].size; /* take offset from that */ + bWait = (dwOffs + dwLen) > pArea->aBlocks[0].offset; /* Wait if will overwrite block 0? */ bWait |= (dwOffs + dwLen) > pArea->dwLength; /* or if it overflows the buffer */ } else { /* Area 1 not in use, try to use area 0 */ - if (pArea->aBlocks[0].dwSize == 0) /* Reset block 0 if not in use */ - pArea->aBlocks[0].dwOffset = 0; + if (pArea->aBlocks[0].size == 0) /* Reset block 0 if not in use */ + pArea->aBlocks[0].offset = 0; dwOffs = - pArea->aBlocks[0].dwOffset + - pArea->aBlocks[0].dwSize; + pArea->aBlocks[0].offset + + pArea->aBlocks[0].size; if ((dwOffs + dwLen) > pArea->dwLength) { /* Off the end of the buffer? */ - pArea->aBlocks[1].dwOffset = 0; /* Set up to use second block */ + pArea->aBlocks[1].offset = 0; /* Set up to use second block */ dwOffs = 0; - bWait = (dwOffs + dwLen) > pArea->aBlocks[0].dwOffset; /* Wait if will overwrite block 0? */ + bWait = (dwOffs + dwLen) > pArea->aBlocks[0].offset; /* Wait if will overwrite block 0? */ bWait |= (dwOffs + dwLen) > pArea->dwLength; /* or if it overflows the buffer */ } } diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c4b562fa6e09..d93875b689f3 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -95,8 +95,8 @@ /* A structure holding information about a block */ /* of memory for use in circular transfers */ struct circ_blk { - volatile UINT dwOffset; /* Offset within area of block start */ - volatile UINT dwSize; /* Size of the block, in bytes (0 = unused) */ + volatile UINT offset; /* Offset within area of block start */ + volatile UINT size; /* Size of the block, in bytes (0 = unused) */ }; /* A structure holding all of the information about a transfer area - an area of */ -- cgit From 3d50f62ae395dd51a4c9613a849bc783abc7f4c1 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:49 +0200 Subject: staging: ced1401: rename members of struct transarea Rename members with CamelCase and Hungarian notation Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 118 ++++++++++++++++---------------- drivers/staging/ced1401/usb1401.c | 137 +++++++++++++++++++------------------- drivers/staging/ced1401/usb1401.h | 39 ++++++----- 3 files changed, 152 insertions(+), 142 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 20acda2f2ea8..2eb1eb9ede65 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -595,7 +595,7 @@ int ced_clear_area(struct ced_data *ced, int nArea) } else { /* to save typing */ struct transarea *pTA = &ced->rTransDef[nArea]; - if (!pTA->bUsed) /* if not used... */ + if (!pTA->used) /* if not used... */ iReturn = U14ERR_NOTSET; /* ...nothing to be done */ else { /* We must save the memory we return as we shouldn't mess with memory while */ @@ -614,17 +614,17 @@ int ced_clear_area(struct ced_data *ced, int nArea) "%s: call on area %d while active\n", __func__, nArea); } else { - pPages = pTA->pPages; /* save page address list */ - nPages = pTA->nPages; /* and page count */ - if (pTA->dwEventSz) /* if events flagging in use */ - wake_up_interruptible(&pTA->wqEvent); /* release anything that was waiting */ + pPages = pTA->pages; /* save page address list */ + nPages = pTA->n_pages; /* and page count */ + if (pTA->event_sz) /* if events flagging in use */ + wake_up_interruptible(&pTA->event); /* release anything that was waiting */ if (ced->bXFerWaiting && (ced->rDMAInfo.wIdent == nArea)) ced->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ /* Clean out the struct transarea except for the wait queue, which is at the end */ - /* This sets bUsed to false and dwEventSz to 0 to say area not used and no events. */ + /* This sets used to false and event_sz to 0 to say area not used and no events. */ memset(pTA, 0, sizeof(struct transarea) - sizeof(wait_queue_head_t)); @@ -701,20 +701,20 @@ static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, /* kmap() or kmap_atomic() to get a virtual address. page_address will give you */ /* (null) or at least it does in this context with an x86 machine. */ spin_lock_irq(&ced->stagedLock); - pTA->lpvBuff = puBuf; /* keep start of region (user address) */ - pTA->dwBaseOffset = ulOffset; /* save offset in first page to start of xfer */ - pTA->dwLength = dwLength; /* Size if the region in bytes */ - pTA->pPages = pPages; /* list of pages that are used by buffer */ - pTA->nPages = nPages; /* number of pages */ + pTA->buff = puBuf; /* keep start of region (user address) */ + pTA->base_offset = ulOffset; /* save offset in first page to start of xfer */ + pTA->length = dwLength; /* Size if the region in bytes */ + pTA->pages = pPages; /* list of pages that are used by buffer */ + pTA->n_pages = nPages; /* number of pages */ - pTA->bCircular = bCircular; - pTA->bCircToHost = bCircToHost; + pTA->circular = bCircular; + pTA->circ_to_host = bCircToHost; - pTA->aBlocks[0].offset = 0; - pTA->aBlocks[0].size = 0; - pTA->aBlocks[1].offset = 0; - pTA->aBlocks[1].size = 0; - pTA->bUsed = true; /* This is now a used block */ + pTA->blocks[0].offset = 0; + pTA->blocks[0].size = 0; + pTA->blocks[1].offset = 0; + pTA->blocks[1].size = 0; + pTA->used = true; /* This is now a used block */ spin_unlock_irq(&ced->stagedLock); iReturn = U14ERR_NOERROR; /* say all was well */ @@ -795,11 +795,11 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE) struct transarea *pTA = &ced->rTransDef[te.wAreaNum]; mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ spin_lock_irq(&ced->stagedLock); - if (pTA->bUsed) { /* area must be in use */ - pTA->dwEventSt = te.dwStart; /* set area regions */ - pTA->dwEventSz = te.dwLength; /* set size (0 cancels it) */ - pTA->bEventToHost = te.wFlags & 1; /* set the direction */ - pTA->iWakeUp = 0; /* zero the wake up count */ + if (pTA->used) { /* area must be in use */ + pTA->event_st = te.dwStart; /* set area regions */ + pTA->event_sz = te.dwLength; /* set size (0 cancels it) */ + pTA->event_to_host = te.wFlags & 1; /* set the direction */ + pTA->wake_up = 0; /* zero the wake up count */ } else iReturn = U14ERR_NOTSET; spin_unlock_irq(&ced->stagedLock); @@ -830,27 +830,27 @@ int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut) /* releasing it and the wait call. However, this would have to clear the */ /* iWakeUp flag. However, the !pTA-bUsed may help us in this case. */ mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ - if (!pTA->bUsed || !pTA->dwEventSz) /* check something to wait for... */ + if (!pTA->used || !pTA->event_sz) /* check something to wait for... */ return U14ERR_NOTSET; /* ...else we do nothing */ mutex_unlock(&ced->io_mutex); if (msTimeOut) iWait = - wait_event_interruptible_timeout(pTA->wqEvent, - pTA->iWakeUp - || !pTA->bUsed, + wait_event_interruptible_timeout(pTA->event, + pTA->wake_up + || !pTA->used, msTimeOut); else iWait = - wait_event_interruptible(pTA->wqEvent, pTA->iWakeUp - || !pTA->bUsed); + wait_event_interruptible(pTA->event, pTA->wake_up + || !pTA->used); if (iWait) iReturn = -ERESTARTSYS; /* oops - we have had a SIGNAL */ else - iReturn = pTA->iWakeUp; /* else the wakeup count */ + iReturn = pTA->wake_up; /* else the wakeup count */ spin_lock_irq(&ced->stagedLock); - pTA->iWakeUp = 0; /* clear the flag */ + pTA->wake_up = 0; /* clear the flag */ spin_unlock_irq(&ced->stagedLock); } return iReturn; @@ -871,8 +871,8 @@ int ced_test_event(struct ced_data *ced, int nArea) struct transarea *pTA = &ced->rTransDef[nArea]; mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ spin_lock_irq(&ced->stagedLock); - iReturn = pTA->iWakeUp; /* get wakeup count since last call */ - pTA->iWakeUp = 0; /* clear the count */ + iReturn = pTA->wake_up; /* get wakeup count since last call */ + pTA->wake_up = 0; /* clear the count */ spin_unlock_irq(&ced->stagedLock); mutex_unlock(&ced->io_mutex); } @@ -901,8 +901,8 @@ int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) mutex_unlock(&ced->io_mutex); return -ENOMEM; } - tx->size = ced->rTransDef[dwIdent].dwLength; - tx->linear = (long long)((long)ced->rTransDef[dwIdent].lpvBuff); + tx->size = ced->rTransDef[dwIdent].length; + tx->linear = (long long)((long)ced->rTransDef[dwIdent].buff); tx->avail = GET_TX_MAXENTRIES; /* how many blocks we could return */ tx->used = 1; /* number we actually return */ tx->entries[0].physical = @@ -1359,11 +1359,11 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) struct transarea *pArea = &ced->rTransDef[nArea]; spin_lock_irq(&ced->stagedLock); /* Lock others out */ - if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ - (pArea->bCircToHost)) { /* For now at least must be to host */ - if (pArea->aBlocks[0].size > 0) { /* Got anything? */ - cb.dwOffset = pArea->aBlocks[0].offset; - cb.dwSize = pArea->aBlocks[0].size; + if ((pArea->used) && (pArea->circular) && /* Must be circular area */ + (pArea->circ_to_host)) { /* For now at least must be to host */ + if (pArea->blocks[0].size > 0) { /* Got anything? */ + cb.dwOffset = pArea->blocks[0].offset; + cb.dwSize = pArea->blocks[0].size; dev_dbg(&ced->interface->dev, "%s: return block 0: %d bytes at %d\n", __func__, cb.dwSize, cb.dwOffset); @@ -1411,35 +1411,35 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) struct transarea *pArea = &ced->rTransDef[nArea]; spin_lock_irq(&ced->stagedLock); /* Lock others out */ - if ((pArea->bUsed) && (pArea->bCircular) && /* Must be circular area */ - (pArea->bCircToHost)) { /* For now at least must be to host */ + if ((pArea->used) && (pArea->circular) && /* Must be circular area */ + (pArea->circ_to_host)) { /* For now at least must be to host */ bool bWaiting = false; - if ((pArea->aBlocks[0].size >= uSize) && /* Got anything? */ - (pArea->aBlocks[0].offset == uStart)) { /* Must be legal data */ - pArea->aBlocks[0].size -= uSize; - pArea->aBlocks[0].offset += uSize; - if (pArea->aBlocks[0].size == 0) { /* Have we emptied this block? */ - if (pArea->aBlocks[1].size) { /* Is there a second block? */ - pArea->aBlocks[0] = pArea->aBlocks[1]; /* Copy down block 2 data */ - pArea->aBlocks[1].size = 0; /* and mark the second block as unused */ - pArea->aBlocks[1].offset = 0; + if ((pArea->blocks[0].size >= uSize) && /* Got anything? */ + (pArea->blocks[0].offset == uStart)) { /* Must be legal data */ + pArea->blocks[0].size -= uSize; + pArea->blocks[0].offset += uSize; + if (pArea->blocks[0].size == 0) { /* Have we emptied this block? */ + if (pArea->blocks[1].size) { /* Is there a second block? */ + pArea->blocks[0] = pArea->blocks[1]; /* Copy down block 2 data */ + pArea->blocks[1].size = 0; /* and mark the second block as unused */ + pArea->blocks[1].offset = 0; } else - pArea->aBlocks[0].offset = 0; + pArea->blocks[0].offset = 0; } dev_dbg(&ced->interface->dev, "%s: free %d bytes at %d, return %d bytes at %d, wait=%d\n", __func__, uSize, uStart, - pArea->aBlocks[0].size, - pArea->aBlocks[0].offset, + pArea->blocks[0].size, + pArea->blocks[0].offset, ced->bXFerWaiting); /* Return the next available block of memory as well */ - if (pArea->aBlocks[0].size > 0) { /* Got anything? */ + if (pArea->blocks[0].size > 0) { /* Got anything? */ cb.dwOffset = - pArea->aBlocks[0].offset; - cb.dwSize = pArea->aBlocks[0].size; + pArea->blocks[0].offset; + cb.dwSize = pArea->blocks[0].size; } bWaiting = ced->bXFerWaiting; @@ -1453,8 +1453,8 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) dev_err(&ced->interface->dev, "%s: ERROR: freeing %d bytes at %d, block 0 is %d bytes at %d\n", __func__, uSize, uStart, - pArea->aBlocks[0].size, - pArea->aBlocks[0].offset); + pArea->blocks[0].size, + pArea->blocks[0].offset); iReturn = U14ERR_NOMEMORY; } diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 0d3abc25ce33..17f2be5254d3 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -444,9 +444,9 @@ static void ced_copy_user_space(struct ced_data *ced, int n) /* area to be used */ struct transarea *pArea = &ced->rTransDef[nArea]; unsigned int dwOffset = - ced->StagedDone + ced->StagedOffset + pArea->dwBaseOffset; + ced->StagedDone + ced->StagedOffset + pArea->base_offset; char *pCoherBuf = ced->pCoherStagedIO; /* coherent buffer */ - if (!pArea->bUsed) { + if (!pArea->used) { dev_err(&ced->interface->dev, "%s: area %d unused\n", __func__, nArea); return; @@ -454,9 +454,9 @@ static void ced_copy_user_space(struct ced_data *ced, int n) while (n) { int nPage = dwOffset >> PAGE_SHIFT; /* page number in table */ - if (nPage < pArea->nPages) { + if (nPage < pArea->n_pages) { char *pvAddress = - (char *)kmap_atomic(pArea->pPages[nPage]); + (char *)kmap_atomic(pArea->pages[nPage]); if (pvAddress) { unsigned int uiPageOff = dwOffset & (PAGE_SIZE - 1); /* offset into the page */ size_t uiXfer = PAGE_SIZE - uiPageOff; /* max to transfer on this page */ @@ -552,64 +552,64 @@ static void staged_callback(struct urb *pUrb) /* a completed transfer that can be assumed to fit into the transfer area. We should be able to */ /* add this to the end of a growing block or to use it to start a new block unless the code */ /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ - if ((pArea->bCircular) && (pArea->bCircToHost) && (!bCancel) && /* Time to sort out circular buffer info? */ + if ((pArea->circular) && (pArea->circ_to_host) && (!bCancel) && /* Time to sort out circular buffer info? */ (ced->StagedRead)) { /* Only for tohost transfers for now */ - if (pArea->aBlocks[1].size > 0) { /* If block 1 is in use we must append to it */ + if (pArea->blocks[1].size > 0) { /* If block 1 is in use we must append to it */ if (ced->StagedOffset == - (pArea->aBlocks[1].offset + - pArea->aBlocks[1].size)) { - pArea->aBlocks[1].size += + (pArea->blocks[1].offset + + pArea->blocks[1].size)) { + pArea->blocks[1].size += ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 now %d bytes at %d\n", - pArea->aBlocks[1].size, - pArea->aBlocks[1].offset); + pArea->blocks[1].size, + pArea->blocks[1].offset); } else { /* Here things have gone very, very, wrong, but I cannot see how this can actually be achieved */ - pArea->aBlocks[1].offset = + pArea->blocks[1].offset = ced->StagedOffset; - pArea->aBlocks[1].size = + pArea->blocks[1].size = ced->StagedLength; dev_err(&ced->interface->dev, "%s: ERROR, circ block 1 re-started %d bytes at %d\n", __func__, - pArea->aBlocks[1].size, - pArea->aBlocks[1].offset); + pArea->blocks[1].size, + pArea->blocks[1].offset); } } else { /* If block 1 is not used, we try to add to block 0 */ - if (pArea->aBlocks[0].size > 0) { /* Got stored block 0 information? */ + if (pArea->blocks[0].size > 0) { /* Got stored block 0 information? */ /* Must append onto the existing block 0 */ if (ced->StagedOffset == - (pArea->aBlocks[0].offset + - pArea->aBlocks[0].size)) { - pArea->aBlocks[0].size += ced->StagedLength; /* Just add this transfer in */ + (pArea->blocks[0].offset + + pArea->blocks[0].size)) { + pArea->blocks[0].size += ced->StagedLength; /* Just add this transfer in */ dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 now %d bytes at %d\n", - pArea->aBlocks[0]. + pArea->blocks[0]. size, - pArea->aBlocks[0]. + pArea->blocks[0]. offset); } else { /* If it doesn't append, put into new block 1 */ - pArea->aBlocks[1].offset = + pArea->blocks[1].offset = ced->StagedOffset; - pArea->aBlocks[1].size = + pArea->blocks[1].size = ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 started %d bytes at %d\n", - pArea->aBlocks[1]. + pArea->blocks[1]. size, - pArea->aBlocks[1]. + pArea->blocks[1]. offset); } } else { /* No info stored yet, just save in block 0 */ - pArea->aBlocks[0].offset = + pArea->blocks[0].offset = ced->StagedOffset; - pArea->aBlocks[0].size = + pArea->blocks[0].size = ced->StagedLength; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 started %d bytes at %d\n", - pArea->aBlocks[0].size, - pArea->aBlocks[0].offset); + pArea->blocks[0].size, + pArea->blocks[0].offset); } } } @@ -617,35 +617,38 @@ static void staged_callback(struct urb *pUrb) if (!bCancel) { /* Don't generate an event if cancelled */ dev_dbg(&ced->interface->dev, "RWM_Complete, bCircular %d, bToHost %d, eStart %d, eSize %d\n", - pArea->bCircular, pArea->bEventToHost, - pArea->dwEventSt, pArea->dwEventSz); - if ((pArea->dwEventSz) && /* Set a user-mode event... */ - (ced->StagedRead == pArea->bEventToHost)) { /* ...on transfers in this direction? */ - int iWakeUp = 0; /* assume */ - /* If we have completed the right sort of DMA transfer then set the event to notify */ - /* the user code to wake up anyone that is waiting. */ - if ((pArea->bCircular) && /* Circular areas use a simpler test */ - (pArea->bCircToHost)) { /* only in supported direction */ + pArea->circular, pArea->event_to_host, + pArea->event_st, pArea->event_sz); + if ((pArea->event_sz) && /* Set a user-mode event... */ + (ced->StagedRead == pArea->event_to_host)) { /* ...on transfers in this direction? */ + int iWakeUp = 0; /* assume */ + + /* If we have completed the right sort of DMA */ + /* transfer then set the event to notify the */ + /* user code to wake up anyone that is */ + /* waiting. */ + if ((pArea->circular) && /* Circular areas use a simpler test */ + (pArea->circ_to_host)) { /* only in supported direction */ /* Is total data waiting up to size limit? */ unsigned int dwTotal = - pArea->aBlocks[0].size + - pArea->aBlocks[1].size; - iWakeUp = (dwTotal >= pArea->dwEventSz); + pArea->blocks[0].size + + pArea->blocks[1].size; + iWakeUp = (dwTotal >= pArea->event_sz); } else { unsigned int transEnd = ced->StagedOffset + ced->StagedLength; unsigned int eventEnd = - pArea->dwEventSt + pArea->dwEventSz; + pArea->event_st + pArea->event_sz; iWakeUp = (ced->StagedOffset < eventEnd) - && (transEnd > pArea->dwEventSt); + && (transEnd > pArea->event_st); } if (iWakeUp) { dev_dbg(&ced->interface->dev, "About to set event to notify app\n"); - wake_up_interruptible(&pArea->wqEvent); /* wake up waiting processes */ - ++pArea->iWakeUp; /* increment wakeup count */ + wake_up_interruptible(&pArea->event); /* wake up waiting processes */ + ++pArea->wake_up; /* increment wakeup count */ } } } @@ -792,30 +795,30 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, return U14ERR_NOERROR; } - if ((pArea->bCircular) && /* Circular transfer? */ - (pArea->bCircToHost) && (Read)) { /* In a supported direction */ + if ((pArea->circular) && /* Circular transfer? */ + (pArea->circ_to_host) && (Read)) { /* In a supported direction */ /* If so, we sort out offset ourself */ bool bWait = false; /* Flag for transfer having to wait */ dev_dbg(&ced->interface->dev, "Circular buffers are %d at %d and %d at %d\n", - pArea->aBlocks[0].size, pArea->aBlocks[0].offset, - pArea->aBlocks[1].size, pArea->aBlocks[1].offset); - if (pArea->aBlocks[1].size > 0) { /* Using the second block already? */ - dwOffs = pArea->aBlocks[1].offset + pArea->aBlocks[1].size; /* take offset from that */ - bWait = (dwOffs + dwLen) > pArea->aBlocks[0].offset; /* Wait if will overwrite block 0? */ - bWait |= (dwOffs + dwLen) > pArea->dwLength; /* or if it overflows the buffer */ + pArea->blocks[0].size, pArea->blocks[0].offset, + pArea->blocks[1].size, pArea->blocks[1].offset); + if (pArea->blocks[1].size > 0) { /* Using the second block already? */ + dwOffs = pArea->blocks[1].offset + pArea->blocks[1].size; /* take offset from that */ + bWait = (dwOffs + dwLen) > pArea->blocks[0].offset; /* Wait if will overwrite block 0? */ + bWait |= (dwOffs + dwLen) > pArea->length; /* or if it overflows the buffer */ } else { /* Area 1 not in use, try to use area 0 */ - if (pArea->aBlocks[0].size == 0) /* Reset block 0 if not in use */ - pArea->aBlocks[0].offset = 0; + if (pArea->blocks[0].size == 0) /* Reset block 0 if not in use */ + pArea->blocks[0].offset = 0; dwOffs = - pArea->aBlocks[0].offset + - pArea->aBlocks[0].size; - if ((dwOffs + dwLen) > pArea->dwLength) { /* Off the end of the buffer? */ - pArea->aBlocks[1].offset = 0; /* Set up to use second block */ + pArea->blocks[0].offset + + pArea->blocks[0].size; + if ((dwOffs + dwLen) > pArea->length) { /* Off the end of the buffer? */ + pArea->blocks[1].offset = 0; /* Set up to use second block */ dwOffs = 0; - bWait = (dwOffs + dwLen) > pArea->aBlocks[0].offset; /* Wait if will overwrite block 0? */ - bWait |= (dwOffs + dwLen) > pArea->dwLength; /* or if it overflows the buffer */ + bWait = (dwOffs + dwLen) > pArea->blocks[0].offset; /* Wait if will overwrite block 0? */ + bWait |= (dwOffs + dwLen) > pArea->length; /* or if it overflows the buffer */ } } @@ -985,22 +988,22 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, pDmaDesc->dwSize); if ((wIdent >= MAX_TRANSAREAS) || /* Illegal area number, or... */ - (!ced->rTransDef[wIdent].bUsed) || /* area not set up, or... */ - (pDmaDesc->dwOffset > ced->rTransDef[wIdent].dwLength) || /* range/size */ + (!ced->rTransDef[wIdent].used) || /* area not set up, or... */ + (pDmaDesc->dwOffset > ced->rTransDef[wIdent].length) || /* range/size */ ((pDmaDesc->dwOffset + pDmaDesc->dwSize) > (ced->rTransDef[wIdent]. - dwLength))) { + length))) { bResult = false; /* bad parameter(s) */ dev_dbg(&ced->interface->dev, "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", __func__, wIdent, ced->rTransDef[wIdent]. - bUsed, + used, pDmaDesc->dwOffset, pDmaDesc->dwSize, ced->rTransDef[wIdent]. - dwLength); + length); } } break; @@ -1376,7 +1379,7 @@ static int ced_probe(struct usb_interface *interface, goto error; for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ - init_waitqueue_head(&ced->rTransDef[i].wqEvent); + init_waitqueue_head(&ced->rTransDef[i].event); } /* Put initialises for our stuff here. Note that all of *ced is zero, so */ diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index d93875b689f3..30001652089b 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -99,23 +99,30 @@ struct circ_blk { volatile UINT size; /* Size of the block, in bytes (0 = unused) */ }; -/* A structure holding all of the information about a transfer area - an area of */ -/* memory set up for use either as a source or destination in DMA transfers. */ +/* A structure holding all of the information about a transfer area - an area */ +/* of memory set up for use either as a source or destination in DMA */ +/* transfers. */ struct transarea { - void __user *lpvBuff; /* User address of xfer area saved for completeness */ - UINT dwBaseOffset; /* offset to start of xfer area in first page */ - UINT dwLength; /* Length of xfer area, in bytes */ - struct page **pPages; /* Points at array of locked down pages */ - int nPages; /* number of pages that are locked down */ - bool bUsed; /* Is this structure in use? */ - bool bCircular; /* Is this area for circular transfers? */ - bool bCircToHost; /* Flag for direction of circular transfer */ - bool bEventToHost; /* Set event on transfer to host? */ - int iWakeUp; /* Set 1 on event, cleared by TestEvent() */ - UINT dwEventSt; /* Defines section within xfer area for... */ - UINT dwEventSz; /* ...notification by the event SZ is 0 if unset */ - struct circ_blk aBlocks[2]; /* Info on a pair of circular blocks */ - wait_queue_head_t wqEvent; /* The wait queue for events in this area MUST BE LAST */ + /* User address of xfer area saved for completeness */ + void __user *buff; + + /* offset to start of xfer area in first page */ + UINT base_offset; + + UINT length; /* Length of xfer area, in bytes */ + struct page **pages; /* Points at array of locked down pages */ + int n_pages; /* number of pages that are locked down */ + bool used; /* Is this structure in use? */ + bool circular; /* Is this area for circular transfers? */ + bool circ_to_host; /* Flag for direction of circular transfer */ + bool event_to_host; /* Set event on transfer to host? */ + int wake_up; /* Set 1 on event, cleared by TestEvent() */ + UINT event_st; /* Defines section within xfer area for... */ + UINT event_sz; /* notification by the event SZ is 0 if unset */ + struct circ_blk blocks[2]; /* Info on a pair of circular blocks */ + + wait_queue_head_t event; /* The wait queue for events in this */ + /* area MUST BE LAST */ }; /* The DMADESC structure is used to hold information on the transfer in progress. It */ -- cgit From 0dfcb0b9c5f1dbcf3d925e41248b7f5072470d67 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:50 +0200 Subject: staging: ced1401: rename members of struct dmadesc Rename members with CamelCase and Hungarian notation Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 11 ++++---- drivers/staging/ced1401/usb1401.c | 53 +++++++++++++++++++-------------------- drivers/staging/ced1401/usb1401.h | 15 +++++------ 3 files changed, 40 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 2eb1eb9ede65..d9ec20006692 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -620,7 +620,7 @@ int ced_clear_area(struct ced_data *ced, int nArea) wake_up_interruptible(&pTA->event); /* release anything that was waiting */ if (ced->bXFerWaiting - && (ced->rDMAInfo.wIdent == nArea)) + && (ced->rDMAInfo.ident == nArea)) ced->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ /* Clean out the struct transarea except for the wait queue, which is at the end */ @@ -1461,10 +1461,11 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) /* If we have one, kick off pending transfer */ if (bWaiting) { /* Got a block xfer waiting? */ int RWMStat = - ced_read_write_mem(ced, !ced->rDMAInfo.bOutWard, - ced->rDMAInfo.wIdent, - ced->rDMAInfo.dwOffset, - ced->rDMAInfo.dwSize); + ced_read_write_mem(ced, + !ced->rDMAInfo.outward, + ced->rDMAInfo.ident, + ced->rDMAInfo.offset, + ced->rDMAInfo.size); if (RWMStat != U14ERR_NOERROR) dev_err(&ced->interface->dev, "%s: rw setup failed %d\n", diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 17f2be5254d3..30d103cb1067 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -662,10 +662,10 @@ static void staged_callback(struct urb *pUrb) dev_info(&ced->interface->dev, "*** RWM_Complete *** pending transfer will now be set up!!!\n"); iReturn = - ced_read_write_mem(ced, !ced->rDMAInfo.bOutWard, - ced->rDMAInfo.wIdent, - ced->rDMAInfo.dwOffset, - ced->rDMAInfo.dwSize); + ced_read_write_mem(ced, !ced->rDMAInfo.outward, + ced->rDMAInfo.ident, + ced->rDMAInfo.offset, + ced->rDMAInfo.size); if (iReturn) dev_err(&ced->interface->dev, @@ -962,36 +962,36 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, unsigned short wIdent = ((ucData >> 4) & 0x07); /* and area identifier */ /* fill in the structure we were given */ - pDmaDesc->wTransType = ucTransCode; /* type of transfer */ - pDmaDesc->wIdent = wIdent; /* area to use */ - pDmaDesc->dwSize = 0; /* initialise other bits */ - pDmaDesc->dwOffset = 0; + pDmaDesc->trans_type = ucTransCode; /* type of transfer */ + pDmaDesc->ident = wIdent; /* area to use */ + pDmaDesc->size = 0; /* initialise other bits */ + pDmaDesc->offset = 0; dev_dbg(&ced->interface->dev, "%s: type: %d ident: %d\n", - __func__, pDmaDesc->wTransType, pDmaDesc->wIdent); + __func__, pDmaDesc->trans_type, pDmaDesc->ident); - pDmaDesc->bOutWard = (ucTransCode != TM_EXTTOHOST); /* set transfer direction */ + pDmaDesc->outward = (ucTransCode != TM_EXTTOHOST); /* set transfer direction */ switch (ucTransCode) { case TM_EXTTOHOST: /* Extended linear transfer modes (the only ones!) */ case TM_EXTTO1401: { bResult = - ced_read_huff(&(pDmaDesc->dwOffset), pBuf, + ced_read_huff(&(pDmaDesc->offset), pBuf, &dDone, dwCount) - && ced_read_huff(&(pDmaDesc->dwSize), pBuf, + && ced_read_huff(&(pDmaDesc->size), pBuf, &dDone, dwCount); if (bResult) { dev_dbg(&ced->interface->dev, "%s: xfer offset & size %d %d\n", - __func__, pDmaDesc->dwOffset, - pDmaDesc->dwSize); + __func__, pDmaDesc->offset, + pDmaDesc->size); if ((wIdent >= MAX_TRANSAREAS) || /* Illegal area number, or... */ (!ced->rTransDef[wIdent].used) || /* area not set up, or... */ - (pDmaDesc->dwOffset > ced->rTransDef[wIdent].length) || /* range/size */ - ((pDmaDesc->dwOffset + - pDmaDesc->dwSize) > + (pDmaDesc->offset > ced->rTransDef[wIdent].length) || /* range/size */ + ((pDmaDesc->offset + + pDmaDesc->size) > (ced->rTransDef[wIdent]. length))) { bResult = false; /* bad parameter(s) */ @@ -1000,8 +1000,8 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, __func__, wIdent, ced->rTransDef[wIdent]. used, - pDmaDesc->dwOffset, - pDmaDesc->dwSize, + pDmaDesc->offset, + pDmaDesc->size, ced->rTransDef[wIdent]. length); } @@ -1049,13 +1049,13 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, spin_lock(&ced->stagedLock); /* Lock others out */ if (ced_read_dma_info(&ced->rDMAInfo, ced, pCh, dwCount)) { /* Get DMA parameters */ - unsigned short wTransType = ced->rDMAInfo.wTransType; /* check transfer type */ + unsigned short wTransType = ced->rDMAInfo.trans_type; /* check transfer type */ dev_dbg(&ced->interface->dev, "%s: xfer to %s, offset %d, length %d\n", __func__, - ced->rDMAInfo.bOutWard ? "1401" : "host", - ced->rDMAInfo.dwOffset, ced->rDMAInfo.dwSize); + ced->rDMAInfo.outward ? "1401" : "host", + ced->rDMAInfo.offset, ced->rDMAInfo.size); if (ced->bXFerWaiting) { /* Check here for badly out of kilter... */ /* This can never happen, really */ @@ -1066,11 +1066,10 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, || (wTransType == TM_EXTTO1401)) { iReturn = ced_read_write_mem(ced, - !ced->rDMAInfo. - bOutWard, - ced->rDMAInfo.wIdent, - ced->rDMAInfo.dwOffset, - ced->rDMAInfo.dwSize); + !ced->rDMAInfo.outward, + ced->rDMAInfo.ident, + ced->rDMAInfo.offset, + ced->rDMAInfo.size); if (iReturn != U14ERR_NOERROR) dev_err(&ced->interface->dev, "%s: ced_read_write_mem() failed %d\n", diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 30001652089b..cb4e452b5e2f 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -125,14 +125,15 @@ struct transarea { /* area MUST BE LAST */ }; -/* The DMADESC structure is used to hold information on the transfer in progress. It */ -/* is set up by ReadDMAInfo, using information sent by the 1401 in an escape sequence. */ +/* The dmadesc structure is used to hold information on the transfer in */ +/* progress. It is set up by ReadDMAInfo, using information sent by the 1401 */ +/* in an escape sequence. */ struct dmadesc { - unsigned short wTransType; /* transfer type as TM_xxx above */ - unsigned short wIdent; /* identifier word */ - unsigned int dwSize; /* bytes to transfer */ - unsigned int dwOffset; /* offset into transfer area for trans */ - bool bOutWard; /* true when data is going TO 1401 */ + unsigned short trans_type; /* transfer type as TM_xxx above */ + unsigned short ident; /* identifier word */ + unsigned int size; /* bytes to transfer */ + unsigned int offset; /* offset into transfer area for trans */ + bool outward; /* true when data is going TO 1401 */ }; #define INBUF_SZ 256 /* input buffer size */ -- cgit From 9982440a5a54eb536c7efa87aedcd594cec8f449 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:51 +0200 Subject: staging: ced1401: rename members of struct ced_data Rename members with CamelCase and Hungarian notation Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 238 +++++++++---------- drivers/staging/ced1401/usb1401.c | 485 ++++++++++++++++++++------------------ drivers/staging/ced1401/usb1401.h | 116 ++++----- 3 files changed, 432 insertions(+), 407 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index d9ec20006692..60a671edbb06 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -38,17 +38,19 @@ ****************************************************************************/ static void ced_flush_out_buff(struct ced_data *ced) { - dev_dbg(&ced->interface->dev, "%s: currentState=%d\n", - __func__, ced->sCurrentState); - if (ced->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ + dev_dbg(&ced->interface->dev, "%s: current_state=%d\n", + __func__, ced->current_state); + + /* Do nothing if hardware in trouble */ + if (ced->current_state == U14ERR_TIME) return; /* Kill off any pending I/O */ /* CharSend_Cancel(ced); */ - spin_lock_irq(&ced->charOutLock); - ced->dwNumOutput = 0; - ced->dwOutBuffGet = 0; - ced->dwOutBuffPut = 0; - spin_unlock_irq(&ced->charOutLock); + spin_lock_irq(&ced->char_out_lock); + ced->num_output = 0; + ced->out_buff_get = 0; + ced->out_buff_put = 0; + spin_unlock_irq(&ced->char_out_lock); } /**************************************************************************** @@ -59,17 +61,17 @@ static void ced_flush_out_buff(struct ced_data *ced) ****************************************************************************/ static void ced_flush_in_buff(struct ced_data *ced) { - dev_dbg(&ced->interface->dev, "%s: currentState=%d\n", - __func__, ced->sCurrentState); - if (ced->sCurrentState == U14ERR_TIME) /* Do nothing if hardware in trouble */ + dev_dbg(&ced->interface->dev, "%s: current_state=%d\n", + __func__, ced->current_state); + if (ced->current_state == U14ERR_TIME) /* Do nothing if hardware in trouble */ return; /* Kill off any pending I/O */ /* CharRead_Cancel(pDevObject); */ - spin_lock_irq(&ced->charInLock); - ced->dwNumInput = 0; - ced->dwInBuffGet = 0; - ced->dwInBuffPut = 0; - spin_unlock_irq(&ced->charInLock); + spin_lock_irq(&ced->char_in_lock); + ced->num_input = 0; + ced->in_buff_get = 0; + ced->in_buff_put = 0; + spin_unlock_irq(&ced->char_in_lock); } /**************************************************************************** @@ -82,20 +84,20 @@ static int ced_put_chars(struct ced_data *ced, const char *pCh, unsigned int uCount) { int iReturn; - spin_lock_irq(&ced->charOutLock); /* get the output spin lock */ - if ((OUTBUF_SZ - ced->dwNumOutput) >= uCount) { + spin_lock_irq(&ced->char_out_lock); /* get the output spin lock */ + if ((OUTBUF_SZ - ced->num_output) >= uCount) { unsigned int u; for (u = 0; u < uCount; u++) { - ced->outputBuffer[ced->dwOutBuffPut++] = pCh[u]; - if (ced->dwOutBuffPut >= OUTBUF_SZ) - ced->dwOutBuffPut = 0; + ced->output_buffer[ced->out_buff_put++] = pCh[u]; + if (ced->out_buff_put >= OUTBUF_SZ) + ced->out_buff_put = 0; } - ced->dwNumOutput += uCount; - spin_unlock_irq(&ced->charOutLock); + ced->num_output += uCount; + spin_unlock_irq(&ced->char_out_lock); iReturn = ced_send_chars(ced); /* ...give a chance to transmit data */ } else { iReturn = U14ERR_NOOUT; /* no room at the out (ha-ha) */ - spin_unlock_irq(&ced->charOutLock); + spin_unlock_irq(&ced->char_out_lock); } return iReturn; } @@ -179,38 +181,38 @@ int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) *state = 0xFFFFFFFF; /* Start off with invalid state */ nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), GET_STATUS, (D_TO_H | VENDOR | DEVREQ), 0, 0, - ced->statBuf, sizeof(ced->statBuf), HZ); - if (nGot != sizeof(ced->statBuf)) { + ced->stat_buf, sizeof(ced->stat_buf), HZ); + if (nGot != sizeof(ced->stat_buf)) { dev_err(&ced->interface->dev, "%s: FAILED, return code %d\n", __func__, nGot); - ced->sCurrentState = U14ERR_TIME; /* Indicate that things are very wrong indeed */ + ced->current_state = U14ERR_TIME; /* Indicate that things are very wrong indeed */ *state = 0; /* Force status values to a known state */ *error = 0; } else { int nDevice; dev_dbg(&ced->interface->dev, "%s: Success, state: 0x%x, 0x%x\n", - __func__, ced->statBuf[0], ced->statBuf[1]); + __func__, ced->stat_buf[0], ced->stat_buf[1]); - *state = ced->statBuf[0]; /* Return the state values to the calling code */ - *error = ced->statBuf[1]; + *state = ced->stat_buf[0]; /* Return the state values to the calling code */ + *error = ced->stat_buf[1]; nDevice = ced->udev->descriptor.bcdDevice >> 8; /* 1401 type code value */ switch (nDevice) { /* so we can clean up current state */ case 0: - ced->sCurrentState = U14ERR_U1401; + ced->current_state = U14ERR_U1401; break; default: /* allow lots of device codes for future 1401s */ if ((nDevice >= 1) && (nDevice <= 23)) - ced->sCurrentState = (short)(nDevice + 6); + ced->current_state = (short)(nDevice + 6); else - ced->sCurrentState = U14ERR_ILL; + ced->current_state = U14ERR_ILL; break; } } - return ced->sCurrentState >= 0 ? U14ERR_NOERROR : ced->sCurrentState; + return ced->current_state >= 0 ? U14ERR_NOERROR : ced->current_state; } /**************************************************************************** @@ -221,15 +223,15 @@ int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) int ced_read_write_cancel(struct ced_data *ced) { dev_dbg(&ced->interface->dev, "%s: entry %d\n", - __func__, ced->bStagedUrbPending); + __func__, ced->staged_urb_pending); #ifdef NOT_WRITTEN_YET int ntStatus = STATUS_SUCCESS; bool bResult = false; unsigned int i; /* We can fill this in when we know how we will implement the staged transfer stuff */ - spin_lock_irq(&ced->stagedLock); + spin_lock_irq(&ced->staged_lock); - if (ced->bStagedUrbPending) { /* anything to be cancelled? May need more... */ + if (ced->staged_urb_pending) { /* anything to be cancelled? May need more... */ dev_info(&ced->interface - dev, "ced_read_write_cancel about to cancel Urb\n"); /* Clear the staging done flag */ @@ -238,7 +240,7 @@ int ced_read_write_cancel(struct ced_data *ced) /* Release the spinlock first otherwise the completion routine may hang */ /* on the spinlock while this function hands waiting for the event. */ - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); bResult = IoCancelIrp(ced->pStagedIrp); /* Actually do the cancel */ if (bResult) { LARGE_INTEGER timeout; @@ -258,7 +260,7 @@ int ced_read_write_cancel(struct ced_data *ced) ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", ntStatus, ntStatus)); } else - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); dev_info(&ced->interface - dev, "%s: done\n", __func__); return ntStatus; @@ -286,7 +288,7 @@ static int ced_in_self_test(struct ced_data *ced, unsigned int *pState) /*************************************************************************** ** ced_is_1401 - ALWAYS CALLED HOLDING THE io_mutex ** -** Tests for the current state of the 1401. Sets sCurrentState: +** Tests for the current state of the 1401. Sets current_state: ** ** U14ERR_NOIF 1401 i/f card not installed (not done here) ** U14ERR_OFF 1401 apparently not switched on @@ -323,7 +325,7 @@ static bool ced_is_1401(struct ced_data *ced) } mutex_lock(&ced->io_mutex); /* hold stuff off while we wait */ - ced->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flag regardless! */ + ced->dma_flag = MODE_CHAR; /* Clear DMA mode flag regardless! */ if (iReturn == 0) { /* if all is OK still */ unsigned int state; iReturn = ced_in_self_test(ced, &state); /* see if likely in self test */ @@ -339,7 +341,7 @@ static bool ced_is_1401(struct ced_data *ced) iReturn = state == 0; /* then success is that the state is 0 */ } else iReturn = 0; /* we failed */ - ced->bForceReset = false; /* Clear forced reset flag now */ + ced->force_reset = false; /* Clear forced reset flag now */ return iReturn > 0; } @@ -363,17 +365,17 @@ static bool ced_quick_check(struct ced_data *ced, bool bTestBuff, bool bCanReset bool bRet = false; /* assume it will fail and we will reset */ bool bShortTest; - bShortTest = ((ced->dwDMAFlag == MODE_CHAR) && /* no DMA running */ - (!ced->bForceReset) && /* Not had a real reset forced */ - (ced->sCurrentState >= U14ERR_STD)); /* No 1401 errors stored */ + bShortTest = ((ced->dma_flag == MODE_CHAR) && /* no DMA running */ + (!ced->force_reset) && /* Not had a real reset forced */ + (ced->current_state >= U14ERR_STD)); /* No 1401 errors stored */ dev_dbg(&ced->interface->dev, "%s: DMAFlag:%d, state:%d, force:%d, testBuff:%d, short:%d\n", - __func__, ced->dwDMAFlag, ced->sCurrentState, ced->bForceReset, + __func__, ced->dma_flag, ced->current_state, ced->force_reset, bTestBuff, bShortTest); if ((bTestBuff) && /* Buffer check requested, and... */ - (ced->dwNumInput || ced->dwNumOutput)) { /* ...characters were in the buffer? */ + (ced->num_input || ced->num_output)) { /* ...characters were in the buffer? */ bShortTest = false; /* Then do the full test */ dev_dbg(&ced->interface->dev, "%s: will reset as buffers not empty\n", __func__); @@ -391,8 +393,8 @@ static bool ced_quick_check(struct ced_data *ced, bool bTestBuff, bool bCanReset if (!bRet && bCanReset) { /* If all not OK, then */ dev_info(&ced->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", - __func__, bShortTest, ced->sCurrentState, bTestBuff, - ced->bForceReset); + __func__, bShortTest, ced->current_state, bTestBuff, + ced->force_reset); bRet = ced_is_1401(ced); /* do full test */ } @@ -429,15 +431,15 @@ int ced_get_char(struct ced_data *ced) ced_allowi(ced); /* Make sure char reads are running */ ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&ced->charInLock); - if (ced->dwNumInput > 0) { /* worth looking */ - iReturn = ced->inputBuffer[ced->dwInBuffGet++]; - if (ced->dwInBuffGet >= INBUF_SZ) - ced->dwInBuffGet = 0; - ced->dwNumInput--; + spin_lock_irq(&ced->char_in_lock); + if (ced->num_input > 0) { /* worth looking */ + iReturn = ced->input_buffer[ced->in_buff_get++]; + if (ced->in_buff_get >= INBUF_SZ) + ced->in_buff_get = 0; + ced->num_input--; } else iReturn = U14ERR_NOIN; /* no input data to read */ - spin_unlock_irq(&ced->charInLock); + spin_unlock_irq(&ced->char_in_lock); ced_allowi(ced); /* Make sure char reads are running */ @@ -467,8 +469,8 @@ int ced_get_string(struct ced_data *ced, char __user *pUser, int n) ced_allowi(ced); /* Make sure char reads are running */ ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&ced->charInLock); - nAvailable = ced->dwNumInput; /* characters available now */ + spin_lock_irq(&ced->char_in_lock); + nAvailable = ced->num_input; /* characters available now */ if (nAvailable > n) /* read max of space in pUser... */ nAvailable = n; /* ...or input characters */ @@ -478,12 +480,12 @@ int ced_get_string(struct ced_data *ced, char __user *pUser, int n) int nCopyToUser; /* number to copy to user */ char cData; do { - cData = ced->inputBuffer[ced->dwInBuffGet++]; + cData = ced->input_buffer[ced->in_buff_get++]; if (cData == CR_CHAR) /* replace CR with zero */ cData = (char)0; - if (ced->dwInBuffGet >= INBUF_SZ) - ced->dwInBuffGet = 0; /* wrap buffer pointer */ + if (ced->in_buff_get >= INBUF_SZ) + ced->in_buff_get = 0; /* wrap buffer pointer */ buffer[nGot++] = cData; /* save the output */ } while ((nGot < nAvailable) && cData); @@ -495,8 +497,8 @@ int ced_get_string(struct ced_data *ced, char __user *pUser, int n) ++nCopyToUser; /* ...copy the 0 as well. */ } - ced->dwNumInput -= nGot; - spin_unlock_irq(&ced->charInLock); + ced->num_input -= nGot; + spin_unlock_irq(&ced->char_in_lock); dev_dbg(&ced->interface->dev, "%s: read %d characters >%s<\n", __func__, nGot, buffer); @@ -505,7 +507,7 @@ int ced_get_string(struct ced_data *ced, char __user *pUser, int n) else iReturn = nGot; /* report characters read */ } else - spin_unlock_irq(&ced->charInLock); + spin_unlock_irq(&ced->char_in_lock); ced_allowi(ced); /* Make sure char reads are running */ mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ @@ -522,7 +524,7 @@ int ced_stat_1401(struct ced_data *ced) mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_allowi(ced); /* make sure we allow pending chars */ ced_send_chars(ced); /* in both directions */ - iReturn = ced->dwNumInput; /* no lock as single read */ + iReturn = ced->num_input; /* no lock as single read */ mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; } @@ -541,13 +543,13 @@ int ced_line_count(struct ced_data *ced) mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_allowi(ced); /* Make sure char reads are running */ ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&ced->charInLock); /* Get protection */ + spin_lock_irq(&ced->char_in_lock); /* Get protection */ - if (ced->dwNumInput > 0) { /* worth looking? */ - unsigned int dwIndex = ced->dwInBuffGet; /* start at first available */ - unsigned int dwEnd = ced->dwInBuffPut; /* Position for search end */ + if (ced->num_input > 0) { /* worth looking? */ + unsigned int dwIndex = ced->in_buff_get; /* start at first available */ + unsigned int dwEnd = ced->in_buff_put; /* Position for search end */ do { - if (ced->inputBuffer[dwIndex++] == CR_CHAR) + if (ced->input_buffer[dwIndex++] == CR_CHAR) ++iReturn; /* inc count if CR */ if (dwIndex >= INBUF_SZ) /* see if we fall off buff */ @@ -555,7 +557,7 @@ int ced_line_count(struct ced_data *ced) } while (dwIndex != dwEnd); /* go to last available */ } - spin_unlock_irq(&ced->charInLock); + spin_unlock_irq(&ced->char_in_lock); dev_dbg(&ced->interface->dev, "%s: returned %d\n", __func__, iReturn); mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; @@ -571,7 +573,7 @@ int ced_get_out_buf_space(struct ced_data *ced) int iReturn; mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_send_chars(ced); /* send any buffered chars */ - iReturn = (int)(OUTBUF_SZ - ced->dwNumOutput); /* no lock needed for single read */ + iReturn = (int)(OUTBUF_SZ - ced->num_output); /* no lock needed for single read */ dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ return iReturn; @@ -594,7 +596,7 @@ int ced_clear_area(struct ced_data *ced, int nArea) __func__, nArea); } else { /* to save typing */ - struct transarea *pTA = &ced->rTransDef[nArea]; + struct transarea *pTA = &ced->trans_def[nArea]; if (!pTA->used) /* if not used... */ iReturn = U14ERR_NOTSET; /* ...nothing to be done */ else { @@ -606,9 +608,9 @@ int ced_clear_area(struct ced_data *ced, int nArea) dev_dbg(&ced->interface->dev, "%s: area %d\n", __func__, nArea); - spin_lock_irq(&ced->stagedLock); - if ((ced->StagedId == nArea) - && (ced->dwDMAFlag > MODE_CHAR)) { + spin_lock_irq(&ced->staged_lock); + if ((ced->staged_id == nArea) + && (ced->dma_flag > MODE_CHAR)) { iReturn = U14ERR_UNLOCKFAIL; /* cannot delete as in use */ dev_err(&ced->interface->dev, "%s: call on area %d while active\n", @@ -619,9 +621,9 @@ int ced_clear_area(struct ced_data *ced, int nArea) if (pTA->event_sz) /* if events flagging in use */ wake_up_interruptible(&pTA->event); /* release anything that was waiting */ - if (ced->bXFerWaiting - && (ced->rDMAInfo.ident == nArea)) - ced->bXFerWaiting = false; /* Cannot have pending xfer if area cleared */ + if (ced->xfer_waiting + && (ced->dma_info.ident == nArea)) + ced->xfer_waiting = false; /* Cannot have pending xfer if area cleared */ /* Clean out the struct transarea except for the wait queue, which is at the end */ /* This sets used to false and event_sz to 0 to say area not used and no events. */ @@ -629,7 +631,7 @@ int ced_clear_area(struct ced_data *ced, int nArea) sizeof(struct transarea) - sizeof(wait_queue_head_t)); } - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); if (pPages) { /* if we decided to release the memory */ /* Now we must undo the pinning down of the pages. We will assume the worst and mark */ @@ -671,7 +673,7 @@ static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, unsigned int ulOffset = ((unsigned long)puBuf) & (PAGE_SIZE - 1); int len = (dwLength + ulOffset + PAGE_SIZE - 1) >> PAGE_SHIFT; - struct transarea *pTA = &ced->rTransDef[nArea]; /* to save typing */ + struct transarea *pTA = &ced->trans_def[nArea]; /* to save typing */ struct page **pPages = NULL; /* space for page tables */ int nPages = 0; /* and number of pages */ @@ -700,7 +702,7 @@ static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, /* If you are tempted to use page_address (form LDD3), forget it. You MUST use */ /* kmap() or kmap_atomic() to get a virtual address. page_address will give you */ /* (null) or at least it does in this context with an x86 machine. */ - spin_lock_irq(&ced->stagedLock); + spin_lock_irq(&ced->staged_lock); pTA->buff = puBuf; /* keep start of region (user address) */ pTA->base_offset = ulOffset; /* save offset in first page to start of xfer */ pTA->length = dwLength; /* Size if the region in bytes */ @@ -716,7 +718,7 @@ static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, pTA->blocks[1].size = 0; pTA->used = true; /* This is now a used block */ - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); iReturn = U14ERR_NOERROR; /* say all was well */ } else { iReturn = U14ERR_LOCKFAIL; @@ -792,9 +794,9 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE) if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ return U14ERR_BADAREA; else { - struct transarea *pTA = &ced->rTransDef[te.wAreaNum]; + struct transarea *pTA = &ced->trans_def[te.wAreaNum]; mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ - spin_lock_irq(&ced->stagedLock); + spin_lock_irq(&ced->staged_lock); if (pTA->used) { /* area must be in use */ pTA->event_st = te.dwStart; /* set area regions */ pTA->event_sz = te.dwLength; /* set size (0 cancels it) */ @@ -802,7 +804,7 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE) pTA->wake_up = 0; /* zero the wake up count */ } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); mutex_unlock(&ced->io_mutex); } return iReturn == @@ -822,7 +824,7 @@ int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut) return U14ERR_BADAREA; else { int iWait; - struct transarea *pTA = &ced->rTransDef[nArea]; + struct transarea *pTA = &ced->trans_def[nArea]; msTimeOut = (msTimeOut * HZ + 999) / 1000; /* convert timeout to jiffies */ /* We cannot wait holding the mutex, but we check the flags while holding */ @@ -849,9 +851,9 @@ int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut) else iReturn = pTA->wake_up; /* else the wakeup count */ - spin_lock_irq(&ced->stagedLock); + spin_lock_irq(&ced->staged_lock); pTA->wake_up = 0; /* clear the flag */ - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); } return iReturn; } @@ -868,12 +870,12 @@ int ced_test_event(struct ced_data *ced, int nArea) if ((unsigned)nArea >= MAX_TRANSAREAS) iReturn = U14ERR_BADAREA; else { - struct transarea *pTA = &ced->rTransDef[nArea]; + struct transarea *pTA = &ced->trans_def[nArea]; mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ - spin_lock_irq(&ced->stagedLock); + spin_lock_irq(&ced->staged_lock); iReturn = pTA->wake_up; /* get wakeup count since last call */ pTA->wake_up = 0; /* clear the count */ - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); mutex_unlock(&ced->io_mutex); } return iReturn; @@ -889,7 +891,7 @@ int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) unsigned int dwIdent; mutex_lock(&ced->io_mutex); - dwIdent = ced->StagedId; /* area ident for last xfer */ + dwIdent = ced->staged_id; /* area ident for last xfer */ if (dwIdent >= MAX_TRANSAREAS) iReturn = U14ERR_BADAREA; else { @@ -901,12 +903,12 @@ int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) mutex_unlock(&ced->io_mutex); return -ENOMEM; } - tx->size = ced->rTransDef[dwIdent].length; - tx->linear = (long long)((long)ced->rTransDef[dwIdent].buff); + tx->size = ced->trans_def[dwIdent].length; + tx->linear = (long long)((long)ced->trans_def[dwIdent].buff); tx->avail = GET_TX_MAXENTRIES; /* how many blocks we could return */ tx->used = 1; /* number we actually return */ tx->entries[0].physical = - (long long)(tx->linear + ced->StagedOffset); + (long long)(tx->linear + ced->staged_offset); tx->entries[0].size = tx->size; if (copy_to_user(pTX, tx, sizeof(*tx))) @@ -943,7 +945,7 @@ int ced_state_of_1401(struct ced_data *ced) mutex_lock(&ced->io_mutex); ced_quick_check(ced, false, false); /* get state up to date, no reset */ - iReturn = ced->sCurrentState; + iReturn = ced->current_state; mutex_unlock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); @@ -968,12 +970,12 @@ int ced_start_self_test(struct ced_data *ced) ced_flush_out_buff(ced); /* Clear output buffer & pipe */ /* so things stay tidy */ /* ced_read_write_cancel(pDeviceObject); */ - ced->dwDMAFlag = MODE_CHAR; /* Clear DMA mode flags here */ + ced->dma_flag = MODE_CHAR; /* Clear DMA mode flags here */ nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), DB_SELFTEST, (H_TO_D | VENDOR | DEVREQ), 0, 0, NULL, 0, HZ); /* allow 1 second timeout */ - ced->ulSelfTestTime = jiffies + HZ * 30; /* 30 seconds into the future */ + ced->self_test_time = jiffies + HZ * 30; /* 30 seconds into the future */ mutex_unlock(&ced->io_mutex); if (nGot < 0) @@ -1027,7 +1029,7 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) "Self-test error code %d\n", gst.code); } else { /* No error, check for timeout */ unsigned long ulNow = jiffies; /* get current time */ - if (time_after(ulNow, ced->ulSelfTestTime)) { + if (time_after(ulNow, ced->self_test_time)) { gst.code = -2; /* Flag the timeout */ dev_dbg(&ced->interface->dev, "Self-test timed-out\n"); @@ -1042,7 +1044,7 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) if (gst.code < 0) { /* If we have a problem or finished */ /* If using the 2890 we should reset properly */ - if ((ced->nPipes == 4) && (ced->s1401Type <= TYPEPOWER)) + if ((ced->n_pipes == 4) && (ced->type <= TYPEPOWER)) ced_is_1401(ced); /* Get 1401 reset and OK */ else ced_quick_check(ced, true, true); /* Otherwise check without reset unless problems */ @@ -1066,7 +1068,7 @@ int ced_type_of_1401(struct ced_data *ced) mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); - switch (ced->s1401Type) { + switch (ced->type) { case TYPE1401: iReturn = U14ERR_STD; break; /* Handle these types directly */ @@ -1077,8 +1079,8 @@ int ced_type_of_1401(struct ced_data *ced) iReturn = U14ERR_U1401; break; default: - if ((ced->s1401Type >= TYPEPOWER) && (ced->s1401Type <= 25)) - iReturn = ced->s1401Type + 4; /* We can calculate types */ + if ((ced->type >= TYPEPOWER) && (ced->type <= 25)) + iReturn = ced->type + 4; /* We can calculate types */ else /* for up-coming 1401 designs */ iReturn = TYPEUNKNOWN; /* Don't know or not there */ } @@ -1099,7 +1101,7 @@ int ced_transfer_flags(struct ced_data *ced) U14TF_NOTIFY | U14TF_CIRCTH; /* diagnostics, notify and circular */ dev_dbg(&ced->interface->dev, "%s\n", __func__); mutex_lock(&ced->io_mutex); - if (ced->bIsUSB2) /* Set flag for USB2 if appropriate */ + if (ced->is_usb2) /* Set flag for USB2 if appropriate */ iReturn |= U14TF_USB2; mutex_unlock(&ced->io_mutex); @@ -1356,8 +1358,8 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &ced->rTransDef[nArea]; - spin_lock_irq(&ced->stagedLock); /* Lock others out */ + struct transarea *pArea = &ced->trans_def[nArea]; + spin_lock_irq(&ced->staged_lock); /* Lock others out */ if ((pArea->used) && (pArea->circular) && /* Must be circular area */ (pArea->circ_to_host)) { /* For now at least must be to host */ @@ -1371,7 +1373,7 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); } else iReturn = U14ERR_BADAREA; @@ -1408,8 +1410,8 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &ced->rTransDef[nArea]; - spin_lock_irq(&ced->stagedLock); /* Lock others out */ + struct transarea *pArea = &ced->trans_def[nArea]; + spin_lock_irq(&ced->staged_lock); /* Lock others out */ if ((pArea->used) && (pArea->circular) && /* Must be circular area */ (pArea->circ_to_host)) { /* For now at least must be to host */ @@ -1433,7 +1435,7 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) __func__, uSize, uStart, pArea->blocks[0].size, pArea->blocks[0].offset, - ced->bXFerWaiting); + ced->xfer_waiting); /* Return the next available block of memory as well */ if (pArea->blocks[0].size > 0) { /* Got anything? */ @@ -1442,8 +1444,8 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) cb.dwSize = pArea->blocks[0].size; } - bWaiting = ced->bXFerWaiting; - if (bWaiting && ced->bStagedUrbPending) { + bWaiting = ced->xfer_waiting; + if (bWaiting && ced->staged_urb_pending) { dev_err(&ced->interface->dev, "%s: ERROR: waiting xfer and staged Urb pending!\n", __func__); @@ -1462,10 +1464,10 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) if (bWaiting) { /* Got a block xfer waiting? */ int RWMStat = ced_read_write_mem(ced, - !ced->rDMAInfo.outward, - ced->rDMAInfo.ident, - ced->rDMAInfo.offset, - ced->rDMAInfo.size); + !ced->dma_info.outward, + ced->dma_info.ident, + ced->dma_info.offset, + ced->dma_info.size); if (RWMStat != U14ERR_NOERROR) dev_err(&ced->interface->dev, "%s: rw setup failed %d\n", @@ -1474,7 +1476,7 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) } else iReturn = U14ERR_NOTSET; - spin_unlock_irq(&ced->stagedLock); + spin_unlock_irq(&ced->staged_lock); } else iReturn = U14ERR_BADAREA; diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 30d103cb1067..7341da0f8ff8 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -127,19 +127,19 @@ static void ced_delete(struct kref *kref) /* Free up the output buffer, then free the output urb. Note that the interface member */ /* of ced will probably be NULL, so cannot be used to get to dev. */ - usb_free_coherent(ced->udev, OUTBUF_SZ, ced->pCoherCharOut, - ced->pUrbCharOut->transfer_dma); - usb_free_urb(ced->pUrbCharOut); + usb_free_coherent(ced->udev, OUTBUF_SZ, ced->coher_char_out, + ced->urb_char_out->transfer_dma); + usb_free_urb(ced->urb_char_out); /* Do the same for chan input */ - usb_free_coherent(ced->udev, INBUF_SZ, ced->pCoherCharIn, - ced->pUrbCharIn->transfer_dma); - usb_free_urb(ced->pUrbCharIn); + usb_free_coherent(ced->udev, INBUF_SZ, ced->coher_char_in, + ced->urb_char_in->transfer_dma); + usb_free_urb(ced->urb_char_in); /* Do the same for the block transfers */ - usb_free_coherent(ced->udev, STAGED_SZ, ced->pCoherStagedIO, - ced->pStagedUrb->transfer_dma); - usb_free_urb(ced->pStagedUrb); + usb_free_coherent(ced->udev, STAGED_SZ, ced->coher_staged_io, + ced->staged_urb->transfer_dma); + usb_free_urb(ced->staged_urb); usb_put_dev(ced->udev); kfree(ced); @@ -225,7 +225,7 @@ static int ced_flush(struct file *file, fl_owner_t id) return -ENODEV; dev_dbg(&ced->interface->dev, "%s: char in pend=%d\n", - __func__, ced->bReadCharsPending); + __func__, ced->read_chars_pending); /* wait for io to stop */ mutex_lock(&ced->io_mutex); @@ -279,56 +279,61 @@ static void ced_writechar_callback(struct urb *pUrb) spin_unlock(&ced->err_lock); nGot = 0; /* and tidy up again if so */ - spin_lock(&ced->charOutLock); /* already at irq level */ - ced->dwOutBuffGet = 0; /* Reset the output buffer */ - ced->dwOutBuffPut = 0; - ced->dwNumOutput = 0; /* Clear the char count */ - ced->bPipeError[0] = 1; /* Flag an error for later */ - ced->bSendCharsPending = false; /* Allow other threads again */ - spin_unlock(&ced->charOutLock); /* already at irq level */ + spin_lock(&ced->char_out_lock); /* already at irq level */ + ced->out_buff_get = 0; /* Reset the output buffer */ + ced->out_buff_put = 0; + ced->num_output = 0; /* Clear the char count */ + ced->pipe_error[0] = 1; /* Flag an error for later */ + ced->send_chars_pending = false; /* Allow other threads again */ + spin_unlock(&ced->char_out_lock); /* already at irq level */ dev_dbg(&ced->interface->dev, "%s: char out done, 0 chars sent\n", __func__); } else { dev_dbg(&ced->interface->dev, "%s: char out done, %d chars sent\n", __func__, nGot); - spin_lock(&ced->charOutLock); /* already at irq level */ - ced->dwNumOutput -= nGot; /* Now adjust the char send buffer */ - ced->dwOutBuffGet += nGot; /* to match what we did */ - if (ced->dwOutBuffGet >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ - ced->dwOutBuffGet = 0; + spin_lock(&ced->char_out_lock); /* already at irq level */ + ced->num_output -= nGot; /* Now adjust the char send buffer */ + ced->out_buff_get += nGot; /* to match what we did */ + if (ced->out_buff_get >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ + ced->out_buff_get = 0; - if (ced->dwNumOutput > 0) { /* if more to be done... */ + if (ced->num_output > 0) { /* if more to be done... */ int nPipe = 0; /* The pipe number to use */ int iReturn; - char *pDat = &ced->outputBuffer[ced->dwOutBuffGet]; - unsigned int dwCount = ced->dwNumOutput; /* maximum to send */ - if ((ced->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - ced->dwOutBuffGet; - spin_unlock(&ced->charOutLock); /* we are done with stuff that changes */ - memcpy(ced->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ - usb_fill_bulk_urb(ced->pUrbCharOut, ced->udev, + char *pDat = &ced->output_buffer[ced->out_buff_get]; + unsigned int dwCount = ced->num_output; /* maximum to send */ + if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ + dwCount = OUTBUF_SZ - ced->out_buff_get; + + /* we are done with stuff that changes */ + spin_unlock(&ced->char_out_lock); + + memcpy(ced->coher_char_out, pDat, dwCount); /* copy output data to the buffer */ + usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, - ced->epAddr[0]), - ced->pCoherCharOut, dwCount, + ced->ep_addr[0]), + ced->coher_char_out, dwCount, ced_writechar_callback, ced); - ced->pUrbCharOut->transfer_flags |= + ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->pUrbCharOut, &ced->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(ced->pUrbCharOut, GFP_ATOMIC); + usb_anchor_urb(ced->urb_char_out, &ced->submitted); /* in case we need to kill it */ + iReturn = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, dwCount, pDat); - spin_lock(&ced->charOutLock); /* grab lock for errors */ + spin_lock(&ced->char_out_lock); /* grab lock for errors */ if (iReturn) { - ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - ced->bSendCharsPending = false; /* Allow other threads again */ - usb_unanchor_urb(ced->pUrbCharOut); + ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ + ced->send_chars_pending = false; /* Allow other threads again */ + usb_unanchor_urb(ced->urb_char_out); dev_err(&ced->interface->dev, "%s: usb_submit_urb() returned %d\n", __func__, iReturn); } } else - ced->bSendCharsPending = false; /* Allow other threads again */ - spin_unlock(&ced->charOutLock); /* already at irq level */ + /* Allow other threads again */ + ced->send_chars_pending = false; + + spin_unlock(&ced->char_out_lock); /* already at irq level */ } } @@ -341,25 +346,26 @@ int ced_send_chars(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; - spin_lock_irq(&ced->charOutLock); /* Protect ourselves */ + spin_lock_irq(&ced->char_out_lock); /* Protect ourselves */ - if ((!ced->bSendCharsPending) && /* Not currently sending */ - (ced->dwNumOutput > 0) && /* has characters to output */ + if ((!ced->send_chars_pending) && /* Not currently sending */ + (ced->num_output > 0) && /* has characters to output */ (can_accept_io_requests(ced))) { /* and current activity is OK */ - unsigned int dwCount = ced->dwNumOutput; /* Get a copy of the character count */ - ced->bSendCharsPending = true; /* Set flag to lock out other threads */ + unsigned int dwCount = ced->num_output; /* Get a copy of the */ + /* character count */ + ced->send_chars_pending = true; /* Set flag to lock out other threads */ dev_dbg(&ced->interface->dev, "Send %d chars to 1401, EP0 flag %d\n", - dwCount, ced->nPipes == 3); + dwCount, ced->n_pipes == 3); /* If we have only 3 end points we must send the characters to the 1401 using EP0. */ - if (ced->nPipes == 3) { + if (ced->n_pipes == 3) { /* For EP0 character transmissions to the 1401, we have to hang about until they */ /* are gone, as otherwise without more character IO activity they will never go. */ unsigned int count = dwCount; /* Local char counter */ unsigned int index = 0; /* The index into the char buffer */ - spin_unlock_irq(&ced->charOutLock); /* Free spinlock as we call USBD */ + spin_unlock_irq(&ced->char_out_lock); /* Free spinlock as we call USBD */ while ((count > 0) && (iReturn == U14ERR_NOERROR)) { /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ @@ -369,7 +375,7 @@ int ced_send_chars(struct ced_data *ced) DB_CHARS, /* bRequest */ (H_TO_D | VENDOR | DEVREQ), /* to the device, vendor request to the device */ 0, 0, /* value and index are both 0 */ - &ced->outputBuffer[index], /* where to send from */ + &ced->output_buffer[index], /* where to send from */ n, /* how much to send */ 1000); /* timeout in jiffies */ if (nSent <= 0) { @@ -385,50 +391,53 @@ int ced_send_chars(struct ced_data *ced) } } - spin_lock_irq(&ced->charOutLock); /* Protect ced changes, released by general code */ - ced->dwOutBuffGet = 0; /* so reset the output buffer */ - ced->dwOutBuffPut = 0; - ced->dwNumOutput = 0; /* and clear the buffer count */ - ced->bSendCharsPending = false; /* Allow other threads again */ + spin_lock_irq(&ced->char_out_lock); /* Protect ced changes, released by general code */ + ced->out_buff_get = 0; /* so reset the output buffer */ + ced->out_buff_put = 0; + ced->num_output = 0; /* and clear the buffer count */ + ced->send_chars_pending = false; /* Allow other threads again */ } else { /* Here for sending chars normally - we hold the spin lock */ int nPipe = 0; /* The pipe number to use */ - char *pDat = &ced->outputBuffer[ced->dwOutBuffGet]; + char *pDat = &ced->output_buffer[ced->out_buff_get]; - if ((ced->dwOutBuffGet + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - ced->dwOutBuffGet; - spin_unlock_irq(&ced->charOutLock); /* we are done with stuff that changes */ - memcpy(ced->pCoherCharOut, pDat, dwCount); /* copy output data to the buffer */ - usb_fill_bulk_urb(ced->pUrbCharOut, ced->udev, + if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ + dwCount = OUTBUF_SZ - ced->out_buff_get; + spin_unlock_irq(&ced->char_out_lock); /* we are done with stuff that changes */ + memcpy(ced->coher_char_out, pDat, dwCount); /* copy output data to the buffer */ + usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, - ced->epAddr[0]), - ced->pCoherCharOut, dwCount, + ced->ep_addr[0]), + ced->coher_char_out, dwCount, ced_writechar_callback, ced); - ced->pUrbCharOut->transfer_flags |= + ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->pUrbCharOut, &ced->submitted); - iReturn = usb_submit_urb(ced->pUrbCharOut, GFP_KERNEL); - spin_lock_irq(&ced->charOutLock); /* grab lock for errors */ + usb_anchor_urb(ced->urb_char_out, &ced->submitted); + iReturn = usb_submit_urb(ced->urb_char_out, GFP_KERNEL); + + /* grab lock for errors */ + spin_lock_irq(&ced->char_out_lock); + if (iReturn) { - ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ - ced->bSendCharsPending = false; /* Allow other threads again */ - usb_unanchor_urb(ced->pUrbCharOut); /* remove from list of active urbs */ + ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ + ced->send_chars_pending = false; /* Allow other threads again */ + usb_unanchor_urb(ced->urb_char_out); /* remove from list of active urbs */ } } - } else if (ced->bSendCharsPending && (ced->dwNumOutput > 0)) + } else if (ced->send_chars_pending && (ced->num_output > 0)) dev_dbg(&ced->interface->dev, - "%s: bSendCharsPending:true\n", __func__); + "%s: send_chars_pending:true\n", __func__); dev_dbg(&ced->interface->dev, "%s: exit code: %d\n", __func__, iReturn); - spin_unlock_irq(&ced->charOutLock); /* Now let go of the spinlock */ + spin_unlock_irq(&ced->char_out_lock); /* Now let go of the spinlock */ return iReturn; } /*************************************************************************** ** ced_copy_user_space -** This moves memory between pinned down user space and the pCoherStagedIO +** This moves memory between pinned down user space and the coher_staged_io ** memory buffer we use for transfers. Copy n bytes in the directions that -** is defined by ced->StagedRead. The user space is determined by the area -** in ced->StagedId and the offset in ced->StagedDone. The user +** is defined by ced->staged_read. The user space is determined by the area +** in ced->staged_id and the offset in ced->staged_done. The user ** area may well not start on a page boundary, so allow for that. ** ** We have a table of physical pages that describe the area, so we can use @@ -439,13 +448,13 @@ int ced_send_chars(struct ced_data *ced) ***************************************************************************/ static void ced_copy_user_space(struct ced_data *ced, int n) { - unsigned int nArea = ced->StagedId; + unsigned int nArea = ced->staged_id; if (nArea < MAX_TRANSAREAS) { /* area to be used */ - struct transarea *pArea = &ced->rTransDef[nArea]; + struct transarea *pArea = &ced->trans_def[nArea]; unsigned int dwOffset = - ced->StagedDone + ced->StagedOffset + pArea->base_offset; - char *pCoherBuf = ced->pCoherStagedIO; /* coherent buffer */ + ced->staged_done + ced->staged_offset + pArea->base_offset; + char *pCoherBuf = ced->coher_staged_io; /* coherent buffer */ if (!pArea->used) { dev_err(&ced->interface->dev, "%s: area %d unused\n", __func__, nArea); @@ -462,7 +471,7 @@ static void ced_copy_user_space(struct ced_data *ced, int n) size_t uiXfer = PAGE_SIZE - uiPageOff; /* max to transfer on this page */ if (uiXfer > n) /* limit byte count if too much */ uiXfer = n; /* for the page */ - if (ced->StagedRead) + if (ced->staged_read) memcpy(pvAddress + uiPageOff, pCoherBuf, uiXfer); else @@ -506,8 +515,9 @@ static void staged_callback(struct urb *pUrb) bool bCancel = false; bool bRestartCharInput; /* used at the end */ - spin_lock(&ced->stagedLock); /* stop ced_read_write_mem() action while this routine is running */ - ced->bStagedUrbPending = false; /* clear the flag for staged IRP pending */ + spin_lock(&ced->staged_lock); /* stop ced_read_write_mem() action */ + /* while this routine is running */ + ced->staged_urb_pending = false; /* clear the flag for staged IRP pending */ if (pUrb->status) { /* sync/async unlink faults aren't errors */ if (! @@ -528,38 +538,38 @@ static void staged_callback(struct urb *pUrb) } else { dev_dbg(&ced->interface->dev, "%s: %d chars xferred\n", __func__, nGot); - if (ced->StagedRead) /* if reading, save to user space */ + if (ced->staged_read) /* if reading, save to user space */ ced_copy_user_space(ced, nGot); /* copy from buffer to user */ if (nGot == 0) dev_dbg(&ced->interface->dev, "%s: ZLP\n", __func__); } /* Update the transfer length based on the TransferBufferLength value in the URB */ - ced->StagedDone += nGot; + ced->staged_done += nGot; dev_dbg(&ced->interface->dev, "%s: done %d bytes of %d\n", - __func__, ced->StagedDone, ced->StagedLength); + __func__, ced->staged_done, ced->staged_length); - if ((ced->StagedDone == ced->StagedLength) || /* If no more to do */ + if ((ced->staged_done == ced->staged_length) || /* If no more to do */ (bCancel)) { /* or this IRP was cancelled */ /* Transfer area info */ - struct transarea *pArea = &ced->rTransDef[ced->StagedId]; + struct transarea *pArea = &ced->trans_def[ced->staged_id]; dev_dbg(&ced->interface->dev, "%s: transfer done, bytes %d, cancel %d\n", - __func__, ced->StagedDone, bCancel); + __func__, ced->staged_done, bCancel); /* Here is where we sort out what to do with this transfer if using a circular buffer. We have */ /* a completed transfer that can be assumed to fit into the transfer area. We should be able to */ /* add this to the end of a growing block or to use it to start a new block unless the code */ /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ if ((pArea->circular) && (pArea->circ_to_host) && (!bCancel) && /* Time to sort out circular buffer info? */ - (ced->StagedRead)) { /* Only for tohost transfers for now */ + (ced->staged_read)) {/* Only for tohost transfers for now */ if (pArea->blocks[1].size > 0) { /* If block 1 is in use we must append to it */ - if (ced->StagedOffset == + if (ced->staged_offset == (pArea->blocks[1].offset + pArea->blocks[1].size)) { pArea->blocks[1].size += - ced->StagedLength; + ced->staged_length; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 now %d bytes at %d\n", pArea->blocks[1].size, @@ -567,9 +577,9 @@ static void staged_callback(struct urb *pUrb) } else { /* Here things have gone very, very, wrong, but I cannot see how this can actually be achieved */ pArea->blocks[1].offset = - ced->StagedOffset; + ced->staged_offset; pArea->blocks[1].size = - ced->StagedLength; + ced->staged_length; dev_err(&ced->interface->dev, "%s: ERROR, circ block 1 re-started %d bytes at %d\n", __func__, @@ -579,10 +589,10 @@ static void staged_callback(struct urb *pUrb) } else { /* If block 1 is not used, we try to add to block 0 */ if (pArea->blocks[0].size > 0) { /* Got stored block 0 information? */ /* Must append onto the existing block 0 */ - if (ced->StagedOffset == + if (ced->staged_offset == (pArea->blocks[0].offset + pArea->blocks[0].size)) { - pArea->blocks[0].size += ced->StagedLength; /* Just add this transfer in */ + pArea->blocks[0].size += ced->staged_length; /* Just add this transfer in */ dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 now %d bytes at %d\n", pArea->blocks[0]. @@ -591,9 +601,9 @@ static void staged_callback(struct urb *pUrb) offset); } else { /* If it doesn't append, put into new block 1 */ pArea->blocks[1].offset = - ced->StagedOffset; + ced->staged_offset; pArea->blocks[1].size = - ced->StagedLength; + ced->staged_length; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 1 started %d bytes at %d\n", pArea->blocks[1]. @@ -603,9 +613,9 @@ static void staged_callback(struct urb *pUrb) } } else { /* No info stored yet, just save in block 0 */ pArea->blocks[0].offset = - ced->StagedOffset; + ced->staged_offset; pArea->blocks[0].size = - ced->StagedLength; + ced->staged_length; dev_dbg(&ced->interface->dev, "RWM_Complete, circ block 0 started %d bytes at %d\n", pArea->blocks[0].size, @@ -620,7 +630,7 @@ static void staged_callback(struct urb *pUrb) pArea->circular, pArea->event_to_host, pArea->event_st, pArea->event_sz); if ((pArea->event_sz) && /* Set a user-mode event... */ - (ced->StagedRead == pArea->event_to_host)) { /* ...on transfers in this direction? */ + (ced->staged_read == pArea->event_to_host)) { /* ...on transfers in this direction? */ int iWakeUp = 0; /* assume */ /* If we have completed the right sort of DMA */ @@ -636,11 +646,11 @@ static void staged_callback(struct urb *pUrb) iWakeUp = (dwTotal >= pArea->event_sz); } else { unsigned int transEnd = - ced->StagedOffset + - ced->StagedLength; + ced->staged_offset + + ced->staged_length; unsigned int eventEnd = pArea->event_st + pArea->event_sz; - iWakeUp = (ced->StagedOffset < eventEnd) + iWakeUp = (ced->staged_offset < eventEnd) && (transEnd > pArea->event_st); } @@ -653,19 +663,19 @@ static void staged_callback(struct urb *pUrb) } } - ced->dwDMAFlag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ + ced->dma_flag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ if (!bCancel) { /* Don't look for waiting transfer if cancelled */ /* If we have a transfer waiting, kick it off */ - if (ced->bXFerWaiting) { /* Got a block xfer waiting? */ + if (ced->xfer_waiting) {/* Got a block xfer waiting? */ int iReturn; dev_info(&ced->interface->dev, "*** RWM_Complete *** pending transfer will now be set up!!!\n"); iReturn = - ced_read_write_mem(ced, !ced->rDMAInfo.outward, - ced->rDMAInfo.ident, - ced->rDMAInfo.offset, - ced->rDMAInfo.size); + ced_read_write_mem(ced, !ced->dma_info.outward, + ced->dma_info.ident, + ced->dma_info.offset, + ced->dma_info.size); if (iReturn) dev_err(&ced->interface->dev, @@ -677,15 +687,15 @@ static void staged_callback(struct urb *pUrb) } else /* Here for more to do */ ced_stage_chunk(ced); /* fire off the next bit */ - /* While we hold the stagedLock, see if we should reallow character input ints */ + /* While we hold the staged_lock, see if we should reallow character input ints */ /* Don't allow if cancelled, or if a new block has started or if there is a waiting block. */ - /* This feels wrong as we should ask which spin lock protects dwDMAFlag. */ - bRestartCharInput = !bCancel && (ced->dwDMAFlag == MODE_CHAR) - && !ced->bXFerWaiting; + /* This feels wrong as we should ask which spin lock protects dma_flag. */ + bRestartCharInput = !bCancel && (ced->dma_flag == MODE_CHAR) && + !ced->xfer_waiting; - spin_unlock(&ced->stagedLock); /* Finally release the lock again */ + spin_unlock(&ced->staged_lock); /* Finally release the lock again */ - /* This is not correct as dwDMAFlag is protected by the staged lock, but it is treated */ + /* This is not correct as dma_flag is protected by the staged lock, but it is treated */ /* in ced_allowi as if it were protected by the char lock. In any case, most systems will */ /* not be upset by char input during DMA... sigh. Needs sorting out. */ if (bRestartCharInput) /* may be out of date, but... */ @@ -705,8 +715,8 @@ static int ced_stage_chunk(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; unsigned int ChunkSize; - int nPipe = ced->StagedRead ? 3 : 2; /* The pipe number to use for reads or writes */ - if (ced->nPipes == 3) + int nPipe = ced->staged_read ? 3 : 2; /* The pipe number to use for reads or writes */ + if (ced->n_pipes == 3) nPipe--; /* Adjust for the 3-pipe case */ if (nPipe < 0) /* and trap case that should never happen */ return U14ERR_FAIL; @@ -717,31 +727,32 @@ static int ced_stage_chunk(struct ced_data *ced) return U14ERR_FAIL; /* could do with a better error */ } - ChunkSize = (ced->StagedLength - ced->StagedDone); /* transfer length remaining */ + ChunkSize = (ced->staged_length - ced->staged_done); /* transfer length remaining */ if (ChunkSize > STAGED_SZ) /* make sure to keep legal */ ChunkSize = STAGED_SZ; /* limit to max allowed */ - if (!ced->StagedRead) /* if writing... */ + if (!ced->staged_read) /* if writing... */ ced_copy_user_space(ced, ChunkSize); /* ...copy data into the buffer */ - usb_fill_bulk_urb(ced->pStagedUrb, ced->udev, - ced->StagedRead ? usb_rcvbulkpipe(ced->udev, + usb_fill_bulk_urb(ced->staged_urb, ced->udev, + ced->staged_read ? usb_rcvbulkpipe(ced->udev, ced-> - epAddr[nPipe]) : - usb_sndbulkpipe(ced->udev, ced->epAddr[nPipe]), - ced->pCoherStagedIO, ChunkSize, staged_callback, ced); - ced->pStagedUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->pStagedUrb, &ced->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(ced->pStagedUrb, GFP_ATOMIC); + ep_addr[nPipe]) : + usb_sndbulkpipe(ced->udev, ced->ep_addr[nPipe]), + ced->coher_staged_io, ChunkSize, + staged_callback, ced); + ced->staged_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + usb_anchor_urb(ced->staged_urb, &ced->submitted); /* in case we need to kill it */ + iReturn = usb_submit_urb(ced->staged_urb, GFP_ATOMIC); if (iReturn) { - usb_unanchor_urb(ced->pStagedUrb); /* kill it */ - ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + usb_unanchor_urb(ced->staged_urb); /* kill it */ + ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ dev_err(&ced->interface->dev, "%s: submit urb failed, code %d\n", __func__, iReturn); } else - ced->bStagedUrbPending = true; /* Set the flag for staged URB pending */ + ced->staged_urb_pending = true; /* Set the flag for staged URB pending */ dev_dbg(&ced->interface->dev, "%s: done so far:%d, this size:%d\n", - __func__, ced->StagedDone, ChunkSize); + __func__, ced->staged_done, ChunkSize); return iReturn; } @@ -753,7 +764,7 @@ static int ced_stage_chunk(struct ced_data *ced) ** Breaks up a read or write in to specified sized chunks, as specified by pipe ** information on maximum transfer size. ** -** Any code that calls this must be holding the stagedLock +** Any code that calls this must be holding the staged_lock ** ** Arguments: ** DeviceObject - pointer to our FDO (Functional Device Object) @@ -767,7 +778,7 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, unsigned int dwOffs, unsigned int dwLen) { /* Transfer area info */ - struct transarea *pArea = &ced->rTransDef[wIdent]; + struct transarea *pArea = &ced->trans_def[wIdent]; if (!can_accept_io_requests(ced)) { /* Are we in a state to accept new requests? */ dev_err(&ced->interface->dev, "%s: can't accept requests\n", @@ -781,8 +792,8 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, /* Amazingly, we can get an escape sequence back before the current staged Urb is done, so we */ /* have to check for this situation and, if so, wait until all is OK. */ - if (ced->bStagedUrbPending) { - ced->bXFerWaiting = true; /* Flag we are waiting */ + if (ced->staged_urb_pending) { + ced->xfer_waiting = true; /* Flag we are waiting */ dev_info(&ced->interface->dev, "%s: xfer is waiting, as previous staged pending\n", __func__); @@ -823,7 +834,7 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, } if (bWait) { /* This transfer will have to wait? */ - ced->bXFerWaiting = true; /* Flag we are waiting */ + ced->xfer_waiting = true; /* Flag we are waiting */ dev_dbg(&ced->interface->dev, "%s: xfer waiting for circular buffer space\n", __func__); @@ -835,13 +846,13 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, __func__, dwLen, dwOffs); } /* Save the parameters for the read\write transfer */ - ced->StagedRead = Read; /* Save the parameters for this read */ - ced->StagedId = wIdent; /* ID allows us to get transfer area info */ - ced->StagedOffset = dwOffs; /* The area within the transfer area */ - ced->StagedLength = dwLen; - ced->StagedDone = 0; /* Initialise the byte count */ - ced->dwDMAFlag = MODE_LINEAR; /* Set DMA mode flag at this point */ - ced->bXFerWaiting = false; /* Clearly not a transfer waiting now */ + ced->staged_read = Read; /* Save the parameters for this read */ + ced->staged_id = wIdent; /* ID allows us to get transfer area info */ + ced->staged_offset = dwOffs; /* The area within the transfer area */ + ced->staged_length = dwLen; + ced->staged_done = 0; /* Initialise the byte count */ + ced->dma_flag = MODE_LINEAR; /* Set DMA mode flag at this point */ + ced->xfer_waiting = false; /* Clearly not a transfer waiting now */ /* KeClearEvent(&ced->StagingDoneEvent); // Clear the transfer done event */ ced_stage_chunk(ced); /* fire off the first chunk */ @@ -988,21 +999,21 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, pDmaDesc->size); if ((wIdent >= MAX_TRANSAREAS) || /* Illegal area number, or... */ - (!ced->rTransDef[wIdent].used) || /* area not set up, or... */ - (pDmaDesc->offset > ced->rTransDef[wIdent].length) || /* range/size */ + (!ced->trans_def[wIdent].used) || /* area not set up, or... */ + (pDmaDesc->offset > ced->trans_def[wIdent].length) || /* range/size */ ((pDmaDesc->offset + pDmaDesc->size) > - (ced->rTransDef[wIdent]. + (ced->trans_def[wIdent]. length))) { bResult = false; /* bad parameter(s) */ dev_dbg(&ced->interface->dev, "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", __func__, wIdent, - ced->rTransDef[wIdent]. + ced->trans_def[wIdent]. used, pDmaDesc->offset, pDmaDesc->size, - ced->rTransDef[wIdent]. + ced->trans_def[wIdent]. length); } } @@ -1046,18 +1057,19 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, if (pCh[0] == '?') { /* Is this an information response */ /* Parse and save the information */ } else { - spin_lock(&ced->stagedLock); /* Lock others out */ + spin_lock(&ced->staged_lock); /* Lock others out */ - if (ced_read_dma_info(&ced->rDMAInfo, ced, pCh, dwCount)) { /* Get DMA parameters */ - unsigned short wTransType = ced->rDMAInfo.trans_type; /* check transfer type */ + if (ced_read_dma_info(&ced->dma_info, ced, pCh, dwCount)) { /* Get DMA parameters */ + unsigned short wTransType = ced->dma_info.trans_type; /* check transfer type */ dev_dbg(&ced->interface->dev, "%s: xfer to %s, offset %d, length %d\n", __func__, - ced->rDMAInfo.outward ? "1401" : "host", - ced->rDMAInfo.offset, ced->rDMAInfo.size); + ced->dma_info.outward ? "1401" : "host", + ced->dma_info.offset, ced->dma_info.size); - if (ced->bXFerWaiting) { /* Check here for badly out of kilter... */ + /* Check here for badly out of kilter... */ + if (ced->xfer_waiting) { /* This can never happen, really */ dev_err(&ced->interface->dev, "ERROR: DMA setup while transfer still waiting\n"); @@ -1066,10 +1078,10 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, || (wTransType == TM_EXTTO1401)) { iReturn = ced_read_write_mem(ced, - !ced->rDMAInfo.outward, - ced->rDMAInfo.ident, - ced->rDMAInfo.offset, - ced->rDMAInfo.size); + !ced->dma_info.outward, + ced->dma_info.ident, + ced->dma_info.offset, + ced->dma_info.size); if (iReturn != U14ERR_NOERROR) dev_err(&ced->interface->dev, "%s: ced_read_write_mem() failed %d\n", @@ -1083,7 +1095,7 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, dev_err(&ced->interface->dev, "%s: ced_read_dma_info() fail\n", __func__); - spin_unlock(&ced->stagedLock); /* OK here */ + spin_unlock(&ced->staged_lock); /* OK here */ } dev_dbg(&ced->interface->dev, "%s: returns %d\n", __func__, iReturn); @@ -1100,7 +1112,7 @@ static void ced_readchar_callback(struct urb *pUrb) int nGot = pUrb->actual_length; /* what we transferred */ if (pUrb->status) { /* Do we have a problem to handle? */ - int nPipe = ced->nPipes == 4 ? 1 : 0; /* The pipe number to use for error */ + int nPipe = ced->n_pipes == 4 ? 1 : 0; /* The pipe number to use for error */ /* sync/async unlink faults aren't errors... just saying device removed or stopped */ if (! (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET @@ -1118,41 +1130,41 @@ static void ced_readchar_callback(struct urb *pUrb) spin_unlock(&ced->err_lock); nGot = 0; /* and tidy up again if so */ - spin_lock(&ced->charInLock); /* already at irq level */ - ced->bPipeError[nPipe] = 1; /* Flag an error for later */ + spin_lock(&ced->char_in_lock); /* already at irq level */ + ced->pipe_error[nPipe] = 1; /* Flag an error for later */ } else { - if ((nGot > 1) && ((ced->pCoherCharIn[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ - ced_handle_esc(ced, &ced->pCoherCharIn[1], nGot - 1); /* handle it */ - spin_lock(&ced->charInLock); /* already at irq level */ + if ((nGot > 1) && ((ced->coher_char_in[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ + ced_handle_esc(ced, &ced->coher_char_in[1], nGot - 1); /* handle it */ + spin_lock(&ced->char_in_lock); /* already at irq level */ } else { - spin_lock(&ced->charInLock); /* already at irq level */ + spin_lock(&ced->char_in_lock); /* already at irq level */ if (nGot > 0) { unsigned int i; if (nGot < INBUF_SZ) { - ced->pCoherCharIn[nGot] = 0; /* tidy the string */ + ced->coher_char_in[nGot] = 0; /* tidy the string */ dev_dbg(&ced->interface->dev, "%s: got %d chars >%s<\n", __func__, nGot, - ced->pCoherCharIn); + ced->coher_char_in); } /* We know that whatever we read must fit in the input buffer */ for (i = 0; i < nGot; i++) { - ced->inputBuffer[ced->dwInBuffPut++] = - ced->pCoherCharIn[i] & 0x7F; - if (ced->dwInBuffPut >= INBUF_SZ) - ced->dwInBuffPut = 0; + ced->input_buffer[ced->in_buff_put++] = + ced->coher_char_in[i] & 0x7F; + if (ced->in_buff_put >= INBUF_SZ) + ced->in_buff_put = 0; } - if ((ced->dwNumInput + nGot) <= INBUF_SZ) - ced->dwNumInput += nGot; /* Adjust the buffer count accordingly */ + if ((ced->num_input + nGot) <= INBUF_SZ) + ced->num_input += nGot; /* Adjust the buffer count accordingly */ } else dev_dbg(&ced->interface->dev, "%s: read ZLP\n", __func__); } } - ced->bReadCharsPending = false; /* No longer have a pending read */ - spin_unlock(&ced->charInLock); /* already at irq level */ + ced->read_chars_pending = false; /* No longer have a pending read */ + spin_unlock(&ced->char_in_lock); /* already at irq level */ ced_allowi(ced); /* see if we can do the next one */ } @@ -1168,43 +1180,50 @@ int ced_allowi(struct ced_data *ced) { int iReturn = U14ERR_NOERROR; unsigned long flags; - spin_lock_irqsave(&ced->charInLock, flags); /* can be called in multiple contexts */ + + /* can be called in multiple contexts */ + spin_lock_irqsave(&ced->char_in_lock, flags); /* We don't want char input running while DMA is in progress as we know that this */ /* can cause sequencing problems for the 2270. So don't. It will also allow the */ /* ERR response to get back to the host code too early on some PCs, even if there */ /* is no actual driver failure, so we don't allow this at all. */ - if (!ced->bInDrawDown && /* stop input if */ - !ced->bReadCharsPending && /* If no read request outstanding */ - (ced->dwNumInput < (INBUF_SZ / 2)) && /* and there is some space */ - (ced->dwDMAFlag == MODE_CHAR) && /* not doing any DMA */ - (!ced->bXFerWaiting) && /* no xfer waiting to start */ + if (!ced->in_draw_down && /* stop input if */ + !ced->read_chars_pending && /* If no read request outstanding */ + (ced->num_input < (INBUF_SZ / 2)) && /* and there is some space */ + (ced->dma_flag == MODE_CHAR) && /* not doing any DMA */ + (!ced->xfer_waiting) && /* no xfer waiting to start */ (can_accept_io_requests(ced))) { /* and activity is generally OK */ /* then off we go */ - unsigned int nMax = INBUF_SZ - ced->dwNumInput; /* max we could read */ - int nPipe = ced->nPipes == 4 ? 1 : 0; /* The pipe number to use */ + unsigned int nMax = INBUF_SZ - ced->num_input; /* max we could read */ + int nPipe = ced->n_pipes == 4 ? 1 : 0; /* The pipe number to use */ dev_dbg(&ced->interface->dev, "%s: %d chars in input buffer\n", - __func__, ced->dwNumInput); - - usb_fill_int_urb(ced->pUrbCharIn, ced->udev, - usb_rcvintpipe(ced->udev, ced->epAddr[nPipe]), - ced->pCoherCharIn, nMax, ced_readchar_callback, - ced, ced->bInterval); - ced->pUrbCharIn->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; /* short xfers are OK by default */ - usb_anchor_urb(ced->pUrbCharIn, &ced->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(ced->pUrbCharIn, GFP_ATOMIC); + __func__, ced->num_input); + + usb_fill_int_urb(ced->urb_char_in, ced->udev, + usb_rcvintpipe(ced->udev, ced->ep_addr[nPipe]), + ced->coher_char_in, nMax, ced_readchar_callback, + ced, ced->interval); + + /* short xfers are OK by default */ + ced->urb_char_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + + /* in case we need to kill it */ + usb_anchor_urb(ced->urb_char_in, &ced->submitted); + + iReturn = usb_submit_urb(ced->urb_char_in, GFP_ATOMIC); if (iReturn) { - usb_unanchor_urb(ced->pUrbCharIn); /* remove from list of active Urbs */ - ced->bPipeError[nPipe] = 1; /* Flag an error to be handled later */ + usb_unanchor_urb(ced->urb_char_in); /* remove from list of active Urbs */ + ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ dev_err(&ced->interface->dev, "%s: submit urb failed: %d\n", __func__, iReturn); } else - ced->bReadCharsPending = true; /* Flag that we are active here */ + ced->read_chars_pending = true; /* Flag that we are active here */ } - spin_unlock_irqrestore(&ced->charInLock, flags); + spin_unlock_irqrestore(&ced->char_in_lock, flags); return iReturn; @@ -1318,7 +1337,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_dbg_stop_loop(ced); case _IOC_NR(IOCTL_CED_FULLRESET): - ced->bForceReset = true; /* Set a flag for a full reset */ + ced->force_reset = true; /* Set a flag for a full reset */ break; case _IOC_NR(IOCTL_CED_SETCIRCULAR): @@ -1378,14 +1397,14 @@ static int ced_probe(struct usb_interface *interface, goto error; for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ - init_waitqueue_head(&ced->rTransDef[i].event); + init_waitqueue_head(&ced->trans_def[i].event); } /* Put initialises for our stuff here. Note that all of *ced is zero, so */ /* no need to explicitly zero it. */ - spin_lock_init(&ced->charOutLock); - spin_lock_init(&ced->charInLock); - spin_lock_init(&ced->stagedLock); + spin_lock_init(&ced->char_out_lock); + spin_lock_init(&ced->char_in_lock); + spin_lock_init(&ced->staged_lock); /* Initialises from the skeleton stuff */ kref_init(&ced->kref); @@ -1400,9 +1419,9 @@ static int ced_probe(struct usb_interface *interface, bcdDevice = ced->udev->descriptor.bcdDevice; i = (bcdDevice >> 8); if (i == 0) - ced->s1401Type = TYPEU1401; + ced->type = TYPEU1401; else if ((i >= 1) && (i <= 23)) - ced->s1401Type = i + 2; + ced->type = i + 2; else { dev_err(&interface->dev, "%s: Unknown device. bcdDevice = %d\n", __func__, bcdDevice); @@ -1411,53 +1430,55 @@ static int ced_probe(struct usb_interface *interface, /* set up the endpoint information. We only care about the number of EP as */ /* we know that we are dealing with a 1401 device. */ iface_desc = interface->cur_altsetting; - ced->nPipes = iface_desc->desc.bNumEndpoints; + ced->n_pipes = iface_desc->desc.bNumEndpoints; dev_info(&interface->dev, "1401Type=%d with %d End Points\n", - ced->s1401Type, ced->nPipes); - if ((ced->nPipes < 3) || (ced->nPipes > 4)) + ced->type, ced->n_pipes); + if ((ced->n_pipes < 3) || (ced->n_pipes > 4)) goto error; /* Allocate the URBs we hold for performing transfers */ - ced->pUrbCharOut = usb_alloc_urb(0, GFP_KERNEL); /* character output URB */ - ced->pUrbCharIn = usb_alloc_urb(0, GFP_KERNEL); /* character input URB */ - ced->pStagedUrb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ - if (!ced->pUrbCharOut || !ced->pUrbCharIn || !ced->pStagedUrb) { + ced->urb_char_out = usb_alloc_urb(0, GFP_KERNEL); /* character output URB */ + ced->urb_char_in = usb_alloc_urb(0, GFP_KERNEL); /* character input URB */ + ced->staged_urb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ + if (!ced->urb_char_out || !ced->urb_char_in || !ced->staged_urb) { dev_err(&interface->dev, "%s: URB alloc failed\n", __func__); goto error; } - ced->pCoherStagedIO = + ced->coher_staged_io = usb_alloc_coherent(ced->udev, STAGED_SZ, GFP_KERNEL, - &ced->pStagedUrb->transfer_dma); - ced->pCoherCharOut = + &ced->staged_urb->transfer_dma); + ced->coher_char_out = usb_alloc_coherent(ced->udev, OUTBUF_SZ, GFP_KERNEL, - &ced->pUrbCharOut->transfer_dma); - ced->pCoherCharIn = + &ced->urb_char_out->transfer_dma); + ced->coher_char_in = usb_alloc_coherent(ced->udev, INBUF_SZ, GFP_KERNEL, - &ced->pUrbCharIn->transfer_dma); - if (!ced->pCoherCharOut || !ced->pCoherCharIn || !ced->pCoherStagedIO) { + &ced->urb_char_in->transfer_dma); + if (!ced->coher_char_out || !ced->coher_char_in || + !ced->coher_staged_io) { dev_err(&interface->dev, "%s: Coherent buffer alloc failed\n", __func__); goto error; } - for (i = 0; i < ced->nPipes; ++i) { + for (i = 0; i < ced->n_pipes; ++i) { endpoint = &iface_desc->endpoint[i].desc; - ced->epAddr[i] = endpoint->bEndpointAddress; + ced->ep_addr[i] = endpoint->bEndpointAddress; dev_info(&interface->dev, "Pipe %d, ep address %02x\n", - i, ced->epAddr[i]); - if (((ced->nPipes == 3) && (i == 0)) || /* if char input end point */ - ((ced->nPipes == 4) && (i == 1))) { - ced->bInterval = endpoint->bInterval; /* save the endpoint interrupt interval */ - dev_info(&interface->dev, "Pipe %d, bInterval = %d\n", - i, ced->bInterval); + i, ced->ep_addr[i]); + if (((ced->n_pipes == 3) && (i == 0)) || /* if char input end point */ + ((ced->n_pipes == 4) && (i == 1))) { + /* save the endpoint interrupt interval */ + ced->interval = endpoint->bInterval; + dev_info(&interface->dev, "Pipe %d, interval = %d\n", + i, ced->interval); } /* Detect USB2 by checking last ep size (64 if USB1) */ - if (i == ced->nPipes - 1) { /* if this is the last ep (bulk) */ - ced->bIsUSB2 = + if (i == ced->n_pipes - 1) { /* if this is the last ep (bulk) */ + ced->is_usb2 = le16_to_cpu(endpoint->wMaxPacketSize) > 64; dev_info(&ced->interface->dev, "USB%d\n", - ced->bIsUSB2 + 1); + ced->is_usb2 + 1); } } @@ -1522,13 +1543,13 @@ void ced_draw_down(struct ced_data *ced) int time; dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - ced->bInDrawDown = true; + ced->in_draw_down = true; time = usb_wait_anchor_empty_timeout(&ced->submitted, 3000); if (!time) { /* if we timed out we kill the urbs */ usb_kill_anchored_urbs(&ced->submitted); dev_err(&ced->interface->dev, "%s: timed out\n", __func__); } - ced->bInDrawDown = false; + ced->in_draw_down = false; } static int ced_suspend(struct usb_interface *intf, pm_message_t message) diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index cb4e452b5e2f..812d0a34a344 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -136,65 +136,67 @@ struct dmadesc { bool outward; /* true when data is going TO 1401 */ }; -#define INBUF_SZ 256 /* input buffer size */ -#define OUTBUF_SZ 256 /* output buffer size */ -#define STAGED_SZ 0x10000 /* size of coherent buffer for staged transfers */ +#define INBUF_SZ 256 /* input buffer size */ +#define OUTBUF_SZ 256 /* output buffer size */ +#define STAGED_SZ 0x10000 /* size of coherent buffer for staged transfers */ -/* Structure to hold all of our device specific stuff. We are making this as similar as we */ -/* can to the Windows driver to help in our understanding of what is going on. */ +/* Structure to hold all of our device specific stuff. We are making this as */ +/* similar as we can to the Windows driver to help in our understanding of */ +/* what is going on. */ struct ced_data { - char inputBuffer[INBUF_SZ]; /* The two buffers */ - char outputBuffer[OUTBUF_SZ]; /* accessed by the host functions */ - volatile unsigned int dwNumInput; /* num of chars in input buffer */ - volatile unsigned int dwInBuffGet; /* where to get from input buffer */ - volatile unsigned int dwInBuffPut; /* where to put into input buffer */ - volatile unsigned int dwNumOutput; /* num of chars in output buffer */ - volatile unsigned int dwOutBuffGet; /* where to get from output buffer*/ - volatile unsigned int dwOutBuffPut; /* where to put into output buffer*/ - - volatile bool bSendCharsPending; /* Flag to indicate sendchar active */ - volatile bool bReadCharsPending; /* Flag to indicate a read is primed */ - char *pCoherCharOut; /* special aligned buffer for chars to 1401 */ - struct urb *pUrbCharOut; /* urb used for chars to 1401 */ - char *pCoherCharIn; /* special aligned buffer for chars to host */ - struct urb *pUrbCharIn; /* urb used for chars to host */ - - spinlock_t charOutLock; /* to protect the outputBuffer and outputting */ - spinlock_t charInLock; /* to protect the inputBuffer and char reads */ - __u8 bInterval; /* Interrupt end point interval */ - - volatile unsigned int dwDMAFlag; /* state of DMA */ - struct transarea rTransDef[MAX_TRANSAREAS]; /* transfer area info */ - volatile struct dmadesc rDMAInfo; /* info on current DMA transfer */ - volatile bool bXFerWaiting; /* Flag set if DMA transfer stalled */ - volatile bool bInDrawDown; /* Flag that we want to halt transfers */ - - /* Parameters relating to a block read\write that is in progress. Some of these values */ - /* are equivalent to values in rDMAInfo. The values here are those in use, while those */ - /* in rDMAInfo are those received from the 1401 via an escape sequence. If another */ - /* escape sequence arrives before the previous xfer ends, rDMAInfo values are updated while these */ - /* are used to finish off the current transfer. */ - volatile short StagedId; /* The transfer area id for this transfer */ - volatile bool StagedRead; /* Flag TRUE for read from 1401, FALSE for write */ - volatile unsigned int StagedLength; /* Total length of this transfer */ - volatile unsigned int StagedOffset; /* Offset within memory area for transfer start */ - volatile unsigned int StagedDone; /* Bytes transferred so far */ - volatile bool bStagedUrbPending; /* Flag to indicate active */ - char *pCoherStagedIO; /* buffer used for block transfers */ - struct urb *pStagedUrb; /* The URB to use */ - spinlock_t stagedLock; /* protects ReadWriteMem() and circular buffer stuff */ - - short s1401Type; /* type of 1401 attached */ - short sCurrentState; /* current error state */ - bool bIsUSB2; /* type of the interface we connect to */ - bool bForceReset; /* Flag to make sure we get a real reset */ - __u32 statBuf[2]; /* buffer for 1401 state info */ - - unsigned long ulSelfTestTime; /* used to timeout self test */ - - int nPipes; /* Should be 3 or 4 depending on 1401 usb chip */ - int bPipeError[4]; /* set non-zero if an error on one of the pipe */ - __u8 epAddr[4]; /* addresses of the 3/4 end points */ + char input_buffer[INBUF_SZ]; /* The two buffers */ + char output_buffer[OUTBUF_SZ]; /* accessed by the host functions */ + volatile unsigned int num_input; /* num of chars in input buffer */ + volatile unsigned int in_buff_get; /* where to get from input buffer */ + volatile unsigned int in_buff_put; /* where to put into input buffer */ + volatile unsigned int num_output; /* num of chars in output buffer */ + volatile unsigned int out_buff_get; /* where to get from output buffer*/ + volatile unsigned int out_buff_put; /* where to put into output buffer*/ + + volatile bool send_chars_pending; /* Flag to indicate sendchar active */ + volatile bool read_chars_pending; /* Flag to indicate a read is primed*/ + char *coher_char_out; /* special aligned buffer for chars to 1401 */ + struct urb *urb_char_out; /* urb used for chars to 1401 */ + char *coher_char_in; /* special aligned buffer for chars to host */ + struct urb *urb_char_in; /* urb used for chars to host */ + + spinlock_t char_out_lock; /* protect the output_buffer and outputting */ + spinlock_t char_in_lock; /* protect the input_buffer and char reads */ + __u8 interval; /* Interrupt end point interval */ + + volatile unsigned int dma_flag; /* state of DMA */ + struct transarea trans_def[MAX_TRANSAREAS]; /* transfer area info */ + volatile struct dmadesc dma_info; /* info on current DMA transfer */ + volatile bool xfer_waiting; /* Flag set if DMA transfer stalled */ + volatile bool in_draw_down; /* Flag that we want to halt transfers */ + + /* Parameters relating to a block read\write that is in progress. Some of these values */ + /* are equivalent to values in dma_info. The values here are those in use, while those */ + /* in dma_info are those received from the 1401 via an escape sequence. If another */ + /* escape sequence arrives before the previous xfer ends, dma_info values are updated while these */ + /* are used to finish off the current transfer. */ + volatile short staged_id; /* The transfer area id for this transfer */ + volatile bool staged_read; /* Flag TRUE for read from 1401, FALSE for write */ + volatile unsigned int staged_length; /* Total length of this transfer */ + volatile unsigned int staged_offset; /* Offset within memory area for transfer start */ + volatile unsigned int staged_done; /* Bytes transferred so far */ + volatile bool staged_urb_pending; /* Flag to indicate active */ + char *coher_staged_io; /* buffer used for block transfers */ + struct urb *staged_urb; /* The URB to use */ + spinlock_t staged_lock; /* protects ReadWriteMem() and */ + /* circular buffer stuff */ + + short type; /* type of 1401 attached */ + short current_state; /* current error state */ + bool is_usb2; /* type of the interface we connect to */ + bool force_reset; /* Flag to make sure we get a real reset */ + __u32 stat_buf[2]; /* buffer for 1401 state info */ + + unsigned long self_test_time; /* used to timeout self test */ + + int n_pipes; /* Should be 3 or 4 depending on 1401 usb chip */ + int pipe_error[4]; /* set non-zero if an error on one of the pipe */ + __u8 ep_addr[4]; /* addresses of the 3/4 end points */ struct usb_device *udev; /* the usb device for this device */ struct usb_interface *interface; /* the interface for this device, NULL if removed */ -- cgit From ae42e3081d52867c4ebab694e9ef8e6e5a224661 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:52 +0200 Subject: staging: ced1401: fix ced_writechar_callback() Rename camel case locals in function ced_writechar_callback() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 7341da0f8ff8..482431cc3731 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -260,24 +260,24 @@ static bool can_accept_io_requests(struct ced_data *ced) ** Callback routine to complete writes. This may need to fire off another ** urb to complete the transfer. ****************************************************************************/ -static void ced_writechar_callback(struct urb *pUrb) +static void ced_writechar_callback(struct urb *urb) { - struct ced_data *ced = pUrb->context; - int nGot = pUrb->actual_length; /* what we transferred */ + struct ced_data *ced = urb->context; + int got = urb->actual_length; /* what we transferred */ - if (pUrb->status) { /* sync/async unlink faults aren't errors */ + if (urb->status) { /* sync/async unlink faults aren't errors */ if (! - (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET - || pUrb->status == -ESHUTDOWN)) { + (urb->status == -ENOENT || urb->status == -ECONNRESET + || urb->status == -ESHUTDOWN)) { dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", - __func__, pUrb->status); + __func__, urb->status); } spin_lock(&ced->err_lock); - ced->errors = pUrb->status; + ced->errors = urb->status; spin_unlock(&ced->err_lock); - nGot = 0; /* and tidy up again if so */ + got = 0; /* and tidy up again if so */ spin_lock(&ced->char_out_lock); /* already at irq level */ ced->out_buff_get = 0; /* Reset the output buffer */ @@ -290,16 +290,16 @@ static void ced_writechar_callback(struct urb *pUrb) "%s: char out done, 0 chars sent\n", __func__); } else { dev_dbg(&ced->interface->dev, - "%s: char out done, %d chars sent\n", __func__, nGot); + "%s: char out done, %d chars sent\n", __func__, got); spin_lock(&ced->char_out_lock); /* already at irq level */ - ced->num_output -= nGot; /* Now adjust the char send buffer */ - ced->out_buff_get += nGot; /* to match what we did */ + ced->num_output -= got; /* Now adjust the char send buffer */ + ced->out_buff_get += got; /* to match what we did */ if (ced->out_buff_get >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ ced->out_buff_get = 0; if (ced->num_output > 0) { /* if more to be done... */ - int nPipe = 0; /* The pipe number to use */ - int iReturn; + int pipe = 0; /* The pipe number to use */ + int ret; char *pDat = &ced->output_buffer[ced->out_buff_get]; unsigned int dwCount = ced->num_output; /* maximum to send */ if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ @@ -317,17 +317,17 @@ static void ced_writechar_callback(struct urb *pUrb) ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; usb_anchor_urb(ced->urb_char_out, &ced->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); + ret = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, dwCount, pDat); spin_lock(&ced->char_out_lock); /* grab lock for errors */ - if (iReturn) { - ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ + if (ret) { + ced->pipe_error[pipe] = 1; /* Flag an error to be handled later */ ced->send_chars_pending = false; /* Allow other threads again */ usb_unanchor_urb(ced->urb_char_out); dev_err(&ced->interface->dev, "%s: usb_submit_urb() returned %d\n", - __func__, iReturn); + __func__, ret); } } else /* Allow other threads again */ -- cgit From 5d87900e76d2180903e74e9fb4a0f17aaa04b4eb Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:53 +0200 Subject: staging: ced1401: fix ced_send_chars() Rename camel case arguments and locals in function ced_send_chars() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 44 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 482431cc3731..b02db1c7025f 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -344,33 +344,33 @@ static void ced_writechar_callback(struct urb *urb) ****************************************************************************/ int ced_send_chars(struct ced_data *ced) { - int iReturn = U14ERR_NOERROR; + int retval = U14ERR_NOERROR; spin_lock_irq(&ced->char_out_lock); /* Protect ourselves */ if ((!ced->send_chars_pending) && /* Not currently sending */ (ced->num_output > 0) && /* has characters to output */ (can_accept_io_requests(ced))) { /* and current activity is OK */ - unsigned int dwCount = ced->num_output; /* Get a copy of the */ + unsigned int count = ced->num_output; /* Get a copy of the */ /* character count */ ced->send_chars_pending = true; /* Set flag to lock out other threads */ dev_dbg(&ced->interface->dev, "Send %d chars to 1401, EP0 flag %d\n", - dwCount, ced->n_pipes == 3); + count, ced->n_pipes == 3); /* If we have only 3 end points we must send the characters to the 1401 using EP0. */ if (ced->n_pipes == 3) { /* For EP0 character transmissions to the 1401, we have to hang about until they */ /* are gone, as otherwise without more character IO activity they will never go. */ - unsigned int count = dwCount; /* Local char counter */ + unsigned int i = count; /* Local char counter */ unsigned int index = 0; /* The index into the char buffer */ spin_unlock_irq(&ced->char_out_lock); /* Free spinlock as we call USBD */ - while ((count > 0) && (iReturn == U14ERR_NOERROR)) { + while ((i > 0) && (retval == U14ERR_NOERROR)) { /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ - int n = count > 64 ? 64 : count; /* Chars for this xfer, max of 64 */ - int nSent = usb_control_msg(ced->udev, + int n = i > 64 ? 64 : i; /* Chars for this xfer, max of 64 */ + int sent = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), /* use end point 0 */ DB_CHARS, /* bRequest */ (H_TO_D | VENDOR | DEVREQ), /* to the device, vendor request to the device */ @@ -378,16 +378,16 @@ int ced_send_chars(struct ced_data *ced) &ced->output_buffer[index], /* where to send from */ n, /* how much to send */ 1000); /* timeout in jiffies */ - if (nSent <= 0) { - iReturn = nSent ? nSent : -ETIMEDOUT; /* if 0 chars says we timed out */ + if (sent <= 0) { + retval = sent ? sent : -ETIMEDOUT; /* if 0 chars says we timed out */ dev_err(&ced->interface->dev, "Send %d chars by EP0 failed: %d\n", - n, iReturn); + n, retval); } else { dev_dbg(&ced->interface->dev, "Sent %d chars by EP0\n", n); - count -= nSent; - index += nSent; + i -= sent; + index += sent; } } @@ -397,28 +397,28 @@ int ced_send_chars(struct ced_data *ced) ced->num_output = 0; /* and clear the buffer count */ ced->send_chars_pending = false; /* Allow other threads again */ } else { /* Here for sending chars normally - we hold the spin lock */ - int nPipe = 0; /* The pipe number to use */ + int pipe = 0; /* The pipe number to use */ char *pDat = &ced->output_buffer[ced->out_buff_get]; - if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - ced->out_buff_get; + if ((ced->out_buff_get + count) > OUTBUF_SZ) /* does it cross buffer end? */ + count = OUTBUF_SZ - ced->out_buff_get; spin_unlock_irq(&ced->char_out_lock); /* we are done with stuff that changes */ - memcpy(ced->coher_char_out, pDat, dwCount); /* copy output data to the buffer */ + memcpy(ced->coher_char_out, pDat, count); /* copy output data to the buffer */ usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, ced->ep_addr[0]), - ced->coher_char_out, dwCount, + ced->coher_char_out, count, ced_writechar_callback, ced); ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; usb_anchor_urb(ced->urb_char_out, &ced->submitted); - iReturn = usb_submit_urb(ced->urb_char_out, GFP_KERNEL); + retval = usb_submit_urb(ced->urb_char_out, GFP_KERNEL); /* grab lock for errors */ spin_lock_irq(&ced->char_out_lock); - if (iReturn) { - ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ + if (retval) { + ced->pipe_error[pipe] = 1; /* Flag an error to be handled later */ ced->send_chars_pending = false; /* Allow other threads again */ usb_unanchor_urb(ced->urb_char_out); /* remove from list of active urbs */ } @@ -427,9 +427,9 @@ int ced_send_chars(struct ced_data *ced) dev_dbg(&ced->interface->dev, "%s: send_chars_pending:true\n", __func__); - dev_dbg(&ced->interface->dev, "%s: exit code: %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s: exit code: %d\n", __func__, retval); spin_unlock_irq(&ced->char_out_lock); /* Now let go of the spinlock */ - return iReturn; + return retval; } /*************************************************************************** -- cgit From 3ce341ad5cb5a7769d981be58dc1cc71685e6cd2 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:54 +0200 Subject: staging: ced1401: fix ced_copy_user_space() Rename camel case arguments and locals in function ced_copy_user_space() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 66 ++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index b02db1c7025f..019e8c0e544c 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -448,57 +448,65 @@ int ced_send_chars(struct ced_data *ced) ***************************************************************************/ static void ced_copy_user_space(struct ced_data *ced, int n) { - unsigned int nArea = ced->staged_id; - if (nArea < MAX_TRANSAREAS) { + unsigned int area = ced->staged_id; + if (area < MAX_TRANSAREAS) { /* area to be used */ - struct transarea *pArea = &ced->trans_def[nArea]; - unsigned int dwOffset = - ced->staged_done + ced->staged_offset + pArea->base_offset; - char *pCoherBuf = ced->coher_staged_io; /* coherent buffer */ - if (!pArea->used) { + struct transarea *ta = &ced->trans_def[area]; + unsigned int offset = + ced->staged_done + ced->staged_offset + ta->base_offset; + char *coher_buf = ced->coher_staged_io; /* coherent buffer */ + if (!ta->used) { dev_err(&ced->interface->dev, "%s: area %d unused\n", - __func__, nArea); + __func__, area); return; } while (n) { - int nPage = dwOffset >> PAGE_SHIFT; /* page number in table */ - if (nPage < pArea->n_pages) { - char *pvAddress = - (char *)kmap_atomic(pArea->pages[nPage]); - if (pvAddress) { - unsigned int uiPageOff = dwOffset & (PAGE_SIZE - 1); /* offset into the page */ - size_t uiXfer = PAGE_SIZE - uiPageOff; /* max to transfer on this page */ - if (uiXfer > n) /* limit byte count if too much */ - uiXfer = n; /* for the page */ + /* page number in table */ + int page = offset >> PAGE_SHIFT; + + if (page < ta->n_pages) { + char *address = + (char *)kmap_atomic(ta->pages[page]); + if (address) { + /* offset into the page */ + unsigned int page_off = + offset & (PAGE_SIZE - 1); + /* max to transfer on this page */ + size_t xfer = PAGE_SIZE - page_off; + + /* limit byte count if too much */ + /* for the page */ + if (xfer > n) + xfer = n; if (ced->staged_read) - memcpy(pvAddress + uiPageOff, - pCoherBuf, uiXfer); + memcpy(address + page_off, + coher_buf, xfer); else - memcpy(pCoherBuf, - pvAddress + uiPageOff, - uiXfer); - kunmap_atomic(pvAddress); - dwOffset += uiXfer; - pCoherBuf += uiXfer; - n -= uiXfer; + memcpy(coher_buf, + address + page_off, + xfer); + kunmap_atomic(address); + offset += xfer; + coher_buf += xfer; + n -= xfer; } else { dev_err(&ced->interface->dev, "%s: did not map page %d\n", - __func__, nPage); + __func__, page); return; } } else { dev_err(&ced->interface->dev, "%s: exceeded pages %d\n", - __func__, nPage); + __func__, page); return; } } } else dev_err(&ced->interface->dev, "%s: bad area %d\n", - __func__, nArea); + __func__, area); } /* Forward declarations for stuff used circularly */ -- cgit From 1b6cb7ebf33ce86ed188ee9058a76a1623b5a94d Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:55 +0200 Subject: staging: ced1401: fix staged_callback() Rename camel case arguments and locals in function staged_callback() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 254 ++++++++++++++++++++++---------------- 1 file changed, 147 insertions(+), 107 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 019e8c0e544c..99c8d2facfe6 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -511,202 +511,242 @@ static void ced_copy_user_space(struct ced_data *ced, int n) /* Forward declarations for stuff used circularly */ static int ced_stage_chunk(struct ced_data *ced); + /*************************************************************************** ** ReadWrite_Complete ** ** Completion routine for our staged read/write Irps */ -static void staged_callback(struct urb *pUrb) +static void staged_callback(struct urb *urb) { - struct ced_data *ced = pUrb->context; - unsigned int nGot = pUrb->actual_length; /* what we transferred */ - bool bCancel = false; - bool bRestartCharInput; /* used at the end */ + struct ced_data *ced = urb->context; + unsigned int got = urb->actual_length; /* what we transferred */ + bool cancel = false; + bool restart_char_input; /* used at the end */ spin_lock(&ced->staged_lock); /* stop ced_read_write_mem() action */ /* while this routine is running */ - ced->staged_urb_pending = false; /* clear the flag for staged IRP pending */ - if (pUrb->status) { /* sync/async unlink faults aren't errors */ + /* clear the flag for staged IRP pending */ + ced->staged_urb_pending = false; + + if (urb->status) { /* sync/async unlink faults aren't errors */ if (! - (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET - || pUrb->status == -ESHUTDOWN)) { + (urb->status == -ENOENT || urb->status == -ECONNRESET + || urb->status == -ESHUTDOWN)) { dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", - __func__, pUrb->status); + __func__, urb->status); } else dev_info(&ced->interface->dev, "%s: staged xfer cancelled\n", __func__); spin_lock(&ced->err_lock); - ced->errors = pUrb->status; + ced->errors = urb->status; spin_unlock(&ced->err_lock); - nGot = 0; /* and tidy up again if so */ - bCancel = true; + got = 0; /* and tidy up again if so */ + cancel = true; } else { dev_dbg(&ced->interface->dev, "%s: %d chars xferred\n", - __func__, nGot); - if (ced->staged_read) /* if reading, save to user space */ - ced_copy_user_space(ced, nGot); /* copy from buffer to user */ - if (nGot == 0) + __func__, got); + if (ced->staged_read) /* if reading, save to user space */ + /* copy from buffer to user */ + ced_copy_user_space(ced, got); + if (got == 0) dev_dbg(&ced->interface->dev, "%s: ZLP\n", __func__); } - /* Update the transfer length based on the TransferBufferLength value in the URB */ - ced->staged_done += nGot; + /* Update the transfer length based on the TransferBufferLength value */ + /* in the URB */ + ced->staged_done += got; dev_dbg(&ced->interface->dev, "%s: done %d bytes of %d\n", __func__, ced->staged_done, ced->staged_length); - if ((ced->staged_done == ced->staged_length) || /* If no more to do */ - (bCancel)) { /* or this IRP was cancelled */ + if ((ced->staged_done == ced->staged_length) || /* If no more to do */ + (cancel)) { /* or this IRP was cancelled */ /* Transfer area info */ - struct transarea *pArea = &ced->trans_def[ced->staged_id]; + struct transarea *ta = &ced->trans_def[ced->staged_id]; + dev_dbg(&ced->interface->dev, "%s: transfer done, bytes %d, cancel %d\n", - __func__, ced->staged_done, bCancel); - - /* Here is where we sort out what to do with this transfer if using a circular buffer. We have */ - /* a completed transfer that can be assumed to fit into the transfer area. We should be able to */ - /* add this to the end of a growing block or to use it to start a new block unless the code */ - /* that calculates the offset to use (in ced_read_write_mem) is totally duff. */ - if ((pArea->circular) && (pArea->circ_to_host) && (!bCancel) && /* Time to sort out circular buffer info? */ + __func__, ced->staged_done, cancel); + + /* Here is where we sort out what to do with this transfer if */ + /* using a circular buffer. We have a completed transfer that */ + /* can be assumed to fit into the transfer area. We should be */ + /* able to add this to the end of a growing block or to use */ + /* it to start a new block unless the code that calculates */ + /* the offset to use (in ced_read_write_mem) is totally duff. */ + if ((ta->circular) && + (ta->circ_to_host) && + (!cancel) && /* Time to sort out circular buffer info? */ (ced->staged_read)) {/* Only for tohost transfers for now */ - if (pArea->blocks[1].size > 0) { /* If block 1 is in use we must append to it */ + /* If block 1 is in use we must append to it */ + if (ta->blocks[1].size > 0) { if (ced->staged_offset == - (pArea->blocks[1].offset + - pArea->blocks[1].size)) { - pArea->blocks[1].size += + (ta->blocks[1].offset + + ta->blocks[1].size)) { + ta->blocks[1].size += ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 1 now %d bytes at %d\n", - pArea->blocks[1].size, - pArea->blocks[1].offset); + "RWM_Complete, circ block 1 " + "now %d bytes at %d\n", + ta->blocks[1].size, + ta->blocks[1].offset); } else { - /* Here things have gone very, very, wrong, but I cannot see how this can actually be achieved */ - pArea->blocks[1].offset = + /* Here things have gone very, very */ + /* wrong, but I cannot see how this */ + /* can actually be achieved */ + ta->blocks[1].offset = ced->staged_offset; - pArea->blocks[1].size = + ta->blocks[1].size = ced->staged_length; dev_err(&ced->interface->dev, - "%s: ERROR, circ block 1 re-started %d bytes at %d\n", + "%s: ERROR, circ block 1 " + "re-started %d bytes at %d\n", __func__, - pArea->blocks[1].size, - pArea->blocks[1].offset); + ta->blocks[1].size, + ta->blocks[1].offset); } - } else { /* If block 1 is not used, we try to add to block 0 */ - if (pArea->blocks[0].size > 0) { /* Got stored block 0 information? */ - /* Must append onto the existing block 0 */ + } else { /* If block 1 is not used, we try to add */ + /*to block 0 */ + + /* Got stored block 0 information? */ + if (ta->blocks[0].size > 0) { + /* Must append onto the */ + /*existing block 0 */ if (ced->staged_offset == - (pArea->blocks[0].offset + - pArea->blocks[0].size)) { - pArea->blocks[0].size += ced->staged_length; /* Just add this transfer in */ + (ta->blocks[0].offset + + ta->blocks[0].size)) { + /* Just add this transfer in */ + ta->blocks[0].size += + ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 0 now %d bytes at %d\n", - pArea->blocks[0]. - size, - pArea->blocks[0]. - offset); - } else { /* If it doesn't append, put into new block 1 */ - pArea->blocks[1].offset = + "RWM_Complete, circ " + "block 0 now %d bytes " + "at %d\n", + ta->blocks[0].size, + ta->blocks[0].offset); + + } else { /* If it doesn't append, put */ + /* into new block 1 */ + ta->blocks[1].offset = ced->staged_offset; - pArea->blocks[1].size = + ta->blocks[1].size = ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 1 started %d bytes at %d\n", - pArea->blocks[1]. - size, - pArea->blocks[1]. - offset); + "RWM_Complete, circ " + "block 1 started %d " + "bytes at %d\n", + ta->blocks[1].size, + ta->blocks[1].offset); } - } else { /* No info stored yet, just save in block 0 */ - pArea->blocks[0].offset = + } else { /* No info stored yet, just save */ + /* in block 0 */ + ta->blocks[0].offset = ced->staged_offset; - pArea->blocks[0].size = + ta->blocks[0].size = ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 0 started %d bytes at %d\n", - pArea->blocks[0].size, - pArea->blocks[0].offset); + "RWM_Complete, circ block 0 " + "started %d bytes at %d\n", + ta->blocks[0].size, + ta->blocks[0].offset); } } } - if (!bCancel) { /* Don't generate an event if cancelled */ + if (!cancel) { /* Don't generate an event if cancelled */ dev_dbg(&ced->interface->dev, - "RWM_Complete, bCircular %d, bToHost %d, eStart %d, eSize %d\n", - pArea->circular, pArea->event_to_host, - pArea->event_st, pArea->event_sz); - if ((pArea->event_sz) && /* Set a user-mode event... */ - (ced->staged_read == pArea->event_to_host)) { /* ...on transfers in this direction? */ - int iWakeUp = 0; /* assume */ + "RWM_Complete, bCircular %d, bToHost %d, " + "eStart %d, eSize %d\n", + ta->circular, ta->event_to_host, + ta->event_st, ta->event_sz); + /* Set a user-mode event... */ + /* ...on transfers in this direction? */ + if ((ta->event_sz) && + (ced->staged_read == ta->event_to_host)) { + int wakeup = 0; /* assume */ /* If we have completed the right sort of DMA */ /* transfer then set the event to notify the */ /* user code to wake up anyone that is */ /* waiting. */ - if ((pArea->circular) && /* Circular areas use a simpler test */ - (pArea->circ_to_host)) { /* only in supported direction */ - /* Is total data waiting up to size limit? */ + if ((ta->circular) && /* Circular areas use a simpler test */ + (ta->circ_to_host)) { /* only in supported direction */ + /* Is total data waiting up */ + /* to size limit? */ unsigned int dwTotal = - pArea->blocks[0].size + - pArea->blocks[1].size; - iWakeUp = (dwTotal >= pArea->event_sz); + ta->blocks[0].size + + ta->blocks[1].size; + wakeup = (dwTotal >= ta->event_sz); } else { unsigned int transEnd = ced->staged_offset + ced->staged_length; unsigned int eventEnd = - pArea->event_st + pArea->event_sz; - iWakeUp = (ced->staged_offset < eventEnd) - && (transEnd > pArea->event_st); + ta->event_st + ta->event_sz; + wakeup = (ced->staged_offset < eventEnd) + && (transEnd > ta->event_st); } - if (iWakeUp) { + if (wakeup) { dev_dbg(&ced->interface->dev, - "About to set event to notify app\n"); - wake_up_interruptible(&pArea->event); /* wake up waiting processes */ - ++pArea->wake_up; /* increment wakeup count */ + "About to set event to notify app\n"); + + /* wake up waiting processes */ + wake_up_interruptible(&ta->event); + /* increment wakeup count */ + ++ta->wake_up; } } } - ced->dma_flag = MODE_CHAR; /* Switch back to char mode before ced_read_write_mem call */ + /* Switch back to char mode before ced_read_write_mem call */ + ced->dma_flag = MODE_CHAR; - if (!bCancel) { /* Don't look for waiting transfer if cancelled */ + /* Don't look for waiting transfer if cancelled */ + if (!cancel) { /* If we have a transfer waiting, kick it off */ if (ced->xfer_waiting) {/* Got a block xfer waiting? */ - int iReturn; + int retval; dev_info(&ced->interface->dev, - "*** RWM_Complete *** pending transfer will now be set up!!!\n"); - iReturn = - ced_read_write_mem(ced, !ced->dma_info.outward, - ced->dma_info.ident, - ced->dma_info.offset, - ced->dma_info.size); - - if (iReturn) + "*** RWM_Complete *** pending transfer" + " will now be set up!!!\n"); + retval = + ced_read_write_mem(ced, + !ced->dma_info.outward, + ced->dma_info.ident, + ced->dma_info.offset, + ced->dma_info.size); + + if (retval) dev_err(&ced->interface->dev, "RWM_Complete rw setup failed %d\n", - iReturn); + retval); } } } else /* Here for more to do */ ced_stage_chunk(ced); /* fire off the next bit */ - /* While we hold the staged_lock, see if we should reallow character input ints */ - /* Don't allow if cancelled, or if a new block has started or if there is a waiting block. */ - /* This feels wrong as we should ask which spin lock protects dma_flag. */ - bRestartCharInput = !bCancel && (ced->dma_flag == MODE_CHAR) && + /* While we hold the staged_lock, see if we should reallow character */ + /* input ints */ + /* Don't allow if cancelled, or if a new block has started or if */ + /* there is a waiting block. */ + /* This feels wrong as we should ask which spin lock protects */ + /* dma_flag. */ + restart_char_input = !cancel && (ced->dma_flag == MODE_CHAR) && !ced->xfer_waiting; spin_unlock(&ced->staged_lock); /* Finally release the lock again */ - /* This is not correct as dma_flag is protected by the staged lock, but it is treated */ - /* in ced_allowi as if it were protected by the char lock. In any case, most systems will */ - /* not be upset by char input during DMA... sigh. Needs sorting out. */ - if (bRestartCharInput) /* may be out of date, but... */ + /* This is not correct as dma_flag is protected by the staged lock, */ + /* but it is treated in ced_allowi as if it were protected by the */ + /* char lock. In any case, most systems will not be upset by char */ + /* input during DMA... sigh. Needs sorting out. */ + if (restart_char_input) /* may be out of date, but... */ ced_allowi(ced); /* ...ced_allowi tests a lock too. */ dev_dbg(&ced->interface->dev, "%s: done\n", __func__); } -- cgit From 31e6a5bff780a8a1b8ce1158b50ffe3d9123bc4c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:56 +0200 Subject: staging: ced1401: fix ced_stage_chunk() Rename camel case arguments and locals in function ced_stage_chunk() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 53 +++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 99c8d2facfe6..e0d7aa070a2e 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -757,16 +757,19 @@ static void staged_callback(struct urb *urb) ** Generates the next chunk of data making up a staged transfer. ** ** The calling code must have acquired the staging spinlock before calling -** this function, and is responsible for releasing it. We are at callback level. +** this function, and is responsible for releasing it. We are at callback level. ****************************************************************************/ static int ced_stage_chunk(struct ced_data *ced) { - int iReturn = U14ERR_NOERROR; - unsigned int ChunkSize; - int nPipe = ced->staged_read ? 3 : 2; /* The pipe number to use for reads or writes */ + int retval = U14ERR_NOERROR; + unsigned int chunk_size; + int pipe = ced->staged_read ? 3 : 2; /* The pipe number to use for */ + /* reads or writes */ + if (ced->n_pipes == 3) - nPipe--; /* Adjust for the 3-pipe case */ - if (nPipe < 0) /* and trap case that should never happen */ + pipe--; /* Adjust for the 3-pipe case */ + + if (pipe < 0) /* and trap case that should never happen */ return U14ERR_FAIL; if (!can_accept_io_requests(ced)) { /* got sudden remove? */ @@ -775,34 +778,40 @@ static int ced_stage_chunk(struct ced_data *ced) return U14ERR_FAIL; /* could do with a better error */ } - ChunkSize = (ced->staged_length - ced->staged_done); /* transfer length remaining */ - if (ChunkSize > STAGED_SZ) /* make sure to keep legal */ - ChunkSize = STAGED_SZ; /* limit to max allowed */ + /* transfer length remaining */ + chunk_size = (ced->staged_length - ced->staged_done); + if (chunk_size > STAGED_SZ) /* make sure to keep legal */ + chunk_size = STAGED_SZ; /* limit to max allowed */ if (!ced->staged_read) /* if writing... */ - ced_copy_user_space(ced, ChunkSize); /* ...copy data into the buffer */ + /* ...copy data into the buffer */ + ced_copy_user_space(ced, chunk_size); usb_fill_bulk_urb(ced->staged_urb, ced->udev, ced->staged_read ? usb_rcvbulkpipe(ced->udev, ced-> - ep_addr[nPipe]) : - usb_sndbulkpipe(ced->udev, ced->ep_addr[nPipe]), - ced->coher_staged_io, ChunkSize, + ep_addr[pipe]) : + usb_sndbulkpipe(ced->udev, ced->ep_addr[pipe]), + ced->coher_staged_io, chunk_size, staged_callback, ced); ced->staged_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->staged_urb, &ced->submitted); /* in case we need to kill it */ - iReturn = usb_submit_urb(ced->staged_urb, GFP_ATOMIC); - if (iReturn) { + /* in case we need to kill it */ + usb_anchor_urb(ced->staged_urb, &ced->submitted); + retval = usb_submit_urb(ced->staged_urb, GFP_ATOMIC); + if (retval) { usb_unanchor_urb(ced->staged_urb); /* kill it */ - ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ - dev_err(&ced->interface->dev, "%s: submit urb failed, code %d\n", - __func__, iReturn); + ced->pipe_error[pipe] = 1; /* Flag an error to be */ + /* handled later */ + dev_err(&ced->interface->dev, + "%s: submit urb failed, code %d\n", + __func__, retval); } else - ced->staged_urb_pending = true; /* Set the flag for staged URB pending */ + /* Set the flag for staged URB pending */ + ced->staged_urb_pending = true; dev_dbg(&ced->interface->dev, "%s: done so far:%d, this size:%d\n", - __func__, ced->staged_done, ChunkSize); + __func__, ced->staged_done, chunk_size); - return iReturn; + return retval; } /*************************************************************************** -- cgit From bd6b7158ff1ec31d5615374f7a68685232c67e2c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:57 +0200 Subject: staging: ced1401: fix ced_read_write_mem() Rename camel case arguments and locals in function ced_read_write_mem() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 86 ++++++++++++++++++++++----------------- drivers/staging/ced1401/usb1401.h | 5 ++- 2 files changed, 52 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index e0d7aa070a2e..80070857d944 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -825,19 +825,20 @@ static int ced_stage_chunk(struct ced_data *ced) ** ** Arguments: ** DeviceObject - pointer to our FDO (Functional Device Object) -** Read - TRUE for read, FALSE for write. This is from POV of the driver -** wIdent - the transfer area number - defines memory area and more. -** dwOffs - the start offset within the transfer area of the start of this +** read - TRUE for read, FALSE for write. This is from POV of the driver +** ident - the transfer area number - defines memory area and more. +** offs - the start offset within the transfer area of the start of this ** transfer. -** dwLen - the number of bytes to transfer. +** len - the number of bytes to transfer. */ -int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, - unsigned int dwOffs, unsigned int dwLen) +int ced_read_write_mem(struct ced_data *ced, bool read, unsigned short ident, + unsigned int offs, unsigned int len) { /* Transfer area info */ - struct transarea *pArea = &ced->trans_def[wIdent]; + struct transarea *ta = &ced->trans_def[ident]; - if (!can_accept_io_requests(ced)) { /* Are we in a state to accept new requests? */ + /* Are we in a state to accept new requests? */ + if (!can_accept_io_requests(ced)) { dev_err(&ced->interface->dev, "%s: can't accept requests\n", __func__); return U14ERR_FAIL; @@ -845,10 +846,11 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, dev_dbg(&ced->interface->dev, "%s: xfer %d bytes to %s, offset %d, area %d\n", - __func__, dwLen, Read ? "host" : "1401", dwOffs, wIdent); + __func__, len, read ? "host" : "1401", offs, ident); - /* Amazingly, we can get an escape sequence back before the current staged Urb is done, so we */ - /* have to check for this situation and, if so, wait until all is OK. */ + /* Amazingly, we can get an escape sequence back before the current */ + /* staged Urb is done, so we have to check for this situation and, if */ + /* so, wait until all is OK. */ if (ced->staged_urb_pending) { ced->xfer_waiting = true; /* Flag we are waiting */ dev_info(&ced->interface->dev, @@ -857,36 +859,46 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, return U14ERR_NOERROR; } - if (dwLen == 0) { /* allow 0-len read or write; just return success */ + if (len == 0) { /* allow 0-len read or write; just return success */ dev_dbg(&ced->interface->dev, "%s: OK; zero-len read/write request\n", __func__); return U14ERR_NOERROR; } - if ((pArea->circular) && /* Circular transfer? */ - (pArea->circ_to_host) && (Read)) { /* In a supported direction */ + if ((ta->circular) && /* Circular transfer? */ + (ta->circ_to_host) && (read)) { /* In a supported direction */ /* If so, we sort out offset ourself */ bool bWait = false; /* Flag for transfer having to wait */ dev_dbg(&ced->interface->dev, "Circular buffers are %d at %d and %d at %d\n", - pArea->blocks[0].size, pArea->blocks[0].offset, - pArea->blocks[1].size, pArea->blocks[1].offset); - if (pArea->blocks[1].size > 0) { /* Using the second block already? */ - dwOffs = pArea->blocks[1].offset + pArea->blocks[1].size; /* take offset from that */ - bWait = (dwOffs + dwLen) > pArea->blocks[0].offset; /* Wait if will overwrite block 0? */ - bWait |= (dwOffs + dwLen) > pArea->length; /* or if it overflows the buffer */ - } else { /* Area 1 not in use, try to use area 0 */ - if (pArea->blocks[0].size == 0) /* Reset block 0 if not in use */ - pArea->blocks[0].offset = 0; - dwOffs = - pArea->blocks[0].offset + - pArea->blocks[0].size; - if ((dwOffs + dwLen) > pArea->length) { /* Off the end of the buffer? */ - pArea->blocks[1].offset = 0; /* Set up to use second block */ - dwOffs = 0; - bWait = (dwOffs + dwLen) > pArea->blocks[0].offset; /* Wait if will overwrite block 0? */ - bWait |= (dwOffs + dwLen) > pArea->length; /* or if it overflows the buffer */ + ta->blocks[0].size, ta->blocks[0].offset, + ta->blocks[1].size, ta->blocks[1].offset); + + /* Using the second block already? */ + if (ta->blocks[1].size > 0) { + /* take offset from that */ + offs = ta->blocks[1].offset + ta->blocks[1].size; + /* Wait if will overwrite block 0? */ + bWait = (offs + len) > ta->blocks[0].offset; + /* or if it overflows the buffer */ + bWait |= (offs + len) > ta->length; + } else { /* Area 1 not in use, try to use area 0 */ + /* Reset block 0 if not in use */ + if (ta->blocks[0].size == 0) + ta->blocks[0].offset = 0; + offs = + ta->blocks[0].offset + + ta->blocks[0].size; + /* Off the end of the buffer? */ + if ((offs + len) > ta->length) { + /* Set up to use second block */ + ta->blocks[1].offset = 0; + offs = 0; + /* Wait if will overwrite block 0? */ + bWait = (offs + len) > ta->blocks[0].offset; + /* or if it overflows the buffer */ + bWait |= (offs + len) > ta->length; } } @@ -900,18 +912,18 @@ int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, dev_dbg(&ced->interface->dev, "%s: circular xfer, %d bytes starting at %d\n", - __func__, dwLen, dwOffs); + __func__, len, offs); } /* Save the parameters for the read\write transfer */ - ced->staged_read = Read; /* Save the parameters for this read */ - ced->staged_id = wIdent; /* ID allows us to get transfer area info */ - ced->staged_offset = dwOffs; /* The area within the transfer area */ - ced->staged_length = dwLen; + ced->staged_read = read; /* Save the parameters for this read */ + ced->staged_id = ident; /* ID allows us to get transfer area info */ + ced->staged_offset = offs; /* The area within the transfer area */ + ced->staged_length = len; ced->staged_done = 0; /* Initialise the byte count */ ced->dma_flag = MODE_LINEAR; /* Set DMA mode flag at this point */ ced->xfer_waiting = false; /* Clearly not a transfer waiting now */ -/* KeClearEvent(&ced->StagingDoneEvent); // Clear the transfer done event */ +/* KeClearEvent(&ced->StagingDoneEvent); // Clear the transfer done event */ ced_stage_chunk(ced); /* fire off the first chunk */ return U14ERR_NOERROR; diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 812d0a34a344..f1825a3331d9 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -216,8 +216,9 @@ struct ced_data { extern int ced_allowi(struct ced_data * ced); extern int ced_send_chars(struct ced_data *ced); extern void ced_draw_down(struct ced_data *ced); -extern int ced_read_write_mem(struct ced_data *ced, bool Read, unsigned short wIdent, - unsigned int dwOffs, unsigned int dwLen); +extern int ced_read_write_mem(struct ced_data *ced, bool read, + unsigned short ident, unsigned int offs, + unsigned int len); /* in ced_ioc.c */ extern int ced_clear_area(struct ced_data *ced, int nArea); -- cgit From 858166f9f27a3a2d53eb50ef0429d13be8499875 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:58 +0200 Subject: staging: ced1401: fix ced_read_char() Rename camel case arguments and locals in function ced_read_char() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 80070857d944..17d1c60e77a8 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -937,20 +937,21 @@ int ced_read_write_mem(struct ced_data *ced, bool read, unsigned short ident, ** data we return FALSE. Used as part of decoding a DMA request. ** ****************************************************************************/ -static bool ced_read_char(unsigned char *pChar, char *pBuf, unsigned int *pdDone, - unsigned int dGot) +static bool ced_read_char(unsigned char *character, char *buf, + unsigned int *n_done, unsigned int got) { - bool bRead = false; - unsigned int dDone = *pdDone; - - if (dDone < dGot) { /* If there is more data */ - *pChar = (unsigned char)pBuf[dDone]; /* Extract the next char */ - dDone++; /* Increment the done count */ - *pdDone = dDone; - bRead = true; /* and flag success */ + bool read = false; + unsigned int done = *n_done; + + if (done < got) { /* If there is more data */ + /* Extract the next char */ + *character = (unsigned char)buf[done]; + done++; /* Increment the done count */ + *n_done = done; + read = true; /* and flag success */ } - return bRead; + return read; } #ifdef NOTUSED -- cgit From 2459d8e45e26f604608cea2786c8098dc7065b4a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:01:59 +0200 Subject: staging: ced1401: fix ced_read_word() Rename camel case arguments and locals in function ced_read_word() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 17d1c60e77a8..d062d5d7fc52 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -959,15 +959,16 @@ static bool ced_read_char(unsigned char *character, char *buf, ** ** ced_read_word ** -** Reads a word from the 1401, just uses ced_read_char twice; passes on any error +** Reads a word from the 1401, just uses ced_read_char twice; +** passes on any error ** *****************************************************************************/ -static bool ced_read_word(unsigned short *pWord, char *pBuf, unsigned int *pdDone, - unsigned int dGot) +static bool ced_read_word(unsigned short *word, char *buf, unsigned int *n_done, + unsigned int got) { - if (ced_read_char((unsigned char *)pWord, pBuf, pdDone, dGot)) - return ced_read_char(((unsigned char *)pWord) + 1, pBuf, pdDone, - dGot); + if (ced_read_char((unsigned char *)word, buf, n_done, got)) + return ced_read_char(((unsigned char *)word) + 1, buf, n_done, + got); else return false; } -- cgit From 6bcee5d07a38614a1ff11ed3c6e6c723d05f74c1 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:00 +0200 Subject: staging: ced1401: fix ced_read_huff() Rename camel case arguments and locals in function ced_read_huff() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 45 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index d062d5d7fc52..00781427ac20 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -984,35 +984,38 @@ static bool ced_read_word(unsigned short *word, char *buf, unsigned int *n_done, ** to indicate three byte total. ** *****************************************************************************/ -static bool ced_read_huff(volatile unsigned int *pDWord, char *pBuf, - unsigned int *pdDone, unsigned int dGot) +static bool ced_read_huff(volatile unsigned int *word, char *buf, + unsigned int *n_done, unsigned int got) { - unsigned char ucData; /* for each read to ced_read_char */ - bool bReturn = true; /* assume we will succeed */ - unsigned int dwData = 0; /* Accumulator for the data */ - - if (ced_read_char(&ucData, pBuf, pdDone, dGot)) { - dwData = ucData; /* copy the data */ - if ((dwData & 0x00000080) != 0) { /* Bit set for more data ? */ - dwData &= 0x0000007F; /* Clear the relevant bit */ - if (ced_read_char(&ucData, pBuf, pdDone, dGot)) { - dwData = (dwData << 8) | ucData; - if ((dwData & 0x00004000) != 0) { /* three byte sequence ? */ - dwData &= 0x00003FFF; /* Clear the relevant bit */ + unsigned char c; /* for each read to ced_read_char */ + bool retval = true; /* assume we will succeed */ + unsigned int data = 0; /* Accumulator for the data */ + + if (ced_read_char(&c, buf, n_done, got)) { + data = c; /* copy the data */ + if ((data & 0x00000080) != 0) { /* Bit set for more data ? */ + data &= 0x0000007F; /* Clear the relevant bit */ + if (ced_read_char(&c, buf, n_done, got)) { + data = (data << 8) | c; + + /* three byte sequence ? */ + if ((data & 0x00004000) != 0) { + /* Clear the relevant bit */ + data &= 0x00003FFF; if (ced_read_char - (&ucData, pBuf, pdDone, dGot)) - dwData = (dwData << 8) | ucData; + (&c, buf, n_done, got)) + data = (data << 8) | c; else - bReturn = false; + retval = false; } } else - bReturn = false; /* couldn't read data */ + retval = false; /* couldn't read data */ } } else - bReturn = false; + retval = false; - *pDWord = dwData; /* return the data */ - return bReturn; + *word = data; /* return the data */ + return retval; } /*************************************************************************** -- cgit From cd0584839c2507a0f97b8bb7a396b172023e50b7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:01 +0200 Subject: staging: ced1401: fix ced_read_dma_info() Rename camel case arguments and locals in function ced_read_dma_info() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 90 +++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 00781427ac20..f360896bb9a9 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1028,66 +1028,71 @@ static bool ced_read_huff(volatile unsigned int *word, char *buf, ** the transfer request. Returns FALSE if 1401 fails to respond or obselete ** code from 1401 or bad parameters. ** -** The pBuf char pointer does not include the initial escape character, so +** The buf char pointer does not include the initial escape character, so ** we start handling the data at offset zero. ** *****************************************************************************/ -static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, +static bool ced_read_dma_info(volatile struct dmadesc *dma_desc, struct ced_data *ced, - char *pBuf, unsigned int dwCount) + char *buf, unsigned int count) { - bool bResult = false; /* assume we won't succeed */ - unsigned char ucData; - unsigned int dDone = 0; /* We haven't parsed anything so far */ + bool retval = false; /* assume we won't succeed */ + unsigned char c; + unsigned int n_done = 0; /* We haven't parsed anything so far */ dev_dbg(&ced->interface->dev, "%s\n", __func__); - if (ced_read_char(&ucData, pBuf, &dDone, dwCount)) { - unsigned char ucTransCode = (ucData & 0x0F); /* get code for transfer type */ - unsigned short wIdent = ((ucData >> 4) & 0x07); /* and area identifier */ + if (ced_read_char(&c, buf, &n_done, count)) { + /* get code for transfer type */ + unsigned char trans_code = (c & 0x0F); + /* and area identifier */ + unsigned short ident = ((c >> 4) & 0x07); /* fill in the structure we were given */ - pDmaDesc->trans_type = ucTransCode; /* type of transfer */ - pDmaDesc->ident = wIdent; /* area to use */ - pDmaDesc->size = 0; /* initialise other bits */ - pDmaDesc->offset = 0; + dma_desc->trans_type = trans_code; /* type of transfer */ + dma_desc->ident = ident; /* area to use */ + dma_desc->size = 0; /* initialise other bits */ + dma_desc->offset = 0; dev_dbg(&ced->interface->dev, "%s: type: %d ident: %d\n", - __func__, pDmaDesc->trans_type, pDmaDesc->ident); + __func__, dma_desc->trans_type, dma_desc->ident); - pDmaDesc->outward = (ucTransCode != TM_EXTTOHOST); /* set transfer direction */ + /* set transfer direction */ + dma_desc->outward = (trans_code != TM_EXTTOHOST); - switch (ucTransCode) { - case TM_EXTTOHOST: /* Extended linear transfer modes (the only ones!) */ + switch (trans_code) { + + /* Extended linear transfer modes (the only ones!) */ + case TM_EXTTOHOST: case TM_EXTTO1401: { - bResult = - ced_read_huff(&(pDmaDesc->offset), pBuf, - &dDone, dwCount) - && ced_read_huff(&(pDmaDesc->size), pBuf, - &dDone, dwCount); - if (bResult) { + retval = + ced_read_huff(&(dma_desc->offset), buf, + &n_done, count) + && ced_read_huff(&(dma_desc->size), buf, + &n_done, count); + if (retval) { dev_dbg(&ced->interface->dev, "%s: xfer offset & size %d %d\n", - __func__, pDmaDesc->offset, - pDmaDesc->size); - - if ((wIdent >= MAX_TRANSAREAS) || /* Illegal area number, or... */ - (!ced->trans_def[wIdent].used) || /* area not set up, or... */ - (pDmaDesc->offset > ced->trans_def[wIdent].length) || /* range/size */ - ((pDmaDesc->offset + - pDmaDesc->size) > - (ced->trans_def[wIdent]. + __func__, dma_desc->offset, + dma_desc->size); + + if ((ident >= MAX_TRANSAREAS) || /* Illegal area number, or... */ + (!ced->trans_def[ident].used) || /* area not set up, or... */ + (dma_desc->offset > ced->trans_def[ident].length) || /* range/size */ + ((dma_desc->offset + + dma_desc->size) > + (ced->trans_def[ident]. length))) { - bResult = false; /* bad parameter(s) */ + retval = false; /* bad parameter(s) */ dev_dbg(&ced->interface->dev, "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", - __func__, wIdent, - ced->trans_def[wIdent]. + __func__, ident, + ced->trans_def[ident]. used, - pDmaDesc->offset, - pDmaDesc->size, - ced->trans_def[wIdent]. + dma_desc->offset, + dma_desc->size, + ced->trans_def[ident]. length); } } @@ -1097,13 +1102,14 @@ static bool ced_read_dma_info(volatile struct dmadesc *pDmaDesc, break; } } else - bResult = false; + retval = false; - if (!bResult) /* now check parameters for validity */ - dev_err(&ced->interface->dev, "%s: error reading Esc sequence\n", + if (!retval) /* now check parameters for validity */ + dev_err(&ced->interface->dev, + "%s: error reading Esc sequence\n", __func__); - return bResult; + return retval; } /**************************************************************************** -- cgit From 13f9c5683580d8bb6c8a8b8f4ed1d8d401be7015 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:02 +0200 Subject: staging: ced1401: fix ced_handle_esc() Rename camel case arguments and locals in function ced_handle_esc() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 41 +++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index f360896bb9a9..f47735f2d7bc 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1122,25 +1122,28 @@ static bool ced_read_dma_info(volatile struct dmadesc *dma_desc, ** ** Parameters are ** -** dwCount - the number of characters in the device extension char in buffer, +** count - the number of characters in the device extension char in buffer, ** this is known to be at least 2 or we will not be called. ** ****************************************************************************/ -static int ced_handle_esc(struct ced_data *ced, char *pCh, - unsigned int dwCount) +static int ced_handle_esc(struct ced_data *ced, char *ch, + unsigned int count) { - int iReturn = U14ERR_FAIL; + int retval = U14ERR_FAIL; - /* I have no idea what this next test is about. '?' is 0x3f, which is area 3, code */ - /* 15. At the moment, this is not used, so it does no harm, but unless someone can */ - /* tell me what this is for, it should be removed from this and the Windows driver. */ - if (pCh[0] == '?') { /* Is this an information response */ + /* I have no idea what this next test is about. '?' is 0x3f, which is */ + /* area 3, code 15. At the moment, this is not used, so it does no */ + /* harm, but unless someone can tell me what this is for, it should */ + /* be removed from this and the Windows driver. */ + if (ch[0] == '?') { /* Is this an information response */ /* Parse and save the information */ } else { spin_lock(&ced->staged_lock); /* Lock others out */ - if (ced_read_dma_info(&ced->dma_info, ced, pCh, dwCount)) { /* Get DMA parameters */ - unsigned short wTransType = ced->dma_info.trans_type; /* check transfer type */ + /* Get DMA parameters */ + if (ced_read_dma_info(&ced->dma_info, ced, ch, count)) { + /* check transfer type */ + unsigned short trans_type = ced->dma_info.trans_type; dev_dbg(&ced->interface->dev, "%s: xfer to %s, offset %d, length %d\n", @@ -1154,22 +1157,22 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, dev_err(&ced->interface->dev, "ERROR: DMA setup while transfer still waiting\n"); } else { - if ((wTransType == TM_EXTTOHOST) - || (wTransType == TM_EXTTO1401)) { - iReturn = + if ((trans_type == TM_EXTTOHOST) + || (trans_type == TM_EXTTO1401)) { + retval = ced_read_write_mem(ced, !ced->dma_info.outward, ced->dma_info.ident, ced->dma_info.offset, ced->dma_info.size); - if (iReturn != U14ERR_NOERROR) + if (retval != U14ERR_NOERROR) dev_err(&ced->interface->dev, "%s: ced_read_write_mem() failed %d\n", - __func__, iReturn); - } else /* This covers non-linear transfer setup */ + __func__, retval); + } else /* This covers non-linear transfer setup */ dev_err(&ced->interface->dev, "%s: Unknown block xfer type %d\n", - __func__, wTransType); + __func__, trans_type); } } else /* Failed to read parameters */ dev_err(&ced->interface->dev, "%s: ced_read_dma_info() fail\n", @@ -1178,9 +1181,9 @@ static int ced_handle_esc(struct ced_data *ced, char *pCh, spin_unlock(&ced->staged_lock); /* OK here */ } - dev_dbg(&ced->interface->dev, "%s: returns %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s: returns %d\n", __func__, retval); - return iReturn; + return retval; } /**************************************************************************** -- cgit From fbbd0c26509322af8a9d1e4c5bda7bd9233cd0ed Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:03 +0200 Subject: staging: ced1401: fix ced_readchar_callback() Rename camel case arguments and locals in function ced_readchar_callback() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 63 +++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index f47735f2d7bc..4f478bd8da62 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1189,57 +1189,68 @@ static int ced_handle_esc(struct ced_data *ced, char *ch, /**************************************************************************** ** Callback for the character read complete or error ****************************************************************************/ -static void ced_readchar_callback(struct urb *pUrb) +static void ced_readchar_callback(struct urb *urb) { - struct ced_data *ced = pUrb->context; - int nGot = pUrb->actual_length; /* what we transferred */ + struct ced_data *ced = urb->context; + int got = urb->actual_length; /* what we transferred */ - if (pUrb->status) { /* Do we have a problem to handle? */ - int nPipe = ced->n_pipes == 4 ? 1 : 0; /* The pipe number to use for error */ - /* sync/async unlink faults aren't errors... just saying device removed or stopped */ + if (urb->status) { /* Do we have a problem to handle? */ + /* The pipe number to use for error */ + int pipe = ced->n_pipes == 4 ? 1 : 0; + /* sync/async unlink faults aren't errors... */ + /* just saying device removed or stopped */ if (! - (pUrb->status == -ENOENT || pUrb->status == -ECONNRESET - || pUrb->status == -ESHUTDOWN)) { + (urb->status == -ENOENT || urb->status == -ECONNRESET + || urb->status == -ESHUTDOWN)) { dev_err(&ced->interface->dev, "%s: nonzero write bulk status received: %d\n", - __func__, pUrb->status); + __func__, urb->status); } else dev_dbg(&ced->interface->dev, - "%s: 0 chars pUrb->status=%d (shutdown?)\n", - __func__, pUrb->status); + "%s: 0 chars urb->status=%d (shutdown?)\n", + __func__, urb->status); spin_lock(&ced->err_lock); - ced->errors = pUrb->status; + ced->errors = urb->status; spin_unlock(&ced->err_lock); - nGot = 0; /* and tidy up again if so */ + got = 0; /* and tidy up again if so */ spin_lock(&ced->char_in_lock); /* already at irq level */ - ced->pipe_error[nPipe] = 1; /* Flag an error for later */ + ced->pipe_error[pipe] = 1; /* Flag an error for later */ } else { - if ((nGot > 1) && ((ced->coher_char_in[0] & 0x7f) == 0x1b)) { /* Esc sequence? */ - ced_handle_esc(ced, &ced->coher_char_in[1], nGot - 1); /* handle it */ - spin_lock(&ced->char_in_lock); /* already at irq level */ + /* Esc sequence? */ + if ((got > 1) && ((ced->coher_char_in[0] & 0x7f) == 0x1b)) { + /* handle it */ + ced_handle_esc(ced, &ced->coher_char_in[1], got - 1); + + /* already at irq level */ + spin_lock(&ced->char_in_lock); } else { - spin_lock(&ced->char_in_lock); /* already at irq level */ - if (nGot > 0) { + /* already at irq level */ + spin_lock(&ced->char_in_lock); + + if (got > 0) { unsigned int i; - if (nGot < INBUF_SZ) { - ced->coher_char_in[nGot] = 0; /* tidy the string */ + if (got < INBUF_SZ) { + /* tidy the string */ + ced->coher_char_in[got] = 0; dev_dbg(&ced->interface->dev, "%s: got %d chars >%s<\n", - __func__, nGot, + __func__, got, ced->coher_char_in); } - /* We know that whatever we read must fit in the input buffer */ - for (i = 0; i < nGot; i++) { + /* We know that whatever we read must fit */ + /* in the input buffer */ + for (i = 0; i < got; i++) { ced->input_buffer[ced->in_buff_put++] = ced->coher_char_in[i] & 0x7F; if (ced->in_buff_put >= INBUF_SZ) ced->in_buff_put = 0; } - if ((ced->num_input + nGot) <= INBUF_SZ) - ced->num_input += nGot; /* Adjust the buffer count accordingly */ + if ((ced->num_input + got) <= INBUF_SZ) + /* Adjust the buffer count accordingly */ + ced->num_input += got; } else dev_dbg(&ced->interface->dev, "%s: read ZLP\n", __func__); -- cgit From f66a9beecfb8a8c5da57e806d1667599b238b8ed Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:04 +0200 Subject: staging: ced1401: fix ced_allowi() Rename camel case arguments and locals in function ced_allowi() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 47 ++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 4f478bd8da62..122d521a8431 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1272,32 +1272,35 @@ static void ced_readchar_callback(struct urb *urb) ****************************************************************************/ int ced_allowi(struct ced_data *ced) { - int iReturn = U14ERR_NOERROR; + int retval = U14ERR_NOERROR; unsigned long flags; /* can be called in multiple contexts */ spin_lock_irqsave(&ced->char_in_lock, flags); - /* We don't want char input running while DMA is in progress as we know that this */ - /* can cause sequencing problems for the 2270. So don't. It will also allow the */ - /* ERR response to get back to the host code too early on some PCs, even if there */ - /* is no actual driver failure, so we don't allow this at all. */ - if (!ced->in_draw_down && /* stop input if */ - !ced->read_chars_pending && /* If no read request outstanding */ - (ced->num_input < (INBUF_SZ / 2)) && /* and there is some space */ + /* We don't want char input running while DMA is in progress as we */ + /* know that this can cause sequencing problems for the 2270. So */ + /* don't. It will also allow the ERR response to get back to the host */ + /* code too early on some PCs, even if there is no actual driver */ + /* failure, so we don't allow this at all. */ + if (!ced->in_draw_down && /* stop input if */ + !ced->read_chars_pending && /* If no read request outstanding */ + (ced->num_input < (INBUF_SZ / 2)) && /* and there is some space */ (ced->dma_flag == MODE_CHAR) && /* not doing any DMA */ (!ced->xfer_waiting) && /* no xfer waiting to start */ - (can_accept_io_requests(ced))) { /* and activity is generally OK */ + (can_accept_io_requests(ced))) { /* and activity is generally OK */ /* then off we go */ - unsigned int nMax = INBUF_SZ - ced->num_input; /* max we could read */ - int nPipe = ced->n_pipes == 4 ? 1 : 0; /* The pipe number to use */ + /* max we could read */ + unsigned int max = INBUF_SZ - ced->num_input; + /* The pipe number to use */ + int pipe = ced->n_pipes == 4 ? 1 : 0; dev_dbg(&ced->interface->dev, "%s: %d chars in input buffer\n", __func__, ced->num_input); usb_fill_int_urb(ced->urb_char_in, ced->udev, - usb_rcvintpipe(ced->udev, ced->ep_addr[nPipe]), - ced->coher_char_in, nMax, ced_readchar_callback, + usb_rcvintpipe(ced->udev, ced->ep_addr[pipe]), + ced->coher_char_in, max, ced_readchar_callback, ced, ced->interval); /* short xfers are OK by default */ @@ -1306,21 +1309,23 @@ int ced_allowi(struct ced_data *ced) /* in case we need to kill it */ usb_anchor_urb(ced->urb_char_in, &ced->submitted); - iReturn = usb_submit_urb(ced->urb_char_in, GFP_ATOMIC); - if (iReturn) { - usb_unanchor_urb(ced->urb_char_in); /* remove from list of active Urbs */ - ced->pipe_error[nPipe] = 1; /* Flag an error to be handled later */ + retval = usb_submit_urb(ced->urb_char_in, GFP_ATOMIC); + if (retval) { + /* remove from list of active Urbs */ + usb_unanchor_urb(ced->urb_char_in); + /* Flag an error to be handled later */ + ced->pipe_error[pipe] = 1; dev_err(&ced->interface->dev, "%s: submit urb failed: %d\n", - __func__, iReturn); + __func__, retval); } else - ced->read_chars_pending = true; /* Flag that we are active here */ + /* Flag that we are active here */ + ced->read_chars_pending = true; } spin_unlock_irqrestore(&ced->char_in_lock, flags); - return iReturn; - + return retval; } /***************************************************************************** -- cgit From 4d1f2b7159a30e7a6f67f84e6332892ce44d8c1f Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:05 +0200 Subject: staging: ced1401: fix ced_ioctl() Rename camel case arguments and locals in function ced_ioctl() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 66 ++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 122d521a8431..c8685c1a87cb 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1332,28 +1332,34 @@ int ced_allowi(struct ced_data *ced) ** The ioctl entry point to the driver that is used by us to talk to it. ** inode The device node (no longer in 3.0.0 kernels) ** file The file that is open, which holds our ced pointer -** ulArg The argument passed in. Note that long is 64-bits in 64-bit system, i.e. it is big -** enough for a 64-bit pointer. +** arg The argument passed in. Note that long is 64-bits in 64-bit system, +** i.e. it is big enough for a 64-bit pointer. *****************************************************************************/ -static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) +static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int err = 0; struct ced_data *ced = file->private_data; if (!can_accept_io_requests(ced)) /* check we still exist */ return -ENODEV; - /* Check that access is allowed, where is is needed. Anything that would have an indeterminate */ - /* size will be checked by the specific command. */ - if (_IOC_DIR(cmd) & _IOC_READ) /* read from point of view of user... */ - err = !access_ok(VERIFY_WRITE, (void __user *)ulArg, _IOC_SIZE(cmd)); /* is kernel write */ - else if (_IOC_DIR(cmd) & _IOC_WRITE) /* and write from point of view of user... */ - err = !access_ok(VERIFY_READ, (void __user *)ulArg, _IOC_SIZE(cmd)); /* is kernel read */ + /* Check that access is allowed, where is is needed. Anything that */ + /* would have an indeterminate size will be checked by the */ + /* specific command. */ + if (_IOC_DIR(cmd) & _IOC_READ) /* read from point of view of user... */ + /* is kernel write */ + err = !access_ok(VERIFY_WRITE, + (void __user *)arg, _IOC_SIZE(cmd)); + else if (_IOC_DIR(cmd) & _IOC_WRITE) /* and write from point of */ + /* view of user... */ + /* is kernel read */ + err = !access_ok(VERIFY_READ, + (void __user *)arg, _IOC_SIZE(cmd)); if (err) return -EFAULT; switch (_IOC_NR(cmd)) { case _IOC_NR(IOCTL_CED_SENDSTRING(0)): - return ced_send_string(ced, (const char __user *)ulArg, + return ced_send_string(ced, (const char __user *)arg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_RESET1401): @@ -1363,7 +1369,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_get_char(ced); case _IOC_NR(IOCTL_CED_SENDCHAR): - return ced_send_char(ced, (char)ulArg); + return ced_send_char(ced, (char)arg); case _IOC_NR(IOCTL_CED_STAT1401): return ced_stat_1401(ced); @@ -1372,16 +1378,18 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_line_count(ced); case _IOC_NR(IOCTL_CED_GETSTRING(0)): - return ced_get_string(ced, (char __user *)ulArg, _IOC_SIZE(cmd)); + return ced_get_string(ced, (char __user *)arg, _IOC_SIZE(cmd)); case _IOC_NR(IOCTL_CED_SETTRANSFER): - return ced_set_transfer(ced, (struct transfer_area_desc __user *) ulArg); + return ced_set_transfer(ced, + (struct transfer_area_desc __user *) arg); case _IOC_NR(IOCTL_CED_UNSETTRANSFER): - return ced_unset_transfer(ced, (int)ulArg); + return ced_unset_transfer(ced, (int)arg); case _IOC_NR(IOCTL_CED_SETEVENT): - return ced_set_event(ced, (struct transfer_event __user *) ulArg); + return ced_set_event(ced, + (struct transfer_event __user *) arg); case _IOC_NR(IOCTL_CED_GETOUTBUFSPACE): return ced_get_out_buf_space(ced); @@ -1390,10 +1398,11 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return -1; case _IOC_NR(IOCTL_CED_GETDRIVERREVISION): - return (2 << 24) | (DRIVERMAJREV << 16) | DRIVERMINREV; /* USB | MAJOR | MINOR */ + /* USB | MAJOR | MINOR */ + return (2 << 24) | (DRIVERMAJREV << 16) | DRIVERMINREV; case _IOC_NR(IOCTL_CED_GETTRANSFER): - return ced_get_transfer(ced, (TGET_TX_BLOCK __user *) ulArg); + return ced_get_transfer(ced, (TGET_TX_BLOCK __user *) arg); case _IOC_NR(IOCTL_CED_KILLIO1401): return ced_kill_io(ced); @@ -1409,7 +1418,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_start_self_test(ced); case _IOC_NR(IOCTL_CED_CHECKSELFTEST): - return ced_check_self_test(ced, (TGET_SELFTEST __user *) ulArg); + return ced_check_self_test(ced, (TGET_SELFTEST __user *) arg); case _IOC_NR(IOCTL_CED_TYPEOF1401): return ced_type_of_1401(ced); @@ -1418,19 +1427,19 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) return ced_transfer_flags(ced); case _IOC_NR(IOCTL_CED_DBGPEEK): - return ced_dbg_peek(ced, (TDBGBLOCK __user *) ulArg); + return ced_dbg_peek(ced, (TDBGBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_DBGPOKE): - return ced_dbg_poke(ced, (TDBGBLOCK __user *) ulArg); + return ced_dbg_poke(ced, (TDBGBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_DBGRAMPDATA): - return ced_dbg_ramp_data(ced, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_data(ced, (TDBGBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_DBGRAMPADDR): - return ced_dbg_ramp_addr(ced, (TDBGBLOCK __user *) ulArg); + return ced_dbg_ramp_addr(ced, (TDBGBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_DBGGETDATA): - return ced_dbg_get_data(ced, (TDBGBLOCK __user *) ulArg); + return ced_dbg_get_data(ced, (TDBGBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_DBGSTOPLOOP): return ced_dbg_stop_loop(ced); @@ -1440,19 +1449,20 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long ulArg) break; case _IOC_NR(IOCTL_CED_SETCIRCULAR): - return ced_set_circular(ced, (struct transfer_area_desc __user *) ulArg); + return ced_set_circular(ced, + (struct transfer_area_desc __user *) arg); case _IOC_NR(IOCTL_CED_GETCIRCBLOCK): - return ced_get_circ_block(ced, (TCIRCBLOCK __user *) ulArg); + return ced_get_circ_block(ced, (TCIRCBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_FREECIRCBLOCK): - return ced_free_circ_block(ced, (TCIRCBLOCK __user *) ulArg); + return ced_free_circ_block(ced, (TCIRCBLOCK __user *) arg); case _IOC_NR(IOCTL_CED_WAITEVENT): - return ced_wait_event(ced, (int)(ulArg & 0xff), (int)(ulArg >> 8)); + return ced_wait_event(ced, (int)(arg & 0xff), (int)(arg >> 8)); case _IOC_NR(IOCTL_CED_TESTEVENT): - return ced_test_event(ced, (int)ulArg); + return ced_test_event(ced, (int)arg); default: return U14ERR_NO_SUCH_FN; -- cgit From bcdf1d36ef19724dd7d50aff78201cd1727f68d1 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:06 +0200 Subject: staging: ced1401: fix ced_disconnect() Rename camel case locals in function ced_disconnect() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index c8685c1a87cb..26e5f1b77cf8 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1628,8 +1628,8 @@ static void ced_disconnect(struct usb_interface *interface) mutex_lock(&ced->io_mutex); /* stop more I/O starting while... */ ced_draw_down(ced); /* ...wait for then kill any io */ for (i = 0; i < MAX_TRANSAREAS; ++i) { - int iErr = ced_clear_area(ced, i); /* ...release any used memory */ - if (iErr == U14ERR_UNLOCKFAIL) + int err = ced_clear_area(ced, i); /* ...release any used memory */ + if (err == U14ERR_UNLOCKFAIL) dev_err(&ced->interface->dev, "%s: Area %d was in used\n", __func__, i); } -- cgit From 500a247cb39d6105c5360338d1b8570c29f989b5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:07 +0200 Subject: staging: ced1401: fix comment Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 60a671edbb06..1b7ed4fc872f 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -78,7 +78,7 @@ static void ced_flush_in_buff(struct ced_data *ced) ** ced_put_chars ** ** Utility routine to copy chars into the output buffer and fire them off. -** called from user mode, holds charOutLock. +** called from user mode, holds char_out_lock. ****************************************************************************/ static int ced_put_chars(struct ced_data *ced, const char *pCh, unsigned int uCount) -- cgit From 2c50d117fb46182f35c24935d3db0fbb8d23528a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:08 +0200 Subject: staging: ced1401: fix ced_put_chars() Rename camel case arguments and locals in function ced_put_chars() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 1b7ed4fc872f..81289d7a622a 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -80,26 +80,26 @@ static void ced_flush_in_buff(struct ced_data *ced) ** Utility routine to copy chars into the output buffer and fire them off. ** called from user mode, holds char_out_lock. ****************************************************************************/ -static int ced_put_chars(struct ced_data *ced, const char *pCh, - unsigned int uCount) +static int ced_put_chars(struct ced_data *ced, const char *ch, + unsigned int count) { - int iReturn; + int ret; spin_lock_irq(&ced->char_out_lock); /* get the output spin lock */ - if ((OUTBUF_SZ - ced->num_output) >= uCount) { + if ((OUTBUF_SZ - ced->num_output) >= count) { unsigned int u; - for (u = 0; u < uCount; u++) { - ced->output_buffer[ced->out_buff_put++] = pCh[u]; + for (u = 0; u < count; u++) { + ced->output_buffer[ced->out_buff_put++] = ch[u]; if (ced->out_buff_put >= OUTBUF_SZ) ced->out_buff_put = 0; } - ced->num_output += uCount; + ced->num_output += count; spin_unlock_irq(&ced->char_out_lock); - iReturn = ced_send_chars(ced); /* ...give a chance to transmit data */ + ret = ced_send_chars(ced); /* ...give a chance to transmit data */ } else { - iReturn = U14ERR_NOOUT; /* no room at the out (ha-ha) */ + ret = U14ERR_NOOUT; /* no room at the out (ha-ha) */ spin_unlock_irq(&ced->char_out_lock); } - return iReturn; + return ret; } /***************************************************************************** -- cgit From 4165106f362fa9ff35dd37bb0e227d74e072b151 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:09 +0200 Subject: staging: ced1401: fix ced_send_string() Rename camel case arguments and locals in function ced_send_string() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 15 ++++++++------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 81289d7a622a..0c96202044b8 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -103,18 +103,19 @@ static int ced_put_chars(struct ced_data *ced, const char *ch, } /***************************************************************************** -** Add the data in pData (local pointer) of length n to the output buffer, and +** Add the data in "data" local pointer of length n to the output buffer, and ** trigger an output transfer if this is appropriate. User mode. ** Holds the io_mutex *****************************************************************************/ -int ced_send_string(struct ced_data *ced, const char __user *pData, +int ced_send_string(struct ced_data *ced, const char __user *data, unsigned int n) { - int iReturn = U14ERR_NOERROR; /* assume all will be well */ - char buffer[OUTBUF_SZ + 1]; /* space in our address space for characters */ + int ret = U14ERR_NOERROR; /* assume all will be well */ + char buffer[OUTBUF_SZ + 1]; /* space in our address space */ + /* for characters */ if (n > OUTBUF_SZ) /* check space in local buffer... */ return U14ERR_NOOUT; /* ...too many characters */ - if (copy_from_user(buffer, pData, n)) + if (copy_from_user(buffer, data, n)) return -EFAULT; buffer[n] = 0; /* terminate for debug purposes */ @@ -122,13 +123,13 @@ int ced_send_string(struct ced_data *ced, const char __user *pData, if (n > 0) { /* do nothing if nowt to do! */ dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, n, buffer); - iReturn = ced_put_chars(ced, buffer, n); + ret = ced_put_chars(ced, buffer, n); } ced_allowi(ced); /* make sure we have input int */ mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index f1825a3331d9..0c915621fcf2 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -222,7 +222,7 @@ extern int ced_read_write_mem(struct ced_data *ced, bool read, /* in ced_ioc.c */ extern int ced_clear_area(struct ced_data *ced, int nArea); -extern int ced_send_string(struct ced_data *ced, const char __user *pData, unsigned int n); +extern int ced_send_string(struct ced_data *ced, const char __user *data, unsigned int n); extern int ced_send_char(struct ced_data *ced, char c); extern int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error); extern int ced_read_write_cancel(struct ced_data *ced); -- cgit From 531c79cc5e761a0be9084f3373a996e277f7c6d0 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:10 +0200 Subject: staging: ced1401: fix ced_send_char() Rename camel case arguments and locals in function ced_send_char() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 0c96202044b8..c84b83c8c1ae 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -139,13 +139,13 @@ int ced_send_string(struct ced_data *ced, const char __user *data, ****************************************************************************/ int ced_send_char(struct ced_data *ced, char c) { - int iReturn; + int ret; mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - iReturn = ced_put_chars(ced, &c, 1); + ret = ced_put_chars(ced, &c, 1); dev_dbg(&ced->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); ced_allowi(ced); /* Make sure char reads are running */ mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /*************************************************************************** -- cgit From c586fc5754b53c18e6b31e792e73c60c1e6623db Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:11 +0200 Subject: staging: ced1401: fix ced_get_state() Rename camel case arguments and locals in function ced_get_state() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index c84b83c8c1ae..8c847ffe6f63 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -176,37 +176,41 @@ int ced_send_char(struct ced_data *ced, char c) */ int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) { - int nGot; + int got; dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); *state = 0xFFFFFFFF; /* Start off with invalid state */ - nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), + got = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), GET_STATUS, (D_TO_H | VENDOR | DEVREQ), 0, 0, ced->stat_buf, sizeof(ced->stat_buf), HZ); - if (nGot != sizeof(ced->stat_buf)) { + if (got != sizeof(ced->stat_buf)) { dev_err(&ced->interface->dev, - "%s: FAILED, return code %d\n", __func__, nGot); - ced->current_state = U14ERR_TIME; /* Indicate that things are very wrong indeed */ + "%s: FAILED, return code %d\n", __func__, got); + /* Indicate that things are very wrong indeed */ + ced->current_state = U14ERR_TIME; *state = 0; /* Force status values to a known state */ *error = 0; } else { - int nDevice; + int device; dev_dbg(&ced->interface->dev, "%s: Success, state: 0x%x, 0x%x\n", __func__, ced->stat_buf[0], ced->stat_buf[1]); - *state = ced->stat_buf[0]; /* Return the state values to the calling code */ + /* Return the state values to the calling code */ + *state = ced->stat_buf[0]; + *error = ced->stat_buf[1]; - nDevice = ced->udev->descriptor.bcdDevice >> 8; /* 1401 type code value */ - switch (nDevice) { /* so we can clean up current state */ + /* 1401 type code value */ + device = ced->udev->descriptor.bcdDevice >> 8; + switch (device) { /* so we can clean up current state */ case 0: ced->current_state = U14ERR_U1401; break; - default: /* allow lots of device codes for future 1401s */ - if ((nDevice >= 1) && (nDevice <= 23)) - ced->current_state = (short)(nDevice + 6); + default: /* allow lots of device codes for future 1401s */ + if ((device >= 1) && (device <= 23)) + ced->current_state = (short)(device + 6); else ced->current_state = U14ERR_ILL; break; -- cgit From dbbb6ab117472b1f0779664c5e8f2cf4323ce2ce Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:12 +0200 Subject: staging: ced1401: fix ced_in_self_test() Rename camel case arguments and locals in function ced_in_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 8c847ffe6f63..528061bdbc87 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -276,18 +276,18 @@ int ced_read_write_cancel(struct ced_data *ced) } /*************************************************************************** -** ced_in_self_test - utility to check in self test. Return 1 for ST, 0 for not or -** a -ve error code if we failed for some reason. +** ced_in_self_test - utility to check in self test. Return 1 for ST, 0 for not +** or a -ve error code if we failed for some reason. ***************************************************************************/ -static int ced_in_self_test(struct ced_data *ced, unsigned int *pState) +static int ced_in_self_test(struct ced_data *ced, unsigned int *stat) { unsigned int state, error; - int iReturn = ced_get_state(ced, &state, &error); /* see if in self-test */ - if (iReturn == U14ERR_NOERROR) /* if all still OK */ - iReturn = (state == (unsigned int)-1) || /* TX problem or... */ + int ret = ced_get_state(ced, &state, &error); /* see if in self-test */ + if (ret == U14ERR_NOERROR) /* if all still OK */ + ret = (state == (unsigned int)-1) || /* TX problem or... */ ((state & 0xff) == 0x80); /* ...self test */ - *pState = state; /* return actual state */ - return iReturn; + *stat = state; /* return actual state */ + return ret; } /*************************************************************************** -- cgit From 0c72376383c751c881f619ac6bd9aff074343073 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:13 +0200 Subject: staging: ced1401: fix ced_is_1401() Rename camel case arguments and locals in function ced_is_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 48 ++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 528061bdbc87..194aa188e137 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -310,45 +310,51 @@ static int ced_in_self_test(struct ced_data *ced, unsigned int *stat) ****************************************************************************/ static bool ced_is_1401(struct ced_data *ced) { - int iReturn; + int ret; dev_dbg(&ced->interface->dev, "%s\n", __func__); ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ ced_flush_in_buff(ced); /* Clear out input buffer & pipe */ ced_flush_out_buff(ced); /* Clear output buffer & pipe */ - /* The next call returns 0 if OK, but has returned 1 in the past, meaning that */ - /* usb_unlock_device() is needed... now it always is */ - iReturn = usb_lock_device_for_reset(ced->udev, ced->interface); - - /* release the io_mutex because if we don't, we will deadlock due to system */ - /* calls back into the driver. */ - mutex_unlock(&ced->io_mutex); /* locked, so we will not get system calls */ - if (iReturn >= 0) { /* if we failed */ - iReturn = usb_reset_device(ced->udev); /* try to do the reset */ - usb_unlock_device(ced->udev); /* undo the lock */ + /* The next call returns 0 if OK, but has returned 1 in the past, */ + /* meaning that usb_unlock_device() is needed... now it always is */ + ret = usb_lock_device_for_reset(ced->udev, ced->interface); + + /* release the io_mutex because if we don't, we will deadlock due to */ + /* system calls back into the driver. */ + mutex_unlock(&ced->io_mutex); /* locked, so we will not get */ + /* system calls */ + if (ret >= 0) { /* if we failed */ + ret = usb_reset_device(ced->udev); /* try to do the reset */ + usb_unlock_device(ced->udev); /* undo the lock */ } mutex_lock(&ced->io_mutex); /* hold stuff off while we wait */ ced->dma_flag = MODE_CHAR; /* Clear DMA mode flag regardless! */ - if (iReturn == 0) { /* if all is OK still */ + if (ret == 0) { /* if all is OK still */ unsigned int state; - iReturn = ced_in_self_test(ced, &state); /* see if likely in self test */ - if (iReturn > 0) { /* do we need to wait for self-test? */ - unsigned long ulTimeOut = jiffies + 30 * HZ; /* when to give up */ - while ((iReturn > 0) && time_before(jiffies, ulTimeOut)) { + ret = ced_in_self_test(ced, &state); /* see if likely in */ + /* self test */ + if (ret > 0) { /* do we need to wait for self-test? */ + /* when to give up */ + unsigned long timeout = jiffies + 30 * HZ; + while ((ret > 0) && time_before(jiffies, timeout)) { schedule(); /* let other stuff run */ - iReturn = ced_in_self_test(ced, &state); /* see if done yet */ + + /* see if done yet */ + ret = ced_in_self_test(ced, &state); } } - if (iReturn == 0) /* if all is OK... */ - iReturn = state == 0; /* then success is that the state is 0 */ + if (ret == 0) /* if all is OK... */ + /* then success is that the state is 0 */ + ret = state == 0; } else - iReturn = 0; /* we failed */ + ret = 0; /* we failed */ ced->force_reset = false; /* Clear forced reset flag now */ - return iReturn > 0; + return ret > 0; } /**************************************************************************** -- cgit From 75d149f781c9dfd391ad280769c7a11148d557a0 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:14 +0200 Subject: staging: ced1401: fix ced_quick_check() Rename camel case arguments and locals in function ced_quick_check() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 194aa188e137..350c7d64d239 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -366,50 +366,52 @@ static bool ced_is_1401(struct ced_data *ced) ** all is OK. ** ** If any of the above conditions are not met, or if the state or type of the -** 1401 has changed since the previous test, the full ced_is_1401 test is done, but -** only if bCanReset is also TRUE. +** 1401 has changed since the previous test, the full ced_is_1401 test is done, +** but only if can_reset is also TRUE. ** ** The return value is TRUE if a useable 1401 is found, FALSE if not */ -static bool ced_quick_check(struct ced_data *ced, bool bTestBuff, bool bCanReset) +static bool ced_quick_check(struct ced_data *ced, bool test_buff, + bool can_reset) { - bool bRet = false; /* assume it will fail and we will reset */ - bool bShortTest; + bool ret = false; /* assume it will fail and we will reset */ + bool short_test; - bShortTest = ((ced->dma_flag == MODE_CHAR) && /* no DMA running */ - (!ced->force_reset) && /* Not had a real reset forced */ - (ced->current_state >= U14ERR_STD)); /* No 1401 errors stored */ + short_test = ((ced->dma_flag == MODE_CHAR) && /* no DMA running */ + (!ced->force_reset) && /* Not had a real reset forced */ + (ced->current_state >= U14ERR_STD)); /* No 1401 errors stored */ dev_dbg(&ced->interface->dev, "%s: DMAFlag:%d, state:%d, force:%d, testBuff:%d, short:%d\n", __func__, ced->dma_flag, ced->current_state, ced->force_reset, - bTestBuff, bShortTest); + test_buff, short_test); - if ((bTestBuff) && /* Buffer check requested, and... */ + if ((test_buff) && /* Buffer check requested, and... */ (ced->num_input || ced->num_output)) { /* ...characters were in the buffer? */ - bShortTest = false; /* Then do the full test */ + short_test = false; /* Then do the full test */ dev_dbg(&ced->interface->dev, "%s: will reset as buffers not empty\n", __func__); } - if (bShortTest || !bCanReset) { /* Still OK to try the short test? */ + if (short_test || !can_reset) { /* Still OK to try the short test? */ /* Always test if no reset - we want state update */ unsigned int state, error; dev_dbg(&ced->interface->dev, "%s: ced_get_state\n", __func__); if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ if ((state & 0xFF) == 0) /* If call worked, check the status value */ - bRet = true; /* If that was zero, all is OK, no reset needed */ + ret = true; /* If that was zero, all is OK, */ + /* no reset needed */ } } - if (!bRet && bCanReset) { /* If all not OK, then */ + if (!ret && can_reset) { /* If all not OK, then */ dev_info(&ced->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", - __func__, bShortTest, ced->current_state, bTestBuff, + __func__, short_test, ced->current_state, test_buff, ced->force_reset); - bRet = ced_is_1401(ced); /* do full test */ + ret = ced_is_1401(ced); /* do full test */ } - return bRet; + return ret; } /**************************************************************************** -- cgit From 673b2ead7aa9ea043d1fdb9d204191fc6733770b Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:15 +0200 Subject: staging: ced1401: fix ced_get_char() Rename camel case arguments and locals in function ced_get_char() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 350c7d64d239..9a19c84704ad 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -436,7 +436,7 @@ int ced_reset(struct ced_data *ced) ****************************************************************************/ int ced_get_char(struct ced_data *ced) { - int iReturn = U14ERR_NOIN; /* assume we will get nothing */ + int ret = U14ERR_NOIN; /* assume we will get nothing */ mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ dev_dbg(&ced->interface->dev, "%s\n", __func__); @@ -446,18 +446,18 @@ int ced_get_char(struct ced_data *ced) spin_lock_irq(&ced->char_in_lock); if (ced->num_input > 0) { /* worth looking */ - iReturn = ced->input_buffer[ced->in_buff_get++]; + ret = ced->input_buffer[ced->in_buff_get++]; if (ced->in_buff_get >= INBUF_SZ) ced->in_buff_get = 0; ced->num_input--; } else - iReturn = U14ERR_NOIN; /* no input data to read */ + ret = U14ERR_NOIN; /* no input data to read */ spin_unlock_irq(&ced->char_in_lock); ced_allowi(ced); /* Make sure char reads are running */ mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return iReturn; + return ret; } /**************************************************************************** -- cgit From d8b622b3aa2d164d954f4679d61fbc6a42790a5b Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:16 +0200 Subject: staging: ced1401: fix ced_get_string() Rename camel case arguments and locals in function ced_get_string() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 58 +++++++++++++++++++-------------------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 9a19c84704ad..28697c05175c 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -471,10 +471,10 @@ int ced_get_char(struct ced_data *ced) ** returns the count of characters (including the terminator, or 0 if none ** or a negative error code. ****************************************************************************/ -int ced_get_string(struct ced_data *ced, char __user *pUser, int n) +int ced_get_string(struct ced_data *ced, char __user *user, int n) { - int nAvailable; /* character in the buffer */ - int iReturn = U14ERR_NOIN; + int available; /* character in the buffer */ + int ret = U14ERR_NOIN; if (n <= 0) return -ENOMEM; @@ -483,49 +483,49 @@ int ced_get_string(struct ced_data *ced, char __user *pUser, int n) ced_send_chars(ced); /* and send any buffered chars */ spin_lock_irq(&ced->char_in_lock); - nAvailable = ced->num_input; /* characters available now */ - if (nAvailable > n) /* read max of space in pUser... */ - nAvailable = n; /* ...or input characters */ - - if (nAvailable > 0) { /* worth looking? */ - char buffer[INBUF_SZ + 1]; /* space for a linear copy of data */ - int nGot = 0; - int nCopyToUser; /* number to copy to user */ - char cData; + available = ced->num_input; /* characters available now */ + if (available > n) /* read max of space in user... */ + available = n; /* ...or input characters */ + + if (available > 0) { /* worth looking? */ + char buffer[INBUF_SZ + 1]; /* space for a linear copy of data */ + int got = 0; + int n_copy_to_user; /* number to copy to user */ + char data; do { - cData = ced->input_buffer[ced->in_buff_get++]; - if (cData == CR_CHAR) /* replace CR with zero */ - cData = (char)0; + data = ced->input_buffer[ced->in_buff_get++]; + if (data == CR_CHAR) /* replace CR with zero */ + data = (char)0; if (ced->in_buff_get >= INBUF_SZ) - ced->in_buff_get = 0; /* wrap buffer pointer */ + ced->in_buff_get = 0; /* wrap buffer pointer */ - buffer[nGot++] = cData; /* save the output */ - } while ((nGot < nAvailable) && cData); + buffer[got++] = data; /* save the output */ + } while ((got < available) && data); - nCopyToUser = nGot; /* what to copy... */ - if (cData) { /* do we need null */ - buffer[nGot] = (char)0; /* make it tidy */ - if (nGot < n) /* if space in user buffer... */ - ++nCopyToUser; /* ...copy the 0 as well. */ + n_copy_to_user = got; /* what to copy... */ + if (data) { /* do we need null */ + buffer[got] = (char)0; /* make it tidy */ + if (got < n) /* if space in user buffer... */ + ++n_copy_to_user; /* ...copy the 0 as well. */ } - ced->num_input -= nGot; + ced->num_input -= got; spin_unlock_irq(&ced->char_in_lock); dev_dbg(&ced->interface->dev, "%s: read %d characters >%s<\n", - __func__, nGot, buffer); - if (copy_to_user(pUser, buffer, nCopyToUser)) - iReturn = -EFAULT; + __func__, got, buffer); + if (copy_to_user(user, buffer, n_copy_to_user)) + ret = -EFAULT; else - iReturn = nGot; /* report characters read */ + ret = got; /* report characters read */ } else spin_unlock_irq(&ced->char_in_lock); ced_allowi(ced); /* Make sure char reads are running */ mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return iReturn; + return ret; } /******************************************************************************* diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 0c915621fcf2..fc650c522091 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -228,7 +228,7 @@ extern int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error); extern int ced_read_write_cancel(struct ced_data *ced); extern int ced_reset(struct ced_data *ced); extern int ced_get_char(struct ced_data *ced); -extern int ced_get_string(struct ced_data *ced, char __user *pUser, int n); +extern int ced_get_string(struct ced_data *ced, char __user *user, int n); extern int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *pTD); extern int ced_unset_transfer(struct ced_data *ced, int nArea); extern int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE); -- cgit From e62221f95e828ee90da811d402af25f2f03b4680 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:17 +0200 Subject: staging: ced1401: fix ced_stat_1401() Rename camel case arguments and locals in function ced_stat_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 28697c05175c..414056f5d9bd 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -533,13 +533,13 @@ int ced_get_string(struct ced_data *ced, char __user *user, int n) *******************************************************************************/ int ced_stat_1401(struct ced_data *ced) { - int iReturn; + int ret; mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_allowi(ced); /* make sure we allow pending chars */ ced_send_chars(ced); /* in both directions */ - iReturn = ced->num_input; /* no lock as single read */ + ret = ced->num_input; /* no lock as single read */ mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return iReturn; + return ret; } /**************************************************************************** -- cgit From 7692320c08a2f4ea255a2ab9cff66d7786f2a76d Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:18 +0200 Subject: staging: ced1401: fix ced_line_count() Rename camel case arguments and locals in function ced_line_count() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 414056f5d9bd..d7645c4d5cce 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -551,7 +551,7 @@ int ced_stat_1401(struct ced_data *ced) ****************************************************************************/ int ced_line_count(struct ced_data *ced) { - int iReturn = 0; /* will be count of line ends */ + int ret = 0; /* will be count of line ends */ mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_allowi(ced); /* Make sure char reads are running */ @@ -559,21 +559,23 @@ int ced_line_count(struct ced_data *ced) spin_lock_irq(&ced->char_in_lock); /* Get protection */ if (ced->num_input > 0) { /* worth looking? */ - unsigned int dwIndex = ced->in_buff_get; /* start at first available */ - unsigned int dwEnd = ced->in_buff_put; /* Position for search end */ + /* start at first available */ + unsigned int index = ced->in_buff_get; + /* Position for search end */ + unsigned int end = ced->in_buff_put; do { - if (ced->input_buffer[dwIndex++] == CR_CHAR) - ++iReturn; /* inc count if CR */ + if (ced->input_buffer[index++] == CR_CHAR) + ++ret; /* inc count if CR */ - if (dwIndex >= INBUF_SZ) /* see if we fall off buff */ - dwIndex = 0; - } while (dwIndex != dwEnd); /* go to last available */ + if (index >= INBUF_SZ) /* see if we fall off buff */ + index = 0; + } while (index != end); /* go to last available */ } spin_unlock_irq(&ced->char_in_lock); - dev_dbg(&ced->interface->dev, "%s: returned %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s: returned %d\n", __func__, ret); mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return iReturn; + return ret; } /**************************************************************************** -- cgit From 347ee20b4081e658ff888872e3189ac0ba9d2edd Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:19 +0200 Subject: staging: ced1401: fix ced_get_out_buf_space() Rename camel case arguments and locals in function ced_get_out_buf_space() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index d7645c4d5cce..3f8bf6dd7070 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -585,13 +585,19 @@ int ced_line_count(struct ced_data *ced) *****************************************************************************/ int ced_get_out_buf_space(struct ced_data *ced) { - int iReturn; + int ret; + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ + ced_send_chars(ced); /* send any buffered chars */ - iReturn = (int)(OUTBUF_SZ - ced->num_output); /* no lock needed for single read */ - dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); + + /* no lock needed for single read */ + ret = (int)(OUTBUF_SZ - ced->num_output); + + dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, ret); + mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return iReturn; + return ret; } /**************************************************************************** -- cgit From 0c402b9f2fc40b2d9ce804292961d1e43b616413 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:02:20 +0200 Subject: staging: ced1401: fix ced_clear_area() Rename camel case arguments and locals in function ced_clear_area() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 90 ++++++++++++++++++++++----------------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 51 insertions(+), 41 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 3f8bf6dd7070..9c629e242be9 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -607,75 +607,85 @@ int ced_get_out_buf_space(struct ced_data *ced) ** Clears up a transfer area. This is always called in the context of a user ** request, never from a call-back. ****************************************************************************/ -int ced_clear_area(struct ced_data *ced, int nArea) +int ced_clear_area(struct ced_data *ced, int area) { - int iReturn = U14ERR_NOERROR; + int ret = U14ERR_NOERROR; - if ((nArea < 0) || (nArea >= MAX_TRANSAREAS)) { - iReturn = U14ERR_BADAREA; + if ((area < 0) || (area >= MAX_TRANSAREAS)) { + ret = U14ERR_BADAREA; dev_err(&ced->interface->dev, "%s: Attempt to clear area %d\n", - __func__, nArea); + __func__, area); } else { /* to save typing */ - struct transarea *pTA = &ced->trans_def[nArea]; - if (!pTA->used) /* if not used... */ - iReturn = U14ERR_NOTSET; /* ...nothing to be done */ + struct transarea *ta = &ced->trans_def[area]; + if (!ta->used) /* if not used... */ + ret = U14ERR_NOTSET; /* ...nothing to be done */ else { - /* We must save the memory we return as we shouldn't mess with memory while */ - /* holding a spin lock. */ - struct page **pPages = NULL; /*save page address list*/ - int nPages = 0; /* and number of pages */ + /* We must save the memory we return as we shouldn't */ + /* mess with memory while holding a spin lock. */ + struct page **pages = NULL; /*save page address list*/ + int n_pages = 0; /* and number of pages */ int np; dev_dbg(&ced->interface->dev, "%s: area %d\n", - __func__, nArea); + __func__, area); spin_lock_irq(&ced->staged_lock); - if ((ced->staged_id == nArea) + if ((ced->staged_id == area) && (ced->dma_flag > MODE_CHAR)) { - iReturn = U14ERR_UNLOCKFAIL; /* cannot delete as in use */ + /* cannot delete as in use */ + ret = U14ERR_UNLOCKFAIL; dev_err(&ced->interface->dev, "%s: call on area %d while active\n", - __func__, nArea); + __func__, area); } else { - pPages = pTA->pages; /* save page address list */ - nPages = pTA->n_pages; /* and page count */ - if (pTA->event_sz) /* if events flagging in use */ - wake_up_interruptible(&pTA->event); /* release anything that was waiting */ + pages = ta->pages; /* save page address list */ + n_pages = ta->n_pages; /* and page count */ + if (ta->event_sz)/* if events flagging in use */ + /* release anything that was waiting */ + wake_up_interruptible(&ta->event); if (ced->xfer_waiting - && (ced->dma_info.ident == nArea)) - ced->xfer_waiting = false; /* Cannot have pending xfer if area cleared */ - - /* Clean out the struct transarea except for the wait queue, which is at the end */ - /* This sets used to false and event_sz to 0 to say area not used and no events. */ - memset(pTA, 0, + && (ced->dma_info.ident == area)) + /* Cannot have pending xfer if */ + /* area cleared */ + ced->xfer_waiting = false; + + /* Clean out the struct transarea except for */ + /* the wait queue, which is at the end. This */ + /* sets used to false and event_sz to 0 to */ + /* say area not used and no events. */ + memset(ta, 0, sizeof(struct transarea) - sizeof(wait_queue_head_t)); } spin_unlock_irq(&ced->staged_lock); - if (pPages) { /* if we decided to release the memory */ - /* Now we must undo the pinning down of the pages. We will assume the worst and mark */ - /* all the pages as dirty. Don't be tempted to move this up above as you must not be */ - /* holding a spin lock to do this stuff as it is not atomic. */ - dev_dbg(&ced->interface->dev, "%s: nPages=%d\n", - __func__, nPages); - - for (np = 0; np < nPages; ++np) { - if (pPages[np]) { - SetPageDirty(pPages[np]); - page_cache_release(pPages[np]); + if (pages) { /* if we decided to release the memory */ + /* Now we must undo the pinning down of the */ + /* pages. We will assume the worst and mark */ + /* all the pages as dirty. Don't be tempted */ + /* to move this up above as you must not be */ + /* holding a spin lock to do this stuff as */ + /* it is not atomic. */ + dev_dbg(&ced->interface->dev, + "%s: n_pages=%d\n", + __func__, n_pages); + + for (np = 0; np < n_pages; ++np) { + if (pages[np]) { + SetPageDirty(pages[np]); + page_cache_release(pages[np]); } } - kfree(pPages); + kfree(pages); dev_dbg(&ced->interface->dev, - "%s: kfree(pPages) done\n", __func__); + "%s: kfree(pages) done\n", __func__); } } } - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index fc650c522091..a5fc387c3820 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -221,7 +221,7 @@ extern int ced_read_write_mem(struct ced_data *ced, bool read, unsigned int len); /* in ced_ioc.c */ -extern int ced_clear_area(struct ced_data *ced, int nArea); +extern int ced_clear_area(struct ced_data *ced, int area); extern int ced_send_string(struct ced_data *ced, const char __user *data, unsigned int n); extern int ced_send_char(struct ced_data *ced, char c); extern int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error); -- cgit From 0c68a74d4b7d09edd6ee2b525bc0205b72e8b96d Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:53 +0200 Subject: staging: ced1401: fix ced_set_area() Rename camel case arguments and locals in function ced_set_area() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 109 ++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 52 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 9c629e242be9..4609cb4b3017 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -694,73 +694,78 @@ int ced_clear_area(struct ced_data *ced, int area) ** Sets up a transfer area - the functional part. Called by both ** ced_set_transfer and ced_set_circular. ****************************************************************************/ -static int ced_set_area(struct ced_data *ced, int nArea, char __user *puBuf, - unsigned int dwLength, bool bCircular, bool bCircToHost) +static int ced_set_area(struct ced_data *ced, int area, char __user *buf, + unsigned int length, bool circular, bool circ_to_host) { - /* Start by working out the page aligned start of the area and the size */ - /* of the area in pages, allowing for the start not being aligned and the */ - /* end needing to be rounded up to a page boundary. */ - unsigned long ulStart = ((unsigned long)puBuf) & PAGE_MASK; - unsigned int ulOffset = ((unsigned long)puBuf) & (PAGE_SIZE - 1); - int len = (dwLength + ulOffset + PAGE_SIZE - 1) >> PAGE_SHIFT; - - struct transarea *pTA = &ced->trans_def[nArea]; /* to save typing */ - struct page **pPages = NULL; /* space for page tables */ - int nPages = 0; /* and number of pages */ - - int iReturn = ced_clear_area(ced, nArea); /* see if OK to use this area */ - if ((iReturn != U14ERR_NOTSET) && /* if not area unused and... */ - (iReturn != U14ERR_NOERROR)) /* ...not all OK, then... */ - return iReturn; /* ...we cannot use this area */ - - if (!access_ok(VERIFY_WRITE, puBuf, dwLength)) /* if we cannot access the memory... */ + /* Start by working out the page aligned start of the area and the */ + /* size of the area in pages, allowing for the start not being */ + /* aligned and the end needing to be rounded up to a page boundary. */ + unsigned long start = ((unsigned long)buf) & PAGE_MASK; + unsigned int offset = ((unsigned long)buf) & (PAGE_SIZE - 1); + int len = (length + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; + + struct transarea *ta = &ced->trans_def[area]; /* to save typing */ + struct page **pages = NULL; /* space for page tables */ + int n_pages = 0; /* and number of pages */ + + int ret = ced_clear_area(ced, area); /* see if OK to use this area */ + if ((ret != U14ERR_NOTSET) && /* if not area unused and... */ + (ret != U14ERR_NOERROR)) /* ...not all OK, then... */ + return ret; /* ...we cannot use this area */ + + /* if we cannot access the memory... */ + if (!access_ok(VERIFY_WRITE, buf, length)) return -EFAULT; /* ...then we are done */ - /* Now allocate space to hold the page pointer and virtual address pointer tables */ - pPages = kmalloc(len * sizeof(struct page *), GFP_KERNEL); - if (!pPages) { - iReturn = U14ERR_NOMEMORY; + /* Now allocate space to hold the page pointer and */ + /* virtual address pointer tables */ + pages = kmalloc(len * sizeof(struct page *), GFP_KERNEL); + if (!pages) { + ret = U14ERR_NOMEMORY; goto error; } dev_dbg(&ced->interface->dev, "%s: %p, length=%06x, circular %d\n", - __func__, puBuf, dwLength, bCircular); - - /* To pin down user pages we must first acquire the mapping semaphore. */ - nPages = get_user_pages_fast(ulStart, len, 1, pPages); - dev_dbg(&ced->interface->dev, "%s: nPages = %d\n", __func__, nPages); - - if (nPages > 0) { /* if we succeeded */ - /* If you are tempted to use page_address (form LDD3), forget it. You MUST use */ - /* kmap() or kmap_atomic() to get a virtual address. page_address will give you */ - /* (null) or at least it does in this context with an x86 machine. */ + __func__, buf, length, circular); + + /* To pin down user pages we must first */ + /* acquire the mapping semaphore. */ + n_pages = get_user_pages_fast(start, len, 1, pages); + dev_dbg(&ced->interface->dev, "%s: n_pages = %d\n", __func__, n_pages); + + if (n_pages > 0) { /* if we succeeded */ + /* If you are tempted to use page_address (form LDD3), forget */ + /* it. You MUST use kmap() or kmap_atomic() to get a virtual */ + /* address. page_address will give you (null) or at least it */ + /* does in this context with an x86 machine. */ spin_lock_irq(&ced->staged_lock); - pTA->buff = puBuf; /* keep start of region (user address) */ - pTA->base_offset = ulOffset; /* save offset in first page to start of xfer */ - pTA->length = dwLength; /* Size if the region in bytes */ - pTA->pages = pPages; /* list of pages that are used by buffer */ - pTA->n_pages = nPages; /* number of pages */ - - pTA->circular = bCircular; - pTA->circ_to_host = bCircToHost; - - pTA->blocks[0].offset = 0; - pTA->blocks[0].size = 0; - pTA->blocks[1].offset = 0; - pTA->blocks[1].size = 0; - pTA->used = true; /* This is now a used block */ + ta->buff = buf; /* keep start of region (user address) */ + ta->base_offset = offset; /* save offset in first page */ + /* to start of xfer */ + ta->length = length; /* Size if the region in bytes */ + ta->pages = pages; /* list of pages that are used by buffer */ + ta->n_pages = n_pages; /* number of pages */ + + ta->circular = circular; + ta->circ_to_host = circ_to_host; + + ta->blocks[0].offset = 0; + ta->blocks[0].size = 0; + ta->blocks[1].offset = 0; + ta->blocks[1].size = 0; + ta->used = true; /* This is now a used block */ spin_unlock_irq(&ced->staged_lock); - iReturn = U14ERR_NOERROR; /* say all was well */ + ret = U14ERR_NOERROR; /* say all was well */ } else { - iReturn = U14ERR_LOCKFAIL; + ret = U14ERR_LOCKFAIL; goto error; } - return iReturn; + return ret; error: - kfree(pPages); - return iReturn; + kfree(pages); + return ret; } /**************************************************************************** -- cgit From 2932f3aed1da8bb00b16050b9c1fa8a9f14e34fc Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:54 +0200 Subject: staging: ced1401: fix ced_set_transfer() Rename camel case arguments and locals in function ced_set_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 19 +++++++++++-------- drivers/staging/ced1401/usb1401.h | 3 ++- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 4609cb4b3017..bba034cce7d8 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -775,26 +775,29 @@ error: ** unset it. Unsetting will fail if the area is booked, and a transfer to that ** area is in progress. Otherwise, we will release the area and re-assign it. ****************************************************************************/ -int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *pTD) +int ced_set_transfer(struct ced_data *ced, + struct transfer_area_desc __user *utd) { - int iReturn; + int ret; struct transfer_area_desc td; - if (copy_from_user(&td, pTD, sizeof(td))) + if (copy_from_user(&td, utd, sizeof(td))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", __func__, td.wAreaNum, td.dwLength); - /* The strange cast is done so that we don't get warnings in 32-bit linux about the size of the */ - /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ - /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ - iReturn = + /* The strange cast is done so that we don't get warnings in 32-bit */ + /* linux about the size of the pointer. The pointer is always passed */ + /* as a 64-bit object so that we don't have problems using a 32-bit */ + /* program on a 64-bit system. unsigned long is 64-bits on a 64-bit */ + /* system. */ + ret = ced_set_area(ced, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, false, false); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index a5fc387c3820..c8cb2c545288 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -229,7 +229,8 @@ extern int ced_read_write_cancel(struct ced_data *ced); extern int ced_reset(struct ced_data *ced); extern int ced_get_char(struct ced_data *ced); extern int ced_get_string(struct ced_data *ced, char __user *user, int n); -extern int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *pTD); +extern int ced_set_transfer(struct ced_data *ced, + struct transfer_area_desc __user *utd); extern int ced_unset_transfer(struct ced_data *ced, int nArea); extern int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE); extern int ced_stat_1401(struct ced_data *ced); -- cgit From 5e5ca7dc462ff4fe9fe320b146f794335a825c03 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:55 +0200 Subject: staging: ced1401: fix ced_unset_transfer() Rename camel case arguments and locals in function ced_unset_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 +++++----- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index bba034cce7d8..f632d2f07723 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -801,16 +801,16 @@ int ced_set_transfer(struct ced_data *ced, } /**************************************************************************** -** UnSetTransfer +** ced_unset_transfer ** Erases a transfer area record ****************************************************************************/ -int ced_unset_transfer(struct ced_data *ced, int nArea) +int ced_unset_transfer(struct ced_data *ced, int area) { - int iReturn; + int ret; mutex_lock(&ced->io_mutex); - iReturn = ced_clear_area(ced, nArea); + ret = ced_clear_area(ced, area); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c8cb2c545288..2e88db8b6794 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -231,7 +231,7 @@ extern int ced_get_char(struct ced_data *ced); extern int ced_get_string(struct ced_data *ced, char __user *user, int n); extern int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *utd); -extern int ced_unset_transfer(struct ced_data *ced, int nArea); +extern int ced_unset_transfer(struct ced_data *ced, int area); extern int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE); extern int ced_stat_1401(struct ced_data *ced); extern int ced_line_count(struct ced_data *ced); -- cgit From e1b3ca658d3bae78b96f2764326772ada78d6211 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:56 +0200 Subject: staging: ced1401: fix ced_set_event() Rename camel case arguments and locals in function ced_set_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 33 ++++++++++++++++++++------------- drivers/staging/ced1401/usb1401.h | 3 ++- 2 files changed, 22 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index f632d2f07723..f00aff6d3818 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -821,33 +821,40 @@ int ced_unset_transfer(struct ced_data *ced, int area) ** pretend that whatever the user asked for was achieved, so we return 1 if ** try to create one, and 0 if they ask to remove (assuming all else was OK). ****************************************************************************/ -int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE) +int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) { - int iReturn = U14ERR_NOERROR; + int ret = U14ERR_NOERROR; struct transfer_event te; /* get a local copy of the data */ - if (copy_from_user(&te, pTE, sizeof(te))) + if (copy_from_user(&te, ute, sizeof(te))) return -EFAULT; if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ return U14ERR_BADAREA; else { - struct transarea *pTA = &ced->trans_def[te.wAreaNum]; - mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ + struct transarea *ta = &ced->trans_def[te.wAreaNum]; + + /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); spin_lock_irq(&ced->staged_lock); - if (pTA->used) { /* area must be in use */ - pTA->event_st = te.dwStart; /* set area regions */ - pTA->event_sz = te.dwLength; /* set size (0 cancels it) */ - pTA->event_to_host = te.wFlags & 1; /* set the direction */ - pTA->wake_up = 0; /* zero the wake up count */ + + if (ta->used) { /* area must be in use */ + ta->event_st = te.dwStart; /* set area regions */ + + /* set size (0 cancels it) */ + ta->event_sz = te.dwLength; + + /* set the direction */ + ta->event_to_host = te.wFlags & 1; + ta->wake_up = 0; /* zero the wake up count */ } else - iReturn = U14ERR_NOTSET; + ret = U14ERR_NOTSET; spin_unlock_irq(&ced->staged_lock); mutex_unlock(&ced->io_mutex); } - return iReturn == - U14ERR_NOERROR ? (te.iSetEvent ? 1 : U14ERR_NOERROR) : iReturn; + return ret == + U14ERR_NOERROR ? (te.iSetEvent ? 1 : U14ERR_NOERROR) : ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 2e88db8b6794..d18755b2390d 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -232,7 +232,8 @@ extern int ced_get_string(struct ced_data *ced, char __user *user, int n); extern int ced_set_transfer(struct ced_data *ced, struct transfer_area_desc __user *utd); extern int ced_unset_transfer(struct ced_data *ced, int area); -extern int ced_set_event(struct ced_data *ced, struct transfer_event __user *pTE); +extern int ced_set_event(struct ced_data *ced, + struct transfer_event __user *ute); extern int ced_stat_1401(struct ced_data *ced); extern int ced_line_count(struct ced_data *ced); extern int ced_get_out_buf_space(struct ced_data *ced); -- cgit From 3fe68ea0f6ca0411a634658eb18e3ce322b4dae1 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:57 +0200 Subject: staging: ced1401: fix ced_wait_event() Rename camel case arguments and locals in function ced_wait_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 58 +++++++++++++++++++++------------------ drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 33 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index f00aff6d3818..707f8fa68ce1 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -863,45 +863,51 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) ** of times that a block met the event condition since we last cleared it or ** 0 if timed out, or -ve error (bad area or not set, or signal). ****************************************************************************/ -int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut) +int ced_wait_event(struct ced_data *ced, int area, int time_out) { - int iReturn; - if ((unsigned)nArea >= MAX_TRANSAREAS) + int ret; + if ((unsigned)area >= MAX_TRANSAREAS) return U14ERR_BADAREA; else { - int iWait; - struct transarea *pTA = &ced->trans_def[nArea]; - msTimeOut = (msTimeOut * HZ + 999) / 1000; /* convert timeout to jiffies */ + int wait; + struct transarea *ta = &ced->trans_def[area]; - /* We cannot wait holding the mutex, but we check the flags while holding */ - /* it. This may well be pointless as another thread could get in between */ - /* releasing it and the wait call. However, this would have to clear the */ - /* iWakeUp flag. However, the !pTA-bUsed may help us in this case. */ - mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ - if (!pTA->used || !pTA->event_sz) /* check something to wait for... */ + /* convert timeout to jiffies */ + time_out = (time_out * HZ + 999) / 1000; + + /* We cannot wait holding the mutex, but we check the flags */ + /* while holding it. This may well be pointless as another */ + /* thread could get in between releasing it and the wait */ + /* call. However, this would have to clear the wake_up flag. */ + /* However, the !ta->used may help us in this case. */ + + /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); + if (!ta->used || !ta->event_sz) /* check something to */ + /* wait for... */ return U14ERR_NOTSET; /* ...else we do nothing */ mutex_unlock(&ced->io_mutex); - if (msTimeOut) - iWait = - wait_event_interruptible_timeout(pTA->event, - pTA->wake_up - || !pTA->used, - msTimeOut); + if (time_out) + wait = wait_event_interruptible_timeout(ta->event, + ta->wake_up || + !ta->used, + time_out); else - iWait = - wait_event_interruptible(pTA->event, pTA->wake_up - || !pTA->used); - if (iWait) - iReturn = -ERESTARTSYS; /* oops - we have had a SIGNAL */ + wait = wait_event_interruptible(ta->event, + ta->wake_up || + !ta->used); + + if (wait) + ret = -ERESTARTSYS; /* oops - we have had a SIGNAL */ else - iReturn = pTA->wake_up; /* else the wakeup count */ + ret = ta->wake_up; /* else the wakeup count */ spin_lock_irq(&ced->staged_lock); - pTA->wake_up = 0; /* clear the flag */ + ta->wake_up = 0; /* clear the flag */ spin_unlock_irq(&ced->staged_lock); } - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index d18755b2390d..ac4062bde410 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -253,6 +253,6 @@ extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); -extern int ced_wait_event(struct ced_data *ced, int nArea, int msTimeOut); extern int ced_test_event(struct ced_data *ced, int nArea); +extern int ced_wait_event(struct ced_data *ced, int area, int time_out); #endif -- cgit From 4a376719cec0709eba0ed819eba2df0ce88ea113 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:58 +0200 Subject: staging: ced1401: fix ced_test_event() Rename camel case arguments and locals in function ced_test_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 20 +++++++++++--------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 707f8fa68ce1..47ef5ddcb4ce 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -916,21 +916,23 @@ int ced_wait_event(struct ced_data *ced, int area, int time_out) ** number of times a block completed since the last call, or 0 if none or a ** negative error. ****************************************************************************/ -int ced_test_event(struct ced_data *ced, int nArea) +int ced_test_event(struct ced_data *ced, int area) { - int iReturn; - if ((unsigned)nArea >= MAX_TRANSAREAS) - iReturn = U14ERR_BADAREA; + int ret; + if ((unsigned)area >= MAX_TRANSAREAS) + ret = U14ERR_BADAREA; else { - struct transarea *pTA = &ced->trans_def[nArea]; - mutex_lock(&ced->io_mutex); /* make sure we have no competitor */ + struct transarea *ta = &ced->trans_def[area]; + + /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); spin_lock_irq(&ced->staged_lock); - iReturn = pTA->wake_up; /* get wakeup count since last call */ - pTA->wake_up = 0; /* clear the count */ + ret = ta->wake_up; /* get wakeup count since last call */ + ta->wake_up = 0; /* clear the count */ spin_unlock_irq(&ced->staged_lock); mutex_unlock(&ced->io_mutex); } - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index ac4062bde410..30dbe5bf9c8a 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -253,6 +253,6 @@ extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); -extern int ced_test_event(struct ced_data *ced, int nArea); extern int ced_wait_event(struct ced_data *ced, int area, int time_out); +extern int ced_test_event(struct ced_data *ced, int area); #endif -- cgit From b1b9286e29851128504cfb5be8c526706f979fab Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:03:59 +0200 Subject: staging: ced1401: fix ced_get_transfer() Rename camel case arguments and locals in function ced_get_transfer() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 18 ++++++++++-------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 47ef5ddcb4ce..80bc213f1604 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -939,17 +939,18 @@ int ced_test_event(struct ced_data *ced, int area) ** ced_get_transferInfo ** Puts the current state of the 1401 in a TGET_TX_BLOCK. *****************************************************************************/ -int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) +int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *utx) { - int iReturn = U14ERR_NOERROR; + int ret = U14ERR_NOERROR; unsigned int dwIdent; mutex_lock(&ced->io_mutex); dwIdent = ced->staged_id; /* area ident for last xfer */ if (dwIdent >= MAX_TRANSAREAS) - iReturn = U14ERR_BADAREA; + ret = U14ERR_BADAREA; else { - /* Return the best information we have - we don't have physical addresses */ + /* Return the best information we have - we */ + /* don't have physical addresses */ TGET_TX_BLOCK *tx; tx = kzalloc(sizeof(*tx), GFP_KERNEL); @@ -959,18 +960,19 @@ int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pTX) } tx->size = ced->trans_def[dwIdent].length; tx->linear = (long long)((long)ced->trans_def[dwIdent].buff); - tx->avail = GET_TX_MAXENTRIES; /* how many blocks we could return */ + /* how many blocks we could return */ + tx->avail = GET_TX_MAXENTRIES; tx->used = 1; /* number we actually return */ tx->entries[0].physical = (long long)(tx->linear + ced->staged_offset); tx->entries[0].size = tx->size; - if (copy_to_user(pTX, tx, sizeof(*tx))) - iReturn = -EFAULT; + if (copy_to_user(utx, tx, sizeof(*tx))) + ret = -EFAULT; kfree(tx); } mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 30dbe5bf9c8a..c5a4118454a2 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -237,7 +237,7 @@ extern int ced_set_event(struct ced_data *ced, extern int ced_stat_1401(struct ced_data *ced); extern int ced_line_count(struct ced_data *ced); extern int ced_get_out_buf_space(struct ced_data *ced); -extern int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *pGTB); +extern int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *utx); extern int ced_kill_io(struct ced_data *ced); extern int ced_state_of_1401(struct ced_data *ced); extern int ced_start_self_test(struct ced_data *ced); -- cgit From abfc7692f19f141ad57fd4a69b61c7596bdb4c39 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:00 +0200 Subject: staging: ced1401: fix ced_state_of_1401() Rename camel case arguments and locals in function ced_state_of_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 80bc213f1604..b37cf266a6db 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -997,16 +997,16 @@ int ced_kill_io(struct ced_data *ced) *****************************************************************************/ int ced_state_of_1401(struct ced_data *ced) { - int iReturn; + int ret; mutex_lock(&ced->io_mutex); - ced_quick_check(ced, false, false); /* get state up to date, no reset */ - iReturn = ced->current_state; + ced_quick_check(ced, false, false); /* get state up to date, no reset */ + ret = ced->current_state; mutex_unlock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, ret); - return iReturn; + return ret; } /**************************************************************************** -- cgit From 7fe89c52446b77aff923164ff3676aa9a6bf0201 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:01 +0200 Subject: staging: ced1401: fix ced_start_self_test() Rename camel case arguments and locals in function ced_start_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index b37cf266a6db..44b4c6e124a2 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1017,7 +1017,7 @@ int ced_state_of_1401(struct ced_data *ced) *****************************************************************************/ int ced_start_self_test(struct ced_data *ced) { - int nGot; + int got; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); @@ -1028,15 +1028,16 @@ int ced_start_self_test(struct ced_data *ced) /* ced_read_write_cancel(pDeviceObject); */ ced->dma_flag = MODE_CHAR; /* Clear DMA mode flags here */ - nGot = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), + got = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), DB_SELFTEST, (H_TO_D | VENDOR | DEVREQ), 0, 0, NULL, 0, HZ); /* allow 1 second timeout */ - ced->self_test_time = jiffies + HZ * 30; /* 30 seconds into the future */ + ced->self_test_time = jiffies + HZ * 30; /* 30 seconds into the */ + /* future */ mutex_unlock(&ced->io_mutex); - if (nGot < 0) - dev_err(&ced->interface->dev, "%s: err=%d\n", __func__, nGot); - return nGot < 0 ? U14ERR_FAIL : U14ERR_NOERROR; + if (got < 0) + dev_err(&ced->interface->dev, "%s: err=%d\n", __func__, got); + return got < 0 ? U14ERR_FAIL : U14ERR_NOERROR; } /**************************************************************************** -- cgit From d1047374bf9cb58c6d4c5b40e61c0a3090b41e1a Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:02 +0200 Subject: staging: ced1401: fix ced_check_self_test() Rename camel case arguments and locals in function ced_check_self_test() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 40 ++++++++++++++++++++------------------- drivers/staging/ced1401/usb1401.h | 3 ++- 2 files changed, 23 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 44b4c6e124a2..7e598e2d713f 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1045,31 +1045,31 @@ int ced_start_self_test(struct ced_data *ced) ** ** Check progress of a self-test cycle ****************************************************************************/ -int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) +int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst) { unsigned int state, error; - int iReturn; + int ret; TGET_SELFTEST gst; /* local work space */ memset(&gst, 0, sizeof(gst)); /* clear out the space (sets code 0) */ mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); - iReturn = ced_get_state(ced, &state, &error); - if (iReturn == U14ERR_NOERROR) /* Only accept zero if it happens twice */ - iReturn = ced_get_state(ced, &state, &error); + ret = ced_get_state(ced, &state, &error); + if (ret == U14ERR_NOERROR) /* Only accept zero if it happens twice */ + ret = ced_get_state(ced, &state, &error); - if (iReturn != U14ERR_NOERROR) { /* Self-test can cause comms errors */ + if (ret != U14ERR_NOERROR) { /* Self-test can cause comms errors */ /* so we assume still testing */ dev_err(&ced->interface->dev, "%s: ced_get_state=%d, assuming still testing\n", - __func__, iReturn); + __func__, ret); state = 0x80; /* Force still-testing, no error */ error = 0; - iReturn = U14ERR_NOERROR; + ret = U14ERR_NOERROR; } - if ((state == -1) && (error == -1)) { /* If ced_get_state had problems */ + if ((state == -1) && (error == -1)) {/* If ced_get_state had problems */ dev_err(&ced->interface->dev, "%s: ced_get_state failed, assuming still testing\n", __func__); @@ -1079,14 +1079,15 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) if ((state & 0xFF) == 0x80) { /* If we are still in self-test */ if (state & 0x00FF0000) { /* Have we got an error? */ - gst.code = (state & 0x00FF0000) >> 16; /* read the error code */ - gst.x = error & 0x0000FFFF; /* Error data X */ - gst.y = (error & 0xFFFF0000) >> 16; /* and data Y */ + /* read the error code */ + gst.code = (state & 0x00FF0000) >> 16; + gst.x = error & 0x0000FFFF; /* Error data X */ + gst.y = (error & 0xFFFF0000) >> 16; /* and data Y */ dev_dbg(&ced->interface->dev, "Self-test error code %d\n", gst.code); } else { /* No error, check for timeout */ - unsigned long ulNow = jiffies; /* get current time */ - if (time_after(ulNow, ced->self_test_time)) { + unsigned long now = jiffies; /* get current time */ + if (time_after(now, ced->self_test_time)) { gst.code = -2; /* Flag the timeout */ dev_dbg(&ced->interface->dev, "Self-test timed-out\n"); @@ -1099,19 +1100,20 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST) dev_dbg(&ced->interface->dev, "Self-test done\n"); } - if (gst.code < 0) { /* If we have a problem or finished */ - /* If using the 2890 we should reset properly */ + if (gst.code < 0) { /* If we have a problem or finished */ + /* If using the 2890 we should reset properly */ if ((ced->n_pipes == 4) && (ced->type <= TYPEPOWER)) ced_is_1401(ced); /* Get 1401 reset and OK */ else - ced_quick_check(ced, true, true); /* Otherwise check without reset unless problems */ + /* Otherwise check without reset unless problems */ + ced_quick_check(ced, true, true); } mutex_unlock(&ced->io_mutex); - if (copy_to_user(pGST, &gst, sizeof(gst))) + if (copy_to_user(ugst, &gst, sizeof(gst))) return -EFAULT; - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c5a4118454a2..e1f1c54a9221 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -241,7 +241,8 @@ extern int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *utx); extern int ced_kill_io(struct ced_data *ced); extern int ced_state_of_1401(struct ced_data *ced); extern int ced_start_self_test(struct ced_data *ced); -extern int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *pGST); +extern int ced_check_self_test(struct ced_data *ced, + TGET_SELFTEST __user *ugst); extern int ced_type_of_1401(struct ced_data *ced); extern int ced_transfer_flags(struct ced_data *ced); extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB); -- cgit From 55da356b3d74c922ac46cdaf8fbfe67e2c37363d Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:03 +0200 Subject: staging: ced1401: fix ced_type_of_1401() Rename camel case arguments and locals in function ced_type_of_1401() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 7e598e2d713f..9ac275ccd31f 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1123,30 +1123,31 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst) ****************************************************************************/ int ced_type_of_1401(struct ced_data *ced) { - int iReturn = TYPEUNKNOWN; + int ret = TYPEUNKNOWN; + mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); switch (ced->type) { case TYPE1401: - iReturn = U14ERR_STD; + ret = U14ERR_STD; break; /* Handle these types directly */ case TYPEPLUS: - iReturn = U14ERR_PLUS; + ret = U14ERR_PLUS; break; case TYPEU1401: - iReturn = U14ERR_U1401; + ret = U14ERR_U1401; break; default: if ((ced->type >= TYPEPOWER) && (ced->type <= 25)) - iReturn = ced->type + 4; /* We can calculate types */ + ret = ced->type + 4; /* We can calculate types */ else /* for up-coming 1401 designs */ - iReturn = TYPEUNKNOWN; /* Don't know or not there */ + ret = TYPEUNKNOWN; /* Don't know or not there */ } - dev_dbg(&ced->interface->dev, "%s %d\n", __func__, iReturn); + dev_dbg(&ced->interface->dev, "%s %d\n", __func__, ret); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** -- cgit From bbe2bc768c218bfe46a50698d5829316e8ef19c5 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:04 +0200 Subject: staging: ced1401: fix ced_transfer_flags() Rename camel case arguments and locals in function ced_transfer_flags() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 9ac275ccd31f..0778cf04160a 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1157,15 +1157,17 @@ int ced_type_of_1401(struct ced_data *ced) ****************************************************************************/ int ced_transfer_flags(struct ced_data *ced) { - int iReturn = U14TF_MULTIA | U14TF_DIAG | /* we always have multiple DMA area */ - U14TF_NOTIFY | U14TF_CIRCTH; /* diagnostics, notify and circular */ + /* we always have multiple DMA area diagnostics, notify and circular */ + int ret = U14TF_MULTIA | U14TF_DIAG | + U14TF_NOTIFY | U14TF_CIRCTH; + dev_dbg(&ced->interface->dev, "%s\n", __func__); mutex_lock(&ced->io_mutex); if (ced->is_usb2) /* Set flag for USB2 if appropriate */ - iReturn |= U14TF_USB2; + ret |= U14TF_USB2; mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /*************************************************************************** -- cgit From 02f1d35cc475691106d6b06c4945fef75a59bd89 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:05 +0200 Subject: staging: ced1401: fix ced_dbg_cmd() Rename camel case arguments and locals in function ced_dbg_cmd() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 0778cf04160a..46cc29392e55 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1178,18 +1178,19 @@ int ced_transfer_flags(struct ced_data *ced) static int ced_dbg_cmd(struct ced_data *ced, unsigned char cmd, unsigned int data) { - int iReturn; + int ret; + dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); - iReturn = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), cmd, + ret = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), cmd, (H_TO_D | VENDOR | DEVREQ), (unsigned short)data, (unsigned short)(data >> 16), NULL, 0, HZ); /* allow 1 second timeout */ - if (iReturn < 0) + if (ret < 0) dev_err(&ced->interface->dev, "%s: fail code=%d\n", - __func__, iReturn); + __func__, ret); - return iReturn; + return ret; } /**************************************************************************** -- cgit From a81bd28664be1ea62978f314331296af612a1216 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:06 +0200 Subject: staging: ced1401: fix ced_dbg_peek/poke() Rename camel case arguments and locals in function ced_dbg_peek() and ced_dbg_poke() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 44 +++++++++++++++++++-------------------- drivers/staging/ced1401/usb1401.h | 4 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 46cc29392e55..adab1de869a6 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1198,27 +1198,27 @@ static int ced_dbg_cmd(struct ced_data *ced, unsigned char cmd, ** ** Execute the diagnostic peek operation. Uses address, width and repeats. ****************************************************************************/ -int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB) +int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb) { - int iReturn; + int ret; TDBGBLOCK db; - if (copy_from_user(&db, pDB, sizeof(db))) + if (copy_from_user(&db, udb, sizeof(db))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_PEEK, 0); + ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_PEEK, 0); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** @@ -1227,27 +1227,27 @@ int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB) ** Execute the diagnostic poke operation. Parameters are in the CSBLOCK struct ** in order address, size, repeats and value to poke. ****************************************************************************/ -int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *pDB) +int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb) { - int iReturn; + int ret; TDBGBLOCK db; - if (copy_from_user(&db, pDB, sizeof(db))) + if (copy_from_user(&db, udb, sizeof(db))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_POKE, db.iData); + ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_POKE, db.iData); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index e1f1c54a9221..2e3a1c6e22ca 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -245,8 +245,8 @@ extern int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst); extern int ced_type_of_1401(struct ced_data *ced); extern int ced_transfer_flags(struct ced_data *ced); -extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *pDB); -extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb); +extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB); extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *pDB); extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB); -- cgit From 3e064a1ffc4150b2aacd51932cfc04e6b8096783 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:07 +0200 Subject: staging: ced1401: fix ced_dbg_ramp_data/addr() Rename camel case arguments and locals in function ced_dbg_ramp_data() and ced_dbg_ramp_addr() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 56 +++++++++++++++++++-------------------- drivers/staging/ced1401/usb1401.h | 4 +-- 2 files changed, 30 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index adab1de869a6..8c7bfe25ea09 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1256,31 +1256,31 @@ int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb) ** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK struct ** in order address, default, enable mask, size and repeats. ****************************************************************************/ -int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb) { - int iReturn; + int ret; TDBGBLOCK db; - if (copy_from_user(&db, pDB, sizeof(db))) + if (copy_from_user(&db, udb, sizeof(db))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - iReturn = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_RAMPD, 0); + ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_RAMPD, 0); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** @@ -1288,29 +1288,29 @@ int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB) ** ** Execute the diagnostic ramp address operation ****************************************************************************/ -int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *pDB) +int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb) { - int iReturn; + int ret; TDBGBLOCK db; - if (copy_from_user(&db, pDB, sizeof(db))) + if (copy_from_user(&db, udb, sizeof(db))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); - iReturn = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (iReturn == U14ERR_NOERROR) - iReturn = ced_dbg_cmd(ced, DB_RAMPA, 0); + ret = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); + if (ret == U14ERR_NOERROR) + ret = ced_dbg_cmd(ced, DB_RAMPA, 0); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 2e3a1c6e22ca..77d861487e13 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -247,8 +247,8 @@ extern int ced_type_of_1401(struct ced_data *ced); extern int ced_transfer_flags(struct ced_data *ced); extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *pDB); -extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb); +extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB); extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); -- cgit From f1d513bbb9b0a6629a6b115b97348d0ef7395e4e Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:08 +0200 Subject: staging: ced1401: fix ced_dbg_get_data() Rename camel case arguments and locals in function ced_dbg_get_data() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 19 ++++++++++--------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 8c7bfe25ea09..682da273726f 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1318,31 +1318,32 @@ int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb) ** ** Retrieve the data resulting from the last debug Peek operation ****************************************************************************/ -int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB) +int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb) { - int iReturn; + int ret; TDBGBLOCK db; + memset(&db, 0, sizeof(db)); /* fill returned block with 0s */ mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); /* Read back the last peeked value from the 1401. */ - iReturn = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), + ret = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), DB_DATA, (D_TO_H | VENDOR | DEVREQ), 0, 0, &db.iData, sizeof(db.iData), HZ); - if (iReturn == sizeof(db.iData)) { - if (copy_to_user(pDB, &db, sizeof(db))) - iReturn = -EFAULT; + if (ret == sizeof(db.iData)) { + if (copy_to_user(udb, &db, sizeof(db))) + ret = -EFAULT; else - iReturn = U14ERR_NOERROR; + ret = U14ERR_NOERROR; } else dev_err(&ced->interface->dev, "%s: failed, code %d\n", - __func__, iReturn); + __func__, ret); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 77d861487e13..c04f3857e134 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -249,7 +249,7 @@ extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *pDB); +extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); -- cgit From 7bbddb60e70403d66615295d9c67c785fe205d2c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:09 +0200 Subject: staging: ced1401: fix ced_dbg_stop_loop() Rename camel case arguments and locals in function ced_dbg_stop_loop() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 682da273726f..3da24a612820 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1354,15 +1354,15 @@ int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb) ****************************************************************************/ int ced_dbg_stop_loop(struct ced_data *ced) { - int iReturn; + int ret; unsigned int uState, uErr; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); - iReturn = ced_get_state(ced, &uState, &uErr); + ret = ced_get_state(ced, &uState, &uErr); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** -- cgit From d9b57d9f2843a043b82e69cd3e6bddf39cff21db Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:10 +0200 Subject: staging: ced1401: fix ced_set_circular() Rename camel case arguments and locals in function ced_set_circular() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 25 ++++++++++++++----------- drivers/staging/ced1401/usb1401.h | 3 ++- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 3da24a612820..efc1db903a3a 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1373,29 +1373,32 @@ int ced_dbg_stop_loop(struct ced_data *ced) ** booked and a transfer to that area is in progress. Otherwise, we will ** release the area and re-assign it. ****************************************************************************/ -int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD) +int ced_set_circular(struct ced_data *ced, + struct transfer_area_desc __user *utd) { - int iReturn; - bool bToHost; + int ret; + bool to_host; struct transfer_area_desc td; - if (copy_from_user(&td, pTD, sizeof(td))) + if (copy_from_user(&td, utd, sizeof(td))) return -EFAULT; mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", __func__, td.wAreaNum, td.dwLength); - bToHost = td.eSize != 0; /* this is used as the tohost flag */ + to_host = td.eSize != 0; /* this is used as the tohost flag */ - /* The strange cast is done so that we don't get warnings in 32-bit linux about the size of the */ - /* pointer. The pointer is always passed as a 64-bit object so that we don't have problems using */ - /* a 32-bit program on a 64-bit system. unsigned long is 64-bits on a 64-bit system. */ - iReturn = + /* The strange cast is done so that we don't get warnings in 32-bit */ + /* linux about the size of the pointer. The pointer is always passed */ + /* as a 64-bit object so that we don't have problems using a 32-bit */ + /* program on a 64-bit system. unsigned long is 64-bits on a 64-bit */ + /* system. */ + ret = ced_set_area(ced, td.wAreaNum, (char __user *)((unsigned long)td.lpvBuff), td.dwLength, - true, bToHost); + true, to_host); mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index c04f3857e134..a0d19aa61127 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -251,7 +251,8 @@ extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_stop_loop(struct ced_data *ced); -extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *pTD); +extern int ced_set_circular(struct ced_data *ced, + struct transfer_area_desc __user *utd); extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); extern int ced_wait_event(struct ced_data *ced, int area, int time_out); -- cgit From 7b7f60205ef8202bb01f4e8149eda94dae831a5c Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:11 +0200 Subject: staging: ced1401: fix ced_get_circ_block() Rename camel case arguments and locals in function ced_get_circ_block() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 34 +++++++++++++++++----------------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index efc1db903a3a..73ec4bc9c041 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1406,49 +1406,49 @@ int ced_set_circular(struct ced_data *ced, ** ** Return the next available block of circularly-transferred data. ****************************************************************************/ -int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) +int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) { - int iReturn = U14ERR_NOERROR; - unsigned int nArea; + int ret = U14ERR_NOERROR; + unsigned int area; TCIRCBLOCK cb; dev_dbg(&ced->interface->dev, "%s\n", __func__); - if (copy_from_user(&cb, pCB, sizeof(cb))) + if (copy_from_user(&cb, ucb, sizeof(cb))) return -EFAULT; mutex_lock(&ced->io_mutex); - nArea = cb.nArea; /* Retrieve parameters first */ + area = cb.nArea; /* Retrieve parameters first */ cb.dwOffset = 0; /* set default result (nothing) */ cb.dwSize = 0; - if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ + if (area < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &ced->trans_def[nArea]; + struct transarea *ta = &ced->trans_def[area]; spin_lock_irq(&ced->staged_lock); /* Lock others out */ - if ((pArea->used) && (pArea->circular) && /* Must be circular area */ - (pArea->circ_to_host)) { /* For now at least must be to host */ - if (pArea->blocks[0].size > 0) { /* Got anything? */ - cb.dwOffset = pArea->blocks[0].offset; - cb.dwSize = pArea->blocks[0].size; + if ((ta->used) && (ta->circular) && /* Must be circular area */ + (ta->circ_to_host)) { /* For now at least must be to host */ + if (ta->blocks[0].size > 0) { /* Got anything? */ + cb.dwOffset = ta->blocks[0].offset; + cb.dwSize = ta->blocks[0].size; dev_dbg(&ced->interface->dev, "%s: return block 0: %d bytes at %d\n", __func__, cb.dwSize, cb.dwOffset); } } else - iReturn = U14ERR_NOTSET; + ret = U14ERR_NOTSET; spin_unlock_irq(&ced->staged_lock); } else - iReturn = U14ERR_BADAREA; + ret = U14ERR_BADAREA; - if (copy_to_user(pCB, &cb, sizeof(cb))) - iReturn = -EFAULT; + if (copy_to_user(ucb, &cb, sizeof(cb))) + ret = -EFAULT; mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } /**************************************************************************** diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index a0d19aa61127..2dd4d922bd72 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -253,7 +253,7 @@ extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb); extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *utd); -extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); +extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb); extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); extern int ced_wait_event(struct ced_data *ced, int area, int time_out); extern int ced_test_event(struct ced_data *ced, int area); -- cgit From f4a86b653be3dcdc204e67949e5fcd612ebbeff7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Thu, 10 Jul 2014 11:04:12 +0200 Subject: staging: ced1401: fix ced_free_circ_block() Rename camel case arguments and locals in function ced_free_circ_block() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 103 +++++++++++++++++++++----------------- drivers/staging/ced1401/usb1401.h | 2 +- 2 files changed, 58 insertions(+), 47 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 73ec4bc9c041..fb4e8a30b141 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -1456,79 +1456,90 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) ** ** Frees a block of circularly-transferred data and returns the next one. ****************************************************************************/ -int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) +int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) { - int iReturn = U14ERR_NOERROR; - unsigned int nArea, uStart, uSize; + int ret = U14ERR_NOERROR; + unsigned int area, start, size; TCIRCBLOCK cb; dev_dbg(&ced->interface->dev, "%s\n", __func__); - if (copy_from_user(&cb, pCB, sizeof(cb))) + if (copy_from_user(&cb, ucb, sizeof(cb))) return -EFAULT; mutex_lock(&ced->io_mutex); - nArea = cb.nArea; /* Retrieve parameters first */ - uStart = cb.dwOffset; - uSize = cb.dwSize; + area = cb.nArea; /* Retrieve parameters first */ + start = cb.dwOffset; + size = cb.dwSize; cb.dwOffset = 0; /* then set default result (nothing) */ cb.dwSize = 0; - if (nArea < MAX_TRANSAREAS) { /* The area number must be OK */ + if (area < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ - struct transarea *pArea = &ced->trans_def[nArea]; + struct transarea *ta = &ced->trans_def[area]; + spin_lock_irq(&ced->staged_lock); /* Lock others out */ - if ((pArea->used) && (pArea->circular) && /* Must be circular area */ - (pArea->circ_to_host)) { /* For now at least must be to host */ - bool bWaiting = false; - - if ((pArea->blocks[0].size >= uSize) && /* Got anything? */ - (pArea->blocks[0].offset == uStart)) { /* Must be legal data */ - pArea->blocks[0].size -= uSize; - pArea->blocks[0].offset += uSize; - if (pArea->blocks[0].size == 0) { /* Have we emptied this block? */ - if (pArea->blocks[1].size) { /* Is there a second block? */ - pArea->blocks[0] = pArea->blocks[1]; /* Copy down block 2 data */ - pArea->blocks[1].size = 0; /* and mark the second block as unused */ - pArea->blocks[1].offset = 0; + if ((ta->used) && (ta->circular) && /* Must be circular area */ + (ta->circ_to_host)) { /* For now at least must be to host */ + bool waiting = false; + + if ((ta->blocks[0].size >= size) && /* Got anything? */ + (ta->blocks[0].offset == start)) { /* Must be legal data */ + ta->blocks[0].size -= size; + ta->blocks[0].offset += size; + + /* Have we emptied this block? */ + if (ta->blocks[0].size == 0) { + /* Is there a second block? */ + if (ta->blocks[1].size) { + /* Copy down block 2 data */ + ta->blocks[0] = ta->blocks[1]; + /* and mark the second */ + /* block as unused */ + ta->blocks[1].size = 0; + ta->blocks[1].offset = 0; } else - pArea->blocks[0].offset = 0; + ta->blocks[0].offset = 0; } dev_dbg(&ced->interface->dev, - "%s: free %d bytes at %d, return %d bytes at %d, wait=%d\n", - __func__, uSize, uStart, - pArea->blocks[0].size, - pArea->blocks[0].offset, + "%s: free %d bytes at %d, " + "return %d bytes at %d, wait=%d\n", + __func__, size, start, + ta->blocks[0].size, + ta->blocks[0].offset, ced->xfer_waiting); - /* Return the next available block of memory as well */ - if (pArea->blocks[0].size > 0) { /* Got anything? */ + /* Return the next available block of */ + /* memory as well */ + if (ta->blocks[0].size > 0) {/* Got anything? */ cb.dwOffset = - pArea->blocks[0].offset; - cb.dwSize = pArea->blocks[0].size; + ta->blocks[0].offset; + cb.dwSize = ta->blocks[0].size; } - bWaiting = ced->xfer_waiting; - if (bWaiting && ced->staged_urb_pending) { + waiting = ced->xfer_waiting; + if (waiting && ced->staged_urb_pending) { dev_err(&ced->interface->dev, - "%s: ERROR: waiting xfer and staged Urb pending!\n", + "%s: ERROR: waiting xfer and " + "staged Urb pending!\n", __func__); - bWaiting = false; + waiting = false; } } else { dev_err(&ced->interface->dev, - "%s: ERROR: freeing %d bytes at %d, block 0 is %d bytes at %d\n", - __func__, uSize, uStart, - pArea->blocks[0].size, - pArea->blocks[0].offset); - iReturn = U14ERR_NOMEMORY; + "%s: ERROR: freeing %d bytes at %d, " + "block 0 is %d bytes at %d\n", + __func__, size, start, + ta->blocks[0].size, + ta->blocks[0].offset); + ret = U14ERR_NOMEMORY; } /* If we have one, kick off pending transfer */ - if (bWaiting) { /* Got a block xfer waiting? */ + if (waiting) { /* Got a block xfer waiting? */ int RWMStat = ced_read_write_mem(ced, !ced->dma_info.outward, @@ -1541,15 +1552,15 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB) __func__, RWMStat); } } else - iReturn = U14ERR_NOTSET; + ret = U14ERR_NOTSET; spin_unlock_irq(&ced->staged_lock); } else - iReturn = U14ERR_BADAREA; + ret = U14ERR_BADAREA; - if (copy_to_user(pCB, &cb, sizeof(cb))) - iReturn = -EFAULT; + if (copy_to_user(ucb, &cb, sizeof(cb))) + ret = -EFAULT; mutex_unlock(&ced->io_mutex); - return iReturn; + return ret; } diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 2dd4d922bd72..8e800c3db61e 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -254,7 +254,7 @@ extern int ced_dbg_stop_loop(struct ced_data *ced); extern int ced_set_circular(struct ced_data *ced, struct transfer_area_desc __user *utd); extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb); -extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *pCB); +extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb); extern int ced_wait_event(struct ced_data *ced, int area, int time_out); extern int ced_test_event(struct ced_data *ced, int area); #endif -- cgit From a3355a62673e2c4bd8617d2f07c8edee92a89b8d Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Thu, 10 Jul 2014 13:16:11 -0700 Subject: staging: r8821ae: avoid leaking format string This make sure a format string cannot leak into the work queue name nor the printk buffer. Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/btcoexist/halbtcoutsrc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/btcoexist/halbtcoutsrc.h b/drivers/staging/rtl8821ae/btcoexist/halbtcoutsrc.h index 787798e76217..fd233cc85a5b 100644 --- a/drivers/staging/rtl8821ae/btcoexist/halbtcoutsrc.h +++ b/drivers/staging/rtl8821ae/btcoexist/halbtcoutsrc.h @@ -88,7 +88,7 @@ extern u32 btc_dbg_type[]; #define CL_SPRINTF snprintf -#define CL_PRINTF printk +#define CL_PRINTF(buf) printk("%s", buf) #define BTC_PRINT(dbgtype, dbgflag, printstr, ...) \ do { \ -- cgit From 083b3638d33312cd73a8950ffebaee07a9e92ba9 Mon Sep 17 00:00:00 2001 From: Vincent Heuken Date: Thu, 10 Jul 2014 03:34:28 -0700 Subject: Staging: panel: fixed frivilous else statement warning Fixed one instance of the following checkpatch.pl warning in panel.c: WARNING: else is not generally useful after a break or return Signed-off-by: Vincent Heuken Signed-off-by: Greg Kroah-Hartman --- drivers/staging/panel/panel.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c index 4e9229363c36..6d1a32097d3c 100644 --- a/drivers/staging/panel/panel.c +++ b/drivers/staging/panel/panel.c @@ -1800,11 +1800,12 @@ static inline int input_state_high(struct logical_input *input) input->high_timer++; } return 1; - } else { - /* else signal falling down. Let's fall through. */ - input->state = INPUT_ST_FALLING; - input->fall_timer = 0; } + + /* else signal falling down. Let's fall through. */ + input->state = INPUT_ST_FALLING; + input->fall_timer = 0; + return 0; } -- cgit From 99948ba7c8eef166979cf5b0c466f48cabba82f2 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Thu, 10 Jul 2014 12:45:43 +0100 Subject: staging: comedi: vmk80xx: remove MODULE_VERSION() from in-kernel module Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/vmk80xx.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/vmk80xx.c b/drivers/staging/comedi/drivers/vmk80xx.c index 0adf3cffddb0..831c3b702899 100644 --- a/drivers/staging/comedi/drivers/vmk80xx.c +++ b/drivers/staging/comedi/drivers/vmk80xx.c @@ -959,5 +959,4 @@ module_comedi_usb_driver(vmk80xx_driver, vmk80xx_usb_driver); MODULE_AUTHOR("Manuel Gebele "); MODULE_DESCRIPTION("Velleman USB Board Low-Level Driver"); MODULE_SUPPORTED_DEVICE("K8055/K8061 aka VM110/VM140"); -MODULE_VERSION("0.8.01"); MODULE_LICENSE("GPL"); -- cgit From 52dc09775829e68c20061197a88bd2471c71ce70 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Thu, 10 Jul 2014 12:45:44 +0100 Subject: staging: comedi: ni_daq_700: remove MODULE_VERSION() and commentary We don't module version numbers for in-kernel drivers. The kernel version number is sufficient information. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_daq_700.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index 3d841d4eb552..5e472cb7fbd7 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -43,12 +43,6 @@ * * IRQ is assigned but not used. * - * Version 0.1 Original DIO only driver - * Version 0.2 DIO and basic AI analog input support on 16 se channels - * Version 0.3 Add SE or DIFF mode and range switching +-10,+-5,+-2.5 - * Clear the FIFO of data before the conversion to handle card - * mode switching glitches. - * * Manuals: Register level: http://www.ni.com/pdf/manuals/340698.pdf * User Manual: http://www.ni.com/pdf/manuals/320676d.pdf */ @@ -295,5 +289,4 @@ module_comedi_pcmcia_driver(daq700_driver, daq700_cs_driver); MODULE_AUTHOR("Fred Brooks "); MODULE_DESCRIPTION( "Comedi driver for National Instruments PCMCIA DAQCard-700 DIO/AI"); -MODULE_VERSION("0.3.00"); MODULE_LICENSE("GPL"); -- cgit From 97f9402a3ee2f50ba65cbf40ee7c20dbb1709b43 Mon Sep 17 00:00:00 2001 From: sanjeev sharma Date: Thu, 10 Jul 2014 17:54:54 +0530 Subject: staging: rtl8192u: Remove useless return statement This patch will remove unneeded return statements in code. Signed-off-by: Sanjeev Sharma Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r819xU_phy.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r819xU_phy.c b/drivers/staging/rtl8192u/r819xU_phy.c index 02554c981203..0bcdd4e24bbd 100644 --- a/drivers/staging/rtl8192u/r819xU_phy.c +++ b/drivers/staging/rtl8192u/r819xU_phy.c @@ -101,7 +101,6 @@ void rtl8192_setBBreg(struct net_device *dev, u32 reg_addr, u32 bitmask, } else { write_nic_dword(dev, reg_addr, data); } - return; } /****************************************************************************** @@ -281,7 +280,6 @@ static void rtl8192_phy_RFSerialWrite(struct net_device *dev, priv->RfReg0Value[eRFPath] << 16); } } - return; } /****************************************************************************** @@ -332,7 +330,6 @@ void rtl8192_phy_SetRFReg(struct net_device *dev, RF90_RADIO_PATH_E eRFPath, rtl8192_phy_RFSerialWrite(dev, eRFPath, reg_addr, data); } } - return; } /****************************************************************************** @@ -513,7 +510,6 @@ void rtl8192_phy_configmac(struct net_device *dev) rtl8192_setBBreg(dev, pdwArray[i], pdwArray[i+1], pdwArray[i+2]); } - return; } /****************************************************************************** @@ -559,7 +555,6 @@ void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType) rtl819XAGCTAB_Array[i+1]); } } - return; } /****************************************************************************** @@ -846,7 +841,6 @@ static void rtl8192_BB_Config_ParaFile(struct net_device *dev) priv->bCckHighPower = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0x200); - return; } /****************************************************************************** @@ -864,7 +858,6 @@ void rtl8192_BBConfig(struct net_device *dev) * implemented, so use file first. * FIXME: should implement it for hardcode? */ rtl8192_BB_Config_ParaFile(dev); - return; } @@ -912,8 +905,6 @@ void rtl8192_phy_getTxPower(struct net_device *dev) /* Read SIFS (save the value read fome MACPHY_REG.txt) */ read_nic_word(dev, SIFS, &priv->SifsTime); - - return; } /****************************************************************************** @@ -942,7 +933,6 @@ void rtl8192_phy_setTxPower(struct net_device *dev, u8 channel) __func__); break; } - return; } /****************************************************************************** @@ -963,7 +953,6 @@ void rtl8192_phy_RFConfig(struct net_device *dev) RT_TRACE(COMP_ERR, "error chip id\n"); break; } - return; } /****************************************************************************** @@ -974,7 +963,6 @@ void rtl8192_phy_RFConfig(struct net_device *dev) ******************************************************************************/ void rtl8192_phy_updateInitGain(struct net_device *dev) { - return; } /****************************************************************************** @@ -1094,7 +1082,6 @@ static void rtl8192_SetTxPowerLevel(struct net_device *dev, u8 channel) RT_TRACE(COMP_ERR, "unknown rf chip ID in %s()\n", __func__); break; } - return; } /****************************************************************************** -- cgit From 16ec1a20b1dc7cbe484f271589be4ecb2632cde4 Mon Sep 17 00:00:00 2001 From: sanjeev sharma Date: Thu, 10 Jul 2014 17:54:56 +0530 Subject: staging: rtl8192u: Fixed switch and case indentation error This patch will fix switch and case indentation Error reported by checkpatch script. Signed-off-by: Sanjeev Sharma Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r819xU_phy.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r819xU_phy.c b/drivers/staging/rtl8192u/r819xU_phy.c index 0bcdd4e24bbd..e9c15fe8ded5 100644 --- a/drivers/staging/rtl8192u/r819xU_phy.c +++ b/drivers/staging/rtl8192u/r819xU_phy.c @@ -946,12 +946,12 @@ void rtl8192_phy_RFConfig(struct net_device *dev) struct r8192_priv *priv = ieee80211_priv(dev); switch (priv->rf_chip) { - case RF_8256: - PHY_RF8256_Config(dev); - break; - default: - RT_TRACE(COMP_ERR, "error chip id\n"); - break; + case RF_8256: + PHY_RF8256_Config(dev); + break; + default: + RT_TRACE(COMP_ERR, "error chip id\n"); + break; } } -- cgit From 72bf80592789b46251ca71399010410998693b93 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:02 +0100 Subject: staging: vt6656: rxtx remove struct ethhdr from functions ethhdr is nolonger used by driver. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 264e3c9b6412..998a62a47397 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -86,7 +86,7 @@ static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, - int bNeedACK, struct ethhdr *psEthHeader, bool need_rts); + int bNeedACK, bool need_rts); static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); @@ -100,7 +100,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - struct ethhdr *psEthHeader, u16 wCurrentRate, u8 byFBOption); + u16 wCurrentRate, u8 byFBOption); static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); @@ -425,8 +425,7 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g *buf, struct ethhdr *eth_hdr, - u8 pkt_type, u32 frame_len, int need_ack, + struct vnt_rts_g *buf, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { struct vnt_private *priv = tx_context->priv; @@ -451,8 +450,7 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g_fb *buf, struct ethhdr *eth_hdr, - u8 pkt_type, u32 frame_len, int need_ack, + struct vnt_rts_g_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { struct vnt_private *priv = tx_context->priv; @@ -488,8 +486,7 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_ab *buf, struct ethhdr *eth_hdr, - u8 pkt_type, u32 frame_len, int need_ack, + struct vnt_rts_ab *buf, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { struct vnt_private *priv = tx_context->priv; @@ -508,8 +505,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_a_fb *buf, struct ethhdr *eth_hdr, - u8 pkt_type, u32 frame_len, int need_ack, + struct vnt_rts_a_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, u16 current_rate, u8 fb_option) { struct vnt_private *priv = tx_context->priv; @@ -535,7 +531,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - struct ethhdr *psEthHeader, u16 wCurrentRate, u8 byFBOption) + u16 wCurrentRate, u8 byFBOption) { if (!head) @@ -551,26 +547,26 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, case PK_TYPE_11GA: if (byFBOption == AUTO_FB_NONE) return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, - psEthHeader, byPktType, cbFrameLength, + byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); else return vnt_rxtx_rts_g_fb_head(tx_context, - &head->rts_g_fb, psEthHeader, byPktType, + &head->rts_g_fb, byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); break; case PK_TYPE_11A: if (byFBOption) { return vnt_rxtx_rts_a_fb_head(tx_context, - &head->rts_a_fb, psEthHeader, byPktType, + &head->rts_a_fb, byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); break; } case PK_TYPE_11B: return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - psEthHeader, byPktType, cbFrameLength, - bNeedAck, wCurrentRate, byFBOption); + byPktType, cbFrameLength, bNeedAck, + wCurrentRate, byFBOption); } return 0; @@ -661,7 +657,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, - int bNeedACK, struct ethhdr *psEthHeader, bool need_rts) + int bNeedACK, bool need_rts) { struct vnt_private *pDevice = tx_context->priv; struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head; @@ -705,7 +701,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, bNeedACK, psEthHeader, + cbFrameSize, bNeedACK, wCurrentRate, byFBOption); } else { @@ -754,8 +750,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, bNeedACK, psEthHeader, - wCurrentRate, byFBOption); + cbFrameSize, bNeedACK, + wCurrentRate, byFBOption); } else { struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; @@ -789,8 +785,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, - bNeedACK, psEthHeader, wCurrentRate, byFBOption); + cbFrameSize, bNeedACK, + wCurrentRate, byFBOption); } else { struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; @@ -1025,7 +1021,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) duration_id = s_vGenerateTxParameter(tx_context, pkt_type, current_rate, tx_buffer, &mic_hdr, need_mic, frame_size, - need_ack, NULL, need_rts); + need_ack, need_rts); tx_header_size = tx_context->tx_hdr_size; if (!tx_header_size) { -- cgit From ce7b0db87ce0a067742720d123dedfb5ab3cfede Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:03 +0100 Subject: staging: vt6656: rxtx: move tx_context->fb_option into function structure. Replace fb_option in function calls with tx_context->fb_option. Namely functions s_vFillCTSHead and s_vFillRTSHead Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 998a62a47397..a556d818401c 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -545,7 +545,7 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, switch (byPktType) { case PK_TYPE_11GB: case PK_TYPE_11GA: - if (byFBOption == AUTO_FB_NONE) + if (!tx_context->fb_option) return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, byPktType, cbFrameLength, bNeedAck, wCurrentRate, byFBOption); @@ -556,7 +556,7 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, byFBOption); break; case PK_TYPE_11A: - if (byFBOption) { + if (tx_context->fb_option) { return vnt_rxtx_rts_a_fb_head(tx_context, &head->rts_a_fb, byPktType, cbFrameLength, bNeedAck, wCurrentRate, @@ -582,7 +582,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, if (!head) return 0; - if (byFBOption != AUTO_FB_NONE) { + if (tx_context->fb_option) { /* Auto Fall back */ struct vnt_cts_fb *pBuf = &head->cts_g_fb; /* Get SignalField,ServiceField,Length */ -- cgit From 26e7362cb8e9f43279fb665eb39300a5e0244175 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:04 +0100 Subject: staging: vt6656: rxtx remove fb_option from functions. This is now dead code. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 84 +++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index a556d818401c..57e1dff68fa0 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -96,18 +96,18 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, - int bNeedAck, u16 wCurrentRate, u8 byFBOption); + int bNeedAck, u16 wCurrentRate); static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - u16 wCurrentRate, u8 byFBOption); + u16 wCurrentRate); static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, u32 cbFrameLength, u8 byPktType, u16 wRate, - int bNeedAck, u8 byFBOption); + int bNeedAck); static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *priv) @@ -243,8 +243,7 @@ static __le16 s_uGetDataDuration(struct vnt_private *pDevice, //byFreqType: 0=>5GHZ 1=>2.4GHZ static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, - u32 cbFrameLength, u8 byPktType, u16 wRate, int bNeedAck, - u8 byFBOption) + u32 cbFrameLength, u8 byPktType, u16 wRate, int bNeedAck) { u32 uCTSTime = 0, uDurTime = 0; @@ -426,7 +425,7 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate, u8 fb_option) + u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; @@ -437,11 +436,11 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, priv->byTopOFDMBasicRate, pkt_type, &buf->a); buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, - PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack, fb_option); + PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -451,7 +450,7 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate, u8 fb_option) + u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; @@ -463,21 +462,21 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, - PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack, fb_option); + PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); buf->rts_duration_ba_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_aa_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_ba_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb1, need_ack); buf->rts_duration_aa_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -487,7 +486,7 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_ab *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate, u8 fb_option) + u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; @@ -496,7 +495,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, priv->byTopOFDMBasicRate, pkt_type, &buf->ab); buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -506,7 +505,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_a_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate, u8 fb_option) + u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; @@ -515,13 +514,13 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, priv->byTopOFDMBasicRate, pkt_type, &buf->a); buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack, fb_option); + pkt_type, current_rate, need_ack); buf->rts_duration_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); + frame_len, pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -531,7 +530,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - u16 wCurrentRate, u8 byFBOption) + u16 wCurrentRate) { if (!head) @@ -548,25 +547,23 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, if (!tx_context->fb_option) return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, byPktType, cbFrameLength, - bNeedAck, wCurrentRate, byFBOption); + bNeedAck, wCurrentRate); else return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, byPktType, - cbFrameLength, bNeedAck, wCurrentRate, - byFBOption); + cbFrameLength, bNeedAck, wCurrentRate); break; case PK_TYPE_11A: if (tx_context->fb_option) { return vnt_rxtx_rts_a_fb_head(tx_context, &head->rts_a_fb, byPktType, - cbFrameLength, bNeedAck, wCurrentRate, - byFBOption); + cbFrameLength, bNeedAck, wCurrentRate); break; } case PK_TYPE_11B: return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, byPktType, cbFrameLength, bNeedAck, - wCurrentRate, byFBOption); + wCurrentRate); } return 0; @@ -574,7 +571,7 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, - int bNeedAck, u16 wCurrentRate, u8 byFBOption) + int bNeedAck, u16 wCurrentRate) { struct vnt_private *pDevice = tx_context->priv; u32 uCTSFrameLen = 14; @@ -590,15 +587,15 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, - wCurrentRate, bNeedAck, byFBOption); + wCurrentRate, bNeedAck); /* Get CTSDuration_ba_f0 */ pBuf->cts_duration_ba_f0 = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F0, cbFrameLength, byPktType, - pDevice->tx_rate_fb0, bNeedAck, byFBOption); + pDevice->tx_rate_fb0, bNeedAck); /* Get CTSDuration_ba_f1 */ pBuf->cts_duration_ba_f1 = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F1, cbFrameLength, byPktType, - pDevice->tx_rate_fb1, bNeedAck, byFBOption); + pDevice->tx_rate_fb1, bNeedAck); /* Get CTS Frame body */ pBuf->data.duration = pBuf->duration_ba; pBuf->data.frame_control = @@ -617,7 +614,7 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, /* Get CTSDuration_ba */ pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, - wCurrentRate, bNeedAck, byFBOption); + wCurrentRate, bNeedAck); /*Get CTS Frame body*/ pBuf->data.duration = pBuf->duration_ba; pBuf->data.frame_control = @@ -662,16 +659,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, struct vnt_private *pDevice = tx_context->priv; struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head; union vnt_tx_data_head *head = NULL; - u16 wFifoCtl; - u8 byFBOption = AUTO_FB_NONE; pFifoHead->current_rate = cpu_to_le16(wCurrentRate); - wFifoCtl = pFifoHead->wFIFOCtl; - - if (wFifoCtl & FIFOCTL_AUTO_FB_0) - byFBOption = AUTO_FB_0; - else if (wFifoCtl & FIFOCTL_AUTO_FB_1) - byFBOption = AUTO_FB_1; if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { if (need_rts) { @@ -702,7 +691,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, - wCurrentRate, byFBOption); + wCurrentRate); } else { struct vnt_rrv_time_cts *pBuf = &tx_buffer-> @@ -727,8 +716,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill CTS */ return s_vFillCTSHead(tx_context, byPktType, - head, cbFrameSize, bNeedACK, wCurrentRate, - byFBOption); + head, cbFrameSize, bNeedACK, wCurrentRate); } } else if (byPktType == PK_TYPE_11A) { if (need_mic) { @@ -751,7 +739,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, - wCurrentRate, byFBOption); + wCurrentRate); } else { struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; @@ -786,7 +774,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, - wCurrentRate, byFBOption); + wCurrentRate); } else { struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; -- cgit From cb8ee9dededa4e6c7acc5715814d616c545fb095 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:05 +0100 Subject: staging: vt6656: move current_rate setting out of s_vGenerateTxParameter Removing unneeded pointers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 57e1dff68fa0..2ed045d235f6 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -657,11 +657,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, int bNeedACK, bool need_rts) { struct vnt_private *pDevice = tx_context->priv; - struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head; union vnt_tx_data_head *head = NULL; - pFifoHead->current_rate = cpu_to_le16(wCurrentRate); - if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { if (need_rts) { struct vnt_rrv_time_rts *pBuf = @@ -982,6 +979,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) frame_size += tx_key->icv_len; } + tx_buffer_head->current_rate = cpu_to_le16(current_rate); + /* legacy rates TODO use ieee80211_tx_rate */ if (current_rate >= RATE_18M && ieee80211_is_data(hdr->frame_control)) { if (priv->byAutoFBCtrl == AUTO_FB_0) { -- cgit From 24cdd90ff59293de1e3087bf37688c8182cc193c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:06 +0100 Subject: staging: vt6656: s_vGenerateTxParameter Parse out struct vnt_rrv_time_rts Creat new function vnt_rxtx_rts that will eventually carry onward functions. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 2ed045d235f6..7d0b74c534f7 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -629,6 +629,28 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, return 0; } +static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, + union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, + int need_ack, u16 current_rate) +{ + struct vnt_private *priv = tx_context->priv; + struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; + + buf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(priv, 2, + pkt_type, frame_size, current_rate); + buf->rts_rrv_time_ba = s_uGetRTSCTSRsvTime(priv, 1, + pkt_type, frame_size, current_rate); + buf->rts_rrv_time_bb = s_uGetRTSCTSRsvTime(priv, 0, + pkt_type, frame_size, current_rate); + + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, + current_rate, need_ack); + buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, + priv->byTopCCKBasicRate, need_ack); + + return 0; +} + /*+ * * Description: @@ -661,21 +683,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { if (need_rts) { - struct vnt_rrv_time_rts *pBuf = - &tx_buffer->tx_head.tx_rts.rts; - - pBuf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(pDevice, 2, - byPktType, cbFrameSize, wCurrentRate); - pBuf->rts_rrv_time_ba = s_uGetRTSCTSRsvTime(pDevice, 1, - byPktType, cbFrameSize, wCurrentRate); - pBuf->rts_rrv_time_bb = s_uGetRTSCTSRsvTime(pDevice, 0, - byPktType, cbFrameSize, wCurrentRate); - - pBuf->rrv_time_a = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, wCurrentRate, bNeedACK); - pBuf->rrv_time_b = vnt_rxtx_rsvtime_le16(pDevice, - PK_TYPE_11B, cbFrameSize, - pDevice->byTopCCKBasicRate, bNeedACK); + vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, + byPktType, cbFrameSize, bNeedACK, wCurrentRate); if (need_mic) { *mic_hdr = &tx_buffer-> -- cgit From bf9c0118f1bfc7fe72c24db47a0296a1f6109b3d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:07 +0100 Subject: staging: vt6656: s_vGenerateTxParameter Parse out struct vnt_rrv_time_cts Create new function vnt_rxtx_cts that will eventually carry onward function. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7d0b74c534f7..49bda3c0ab37 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -651,6 +651,24 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, return 0; } +static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, + union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, + int need_ack, u16 current_rate) +{ + struct vnt_private *priv = tx_context->priv; + struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; + + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, + frame_size, current_rate, need_ack); + buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, + frame_size, priv->byTopCCKBasicRate, need_ack); + + buf->cts_rrv_time_ba = s_uGetRTSCTSRsvTime(priv, 3, + pkt_type, frame_size, current_rate); + + return 0; +} + /*+ * * Description: @@ -700,17 +718,8 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, wCurrentRate); } else { - struct vnt_rrv_time_cts *pBuf = &tx_buffer-> - tx_head.tx_cts.cts; - - pBuf->rrv_time_a = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, wCurrentRate, bNeedACK); - pBuf->rrv_time_b = vnt_rxtx_rsvtime_le16(pDevice, - PK_TYPE_11B, cbFrameSize, - pDevice->byTopCCKBasicRate, bNeedACK); - - pBuf->cts_rrv_time_ba = s_uGetRTSCTSRsvTime(pDevice, 3, - byPktType, cbFrameSize, wCurrentRate); + vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, + byPktType, cbFrameSize, bNeedACK, wCurrentRate); if (need_mic) { *mic_hdr = &tx_buffer-> -- cgit From f1be5759bc8998ac9b4b694d318d0f3a74e7e531 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:08 +0100 Subject: staging: vt6656: s_vGenerateTxParameter rxtx.c s_vGenerateTxParameter pBuf->rrv_time always the calling pkt_type Use byPktType instead of macro. The pkt_type has already been filtered in this function so its always set to the correct one. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 49bda3c0ab37..bad2fe45b925 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -760,7 +760,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, tx_head.tx_ab.ab; pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - PK_TYPE_11A, cbFrameSize, + byPktType, cbFrameSize, wCurrentRate, bNeedACK); return vnt_rxtx_datahead_a_fb(tx_context, byPktType, @@ -783,7 +783,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, byPktType, cbFrameSize, wCurrentRate); pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - PK_TYPE_11B, cbFrameSize, wCurrentRate, + byPktType, cbFrameSize, wCurrentRate, bNeedACK); /* Fill RTS */ @@ -795,7 +795,7 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, tx_head.tx_ab.ab; pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - PK_TYPE_11B, cbFrameSize, + byPktType, cbFrameSize, wCurrentRate, bNeedACK); return vnt_rxtx_datahead_ab(tx_context, byPktType, -- cgit From 3b03fea23d696dd429855af454fec7b6afe234cd Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:09 +0100 Subject: staging: vt6656: s_vGenerateTxParameter parse out vnt_rrv_time_ab create new function vnt_rxtx_ab which will eventually carry onward functions Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 59 ++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index bad2fe45b925..758f69ecfd66 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -669,6 +669,28 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, return 0; } +static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, + union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, + int need_ack, u16 current_rate, bool need_rts) +{ + struct vnt_private *priv = tx_context->priv; + struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; + + buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, pkt_type, + frame_size, current_rate, need_ack); + + if (need_rts) { + if (pkt_type == PK_TYPE_11B) + buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 0, + pkt_type, frame_size, current_rate); + else /* PK_TYPE_11A */ + buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 2, + pkt_type, frame_size, current_rate); + } + + return 0; +} + /*+ * * Description: @@ -696,7 +718,6 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, int bNeedACK, bool need_rts) { - struct vnt_private *pDevice = tx_context->priv; union vnt_tx_data_head *head = NULL; if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { @@ -742,26 +763,17 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, } if (need_rts) { - struct vnt_rrv_time_ab *pBuf = &tx_buffer-> - tx_head.tx_ab.ab; - - pBuf->rts_rrv_time = s_uGetRTSCTSRsvTime(pDevice, 2, - byPktType, cbFrameSize, wCurrentRate); + vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_rts); - pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, wCurrentRate, bNeedACK); /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, wCurrentRate); } else { - struct vnt_rrv_time_ab *pBuf = &tx_buffer-> - tx_head.tx_ab.ab; - - pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, - wCurrentRate, bNeedACK); + vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_rts); return vnt_rxtx_datahead_a_fb(tx_context, byPktType, wCurrentRate, &head->data_head_a_fb, @@ -776,27 +788,16 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, } if (need_rts) { - struct vnt_rrv_time_ab *pBuf = &tx_buffer-> - tx_head.tx_ab.ab; - - pBuf->rts_rrv_time = s_uGetRTSCTSRsvTime(pDevice, 0, - byPktType, cbFrameSize, wCurrentRate); - - pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, wCurrentRate, - bNeedACK); + vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_rts); /* Fill RTS */ return s_vFillRTSHead(tx_context, byPktType, head, cbFrameSize, bNeedACK, wCurrentRate); } else { - struct vnt_rrv_time_ab *pBuf = &tx_buffer-> - tx_head.tx_ab.ab; - - pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, - byPktType, cbFrameSize, - wCurrentRate, bNeedACK); + vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_rts); return vnt_rxtx_datahead_ab(tx_context, byPktType, wCurrentRate, &head->data_head_ab, -- cgit From 4f06c0dcc73276077afbb01be708eef4eed8bb7e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:10 +0100 Subject: staging: vt6656: merge PK_TYPE_11GB and PK_TYPE_11GA into vnt_rxtx_rts add to vnt_rxtx_rts calls from s_vFillRTSHead. add need_mic and union vnt_tx_data_head head positions from s_vGenerateTxParameter. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 758f69ecfd66..0ff8b5017904 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -542,17 +542,6 @@ static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, * Otherwise, we need to modified codes for them. */ switch (byPktType) { - case PK_TYPE_11GB: - case PK_TYPE_11GA: - if (!tx_context->fb_option) - return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, - byPktType, cbFrameLength, - bNeedAck, wCurrentRate); - else - return vnt_rxtx_rts_g_fb_head(tx_context, - &head->rts_g_fb, byPktType, - cbFrameLength, bNeedAck, wCurrentRate); - break; case PK_TYPE_11A: if (tx_context->fb_option) { return vnt_rxtx_rts_a_fb_head(tx_context, @@ -631,10 +620,11 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, - int need_ack, u16 current_rate) + int need_ack, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; + union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; buf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(priv, 2, pkt_type, frame_size, current_rate); @@ -648,7 +638,15 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, priv->byTopCCKBasicRate, need_ack); - return 0; + if (need_mic) + head = &tx_head->tx_rts.tx.mic.head; + + if (tx_context->fb_option) + return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, + pkt_type, frame_size, need_ack, current_rate); + + return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, + pkt_type, frame_size, need_ack, current_rate); } static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, @@ -722,22 +720,13 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { if (need_rts) { - vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - byPktType, cbFrameSize, bNeedACK, wCurrentRate); - - if (need_mic) { + if (need_mic) *mic_hdr = &tx_buffer-> tx_head.tx_rts.tx.mic.hdr; - head = &tx_buffer->tx_head.tx_rts.tx.mic.head; - } else { - head = &tx_buffer->tx_head.tx_rts.tx.head; - } - - /* Fill RTS */ - return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, bNeedACK, - wCurrentRate); + return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, + byPktType, cbFrameSize, bNeedACK, + wCurrentRate, need_mic); } else { vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, byPktType, cbFrameSize, bNeedACK, wCurrentRate); -- cgit From b00cb6847e515c2d27d5cc0af6558acb4c307829 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:11 +0100 Subject: staging: vt6656: move s_vFillCTSHead to vnt_rxtx_cts add need_mic and union vnt_tx_data_head head positions from s_vGenerateTxParameter. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 0ff8b5017904..c8a38c5172bf 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -651,10 +651,12 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, - int need_ack, u16 current_rate) + int need_ack, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; + union vnt_tx_data_head *head = &tx_head->tx_cts.tx.head; + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, current_rate, need_ack); @@ -664,7 +666,12 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, buf->cts_rrv_time_ba = s_uGetRTSCTSRsvTime(priv, 3, pkt_type, frame_size, current_rate); - return 0; + if (need_mic) + head = &tx_head->tx_cts.tx.mic.head; + + /* Fill CTS */ + return s_vFillCTSHead(tx_context, pkt_type, head, frame_size, + need_ack, current_rate); } static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, @@ -728,20 +735,13 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, byPktType, cbFrameSize, bNeedACK, wCurrentRate, need_mic); } else { - vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, - byPktType, cbFrameSize, bNeedACK, wCurrentRate); - - if (need_mic) { + if (need_mic) *mic_hdr = &tx_buffer-> tx_head.tx_cts.tx.mic.hdr; - head = &tx_buffer->tx_head.tx_cts.tx.mic.head; - } else { - head = &tx_buffer->tx_head.tx_cts.tx.head; - } - - /* Fill CTS */ - return s_vFillCTSHead(tx_context, byPktType, - head, cbFrameSize, bNeedACK, wCurrentRate); + + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, + byPktType, cbFrameSize, bNeedACK, + wCurrentRate, need_mic); } } else if (byPktType == PK_TYPE_11A) { if (need_mic) { -- cgit From 681acf68db7c4291f463991f0a320b3213f1a502 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:12 +0100 Subject: staging: vt6656: merge data positions for packet types a and b into vnt_rxtx_ab add rts positions from s_vFillRTSHead add need_mic and remaining union vnt_tx_data_head head positions from s_vGenerateTxParameter for packet type PK_TYPE_11A and PK_TYPE_11B.. As there are no other possibilities for packet types in s_vGenerateTxParameter the if becomes else. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 109 ++++++++++-------------------------------- 1 file changed, 25 insertions(+), 84 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index c8a38c5172bf..61138079eacb 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -98,10 +98,6 @@ static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, u16 wCurrentRate); -static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, - union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - u16 wCurrentRate); - static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); @@ -528,36 +524,6 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, &buf->data_head, frame_len, need_ack); } -static u16 s_vFillRTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, - union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, - u16 wCurrentRate) -{ - - if (!head) - return 0; - - /* Note: So far RTSHead doesn't appear in ATIM - * & Beacom DMA, so we don't need to take them - * into account. - * Otherwise, we need to modified codes for them. - */ - switch (byPktType) { - case PK_TYPE_11A: - if (tx_context->fb_option) { - return vnt_rxtx_rts_a_fb_head(tx_context, - &head->rts_a_fb, byPktType, - cbFrameLength, bNeedAck, wCurrentRate); - break; - } - case PK_TYPE_11B: - return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - byPktType, cbFrameLength, bNeedAck, - wCurrentRate); - } - - return 0; -} - static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, u16 wCurrentRate) @@ -676,14 +642,18 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, - int need_ack, u16 current_rate, bool need_rts) + int need_ack, u16 current_rate, bool need_rts, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; + union vnt_tx_data_head *head = &tx_head->tx_ab.tx.head; buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, current_rate, need_ack); + if (need_mic) + head = &tx_head->tx_ab.tx.mic.head; + if (need_rts) { if (pkt_type == PK_TYPE_11B) buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 0, @@ -691,9 +661,23 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, else /* PK_TYPE_11A */ buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 2, pkt_type, frame_size, current_rate); + + if (tx_context->fb_option && pkt_type == PK_TYPE_11A) + return vnt_rxtx_rts_a_fb_head(tx_context, + &head->rts_a_fb, pkt_type, frame_size, + need_ack, current_rate); + + return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, + pkt_type, frame_size, need_ack, current_rate); } - return 0; + if (pkt_type == PK_TYPE_11A) + return vnt_rxtx_datahead_a_fb(tx_context, pkt_type, + current_rate, &head->data_head_a_fb, + frame_size, need_ack); + + return vnt_rxtx_datahead_ab(tx_context, pkt_type, current_rate, + &head->data_head_ab, frame_size, need_ack); } /*+ @@ -723,7 +707,6 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, int bNeedACK, bool need_rts) { - union vnt_tx_data_head *head = NULL; if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { if (need_rts) { @@ -743,55 +726,13 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, byPktType, cbFrameSize, bNeedACK, wCurrentRate, need_mic); } - } else if (byPktType == PK_TYPE_11A) { - if (need_mic) { - *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - head = &tx_buffer->tx_head.tx_ab.tx.mic.head; - } else { - head = &tx_buffer->tx_head.tx_ab.tx.head; - } - - if (need_rts) { - vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_rts); - - - /* Fill RTS */ - return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, bNeedACK, - wCurrentRate); - } else { - vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_rts); - - return vnt_rxtx_datahead_a_fb(tx_context, byPktType, - wCurrentRate, &head->data_head_a_fb, - cbFrameSize, bNeedACK); - } - } else if (byPktType == PK_TYPE_11B) { - if (need_mic) { + } else { + if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - head = &tx_buffer->tx_head.tx_ab.tx.mic.head; - } else { - head = &tx_buffer->tx_head.tx_ab.tx.head; - } - if (need_rts) { - vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_rts); - - /* Fill RTS */ - return s_vFillRTSHead(tx_context, byPktType, head, - cbFrameSize, bNeedACK, - wCurrentRate); - } else { - vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_rts); - - return vnt_rxtx_datahead_ab(tx_context, byPktType, - wCurrentRate, &head->data_head_ab, - cbFrameSize, bNeedACK); - } + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, + byPktType, cbFrameSize, bNeedACK, + wCurrentRate, need_rts, need_mic); } return 0; -- cgit From da9ef9f42bb21b49afd6c63b3b6c05c41fedf3d0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:13 +0100 Subject: staging: vt6656: s_vGenerateTxParameter remove else from if statements The function returns out at if statements so drop else. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 61138079eacb..0d0a95672122 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -717,25 +717,20 @@ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, byPktType, cbFrameSize, bNeedACK, wCurrentRate, need_mic); - } else { - if (need_mic) - *mic_hdr = &tx_buffer-> - tx_head.tx_cts.tx.mic.hdr; - - return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, - byPktType, cbFrameSize, bNeedACK, - wCurrentRate, need_mic); } - } else { + if (need_mic) - *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; + *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; - return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, - byPktType, cbFrameSize, bNeedACK, - wCurrentRate, need_rts, need_mic); + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_mic); } - return 0; + if (need_mic) + *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; + + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, + cbFrameSize, bNeedACK, wCurrentRate, need_rts, need_mic); } static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, -- cgit From 165ac77a5969d11f00faed3a82ea912a550c3ac5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:14 +0100 Subject: staging: vt6656: s_vGenerateTxParameter remove camel case Camel case changes byPktType -> pkt_type wCurrentRate -> current_rate cbFrameSize -> frame_size bNeedACK -> need_ack Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 0d0a95672122..1ff16e28a727 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -703,34 +703,34 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, -*/ static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, - u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, - struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, - int bNeedACK, bool need_rts) + u8 pkt_type, u16 current_rate, struct vnt_tx_buffer *tx_buffer, + struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, + int need_ack, bool need_rts) { - if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { + if (pkt_type == PK_TYPE_11GB || pkt_type == PK_TYPE_11GA) { if (need_rts) { if (need_mic) *mic_hdr = &tx_buffer-> tx_head.tx_rts.tx.mic.hdr; return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - byPktType, cbFrameSize, bNeedACK, - wCurrentRate, need_mic); + pkt_type, frame_size, need_ack, + current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; - return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_mic); + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, pkt_type, + frame_size, need_ack, current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, byPktType, - cbFrameSize, bNeedACK, wCurrentRate, need_rts, need_mic); + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, pkt_type, + frame_size, need_ack, current_rate, need_rts, need_mic); } static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, -- cgit From 9ec7f2d8e25c1147f51b12e55a41f6fb168127b4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:15 +0100 Subject: staging: vt6656: rename s_vGenerateTxParameter to vnt_generate_tx_parameter Removing static declaration Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 1ff16e28a727..ad1a1b6f4d6b 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -25,7 +25,7 @@ * Date: May 20, 2003 * * Functions: - * s_vGenerateTxParameter - Generate tx dma required parameter. + * vnt_generate_tx_parameter - Generate tx dma required parameter. * csBeacon_xmit - beacon tx function * csMgmt_xmit - management tx function * s_uGetDataDuration - get tx data required duration @@ -83,11 +83,6 @@ static const u16 wFB_Opt1[2][5] = { static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); -static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, - u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, - struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 cbFrameSize, - int bNeedACK, bool need_rts); - static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); @@ -702,7 +697,7 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, * -*/ -static u16 s_vGenerateTxParameter(struct vnt_usb_send_context *tx_context, +static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, u8 pkt_type, u16 current_rate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, int need_ack, bool need_rts) @@ -950,8 +945,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->fb_option = fb_option; - duration_id = s_vGenerateTxParameter(tx_context, pkt_type, current_rate, - tx_buffer, &mic_hdr, need_mic, frame_size, + duration_id = vnt_generate_tx_parameter(tx_context, pkt_type, + current_rate, tx_buffer, &mic_hdr, need_mic, frame_size, need_ack, need_rts); tx_header_size = tx_context->tx_hdr_size; -- cgit From ee16de8c9548bd8fd209912b94d73c953ae3024d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:16 +0100 Subject: staging: vt6656: s_vFillCTSHead remove camel case Camel case changes byPktType -> pkt_type cbFrameLength -> frame_len bNeedAck -> need_ack pDevice -> priv uCTSFrameLen -> cts_frame_len Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 66 +++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index ad1a1b6f4d6b..dce6cb5ac6a4 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -520,60 +520,60 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, } static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, - u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, - int bNeedAck, u16 wCurrentRate) + u8 pkt_type, union vnt_tx_data_head *head, u32 frame_len, + int need_ack, u16 current_rate) { - struct vnt_private *pDevice = tx_context->priv; - u32 uCTSFrameLen = 14; + struct vnt_private *priv = tx_context->priv; + u32 cts_frame_len = 14; if (!head) return 0; if (tx_context->fb_option) { /* Auto Fall back */ - struct vnt_cts_fb *pBuf = &head->cts_g_fb; + struct vnt_cts_fb *buf = &head->cts_g_fb; /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(pDevice, uCTSFrameLen, - pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); - pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, - cbFrameLength, byPktType, - wCurrentRate, bNeedAck); + vnt_get_phy_field(priv, cts_frame_len, + priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); + buf->duration_ba = s_uGetRTSCTSDuration(priv, CTSDUR_BA, + frame_len, pkt_type, + current_rate, need_ack); /* Get CTSDuration_ba_f0 */ - pBuf->cts_duration_ba_f0 = s_uGetRTSCTSDuration(pDevice, - CTSDUR_BA_F0, cbFrameLength, byPktType, - pDevice->tx_rate_fb0, bNeedAck); + buf->cts_duration_ba_f0 = s_uGetRTSCTSDuration(priv, + CTSDUR_BA_F0, frame_len, pkt_type, + priv->tx_rate_fb0, need_ack); /* Get CTSDuration_ba_f1 */ - pBuf->cts_duration_ba_f1 = s_uGetRTSCTSDuration(pDevice, - CTSDUR_BA_F1, cbFrameLength, byPktType, - pDevice->tx_rate_fb1, bNeedAck); + buf->cts_duration_ba_f1 = s_uGetRTSCTSDuration(priv, + CTSDUR_BA_F1, frame_len, pkt_type, + priv->tx_rate_fb1, need_ack); /* Get CTS Frame body */ - pBuf->data.duration = pBuf->duration_ba; - pBuf->data.frame_control = + buf->data.duration = buf->duration_ba; + buf->data.frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); - memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); + memcpy(buf->data.ra, priv->abyCurrentNetAddr, ETH_ALEN); - return vnt_rxtx_datahead_g_fb(tx_context, byPktType, - wCurrentRate, &pBuf->data_head, cbFrameLength, - bNeedAck); + return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, + current_rate, &buf->data_head, frame_len, + need_ack); } else { - struct vnt_cts *pBuf = &head->cts_g; + struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(pDevice, uCTSFrameLen, - pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); + vnt_get_phy_field(priv, cts_frame_len, + priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); /* Get CTSDuration_ba */ - pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, - CTSDUR_BA, cbFrameLength, byPktType, - wCurrentRate, bNeedAck); + buf->duration_ba = s_uGetRTSCTSDuration(priv, + CTSDUR_BA, frame_len, pkt_type, + current_rate, need_ack); /*Get CTS Frame body*/ - pBuf->data.duration = pBuf->duration_ba; - pBuf->data.frame_control = + buf->data.duration = buf->duration_ba; + buf->data.frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); - memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); + memcpy(buf->data.ra, priv->abyCurrentNetAddr, ETH_ALEN); - return vnt_rxtx_datahead_g(tx_context, byPktType, wCurrentRate, - &pBuf->data_head, cbFrameLength, bNeedAck); + return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, + &buf->data_head, frame_len, need_ack); } return 0; -- cgit From 4f31668f61695fd9a12434aea844bf3fba9a373f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 10 Jul 2014 19:56:17 +0100 Subject: staging: vt6656: rename s_vFillCTSHead to vnt_fill_cts_head Removing static declaration. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index dce6cb5ac6a4..f8c232359e0d 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -33,7 +33,7 @@ * s_uGetRTSCTSDuration- get rtx/cts required duration * s_uGetRTSCTSRsvTime- get rts/cts reserved time * s_uGetTxRsvTime- get frame reserved time - * s_vFillCTSHead- fulfill CTS ctl header + * vnt_fill_cts_head- fulfill CTS ctl header * s_vFillFragParameter- Set fragment ctl parameter. * s_vFillRTSHead- fulfill RTS ctl header * vDMA0_tx_80211- tx 802.11 frame via dma0 @@ -89,10 +89,6 @@ static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate); -static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, - u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, - int bNeedAck, u16 wCurrentRate); - static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); @@ -519,7 +515,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, &buf->data_head, frame_len, need_ack); } -static u16 s_vFillCTSHead(struct vnt_usb_send_context *tx_context, +static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, u8 pkt_type, union vnt_tx_data_head *head, u32 frame_len, int need_ack, u16 current_rate) { @@ -631,7 +627,7 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, head = &tx_head->tx_cts.tx.mic.head; /* Fill CTS */ - return s_vFillCTSHead(tx_context, pkt_type, head, frame_size, + return vnt_fill_cts_head(tx_context, pkt_type, head, frame_size, need_ack, current_rate); } -- cgit From 96c53cc73fef4863884c197aefc9ee610e95b62d Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:42 +0200 Subject: staging: ced1401: usb1401.c: change spaces to tabs Fix checkpatch errors "code indent should use tabs where possible" in file usb1401.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 26e5f1b77cf8..a3d1ed6fa0b4 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -610,9 +610,9 @@ static void staged_callback(struct urb *urb) ta->blocks[1].offset); } } else { /* If block 1 is not used, we try to add */ - /*to block 0 */ + /*to block 0 */ - /* Got stored block 0 information? */ + /* Got stored block 0 information? */ if (ta->blocks[0].size > 0) { /* Must append onto the */ /*existing block 0 */ @@ -738,7 +738,7 @@ static void staged_callback(struct urb *urb) /* This feels wrong as we should ask which spin lock protects */ /* dma_flag. */ restart_char_input = !cancel && (ced->dma_flag == MODE_CHAR) && - !ced->xfer_waiting; + !ced->xfer_waiting; spin_unlock(&ced->staged_lock); /* Finally release the lock again */ @@ -803,7 +803,7 @@ static int ced_stage_chunk(struct ced_data *ced) ced->pipe_error[pipe] = 1; /* Flag an error to be */ /* handled later */ dev_err(&ced->interface->dev, - "%s: submit urb failed, code %d\n", + "%s: submit urb failed, code %d\n", __func__, retval); } else /* Set the flag for staged URB pending */ -- cgit From a08259437f87e81671ebd90efc65992a10caffe7 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:43 +0200 Subject: staging: ced1401: usb1401.h: fix "foo * bar" Fix checkpatch error "foo * bar" should be "foo *bar" in file usb1401.h Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h index 8e800c3db61e..da4d90cd49a0 100644 --- a/drivers/staging/ced1401/usb1401.h +++ b/drivers/staging/ced1401/usb1401.h @@ -213,7 +213,7 @@ struct ced_data { /* Definitions of routimes used between compilation object files */ /* in usb1401.c */ -extern int ced_allowi(struct ced_data * ced); +extern int ced_allowi(struct ced_data *ced); extern int ced_send_chars(struct ced_data *ced); extern void ced_draw_down(struct ced_data *ced); extern int ced_read_write_mem(struct ced_data *ced, bool read, -- cgit From 0d9095b3e8048a03be2e8388860f24e0012a2ab3 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:44 +0200 Subject: staging: ced1401: ced_ioc.c: add blank line after declarations Fix checkpatch warnings "Missing a blank line after declarations" in file ced_ioc.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index fb4e8a30b141..397df43b8b80 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -84,9 +84,11 @@ static int ced_put_chars(struct ced_data *ced, const char *ch, unsigned int count) { int ret; + spin_lock_irq(&ced->char_out_lock); /* get the output spin lock */ if ((OUTBUF_SZ - ced->num_output) >= count) { unsigned int u; + for (u = 0; u < count; u++) { ced->output_buffer[ced->out_buff_put++] = ch[u]; if (ced->out_buff_put >= OUTBUF_SZ) @@ -140,6 +142,7 @@ int ced_send_string(struct ced_data *ced, const char __user *data, int ced_send_char(struct ced_data *ced, char c) { int ret; + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ret = ced_put_chars(ced, &c, 1); dev_dbg(&ced->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); @@ -177,6 +180,7 @@ int ced_send_char(struct ced_data *ced, char c) int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) { int got; + dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); *state = 0xFFFFFFFF; /* Start off with invalid state */ @@ -192,6 +196,7 @@ int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) *error = 0; } else { int device; + dev_dbg(&ced->interface->dev, "%s: Success, state: 0x%x, 0x%x\n", __func__, ced->stat_buf[0], ced->stat_buf[1]); @@ -249,6 +254,7 @@ int ced_read_write_cancel(struct ced_data *ced) bResult = IoCancelIrp(ced->pStagedIrp); /* Actually do the cancel */ if (bResult) { LARGE_INTEGER timeout; + timeout.QuadPart = -10000000; /* Use a timeout of 1 second */ dev_info(&ced->interface - dev, "%s: about to wait till done\n", __func__); @@ -283,6 +289,7 @@ static int ced_in_self_test(struct ced_data *ced, unsigned int *stat) { unsigned int state, error; int ret = ced_get_state(ced, &state, &error); /* see if in self-test */ + if (ret == U14ERR_NOERROR) /* if all still OK */ ret = (state == (unsigned int)-1) || /* TX problem or... */ ((state & 0xff) == 0x80); /* ...self test */ @@ -311,6 +318,7 @@ static int ced_in_self_test(struct ced_data *ced, unsigned int *stat) static bool ced_is_1401(struct ced_data *ced) { int ret; + dev_dbg(&ced->interface->dev, "%s\n", __func__); ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ @@ -334,11 +342,13 @@ static bool ced_is_1401(struct ced_data *ced) ced->dma_flag = MODE_CHAR; /* Clear DMA mode flag regardless! */ if (ret == 0) { /* if all is OK still */ unsigned int state; + ret = ced_in_self_test(ced, &state); /* see if likely in */ /* self test */ if (ret > 0) { /* do we need to wait for self-test? */ /* when to give up */ unsigned long timeout = jiffies + 30 * HZ; + while ((ret > 0) && time_before(jiffies, timeout)) { schedule(); /* let other stuff run */ @@ -396,6 +406,7 @@ static bool ced_quick_check(struct ced_data *ced, bool test_buff, if (short_test || !can_reset) { /* Still OK to try the short test? */ /* Always test if no reset - we want state update */ unsigned int state, error; + dev_dbg(&ced->interface->dev, "%s: ced_get_state\n", __func__); if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ if ((state & 0xFF) == 0) /* If call worked, check the status value */ @@ -437,6 +448,7 @@ int ced_reset(struct ced_data *ced) int ced_get_char(struct ced_data *ced) { int ret = U14ERR_NOIN; /* assume we will get nothing */ + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ dev_dbg(&ced->interface->dev, "%s\n", __func__); @@ -475,6 +487,7 @@ int ced_get_string(struct ced_data *ced, char __user *user, int n) { int available; /* character in the buffer */ int ret = U14ERR_NOIN; + if (n <= 0) return -ENOMEM; @@ -492,6 +505,7 @@ int ced_get_string(struct ced_data *ced, char __user *user, int n) int got = 0; int n_copy_to_user; /* number to copy to user */ char data; + do { data = ced->input_buffer[ced->in_buff_get++]; if (data == CR_CHAR) /* replace CR with zero */ @@ -534,6 +548,7 @@ int ced_get_string(struct ced_data *ced, char __user *user, int n) int ced_stat_1401(struct ced_data *ced) { int ret; + mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ ced_allowi(ced); /* make sure we allow pending chars */ ced_send_chars(ced); /* in both directions */ @@ -563,6 +578,7 @@ int ced_line_count(struct ced_data *ced) unsigned int index = ced->in_buff_get; /* Position for search end */ unsigned int end = ced->in_buff_put; + do { if (ced->input_buffer[index++] == CR_CHAR) ++ret; /* inc count if CR */ @@ -618,6 +634,7 @@ int ced_clear_area(struct ced_data *ced, int area) } else { /* to save typing */ struct transarea *ta = &ced->trans_def[area]; + if (!ta->used) /* if not used... */ ret = U14ERR_NOTSET; /* ...nothing to be done */ else { @@ -709,6 +726,7 @@ static int ced_set_area(struct ced_data *ced, int area, char __user *buf, int n_pages = 0; /* and number of pages */ int ret = ced_clear_area(ced, area); /* see if OK to use this area */ + if ((ret != U14ERR_NOTSET) && /* if not area unused and... */ (ret != U14ERR_NOERROR)) /* ...not all OK, then... */ return ret; /* ...we cannot use this area */ @@ -807,6 +825,7 @@ int ced_set_transfer(struct ced_data *ced, int ced_unset_transfer(struct ced_data *ced, int area) { int ret; + mutex_lock(&ced->io_mutex); ret = ced_clear_area(ced, area); mutex_unlock(&ced->io_mutex); @@ -866,6 +885,7 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) int ced_wait_event(struct ced_data *ced, int area, int time_out) { int ret; + if ((unsigned)area >= MAX_TRANSAREAS) return U14ERR_BADAREA; else { @@ -919,6 +939,7 @@ int ced_wait_event(struct ced_data *ced, int area, int time_out) int ced_test_event(struct ced_data *ced, int area) { int ret; + if ((unsigned)area >= MAX_TRANSAREAS) ret = U14ERR_BADAREA; else { @@ -998,6 +1019,7 @@ int ced_kill_io(struct ced_data *ced) int ced_state_of_1401(struct ced_data *ced) { int ret; + mutex_lock(&ced->io_mutex); ced_quick_check(ced, false, false); /* get state up to date, no reset */ @@ -1018,6 +1040,7 @@ int ced_state_of_1401(struct ced_data *ced) int ced_start_self_test(struct ced_data *ced) { int got; + mutex_lock(&ced->io_mutex); dev_dbg(&ced->interface->dev, "%s\n", __func__); @@ -1050,6 +1073,7 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst) unsigned int state, error; int ret; TGET_SELFTEST gst; /* local work space */ + memset(&gst, 0, sizeof(gst)); /* clear out the space (sets code 0) */ mutex_lock(&ced->io_mutex); @@ -1087,6 +1111,7 @@ int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst) "Self-test error code %d\n", gst.code); } else { /* No error, check for timeout */ unsigned long now = jiffies; /* get current time */ + if (time_after(now, ced->self_test_time)) { gst.code = -2; /* Flag the timeout */ dev_dbg(&ced->interface->dev, @@ -1426,6 +1451,7 @@ int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) if (area < MAX_TRANSAREAS) { /* The area number must be OK */ /* Pointer to relevant info */ struct transarea *ta = &ced->trans_def[area]; + spin_lock_irq(&ced->staged_lock); /* Lock others out */ if ((ta->used) && (ta->circular) && /* Must be circular area */ -- cgit From 9609ce31f61cf8acd4cef76050aca560279a54ac Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:45 +0200 Subject: staging: ced1401: ced_ioc.c: remove space before tabs Fix checkpatch warning "please, no space before tabs" in file ced_ioc.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 397df43b8b80..a4bd013abbc9 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -344,7 +344,7 @@ static bool ced_is_1401(struct ced_data *ced) unsigned int state; ret = ced_in_self_test(ced, &state); /* see if likely in */ - /* self test */ + /* self test */ if (ret > 0) { /* do we need to wait for self-test? */ /* when to give up */ unsigned long timeout = jiffies + 30 * HZ; -- cgit From c626bd5b7b2356f13e2a55396ebe3298a9451857 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:46 +0200 Subject: staging: ced1401: ced_ioc.c: remove else branch in ced_set_event Fix checkpatch warning "else is not generally useful after a break or return" in file ced_ioc.c, function ced_set_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index a4bd013abbc9..cb075af6a8e2 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -844,6 +844,7 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) { int ret = U14ERR_NOERROR; struct transfer_event te; + struct transarea *ta; /* get a local copy of the data */ if (copy_from_user(&te, ute, sizeof(te))) @@ -851,27 +852,28 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ return U14ERR_BADAREA; - else { - struct transarea *ta = &ced->trans_def[te.wAreaNum]; - /* make sure we have no competitor */ - mutex_lock(&ced->io_mutex); - spin_lock_irq(&ced->staged_lock); + ta = &ced->trans_def[te.wAreaNum]; - if (ta->used) { /* area must be in use */ - ta->event_st = te.dwStart; /* set area regions */ + /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); + spin_lock_irq(&ced->staged_lock); - /* set size (0 cancels it) */ - ta->event_sz = te.dwLength; + if (ta->used) { /* area must be in use */ + ta->event_st = te.dwStart; /* set area regions */ + + /* set size (0 cancels it) */ + ta->event_sz = te.dwLength; + + /* set the direction */ + ta->event_to_host = te.wFlags & 1; + ta->wake_up = 0; /* zero the wake up count */ + } else + ret = U14ERR_NOTSET; + + spin_unlock_irq(&ced->staged_lock); + mutex_unlock(&ced->io_mutex); - /* set the direction */ - ta->event_to_host = te.wFlags & 1; - ta->wake_up = 0; /* zero the wake up count */ - } else - ret = U14ERR_NOTSET; - spin_unlock_irq(&ced->staged_lock); - mutex_unlock(&ced->io_mutex); - } return ret == U14ERR_NOERROR ? (te.iSetEvent ? 1 : U14ERR_NOERROR) : ret; } -- cgit From 6cfa015217dbb4df7b38e58db509f2a151a6de47 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:47 +0200 Subject: staging: ced1401: ced_ioc.c: remove else branch in ced_wait_event Fix checkpatch warning "else is not generally useful after a break or return" in file ced_ioc.c, function ced_wait_event() Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 65 ++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index cb075af6a8e2..0a402467a848 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -887,48 +887,49 @@ int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) int ced_wait_event(struct ced_data *ced, int area, int time_out) { int ret; + int wait; + struct transarea *ta; if ((unsigned)area >= MAX_TRANSAREAS) return U14ERR_BADAREA; - else { - int wait; - struct transarea *ta = &ced->trans_def[area]; - /* convert timeout to jiffies */ - time_out = (time_out * HZ + 999) / 1000; + ta = &ced->trans_def[area]; - /* We cannot wait holding the mutex, but we check the flags */ - /* while holding it. This may well be pointless as another */ - /* thread could get in between releasing it and the wait */ - /* call. However, this would have to clear the wake_up flag. */ - /* However, the !ta->used may help us in this case. */ + /* convert timeout to jiffies */ + time_out = (time_out * HZ + 999) / 1000; - /* make sure we have no competitor */ - mutex_lock(&ced->io_mutex); - if (!ta->used || !ta->event_sz) /* check something to */ - /* wait for... */ - return U14ERR_NOTSET; /* ...else we do nothing */ - mutex_unlock(&ced->io_mutex); + /* We cannot wait holding the mutex, but we check the flags */ + /* while holding it. This may well be pointless as another */ + /* thread could get in between releasing it and the wait */ + /* call. However, this would have to clear the wake_up flag. */ + /* However, the !ta->used may help us in this case. */ - if (time_out) - wait = wait_event_interruptible_timeout(ta->event, - ta->wake_up || - !ta->used, - time_out); - else - wait = wait_event_interruptible(ta->event, + /* make sure we have no competitor */ + mutex_lock(&ced->io_mutex); + if (!ta->used || !ta->event_sz) /* check something to */ + /* wait for... */ + return U14ERR_NOTSET; /* ...else we do nothing */ + mutex_unlock(&ced->io_mutex); + + if (time_out) + wait = wait_event_interruptible_timeout(ta->event, ta->wake_up || - !ta->used); + !ta->used, + time_out); + else + wait = wait_event_interruptible(ta->event, + ta->wake_up || + !ta->used); + + if (wait) + ret = -ERESTARTSYS; /* oops - we have had a SIGNAL */ + else + ret = ta->wake_up; /* else the wakeup count */ - if (wait) - ret = -ERESTARTSYS; /* oops - we have had a SIGNAL */ - else - ret = ta->wake_up; /* else the wakeup count */ + spin_lock_irq(&ced->staged_lock); + ta->wake_up = 0; /* clear the flag */ + spin_unlock_irq(&ced->staged_lock); - spin_lock_irq(&ced->staged_lock); - ta->wake_up = 0; /* clear the flag */ - spin_unlock_irq(&ced->staged_lock); - } return ret; } -- cgit From 5d335f0731ef8dea65f4e5fef95b6afc332bfade Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:48 +0200 Subject: staging: ced1401: ced_ioc.c : split long lines Fix checkpatch warnings "line over 80 characters" in file ced_ioc.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/ced_ioc.c | 66 +++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c index 0a402467a848..8cb6ea951adf 100644 --- a/drivers/staging/ced1401/ced_ioc.c +++ b/drivers/staging/ced1401/ced_ioc.c @@ -63,8 +63,10 @@ static void ced_flush_in_buff(struct ced_data *ced) { dev_dbg(&ced->interface->dev, "%s: current_state=%d\n", __func__, ced->current_state); - if (ced->current_state == U14ERR_TIME) /* Do nothing if hardware in trouble */ - return; + + if (ced->current_state == U14ERR_TIME) + return; /* Do nothing if hardware in trouble */ + /* Kill off any pending I/O */ /* CharRead_Cancel(pDevObject); */ spin_lock_irq(&ced->char_in_lock); @@ -96,7 +98,9 @@ static int ced_put_chars(struct ced_data *ced, const char *ch, } ced->num_output += count; spin_unlock_irq(&ced->char_out_lock); - ret = ced_send_chars(ced); /* ...give a chance to transmit data */ + + /* ...give a chance to transmit data */ + ret = ced_send_chars(ced); } else { ret = U14ERR_NOOUT; /* no room at the out (ha-ha) */ spin_unlock_irq(&ced->char_out_lock); @@ -238,24 +242,31 @@ int ced_read_write_cancel(struct ced_data *ced) int ntStatus = STATUS_SUCCESS; bool bResult = false; unsigned int i; - /* We can fill this in when we know how we will implement the staged transfer stuff */ + + /* We can fill this in when we know how we will implement the staged */ + /* transfer stuff */ spin_lock_irq(&ced->staged_lock); - if (ced->staged_urb_pending) { /* anything to be cancelled? May need more... */ + if (ced->staged_urb_pending) {/* anything to be cancelled? */ + /* May need more... */ dev_info(&ced->interface - dev, "ced_read_write_cancel about to cancel Urb\n"); /* Clear the staging done flag */ /* KeClearEvent(&ced->StagingDoneEvent); */ USB_ASSERT(ced->pStagedIrp != NULL); - /* Release the spinlock first otherwise the completion routine may hang */ - /* on the spinlock while this function hands waiting for the event. */ + /* Release the spinlock first otherwise the completion */ + /* routine may hang on the spinlock while this function */ + /* hands waiting for the event. */ spin_unlock_irq(&ced->staged_lock); - bResult = IoCancelIrp(ced->pStagedIrp); /* Actually do the cancel */ + + /* Actually do the cancel */ + bResult = IoCancelIrp(ced->pStagedIrp); if (bResult) { LARGE_INTEGER timeout; - timeout.QuadPart = -10000000; /* Use a timeout of 1 second */ + /* Use a timeout of 1 second */ + timeout.QuadPart = -10000000; dev_info(&ced->interface - dev, "%s: about to wait till done\n", __func__); ntStatus = @@ -268,8 +279,8 @@ int ced_read_write_cancel(struct ced_data *ced) ntStatus = U14ERR_FAIL; } USB_KdPrint(DBGLVL_DEFAULT, - ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", - ntStatus, ntStatus)); + ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", + ntStatus, ntStatus)); } else spin_unlock_irq(&ced->staged_lock); @@ -389,7 +400,8 @@ static bool ced_quick_check(struct ced_data *ced, bool test_buff, short_test = ((ced->dma_flag == MODE_CHAR) && /* no DMA running */ (!ced->force_reset) && /* Not had a real reset forced */ - (ced->current_state >= U14ERR_STD)); /* No 1401 errors stored */ + /* No 1401 errors stored */ + (ced->current_state >= U14ERR_STD)); dev_dbg(&ced->interface->dev, "%s: DMAFlag:%d, state:%d, force:%d, testBuff:%d, short:%d\n", @@ -397,19 +409,24 @@ static bool ced_quick_check(struct ced_data *ced, bool test_buff, test_buff, short_test); if ((test_buff) && /* Buffer check requested, and... */ - (ced->num_input || ced->num_output)) { /* ...characters were in the buffer? */ + (ced->num_input || ced->num_output)) {/* ...characters were in */ + /* the buffer? */ short_test = false; /* Then do the full test */ dev_dbg(&ced->interface->dev, "%s: will reset as buffers not empty\n", __func__); } - if (short_test || !can_reset) { /* Still OK to try the short test? */ - /* Always test if no reset - we want state update */ + if (short_test || !can_reset) { /* Still OK to try the short test? */ + /* Always test if no reset - we */ + /* want state update */ unsigned int state, error; dev_dbg(&ced->interface->dev, "%s: ced_get_state\n", __func__); - if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { /* Check on the 1401 state */ - if ((state & 0xFF) == 0) /* If call worked, check the status value */ + + /* Check on the 1401 state */ + if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { + /* If call worked, check the status value */ + if ((state & 0xFF) == 0) ret = true; /* If that was zero, all is OK, */ /* no reset needed */ } @@ -435,7 +452,7 @@ int ced_reset(struct ced_data *ced) mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ dev_dbg(&ced->interface->dev, "%s: About to call ced_quick_check\n", __func__); - ced_quick_check(ced, true, true); /* Check 1401, reset if not OK */ + ced_quick_check(ced, true, true); /* Check 1401, reset if not OK */ mutex_unlock(&ced->io_mutex); return U14ERR_NOERROR; } @@ -521,7 +538,7 @@ int ced_get_string(struct ced_data *ced, char __user *user, int n) if (data) { /* do we need null */ buffer[got] = (char)0; /* make it tidy */ if (got < n) /* if space in user buffer... */ - ++n_copy_to_user; /* ...copy the 0 as well. */ + ++n_copy_to_user; /* ...copy the 0 as well. */ } ced->num_input -= got; @@ -935,8 +952,8 @@ int ced_wait_event(struct ced_data *ced, int area, int time_out) /**************************************************************************** ** ced_test_event -** Test the event to see if a ced_wait_event would return immediately. Returns the -** number of times a block completed since the last call, or 0 if none or a +** Test the event to see if a ced_wait_event would return immediately. Returns +** the number of times a block completed since the last call, or 0 if none or a ** negative error. ****************************************************************************/ int ced_test_event(struct ced_data *ced, int area) @@ -1281,8 +1298,8 @@ int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb) /**************************************************************************** ** ced_dbg_ramp_data ** -** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK struct -** in order address, default, enable mask, size and repeats. +** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK +** struct in order address, default, enable mask, size and repeats. ****************************************************************************/ int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb) { @@ -1515,7 +1532,8 @@ int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) bool waiting = false; if ((ta->blocks[0].size >= size) && /* Got anything? */ - (ta->blocks[0].offset == start)) { /* Must be legal data */ + /* Must be legal data */ + (ta->blocks[0].offset == start)) { ta->blocks[0].size -= size; ta->blocks[0].offset += size; -- cgit From d991848455b7edb67e807ed221f1cd534d237f1e Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:49 +0200 Subject: staging: ced1401: usb1401.c: add blank line after declarations Fix checkpatch warnings "Missing a blank line after declarations" in file usb1401.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index a3d1ed6fa0b4..eab5f04728e6 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -204,6 +204,7 @@ exit: static int ced_release(struct inode *inode, struct file *file) { struct ced_data *ced = file->private_data; + if (ced == NULL) return -ENODEV; @@ -221,6 +222,7 @@ static int ced_flush(struct file *file, fl_owner_t id) { int res; struct ced_data *ced = file->private_data; + if (ced == NULL) return -ENODEV; @@ -302,6 +304,7 @@ static void ced_writechar_callback(struct urb *urb) int ret; char *pDat = &ced->output_buffer[ced->out_buff_get]; unsigned int dwCount = ced->num_output; /* maximum to send */ + if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ dwCount = OUTBUF_SZ - ced->out_buff_get; @@ -449,12 +452,14 @@ int ced_send_chars(struct ced_data *ced) static void ced_copy_user_space(struct ced_data *ced, int n) { unsigned int area = ced->staged_id; + if (area < MAX_TRANSAREAS) { /* area to be used */ struct transarea *ta = &ced->trans_def[area]; unsigned int offset = ced->staged_done + ced->staged_offset + ta->base_offset; char *coher_buf = ced->coher_staged_io; /* coherent buffer */ + if (!ta->used) { dev_err(&ced->interface->dev, "%s: area %d unused\n", __func__, area); @@ -711,6 +716,7 @@ static void staged_callback(struct urb *urb) /* If we have a transfer waiting, kick it off */ if (ced->xfer_waiting) {/* Got a block xfer waiting? */ int retval; + dev_info(&ced->interface->dev, "*** RWM_Complete *** pending transfer" " will now be set up!!!\n"); @@ -1231,6 +1237,7 @@ static void ced_readchar_callback(struct urb *urb) if (got > 0) { unsigned int i; + if (got < INBUF_SZ) { /* tidy the string */ ced->coher_char_in[got] = 0; @@ -1339,6 +1346,7 @@ static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int err = 0; struct ced_data *ced = file->private_data; + if (!can_accept_io_requests(ced)) /* check we still exist */ return -ENODEV; @@ -1629,6 +1637,7 @@ static void ced_disconnect(struct usb_interface *interface) ced_draw_down(ced); /* ...wait for then kill any io */ for (i = 0; i < MAX_TRANSAREAS; ++i) { int err = ced_clear_area(ced, i); /* ...release any used memory */ + if (err == U14ERR_UNLOCKFAIL) dev_err(&ced->interface->dev, "%s: Area %d was in used\n", __func__, i); @@ -1650,6 +1659,7 @@ static void ced_disconnect(struct usb_interface *interface) void ced_draw_down(struct ced_data *ced) { int time; + dev_dbg(&ced->interface->dev, "%s: called\n", __func__); ced->in_draw_down = true; @@ -1664,6 +1674,7 @@ void ced_draw_down(struct ced_data *ced) static int ced_suspend(struct usb_interface *intf, pm_message_t message) { struct ced_data *ced = usb_get_intfdata(intf); + if (!ced) return 0; ced_draw_down(ced); @@ -1675,6 +1686,7 @@ static int ced_suspend(struct usb_interface *intf, pm_message_t message) static int ced_resume(struct usb_interface *intf) { struct ced_data *ced = usb_get_intfdata(intf); + if (!ced) return 0; dev_dbg(&ced->interface->dev, "%s: called\n", __func__); @@ -1684,6 +1696,7 @@ static int ced_resume(struct usb_interface *intf) static int ced_pre_reset(struct usb_interface *intf) { struct ced_data *ced = usb_get_intfdata(intf); + dev_dbg(&ced->interface->dev, "%s\n", __func__); mutex_lock(&ced->io_mutex); ced_draw_down(ced); @@ -1693,6 +1706,7 @@ static int ced_pre_reset(struct usb_interface *intf) static int ced_post_reset(struct usb_interface *intf) { struct ced_data *ced = usb_get_intfdata(intf); + dev_dbg(&ced->interface->dev, "%s\n", __func__); /* we are sure no URBs are active - no locking needed */ -- cgit From 97a7b0e0f1907b024a0c1fac00721d8bbe7992fa Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:50 +0200 Subject: staging: ced1401: usb1401.c: fix code indent Fix checkpatch warning "suspect code indent for conditional statements" in file usb1401.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index eab5f04728e6..9dce6cc8676a 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1256,7 +1256,8 @@ static void ced_readchar_callback(struct urb *urb) } if ((ced->num_input + got) <= INBUF_SZ) - /* Adjust the buffer count accordingly */ + /* Adjust the buffer count */ + /* accordingly */ ced->num_input += got; } else dev_dbg(&ced->interface->dev, "%s: read ZLP\n", -- cgit From 898065efc51d2c2b26fbea087ab6955f74f6fc75 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:51 +0200 Subject: staging: ced1401: usb1401.c rename camel case variable Rename camel case variable dwCount in function ced_writechar_callback Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 9dce6cc8676a..6d0b01325e05 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -303,26 +303,27 @@ static void ced_writechar_callback(struct urb *urb) int pipe = 0; /* The pipe number to use */ int ret; char *pDat = &ced->output_buffer[ced->out_buff_get]; - unsigned int dwCount = ced->num_output; /* maximum to send */ + /* maximum to send */ + unsigned int count = ced->num_output; - if ((ced->out_buff_get + dwCount) > OUTBUF_SZ) /* does it cross buffer end? */ - dwCount = OUTBUF_SZ - ced->out_buff_get; + if ((ced->out_buff_get + count) > OUTBUF_SZ) /* does it cross buffer end? */ + count = OUTBUF_SZ - ced->out_buff_get; /* we are done with stuff that changes */ spin_unlock(&ced->char_out_lock); - memcpy(ced->coher_char_out, pDat, dwCount); /* copy output data to the buffer */ + memcpy(ced->coher_char_out, pDat, count); /* copy output data to the buffer */ usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, ced->ep_addr[0]), - ced->coher_char_out, dwCount, + ced->coher_char_out, count, ced_writechar_callback, ced); ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; usb_anchor_urb(ced->urb_char_out, &ced->submitted); /* in case we need to kill it */ ret = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", - __func__, dwCount, pDat); + __func__, count, pDat); spin_lock(&ced->char_out_lock); /* grab lock for errors */ if (ret) { ced->pipe_error[pipe] = 1; /* Flag an error to be handled later */ -- cgit From c1dee26673c98fc96e68f70ca1bcb89a439a1e4e Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:52 +0200 Subject: staging: ced1401: usb1401.c: split long lines Fix checkpatch warnings "line over 80 characters" in file usb1401.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 168 ++++++++++++++++++++++++-------------- 1 file changed, 105 insertions(+), 63 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 6d0b01325e05..907b6cfac461 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -1,11 +1,12 @@ -/*********************************************************************************** - CED1401 usb driver. This basic loading is based on the usb-skeleton.c code that is: +/******************************************************************************* + CED1401 usb driver. This basic loading is based on the usb-skeleton.c code that + is: Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) Copyright (C) 2012 Alois Schloegl There is not a great deal of the skeleton left. - All the remainder dealing specifically with the CED1401 is based on drivers written - by CED for other systems (mainly Windows) and is: + All the remainder dealing specifically with the CED1401 is based on drivers + written by CED for other systems (mainly Windows) and is: Copyright (C) 2010 Cambridge Electronic Design Ltd Author Greg P Smith (greg@ced.co.uk) @@ -125,8 +126,9 @@ static void ced_delete(struct kref *kref) { struct ced_data *ced = to_ced_data(kref); - /* Free up the output buffer, then free the output urb. Note that the interface member */ - /* of ced will probably be NULL, so cannot be used to get to dev. */ + /* Free up the output buffer, then free the output urb. Note that the */ + /* interface member of ced will probably be NULL, so cannot be used */ + /* to get to dev. */ usb_free_coherent(ced->udev, OUTBUF_SZ, ced->coher_char_out, ced->urb_char_out->transfer_dma); usb_free_urb(ced->urb_char_out); @@ -183,7 +185,7 @@ static int ced_open(struct inode *inode, struct file *file) kref_put(&ced->kref, ced_delete); goto exit; } - } else { /* uncomment this block if you want exclusive open */ + } else { /* uncomment this block if you want exclusive open */ dev_err(&interface->dev, "%s: fail: already open\n", __func__); retval = -EBUSY; ced->open_count--; @@ -214,7 +216,8 @@ static int ced_release(struct inode *inode, struct file *file) usb_autopm_put_interface(ced->interface); mutex_unlock(&ced->io_mutex); - kref_put(&ced->kref, ced_delete); /* decrement the count on our device */ + /* decrement the count on our device */ + kref_put(&ced->kref, ced_delete); return 0; } @@ -296,7 +299,9 @@ static void ced_writechar_callback(struct urb *urb) spin_lock(&ced->char_out_lock); /* already at irq level */ ced->num_output -= got; /* Now adjust the char send buffer */ ced->out_buff_get += got; /* to match what we did */ - if (ced->out_buff_get >= OUTBUF_SZ) /* Can't do this any earlier as data could be overwritten */ + + /* Can't do this any earlier as data could be overwritten */ + if (ced->out_buff_get >= OUTBUF_SZ) ced->out_buff_get = 0; if (ced->num_output > 0) { /* if more to be done... */ @@ -306,13 +311,15 @@ static void ced_writechar_callback(struct urb *urb) /* maximum to send */ unsigned int count = ced->num_output; - if ((ced->out_buff_get + count) > OUTBUF_SZ) /* does it cross buffer end? */ + /* does it cross buffer end? */ + if ((ced->out_buff_get + count) > OUTBUF_SZ) count = OUTBUF_SZ - ced->out_buff_get; /* we are done with stuff that changes */ spin_unlock(&ced->char_out_lock); - memcpy(ced->coher_char_out, pDat, count); /* copy output data to the buffer */ + /* copy output data to the buffer */ + memcpy(ced->coher_char_out, pDat, count); usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, ced->ep_addr[0]), @@ -320,14 +327,21 @@ static void ced_writechar_callback(struct urb *urb) ced_writechar_callback, ced); ced->urb_char_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->urb_char_out, &ced->submitted); /* in case we need to kill it */ + + /* in case we need to kill it */ + usb_anchor_urb(ced->urb_char_out, &ced->submitted); ret = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", __func__, count, pDat); - spin_lock(&ced->char_out_lock); /* grab lock for errors */ + + /* grab lock for errors */ + spin_lock(&ced->char_out_lock); + if (ret) { - ced->pipe_error[pipe] = 1; /* Flag an error to be handled later */ - ced->send_chars_pending = false; /* Allow other threads again */ + /* Flag an error to be handled later */ + ced->pipe_error[pipe] = 1; + /* Allow other threads again */ + ced->send_chars_pending = false; usb_unanchor_urb(ced->urb_char_out); dev_err(&ced->interface->dev, "%s: usb_submit_urb() returned %d\n", @@ -352,27 +366,34 @@ int ced_send_chars(struct ced_data *ced) spin_lock_irq(&ced->char_out_lock); /* Protect ourselves */ - if ((!ced->send_chars_pending) && /* Not currently sending */ - (ced->num_output > 0) && /* has characters to output */ - (can_accept_io_requests(ced))) { /* and current activity is OK */ + if ((!ced->send_chars_pending) && /* Not currently sending */ + (ced->num_output > 0) && /* has characters to output */ + (can_accept_io_requests(ced))) { /* and current activity is OK */ unsigned int count = ced->num_output; /* Get a copy of the */ /* character count */ - ced->send_chars_pending = true; /* Set flag to lock out other threads */ + + /* Set flag to lock out other threads */ + ced->send_chars_pending = true; dev_dbg(&ced->interface->dev, "Send %d chars to 1401, EP0 flag %d\n", count, ced->n_pipes == 3); - /* If we have only 3 end points we must send the characters to the 1401 using EP0. */ + /* If we have only 3 end points we must send the characters */ + /* to the 1401 using EP0. */ if (ced->n_pipes == 3) { - /* For EP0 character transmissions to the 1401, we have to hang about until they */ - /* are gone, as otherwise without more character IO activity they will never go. */ - unsigned int i = count; /* Local char counter */ - unsigned int index = 0; /* The index into the char buffer */ + /* For EP0 character transmissions to the 1401, we */ + /* have to hang about until they are gone, as */ + /* otherwise without more character IO activity */ + /* they will never go. */ + unsigned int i = count; /* Local char counter */ + unsigned int index = 0; /* The index into the */ + /* char buffer */ - spin_unlock_irq(&ced->char_out_lock); /* Free spinlock as we call USBD */ + /* Free spinlock as we call USBD */ + spin_unlock_irq(&ced->char_out_lock); while ((i > 0) && (retval == U14ERR_NOERROR)) { - /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ + /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ int n = i > 64 ? 64 : i; /* Chars for this xfer, max of 64 */ int sent = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), /* use end point 0 */ @@ -383,7 +404,8 @@ int ced_send_chars(struct ced_data *ced) n, /* how much to send */ 1000); /* timeout in jiffies */ if (sent <= 0) { - retval = sent ? sent : -ETIMEDOUT; /* if 0 chars says we timed out */ + /* if 0 chars says we timed out */ + retval = sent ? sent : -ETIMEDOUT; dev_err(&ced->interface->dev, "Send %d chars by EP0 failed: %d\n", n, retval); @@ -395,19 +417,25 @@ int ced_send_chars(struct ced_data *ced) } } - spin_lock_irq(&ced->char_out_lock); /* Protect ced changes, released by general code */ - ced->out_buff_get = 0; /* so reset the output buffer */ + /* Protect ced changes, released by general code */ + spin_lock_irq(&ced->char_out_lock); + ced->out_buff_get = 0; /* so reset the output buffer */ ced->out_buff_put = 0; - ced->num_output = 0; /* and clear the buffer count */ - ced->send_chars_pending = false; /* Allow other threads again */ - } else { /* Here for sending chars normally - we hold the spin lock */ + ced->num_output = 0; /* and clear the buffer count */ + /* Allow other threads again */ + ced->send_chars_pending = false; + } else { /* Here for sending chars normally - we hold the */ + /* spin lock */ int pipe = 0; /* The pipe number to use */ char *pDat = &ced->output_buffer[ced->out_buff_get]; - if ((ced->out_buff_get + count) > OUTBUF_SZ) /* does it cross buffer end? */ + /* does it cross buffer end? */ + if ((ced->out_buff_get + count) > OUTBUF_SZ) count = OUTBUF_SZ - ced->out_buff_get; - spin_unlock_irq(&ced->char_out_lock); /* we are done with stuff that changes */ - memcpy(ced->coher_char_out, pDat, count); /* copy output data to the buffer */ + /* we are done with stuff that changes */ + spin_unlock_irq(&ced->char_out_lock); + /* copy output data to the buffer */ + memcpy(ced->coher_char_out, pDat, count); usb_fill_bulk_urb(ced->urb_char_out, ced->udev, usb_sndbulkpipe(ced->udev, ced->ep_addr[0]), @@ -422,9 +450,12 @@ int ced_send_chars(struct ced_data *ced) spin_lock_irq(&ced->char_out_lock); if (retval) { - ced->pipe_error[pipe] = 1; /* Flag an error to be handled later */ - ced->send_chars_pending = false; /* Allow other threads again */ - usb_unanchor_urb(ced->urb_char_out); /* remove from list of active urbs */ + /* Flag an error to be handled later */ + ced->pipe_error[pipe] = 1; + /* Allow other threads again */ + ced->send_chars_pending = false; + /* remove from list of active urbs */ + usb_unanchor_urb(ced->urb_char_out); } } } else if (ced->send_chars_pending && (ced->num_output > 0)) @@ -679,8 +710,10 @@ static void staged_callback(struct urb *urb) /* transfer then set the event to notify the */ /* user code to wake up anyone that is */ /* waiting. */ - if ((ta->circular) && /* Circular areas use a simpler test */ - (ta->circ_to_host)) { /* only in supported direction */ + if ((ta->circular) && /* Circular areas use a + simpler test */ + (ta->circ_to_host)) { /* only in supported + direction */ /* Is total data waiting up */ /* to size limit? */ unsigned int dwTotal = @@ -1089,9 +1122,9 @@ static bool ced_read_dma_info(volatile struct dmadesc *dma_desc, (dma_desc->offset > ced->trans_def[ident].length) || /* range/size */ ((dma_desc->offset + dma_desc->size) > - (ced->trans_def[ident]. - length))) { - retval = false; /* bad parameter(s) */ + (ced->trans_def[ident].length))) { + /* bad parameter(s) */ + retval = false; dev_dbg(&ced->interface->dev, "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", __func__, ident, @@ -1176,7 +1209,8 @@ static int ced_handle_esc(struct ced_data *ced, char *ch, dev_err(&ced->interface->dev, "%s: ced_read_write_mem() failed %d\n", __func__, retval); - } else /* This covers non-linear transfer setup */ + } else /* This covers non-linear + transfer setup */ dev_err(&ced->interface->dev, "%s: Unknown block xfer type %d\n", __func__, trans_type); @@ -1499,8 +1533,8 @@ static struct usb_class_driver ced_class = { .minor_base = USB_CED_MINOR_BASE, }; -/* Check that the device that matches a 1401 vendor and product ID is OK to use and */ -/* initialise our struct ced_data. */ +/* Check that the device that matches a 1401 vendor and product ID is OK to */ +/* use and initialise our struct ced_data. */ static int ced_probe(struct usb_interface *interface, const struct usb_device_id *id) { @@ -1515,12 +1549,12 @@ static int ced_probe(struct usb_interface *interface, if (!ced) goto error; - for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ + for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ init_waitqueue_head(&ced->trans_def[i].event); } - /* Put initialises for our stuff here. Note that all of *ced is zero, so */ - /* no need to explicitly zero it. */ + /* Put initialises for our stuff here. Note that all of *ced is + * zero, so no need to explicitly zero it. */ spin_lock_init(&ced->char_out_lock); spin_lock_init(&ced->char_in_lock); spin_lock_init(&ced->staged_lock); @@ -1546,8 +1580,8 @@ static int ced_probe(struct usb_interface *interface, __func__, bcdDevice); goto error; } - /* set up the endpoint information. We only care about the number of EP as */ - /* we know that we are dealing with a 1401 device. */ + /* set up the endpoint information. We only care about the number of */ + /* EP as we know that we are dealing with a 1401 device. */ iface_desc = interface->cur_altsetting; ced->n_pipes = iface_desc->desc.bNumEndpoints; dev_info(&interface->dev, "1401Type=%d with %d End Points\n", @@ -1556,9 +1590,11 @@ static int ced_probe(struct usb_interface *interface, goto error; /* Allocate the URBs we hold for performing transfers */ - ced->urb_char_out = usb_alloc_urb(0, GFP_KERNEL); /* character output URB */ - ced->urb_char_in = usb_alloc_urb(0, GFP_KERNEL); /* character input URB */ - ced->staged_urb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ + ced->urb_char_out = usb_alloc_urb(0, GFP_KERNEL);/* character output + URB */ + ced->urb_char_in = usb_alloc_urb(0, GFP_KERNEL); /* character input + URB */ + ced->staged_urb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ if (!ced->urb_char_out || !ced->urb_char_in || !ced->staged_urb) { dev_err(&interface->dev, "%s: URB alloc failed\n", __func__); goto error; @@ -1585,7 +1621,9 @@ static int ced_probe(struct usb_interface *interface, ced->ep_addr[i] = endpoint->bEndpointAddress; dev_info(&interface->dev, "Pipe %d, ep address %02x\n", i, ced->ep_addr[i]); - if (((ced->n_pipes == 3) && (i == 0)) || /* if char input end point */ + + /* if char input end point */ + if (((ced->n_pipes == 3) && (i == 0)) || ((ced->n_pipes == 4) && (i == 1))) { /* save the endpoint interrupt interval */ ced->interval = endpoint->bInterval; @@ -1593,7 +1631,7 @@ static int ced_probe(struct usb_interface *interface, i, ced->interval); } /* Detect USB2 by checking last ep size (64 if USB1) */ - if (i == ced->n_pipes - 1) { /* if this is the last ep (bulk) */ + if (i == ced->n_pipes - 1) { /* if this is the last ep (bulk) */ ced->is_usb2 = le16_to_cpu(endpoint->wMaxPacketSize) > 64; dev_info(&ced->interface->dev, "USB%d\n", @@ -1622,7 +1660,7 @@ static int ced_probe(struct usb_interface *interface, error: if (ced) - kref_put(&ced->kref, ced_delete); /* frees allocated memory */ + kref_put(&ced->kref, ced_delete); /* frees allocated memory */ return retval; } @@ -1632,19 +1670,23 @@ static void ced_disconnect(struct usb_interface *interface) int minor = interface->minor; int i; - usb_set_intfdata(interface, NULL); /* remove the ced from the interface */ - usb_deregister_dev(interface, &ced_class); /* give back our minor device number */ + /* remove the ced from the interface */ + usb_set_intfdata(interface, NULL); + /* give back our minor device number */ + usb_deregister_dev(interface, &ced_class); - mutex_lock(&ced->io_mutex); /* stop more I/O starting while... */ + mutex_lock(&ced->io_mutex); /* stop more I/O starting while... */ ced_draw_down(ced); /* ...wait for then kill any io */ for (i = 0; i < MAX_TRANSAREAS; ++i) { - int err = ced_clear_area(ced, i); /* ...release any used memory */ + /* ...release any used memory */ + int err = ced_clear_area(ced, i); if (err == U14ERR_UNLOCKFAIL) - dev_err(&ced->interface->dev, "%s: Area %d was in used\n", + dev_err(&ced->interface->dev, + "%s: Area %d was in used\n", __func__, i); } - ced->interface = NULL; /* ...we kill off link to interface */ + ced->interface = NULL; /* ...we kill off link to interface */ mutex_unlock(&ced->io_mutex); usb_kill_anchored_urbs(&ced->submitted); -- cgit From 4f4756fc81a22e9f6bc600b1ed6c10eb2a5162f0 Mon Sep 17 00:00:00 2001 From: Luca Ellero Date: Fri, 11 Jul 2014 16:56:53 +0200 Subject: staging: ced1401: usb1401.c: join quoted strings Fix checkpatch warnings "quoted string split across lines" in file usb1401.c Signed-off-by: Luca Ellero Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ced1401/usb1401.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c index 907b6cfac461..99886778966b 100644 --- a/drivers/staging/ced1401/usb1401.c +++ b/drivers/staging/ced1401/usb1401.c @@ -627,8 +627,7 @@ static void staged_callback(struct urb *urb) ta->blocks[1].size += ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 1 " - "now %d bytes at %d\n", + "RWM_Complete, circ block 1 now %d bytes at %d\n", ta->blocks[1].size, ta->blocks[1].offset); } else { @@ -640,8 +639,7 @@ static void staged_callback(struct urb *urb) ta->blocks[1].size = ced->staged_length; dev_err(&ced->interface->dev, - "%s: ERROR, circ block 1 " - "re-started %d bytes at %d\n", + "%s: ERROR, circ block 1 re-started %d bytes at %d\n", __func__, ta->blocks[1].size, ta->blocks[1].offset); @@ -660,9 +658,7 @@ static void staged_callback(struct urb *urb) ta->blocks[0].size += ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ " - "block 0 now %d bytes " - "at %d\n", + "RWM_Complete, circ block 0 now %d bytes at %d\n", ta->blocks[0].size, ta->blocks[0].offset); @@ -673,9 +669,7 @@ static void staged_callback(struct urb *urb) ta->blocks[1].size = ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ " - "block 1 started %d " - "bytes at %d\n", + "RWM_Complete, circ block 1 started %d bytes at %d\n", ta->blocks[1].size, ta->blocks[1].offset); } @@ -686,8 +680,7 @@ static void staged_callback(struct urb *urb) ta->blocks[0].size = ced->staged_length; dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 0 " - "started %d bytes at %d\n", + "RWM_Complete, circ block 0 started %d bytes at %d\n", ta->blocks[0].size, ta->blocks[0].offset); } @@ -696,8 +689,7 @@ static void staged_callback(struct urb *urb) if (!cancel) { /* Don't generate an event if cancelled */ dev_dbg(&ced->interface->dev, - "RWM_Complete, bCircular %d, bToHost %d, " - "eStart %d, eSize %d\n", + "RWM_Complete, bCircular %d, bToHost %d, eStart %d, eSize %d\n", ta->circular, ta->event_to_host, ta->event_st, ta->event_sz); /* Set a user-mode event... */ @@ -752,8 +744,7 @@ static void staged_callback(struct urb *urb) int retval; dev_info(&ced->interface->dev, - "*** RWM_Complete *** pending transfer" - " will now be set up!!!\n"); + "*** RWM_Complete *** pending transfer will now be set up!!!\n"); retval = ced_read_write_mem(ced, !ced->dma_info.outward, -- cgit From 22505b258be0c112b71ef5a794579965c540188f Mon Sep 17 00:00:00 2001 From: Alexey Khoroshilov Date: Thu, 10 Jul 2014 19:31:41 -0400 Subject: staging: gdm724x: fix leak at failure path in init_usb() If an allocation in init_usb() failed, it returns without deallocation of already allocated resources. The patch fix it and replaces GFP_ATOMIC by GFP_KERNEL in alloc_tx_sdu_struct() and alloc_rx_struct() as long as they are called from probe only. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/gdm_usb.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/gdm_usb.c b/drivers/staging/gdm724x/gdm_usb.c index ee6e40facca7..ea89d530ff3f 100644 --- a/drivers/staging/gdm724x/gdm_usb.c +++ b/drivers/staging/gdm724x/gdm_usb.c @@ -125,11 +125,11 @@ static struct usb_tx_sdu *alloc_tx_sdu_struct(void) { struct usb_tx_sdu *t_sdu; - t_sdu = kzalloc(sizeof(struct usb_tx_sdu), GFP_ATOMIC); + t_sdu = kzalloc(sizeof(struct usb_tx_sdu), GFP_KERNEL); if (!t_sdu) return NULL; - t_sdu->buf = kmalloc(SDU_BUF_SIZE, GFP_ATOMIC); + t_sdu->buf = kmalloc(SDU_BUF_SIZE, GFP_KERNEL); if (!t_sdu->buf) { kfree(t_sdu); return NULL; @@ -183,14 +183,14 @@ static struct usb_rx *alloc_rx_struct(void) struct usb_rx *r = NULL; int ret = 0; - r = kmalloc(sizeof(struct usb_rx), GFP_ATOMIC); + r = kmalloc(sizeof(struct usb_rx), GFP_KERNEL); if (!r) { ret = -ENOMEM; goto out; } - r->urb = usb_alloc_urb(0, GFP_ATOMIC); - r->buf = kmalloc(RX_BUF_SIZE, GFP_ATOMIC); + r->urb = usb_alloc_urb(0, GFP_KERNEL); + r->buf = kmalloc(RX_BUF_SIZE, GFP_KERNEL); if (!r->urb || !r->buf) { ret = -ENOMEM; goto out; @@ -366,6 +366,7 @@ static int init_usb(struct lte_udev *udev) INIT_DELAYED_WORK(&udev->work_rx, do_rx); return 0; fail: + release_usb(udev); return ret; } -- cgit From 7beae9a26a23c43ff0c3fda2e4f8c05a3a9f5c95 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:19 +0100 Subject: staging: vt6656: s_uGetRTSCTSDuration remove camel case camel case changes pDevice -> priv byDurType -> dur_type cbFrameLength -> frame_length byPktType -> pkt_type wRate -> rate bNeedAck -> need_ack uCTSTime -> cts_time uDurTime -> dur_time Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index f8c232359e0d..0e853c16b95e 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -92,9 +92,9 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); -static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, - u8 byDurType, u32 cbFrameLength, u8 byPktType, u16 wRate, - int bNeedAck); +static __le16 s_uGetRTSCTSDuration(struct vnt_private *priv, + u8 dur_type, u32 frame_length, u8 pkt_type, u16 rate, + int need_ack); static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *priv) @@ -229,45 +229,45 @@ static __le16 s_uGetDataDuration(struct vnt_private *pDevice, } //byFreqType: 0=>5GHZ 1=>2.4GHZ -static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, - u32 cbFrameLength, u8 byPktType, u16 wRate, int bNeedAck) +static __le16 s_uGetRTSCTSDuration(struct vnt_private *priv, u8 dur_type, + u32 frame_length, u8 pkt_type, u16 rate, int need_ack) { - u32 uCTSTime = 0, uDurTime = 0; + u32 cts_time = 0, dur_time = 0; - switch (byDurType) { + switch (dur_type) { case RTSDUR_BB: case RTSDUR_BA: case RTSDUR_BA_F0: case RTSDUR_BA_F1: - uCTSTime = vnt_get_frame_time(pDevice->byPreambleType, - byPktType, 14, pDevice->byTopCCKBasicRate); - uDurTime = uCTSTime + 2 * pDevice->uSIFS + - s_uGetTxRsvTime(pDevice, byPktType, - cbFrameLength, wRate, bNeedAck); + cts_time = vnt_get_frame_time(priv->byPreambleType, + pkt_type, 14, priv->byTopCCKBasicRate); + dur_time = cts_time + 2 * priv->uSIFS + + s_uGetTxRsvTime(priv, pkt_type, + frame_length, rate, need_ack); break; case RTSDUR_AA: case RTSDUR_AA_F0: case RTSDUR_AA_F1: - uCTSTime = vnt_get_frame_time(pDevice->byPreambleType, - byPktType, 14, pDevice->byTopOFDMBasicRate); - uDurTime = uCTSTime + 2 * pDevice->uSIFS + - s_uGetTxRsvTime(pDevice, byPktType, - cbFrameLength, wRate, bNeedAck); + cts_time = vnt_get_frame_time(priv->byPreambleType, + pkt_type, 14, priv->byTopOFDMBasicRate); + dur_time = cts_time + 2 * priv->uSIFS + + s_uGetTxRsvTime(priv, pkt_type, + frame_length, rate, need_ack); break; case CTSDUR_BA: case CTSDUR_BA_F0: case CTSDUR_BA_F1: - uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, - byPktType, cbFrameLength, wRate, bNeedAck); + dur_time = priv->uSIFS + s_uGetTxRsvTime(priv, + pkt_type, frame_length, rate, need_ack); break; default: break; } - return cpu_to_le16((u16)uDurTime); + return cpu_to_le16((u16)dur_time); } static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, -- cgit From f2aabee60712099429f81ada389400e4683a2272 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:20 +0100 Subject: staging: vt6656: rxtx rename s_uGetRTSCTSDuration to vnt_get_rtscts_duration_le Function always returns little endian value. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 54 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 0e853c16b95e..c994c080c147 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -30,7 +30,7 @@ * csMgmt_xmit - management tx function * s_uGetDataDuration - get tx data required duration * s_uFillDataHead- fulfill tx data duration header - * s_uGetRTSCTSDuration- get rtx/cts required duration + * vnt_get_rtscts_duration_le- get rtx/cts required duration * s_uGetRTSCTSRsvTime- get rts/cts reserved time * s_uGetTxRsvTime- get frame reserved time * vnt_fill_cts_head- fulfill CTS ctl header @@ -92,7 +92,7 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); -static __le16 s_uGetRTSCTSDuration(struct vnt_private *priv, +static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, u32 frame_length, u8 pkt_type, u16 rate, int need_ack); @@ -229,7 +229,7 @@ static __le16 s_uGetDataDuration(struct vnt_private *pDevice, } //byFreqType: 0=>5GHZ 1=>2.4GHZ -static __le16 s_uGetRTSCTSDuration(struct vnt_private *priv, u8 dur_type, +static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, u32 frame_length, u8 pkt_type, u16 rate, int need_ack) { u32 cts_time = 0, dur_time = 0; @@ -422,12 +422,12 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, - PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); - buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack); - buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, - pkt_type, current_rate, need_ack); + buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, + frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); + buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, + frame_len, pkt_type, current_rate, need_ack); + buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, + frame_len, pkt_type, current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -448,21 +448,21 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, - PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); - buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack); - buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, - pkt_type, current_rate, need_ack); + buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, + frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); + buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, + frame_len, pkt_type, current_rate, need_ack); + buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, + frame_len, pkt_type, current_rate, need_ack); - buf->rts_duration_ba_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F0, + buf->rts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack); - buf->rts_duration_aa_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, + buf->rts_duration_aa_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack); - buf->rts_duration_ba_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F1, + buf->rts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack); - buf->rts_duration_aa_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, + buf->rts_duration_aa_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -481,7 +481,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->ab); - buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -500,13 +500,13 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); - buf->rts_duration_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, + buf->rts_duration_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack); - buf->rts_duration_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, + buf->rts_duration_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -531,15 +531,15 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, cts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); - buf->duration_ba = s_uGetRTSCTSDuration(priv, CTSDUR_BA, + buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, frame_len, pkt_type, current_rate, need_ack); /* Get CTSDuration_ba_f0 */ - buf->cts_duration_ba_f0 = s_uGetRTSCTSDuration(priv, + buf->cts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, CTSDUR_BA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack); /* Get CTSDuration_ba_f1 */ - buf->cts_duration_ba_f1 = s_uGetRTSCTSDuration(priv, + buf->cts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, CTSDUR_BA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack); /* Get CTS Frame body */ @@ -558,7 +558,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, cts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); /* Get CTSDuration_ba */ - buf->duration_ba = s_uGetRTSCTSDuration(priv, + buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, frame_len, pkt_type, current_rate, need_ack); /*Get CTS Frame body*/ -- cgit From a4c2a8a4f3e4454cce89a79dfa2c816ed93b462a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:21 +0100 Subject: staging: vt6656: s_uGetDataDuration remove camel case camel case changes pDevice -> priv byPktType -> pkt_type bNeedAck -> need_ack uAckTime -> ack_time Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index c994c080c147..a89f7fd5a926 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -210,19 +210,20 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, } //byFreqType 0: 5GHz, 1:2.4Ghz -static __le16 s_uGetDataDuration(struct vnt_private *pDevice, - u8 byPktType, int bNeedAck) +static __le16 s_uGetDataDuration(struct vnt_private *piv, + u8 pkt_type, int need_ack) { - u32 uAckTime = 0; + u32 ack_time = 0; - if (bNeedAck) { - if (byPktType == PK_TYPE_11B) - uAckTime = vnt_get_frame_time(pDevice->byPreambleType, - byPktType, 14, pDevice->byTopCCKBasicRate); + if (need_ack) { + if (pkt_type == PK_TYPE_11B) + ack_time = vnt_get_frame_time(piv->byPreambleType, + pkt_type, 14, piv->byTopCCKBasicRate); else - uAckTime = vnt_get_frame_time(pDevice->byPreambleType, - byPktType, 14, pDevice->byTopOFDMBasicRate); - return cpu_to_le16((u16)(pDevice->uSIFS + uAckTime)); + ack_time = vnt_get_frame_time(piv->byPreambleType, + pkt_type, 14, piv->byTopOFDMBasicRate); + + return cpu_to_le16((u16)(piv->uSIFS + ack_time)); } return 0; -- cgit From 435ae3beec81b8573c8b559a0f8a418618fea6ba Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:22 +0100 Subject: staging: vt6656: rename s_uGetDataDuration to vnt_get_duration_le Drop data and the function always returns little endian Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index a89f7fd5a926..3c92360f1efa 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -28,7 +28,7 @@ * vnt_generate_tx_parameter - Generate tx dma required parameter. * csBeacon_xmit - beacon tx function * csMgmt_xmit - management tx function - * s_uGetDataDuration - get tx data required duration + * vnt_get_duration_le - get tx data required duration * s_uFillDataHead- fulfill tx data duration header * vnt_get_rtscts_duration_le- get rtx/cts required duration * s_uGetRTSCTSRsvTime- get rts/cts reserved time @@ -89,7 +89,7 @@ static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate); -static __le16 s_uGetDataDuration(struct vnt_private *pDevice, +static __le16 vnt_get_duration_le(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, @@ -210,7 +210,7 @@ static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, } //byFreqType 0: 5GHz, 1:2.4Ghz -static __le16 s_uGetDataDuration(struct vnt_private *piv, +static __le16 vnt_get_duration_le(struct vnt_private *piv, u8 pkt_type, int need_ack) { u32 ack_time = 0; @@ -305,8 +305,8 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, buf->duration_a = dur; buf->duration_b = dur; } else { - buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->duration_b = s_uGetDataDuration(priv, + buf->duration_a = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_b = vnt_get_duration_le(priv, PK_TYPE_11B, need_ack); } @@ -332,11 +332,11 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ - buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->duration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); + buf->duration_a = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_b = vnt_get_duration_le(priv, PK_TYPE_11B, need_ack); - buf->duration_a_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->duration_a_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_a_f0 = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_a_f1 = vnt_get_duration_le(priv, pkt_type, need_ack); buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); buf->time_stamp_off_b = vnt_time_stamp_off(priv, @@ -356,10 +356,10 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); /* Get Duration and TimeStampOff */ - buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration = vnt_get_duration_le(priv, pkt_type, need_ack); - buf->duration_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->duration_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_f0 = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_f1 = vnt_get_duration_le(priv, pkt_type, need_ack); buf->time_stamp_off = vnt_time_stamp_off(priv, rate); @@ -385,7 +385,7 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, buf->duration = dur; } else { - buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration = vnt_get_duration_le(priv, pkt_type, need_ack); } buf->time_stamp_off = vnt_time_stamp_off(priv, rate); @@ -1027,7 +1027,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, PK_TYPE_11A, &short_head->ab); /* Get Duration and TimeStampOff */ - short_head->duration = s_uGetDataDuration(priv, + short_head->duration = vnt_get_duration_le(priv, PK_TYPE_11A, false); short_head->time_stamp_off = vnt_time_stamp_off(priv, current_rate); @@ -1040,7 +1040,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, PK_TYPE_11B, &short_head->ab); /* Get Duration and TimeStampOff */ - short_head->duration = s_uGetDataDuration(priv, + short_head->duration = vnt_get_duration_le(priv, PK_TYPE_11B, false); short_head->time_stamp_off = vnt_time_stamp_off(priv, current_rate); -- cgit From aadf7d13a7acdc05f09f4ee805b741c345e6137f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:23 +0100 Subject: staging: vt6656: rename s_uGetRTSCTSRsvTime to vnt_get_rtscts_rsvtime_le Function always returns little endian. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 3c92360f1efa..ceaaca0a296e 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -31,7 +31,7 @@ * vnt_get_duration_le - get tx data required duration * s_uFillDataHead- fulfill tx data duration header * vnt_get_rtscts_duration_le- get rtx/cts required duration - * s_uGetRTSCTSRsvTime- get rts/cts reserved time + * vnt_get_rtscts_rsvtime_le- get rts/cts reserved time * s_uGetTxRsvTime- get frame reserved time * vnt_fill_cts_head- fulfill CTS ctl header * s_vFillFragParameter- Set fragment ctl parameter. @@ -86,7 +86,7 @@ static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); -static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, +static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate); static __le16 vnt_get_duration_le(struct vnt_private *pDevice, @@ -166,7 +166,7 @@ static __le16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, } //byFreqType: 0=>5GHZ 1=>2.4GHZ -static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, +static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate) { u32 rrv_time, rts_time, cts_time, ack_time, data_time; @@ -584,11 +584,11 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; - buf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(priv, 2, + buf->rts_rrv_time_aa = vnt_get_rtscts_rsvtime_le(priv, 2, pkt_type, frame_size, current_rate); - buf->rts_rrv_time_ba = s_uGetRTSCTSRsvTime(priv, 1, + buf->rts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 1, pkt_type, frame_size, current_rate); - buf->rts_rrv_time_bb = s_uGetRTSCTSRsvTime(priv, 0, + buf->rts_rrv_time_bb = vnt_get_rtscts_rsvtime_le(priv, 0, pkt_type, frame_size, current_rate); buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, @@ -621,7 +621,7 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, priv->byTopCCKBasicRate, need_ack); - buf->cts_rrv_time_ba = s_uGetRTSCTSRsvTime(priv, 3, + buf->cts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 3, pkt_type, frame_size, current_rate); if (need_mic) @@ -648,10 +648,10 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, if (need_rts) { if (pkt_type == PK_TYPE_11B) - buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 0, + buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 0, pkt_type, frame_size, current_rate); else /* PK_TYPE_11A */ - buf->rts_rrv_time = s_uGetRTSCTSRsvTime(priv, 2, + buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 2, pkt_type, frame_size, current_rate); if (tx_context->fb_option && pkt_type == PK_TYPE_11A) -- cgit From 3815a27bf4e8f68c8b9471b819003de8bf1b4f39 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:24 +0100 Subject: staging: vt6656: rename s_uGetTxRsvTime to vnt_get_rsvtime Drop tx from name Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index ceaaca0a296e..5084434229a9 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -32,7 +32,7 @@ * s_uFillDataHead- fulfill tx data duration header * vnt_get_rtscts_duration_le- get rtx/cts required duration * vnt_get_rtscts_rsvtime_le- get rts/cts reserved time - * s_uGetTxRsvTime- get frame reserved time + * vnt_get_rsvtime- get frame reserved time * vnt_fill_cts_head- fulfill CTS ctl header * s_vFillFragParameter- Set fragment ctl parameter. * s_vFillRTSHead- fulfill RTS ctl header @@ -83,7 +83,7 @@ static const u16 wFB_Opt1[2][5] = { static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); -static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, +static unsigned int vnt_get_rsvtime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, @@ -137,7 +137,7 @@ static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) PK_TYPE_11GB 2 PK_TYPE_11GA 3 */ -static u32 s_uGetTxRsvTime(struct vnt_private *priv, u8 pkt_type, +static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, u32 frame_length, u16 rate, int need_ack) { u32 data_time, ack_time; @@ -161,7 +161,7 @@ static u32 s_uGetTxRsvTime(struct vnt_private *priv, u8 pkt_type, static __le16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, u32 frame_length, u16 rate, int need_ack) { - return cpu_to_le16((u16)s_uGetTxRsvTime(priv, pkt_type, + return cpu_to_le16((u16)vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack)); } @@ -243,7 +243,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); dur_time = cts_time + 2 * priv->uSIFS + - s_uGetTxRsvTime(priv, pkt_type, + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; @@ -253,14 +253,14 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); dur_time = cts_time + 2 * priv->uSIFS + - s_uGetTxRsvTime(priv, pkt_type, + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; case CTSDUR_BA: case CTSDUR_BA_F0: case CTSDUR_BA_F1: - dur_time = priv->uSIFS + s_uGetTxRsvTime(priv, + dur_time = priv->uSIFS + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; -- cgit From 1a4d4509271e1039d06e860b802ec8a9e5fd2b6d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:25 +0100 Subject: staging: vt6656: rename and cleanup wTimeStampOff Rename to vnt_time_stampoff Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 5084434229a9..7faef28cceb4 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -52,10 +52,10 @@ static int msglevel = MSG_LEVEL_INFO; -static const u16 wTimeStampOff[2][MAX_RATE] = { - {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23}, // Long Preamble - {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23}, // Short Preamble - }; +static const u16 vnt_time_stampoff[2][MAX_RATE] = { + {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23},/* Long Preamble */ + {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},/* Short Preamble */ +}; static const u16 wFB_Opt0[2][5] = { {RATE_12M, RATE_18M, RATE_24M, RATE_36M, RATE_48M}, // fallback_rate0 @@ -128,7 +128,7 @@ static struct vnt_usb_send_context static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) { - return cpu_to_le16(wTimeStampOff[priv->byPreambleType % 2] + return cpu_to_le16(vnt_time_stampoff[priv->byPreambleType % 2] [rate % MAX_RATE]); } -- cgit From e3f318744c0c1db01a3edbb1497906ce17b2f9dc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:26 +0100 Subject: staging: vt6656: clean up and rename wFB_Opt0 to vnt_fb_opt0 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7faef28cceb4..6ca263805685 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -57,10 +57,11 @@ static const u16 vnt_time_stampoff[2][MAX_RATE] = { {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},/* Short Preamble */ }; -static const u16 wFB_Opt0[2][5] = { - {RATE_12M, RATE_18M, RATE_24M, RATE_36M, RATE_48M}, // fallback_rate0 - {RATE_12M, RATE_12M, RATE_18M, RATE_24M, RATE_36M}, // fallback_rate1 - }; +static const u16 vnt_fb_opt0[2][5] = { + {RATE_12M, RATE_18M, RATE_24M, RATE_36M, RATE_48M}, /* fallback_rate0 */ + {RATE_12M, RATE_12M, RATE_18M, RATE_24M, RATE_36M}, /* fallback_rate1 */ +}; + static const u16 wFB_Opt1[2][5] = { {RATE_12M, RATE_18M, RATE_24M, RATE_24M, RATE_36M}, // fallback_rate0 {RATE_6M , RATE_6M, RATE_12M, RATE_12M, RATE_18M}, // fallback_rate1 @@ -923,9 +924,9 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_0; priv->tx_rate_fb0 = - wFB_Opt0[FB_RATE0][current_rate - RATE_18M]; + vnt_fb_opt0[FB_RATE0][current_rate - RATE_18M]; priv->tx_rate_fb1 = - wFB_Opt0[FB_RATE1][current_rate - RATE_18M]; + vnt_fb_opt0[FB_RATE1][current_rate - RATE_18M]; fb_option = AUTO_FB_0; } else if (priv->byAutoFBCtrl == AUTO_FB_1) { -- cgit From 2331ba42b5d1ff1625d17fc57d00af560063a3e0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:27 +0100 Subject: staging: vt6656: clean up and rename wFB_Opt1 to vnt_fb_opt1 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 6ca263805685..582bc1f1ad2d 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -62,10 +62,10 @@ static const u16 vnt_fb_opt0[2][5] = { {RATE_12M, RATE_12M, RATE_18M, RATE_24M, RATE_36M}, /* fallback_rate1 */ }; -static const u16 wFB_Opt1[2][5] = { - {RATE_12M, RATE_18M, RATE_24M, RATE_24M, RATE_36M}, // fallback_rate0 - {RATE_6M , RATE_6M, RATE_12M, RATE_12M, RATE_18M}, // fallback_rate1 - }; +static const u16 vnt_fb_opt1[2][5] = { + {RATE_12M, RATE_18M, RATE_24M, RATE_24M, RATE_36M}, /* fallback_rate0 */ + {RATE_6M , RATE_6M, RATE_12M, RATE_12M, RATE_18M}, /* fallback_rate1 */ +}; #define RTSDUR_BB 0 #define RTSDUR_BA 1 @@ -933,9 +933,9 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_1; priv->tx_rate_fb0 = - wFB_Opt1[FB_RATE0][current_rate - RATE_18M]; + vnt_fb_opt1[FB_RATE0][current_rate - RATE_18M]; priv->tx_rate_fb1 = - wFB_Opt1[FB_RATE1][current_rate - RATE_18M]; + vnt_fb_opt1[FB_RATE1][current_rate - RATE_18M]; fb_option = AUTO_FB_1; } -- cgit From a032b16c27a89bccd63f80a3f353180d2852b898 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:28 +0100 Subject: staging: vt6656: rename s_vGetFreeContext to vnt_get_free_context Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 582bc1f1ad2d..bd96627282ae 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -82,7 +82,7 @@ static const u16 vnt_fb_opt1[2][5] = { #define DATADUR_A_F0 12 #define DATADUR_A_F1 13 -static struct vnt_usb_send_context *s_vGetFreeContext(struct vnt_private *); +static struct vnt_usb_send_context *vnt_get_free_context(struct vnt_private *); static unsigned int vnt_get_rsvtime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); @@ -98,7 +98,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, int need_ack); static struct vnt_usb_send_context - *s_vGetFreeContext(struct vnt_private *priv) + *vnt_get_free_context(struct vnt_private *priv) { struct vnt_usb_send_context *context = NULL; int ii; @@ -831,7 +831,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) spin_lock_irqsave(&priv->lock, flags); - tx_context = s_vGetFreeContext(priv); + tx_context = vnt_get_free_context(priv); if (!tx_context) { dev_dbg(&priv->usb->dev, "%s No free context\n", __func__); spin_unlock_irqrestore(&priv->lock, flags); @@ -1006,7 +1006,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, spin_lock_irqsave(&priv->lock, flags); - context = s_vGetFreeContext(priv); + context = vnt_get_free_context(priv); if (!context) { dev_dbg(&priv->usb->dev, "%s No free context!\n", __func__); spin_unlock_irqrestore(&priv->lock, flags); -- cgit From 1a9c1005cba3abc6cd2a738b2a1485dbb90aa293 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:29 +0100 Subject: staging: vt6656: rxtx remove static declarations all functions are in visibility order. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index bd96627282ae..733c86efef60 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -82,21 +82,6 @@ static const u16 vnt_fb_opt1[2][5] = { #define DATADUR_A_F0 12 #define DATADUR_A_F1 13 -static struct vnt_usb_send_context *vnt_get_free_context(struct vnt_private *); - -static unsigned int vnt_get_rsvtime(struct vnt_private *pDevice, u8 byPktType, - u32 cbFrameLength, u16 wRate, int bNeedAck); - -static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, - u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate); - -static __le16 vnt_get_duration_le(struct vnt_private *pDevice, - u8 byPktType, int bNeedAck); - -static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, - u8 dur_type, u32 frame_length, u8 pkt_type, u16 rate, - int need_ack); - static struct vnt_usb_send_context *vnt_get_free_context(struct vnt_private *priv) { -- cgit From ed71f5e21db9479c78318dc13126946b3aacfa17 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:30 +0100 Subject: staging: vt6656: rxtx remove unneeded comments Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 37 ------------------------------------- 1 file changed, 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 733c86efef60..35edf413f3c9 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -26,18 +26,11 @@ * * Functions: * vnt_generate_tx_parameter - Generate tx dma required parameter. - * csBeacon_xmit - beacon tx function - * csMgmt_xmit - management tx function * vnt_get_duration_le - get tx data required duration - * s_uFillDataHead- fulfill tx data duration header * vnt_get_rtscts_duration_le- get rtx/cts required duration * vnt_get_rtscts_rsvtime_le- get rts/cts reserved time * vnt_get_rsvtime- get frame reserved time * vnt_fill_cts_head- fulfill CTS ctl header - * s_vFillFragParameter- Set fragment ctl parameter. - * s_vFillRTSHead- fulfill RTS ctl header - * vDMA0_tx_80211- tx 802.11 frame via dma0 - * vGenerateFIFOHeader- Generate tx FIFO ctl header * * Revision History: * @@ -118,11 +111,6 @@ static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) [rate % MAX_RATE]); } -/*byPktType : PK_TYPE_11A 0 - PK_TYPE_11B 1 - PK_TYPE_11GB 2 - PK_TYPE_11GA 3 -*/ static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, u32 frame_length, u16 rate, int need_ack) { @@ -151,7 +139,6 @@ static __le16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, frame_length, rate, need_ack)); } -//byFreqType: 0=>5GHZ 1=>2.4GHZ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_length, u16 current_rate) { @@ -195,7 +182,6 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, return cpu_to_le16((u16)rrv_time); } -//byFreqType 0: 5GHz, 1:2.4Ghz static __le16 vnt_get_duration_le(struct vnt_private *piv, u8 pkt_type, int need_ack) { @@ -215,7 +201,6 @@ static __le16 vnt_get_duration_le(struct vnt_private *piv, return 0; } -//byFreqType: 0=>5GHZ 1=>2.4GHZ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, u32 frame_length, u8 pkt_type, u16 rate, int need_ack) { @@ -658,28 +643,6 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, &head->data_head_ab, frame_size, need_ack); } -/*+ - * - * Description: - * Generate FIFO control for MAC & Baseband controller - * - * Parameters: - * In: - * pDevice - Pointer to adpater - * pTxDataHead - Transmit Data Buffer - * pTxBufHead - pTxBufHead - * pvRrvTime - pvRrvTime - * pvRTS - RTS Buffer - * pCTS - CTS Buffer - * cbFrameSize - Transmit Data Length (Hdr+Payload+FCS) - * bNeedACK - If need ACK - * Out: - * none - * - * Return Value: none - * --*/ - static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, u8 pkt_type, u16 current_rate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, -- cgit From 604631ff0b2b9e36d9ad1ebe389687f5ed7b7b90 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 01:08:31 +0100 Subject: staging: vt6656: rxtx replace debug messages DBG_PRT Replace with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 35edf413f3c9..3dc6d071f012 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -43,8 +43,6 @@ #include "rf.h" #include "usbpipe.h" -static int msglevel = MSG_LEVEL_INFO; - static const u16 vnt_time_stampoff[2][MAX_RATE] = { {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23},/* Long Preamble */ {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},/* Short Preamble */ @@ -81,7 +79,7 @@ static struct vnt_usb_send_context struct vnt_usb_send_context *context = NULL; int ii; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GetFreeContext()\n"); + dev_dbg(&priv->usb->dev, "%s\n", __func__); for (ii = 0; ii < priv->cbTD; ii++) { if (!priv->apTD[ii]) @@ -100,7 +98,7 @@ static struct vnt_usb_send_context } if (ii == priv->cbTD) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"No Free Tx Context\n"); + dev_dbg(&priv->usb->dev, "%s No Free Tx Context\n", __func__); return NULL; } -- cgit From 6299ae5aa7bc82cf0cd43e800c4857dba3e4d6e5 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:22:04 +0900 Subject: staging: dgap: redundant NULL and magic check in dgap_get_modem_info() The "ch" is already checking in caller. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 9affc5bf7228..79ea11696a23 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -3061,9 +3061,6 @@ static int dgap_get_modem_info(struct channel_t *ch, unsigned int __user *value) ulong lock_flags; int rc; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EIO; - spin_lock_irqsave(&ch->ch_lock, lock_flags); mstat = readb(&(ch->ch_bs->m_stat)); -- cgit From 9d9011bd8697bd636e54ae96f2895f170a8d4279 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:22:21 +0900 Subject: staging: dgap: remove unused variable in dgap_param() The "ts" is not used in dgap_param(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 79ea11696a23..ad7b462796ed 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -5068,7 +5068,6 @@ static void dgap_firmware_reset_port(struct channel_t *ch) *=======================================================================*/ static int dgap_param(struct tty_struct *tty) { - struct ktermios *ts; struct board_t *bd; struct channel_t *ch; struct bs_t __iomem *bs; @@ -5098,8 +5097,6 @@ static int dgap_param(struct tty_struct *tty) if (!bs) return -EIO; - ts = &tty->termios; - /* * If baud rate is zero, flush queues, and set mval to drop DTR. */ -- cgit From ab6cdcb4261e0d697292a516452904bc6c7e8404 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:22:39 +0900 Subject: staging: dgap: removes redundant null check and change the paramter for dgap_param() The dgap_param() has a paramter which is tty_struct and use variables in that struct. That variables which are "ch", "bd", "bs" and "un" do not need to check NULL so these statements are removed. And also change the parameter of this function because it is possible to let someone know what paramters are needed for this function. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 49 ++++++++++++--------------------------------- 1 file changed, 13 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index ad7b462796ed..4e5b5940ccfe 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -141,7 +141,7 @@ static void dgap_cmdb(struct channel_t *ch, u8 cmd, u8 byte1, u8 byte2, uint ncmds); static void dgap_cmdw(struct channel_t *ch, u8 cmd, u16 word, uint ncmds); static void dgap_wmove(struct channel_t *ch, char *buf, uint cnt); -static int dgap_param(struct tty_struct *tty); +static int dgap_param(struct channel_t *ch, struct board_t *bd, u32 un_type); static void dgap_parity_scan(struct channel_t *ch, unsigned char *cbuf, unsigned char *fbuf, int *len); static uint dgap_get_custom_baud(struct channel_t *ch); @@ -2029,7 +2029,7 @@ static int dgap_tty_open(struct tty_struct *tty, struct file *file) /* * Run param in case we changed anything */ - dgap_param(tty); + dgap_param(ch, brd, un->un_type); /* * follow protocol for opening port @@ -2927,7 +2927,7 @@ static int dgap_tty_tiocmset(struct tty_struct *tty, ch->ch_mval &= ~(D_DTR(ch)); } - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3173,7 +3173,7 @@ static int dgap_set_modem_info(struct tty_struct *tty, unsigned int command, spin_lock_irqsave(&bd->bd_lock, lock_flags); spin_lock_irqsave(&ch->ch_lock, lock_flags2); - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3285,7 +3285,7 @@ static int dgap_tty_digiseta(struct tty_struct *tty, if (ch->ch_digi.digi_offlen > DIGI_PLEN) ch->ch_digi.digi_offlen = DIGI_PLEN; - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3372,7 +3372,7 @@ static int dgap_tty_digisetedelay(struct tty_struct *tty, int __user *new_info) writew((u16) new_digi, &(ch->ch_bs->edelay)); - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3460,7 +3460,7 @@ static int dgap_tty_digisetcustombaud(struct tty_struct *tty, ch->ch_custom_speed = new_rate; - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3507,7 +3507,7 @@ static void dgap_tty_set_termios(struct tty_struct *tty, ch->ch_stopc = tty->termios.c_cc[VSTOP]; dgap_carrier(ch); - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -3914,7 +3914,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, spin_lock_irqsave(&ch->ch_lock, lock_flags2); tty->termios.c_cflag = ((tty->termios.c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0)); - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); @@ -4124,7 +4124,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case DIGI_RESET_PORT: dgap_firmware_reset_port(ch); - dgap_param(tty); + dgap_param(ch, bd, un->un_type); spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); return 0; @@ -5066,37 +5066,14 @@ static void dgap_firmware_reset_port(struct channel_t *ch) * struct tty_struct * - TTY for port. * *=======================================================================*/ -static int dgap_param(struct tty_struct *tty) +static int dgap_param(struct channel_t *ch, struct board_t *bd, u32 un_type) { - struct board_t *bd; - struct channel_t *ch; - struct bs_t __iomem *bs; - struct un_t *un; u16 head; u16 cflag; u16 iflag; u8 mval; u8 hflow; - if (!tty || tty->magic != TTY_MAGIC) - return -EIO; - - un = (struct un_t *) tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EIO; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EIO; - - bd = ch->ch_bd; - if (!bd || bd->magic != DGAP_BOARD_MAGIC) - return -EIO; - - bs = ch->ch_bs; - if (!bs) - return -EIO; - /* * If baud rate is zero, flush queues, and set mval to drop DTR. */ @@ -5176,7 +5153,7 @@ static int dgap_param(struct tty_struct *tty) * terminal unit is NOT open */ if (!(ch->ch_tun.un_flags & UN_ISOPEN) && - (un->un_type == DGAP_PRINT)) + un_type == DGAP_PRINT) baud = C_BAUD(ch->ch_pun.un_tty) & 0xff; else baud = C_BAUD(ch->ch_tun.un_tty) & 0xff; @@ -5374,7 +5351,7 @@ static int dgap_param(struct tty_struct *tty) /* * Read modem signals, and then call carrier function. */ - ch->ch_mistat = readb(&(bs->m_stat)); + ch->ch_mistat = readb(&(ch->ch_bs->m_stat)); dgap_carrier(ch); /* -- cgit From ffc11c103ac5ba2fa06794be5667fbd183bff056 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:22:58 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_tty_digiseta() Null checks in dgap_tty_digiseta() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch" and "bd" which are used in dgap_tty_digiseta(). Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 4e5b5940ccfe..160a960eb210 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -88,8 +88,8 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg); static int dgap_tty_digigeta(struct tty_struct *tty, struct digi_t __user *retinfo); -static int dgap_tty_digiseta(struct tty_struct *tty, - struct digi_t __user *new_info); +static int dgap_tty_digiseta(struct channel_t *ch, struct board_t *bd, + struct un_t *un, struct digi_t __user *new_info); static int dgap_tty_digigetedelay(struct tty_struct *tty, int __user *retinfo); static int dgap_tty_digisetedelay(struct tty_struct *tty, int __user *new_info); static int dgap_tty_write_room(struct tty_struct *tty); @@ -3231,31 +3231,13 @@ static int dgap_tty_digigeta(struct tty_struct *tty, * * */ -static int dgap_tty_digiseta(struct tty_struct *tty, - struct digi_t __user *new_info) +static int dgap_tty_digiseta(struct channel_t *ch, struct board_t *bd, + struct un_t *un, struct digi_t __user *new_info) { - struct board_t *bd; - struct channel_t *ch; - struct un_t *un; struct digi_t new_digi; ulong lock_flags = 0; unsigned long lock_flags2; - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EFAULT; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EFAULT; - - bd = ch->ch_bd; - if (!bd || bd->magic != DGAP_BOARD_MAGIC) - return -EFAULT; - if (copy_from_user(&new_digi, new_info, sizeof(struct digi_t))) return -EFAULT; @@ -4100,7 +4082,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case DIGI_SETA: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digiseta(tty, uarg); + return dgap_tty_digiseta(ch, bd, un, uarg); case DIGI_GEDELAY: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); -- cgit From 29a171c18fa8c136e535db62a888205f7fb9699c Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:23:16 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_tty_digigeta() Null checks in dgap_tty_digigeta() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch" and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 160a960eb210..7ebbf507204f 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -86,8 +86,8 @@ static int dgap_block_til_ready(struct tty_struct *tty, struct file *file, struct channel_t *ch); static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg); -static int dgap_tty_digigeta(struct tty_struct *tty, - struct digi_t __user *retinfo); +static int dgap_tty_digigeta(struct channel_t *ch, struct un_t *un, + struct digi_t __user *retinfo); static int dgap_tty_digiseta(struct channel_t *ch, struct board_t *bd, struct un_t *un, struct digi_t __user *new_info); static int dgap_tty_digigetedelay(struct tty_struct *tty, int __user *retinfo); @@ -3189,28 +3189,15 @@ static int dgap_set_modem_info(struct tty_struct *tty, unsigned int command, * * */ -static int dgap_tty_digigeta(struct tty_struct *tty, - struct digi_t __user *retinfo) +static int dgap_tty_digigeta(struct channel_t *ch, struct un_t *un, + struct digi_t __user *retinfo) { - struct channel_t *ch; - struct un_t *un; struct digi_t tmp; ulong lock_flags; if (!retinfo) return -EFAULT; - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EFAULT; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EFAULT; - memset(&tmp, 0, sizeof(tmp)); spin_lock_irqsave(&ch->ch_lock, lock_flags); @@ -4060,7 +4047,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, /* get information for ditty */ spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digigeta(tty, uarg); + return dgap_tty_digigeta(ch, un, uarg); case DIGI_SETAW: case DIGI_SETAF: -- cgit From 4285c97476fee11018caa9c0d6577252a22a4507 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:23:34 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_set_modem_info() Null checks in dgap_set_modem_info() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch", "bd" and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 7ebbf507204f..1d9e3e8ab6b1 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -86,8 +86,7 @@ static int dgap_block_til_ready(struct tty_struct *tty, struct file *file, struct channel_t *ch); static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg); -static int dgap_tty_digigeta(struct channel_t *ch, struct un_t *un, - struct digi_t __user *retinfo); +static int dgap_tty_digigeta(struct channel_t *ch, struct digi_t __user *retinfo); static int dgap_tty_digiseta(struct channel_t *ch, struct board_t *bd, struct un_t *un, struct digi_t __user *new_info); static int dgap_tty_digigetedelay(struct tty_struct *tty, int __user *retinfo); @@ -102,8 +101,8 @@ static void dgap_tty_flush_chars(struct tty_struct *tty); static void dgap_tty_flush_buffer(struct tty_struct *tty); static void dgap_tty_hangup(struct tty_struct *tty); static int dgap_wait_for_drain(struct tty_struct *tty); -static int dgap_set_modem_info(struct tty_struct *tty, unsigned int command, - unsigned int __user *value); +static int dgap_set_modem_info(struct channel_t *ch, struct board_t *bd, struct un_t *un, + unsigned int command, unsigned int __user *value); static int dgap_get_modem_info(struct channel_t *ch, unsigned int __user *value); static int dgap_tty_digisetcustombaud(struct tty_struct *tty, @@ -3094,32 +3093,14 @@ static int dgap_get_modem_info(struct channel_t *ch, unsigned int __user *value) * * Set modem signals, called by ld. */ -static int dgap_set_modem_info(struct tty_struct *tty, unsigned int command, - unsigned int __user *value) +static int dgap_set_modem_info(struct channel_t *ch, struct board_t *bd, struct un_t *un, + unsigned int command, unsigned int __user *value) { - struct board_t *bd; - struct channel_t *ch; - struct un_t *un; int ret; unsigned int arg; ulong lock_flags; ulong lock_flags2; - if (!tty || tty->magic != TTY_MAGIC) - return -EIO; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EIO; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EIO; - - bd = ch->ch_bd; - if (!bd || bd->magic != DGAP_BOARD_MAGIC) - return -EIO; - ret = get_user(arg, value); if (ret) return ret; @@ -3189,8 +3170,7 @@ static int dgap_set_modem_info(struct tty_struct *tty, unsigned int command, * * */ -static int dgap_tty_digigeta(struct channel_t *ch, struct un_t *un, - struct digi_t __user *retinfo) +static int dgap_tty_digigeta(struct channel_t *ch, struct digi_t __user *retinfo) { struct digi_t tmp; ulong lock_flags; @@ -3899,7 +3879,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case TIOCMSET: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_set_modem_info(tty, cmd, uarg); + return dgap_set_modem_info(ch, bd, un, cmd, uarg); /* * Here are any additional ioctl's that we want to implement @@ -4047,7 +4027,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, /* get information for ditty */ spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digigeta(ch, un, uarg); + return dgap_tty_digigeta(ch, uarg); case DIGI_SETAW: case DIGI_SETAF: -- cgit From ccbe7e59e6be0995dfb47399cf3788c2f47ef53c Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:23:54 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_tty_digisetedelay() Null checks in dgap_tty_digisetedelay() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch", "bd and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 1d9e3e8ab6b1..6bc4a305c629 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -90,7 +90,8 @@ static int dgap_tty_digigeta(struct channel_t *ch, struct digi_t __user *retinfo static int dgap_tty_digiseta(struct channel_t *ch, struct board_t *bd, struct un_t *un, struct digi_t __user *new_info); static int dgap_tty_digigetedelay(struct tty_struct *tty, int __user *retinfo); -static int dgap_tty_digisetedelay(struct tty_struct *tty, int __user *new_info); +static int dgap_tty_digisetedelay(struct channel_t *ch, struct board_t *bd, + struct un_t *un, int __user *new_info); static int dgap_tty_write_room(struct tty_struct *tty); static int dgap_tty_chars_in_buffer(struct tty_struct *tty); static void dgap_tty_start(struct tty_struct *tty); @@ -3289,30 +3290,13 @@ static int dgap_tty_digigetedelay(struct tty_struct *tty, int __user *retinfo) * Ioctl to set the EDELAY setting * */ -static int dgap_tty_digisetedelay(struct tty_struct *tty, int __user *new_info) +static int dgap_tty_digisetedelay(struct channel_t *ch, struct board_t *bd, + struct un_t *un, int __user *new_info) { - struct board_t *bd; - struct channel_t *ch; - struct un_t *un; int new_digi; ulong lock_flags; ulong lock_flags2; - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EFAULT; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EFAULT; - - bd = ch->ch_bd; - if (!bd || bd->magic != DGAP_BOARD_MAGIC) - return -EFAULT; - if (copy_from_user(&new_digi, new_info, sizeof(int))) return -EFAULT; @@ -4059,7 +4043,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case DIGI_SEDELAY: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digisetedelay(tty, uarg); + return dgap_tty_digisetedelay(ch, bd, un, uarg); case DIGI_GETCUSTOMBAUD: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); -- cgit From 501bcd4f9bf93d29881fddafcab1982836c41404 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:24:14 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_tty_digigetcustombaud() Null checks in dgap_tty_digigetcustombaud() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch" and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 6bc4a305c629..3b769585af61 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -108,8 +108,8 @@ static int dgap_get_modem_info(struct channel_t *ch, unsigned int __user *value); static int dgap_tty_digisetcustombaud(struct tty_struct *tty, int __user *new_info); -static int dgap_tty_digigetcustombaud(struct tty_struct *tty, - int __user *retinfo); +static int dgap_tty_digigetcustombaud(struct channel_t *ch, struct un_t *un, + int __user *retinfo); static int dgap_tty_tiocmget(struct tty_struct *tty); static int dgap_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear); @@ -3318,28 +3318,15 @@ static int dgap_tty_digisetedelay(struct channel_t *ch, struct board_t *bd, * * Ioctl to get the current custom baud rate setting. */ -static int dgap_tty_digigetcustombaud(struct tty_struct *tty, - int __user *retinfo) +static int dgap_tty_digigetcustombaud(struct channel_t *ch, struct un_t *un, + int __user *retinfo) { - struct channel_t *ch; - struct un_t *un; int tmp; ulong lock_flags; if (!retinfo) return -EFAULT; - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EFAULT; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EFAULT; - memset(&tmp, 0, sizeof(tmp)); spin_lock_irqsave(&ch->ch_lock, lock_flags); @@ -4048,7 +4035,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case DIGI_GETCUSTOMBAUD: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digigetcustombaud(tty, uarg); + return dgap_tty_digigetcustombaud(ch, un, uarg); case DIGI_SETCUSTOMBAUD: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); -- cgit From db6fc2df9c353c9865b4c27c982efeb8fc37a523 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Fri, 11 Jul 2014 19:24:34 +0900 Subject: staging: dgap: removes redundant null check and change paramter for dgap_tty_digisetcustombaud() Null checks in dgap_tty_digisetcustombaud() are already done by dgap_tty_ioctl() and change "tty" as a paramter of this function to "ch", "bd and "un". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 3b769585af61..32988a8aead4 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -106,8 +106,8 @@ static int dgap_set_modem_info(struct channel_t *ch, struct board_t *bd, struct unsigned int command, unsigned int __user *value); static int dgap_get_modem_info(struct channel_t *ch, unsigned int __user *value); -static int dgap_tty_digisetcustombaud(struct tty_struct *tty, - int __user *new_info); +static int dgap_tty_digisetcustombaud(struct channel_t *ch, struct board_t *bd, + struct un_t *un, int __user *new_info); static int dgap_tty_digigetcustombaud(struct channel_t *ch, struct un_t *un, int __user *retinfo); static int dgap_tty_tiocmget(struct tty_struct *tty); @@ -3344,32 +3344,13 @@ static int dgap_tty_digigetcustombaud(struct channel_t *ch, struct un_t *un, * * Ioctl to set the custom baud rate setting */ -static int dgap_tty_digisetcustombaud(struct tty_struct *tty, - int __user *new_info) +static int dgap_tty_digisetcustombaud(struct channel_t *ch, struct board_t *bd, + struct un_t *un, int __user *new_info) { - struct board_t *bd; - struct channel_t *ch; - struct un_t *un; uint new_rate; ulong lock_flags; ulong lock_flags2; - if (!tty || tty->magic != TTY_MAGIC) - return -EFAULT; - - un = tty->driver_data; - if (!un || un->magic != DGAP_UNIT_MAGIC) - return -EFAULT; - - ch = un->un_ch; - if (!ch || ch->magic != DGAP_CHANNEL_MAGIC) - return -EFAULT; - - bd = ch->ch_bd; - if (!bd || bd->magic != DGAP_BOARD_MAGIC) - return -EFAULT; - - if (copy_from_user(&new_rate, new_info, sizeof(unsigned int))) return -EFAULT; @@ -4040,7 +4021,7 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd, case DIGI_SETCUSTOMBAUD: spin_unlock_irqrestore(&ch->ch_lock, lock_flags2); spin_unlock_irqrestore(&bd->bd_lock, lock_flags); - return dgap_tty_digisetcustombaud(tty, uarg); + return dgap_tty_digisetcustombaud(ch, bd, un, uarg); case DIGI_RESET_PORT: dgap_firmware_reset_port(ch); -- cgit From b63d6ed6ca857d9aac6e93635c9fc42656cd0c44 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 20:02:17 +0100 Subject: staging: vt6656: vnt_init_bands fix missing default. The default is that all the channels are enabled for rf types not mentioned here. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/channel.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 5202633f752f..fb1838e9b292 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -148,6 +148,7 @@ void vnt_init_bands(struct vnt_private *priv) switch (priv->byRFType) { case RF_AIROHA7230: case RF_VT3342A0: + default: ch = vnt_channels_5ghz; for (i = 0; i < ARRAY_SIZE(vnt_channels_5ghz); i++) { -- cgit From f9ef05ce13e4dd66e8699e80492488bd8f01b528 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 11 Jul 2014 20:02:18 +0100 Subject: staging: vt6656: Fix pairwise key for non station modes patch 'vnt_set_keymode don't save pairwise key entry' caused a slight regression in access point mode Only don't save in station mode. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/key.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 7275f09e88b7..b76ee3106d5f 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -98,8 +98,9 @@ static int vnt_set_keymode(struct ieee80211_hw *hw, u8 *mac_addr, case VNT_KEY_PAIRWISE: key_mode |= mode; key_inx = 4; - /* Don't save entry for pairwise key */ - clear_bit(entry, &priv->key_entry_inuse); + /* Don't save entry for pairwise key for station mode */ + if (priv->op_mode == NL80211_IFTYPE_STATION) + clear_bit(entry, &priv->key_entry_inuse); break; default: return -EINVAL; -- cgit From a42ed4a564d8ff7eec3e96d02796aeb43204f9e1 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 10 Jul 2014 23:01:26 -0500 Subject: staging: comedi: addi_apci_1564: remove len_chanlist from di and do subdevices This value is only needed for subdevices that support async commands. The comedi core will default the value to 1 when it is not initialized. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 5924421bc949..675054f080d7 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -385,7 +385,6 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->subdev_flags = SDF_READABLE; s->n_chan = 32; s->maxdata = 1; - s->len_chanlist = 32; s->range_table = &range_digital; s->insn_bits = apci1564_di_insn_bits; @@ -395,7 +394,6 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->subdev_flags = SDF_WRITEABLE; s->n_chan = 32; s->maxdata = 0xffffffff; - s->len_chanlist = 32; s->range_table = &range_digital; s->insn_config = apci1564_do_config; s->insn_bits = apci1564_do_insn_bits; -- cgit From eb2547db7525d14f67c6c4ad19b1ccfe14ef63ac Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 10 Jul 2014 23:02:04 -0500 Subject: staging: comedi: addi_apci_1564: remove unnecessary dev->board_name initialization The dev->board_name is now initialized by the comedi core before calling the(*attach) or (*auto_attach) function in a driver. As long as the driver does no additional probing, it's no longer necessary initialize the board_name. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 675054f080d7..e3dcab76a3bc 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -353,8 +353,6 @@ static int apci1564_auto_attach(struct comedi_device *dev, struct comedi_subdevice *s; int ret; - dev->board_name = dev->driver->driver_name; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) return -ENOMEM; -- cgit From 71893bb077a61c7b590bf7780422407a01a409c0 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 10 Jul 2014 23:02:27 -0500 Subject: staging: comedi: addi_apci_1564: remove null check of devpriv in apci1564_detach() There is no need to test whether devpriv is null in this function. The check looks left over and we can just remove it. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index e3dcab76a3bc..f91aedd9c869 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -433,14 +433,10 @@ static int apci1564_auto_attach(struct comedi_device *dev, static void apci1564_detach(struct comedi_device *dev) { - struct apci1564_private *devpriv = dev->private; - - if (devpriv) { - if (dev->iobase) - apci1564_reset(dev); - if (dev->irq) - free_irq(dev->irq, dev); - } + if (dev->iobase) + apci1564_reset(dev); + if (dev->irq) + free_irq(dev->irq, dev); comedi_pci_disable(dev); } -- cgit From 389e4dea54e2303059dff4eacd36188d4b6fe6c3 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 10 Jul 2014 23:02:55 -0500 Subject: staging: comedi: addi_apci_1564: fix s->maxdata assignment in do subdevice init. s->maxdata for the do subdevice should be 1, however currently it is being set to 0xffffffff. Fix this. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index f91aedd9c869..1e25342ebc81 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -391,7 +391,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->type = COMEDI_SUBD_DO; s->subdev_flags = SDF_WRITEABLE; s->n_chan = 32; - s->maxdata = 0xffffffff; + s->maxdata = 1; s->range_table = &range_digital; s->insn_config = apci1564_do_config; s->insn_bits = apci1564_do_insn_bits; -- cgit From d2fd4d395abb5c5695fb754c82fc7c20f8537852 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Fri, 11 Jul 2014 15:38:30 +0100 Subject: staging: comedi: ni_atmio16d.c: remove pointless condition The issue was discovered with static analysis and has two instances in this file. The code looks like this if (x < 65536000) { ... } else if (x < 655360000) { ... } else if (x <= 0xffffffff /* 6553600000 */) { ... } else if (x <= 0xffffffff /* 65536000000 */) { ... } The meaning of this block is to select appropriate clock frequency for interval timer basing on "x", which is amount of time. Notes: 1. That last condition matches previous one - that's the issue. 2. Decimal numbers in comments don't match hex numbers in expressions. But in first case the numbers have same order, while in the second case the hex number is the same, and the decimal one is 10 times bigger. 3. Actually type of "x" is "unsigned int", so its exact upper limit is not obviously known. 4. There's no "else" block. So it makes sense to make an "else" block from last "else if" case. The code inside the block seems correct for such usage. [ Actually, get rid of the final "else if" case and change the next-to-last "else if" case to an "else" as the upper limit of "x" _is_ known to be 0xffffffff (UINT_MAX), which is less than 6553600000 -- Ian ] Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=79871 Reported-by: David Binderman Signed-off-by: Andrey Utkin Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio16d.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio16d.c b/drivers/staging/comedi/drivers/ni_atmio16d.c index 6ad27f50c6ec..b1b4744bc42e 100644 --- a/drivers/staging/comedi/drivers/ni_atmio16d.c +++ b/drivers/staging/comedi/drivers/ni_atmio16d.c @@ -335,12 +335,9 @@ static int atmio16d_ai_cmd(struct comedi_device *dev, } else if (cmd->convert_arg < 655360000) { base_clock = CLOCK_100_KHZ; timer = cmd->convert_arg / 10000; - } else if (cmd->convert_arg <= 0xffffffff /* 6553600000 */) { + } else /* cmd->convert_arg < 6553600000 */ { base_clock = CLOCK_10_KHZ; timer = cmd->convert_arg / 100000; - } else if (cmd->convert_arg <= 0xffffffff /* 65536000000 */) { - base_clock = CLOCK_1_KHZ; - timer = cmd->convert_arg / 1000000; } outw(0xFF03, dev->iobase + AM9513A_COM_REG); outw(base_clock, dev->iobase + AM9513A_DATA_REG); @@ -403,12 +400,9 @@ static int atmio16d_ai_cmd(struct comedi_device *dev, } else if (cmd->scan_begin_arg < 655360000) { base_clock = CLOCK_100_KHZ; timer = cmd->scan_begin_arg / 10000; - } else if (cmd->scan_begin_arg < 0xffffffff /* 6553600000 */) { + } else /* cmd->scan_begin_arg < 6553600000 */ { base_clock = CLOCK_10_KHZ; timer = cmd->scan_begin_arg / 100000; - } else if (cmd->scan_begin_arg < 0xffffffff /* 65536000000 */) { - base_clock = CLOCK_1_KHZ; - timer = cmd->scan_begin_arg / 1000000; } outw(0xFF02, dev->iobase + AM9513A_COM_REG); outw(base_clock, dev->iobase + AM9513A_DATA_REG); -- cgit From 568414f1ee340626482fa3bbeb2786525835d0c4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 18:40:36 -0700 Subject: staging: lnet: types.h: checkpatch cleanup: whitespace neatening whitespace changes only - git diff -w shows no difference Cc: Joe Perches Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/types.h b/drivers/staging/lustre/include/linux/lnet/types.h index 2add7976b3b2..fd6a03451b1d 100644 --- a/drivers/staging/lustre/include/linux/lnet/types.h +++ b/drivers/staging/lustre/include/linux/lnet/types.h @@ -110,7 +110,7 @@ static inline void LNetInvalidateHandle(lnet_handle_any_t *h) * * \return 1 if handles are equal, 0 if otherwise. */ -static inline int LNetHandleIsEqual (lnet_handle_any_t h1, lnet_handle_any_t h2) +static inline int LNetHandleIsEqual(lnet_handle_any_t h1, lnet_handle_any_t h2) { return h1.cookie == h2.cookie; } -- cgit From 09bce335ef95c4b2de23224a9a21bc259a3de0e7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 18:44:39 -0700 Subject: staging: lnet: lib-lnet.h: checkpatch cleanup: align arguments to parenthesis whitespace changes only - git diff -w shows no difference Cc: Joe Perches Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/lib-lnet.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 06ff463e4af6..bc3c9d1328c0 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -715,7 +715,7 @@ lnet_ptl_unsetopt(lnet_portal_t *ptl, int opt) /* match-table functions */ struct list_head *lnet_mt_match_head(struct lnet_match_table *mtable, - lnet_process_id_t id, __u64 mbits); + lnet_process_id_t id, __u64 mbits); struct lnet_match_table *lnet_mt_of_attach(unsigned int index, lnet_process_id_t id, __u64 mbits, __u64 ignore_bits, @@ -735,7 +735,7 @@ void lnet_portals_destroy(void); /* message functions */ int lnet_parse(lnet_ni_t *ni, lnet_hdr_t *hdr, - lnet_nid_t fromnid, void *private, int rdma_req); + lnet_nid_t fromnid, void *private, int rdma_req); void lnet_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed, unsigned int offset, unsigned int mlen, unsigned int rlen); lnet_msg_t *lnet_create_reply_msg(lnet_ni_t *ni, lnet_msg_t *get_msg); @@ -758,7 +758,7 @@ void lnet_counters_reset(void); unsigned int lnet_iov_nob(unsigned int niov, struct iovec *iov); int lnet_extract_iov(int dst_niov, struct iovec *dst, - int src_niov, struct iovec *src, + int src_niov, struct iovec *src, unsigned int offset, unsigned int len); unsigned int lnet_kiov_nob(unsigned int niov, lnet_kiov_t *iov); @@ -767,19 +767,19 @@ int lnet_extract_kiov(int dst_niov, lnet_kiov_t *dst, unsigned int offset, unsigned int len); void lnet_copy_iov2iov(unsigned int ndiov, struct iovec *diov, - unsigned int doffset, + unsigned int doffset, unsigned int nsiov, struct iovec *siov, unsigned int soffset, unsigned int nob); void lnet_copy_kiov2iov(unsigned int niov, struct iovec *iov, - unsigned int iovoffset, + unsigned int iovoffset, unsigned int nkiov, lnet_kiov_t *kiov, unsigned int kiovoffset, unsigned int nob); void lnet_copy_iov2kiov(unsigned int nkiov, lnet_kiov_t *kiov, - unsigned int kiovoffset, + unsigned int kiovoffset, unsigned int niov, struct iovec *iov, unsigned int iovoffset, unsigned int nob); void lnet_copy_kiov2kiov(unsigned int ndkiov, lnet_kiov_t *dkiov, - unsigned int doffset, + unsigned int doffset, unsigned int nskiov, lnet_kiov_t *skiov, unsigned int soffset, unsigned int nob); -- cgit From 0ee98a9f1469494fa55a6eb4a076e58799a953e2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 18:44:57 -0700 Subject: staging: lnet: lib-lnet.h: checkpatch cleanup: remove unnecessary externs Cc: Joe Perches Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/lib-lnet.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index bc3c9d1328c0..895c6f8f170b 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -572,7 +572,7 @@ lnet_peer_addref_locked(lnet_peer_t *lp) lp->lp_refcount++; } -extern void lnet_destroy_peer_locked(lnet_peer_t *lp); +void lnet_destroy_peer_locked(lnet_peer_t *lp); static inline void lnet_peer_decref_locked(lnet_peer_t *lp) @@ -642,11 +642,11 @@ lnet_net2rnethash(__u32 net) extern lnd_t the_lolnd; -extern int lnet_cpt_of_nid_locked(lnet_nid_t nid); -extern int lnet_cpt_of_nid(lnet_nid_t nid); -extern lnet_ni_t *lnet_nid2ni_locked(lnet_nid_t nid, int cpt); -extern lnet_ni_t *lnet_net2ni_locked(__u32 net, int cpt); -extern lnet_ni_t *lnet_net2ni(__u32 net); +int lnet_cpt_of_nid_locked(lnet_nid_t nid); +int lnet_cpt_of_nid(lnet_nid_t nid); +lnet_ni_t *lnet_nid2ni_locked(lnet_nid_t nid, int cpt); +lnet_ni_t *lnet_net2ni_locked(__u32 net, int cpt); +lnet_ni_t *lnet_net2ni(__u32 net); int lnet_notify(lnet_ni_t *ni, lnet_nid_t peer, int alive, cfs_time_t when); void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, cfs_time_t when); -- cgit From 1c9d9e908e04384810bfa5dcbb79c1beb53a39b3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 18:45:14 -0700 Subject: staging: lnet: lnetctl.h: checkpatch cleanup: whitespace neatening whitespace changes only - git diff -w shows no difference Cc: Joe Perches Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/lnetctl.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/lnetctl.h b/drivers/staging/lustre/include/linux/lnet/lnetctl.h index b22daa234255..cdbcfec121b3 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnetctl.h +++ b/drivers/staging/lustre/include/linux/lnet/lnetctl.h @@ -43,10 +43,10 @@ int jt_ptl_which_nid(int argc, char **argv); int jt_ptl_print_interfaces(int argc, char **argv); int jt_ptl_add_interface(int argc, char **argv); int jt_ptl_del_interface(int argc, char **argv); -int jt_ptl_print_peers (int argc, char **argv); -int jt_ptl_add_peer (int argc, char **argv); -int jt_ptl_del_peer (int argc, char **argv); -int jt_ptl_print_connections (int argc, char **argv); +int jt_ptl_print_peers(int argc, char **argv); +int jt_ptl_add_peer(int argc, char **argv); +int jt_ptl_del_peer(int argc, char **argv); +int jt_ptl_print_connections(int argc, char **argv); int jt_ptl_disconnect(int argc, char **argv); int jt_ptl_push_connection(int argc, char **argv); int jt_ptl_print_active_txs(int argc, char **argv); @@ -56,11 +56,11 @@ int jt_ptl_add_uuid(int argc, char **argv); int jt_ptl_add_uuid_old(int argc, char **argv); /* backwards compatibility */ int jt_ptl_close_uuid(int argc, char **argv); int jt_ptl_del_uuid(int argc, char **argv); -int jt_ptl_add_route (int argc, char **argv); -int jt_ptl_del_route (int argc, char **argv); -int jt_ptl_notify_router (int argc, char **argv); -int jt_ptl_print_routes (int argc, char **argv); -int jt_ptl_fail_nid (int argc, char **argv); +int jt_ptl_add_route(int argc, char **argv); +int jt_ptl_del_route(int argc, char **argv); +int jt_ptl_notify_router(int argc, char **argv); +int jt_ptl_print_routes(int argc, char **argv); +int jt_ptl_fail_nid(int argc, char **argv); int jt_ptl_lwt(int argc, char **argv); int jt_ptl_testprotocompat(int argc, char **argv); int jt_ptl_memhog(int argc, char **argv); -- cgit From f81d2eaa558b5134d70682f5781064a930793de6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 18:45:28 -0700 Subject: staging: lnet: ptllnd_wire.h: checkpatch cleanup: whitespace neatening whitespace changes only - git diff -w shows no difference Cc: Joe Perches Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h b/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h index 0d3ec5be0a00..6dfdbd81beb4 100644 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h +++ b/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h @@ -103,7 +103,7 @@ typedef struct { } kptl_msg_t; /* kptl_msg_t::ptlm_credits is only a __u8 */ -#define PTLLND_MSG_MAX_CREDITS ((typeof(((kptl_msg_t*) 0)->ptlm_credits)) - 1) +#define PTLLND_MSG_MAX_CREDITS ((typeof(((kptl_msg_t *)0)->ptlm_credits)) - 1) #define PTLLND_MSG_MAGIC LNET_PROTO_PTL_MAGIC #define PTLLND_MSG_VERSION 0x04 -- cgit From 9fdaf8c0b92ab374f8501eb47855776afc928e45 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 20:51:16 -0700 Subject: staging: lustre: remove top level ccflags variable We need to remove the ccflags from the Lustre code as it prevents individual object files from building properly in the kernel build system. It also hids the horrid mess that the Lustre include files are made up of. Start out by removing the toplevel ccflags variable pointing to drivers/staging/lustre/include/ as a valid include path. This requires the absolute include markings of a bunch of .h and .c files, which is also done here. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/Makefile | 2 -- .../staging/lustre/include/linux/libcfs/libcfs.h | 30 +++++++++++----------- .../lustre/include/linux/libcfs/libcfs_private.h | 2 +- .../lustre/include/linux/libcfs/linux/kp30.h | 2 +- .../lustre/include/linux/libcfs/linux/libcfs.h | 18 ++++++------- .../lustre/include/linux/libcfs/linux/linux-prim.h | 4 +-- .../lustre/include/linux/libcfs/linux/linux-time.h | 2 +- .../staging/lustre/include/linux/libcfs/lucache.h | 2 +- .../lustre/include/linux/libcfs/params_tree.h | 2 +- .../lustre/include/linux/lnet/api-support.h | 8 +++--- drivers/staging/lustre/include/linux/lnet/api.h | 2 +- .../staging/lustre/include/linux/lnet/lib-lnet.h | 11 ++++---- .../staging/lustre/include/linux/lnet/lib-types.h | 6 ++--- .../lustre/include/linux/lnet/linux/lib-lnet.h | 2 +- drivers/staging/lustre/include/linux/lnet/lnet.h | 6 ++--- .../staging/lustre/include/linux/lnet/lnetctl.h | 4 +-- drivers/staging/lustre/include/linux/lnet/lnetst.h | 6 ++--- .../staging/lustre/include/linux/lnet/socklnd.h | 4 +-- drivers/staging/lustre/include/linux/lnet/types.h | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 10 ++++---- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.h | 4 +-- drivers/staging/lustre/lnet/lnet/acceptor.c | 2 +- drivers/staging/lustre/lnet/lnet/api-ni.c | 2 +- drivers/staging/lustre/lnet/lnet/config.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-eq.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-md.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-me.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-move.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-msg.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-ptl.c | 2 +- drivers/staging/lustre/lnet/lnet/lo.c | 2 +- drivers/staging/lustre/lnet/lnet/module.c | 2 +- drivers/staging/lustre/lnet/lnet/peer.c | 2 +- drivers/staging/lustre/lnet/lnet/router.c | 2 +- drivers/staging/lustre/lnet/lnet/router_proc.c | 4 +-- drivers/staging/lustre/lnet/selftest/conctl.c | 6 ++--- drivers/staging/lustre/lnet/selftest/conrpc.c | 4 +-- drivers/staging/lustre/lnet/selftest/conrpc.h | 8 +++--- drivers/staging/lustre/lnet/selftest/console.c | 4 +-- drivers/staging/lustre/lnet/selftest/console.h | 8 +++--- drivers/staging/lustre/lnet/selftest/rpc.h | 2 +- drivers/staging/lustre/lnet/selftest/selftest.h | 10 ++++---- drivers/staging/lustre/lustre/fid/fid_internal.h | 2 +- drivers/staging/lustre/lustre/fid/fid_lib.c | 2 +- drivers/staging/lustre/lustre/fid/fid_request.c | 2 +- drivers/staging/lustre/lustre/fid/lproc_fid.c | 4 +-- drivers/staging/lustre/lustre/fld/fld_cache.c | 2 +- drivers/staging/lustre/lustre/fld/fld_internal.h | 2 +- drivers/staging/lustre/lustre/fld/fld_request.c | 2 +- drivers/staging/lustre/lustre/fld/lproc_fld.c | 2 +- drivers/staging/lustre/lustre/include/dt_object.h | 2 +- .../staging/lustre/lustre/include/interval_tree.h | 2 +- .../lustre/lustre/include/linux/lprocfs_status.h | 2 +- .../lustre/lustre/include/linux/lustre_compat25.h | 2 +- .../lustre/lustre/include/linux/obd_support.h | 2 +- .../staging/lustre/lustre/include/lprocfs_status.h | 2 +- drivers/staging/lustre/lustre/include/lu_object.h | 2 +- .../lustre/lustre/include/lustre/lustre_idl.h | 2 +- .../staging/lustre/lustre/include/lustre_disk.h | 4 +-- drivers/staging/lustre/lustre/include/lustre_fid.h | 2 +- drivers/staging/lustre/lustre/include/lustre_fld.h | 2 +- .../staging/lustre/lustre/include/lustre_handles.h | 2 +- .../staging/lustre/lustre/include/lustre_idmap.h | 2 +- drivers/staging/lustre/lustre/include/lustre_lib.h | 2 +- drivers/staging/lustre/lustre/include/lustre_mdc.h | 2 +- drivers/staging/lustre/lustre/include/lustre_mds.h | 2 +- drivers/staging/lustre/lustre/include/lustre_net.h | 4 +-- drivers/staging/lustre/lustre/include/lvfs.h | 4 +-- drivers/staging/lustre/lustre/include/obd.h | 2 +- drivers/staging/lustre/lustre/include/obd_cksum.h | 2 +- .../staging/lustre/lustre/include/obd_support.h | 2 +- drivers/staging/lustre/lustre/lclient/glimpse.c | 2 +- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 2 +- drivers/staging/lustre/lustre/ldlm/l_lock.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_extent.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 4 +-- drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c | 2 +- drivers/staging/lustre/lustre/libcfs/debug.c | 2 +- drivers/staging/lustre/lustre/libcfs/fail.c | 2 +- drivers/staging/lustre/lustre/libcfs/hash.c | 2 +- drivers/staging/lustre/lustre/libcfs/heap.c | 2 +- .../lustre/lustre/libcfs/kernel_user_comm.c | 2 +- drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c | 2 +- drivers/staging/lustre/lustre/libcfs/libcfs_lock.c | 2 +- drivers/staging/lustre/lustre/libcfs/libcfs_mem.c | 2 +- .../staging/lustre/lustre/libcfs/libcfs_string.c | 2 +- .../staging/lustre/lustre/libcfs/linux/linux-cpu.c | 2 +- .../lustre/lustre/libcfs/linux/linux-crypto.c | 4 +-- .../lustre/lustre/libcfs/linux/linux-curproc.c | 2 +- .../lustre/lustre/libcfs/linux/linux-debug.c | 4 +-- .../lustre/lustre/libcfs/linux/linux-module.c | 2 +- .../lustre/lustre/libcfs/linux/linux-prim.c | 2 +- .../lustre/lustre/libcfs/linux/linux-proc.c | 2 +- .../lustre/lustre/libcfs/linux/linux-tcpip.c | 2 +- .../lustre/lustre/libcfs/linux/linux-tracefile.c | 2 +- drivers/staging/lustre/lustre/libcfs/module.c | 8 +++--- drivers/staging/lustre/lustre/libcfs/nidstrings.c | 4 +-- drivers/staging/lustre/lustre/libcfs/prng.c | 2 +- drivers/staging/lustre/lustre/libcfs/tracefile.c | 2 +- drivers/staging/lustre/lustre/libcfs/tracefile.h | 2 +- .../staging/lustre/lustre/libcfs/upcall_cache.c | 2 +- drivers/staging/lustre/lustre/libcfs/workitem.c | 2 +- drivers/staging/lustre/lustre/llite/vvp_object.c | 2 +- .../staging/lustre/lustre/lov/lov_cl_internal.h | 2 +- drivers/staging/lustre/lustre/lov/lov_ea.c | 2 +- drivers/staging/lustre/lustre/lov/lov_merge.c | 2 +- drivers/staging/lustre/lustre/lov/lov_obd.c | 2 +- drivers/staging/lustre/lustre/lov/lov_offset.c | 2 +- drivers/staging/lustre/lustre/lov/lov_pool.c | 2 +- drivers/staging/lustre/lustre/lov/lov_request.c | 2 +- drivers/staging/lustre/lustre/lvfs/fsfilt.c | 2 +- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 2 +- drivers/staging/lustre/lustre/mgc/mgc_internal.h | 2 +- drivers/staging/lustre/lustre/obdclass/cl_object.c | 4 +-- drivers/staging/lustre/lustre/obdclass/cl_page.c | 2 +- drivers/staging/lustre/lustre/obdclass/class_obd.c | 2 +- .../lustre/lustre/obdclass/linux/linux-module.c | 4 +-- drivers/staging/lustre/lustre/obdclass/lu_object.c | 4 +-- drivers/staging/lustre/lustre/obdclass/lu_ref.c | 2 +- drivers/staging/lustre/lustre/obdclass/lu_ucred.c | 2 +- drivers/staging/lustre/lustre/obdclass/uuid.c | 2 +- .../staging/lustre/lustre/obdecho/echo_client.c | 2 +- .../staging/lustre/lustre/osc/osc_cl_internal.h | 2 +- drivers/staging/lustre/lustre/osc/osc_lock.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/errno.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/events.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/llog_client.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/llog_net.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/nrs.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c | 2 +- .../staging/lustre/lustre/ptlrpc/pack_generic.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/recover.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec_config.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec_gc.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/service.c | 2 +- 141 files changed, 212 insertions(+), 215 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/Makefile b/drivers/staging/lustre/Makefile index fb0e0faf0760..95ffe337a80a 100644 --- a/drivers/staging/lustre/Makefile +++ b/drivers/staging/lustre/Makefile @@ -1,4 +1,2 @@ -subdir-ccflags-y := -I$(src)/include/ - obj-$(CONFIG_LNET) += lnet/ obj-$(CONFIG_LUSTRE_FS) += lustre/ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 26b53f6420e5..a8b84ff4ee06 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -41,7 +41,7 @@ #define __attribute__(x) #endif -#include +#include "linux/libcfs.h" #include #include "curproc.h" @@ -155,20 +155,20 @@ unsigned int cfs_rand(void); void cfs_srand(unsigned int, unsigned int); void cfs_get_random_bytes(void *buf, int size); -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "libcfs_debug.h" +#include "libcfs_cpu.h" +#include "libcfs_private.h" +#include "libcfs_ioctl.h" +#include "libcfs_prim.h" +#include "libcfs_time.h" +#include "libcfs_string.h" +#include "libcfs_kernelcomm.h" +#include "libcfs_workitem.h" +#include "libcfs_hash.h" +#include "libcfs_heap.h" +#include "libcfs_fail.h" +#include "params_tree.h" +#include "libcfs_crypto.h" /* container_of depends on "likely" which is defined in libcfs_private.h */ static inline void *__container_of(void *ptr, unsigned long shift) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h index 740bfcd2f09a..c184746cee4c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h @@ -43,7 +43,7 @@ #define __LIBCFS_PRIVATE_H__ /* XXX this layering violation is for nidstrings */ -#include +#include "../lnet/types.h" #ifndef DEBUG_SUBSYSTEM # define DEBUG_SUBSYSTEM S_UNDEFINED diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index a09fed3c6ea8..f7085c402c1e 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -67,7 +67,7 @@ #include #include -#include +#include "portals_compat25.h" /* this is a bit chunky */ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index a7bca40e9fb7..d2f7c19cfa36 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -44,15 +44,15 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "linux-cpu.h" +#include "linux-time.h" +#include "linux-mem.h" +#include "linux-prim.h" +#include "linux-lock.h" +#include "linux-tcpip.h" +#include "linux-bitops.h" +#include "linux-types.h" +#include "kp30.h" #include #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index 2aeff27b1641..261ab80b712c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -57,10 +57,10 @@ #include #include -#include +#include "portals_compat25.h" #include -#include +#include "linux-time.h" /* * Sysctl register diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index a386d1b1286b..201932abcd2b 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -94,7 +94,7 @@ #include #include -#include +#include "portals_compat25.h" /* * post 2.5 kernels. diff --git a/drivers/staging/lustre/include/linux/libcfs/lucache.h b/drivers/staging/lustre/include/linux/libcfs/lucache.h index 9668b397f0f6..b5b3c23bf85e 100644 --- a/drivers/staging/lustre/include/linux/libcfs/lucache.h +++ b/drivers/staging/lustre/include/linux/libcfs/lucache.h @@ -37,7 +37,7 @@ #ifndef _LUCACHE_H #define _LUCACHE_H -#include +#include "libcfs.h" /** \defgroup ucache ucache * diff --git a/drivers/staging/lustre/include/linux/libcfs/params_tree.h b/drivers/staging/lustre/include/linux/libcfs/params_tree.h index 78a2c4ed4d6c..170d6658299c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/params_tree.h +++ b/drivers/staging/lustre/include/linux/libcfs/params_tree.h @@ -40,7 +40,7 @@ #ifndef __PARAMS_TREE_H__ #define __PARAMS_TREE_H__ -#include +#include "libcfs.h" #undef LPROCFS #if defined(CONFIG_PROC_FS) diff --git a/drivers/staging/lustre/include/linux/lnet/api-support.h b/drivers/staging/lustre/include/linux/lnet/api-support.h index a8d91dbe6060..8f7fa28b517c 100644 --- a/drivers/staging/lustre/include/linux/lnet/api-support.h +++ b/drivers/staging/lustre/include/linux/lnet/api-support.h @@ -35,10 +35,10 @@ #ifndef __LNET_API_SUPPORT_H__ #define __LNET_API_SUPPORT_H__ -#include +#include "linux/api-support.h" -#include -#include -#include +#include "../libcfs/libcfs.h" +#include "types.h" +#include "lnet.h" #endif diff --git a/drivers/staging/lustre/include/linux/lnet/api.h b/drivers/staging/lustre/include/linux/lnet/api.h index e8642e33860d..0b5478c4c47d 100644 --- a/drivers/staging/lustre/include/linux/lnet/api.h +++ b/drivers/staging/lustre/include/linux/lnet/api.h @@ -47,7 +47,7 @@ * @{ */ -#include +#include "../lnet/types.h" /** \defgroup lnet_init_fini Initialization and cleanup * The LNet must be properly initialized before any LNet calls can be made. diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 895c6f8f170b..d8c1bf4265f6 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -41,12 +41,11 @@ #ifndef __LNET_LIB_LNET_H__ #define __LNET_LIB_LNET_H__ -#include - -#include -#include -#include -#include +#include "linux/lib-lnet.h" +#include "../libcfs/libcfs.h" +#include "types.h" +#include "lnet.h" +#include "lib-types.h" extern lnet_t the_lnet; /* THE network */ diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index 6816aa0ab306..970f2d72948e 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -42,11 +42,11 @@ #ifndef __LNET_LIB_TYPES_H__ #define __LNET_LIB_TYPES_H__ -#include +#include "linux/lib-types.h" -#include +#include "../libcfs/libcfs.h" #include -#include +#include "types.h" #define WIRE_ATTR __attribute__((packed)) diff --git a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h index d2c0a70f1f7e..d91f2dd1494f 100644 --- a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h @@ -42,7 +42,7 @@ # include # include # include -# include +#include "../../libcfs/libcfs.h" static inline __u64 lnet_page2phys (struct page *p) diff --git a/drivers/staging/lustre/include/linux/lnet/lnet.h b/drivers/staging/lustre/include/linux/lnet/lnet.h index c532b15d7643..75c0ab9193cc 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lnet.h @@ -40,10 +40,10 @@ * * User application interface file */ -#include +#include "linux/lnet.h" -#include -#include +#include "types.h" +#include "api.h" #define LNET_NIDSTR_COUNT 1024 /* # of nidstrings */ #define LNET_NIDSTR_SIZE 32 /* size of each one (see below for usage) */ diff --git a/drivers/staging/lustre/include/linux/lnet/lnetctl.h b/drivers/staging/lustre/include/linux/lnet/lnetctl.h index cdbcfec121b3..98181d389396 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnetctl.h +++ b/drivers/staging/lustre/include/linux/lnet/lnetctl.h @@ -19,8 +19,8 @@ #ifndef _PTLCTL_H_ #define _PTLCTL_H_ -#include -#include +#include "../libcfs/libcfs.h" +#include "types.h" #define LNET_DEV_ID 0 #define LNET_DEV_PATH "/dev/lnet" diff --git a/drivers/staging/lustre/include/linux/lnet/lnetst.h b/drivers/staging/lustre/include/linux/lnet/lnetst.h index 87fe9ac76a6c..885f708d4031 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnetst.h +++ b/drivers/staging/lustre/include/linux/lnet/lnetst.h @@ -41,9 +41,9 @@ #ifndef __LNET_ST_H__ #define __LNET_ST_H__ -#include -#include -#include +#include "../libcfs/libcfs.h" +#include "lnet.h" +#include "lib-types.h" #define LST_FEAT_NONE (0) #define LST_FEAT_BULK_LEN (1 << 0) /* enable variable page size */ diff --git a/drivers/staging/lustre/include/linux/lnet/socklnd.h b/drivers/staging/lustre/include/linux/lnet/socklnd.h index bacc74933a39..389038b122c5 100644 --- a/drivers/staging/lustre/include/linux/lnet/socklnd.h +++ b/drivers/staging/lustre/include/linux/lnet/socklnd.h @@ -38,8 +38,8 @@ #ifndef __LNET_LNET_SOCKLND_H__ #define __LNET_LNET_SOCKLND_H__ -#include -#include +#include "types.h" +#include "lib-types.h" #define SOCKLND_CONN_NONE (-1) #define SOCKLND_CONN_ANY 0 diff --git a/drivers/staging/lustre/include/linux/lnet/types.h b/drivers/staging/lustre/include/linux/lnet/types.h index fd6a03451b1d..68d8139a2b11 100644 --- a/drivers/staging/lustre/include/linux/lnet/types.h +++ b/drivers/staging/lustre/include/linux/lnet/types.h @@ -40,7 +40,7 @@ /** \addtogroup lnet * @{ */ -#include +#include "../libcfs/libcfs.h" /** \addtogroup lnet_addr * @{ */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index 109a23932471..256cfc00015b 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -30,11 +30,11 @@ #include "socklnd_lib-linux.h" -#include -#include -#include -#include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/lnet/lnet.h" +#include "../../../include/linux/lnet/lib-lnet.h" +#include "../../../include/linux/lnet/socklnd.h" +#include "../../../include/linux/lnet/lnet-sysctl.h" #define SOCKNAL_PEER_HASH_SIZE 101 /* # peer lists */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h index 025cb65ddc70..f14a60ce0916 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h @@ -62,8 +62,8 @@ #include #include -#include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include static inline __u32 ksocknal_csum(__u32 crc, unsigned char const *p, size_t len) diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 09ea6cb1492c..66e6b2b18c22 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" static int accept_port = 988; diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index cd6792ea24ef..8aa57c99116d 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" #include #define D_LNI D_CONSOLE diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c index d97464e95ddb..d39bc4371596 100644 --- a/drivers/staging/lustre/lnet/lnet/config.c +++ b/drivers/staging/lustre/lnet/lnet/config.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" typedef struct { /* tmp struct for parsing routes */ struct list_head ltb_list; /* stash on lists */ diff --git a/drivers/staging/lustre/lnet/lnet/lib-eq.c b/drivers/staging/lustre/lnet/lnet/lib-eq.c index d25dcd8ba563..0147440bd14f 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-eq.c +++ b/drivers/staging/lustre/lnet/lnet/lib-eq.c @@ -39,7 +39,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" /** * Create an event queue that has room for \a count number of events. diff --git a/drivers/staging/lustre/lnet/lnet/lib-md.c b/drivers/staging/lustre/lnet/lnet/lib-md.c index d68c6e0b4f16..1f386e09b530 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-md.c +++ b/drivers/staging/lustre/lnet/lnet/lib-md.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" /* must be called with lnet_res_lock held */ void diff --git a/drivers/staging/lustre/lnet/lnet/lib-me.c b/drivers/staging/lustre/lnet/lnet/lib-me.c index 0e422099aa9c..4397e26cd30f 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-me.c +++ b/drivers/staging/lustre/lnet/lnet/lib-me.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" /** * Create and attach a match entry to the match list of \a portal. The new diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index 95bf41fd68fc..da47ae74a6d6 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" static int local_nid_dist_zero = 1; module_param(local_nid_dist_zero, int, 0444); diff --git a/drivers/staging/lustre/lnet/lnet/lib-msg.c b/drivers/staging/lustre/lnet/lnet/lib-msg.c index 761f1e12f847..a46ccbf6608f 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-msg.c +++ b/drivers/staging/lustre/lnet/lnet/lib-msg.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" void lnet_build_unlink_event(lnet_libmd_t *md, lnet_event_t *ev) diff --git a/drivers/staging/lustre/lnet/lnet/lib-ptl.c b/drivers/staging/lustre/lnet/lnet/lib-ptl.c index 920df69960a5..74222ec0ae5b 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-ptl.c +++ b/drivers/staging/lustre/lnet/lnet/lib-ptl.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" /* NB: add /proc interfaces in upcoming patches */ int portal_rotor = LNET_PTL_ROTOR_HASH_RT; diff --git a/drivers/staging/lustre/lnet/lnet/lo.c b/drivers/staging/lustre/lnet/lnet/lo.c index efc798e01934..be31dfc5fa4b 100644 --- a/drivers/staging/lustre/lnet/lnet/lo.c +++ b/drivers/staging/lustre/lnet/lnet/lo.c @@ -33,7 +33,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" int lolnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) diff --git a/drivers/staging/lustre/lnet/lnet/module.c b/drivers/staging/lustre/lnet/lnet/module.c index 3bd42a485a32..e84d59d23ae0 100644 --- a/drivers/staging/lustre/lnet/lnet/module.c +++ b/drivers/staging/lustre/lnet/lnet/module.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" static int config_on_load; module_param(config_on_load, int, 0444); diff --git a/drivers/staging/lustre/lnet/lnet/peer.c b/drivers/staging/lustre/lnet/lnet/peer.c index 72802b0404a4..c93ae8510530 100644 --- a/drivers/staging/lustre/lnet/lnet/peer.c +++ b/drivers/staging/lustre/lnet/lnet/peer.c @@ -38,7 +38,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" int lnet_peer_tables_create(void) diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 53d1c7e4f59d..9ee8c9758fc7 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -22,7 +22,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/lnet/lib-lnet.h" #if defined(LNET_ROUTER) diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 0cbd9fc98e07..414a9919b9b1 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -22,8 +22,8 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" #if defined(LNET_ROUTER) diff --git a/drivers/staging/lustre/lnet/selftest/conctl.c b/drivers/staging/lustre/lnet/selftest/conctl.c index 68e1a171209c..3df1a0d85443 100644 --- a/drivers/staging/lustre/lnet/selftest/conctl.c +++ b/drivers/staging/lustre/lnet/selftest/conctl.c @@ -40,9 +40,9 @@ * Author: Liang Zhen */ -#include -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" +#include "../../include/linux/lnet/lnetst.h" #include "console.h" int diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.c b/drivers/staging/lustre/lnet/selftest/conrpc.c index 8d1eea4cef6f..ebb8f34959ef 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.c +++ b/drivers/staging/lustre/lnet/selftest/conrpc.c @@ -41,8 +41,8 @@ */ -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" #include "timer.h" #include "conrpc.h" #include "console.h" diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.h b/drivers/staging/lustre/lnet/selftest/conrpc.h index 9aba24a2eab9..59f0097c6ec9 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.h +++ b/drivers/staging/lustre/lnet/selftest/conrpc.h @@ -43,10 +43,10 @@ #ifndef __LST_CONRPC_H__ #define __LST_CONRPC_H__ -#include -#include -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lnet.h" +#include "../../include/linux/lnet/lib-types.h" +#include "../../include/linux/lnet/lnetst.h" #include "rpc.h" #include "selftest.h" diff --git a/drivers/staging/lustre/lnet/selftest/console.c b/drivers/staging/lustre/lnet/selftest/console.c index 2aeebbfdc0e3..01670a6fbaeb 100644 --- a/drivers/staging/lustre/lnet/selftest/console.c +++ b/drivers/staging/lustre/lnet/selftest/console.c @@ -41,8 +41,8 @@ */ -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" #include "console.h" #include "conrpc.h" diff --git a/drivers/staging/lustre/lnet/selftest/console.h b/drivers/staging/lustre/lnet/selftest/console.h index 393dc0f64109..0e2e3263832f 100644 --- a/drivers/staging/lustre/lnet/selftest/console.h +++ b/drivers/staging/lustre/lnet/selftest/console.h @@ -44,10 +44,10 @@ #define __LST_CONSOLE_H__ -#include -#include -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lnet.h" +#include "../../include/linux/lnet/lib-types.h" +#include "../../include/linux/lnet/lnetst.h" #include "selftest.h" #include "conrpc.h" diff --git a/drivers/staging/lustre/lnet/selftest/rpc.h b/drivers/staging/lustre/lnet/selftest/rpc.h index b905d49a351f..fbeb75fe5922 100644 --- a/drivers/staging/lustre/lnet/selftest/rpc.h +++ b/drivers/staging/lustre/lnet/selftest/rpc.h @@ -37,7 +37,7 @@ #ifndef __SELFTEST_RPC_H__ #define __SELFTEST_RPC_H__ -#include +#include "../../include/linux/lnet/lnetst.h" /* * LST wired structures diff --git a/drivers/staging/lustre/lnet/selftest/selftest.h b/drivers/staging/lustre/lnet/selftest/selftest.h index f4806a6bc942..7bc616602b11 100644 --- a/drivers/staging/lustre/lnet/selftest/selftest.h +++ b/drivers/staging/lustre/lnet/selftest/selftest.h @@ -43,11 +43,11 @@ #define LNET_ONLY -#include -#include -#include -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lnet.h" +#include "../../include/linux/lnet/lib-lnet.h" +#include "../../include/linux/lnet/lib-types.h" +#include "../../include/linux/lnet/lnetst.h" #include "rpc.h" #include "timer.h" diff --git a/drivers/staging/lustre/lustre/fid/fid_internal.h b/drivers/staging/lustre/lustre/fid/fid_internal.h index 1dbe46be0f41..59381d368d9c 100644 --- a/drivers/staging/lustre/lustre/fid/fid_internal.h +++ b/drivers/staging/lustre/lustre/fid/fid_internal.h @@ -41,7 +41,7 @@ #define __FID_INTERNAL_H #include -#include +#include "../../include/linux/libcfs/libcfs.h" /* Functions used internally in module. */ int seq_client_alloc_super(struct lu_client_seq *seq, diff --git a/drivers/staging/lustre/lustre/fid/fid_lib.c b/drivers/staging/lustre/lustre/fid/fid_lib.c index f03afdec027a..a75d4bbf7cbd 100644 --- a/drivers/staging/lustre/lustre/fid/fid_lib.c +++ b/drivers/staging/lustre/lustre/fid/fid_lib.c @@ -43,7 +43,7 @@ #define DEBUG_SUBSYSTEM S_FID -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index 3401c9ad42ac..2127ad9b1785 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_FID -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index 20078df5f377..3bbcedaceae9 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -42,8 +42,8 @@ #define DEBUG_SUBSYSTEM S_FID -# include -# include +#include "../../include/linux/libcfs/libcfs.h" +#include #include #include diff --git a/drivers/staging/lustre/lustre/fld/fld_cache.c b/drivers/staging/lustre/lustre/fld/fld_cache.c index a06a642f549e..32ec812598cd 100644 --- a/drivers/staging/lustre/lustre/fld/fld_cache.c +++ b/drivers/staging/lustre/lustre/fld/fld_cache.c @@ -43,7 +43,7 @@ #define DEBUG_SUBSYSTEM S_FLD -# include +#include "../../include/linux/libcfs/libcfs.h" # include # include diff --git a/drivers/staging/lustre/lustre/fld/fld_internal.h b/drivers/staging/lustre/lustre/fld/fld_internal.h index 8661a788f120..1a049b51d865 100644 --- a/drivers/staging/lustre/lustre/fld/fld_internal.h +++ b/drivers/staging/lustre/lustre/fld/fld_internal.h @@ -44,7 +44,7 @@ #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 211430d541c1..dfee6a461fa9 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_FLD -# include +#include "../../include/linux/libcfs/libcfs.h" # include # include diff --git a/drivers/staging/lustre/lustre/fld/lproc_fld.c b/drivers/staging/lustre/lustre/fld/lproc_fld.c index 8b366356f77f..208a81e69726 100644 --- a/drivers/staging/lustre/lustre/fld/lproc_fld.c +++ b/drivers/staging/lustre/lustre/fld/lproc_fld.c @@ -43,7 +43,7 @@ #define DEBUG_SUBSYSTEM S_FLD -# include +#include "../../include/linux/libcfs/libcfs.h" # include #include diff --git a/drivers/staging/lustre/lustre/include/dt_object.h b/drivers/staging/lustre/lustre/include/dt_object.h index 9b7921d1dea8..7c6bbab50f8a 100644 --- a/drivers/staging/lustre/lustre/include/dt_object.h +++ b/drivers/staging/lustre/lustre/include/dt_object.h @@ -55,7 +55,7 @@ */ #include -#include +#include "../../include/linux/libcfs/libcfs.h" struct seq_file; struct proc_dir_entry; diff --git a/drivers/staging/lustre/lustre/include/interval_tree.h b/drivers/staging/lustre/lustre/include/interval_tree.h index dfdb8aa4e035..1815783edae6 100644 --- a/drivers/staging/lustre/lustre/include/interval_tree.h +++ b/drivers/staging/lustre/lustre/include/interval_tree.h @@ -40,7 +40,7 @@ #ifndef _INTERVAL_H__ #define _INTERVAL_H__ -#include /* LASSERT. */ +#include "../../include/linux/libcfs/libcfs.h" /* LASSERT. */ struct interval_node { struct interval_node *in_left; diff --git a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h b/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h index 4bcc4dcca3da..d1e1a185ae1c 100644 --- a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h @@ -50,7 +50,7 @@ #include #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h index 81cc7a0134bb..d9d7ebb5683f 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h @@ -39,7 +39,7 @@ #include #include -#include +#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include diff --git a/drivers/staging/lustre/lustre/include/linux/obd_support.h b/drivers/staging/lustre/lustre/include/linux/obd_support.h index 9166503408aa..db7a8bacd491 100644 --- a/drivers/staging/lustre/lustre/include/linux/obd_support.h +++ b/drivers/staging/lustre/lustre/include/linux/obd_support.h @@ -52,7 +52,7 @@ #include #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index 1b7f6a9bf62c..2f86eb7976eb 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -44,7 +44,7 @@ #include #include -#include +#include "../../include/linux/libcfs/params_tree.h" struct lprocfs_vars { const char *name; diff --git a/drivers/staging/lustre/lustre/include/lu_object.h b/drivers/staging/lustre/lustre/include/lu_object.h index 98149f5da153..4fe1611ff703 100644 --- a/drivers/staging/lustre/lustre/include/lu_object.h +++ b/drivers/staging/lustre/lustre/include/lu_object.h @@ -38,7 +38,7 @@ #define __LUSTRE_LU_OBJECT_H #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 83014c9fea65..3d5bec75564c 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -92,7 +92,7 @@ #define _LUSTRE_IDL_H_ #if !defined(LPU64) -#include /* for LPUX64, etc */ +#include "../../include/linux/libcfs/libcfs.h" /* for LPUX64, etc */ #endif /* Defn's shared with user-space. */ diff --git a/drivers/staging/lustre/lustre/include/lustre_disk.h b/drivers/staging/lustre/lustre/include/lustre_disk.h index ac08164793cb..7f191eed2a81 100644 --- a/drivers/staging/lustre/lustre/include/lustre_disk.h +++ b/drivers/staging/lustre/lustre/include/lustre_disk.h @@ -48,8 +48,8 @@ * @{ */ -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/types.h" #include /****************** on-disk files *********************/ diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h b/drivers/staging/lustre/lustre/include/lustre_fid.h index 5e7b3165a851..5b7333092805 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fid.h +++ b/drivers/staging/lustre/lustre/include/lustre_fid.h @@ -152,7 +152,7 @@ * Even so, the MDT and OST resources are also in different LDLM namespaces. */ -#include +#include "../../include/linux/libcfs/libcfs.h" #include struct lu_env; diff --git a/drivers/staging/lustre/lustre/include/lustre_fld.h b/drivers/staging/lustre/lustre/include/lustre_fld.h index 550fff587458..365854789f60 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fld.h +++ b/drivers/staging/lustre/lustre/include/lustre_fld.h @@ -43,7 +43,7 @@ */ #include -#include +#include "../../include/linux/libcfs/libcfs.h" struct lu_client_fld; struct lu_server_fld; diff --git a/drivers/staging/lustre/lustre/include/lustre_handles.h b/drivers/staging/lustre/lustre/include/lustre_handles.h index fcd40f33426a..8ae868fdf658 100644 --- a/drivers/staging/lustre/lustre/include/lustre_handles.h +++ b/drivers/staging/lustre/lustre/include/lustre_handles.h @@ -44,7 +44,7 @@ #include -#include +#include "../../include/linux/libcfs/libcfs.h" struct portals_handle_ops { diff --git a/drivers/staging/lustre/lustre/include/lustre_idmap.h b/drivers/staging/lustre/lustre/include/lustre_idmap.h index 2da859691d6a..5624b8bae919 100644 --- a/drivers/staging/lustre/lustre/include/lustre_idmap.h +++ b/drivers/staging/lustre/lustre/include/lustre_idmap.h @@ -47,7 +47,7 @@ * @{ */ -#include +#include "../../include/linux/libcfs/libcfs.h" #define CFS_NGROUPS_PER_BLOCK ((int)(PAGE_CACHE_SIZE / sizeof(gid_t))) diff --git a/drivers/staging/lustre/lustre/include/lustre_lib.h b/drivers/staging/lustre/lustre/include/lustre_lib.h index 3c26bbdc44b7..60edf5a59918 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/lustre_lib.h @@ -46,7 +46,7 @@ * @{ */ -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/include/lustre_mdc.h b/drivers/staging/lustre/lustre/include/lustre_mdc.h index 66765d4d201d..1efcf838b197 100644 --- a/drivers/staging/lustre/lustre/include/lustre_mdc.h +++ b/drivers/staging/lustre/lustre/include/lustre_mdc.h @@ -52,7 +52,7 @@ #include #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/include/lustre_mds.h b/drivers/staging/lustre/lustre/include/lustre_mds.h index b386f87471e3..9a1575013178 100644 --- a/drivers/staging/lustre/lustre/include/lustre_mds.h +++ b/drivers/staging/lustre/lustre/include/lustre_mds.h @@ -48,7 +48,7 @@ */ #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index b837d34f0b4d..fd8d943c2848 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -57,9 +57,9 @@ #include -#include +#include "../../include/linux/libcfs/libcfs.h" // #include -#include +#include "../../include/linux/lnet/lnet.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/include/lvfs.h b/drivers/staging/lustre/lustre/include/lvfs.h index 28f1a6b76f73..156481c2a911 100644 --- a/drivers/staging/lustre/lustre/include/lvfs.h +++ b/drivers/staging/lustre/lustre/include/lvfs.h @@ -41,10 +41,10 @@ #define LL_FID_NAMELEN (16 + 1 + 8 + 1) -#include +#include "../../include/linux/libcfs/libcfs.h" #include -#include +#include "../../include/linux/libcfs/lucache.h" /* lvfs_common.c */ diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index d5c4613f182d..e2f33d14e0e4 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -50,7 +50,7 @@ #include #include -#include +#include "../../include/linux/libcfs/bitmap.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/include/obd_cksum.h b/drivers/staging/lustre/lustre/include/obd_cksum.h index 5f740f1743ca..d2e0d4c45e6b 100644 --- a/drivers/staging/lustre/lustre/include/obd_cksum.h +++ b/drivers/staging/lustre/lustre/include/obd_cksum.h @@ -34,7 +34,7 @@ #ifndef __OBD_CKSUM #define __OBD_CKSUM -#include +#include "../../include/linux/libcfs/libcfs.h" #include static inline unsigned char cksum_obd2cfs(cksum_type_t cksum_type) diff --git a/drivers/staging/lustre/lustre/include/obd_support.h b/drivers/staging/lustre/lustre/include/obd_support.h index cc5af509b261..f9a120318963 100644 --- a/drivers/staging/lustre/lustre/include/obd_support.h +++ b/drivers/staging/lustre/lustre/include/obd_support.h @@ -37,7 +37,7 @@ #ifndef _OBD_SUPPORT #define _OBD_SUPPORT -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lclient/glimpse.c b/drivers/staging/lustre/lustre/lclient/glimpse.c index a658116daf2b..8dd4b22eff31 100644 --- a/drivers/staging/lustre/lustre/lclient/glimpse.c +++ b/drivers/staging/lustre/lustre/lclient/glimpse.c @@ -40,7 +40,7 @@ * Author: Oleg Drokin */ -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 08d6fbdf6ed9..7791d3d3bca4 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LLITE -# include +#include "../../include/linux/libcfs/libcfs.h" # include # include # include diff --git a/drivers/staging/lustre/lustre/ldlm/l_lock.c b/drivers/staging/lustre/lustre/ldlm/l_lock.c index 32f4d52b5362..ba774c4d991e 100644 --- a/drivers/staging/lustre/lustre/ldlm/l_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/l_lock.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LDLM -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c index bde3a82ce0dd..53cdbb8e45ea 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c @@ -50,7 +50,7 @@ */ #define DEBUG_SUBSYSTEM S_LDLM -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index d8ad808fc8dc..8900968a2c03 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -43,7 +43,7 @@ #define DEBUG_SUBSYSTEM S_LDLM -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index 1b3f5c1eb808..16a1020b9835 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -41,8 +41,8 @@ #define DEBUG_SUBSYSTEM S_LDLM -# include -# include +#include "../../include/linux/libcfs/libcfs.h" +#include #include #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c index 7e63cf355cd9..05c53fbf7a3d 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LDLM -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/libcfs/debug.c b/drivers/staging/lustre/lustre/libcfs/debug.c index 1e4c5ad26157..2373ccdba9b3 100644 --- a/drivers/staging/lustre/lustre/libcfs/debug.c +++ b/drivers/staging/lustre/lustre/libcfs/debug.c @@ -41,7 +41,7 @@ # define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" #include "tracefile.h" static char debug_file_name[1024]; diff --git a/drivers/staging/lustre/lustre/libcfs/fail.c b/drivers/staging/lustre/lustre/libcfs/fail.c index f63eac98d54b..1bf9c90b4789 100644 --- a/drivers/staging/lustre/lustre/libcfs/fail.c +++ b/drivers/staging/lustre/lustre/libcfs/fail.c @@ -33,7 +33,7 @@ * Lustre is a trademark of Oracle Corporation, Inc. */ -#include +#include "../../include/linux/libcfs/libcfs.h" unsigned long cfs_fail_loc = 0; EXPORT_SYMBOL(cfs_fail_loc); diff --git a/drivers/staging/lustre/lustre/libcfs/hash.c b/drivers/staging/lustre/lustre/libcfs/hash.c index 6d2b455d1be4..5dde79418297 100644 --- a/drivers/staging/lustre/lustre/libcfs/hash.c +++ b/drivers/staging/lustre/lustre/libcfs/hash.c @@ -107,7 +107,7 @@ * table. Also, user can break the iteration by return 1 in callback. */ -#include +#include "../../include/linux/libcfs/libcfs.h" #include #if CFS_HASH_DEBUG_LEVEL >= CFS_HASH_DEBUG_1 diff --git a/drivers/staging/lustre/lustre/libcfs/heap.c b/drivers/staging/lustre/lustre/libcfs/heap.c index 147e4fe4762d..bf6d0b91c35f 100644 --- a/drivers/staging/lustre/lustre/libcfs/heap.c +++ b/drivers/staging/lustre/lustre/libcfs/heap.c @@ -35,7 +35,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" #define CBH_ALLOC(ptr, h) \ do { \ diff --git a/drivers/staging/lustre/lustre/libcfs/kernel_user_comm.c b/drivers/staging/lustre/lustre/libcfs/kernel_user_comm.c index b6ddc998f750..e2aa637abcf9 100644 --- a/drivers/staging/lustre/lustre/libcfs/kernel_user_comm.c +++ b/drivers/staging/lustre/lustre/libcfs/kernel_user_comm.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_CLASS #define D_KUC D_OTHER -#include +#include "../../include/linux/libcfs/libcfs.h" /* This is the kernel side (liblustre as well). */ diff --git a/drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c b/drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c index a1a7bf44cccf..dbb81b6cc200 100644 --- a/drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c +++ b/drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c @@ -35,7 +35,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" /** Global CPU partition table */ struct cfs_cpt_table *cfs_cpt_table __read_mostly = NULL; diff --git a/drivers/staging/lustre/lustre/libcfs/libcfs_lock.c b/drivers/staging/lustre/lustre/libcfs/libcfs_lock.c index a2ce4c0eb3dc..2c199c7259fe 100644 --- a/drivers/staging/lustre/lustre/libcfs/libcfs_lock.c +++ b/drivers/staging/lustre/lustre/libcfs/libcfs_lock.c @@ -32,7 +32,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" /** destroy cpu-partition lock, see libcfs_private.h for more detail */ diff --git a/drivers/staging/lustre/lustre/libcfs/libcfs_mem.c b/drivers/staging/lustre/lustre/libcfs/libcfs_mem.c index feab537c728c..1debdda72e72 100644 --- a/drivers/staging/lustre/lustre/libcfs/libcfs_mem.c +++ b/drivers/staging/lustre/lustre/libcfs/libcfs_mem.c @@ -33,7 +33,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" struct cfs_var_array { unsigned int va_count; /* # of buffers */ diff --git a/drivers/staging/lustre/lustre/libcfs/libcfs_string.c b/drivers/staging/lustre/lustre/libcfs/libcfs_string.c index ed0a6b531058..fb88733607a9 100644 --- a/drivers/staging/lustre/lustre/libcfs/libcfs_string.c +++ b/drivers/staging/lustre/lustre/libcfs/libcfs_string.c @@ -40,7 +40,7 @@ * Author: Nathan Rutman */ -#include +#include "../../include/linux/libcfs/libcfs.h" /* Convert a text string to a bitmask */ int cfs_str2mask(const char *str, const char *(*bit2str)(int bit), diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c index fc21210d77ec..224c65b5ce4e 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c @@ -35,7 +35,7 @@ #include #include -#include +#include "../../../include/linux/libcfs/libcfs.h" #ifdef CONFIG_SMP diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c index b6c79bc177ad..048a4f28f900 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c @@ -29,8 +29,8 @@ #include #include -#include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/libcfs/linux/linux-crypto.h" /** * Array of hash algorithm speed in MByte per second */ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-curproc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-curproc.c index bd301ce02255..d71ad5ed1f6d 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-curproc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-curproc.c @@ -48,7 +48,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../../include/linux/libcfs/libcfs.h" /* * Implementation of cfs_curproc API (see portals/include/libcfs/curproc.h) diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c index cc565b1fb994..ca2faa68cb5a 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c @@ -55,8 +55,8 @@ # define DEBUG_SUBSYSTEM S_LNET -#include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include "tracefile.h" diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index 581b4728c6ca..ccadf6581cc4 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../../include/linux/libcfs/libcfs.h" #define LNET_MINOR 240 diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c index 9a40d1415a65..342ee36f64c6 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c @@ -40,7 +40,7 @@ #include #include -#include +#include "../../../include/linux/libcfs/libcfs.h" #if defined(CONFIG_KGDB) #include diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index e947b9128c58..264dc8b34648 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -61,7 +61,7 @@ # define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../../include/linux/libcfs/libcfs.h" #include #include "tracefile.h" diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c index e52e33aab55b..eb14dfd4b0f5 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c index 162beee24a73..f8dadd2f5607 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c @@ -37,7 +37,7 @@ #define DEBUG_SUBSYSTEM S_LNET #define LUSTRE_TRACEFILE_PRIVATE -#include +#include "../../../include/linux/libcfs/libcfs.h" #include "tracefile.h" /* percents to share the total debug memory for each type */ diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c index b16ee08fe742..d138368e632d 100644 --- a/drivers/staging/lustre/lustre/libcfs/module.c +++ b/drivers/staging/lustre/lustre/libcfs/module.c @@ -36,10 +36,10 @@ #define DEBUG_SUBSYSTEM S_LNET -#include -#include -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/libcfs/libcfs_crypto.h" +#include "../../include/linux/lnet/lib-lnet.h" +#include "../../include/linux/lnet/lnet.h" #include "tracefile.h" void diff --git a/drivers/staging/lustre/lustre/libcfs/nidstrings.c b/drivers/staging/lustre/lustre/libcfs/nidstrings.c index 4fc7b452f3ba..47c239f22ba8 100644 --- a/drivers/staging/lustre/lustre/libcfs/nidstrings.c +++ b/drivers/staging/lustre/lustre/libcfs/nidstrings.c @@ -40,8 +40,8 @@ #define DEBUG_SUBSYSTEM S_LNET -#include -#include +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lnet.h" /* CAVEAT VENDITOR! Keep the canonical string representation of nets/nids * consistent in all conversion functions. Some code fragments are copied diff --git a/drivers/staging/lustre/lustre/libcfs/prng.c b/drivers/staging/lustre/lustre/libcfs/prng.c index f87e9e516546..4147664ff57a 100644 --- a/drivers/staging/lustre/lustre/libcfs/prng.c +++ b/drivers/staging/lustre/lustre/libcfs/prng.c @@ -39,7 +39,7 @@ * algorithm recommended by Marsaglia */ -#include +#include "../../include/linux/libcfs/libcfs.h" /* From: George Marsaglia diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.c b/drivers/staging/lustre/lustre/libcfs/tracefile.c index 07845e844243..0569bf8c75f3 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.c @@ -44,7 +44,7 @@ #define LUSTRE_TRACEFILE_PRIVATE #include "tracefile.h" -#include +#include "../../include/linux/libcfs/libcfs.h" /* XXX move things up to the top, comment */ union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned; diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.h b/drivers/staging/lustre/lustre/libcfs/tracefile.h index 55ecfc9f201b..8df4af36c91d 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.h +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.h @@ -37,7 +37,7 @@ #ifndef __LIBCFS_TRACEFILE_H__ #define __LIBCFS_TRACEFILE_H__ -#include +#include "../../include/linux/libcfs/libcfs.h" #include "linux/linux-tracefile.h" diff --git a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c index 8085e32e5e7a..ab5c763aed94 100644 --- a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c +++ b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c @@ -39,7 +39,7 @@ */ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/lucache.h" static struct upcall_cache_entry *alloc_entry(struct upcall_cache *cache, __u64 key, void *args) diff --git a/drivers/staging/lustre/lustre/libcfs/workitem.c b/drivers/staging/lustre/lustre/libcfs/workitem.c index 0a03bf7ba3eb..65629579bd7d 100644 --- a/drivers/staging/lustre/lustre/libcfs/workitem.c +++ b/drivers/staging/lustre/lustre/libcfs/workitem.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LNET -#include +#include "../../include/linux/libcfs/libcfs.h" #define CFS_WS_NAME_LEN 16 diff --git a/drivers/staging/lustre/lustre/llite/vvp_object.c b/drivers/staging/lustre/lustre/llite/vvp_object.c index 65b6db1b71b4..369a3859bd0c 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_object.c +++ b/drivers/staging/lustre/lustre/llite/vvp_object.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h index 3965d5e4e725..7f8c5d3c3753 100644 --- a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h @@ -46,7 +46,7 @@ #ifndef LOV_CL_INTERNAL_H #define LOV_CL_INTERNAL_H -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lov/lov_ea.c b/drivers/staging/lustre/lustre/lov/lov_ea.c index a0c148e31f69..c2206624277f 100644 --- a/drivers/staging/lustre/lustre/lov/lov_ea.c +++ b/drivers/staging/lustre/lustre/lov/lov_ea.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LOV #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lov/lov_merge.c b/drivers/staging/lustre/lustre/lov/lov_merge.c index da959e901371..61103164cb56 100644 --- a/drivers/staging/lustre/lustre/lov/lov_merge.c +++ b/drivers/staging/lustre/lustre/lov/lov_merge.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_LOV -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 2d843b1c1ded..6806cb59fe15 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -42,7 +42,7 @@ */ #define DEBUG_SUBSYSTEM S_LOV -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lov/lov_offset.c b/drivers/staging/lustre/lustre/lov/lov_offset.c index 379568f8245c..6003f9b66ae7 100644 --- a/drivers/staging/lustre/lustre/lov/lov_offset.c +++ b/drivers/staging/lustre/lustre/lov/lov_offset.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_LOV -#include +#include "../../include/linux/libcfs/libcfs.h" #include diff --git a/drivers/staging/lustre/lustre/lov/lov_pool.c b/drivers/staging/lustre/lustre/lov/lov_pool.c index 3bda0c1f3c19..77918e4a736b 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pool.c +++ b/drivers/staging/lustre/lustre/lov/lov_pool.c @@ -44,7 +44,7 @@ #define DEBUG_SUBSYSTEM S_LOV -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index 984f4c3e5f04..9186662568b5 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_LOV -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/lvfs/fsfilt.c b/drivers/staging/lustre/lustre/lvfs/fsfilt.c index 0d6ed69ddb22..1c0fc24e6bdc 100644 --- a/drivers/staging/lustre/lustre/lvfs/fsfilt.c +++ b/drivers/staging/lustre/lustre/lvfs/fsfilt.c @@ -38,7 +38,7 @@ #include #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include LIST_HEAD(fsfilt_types); diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c index 374a9b78e1d2..e616873933f4 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c @@ -45,8 +45,8 @@ #include #include #include -#include #include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/mgc/mgc_internal.h b/drivers/staging/lustre/lustre/mgc/mgc_internal.h index 73b454898844..648b44323195 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_internal.h +++ b/drivers/staging/lustre/lustre/mgc/mgc_internal.h @@ -37,7 +37,7 @@ #ifndef _MGC_INTERNAL_H #define _MGC_INTERNAL_H -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/cl_object.c b/drivers/staging/lustre/lustre/obdclass/cl_object.c index 41cbc95b916e..229465980e0b 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_object.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_object.c @@ -51,13 +51,13 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../../include/linux/libcfs/libcfs.h" /* class_put_type() */ #include #include #include #include -#include /* for cfs_hash stuff */ +#include "../../include/linux/libcfs/libcfs_hash.h" /* for cfs_hash stuff */ #include #include "cl_internal.h" diff --git a/drivers/staging/lustre/lustre/obdclass/cl_page.c b/drivers/staging/lustre/lustre/obdclass/cl_page.c index 1b616e4fe140..5e21dd5cfd32 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_page.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_page.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index dde04b767a6d..2eadaa91daa2 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -39,7 +39,7 @@ #include #include -#include +#include "../../include/linux/lnet/lnetctl.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c index bdf2eed2952a..8fcfd8c70bbc 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c @@ -65,10 +65,10 @@ #include #include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/lnet/lnetctl.h" #include #include -#include #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/lu_object.c b/drivers/staging/lustre/lustre/obdclass/lu_object.c index 92e8a15a5e5d..376893c374c8 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_object.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_object.c @@ -44,12 +44,12 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../../include/linux/libcfs/libcfs.h" # include /* hash_long() */ -#include +#include "../../include/linux/libcfs/libcfs_hash.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/lu_ref.c b/drivers/staging/lustre/lustre/obdclass/lu_ref.c index 23a76f158356..b29ca63d85b2 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_ref.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_ref.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_CLASS -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c b/drivers/staging/lustre/lustre/obdclass/lu_ucred.c index e23e545b0d66..f5bd9cca258d 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_ucred.c @@ -44,7 +44,7 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include #include diff --git a/drivers/staging/lustre/lustre/obdclass/uuid.c b/drivers/staging/lustre/lustre/obdclass/uuid.c index e87a19900770..344a04711df4 100644 --- a/drivers/staging/lustre/lustre/obdclass/uuid.c +++ b/drivers/staging/lustre/lustre/obdclass/uuid.c @@ -38,7 +38,7 @@ #define DEBUG_SUBSYSTEM S_CLASS -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index cdc46719bbd4..59b8f648a077 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -35,7 +35,7 @@ */ #define DEBUG_SUBSYSTEM S_ECHO -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h index e74b7bb9776c..9fe79f30d936 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h @@ -46,7 +46,7 @@ #ifndef OSC_CL_INTERNAL_H #define OSC_CL_INTERNAL_H -# include +#include "../../include/linux/libcfs/libcfs.h" #include /* osc_build_res_name() */ diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index a46129bec17a..be677ddeed59 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_OSC -# include +#include "../../include/linux/libcfs/libcfs.h" /* fid_build_reg_res_name() */ #include diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 90e8912dbeb5..6749bc415c9f 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_OSC -#include +#include "../../include/linux/libcfs/libcfs.h" #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/errno.c b/drivers/staging/lustre/lustre/ptlrpc/errno.c index 1c1006333960..79734cd3693e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/errno.c +++ b/drivers/staging/lustre/lustre/ptlrpc/errno.c @@ -25,7 +25,7 @@ * Copyright (c) 2013, Intel Corporation. */ -#include +#include "../../include/linux/libcfs/libcfs.h" #include /* diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index 209fcc144298..fcdba92883c8 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_RPC -# include +#include "../../include/linux/libcfs/libcfs.h" # ifdef __mips64__ # include # endif diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c index ab084541fddb..768a150c0d92 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_LOG -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c index 17c06a32df62..da580eda7ce1 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c @@ -46,7 +46,7 @@ #define DEBUG_SUBSYSTEM S_LOG -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs.c b/drivers/staging/lustre/lustre/ptlrpc/nrs.c index 12151aa2a1e5..8db5c0acb229 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs.c @@ -44,7 +44,7 @@ #include #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include "ptlrpc_internal.h" /* XXX: This is just for liblustre. Remove the #if defined directive when the diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c index 7d3ee9706c9b..cbf30c44b857 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c @@ -49,7 +49,7 @@ #define DEBUG_SUBSYSTEM S_RPC #include #include -#include +#include "../../include/linux/libcfs/libcfs.h" #include "ptlrpc_internal.h" /** diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index cddeeb6bb23d..056c290c839c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -44,7 +44,7 @@ #define DEBUG_SUBSYSTEM S_RPC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c index ca734ce079c1..ea636f9026b5 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c @@ -55,7 +55,7 @@ #define DEBUG_SUBSYSTEM S_RPC -# include +#include "../../include/linux/libcfs/libcfs.h" #include # include diff --git a/drivers/staging/lustre/lustre/ptlrpc/recover.c b/drivers/staging/lustre/lustre/ptlrpc/recover.c index 9cec8a649dc3..bd968f070fc9 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/recover.c +++ b/drivers/staging/lustre/lustre/ptlrpc/recover.c @@ -39,7 +39,7 @@ */ #define DEBUG_SUBSYSTEM S_RPC -# include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index 28ac824a73fb..054b1da94cf4 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c index 9d51badea73d..f41ddbae7752 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c index 231656ed7660..585d332c674e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c @@ -36,7 +36,7 @@ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c index d2eb20eb56db..e63923fd343c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c index 1928bf57222f..095d6e79fa0e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c @@ -38,7 +38,7 @@ #define DEBUG_SUBSYSTEM S_SEC -#include +#include "../../include/linux/libcfs/libcfs.h" #include #include diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 214daa2e4cfa..bdb9f576576d 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -39,7 +39,7 @@ #include #include #include -#include +#include "../../include/linux/lnet/types.h" #include "ptlrpc_internal.h" /* The following are visible and mutable through /sys/module/ptlrpc */ -- cgit From 5c4fcfbe3f64c6803ccc2ff3653347f9d84ac729 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 20:58:15 -0700 Subject: staging: lustre: remove some unneeded cflags The lnet code did not even need the cflags setting in the Makefile, so remove it, as it is not doing anything at all. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/klnds/o2iblnd/Makefile | 3 --- drivers/staging/lustre/lnet/klnds/socklnd/Makefile | 4 ---- drivers/staging/lustre/lnet/lnet/Makefile | 3 --- drivers/staging/lustre/lnet/selftest/Makefile | 2 -- 4 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/Makefile b/drivers/staging/lustre/lnet/klnds/o2iblnd/Makefile index 71b7d8418357..e0a7aa72b7d5 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/Makefile +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/Makefile @@ -1,5 +1,2 @@ obj-$(CONFIG_LNET_XPRT_IB) += ko2iblnd.o ko2iblnd-y := o2iblnd.o o2iblnd_cb.o o2iblnd_modparams.o - - -ccflags-y := -I$(src)/../../include diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/Makefile b/drivers/staging/lustre/lnet/klnds/socklnd/Makefile index 6494b2bada05..f3fb8778c3ad 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/Makefile +++ b/drivers/staging/lustre/lnet/klnds/socklnd/Makefile @@ -1,7 +1,3 @@ obj-$(CONFIG_LNET) += ksocklnd.o ksocklnd-y := socklnd.o socklnd_cb.o socklnd_proto.o socklnd_modparams.o socklnd_lib-linux.o - - - -ccflags-y := -I$(src)/../../include diff --git a/drivers/staging/lustre/lnet/lnet/Makefile b/drivers/staging/lustre/lnet/lnet/Makefile index b815fe12b10a..336b8ea4fdf6 100644 --- a/drivers/staging/lustre/lnet/lnet/Makefile +++ b/drivers/staging/lustre/lnet/lnet/Makefile @@ -3,6 +3,3 @@ obj-$(CONFIG_LNET) += lnet.o lnet-y := api-ni.o config.o lib-me.o lib-msg.o lib-eq.o \ lib-md.o lib-ptl.o lib-move.o module.o lo.o router.o \ router_proc.o acceptor.o peer.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lnet/selftest/Makefile b/drivers/staging/lustre/lnet/selftest/Makefile index 1e40aeea2962..c0de6e2d96d0 100644 --- a/drivers/staging/lustre/lnet/selftest/Makefile +++ b/drivers/staging/lustre/lnet/selftest/Makefile @@ -2,5 +2,3 @@ obj-$(CONFIG_LNET_SELFTEST) := lnet_selftest.o lnet_selftest-y := console.o conrpc.o conctl.o framework.o timer.o rpc.o \ module.o ping_test.o brw_test.o - -ccflags-y := -I$(src)/../include -- cgit From da0e6a7a9a87fd1823b92ddfea215b70960b6710 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:00:57 -0700 Subject: staging: lustre: libcfs: remove ccflags from Makefile There were two paths being added, yet only one was needed. Remove both, and fix up the 3 .c files to point to the location of the needed .h file. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/Makefile | 3 --- drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c | 2 +- drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c | 2 +- drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/Makefile b/drivers/staging/lustre/lustre/libcfs/Makefile index 6e489d7aaa8b..aeeaab73a1fd 100644 --- a/drivers/staging/lustre/lustre/libcfs/Makefile +++ b/drivers/staging/lustre/lustre/libcfs/Makefile @@ -16,6 +16,3 @@ libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \ libcfs_mem.o libcfs_lock.o libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs) - -ccflags-y := -I$(src)/../include -ccflags-y += -I$(src)/ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c index ca2faa68cb5a..eaa423d13650 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c @@ -58,7 +58,7 @@ #include "../../../include/linux/libcfs/libcfs.h" #include "../../../include/linux/libcfs/linux/portals_compat25.h" -#include "tracefile.h" +#include "../tracefile.h" #include diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index 264dc8b34648..33fd7ca69e34 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -63,7 +63,7 @@ #include "../../../include/linux/libcfs/libcfs.h" #include -#include "tracefile.h" +#include "../tracefile.h" static ctl_table_header_t *lnet_table_header = NULL; extern char lnet_upcall[1024]; diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c index f8dadd2f5607..bc38b99d8ca2 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c @@ -38,7 +38,7 @@ #define LUSTRE_TRACEFILE_PRIVATE #include "../../../include/linux/libcfs/libcfs.h" -#include "tracefile.h" +#include "../tracefile.h" /* percents to share the total debug memory for each type */ static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = { -- cgit From 1accaadf2af8b871601d8b1cc8a06dce87b6a435 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:34:24 -0700 Subject: staging: lustre: fix include relative paths In drivers/staging/lustre/lustre/include there was a bunch of .h files relying on ccflags to be set up right. Make all of them proper relative paths so that ccflags for different subdirs can be now removed. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/cl_object.h | 8 ++++---- drivers/staging/lustre/lustre/include/dt_object.h | 2 +- .../lustre/lustre/include/linux/lprocfs_status.h | 2 +- .../lustre/lustre/include/linux/lustre_acl.h | 2 +- .../lustre/lustre/include/linux/lustre_compat25.h | 2 +- .../lustre/lustre/include/linux/lustre_fsfilt.h | 4 ++-- .../lustre/lustre/include/linux/lustre_lib.h | 4 ++-- .../lustre/lustre/include/linux/lustre_lite.h | 6 +++--- drivers/staging/lustre/lustre/include/linux/lvfs.h | 6 +++--- .../lustre/lustre/include/linux/lvfs_linux.h | 2 +- drivers/staging/lustre/lustre/include/linux/obd.h | 4 ++-- .../lustre/lustre/include/linux/obd_support.h | 10 +++++----- .../staging/lustre/lustre/include/lprocfs_status.h | 4 ++-- drivers/staging/lustre/lustre/include/lu_object.h | 4 ++-- .../lustre/lustre/include/lustre/lustre_idl.h | 5 ++--- .../lustre/lustre/include/lustre/lustre_user.h | 4 ++-- .../staging/lustre/lustre/include/lustre_capa.h | 2 +- drivers/staging/lustre/lustre/include/lustre_cfg.h | 4 ++-- .../staging/lustre/lustre/include/lustre_debug.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_dlm.h | 16 ++++++++-------- .../staging/lustre/lustre/include/lustre_export.h | 6 +++--- drivers/staging/lustre/lustre/include/lustre_fid.h | 2 +- drivers/staging/lustre/lustre/include/lustre_fld.h | 2 +- .../staging/lustre/lustre/include/lustre_handles.h | 2 +- .../staging/lustre/lustre/include/lustre_import.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_lib.h | 16 ++++++++-------- .../staging/lustre/lustre/include/lustre_lite.h | 14 +++++++------- drivers/staging/lustre/lustre/include/lustre_log.h | 10 +++++----- drivers/staging/lustre/lustre/include/lustre_mdc.h | 14 +++++++------- drivers/staging/lustre/lustre/include/lustre_mds.h | 10 +++++----- drivers/staging/lustre/lustre/include/lustre_net.h | 22 +++++++++++----------- .../staging/lustre/lustre/include/lustre_quota.h | 8 ++++---- .../lustre/lustre/include/lustre_req_layout.h | 2 +- drivers/staging/lustre/lustre/include/lvfs.h | 2 +- drivers/staging/lustre/lustre/include/md_object.h | 2 +- drivers/staging/lustre/lustre/include/obd.h | 16 ++++++++-------- drivers/staging/lustre/lustre/include/obd_cksum.h | 2 +- drivers/staging/lustre/lustre/include/obd_class.h | 18 +++++++++--------- drivers/staging/lustre/lustre/include/obd_ost.h | 2 +- .../staging/lustre/lustre/include/obd_support.h | 7 +++---- 40 files changed, 127 insertions(+), 129 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/cl_object.h b/drivers/staging/lustre/lustre/include/cl_object.h index c809239c0866..e51cd690f907 100644 --- a/drivers/staging/lustre/lustre/include/cl_object.h +++ b/drivers/staging/lustre/lustre/include/cl_object.h @@ -97,10 +97,10 @@ /* * super-class definitions. */ -#include -#include -# include -# include +#include "lu_object.h" +#include "lvfs.h" +#include +#include struct inode; diff --git a/drivers/staging/lustre/lustre/include/dt_object.h b/drivers/staging/lustre/lustre/include/dt_object.h index 7c6bbab50f8a..901f7f5348c5 100644 --- a/drivers/staging/lustre/lustre/include/dt_object.h +++ b/drivers/staging/lustre/lustre/include/dt_object.h @@ -53,7 +53,7 @@ /* * super-class definitions. */ -#include +#include "lu_object.h" #include "../../include/linux/libcfs/libcfs.h" diff --git a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h b/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h index d1e1a185ae1c..cb76b5d6f71a 100644 --- a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h @@ -50,7 +50,7 @@ #include #include #include -#include "../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/libcfs/libcfs.h" #include diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_acl.h b/drivers/staging/lustre/lustre/include/linux/lustre_acl.h index a91c5497d22c..b17273d403bb 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_acl.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_acl.h @@ -56,7 +56,7 @@ (sizeof(posix_acl_xattr_header) + \ LUSTRE_POSIX_ACL_MAX_ENTRIES * sizeof(posix_acl_xattr_entry)) -#include +#include "lustre_intent.h" #include /* XATTR_{REPLACE,CREATE} */ #ifndef LUSTRE_POSIX_ACL_MAX_SIZE diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h index d9d7ebb5683f..8621bac5058b 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h @@ -41,7 +41,7 @@ #include #include "../../../include/linux/libcfs/linux/portals_compat25.h" -#include +#include "lustre_patchless_compat.h" # define LOCK_FS_STRUCT(fs) spin_lock(&(fs)->lock) # define UNLOCK_FS_STRUCT(fs) spin_unlock(&(fs)->lock) diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h b/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h index 4da6e372e00b..75cc32c02eb5 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h @@ -46,8 +46,8 @@ #endif -#include -#include +#include "../obd.h" +#include "../obd_class.h" typedef void (*fsfilt_cb_t)(struct obd_device *obd, __u64 last_rcvd, void *data, int error); diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_lib.h b/drivers/staging/lustre/lustre/include/linux/lustre_lib.h index 57f3b01d1a32..0a4c65ae9242 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_lib.h @@ -49,8 +49,8 @@ # include # include # include -# include -# include +#include "lustre_compat25.h" +#include "lustre_common.h" #ifndef LP_POISON # define LI_POISON 0x5a5a5a5a diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h index df9391275617..bd055ecac8bb 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h @@ -46,9 +46,9 @@ #include #include -#include -#include -#include +#include "../obd_class.h" +#include "../lustre_net.h" +#include "../lustre_ha.h" #include #include diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs.h b/drivers/staging/lustre/lustre/include/linux/lvfs.h index e61f1b87f822..dd1be9c39829 100644 --- a/drivers/staging/lustre/lustre/include/linux/lvfs.h +++ b/drivers/staging/lustre/lustre/include/linux/lvfs.h @@ -45,9 +45,9 @@ #error Do not #include this file directly. #include instead #endif -#include -#include -#include +#include "lustre_compat25.h" +#include "lustre_common.h" +#include "lvfs_linux.h" #define LLOG_LVFS diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h index 140a60f1f0c9..0dea1789321d 100644 --- a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h +++ b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h @@ -41,7 +41,7 @@ #include #include -#include +#include "../lvfs.h" #define l_file file #define l_dentry dentry diff --git a/drivers/staging/lustre/lustre/include/linux/obd.h b/drivers/staging/lustre/lustre/include/linux/obd.h index f96f65d5168f..2a3a88cbb192 100644 --- a/drivers/staging/lustre/lustre/include/linux/obd.h +++ b/drivers/staging/lustre/lustre/include/linux/obd.h @@ -41,14 +41,14 @@ #error Do not #include this file directly. #include instead #endif -#include +#include "../obd_support.h" # include # include # include /* for struct task_struct, for current.h */ # include # include -# include +#include "lustre_intent.h" struct ll_iattr { struct iattr iattr; diff --git a/drivers/staging/lustre/lustre/include/linux/obd_support.h b/drivers/staging/lustre/lustre/include/linux/obd_support.h index db7a8bacd491..ea03b8434f62 100644 --- a/drivers/staging/lustre/lustre/include/linux/obd_support.h +++ b/drivers/staging/lustre/lustre/include/linux/obd_support.h @@ -50,14 +50,14 @@ #include #include #include -#include -#include -#include "../../include/linux/libcfs/libcfs.h" -#include +#include "../../include/linux/lustre_compat25.h" +#include "lustre_common.h" +#include "../../../include/linux/libcfs/libcfs.h" +#include "../lustre/lustre_idl.h" # include # include -# include +# include "../lvfs.h" #endif diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index 2f86eb7976eb..d8d6728738e7 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -42,8 +42,8 @@ #ifndef _LPROCFS_SNMP_H #define _LPROCFS_SNMP_H -#include -#include +#include "linux/lprocfs_status.h" +#include "lustre/lustre_idl.h" #include "../../include/linux/libcfs/params_tree.h" struct lprocfs_vars { diff --git a/drivers/staging/lustre/lustre/include/lu_object.h b/drivers/staging/lustre/lustre/include/lu_object.h index 4fe1611ff703..d5c368bab5bd 100644 --- a/drivers/staging/lustre/lustre/include/lu_object.h +++ b/drivers/staging/lustre/lustre/include/lu_object.h @@ -39,8 +39,8 @@ #include #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "lustre/lustre_idl.h" +#include "lu_ref.h" struct seq_file; struct proc_dir_entry; diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 3d5bec75564c..6f7af96b5098 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -96,9 +96,8 @@ #endif /* Defn's shared with user-space. */ -#include - -#include +#include "lustre_user.h" +#include "lustre_errno.h" /* * GENERAL STUFF diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h index 95c754f2075f..9bbd9042d664 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h @@ -46,8 +46,8 @@ * @{ */ -#include -#include +#include "ll_fiemap.h" +#include "../linux/lustre_user.h" /* for statfs() */ #define LL_SUPER_MAGIC 0x0BD00BD0 diff --git a/drivers/staging/lustre/lustre/include/lustre_capa.h b/drivers/staging/lustre/lustre/include/lustre_capa.h index d77bffc0b59d..4bafba98f050 100644 --- a/drivers/staging/lustre/lustre/include/lustre_capa.h +++ b/drivers/staging/lustre/lustre/include/lustre_capa.h @@ -50,7 +50,7 @@ * capability */ #include -#include +#include "lustre/lustre_idl.h" #define CAPA_TIMEOUT 1800 /* sec, == 30 min */ #define CAPA_KEY_TIMEOUT (24 * 60 * 60) /* sec, == 1 days */ diff --git a/drivers/staging/lustre/lustre/include/lustre_cfg.h b/drivers/staging/lustre/lustre/include/lustre_cfg.h index 3680668a8920..03017fe49d46 100644 --- a/drivers/staging/lustre/lustre/include/lustre_cfg.h +++ b/drivers/staging/lustre/lustre/include/lustre_cfg.h @@ -222,7 +222,7 @@ static inline int lustre_cfg_len(__u32 bufcount, __u32 *buflens) } -#include +#include "obd_support.h" static inline struct lustre_cfg *lustre_cfg_new(int cmd, struct lustre_cfg_bufs *bufs) @@ -286,7 +286,7 @@ static inline int lustre_cfg_sanity_check(void *buf, int len) return 0; } -#include +#include "lustre/lustre_user.h" /** @} cfg */ diff --git a/drivers/staging/lustre/lustre/include/lustre_debug.h b/drivers/staging/lustre/lustre/include/lustre_debug.h index 6146ccb8cce0..6c92d0bc943b 100644 --- a/drivers/staging/lustre/lustre/include/lustre_debug.h +++ b/drivers/staging/lustre/lustre/include/lustre_debug.h @@ -42,8 +42,8 @@ * @{ */ -#include -#include +#include "lustre_net.h" +#include "obd.h" /* lib/debug.c */ void dump_lniobuf(struct niobuf_local *lnb); diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index bf5b2cb792e3..bdf897b8383e 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -48,14 +48,14 @@ #ifndef _LUSTRE_DLM_H__ #define _LUSTRE_DLM_H__ -#include - -#include -#include -#include -#include -#include /* for interval_node{}, ldlm_extent */ -#include +#include "linux/lustre_dlm.h" + +#include "lustre_lib.h" +#include "lustre_net.h" +#include "lustre_import.h" +#include "lustre_handles.h" +#include "interval_tree.h" /* for interval_node{}, ldlm_extent */ +#include "lu_ref.h" #include "lustre_dlm_flags.h" diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index 103f7a8bd83f..bbb4b97034ac 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -46,9 +46,9 @@ * @{ */ -#include -#include -#include +#include "lprocfs_status.h" +#include "lustre/lustre_idl.h" +#include "lustre_dlm.h" struct mds_client_data; struct mdt_client_data; diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h b/drivers/staging/lustre/lustre/include/lustre_fid.h index 5b7333092805..7fa557bc80e6 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fid.h +++ b/drivers/staging/lustre/lustre/include/lustre_fid.h @@ -153,7 +153,7 @@ */ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "lustre/lustre_idl.h" struct lu_env; struct lu_site; diff --git a/drivers/staging/lustre/lustre/include/lustre_fld.h b/drivers/staging/lustre/lustre/include/lustre_fld.h index 365854789f60..ce6330f9bb50 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fld.h +++ b/drivers/staging/lustre/lustre/include/lustre_fld.h @@ -42,7 +42,7 @@ * @{ */ -#include +#include "lustre/lustre_idl.h" #include "../../include/linux/libcfs/libcfs.h" struct lu_client_fld; diff --git a/drivers/staging/lustre/lustre/include/lustre_handles.h b/drivers/staging/lustre/lustre/include/lustre_handles.h index 8ae868fdf658..94989c5e361f 100644 --- a/drivers/staging/lustre/lustre/include/lustre_handles.h +++ b/drivers/staging/lustre/lustre/include/lustre_handles.h @@ -42,7 +42,7 @@ * @{ */ -#include +#include "linux/lustre_handles.h" #include "../../include/linux/libcfs/libcfs.h" diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 01ed786b40b9..51db5eb06d99 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -47,8 +47,8 @@ * @{ */ -#include -#include +#include "lustre_handles.h" +#include "lustre/lustre_idl.h" /** diff --git a/drivers/staging/lustre/lustre/include/lustre_lib.h b/drivers/staging/lustre/lustre/include/lustre_lib.h index 60edf5a59918..8aecb9a3c84d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/lustre_lib.h @@ -47,19 +47,19 @@ */ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include +#include "lustre/lustre_idl.h" +#include "lustre_ver.h" +#include "lustre_cfg.h" +#include "linux/lustre_lib.h" /* target.c */ struct ptlrpc_request; struct obd_export; struct lu_target; struct l_wait_info; -#include -#include -#include +#include "lustre_ha.h" +#include "lustre_net.h" +#include "lvfs.h" int target_pack_pool_reply(struct ptlrpc_request *req); @@ -241,7 +241,7 @@ static inline int obd_ioctl_is_invalid(struct obd_ioctl_data *data) } -#include +#include "obd_support.h" /* function defined in lustre/obdclass//-module.c */ int obd_ioctl_getdata(char **buf, int *len, void *arg); diff --git a/drivers/staging/lustre/lustre/include/lustre_lite.h b/drivers/staging/lustre/lustre/include/lustre_lite.h index beccb5e4065f..eee900638720 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lite.h +++ b/drivers/staging/lustre/lustre/include/lustre_lite.h @@ -42,19 +42,19 @@ * @{ */ -#include +#include "linux/lustre_lite.h" -#include -#include -#include -#include -#include +#include "obd_class.h" +#include "obd_ost.h" +#include "lustre_net.h" +#include "lustre_mds.h" +#include "lustre_ha.h" /* 4UL * 1024 * 1024 */ #define LL_MAX_BLKSIZE_BITS (22) #define LL_MAX_BLKSIZE (1UL< +#include "lustre/lustre_user.h" struct lustre_rw_params { diff --git a/drivers/staging/lustre/lustre/include/lustre_log.h b/drivers/staging/lustre/lustre/include/lustre_log.h index 1a9a9228b795..d02ea24a7e40 100644 --- a/drivers/staging/lustre/lustre/include/lustre_log.h +++ b/drivers/staging/lustre/lustre/include/lustre_log.h @@ -56,12 +56,12 @@ * @{ */ -#include +#include "linux/lustre_log.h" -#include -#include -#include -#include +#include "obd_class.h" +#include "obd_ost.h" +#include "lustre/lustre_idl.h" +#include "dt_object.h" #define LOG_NAME_LIMIT(logname, name) \ snprintf(logname, sizeof(logname), "LOGS/%s", name) diff --git a/drivers/staging/lustre/lustre/include/lustre_mdc.h b/drivers/staging/lustre/lustre/include/lustre_mdc.h index 1efcf838b197..39bbc3634b06 100644 --- a/drivers/staging/lustre/lustre/include/lustre_mdc.h +++ b/drivers/staging/lustre/lustre/include/lustre_mdc.h @@ -50,14 +50,14 @@ #include #include -#include -#include +#include "linux/lustre_intent.h" +#include "lustre_handles.h" #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include +#include "obd_class.h" +#include "lustre/lustre_idl.h" +#include "lustre_lib.h" +#include "lustre_dlm.h" +#include "lustre_export.h" struct ptlrpc_client; struct obd_export; diff --git a/drivers/staging/lustre/lustre/include/lustre_mds.h b/drivers/staging/lustre/lustre/include/lustre_mds.h index 9a1575013178..f0cce41c55c0 100644 --- a/drivers/staging/lustre/lustre/include/lustre_mds.h +++ b/drivers/staging/lustre/lustre/include/lustre_mds.h @@ -47,12 +47,12 @@ * @{ */ -#include +#include "lustre_handles.h" #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include +#include "lustre/lustre_idl.h" +#include "lustre_lib.h" +#include "lustre_dlm.h" +#include "lustre_export.h" struct mds_group_info { struct obd_uuid *uuid; diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index fd8d943c2848..3d3346105fed 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -55,21 +55,21 @@ * @{ */ -#include +#include "linux/lustre_net.h" #include "../../include/linux/libcfs/libcfs.h" // #include #include "../../include/linux/lnet/lnet.h" -#include -#include -#include -#include -#include -#include -#include - -#include -#include +#include "lustre/lustre_idl.h" +#include "lustre_ha.h" +#include "lustre_sec.h" +#include "lustre_import.h" +#include "lprocfs_status.h" +#include "lu_object.h" +#include "lustre_req_layout.h" + +#include "obd_support.h" +#include "lustre_ver.h" /* MD flags we _always_ use */ #define PTLRPC_MD_OPTIONS 0 diff --git a/drivers/staging/lustre/lustre/include/lustre_quota.h b/drivers/staging/lustre/lustre/include/lustre_quota.h index 07cb7c310bcc..1ae72e3ff1bf 100644 --- a/drivers/staging/lustre/lustre/include/lustre_quota.h +++ b/drivers/staging/lustre/lustre/include/lustre_quota.h @@ -32,11 +32,11 @@ * */ -#include +#include "linux/lustre_quota.h" -#include -#include -#include +#include "dt_object.h" +#include "lustre_fid.h" +#include "lustre_dlm.h" #ifndef MAX_IQ_TIME #define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ diff --git a/drivers/staging/lustre/lustre/include/lustre_req_layout.h b/drivers/staging/lustre/lustre/include/lustre_req_layout.h index a83db61a30be..c6457b27c4e7 100644 --- a/drivers/staging/lustre/lustre/include/lustre_req_layout.h +++ b/drivers/staging/lustre/lustre/include/lustre_req_layout.h @@ -73,7 +73,7 @@ struct req_capsule { #if !defined(__REQ_LAYOUT_USER__) /* struct ptlrpc_request, lustre_msg* */ -#include +#include "lustre_net.h" void req_capsule_init(struct req_capsule *pill, struct ptlrpc_request *req, enum req_location location); diff --git a/drivers/staging/lustre/lustre/include/lvfs.h b/drivers/staging/lustre/lustre/include/lvfs.h index 156481c2a911..32dcd57c47cc 100644 --- a/drivers/staging/lustre/lustre/include/lvfs.h +++ b/drivers/staging/lustre/lustre/include/lvfs.h @@ -42,7 +42,7 @@ #define LL_FID_NAMELEN (16 + 1 + 8 + 1) #include "../../include/linux/libcfs/libcfs.h" -#include +#include "linux/lvfs.h" #include "../../include/linux/libcfs/lucache.h" diff --git a/drivers/staging/lustre/lustre/include/md_object.h b/drivers/staging/lustre/lustre/include/md_object.h index ef46b2c461a6..2e5d55030a63 100644 --- a/drivers/staging/lustre/lustre/include/md_object.h +++ b/drivers/staging/lustre/lustre/include/md_object.h @@ -56,7 +56,7 @@ /* * super-class definitions. */ -#include +#include "dt_object.h" struct md_device; struct md_device_operations; diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index e2f33d14e0e4..6f036ce7e2da 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -37,7 +37,7 @@ #ifndef __OBD_H #define __OBD_H -#include +#include "linux/obd.h" #define IOC_OSC_TYPE 'h' #define IOC_OSC_MIN_NR 20 @@ -48,14 +48,14 @@ #define IOC_MDC_MIN_NR 20 #define IOC_MDC_MAX_NR 50 -#include -#include +#include "lustre/lustre_idl.h" +#include "lustre_lib.h" #include "../../include/linux/libcfs/bitmap.h" -#include -#include -#include -#include -#include +#include "lu_ref.h" +#include "lustre_export.h" +#include "lustre_fid.h" +#include "lustre_fld.h" +#include "lustre_capa.h" #define MAX_OBD_DEVICES 8192 diff --git a/drivers/staging/lustre/lustre/include/obd_cksum.h b/drivers/staging/lustre/lustre/include/obd_cksum.h index d2e0d4c45e6b..662a78062963 100644 --- a/drivers/staging/lustre/lustre/include/obd_cksum.h +++ b/drivers/staging/lustre/lustre/include/obd_cksum.h @@ -35,7 +35,7 @@ #ifndef __OBD_CKSUM #define __OBD_CKSUM #include "../../include/linux/libcfs/libcfs.h" -#include +#include "lustre/lustre_idl.h" static inline unsigned char cksum_obd2cfs(cksum_type_t cksum_type) { diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index f8a9d7c91e81..040fc156b925 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -37,15 +37,15 @@ #define __CLASS_OBD_H -#include -#include -#include -#include -#include -#include -#include - -#include +#include "obd_support.h" +#include "lustre_import.h" +#include "lustre_net.h" +#include "obd.h" +#include "lustre_lib.h" +#include "lustre/lustre_idl.h" +#include "lprocfs_status.h" + +#include "linux/obd_class.h" #define OBD_STATFS_NODELAY 0x0001 /* requests should be send without delay * and resends for avoid deadlocks */ diff --git a/drivers/staging/lustre/lustre/include/obd_ost.h b/drivers/staging/lustre/lustre/include/obd_ost.h index 54ef54045115..60de42972ec9 100644 --- a/drivers/staging/lustre/lustre/include/obd_ost.h +++ b/drivers/staging/lustre/lustre/include/obd_ost.h @@ -43,7 +43,7 @@ #ifndef _LUSTRE_OST_H #define _LUSTRE_OST_H -#include +#include "obd_class.h" struct osc_brw_async_args { struct obdo *aa_oa; diff --git a/drivers/staging/lustre/lustre/include/obd_support.h b/drivers/staging/lustre/lustre/include/obd_support.h index f9a120318963..4164caea8e7d 100644 --- a/drivers/staging/lustre/lustre/include/obd_support.h +++ b/drivers/staging/lustre/lustre/include/obd_support.h @@ -38,10 +38,9 @@ #define _OBD_SUPPORT #include "../../include/linux/libcfs/libcfs.h" -#include -#include - -#include +#include "lvfs.h" +#include "lprocfs_status.h" +#include "linux/obd_support.h" /* global variables */ extern struct lprocfs_stats *obd_memory; -- cgit From 615663918afdb21ed72f23561ab8e5a7a9cdacfd Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:50:29 -0700 Subject: staging: lustre: fid: remove ccflags from Makefile Also fix up the relative paths in the .c files to properly build now Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fid/Makefile | 3 --- drivers/staging/lustre/lustre/fid/fid_internal.h | 2 +- drivers/staging/lustre/lustre/fid/fid_lib.c | 4 ++-- drivers/staging/lustre/lustre/fid/fid_request.c | 10 +++++----- drivers/staging/lustre/lustre/fid/lproc_fid.c | 14 +++++++------- 5 files changed, 15 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fid/Makefile b/drivers/staging/lustre/lustre/fid/Makefile index d24f2df7c0af..5513ce416a35 100644 --- a/drivers/staging/lustre/lustre/fid/Makefile +++ b/drivers/staging/lustre/lustre/fid/Makefile @@ -1,6 +1,3 @@ obj-$(CONFIG_LUSTRE_FS) += fid.o fid-y := fid_request.o fid_lib.o fid-$(CONFIG_PROC_FS) += lproc_fid.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/fid/fid_internal.h b/drivers/staging/lustre/lustre/fid/fid_internal.h index 59381d368d9c..6049e3ef4d8a 100644 --- a/drivers/staging/lustre/lustre/fid/fid_internal.h +++ b/drivers/staging/lustre/lustre/fid/fid_internal.h @@ -40,7 +40,7 @@ #ifndef __FID_INTERNAL_H #define __FID_INTERNAL_H -#include +#include "../include/lustre/lustre_idl.h" #include "../../include/linux/libcfs/libcfs.h" /* Functions used internally in module. */ diff --git a/drivers/staging/lustre/lustre/fid/fid_lib.c b/drivers/staging/lustre/lustre/fid/fid_lib.c index a75d4bbf7cbd..dd65159ebb38 100644 --- a/drivers/staging/lustre/lustre/fid/fid_lib.c +++ b/drivers/staging/lustre/lustre/fid/fid_lib.c @@ -45,8 +45,8 @@ #include "../../include/linux/libcfs/libcfs.h" #include -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_fid.h" /** * A cluster-wide range from which fid-sequences are granted to servers and diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index 2127ad9b1785..d0c7a954c12c 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -45,12 +45,12 @@ #include "../../include/linux/libcfs/libcfs.h" #include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" /* mdc RPC locks */ -#include +#include "../include/lustre_mdc.h" #include "fid_internal.h" static int seq_client_rpc(struct lu_client_seq *seq, diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index 3bbcedaceae9..4302c1e9376f 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -45,13 +45,13 @@ #include "../../include/linux/libcfs/libcfs.h" #include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/dt_object.h" +#include "../include/md_object.h" +#include "../include/obd_support.h" +#include "../include/lustre_req_layout.h" +#include "../include/lustre_fid.h" #include "fid_internal.h" /* Format: [0x64BIT_INT - 0x64BIT_INT] + 32 bytes just in case */ -- cgit From 0e9ad0efe252f884ce1060ca036740df2f93c92b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:51:13 -0700 Subject: staging: lustre: fld: remove ccflags from Makefile Also fix up the relative paths in the .c files to properly build now Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fld/Makefile | 3 --- drivers/staging/lustre/lustre/fld/fld_cache.c | 26 +++++++++++----------- drivers/staging/lustre/lustre/fld/fld_internal.h | 8 +++---- drivers/staging/lustre/lustre/fld/fld_request.c | 28 ++++++++++++------------ drivers/staging/lustre/lustre/fld/lproc_fld.c | 20 ++++++++--------- 5 files changed, 41 insertions(+), 44 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fld/Makefile b/drivers/staging/lustre/lustre/fld/Makefile index 640fba4b827d..2bbf08433dca 100644 --- a/drivers/staging/lustre/lustre/fld/Makefile +++ b/drivers/staging/lustre/lustre/fld/Makefile @@ -1,6 +1,3 @@ obj-$(CONFIG_LUSTRE_FS) += fld.o fld-y := fld_request.o fld_cache.o fld-$(CONFIG_PROC_FS) += lproc_fld.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/fld/fld_cache.c b/drivers/staging/lustre/lustre/fld/fld_cache.c index 32ec812598cd..cce25a82abbd 100644 --- a/drivers/staging/lustre/lustre/fld/fld_cache.c +++ b/drivers/staging/lustre/lustre/fld/fld_cache.c @@ -44,19 +44,19 @@ #define DEBUG_SUBSYSTEM S_FLD #include "../../include/linux/libcfs/libcfs.h" -# include -# include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include +#include +#include + +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_ver.h" +#include "../include/obd_support.h" +#include "../include/lprocfs_status.h" + +#include "../include/dt_object.h" +#include "../include/md_object.h" +#include "../include/lustre_req_layout.h" +#include "../include/lustre_fld.h" #include "fld_internal.h" /** diff --git a/drivers/staging/lustre/lustre/fld/fld_internal.h b/drivers/staging/lustre/lustre/fld/fld_internal.h index 1a049b51d865..54fb8ecff8d6 100644 --- a/drivers/staging/lustre/lustre/fld/fld_internal.h +++ b/drivers/staging/lustre/lustre/fld/fld_internal.h @@ -41,12 +41,12 @@ #ifndef __FLD_INTERNAL_H #define __FLD_INTERNAL_H -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/dt_object.h" #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/lustre_req_layout.h" +#include "../include/lustre_fld.h" enum { LUSTRE_FLD_INIT = 1 << 0, diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index dfee6a461fa9..825b73f945b5 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -43,20 +43,20 @@ #define DEBUG_SUBSYSTEM S_FLD #include "../../include/linux/libcfs/libcfs.h" -# include -# include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include +#include +#include + +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_ver.h" +#include "../include/obd_support.h" +#include "../include/lprocfs_status.h" + +#include "../include/dt_object.h" +#include "../include/md_object.h" +#include "../include/lustre_req_layout.h" +#include "../include/lustre_fld.h" +#include "../include/lustre_mdc.h" #include "fld_internal.h" /* TODO: these 3 functions are copies of flow-control code from mdc_lib.c diff --git a/drivers/staging/lustre/lustre/fld/lproc_fld.c b/drivers/staging/lustre/lustre/fld/lproc_fld.c index 208a81e69726..7f6bcc63c5eb 100644 --- a/drivers/staging/lustre/lustre/fld/lproc_fld.c +++ b/drivers/staging/lustre/lustre/fld/lproc_fld.c @@ -44,16 +44,16 @@ #define DEBUG_SUBSYSTEM S_FLD #include "../../include/linux/libcfs/libcfs.h" -# include - -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/dt_object.h" +#include "../include/md_object.h" +#include "../include/obd_support.h" +#include "../include/lustre_req_layout.h" +#include "../include/lustre_fld.h" +#include "../include/lustre_fid.h" #include "fld_internal.h" static int -- cgit From 67a235f5e5893bc7dc86cf0e867fdb3f9041df18 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:51:41 -0700 Subject: staging: lustre: llite: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/lustre/include/linux/lustre_lite.h | 4 ++-- drivers/staging/lustre/lustre/lclient/glimpse.c | 22 +++++++++++----------- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 20 ++++++++++---------- .../staging/lustre/lustre/lclient/lcommon_misc.c | 12 ++++++------ drivers/staging/lustre/lustre/llite/Makefile | 3 --- drivers/staging/lustre/lustre/llite/dcache.c | 8 ++++---- drivers/staging/lustre/lustre/llite/dir.c | 14 +++++++------- drivers/staging/lustre/lustre/llite/file.c | 8 ++++---- drivers/staging/lustre/lustre/llite/llite_capa.c | 2 +- drivers/staging/lustre/lustre/llite/llite_close.c | 2 +- .../staging/lustre/lustre/llite/llite_internal.h | 16 ++++++++-------- drivers/staging/lustre/lustre/llite/llite_lib.c | 18 +++++++++--------- drivers/staging/lustre/lustre/llite/llite_mmap.c | 4 ++-- drivers/staging/lustre/lustre/llite/llite_nfs.c | 2 +- drivers/staging/lustre/lustre/llite/llite_rmtacl.c | 4 ++-- drivers/staging/lustre/lustre/llite/lloop.c | 4 ++-- drivers/staging/lustre/lustre/llite/lproc_llite.c | 6 +++--- drivers/staging/lustre/lustre/llite/namei.c | 10 +++++----- drivers/staging/lustre/lustre/llite/remote_perm.c | 12 ++++++------ drivers/staging/lustre/lustre/llite/rw.c | 6 +++--- drivers/staging/lustre/lustre/llite/rw26.c | 4 ++-- drivers/staging/lustre/lustre/llite/statahead.c | 6 +++--- drivers/staging/lustre/lustre/llite/super25.c | 8 ++++---- drivers/staging/lustre/lustre/llite/symlink.c | 2 +- drivers/staging/lustre/lustre/llite/vvp_dev.c | 4 ++-- drivers/staging/lustre/lustre/llite/vvp_internal.h | 2 +- drivers/staging/lustre/lustre/llite/vvp_io.c | 4 ++-- drivers/staging/lustre/lustre/llite/vvp_lock.c | 4 ++-- drivers/staging/lustre/lustre/llite/vvp_object.c | 4 ++-- drivers/staging/lustre/lustre/llite/vvp_page.c | 4 ++-- drivers/staging/lustre/lustre/llite/xattr.c | 10 +++++----- drivers/staging/lustre/lustre/llite/xattr_cache.c | 8 ++++---- 32 files changed, 117 insertions(+), 120 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h index bd055ecac8bb..99eed4987635 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h @@ -51,8 +51,8 @@ #include "../lustre_ha.h" #include -#include -#include +#include "../../include/linux/lustre_compat25.h" +#include "../../include/linux/lustre_common.h" #include /* lprocfs.c */ diff --git a/drivers/staging/lustre/lustre/lclient/glimpse.c b/drivers/staging/lustre/lustre/lclient/glimpse.c index 8dd4b22eff31..b9f2bb66de21 100644 --- a/drivers/staging/lustre/lustre/lclient/glimpse.c +++ b/drivers/staging/lustre/lustre/lclient/glimpse.c @@ -41,19 +41,19 @@ */ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/obd.h" -# include -# include -# include -# include -# include +#include "../include/lustre_dlm.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_mdc.h" +#include +#include -#include "cl_object.h" -#include "lclient.h" -# include "../llite/llite_internal.h" +#include "../include/cl_object.h" +#include "../include/lclient.h" +#include "../llite/llite_internal.h" static const struct cl_lock_descr whole_file = { .cld_start = 0, diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 7791d3d3bca4..0587c67cd129 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -50,16 +50,16 @@ # include # include -#include -#include -#include -#include -#include -#include -#include -#include - -#include +#include "../include/obd.h" +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_ver.h" +#include "../include/lustre_mdc.h" +#include "../include/cl_object.h" + +#include "../include/lclient.h" #include "../llite/llite_internal.h" diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c index 367bdadee162..ec9ddc82ddb9 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c @@ -37,13 +37,13 @@ * future). * */ -#include -#include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/obd.h" +#include "../include/cl_object.h" +#include "../include/lclient.h" -#include +#include "../include/lustre_lite.h" /* Initialize the default and maximum LOV EA and cookie sizes. This allows diff --git a/drivers/staging/lustre/lustre/llite/Makefile b/drivers/staging/lustre/lustre/llite/Makefile index c76f3cfedab0..7d70115d5bc7 100644 --- a/drivers/staging/lustre/lustre/llite/Makefile +++ b/drivers/staging/lustre/lustre/llite/Makefile @@ -9,6 +9,3 @@ lustre-y := dcache.o dir.o file.o llite_close.o llite_lib.o llite_nfs.o \ lustre-$(CONFIG_PROC_FS) += lproc_llite.o llite_lloop-y := lloop.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c index 7d520d8f4a69..48b1402d6cf2 100644 --- a/drivers/staging/lustre/lustre/llite/dcache.c +++ b/drivers/staging/lustre/lustre/llite/dcache.c @@ -40,10 +40,10 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_lite.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_dlm.h" #include "llite_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index 6efaf03196d5..4d28a857dc8f 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -48,13 +48,13 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_fid.h" #include "llite_internal.h" /* diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index 660fd4d755eb..e7a8bc1de354 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c @@ -41,14 +41,14 @@ */ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/lustre_lite.h" #include #include #include "llite_internal.h" -#include +#include "../include/lustre/ll_fiemap.h" -#include "cl_object.h" +#include "../include/cl_object.h" static int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg); diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 2f11cbf5639c..051b023281e1 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -45,7 +45,7 @@ #include #include -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" /* for obd_capa.c_list, client capa might stay in three places: diff --git a/drivers/staging/lustre/lustre/llite/llite_close.c b/drivers/staging/lustre/lustre/llite/llite_close.c index 38c2d0e947db..9a5e255dab76 100644 --- a/drivers/staging/lustre/lustre/llite/llite_close.c +++ b/drivers/staging/lustre/lustre/llite/llite_close.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" /** records that a write is in flight */ diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 140ee947ba49..1d11d0156791 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -36,16 +36,16 @@ #ifndef LLITE_INTERNAL_H #define LLITE_INTERNAL_H -#include -#include -#include /* for s2sbi */ -#include +#include "../include/lustre_debug.h" +#include "../include/lustre_ver.h" +#include "../include/lustre_disk.h" /* for s2sbi */ +#include "../include/lustre_eacl.h" /* for struct cl_lock_descr and struct cl_io */ -#include -#include -#include -#include +#include "../include/cl_object.h" +#include "../include/lclient.h" +#include "../include/lustre_mdc.h" +#include "../include/linux/lustre_intent.h" #include #include diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index 7eadd6007106..5e96e4239a03 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -44,15 +44,15 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/lustre_lite.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_dlm.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_disk.h" +#include "../include/lustre_param.h" +#include "../include/lustre_log.h" +#include "../include/cl_object.h" +#include "../include/obd_cksum.h" #include "llite_internal.h" struct kmem_cache *ll_file_data_slab; diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c index 426c73961665..3af47b3dc79c 100644 --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c @@ -47,9 +47,9 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" -#include +#include "../include/linux/lustre_compat25.h" static const struct vm_operations_struct ll_file_vm_ops; diff --git a/drivers/staging/lustre/lustre/llite/llite_nfs.c b/drivers/staging/lustre/lustre/llite/llite_nfs.c index a614b913ddc2..8fdd6e093d1a 100644 --- a/drivers/staging/lustre/lustre/llite/llite_nfs.c +++ b/drivers/staging/lustre/lustre/llite/llite_nfs.c @@ -42,7 +42,7 @@ */ #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" #include diff --git a/drivers/staging/lustre/lustre/llite/llite_rmtacl.c b/drivers/staging/lustre/lustre/llite/llite_rmtacl.c index 4c610369cb9b..be0c3eff108c 100644 --- a/drivers/staging/lustre/lustre/llite/llite_rmtacl.c +++ b/drivers/staging/lustre/lustre/llite/llite_rmtacl.c @@ -44,8 +44,8 @@ #ifdef CONFIG_FS_POSIX_ACL -#include -#include +#include "../include/lustre_lite.h" +#include "../include/lustre_eacl.h" #include "llite_internal.h" static inline __u32 rce_hashfunc(uid_t id) diff --git a/drivers/staging/lustre/lustre/llite/lloop.c b/drivers/staging/lustre/lustre/llite/lloop.c index 0ff8c3362a8d..808663898b73 100644 --- a/drivers/staging/lustre/lustre/llite/lloop.c +++ b/drivers/staging/lustre/lustre/llite/lloop.c @@ -103,8 +103,8 @@ #include -#include -#include +#include "../include/lustre_lib.h" +#include "../include/lustre_lite.h" #include "llite_internal.h" #define LLOOP_MAX_SEGMENTS LNET_MAX_IOV diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index d9c874c95ac8..e952dfa9ed36 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -35,10 +35,10 @@ */ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/lustre_lite.h" +#include "../include/lprocfs_status.h" #include -#include +#include "../include/obd_support.h" #include "llite_internal.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c index dfa1e745dfd6..5168e0a6c879 100644 --- a/drivers/staging/lustre/lustre/llite/namei.c +++ b/drivers/staging/lustre/lustre/llite/namei.c @@ -44,11 +44,11 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_ver.h" #include "llite_internal.h" static int ll_create_it(struct inode *, struct dentry *, diff --git a/drivers/staging/lustre/lustre/llite/remote_perm.c b/drivers/staging/lustre/lustre/llite/remote_perm.c index a8b1117b8f60..5d936caeba9c 100644 --- a/drivers/staging/lustre/lustre/llite/remote_perm.c +++ b/drivers/staging/lustre/lustre/llite/remote_perm.c @@ -46,12 +46,12 @@ #include #include -#include -#include -#include -#include -#include -#include +#include "../include/lustre_lite.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_dlm.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_disk.h" +#include "../include/lustre_param.h" #include "llite_internal.h" struct kmem_cache *ll_remote_perm_cachep = NULL; diff --git a/drivers/staging/lustre/lustre/llite/rw.c b/drivers/staging/lustre/lustre/llite/rw.c index 56162103cc79..6028f1a984f0 100644 --- a/drivers/staging/lustre/lustre/llite/rw.c +++ b/drivers/staging/lustre/lustre/llite/rw.c @@ -54,10 +54,10 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/lustre_lite.h" +#include "../include/obd_cksum.h" #include "llite_internal.h" -#include +#include "../include/linux/lustre_compat25.h" /** * Finalizes cl-data before exiting typical address_space operation. Dual to diff --git a/drivers/staging/lustre/lustre/llite/rw26.c b/drivers/staging/lustre/lustre/llite/rw26.c index af84c1aaa5f8..3f157e76a15c 100644 --- a/drivers/staging/lustre/lustre/llite/rw26.c +++ b/drivers/staging/lustre/lustre/llite/rw26.c @@ -55,9 +55,9 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" -#include +#include "../include/linux/lustre_compat25.h" /** * Implements Linux VM address_space::invalidatepage() method. This method is diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c index 1b47774d7447..31d92cbe520b 100644 --- a/drivers/staging/lustre/lustre/llite/statahead.c +++ b/drivers/staging/lustre/lustre/llite/statahead.c @@ -42,9 +42,9 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" #include "llite_internal.h" #define SA_OMITTED_ENTRY_MAX 8ULL diff --git a/drivers/staging/lustre/lustre/llite/super25.c b/drivers/staging/lustre/lustre/llite/super25.c index 951fdb1265b9..078c0e95f4cf 100644 --- a/drivers/staging/lustre/lustre/llite/super25.c +++ b/drivers/staging/lustre/lustre/llite/super25.c @@ -38,12 +38,12 @@ #include #include -#include -#include -#include +#include "../include/lustre_lite.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_dlm.h" #include #include -#include +#include "../include/lprocfs_status.h" #include "llite_internal.h" static struct kmem_cache *ll_inode_cachep; diff --git a/drivers/staging/lustre/lustre/llite/symlink.c b/drivers/staging/lustre/lustre/llite/symlink.c index 129d3023dcea..20e678b31c7b 100644 --- a/drivers/staging/lustre/lustre/llite/symlink.c +++ b/drivers/staging/lustre/lustre/llite/symlink.c @@ -39,7 +39,7 @@ #include #define DEBUG_SUBSYSTEM S_LLITE -#include +#include "../include/lustre_lite.h" #include "llite_internal.h" static int ll_readlink_internal(struct inode *inode, diff --git a/drivers/staging/lustre/lustre/llite/vvp_dev.c b/drivers/staging/lustre/lustre/llite/vvp_dev.c index 0f68c16abe30..0f2e79d6b7f8 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_dev.c +++ b/drivers/staging/lustre/lustre/llite/vvp_dev.c @@ -41,8 +41,8 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lite.h" #include "llite_internal.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/vvp_internal.h b/drivers/staging/lustre/lustre/llite/vvp_internal.h index 3c9a03d99559..2162bf6c08a7 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_internal.h +++ b/drivers/staging/lustre/lustre/llite/vvp_internal.h @@ -40,7 +40,7 @@ #define VVP_INTERNAL_H -#include +#include "../include/cl_object.h" #include "llite_internal.h" int vvp_io_init (const struct lu_env *env, diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c index 2539a89e4255..a4117d6a3866 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_io.c +++ b/drivers/staging/lustre/lustre/llite/vvp_io.c @@ -42,8 +42,8 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lite.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/vvp_lock.c b/drivers/staging/lustre/lustre/llite/vvp_lock.c index e16b31e4ff72..372633e164b9 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_lock.c +++ b/drivers/staging/lustre/lustre/llite/vvp_lock.c @@ -39,8 +39,8 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lite.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/vvp_object.c b/drivers/staging/lustre/lustre/llite/vvp_object.c index 369a3859bd0c..b6f6d4cb6e41 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_object.c +++ b/drivers/staging/lustre/lustre/llite/vvp_object.c @@ -43,8 +43,8 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lite.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/vvp_page.c b/drivers/staging/lustre/lustre/llite/vvp_page.c index 1c02c128e0ee..4626346f6ee1 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_page.c +++ b/drivers/staging/lustre/lustre/llite/vvp_page.c @@ -42,8 +42,8 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lite.h" #include "vvp_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index c1eff650aa82..665ca572027f 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c @@ -41,11 +41,11 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_ver.h" +#include "../include/lustre_eacl.h" #include "llite_internal.h" diff --git a/drivers/staging/lustre/lustre/llite/xattr_cache.c b/drivers/staging/lustre/lustre/llite/xattr_cache.c index 4dd83fc03687..edec945d2eb3 100644 --- a/drivers/staging/lustre/lustre/llite/xattr_cache.c +++ b/drivers/staging/lustre/lustre/llite/xattr_cache.c @@ -10,10 +10,10 @@ #include #include #include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_ver.h" #include "llite_internal.h" /* If we ever have hundreds of extended attributes, we might want to consider -- cgit From a8c495aca94700324f6620556a2519b3a8e8cacb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 21:57:32 -0700 Subject: staging: lustre: lmv: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/lustre/include/lustre/lustre_idl.h | 2 +- drivers/staging/lustre/lustre/lmv/Makefile | 2 -- drivers/staging/lustre/lustre/lmv/lmv_fld.c | 16 ++++++++-------- drivers/staging/lustre/lustre/lmv/lmv_intent.c | 17 ++++++++--------- drivers/staging/lustre/lustre/lmv/lmv_internal.h | 4 ++-- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 16 ++++++++-------- drivers/staging/lustre/lustre/lmv/lproc_lmv.c | 4 ++-- 7 files changed, 29 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 6f7af96b5098..873af0f1e156 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -92,7 +92,7 @@ #define _LUSTRE_IDL_H_ #if !defined(LPU64) -#include "../../include/linux/libcfs/libcfs.h" /* for LPUX64, etc */ +#include "../../../include/linux/libcfs/libcfs.h" /* for LPUX64, etc */ #endif /* Defn's shared with user-space. */ diff --git a/drivers/staging/lustre/lustre/lmv/Makefile b/drivers/staging/lustre/lustre/lmv/Makefile index 9162ef724aea..a7a15369af15 100644 --- a/drivers/staging/lustre/lustre/lmv/Makefile +++ b/drivers/staging/lustre/lustre/lmv/Makefile @@ -1,5 +1,3 @@ obj-$(CONFIG_LUSTRE_FS) += lmv.o lmv-y := lmv_obd.o lmv_intent.o lmv_fld.o lmv-$(CONFIG_PROC_FS) += lproc_lmv.o - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/lmv/lmv_fld.c b/drivers/staging/lustre/lustre/lmv/lmv_fld.c index fd6b5ec61d8a..b1b0effee00e 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_fld.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_fld.c @@ -41,14 +41,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_net.h" +#include "../include/lustre_dlm.h" +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" #include "lmv_internal.h" int lmv_fld_lookup(struct lmv_obd *lmv, diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c b/drivers/staging/lustre/lustre/lmv/lmv_intent.c index 9ba5a0a57390..aba698f4489c 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c @@ -41,15 +41,14 @@ #include #include #include -#include - -#include -#include -#include -#include -#include -#include -#include +#include "../include/linux/lustre_intent.h" +#include "../include/obd_support.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_net.h" +#include "../include/lustre_dlm.h" +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" #include "lmv_internal.h" static int lmv_intent_remote(struct obd_export *exp, void *lmm, diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h b/drivers/staging/lustre/lustre/lmv/lmv_internal.h index f75b0a987681..f1edcaf702ba 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h +++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h @@ -37,8 +37,8 @@ #ifndef _LMV_INTERNAL_H_ #define _LMV_INTERNAL_H_ -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/obd.h" #define LMV_MAX_TGT_COUNT 128 diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index c17a49ee7d44..5da2be525836 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -45,14 +45,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/obd_support.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_net.h" +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_lite.h" +#include "../include/lustre_fid.h" #include "lmv_internal.h" static void lmv_activate_target(struct lmv_obd *lmv, diff --git a/drivers/staging/lustre/lustre/lmv/lproc_lmv.c b/drivers/staging/lustre/lustre/lmv/lproc_lmv.c index ae73c82ce499..310df44f948d 100644 --- a/drivers/staging/lustre/lustre/lmv/lproc_lmv.c +++ b/drivers/staging/lustre/lustre/lmv/lproc_lmv.c @@ -38,8 +38,8 @@ #include #include -#include -#include +#include "../include/lprocfs_status.h" +#include "../include/obd_class.h" static int lmv_numobd_seq_show(struct seq_file *m, void *v) { -- cgit From 0cf0f7a7222eaea376813ca6df458b85e95e60a2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:01:58 -0700 Subject: staging: lustre: lov: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lov/Makefile | 4 ---- .../staging/lustre/lustre/lov/lov_cl_internal.h | 4 ++-- drivers/staging/lustre/lustre/lov/lov_dev.c | 2 +- drivers/staging/lustre/lustre/lov/lov_ea.c | 4 ++-- drivers/staging/lustre/lustre/lov/lov_internal.h | 4 ++-- drivers/staging/lustre/lustre/lov/lov_merge.c | 2 +- drivers/staging/lustre/lustre/lov/lov_obd.c | 28 +++++++++++----------- drivers/staging/lustre/lustre/lov/lov_offset.c | 2 +- drivers/staging/lustre/lustre/lov/lov_pack.c | 10 ++++---- drivers/staging/lustre/lustre/lov/lov_pool.c | 2 +- drivers/staging/lustre/lustre/lov/lov_request.c | 6 ++--- drivers/staging/lustre/lustre/lov/lproc_lov.c | 4 ++-- 12 files changed, 34 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lov/Makefile b/drivers/staging/lustre/lustre/lov/Makefile index a908edb533d3..6fe56a24b165 100644 --- a/drivers/staging/lustre/lustre/lov/Makefile +++ b/drivers/staging/lustre/lustre/lov/Makefile @@ -4,7 +4,3 @@ lov-y := lov_obd.o lov_pack.o lov_offset.o lov_merge.o \ lov_lock.o lov_io.o lovsub_dev.o lovsub_object.o lovsub_page.o \ lovsub_lock.o lovsub_io.o lov_pool.o lov-$(CONFIG_PROC_FS) += lproc_lov.o - - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h index 7f8c5d3c3753..99ade92c5e64 100644 --- a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h @@ -48,8 +48,8 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd.h" +#include "../include/cl_object.h" #include "lov_internal.h" /** \defgroup lov lov diff --git a/drivers/staging/lustre/lustre/lov/lov_dev.c b/drivers/staging/lustre/lustre/lov/lov_dev.c index 53e5781ba1d9..e6d14135ffe6 100644 --- a/drivers/staging/lustre/lustre/lov/lov_dev.c +++ b/drivers/staging/lustre/lustre/lov/lov_dev.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_LOV /* class_name2obd() */ -#include +#include "../include/obd_class.h" #include "lov_cl_internal.h" #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_ea.c b/drivers/staging/lustre/lustre/lov/lov_ea.c index c2206624277f..1c304b0d19e7 100644 --- a/drivers/staging/lustre/lustre/lov/lov_ea.c +++ b/drivers/staging/lustre/lustre/lov/lov_ea.c @@ -43,8 +43,8 @@ #include #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre/lustre_idl.h" #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_internal.h b/drivers/staging/lustre/lustre/lov/lov_internal.h index 22326434d412..44a097baa8c9 100644 --- a/drivers/staging/lustre/lustre/lov/lov_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_internal.h @@ -37,8 +37,8 @@ #ifndef LOV_INTERNAL_H #define LOV_INTERNAL_H -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre/lustre_user.h" /* lov_do_div64(a, b) returns a % b, and a = a / b. * The 32-bit code is LOV-specific due to knowing about stripe limits in diff --git a/drivers/staging/lustre/lustre/lov/lov_merge.c b/drivers/staging/lustre/lustre/lov/lov_merge.c index 61103164cb56..0076cf317d58 100644 --- a/drivers/staging/lustre/lustre/lov/lov_merge.c +++ b/drivers/staging/lustre/lustre/lov/lov_merge.c @@ -38,7 +38,7 @@ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/obd_class.h" #include "lov_internal.h" /** Merge the lock value block(&lvb) attributes and KMS from each of the diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 6806cb59fe15..ddc10228f420 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -44,20 +44,20 @@ #define DEBUG_SUBSYSTEM S_LOV #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for cl_client_lru */ -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_net.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_mds.h" +#include "../include/obd_class.h" +#include "../include/obd_ost.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_param.h" +#include "../include/cl_object.h" +#include "../include/lclient.h" /* for cl_client_lru */ +#include "../include/lustre/ll_fiemap.h" +#include "../include/lustre_fid.h" #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_offset.c b/drivers/staging/lustre/lustre/lov/lov_offset.c index 6003f9b66ae7..9ed5c93ecc37 100644 --- a/drivers/staging/lustre/lustre/lov/lov_offset.c +++ b/drivers/staging/lustre/lustre/lov/lov_offset.c @@ -38,7 +38,7 @@ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/obd_class.h" #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_pack.c b/drivers/staging/lustre/lustre/lov/lov_pack.c index 59ab7c30ffbf..d7836bab0cfc 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pack.c +++ b/drivers/staging/lustre/lustre/lov/lov_pack.c @@ -42,11 +42,11 @@ #define DEBUG_SUBSYSTEM S_LOV -#include -#include -#include -#include -#include +#include "../include/lustre_net.h" +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre/lustre_user.h" #include "lov_internal.h" diff --git a/drivers/staging/lustre/lustre/lov/lov_pool.c b/drivers/staging/lustre/lustre/lov/lov_pool.c index 77918e4a736b..363fd6bd6ca6 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pool.c +++ b/drivers/staging/lustre/lustre/lov/lov_pool.c @@ -46,7 +46,7 @@ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/obd.h" #include "lov_internal.h" #define pool_tgt(_p, _i) \ diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index 9186662568b5..8bd30d18cce7 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -38,9 +38,9 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_ost.h" +#include "../include/lustre/lustre_idl.h" #include "lov_internal.h" static void lov_init_set(struct lov_request_set *set) diff --git a/drivers/staging/lustre/lustre/lov/lproc_lov.c b/drivers/staging/lustre/lustre/lov/lproc_lov.c index bd7da56b0713..56695e6f2deb 100644 --- a/drivers/staging/lustre/lustre/lov/lproc_lov.c +++ b/drivers/staging/lustre/lustre/lov/lproc_lov.c @@ -36,8 +36,8 @@ #define DEBUG_SUBSYSTEM S_CLASS #include -#include -#include +#include "../include/lprocfs_status.h" +#include "../include/obd_class.h" #include #include "lov_internal.h" -- cgit From e0a30a6b7c0f67587c6d861b2fb72160ef68c730 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:02:26 -0700 Subject: staging: lustre: lvfs: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lustre_fsfilt.h | 2 +- drivers/staging/lustre/lustre/lvfs/Makefile | 3 --- drivers/staging/lustre/lustre/lvfs/fsfilt.c | 2 +- drivers/staging/lustre/lustre/lvfs/lvfs_lib.c | 4 ++-- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 8 ++++---- 5 files changed, 8 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre_fsfilt.h b/drivers/staging/lustre/lustre/include/lustre_fsfilt.h index 9dcc332cb2f3..9749c3f5568e 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fsfilt.h +++ b/drivers/staging/lustre/lustre/include/lustre_fsfilt.h @@ -41,7 +41,7 @@ #ifndef _LUSTRE_FSFILT_H #define _LUSTRE_FSFILT_H -#include +#include "../include/linux/lustre_fsfilt.h" #define LU221_BAD_TIME (0x80000000U + 24 * 3600) diff --git a/drivers/staging/lustre/lustre/lvfs/Makefile b/drivers/staging/lustre/lustre/lvfs/Makefile index e0367c3fc416..387eee307e2d 100644 --- a/drivers/staging/lustre/lustre/lvfs/Makefile +++ b/drivers/staging/lustre/lustre/lvfs/Makefile @@ -2,6 +2,3 @@ obj-$(CONFIG_LUSTRE_FS) += lvfs.o lvfs-y := lvfs_linux.o fsfilt.o lvfs-$(CONFIG_PROC_FS) += lvfs_lib.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/lvfs/fsfilt.c b/drivers/staging/lustre/lustre/lvfs/fsfilt.c index 1c0fc24e6bdc..a4df056a2853 100644 --- a/drivers/staging/lustre/lustre/lvfs/fsfilt.c +++ b/drivers/staging/lustre/lustre/lvfs/fsfilt.c @@ -39,7 +39,7 @@ #include #include #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/lustre_fsfilt.h" LIST_HEAD(fsfilt_types); diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c b/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c index 7e47fc4a7e4e..cfc4f896b127 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c @@ -40,8 +40,8 @@ * Author: Andreas Dilger */ #include -#include -#include +#include "../include/lustre_lib.h" +#include "../include/lprocfs_status.h" void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, long amount) { diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c index e616873933f4..a519a5ca69ba 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c @@ -47,11 +47,11 @@ #include #include #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/linux/lustre_compat25.h" +#include "../include/lvfs.h" -#include -#include +#include "../include/obd.h" +#include "../include/lustre_lib.h" struct lprocfs_stats *obd_memory = NULL; EXPORT_SYMBOL(obd_memory); -- cgit From 05932307435e66978f82c16fb479fd43d0f69311 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:04:56 -0700 Subject: staging: lustre: mdc: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lustre_acl.h | 2 +- drivers/staging/lustre/lustre/mdc/Makefile | 3 --- drivers/staging/lustre/lustre/mdc/lproc_mdc.c | 4 ++-- drivers/staging/lustre/lustre/mdc/mdc_internal.h | 4 ++-- drivers/staging/lustre/lustre/mdc/mdc_lib.c | 4 ++-- drivers/staging/lustre/lustre/mdc/mdc_locks.c | 16 ++++++++-------- drivers/staging/lustre/lustre/mdc/mdc_reint.c | 4 ++-- drivers/staging/lustre/lustre/mdc/mdc_request.c | 12 ++++++------ 8 files changed, 23 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre_acl.h b/drivers/staging/lustre/lustre/include/lustre_acl.h index 5cfb87b180c3..0b6ea0782229 100644 --- a/drivers/staging/lustre/lustre/include/lustre_acl.h +++ b/drivers/staging/lustre/lustre/include/lustre_acl.h @@ -37,6 +37,6 @@ #ifndef _LUSTRE_ACL_H #define _LUSTRE_ACL_H -#include +#include "linux/lustre_acl.h" #endif diff --git a/drivers/staging/lustre/lustre/mdc/Makefile b/drivers/staging/lustre/lustre/mdc/Makefile index 4c0bed14de80..2516551a6dc3 100644 --- a/drivers/staging/lustre/lustre/mdc/Makefile +++ b/drivers/staging/lustre/lustre/mdc/Makefile @@ -1,6 +1,3 @@ obj-$(CONFIG_LUSTRE_FS) += mdc.o mdc-y := mdc_request.o mdc_reint.o mdc_lib.o mdc_locks.o mdc-$(CONFIG_PROC_FS) += lproc_mdc.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c index 2663480a68c5..e6af825eabcb 100644 --- a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c +++ b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c @@ -36,8 +36,8 @@ #define DEBUG_SUBSYSTEM S_CLASS #include -#include -#include +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" static int mdc_max_rpcs_in_flight_seq_show(struct seq_file *m, void *v) { diff --git a/drivers/staging/lustre/lustre/mdc/mdc_internal.h b/drivers/staging/lustre/lustre/mdc/mdc_internal.h index c78bf003c2c5..8a7ec6d8b137 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_internal.h +++ b/drivers/staging/lustre/lustre/mdc/mdc_internal.h @@ -37,8 +37,8 @@ #ifndef _MDC_INTERNAL_H #define _MDC_INTERNAL_H -#include -#include +#include "../include/lustre_mdc.h" +#include "../include/lustre_mds.h" #ifdef LPROCFS void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars); diff --git a/drivers/staging/lustre/lustre/mdc/mdc_lib.c b/drivers/staging/lustre/lustre/mdc/mdc_lib.c index 5b9f37141512..f54dd90c7e50 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_lib.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_lib.c @@ -35,8 +35,8 @@ */ #define DEBUG_SUBSYSTEM S_MDC -#include -#include +#include "../include/lustre_net.h" +#include "../include/lustre/lustre_idl.h" #include "mdc_internal.h" diff --git a/drivers/staging/lustre/lustre/mdc/mdc_locks.c b/drivers/staging/lustre/lustre/mdc/mdc_locks.c index 1a8cd98ad6d7..35663705b097 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_locks.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_locks.c @@ -38,14 +38,14 @@ # include -#include -#include -#include -#include -#include /* fid_res_name_eq() */ -#include -#include -#include +#include "../include/linux/lustre_intent.h" +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_fid.h" /* fid_res_name_eq() */ +#include "../include/lustre_mdc.h" +#include "../include/lustre_net.h" +#include "../include/lustre_req_layout.h" #include "mdc_internal.h" struct mdc_getattr_args { diff --git a/drivers/staging/lustre/lustre/mdc/mdc_reint.c b/drivers/staging/lustre/lustre/mdc/mdc_reint.c index 08e80940ee4d..1a909ac84332 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_reint.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_reint.c @@ -39,9 +39,9 @@ # include # include -#include +#include "../include/obd_class.h" #include "mdc_internal.h" -#include +#include "../include/lustre_fid.h" /* mdc_setattr does its own semaphore handling */ static int mdc_reint(struct ptlrpc_request *request, diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index fca43cf1d671..6ffcd32d58e4 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -42,12 +42,12 @@ # include # include -#include -#include -#include -#include -#include -#include +#include "../include/lustre_acl.h" +#include "../include/obd_class.h" +#include "../include/lustre_fid.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_param.h" +#include "../include/lustre_log.h" #include "mdc_internal.h" -- cgit From 610f73773a8d263f2a6efa21a18cedafa3f2763b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:15:24 -0700 Subject: staging: lustre: obdclass: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdclass/Makefile | 3 --- drivers/staging/lustre/lustre/obdclass/acl.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/capa.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/cl_io.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/cl_lock.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/cl_object.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/cl_page.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/class_obd.c | 12 ++++++------ drivers/staging/lustre/lustre/obdclass/debug.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/dt_object.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/genops.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/idmap.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/linkea.c | 6 +++--- .../staging/lustre/lustre/obdclass/linux/linux-module.c | 10 +++++----- drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c | 4 ++-- .../staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog_cat.c | 2 +- drivers/staging/lustre/lustre/obdclass/llog_internal.h | 2 +- drivers/staging/lustre/lustre/obdclass/llog_ioctl.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog_lvfs.c | 14 +++++++------- drivers/staging/lustre/lustre/obdclass/llog_obd.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog_osd.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/llog_swab.c | 2 +- drivers/staging/lustre/lustre/obdclass/llog_test.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/local_storage.h | 8 ++++---- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/lu_object.c | 12 ++++++------ drivers/staging/lustre/lustre/obdclass/lu_ref.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/lu_ucred.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/lustre_handles.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/lustre_peer.c | 14 +++++++------- drivers/staging/lustre/lustre/obdclass/md_attrs.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/mea.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/obd_config.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/obd_mount.c | 14 +++++++------- drivers/staging/lustre/lustre/obdclass/obdo.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/statfs_pack.c | 8 ++++---- drivers/staging/lustre/lustre/obdclass/uuid.c | 4 ++-- 39 files changed, 133 insertions(+), 136 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/Makefile b/drivers/staging/lustre/lustre/obdclass/Makefile index 8a0e08ced454..ba10043fdd50 100644 --- a/drivers/staging/lustre/lustre/obdclass/Makefile +++ b/drivers/staging/lustre/lustre/obdclass/Makefile @@ -8,6 +8,3 @@ obdclass-y := linux/linux-module.o linux/linux-obdo.o linux/linux-sysctl.o \ mea.o lu_object.o dt_object.o capa.o cl_object.o \ cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o idmap.o \ lu_ucred.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/obdclass/acl.c b/drivers/staging/lustre/lustre/obdclass/acl.c index f0bb632a70aa..3b394a0bff9d 100644 --- a/drivers/staging/lustre/lustre/obdclass/acl.c +++ b/drivers/staging/lustre/lustre/obdclass/acl.c @@ -41,10 +41,10 @@ */ #define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include +#include "../include/lu_object.h" +#include "../include/lustre_acl.h" +#include "../include/lustre_eacl.h" +#include "../include/obd_support.h" #ifdef CONFIG_FS_POSIX_ACL diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index cf1c4974eda8..8465fde05140 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -48,12 +48,12 @@ #include #include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_debug.h" +#include "../include/lustre/lustre_idl.h" #include -#include +#include "../include/lustre_capa.h" #define NR_CAPAHASH 32 #define CAPA_HASH_SIZE 3000 /* for MDS & OSS */ diff --git a/drivers/staging/lustre/lustre/obdclass/cl_io.c b/drivers/staging/lustre/lustre/obdclass/cl_io.c index 3bebc78e7673..f863f5da8677 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_io.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_io.c @@ -40,11 +40,11 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" #include -#include +#include "../include/cl_object.h" #include "cl_internal.h" /***************************************************************************** diff --git a/drivers/staging/lustre/lustre/obdclass/cl_lock.c b/drivers/staging/lustre/lustre/obdclass/cl_lock.c index df77c4fc0eac..7d99319b714e 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_lock.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_lock.c @@ -40,11 +40,11 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" #include -#include +#include "../include/cl_object.h" #include "cl_internal.h" /** Lock class of cl_lock::cll_guard */ diff --git a/drivers/staging/lustre/lustre/obdclass/cl_object.c b/drivers/staging/lustre/lustre/obdclass/cl_object.c index 229465980e0b..b42d2920b06a 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_object.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_object.c @@ -53,12 +53,12 @@ #include "../../include/linux/libcfs/libcfs.h" /* class_put_type() */ -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_fid.h" #include #include "../../include/linux/libcfs/libcfs_hash.h" /* for cfs_hash stuff */ -#include +#include "../include/cl_object.h" #include "cl_internal.h" static struct kmem_cache *cl_env_kmem; diff --git a/drivers/staging/lustre/lustre/obdclass/cl_page.c b/drivers/staging/lustre/lustre/obdclass/cl_page.c index 5e21dd5cfd32..b7dd04808060 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_page.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_page.c @@ -41,11 +41,11 @@ #define DEBUG_SUBSYSTEM S_CLASS #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" #include -#include +#include "../include/cl_object.h" #include "cl_internal.h" static void cl_page_delete0(const struct lu_env *env, struct cl_page *pg, diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index 2eadaa91daa2..0f9a9cbb2a3a 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -37,14 +37,14 @@ #define DEBUG_SUBSYSTEM S_CLASS # include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" #include "../../include/linux/lnet/lnetctl.h" -#include -#include -#include +#include "../include/lustre_debug.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre/lustre_build_version.h" #include -#include +#include "../include/cl_object.h" #include "llog_internal.h" diff --git a/drivers/staging/lustre/lustre/obdclass/debug.c b/drivers/staging/lustre/lustre/obdclass/debug.c index a4e7e754177f..18aedd2fc763 100644 --- a/drivers/staging/lustre/lustre/obdclass/debug.c +++ b/drivers/staging/lustre/lustre/obdclass/debug.c @@ -41,10 +41,10 @@ #define DEBUG_SUBSYSTEM D_OTHER -#include -#include -#include -#include +#include "../include/obd_ost.h" +#include "../include/obd_support.h" +#include "../include/lustre_debug.h" +#include "../include/lustre_net.h" void dump_lniobuf(struct niobuf_local *nb) { diff --git a/drivers/staging/lustre/lustre/obdclass/dt_object.c b/drivers/staging/lustre/lustre/obdclass/dt_object.c index 1b164c7027b1..854a79e6357d 100644 --- a/drivers/staging/lustre/lustre/obdclass/dt_object.c +++ b/drivers/staging/lustre/lustre/obdclass/dt_object.c @@ -43,13 +43,13 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include +#include "../include/obd.h" +#include "../include/dt_object.h" #include /* fid_be_to_cpu() */ -#include +#include "../include/lustre_fid.h" -#include +#include "../include/lustre_quota.h" /* context key constructor/destructor: dt_global_key_init, dt_global_key_fini */ LU_KEY_INIT(dt_global, struct dt_thread_info); diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index 3210ad8184b9..c5e847abb28e 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -40,9 +40,9 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include +#include "../include/obd_ost.h" +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" extern struct list_head obd_types; spinlock_t obd_types_lock; diff --git a/drivers/staging/lustre/lustre/obdclass/idmap.c b/drivers/staging/lustre/lustre/obdclass/idmap.c index ec2590f5cfe9..1190885c06b6 100644 --- a/drivers/staging/lustre/lustre/obdclass/idmap.c +++ b/drivers/staging/lustre/lustre/obdclass/idmap.c @@ -42,9 +42,9 @@ #define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include +#include "../include/lustre_idmap.h" +#include "../include/md_object.h" +#include "../include/obd_support.h" #define lustre_get_group_info(group_info) do { \ atomic_inc(&(group_info)->usage); \ diff --git a/drivers/staging/lustre/lustre/obdclass/linkea.c b/drivers/staging/lustre/lustre/obdclass/linkea.c index b5c19ac1470f..8a1c7b6fefe9 100644 --- a/drivers/staging/lustre/lustre/obdclass/linkea.c +++ b/drivers/staging/lustre/lustre/obdclass/linkea.c @@ -27,9 +27,9 @@ * Author: Di Wang */ -#include -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/obd.h" +#include "../include/lustre_linkea.h" int linkea_data_new(struct linkea_data *ldata, struct lu_buf *buf) { diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c index 8fcfd8c70bbc..4b538279e0f9 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c @@ -67,11 +67,11 @@ #include "../../../include/linux/libcfs/libcfs.h" #include "../../../include/linux/lnet/lnetctl.h" -#include -#include -#include -#include -#include +#include "../../include/obd_support.h" +#include "../../include/obd_class.h" +#include "../../include/lprocfs_status.h" +#include "../../include/lustre_ver.h" +#include "../../include/lustre/lustre_build_version.h" int proc_version; diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c index d3bb5ffc564b..945fbb64fe15 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c @@ -43,8 +43,8 @@ #define DEBUG_SUBSYSTEM S_CLASS #include -#include -#include +#include "../../include/obd_class.h" +#include "../../include/lustre/lustre_idl.h" #include #include /* for PAGE_CACHE_SIZE */ diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 140b5706d0fa..7bad930edbcf 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -48,8 +48,8 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include +#include "../../include/obd_support.h" +#include "../../include/lprocfs_status.h" #ifdef CONFIG_SYSCTL ctl_table_header_t *obd_table_header = NULL; diff --git a/drivers/staging/lustre/lustre/obdclass/llog.c b/drivers/staging/lustre/lustre/obdclass/llog.c index e0dfb089dd90..bb4a9998a9d6 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog.c +++ b/drivers/staging/lustre/lustre/obdclass/llog.c @@ -48,8 +48,8 @@ #define DEBUG_SUBSYSTEM S_LOG -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_log.h" #include "llog_internal.h" /* diff --git a/drivers/staging/lustre/lustre/obdclass/llog_cat.c b/drivers/staging/lustre/lustre/obdclass/llog_cat.c index 1d999310ec92..ca9927ccde68 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_cat.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_cat.c @@ -49,7 +49,7 @@ #define DEBUG_SUBSYSTEM S_LOG -#include +#include "../include/obd_class.h" #include "llog_internal.h" diff --git a/drivers/staging/lustre/lustre/obdclass/llog_internal.h b/drivers/staging/lustre/lustre/obdclass/llog_internal.h index 539e1d4f9d4c..5332131a2a2e 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_internal.h +++ b/drivers/staging/lustre/lustre/obdclass/llog_internal.h @@ -37,7 +37,7 @@ #ifndef __LLOG_INTERNAL_H__ #define __LLOG_INTERNAL_H__ -#include +#include "../include/lustre_log.h" struct llog_process_info { struct llog_handle *lpi_loghandle; diff --git a/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c b/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c index e192aab193bb..9b7fa1d5e79a 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c @@ -36,8 +36,8 @@ #define DEBUG_SUBSYSTEM S_LOG -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_log.h" #include "llog_internal.h" static int str2logid(struct llog_logid *logid, char *str, int len) diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c index d86bb8c60354..85d64bec1657 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c @@ -46,14 +46,14 @@ #define DEBUG_SUBSYSTEM S_LOG -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_log.h" +#include "../include/obd_ost.h" #include -#include -#include -#include +#include "../include/lvfs.h" +#include "../include/lustre_fsfilt.h" +#include "../include/lustre_disk.h" #include "llog_internal.h" #if defined(LLOG_LVFS) diff --git a/drivers/staging/lustre/lustre/obdclass/llog_obd.c b/drivers/staging/lustre/lustre/obdclass/llog_obd.c index 2c6d81eb5c65..8ff01d3f90b4 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_obd.c @@ -37,8 +37,8 @@ #define DEBUG_SUBSYSTEM S_LOG -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_log.h" #include "llog_internal.h" /* helper functions for calling the llog obd methods */ diff --git a/drivers/staging/lustre/lustre/obdclass/llog_osd.c b/drivers/staging/lustre/lustre/obdclass/llog_osd.c index 682279de8bea..584cc81b985e 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_osd.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_osd.c @@ -41,10 +41,10 @@ #define DEBUG_SUBSYSTEM S_LOG -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_fid.h" +#include "../include/dt_object.h" #include "llog_internal.h" #include "local_storage.h" diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c b/drivers/staging/lustre/lustre/obdclass/llog_swab.c index 24ca099b01da..1a2d70b4704b 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c @@ -43,7 +43,7 @@ #define DEBUG_SUBSYSTEM S_LOG -#include +#include "../include/lustre_log.h" static void print_llogd_body(struct llogd_body *d) { diff --git a/drivers/staging/lustre/lustre/obdclass/llog_test.c b/drivers/staging/lustre/lustre/obdclass/llog_test.c index 764068fc4ef7..a433353c40df 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_test.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_test.c @@ -44,9 +44,9 @@ #include #include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_log.h" /* This is slightly more than the number of records that can fit into a * single llog file, because the llog_log_header takes up some of the diff --git a/drivers/staging/lustre/lustre/obdclass/local_storage.h b/drivers/staging/lustre/lustre/obdclass/local_storage.h index 0f63b8c073b4..0b9ad33d1152 100644 --- a/drivers/staging/lustre/lustre/obdclass/local_storage.h +++ b/drivers/staging/lustre/lustre/obdclass/local_storage.h @@ -32,10 +32,10 @@ #ifndef __LOCAL_STORAGE_H #define __LOCAL_STORAGE_H -#include -#include -#include -#include +#include "../include/dt_object.h" +#include "../include/obd.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_disk.h" struct ls_device { struct dt_device ls_top_dev; diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index b0a12c4a24b8..925af9f5ec55 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -41,9 +41,9 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre/lustre_idl.h" #include static const char * const obd_connect_names[] = { diff --git a/drivers/staging/lustre/lustre/obdclass/lu_object.c b/drivers/staging/lustre/lustre/obdclass/lu_object.c index 376893c374c8..b126bb8657b3 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_object.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_object.c @@ -50,12 +50,12 @@ /* hash_long() */ #include "../../include/linux/libcfs/libcfs_hash.h" -#include -#include -#include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_disk.h" +#include "../include/lustre_fid.h" +#include "../include/lu_object.h" +#include "../include/lu_ref.h" #include static void lu_object_free(const struct lu_env *env, struct lu_object *o); diff --git a/drivers/staging/lustre/lustre/obdclass/lu_ref.c b/drivers/staging/lustre/lustre/obdclass/lu_ref.c index b29ca63d85b2..993697b660f6 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_ref.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_ref.c @@ -44,7 +44,7 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lu_ref.h" diff --git a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c b/drivers/staging/lustre/lustre/obdclass/lu_ucred.c index f5bd9cca258d..3676563ab330 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_ucred.c @@ -45,9 +45,9 @@ #define DEBUG_SUBSYSTEM S_CLASS #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lu_object.h" +#include "../include/md_object.h" /* context key constructor/destructor: lu_ucred_key_init, lu_ucred_key_fini */ LU_KEY_INIT_FINI(lu_ucred, struct lu_ucred); diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c index be31d32b82c8..0bcefa79fb77 100644 --- a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c +++ b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c @@ -40,9 +40,9 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_handles.h" +#include "../include/lustre_lib.h" static __u64 handle_base; diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_peer.c b/drivers/staging/lustre/lustre/obdclass/lustre_peer.c index df4936ad2375..64b2f35e224f 100644 --- a/drivers/staging/lustre/lustre/obdclass/lustre_peer.c +++ b/drivers/staging/lustre/lustre/obdclass/lustre_peer.c @@ -36,13 +36,13 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_net.h" +#include "../include/lprocfs_status.h" #define NIDS_MAX 32 diff --git a/drivers/staging/lustre/lustre/obdclass/md_attrs.c b/drivers/staging/lustre/lustre/obdclass/md_attrs.c index f080cceb384c..d9e6348de4fa 100644 --- a/drivers/staging/lustre/lustre/obdclass/md_attrs.c +++ b/drivers/staging/lustre/lustre/obdclass/md_attrs.c @@ -27,9 +27,9 @@ * Author: Johann Lombardi */ -#include -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/obd.h" +#include "../include/md_object.h" /** * Initialize new \a lma. Only fid is stored. diff --git a/drivers/staging/lustre/lustre/obdclass/mea.c b/drivers/staging/lustre/lustre/obdclass/mea.c index c4f0dbc23611..d6ce084da902 100644 --- a/drivers/staging/lustre/lustre/obdclass/mea.c +++ b/drivers/staging/lustre/lustre/obdclass/mea.c @@ -33,13 +33,13 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../include/obd_class.h" #include /* for request_module() */ #include #include #include -#include -#include +#include "../include/lprocfs_status.h" +#include "../include/lustre/lustre_idl.h" static int mea_last_char_hash(int count, char *name, int namelen) { diff --git a/drivers/staging/lustre/lustre/obdclass/obd_config.c b/drivers/staging/lustre/lustre/obdclass/obd_config.c index 2d5777699f47..f7b6e1657fc9 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_config.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_config.c @@ -39,11 +39,11 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include "../include/obd_class.h" #include -#include -#include -#include +#include "../include/lustre_log.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_param.h" #include "llog_internal.h" diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c b/drivers/staging/lustre/lustre/obdclass/obd_mount.c index 4e77f07de1d5..d972f71c9d97 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c @@ -45,13 +45,13 @@ #define D_MOUNT (D_SUPER|D_CONFIG/*|D_WARNING */) #define PRINT_CMD CDEBUG -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/lvfs.h" +#include "../include/obd_class.h" +#include "../include/lustre/lustre_user.h" +#include "../include/lustre_log.h" +#include "../include/lustre_disk.h" +#include "../include/lustre_param.h" static int (*client_fill_super)(struct super_block *sb, struct vfsmount *mnt); diff --git a/drivers/staging/lustre/lustre/obdclass/obdo.c b/drivers/staging/lustre/lustre/obdclass/obdo.c index 3b1b28afd6b1..0ef42e841715 100644 --- a/drivers/staging/lustre/lustre/obdclass/obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/obdo.c @@ -42,8 +42,8 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre/lustre_idl.h" void obdo_set_parent_fid(struct obdo *dst, const struct lu_fid *parent) { diff --git a/drivers/staging/lustre/lustre/obdclass/statfs_pack.c b/drivers/staging/lustre/lustre/obdclass/statfs_pack.c index c3b7a78dba50..33b1a83f4014 100644 --- a/drivers/staging/lustre/lustre/obdclass/statfs_pack.c +++ b/drivers/staging/lustre/lustre/obdclass/statfs_pack.c @@ -41,10 +41,10 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include -#include +#include "../include/lustre_export.h" +#include "../include/lustre_net.h" +#include "../include/obd_support.h" +#include "../include/obd_class.h" void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs) { diff --git a/drivers/staging/lustre/lustre/obdclass/uuid.c b/drivers/staging/lustre/lustre/obdclass/uuid.c index 344a04711df4..ff0a01bcf8da 100644 --- a/drivers/staging/lustre/lustre/obdclass/uuid.c +++ b/drivers/staging/lustre/lustre/obdclass/uuid.c @@ -40,8 +40,8 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" static inline __u32 consume(int nob, __u8 **ptr) -- cgit From 73060ed93a16792520d73796ecb1ac94d5a6f15a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:16:07 -0700 Subject: staging: lustre: mgc: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/mgc/Makefile | 3 --- drivers/staging/lustre/lustre/mgc/libmgc.c | 12 ++++++------ drivers/staging/lustre/lustre/mgc/lproc_mgc.c | 4 ++-- drivers/staging/lustre/lustre/mgc/mgc_internal.h | 10 +++++----- drivers/staging/lustre/lustre/mgc/mgc_request.c | 12 ++++++------ 5 files changed, 19 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/mgc/Makefile b/drivers/staging/lustre/lustre/mgc/Makefile index 2f5ee649456d..cc6e9f51a8e8 100644 --- a/drivers/staging/lustre/lustre/mgc/Makefile +++ b/drivers/staging/lustre/lustre/mgc/Makefile @@ -1,6 +1,3 @@ obj-$(CONFIG_LUSTRE_FS) += mgc.o mgc-y := mgc_request.o mgc-$(CONFIG_PROC_FS) += lproc_mgc.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/mgc/libmgc.c b/drivers/staging/lustre/lustre/mgc/libmgc.c index 9b40c57d3cd4..8012f0f1bfcd 100644 --- a/drivers/staging/lustre/lustre/mgc/libmgc.c +++ b/drivers/staging/lustre/lustre/mgc/libmgc.c @@ -44,13 +44,13 @@ #define DEBUG_SUBSYSTEM S_MGC -#include +#include "../include/liblustre.h" -#include -#include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_log.h" +#include "../include/lustre_fsfilt.h" +#include "../include/lustre_disk.h" static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) diff --git a/drivers/staging/lustre/lustre/mgc/lproc_mgc.c b/drivers/staging/lustre/lustre/mgc/lproc_mgc.c index 6c877c5a6a71..c4ea38e5f077 100644 --- a/drivers/staging/lustre/lustre/mgc/lproc_mgc.c +++ b/drivers/staging/lustre/lustre/mgc/lproc_mgc.c @@ -36,8 +36,8 @@ #define DEBUG_SUBSYSTEM S_CLASS #include -#include -#include +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" #include "mgc_internal.h" LPROC_SEQ_FOPS_RO_TYPE(mgc, uuid); diff --git a/drivers/staging/lustre/lustre/mgc/mgc_internal.h b/drivers/staging/lustre/lustre/mgc/mgc_internal.h index 648b44323195..b01d2dbb8623 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_internal.h +++ b/drivers/staging/lustre/lustre/mgc/mgc_internal.h @@ -38,11 +38,11 @@ #define _MGC_INTERNAL_H #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_log.h" +#include "../include/lustre_export.h" #ifdef LPROCFS void lprocfs_mgc_init_vars(struct lprocfs_static_vars *lvars); diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index 28960f99ebb9..54ea5fd12de0 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -42,12 +42,12 @@ #define D_MGC D_CONFIG /*|D_WARNING*/ #include -#include -#include -#include -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_dlm.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_log.h" +#include "../include/lustre_disk.h" +#include "../include/dt_object.h" #include "mgc_internal.h" -- cgit From 3ee300153882afefa2a093b4f5f456ef1b778530 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:16:18 -0700 Subject: staging: lustre: osc: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/osc/Makefile | 4 ---- drivers/staging/lustre/lustre/osc/lproc_osc.c | 6 +++--- .../staging/lustre/lustre/osc/osc_cl_internal.h | 8 ++++---- drivers/staging/lustre/lustre/osc/osc_dev.c | 2 +- drivers/staging/lustre/lustre/osc/osc_internal.h | 2 +- drivers/staging/lustre/lustre/osc/osc_lock.c | 2 +- drivers/staging/lustre/lustre/osc/osc_quota.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 24 +++++++++++----------- 8 files changed, 23 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/osc/Makefile b/drivers/staging/lustre/lustre/osc/Makefile index 4488162d228a..54927fba4eb4 100644 --- a/drivers/staging/lustre/lustre/osc/Makefile +++ b/drivers/staging/lustre/lustre/osc/Makefile @@ -2,7 +2,3 @@ obj-$(CONFIG_LUSTRE_FS) += osc.o osc-y := osc_request.o osc_dev.o osc_object.o \ osc_page.o osc_lock.o osc_io.o osc_quota.o osc_cache.o osc-$(CONFIG_PROC_FS) += lproc_osc.o - - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/osc/lproc_osc.c b/drivers/staging/lustre/lustre/osc/lproc_osc.c index 0cadfcd92262..9b2e5656bb68 100644 --- a/drivers/staging/lustre/lustre/osc/lproc_osc.c +++ b/drivers/staging/lustre/lustre/osc/lproc_osc.c @@ -36,9 +36,9 @@ #define DEBUG_SUBSYSTEM S_CLASS #include -#include -#include -#include +#include "../include/obd_cksum.h" +#include "../include/obd_class.h" +#include "../include/lprocfs_status.h" #include #include "osc_internal.h" diff --git a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h index 9fe79f30d936..e32a817e7ded 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h @@ -48,11 +48,11 @@ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/obd.h" /* osc_build_res_name() */ -#include -#include -#include +#include "../include/obd_ost.h" +#include "../include/cl_object.h" +#include "../include/lclient.h" #include "osc_internal.h" /** \defgroup osc osc diff --git a/drivers/staging/lustre/lustre/osc/osc_dev.c b/drivers/staging/lustre/lustre/osc/osc_dev.c index 048a5a5cf7f5..4935fc7c0706 100644 --- a/drivers/staging/lustre/lustre/osc/osc_dev.c +++ b/drivers/staging/lustre/lustre/osc/osc_dev.c @@ -41,7 +41,7 @@ #define DEBUG_SUBSYSTEM S_OSC /* class_name2obd() */ -#include +#include "../include/obd_class.h" #include "osc_cl_internal.h" diff --git a/drivers/staging/lustre/lustre/osc/osc_internal.h b/drivers/staging/lustre/lustre/osc/osc_internal.h index 9c4a189639ae..0e08891cca3e 100644 --- a/drivers/staging/lustre/lustre/osc/osc_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_internal.h @@ -97,7 +97,7 @@ void osc_update_next_shrink(struct client_obd *cli); /* * cl integration. */ -#include +#include "../include/cl_object.h" extern struct ptlrpc_request_set *PTLRPCD_SET; diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index be677ddeed59..7a74c75939b7 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -42,7 +42,7 @@ #include "../../include/linux/libcfs/libcfs.h" /* fid_build_reg_res_name() */ -#include +#include "../include/lustre_fid.h" #include "osc_cl_internal.h" diff --git a/drivers/staging/lustre/lustre/osc/osc_quota.c b/drivers/staging/lustre/lustre/osc/osc_quota.c index 0235fabaaffe..3563809072b4 100644 --- a/drivers/staging/lustre/lustre/osc/osc_quota.c +++ b/drivers/staging/lustre/lustre/osc/osc_quota.c @@ -28,7 +28,7 @@ * Code originally extracted from quota directory */ -#include +#include "../include/obd_ost.h" #include "osc_internal.h" static inline struct osc_quota_info *osc_oqi_alloc(obd_uid id) diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 6749bc415c9f..614d8b5f6cc4 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -39,18 +39,18 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/lustre_net.h" +#include "../include/lustre/lustre_user.h" +#include "../include/obd_cksum.h" +#include "../include/obd_ost.h" + +#include "../include/lustre_ha.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre_log.h" +#include "../include/lustre_debug.h" +#include "../include/lustre_param.h" +#include "../include/lustre_fid.h" #include "osc_internal.h" #include "osc_cl_internal.h" -- cgit From 7f2d973a7c4cb6fda470a65d0fc953dbc06fe64a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:17:53 -0700 Subject: staging: lustre: obdecho: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdecho/Makefile | 3 --- drivers/staging/lustre/lustre/obdecho/echo.c | 10 +++++----- drivers/staging/lustre/lustre/obdecho/echo_client.c | 20 ++++++++++---------- drivers/staging/lustre/lustre/obdecho/lproc_echo.c | 4 ++-- 4 files changed, 17 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdecho/Makefile b/drivers/staging/lustre/lustre/obdecho/Makefile index 4c48e2432f9b..672028fc7f6e 100644 --- a/drivers/staging/lustre/lustre/obdecho/Makefile +++ b/drivers/staging/lustre/lustre/obdecho/Makefile @@ -1,5 +1,2 @@ obj-$(CONFIG_LUSTRE_FS) += obdecho.o obdecho-y := echo_client.o lproc_echo.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/obdecho/echo.c b/drivers/staging/lustre/lustre/obdecho/echo.c index 96a807f82ec1..92fa0908bbfb 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo.c +++ b/drivers/staging/lustre/lustre/obdecho/echo.c @@ -41,11 +41,11 @@ #define DEBUG_SUBSYSTEM S_ECHO -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_debug.h" +#include "../include/lustre_dlm.h" +#include "../include/lprocfs_status.h" #include "echo_internal.h" diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index 59b8f648a077..94485c2d7b27 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -37,16 +37,16 @@ #define DEBUG_SUBSYSTEM S_ECHO #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_debug.h" +#include "../include/lprocfs_status.h" +#include "../include/cl_object.h" +#include "../include/md_object.h" +#include "../include/lustre_fid.h" +#include "../include/lustre_acl.h" +#include "../include/lustre_net.h" #include "echo_internal.h" diff --git a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c index c972eb48b10a..ccd751fd8480 100644 --- a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c +++ b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c @@ -33,8 +33,8 @@ */ #define DEBUG_SUBSYSTEM S_ECHO -#include -#include +#include "../include/lprocfs_status.h" +#include "../include/obd_class.h" #ifdef LPROCFS LPROC_SEQ_FOPS_RO_TYPE(echo, uuid); -- cgit From e27db14919269176ec040479d199225a37aafb8c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:29:36 -0700 Subject: staging: lustre: ptlrpc/ldlm: remove ccflags from Makefile Fix up the relative paths in the .c files to properly build with the Makefile change. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/interval_tree.c | 6 +++--- drivers/staging/lustre/lustre/ldlm/l_lock.c | 4 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_extent.c | 12 +++++------- drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 9 ++++----- drivers/staging/lustre/lustre/ldlm/ldlm_inodebits.c | 7 +++---- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 10 +++++----- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 5 ++--- drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c | 5 ++--- drivers/staging/lustre/lustre/ldlm/ldlm_plain.c | 6 +++--- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 10 ++++------ drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 6 +++--- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 7 +++---- drivers/staging/lustre/lustre/ptlrpc/Makefile | 3 --- drivers/staging/lustre/lustre/ptlrpc/client.c | 12 ++++++------ drivers/staging/lustre/lustre/ptlrpc/connection.c | 6 +++--- drivers/staging/lustre/lustre/ptlrpc/errno.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/events.c | 6 +++--- drivers/staging/lustre/lustre/ptlrpc/import.c | 16 ++++++++-------- drivers/staging/lustre/lustre/ptlrpc/layout.c | 16 ++++++++-------- drivers/staging/lustre/lustre/ptlrpc/llog_client.c | 6 +++--- drivers/staging/lustre/lustre/ptlrpc/llog_net.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 12 ++++++------ drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 10 +++++----- drivers/staging/lustre/lustre/ptlrpc/nrs.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/pack_generic.c | 10 +++++----- drivers/staging/lustre/lustre/ptlrpc/pers.c | 10 +++++----- drivers/staging/lustre/lustre/ptlrpc/pinger.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c | 15 +++++++-------- drivers/staging/lustre/lustre/ptlrpc/recover.c | 16 ++++++++-------- drivers/staging/lustre/lustre/ptlrpc/sec.c | 14 +++++++------- drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 16 ++++++++-------- drivers/staging/lustre/lustre/ptlrpc/sec_config.c | 20 ++++++++++---------- drivers/staging/lustre/lustre/ptlrpc/sec_gc.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c | 14 +++++++------- drivers/staging/lustre/lustre/ptlrpc/sec_null.c | 10 +++++----- drivers/staging/lustre/lustre/ptlrpc/sec_plain.c | 10 +++++----- drivers/staging/lustre/lustre/ptlrpc/service.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/wiretest.c | 8 ++++---- 40 files changed, 177 insertions(+), 190 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/interval_tree.c b/drivers/staging/lustre/lustre/ldlm/interval_tree.c index 1de1d8eb9b41..a3d7a7292417 100644 --- a/drivers/staging/lustre/lustre/ldlm/interval_tree.c +++ b/drivers/staging/lustre/lustre/ldlm/interval_tree.c @@ -38,9 +38,9 @@ * Author: Huang Wei * Author: Jay Xiong */ -# include -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/obd_support.h" +#include "../include/interval_tree.h" enum { INTERVAL_RED = 0, diff --git a/drivers/staging/lustre/lustre/ldlm/l_lock.c b/drivers/staging/lustre/lustre/ldlm/l_lock.c index ba774c4d991e..cd8ab40e3267 100644 --- a/drivers/staging/lustre/lustre/ldlm/l_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/l_lock.c @@ -37,8 +37,8 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/lustre_lib.h" /** * Lock a lock and its resource. diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c index 53cdbb8e45ea..99cf7ae47d9f 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c @@ -51,13 +51,11 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" - -#include -#include -#include -#include -#include - +#include "../include/lustre_dlm.h" +#include "../include/obd_support.h" +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c index 986bf384bff7..d5d84afd4fc2 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c @@ -56,12 +56,11 @@ #define DEBUG_SUBSYSTEM S_LDLM -#include -#include -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" #include - #include "ldlm_internal.h" int ldlm_flock_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc, diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_inodebits.c b/drivers/staging/lustre/lustre/ldlm/ldlm_inodebits.c index 574b2ff43b74..40d3338506ae 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_inodebits.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_inodebits.c @@ -53,10 +53,9 @@ #define DEBUG_SUBSYSTEM S_LDLM -#include -#include -#include - +#include "../include/lustre_dlm.h" +#include "../include/obd_support.h" +#include "../include/lustre_lib.h" #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index 8900968a2c03..20593e2151a6 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -44,11 +44,11 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_net.h" +#include "../include/lustre_sec.h" #include "ldlm_internal.h" /* @priority: If non-zero, move the selected connection to the list head. diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index 16a1020b9835..cf71deb3f4ce 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -42,9 +42,8 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" -#include - -#include +#include "../include/linux/lustre_intent.h" +#include "../include/obd_class.h" #include "ldlm_internal.h" /* lock types */ diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c index 05c53fbf7a3d..8524e7ab5f9a 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c @@ -42,9 +42,8 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" - -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/obd_class.h" #include #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_plain.c b/drivers/staging/lustre/lustre/ldlm/ldlm_plain.c index ec29e28624fe..a1fe2c161e38 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_plain.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_plain.c @@ -52,9 +52,9 @@ #define DEBUG_SUBSYSTEM S_LDLM -#include -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/obd_support.h" +#include "../include/lustre_lib.h" #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 2cc698179b63..d3d1a397489b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -97,12 +97,10 @@ #define DEBUG_SUBSYSTEM S_LDLM -# include - -#include - -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/cl_object.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 3accbce87faf..a3354089cbff 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -61,9 +61,9 @@ #define DEBUG_SUBSYSTEM S_LDLM -#include -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/obd_class.h" +#include "../include/obd.h" #include "ldlm_internal.h" diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index 25ce0e5f9892..eb166a708be7 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -40,10 +40,9 @@ */ #define DEBUG_SUBSYSTEM S_LDLM -# include - -#include -#include +#include "../include/lustre_dlm.h" +#include "../include/lustre_fid.h" +#include "../include/obd_class.h" #include "ldlm_internal.h" struct kmem_cache *ldlm_resource_slab, *ldlm_lock_slab; diff --git a/drivers/staging/lustre/lustre/ptlrpc/Makefile b/drivers/staging/lustre/lustre/ptlrpc/Makefile index 1c338aaf18a6..9a2970e4c765 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/Makefile +++ b/drivers/staging/lustre/lustre/ptlrpc/Makefile @@ -20,6 +20,3 @@ ptlrpc-$(CONFIG_PROC_FS) += sec_lproc.o ptlrpc-$(CONFIG_LUSTRE_TRANSLATE_ERRNOS) += errno.o obj-$(CONFIG_PTLRPC_GSS) += gss/ - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 0e0ea5cd5f36..612e9fe6ce0b 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -38,12 +38,12 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_import.h" +#include "../include/lustre_req_layout.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/connection.c b/drivers/staging/lustre/lustre/ptlrpc/connection.c index 6756356faac1..adff1ab4f5a4 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/connection.c +++ b/drivers/staging/lustre/lustre/ptlrpc/connection.c @@ -35,9 +35,9 @@ */ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/errno.c b/drivers/staging/lustre/lustre/ptlrpc/errno.c index 79734cd3693e..73f8374f190e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/errno.c +++ b/drivers/staging/lustre/lustre/ptlrpc/errno.c @@ -26,7 +26,7 @@ */ #include "../../include/linux/libcfs/libcfs.h" -#include +#include "../include/lustre/lustre_errno.h" /* * The two translation tables below must define a one-to-one mapping between diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index fcdba92883c8..5a2984e063d7 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -41,9 +41,9 @@ # include # endif -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_sec.h" #include "ptlrpc_internal.h" lnet_handle_eq_t ptlrpc_eq_h; diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index b4def8a20e25..931e052ede1a 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -40,14 +40,14 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_export.h" +#include "../include/obd.h" +#include "../include/obd_cksum.h" +#include "../include/obd_class.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/layout.c b/drivers/staging/lustre/lustre/ptlrpc/layout.c index 41c12e00129f..511cb9cbf0d4 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/layout.c +++ b/drivers/staging/lustre/lustre/ptlrpc/layout.c @@ -53,21 +53,21 @@ #include /* LUSTRE_VERSION_CODE */ -#include +#include "../include/lustre_ver.h" -#include +#include "../include/obd_support.h" /* lustre_swab_mdt_body */ -#include +#include "../include/lustre/lustre_idl.h" /* obd2cli_tgt() (required by DEBUG_REQ()) */ -#include +#include "../include/obd.h" /* __REQ_LAYOUT_USER__ */ #endif /* struct ptlrpc_request, lustre_msg* */ -#include -#include -#include -#include +#include "../include/lustre_req_layout.h" +#include "../include/lustre_update.h" +#include "../include/lustre_acl.h" +#include "../include/lustre_debug.h" /* * RQFs (see below) refer to two struct req_msg_field arrays describing the diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c index 768a150c0d92..6a1ab5c98bc6 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c @@ -44,9 +44,9 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_log.h" +#include "../include/lustre_net.h" #include #define LLOG_CLIENT_ENTRY(ctxt, imp) do { \ diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c index da580eda7ce1..e9052bba6692 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c @@ -48,11 +48,11 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include +#include "../include/obd_class.h" +#include "../include/lustre_log.h" #include -#include -#include +#include "../include/lvfs.h" +#include "../include/lustre_fsfilt.h" int llog_initiator_connect(struct llog_ctxt *ctxt) { diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index 6b9c6db1f2df..de98694e6fd5 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -36,12 +36,12 @@ #define DEBUG_SUBSYSTEM S_CLASS -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd.h" +#include "../include/lprocfs_status.h" +#include "../include/lustre/lustre_idl.h" +#include "../include/lustre_net.h" +#include "../include/obd_class.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index 3f0ca23f7b91..cf7758a3aedd 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -35,11 +35,11 @@ */ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_net.h" +#include "../include/lustre_lib.h" +#include "../include/obd.h" +#include "../include/obd_class.h" #include "ptlrpc_internal.h" /** diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs.c b/drivers/staging/lustre/lustre/ptlrpc/nrs.c index 8db5c0acb229..9ea24f8d9865 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs.c @@ -40,10 +40,10 @@ */ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lprocfs_status.h" #include "../../include/linux/libcfs/libcfs.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c index cbf30c44b857..5ac248082d1e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c @@ -47,8 +47,8 @@ */ #define DEBUG_SUBSYSTEM S_RPC -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" #include "../../include/linux/libcfs/libcfs.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index 056c290c839c..ffab15bd74f3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -46,11 +46,11 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/obd_cksum.h" +#include "../include/lustre/ll_fiemap.h" static inline int lustre_msg_hdr_size_v2(int count) { diff --git a/drivers/staging/lustre/lustre/ptlrpc/pers.c b/drivers/staging/lustre/lustre/ptlrpc/pers.c index d926d2b36fb4..e1334c24ebe3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pers.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pers.c @@ -34,11 +34,11 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_import.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index 2898087e9715..fc96ffbc0a0b 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -40,8 +40,8 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" #include "ptlrpc_internal.h" static int suppress_pings; diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c index 251ae75c2dd9..6d92a56da620 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c @@ -37,10 +37,10 @@ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_req_layout.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c index ea636f9026b5..9c60e2af43bf 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c @@ -57,14 +57,13 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -# include - -#include -#include /* for obd_zombie */ -#include /* for OBD_FAIL_CHECK */ -#include /* cl_env_{get,put}() */ -#include +#include "../include/lustre_net.h" +#include "../include/lustre_lib.h" +#include "../include/lustre_ha.h" +#include "../include/obd_class.h" /* for obd_zombie */ +#include "../include/obd_support.h" /* for OBD_FAIL_CHECK */ +#include "../include/cl_object.h" /* cl_env_{get,put}() */ +#include "../include/lprocfs_status.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/recover.c b/drivers/staging/lustre/lustre/ptlrpc/recover.c index bd968f070fc9..3d8485802482 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/recover.c +++ b/drivers/staging/lustre/lustre/ptlrpc/recover.c @@ -41,14 +41,14 @@ #define DEBUG_SUBSYSTEM S_RPC #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/lustre_ha.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_export.h" +#include "../include/obd.h" +#include "../include/obd_ost.h" +#include "../include/obd_class.h" #include #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index 054b1da94cf4..61b56633d3c6 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -44,13 +44,13 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_sec.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c index f41ddbae7752..8fba69e380ef 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c @@ -43,14 +43,14 @@ #include "../../include/linux/libcfs/libcfs.h" #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_cksum.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_sec.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c index 585d332c674e..3cda2bba6fde 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c @@ -40,16 +40,16 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_log.h" +#include "../include/lustre_disk.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_param.h" +#include "../include/lustre_sec.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c index e63923fd343c..dab92f14c8b7 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c @@ -42,10 +42,10 @@ #include "../../include/linux/libcfs/libcfs.h" -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_sec.h" #define SEC_GC_INTERVAL (30 * 60) diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c index 095d6e79fa0e..fa76f4fb2d44 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c @@ -41,13 +41,13 @@ #include "../../include/linux/libcfs/libcfs.h" #include -#include -#include -#include -#include -#include -#include -#include +#include "../include/obd.h" +#include "../include/obd_class.h" +#include "../include/obd_support.h" +#include "../include/lustre_net.h" +#include "../include/lustre_import.h" +#include "../include/lustre_dlm.h" +#include "../include/lustre_sec.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c index ac967cb983cf..a47791411149 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c @@ -41,11 +41,11 @@ #define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_cksum.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_sec.h" static struct ptlrpc_sec_policy null_policy; static struct ptlrpc_sec null_sec; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c b/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c index 12c6cefe3f8d..3d72b810c45c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_plain.c @@ -41,11 +41,11 @@ #define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_cksum.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_sec.h" struct plain_sec { struct ptlrpc_sec pls_base; diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index bdb9f576576d..1b90f63abfad 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -35,10 +35,10 @@ */ #define DEBUG_SUBSYSTEM S_RPC -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lu_object.h" #include "../../include/linux/lnet/types.h" #include "ptlrpc_internal.h" diff --git a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c index 3c8846006a7b..0624420135c2 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c +++ b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c @@ -39,10 +39,10 @@ #include #include -#include -#include -#include -#include +#include "../include/obd_support.h" +#include "../include/obd_class.h" +#include "../include/lustre_net.h" +#include "../include/lustre_disk.h" void lustre_assert_wire_constants(void) { /* Wire protocol assertions generated by 'wirecheck' -- cgit From b78560200d414ae24db0664f68619738def88885 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:30:54 -0700 Subject: staging: lustre: ptlrpc: gss: delete unused code The gss code has never been built, there is no Kconfig option for it, so delete it as code that can not build goes bad really fast. If someone wants it back, they can revert this and fix any build errors that might be in it. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/Makefile | 2 - drivers/staging/lustre/lustre/ptlrpc/gss/Makefile | 8 - drivers/staging/lustre/lustre/ptlrpc/gss/gss_api.h | 179 -- .../staging/lustre/lustre/ptlrpc/gss/gss_asn1.h | 84 - .../staging/lustre/lustre/ptlrpc/gss/gss_bulk.c | 505 ---- .../lustre/lustre/ptlrpc/gss/gss_cli_upcall.c | 446 --- drivers/staging/lustre/lustre/ptlrpc/gss/gss_err.h | 193 -- .../lustre/lustre/ptlrpc/gss/gss_generic_token.c | 296 -- .../lustre/lustre/ptlrpc/gss/gss_internal.h | 526 ---- .../staging/lustre/lustre/ptlrpc/gss/gss_keyring.c | 1409 ---------- .../staging/lustre/lustre/ptlrpc/gss/gss_krb5.h | 163 -- .../lustre/lustre/ptlrpc/gss/gss_krb5_mech.c | 1786 ------------ .../lustre/lustre/ptlrpc/gss/gss_mech_switch.c | 358 --- .../staging/lustre/lustre/ptlrpc/gss/gss_pipefs.c | 1233 --------- .../staging/lustre/lustre/ptlrpc/gss/gss_rawobj.c | 242 -- .../lustre/lustre/ptlrpc/gss/gss_svc_upcall.c | 1093 -------- .../staging/lustre/lustre/ptlrpc/gss/lproc_gss.c | 220 -- drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c | 2918 -------------------- 18 files changed, 11661 deletions(-) delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/Makefile delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_api.h delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_asn1.h delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_bulk.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_cli_upcall.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_err.h delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_generic_token.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_internal.h delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_keyring.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5.h delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5_mech.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_mech_switch.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_pipefs.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_rawobj.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/gss_svc_upcall.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/lproc_gss.c delete mode 100644 drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/Makefile b/drivers/staging/lustre/lustre/ptlrpc/Makefile index 9a2970e4c765..fb50cd4c65b6 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/Makefile +++ b/drivers/staging/lustre/lustre/ptlrpc/Makefile @@ -18,5 +18,3 @@ ptlrpc_objs += sec_null.o sec_plain.o nrs.o nrs_fifo.o ptlrpc-y := $(ldlm_objs) $(ptlrpc_objs) ptlrpc-$(CONFIG_PROC_FS) += sec_lproc.o ptlrpc-$(CONFIG_LUSTRE_TRANSLATE_ERRNOS) += errno.o - -obj-$(CONFIG_PTLRPC_GSS) += gss/ diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/Makefile b/drivers/staging/lustre/lustre/ptlrpc/gss/Makefile deleted file mode 100644 index 8cdfbeed64e6..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -obj-$(CONFIG_LUSTRE_FS) := ptlrpc_gss.o - -ptlrpc_gss-y := sec_gss.o gss_bulk.o gss_cli_upcall.o gss_svc_upcall.o \ - gss_rawobj.o lproc_gss.o gss_generic_token.o \ - gss_mech_switch.o gss_krb5_mech.o - - -ccflags-y := -I$(src)/../include diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_api.h b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_api.h deleted file mode 100644 index 0e9f6c472a37..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_api.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Author: Eric Mei - */ - -/* - * Somewhat simplified version of the gss api. - * - * Dug Song - * Andy Adamson - * Bruce Fields - * Copyright (c) 2000 The Regents of the University of Michigan - * - */ - -#ifndef __PTLRPC_GSS_GSS_API_H_ -#define __PTLRPC_GSS_GSS_API_H_ - -struct gss_api_mech; - -/* The mechanism-independent gss-api context: */ -struct gss_ctx { - struct gss_api_mech *mech_type; - void *internal_ctx_id; -}; - -#define GSS_C_NO_BUFFER ((rawobj_t) 0) -#define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0) -#define GSS_C_NULL_OID ((rawobj_t) 0) - -/* - * gss-api prototypes; note that these are somewhat simplified versions of - * the prototypes specified in RFC 2744. - */ -__u32 lgss_import_sec_context( - rawobj_t *input_token, - struct gss_api_mech *mech, - struct gss_ctx **ctx); -__u32 lgss_copy_reverse_context( - struct gss_ctx *ctx, - struct gss_ctx **ctx_new); -__u32 lgss_inquire_context( - struct gss_ctx *ctx, - unsigned long *endtime); -__u32 lgss_get_mic( - struct gss_ctx *ctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token); -__u32 lgss_verify_mic( - struct gss_ctx *ctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token); -__u32 lgss_wrap( - struct gss_ctx *ctx, - rawobj_t *gsshdr, - rawobj_t *msg, - int msg_buflen, - rawobj_t *out_token); -__u32 lgss_unwrap( - struct gss_ctx *ctx, - rawobj_t *gsshdr, - rawobj_t *token, - rawobj_t *out_msg); -__u32 lgss_prep_bulk( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc); -__u32 lgss_wrap_bulk( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob); -__u32 lgss_unwrap_bulk( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob); -__u32 lgss_delete_sec_context( - struct gss_ctx **ctx); -int lgss_display( - struct gss_ctx *ctx, - char *buf, - int bufsize); - -struct subflavor_desc { - __u32 sf_subflavor; - __u32 sf_qop; - __u32 sf_service; - char *sf_name; -}; - -/* Each mechanism is described by the following struct: */ -struct gss_api_mech { - struct list_head gm_list; - struct module *gm_owner; - char *gm_name; - rawobj_t gm_oid; - atomic_t gm_count; - struct gss_api_ops *gm_ops; - int gm_sf_num; - struct subflavor_desc *gm_sfs; -}; - -/* and must provide the following operations: */ -struct gss_api_ops { - __u32 (*gss_import_sec_context)( - rawobj_t *input_token, - struct gss_ctx *ctx); - __u32 (*gss_copy_reverse_context)( - struct gss_ctx *ctx, - struct gss_ctx *ctx_new); - __u32 (*gss_inquire_context)( - struct gss_ctx *ctx, - unsigned long *endtime); - __u32 (*gss_get_mic)( - struct gss_ctx *ctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token); - __u32 (*gss_verify_mic)( - struct gss_ctx *ctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token); - __u32 (*gss_wrap)( - struct gss_ctx *ctx, - rawobj_t *gsshdr, - rawobj_t *msg, - int msg_buflen, - rawobj_t *out_token); - __u32 (*gss_unwrap)( - struct gss_ctx *ctx, - rawobj_t *gsshdr, - rawobj_t *token, - rawobj_t *out_msg); - __u32 (*gss_prep_bulk)( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc); - __u32 (*gss_wrap_bulk)( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob); - __u32 (*gss_unwrap_bulk)( - struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob); - void (*gss_delete_sec_context)( - void *ctx); - int (*gss_display)( - struct gss_ctx *ctx, - char *buf, - int bufsize); -}; - -int lgss_mech_register(struct gss_api_mech *mech); -void lgss_mech_unregister(struct gss_api_mech *mech); - -struct gss_api_mech * lgss_OID_to_mech(rawobj_t *oid); -struct gss_api_mech * lgss_name_to_mech(char *name); -struct gss_api_mech * lgss_subflavor_to_mech(__u32 subflavor); - -struct gss_api_mech * lgss_mech_get(struct gss_api_mech *mech); -void lgss_mech_put(struct gss_api_mech *mech); - -#endif /* __PTLRPC_GSS_GSS_API_H_ */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_asn1.h b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_asn1.h deleted file mode 100644 index bdfd83880422..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_asn1.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Author: Eric Mei - */ - -/* - * minimal asn1 for generic encoding/decoding of gss tokens - * - * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, - * lib/gssapi/krb5/gssapiP_krb5.h, and others - * - * Copyright (c) 2000 The Regents of the University of Michigan. - * All rights reserved. - * - * Andy Adamson - */ - -/* - * Copyright 1995 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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 and that both that copyright notice and - * this permission notice appear in supporting documentation, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - */ - -#define SIZEOF_INT 4 - -/* from gssapi_err_generic.h */ -#define G_BAD_SERVICE_NAME (-2045022976L) -#define G_BAD_STRING_UID (-2045022975L) -#define G_NOUSER (-2045022974L) -#define G_VALIDATE_FAILED (-2045022973L) -#define G_BUFFER_ALLOC (-2045022972L) -#define G_BAD_MSG_CTX (-2045022971L) -#define G_WRONG_SIZE (-2045022970L) -#define G_BAD_USAGE (-2045022969L) -#define G_UNKNOWN_QOP (-2045022968L) -#define G_NO_HOSTNAME (-2045022967L) -#define G_BAD_HOSTNAME (-2045022966L) -#define G_WRONG_MECH (-2045022965L) -#define G_BAD_TOK_HEADER (-2045022964L) -#define G_BAD_DIRECTION (-2045022963L) -#define G_TOK_TRUNC (-2045022962L) -#define G_REFLECT (-2045022961L) -#define G_WRONG_TOKID (-2045022960L) - -#define g_OID_equal(o1, o2) \ - (((o1)->len == (o2)->len) && \ - (memcmp((o1)->data, (o2)->data, (int) (o1)->len) == 0)) - -__u32 g_verify_token_header(rawobj_t *mech, - int *body_size, - unsigned char **buf_in, - int toksize); - -__u32 g_get_mech_oid(rawobj_t *mech, - rawobj_t *in_buf); - -int g_token_size(rawobj_t *mech, - unsigned int body_size); - -void g_make_token_header(rawobj_t *mech, - int body_size, - unsigned char **buf); diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_bulk.c deleted file mode 100644 index 93794bd928cb..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_bulk.c +++ /dev/null @@ -1,505 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/ptlrpc/gss/gss_bulk.c - * - * Author: Eric Mei - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -int gss_cli_ctx_wrap_bulk(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - struct gss_cli_ctx *gctx; - struct lustre_msg *msg; - struct ptlrpc_bulk_sec_desc *bsd; - rawobj_t token; - __u32 maj; - int offset; - int rc; - - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_read || req->rq_bulk_write); - - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - LASSERT(gctx->gc_mechctx); - - switch (SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc)) { - case SPTLRPC_SVC_NULL: - LASSERT(req->rq_reqbuf->lm_bufcount >= 3); - msg = req->rq_reqbuf; - offset = msg->lm_bufcount - 1; - break; - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - LASSERT(req->rq_reqbuf->lm_bufcount >= 4); - msg = req->rq_reqbuf; - offset = msg->lm_bufcount - 2; - break; - case SPTLRPC_SVC_PRIV: - LASSERT(req->rq_clrbuf->lm_bufcount >= 2); - msg = req->rq_clrbuf; - offset = msg->lm_bufcount - 1; - break; - default: - LBUG(); - } - - bsd = lustre_msg_buf(msg, offset, sizeof(*bsd)); - bsd->bsd_version = 0; - bsd->bsd_flags = 0; - bsd->bsd_type = SPTLRPC_BULK_DEFAULT; - bsd->bsd_svc = SPTLRPC_FLVR_BULK_SVC(req->rq_flvr.sf_rpc); - - if (bsd->bsd_svc == SPTLRPC_BULK_SVC_NULL) - return 0; - - LASSERT(bsd->bsd_svc == SPTLRPC_BULK_SVC_INTG || - bsd->bsd_svc == SPTLRPC_BULK_SVC_PRIV); - - if (req->rq_bulk_read) { - /* - * bulk read: prepare receiving pages only for privacy mode. - */ - if (bsd->bsd_svc == SPTLRPC_BULK_SVC_PRIV) - return gss_cli_prep_bulk(req, desc); - } else { - /* - * bulk write: sign or encrypt bulk pages. - */ - bsd->bsd_nob = desc->bd_nob; - - if (bsd->bsd_svc == SPTLRPC_BULK_SVC_INTG) { - /* integrity mode */ - token.data = bsd->bsd_data; - token.len = lustre_msg_buflen(msg, offset) - - sizeof(*bsd); - - maj = lgss_get_mic(gctx->gc_mechctx, 0, NULL, - desc->bd_iov_count, desc->bd_iov, - &token); - if (maj != GSS_S_COMPLETE) { - CWARN("failed to sign bulk data: %x\n", maj); - return -EACCES; - } - } else { - /* privacy mode */ - if (desc->bd_iov_count == 0) - return 0; - - rc = sptlrpc_enc_pool_get_pages(desc); - if (rc) { - CERROR("bulk write: failed to allocate " - "encryption pages: %d\n", rc); - return rc; - } - - token.data = bsd->bsd_data; - token.len = lustre_msg_buflen(msg, offset) - - sizeof(*bsd); - - maj = lgss_wrap_bulk(gctx->gc_mechctx, desc, &token, 0); - if (maj != GSS_S_COMPLETE) { - CWARN("fail to encrypt bulk data: %x\n", maj); - return -EACCES; - } - } - } - - return 0; -} - -int gss_cli_ctx_unwrap_bulk(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - struct gss_cli_ctx *gctx; - struct lustre_msg *rmsg, *vmsg; - struct ptlrpc_bulk_sec_desc *bsdr, *bsdv; - rawobj_t token; - __u32 maj; - int roff, voff; - - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_read || req->rq_bulk_write); - - switch (SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc)) { - case SPTLRPC_SVC_NULL: - vmsg = req->rq_repdata; - LASSERT(vmsg != NULL && vmsg->lm_bufcount >= 3); - voff = vmsg->lm_bufcount - 1; - - rmsg = req->rq_reqbuf; - LASSERT(rmsg != NULL && rmsg->lm_bufcount >= 3); - roff = rmsg->lm_bufcount - 1; /* last segment */ - break; - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - vmsg = req->rq_repdata; - LASSERT(vmsg != NULL && vmsg->lm_bufcount >= 4); - voff = vmsg->lm_bufcount - 2; - - rmsg = req->rq_reqbuf; - LASSERT(rmsg != NULL && rmsg->lm_bufcount >= 4); - roff = rmsg->lm_bufcount - 2; /* second last segment */ - break; - case SPTLRPC_SVC_PRIV: - vmsg = req->rq_repdata; - LASSERT(vmsg != NULL && vmsg->lm_bufcount >= 2); - voff = vmsg->lm_bufcount - 1; - - rmsg = req->rq_clrbuf; - LASSERT(rmsg != NULL && rmsg->lm_bufcount >= 2); - roff = rmsg->lm_bufcount - 1; /* last segment */ - break; - default: - LBUG(); - } - - bsdr = lustre_msg_buf(rmsg, roff, sizeof(*bsdr)); - bsdv = lustre_msg_buf(vmsg, voff, sizeof(*bsdv)); - LASSERT(bsdr && bsdv); - - if (bsdr->bsd_version != bsdv->bsd_version || - bsdr->bsd_type != bsdv->bsd_type || - bsdr->bsd_svc != bsdv->bsd_svc) { - CERROR("bulk security descriptor mismatch: " - "(%u,%u,%u) != (%u,%u,%u)\n", - bsdr->bsd_version, bsdr->bsd_type, bsdr->bsd_svc, - bsdv->bsd_version, bsdv->bsd_type, bsdv->bsd_svc); - return -EPROTO; - } - - LASSERT(bsdv->bsd_svc == SPTLRPC_BULK_SVC_NULL || - bsdv->bsd_svc == SPTLRPC_BULK_SVC_INTG || - bsdv->bsd_svc == SPTLRPC_BULK_SVC_PRIV); - - /* - * in privacy mode if return success, make sure bd_nob_transferred - * is the actual size of the clear text, otherwise upper layer - * may be surprised. - */ - if (req->rq_bulk_write) { - if (bsdv->bsd_flags & BSD_FL_ERR) { - CERROR("server reported bulk i/o failure\n"); - return -EIO; - } - - if (bsdv->bsd_svc == SPTLRPC_BULK_SVC_PRIV) - desc->bd_nob_transferred = desc->bd_nob; - } else { - /* - * bulk read, upon return success, bd_nob_transferred is - * the size of plain text actually received. - */ - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - LASSERT(gctx->gc_mechctx); - - if (bsdv->bsd_svc == SPTLRPC_BULK_SVC_INTG) { - int i, nob; - - /* fix the actual data size */ - for (i = 0, nob = 0; i < desc->bd_iov_count; i++) { - if (desc->bd_iov[i].kiov_len + nob > - desc->bd_nob_transferred) { - desc->bd_iov[i].kiov_len = - desc->bd_nob_transferred - nob; - } - nob += desc->bd_iov[i].kiov_len; - } - - token.data = bsdv->bsd_data; - token.len = lustre_msg_buflen(vmsg, voff) - - sizeof(*bsdv); - - maj = lgss_verify_mic(gctx->gc_mechctx, 0, NULL, - desc->bd_iov_count, desc->bd_iov, - &token); - if (maj != GSS_S_COMPLETE) { - CERROR("failed to verify bulk read: %x\n", maj); - return -EACCES; - } - } else if (bsdv->bsd_svc == SPTLRPC_BULK_SVC_PRIV) { - desc->bd_nob = bsdv->bsd_nob; - if (desc->bd_nob == 0) - return 0; - - token.data = bsdv->bsd_data; - token.len = lustre_msg_buflen(vmsg, voff) - - sizeof(*bsdr); - - maj = lgss_unwrap_bulk(gctx->gc_mechctx, desc, - &token, 1); - if (maj != GSS_S_COMPLETE) { - CERROR("failed to decrypt bulk read: %x\n", - maj); - return -EACCES; - } - - desc->bd_nob_transferred = desc->bd_nob; - } - } - - return 0; -} - -static int gss_prep_bulk(struct ptlrpc_bulk_desc *desc, - struct gss_ctx *mechctx) -{ - int rc; - - if (desc->bd_iov_count == 0) - return 0; - - rc = sptlrpc_enc_pool_get_pages(desc); - if (rc) - return rc; - - if (lgss_prep_bulk(mechctx, desc) != GSS_S_COMPLETE) - return -EACCES; - - return 0; -} - -int gss_cli_prep_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - int rc; - - LASSERT(req->rq_cli_ctx); - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_read); - - if (SPTLRPC_FLVR_BULK_SVC(req->rq_flvr.sf_rpc) != SPTLRPC_BULK_SVC_PRIV) - return 0; - - rc = gss_prep_bulk(desc, ctx2gctx(req->rq_cli_ctx)->gc_mechctx); - if (rc) - CERROR("bulk read: failed to prepare encryption " - "pages: %d\n", rc); - - return rc; -} - -int gss_svc_prep_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - struct gss_svc_reqctx *grctx; - struct ptlrpc_bulk_sec_desc *bsd; - int rc; - - LASSERT(req->rq_svc_ctx); - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_write); - - grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - LASSERT(grctx->src_reqbsd); - LASSERT(grctx->src_repbsd); - LASSERT(grctx->src_ctx); - LASSERT(grctx->src_ctx->gsc_mechctx); - - bsd = grctx->src_reqbsd; - if (bsd->bsd_svc != SPTLRPC_BULK_SVC_PRIV) - return 0; - - rc = gss_prep_bulk(desc, grctx->src_ctx->gsc_mechctx); - if (rc) - CERROR("bulk write: failed to prepare encryption " - "pages: %d\n", rc); - - return rc; -} - -int gss_svc_unwrap_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - struct gss_svc_reqctx *grctx; - struct ptlrpc_bulk_sec_desc *bsdr, *bsdv; - rawobj_t token; - __u32 maj; - - LASSERT(req->rq_svc_ctx); - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_write); - - grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - - LASSERT(grctx->src_reqbsd); - LASSERT(grctx->src_repbsd); - LASSERT(grctx->src_ctx); - LASSERT(grctx->src_ctx->gsc_mechctx); - - bsdr = grctx->src_reqbsd; - bsdv = grctx->src_repbsd; - - /* bsdr has been sanity checked during unpacking */ - bsdv->bsd_version = 0; - bsdv->bsd_type = SPTLRPC_BULK_DEFAULT; - bsdv->bsd_svc = bsdr->bsd_svc; - bsdv->bsd_flags = 0; - - switch (bsdv->bsd_svc) { - case SPTLRPC_BULK_SVC_INTG: - token.data = bsdr->bsd_data; - token.len = grctx->src_reqbsd_size - sizeof(*bsdr); - - maj = lgss_verify_mic(grctx->src_ctx->gsc_mechctx, 0, NULL, - desc->bd_iov_count, desc->bd_iov, &token); - if (maj != GSS_S_COMPLETE) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("failed to verify bulk signature: %x\n", maj); - return -EACCES; - } - break; - case SPTLRPC_BULK_SVC_PRIV: - if (bsdr->bsd_nob != desc->bd_nob) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("prepared nob %d doesn't match the actual " - "nob %d\n", desc->bd_nob, bsdr->bsd_nob); - return -EPROTO; - } - - if (desc->bd_iov_count == 0) { - LASSERT(desc->bd_nob == 0); - break; - } - - token.data = bsdr->bsd_data; - token.len = grctx->src_reqbsd_size - sizeof(*bsdr); - - maj = lgss_unwrap_bulk(grctx->src_ctx->gsc_mechctx, - desc, &token, 0); - if (maj != GSS_S_COMPLETE) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("failed decrypt bulk data: %x\n", maj); - return -EACCES; - } - break; - } - - return 0; -} - -int gss_svc_wrap_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc) -{ - struct gss_svc_reqctx *grctx; - struct ptlrpc_bulk_sec_desc *bsdr, *bsdv; - rawobj_t token; - __u32 maj; - int rc; - - LASSERT(req->rq_svc_ctx); - LASSERT(req->rq_pack_bulk); - LASSERT(req->rq_bulk_read); - - grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - - LASSERT(grctx->src_reqbsd); - LASSERT(grctx->src_repbsd); - LASSERT(grctx->src_ctx); - LASSERT(grctx->src_ctx->gsc_mechctx); - - bsdr = grctx->src_reqbsd; - bsdv = grctx->src_repbsd; - - /* bsdr has been sanity checked during unpacking */ - bsdv->bsd_version = 0; - bsdv->bsd_type = SPTLRPC_BULK_DEFAULT; - bsdv->bsd_svc = bsdr->bsd_svc; - bsdv->bsd_flags = 0; - - switch (bsdv->bsd_svc) { - case SPTLRPC_BULK_SVC_INTG: - token.data = bsdv->bsd_data; - token.len = grctx->src_repbsd_size - sizeof(*bsdv); - - maj = lgss_get_mic(grctx->src_ctx->gsc_mechctx, 0, NULL, - desc->bd_iov_count, desc->bd_iov, &token); - if (maj != GSS_S_COMPLETE) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("failed to sign bulk data: %x\n", maj); - return -EACCES; - } - break; - case SPTLRPC_BULK_SVC_PRIV: - bsdv->bsd_nob = desc->bd_nob; - - if (desc->bd_iov_count == 0) { - LASSERT(desc->bd_nob == 0); - break; - } - - rc = sptlrpc_enc_pool_get_pages(desc); - if (rc) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("bulk read: failed to allocate encryption " - "pages: %d\n", rc); - return rc; - } - - token.data = bsdv->bsd_data; - token.len = grctx->src_repbsd_size - sizeof(*bsdv); - - maj = lgss_wrap_bulk(grctx->src_ctx->gsc_mechctx, - desc, &token, 1); - if (maj != GSS_S_COMPLETE) { - bsdv->bsd_flags |= BSD_FL_ERR; - CERROR("failed to encrypt bulk data: %x\n", maj); - return -EACCES; - } - break; - } - - return 0; -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_cli_upcall.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_cli_upcall.c deleted file mode 100644 index c279edf5b2a5..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_cli_upcall.c +++ /dev/null @@ -1,446 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/ptlrpc/gss/gss_cli_upcall.c - * - * Author: Eric Mei - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -/********************************************** - * gss context init/fini helper * - **********************************************/ - -static -int ctx_init_pack_request(struct obd_import *imp, - struct ptlrpc_request *req, - int lustre_srv, - uid_t uid, gid_t gid, - long token_size, - char __user *token) -{ - struct lustre_msg *msg = req->rq_reqbuf; - struct gss_sec *gsec; - struct gss_header *ghdr; - struct ptlrpc_user_desc *pud; - __u32 *p, size, offset = 2; - rawobj_t obj; - - LASSERT(msg->lm_bufcount <= 4); - LASSERT(req->rq_cli_ctx); - LASSERT(req->rq_cli_ctx->cc_sec); - - /* gss hdr */ - ghdr = lustre_msg_buf(msg, 0, sizeof(*ghdr)); - ghdr->gh_version = PTLRPC_GSS_VERSION; - ghdr->gh_sp = (__u8) imp->imp_sec->ps_part; - ghdr->gh_flags = 0; - ghdr->gh_proc = PTLRPC_GSS_PROC_INIT; - ghdr->gh_seq = 0; - ghdr->gh_svc = SPTLRPC_SVC_NULL; - ghdr->gh_handle.len = 0; - - /* fix the user desc */ - if (req->rq_pack_udesc) { - ghdr->gh_flags |= LUSTRE_GSS_PACK_USER; - - pud = lustre_msg_buf(msg, offset, sizeof(*pud)); - LASSERT(pud); - pud->pud_uid = pud->pud_fsuid = uid; - pud->pud_gid = pud->pud_fsgid = gid; - pud->pud_cap = 0; - pud->pud_ngroups = 0; - offset++; - } - - /* security payload */ - p = lustre_msg_buf(msg, offset, 0); - size = msg->lm_buflens[offset]; - LASSERT(p); - - /* 1. lustre svc type */ - LASSERT(size > 4); - *p++ = cpu_to_le32(lustre_srv); - size -= 4; - - /* 2. target uuid */ - obj.len = strlen(imp->imp_obd->u.cli.cl_target_uuid.uuid) + 1; - obj.data = imp->imp_obd->u.cli.cl_target_uuid.uuid; - if (rawobj_serialize(&obj, &p, &size)) - LBUG(); - - /* 3. reverse context handle. actually only needed by root user, - * but we send it anyway. */ - gsec = sec2gsec(req->rq_cli_ctx->cc_sec); - obj.len = sizeof(gsec->gs_rvs_hdl); - obj.data = (__u8 *) &gsec->gs_rvs_hdl; - if (rawobj_serialize(&obj, &p, &size)) - LBUG(); - - /* 4. now the token */ - LASSERT(size >= (sizeof(__u32) + token_size)); - *p++ = cpu_to_le32(((__u32) token_size)); - if (copy_from_user(p, token, token_size)) { - CERROR("can't copy token\n"); - return -EFAULT; - } - size -= sizeof(__u32) + cfs_size_round4(token_size); - - req->rq_reqdata_len = lustre_shrink_msg(req->rq_reqbuf, offset, - msg->lm_buflens[offset] - size, 0); - return 0; -} - -static -int ctx_init_parse_reply(struct lustre_msg *msg, int swabbed, - char __user *outbuf, long outlen) -{ - struct gss_rep_header *ghdr; - __u32 obj_len, round_len; - __u32 status, effective = 0; - - if (msg->lm_bufcount != 3) { - CERROR("unexpected bufcount %u\n", msg->lm_bufcount); - return -EPROTO; - } - - ghdr = (struct gss_rep_header *) gss_swab_header(msg, 0, swabbed); - if (ghdr == NULL) { - CERROR("unable to extract gss reply header\n"); - return -EPROTO; - } - - if (ghdr->gh_version != PTLRPC_GSS_VERSION) { - CERROR("invalid gss version %u\n", ghdr->gh_version); - return -EPROTO; - } - - if (outlen < (4 + 2) * 4 + cfs_size_round4(ghdr->gh_handle.len) + - cfs_size_round4(msg->lm_buflens[2])) { - CERROR("output buffer size %ld too small\n", outlen); - return -EFAULT; - } - - status = 0; - effective = 0; - - if (copy_to_user(outbuf, &status, 4)) - return -EFAULT; - outbuf += 4; - if (copy_to_user(outbuf, &ghdr->gh_major, 4)) - return -EFAULT; - outbuf += 4; - if (copy_to_user(outbuf, &ghdr->gh_minor, 4)) - return -EFAULT; - outbuf += 4; - if (copy_to_user(outbuf, &ghdr->gh_seqwin, 4)) - return -EFAULT; - outbuf += 4; - effective += 4 * 4; - - /* handle */ - obj_len = ghdr->gh_handle.len; - round_len = (obj_len + 3) & ~ 3; - if (copy_to_user(outbuf, &obj_len, 4)) - return -EFAULT; - outbuf += 4; - if (copy_to_user(outbuf, (char *) ghdr->gh_handle.data, round_len)) - return -EFAULT; - outbuf += round_len; - effective += 4 + round_len; - - /* out token */ - obj_len = msg->lm_buflens[2]; - round_len = (obj_len + 3) & ~ 3; - if (copy_to_user(outbuf, &obj_len, 4)) - return -EFAULT; - outbuf += 4; - if (copy_to_user(outbuf, lustre_msg_buf(msg, 2, 0), round_len)) - return -EFAULT; - outbuf += round_len; - effective += 4 + round_len; - - return effective; -} - -/* XXX move to where lgssd could see */ -struct lgssd_ioctl_param { - int version; /* in */ - int secid; /* in */ - char *uuid; /* in */ - int lustre_svc; /* in */ - uid_t uid; /* in */ - gid_t gid; /* in */ - long send_token_size;/* in */ - char *send_token; /* in */ - long reply_buf_size; /* in */ - char *reply_buf; /* in */ - long status; /* out */ - long reply_length; /* out */ -}; - -int gss_do_ctx_init_rpc(__user char *buffer, unsigned long count) -{ - struct obd_import *imp; - struct ptlrpc_request *req; - struct lgssd_ioctl_param param; - struct obd_device *obd; - char obdname[64]; - long lsize; - int rc; - - if (count != sizeof(param)) { - CERROR("ioctl size %lu, expect %lu, please check lgss_keyring " - "version\n", count, (unsigned long) sizeof(param)); - return -EINVAL; - } - if (copy_from_user(¶m, buffer, sizeof(param))) { - CERROR("failed copy data from lgssd\n"); - return -EFAULT; - } - - if (param.version != GSSD_INTERFACE_VERSION) { - CERROR("gssd interface version %d (expect %d)\n", - param.version, GSSD_INTERFACE_VERSION); - return -EINVAL; - } - - /* take name */ - if (strncpy_from_user(obdname, param.uuid, sizeof(obdname)) <= 0) { - CERROR("Invalid obdname pointer\n"); - return -EFAULT; - } - - obd = class_name2obd(obdname); - if (!obd) { - CERROR("no such obd %s\n", obdname); - return -EINVAL; - } - - if (unlikely(!obd->obd_set_up)) { - CERROR("obd %s not setup\n", obdname); - return -EINVAL; - } - - spin_lock(&obd->obd_dev_lock); - if (obd->obd_stopping) { - CERROR("obd %s has stopped\n", obdname); - spin_unlock(&obd->obd_dev_lock); - return -EINVAL; - } - - if (strcmp(obd->obd_type->typ_name, LUSTRE_MDC_NAME) && - strcmp(obd->obd_type->typ_name, LUSTRE_OSC_NAME) && - strcmp(obd->obd_type->typ_name, LUSTRE_MGC_NAME)) { - CERROR("obd %s is not a client device\n", obdname); - spin_unlock(&obd->obd_dev_lock); - return -EINVAL; - } - spin_unlock(&obd->obd_dev_lock); - - down_read(&obd->u.cli.cl_sem); - if (obd->u.cli.cl_import == NULL) { - CERROR("obd %s: import has gone\n", obd->obd_name); - up_read(&obd->u.cli.cl_sem); - return -EINVAL; - } - imp = class_import_get(obd->u.cli.cl_import); - up_read(&obd->u.cli.cl_sem); - - if (imp->imp_deactive) { - CERROR("import has been deactivated\n"); - class_import_put(imp); - return -EINVAL; - } - - req = ptlrpc_request_alloc_pack(imp, &RQF_SEC_CTX, LUSTRE_OBD_VERSION, - SEC_CTX_INIT); - if (req == NULL) { - param.status = -ENOMEM; - goto out_copy; - } - - if (req->rq_cli_ctx->cc_sec->ps_id != param.secid) { - CWARN("original secid %d, now has changed to %d, " - "cancel this negotiation\n", param.secid, - req->rq_cli_ctx->cc_sec->ps_id); - param.status = -EINVAL; - goto out_copy; - } - - /* get token */ - rc = ctx_init_pack_request(imp, req, - param.lustre_svc, - param.uid, param.gid, - param.send_token_size, - param.send_token); - if (rc) { - param.status = rc; - goto out_copy; - } - - ptlrpc_request_set_replen(req); - - rc = ptlrpc_queue_wait(req); - if (rc) { - /* If any _real_ denial be made, we expect server return - * -EACCES reply or return success but indicate gss error - * inside reply message. All other errors are treated as - * timeout, caller might try the negotiation repeatedly, - * leave recovery decisions to general ptlrpc layer. - * - * FIXME maybe some other error code shouldn't be treated - * as timeout. */ - param.status = rc; - if (rc != -EACCES) - param.status = -ETIMEDOUT; - goto out_copy; - } - - LASSERT(req->rq_repdata); - lsize = ctx_init_parse_reply(req->rq_repdata, - ptlrpc_rep_need_swab(req), - param.reply_buf, param.reply_buf_size); - if (lsize < 0) { - param.status = (int) lsize; - goto out_copy; - } - - param.status = 0; - param.reply_length = lsize; - -out_copy: - if (copy_to_user(buffer, ¶m, sizeof(param))) - rc = -EFAULT; - else - rc = 0; - - class_import_put(imp); - ptlrpc_req_finished(req); - return rc; -} - -int gss_do_ctx_fini_rpc(struct gss_cli_ctx *gctx) -{ - struct ptlrpc_cli_ctx *ctx = &gctx->gc_base; - struct obd_import *imp = ctx->cc_sec->ps_import; - struct ptlrpc_request *req; - struct ptlrpc_user_desc *pud; - int rc; - - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - if (cli_ctx_is_error(ctx) || !cli_ctx_is_uptodate(ctx)) { - CDEBUG(D_SEC, "ctx %p(%u->%s) not uptodate, " - "don't send destroy rpc\n", ctx, - ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec)); - return 0; - } - - might_sleep(); - - CWARN("%s ctx %p idx "LPX64" (%u->%s)\n", - sec_is_reverse(ctx->cc_sec) ? - "server finishing reverse" : "client finishing forward", - ctx, gss_handle_to_u64(&gctx->gc_handle), - ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec)); - - gctx->gc_proc = PTLRPC_GSS_PROC_DESTROY; - - req = ptlrpc_request_alloc(imp, &RQF_SEC_CTX); - if (req == NULL) { - CWARN("ctx %p(%u): fail to prepare rpc, destroy locally\n", - ctx, ctx->cc_vcred.vc_uid); - GOTO(out, rc = -ENOMEM); - } - - rc = ptlrpc_request_bufs_pack(req, LUSTRE_OBD_VERSION, SEC_CTX_FINI, - NULL, ctx); - if (rc) { - ptlrpc_request_free(req); - GOTO(out_ref, rc); - } - - /* fix the user desc */ - if (req->rq_pack_udesc) { - /* we rely the fact that this request is in AUTH mode, - * and user_desc at offset 2. */ - pud = lustre_msg_buf(req->rq_reqbuf, 2, sizeof(*pud)); - LASSERT(pud); - pud->pud_uid = pud->pud_fsuid = ctx->cc_vcred.vc_uid; - pud->pud_gid = pud->pud_fsgid = ctx->cc_vcred.vc_gid; - pud->pud_cap = 0; - pud->pud_ngroups = 0; - } - - req->rq_phase = RQ_PHASE_RPC; - rc = ptl_send_rpc(req, 1); - if (rc) - CWARN("ctx %p(%u->%s): rpc error %d, destroy locally\n", ctx, - ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec), rc); - -out_ref: - ptlrpc_req_finished(req); -out: - return rc; -} - -int __init gss_init_cli_upcall(void) -{ - return 0; -} - -void __exit gss_exit_cli_upcall(void) -{ -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_err.h b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_err.h deleted file mode 100644 index 37ec101e14e5..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_err.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Author: Eric Mei - */ - -/* - * Adapted from MIT Kerberos 5-1.2.1 include/gssapi/gssapi.h - * - * Copyright (c) 2002 The Regents of the University of Michigan. - * All rights reserved. - * - * Andy Adamson - */ - -/* - * Copyright 1993 by OpenVision Technologies, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appears in all copies and - * that both that copyright notice and this permission notice appear in - * supporting documentation, and that the name of OpenVision not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. OpenVision makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - * - * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF - * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef __PTLRPC_GSS_GSS_ERR_H_ -#define __PTLRPC_GSS_GSS_ERR_H_ - -typedef unsigned int OM_uint32; - -/* - * Flag bits for context-level services. - */ -#define GSS_C_DELEG_FLAG (1) -#define GSS_C_MUTUAL_FLAG (2) -#define GSS_C_REPLAY_FLAG (4) -#define GSS_C_SEQUENCE_FLAG (8) -#define GSS_C_CONF_FLAG (16) -#define GSS_C_INTEG_FLAG (32) -#define GSS_C_ANON_FLAG (64) -#define GSS_C_PROT_READY_FLAG (128) -#define GSS_C_TRANS_FLAG (256) - -/* - * Credential usage options - */ -#define GSS_C_BOTH (0) -#define GSS_C_INITIATE (1) -#define GSS_C_ACCEPT (2) - -/* - * Status code types for gss_display_status - */ -#define GSS_C_GSS_CODE (1) -#define GSS_C_MECH_CODE (2) - - -/* - * Define the default Quality of Protection for per-message services. Note - * that an implementation that offers multiple levels of QOP may either reserve - * a value (for example zero, as assumed here) to mean "default protection", or - * alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit - * QOP value. However a value of 0 should always be interpreted by a GSSAPI - * implementation as a request for the default protection level. - */ -#define GSS_C_QOP_DEFAULT (0) - -/* - * Expiration time of 2^32-1 seconds means infinite lifetime for a - * credential or security context - */ -#define GSS_C_INDEFINITE ((OM_uint32) 0xfffffffful) - - -/* Major status codes */ - -#define GSS_S_COMPLETE (0) - -/* - * Some "helper" definitions to make the status code macros obvious. - */ -#define GSS_C_CALLING_ERROR_OFFSET (24) -#define GSS_C_ROUTINE_ERROR_OFFSET (16) -#define GSS_C_SUPPLEMENTARY_OFFSET (0) -#define GSS_C_CALLING_ERROR_MASK ((OM_uint32) 0377ul) -#define GSS_C_ROUTINE_ERROR_MASK ((OM_uint32) 0377ul) -#define GSS_C_SUPPLEMENTARY_MASK ((OM_uint32) 0177777ul) - -/* - * The macros that test status codes for error conditions. Note that the - * GSS_ERROR() macro has changed slightly from the V1 GSSAPI so that it now - * evaluates its argument only once. - */ -#define GSS_CALLING_ERROR(x) \ - ((x) & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET)) -#define GSS_ROUTINE_ERROR(x) \ - ((x) & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)) -#define GSS_SUPPLEMENTARY_INFO(x) \ - ((x) & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET)) -#define GSS_ERROR(x) \ - ((x) & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \ - (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))) - -/* - * Now the actual status code definitions - */ - -/* - * Calling errors: - */ -#define GSS_S_CALL_INACCESSIBLE_READ \ - (((OM_uint32) 1ul) << GSS_C_CALLING_ERROR_OFFSET) -#define GSS_S_CALL_INACCESSIBLE_WRITE \ - (((OM_uint32) 2ul) << GSS_C_CALLING_ERROR_OFFSET) -#define GSS_S_CALL_BAD_STRUCTURE \ - (((OM_uint32) 3ul) << GSS_C_CALLING_ERROR_OFFSET) - -/* - * Routine errors: - */ -#define GSS_S_BAD_MECH \ - (((OM_uint32) 1ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_NAME \ - (((OM_uint32) 2ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_NAMETYPE \ - (((OM_uint32) 3ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_BINDINGS \ - (((OM_uint32) 4ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_STATUS \ - (((OM_uint32) 5ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_SIG \ - (((OM_uint32) 6ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_NO_CRED \ - (((OM_uint32) 7ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_NO_CONTEXT \ - (((OM_uint32) 8ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_DEFECTIVE_TOKEN \ - (((OM_uint32) 9ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_DEFECTIVE_CREDENTIAL \ - (((OM_uint32) 10ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_CREDENTIALS_EXPIRED \ - (((OM_uint32) 11ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_CONTEXT_EXPIRED \ - (((OM_uint32) 12ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_FAILURE \ - (((OM_uint32) 13ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_BAD_QOP \ - (((OM_uint32) 14ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_UNAUTHORIZED \ - (((OM_uint32) 15ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_UNAVAILABLE \ - (((OM_uint32) 16ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_DUPLICATE_ELEMENT \ - (((OM_uint32) 17ul) << GSS_C_ROUTINE_ERROR_OFFSET) -#define GSS_S_NAME_NOT_MN \ - (((OM_uint32) 18ul) << GSS_C_ROUTINE_ERROR_OFFSET) - -/* - * Supplementary info bits: - */ -#define GSS_S_CONTINUE_NEEDED (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 0)) -#define GSS_S_DUPLICATE_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 1)) -#define GSS_S_OLD_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 2)) -#define GSS_S_UNSEQ_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 3)) -#define GSS_S_GAP_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 4)) - -/* XXXX these are not part of the GSSAPI C bindings! (but should be) */ - -#define GSS_CALLING_ERROR_FIELD(x) \ - (((x) >> GSS_C_CALLING_ERROR_OFFSET) & GSS_C_CALLING_ERROR_MASK) -#define GSS_ROUTINE_ERROR_FIELD(x) \ - (((x) >> GSS_C_ROUTINE_ERROR_OFFSET) & GSS_C_ROUTINE_ERROR_MASK) -#define GSS_SUPPLEMENTARY_INFO_FIELD(x) \ - (((x) >> GSS_C_SUPPLEMENTARY_OFFSET) & GSS_C_SUPPLEMENTARY_MASK) - -/* XXXX This is a necessary evil until the spec is fixed */ -#define GSS_S_CRED_UNAVAIL GSS_S_FAILURE - -#endif /* __PTLRPC_GSS_GSS_ERR_H_ */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_generic_token.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_generic_token.c deleted file mode 100644 index 8dc5c724958d..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_generic_token.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2011, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * linux/net/sunrpc/gss_generic_token.c - * - * Adapted from MIT Kerberos 5-1.2.1 lib/gssapi/generic/util_token.c - * - * Copyright (c) 2000 The Regents of the University of Michigan. - * All rights reserved. - * - * Andy Adamson - */ - -/* - * Copyright 1993 by OpenVision Technologies, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appears in all copies and - * that both that copyright notice and this permission notice appear in - * supporting documentation, and that the name of OpenVision not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. OpenVision makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - * - * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF - * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" -#include "gss_krb5.h" -#include "gss_asn1.h" - - -/* TWRITE_STR from gssapiP_generic.h */ -#define TWRITE_STR(ptr, str, len) \ - memcpy((ptr), (char *) (str), (len)); \ - (ptr) += (len); - -/* XXXX this code currently makes the assumption that a mech oid will - never be longer than 127 bytes. This assumption is not inherent in - the interfaces, so the code can be fixed if the OSI namespace - balloons unexpectedly. */ - -/* Each token looks like this: - -0x60 tag for APPLICATION 0, SEQUENCE - (constructed, definite-length) - possible multiple bytes, need to parse/generate - 0x06 tag for OBJECT IDENTIFIER - compile-time constant string (assume 1 byte) - compile-time constant string - the ANY containing the application token - bytes 0,1 are the token type - bytes 2,n are the token data - -For the purposes of this abstraction, the token "header" consists of -the sequence tag and length octets, the mech OID DER encoding, and the -first two inner bytes, which indicate the token type. The token -"body" consists of everything else. - -*/ - -static -int der_length_size(int length) -{ - if (length < (1 << 7)) - return 1; - else if (length < (1 << 8)) - return 2; -#if (SIZEOF_INT == 2) - else - return 3; -#else - else if (length < (1 << 16)) - return 3; - else if (length < (1 << 24)) - return 4; - else - return 5; -#endif -} - -static -void der_write_length(unsigned char **buf, int length) -{ - if (length < (1 << 7)) { - *(*buf)++ = (unsigned char) length; - } else { - *(*buf)++ = (unsigned char) (der_length_size(length) + 127); -#if (SIZEOF_INT > 2) - if (length >= (1 << 24)) - *(*buf)++ = (unsigned char) (length >> 24); - if (length >= (1 << 16)) - *(*buf)++ = (unsigned char) ((length >> 16) & 0xff); -#endif - if (length >= (1 << 8)) - *(*buf)++ = (unsigned char) ((length >> 8) & 0xff); - *(*buf)++ = (unsigned char) (length & 0xff); - } -} - -/* - * returns decoded length, or < 0 on failure. Advances buf and - * decrements bufsize - */ -static -int der_read_length(unsigned char **buf, int *bufsize) -{ - unsigned char sf; - int ret; - - if (*bufsize < 1) - return -1; - sf = *(*buf)++; - (*bufsize)--; - if (sf & 0x80) { - sf &= 0x7f; - if (((*bufsize) - 1) < sf) - return -1; - if (sf > SIZEOF_INT) - return -1; - ret = 0; - for (; sf; sf--) { - ret = (ret << 8) + (*(*buf)++); - (*bufsize)--; - } - } else { - ret = sf; - } - - return ret; -} - -/* - * returns the length of a token, given the mech oid and the body size - */ -int g_token_size(rawobj_t *mech, unsigned int body_size) -{ - /* set body_size to sequence contents size */ - body_size += 4 + (int) mech->len; /* NEED overflow check */ - return (1 + der_length_size(body_size) + body_size); -} - -/* - * fills in a buffer with the token header. The buffer is assumed to - * be the right size. buf is advanced past the token header - */ -void g_make_token_header(rawobj_t *mech, int body_size, unsigned char **buf) -{ - *(*buf)++ = 0x60; - der_write_length(buf, 4 + mech->len + body_size); - *(*buf)++ = 0x06; - *(*buf)++ = (unsigned char) mech->len; - TWRITE_STR(*buf, mech->data, ((int) mech->len)); -} - -/* - * Given a buffer containing a token, reads and verifies the token, - * leaving buf advanced past the token header, and setting body_size - * to the number of remaining bytes. Returns 0 on success, - * G_BAD_TOK_HEADER for a variety of errors, and G_WRONG_MECH if the - * mechanism in the token does not match the mech argument. buf and - * *body_size are left unmodified on error. - */ -__u32 g_verify_token_header(rawobj_t *mech, int *body_size, - unsigned char **buf_in, int toksize) -{ - unsigned char *buf = *buf_in; - int seqsize; - rawobj_t toid; - int ret = 0; - - toksize -= 1; - if (0 > toksize) - return (G_BAD_TOK_HEADER); - if (*buf++ != 0x60) - return (G_BAD_TOK_HEADER); - - seqsize = der_read_length(&buf, &toksize); - if (seqsize < 0) - return(G_BAD_TOK_HEADER); - - if (seqsize != toksize) - return (G_BAD_TOK_HEADER); - - toksize -= 1; - if (0 > toksize) - return (G_BAD_TOK_HEADER); - if (*buf++ != 0x06) - return (G_BAD_TOK_HEADER); - - toksize -= 1; - if (0 > toksize) - return (G_BAD_TOK_HEADER); - toid.len = *buf++; - - toksize -= toid.len; - if (0 > toksize) - return (G_BAD_TOK_HEADER); - toid.data = buf; - buf += toid.len; - - if (!g_OID_equal(&toid, mech)) - ret = G_WRONG_MECH; - - /* G_WRONG_MECH is not returned immediately because it's more - * important to return G_BAD_TOK_HEADER if the token header is - * in fact bad - */ - toksize -= 2; - if (0 > toksize) - return (G_BAD_TOK_HEADER); - - if (ret) - return (ret); - - if (!ret) { - *buf_in = buf; - *body_size = toksize; - } - - return (ret); -} - -/* - * Given a buffer containing a token, returns a copy of the mech oid in - * the parameter mech. - */ -__u32 g_get_mech_oid(rawobj_t *mech, rawobj_t *in_buf) -{ - unsigned char *buf = in_buf->data; - int len = in_buf->len; - int ret = 0; - int seqsize; - - len -= 1; - if (0 > len) - return (G_BAD_TOK_HEADER); - if (*buf++ != 0x60) - return (G_BAD_TOK_HEADER); - - seqsize = der_read_length(&buf, &len); - if (seqsize < 0) - return (G_BAD_TOK_HEADER); - - len -= 1; - if (0 > len) - return (G_BAD_TOK_HEADER); - if (*buf++ != 0x06) - return (G_BAD_TOK_HEADER); - - len -= 1; - if (0 > len) - return (G_BAD_TOK_HEADER); - mech->len = *buf++; - - len -= mech->len; - if (0 > len) - return (G_BAD_TOK_HEADER); - OBD_ALLOC_LARGE(mech->data, mech->len); - if (!mech->data) - return (G_BUFFER_ALLOC); - memcpy(mech->data, buf, mech->len); - - return ret; -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_internal.h b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_internal.h deleted file mode 100644 index cbfc47cb3f7b..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_internal.h +++ /dev/null @@ -1,526 +0,0 @@ -/* - * Modified from NFSv4 project for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -#ifndef __PTLRPC_GSS_GSS_INTERNAL_H_ -#define __PTLRPC_GSS_GSS_INTERNAL_H_ - -#include - -/* - * rawobj stuff - */ -typedef struct netobj_s { - __u32 len; - __u8 data[0]; -} netobj_t; - -#define NETOBJ_EMPTY ((netobj_t) { 0 }) - -typedef struct rawobj_s { - __u32 len; - __u8 *data; -} rawobj_t; - -#define RAWOBJ_EMPTY ((rawobj_t) { 0, NULL }) - -typedef struct rawobj_buf_s { - __u32 dataoff; - __u32 datalen; - __u32 buflen; - __u8 *buf; -} rawobj_buf_t; - -int rawobj_empty(rawobj_t *obj); -int rawobj_alloc(rawobj_t *obj, char *buf, int len); -void rawobj_free(rawobj_t *obj); -int rawobj_equal(rawobj_t *a, rawobj_t *b); -int rawobj_dup(rawobj_t *dest, rawobj_t *src); -int rawobj_serialize(rawobj_t *obj, __u32 **buf, __u32 *buflen); -int rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen); -int rawobj_extract_alloc(rawobj_t *obj, __u32 **buf, __u32 *buflen); -int rawobj_extract_local(rawobj_t *obj, __u32 **buf, __u32 *buflen); -int rawobj_extract_local_alloc(rawobj_t *obj, __u32 **buf, __u32 *buflen); -int rawobj_from_netobj(rawobj_t *rawobj, netobj_t *netobj); -int rawobj_from_netobj_alloc(rawobj_t *obj, netobj_t *netobj); - -int buffer_extract_bytes(const void **buf, __u32 *buflen, - void *res, __u32 reslen); - -/* - * several timeout values. client refresh upcall timeout we using - * default in pipefs implemnetation. - */ -#define __TIMEOUT_DELTA (10) - -#define GSS_SECINIT_RPC_TIMEOUT \ - (obd_timeout < __TIMEOUT_DELTA ? \ - __TIMEOUT_DELTA : obd_timeout - __TIMEOUT_DELTA) - -#define GSS_SECFINI_RPC_TIMEOUT (__TIMEOUT_DELTA) -#define GSS_SECSVC_UPCALL_TIMEOUT (GSS_SECINIT_RPC_TIMEOUT) - -/* - * default gc interval - */ -#define GSS_GC_INTERVAL (60 * 60) /* 60 minutes */ - -static inline -unsigned long gss_round_ctx_expiry(unsigned long expiry, - unsigned long sec_flags) -{ - if (sec_flags & PTLRPC_SEC_FL_REVERSE) - return expiry; - - if (get_seconds() + __TIMEOUT_DELTA <= expiry) - return expiry - __TIMEOUT_DELTA; - - return expiry; -} - -/* - * Max encryption element in block cipher algorithms. - */ -#define GSS_MAX_CIPHER_BLOCK (16) - -/* - * XXX make it visible of kernel and lgssd/lsvcgssd - */ -#define GSSD_INTERFACE_VERSION (1) - -#define PTLRPC_GSS_VERSION (1) - - -enum ptlrpc_gss_proc { - PTLRPC_GSS_PROC_DATA = 0, - PTLRPC_GSS_PROC_INIT = 1, - PTLRPC_GSS_PROC_CONTINUE_INIT = 2, - PTLRPC_GSS_PROC_DESTROY = 3, - PTLRPC_GSS_PROC_ERR = 4, -}; - -enum ptlrpc_gss_tgt { - LUSTRE_GSS_TGT_MGS = 0, - LUSTRE_GSS_TGT_MDS = 1, - LUSTRE_GSS_TGT_OSS = 2, -}; - -enum ptlrpc_gss_header_flags { - LUSTRE_GSS_PACK_BULK = 1, - LUSTRE_GSS_PACK_USER = 2, -}; - -static inline -__u32 import_to_gss_svc(struct obd_import *imp) -{ - const char *name = imp->imp_obd->obd_type->typ_name; - - if (!strcmp(name, LUSTRE_MGC_NAME)) - return LUSTRE_GSS_TGT_MGS; - if (!strcmp(name, LUSTRE_MDC_NAME)) - return LUSTRE_GSS_TGT_MDS; - if (!strcmp(name, LUSTRE_OSC_NAME)) - return LUSTRE_GSS_TGT_OSS; - LBUG(); - return 0; -} - -/* - * following 3 header must have the same size and offset - */ -struct gss_header { - __u8 gh_version; /* gss version */ - __u8 gh_sp; /* sec part */ - __u16 gh_pad0; - __u32 gh_flags; /* wrap flags */ - __u32 gh_proc; /* proc */ - __u32 gh_seq; /* sequence */ - __u32 gh_svc; /* service */ - __u32 gh_pad1; - __u32 gh_pad2; - __u32 gh_pad3; - netobj_t gh_handle; /* context handle */ -}; - -struct gss_rep_header { - __u8 gh_version; - __u8 gh_sp; - __u16 gh_pad0; - __u32 gh_flags; - __u32 gh_proc; - __u32 gh_major; - __u32 gh_minor; - __u32 gh_seqwin; - __u32 gh_pad2; - __u32 gh_pad3; - netobj_t gh_handle; -}; - -struct gss_err_header { - __u8 gh_version; - __u8 gh_sp; - __u16 gh_pad0; - __u32 gh_flags; - __u32 gh_proc; - __u32 gh_major; - __u32 gh_minor; - __u32 gh_pad1; - __u32 gh_pad2; - __u32 gh_pad3; - netobj_t gh_handle; -}; - -/* - * part of wire context information send from client which be saved and - * used later by server. - */ -struct gss_wire_ctx { - __u32 gw_flags; - __u32 gw_proc; - __u32 gw_seq; - __u32 gw_svc; - rawobj_t gw_handle; -}; - -#define PTLRPC_GSS_MAX_HANDLE_SIZE (8) -#define PTLRPC_GSS_HEADER_SIZE (sizeof(struct gss_header) + \ - PTLRPC_GSS_MAX_HANDLE_SIZE) - - -static inline __u64 gss_handle_to_u64(rawobj_t *handle) -{ - if (handle->len != PTLRPC_GSS_MAX_HANDLE_SIZE) - return -1; - return *((__u64 *) handle->data); -} - -#define GSS_SEQ_WIN (2048) -#define GSS_SEQ_WIN_MAIN GSS_SEQ_WIN -#define GSS_SEQ_WIN_BACK (128) -#define GSS_SEQ_REPACK_THRESHOLD (GSS_SEQ_WIN_MAIN / 2 + \ - GSS_SEQ_WIN_MAIN / 4) - -struct gss_svc_seq_data { - spinlock_t ssd_lock; - /* - * highest sequence number seen so far, for main and back window - */ - __u32 ssd_max_main; - __u32 ssd_max_back; - /* - * main and back window - * for i such that ssd_max - GSS_SEQ_WIN < i <= ssd_max, the i-th bit - * of ssd_win is nonzero iff sequence number i has been seen already. - */ - unsigned long ssd_win_main[GSS_SEQ_WIN_MAIN/BITS_PER_LONG]; - unsigned long ssd_win_back[GSS_SEQ_WIN_BACK/BITS_PER_LONG]; -}; - -struct gss_svc_ctx { - struct gss_ctx *gsc_mechctx; - struct gss_svc_seq_data gsc_seqdata; - rawobj_t gsc_rvs_hdl; - __u32 gsc_rvs_seq; - uid_t gsc_uid; - gid_t gsc_gid; - uid_t gsc_mapped_uid; - unsigned int gsc_usr_root:1, - gsc_usr_mds:1, - gsc_usr_oss:1, - gsc_remote:1, - gsc_reverse:1; -}; - -struct gss_svc_reqctx { - struct ptlrpc_svc_ctx src_base; - /* - * context - */ - struct gss_wire_ctx src_wirectx; - struct gss_svc_ctx *src_ctx; - /* - * record place of bulk_sec_desc in request/reply buffer - */ - struct ptlrpc_bulk_sec_desc *src_reqbsd; - int src_reqbsd_size; - struct ptlrpc_bulk_sec_desc *src_repbsd; - int src_repbsd_size; - /* - * flags - */ - unsigned int src_init:1, - src_init_continue:1, - src_err_notify:1; - int src_reserve_len; -}; - -struct gss_cli_ctx { - struct ptlrpc_cli_ctx gc_base; - __u32 gc_flavor; - __u32 gc_proc; - __u32 gc_win; - atomic_t gc_seq; - rawobj_t gc_handle; - struct gss_ctx *gc_mechctx; - /* handle for the buddy svc ctx */ - rawobj_t gc_svc_handle; -}; - -struct gss_cli_ctx_keyring { - struct gss_cli_ctx gck_base; - struct key *gck_key; - struct timer_list *gck_timer; -}; - -struct gss_sec { - struct ptlrpc_sec gs_base; - struct gss_api_mech *gs_mech; - spinlock_t gs_lock; - __u64 gs_rvs_hdl; -}; - -struct gss_sec_pipefs { - struct gss_sec gsp_base; - int gsp_chash_size; /* must be 2^n */ - struct hlist_head gsp_chash[0]; -}; - -/* - * FIXME cleanup the keyring upcall mutexes - */ -#define HAVE_KEYRING_UPCALL_SERIALIZED 1 - -struct gss_sec_keyring { - struct gss_sec gsk_base; - /* - * all contexts listed here. access is protected by sec spinlock. - */ - struct hlist_head gsk_clist; - /* - * specially point to root ctx (only one at a time). access is - * protected by sec spinlock. - */ - struct ptlrpc_cli_ctx *gsk_root_ctx; - /* - * specially serialize upcalls for root context. - */ - struct mutex gsk_root_uc_lock; - -#ifdef HAVE_KEYRING_UPCALL_SERIALIZED - struct mutex gsk_uc_lock; /* serialize upcalls */ -#endif -}; - -static inline struct gss_cli_ctx *ctx2gctx(struct ptlrpc_cli_ctx *ctx) -{ - return container_of(ctx, struct gss_cli_ctx, gc_base); -} - -static inline -struct gss_cli_ctx_keyring *ctx2gctx_keyring(struct ptlrpc_cli_ctx *ctx) -{ - return container_of(ctx2gctx(ctx), - struct gss_cli_ctx_keyring, gck_base); -} - -static inline struct gss_sec *sec2gsec(struct ptlrpc_sec *sec) -{ - return container_of(sec, struct gss_sec, gs_base); -} - -static inline struct gss_sec_pipefs *sec2gsec_pipefs(struct ptlrpc_sec *sec) -{ - return container_of(sec2gsec(sec), struct gss_sec_pipefs, gsp_base); -} - -static inline struct gss_sec_keyring *sec2gsec_keyring(struct ptlrpc_sec *sec) -{ - return container_of(sec2gsec(sec), struct gss_sec_keyring, gsk_base); -} - - -#define GSS_CTX_INIT_MAX_LEN (1024) - -/* - * This only guaranteed be enough for current krb5 des-cbc-crc . We might - * adjust this when new enc type or mech added in. - */ -#define GSS_PRIVBUF_PREFIX_LEN (32) -#define GSS_PRIVBUF_SUFFIX_LEN (32) - -static inline -struct gss_svc_reqctx *gss_svc_ctx2reqctx(struct ptlrpc_svc_ctx *ctx) -{ - LASSERT(ctx); - return container_of(ctx, struct gss_svc_reqctx, src_base); -} - -static inline -struct gss_svc_ctx *gss_svc_ctx2gssctx(struct ptlrpc_svc_ctx *ctx) -{ - LASSERT(ctx); - return gss_svc_ctx2reqctx(ctx)->src_ctx; -} - -/* sec_gss.c */ -int gss_cli_ctx_match(struct ptlrpc_cli_ctx *ctx, struct vfs_cred *vcred); -int gss_cli_ctx_display(struct ptlrpc_cli_ctx *ctx, char *buf, int bufsize); -int gss_cli_ctx_sign(struct ptlrpc_cli_ctx *ctx, struct ptlrpc_request *req); -int gss_cli_ctx_verify(struct ptlrpc_cli_ctx *ctx, struct ptlrpc_request *req); -int gss_cli_ctx_seal(struct ptlrpc_cli_ctx *ctx, struct ptlrpc_request *req); -int gss_cli_ctx_unseal(struct ptlrpc_cli_ctx *ctx, struct ptlrpc_request *req); - -int gss_sec_install_rctx(struct obd_import *imp, struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx); -int gss_alloc_reqbuf(struct ptlrpc_sec *sec, struct ptlrpc_request *req, - int msgsize); -void gss_free_reqbuf(struct ptlrpc_sec *sec, struct ptlrpc_request *req); -int gss_alloc_repbuf(struct ptlrpc_sec *sec, struct ptlrpc_request *req, - int msgsize); -void gss_free_repbuf(struct ptlrpc_sec *sec, struct ptlrpc_request *req); -int gss_enlarge_reqbuf(struct ptlrpc_sec *sec, struct ptlrpc_request *req, - int segment, int newsize); - -int gss_svc_accept(struct ptlrpc_sec_policy *policy, - struct ptlrpc_request *req); -void gss_svc_invalidate_ctx(struct ptlrpc_svc_ctx *svc_ctx); -int gss_svc_alloc_rs(struct ptlrpc_request *req, int msglen); -int gss_svc_authorize(struct ptlrpc_request *req); -void gss_svc_free_rs(struct ptlrpc_reply_state *rs); -void gss_svc_free_ctx(struct ptlrpc_svc_ctx *ctx); - -int cli_ctx_expire(struct ptlrpc_cli_ctx *ctx); -int cli_ctx_check_death(struct ptlrpc_cli_ctx *ctx); - -int gss_copy_rvc_cli_ctx(struct ptlrpc_cli_ctx *cli_ctx, - struct ptlrpc_svc_ctx *svc_ctx); - -struct gss_header *gss_swab_header(struct lustre_msg *msg, int segment, - int swabbed); -netobj_t *gss_swab_netobj(struct lustre_msg *msg, int segment); - -void gss_cli_ctx_uptodate(struct gss_cli_ctx *gctx); -int gss_pack_err_notify(struct ptlrpc_request *req, __u32 major, __u32 minor); -int gss_check_seq_num(struct gss_svc_seq_data *sd, __u32 seq_num, int set); - -int gss_sec_create_common(struct gss_sec *gsec, - struct ptlrpc_sec_policy *policy, - struct obd_import *imp, - struct ptlrpc_svc_ctx *ctx, - struct sptlrpc_flavor *sf); -void gss_sec_destroy_common(struct gss_sec *gsec); -void gss_sec_kill(struct ptlrpc_sec *sec); - -int gss_cli_ctx_init_common(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_ctx_ops *ctxops, - struct vfs_cred *vcred); -int gss_cli_ctx_fini_common(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx); - -void gss_cli_ctx_flags2str(unsigned long flags, char *buf, int bufsize); - -/* gss_keyring.c */ -int __init gss_init_keyring(void); -void __exit gss_exit_keyring(void); - -/* gss_pipefs.c */ -int __init gss_init_pipefs(void); -void __exit gss_exit_pipefs(void); - -/* gss_bulk.c */ -int gss_cli_prep_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); -int gss_cli_ctx_wrap_bulk(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); -int gss_cli_ctx_unwrap_bulk(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); -int gss_svc_prep_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); -int gss_svc_unwrap_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); -int gss_svc_wrap_bulk(struct ptlrpc_request *req, - struct ptlrpc_bulk_desc *desc); - -/* gss_mech_switch.c */ -int init_kerberos_module(void); -void cleanup_kerberos_module(void); - -/* gss_generic_token.c */ -int g_token_size(rawobj_t *mech, unsigned int body_size); -void g_make_token_header(rawobj_t *mech, int body_size, unsigned char **buf); -__u32 g_verify_token_header(rawobj_t *mech, int *body_size, - unsigned char **buf_in, int toksize); - - -/* gss_cli_upcall.c */ -int gss_do_ctx_init_rpc(char *buffer, unsigned long count); -int gss_do_ctx_fini_rpc(struct gss_cli_ctx *gctx); - -int __init gss_init_cli_upcall(void); -void __exit gss_exit_cli_upcall(void); - -/* gss_svc_upcall.c */ -__u64 gss_get_next_ctx_index(void); -int gss_svc_upcall_install_rvs_ctx(struct obd_import *imp, - struct gss_sec *gsec, - struct gss_cli_ctx *gctx); -int gss_svc_upcall_expire_rvs_ctx(rawobj_t *handle); -int gss_svc_upcall_dup_handle(rawobj_t *handle, struct gss_svc_ctx *ctx); -int gss_svc_upcall_update_sequence(rawobj_t *handle, __u32 seq); -int gss_svc_upcall_handle_init(struct ptlrpc_request *req, - struct gss_svc_reqctx *grctx, - struct gss_wire_ctx *gw, - struct obd_device *target, - __u32 lustre_svc, - rawobj_t *rvs_hdl, - rawobj_t *in_token); -struct gss_svc_ctx *gss_svc_upcall_get_ctx(struct ptlrpc_request *req, - struct gss_wire_ctx *gw); -void gss_svc_upcall_put_ctx(struct gss_svc_ctx *ctx); -void gss_svc_upcall_destroy_ctx(struct gss_svc_ctx *ctx); - -int __init gss_init_svc_upcall(void); -void __exit gss_exit_svc_upcall(void); - -/* lproc_gss.c */ -void gss_stat_oos_record_cli(int behind); -void gss_stat_oos_record_svc(int phase, int replay); - -int __init gss_init_lproc(void); -void __exit gss_exit_lproc(void); - -/* gss_krb5_mech.c */ -int __init init_kerberos_module(void); -void __exit cleanup_kerberos_module(void); - - -/* debug */ -static inline -void __dbg_memdump(char *name, void *ptr, int size) -{ - char *buf, *p = (char *) ptr; - int bufsize = size * 2 + 1, i; - - OBD_ALLOC(buf, bufsize); - if (!buf) { - CDEBUG(D_ERROR, "DUMP ERROR: can't alloc %d bytes\n", bufsize); - return; - } - - for (i = 0; i < size; i++) - sprintf(&buf[i+i], "%02x", (__u8) p[i]); - buf[size + size] = '\0'; - LCONSOLE_INFO("DUMP %s@%p(%d): %s\n", name, ptr, size, buf); - OBD_FREE(buf, bufsize); -} - -#endif /* __PTLRPC_GSS_GSS_INTERNAL_H_ */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_keyring.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_keyring.c deleted file mode 100644 index 4642bbfb9273..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_keyring.c +++ /dev/null @@ -1,1409 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/ptlrpc/gss/gss_keyring.c - * - * Author: Eric Mei - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -static struct ptlrpc_sec_policy gss_policy_keyring; -static struct ptlrpc_ctx_ops gss_keyring_ctxops; -static struct key_type gss_key_type; - -static int sec_install_rctx_kr(struct ptlrpc_sec *sec, - struct ptlrpc_svc_ctx *svc_ctx); - -/* - * the timeout is only for the case that upcall child process die abnormally. - * in any other cases it should finally update kernel key. - * - * FIXME we'd better to incorporate the client & server side upcall timeouts - * into the framework of Adaptive Timeouts, but we need to figure out how to - * make sure that kernel knows the upcall processes is in-progress or died - * unexpectedly. - */ -#define KEYRING_UPCALL_TIMEOUT (obd_timeout + obd_timeout) - -/**************************************** - * internal helpers * - ****************************************/ - -#define DUMP_PROCESS_KEYRINGS(tsk) \ -{ \ - CWARN("DUMP PK: %s[%u,%u/%u](<-%s[%u,%u/%u]): " \ - "a %d, t %d, p %d, s %d, u %d, us %d, df %d\n", \ - tsk->comm, tsk->pid, tsk->uid, tsk->fsuid, \ - tsk->parent->comm, tsk->parent->pid, \ - tsk->parent->uid, tsk->parent->fsuid, \ - tsk->request_key_auth ? \ - tsk->request_key_auth->serial : 0, \ - key_cred(tsk)->thread_keyring ? \ - key_cred(tsk)->thread_keyring->serial : 0, \ - key_tgcred(tsk)->process_keyring ? \ - key_tgcred(tsk)->process_keyring->serial : 0, \ - key_tgcred(tsk)->session_keyring ? \ - key_tgcred(tsk)->session_keyring->serial : 0, \ - key_cred(tsk)->user->uid_keyring ? \ - key_cred(tsk)->user->uid_keyring->serial : 0, \ - key_cred(tsk)->user->session_keyring ? \ - key_cred(tsk)->user->session_keyring->serial : 0, \ - key_cred(tsk)->jit_keyring \ - ); \ -} - -#define DUMP_KEY(key) \ -{ \ - CWARN("DUMP KEY: %p(%d) ref %d u%u/g%u desc %s\n", \ - key, key->serial, atomic_read(&key->usage), \ - key->uid, key->gid, \ - key->description ? key->description : "n/a" \ - ); \ -} - -#define key_cred(tsk) ((tsk)->cred) -#define key_tgcred(tsk) ((tsk)->cred->tgcred) - -static inline void keyring_upcall_lock(struct gss_sec_keyring *gsec_kr) -{ -#ifdef HAVE_KEYRING_UPCALL_SERIALIZED - mutex_lock(&gsec_kr->gsk_uc_lock); -#endif -} - -static inline void keyring_upcall_unlock(struct gss_sec_keyring *gsec_kr) -{ -#ifdef HAVE_KEYRING_UPCALL_SERIALIZED - mutex_unlock(&gsec_kr->gsk_uc_lock); -#endif -} - -static inline void key_revoke_locked(struct key *key) -{ - set_bit(KEY_FLAG_REVOKED, &key->flags); -} - -static void ctx_upcall_timeout_kr(unsigned long data) -{ - struct ptlrpc_cli_ctx *ctx = (struct ptlrpc_cli_ctx *) data; - struct key *key = ctx2gctx_keyring(ctx)->gck_key; - - CWARN("ctx %p, key %p\n", ctx, key); - - LASSERT(key); - - cli_ctx_expire(ctx); - key_revoke_locked(key); -} - -static -void ctx_start_timer_kr(struct ptlrpc_cli_ctx *ctx, long timeout) -{ - struct gss_cli_ctx_keyring *gctx_kr = ctx2gctx_keyring(ctx); - struct timer_list *timer = gctx_kr->gck_timer; - - LASSERT(timer); - - CDEBUG(D_SEC, "ctx %p: start timer %lds\n", ctx, timeout); - timeout = timeout * HZ + cfs_time_current(); - - init_timer(timer); - timer->expires = timeout; - timer->data = (unsigned long) ctx; - timer->function = ctx_upcall_timeout_kr; - - add_timer(timer); -} - -/* - * caller should make sure no race with other threads - */ -static -void ctx_clear_timer_kr(struct ptlrpc_cli_ctx *ctx) -{ - struct gss_cli_ctx_keyring *gctx_kr = ctx2gctx_keyring(ctx); - struct timer_list *timer = gctx_kr->gck_timer; - - if (timer == NULL) - return; - - CDEBUG(D_SEC, "ctx %p, key %p\n", ctx, gctx_kr->gck_key); - - gctx_kr->gck_timer = NULL; - - del_singleshot_timer_sync(timer); - - OBD_FREE_PTR(timer); -} - -static -struct ptlrpc_cli_ctx *ctx_create_kr(struct ptlrpc_sec *sec, - struct vfs_cred *vcred) -{ - struct ptlrpc_cli_ctx *ctx; - struct gss_cli_ctx_keyring *gctx_kr; - - OBD_ALLOC_PTR(gctx_kr); - if (gctx_kr == NULL) - return NULL; - - OBD_ALLOC_PTR(gctx_kr->gck_timer); - if (gctx_kr->gck_timer == NULL) { - OBD_FREE_PTR(gctx_kr); - return NULL; - } - init_timer(gctx_kr->gck_timer); - - ctx = &gctx_kr->gck_base.gc_base; - - if (gss_cli_ctx_init_common(sec, ctx, &gss_keyring_ctxops, vcred)) { - OBD_FREE_PTR(gctx_kr->gck_timer); - OBD_FREE_PTR(gctx_kr); - return NULL; - } - - ctx->cc_expire = cfs_time_current_sec() + KEYRING_UPCALL_TIMEOUT; - clear_bit(PTLRPC_CTX_NEW_BIT, &ctx->cc_flags); - atomic_inc(&ctx->cc_refcount); /* for the caller */ - - return ctx; -} - -static void ctx_destroy_kr(struct ptlrpc_cli_ctx *ctx) -{ - struct ptlrpc_sec *sec = ctx->cc_sec; - struct gss_cli_ctx_keyring *gctx_kr = ctx2gctx_keyring(ctx); - - CDEBUG(D_SEC, "destroying ctx %p\n", ctx); - - /* at this time the association with key has been broken. */ - LASSERT(sec); - LASSERT(atomic_read(&sec->ps_refcount) > 0); - LASSERT(atomic_read(&sec->ps_nctx) > 0); - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags) == 0); - LASSERT(gctx_kr->gck_key == NULL); - - ctx_clear_timer_kr(ctx); - LASSERT(gctx_kr->gck_timer == NULL); - - if (gss_cli_ctx_fini_common(sec, ctx)) - return; - - OBD_FREE_PTR(gctx_kr); - - atomic_dec(&sec->ps_nctx); - sptlrpc_sec_put(sec); -} - -static void ctx_release_kr(struct ptlrpc_cli_ctx *ctx, int sync) -{ - if (sync) { - ctx_destroy_kr(ctx); - } else { - atomic_inc(&ctx->cc_refcount); - sptlrpc_gc_add_ctx(ctx); - } -} - -static void ctx_put_kr(struct ptlrpc_cli_ctx *ctx, int sync) -{ - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - if (atomic_dec_and_test(&ctx->cc_refcount)) - ctx_release_kr(ctx, sync); -} - -/* - * key <-> ctx association and rules: - * - ctx might not bind with any key - * - key/ctx binding is protected by key semaphore (if the key present) - * - key and ctx each take a reference of the other - * - ctx enlist/unlist is protected by ctx spinlock - * - never enlist a ctx after it's been unlisted - * - whoever do enlist should also do bind, lock key before enlist: - * - lock key -> lock ctx -> enlist -> unlock ctx -> bind -> unlock key - * - whoever do unlist should also do unbind: - * - lock key -> lock ctx -> unlist -> unlock ctx -> unbind -> unlock key - * - lock ctx -> unlist -> unlock ctx -> lock key -> unbind -> unlock key - */ - -static inline void spin_lock_if(spinlock_t *lock, int condition) -{ - if (condition) - spin_lock(lock); -} - -static inline void spin_unlock_if(spinlock_t *lock, int condition) -{ - if (condition) - spin_unlock(lock); -} - -static void ctx_enlist_kr(struct ptlrpc_cli_ctx *ctx, int is_root, int locked) -{ - struct ptlrpc_sec *sec = ctx->cc_sec; - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - - LASSERT(!test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags)); - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - spin_lock_if(&sec->ps_lock, !locked); - - atomic_inc(&ctx->cc_refcount); - set_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags); - hlist_add_head(&ctx->cc_cache, &gsec_kr->gsk_clist); - if (is_root) - gsec_kr->gsk_root_ctx = ctx; - - spin_unlock_if(&sec->ps_lock, !locked); -} - -/* - * Note after this get called, caller should not access ctx again because - * it might have been freed, unless caller hold at least one refcount of - * the ctx. - * - * return non-zero if we indeed unlist this ctx. - */ -static int ctx_unlist_kr(struct ptlrpc_cli_ctx *ctx, int locked) -{ - struct ptlrpc_sec *sec = ctx->cc_sec; - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - - /* if hashed bit has gone, leave the job to somebody who is doing it */ - if (test_and_clear_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags) == 0) - return 0; - - /* drop ref inside spin lock to prevent race with other operations */ - spin_lock_if(&sec->ps_lock, !locked); - - if (gsec_kr->gsk_root_ctx == ctx) - gsec_kr->gsk_root_ctx = NULL; - hlist_del_init(&ctx->cc_cache); - atomic_dec(&ctx->cc_refcount); - - spin_unlock_if(&sec->ps_lock, !locked); - - return 1; -} - -/* - * bind a key with a ctx together. - * caller must hold write lock of the key, as well as ref on key & ctx. - */ -static void bind_key_ctx(struct key *key, struct ptlrpc_cli_ctx *ctx) -{ - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(atomic_read(&key->usage) > 0); - LASSERT(ctx2gctx_keyring(ctx)->gck_key == NULL); - LASSERT(key->payload.data == NULL); - - /* at this time context may or may not in list. */ - key_get(key); - atomic_inc(&ctx->cc_refcount); - ctx2gctx_keyring(ctx)->gck_key = key; - key->payload.data = ctx; -} - -/* - * unbind a key and a ctx. - * caller must hold write lock, as well as a ref of the key. - */ -static void unbind_key_ctx(struct key *key, struct ptlrpc_cli_ctx *ctx) -{ - LASSERT(key->payload.data == ctx); - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags) == 0); - - /* must revoke the key, or others may treat it as newly created */ - key_revoke_locked(key); - - key->payload.data = NULL; - ctx2gctx_keyring(ctx)->gck_key = NULL; - - /* once ctx get split from key, the timer is meaningless */ - ctx_clear_timer_kr(ctx); - - ctx_put_kr(ctx, 1); - key_put(key); -} - -/* - * given a ctx, unbind with its coupled key, if any. - * unbind could only be called once, so we don't worry the key be released - * by someone else. - */ -static void unbind_ctx_kr(struct ptlrpc_cli_ctx *ctx) -{ - struct key *key = ctx2gctx_keyring(ctx)->gck_key; - - if (key) { - LASSERT(key->payload.data == ctx); - - key_get(key); - down_write(&key->sem); - unbind_key_ctx(key, ctx); - up_write(&key->sem); - key_put(key); - } -} - -/* - * given a key, unbind with its coupled ctx, if any. - * caller must hold write lock, as well as a ref of the key. - */ -static void unbind_key_locked(struct key *key) -{ - struct ptlrpc_cli_ctx *ctx = key->payload.data; - - if (ctx) - unbind_key_ctx(key, ctx); -} - -/* - * unlist a ctx, and unbind from coupled key - */ -static void kill_ctx_kr(struct ptlrpc_cli_ctx *ctx) -{ - if (ctx_unlist_kr(ctx, 0)) - unbind_ctx_kr(ctx); -} - -/* - * given a key, unlist and unbind with the coupled ctx (if any). - * caller must hold write lock, as well as a ref of the key. - */ -static void kill_key_locked(struct key *key) -{ - struct ptlrpc_cli_ctx *ctx = key->payload.data; - - if (ctx && ctx_unlist_kr(ctx, 0)) - unbind_key_locked(key); -} - -/* - * caller should hold one ref on contexts in freelist. - */ -static void dispose_ctx_list_kr(struct hlist_head *freelist) -{ - struct hlist_node *next; - struct ptlrpc_cli_ctx *ctx; - struct gss_cli_ctx *gctx; - - hlist_for_each_entry_safe(ctx, next, freelist, cc_cache) { - hlist_del_init(&ctx->cc_cache); - - /* reverse ctx: update current seq to buddy svcctx if exist. - * ideally this should be done at gss_cli_ctx_finalize(), but - * the ctx destroy could be delayed by: - * 1) ctx still has reference; - * 2) ctx destroy is asynchronous; - * and reverse import call inval_all_ctx() require this be done - *_immediately_ otherwise newly created reverse ctx might copy - * the very old sequence number from svcctx. */ - gctx = ctx2gctx(ctx); - if (!rawobj_empty(&gctx->gc_svc_handle) && - sec_is_reverse(gctx->gc_base.cc_sec)) { - gss_svc_upcall_update_sequence(&gctx->gc_svc_handle, - (__u32) atomic_read(&gctx->gc_seq)); - } - - /* we need to wakeup waiting reqs here. the context might - * be forced released before upcall finished, then the - * late-arrived downcall can't find the ctx even. */ - sptlrpc_cli_ctx_wakeup(ctx); - - unbind_ctx_kr(ctx); - ctx_put_kr(ctx, 0); - } -} - -/* - * lookup a root context directly in a sec, return root ctx with a - * reference taken or NULL. - */ -static -struct ptlrpc_cli_ctx * sec_lookup_root_ctx_kr(struct ptlrpc_sec *sec) -{ - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - struct ptlrpc_cli_ctx *ctx = NULL; - - spin_lock(&sec->ps_lock); - - ctx = gsec_kr->gsk_root_ctx; - - if (ctx == NULL && unlikely(sec_is_reverse(sec))) { - struct ptlrpc_cli_ctx *tmp; - - /* reverse ctx, search root ctx in list, choose the one - * with shortest expire time, which is most possibly have - * an established peer ctx at client side. */ - hlist_for_each_entry(tmp, &gsec_kr->gsk_clist, cc_cache) { - if (ctx == NULL || ctx->cc_expire == 0 || - ctx->cc_expire > tmp->cc_expire) { - ctx = tmp; - /* promote to be root_ctx */ - gsec_kr->gsk_root_ctx = ctx; - } - } - } - - if (ctx) { - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(!hlist_empty(&gsec_kr->gsk_clist)); - atomic_inc(&ctx->cc_refcount); - } - - spin_unlock(&sec->ps_lock); - - return ctx; -} - -#define RVS_CTX_EXPIRE_NICE (10) - -static -void rvs_sec_install_root_ctx_kr(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *new_ctx, - struct key *key) -{ - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - struct ptlrpc_cli_ctx *ctx; - cfs_time_t now; - - LASSERT(sec_is_reverse(sec)); - - spin_lock(&sec->ps_lock); - - now = cfs_time_current_sec(); - - /* set all existing ctxs short expiry */ - hlist_for_each_entry(ctx, &gsec_kr->gsk_clist, cc_cache) { - if (ctx->cc_expire > now + RVS_CTX_EXPIRE_NICE) { - ctx->cc_early_expire = 1; - ctx->cc_expire = now + RVS_CTX_EXPIRE_NICE; - } - } - - /* if there's root_ctx there, instead obsolete the current - * immediately, we leave it continue operating for a little while. - * hopefully when the first backward rpc with newest ctx send out, - * the client side already have the peer ctx well established. */ - ctx_enlist_kr(new_ctx, gsec_kr->gsk_root_ctx ? 0 : 1, 1); - - if (key) - bind_key_ctx(key, new_ctx); - - spin_unlock(&sec->ps_lock); -} - -static void construct_key_desc(void *buf, int bufsize, - struct ptlrpc_sec *sec, uid_t uid) -{ - snprintf(buf, bufsize, "%d@%x", uid, sec->ps_id); - ((char *)buf)[bufsize - 1] = '\0'; -} - -/**************************************** - * sec apis * - ****************************************/ - -static -struct ptlrpc_sec * gss_sec_create_kr(struct obd_import *imp, - struct ptlrpc_svc_ctx *svcctx, - struct sptlrpc_flavor *sf) -{ - struct gss_sec_keyring *gsec_kr; - - OBD_ALLOC(gsec_kr, sizeof(*gsec_kr)); - if (gsec_kr == NULL) - return NULL; - - INIT_HLIST_HEAD(&gsec_kr->gsk_clist); - gsec_kr->gsk_root_ctx = NULL; - mutex_init(&gsec_kr->gsk_root_uc_lock); -#ifdef HAVE_KEYRING_UPCALL_SERIALIZED - mutex_init(&gsec_kr->gsk_uc_lock); -#endif - - if (gss_sec_create_common(&gsec_kr->gsk_base, &gss_policy_keyring, - imp, svcctx, sf)) - goto err_free; - - if (svcctx != NULL && - sec_install_rctx_kr(&gsec_kr->gsk_base.gs_base, svcctx)) { - gss_sec_destroy_common(&gsec_kr->gsk_base); - goto err_free; - } - - return &gsec_kr->gsk_base.gs_base; - -err_free: - OBD_FREE(gsec_kr, sizeof(*gsec_kr)); - return NULL; -} - -static -void gss_sec_destroy_kr(struct ptlrpc_sec *sec) -{ - struct gss_sec *gsec = sec2gsec(sec); - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - - CDEBUG(D_SEC, "destroy %s@%p\n", sec->ps_policy->sp_name, sec); - - LASSERT(hlist_empty(&gsec_kr->gsk_clist)); - LASSERT(gsec_kr->gsk_root_ctx == NULL); - - gss_sec_destroy_common(gsec); - - OBD_FREE(gsec_kr, sizeof(*gsec_kr)); -} - -static inline int user_is_root(struct ptlrpc_sec *sec, struct vfs_cred *vcred) -{ - /* except the ROOTONLY flag, treat it as root user only if real uid - * is 0, euid/fsuid being 0 are handled as setuid scenarios */ - if (sec_is_rootonly(sec) || (vcred->vc_uid == 0)) - return 1; - else - return 0; -} - -/* - * unlink request key from it's ring, which is linked during request_key(). - * sadly, we have to 'guess' which keyring it's linked to. - * - * FIXME this code is fragile, depend on how request_key_link() is implemented. - */ -static void request_key_unlink(struct key *key) -{ - struct task_struct *tsk = current; - struct key *ring; - - switch (key_cred(tsk)->jit_keyring) { - case KEY_REQKEY_DEFL_DEFAULT: - case KEY_REQKEY_DEFL_THREAD_KEYRING: - ring = key_get(key_cred(tsk)->thread_keyring); - if (ring) - break; - case KEY_REQKEY_DEFL_PROCESS_KEYRING: - ring = key_get(key_tgcred(tsk)->process_keyring); - if (ring) - break; - case KEY_REQKEY_DEFL_SESSION_KEYRING: - rcu_read_lock(); - ring = key_get(rcu_dereference(key_tgcred(tsk) - ->session_keyring)); - rcu_read_unlock(); - if (ring) - break; - case KEY_REQKEY_DEFL_USER_SESSION_KEYRING: - ring = key_get(key_cred(tsk)->user->session_keyring); - break; - case KEY_REQKEY_DEFL_USER_KEYRING: - ring = key_get(key_cred(tsk)->user->uid_keyring); - break; - case KEY_REQKEY_DEFL_GROUP_KEYRING: - default: - LBUG(); - } - - LASSERT(ring); - key_unlink(ring, key); - key_put(ring); -} - -static -struct ptlrpc_cli_ctx * gss_sec_lookup_ctx_kr(struct ptlrpc_sec *sec, - struct vfs_cred *vcred, - int create, int remove_dead) -{ - struct obd_import *imp = sec->ps_import; - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - struct ptlrpc_cli_ctx *ctx = NULL; - unsigned int is_root = 0, create_new = 0; - struct key *key; - char desc[24]; - char *coinfo; - int coinfo_size; - char *co_flags = ""; - - LASSERT(imp != NULL); - - is_root = user_is_root(sec, vcred); - - /* a little bit optimization for root context */ - if (is_root) { - ctx = sec_lookup_root_ctx_kr(sec); - /* - * Only lookup directly for REVERSE sec, which should - * always succeed. - */ - if (ctx || sec_is_reverse(sec)) - return ctx; - } - - LASSERT(create != 0); - - /* for root context, obtain lock and check again, this time hold - * the root upcall lock, make sure nobody else populated new root - * context after last check. */ - if (is_root) { - mutex_lock(&gsec_kr->gsk_root_uc_lock); - - ctx = sec_lookup_root_ctx_kr(sec); - if (ctx) - goto out; - - /* update reverse handle for root user */ - sec2gsec(sec)->gs_rvs_hdl = gss_get_next_ctx_index(); - - switch (sec->ps_part) { - case LUSTRE_SP_MDT: - co_flags = "m"; - break; - case LUSTRE_SP_OST: - co_flags = "o"; - break; - case LUSTRE_SP_MGC: - co_flags = "rmo"; - break; - case LUSTRE_SP_CLI: - co_flags = "r"; - break; - case LUSTRE_SP_MGS: - default: - LBUG(); - } - } - - /* in case of setuid, key will be constructed as owner of fsuid/fsgid, - * but we do authentication based on real uid/gid. the key permission - * bits will be exactly as POS_ALL, so only processes who subscribed - * this key could have the access, although the quota might be counted - * on others (fsuid/fsgid). - * - * keyring will use fsuid/fsgid as upcall parameters, so we have to - * encode real uid/gid into callout info. - */ - - construct_key_desc(desc, sizeof(desc), sec, vcred->vc_uid); - - /* callout info format: - * secid:mech:uid:gid:flags:svc_type:peer_nid:target_uuid - */ - coinfo_size = sizeof(struct obd_uuid) + MAX_OBD_NAME + 64; - OBD_ALLOC(coinfo, coinfo_size); - if (coinfo == NULL) - goto out; - - snprintf(coinfo, coinfo_size, "%d:%s:%u:%u:%s:%d:"LPX64":%s", - sec->ps_id, sec2gsec(sec)->gs_mech->gm_name, - vcred->vc_uid, vcred->vc_gid, - co_flags, import_to_gss_svc(imp), - imp->imp_connection->c_peer.nid, imp->imp_obd->obd_name); - - CDEBUG(D_SEC, "requesting key for %s\n", desc); - - keyring_upcall_lock(gsec_kr); - key = request_key(&gss_key_type, desc, coinfo); - keyring_upcall_unlock(gsec_kr); - - OBD_FREE(coinfo, coinfo_size); - - if (IS_ERR(key)) { - CERROR("failed request key: %ld\n", PTR_ERR(key)); - goto out; - } - CDEBUG(D_SEC, "obtained key %08x for %s\n", key->serial, desc); - - /* once payload.data was pointed to a ctx, it never changes until - * we de-associate them; but parallel request_key() may return - * a key with payload.data == NULL at the same time. so we still - * need wirtelock of key->sem to serialize them. */ - down_write(&key->sem); - - if (likely(key->payload.data != NULL)) { - ctx = key->payload.data; - - LASSERT(atomic_read(&ctx->cc_refcount) >= 1); - LASSERT(ctx2gctx_keyring(ctx)->gck_key == key); - LASSERT(atomic_read(&key->usage) >= 2); - - /* simply take a ref and return. it's upper layer's - * responsibility to detect & replace dead ctx. */ - atomic_inc(&ctx->cc_refcount); - } else { - /* pre initialization with a cli_ctx. this can't be done in - * key_instantiate() because we'v no enough information - * there. */ - ctx = ctx_create_kr(sec, vcred); - if (ctx != NULL) { - ctx_enlist_kr(ctx, is_root, 0); - bind_key_ctx(key, ctx); - - ctx_start_timer_kr(ctx, KEYRING_UPCALL_TIMEOUT); - - CDEBUG(D_SEC, "installed key %p <-> ctx %p (sec %p)\n", - key, ctx, sec); - } else { - /* we'd prefer to call key_revoke(), but we more like - * to revoke it within this key->sem locked period. */ - key_revoke_locked(key); - } - - create_new = 1; - } - - up_write(&key->sem); - - if (is_root && create_new) - request_key_unlink(key); - - key_put(key); -out: - if (is_root) - mutex_unlock(&gsec_kr->gsk_root_uc_lock); - return ctx; -} - -static -void gss_sec_release_ctx_kr(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx, - int sync) -{ - LASSERT(atomic_read(&sec->ps_refcount) > 0); - LASSERT(atomic_read(&ctx->cc_refcount) == 0); - ctx_release_kr(ctx, sync); -} - -/* - * flush context of normal user, we must resort to keyring itself to find out - * contexts which belong to me. - * - * Note here we suppose only to flush _my_ context, the "uid" will - * be ignored in the search. - */ -static -void flush_user_ctx_cache_kr(struct ptlrpc_sec *sec, - uid_t uid, - int grace, int force) -{ - struct key *key; - char desc[24]; - - /* nothing to do for reverse or rootonly sec */ - if (sec_is_reverse(sec) || sec_is_rootonly(sec)) - return; - - construct_key_desc(desc, sizeof(desc), sec, uid); - - /* there should be only one valid key, but we put it in the - * loop in case of any weird cases */ - for (;;) { - key = request_key(&gss_key_type, desc, NULL); - if (IS_ERR(key)) { - CDEBUG(D_SEC, "No more key found for current user\n"); - break; - } - - down_write(&key->sem); - - kill_key_locked(key); - - /* kill_key_locked() should usually revoke the key, but we - * revoke it again to make sure, e.g. some case the key may - * not well coupled with a context. */ - key_revoke_locked(key); - - up_write(&key->sem); - - key_put(key); - } -} - -/* - * flush context of root or all, we iterate through the list. - */ -static -void flush_spec_ctx_cache_kr(struct ptlrpc_sec *sec, - uid_t uid, - int grace, int force) -{ - struct gss_sec_keyring *gsec_kr; - struct hlist_head freelist = HLIST_HEAD_INIT; - struct hlist_node *next; - struct ptlrpc_cli_ctx *ctx; - - gsec_kr = sec2gsec_keyring(sec); - - spin_lock(&sec->ps_lock); - hlist_for_each_entry_safe(ctx, next, - &gsec_kr->gsk_clist, cc_cache) { - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - if (uid != -1 && uid != ctx->cc_vcred.vc_uid) - continue; - - /* at this moment there's at least 2 base reference: - * key association and in-list. */ - if (atomic_read(&ctx->cc_refcount) > 2) { - if (!force) - continue; - CWARN("flush busy ctx %p(%u->%s, extra ref %d)\n", - ctx, ctx->cc_vcred.vc_uid, - sec2target_str(ctx->cc_sec), - atomic_read(&ctx->cc_refcount) - 2); - } - - set_bit(PTLRPC_CTX_DEAD_BIT, &ctx->cc_flags); - if (!grace) - clear_bit(PTLRPC_CTX_UPTODATE_BIT, &ctx->cc_flags); - - atomic_inc(&ctx->cc_refcount); - - if (ctx_unlist_kr(ctx, 1)) { - hlist_add_head(&ctx->cc_cache, &freelist); - } else { - LASSERT(atomic_read(&ctx->cc_refcount) >= 2); - atomic_dec(&ctx->cc_refcount); - } - } - spin_unlock(&sec->ps_lock); - - dispose_ctx_list_kr(&freelist); -} - -static -int gss_sec_flush_ctx_cache_kr(struct ptlrpc_sec *sec, - uid_t uid, int grace, int force) -{ - CDEBUG(D_SEC, "sec %p(%d, nctx %d), uid %d, grace %d, force %d\n", - sec, atomic_read(&sec->ps_refcount), - atomic_read(&sec->ps_nctx), - uid, grace, force); - - if (uid != -1 && uid != 0) - flush_user_ctx_cache_kr(sec, uid, grace, force); - else - flush_spec_ctx_cache_kr(sec, uid, grace, force); - - return 0; -} - -static -void gss_sec_gc_ctx_kr(struct ptlrpc_sec *sec) -{ - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - struct hlist_head freelist = HLIST_HEAD_INIT; - struct hlist_node *next; - struct ptlrpc_cli_ctx *ctx; - - CWARN("running gc\n"); - - spin_lock(&sec->ps_lock); - hlist_for_each_entry_safe(ctx, next, - &gsec_kr->gsk_clist, cc_cache) { - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - atomic_inc(&ctx->cc_refcount); - - if (cli_ctx_check_death(ctx) && ctx_unlist_kr(ctx, 1)) { - hlist_add_head(&ctx->cc_cache, &freelist); - CWARN("unhashed ctx %p\n", ctx); - } else { - LASSERT(atomic_read(&ctx->cc_refcount) >= 2); - atomic_dec(&ctx->cc_refcount); - } - } - spin_unlock(&sec->ps_lock); - - dispose_ctx_list_kr(&freelist); -} - -static -int gss_sec_display_kr(struct ptlrpc_sec *sec, struct seq_file *seq) -{ - struct gss_sec_keyring *gsec_kr = sec2gsec_keyring(sec); - struct hlist_node *next; - struct ptlrpc_cli_ctx *ctx; - struct gss_cli_ctx *gctx; - time_t now = cfs_time_current_sec(); - - spin_lock(&sec->ps_lock); - hlist_for_each_entry_safe(ctx, next, - &gsec_kr->gsk_clist, cc_cache) { - struct key *key; - char flags_str[40]; - char mech[40]; - - gctx = ctx2gctx(ctx); - key = ctx2gctx_keyring(ctx)->gck_key; - - gss_cli_ctx_flags2str(ctx->cc_flags, - flags_str, sizeof(flags_str)); - - if (gctx->gc_mechctx) - lgss_display(gctx->gc_mechctx, mech, sizeof(mech)); - else - snprintf(mech, sizeof(mech), "N/A"); - mech[sizeof(mech) - 1] = '\0'; - - seq_printf(seq, "%p: uid %u, ref %d, expire %ld(%+ld), fl %s, " - "seq %d, win %u, key %08x(ref %d), " - "hdl "LPX64":"LPX64", mech: %s\n", - ctx, ctx->cc_vcred.vc_uid, - atomic_read(&ctx->cc_refcount), - ctx->cc_expire, - ctx->cc_expire ? ctx->cc_expire - now : 0, - flags_str, - atomic_read(&gctx->gc_seq), - gctx->gc_win, - key ? key->serial : 0, - key ? atomic_read(&key->usage) : 0, - gss_handle_to_u64(&gctx->gc_handle), - gss_handle_to_u64(&gctx->gc_svc_handle), - mech); - } - spin_unlock(&sec->ps_lock); - - return 0; -} - -/**************************************** - * cli_ctx apis * - ****************************************/ - -static -int gss_cli_ctx_refresh_kr(struct ptlrpc_cli_ctx *ctx) -{ - /* upcall is already on the way */ - return 0; -} - -static -int gss_cli_ctx_validate_kr(struct ptlrpc_cli_ctx *ctx) -{ - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(ctx->cc_sec); - - if (cli_ctx_check_death(ctx)) { - kill_ctx_kr(ctx); - return 1; - } - - if (cli_ctx_is_ready(ctx)) - return 0; - return 1; -} - -static -void gss_cli_ctx_die_kr(struct ptlrpc_cli_ctx *ctx, int grace) -{ - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(ctx->cc_sec); - - cli_ctx_expire(ctx); - kill_ctx_kr(ctx); -} - -/**************************************** - * (reverse) service * - ****************************************/ - -/* - * reverse context could have nothing to do with keyrings. here we still keep - * the version which bind to a key, for future reference. - */ -#define HAVE_REVERSE_CTX_NOKEY - - -static -int sec_install_rctx_kr(struct ptlrpc_sec *sec, - struct ptlrpc_svc_ctx *svc_ctx) -{ - struct ptlrpc_cli_ctx *cli_ctx; - struct vfs_cred vcred = { 0, 0 }; - int rc; - - LASSERT(sec); - LASSERT(svc_ctx); - - cli_ctx = ctx_create_kr(sec, &vcred); - if (cli_ctx == NULL) - return -ENOMEM; - - rc = gss_copy_rvc_cli_ctx(cli_ctx, svc_ctx); - if (rc) { - CERROR("failed copy reverse cli ctx: %d\n", rc); - - ctx_put_kr(cli_ctx, 1); - return rc; - } - - rvs_sec_install_root_ctx_kr(sec, cli_ctx, NULL); - - ctx_put_kr(cli_ctx, 1); - - return 0; -} - - -/**************************************** - * service apis * - ****************************************/ - -static -int gss_svc_accept_kr(struct ptlrpc_request *req) -{ - return gss_svc_accept(&gss_policy_keyring, req); -} - -static -int gss_svc_install_rctx_kr(struct obd_import *imp, - struct ptlrpc_svc_ctx *svc_ctx) -{ - struct ptlrpc_sec *sec; - int rc; - - sec = sptlrpc_import_sec_ref(imp); - LASSERT(sec); - - rc = sec_install_rctx_kr(sec, svc_ctx); - sptlrpc_sec_put(sec); - - return rc; -} - -/**************************************** - * key apis * - ****************************************/ - -static -int gss_kt_instantiate(struct key *key, const void *data, size_t datalen) -{ - int rc; - - if (data != NULL || datalen != 0) { - CERROR("invalid: data %p, len %lu\n", data, (long)datalen); - return -EINVAL; - } - - if (key->payload.data != 0) { - CERROR("key already have payload\n"); - return -EINVAL; - } - - /* link the key to session keyring, so following context negotiation - * rpc fired from user space could find this key. This will be unlinked - * automatically when upcall processes die. - * - * we can't do this through keyctl from userspace, because the upcall - * might be neither possessor nor owner of the key (setuid). - * - * the session keyring is created upon upcall, and don't change all - * the way until upcall finished, so rcu lock is not needed here. - */ - LASSERT(key_tgcred(current)->session_keyring); - - lockdep_off(); - rc = key_link(key_tgcred(current)->session_keyring, key); - lockdep_on(); - if (unlikely(rc)) { - CERROR("failed to link key %08x to keyring %08x: %d\n", - key->serial, - key_tgcred(current)->session_keyring->serial, rc); - return rc; - } - - CDEBUG(D_SEC, "key %p instantiated, ctx %p\n", key, key->payload.data); - return 0; -} - -/* - * called with key semaphore write locked. it means we can operate - * on the context without fear of losing refcount. - */ -static -int gss_kt_update(struct key *key, const void *data, size_t datalen) -{ - struct ptlrpc_cli_ctx *ctx = key->payload.data; - struct gss_cli_ctx *gctx; - rawobj_t tmpobj = RAWOBJ_EMPTY; - __u32 datalen32 = (__u32) datalen; - int rc; - - if (data == NULL || datalen == 0) { - CWARN("invalid: data %p, len %lu\n", data, (long)datalen); - return -EINVAL; - } - - /* if upcall finished negotiation too fast (mostly likely because - * of local error happened) and call kt_update(), the ctx - * might be still NULL. but the key will finally be associate - * with a context, or be revoked. if key status is fine, return - * -EAGAIN to allow userspace sleep a while and call again. */ - if (ctx == NULL) { - CDEBUG(D_SEC, "update too soon: key %p(%x) flags %lx\n", - key, key->serial, key->flags); - - rc = key_validate(key); - if (rc == 0) - return -EAGAIN; - else - return rc; - } - - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(ctx->cc_sec); - - ctx_clear_timer_kr(ctx); - - /* don't proceed if already refreshed */ - if (cli_ctx_is_refreshed(ctx)) { - CWARN("ctx already done refresh\n"); - return 0; - } - - sptlrpc_cli_ctx_get(ctx); - gctx = ctx2gctx(ctx); - - rc = buffer_extract_bytes(&data, &datalen32, &gctx->gc_win, - sizeof(gctx->gc_win)); - if (rc) { - CERROR("failed extract seq_win\n"); - goto out; - } - - if (gctx->gc_win == 0) { - __u32 nego_rpc_err, nego_gss_err; - - rc = buffer_extract_bytes(&data, &datalen32, &nego_rpc_err, - sizeof(nego_rpc_err)); - if (rc) { - CERROR("failed to extrace rpc rc\n"); - goto out; - } - - rc = buffer_extract_bytes(&data, &datalen32, &nego_gss_err, - sizeof(nego_gss_err)); - if (rc) { - CERROR("failed to extrace gss rc\n"); - goto out; - } - - CERROR("negotiation: rpc err %d, gss err %x\n", - nego_rpc_err, nego_gss_err); - - rc = nego_rpc_err ? nego_rpc_err : -EACCES; - } else { - rc = rawobj_extract_local_alloc(&gctx->gc_handle, - (__u32 **) &data, &datalen32); - if (rc) { - CERROR("failed extract handle\n"); - goto out; - } - - rc = rawobj_extract_local(&tmpobj, (__u32 **) &data,&datalen32); - if (rc) { - CERROR("failed extract mech\n"); - goto out; - } - - rc = lgss_import_sec_context(&tmpobj, - sec2gsec(ctx->cc_sec)->gs_mech, - &gctx->gc_mechctx); - if (rc != GSS_S_COMPLETE) - CERROR("failed import context\n"); - else - rc = 0; - } -out: - /* we don't care what current status of this ctx, even someone else - * is operating on the ctx at the same time. we just add up our own - * opinions here. */ - if (rc == 0) { - gss_cli_ctx_uptodate(gctx); - } else { - /* this will also revoke the key. has to be done before - * wakeup waiters otherwise they can find the stale key */ - kill_key_locked(key); - - cli_ctx_expire(ctx); - - if (rc != -ERESTART) - set_bit(PTLRPC_CTX_ERROR_BIT, &ctx->cc_flags); - } - - /* let user space think it's a success */ - sptlrpc_cli_ctx_put(ctx, 1); - return 0; -} - -static -int gss_kt_match(const struct key *key, const void *desc) -{ - return (strcmp(key->description, (const char *) desc) == 0); -} - -static -void gss_kt_destroy(struct key *key) -{ - LASSERT(key->payload.data == NULL); - CDEBUG(D_SEC, "destroy key %p\n", key); -} - -static -void gss_kt_describe(const struct key *key, struct seq_file *s) -{ - if (key->description == NULL) - seq_puts(s, "[null]"); - else - seq_puts(s, key->description); -} - -static struct key_type gss_key_type = -{ - .name = "lgssc", - .def_datalen = 0, - .instantiate = gss_kt_instantiate, - .update = gss_kt_update, - .match = gss_kt_match, - .destroy = gss_kt_destroy, - .describe = gss_kt_describe, -}; - -/**************************************** - * lustre gss keyring policy * - ****************************************/ - -static struct ptlrpc_ctx_ops gss_keyring_ctxops = { - .match = gss_cli_ctx_match, - .refresh = gss_cli_ctx_refresh_kr, - .validate = gss_cli_ctx_validate_kr, - .die = gss_cli_ctx_die_kr, - .sign = gss_cli_ctx_sign, - .verify = gss_cli_ctx_verify, - .seal = gss_cli_ctx_seal, - .unseal = gss_cli_ctx_unseal, - .wrap_bulk = gss_cli_ctx_wrap_bulk, - .unwrap_bulk = gss_cli_ctx_unwrap_bulk, -}; - -static struct ptlrpc_sec_cops gss_sec_keyring_cops = { - .create_sec = gss_sec_create_kr, - .destroy_sec = gss_sec_destroy_kr, - .kill_sec = gss_sec_kill, - .lookup_ctx = gss_sec_lookup_ctx_kr, - .release_ctx = gss_sec_release_ctx_kr, - .flush_ctx_cache = gss_sec_flush_ctx_cache_kr, - .gc_ctx = gss_sec_gc_ctx_kr, - .install_rctx = gss_sec_install_rctx, - .alloc_reqbuf = gss_alloc_reqbuf, - .free_reqbuf = gss_free_reqbuf, - .alloc_repbuf = gss_alloc_repbuf, - .free_repbuf = gss_free_repbuf, - .enlarge_reqbuf = gss_enlarge_reqbuf, - .display = gss_sec_display_kr, -}; - -static struct ptlrpc_sec_sops gss_sec_keyring_sops = { - .accept = gss_svc_accept_kr, - .invalidate_ctx = gss_svc_invalidate_ctx, - .alloc_rs = gss_svc_alloc_rs, - .authorize = gss_svc_authorize, - .free_rs = gss_svc_free_rs, - .free_ctx = gss_svc_free_ctx, - .prep_bulk = gss_svc_prep_bulk, - .unwrap_bulk = gss_svc_unwrap_bulk, - .wrap_bulk = gss_svc_wrap_bulk, - .install_rctx = gss_svc_install_rctx_kr, -}; - -static struct ptlrpc_sec_policy gss_policy_keyring = { - .sp_owner = THIS_MODULE, - .sp_name = "gss.keyring", - .sp_policy = SPTLRPC_POLICY_GSS, - .sp_cops = &gss_sec_keyring_cops, - .sp_sops = &gss_sec_keyring_sops, -}; - - -int __init gss_init_keyring(void) -{ - int rc; - - rc = register_key_type(&gss_key_type); - if (rc) { - CERROR("failed to register keyring type: %d\n", rc); - return rc; - } - - rc = sptlrpc_register_policy(&gss_policy_keyring); - if (rc) { - unregister_key_type(&gss_key_type); - return rc; - } - - return 0; -} - -void __exit gss_exit_keyring(void) -{ - unregister_key_type(&gss_key_type); - sptlrpc_unregister_policy(&gss_policy_keyring); -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5.h b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5.h deleted file mode 100644 index 676d4b96311a..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Author: Eric Mei - */ - -/* - * linux/include/linux/sunrpc/gss_krb5_types.h - * - * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, - * lib/gssapi/krb5/gssapiP_krb5.h, and others - * - * Copyright (c) 2000 The Regents of the University of Michigan. - * All rights reserved. - * - * Andy Adamson - * Bruce Fields - */ - -/* - * Copyright 1995 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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 and that both that copyright notice and - * this permission notice appear in supporting documentation, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - */ - -#ifndef PTLRPC_GSS_KRB5_H -#define PTLRPC_GSS_KRB5_H - -/* - * RFC 4142 - */ - -#define KG_USAGE_ACCEPTOR_SEAL 22 -#define KG_USAGE_ACCEPTOR_SIGN 23 -#define KG_USAGE_INITIATOR_SEAL 24 -#define KG_USAGE_INITIATOR_SIGN 25 - -#define KG_TOK_MIC_MSG 0x0404 -#define KG_TOK_WRAP_MSG 0x0504 - -#define FLAG_SENDER_IS_ACCEPTOR 0x01 -#define FLAG_WRAP_CONFIDENTIAL 0x02 -#define FLAG_ACCEPTOR_SUBKEY 0x04 - -struct krb5_header { - __u16 kh_tok_id; /* token id */ - __u8 kh_flags; /* acceptor flags */ - __u8 kh_filler; /* 0xff */ - __u16 kh_ec; /* extra count */ - __u16 kh_rrc; /* right rotation count */ - __u64 kh_seq; /* sequence number */ - __u8 kh_cksum[0]; /* checksum */ -}; - -struct krb5_keyblock { - rawobj_t kb_key; - struct ll_crypto_cipher *kb_tfm; -}; - -struct krb5_ctx { - unsigned int kc_initiate:1, - kc_cfx:1, - kc_seed_init:1, - kc_have_acceptor_subkey:1; - __s32 kc_endtime; - __u8 kc_seed[16]; - __u64 kc_seq_send; - __u64 kc_seq_recv; - __u32 kc_enctype; - struct krb5_keyblock kc_keye; /* encryption */ - struct krb5_keyblock kc_keyi; /* integrity */ - struct krb5_keyblock kc_keyc; /* checksum */ - rawobj_t kc_mech_used; -}; - -enum sgn_alg { - SGN_ALG_DES_MAC_MD5 = 0x0000, - SGN_ALG_MD2_5 = 0x0001, - SGN_ALG_DES_MAC = 0x0002, - SGN_ALG_3 = 0x0003, /* not published */ - SGN_ALG_HMAC_MD5 = 0x0011, /* microsoft w2k; no support */ - SGN_ALG_HMAC_SHA1_DES3_KD = 0x0004 -}; - -enum seal_alg { - SEAL_ALG_NONE = 0xffff, - SEAL_ALG_DES = 0x0000, - SEAL_ALG_1 = 0x0001, /* not published */ - SEAL_ALG_MICROSOFT_RC4 = 0x0010, /* microsoft w2k; no support */ - SEAL_ALG_DES3KD = 0x0002 -}; - -#define CKSUMTYPE_CRC32 0x0001 -#define CKSUMTYPE_RSA_MD4 0x0002 -#define CKSUMTYPE_RSA_MD4_DES 0x0003 -#define CKSUMTYPE_DESCBC 0x0004 -/* des-mac-k */ -/* rsa-md4-des-k */ -#define CKSUMTYPE_RSA_MD5 0x0007 -#define CKSUMTYPE_RSA_MD5_DES 0x0008 -#define CKSUMTYPE_NIST_SHA 0x0009 -#define CKSUMTYPE_HMAC_SHA1_DES3 0x000c -#define CKSUMTYPE_HMAC_SHA1_96_AES128 0x000f -#define CKSUMTYPE_HMAC_SHA1_96_AES256 0x0010 -#define CKSUMTYPE_HMAC_MD5_ARCFOUR -138 - -/* from gssapi_err_krb5.h */ -#define KG_CCACHE_NOMATCH (39756032L) -#define KG_KEYTAB_NOMATCH (39756033L) -#define KG_TGT_MISSING (39756034L) -#define KG_NO_SUBKEY (39756035L) -#define KG_CONTEXT_ESTABLISHED (39756036L) -#define KG_BAD_SIGN_TYPE (39756037L) -#define KG_BAD_LENGTH (39756038L) -#define KG_CTX_INCOMPLETE (39756039L) -#define KG_CONTEXT (39756040L) -#define KG_CRED (39756041L) -#define KG_ENC_DESC (39756042L) -#define KG_BAD_SEQ (39756043L) -#define KG_EMPTY_CCACHE (39756044L) -#define KG_NO_CTYPES (39756045L) - -/* per Kerberos v5 protocol spec crypto types from the wire. - * these get mapped to linux kernel crypto routines. - */ -#define ENCTYPE_NULL 0x0000 -#define ENCTYPE_DES_CBC_CRC 0x0001 /* DES cbc mode with CRC-32 */ -#define ENCTYPE_DES_CBC_MD4 0x0002 /* DES cbc mode with RSA-MD4 */ -#define ENCTYPE_DES_CBC_MD5 0x0003 /* DES cbc mode with RSA-MD5 */ -#define ENCTYPE_DES_CBC_RAW 0x0004 /* DES cbc mode raw */ -/* XXX deprecated? */ -#define ENCTYPE_DES3_CBC_SHA 0x0005 /* DES-3 cbc mode with NIST-SHA */ -#define ENCTYPE_DES3_CBC_RAW 0x0006 /* DES-3 cbc mode raw */ -#define ENCTYPE_DES_HMAC_SHA1 0x0008 -#define ENCTYPE_DES3_CBC_SHA1 0x0010 -#define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011 -#define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012 -#define ENCTYPE_ARCFOUR_HMAC 0x0017 -#define ENCTYPE_ARCFOUR_HMAC_EXP 0x0018 -#define ENCTYPE_UNKNOWN 0x01ff - -#endif /* PTLRPC_GSS_KRB5_H */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5_mech.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5_mech.c deleted file mode 100644 index d03f6c114171..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_krb5_mech.c +++ /dev/null @@ -1,1786 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2011, 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * linux/net/sunrpc/gss_krb5_mech.c - * linux/net/sunrpc/gss_krb5_crypto.c - * linux/net/sunrpc/gss_krb5_seal.c - * linux/net/sunrpc/gss_krb5_seqnum.c - * linux/net/sunrpc/gss_krb5_unseal.c - * - * Copyright (c) 2001 The Regents of the University of Michigan. - * All rights reserved. - * - * Andy Adamson - * J. Bruce Fields - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" -#include "gss_asn1.h" -#include "gss_krb5.h" - -static spinlock_t krb5_seq_lock; - -struct krb5_enctype { - char *ke_dispname; - char *ke_enc_name; /* linux tfm name */ - char *ke_hash_name; /* linux tfm name */ - int ke_enc_mode; /* linux tfm mode */ - int ke_hash_size; /* checksum size */ - int ke_conf_size; /* confounder size */ - unsigned int ke_hash_hmac:1; /* is hmac? */ -}; - -/* - * NOTE: for aes128-cts and aes256-cts, MIT implementation use CTS encryption. - * but currently we simply CBC with padding, because linux doesn't support CTS - * yet. this need to be fixed in the future. - */ -static struct krb5_enctype enctypes[] = { - [ENCTYPE_DES_CBC_RAW] = { /* des-cbc-md5 */ - "des-cbc-md5", - "cbc(des)", - "md5", - 0, - 16, - 8, - 0, - }, - [ENCTYPE_DES3_CBC_RAW] = { /* des3-hmac-sha1 */ - "des3-hmac-sha1", - "cbc(des3_ede)", - "hmac(sha1)", - 0, - 20, - 8, - 1, - }, - [ENCTYPE_AES128_CTS_HMAC_SHA1_96] = { /* aes128-cts */ - "aes128-cts-hmac-sha1-96", - "cbc(aes)", - "hmac(sha1)", - 0, - 12, - 16, - 1, - }, - [ENCTYPE_AES256_CTS_HMAC_SHA1_96] = { /* aes256-cts */ - "aes256-cts-hmac-sha1-96", - "cbc(aes)", - "hmac(sha1)", - 0, - 12, - 16, - 1, - }, - [ENCTYPE_ARCFOUR_HMAC] = { /* arcfour-hmac-md5 */ - "arcfour-hmac-md5", - "ecb(arc4)", - "hmac(md5)", - 0, - 16, - 8, - 1, - }, -}; - -#define MAX_ENCTYPES sizeof(enctypes)/sizeof(struct krb5_enctype) - -static const char * enctype2str(__u32 enctype) -{ - if (enctype < MAX_ENCTYPES && enctypes[enctype].ke_dispname) - return enctypes[enctype].ke_dispname; - - return "unknown"; -} - -static -int keyblock_init(struct krb5_keyblock *kb, char *alg_name, int alg_mode) -{ - kb->kb_tfm = crypto_alloc_blkcipher(alg_name, alg_mode, 0); - if (IS_ERR(kb->kb_tfm)) { - CERROR("failed to alloc tfm: %s, mode %d\n", - alg_name, alg_mode); - return -1; - } - - if (crypto_blkcipher_setkey(kb->kb_tfm, kb->kb_key.data, kb->kb_key.len)) { - CERROR("failed to set %s key, len %d\n", - alg_name, kb->kb_key.len); - return -1; - } - - return 0; -} - -static -int krb5_init_keys(struct krb5_ctx *kctx) -{ - struct krb5_enctype *ke; - - if (kctx->kc_enctype >= MAX_ENCTYPES || - enctypes[kctx->kc_enctype].ke_hash_size == 0) { - CERROR("unsupported enctype %x\n", kctx->kc_enctype); - return -1; - } - - ke = &enctypes[kctx->kc_enctype]; - - /* tfm arc4 is stateful, user should alloc-use-free by his own */ - if (kctx->kc_enctype != ENCTYPE_ARCFOUR_HMAC && - keyblock_init(&kctx->kc_keye, ke->ke_enc_name, ke->ke_enc_mode)) - return -1; - - /* tfm hmac is stateful, user should alloc-use-free by his own */ - if (ke->ke_hash_hmac == 0 && - keyblock_init(&kctx->kc_keyi, ke->ke_enc_name, ke->ke_enc_mode)) - return -1; - if (ke->ke_hash_hmac == 0 && - keyblock_init(&kctx->kc_keyc, ke->ke_enc_name, ke->ke_enc_mode)) - return -1; - - return 0; -} - -static -void keyblock_free(struct krb5_keyblock *kb) -{ - rawobj_free(&kb->kb_key); - if (kb->kb_tfm) - crypto_free_blkcipher(kb->kb_tfm); -} - -static -int keyblock_dup(struct krb5_keyblock *new, struct krb5_keyblock *kb) -{ - return rawobj_dup(&new->kb_key, &kb->kb_key); -} - -static -int get_bytes(char **ptr, const char *end, void *res, int len) -{ - char *p, *q; - p = *ptr; - q = p + len; - if (q > end || q < p) - return -1; - memcpy(res, p, len); - *ptr = q; - return 0; -} - -static -int get_rawobj(char **ptr, const char *end, rawobj_t *res) -{ - char *p, *q; - __u32 len; - - p = *ptr; - if (get_bytes(&p, end, &len, sizeof(len))) - return -1; - - q = p + len; - if (q > end || q < p) - return -1; - - OBD_ALLOC_LARGE(res->data, len); - if (!res->data) - return -1; - - res->len = len; - memcpy(res->data, p, len); - *ptr = q; - return 0; -} - -static -int get_keyblock(char **ptr, const char *end, - struct krb5_keyblock *kb, __u32 keysize) -{ - char *buf; - - OBD_ALLOC_LARGE(buf, keysize); - if (buf == NULL) - return -1; - - if (get_bytes(ptr, end, buf, keysize)) { - OBD_FREE_LARGE(buf, keysize); - return -1; - } - - kb->kb_key.len = keysize; - kb->kb_key.data = buf; - return 0; -} - -static -void delete_context_kerberos(struct krb5_ctx *kctx) -{ - rawobj_free(&kctx->kc_mech_used); - - keyblock_free(&kctx->kc_keye); - keyblock_free(&kctx->kc_keyi); - keyblock_free(&kctx->kc_keyc); -} - -static -__u32 import_context_rfc1964(struct krb5_ctx *kctx, char *p, char *end) -{ - unsigned int tmp_uint, keysize; - - /* seed_init flag */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) - goto out_err; - kctx->kc_seed_init = (tmp_uint != 0); - - /* seed */ - if (get_bytes(&p, end, kctx->kc_seed, sizeof(kctx->kc_seed))) - goto out_err; - - /* sign/seal algorithm, not really used now */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint)) || - get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) - goto out_err; - - /* end time */ - if (get_bytes(&p, end, &kctx->kc_endtime, sizeof(kctx->kc_endtime))) - goto out_err; - - /* seq send */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) - goto out_err; - kctx->kc_seq_send = tmp_uint; - - /* mech oid */ - if (get_rawobj(&p, end, &kctx->kc_mech_used)) - goto out_err; - - /* old style enc/seq keys in format: - * - enctype (u32) - * - keysize (u32) - * - keydata - * we decompose them to fit into the new context - */ - - /* enc key */ - if (get_bytes(&p, end, &kctx->kc_enctype, sizeof(kctx->kc_enctype))) - goto out_err; - - if (get_bytes(&p, end, &keysize, sizeof(keysize))) - goto out_err; - - if (get_keyblock(&p, end, &kctx->kc_keye, keysize)) - goto out_err; - - /* seq key */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint)) || - tmp_uint != kctx->kc_enctype) - goto out_err; - - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint)) || - tmp_uint != keysize) - goto out_err; - - if (get_keyblock(&p, end, &kctx->kc_keyc, keysize)) - goto out_err; - - /* old style fallback */ - if (keyblock_dup(&kctx->kc_keyi, &kctx->kc_keyc)) - goto out_err; - - if (p != end) - goto out_err; - - CDEBUG(D_SEC, "successfully imported rfc1964 context\n"); - return 0; -out_err: - return GSS_S_FAILURE; -} - -/* Flags for version 2 context flags */ -#define KRB5_CTX_FLAG_INITIATOR 0x00000001 -#define KRB5_CTX_FLAG_CFX 0x00000002 -#define KRB5_CTX_FLAG_ACCEPTOR_SUBKEY 0x00000004 - -static -__u32 import_context_rfc4121(struct krb5_ctx *kctx, char *p, char *end) -{ - unsigned int tmp_uint, keysize; - - /* end time */ - if (get_bytes(&p, end, &kctx->kc_endtime, sizeof(kctx->kc_endtime))) - goto out_err; - - /* flags */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) - goto out_err; - - if (tmp_uint & KRB5_CTX_FLAG_INITIATOR) - kctx->kc_initiate = 1; - if (tmp_uint & KRB5_CTX_FLAG_CFX) - kctx->kc_cfx = 1; - if (tmp_uint & KRB5_CTX_FLAG_ACCEPTOR_SUBKEY) - kctx->kc_have_acceptor_subkey = 1; - - /* seq send */ - if (get_bytes(&p, end, &kctx->kc_seq_send, sizeof(kctx->kc_seq_send))) - goto out_err; - - /* enctype */ - if (get_bytes(&p, end, &kctx->kc_enctype, sizeof(kctx->kc_enctype))) - goto out_err; - - /* size of each key */ - if (get_bytes(&p, end, &keysize, sizeof(keysize))) - goto out_err; - - /* number of keys - should always be 3 */ - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) - goto out_err; - - if (tmp_uint != 3) { - CERROR("Invalid number of keys: %u\n", tmp_uint); - goto out_err; - } - - /* ke */ - if (get_keyblock(&p, end, &kctx->kc_keye, keysize)) - goto out_err; - /* ki */ - if (get_keyblock(&p, end, &kctx->kc_keyi, keysize)) - goto out_err; - /* ki */ - if (get_keyblock(&p, end, &kctx->kc_keyc, keysize)) - goto out_err; - - CDEBUG(D_SEC, "successfully imported v2 context\n"); - return 0; -out_err: - return GSS_S_FAILURE; -} - -/* - * The whole purpose here is trying to keep user level gss context parsing - * from nfs-utils unchanged as possible as we can, they are not quite mature - * yet, and many stuff still not clear, like heimdal etc. - */ -static -__u32 gss_import_sec_context_kerberos(rawobj_t *inbuf, - struct gss_ctx *gctx) -{ - struct krb5_ctx *kctx; - char *p = (char *) inbuf->data; - char *end = (char *) (inbuf->data + inbuf->len); - unsigned int tmp_uint, rc; - - if (get_bytes(&p, end, &tmp_uint, sizeof(tmp_uint))) { - CERROR("Fail to read version\n"); - return GSS_S_FAILURE; - } - - /* only support 0, 1 for the moment */ - if (tmp_uint > 2) { - CERROR("Invalid version %u\n", tmp_uint); - return GSS_S_FAILURE; - } - - OBD_ALLOC_PTR(kctx); - if (!kctx) - return GSS_S_FAILURE; - - if (tmp_uint == 0 || tmp_uint == 1) { - kctx->kc_initiate = tmp_uint; - rc = import_context_rfc1964(kctx, p, end); - } else { - rc = import_context_rfc4121(kctx, p, end); - } - - if (rc == 0) - rc = krb5_init_keys(kctx); - - if (rc) { - delete_context_kerberos(kctx); - OBD_FREE_PTR(kctx); - - return GSS_S_FAILURE; - } - - gctx->internal_ctx_id = kctx; - return GSS_S_COMPLETE; -} - -static -__u32 gss_copy_reverse_context_kerberos(struct gss_ctx *gctx, - struct gss_ctx *gctx_new) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_ctx *knew; - - OBD_ALLOC_PTR(knew); - if (!knew) - return GSS_S_FAILURE; - - knew->kc_initiate = kctx->kc_initiate ? 0 : 1; - knew->kc_cfx = kctx->kc_cfx; - knew->kc_seed_init = kctx->kc_seed_init; - knew->kc_have_acceptor_subkey = kctx->kc_have_acceptor_subkey; - knew->kc_endtime = kctx->kc_endtime; - - memcpy(knew->kc_seed, kctx->kc_seed, sizeof(kctx->kc_seed)); - knew->kc_seq_send = kctx->kc_seq_recv; - knew->kc_seq_recv = kctx->kc_seq_send; - knew->kc_enctype = kctx->kc_enctype; - - if (rawobj_dup(&knew->kc_mech_used, &kctx->kc_mech_used)) - goto out_err; - - if (keyblock_dup(&knew->kc_keye, &kctx->kc_keye)) - goto out_err; - if (keyblock_dup(&knew->kc_keyi, &kctx->kc_keyi)) - goto out_err; - if (keyblock_dup(&knew->kc_keyc, &kctx->kc_keyc)) - goto out_err; - if (krb5_init_keys(knew)) - goto out_err; - - gctx_new->internal_ctx_id = knew; - CDEBUG(D_SEC, "successfully copied reverse context\n"); - return GSS_S_COMPLETE; - -out_err: - delete_context_kerberos(knew); - OBD_FREE_PTR(knew); - return GSS_S_FAILURE; -} - -static -__u32 gss_inquire_context_kerberos(struct gss_ctx *gctx, - unsigned long *endtime) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - - *endtime = (unsigned long) ((__u32) kctx->kc_endtime); - return GSS_S_COMPLETE; -} - -static -void gss_delete_sec_context_kerberos(void *internal_ctx) -{ - struct krb5_ctx *kctx = internal_ctx; - - delete_context_kerberos(kctx); - OBD_FREE_PTR(kctx); -} - -static -void buf_to_sg(struct scatterlist *sg, void *ptr, int len) -{ - sg_set_buf(sg, ptr, len); -} - -static -__u32 krb5_encrypt(struct crypto_blkcipher *tfm, - int decrypt, - void * iv, - void * in, - void * out, - int length) -{ - struct blkcipher_desc desc; - struct scatterlist sg; - __u8 local_iv[16] = {0}; - __u32 ret = -EINVAL; - - LASSERT(tfm); - desc.tfm = tfm; - desc.info = local_iv; - desc.flags= 0; - - if (length % crypto_blkcipher_blocksize(tfm) != 0) { - CERROR("output length %d mismatch blocksize %d\n", - length, crypto_blkcipher_blocksize(tfm)); - goto out; - } - - if (crypto_blkcipher_ivsize(tfm) > 16) { - CERROR("iv size too large %d\n", crypto_blkcipher_ivsize(tfm)); - goto out; - } - - if (iv) - memcpy(local_iv, iv, crypto_blkcipher_ivsize(tfm)); - - memcpy(out, in, length); - buf_to_sg(&sg, out, length); - - if (decrypt) - ret = crypto_blkcipher_decrypt_iv(&desc, &sg, &sg, length); - else - ret = crypto_blkcipher_encrypt_iv(&desc, &sg, &sg, length); - -out: - return(ret); -} - - -static inline -int krb5_digest_hmac(struct crypto_hash *tfm, - rawobj_t *key, - struct krb5_header *khdr, - int msgcnt, rawobj_t *msgs, - int iovcnt, lnet_kiov_t *iovs, - rawobj_t *cksum) -{ - struct hash_desc desc; - struct scatterlist sg[1]; - int i; - - crypto_hash_setkey(tfm, key->data, key->len); - desc.tfm = tfm; - desc.flags= 0; - - crypto_hash_init(&desc); - - for (i = 0; i < msgcnt; i++) { - if (msgs[i].len == 0) - continue; - buf_to_sg(sg, (char *) msgs[i].data, msgs[i].len); - crypto_hash_update(&desc, sg, msgs[i].len); - } - - for (i = 0; i < iovcnt; i++) { - if (iovs[i].kiov_len == 0) - continue; - - sg_set_page(&sg[0], iovs[i].kiov_page, iovs[i].kiov_len, - iovs[i].kiov_offset); - crypto_hash_update(&desc, sg, iovs[i].kiov_len); - } - - if (khdr) { - buf_to_sg(sg, (char *) khdr, sizeof(*khdr)); - crypto_hash_update(&desc, sg, sizeof(*khdr)); - } - - return crypto_hash_final(&desc, cksum->data); -} - - -static inline -int krb5_digest_norm(struct crypto_hash *tfm, - struct krb5_keyblock *kb, - struct krb5_header *khdr, - int msgcnt, rawobj_t *msgs, - int iovcnt, lnet_kiov_t *iovs, - rawobj_t *cksum) -{ - struct hash_desc desc; - struct scatterlist sg[1]; - int i; - - LASSERT(kb->kb_tfm); - desc.tfm = tfm; - desc.flags= 0; - - crypto_hash_init(&desc); - - for (i = 0; i < msgcnt; i++) { - if (msgs[i].len == 0) - continue; - buf_to_sg(sg, (char *) msgs[i].data, msgs[i].len); - crypto_hash_update(&desc, sg, msgs[i].len); - } - - for (i = 0; i < iovcnt; i++) { - if (iovs[i].kiov_len == 0) - continue; - - sg_set_page(&sg[0], iovs[i].kiov_page, iovs[i].kiov_len, - iovs[i].kiov_offset); - crypto_hash_update(&desc, sg, iovs[i].kiov_len); - } - - if (khdr) { - buf_to_sg(sg, (char *) khdr, sizeof(*khdr)); - crypto_hash_update(&desc, sg, sizeof(*khdr)); - } - - crypto_hash_final(&desc, cksum->data); - - return krb5_encrypt(kb->kb_tfm, 0, NULL, cksum->data, - cksum->data, cksum->len); -} - -/* - * compute (keyed/keyless) checksum against the plain text which appended - * with krb5 wire token header. - */ -static -__s32 krb5_make_checksum(__u32 enctype, - struct krb5_keyblock *kb, - struct krb5_header *khdr, - int msgcnt, rawobj_t *msgs, - int iovcnt, lnet_kiov_t *iovs, - rawobj_t *cksum) -{ - struct krb5_enctype *ke = &enctypes[enctype]; - struct crypto_hash *tfm; - __u32 code = GSS_S_FAILURE; - int rc; - - tfm = ll_crypto_alloc_hash(ke->ke_hash_name, 0, 0); - if (!tfm) { - CERROR("failed to alloc TFM: %s\n", ke->ke_hash_name); - return GSS_S_FAILURE; - } - - cksum->len = crypto_hash_digestsize(tfm); - OBD_ALLOC_LARGE(cksum->data, cksum->len); - if (!cksum->data) { - cksum->len = 0; - goto out_tfm; - } - - if (ke->ke_hash_hmac) - rc = krb5_digest_hmac(tfm, &kb->kb_key, - khdr, msgcnt, msgs, iovcnt, iovs, cksum); - else - rc = krb5_digest_norm(tfm, kb, - khdr, msgcnt, msgs, iovcnt, iovs, cksum); - - if (rc == 0) - code = GSS_S_COMPLETE; -out_tfm: - crypto_free_hash(tfm); - return code; -} - -static void fill_krb5_header(struct krb5_ctx *kctx, - struct krb5_header *khdr, - int privacy) -{ - unsigned char acceptor_flag; - - acceptor_flag = kctx->kc_initiate ? 0 : FLAG_SENDER_IS_ACCEPTOR; - - if (privacy) { - khdr->kh_tok_id = cpu_to_be16(KG_TOK_WRAP_MSG); - khdr->kh_flags = acceptor_flag | FLAG_WRAP_CONFIDENTIAL; - khdr->kh_ec = cpu_to_be16(0); - khdr->kh_rrc = cpu_to_be16(0); - } else { - khdr->kh_tok_id = cpu_to_be16(KG_TOK_MIC_MSG); - khdr->kh_flags = acceptor_flag; - khdr->kh_ec = cpu_to_be16(0xffff); - khdr->kh_rrc = cpu_to_be16(0xffff); - } - - khdr->kh_filler = 0xff; - spin_lock(&krb5_seq_lock); - khdr->kh_seq = cpu_to_be64(kctx->kc_seq_send++); - spin_unlock(&krb5_seq_lock); -} - -static __u32 verify_krb5_header(struct krb5_ctx *kctx, - struct krb5_header *khdr, - int privacy) -{ - unsigned char acceptor_flag; - __u16 tok_id, ec_rrc; - - acceptor_flag = kctx->kc_initiate ? FLAG_SENDER_IS_ACCEPTOR : 0; - - if (privacy) { - tok_id = KG_TOK_WRAP_MSG; - ec_rrc = 0x0; - } else { - tok_id = KG_TOK_MIC_MSG; - ec_rrc = 0xffff; - } - - /* sanity checks */ - if (be16_to_cpu(khdr->kh_tok_id) != tok_id) { - CERROR("bad token id\n"); - return GSS_S_DEFECTIVE_TOKEN; - } - if ((khdr->kh_flags & FLAG_SENDER_IS_ACCEPTOR) != acceptor_flag) { - CERROR("bad direction flag\n"); - return GSS_S_BAD_SIG; - } - if (privacy && (khdr->kh_flags & FLAG_WRAP_CONFIDENTIAL) == 0) { - CERROR("missing confidential flag\n"); - return GSS_S_BAD_SIG; - } - if (khdr->kh_filler != 0xff) { - CERROR("bad filler\n"); - return GSS_S_DEFECTIVE_TOKEN; - } - if (be16_to_cpu(khdr->kh_ec) != ec_rrc || - be16_to_cpu(khdr->kh_rrc) != ec_rrc) { - CERROR("bad EC or RRC\n"); - return GSS_S_DEFECTIVE_TOKEN; - } - return GSS_S_COMPLETE; -} - -static -__u32 gss_get_mic_kerberos(struct gss_ctx *gctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *token) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - rawobj_t cksum = RAWOBJ_EMPTY; - - /* fill krb5 header */ - LASSERT(token->len >= sizeof(*khdr)); - khdr = (struct krb5_header *) token->data; - fill_krb5_header(kctx, khdr, 0); - - /* checksum */ - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyc, - khdr, msgcnt, msgs, iovcnt, iovs, &cksum)) - return GSS_S_FAILURE; - - LASSERT(cksum.len >= ke->ke_hash_size); - LASSERT(token->len >= sizeof(*khdr) + ke->ke_hash_size); - memcpy(khdr + 1, cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size); - - token->len = sizeof(*khdr) + ke->ke_hash_size; - rawobj_free(&cksum); - return GSS_S_COMPLETE; -} - -static -__u32 gss_verify_mic_kerberos(struct gss_ctx *gctx, - int msgcnt, - rawobj_t *msgs, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *token) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - rawobj_t cksum = RAWOBJ_EMPTY; - __u32 major; - - if (token->len < sizeof(*khdr)) { - CERROR("short signature: %u\n", token->len); - return GSS_S_DEFECTIVE_TOKEN; - } - - khdr = (struct krb5_header *) token->data; - - major = verify_krb5_header(kctx, khdr, 0); - if (major != GSS_S_COMPLETE) { - CERROR("bad krb5 header\n"); - return major; - } - - if (token->len < sizeof(*khdr) + ke->ke_hash_size) { - CERROR("short signature: %u, require %d\n", - token->len, (int) sizeof(*khdr) + ke->ke_hash_size); - return GSS_S_FAILURE; - } - - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyc, - khdr, msgcnt, msgs, iovcnt, iovs, &cksum)) { - CERROR("failed to make checksum\n"); - return GSS_S_FAILURE; - } - - LASSERT(cksum.len >= ke->ke_hash_size); - if (memcmp(khdr + 1, cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size)) { - CERROR("checksum mismatch\n"); - rawobj_free(&cksum); - return GSS_S_BAD_SIG; - } - - rawobj_free(&cksum); - return GSS_S_COMPLETE; -} - -static -int add_padding(rawobj_t *msg, int msg_buflen, int blocksize) -{ - int padding; - - padding = (blocksize - (msg->len & (blocksize - 1))) & - (blocksize - 1); - if (!padding) - return 0; - - if (msg->len + padding > msg_buflen) { - CERROR("bufsize %u too small: datalen %u, padding %u\n", - msg_buflen, msg->len, padding); - return -EINVAL; - } - - memset(msg->data + msg->len, padding, padding); - msg->len += padding; - return 0; -} - -static -int krb5_encrypt_rawobjs(struct crypto_blkcipher *tfm, - int mode_ecb, - int inobj_cnt, - rawobj_t *inobjs, - rawobj_t *outobj, - int enc) -{ - struct blkcipher_desc desc; - struct scatterlist src, dst; - __u8 local_iv[16] = {0}, *buf; - __u32 datalen = 0; - int i, rc; - - buf = outobj->data; - desc.tfm = tfm; - desc.info = local_iv; - desc.flags = 0; - - for (i = 0; i < inobj_cnt; i++) { - LASSERT(buf + inobjs[i].len <= outobj->data + outobj->len); - - buf_to_sg(&src, inobjs[i].data, inobjs[i].len); - buf_to_sg(&dst, buf, outobj->len - datalen); - - if (mode_ecb) { - if (enc) - rc = crypto_blkcipher_encrypt( - &desc, &dst, &src, src.length); - else - rc = crypto_blkcipher_decrypt( - &desc, &dst, &src, src.length); - } else { - if (enc) - rc = crypto_blkcipher_encrypt_iv( - &desc, &dst, &src, src.length); - else - rc = crypto_blkcipher_decrypt_iv( - &desc, &dst, &src, src.length); - } - - if (rc) { - CERROR("encrypt error %d\n", rc); - return rc; - } - - datalen += inobjs[i].len; - buf += inobjs[i].len; - } - - outobj->len = datalen; - return 0; -} - -/* - * if adj_nob != 0, we adjust desc->bd_nob to the actual cipher text size. - */ -static -int krb5_encrypt_bulk(struct crypto_blkcipher *tfm, - struct krb5_header *khdr, - char *confounder, - struct ptlrpc_bulk_desc *desc, - rawobj_t *cipher, - int adj_nob) -{ - struct blkcipher_desc ciph_desc; - __u8 local_iv[16] = {0}; - struct scatterlist src, dst; - int blocksize, i, rc, nob = 0; - - LASSERT(desc->bd_iov_count); - LASSERT(desc->bd_enc_iov); - - blocksize = crypto_blkcipher_blocksize(tfm); - LASSERT(blocksize > 1); - LASSERT(cipher->len == blocksize + sizeof(*khdr)); - - ciph_desc.tfm = tfm; - ciph_desc.info = local_iv; - ciph_desc.flags = 0; - - /* encrypt confounder */ - buf_to_sg(&src, confounder, blocksize); - buf_to_sg(&dst, cipher->data, blocksize); - - rc = crypto_blkcipher_encrypt_iv(&ciph_desc, &dst, &src, blocksize); - if (rc) { - CERROR("error to encrypt confounder: %d\n", rc); - return rc; - } - - /* encrypt clear pages */ - for (i = 0; i < desc->bd_iov_count; i++) { - sg_set_page(&src, desc->bd_iov[i].kiov_page, - (desc->bd_iov[i].kiov_len + blocksize - 1) & - (~(blocksize - 1)), - desc->bd_iov[i].kiov_offset); - if (adj_nob) - nob += src.length; - sg_set_page(&dst, desc->bd_enc_iov[i].kiov_page, src.length, - src.offset); - - desc->bd_enc_iov[i].kiov_offset = dst.offset; - desc->bd_enc_iov[i].kiov_len = dst.length; - - rc = crypto_blkcipher_encrypt_iv(&ciph_desc, &dst, &src, - src.length); - if (rc) { - CERROR("error to encrypt page: %d\n", rc); - return rc; - } - } - - /* encrypt krb5 header */ - buf_to_sg(&src, khdr, sizeof(*khdr)); - buf_to_sg(&dst, cipher->data + blocksize, sizeof(*khdr)); - - rc = crypto_blkcipher_encrypt_iv(&ciph_desc, - &dst, &src, sizeof(*khdr)); - if (rc) { - CERROR("error to encrypt krb5 header: %d\n", rc); - return rc; - } - - if (adj_nob) - desc->bd_nob = nob; - - return 0; -} - -/* - * desc->bd_nob_transferred is the size of cipher text received. - * desc->bd_nob is the target size of plain text supposed to be. - * - * if adj_nob != 0, we adjust each page's kiov_len to the actual - * plain text size. - * - for client read: we don't know data size for each page, so - * bd_iov[]->kiov_len is set to PAGE_SIZE, but actual data received might - * be smaller, so we need to adjust it according to bd_enc_iov[]->kiov_len. - * this means we DO NOT support the situation that server send an odd size - * data in a page which is not the last one. - * - for server write: we knows exactly data size for each page being expected, - * thus kiov_len is accurate already, so we should not adjust it at all. - * and bd_enc_iov[]->kiov_len should be round_up(bd_iov[]->kiov_len) which - * should have been done by prep_bulk(). - */ -static -int krb5_decrypt_bulk(struct crypto_blkcipher *tfm, - struct krb5_header *khdr, - struct ptlrpc_bulk_desc *desc, - rawobj_t *cipher, - rawobj_t *plain, - int adj_nob) -{ - struct blkcipher_desc ciph_desc; - __u8 local_iv[16] = {0}; - struct scatterlist src, dst; - int ct_nob = 0, pt_nob = 0; - int blocksize, i, rc; - - LASSERT(desc->bd_iov_count); - LASSERT(desc->bd_enc_iov); - LASSERT(desc->bd_nob_transferred); - - blocksize = crypto_blkcipher_blocksize(tfm); - LASSERT(blocksize > 1); - LASSERT(cipher->len == blocksize + sizeof(*khdr)); - - ciph_desc.tfm = tfm; - ciph_desc.info = local_iv; - ciph_desc.flags = 0; - - if (desc->bd_nob_transferred % blocksize) { - CERROR("odd transferred nob: %d\n", desc->bd_nob_transferred); - return -EPROTO; - } - - /* decrypt head (confounder) */ - buf_to_sg(&src, cipher->data, blocksize); - buf_to_sg(&dst, plain->data, blocksize); - - rc = crypto_blkcipher_decrypt_iv(&ciph_desc, &dst, &src, blocksize); - if (rc) { - CERROR("error to decrypt confounder: %d\n", rc); - return rc; - } - - for (i = 0; i < desc->bd_iov_count && ct_nob < desc->bd_nob_transferred; - i++) { - if (desc->bd_enc_iov[i].kiov_offset % blocksize != 0 || - desc->bd_enc_iov[i].kiov_len % blocksize != 0) { - CERROR("page %d: odd offset %u len %u, blocksize %d\n", - i, desc->bd_enc_iov[i].kiov_offset, - desc->bd_enc_iov[i].kiov_len, blocksize); - return -EFAULT; - } - - if (adj_nob) { - if (ct_nob + desc->bd_enc_iov[i].kiov_len > - desc->bd_nob_transferred) - desc->bd_enc_iov[i].kiov_len = - desc->bd_nob_transferred - ct_nob; - - desc->bd_iov[i].kiov_len = desc->bd_enc_iov[i].kiov_len; - if (pt_nob + desc->bd_enc_iov[i].kiov_len >desc->bd_nob) - desc->bd_iov[i].kiov_len = desc->bd_nob -pt_nob; - } else { - /* this should be guaranteed by LNET */ - LASSERT(ct_nob + desc->bd_enc_iov[i].kiov_len <= - desc->bd_nob_transferred); - LASSERT(desc->bd_iov[i].kiov_len <= - desc->bd_enc_iov[i].kiov_len); - } - - if (desc->bd_enc_iov[i].kiov_len == 0) - continue; - - sg_set_page(&src, desc->bd_enc_iov[i].kiov_page, - desc->bd_enc_iov[i].kiov_len, - desc->bd_enc_iov[i].kiov_offset); - dst = src; - if (desc->bd_iov[i].kiov_len % blocksize == 0) - sg_assign_page(&dst, desc->bd_iov[i].kiov_page); - - rc = crypto_blkcipher_decrypt_iv(&ciph_desc, &dst, &src, - src.length); - if (rc) { - CERROR("error to decrypt page: %d\n", rc); - return rc; - } - - if (desc->bd_iov[i].kiov_len % blocksize != 0) { - memcpy(page_address(desc->bd_iov[i].kiov_page) + - desc->bd_iov[i].kiov_offset, - page_address(desc->bd_enc_iov[i].kiov_page) + - desc->bd_iov[i].kiov_offset, - desc->bd_iov[i].kiov_len); - } - - ct_nob += desc->bd_enc_iov[i].kiov_len; - pt_nob += desc->bd_iov[i].kiov_len; - } - - if (unlikely(ct_nob != desc->bd_nob_transferred)) { - CERROR("%d cipher text transferred but only %d decrypted\n", - desc->bd_nob_transferred, ct_nob); - return -EFAULT; - } - - if (unlikely(!adj_nob && pt_nob != desc->bd_nob)) { - CERROR("%d plain text expected but only %d received\n", - desc->bd_nob, pt_nob); - return -EFAULT; - } - - /* if needed, clear up the rest unused iovs */ - if (adj_nob) - while (i < desc->bd_iov_count) - desc->bd_iov[i++].kiov_len = 0; - - /* decrypt tail (krb5 header) */ - buf_to_sg(&src, cipher->data + blocksize, sizeof(*khdr)); - buf_to_sg(&dst, cipher->data + blocksize, sizeof(*khdr)); - - rc = crypto_blkcipher_decrypt_iv(&ciph_desc, - &dst, &src, sizeof(*khdr)); - if (rc) { - CERROR("error to decrypt tail: %d\n", rc); - return rc; - } - - if (memcmp(cipher->data + blocksize, khdr, sizeof(*khdr))) { - CERROR("krb5 header doesn't match\n"); - return -EACCES; - } - - return 0; -} - -static -__u32 gss_wrap_kerberos(struct gss_ctx *gctx, - rawobj_t *gsshdr, - rawobj_t *msg, - int msg_buflen, - rawobj_t *token) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - int blocksize; - rawobj_t cksum = RAWOBJ_EMPTY; - rawobj_t data_desc[3], cipher; - __u8 conf[GSS_MAX_CIPHER_BLOCK]; - int rc = 0; - - LASSERT(ke); - LASSERT(ke->ke_conf_size <= GSS_MAX_CIPHER_BLOCK); - LASSERT(kctx->kc_keye.kb_tfm == NULL || - ke->ke_conf_size >= - crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm)); - - /* - * final token format: - * --------------------------------------------------- - * | krb5 header | cipher text | checksum (16 bytes) | - * --------------------------------------------------- - */ - - /* fill krb5 header */ - LASSERT(token->len >= sizeof(*khdr)); - khdr = (struct krb5_header *) token->data; - fill_krb5_header(kctx, khdr, 1); - - /* generate confounder */ - cfs_get_random_bytes(conf, ke->ke_conf_size); - - /* get encryption blocksize. note kc_keye might not associated with - * a tfm, currently only for arcfour-hmac */ - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - LASSERT(kctx->kc_keye.kb_tfm == NULL); - blocksize = 1; - } else { - LASSERT(kctx->kc_keye.kb_tfm); - blocksize = crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm); - } - LASSERT(blocksize <= ke->ke_conf_size); - - /* padding the message */ - if (add_padding(msg, msg_buflen, blocksize)) - return GSS_S_FAILURE; - - /* - * clear text layout for checksum: - * ------------------------------------------------------ - * | confounder | gss header | clear msgs | krb5 header | - * ------------------------------------------------------ - */ - data_desc[0].data = conf; - data_desc[0].len = ke->ke_conf_size; - data_desc[1].data = gsshdr->data; - data_desc[1].len = gsshdr->len; - data_desc[2].data = msg->data; - data_desc[2].len = msg->len; - - /* compute checksum */ - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyi, - khdr, 3, data_desc, 0, NULL, &cksum)) - return GSS_S_FAILURE; - LASSERT(cksum.len >= ke->ke_hash_size); - - /* - * clear text layout for encryption: - * ----------------------------------------- - * | confounder | clear msgs | krb5 header | - * ----------------------------------------- - */ - data_desc[0].data = conf; - data_desc[0].len = ke->ke_conf_size; - data_desc[1].data = msg->data; - data_desc[1].len = msg->len; - data_desc[2].data = (__u8 *) khdr; - data_desc[2].len = sizeof(*khdr); - - /* cipher text will be directly inplace */ - cipher.data = (__u8 *) (khdr + 1); - cipher.len = token->len - sizeof(*khdr); - LASSERT(cipher.len >= ke->ke_conf_size + msg->len + sizeof(*khdr)); - - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - rawobj_t arc4_keye; - struct crypto_blkcipher *arc4_tfm; - - if (krb5_make_checksum(ENCTYPE_ARCFOUR_HMAC, &kctx->kc_keyi, - NULL, 1, &cksum, 0, NULL, &arc4_keye)) { - CERROR("failed to obtain arc4 enc key\n"); - GOTO(arc4_out, rc = -EACCES); - } - - arc4_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, 0); - if (IS_ERR(arc4_tfm)) { - CERROR("failed to alloc tfm arc4 in ECB mode\n"); - GOTO(arc4_out_key, rc = -EACCES); - } - - if (crypto_blkcipher_setkey(arc4_tfm, arc4_keye.data, - arc4_keye.len)) { - CERROR("failed to set arc4 key, len %d\n", - arc4_keye.len); - GOTO(arc4_out_tfm, rc = -EACCES); - } - - rc = krb5_encrypt_rawobjs(arc4_tfm, 1, - 3, data_desc, &cipher, 1); -arc4_out_tfm: - crypto_free_blkcipher(arc4_tfm); -arc4_out_key: - rawobj_free(&arc4_keye); -arc4_out: - do {} while (0); /* just to avoid compile warning */ - } else { - rc = krb5_encrypt_rawobjs(kctx->kc_keye.kb_tfm, 0, - 3, data_desc, &cipher, 1); - } - - if (rc != 0) { - rawobj_free(&cksum); - return GSS_S_FAILURE; - } - - /* fill in checksum */ - LASSERT(token->len >= sizeof(*khdr) + cipher.len + ke->ke_hash_size); - memcpy((char *)(khdr + 1) + cipher.len, - cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size); - rawobj_free(&cksum); - - /* final token length */ - token->len = sizeof(*khdr) + cipher.len + ke->ke_hash_size; - return GSS_S_COMPLETE; -} - -static -__u32 gss_prep_bulk_kerberos(struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - int blocksize, i; - - LASSERT(desc->bd_iov_count); - LASSERT(desc->bd_enc_iov); - LASSERT(kctx->kc_keye.kb_tfm); - - blocksize = crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm); - - for (i = 0; i < desc->bd_iov_count; i++) { - LASSERT(desc->bd_enc_iov[i].kiov_page); - /* - * offset should always start at page boundary of either - * client or server side. - */ - if (desc->bd_iov[i].kiov_offset & blocksize) { - CERROR("odd offset %d in page %d\n", - desc->bd_iov[i].kiov_offset, i); - return GSS_S_FAILURE; - } - - desc->bd_enc_iov[i].kiov_offset = desc->bd_iov[i].kiov_offset; - desc->bd_enc_iov[i].kiov_len = (desc->bd_iov[i].kiov_len + - blocksize - 1) & (~(blocksize - 1)); - } - - return GSS_S_COMPLETE; -} - -static -__u32 gss_wrap_bulk_kerberos(struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, int adj_nob) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - int blocksize; - rawobj_t cksum = RAWOBJ_EMPTY; - rawobj_t data_desc[1], cipher; - __u8 conf[GSS_MAX_CIPHER_BLOCK]; - int rc = 0; - - LASSERT(ke); - LASSERT(ke->ke_conf_size <= GSS_MAX_CIPHER_BLOCK); - - /* - * final token format: - * -------------------------------------------------- - * | krb5 header | head/tail cipher text | checksum | - * -------------------------------------------------- - */ - - /* fill krb5 header */ - LASSERT(token->len >= sizeof(*khdr)); - khdr = (struct krb5_header *) token->data; - fill_krb5_header(kctx, khdr, 1); - - /* generate confounder */ - cfs_get_random_bytes(conf, ke->ke_conf_size); - - /* get encryption blocksize. note kc_keye might not associated with - * a tfm, currently only for arcfour-hmac */ - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - LASSERT(kctx->kc_keye.kb_tfm == NULL); - blocksize = 1; - } else { - LASSERT(kctx->kc_keye.kb_tfm); - blocksize = crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm); - } - - /* - * we assume the size of krb5_header (16 bytes) must be n * blocksize. - * the bulk token size would be exactly (sizeof(krb5_header) + - * blocksize + sizeof(krb5_header) + hashsize) - */ - LASSERT(blocksize <= ke->ke_conf_size); - LASSERT(sizeof(*khdr) >= blocksize && sizeof(*khdr) % blocksize == 0); - LASSERT(token->len >= sizeof(*khdr) + blocksize + sizeof(*khdr) + 16); - - /* - * clear text layout for checksum: - * ------------------------------------------ - * | confounder | clear pages | krb5 header | - * ------------------------------------------ - */ - data_desc[0].data = conf; - data_desc[0].len = ke->ke_conf_size; - - /* compute checksum */ - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyi, - khdr, 1, data_desc, - desc->bd_iov_count, desc->bd_iov, - &cksum)) - return GSS_S_FAILURE; - LASSERT(cksum.len >= ke->ke_hash_size); - - /* - * clear text layout for encryption: - * ------------------------------------------ - * | confounder | clear pages | krb5 header | - * ------------------------------------------ - * | | | - * ---------- (cipher pages) | - * result token: | | - * ------------------------------------------- - * | krb5 header | cipher text | cipher text | - * ------------------------------------------- - */ - data_desc[0].data = conf; - data_desc[0].len = ke->ke_conf_size; - - cipher.data = (__u8 *) (khdr + 1); - cipher.len = blocksize + sizeof(*khdr); - - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - LBUG(); - rc = 0; - } else { - rc = krb5_encrypt_bulk(kctx->kc_keye.kb_tfm, khdr, - conf, desc, &cipher, adj_nob); - } - - if (rc != 0) { - rawobj_free(&cksum); - return GSS_S_FAILURE; - } - - /* fill in checksum */ - LASSERT(token->len >= sizeof(*khdr) + cipher.len + ke->ke_hash_size); - memcpy((char *)(khdr + 1) + cipher.len, - cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size); - rawobj_free(&cksum); - - /* final token length */ - token->len = sizeof(*khdr) + cipher.len + ke->ke_hash_size; - return GSS_S_COMPLETE; -} - -static -__u32 gss_unwrap_kerberos(struct gss_ctx *gctx, - rawobj_t *gsshdr, - rawobj_t *token, - rawobj_t *msg) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - unsigned char *tmpbuf; - int blocksize, bodysize; - rawobj_t cksum = RAWOBJ_EMPTY; - rawobj_t cipher_in, plain_out; - rawobj_t hash_objs[3]; - int rc = 0; - __u32 major; - - LASSERT(ke); - - if (token->len < sizeof(*khdr)) { - CERROR("short signature: %u\n", token->len); - return GSS_S_DEFECTIVE_TOKEN; - } - - khdr = (struct krb5_header *) token->data; - - major = verify_krb5_header(kctx, khdr, 1); - if (major != GSS_S_COMPLETE) { - CERROR("bad krb5 header\n"); - return major; - } - - /* block size */ - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - LASSERT(kctx->kc_keye.kb_tfm == NULL); - blocksize = 1; - } else { - LASSERT(kctx->kc_keye.kb_tfm); - blocksize = crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm); - } - - /* expected token layout: - * ---------------------------------------- - * | krb5 header | cipher text | checksum | - * ---------------------------------------- - */ - bodysize = token->len - sizeof(*khdr) - ke->ke_hash_size; - - if (bodysize % blocksize) { - CERROR("odd bodysize %d\n", bodysize); - return GSS_S_DEFECTIVE_TOKEN; - } - - if (bodysize <= ke->ke_conf_size + sizeof(*khdr)) { - CERROR("incomplete token: bodysize %d\n", bodysize); - return GSS_S_DEFECTIVE_TOKEN; - } - - if (msg->len < bodysize - ke->ke_conf_size - sizeof(*khdr)) { - CERROR("buffer too small: %u, require %d\n", - msg->len, bodysize - ke->ke_conf_size); - return GSS_S_FAILURE; - } - - /* decrypting */ - OBD_ALLOC_LARGE(tmpbuf, bodysize); - if (!tmpbuf) - return GSS_S_FAILURE; - - major = GSS_S_FAILURE; - - cipher_in.data = (__u8 *) (khdr + 1); - cipher_in.len = bodysize; - plain_out.data = tmpbuf; - plain_out.len = bodysize; - - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - rawobj_t arc4_keye; - struct crypto_blkcipher *arc4_tfm; - - cksum.data = token->data + token->len - ke->ke_hash_size; - cksum.len = ke->ke_hash_size; - - if (krb5_make_checksum(ENCTYPE_ARCFOUR_HMAC, &kctx->kc_keyi, - NULL, 1, &cksum, 0, NULL, &arc4_keye)) { - CERROR("failed to obtain arc4 enc key\n"); - GOTO(arc4_out, rc = -EACCES); - } - - arc4_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, 0); - if (IS_ERR(arc4_tfm)) { - CERROR("failed to alloc tfm arc4 in ECB mode\n"); - GOTO(arc4_out_key, rc = -EACCES); - } - - if (crypto_blkcipher_setkey(arc4_tfm, - arc4_keye.data, arc4_keye.len)) { - CERROR("failed to set arc4 key, len %d\n", - arc4_keye.len); - GOTO(arc4_out_tfm, rc = -EACCES); - } - - rc = krb5_encrypt_rawobjs(arc4_tfm, 1, - 1, &cipher_in, &plain_out, 0); -arc4_out_tfm: - crypto_free_blkcipher(arc4_tfm); -arc4_out_key: - rawobj_free(&arc4_keye); -arc4_out: - cksum = RAWOBJ_EMPTY; - } else { - rc = krb5_encrypt_rawobjs(kctx->kc_keye.kb_tfm, 0, - 1, &cipher_in, &plain_out, 0); - } - - if (rc != 0) { - CERROR("error decrypt\n"); - goto out_free; - } - LASSERT(plain_out.len == bodysize); - - /* expected clear text layout: - * ----------------------------------------- - * | confounder | clear msgs | krb5 header | - * ----------------------------------------- - */ - - /* verify krb5 header in token is not modified */ - if (memcmp(khdr, plain_out.data + plain_out.len - sizeof(*khdr), - sizeof(*khdr))) { - CERROR("decrypted krb5 header mismatch\n"); - goto out_free; - } - - /* verify checksum, compose clear text as layout: - * ------------------------------------------------------ - * | confounder | gss header | clear msgs | krb5 header | - * ------------------------------------------------------ - */ - hash_objs[0].len = ke->ke_conf_size; - hash_objs[0].data = plain_out.data; - hash_objs[1].len = gsshdr->len; - hash_objs[1].data = gsshdr->data; - hash_objs[2].len = plain_out.len - ke->ke_conf_size - sizeof(*khdr); - hash_objs[2].data = plain_out.data + ke->ke_conf_size; - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyi, - khdr, 3, hash_objs, 0, NULL, &cksum)) - goto out_free; - - LASSERT(cksum.len >= ke->ke_hash_size); - if (memcmp((char *)(khdr + 1) + bodysize, - cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size)) { - CERROR("checksum mismatch\n"); - goto out_free; - } - - msg->len = bodysize - ke->ke_conf_size - sizeof(*khdr); - memcpy(msg->data, tmpbuf + ke->ke_conf_size, msg->len); - - major = GSS_S_COMPLETE; -out_free: - OBD_FREE_LARGE(tmpbuf, bodysize); - rawobj_free(&cksum); - return major; -} - -static -__u32 gss_unwrap_bulk_kerberos(struct gss_ctx *gctx, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, int adj_nob) -{ - struct krb5_ctx *kctx = gctx->internal_ctx_id; - struct krb5_enctype *ke = &enctypes[kctx->kc_enctype]; - struct krb5_header *khdr; - int blocksize; - rawobj_t cksum = RAWOBJ_EMPTY; - rawobj_t cipher, plain; - rawobj_t data_desc[1]; - int rc; - __u32 major; - - LASSERT(ke); - - if (token->len < sizeof(*khdr)) { - CERROR("short signature: %u\n", token->len); - return GSS_S_DEFECTIVE_TOKEN; - } - - khdr = (struct krb5_header *) token->data; - - major = verify_krb5_header(kctx, khdr, 1); - if (major != GSS_S_COMPLETE) { - CERROR("bad krb5 header\n"); - return major; - } - - /* block size */ - if (kctx->kc_enctype == ENCTYPE_ARCFOUR_HMAC) { - LASSERT(kctx->kc_keye.kb_tfm == NULL); - blocksize = 1; - LBUG(); - } else { - LASSERT(kctx->kc_keye.kb_tfm); - blocksize = crypto_blkcipher_blocksize(kctx->kc_keye.kb_tfm); - } - LASSERT(sizeof(*khdr) >= blocksize && sizeof(*khdr) % blocksize == 0); - - /* - * token format is expected as: - * ----------------------------------------------- - * | krb5 header | head/tail cipher text | cksum | - * ----------------------------------------------- - */ - if (token->len < sizeof(*khdr) + blocksize + sizeof(*khdr) + - ke->ke_hash_size) { - CERROR("short token size: %u\n", token->len); - return GSS_S_DEFECTIVE_TOKEN; - } - - cipher.data = (__u8 *) (khdr + 1); - cipher.len = blocksize + sizeof(*khdr); - plain.data = cipher.data; - plain.len = cipher.len; - - rc = krb5_decrypt_bulk(kctx->kc_keye.kb_tfm, khdr, - desc, &cipher, &plain, adj_nob); - if (rc) - return GSS_S_DEFECTIVE_TOKEN; - - /* - * verify checksum, compose clear text as layout: - * ------------------------------------------ - * | confounder | clear pages | krb5 header | - * ------------------------------------------ - */ - data_desc[0].data = plain.data; - data_desc[0].len = blocksize; - - if (krb5_make_checksum(kctx->kc_enctype, &kctx->kc_keyi, - khdr, 1, data_desc, - desc->bd_iov_count, desc->bd_iov, - &cksum)) - return GSS_S_FAILURE; - LASSERT(cksum.len >= ke->ke_hash_size); - - if (memcmp(plain.data + blocksize + sizeof(*khdr), - cksum.data + cksum.len - ke->ke_hash_size, - ke->ke_hash_size)) { - CERROR("checksum mismatch\n"); - rawobj_free(&cksum); - return GSS_S_BAD_SIG; - } - - rawobj_free(&cksum); - return GSS_S_COMPLETE; -} - -int gss_display_kerberos(struct gss_ctx *ctx, - char *buf, - int bufsize) -{ - struct krb5_ctx *kctx = ctx->internal_ctx_id; - int written; - - written = snprintf(buf, bufsize, "krb5 (%s)", - enctype2str(kctx->kc_enctype)); - return written; -} - -static struct gss_api_ops gss_kerberos_ops = { - .gss_import_sec_context = gss_import_sec_context_kerberos, - .gss_copy_reverse_context = gss_copy_reverse_context_kerberos, - .gss_inquire_context = gss_inquire_context_kerberos, - .gss_get_mic = gss_get_mic_kerberos, - .gss_verify_mic = gss_verify_mic_kerberos, - .gss_wrap = gss_wrap_kerberos, - .gss_unwrap = gss_unwrap_kerberos, - .gss_prep_bulk = gss_prep_bulk_kerberos, - .gss_wrap_bulk = gss_wrap_bulk_kerberos, - .gss_unwrap_bulk = gss_unwrap_bulk_kerberos, - .gss_delete_sec_context = gss_delete_sec_context_kerberos, - .gss_display = gss_display_kerberos, -}; - -static struct subflavor_desc gss_kerberos_sfs[] = { - { - .sf_subflavor = SPTLRPC_SUBFLVR_KRB5N, - .sf_qop = 0, - .sf_service = SPTLRPC_SVC_NULL, - .sf_name = "krb5n" - }, - { - .sf_subflavor = SPTLRPC_SUBFLVR_KRB5A, - .sf_qop = 0, - .sf_service = SPTLRPC_SVC_AUTH, - .sf_name = "krb5a" - }, - { - .sf_subflavor = SPTLRPC_SUBFLVR_KRB5I, - .sf_qop = 0, - .sf_service = SPTLRPC_SVC_INTG, - .sf_name = "krb5i" - }, - { - .sf_subflavor = SPTLRPC_SUBFLVR_KRB5P, - .sf_qop = 0, - .sf_service = SPTLRPC_SVC_PRIV, - .sf_name = "krb5p" - }, -}; - -/* - * currently we leave module owner NULL - */ -static struct gss_api_mech gss_kerberos_mech = { - .gm_owner = NULL, /*THIS_MODULE, */ - .gm_name = "krb5", - .gm_oid = (rawobj_t) - {9, "\052\206\110\206\367\022\001\002\002"}, - .gm_ops = &gss_kerberos_ops, - .gm_sf_num = 4, - .gm_sfs = gss_kerberos_sfs, -}; - -int __init init_kerberos_module(void) -{ - int status; - - spin_lock_init(&krb5_seq_lock); - - status = lgss_mech_register(&gss_kerberos_mech); - if (status) - CERROR("Failed to register kerberos gss mechanism!\n"); - return status; -} - -void __exit cleanup_kerberos_module(void) -{ - lgss_mech_unregister(&gss_kerberos_mech); -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_mech_switch.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_mech_switch.c deleted file mode 100644 index 99462e085da7..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_mech_switch.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * linux/net/sunrpc/gss_mech_switch.c - * - * Copyright (c) 2001 The Regents of the University of Michigan. - * All rights reserved. - * - * J. Bruce Fields - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -static LIST_HEAD(registered_mechs); -static DEFINE_SPINLOCK(registered_mechs_lock); - -int lgss_mech_register(struct gss_api_mech *gm) -{ - spin_lock(®istered_mechs_lock); - list_add(&gm->gm_list, ®istered_mechs); - spin_unlock(®istered_mechs_lock); - CWARN("Register %s mechanism\n", gm->gm_name); - return 0; -} - -void lgss_mech_unregister(struct gss_api_mech *gm) -{ - spin_lock(®istered_mechs_lock); - list_del(&gm->gm_list); - spin_unlock(®istered_mechs_lock); - CWARN("Unregister %s mechanism\n", gm->gm_name); -} - - -struct gss_api_mech *lgss_mech_get(struct gss_api_mech *gm) -{ - __module_get(gm->gm_owner); - return gm; -} - -struct gss_api_mech *lgss_name_to_mech(char *name) -{ - struct gss_api_mech *pos, *gm = NULL; - - spin_lock(®istered_mechs_lock); - list_for_each_entry(pos, ®istered_mechs, gm_list) { - if (0 == strcmp(name, pos->gm_name)) { - if (!try_module_get(pos->gm_owner)) - continue; - gm = pos; - break; - } - } - spin_unlock(®istered_mechs_lock); - return gm; - -} - -static inline -int mech_supports_subflavor(struct gss_api_mech *gm, __u32 subflavor) -{ - int i; - - for (i = 0; i < gm->gm_sf_num; i++) { - if (gm->gm_sfs[i].sf_subflavor == subflavor) - return 1; - } - return 0; -} - -struct gss_api_mech *lgss_subflavor_to_mech(__u32 subflavor) -{ - struct gss_api_mech *pos, *gm = NULL; - - spin_lock(®istered_mechs_lock); - list_for_each_entry(pos, ®istered_mechs, gm_list) { - if (!try_module_get(pos->gm_owner)) - continue; - if (!mech_supports_subflavor(pos, subflavor)) { - module_put(pos->gm_owner); - continue; - } - gm = pos; - break; - } - spin_unlock(®istered_mechs_lock); - return gm; -} - -void lgss_mech_put(struct gss_api_mech *gm) -{ - module_put(gm->gm_owner); -} - -/* The mech could probably be determined from the token instead, but it's just - * as easy for now to pass it in. */ -__u32 lgss_import_sec_context(rawobj_t *input_token, - struct gss_api_mech *mech, - struct gss_ctx **ctx_id) -{ - OBD_ALLOC_PTR(*ctx_id); - if (*ctx_id == NULL) - return GSS_S_FAILURE; - - (*ctx_id)->mech_type = lgss_mech_get(mech); - - LASSERT(mech); - LASSERT(mech->gm_ops); - LASSERT(mech->gm_ops->gss_import_sec_context); - return mech->gm_ops->gss_import_sec_context(input_token, *ctx_id); -} - -__u32 lgss_copy_reverse_context(struct gss_ctx *ctx_id, - struct gss_ctx **ctx_id_new) -{ - struct gss_api_mech *mech = ctx_id->mech_type; - __u32 major; - - LASSERT(mech); - - OBD_ALLOC_PTR(*ctx_id_new); - if (*ctx_id_new == NULL) - return GSS_S_FAILURE; - - (*ctx_id_new)->mech_type = lgss_mech_get(mech); - - LASSERT(mech); - LASSERT(mech->gm_ops); - LASSERT(mech->gm_ops->gss_copy_reverse_context); - - major = mech->gm_ops->gss_copy_reverse_context(ctx_id, *ctx_id_new); - if (major != GSS_S_COMPLETE) { - lgss_mech_put(mech); - OBD_FREE_PTR(*ctx_id_new); - *ctx_id_new = NULL; - } - return major; -} - -/* - * this interface is much simplified, currently we only need endtime. - */ -__u32 lgss_inquire_context(struct gss_ctx *context_handle, - unsigned long *endtime) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_inquire_context); - - return context_handle->mech_type->gm_ops - ->gss_inquire_context(context_handle, - endtime); -} - -/* gss_get_mic: compute a mic over message and return mic_token. */ -__u32 lgss_get_mic(struct gss_ctx *context_handle, - int msgcnt, - rawobj_t *msg, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_get_mic); - - return context_handle->mech_type->gm_ops - ->gss_get_mic(context_handle, - msgcnt, - msg, - iovcnt, - iovs, - mic_token); -} - -/* gss_verify_mic: check whether the provided mic_token verifies message. */ -__u32 lgss_verify_mic(struct gss_ctx *context_handle, - int msgcnt, - rawobj_t *msg, - int iovcnt, - lnet_kiov_t *iovs, - rawobj_t *mic_token) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_verify_mic); - - return context_handle->mech_type->gm_ops - ->gss_verify_mic(context_handle, - msgcnt, - msg, - iovcnt, - iovs, - mic_token); -} - -__u32 lgss_wrap(struct gss_ctx *context_handle, - rawobj_t *gsshdr, - rawobj_t *msg, - int msg_buflen, - rawobj_t *out_token) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_wrap); - - return context_handle->mech_type->gm_ops - ->gss_wrap(context_handle, gsshdr, msg, msg_buflen, out_token); -} - -__u32 lgss_unwrap(struct gss_ctx *context_handle, - rawobj_t *gsshdr, - rawobj_t *token, - rawobj_t *out_msg) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_unwrap); - - return context_handle->mech_type->gm_ops - ->gss_unwrap(context_handle, gsshdr, token, out_msg); -} - - -__u32 lgss_prep_bulk(struct gss_ctx *context_handle, - struct ptlrpc_bulk_desc *desc) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_prep_bulk); - - return context_handle->mech_type->gm_ops - ->gss_prep_bulk(context_handle, desc); -} - -__u32 lgss_wrap_bulk(struct gss_ctx *context_handle, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_wrap_bulk); - - return context_handle->mech_type->gm_ops - ->gss_wrap_bulk(context_handle, desc, token, adj_nob); -} - -__u32 lgss_unwrap_bulk(struct gss_ctx *context_handle, - struct ptlrpc_bulk_desc *desc, - rawobj_t *token, - int adj_nob) -{ - LASSERT(context_handle); - LASSERT(context_handle->mech_type); - LASSERT(context_handle->mech_type->gm_ops); - LASSERT(context_handle->mech_type->gm_ops->gss_unwrap_bulk); - - return context_handle->mech_type->gm_ops - ->gss_unwrap_bulk(context_handle, desc, token, adj_nob); -} - -/* gss_delete_sec_context: free all resources associated with context_handle. - * Note this differs from the RFC 2744-specified prototype in that we don't - * bother returning an output token, since it would never be used anyway. */ - -__u32 lgss_delete_sec_context(struct gss_ctx **context_handle) -{ - struct gss_api_mech *mech; - - CDEBUG(D_SEC, "deleting %p\n", *context_handle); - - if (!*context_handle) - return(GSS_S_NO_CONTEXT); - - mech = (*context_handle)->mech_type; - if ((*context_handle)->internal_ctx_id != 0) { - LASSERT(mech); - LASSERT(mech->gm_ops); - LASSERT(mech->gm_ops->gss_delete_sec_context); - mech->gm_ops->gss_delete_sec_context( - (*context_handle)->internal_ctx_id); - } - if (mech) - lgss_mech_put(mech); - - OBD_FREE_PTR(*context_handle); - *context_handle=NULL; - return GSS_S_COMPLETE; -} - -int lgss_display(struct gss_ctx *ctx, - char *buf, - int bufsize) -{ - LASSERT(ctx); - LASSERT(ctx->mech_type); - LASSERT(ctx->mech_type->gm_ops); - LASSERT(ctx->mech_type->gm_ops->gss_display); - - return ctx->mech_type->gm_ops->gss_display(ctx, buf, bufsize); -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_pipefs.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_pipefs.c deleted file mode 100644 index 3be5bc14c4ed..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_pipefs.c +++ /dev/null @@ -1,1233 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * linux/net/sunrpc/auth_gss.c - * - * RPCSEC_GSS client authentication. - * - * Copyright (c) 2000 The Regents of the University of Michigan. - * All rights reserved. - * - * Dug Song - * Andy Adamson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include -#include -#include -struct rpc_clnt; /* for rpc_pipefs */ -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -static struct ptlrpc_sec_policy gss_policy_pipefs; -static struct ptlrpc_ctx_ops gss_pipefs_ctxops; - -static int gss_cli_ctx_refresh_pf(struct ptlrpc_cli_ctx *ctx); - -static int gss_sec_pipe_upcall_init(struct gss_sec *gsec) -{ - return 0; -} - -static void gss_sec_pipe_upcall_fini(struct gss_sec *gsec) -{ -} - -/**************************************** - * internal context helpers * - ****************************************/ - -static -struct ptlrpc_cli_ctx *ctx_create_pf(struct ptlrpc_sec *sec, - struct vfs_cred *vcred) -{ - struct gss_cli_ctx *gctx; - int rc; - - OBD_ALLOC_PTR(gctx); - if (gctx == NULL) - return NULL; - - rc = gss_cli_ctx_init_common(sec, &gctx->gc_base, - &gss_pipefs_ctxops, vcred); - if (rc) { - OBD_FREE_PTR(gctx); - return NULL; - } - - return &gctx->gc_base; -} - -static -void ctx_destroy_pf(struct ptlrpc_sec *sec, struct ptlrpc_cli_ctx *ctx) -{ - struct gss_cli_ctx *gctx = ctx2gctx(ctx); - - if (gss_cli_ctx_fini_common(sec, ctx)) - return; - - OBD_FREE_PTR(gctx); - - atomic_dec(&sec->ps_nctx); - sptlrpc_sec_put(sec); -} - -static -void ctx_enhash_pf(struct ptlrpc_cli_ctx *ctx, struct hlist_head *hash) -{ - set_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags); - atomic_inc(&ctx->cc_refcount); - hlist_add_head(&ctx->cc_cache, hash); -} - -/* - * caller must hold spinlock - */ -static -void ctx_unhash_pf(struct ptlrpc_cli_ctx *ctx, struct hlist_head *freelist) -{ - assert_spin_locked(&ctx->cc_sec->ps_lock); - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags)); - LASSERT(!hlist_unhashed(&ctx->cc_cache)); - - clear_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags); - - if (atomic_dec_and_test(&ctx->cc_refcount)) { - __hlist_del(&ctx->cc_cache); - hlist_add_head(&ctx->cc_cache, freelist); - } else { - hlist_del_init(&ctx->cc_cache); - } -} - -/* - * return 1 if the context is dead. - */ -static -int ctx_check_death_pf(struct ptlrpc_cli_ctx *ctx, - struct hlist_head *freelist) -{ - if (cli_ctx_check_death(ctx)) { - if (freelist) - ctx_unhash_pf(ctx, freelist); - return 1; - } - - return 0; -} - -static inline -int ctx_check_death_locked_pf(struct ptlrpc_cli_ctx *ctx, - struct hlist_head *freelist) -{ - LASSERT(ctx->cc_sec); - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags)); - - return ctx_check_death_pf(ctx, freelist); -} - -static inline -int ctx_match_pf(struct ptlrpc_cli_ctx *ctx, struct vfs_cred *vcred) -{ - /* a little bit optimization for null policy */ - if (!ctx->cc_ops->match) - return 1; - - return ctx->cc_ops->match(ctx, vcred); -} - -static -void ctx_list_destroy_pf(struct hlist_head *head) -{ - struct ptlrpc_cli_ctx *ctx; - - while (!hlist_empty(head)) { - ctx = hlist_entry(head->first, struct ptlrpc_cli_ctx, - cc_cache); - - LASSERT(atomic_read(&ctx->cc_refcount) == 0); - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, - &ctx->cc_flags) == 0); - - hlist_del_init(&ctx->cc_cache); - ctx_destroy_pf(ctx->cc_sec, ctx); - } -} - -/**************************************** - * context apis * - ****************************************/ - -static -int gss_cli_ctx_validate_pf(struct ptlrpc_cli_ctx *ctx) -{ - if (ctx_check_death_pf(ctx, NULL)) - return 1; - if (cli_ctx_is_ready(ctx)) - return 0; - return 1; -} - -static -void gss_cli_ctx_die_pf(struct ptlrpc_cli_ctx *ctx, int grace) -{ - LASSERT(ctx->cc_sec); - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - cli_ctx_expire(ctx); - - spin_lock(&ctx->cc_sec->ps_lock); - - if (test_and_clear_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags)) { - LASSERT(!hlist_unhashed(&ctx->cc_cache)); - LASSERT(atomic_read(&ctx->cc_refcount) > 1); - - hlist_del_init(&ctx->cc_cache); - if (atomic_dec_and_test(&ctx->cc_refcount)) - LBUG(); - } - - spin_unlock(&ctx->cc_sec->ps_lock); -} - -/**************************************** - * reverse context installation * - ****************************************/ - -static inline -unsigned int ctx_hash_index(int hashsize, __u64 key) -{ - return (unsigned int) (key & ((__u64) hashsize - 1)); -} - -static -void gss_sec_ctx_replace_pf(struct gss_sec *gsec, - struct ptlrpc_cli_ctx *new) -{ - struct gss_sec_pipefs *gsec_pf; - struct ptlrpc_cli_ctx *ctx; - struct hlist_node *next; - HLIST_HEAD(freelist); - unsigned int hash; - - gsec_pf = container_of(gsec, struct gss_sec_pipefs, gsp_base); - - hash = ctx_hash_index(gsec_pf->gsp_chash_size, - (__u64) new->cc_vcred.vc_uid); - LASSERT(hash < gsec_pf->gsp_chash_size); - - spin_lock(&gsec->gs_base.ps_lock); - - hlist_for_each_entry_safe(ctx, next, - &gsec_pf->gsp_chash[hash], cc_cache) { - if (!ctx_match_pf(ctx, &new->cc_vcred)) - continue; - - cli_ctx_expire(ctx); - ctx_unhash_pf(ctx, &freelist); - break; - } - - ctx_enhash_pf(new, &gsec_pf->gsp_chash[hash]); - - spin_unlock(&gsec->gs_base.ps_lock); - - ctx_list_destroy_pf(&freelist); -} - -static -int gss_install_rvs_cli_ctx_pf(struct gss_sec *gsec, - struct ptlrpc_svc_ctx *svc_ctx) -{ - struct vfs_cred vcred; - struct ptlrpc_cli_ctx *cli_ctx; - int rc; - - vcred.vc_uid = 0; - vcred.vc_gid = 0; - - cli_ctx = ctx_create_pf(&gsec->gs_base, &vcred); - if (!cli_ctx) - return -ENOMEM; - - rc = gss_copy_rvc_cli_ctx(cli_ctx, svc_ctx); - if (rc) { - ctx_destroy_pf(cli_ctx->cc_sec, cli_ctx); - return rc; - } - - gss_sec_ctx_replace_pf(gsec, cli_ctx); - return 0; -} - -static -void gss_ctx_cache_gc_pf(struct gss_sec_pipefs *gsec_pf, - struct hlist_head *freelist) -{ - struct ptlrpc_sec *sec; - struct ptlrpc_cli_ctx *ctx; - struct hlist_node *next; - int i; - - sec = &gsec_pf->gsp_base.gs_base; - - CDEBUG(D_SEC, "do gc on sec %s@%p\n", sec->ps_policy->sp_name, sec); - - for (i = 0; i < gsec_pf->gsp_chash_size; i++) { - hlist_for_each_entry_safe(ctx, next, - &gsec_pf->gsp_chash[i], cc_cache) - ctx_check_death_locked_pf(ctx, freelist); - } - - sec->ps_gc_next = cfs_time_current_sec() + sec->ps_gc_interval; -} - -static -struct ptlrpc_sec* gss_sec_create_pf(struct obd_import *imp, - struct ptlrpc_svc_ctx *ctx, - struct sptlrpc_flavor *sf) -{ - struct gss_sec_pipefs *gsec_pf; - int alloc_size, hash_size, i; - -#define GSS_SEC_PIPEFS_CTX_HASH_SIZE (32) - - if (ctx || - sf->sf_flags & (PTLRPC_SEC_FL_ROOTONLY | PTLRPC_SEC_FL_REVERSE)) - hash_size = 1; - else - hash_size = GSS_SEC_PIPEFS_CTX_HASH_SIZE; - - alloc_size = sizeof(*gsec_pf) + - sizeof(struct hlist_head) * hash_size; - - OBD_ALLOC(gsec_pf, alloc_size); - if (!gsec_pf) - return NULL; - - gsec_pf->gsp_chash_size = hash_size; - for (i = 0; i < hash_size; i++) - INIT_HLIST_HEAD(&gsec_pf->gsp_chash[i]); - - if (gss_sec_create_common(&gsec_pf->gsp_base, &gss_policy_pipefs, - imp, ctx, sf)) - goto err_free; - - if (ctx == NULL) { - if (gss_sec_pipe_upcall_init(&gsec_pf->gsp_base)) - goto err_destroy; - } else { - if (gss_install_rvs_cli_ctx_pf(&gsec_pf->gsp_base, ctx)) - goto err_destroy; - } - - return &gsec_pf->gsp_base.gs_base; - -err_destroy: - gss_sec_destroy_common(&gsec_pf->gsp_base); -err_free: - OBD_FREE(gsec_pf, alloc_size); - return NULL; -} - -static -void gss_sec_destroy_pf(struct ptlrpc_sec *sec) -{ - struct gss_sec_pipefs *gsec_pf; - struct gss_sec *gsec; - - CWARN("destroy %s@%p\n", sec->ps_policy->sp_name, sec); - - gsec = container_of(sec, struct gss_sec, gs_base); - gsec_pf = container_of(gsec, struct gss_sec_pipefs, gsp_base); - - LASSERT(gsec_pf->gsp_chash); - LASSERT(gsec_pf->gsp_chash_size); - - gss_sec_pipe_upcall_fini(gsec); - - gss_sec_destroy_common(gsec); - - OBD_FREE(gsec, sizeof(*gsec_pf) + - sizeof(struct hlist_head) * gsec_pf->gsp_chash_size); -} - -static -struct ptlrpc_cli_ctx * gss_sec_lookup_ctx_pf(struct ptlrpc_sec *sec, - struct vfs_cred *vcred, - int create, int remove_dead) -{ - struct gss_sec *gsec; - struct gss_sec_pipefs *gsec_pf; - struct ptlrpc_cli_ctx *ctx = NULL, *new = NULL; - struct hlist_head *hash_head; - struct hlist_node *next; - HLIST_HEAD(freelist); - unsigned int hash, gc = 0, found = 0; - - might_sleep(); - - gsec = container_of(sec, struct gss_sec, gs_base); - gsec_pf = container_of(gsec, struct gss_sec_pipefs, gsp_base); - - hash = ctx_hash_index(gsec_pf->gsp_chash_size, - (__u64) vcred->vc_uid); - hash_head = &gsec_pf->gsp_chash[hash]; - LASSERT(hash < gsec_pf->gsp_chash_size); - -retry: - spin_lock(&sec->ps_lock); - - /* gc_next == 0 means never do gc */ - if (remove_dead && sec->ps_gc_next && - cfs_time_after(cfs_time_current_sec(), sec->ps_gc_next)) { - gss_ctx_cache_gc_pf(gsec_pf, &freelist); - gc = 1; - } - - hlist_for_each_entry_safe(ctx, next, hash_head, cc_cache) { - if (gc == 0 && - ctx_check_death_locked_pf(ctx, - remove_dead ? &freelist : NULL)) - continue; - - if (ctx_match_pf(ctx, vcred)) { - found = 1; - break; - } - } - - if (found) { - if (new && new != ctx) { - /* lost the race, just free it */ - hlist_add_head(&new->cc_cache, &freelist); - new = NULL; - } - - /* hot node, move to head */ - if (hash_head->first != &ctx->cc_cache) { - __hlist_del(&ctx->cc_cache); - hlist_add_head(&ctx->cc_cache, hash_head); - } - } else { - /* don't allocate for reverse sec */ - if (sec_is_reverse(sec)) { - spin_unlock(&sec->ps_lock); - return NULL; - } - - if (new) { - ctx_enhash_pf(new, hash_head); - ctx = new; - } else if (create) { - spin_unlock(&sec->ps_lock); - new = ctx_create_pf(sec, vcred); - if (new) { - clear_bit(PTLRPC_CTX_NEW_BIT, &new->cc_flags); - goto retry; - } - } else { - ctx = NULL; - } - } - - /* hold a ref */ - if (ctx) - atomic_inc(&ctx->cc_refcount); - - spin_unlock(&sec->ps_lock); - - /* the allocator of the context must give the first push to refresh */ - if (new) { - LASSERT(new == ctx); - gss_cli_ctx_refresh_pf(new); - } - - ctx_list_destroy_pf(&freelist); - return ctx; -} - -static -void gss_sec_release_ctx_pf(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx, - int sync) -{ - LASSERT(test_bit(PTLRPC_CTX_CACHED_BIT, &ctx->cc_flags) == 0); - LASSERT(hlist_unhashed(&ctx->cc_cache)); - - /* if required async, we must clear the UPTODATE bit to prevent extra - * rpcs during destroy procedure. */ - if (!sync) - clear_bit(PTLRPC_CTX_UPTODATE_BIT, &ctx->cc_flags); - - /* destroy this context */ - ctx_destroy_pf(sec, ctx); -} - -/* - * @uid: which user. "-1" means flush all. - * @grace: mark context DEAD, allow graceful destroy like notify - * server side, etc. - * @force: also flush busy entries. - * - * return the number of busy context encountered. - * - * In any cases, never touch "eternal" contexts. - */ -static -int gss_sec_flush_ctx_cache_pf(struct ptlrpc_sec *sec, - uid_t uid, - int grace, int force) -{ - struct gss_sec *gsec; - struct gss_sec_pipefs *gsec_pf; - struct ptlrpc_cli_ctx *ctx; - struct hlist_node *next; - HLIST_HEAD(freelist); - int i, busy = 0; - - might_sleep_if(grace); - - gsec = container_of(sec, struct gss_sec, gs_base); - gsec_pf = container_of(gsec, struct gss_sec_pipefs, gsp_base); - - spin_lock(&sec->ps_lock); - for (i = 0; i < gsec_pf->gsp_chash_size; i++) { - hlist_for_each_entry_safe(ctx, next, - &gsec_pf->gsp_chash[i], - cc_cache) { - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - - if (uid != -1 && uid != ctx->cc_vcred.vc_uid) - continue; - - if (atomic_read(&ctx->cc_refcount) > 1) { - busy++; - if (!force) - continue; - - CWARN("flush busy(%d) ctx %p(%u->%s) by force, " - "grace %d\n", - atomic_read(&ctx->cc_refcount), - ctx, ctx->cc_vcred.vc_uid, - sec2target_str(ctx->cc_sec), grace); - } - ctx_unhash_pf(ctx, &freelist); - - set_bit(PTLRPC_CTX_DEAD_BIT, &ctx->cc_flags); - if (!grace) - clear_bit(PTLRPC_CTX_UPTODATE_BIT, - &ctx->cc_flags); - } - } - spin_unlock(&sec->ps_lock); - - ctx_list_destroy_pf(&freelist); - return busy; -} - -/**************************************** - * service apis * - ****************************************/ - -static -int gss_svc_accept_pf(struct ptlrpc_request *req) -{ - return gss_svc_accept(&gss_policy_pipefs, req); -} - -static -int gss_svc_install_rctx_pf(struct obd_import *imp, - struct ptlrpc_svc_ctx *ctx) -{ - struct ptlrpc_sec *sec; - int rc; - - sec = sptlrpc_import_sec_ref(imp); - LASSERT(sec); - rc = gss_install_rvs_cli_ctx_pf(sec2gsec(sec), ctx); - - sptlrpc_sec_put(sec); - return rc; -} - -/**************************************** - * rpc_pipefs definitions * - ****************************************/ - -#define LUSTRE_PIPE_ROOT "/lustre" -#define LUSTRE_PIPE_KRB5 LUSTRE_PIPE_ROOT"/krb5" - -struct gss_upcall_msg_data { - __u32 gum_seq; - __u32 gum_uid; - __u32 gum_gid; - __u32 gum_svc; /* MDS/OSS... */ - __u64 gum_nid; /* peer NID */ - __u8 gum_obd[64]; /* client obd name */ -}; - -struct gss_upcall_msg { - struct rpc_pipe_msg gum_base; - atomic_t gum_refcount; - struct list_head gum_list; - __u32 gum_mechidx; - struct gss_sec *gum_gsec; - struct gss_cli_ctx *gum_gctx; - struct gss_upcall_msg_data gum_data; -}; - -static atomic_t upcall_seq = ATOMIC_INIT(0); - -static inline -__u32 upcall_get_sequence(void) -{ - return (__u32) atomic_inc_return(&upcall_seq); -} - -enum mech_idx_t { - MECH_KRB5 = 0, - MECH_MAX -}; - -static inline -__u32 mech_name2idx(const char *name) -{ - LASSERT(!strcmp(name, "krb5")); - return MECH_KRB5; -} - -/* pipefs dentries for each mechanisms */ -static struct dentry *de_pipes[MECH_MAX] = { NULL, }; -/* all upcall messages linked here */ -static struct list_head upcall_lists[MECH_MAX]; -/* and protected by this */ -static spinlock_t upcall_locks[MECH_MAX]; - -static inline -void upcall_list_lock(int idx) -{ - spin_lock(&upcall_locks[idx]); -} - -static inline -void upcall_list_unlock(int idx) -{ - spin_unlock(&upcall_locks[idx]); -} - -static -void upcall_msg_enlist(struct gss_upcall_msg *msg) -{ - __u32 idx = msg->gum_mechidx; - - upcall_list_lock(idx); - list_add(&msg->gum_list, &upcall_lists[idx]); - upcall_list_unlock(idx); -} - -static -void upcall_msg_delist(struct gss_upcall_msg *msg) -{ - __u32 idx = msg->gum_mechidx; - - upcall_list_lock(idx); - list_del_init(&msg->gum_list); - upcall_list_unlock(idx); -} - -/**************************************** - * rpc_pipefs upcall helpers * - ****************************************/ - -static -void gss_release_msg(struct gss_upcall_msg *gmsg) -{ - LASSERT(atomic_read(&gmsg->gum_refcount) > 0); - - if (!atomic_dec_and_test(&gmsg->gum_refcount)) { - return; - } - - if (gmsg->gum_gctx) { - sptlrpc_cli_ctx_wakeup(&gmsg->gum_gctx->gc_base); - sptlrpc_cli_ctx_put(&gmsg->gum_gctx->gc_base, 1); - gmsg->gum_gctx = NULL; - } - - LASSERT(list_empty(&gmsg->gum_list)); - LASSERT(list_empty(&gmsg->gum_base.list)); - OBD_FREE_PTR(gmsg); -} - -static -void gss_unhash_msg_nolock(struct gss_upcall_msg *gmsg) -{ - __u32 idx = gmsg->gum_mechidx; - - LASSERT(idx < MECH_MAX); - assert_spin_locked(&upcall_locks[idx]); - - if (list_empty(&gmsg->gum_list)) - return; - - list_del_init(&gmsg->gum_list); - LASSERT(atomic_read(&gmsg->gum_refcount) > 1); - atomic_dec(&gmsg->gum_refcount); -} - -static -void gss_unhash_msg(struct gss_upcall_msg *gmsg) -{ - __u32 idx = gmsg->gum_mechidx; - - LASSERT(idx < MECH_MAX); - upcall_list_lock(idx); - gss_unhash_msg_nolock(gmsg); - upcall_list_unlock(idx); -} - -static -void gss_msg_fail_ctx(struct gss_upcall_msg *gmsg) -{ - if (gmsg->gum_gctx) { - struct ptlrpc_cli_ctx *ctx = &gmsg->gum_gctx->gc_base; - - LASSERT(atomic_read(&ctx->cc_refcount) > 0); - sptlrpc_cli_ctx_expire(ctx); - set_bit(PTLRPC_CTX_ERROR_BIT, &ctx->cc_flags); - } -} - -static -struct gss_upcall_msg * gss_find_upcall(__u32 mechidx, __u32 seq) -{ - struct gss_upcall_msg *gmsg; - - upcall_list_lock(mechidx); - list_for_each_entry(gmsg, &upcall_lists[mechidx], gum_list) { - if (gmsg->gum_data.gum_seq != seq) - continue; - - LASSERT(atomic_read(&gmsg->gum_refcount) > 0); - LASSERT(gmsg->gum_mechidx == mechidx); - - atomic_inc(&gmsg->gum_refcount); - upcall_list_unlock(mechidx); - return gmsg; - } - upcall_list_unlock(mechidx); - return NULL; -} - -static -int simple_get_bytes(char **buf, __u32 *buflen, void *res, __u32 reslen) -{ - if (*buflen < reslen) { - CERROR("buflen %u < %u\n", *buflen, reslen); - return -EINVAL; - } - - memcpy(res, *buf, reslen); - *buf += reslen; - *buflen -= reslen; - return 0; -} - -/**************************************** - * rpc_pipefs apis * - ****************************************/ - -static -ssize_t gss_pipe_upcall(struct file *filp, struct rpc_pipe_msg *msg, - char *dst, size_t buflen) -{ - char *data = (char *)msg->data + msg->copied; - ssize_t mlen = msg->len; - ssize_t left; - - if (mlen > buflen) - mlen = buflen; - left = copy_to_user(dst, data, mlen); - if (left < 0) { - msg->errno = left; - return left; - } - mlen -= left; - msg->copied += mlen; - msg->errno = 0; - return mlen; -} - -static -ssize_t gss_pipe_downcall(struct file *filp, const char *src, size_t mlen) -{ - struct rpc_inode *rpci = RPC_I(filp->f_dentry->d_inode); - struct gss_upcall_msg *gss_msg; - struct ptlrpc_cli_ctx *ctx; - struct gss_cli_ctx *gctx = NULL; - char *buf, *data; - int datalen; - int timeout, rc; - __u32 mechidx, seq, gss_err; - - mechidx = (__u32) (long) rpci->private; - LASSERT(mechidx < MECH_MAX); - - OBD_ALLOC(buf, mlen); - if (!buf) - return -ENOMEM; - - if (copy_from_user(buf, src, mlen)) { - CERROR("failed copy user space data\n"); - GOTO(out_free, rc = -EFAULT); - } - data = buf; - datalen = mlen; - - /* data passed down format: - * - seq - * - timeout - * - gc_win / error - * - wire_ctx (rawobj) - * - mech_ctx (rawobj) - */ - if (simple_get_bytes(&data, &datalen, &seq, sizeof(seq))) { - CERROR("fail to get seq\n"); - GOTO(out_free, rc = -EFAULT); - } - - gss_msg = gss_find_upcall(mechidx, seq); - if (!gss_msg) { - CERROR("upcall %u has aborted earlier\n", seq); - GOTO(out_free, rc = -EINVAL); - } - - gss_unhash_msg(gss_msg); - gctx = gss_msg->gum_gctx; - LASSERT(gctx); - LASSERT(atomic_read(&gctx->gc_base.cc_refcount) > 0); - - /* timeout is not in use for now */ - if (simple_get_bytes(&data, &datalen, &timeout, sizeof(timeout))) - GOTO(out_msg, rc = -EFAULT); - - /* lgssd signal an error by gc_win == 0 */ - if (simple_get_bytes(&data, &datalen, &gctx->gc_win, - sizeof(gctx->gc_win))) - GOTO(out_msg, rc = -EFAULT); - - if (gctx->gc_win == 0) { - /* followed by: - * - rpc error - * - gss error - */ - if (simple_get_bytes(&data, &datalen, &rc, sizeof(rc))) - GOTO(out_msg, rc = -EFAULT); - if (simple_get_bytes(&data, &datalen, &gss_err,sizeof(gss_err))) - GOTO(out_msg, rc = -EFAULT); - - if (rc == 0 && gss_err == GSS_S_COMPLETE) { - CWARN("both rpc & gss error code not set\n"); - rc = -EPERM; - } - } else { - rawobj_t tmpobj; - - /* handle */ - if (rawobj_extract_local(&tmpobj, (__u32 **) &data, &datalen)) - GOTO(out_msg, rc = -EFAULT); - if (rawobj_dup(&gctx->gc_handle, &tmpobj)) - GOTO(out_msg, rc = -ENOMEM); - - /* mechctx */ - if (rawobj_extract_local(&tmpobj, (__u32 **) &data, &datalen)) - GOTO(out_msg, rc = -EFAULT); - gss_err = lgss_import_sec_context(&tmpobj, - gss_msg->gum_gsec->gs_mech, - &gctx->gc_mechctx); - rc = 0; - } - - if (likely(rc == 0 && gss_err == GSS_S_COMPLETE)) { - gss_cli_ctx_uptodate(gctx); - } else { - ctx = &gctx->gc_base; - sptlrpc_cli_ctx_expire(ctx); - if (rc != -ERESTART || gss_err != GSS_S_COMPLETE) - set_bit(PTLRPC_CTX_ERROR_BIT, &ctx->cc_flags); - - CERROR("refresh ctx %p(uid %d) failed: %d/0x%08x: %s\n", - ctx, ctx->cc_vcred.vc_uid, rc, gss_err, - test_bit(PTLRPC_CTX_ERROR_BIT, &ctx->cc_flags) ? - "fatal error" : "non-fatal"); - } - - rc = mlen; - -out_msg: - gss_release_msg(gss_msg); - -out_free: - OBD_FREE(buf, mlen); - /* FIXME - * hack pipefs: always return asked length unless all following - * downcalls might be messed up. */ - rc = mlen; - return rc; -} - -static -void gss_pipe_destroy_msg(struct rpc_pipe_msg *msg) -{ - struct gss_upcall_msg *gmsg; - struct gss_upcall_msg_data *gumd; - static cfs_time_t ratelimit = 0; - - LASSERT(list_empty(&msg->list)); - - /* normally errno is >= 0 */ - if (msg->errno >= 0) { - return; - } - - gmsg = container_of(msg, struct gss_upcall_msg, gum_base); - gumd = &gmsg->gum_data; - LASSERT(atomic_read(&gmsg->gum_refcount) > 0); - - CERROR("failed msg %p (seq %u, uid %u, svc %u, nid "LPX64", obd %.*s): " - "errno %d\n", msg, gumd->gum_seq, gumd->gum_uid, gumd->gum_svc, - gumd->gum_nid, (int) sizeof(gumd->gum_obd), - gumd->gum_obd, msg->errno); - - atomic_inc(&gmsg->gum_refcount); - gss_unhash_msg(gmsg); - if (msg->errno == -ETIMEDOUT || msg->errno == -EPIPE) { - cfs_time_t now = cfs_time_current_sec(); - - if (cfs_time_after(now, ratelimit)) { - CWARN("upcall timed out, is lgssd running?\n"); - ratelimit = now + 15; - } - } - gss_msg_fail_ctx(gmsg); - gss_release_msg(gmsg); -} - -static -void gss_pipe_release(struct inode *inode) -{ - struct rpc_inode *rpci = RPC_I(inode); - __u32 idx; - - idx = (__u32) (long) rpci->private; - LASSERT(idx < MECH_MAX); - - upcall_list_lock(idx); - while (!list_empty(&upcall_lists[idx])) { - struct gss_upcall_msg *gmsg; - struct gss_upcall_msg_data *gumd; - - gmsg = list_entry(upcall_lists[idx].next, - struct gss_upcall_msg, gum_list); - gumd = &gmsg->gum_data; - LASSERT(list_empty(&gmsg->gum_base.list)); - - CERROR("failing remaining msg %p:seq %u, uid %u, svc %u, " - "nid "LPX64", obd %.*s\n", gmsg, - gumd->gum_seq, gumd->gum_uid, gumd->gum_svc, - gumd->gum_nid, (int) sizeof(gumd->gum_obd), - gumd->gum_obd); - - gmsg->gum_base.errno = -EPIPE; - atomic_inc(&gmsg->gum_refcount); - gss_unhash_msg_nolock(gmsg); - - gss_msg_fail_ctx(gmsg); - - upcall_list_unlock(idx); - gss_release_msg(gmsg); - upcall_list_lock(idx); - } - upcall_list_unlock(idx); -} - -static struct rpc_pipe_ops gss_upcall_ops = { - .upcall = gss_pipe_upcall, - .downcall = gss_pipe_downcall, - .destroy_msg = gss_pipe_destroy_msg, - .release_pipe = gss_pipe_release, -}; - -/**************************************** - * upcall helper functions * - ****************************************/ - -static -int gss_ctx_refresh_pf(struct ptlrpc_cli_ctx *ctx) -{ - struct obd_import *imp; - struct gss_sec *gsec; - struct gss_upcall_msg *gmsg; - int rc = 0; - - might_sleep(); - - LASSERT(ctx->cc_sec); - LASSERT(ctx->cc_sec->ps_import); - LASSERT(ctx->cc_sec->ps_import->imp_obd); - - imp = ctx->cc_sec->ps_import; - if (!imp->imp_connection) { - CERROR("import has no connection set\n"); - return -EINVAL; - } - - gsec = container_of(ctx->cc_sec, struct gss_sec, gs_base); - - OBD_ALLOC_PTR(gmsg); - if (!gmsg) - return -ENOMEM; - - /* initialize pipefs base msg */ - INIT_LIST_HEAD(&gmsg->gum_base.list); - gmsg->gum_base.data = &gmsg->gum_data; - gmsg->gum_base.len = sizeof(gmsg->gum_data); - gmsg->gum_base.copied = 0; - gmsg->gum_base.errno = 0; - - /* init upcall msg */ - atomic_set(&gmsg->gum_refcount, 1); - gmsg->gum_mechidx = mech_name2idx(gsec->gs_mech->gm_name); - gmsg->gum_gsec = gsec; - gmsg->gum_gctx = container_of(sptlrpc_cli_ctx_get(ctx), - struct gss_cli_ctx, gc_base); - gmsg->gum_data.gum_seq = upcall_get_sequence(); - gmsg->gum_data.gum_uid = ctx->cc_vcred.vc_uid; - gmsg->gum_data.gum_gid = 0; /* not used for now */ - gmsg->gum_data.gum_svc = import_to_gss_svc(imp); - gmsg->gum_data.gum_nid = imp->imp_connection->c_peer.nid; - strncpy(gmsg->gum_data.gum_obd, imp->imp_obd->obd_name, - sizeof(gmsg->gum_data.gum_obd)); - - /* This only could happen when sysadmin set it dead/expired - * using lctl by force. */ - if (ctx->cc_flags & PTLRPC_CTX_STATUS_MASK) { - CWARN("ctx %p(%u->%s) was set flags %lx unexpectedly\n", - ctx, ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec), - ctx->cc_flags); - - LASSERT(!(ctx->cc_flags & PTLRPC_CTX_UPTODATE)); - ctx->cc_flags |= PTLRPC_CTX_DEAD | PTLRPC_CTX_ERROR; - - rc = -EIO; - goto err_free; - } - - upcall_msg_enlist(gmsg); - - rc = rpc_queue_upcall(de_pipes[gmsg->gum_mechidx]->d_inode, - &gmsg->gum_base); - if (rc) { - CERROR("rpc_queue_upcall failed: %d\n", rc); - - upcall_msg_delist(gmsg); - goto err_free; - } - - return 0; -err_free: - OBD_FREE_PTR(gmsg); - return rc; -} - -static -int gss_cli_ctx_refresh_pf(struct ptlrpc_cli_ctx *ctx) -{ - /* if we are refreshing for root, also update the reverse - * handle index, do not confuse reverse contexts. */ - if (ctx->cc_vcred.vc_uid == 0) { - struct gss_sec *gsec; - - gsec = container_of(ctx->cc_sec, struct gss_sec, gs_base); - gsec->gs_rvs_hdl = gss_get_next_ctx_index(); - } - - return gss_ctx_refresh_pf(ctx); -} - -/**************************************** - * lustre gss pipefs policy * - ****************************************/ - -static struct ptlrpc_ctx_ops gss_pipefs_ctxops = { - .match = gss_cli_ctx_match, - .refresh = gss_cli_ctx_refresh_pf, - .validate = gss_cli_ctx_validate_pf, - .die = gss_cli_ctx_die_pf, - .sign = gss_cli_ctx_sign, - .verify = gss_cli_ctx_verify, - .seal = gss_cli_ctx_seal, - .unseal = gss_cli_ctx_unseal, - .wrap_bulk = gss_cli_ctx_wrap_bulk, - .unwrap_bulk = gss_cli_ctx_unwrap_bulk, -}; - -static struct ptlrpc_sec_cops gss_sec_pipefs_cops = { - .create_sec = gss_sec_create_pf, - .destroy_sec = gss_sec_destroy_pf, - .kill_sec = gss_sec_kill, - .lookup_ctx = gss_sec_lookup_ctx_pf, - .release_ctx = gss_sec_release_ctx_pf, - .flush_ctx_cache = gss_sec_flush_ctx_cache_pf, - .install_rctx = gss_sec_install_rctx, - .alloc_reqbuf = gss_alloc_reqbuf, - .free_reqbuf = gss_free_reqbuf, - .alloc_repbuf = gss_alloc_repbuf, - .free_repbuf = gss_free_repbuf, - .enlarge_reqbuf = gss_enlarge_reqbuf, -}; - -static struct ptlrpc_sec_sops gss_sec_pipefs_sops = { - .accept = gss_svc_accept_pf, - .invalidate_ctx = gss_svc_invalidate_ctx, - .alloc_rs = gss_svc_alloc_rs, - .authorize = gss_svc_authorize, - .free_rs = gss_svc_free_rs, - .free_ctx = gss_svc_free_ctx, - .unwrap_bulk = gss_svc_unwrap_bulk, - .wrap_bulk = gss_svc_wrap_bulk, - .install_rctx = gss_svc_install_rctx_pf, -}; - -static struct ptlrpc_sec_policy gss_policy_pipefs = { - .sp_owner = THIS_MODULE, - .sp_name = "gss.pipefs", - .sp_policy = SPTLRPC_POLICY_GSS_PIPEFS, - .sp_cops = &gss_sec_pipefs_cops, - .sp_sops = &gss_sec_pipefs_sops, -}; - -static -int __init gss_init_pipefs_upcall(void) -{ - struct dentry *de; - - /* pipe dir */ - de = rpc_mkdir(LUSTRE_PIPE_ROOT, NULL); - if (IS_ERR(de) && PTR_ERR(de) != -EEXIST) { - CERROR("Failed to create gss pipe dir: %ld\n", PTR_ERR(de)); - return PTR_ERR(de); - } - - /* FIXME hack pipefs: dput will sometimes cause oops during module - * unload and lgssd close the pipe fds. */ - - /* krb5 mechanism */ - de = rpc_mkpipe(LUSTRE_PIPE_KRB5, (void *) MECH_KRB5, &gss_upcall_ops, - RPC_PIPE_WAIT_FOR_OPEN); - if (!de || IS_ERR(de)) { - CERROR("failed to make rpc_pipe %s: %ld\n", - LUSTRE_PIPE_KRB5, PTR_ERR(de)); - rpc_rmdir(LUSTRE_PIPE_ROOT); - return PTR_ERR(de); - } - - de_pipes[MECH_KRB5] = de; - INIT_LIST_HEAD(&upcall_lists[MECH_KRB5]); - spin_lock_init(&upcall_locks[MECH_KRB5]); - - return 0; -} - -static -void __exit gss_exit_pipefs_upcall(void) -{ - __u32 i; - - for (i = 0; i < MECH_MAX; i++) { - LASSERT(list_empty(&upcall_lists[i])); - - /* dput pipe dentry here might cause lgssd oops. */ - de_pipes[i] = NULL; - } - - rpc_unlink(LUSTRE_PIPE_KRB5); - rpc_rmdir(LUSTRE_PIPE_ROOT); -} - -int __init gss_init_pipefs(void) -{ - int rc; - - rc = gss_init_pipefs_upcall(); - if (rc) - return rc; - - rc = sptlrpc_register_policy(&gss_policy_pipefs); - if (rc) { - gss_exit_pipefs_upcall(); - return rc; - } - - return 0; -} - -void __exit gss_exit_pipefs(void) -{ - gss_exit_pipefs_upcall(); - sptlrpc_unregister_policy(&gss_policy_pipefs); -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_rawobj.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_rawobj.c deleted file mode 100644 index fb298aef66eb..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_rawobj.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/ptlrpc/gss/gss_rawobj.c - * - * Author: Eric Mei - */ - -#define DEBUG_SUBSYSTEM S_SEC - -#include - -#include -#include -#include -#include - -#include "gss_internal.h" - -int rawobj_empty(rawobj_t *obj) -{ - LASSERT(equi(obj->len, obj->data)); - return (obj->len == 0); -} - -int rawobj_alloc(rawobj_t *obj, char *buf, int len) -{ - LASSERT(obj); - LASSERT(len >= 0); - - obj->len = len; - if (len) { - OBD_ALLOC_LARGE(obj->data, len); - if (!obj->data) { - obj->len = 0; - return -ENOMEM; - } - memcpy(obj->data, buf, len); - } else - obj->data = NULL; - return 0; -} - -void rawobj_free(rawobj_t *obj) -{ - LASSERT(obj); - - if (obj->len) { - LASSERT(obj->data); - OBD_FREE_LARGE(obj->data, obj->len); - obj->len = 0; - obj->data = NULL; - } else - LASSERT(!obj->data); -} - -int rawobj_equal(rawobj_t *a, rawobj_t *b) -{ - LASSERT(a && b); - - return (a->len == b->len && - (!a->len || !memcmp(a->data, b->data, a->len))); -} - -int rawobj_dup(rawobj_t *dest, rawobj_t *src) -{ - LASSERT(src && dest); - - dest->len = src->len; - if (dest->len) { - OBD_ALLOC_LARGE(dest->data, dest->len); - if (!dest->data) { - dest->len = 0; - return -ENOMEM; - } - memcpy(dest->data, src->data, dest->len); - } else - dest->data = NULL; - return 0; -} - -int rawobj_serialize(rawobj_t *obj, __u32 **buf, __u32 *buflen) -{ - __u32 len; - - LASSERT(obj); - LASSERT(buf); - LASSERT(buflen); - - len = cfs_size_round4(obj->len); - - if (*buflen < 4 + len) { - CERROR("buflen %u < %u\n", *buflen, 4 + len); - return -EINVAL; - } - - *(*buf)++ = cpu_to_le32(obj->len); - memcpy(*buf, obj->data, obj->len); - *buf += (len >> 2); - *buflen -= (4 + len); - - return 0; -} - -static int __rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen, - int alloc, int local) -{ - __u32 len; - - if (*buflen < sizeof(__u32)) { - CERROR("buflen %u\n", *buflen); - return -EINVAL; - } - - obj->len = *(*buf)++; - if (!local) - obj->len = le32_to_cpu(obj->len); - *buflen -= sizeof(__u32); - - if (!obj->len) { - obj->data = NULL; - return 0; - } - - len = local ? obj->len : cfs_size_round4(obj->len); - if (*buflen < len) { - CERROR("buflen %u < %u\n", *buflen, len); - obj->len = 0; - return -EINVAL; - } - - if (!alloc) - obj->data = (__u8 *) *buf; - else { - OBD_ALLOC_LARGE(obj->data, obj->len); - if (!obj->data) { - CERROR("fail to alloc %u bytes\n", obj->len); - obj->len = 0; - return -ENOMEM; - } - memcpy(obj->data, *buf, obj->len); - } - - *((char **)buf) += len; - *buflen -= len; - - return 0; -} - -int rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen) -{ - return __rawobj_extract(obj, buf, buflen, 0, 0); -} - -int rawobj_extract_alloc(rawobj_t *obj, __u32 **buf, __u32 *buflen) -{ - return __rawobj_extract(obj, buf, buflen, 1, 0); -} - -int rawobj_extract_local(rawobj_t *obj, __u32 **buf, __u32 *buflen) -{ - return __rawobj_extract(obj, buf, buflen, 0, 1); -} - -int rawobj_extract_local_alloc(rawobj_t *obj, __u32 **buf, __u32 *buflen) -{ - return __rawobj_extract(obj, buf, buflen, 1, 1); -} - -int rawobj_from_netobj(rawobj_t *rawobj, netobj_t *netobj) -{ - rawobj->len = netobj->len; - rawobj->data = netobj->data; - return 0; -} - -int rawobj_from_netobj_alloc(rawobj_t *rawobj, netobj_t *netobj) -{ - rawobj->len = 0; - rawobj->data = NULL; - - if (netobj->len == 0) - return 0; - - OBD_ALLOC_LARGE(rawobj->data, netobj->len); - if (rawobj->data == NULL) - return -ENOMEM; - - rawobj->len = netobj->len; - memcpy(rawobj->data, netobj->data, netobj->len); - return 0; -} - -/**************************************** - * misc more * - ****************************************/ - -int buffer_extract_bytes(const void **buf, __u32 *buflen, - void *res, __u32 reslen) -{ - if (*buflen < reslen) { - CERROR("buflen %u < %u\n", *buflen, reslen); - return -EINVAL; - } - - memcpy(res, *buf, reslen); - *buf += reslen; - *buflen -= reslen; - return 0; -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_svc_upcall.c b/drivers/staging/lustre/lustre/ptlrpc/gss/gss_svc_upcall.c deleted file mode 100644 index 359c48ec2f5b..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/gss_svc_upcall.c +++ /dev/null @@ -1,1093 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2011, 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * Neil Brown - * J. Bruce Fields - * Andy Adamson - * Dug Song - * - * RPCSEC_GSS server authentication. - * This implements RPCSEC_GSS as defined in rfc2203 (rpcsec_gss) and rfc2078 - * (gssapi) - * - * The RPCSEC_GSS involves three stages: - * 1/ context creation - * 2/ data exchange - * 3/ context destruction - * - * Context creation is handled largely by upcalls to user-space. - * In particular, GSS_Accept_sec_context is handled by an upcall - * Data exchange is handled entirely within the kernel - * In particular, GSS_GetMIC, GSS_VerifyMIC, GSS_Seal, GSS_Unseal are in-kernel. - * Context destruction is handled in-kernel - * GSS_Delete_sec_context is in-kernel - * - * Context creation is initiated by a RPCSEC_GSS_INIT request arriving. - * The context handle and gss_token are used as a key into the rpcsec_init cache. - * The content of this cache includes some of the outputs of GSS_Accept_sec_context, - * being major_status, minor_status, context_handle, reply_token. - * These are sent back to the client. - * Sequence window management is handled by the kernel. The window size if currently - * a compile time constant. - * - * When user-space is happy that a context is established, it places an entry - * in the rpcsec_context cache. The key for this cache is the context_handle. - * The content includes: - * uid/gidlist - for determining access rights - * mechanism type - * mechanism specific information, such as a key - * - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -#define GSS_SVC_UPCALL_TIMEOUT (20) - -static spinlock_t __ctx_index_lock; -static __u64 __ctx_index; - -__u64 gss_get_next_ctx_index(void) -{ - __u64 idx; - - spin_lock(&__ctx_index_lock); - idx = __ctx_index++; - spin_unlock(&__ctx_index_lock); - - return idx; -} - -static inline unsigned long hash_mem(char *buf, int length, int bits) -{ - unsigned long hash = 0; - unsigned long l = 0; - int len = 0; - unsigned char c; - - do { - if (len == length) { - c = (char) len; - len = -1; - } else - c = *buf++; - - l = (l << 8) | c; - len++; - - if ((len & (BITS_PER_LONG/8-1)) == 0) - hash = hash_long(hash^l, BITS_PER_LONG); - } while (len); - - return hash >> (BITS_PER_LONG - bits); -} - -/**************************************** - * rsi cache * - ****************************************/ - -#define RSI_HASHBITS (6) -#define RSI_HASHMAX (1 << RSI_HASHBITS) -#define RSI_HASHMASK (RSI_HASHMAX - 1) - -struct rsi { - struct cache_head h; - __u32 lustre_svc; - __u64 nid; - wait_queue_head_t waitq; - rawobj_t in_handle, in_token; - rawobj_t out_handle, out_token; - int major_status, minor_status; -}; - -static struct cache_head *rsi_table[RSI_HASHMAX]; -static struct cache_detail rsi_cache; -static struct rsi *rsi_update(struct rsi *new, struct rsi *old); -static struct rsi *rsi_lookup(struct rsi *item); - -static inline int rsi_hash(struct rsi *item) -{ - return hash_mem((char *)item->in_handle.data, item->in_handle.len, - RSI_HASHBITS) ^ - hash_mem((char *)item->in_token.data, item->in_token.len, - RSI_HASHBITS); -} - -static inline int __rsi_match(struct rsi *item, struct rsi *tmp) -{ - return (rawobj_equal(&item->in_handle, &tmp->in_handle) && - rawobj_equal(&item->in_token, &tmp->in_token)); -} - -static void rsi_free(struct rsi *rsi) -{ - rawobj_free(&rsi->in_handle); - rawobj_free(&rsi->in_token); - rawobj_free(&rsi->out_handle); - rawobj_free(&rsi->out_token); -} - -static void rsi_request(struct cache_detail *cd, - struct cache_head *h, - char **bpp, int *blen) -{ - struct rsi *rsi = container_of(h, struct rsi, h); - __u64 index = 0; - - /* if in_handle is null, provide kernel suggestion */ - if (rsi->in_handle.len == 0) - index = gss_get_next_ctx_index(); - - qword_addhex(bpp, blen, (char *) &rsi->lustre_svc, - sizeof(rsi->lustre_svc)); - qword_addhex(bpp, blen, (char *) &rsi->nid, sizeof(rsi->nid)); - qword_addhex(bpp, blen, (char *) &index, sizeof(index)); - qword_addhex(bpp, blen, rsi->in_handle.data, rsi->in_handle.len); - qword_addhex(bpp, blen, rsi->in_token.data, rsi->in_token.len); - (*bpp)[-1] = '\n'; -} - -static int rsi_upcall(struct cache_detail *cd, struct cache_head *h) -{ - return sunrpc_cache_pipe_upcall(cd, h, rsi_request); -} - -static inline void __rsi_init(struct rsi *new, struct rsi *item) -{ - new->out_handle = RAWOBJ_EMPTY; - new->out_token = RAWOBJ_EMPTY; - - new->in_handle = item->in_handle; - item->in_handle = RAWOBJ_EMPTY; - new->in_token = item->in_token; - item->in_token = RAWOBJ_EMPTY; - - new->lustre_svc = item->lustre_svc; - new->nid = item->nid; - init_waitqueue_head(&new->waitq); -} - -static inline void __rsi_update(struct rsi *new, struct rsi *item) -{ - LASSERT(new->out_handle.len == 0); - LASSERT(new->out_token.len == 0); - - new->out_handle = item->out_handle; - item->out_handle = RAWOBJ_EMPTY; - new->out_token = item->out_token; - item->out_token = RAWOBJ_EMPTY; - - new->major_status = item->major_status; - new->minor_status = item->minor_status; -} - -static void rsi_put(struct kref *ref) -{ - struct rsi *rsi = container_of(ref, struct rsi, h.ref); - - LASSERT(rsi->h.next == NULL); - rsi_free(rsi); - OBD_FREE_PTR(rsi); -} - -static int rsi_match(struct cache_head *a, struct cache_head *b) -{ - struct rsi *item = container_of(a, struct rsi, h); - struct rsi *tmp = container_of(b, struct rsi, h); - - return __rsi_match(item, tmp); -} - -static void rsi_init(struct cache_head *cnew, struct cache_head *citem) -{ - struct rsi *new = container_of(cnew, struct rsi, h); - struct rsi *item = container_of(citem, struct rsi, h); - - __rsi_init(new, item); -} - -static void update_rsi(struct cache_head *cnew, struct cache_head *citem) -{ - struct rsi *new = container_of(cnew, struct rsi, h); - struct rsi *item = container_of(citem, struct rsi, h); - - __rsi_update(new, item); -} - -static struct cache_head *rsi_alloc(void) -{ - struct rsi *rsi; - - OBD_ALLOC_PTR(rsi); - if (rsi) - return &rsi->h; - else - return NULL; -} - -static int rsi_parse(struct cache_detail *cd, char *mesg, int mlen) -{ - char *buf = mesg; - char *ep; - int len; - struct rsi rsii, *rsip = NULL; - time_t expiry; - int status = -EINVAL; - - memset(&rsii, 0, sizeof(rsii)); - - /* handle */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - if (rawobj_alloc(&rsii.in_handle, buf, len)) { - status = -ENOMEM; - goto out; - } - - /* token */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - if (rawobj_alloc(&rsii.in_token, buf, len)) { - status = -ENOMEM; - goto out; - } - - rsip = rsi_lookup(&rsii); - if (!rsip) - goto out; - - rsii.h.flags = 0; - /* expiry */ - expiry = get_expiry(&mesg); - if (expiry == 0) - goto out; - - len = qword_get(&mesg, buf, mlen); - if (len <= 0) - goto out; - - /* major */ - rsii.major_status = simple_strtol(buf, &ep, 10); - if (*ep) - goto out; - - /* minor */ - len = qword_get(&mesg, buf, mlen); - if (len <= 0) - goto out; - rsii.minor_status = simple_strtol(buf, &ep, 10); - if (*ep) - goto out; - - /* out_handle */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - if (rawobj_alloc(&rsii.out_handle, buf, len)) { - status = -ENOMEM; - goto out; - } - - /* out_token */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - if (rawobj_alloc(&rsii.out_token, buf, len)) { - status = -ENOMEM; - goto out; - } - - rsii.h.expiry_time = expiry; - rsip = rsi_update(&rsii, rsip); - status = 0; -out: - rsi_free(&rsii); - if (rsip) { - wake_up_all(&rsip->waitq); - cache_put(&rsip->h, &rsi_cache); - } else { - status = -ENOMEM; - } - - if (status) - CERROR("rsi parse error %d\n", status); - return status; -} - -static struct cache_detail rsi_cache = { - .hash_size = RSI_HASHMAX, - .hash_table = rsi_table, - .name = "auth.sptlrpc.init", - .cache_put = rsi_put, - .cache_upcall = rsi_upcall, - .cache_parse = rsi_parse, - .match = rsi_match, - .init = rsi_init, - .update = update_rsi, - .alloc = rsi_alloc, -}; - -static struct rsi *rsi_lookup(struct rsi *item) -{ - struct cache_head *ch; - int hash = rsi_hash(item); - - ch = sunrpc_cache_lookup(&rsi_cache, &item->h, hash); - if (ch) - return container_of(ch, struct rsi, h); - else - return NULL; -} - -static struct rsi *rsi_update(struct rsi *new, struct rsi *old) -{ - struct cache_head *ch; - int hash = rsi_hash(new); - - ch = sunrpc_cache_update(&rsi_cache, &new->h, &old->h, hash); - if (ch) - return container_of(ch, struct rsi, h); - else - return NULL; -} - -/**************************************** - * rsc cache * - ****************************************/ - -#define RSC_HASHBITS (10) -#define RSC_HASHMAX (1 << RSC_HASHBITS) -#define RSC_HASHMASK (RSC_HASHMAX - 1) - -struct rsc { - struct cache_head h; - struct obd_device *target; - rawobj_t handle; - struct gss_svc_ctx ctx; -}; - -static struct cache_head *rsc_table[RSC_HASHMAX]; -static struct cache_detail rsc_cache; -static struct rsc *rsc_update(struct rsc *new, struct rsc *old); -static struct rsc *rsc_lookup(struct rsc *item); - -static void rsc_free(struct rsc *rsci) -{ - rawobj_free(&rsci->handle); - rawobj_free(&rsci->ctx.gsc_rvs_hdl); - lgss_delete_sec_context(&rsci->ctx.gsc_mechctx); -} - -static inline int rsc_hash(struct rsc *rsci) -{ - return hash_mem((char *)rsci->handle.data, - rsci->handle.len, RSC_HASHBITS); -} - -static inline int __rsc_match(struct rsc *new, struct rsc *tmp) -{ - return rawobj_equal(&new->handle, &tmp->handle); -} - -static inline void __rsc_init(struct rsc *new, struct rsc *tmp) -{ - new->handle = tmp->handle; - tmp->handle = RAWOBJ_EMPTY; - - new->target = NULL; - memset(&new->ctx, 0, sizeof(new->ctx)); - new->ctx.gsc_rvs_hdl = RAWOBJ_EMPTY; -} - -static inline void __rsc_update(struct rsc *new, struct rsc *tmp) -{ - new->ctx = tmp->ctx; - tmp->ctx.gsc_rvs_hdl = RAWOBJ_EMPTY; - tmp->ctx.gsc_mechctx = NULL; - - memset(&new->ctx.gsc_seqdata, 0, sizeof(new->ctx.gsc_seqdata)); - spin_lock_init(&new->ctx.gsc_seqdata.ssd_lock); -} - -static void rsc_put(struct kref *ref) -{ - struct rsc *rsci = container_of(ref, struct rsc, h.ref); - - LASSERT(rsci->h.next == NULL); - rsc_free(rsci); - OBD_FREE_PTR(rsci); -} - -static int rsc_match(struct cache_head *a, struct cache_head *b) -{ - struct rsc *new = container_of(a, struct rsc, h); - struct rsc *tmp = container_of(b, struct rsc, h); - - return __rsc_match(new, tmp); -} - -static void rsc_init(struct cache_head *cnew, struct cache_head *ctmp) -{ - struct rsc *new = container_of(cnew, struct rsc, h); - struct rsc *tmp = container_of(ctmp, struct rsc, h); - - __rsc_init(new, tmp); -} - -static void update_rsc(struct cache_head *cnew, struct cache_head *ctmp) -{ - struct rsc *new = container_of(cnew, struct rsc, h); - struct rsc *tmp = container_of(ctmp, struct rsc, h); - - __rsc_update(new, tmp); -} - -static struct cache_head * rsc_alloc(void) -{ - struct rsc *rsc; - - OBD_ALLOC_PTR(rsc); - if (rsc) - return &rsc->h; - else - return NULL; -} - -static int rsc_parse(struct cache_detail *cd, char *mesg, int mlen) -{ - char *buf = mesg; - int len, rv, tmp_int; - struct rsc rsci, *rscp = NULL; - time_t expiry; - int status = -EINVAL; - struct gss_api_mech *gm = NULL; - - memset(&rsci, 0, sizeof(rsci)); - - /* context handle */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) goto out; - status = -ENOMEM; - if (rawobj_alloc(&rsci.handle, buf, len)) - goto out; - - rsci.h.flags = 0; - /* expiry */ - expiry = get_expiry(&mesg); - status = -EINVAL; - if (expiry == 0) - goto out; - - /* remote flag */ - rv = get_int(&mesg, &tmp_int); - if (rv) { - CERROR("fail to get remote flag\n"); - goto out; - } - rsci.ctx.gsc_remote = (tmp_int != 0); - - /* root user flag */ - rv = get_int(&mesg, &tmp_int); - if (rv) { - CERROR("fail to get oss user flag\n"); - goto out; - } - rsci.ctx.gsc_usr_root = (tmp_int != 0); - - /* mds user flag */ - rv = get_int(&mesg, &tmp_int); - if (rv) { - CERROR("fail to get mds user flag\n"); - goto out; - } - rsci.ctx.gsc_usr_mds = (tmp_int != 0); - - /* oss user flag */ - rv = get_int(&mesg, &tmp_int); - if (rv) { - CERROR("fail to get oss user flag\n"); - goto out; - } - rsci.ctx.gsc_usr_oss = (tmp_int != 0); - - /* mapped uid */ - rv = get_int(&mesg, (int *) &rsci.ctx.gsc_mapped_uid); - if (rv) { - CERROR("fail to get mapped uid\n"); - goto out; - } - - rscp = rsc_lookup(&rsci); - if (!rscp) - goto out; - - /* uid, or NEGATIVE */ - rv = get_int(&mesg, (int *) &rsci.ctx.gsc_uid); - if (rv == -EINVAL) - goto out; - if (rv == -ENOENT) { - CERROR("NOENT? set rsc entry negative\n"); - set_bit(CACHE_NEGATIVE, &rsci.h.flags); - } else { - rawobj_t tmp_buf; - unsigned long ctx_expiry; - - /* gid */ - if (get_int(&mesg, (int *) &rsci.ctx.gsc_gid)) - goto out; - - /* mech name */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - gm = lgss_name_to_mech(buf); - status = -EOPNOTSUPP; - if (!gm) - goto out; - - status = -EINVAL; - /* mech-specific data: */ - len = qword_get(&mesg, buf, mlen); - if (len < 0) - goto out; - - tmp_buf.len = len; - tmp_buf.data = (unsigned char *)buf; - if (lgss_import_sec_context(&tmp_buf, gm, - &rsci.ctx.gsc_mechctx)) - goto out; - - /* currently the expiry time passed down from user-space - * is invalid, here we retrieve it from mech. */ - if (lgss_inquire_context(rsci.ctx.gsc_mechctx, &ctx_expiry)) { - CERROR("unable to get expire time, drop it\n"); - goto out; - } - expiry = (time_t) ctx_expiry; - } - - rsci.h.expiry_time = expiry; - rscp = rsc_update(&rsci, rscp); - status = 0; -out: - if (gm) - lgss_mech_put(gm); - rsc_free(&rsci); - if (rscp) - cache_put(&rscp->h, &rsc_cache); - else - status = -ENOMEM; - - if (status) - CERROR("parse rsc error %d\n", status); - return status; -} - -static struct cache_detail rsc_cache = { - .hash_size = RSC_HASHMAX, - .hash_table = rsc_table, - .name = "auth.sptlrpc.context", - .cache_put = rsc_put, - .cache_parse = rsc_parse, - .match = rsc_match, - .init = rsc_init, - .update = update_rsc, - .alloc = rsc_alloc, -}; - -static struct rsc *rsc_lookup(struct rsc *item) -{ - struct cache_head *ch; - int hash = rsc_hash(item); - - ch = sunrpc_cache_lookup(&rsc_cache, &item->h, hash); - if (ch) - return container_of(ch, struct rsc, h); - else - return NULL; -} - -static struct rsc *rsc_update(struct rsc *new, struct rsc *old) -{ - struct cache_head *ch; - int hash = rsc_hash(new); - - ch = sunrpc_cache_update(&rsc_cache, &new->h, &old->h, hash); - if (ch) - return container_of(ch, struct rsc, h); - else - return NULL; -} - -#define COMPAT_RSC_PUT(item, cd) cache_put((item), (cd)) - -/**************************************** - * rsc cache flush * - ****************************************/ - -typedef int rsc_entry_match(struct rsc *rscp, long data); - -static void rsc_flush(rsc_entry_match *match, long data) -{ - struct cache_head **ch; - struct rsc *rscp; - int n; - - write_lock(&rsc_cache.hash_lock); - for (n = 0; n < RSC_HASHMAX; n++) { - for (ch = &rsc_cache.hash_table[n]; *ch;) { - rscp = container_of(*ch, struct rsc, h); - - if (!match(rscp, data)) { - ch = &((*ch)->next); - continue; - } - - /* it seems simply set NEGATIVE doesn't work */ - *ch = (*ch)->next; - rscp->h.next = NULL; - cache_get(&rscp->h); - set_bit(CACHE_NEGATIVE, &rscp->h.flags); - COMPAT_RSC_PUT(&rscp->h, &rsc_cache); - rsc_cache.entries--; - } - } - write_unlock(&rsc_cache.hash_lock); -} - -static int match_uid(struct rsc *rscp, long uid) -{ - if ((int) uid == -1) - return 1; - return ((int) rscp->ctx.gsc_uid == (int) uid); -} - -static int match_target(struct rsc *rscp, long target) -{ - return (rscp->target == (struct obd_device *) target); -} - -static inline void rsc_flush_uid(int uid) -{ - if (uid == -1) - CWARN("flush all gss contexts...\n"); - - rsc_flush(match_uid, (long) uid); -} - -static inline void rsc_flush_target(struct obd_device *target) -{ - rsc_flush(match_target, (long) target); -} - -void gss_secsvc_flush(struct obd_device *target) -{ - rsc_flush_target(target); -} -EXPORT_SYMBOL(gss_secsvc_flush); - -static struct rsc *gss_svc_searchbyctx(rawobj_t *handle) -{ - struct rsc rsci; - struct rsc *found; - - memset(&rsci, 0, sizeof(rsci)); - if (rawobj_dup(&rsci.handle, handle)) - return NULL; - - found = rsc_lookup(&rsci); - rsc_free(&rsci); - if (!found) - return NULL; - if (cache_check(&rsc_cache, &found->h, NULL)) - return NULL; - return found; -} - -int gss_svc_upcall_install_rvs_ctx(struct obd_import *imp, - struct gss_sec *gsec, - struct gss_cli_ctx *gctx) -{ - struct rsc rsci, *rscp = NULL; - unsigned long ctx_expiry; - __u32 major; - int rc; - - memset(&rsci, 0, sizeof(rsci)); - - if (rawobj_alloc(&rsci.handle, (char *) &gsec->gs_rvs_hdl, - sizeof(gsec->gs_rvs_hdl))) - GOTO(out, rc = -ENOMEM); - - rscp = rsc_lookup(&rsci); - if (rscp == NULL) - GOTO(out, rc = -ENOMEM); - - major = lgss_copy_reverse_context(gctx->gc_mechctx, - &rsci.ctx.gsc_mechctx); - if (major != GSS_S_COMPLETE) - GOTO(out, rc = -ENOMEM); - - if (lgss_inquire_context(rsci.ctx.gsc_mechctx, &ctx_expiry)) { - CERROR("unable to get expire time, drop it\n"); - GOTO(out, rc = -EINVAL); - } - rsci.h.expiry_time = (time_t) ctx_expiry; - - if (strcmp(imp->imp_obd->obd_type->typ_name, LUSTRE_MDC_NAME) == 0) - rsci.ctx.gsc_usr_mds = 1; - else if (strcmp(imp->imp_obd->obd_type->typ_name, LUSTRE_OSC_NAME) == 0) - rsci.ctx.gsc_usr_oss = 1; - else - rsci.ctx.gsc_usr_root = 1; - - rscp = rsc_update(&rsci, rscp); - if (rscp == NULL) - GOTO(out, rc = -ENOMEM); - - rscp->target = imp->imp_obd; - rawobj_dup(&gctx->gc_svc_handle, &rscp->handle); - - CWARN("create reverse svc ctx %p to %s: idx "LPX64"\n", - &rscp->ctx, obd2cli_tgt(imp->imp_obd), gsec->gs_rvs_hdl); - rc = 0; -out: - if (rscp) - cache_put(&rscp->h, &rsc_cache); - rsc_free(&rsci); - - if (rc) - CERROR("create reverse svc ctx: idx "LPX64", rc %d\n", - gsec->gs_rvs_hdl, rc); - return rc; -} - -int gss_svc_upcall_expire_rvs_ctx(rawobj_t *handle) -{ - const cfs_time_t expire = 20; - struct rsc *rscp; - - rscp = gss_svc_searchbyctx(handle); - if (rscp) { - CDEBUG(D_SEC, "reverse svcctx %p (rsc %p) expire soon\n", - &rscp->ctx, rscp); - - rscp->h.expiry_time = cfs_time_current_sec() + expire; - COMPAT_RSC_PUT(&rscp->h, &rsc_cache); - } - return 0; -} - -int gss_svc_upcall_dup_handle(rawobj_t *handle, struct gss_svc_ctx *ctx) -{ - struct rsc *rscp = container_of(ctx, struct rsc, ctx); - - return rawobj_dup(handle, &rscp->handle); -} - -int gss_svc_upcall_update_sequence(rawobj_t *handle, __u32 seq) -{ - struct rsc *rscp; - - rscp = gss_svc_searchbyctx(handle); - if (rscp) { - CDEBUG(D_SEC, "reverse svcctx %p (rsc %p) update seq to %u\n", - &rscp->ctx, rscp, seq + 1); - - rscp->ctx.gsc_rvs_seq = seq + 1; - COMPAT_RSC_PUT(&rscp->h, &rsc_cache); - } - return 0; -} - -static struct cache_deferred_req* cache_upcall_defer(struct cache_req *req) -{ - return NULL; -} -static struct cache_req cache_upcall_chandle = { cache_upcall_defer }; - -int gss_svc_upcall_handle_init(struct ptlrpc_request *req, - struct gss_svc_reqctx *grctx, - struct gss_wire_ctx *gw, - struct obd_device *target, - __u32 lustre_svc, - rawobj_t *rvs_hdl, - rawobj_t *in_token) -{ - struct ptlrpc_reply_state *rs; - struct rsc *rsci = NULL; - struct rsi *rsip = NULL, rsikey; - wait_queue_t wait; - int replen = sizeof(struct ptlrpc_body); - struct gss_rep_header *rephdr; - int first_check = 1; - int rc = SECSVC_DROP; - - memset(&rsikey, 0, sizeof(rsikey)); - rsikey.lustre_svc = lustre_svc; - rsikey.nid = (__u64) req->rq_peer.nid; - - /* duplicate context handle. for INIT it always 0 */ - if (rawobj_dup(&rsikey.in_handle, &gw->gw_handle)) { - CERROR("fail to dup context handle\n"); - GOTO(out, rc); - } - - if (rawobj_dup(&rsikey.in_token, in_token)) { - CERROR("can't duplicate token\n"); - rawobj_free(&rsikey.in_handle); - GOTO(out, rc); - } - - rsip = rsi_lookup(&rsikey); - rsi_free(&rsikey); - if (!rsip) { - CERROR("error in rsi_lookup.\n"); - - if (!gss_pack_err_notify(req, GSS_S_FAILURE, 0)) - rc = SECSVC_COMPLETE; - - GOTO(out, rc); - } - - cache_get(&rsip->h); /* take an extra ref */ - init_waitqueue_head(&rsip->waitq); - init_waitqueue_entry(&wait, current); - add_wait_queue(&rsip->waitq, &wait); - -cache_check: - /* Note each time cache_check() will drop a reference if return - * non-zero. We hold an extra reference on initial rsip, but must - * take care of following calls. */ - rc = cache_check(&rsi_cache, &rsip->h, &cache_upcall_chandle); - switch (rc) { - case -EAGAIN: { - int valid; - - if (first_check) { - first_check = 0; - - read_lock(&rsi_cache.hash_lock); - valid = test_bit(CACHE_VALID, &rsip->h.flags); - if (valid == 0) - set_current_state(TASK_INTERRUPTIBLE); - read_unlock(&rsi_cache.hash_lock); - - if (valid == 0) - schedule_timeout(GSS_SVC_UPCALL_TIMEOUT * - HZ); - - cache_get(&rsip->h); - goto cache_check; - } - CWARN("waited %ds timeout, drop\n", GSS_SVC_UPCALL_TIMEOUT); - break; - } - case -ENOENT: - CWARN("cache_check return ENOENT, drop\n"); - break; - case 0: - /* if not the first check, we have to release the extra - * reference we just added on it. */ - if (!first_check) - cache_put(&rsip->h, &rsi_cache); - CDEBUG(D_SEC, "cache_check is good\n"); - break; - } - - remove_wait_queue(&rsip->waitq, &wait); - cache_put(&rsip->h, &rsi_cache); - - if (rc) - GOTO(out, rc = SECSVC_DROP); - - rc = SECSVC_DROP; - rsci = gss_svc_searchbyctx(&rsip->out_handle); - if (!rsci) { - CERROR("authentication failed\n"); - - if (!gss_pack_err_notify(req, GSS_S_FAILURE, 0)) - rc = SECSVC_COMPLETE; - - GOTO(out, rc); - } else { - cache_get(&rsci->h); - grctx->src_ctx = &rsci->ctx; - } - - if (rawobj_dup(&rsci->ctx.gsc_rvs_hdl, rvs_hdl)) { - CERROR("failed duplicate reverse handle\n"); - GOTO(out, rc); - } - - rsci->target = target; - - CDEBUG(D_SEC, "server create rsc %p(%u->%s)\n", - rsci, rsci->ctx.gsc_uid, libcfs_nid2str(req->rq_peer.nid)); - - if (rsip->out_handle.len > PTLRPC_GSS_MAX_HANDLE_SIZE) { - CERROR("handle size %u too large\n", rsip->out_handle.len); - GOTO(out, rc = SECSVC_DROP); - } - - grctx->src_init = 1; - grctx->src_reserve_len = cfs_size_round4(rsip->out_token.len); - - rc = lustre_pack_reply_v2(req, 1, &replen, NULL, 0); - if (rc) { - CERROR("failed to pack reply: %d\n", rc); - GOTO(out, rc = SECSVC_DROP); - } - - rs = req->rq_reply_state; - LASSERT(rs->rs_repbuf->lm_bufcount == 3); - LASSERT(rs->rs_repbuf->lm_buflens[0] >= - sizeof(*rephdr) + rsip->out_handle.len); - LASSERT(rs->rs_repbuf->lm_buflens[2] >= rsip->out_token.len); - - rephdr = lustre_msg_buf(rs->rs_repbuf, 0, 0); - rephdr->gh_version = PTLRPC_GSS_VERSION; - rephdr->gh_flags = 0; - rephdr->gh_proc = PTLRPC_GSS_PROC_ERR; - rephdr->gh_major = rsip->major_status; - rephdr->gh_minor = rsip->minor_status; - rephdr->gh_seqwin = GSS_SEQ_WIN; - rephdr->gh_handle.len = rsip->out_handle.len; - memcpy(rephdr->gh_handle.data, rsip->out_handle.data, - rsip->out_handle.len); - - memcpy(lustre_msg_buf(rs->rs_repbuf, 2, 0), rsip->out_token.data, - rsip->out_token.len); - - rs->rs_repdata_len = lustre_shrink_msg(rs->rs_repbuf, 2, - rsip->out_token.len, 0); - - rc = SECSVC_OK; - -out: - /* it looks like here we should put rsip also, but this mess up - * with NFS cache mgmt code... FIXME */ -#if 0 - if (rsip) - rsi_put(&rsip->h, &rsi_cache); -#endif - - if (rsci) { - /* if anything went wrong, we don't keep the context too */ - if (rc != SECSVC_OK) - set_bit(CACHE_NEGATIVE, &rsci->h.flags); - else - CDEBUG(D_SEC, "create rsc with idx "LPX64"\n", - gss_handle_to_u64(&rsci->handle)); - - COMPAT_RSC_PUT(&rsci->h, &rsc_cache); - } - return rc; -} - -struct gss_svc_ctx *gss_svc_upcall_get_ctx(struct ptlrpc_request *req, - struct gss_wire_ctx *gw) -{ - struct rsc *rsc; - - rsc = gss_svc_searchbyctx(&gw->gw_handle); - if (!rsc) { - CWARN("Invalid gss ctx idx "LPX64" from %s\n", - gss_handle_to_u64(&gw->gw_handle), - libcfs_nid2str(req->rq_peer.nid)); - return NULL; - } - - return &rsc->ctx; -} - -void gss_svc_upcall_put_ctx(struct gss_svc_ctx *ctx) -{ - struct rsc *rsc = container_of(ctx, struct rsc, ctx); - - COMPAT_RSC_PUT(&rsc->h, &rsc_cache); -} - -void gss_svc_upcall_destroy_ctx(struct gss_svc_ctx *ctx) -{ - struct rsc *rsc = container_of(ctx, struct rsc, ctx); - - /* can't be found */ - set_bit(CACHE_NEGATIVE, &rsc->h.flags); - /* to be removed at next scan */ - rsc->h.expiry_time = 1; -} - -int __init gss_init_svc_upcall(void) -{ - int i; - - spin_lock_init(&__ctx_index_lock); - /* - * this helps reducing context index confliction. after server reboot, - * conflicting request from clients might be filtered out by initial - * sequence number checking, thus no chance to sent error notification - * back to clients. - */ - cfs_get_random_bytes(&__ctx_index, sizeof(__ctx_index)); - - - cache_register(&rsi_cache); - cache_register(&rsc_cache); - - /* FIXME this looks stupid. we intend to give lsvcgssd a chance to open - * the init upcall channel, otherwise there's big chance that the first - * upcall issued before the channel be opened thus nfsv4 cache code will - * drop the request direclty, thus lead to unnecessary recovery time. - * here we wait at maximum 1.5 seconds. */ - for (i = 0; i < 6; i++) { - if (atomic_read(&rsi_cache.readers) > 0) - break; - set_current_state(TASK_UNINTERRUPTIBLE); - LASSERT(HZ >= 4); - schedule_timeout(HZ / 4); - } - - if (atomic_read(&rsi_cache.readers) == 0) - CWARN("Init channel is not opened by lsvcgssd, following " - "request might be dropped until lsvcgssd is active\n"); - - return 0; -} - -void __exit gss_exit_svc_upcall(void) -{ - cache_purge(&rsi_cache); - cache_unregister(&rsi_cache); - - cache_purge(&rsc_cache); - cache_unregister(&rsc_cache); -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/lproc_gss.c b/drivers/staging/lustre/lustre/ptlrpc/gss/lproc_gss.c deleted file mode 100644 index a0a74e5542ed..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/lproc_gss.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -static struct proc_dir_entry *gss_proc_root = NULL; -static struct proc_dir_entry *gss_proc_lk = NULL; - -/* - * statistic of "out-of-sequence-window" - */ -static struct { - spinlock_t oos_lock; - atomic_t oos_cli_count; /* client occurrence */ - int oos_cli_behind; /* client max seqs behind */ - atomic_t oos_svc_replay[3]; /* server replay detected */ - atomic_t oos_svc_pass[3]; /* server verified ok */ -} gss_stat_oos = { - .oos_cli_count = ATOMIC_INIT(0), - .oos_cli_behind = 0, - .oos_svc_replay = { ATOMIC_INIT(0), }, - .oos_svc_pass = { ATOMIC_INIT(0), }, -}; - -void gss_stat_oos_record_cli(int behind) -{ - atomic_inc(&gss_stat_oos.oos_cli_count); - - spin_lock(&gss_stat_oos.oos_lock); - if (behind > gss_stat_oos.oos_cli_behind) - gss_stat_oos.oos_cli_behind = behind; - spin_unlock(&gss_stat_oos.oos_lock); -} - -void gss_stat_oos_record_svc(int phase, int replay) -{ - LASSERT(phase >= 0 && phase <= 2); - - if (replay) - atomic_inc(&gss_stat_oos.oos_svc_replay[phase]); - else - atomic_inc(&gss_stat_oos.oos_svc_pass[phase]); -} - -static int gss_proc_oos_seq_show(struct seq_file *m, void *v) -{ - return seq_printf(m, - "seqwin: %u\n" - "backwin: %u\n" - "client fall behind seqwin\n" - " occurrence: %d\n" - " max seq behind: %d\n" - "server replay detected:\n" - " phase 0: %d\n" - " phase 1: %d\n" - " phase 2: %d\n" - "server verify ok:\n" - " phase 2: %d\n", - GSS_SEQ_WIN_MAIN, - GSS_SEQ_WIN_BACK, - atomic_read(&gss_stat_oos.oos_cli_count), - gss_stat_oos.oos_cli_behind, - atomic_read(&gss_stat_oos.oos_svc_replay[0]), - atomic_read(&gss_stat_oos.oos_svc_replay[1]), - atomic_read(&gss_stat_oos.oos_svc_replay[2]), - atomic_read(&gss_stat_oos.oos_svc_pass[2])); -} -LPROC_SEQ_FOPS_RO(gss_proc_oos); - -static int gss_proc_write_secinit(struct file *file, const char *buffer, - size_t count, off_t *off) -{ - int rc; - - rc = gss_do_ctx_init_rpc((char *) buffer, count); - if (rc) { - LASSERT(rc < 0); - return rc; - } - - return count; -} - -static const struct file_operations gss_proc_secinit = { - .write = gss_proc_write_secinit, -}; - -static struct lprocfs_vars gss_lprocfs_vars[] = { - { "replays", &gss_proc_oos_fops }, - { "init_channel", &gss_proc_secinit, NULL, 0222 }, - { NULL } -}; - -/* - * for userspace helper lgss_keyring. - * - * debug_level: [0, 4], defined in utils/gss/lgss_utils.h - */ -static int gss_lk_debug_level = 1; - -static int gss_lk_proc_dl_seq_show(struct seq_file *m, void *v) -{ - return seq_printf(m, "%u\n", gss_lk_debug_level); -} - -static int gss_lk_proc_dl_seq_write(struct file *file, const char *buffer, - size_t count, off_t *off) -{ - int val, rc; - - rc = lprocfs_write_helper(buffer, count, &val); - if (rc < 0) - return rc; - - if (val < 0 || val > 4) - return -ERANGE; - - gss_lk_debug_level = val; - return count; -} -LPROC_SEQ_FOPS(gss_lk_proc_dl); - -static struct lprocfs_vars gss_lk_lprocfs_vars[] = { - { "debug_level", &gss_lk_proc_dl_fops }, - { NULL } -}; - -void gss_exit_lproc(void) -{ - if (gss_proc_lk) { - lprocfs_remove(&gss_proc_lk); - gss_proc_lk = NULL; - } - - if (gss_proc_root) { - lprocfs_remove(&gss_proc_root); - gss_proc_root = NULL; - } -} - -int gss_init_lproc(void) -{ - int rc; - - spin_lock_init(&gss_stat_oos.oos_lock); - - gss_proc_root = lprocfs_register("gss", sptlrpc_proc_root, - gss_lprocfs_vars, NULL); - if (IS_ERR(gss_proc_root)) { - rc = PTR_ERR(gss_proc_root); - gss_proc_root = NULL; - GOTO(err_out, rc); - } - - gss_proc_lk = lprocfs_register("lgss_keyring", gss_proc_root, - gss_lk_lprocfs_vars, NULL); - if (IS_ERR(gss_proc_lk)) { - rc = PTR_ERR(gss_proc_lk); - gss_proc_lk = NULL; - GOTO(err_out, rc); - } - - return 0; - -err_out: - CERROR("failed to initialize gss lproc entries: %d\n", rc); - gss_exit_lproc(); - return rc; -} diff --git a/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c b/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c deleted file mode 100644 index ef44e09d2c3c..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/gss/sec_gss.c +++ /dev/null @@ -1,2918 +0,0 @@ -/* - * Modifications for Lustre - * - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * - * Copyright (c) 2011, 2012, Intel Corporation. - * - * Author: Eric Mei - */ - -/* - * linux/net/sunrpc/auth_gss.c - * - * RPCSEC_GSS client authentication. - * - * Copyright (c) 2000 The Regents of the University of Michigan. - * All rights reserved. - * - * Dug Song - * Andy Adamson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#define DEBUG_SUBSYSTEM S_SEC -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "gss_err.h" -#include "gss_internal.h" -#include "gss_api.h" - -#include -#include - -/* - * early reply have fixed size, respectively in privacy and integrity mode. - * so we calculate them only once. - */ -static int gss_at_reply_off_integ; -static int gss_at_reply_off_priv; - - -static inline int msg_last_segidx(struct lustre_msg *msg) -{ - LASSERT(msg->lm_bufcount > 0); - return msg->lm_bufcount - 1; -} -static inline int msg_last_seglen(struct lustre_msg *msg) -{ - return msg->lm_buflens[msg_last_segidx(msg)]; -} - -/******************************************** - * wire data swabber * - ********************************************/ - -static -void gss_header_swabber(struct gss_header *ghdr) -{ - __swab32s(&ghdr->gh_flags); - __swab32s(&ghdr->gh_proc); - __swab32s(&ghdr->gh_seq); - __swab32s(&ghdr->gh_svc); - __swab32s(&ghdr->gh_pad1); - __swab32s(&ghdr->gh_handle.len); -} - -struct gss_header *gss_swab_header(struct lustre_msg *msg, int segment, - int swabbed) -{ - struct gss_header *ghdr; - - ghdr = lustre_msg_buf(msg, segment, sizeof(*ghdr)); - if (ghdr == NULL) - return NULL; - - if (swabbed) - gss_header_swabber(ghdr); - - if (sizeof(*ghdr) + ghdr->gh_handle.len > msg->lm_buflens[segment]) { - CERROR("gss header has length %d, now %u received\n", - (int) sizeof(*ghdr) + ghdr->gh_handle.len, - msg->lm_buflens[segment]); - return NULL; - } - - return ghdr; -} - -#if 0 -static -void gss_netobj_swabber(netobj_t *obj) -{ - __swab32s(&obj->len); -} - -netobj_t *gss_swab_netobj(struct lustre_msg *msg, int segment) -{ - netobj_t *obj; - - obj = lustre_swab_buf(msg, segment, sizeof(*obj), gss_netobj_swabber); - if (obj && sizeof(*obj) + obj->len > msg->lm_buflens[segment]) { - CERROR("netobj require length %u but only %u received\n", - (unsigned int) sizeof(*obj) + obj->len, - msg->lm_buflens[segment]); - return NULL; - } - - return obj; -} -#endif - -/* - * payload should be obtained from mechanism. but currently since we - * only support kerberos, we could simply use fixed value. - * krb5 "meta" data: - * - krb5 header: 16 - * - krb5 checksum: 20 - * - * for privacy mode, payload also include the cipher text which has the same - * size as plain text, plus possible confounder, padding both at maximum cipher - * block size. - */ -#define GSS_KRB5_INTEG_MAX_PAYLOAD (40) - -static inline -int gss_mech_payload(struct gss_ctx *mechctx, int msgsize, int privacy) -{ - if (privacy) - return GSS_KRB5_INTEG_MAX_PAYLOAD + 16 + 16 + 16 + msgsize; - else - return GSS_KRB5_INTEG_MAX_PAYLOAD; -} - -/* - * return signature size, otherwise < 0 to indicate error - */ -static int gss_sign_msg(struct lustre_msg *msg, - struct gss_ctx *mechctx, - enum lustre_sec_part sp, - __u32 flags, __u32 proc, __u32 seq, __u32 svc, - rawobj_t *handle) -{ - struct gss_header *ghdr; - rawobj_t text[4], mic; - int textcnt, max_textcnt, mic_idx; - __u32 major; - - LASSERT(msg->lm_bufcount >= 2); - - /* gss hdr */ - LASSERT(msg->lm_buflens[0] >= - sizeof(*ghdr) + (handle ? handle->len : 0)); - ghdr = lustre_msg_buf(msg, 0, 0); - - ghdr->gh_version = PTLRPC_GSS_VERSION; - ghdr->gh_sp = (__u8) sp; - ghdr->gh_flags = flags; - ghdr->gh_proc = proc; - ghdr->gh_seq = seq; - ghdr->gh_svc = svc; - if (!handle) { - /* fill in a fake one */ - ghdr->gh_handle.len = 0; - } else { - ghdr->gh_handle.len = handle->len; - memcpy(ghdr->gh_handle.data, handle->data, handle->len); - } - - /* no actual signature for null mode */ - if (svc == SPTLRPC_SVC_NULL) - return lustre_msg_size_v2(msg->lm_bufcount, msg->lm_buflens); - - /* MIC */ - mic_idx = msg_last_segidx(msg); - max_textcnt = (svc == SPTLRPC_SVC_AUTH) ? 1 : mic_idx; - - for (textcnt = 0; textcnt < max_textcnt; textcnt++) { - text[textcnt].len = msg->lm_buflens[textcnt]; - text[textcnt].data = lustre_msg_buf(msg, textcnt, 0); - } - - mic.len = msg->lm_buflens[mic_idx]; - mic.data = lustre_msg_buf(msg, mic_idx, 0); - - major = lgss_get_mic(mechctx, textcnt, text, 0, NULL, &mic); - if (major != GSS_S_COMPLETE) { - CERROR("fail to generate MIC: %08x\n", major); - return -EPERM; - } - LASSERT(mic.len <= msg->lm_buflens[mic_idx]); - - return lustre_shrink_msg(msg, mic_idx, mic.len, 0); -} - -/* - * return gss error - */ -static -__u32 gss_verify_msg(struct lustre_msg *msg, - struct gss_ctx *mechctx, - __u32 svc) -{ - rawobj_t text[4], mic; - int textcnt, max_textcnt; - int mic_idx; - __u32 major; - - LASSERT(msg->lm_bufcount >= 2); - - if (svc == SPTLRPC_SVC_NULL) - return GSS_S_COMPLETE; - - mic_idx = msg_last_segidx(msg); - max_textcnt = (svc == SPTLRPC_SVC_AUTH) ? 1 : mic_idx; - - for (textcnt = 0; textcnt < max_textcnt; textcnt++) { - text[textcnt].len = msg->lm_buflens[textcnt]; - text[textcnt].data = lustre_msg_buf(msg, textcnt, 0); - } - - mic.len = msg->lm_buflens[mic_idx]; - mic.data = lustre_msg_buf(msg, mic_idx, 0); - - major = lgss_verify_mic(mechctx, textcnt, text, 0, NULL, &mic); - if (major != GSS_S_COMPLETE) - CERROR("mic verify error: %08x\n", major); - - return major; -} - -/* - * return gss error code - */ -static -__u32 gss_unseal_msg(struct gss_ctx *mechctx, - struct lustre_msg *msgbuf, - int *msg_len, int msgbuf_len) -{ - rawobj_t clear_obj, hdrobj, token; - __u8 *clear_buf; - int clear_buflen; - __u32 major; - - if (msgbuf->lm_bufcount != 2) { - CERROR("invalid bufcount %d\n", msgbuf->lm_bufcount); - return GSS_S_FAILURE; - } - - /* allocate a temporary clear text buffer, same sized as token, - * we assume the final clear text size <= token size */ - clear_buflen = lustre_msg_buflen(msgbuf, 1); - OBD_ALLOC_LARGE(clear_buf, clear_buflen); - if (!clear_buf) - return GSS_S_FAILURE; - - /* buffer objects */ - hdrobj.len = lustre_msg_buflen(msgbuf, 0); - hdrobj.data = lustre_msg_buf(msgbuf, 0, 0); - token.len = lustre_msg_buflen(msgbuf, 1); - token.data = lustre_msg_buf(msgbuf, 1, 0); - clear_obj.len = clear_buflen; - clear_obj.data = clear_buf; - - major = lgss_unwrap(mechctx, &hdrobj, &token, &clear_obj); - if (major != GSS_S_COMPLETE) { - CERROR("unwrap message error: %08x\n", major); - GOTO(out_free, major = GSS_S_FAILURE); - } - LASSERT(clear_obj.len <= clear_buflen); - LASSERT(clear_obj.len <= msgbuf_len); - - /* now the decrypted message */ - memcpy(msgbuf, clear_obj.data, clear_obj.len); - *msg_len = clear_obj.len; - - major = GSS_S_COMPLETE; -out_free: - OBD_FREE_LARGE(clear_buf, clear_buflen); - return major; -} - -/******************************************** - * gss client context manipulation helpers * - ********************************************/ - -int cli_ctx_expire(struct ptlrpc_cli_ctx *ctx) -{ - LASSERT(atomic_read(&ctx->cc_refcount)); - - if (!test_and_set_bit(PTLRPC_CTX_DEAD_BIT, &ctx->cc_flags)) { - if (!ctx->cc_early_expire) - clear_bit(PTLRPC_CTX_UPTODATE_BIT, &ctx->cc_flags); - - CWARN("ctx %p(%u->%s) get expired: %lu(%+lds)\n", - ctx, ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec), - ctx->cc_expire, - ctx->cc_expire == 0 ? 0 : - cfs_time_sub(ctx->cc_expire, cfs_time_current_sec())); - - sptlrpc_cli_ctx_wakeup(ctx); - return 1; - } - - return 0; -} - -/* - * return 1 if the context is dead. - */ -int cli_ctx_check_death(struct ptlrpc_cli_ctx *ctx) -{ - if (unlikely(cli_ctx_is_dead(ctx))) - return 1; - - /* expire is 0 means never expire. a newly created gss context - * which during upcall may has 0 expiration */ - if (ctx->cc_expire == 0) - return 0; - - /* check real expiration */ - if (cfs_time_after(ctx->cc_expire, cfs_time_current_sec())) - return 0; - - cli_ctx_expire(ctx); - return 1; -} - -void gss_cli_ctx_uptodate(struct gss_cli_ctx *gctx) -{ - struct ptlrpc_cli_ctx *ctx = &gctx->gc_base; - unsigned long ctx_expiry; - - if (lgss_inquire_context(gctx->gc_mechctx, &ctx_expiry)) { - CERROR("ctx %p(%u): unable to inquire, expire it now\n", - gctx, ctx->cc_vcred.vc_uid); - ctx_expiry = 1; /* make it expired now */ - } - - ctx->cc_expire = gss_round_ctx_expiry(ctx_expiry, - ctx->cc_sec->ps_flvr.sf_flags); - - /* At this point this ctx might have been marked as dead by - * someone else, in which case nobody will make further use - * of it. we don't care, and mark it UPTODATE will help - * destroying server side context when it be destroyed. */ - set_bit(PTLRPC_CTX_UPTODATE_BIT, &ctx->cc_flags); - - if (sec_is_reverse(ctx->cc_sec)) { - CWARN("server installed reverse ctx %p idx "LPX64", " - "expiry %lu(%+lds)\n", ctx, - gss_handle_to_u64(&gctx->gc_handle), - ctx->cc_expire, ctx->cc_expire - cfs_time_current_sec()); - } else { - CWARN("client refreshed ctx %p idx "LPX64" (%u->%s), " - "expiry %lu(%+lds)\n", ctx, - gss_handle_to_u64(&gctx->gc_handle), - ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec), - ctx->cc_expire, ctx->cc_expire - cfs_time_current_sec()); - - /* install reverse svc ctx for root context */ - if (ctx->cc_vcred.vc_uid == 0) - gss_sec_install_rctx(ctx->cc_sec->ps_import, - ctx->cc_sec, ctx); - } - - sptlrpc_cli_ctx_wakeup(ctx); -} - -static void gss_cli_ctx_finalize(struct gss_cli_ctx *gctx) -{ - LASSERT(gctx->gc_base.cc_sec); - - if (gctx->gc_mechctx) { - lgss_delete_sec_context(&gctx->gc_mechctx); - gctx->gc_mechctx = NULL; - } - - if (!rawobj_empty(&gctx->gc_svc_handle)) { - /* forward ctx: mark buddy reverse svcctx soon-expire. */ - if (!sec_is_reverse(gctx->gc_base.cc_sec) && - !rawobj_empty(&gctx->gc_svc_handle)) - gss_svc_upcall_expire_rvs_ctx(&gctx->gc_svc_handle); - - rawobj_free(&gctx->gc_svc_handle); - } - - rawobj_free(&gctx->gc_handle); -} - -/* - * Based on sequence number algorithm as specified in RFC 2203. - * - * modified for our own problem: arriving request has valid sequence number, - * but unwrapping request might cost a long time, after that its sequence - * are not valid anymore (fall behind the window). It rarely happen, mostly - * under extreme load. - * - * note we should not check sequence before verify the integrity of incoming - * request, because just one attacking request with high sequence number might - * cause all following request be dropped. - * - * so here we use a multi-phase approach: prepare 2 sequence windows, - * "main window" for normal sequence and "back window" for fall behind sequence. - * and 3-phase checking mechanism: - * 0 - before integrity verification, perform a initial sequence checking in - * main window, which only try and don't actually set any bits. if the - * sequence is high above the window or fit in the window and the bit - * is 0, then accept and proceed to integrity verification. otherwise - * reject this sequence. - * 1 - after integrity verification, check in main window again. if this - * sequence is high above the window or fit in the window and the bit - * is 0, then set the bit and accept; if it fit in the window but bit - * already set, then reject; if it fall behind the window, then proceed - * to phase 2. - * 2 - check in back window. if it is high above the window or fit in the - * window and the bit is 0, then set the bit and accept. otherwise reject. - * - * return value: - * 1: looks like a replay - * 0: is ok - * -1: is a replay - * - * note phase 0 is necessary, because otherwise replay attacking request of - * sequence which between the 2 windows can't be detected. - * - * this mechanism can't totally solve the problem, but could help much less - * number of valid requests be dropped. - */ -static -int gss_do_check_seq(unsigned long *window, __u32 win_size, __u32 *max_seq, - __u32 seq_num, int phase) -{ - LASSERT(phase >= 0 && phase <= 2); - - if (seq_num > *max_seq) { - /* - * 1. high above the window - */ - if (phase == 0) - return 0; - - if (seq_num >= *max_seq + win_size) { - memset(window, 0, win_size / 8); - *max_seq = seq_num; - } else { - while (*max_seq < seq_num) { - (*max_seq)++; - __clear_bit((*max_seq) % win_size, window); - } - } - __set_bit(seq_num % win_size, window); - } else if (seq_num + win_size <= *max_seq) { - /* - * 2. low behind the window - */ - if (phase == 0 || phase == 2) - goto replay; - - CWARN("seq %u is %u behind (size %d), check backup window\n", - seq_num, *max_seq - win_size - seq_num, win_size); - return 1; - } else { - /* - * 3. fit into the window - */ - switch (phase) { - case 0: - if (test_bit(seq_num % win_size, window)) - goto replay; - break; - case 1: - case 2: - if (__test_and_set_bit(seq_num % win_size, window)) - goto replay; - break; - } - } - - return 0; - -replay: - CERROR("seq %u (%s %s window) is a replay: max %u, winsize %d\n", - seq_num, - seq_num + win_size > *max_seq ? "in" : "behind", - phase == 2 ? "backup " : "main", - *max_seq, win_size); - return -1; -} - -/* - * Based on sequence number algorithm as specified in RFC 2203. - * - * if @set == 0: initial check, don't set any bit in window - * if @sec == 1: final check, set bit in window - */ -int gss_check_seq_num(struct gss_svc_seq_data *ssd, __u32 seq_num, int set) -{ - int rc = 0; - - spin_lock(&ssd->ssd_lock); - - if (set == 0) { - /* - * phase 0 testing - */ - rc = gss_do_check_seq(ssd->ssd_win_main, GSS_SEQ_WIN_MAIN, - &ssd->ssd_max_main, seq_num, 0); - if (unlikely(rc)) - gss_stat_oos_record_svc(0, 1); - } else { - /* - * phase 1 checking main window - */ - rc = gss_do_check_seq(ssd->ssd_win_main, GSS_SEQ_WIN_MAIN, - &ssd->ssd_max_main, seq_num, 1); - switch (rc) { - case -1: - gss_stat_oos_record_svc(1, 1); - /* fall through */ - case 0: - goto exit; - } - /* - * phase 2 checking back window - */ - rc = gss_do_check_seq(ssd->ssd_win_back, GSS_SEQ_WIN_BACK, - &ssd->ssd_max_back, seq_num, 2); - if (rc) - gss_stat_oos_record_svc(2, 1); - else - gss_stat_oos_record_svc(2, 0); - } -exit: - spin_unlock(&ssd->ssd_lock); - return rc; -} - -/*************************************** - * cred APIs * - ***************************************/ - -static inline int gss_cli_payload(struct ptlrpc_cli_ctx *ctx, - int msgsize, int privacy) -{ - return gss_mech_payload(NULL, msgsize, privacy); -} - -static int gss_cli_bulk_payload(struct ptlrpc_cli_ctx *ctx, - struct sptlrpc_flavor *flvr, - int reply, int read) -{ - int payload = sizeof(struct ptlrpc_bulk_sec_desc); - - LASSERT(SPTLRPC_FLVR_BULK_TYPE(flvr->sf_rpc) == SPTLRPC_BULK_DEFAULT); - - if ((!reply && !read) || (reply && read)) { - switch (SPTLRPC_FLVR_BULK_SVC(flvr->sf_rpc)) { - case SPTLRPC_BULK_SVC_NULL: - break; - case SPTLRPC_BULK_SVC_INTG: - payload += gss_cli_payload(ctx, 0, 0); - break; - case SPTLRPC_BULK_SVC_PRIV: - payload += gss_cli_payload(ctx, 0, 1); - break; - case SPTLRPC_BULK_SVC_AUTH: - default: - LBUG(); - } - } - - return payload; -} - -int gss_cli_ctx_match(struct ptlrpc_cli_ctx *ctx, struct vfs_cred *vcred) -{ - return (ctx->cc_vcred.vc_uid == vcred->vc_uid); -} - -void gss_cli_ctx_flags2str(unsigned long flags, char *buf, int bufsize) -{ - buf[0] = '\0'; - - if (flags & PTLRPC_CTX_NEW) - strncat(buf, "new,", bufsize); - if (flags & PTLRPC_CTX_UPTODATE) - strncat(buf, "uptodate,", bufsize); - if (flags & PTLRPC_CTX_DEAD) - strncat(buf, "dead,", bufsize); - if (flags & PTLRPC_CTX_ERROR) - strncat(buf, "error,", bufsize); - if (flags & PTLRPC_CTX_CACHED) - strncat(buf, "cached,", bufsize); - if (flags & PTLRPC_CTX_ETERNAL) - strncat(buf, "eternal,", bufsize); - if (buf[0] == '\0') - strncat(buf, "-,", bufsize); - - buf[strlen(buf) - 1] = '\0'; -} - -int gss_cli_ctx_sign(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req) -{ - struct gss_cli_ctx *gctx = ctx2gctx(ctx); - __u32 flags = 0, seq, svc; - int rc; - - LASSERT(req->rq_reqbuf); - LASSERT(req->rq_reqbuf->lm_bufcount >= 2); - LASSERT(req->rq_cli_ctx == ctx); - - /* nothing to do for context negotiation RPCs */ - if (req->rq_ctx_init) - return 0; - - svc = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc); - if (req->rq_pack_bulk) - flags |= LUSTRE_GSS_PACK_BULK; - if (req->rq_pack_udesc) - flags |= LUSTRE_GSS_PACK_USER; - -redo: - seq = atomic_inc_return(&gctx->gc_seq); - - rc = gss_sign_msg(req->rq_reqbuf, gctx->gc_mechctx, - ctx->cc_sec->ps_part, - flags, gctx->gc_proc, seq, svc, - &gctx->gc_handle); - if (rc < 0) - return rc; - - /* gss_sign_msg() msg might take long time to finish, in which period - * more rpcs could be wrapped up and sent out. if we found too many - * of them we should repack this rpc, because sent it too late might - * lead to the sequence number fall behind the window on server and - * be dropped. also applies to gss_cli_ctx_seal(). - * - * Note: null mode doesn't check sequence number. */ - if (svc != SPTLRPC_SVC_NULL && - atomic_read(&gctx->gc_seq) - seq > GSS_SEQ_REPACK_THRESHOLD) { - int behind = atomic_read(&gctx->gc_seq) - seq; - - gss_stat_oos_record_cli(behind); - CWARN("req %p: %u behind, retry signing\n", req, behind); - goto redo; - } - - req->rq_reqdata_len = rc; - return 0; -} - -static -int gss_cli_ctx_handle_err_notify(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req, - struct gss_header *ghdr) -{ - struct gss_err_header *errhdr; - int rc; - - LASSERT(ghdr->gh_proc == PTLRPC_GSS_PROC_ERR); - - errhdr = (struct gss_err_header *) ghdr; - - CWARN("req x"LPU64"/t"LPU64", ctx %p idx "LPX64"(%u->%s): " - "%sserver respond (%08x/%08x)\n", - req->rq_xid, req->rq_transno, ctx, - gss_handle_to_u64(&ctx2gctx(ctx)->gc_handle), - ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec), - sec_is_reverse(ctx->cc_sec) ? "reverse" : "", - errhdr->gh_major, errhdr->gh_minor); - - /* context fini rpc, let it failed */ - if (req->rq_ctx_fini) { - CWARN("context fini rpc failed\n"); - return -EINVAL; - } - - /* reverse sec, just return error, don't expire this ctx because it's - * crucial to callback rpcs. note if the callback rpc failed because - * of bit flip during network transfer, the client will be evicted - * directly. so more gracefully we probably want let it retry for - * number of times. */ - if (sec_is_reverse(ctx->cc_sec)) - return -EINVAL; - - if (errhdr->gh_major != GSS_S_NO_CONTEXT && - errhdr->gh_major != GSS_S_BAD_SIG) - return -EACCES; - - /* server return NO_CONTEXT might be caused by context expire - * or server reboot/failover. we try to refresh a new ctx which - * be transparent to upper layer. - * - * In some cases, our gss handle is possible to be incidentally - * identical to another handle since the handle itself is not - * fully random. In krb5 case, the GSS_S_BAD_SIG will be - * returned, maybe other gss error for other mechanism. - * - * if we add new mechanism, make sure the correct error are - * returned in this case. */ - CWARN("%s: server might lost the context, retrying\n", - errhdr->gh_major == GSS_S_NO_CONTEXT ? "NO_CONTEXT" : "BAD_SIG"); - - sptlrpc_cli_ctx_expire(ctx); - - /* we need replace the ctx right here, otherwise during - * resent we'll hit the logic in sptlrpc_req_refresh_ctx() - * which keep the ctx with RESEND flag, thus we'll never - * get rid of this ctx. */ - rc = sptlrpc_req_replace_dead_ctx(req); - if (rc == 0) - req->rq_resend = 1; - - return rc; -} - -int gss_cli_ctx_verify(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req) -{ - struct gss_cli_ctx *gctx; - struct gss_header *ghdr, *reqhdr; - struct lustre_msg *msg = req->rq_repdata; - __u32 major; - int pack_bulk, swabbed, rc = 0; - - LASSERT(req->rq_cli_ctx == ctx); - LASSERT(msg); - - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - - /* special case for context negotiation, rq_repmsg/rq_replen actually - * are not used currently. but early reply always be treated normally */ - if (req->rq_ctx_init && !req->rq_early) { - req->rq_repmsg = lustre_msg_buf(msg, 1, 0); - req->rq_replen = msg->lm_buflens[1]; - return 0; - } - - if (msg->lm_bufcount < 2 || msg->lm_bufcount > 4) { - CERROR("unexpected bufcount %u\n", msg->lm_bufcount); - return -EPROTO; - } - - swabbed = ptlrpc_rep_need_swab(req); - - ghdr = gss_swab_header(msg, 0, swabbed); - if (ghdr == NULL) { - CERROR("can't decode gss header\n"); - return -EPROTO; - } - - /* sanity checks */ - reqhdr = lustre_msg_buf(msg, 0, sizeof(*reqhdr)); - LASSERT(reqhdr); - - if (ghdr->gh_version != reqhdr->gh_version) { - CERROR("gss version %u mismatch, expect %u\n", - ghdr->gh_version, reqhdr->gh_version); - return -EPROTO; - } - - switch (ghdr->gh_proc) { - case PTLRPC_GSS_PROC_DATA: - pack_bulk = ghdr->gh_flags & LUSTRE_GSS_PACK_BULK; - - if (!req->rq_early && - !equi(req->rq_pack_bulk == 1, pack_bulk)) { - CERROR("%s bulk flag in reply\n", - req->rq_pack_bulk ? "missing" : "unexpected"); - return -EPROTO; - } - - if (ghdr->gh_seq != reqhdr->gh_seq) { - CERROR("seqnum %u mismatch, expect %u\n", - ghdr->gh_seq, reqhdr->gh_seq); - return -EPROTO; - } - - if (ghdr->gh_svc != reqhdr->gh_svc) { - CERROR("svc %u mismatch, expect %u\n", - ghdr->gh_svc, reqhdr->gh_svc); - return -EPROTO; - } - - if (swabbed) - gss_header_swabber(ghdr); - - major = gss_verify_msg(msg, gctx->gc_mechctx, reqhdr->gh_svc); - if (major != GSS_S_COMPLETE) { - CERROR("failed to verify reply: %x\n", major); - return -EPERM; - } - - if (req->rq_early && reqhdr->gh_svc == SPTLRPC_SVC_NULL) { - __u32 cksum; - - cksum = crc32_le(!(__u32) 0, - lustre_msg_buf(msg, 1, 0), - lustre_msg_buflen(msg, 1)); - if (cksum != msg->lm_cksum) { - CWARN("early reply checksum mismatch: " - "%08x != %08x\n", cksum, msg->lm_cksum); - return -EPROTO; - } - } - - if (pack_bulk) { - /* bulk checksum is right after the lustre msg */ - if (msg->lm_bufcount < 3) { - CERROR("Invalid reply bufcount %u\n", - msg->lm_bufcount); - return -EPROTO; - } - - rc = bulk_sec_desc_unpack(msg, 2, swabbed); - if (rc) { - CERROR("unpack bulk desc: %d\n", rc); - return rc; - } - } - - req->rq_repmsg = lustre_msg_buf(msg, 1, 0); - req->rq_replen = msg->lm_buflens[1]; - break; - case PTLRPC_GSS_PROC_ERR: - if (req->rq_early) { - CERROR("server return error with early reply\n"); - rc = -EPROTO; - } else { - rc = gss_cli_ctx_handle_err_notify(ctx, req, ghdr); - } - break; - default: - CERROR("unknown gss proc %d\n", ghdr->gh_proc); - rc = -EPROTO; - } - - return rc; -} - -int gss_cli_ctx_seal(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req) -{ - struct gss_cli_ctx *gctx; - rawobj_t hdrobj, msgobj, token; - struct gss_header *ghdr; - __u32 buflens[2], major; - int wiresize, rc; - - LASSERT(req->rq_clrbuf); - LASSERT(req->rq_cli_ctx == ctx); - LASSERT(req->rq_reqlen); - - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - - /* final clear data length */ - req->rq_clrdata_len = lustre_msg_size_v2(req->rq_clrbuf->lm_bufcount, - req->rq_clrbuf->lm_buflens); - - /* calculate wire data length */ - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = gss_cli_payload(&gctx->gc_base, req->rq_clrdata_len, 1); - wiresize = lustre_msg_size_v2(2, buflens); - - /* allocate wire buffer */ - if (req->rq_pool) { - /* pre-allocated */ - LASSERT(req->rq_reqbuf); - LASSERT(req->rq_reqbuf != req->rq_clrbuf); - LASSERT(req->rq_reqbuf_len >= wiresize); - } else { - OBD_ALLOC_LARGE(req->rq_reqbuf, wiresize); - if (!req->rq_reqbuf) - return -ENOMEM; - req->rq_reqbuf_len = wiresize; - } - - lustre_init_msg_v2(req->rq_reqbuf, 2, buflens, NULL); - req->rq_reqbuf->lm_secflvr = req->rq_flvr.sf_rpc; - - /* gss header */ - ghdr = lustre_msg_buf(req->rq_reqbuf, 0, 0); - ghdr->gh_version = PTLRPC_GSS_VERSION; - ghdr->gh_sp = (__u8) ctx->cc_sec->ps_part; - ghdr->gh_flags = 0; - ghdr->gh_proc = gctx->gc_proc; - ghdr->gh_svc = SPTLRPC_SVC_PRIV; - ghdr->gh_handle.len = gctx->gc_handle.len; - memcpy(ghdr->gh_handle.data, gctx->gc_handle.data, gctx->gc_handle.len); - if (req->rq_pack_bulk) - ghdr->gh_flags |= LUSTRE_GSS_PACK_BULK; - if (req->rq_pack_udesc) - ghdr->gh_flags |= LUSTRE_GSS_PACK_USER; - -redo: - ghdr->gh_seq = atomic_inc_return(&gctx->gc_seq); - - /* buffer objects */ - hdrobj.len = PTLRPC_GSS_HEADER_SIZE; - hdrobj.data = (__u8 *) ghdr; - msgobj.len = req->rq_clrdata_len; - msgobj.data = (__u8 *) req->rq_clrbuf; - token.len = lustre_msg_buflen(req->rq_reqbuf, 1); - token.data = lustre_msg_buf(req->rq_reqbuf, 1, 0); - - major = lgss_wrap(gctx->gc_mechctx, &hdrobj, &msgobj, - req->rq_clrbuf_len, &token); - if (major != GSS_S_COMPLETE) { - CERROR("priv: wrap message error: %08x\n", major); - GOTO(err_free, rc = -EPERM); - } - LASSERT(token.len <= buflens[1]); - - /* see explain in gss_cli_ctx_sign() */ - if (unlikely(atomic_read(&gctx->gc_seq) - ghdr->gh_seq > - GSS_SEQ_REPACK_THRESHOLD)) { - int behind = atomic_read(&gctx->gc_seq) - ghdr->gh_seq; - - gss_stat_oos_record_cli(behind); - CWARN("req %p: %u behind, retry sealing\n", req, behind); - - ghdr->gh_seq = atomic_inc_return(&gctx->gc_seq); - goto redo; - } - - /* now set the final wire data length */ - req->rq_reqdata_len = lustre_shrink_msg(req->rq_reqbuf, 1, token.len,0); - return 0; - -err_free: - if (!req->rq_pool) { - OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); - req->rq_reqbuf = NULL; - req->rq_reqbuf_len = 0; - } - return rc; -} - -int gss_cli_ctx_unseal(struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_request *req) -{ - struct gss_cli_ctx *gctx; - struct gss_header *ghdr; - struct lustre_msg *msg = req->rq_repdata; - int msglen, pack_bulk, swabbed, rc; - __u32 major; - - LASSERT(req->rq_cli_ctx == ctx); - LASSERT(req->rq_ctx_init == 0); - LASSERT(msg); - - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - swabbed = ptlrpc_rep_need_swab(req); - - ghdr = gss_swab_header(msg, 0, swabbed); - if (ghdr == NULL) { - CERROR("can't decode gss header\n"); - return -EPROTO; - } - - /* sanity checks */ - if (ghdr->gh_version != PTLRPC_GSS_VERSION) { - CERROR("gss version %u mismatch, expect %u\n", - ghdr->gh_version, PTLRPC_GSS_VERSION); - return -EPROTO; - } - - switch (ghdr->gh_proc) { - case PTLRPC_GSS_PROC_DATA: - pack_bulk = ghdr->gh_flags & LUSTRE_GSS_PACK_BULK; - - if (!req->rq_early && - !equi(req->rq_pack_bulk == 1, pack_bulk)) { - CERROR("%s bulk flag in reply\n", - req->rq_pack_bulk ? "missing" : "unexpected"); - return -EPROTO; - } - - if (swabbed) - gss_header_swabber(ghdr); - - /* use rq_repdata_len as buffer size, which assume unseal - * doesn't need extra memory space. for precise control, we'd - * better calculate out actual buffer size as - * (repbuf_len - offset - repdata_len) */ - major = gss_unseal_msg(gctx->gc_mechctx, msg, - &msglen, req->rq_repdata_len); - if (major != GSS_S_COMPLETE) { - CERROR("failed to unwrap reply: %x\n", major); - rc = -EPERM; - break; - } - - swabbed = __lustre_unpack_msg(msg, msglen); - if (swabbed < 0) { - CERROR("Failed to unpack after decryption\n"); - return -EPROTO; - } - - if (msg->lm_bufcount < 1) { - CERROR("Invalid reply buffer: empty\n"); - return -EPROTO; - } - - if (pack_bulk) { - if (msg->lm_bufcount < 2) { - CERROR("bufcount %u: missing bulk sec desc\n", - msg->lm_bufcount); - return -EPROTO; - } - - /* bulk checksum is the last segment */ - if (bulk_sec_desc_unpack(msg, msg->lm_bufcount - 1, - swabbed)) - return -EPROTO; - } - - req->rq_repmsg = lustre_msg_buf(msg, 0, 0); - req->rq_replen = msg->lm_buflens[0]; - - rc = 0; - break; - case PTLRPC_GSS_PROC_ERR: - if (req->rq_early) { - CERROR("server return error with early reply\n"); - rc = -EPROTO; - } else { - rc = gss_cli_ctx_handle_err_notify(ctx, req, ghdr); - } - break; - default: - CERROR("unexpected proc %d\n", ghdr->gh_proc); - rc = -EPERM; - } - - return rc; -} - -/********************************************* - * reverse context installation * - *********************************************/ - -static inline -int gss_install_rvs_svc_ctx(struct obd_import *imp, - struct gss_sec *gsec, - struct gss_cli_ctx *gctx) -{ - return gss_svc_upcall_install_rvs_ctx(imp, gsec, gctx); -} - -/********************************************* - * GSS security APIs * - *********************************************/ -int gss_sec_create_common(struct gss_sec *gsec, - struct ptlrpc_sec_policy *policy, - struct obd_import *imp, - struct ptlrpc_svc_ctx *svcctx, - struct sptlrpc_flavor *sf) -{ - struct ptlrpc_sec *sec; - - LASSERT(imp); - LASSERT(SPTLRPC_FLVR_POLICY(sf->sf_rpc) == SPTLRPC_POLICY_GSS); - - gsec->gs_mech = lgss_subflavor_to_mech( - SPTLRPC_FLVR_BASE_SUB(sf->sf_rpc)); - if (!gsec->gs_mech) { - CERROR("gss backend 0x%x not found\n", - SPTLRPC_FLVR_BASE_SUB(sf->sf_rpc)); - return -EOPNOTSUPP; - } - - spin_lock_init(&gsec->gs_lock); - gsec->gs_rvs_hdl = 0ULL; - - /* initialize upper ptlrpc_sec */ - sec = &gsec->gs_base; - sec->ps_policy = policy; - atomic_set(&sec->ps_refcount, 0); - atomic_set(&sec->ps_nctx, 0); - sec->ps_id = sptlrpc_get_next_secid(); - sec->ps_flvr = *sf; - sec->ps_import = class_import_get(imp); - spin_lock_init(&sec->ps_lock); - INIT_LIST_HEAD(&sec->ps_gc_list); - - if (!svcctx) { - sec->ps_gc_interval = GSS_GC_INTERVAL; - } else { - LASSERT(sec_is_reverse(sec)); - - /* never do gc on reverse sec */ - sec->ps_gc_interval = 0; - } - - if (SPTLRPC_FLVR_BULK_SVC(sec->ps_flvr.sf_rpc) == SPTLRPC_BULK_SVC_PRIV) - sptlrpc_enc_pool_add_user(); - - CDEBUG(D_SEC, "create %s%s@%p\n", (svcctx ? "reverse " : ""), - policy->sp_name, gsec); - return 0; -} - -void gss_sec_destroy_common(struct gss_sec *gsec) -{ - struct ptlrpc_sec *sec = &gsec->gs_base; - - LASSERT(sec->ps_import); - LASSERT(atomic_read(&sec->ps_refcount) == 0); - LASSERT(atomic_read(&sec->ps_nctx) == 0); - - if (gsec->gs_mech) { - lgss_mech_put(gsec->gs_mech); - gsec->gs_mech = NULL; - } - - class_import_put(sec->ps_import); - - if (SPTLRPC_FLVR_BULK_SVC(sec->ps_flvr.sf_rpc) == SPTLRPC_BULK_SVC_PRIV) - sptlrpc_enc_pool_del_user(); -} - -void gss_sec_kill(struct ptlrpc_sec *sec) -{ - sec->ps_dying = 1; -} - -int gss_cli_ctx_init_common(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx, - struct ptlrpc_ctx_ops *ctxops, - struct vfs_cred *vcred) -{ - struct gss_cli_ctx *gctx = ctx2gctx(ctx); - - gctx->gc_win = 0; - atomic_set(&gctx->gc_seq, 0); - - INIT_HLIST_NODE(&ctx->cc_cache); - atomic_set(&ctx->cc_refcount, 0); - ctx->cc_sec = sec; - ctx->cc_ops = ctxops; - ctx->cc_expire = 0; - ctx->cc_flags = PTLRPC_CTX_NEW; - ctx->cc_vcred = *vcred; - spin_lock_init(&ctx->cc_lock); - INIT_LIST_HEAD(&ctx->cc_req_list); - INIT_LIST_HEAD(&ctx->cc_gc_chain); - - /* take a ref on belonging sec, balanced in ctx destroying */ - atomic_inc(&sec->ps_refcount); - /* statistic only */ - atomic_inc(&sec->ps_nctx); - - CDEBUG(D_SEC, "%s@%p: create ctx %p(%u->%s)\n", - sec->ps_policy->sp_name, ctx->cc_sec, - ctx, ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec)); - return 0; -} - -/* - * return value: - * 1: the context has been taken care of by someone else - * 0: proceed to really destroy the context locally - */ -int gss_cli_ctx_fini_common(struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx) -{ - struct gss_cli_ctx *gctx = ctx2gctx(ctx); - - LASSERT(atomic_read(&sec->ps_nctx) > 0); - LASSERT(atomic_read(&ctx->cc_refcount) == 0); - LASSERT(ctx->cc_sec == sec); - - /* - * remove UPTODATE flag of reverse ctx thus we won't send fini rpc, - * this is to avoid potential problems of client side reverse svc ctx - * be mis-destroyed in various recovery scenarios. anyway client can - * manage its reverse ctx well by associating it with its buddy ctx. - */ - if (sec_is_reverse(sec)) - ctx->cc_flags &= ~PTLRPC_CTX_UPTODATE; - - if (gctx->gc_mechctx) { - /* the final context fini rpc will use this ctx too, and it's - * asynchronous which finished by request_out_callback(). so - * we add refcount, whoever drop finally drop the refcount to - * 0 should responsible for the rest of destroy. */ - atomic_inc(&ctx->cc_refcount); - - gss_do_ctx_fini_rpc(gctx); - gss_cli_ctx_finalize(gctx); - - if (!atomic_dec_and_test(&ctx->cc_refcount)) - return 1; - } - - if (sec_is_reverse(sec)) - CWARN("reverse sec %p: destroy ctx %p\n", - ctx->cc_sec, ctx); - else - CWARN("%s@%p: destroy ctx %p(%u->%s)\n", - sec->ps_policy->sp_name, ctx->cc_sec, - ctx, ctx->cc_vcred.vc_uid, sec2target_str(ctx->cc_sec)); - - return 0; -} - -static -int gss_alloc_reqbuf_intg(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int svc, int msgsize) -{ - int bufsize, txtsize; - int bufcnt = 2; - __u32 buflens[5]; - - /* - * on-wire data layout: - * - gss header - * - lustre message - * - user descriptor (optional) - * - bulk sec descriptor (optional) - * - signature (optional) - * - svc == NULL: NULL - * - svc == AUTH: signature of gss header - * - svc == INTG: signature of all above - * - * if this is context negotiation, reserver fixed space - * at the last (signature) segment regardless of svc mode. - */ - - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - txtsize = buflens[0]; - - buflens[1] = msgsize; - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[1]; - - if (req->rq_pack_udesc) { - buflens[bufcnt] = sptlrpc_current_user_desc_size(); - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[bufcnt]; - bufcnt++; - } - - if (req->rq_pack_bulk) { - buflens[bufcnt] = gss_cli_bulk_payload(req->rq_cli_ctx, - &req->rq_flvr, - 0, req->rq_bulk_read); - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[bufcnt]; - bufcnt++; - } - - if (req->rq_ctx_init) - buflens[bufcnt++] = GSS_CTX_INIT_MAX_LEN; - else if (svc != SPTLRPC_SVC_NULL) - buflens[bufcnt++] = gss_cli_payload(req->rq_cli_ctx, txtsize,0); - - bufsize = lustre_msg_size_v2(bufcnt, buflens); - - if (!req->rq_reqbuf) { - bufsize = size_roundup_power2(bufsize); - - OBD_ALLOC_LARGE(req->rq_reqbuf, bufsize); - if (!req->rq_reqbuf) - return -ENOMEM; - - req->rq_reqbuf_len = bufsize; - } else { - LASSERT(req->rq_pool); - LASSERT(req->rq_reqbuf_len >= bufsize); - memset(req->rq_reqbuf, 0, bufsize); - } - - lustre_init_msg_v2(req->rq_reqbuf, bufcnt, buflens, NULL); - req->rq_reqbuf->lm_secflvr = req->rq_flvr.sf_rpc; - - req->rq_reqmsg = lustre_msg_buf(req->rq_reqbuf, 1, msgsize); - LASSERT(req->rq_reqmsg); - - /* pack user desc here, later we might leave current user's process */ - if (req->rq_pack_udesc) - sptlrpc_pack_user_desc(req->rq_reqbuf, 2); - - return 0; -} - -static -int gss_alloc_reqbuf_priv(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int msgsize) -{ - __u32 ibuflens[3], wbuflens[2]; - int ibufcnt; - int clearsize, wiresize; - - LASSERT(req->rq_clrbuf == NULL); - LASSERT(req->rq_clrbuf_len == 0); - - /* Inner (clear) buffers - * - lustre message - * - user descriptor (optional) - * - bulk checksum (optional) - */ - ibufcnt = 1; - ibuflens[0] = msgsize; - - if (req->rq_pack_udesc) - ibuflens[ibufcnt++] = sptlrpc_current_user_desc_size(); - if (req->rq_pack_bulk) - ibuflens[ibufcnt++] = gss_cli_bulk_payload(req->rq_cli_ctx, - &req->rq_flvr, 0, - req->rq_bulk_read); - - clearsize = lustre_msg_size_v2(ibufcnt, ibuflens); - /* to allow append padding during encryption */ - clearsize += GSS_MAX_CIPHER_BLOCK; - - /* Wrapper (wire) buffers - * - gss header - * - cipher text - */ - wbuflens[0] = PTLRPC_GSS_HEADER_SIZE; - wbuflens[1] = gss_cli_payload(req->rq_cli_ctx, clearsize, 1); - wiresize = lustre_msg_size_v2(2, wbuflens); - - if (req->rq_pool) { - /* rq_reqbuf is preallocated */ - LASSERT(req->rq_reqbuf); - LASSERT(req->rq_reqbuf_len >= wiresize); - - memset(req->rq_reqbuf, 0, req->rq_reqbuf_len); - - /* if the pre-allocated buffer is big enough, we just pack - * both clear buf & request buf in it, to avoid more alloc. */ - if (clearsize + wiresize <= req->rq_reqbuf_len) { - req->rq_clrbuf = - (void *) (((char *) req->rq_reqbuf) + wiresize); - } else { - CWARN("pre-allocated buf size %d is not enough for " - "both clear (%d) and cipher (%d) text, proceed " - "with extra allocation\n", req->rq_reqbuf_len, - clearsize, wiresize); - } - } - - if (!req->rq_clrbuf) { - clearsize = size_roundup_power2(clearsize); - - OBD_ALLOC_LARGE(req->rq_clrbuf, clearsize); - if (!req->rq_clrbuf) - return -ENOMEM; - } - req->rq_clrbuf_len = clearsize; - - lustre_init_msg_v2(req->rq_clrbuf, ibufcnt, ibuflens, NULL); - req->rq_reqmsg = lustre_msg_buf(req->rq_clrbuf, 0, msgsize); - - if (req->rq_pack_udesc) - sptlrpc_pack_user_desc(req->rq_clrbuf, 1); - - return 0; -} - -/* - * NOTE: any change of request buffer allocation should also consider - * changing enlarge_reqbuf() series functions. - */ -int gss_alloc_reqbuf(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int msgsize) -{ - int svc = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc); - - LASSERT(!req->rq_pack_bulk || - (req->rq_bulk_read || req->rq_bulk_write)); - - switch (svc) { - case SPTLRPC_SVC_NULL: - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - return gss_alloc_reqbuf_intg(sec, req, svc, msgsize); - case SPTLRPC_SVC_PRIV: - return gss_alloc_reqbuf_priv(sec, req, msgsize); - default: - LASSERTF(0, "bad rpc flavor %x\n", req->rq_flvr.sf_rpc); - return 0; - } -} - -void gss_free_reqbuf(struct ptlrpc_sec *sec, - struct ptlrpc_request *req) -{ - int privacy; - - LASSERT(!req->rq_pool || req->rq_reqbuf); - privacy = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc) == SPTLRPC_SVC_PRIV; - - if (!req->rq_clrbuf) - goto release_reqbuf; - - /* release clear buffer */ - LASSERT(privacy); - LASSERT(req->rq_clrbuf_len); - - if (req->rq_pool == NULL || - req->rq_clrbuf < req->rq_reqbuf || - (char *) req->rq_clrbuf >= - (char *) req->rq_reqbuf + req->rq_reqbuf_len) - OBD_FREE_LARGE(req->rq_clrbuf, req->rq_clrbuf_len); - - req->rq_clrbuf = NULL; - req->rq_clrbuf_len = 0; - -release_reqbuf: - if (!req->rq_pool && req->rq_reqbuf) { - LASSERT(req->rq_reqbuf_len); - - OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); - req->rq_reqbuf = NULL; - req->rq_reqbuf_len = 0; - } -} - -static int do_alloc_repbuf(struct ptlrpc_request *req, int bufsize) -{ - bufsize = size_roundup_power2(bufsize); - - OBD_ALLOC_LARGE(req->rq_repbuf, bufsize); - if (!req->rq_repbuf) - return -ENOMEM; - - req->rq_repbuf_len = bufsize; - return 0; -} - -static -int gss_alloc_repbuf_intg(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int svc, int msgsize) -{ - int txtsize; - __u32 buflens[4]; - int bufcnt = 2; - int alloc_size; - - /* - * on-wire data layout: - * - gss header - * - lustre message - * - bulk sec descriptor (optional) - * - signature (optional) - * - svc == NULL: NULL - * - svc == AUTH: signature of gss header - * - svc == INTG: signature of all above - * - * if this is context negotiation, reserver fixed space - * at the last (signature) segment regardless of svc mode. - */ - - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - txtsize = buflens[0]; - - buflens[1] = msgsize; - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[1]; - - if (req->rq_pack_bulk) { - buflens[bufcnt] = gss_cli_bulk_payload(req->rq_cli_ctx, - &req->rq_flvr, - 1, req->rq_bulk_read); - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[bufcnt]; - bufcnt++; - } - - if (req->rq_ctx_init) - buflens[bufcnt++] = GSS_CTX_INIT_MAX_LEN; - else if (svc != SPTLRPC_SVC_NULL) - buflens[bufcnt++] = gss_cli_payload(req->rq_cli_ctx, txtsize,0); - - alloc_size = lustre_msg_size_v2(bufcnt, buflens); - - /* add space for early reply */ - alloc_size += gss_at_reply_off_integ; - - return do_alloc_repbuf(req, alloc_size); -} - -static -int gss_alloc_repbuf_priv(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int msgsize) -{ - int txtsize; - __u32 buflens[2]; - int bufcnt; - int alloc_size; - - /* inner buffers */ - bufcnt = 1; - buflens[0] = msgsize; - - if (req->rq_pack_bulk) - buflens[bufcnt++] = gss_cli_bulk_payload(req->rq_cli_ctx, - &req->rq_flvr, - 1, req->rq_bulk_read); - txtsize = lustre_msg_size_v2(bufcnt, buflens); - txtsize += GSS_MAX_CIPHER_BLOCK; - - /* wrapper buffers */ - bufcnt = 2; - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = gss_cli_payload(req->rq_cli_ctx, txtsize, 1); - - alloc_size = lustre_msg_size_v2(bufcnt, buflens); - /* add space for early reply */ - alloc_size += gss_at_reply_off_priv; - - return do_alloc_repbuf(req, alloc_size); -} - -int gss_alloc_repbuf(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int msgsize) -{ - int svc = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc); - - LASSERT(!req->rq_pack_bulk || - (req->rq_bulk_read || req->rq_bulk_write)); - - switch (svc) { - case SPTLRPC_SVC_NULL: - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - return gss_alloc_repbuf_intg(sec, req, svc, msgsize); - case SPTLRPC_SVC_PRIV: - return gss_alloc_repbuf_priv(sec, req, msgsize); - default: - LASSERTF(0, "bad rpc flavor %x\n", req->rq_flvr.sf_rpc); - return 0; - } -} - -void gss_free_repbuf(struct ptlrpc_sec *sec, - struct ptlrpc_request *req) -{ - OBD_FREE_LARGE(req->rq_repbuf, req->rq_repbuf_len); - req->rq_repbuf = NULL; - req->rq_repbuf_len = 0; - req->rq_repdata = NULL; - req->rq_repdata_len = 0; -} - -static int get_enlarged_msgsize(struct lustre_msg *msg, - int segment, int newsize) -{ - int save, newmsg_size; - - LASSERT(newsize >= msg->lm_buflens[segment]); - - save = msg->lm_buflens[segment]; - msg->lm_buflens[segment] = newsize; - newmsg_size = lustre_msg_size_v2(msg->lm_bufcount, msg->lm_buflens); - msg->lm_buflens[segment] = save; - - return newmsg_size; -} - -static int get_enlarged_msgsize2(struct lustre_msg *msg, - int segment1, int newsize1, - int segment2, int newsize2) -{ - int save1, save2, newmsg_size; - - LASSERT(newsize1 >= msg->lm_buflens[segment1]); - LASSERT(newsize2 >= msg->lm_buflens[segment2]); - - save1 = msg->lm_buflens[segment1]; - save2 = msg->lm_buflens[segment2]; - msg->lm_buflens[segment1] = newsize1; - msg->lm_buflens[segment2] = newsize2; - newmsg_size = lustre_msg_size_v2(msg->lm_bufcount, msg->lm_buflens); - msg->lm_buflens[segment1] = save1; - msg->lm_buflens[segment2] = save2; - - return newmsg_size; -} - -static -int gss_enlarge_reqbuf_intg(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int svc, - int segment, int newsize) -{ - struct lustre_msg *newbuf; - int txtsize, sigsize = 0, i; - int newmsg_size, newbuf_size; - - /* - * gss header is at seg 0; - * embedded msg is at seg 1; - * signature (if any) is at the last seg - */ - LASSERT(req->rq_reqbuf); - LASSERT(req->rq_reqbuf_len > req->rq_reqlen); - LASSERT(req->rq_reqbuf->lm_bufcount >= 2); - LASSERT(lustre_msg_buf(req->rq_reqbuf, 1, 0) == req->rq_reqmsg); - - /* 1. compute new embedded msg size */ - newmsg_size = get_enlarged_msgsize(req->rq_reqmsg, segment, newsize); - LASSERT(newmsg_size >= req->rq_reqbuf->lm_buflens[1]); - - /* 2. compute new wrapper msg size */ - if (svc == SPTLRPC_SVC_NULL) { - /* no signature, get size directly */ - newbuf_size = get_enlarged_msgsize(req->rq_reqbuf, - 1, newmsg_size); - } else { - txtsize = req->rq_reqbuf->lm_buflens[0]; - - if (svc == SPTLRPC_SVC_INTG) { - for (i = 1; i < req->rq_reqbuf->lm_bufcount; i++) - txtsize += req->rq_reqbuf->lm_buflens[i]; - txtsize += newmsg_size - req->rq_reqbuf->lm_buflens[1]; - } - - sigsize = gss_cli_payload(req->rq_cli_ctx, txtsize, 0); - LASSERT(sigsize >= msg_last_seglen(req->rq_reqbuf)); - - newbuf_size = get_enlarged_msgsize2( - req->rq_reqbuf, - 1, newmsg_size, - msg_last_segidx(req->rq_reqbuf), - sigsize); - } - - /* request from pool should always have enough buffer */ - LASSERT(!req->rq_pool || req->rq_reqbuf_len >= newbuf_size); - - if (req->rq_reqbuf_len < newbuf_size) { - newbuf_size = size_roundup_power2(newbuf_size); - - OBD_ALLOC_LARGE(newbuf, newbuf_size); - if (newbuf == NULL) - return -ENOMEM; - - /* Must lock this, so that otherwise unprotected change of - * rq_reqmsg is not racing with parallel processing of - * imp_replay_list traversing threads. See LU-3333 - * This is a bandaid at best, we really need to deal with this - * in request enlarging code before unpacking that's already - * there */ - if (req->rq_import) - spin_lock(&req->rq_import->imp_lock); - - memcpy(newbuf, req->rq_reqbuf, req->rq_reqbuf_len); - - OBD_FREE_LARGE(req->rq_reqbuf, req->rq_reqbuf_len); - req->rq_reqbuf = newbuf; - req->rq_reqbuf_len = newbuf_size; - req->rq_reqmsg = lustre_msg_buf(req->rq_reqbuf, 1, 0); - - if (req->rq_import) - spin_unlock(&req->rq_import->imp_lock); - } - - /* do enlargement, from wrapper to embedded, from end to begin */ - if (svc != SPTLRPC_SVC_NULL) - _sptlrpc_enlarge_msg_inplace(req->rq_reqbuf, - msg_last_segidx(req->rq_reqbuf), - sigsize); - - _sptlrpc_enlarge_msg_inplace(req->rq_reqbuf, 1, newmsg_size); - _sptlrpc_enlarge_msg_inplace(req->rq_reqmsg, segment, newsize); - - req->rq_reqlen = newmsg_size; - return 0; -} - -static -int gss_enlarge_reqbuf_priv(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int segment, int newsize) -{ - struct lustre_msg *newclrbuf; - int newmsg_size, newclrbuf_size, newcipbuf_size; - __u32 buflens[3]; - - /* - * embedded msg is at seg 0 of clear buffer; - * cipher text is at seg 2 of cipher buffer; - */ - LASSERT(req->rq_pool || - (req->rq_reqbuf == NULL && req->rq_reqbuf_len == 0)); - LASSERT(req->rq_reqbuf == NULL || - (req->rq_pool && req->rq_reqbuf->lm_bufcount == 3)); - LASSERT(req->rq_clrbuf); - LASSERT(req->rq_clrbuf_len > req->rq_reqlen); - LASSERT(lustre_msg_buf(req->rq_clrbuf, 0, 0) == req->rq_reqmsg); - - /* compute new embedded msg size */ - newmsg_size = get_enlarged_msgsize(req->rq_reqmsg, segment, newsize); - - /* compute new clear buffer size */ - newclrbuf_size = get_enlarged_msgsize(req->rq_clrbuf, 0, newmsg_size); - newclrbuf_size += GSS_MAX_CIPHER_BLOCK; - - /* compute new cipher buffer size */ - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = gss_cli_payload(req->rq_cli_ctx, buflens[0], 0); - buflens[2] = gss_cli_payload(req->rq_cli_ctx, newclrbuf_size, 1); - newcipbuf_size = lustre_msg_size_v2(3, buflens); - - /* handle the case that we put both clear buf and cipher buf into - * pre-allocated single buffer. */ - if (unlikely(req->rq_pool) && - req->rq_clrbuf >= req->rq_reqbuf && - (char *) req->rq_clrbuf < - (char *) req->rq_reqbuf + req->rq_reqbuf_len) { - /* it couldn't be better we still fit into the - * pre-allocated buffer. */ - if (newclrbuf_size + newcipbuf_size <= req->rq_reqbuf_len) { - void *src, *dst; - - if (req->rq_import) - spin_lock(&req->rq_import->imp_lock); - /* move clear text backward. */ - src = req->rq_clrbuf; - dst = (char *) req->rq_reqbuf + newcipbuf_size; - - memmove(dst, src, req->rq_clrbuf_len); - - req->rq_clrbuf = (struct lustre_msg *) dst; - req->rq_clrbuf_len = newclrbuf_size; - req->rq_reqmsg = lustre_msg_buf(req->rq_clrbuf, 0, 0); - - if (req->rq_import) - spin_unlock(&req->rq_import->imp_lock); - } else { - /* sadly we have to split out the clear buffer */ - LASSERT(req->rq_reqbuf_len >= newcipbuf_size); - LASSERT(req->rq_clrbuf_len < newclrbuf_size); - } - } - - if (req->rq_clrbuf_len < newclrbuf_size) { - newclrbuf_size = size_roundup_power2(newclrbuf_size); - - OBD_ALLOC_LARGE(newclrbuf, newclrbuf_size); - if (newclrbuf == NULL) - return -ENOMEM; - - /* Must lock this, so that otherwise unprotected change of - * rq_reqmsg is not racing with parallel processing of - * imp_replay_list traversing threads. See LU-3333 - * This is a bandaid at best, we really need to deal with this - * in request enlarging code before unpacking that's already - * there */ - if (req->rq_import) - spin_lock(&req->rq_import->imp_lock); - - memcpy(newclrbuf, req->rq_clrbuf, req->rq_clrbuf_len); - - if (req->rq_reqbuf == NULL || - req->rq_clrbuf < req->rq_reqbuf || - (char *) req->rq_clrbuf >= - (char *) req->rq_reqbuf + req->rq_reqbuf_len) { - OBD_FREE_LARGE(req->rq_clrbuf, req->rq_clrbuf_len); - } - - req->rq_clrbuf = newclrbuf; - req->rq_clrbuf_len = newclrbuf_size; - req->rq_reqmsg = lustre_msg_buf(req->rq_clrbuf, 0, 0); - - if (req->rq_import) - spin_unlock(&req->rq_import->imp_lock); - } - - _sptlrpc_enlarge_msg_inplace(req->rq_clrbuf, 0, newmsg_size); - _sptlrpc_enlarge_msg_inplace(req->rq_reqmsg, segment, newsize); - req->rq_reqlen = newmsg_size; - - return 0; -} - -int gss_enlarge_reqbuf(struct ptlrpc_sec *sec, - struct ptlrpc_request *req, - int segment, int newsize) -{ - int svc = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc); - - LASSERT(!req->rq_ctx_init && !req->rq_ctx_fini); - - switch (svc) { - case SPTLRPC_SVC_NULL: - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - return gss_enlarge_reqbuf_intg(sec, req, svc, segment, newsize); - case SPTLRPC_SVC_PRIV: - return gss_enlarge_reqbuf_priv(sec, req, segment, newsize); - default: - LASSERTF(0, "bad rpc flavor %x\n", req->rq_flvr.sf_rpc); - return 0; - } -} - -int gss_sec_install_rctx(struct obd_import *imp, - struct ptlrpc_sec *sec, - struct ptlrpc_cli_ctx *ctx) -{ - struct gss_sec *gsec; - struct gss_cli_ctx *gctx; - int rc; - - gsec = container_of(sec, struct gss_sec, gs_base); - gctx = container_of(ctx, struct gss_cli_ctx, gc_base); - - rc = gss_install_rvs_svc_ctx(imp, gsec, gctx); - return rc; -} - -/******************************************** - * server side API * - ********************************************/ - -static inline -int gss_svc_reqctx_is_special(struct gss_svc_reqctx *grctx) -{ - LASSERT(grctx); - return (grctx->src_init || grctx->src_init_continue || - grctx->src_err_notify); -} - -static -void gss_svc_reqctx_free(struct gss_svc_reqctx *grctx) -{ - if (grctx->src_ctx) - gss_svc_upcall_put_ctx(grctx->src_ctx); - - sptlrpc_policy_put(grctx->src_base.sc_policy); - OBD_FREE_PTR(grctx); -} - -static inline -void gss_svc_reqctx_addref(struct gss_svc_reqctx *grctx) -{ - LASSERT(atomic_read(&grctx->src_base.sc_refcount) > 0); - atomic_inc(&grctx->src_base.sc_refcount); -} - -static inline -void gss_svc_reqctx_decref(struct gss_svc_reqctx *grctx) -{ - LASSERT(atomic_read(&grctx->src_base.sc_refcount) > 0); - - if (atomic_dec_and_test(&grctx->src_base.sc_refcount)) - gss_svc_reqctx_free(grctx); -} - -static -int gss_svc_sign(struct ptlrpc_request *req, - struct ptlrpc_reply_state *rs, - struct gss_svc_reqctx *grctx, - __u32 svc) -{ - __u32 flags = 0; - int rc; - - LASSERT(rs->rs_msg == lustre_msg_buf(rs->rs_repbuf, 1, 0)); - - /* embedded lustre_msg might have been shrunk */ - if (req->rq_replen != rs->rs_repbuf->lm_buflens[1]) - lustre_shrink_msg(rs->rs_repbuf, 1, req->rq_replen, 1); - - if (req->rq_pack_bulk) - flags |= LUSTRE_GSS_PACK_BULK; - - rc = gss_sign_msg(rs->rs_repbuf, grctx->src_ctx->gsc_mechctx, - LUSTRE_SP_ANY, flags, PTLRPC_GSS_PROC_DATA, - grctx->src_wirectx.gw_seq, svc, NULL); - if (rc < 0) - return rc; - - rs->rs_repdata_len = rc; - - if (likely(req->rq_packed_final)) { - if (lustre_msghdr_get_flags(req->rq_reqmsg) & MSGHDR_AT_SUPPORT) - req->rq_reply_off = gss_at_reply_off_integ; - else - req->rq_reply_off = 0; - } else { - if (svc == SPTLRPC_SVC_NULL) - rs->rs_repbuf->lm_cksum = crc32_le(!(__u32) 0, - lustre_msg_buf(rs->rs_repbuf, 1, 0), - lustre_msg_buflen(rs->rs_repbuf, 1)); - req->rq_reply_off = 0; - } - - return 0; -} - -int gss_pack_err_notify(struct ptlrpc_request *req, __u32 major, __u32 minor) -{ - struct gss_svc_reqctx *grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - struct ptlrpc_reply_state *rs; - struct gss_err_header *ghdr; - int replen = sizeof(struct ptlrpc_body); - int rc; - - //if (OBD_FAIL_CHECK_ORSET(OBD_FAIL_SVCGSS_ERR_NOTIFY, OBD_FAIL_ONCE)) - // return -EINVAL; - - grctx->src_err_notify = 1; - grctx->src_reserve_len = 0; - - rc = lustre_pack_reply_v2(req, 1, &replen, NULL, 0); - if (rc) { - CERROR("could not pack reply, err %d\n", rc); - return rc; - } - - /* gss hdr */ - rs = req->rq_reply_state; - LASSERT(rs->rs_repbuf->lm_buflens[1] >= sizeof(*ghdr)); - ghdr = lustre_msg_buf(rs->rs_repbuf, 0, 0); - ghdr->gh_version = PTLRPC_GSS_VERSION; - ghdr->gh_flags = 0; - ghdr->gh_proc = PTLRPC_GSS_PROC_ERR; - ghdr->gh_major = major; - ghdr->gh_minor = minor; - ghdr->gh_handle.len = 0; /* fake context handle */ - - rs->rs_repdata_len = lustre_msg_size_v2(rs->rs_repbuf->lm_bufcount, - rs->rs_repbuf->lm_buflens); - - CDEBUG(D_SEC, "prepare gss error notify(0x%x/0x%x) to %s\n", - major, minor, libcfs_nid2str(req->rq_peer.nid)); - return 0; -} - -static -int gss_svc_handle_init(struct ptlrpc_request *req, - struct gss_wire_ctx *gw) -{ - struct gss_svc_reqctx *grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - struct lustre_msg *reqbuf = req->rq_reqbuf; - struct obd_uuid *uuid; - struct obd_device *target; - rawobj_t uuid_obj, rvs_hdl, in_token; - __u32 lustre_svc; - __u32 *secdata, seclen; - int swabbed, rc; - - CDEBUG(D_SEC, "processing gss init(%d) request from %s\n", gw->gw_proc, - libcfs_nid2str(req->rq_peer.nid)); - - req->rq_ctx_init = 1; - - if (gw->gw_flags & LUSTRE_GSS_PACK_BULK) { - CERROR("unexpected bulk flag\n"); - return SECSVC_DROP; - } - - if (gw->gw_proc == PTLRPC_GSS_PROC_INIT && gw->gw_handle.len != 0) { - CERROR("proc %u: invalid handle length %u\n", - gw->gw_proc, gw->gw_handle.len); - return SECSVC_DROP; - } - - if (reqbuf->lm_bufcount < 3 || reqbuf->lm_bufcount > 4) { - CERROR("Invalid bufcount %d\n", reqbuf->lm_bufcount); - return SECSVC_DROP; - } - - swabbed = ptlrpc_req_need_swab(req); - - /* ctx initiate payload is in last segment */ - secdata = lustre_msg_buf(reqbuf, reqbuf->lm_bufcount - 1, 0); - seclen = reqbuf->lm_buflens[reqbuf->lm_bufcount - 1]; - - if (seclen < 4 + 4) { - CERROR("sec size %d too small\n", seclen); - return SECSVC_DROP; - } - - /* lustre svc type */ - lustre_svc = le32_to_cpu(*secdata++); - seclen -= 4; - - /* extract target uuid, note this code is somewhat fragile - * because touched internal structure of obd_uuid */ - if (rawobj_extract(&uuid_obj, &secdata, &seclen)) { - CERROR("failed to extract target uuid\n"); - return SECSVC_DROP; - } - uuid_obj.data[uuid_obj.len - 1] = '\0'; - - uuid = (struct obd_uuid *) uuid_obj.data; - target = class_uuid2obd(uuid); - if (!target || target->obd_stopping || !target->obd_set_up) { - CERROR("target '%s' is not available for context init (%s)\n", - uuid->uuid, target == NULL ? "no target" : - (target->obd_stopping ? "stopping" : "not set up")); - return SECSVC_DROP; - } - - /* extract reverse handle */ - if (rawobj_extract(&rvs_hdl, &secdata, &seclen)) { - CERROR("failed extract reverse handle\n"); - return SECSVC_DROP; - } - - /* extract token */ - if (rawobj_extract(&in_token, &secdata, &seclen)) { - CERROR("can't extract token\n"); - return SECSVC_DROP; - } - - rc = gss_svc_upcall_handle_init(req, grctx, gw, target, lustre_svc, - &rvs_hdl, &in_token); - if (rc != SECSVC_OK) - return rc; - - if (grctx->src_ctx->gsc_usr_mds || grctx->src_ctx->gsc_usr_oss || - grctx->src_ctx->gsc_usr_root) - CWARN("create svc ctx %p: user from %s authenticated as %s\n", - grctx->src_ctx, libcfs_nid2str(req->rq_peer.nid), - grctx->src_ctx->gsc_usr_mds ? "mds" : - (grctx->src_ctx->gsc_usr_oss ? "oss" : "root")); - else - CWARN("create svc ctx %p: accept user %u from %s\n", - grctx->src_ctx, grctx->src_ctx->gsc_uid, - libcfs_nid2str(req->rq_peer.nid)); - - if (gw->gw_flags & LUSTRE_GSS_PACK_USER) { - if (reqbuf->lm_bufcount < 4) { - CERROR("missing user descriptor\n"); - return SECSVC_DROP; - } - if (sptlrpc_unpack_user_desc(reqbuf, 2, swabbed)) { - CERROR("Mal-formed user descriptor\n"); - return SECSVC_DROP; - } - - req->rq_pack_udesc = 1; - req->rq_user_desc = lustre_msg_buf(reqbuf, 2, 0); - } - - req->rq_reqmsg = lustre_msg_buf(reqbuf, 1, 0); - req->rq_reqlen = lustre_msg_buflen(reqbuf, 1); - - return rc; -} - -/* - * last segment must be the gss signature. - */ -static -int gss_svc_verify_request(struct ptlrpc_request *req, - struct gss_svc_reqctx *grctx, - struct gss_wire_ctx *gw, - __u32 *major) -{ - struct gss_svc_ctx *gctx = grctx->src_ctx; - struct lustre_msg *msg = req->rq_reqbuf; - int offset = 2; - int swabbed; - - *major = GSS_S_COMPLETE; - - if (msg->lm_bufcount < 2) { - CERROR("Too few segments (%u) in request\n", msg->lm_bufcount); - return -EINVAL; - } - - if (gw->gw_svc == SPTLRPC_SVC_NULL) - goto verified; - - if (gss_check_seq_num(&gctx->gsc_seqdata, gw->gw_seq, 0)) { - CERROR("phase 0: discard replayed req: seq %u\n", gw->gw_seq); - *major = GSS_S_DUPLICATE_TOKEN; - return -EACCES; - } - - *major = gss_verify_msg(msg, gctx->gsc_mechctx, gw->gw_svc); - if (*major != GSS_S_COMPLETE) { - CERROR("failed to verify request: %x\n", *major); - return -EACCES; - } - - if (gctx->gsc_reverse == 0 && - gss_check_seq_num(&gctx->gsc_seqdata, gw->gw_seq, 1)) { - CERROR("phase 1+: discard replayed req: seq %u\n", gw->gw_seq); - *major = GSS_S_DUPLICATE_TOKEN; - return -EACCES; - } - -verified: - swabbed = ptlrpc_req_need_swab(req); - - /* user descriptor */ - if (gw->gw_flags & LUSTRE_GSS_PACK_USER) { - if (msg->lm_bufcount < (offset + 1)) { - CERROR("no user desc included\n"); - return -EINVAL; - } - - if (sptlrpc_unpack_user_desc(msg, offset, swabbed)) { - CERROR("Mal-formed user descriptor\n"); - return -EINVAL; - } - - req->rq_pack_udesc = 1; - req->rq_user_desc = lustre_msg_buf(msg, offset, 0); - offset++; - } - - /* check bulk_sec_desc data */ - if (gw->gw_flags & LUSTRE_GSS_PACK_BULK) { - if (msg->lm_bufcount < (offset + 1)) { - CERROR("missing bulk sec descriptor\n"); - return -EINVAL; - } - - if (bulk_sec_desc_unpack(msg, offset, swabbed)) - return -EINVAL; - - req->rq_pack_bulk = 1; - grctx->src_reqbsd = lustre_msg_buf(msg, offset, 0); - grctx->src_reqbsd_size = lustre_msg_buflen(msg, offset); - } - - req->rq_reqmsg = lustre_msg_buf(msg, 1, 0); - req->rq_reqlen = msg->lm_buflens[1]; - return 0; -} - -static -int gss_svc_unseal_request(struct ptlrpc_request *req, - struct gss_svc_reqctx *grctx, - struct gss_wire_ctx *gw, - __u32 *major) -{ - struct gss_svc_ctx *gctx = grctx->src_ctx; - struct lustre_msg *msg = req->rq_reqbuf; - int swabbed, msglen, offset = 1; - - if (gss_check_seq_num(&gctx->gsc_seqdata, gw->gw_seq, 0)) { - CERROR("phase 0: discard replayed req: seq %u\n", gw->gw_seq); - *major = GSS_S_DUPLICATE_TOKEN; - return -EACCES; - } - - *major = gss_unseal_msg(gctx->gsc_mechctx, msg, - &msglen, req->rq_reqdata_len); - if (*major != GSS_S_COMPLETE) { - CERROR("failed to unwrap request: %x\n", *major); - return -EACCES; - } - - if (gss_check_seq_num(&gctx->gsc_seqdata, gw->gw_seq, 1)) { - CERROR("phase 1+: discard replayed req: seq %u\n", gw->gw_seq); - *major = GSS_S_DUPLICATE_TOKEN; - return -EACCES; - } - - swabbed = __lustre_unpack_msg(msg, msglen); - if (swabbed < 0) { - CERROR("Failed to unpack after decryption\n"); - return -EINVAL; - } - req->rq_reqdata_len = msglen; - - if (msg->lm_bufcount < 1) { - CERROR("Invalid buffer: is empty\n"); - return -EINVAL; - } - - if (gw->gw_flags & LUSTRE_GSS_PACK_USER) { - if (msg->lm_bufcount < offset + 1) { - CERROR("no user descriptor included\n"); - return -EINVAL; - } - - if (sptlrpc_unpack_user_desc(msg, offset, swabbed)) { - CERROR("Mal-formed user descriptor\n"); - return -EINVAL; - } - - req->rq_pack_udesc = 1; - req->rq_user_desc = lustre_msg_buf(msg, offset, 0); - offset++; - } - - if (gw->gw_flags & LUSTRE_GSS_PACK_BULK) { - if (msg->lm_bufcount < offset + 1) { - CERROR("no bulk checksum included\n"); - return -EINVAL; - } - - if (bulk_sec_desc_unpack(msg, offset, swabbed)) - return -EINVAL; - - req->rq_pack_bulk = 1; - grctx->src_reqbsd = lustre_msg_buf(msg, offset, 0); - grctx->src_reqbsd_size = lustre_msg_buflen(msg, offset); - } - - req->rq_reqmsg = lustre_msg_buf(req->rq_reqbuf, 0, 0); - req->rq_reqlen = req->rq_reqbuf->lm_buflens[0]; - return 0; -} - -static -int gss_svc_handle_data(struct ptlrpc_request *req, - struct gss_wire_ctx *gw) -{ - struct gss_svc_reqctx *grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - __u32 major = 0; - int rc = 0; - - grctx->src_ctx = gss_svc_upcall_get_ctx(req, gw); - if (!grctx->src_ctx) { - major = GSS_S_NO_CONTEXT; - goto error; - } - - switch (gw->gw_svc) { - case SPTLRPC_SVC_NULL: - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - rc = gss_svc_verify_request(req, grctx, gw, &major); - break; - case SPTLRPC_SVC_PRIV: - rc = gss_svc_unseal_request(req, grctx, gw, &major); - break; - default: - CERROR("unsupported gss service %d\n", gw->gw_svc); - rc = -EINVAL; - } - - if (rc == 0) - return SECSVC_OK; - - CERROR("svc %u failed: major 0x%08x: req xid "LPU64" ctx %p idx " - LPX64"(%u->%s)\n", gw->gw_svc, major, req->rq_xid, - grctx->src_ctx, gss_handle_to_u64(&gw->gw_handle), - grctx->src_ctx->gsc_uid, libcfs_nid2str(req->rq_peer.nid)); -error: - /* we only notify client in case of NO_CONTEXT/BAD_SIG, which - * might happen after server reboot, to allow recovery. */ - if ((major == GSS_S_NO_CONTEXT || major == GSS_S_BAD_SIG) && - gss_pack_err_notify(req, major, 0) == 0) - return SECSVC_COMPLETE; - - return SECSVC_DROP; -} - -static -int gss_svc_handle_destroy(struct ptlrpc_request *req, - struct gss_wire_ctx *gw) -{ - struct gss_svc_reqctx *grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - __u32 major; - - req->rq_ctx_fini = 1; - req->rq_no_reply = 1; - - grctx->src_ctx = gss_svc_upcall_get_ctx(req, gw); - if (!grctx->src_ctx) { - CDEBUG(D_SEC, "invalid gss context handle for destroy.\n"); - return SECSVC_DROP; - } - - if (gw->gw_svc != SPTLRPC_SVC_INTG) { - CERROR("svc %u is not supported in destroy.\n", gw->gw_svc); - return SECSVC_DROP; - } - - if (gss_svc_verify_request(req, grctx, gw, &major)) - return SECSVC_DROP; - - CWARN("destroy svc ctx %p idx "LPX64" (%u->%s)\n", - grctx->src_ctx, gss_handle_to_u64(&gw->gw_handle), - grctx->src_ctx->gsc_uid, libcfs_nid2str(req->rq_peer.nid)); - - gss_svc_upcall_destroy_ctx(grctx->src_ctx); - - if (gw->gw_flags & LUSTRE_GSS_PACK_USER) { - if (req->rq_reqbuf->lm_bufcount < 4) { - CERROR("missing user descriptor, ignore it\n"); - return SECSVC_OK; - } - if (sptlrpc_unpack_user_desc(req->rq_reqbuf, 2, - ptlrpc_req_need_swab(req))) { - CERROR("Mal-formed user descriptor, ignore it\n"); - return SECSVC_OK; - } - - req->rq_pack_udesc = 1; - req->rq_user_desc = lustre_msg_buf(req->rq_reqbuf, 2, 0); - } - - return SECSVC_OK; -} - -int gss_svc_accept(struct ptlrpc_sec_policy *policy, struct ptlrpc_request *req) -{ - struct gss_header *ghdr; - struct gss_svc_reqctx *grctx; - struct gss_wire_ctx *gw; - int swabbed, rc; - - LASSERT(req->rq_reqbuf); - LASSERT(req->rq_svc_ctx == NULL); - - if (req->rq_reqbuf->lm_bufcount < 2) { - CERROR("buf count only %d\n", req->rq_reqbuf->lm_bufcount); - return SECSVC_DROP; - } - - swabbed = ptlrpc_req_need_swab(req); - - ghdr = gss_swab_header(req->rq_reqbuf, 0, swabbed); - if (ghdr == NULL) { - CERROR("can't decode gss header\n"); - return SECSVC_DROP; - } - - /* sanity checks */ - if (ghdr->gh_version != PTLRPC_GSS_VERSION) { - CERROR("gss version %u, expect %u\n", ghdr->gh_version, - PTLRPC_GSS_VERSION); - return SECSVC_DROP; - } - - req->rq_sp_from = ghdr->gh_sp; - - /* alloc grctx data */ - OBD_ALLOC_PTR(grctx); - if (!grctx) - return SECSVC_DROP; - - grctx->src_base.sc_policy = sptlrpc_policy_get(policy); - atomic_set(&grctx->src_base.sc_refcount, 1); - req->rq_svc_ctx = &grctx->src_base; - gw = &grctx->src_wirectx; - - /* save wire context */ - gw->gw_flags = ghdr->gh_flags; - gw->gw_proc = ghdr->gh_proc; - gw->gw_seq = ghdr->gh_seq; - gw->gw_svc = ghdr->gh_svc; - rawobj_from_netobj(&gw->gw_handle, &ghdr->gh_handle); - - /* keep original wire header which subject to checksum verification */ - if (swabbed) - gss_header_swabber(ghdr); - - switch (ghdr->gh_proc) { - case PTLRPC_GSS_PROC_INIT: - case PTLRPC_GSS_PROC_CONTINUE_INIT: - rc = gss_svc_handle_init(req, gw); - break; - case PTLRPC_GSS_PROC_DATA: - rc = gss_svc_handle_data(req, gw); - break; - case PTLRPC_GSS_PROC_DESTROY: - rc = gss_svc_handle_destroy(req, gw); - break; - default: - CERROR("unknown proc %u\n", gw->gw_proc); - rc = SECSVC_DROP; - break; - } - - switch (rc) { - case SECSVC_OK: - LASSERT(grctx->src_ctx); - - req->rq_auth_gss = 1; - req->rq_auth_remote = grctx->src_ctx->gsc_remote; - req->rq_auth_usr_mdt = grctx->src_ctx->gsc_usr_mds; - req->rq_auth_usr_ost = grctx->src_ctx->gsc_usr_oss; - req->rq_auth_usr_root = grctx->src_ctx->gsc_usr_root; - req->rq_auth_uid = grctx->src_ctx->gsc_uid; - req->rq_auth_mapped_uid = grctx->src_ctx->gsc_mapped_uid; - break; - case SECSVC_COMPLETE: - break; - case SECSVC_DROP: - gss_svc_reqctx_free(grctx); - req->rq_svc_ctx = NULL; - break; - } - - return rc; -} - -void gss_svc_invalidate_ctx(struct ptlrpc_svc_ctx *svc_ctx) -{ - struct gss_svc_reqctx *grctx; - - if (svc_ctx == NULL) { - return; - } - - grctx = gss_svc_ctx2reqctx(svc_ctx); - - CWARN("gss svc invalidate ctx %p(%u)\n", - grctx->src_ctx, grctx->src_ctx->gsc_uid); - gss_svc_upcall_destroy_ctx(grctx->src_ctx); -} - -static inline -int gss_svc_payload(struct gss_svc_reqctx *grctx, int early, - int msgsize, int privacy) -{ - /* we should treat early reply normally, but which is actually sharing - * the same ctx with original request, so in this case we should - * ignore the special ctx's special flags */ - if (early == 0 && gss_svc_reqctx_is_special(grctx)) - return grctx->src_reserve_len; - - return gss_mech_payload(NULL, msgsize, privacy); -} - -static int gss_svc_bulk_payload(struct gss_svc_ctx *gctx, - struct sptlrpc_flavor *flvr, - int read) -{ - int payload = sizeof(struct ptlrpc_bulk_sec_desc); - - if (read) { - switch (SPTLRPC_FLVR_BULK_SVC(flvr->sf_rpc)) { - case SPTLRPC_BULK_SVC_NULL: - break; - case SPTLRPC_BULK_SVC_INTG: - payload += gss_mech_payload(NULL, 0, 0); - break; - case SPTLRPC_BULK_SVC_PRIV: - payload += gss_mech_payload(NULL, 0, 1); - break; - case SPTLRPC_BULK_SVC_AUTH: - default: - LBUG(); - } - } - - return payload; -} - -int gss_svc_alloc_rs(struct ptlrpc_request *req, int msglen) -{ - struct gss_svc_reqctx *grctx; - struct ptlrpc_reply_state *rs; - int early, privacy, svc, bsd_off = 0; - __u32 ibuflens[2], buflens[4]; - int ibufcnt = 0, bufcnt; - int txtsize, wmsg_size, rs_size; - - LASSERT(msglen % 8 == 0); - - if (req->rq_pack_bulk && !req->rq_bulk_read && !req->rq_bulk_write) { - CERROR("client request bulk sec on non-bulk rpc\n"); - return -EPROTO; - } - - svc = SPTLRPC_FLVR_SVC(req->rq_flvr.sf_rpc); - early = (req->rq_packed_final == 0); - - grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - if (!early && gss_svc_reqctx_is_special(grctx)) - privacy = 0; - else - privacy = (svc == SPTLRPC_SVC_PRIV); - - if (privacy) { - /* inner clear buffers */ - ibufcnt = 1; - ibuflens[0] = msglen; - - if (req->rq_pack_bulk) { - LASSERT(grctx->src_reqbsd); - - bsd_off = ibufcnt; - ibuflens[ibufcnt++] = gss_svc_bulk_payload( - grctx->src_ctx, - &req->rq_flvr, - req->rq_bulk_read); - } - - txtsize = lustre_msg_size_v2(ibufcnt, ibuflens); - txtsize += GSS_MAX_CIPHER_BLOCK; - - /* wrapper buffer */ - bufcnt = 2; - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = gss_svc_payload(grctx, early, txtsize, 1); - } else { - bufcnt = 2; - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = msglen; - - txtsize = buflens[0]; - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[1]; - - if (req->rq_pack_bulk) { - LASSERT(grctx->src_reqbsd); - - bsd_off = bufcnt; - buflens[bufcnt] = gss_svc_bulk_payload( - grctx->src_ctx, - &req->rq_flvr, - req->rq_bulk_read); - if (svc == SPTLRPC_SVC_INTG) - txtsize += buflens[bufcnt]; - bufcnt++; - } - - if ((!early && gss_svc_reqctx_is_special(grctx)) || - svc != SPTLRPC_SVC_NULL) - buflens[bufcnt++] = gss_svc_payload(grctx, early, - txtsize, 0); - } - - wmsg_size = lustre_msg_size_v2(bufcnt, buflens); - - rs_size = sizeof(*rs) + wmsg_size; - rs = req->rq_reply_state; - - if (rs) { - /* pre-allocated */ - LASSERT(rs->rs_size >= rs_size); - } else { - OBD_ALLOC_LARGE(rs, rs_size); - if (rs == NULL) - return -ENOMEM; - - rs->rs_size = rs_size; - } - - rs->rs_repbuf = (struct lustre_msg *) (rs + 1); - rs->rs_repbuf_len = wmsg_size; - - /* initialize the buffer */ - if (privacy) { - lustre_init_msg_v2(rs->rs_repbuf, ibufcnt, ibuflens, NULL); - rs->rs_msg = lustre_msg_buf(rs->rs_repbuf, 0, msglen); - } else { - lustre_init_msg_v2(rs->rs_repbuf, bufcnt, buflens, NULL); - rs->rs_repbuf->lm_secflvr = req->rq_flvr.sf_rpc; - - rs->rs_msg = lustre_msg_buf(rs->rs_repbuf, 1, 0); - } - - if (bsd_off) { - grctx->src_repbsd = lustre_msg_buf(rs->rs_repbuf, bsd_off, 0); - grctx->src_repbsd_size = lustre_msg_buflen(rs->rs_repbuf, - bsd_off); - } - - gss_svc_reqctx_addref(grctx); - rs->rs_svc_ctx = req->rq_svc_ctx; - - LASSERT(rs->rs_msg); - req->rq_reply_state = rs; - return 0; -} - -static int gss_svc_seal(struct ptlrpc_request *req, - struct ptlrpc_reply_state *rs, - struct gss_svc_reqctx *grctx) -{ - struct gss_svc_ctx *gctx = grctx->src_ctx; - rawobj_t hdrobj, msgobj, token; - struct gss_header *ghdr; - __u8 *token_buf; - int token_buflen; - __u32 buflens[2], major; - int msglen, rc; - - /* get clear data length. note embedded lustre_msg might - * have been shrunk */ - if (req->rq_replen != lustre_msg_buflen(rs->rs_repbuf, 0)) - msglen = lustre_shrink_msg(rs->rs_repbuf, 0, req->rq_replen, 1); - else - msglen = lustre_msg_size_v2(rs->rs_repbuf->lm_bufcount, - rs->rs_repbuf->lm_buflens); - - /* temporarily use tail of buffer to hold gss header data */ - LASSERT(msglen + PTLRPC_GSS_HEADER_SIZE <= rs->rs_repbuf_len); - ghdr = (struct gss_header *) ((char *) rs->rs_repbuf + - rs->rs_repbuf_len - PTLRPC_GSS_HEADER_SIZE); - ghdr->gh_version = PTLRPC_GSS_VERSION; - ghdr->gh_sp = LUSTRE_SP_ANY; - ghdr->gh_flags = 0; - ghdr->gh_proc = PTLRPC_GSS_PROC_DATA; - ghdr->gh_seq = grctx->src_wirectx.gw_seq; - ghdr->gh_svc = SPTLRPC_SVC_PRIV; - ghdr->gh_handle.len = 0; - if (req->rq_pack_bulk) - ghdr->gh_flags |= LUSTRE_GSS_PACK_BULK; - - /* allocate temporary cipher buffer */ - token_buflen = gss_mech_payload(gctx->gsc_mechctx, msglen, 1); - OBD_ALLOC_LARGE(token_buf, token_buflen); - if (token_buf == NULL) - return -ENOMEM; - - hdrobj.len = PTLRPC_GSS_HEADER_SIZE; - hdrobj.data = (__u8 *) ghdr; - msgobj.len = msglen; - msgobj.data = (__u8 *) rs->rs_repbuf; - token.len = token_buflen; - token.data = token_buf; - - major = lgss_wrap(gctx->gsc_mechctx, &hdrobj, &msgobj, - rs->rs_repbuf_len - PTLRPC_GSS_HEADER_SIZE, &token); - if (major != GSS_S_COMPLETE) { - CERROR("wrap message error: %08x\n", major); - GOTO(out_free, rc = -EPERM); - } - LASSERT(token.len <= token_buflen); - - /* we are about to override data at rs->rs_repbuf, nullify pointers - * to which to catch further illegal usage. */ - if (req->rq_pack_bulk) { - grctx->src_repbsd = NULL; - grctx->src_repbsd_size = 0; - } - - /* now fill the actual wire data - * - gss header - * - gss token - */ - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = token.len; - - rs->rs_repdata_len = lustre_msg_size_v2(2, buflens); - LASSERT(rs->rs_repdata_len <= rs->rs_repbuf_len); - - lustre_init_msg_v2(rs->rs_repbuf, 2, buflens, NULL); - rs->rs_repbuf->lm_secflvr = req->rq_flvr.sf_rpc; - - memcpy(lustre_msg_buf(rs->rs_repbuf, 0, 0), ghdr, - PTLRPC_GSS_HEADER_SIZE); - memcpy(lustre_msg_buf(rs->rs_repbuf, 1, 0), token.data, token.len); - - /* reply offset */ - if (req->rq_packed_final && - (lustre_msghdr_get_flags(req->rq_reqmsg) & MSGHDR_AT_SUPPORT)) - req->rq_reply_off = gss_at_reply_off_priv; - else - req->rq_reply_off = 0; - - /* to catch upper layer's further access */ - rs->rs_msg = NULL; - req->rq_repmsg = NULL; - req->rq_replen = 0; - - rc = 0; -out_free: - OBD_FREE_LARGE(token_buf, token_buflen); - return rc; -} - -int gss_svc_authorize(struct ptlrpc_request *req) -{ - struct ptlrpc_reply_state *rs = req->rq_reply_state; - struct gss_svc_reqctx *grctx = gss_svc_ctx2reqctx(req->rq_svc_ctx); - struct gss_wire_ctx *gw = &grctx->src_wirectx; - int early, rc; - - early = (req->rq_packed_final == 0); - - if (!early && gss_svc_reqctx_is_special(grctx)) { - LASSERT(rs->rs_repdata_len != 0); - - req->rq_reply_off = gss_at_reply_off_integ; - return 0; - } - - /* early reply could happen in many cases */ - if (!early && - gw->gw_proc != PTLRPC_GSS_PROC_DATA && - gw->gw_proc != PTLRPC_GSS_PROC_DESTROY) { - CERROR("proc %d not support\n", gw->gw_proc); - return -EINVAL; - } - - LASSERT(grctx->src_ctx); - - switch (gw->gw_svc) { - case SPTLRPC_SVC_NULL: - case SPTLRPC_SVC_AUTH: - case SPTLRPC_SVC_INTG: - rc = gss_svc_sign(req, rs, grctx, gw->gw_svc); - break; - case SPTLRPC_SVC_PRIV: - rc = gss_svc_seal(req, rs, grctx); - break; - default: - CERROR("Unknown service %d\n", gw->gw_svc); - GOTO(out, rc = -EINVAL); - } - rc = 0; - -out: - return rc; -} - -void gss_svc_free_rs(struct ptlrpc_reply_state *rs) -{ - struct gss_svc_reqctx *grctx; - - LASSERT(rs->rs_svc_ctx); - grctx = container_of(rs->rs_svc_ctx, struct gss_svc_reqctx, src_base); - - gss_svc_reqctx_decref(grctx); - rs->rs_svc_ctx = NULL; - - if (!rs->rs_prealloc) - OBD_FREE_LARGE(rs, rs->rs_size); -} - -void gss_svc_free_ctx(struct ptlrpc_svc_ctx *ctx) -{ - LASSERT(atomic_read(&ctx->sc_refcount) == 0); - gss_svc_reqctx_free(gss_svc_ctx2reqctx(ctx)); -} - -int gss_copy_rvc_cli_ctx(struct ptlrpc_cli_ctx *cli_ctx, - struct ptlrpc_svc_ctx *svc_ctx) -{ - struct gss_cli_ctx *cli_gctx = ctx2gctx(cli_ctx); - struct gss_svc_ctx *svc_gctx = gss_svc_ctx2gssctx(svc_ctx); - struct gss_ctx *mechctx = NULL; - - LASSERT(cli_gctx); - LASSERT(svc_gctx && svc_gctx->gsc_mechctx); - - cli_gctx->gc_proc = PTLRPC_GSS_PROC_DATA; - cli_gctx->gc_win = GSS_SEQ_WIN; - - /* The problem is the reverse ctx might get lost in some recovery - * situations, and the same svc_ctx will be used to re-create it. - * if there's callback be sentout before that, new reverse ctx start - * with sequence 0 will lead to future callback rpc be treated as - * replay. - * - * each reverse root ctx will record its latest sequence number on its - * buddy svcctx before be destroyed, so here we continue use it. - */ - atomic_set(&cli_gctx->gc_seq, svc_gctx->gsc_rvs_seq); - - if (gss_svc_upcall_dup_handle(&cli_gctx->gc_svc_handle, svc_gctx)) { - CERROR("failed to dup svc handle\n"); - goto err_out; - } - - if (lgss_copy_reverse_context(svc_gctx->gsc_mechctx, &mechctx) != - GSS_S_COMPLETE) { - CERROR("failed to copy mech context\n"); - goto err_svc_handle; - } - - if (rawobj_dup(&cli_gctx->gc_handle, &svc_gctx->gsc_rvs_hdl)) { - CERROR("failed to dup reverse handle\n"); - goto err_ctx; - } - - cli_gctx->gc_mechctx = mechctx; - gss_cli_ctx_uptodate(cli_gctx); - - return 0; - -err_ctx: - lgss_delete_sec_context(&mechctx); -err_svc_handle: - rawobj_free(&cli_gctx->gc_svc_handle); -err_out: - return -ENOMEM; -} - -static void gss_init_at_reply_offset(void) -{ - __u32 buflens[3]; - int clearsize; - - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = lustre_msg_early_size(); - buflens[2] = gss_cli_payload(NULL, buflens[1], 0); - gss_at_reply_off_integ = lustre_msg_size_v2(3, buflens); - - buflens[0] = lustre_msg_early_size(); - clearsize = lustre_msg_size_v2(1, buflens); - buflens[0] = PTLRPC_GSS_HEADER_SIZE; - buflens[1] = gss_cli_payload(NULL, clearsize, 0); - buflens[2] = gss_cli_payload(NULL, clearsize, 1); - gss_at_reply_off_priv = lustre_msg_size_v2(3, buflens); -} - -int __init sptlrpc_gss_init(void) -{ - int rc; - - rc = gss_init_lproc(); - if (rc) - return rc; - - rc = gss_init_cli_upcall(); - if (rc) - goto out_lproc; - - rc = gss_init_svc_upcall(); - if (rc) - goto out_cli_upcall; - - rc = init_kerberos_module(); - if (rc) - goto out_svc_upcall; - - /* register policy after all other stuff be initialized, because it - * might be in used immediately after the registration. */ - - rc = gss_init_keyring(); - if (rc) - goto out_kerberos; - -#ifdef HAVE_GSS_PIPEFS - rc = gss_init_pipefs(); - if (rc) - goto out_keyring; -#endif - - gss_init_at_reply_offset(); - - return 0; - -#ifdef HAVE_GSS_PIPEFS -out_keyring: - gss_exit_keyring(); -#endif - -out_kerberos: - cleanup_kerberos_module(); -out_svc_upcall: - gss_exit_svc_upcall(); -out_cli_upcall: - gss_exit_cli_upcall(); -out_lproc: - gss_exit_lproc(); - return rc; -} - -static void __exit sptlrpc_gss_exit(void) -{ - gss_exit_keyring(); -#ifdef HAVE_GSS_PIPEFS - gss_exit_pipefs(); -#endif - cleanup_kerberos_module(); - gss_exit_svc_upcall(); - gss_exit_cli_upcall(); - gss_exit_lproc(); -} - -MODULE_AUTHOR("Sun Microsystems, Inc. "); -MODULE_DESCRIPTION("GSS security policy for Lustre"); -MODULE_LICENSE("GPL"); - -module_init(sptlrpc_gss_init); -module_exit(sptlrpc_gss_exit); -- cgit From 681fc807255a4f99742828be45b324c3b3af5d43 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:40:51 -0700 Subject: staging: lustre: lnet: include: minor whitespace fixes Found by the checkpatch.pl tool Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/lnet/api.h | 3 --- drivers/staging/lustre/include/linux/lnet/lib-lnet.h | 7 ++----- drivers/staging/lustre/include/linux/lnet/lib-types.h | 2 -- drivers/staging/lustre/include/linux/lnet/linux/api-support.h | 1 - drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h | 3 +-- drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h | 2 -- drivers/staging/lustre/include/linux/lnet/ptllnd.h | 1 - drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h | 1 - 8 files changed, 3 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/lnet/api.h b/drivers/staging/lustre/include/linux/lnet/api.h index 0b5478c4c47d..cd865175703f 100644 --- a/drivers/staging/lustre/include/linux/lnet/api.h +++ b/drivers/staging/lustre/include/linux/lnet/api.h @@ -84,7 +84,6 @@ void LNetSnprintHandle(char *str, int str_len, lnet_handle_any_t handle); /** @} lnet_addr */ - /** \defgroup lnet_me Match entries * * A match entry (abbreviated as ME) describes a set of criteria to accept @@ -171,7 +170,6 @@ int LNetEQFree(lnet_handle_eq_t eventq_in); int LNetEQGet(lnet_handle_eq_t eventq_in, lnet_event_t *event_out); - int LNetEQWait(lnet_handle_eq_t eventq_in, lnet_event_t *event_out); @@ -204,7 +202,6 @@ int LNetGet(lnet_nid_t self, unsigned int offset_in); /** @} lnet_data */ - /** \defgroup lnet_misc Miscellaneous operations. * Miscellaneous operations. * @{ */ diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index d8c1bf4265f6..5c5c2f989c80 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -166,7 +166,6 @@ lnet_net_lock_current(void) #define LNET_LOCK() lnet_net_lock(LNET_LOCK_EX) #define LNET_UNLOCK() lnet_net_unlock(LNET_LOCK_EX) - #define lnet_ptl_lock(ptl) spin_lock(&(ptl)->ptl_lock) #define lnet_ptl_unlock(ptl) spin_unlock(&(ptl)->ptl_lock) #define lnet_eq_wait_lock() spin_lock(&the_lnet.ln_eq_wait_lock) @@ -176,7 +175,6 @@ lnet_net_lock_current(void) #define LNET_MUTEX_LOCK(m) mutex_lock(m) #define LNET_MUTEX_UNLOCK(m) mutex_unlock(m) - #define MAX_PORTALS 64 /* these are only used by code with LNET_USE_LIB_FREELIST, but we still @@ -214,7 +212,6 @@ lnet_freelist_free(lnet_freelist_t *fl, void *obj) list_add(&o->fo_list, &fl->fl_list); } - static inline lnet_eq_t * lnet_eq_alloc(void) { @@ -640,7 +637,6 @@ lnet_net2rnethash(__u32 net) extern lnd_t the_lolnd; - int lnet_cpt_of_nid_locked(lnet_nid_t nid); int lnet_cpt_of_nid(lnet_nid_t nid); lnet_ni_t *lnet_nid2ni_locked(lnet_nid_t nid, int cpt); @@ -809,6 +805,7 @@ lnet_copy_flat2iov(unsigned int ndiov, struct iovec *diov, unsigned int doffset, int slen, void *src, unsigned int soffset, unsigned int nob) { struct iovec siov = {/*.iov_base = */ src, /*.iov_len = */slen}; + lnet_copy_iov2iov(ndiov, diov, doffset, 1, &siov, soffset, nob); } @@ -818,6 +815,7 @@ lnet_copy_flat2kiov(unsigned int ndiov, lnet_kiov_t *dkiov, unsigned int doffset int slen, void *src, unsigned int soffset, unsigned int nob) { struct iovec siov = {/* .iov_base = */ src, /* .iov_len = */ slen}; + lnet_copy_iov2kiov(ndiov, dkiov, doffset, 1, &siov, soffset, nob); } @@ -870,5 +868,4 @@ void lnet_peer_tables_destroy(void); int lnet_peer_tables_create(void); void lnet_debug_peer(lnet_nid_t nid); - #endif diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index 970f2d72948e..d0b0c261ba03 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -156,7 +156,6 @@ typedef struct { * "stub" reply using their current protocol */ #define LNET_PROTO_MAGIC 0x45726963 /* ! */ - #define LNET_PROTO_TCP_VERSION_MAJOR 1 #define LNET_PROTO_TCP_VERSION_MINOR 0 @@ -225,7 +224,6 @@ typedef struct lnet_msg { lnet_hdr_t msg_hdr; } lnet_msg_t; - typedef struct lnet_libhandle { struct list_head lh_hash_chain; __u64 lh_cookie; diff --git a/drivers/staging/lustre/include/linux/lnet/linux/api-support.h b/drivers/staging/lustre/include/linux/lnet/linux/api-support.h index ca78a0a4e908..e237ad6af422 100644 --- a/drivers/staging/lustre/include/linux/lnet/linux/api-support.h +++ b/drivers/staging/lustre/include/linux/lnet/linux/api-support.h @@ -39,5 +39,4 @@ #error Do not #include this file directly. #include instead #endif - #endif diff --git a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h index d91f2dd1494f..0f8f04d1ecff 100644 --- a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h @@ -45,7 +45,7 @@ #include "../../libcfs/libcfs.h" static inline __u64 -lnet_page2phys (struct page *p) +lnet_page2phys(struct page *p) { /* compiler optimizer will elide unused branches */ @@ -66,7 +66,6 @@ lnet_page2phys (struct page *p) } } - #define LNET_ROUTER #endif /* __LNET_LINUX_LIB_LNET_H__ */ diff --git a/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h b/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h index 1bde44ebb911..2dee1b97fb88 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h +++ b/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h @@ -37,7 +37,6 @@ #if defined(CONFIG_SYSCTL) - #define CTL_KRANAL 201 #define CTL_O2IBLND 205 #define CTL_PTLLND 206 @@ -45,7 +44,6 @@ #define CTL_SOCKLND 208 #define CTL_GNILND 210 - #endif #endif diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd.h b/drivers/staging/lustre/include/linux/lnet/ptllnd.h index 313442a7ed3e..b5d9383b2697 100644 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd.h +++ b/drivers/staging/lustre/include/linux/lnet/ptllnd.h @@ -46,7 +46,6 @@ */ #define LUSTRE_PORTALS_UNLINK_SEMANTICS - #ifdef _USING_LUSTRE_PORTALS_ /* NIDs are 64-bits on Lustre Portals */ diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h b/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h index 6dfdbd81beb4..808f37b64a4f 100644 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h +++ b/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h @@ -54,7 +54,6 @@ * enough to avoid RDMA for anything sent while control is not in liblustre */ #define PTLLND_MAX_ULND_MSG_SIZE 512 - /************************************************************************ * Portals LND Wire message format. * These are sent in sender's byte order (i.e. receiver flips). -- cgit From a393fd545fa2f800dc51cc8cd1a1538808ee5d20 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:47:02 -0700 Subject: staging: lustre: libcfs: include: minor whitespace fixes Found by the checkpatch.pl tool Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/include/linux/libcfs/curproc.h | 2 +- .../staging/lustre/include/linux/libcfs/libcfs.h | 6 ++-- .../lustre/include/linux/libcfs/libcfs_debug.h | 8 ++--- .../lustre/include/linux/libcfs/libcfs_fail.h | 2 ++ .../lustre/include/linux/libcfs/libcfs_hash.h | 18 +++++----- .../lustre/include/linux/libcfs/libcfs_ioctl.h | 33 ++++++++---------- .../include/linux/libcfs/libcfs_kernelcomm.h | 17 +++++---- .../lustre/include/linux/libcfs/libcfs_private.h | 40 +++++++++------------- .../lustre/include/linux/libcfs/libcfs_time.h | 5 ++- .../lustre/include/linux/libcfs/linux/kp30.h | 1 - .../lustre/include/linux/libcfs/linux/libcfs.h | 9 ++--- .../lustre/include/linux/libcfs/linux/linux-cpu.h | 1 - .../lustre/include/linux/libcfs/linux/linux-lock.h | 8 ----- .../lustre/include/linux/libcfs/linux/linux-mem.h | 3 +- .../lustre/include/linux/libcfs/linux/linux-prim.h | 1 - .../include/linux/libcfs/linux/linux-tcpip.h | 1 - .../lustre/include/linux/libcfs/linux/linux-time.h | 6 +--- .../include/linux/libcfs/linux/portals_compat25.h | 4 +-- .../staging/lustre/include/linux/libcfs/lucache.h | 10 +++--- .../lustre/include/linux/libcfs/params_tree.h | 20 +++++------ 20 files changed, 82 insertions(+), 113 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/curproc.h b/drivers/staging/lustre/include/linux/libcfs/curproc.h index b314f34d2e68..1edfca58c1c6 100644 --- a/drivers/staging/lustre/include/linux/libcfs/curproc.h +++ b/drivers/staging/lustre/include/linux/libcfs/curproc.h @@ -73,7 +73,7 @@ typedef __u32 cfs_cap_t; (1 << CFS_CAP_DAC_OVERRIDE) | \ (1 << CFS_CAP_DAC_READ_SEARCH) | \ (1 << CFS_CAP_FOWNER) | \ - (1 << CFS_CAP_FSETID ) | \ + (1 << CFS_CAP_FSETID) | \ (1 << CFS_CAP_LINUX_IMMUTABLE) | \ (1 << CFS_CAP_SYS_ADMIN) | \ (1 << CFS_CAP_SYS_BOOT) | \ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index a8b84ff4ee06..42e453cbd1d4 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -47,15 +47,15 @@ #include "curproc.h" #ifndef offsetof -# define offsetof(typ,memb) ((long)(long_ptr_t)((char *)&(((typ *)0)->memb))) +# define offsetof(typ, memb) ((long)(long_ptr_t)((char *)&(((typ *)0)->memb))) #endif #ifndef ARRAY_SIZE -#define ARRAY_SIZE(a) ((sizeof (a)) / (sizeof ((a)[0]))) +#define ARRAY_SIZE(a) ((sizeof(a)) / (sizeof((a)[0]))) #endif #if !defined(swap) -#define swap(x,y) do { typeof(x) z = x; x = y; y = z; } while (0) +#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0) #endif #if !defined(container_of) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h index b270d84def98..b43c9ad8fd15 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h @@ -254,19 +254,19 @@ do { \ goto label; \ } while (0) -extern int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata, +int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata, const char *format1, ...) __attribute__ ((format (printf, 2, 3))); -extern int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata, +int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata, const char *format1, va_list args, const char *format2, ...) __attribute__ ((format (printf, 4, 5))); /* other external symbols that tracefile provides: */ -extern int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, +int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, const char *usr_buffer, int usr_buffer_nob); -extern int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, +int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, const char *knl_buffer, char *append); #define LIBCFS_DEBUG_FILE_PATH_DEFAULT "/tmp/lustre-log" diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h index 8393c2703ce6..1934ec20e536 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h @@ -153,6 +153,7 @@ static inline void cfs_race(__u32 id) if (CFS_FAIL_PRECHECK(id)) { if (unlikely(__cfs_fail_check_set(id, 0, CFS_FAIL_LOC_NOSET))) { int rc; + cfs_race_state = 0; CERROR("cfs_race id %x sleeping\n", id); cfs_wait_event_interruptible(cfs_race_waitq, @@ -165,6 +166,7 @@ static inline void cfs_race(__u32 id) } } } + #define CFS_RACE(id) cfs_race(id) #endif /* _LIBCFS_FAIL_H */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_hash.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_hash.h index 954164361ca4..375586bf7312 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_hash.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_hash.h @@ -628,21 +628,21 @@ static inline int cfs_hash_bd_dec_and_lock(struct cfs_hash *hs, struct cfs_hash_ } static inline struct hlist_head *cfs_hash_bd_hhead(struct cfs_hash *hs, - struct cfs_hash_bd *bd) + struct cfs_hash_bd *bd) { return hs->hs_hops->hop_hhead(hs, bd); } struct hlist_node *cfs_hash_bd_lookup_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bd, const void *key); + struct cfs_hash_bd *bd, const void *key); struct hlist_node *cfs_hash_bd_peek_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bd, const void *key); + struct cfs_hash_bd *bd, const void *key); struct hlist_node *cfs_hash_bd_findadd_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bd, const void *key, + struct cfs_hash_bd *bd, const void *key, struct hlist_node *hnode, int insist_add); struct hlist_node *cfs_hash_bd_finddel_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bd, const void *key, + struct cfs_hash_bd *bd, const void *key, struct hlist_node *hnode); /** @@ -661,21 +661,21 @@ static inline void cfs_hash_dual_bd_get_and_lock(struct cfs_hash *hs, const void } struct hlist_node *cfs_hash_dual_bd_lookup_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bds, + struct cfs_hash_bd *bds, const void *key); struct hlist_node *cfs_hash_dual_bd_findadd_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bds, + struct cfs_hash_bd *bds, const void *key, struct hlist_node *hnode, int insist_add); struct hlist_node *cfs_hash_dual_bd_finddel_locked(struct cfs_hash *hs, - struct cfs_hash_bd *bds, + struct cfs_hash_bd *bds, const void *key, struct hlist_node *hnode); /* Hash init/cleanup functions */ struct cfs_hash *cfs_hash_create(char *name, unsigned cur_bits, unsigned max_bits, - unsigned bkt_bits, unsigned extra_bytes, + unsigned bkt_bits, unsigned extra_bytes, unsigned min_theta, unsigned max_theta, cfs_hash_ops_t *ops, unsigned flags); diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h index 49ba62a4daa8..87f2d901c7c1 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h @@ -41,7 +41,6 @@ #ifndef __LIBCFS_IOCTL_H__ #define __LIBCFS_IOCTL_H__ - #define LIBCFS_IOCTL_VERSION 0x0001000a struct libcfs_ioctl_data { @@ -90,7 +89,6 @@ do { \ data.ioc_len = sizeof(data); \ } while (0) - struct libcfs_ioctl_handler { struct list_head item; int (*handle_ioctl)(unsigned int cmd, struct libcfs_ioctl_data *data); @@ -102,11 +100,9 @@ struct libcfs_ioctl_handler { /* .handle_ioctl = */ func \ } - /* FIXME check conflict with lustre_lib.h */ #define LIBCFS_IOC_DEBUG_MASK _IOWR('f', 250, long) - /* ioctls for manipulating snapshots 30- */ #define IOC_LIBCFS_TYPE 'e' #define IOC_LIBCFS_MIN_NR 30 @@ -149,6 +145,7 @@ struct libcfs_ioctl_handler { static inline int libcfs_ioctl_packlen(struct libcfs_ioctl_data *data) { int len = sizeof(*data); + len += cfs_size_round(data->ioc_inllen1); len += cfs_size_round(data->ioc_inllen2); return len; @@ -157,64 +154,62 @@ static inline int libcfs_ioctl_packlen(struct libcfs_ioctl_data *data) static inline int libcfs_ioctl_is_invalid(struct libcfs_ioctl_data *data) { if (data->ioc_len > (1<<30)) { - CERROR ("LIBCFS ioctl: ioc_len larger than 1<<30\n"); + CERROR("LIBCFS ioctl: ioc_len larger than 1<<30\n"); return 1; } if (data->ioc_inllen1 > (1<<30)) { - CERROR ("LIBCFS ioctl: ioc_inllen1 larger than 1<<30\n"); + CERROR("LIBCFS ioctl: ioc_inllen1 larger than 1<<30\n"); return 1; } if (data->ioc_inllen2 > (1<<30)) { - CERROR ("LIBCFS ioctl: ioc_inllen2 larger than 1<<30\n"); + CERROR("LIBCFS ioctl: ioc_inllen2 larger than 1<<30\n"); return 1; } if (data->ioc_inlbuf1 && !data->ioc_inllen1) { - CERROR ("LIBCFS ioctl: inlbuf1 pointer but 0 length\n"); + CERROR("LIBCFS ioctl: inlbuf1 pointer but 0 length\n"); return 1; } if (data->ioc_inlbuf2 && !data->ioc_inllen2) { - CERROR ("LIBCFS ioctl: inlbuf2 pointer but 0 length\n"); + CERROR("LIBCFS ioctl: inlbuf2 pointer but 0 length\n"); return 1; } if (data->ioc_pbuf1 && !data->ioc_plen1) { - CERROR ("LIBCFS ioctl: pbuf1 pointer but 0 length\n"); + CERROR("LIBCFS ioctl: pbuf1 pointer but 0 length\n"); return 1; } if (data->ioc_pbuf2 && !data->ioc_plen2) { - CERROR ("LIBCFS ioctl: pbuf2 pointer but 0 length\n"); + CERROR("LIBCFS ioctl: pbuf2 pointer but 0 length\n"); return 1; } if (data->ioc_plen1 && !data->ioc_pbuf1) { - CERROR ("LIBCFS ioctl: plen1 nonzero but no pbuf1 pointer\n"); + CERROR("LIBCFS ioctl: plen1 nonzero but no pbuf1 pointer\n"); return 1; } if (data->ioc_plen2 && !data->ioc_pbuf2) { - CERROR ("LIBCFS ioctl: plen2 nonzero but no pbuf2 pointer\n"); + CERROR("LIBCFS ioctl: plen2 nonzero but no pbuf2 pointer\n"); return 1; } - if ((__u32)libcfs_ioctl_packlen(data) != data->ioc_len ) { - CERROR ("LIBCFS ioctl: packlen != ioc_len\n"); + if ((__u32)libcfs_ioctl_packlen(data) != data->ioc_len) { + CERROR("LIBCFS ioctl: packlen != ioc_len\n"); return 1; } if (data->ioc_inllen1 && data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') { - CERROR ("LIBCFS ioctl: inlbuf1 not 0 terminated\n"); + CERROR("LIBCFS ioctl: inlbuf1 not 0 terminated\n"); return 1; } if (data->ioc_inllen2 && data->ioc_bulk[cfs_size_round(data->ioc_inllen1) + data->ioc_inllen2 - 1] != '\0') { - CERROR ("LIBCFS ioctl: inlbuf2 not 0 terminated\n"); + CERROR("LIBCFS ioctl: inlbuf2 not 0 terminated\n"); return 1; } return 0; } - int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand); int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand); int libcfs_ioctl_getdata(char *buf, char *end, void *arg); int libcfs_ioctl_popdata(void *arg, void *buf, int size); - #endif /* __LIBCFS_IOCTL_H__ */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h index 037ae8a6d531..f19a121a37cd 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_kernelcomm.h @@ -47,7 +47,6 @@ #error Do not #include this file directly. #include instead #endif - /* KUC message header. * All current and future KUC messages should use this header. * To avoid having to include Lustre headers from libcfs, define this here. @@ -90,12 +89,12 @@ typedef int (*libcfs_kkuc_cb_t)(__u32 data, void *cb_arg); #define KUC_GRP_MAX KUC_GRP_HSM /* Kernel methods */ -extern int libcfs_kkuc_msg_put(struct file *fp, void *payload); -extern int libcfs_kkuc_group_put(int group, void *payload); -extern int libcfs_kkuc_group_add(struct file *fp, int uid, int group, +int libcfs_kkuc_msg_put(struct file *fp, void *payload); +int libcfs_kkuc_group_put(int group, void *payload); +int libcfs_kkuc_group_add(struct file *fp, int uid, int group, __u32 data); -extern int libcfs_kkuc_group_rem(int uid, int group); -extern int libcfs_kkuc_group_foreach(int group, libcfs_kkuc_cb_t cb_func, +int libcfs_kkuc_group_rem(int uid, int group); +int libcfs_kkuc_group_foreach(int group, libcfs_kkuc_cb_t cb_func, void *cb_arg); #define LK_FLG_STOP 0x01 @@ -111,9 +110,9 @@ typedef struct lustre_kernelcomm { } __attribute__((packed)) lustre_kernelcomm; /* Userspace methods */ -extern int libcfs_ukuc_start(lustre_kernelcomm *l, int groups); -extern int libcfs_ukuc_stop(lustre_kernelcomm *l); -extern int libcfs_ukuc_msg_get(lustre_kernelcomm *l, char *buf, int maxsize, +int libcfs_ukuc_start(lustre_kernelcomm *l, int groups); +int libcfs_ukuc_stop(lustre_kernelcomm *l); +int libcfs_ukuc_msg_get(lustre_kernelcomm *l, char *buf, int maxsize, int transport); #endif /* __LIBCFS_KERNELCOMM_H__ */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h index c184746cee4c..de64f1dc790c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h @@ -50,7 +50,6 @@ #endif - /* * When this is on, LASSERT macro includes check for assignment used instead * of equality check, but doesn't have unlikely(). Turn this on from time to @@ -58,7 +57,6 @@ */ #define LASSERT_CHECKED (0) - #define LASSERTF(cond, fmt, ...) \ do { \ if (unlikely(!(cond))) { \ @@ -80,18 +78,18 @@ do { \ */ # define LINVRNT(exp) LASSERT(exp) #else -# define LINVRNT(exp) ((void)sizeof!!(exp)) +# define LINVRNT(exp) ((void)sizeof !!(exp)) #endif #define KLASSERT(e) LASSERT(e) -void lbug_with_loc(struct libcfs_debug_msg_data *) __attribute__((noreturn)); +void lbug_with_loc(struct libcfs_debug_msg_data *)__attribute__((noreturn)); #define LBUG() \ do { \ LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL); \ lbug_with_loc(&msgdata); \ -} while(0) +} while (0) extern atomic_t libcfs_kmemory; /* @@ -111,7 +109,6 @@ do { \ # define libcfs_kmem_read() \ atomic_read(&libcfs_kmemory) - #ifndef LIBCFS_VMALLOC_SIZE #define LIBCFS_VMALLOC_SIZE (2 << PAGE_CACHE_SHIFT) /* 2 pages */ #endif @@ -220,7 +217,6 @@ int libcfs_debug_mark_buffer(const char *text); void libcfs_debug_set_level(unsigned int debug_level); - /* * allocate per-cpu-partition data, returned value is an array of pointers, * variable can be indexed by CPU ID. @@ -339,8 +335,8 @@ do { \ #define LASSERT_ATOMIC_ZERO(a) LASSERT_ATOMIC_EQ(a, 0) #define LASSERT_ATOMIC_POS(a) LASSERT_ATOMIC_GT(a, 0) -#define CFS_ALLOC_PTR(ptr) LIBCFS_ALLOC(ptr, sizeof (*(ptr))); -#define CFS_FREE_PTR(ptr) LIBCFS_FREE(ptr, sizeof (*(ptr))); +#define CFS_ALLOC_PTR(ptr) LIBCFS_ALLOC(ptr, sizeof(*(ptr))); +#define CFS_FREE_PTR(ptr) LIBCFS_FREE(ptr, sizeof(*(ptr))); /* * percpu partition lock @@ -363,7 +359,6 @@ enum { CFS_PERCPT_LOCK_EX = -1, /* negative */ }; - struct cfs_percpt_lock { /* cpu-partition-table for this lock */ struct cfs_cpt_table *pcl_cptab; @@ -380,7 +375,6 @@ cfs_percpt_lock_num(struct cfs_percpt_lock *pcl) return cfs_cpt_number(pcl->pcl_cptab); } - /* * create a cpu-partition lock based on CPU partition table \a cptab, * each private lock has extra \a psize bytes padding data @@ -400,7 +394,6 @@ void cfs_percpt_atomic_free(atomic_t **refs); /* return sum of all percpu refs */ int cfs_percpt_atomic_summary(atomic_t **refs); - /** Compile-time assertion. * Check an invariant described by a constant expression at compile time by @@ -415,7 +408,7 @@ int cfs_percpt_atomic_summary(atomic_t **refs); * value after conversion... * */ -#define CLASSERT(cond) do {switch(42) {case (cond): case 0: break;}} while (0) +#define CLASSERT(cond) do {switch (42) {case (cond): case 0: break; } } while (0) /* support decl needed both by kernel and liblustre */ int libcfs_isknown_lnd(int type); @@ -440,11 +433,11 @@ int cfs_match_nid(lnet_nid_t nid, struct list_head *list); /** extract the network part of an lnet_nid_t */ #define LNET_NIDNET(nid) ((__u32)(((nid) >> 32)) & 0xffffffff) /** make an lnet_nid_t from a network part and an address part */ -#define LNET_MKNID(net,addr) ((((__u64)(net))<<32)|((__u64)(addr))) +#define LNET_MKNID(net, addr) ((((__u64)(net))<<32)|((__u64)(addr))) /* how net encodes type:number */ #define LNET_NETNUM(net) ((net) & 0xffff) #define LNET_NETTYP(net) (((net) >> 16) & 0xffff) -#define LNET_MKNET(typ,num) ((((__u32)(typ))<<16)|((__u32)(num))) +#define LNET_MKNET(typ, num) ((((__u32)(typ))<<16)|((__u32)(num))) /** @} lnet_addr */ /* max value for numeric network address */ @@ -469,24 +462,25 @@ struct libcfs_device_userstate /* what used to be in portals_lib.h */ #ifndef MIN -# define MIN(a,b) (((a)<(b)) ? (a): (b)) +# define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #ifndef MAX -# define MAX(a,b) (((a)>(b)) ? (a): (b)) +# define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif -#define MKSTR(ptr) ((ptr))? (ptr) : "" +#define MKSTR(ptr) ((ptr)) ? (ptr) : "" -static inline int cfs_size_round4 (int val) +static inline int cfs_size_round4(int val) { return (val + 3) & (~0x3); } #ifndef HAVE_CFS_SIZE_ROUND -static inline int cfs_size_round (int val) +static inline int cfs_size_round(int val) { return (val + 7) & (~0x7); } + #define HAVE_CFS_SIZE_ROUND #endif @@ -525,21 +519,21 @@ static inline unsigned int cfs_power2_roundup(unsigned int val) return val; } -#define LOGL(var,len,ptr) \ +#define LOGL(var, len, ptr) \ do { \ if (var) \ memcpy((char *)ptr, (const char *)var, len); \ ptr += cfs_size_round(len); \ } while (0) -#define LOGU(var,len,ptr) \ +#define LOGU(var, len, ptr) \ do { \ if (var) \ memcpy((char *)var, (const char *)ptr, len); \ ptr += cfs_size_round(len); \ } while (0) -#define LOGL0(var,len,ptr) \ +#define LOGL0(var, len, ptr) \ do { \ if (!len) \ break; \ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 4bdd77163d5e..bb9e59e41a8c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -63,7 +63,6 @@ static inline int cfs_time_aftereq(cfs_time_t t1, cfs_time_t t2) return cfs_time_beforeq(t2, t1); } - static inline cfs_time_t cfs_time_shift(int seconds) { return cfs_time_add(cfs_time_current(), cfs_time_seconds(seconds)); @@ -72,7 +71,7 @@ static inline cfs_time_t cfs_time_shift(int seconds) static inline long cfs_timeval_sub(struct timeval *large, struct timeval *small, struct timeval *result) { - long r = (long) ( + long r = (long)( (large->tv_sec - small->tv_sec) * ONE_MILLION + (large->tv_usec - small->tv_usec)); if (result != NULL) { @@ -87,7 +86,7 @@ static inline void cfs_slow_warning(cfs_time_t now, int seconds, char *msg) if (cfs_time_after(cfs_time_current(), cfs_time_add(now, cfs_time_seconds(15)))) CERROR("slow %s "CFS_TIME_T" sec\n", msg, - cfs_duration_sec(cfs_time_sub(cfs_time_current(),now))); + cfs_duration_sec(cfs_time_sub(cfs_time_current(), now))); } #define CFS_RATELIMIT(seconds) \ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index f7085c402c1e..7b8107b133de 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -37,7 +37,6 @@ #ifndef __LIBCFS_LINUX_KP30_H__ #define __LIBCFS_LINUX_KP30_H__ - #include #include #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index d2f7c19cfa36..bc7c8a7f0f0f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -42,7 +42,6 @@ #endif - #include #include "linux-cpu.h" #include "linux-time.h" @@ -63,7 +62,7 @@ #define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) #if !defined(__x86_64__) -# ifdef __ia64__ +# ifdef __ia64__ # define CDEBUG_STACK() (THREAD_SIZE - \ ((unsigned long)__builtin_dwarf_cfa() & \ (THREAD_SIZE - 1))) @@ -89,7 +88,7 @@ do { \ } while (0) #define CFS_CHECK_STACK(msgdata, mask, cdls) __CHECK_STACK(msgdata, mask, cdls) #else /* __x86_64__ */ -#define CFS_CHECK_STACK(msgdata, mask, cdls) do {} while(0) +#define CFS_CHECK_STACK(msgdata, mask, cdls) do {} while (0) #define CDEBUG_STACK() (0L) #endif /* __x86_64__ */ @@ -103,7 +102,7 @@ do { \ * * Implementation is in linux-curproc.c */ -#define CFS_CURPROC_COMM_MAX (sizeof ((struct task_struct *)0)->comm) +#define CFS_CURPROC_COMM_MAX (sizeof((struct task_struct *)0)->comm) #include @@ -116,6 +115,4 @@ typedef long long_ptr_t; #endif - - #endif /* _LINUX_LIBCFS_H */ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h index 8dd354d51606..fbe1c0b47883 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h @@ -42,7 +42,6 @@ #error Do not #include this file directly. #include instead #endif - #include #include #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h index b75e401d9a97..7581a14e884f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h @@ -45,7 +45,6 @@ #error Do not #include this file directly. #include instead #endif - #include /* @@ -81,8 +80,6 @@ */ - - /* * rw_semaphore "implementation" (use Linux kernel's primitives) * @@ -94,10 +91,8 @@ * - up_write(x) */ - #define fini_rwsem(s) do {} while (0) - /* * rwlock_t "implementation" (use Linux kernel's primitives) * @@ -112,7 +107,6 @@ * - RW_LOCK_UNLOCKED */ - #ifndef DEFINE_RWLOCK #define DEFINE_RWLOCK(lock) rwlock_t lock = __RW_LOCK_UNLOCKED(lock) #endif @@ -170,7 +164,6 @@ struct lock_class_key { /* This has to be a macro, so that `subclass' can be undefined in kernels * that do not support lockdep. */ - static inline void lockdep_off(void) { } @@ -200,5 +193,4 @@ static inline void lockdep_on(void) #endif #endif /* CONFIG_DEBUG_LOCK_ALLOC */ - #endif /* __LIBCFS_LINUX_CFS_LOCK_H__ */ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h index ccee5c3e4142..b15653f7383a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h @@ -45,7 +45,6 @@ #error Do not #include this file directly. #include instead #endif - #include #include #include @@ -81,7 +80,7 @@ #define DECL_MMSPACE mm_segment_t __oldfs #define MMSPACE_OPEN \ - do { __oldfs = get_fs(); set_fs(get_ds());} while(0) + do { __oldfs = get_fs(); set_fs(get_ds()); } while (0) #define MMSPACE_CLOSE set_fs(__oldfs) #endif /* __LINUX_CFS_MEM_H__ */ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index 261ab80b712c..b24bc6b18839 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -45,7 +45,6 @@ #error Do not #include this file directly. #include instead #endif - #include #include #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h index 7a8d006903b9..f95e60ef7b54 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h @@ -45,7 +45,6 @@ #error Do not #include this file directly. #include instead #endif - #include typedef struct socket socket_t; diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 201932abcd2b..8d78cb38312d 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -45,7 +45,6 @@ #error Do not #include this file directly. #include instead #endif - /* Portable time API */ /* @@ -88,7 +87,6 @@ #define ONE_BILLION ((u_int64_t)1000000000) #define ONE_MILLION 1000000 - #include #include #include @@ -123,7 +121,6 @@ static inline unsigned long long __cfs_fs_time_flat(cfs_fs_time_t *t) return (unsigned long long)t->tv_sec * ONE_BILLION + t->tv_nsec; } - /* * Generic kernel stuff */ @@ -179,6 +176,7 @@ static inline cfs_duration_t cfs_duration_build(int64_t nano) /* We cannot use do_div(t, ONE_BILLION), do_div can only process * 64 bits n and 32 bits base */ int64_t t = nano * HZ; + do_div(t, 1000); do_div(t, 1000000); return (cfs_duration_t)t; @@ -252,7 +250,6 @@ static inline int cfs_time_beforeq_64(__u64 t1, __u64 t2) return (__s64)t2 - (__s64)t1 >= 0; } - /* * One jiffy */ @@ -261,7 +258,6 @@ static inline int cfs_time_beforeq_64(__u64 t1, __u64 t2) #define CFS_TIME_T "%lu" #define CFS_DURATION_T "%ld" - #endif /* __LIBCFS_LINUX_LINUX_TIME_H__ */ /* * Local variables: diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index fe4c63fb40a4..c6fa7ca4c87b 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -37,14 +37,14 @@ #ifndef __LIBCFS_LINUX_PORTALS_COMPAT_H__ #define __LIBCFS_LINUX_PORTALS_COMPAT_H__ -// XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved +/* XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved */ #if defined(SPINLOCK_DEBUG) && SPINLOCK_DEBUG # define SIGNAL_MASK_ASSERT() \ LASSERT(current->sighand->siglock.magic == SPINLOCK_MAGIC) #else # define SIGNAL_MASK_ASSERT() #endif -// XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved +/* XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved */ #define SIGNAL_MASK_LOCK(task, flags) \ spin_lock_irqsave(&task->sighand->siglock, flags) diff --git a/drivers/staging/lustre/include/linux/libcfs/lucache.h b/drivers/staging/lustre/include/linux/libcfs/lucache.h index b5b3c23bf85e..3350dcc0ca2a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/lucache.h +++ b/drivers/staging/lustre/include/linux/libcfs/lucache.h @@ -104,17 +104,17 @@ struct upcall_cache; struct upcall_cache_ops { void (*init_entry)(struct upcall_cache_entry *, void *args); void (*free_entry)(struct upcall_cache *, - struct upcall_cache_entry *); + struct upcall_cache_entry *); int (*upcall_compare)(struct upcall_cache *, - struct upcall_cache_entry *, + struct upcall_cache_entry *, __u64 key, void *args); int (*downcall_compare)(struct upcall_cache *, - struct upcall_cache_entry *, + struct upcall_cache_entry *, __u64 key, void *args); int (*do_upcall)(struct upcall_cache *, - struct upcall_cache_entry *); + struct upcall_cache_entry *); int (*parse_downcall)(struct upcall_cache *, - struct upcall_cache_entry *, void *); + struct upcall_cache_entry *, void *); }; struct upcall_cache { diff --git a/drivers/staging/lustre/include/linux/libcfs/params_tree.h b/drivers/staging/lustre/include/linux/libcfs/params_tree.h index 170d6658299c..7c8d7c7d391c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/params_tree.h +++ b/drivers/staging/lustre/include/linux/libcfs/params_tree.h @@ -108,21 +108,21 @@ typedef struct cfs_seq_file { } cfs_seq_file_t; typedef struct cfs_seq_operations { - void *(*start) (cfs_seq_file_t *m, loff_t *pos); - void (*stop) (cfs_seq_file_t *m, void *v); - void *(*next) (cfs_seq_file_t *m, void *v, loff_t *pos); - int (*show) (cfs_seq_file_t *m, void *v); + void *(*start)(cfs_seq_file_t *m, loff_t *pos); + void (*stop)(cfs_seq_file_t *m, void *v); + void *(*next)(cfs_seq_file_t *m, void *v, loff_t *pos); + int (*show)(cfs_seq_file_t *m, void *v); } cfs_seq_ops_t; typedef void *cfs_poll_table_t; typedef struct cfs_param_file_ops { struct module *owner; - int (*open) (cfs_inode_t *, struct file *); + int (*open)(cfs_inode_t *, struct file *); loff_t (*llseek)(struct file *, loff_t, int); - int (*release) (cfs_inode_t *, cfs_param_file_t *); - unsigned int (*poll) (struct file *, cfs_poll_table_t *); - ssize_t (*write) (struct file *, const char *, size_t, loff_t *); + int (*release)(cfs_inode_t *, cfs_param_file_t *); + unsigned int (*poll)(struct file *, cfs_poll_table_t *); + ssize_t (*write)(struct file *, const char *, size_t, loff_t *); ssize_t (*read)(struct file *, char *, size_t, loff_t *); } cfs_param_file_ops_t; typedef cfs_param_file_ops_t *cfs_lproc_filep_t; @@ -140,7 +140,7 @@ static inline cfs_proc_inode_t *FAKE_PROC_I(const cfs_inode_t *inode) #define cfs_seq_read_common NULL #define cfs_seq_lseek_common NULL #define cfs_seq_private(seq) (seq->private) -#define cfs_seq_read(file, buf, count, ppos, rc) do {} while(0) +#define cfs_seq_read(file, buf, count, ppos, rc) do {} while (0) #define cfs_seq_open(file, ops, rc) \ do { \ cfs_seq_file_t *p = cfs_file_private(file); \ @@ -155,7 +155,7 @@ do { \ memset(p, 0, sizeof(*p)); \ p->op = ops; \ rc = 0; \ -} while(0) +} while (0) #endif /* LPROCFS */ -- cgit From ee9c1c1637ba170d489accdb13de8cc239db2ac1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:50:23 -0700 Subject: staging: lustre: remove empty bitmap.h The file was empty, remove it as it wasn't doing anything. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/bitmap.h | 1 - drivers/staging/lustre/lustre/include/obd.h | 1 - 2 files changed, 2 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/bitmap.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/bitmap.h b/drivers/staging/lustre/include/linux/libcfs/bitmap.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/bitmap.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index 6f036ce7e2da..ef4ad1fcc112 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -50,7 +50,6 @@ #include "lustre/lustre_idl.h" #include "lustre_lib.h" -#include "../../include/linux/libcfs/bitmap.h" #include "lu_ref.h" #include "lustre_export.h" #include "lustre_fid.h" -- cgit From 178b69013264c365f4a6421a355f3512d788f3e0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:53:32 -0700 Subject: staging: lustre: remove l_dentry define It's a 'dentry', so use it instead of something else. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/linux/lvfs_linux.h | 3 +-- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 2 +- drivers/staging/lustre/lustre/obdclass/llog_lvfs.c | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h index 0dea1789321d..cf6d5807af61 100644 --- a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h +++ b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h @@ -44,12 +44,11 @@ #include "../lvfs.h" #define l_file file -#define l_dentry dentry #define l_filp_open filp_open struct lvfs_run_ctxt; -struct l_file *l_dentry_open(struct lvfs_run_ctxt *, struct l_dentry *, +struct l_file *l_dentry_open(struct lvfs_run_ctxt *, struct dentry *, int flags); struct l_linux_dirent { diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c index a519a5ca69ba..2decf7ddc6c8 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c @@ -233,7 +233,7 @@ put_old: EXPORT_SYMBOL(lustre_rename); /* Note: dput(dchild) will *not* be called if there is an error */ -struct l_file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct l_dentry *de, +struct l_file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct dentry *de, int flags) { struct path path = { diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c index 85d64bec1657..c707cd88eb45 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c @@ -581,7 +581,7 @@ static int llog_lvfs_open(const struct lu_env *env, struct llog_handle *handle, enum llog_open_param open_param) { struct llog_ctxt *ctxt = handle->lgh_ctxt; - struct l_dentry *dchild = NULL; + struct dentry *dchild = NULL; struct obd_device *obd; int rc = 0; @@ -672,7 +672,7 @@ static int llog_lvfs_create(const struct lu_env *env, { struct llog_ctxt *ctxt = handle->lgh_ctxt; struct obd_device *obd; - struct l_dentry *dchild = NULL; + struct dentry *dchild = NULL; struct file *file; struct obdo *oa = NULL; int rc = 0; -- cgit From 1668b82116fa57d0061b4e05e423ed25efa7b784 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:56:16 -0700 Subject: staging: lustre: remove l_file define It's a "file" structure, so use it instead of trying to rename it. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/linux/lvfs_linux.h | 4 +--- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog_lvfs.c | 8 ++++---- 3 files changed, 7 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h index cf6d5807af61..3eab65a55bda 100644 --- a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h +++ b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h @@ -43,12 +43,10 @@ #include "../lvfs.h" -#define l_file file - #define l_filp_open filp_open struct lvfs_run_ctxt; -struct l_file *l_dentry_open(struct lvfs_run_ctxt *, struct dentry *, +struct file *l_dentry_open(struct lvfs_run_ctxt *, struct dentry *, int flags); struct l_linux_dirent { diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c index 2decf7ddc6c8..191a70a9e665 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c @@ -233,8 +233,8 @@ put_old: EXPORT_SYMBOL(lustre_rename); /* Note: dput(dchild) will *not* be called if there is an error */ -struct l_file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct dentry *de, - int flags) +struct file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct dentry *de, + int flags) { struct path path = { .dentry = de, diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c index c707cd88eb45..a48cbe056555 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c @@ -58,8 +58,8 @@ #if defined(LLOG_LVFS) -static int llog_lvfs_pad(struct obd_device *obd, struct l_file *file, - int len, int index) +static int llog_lvfs_pad(struct obd_device *obd, struct file *file, int len, + int index) { struct llog_rec_hdr rec = { 0 }; struct llog_rec_tail tail; @@ -88,7 +88,7 @@ static int llog_lvfs_pad(struct obd_device *obd, struct l_file *file, return rc; } -static int llog_lvfs_write_blob(struct obd_device *obd, struct l_file *file, +static int llog_lvfs_write_blob(struct obd_device *obd, struct file *file, struct llog_rec_hdr *rec, void *buf, loff_t off) { int rc; @@ -140,7 +140,7 @@ static int llog_lvfs_write_blob(struct obd_device *obd, struct l_file *file, return rc; } -static int llog_lvfs_read_blob(struct obd_device *obd, struct l_file *file, +static int llog_lvfs_read_blob(struct obd_device *obd, struct file *file, void *buf, int size, loff_t off) { loff_t offset = off; -- cgit From e4265658ce723a109587561a58f3a1cdbcb84f78 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 22:57:40 -0700 Subject: staging: lustre: remove l_filep_open define Just call filep_open(), no need to rename the thing. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/linux/lvfs_linux.h | 2 -- drivers/staging/lustre/lustre/obdclass/llog_lvfs.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h index 3eab65a55bda..fff22ec1f869 100644 --- a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h +++ b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h @@ -43,8 +43,6 @@ #include "../lvfs.h" -#define l_filp_open filp_open - struct lvfs_run_ctxt; struct file *l_dentry_open(struct lvfs_run_ctxt *, struct dentry *, int flags); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c index a48cbe056555..1ba789f8d526 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c @@ -567,7 +567,7 @@ static struct file *llog_filp_open(char *dir, char *name, int flags, int mode) if (len >= PATH_MAX - 1) { filp = ERR_PTR(-ENAMETOOLONG); } else { - filp = l_filp_open(logname, flags, mode); + filp = filp_open(logname, flags, mode); if (IS_ERR(filp) && PTR_ERR(filp) != -ENOENT) CERROR("logfile creation %s: %ld\n", logname, PTR_ERR(filp)); -- cgit From 30f38472f75b5e9a9d55269bdb14da9c3cc45586 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:05:14 -0700 Subject: staging: lustre: remove unneeded DECLARE_LL_PROC_PPOS_DECL macro It did nothing, so remove it. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h | 2 -- .../staging/lustre/include/linux/libcfs/linux/portals_compat25.h | 1 - drivers/staging/lustre/lnet/lnet/router_proc.c | 6 ------ drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 6 ------ 4 files changed, 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index b24bc6b18839..1069c33433e9 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -71,8 +71,6 @@ typedef struct ctl_table_header ctl_table_header_t; static int \ LL_PROC_PROTO(name) \ { \ - DECLARE_LL_PROC_PPOS_DECL; \ - \ return proc_call_handler(table->data, write, \ ppos, buffer, lenp, \ __##name); \ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index c6fa7ca4c87b..eae12a6baed0 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -88,7 +88,6 @@ #define LL_PROC_PROTO(name) \ name(ctl_table_t *table, int write, \ void __user *buffer, size_t *lenp, loff_t *ppos) -#define DECLARE_LL_PROC_PPOS_DECL /* helper for sysctl handlers */ int proc_call_handler(void *data, int write, diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 414a9919b9b1..640cdc45975e 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -151,8 +151,6 @@ int LL_PROC_PROTO(proc_lnet_routes) int ver; int off; - DECLARE_LL_PROC_PPOS_DECL; - CLASSERT(sizeof(loff_t) >= 4); off = LNET_PROC_HOFF_GET(*ppos); @@ -278,8 +276,6 @@ int LL_PROC_PROTO(proc_lnet_routers) int ver; int off; - DECLARE_LL_PROC_PPOS_DECL; - off = LNET_PROC_HOFF_GET(*ppos); ver = LNET_PROC_VER_GET(*ppos); @@ -638,8 +634,6 @@ int LL_PROC_PROTO(proc_lnet_nis) char *s; int len; - DECLARE_LL_PROC_PPOS_DECL; - LASSERT(!write); if (*lenp == 0) diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 7bad930edbcf..70efd6b1b6e9 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -93,7 +93,6 @@ int LL_PROC_PROTO(proc_memory_alloc) { char buf[22]; int len; - DECLARE_LL_PROC_PPOS_DECL; if (!*lenp || (*ppos && !write)) { *lenp = 0; @@ -117,7 +116,6 @@ int LL_PROC_PROTO(proc_pages_alloc) { char buf[22]; int len; - DECLARE_LL_PROC_PPOS_DECL; if (!*lenp || (*ppos && !write)) { *lenp = 0; @@ -141,7 +139,6 @@ int LL_PROC_PROTO(proc_mem_max) { char buf[22]; int len; - DECLARE_LL_PROC_PPOS_DECL; if (!*lenp || (*ppos && !write)) { *lenp = 0; @@ -165,7 +162,6 @@ int LL_PROC_PROTO(proc_pages_max) { char buf[22]; int len; - DECLARE_LL_PROC_PPOS_DECL; if (!*lenp || (*ppos && !write)) { *lenp = 0; @@ -188,7 +184,6 @@ int LL_PROC_PROTO(proc_pages_max) int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) { int rc = 0; - DECLARE_LL_PROC_PPOS_DECL; if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) { *lenp = 0; @@ -230,7 +225,6 @@ int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) int LL_PROC_PROTO(proc_alloc_fail_rate) { int rc = 0; - DECLARE_LL_PROC_PPOS_DECL; if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) { *lenp = 0; -- cgit From 13636be4b6a6b036aaf3d9f2c8094e62d56d5cff Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:12:04 -0700 Subject: staging: lustre: make include/linux/libcfs/linux/linux-crypto.h private There are only 2 functions that are actually called from it, so move it to the local place where it is needed, no need for it to be "global" for the rest of lustre to see it. Also remove the unneeded EXPORT_SYMBOL() markings for these functions, as no one else calls them. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../include/linux/libcfs/linux/linux-crypto.h | 49 ---------------------- .../lustre/libcfs/linux/linux-crypto-adler.c | 5 +-- .../lustre/lustre/libcfs/linux/linux-crypto.c | 2 +- .../lustre/lustre/libcfs/linux/linux-crypto.h | 29 +++++++++++++ 4 files changed, 31 insertions(+), 54 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-crypto.h create mode 100644 drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-crypto.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-crypto.h deleted file mode 100644 index 97c771cf691f..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-crypto.h +++ /dev/null @@ -1,49 +0,0 @@ - /* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see http://www.gnu.org/licenses - * - * Please visit http://www.xyratex.com/contact if you need additional - * information or have any questions. - * - * GPL HEADER END - */ - -/* - * Copyright 2012 Xyratex Technology Limited - */ - -/** - * Linux crypto hash specific functions. - */ - -/** - * Functions for start/stop shash CRC32 algorithm. - */ -int cfs_crypto_crc32_register(void); -void cfs_crypto_crc32_unregister(void); - -/** - * Functions for start/stop shash adler32 algorithm. - */ -int cfs_crypto_adler32_register(void); -void cfs_crypto_adler32_unregister(void); - -/** - * Functions for start/stop shash crc32 pclmulqdq - */ -int cfs_crypto_crc32_pclmul_register(void); -void cfs_crypto_crc32_pclmul_unregister(void); diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto-adler.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto-adler.c index 20b2d61d9ff2..5e185fa5942a 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto-adler.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto-adler.c @@ -32,12 +32,11 @@ #include #include #include - +#include "linux-crypto.h" #define CHKSUM_BLOCK_SIZE 1 #define CHKSUM_DIGEST_SIZE 4 - static u32 __adler32(u32 cksum, unsigned char const *p, size_t len) { return zlib_adler32(cksum, p, len); @@ -135,10 +134,8 @@ int cfs_crypto_adler32_register(void) { return crypto_register_shash(&alg); } -EXPORT_SYMBOL(cfs_crypto_adler32_register); void cfs_crypto_adler32_unregister(void) { crypto_unregister_shash(&alg); } -EXPORT_SYMBOL(cfs_crypto_adler32_unregister); diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c index 048a4f28f900..aa3fffed1519 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c @@ -30,7 +30,7 @@ #include #include #include "../../../include/linux/libcfs/libcfs.h" -#include "../../../include/linux/libcfs/linux/linux-crypto.h" +#include "linux-crypto.h" /** * Array of hash algorithm speed in MByte per second */ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.h b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.h new file mode 100644 index 000000000000..18e8cd4d8758 --- /dev/null +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.h @@ -0,0 +1,29 @@ + /* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * 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 version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see http://www.gnu.org/licenses + * + * Please visit http://www.xyratex.com/contact if you need additional + * information or have any questions. + * + * GPL HEADER END + */ + +/** + * Functions for start/stop shash adler32 algorithm. + */ +int cfs_crypto_adler32_register(void); +void cfs_crypto_adler32_unregister(void); -- cgit From d2bc118d0ba566c23700dc3b5e616ffc2bedad72 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:15:15 -0700 Subject: staging: lustre: remove include/libcfs/linux/linux-bitops.h It was just includeing bitops.h so do that instead in the one place that was calling it. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/libcfs.h | 2 +- .../include/linux/libcfs/linux/linux-bitops.h | 38 ---------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-bitops.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index bc7c8a7f0f0f..d647389e3ed9 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -42,6 +42,7 @@ #endif +#include #include #include "linux-cpu.h" #include "linux-time.h" @@ -49,7 +50,6 @@ #include "linux-prim.h" #include "linux-lock.h" #include "linux-tcpip.h" -#include "linux-bitops.h" #include "linux-types.h" #include "kp30.h" diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-bitops.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-bitops.h deleted file mode 100644 index 43936e349dd4..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-bitops.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/include/libcfs/linux/linux-bitops.h - */ -#include -- cgit From ebf7b7781810783f5f37d4b4d7adbb3813f1241b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:20:31 -0700 Subject: staging: lustre: linux-cpu.h Remove large commented out section for compatibility stuff that will never be needed again. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/linux-cpu.h | 83 ---------------------- 1 file changed, 83 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h index fbe1c0b47883..520209f17173 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-cpu.h @@ -78,88 +78,5 @@ struct cfs_cpt_table { nodemask_t *ctb_nodemask; }; -/** - * comment out definitions for compatible layer - * - * typedef cpumask_t cfs_cpumask_t; - * - * #define cfs_cpu_current() smp_processor_id() - * #define cfs_cpu_online(i) cpu_online(i) - * #define cfs_cpu_online_num() num_online_cpus() - * #define cfs_cpu_online_for_each(i) for_each_online_cpu(i) - * #define cfs_cpu_possible_num() num_possible_cpus() - * #define cfs_cpu_possible_for_each(i) for_each_possible_cpu(i) - * - * #ifdef CONFIG_CPUMASK_SIZE - * #define cfs_cpu_mask_size() cpumask_size() - * #else - * #define cfs_cpu_mask_size() sizeof(cfs_cpumask_t) - * #endif - * - * #define cfs_cpu_mask_set(i, mask) cpu_set(i, mask) - * #define cfs_cpu_mask_unset(i, mask) cpu_clear(i, mask) - * #define cfs_cpu_mask_isset(i, mask) cpu_isset(i, mask) - * #define cfs_cpu_mask_clear(mask) cpus_clear(mask) - * #define cfs_cpu_mask_empty(mask) cpus_empty(mask) - * #define cfs_cpu_mask_weight(mask) cpus_weight(mask) - * #define cfs_cpu_mask_first(mask) first_cpu(mask) - * #define cfs_cpu_mask_any_online(mask) (any_online_cpu(mask) != NR_CPUS) - * #define cfs_cpu_mask_for_each(i, mask) for_each_cpu_mask(i, mask) - * #define cfs_cpu_mask_bind(t, mask) set_cpus_allowed(t, mask) - * - * #ifdef HAVE_CPUMASK_COPY - * #define cfs_cpu_mask_copy(dst, src) cpumask_copy(dst, src) - * #else - * #define cfs_cpu_mask_copy(dst, src) memcpy(dst, src, sizeof(*src)) - * #endif - * - * static inline void - * cfs_cpu_mask_of_online(cfs_cpumask_t *mask) - * { - * cfs_cpu_mask_copy(mask, &cpu_online_map); - * } - * - * #ifdef CONFIG_NUMA - * - * #define CFS_NODE_NR MAX_NUMNODES - * - * typedef nodemask_t cfs_node_mask_t; - * - * #define cfs_node_of_cpu(cpu) cpu_to_node(cpu) - * #define cfs_node_online(i) node_online(i) - * #define cfs_node_online_num() num_online_nodes() - * #define cfs_node_online_for_each(i) for_each_online_node(i) - * #define cfs_node_possible_num() num_possible_nodes() - * #define cfs_node_possible_for_each(i) for_each_node(i) - * - * static inline void cfs_node_to_cpumask(int node, cfs_cpumask_t *mask) - * { - * #if defined(HAVE_NODE_TO_CPUMASK) - * *mask = node_to_cpumask(node); - * #elif defined(HAVE_CPUMASK_OF_NODE) - * cfs_cpu_mask_copy(mask, cpumask_of_node(node)); - * #else - * # error "Needs node_to_cpumask or cpumask_of_node" - * #endif - * } - * - * #define cfs_node_mask_set(i, mask) node_set(i, mask) - * #define cfs_node_mask_unset(i, mask) node_clear(i, mask) - * #define cfs_node_mask_isset(i, mask) node_isset(i, mask) - * #define cfs_node_mask_clear(mask) nodes_reset(mask) - * #define cfs_node_mask_empty(mask) nodes_empty(mask) - * #define cfs_node_mask_weight(mask) nodes_weight(mask) - * #define cfs_node_mask_for_each(i, mask) for_each_node_mask(i, mask) - * #define cfs_node_mask_copy(dst, src) memcpy(dst, src, sizeof(*src)) - * - * static inline void - * cfs_node_mask_of_online(cfs_node_mask_t *mask) - * { - * cfs_node_mask_copy(mask, &node_online_map); - * } - * - * #endif - */ - #endif /* CONFIG_SMP */ #endif /* __LIBCFS_LINUX_CPU_H__ */ -- cgit From 6de9710b24417b857c74fefc44f86e8f236fdb3a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:28:12 -0700 Subject: staging: lustre: delete linux-lock.h It was a few empty defines, so just remove the thing. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/libcfs.h | 2 +- .../lustre/include/linux/libcfs/linux/linux-lock.h | 196 --------------------- drivers/staging/lustre/lnet/lnet/acceptor.c | 8 +- .../lustre/lustre/libcfs/linux/linux-tracefile.c | 2 - drivers/staging/lustre/lustre/libcfs/module.c | 3 - 5 files changed, 2 insertions(+), 209 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index d647389e3ed9..fce30efad859 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -43,12 +43,12 @@ #include +#include #include #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" #include "linux-prim.h" -#include "linux-lock.h" #include "linux-tcpip.h" #include "linux-types.h" #include "kp30.h" diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h deleted file mode 100644 index 7581a14e884f..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-lock.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/include/libcfs/linux/linux-lock.h - * - * Basic library routines. - */ - -#ifndef __LIBCFS_LINUX_CFS_LOCK_H__ -#define __LIBCFS_LINUX_CFS_LOCK_H__ - -#ifndef __LIBCFS_LIBCFS_H__ -#error Do not #include this file directly. #include instead -#endif - -#include - -/* - * IMPORTANT !!!!!!!! - * - * All locks' declaration are not guaranteed to be initialized, - * although some of them are initialized in Linux. All locks - * declared by CFS_DECL_* should be initialized explicitly. - */ - -/* - * spin_lock "implementation" (use Linux kernel's primitives) - * - * - spin_lock_init(x) - * - spin_lock(x) - * - spin_lock_bh(x) - * - spin_lock_bh_init(x) - * - spin_unlock(x) - * - spin_unlock_bh(x) - * - spin_trylock(x) - * - assert_spin_locked(x) - * - * - spin_lock_irq(x) - * - spin_lock_irqsave(x, f) - * - spin_unlock_irqrestore(x, f) - * - read_lock_irqsave(lock, f) - * - write_lock_irqsave(lock, f) - * - write_unlock_irqrestore(lock, f) - */ - -/* - * spinlock "implementation" - */ - - -/* - * rw_semaphore "implementation" (use Linux kernel's primitives) - * - * - sema_init(x) - * - init_rwsem(x) - * - down_read(x) - * - up_read(x) - * - down_write(x) - * - up_write(x) - */ - -#define fini_rwsem(s) do {} while (0) - -/* - * rwlock_t "implementation" (use Linux kernel's primitives) - * - * - rwlock_init(x) - * - read_lock(x) - * - read_unlock(x) - * - write_lock(x) - * - write_unlock(x) - * - write_lock_bh(x) - * - write_unlock_bh(x) - * - * - RW_LOCK_UNLOCKED - */ - -#ifndef DEFINE_RWLOCK -#define DEFINE_RWLOCK(lock) rwlock_t lock = __RW_LOCK_UNLOCKED(lock) -#endif - -/* - * completion "implementation" (use Linux kernel's primitives) - * - * - DECLARE_COMPLETION(work) - * - INIT_COMPLETION(c) - * - COMPLETION_INITIALIZER(work) - * - init_completion(c) - * - complete(c) - * - wait_for_completion(c) - * - wait_for_completion_interruptible(c) - * - fini_completion(c) - */ -#define fini_completion(c) do { } while (0) - -/* - * semaphore "implementation" (use Linux kernel's primitives) - * - DEFINE_SEMAPHORE(name) - * - sema_init(sem, val) - * - up(sem) - * - down(sem) - * - down_interruptible(sem) - * - down_trylock(sem) - */ - -/* - * mutex "implementation" (use Linux kernel's primitives) - * - * - DEFINE_MUTEX(name) - * - mutex_init(x) - * - mutex_lock(x) - * - mutex_unlock(x) - * - mutex_trylock(x) - * - mutex_is_locked(x) - * - mutex_destroy(x) - */ - -#ifndef lockdep_set_class - -/************************************************************************** - * - * Lockdep "implementation". Also see liblustre.h - * - **************************************************************************/ - -struct lock_class_key { - ; -}; - -#define lockdep_set_class(lock, key) \ - do { (void)sizeof(lock); (void)sizeof(key); } while (0) -/* This has to be a macro, so that `subclass' can be undefined in kernels - * that do not support lockdep. */ - -static inline void lockdep_off(void) -{ -} - -static inline void lockdep_on(void) -{ -} -#else - -#endif /* lockdep_set_class */ - -#ifndef CONFIG_DEBUG_LOCK_ALLOC -#ifndef mutex_lock_nested -#define mutex_lock_nested(mutex, subclass) mutex_lock(mutex) -#endif - -#ifndef spin_lock_nested -#define spin_lock_nested(lock, subclass) spin_lock(lock) -#endif - -#ifndef down_read_nested -#define down_read_nested(lock, subclass) down_read(lock) -#endif - -#ifndef down_write_nested -#define down_write_nested(lock, subclass) down_write(lock) -#endif -#endif /* CONFIG_DEBUG_LOCK_ALLOC */ - -#endif /* __LIBCFS_LINUX_CFS_LOCK_H__ */ diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 66e6b2b18c22..640daa173b02 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -457,10 +457,8 @@ lnet_acceptor_start(void) init_completion(&lnet_acceptor_state.pta_signal); rc = accept2secure(accept_type, &secure); - if (rc <= 0) { - fini_completion(&lnet_acceptor_state.pta_signal); + if (rc <= 0) return rc; - } if (lnet_count_acceptor_nis() == 0) /* not required */ return 0; @@ -470,7 +468,6 @@ lnet_acceptor_start(void) "acceptor_%03ld", secure)); if (IS_ERR_VALUE(rc2)) { CERROR("Can't start acceptor thread: %ld\n", rc2); - fini_completion(&lnet_acceptor_state.pta_signal); return -ESRCH; } @@ -485,7 +482,6 @@ lnet_acceptor_start(void) } LASSERT(lnet_acceptor_state.pta_sock == NULL); - fini_completion(&lnet_acceptor_state.pta_signal); return -ENETDOWN; } @@ -501,6 +497,4 @@ lnet_acceptor_stop(void) /* block until acceptor signals exit */ wait_for_completion(&lnet_acceptor_state.pta_signal); - - fini_completion(&lnet_acceptor_state.pta_signal); } diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c index bc38b99d8ca2..976c61ed49f4 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c @@ -112,8 +112,6 @@ void cfs_tracefile_fini_arch(void) kfree(cfs_trace_data[i]); cfs_trace_data[i] = NULL; } - - fini_rwsem(&cfs_tracefile_sem); } void cfs_tracefile_read_lock(void) diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c index d138368e632d..3396858098b0 100644 --- a/drivers/staging/lustre/lustre/libcfs/module.c +++ b/drivers/staging/lustre/lustre/libcfs/module.c @@ -439,9 +439,6 @@ static void exit_libcfs_module(void) printk(KERN_ERR "LustreError: libcfs_debug_cleanup: %d\n", rc); - fini_rwsem(&ioctl_list_sem); - fini_rwsem(&cfs_tracefile_sem); - libcfs_arch_cleanup(); } -- cgit From 86e5b63d678b8eb190f82990fa7956459368580c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:29:34 -0700 Subject: staging: lustre: fix build breakage on microblaze I missed an include path that microblaze found in it's build paths. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Reported-by: kbuild test robot Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h index b15653f7383a..526c77c4dd84 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h @@ -54,7 +54,7 @@ #ifndef HAVE_LIBCFS_CPT /* Need this for cfs_cpt_table */ -#include +#include "../libcfs_cpu.h" #endif #define CFS_PAGE_MASK (~((__u64)PAGE_CACHE_SIZE-1)) -- cgit From 9fc48d006f234a19bf55ccd82ffa7cc2aa519e47 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:32:19 -0700 Subject: staging: lustre: remove linux-types.h It's an empty file, so remove it. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/libcfs.h | 2 +- .../include/linux/libcfs/linux/linux-types.h | 36 ---------------------- 2 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-types.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index fce30efad859..c4343fa890e4 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -44,13 +44,13 @@ #include #include +#include #include #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" #include "linux-prim.h" #include "linux-tcpip.h" -#include "linux-types.h" #include "kp30.h" #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-types.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-types.h deleted file mode 100644 index 142394925567..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-types.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/include/libcfs/user-bitops.h - */ -#include -- cgit From 691bc0eb299e4c106e55a2d814ae719658f55816 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:38:41 -0700 Subject: staging: lustre: remove ctl_table typedefs No need for these, just use the "real" struct the kernel provides. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/include/linux/libcfs/linux/linux-prim.h | 3 --- .../lustre/include/linux/libcfs/linux/portals_compat25.h | 2 +- drivers/staging/lustre/lnet/lnet/router_proc.c | 6 +++--- drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c | 12 ++++++------ drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c | 6 +++--- 5 files changed, 13 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index 1069c33433e9..8125980089e8 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -64,9 +64,6 @@ /* * Sysctl register */ -typedef struct ctl_table ctl_table_t; -typedef struct ctl_table_header ctl_table_header_t; - #define DECLARE_PROC_HANDLER(name) \ static int \ LL_PROC_PROTO(name) \ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index eae12a6baed0..192ad083931a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -86,7 +86,7 @@ #define ll_proc_dostring(table, write, filp, buffer, lenp, ppos) \ proc_dostring(table, write, buffer, lenp, ppos); #define LL_PROC_PROTO(name) \ - name(ctl_table_t *table, int write, \ + name(struct ctl_table *table, int write, \ void __user *buffer, size_t *lenp, loff_t *ppos) /* helper for sysctl handlers */ diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 640cdc45975e..394643436af3 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -30,7 +30,7 @@ /* This is really lnet_proc.c. You might need to update sanity test 215 * if any file format is changed. */ -static ctl_table_header_t *lnet_table_header; +static struct ctl_table_header *lnet_table_header; #define CTL_LNET (0x100) enum { @@ -845,7 +845,7 @@ out: } DECLARE_PROC_HANDLER(proc_lnet_portal_rotor); -static ctl_table_t lnet_table[] = { +static struct ctl_table lnet_table[] = { /* * NB No .strategy entries have been provided since sysctl(8) prefers * to go via /proc for portability. @@ -889,7 +889,7 @@ static ctl_table_t lnet_table[] = { } }; -static ctl_table_t top_table[] = { +static struct ctl_table top_table[] = { { .procname = "lnet", .mode = 0555, diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index 33fd7ca69e34..c4289b6c8727 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -65,7 +65,7 @@ #include #include "../tracefile.h" -static ctl_table_header_t *lnet_table_header = NULL; +static struct ctl_table_header *lnet_table_header = NULL; extern char lnet_upcall[1024]; /** * The path of debug log dump upcall script. @@ -217,7 +217,7 @@ DECLARE_PROC_HANDLER(proc_debug_mb) int LL_PROC_PROTO(proc_console_max_delay_cs) { int rc, max_delay_cs; - ctl_table_t dummy = *table; + struct ctl_table dummy = *table; cfs_duration_t d; dummy.data = &max_delay_cs; @@ -248,7 +248,7 @@ int LL_PROC_PROTO(proc_console_max_delay_cs) int LL_PROC_PROTO(proc_console_min_delay_cs) { int rc, min_delay_cs; - ctl_table_t dummy = *table; + struct ctl_table dummy = *table; cfs_duration_t d; dummy.data = &min_delay_cs; @@ -279,7 +279,7 @@ int LL_PROC_PROTO(proc_console_min_delay_cs) int LL_PROC_PROTO(proc_console_backoff) { int rc, backoff; - ctl_table_t dummy = *table; + struct ctl_table dummy = *table; dummy.data = &backoff; dummy.proc_handler = &proc_dointvec; @@ -363,7 +363,7 @@ static int __proc_cpt_table(void *data, int write, } DECLARE_PROC_HANDLER(proc_cpt_table) -static ctl_table_t lnet_table[] = { +static struct ctl_table lnet_table[] = { /* * NB No .strategy entries have been provided since sysctl(8) prefers * to go via /proc for portability. @@ -516,7 +516,7 @@ static ctl_table_t lnet_table[] = { } }; -static ctl_table_t top_table[] = { +static struct ctl_table top_table[] = { { .procname = "lnet", .mode = 0555, diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 70efd6b1b6e9..23f39de9f7ef 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -52,7 +52,7 @@ #include "../../include/lprocfs_status.h" #ifdef CONFIG_SYSCTL -ctl_table_header_t *obd_table_header = NULL; +struct ctl_table_header *obd_table_header = NULL; #endif @@ -274,7 +274,7 @@ int LL_PROC_PROTO(proc_at_history) } #ifdef CONFIG_SYSCTL -static ctl_table_t obd_table[] = { +static struct ctl_table obd_table[] = { { .procname = "timeout", .data = &obd_timeout, @@ -390,7 +390,7 @@ static ctl_table_t obd_table[] = { {} }; -static ctl_table_t parent_table[] = { +static struct ctl_table parent_table[] = { { .procname = "lustre", .data = NULL, -- cgit From e327dc882d1136882889ae5a302a06e4a591ed9c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:42:52 -0700 Subject: staging: lustre: remove socket_t typedef Use 'struct socket' like the rest of the kernel does. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman -typedef struct socket socket_t; - #define SOCK_SNDBUF(so) ((so)->sk->sk_sndbuf) #define SOCK_TEST_NOSPACE(so) test_bit(SOCK_NOSPACE, &(so)->flags) diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 5c5c2f989c80..e5c72eb49467 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -829,7 +829,7 @@ void lnet_register_lnd(lnd_t *lnd); void lnet_unregister_lnd(lnd_t *lnd); int lnet_set_ip_niaddr(lnet_ni_t *ni); -int lnet_connect(socket_t **sockp, lnet_nid_t peer_nid, +int lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, __u32 local_ip, __u32 peer_ip, int peer_port); void lnet_connect_console_error(int rc, lnet_nid_t peer_nid, __u32 peer_ip, int port); diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index d0b0c261ba03..936b829b947a 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -365,7 +365,7 @@ typedef struct lnet_lnd { void (*lnd_query)(struct lnet_ni *ni, lnet_nid_t peer, cfs_time_t *when); /* accept a new connection */ - int (*lnd_accept)(struct lnet_ni *ni, socket_t *sock); + int (*lnd_accept)(struct lnet_ni *ni, struct socket *sock); } lnd_t; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 425c0fb17bc6..237394ca4ed9 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -962,7 +962,7 @@ ksocknal_create_routes(ksock_peer_t *peer, int port, } int -ksocknal_accept (lnet_ni_t *ni, socket_t *sock) +ksocknal_accept (lnet_ni_t *ni, struct socket *sock) { ksock_connreq_t *cr; int rc; @@ -1008,7 +1008,7 @@ ksocknal_connecting (ksock_peer_t *peer, __u32 ipaddr) int ksocknal_create_conn (lnet_ni_t *ni, ksock_route_t *route, - socket_t *sock, int type) + struct socket *sock, int type) { rwlock_t *global_lock = &ksocknal_data.ksnd_global_lock; LIST_HEAD (zombies); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index 256cfc00015b..0446d5081e71 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -262,7 +262,7 @@ typedef struct ksock_conn struct ksock_peer *ksnc_peer; /* owning peer */ struct ksock_route *ksnc_route; /* owning route */ struct list_head ksnc_list; /* stash on peer's conn list */ - socket_t *ksnc_sock; /* actual socket */ + struct socket *ksnc_sock; /* actual socket */ void *ksnc_saved_data_ready; /* socket's original data_ready() callback */ void *ksnc_saved_write_space; /* socket's original write_space() callback */ atomic_t ksnc_conn_refcount; /* conn refcount */ @@ -362,7 +362,7 @@ typedef struct ksock_connreq { struct list_head ksncr_list; /* stash on ksnd_connd_connreqs */ lnet_ni_t *ksncr_ni; /* chosen NI */ - socket_t *ksncr_sock; /* accepted socket */ + struct socket *ksncr_sock; /* accepted socket */ } ksock_connreq_t; extern ksock_nal_data_t ksocknal_data; @@ -527,14 +527,14 @@ int ksocknal_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed, unsigned int niov, struct iovec *iov, lnet_kiov_t *kiov, unsigned int offset, unsigned int mlen, unsigned int rlen); -int ksocknal_accept(lnet_ni_t *ni, socket_t *sock); +int ksocknal_accept(lnet_ni_t *ni, struct socket *sock); extern int ksocknal_add_peer(lnet_ni_t *ni, lnet_process_id_t id, __u32 ip, int port); extern ksock_peer_t *ksocknal_find_peer_locked (lnet_ni_t *ni, lnet_process_id_t id); extern ksock_peer_t *ksocknal_find_peer (lnet_ni_t *ni, lnet_process_id_t id); extern void ksocknal_peer_failed (ksock_peer_t *peer); extern int ksocknal_create_conn (lnet_ni_t *ni, ksock_route_t *route, - socket_t *sock, int type); + struct socket *sock, int type); extern void ksocknal_close_conn_locked (ksock_conn_t *conn, int why); extern void ksocknal_terminate_conn (ksock_conn_t *conn); extern void ksocknal_destroy_conn (ksock_conn_t *conn); @@ -574,12 +574,12 @@ extern void ksocknal_read_callback(ksock_conn_t *conn); extern void ksocknal_write_callback(ksock_conn_t *conn); extern int ksocknal_lib_zc_capable(ksock_conn_t *conn); -extern void ksocknal_lib_save_callback(socket_t *sock, ksock_conn_t *conn); -extern void ksocknal_lib_set_callback(socket_t *sock, ksock_conn_t *conn); -extern void ksocknal_lib_reset_callback(socket_t *sock, ksock_conn_t *conn); +extern void ksocknal_lib_save_callback(struct socket *sock, ksock_conn_t *conn); +extern void ksocknal_lib_set_callback(struct socket *sock, ksock_conn_t *conn); +extern void ksocknal_lib_reset_callback(struct socket *sock, ksock_conn_t *conn); extern void ksocknal_lib_push_conn (ksock_conn_t *conn); extern int ksocknal_lib_get_conn_addrs (ksock_conn_t *conn); -extern int ksocknal_lib_setup_sock (socket_t *so); +extern int ksocknal_lib_setup_sock (struct socket *so); extern int ksocknal_lib_send_iov (ksock_conn_t *conn, ksock_tx_t *tx); extern int ksocknal_lib_send_kiov (ksock_conn_t *conn, ksock_tx_t *tx); extern void ksocknal_lib_eager_ack (ksock_conn_t *conn); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 75bd6583493e..3d0e59dd054e 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -1699,7 +1699,7 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, * EALREADY lost connection race * EPROTO protocol version mismatch */ - socket_t *sock = conn->ksnc_sock; + struct socket *sock = conn->ksnc_sock; int active = (conn->ksnc_proto != NULL); int timeout; int proto_match; @@ -1844,7 +1844,7 @@ ksocknal_connect (ksock_route_t *route) ksock_peer_t *peer = route->ksnr_peer; int type; int wanted; - socket_t *sock; + struct socket *sock; cfs_time_t deadline; int retry_later = 0; int rc = 0; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c index 2d91571cbab2..c2e49a76177a 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c @@ -452,7 +452,7 @@ ksocknal_handle_zcack(ksock_conn_t *conn, __u64 cookie1, __u64 cookie2) static int ksocknal_send_hello_v1 (ksock_conn_t *conn, ksock_hello_msg_t *hello) { - socket_t *sock = conn->ksnc_sock; + struct socket *sock = conn->ksnc_sock; lnet_hdr_t *hdr; lnet_magicversion_t *hmv; int rc; @@ -527,7 +527,7 @@ out: static int ksocknal_send_hello_v2 (ksock_conn_t *conn, ksock_hello_msg_t *hello) { - socket_t *sock = conn->ksnc_sock; + struct socket *sock = conn->ksnc_sock; int rc; hello->kshm_magic = LNET_PROTO_MAGIC; @@ -570,7 +570,7 @@ ksocknal_send_hello_v2 (ksock_conn_t *conn, ksock_hello_msg_t *hello) static int ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello,int timeout) { - socket_t *sock = conn->ksnc_sock; + struct socket *sock = conn->ksnc_sock; lnet_hdr_t *hdr; int rc; int i; @@ -646,7 +646,7 @@ out: static int ksocknal_recv_hello_v2 (ksock_conn_t *conn, ksock_hello_msg_t *hello, int timeout) { - socket_t *sock = conn->ksnc_sock; + struct socket *sock = conn->ksnc_sock; int rc; int i; diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 640daa173b02..001c4b7ed0ce 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -44,7 +44,7 @@ static int accept_timeout = 5; struct { int pta_shutdown; - socket_t *pta_sock; + struct socket *pta_sock; struct completion pta_signal; } lnet_acceptor_state; @@ -139,11 +139,11 @@ lnet_connect_console_error(int rc, lnet_nid_t peer_nid, EXPORT_SYMBOL(lnet_connect_console_error); int -lnet_connect(socket_t **sockp, lnet_nid_t peer_nid, +lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, __u32 local_ip, __u32 peer_ip, int peer_port) { lnet_acceptor_connreq_t cr; - socket_t *sock; + struct socket *sock; int rc; int port; int fatal; @@ -208,7 +208,7 @@ EXPORT_SYMBOL(lnet_connect); /* Below is the code common for both kernel and MT user-space */ int -lnet_accept(socket_t *sock, __u32 magic) +lnet_accept(struct socket *sock, __u32 magic) { lnet_acceptor_connreq_t cr; __u32 peer_ip; @@ -332,7 +332,7 @@ lnet_accept(socket_t *sock, __u32 magic) int lnet_acceptor(void *arg) { - socket_t *newsock; + struct socket *newsock; int rc; __u32 magic; __u32 peer_ip; -- cgit From 490e7dd4f975f6a415b39cd2843eb1f4f663116f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:49:54 -0700 Subject: staging: lustre: fix makefile build breakage Forgot to test with infiniband enabled. Reported-by: kbuild test robot Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h index ce05d558b223..2ca753d42ca8 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h @@ -62,10 +62,10 @@ #define DEBUG_SUBSYSTEM S_LND -#include -#include -#include -#include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/lnet/lnet.h" +#include "../../../include/linux/lnet/lib-lnet.h" +#include "../../../include/linux/lnet/lnet-sysctl.h" #include #include -- cgit From e12517f34bc71dce87465bf8336d91c813dad704 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 11 Jul 2014 23:52:29 -0700 Subject: staging: lustre: linux-tcpip.h: remove unused macros Some macros are never used, so remove them. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h index 31f3deb49a65..441537abec4a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h @@ -47,7 +47,6 @@ #include -#define SOCK_SNDBUF(so) ((so)->sk->sk_sndbuf) #define SOCK_TEST_NOSPACE(so) test_bit(SOCK_NOSPACE, &(so)->flags) static inline int @@ -64,6 +63,4 @@ cfs_sock_wmem_queued(struct socket *sock) #define cfs_sk_sleep(sk) sk_sleep(sk) -#define DEFAULT_NET (&init_net) - #endif -- cgit From fb4a1539948678b581bf12356f13e616397a458e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:01:03 -0700 Subject: staging: lustre: remove linux-tcpip.h There were just a few macros being used, remove them and have the places where they were being used to make the proper kernel api call instead. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/libcfs.h | 2 +- .../include/linux/libcfs/linux/linux-tcpip.h | 66 ---------------------- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 4 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 12 ++-- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 2 +- .../lustre/lustre/libcfs/linux/linux-tcpip.c | 6 +- 6 files changed, 13 insertions(+), 79 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index c4343fa890e4..1c06bf1dc3d0 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -45,12 +45,12 @@ #include #include #include +#include #include #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" #include "linux-prim.h" -#include "linux-tcpip.h" #include "kp30.h" #include diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h deleted file mode 100644 index 441537abec4a..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-tcpip.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/include/libcfs/linux/linux-tcpip.h - * - * Basic library routines. - */ - -#ifndef __LIBCFS_LINUX_CFS_TCP_H__ -#define __LIBCFS_LINUX_CFS_TCP_H__ - -#ifndef __LIBCFS_LIBCFS_H__ -#error Do not #include this file directly. #include instead -#endif - -#include - -#define SOCK_TEST_NOSPACE(so) test_bit(SOCK_NOSPACE, &(so)->flags) - -static inline int -cfs_sock_error(struct socket *sock) -{ - return sock->sk->sk_err; -} - -static inline int -cfs_sock_wmem_queued(struct socket *sock) -{ - return sock->sk->sk_wmem_queued; -} - -#define cfs_sk_sleep(sk) sk_sleep(sk) - -#endif diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 237394ca4ed9..1590957711a7 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -1258,7 +1258,7 @@ ksocknal_create_conn (lnet_ni_t *ni, ksock_route_t *route, conn->ksnc_tx_last_post = cfs_time_current(); /* Set the deadline for the outgoing HELLO to drain */ - conn->ksnc_tx_bufnob = cfs_sock_wmem_queued(sock); + conn->ksnc_tx_bufnob = sock->sk->sk_wmem_queued; conn->ksnc_tx_deadline = cfs_time_shift(*ksocknal_tunables.ksnd_timeout); mb(); /* order with adding to peer's conn list */ @@ -1808,7 +1808,7 @@ ksocknal_query (lnet_ni_t *ni, lnet_nid_t nid, cfs_time_t *when) list_for_each (tmp, &peer->ksnp_conns) { conn = list_entry(tmp, ksock_conn_t, ksnc_list); - bufnob = cfs_sock_wmem_queued(conn->ksnc_sock); + bufnob = conn->ksnc_sock->sk->sk_wmem_queued; if (bufnob < conn->ksnc_tx_bufnob) { /* something got ACKed */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 3d0e59dd054e..0a82645e6852 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -212,7 +212,7 @@ ksocknal_transmit (ksock_conn_t *conn, ksock_tx_t *tx) rc = ksocknal_send_kiov (conn, tx); } - bufnob = cfs_sock_wmem_queued(conn->ksnc_sock); + bufnob = conn->ksnc_sock->sk->sk_wmem_queued; if (rc > 0) /* sent something? */ conn->ksnc_tx_bufnob += rc; /* account it */ @@ -630,7 +630,7 @@ ksocknal_find_conn_locked(ksock_peer_t *peer, ksock_tx_t *tx, int nonblk) list_for_each (tmp, &peer->ksnp_conns) { ksock_conn_t *c = list_entry(tmp, ksock_conn_t, ksnc_list); int nob = atomic_read(&c->ksnc_tx_nob) + - cfs_sock_wmem_queued(c->ksnc_sock); + c->ksnc_sock->sk->sk_wmem_queued; int rc; LASSERT (!c->ksnc_closing); @@ -726,7 +726,7 @@ ksocknal_queue_tx_locked (ksock_tx_t *tx, ksock_conn_t *conn) * FIXME: SOCK_WMEM_QUEUED and SOCK_ERROR could block in __DARWIN8__ * but they're used inside spinlocks a lot. */ - bufnob = cfs_sock_wmem_queued(conn->ksnc_sock); + bufnob = conn->ksnc_sock->sk->sk_wmem_queued; spin_lock_bh(&sched->kss_lock); if (list_empty(&conn->ksnc_tx_queue) && bufnob == 0) { @@ -2260,7 +2260,7 @@ ksocknal_find_timed_out_conn (ksock_peer_t *peer) /* SOCK_ERROR will reset error code of socket in * some platform (like Darwin8.x) */ - error = cfs_sock_error(conn->ksnc_sock); + error = conn->ksnc_sock->sk->sk_err; if (error != 0) { ksocknal_conn_addref(conn); @@ -2311,7 +2311,7 @@ ksocknal_find_timed_out_conn (ksock_peer_t *peer) } if ((!list_empty(&conn->ksnc_tx_queue) || - cfs_sock_wmem_queued(conn->ksnc_sock) != 0) && + conn->ksnc_sock->sk->sk_wmem_queued != 0) && cfs_time_aftereq(cfs_time_current(), conn->ksnc_tx_deadline)) { /* Timed out messages queued for sending or @@ -2508,7 +2508,7 @@ ksocknal_check_peer_timeouts (int idx) "resid: %d, wmem: %d\n", n, libcfs_nid2str(peer->ksnp_id.nid), tx, cfs_duration_sec(cfs_time_current() - deadline), - resid, cfs_sock_wmem_queued(conn->ksnc_sock)); + resid, conn->ksnc_sock->sk->sk_wmem_queued); ksocknal_close_conn_and_siblings (conn, -ETIMEDOUT); ksocknal_conn_decref(conn); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c index d18bab19cd9a..245c9d7560af 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -695,7 +695,7 @@ ksocknal_lib_memory_pressure(ksock_conn_t *conn) sched = conn->ksnc_scheduler; spin_lock_bh(&sched->kss_lock); - if (!SOCK_TEST_NOSPACE(conn->ksnc_sock) && + if (!test_bit(SOCK_NOSPACE, &conn->ksnc_sock->flags) && !conn->ksnc_tx_ready) { /* SOCK_NOSPACE is set when the socket fills * and cleared in the write_space callback diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c index eb14dfd4b0f5..a93b6210705b 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c @@ -545,7 +545,7 @@ libcfs_sock_accept (struct socket **newsockp, struct socket *sock) newsock->ops = sock->ops; set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(cfs_sk_sleep(sock->sk), &wait); + add_wait_queue(sk_sleep(sock->sk), &wait); rc = sock->ops->accept(sock, newsock, O_NONBLOCK); if (rc == -EAGAIN) { @@ -554,7 +554,7 @@ libcfs_sock_accept (struct socket **newsockp, struct socket *sock) rc = sock->ops->accept(sock, newsock, O_NONBLOCK); } - remove_wait_queue(cfs_sk_sleep(sock->sk), &wait); + remove_wait_queue(sk_sleep(sock->sk), &wait); set_current_state(TASK_RUNNING); if (rc != 0) @@ -573,7 +573,7 @@ EXPORT_SYMBOL(libcfs_sock_accept); void libcfs_sock_abort_accept (struct socket *sock) { - wake_up_all(cfs_sk_sleep(sock->sk)); + wake_up_all(sk_sleep(sock->sk)); } EXPORT_SYMBOL(libcfs_sock_abort_accept); -- cgit From 61b3508ae323e5566637e5da14a131eb940de6fa Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:04:53 -0700 Subject: staging: lustre: remove cfs_fs_time_t Use 'struct timespec' like the rest of the kernel does Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/libcfs_time.h | 2 +- .../lustre/include/linux/libcfs/linux/linux-time.h | 29 +++++++++++----------- 2 files changed, 15 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index bb9e59e41a8c..712ab1ab2f27 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -111,7 +111,7 @@ static inline void cfs_slow_warning(cfs_time_t now, int seconds, char *msg) */ static inline void cfs_fs_timeval(struct timeval *tv) { - cfs_fs_time_t time; + struct timespec time; cfs_fs_time_current(&time); cfs_fs_time_usec(&time, tv); diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 8d78cb38312d..40369d581210 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -57,7 +57,7 @@ * cfs_duration_t represents time interval with resolution of internal * platform clock * - * cfs_fs_time_t represents instance in world-visible time. This is + * struct timespec represents instance in world-visible time. This is * used in file-system time-stamps * * cfs_time_t cfs_time_current(void); @@ -72,12 +72,12 @@ * void cfs_duration_usec(cfs_duration_t, struct timeval *); * void cfs_duration_nsec(cfs_duration_t, struct timespec *); * - * void cfs_fs_time_current(cfs_fs_time_t *); - * time_t cfs_fs_time_sec (cfs_fs_time_t *); - * void cfs_fs_time_usec (cfs_fs_time_t *, struct timeval *); - * void cfs_fs_time_nsec (cfs_fs_time_t *, struct timespec *); - * int cfs_fs_time_before (cfs_fs_time_t *, cfs_fs_time_t *); - * int cfs_fs_time_beforeq(cfs_fs_time_t *, cfs_fs_time_t *); + * void cfs_fs_time_current(struct timespec *); + * time_t cfs_fs_time_sec (struct timespec *); + * void cfs_fs_time_usec (struct timespec *, struct timeval *); + * void cfs_fs_time_nsec (struct timespec *, struct timespec *); + * int cfs_fs_time_before (struct timespec *, struct timespec *); + * int cfs_fs_time_beforeq(struct timespec *, struct timespec *); * * CFS_TIME_FORMAT * CFS_DURATION_FORMAT @@ -100,15 +100,14 @@ #include -typedef struct timespec cfs_fs_time_t; -static inline void cfs_fs_time_usec(cfs_fs_time_t *t, struct timeval *v) +static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v) { v->tv_sec = t->tv_sec; v->tv_usec = t->tv_nsec / 1000; } -static inline void cfs_fs_time_nsec(cfs_fs_time_t *t, struct timespec *s) +static inline void cfs_fs_time_nsec(struct timespec *t, struct timespec *s) { *s = *t; } @@ -116,7 +115,7 @@ static inline void cfs_fs_time_nsec(cfs_fs_time_t *t, struct timespec *s) /* * internal helper function used by cfs_fs_time_before*() */ -static inline unsigned long long __cfs_fs_time_flat(cfs_fs_time_t *t) +static inline unsigned long long __cfs_fs_time_flat(struct timespec *t) { return (unsigned long long)t->tv_sec * ONE_BILLION + t->tv_nsec; } @@ -149,22 +148,22 @@ static inline time_t cfs_time_current_sec(void) return get_seconds(); } -static inline void cfs_fs_time_current(cfs_fs_time_t *t) +static inline void cfs_fs_time_current(struct timespec *t) { *t = CURRENT_TIME; } -static inline time_t cfs_fs_time_sec(cfs_fs_time_t *t) +static inline time_t cfs_fs_time_sec(struct timespec *t) { return t->tv_sec; } -static inline int cfs_fs_time_before(cfs_fs_time_t *t1, cfs_fs_time_t *t2) +static inline int cfs_fs_time_before(struct timespec *t1, struct timespec *t2) { return __cfs_fs_time_flat(t1) < __cfs_fs_time_flat(t2); } -static inline int cfs_fs_time_beforeq(cfs_fs_time_t *t1, cfs_fs_time_t *t2) +static inline int cfs_fs_time_beforeq(struct timespec *t1, struct timespec *t2) { return __cfs_fs_time_flat(t1) <= __cfs_fs_time_flat(t2); } -- cgit From 8718c63e5f7d8a4a9c080140a2f571739b4a675e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:10:33 -0700 Subject: staging: lustre: remove unused functions from linux-time.h No one was using them, so delete them. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/linux-time.h | 69 ---------------------- 1 file changed, 69 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 40369d581210..cfc99de29162 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -70,14 +70,10 @@ * * time_t cfs_duration_sec (cfs_duration_t); * void cfs_duration_usec(cfs_duration_t, struct timeval *); - * void cfs_duration_nsec(cfs_duration_t, struct timespec *); * * void cfs_fs_time_current(struct timespec *); * time_t cfs_fs_time_sec (struct timespec *); * void cfs_fs_time_usec (struct timespec *, struct timeval *); - * void cfs_fs_time_nsec (struct timespec *, struct timespec *); - * int cfs_fs_time_before (struct timespec *, struct timespec *); - * int cfs_fs_time_beforeq(struct timespec *, struct timespec *); * * CFS_TIME_FORMAT * CFS_DURATION_FORMAT @@ -107,26 +103,12 @@ static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v) v->tv_usec = t->tv_nsec / 1000; } -static inline void cfs_fs_time_nsec(struct timespec *t, struct timespec *s) -{ - *s = *t; -} - -/* - * internal helper function used by cfs_fs_time_before*() - */ -static inline unsigned long long __cfs_fs_time_flat(struct timespec *t) -{ - return (unsigned long long)t->tv_sec * ONE_BILLION + t->tv_nsec; -} - /* * Generic kernel stuff */ typedef unsigned long cfs_time_t; /* jiffies */ typedef long cfs_duration_t; -typedef cycles_t cfs_cycles_t; static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2) { @@ -158,33 +140,6 @@ static inline time_t cfs_fs_time_sec(struct timespec *t) return t->tv_sec; } -static inline int cfs_fs_time_before(struct timespec *t1, struct timespec *t2) -{ - return __cfs_fs_time_flat(t1) < __cfs_fs_time_flat(t2); -} - -static inline int cfs_fs_time_beforeq(struct timespec *t1, struct timespec *t2) -{ - return __cfs_fs_time_flat(t1) <= __cfs_fs_time_flat(t2); -} - -#if 0 -static inline cfs_duration_t cfs_duration_build(int64_t nano) -{ -#if (BITS_PER_LONG == 32) - /* We cannot use do_div(t, ONE_BILLION), do_div can only process - * 64 bits n and 32 bits base */ - int64_t t = nano * HZ; - - do_div(t, 1000); - do_div(t, 1000000); - return (cfs_duration_t)t; -#else - return (nano * HZ / ONE_BILLION); -#endif -} -#endif - static inline cfs_duration_t cfs_time_seconds(int seconds) { return ((cfs_duration_t)seconds) * HZ; @@ -211,21 +166,6 @@ static inline void cfs_duration_usec(cfs_duration_t d, struct timeval *s) #endif } -static inline void cfs_duration_nsec(cfs_duration_t d, struct timespec *s) -{ -#if (BITS_PER_LONG == 32) - __u64 t; - - s->tv_sec = d / HZ; - t = (d - s->tv_sec * HZ) * ONE_BILLION; - do_div(t, HZ); - s->tv_nsec = t; -#else - s->tv_sec = d / HZ; - s->tv_nsec = ((d - s->tv_sec * HZ) * ONE_BILLION) / HZ; -#endif -} - #define cfs_time_current_64 get_jiffies_64 static inline __u64 cfs_time_add_64(__u64 t, __u64 d) @@ -258,12 +198,3 @@ static inline int cfs_time_beforeq_64(__u64 t1, __u64 t2) #define CFS_DURATION_T "%ld" #endif /* __LIBCFS_LINUX_LINUX_TIME_H__ */ -/* - * Local variables: - * c-indentation-style: "K&R" - * c-basic-offset: 8 - * tab-width: 8 - * fill-column: 80 - * scroll-step: 1 - * End: - */ -- cgit From a649ad1d7b44d2b5da62eec804539bb221396570 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:27:46 -0700 Subject: staging: lustre: remove cfs_time_t typedef Just use unsigned long everywhere, like the rest of the kernel does. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/libcfs_debug.h | 2 +- .../staging/lustre/include/linux/libcfs/libcfs_prim.h | 4 ++-- .../staging/lustre/include/linux/libcfs/libcfs_time.h | 16 ++++++++-------- .../lustre/include/linux/libcfs/linux/linux-time.h | 19 +++++++++---------- drivers/staging/lustre/include/linux/libcfs/lucache.h | 4 ++-- drivers/staging/lustre/include/linux/lnet/lib-lnet.h | 4 ++-- drivers/staging/lustre/include/linux/lnet/lib-types.h | 12 ++++++------ drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 14 +++++++------- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h | 14 +++++++------- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 2 +- drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c | 10 +++++----- drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h | 18 +++++++++--------- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 10 +++++----- drivers/staging/lustre/lnet/lnet/lib-eq.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-move.c | 10 +++++----- drivers/staging/lustre/lnet/lnet/router.c | 10 +++++----- drivers/staging/lustre/lnet/lnet/router_proc.c | 6 +++--- drivers/staging/lustre/lnet/selftest/conrpc.c | 6 +++--- drivers/staging/lustre/lnet/selftest/conrpc.h | 2 +- drivers/staging/lustre/lnet/selftest/console.h | 2 +- drivers/staging/lustre/lnet/selftest/selftest.h | 2 +- drivers/staging/lustre/lnet/selftest/timer.c | 10 +++++----- drivers/staging/lustre/lnet/selftest/timer.h | 2 +- drivers/staging/lustre/lustre/include/lustre_capa.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_dlm.h | 10 +++++----- drivers/staging/lustre/lustre/include/lustre_export.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_import.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_net.h | 4 ++-- drivers/staging/lustre/lustre/include/lustre_sec.h | 6 +++--- drivers/staging/lustre/lustre/include/obd.h | 4 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 6 +++--- .../staging/lustre/lustre/libcfs/linux/linux-prim.c | 4 ++-- drivers/staging/lustre/lustre/llite/llite_capa.c | 6 +++--- drivers/staging/lustre/lustre/llite/llite_internal.h | 4 ++-- drivers/staging/lustre/lustre/llite/remote_perm.c | 2 +- drivers/staging/lustre/lustre/osc/osc_cl_internal.h | 4 ++-- drivers/staging/lustre/lustre/osc/osc_object.c | 4 ++-- drivers/staging/lustre/lustre/osc/osc_page.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/pinger.c | 6 +++--- drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 4 ++-- 42 files changed, 132 insertions(+), 133 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h index b43c9ad8fd15..30098f39181f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h @@ -165,7 +165,7 @@ struct ptldebug_header { #define CDEBUG_DEFAULT_MIN_DELAY ((cfs_time_seconds(1) + 1) / 2) /* jiffies */ #define CDEBUG_DEFAULT_BACKOFF 2 struct cfs_debug_limit_state { - cfs_time_t cdls_next; + unsigned long cdls_next; unsigned int cdls_delay; int cdls_count; }; diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h index 7cf34aa78f79..a38209506d6c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h @@ -50,10 +50,10 @@ void add_wait_queue_exclusive_head(wait_queue_head_t *, wait_queue_t *); void cfs_init_timer(struct timer_list *t); void cfs_timer_init(struct timer_list *t, cfs_timer_func_t *func, void *arg); void cfs_timer_done(struct timer_list *t); -void cfs_timer_arm(struct timer_list *t, cfs_time_t deadline); +void cfs_timer_arm(struct timer_list *t, unsigned long deadline); void cfs_timer_disarm(struct timer_list *t); int cfs_timer_is_armed(struct timer_list *t); -cfs_time_t cfs_timer_deadline(struct timer_list *t); +unsigned long cfs_timer_deadline(struct timer_list *t); /* * Memory diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 712ab1ab2f27..73c51e2fae75 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -43,27 +43,27 @@ * generic time manipulation functions. */ -static inline cfs_time_t cfs_time_add(cfs_time_t t, cfs_duration_t d) +static inline unsigned long cfs_time_add(unsigned long t, cfs_duration_t d) { - return (cfs_time_t)(t + d); + return (unsigned long)(t + d); } -static inline cfs_duration_t cfs_time_sub(cfs_time_t t1, cfs_time_t t2) +static inline cfs_duration_t cfs_time_sub(unsigned long t1, unsigned long t2) { - return (cfs_time_t)(t1 - t2); + return (unsigned long)(t1 - t2); } -static inline int cfs_time_after(cfs_time_t t1, cfs_time_t t2) +static inline int cfs_time_after(unsigned long t1, unsigned long t2) { return cfs_time_before(t2, t1); } -static inline int cfs_time_aftereq(cfs_time_t t1, cfs_time_t t2) +static inline int cfs_time_aftereq(unsigned long t1, unsigned long t2) { return cfs_time_beforeq(t2, t1); } -static inline cfs_time_t cfs_time_shift(int seconds) +static inline unsigned long cfs_time_shift(int seconds) { return cfs_time_add(cfs_time_current(), cfs_time_seconds(seconds)); } @@ -81,7 +81,7 @@ static inline long cfs_timeval_sub(struct timeval *large, struct timeval *small, return r; } -static inline void cfs_slow_warning(cfs_time_t now, int seconds, char *msg) +static inline void cfs_slow_warning(unsigned long now, int seconds, char *msg) { if (cfs_time_after(cfs_time_current(), cfs_time_add(now, cfs_time_seconds(15)))) diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index cfc99de29162..cf29fc8213ba 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -50,7 +50,7 @@ /* * Platform provides three opaque data-types: * - * cfs_time_t represents point in time. This is internal kernel + * unsigned long represents point in time. This is internal kernel * time rather than "wall clock". This time bears no * relation to gettimeofday(). * @@ -60,11 +60,11 @@ * struct timespec represents instance in world-visible time. This is * used in file-system time-stamps * - * cfs_time_t cfs_time_current(void); - * cfs_time_t cfs_time_add (cfs_time_t, cfs_duration_t); - * cfs_duration_t cfs_time_sub (cfs_time_t, cfs_time_t); - * int cfs_impl_time_before (cfs_time_t, cfs_time_t); - * int cfs_impl_time_before_eq(cfs_time_t, cfs_time_t); + * unsigned long cfs_time_current(void); + * unsigned long cfs_time_add (unsigned long, cfs_duration_t); + * cfs_duration_t cfs_time_sub (unsigned long, unsigned long); + * int cfs_impl_time_before (unsigned long, unsigned long); + * int cfs_impl_time_before_eq(unsigned long, unsigned long); * * cfs_duration_t cfs_duration_build(int64_t); * @@ -107,20 +107,19 @@ static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v) * Generic kernel stuff */ -typedef unsigned long cfs_time_t; /* jiffies */ typedef long cfs_duration_t; -static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2) +static inline int cfs_time_before(unsigned long t1, unsigned long t2) { return time_before(t1, t2); } -static inline int cfs_time_beforeq(cfs_time_t t1, cfs_time_t t2) +static inline int cfs_time_beforeq(unsigned long t1, unsigned long t2) { return time_before_eq(t1, t2); } -static inline cfs_time_t cfs_time_current(void) +static inline unsigned long cfs_time_current(void) { return jiffies; } diff --git a/drivers/staging/lustre/include/linux/libcfs/lucache.h b/drivers/staging/lustre/include/linux/libcfs/lucache.h index 3350dcc0ca2a..5d6e1b9de206 100644 --- a/drivers/staging/lustre/include/linux/libcfs/lucache.h +++ b/drivers/staging/lustre/include/linux/libcfs/lucache.h @@ -88,8 +88,8 @@ struct upcall_cache_entry { atomic_t ue_refcount; int ue_flags; wait_queue_head_t ue_waitq; - cfs_time_t ue_acquire_expire; - cfs_time_t ue_expire; + unsigned long ue_acquire_expire; + unsigned long ue_expire; union { struct md_identity identity; } u; diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index e5c72eb49467..5e8ea222b49f 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -643,8 +643,8 @@ lnet_ni_t *lnet_nid2ni_locked(lnet_nid_t nid, int cpt); lnet_ni_t *lnet_net2ni_locked(__u32 net, int cpt); lnet_ni_t *lnet_net2ni(__u32 net); -int lnet_notify(lnet_ni_t *ni, lnet_nid_t peer, int alive, cfs_time_t when); -void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, cfs_time_t when); +int lnet_notify(lnet_ni_t *ni, lnet_nid_t peer, int alive, unsigned long when); +void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, unsigned long when); int lnet_add_route(__u32 net, unsigned int hops, lnet_nid_t gateway_nid, unsigned int priority); int lnet_check_routes(void); diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index 936b829b947a..f16213f1771a 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -362,7 +362,7 @@ typedef struct lnet_lnd { void (*lnd_notify)(struct lnet_ni *ni, lnet_nid_t peer, int alive); /* query of peer aliveness */ - void (*lnd_query)(struct lnet_ni *ni, lnet_nid_t peer, cfs_time_t *when); + void (*lnd_query)(struct lnet_ni *ni, lnet_nid_t peer, unsigned long *when); /* accept a new connection */ int (*lnd_accept)(struct lnet_ni *ni, struct socket *sock); @@ -457,11 +457,11 @@ typedef struct lnet_peer { unsigned int lp_ping_notsent; /* SEND event outstanding from ping */ int lp_alive_count; /* # times router went dead<->alive */ long lp_txqnob; /* bytes queued for sending */ - cfs_time_t lp_timestamp; /* time of last aliveness news */ - cfs_time_t lp_ping_timestamp; /* time of last ping attempt */ - cfs_time_t lp_ping_deadline; /* != 0 if ping reply expected */ - cfs_time_t lp_last_alive; /* when I was last alive */ - cfs_time_t lp_last_query; /* when lp_ni was queried last time */ + unsigned long lp_timestamp; /* time of last aliveness news */ + unsigned long lp_ping_timestamp; /* time of last ping attempt */ + unsigned long lp_ping_deadline; /* != 0 if ping reply expected */ + unsigned long lp_last_alive; /* when I was last alive */ + unsigned long lp_last_query; /* when lp_ni was queried last time */ lnet_ni_t *lp_ni; /* interface peer is on */ lnet_nid_t lp_nid; /* peer's NID */ int lp_refcount; /* # refs */ diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 1a4c9e625641..0cdcd5a0521c 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -1074,10 +1074,10 @@ kiblnd_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg) } void -kiblnd_query (lnet_ni_t *ni, lnet_nid_t nid, cfs_time_t *when) +kiblnd_query (lnet_ni_t *ni, lnet_nid_t nid, unsigned long *when) { - cfs_time_t last_alive = 0; - cfs_time_t now = cfs_time_current(); + unsigned long last_alive = 0; + unsigned long now = cfs_time_current(); rwlock_t *glock = &kiblnd_data.kib_global_lock; kib_peer_t *peer; unsigned long flags; @@ -1509,7 +1509,7 @@ kiblnd_init_fmr_poolset(kib_fmr_poolset_t *fps, int cpt, kib_net_t *net, } static int -kiblnd_fmr_pool_is_idle(kib_fmr_pool_t *fpo, cfs_time_t now) +kiblnd_fmr_pool_is_idle(kib_fmr_pool_t *fpo, unsigned long now) { if (fpo->fpo_map_count != 0) /* still in use */ return 0; @@ -1524,7 +1524,7 @@ kiblnd_fmr_pool_unmap(kib_fmr_t *fmr, int status) LIST_HEAD (zombies); kib_fmr_pool_t *fpo = fmr->fmr_pool; kib_fmr_poolset_t *fps = fpo->fpo_owner; - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); kib_fmr_pool_t *tmp; int rc; @@ -1731,7 +1731,7 @@ kiblnd_init_poolset(kib_poolset_t *ps, int cpt, } static int -kiblnd_pool_is_idle(kib_pool_t *pool, cfs_time_t now) +kiblnd_pool_is_idle(kib_pool_t *pool, unsigned long now) { if (pool->po_allocated != 0) /* still in use */ return 0; @@ -1746,7 +1746,7 @@ kiblnd_pool_free_node(kib_pool_t *pool, struct list_head *node) LIST_HEAD (zombies); kib_poolset_t *ps = pool->po_owner; kib_pool_t *tmp; - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); spin_lock(&ps->ps_lock); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h index 2ca753d42ca8..4306d9804a10 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h @@ -195,7 +195,7 @@ typedef struct char ibd_ifname[KIB_IFNAME_SIZE]; int ibd_nnets; /* # nets extant */ - cfs_time_t ibd_next_failover; + unsigned long ibd_next_failover; int ibd_failed_failover; /* # failover failures */ unsigned int ibd_failover; /* failover in progress */ unsigned int ibd_can_failover; /* IPoIB interface is a bonding master */ @@ -261,7 +261,7 @@ typedef struct kib_poolset char ps_name[IBLND_POOL_NAME_LEN]; /* pool set name */ struct list_head ps_pool_list; /* list of pools */ struct list_head ps_failed_pool_list; /* failed pool list */ - cfs_time_t ps_next_retry; /* time stamp for retry if failed to allocate */ + unsigned long ps_next_retry; /* time stamp for retry if failed to allocate */ int ps_increasing; /* is allocating new pool */ int ps_pool_size; /* new pool size */ int ps_cpt; /* CPT id */ @@ -277,7 +277,7 @@ typedef struct kib_pool struct list_head po_list; /* chain on pool list */ struct list_head po_free_list; /* pre-allocated node */ kib_poolset_t *po_owner; /* pool_set of this pool */ - cfs_time_t po_deadline; /* deadline of this pool */ + unsigned long po_deadline; /* deadline of this pool */ int po_allocated; /* # of elements in use */ int po_failed; /* pool is created on failed HCA */ int po_size; /* # of pre-allocated elements */ @@ -317,7 +317,7 @@ typedef struct /* is allocating new pool */ int fps_increasing; /* time stamp for retry if failed to allocate */ - cfs_time_t fps_next_retry; + unsigned long fps_next_retry; } kib_fmr_poolset_t; typedef struct @@ -326,7 +326,7 @@ typedef struct struct kib_hca_dev *fpo_hdev; /* device for this pool */ kib_fmr_poolset_t *fpo_owner; /* owner of this pool */ struct ib_fmr_pool *fpo_fmr_pool; /* IB FMR pool */ - cfs_time_t fpo_deadline; /* deadline of this pool */ + unsigned long fpo_deadline; /* deadline of this pool */ int fpo_failed; /* fmr pool is failed */ int fpo_map_count; /* # of mapped FMR */ } kib_fmr_pool_t; @@ -642,7 +642,7 @@ typedef struct kib_peer int ibp_connecting; /* current active connection attempts */ int ibp_accepting; /* current passive connection attempts */ int ibp_error; /* errno on closing this peer */ - cfs_time_t ibp_last_alive; /* when (in jiffies) I was last alive */ + unsigned long ibp_last_alive; /* when (in jiffies) I was last alive */ } kib_peer_t; extern kib_data_t kiblnd_data; @@ -990,7 +990,7 @@ void kiblnd_pmr_pool_unmap(kib_phys_mr_t *pmr); int kiblnd_startup (lnet_ni_t *ni); void kiblnd_shutdown (lnet_ni_t *ni); int kiblnd_ctl (lnet_ni_t *ni, unsigned int cmd, void *arg); -void kiblnd_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when); +void kiblnd_query (struct lnet_ni *ni, lnet_nid_t nid, unsigned long *when); int kiblnd_tunables_init(void); void kiblnd_tunables_fini(void); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c index dfd16e7ca8a2..14f3decb77f1 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -1830,7 +1830,7 @@ static void kiblnd_peer_notify (kib_peer_t *peer) { int error = 0; - cfs_time_t last_alive = 0; + unsigned long last_alive = 0; unsigned long flags; read_lock_irqsave(&kiblnd_data.kib_global_lock, flags); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 1590957711a7..c23ffbac3b6d 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -1483,7 +1483,7 @@ void ksocknal_peer_failed (ksock_peer_t *peer) { int notify = 0; - cfs_time_t last_alive = 0; + unsigned long last_alive = 0; /* There has been a connection failure or comms error; but I'll only * tell LNET I think the peer is dead if it's to another kernel and @@ -1620,7 +1620,7 @@ ksocknal_queue_zombie_conn (ksock_conn_t *conn) void ksocknal_destroy_conn (ksock_conn_t *conn) { - cfs_time_t last_rcv; + unsigned long last_rcv; /* Final coup-de-grace of the reaper */ CDEBUG (D_NET, "connection %p\n", conn); @@ -1789,11 +1789,11 @@ ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive) } void -ksocknal_query (lnet_ni_t *ni, lnet_nid_t nid, cfs_time_t *when) +ksocknal_query (lnet_ni_t *ni, lnet_nid_t nid, unsigned long *when) { int connect = 1; - cfs_time_t last_alive = 0; - cfs_time_t now = cfs_time_current(); + unsigned long last_alive = 0; + unsigned long now = cfs_time_current(); ksock_peer_t *peer = NULL; rwlock_t *glock = &ksocknal_data.ksnd_global_lock; lnet_process_id_t id = {.nid = nid, .pid = LUSTRE_SRV_LNET_PID}; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index 0446d5081e71..800d97b29c43 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -164,7 +164,7 @@ typedef struct struct list_head ksnd_zombie_conns; /* conns to free: reaper_lock */ struct list_head ksnd_enomem_conns; /* conns to retry: reaper_lock*/ wait_queue_head_t ksnd_reaper_waitq; /* reaper sleeps here */ - cfs_time_t ksnd_reaper_waketime;/* when reaper will wake */ + unsigned long ksnd_reaper_waketime;/* when reaper will wake */ spinlock_t ksnd_reaper_lock; /* serialise */ int ksnd_enomem_tx; /* test ENOMEM sender */ @@ -225,7 +225,7 @@ typedef struct /* transmit packet */ lnet_kiov_t *tx_kiov; /* packet page frags */ struct ksock_conn *tx_conn; /* owning conn */ lnet_msg_t *tx_lnetmsg; /* lnet message for lnet_finalize() */ - cfs_time_t tx_deadline; /* when (in jiffies) tx times out */ + unsigned long tx_deadline; /* when (in jiffies) tx times out */ ksock_msg_t tx_msg; /* socklnd message buffer */ int tx_desc_size; /* size of this descriptor */ union { @@ -280,7 +280,7 @@ typedef struct ksock_conn /* reader */ struct list_head ksnc_rx_list; /* where I enq waiting input or a forwarding descriptor */ - cfs_time_t ksnc_rx_deadline; /* when (in jiffies) receive times out */ + unsigned long ksnc_rx_deadline; /* when (in jiffies) receive times out */ __u8 ksnc_rx_started; /* started receiving a message */ __u8 ksnc_rx_ready; /* data ready to read */ __u8 ksnc_rx_scheduled;/* being progressed */ @@ -305,12 +305,12 @@ typedef struct ksock_conn struct list_head ksnc_tx_list; /* where I enq waiting for output space */ struct list_head ksnc_tx_queue; /* packets waiting to be sent */ ksock_tx_t *ksnc_tx_carrier; /* next TX that can carry a LNet message or ZC-ACK */ - cfs_time_t ksnc_tx_deadline; /* when (in jiffies) tx times out */ + unsigned long ksnc_tx_deadline; /* when (in jiffies) tx times out */ int ksnc_tx_bufnob; /* send buffer marker */ atomic_t ksnc_tx_nob; /* # bytes queued */ int ksnc_tx_ready; /* write space */ int ksnc_tx_scheduled; /* being progressed */ - cfs_time_t ksnc_tx_last_post; /* time stamp of the last posted TX */ + unsigned long ksnc_tx_last_post; /* time stamp of the last posted TX */ } ksock_conn_t; typedef struct ksock_route @@ -319,7 +319,7 @@ typedef struct ksock_route struct list_head ksnr_connd_list; /* chain on ksnr_connd_routes */ struct ksock_peer *ksnr_peer; /* owning peer */ atomic_t ksnr_refcount; /* # users */ - cfs_time_t ksnr_timeout; /* when (in jiffies) reconnection can happen next */ + unsigned long ksnr_timeout; /* when (in jiffies) reconnection can happen next */ cfs_duration_t ksnr_retry_interval; /* how long between retries */ __u32 ksnr_myipaddr; /* my IP */ __u32 ksnr_ipaddr; /* IP address to connect to */ @@ -337,7 +337,7 @@ typedef struct ksock_route typedef struct ksock_peer { struct list_head ksnp_list; /* stash on global peer list */ - cfs_time_t ksnp_last_alive; /* when (in jiffies) I was last alive */ + unsigned long ksnp_last_alive; /* when (in jiffies) I was last alive */ lnet_process_id_t ksnp_id; /* who's on the other end(s) */ atomic_t ksnp_refcount; /* # users */ int ksnp_sharecount; /* lconf usage counter */ @@ -352,7 +352,7 @@ typedef struct ksock_peer struct list_head ksnp_tx_queue; /* waiting packets */ spinlock_t ksnp_lock; /* serialize, g_lock unsafe */ struct list_head ksnp_zc_req_list; /* zero copy requests wait for ACK */ - cfs_time_t ksnp_send_keepalive; /* time to send keepalive */ + unsigned long ksnp_send_keepalive; /* time to send keepalive */ lnet_ni_t *ksnp_ni; /* which network */ int ksnp_n_passive_ips; /* # of... */ __u32 ksnp_passive_ips[LNET_MAX_INTERFACES]; /* preferred local interfaces */ @@ -555,7 +555,7 @@ extern void ksocknal_queue_tx_locked (ksock_tx_t *tx, ksock_conn_t *conn); extern void ksocknal_txlist_done (lnet_ni_t *ni, struct list_head *txlist, int error); extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive); -extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when); +extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, unsigned long *when); extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name); extern void ksocknal_thread_fini (void); extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 0a82645e6852..25bd5161aeba 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -780,7 +780,7 @@ ksocknal_queue_tx_locked (ksock_tx_t *tx, ksock_conn_t *conn) ksock_route_t * ksocknal_find_connectable_route_locked (ksock_peer_t *peer) { - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); struct list_head *tmp; ksock_route_t *route; @@ -1845,7 +1845,7 @@ ksocknal_connect (ksock_route_t *route) int type; int wanted; struct socket *sock; - cfs_time_t deadline; + unsigned long deadline; int retry_later = 0; int rc = 0; @@ -2111,7 +2111,7 @@ static ksock_route_t * ksocknal_connd_get_route_locked(signed long *timeout_p) { ksock_route_t *route; - cfs_time_t now; + unsigned long now; now = cfs_time_current(); @@ -2431,7 +2431,7 @@ ksocknal_check_peer_timeouts (int idx) read_lock(&ksocknal_data.ksnd_global_lock); list_for_each_entry(peer, peers, ksnp_list) { - cfs_time_t deadline = 0; + unsigned long deadline = 0; int resid = 0; int n = 0; @@ -2529,7 +2529,7 @@ ksocknal_reaper (void *arg) cfs_duration_t timeout; int i; int peer_index = 0; - cfs_time_t deadline = cfs_time_current(); + unsigned long deadline = cfs_time_current(); cfs_block_allsigs (); diff --git a/drivers/staging/lustre/lnet/lnet/lib-eq.c b/drivers/staging/lustre/lnet/lnet/lib-eq.c index 0147440bd14f..bd45478e9948 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-eq.c +++ b/drivers/staging/lustre/lnet/lnet/lib-eq.c @@ -330,7 +330,7 @@ __must_hold(&the_lnet.ln_eq_wait_lock) int tms = *timeout_ms; int wait; wait_queue_t wl; - cfs_time_t now; + unsigned long now; if (tms == 0) return -1; /* don't want to wait and no new event */ diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index da47ae74a6d6..4a63516a26dd 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -682,7 +682,7 @@ lnet_ni_eager_recv(lnet_ni_t *ni, lnet_msg_t *msg) void lnet_ni_query_locked(lnet_ni_t *ni, lnet_peer_t *lp) { - cfs_time_t last_alive = 0; + unsigned long last_alive = 0; LASSERT(lnet_peer_aliveness_enabled(lp)); LASSERT(ni->ni_lnd->lnd_query != NULL); @@ -699,10 +699,10 @@ lnet_ni_query_locked(lnet_ni_t *ni, lnet_peer_t *lp) /* NB: always called with lnet_net_lock held */ static inline int -lnet_peer_is_alive(lnet_peer_t *lp, cfs_time_t now) +lnet_peer_is_alive(lnet_peer_t *lp, unsigned long now) { int alive; - cfs_time_t deadline; + unsigned long deadline; LASSERT(lnet_peer_aliveness_enabled(lp)); @@ -734,7 +734,7 @@ lnet_peer_is_alive(lnet_peer_t *lp, cfs_time_t now) int lnet_peer_alive_locked(lnet_peer_t *lp) { - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); if (!lnet_peer_aliveness_enabled(lp)) return -ENODEV; @@ -747,7 +747,7 @@ lnet_peer_alive_locked(lnet_peer_t *lp) if (lp->lp_last_query != 0) { static const int lnet_queryinterval = 1; - cfs_time_t next_query = + unsigned long next_query = cfs_time_add(lp->lp_last_query, cfs_time_seconds(lnet_queryinterval)); diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 9ee8c9758fc7..18965b92235d 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -107,7 +107,7 @@ lnet_peers_start_down(void) } void -lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, cfs_time_t when) +lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, unsigned long when) { if (cfs_time_before(when, lp->lp_timestamp)) { /* out of date information */ CDEBUG(D_NET, "Out of date\n"); @@ -931,7 +931,7 @@ static void lnet_ping_router_locked (lnet_peer_t *rtr) { lnet_rc_data_t *rcd = NULL; - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); int secs; lnet_peer_addref_locked(rtr); @@ -1497,10 +1497,10 @@ lnet_rtrpools_alloc(int im_a_router) } int -lnet_notify(lnet_ni_t *ni, lnet_nid_t nid, int alive, cfs_time_t when) +lnet_notify(lnet_ni_t *ni, lnet_nid_t nid, int alive, unsigned long when) { struct lnet_peer *lp = NULL; - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); int cpt = lnet_cpt_of_nid(nid); LASSERT (!in_interrupt ()); @@ -1576,7 +1576,7 @@ lnet_get_tunables (void) #else int -lnet_notify (lnet_ni_t *ni, lnet_nid_t nid, int alive, cfs_time_t when) +lnet_notify (lnet_ni_t *ni, lnet_nid_t nid, int alive, unsigned long when) { return -EOPNOTSUPP; } diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 394643436af3..7e78807c0093 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -333,8 +333,8 @@ int LL_PROC_PROTO(proc_lnet_routers) if (peer != NULL) { lnet_nid_t nid = peer->lp_nid; - cfs_time_t now = cfs_time_current(); - cfs_time_t deadline = peer->lp_ping_deadline; + unsigned long now = cfs_time_current(); + unsigned long deadline = peer->lp_ping_deadline; int nrefs = peer->lp_refcount; int nrtrrefs = peer->lp_rtr_refcount; int alive_cnt = peer->lp_alive_count; @@ -511,7 +511,7 @@ int LL_PROC_PROTO(proc_lnet_peers) aliveness = peer->lp_alive ? "up" : "down"; if (lnet_peer_aliveness_enabled(peer)) { - cfs_time_t now = cfs_time_current(); + unsigned long now = cfs_time_current(); cfs_duration_t delta; delta = cfs_time_sub(now, peer->lp_last_alive); diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.c b/drivers/staging/lustre/lnet/selftest/conrpc.c index ebb8f34959ef..abc9b8c59d5d 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.c +++ b/drivers/staging/lustre/lnet/selftest/conrpc.c @@ -504,7 +504,7 @@ lstcon_rpc_trans_interpreter(lstcon_rpc_trans_t *trans, nd = crpc->crp_node; dur = (cfs_duration_t)cfs_time_sub(crpc->crp_stamp, - (cfs_time_t)console_session.ses_id.ses_stamp); + (unsigned long)console_session.ses_id.ses_stamp); cfs_duration_usec(dur, &tv); if (copy_to_user(&ent->rpe_peer, @@ -1274,7 +1274,7 @@ lstcon_rpc_pinger(void *arg) CDEBUG(D_NET, "Ping %d nodes in session\n", count); - ptimer->stt_expires = (cfs_time_t)(cfs_time_current_sec() + LST_PING_INTERVAL); + ptimer->stt_expires = (unsigned long)(cfs_time_current_sec() + LST_PING_INTERVAL); stt_add_timer(ptimer); mutex_unlock(&console_session.ses_mutex); @@ -1297,7 +1297,7 @@ lstcon_rpc_pinger_start(void) } ptimer = &console_session.ses_ping_timer; - ptimer->stt_expires = (cfs_time_t)(cfs_time_current_sec() + LST_PING_INTERVAL); + ptimer->stt_expires = (unsigned long)(cfs_time_current_sec() + LST_PING_INTERVAL); stt_add_timer(ptimer); diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.h b/drivers/staging/lustre/lnet/selftest/conrpc.h index 59f0097c6ec9..fc1cb56cbab2 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.h +++ b/drivers/staging/lustre/lnet/selftest/conrpc.h @@ -75,7 +75,7 @@ typedef struct lstcon_rpc { /** RPC is embedded in other structure and can't free it */ unsigned int crp_embedded:1; int crp_status; /* console rpc errors */ - cfs_time_t crp_stamp; /* replied time stamp */ + unsigned long crp_stamp; /* replied time stamp */ } lstcon_rpc_t; typedef struct lstcon_rpc_trans { diff --git a/drivers/staging/lustre/lnet/selftest/console.h b/drivers/staging/lustre/lnet/selftest/console.h index 0e2e3263832f..f960174ceff8 100644 --- a/drivers/staging/lustre/lnet/selftest/console.h +++ b/drivers/staging/lustre/lnet/selftest/console.h @@ -56,7 +56,7 @@ typedef struct lstcon_node { int nd_ref; /* reference count */ int nd_state; /* state of the node */ int nd_timeout; /* session timeout */ - cfs_time_t nd_stamp; /* timestamp of last replied RPC */ + unsigned long nd_stamp; /* timestamp of last replied RPC */ struct lstcon_rpc nd_ping; /* ping rpc */ } lstcon_node_t; /*** node descriptor */ diff --git a/drivers/staging/lustre/lnet/selftest/selftest.h b/drivers/staging/lustre/lnet/selftest/selftest.h index 7bc616602b11..9b5c5df6eb2c 100644 --- a/drivers/staging/lustre/lnet/selftest/selftest.h +++ b/drivers/staging/lustre/lnet/selftest/selftest.h @@ -334,7 +334,7 @@ typedef struct { atomic_t sn_refcount; atomic_t sn_brw_errors; atomic_t sn_ping_errors; - cfs_time_t sn_started; + unsigned long sn_started; } sfw_session_t; #define sfw_sid_equal(sid0, sid1) ((sid0).ses_nid == (sid1).ses_nid && \ diff --git a/drivers/staging/lustre/lnet/selftest/timer.c b/drivers/staging/lustre/lnet/selftest/timer.c index b8e50ef0bb4e..61a55b3d9bfc 100644 --- a/drivers/staging/lustre/lnet/selftest/timer.c +++ b/drivers/staging/lustre/lnet/selftest/timer.c @@ -60,7 +60,7 @@ struct st_timer_data { spinlock_t stt_lock; /* start time of the slot processed previously */ - cfs_time_t stt_prev_slot; + unsigned long stt_prev_slot; struct list_head stt_hash[STTIMER_NSLOTS]; int stt_shuttingdown; wait_queue_head_t stt_waitq; @@ -122,7 +122,7 @@ stt_del_timer(stt_timer_t *timer) /* called with stt_data.stt_lock held */ int -stt_expire_list(struct list_head *slot, cfs_time_t now) +stt_expire_list(struct list_head *slot, unsigned long now) { int expired = 0; stt_timer_t *timer; @@ -146,11 +146,11 @@ stt_expire_list(struct list_head *slot, cfs_time_t now) } int -stt_check_timers(cfs_time_t *last) +stt_check_timers(unsigned long *last) { int expired = 0; - cfs_time_t now; - cfs_time_t this_slot; + unsigned long now; + unsigned long this_slot; now = cfs_time_current_sec(); this_slot = now & STTIMER_SLOTTIMEMASK; diff --git a/drivers/staging/lustre/lnet/selftest/timer.h b/drivers/staging/lustre/lnet/selftest/timer.h index 56dbfe5ea1e5..d727c1e2b0ce 100644 --- a/drivers/staging/lustre/lnet/selftest/timer.h +++ b/drivers/staging/lustre/lnet/selftest/timer.h @@ -40,7 +40,7 @@ typedef struct { struct list_head stt_list; - cfs_time_t stt_expires; + unsigned long stt_expires; void (*stt_func) (void *); void *stt_data; } stt_timer_t; diff --git a/drivers/staging/lustre/lustre/include/lustre_capa.h b/drivers/staging/lustre/lustre/include/lustre_capa.h index 4bafba98f050..37bd07865e4d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_capa.h +++ b/drivers/staging/lustre/lustre/include/lustre_capa.h @@ -82,7 +82,7 @@ struct obd_capa { struct lustre_capa c_capa; /* capa */ atomic_t c_refc; /* ref count */ - cfs_time_t c_expiry; /* jiffies */ + unsigned long c_expiry; /* jiffies */ spinlock_t c_lock; /* protect capa content */ int c_site; @@ -266,7 +266,7 @@ static inline __u64 capa_open_opc(int mode) static inline void set_capa_expiry(struct obd_capa *ocapa) { - cfs_time_t expiry = cfs_time_sub((cfs_time_t)ocapa->c_capa.lc_expiry, + unsigned long expiry = cfs_time_sub((unsigned long)ocapa->c_capa.lc_expiry, cfs_time_current_sec()); ocapa->c_expiry = cfs_time_add(cfs_time_current(), cfs_time_seconds(expiry)); diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index bdf897b8383e..7908450a54c9 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -441,7 +441,7 @@ struct ldlm_namespace { * \see ldlm_namespace_dump. Increased by 10 seconds every time * it is called. */ - cfs_time_t ns_next_dump; + unsigned long ns_next_dump; /** "policy" function that does actual lock conflict determination */ ldlm_res_policy ns_policy; @@ -783,13 +783,13 @@ struct ldlm_lock { * Seconds. It will be updated if there is any activity related to * the lock, e.g. enqueue the lock or send blocking AST. */ - cfs_time_t l_last_activity; + unsigned long l_last_activity; /** * Time last used by e.g. being matched by lock match. * Jiffies. Should be converted to time if needed. */ - cfs_time_t l_last_used; + unsigned long l_last_used; /** Originally requested extent for the extent lock. */ struct ldlm_extent l_req_extent; @@ -837,7 +837,7 @@ struct ldlm_lock { * under this lock. * \see ost_rw_prolong_locks */ - cfs_time_t l_callback_timeout; + unsigned long l_callback_timeout; /** Local PID of process which created this lock. */ __u32 l_pid; @@ -951,7 +951,7 @@ struct ldlm_resource { void *lr_lvb_data; /** When the resource was considered as contended. */ - cfs_time_t lr_contention_time; + unsigned long lr_contention_time; /** List of references to this resource. For debugging. */ struct lu_ref lr_reference; diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index bbb4b97034ac..a5f420145355 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -209,7 +209,7 @@ struct obd_export { /** Last committed transno for this export */ __u64 exp_last_committed; /** When was last request received */ - cfs_time_t exp_last_request_time; + unsigned long exp_last_request_time; /** On replay all requests waiting for replay are linked here */ struct list_head exp_req_replay_queue; /** @@ -245,7 +245,7 @@ struct obd_export { enum lustre_sec_part exp_sp_peer; struct sptlrpc_flavor exp_flvr; /* current */ struct sptlrpc_flavor exp_flvr_old[2]; /* about-to-expire */ - cfs_time_t exp_flvr_expire[2]; /* seconds */ + unsigned long exp_flvr_expire[2]; /* seconds */ /** protects exp_hp_rpcs */ spinlock_t exp_rpc_lock; diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 51db5eb06d99..037af2583513 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -200,7 +200,7 @@ struct obd_import { */ struct ptlrpc_sec *imp_sec; struct mutex imp_sec_mutex; - cfs_time_t imp_sec_expire; + unsigned long imp_sec_expire; /** @} */ /** Wait queue for those who need to wait for recovery completion */ @@ -247,7 +247,7 @@ struct obd_import { */ struct lustre_handle imp_remote_handle; /** When to perform next ping. time in jiffies. */ - cfs_time_t imp_next_ping; + unsigned long imp_next_ping; /** When we last successfully connected. time in 64bit jiffies */ __u64 imp_last_success_conn; diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index 3d3346105fed..60141545aea2 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -1715,7 +1715,7 @@ struct ptlrpc_request { /** optional time limit for send attempts */ cfs_duration_t rq_delay_limit; /** time request was first queued */ - cfs_time_t rq_queued_time; + unsigned long rq_queued_time; /* server-side... */ /** request arrival time */ @@ -2407,7 +2407,7 @@ struct ptlrpc_service_part { /** early reply timer */ struct timer_list scp_at_timer; /** debug */ - cfs_time_t scp_at_checktime; + unsigned long scp_at_checktime; /** check early replies */ unsigned scp_at_check; /** @} */ diff --git a/drivers/staging/lustre/lustre/include/lustre_sec.h b/drivers/staging/lustre/lustre/include/lustre_sec.h index bf3ee3915c28..94c2ab98f2cc 100644 --- a/drivers/staging/lustre/lustre/include/lustre_sec.h +++ b/drivers/staging/lustre/lustre/include/lustre_sec.h @@ -510,7 +510,7 @@ struct ptlrpc_cli_ctx { atomic_t cc_refcount; struct ptlrpc_sec *cc_sec; struct ptlrpc_ctx_ops *cc_ops; - cfs_time_t cc_expire; /* in seconds */ + unsigned long cc_expire; /* in seconds */ unsigned int cc_early_expire:1; unsigned long cc_flags; struct vfs_cred cc_vcred; @@ -835,8 +835,8 @@ struct ptlrpc_sec { * garbage collection */ struct list_head ps_gc_list; - cfs_time_t ps_gc_interval; /* in seconds */ - cfs_time_t ps_gc_next; /* in seconds */ + unsigned long ps_gc_interval; /* in seconds */ + unsigned long ps_gc_next; /* in seconds */ }; static inline int sec_is_reverse(struct ptlrpc_sec *sec) diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index ef4ad1fcc112..489bdd399627 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -281,7 +281,7 @@ enum llog_ctxt_id { struct timeout_item { enum timeout_event ti_event; - cfs_time_t ti_timeout; + unsigned long ti_timeout; timeout_cb_t ti_cb; void *ti_cb_data; struct list_head ti_obd_list; @@ -337,7 +337,7 @@ struct client_obd { * See osc_{reserve|unreserve}_grant for details. */ long cl_reserved_grant; struct list_head cl_cache_waiters; /* waiting for cache/grant */ - cfs_time_t cl_next_shrink_grant; /* jiffies */ + unsigned long cl_next_shrink_grant; /* jiffies */ struct list_head cl_grant_shrink_list; /* Timeout event list */ int cl_grant_shrink_interval; /* seconds */ diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c index 8524e7ab5f9a..f043fc34c75c 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c @@ -69,7 +69,7 @@ struct ldlm_cb_async_args { static struct ldlm_state *ldlm_state; -inline cfs_time_t round_timeout(cfs_time_t timeout) +inline unsigned long round_timeout(unsigned long timeout) { return cfs_time_seconds((int)cfs_duration_sec(cfs_time_sub(timeout, 0)) + 1); } diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index a3354089cbff..5871fe4eb389 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -95,7 +95,7 @@ int ldlm_expired_completion_wait(void *data) struct obd_device *obd; if (lock->l_conn_export == NULL) { - static cfs_time_t next_dump = 0, last_dump = 0; + static unsigned long next_dump = 0, last_dump = 0; LCONSOLE_WARN("lock timed out (enqueued at "CFS_TIME_T", " CFS_DURATION_T"s ago)\n", @@ -1447,10 +1447,10 @@ static ldlm_policy_res_t ldlm_cancel_lrur_policy(struct ldlm_namespace *ns, int unused, int added, int count) { - cfs_time_t cur = cfs_time_current(); + unsigned long cur = cfs_time_current(); struct ldlm_pool *pl = &ns->ns_pool; __u64 slv, lvf, lv; - cfs_time_t la; + unsigned long la; /* Stop LRU processing when we reach past @count or have checked all * locks in LRU. */ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c index 342ee36f64c6..871ba44b29f3 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c @@ -90,7 +90,7 @@ void cfs_timer_done(struct timer_list *t) } EXPORT_SYMBOL(cfs_timer_done); -void cfs_timer_arm(struct timer_list *t, cfs_time_t deadline) +void cfs_timer_arm(struct timer_list *t, unsigned long deadline) { mod_timer(t, deadline); } @@ -108,7 +108,7 @@ int cfs_timer_is_armed(struct timer_list *t) } EXPORT_SYMBOL(cfs_timer_is_armed); -cfs_time_t cfs_timer_deadline(struct timer_list *t) +unsigned long cfs_timer_deadline(struct timer_list *t) { return t->expires; } diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 051b023281e1..0bf8400536bf 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -70,7 +70,7 @@ static unsigned long long ll_capa_renewal_retries; static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa); -static inline void update_capa_timer(struct obd_capa *ocapa, cfs_time_t expiry) +static inline void update_capa_timer(struct obd_capa *ocapa, unsigned long expiry) { if (cfs_time_before(expiry, ll_capa_timer.expires) || !timer_pending(&ll_capa_timer)) { @@ -80,7 +80,7 @@ static inline void update_capa_timer(struct obd_capa *ocapa, cfs_time_t expiry) } } -static inline cfs_time_t capa_renewal_time(struct obd_capa *ocapa) +static inline unsigned long capa_renewal_time(struct obd_capa *ocapa) { return cfs_time_sub(ocapa->c_expiry, cfs_time_seconds(ocapa->c_capa.lc_timeout) / 2); @@ -511,7 +511,7 @@ struct obd_capa *ll_add_capa(struct inode *inode, struct obd_capa *ocapa) return ocapa; } -static inline void delay_capa_renew(struct obd_capa *oc, cfs_time_t delay) +static inline void delay_capa_renew(struct obd_capa *oc, unsigned long delay) { /* NB: set a fake expiry for this capa to prevent it renew too soon */ oc->c_expiry = cfs_time_add(oc->c_expiry, cfs_time_seconds(delay)); diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 1d11d0156791..f9b4526d1217 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -145,7 +145,7 @@ struct ll_inode_info { * capability needs renewal */ atomic_t lli_open_count; struct obd_capa *lli_mds_capa; - cfs_time_t lli_rmtperm_time; + unsigned long lli_rmtperm_time; /* handle is to be sent to MDS later on done_writing and setattr. * Open handle data are needed for the recovery to reconstruct @@ -213,7 +213,7 @@ struct ll_inode_info { struct mutex f_write_mutex; struct rw_semaphore f_glimpse_sem; - cfs_time_t f_glimpse_time; + unsigned long f_glimpse_time; struct list_head f_agl_list; __u64 f_agl_index; diff --git a/drivers/staging/lustre/lustre/llite/remote_perm.c b/drivers/staging/lustre/lustre/llite/remote_perm.c index 5d936caeba9c..f61fefc9baf0 100644 --- a/drivers/staging/lustre/lustre/llite/remote_perm.c +++ b/drivers/staging/lustre/lustre/llite/remote_perm.c @@ -249,7 +249,7 @@ int lustre_check_remote_perm(struct inode *inode, int mask) struct ptlrpc_request *req = NULL; struct mdt_remote_perm *perm; struct obd_capa *oc; - cfs_time_t save; + unsigned long save; int i = 0, rc; do { diff --git a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h index e32a817e7ded..2d1f977dca36 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h @@ -118,7 +118,7 @@ struct osc_object { * True if locking against this stripe got -EUSERS. */ int oo_contended; - cfs_time_t oo_contention_time; + unsigned long oo_contention_time; /** * List of pages in transfer. */ @@ -387,7 +387,7 @@ struct osc_page { /** * Submit time - the time when the page is starting RPC. For debugging. */ - cfs_time_t ops_submit_time; + unsigned long ops_submit_time; /** * A lock of which we hold a reference covers this page. Only used by diff --git a/drivers/staging/lustre/lustre/osc/osc_object.c b/drivers/staging/lustre/lustre/osc/osc_object.c index f9bfdc820125..155a2dbe5b69 100644 --- a/drivers/staging/lustre/lustre/osc/osc_object.c +++ b/drivers/staging/lustre/lustre/osc/osc_object.c @@ -213,8 +213,8 @@ int osc_object_is_contended(struct osc_object *obj) { struct osc_device *dev = lu2osc_dev(obj->oo_cl.co_lu.lo_dev); int osc_contention_time = dev->od_contention_time; - cfs_time_t cur_time = cfs_time_current(); - cfs_time_t retry_time; + unsigned long cur_time = cfs_time_current(); + unsigned long retry_time; if (OBD_FAIL_CHECK(OBD_FAIL_OSC_OBJECT_CONTENTION)) return 1; diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c index 71a24473634c..8d6ba1c2128f 100644 --- a/drivers/staging/lustre/lustre/osc/osc_page.c +++ b/drivers/staging/lustre/lustre/osc/osc_page.c @@ -352,7 +352,7 @@ static const char *osc_list(struct list_head *head) return list_empty(head) ? "-" : "+"; } -static inline cfs_time_t osc_submit_duration(struct osc_page *opg) +static inline unsigned long osc_submit_duration(struct osc_page *opg) { if (opg->ops_submit_time == 0) return 0; diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 614d8b5f6cc4..ed8953379418 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -966,8 +966,8 @@ int osc_shrink_grant_to_target(struct client_obd *cli, __u64 target_bytes) static int osc_should_shrink_grant(struct client_obd *client) { - cfs_time_t time = cfs_time_current(); - cfs_time_t next_shrink = client->cl_next_shrink_grant; + unsigned long time = cfs_time_current(); + unsigned long next_shrink = client->cl_next_shrink_grant; if ((client->cl_import->imp_connect_data.ocd_connect_flags & OBD_CONNECT_GRANT_SHRINK) == 0) diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index fc96ffbc0a0b..2ea8c5211f7c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -141,10 +141,10 @@ static inline int ptlrpc_next_reconnect(struct obd_import *imp) return cfs_time_shift(obd_timeout); } -cfs_duration_t pinger_check_timeout(cfs_time_t time) +cfs_duration_t pinger_check_timeout(unsigned long time) { struct timeout_item *item; - cfs_time_t timeout = PING_INTERVAL; + unsigned long timeout = PING_INTERVAL; /* The timeout list is a increase order sorted list */ mutex_lock(&pinger_mutex); @@ -244,7 +244,7 @@ static int ptlrpc_pinger_main(void *arg) /* And now, loop forever, pinging as needed. */ while (1) { - cfs_time_t this_ping = cfs_time_current(); + unsigned long this_ping = cfs_time_current(); struct l_wait_info lwi; cfs_duration_t time_to_next_wake; struct timeout_item *item; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c index 8fba69e380ef..58ba2457fcf6 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c @@ -113,7 +113,7 @@ static struct ptlrpc_enc_page_pool { unsigned long epp_st_missings; /* # of cache missing */ unsigned long epp_st_lowfree; /* lowest free pages reached */ unsigned int epp_st_max_wqlen; /* highest waitqueue length */ - cfs_time_t epp_st_max_wait; /* in jiffies */ + unsigned long epp_st_max_wait; /* in jiffies */ /* * pointers to pools */ @@ -498,7 +498,7 @@ int sptlrpc_enc_pool_get_pages(struct ptlrpc_bulk_desc *desc) { wait_queue_t waitlink; unsigned long this_idle = -1; - cfs_time_t tick = 0; + unsigned long tick = 0; long now; int p_idx, g_idx; int i; -- cgit From 82173c6292f4d71a96669ad50f5eecccb1fdf4a2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:31:18 -0700 Subject: staging: lustre: remove cfs_time_beforeq wrapper Use time_before_eq() call instead. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/libcfs_time.h | 2 +- drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h | 5 ----- drivers/staging/lustre/lustre/include/lustre_capa.h | 2 +- drivers/staging/lustre/lustre/llite/llite_capa.c | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 73c51e2fae75..85cfb76d5f03 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -60,7 +60,7 @@ static inline int cfs_time_after(unsigned long t1, unsigned long t2) static inline int cfs_time_aftereq(unsigned long t1, unsigned long t2) { - return cfs_time_beforeq(t2, t1); + return time_before_eq(t2, t1); } static inline unsigned long cfs_time_shift(int seconds) diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index cf29fc8213ba..96a99b1713b3 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -114,11 +114,6 @@ static inline int cfs_time_before(unsigned long t1, unsigned long t2) return time_before(t1, t2); } -static inline int cfs_time_beforeq(unsigned long t1, unsigned long t2) -{ - return time_before_eq(t1, t2); -} - static inline unsigned long cfs_time_current(void) { return jiffies; diff --git a/drivers/staging/lustre/lustre/include/lustre_capa.h b/drivers/staging/lustre/lustre/include/lustre_capa.h index 37bd07865e4d..08f24bdd3071 100644 --- a/drivers/staging/lustre/lustre/include/lustre_capa.h +++ b/drivers/staging/lustre/lustre/include/lustre_capa.h @@ -279,7 +279,7 @@ static inline int capa_is_expired_sec(struct lustre_capa *capa) static inline int capa_is_expired(struct obd_capa *ocapa) { - return cfs_time_beforeq(ocapa->c_expiry, cfs_time_current()); + return time_before_eq(ocapa->c_expiry, cfs_time_current()); } static inline int capa_opc_supported(struct lustre_capa *capa, __u64 opc) diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 0bf8400536bf..2ec55bb4c8d1 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -88,7 +88,7 @@ static inline unsigned long capa_renewal_time(struct obd_capa *ocapa) static inline int capa_is_to_expire(struct obd_capa *ocapa) { - return cfs_time_beforeq(capa_renewal_time(ocapa), cfs_time_current()); + return time_before_eq(capa_renewal_time(ocapa), cfs_time_current()); } static inline int have_expired_capa(void) -- cgit From 7264b8a5db30b717b39394234fd3bb7dabdbda92 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:38:48 -0700 Subject: staging: lustre: remove cfs_time_current_sec wrapper Just call get_seconds() directly. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/linux-time.h | 5 ---- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 4 +-- drivers/staging/lustre/lnet/lnet/api-ni.c | 2 +- drivers/staging/lustre/lnet/lnet/config.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-move.c | 4 +-- drivers/staging/lustre/lnet/lnet/router.c | 4 +-- drivers/staging/lustre/lnet/lnet/router_proc.c | 2 +- drivers/staging/lustre/lnet/selftest/conctl.c | 2 +- drivers/staging/lustre/lnet/selftest/conrpc.c | 6 ++-- drivers/staging/lustre/lnet/selftest/console.c | 2 +- drivers/staging/lustre/lnet/selftest/framework.c | 2 +- drivers/staging/lustre/lnet/selftest/rpc.c | 8 +++--- drivers/staging/lustre/lnet/selftest/timer.c | 6 ++-- .../staging/lustre/lustre/include/lustre_capa.h | 4 +-- .../staging/lustre/lustre/include/lustre_export.h | 2 +- .../staging/lustre/lustre/include/lustre_import.h | 2 +- drivers/staging/lustre/lustre/include/lustre_net.h | 10 +++---- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 18 ++++++------ drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 8 +++--- drivers/staging/lustre/lustre/libcfs/debug.c | 2 +- .../staging/lustre/lustre/libcfs/upcall_cache.c | 2 +- drivers/staging/lustre/lustre/llite/llite_lib.c | 4 +-- drivers/staging/lustre/lustre/mdc/mdc_locks.c | 2 +- drivers/staging/lustre/lustre/mdc/mdc_reint.c | 2 +- drivers/staging/lustre/lustre/mdc/mdc_request.c | 2 +- drivers/staging/lustre/lustre/obdclass/genops.c | 2 +- drivers/staging/lustre/lustre/obdclass/llog.c | 2 +- .../lustre/lustre/obdclass/lprocfs_status.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 6 ++-- drivers/staging/lustre/lustre/ptlrpc/client.c | 22 +++++++-------- drivers/staging/lustre/lustre/ptlrpc/events.c | 4 +-- drivers/staging/lustre/lustre/ptlrpc/import.c | 6 ++-- .../staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 8 +++--- drivers/staging/lustre/lustre/ptlrpc/pinger.c | 6 ++-- drivers/staging/lustre/lustre/ptlrpc/sec.c | 16 +++++------ drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 18 ++++++------ drivers/staging/lustre/lustre/ptlrpc/sec_config.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec_gc.c | 6 ++-- drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/service.c | 32 +++++++++++----------- 43 files changed, 121 insertions(+), 126 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 96a99b1713b3..0768ecb13f88 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -119,11 +119,6 @@ static inline unsigned long cfs_time_current(void) return jiffies; } -static inline time_t cfs_time_current_sec(void) -{ - return get_seconds(); -} - static inline void cfs_fs_time_current(struct timespec *t) { *t = CURRENT_TIME; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index c23ffbac3b6d..443318ed7265 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -2445,7 +2445,7 @@ ksocknal_base_startup(void) ksocknal_data.ksnd_connd_starting = 0; ksocknal_data.ksnd_connd_failed_stamp = 0; - ksocknal_data.ksnd_connd_starting_stamp = cfs_time_current_sec(); + ksocknal_data.ksnd_connd_starting_stamp = get_seconds(); /* must have at least 2 connds to remain responsive to accepts while * connecting */ if (*ksocknal_tunables.ksnd_nconnds < SOCKNAL_CONND_RESV + 1) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 25bd5161aeba..b341c630c44a 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -2059,7 +2059,7 @@ ksocknal_connd_check_start(long sec, long *timeout) /* we tried ... */ LASSERT(ksocknal_data.ksnd_connd_starting > 0); ksocknal_data.ksnd_connd_starting--; - ksocknal_data.ksnd_connd_failed_stamp = cfs_time_current_sec(); + ksocknal_data.ksnd_connd_failed_stamp = get_seconds(); return 1; } @@ -2152,7 +2152,7 @@ ksocknal_connd (void *arg) while (!ksocknal_data.ksnd_shuttingdown) { ksock_route_t *route = NULL; - long sec = cfs_time_current_sec(); + long sec = get_seconds(); long timeout = MAX_SCHEDULE_TIMEOUT; int dropped_lock = 0; diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index 8aa57c99116d..d6236ea83b8e 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -1452,7 +1452,7 @@ LNetCtl(unsigned int cmd, void *arg) case IOC_LIBCFS_NOTIFY_ROUTER: return lnet_notify(NULL, data->ioc_nid, data->ioc_flags, cfs_time_current() - - cfs_time_seconds(cfs_time_current_sec() - + cfs_time_seconds(get_seconds() - (time_t)data->ioc_u64[0])); case IOC_LIBCFS_PORTALS_COMPATIBILITY: diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c index d39bc4371596..7c8b9476bfbb 100644 --- a/drivers/staging/lustre/lnet/lnet/config.c +++ b/drivers/staging/lustre/lnet/lnet/config.c @@ -166,7 +166,7 @@ lnet_ni_alloc(__u32 net, struct cfs_expr_list *el, struct list_head *nilist) /* LND will fill in the address part of the NID */ ni->ni_nid = LNET_MKNID(net, 0); - ni->ni_last_alive = cfs_time_current_sec(); + ni->ni_last_alive = get_seconds(); list_add_tail(&ni->ni_list, nilist); return ni; failed: diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index 4a63516a26dd..45412a5444c2 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -1780,11 +1780,11 @@ lnet_parse(lnet_ni_t *ni, lnet_hdr_t *hdr, lnet_nid_t from_nid, } if (the_lnet.ln_routing && - ni->ni_last_alive != cfs_time_current_sec()) { + ni->ni_last_alive != get_seconds()) { lnet_ni_lock(ni); /* NB: so far here is the only place to set NI status to "up */ - ni->ni_last_alive = cfs_time_current_sec(); + ni->ni_last_alive = get_seconds(); if (ni->ni_status != NULL && ni->ni_status->ns_status == LNET_NI_STATUS_DOWN) ni->ni_status->ns_status = LNET_NI_STATUS_UP; diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 18965b92235d..6b19f8707c47 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -796,7 +796,7 @@ lnet_update_ni_status_locked(void) timeout = router_ping_timeout + MAX(live_router_check_interval, dead_router_check_interval); - now = cfs_time_current_sec(); + now = get_seconds(); list_for_each_entry(ni, &the_lnet.ln_nis, ni_list) { if (ni->ni_lnd->lnd_type == LOLND) continue; @@ -1587,7 +1587,7 @@ lnet_router_checker (void) static time_t last = 0; static int running = 0; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); int interval = now - last; int rc; __u64 version; diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 7e78807c0093..fcf3b0453386 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -675,7 +675,7 @@ int LL_PROC_PROTO(proc_lnet_nis) if (ni != NULL) { struct lnet_tx_queue *tq; char *stat; - long now = cfs_time_current_sec(); + long now = get_seconds(); int last_alive = -1; int i; int j; diff --git a/drivers/staging/lustre/lnet/selftest/conctl.c b/drivers/staging/lustre/lnet/selftest/conctl.c index 3df1a0d85443..ae7b0fcd818d 100644 --- a/drivers/staging/lustre/lnet/selftest/conctl.c +++ b/drivers/staging/lustre/lnet/selftest/conctl.c @@ -837,7 +837,7 @@ lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_data *data) mutex_lock(&console_session.ses_mutex); - console_session.ses_laststamp = cfs_time_current_sec(); + console_session.ses_laststamp = get_seconds(); if (console_session.ses_shutdown) { rc = -ESHUTDOWN; diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.c b/drivers/staging/lustre/lnet/selftest/conrpc.c index abc9b8c59d5d..6d9c45acdaa3 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.c +++ b/drivers/staging/lustre/lnet/selftest/conrpc.c @@ -1187,7 +1187,7 @@ lstcon_rpc_pinger(void *arg) } if (!console_session.ses_expired && - cfs_time_current_sec() - console_session.ses_laststamp > + get_seconds() - console_session.ses_laststamp > (time_t)console_session.ses_timeout) console_session.ses_expired = 1; @@ -1274,7 +1274,7 @@ lstcon_rpc_pinger(void *arg) CDEBUG(D_NET, "Ping %d nodes in session\n", count); - ptimer->stt_expires = (unsigned long)(cfs_time_current_sec() + LST_PING_INTERVAL); + ptimer->stt_expires = (unsigned long)(get_seconds() + LST_PING_INTERVAL); stt_add_timer(ptimer); mutex_unlock(&console_session.ses_mutex); @@ -1297,7 +1297,7 @@ lstcon_rpc_pinger_start(void) } ptimer = &console_session.ses_ping_timer; - ptimer->stt_expires = (unsigned long)(cfs_time_current_sec() + LST_PING_INTERVAL); + ptimer->stt_expires = (unsigned long)(get_seconds() + LST_PING_INTERVAL); stt_add_timer(ptimer); diff --git a/drivers/staging/lustre/lnet/selftest/console.c b/drivers/staging/lustre/lnet/selftest/console.c index 01670a6fbaeb..89e1b4bd5a50 100644 --- a/drivers/staging/lustre/lnet/selftest/console.c +++ b/drivers/staging/lustre/lnet/selftest/console.c @@ -2006,7 +2006,7 @@ lstcon_console_init(void) console_session.ses_expired = 0; console_session.ses_feats_updated = 0; console_session.ses_features = LST_FEATS_MASK; - console_session.ses_laststamp = cfs_time_current_sec(); + console_session.ses_laststamp = get_seconds(); mutex_init(&console_session.ses_mutex); diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c index b2b63e93cc50..aef0041973b8 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c @@ -171,7 +171,7 @@ sfw_add_session_timer (void) sn->sn_timer_active = 1; timer->stt_expires = cfs_time_add(sn->sn_timeout, - cfs_time_current_sec()); + get_seconds()); stt_add_timer(timer); return; } diff --git a/drivers/staging/lustre/lnet/selftest/rpc.c b/drivers/staging/lustre/lnet/selftest/rpc.c index 9fc0429e8296..dbbbf0cab8e3 100644 --- a/drivers/staging/lustre/lnet/selftest/rpc.c +++ b/drivers/staging/lustre/lnet/selftest/rpc.c @@ -563,7 +563,7 @@ srpc_add_buffer(struct swi_workitem *wi) } if (rc != 0) { - scd->scd_buf_err_stamp = cfs_time_current_sec(); + scd->scd_buf_err_stamp = get_seconds(); scd->scd_buf_err = rc; LASSERT(scd->scd_buf_posting > 0); @@ -1098,7 +1098,7 @@ srpc_add_client_rpc_timer (srpc_client_rpc_t *rpc) timer->stt_data = rpc; timer->stt_func = srpc_client_rpc_expired; timer->stt_expires = cfs_time_add(rpc->crpc_timeout, - cfs_time_current_sec()); + get_seconds()); stt_add_timer(timer); return; } @@ -1481,7 +1481,7 @@ srpc_lnet_ev_handler(lnet_event_t *ev) } if (scd->scd_buf_err_stamp != 0 && - scd->scd_buf_err_stamp < cfs_time_current_sec()) { + scd->scd_buf_err_stamp < get_seconds()) { /* re-enable adding buffer */ scd->scd_buf_err_stamp = 0; scd->scd_buf_err = 0; @@ -1587,7 +1587,7 @@ srpc_startup (void) /* 1 second pause to avoid timestamp reuse */ set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(cfs_time_seconds(1)); - srpc_data.rpc_matchbits = ((__u64) cfs_time_current_sec()) << 48; + srpc_data.rpc_matchbits = ((__u64) get_seconds()) << 48; srpc_data.rpc_state = SRPC_STATE_NONE; diff --git a/drivers/staging/lustre/lnet/selftest/timer.c b/drivers/staging/lustre/lnet/selftest/timer.c index 61a55b3d9bfc..91d4caa4edb0 100644 --- a/drivers/staging/lustre/lnet/selftest/timer.c +++ b/drivers/staging/lustre/lnet/selftest/timer.c @@ -78,7 +78,7 @@ stt_add_timer(stt_timer_t *timer) LASSERT(!stt_data.stt_shuttingdown); LASSERT(timer->stt_func != NULL); LASSERT(list_empty(&timer->stt_list)); - LASSERT(cfs_time_after(timer->stt_expires, cfs_time_current_sec())); + LASSERT(cfs_time_after(timer->stt_expires, get_seconds())); /* a simple insertion sort */ list_for_each_prev(pos, STTIMER_SLOT(timer->stt_expires)) { @@ -152,7 +152,7 @@ stt_check_timers(unsigned long *last) unsigned long now; unsigned long this_slot; - now = cfs_time_current_sec(); + now = get_seconds(); this_slot = now & STTIMER_SLOTTIMEMASK; spin_lock(&stt_data.stt_lock); @@ -212,7 +212,7 @@ stt_startup(void) int i; stt_data.stt_shuttingdown = 0; - stt_data.stt_prev_slot = cfs_time_current_sec() & STTIMER_SLOTTIMEMASK; + stt_data.stt_prev_slot = get_seconds() & STTIMER_SLOTTIMEMASK; spin_lock_init(&stt_data.stt_lock); for (i = 0; i < STTIMER_NSLOTS; i++) diff --git a/drivers/staging/lustre/lustre/include/lustre_capa.h b/drivers/staging/lustre/lustre/include/lustre_capa.h index 08f24bdd3071..3346ee9d43cd 100644 --- a/drivers/staging/lustre/lustre/include/lustre_capa.h +++ b/drivers/staging/lustre/lustre/include/lustre_capa.h @@ -267,14 +267,14 @@ static inline __u64 capa_open_opc(int mode) static inline void set_capa_expiry(struct obd_capa *ocapa) { unsigned long expiry = cfs_time_sub((unsigned long)ocapa->c_capa.lc_expiry, - cfs_time_current_sec()); + get_seconds()); ocapa->c_expiry = cfs_time_add(cfs_time_current(), cfs_time_seconds(expiry)); } static inline int capa_is_expired_sec(struct lustre_capa *capa) { - return (capa->lc_expiry - cfs_time_current_sec() <= 0); + return (capa->lc_expiry - get_seconds() <= 0); } static inline int capa_is_expired(struct obd_capa *ocapa) diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index a5f420145355..fe2120e3c6d2 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -298,7 +298,7 @@ static inline int exp_expired(struct obd_export *exp, cfs_duration_t age) { LASSERT(exp->exp_delayed); return cfs_time_before(cfs_time_add(exp->exp_last_request_time, age), - cfs_time_current_sec()); + get_seconds()); } static inline int exp_connect_cancelset(struct obd_export *exp) diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 037af2583513..8304a55b92f9 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -350,7 +350,7 @@ static inline void at_reset(struct adaptive_timeout *at, int val) { spin_lock(&at->at_lock); at->at_current = val; at->at_worst_ever = val; - at->at_worst_time = cfs_time_current_sec(); + at->at_worst_time = get_seconds(); spin_unlock(&at->at_lock); } static inline void at_init(struct adaptive_timeout *at, int val, int flags) { diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index 60141545aea2..689e6249f313 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -2594,7 +2594,7 @@ static inline int ptlrpc_client_bulk_active(struct ptlrpc_request *req) desc = req->rq_bulk; if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_BULK_UNLINK) && - req->rq_bulk_deadline > cfs_time_current_sec()) + req->rq_bulk_deadline > get_seconds()) return 1; if (!desc) @@ -3002,7 +3002,7 @@ static inline int ptlrpc_client_early(struct ptlrpc_request *req) { if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) && - req->rq_reply_deadline > cfs_time_current_sec()) + req->rq_reply_deadline > get_seconds()) return 0; return req->rq_early; } @@ -3014,7 +3014,7 @@ static inline int ptlrpc_client_replied(struct ptlrpc_request *req) { if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) && - req->rq_reply_deadline > cfs_time_current_sec()) + req->rq_reply_deadline > get_seconds()) return 0; return req->rq_replied; } @@ -3024,7 +3024,7 @@ static inline int ptlrpc_client_recv(struct ptlrpc_request *req) { if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) && - req->rq_reply_deadline > cfs_time_current_sec()) + req->rq_reply_deadline > get_seconds()) return 1; return req->rq_receiving_reply; } @@ -3036,7 +3036,7 @@ ptlrpc_client_recv_or_unlink(struct ptlrpc_request *req) spin_lock(&req->rq_lock); if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) && - req->rq_reply_deadline > cfs_time_current_sec()) { + req->rq_reply_deadline > get_seconds()) { spin_unlock(&req->rq_lock); return 1; } diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index cf71deb3f4ce..68f030ba4a61 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -1594,7 +1594,7 @@ ldlm_error_t ldlm_lock_enqueue(struct ldlm_namespace *ns, ldlm_error_t rc = ELDLM_OK; struct ldlm_interval *node = NULL; - lock->l_last_activity = cfs_time_current_sec(); + lock->l_last_activity = get_seconds(); /* policies are not executed on the client or during replay */ if ((*flags & (LDLM_FL_HAS_INTENT|LDLM_FL_REPLAY)) == LDLM_FL_HAS_INTENT && !local && ns->ns_policy) { diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index d3d1a397489b..ec8cd52066e9 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -334,12 +334,12 @@ static int ldlm_srv_pool_recalc(struct ldlm_pool *pl) { time_t recalc_interval_sec; - recalc_interval_sec = cfs_time_current_sec() - pl->pl_recalc_time; + recalc_interval_sec = get_seconds() - pl->pl_recalc_time; if (recalc_interval_sec < pl->pl_recalc_period) return 0; spin_lock(&pl->pl_lock); - recalc_interval_sec = cfs_time_current_sec() - pl->pl_recalc_time; + recalc_interval_sec = get_seconds() - pl->pl_recalc_time; if (recalc_interval_sec < pl->pl_recalc_period) { spin_unlock(&pl->pl_lock); return 0; @@ -360,7 +360,7 @@ static int ldlm_srv_pool_recalc(struct ldlm_pool *pl) */ ldlm_pool_recalc_grant_plan(pl); - pl->pl_recalc_time = cfs_time_current_sec(); + pl->pl_recalc_time = get_seconds(); lprocfs_counter_add(pl->pl_stats, LDLM_POOL_TIMING_STAT, recalc_interval_sec); spin_unlock(&pl->pl_lock); @@ -471,7 +471,7 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) { time_t recalc_interval_sec; - recalc_interval_sec = cfs_time_current_sec() - pl->pl_recalc_time; + recalc_interval_sec = get_seconds() - pl->pl_recalc_time; if (recalc_interval_sec < pl->pl_recalc_period) return 0; @@ -479,7 +479,7 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) /* * Check if we need to recalc lists now. */ - recalc_interval_sec = cfs_time_current_sec() - pl->pl_recalc_time; + recalc_interval_sec = get_seconds() - pl->pl_recalc_time; if (recalc_interval_sec < pl->pl_recalc_period) { spin_unlock(&pl->pl_lock); return 0; @@ -490,7 +490,7 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) */ ldlm_cli_pool_pop_slv(pl); - pl->pl_recalc_time = cfs_time_current_sec(); + pl->pl_recalc_time = get_seconds(); lprocfs_counter_add(pl->pl_stats, LDLM_POOL_TIMING_STAT, recalc_interval_sec); spin_unlock(&pl->pl_lock); @@ -564,7 +564,7 @@ int ldlm_pool_recalc(struct ldlm_pool *pl) time_t recalc_interval_sec; int count; - recalc_interval_sec = cfs_time_current_sec() - pl->pl_recalc_time; + recalc_interval_sec = get_seconds() - pl->pl_recalc_time; if (recalc_interval_sec <= 0) goto recalc; @@ -589,7 +589,7 @@ int ldlm_pool_recalc(struct ldlm_pool *pl) lprocfs_counter_add(pl->pl_stats, LDLM_POOL_RECALC_STAT, count); } - recalc_interval_sec = pl->pl_recalc_time - cfs_time_current_sec() + + recalc_interval_sec = pl->pl_recalc_time - get_seconds() + pl->pl_recalc_period; return recalc_interval_sec; @@ -837,7 +837,7 @@ int ldlm_pool_init(struct ldlm_pool *pl, struct ldlm_namespace *ns, spin_lock_init(&pl->pl_lock); atomic_set(&pl->pl_granted, 0); - pl->pl_recalc_time = cfs_time_current_sec(); + pl->pl_recalc_time = get_seconds(); atomic_set(&pl->pl_lock_volume_factor, 1); atomic_set(&pl->pl_grant_rate, 0); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 5871fe4eb389..14b80a8d1cd5 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -100,13 +100,13 @@ int ldlm_expired_completion_wait(void *data) LCONSOLE_WARN("lock timed out (enqueued at "CFS_TIME_T", " CFS_DURATION_T"s ago)\n", lock->l_last_activity, - cfs_time_sub(cfs_time_current_sec(), + cfs_time_sub(get_seconds(), lock->l_last_activity)); LDLM_DEBUG(lock, "lock timed out (enqueued at "CFS_TIME_T", " CFS_DURATION_T"s ago); not entering recovery in " "server code, just going back to sleep", lock->l_last_activity, - cfs_time_sub(cfs_time_current_sec(), + cfs_time_sub(get_seconds(), lock->l_last_activity)); if (cfs_time_after(cfs_time_current(), next_dump)) { last_dump = next_dump; @@ -125,7 +125,7 @@ int ldlm_expired_completion_wait(void *data) LDLM_ERROR(lock, "lock timed out (enqueued at "CFS_TIME_T", " CFS_DURATION_T"s ago), entering recovery for %s@%s", lock->l_last_activity, - cfs_time_sub(cfs_time_current_sec(), lock->l_last_activity), + cfs_time_sub(get_seconds(), lock->l_last_activity), obd2cli_tgt(obd), imp->imp_connection->c_remote_uuid.uuid); return 0; @@ -160,7 +160,7 @@ static int ldlm_completion_tail(struct ldlm_lock *lock) LDLM_DEBUG(lock, "client-side enqueue: destroyed"); result = -EIO; } else { - delay = cfs_time_sub(cfs_time_current_sec(), + delay = cfs_time_sub(get_seconds(), lock->l_last_activity); LDLM_DEBUG(lock, "client-side enqueue: granted after " CFS_DURATION_T"s", delay); diff --git a/drivers/staging/lustre/lustre/libcfs/debug.c b/drivers/staging/lustre/lustre/libcfs/debug.c index 2373ccdba9b3..5765cbb185e0 100644 --- a/drivers/staging/lustre/lustre/libcfs/debug.c +++ b/drivers/staging/lustre/lustre/libcfs/debug.c @@ -343,7 +343,7 @@ void libcfs_debug_dumplog_internal(void *arg) if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0) { snprintf(debug_file_name, sizeof(debug_file_name) - 1, "%s.%ld." LPLD, libcfs_debug_file_path_arr, - cfs_time_current_sec(), (long_ptr_t)arg); + get_seconds(), (long_ptr_t)arg); printk(KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); cfs_tracefile_dump_all_pages(debug_file_name); diff --git a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c index ab5c763aed94..ab3a1b4c3d30 100644 --- a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c +++ b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c @@ -406,7 +406,7 @@ void upcall_cache_flush_one(struct upcall_cache *cache, __u64 key, void *args) "cur %lu, ex %ld/%ld\n", cache->uc_name, entry, entry->ue_key, atomic_read(&entry->ue_refcount), entry->ue_flags, - cfs_time_current_sec(), entry->ue_acquire_expire, + get_seconds(), entry->ue_acquire_expire, entry->ue_expire); UC_CACHE_SET_EXPIRED(entry); if (!atomic_read(&entry->ue_refcount)) diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index 5e96e4239a03..1f58a054569d 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -1412,7 +1412,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) if (attr->ia_valid & (ATTR_MTIME | ATTR_CTIME)) CDEBUG(D_INODE, "setting mtime %lu, ctime %lu, now = %lu\n", LTIME_S(attr->ia_mtime), LTIME_S(attr->ia_ctime), - cfs_time_current_sec()); + get_seconds()); /* If we are changing file size, file content is modified, flag it. */ if (attr->ia_valid & ATTR_SIZE) { @@ -2247,7 +2247,7 @@ struct md_op_data * ll_prep_md_op_data(struct md_op_data *op_data, op_data->op_name = name; op_data->op_namelen = namelen; op_data->op_mode = mode; - op_data->op_mod_time = cfs_time_current_sec(); + op_data->op_mod_time = get_seconds(); op_data->op_fsuid = from_kuid(&init_user_ns, current_fsuid()); op_data->op_fsgid = from_kgid(&init_user_ns, current_fsgid()); op_data->op_cap = cfs_curproc_cap_pack(); diff --git a/drivers/staging/lustre/lustre/mdc/mdc_locks.c b/drivers/staging/lustre/lustre/mdc/mdc_locks.c index 35663705b097..71219b90e22b 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_locks.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_locks.c @@ -860,7 +860,7 @@ resend: if (resends) { req->rq_generation_set = 1; req->rq_import_generation = generation; - req->rq_sent = cfs_time_current_sec() + resends; + req->rq_sent = get_seconds() + resends; } /* It is important to obtain rpc_lock first (if applicable), so that diff --git a/drivers/staging/lustre/lustre/mdc/mdc_reint.c b/drivers/staging/lustre/lustre/mdc/mdc_reint.c index 1a909ac84332..c5420a42bc33 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_reint.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_reint.c @@ -273,7 +273,7 @@ rebuild: if (resends) { req->rq_generation_set = 1; req->rq_import_generation = generation; - req->rq_sent = cfs_time_current_sec() + resends; + req->rq_sent = get_seconds() + resends; } level = LUSTRE_IMP_FULL; resend: diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index 6ffcd32d58e4..fb9d30eddaba 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -397,7 +397,7 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt, rec->sx_suppgid2 = -1; rec->sx_fid = *fid; rec->sx_valid = valid | OBD_MD_FLCTIME; - rec->sx_time = cfs_time_current_sec(); + rec->sx_time = get_seconds(); rec->sx_size = output_size; rec->sx_flags = flags; diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index c5e847abb28e..b32578604c1c 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -842,7 +842,7 @@ struct obd_export *class_new_export(struct obd_device *obd, INIT_LIST_HEAD(&export->exp_handle.h_link); INIT_LIST_HEAD(&export->exp_hp_rpcs); class_handle_hash(&export->exp_handle, &export_handle_ops); - export->exp_last_request_time = cfs_time_current_sec(); + export->exp_last_request_time = get_seconds(); spin_lock_init(&export->exp_lock); spin_lock_init(&export->exp_rpc_lock); INIT_HLIST_NODE(&export->exp_uuid_hash); diff --git a/drivers/staging/lustre/lustre/obdclass/llog.c b/drivers/staging/lustre/lustre/obdclass/llog.c index bb4a9998a9d6..cce86890c563 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog.c +++ b/drivers/staging/lustre/lustre/obdclass/llog.c @@ -188,7 +188,7 @@ static int llog_read_header(const struct lu_env *env, llh->llh_hdr.lrh_type = LLOG_HDR_MAGIC; llh->llh_hdr.lrh_len = llh->llh_tail.lrt_len = LLOG_CHUNK_SIZE; llh->llh_hdr.lrh_index = llh->llh_tail.lrt_index = 0; - llh->llh_timestamp = cfs_time_current_sec(); + llh->llh_timestamp = get_seconds(); if (uuid) memcpy(&llh->llh_tgtuuid, uuid, sizeof(llh->llh_tgtuuid)); diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 925af9f5ec55..842c06e44261 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -868,7 +868,7 @@ int lprocfs_rd_timeouts(struct seq_file *m, void *data) LPROCFS_CLIMP_CHECK(obd); imp = obd->u.cli.cl_import; - now = cfs_time_current_sec(); + now = get_seconds(); /* Some network health info for kicks */ s2dhms(&ts, now - imp->imp_last_reply_time); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index ed8953379418..6fe43c164ea2 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -1639,7 +1639,7 @@ restart_bulk: if (resends) { req->rq_generation_set = 1; req->rq_import_generation = generation; - req->rq_sent = cfs_time_current_sec() + resends; + req->rq_sent = get_seconds() + resends; } rc = ptlrpc_queue_wait(req); @@ -1722,9 +1722,9 @@ static int osc_brw_redo_request(struct ptlrpc_request *request, /* cap resend delay to the current request timeout, this is similar to * what ptlrpc does (see after_reply()) */ if (aa->aa_resends > new_req->rq_timeout) - new_req->rq_sent = cfs_time_current_sec() + new_req->rq_timeout; + new_req->rq_sent = get_seconds() + new_req->rq_timeout; else - new_req->rq_sent = cfs_time_current_sec() + aa->aa_resends; + new_req->rq_sent = get_seconds() + aa->aa_resends; new_req->rq_generation_set = 1; new_req->rq_import_generation = request->rq_import_generation; diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 612e9fe6ce0b..1a1f87e7502a 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -283,7 +283,7 @@ static void ptlrpc_at_adj_net_latency(struct ptlrpc_request *req, { unsigned int nl, oldnl; struct imp_at *at; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); LASSERT(req->rq_import); at = &req->rq_import->imp_at; @@ -367,13 +367,13 @@ static int ptlrpc_at_recv_early_reply(struct ptlrpc_request *req) olddl = req->rq_deadline; /* server assumes it now has rq_timeout from when it sent the * early reply, so client should give it at least that long. */ - req->rq_deadline = cfs_time_current_sec() + req->rq_timeout + + req->rq_deadline = get_seconds() + req->rq_timeout + ptlrpc_at_get_net_latency(req); DEBUG_REQ(D_ADAPTTO, req, "Early reply #%d, new deadline in "CFS_DURATION_T"s " "("CFS_DURATION_T"s)", req->rq_early_count, - cfs_time_sub(req->rq_deadline, cfs_time_current_sec()), + cfs_time_sub(req->rq_deadline, get_seconds()), cfs_time_sub(req->rq_deadline, olddl)); return rc; @@ -1248,7 +1248,7 @@ static int after_reply(struct ptlrpc_request *req) /* retry indefinitely on EINPROGRESS */ if (lustre_msg_get_status(req->rq_repmsg) == -EINPROGRESS && ptlrpc_no_resend(req) == 0 && !req->rq_no_retry_einprogress) { - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); DEBUG_REQ(D_RPCTRACE, req, "Resending request on EINPROGRESS"); req->rq_resend = 1; @@ -1395,7 +1395,7 @@ static int ptlrpc_send_new_req(struct ptlrpc_request *req) int rc; LASSERT(req->rq_phase == RQ_PHASE_NEW); - if (req->rq_sent && (req->rq_sent > cfs_time_current_sec()) && + if (req->rq_sent && (req->rq_sent > get_seconds()) && (!req->rq_generation_set || req->rq_import_generation == imp->imp_generation)) return 0; @@ -1534,7 +1534,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) /* delayed resend - skip */ if (req->rq_phase == RQ_PHASE_RPC && req->rq_resend && - req->rq_sent > cfs_time_current_sec()) + req->rq_sent > get_seconds()) continue; if (!(req->rq_phase == RQ_PHASE_RPC || @@ -1955,7 +1955,7 @@ int ptlrpc_expired_set(void *data) { struct ptlrpc_request_set *set = data; struct list_head *tmp; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); LASSERT(set != NULL); @@ -2038,7 +2038,7 @@ EXPORT_SYMBOL(ptlrpc_interrupted_set); int ptlrpc_set_next_timeout(struct ptlrpc_request_set *set) { struct list_head *tmp; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); int timeout = 0; struct ptlrpc_request *req; int deadline; @@ -2356,7 +2356,7 @@ int ptlrpc_unregister_reply(struct ptlrpc_request *request, int async) */ if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) && async && request->rq_reply_deadline == 0) - request->rq_reply_deadline = cfs_time_current_sec()+LONG_UNLINK; + request->rq_reply_deadline = get_seconds()+LONG_UNLINK; /* * Nothing left to do. @@ -2927,7 +2927,7 @@ static spinlock_t ptlrpc_last_xid_lock; #define YEAR_2004 (1ULL << 30) void ptlrpc_init_xid(void) { - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); spin_lock_init(&ptlrpc_last_xid_lock); if (now < YEAR_2004) { @@ -3016,7 +3016,7 @@ static void ptlrpcd_add_work_req(struct ptlrpc_request *req) { /* re-initialize the req */ req->rq_timeout = obd_timeout; - req->rq_sent = cfs_time_current_sec(); + req->rq_sent = get_seconds(); req->rq_deadline = req->rq_sent + req->rq_timeout; req->rq_reply_deadline = req->rq_deadline; req->rq_phase = RQ_PHASE_INTERPRET; diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index 5a2984e063d7..0c9907887a62 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -64,7 +64,7 @@ void request_out_callback(lnet_event_t *ev) sptlrpc_request_out_callback(req); spin_lock(&req->rq_lock); - req->rq_real_sent = cfs_time_current_sec(); + req->rq_real_sent = get_seconds(); if (ev->unlinked) req->rq_req_unlink = 0; @@ -158,7 +158,7 @@ void reply_in_callback(lnet_event_t *ev) ev->mlength, ev->offset, req->rq_replen); } - req->rq_import->imp_last_reply_time = cfs_time_current_sec(); + req->rq_import->imp_last_reply_time = get_seconds(); out_wake: /* NB don't unlock till after wakeup; req can disappear under us diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index 931e052ede1a..6eb28e6227ec 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -66,7 +66,7 @@ static void __import_set_state(struct obd_import *imp, imp->imp_state = state; imp->imp_state_hist[imp->imp_state_hist_idx].ish_state = state; imp->imp_state_hist[imp->imp_state_hist_idx].ish_time = - cfs_time_current_sec(); + get_seconds(); imp->imp_state_hist_idx = (imp->imp_state_hist_idx + 1) % IMP_STATE_HIST_LEN; } @@ -242,7 +242,7 @@ ptlrpc_inflight_deadline(struct ptlrpc_request *req, time_t now) static unsigned int ptlrpc_inflight_timeout(struct obd_import *imp) { - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); struct list_head *tmp, *n; struct ptlrpc_request *req; unsigned int timeout = 0; @@ -1537,7 +1537,7 @@ extern unsigned int at_min, at_max, at_history; int at_measured(struct adaptive_timeout *at, unsigned int val) { unsigned int old = at->at_current; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); time_t binlimit = max_t(time_t, at_history / AT_BINS, 1); LASSERT(at); diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index de98694e6fd5..9df1921ebbba 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -991,7 +991,7 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n) cur = at_get(&svcpt->scp_at_estimate); worst = svcpt->scp_at_estimate.at_worst_ever; worstt = svcpt->scp_at_estimate.at_worst_time; - s2dhms(&ts, cfs_time_current_sec() - worstt); + s2dhms(&ts, get_seconds() - worstt); seq_printf(m, "%10s : cur %3u worst %3u (at %ld, " DHMS_FMT" ago) ", "service", diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index cf7758a3aedd..e890ed91a886 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -252,7 +252,7 @@ int ptlrpc_unregister_bulk(struct ptlrpc_request *req, int async) /* Let's setup deadline for reply unlink. */ if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_BULK_UNLINK) && async && req->rq_bulk_deadline == 0) - req->rq_bulk_deadline = cfs_time_current_sec() + LONG_UNLINK; + req->rq_bulk_deadline = get_seconds() + LONG_UNLINK; if (ptlrpc_client_bulk_active(req) == 0) /* completed or */ return 1; /* never registered */ @@ -303,7 +303,7 @@ static void ptlrpc_at_set_reply(struct ptlrpc_request *req, int flags) { struct ptlrpc_service_part *svcpt = req->rq_rqbd->rqbd_svcpt; struct ptlrpc_service *svc = svcpt->scp_service; - int service_time = max_t(int, cfs_time_current_sec() - + int service_time = max_t(int, get_seconds() - req->rq_arrival_time.tv_sec, 1); if (!(flags & PTLRPC_REPLY_EARLY) && @@ -422,7 +422,7 @@ int ptlrpc_send_reply(struct ptlrpc_request *req, int flags) if (unlikely(rc)) goto out; - req->rq_sent = cfs_time_current_sec(); + req->rq_sent = get_seconds(); rc = ptl_send_buf(&rs->rs_md_h, rs->rs_repbuf, rs->rs_repdata_len, (rs->rs_difficult && !rs->rs_no_ack) ? @@ -634,7 +634,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) OBD_FAIL_TIMEOUT(OBD_FAIL_PTLRPC_DELAY_SEND, request->rq_timeout + 5); do_gettimeofday(&request->rq_arrival_time); - request->rq_sent = cfs_time_current_sec(); + request->rq_sent = get_seconds(); /* We give the server rq_timeout secs to process the req, and add the network latency for our local timeout. */ request->rq_deadline = request->rq_sent + request->rq_timeout + diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index 2ea8c5211f7c..a13399c75095 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -606,7 +606,7 @@ static int ping_evictor_main(void *arg) obd_evict_list); spin_unlock(&pet_lock); - expire_time = cfs_time_current_sec() - PING_EVICT_TIMEOUT; + expire_time = get_seconds() - PING_EVICT_TIMEOUT; CDEBUG(D_HA, "evicting all exports of obd %s older than %ld\n", obd->obd_name, expire_time); @@ -631,9 +631,9 @@ static int ping_evictor_main(void *arg) obd->obd_name, obd_uuid2str(&exp->exp_client_uuid), obd_export_nid2str(exp), - (long)(cfs_time_current_sec() - + (long)(get_seconds() - exp->exp_last_request_time), - exp, (long)cfs_time_current_sec(), + exp, (long)get_seconds(), (long)expire_time, (long)exp->exp_last_request_time); CDEBUG(D_HA, "Last request was at %ld\n", diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index 61b56633d3c6..ed131b7803c1 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -344,7 +344,7 @@ static int import_sec_check_expire(struct obd_import *imp) spin_lock(&imp->imp_lock); if (imp->imp_sec_expire && - imp->imp_sec_expire < cfs_time_current_sec()) { + imp->imp_sec_expire < get_seconds()) { adapt = 1; imp->imp_sec_expire = 0; } @@ -1774,7 +1774,7 @@ int sptlrpc_target_export_check(struct obd_export *exp, exp->exp_flvr_old[1] = exp->exp_flvr_old[0]; exp->exp_flvr_expire[1] = exp->exp_flvr_expire[0]; exp->exp_flvr_old[0] = exp->exp_flvr; - exp->exp_flvr_expire[0] = cfs_time_current_sec() + + exp->exp_flvr_expire[0] = get_seconds() + EXP_FLVR_UPDATE_EXPIRE; exp->exp_flvr = flavor; @@ -1848,7 +1848,7 @@ int sptlrpc_target_export_check(struct obd_export *exp, } if (exp->exp_flvr_expire[0]) { - if (exp->exp_flvr_expire[0] >= cfs_time_current_sec()) { + if (exp->exp_flvr_expire[0] >= get_seconds()) { if (flavor_allowed(&exp->exp_flvr_old[0], req)) { CDEBUG(D_SEC, "exp %p (%x|%x|%x): match the " "middle one ("CFS_DURATION_T")\n", exp, @@ -1856,7 +1856,7 @@ int sptlrpc_target_export_check(struct obd_export *exp, exp->exp_flvr_old[0].sf_rpc, exp->exp_flvr_old[1].sf_rpc, exp->exp_flvr_expire[0] - - cfs_time_current_sec()); + get_seconds()); spin_unlock(&exp->exp_lock); return 0; } @@ -1873,7 +1873,7 @@ int sptlrpc_target_export_check(struct obd_export *exp, /* now it doesn't match the current flavor, the only chance we can * accept it is match the old flavors which is not expired. */ if (exp->exp_flvr_changed == 0 && exp->exp_flvr_expire[1]) { - if (exp->exp_flvr_expire[1] >= cfs_time_current_sec()) { + if (exp->exp_flvr_expire[1] >= get_seconds()) { if (flavor_allowed(&exp->exp_flvr_old[1], req)) { CDEBUG(D_SEC, "exp %p (%x|%x|%x): match the " "oldest one ("CFS_DURATION_T")\n", exp, @@ -1881,7 +1881,7 @@ int sptlrpc_target_export_check(struct obd_export *exp, exp->exp_flvr_old[0].sf_rpc, exp->exp_flvr_old[1].sf_rpc, exp->exp_flvr_expire[1] - - cfs_time_current_sec()); + get_seconds()); spin_unlock(&exp->exp_lock); return 0; } @@ -1911,11 +1911,11 @@ int sptlrpc_target_export_check(struct obd_export *exp, exp->exp_flvr_old[0].sf_rpc, exp->exp_flvr_expire[0] ? (unsigned long) (exp->exp_flvr_expire[0] - - cfs_time_current_sec()) : 0, + get_seconds()) : 0, exp->exp_flvr_old[1].sf_rpc, exp->exp_flvr_expire[1] ? (unsigned long) (exp->exp_flvr_expire[1] - - cfs_time_current_sec()) : 0); + get_seconds()) : 0); return -EACCES; } EXPORT_SYMBOL(sptlrpc_target_export_check); diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c index 58ba2457fcf6..874789b200a3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c @@ -156,8 +156,8 @@ int sptlrpc_proc_enc_pool_seq_show(struct seq_file *m, void *v) page_pools.epp_total_pages, page_pools.epp_free_pages, page_pools.epp_idle_idx, - cfs_time_current_sec() - page_pools.epp_last_shrink, - cfs_time_current_sec() - page_pools.epp_last_access, + get_seconds() - page_pools.epp_last_shrink, + get_seconds() - page_pools.epp_last_access, page_pools.epp_st_max_pages, page_pools.epp_st_grows, page_pools.epp_st_grow_fails, @@ -228,7 +228,7 @@ static unsigned long enc_pools_shrink_count(struct shrinker *s, * if no pool access for a long time, we consider it's fully idle. * a little race here is fine. */ - if (unlikely(cfs_time_current_sec() - page_pools.epp_last_access > + if (unlikely(get_seconds() - page_pools.epp_last_access > CACHE_QUIESCENT_PERIOD)) { spin_lock(&page_pools.epp_lock); page_pools.epp_idle_idx = IDLE_IDX_MAX; @@ -255,7 +255,7 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s, (long)sc->nr_to_scan, page_pools.epp_free_pages); page_pools.epp_st_shrinks++; - page_pools.epp_last_shrink = cfs_time_current_sec(); + page_pools.epp_last_shrink = get_seconds(); } spin_unlock(&page_pools.epp_lock); @@ -263,7 +263,7 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s, * if no pool access for a long time, we consider it's fully idle. * a little race here is fine. */ - if (unlikely(cfs_time_current_sec() - page_pools.epp_last_access > + if (unlikely(get_seconds() - page_pools.epp_last_access > CACHE_QUIESCENT_PERIOD)) { spin_lock(&page_pools.epp_lock); page_pools.epp_idle_idx = IDLE_IDX_MAX; @@ -523,7 +523,7 @@ again: if (tick == 0) tick = cfs_time_current(); - now = cfs_time_current_sec(); + now = get_seconds(); page_pools.epp_st_missings++; page_pools.epp_pages_short += desc->bd_iov_count; @@ -602,7 +602,7 @@ again: this_idle) / (IDLE_IDX_WEIGHT + 1); - page_pools.epp_last_access = cfs_time_current_sec(); + page_pools.epp_last_access = get_seconds(); spin_unlock(&page_pools.epp_lock); return 0; @@ -729,8 +729,8 @@ int sptlrpc_enc_pool_init(void) page_pools.epp_growing = 0; page_pools.epp_idle_idx = 0; - page_pools.epp_last_shrink = cfs_time_current_sec(); - page_pools.epp_last_access = cfs_time_current_sec(); + page_pools.epp_last_shrink = get_seconds(); + page_pools.epp_last_access = get_seconds(); spin_lock_init(&page_pools.epp_lock); page_pools.epp_total_pages = 0; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c index 3cda2bba6fde..01f8b0d6660e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c @@ -918,7 +918,7 @@ void sptlrpc_conf_client_adapt(struct obd_device *obd) if (imp) { spin_lock(&imp->imp_lock); if (imp->imp_sec) - imp->imp_sec_expire = cfs_time_current_sec() + + imp->imp_sec_expire = get_seconds() + SEC_ADAPT_DELAY; spin_unlock(&imp->imp_lock); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c index dab92f14c8b7..c500aff66193 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_gc.c @@ -67,7 +67,7 @@ void sptlrpc_gc_add_sec(struct ptlrpc_sec *sec) LASSERT(sec->ps_gc_interval > 0); LASSERT(list_empty(&sec->ps_gc_list)); - sec->ps_gc_next = cfs_time_current_sec() + sec->ps_gc_interval; + sec->ps_gc_next = get_seconds() + sec->ps_gc_interval; spin_lock(&sec_gc_list_lock); list_add_tail(&sec_gc_list, &sec->ps_gc_list); @@ -152,11 +152,11 @@ static void sec_do_gc(struct ptlrpc_sec *sec) CDEBUG(D_SEC, "check on sec %p(%s)\n", sec, sec->ps_policy->sp_name); - if (cfs_time_after(sec->ps_gc_next, cfs_time_current_sec())) + if (cfs_time_after(sec->ps_gc_next, get_seconds())) return; sec->ps_policy->sp_cops->gc_ctx(sec); - sec->ps_gc_next = cfs_time_current_sec() + sec->ps_gc_interval; + sec->ps_gc_next = get_seconds() + sec->ps_gc_interval; } static int sec_gc_main(void *arg) diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c index fa76f4fb2d44..0d08145a6c7e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_lproc.c @@ -104,7 +104,7 @@ static int sptlrpc_info_lprocfs_seq_show(struct seq_file *seq, void *v) seq_printf(seq, "gc internal %ld\n", sec->ps_gc_interval); seq_printf(seq, "gc next %ld\n", sec->ps_gc_interval ? - sec->ps_gc_next - cfs_time_current_sec() : 0); + sec->ps_gc_next - get_seconds() : 0); sptlrpc_sec_put(sec); out: diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 1b90f63abfad..143c626942a5 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -1037,7 +1037,7 @@ static void ptlrpc_update_export_timer(struct obd_export *exp, long extra_delay) will make it to the top of the list. */ /* Do not pay attention on 1sec or smaller renewals. */ - new_time = cfs_time_current_sec() + extra_delay; + new_time = get_seconds() + extra_delay; if (exp->exp_last_request_time + 1 /*second */ >= new_time) return; @@ -1070,20 +1070,20 @@ static void ptlrpc_update_export_timer(struct obd_export *exp, long extra_delay) /* Note - racing to start/reset the obd_eviction timer is safe */ if (exp->exp_obd->obd_eviction_timer == 0) { /* Check if the oldest entry is expired. */ - if (cfs_time_current_sec() > (oldest_time + PING_EVICT_TIMEOUT + + if (get_seconds() > (oldest_time + PING_EVICT_TIMEOUT + extra_delay)) { /* We need a second timer, in case the net was down and * it just came back. Since the pinger may skip every * other PING_INTERVAL (see note in ptlrpc_pinger_main), * we better wait for 3. */ exp->exp_obd->obd_eviction_timer = - cfs_time_current_sec() + 3 * PING_INTERVAL; + get_seconds() + 3 * PING_INTERVAL; CDEBUG(D_HA, "%s: Think about evicting %s from "CFS_TIME_T"\n", exp->exp_obd->obd_name, obd_export_nid2str(oldest_exp), oldest_time); } } else { - if (cfs_time_current_sec() > + if (get_seconds() > (exp->exp_obd->obd_eviction_timer + extra_delay)) { /* The evictor won't evict anyone who we've heard from * recently, so we don't have to check before we start @@ -1153,7 +1153,7 @@ static void ptlrpc_at_set_timer(struct ptlrpc_service_part *svcpt) } /* Set timer for closest deadline */ - next = (__s32)(array->paa_deadline - cfs_time_current_sec() - + next = (__s32)(array->paa_deadline - get_seconds() - at_early_margin); if (next <= 0) { ptlrpc_at_timer((unsigned long)svcpt); @@ -1243,7 +1243,7 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) struct ptlrpc_service_part *svcpt = req->rq_rqbd->rqbd_svcpt; struct ptlrpc_request *reqcopy; struct lustre_msg *reqmsg; - cfs_duration_t olddl = req->rq_deadline - cfs_time_current_sec(); + cfs_duration_t olddl = req->rq_deadline - get_seconds(); time_t newdl; int rc; @@ -1288,7 +1288,7 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) /* Fake our processing time into the future to ask the clients * for some extra amount of time */ at_measured(&svcpt->scp_at_estimate, at_extra + - cfs_time_current_sec() - + get_seconds() - req->rq_arrival_time.tv_sec); /* Check to see if we've actually increased the deadline - @@ -1299,11 +1299,11 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) "(%ld/%ld), not sending early reply\n", olddl, req->rq_arrival_time.tv_sec + at_get(&svcpt->scp_at_estimate) - - cfs_time_current_sec()); + get_seconds()); return -ETIMEDOUT; } } - newdl = cfs_time_current_sec() + at_get(&svcpt->scp_at_estimate); + newdl = get_seconds() + at_get(&svcpt->scp_at_estimate); reqcopy = ptlrpc_request_cache_alloc(GFP_NOFS); if (reqcopy == NULL) @@ -1381,7 +1381,7 @@ static int ptlrpc_at_check_timed(struct ptlrpc_service_part *svcpt) struct list_head work_list; __u32 index, count; time_t deadline; - time_t now = cfs_time_current_sec(); + time_t now = get_seconds(); cfs_duration_t delay; int first, counter = 0; @@ -1827,9 +1827,9 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service_part *svcpt, } /* req_in handling should/must be fast */ - if (cfs_time_current_sec() - req->rq_arrival_time.tv_sec > 5) + if (get_seconds() - req->rq_arrival_time.tv_sec > 5) DEBUG_REQ(D_WARNING, req, "Slow req_in handling "CFS_DURATION_T"s", - cfs_time_sub(cfs_time_current_sec(), + cfs_time_sub(get_seconds(), req->rq_arrival_time.tv_sec)); /* Set rpc server deadline and add it to the timed list */ @@ -1932,13 +1932,13 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt, /* Discard requests queued for longer than the deadline. The deadline is increased if we send an early reply. */ - if (cfs_time_current_sec() > request->rq_deadline) { + if (get_seconds() > request->rq_deadline) { DEBUG_REQ(D_ERROR, request, "Dropping timed-out request from %s" ": deadline "CFS_DURATION_T":"CFS_DURATION_T"s ago\n", libcfs_id2str(request->rq_peer), cfs_time_sub(request->rq_deadline, request->rq_arrival_time.tv_sec), - cfs_time_sub(cfs_time_current_sec(), + cfs_time_sub(get_seconds(), request->rq_deadline)); goto put_conn; } @@ -1964,14 +1964,14 @@ put_conn: lu_context_exit(&request->rq_session); lu_context_fini(&request->rq_session); - if (unlikely(cfs_time_current_sec() > request->rq_deadline)) { + if (unlikely(get_seconds() > request->rq_deadline)) { DEBUG_REQ(D_WARNING, request, "Request took longer than estimated (" CFS_DURATION_T":"CFS_DURATION_T "s); client may timeout.", cfs_time_sub(request->rq_deadline, request->rq_arrival_time.tv_sec), - cfs_time_sub(cfs_time_current_sec(), + cfs_time_sub(get_seconds(), request->rq_deadline)); } -- cgit From b2d201bd169a60b7c75649dafc2180be5dc12fa0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:45:51 -0700 Subject: staging: lustre: remove cfs_duration_t typedef Just use 'long' as that is what it was defined as. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/libcfs_time.h | 6 ++-- .../lustre/include/linux/libcfs/linux/linux-time.h | 34 +++++++--------------- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 2 +- drivers/staging/lustre/lnet/lnet/router_proc.c | 2 +- drivers/staging/lustre/lnet/selftest/conrpc.c | 4 +-- .../staging/lustre/lustre/include/lustre_export.h | 2 +- drivers/staging/lustre/lustre/include/lustre_lib.h | 12 ++++---- drivers/staging/lustre/lustre/include/lustre_net.h | 4 +-- .../lustre/lustre/libcfs/linux/linux-proc.c | 4 +-- drivers/staging/lustre/lustre/ptlrpc/import.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/pinger.c | 7 ++--- drivers/staging/lustre/lustre/ptlrpc/service.c | 4 +-- 13 files changed, 36 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 85cfb76d5f03..d686b55e406a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -43,12 +43,12 @@ * generic time manipulation functions. */ -static inline unsigned long cfs_time_add(unsigned long t, cfs_duration_t d) +static inline unsigned long cfs_time_add(unsigned long t, long d) { return (unsigned long)(t + d); } -static inline cfs_duration_t cfs_time_sub(unsigned long t1, unsigned long t2) +static inline long cfs_time_sub(unsigned long t1, unsigned long t2) { return (unsigned long)(t1 - t2); } @@ -121,7 +121,7 @@ static inline void cfs_fs_timeval(struct timeval *tv) * return valid time-out based on user supplied one. Currently we only check * that time-out is not shorted than allowed. */ -static inline cfs_duration_t cfs_timeout_cap(cfs_duration_t timeout) +static inline long cfs_timeout_cap(long timeout) { if (timeout < CFS_TICK) timeout = CFS_TICK; diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 0768ecb13f88..b64dfc51287f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -50,26 +50,16 @@ /* * Platform provides three opaque data-types: * - * unsigned long represents point in time. This is internal kernel - * time rather than "wall clock". This time bears no - * relation to gettimeofday(). - * - * cfs_duration_t represents time interval with resolution of internal - * platform clock - * - * struct timespec represents instance in world-visible time. This is - * used in file-system time-stamps - * * unsigned long cfs_time_current(void); - * unsigned long cfs_time_add (unsigned long, cfs_duration_t); - * cfs_duration_t cfs_time_sub (unsigned long, unsigned long); + * unsigned long cfs_time_add (unsigned long, long); + * long cfs_time_sub (unsigned long, unsigned long); * int cfs_impl_time_before (unsigned long, unsigned long); * int cfs_impl_time_before_eq(unsigned long, unsigned long); * - * cfs_duration_t cfs_duration_build(int64_t); + * long cfs_duration_build(int64_t); * - * time_t cfs_duration_sec (cfs_duration_t); - * void cfs_duration_usec(cfs_duration_t, struct timeval *); + * time_t cfs_duration_sec (long); + * void cfs_duration_usec(long, struct timeval *); * * void cfs_fs_time_current(struct timespec *); * time_t cfs_fs_time_sec (struct timespec *); @@ -107,8 +97,6 @@ static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v) * Generic kernel stuff */ -typedef long cfs_duration_t; - static inline int cfs_time_before(unsigned long t1, unsigned long t2) { return time_before(t1, t2); @@ -129,28 +117,28 @@ static inline time_t cfs_fs_time_sec(struct timespec *t) return t->tv_sec; } -static inline cfs_duration_t cfs_time_seconds(int seconds) +static inline long cfs_time_seconds(int seconds) { - return ((cfs_duration_t)seconds) * HZ; + return ((long)seconds) * HZ; } -static inline time_t cfs_duration_sec(cfs_duration_t d) +static inline time_t cfs_duration_sec(long d) { return d / HZ; } -static inline void cfs_duration_usec(cfs_duration_t d, struct timeval *s) +static inline void cfs_duration_usec(long d, struct timeval *s) { #if (BITS_PER_LONG == 32) && (HZ > 4096) __u64 t; s->tv_sec = d / HZ; - t = (d - (cfs_duration_t)s->tv_sec * HZ) * ONE_MILLION; + t = (d - (long)s->tv_sec * HZ) * ONE_MILLION; do_div(t, HZ); s->tv_usec = t; #else s->tv_sec = d / HZ; - s->tv_usec = ((d - (cfs_duration_t)s->tv_sec * HZ) * \ + s->tv_usec = ((d - (long)s->tv_sec * HZ) * \ ONE_MILLION) / HZ; #endif } diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index 800d97b29c43..f7cce9d9b7ba 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -320,7 +320,7 @@ typedef struct ksock_route struct ksock_peer *ksnr_peer; /* owning peer */ atomic_t ksnr_refcount; /* # users */ unsigned long ksnr_timeout; /* when (in jiffies) reconnection can happen next */ - cfs_duration_t ksnr_retry_interval; /* how long between retries */ + long ksnr_retry_interval; /* how long between retries */ __u32 ksnr_myipaddr; /* my IP */ __u32 ksnr_ipaddr; /* IP address to connect to */ int ksnr_port; /* port to connect to */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index b341c630c44a..804a6345f2bd 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -2526,7 +2526,7 @@ ksocknal_reaper (void *arg) ksock_sched_t *sched; struct list_head enomem_conns; int nenomem_conns; - cfs_duration_t timeout; + long timeout; int i; int peer_index = 0; unsigned long deadline = cfs_time_current(); diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index fcf3b0453386..ee3b3d4a214b 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -512,7 +512,7 @@ int LL_PROC_PROTO(proc_lnet_peers) if (lnet_peer_aliveness_enabled(peer)) { unsigned long now = cfs_time_current(); - cfs_duration_t delta; + long delta; delta = cfs_time_sub(now, peer->lp_last_alive); lastalive = cfs_duration_sec(delta); diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.c b/drivers/staging/lustre/lnet/selftest/conrpc.c index 6d9c45acdaa3..a3a60d6e9081 100644 --- a/drivers/staging/lustre/lnet/selftest/conrpc.c +++ b/drivers/staging/lustre/lnet/selftest/conrpc.c @@ -477,7 +477,7 @@ lstcon_rpc_trans_interpreter(lstcon_rpc_trans_t *trans, lstcon_rpc_t *crpc; srpc_msg_t *msg; lstcon_node_t *nd; - cfs_duration_t dur; + long dur; struct timeval tv; int error; @@ -503,7 +503,7 @@ lstcon_rpc_trans_interpreter(lstcon_rpc_trans_t *trans, nd = crpc->crp_node; - dur = (cfs_duration_t)cfs_time_sub(crpc->crp_stamp, + dur = (long)cfs_time_sub(crpc->crp_stamp, (unsigned long)console_session.ses_id.ses_stamp); cfs_duration_usec(dur, &tv); diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index fe2120e3c6d2..4482d61ff7ab 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -294,7 +294,7 @@ static inline int exp_connect_multibulk(struct obd_export *exp) return exp_max_brw_size(exp) > ONE_MB_BRW_SIZE; } -static inline int exp_expired(struct obd_export *exp, cfs_duration_t age) +static inline int exp_expired(struct obd_export *exp, long age) { LASSERT(exp->exp_delayed); return cfs_time_before(cfs_time_add(exp->exp_last_request_time, age), diff --git a/drivers/staging/lustre/lustre/include/lustre_lib.h b/drivers/staging/lustre/lustre/include/lustre_lib.h index 8aecb9a3c84d..de493fabab46 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/lustre_lib.h @@ -459,8 +459,8 @@ static inline int back_to_sleep(void *arg) #define LWI_ON_SIGNAL_NOOP ((void (*)(void *))(-1)) struct l_wait_info { - cfs_duration_t lwi_timeout; - cfs_duration_t lwi_interval; + long lwi_timeout; + long lwi_interval; int lwi_allow_intr; int (*lwi_on_timeout)(void *); void (*lwi_on_signal)(void *); @@ -516,7 +516,7 @@ struct l_wait_info { #define __l_wait_event(wq, condition, info, ret, l_add_wait) \ do { \ wait_queue_t __wait; \ - cfs_duration_t __timeout = info->lwi_timeout; \ + long __timeout = info->lwi_timeout; \ sigset_t __blocked; \ int __allow_intr = info->lwi_allow_intr; \ \ @@ -548,11 +548,11 @@ do { \ if (__timeout == 0) { \ schedule(); \ } else { \ - cfs_duration_t interval = info->lwi_interval? \ - min_t(cfs_duration_t, \ + long interval = info->lwi_interval? \ + min_t(long, \ info->lwi_interval,__timeout):\ __timeout; \ - cfs_duration_t remaining = schedule_timeout(interval);\ + long remaining = schedule_timeout(interval);\ __timeout = cfs_time_sub(__timeout, \ cfs_time_sub(interval, remaining));\ if (__timeout == 0) { \ diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index 689e6249f313..92b88f5d9c3d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -1713,7 +1713,7 @@ struct ptlrpc_request { lnet_handle_md_t rq_req_md_h; struct ptlrpc_cb_id rq_req_cbid; /** optional time limit for send attempts */ - cfs_duration_t rq_delay_limit; + long rq_delay_limit; /** time request was first queued */ unsigned long rq_queued_time; @@ -2356,7 +2356,7 @@ struct ptlrpc_service_part { /** incoming reqs */ struct list_head scp_req_incoming; /** timeout before re-posting reqs, in tick */ - cfs_duration_t scp_rqbd_timeout; + long scp_rqbd_timeout; /** * all threads sleep on this. This wait-queue is signalled when new * incoming request arrives and when difficult reply has to be handled. diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index c4289b6c8727..c680def5a1f0 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -218,7 +218,7 @@ int LL_PROC_PROTO(proc_console_max_delay_cs) { int rc, max_delay_cs; struct ctl_table dummy = *table; - cfs_duration_t d; + long d; dummy.data = &max_delay_cs; dummy.proc_handler = &proc_dointvec; @@ -249,7 +249,7 @@ int LL_PROC_PROTO(proc_console_min_delay_cs) { int rc, min_delay_cs; struct ctl_table dummy = *table; - cfs_duration_t d; + long d; dummy.data = &min_delay_cs; dummy.proc_handler = &proc_dointvec; diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index 6eb28e6227ec..5cadb94ddc61 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -1454,7 +1454,7 @@ int ptlrpc_disconnect_import(struct obd_import *imp, int noclose) if (ptlrpc_import_in_recovery(imp)) { struct l_wait_info lwi; - cfs_duration_t timeout; + long timeout; if (AT_OFF) { if (imp->imp_server_timeout) diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index a13399c75095..5e4e49fab63c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -141,7 +141,7 @@ static inline int ptlrpc_next_reconnect(struct obd_import *imp) return cfs_time_shift(obd_timeout); } -cfs_duration_t pinger_check_timeout(unsigned long time) +long pinger_check_timeout(unsigned long time) { struct timeout_item *item; unsigned long timeout = PING_INTERVAL; @@ -246,7 +246,7 @@ static int ptlrpc_pinger_main(void *arg) while (1) { unsigned long this_ping = cfs_time_current(); struct l_wait_info lwi; - cfs_duration_t time_to_next_wake; + long time_to_next_wake; struct timeout_item *item; struct list_head *iter; @@ -283,8 +283,7 @@ static int ptlrpc_pinger_main(void *arg) CFS_TIME_T")\n", time_to_next_wake, cfs_time_add(this_ping,cfs_time_seconds(PING_INTERVAL))); if (time_to_next_wake > 0) { - lwi = LWI_TIMEOUT(max_t(cfs_duration_t, - time_to_next_wake, + lwi = LWI_TIMEOUT(max_t(long, time_to_next_wake, cfs_time_seconds(1)), NULL, NULL); l_wait_event(thread->t_ctl_waitq, diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 143c626942a5..0d100c066539 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -1243,7 +1243,7 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) struct ptlrpc_service_part *svcpt = req->rq_rqbd->rqbd_svcpt; struct ptlrpc_request *reqcopy; struct lustre_msg *reqmsg; - cfs_duration_t olddl = req->rq_deadline - get_seconds(); + long olddl = req->rq_deadline - get_seconds(); time_t newdl; int rc; @@ -1382,7 +1382,7 @@ static int ptlrpc_at_check_timed(struct ptlrpc_service_part *svcpt) __u32 index, count; time_t deadline; time_t now = get_seconds(); - cfs_duration_t delay; + long delay; int first, counter = 0; spin_lock(&svcpt->scp_at_lock); -- cgit From 88c03eae2d0e69b71c885dd12c8ab7e50272ab55 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 00:54:26 -0700 Subject: staging: lustre: cfs_time_sub() must return unsigned long It looks like someone ment for it to return this value (there's a cast), but the funtion says 'long' which causes problems when comparing values from this function. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/libcfs_time.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index d686b55e406a..3371e9e0bb43 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -48,7 +48,7 @@ static inline unsigned long cfs_time_add(unsigned long t, long d) return (unsigned long)(t + d); } -static inline long cfs_time_sub(unsigned long t1, unsigned long t2) +static inline unsigned long cfs_time_sub(unsigned long t1, unsigned long t2) { return (unsigned long)(t1 - t2); } -- cgit From 699503bcabbf79b1e3914df7e2bd67034469f92c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 01:03:41 -0700 Subject: staging: lustre: remove cfs_time_before() Just call time_before() instead. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/libcfs_time.h | 2 +- .../lustre/include/linux/libcfs/linux/linux-time.h | 30 ---------------------- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 4 +-- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 4 +-- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 9 +++---- drivers/staging/lustre/lnet/lnet/lib-move.c | 2 +- drivers/staging/lustre/lnet/lnet/router.c | 2 +- .../lustre/lustre/include/linux/lustre_fsfilt.h | 6 ++--- .../staging/lustre/lustre/include/lustre_export.h | 4 +-- drivers/staging/lustre/lustre/include/lustre_net.h | 6 ++--- drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 5 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 2 +- .../staging/lustre/lustre/libcfs/upcall_cache.c | 5 ++-- drivers/staging/lustre/lustre/llite/llite_capa.c | 2 +- drivers/staging/lustre/lustre/llite/statahead.c | 2 +- drivers/staging/lustre/lustre/obdclass/capa.c | 6 ++--- drivers/staging/lustre/lustre/ptlrpc/client.c | 2 +- 17 files changed, 30 insertions(+), 63 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 3371e9e0bb43..1344139c46c3 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -55,7 +55,7 @@ static inline unsigned long cfs_time_sub(unsigned long t1, unsigned long t2) static inline int cfs_time_after(unsigned long t1, unsigned long t2) { - return cfs_time_before(t2, t1); + return time_before(t2, t1); } static inline int cfs_time_aftereq(unsigned long t1, unsigned long t2) diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index b64dfc51287f..1158a3112bcc 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -45,31 +45,6 @@ #error Do not #include this file directly. #include instead #endif -/* Portable time API */ - -/* - * Platform provides three opaque data-types: - * - * unsigned long cfs_time_current(void); - * unsigned long cfs_time_add (unsigned long, long); - * long cfs_time_sub (unsigned long, unsigned long); - * int cfs_impl_time_before (unsigned long, unsigned long); - * int cfs_impl_time_before_eq(unsigned long, unsigned long); - * - * long cfs_duration_build(int64_t); - * - * time_t cfs_duration_sec (long); - * void cfs_duration_usec(long, struct timeval *); - * - * void cfs_fs_time_current(struct timespec *); - * time_t cfs_fs_time_sec (struct timespec *); - * void cfs_fs_time_usec (struct timespec *, struct timeval *); - * - * CFS_TIME_FORMAT - * CFS_DURATION_FORMAT - * - */ - #define ONE_BILLION ((u_int64_t)1000000000) #define ONE_MILLION 1000000 @@ -97,11 +72,6 @@ static inline void cfs_fs_time_usec(struct timespec *t, struct timeval *v) * Generic kernel stuff */ -static inline int cfs_time_before(unsigned long t1, unsigned long t2) -{ - return time_before(t1, t2); -} - static inline unsigned long cfs_time_current(void) { return jiffies; diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 0cdcd5a0521c..7a47144787d6 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -1606,7 +1606,7 @@ kiblnd_fmr_pool_map(kib_fmr_poolset_t *fps, __u64 *pages, int npages, } - if (cfs_time_before(cfs_time_current(), fps->fps_next_retry)) { + if (time_before(cfs_time_current(), fps->fps_next_retry)) { /* someone failed recently */ spin_unlock(&fps->fps_lock); return -EAGAIN; @@ -1808,7 +1808,7 @@ kiblnd_pool_alloc_node(kib_poolset_t *ps) goto again; } - if (cfs_time_before(cfs_time_current(), ps->ps_next_retry)) { + if (time_before(cfs_time_current(), ps->ps_next_retry)) { /* someone failed recently */ spin_unlock(&ps->ps_lock); return NULL; diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c index 14f3decb77f1..21cd02c369dd 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -3465,8 +3465,8 @@ kiblnd_failover_thread(void *arg) list_for_each_entry(dev, &kiblnd_data.kib_failed_devs, ibd_fail_list) { - if (cfs_time_before(cfs_time_current(), - dev->ibd_next_failover)) + if (time_before(cfs_time_current(), + dev->ibd_next_failover)) continue; do_failover = 1; break; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 804a6345f2bd..873c5e72a2b5 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -2368,13 +2368,12 @@ ksocknal_send_keepalive_locked(ksock_peer_t *peer) return 0; if (*ksocknal_tunables.ksnd_keepalive <= 0 || - cfs_time_before(cfs_time_current(), - cfs_time_add(peer->ksnp_last_alive, - cfs_time_seconds(*ksocknal_tunables.ksnd_keepalive)))) + time_before(cfs_time_current(), + cfs_time_add(peer->ksnp_last_alive, + cfs_time_seconds(*ksocknal_tunables.ksnd_keepalive)))) return 0; - if (cfs_time_before(cfs_time_current(), - peer->ksnp_send_keepalive)) + if (time_before(cfs_time_current(), peer->ksnp_send_keepalive)) return 0; /* retry 10 secs later, so we wouldn't put pressure diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index 45412a5444c2..4ceec131d1a4 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -751,7 +751,7 @@ lnet_peer_alive_locked(lnet_peer_t *lp) cfs_time_add(lp->lp_last_query, cfs_time_seconds(lnet_queryinterval)); - if (cfs_time_before(now, next_query)) { + if (time_before(now, next_query)) { if (lp->lp_alive) CWARN("Unexpected aliveness of peer %s: " "%d < %d (%d/%d)\n", diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 6b19f8707c47..ac38ad271071 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -109,7 +109,7 @@ lnet_peers_start_down(void) void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, unsigned long when) { - if (cfs_time_before(when, lp->lp_timestamp)) { /* out of date information */ + if (time_before(when, lp->lp_timestamp)) { /* out of date information */ CDEBUG(D_NET, "Out of date\n"); return; } diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h b/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h index 75cc32c02eb5..d5c97beb66f5 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h @@ -90,12 +90,12 @@ static inline char *fsfilt_get_label(struct obd_device *obd, #define __fsfilt_check_slow(obd, start, msg) \ do { \ - if (cfs_time_before(jiffies, start + 15 * HZ)) \ + if (time_before(jiffies, start + 15 * HZ)) \ break; \ - else if (cfs_time_before(jiffies, start + 30 * HZ)) \ + else if (time_before(jiffies, start + 30 * HZ)) \ CDEBUG(D_VFSTRACE, "%s: slow %s %lus\n", obd->obd_name, \ msg, (jiffies-start) / HZ); \ - else if (cfs_time_before(jiffies, start + DISK_TIMEOUT * HZ)) \ + else if (time_before(jiffies, start + DISK_TIMEOUT * HZ)) \ CWARN("%s: slow %s %lus\n", obd->obd_name, msg, \ (jiffies - start) / HZ); \ else \ diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index 4482d61ff7ab..e5f8e86cd887 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -297,8 +297,8 @@ static inline int exp_connect_multibulk(struct obd_export *exp) static inline int exp_expired(struct obd_export *exp, long age) { LASSERT(exp->exp_delayed); - return cfs_time_before(cfs_time_add(exp->exp_last_request_time, age), - get_seconds()); + return time_before(cfs_time_add(exp->exp_last_request_time, age), + get_seconds()); } static inline int exp_connect_cancelset(struct obd_export *exp) diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index 92b88f5d9c3d..229fdac5ebd4 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -3100,9 +3100,9 @@ static inline int ptlrpc_req_get_repsize(struct ptlrpc_request *req) static inline int ptlrpc_send_limit_expired(struct ptlrpc_request *req) { if (req->rq_delay_limit != 0 && - cfs_time_before(cfs_time_add(req->rq_queued_time, - cfs_time_seconds(req->rq_delay_limit)), - cfs_time_current())) { + time_before(cfs_time_add(req->rq_queued_time, + cfs_time_seconds(req->rq_delay_limit)), + cfs_time_current())) { return 1; } return 0; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 14b80a8d1cd5..589ebaf30cce 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -1508,9 +1508,8 @@ static ldlm_policy_res_t ldlm_cancel_aged_policy(struct ldlm_namespace *ns, { /* Stop LRU processing if young lock is found and we reach past count */ return ((added >= count) && - cfs_time_before(cfs_time_current(), - cfs_time_add(lock->l_last_used, - ns->ns_max_age))) ? + time_before(cfs_time_current(), + cfs_time_add(lock->l_last_used, ns->ns_max_age))) ? LDLM_POLICY_KEEP_LOCK : LDLM_POLICY_CANCEL_LOCK; } diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index eb166a708be7..344b63e7bf5b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -1369,7 +1369,7 @@ void ldlm_namespace_dump(int level, struct ldlm_namespace *ns) ldlm_ns_name(ns), atomic_read(&ns->ns_bref), ns_is_client(ns) ? "client" : "server"); - if (cfs_time_before(cfs_time_current(), ns->ns_next_dump)) + if (time_before(cfs_time_current(), ns->ns_next_dump)) return; cfs_hash_for_each_nolock(ns->ns_rs_hash, diff --git a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c index ab3a1b4c3d30..452227da2cb3 100644 --- a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c +++ b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c @@ -117,13 +117,12 @@ static int check_unlink_entry(struct upcall_cache *cache, struct upcall_cache_entry *entry) { if (UC_CACHE_IS_VALID(entry) && - cfs_time_before(cfs_time_current(), entry->ue_expire)) + time_before(cfs_time_current(), entry->ue_expire)) return 0; if (UC_CACHE_IS_ACQUIRING(entry)) { if (entry->ue_acquire_expire == 0 || - cfs_time_before(cfs_time_current(), - entry->ue_acquire_expire)) + time_before(cfs_time_current(), entry->ue_acquire_expire)) return 0; UC_CACHE_SET_EXPIRED(entry); diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 2ec55bb4c8d1..ade58e8a41e3 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -72,7 +72,7 @@ static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa); static inline void update_capa_timer(struct obd_capa *ocapa, unsigned long expiry) { - if (cfs_time_before(expiry, ll_capa_timer.expires) || + if (time_before(expiry, ll_capa_timer.expires) || !timer_pending(&ll_capa_timer)) { mod_timer(&ll_capa_timer, expiry); DEBUG_CAPA(D_SEC, &ocapa->c_capa, diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c index 31d92cbe520b..bad8a84f8c2f 100644 --- a/drivers/staging/lustre/lustre/llite/statahead.c +++ b/drivers/staging/lustre/lustre/llite/statahead.c @@ -587,7 +587,7 @@ static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) * affect the performance. */ if (lli->lli_glimpse_time != 0 && - cfs_time_before(cfs_time_shift(-1), lli->lli_glimpse_time)) { + time_before(cfs_time_shift(-1), lli->lli_glimpse_time)) { up_write(&lli->lli_glimpse_sem); lli->lli_agl_index = 0; iput(inode); diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index 8465fde05140..de9347f93634 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -143,9 +143,9 @@ static inline int capa_hashfn(struct lu_fid *fid) * client renew right after obtaining it. */ static inline int capa_is_to_expire(struct obd_capa *oc) { - return cfs_time_before(cfs_time_sub(oc->c_expiry, - cfs_time_seconds(oc->c_capa.lc_timeout)*2/3), - cfs_time_current()); + return time_before(cfs_time_sub(oc->c_expiry, + cfs_time_seconds(oc->c_capa.lc_timeout)*2/3), + cfs_time_current()); } static struct obd_capa *find_capa(struct lustre_capa *capa, diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 1a1f87e7502a..07cd3edc4345 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -1894,7 +1894,7 @@ int ptlrpc_expire_one_request(struct ptlrpc_request *req, int async_unlink) "/real "CFS_DURATION_T"]", req->rq_net_err ? "failed due to network error" : ((req->rq_real_sent == 0 || - cfs_time_before(req->rq_real_sent, req->rq_sent) || + time_before((unsigned long)req->rq_real_sent, (unsigned long)req->rq_sent) || cfs_time_aftereq(req->rq_real_sent, req->rq_deadline)) ? "timed out for sent delay" : "timed out for slow reply"), req->rq_sent, req->rq_real_sent); -- cgit From 913827ee9aa6bc4731c3f954581fab067c448b89 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 01:09:15 -0700 Subject: staging: lustre: fid: fid_request.c: checkpatch cleanup: align arguments to parenthesis whitespace changes only - git diff -w shows no difference Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fid/fid_request.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index d0c7a954c12c..8967599061be 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -197,7 +197,7 @@ static int seq_client_alloc_seq(const struct lu_env *env, rc = seq_client_alloc_meta(env, seq); if (rc) { CERROR("%s: Can't allocate new meta-sequence, rc %d\n", - seq->lcs_name, rc); + seq->lcs_name, rc); return rc; } else { CDEBUG(D_INFO, "%s: New range - "DRANGE"\n", @@ -267,14 +267,14 @@ int seq_client_get_seq(const struct lu_env *env, rc = seq_client_alloc_seq(env, seq, seqnr); if (rc) { CERROR("%s: Can't allocate new sequence, rc %d\n", - seq->lcs_name, rc); + seq->lcs_name, rc); seq_fid_alloc_fini(seq); mutex_unlock(&seq->lcs_mutex); return rc; } CDEBUG(D_INFO, "%s: allocate sequence [0x%16.16"LPF64"x]\n", - seq->lcs_name, *seqnr); + seq->lcs_name, *seqnr); /* Since the caller require the whole seq, * so marked this seq to be used */ @@ -330,14 +330,14 @@ int seq_client_alloc_fid(const struct lu_env *env, rc = seq_client_alloc_seq(env, seq, &seqnr); if (rc) { CERROR("%s: Can't allocate new sequence, rc %d\n", - seq->lcs_name, rc); + seq->lcs_name, rc); seq_fid_alloc_fini(seq); mutex_unlock(&seq->lcs_mutex); return rc; } CDEBUG(D_INFO, "%s: Switch to sequence [0x%16.16"LPF64"x]\n", - seq->lcs_name, seqnr); + seq->lcs_name, seqnr); seq->lcs_fid.f_oid = LUSTRE_FID_INIT_OID; seq->lcs_fid.f_seq = seqnr; @@ -429,7 +429,7 @@ static int seq_client_proc_init(struct lu_client_seq *seq) seq_client_proc_list, seq); if (rc) { CERROR("%s: Can't init sequence manager proc, rc %d\n", - seq->lcs_name, rc); + seq->lcs_name, rc); GOTO(out_cleanup, rc); } -- cgit From e30546d6aa8f2032836a2f5ca98e0a4c467264d4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:39 +0100 Subject: staging: vt6656: vCommandTimerWait remove camel case. camel case changes pDevice -> priv MSecond -> msecs Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index b62726f29c53..2553cde8a16c 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -54,11 +54,9 @@ static int msglevel = MSG_LEVEL_INFO; static int s_bCommandComplete(struct vnt_private *); -static void -vCommandTimerWait(struct vnt_private *pDevice, unsigned long MSecond) +static void vCommandTimerWait(struct vnt_private *priv, unsigned long msecs) { - schedule_delayed_work(&pDevice->run_command_work, - msecs_to_jiffies(MSecond)); + schedule_delayed_work(&priv->run_command_work, msecs_to_jiffies(msecs)); } void vRunCommand(struct work_struct *work) -- cgit From c06b1ad093d7ab25e4618142f0a8d46509dd1fb0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:40 +0100 Subject: staging: vt6656: wcmd Remove command WLAN_CMD_RADIO Part of it has already been removed. checking isr1 & ISR_GPIO3 serves no purpose. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 6 ------ drivers/staging/vt6656/wcmd.c | 14 -------------- drivers/staging/vt6656/wcmd.h | 2 -- 3 files changed, 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 1cc936455e8e..77bd9dde4887 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -197,12 +197,6 @@ void INTnsProcessData(struct vnt_private *priv) low_stats->dot11FCSErrorCount += int_data->fcs_err; } - if (int_data->isr1 != 0) - if (int_data->isr1 & ISR_GPIO3) - bScheduleCommand((void *) priv, - WLAN_CMD_RADIO, - NULL); - priv->int_buf.in_use = false; stats->tx_errors = priv->wstats.discard.retries; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 2553cde8a16c..0b874868525b 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -185,10 +185,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; break; - case WLAN_CMD_RADIO: - pDevice->eCommandState = WLAN_CMD_RADIO_START; - pDevice->bRadioCmd = bRadioCmd; - break; case WLAN_CMD_CHANGE_BBSENSITIVITY: pDevice->eCommandState = WLAN_CMD_CHANGE_BBSENSITIVITY_START; break; @@ -234,16 +230,6 @@ int bScheduleCommand(struct vnt_private *pDevice, return false; pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].eCmd = eCommand; pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bForceSCAN = true; - if (pbyItem0 != NULL) { - switch (eCommand) { - case WLAN_CMD_RADIO: - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bRadioCmd = *((int *)pbyItem0); - break; - - default: - break; - } - } ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdEnqueueIdx, CMD_Q_SIZE); pDevice->cbFreeCmdQueue--; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 1e5b739b6c3e..eb2e972e0ab0 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -42,7 +42,6 @@ typedef enum tagCMD_CODE { WLAN_CMD_DISASSOCIATE, WLAN_CMD_DEAUTH, WLAN_CMD_RX_PSPOLL, - WLAN_CMD_RADIO, WLAN_CMD_CHANGE_BBSENSITIVITY, WLAN_CMD_SETPOWER, WLAN_CMD_TBTT_WAKEUP, @@ -87,7 +86,6 @@ typedef enum tagCMD_STATE { WLAN_ASSOCIATE_WAIT, WLAN_DISASSOCIATE_WAIT, WLAN_CMD_TX_PSPACKET_START, - WLAN_CMD_RADIO_START, WLAN_CMD_CHANGE_BBSENSITIVITY_START, WLAN_CMD_SETPOWER_START, WLAN_CMD_AP_MODE_START, -- cgit From 43878a363b114424290d4c5fd1707fadb8335620 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:41 +0100 Subject: staging: vt6656: wcmd remove unused commands WLAN_CMD_CHANGE_BBSENSITIVITY and WLAN_CMD_MAC_DISPOWERSAVING are already implemented and don't need the command timer. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 34 ---------------------------------- drivers/staging/vt6656/wcmd.h | 24 ------------------------ 2 files changed, 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 0b874868525b..50011937572a 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -63,7 +63,6 @@ void vRunCommand(struct work_struct *work) { struct vnt_private *pDevice = container_of(work, struct vnt_private, run_command_work.work); - u8 byData; if (pDevice->Flags & fMP_DISCONNECTED) return; @@ -87,15 +86,6 @@ void vRunCommand(struct work_struct *work) break; - case WLAN_CMD_CHANGE_BBSENSITIVITY_START: - - pDevice->bStopDataPkt = true; - pDevice->byBBVGACurrent = pDevice->byBBVGANew; - BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Change sensitivity pDevice->byBBVGACurrent = %x\n", pDevice->byBBVGACurrent); - pDevice->bStopDataPkt = false; - break; - case WLAN_CMD_TBTT_WAKEUP_START: vnt_next_tbtt_wakeup(pDevice); break; @@ -134,26 +124,10 @@ void vRunCommand(struct work_struct *work) } break; - case WLAN_CMD_MAC_DISPOWERSAVING_START: - vnt_control_in_u8(pDevice, MESSAGE_REQUEST_MACREG, MAC_REG_PSCTL, &byData); - if ((byData & PSCTL_PS) != 0) { - // disable power saving hw function - vnt_control_out(pDevice, - MESSAGE_TYPE_DISABLE_PS, - 0, - 0, - 0, - NULL - ); - } - break; - case WLAN_CMD_11H_CHSW_START: vnt_set_channel(pDevice, pDevice->hw->conf.chandef.chan->hw_value); break; - case WLAN_CMD_CONFIGURE_FILTER_START: - break; default: break; } //switch @@ -185,10 +159,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; break; - case WLAN_CMD_CHANGE_BBSENSITIVITY: - pDevice->eCommandState = WLAN_CMD_CHANGE_BBSENSITIVITY_START; - break; - case WLAN_CMD_TBTT_WAKEUP: pDevice->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; break; @@ -205,10 +175,6 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; break; - case WLAN_CMD_MAC_DISPOWERSAVING: - pDevice->eCommandState = WLAN_CMD_MAC_DISPOWERSAVING_START; - break; - case WLAN_CMD_11H_CHSW: pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; break; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index eb2e972e0ab0..4fe34b534abe 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -37,21 +37,11 @@ // Command code typedef enum tagCMD_CODE { WLAN_CMD_INIT_MAC80211, - WLAN_CMD_BSSID_SCAN, - WLAN_CMD_SSID, - WLAN_CMD_DISASSOCIATE, - WLAN_CMD_DEAUTH, - WLAN_CMD_RX_PSPOLL, - WLAN_CMD_CHANGE_BBSENSITIVITY, WLAN_CMD_SETPOWER, WLAN_CMD_TBTT_WAKEUP, WLAN_CMD_BECON_SEND, WLAN_CMD_CHANGE_ANTENNA, - WLAN_CMD_REMOVE_ALLKEY, - WLAN_CMD_MAC_DISPOWERSAVING, WLAN_CMD_11H_CHSW, - WLAN_CMD_RUN_AP, - WLAN_CMD_CONFIGURE_FILTER } CMD_CODE, *PCMD_CODE; #define CMD_Q_SIZE 32 @@ -77,25 +67,11 @@ typedef struct tagCMD_ITEM { // Command state typedef enum tagCMD_STATE { WLAN_CMD_INIT_MAC80211_START, - WLAN_CMD_SCAN_START, - WLAN_CMD_SCAN_END, - WLAN_CMD_DISASSOCIATE_START, - WLAN_CMD_DEAUTHEN_START, - WLAN_CMD_SSID_START, - WLAN_AUTHENTICATE_WAIT, - WLAN_ASSOCIATE_WAIT, - WLAN_DISASSOCIATE_WAIT, - WLAN_CMD_TX_PSPACKET_START, - WLAN_CMD_CHANGE_BBSENSITIVITY_START, WLAN_CMD_SETPOWER_START, - WLAN_CMD_AP_MODE_START, WLAN_CMD_TBTT_WAKEUP_START, WLAN_CMD_BECON_SEND_START, WLAN_CMD_CHANGE_ANTENNA_START, - WLAN_CMD_REMOVE_ALLKEY_START, - WLAN_CMD_MAC_DISPOWERSAVING_START, WLAN_CMD_11H_CHSW_START, - WLAN_CMD_CONFIGURE_FILTER_START, WLAN_CMD_IDLE } CMD_STATE, *PCMD_STATE; -- cgit From cf07bb8e8407057bfc694399ca665c81e0dc15bb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:42 +0100 Subject: staging: vt6656: vRunCommand remove camel case. pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 56 ++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 50011937572a..5621c1496fd1 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -61,78 +61,80 @@ static void vCommandTimerWait(struct vnt_private *priv, unsigned long msecs) void vRunCommand(struct work_struct *work) { - struct vnt_private *pDevice = + struct vnt_private *priv = container_of(work, struct vnt_private, run_command_work.work); - if (pDevice->Flags & fMP_DISCONNECTED) + if (priv->Flags & fMP_DISCONNECTED) return; - if (pDevice->bCmdRunning != true) + if (priv->bCmdRunning != true) return; - switch (pDevice->eCommandState) { + switch (priv->eCommandState) { case WLAN_CMD_INIT_MAC80211_START: - if (pDevice->mac_hw) + if (priv->mac_hw) break; - dev_info(&pDevice->usb->dev, "Starting mac80211\n"); + dev_info(&priv->usb->dev, "Starting mac80211\n"); - if (vnt_init(pDevice)) { + if (vnt_init(priv)) { /* If fail all ends TODO retry */ - dev_err(&pDevice->usb->dev, "failed to start\n"); - ieee80211_free_hw(pDevice->hw); + dev_err(&priv->usb->dev, "failed to start\n"); + ieee80211_free_hw(priv->hw); return; } break; case WLAN_CMD_TBTT_WAKEUP_START: - vnt_next_tbtt_wakeup(pDevice); + vnt_next_tbtt_wakeup(priv); break; case WLAN_CMD_BECON_SEND_START: - if (!pDevice->vif) + if (!priv->vif) break; - vnt_beacon_make(pDevice, pDevice->vif); + vnt_beacon_make(priv, priv->vif); - vnt_mac_reg_bits_on(pDevice, MAC_REG_TCR, TCR_AUTOBCNTX); + vnt_mac_reg_bits_on(priv, MAC_REG_TCR, TCR_AUTOBCNTX); break; case WLAN_CMD_SETPOWER_START: - vnt_rf_setpower(pDevice, pDevice->wCurrentRate, - pDevice->hw->conf.chandef.chan->hw_value); + vnt_rf_setpower(priv, priv->wCurrentRate, + priv->hw->conf.chandef.chan->hw_value); break; case WLAN_CMD_CHANGE_ANTENNA_START: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Change from Antenna%d to", (int)pDevice->dwRxAntennaSel); - if (pDevice->dwRxAntennaSel == 0) { - pDevice->dwRxAntennaSel = 1; - if (pDevice->bTxRxAntInv == true) - BBvSetAntennaMode(pDevice, ANT_RXA); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Change from Antenna%d to", (int)priv->dwRxAntennaSel); + + if (priv->dwRxAntennaSel == 0) { + priv->dwRxAntennaSel = 1; + if (priv->bTxRxAntInv == true) + BBvSetAntennaMode(priv, ANT_RXA); else - BBvSetAntennaMode(pDevice, ANT_RXB); + BBvSetAntennaMode(priv, ANT_RXB); } else { - pDevice->dwRxAntennaSel = 0; - if (pDevice->bTxRxAntInv == true) - BBvSetAntennaMode(pDevice, ANT_RXB); + priv->dwRxAntennaSel = 0; + if (priv->bTxRxAntInv == true) + BBvSetAntennaMode(priv, ANT_RXB); else - BBvSetAntennaMode(pDevice, ANT_RXA); + BBvSetAntennaMode(priv, ANT_RXA); } break; case WLAN_CMD_11H_CHSW_START: - vnt_set_channel(pDevice, pDevice->hw->conf.chandef.chan->hw_value); + vnt_set_channel(priv, priv->hw->conf.chandef.chan->hw_value); break; default: break; } //switch - s_bCommandComplete(pDevice); + s_bCommandComplete(priv); return; } -- cgit From 18647c5877125eade655b471c5a9f11268f568b6 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:43 +0100 Subject: staging: vt6656: remove unused variables from struct tagCMD_ITEM Also remove local variables Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 6 +----- drivers/staging/vt6656/wcmd.h | 4 ---- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 5621c1496fd1..1987d5c3ee01 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -141,8 +141,6 @@ void vRunCommand(struct work_struct *work) static int s_bCommandComplete(struct vnt_private *pDevice) { - int bRadioCmd = false; - int bForceSCAN = true; pDevice->eCommandState = WLAN_CMD_IDLE; if (pDevice->cbFreeCmdQueue == CMD_Q_SIZE) { @@ -151,8 +149,7 @@ static int s_bCommandComplete(struct vnt_private *pDevice) return true; } else { pDevice->eCommand = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].eCmd; - bRadioCmd = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].bRadioCmd; - bForceSCAN = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].bForceSCAN; + ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdDequeueIdx, CMD_Q_SIZE); pDevice->cbFreeCmdQueue++; pDevice->bCmdRunning = true; @@ -197,7 +194,6 @@ int bScheduleCommand(struct vnt_private *pDevice, if (pDevice->cbFreeCmdQueue == 0) return false; pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].eCmd = eCommand; - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].bForceSCAN = true; ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdEnqueueIdx, CMD_Q_SIZE); pDevice->cbFreeCmdQueue--; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 4fe34b534abe..98387f33f1ff 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -58,10 +58,6 @@ typedef enum tagCMD_STATUS { typedef struct tagCMD_ITEM { CMD_CODE eCmd; - bool bNeedRadioOFF; - bool bRadioCmd; - bool bForceSCAN; - u16 wDeAuthenReason; } CMD_ITEM, *PCMD_ITEM; // Command state -- cgit From a675dc2136cff46c4148b6f1bed466d4b4e766e9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:44 +0100 Subject: staging: vt6656: s_bCommandComplete remove else from if if returns out so remove else Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 60 ++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 1987d5c3ee01..cc9d50aa2aca 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -147,43 +147,45 @@ static int s_bCommandComplete(struct vnt_private *pDevice) //Command Queue Empty pDevice->bCmdRunning = false; return true; - } else { - pDevice->eCommand = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].eCmd; - - ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdDequeueIdx, CMD_Q_SIZE); - pDevice->cbFreeCmdQueue++; - pDevice->bCmdRunning = true; - switch (pDevice->eCommand) { - case WLAN_CMD_INIT_MAC80211: - pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; - break; + } - case WLAN_CMD_TBTT_WAKEUP: - pDevice->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; - break; + pDevice->eCommand = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].eCmd; - case WLAN_CMD_BECON_SEND: - pDevice->eCommandState = WLAN_CMD_BECON_SEND_START; - break; + ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdDequeueIdx, CMD_Q_SIZE); + pDevice->cbFreeCmdQueue++; + pDevice->bCmdRunning = true; - case WLAN_CMD_SETPOWER: - pDevice->eCommandState = WLAN_CMD_SETPOWER_START; - break; + switch (pDevice->eCommand) { + case WLAN_CMD_INIT_MAC80211: + pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; + break; - case WLAN_CMD_CHANGE_ANTENNA: - pDevice->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; - break; + case WLAN_CMD_TBTT_WAKEUP: + pDevice->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; + break; - case WLAN_CMD_11H_CHSW: - pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; - break; + case WLAN_CMD_BECON_SEND: + pDevice->eCommandState = WLAN_CMD_BECON_SEND_START; + break; - default: - break; - } - vCommandTimerWait(pDevice, 0); + case WLAN_CMD_SETPOWER: + pDevice->eCommandState = WLAN_CMD_SETPOWER_START; + break; + + case WLAN_CMD_CHANGE_ANTENNA: + pDevice->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; + break; + + case WLAN_CMD_11H_CHSW: + pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; + break; + + default: + break; } + vCommandTimerWait(pDevice, 0); + return true; } -- cgit From d287093e4cd76b28e1312ae6ff577aea20aba47c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:45 +0100 Subject: staging: vt6656: s_bCommandComplete clean up and remove camel case pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index cc9d50aa2aca..cdd828c25a07 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -139,52 +139,52 @@ void vRunCommand(struct work_struct *work) return; } -static int s_bCommandComplete(struct vnt_private *pDevice) +static int s_bCommandComplete(struct vnt_private *priv) { - pDevice->eCommandState = WLAN_CMD_IDLE; - if (pDevice->cbFreeCmdQueue == CMD_Q_SIZE) { - //Command Queue Empty - pDevice->bCmdRunning = false; + priv->eCommandState = WLAN_CMD_IDLE; + if (priv->cbFreeCmdQueue == CMD_Q_SIZE) { + /* Command Queue Empty */ + priv->bCmdRunning = false; return true; } - pDevice->eCommand = pDevice->eCmdQueue[pDevice->uCmdDequeueIdx].eCmd; + priv->eCommand = priv->eCmdQueue[priv->uCmdDequeueIdx].eCmd; - ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdDequeueIdx, CMD_Q_SIZE); - pDevice->cbFreeCmdQueue++; - pDevice->bCmdRunning = true; + ADD_ONE_WITH_WRAP_AROUND(priv->uCmdDequeueIdx, CMD_Q_SIZE); + priv->cbFreeCmdQueue++; + priv->bCmdRunning = true; - switch (pDevice->eCommand) { + switch (priv->eCommand) { case WLAN_CMD_INIT_MAC80211: - pDevice->eCommandState = WLAN_CMD_INIT_MAC80211_START; + priv->eCommandState = WLAN_CMD_INIT_MAC80211_START; break; case WLAN_CMD_TBTT_WAKEUP: - pDevice->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; + priv->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; break; case WLAN_CMD_BECON_SEND: - pDevice->eCommandState = WLAN_CMD_BECON_SEND_START; + priv->eCommandState = WLAN_CMD_BECON_SEND_START; break; case WLAN_CMD_SETPOWER: - pDevice->eCommandState = WLAN_CMD_SETPOWER_START; + priv->eCommandState = WLAN_CMD_SETPOWER_START; break; case WLAN_CMD_CHANGE_ANTENNA: - pDevice->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; + priv->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; break; case WLAN_CMD_11H_CHSW: - pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; + priv->eCommandState = WLAN_CMD_11H_CHSW_START; break; default: break; } - vCommandTimerWait(pDevice, 0); + vCommandTimerWait(priv, 0); return true; } -- cgit From f7e9ed41c9ef4a755d7e941b1cc0976b01e90940 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:46 +0100 Subject: staging: vt6656: bScheduleCommand remove camel case Camel case changes pDevice -> priv eCommand -> command pbyItem0 -> item0 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index cdd828c25a07..76e7f78e179e 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -189,19 +189,19 @@ static int s_bCommandComplete(struct vnt_private *priv) return true; } -int bScheduleCommand(struct vnt_private *pDevice, - CMD_CODE eCommand, u8 *pbyItem0) +int bScheduleCommand(struct vnt_private *priv, CMD_CODE command, u8 *item0) { - if (pDevice->cbFreeCmdQueue == 0) + if (priv->cbFreeCmdQueue == 0) return false; - pDevice->eCmdQueue[pDevice->uCmdEnqueueIdx].eCmd = eCommand; - ADD_ONE_WITH_WRAP_AROUND(pDevice->uCmdEnqueueIdx, CMD_Q_SIZE); - pDevice->cbFreeCmdQueue--; + priv->eCmdQueue[priv->uCmdEnqueueIdx].eCmd = command; - if (pDevice->bCmdRunning == false) - s_bCommandComplete(pDevice); + ADD_ONE_WITH_WRAP_AROUND(priv->uCmdEnqueueIdx, CMD_Q_SIZE); + priv->cbFreeCmdQueue--; + + if (priv->bCmdRunning == false) + s_bCommandComplete(priv); return true; -- cgit From 4e3af0fa6779c2779ad56575e7f5e965d2c30c07 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:47 +0100 Subject: staging: vt6656: vResetCommandTimer remove camel case pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 76e7f78e179e..9130f146e112 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -207,12 +207,12 @@ int bScheduleCommand(struct vnt_private *priv, CMD_CODE command, u8 *item0) } -void vResetCommandTimer(struct vnt_private *pDevice) +void vResetCommandTimer(struct vnt_private *priv) { - pDevice->cbFreeCmdQueue = CMD_Q_SIZE; - pDevice->uCmdDequeueIdx = 0; - pDevice->uCmdEnqueueIdx = 0; - pDevice->eCommandState = WLAN_CMD_IDLE; - pDevice->bCmdRunning = false; - pDevice->bCmdClear = false; + priv->cbFreeCmdQueue = CMD_Q_SIZE; + priv->uCmdDequeueIdx = 0; + priv->uCmdEnqueueIdx = 0; + priv->eCommandState = WLAN_CMD_IDLE; + priv->bCmdRunning = false; + priv->bCmdClear = false; } -- cgit From f7f048575727dca81f994590de3fbb62bceef4d9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 07:53:48 +0100 Subject: staging: vt6656: wcmd replace debug message with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 9130f146e112..ade0f8117af7 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -49,9 +49,6 @@ #include "rf.h" #include "channel.h" -static int msglevel = MSG_LEVEL_INFO; -//static int msglevel = MSG_LEVEL_DEBUG; - static int s_bCommandComplete(struct vnt_private *); static void vCommandTimerWait(struct vnt_private *priv, unsigned long msecs) @@ -108,8 +105,8 @@ void vRunCommand(struct work_struct *work) break; case WLAN_CMD_CHANGE_ANTENNA_START: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - "Change from Antenna%d to", (int)priv->dwRxAntennaSel); + dev_dbg(&priv->usb->dev, "Change from Antenna%d to", + priv->dwRxAntennaSel); if (priv->dwRxAntennaSel == 0) { priv->dwRxAntennaSel = 1; -- cgit From c971681aea99455738b2ffe26e22255c52b162c2 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 12 Jul 2014 11:36:23 +0200 Subject: Staging: bcm: Transmit.c: Replaced member accessing with variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Transmit.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c index cd27bd8a2e37..346c55da7228 100644 --- a/drivers/staging/bcm/Transmit.c +++ b/drivers/staging/bcm/Transmit.c @@ -89,6 +89,8 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH bool bHeaderSupressionEnabled = false; B_UINT16 uiClassifierRuleID; u16 QueueIndex = skb_get_queue_mapping(Packet); + struct bcm_packet_info *curr_packet_info = + &Adapter->PackInfo[QueueIndex]; struct bcm_leader Leader = {0}; if (Packet->len > MAX_DEVICE_DESC_SIZE) { @@ -99,7 +101,7 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH /* Get the Classifier Rule ID */ uiClassifierRuleID = *((UINT32 *) (Packet->cb) + SKB_CB_CLASSIFICATION_OFFSET); - bHeaderSupressionEnabled = Adapter->PackInfo[QueueIndex].bHeaderSuppressionEnabled + bHeaderSupressionEnabled = curr_packet_info->bHeaderSuppressionEnabled & Adapter->bPHSEnabled; if (Adapter->device_removed) { @@ -108,7 +110,7 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH } status = PHSTransmit(Adapter, &Packet, Vcid, uiClassifierRuleID, bHeaderSupressionEnabled, - (UINT *)&Packet->len, Adapter->PackInfo[QueueIndex].bEthCSSupport); + (UINT *)&Packet->len, curr_packet_info->bEthCSSupport); if (status != STATUS_SUCCESS) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, @@ -123,7 +125,7 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH else Leader.Status = LEADER_STATUS; - if (Adapter->PackInfo[QueueIndex].bEthCSSupport) { + if (curr_packet_info->bEthCSSupport) { Leader.PLength = Packet->len; if (skb_headroom(Packet) < LEADER_SIZE) { status = skb_cow(Packet, LEADER_SIZE); @@ -149,18 +151,18 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH } else { struct net_device_stats *netstats = &Adapter->dev->stats; - Adapter->PackInfo[QueueIndex].uiTotalTxBytes += Leader.PLength; + curr_packet_info->uiTotalTxBytes += Leader.PLength; netstats->tx_bytes += Leader.PLength; ++netstats->tx_packets; - Adapter->PackInfo[QueueIndex].uiCurrentTokenCount -= Leader.PLength << 3; - Adapter->PackInfo[QueueIndex].uiSentBytes += (Packet->len); - Adapter->PackInfo[QueueIndex].uiSentPackets++; - Adapter->PackInfo[QueueIndex].NumOfPacketsSent++; + curr_packet_info->uiCurrentTokenCount -= Leader.PLength << 3; + curr_packet_info->uiSentBytes += (Packet->len); + curr_packet_info->uiSentPackets++; + curr_packet_info->NumOfPacketsSent++; - atomic_dec(&Adapter->PackInfo[QueueIndex].uiPerSFTxResourceCount); - Adapter->PackInfo[QueueIndex].uiThisPeriodSentBytes += Leader.PLength; + atomic_dec(&curr_packet_info->uiPerSFTxResourceCount); + curr_packet_info->uiThisPeriodSentBytes += Leader.PLength; } atomic_dec(&Adapter->CurrNumFreeTxDesc); -- cgit From 358ed017c769a0d31ae9adf884cd0ee0192602d7 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 12 Jul 2014 11:36:24 +0200 Subject: Staging: bcm: Transmit.c: Line length / Whitespace cleanup Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Transmit.c | 57 ++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c index 346c55da7228..3dd3603edc8c 100644 --- a/drivers/staging/bcm/Transmit.c +++ b/drivers/staging/bcm/Transmit.c @@ -59,21 +59,27 @@ int SendControlPacket(struct bcm_mini_adapter *Adapter, char *pControlPacket) /* Update the netdevice statistics */ /* Dump Packet */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, "Leader Status: %x", PLeader->Status); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, "Leader VCID: %x", PLeader->Vcid); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, "Leader Length: %x", PLeader->PLength); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, + "Leader Status: %x", PLeader->Status); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, + "Leader VCID: %x", PLeader->Vcid); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, + "Leader Length: %x", PLeader->PLength); if (Adapter->device_removed) return 0; if (netif_msg_pktdata(Adapter)) print_hex_dump(KERN_DEBUG, PFX "tx control: ", DUMP_PREFIX_NONE, - 16, 1, pControlPacket, PLeader->PLength + LEADER_SIZE, 0); + 16, 1, pControlPacket, + PLeader->PLength + LEADER_SIZE, 0); Adapter->interface_transmit(Adapter->pvInterfaceAdapter, - pControlPacket, (PLeader->PLength + LEADER_SIZE)); + pControlPacket, + (PLeader->PLength + LEADER_SIZE)); atomic_dec(&Adapter->CurrNumFreeTxDesc); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, "<========="); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_CONTROL, DBG_LVL_ALL, + "<========="); return STATUS_SUCCESS; } @@ -99,18 +105,21 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH } /* Get the Classifier Rule ID */ - uiClassifierRuleID = *((UINT32 *) (Packet->cb) + SKB_CB_CLASSIFICATION_OFFSET); + uiClassifierRuleID = *((UINT32 *) (Packet->cb) + + SKB_CB_CLASSIFICATION_OFFSET); - bHeaderSupressionEnabled = curr_packet_info->bHeaderSuppressionEnabled - & Adapter->bPHSEnabled; + bHeaderSupressionEnabled = curr_packet_info->bHeaderSuppressionEnabled & + Adapter->bPHSEnabled; if (Adapter->device_removed) { status = STATUS_FAILURE; goto errExit; } - status = PHSTransmit(Adapter, &Packet, Vcid, uiClassifierRuleID, bHeaderSupressionEnabled, - (UINT *)&Packet->len, curr_packet_info->bEthCSSupport); + status = PHSTransmit(Adapter, &Packet, Vcid, uiClassifierRuleID, + bHeaderSupressionEnabled, + (UINT *)&Packet->len, + curr_packet_info->bEthCSSupport); if (status != STATUS_SUCCESS) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, @@ -130,7 +139,9 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH if (skb_headroom(Packet) < LEADER_SIZE) { status = skb_cow(Packet, LEADER_SIZE); if (status) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL, "bcm_transmit : Failed To Increase headRoom\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, NEXT_SEND, + DBG_LVL_ALL, + "bcm_transmit : Failed To Increase headRoom\n"); goto errExit; } } @@ -138,15 +149,20 @@ int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USH memcpy(Packet->data, &Leader, LEADER_SIZE); } else { Leader.PLength = Packet->len - ETH_HLEN; - memcpy((struct bcm_leader *)skb_pull(Packet, (ETH_HLEN - LEADER_SIZE)), &Leader, LEADER_SIZE); + memcpy((struct bcm_leader *)skb_pull(Packet, + (ETH_HLEN - LEADER_SIZE)), + &Leader, + LEADER_SIZE); } status = Adapter->interface_transmit(Adapter->pvInterfaceAdapter, - Packet->data, (Leader.PLength + LEADER_SIZE)); + Packet->data, + (Leader.PLength + LEADER_SIZE)); if (status) { ++Adapter->dev->stats.tx_errors; if (netif_msg_tx_err(Adapter)) - pr_info(PFX "%s: transmit error %d\n", Adapter->dev->name, + pr_info(PFX "%s: transmit error %d\n", + Adapter->dev->name, status); } else { struct net_device_stats *netstats = &Adapter->dev->stats; @@ -175,7 +191,8 @@ errExit: static int tx_pending(struct bcm_mini_adapter *Adapter) { return (atomic_read(&Adapter->TxPktAvail) - && MINIMUM_PENDING_DESCRIPTORS < atomic_read(&Adapter->CurrNumFreeTxDesc)) + && MINIMUM_PENDING_DESCRIPTORS < + atomic_read(&Adapter->CurrNumFreeTxDesc)) || Adapter->device_removed || (1 == Adapter->downloadDDR); } @@ -191,10 +208,11 @@ int tx_pkt_handler(struct bcm_mini_adapter *Adapter /**< pointer to adapter obje /* FIXME - the timeout looks like workaround for racey usage of TxPktAvail */ if (Adapter->LinkUpStatus) wait_event_timeout(Adapter->tx_packet_wait_queue, - tx_pending(Adapter), msecs_to_jiffies(10)); + tx_pending(Adapter), + msecs_to_jiffies(10)); else wait_event_interruptible(Adapter->tx_packet_wait_queue, - tx_pending(Adapter)); + tx_pending(Adapter)); if (Adapter->device_removed) break; @@ -228,7 +246,8 @@ int tx_pkt_handler(struct bcm_mini_adapter *Adapter /**< pointer to adapter obje LinkMessage(Adapter); } - if ((Adapter->IdleMode || Adapter->bShutStatus) && atomic_read(&Adapter->TotalPacketCount)) { + if ((Adapter->IdleMode || Adapter->bShutStatus) && + atomic_read(&Adapter->TotalPacketCount)) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL, "Device in Low Power mode...waking up"); -- cgit From 2349c05a615117c48e0ed3bf916a79fa693d57ae Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 12 Jul 2014 11:36:25 +0200 Subject: Staging: bcm: Transmit.c: Removed obvious comment Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Transmit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c index 3dd3603edc8c..05fae925cffb 100644 --- a/drivers/staging/bcm/Transmit.c +++ b/drivers/staging/bcm/Transmit.c @@ -200,7 +200,7 @@ static int tx_pending(struct bcm_mini_adapter *Adapter) * @ingroup tx_functions * Transmit thread */ -int tx_pkt_handler(struct bcm_mini_adapter *Adapter /**< pointer to adapter object*/) +int tx_pkt_handler(struct bcm_mini_adapter *Adapter) { int status = 0; -- cgit From 77bdc0a5c642ede28f90c2953ca8a2d668e8081e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 11:30:00 +0100 Subject: staging: vt6656: rf.c clean up channel and power tables Remove comments to channel number execpt where there is a change to 5gHz channel 15 named comments are already referenced in revision history in high-level comment. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 1077 +++++++++++++++++++++---------------------- 1 file changed, 515 insertions(+), 562 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 4124131fba20..f203ddeb637f 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -61,531 +61,484 @@ //}} static u8 al2230_init_table[CB_AL2230_INIT_SEQ][3] = { - {0x03, 0xF7, 0x90}, - {0x03, 0x33, 0x31}, - {0x01, 0xB8, 0x02}, - {0x00, 0xFF, 0xF3}, - {0x00, 0x05, 0xA4}, - {0x0F, 0x4D, 0xC5}, //RobertYu:20060814 - {0x08, 0x05, 0xB6}, - {0x01, 0x47, 0xC7}, - {0x00, 0x06, 0x88}, - {0x04, 0x03, 0xB9}, - {0x00, 0xDB, 0xBA}, - {0x00, 0x09, 0x9B}, - {0x0B, 0xDF, 0xFC}, - {0x00, 0x00, 0x0D}, - {0x00, 0x58, 0x0F} - }; + {0x03, 0xf7, 0x90}, + {0x03, 0x33, 0x31}, + {0x01, 0xb8, 0x02}, + {0x00, 0xff, 0xf3}, + {0x00, 0x05, 0xa4}, + {0x0f, 0x4d, 0xc5}, + {0x08, 0x05, 0xb6}, + {0x01, 0x47, 0xc7}, + {0x00, 0x06, 0x88}, + {0x04, 0x03, 0xb9}, + {0x00, 0xdb, 0xba}, + {0x00, 0x09, 0x9b}, + {0x0b, 0xdf, 0xfc}, + {0x00, 0x00, 0x0d}, + {0x00, 0x58, 0x0f} +}; static u8 al2230_channel_table0[CB_MAX_CHANNEL_24G][3] = { - {0x03, 0xF7, 0x90}, // channel = 1, Tf = 2412MHz - {0x03, 0xF7, 0x90}, // channel = 2, Tf = 2417MHz - {0x03, 0xE7, 0x90}, // channel = 3, Tf = 2422MHz - {0x03, 0xE7, 0x90}, // channel = 4, Tf = 2427MHz - {0x03, 0xF7, 0xA0}, // channel = 5, Tf = 2432MHz - {0x03, 0xF7, 0xA0}, // channel = 6, Tf = 2437MHz - {0x03, 0xE7, 0xA0}, // channel = 7, Tf = 2442MHz - {0x03, 0xE7, 0xA0}, // channel = 8, Tf = 2447MHz - {0x03, 0xF7, 0xB0}, // channel = 9, Tf = 2452MHz - {0x03, 0xF7, 0xB0}, // channel = 10, Tf = 2457MHz - {0x03, 0xE7, 0xB0}, // channel = 11, Tf = 2462MHz - {0x03, 0xE7, 0xB0}, // channel = 12, Tf = 2467MHz - {0x03, 0xF7, 0xC0}, // channel = 13, Tf = 2472MHz - {0x03, 0xE7, 0xC0} // channel = 14, Tf = 2412M - }; + {0x03, 0xf7, 0x90}, + {0x03, 0xf7, 0x90}, + {0x03, 0xe7, 0x90}, + {0x03, 0xe7, 0x90}, + {0x03, 0xf7, 0xa0}, + {0x03, 0xf7, 0xa0}, + {0x03, 0xe7, 0xa0}, + {0x03, 0xe7, 0xa0}, + {0x03, 0xf7, 0xb0}, + {0x03, 0xf7, 0xb0}, + {0x03, 0xe7, 0xb0}, + {0x03, 0xe7, 0xb0}, + {0x03, 0xf7, 0xc0}, + {0x03, 0xe7, 0xc0} +}; static u8 al2230_channel_table1[CB_MAX_CHANNEL_24G][3] = { - {0x03, 0x33, 0x31}, // channel = 1, Tf = 2412MHz - {0x0B, 0x33, 0x31}, // channel = 2, Tf = 2417MHz - {0x03, 0x33, 0x31}, // channel = 3, Tf = 2422MHz - {0x0B, 0x33, 0x31}, // channel = 4, Tf = 2427MHz - {0x03, 0x33, 0x31}, // channel = 5, Tf = 2432MHz - {0x0B, 0x33, 0x31}, // channel = 6, Tf = 2437MHz - {0x03, 0x33, 0x31}, // channel = 7, Tf = 2442MHz - {0x0B, 0x33, 0x31}, // channel = 8, Tf = 2447MHz - {0x03, 0x33, 0x31}, // channel = 9, Tf = 2452MHz - {0x0B, 0x33, 0x31}, // channel = 10, Tf = 2457MHz - {0x03, 0x33, 0x31}, // channel = 11, Tf = 2462MHz - {0x0B, 0x33, 0x31}, // channel = 12, Tf = 2467MHz - {0x03, 0x33, 0x31}, // channel = 13, Tf = 2472MHz - {0x06, 0x66, 0x61} // channel = 14, Tf = 2412M - }; - -// 40MHz reference frequency -// Need to Pull PLLON(PE3) low when writing channel registers through 3-wire. + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x06, 0x66, 0x61} +}; + static u8 al7230_init_table[CB_AL7230_INIT_SEQ][3] = { - {0x20, 0x37, 0x90}, // Channel1 // Need modify for 11a - {0x13, 0x33, 0x31}, // Channel1 // Need modify for 11a - {0x84, 0x1F, 0xF2}, // Need modify for 11a: 451FE2 - {0x3F, 0xDF, 0xA3}, // Need modify for 11a: 5FDFA3 - {0x7F, 0xD7, 0x84}, // 11b/g // Need modify for 11a - //0x802B4500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 8D1B45 - // RoberYu:20050113, Rev0.47 Regsiter Setting Guide - {0x80, 0x2B, 0x55}, // Need modify for 11a: 8D1B55 - {0x56, 0xAF, 0x36}, - {0xCE, 0x02, 0x07}, // Need modify for 11a: 860207 - {0x6E, 0xBC, 0x98}, - {0x22, 0x1B, 0xB9}, - {0xE0, 0x00, 0x0A}, // Need modify for 11a: E0600A - {0x08, 0x03, 0x1B}, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10) - //0x00093C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 00143C - // RoberYu:20050113, Rev0.47 Regsiter Setting Guide - {0x00, 0x0A, 0x3C}, // Need modify for 11a: 00143C - {0xFF, 0xFF, 0xFD}, - {0x00, 0x00, 0x0E}, - {0x1A, 0xBA, 0x8F} // Need modify for 11a: 12BACF - }; + {0x20, 0x37, 0x90}, + {0x13, 0x33, 0x31}, + {0x84, 0x1f, 0xf2}, + {0x3f, 0xdf, 0xa3}, + {0x7f, 0xd7, 0x84}, + {0x80, 0x2b, 0x55}, + {0x56, 0xaf, 0x36}, + {0xce, 0x02, 0x07}, + {0x6e, 0xbc, 0x98}, + {0x22, 0x1b, 0xb9}, + {0xe0, 0x00, 0x0a}, + {0x08, 0x03, 0x1b}, + {0x00, 0x0a, 0x3c}, + {0xff, 0xff, 0xfd}, + {0x00, 0x00, 0x0e}, + {0x1a, 0xba, 0x8f} +}; static u8 al7230_init_table_amode[CB_AL7230_INIT_SEQ][3] = { - {0x2F, 0xF5, 0x20}, // Channel184 // Need modify for 11b/g - {0x00, 0x00, 0x01}, // Channel184 // Need modify for 11b/g - {0x45, 0x1F, 0xE2}, // Need modify for 11b/g - {0x5F, 0xDF, 0xA3}, // Need modify for 11b/g - {0x6F, 0xD7, 0x84}, // 11a // Need modify for 11b/g - {0x85, 0x3F, 0x55}, // Need modify for 11b/g, RoberYu:20050113 - {0x56, 0xAF, 0x36}, - {0xCE, 0x02, 0x07}, // Need modify for 11b/g - {0x6E, 0xBC, 0x98}, - {0x22, 0x1B, 0xB9}, - {0xE0, 0x60, 0x0A}, // Need modify for 11b/g - {0x08, 0x03, 0x1B}, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10) - {0x00, 0x14, 0x7C}, // Need modify for 11b/g - {0xFF, 0xFF, 0xFD}, - {0x00, 0x00, 0x0E}, - {0x12, 0xBA, 0xCF} // Need modify for 11b/g - }; + {0x2f, 0xf5, 0x20}, + {0x00, 0x00, 0x01}, + {0x45, 0x1f, 0xe2}, + {0x5f, 0xdf, 0xa3}, + {0x6f, 0xd7, 0x84}, + {0x85, 0x3f, 0x55}, + {0x56, 0xaf, 0x36}, + {0xce, 0x02, 0x07}, + {0x6e, 0xbc, 0x98}, + {0x22, 0x1b, 0xb9}, + {0xe0, 0x60, 0x0a}, + {0x08, 0x03, 0x1b}, + {0x00, 0x14, 0x7c}, + {0xff, 0xff, 0xfd}, + {0x00, 0x00, 0x0e}, + {0x12, 0xba, 0xcf} +}; static u8 al7230_channel_table0[CB_MAX_CHANNEL][3] = { - {0x20, 0x37, 0x90}, // channel = 1, Tf = 2412MHz - {0x20, 0x37, 0x90}, // channel = 2, Tf = 2417MHz - {0x20, 0x37, 0x90}, // channel = 3, Tf = 2422MHz - {0x20, 0x37, 0x90}, // channel = 4, Tf = 2427MHz - {0x20, 0x37, 0xA0}, // channel = 5, Tf = 2432MHz - {0x20, 0x37, 0xA0}, // channel = 6, Tf = 2437MHz - {0x20, 0x37, 0xA0}, // channel = 7, Tf = 2442MHz - {0x20, 0x37, 0xA0}, // channel = 8, Tf = 2447MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xB0}, // channel = 9, Tf = 2452MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xB0}, // channel = 10, Tf = 2457MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xB0}, // channel = 11, Tf = 2462MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xB0}, // channel = 12, Tf = 2467MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xC0}, // channel = 13, Tf = 2472MHz //RobertYu: 20050218, update for APNode 0.49 - {0x20, 0x37, 0xC0}, // channel = 14, Tf = 2484MHz - - // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - {0x0F, 0xF5, 0x20}, // channel = 183, Tf = 4915MHz (15) - {0x2F, 0xF5, 0x20}, // channel = 184, Tf = 4920MHz (16) - {0x0F, 0xF5, 0x20}, // channel = 185, Tf = 4925MHz (17) - {0x0F, 0xF5, 0x20}, // channel = 187, Tf = 4935MHz (18) - {0x2F, 0xF5, 0x20}, // channel = 188, Tf = 4940MHz (19) - {0x0F, 0xF5, 0x20}, // channel = 189, Tf = 4945MHz (20) - {0x2F, 0xF5, 0x30}, // channel = 192, Tf = 4960MHz (21) - {0x2F, 0xF5, 0x30}, // channel = 196, Tf = 4980MHz (22) - - // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, - // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - - {0x0F, 0xF5, 0x40}, // channel = 7, Tf = 5035MHz (23) - {0x2F, 0xF5, 0x40}, // channel = 8, Tf = 5040MHz (24) - {0x0F, 0xF5, 0x40}, // channel = 9, Tf = 5045MHz (25) - {0x0F, 0xF5, 0x40}, // channel = 11, Tf = 5055MHz (26) - {0x2F, 0xF5, 0x40}, // channel = 12, Tf = 5060MHz (27) - {0x2F, 0xF5, 0x50}, // channel = 16, Tf = 5080MHz (28) - {0x2F, 0xF5, 0x60}, // channel = 34, Tf = 5170MHz (29) - {0x2F, 0xF5, 0x60}, // channel = 36, Tf = 5180MHz (30) - {0x2F, 0xF5, 0x70}, // channel = 38, Tf = 5190MHz (31) //RobertYu: 20050218, update for APNode 0.49 - {0x2F, 0xF5, 0x70}, // channel = 40, Tf = 5200MHz (32) - {0x2F, 0xF5, 0x70}, // channel = 42, Tf = 5210MHz (33) - {0x2F, 0xF5, 0x70}, // channel = 44, Tf = 5220MHz (34) - {0x2F, 0xF5, 0x70}, // channel = 46, Tf = 5230MHz (35) - {0x2F, 0xF5, 0x70}, // channel = 48, Tf = 5240MHz (36) - {0x2F, 0xF5, 0x80}, // channel = 52, Tf = 5260MHz (37) - {0x2F, 0xF5, 0x80}, // channel = 56, Tf = 5280MHz (38) - {0x2F, 0xF5, 0x80}, // channel = 60, Tf = 5300MHz (39) - {0x2F, 0xF5, 0x90}, // channel = 64, Tf = 5320MHz (40) - - {0x2F, 0xF5, 0xC0}, // channel = 100, Tf = 5500MHz (41) - {0x2F, 0xF5, 0xC0}, // channel = 104, Tf = 5520MHz (42) - {0x2F, 0xF5, 0xC0}, // channel = 108, Tf = 5540MHz (43) - {0x2F, 0xF5, 0xD0}, // channel = 112, Tf = 5560MHz (44) - {0x2F, 0xF5, 0xD0}, // channel = 116, Tf = 5580MHz (45) - {0x2F, 0xF5, 0xD0}, // channel = 120, Tf = 5600MHz (46) - {0x2F, 0xF5, 0xE0}, // channel = 124, Tf = 5620MHz (47) - {0x2F, 0xF5, 0xE0}, // channel = 128, Tf = 5640MHz (48) - {0x2F, 0xF5, 0xE0}, // channel = 132, Tf = 5660MHz (49) - {0x2F, 0xF5, 0xF0}, // channel = 136, Tf = 5680MHz (50) - {0x2F, 0xF5, 0xF0}, // channel = 140, Tf = 5700MHz (51) - {0x2F, 0xF6, 0x00}, // channel = 149, Tf = 5745MHz (52) - {0x2F, 0xF6, 0x00}, // channel = 153, Tf = 5765MHz (53) - {0x2F, 0xF6, 0x00}, // channel = 157, Tf = 5785MHz (54) - {0x2F, 0xF6, 0x10}, // channel = 161, Tf = 5805MHz (55) - {0x2F, 0xF6, 0x10} // channel = 165, Tf = 5825MHz (56) - }; + {0x20, 0x37, 0x90}, + {0x20, 0x37, 0x90}, + {0x20, 0x37, 0x90}, + {0x20, 0x37, 0x90}, + {0x20, 0x37, 0xa0}, + {0x20, 0x37, 0xa0}, + {0x20, 0x37, 0xa0}, + {0x20, 0x37, 0xa0}, + {0x20, 0x37, 0xb0}, + {0x20, 0x37, 0xb0}, + {0x20, 0x37, 0xb0}, + {0x20, 0x37, 0xb0}, + {0x20, 0x37, 0xc0}, + {0x20, 0x37, 0xc0}, + {0x0f, 0xf5, 0x20}, /* channel 15 Tf = 4915MHz */ + {0x2f, 0xf5, 0x20}, + {0x0f, 0xf5, 0x20}, + {0x0f, 0xf5, 0x20}, + {0x2f, 0xf5, 0x20}, + {0x0f, 0xf5, 0x20}, + {0x2f, 0xf5, 0x30}, + {0x2f, 0xf5, 0x30}, + {0x0f, 0xf5, 0x40}, + {0x2f, 0xf5, 0x40}, + {0x0f, 0xf5, 0x40}, + {0x0f, 0xf5, 0x40}, + {0x2f, 0xf5, 0x40}, + {0x2f, 0xf5, 0x50}, + {0x2f, 0xf5, 0x60}, + {0x2f, 0xf5, 0x60}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x70}, + {0x2f, 0xf5, 0x80}, + {0x2f, 0xf5, 0x80}, + {0x2f, 0xf5, 0x80}, + {0x2f, 0xf5, 0x90}, + {0x2f, 0xf5, 0xc0}, + {0x2f, 0xf5, 0xc0}, + {0x2f, 0xf5, 0xc0}, + {0x2f, 0xf5, 0xd0}, + {0x2f, 0xf5, 0xd0}, + {0x2f, 0xf5, 0xd0}, + {0x2f, 0xf5, 0xe0}, + {0x2f, 0xf5, 0xe0}, + {0x2f, 0xf5, 0xe0}, + {0x2f, 0xf5, 0xf0}, + {0x2f, 0xf5, 0xf0}, + {0x2f, 0xf6, 0x00}, + {0x2f, 0xf6, 0x00}, + {0x2f, 0xf6, 0x00}, + {0x2f, 0xf6, 0x10}, + {0x2f, 0xf6, 0x10} +}; static u8 al7230_channel_table1[CB_MAX_CHANNEL][3] = { - {0x13, 0x33, 0x31}, // channel = 1, Tf = 2412MHz - {0x1B, 0x33, 0x31}, // channel = 2, Tf = 2417MHz - {0x03, 0x33, 0x31}, // channel = 3, Tf = 2422MHz - {0x0B, 0x33, 0x31}, // channel = 4, Tf = 2427MHz - {0x13, 0x33, 0x31}, // channel = 5, Tf = 2432MHz - {0x1B, 0x33, 0x31}, // channel = 6, Tf = 2437MHz - {0x03, 0x33, 0x31}, // channel = 7, Tf = 2442MHz - {0x0B, 0x33, 0x31}, // channel = 8, Tf = 2447MHz - {0x13, 0x33, 0x31}, // channel = 9, Tf = 2452MHz - {0x1B, 0x33, 0x31}, // channel = 10, Tf = 2457MHz - {0x03, 0x33, 0x31}, // channel = 11, Tf = 2462MHz - {0x0B, 0x33, 0x31}, // channel = 12, Tf = 2467MHz - {0x13, 0x33, 0x31}, // channel = 13, Tf = 2472MHz - {0x06, 0x66, 0x61}, // channel = 14, Tf = 2484MHz - - // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - {0x1D, 0x55, 0x51}, // channel = 183, Tf = 4915MHz (15) - {0x00, 0x00, 0x01}, // channel = 184, Tf = 4920MHz (16) - {0x02, 0xAA, 0xA1}, // channel = 185, Tf = 4925MHz (17) - {0x08, 0x00, 0x01}, // channel = 187, Tf = 4935MHz (18) - {0x0A, 0xAA, 0xA1}, // channel = 188, Tf = 4940MHz (19) - {0x0D, 0x55, 0x51}, // channel = 189, Tf = 4945MHz (20) - {0x15, 0x55, 0x51}, // channel = 192, Tf = 4960MHz (21) - {0x00, 0x00, 0x01}, // channel = 196, Tf = 4980MHz (22) - - // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, - // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - {0x1D, 0x55, 0x51}, // channel = 7, Tf = 5035MHz (23) - {0x00, 0x00, 0x01}, // channel = 8, Tf = 5040MHz (24) - {0x02, 0xAA, 0xA1}, // channel = 9, Tf = 5045MHz (25) - {0x08, 0x00, 0x01}, // channel = 11, Tf = 5055MHz (26) - {0x0A, 0xAA, 0xA1}, // channel = 12, Tf = 5060MHz (27) - {0x15, 0x55, 0x51}, // channel = 16, Tf = 5080MHz (28) - {0x05, 0x55, 0x51}, // channel = 34, Tf = 5170MHz (29) - {0x0A, 0xAA, 0xA1}, // channel = 36, Tf = 5180MHz (30) - {0x10, 0x00, 0x01}, // channel = 38, Tf = 5190MHz (31) - {0x15, 0x55, 0x51}, // channel = 40, Tf = 5200MHz (32) - {0x1A, 0xAA, 0xA1}, // channel = 42, Tf = 5210MHz (33) - {0x00, 0x00, 0x01}, // channel = 44, Tf = 5220MHz (34) - {0x05, 0x55, 0x51}, // channel = 46, Tf = 5230MHz (35) - {0x0A, 0xAA, 0xA1}, // channel = 48, Tf = 5240MHz (36) - {0x15, 0x55, 0x51}, // channel = 52, Tf = 5260MHz (37) - {0x00, 0x00, 0x01}, // channel = 56, Tf = 5280MHz (38) - {0x0A, 0xAA, 0xA1}, // channel = 60, Tf = 5300MHz (39) - {0x15, 0x55, 0x51}, // channel = 64, Tf = 5320MHz (40) - {0x15, 0x55, 0x51}, // channel = 100, Tf = 5500MHz (41) - {0x00, 0x00, 0x01}, // channel = 104, Tf = 5520MHz (42) - {0x0A, 0xAA, 0xA1}, // channel = 108, Tf = 5540MHz (43) - {0x15, 0x55, 0x51}, // channel = 112, Tf = 5560MHz (44) - {0x00, 0x00, 0x01}, // channel = 116, Tf = 5580MHz (45) - {0x0A, 0xAA, 0xA1}, // channel = 120, Tf = 5600MHz (46) - {0x15, 0x55, 0x51}, // channel = 124, Tf = 5620MHz (47) - {0x00, 0x00, 0x01}, // channel = 128, Tf = 5640MHz (48) - {0x0A, 0xAA, 0xA1}, // channel = 132, Tf = 5660MHz (49) - {0x15, 0x55, 0x51}, // channel = 136, Tf = 5680MHz (50) - {0x00, 0x00, 0x01}, // channel = 140, Tf = 5700MHz (51) - {0x18, 0x00, 0x01}, // channel = 149, Tf = 5745MHz (52) - {0x02, 0xAA, 0xA1}, // channel = 153, Tf = 5765MHz (53) - {0x0D, 0x55, 0x51}, // channel = 157, Tf = 5785MHz (54) - {0x18, 0x00, 0x01}, // channel = 161, Tf = 5805MHz (55) - {0x02, 0xAA, 0xB1} // channel = 165, Tf = 5825MHz (56) - }; + {0x13, 0x33, 0x31}, + {0x1b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x13, 0x33, 0x31}, + {0x1b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x13, 0x33, 0x31}, + {0x1b, 0x33, 0x31}, + {0x03, 0x33, 0x31}, + {0x0b, 0x33, 0x31}, + {0x13, 0x33, 0x31}, + {0x06, 0x66, 0x61}, + {0x1d, 0x55, 0x51}, /* channel = 15, Tf = 4915MHz */ + {0x00, 0x00, 0x01}, + {0x02, 0xaa, 0xa1}, + {0x08, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x0d, 0x55, 0x51}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x1d, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x02, 0xaa, 0xa1}, + {0x08, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x05, 0x55, 0x51}, + {0x0a, 0xaa, 0xa1}, + {0x10, 0x00, 0x01}, + {0x15, 0x55, 0x51}, + {0x1a, 0xaa, 0xa1}, + {0x00, 0x00, 0x01}, + {0x05, 0x55, 0x51}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x0a, 0xaa, 0xa1}, + {0x15, 0x55, 0x51}, + {0x00, 0x00, 0x01}, + {0x18, 0x00, 0x01}, + {0x02, 0xaa, 0xa1}, + {0x0d, 0x55, 0x51}, + {0x18, 0x00, 0x01}, + {0x02, 0xaa, 0xb1} +}; static u8 al7230_channel_table2[CB_MAX_CHANNEL][3] = { - {0x7F, 0xD7, 0x84}, // channel = 1, Tf = 2412MHz - {0x7F, 0xD7, 0x84}, // channel = 2, Tf = 2417MHz - {0x7F, 0xD7, 0x84}, // channel = 3, Tf = 2422MHz - {0x7F, 0xD7, 0x84}, // channel = 4, Tf = 2427MHz - {0x7F, 0xD7, 0x84}, // channel = 5, Tf = 2432MHz - {0x7F, 0xD7, 0x84}, // channel = 6, Tf = 2437MHz - {0x7F, 0xD7, 0x84}, // channel = 7, Tf = 2442MHz - {0x7F, 0xD7, 0x84}, // channel = 8, Tf = 2447MHz - {0x7F, 0xD7, 0x84}, // channel = 9, Tf = 2452MHz - {0x7F, 0xD7, 0x84}, // channel = 10, Tf = 2457MHz - {0x7F, 0xD7, 0x84}, // channel = 11, Tf = 2462MHz - {0x7F, 0xD7, 0x84}, // channel = 12, Tf = 2467MHz - {0x7F, 0xD7, 0x84}, // channel = 13, Tf = 2472MHz - {0x7F, 0xD7, 0x84}, // channel = 14, Tf = 2484MHz - - // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - {0x7F, 0xD7, 0x84}, // channel = 183, Tf = 4915MHz (15) - {0x6F, 0xD7, 0x84}, // channel = 184, Tf = 4920MHz (16) - {0x7F, 0xD7, 0x84}, // channel = 185, Tf = 4925MHz (17) - {0x7F, 0xD7, 0x84}, // channel = 187, Tf = 4935MHz (18) - {0x7F, 0xD7, 0x84}, // channel = 188, Tf = 4940MHz (19) - {0x7F, 0xD7, 0x84}, // channel = 189, Tf = 4945MHz (20) - {0x7F, 0xD7, 0x84}, // channel = 192, Tf = 4960MHz (21) - {0x6F, 0xD7, 0x84}, // channel = 196, Tf = 4980MHz (22) - - // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, - // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - {0x7F, 0xD7, 0x84}, // channel = 7, Tf = 5035MHz (23) - {0x6F, 0xD7, 0x84}, // channel = 8, Tf = 5040MHz (24) - {0x7F, 0xD7, 0x84}, // channel = 9, Tf = 5045MHz (25) - {0x7F, 0xD7, 0x84}, // channel = 11, Tf = 5055MHz (26) - {0x7F, 0xD7, 0x84}, // channel = 12, Tf = 5060MHz (27) - {0x7F, 0xD7, 0x84}, // channel = 16, Tf = 5080MHz (28) - {0x7F, 0xD7, 0x84}, // channel = 34, Tf = 5170MHz (29) - {0x7F, 0xD7, 0x84}, // channel = 36, Tf = 5180MHz (30) - {0x7F, 0xD7, 0x84}, // channel = 38, Tf = 5190MHz (31) - {0x7F, 0xD7, 0x84}, // channel = 40, Tf = 5200MHz (32) - {0x7F, 0xD7, 0x84}, // channel = 42, Tf = 5210MHz (33) - {0x6F, 0xD7, 0x84}, // channel = 44, Tf = 5220MHz (34) - {0x7F, 0xD7, 0x84}, // channel = 46, Tf = 5230MHz (35) - {0x7F, 0xD7, 0x84}, // channel = 48, Tf = 5240MHz (36) - {0x7F, 0xD7, 0x84}, // channel = 52, Tf = 5260MHz (37) - {0x6F, 0xD7, 0x84}, // channel = 56, Tf = 5280MHz (38) - {0x7F, 0xD7, 0x84}, // channel = 60, Tf = 5300MHz (39) - {0x7F, 0xD7, 0x84}, // channel = 64, Tf = 5320MHz (40) - {0x7F, 0xD7, 0x84}, // channel = 100, Tf = 5500MHz (41) - {0x6F, 0xD7, 0x84}, // channel = 104, Tf = 5520MHz (42) - {0x7F, 0xD7, 0x84}, // channel = 108, Tf = 5540MHz (43) - {0x7F, 0xD7, 0x84}, // channel = 112, Tf = 5560MHz (44) - {0x6F, 0xD7, 0x84}, // channel = 116, Tf = 5580MHz (45) - {0x7F, 0xD7, 0x84}, // channel = 120, Tf = 5600MHz (46) - {0x7F, 0xD7, 0x84}, // channel = 124, Tf = 5620MHz (47) - {0x6F, 0xD7, 0x84}, // channel = 128, Tf = 5640MHz (48) - {0x7F, 0xD7, 0x84}, // channel = 132, Tf = 5660MHz (49) - {0x7F, 0xD7, 0x84}, // channel = 136, Tf = 5680MHz (50) - {0x6F, 0xD7, 0x84}, // channel = 140, Tf = 5700MHz (51) - {0x7F, 0xD7, 0x84}, // channel = 149, Tf = 5745MHz (52) - {0x7F, 0xD7, 0x84}, // channel = 153, Tf = 5765MHz (53) - {0x7F, 0xD7, 0x84}, // channel = 157, Tf = 5785MHz (54) - {0x7F, 0xD7, 0x84}, // channel = 161, Tf = 5805MHz (55) - {0x7F, 0xD7, 0x84} // channel = 165, Tf = 5825MHz (56) - }; - -///{{RobertYu:20051111 + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, /* channel = 15 Tf = 4915MHz */ + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x6f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84}, + {0x7f, 0xd7, 0x84} +}; + static u8 vt3226_init_table[CB_VT3226_INIT_SEQ][3] = { - {0x03, 0xFF, 0x80}, - {0x02, 0x82, 0xA1}, - {0x03, 0xC6, 0xA2}, - {0x01, 0x97, 0x93}, - {0x03, 0x66, 0x64}, - {0x00, 0x61, 0xA5}, - {0x01, 0x7B, 0xD6}, - {0x00, 0x80, 0x17}, - {0x03, 0xF8, 0x08}, - {0x00, 0x02, 0x39}, //RobertYu:20051116 - {0x02, 0x00, 0x2A} - }; + {0x03, 0xff, 0x80}, + {0x02, 0x82, 0xa1}, + {0x03, 0xc6, 0xa2}, + {0x01, 0x97, 0x93}, + {0x03, 0x66, 0x64}, + {0x00, 0x61, 0xa5}, + {0x01, 0x7b, 0xd6}, + {0x00, 0x80, 0x17}, + {0x03, 0xf8, 0x08}, + {0x00, 0x02, 0x39}, + {0x02, 0x00, 0x2a} +}; static u8 vt3226d0_init_table[CB_VT3226_INIT_SEQ][3] = { - {0x03, 0xFF, 0x80}, - {0x03, 0x02, 0x21}, //RobertYu:20060327 - {0x03, 0xC6, 0xA2}, - {0x01, 0x97, 0x93}, - {0x03, 0x66, 0x64}, - {0x00, 0x71, 0xA5}, //RobertYu:20060103 - {0x01, 0x15, 0xC6}, //RobertYu:20060420 - {0x01, 0x2E, 0x07}, //RobertYu:20060420 - {0x00, 0x58, 0x08}, //RobertYu:20060111 - {0x00, 0x02, 0x79}, //RobertYu:20060420 - {0x02, 0x01, 0xAA} //RobertYu:20060523 - }; + {0x03, 0xff, 0x80}, + {0x03, 0x02, 0x21}, + {0x03, 0xc6, 0xa2}, + {0x01, 0x97, 0x93}, + {0x03, 0x66, 0x64}, + {0x00, 0x71, 0xa5}, + {0x01, 0x15, 0xc6}, + {0x01, 0x2e, 0x07}, + {0x00, 0x58, 0x08}, + {0x00, 0x02, 0x79}, + {0x02, 0x01, 0xaa} +}; static u8 vt3226_channel_table0[CB_MAX_CHANNEL_24G][3] = { - {0x01, 0x97, 0x83}, // channel = 1, Tf = 2412MHz - {0x01, 0x97, 0x83}, // channel = 2, Tf = 2417MHz - {0x01, 0x97, 0x93}, // channel = 3, Tf = 2422MHz - {0x01, 0x97, 0x93}, // channel = 4, Tf = 2427MHz - {0x01, 0x97, 0x93}, // channel = 5, Tf = 2432MHz - {0x01, 0x97, 0x93}, // channel = 6, Tf = 2437MHz - {0x01, 0x97, 0xA3}, // channel = 7, Tf = 2442MHz - {0x01, 0x97, 0xA3}, // channel = 8, Tf = 2447MHz - {0x01, 0x97, 0xA3}, // channel = 9, Tf = 2452MHz - {0x01, 0x97, 0xA3}, // channel = 10, Tf = 2457MHz - {0x01, 0x97, 0xB3}, // channel = 11, Tf = 2462MHz - {0x01, 0x97, 0xB3}, // channel = 12, Tf = 2467MHz - {0x01, 0x97, 0xB3}, // channel = 13, Tf = 2472MHz - {0x03, 0x37, 0xC3} // channel = 14, Tf = 2484MHz - }; + {0x01, 0x97, 0x83}, + {0x01, 0x97, 0x83}, + {0x01, 0x97, 0x93}, + {0x01, 0x97, 0x93}, + {0x01, 0x97, 0x93}, + {0x01, 0x97, 0x93}, + {0x01, 0x97, 0xa3}, + {0x01, 0x97, 0xa3}, + {0x01, 0x97, 0xa3}, + {0x01, 0x97, 0xa3}, + {0x01, 0x97, 0xb3}, + {0x01, 0x97, 0xb3}, + {0x01, 0x97, 0xb3}, + {0x03, 0x37, 0xc3} +}; static u8 vt3226_channel_table1[CB_MAX_CHANNEL_24G][3] = { - {0x02, 0x66, 0x64}, // channel = 1, Tf = 2412MHz - {0x03, 0x66, 0x64}, // channel = 2, Tf = 2417MHz - {0x00, 0x66, 0x64}, // channel = 3, Tf = 2422MHz - {0x01, 0x66, 0x64}, // channel = 4, Tf = 2427MHz - {0x02, 0x66, 0x64}, // channel = 5, Tf = 2432MHz - {0x03, 0x66, 0x64}, // channel = 6, Tf = 2437MHz - {0x00, 0x66, 0x64}, // channel = 7, Tf = 2442MHz - {0x01, 0x66, 0x64}, // channel = 8, Tf = 2447MHz - {0x02, 0x66, 0x64}, // channel = 9, Tf = 2452MHz - {0x03, 0x66, 0x64}, // channel = 10, Tf = 2457MHz - {0x00, 0x66, 0x64}, // channel = 11, Tf = 2462MHz - {0x01, 0x66, 0x64}, // channel = 12, Tf = 2467MHz - {0x02, 0x66, 0x64}, // channel = 13, Tf = 2472MHz - {0x00, 0xCC, 0xC4} // channel = 14, Tf = 2484MHz - }; -///}}RobertYu - -//{{RobertYu:20060502, TWIF 1.14, LO Current for 11b mode + {0x02, 0x66, 0x64}, + {0x03, 0x66, 0x64}, + {0x00, 0x66, 0x64}, + {0x01, 0x66, 0x64}, + {0x02, 0x66, 0x64}, + {0x03, 0x66, 0x64}, + {0x00, 0x66, 0x64}, + {0x01, 0x66, 0x64}, + {0x02, 0x66, 0x64}, + {0x03, 0x66, 0x64}, + {0x00, 0x66, 0x64}, + {0x01, 0x66, 0x64}, + {0x02, 0x66, 0x64}, + {0x00, 0xcc, 0xc4} +}; + static const u32 vt3226d0_lo_current_table[CB_MAX_CHANNEL_24G] = { - 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz - 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz - 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz - 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz - 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz - 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz - 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW // channel = 14, Tf = 2484MHz + 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, + 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW }; -//}} -//{{RobertYu:20060609 static u8 vt3342a0_init_table[CB_VT3342_INIT_SEQ][3] = { /* 11b/g mode */ - {0x03, 0xFF, 0x80}, //update for mode// - {0x02, 0x08, 0x81}, - {0x00, 0xC6, 0x02}, - {0x03, 0xC5, 0x13}, // channel6 - {0x00, 0xEE, 0xE4}, // channel6 - {0x00, 0x71, 0xA5}, - {0x01, 0x75, 0x46}, - {0x01, 0x40, 0x27}, - {0x01, 0x54, 0x08}, - {0x00, 0x01, 0x69}, - {0x02, 0x00, 0xAA}, - {0x00, 0x08, 0xCB}, - {0x01, 0x70, 0x0C} - }; - - //11b/g mode: 0x03, 0xFF, 0x80, - //11a mode: 0x03, 0xFF, 0xC0, - - // channel44, 5220MHz 0x00C402 - // channel56, 5280MHz 0x00C402 for disable Frac - // other channels 0x00C602 + {0x03, 0xff, 0x80}, + {0x02, 0x08, 0x81}, + {0x00, 0xc6, 0x02}, + {0x03, 0xc5, 0x13}, + {0x00, 0xee, 0xe4}, + {0x00, 0x71, 0xa5}, + {0x01, 0x75, 0x46}, + {0x01, 0x40, 0x27}, + {0x01, 0x54, 0x08}, + {0x00, 0x01, 0x69}, + {0x02, 0x00, 0xaa}, + {0x00, 0x08, 0xcb}, + {0x01, 0x70, 0x0c} +}; static u8 vt3342_channel_table0[CB_MAX_CHANNEL][3] = { - {0x02, 0x05, 0x03}, // channel = 1, Tf = 2412MHz - {0x01, 0x15, 0x03}, // channel = 2, Tf = 2417MHz - {0x03, 0xC5, 0x03}, // channel = 3, Tf = 2422MHz - {0x02, 0x65, 0x03}, // channel = 4, Tf = 2427MHz - {0x01, 0x15, 0x13}, // channel = 5, Tf = 2432MHz - {0x03, 0xC5, 0x13}, // channel = 6, Tf = 2437MHz - {0x02, 0x05, 0x13}, // channel = 7, Tf = 2442MHz - {0x01, 0x15, 0x13}, // channel = 8, Tf = 2447MHz - {0x03, 0xC5, 0x13}, // channel = 9, Tf = 2452MHz - {0x02, 0x65, 0x13}, // channel = 10, Tf = 2457MHz - {0x01, 0x15, 0x23}, // channel = 11, Tf = 2462MHz - {0x03, 0xC5, 0x23}, // channel = 12, Tf = 2467MHz - {0x02, 0x05, 0x23}, // channel = 13, Tf = 2472MHz - {0x00, 0xD5, 0x23}, // channel = 14, Tf = 2484MHz - - // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - {0x01, 0x15, 0x13}, // channel = 183, Tf = 4915MHz (15), TBD - {0x01, 0x15, 0x13}, // channel = 184, Tf = 4920MHz (16), TBD - {0x01, 0x15, 0x13}, // channel = 185, Tf = 4925MHz (17), TBD - {0x01, 0x15, 0x13}, // channel = 187, Tf = 4935MHz (18), TBD - {0x01, 0x15, 0x13}, // channel = 188, Tf = 4940MHz (19), TBD - {0x01, 0x15, 0x13}, // channel = 189, Tf = 4945MHz (20), TBD - {0x01, 0x15, 0x13}, // channel = 192, Tf = 4960MHz (21), TBD - {0x01, 0x15, 0x13}, // channel = 196, Tf = 4980MHz (22), TBD - - // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, - // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - {0x01, 0x15, 0x13}, // channel = 7, Tf = 5035MHz (23), TBD - {0x01, 0x15, 0x13}, // channel = 8, Tf = 5040MHz (24), TBD - {0x01, 0x15, 0x13}, // channel = 9, Tf = 5045MHz (25), TBD - {0x01, 0x15, 0x13}, // channel = 11, Tf = 5055MHz (26), TBD - {0x01, 0x15, 0x13}, // channel = 12, Tf = 5060MHz (27), TBD - {0x01, 0x15, 0x13}, // channel = 16, Tf = 5080MHz (28), TBD - {0x01, 0x15, 0x13}, // channel = 34, Tf = 5170MHz (29), TBD - {0x01, 0x55, 0x63}, // channel = 36, Tf = 5180MHz (30) - {0x01, 0x55, 0x63}, // channel = 38, Tf = 5190MHz (31), TBD - {0x02, 0xA5, 0x63}, // channel = 40, Tf = 5200MHz (32) - {0x02, 0xA5, 0x63}, // channel = 42, Tf = 5210MHz (33), TBD - {0x00, 0x05, 0x73}, // channel = 44, Tf = 5220MHz (34) - {0x00, 0x05, 0x73}, // channel = 46, Tf = 5230MHz (35), TBD - {0x01, 0x55, 0x73}, // channel = 48, Tf = 5240MHz (36) - {0x02, 0xA5, 0x73}, // channel = 52, Tf = 5260MHz (37) - {0x00, 0x05, 0x83}, // channel = 56, Tf = 5280MHz (38) - {0x01, 0x55, 0x83}, // channel = 60, Tf = 5300MHz (39) - {0x02, 0xA5, 0x83}, // channel = 64, Tf = 5320MHz (40) - - {0x02, 0xA5, 0x83}, // channel = 100, Tf = 5500MHz (41), TBD - {0x02, 0xA5, 0x83}, // channel = 104, Tf = 5520MHz (42), TBD - {0x02, 0xA5, 0x83}, // channel = 108, Tf = 5540MHz (43), TBD - {0x02, 0xA5, 0x83}, // channel = 112, Tf = 5560MHz (44), TBD - {0x02, 0xA5, 0x83}, // channel = 116, Tf = 5580MHz (45), TBD - {0x02, 0xA5, 0x83}, // channel = 120, Tf = 5600MHz (46), TBD - {0x02, 0xA5, 0x83}, // channel = 124, Tf = 5620MHz (47), TBD - {0x02, 0xA5, 0x83}, // channel = 128, Tf = 5640MHz (48), TBD - {0x02, 0xA5, 0x83}, // channel = 132, Tf = 5660MHz (49), TBD - {0x02, 0xA5, 0x83}, // channel = 136, Tf = 5680MHz (50), TBD - {0x02, 0xA5, 0x83}, // channel = 140, Tf = 5700MHz (51), TBD - - {0x00, 0x05, 0xF3}, // channel = 149, Tf = 5745MHz (52) - {0x01, 0x56, 0x03}, // channel = 153, Tf = 5765MHz (53) - {0x02, 0xA6, 0x03}, // channel = 157, Tf = 5785MHz (54) - {0x00, 0x06, 0x03}, // channel = 161, Tf = 5805MHz (55) - {0x00, 0x06, 0x03} // channel = 165, Tf = 5825MHz (56), TBD - }; + {0x02, 0x05, 0x03}, + {0x01, 0x15, 0x03}, + {0x03, 0xc5, 0x03}, + {0x02, 0x65, 0x03}, + {0x01, 0x15, 0x13}, + {0x03, 0xc5, 0x13}, + {0x02, 0x05, 0x13}, + {0x01, 0x15, 0x13}, + {0x03, 0xc5, 0x13}, + {0x02, 0x65, 0x13}, + {0x01, 0x15, 0x23}, + {0x03, 0xc5, 0x23}, + {0x02, 0x05, 0x23}, + {0x00, 0xd5, 0x23}, + {0x01, 0x15, 0x13}, /* channel = 15 Tf = 4915MHz */ + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x15, 0x13}, + {0x01, 0x55, 0x63}, + {0x01, 0x55, 0x63}, + {0x02, 0xa5, 0x63}, + {0x02, 0xa5, 0x63}, + {0x00, 0x05, 0x73}, + {0x00, 0x05, 0x73}, + {0x01, 0x55, 0x73}, + {0x02, 0xa5, 0x73}, + {0x00, 0x05, 0x83}, + {0x01, 0x55, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x02, 0xa5, 0x83}, + {0x00, 0x05, 0xF3}, + {0x01, 0x56, 0x03}, + {0x02, 0xa6, 0x03}, + {0x00, 0x06, 0x03}, + {0x00, 0x06, 0x03} +}; static u8 vt3342_channel_table1[CB_MAX_CHANNEL][3] = { - {0x01, 0x99, 0x94}, // channel = 1, Tf = 2412MHz - {0x02, 0x44, 0x44}, // channel = 2, Tf = 2417MHz - {0x02, 0xEE, 0xE4}, // channel = 3, Tf = 2422MHz - {0x03, 0x99, 0x94}, // channel = 4, Tf = 2427MHz - {0x00, 0x44, 0x44}, // channel = 5, Tf = 2432MHz - {0x00, 0xEE, 0xE4}, // channel = 6, Tf = 2437MHz - {0x01, 0x99, 0x94}, // channel = 7, Tf = 2442MHz - {0x02, 0x44, 0x44}, // channel = 8, Tf = 2447MHz - {0x02, 0xEE, 0xE4}, // channel = 9, Tf = 2452MHz - {0x03, 0x99, 0x94}, // channel = 10, Tf = 2457MHz - {0x00, 0x44, 0x44}, // channel = 11, Tf = 2462MHz - {0x00, 0xEE, 0xE4}, // channel = 12, Tf = 2467MHz - {0x01, 0x99, 0x94}, // channel = 13, Tf = 2472MHz - {0x03, 0x33, 0x34}, // channel = 14, Tf = 2484MHz - - // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) - {0x00, 0x44, 0x44}, // channel = 183, Tf = 4915MHz (15), TBD - {0x00, 0x44, 0x44}, // channel = 184, Tf = 4920MHz (16), TBD - {0x00, 0x44, 0x44}, // channel = 185, Tf = 4925MHz (17), TBD - {0x00, 0x44, 0x44}, // channel = 187, Tf = 4935MHz (18), TBD - {0x00, 0x44, 0x44}, // channel = 188, Tf = 4940MHz (19), TBD - {0x00, 0x44, 0x44}, // channel = 189, Tf = 4945MHz (20), TBD - {0x00, 0x44, 0x44}, // channel = 192, Tf = 4960MHz (21), TBD - {0x00, 0x44, 0x44}, // channel = 196, Tf = 4980MHz (22), TBD - - // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, - // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - {0x00, 0x44, 0x44}, // channel = 7, Tf = 5035MHz (23), TBD - {0x00, 0x44, 0x44}, // channel = 8, Tf = 5040MHz (24), TBD - {0x00, 0x44, 0x44}, // channel = 9, Tf = 5045MHz (25), TBD - {0x00, 0x44, 0x44}, // channel = 11, Tf = 5055MHz (26), TBD - {0x00, 0x44, 0x44}, // channel = 12, Tf = 5060MHz (27), TBD - {0x00, 0x44, 0x44}, // channel = 16, Tf = 5080MHz (28), TBD - {0x00, 0x44, 0x44}, // channel = 34, Tf = 5170MHz (29), TBD - {0x01, 0x55, 0x54}, // channel = 36, Tf = 5180MHz (30) - {0x01, 0x55, 0x54}, // channel = 38, Tf = 5190MHz (31), TBD - {0x02, 0xAA, 0xA4}, // channel = 40, Tf = 5200MHz (32) - {0x02, 0xAA, 0xA4}, // channel = 42, Tf = 5210MHz (33), TBD - {0x00, 0x00, 0x04}, // channel = 44, Tf = 5220MHz (34) - {0x00, 0x00, 0x04}, // channel = 46, Tf = 5230MHz (35), TBD - {0x01, 0x55, 0x54}, // channel = 48, Tf = 5240MHz (36) - {0x02, 0xAA, 0xA4}, // channel = 52, Tf = 5260MHz (37) - {0x00, 0x00, 0x04}, // channel = 56, Tf = 5280MHz (38) - {0x01, 0x55, 0x54}, // channel = 60, Tf = 5300MHz (39) - {0x02, 0xAA, 0xA4}, // channel = 64, Tf = 5320MHz (40) - {0x02, 0xAA, 0xA4}, // channel = 100, Tf = 5500MHz (41), TBD - {0x02, 0xAA, 0xA4}, // channel = 104, Tf = 5520MHz (42), TBD - {0x02, 0xAA, 0xA4}, // channel = 108, Tf = 5540MHz (43), TBD - {0x02, 0xAA, 0xA4}, // channel = 112, Tf = 5560MHz (44), TBD - {0x02, 0xAA, 0xA4}, // channel = 116, Tf = 5580MHz (45), TBD - {0x02, 0xAA, 0xA4}, // channel = 120, Tf = 5600MHz (46), TBD - {0x02, 0xAA, 0xA4}, // channel = 124, Tf = 5620MHz (47), TBD - {0x02, 0xAA, 0xA4}, // channel = 128, Tf = 5640MHz (48), TBD - {0x02, 0xAA, 0xA4}, // channel = 132, Tf = 5660MHz (49), TBD - {0x02, 0xAA, 0xA4}, // channel = 136, Tf = 5680MHz (50), TBD - {0x02, 0xAA, 0xA4}, // channel = 140, Tf = 5700MHz (51), TBD - {0x03, 0x00, 0x04}, // channel = 149, Tf = 5745MHz (52) - {0x00, 0x55, 0x54}, // channel = 153, Tf = 5765MHz (53) - {0x01, 0xAA, 0xA4}, // channel = 157, Tf = 5785MHz (54) - {0x03, 0x00, 0x04}, // channel = 161, Tf = 5805MHz (55) - {0x03, 0x00, 0x04} // channel = 165, Tf = 5825MHz (56), TBD - }; + {0x01, 0x99, 0x94}, + {0x02, 0x44, 0x44}, + {0x02, 0xee, 0xe4}, + {0x03, 0x99, 0x94}, + {0x00, 0x44, 0x44}, + {0x00, 0xee, 0xe4}, + {0x01, 0x99, 0x94}, + {0x02, 0x44, 0x44}, + {0x02, 0xee, 0xe4}, + {0x03, 0x99, 0x94}, + {0x00, 0x44, 0x44}, + {0x00, 0xee, 0xe4}, + {0x01, 0x99, 0x94}, + {0x03, 0x33, 0x34}, + {0x00, 0x44, 0x44}, /* channel = 15 Tf = 4915MHz */ + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x00, 0x44, 0x44}, + {0x01, 0x55, 0x54}, + {0x01, 0x55, 0x54}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x00, 0x00, 0x04}, + {0x00, 0x00, 0x04}, + {0x01, 0x55, 0x54}, + {0x02, 0xaa, 0xa4}, + {0x00, 0x00, 0x04}, + {0x01, 0x55, 0x54}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x02, 0xaa, 0xa4}, + {0x03, 0x00, 0x04}, + {0x00, 0x55, 0x54}, + {0x01, 0xaa, 0xa4}, + {0x03, 0x00, 0x04}, + {0x03, 0x00, 0x04} +}; /*+ * @@ -594,71 +547,71 @@ static u8 vt3342_channel_table1[CB_MAX_CHANNEL][3] = { -*/ static const u32 al2230_power_table[AL2230_PWR_IDX_LEN] = { - 0x04040900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04041900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04042900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04043900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04044900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04045900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04046900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04047900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04048900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04049900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0404F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04050900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04051900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04052900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04053900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04054900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04055900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04056900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04057900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04058900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04059900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0405F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04060900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04061900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04062900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04063900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04064900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04065900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04066900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04067900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04068900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04069900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0406F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04070900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04071900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04072900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04073900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04074900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04075900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04076900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04077900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04078900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x04079900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, - 0x0407F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW - }; + 0x04040900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04041900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04042900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04043900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04044900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04045900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04046900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04047900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04048900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04049900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0404f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04050900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04051900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04052900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04053900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04054900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04055900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04056900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04057900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04058900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04059900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0405f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04060900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04061900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04062900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04063900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04064900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04065900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04066900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04067900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04068900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04069900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0406f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04070900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04071900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04072900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04073900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04074900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04075900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04076900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04077900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04078900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x04079900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, + 0x0407f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW +}; //{{ RobertYu:20050103, Channel 11a Number To Index // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) -- cgit From 0e2b6fe1f4cef04faecc2fbac833d296bd8c915e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 11:30:01 +0100 Subject: staging: vt6656: rf.c remove dead code RFaby11aChannelIndex Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 31 ------------------------------- drivers/staging/vt6656/rf.h | 2 -- 2 files changed, 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index f203ddeb637f..1661f8ee595b 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -613,37 +613,6 @@ static const u32 al2230_power_table[AL2230_PWR_IDX_LEN] = { 0x0407f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW }; -//{{ RobertYu:20050103, Channel 11a Number To Index -// 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22) -// 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, -// 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) - -const u8 RFaby11aChannelIndex[200] = { - // 1 2 3 4 5 6 7 8 9 10 - 00, 00, 00, 00, 00, 00, 23, 24, 25, 00, // 10 - 26, 27, 00, 00, 00, 28, 00, 00, 00, 00, // 20 - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 30 - 00, 00, 00, 29, 00, 30, 00, 31, 00, 32, // 40 - 00, 33, 00, 34, 00, 35, 00, 36, 00, 00, // 50 - 00, 37, 00, 00, 00, 38, 00, 00, 00, 39, // 60 - 00, 00, 00, 40, 00, 00, 00, 00, 00, 00, // 70 - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 80 - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, // 90 - 00, 00, 00, 00, 00, 00, 00, 00, 00, 41, //100 - - 00, 00, 00, 42, 00, 00, 00, 43, 00, 00, //110 - 00, 44, 00, 00, 00, 45, 00, 00, 00, 46, //120 - 00, 00, 00, 47, 00, 00, 00, 48, 00, 00, //130 - 00, 49, 00, 00, 00, 50, 00, 00, 00, 51, //140 - 00, 00, 00, 00, 00, 00, 00, 00, 52, 00, //150 - 00, 00, 53, 00, 00, 00, 54, 00, 00, 00, //160 - 55, 00, 00, 00, 56, 00, 00, 00, 00, 00, //170 - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, //180 - 00, 00, 15, 16, 17, 00, 18, 19, 20, 00, //190 - 00, 21, 00, 00, 00, 22, 00, 00, 00, 00 //200 -}; -//}} RobertYu - /* * Description: Write to IF/RF, by embedded programming * diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index cb331518568e..d2347b498861 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -55,8 +55,6 @@ #define VNT_RF_MAX_POWER 0x3f -extern const u8 RFaby11aChannelIndex[200]; - int vnt_rf_write_embedded(struct vnt_private *, u32); int vnt_rf_setpower(struct vnt_private *, u32, u32); int vnt_rf_set_txpower(struct vnt_private *, u8, u32); -- cgit From f1c840d55b2d8a015dec81dd4728a0587cf23811 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 11:30:02 +0100 Subject: staging: vt6656: vnt_rf_write_embedded add reg length and IFREGCTL_REGW The rf register always have *_REG_LEN and IFREGCTL_REGW macros added. *_REG_LEN is always 23(0x17) replace them with VNT_RF_REG_LEN. Remove *_REG_LEN and IFREGCTL_REGW from tables and vnt_rf_set_txpower and apply VNT_RF_REG_LEN and IFREGCTL_REGW in vnt_rf_write_embedded Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 219 ++++++++++++++++++++------------------------ drivers/staging/vt6656/rf.h | 1 + 2 files changed, 99 insertions(+), 121 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 1661f8ee595b..1c3b3faf9a5d 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -40,22 +40,18 @@ #include "baseband.h" #include "usbpipe.h" -#define BY_AL2230_REG_LEN 23 //24bit #define CB_AL2230_INIT_SEQ 15 #define AL2230_PWR_IDX_LEN 64 -#define BY_AL7230_REG_LEN 23 //24bit #define CB_AL7230_INIT_SEQ 16 #define AL7230_PWR_IDX_LEN 64 //{{RobertYu:20051111 -#define BY_VT3226_REG_LEN 23 #define CB_VT3226_INIT_SEQ 11 #define VT3226_PWR_IDX_LEN 64 //}} //{{RobertYu:20060609 -#define BY_VT3342_REG_LEN 23 #define CB_VT3342_INIT_SEQ 13 #define VT3342_PWR_IDX_LEN 64 //}} @@ -390,20 +386,20 @@ static u8 vt3226_channel_table1[CB_MAX_CHANNEL_24G][3] = { }; static const u32 vt3226d0_lo_current_table[CB_MAX_CHANNEL_24G] = { - 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0235c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0335c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW, - 0x0135c600 + (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW + 0x0135c600, + 0x0135c600, + 0x0235c600, + 0x0235c600, + 0x0235c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0335c600, + 0x0135c600 }; static u8 vt3342a0_init_table[CB_VT3342_INIT_SEQ][3] = { /* 11b/g mode */ @@ -547,70 +543,70 @@ static u8 vt3342_channel_table1[CB_MAX_CHANNEL][3] = { -*/ static const u32 al2230_power_table[AL2230_PWR_IDX_LEN] = { - 0x04040900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04041900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04042900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04043900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04044900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04045900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04046900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04047900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04048900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04049900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0404f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04050900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04051900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04052900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04053900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04054900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04055900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04056900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04057900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04058900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04059900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0405f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04060900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04061900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04062900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04063900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04064900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04065900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04066900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04067900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04068900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04069900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0406f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04070900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04071900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04072900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04073900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04074900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04075900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04076900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04077900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04078900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x04079900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407a900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407b900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407c900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407d900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407e900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW, - 0x0407f900 + (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW + 0x04040900, + 0x04041900, + 0x04042900, + 0x04043900, + 0x04044900, + 0x04045900, + 0x04046900, + 0x04047900, + 0x04048900, + 0x04049900, + 0x0404a900, + 0x0404b900, + 0x0404c900, + 0x0404d900, + 0x0404e900, + 0x0404f900, + 0x04050900, + 0x04051900, + 0x04052900, + 0x04053900, + 0x04054900, + 0x04055900, + 0x04056900, + 0x04057900, + 0x04058900, + 0x04059900, + 0x0405a900, + 0x0405b900, + 0x0405c900, + 0x0405d900, + 0x0405e900, + 0x0405f900, + 0x04060900, + 0x04061900, + 0x04062900, + 0x04063900, + 0x04064900, + 0x04065900, + 0x04066900, + 0x04067900, + 0x04068900, + 0x04069900, + 0x0406a900, + 0x0406b900, + 0x0406c900, + 0x0406d900, + 0x0406e900, + 0x0406f900, + 0x04070900, + 0x04071900, + 0x04072900, + 0x04073900, + 0x04074900, + 0x04075900, + 0x04076900, + 0x04077900, + 0x04078900, + 0x04079900, + 0x0407a900, + 0x0407b900, + 0x0407c900, + 0x0407d900, + 0x0407e900, + 0x0407f900 }; /* @@ -629,6 +625,8 @@ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data) { u8 reg_data[4]; + data |= (VNT_RF_REG_LEN << 3) | IFREGCTL_REGW; + reg_data[0] = (u8)data; reg_data[1] = (u8)(data >> 8); reg_data[2] = (u8)(data >> 16); @@ -752,11 +750,9 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) ret &= vnt_rf_write_embedded(priv, al2230_power_table[power]); if (rate <= RATE_11M) - ret &= vnt_rf_write_embedded(priv, 0x0001b400 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x0001b400); else - ret &= vnt_rf_write_embedded(priv, 0x0005a400 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x0005a400); break; case RF_AL2230S: if (power >= AL2230_PWR_IDX_LEN) @@ -765,25 +761,19 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) ret &= vnt_rf_write_embedded(priv, al2230_power_table[power]); if (rate <= RATE_11M) { - ret &= vnt_rf_write_embedded(priv, 0x040c1400 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); - ret &= vnt_rf_write_embedded(priv, 0x00299b00 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x040c1400); + ret &= vnt_rf_write_embedded(priv, 0x00299b00); } else { - ret &= vnt_rf_write_embedded(priv, 0x0005a400 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); - ret &= vnt_rf_write_embedded(priv, 0x00099b00 + - (BY_AL2230_REG_LEN << 3) + IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x0005a400); + ret &= vnt_rf_write_embedded(priv, 0x00099b00); } break; case RF_AIROHA7230: if (rate <= RATE_11M) - ret &= vnt_rf_write_embedded(priv, 0x111bb900 + - (BY_AL7230_REG_LEN << 3)+IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x111bb900); else - ret &= vnt_rf_write_embedded(priv, 0x221bb900 + - (BY_AL7230_REG_LEN << 3)+IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x221bb900); if (power >= AL7230_PWR_IDX_LEN) return false; @@ -792,8 +782,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) * 0x080F1B00 for 3 wire control TxGain(D10) * and 0x31 as TX Gain value */ - power_setting = 0x080c0b00 | (power << 12) | - (BY_AL7230_REG_LEN << 3) | IFREGCTL_REGW; + power_setting = 0x080c0b00 | (power << 12); ret &= vnt_rf_write_embedded(priv, power_setting); @@ -802,8 +791,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) case RF_VT3226: if (power >= VT3226_PWR_IDX_LEN) return false; - power_setting = ((0x3f - power) << 20) | (0x17 << 8) | - (BY_VT3226_REG_LEN << 3) | IFREGCTL_REGW; + power_setting = ((0x3f - power) << 20) | (0x17 << 8); ret &= vnt_rf_write_embedded(priv, power_setting); @@ -815,13 +803,10 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) if (rate <= RATE_11M) { u16 hw_value = priv->hw->conf.chandef.chan->hw_value; - power_setting = ((0x3f - power) << 20) | - (0xe07 << 8) | (BY_VT3226_REG_LEN << 3) | - IFREGCTL_REGW; + power_setting = ((0x3f - power) << 20) | (0xe07 << 8); ret &= vnt_rf_write_embedded(priv, power_setting); - ret &= vnt_rf_write_embedded(priv, 0x03c6a200 + - (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x03c6a200); dev_dbg(&priv->usb->dev, "%s 11b channel [%d]\n", __func__, hw_value); @@ -832,23 +817,17 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) ret &= vnt_rf_write_embedded(priv, vt3226d0_lo_current_table[hw_value]); - ret &= vnt_rf_write_embedded(priv, 0x015C0800 + - (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x015C0800); } else { dev_dbg(&priv->usb->dev, "@@@@ vnt_rf_set_txpower> 11G mode\n"); - power_setting = ((0x3f - power) << 20) | - (0x7 << 8) | (BY_VT3226_REG_LEN << 3) | - IFREGCTL_REGW; + power_setting = ((0x3f - power) << 20) | (0x7 << 8); ret &= vnt_rf_write_embedded(priv, power_setting); - ret &= vnt_rf_write_embedded(priv, 0x00C6A200 + - (BY_VT3226_REG_LEN << 3) + IFREGCTL_REGW); - ret &= vnt_rf_write_embedded(priv, 0x016BC600 + - (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); - ret &= vnt_rf_write_embedded(priv, 0x00900800 + - (BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW); + ret &= vnt_rf_write_embedded(priv, 0x00C6A200); + ret &= vnt_rf_write_embedded(priv, 0x016BC600); + ret &= vnt_rf_write_embedded(priv, 0x00900800); } break; @@ -856,9 +835,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) if (power >= VT3342_PWR_IDX_LEN) return false; - power_setting = ((0x3f - power) << 20) | - (0x27 << 8) | (BY_VT3342_REG_LEN << 3) | - IFREGCTL_REGW; + power_setting = ((0x3f - power) << 20) | (0x27 << 8); ret &= vnt_rf_write_embedded(priv, power_setting); diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index d2347b498861..8cebb6ae839d 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -54,6 +54,7 @@ #define RF_MASK 0x7F #define VNT_RF_MAX_POWER 0x3f +#define VNT_RF_REG_LEN 0x17 /* 24 bit length */ int vnt_rf_write_embedded(struct vnt_private *, u32); int vnt_rf_setpower(struct vnt_private *, u32, u32); -- cgit From ef13cfb4dc617121bcbc349c923dfe2ec3bda6e5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 11:30:03 +0100 Subject: staging: vt6656: rf.c cleanup comments named comments are already referenced in revision history in high-level comment. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.c | 65 +++------------------------------------------ 1 file changed, 4 insertions(+), 61 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 1c3b3faf9a5d..28e64b43c000 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -46,15 +46,11 @@ #define CB_AL7230_INIT_SEQ 16 #define AL7230_PWR_IDX_LEN 64 -//{{RobertYu:20051111 #define CB_VT3226_INIT_SEQ 11 #define VT3226_PWR_IDX_LEN 64 -//}} -//{{RobertYu:20060609 #define CB_VT3342_INIT_SEQ 13 #define VT3342_PWR_IDX_LEN 64 -//}} static u8 al2230_init_table[CB_AL2230_INIT_SEQ][3] = { {0x03, 0xf7, 0x90}, @@ -536,12 +532,7 @@ static u8 vt3342_channel_table1[CB_MAX_CHANNEL][3] = { {0x03, 0x00, 0x04} }; -/*+ - * - * Power Table - * --*/ - +/* Power Table */ static const u32 al2230_power_table[AL2230_PWR_IDX_LEN] = { 0x04040900, 0x04041900, @@ -611,15 +602,6 @@ static const u32 al2230_power_table[AL2230_PWR_IDX_LEN] = { /* * Description: Write to IF/RF, by embedded programming - * - * Parameters: - * In: - * dwData - data to write - * Out: - * none - * - * Return Value: true if succeeded; false if failed. - * */ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data) { @@ -638,19 +620,7 @@ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data) return true; } -/* - * Description: Set Tx power - * - * Parameters: - * In: - * dwIoBase - I/O base address - * dwRFPowerTable - RF Tx Power Setting - * Out: - * none - * - * Return Value: true if succeeded; false if failed. - * - */ +/* Set Tx power by rate and channel number */ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) { int ret = true; @@ -714,20 +684,7 @@ static u8 vnt_rf_addpower(struct vnt_private *priv) return 0; } -/* - * Description: Set Tx power - * - * Parameters: - * In: - * dwIoBase - I/O base address - * dwRFPowerTable - RF Tx Power Setting - * Out: - * none - * - * Return Value: true if succeeded; false if failed. - * - */ - +/* Set Tx power by power level and rate */ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) { u32 power_setting = 0; @@ -846,21 +803,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) return ret; } -/*+ - * - * Routine Description: - * Translate RSSI to dBm - * - * Parameters: - * In: - * pDevice - The adapter to be translated - * byCurrRSSI - RSSI to be translated - * Out: - * pdwdbm - Translated dbm number - * - * Return Value: none - * --*/ +/* Convert rssi to dbm */ void vnt_rf_rssi_to_dbm(struct vnt_private *priv, u8 rssi, long *dbm) { u8 idx = (((rssi & 0xc0) >> 6) & 0x03); -- cgit From 4fd6e9f286c0f63e9e5cfc6a6aad7833e9e3c458 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 20:12:42 +0100 Subject: staging: vt6656: baseband clean up VT3184 static variables Remove white space comments and arrange 8 bytes wide Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 648 +++++--------------------------------- 1 file changed, 72 insertions(+), 576 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index f4060a9ed914..f066f4c6f36e 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -41,589 +41,85 @@ #include "usbpipe.h" static u8 abyVT3184_AGC[] = { - 0x00, //0 - 0x00, //1 - 0x02, //2 - 0x02, //3 //RobertYu:20060505, 0x04, //3 - 0x04, //4 - 0x04, //5 //RobertYu:20060505, 0x06, //5 - 0x06, //6 - 0x06, //7 - 0x08, //8 - 0x08, //9 - 0x0A, //A - 0x0A, //B - 0x0C, //C - 0x0C, //D - 0x0E, //E - 0x0E, //F - 0x10, //10 - 0x10, //11 - 0x12, //12 - 0x12, //13 - 0x14, //14 - 0x14, //15 - 0x16, //16 - 0x16, //17 - 0x18, //18 - 0x18, //19 - 0x1A, //1A - 0x1A, //1B - 0x1C, //1C - 0x1C, //1D - 0x1E, //1E - 0x1E, //1F - 0x20, //20 - 0x20, //21 - 0x22, //22 - 0x22, //23 - 0x24, //24 - 0x24, //25 - 0x26, //26 - 0x26, //27 - 0x28, //28 - 0x28, //29 - 0x2A, //2A - 0x2A, //2B - 0x2C, //2C - 0x2C, //2D - 0x2E, //2E - 0x2E, //2F - 0x30, //30 - 0x30, //31 - 0x32, //32 - 0x32, //33 - 0x34, //34 - 0x34, //35 - 0x36, //36 - 0x36, //37 - 0x38, //38 - 0x38, //39 - 0x3A, //3A - 0x3A, //3B - 0x3C, //3C - 0x3C, //3D - 0x3E, //3E - 0x3E //3F + 0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, + 0x08, 0x08, 0x0a, 0x0a, 0x0c, 0x0c, 0x0e, 0x0e, /* 0x0f */ + 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, + 0x18, 0x18, 0x1a, 0x1a, 0x1c, 0x1c, 0x1e, 0x1e, /* 0x1f */ + 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, + 0x28, 0x28, 0x2a, 0x2a, 0x2c, 0x2c, 0x2e, 0x2e, /* 0x2f */ + 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, + 0x38, 0x38, 0x3a, 0x3a, 0x3c, 0x3c, 0x3e, 0x3e /* 0x3f */ }; static u8 abyVT3184_AL2230[] = { - 0x31,//00 - 0x00, - 0x00, - 0x00, - 0x00, - 0x80, - 0x00, - 0x00, - 0x70, - 0x45,//tx //0x64 for FPGA - 0x2A, - 0x76, - 0x00, - 0x00, - 0x80, - 0x00, - 0x00,//10 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x8e, //RobertYu:20060522, //0x8d, - 0x0a, //RobertYu:20060515, //0x09, - 0x00, - 0x00, - 0x00, - 0x00,//20 - 0x00, - 0x00, - 0x00, - 0x00, - 0x4a, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x4a, - 0x00, - 0x0c, //RobertYu:20060522, //0x10, - 0x26,//30 - 0x5b, - 0x00, - 0x00, - 0x00, - 0x00, - 0xaa, - 0xaa, - 0xff, - 0xff, - 0x79, - 0x00, - 0x00, - 0x0b, - 0x48, - 0x04, - 0x00,//40 - 0x08, - 0x00, - 0x08, - 0x08, - 0x14, - 0x05, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0x73, - 0x00, - 0xc5, - 0x00,//50 //RobertYu:20060505, //0x15,//50 - 0x19, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xd0, //RobertYu:20060505, //0xb0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xe4,//60 - 0x80, - 0x00, - 0x00, - 0x00, - 0x00, - 0x98, - 0x0a, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, //0x80 for FPGA - 0x03, - 0x01, - 0x00, - 0x00,//70 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x8c,//80 - 0x01, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x08, - 0x00, - 0x1f, //RobertYu:20060516, //0x0f, - 0xb7, - 0x88, - 0x47, - 0xaa, - 0x00, //RobertYu:20060505, //0x02, - 0x20,//90 //RobertYu:20060505, //0x22,//90 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xeb, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00,//a0 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x18, - 0x00, - 0x00, - 0x00, - 0x00, - 0x15, //RobertYu:20060516, //0x00, - 0x00, - 0x18, - 0x38,//b0 - 0x30, - 0x00, - 0x00, - 0xff, - 0x0f, - 0xe4, - 0xe2, - 0x00, - 0x00, - 0x00, - 0x03, - 0x01, - 0x00, - 0x00, - 0x00, - 0x18,//c0 - 0x20, - 0x07, - 0x18, - 0xff, - 0xff, //RobertYu:20060509, //0x2c, - 0x0e, //RobertYu:20060530, //0x0c, - 0x0a, - 0x0e, - 0x00, //RobertYu:20060505, //0x01, - 0x82, //RobertYu:20060516, //0x8f, - 0xa7, - 0x3c, - 0x10, - 0x30, //RobertYu:20060627, //0x0b, - 0x05, //RobertYu:20060516, //0x25, - 0x40,//d0 - 0x12, - 0x00, - 0x00, - 0x10, - 0x28, - 0x80, - 0x2A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00,//e0 - 0xf3, //RobertYu:20060516, //0xd3, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x12, //RobertYu:20060627, //0x10, - 0x00, - 0xf4, - 0x00, - 0xff, - 0x79, - 0x20, - 0x30, - 0x05, //RobertYu:20060516, //0x0c, - 0x00,//f0 - 0x3e, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 + 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00, /* 0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8e, 0x0a, 0x00, 0x00, 0x00, /* 0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x0c, /* 0x2f */ + 0x26, 0x5b, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0xff, 0xff, 0x79, 0x00, 0x00, 0x0b, 0x48, 0x04, /* 0x3f */ + 0x00, 0x08, 0x00, 0x08, 0x08, 0x14, 0x05, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x73, 0x00, 0xc5, /* 0x4f */ + 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f */ + 0xe4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, /* 0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7f */ + 0x8c, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x1f, 0xb7, 0x88, 0x47, 0xaa, 0x00, /* 0x8f */ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x18, /* 0xaf */ + 0x38, 0x30, 0x00, 0x00, 0xff, 0x0f, 0xe4, 0xe2, + 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, /* 0xbf */ + 0x18, 0x20, 0x07, 0x18, 0xff, 0xff, 0x0e, 0x0a, + 0x0e, 0x00, 0x82, 0xa7, 0x3c, 0x10, 0x30, 0x05, /* 0xcf */ + 0x40, 0x12, 0x00, 0x00, 0x10, 0x28, 0x80, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf */ + 0x00, 0xf3, 0x00, 0x00, 0x00, 0x10, 0x00, 0x12, + 0x00, 0xf4, 0x00, 0xff, 0x79, 0x20, 0x30, 0x05, /* 0xef */ + 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */ }; //{{RobertYu:20060515, new BB setting for VT3226D0 static u8 abyVT3184_VT3226D0[] = { - 0x31,//00 - 0x00, - 0x00, - 0x00, - 0x00, - 0x80, - 0x00, - 0x00, - 0x70, - 0x45,//tx //0x64 for FPGA - 0x2A, - 0x76, - 0x00, - 0x00, - 0x80, - 0x00, - 0x00,//10 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x8e, //RobertYu:20060525, //0x8d, - 0x0a, //RobertYu:20060515, //0x09, - 0x00, - 0x00, - 0x00, - 0x00,//20 - 0x00, - 0x00, - 0x00, - 0x00, - 0x4a, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x4a, - 0x00, - 0x0c, //RobertYu:20060525, //0x10, - 0x26,//30 - 0x5b, - 0x00, - 0x00, - 0x00, - 0x00, - 0xaa, - 0xaa, - 0xff, - 0xff, - 0x79, - 0x00, - 0x00, - 0x0b, - 0x48, - 0x04, - 0x00,//40 - 0x08, - 0x00, - 0x08, - 0x08, - 0x14, - 0x05, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x09, - 0x73, - 0x00, - 0xc5, - 0x00,//50 //RobertYu:20060505, //0x15,//50 - 0x19, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xd0, //RobertYu:20060505, //0xb0, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xe4,//60 - 0x80, - 0x00, - 0x00, - 0x00, - 0x00, - 0x98, - 0x0a, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, //0x80 for FPGA - 0x03, - 0x01, - 0x00, - 0x00,//70 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x8c,//80 - 0x01, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x08, - 0x00, - 0x1f, //RobertYu:20060515, //0x0f, - 0xb7, - 0x88, - 0x47, - 0xaa, - 0x00, //RobertYu:20060505, //0x02, - 0x20,//90 //RobertYu:20060505, //0x22,//90 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xeb, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00,//a0 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x18, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x18, - 0x38,//b0 - 0x30, - 0x00, - 0x00, - 0xff, - 0x0f, - 0xe4, - 0xe2, - 0x00, - 0x00, - 0x00, - 0x03, - 0x01, - 0x00, - 0x00, - 0x00, - 0x18,//c0 - 0x20, - 0x07, - 0x18, - 0xff, - 0xff, //RobertYu:20060509, //0x2c, - 0x10, //RobertYu:20060525, //0x0c, - 0x0a, - 0x0e, - 0x00, //RobertYu:20060505, //0x01, - 0x84, //RobertYu:20060525, //0x8f, - 0xa7, - 0x3c, - 0x10, - 0x24, //RobertYu:20060627, //0x18, - 0x05, //RobertYu:20060515, //0x25, - 0x40,//d0 - 0x12, - 0x00, - 0x00, - 0x10, - 0x28, - 0x80, - 0x2A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00,//e0 - 0xf3, //RobertYu:20060515, //0xd3, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x10, //RobertYu:20060627, //0x0e, - 0x00, - 0xf4, - 0x00, - 0xff, - 0x79, - 0x20, - 0x30, - 0x08, //RobertYu:20060515, //0x0c, - 0x00,//f0 - 0x3e, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00, /* 0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8e, 0x0a, 0x00, 0x00, 0x00, /* 0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x0c, /* 0x2f */ + 0x26, 0x5b, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0xff, 0xff, 0x79, 0x00, 0x00, 0x0b, 0x48, 0x04, /* 0x3f */ + 0x00, 0x08, 0x00, 0x08, 0x08, 0x14, 0x05, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x73, 0x00, 0xc5, /* 0x4f */ + 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f */ + 0xe4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, /* 0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7f */ + 0x8c, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x1f, 0xb7, 0x88, 0x47, 0xaa, 0x00, /* 0x8f */ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0xaf */ + 0x38, 0x30, 0x00, 0x00, 0xff, 0x0f, 0xe4, 0xe2, + 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, /* 0xbf */ + 0x18, 0x20, 0x07, 0x18, 0xff, 0xff, 0x10, 0x0a, + 0x0e, 0x00, 0x84, 0xa7, 0x3c, 0x10, 0x24, 0x05, /* 0xcf */ + 0x40, 0x12, 0x00, 0x00, 0x10, 0x28, 0x80, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf */ + 0x00, 0xf3, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, + 0x00, 0xf4, 0x00, 0xff, 0x79, 0x20, 0x30, 0x08, /* 0xef */ + 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */ }; static const u16 awcFrameTime[MAX_RATE] = -- cgit From 170ce6d2c514dbf0dabd749e8dcb9943bb2c173f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 20:12:43 +0100 Subject: staging: vt6656: baseband.c rename abyVT3184_AGC to vnt_vt3184_agc Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index f066f4c6f36e..f3640a514a48 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -40,7 +40,7 @@ #include "rf.h" #include "usbpipe.h" -static u8 abyVT3184_AGC[] = { +static u8 vnt_vt3184_agc[] = { 0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0a, 0x0a, 0x0c, 0x0c, 0x0e, 0x0e, /* 0x0f */ 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, @@ -405,8 +405,8 @@ int BBbVT3184Init(struct vnt_private *priv) priv->byBBRxConf = abyVT3184_AL2230[10]; length = sizeof(abyVT3184_AL2230); addr = abyVT3184_AL2230; - agc = abyVT3184_AGC; - length_agc = sizeof(abyVT3184_AGC); + agc = vnt_vt3184_agc; + length_agc = sizeof(vnt_vt3184_agc); priv->abyBBVGA[0] = 0x1C; priv->abyBBVGA[1] = 0x10; @@ -420,8 +420,8 @@ int BBbVT3184Init(struct vnt_private *priv) priv->byBBRxConf = abyVT3184_AL2230[10]; length = sizeof(abyVT3184_AL2230); addr = abyVT3184_AL2230; - agc = abyVT3184_AGC; - length_agc = sizeof(abyVT3184_AGC); + agc = vnt_vt3184_agc; + length_agc = sizeof(vnt_vt3184_agc); addr[0xd7] = 0x06; @@ -438,8 +438,8 @@ int BBbVT3184Init(struct vnt_private *priv) priv->byBBRxConf = abyVT3184_VT3226D0[10]; length = sizeof(abyVT3184_VT3226D0); addr = abyVT3184_VT3226D0; - agc = abyVT3184_AGC; - length_agc = sizeof(abyVT3184_AGC); + agc = vnt_vt3184_agc; + length_agc = sizeof(vnt_vt3184_agc); priv->abyBBVGA[0] = 0x20; priv->abyBBVGA[1] = 0x10; @@ -455,8 +455,8 @@ int BBbVT3184Init(struct vnt_private *priv) priv->byBBRxConf = abyVT3184_VT3226D0[10]; length = sizeof(abyVT3184_VT3226D0); addr = abyVT3184_VT3226D0; - agc = abyVT3184_AGC; - length_agc = sizeof(abyVT3184_AGC); + agc = vnt_vt3184_agc; + length_agc = sizeof(vnt_vt3184_agc); priv->abyBBVGA[0] = 0x20; priv->abyBBVGA[1] = 0x10; -- cgit From ab48ab222d5fdd900ffac3f00da83d0edf497792 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 20:12:44 +0100 Subject: staging: vt6656: baseband.c remame abyVT3184_AL2230 to vnt_vt3184_al2230 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index f3640a514a48..586afe5a9c88 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -51,7 +51,7 @@ static u8 vnt_vt3184_agc[] = { 0x38, 0x38, 0x3a, 0x3a, 0x3c, 0x3c, 0x3e, 0x3e /* 0x3f */ }; -static u8 abyVT3184_AL2230[] = { +static u8 vnt_vt3184_al2230[] = { 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00, /* 0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -402,9 +402,9 @@ int BBbVT3184Init(struct vnt_private *priv) if ((priv->byRFType == RF_AL2230) || (priv->byRFType == RF_AL2230S)) { - priv->byBBRxConf = abyVT3184_AL2230[10]; - length = sizeof(abyVT3184_AL2230); - addr = abyVT3184_AL2230; + priv->byBBRxConf = vnt_vt3184_al2230[10]; + length = sizeof(vnt_vt3184_al2230); + addr = vnt_vt3184_al2230; agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); @@ -417,9 +417,9 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; } else if (priv->byRFType == RF_AIROHA7230) { - priv->byBBRxConf = abyVT3184_AL2230[10]; - length = sizeof(abyVT3184_AL2230); - addr = abyVT3184_AL2230; + priv->byBBRxConf = vnt_vt3184_al2230[10]; + length = sizeof(vnt_vt3184_al2230); + addr = vnt_vt3184_al2230; agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); -- cgit From 0a16b63d5428420f407d89bd303fa974cb2b044d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 12 Jul 2014 20:12:45 +0100 Subject: staging: vt6656: baseband.c rename abyVT3184_VT3226D0 to vnt_vt3184_vt3226d0 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 586afe5a9c88..c1675d54da9b 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -87,7 +87,7 @@ static u8 vnt_vt3184_al2230[] = { }; //{{RobertYu:20060515, new BB setting for VT3226D0 -static u8 abyVT3184_VT3226D0[] = { +static u8 vnt_vt3184_vt3226d0[] = { 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00, /* 0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -435,9 +435,9 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[3] = 0; } else if ((priv->byRFType == RF_VT3226) || (priv->byRFType == RF_VT3226D0)) { - priv->byBBRxConf = abyVT3184_VT3226D0[10]; - length = sizeof(abyVT3184_VT3226D0); - addr = abyVT3184_VT3226D0; + priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; + length = sizeof(vnt_vt3184_vt3226d0); + addr = vnt_vt3184_vt3226d0; agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); @@ -452,9 +452,9 @@ int BBbVT3184Init(struct vnt_private *priv) /* Fix VT3226 DFC system timing issue */ vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); } else if ((priv->byRFType == RF_VT3342A0)) { - priv->byBBRxConf = abyVT3184_VT3226D0[10]; - length = sizeof(abyVT3184_VT3226D0); - addr = abyVT3184_VT3226D0; + priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; + length = sizeof(vnt_vt3184_vt3226d0); + addr = vnt_vt3184_vt3226d0; agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); -- cgit From 3bdb7ce4119b8b333797d67cf87d2475e56c6842 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:00:44 -0700 Subject: staging: lustre: remove LL_PROC_PROTO macro Spell out what is happening with the proc file functions, it helps to unwind the call chain mess here. Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/linux-prim.h | 14 ++++---- .../include/linux/libcfs/linux/portals_compat25.h | 5 --- drivers/staging/lustre/lnet/lnet/router_proc.c | 12 ++++--- .../lustre/lustre/libcfs/linux/linux-proc.c | 15 +++++--- .../lustre/lustre/obdclass/linux/linux-sysctl.c | 40 +++++++++++++++------- 5 files changed, 53 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index 8125980089e8..43ce3a05f59b 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -64,13 +64,13 @@ /* * Sysctl register */ -#define DECLARE_PROC_HANDLER(name) \ -static int \ -LL_PROC_PROTO(name) \ -{ \ - return proc_call_handler(table->data, write, \ - ppos, buffer, lenp, \ - __##name); \ +#define DECLARE_PROC_HANDLER(name) \ +static int name(struct ctl_table *table, int write, \ + void __user *buffer, size_t *lenp, loff_t *ppos) \ +{ \ + return proc_call_handler(table->data, write, \ + ppos, buffer, lenp, \ + __##name); \ } #endif diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index 192ad083931a..4fe072056da2 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -83,11 +83,6 @@ #define ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos) \ proc_doulongvec_minmax(table, write, buffer, lenp, ppos); -#define ll_proc_dostring(table, write, filp, buffer, lenp, ppos) \ - proc_dostring(table, write, buffer, lenp, ppos); -#define LL_PROC_PROTO(name) \ - name(struct ctl_table *table, int write, \ - void __user *buffer, size_t *lenp, loff_t *ppos) /* helper for sysctl handlers */ int proc_call_handler(void *data, int write, diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index ee3b3d4a214b..60b2e844a33d 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -141,7 +141,8 @@ static int __proc_lnet_stats(void *data, int write, DECLARE_PROC_HANDLER(proc_lnet_stats); -int LL_PROC_PROTO(proc_lnet_routes) +int proc_lnet_routes(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { const int tmpsiz = 256; char *tmpstr; @@ -266,7 +267,8 @@ int LL_PROC_PROTO(proc_lnet_routes) return rc; } -int LL_PROC_PROTO(proc_lnet_routers) +int proc_lnet_routers(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { int rc = 0; char *tmpstr; @@ -400,7 +402,8 @@ int LL_PROC_PROTO(proc_lnet_routers) return rc; } -int LL_PROC_PROTO(proc_lnet_peers) +int proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { const int tmpsiz = 256; struct lnet_peer_table *ptable; @@ -626,7 +629,8 @@ static int __proc_lnet_buffers(void *data, int write, DECLARE_PROC_HANDLER(proc_lnet_buffers); -int LL_PROC_PROTO(proc_lnet_nis) +int proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { int tmpsiz = 128 * LNET_CPT_NUMBER; int rc = 0; diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index c680def5a1f0..68e41f780e74 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -214,7 +214,8 @@ static int __proc_debug_mb(void *data, int write, DECLARE_PROC_HANDLER(proc_debug_mb) -int LL_PROC_PROTO(proc_console_max_delay_cs) +int proc_console_max_delay_cs(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, max_delay_cs; struct ctl_table dummy = *table; @@ -245,7 +246,8 @@ int LL_PROC_PROTO(proc_console_max_delay_cs) return rc; } -int LL_PROC_PROTO(proc_console_min_delay_cs) +int proc_console_min_delay_cs(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, min_delay_cs; struct ctl_table dummy = *table; @@ -276,7 +278,8 @@ int LL_PROC_PROTO(proc_console_min_delay_cs) return rc; } -int LL_PROC_PROTO(proc_console_backoff) +int proc_console_backoff(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, backoff; struct ctl_table dummy = *table; @@ -303,14 +306,16 @@ int LL_PROC_PROTO(proc_console_backoff) return rc; } -int LL_PROC_PROTO(libcfs_force_lbug) +int libcfs_force_lbug(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { if (write) LBUG(); return 0; } -int LL_PROC_PROTO(proc_fail_loc) +int proc_fail_loc(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { int rc; long old_fail_loc = cfs_fail_loc; diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 23f39de9f7ef..90dbaaddb311 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -79,7 +79,8 @@ enum { }; -int LL_PROC_PROTO(proc_set_timeout) +int proc_set_timeout(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { int rc; @@ -89,7 +90,8 @@ int LL_PROC_PROTO(proc_set_timeout) return rc; } -int LL_PROC_PROTO(proc_memory_alloc) +int proc_memory_alloc(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -112,7 +114,8 @@ int LL_PROC_PROTO(proc_memory_alloc) return 0; } -int LL_PROC_PROTO(proc_pages_alloc) +int proc_pages_alloc(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -135,7 +138,8 @@ int LL_PROC_PROTO(proc_pages_alloc) return 0; } -int LL_PROC_PROTO(proc_mem_max) +int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -158,7 +162,8 @@ int LL_PROC_PROTO(proc_mem_max) return 0; } -int LL_PROC_PROTO(proc_pages_max) +int proc_pages_max(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -181,7 +186,8 @@ int LL_PROC_PROTO(proc_pages_max) return 0; } -int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) +int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; @@ -222,7 +228,8 @@ int LL_PROC_PROTO(proc_max_dirty_pages_in_mb) return rc; } -int LL_PROC_PROTO(proc_alloc_fail_rate) +int proc_alloc_fail_rate(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; @@ -252,23 +259,32 @@ int LL_PROC_PROTO(proc_alloc_fail_rate) return rc; } -int LL_PROC_PROTO(proc_at_min) +int proc_at_min(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); } -int LL_PROC_PROTO(proc_at_max) + +int proc_at_max(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); } -int LL_PROC_PROTO(proc_at_extra) + +int proc_at_extra(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); } -int LL_PROC_PROTO(proc_at_early_margin) + +int proc_at_early_margin(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); } -int LL_PROC_PROTO(proc_at_history) + +int proc_at_history(struct ctl_table *table, int write, void __user *buffer, + size_t *lenp, loff_t *ppos) { return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); } -- cgit From e432a77f5f292116f45149fb93e8e5d44f015f10 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:01:57 -0700 Subject: staging: lustre: remove hpdd-discuss list from TODO file It's a closed mailing list, what's the use of cc:ing patches there if they never go through. So remove it from the TODO file. A real MAINTAINERS entry is probably a good thing for the Lustre code, maybe someday someone will send a patch to do that... Cc: Andreas Dilger Cc: Oleg Drokin Cc: hpdd-discuss Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/TODO | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/TODO b/drivers/staging/lustre/TODO index e325e1e98326..0512594b5199 100644 --- a/drivers/staging/lustre/TODO +++ b/drivers/staging/lustre/TODO @@ -9,5 +9,4 @@ * Other minor misc cleanups... Please send any patches to Greg Kroah-Hartman , Andreas Dilger -, Oleg Drokin . CCing -hpdd-discuss would be great too. +, and Oleg Drokin . -- cgit From 9b335e2b2f2e92b1134035818c9ae9316bbddca3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:11:25 -0700 Subject: staging: lustre: clean up some proc file declarations This removes the DECLARE_PROC_HANDLER macro, and makes proc_call_handler a static function (horrible name to be in a module). This makes the linux-prim.h file empty now, so it can be removed soon. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/linux-prim.h | 12 ------ .../include/linux/libcfs/linux/portals_compat25.h | 6 --- drivers/staging/lustre/lnet/lnet/router_proc.c | 41 ++++++++++++++++++-- .../lustre/lustre/libcfs/linux/linux-proc.c | 45 ++++++++++++++++------ 4 files changed, 72 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h index 43ce3a05f59b..8ea857684d65 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h @@ -61,16 +61,4 @@ #include "linux-time.h" -/* - * Sysctl register - */ -#define DECLARE_PROC_HANDLER(name) \ -static int name(struct ctl_table *table, int write, \ - void __user *buffer, size_t *lenp, loff_t *ppos) \ -{ \ - return proc_call_handler(table->data, write, \ - ppos, buffer, lenp, \ - __##name); \ -} - #endif diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index 4fe072056da2..0728f20b499f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -84,10 +84,4 @@ #define ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos) \ proc_doulongvec_minmax(table, write, buffer, lenp, ppos); -/* helper for sysctl handlers */ -int proc_call_handler(void *data, int write, - loff_t *ppos, void *buffer, size_t *lenp, - int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)); - #endif /* _PORTALS_COMPAT_H */ diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 60b2e844a33d..122ebf430d2a 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -90,6 +90,24 @@ enum { #define LNET_PROC_VERSION(v) ((unsigned int)((v) & LNET_PROC_VER_MASK)) +static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, + size_t *lenp, int (*handler)(void *data, int write, + loff_t pos, void *buffer, int len)) +{ + int rc = handler(data, write, *ppos, buffer, *lenp); + + if (rc < 0) + return rc; + + if (write) { + *ppos += *lenp; + } else { + *lenp = rc; + *ppos += rc; + } + return 0; +} + static int __proc_lnet_stats(void *data, int write, loff_t pos, void *buffer, int nob) { @@ -139,7 +157,12 @@ static int __proc_lnet_stats(void *data, int write, return rc; } -DECLARE_PROC_HANDLER(proc_lnet_stats); +static int proc_lnet_stats(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_lnet_stats); +} int proc_lnet_routes(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) @@ -627,7 +650,12 @@ static int __proc_lnet_buffers(void *data, int write, return rc; } -DECLARE_PROC_HANDLER(proc_lnet_buffers); +static int proc_lnet_buffers(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_lnet_buffers); +} int proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) @@ -847,7 +875,14 @@ out: LIBCFS_FREE(buf, buf_len); return rc; } -DECLARE_PROC_HANDLER(proc_lnet_portal_rotor); + +static int proc_lnet_portal_rotor(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, + loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_lnet_portal_rotor); +} static struct ctl_table lnet_table[] = { /* diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index 68e41f780e74..0732ff4ca72f 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -98,11 +98,9 @@ enum { PSDEV_LNET_FAIL_VAL, /* userdata for fail loc */ }; -int -proc_call_handler(void *data, int write, - loff_t *ppos, void *buffer, size_t *lenp, - int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)) +static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, + size_t *lenp, int (*handler)(void *data, int write, + loff_t pos, void *buffer, int len)) { int rc = handler(data, write, *ppos, buffer, *lenp); @@ -117,7 +115,6 @@ proc_call_handler(void *data, int write, } return 0; } -EXPORT_SYMBOL(proc_call_handler); static int __proc_dobitmasks(void *data, int write, loff_t pos, void *buffer, int nob) @@ -160,7 +157,12 @@ static int __proc_dobitmasks(void *data, int write, return rc; } -DECLARE_PROC_HANDLER(proc_dobitmasks) +static int proc_dobitmasks(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_dobitmasks); +} static int min_watchdog_ratelimit = 0; /* disable ratelimiting */ static int max_watchdog_ratelimit = (24*60*60); /* limit to once per day */ @@ -174,7 +176,12 @@ static int __proc_dump_kernel(void *data, int write, return cfs_trace_dump_debug_buffer_usrstr(buffer, nob); } -DECLARE_PROC_HANDLER(proc_dump_kernel) +static int proc_dump_kernel(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_dump_kernel); +} static int __proc_daemon_file(void *data, int write, loff_t pos, void *buffer, int nob) @@ -192,7 +199,12 @@ static int __proc_daemon_file(void *data, int write, return cfs_trace_daemon_command_usrstr(buffer, nob); } -DECLARE_PROC_HANDLER(proc_daemon_file) +static int proc_daemon_file(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_daemon_file); +} static int __proc_debug_mb(void *data, int write, loff_t pos, void *buffer, int nob) @@ -212,7 +224,12 @@ static int __proc_debug_mb(void *data, int write, return cfs_trace_set_debug_mb_usrstr(buffer, nob); } -DECLARE_PROC_HANDLER(proc_debug_mb) +static int proc_debug_mb(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_debug_mb); +} int proc_console_max_delay_cs(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) @@ -366,7 +383,13 @@ static int __proc_cpt_table(void *data, int write, LIBCFS_FREE(buf, len); return rc; } -DECLARE_PROC_HANDLER(proc_cpt_table) + +static int proc_cpt_table(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + return proc_call_handler(table->data, write, ppos, buffer, lenp, + __proc_cpt_table); +} static struct ctl_table lnet_table[] = { /* -- cgit From fa8d5b44740cd90551461e0ddbb34fbc6c914be5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:17:20 -0700 Subject: staging: lustre: remove linux-prim.h It's empty now, move the #include lines it was pulling in, into libcfs.h and sort them to remove the duplicates. Odds are they all aren't needed, but let's not break the build by experimenting with removing them at this point in time. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/libcfs.h | 22 +++++--- .../lustre/include/linux/libcfs/linux/linux-prim.h | 64 ---------------------- 2 files changed, 15 insertions(+), 71 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index 1c06bf1dc3d0..6da787175d3e 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -43,21 +43,29 @@ #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" -#include "linux-prim.h" -#include "kp30.h" +#include "portals_compat25.h" -#include -#include -#include -#include /* THREAD_SIZE */ -#include +#include "kp30.h" #define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h deleted file mode 100644 index 8ea857684d65..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-prim.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/include/libcfs/linux/linux-prim.h - * - * Basic library routines. - */ - -#ifndef __LIBCFS_LINUX_CFS_PRIM_H__ -#define __LIBCFS_LINUX_CFS_PRIM_H__ - -#ifndef __LIBCFS_LIBCFS_H__ -#error Do not #include this file directly. #include instead -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "portals_compat25.h" -#include - -#include "linux-time.h" - -#endif -- cgit From 143f378cf54cf24c831ce2139995a431303d51d3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:23:18 -0700 Subject: staging: lustre: remove LPF64 #define Just use the proper string for the variable type. Also remove some variable types that are not used at all (LPO64 and LPPID) Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/kp30.h | 7 ------- drivers/staging/lustre/lustre/fid/fid_request.c | 4 ++-- drivers/staging/lustre/lustre/include/lustre/lustre_idl.h | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index 7b8107b133de..f4f73bd1b2d6 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -74,8 +74,6 @@ # define LPD64 "%lld" # define LPX64 "%#llx" # define LPX64i "%llx" -# define LPO64 "%#llo" -# define LPF64 "L" /* * long_ptr_t & ulong_ptr_t, same to "long" for gcc @@ -84,9 +82,4 @@ # define LPLD "%ld" # define LPLX "%#lx" -/* - * pid_t - */ -# define LPPID "%d" - #endif diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index 8967599061be..e3708e358325 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -273,7 +273,7 @@ int seq_client_get_seq(const struct lu_env *env, return rc; } - CDEBUG(D_INFO, "%s: allocate sequence [0x%16.16"LPF64"x]\n", + CDEBUG(D_INFO, "%s: allocate sequence [0x%16.16Lx]\n", seq->lcs_name, *seqnr); /* Since the caller require the whole seq, @@ -336,7 +336,7 @@ int seq_client_alloc_fid(const struct lu_env *env, return rc; } - CDEBUG(D_INFO, "%s: Switch to sequence [0x%16.16"LPF64"x]\n", + CDEBUG(D_INFO, "%s: Switch to sequence [0x%16.16Lx]\n", seq->lcs_name, seqnr); seq->lcs_fid.f_oid = LUSTRE_FID_INIT_OID; diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 873af0f1e156..27142a4bef1e 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -301,7 +301,7 @@ static inline int range_compare_loc(const struct lu_seq_range *r1, r1->lsr_flags != r2->lsr_flags; } -#define DRANGE "[%#16.16"LPF64"x-%#16.16"LPF64"x):%x:%s" +#define DRANGE "[%#16.16Lx-%#16.16Lx):%x:%s" #define PRANGE(range) \ (range)->lsr_start, \ -- cgit From eafc75596fadb1cefa25a392317956395e4eee7d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:28:41 -0700 Subject: staging: lustre: remove LPLU, LPLD, and LPLX defines They are variable modifiers, come on, no need for a special define just for them... Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/kp30.h | 7 ------- drivers/staging/lustre/lustre/libcfs/debug.c | 6 +++--- 2 files changed, 3 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index f4f73bd1b2d6..a1722bd95874 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -75,11 +75,4 @@ # define LPX64 "%#llx" # define LPX64i "%llx" -/* - * long_ptr_t & ulong_ptr_t, same to "long" for gcc - */ -# define LPLU "%lu" -# define LPLD "%ld" -# define LPLX "%#lx" - #endif diff --git a/drivers/staging/lustre/lustre/libcfs/debug.c b/drivers/staging/lustre/lustre/libcfs/debug.c index 5765cbb185e0..6b584698d3ae 100644 --- a/drivers/staging/lustre/lustre/libcfs/debug.c +++ b/drivers/staging/lustre/lustre/libcfs/debug.c @@ -342,7 +342,7 @@ void libcfs_debug_dumplog_internal(void *arg) if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0) { snprintf(debug_file_name, sizeof(debug_file_name) - 1, - "%s.%ld." LPLD, libcfs_debug_file_path_arr, + "%s.%ld.%ld", libcfs_debug_file_path_arr, get_seconds(), (long_ptr_t)arg); printk(KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); @@ -463,7 +463,7 @@ EXPORT_SYMBOL(libcfs_debug_set_level); void libcfs_log_goto(struct libcfs_debug_msg_data *msgdata, const char *label, long_ptr_t rc) { - libcfs_debug_msg(msgdata, "Process leaving via %s (rc=" LPLU " : " LPLD - " : " LPLX ")\n", label, (ulong_ptr_t)rc, rc, rc); + libcfs_debug_msg(msgdata, "Process leaving via %s (rc=%lu : %ld : %#lx)\n", + label, (ulong_ptr_t)rc, rc, rc); } EXPORT_SYMBOL(libcfs_log_goto); -- cgit From f7941e4d2c9037635ab26051d86ed2e999a94dbb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:31:44 -0700 Subject: staging: lustre: remove LPX64i define Just use the proper modifier type... Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/kp30.h | 1 - drivers/staging/lustre/lustre/include/lustre/lustre_idl.h | 2 +- drivers/staging/lustre/lustre/include/lustre/lustre_user.h | 6 +----- 3 files changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index a1722bd95874..cba961269b1f 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -73,6 +73,5 @@ # define LPU64 "%llu" # define LPD64 "%lld" # define LPX64 "%#llx" -# define LPX64i "%llx" #endif diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 27142a4bef1e..ff3cff7c08cb 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -2747,7 +2747,7 @@ struct ldlm_res_id { __u64 name[RES_NAME_SIZE]; }; -#define DLDLMRES "["LPX64":"LPX64":"LPX64"]."LPX64i +#define DLDLMRES "["LPX64":"LPX64":"LPX64"].%llx" #define PLDLMRES(res) (res)->lr_name.name[0], (res)->lr_name.name[1], \ (res)->lr_name.name[2], (res)->lr_name.name[3] diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h index 9bbd9042d664..74757f7d1dbb 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h @@ -484,11 +484,7 @@ static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen) /* scanf input parse format -- strip '[' first. e.g. sscanf(fidstr, SFID, RFID(&fid)); */ -/* #define SFID "0x"LPX64i":0x"LPSZX":0x"LPSZX"" -liblustreapi.c:2893: warning: format '%lx' expects type 'long unsigned int *', but argument 4 has type 'unsigned int *' -liblustreapi.c:2893: warning: format '%lx' expects type 'long unsigned int *', but argument 5 has type 'unsigned int *' -*/ -#define SFID "0x"LPX64i":0x%x:0x%x" +#define SFID "0x%llx:0x%x:0x%x" #define RFID(fid) \ &((fid)->f_seq), \ &((fid)->f_oid), \ -- cgit From f537dd2c3c59f47fab8e21d639a28228d8201d43 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 18:41:09 -0700 Subject: staging: lustre: remove LPD64 define Just use the proper modifier type... Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/include/linux/libcfs/linux/kp30.h | 1 - drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c | 2 +- drivers/staging/lustre/lnet/selftest/rpc.c | 2 +- drivers/staging/lustre/lustre/lov/lov_pack.c | 2 +- drivers/staging/lustre/lustre/mgc/mgc_request.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/class_obd.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/debug.c | 2 +- .../staging/lustre/lustre/obdclass/lprocfs_status.c | 6 +++--- drivers/staging/lustre/lustre/osc/osc_request.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/import.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/pack_generic.c | 18 +++++++++--------- drivers/staging/lustre/lustre/ptlrpc/service.c | 3 +-- 14 files changed, 27 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index cba961269b1f..0b54e562f8ba 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -71,7 +71,6 @@ /* this is a bit chunky */ # define LPU64 "%llu" -# define LPD64 "%lld" # define LPX64 "%#llx" #endif diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 443318ed7265..1b85023e004e 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -1289,7 +1289,7 @@ ksocknal_create_conn (lnet_ni_t *ni, ksock_route_t *route, */ CDEBUG(D_NET, "New conn %s p %d.x %pI4h -> %pI4h/%d" - " incarnation:"LPD64" sched[%d:%d]\n", + " incarnation:%lld sched[%d:%d]\n", libcfs_id2str(peerid), conn->ksnc_proto->pro_version, &conn->ksnc_myipaddr, &conn->ksnc_ipaddr, conn->ksnc_port, incarnation, cpt, diff --git a/drivers/staging/lustre/lnet/selftest/rpc.c b/drivers/staging/lustre/lnet/selftest/rpc.c index dbbbf0cab8e3..d5ccbc36902a 100644 --- a/drivers/staging/lustre/lnet/selftest/rpc.c +++ b/drivers/staging/lustre/lnet/selftest/rpc.c @@ -426,7 +426,7 @@ srpc_post_active_rdma(int portal, __u64 matchbits, void *buf, int len, } if (rc != 0) { - CERROR ("LNet%s(%s, %d, "LPD64") failed: %d\n", + CERROR ("LNet%s(%s, %d, %lld) failed: %d\n", ((options & LNET_MD_OP_PUT) != 0) ? "Put" : "Get", libcfs_id2str(peer), portal, matchbits, rc); diff --git a/drivers/staging/lustre/lustre/lov/lov_pack.c b/drivers/staging/lustre/lustre/lov/lov_pack.c index d7836bab0cfc..a5b190f32c0f 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pack.c +++ b/drivers/staging/lustre/lustre/lov/lov_pack.c @@ -555,7 +555,7 @@ int lov_setea(struct obd_export *exp, struct lov_stripe_md **lsmp, return rc; if (ostid_id(&lmm_objects[i].l_ost_oi) > last_id) { CERROR("Setting EA for object > than last id on" - " ost idx %d "DOSTID" > "LPD64" \n", + " ost idx %d "DOSTID" > %lld \n", lmm_objects[i].l_ost_idx, POSTID(&lmm_objects[i].l_ost_oi), last_id); return -EINVAL; diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index 54ea5fd12de0..5108f0daedf1 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -1457,7 +1457,7 @@ static int mgc_apply_recover_logs(struct obd_device *mgc, break; } - CDEBUG(D_INFO, "ir apply logs "LPD64"/"LPD64" for %s -> %s\n", + CDEBUG(D_INFO, "ir apply logs %lld/%lld for %s -> %s\n", prev_version, max_version, obdname, params); rc = class_process_config(lcfg); @@ -1560,7 +1560,7 @@ again: cfg->cfg_last_idx = res->mcr_offset; eof = res->mcr_offset == res->mcr_size; - CDEBUG(D_INFO, "Latest version "LPD64", more %d.\n", + CDEBUG(D_INFO, "Latest version %lld, more %d.\n", res->mcr_offset, eof == false); ealen = sptlrpc_cli_unwrap_bulk_read(req, req->rq_bulk, 0); diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index 0f9a9cbb2a3a..fc17e5d30fd8 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -420,7 +420,7 @@ int obd_init_checks(void) char buf[64]; int len, ret = 0; - CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", LPU64, LPD64, LPX64); + CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", LPU64, "%lld", LPX64); CDEBUG(D_INFO, "OBD_OBJECT_EOF = "LPX64"\n", (__u64)OBD_OBJECT_EOF); @@ -468,7 +468,7 @@ int obd_init_checks(void) CWARN("LPU64 wrong length! strlen(%s)=%d != 20\n", buf, len); ret = -EINVAL; } - len = snprintf(buf, sizeof(buf), LPD64, u64val); + len = snprintf(buf, sizeof(buf), "%lld", u64val); if (len != 2) { CWARN("LPD64 wrong length! strlen(%s)=%d != 2\n", buf, len); ret = -EINVAL; diff --git a/drivers/staging/lustre/lustre/obdclass/debug.c b/drivers/staging/lustre/lustre/obdclass/debug.c index 18aedd2fc763..885d99338de0 100644 --- a/drivers/staging/lustre/lustre/obdclass/debug.c +++ b/drivers/staging/lustre/lustre/obdclass/debug.c @@ -49,7 +49,7 @@ void dump_lniobuf(struct niobuf_local *nb) { CDEBUG(D_RPCTRACE, - "niobuf_local: file_offset="LPD64", len=%d, page=%p, rc=%d\n", + "niobuf_local: file_offset=%lld, len=%d, page=%p, rc=%d\n", nb->lnb_file_offset, nb->len, nb->page, nb->rc); CDEBUG(D_RPCTRACE, "nb->page: index = %ld\n", nb->page ? page_index(nb->page) : -1); diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 842c06e44261..be6fb102076d 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -1175,19 +1175,19 @@ static int lprocfs_stats_seq_show(struct seq_file *p, void *v) if (ctr.lc_count == 0) goto out; - rc = seq_printf(p, "%-25s "LPD64" samples [%s]", hdr->lc_name, + rc = seq_printf(p, "%-25s %lld samples [%s]", hdr->lc_name, ctr.lc_count, hdr->lc_units); if (rc < 0) goto out; if ((hdr->lc_config & LPROCFS_CNTR_AVGMINMAX) && (ctr.lc_count > 0)) { - rc = seq_printf(p, " "LPD64" "LPD64" "LPD64, + rc = seq_printf(p, " %lld %lld %lld", ctr.lc_min, ctr.lc_max, ctr.lc_sum); if (rc < 0) goto out; if (hdr->lc_config & LPROCFS_CNTR_STDDEV) - rc = seq_printf(p, " "LPD64, ctr.lc_sumsquare); + rc = seq_printf(p, " %lld", ctr.lc_sumsquare); if (rc < 0) goto out; } diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 6fe43c164ea2..63a0e4bafe7f 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -483,7 +483,7 @@ int osc_real_create(struct obd_export *exp, struct obdo *oa, } } - CDEBUG(D_HA, "transno: "LPD64"\n", + CDEBUG(D_HA, "transno: %lld\n", lustre_msg_get_transno(req->rq_repmsg)); out_req: ptlrpc_req_finished(req); diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index 5cadb94ddc61..f43092506d75 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -998,8 +998,8 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, if (lustre_msg_get_last_committed(request->rq_repmsg) > 0 && lustre_msg_get_last_committed(request->rq_repmsg) < aa->pcaa_peer_committed) { - CERROR("%s went back in time (transno "LPD64 - " was previously committed, server now claims "LPD64 + CERROR("%s went back in time (transno %lld" + " was previously committed, server now claims %lld" ")! See https://bugzilla.lustre.org/show_bug.cgi?" "id=9646\n", obd2cli_tgt(imp->imp_obd), aa->pcaa_peer_committed, diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index 9df1921ebbba..3758b3ccca0c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -932,7 +932,7 @@ static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter) * must be just as careful as the service's request * parser. Currently I only print stuff here I know is OK * to look at coz it was set up in request_in_callback()!!! */ - seq_printf(s, LPD64":%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", + seq_printf(s, "%lld:%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", req->rq_history_seq, libcfs_nid2str(req->rq_self), libcfs_id2str(req->rq_peer), req->rq_xid, req->rq_reqlen, ptlrpc_rqphase2str(req), diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index e890ed91a886..a8bcf5a8ce65 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -79,7 +79,7 @@ static int ptl_send_buf(lnet_handle_md_t *mdh, void *base, int len, return -ENOMEM; } - CDEBUG(D_NET, "Sending %d bytes to portal %d, xid "LPD64", offset %u\n", + CDEBUG(D_NET, "Sending %d bytes to portal %d, xid %lld, offset %u\n", len, portal, xid, offset); rc = LNetPut(conn->c_self, *mdh, ack, @@ -89,7 +89,7 @@ static int ptl_send_buf(lnet_handle_md_t *mdh, void *base, int len, /* We're going to get an UNLINK event when I unlink below, * which will complete just like any other failed send, so * I fall through and return success here! */ - CERROR("LNetPut(%s, %d, "LPD64") failed: %d\n", + CERROR("LNetPut(%s, %d, %lld) failed: %d\n", libcfs_id2str(conn->c_peer), portal, xid, rc); rc2 = LNetMDUnlink(*mdh); LASSERTF(rc2 == 0, "rc2 = %d\n", rc2); diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index ffab15bd74f3..6bdb53acb1ad 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -2308,17 +2308,17 @@ void dump_obdo(struct obdo *oa) CDEBUG(D_RPCTRACE, "obdo: o_parent_seq = "LPX64"\n", oa->o_parent_seq); if (valid & OBD_MD_FLSIZE) - CDEBUG(D_RPCTRACE, "obdo: o_size = "LPD64"\n", oa->o_size); + CDEBUG(D_RPCTRACE, "obdo: o_size = %lld\n", oa->o_size); if (valid & OBD_MD_FLMTIME) - CDEBUG(D_RPCTRACE, "obdo: o_mtime = "LPD64"\n", oa->o_mtime); + CDEBUG(D_RPCTRACE, "obdo: o_mtime = %lld\n", oa->o_mtime); if (valid & OBD_MD_FLATIME) - CDEBUG(D_RPCTRACE, "obdo: o_atime = "LPD64"\n", oa->o_atime); + CDEBUG(D_RPCTRACE, "obdo: o_atime = %lld\n", oa->o_atime); if (valid & OBD_MD_FLCTIME) - CDEBUG(D_RPCTRACE, "obdo: o_ctime = "LPD64"\n", oa->o_ctime); + CDEBUG(D_RPCTRACE, "obdo: o_ctime = %lld\n", oa->o_ctime); if (valid & OBD_MD_FLBLOCKS) /* allocation of space */ - CDEBUG(D_RPCTRACE, "obdo: o_blocks = "LPD64"\n", oa->o_blocks); + CDEBUG(D_RPCTRACE, "obdo: o_blocks = %lld\n", oa->o_blocks); if (valid & OBD_MD_FLGRANT) - CDEBUG(D_RPCTRACE, "obdo: o_grant = "LPD64"\n", oa->o_grant); + CDEBUG(D_RPCTRACE, "obdo: o_grant = %lld\n", oa->o_grant); if (valid & OBD_MD_FLBLKSZ) CDEBUG(D_RPCTRACE, "obdo: o_blksize = %d\n", oa->o_blksize); if (valid & (OBD_MD_FLTYPE | OBD_MD_FLMODE)) @@ -2344,7 +2344,7 @@ void dump_obdo(struct obdo *oa) CDEBUG(D_RPCTRACE, "obdo: o_parent_oid = %x\n", oa->o_parent_oid); if (valid & OBD_MD_FLEPOCH) - CDEBUG(D_RPCTRACE, "obdo: o_ioepoch = "LPD64"\n", + CDEBUG(D_RPCTRACE, "obdo: o_ioepoch = %lld\n", oa->o_ioepoch); if (valid & OBD_MD_FLFID) { CDEBUG(D_RPCTRACE, "obdo: o_stripe_idx = %u\n", @@ -2353,7 +2353,7 @@ void dump_obdo(struct obdo *oa) oa->o_parent_ver); } if (valid & OBD_MD_FLHANDLE) - CDEBUG(D_RPCTRACE, "obdo: o_handle = "LPD64"\n", + CDEBUG(D_RPCTRACE, "obdo: o_handle = %lld\n", oa->o_handle.cookie); if (valid & OBD_MD_FLCOOKIE) CDEBUG(D_RPCTRACE, "obdo: o_lcookie = " @@ -2421,7 +2421,7 @@ void _debug_req(struct ptlrpc_request *req, va_start(args, fmt); libcfs_debug_vmsg2(msgdata, fmt, args, - " req@%p x"LPU64"/t"LPD64"("LPD64") o%d->%s@%s:%d/%d" + " req@%p x"LPU64"/t%lld(%lld) o%d->%s@%s:%d/%d" " lens %d/%d e %d to %d dl "CFS_TIME_T" ref %d " "fl "REQ_FLAGS_FMT"/%x/%x rc %d/%d\n", req, req->rq_xid, req->rq_transno, diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 0d100c066539..32a57d1ed39f 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -2084,8 +2084,7 @@ ptlrpc_handle_rs(struct ptlrpc_reply_state *rs) if (nlocks == 0 && !been_handled) { /* If we see this, we should already have seen the warning * in mds_steal_ack_locks() */ - CDEBUG(D_HA, "All locks stolen from rs %p x"LPD64".t"LPD64 - " o%d NID %s\n", + CDEBUG(D_HA, "All locks stolen from rs %p x%lld.t%lld o%d NID %s\n", rs, rs->rs_xid, rs->rs_transno, rs->rs_opc, libcfs_nid2str(exp->exp_connection->c_peer.nid)); -- cgit From b0f5aad587ea1fc3563d056609ee54a961ee1256 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 20:06:04 -0700 Subject: staging: lustre: remove LPU64 define Just use the proper modifier type... Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/kp30.h | 1 - drivers/staging/lustre/include/linux/lnet/ptllnd.h | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 2 +- .../lustre/lnet/klnds/socklnd/socklnd_proto.c | 4 +-- drivers/staging/lustre/lnet/lnet/lib-move.c | 19 ++++++-------- drivers/staging/lustre/lnet/lnet/lib-ptl.c | 6 ++--- drivers/staging/lustre/lnet/lnet/router_proc.c | 5 ++-- drivers/staging/lustre/lnet/selftest/framework.c | 8 +++--- drivers/staging/lustre/lustre/fid/lproc_fid.c | 4 +-- drivers/staging/lustre/lustre/fld/fld_cache.c | 6 ++--- drivers/staging/lustre/lustre/fld/fld_request.c | 17 ++++++------ .../lustre/lustre/include/lustre/lustre_idl.h | 6 ++--- .../lustre/lustre/include/lustre/lustre_user.h | 2 +- .../staging/lustre/lustre/include/lustre_capa.h | 2 +- drivers/staging/lustre/lustre/include/obd_class.h | 10 +++----- .../staging/lustre/lustre/include/obd_support.h | 12 ++++----- drivers/staging/lustre/lustre/lclient/lcommon_cl.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_extent.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 5 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 16 +++++------- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 4 +-- drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 5 ++-- .../staging/lustre/lustre/libcfs/upcall_cache.c | 17 ++++++------ drivers/staging/lustre/lustre/llite/dir.c | 19 +++++++------- drivers/staging/lustre/lustre/llite/file.c | 10 ++++---- drivers/staging/lustre/lustre/llite/llite_close.c | 2 +- drivers/staging/lustre/lustre/llite/llite_lib.c | 16 ++++++------ drivers/staging/lustre/lustre/llite/llite_mmap.c | 2 +- drivers/staging/lustre/lustre/llite/lproc_llite.c | 10 ++++---- drivers/staging/lustre/lustre/llite/namei.c | 2 +- drivers/staging/lustre/lustre/llite/rw.c | 4 +-- drivers/staging/lustre/lustre/llite/statahead.c | 22 ++++++++-------- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 2 +- drivers/staging/lustre/lustre/lov/lov_io.c | 6 ++--- drivers/staging/lustre/lustre/lov/lov_merge.c | 27 ++++++++++--------- drivers/staging/lustre/lustre/lov/lov_obd.c | 8 +++--- drivers/staging/lustre/lustre/lov/lov_offset.c | 2 +- drivers/staging/lustre/lustre/lov/lov_request.c | 2 +- drivers/staging/lustre/lustre/lov/lproc_lov.c | 4 +-- drivers/staging/lustre/lustre/mdc/mdc_request.c | 12 ++++----- drivers/staging/lustre/lustre/obdclass/capa.c | 4 +-- drivers/staging/lustre/lustre/obdclass/cl_io.c | 2 +- drivers/staging/lustre/lustre/obdclass/cl_object.c | 3 +-- drivers/staging/lustre/lustre/obdclass/class_obd.c | 20 +++++++-------- drivers/staging/lustre/lustre/obdclass/debug.c | 8 +++--- drivers/staging/lustre/lustre/obdclass/dt_object.c | 10 ++++---- drivers/staging/lustre/lustre/obdclass/genops.c | 2 +- .../lustre/lustre/obdclass/linux/linux-obdo.c | 4 +-- .../lustre/lustre/obdclass/linux/linux-sysctl.c | 8 +++--- drivers/staging/lustre/lustre/obdclass/llog_lvfs.c | 22 ++++++++-------- drivers/staging/lustre/lustre/obdclass/llog_osd.c | 14 +++++----- .../staging/lustre/lustre/obdclass/local_storage.c | 2 +- .../lustre/lustre/obdclass/lprocfs_status.c | 24 ++++++++--------- drivers/staging/lustre/lustre/obdclass/obdo.c | 2 +- drivers/staging/lustre/lustre/obdecho/echo.c | 6 ++--- .../staging/lustre/lustre/obdecho/echo_client.c | 2 +- drivers/staging/lustre/lustre/osc/lproc_osc.c | 6 ++--- drivers/staging/lustre/lustre/osc/osc_cache.c | 6 ++--- drivers/staging/lustre/lustre/osc/osc_io.c | 4 +-- drivers/staging/lustre/lustre/osc/osc_lock.c | 11 ++++---- drivers/staging/lustre/lustre/osc/osc_object.c | 8 +++--- drivers/staging/lustre/lustre/osc/osc_page.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 30 ++++++++++------------ drivers/staging/lustre/lustre/ptlrpc/client.c | 20 +++++++-------- drivers/staging/lustre/lustre/ptlrpc/events.c | 2 +- drivers/staging/lustre/lustre/ptlrpc/import.c | 2 +- .../staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 8 +++--- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 11 ++++---- drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c | 8 +++--- .../staging/lustre/lustre/ptlrpc/pack_generic.c | 8 +++--- drivers/staging/lustre/lustre/ptlrpc/recover.c | 6 ++--- drivers/staging/lustre/lustre/ptlrpc/sec.c | 4 +-- drivers/staging/lustre/lustre/ptlrpc/service.c | 27 ++++++++++--------- 75 files changed, 288 insertions(+), 319 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index 0b54e562f8ba..ea22ca783759 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -70,7 +70,6 @@ /* this is a bit chunky */ -# define LPU64 "%llu" # define LPX64 "%#llx" #endif diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd.h b/drivers/staging/lustre/include/linux/lnet/ptllnd.h index b5d9383b2697..c91d65329995 100644 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd.h +++ b/drivers/staging/lustre/include/linux/lnet/ptllnd.h @@ -49,7 +49,7 @@ #ifdef _USING_LUSTRE_PORTALS_ /* NIDs are 64-bits on Lustre Portals */ -#define FMT_NID LPU64 +#define FMT_NID "%llu" #define FMT_PID "%d" /* When using Lustre Portals Lustre completion semantics are imlicit*/ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 1b85023e004e..038854e8302f 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -2517,7 +2517,7 @@ ksocknal_debug_peerhash (lnet_ni_t *ni) ksock_conn_t *conn; CWARN ("Active peer on shutdown: %s, ref %d, scnt %d, " - "closing %d, accepting %d, err %d, zcookie "LPU64", " + "closing %d, accepting %d, err %d, zcookie %llu, " "txq %d, zc_req %d\n", libcfs_id2str(peer->ksnp_id), atomic_read(&peer->ksnp_refcount), peer->ksnp_sharecount, peer->ksnp_closing, diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 873c5e72a2b5..521439954fcb 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -1199,7 +1199,7 @@ ksocknal_process_receive (ksock_conn_t *conn) conn->ksnc_msg.ksm_zc_cookies[1]); if (rc != 0) { - CERROR("%s: Unknown ZC-ACK cookie: "LPU64", "LPU64"\n", + CERROR("%s: Unknown ZC-ACK cookie: %llu, %llu\n", libcfs_id2str(conn->ksnc_peer->ksnp_id), cookie, conn->ksnc_msg.ksm_zc_cookies[1]); ksocknal_new_packet(conn, 0); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c index c2e49a76177a..050a58d08809 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c @@ -192,7 +192,7 @@ ksocknal_queue_tx_zcack_v3(ksock_conn_t *conn, if (cookie == tx->tx_msg.ksm_zc_cookies[0] || cookie == tx->tx_msg.ksm_zc_cookies[1]) { - CWARN("%s: duplicated ZC cookie: "LPU64"\n", + CWARN("%s: duplicated ZC cookie: %llu\n", libcfs_id2str(conn->ksnc_peer->ksnp_id), cookie); return 1; /* XXX return error in the future */ } @@ -244,7 +244,7 @@ ksocknal_queue_tx_zcack_v3(ksock_conn_t *conn, /* ksm_zc_cookies[0] < ksm_zc_cookies[1], it is range of cookies */ if (cookie >= tx->tx_msg.ksm_zc_cookies[0] && cookie <= tx->tx_msg.ksm_zc_cookies[1]) { - CWARN("%s: duplicated ZC cookie: "LPU64"\n", + CWARN("%s: duplicated ZC cookie: %llu\n", libcfs_id2str(conn->ksnc_peer->ksnp_id), cookie); return 1; /* XXX: return error in the future */ } diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index 4ceec131d1a4..ad7d6773db94 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -1426,8 +1426,7 @@ lnet_parse_put(lnet_ni_t *ni, lnet_msg_t *msg) /* fall through */ case LNET_MATCHMD_DROP: - CNETERR("Dropping PUT from %s portal %d match "LPU64 - " offset %d length %d: %d\n", + CNETERR("Dropping PUT from %s portal %d match %llu offset %d length %d: %d\n", libcfs_id2str(info.mi_id), info.mi_portal, info.mi_mbits, info.mi_roffset, info.mi_rlength, rc); @@ -1459,8 +1458,7 @@ lnet_parse_get(lnet_ni_t *ni, lnet_msg_t *msg, int rdma_get) rc = lnet_ptl_match_md(&info, msg); if (rc == LNET_MATCHMD_DROP) { - CNETERR("Dropping GET from %s portal %d match "LPU64 - " offset %d length %d\n", + CNETERR("Dropping GET from %s portal %d match %llu offset %d length %d\n", libcfs_id2str(info.mi_id), info.mi_portal, info.mi_mbits, info.mi_roffset, info.mi_rlength); return ENOENT; /* +ve: OK but no match */ @@ -1681,7 +1679,7 @@ lnet_print_hdr(lnet_hdr_t *hdr) case LNET_MSG_PUT: CWARN(" Ptl index %d, ack md "LPX64"."LPX64", " - "match bits "LPU64"\n", + "match bits %llu\n", hdr->msg.put.ptl_index, hdr->msg.put.ack_wmd.wh_interface_cookie, hdr->msg.put.ack_wmd.wh_object_cookie, @@ -1693,7 +1691,7 @@ lnet_print_hdr(lnet_hdr_t *hdr) case LNET_MSG_GET: CWARN(" Ptl index %d, return md "LPX64"."LPX64", " - "match bits "LPU64"\n", hdr->msg.get.ptl_index, + "match bits %llu\n", hdr->msg.get.ptl_index, hdr->msg.get.return_wmd.wh_interface_cookie, hdr->msg.get.return_wmd.wh_object_cookie, hdr->msg.get.match_bits); @@ -1963,8 +1961,7 @@ lnet_drop_delayed_msg_list(struct list_head *head, char *reason) LASSERT(msg->msg_rxpeer != NULL); LASSERT(msg->msg_hdr.type == LNET_MSG_PUT); - CWARN("Dropping delayed PUT from %s portal %d match "LPU64 - " offset %d length %d: %s\n", + CWARN("Dropping delayed PUT from %s portal %d match %llu offset %d length %d: %s\n", libcfs_id2str(id), msg->msg_hdr.msg.put.ptl_index, msg->msg_hdr.msg.put.match_bits, @@ -2009,7 +2006,7 @@ lnet_recv_delayed_msg_list(struct list_head *head) LASSERT(msg->msg_hdr.type == LNET_MSG_PUT); CDEBUG(D_NET, "Resuming delayed PUT from %s portal %d " - "match "LPU64" offset %d length %d.\n", + "match %llu offset %d length %d.\n", libcfs_id2str(id), msg->msg_hdr.msg.put.ptl_index, msg->msg_hdr.msg.put.match_bits, msg->msg_hdr.msg.put.offset, @@ -2097,7 +2094,7 @@ LNetPut(lnet_nid_t self, lnet_handle_md_t mdh, lnet_ack_req_t ack, md = lnet_handle2md(&mdh); if (md == NULL || md->md_threshold == 0 || md->md_me != NULL) { - CERROR("Dropping PUT ("LPU64":%d:%s): MD (%d) invalid\n", + CERROR("Dropping PUT (%llu:%d:%s): MD (%d) invalid\n", match_bits, portal, libcfs_id2str(target), md == NULL ? -1 : md->md_threshold); if (md != NULL && md->md_me != NULL) @@ -2296,7 +2293,7 @@ LNetGet(lnet_nid_t self, lnet_handle_md_t mdh, md = lnet_handle2md(&mdh); if (md == NULL || md->md_threshold == 0 || md->md_me != NULL) { - CERROR("Dropping GET ("LPU64":%d:%s): MD (%d) invalid\n", + CERROR("Dropping GET (%llu:%d:%s): MD (%d) invalid\n", match_bits, portal, libcfs_id2str(target), md == NULL ? -1 : md->md_threshold); if (md != NULL && md->md_me != NULL) diff --git a/drivers/staging/lustre/lnet/lnet/lib-ptl.c b/drivers/staging/lustre/lnet/lnet/lib-ptl.c index 74222ec0ae5b..425fa04292bd 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-ptl.c +++ b/drivers/staging/lustre/lnet/lnet/lib-ptl.c @@ -184,8 +184,7 @@ lnet_try_match_md(lnet_libmd_t *md, mlength = info->mi_rlength; } else if ((md->md_options & LNET_MD_TRUNCATE) == 0) { /* this packet _really_ is too big */ - CERROR("Matching packet from %s, match "LPU64 - " length %d too big: %d left, %d allowed\n", + CERROR("Matching packet from %s, match %llu length %d too big: %d left, %d allowed\n", libcfs_id2str(info->mi_id), info->mi_mbits, info->mi_rlength, md->md_length - offset, mlength); @@ -687,8 +686,7 @@ lnet_ptl_attach_md(lnet_me_t *me, lnet_libmd_t *md, if ((rc & LNET_MATCHMD_OK) != 0) { list_add_tail(&msg->msg_list, matches); - CDEBUG(D_NET, "Resuming delayed PUT from %s portal %d " - "match "LPU64" offset %d length %d.\n", + CDEBUG(D_NET, "Resuming delayed PUT from %s portal %d match %llu offset %d length %d.\n", libcfs_id2str(info.mi_id), info.mi_portal, info.mi_mbits, info.mi_roffset, info.mi_rlength); diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 122ebf430d2a..166c1e647e2b 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -115,7 +115,7 @@ static int __proc_lnet_stats(void *data, int write, lnet_counters_t *ctrs; int len; char *tmpstr; - const int tmpsiz = 256; /* 7 %u and 4 LPU64 */ + const int tmpsiz = 256; /* 7 %u and 4 %llu */ if (write) { lnet_counters_reset(); @@ -137,8 +137,7 @@ static int __proc_lnet_stats(void *data, int write, lnet_counters_get(ctrs); len = snprintf(tmpstr, tmpsiz, - "%u %u %u %u %u %u %u "LPU64" "LPU64" " - LPU64" "LPU64, + "%u %u %u %u %u %u %u %llu %llu %llu %llu", ctrs->msgs_alloc, ctrs->msgs_max, ctrs->errors, ctrs->send_count, ctrs->recv_count, diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c index aef0041973b8..7e83dff2fcb4 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c @@ -248,7 +248,7 @@ sfw_session_expired (void *data) LASSERT (sn->sn_timer_active); LASSERT (sn == sfw_data.fw_session); - CWARN ("Session expired! sid: %s-"LPU64", name: %s\n", + CWARN ("Session expired! sid: %s-%llu, name: %s\n", libcfs_nid2str(sn->sn_id.ses_nid), sn->sn_id.ses_stamp, &sn->sn_name[0]); @@ -741,7 +741,7 @@ sfw_add_test_instance (sfw_batch_t *tsb, srpc_server_rpc_t *rpc) LIBCFS_ALLOC(tsi, sizeof(*tsi)); if (tsi == NULL) { - CERROR ("Can't allocate test instance for batch: "LPU64"\n", + CERROR ("Can't allocate test instance for batch: %llu\n", tsb->bat_id.bat_id); return -ENOMEM; } @@ -1002,7 +1002,7 @@ sfw_run_batch (sfw_batch_t *tsb) sfw_test_instance_t *tsi; if (sfw_batch_active(tsb)) { - CDEBUG(D_NET, "Batch already active: "LPU64" (%d)\n", + CDEBUG(D_NET, "Batch already active: %llu (%d)\n", tsb->bat_id.bat_id, atomic_read(&tsb->bat_nactive)); return 0; } @@ -1037,7 +1037,7 @@ sfw_stop_batch (sfw_batch_t *tsb, int force) srpc_client_rpc_t *rpc; if (!sfw_batch_active(tsb)) { - CDEBUG(D_NET, "Batch "LPU64" inactive\n", tsb->bat_id.bat_id); + CDEBUG(D_NET, "Batch %llu inactive\n", tsb->bat_id.bat_id); return 0; } diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index 4302c1e9376f..e809d035808b 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -157,7 +157,7 @@ static ssize_t lprocfs_fid_width_seq_write(struct file *file, seq->lcs_width = val; if (rc == 0) { - CDEBUG(D_INFO, "%s: Sequence size: "LPU64"\n", + CDEBUG(D_INFO, "%s: Sequence size: %llu\n", seq->lcs_name, seq->lcs_width); } } @@ -176,7 +176,7 @@ lprocfs_fid_width_seq_show(struct seq_file *m, void *unused) LASSERT(seq != NULL); mutex_lock(&seq->lcs_mutex); - rc = seq_printf(m, LPU64"\n", seq->lcs_width); + rc = seq_printf(m, "%llu\n", seq->lcs_width); mutex_unlock(&seq->lcs_mutex); return rc; diff --git a/drivers/staging/lustre/lustre/fld/fld_cache.c b/drivers/staging/lustre/lustre/fld/fld_cache.c index cce25a82abbd..759a233a7028 100644 --- a/drivers/staging/lustre/lustre/fld/fld_cache.c +++ b/drivers/staging/lustre/lustre/fld/fld_cache.c @@ -113,9 +113,9 @@ void fld_cache_fini(struct fld_cache *cache) } CDEBUG(D_INFO, "FLD cache statistics (%s):\n", cache->fci_name); - CDEBUG(D_INFO, " Total reqs: "LPU64"\n", cache->fci_stat.fst_count); - CDEBUG(D_INFO, " Cache reqs: "LPU64"\n", cache->fci_stat.fst_cache); - CDEBUG(D_INFO, " Cache hits: "LPU64"%%\n", pct); + CDEBUG(D_INFO, " Total reqs: %llu\n", cache->fci_stat.fst_count); + CDEBUG(D_INFO, " Cache reqs: %llu\n", cache->fci_stat.fst_cache); + CDEBUG(D_INFO, " Cache hits: %llu%%\n", pct); OBD_FREE_PTR(cache); } diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 825b73f945b5..b759cc9fe5f7 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -148,7 +148,7 @@ fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq) (char *)target->ft_exp->exp_obd->obd_uuid.uuid : ""; - CERROR(" exp: 0x%p (%s), srv: 0x%p (%s), idx: "LPU64"\n", + CERROR(" exp: 0x%p (%s), srv: 0x%p (%s), idx: %llu\n", target->ft_exp, exp_name, target->ft_srv, srv_name, target->ft_idx); } @@ -184,9 +184,8 @@ fld_client_get_target(struct lu_client_fld *fld, seqno_t seq) spin_unlock(&fld->lcf_lock); if (target != NULL) { - CDEBUG(D_INFO, "%s: Found target (idx "LPU64 - ") by seq "LPX64"\n", fld->lcf_name, - target->ft_idx, seq); + CDEBUG(D_INFO, "%s: Found target (idx %llu) by seq "LPX64"\n", + fld->lcf_name, target->ft_idx, seq); } return target; @@ -208,12 +207,12 @@ int fld_client_add_target(struct lu_client_fld *fld, LASSERT(tar->ft_srv != NULL || tar->ft_exp != NULL); if (fld->lcf_flags != LUSTRE_FLD_INIT) { - CERROR("%s: Attempt to add target %s (idx "LPU64") on fly - skip it\n", + CERROR("%s: Attempt to add target %s (idx %llu) on fly - skip it\n", fld->lcf_name, name, tar->ft_idx); return 0; } else { - CDEBUG(D_INFO, "%s: Adding target %s (idx " - LPU64")\n", fld->lcf_name, name, tar->ft_idx); + CDEBUG(D_INFO, "%s: Adding target %s (idx %llu)\n", + fld->lcf_name, name, tar->ft_idx); } OBD_ALLOC_PTR(target); @@ -225,7 +224,7 @@ int fld_client_add_target(struct lu_client_fld *fld, if (tmp->ft_idx == tar->ft_idx) { spin_unlock(&fld->lcf_lock); OBD_FREE_PTR(target); - CERROR("Target %s exists in FLD and known as %s:#"LPU64"\n", + CERROR("Target %s exists in FLD and known as %s:#%llu\n", name, fld_target_name(tmp), tmp->ft_idx); return -EEXIST; } @@ -473,7 +472,7 @@ int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds, target = fld_client_get_target(fld, seq); LASSERT(target != NULL); - CDEBUG(D_INFO, "%s: Lookup fld entry (seq: "LPX64") on target %s (idx "LPU64")\n", + CDEBUG(D_INFO, "%s: Lookup fld entry (seq: "LPX64") on target %s (idx %llu)\n", fld->lcf_name, seq, fld_target_name(target), target->ft_idx); res.lsr_start = seq; diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index ff3cff7c08cb..5b84b7211382 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -91,7 +91,7 @@ #ifndef _LUSTRE_IDL_H_ #define _LUSTRE_IDL_H_ -#if !defined(LPU64) +#if !defined(LPX64) #include "../../../include/linux/libcfs/libcfs.h" /* for LPUX64, etc */ #endif @@ -681,14 +681,14 @@ static inline void ostid_set_id(struct ost_id *oi, __u64 oid) { if (fid_seq_is_mdt0(ostid_seq(oi))) { if (oid >= IDIF_MAX_OID) { - CERROR("Bad "LPU64" to set "DOSTID"\n", + CERROR("Bad %llu to set "DOSTID"\n", oid, POSTID(oi)); return; } oi->oi.oi_id = oid; } else { if (oid > OBIF_MAX_OID) { - CERROR("Bad "LPU64" to set "DOSTID"\n", + CERROR("Bad %llu to set "DOSTID"\n", oid, POSTID(oi)); return; } diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h index 74757f7d1dbb..6309ce73af6a 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h @@ -179,7 +179,7 @@ struct ost_id { }; }; -#define DOSTID LPX64":"LPU64 +#define DOSTID LPX64":%llu" #define POSTID(oi) ostid_seq(oi), ostid_id(oi) /* diff --git a/drivers/staging/lustre/lustre/include/lustre_capa.h b/drivers/staging/lustre/lustre/include/lustre_capa.h index 3346ee9d43cd..ab6b9ea98a70 100644 --- a/drivers/staging/lustre/lustre/include/lustre_capa.h +++ b/drivers/staging/lustre/lustre/include/lustre_capa.h @@ -167,7 +167,7 @@ do { \ #define DEBUG_CAPA_KEY(level, k, fmt, args...) \ do { \ -CDEBUG(level, fmt " capability key@%p seq "LPU64" keyid %u\n", \ +CDEBUG(level, fmt " capability key@%p seq %llu keyid %u\n", \ ##args, k, capa_key_seq(k), capa_key_keyid(k)); \ } while (0) diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index 040fc156b925..bb5c639ceb7f 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -1160,13 +1160,12 @@ static inline int obd_statfs_async(struct obd_export *exp, OBD_CHECK_DT_OP(obd, statfs, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, statfs); - CDEBUG(D_SUPER, "%s: osfs %p age "LPU64", max_age "LPU64"\n", + CDEBUG(D_SUPER, "%s: osfs %p age %llu, max_age %llu\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs_age, max_age); if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs_async)(exp, oinfo, max_age, rqset); } else { - CDEBUG(D_SUPER,"%s: use %p cache blocks "LPU64"/"LPU64 - " objects "LPU64"/"LPU64"\n", + CDEBUG(D_SUPER,"%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); @@ -1217,7 +1216,7 @@ static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp, OBD_CHECK_DT_OP(obd, statfs, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, statfs); - CDEBUG(D_SUPER, "osfs "LPU64", max_age "LPU64"\n", + CDEBUG(D_SUPER, "osfs %llu, max_age %llu\n", obd->obd_osfs_age, max_age); if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs)(env, exp, osfs, max_age, flags); @@ -1228,8 +1227,7 @@ static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp, spin_unlock(&obd->obd_osfs_lock); } } else { - CDEBUG(D_SUPER, "%s: use %p cache blocks "LPU64"/"LPU64 - " objects "LPU64"/"LPU64"\n", + CDEBUG(D_SUPER, "%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); diff --git a/drivers/staging/lustre/lustre/include/obd_support.h b/drivers/staging/lustre/lustre/include/obd_support.h index 4164caea8e7d..72e3eab77c8d 100644 --- a/drivers/staging/lustre/lustre/include/obd_support.h +++ b/drivers/staging/lustre/lustre/include/obd_support.h @@ -662,7 +662,7 @@ do { \ if (unlikely((ptr) == NULL)) { \ CERROR("vmalloc of '" #ptr "' (%d bytes) failed\n", \ (int)(size)); \ - CERROR(LPU64" total bytes allocated by Lustre, %d by LNET\n", \ + CERROR("%llu total bytes allocated by Lustre, %d by LNET\n", \ obd_memory_sum(), atomic_read(&libcfs_kmemory)); \ } else { \ OBD_ALLOC_POST(ptr, size, "vmalloced"); \ @@ -822,11 +822,11 @@ do { \ alloc_page(gfp_mask) : \ alloc_pages_node(cfs_cpt_spread_node(cptab, cpt), gfp_mask, 0);\ if (unlikely((ptr) == NULL)) { \ - CERROR("alloc_pages of '" #ptr "' %d page(s) / "LPU64" bytes "\ + CERROR("alloc_pages of '" #ptr "' %d page(s) / %llu bytes "\ "failed\n", (int)1, \ (__u64)(1 << PAGE_CACHE_SHIFT)); \ - CERROR(LPU64" total bytes and "LPU64" total pages " \ - "("LPU64" bytes) allocated by Lustre, " \ + CERROR("%llu total bytes and %llu total pages " \ + "(%llu bytes) allocated by Lustre, " \ "%d total bytes by LNET\n", \ obd_memory_sum(), \ obd_pages_sum() << PAGE_CACHE_SHIFT, \ @@ -835,7 +835,7 @@ do { \ } else { \ obd_pages_add(0); \ CDEBUG(D_MALLOC, "alloc_pages '" #ptr "': %d page(s) / " \ - LPU64" bytes at %p.\n", \ + "%llu bytes at %p.\n", \ (int)1, \ (__u64)(1 << PAGE_CACHE_SHIFT), ptr); \ } \ @@ -850,7 +850,7 @@ do { \ do { \ LASSERT(ptr); \ obd_pages_sub(0); \ - CDEBUG(D_MALLOC, "free_pages '" #ptr "': %d page(s) / "LPU64" bytes " \ + CDEBUG(D_MALLOC, "free_pages '" #ptr "': %d page(s) / %llu bytes " \ "at %p.\n", \ (int)1, (__u64)(1 << PAGE_CACHE_SHIFT), \ ptr); \ diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 0587c67cd129..94f759d0b5ad 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -843,7 +843,7 @@ int ccc_prep_size(const struct lu_env *env, struct cl_object *obj, if (cl_isize_read(inode) < kms) { cl_isize_write_nolock(inode, kms); CDEBUG(D_VFSTRACE, - DFID" updating i_size "LPU64"\n", + DFID" updating i_size %llu\n", PFID(lu_object_fid(&obj->co_lu)), (__u64)cl_isize_read(inode)); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c index 99cf7ae47d9f..0c09b611f4a6 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c @@ -90,7 +90,7 @@ __u64 ldlm_extent_shift_kms(struct ldlm_lock *lock, __u64 old_kms) if (lck->l_policy_data.l_extent.end + 1 > kms) kms = lck->l_policy_data.l_extent.end + 1; } - LASSERTF(kms <= old_kms, "kms "LPU64" old_kms "LPU64"\n", kms, old_kms); + LASSERTF(kms <= old_kms, "kms %llu old_kms %llu\n", kms, old_kms); return kms; } diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c index d5d84afd4fc2..b798daa094bc 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c @@ -260,9 +260,8 @@ ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags, int first_enq, int splitted = 0; const struct ldlm_callback_suite null_cbs = { NULL }; - CDEBUG(D_DLMTRACE, "flags %#llx owner "LPU64" pid %u mode %u start " - LPU64" end "LPU64"\n", *flags, - new->l_policy_data.l_flock.owner, + CDEBUG(D_DLMTRACE, "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n", + *flags, new->l_policy_data.l_flock.owner, new->l_policy_data.l_flock.pid, mode, req->l_policy_data.l_flock.start, req->l_policy_data.l_flock.end); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index 20593e2151a6..144cf77e4c56 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -697,7 +697,7 @@ void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id) rs->rs_opc = lustre_msg_get_opc(req->rq_reqmsg); spin_lock(&exp->exp_uncommitted_replies_lock); - CDEBUG(D_NET, "rs transno = "LPU64", last committed = "LPU64"\n", + CDEBUG(D_NET, "rs transno = %llu, last committed = %llu\n", rs->rs_transno, exp->exp_last_committed); if (rs->rs_transno > exp->exp_last_committed) { /* not committed already */ diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index 68f030ba4a61..ba8414e34ae8 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -624,8 +624,7 @@ void ldlm_lock2desc(struct ldlm_lock *lock, struct ldlm_lock_desc *desc) LASSERTF(lock->l_policy_data.l_inodebits.bits == (MDS_INODELOCK_LOOKUP | MDS_INODELOCK_UPDATE | MDS_INODELOCK_LAYOUT), - "Inappropriate inode lock bits during " - "conversion " LPU64 "\n", + "Inappropriate inode lock bits during conversion %llu\n", lock->l_policy_data.l_inodebits.bits); ldlm_res2desc(lock->l_resource, &desc->l_resource); @@ -1350,7 +1349,7 @@ ldlm_mode_t ldlm_lock_match(struct ldlm_namespace *ns, __u64 flags, } out2: if (rc) { - LDLM_DEBUG(lock, "matched ("LPU64" "LPU64")", + LDLM_DEBUG(lock, "matched (%llu %llu)", (type == LDLM_PLAIN || type == LDLM_IBITS) ? res_id->name[2] : policy->l_extent.start, (type == LDLM_PLAIN || type == LDLM_IBITS) ? @@ -1369,9 +1368,8 @@ ldlm_mode_t ldlm_lock_match(struct ldlm_namespace *ns, __u64 flags, LDLM_LOCK_RELEASE(lock); } else if (!(flags & LDLM_FL_TEST_LOCK)) {/*less verbose for test-only*/ - LDLM_DEBUG_NOLOCK("not matched ns %p type %u mode %u res " - LPU64"/"LPU64" ("LPU64" "LPU64")", ns, - type, mode, res_id->name[0], res_id->name[1], + LDLM_DEBUG_NOLOCK("not matched ns %p type %u mode %u res %llu/%llu (%llu %llu)", + ns, type, mode, res_id->name[0], res_id->name[1], (type == LDLM_PLAIN || type == LDLM_IBITS) ? res_id->name[2] :policy->l_extent.start, (type == LDLM_PLAIN || type == LDLM_IBITS) ? @@ -2277,8 +2275,8 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, case LDLM_EXTENT: libcfs_debug_vmsg2(msgdata, fmt, args, " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " - "res: "DLDLMRES" rrc: %d type: %s ["LPU64"->"LPU64"] " - "(req "LPU64"->"LPU64") flags: "LPX64" nid: %s remote: " + "res: "DLDLMRES" rrc: %d type: %s [%llu->%llu] " + "(req %llu->%llu) flags: "LPX64" nid: %s remote: " LPX64" expref: %d pid: %u timeout: %lu lvb_type: %d\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, atomic_read(&lock->l_refc), @@ -2301,7 +2299,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, libcfs_debug_vmsg2(msgdata, fmt, args, " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " "res: "DLDLMRES" rrc: %d type: %s pid: %d " - "["LPU64"->"LPU64"] flags: "LPX64" nid: %s " + "[%llu->%llu] flags: "LPX64" nid: %s " "remote: "LPX64" expref: %d pid: %u timeout: %lu\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, atomic_read(&lock->l_refc), diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index ec8cd52066e9..7623c656f1cc 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -659,8 +659,8 @@ static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused) spin_unlock(&pl->pl_lock); seq_printf(m, "LDLM pool state (%s):\n" - " SLV: "LPU64"\n" - " CLV: "LPU64"\n" + " SLV: %llu\n" + " CLV: %llu\n" " LVF: %d\n", pl->pl_name, slv, clv, lvf); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 589ebaf30cce..798ede7595a7 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -1276,8 +1276,7 @@ int ldlm_cli_update_pool(struct ptlrpc_request *req) * server-side namespace is not possible. */ if (lustre_msg_get_slv(req->rq_repmsg) == 0 || lustre_msg_get_limit(req->rq_repmsg) == 0) { - DEBUG_REQ(D_HA, req, "Zero SLV or Limit found " - "(SLV: "LPU64", Limit: %u)", + DEBUG_REQ(D_HA, req, "Zero SLV or Limit found (SLV: %llu, Limit: %u)", lustre_msg_get_slv(req->rq_repmsg), lustre_msg_get_limit(req->rq_repmsg)); return 0; @@ -1893,7 +1892,7 @@ int ldlm_cli_cancel_unused_resource(struct ldlm_namespace *ns, res = ldlm_resource_get(ns, NULL, res_id, 0, 0); if (res == NULL) { /* This is not a problem. */ - CDEBUG(D_INFO, "No resource "LPU64"\n", res_id->name[0]); + CDEBUG(D_INFO, "No resource %llu\n", res_id->name[0]); return 0; } diff --git a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c index 452227da2cb3..88af82034e92 100644 --- a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c +++ b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c @@ -68,7 +68,7 @@ static void free_entry(struct upcall_cache *cache, cache->uc_ops->free_entry(cache, entry); list_del(&entry->ue_hash); - CDEBUG(D_OTHER, "destroy cache entry %p for key "LPU64"\n", + CDEBUG(D_OTHER, "destroy cache entry %p for key %llu\n", entry, entry->ue_key); LIBCFS_FREE(entry, sizeof(*entry)); } @@ -229,7 +229,7 @@ find_again: if (UC_CACHE_IS_ACQUIRING(entry)) { /* we're interrupted or upcall failed in the middle */ rc = left > 0 ? -EINTR : -ETIMEDOUT; - CERROR("acquire for key "LPU64": error %d\n", + CERROR("acquire for key %llu: error %d\n", entry->ue_key, rc); put_entry(cache, entry); GOTO(out, entry = ERR_PTR(rc)); @@ -302,7 +302,7 @@ int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key, } if (!found) { - CDEBUG(D_OTHER, "%s: upcall for key "LPU64" not expected\n", + CDEBUG(D_OTHER, "%s: upcall for key %llu not expected\n", cache->uc_name, key); /* haven't found, it's possible */ spin_unlock(&cache->uc_lock); @@ -310,19 +310,19 @@ int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key, } if (err) { - CDEBUG(D_OTHER, "%s: upcall for key "LPU64" returned %d\n", + CDEBUG(D_OTHER, "%s: upcall for key %llu returned %d\n", cache->uc_name, entry->ue_key, err); GOTO(out, rc = -EINVAL); } if (!UC_CACHE_IS_ACQUIRING(entry)) { - CDEBUG(D_RPCTRACE,"%s: found uptodate entry %p (key "LPU64")\n", + CDEBUG(D_RPCTRACE,"%s: found uptodate entry %p (key %llu)\n", cache->uc_name, entry, entry->ue_key); GOTO(out, rc = 0); } if (UC_CACHE_IS_INVALID(entry) || UC_CACHE_IS_EXPIRED(entry)) { - CERROR("%s: found a stale entry %p (key "LPU64") in ioctl\n", + CERROR("%s: found a stale entry %p (key %llu) in ioctl\n", cache->uc_name, entry, entry->ue_key); GOTO(out, rc = -EINVAL); } @@ -336,7 +336,7 @@ int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key, entry->ue_expire = cfs_time_shift(cache->uc_entry_expire); UC_CACHE_SET_VALID(entry); - CDEBUG(D_OTHER, "%s: created upcall cache entry %p for key "LPU64"\n", + CDEBUG(D_OTHER, "%s: created upcall cache entry %p for key %llu\n", cache->uc_name, entry, entry->ue_key); out: if (rc) { @@ -401,8 +401,7 @@ void upcall_cache_flush_one(struct upcall_cache *cache, __u64 key, void *args) } if (found) { - CWARN("%s: flush entry %p: key "LPU64", ref %d, fl %x, " - "cur %lu, ex %ld/%ld\n", + CWARN("%s: flush entry %p: key %llu, ref %d, fl %x, cur %lu, ex %ld/%ld\n", cache->uc_name, entry, entry->ue_key, atomic_read(&entry->ue_refcount), entry->ue_flags, get_seconds(), entry->ue_acquire_expire, diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index 4d28a857dc8f..5d2b883b1100 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -158,7 +158,7 @@ static int ll_dir_filler(void *_hash, struct page *page0) int i; int rc; - CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p) hash "LPU64"\n", + CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p) hash %llu\n", inode->i_ino, inode->i_generation, inode, hash); LASSERT(max_pages > 0 && max_pages <= MD_MAX_BRW_PAGES); @@ -304,7 +304,7 @@ static struct page *ll_dir_page_locate(struct inode *dir, __u64 *hash, } LASSERTF(*start <= *hash, "start = "LPX64",end = " LPX64",hash = "LPX64"\n", *start, *end, *hash); - CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash "LPU64"\n", + CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash %llu\n", offset, *start, *end, *hash); if (*hash > *end) { ll_release_page(page, 0); @@ -376,7 +376,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, if (request) ptlrpc_req_finished(request); if (rc < 0) { - CERROR("lock enqueue: "DFID" at "LPU64": rc %d\n", + CERROR("lock enqueue: "DFID" at %llu: rc %d\n", PFID(ll_inode2fid(dir)), hash, rc); return ERR_PTR(rc); } @@ -396,7 +396,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, mutex_lock(&lli->lli_readdir_mutex); page = ll_dir_page_locate(dir, &lhash, &start, &end); if (IS_ERR(page)) { - CERROR("dir page locate: "DFID" at "LPU64": rc %ld\n", + CERROR("dir page locate: "DFID" at %llu: rc %ld\n", PFID(ll_inode2fid(dir)), lhash, PTR_ERR(page)); GOTO(out_unlock, page); } else if (page != NULL) { @@ -420,7 +420,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, page = read_cache_page(mapping, hash_x_index(hash, hash64), ll_dir_filler, &lhash); if (IS_ERR(page)) { - CERROR("read cache page: "DFID" at "LPU64": rc %ld\n", + CERROR("read cache page: "DFID" at %llu: rc %ld\n", PFID(ll_inode2fid(dir)), hash, PTR_ERR(page)); GOTO(out_unlock, page); } @@ -428,14 +428,14 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, wait_on_page_locked(page); (void)kmap(page); if (!PageUptodate(page)) { - CERROR("page not updated: "DFID" at "LPU64": rc %d\n", + CERROR("page not updated: "DFID" at %llu: rc %d\n", PFID(ll_inode2fid(dir)), hash, -5); goto fail; } if (!PageChecked(page)) ll_check_page(dir, page); if (PageError(page)) { - CERROR("page error: "DFID" at "LPU64": rc %d\n", + CERROR("page error: "DFID" at %llu: rc %d\n", PFID(ll_inode2fid(dir)), hash, -5); goto fail; } @@ -452,10 +452,9 @@ hash_collision: } if (end == start) { LASSERT(start == lhash); - CWARN("Page-wide hash collision: "LPU64"\n", end); + CWARN("Page-wide hash collision: %llu\n", end); if (BITS_PER_LONG == 32 && hash64) - CWARN("Real page-wide hash collision at ["LPU64" "LPU64 - "] with hash "LPU64"\n", + CWARN("Real page-wide hash collision at [%llu %llu] with hash %llu\n", le64_to_cpu(dp->ldp_hash_start), le64_to_cpu(dp->ldp_hash_end), hash); /* diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index e7a8bc1de354..e547c2b185c9 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c @@ -471,7 +471,7 @@ void ll_ioepoch_open(struct ll_inode_info *lli, __u64 ioepoch) { if (ioepoch && lli->lli_ioepoch != ioepoch) { lli->lli_ioepoch = ioepoch; - CDEBUG(D_INODE, "Epoch "LPU64" opened on "DFID"\n", + CDEBUG(D_INODE, "Epoch %llu opened on "DFID"\n", ioepoch, PFID(&lli->lli_fid)); } } @@ -1008,7 +1008,7 @@ int ll_merge_lvb(const struct lu_env *env, struct inode *inode) if (lvb.lvb_mtime < attr->cat_mtime) lvb.lvb_mtime = attr->cat_mtime; - CDEBUG(D_VFSTRACE, DFID" updating i_size "LPU64"\n", + CDEBUG(D_VFSTRACE, DFID" updating i_size %llu\n", PFID(&lli->lli_fid), attr->cat_size); cl_isize_write_nolock(inode, attr->cat_size); @@ -2708,9 +2708,9 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) if (IS_ERR(op_data)) return PTR_ERR(op_data); - CDEBUG(D_DLMTRACE, "inode=%lu, pid=%u, flags=%#llx, mode=%u, " - "start="LPU64", end="LPU64"\n", inode->i_ino, flock.l_flock.pid, - flags, einfo.ei_mode, flock.l_flock.start, flock.l_flock.end); + CDEBUG(D_DLMTRACE, "inode=%lu, pid=%u, flags=%#llx, mode=%u, start=%llu, end=%llu\n", + inode->i_ino, flock.l_flock.pid, flags, einfo.ei_mode, + flock.l_flock.start, flock.l_flock.end); rc = md_enqueue(sbi->ll_md_exp, &einfo, NULL, op_data, &lockh, &flock, 0, NULL /* req */, flags); diff --git a/drivers/staging/lustre/lustre/llite/llite_close.c b/drivers/staging/lustre/lustre/llite/llite_close.c index 9a5e255dab76..6a3a7a303043 100644 --- a/drivers/staging/lustre/lustre/llite/llite_close.c +++ b/drivers/staging/lustre/lustre/llite/llite_close.c @@ -170,7 +170,7 @@ void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, GOTO(out, 0); } } - CDEBUG(D_INODE, "Epoch "LPU64" closed on "DFID"\n", + CDEBUG(D_INODE, "Epoch %llu closed on "DFID"\n", ll_i2info(inode)->lli_ioepoch, PFID(&lli->lli_fid)); op_data->op_flags |= MF_EPOCH_CLOSE; diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index 1f58a054569d..ead13bc2e935 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -1296,7 +1296,7 @@ static int ll_setattr_done_writing(struct inode *inode, if (!S_ISREG(inode->i_mode)) return 0; - CDEBUG(D_INODE, "Epoch "LPU64" closed on "DFID" for truncate\n", + CDEBUG(D_INODE, "Epoch %llu closed on "DFID" for truncate\n", op_data->op_ioepoch, PFID(&lli->lli_fid)); op_data->op_flags = MF_EPOCH_CLOSE; @@ -1377,7 +1377,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) * OST maximum object size and number of stripes. This * needs another check in addition to the VFS check above. */ if (attr->ia_size > ll_file_maxbytes(inode)) { - CDEBUG(D_INODE,"file "DFID" too large %llu > "LPU64"\n", + CDEBUG(D_INODE,"file "DFID" too large %llu > %llu\n", PFID(&lli->lli_fid), attr->ia_size, ll_file_maxbytes(inode)); return -EFBIG; @@ -1567,7 +1567,7 @@ int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs, osfs->os_type = sb->s_magic; - CDEBUG(D_SUPER, "MDC blocks "LPU64"/"LPU64" objects "LPU64"/"LPU64"\n", + CDEBUG(D_SUPER, "MDC blocks %llu/%llu objects %llu/%llu\n", osfs->os_bavail, osfs->os_blocks, osfs->os_ffree,osfs->os_files); if (sbi->ll_flags & LL_SBI_LAZYSTATFS) @@ -1579,7 +1579,7 @@ int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs, return rc; } - CDEBUG(D_SUPER, "OSC blocks "LPU64"/"LPU64" objects "LPU64"/"LPU64"\n", + CDEBUG(D_SUPER, "OSC blocks %llu/%llu objects %llu/%llu\n", obd_osfs.os_bavail, obd_osfs.os_blocks, obd_osfs.os_ffree, obd_osfs.os_files); @@ -1606,7 +1606,7 @@ int ll_statfs(struct dentry *de, struct kstatfs *sfs) struct obd_statfs osfs; int rc; - CDEBUG(D_VFSTRACE, "VFS Op: at "LPU64" jiffies\n", get_jiffies_64()); + CDEBUG(D_VFSTRACE, "VFS Op: at %llu jiffies\n", get_jiffies_64()); ll_stats_ops_tally(ll_s2sbi(sb), LPROC_LL_STAFS, 1); /* Some amount of caching on the client is allowed */ @@ -1699,9 +1699,9 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md) } if (body->valid & OBD_MD_FLMTIME) { if (body->mtime > LTIME_S(inode->i_mtime)) { - CDEBUG(D_INODE, "setting ino %lu mtime from %lu " - "to "LPU64"\n", inode->i_ino, - LTIME_S(inode->i_mtime), body->mtime); + CDEBUG(D_INODE, "setting ino %lu mtime from %lu to %llu\n", + inode->i_ino, LTIME_S(inode->i_mtime), + body->mtime); LTIME_S(inode->i_mtime) = body->mtime; } lli->lli_lvb.lvb_mtime = body->mtime; diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c index 3af47b3dc79c..7dae610f5c86 100644 --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c @@ -449,7 +449,7 @@ int ll_teardown_mmaps(struct address_space *mapping, __u64 first, __u64 last) { int rc = -ENOENT; - LASSERTF(last > first, "last "LPU64" first "LPU64"\n", last, first); + LASSERTF(last > first, "last %llu first %llu\n", last, first); if (mapping_mapped(mapping)) { rc = 0; unmap_mapping_range(mapping, first + PAGE_CACHE_SIZE - 1, diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index e952dfa9ed36..e48f323c0d71 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -82,7 +82,7 @@ static int ll_kbytestotal_seq_show(struct seq_file *m, void *v) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -105,7 +105,7 @@ static int ll_kbytesfree_seq_show(struct seq_file *m, void *v) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -128,7 +128,7 @@ static int ll_kbytesavail_seq_show(struct seq_file *m, void *v) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -145,7 +145,7 @@ static int ll_filestotal_seq_show(struct seq_file *m, void *v) cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), OBD_STATFS_NODELAY); if (!rc) - rc = seq_printf(m, LPU64"\n", osfs.os_files); + rc = seq_printf(m, "%llu\n", osfs.os_files); return rc; } LPROC_SEQ_FOPS_RO(ll_filestotal); @@ -161,7 +161,7 @@ static int ll_filesfree_seq_show(struct seq_file *m, void *v) cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), OBD_STATFS_NODELAY); if (!rc) - rc = seq_printf(m, LPU64"\n", osfs.os_ffree); + rc = seq_printf(m, "%llu\n", osfs.os_ffree); return rc; } LPROC_SEQ_FOPS_RO(ll_filesfree); diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c index 5168e0a6c879..d79e96c92daa 100644 --- a/drivers/staging/lustre/lustre/llite/namei.c +++ b/drivers/staging/lustre/lustre/llite/namei.c @@ -758,7 +758,7 @@ static void ll_update_times(struct ptlrpc_request *request, LASSERT(body); if (body->valid & OBD_MD_FLMTIME && body->mtime > LTIME_S(inode->i_mtime)) { - CDEBUG(D_INODE, "setting ino %lu mtime from %lu to "LPU64"\n", + CDEBUG(D_INODE, "setting ino %lu mtime from %lu to %llu\n", inode->i_ino, LTIME_S(inode->i_mtime), body->mtime); LTIME_S(inode->i_mtime) = body->mtime; } diff --git a/drivers/staging/lustre/lustre/llite/rw.c b/drivers/staging/lustre/lustre/llite/rw.c index 6028f1a984f0..cd8402ef0fd5 100644 --- a/drivers/staging/lustre/lustre/llite/rw.c +++ b/drivers/staging/lustre/lustre/llite/rw.c @@ -601,7 +601,7 @@ stride_pg_count(pgoff_t st_off, unsigned long st_len, unsigned long st_pgs, if (end_left > st_pgs) end_left = st_pgs; - CDEBUG(D_READA, "start "LPU64", end "LPU64" start_left %lu end_left %lu \n", + CDEBUG(D_READA, "start %llu, end %llu start_left %lu end_left %lu \n", start, end, start_left, end_left); if (start == end) @@ -1013,7 +1013,7 @@ void ras_update(struct ll_sb_info *sbi, struct inode *inode, kms_pages = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; - CDEBUG(D_READA, "kmsp "LPU64" mwp %lu mp %lu\n", kms_pages, + CDEBUG(D_READA, "kmsp %llu mwp %lu mp %lu\n", kms_pages, ra->ra_max_read_ahead_whole_pages, ra->ra_max_pages_per_file); if (kms_pages && diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c index bad8a84f8c2f..c39cf8d47d6e 100644 --- a/drivers/staging/lustre/lustre/llite/statahead.c +++ b/drivers/staging/lustre/lustre/llite/statahead.c @@ -206,7 +206,7 @@ ll_sa_entry_alloc(struct ll_statahead_info *sai, __u64 index, if (unlikely(entry == NULL)) return ERR_PTR(-ENOMEM); - CDEBUG(D_READA, "alloc sa entry %.*s(%p) index "LPU64"\n", + CDEBUG(D_READA, "alloc sa entry %.*s(%p) index %llu\n", len, name, entry, index); entry->se_index = index; @@ -325,7 +325,7 @@ static void ll_sa_entry_put(struct ll_statahead_info *sai, struct ll_sa_entry *entry) { if (atomic_dec_and_test(&entry->se_refcount)) { - CDEBUG(D_READA, "free sa entry %.*s(%p) index "LPU64"\n", + CDEBUG(D_READA, "free sa entry %.*s(%p) index %llu\n", entry->se_qstr.len, entry->se_qstr.name, entry, entry->se_index); @@ -528,8 +528,8 @@ static void ll_sai_put(struct ll_statahead_info *sai) spin_unlock(&lli->lli_sa_lock); if (sai->sai_sent > sai->sai_replied) - CDEBUG(D_READA,"statahead for dir "DFID" does not " - "finish: [sent:"LPU64"] [replied:"LPU64"]\n", + CDEBUG(D_READA,"statahead for dir "DFID + " does not finish: [sent:%llu] [replied:%llu]\n", PFID(&lli->lli_fid), sai->sai_sent, sai->sai_replied); @@ -595,7 +595,7 @@ static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) } CDEBUG(D_READA, "Handling (init) async glimpse: inode = " - DFID", idx = "LPU64"\n", PFID(&lli->lli_fid), index); + DFID", idx = %llu\n", PFID(&lli->lli_fid), index); cl_agl(inode); lli->lli_agl_index = 0; @@ -603,7 +603,7 @@ static void ll_agl_trigger(struct inode *inode, struct ll_statahead_info *sai) up_write(&lli->lli_glimpse_sem); CDEBUG(D_READA, "Handled (init) async glimpse: inode= " - DFID", idx = "LPU64", rc = %d\n", + DFID", idx = %llu, rc = %d\n", PFID(&lli->lli_fid), index, rc); iput(inode); @@ -1081,8 +1081,7 @@ static int ll_statahead_thread(void *arg) if (IS_ERR(page)) { rc = PTR_ERR(page); - CDEBUG(D_READA, "error reading dir "DFID" at "LPU64 - "/"LPU64": [rc %d] [parent %u]\n", + CDEBUG(D_READA, "error reading dir "DFID" at %llu/%llu: [rc %d] [parent %u]\n", PFID(ll_inode2fid(dir)), pos, sai->sai_index, rc, plli->lli_opendir_pid); GOTO(out, rc); @@ -1362,8 +1361,7 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry) struct ll_inode_info *lli = ll_i2info(dir); rc = PTR_ERR(page); - CERROR("error reading dir "DFID" at "LPU64": " - "[rc %d] [parent %u]\n", + CERROR("error reading dir "DFID" at %llu: [rc %d] [parent %u]\n", PFID(ll_inode2fid(dir)), pos, rc, lli->lli_opendir_pid); break; @@ -1479,8 +1477,8 @@ ll_sai_unplug(struct ll_statahead_info *sai, struct ll_sa_entry *entry) if (sa_low_hit(sai) && thread_is_running(thread)) { atomic_inc(&sbi->ll_sa_wrong); CDEBUG(D_READA, "Statahead for dir "DFID" hit " - "ratio too low: hit/miss "LPU64"/"LPU64 - ", sent/replied "LPU64"/"LPU64", stopping " + "ratio too low: hit/miss %llu/%llu" + ", sent/replied %llu/%llu, stopping " "statahead thread\n", PFID(&lli->lli_fid), sai->sai_hit, sai->sai_miss, sai->sai_sent, diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index 5da2be525836..56bd17edfdfe 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -735,7 +735,7 @@ repeat_fid2path: *ptr = '/'; } - CDEBUG(D_INFO, "%s: get path %s "DFID" rec: "LPU64" ln: %u\n", + CDEBUG(D_INFO, "%s: get path %s "DFID" rec: %llu ln: %u\n", tgt->ltd_exp->exp_obd->obd_name, gf->gf_path, PFID(&gf->gf_fid), gf->gf_recno, gf->gf_linkno); diff --git a/drivers/staging/lustre/lustre/lov/lov_io.c b/drivers/staging/lustre/lustre/lov/lov_io.c index 65133ea308b6..ce074c54a003 100644 --- a/drivers/staging/lustre/lustre/lov/lov_io.c +++ b/drivers/staging/lustre/lustre/lov/lov_io.c @@ -398,7 +398,7 @@ static int lov_io_iter_init(const struct lu_env *env, start, end); rc = cl_io_iter_init(sub->sub_env, sub->sub_io); lov_sub_put(sub); - CDEBUG(D_VFSTRACE, "shrink: %d ["LPU64", "LPU64")\n", + CDEBUG(D_VFSTRACE, "shrink: %d [%llu, %llu)\n", stripe, start, end); } else rc = PTR_ERR(sub); @@ -436,8 +436,8 @@ static int lov_io_rw_iter_init(const struct lu_env *env, next) - io->u.ci_rw.crw_pos; lio->lis_pos = io->u.ci_rw.crw_pos; lio->lis_endpos = io->u.ci_rw.crw_pos + io->u.ci_rw.crw_count; - CDEBUG(D_VFSTRACE, "stripe: "LPU64" chunk: ["LPU64", "LPU64") " - LPU64"\n", (__u64)start, lio->lis_pos, lio->lis_endpos, + CDEBUG(D_VFSTRACE, "stripe: %llu chunk: [%llu, %llu) %llu\n", + (__u64)start, lio->lis_pos, lio->lis_endpos, (__u64)lio->lis_io_endpos); } /* diff --git a/drivers/staging/lustre/lustre/lov/lov_merge.c b/drivers/staging/lustre/lustre/lov/lov_merge.c index 0076cf317d58..85144b8da96d 100644 --- a/drivers/staging/lustre/lustre/lov/lov_merge.c +++ b/drivers/staging/lustre/lustre/lov/lov_merge.c @@ -61,10 +61,9 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, assert_spin_locked(&lsm->lsm_lock); LASSERT(lsm->lsm_lock_owner == current_pid()); - CDEBUG(D_INODE, "MDT ID "DOSTID" initial value: s="LPU64" m="LPU64 - " a="LPU64" c="LPU64" b="LPU64"\n", POSTID(&lsm->lsm_oi), - lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, lvb->lvb_ctime, - lvb->lvb_blocks); + CDEBUG(D_INODE, "MDT ID "DOSTID" initial value: s=%llu m=%llu a=%llu c=%llu b=%llu\n", + POSTID(&lsm->lsm_oi), lvb->lvb_size, lvb->lvb_mtime, + lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); for (i = 0; i < lsm->lsm_stripe_count; i++) { struct lov_oinfo *loi = lsm->lsm_oinfo[i]; obd_size lov_size, tmpsize; @@ -94,11 +93,11 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, if (loi->loi_lvb.lvb_ctime > current_ctime) current_ctime = loi->loi_lvb.lvb_ctime; - CDEBUG(D_INODE, "MDT ID "DOSTID" on OST[%u]: s="LPU64" m="LPU64 - " a="LPU64" c="LPU64" b="LPU64"\n", POSTID(&lsm->lsm_oi), - loi->loi_ost_idx, loi->loi_lvb.lvb_size, - loi->loi_lvb.lvb_mtime, loi->loi_lvb.lvb_atime, - loi->loi_lvb.lvb_ctime, loi->loi_lvb.lvb_blocks); + CDEBUG(D_INODE, "MDT ID "DOSTID" on OST[%u]: s=%llu m=%llu a=%llu c=%llu b=%llu\n", + POSTID(&lsm->lsm_oi), loi->loi_ost_idx, + loi->loi_lvb.lvb_size, loi->loi_lvb.lvb_mtime, + loi->loi_lvb.lvb_atime, loi->loi_lvb.lvb_ctime, + loi->loi_lvb.lvb_blocks); } *kms_place = kms; @@ -131,9 +130,9 @@ int lov_merge_lvb(struct obd_export *exp, if (kms_only) lvb->lvb_size = kms; - CDEBUG(D_INODE, "merged for ID "DOSTID" s="LPU64" m="LPU64" a="LPU64 - " c="LPU64" b="LPU64"\n", POSTID(&lsm->lsm_oi), lvb->lvb_size, - lvb->lvb_mtime, lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); + CDEBUG(D_INODE, "merged for ID "DOSTID" s=%llu m=%llu a=%llu c=%llu b=%llu\n", + POSTID(&lsm->lsm_oi), lvb->lvb_size, lvb->lvb_mtime, + lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); return rc; } @@ -153,7 +152,7 @@ int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi = lsm->lsm_oinfo[stripe]; kms = lov_size_to_stripe(lsm, size, stripe); CDEBUG(D_INODE, - "stripe %d KMS %sing "LPU64"->"LPU64"\n", + "stripe %d KMS %sing %llu->%llu\n", stripe, kms > loi->loi_kms ? "increase":"shrink", loi->loi_kms, kms); loi_kms_set(loi, loi->loi_lvb.lvb_size = kms); @@ -166,7 +165,7 @@ int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, kms = lov_size_to_stripe(lsm, size, stripe); loi = lsm->lsm_oinfo[stripe]; - CDEBUG(D_INODE, "stripe %d KMS %sincreasing "LPU64"->"LPU64"\n", + CDEBUG(D_INODE, "stripe %d KMS %sincreasing %llu->%llu\n", stripe, kms > loi->loi_kms ? "" : "not ", loi->loi_kms, kms); if (kms > loi->loi_kms) loi_kms_set(loi, kms); diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index ddc10228f420..643eada816e4 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -727,8 +727,7 @@ void lov_fix_desc_stripe_size(__u64 *val) *val = LOV_DESC_STRIPE_SIZE_DEFAULT; } else if (*val & (LOV_MIN_STRIPE_SIZE - 1)) { *val &= ~(LOV_MIN_STRIPE_SIZE - 1); - LCONSOLE_WARN("Changing default stripe size to "LPU64" (a " - "multiple of %u)\n", + LCONSOLE_WARN("Changing default stripe size to %llu (a multiple of %u)\n", *val, LOV_MIN_STRIPE_SIZE); } } @@ -2636,9 +2635,8 @@ static int lov_extent_calc(struct obd_export *exp, struct lov_stripe_md *lsm, lov_do_div64(start, ssize); start = start * ssize; - CDEBUG(D_DLMTRACE, "offset "LPU64", stripe %u, start "LPU64 - ", end "LPU64"\n", *offset, ssize, start, - start + ssize - 1); + CDEBUG(D_DLMTRACE, "offset %llu, stripe %u, start %llu, end %llu\n", + *offset, ssize, start, start + ssize - 1); if (cmd == OBD_CALC_STRIPE_END) { *offset = start + ssize - 1; } else if (cmd == OBD_CALC_STRIPE_START) { diff --git a/drivers/staging/lustre/lustre/lov/lov_offset.c b/drivers/staging/lustre/lustre/lov/lov_offset.c index 9ed5c93ecc37..8e1c3bacc0a0 100644 --- a/drivers/staging/lustre/lustre/lov/lov_offset.c +++ b/drivers/staging/lustre/lustre/lov/lov_offset.c @@ -223,7 +223,7 @@ int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno, start_side = lov_stripe_offset(lsm, start, stripeno, obd_start); end_side = lov_stripe_offset(lsm, end, stripeno, obd_end); - CDEBUG(D_INODE, "["LPU64"->"LPU64"] -> [(%d) "LPU64"->"LPU64" (%d)]\n", + CDEBUG(D_INODE, "[%llu->%llu] -> [(%d) %llu->%llu (%d)]\n", start, end, start_side, *obd_start, *obd_end, end_side); /* this stripe doesn't intersect the file extent when neither diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index 8bd30d18cce7..ce830e45948d 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -1076,7 +1076,7 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo, if (off < 0 && req->rq_oi.oi_oa->o_size) req->rq_oi.oi_oa->o_size--; - CDEBUG(D_INODE, "stripe %d has size "LPU64"/"LPU64"\n", + CDEBUG(D_INODE, "stripe %d has size %llu/%llu\n", i, req->rq_oi.oi_oa->o_size, oinfo->oi_oa->o_size); } diff --git a/drivers/staging/lustre/lustre/lov/lproc_lov.c b/drivers/staging/lustre/lustre/lov/lproc_lov.c index 56695e6f2deb..c993f25fb303 100644 --- a/drivers/staging/lustre/lustre/lov/lproc_lov.c +++ b/drivers/staging/lustre/lustre/lov/lproc_lov.c @@ -48,7 +48,7 @@ static int lov_stripesize_seq_show(struct seq_file *m, void *v) LASSERT(dev != NULL); desc = &dev->u.lov.desc; - return seq_printf(m, LPU64"\n", desc->ld_default_stripe_size); + return seq_printf(m, "%llu\n", desc->ld_default_stripe_size); } static ssize_t lov_stripesize_seq_write(struct file *file, const char *buffer, @@ -78,7 +78,7 @@ static int lov_stripeoffset_seq_show(struct seq_file *m, void *v) LASSERT(dev != NULL); desc = &dev->u.lov.desc; - return seq_printf(m, LPU64"\n", desc->ld_default_stripe_offset); + return seq_printf(m, "%llu\n", desc->ld_default_stripe_offset); } static ssize_t lov_stripeoffset_seq_write(struct file *file, const char *buffer, diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index fb9d30eddaba..606f644565aa 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -136,7 +136,7 @@ static int send_getstatus(struct obd_import *imp, struct lu_fid *rootfid, *rootfid = body->fid1; CDEBUG(D_NET, - "root fid="DFID", last_committed="LPU64"\n", + "root fid="DFID", last_committed=%llu\n", PFID(rootfid), lustre_msg_get_last_committed(req->rq_repmsg)); out: @@ -1182,7 +1182,7 @@ static int mdc_ioc_fid2path(struct obd_export *exp, struct getinfo_fid2path *gf) memcpy(key, KEY_FID2PATH, sizeof(KEY_FID2PATH)); memcpy(key + cfs_size_round(sizeof(KEY_FID2PATH)), gf, sizeof(*gf)); - CDEBUG(D_IOCTL, "path get "DFID" from "LPU64" #%d\n", + CDEBUG(D_IOCTL, "path get "DFID" from %llu #%d\n", PFID(&gf->gf_fid), gf->gf_recno, gf->gf_linkno); if (!fid_is_sane(&gf->gf_fid)) @@ -1200,7 +1200,7 @@ static int mdc_ioc_fid2path(struct obd_export *exp, struct getinfo_fid2path *gf) else if (vallen > sizeof(*gf) + gf->gf_pathlen) GOTO(out, rc = -EOVERFLOW); - CDEBUG(D_IOCTL, "path get "DFID" from "LPU64" #%d\n%s\n", + CDEBUG(D_IOCTL, "path get "DFID" from %llu #%d\n%s\n", PFID(&gf->gf_fid), gf->gf_recno, gf->gf_linkno, gf->gf_path); out: @@ -1515,12 +1515,12 @@ static int changelog_kkuc_cb(const struct lu_env *env, struct llog_handle *llh, if (rec->cr.cr_index < cs->cs_startrec) { /* Skip entries earlier than what we are interested in */ - CDEBUG(D_CHANGELOG, "rec="LPU64" start="LPU64"\n", + CDEBUG(D_CHANGELOG, "rec=%llu start=%llu\n", rec->cr.cr_index, cs->cs_startrec); return 0; } - CDEBUG(D_CHANGELOG, LPU64" %02d%-5s "LPU64" 0x%x t="DFID" p="DFID + CDEBUG(D_CHANGELOG, "%llu %02d%-5s %llu 0x%x t="DFID" p="DFID " %.*s\n", rec->cr.cr_index, rec->cr.cr_type, changelog_type2str(rec->cr.cr_type), rec->cr.cr_time, rec->cr.cr_flags & CLF_FLAGMASK, @@ -1547,7 +1547,7 @@ static int mdc_changelog_send_thread(void *csdata) struct kuc_hdr *kuch; int rc; - CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n", + CDEBUG(D_CHANGELOG, "changelog to fp=%p start %llu\n", cs->cs_fp, cs->cs_startrec); OBD_ALLOC(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE); diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index de9347f93634..69eca4ca6297 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -411,8 +411,8 @@ void _debug_capa(struct lustre_capa *c, va_list args; va_start(args, fmt); libcfs_debug_vmsg2(msgdata, fmt, args, - " capability@%p fid "DFID" opc "LPX64" uid "LPU64 - " gid "LPU64" flags %u alg %d keyid %u timeout %u " + " capability@%p fid "DFID" opc "LPX64" uid %llu" + " gid %llu flags %u alg %d keyid %u timeout %u " "expiry %u\n", c, PFID(capa_fid(c)), capa_opc(c), capa_uid(c), capa_gid(c), capa_flags(c), capa_alg(c), capa_keyid(c), capa_timeout(c), diff --git a/drivers/staging/lustre/lustre/obdclass/cl_io.c b/drivers/staging/lustre/lustre/obdclass/cl_io.c index f863f5da8677..6870ee823736 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_io.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_io.c @@ -227,7 +227,7 @@ int cl_io_rw_init(const struct lu_env *env, struct cl_io *io, LINVRNT(io->ci_obj != NULL); LU_OBJECT_HEADER(D_VFSTRACE, env, &io->ci_obj->co_lu, - "io range: %u ["LPU64", "LPU64") %u %u\n", + "io range: %u [%llu, %llu) %u %u\n", iot, (__u64)pos, (__u64)pos + count, io->u.ci_rw.crw_nonblock, io->u.ci_wr.wr_append); io->u.ci_rw.crw_pos = pos; diff --git a/drivers/staging/lustre/lustre/obdclass/cl_object.c b/drivers/staging/lustre/lustre/obdclass/cl_object.c index b42d2920b06a..ce96bd279111 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_object.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_object.c @@ -295,8 +295,7 @@ int cl_object_glimpse(const struct lu_env *env, struct cl_object *obj, } } LU_OBJECT_HEADER(D_DLMTRACE, env, lu_object_top(top), - "size: "LPU64" mtime: "LPU64" atime: "LPU64" " - "ctime: "LPU64" blocks: "LPU64"\n", + "size: %llu mtime: %llu atime: %llu ctime: %llu blocks: %llu\n", lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); return result; diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index fc17e5d30fd8..e8447e6c2194 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -141,11 +141,11 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type, { if (ptr == NULL || (cfs_rand() & OBD_ALLOC_FAIL_MASK) < obd_alloc_fail_rate) { - CERROR("%s%salloc of %s ("LPU64" bytes) failed at %s:%d\n", + CERROR("%s%salloc of %s (%llu bytes) failed at %s:%d\n", ptr ? "force " :"", type, name, (__u64)size, file, line); - CERROR(LPU64" total bytes and "LPU64" total pages " - "("LPU64" bytes) allocated by Lustre, " + CERROR("%llu total bytes and %llu total pages " + "(%llu bytes) allocated by Lustre, " "%d total bytes by LNET\n", obd_memory_sum(), obd_pages_sum() << PAGE_CACHE_SHIFT, @@ -420,7 +420,7 @@ int obd_init_checks(void) char buf[64]; int len, ret = 0; - CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", LPU64, "%lld", LPX64); + CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", "%llu", "%lld", LPX64); CDEBUG(D_INFO, "OBD_OBJECT_EOF = "LPX64"\n", (__u64)OBD_OBJECT_EOF); @@ -450,11 +450,11 @@ int obd_init_checks(void) return -EOVERFLOW; } if (do_div(div64val, 256) != (u64val & 255)) { - CERROR("do_div("LPX64",256) != "LPU64"\n", u64val, u64val &255); + CERROR("do_div("LPX64",256) != %llu\n", u64val, u64val &255); return -EOVERFLOW; } if (u64val >> 8 != div64val) { - CERROR("do_div("LPX64",256) "LPU64" != "LPU64"\n", + CERROR("do_div("LPX64",256) %llu != %llu\n", u64val, div64val, u64val >> 8); return -EOVERFLOW; } @@ -463,7 +463,7 @@ int obd_init_checks(void) CWARN("LPX64 wrong length! strlen(%s)=%d != 18\n", buf, len); ret = -EINVAL; } - len = snprintf(buf, sizeof(buf), LPU64, u64val); + len = snprintf(buf, sizeof(buf), "%llu", u64val); if (len != 20) { CWARN("LPU64 wrong length! strlen(%s)=%d != 20\n", buf, len); ret = -EINVAL; @@ -474,7 +474,7 @@ int obd_init_checks(void) ret = -EINVAL; } if ((u64val & ~CFS_PAGE_MASK) >= PAGE_CACHE_SIZE) { - CWARN("mask failed: u64val "LPU64" >= "LPU64"\n", u64val, + CWARN("mask failed: u64val %llu >= %llu\n", u64val, (__u64)PAGE_CACHE_SIZE); ret = -EINVAL; } @@ -662,10 +662,10 @@ static void cleanup_obdclass(void) lprocfs_free_stats(&obd_memory); CDEBUG((memory_leaked) ? D_ERROR : D_INFO, - "obd_memory max: "LPU64", leaked: "LPU64"\n", + "obd_memory max: %llu, leaked: %llu\n", memory_max, memory_leaked); CDEBUG((pages_leaked) ? D_ERROR : D_INFO, - "obd_memory_pages max: "LPU64", leaked: "LPU64"\n", + "obd_memory_pages max: %llu, leaked: %llu\n", pages_max, pages_leaked); } diff --git a/drivers/staging/lustre/lustre/obdclass/debug.c b/drivers/staging/lustre/lustre/obdclass/debug.c index 885d99338de0..97eceb11b890 100644 --- a/drivers/staging/lustre/lustre/obdclass/debug.c +++ b/drivers/staging/lustre/lustre/obdclass/debug.c @@ -84,24 +84,24 @@ int block_debug_check(char *who, void *addr, int end, __u64 off, __u64 id) ne_off = le64_to_cpu (off); id = le64_to_cpu (id); if (memcmp(addr, (char *)&ne_off, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset "LPU64" off: "LPX64" != " + CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu off: "LPX64" != " LPX64"\n", who, id, off, *(__u64 *)addr, ne_off); err = -EINVAL; } if (memcmp(addr + LPDS, (char *)&id, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset "LPU64" id: "LPX64" != "LPX64"\n", + CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu id: "LPX64" != "LPX64"\n", who, id, off, *(__u64 *)(addr + LPDS), id); err = -EINVAL; } addr += end - LPDS - LPDS; if (memcmp(addr, (char *)&ne_off, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset "LPU64" end off: "LPX64" != " + CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu end off: "LPX64" != " LPX64"\n", who, id, off, *(__u64 *)addr, ne_off); err = -EINVAL; } if (memcmp(addr + LPDS, (char *)&id, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset "LPU64" end id: "LPX64" != " + CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu end id: "LPX64" != " LPX64"\n", who, id, off, *(__u64 *)(addr + LPDS), id); err = -EINVAL; } diff --git a/drivers/staging/lustre/lustre/obdclass/dt_object.c b/drivers/staging/lustre/lustre/obdclass/dt_object.c index 854a79e6357d..faea1e1e29ef 100644 --- a/drivers/staging/lustre/lustre/obdclass/dt_object.c +++ b/drivers/staging/lustre/lustre/obdclass/dt_object.c @@ -963,7 +963,7 @@ int lprocfs_dt_rd_kbytestotal(char *page, char **start, off_t off, result <<= 1; *eof = 1; - rc = snprintf(page, count, LPU64"\n", result); + rc = snprintf(page, count, "%llu\n", result); } return rc; @@ -985,7 +985,7 @@ int lprocfs_dt_rd_kbytesfree(char *page, char **start, off_t off, result <<= 1; *eof = 1; - rc = snprintf(page, count, LPU64"\n", result); + rc = snprintf(page, count, "%llu\n", result); } return rc; @@ -1007,7 +1007,7 @@ int lprocfs_dt_rd_kbytesavail(char *page, char **start, off_t off, result <<= 1; *eof = 1; - rc = snprintf(page, count, LPU64"\n", result); + rc = snprintf(page, count, "%llu\n", result); } return rc; @@ -1023,7 +1023,7 @@ int lprocfs_dt_rd_filestotal(char *page, char **start, off_t off, int rc = dt_statfs(NULL, dt, &osfs); if (rc == 0) { *eof = 1; - rc = snprintf(page, count, LPU64"\n", osfs.os_files); + rc = snprintf(page, count, "%llu\n", osfs.os_files); } return rc; @@ -1039,7 +1039,7 @@ int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off, int rc = dt_statfs(NULL, dt, &osfs); if (rc == 0) { *eof = 1; - rc = snprintf(page, count, LPU64"\n", osfs.os_ffree); + rc = snprintf(page, count, "%llu\n", osfs.os_ffree); } return rc; diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index b32578604c1c..f054dd6130ce 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -1493,7 +1493,7 @@ static void print_export_data(struct obd_export *exp, const char *status, } spin_unlock(&exp->exp_lock); - CDEBUG(D_HA, "%s: %s %p %s %s %d (%d %d %d) %d %d %d %d: %p %s "LPU64"\n", + CDEBUG(D_HA, "%s: %s %p %s %s %d (%d %d %d) %d %d %d %d: %p %s %llu\n", exp->exp_obd->obd_name, status, exp, exp->exp_client_uuid.uuid, obd_export_nid2str(exp), atomic_read(&exp->exp_refcount), atomic_read(&exp->exp_rpc_count), diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c index 945fbb64fe15..35f077c8286d 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c @@ -151,7 +151,7 @@ void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new "LPU64"/"LPU64"\n", + "valid "LPX64", cur time %lu/%lu, new %llu/%llu\n", src->o_valid, LTIME_S(dst->i_mtime), LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); @@ -190,7 +190,7 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new "LPU64"/"LPU64"\n", + "valid "LPX64", cur time %lu/%lu, new %llu/%llu\n", src->o_valid, LTIME_S(dst->i_mtime), LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 90dbaaddb311..5a36930e8fbb 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -103,7 +103,7 @@ int proc_memory_alloc(struct ctl_table *table, int write, void __user *buffer, if (write) return -EINVAL; - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_memory_sum()); + len = snprintf(buf, sizeof(buf), "%llu\n", obd_memory_sum()); if (len > *lenp) len = *lenp; buf[len] = '\0'; @@ -127,7 +127,7 @@ int proc_pages_alloc(struct ctl_table *table, int write, void __user *buffer, if (write) return -EINVAL; - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_pages_sum()); + len = snprintf(buf, sizeof(buf), "%llu\n", obd_pages_sum()); if (len > *lenp) len = *lenp; buf[len] = '\0'; @@ -151,7 +151,7 @@ int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, if (write) return -EINVAL; - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_memory_max()); + len = snprintf(buf, sizeof(buf), "%llu\n", obd_memory_max()); if (len > *lenp) len = *lenp; buf[len] = '\0'; @@ -175,7 +175,7 @@ int proc_pages_max(struct ctl_table *table, int write, void __user *buffer, if (write) return -EINVAL; - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_pages_max()); + len = snprintf(buf, sizeof(buf), "%llu\n", obd_pages_max()); if (len > *lenp) len = *lenp; buf[len] = '\0'; diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c index 1ba789f8d526..fd48d59cf315 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c @@ -389,7 +389,7 @@ static int llog_lvfs_next_block(const struct lu_env *env, if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) return -EINVAL; - CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off "LPU64")\n", + CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off %llu)\n", next_idx, *cur_idx, *cur_offset); while (*cur_offset < i_size_read(loghandle->lgh_file->f_dentry->d_inode)) { @@ -408,7 +408,7 @@ static int llog_lvfs_next_block(const struct lu_env *env, cur_offset); if (rc < 0) { CERROR("Cant read llog block at log id "DOSTID - "/%u offset "LPU64"\n", + "/%u offset %llu\n", POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, *cur_offset); @@ -426,8 +426,8 @@ static int llog_lvfs_next_block(const struct lu_env *env, return 0; if (rc < sizeof(*tail)) { - CERROR("Invalid llog block at log id "DOSTID"/%u offset" - LPU64"\n", POSTID(&loghandle->lgh_id.lgl_oi), + CERROR("Invalid llog block at log id "DOSTID"/%u offset%llu\n", + POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, *cur_offset); return -EINVAL; } @@ -451,8 +451,8 @@ static int llog_lvfs_next_block(const struct lu_env *env, /* this shouldn't happen */ if (tail->lrt_index == 0) { - CERROR("Invalid llog tail at log id "DOSTID"/%u offset " - LPU64"\n", POSTID(&loghandle->lgh_id.lgl_oi), + CERROR("Invalid llog tail at log id "DOSTID"/%u offset %llu\n", + POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, *cur_offset); return -EINVAL; } @@ -496,7 +496,7 @@ static int llog_lvfs_prev_block(const struct lu_env *env, &cur_offset); if (rc < 0) { CERROR("Cant read llog block at log id "DOSTID - "/%u offset "LPU64"\n", + "/%u offset %llu\n", POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, cur_offset); @@ -510,8 +510,8 @@ static int llog_lvfs_prev_block(const struct lu_env *env, return 0; if (rc < sizeof(*tail)) { - CERROR("Invalid llog block at log id "DOSTID"/%u offset" - LPU64"\n", POSTID(&loghandle->lgh_id.lgl_oi), + CERROR("Invalid llog block at log id "DOSTID"/%u offset%llu\n", + POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, cur_offset); return -EINVAL; } @@ -533,8 +533,8 @@ static int llog_lvfs_prev_block(const struct lu_env *env, /* this shouldn't happen */ if (tail->lrt_index == 0) { - CERROR("Invalid llog tail at log id "DOSTID"/%u offset" - LPU64"\n", POSTID(&loghandle->lgh_id.lgl_oi), + CERROR("Invalid llog tail at log id "DOSTID"/%u offset%llu\n", + POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, cur_offset); return -EINVAL; } diff --git a/drivers/staging/lustre/lustre/obdclass/llog_osd.c b/drivers/staging/lustre/lustre/obdclass/llog_osd.c index 584cc81b985e..2c6a51e90697 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_osd.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_osd.c @@ -533,7 +533,7 @@ static int llog_osd_next_block(const struct lu_env *env, if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) return -EINVAL; - CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off "LPU64")\n", + CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off %llu)\n", next_idx, *cur_idx, *cur_offset); LASSERT(loghandle); @@ -574,7 +574,7 @@ static int llog_osd_next_block(const struct lu_env *env, dt_read_unlock(env, o); if (rc < 0) { CERROR("%s: can't read llog block from log "DFID - " offset "LPU64": rc = %d\n", + " offset %llu: rc = %d\n", o->do_lu.lo_dev->ld_obd->obd_name, PFID(lu_object_fid(&o->do_lu)), *cur_offset, rc); @@ -592,7 +592,7 @@ static int llog_osd_next_block(const struct lu_env *env, if (rc < sizeof(*tail)) { CERROR("%s: invalid llog block at log id "DOSTID"/%u " - "offset "LPU64"\n", + "offset %llu\n", o->do_lu.lo_dev->ld_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, *cur_offset); @@ -618,7 +618,7 @@ static int llog_osd_next_block(const struct lu_env *env, /* this shouldn't happen */ if (tail->lrt_index == 0) { CERROR("%s: invalid llog tail at log id "DOSTID"/%u " - "offset "LPU64"\n", + "offset %llu\n", o->do_lu.lo_dev->ld_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, *cur_offset); @@ -687,7 +687,7 @@ static int llog_osd_prev_block(const struct lu_env *env, dt_read_unlock(env, o); if (rc < 0) { CERROR("%s: can't read llog block from log "DFID - " offset "LPU64": rc = %d\n", + " offset %llu: rc = %d\n", o->do_lu.lo_dev->ld_obd->obd_name, PFID(lu_object_fid(&o->do_lu)), cur_offset, rc); GOTO(out, rc); @@ -698,7 +698,7 @@ static int llog_osd_prev_block(const struct lu_env *env, if (rc < sizeof(*tail)) { CERROR("%s: invalid llog block at log id "DOSTID"/%u " - "offset "LPU64"\n", + "offset %llu\n", o->do_lu.lo_dev->ld_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, cur_offset); @@ -722,7 +722,7 @@ static int llog_osd_prev_block(const struct lu_env *env, /* this shouldn't happen */ if (tail->lrt_index == 0) { CERROR("%s: invalid llog tail at log id "DOSTID"/%u " - "offset "LPU64"\n", + "offset %llu\n", o->do_lu.lo_dev->ld_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, cur_offset); diff --git a/drivers/staging/lustre/lustre/obdclass/local_storage.c b/drivers/staging/lustre/lustre/obdclass/local_storage.c index e76f7d044231..d81443dad829 100644 --- a/drivers/staging/lustre/lustre/obdclass/local_storage.c +++ b/drivers/staging/lustre/lustre/obdclass/local_storage.c @@ -837,7 +837,7 @@ out_trans: rc = dt_record_read(env, o, &dti->dti_lb, &dti->dti_off); dt_read_unlock(env, o); if (rc == 0 && le64_to_cpu(lastid) > OBIF_MAX_OID) { - CERROR("%s: bad oid "LPU64" is read from LAST_ID\n", + CERROR("%s: bad oid %llu is read from LAST_ID\n", o->do_lu.lo_dev->ld_obd->obd_name, le64_to_cpu(lastid)); rc = -EINVAL; diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index be6fb102076d..7ba09e0ff264 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -400,7 +400,7 @@ EXPORT_SYMBOL(lprocfs_wr_uint); int lprocfs_rd_u64(struct seq_file *m, void *data) { - return seq_printf(m, LPU64"\n", *(__u64 *)data); + return seq_printf(m, "%llu\n", *(__u64 *)data); } EXPORT_SYMBOL(lprocfs_rd_u64); @@ -476,7 +476,7 @@ int lprocfs_rd_kbytestotal(struct seq_file *m, void *data) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -496,7 +496,7 @@ int lprocfs_rd_kbytesfree(struct seq_file *m, void *data) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -516,7 +516,7 @@ int lprocfs_rd_kbytesavail(struct seq_file *m, void *data) while (blk_size >>= 1) result <<= 1; - rc = seq_printf(m, LPU64"\n", result); + rc = seq_printf(m, "%llu\n", result); } return rc; } @@ -530,7 +530,7 @@ int lprocfs_rd_filestotal(struct seq_file *m, void *data) cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), OBD_STATFS_NODELAY); if (!rc) - rc = seq_printf(m, LPU64"\n", osfs.os_files); + rc = seq_printf(m, "%llu\n", osfs.os_files); return rc; } @@ -544,7 +544,7 @@ int lprocfs_rd_filesfree(struct seq_file *m, void *data) cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), OBD_STATFS_NODELAY); if (!rc) - rc = seq_printf(m, LPU64"\n", osfs.os_ffree); + rc = seq_printf(m, "%llu\n", osfs.os_ffree); return rc; } EXPORT_SYMBOL(lprocfs_rd_filesfree); @@ -744,7 +744,7 @@ int lprocfs_rd_import(struct seq_file *m, void *data) " inflight: %u\n" " unregistering: %u\n" " timeouts: %u\n" - " avg_waittime: "LPU64" %s\n", + " avg_waittime: %llu %s\n", atomic_read(&imp->imp_inflight), atomic_read(&imp->imp_unregistering), atomic_read(&imp->imp_timeouts), @@ -766,9 +766,9 @@ int lprocfs_rd_import(struct seq_file *m, void *data) seq_printf(m, " transactions:\n" - " last_replay: "LPU64"\n" - " peer_committed: "LPU64"\n" - " last_checked: "LPU64"\n", + " last_replay: %llu\n" + " peer_committed: %llu\n" + " last_checked: %llu\n", imp->imp_last_replay_transno, imp->imp_peer_committed_transno, imp->imp_last_transno_checked); @@ -785,7 +785,7 @@ int lprocfs_rd_import(struct seq_file *m, void *data) ret.lc_sum = sum; seq_printf(m, " %s_data_averages:\n" - " bytes_per_rpc: "LPU64"\n", + " bytes_per_rpc: %llu\n", rw ? "write" : "read", ret.lc_sum); } @@ -799,7 +799,7 @@ int lprocfs_rd_import(struct seq_file *m, void *data) do_div(sum, ret.lc_count); ret.lc_sum = sum; seq_printf(m, - " %s_per_rpc: "LPU64"\n", + " %s_per_rpc: %llu\n", header->lc_units, ret.lc_sum); j = (int)ret.lc_sum; if (j > 0) diff --git a/drivers/staging/lustre/lustre/obdclass/obdo.c b/drivers/staging/lustre/lustre/obdclass/obdo.c index 0ef42e841715..be118ba72891 100644 --- a/drivers/staging/lustre/lustre/obdclass/obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/obdo.c @@ -252,7 +252,7 @@ void iattr_from_obdo(struct iattr *attr, struct obdo *oa, obd_flag valid) valid &= oa->o_valid; if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) - CDEBUG(D_INODE, "valid "LPX64", new time "LPU64"/"LPU64"\n", + CDEBUG(D_INODE, "valid "LPX64", new time %llu/%llu\n", oa->o_valid, oa->o_mtime, oa->o_ctime); attr->ia_valid = 0; diff --git a/drivers/staging/lustre/lustre/obdecho/echo.c b/drivers/staging/lustre/lustre/obdecho/echo.c index 92fa0908bbfb..eae1cca9956a 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo.c +++ b/drivers/staging/lustre/lustre/obdecho/echo.c @@ -327,7 +327,7 @@ static int echo_map_nb_to_lb(struct obdo *oa, struct obd_ioobj *obj, } } - CDEBUG(D_PAGE, "$$$$ get page %p @ "LPU64" for %d\n", + CDEBUG(D_PAGE, "$$$$ get page %p @ %llu for %d\n", res->page, res->lnb_file_offset, res->len); if (cmd & OBD_BRW_READ) @@ -365,7 +365,7 @@ static int echo_finalize_lb(struct obdo *oa, struct obd_ioobj *obj, void *addr; if (page == NULL) { - CERROR("null page objid "LPU64":%p, buf %d/%d\n", + CERROR("null page objid %llu:%p, buf %d/%d\n", ostid_id(&obj->ioo_oid), page, i, obj->ioo_bufcnt); return -EFAULT; @@ -373,7 +373,7 @@ static int echo_finalize_lb(struct obdo *oa, struct obd_ioobj *obj, addr = kmap(page); - CDEBUG(D_PAGE, "$$$$ use page %p, addr %p@"LPU64"\n", + CDEBUG(D_PAGE, "$$$$ use page %p, addr %p@%llu\n", res->page, addr, res->lnb_file_offset); if (verify) { diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index 94485c2d7b27..32d569aeb64b 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -1430,7 +1430,7 @@ echo_copyin_lsm (struct echo_device *ed, struct lov_stripe_md *lsm, static inline void echo_md_build_name(struct lu_name *lname, char *name, __u64 id) { - sprintf(name, LPU64, id); + sprintf(name, "%llu", id); lname->ln_name = name; lname->ln_namelen = strlen(name); } diff --git a/drivers/staging/lustre/lustre/osc/lproc_osc.c b/drivers/staging/lustre/lustre/osc/lproc_osc.c index 9b2e5656bb68..2ab403548b5e 100644 --- a/drivers/staging/lustre/lustre/osc/lproc_osc.c +++ b/drivers/staging/lustre/lustre/osc/lproc_osc.c @@ -693,11 +693,11 @@ static int osc_stats_seq_show(struct seq_file *seq, void *v) seq_printf(seq, "snapshot_time: %lu.%lu (secs.usecs)\n", now.tv_sec, (unsigned long)now.tv_usec); - seq_printf(seq, "lockless_write_bytes\t\t"LPU64"\n", + seq_printf(seq, "lockless_write_bytes\t\t%llu\n", stats->os_lockless_writes); - seq_printf(seq, "lockless_read_bytes\t\t"LPU64"\n", + seq_printf(seq, "lockless_read_bytes\t\t%llu\n", stats->os_lockless_reads); - seq_printf(seq, "lockless_truncate\t\t"LPU64"\n", + seq_printf(seq, "lockless_truncate\t\t%llu\n", stats->os_lockless_truncates); return 0; } diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index f075b6982dbe..57d7dba23479 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -2154,7 +2154,7 @@ int osc_prep_async_page(struct osc_object *osc, struct osc_page *ops, INIT_LIST_HEAD(&oap->oap_rpc_item); spin_lock_init(&oap->oap_lock); - CDEBUG(D_INFO, "oap %p page %p obj off "LPU64"\n", + CDEBUG(D_INFO, "oap %p page %p obj off %llu\n", oap, page, oap->oap_obj_off); return 0; } @@ -2595,7 +2595,7 @@ again: break; } - OSC_EXTENT_DUMP(D_CACHE, ext, "try to trunc:"LPU64".\n", size); + OSC_EXTENT_DUMP(D_CACHE, ext, "try to trunc:%llu.\n", size); osc_extent_get(ext); if (ext->oe_state == OES_ACTIVE) { @@ -2656,7 +2656,7 @@ again: LASSERT(oio->oi_trunc == NULL); oio->oi_trunc = osc_extent_get(ext); OSC_EXTENT_DUMP(D_CACHE, ext, - "trunc at "LPU64"\n", size); + "trunc at %llu\n", size); } osc_extent_put(env, ext); } diff --git a/drivers/staging/lustre/lustre/osc/osc_io.c b/drivers/staging/lustre/lustre/osc/osc_io.c index 09e06eb08530..54fe836a64cd 100644 --- a/drivers/staging/lustre/lustre/osc/osc_io.c +++ b/drivers/staging/lustre/lustre/osc/osc_io.c @@ -204,7 +204,7 @@ static void osc_page_touch_at(const struct lu_env *env, * * here */ - CDEBUG(D_INODE, "stripe KMS %sincreasing "LPU64"->"LPU64" "LPU64"\n", + CDEBUG(D_INODE, "stripe KMS %sincreasing %llu->%llu %llu\n", kms > loi->loi_kms ? "" : "not ", loi->loi_kms, kms, loi->loi_lvb.lvb_size); @@ -355,7 +355,7 @@ static int trunc_check_cb(const struct lu_env *env, struct cl_io *io, if (oap->oap_cmd & OBD_BRW_WRITE && !list_empty(&oap->oap_pending_item)) - CL_PAGE_DEBUG(D_ERROR, env, page, "exists " LPU64 "/%s.\n", + CL_PAGE_DEBUG(D_ERROR, env, page, "exists %llu/%s.\n", start, current->comm); { diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index 7a74c75939b7..7dda1ac91b0c 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -369,20 +369,19 @@ static void osc_lock_lvb_update(const struct lu_env *env, struct osc_lock *olck, if (size > dlmlock->l_policy_data.l_extent.end) size = dlmlock->l_policy_data.l_extent.end + 1; if (size >= oinfo->loi_kms) { - LDLM_DEBUG(dlmlock, "lock acquired, setting rss="LPU64 - ", kms="LPU64, lvb->lvb_size, size); + LDLM_DEBUG(dlmlock, "lock acquired, setting rss=%llu, kms=%llu", + lvb->lvb_size, size); valid |= CAT_KMS; attr->cat_kms = size; } else { - LDLM_DEBUG(dlmlock, "lock acquired, setting rss=" - LPU64"; leaving kms="LPU64", end="LPU64, + LDLM_DEBUG(dlmlock, "lock acquired, setting rss=%llu; leaving kms=%llu, end=%llu", lvb->lvb_size, oinfo->loi_kms, dlmlock->l_policy_data.l_extent.end); } ldlm_lock_allow_match_locked(dlmlock); } else if (rc == -ENAVAIL && olck->ols_glimpse) { - CDEBUG(D_INODE, "glimpsed, setting rss="LPU64"; leaving" - " kms="LPU64"\n", lvb->lvb_size, oinfo->loi_kms); + CDEBUG(D_INODE, "glimpsed, setting rss=%llu; leaving kms=%llu\n", + lvb->lvb_size, oinfo->loi_kms); } else valid = 0; diff --git a/drivers/staging/lustre/lustre/osc/osc_object.c b/drivers/staging/lustre/lustre/osc/osc_object.c index 155a2dbe5b69..69000584619d 100644 --- a/drivers/staging/lustre/lustre/osc/osc_object.c +++ b/drivers/staging/lustre/lustre/osc/osc_object.c @@ -128,8 +128,7 @@ static void osc_object_free(const struct lu_env *env, struct lu_object *obj) int osc_lvb_print(const struct lu_env *env, void *cookie, lu_printer_t p, const struct ost_lvb *lvb) { - return (*p)(env, cookie, "size: "LPU64" mtime: "LPU64" atime: "LPU64" " - "ctime: "LPU64" blocks: "LPU64, + return (*p)(env, cookie, "size: %llu mtime: %llu atime: %llu ctime: %llu blocks: %llu", lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); } @@ -142,8 +141,7 @@ static int osc_object_print(const struct lu_env *env, void *cookie, struct osc_async_rc *ar = &oinfo->loi_ar; (*p)(env, cookie, "id: "DOSTID" " - "idx: %d gen: %d kms_valid: %u kms "LPU64" " - "rc: %d force_sync: %d min_xid: "LPU64" ", + "idx: %d gen: %d kms_valid: %u kms %llu rc: %d force_sync: %d min_xid: %llu ", POSTID(&oinfo->loi_oi), oinfo->loi_ost_idx, oinfo->loi_ost_gen, oinfo->loi_kms_valid, oinfo->loi_kms, ar->ar_rc, ar->ar_force_sync, ar->ar_min_xid); @@ -179,7 +177,7 @@ int osc_attr_set(const struct lu_env *env, struct cl_object *obj, if (valid & CAT_BLOCKS) lvb->lvb_blocks = attr->cat_blocks; if (valid & CAT_KMS) { - CDEBUG(D_CACHE, "set kms from "LPU64"to "LPU64"\n", + CDEBUG(D_CACHE, "set kms from %llu to %llu\n", oinfo->loi_kms, (__u64)attr->cat_kms); loi_kms_set(oinfo, attr->cat_kms); } diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c index 8d6ba1c2128f..fcd079b1af01 100644 --- a/drivers/staging/lustre/lustre/osc/osc_page.c +++ b/drivers/staging/lustre/lustre/osc/osc_page.c @@ -371,7 +371,7 @@ static int osc_page_print(const struct lu_env *env, return (*printer)(env, cookie, LUSTRE_OSC_NAME"-page@%p: " "1< %#x %d %u %s %s > " - "2< "LPU64" %u %u %#x %#x | %p %p %p > " + "2< %llu %u %u %#x %#x | %p %p %p > " "3< %s %p %d %lu %d > " "4< %d %d %d %lu %s | %s %s %s %s > " "5< %s %s %s %s | %d %s | %d %s %s>\n", diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 63a0e4bafe7f..47ff24371789 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -836,7 +836,7 @@ static void osc_announce_cached(struct client_obd *cli, struct obdo *oa, oa->o_dropped = cli->cl_lost_grant; cli->cl_lost_grant = 0; client_obd_list_unlock(&cli->cl_loi_list_lock); - CDEBUG(D_CACHE,"dirty: "LPU64" undirty: %u dropped %u grant: "LPU64"\n", + CDEBUG(D_CACHE,"dirty: %llu undirty: %u dropped %u grant: %llu\n", oa->o_dirty, oa->o_undirty, oa->o_dropped, oa->o_grant); } @@ -859,7 +859,7 @@ static void __osc_update_grant(struct client_obd *cli, obd_size grant) static void osc_update_grant(struct client_obd *cli, struct ost_body *body) { if (body->oa.o_valid & OBD_MD_FLGRANT) { - CDEBUG(D_CACHE, "got "LPU64" extra grant\n", body->oa.o_grant); + CDEBUG(D_CACHE, "got %llu extra grant\n", body->oa.o_grant); __osc_update_grant(cli, body->oa.o_grant); } } @@ -1313,11 +1313,11 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli,struct obdo *oa, ergo(i > 0 && i < page_count - 1, poff == 0 && pg->count == PAGE_CACHE_SIZE) && ergo(i == page_count - 1, poff == 0)), - "i: %d/%d pg: %p off: "LPU64", count: %u\n", + "i: %d/%d pg: %p off: %llu, count: %u\n", i, page_count, pg, pg->off, pg->count); LASSERTF(i == 0 || pg->off > pg_prev->off, - "i %d p_c %u pg %p [pri %lu ind %lu] off "LPU64 - " prev_pg %p [pri %lu ind %lu] off "LPU64"\n", + "i %d p_c %u pg %p [pri %lu ind %lu] off %llu" + " prev_pg %p [pri %lu ind %lu] off %llu\n", i, page_count, pg->pg, page_private(pg->pg), pg->pg->index, pg->off, pg_prev->pg, page_private(pg_prev->pg), @@ -1452,7 +1452,7 @@ static int check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer, "likely false positive due to mmap IO (bug 11742)"; LCONSOLE_ERROR_MSG(0x132, "BAD WRITE CHECKSUM: %s: from %s inode "DFID - " object "DOSTID" extent ["LPU64"-"LPU64"]\n", + " object "DOSTID" extent [%llu-%llu]\n", msg, libcfs_nid2str(peer->nid), oa->o_valid & OBD_MD_FLFID ? oa->o_parent_seq : (__u64)0, oa->o_valid & OBD_MD_FLFID ? oa->o_parent_oid : 0, @@ -1573,7 +1573,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) if (server_cksum != client_cksum) { LCONSOLE_ERROR_MSG(0x133, "%s: BAD READ CHECKSUM: from " "%s%s%s inode "DFID" object "DOSTID - " extent ["LPU64"-"LPU64"]\n", + " extent [%llu-%llu]\n", req->rq_import->imp_obd->obd_name, libcfs_nid2str(peer->nid), via, router, @@ -1930,8 +1930,7 @@ static int brw_interpret(const struct lu_env *env, client_should_resend(aa->aa_resends, aa->aa_cli)) { rc = osc_brw_redo_request(req, aa, rc); } else { - CERROR("%s: too many resent retries for object: " - ""LPU64":"LPU64", rc = %d.\n", + CERROR("%s: too many resent retries for object: %llu:%llu, rc = %d.\n", req->rq_import->imp_obd->obd_name, POSTID(&aa->aa_oa->o_oi), rc); } @@ -2321,7 +2320,7 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb, if ((intent != 0 && rc == ELDLM_LOCK_ABORTED && agl == 0) || (rc == 0)) { *flags |= LDLM_FL_LVB_READY; - CDEBUG(D_INODE,"got kms "LPU64" blocks "LPU64" mtime "LPU64"\n", + CDEBUG(D_INODE,"got kms %llu blocks %llu mtime %llu\n", lvb->lvb_size, lvb->lvb_blocks, lvb->lvb_mtime); } @@ -2409,12 +2408,11 @@ void osc_update_enqueue(struct lustre_handle *lov_lockhp, if (tmp > lock->l_policy_data.l_extent.end) tmp = lock->l_policy_data.l_extent.end + 1; if (tmp >= loi->loi_kms) { - LDLM_DEBUG(lock, "lock acquired, setting rss="LPU64 - ", kms="LPU64, loi->loi_lvb.lvb_size, tmp); + LDLM_DEBUG(lock, "lock acquired, setting rss=%llu, kms=%llu", + loi->loi_lvb.lvb_size, tmp); loi_kms_set(loi, tmp); } else { - LDLM_DEBUG(lock, "lock acquired, setting rss=" - LPU64"; leaving kms="LPU64", end="LPU64, + LDLM_DEBUG(lock, "lock acquired, setting rss=%llu; leaving kms=%llu, end=%llu", loi->loi_lvb.lvb_size, loi->loi_kms, lock->l_policy_data.l_extent.end); } @@ -2423,8 +2421,8 @@ void osc_update_enqueue(struct lustre_handle *lov_lockhp, LASSERT(lock != NULL); loi->loi_lvb = *lvb; ldlm_lock_allow_match(lock); - CDEBUG(D_INODE, "glimpsed, setting rss="LPU64"; leaving" - " kms="LPU64"\n", loi->loi_lvb.lvb_size, loi->loi_kms); + CDEBUG(D_INODE, "glimpsed, setting rss=%llu; leaving kms=%llu\n", + loi->loi_lvb.lvb_size, loi->loi_kms); rc = ELDLM_OK; } diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 07cd3edc4345..b680caf246f0 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -1451,7 +1451,7 @@ static int ptlrpc_send_new_req(struct ptlrpc_request *req) } CDEBUG(D_RPCTRACE, "Sending RPC pname:cluuid:pid:xid:nid:opc" - " %s:%s:%d:"LPU64":%s:%d\n", current_comm(), + " %s:%s:%d:%llu:%s:%d\n", current_comm(), imp->imp_obd->obd_uuid.uuid, lustre_msg_get_status(req->rq_reqmsg), req->rq_xid, libcfs_nid2str(imp->imp_connection->c_peer.nid), @@ -1698,9 +1698,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) /* ensure previous bulk fails */ old_xid = req->rq_xid; req->rq_xid = ptlrpc_next_xid(); - CDEBUG(D_HA, "resend bulk " - "old x"LPU64 - " new x"LPU64"\n", + CDEBUG(D_HA, "resend bulk old x%llu new x%llu\n", old_xid, req->rq_xid); } } @@ -1831,7 +1829,7 @@ interpret: CDEBUG(req->rq_reqmsg != NULL ? D_RPCTRACE : 0, "Completed RPC pname:cluuid:pid:xid:nid:" - "opc %s:%s:%d:"LPU64":%s:%d\n", + "opc %s:%s:%d:%llu:%s:%d\n", current_comm(), imp->imp_obd->obd_uuid.uuid, lustre_msg_get_status(req->rq_reqmsg), req->rq_xid, libcfs_nid2str(imp->imp_connection->c_peer.nid), @@ -2467,11 +2465,11 @@ void ptlrpc_free_committed(struct obd_import *imp) if (imp->imp_peer_committed_transno == imp->imp_last_transno_checked && imp->imp_generation == imp->imp_last_generation_checked) { - CDEBUG(D_INFO, "%s: skip recheck: last_committed "LPU64"\n", + CDEBUG(D_INFO, "%s: skip recheck: last_committed %llu\n", imp->imp_obd->obd_name, imp->imp_peer_committed_transno); return; } - CDEBUG(D_RPCTRACE, "%s: committing for last_committed "LPU64" gen %d\n", + CDEBUG(D_RPCTRACE, "%s: committing for last_committed %llu gen %d\n", imp->imp_obd->obd_name, imp->imp_peer_committed_transno, imp->imp_generation); @@ -2509,7 +2507,7 @@ void ptlrpc_free_committed(struct obd_import *imp) continue; } - DEBUG_REQ(D_INFO, req, "commit (last_committed "LPU64")", + DEBUG_REQ(D_INFO, req, "commit (last_committed %llu)", imp->imp_peer_committed_transno); free_req: ptlrpc_free_request(req); @@ -2562,7 +2560,7 @@ void ptlrpc_resend_req(struct ptlrpc_request *req) /* ensure previous bulk fails */ req->rq_xid = ptlrpc_next_xid(); - CDEBUG(D_HA, "resend bulk old x"LPU64" new x"LPU64"\n", + CDEBUG(D_HA, "resend bulk old x%llu new x%llu\n", old_xid, req->rq_xid); } ptlrpc_client_wake_req(req); @@ -2741,8 +2739,8 @@ static int ptlrpc_replay_interpret(const struct lu_env *env, /* transaction number shouldn't be bigger than the latest replayed */ if (req->rq_transno > lustre_msg_get_transno(req->rq_reqmsg)) { DEBUG_REQ(D_ERROR, req, - "Reported transno "LPU64" is bigger than the " - "replayed one: "LPU64, req->rq_transno, + "Reported transno %llu is bigger than the replayed one: %llu", + req->rq_transno, lustre_msg_get_transno(req->rq_reqmsg)); GOTO(out, rc = -EINVAL); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index 0c9907887a62..f1a56930c006 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -337,7 +337,7 @@ void request_in_callback(lnet_event_t *ev) INIT_LIST_HEAD(&req->rq_exp_list); atomic_set(&req->rq_refcount, 1); if (ev->type == LNET_EVENT_PUT) - CDEBUG(D_INFO, "incoming req@%p x"LPU64" msgsize %u\n", + CDEBUG(D_INFO, "incoming req@%p x%llu msgsize %u\n", req, req->rq_xid, ev->mlength); CDEBUG(D_RPCTRACE, "peer: %s\n", libcfs_id2str(req->rq_peer)); diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index f43092506d75..a2affa7b0a3e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -494,7 +494,7 @@ static int import_select_connection(struct obd_import *imp) } list_for_each_entry(conn, &imp->imp_conn_list, oic_item) { - CDEBUG(D_HA, "%s: connect to NID %s last attempt "LPU64"\n", + CDEBUG(D_HA, "%s: connect to NID %s last attempt %llu\n", imp->imp_obd->obd_name, libcfs_nid2str(conn->oic_conn->c_peer.nid), conn->oic_last_attempt); diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index 3758b3ccca0c..bbef708ce5cb 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -726,12 +726,12 @@ ptlrpc_lprocfs_svc_req_history_seek(struct ptlrpc_service_part *svcpt, * be near the head), we shouldn't have to do long * re-scans */ LASSERTF(srhi->srhi_seq == srhi->srhi_req->rq_history_seq, - "%s:%d: seek seq "LPU64", request seq "LPU64"\n", + "%s:%d: seek seq %llu, request seq %llu\n", svcpt->scp_service->srv_name, svcpt->scp_cpt, srhi->srhi_seq, srhi->srhi_req->rq_history_seq); LASSERTF(!list_empty(&svcpt->scp_hist_reqs), - "%s:%d: seek offset "LPU64", request seq "LPU64", " - "last culled "LPU64"\n", + "%s:%d: seek offset %llu, request seq %llu, " + "last culled %llu\n", svcpt->scp_service->srv_name, svcpt->scp_cpt, seq, srhi->srhi_seq, svcpt->scp_hist_seq_culled); e = &srhi->srhi_req->rq_history_list; @@ -932,7 +932,7 @@ static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter) * must be just as careful as the service's request * parser. Currently I only print stuff here I know is OK * to look at coz it was set up in request_in_callback()!!! */ - seq_printf(s, "%lld:%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", + seq_printf(s, "%lld:%s:%s:x%llu:%d:%s:%ld:%lds(%+lds) ", req->rq_history_seq, libcfs_nid2str(req->rq_self), libcfs_id2str(req->rq_peer), req->rq_xid, req->rq_reqlen, ptlrpc_rqphase2str(req), diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index a8bcf5a8ce65..b4c696e715f2 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -159,7 +159,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req) LASSERTF(!(desc->bd_registered && req->rq_send_state != LUSTRE_IMP_REPLAY) || xid != desc->bd_last_xid, - "registered: %d rq_xid: "LPU64" bd_last_xid: "LPU64"\n", + "registered: %d rq_xid: %llu bd_last_xid: %llu\n", desc->bd_registered, xid, desc->bd_last_xid); total_md = (desc->bd_iov_count + LNET_MAX_IOV - 1) / LNET_MAX_IOV; @@ -179,7 +179,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req) rc = LNetMEAttach(desc->bd_portal, peer, xid, 0, LNET_UNLINK, LNET_INS_AFTER, &me_h); if (rc != 0) { - CERROR("%s: LNetMEAttach failed x"LPU64"/%d: rc = %d\n", + CERROR("%s: LNetMEAttach failed x%llu/%d: rc = %d\n", desc->bd_import->imp_obd->obd_name, xid, posted_md, rc); break; @@ -189,7 +189,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req) rc = LNetMDAttach(me_h, md, LNET_UNLINK, &desc->bd_mds[posted_md]); if (rc != 0) { - CERROR("%s: LNetMDAttach failed x"LPU64"/%d: rc = %d\n", + CERROR("%s: LNetMDAttach failed x%llu/%d: rc = %d\n", desc->bd_import->imp_obd->obd_name, xid, posted_md, rc); rc2 = LNetMEUnlink(me_h); @@ -213,7 +213,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req) * infer the number of bulks that were prepared */ req->rq_xid = --xid; LASSERTF(desc->bd_last_xid == (req->rq_xid & PTLRPC_BULK_OPS_MASK), - "bd_last_xid = x"LPU64", rq_xid = x"LPU64"\n", + "bd_last_xid = x%llu, rq_xid = x%llu\n", desc->bd_last_xid, req->rq_xid); spin_lock(&desc->bd_lock); @@ -619,8 +619,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) GOTO(cleanup_me, rc = -ENOMEM); } - CDEBUG(D_NET, "Setup reply buffer: %u bytes, xid "LPU64 - ", portal %u\n", + CDEBUG(D_NET, "Setup reply buffer: %u bytes, xid %llu, portal %u\n", request->rq_repbuf_len, request->rq_xid, request->rq_reply_portal); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c index 5ac248082d1e..28363307ee35 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c @@ -174,9 +174,9 @@ struct ptlrpc_nrs_request * nrs_fifo_req_get(struct ptlrpc_nrs_policy *policy, list_del_init(&nrq->nr_u.fifo.fr_list); - CDEBUG(D_RPCTRACE, "NRS start %s request from %s, seq: "LPU64 - "\n", policy->pol_desc->pd_name, - libcfs_id2str(req->rq_peer), nrq->nr_u.fifo.fr_sequence); + CDEBUG(D_RPCTRACE, "NRS start %s request from %s, seq: %llu\n", + policy->pol_desc->pd_name, libcfs_id2str(req->rq_peer), + nrq->nr_u.fifo.fr_sequence); } return nrq; @@ -236,7 +236,7 @@ static void nrs_fifo_req_stop(struct ptlrpc_nrs_policy *policy, struct ptlrpc_request *req = container_of(nrq, struct ptlrpc_request, rq_nrq); - CDEBUG(D_RPCTRACE, "NRS stop %s request from %s, seq: "LPU64"\n", + CDEBUG(D_RPCTRACE, "NRS stop %s request from %s, seq: %llu\n", policy->pol_desc->pd_name, libcfs_id2str(req->rq_peer), nrq->nr_u.fifo.fr_sequence); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index 6bdb53acb1ad..0bd0af2dace2 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -2140,8 +2140,8 @@ static void print_lum(struct lov_user_md *lum) CDEBUG(D_OTHER, "lov_user_md %p:\n", lum); CDEBUG(D_OTHER, "\tlmm_magic: %#x\n", lum->lmm_magic); CDEBUG(D_OTHER, "\tlmm_pattern: %#x\n", lum->lmm_pattern); - CDEBUG(D_OTHER, "\tlmm_object_id: "LPU64"\n", lmm_oi_id(&lum->lmm_oi)); - CDEBUG(D_OTHER, "\tlmm_object_gr: "LPU64"\n", lmm_oi_seq(&lum->lmm_oi)); + CDEBUG(D_OTHER, "\tlmm_object_id: %llu\n", lmm_oi_id(&lum->lmm_oi)); + CDEBUG(D_OTHER, "\tlmm_object_gr: %llu\n", lmm_oi_seq(&lum->lmm_oi)); CDEBUG(D_OTHER, "\tlmm_stripe_size: %#x\n", lum->lmm_stripe_size); CDEBUG(D_OTHER, "\tlmm_stripe_count: %#x\n", lum->lmm_stripe_count); CDEBUG(D_OTHER, "\tlmm_stripe_offset/lmm_layout_gen: %#x\n", @@ -2292,7 +2292,7 @@ EXPORT_SYMBOL(dump_ioo); void dump_rniobuf(struct niobuf_remote *nb) { - CDEBUG(D_RPCTRACE, "niobuf_remote: offset="LPU64", len=%d, flags=%x\n", + CDEBUG(D_RPCTRACE, "niobuf_remote: offset=%llu, len=%d, flags=%x\n", nb->offset, nb->len, nb->flags); } EXPORT_SYMBOL(dump_rniobuf); @@ -2421,7 +2421,7 @@ void _debug_req(struct ptlrpc_request *req, va_start(args, fmt); libcfs_debug_vmsg2(msgdata, fmt, args, - " req@%p x"LPU64"/t%lld(%lld) o%d->%s@%s:%d/%d" + " req@%p x%llu/t%lld(%lld) o%d->%s@%s:%d/%d" " lens %d/%d e %d to %d dl "CFS_TIME_T" ref %d " "fl "REQ_FLAGS_FMT"/%x/%x rc %d/%d\n", req, req->rq_xid, req->rq_transno, diff --git a/drivers/staging/lustre/lustre/ptlrpc/recover.c b/drivers/staging/lustre/lustre/ptlrpc/recover.c index 3d8485802482..5e4a1a52e0da 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/recover.c +++ b/drivers/staging/lustre/lustre/ptlrpc/recover.c @@ -85,7 +85,7 @@ int ptlrpc_replay_next(struct obd_import *imp, int *inflight) last_transno = imp->imp_last_replay_transno; spin_unlock(&imp->imp_lock); - CDEBUG(D_HA, "import %p from %s committed "LPU64" last "LPU64"\n", + CDEBUG(D_HA, "import %p from %s committed %llu last %llu\n", imp, obd2cli_tgt(imp->imp_obd), imp->imp_peer_committed_transno, last_transno); @@ -164,8 +164,8 @@ int ptlrpc_replay_next(struct obd_import *imp, int *inflight) if (req != NULL) { rc = ptlrpc_replay_req(req); if (rc) { - CERROR("recovery replay error %d for req " - LPU64"\n", rc, req->rq_xid); + CERROR("recovery replay error %d for req %llu\n", + rc, req->rq_xid); return rc; } *inflight = 1; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index ed131b7803c1..27d497df3254 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -992,7 +992,7 @@ static int do_cli_unwrap_reply(struct ptlrpc_request *req) case 0: break; default: - CERROR("failed unpack reply: x"LPU64"\n", req->rq_xid); + CERROR("failed unpack reply: x%llu\n", req->rq_xid); return -EPROTO; } @@ -2033,7 +2033,7 @@ int sptlrpc_svc_unwrap_request(struct ptlrpc_request *req) case 0: break; default: - CERROR("error unpacking request from %s x"LPU64"\n", + CERROR("error unpacking request from %s x%llu\n", libcfs_id2str(req->rq_peer), req->rq_xid); return SECSVC_DROP; } diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 32a57d1ed39f..c88eae27bbf4 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -1128,8 +1128,7 @@ static int ptlrpc_check_req(struct ptlrpc_request *req) rc = -ENODEV; } else if (lustre_msg_get_transno(req->rq_reqmsg) != 0 && !obd->obd_recovering) { - DEBUG_REQ(D_ERROR, req, "Invalid req with transno " - LPU64" without recovery", + DEBUG_REQ(D_ERROR, req, "Invalid req with transno %llu without recovery", lustre_msg_get_transno(req->rq_reqmsg)); class_fail_export(req->rq_export); rc = -ENODEV; @@ -1766,24 +1765,24 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service_part *svcpt, if (SPTLRPC_FLVR_POLICY(req->rq_flvr.sf_rpc) != SPTLRPC_POLICY_NULL) { rc = ptlrpc_unpack_req_msg(req, req->rq_reqlen); if (rc != 0) { - CERROR("error unpacking request: ptl %d from %s " - "x"LPU64"\n", svc->srv_req_portal, - libcfs_id2str(req->rq_peer), req->rq_xid); + CERROR("error unpacking request: ptl %d from %s x%llu\n", + svc->srv_req_portal, libcfs_id2str(req->rq_peer), + req->rq_xid); goto err_req; } } rc = lustre_unpack_req_ptlrpc_body(req, MSG_PTLRPC_BODY_OFF); if (rc) { - CERROR("error unpacking ptlrpc body: ptl %d from %s x" - LPU64"\n", svc->srv_req_portal, - libcfs_id2str(req->rq_peer), req->rq_xid); + CERROR("error unpacking ptlrpc body: ptl %d from %s x%llu\n", + svc->srv_req_portal, libcfs_id2str(req->rq_peer), + req->rq_xid); goto err_req; } if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_DROP_REQ_OPC) && lustre_msg_get_opc(req->rq_reqmsg) == cfs_fail_val) { - CERROR("drop incoming rpc opc %u, x"LPU64"\n", + CERROR("drop incoming rpc opc %u, x%llu\n", cfs_fail_val, req->rq_xid); goto err_req; } @@ -1808,7 +1807,7 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service_part *svcpt, break; } - CDEBUG(D_RPCTRACE, "got req x"LPU64"\n", req->rq_xid); + CDEBUG(D_RPCTRACE, "got req x%llu\n", req->rq_xid); req->rq_export = class_conn2export( lustre_msg_get_handle(req->rq_reqmsg)); @@ -1918,7 +1917,7 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt, request->rq_session.lc_cookie = 0x5; lu_context_enter(&request->rq_session); - CDEBUG(D_NET, "got req "LPU64"\n", request->rq_xid); + CDEBUG(D_NET, "got req %llu\n", request->rq_xid); request->rq_svc_thread = thread; if (thread) @@ -1944,7 +1943,7 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt, } CDEBUG(D_RPCTRACE, "Handling RPC pname:cluuid+ref:pid:xid:nid:opc " - "%s:%s+%d:%d:x"LPU64":%s:%d\n", current_comm(), + "%s:%s+%d:%d:x%llu:%s:%d\n", current_comm(), (request->rq_export ? (char *)request->rq_export->exp_client_uuid.uuid : "0"), (request->rq_export ? @@ -1978,8 +1977,8 @@ put_conn: do_gettimeofday(&work_end); timediff = cfs_timeval_sub(&work_end, &work_start, NULL); CDEBUG(D_RPCTRACE, "Handled RPC pname:cluuid+ref:pid:xid:nid:opc " - "%s:%s+%d:%d:x"LPU64":%s:%d Request processed in " - "%ldus (%ldus total) trans "LPU64" rc %d/%d\n", + "%s:%s+%d:%d:x%llu:%s:%d Request processed in " + "%ldus (%ldus total) trans %llu rc %d/%d\n", current_comm(), (request->rq_export ? (char *)request->rq_export->exp_client_uuid.uuid : "0"), -- cgit From 55f5a824b9e727eb159905475028d3cb52370276 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 20:26:07 -0700 Subject: staging: lustre: remove LPX64 define Just use the proper modifier type... Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/linux/kp30.h | 4 --- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 16 +++++------ .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 5 ++-- drivers/staging/lustre/lnet/lnet/api-ni.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-me.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-move.c | 22 +++++++-------- drivers/staging/lustre/lnet/lnet/lib-ptl.c | 10 +++---- drivers/staging/lustre/lnet/selftest/brw_test.c | 2 +- drivers/staging/lustre/lnet/selftest/rpc.c | 4 +-- drivers/staging/lustre/lustre/fid/fid_request.c | 2 +- drivers/staging/lustre/lustre/fid/lproc_fid.c | 2 +- drivers/staging/lustre/lustre/fld/fld_request.c | 6 ++-- .../lustre/lustre/include/lustre/lustre_idl.h | 6 ++-- .../lustre/lustre/include/lustre/lustre_user.h | 4 +-- drivers/staging/lustre/lustre/include/lustre_fid.h | 2 +- .../staging/lustre/lustre/lclient/lcommon_misc.c | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_lib.c | 4 +-- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 32 +++++++++++----------- drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c | 6 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_request.c | 6 ++-- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 6 ++-- drivers/staging/lustre/lustre/llite/dcache.c | 8 +++--- drivers/staging/lustre/lustre/llite/dir.c | 9 +++--- drivers/staging/lustre/lustre/llite/file.c | 2 +- drivers/staging/lustre/lustre/llite/llite_capa.c | 2 +- .../staging/lustre/lustre/llite/llite_internal.h | 4 +-- drivers/staging/lustre/lustre/llite/llite_lib.c | 6 ++-- drivers/staging/lustre/lustre/llite/namei.c | 2 +- drivers/staging/lustre/lustre/lmv/lmv_fld.c | 4 +-- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 8 +++--- drivers/staging/lustre/lustre/lov/lov_ea.c | 2 +- drivers/staging/lustre/lustre/lov/lov_obd.c | 4 +-- drivers/staging/lustre/lustre/mdc/mdc_request.c | 2 +- drivers/staging/lustre/lustre/mgc/mgc_request.c | 4 +-- drivers/staging/lustre/lustre/obdclass/capa.c | 2 +- drivers/staging/lustre/lustre/obdclass/class_obd.c | 22 +++++++-------- drivers/staging/lustre/lustre/obdclass/debug.c | 14 +++++----- drivers/staging/lustre/lustre/obdclass/genops.c | 6 ++-- .../lustre/lustre/obdclass/linux/linux-obdo.c | 4 +-- drivers/staging/lustre/lustre/obdclass/llog_swab.c | 4 +-- .../staging/lustre/lustre/obdclass/local_storage.c | 8 +++--- .../lustre/lustre/obdclass/lprocfs_status.c | 6 ++-- .../lustre/lustre/obdclass/lustre_handles.c | 8 +++--- .../staging/lustre/lustre/obdclass/obd_config.c | 8 +++--- drivers/staging/lustre/lustre/obdclass/obdo.c | 4 +-- drivers/staging/lustre/lustre/obdecho/echo.c | 16 +++++------ .../staging/lustre/lustre/obdecho/echo_client.c | 12 ++++---- drivers/staging/lustre/lustre/osc/osc_lock.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 4 +-- drivers/staging/lustre/lustre/ptlrpc/client.c | 4 +-- drivers/staging/lustre/lustre/ptlrpc/import.c | 18 ++++-------- drivers/staging/lustre/lustre/ptlrpc/niobuf.c | 2 +- .../staging/lustre/lustre/ptlrpc/pack_generic.c | 2 +- 53 files changed, 165 insertions(+), 183 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h index ea22ca783759..88cce4cc049a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h @@ -68,8 +68,4 @@ #include "portals_compat25.h" -/* this is a bit chunky */ - -# define LPX64 "%#llx" - #endif diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 7a47144787d6..ab1643943496 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -959,7 +959,7 @@ kiblnd_close_stale_conns_locked (kib_peer_t *peer, continue; CDEBUG(D_NET, "Closing stale conn -> %s version: %x, " - "incarnation:"LPX64"(%x, "LPX64")\n", + "incarnation:%#llx(%x, %#llx)\n", libcfs_nid2str(peer->ibp_nid), conn->ibc_version, conn->ibc_incarnation, version, incarnation); @@ -1202,7 +1202,7 @@ kiblnd_map_rx_descs(kib_conn_t *conn) rx->rx_msgaddr)); KIBLND_UNMAP_ADDR_SET(rx, rx_msgunmap, rx->rx_msgaddr); - CDEBUG(D_NET,"rx %d: %p "LPX64"("LPX64")\n", + CDEBUG(D_NET,"rx %d: %p %#llx(%#llx)\n", i, rx->rx_msg, rx->rx_msgaddr, lnet_page2phys(pg) + pg_off); @@ -2336,7 +2336,7 @@ kiblnd_hdev_get_attr(kib_hca_dev_t *hdev) return 0; } - CERROR("Invalid mr size: "LPX64"\n", hdev->ibh_mr_size); + CERROR("Invalid mr size: %#llx\n", hdev->ibh_mr_size); return -EINVAL; } @@ -2418,8 +2418,8 @@ kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev) if (hdev->ibh_mr_shift < 32 || hdev->ibh_nmrs > 1024) { /* it's 4T..., assume we will re-code at that time */ - CERROR("Can't support memory size: x"LPX64 - " with MR size: x"LPX64"\n", mm_size, mr_size); + CERROR("Can't support memory size: x%#llx with MR size: x%#llx\n", + mm_size, mr_size); return -EINVAL; } @@ -2440,8 +2440,7 @@ kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev) mr = ib_reg_phys_mr(hdev->ibh_pd, &ipb, 1, acflags, &iova); if (IS_ERR(mr)) { - CERROR("Failed ib_reg_phys_mr addr "LPX64 - " size "LPX64" : %ld\n", + CERROR("Failed ib_reg_phys_mr addr %#llx size %#llx : %ld\n", ipb.addr, ipb.size, PTR_ERR(mr)); kiblnd_hdev_cleanup_mrs(hdev); return PTR_ERR(mr); @@ -2454,8 +2453,7 @@ kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev) out: if (hdev->ibh_mr_size != ~0ULL || hdev->ibh_nmrs != 1) - LCONSOLE_INFO("Register global MR array, MR size: " - LPX64", array size: %d\n", + LCONSOLE_INFO("Register global MR array, MR size: %#llx, array size: %d\n", hdev->ibh_mr_size, hdev->ibh_nmrs); return 0; } diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c index 21cd02c369dd..306d72876432 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -247,7 +247,7 @@ kiblnd_handle_completion(kib_conn_t *conn, int txtype, int status, __u64 cookie) if (tx == NULL) { spin_unlock(&conn->ibc_lock); - CWARN("Unmatched completion type %x cookie "LPX64" from %s\n", + CWARN("Unmatched completion type %x cookie %#llx from %s\n", txtype, cookie, libcfs_nid2str(conn->ibc_peer->ibp_nid)); kiblnd_close_conn(conn, -EPROTO); return; @@ -1005,8 +1005,7 @@ kiblnd_tx_complete (kib_tx_t *tx, int status) if (failed) { if (conn->ibc_state == IBLND_CONN_ESTABLISHED) - CNETERR("Tx -> %s cookie "LPX64 - " sending %d waiting %d: failed %d\n", + CNETERR("Tx -> %s cookie %#llx sending %d waiting %d: failed %d\n", libcfs_nid2str(conn->ibc_peer->ibp_nid), tx->tx_cookie, tx->tx_sending, tx->tx_waiting, status); diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index d6236ea83b8e..f4a2c65d3c48 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -1575,7 +1575,7 @@ EXPORT_SYMBOL(LNetGetId); void LNetSnprintHandle(char *str, int len, lnet_handle_any_t h) { - snprintf(str, len, LPX64, h.cookie); + snprintf(str, len, "%#llx", h.cookie); } EXPORT_SYMBOL(LNetSnprintHandle); diff --git a/drivers/staging/lustre/lnet/lnet/lib-me.c b/drivers/staging/lustre/lnet/lnet/lib-me.c index 4397e26cd30f..a3f929244711 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-me.c +++ b/drivers/staging/lustre/lnet/lnet/lib-me.c @@ -283,7 +283,7 @@ lnet_me_unlink(lnet_me_t *me) static void lib_me_dump(lnet_me_t *me) { - CWARN("Match Entry %p ("LPX64")\n", me, + CWARN("Match Entry %p (%#llx)\n", me, me->me_lh.lh_cookie); CWARN("\tMatch/Ignore\t= %016lx / %016lx\n", diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index ad7d6773db94..4b9567d67f33 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-move.c +++ b/drivers/staging/lustre/lnet/lnet/lib-move.c @@ -1518,8 +1518,7 @@ lnet_parse_reply(lnet_ni_t *ni, lnet_msg_t *msg) /* NB handles only looked up by creator (no flips) */ md = lnet_wire_handle2md(&hdr->msg.reply.dst_wmd); if (md == NULL || md->md_threshold == 0 || md->md_me != NULL) { - CNETERR("%s: Dropping REPLY from %s for %s " - "MD "LPX64"."LPX64"\n", + CNETERR("%s: Dropping REPLY from %s for %s MD %#llx.%#llx\n", libcfs_nid2str(ni->ni_nid), libcfs_id2str(src), (md == NULL) ? "invalid" : "inactive", hdr->msg.reply.dst_wmd.wh_interface_cookie, @@ -1539,8 +1538,7 @@ lnet_parse_reply(lnet_ni_t *ni, lnet_msg_t *msg) if (mlength < rlength && (md->md_options & LNET_MD_TRUNCATE) == 0) { - CNETERR("%s: Dropping REPLY from %s length %d " - "for MD "LPX64" would overflow (%d)\n", + CNETERR("%s: Dropping REPLY from %s length %d for MD %#llx would overflow (%d)\n", libcfs_nid2str(ni->ni_nid), libcfs_id2str(src), rlength, hdr->msg.reply.dst_wmd.wh_object_cookie, mlength); @@ -1548,7 +1546,7 @@ lnet_parse_reply(lnet_ni_t *ni, lnet_msg_t *msg) return ENOENT; /* +ve: OK but no match */ } - CDEBUG(D_NET, "%s: Reply from %s of length %d/%d into md "LPX64"\n", + CDEBUG(D_NET, "%s: Reply from %s of length %d/%d into md %#llx\n", libcfs_nid2str(ni->ni_nid), libcfs_id2str(src), mlength, rlength, hdr->msg.reply.dst_wmd.wh_object_cookie); @@ -1588,7 +1586,7 @@ lnet_parse_ack(lnet_ni_t *ni, lnet_msg_t *msg) if (md == NULL || md->md_threshold == 0 || md->md_me != NULL) { /* Don't moan; this is expected */ CDEBUG(D_NET, - "%s: Dropping ACK from %s to %s MD "LPX64"."LPX64"\n", + "%s: Dropping ACK from %s to %s MD %#llx.%#llx\n", libcfs_nid2str(ni->ni_nid), libcfs_id2str(src), (md == NULL) ? "invalid" : "inactive", hdr->msg.ack.dst_wmd.wh_interface_cookie, @@ -1601,7 +1599,7 @@ lnet_parse_ack(lnet_ni_t *ni, lnet_msg_t *msg) return ENOENT; /* +ve! */ } - CDEBUG(D_NET, "%s: ACK from %s into md "LPX64"\n", + CDEBUG(D_NET, "%s: ACK from %s into md %#llx\n", libcfs_nid2str(ni->ni_nid), libcfs_id2str(src), hdr->msg.ack.dst_wmd.wh_object_cookie); @@ -1678,19 +1676,19 @@ lnet_print_hdr(lnet_hdr_t *hdr) break; case LNET_MSG_PUT: - CWARN(" Ptl index %d, ack md "LPX64"."LPX64", " + CWARN(" Ptl index %d, ack md %#llx.%#llx, " "match bits %llu\n", hdr->msg.put.ptl_index, hdr->msg.put.ack_wmd.wh_interface_cookie, hdr->msg.put.ack_wmd.wh_object_cookie, hdr->msg.put.match_bits); - CWARN(" Length %d, offset %d, hdr data "LPX64"\n", + CWARN(" Length %d, offset %d, hdr data %#llx\n", hdr->payload_length, hdr->msg.put.offset, hdr->msg.put.hdr_data); break; case LNET_MSG_GET: - CWARN(" Ptl index %d, return md "LPX64"."LPX64", " + CWARN(" Ptl index %d, return md %#llx.%#llx, " "match bits %llu\n", hdr->msg.get.ptl_index, hdr->msg.get.return_wmd.wh_interface_cookie, hdr->msg.get.return_wmd.wh_object_cookie, @@ -1701,7 +1699,7 @@ lnet_print_hdr(lnet_hdr_t *hdr) break; case LNET_MSG_ACK: - CWARN(" dst md "LPX64"."LPX64", " + CWARN(" dst md %#llx.%#llx, " "manipulated length %d\n", hdr->msg.ack.dst_wmd.wh_interface_cookie, hdr->msg.ack.dst_wmd.wh_object_cookie, @@ -1709,7 +1707,7 @@ lnet_print_hdr(lnet_hdr_t *hdr) break; case LNET_MSG_REPLY: - CWARN(" dst md "LPX64"."LPX64", " + CWARN(" dst md %#llx.%#llx, " "length %d\n", hdr->msg.reply.dst_wmd.wh_interface_cookie, hdr->msg.reply.dst_wmd.wh_object_cookie, diff --git a/drivers/staging/lustre/lnet/lnet/lib-ptl.c b/drivers/staging/lustre/lnet/lnet/lib-ptl.c index 425fa04292bd..91767c9e15dd 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-ptl.c +++ b/drivers/staging/lustre/lnet/lnet/lib-ptl.c @@ -193,7 +193,7 @@ lnet_try_match_md(lnet_libmd_t *md, /* Commit to this ME/MD */ CDEBUG(D_NET, "Incoming %s index %x from %s of " - "length %d/%d into md "LPX64" [%d] + %d\n", + "length %d/%d into md %#llx [%d] + %d\n", (info->mi_opc == LNET_MD_OP_PUT) ? "put" : "get", info->mi_portal, libcfs_id2str(info->mi_id), mlength, info->mi_rlength, md->md_lh.lh_cookie, md->md_niov, offset); @@ -540,9 +540,9 @@ lnet_ptl_match_md(struct lnet_match_info *info, struct lnet_msg *msg) struct lnet_portal *ptl; int rc; - CDEBUG(D_NET, "Request from %s of length %d into portal %d " - "MB="LPX64"\n", libcfs_id2str(info->mi_id), - info->mi_rlength, info->mi_portal, info->mi_mbits); + CDEBUG(D_NET, "Request from %s of length %d into portal %d MB=%#llx\n", + libcfs_id2str(info->mi_id), info->mi_rlength, info->mi_portal, + info->mi_mbits); if (info->mi_portal >= the_lnet.ln_nportals) { CERROR("Invalid portal %d not in [0-%d]\n", @@ -596,7 +596,7 @@ lnet_ptl_match_md(struct lnet_match_info *info, struct lnet_msg *msg) if (msg->msg_rx_delayed) { CDEBUG(D_NET, - "Delaying %s from %s ptl %d MB "LPX64" off %d len %d\n", + "Delaying %s from %s ptl %d MB %#llx off %d len %d\n", info->mi_opc == LNET_MD_OP_PUT ? "PUT" : "GET", libcfs_id2str(info->mi_id), info->mi_portal, info->mi_mbits, info->mi_roffset, info->mi_rlength); diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c index 3f8020cb93e6..bcce919c0433 100644 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c @@ -216,7 +216,7 @@ brw_check_page(struct page *pg, int pattern, __u64 magic) LBUG(); bad_data: - CERROR("Bad data in page %p: "LPX64", "LPX64" expected\n", + CERROR("Bad data in page %p: %#llx, %#llx expected\n", pg, data, magic); return 1; } diff --git a/drivers/staging/lustre/lnet/selftest/rpc.c b/drivers/staging/lustre/lnet/selftest/rpc.c index d5ccbc36902a..a9f29d8833a9 100644 --- a/drivers/staging/lustre/lnet/selftest/rpc.c +++ b/drivers/staging/lustre/lnet/selftest/rpc.c @@ -386,7 +386,7 @@ srpc_post_passive_rdma(int portal, int local, __u64 matchbits, void *buf, } CDEBUG (D_NET, - "Posted passive RDMA: peer %s, portal %d, matchbits "LPX64"\n", + "Posted passive RDMA: peer %s, portal %d, matchbits %#llx\n", libcfs_id2str(peer), portal, matchbits); return 0; } @@ -437,7 +437,7 @@ srpc_post_active_rdma(int portal, __u64 matchbits, void *buf, int len, LASSERT (rc == 0); } else { CDEBUG (D_NET, - "Posted active RDMA: peer %s, portal %u, matchbits "LPX64"\n", + "Posted active RDMA: peer %s, portal %u, matchbits %#llx\n", libcfs_id2str(peer), portal, matchbits); } return 0; diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index e3708e358325..9e31fe55c750 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -211,7 +211,7 @@ static int seq_client_alloc_seq(const struct lu_env *env, *seqnr = seq->lcs_space.lsr_start; seq->lcs_space.lsr_start += 1; - CDEBUG(D_INFO, "%s: Allocated sequence ["LPX64"]\n", seq->lcs_name, + CDEBUG(D_INFO, "%s: Allocated sequence [%#llx]\n", seq->lcs_name, *seqnr); return rc; diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index e809d035808b..92a27fa9667c 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -126,7 +126,7 @@ lprocfs_fid_space_seq_show(struct seq_file *m, void *unused) LASSERT(seq != NULL); mutex_lock(&seq->lcs_mutex); - rc = seq_printf(m, "["LPX64" - "LPX64"]:%x:%s\n", PRANGE(&seq->lcs_space)); + rc = seq_printf(m, "[%#llx - %#llx]:%x:%s\n", PRANGE(&seq->lcs_space)); mutex_unlock(&seq->lcs_mutex); return rc; diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index b759cc9fe5f7..8dd8884587e3 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -138,7 +138,7 @@ fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq) return target; } - CERROR("%s: Can't find target by hash %d (seq "LPX64"). Targets (%d):\n", + CERROR("%s: Can't find target by hash %d (seq %#llx). Targets (%d):\n", fld->lcf_name, hash, seq, fld->lcf_count); list_for_each_entry(target, &fld->lcf_targets, ft_chain) { @@ -184,7 +184,7 @@ fld_client_get_target(struct lu_client_fld *fld, seqno_t seq) spin_unlock(&fld->lcf_lock); if (target != NULL) { - CDEBUG(D_INFO, "%s: Found target (idx %llu) by seq "LPX64"\n", + CDEBUG(D_INFO, "%s: Found target (idx %llu) by seq %#llx\n", fld->lcf_name, target->ft_idx, seq); } @@ -472,7 +472,7 @@ int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds, target = fld_client_get_target(fld, seq); LASSERT(target != NULL); - CDEBUG(D_INFO, "%s: Lookup fld entry (seq: "LPX64") on target %s (idx %llu)\n", + CDEBUG(D_INFO, "%s: Lookup fld entry (seq: %#llx) on target %s (idx %llu)\n", fld->lcf_name, seq, fld_target_name(target), target->ft_idx); res.lsr_start = seq; diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 5b84b7211382..757146273724 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -91,9 +91,7 @@ #ifndef _LUSTRE_IDL_H_ #define _LUSTRE_IDL_H_ -#if !defined(LPX64) -#include "../../../include/linux/libcfs/libcfs.h" /* for LPUX64, etc */ -#endif +#include "../../../include/linux/libcfs/libcfs.h" /* Defn's shared with user-space. */ #include "lustre_user.h" @@ -2747,7 +2745,7 @@ struct ldlm_res_id { __u64 name[RES_NAME_SIZE]; }; -#define DLDLMRES "["LPX64":"LPX64":"LPX64"].%llx" +#define DLDLMRES "[%#llx:%#llx:%#llx].%llx" #define PLDLMRES(res) (res)->lr_name.name[0], (res)->lr_name.name[1], \ (res)->lr_name.name[2], (res)->lr_name.name[3] diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h index 6309ce73af6a..a69b27a78042 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h @@ -179,7 +179,7 @@ struct ost_id { }; }; -#define DOSTID LPX64":%llu" +#define DOSTID "%#llx:%llu" #define POSTID(oi) ostid_seq(oi), ostid_id(oi) /* @@ -475,7 +475,7 @@ static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen) e.g. printf("file FID is "DFID"\n", PFID(fid)); */ #define FID_NOBRACE_LEN 40 #define FID_LEN (FID_NOBRACE_LEN + 2) -#define DFID_NOBRACE LPX64":0x%x:0x%x" +#define DFID_NOBRACE "%#llx:0x%x:0x%x" #define DFID "["DFID_NOBRACE"]" #define PFID(fid) \ (fid)->f_seq, \ diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h b/drivers/staging/lustre/lustre/include/lustre_fid.h index 7fa557bc80e6..ffb00f171240 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fid.h +++ b/drivers/staging/lustre/lustre/include/lustre_fid.h @@ -312,7 +312,7 @@ static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq) fid->f_seq = fid_idif_seq(0, 0); } else { LASSERTF(fid_seq_is_norm(seq) || fid_seq_is_echo(seq) || - fid_seq_is_idif(seq), LPX64"\n", seq); + fid_seq_is_idif(seq), "%#llx\n", seq); fid->f_seq = seq; } fid->f_oid = 0; diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c index ec9ddc82ddb9..01bf894d4a87 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_misc.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_misc.c @@ -103,7 +103,7 @@ int cl_ocd_update(struct obd_device *host, cli = &watched->u.cli; lco = owner; flags = cli->cl_import->imp_connect_data.ocd_connect_flags; - CDEBUG(D_SUPER, "Changing connect_flags: "LPX64" -> "LPX64"\n", + CDEBUG(D_SUPER, "Changing connect_flags: %#llx -> %#llx\n", lco->lco_flags, flags); mutex_lock(&lco->lco_lock); lco->lco_flags &= flags; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index 144cf77e4c56..fda9926bea3b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -517,7 +517,7 @@ int client_connect_import(const struct lu_env *env, if (data) { LASSERTF((ocd->ocd_connect_flags & data->ocd_connect_flags) == - ocd->ocd_connect_flags, "old "LPX64", new "LPX64"\n", + ocd->ocd_connect_flags, "old %#llx, new %#llx\n", data->ocd_connect_flags, ocd->ocd_connect_flags); data->ocd_connect_flags = ocd->ocd_connect_flags; } @@ -545,7 +545,7 @@ int client_disconnect_export(struct obd_export *exp) int rc = 0, err; if (!obd) { - CERROR("invalid export for disconnect: exp %p cookie "LPX64"\n", + CERROR("invalid export for disconnect: exp %p cookie %#llx\n", exp, exp ? exp->exp_handle.h_cookie : -1); return -EINVAL; } diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index ba8414e34ae8..d022666fb705 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -897,7 +897,7 @@ void ldlm_lock_decref_internal(struct ldlm_lock *lock, __u32 mode) void ldlm_lock_decref(struct lustre_handle *lockh, __u32 mode) { struct ldlm_lock *lock = __ldlm_handle2lock(lockh, 0); - LASSERTF(lock != NULL, "Non-existing lock: "LPX64"\n", lockh->cookie); + LASSERTF(lock != NULL, "Non-existing lock: %#llx\n", lockh->cookie); ldlm_lock_decref_internal(lock, mode); LDLM_LOCK_PUT(lock); } @@ -2255,9 +2255,9 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, if (resource == NULL) { libcfs_debug_vmsg2(msgdata, fmt, args, - " ns: \?\? lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " - "res: \?\? rrc=\?\? type: \?\?\? flags: "LPX64" nid: %s " - "remote: "LPX64" expref: %d pid: %u timeout: %lu " + " ns: \?\? lock: %p/%#llx lrc: %d/%d,%d mode: %s/%s " + "res: \?\? rrc=\?\? type: \?\?\? flags: %#llx nid: %s " + "remote: %#llx expref: %d pid: %u timeout: %lu " "lvb_type: %d\n", lock, lock->l_handle.h_cookie, atomic_read(&lock->l_refc), @@ -2274,10 +2274,10 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, switch (resource->lr_type) { case LDLM_EXTENT: libcfs_debug_vmsg2(msgdata, fmt, args, - " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " + " ns: %s lock: %p/%#llx lrc: %d/%d,%d mode: %s/%s " "res: "DLDLMRES" rrc: %d type: %s [%llu->%llu] " - "(req %llu->%llu) flags: "LPX64" nid: %s remote: " - LPX64" expref: %d pid: %u timeout: %lu lvb_type: %d\n", + "(req %llu->%llu) flags: %#llx nid: %s remote: " + "%#llx expref: %d pid: %u timeout: %lu lvb_type: %d\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, atomic_read(&lock->l_refc), lock->l_readers, lock->l_writers, @@ -2297,10 +2297,10 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, case LDLM_FLOCK: libcfs_debug_vmsg2(msgdata, fmt, args, - " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " + " ns: %s lock: %p/%#llx lrc: %d/%d,%d mode: %s/%s " "res: "DLDLMRES" rrc: %d type: %s pid: %d " - "[%llu->%llu] flags: "LPX64" nid: %s " - "remote: "LPX64" expref: %d pid: %u timeout: %lu\n", + "[%llu->%llu] flags: %#llx nid: %s " + "remote: %#llx expref: %d pid: %u timeout: %lu\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, atomic_read(&lock->l_refc), lock->l_readers, lock->l_writers, @@ -2319,9 +2319,9 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, case LDLM_IBITS: libcfs_debug_vmsg2(msgdata, fmt, args, - " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " - "res: "DLDLMRES" bits "LPX64" rrc: %d type: %s " - "flags: "LPX64" nid: %s remote: "LPX64" expref: %d " + " ns: %s lock: %p/%#llx lrc: %d/%d,%d mode: %s/%s " + "res: "DLDLMRES" bits %#llx rrc: %d type: %s " + "flags: %#llx nid: %s remote: %#llx expref: %d " "pid: %u timeout: %lu lvb_type: %d\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, @@ -2341,9 +2341,9 @@ void _ldlm_lock_debug(struct ldlm_lock *lock, default: libcfs_debug_vmsg2(msgdata, fmt, args, - " ns: %s lock: %p/"LPX64" lrc: %d/%d,%d mode: %s/%s " - "res: "DLDLMRES" rrc: %d type: %s flags: "LPX64" " - "nid: %s remote: "LPX64" expref: %d pid: %u " + " ns: %s lock: %p/%#llx lrc: %d/%d,%d mode: %s/%s " + "res: "DLDLMRES" rrc: %d type: %s flags: %#llx " + "nid: %s remote: %#llx expref: %d pid: %u " "timeout: %lu lvb_type: %d\n", ldlm_lock_to_ns_name(lock), lock, lock->l_handle.h_cookie, diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c index f043fc34c75c..952e10eb6178 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c @@ -525,7 +525,7 @@ static inline void ldlm_callback_errmsg(struct ptlrpc_request *req, struct lustre_handle *handle) { DEBUG_REQ((req->rq_no_reply || rc) ? D_WARNING : D_DLMTRACE, req, - "%s: [nid %s] [rc %d] [lock "LPX64"]", + "%s: [nid %s] [rc %d] [lock %#llx]", msg, libcfs_id2str(req->rq_peer), rc, handle ? handle->cookie : 0); if (req->rq_no_reply) @@ -635,7 +635,7 @@ static int ldlm_callback_handler(struct ptlrpc_request *req) lock = ldlm_handle2lock_long(&dlm_req->lock_handle[0], 0); if (!lock) { - CDEBUG(D_DLMTRACE, "callback on lock "LPX64" - lock " + CDEBUG(D_DLMTRACE, "callback on lock %#llx - lock " "disappeared\n", dlm_req->lock_handle[0].cookie); rc = ldlm_callback_reply(req, -EINVAL); ldlm_callback_errmsg(req, "Operate with invalid parameter", rc, @@ -660,7 +660,7 @@ static int ldlm_callback_handler(struct ptlrpc_request *req) (lock->l_flags & LDLM_FL_BL_DONE)) || (lock->l_flags & LDLM_FL_FAILED)) { LDLM_DEBUG(lock, "callback on lock " - LPX64" - lock disappeared\n", + "%#llx - lock disappeared\n", dlm_req->lock_handle[0].cookie); unlock_res_and_lock(lock); LDLM_LOCK_RELEASE(lock); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 798ede7595a7..8867dc175325 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -592,7 +592,7 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, LDLM_FL_NO_TIMEOUT); unlock_res_and_lock(lock); - CDEBUG(D_INFO, "local: %p, remote cookie: "LPX64", flags: 0x%llx\n", + CDEBUG(D_INFO, "local: %p, remote cookie: %#llx, flags: 0x%llx\n", lock, reply->lock_handle.cookie, *flags); /* If enqueue returned a blocked lock but the completion handler has @@ -2103,8 +2103,8 @@ static int replay_lock_interpret(const struct lu_env *env, lock = ldlm_handle2lock(&aa->lock_handle); if (!lock) { - CERROR("received replay ack for unknown local cookie "LPX64 - " remote cookie "LPX64 " from server %s id %s\n", + CERROR("received replay ack for unknown local cookie %#llx" + " remote cookie %#llx from server %s id %s\n", aa->lock_handle.cookie, reply->lock_handle.cookie, req->rq_export->exp_client_uuid.uuid, libcfs_id2str(req->rq_peer)); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index 344b63e7bf5b..ff40707e12ae 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -1133,9 +1133,9 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent, OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CREATE_RESOURCE, 2); rc = ns->ns_lvbo->lvbo_init(res); if (rc < 0) { - CERROR("%s: lvbo_init failed for resource "LPX64":" - LPX64": rc = %d\n", ns->ns_obd->obd_name, - name->name[0], name->name[1], rc); + CERROR("%s: lvbo_init failed for resource %#llx:%#llx: rc = %d\n", + ns->ns_obd->obd_name, name->name[0], + name->name[1], rc); if (res->lr_lvb_data) { OBD_FREE(res->lr_lvb_data, res->lr_lvb_len); res->lr_lvb_data = NULL; diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c index 48b1402d6cf2..49ae207ad425 100644 --- a/drivers/staging/lustre/lustre/llite/dcache.c +++ b/drivers/staging/lustre/lustre/llite/dcache.c @@ -213,8 +213,8 @@ void ll_intent_drop_lock(struct lookup_intent *it) handle.cookie = it->d.lustre.it_lock_handle; - CDEBUG(D_DLMTRACE, "releasing lock with cookie "LPX64 - " from it %p\n", handle.cookie, it); + CDEBUG(D_DLMTRACE, "releasing lock with cookie %#llx from it %p\n", + handle.cookie, it); ldlm_lock_decref(&handle, it->d.lustre.it_lock_mode); /* bug 494: intent_release may be called multiple times, from @@ -223,8 +223,8 @@ void ll_intent_drop_lock(struct lookup_intent *it) if (it->d.lustre.it_remote_lock_mode != 0) { handle.cookie = it->d.lustre.it_remote_lock_handle; - CDEBUG(D_DLMTRACE, "releasing remote lock with cookie" - LPX64" from it %p\n", handle.cookie, it); + CDEBUG(D_DLMTRACE, "releasing remote lock with cookie%#llx from it %p\n", + handle.cookie, it); ldlm_lock_decref(&handle, it->d.lustre.it_remote_lock_mode); it->d.lustre.it_remote_lock_mode = 0; diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index 5d2b883b1100..efa2faf080d7 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -302,8 +302,8 @@ static struct page *ll_dir_page_locate(struct inode *dir, __u64 *hash, *start = le64_to_cpu(dp->ldp_hash_start); *end = le64_to_cpu(dp->ldp_hash_end); } - LASSERTF(*start <= *hash, "start = "LPX64",end = " - LPX64",hash = "LPX64"\n", *start, *end, *hash); + LASSERTF(*start <= *hash, "start = %#llx,end = %#llx,hash = %#llx\n", + *start, *end, *hash); CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash %llu\n", offset, *start, *end, *hash); if (*hash > *end) { @@ -925,8 +925,7 @@ static int ll_ioc_copy_start(struct super_block *sb, struct hsm_copy *copy) iput(inode); if (rc != 0) { CDEBUG(D_HSM, "Could not read file data version of " - DFID" (rc = %d). Archive request (" - LPX64") could not be done.\n", + DFID" (rc = %d). Archive request (%#llx) could not be done.\n", PFID(©->hc_hai.hai_fid), rc, copy->hc_hai.hai_cookie); hpk.hpk_flags |= HP_FLAG_RETRY; @@ -1022,7 +1021,7 @@ static int ll_ioc_copy_end(struct super_block *sb, struct hsm_copy *copy) (copy->hc_data_version != data_version)) { CDEBUG(D_HSM, "File data version mismatched. " "File content was changed during archiving. " - DFID", start:"LPX64" current:"LPX64"\n", + DFID", start:%#llx current:%#llx\n", PFID(©->hc_hai.hai_fid), copy->hc_data_version, data_version); /* File was changed, send error to cdt. Do not ask for diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index e547c2b185c9..fd1b75a3a569 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c @@ -140,7 +140,7 @@ static int ll_close_inode_openhandle(struct obd_export *md_exp, * XXX: in case of LMV, is this correct to access * ->exp_handle? */ - CERROR("Invalid MDC connection handle "LPX64"\n", + CERROR("Invalid MDC connection handle %#llx\n", ll_i2mdexp(inode)->exp_handle.h_cookie); GOTO(out, rc = 0); } diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index ade58e8a41e3..023c40518c6d 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -359,7 +359,7 @@ struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc) ocapa = NULL; if (atomic_read(&ll_capa_debug)) { - CERROR("no capability for "DFID" opc "LPX64"\n", + CERROR("no capability for "DFID" opc %#llx\n", PFID(&lli->lli_fid), opc); atomic_set(&ll_capa_debug, 0); } diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index f9b4526d1217..faf79408e7b3 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -1432,7 +1432,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode, if (it->d.lustre.it_remote_lock_mode) { handle.cookie = it->d.lustre.it_remote_lock_handle; CDEBUG(D_DLMTRACE, "setting l_data to inode %p" - "(%lu/%u) for remote lock "LPX64"\n", inode, + "(%lu/%u) for remote lock %#llx\n", inode, inode->i_ino, inode->i_generation, handle.cookie); md_set_lock_data(exp, &handle.cookie, inode, NULL); @@ -1441,7 +1441,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode, handle.cookie = it->d.lustre.it_lock_handle; CDEBUG(D_DLMTRACE, "setting l_data to inode %p (%lu/%u)" - " for lock "LPX64"\n", inode, inode->i_ino, + " for lock %#llx\n", inode, inode->i_ino, inode->i_generation, handle.cookie); md_set_lock_data(exp, &handle.cookie, inode, diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index ead13bc2e935..e0d8f15fe4fd 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -426,7 +426,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (sbi->ll_flags & LL_SBI_RMT_CLIENT) data->ocd_connect_flags |= OBD_CONNECT_RMT_CLIENT_FORCE; - CDEBUG(D_RPCTRACE, "ocd_connect_flags: "LPX64" ocd_version: %d " + CDEBUG(D_RPCTRACE, "ocd_connect_flags: %#llx ocd_version: %d " "ocd_grant: %d\n", data->ocd_connect_flags, data->ocd_version, data->ocd_grant); @@ -1999,7 +1999,7 @@ void ll_umount_begin(struct super_block *sb) obd = class_exp2obd(sbi->ll_md_exp); if (obd == NULL) { - CERROR("Invalid MDC connection handle "LPX64"\n", + CERROR("Invalid MDC connection handle %#llx\n", sbi->ll_md_exp->exp_handle.h_cookie); return; } @@ -2007,7 +2007,7 @@ void ll_umount_begin(struct super_block *sb) obd = class_exp2obd(sbi->ll_dt_exp); if (obd == NULL) { - CERROR("Invalid LOV connection handle "LPX64"\n", + CERROR("Invalid LOV connection handle %#llx\n", sbi->ll_dt_exp->exp_handle.h_cookie); return; } diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c index d79e96c92daa..0dc7173bbd41 100644 --- a/drivers/staging/lustre/lustre/llite/namei.c +++ b/drivers/staging/lustre/lustre/llite/namei.c @@ -105,7 +105,7 @@ static int ll_set_inode(struct inode *inode, void *opaque) lli->lli_fid = body->fid1; if (unlikely(!(body->valid & OBD_MD_FLTYPE))) { CERROR("Can not initialize inode "DFID" without object type: " - "valid = "LPX64"\n", PFID(&lli->lli_fid), body->valid); + "valid = %#llx\n", PFID(&lli->lli_fid), body->valid); return -EINVAL; } diff --git a/drivers/staging/lustre/lustre/lmv/lmv_fld.c b/drivers/staging/lustre/lustre/lmv/lmv_fld.c index b1b0effee00e..8289bcc5f8e1 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_fld.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_fld.c @@ -66,8 +66,8 @@ int lmv_fld_lookup(struct lmv_obd *lmv, rc = fld_client_lookup(&lmv->lmv_fld, fid_seq(fid), mds, LU_SEQ_RANGE_MDT, NULL); if (rc) { - CERROR("Error while looking for mds number. Seq "LPX64 - ", err = %d\n", fid_seq(fid), rc); + CERROR("Error while looking for mds number. Seq %#llx, err = %d\n", + fid_seq(fid), rc); return rc; } diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index 56bd17edfdfe..bb3e8c7c0aa6 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -90,7 +90,7 @@ static int lmv_set_mdc_active(struct lmv_obd *lmv, struct obd_uuid *uuid, if (tgt == NULL || tgt->ltd_exp == NULL) continue; - CDEBUG(D_INFO, "Target idx %d is %s conn "LPX64"\n", i, + CDEBUG(D_INFO, "Target idx %d is %s conn %#llx\n", i, tgt->ltd_uuid.uuid, tgt->ltd_exp->exp_handle.h_cookie); if (obd_uuid_equals(uuid, &tgt->ltd_uuid)) @@ -2173,7 +2173,7 @@ static int lmv_readpage(struct obd_export *exp, struct md_op_data *op_data, if (rc) return rc; - CDEBUG(D_INODE, "READPAGE at "LPX64" from "DFID"\n", + CDEBUG(D_INODE, "READPAGE at %#llx from "DFID"\n", offset, PFID(&op_data->op_fid1)); tgt = lmv_find_target(lmv, &op_data->op_fid1); @@ -2315,7 +2315,7 @@ static int lmv_get_info(const struct lu_env *env, struct obd_export *exp, obd = class_exp2obd(exp); if (obd == NULL) { - CDEBUG(D_IOCTL, "Invalid client cookie "LPX64"\n", + CDEBUG(D_IOCTL, "Invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } @@ -2381,7 +2381,7 @@ int lmv_set_info_async(const struct lu_env *env, struct obd_export *exp, obd = class_exp2obd(exp); if (obd == NULL) { - CDEBUG(D_IOCTL, "Invalid client cookie "LPX64"\n", + CDEBUG(D_IOCTL, "Invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } diff --git a/drivers/staging/lustre/lustre/lov/lov_ea.c b/drivers/staging/lustre/lustre/lov/lov_ea.c index 1c304b0d19e7..2401ca872507 100644 --- a/drivers/staging/lustre/lustre/lov/lov_ea.c +++ b/drivers/staging/lustre/lustre/lov/lov_ea.c @@ -348,7 +348,7 @@ const struct lsm_operations lsm_v3_ops = { void dump_lsm(unsigned int level, const struct lov_stripe_md *lsm) { - CDEBUG(level, "lsm %p, objid "DOSTID", maxbytes "LPX64", magic 0x%08X," + CDEBUG(level, "lsm %p, objid "DOSTID", maxbytes %#llx, magic 0x%08X," " stripe_size %u, stripe_count %u, refc: %d," " layout_gen %u, pool ["LOV_POOLNAMEF"]\n", lsm, POSTID(&lsm->lsm_oi), lsm->lsm_maxbytes, lsm->lsm_magic, diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 643eada816e4..065561d29661 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -382,7 +382,7 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, if (!tgt->ltd_exp) continue; - CDEBUG(D_INFO, "lov idx %d is %s conn "LPX64"\n", + CDEBUG(D_INFO, "lov idx %d is %s conn %#llx\n", index, obd_uuid2str(&tgt->ltd_uuid), tgt->ltd_exp->exp_handle.h_cookie); if (obd_uuid_equals(uuid, &tgt->ltd_uuid)) @@ -1462,7 +1462,7 @@ static int lov_sync(const struct lu_env *env, struct obd_export *exp, if (rc) return rc; - CDEBUG(D_INFO, "fsync objid "DOSTID" ["LPX64", "LPX64"]\n", + CDEBUG(D_INFO, "fsync objid "DOSTID" [%#llx, %#llx]\n", POSTID(&set->set_oi->oi_oa->o_oi), start, end); list_for_each(pos, &set->set_list) { diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index 606f644565aa..185fe66c18a3 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -670,7 +670,7 @@ void mdc_replay_open(struct ptlrpc_request *req) LASSERT(och->och_magic == OBD_CLIENT_HANDLE_MAGIC); file_fh = &och->och_fh; - CDEBUG(D_HA, "updating handle from "LPX64" to "LPX64"\n", + CDEBUG(D_HA, "updating handle from %#llx to %#llx\n", file_fh->cookie, body->handle.cookie); old = *file_fh; *file_fh = body->handle; diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index 5108f0daedf1..fc638907af3a 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -83,7 +83,7 @@ static int mgc_name2resid(char *name, int len, struct ldlm_res_id *res_id, LBUG(); } res_id->name[1] = cpu_to_le64(resname); - CDEBUG(D_MGC, "log %s to resid "LPX64"/"LPX64" (%.8s)\n", name, + CDEBUG(D_MGC, "log %s to resid %#llx/%#llx (%.8s)\n", name, res_id->name[0], res_id->name[1], (char *)&res_id->name[0]); return 0; } @@ -1011,7 +1011,7 @@ static int mgc_enqueue(struct obd_export *exp, struct lov_stripe_md *lsm, int short_limit = cld_is_sptlrpc(cld); int rc; - CDEBUG(D_MGC, "Enqueue for %s (res "LPX64")\n", cld->cld_logname, + CDEBUG(D_MGC, "Enqueue for %s (res %#llx)\n", cld->cld_logname, cld->cld_resid.name[0]); /* We need a callback for every lockholder, so don't try to diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index 69eca4ca6297..5af61a8c0b85 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -411,7 +411,7 @@ void _debug_capa(struct lustre_capa *c, va_list args; va_start(args, fmt); libcfs_debug_vmsg2(msgdata, fmt, args, - " capability@%p fid "DFID" opc "LPX64" uid %llu" + " capability@%p fid "DFID" opc %#llx uid %llu" " gid %llu flags %u alg %d keyid %u timeout %u " "expiry %u\n", c, PFID(capa_fid(c)), capa_opc(c), capa_uid(c), capa_gid(c), capa_flags(c), diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index e8447e6c2194..df6a72fc24d0 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -420,45 +420,45 @@ int obd_init_checks(void) char buf[64]; int len, ret = 0; - CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", "%llu", "%lld", LPX64); + CDEBUG(D_INFO, "LPU64=%s, LPD64=%s, LPX64=%s\n", "%llu", "%lld", "%#llx"); - CDEBUG(D_INFO, "OBD_OBJECT_EOF = "LPX64"\n", (__u64)OBD_OBJECT_EOF); + CDEBUG(D_INFO, "OBD_OBJECT_EOF = %#llx\n", (__u64)OBD_OBJECT_EOF); u64val = OBD_OBJECT_EOF; - CDEBUG(D_INFO, "u64val OBD_OBJECT_EOF = "LPX64"\n", u64val); + CDEBUG(D_INFO, "u64val OBD_OBJECT_EOF = %#llx\n", u64val); if (u64val != OBD_OBJECT_EOF) { - CERROR("__u64 "LPX64"(%d) != 0xffffffffffffffff\n", + CERROR("__u64 %#llx(%d) != 0xffffffffffffffff\n", u64val, (int)sizeof(u64val)); ret = -EINVAL; } - len = snprintf(buf, sizeof(buf), LPX64, u64val); + len = snprintf(buf, sizeof(buf), "%#llx", u64val); if (len != 18) { CWARN("LPX64 wrong length! strlen(%s)=%d != 18\n", buf, len); ret = -EINVAL; } div64val = OBD_OBJECT_EOF; - CDEBUG(D_INFO, "u64val OBD_OBJECT_EOF = "LPX64"\n", u64val); + CDEBUG(D_INFO, "u64val OBD_OBJECT_EOF = %#llx\n", u64val); if (u64val != OBD_OBJECT_EOF) { - CERROR("__u64 "LPX64"(%d) != 0xffffffffffffffff\n", + CERROR("__u64 %#llx(%d) != 0xffffffffffffffff\n", u64val, (int)sizeof(u64val)); ret = -EOVERFLOW; } if (u64val >> 8 != OBD_OBJECT_EOF >> 8) { - CERROR("__u64 "LPX64"(%d) != 0xffffffffffffffff\n", + CERROR("__u64 %#llx(%d) != 0xffffffffffffffff\n", u64val, (int)sizeof(u64val)); return -EOVERFLOW; } if (do_div(div64val, 256) != (u64val & 255)) { - CERROR("do_div("LPX64",256) != %llu\n", u64val, u64val &255); + CERROR("do_div(%#llx,256) != %llu\n", u64val, u64val &255); return -EOVERFLOW; } if (u64val >> 8 != div64val) { - CERROR("do_div("LPX64",256) %llu != %llu\n", + CERROR("do_div(%#llx,256) %llu != %llu\n", u64val, div64val, u64val >> 8); return -EOVERFLOW; } - len = snprintf(buf, sizeof(buf), LPX64, u64val); + len = snprintf(buf, sizeof(buf), "%#llx", u64val); if (len != 18) { CWARN("LPX64 wrong length! strlen(%s)=%d != 18\n", buf, len); ret = -EINVAL; diff --git a/drivers/staging/lustre/lustre/obdclass/debug.c b/drivers/staging/lustre/lustre/obdclass/debug.c index 97eceb11b890..e8aa42beb3c7 100644 --- a/drivers/staging/lustre/lustre/obdclass/debug.c +++ b/drivers/staging/lustre/lustre/obdclass/debug.c @@ -84,25 +84,25 @@ int block_debug_check(char *who, void *addr, int end, __u64 off, __u64 id) ne_off = le64_to_cpu (off); id = le64_to_cpu (id); if (memcmp(addr, (char *)&ne_off, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu off: "LPX64" != " - LPX64"\n", who, id, off, *(__u64 *)addr, ne_off); + CDEBUG(D_ERROR, "%s: id %#llx offset %llu off: %#llx != %#llx\n", + who, id, off, *(__u64 *)addr, ne_off); err = -EINVAL; } if (memcmp(addr + LPDS, (char *)&id, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu id: "LPX64" != "LPX64"\n", + CDEBUG(D_ERROR, "%s: id %#llx offset %llu id: %#llx != %#llx\n", who, id, off, *(__u64 *)(addr + LPDS), id); err = -EINVAL; } addr += end - LPDS - LPDS; if (memcmp(addr, (char *)&ne_off, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu end off: "LPX64" != " - LPX64"\n", who, id, off, *(__u64 *)addr, ne_off); + CDEBUG(D_ERROR, "%s: id %#llx offset %llu end off: %#llx != %#llx\n", + who, id, off, *(__u64 *)addr, ne_off); err = -EINVAL; } if (memcmp(addr + LPDS, (char *)&id, LPDS)) { - CDEBUG(D_ERROR, "%s: id "LPX64" offset %llu end id: "LPX64" != " - LPX64"\n", who, id, off, *(__u64 *)(addr + LPDS), id); + CDEBUG(D_ERROR, "%s: id %#llx offset %llu end id: %#llx != %#llx\n", + who, id, off, *(__u64 *)(addr + LPDS), id); err = -EINVAL; } diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index f054dd6130ce..504c59aabaef 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -699,7 +699,7 @@ struct obd_export *class_conn2export(struct lustre_handle *conn) return NULL; } - CDEBUG(D_INFO, "looking for export cookie "LPX64"\n", conn->cookie); + CDEBUG(D_INFO, "looking for export cookie %#llx\n", conn->cookie); export = class_handle2object(conn->cookie); return export; } @@ -1113,7 +1113,7 @@ int class_connect(struct lustre_handle *conn, struct obd_device *obd, conn->cookie = export->exp_handle.h_cookie; class_export_put(export); - CDEBUG(D_IOCTL, "connect: client %s, cookie "LPX64"\n", + CDEBUG(D_IOCTL, "connect: client %s, cookie %#llx\n", cluuid->uuid, conn->cookie); return 0; } @@ -1190,7 +1190,7 @@ int class_disconnect(struct obd_export *export) GOTO(no_disconn, already_disconnected); } - CDEBUG(D_IOCTL, "disconnect: cookie "LPX64"\n", + CDEBUG(D_IOCTL, "disconnect: cookie %#llx\n", export->exp_handle.h_cookie); if (!hlist_unhashed(&export->exp_nid_hash)) diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c index 35f077c8286d..bb15202f1aae 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c @@ -151,7 +151,7 @@ void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new %llu/%llu\n", + "valid %#llx, cur time %lu/%lu, new %llu/%llu\n", src->o_valid, LTIME_S(dst->i_mtime), LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); @@ -190,7 +190,7 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new %llu/%llu\n", + "valid %#llx, cur time %lu/%lu, new %llu/%llu\n", src->o_valid, LTIME_S(dst->i_mtime), LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c b/drivers/staging/lustre/lustre/obdclass/llog_swab.c index 1a2d70b4704b..b3247fb7a35a 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c @@ -56,7 +56,7 @@ static void print_llogd_body(struct llogd_body *d) CDEBUG(D_OTHER, "\tlgd_index: %#x\n", d->lgd_index); CDEBUG(D_OTHER, "\tlgd_saved_index: %#x\n", d->lgd_saved_index); CDEBUG(D_OTHER, "\tlgd_len: %#x\n", d->lgd_len); - CDEBUG(D_OTHER, "\tlgd_cur_offset: "LPX64"\n", d->lgd_cur_offset); + CDEBUG(D_OTHER, "\tlgd_cur_offset: %#llx\n", d->lgd_cur_offset); } void lustre_swab_lu_fid(struct lu_fid *fid) @@ -284,7 +284,7 @@ static void print_llog_hdr(struct llog_log_hdr *h) CDEBUG(D_OTHER, "\tllh_hdr.lrh_index: %#x\n", h->llh_hdr.lrh_index); CDEBUG(D_OTHER, "\tllh_hdr.lrh_len: %#x\n", h->llh_hdr.lrh_len); CDEBUG(D_OTHER, "\tllh_hdr.lrh_type: %#x\n", h->llh_hdr.lrh_type); - CDEBUG(D_OTHER, "\tllh_timestamp: "LPX64"\n", h->llh_timestamp); + CDEBUG(D_OTHER, "\tllh_timestamp: %#llx\n", h->llh_timestamp); CDEBUG(D_OTHER, "\tllh_count: %#x\n", h->llh_count); CDEBUG(D_OTHER, "\tllh_bitmap_offset: %#x\n", h->llh_bitmap_offset); CDEBUG(D_OTHER, "\tllh_flags: %#x\n", h->llh_flags); diff --git a/drivers/staging/lustre/lustre/obdclass/local_storage.c b/drivers/staging/lustre/lustre/obdclass/local_storage.c index d81443dad829..78190225ac7a 100644 --- a/drivers/staging/lustre/lustre/obdclass/local_storage.c +++ b/drivers/staging/lustre/lustre/obdclass/local_storage.c @@ -670,7 +670,7 @@ int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, return PTR_ERR(root); /* find old last_id file */ - snprintf(dti->dti_buf, sizeof(dti->dti_buf), "seq-"LPX64"-lastid", + snprintf(dti->dti_buf, sizeof(dti->dti_buf), "seq-%#llx-lastid", lastid_seq); rc = dt_lookup_dir(env, root, dti->dti_buf, &dti->dti_fid); lu_object_put_nocache(env, &root->do_lu); @@ -693,7 +693,7 @@ int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, } else if (rc < 0) { return rc; } else { - CDEBUG(D_INFO, "Found old lastid file for sequence "LPX64"\n", + CDEBUG(D_INFO, "Found old lastid file for sequence %#llx\n", lastid_seq); o = ls_locate(env, ls, &dti->dti_fid); if (IS_ERR(o)) @@ -709,12 +709,12 @@ int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, dt_read_unlock(env, o); lu_object_put_nocache(env, &o->do_lu); if (rc == 0 && le32_to_cpu(losd.lso_magic) != LOS_MAGIC) { - CERROR("%s: wrong content of seq-"LPX64"-lastid file, magic %x\n", + CERROR("%s: wrong content of seq-%#llx-lastid file, magic %x\n", o->do_lu.lo_dev->ld_obd->obd_name, lastid_seq, le32_to_cpu(losd.lso_magic)); return -EINVAL; } else if (rc < 0) { - CERROR("%s: failed to read seq-"LPX64"-lastid: rc = %d\n", + CERROR("%s: failed to read seq-%#llx-lastid: rc = %d\n", o->do_lu.lo_dev->ld_obd->obd_name, lastid_seq, rc); return rc; } diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 7ba09e0ff264..005bcbabc5be 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -116,7 +116,7 @@ int obd_connect_flags2str(char *page, int count, __u64 flags, char *sep) } if (flags & ~(mask - 1)) ret += snprintf(page + ret, count - ret, - "%sunknown flags "LPX64, + "%sunknown flags %#llx", ret ? sep : "", flags & ~(mask - 1)); return ret; } @@ -667,7 +667,7 @@ static void obd_connect_seq_flags2str(struct seq_file *m, __u64 flags, char *sep } } if (flags & ~(mask - 1)) - seq_printf(m, "%sunknown flags "LPX64, + seq_printf(m, "%sunknown flags %#llx", first ? sep : "", flags & ~(mask - 1)); } @@ -908,7 +908,7 @@ int lprocfs_rd_connect_flags(struct seq_file *m, void *data) LPROCFS_CLIMP_CHECK(obd); flags = obd->u.cli.cl_import->imp_connect_data.ocd_connect_flags; - seq_printf(m, "flags="LPX64"\n", flags); + seq_printf(m, "flags=%#llx\n", flags); obd_connect_seq_flags2str(m, flags, "\n"); seq_printf(m, "\n"); LPROCFS_CLIMP_EXIT(obd); diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c index 0bcefa79fb77..2010463429b1 100644 --- a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c +++ b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c @@ -97,7 +97,7 @@ void class_handle_hash(struct portals_handle *h, h->h_in = 1; spin_unlock(&bucket->lock); - CDEBUG(D_INFO, "added object %p with handle "LPX64" to hash\n", + CDEBUG(D_INFO, "added object %p with handle %#llx to hash\n", h, h->h_cookie); } EXPORT_SYMBOL(class_handle_hash); @@ -105,12 +105,12 @@ EXPORT_SYMBOL(class_handle_hash); static void class_handle_unhash_nolock(struct portals_handle *h) { if (list_empty(&h->h_link)) { - CERROR("removing an already-removed handle ("LPX64")\n", + CERROR("removing an already-removed handle (%#llx)\n", h->h_cookie); return; } - CDEBUG(D_INFO, "removing object %p with handle "LPX64" from hash\n", + CDEBUG(D_INFO, "removing object %p with handle %#llx from hash\n", h, h->h_cookie); spin_lock(&h->h_lock); @@ -230,7 +230,7 @@ static int cleanup_all_handles(void) spin_lock(&handle_hash[i].lock); list_for_each_entry_rcu(h, &(handle_hash[i].head), h_link) { - CERROR("force clean handle "LPX64" addr %p ops %p\n", + CERROR("force clean handle %#llx addr %p ops %p\n", h->h_cookie, h, h->h_ops); class_handle_unhash_nolock(h); diff --git a/drivers/staging/lustre/lustre/obdclass/obd_config.c b/drivers/staging/lustre/lustre/obdclass/obd_config.c index f7b6e1657fc9..3acb1a86cfc7 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_config.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_config.c @@ -1093,9 +1093,9 @@ int class_process_config(struct lustre_cfg *lcfg) GOTO(out, err); } case LCFG_ADD_UUID: { - CDEBUG(D_IOCTL, "adding mapping from uuid %s to nid "LPX64 - " (%s)\n", lustre_cfg_string(lcfg, 1), - lcfg->lcfg_nid, libcfs_nid2str(lcfg->lcfg_nid)); + CDEBUG(D_IOCTL, "adding mapping from uuid %s to nid %#llx (%s)\n", + lustre_cfg_string(lcfg, 1), lcfg->lcfg_nid, + libcfs_nid2str(lcfg->lcfg_nid)); err = class_add_uuid(lustre_cfg_string(lcfg, 1), lcfg->lcfg_nid); GOTO(out, err); @@ -1614,7 +1614,7 @@ int class_config_parse_rec(struct llog_rec_hdr *rec, char *buf, int size) ptr += snprintf(ptr, end-ptr, "num=%#08x ", lcfg->lcfg_num); if (lcfg->lcfg_nid) - ptr += snprintf(ptr, end-ptr, "nid=%s("LPX64")\n ", + ptr += snprintf(ptr, end-ptr, "nid=%s(%#llx)\n ", libcfs_nid2str(lcfg->lcfg_nid), lcfg->lcfg_nid); diff --git a/drivers/staging/lustre/lustre/obdclass/obdo.c b/drivers/staging/lustre/lustre/obdclass/obdo.c index be118ba72891..c9fa36b17919 100644 --- a/drivers/staging/lustre/lustre/obdclass/obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/obdo.c @@ -117,7 +117,7 @@ EXPORT_SYMBOL(obdo_from_inode); void obdo_cpy_md(struct obdo *dst, struct obdo *src, obd_flag valid) { - CDEBUG(D_INODE, "src obdo "DOSTID" valid "LPX64", dst obdo "DOSTID"\n", + CDEBUG(D_INODE, "src obdo "DOSTID" valid %#llx, dst obdo "DOSTID"\n", POSTID(&src->o_oi), src->o_valid, POSTID(&dst->o_oi)); if (valid & OBD_MD_FLATIME) dst->o_atime = src->o_atime; @@ -252,7 +252,7 @@ void iattr_from_obdo(struct iattr *attr, struct obdo *oa, obd_flag valid) valid &= oa->o_valid; if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) - CDEBUG(D_INODE, "valid "LPX64", new time %llu/%llu\n", + CDEBUG(D_INODE, "valid %#llx, new time %llu/%llu\n", oa->o_valid, oa->o_mtime, oa->o_ctime); attr->ia_valid = 0; diff --git a/drivers/staging/lustre/lustre/obdecho/echo.c b/drivers/staging/lustre/lustre/obdecho/echo.c index eae1cca9956a..f3b7429add02 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo.c +++ b/drivers/staging/lustre/lustre/obdecho/echo.c @@ -120,7 +120,7 @@ static int echo_create(const struct lu_env *env, struct obd_export *exp, struct obd_device *obd = class_exp2obd(exp); if (!obd) { - CERROR("invalid client cookie "LPX64"\n", + CERROR("invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } @@ -131,7 +131,7 @@ static int echo_create(const struct lu_env *env, struct obd_export *exp, } if (!(oa->o_valid & OBD_MD_FLTYPE)) { - CERROR("invalid o_valid "LPX64"\n", oa->o_valid); + CERROR("invalid o_valid %#llx\n", oa->o_valid); return -EINVAL; } @@ -150,13 +150,13 @@ static int echo_destroy(const struct lu_env *env, struct obd_export *exp, struct obd_device *obd = class_exp2obd(exp); if (!obd) { - CERROR("invalid client cookie "LPX64"\n", + CERROR("invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } if (!(oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: "LPX64"\n", oa->o_valid); + CERROR("obdo missing FLID valid flag: %#llx\n", oa->o_valid); return -EINVAL; } @@ -176,13 +176,13 @@ static int echo_getattr(const struct lu_env *env, struct obd_export *exp, obd_id id = ostid_id(&oinfo->oi_oa->o_oi); if (!obd) { - CERROR("invalid client cookie "LPX64"\n", + CERROR("invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } if (!(oinfo->oi_oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: "LPX64"\n", + CERROR("obdo missing FLID valid flag: %#llx\n", oinfo->oi_oa->o_valid); return -EINVAL; } @@ -200,13 +200,13 @@ static int echo_setattr(const struct lu_env *env, struct obd_export *exp, struct obd_device *obd = class_exp2obd(exp); if (!obd) { - CERROR("invalid client cookie "LPX64"\n", + CERROR("invalid client cookie %#llx\n", exp->exp_handle.h_cookie); return -EINVAL; } if (!(oinfo->oi_oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: "LPX64"\n", + CERROR("obdo missing FLID valid flag: %#llx\n", oinfo->oi_oa->o_valid); return -EINVAL; } diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index 32d569aeb64b..b3428d972545 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -1228,7 +1228,7 @@ static int cl_echo_cancel0(struct lu_env *env, struct echo_device *ed, spin_lock(&ec->ec_lock); list_for_each (el, &ec->ec_locks) { ecl = list_entry (el, struct echo_lock, el_chain); - CDEBUG(D_INFO, "ecl: %p, cookie: "LPX64"\n", ecl, ecl->el_cookie); + CDEBUG(D_INFO, "ecl: %p, cookie: %#llx\n", ecl, ecl->el_cookie); found = (ecl->el_cookie == cookie); if (found) { if (atomic_dec_and_test(&ecl->el_refcount)) @@ -1540,7 +1540,7 @@ int echo_attr_get_complex(const struct lu_env *env, struct md_object *next, #endif out: ma->ma_need = need; - CDEBUG(D_INODE, "after getattr rc = %d, ma_valid = "LPX64" ma_lmm=%p\n", + CDEBUG(D_INODE, "after getattr rc = %d, ma_valid = %#llx ma_lmm=%p\n", rc, ma->ma_valid, ma->ma_lmm); return rc; } @@ -2408,7 +2408,7 @@ static int echo_client_page_debug_check(struct lov_stripe_md *lsm, addr + delta, OBD_ECHO_BLOCK_SIZE, stripe_off, stripe_id); if (rc2 != 0) { - CERROR ("Error in echo object "LPX64"\n", id); + CERROR ("Error in echo object %#llx\n", id); rc = rc2; } } @@ -2703,7 +2703,7 @@ echo_client_enqueue(struct obd_export *exp, struct obdo *oa, rc = cl_echo_enqueue(eco, offset, end, mode, &ulh->cookie); if (rc == 0) { oa->o_valid |= OBD_MD_FLHANDLE; - CDEBUG(D_INFO, "Cookie is "LPX64"\n", ulh->cookie); + CDEBUG(D_INFO, "Cookie is %#llx\n", ulh->cookie); } echo_put_object(eco); return rc; @@ -2718,7 +2718,7 @@ echo_client_cancel(struct obd_export *exp, struct obdo *oa) if ((oa->o_valid & OBD_MD_FLHANDLE) == 0) return -EINVAL; - CDEBUG(D_INFO, "Cookie is "LPX64"\n", cookie); + CDEBUG(D_INFO, "Cookie is %#llx\n", cookie); return cl_echo_cancel(ed, cookie); } @@ -3084,7 +3084,7 @@ static int echo_client_disconnect(struct obd_export *exp) rc = obd_cancel(ec->ec_exp, ecl->ecl_object->eco_lsm, ecl->ecl_mode, &ecl->ecl_lock_handle); - CDEBUG (D_INFO, "Cancel lock on object "LPX64" on disconnect " + CDEBUG (D_INFO, "Cancel lock on object %#llx on disconnect " "(%d)\n", ecl->ecl_object->eco_id, rc); echo_put_object (ecl->ecl_object); diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index 7dda1ac91b0c..8138856fda8c 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -1399,7 +1399,7 @@ static int osc_lock_print(const struct lu_env *env, void *cookie, /* * XXX print ldlm lock and einfo properly. */ - (*p)(env, cookie, "%p %#16llx "LPX64" %d %p ", + (*p)(env, cookie, "%p %#16llx %#llx %d %p ", lock->ols_lock, lock->ols_flags, lock->ols_handle.cookie, lock->ols_state, lock->ols_owner); osc_lvb_print(env, cookie, p, &lock->ols_lvb); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 47ff24371789..5028e77bf8bf 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -1492,7 +1492,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) body->oa.o_valid & (OBD_MD_FLUSRQUOTA | OBD_MD_FLGRPQUOTA)) { unsigned int qid[MAXQUOTAS] = { body->oa.o_uid, body->oa.o_gid }; - CDEBUG(D_QUOTA, "setdq for [%u %u] with valid "LPX64", flags %x\n", + CDEBUG(D_QUOTA, "setdq for [%u %u] with valid %#llx, flags %x\n", body->oa.o_uid, body->oa.o_gid, body->oa.o_valid, body->oa.o_flags); osc_quota_setdq(cli, qid, body->oa.o_valid, body->oa.o_flags); @@ -3260,7 +3260,7 @@ static int osc_reconnect(const struct lu_env *env, cli->cl_lost_grant = 0; client_obd_list_unlock(&cli->cl_loi_list_lock); - CDEBUG(D_RPCTRACE, "ocd_connect_flags: "LPX64" ocd_version: %d" + CDEBUG(D_RPCTRACE, "ocd_connect_flags: %#llx ocd_version: %d" " ocd_grant: %d, lost: %ld.\n", data->ocd_connect_flags, data->ocd_version, data->ocd_grant, lost_grant); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index b680caf246f0..4146e8b29a6d 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -1181,7 +1181,7 @@ static void ptlrpc_save_versions(struct ptlrpc_request *req) LASSERT(versions); lustre_msg_set_versions(reqmsg, versions); - CDEBUG(D_INFO, "Client save versions ["LPX64"/"LPX64"]\n", + CDEBUG(D_INFO, "Client save versions [%#llx/%#llx]\n", versions[0], versions[1]); } @@ -2723,7 +2723,7 @@ static int ptlrpc_replay_interpret(const struct lu_env *env, LASSERTF(lustre_msg_get_transno(req->rq_reqmsg) == lustre_msg_get_transno(req->rq_repmsg) || lustre_msg_get_transno(req->rq_repmsg) == 0, - LPX64"/"LPX64"\n", + "%#llx/%#llx\n", lustre_msg_get_transno(req->rq_reqmsg), lustre_msg_get_transno(req->rq_repmsg)); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index a2affa7b0a3e..f522fc5d3a93 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -842,8 +842,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, /* check that server granted subset of flags we asked for. */ if ((ocd->ocd_connect_flags & imp->imp_connect_flags_orig) != ocd->ocd_connect_flags) { - CERROR("%s: Server didn't granted asked subset of flags: " - "asked="LPX64" grranted="LPX64"\n", + CERROR("%s: Server didn't granted asked subset of flags: asked=%#llx grranted=%#llx\n", imp->imp_obd->obd_name,imp->imp_connect_flags_orig, ocd->ocd_connect_flags); GOTO(out, rc = -EPROTO); @@ -901,8 +900,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, memset(&old_hdl, 0, sizeof(old_hdl)); if (!memcmp(&old_hdl, lustre_msg_get_handle(request->rq_repmsg), sizeof(old_hdl))) { - LCONSOLE_WARN("Reconnect to %s (at @%s) failed due " - "bad handle "LPX64"\n", + LCONSOLE_WARN("Reconnect to %s (at @%s) failed due bad handle %#llx\n", obd2cli_tgt(imp->imp_obd), imp->imp_connection->c_remote_uuid.uuid, imp->imp_dlm_handle.cookie); @@ -923,9 +921,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, * participate since we can reestablish all of our state * with server again */ if ((MSG_CONNECT_RECOVERING & msg_flags)) { - CDEBUG(level,"%s@%s changed server handle from " - LPX64" to "LPX64 - " but is still in recovery\n", + CDEBUG(level,"%s@%s changed server handle from %#llx to %#llx but is still in recovery\n", obd2cli_tgt(imp->imp_obd), imp->imp_connection->c_remote_uuid.uuid, imp->imp_remote_handle.cookie, @@ -933,8 +929,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, request->rq_repmsg)->cookie); } else { LCONSOLE_WARN("Evicted from %s (at %s) " - "after server handle changed from " - LPX64" to "LPX64"\n", + "after server handle changed from %#llx to %#llx\n", obd2cli_tgt(imp->imp_obd), imp->imp_connection-> \ c_remote_uuid.uuid, @@ -1117,9 +1112,8 @@ finish: * disable lru_resize, etc. */ if (old_connect_flags != exp_connect_flags(exp) || aa->pcaa_initial_connect) { - CDEBUG(D_HA, "%s: Resetting ns_connect_flags to server " - "flags: "LPX64"\n", imp->imp_obd->obd_name, - ocd->ocd_connect_flags); + CDEBUG(D_HA, "%s: Resetting ns_connect_flags to server flags: %#llx\n", + imp->imp_obd->obd_name, ocd->ocd_connect_flags); imp->imp_obd->obd_namespace->ns_connect_flags = ocd->ocd_connect_flags; imp->imp_obd->obd_namespace->ns_orig_connect_flags = diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index b4c696e715f2..89fc7f77b498 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -225,7 +225,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req) spin_unlock(&desc->bd_lock); CDEBUG(D_NET, "Setup %u bulk %s buffers: %u pages %u bytes, " - "xid x"LPX64"-"LPX64", portal %u\n", desc->bd_md_count, + "xid x%#llx-%#llx, portal %u\n", desc->bd_md_count, desc->bd_type == BULK_GET_SOURCE ? "get-source" : "put-sink", desc->bd_iov_count, desc->bd_nob, desc->bd_last_xid, req->rq_xid, desc->bd_portal); diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index 0bd0af2dace2..ac562932ccdf 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -2305,7 +2305,7 @@ void dump_obdo(struct obdo *oa) if (valid & OBD_MD_FLID) CDEBUG(D_RPCTRACE, "obdo: id = "DOSTID"\n", POSTID(&oa->o_oi)); if (valid & OBD_MD_FLFID) - CDEBUG(D_RPCTRACE, "obdo: o_parent_seq = "LPX64"\n", + CDEBUG(D_RPCTRACE, "obdo: o_parent_seq = %#llx\n", oa->o_parent_seq); if (valid & OBD_MD_FLSIZE) CDEBUG(D_RPCTRACE, "obdo: o_size = %lld\n", oa->o_size); -- cgit From 0918cf03c5bff35b57c255c773ae6af33a0bbf1c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 20:32:03 -0700 Subject: staging: lustre: remove kp30.h It's empty, so remove it and move the #include lines into the one file that used to include this header. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../lustre/include/linux/libcfs/libcfs_private.h | 1 - .../lustre/include/linux/libcfs/linux/kp30.h | 71 ---------------------- .../lustre/include/linux/libcfs/linux/libcfs.h | 24 +++++++- 3 files changed, 23 insertions(+), 73 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/linux/kp30.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h index de64f1dc790c..82a269cee6dd 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h @@ -451,7 +451,6 @@ int cfs_match_nid(lnet_nid_t nid, struct list_head *list); /* -------------------------------------------------------------------- * Light-weight trace * Support for temporary event tracing with minimal Heisenberg effect. - * All stuff about lwt are put in arch/kp30.h * -------------------------------------------------------------------- */ struct libcfs_device_userstate diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h b/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h deleted file mode 100644 index 88cce4cc049a..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/kp30.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LIBCFS_LINUX_KP30_H__ -#define __LIBCFS_LINUX_KP30_H__ - -#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 "portals_compat25.h" - -#endif diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index 6da787175d3e..ccc55fc41a9e 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -43,29 +43,51 @@ #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 #include +#include +#include #include +#include #include #include +#include #include #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" #include "portals_compat25.h" -#include "kp30.h" #define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) -- cgit From 15191cac20909266b4639c61ecf4fe13c49593f3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 20:37:56 -0700 Subject: staging: lustre: remove ALLOC_ATOMIC_TRY Come on, is it so hard to type "GFP_ATOMIC"? Look, it's less characters!!! Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h | 6 ------ drivers/staging/lustre/lustre/ptlrpc/events.c | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h index 526c77c4dd84..0f2fd79e5ec8 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-mem.h @@ -72,12 +72,6 @@ #define NUM_CACHEPAGES totalram_pages #endif -/* - * In Linux there is no way to determine whether current execution context is - * blockable. - */ -#define ALLOC_ATOMIC_TRY GFP_ATOMIC - #define DECL_MMSPACE mm_segment_t __oldfs #define MMSPACE_OPEN \ do { __oldfs = get_fs(); set_fs(get_ds()); } while (0) diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index f1a56930c006..c3ec21d5d29f 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -310,7 +310,7 @@ void request_in_callback(lnet_event_t *ev) /* We moaned above already... */ return; } - req = ptlrpc_request_cache_alloc(ALLOC_ATOMIC_TRY); + req = ptlrpc_request_cache_alloc(GFP_ATOMIC); if (req == NULL) { CERROR("Can't allocate incoming request descriptor: " "Dropping %s RPC from %s\n", -- cgit From 06bf61b2a3c83fc91aeb607563983e22edb7b24f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 20:56:47 -0700 Subject: staging: lustre: don't use custom typedef for an inode It's 'struct inode' so just use that. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lprocfs_status.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index d8d6728738e7..a52565e8a890 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -662,8 +662,8 @@ unsigned long lprocfs_oh_sum(struct obd_histogram *oh); void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx, struct lprocfs_counter *cnt); -extern int lprocfs_single_release(cfs_inode_t *, struct file *); -extern int lprocfs_seq_release(cfs_inode_t *, struct file *); +extern int lprocfs_single_release(struct inode *, struct file *); +extern int lprocfs_seq_release(struct inode *, struct file *); /* You must use these macros when you want to refer to * the import in a client obd_device for a lprocfs entry */ @@ -684,7 +684,7 @@ extern int lprocfs_seq_release(cfs_inode_t *, struct file *); a read-write proc entry, and then call LPROC_SEQ_SEQ instead. Finally, call lprocfs_obd_seq_create(obd, filename, 0444, &name#_fops, data); */ #define __LPROC_SEQ_FOPS(name, custom_seq_write) \ -static int name##_single_open(cfs_inode_t *inode, struct file *file) \ +static int name##_single_open(struct inode *inode, struct file *file) \ { \ return single_open(file, name##_seq_show, PDE_DATA(inode)); \ } \ @@ -727,7 +727,7 @@ static struct file_operations name##_fops = { \ { \ return lprocfs_wr_##type(file, buffer, count, off); \ } \ - static int name##_##type##_open(cfs_inode_t *inode, struct file *file) \ + static int name##_##type##_open(struct inode *inode, struct file *file) \ { \ return single_open(file, NULL, PDE_DATA(inode)); \ } \ -- cgit From f267cdb464bcab7be965fa2a513675d9ad1e90f6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 21:13:25 -0700 Subject: staging: lustre: use CONFIG_PROC_FS Don't rely on a "custom" LPROCFS define, it's not needed, just check for the real thing. This will let us delete a whole .h file that is not being used for anything other than one #define. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/fid/fid_internal.h | 4 ++-- drivers/staging/lustre/lustre/fid/fid_request.c | 8 ++++---- drivers/staging/lustre/lustre/fld/fld_internal.h | 2 +- drivers/staging/lustre/lustre/fld/fld_request.c | 2 +- drivers/staging/lustre/lustre/include/dt_object.h | 4 ++-- drivers/staging/lustre/lustre/include/lprocfs_status.h | 7 +++---- drivers/staging/lustre/lustre/include/lustre_dlm.h | 2 +- drivers/staging/lustre/lustre/include/lustre_net.h | 2 +- drivers/staging/lustre/lustre/include/lustre_sec.h | 2 +- drivers/staging/lustre/lustre/include/obd_class.h | 4 ++-- drivers/staging/lustre/lustre/include/obd_support.h | 2 +- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 6 +++--- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 6 +++--- drivers/staging/lustre/lustre/llite/llite_internal.h | 2 +- drivers/staging/lustre/lustre/lmv/lmv_internal.h | 2 +- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 2 +- drivers/staging/lustre/lustre/lov/lov_internal.h | 2 +- drivers/staging/lustre/lustre/lov/lov_obd.c | 2 +- drivers/staging/lustre/lustre/lov/lov_pool.c | 6 +++--- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 4 ++-- drivers/staging/lustre/lustre/mdc/mdc_internal.h | 2 +- drivers/staging/lustre/lustre/mgc/mgc_internal.h | 4 ++-- drivers/staging/lustre/lustre/mgc/mgc_request.c | 2 +- drivers/staging/lustre/lustre/obdclass/class_obd.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/dt_object.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/linux/linux-module.c | 4 ++-- drivers/staging/lustre/lustre/obdclass/llog_test.c | 2 +- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 2 +- drivers/staging/lustre/lustre/obdclass/lu_object.c | 2 +- drivers/staging/lustre/lustre/obdecho/lproc_echo.c | 4 ++-- drivers/staging/lustre/lustre/osc/osc_internal.h | 2 +- drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 4 ++-- drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h | 6 +++--- 33 files changed, 56 insertions(+), 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/fid/fid_internal.h b/drivers/staging/lustre/lustre/fid/fid_internal.h index 6049e3ef4d8a..eb607c52ef3b 100644 --- a/drivers/staging/lustre/lustre/fid/fid_internal.h +++ b/drivers/staging/lustre/lustre/fid/fid_internal.h @@ -47,9 +47,9 @@ int seq_client_alloc_super(struct lu_client_seq *seq, const struct lu_env *env); -# ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern struct lprocfs_vars seq_client_proc_list[]; -# endif +#endif extern struct proc_dir_entry *seq_type_proc_dir; diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index 9e31fe55c750..992d07591b08 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -400,18 +400,18 @@ EXPORT_SYMBOL(seq_client_flush); static void seq_client_proc_fini(struct lu_client_seq *seq) { -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) if (seq->lcs_proc_dir) { if (!IS_ERR(seq->lcs_proc_dir)) lprocfs_remove(&seq->lcs_proc_dir); seq->lcs_proc_dir = NULL; } -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ } static int seq_client_proc_init(struct lu_client_seq *seq) { -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int rc; seq->lcs_proc_dir = lprocfs_register(seq->lcs_name, @@ -439,7 +439,7 @@ out_cleanup: seq_client_proc_fini(seq); return rc; -#else /* LPROCFS */ +#else /* CONFIG_PROC_FS */ return 0; #endif } diff --git a/drivers/staging/lustre/lustre/fld/fld_internal.h b/drivers/staging/lustre/lustre/fld/fld_internal.h index 54fb8ecff8d6..5da0c1da0d39 100644 --- a/drivers/staging/lustre/lustre/fld/fld_internal.h +++ b/drivers/staging/lustre/lustre/fld/fld_internal.h @@ -142,7 +142,7 @@ extern struct lu_fld_hash fld_hash[]; int fld_client_rpc(struct obd_export *exp, struct lu_seq_range *range, __u32 fld_op); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern struct lprocfs_vars fld_client_proc_list[]; #endif diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 8dd8884587e3..4efded9485f8 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -273,7 +273,7 @@ EXPORT_SYMBOL(fld_client_del_target); struct proc_dir_entry *fld_type_proc_dir = NULL; -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) static int fld_client_proc_init(struct lu_client_fld *fld) { int rc; diff --git a/drivers/staging/lustre/lustre/include/dt_object.h b/drivers/staging/lustre/lustre/include/dt_object.h index 901f7f5348c5..212ebaea8555 100644 --- a/drivers/staging/lustre/lustre/include/dt_object.h +++ b/drivers/staging/lustre/lustre/include/dt_object.h @@ -1481,7 +1481,7 @@ static inline struct dt_thread_info *dt_info(const struct lu_env *env) int dt_global_init(void); void dt_global_fini(void); -# ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int lprocfs_dt_rd_blksize(char *page, char **start, off_t off, int count, int *eof, void *data); int lprocfs_dt_rd_kbytestotal(char *page, char **start, off_t off, @@ -1494,6 +1494,6 @@ int lprocfs_dt_rd_filestotal(char *page, char **start, off_t off, int count, int *eof, void *data); int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off, int count, int *eof, void *data); -# endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ #endif /* __LUSTRE_DT_OBJECT_H */ diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index a52565e8a890..1f235f41e828 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -44,7 +44,6 @@ #include "linux/lprocfs_status.h" #include "lustre/lustre_idl.h" -#include "../../include/linux/libcfs/params_tree.h" struct lprocfs_vars { const char *name; @@ -375,7 +374,7 @@ extern int lprocfs_write_frac_helper(const char *buffer, unsigned long count, int *val, int mult); extern int lprocfs_read_frac_helper(char *buffer, unsigned long count, long val, int mult); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern int lprocfs_stats_alloc_one(struct lprocfs_stats *stats, unsigned int cpuid); @@ -806,7 +805,7 @@ extern int lprocfs_quota_wr_qs_factor(struct file *file, const char *buffer, unsigned long count, void *data); #else -/* LPROCFS is not defined */ +/* CONFIG_PROC_FS is not defined */ #define proc_lustre_root NULL @@ -1000,6 +999,6 @@ __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, /* lproc_ptlrpc.c */ #define target_print_req NULL -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ #endif /* LPROCFS_SNMP_H */ diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index 7908450a54c9..30b1812f4bf6 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -1285,7 +1285,7 @@ void ldlm_namespace_register(struct ldlm_namespace *ns, ldlm_side_t client); void ldlm_namespace_unregister(struct ldlm_namespace *ns, ldlm_side_t client); void ldlm_namespace_get(struct ldlm_namespace *ns); void ldlm_namespace_put(struct ldlm_namespace *ns); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int ldlm_proc_setup(void); void ldlm_proc_cleanup(void); #else diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index 229fdac5ebd4..d6af2ca3acdb 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -3229,7 +3229,7 @@ void ptlrpcd_decref(void); * @{ */ const char* ll_opcode2str(__u32 opcode); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void ptlrpc_lprocfs_register_obd(struct obd_device *obd); void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd); void ptlrpc_lprocfs_brw(struct ptlrpc_request *req, int bytes); diff --git a/drivers/staging/lustre/lustre/include/lustre_sec.h b/drivers/staging/lustre/lustre/include/lustre_sec.h index 94c2ab98f2cc..9a21e88da78a 100644 --- a/drivers/staging/lustre/lustre/include/lustre_sec.h +++ b/drivers/staging/lustre/lustre/include/lustre_sec.h @@ -1064,7 +1064,7 @@ const char * sec2target_str(struct ptlrpc_sec *sec); /* * lprocfs */ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) struct proc_dir_entry; extern struct proc_dir_entry *sptlrpc_proc_root; int sptlrpc_lprocfs_cliobd_attach(struct obd_device *dev); diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index bb5c639ceb7f..1d401c9e5e8c 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -141,7 +141,7 @@ int class_add_conn(struct obd_device *obd, struct lustre_cfg *lcfg); int class_add_uuid(const char *uuid, __u64 nid); /*obdecho*/ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars); #else static inline void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) @@ -347,7 +347,7 @@ do { \ } while (0) -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) #define OBD_COUNTER_OFFSET(op) \ ((offsetof(struct obd_ops, o_ ## op) - \ offsetof(struct obd_ops, o_iocontrol)) \ diff --git a/drivers/staging/lustre/lustre/include/obd_support.h b/drivers/staging/lustre/lustre/include/obd_support.h index 72e3eab77c8d..92c89925ff67 100644 --- a/drivers/staging/lustre/lustre/include/obd_support.h +++ b/drivers/staging/lustre/lustre/include/obd_support.h @@ -508,7 +508,7 @@ extern atomic_t libcfs_kmemory; extern void obd_update_maxusage(void); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) #define obd_memory_add(size) \ lprocfs_counter_add(obd_memory, OBD_MEMORY_STAT, (long)(size)) #define obd_memory_sub(size) \ diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 7623c656f1cc..db36b3f46e49 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -636,7 +636,7 @@ int ldlm_pool_setup(struct ldlm_pool *pl, int limit) } EXPORT_SYMBOL(ldlm_pool_setup); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused) { int granted, grant_rate, cancel_rate, grant_step; @@ -821,14 +821,14 @@ static void ldlm_pool_proc_fini(struct ldlm_pool *pl) pl->pl_proc_dir = NULL; } } -#else /* !LPROCFS */ +#else /* !CONFIG_PROC_FS */ static int ldlm_pool_proc_init(struct ldlm_pool *pl) { return 0; } static void ldlm_pool_proc_fini(struct ldlm_pool *pl) {} -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ int ldlm_pool_init(struct ldlm_pool *pl, struct ldlm_namespace *ns, int idx, ldlm_side_t client) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index ff40707e12ae..91d028b28c2c 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -71,7 +71,7 @@ extern unsigned int ldlm_cancel_unused_locks_before_replay; * DDOS. */ unsigned int ldlm_dump_granted_max = 256; -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) static ssize_t lprocfs_wr_dump_ns(struct file *file, const char *buffer, size_t count, loff_t *off) { @@ -382,12 +382,12 @@ int ldlm_namespace_proc_register(struct ldlm_namespace *ns) return 0; } #undef MAX_STRING_SIZE -#else /* LPROCFS */ +#else /* CONFIG_PROC_FS */ #define ldlm_namespace_proc_unregister(ns) ({;}) #define ldlm_namespace_proc_register(ns) ({0;}) -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ static unsigned ldlm_res_hop_hash(struct cfs_hash *hs, const void *key, unsigned mask) diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index faf79408e7b3..634ffa645e06 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -670,7 +670,7 @@ void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar); struct ll_ra_read *ll_ra_read_get(struct file *f); /* llite/lproc_llite.c */ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int lprocfs_register_mountpoint(struct proc_dir_entry *parent, struct super_block *sb, char *osc, char *mdc); void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi); diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h b/drivers/staging/lustre/lustre/lmv/lmv_internal.h index f1edcaf702ba..eb18a5900e13 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h +++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h @@ -146,7 +146,7 @@ struct lmv_tgt_desc *lmv_locate_mds(struct lmv_obd *lmv, struct md_op_data *op_data, struct lu_fid *fid); /* lproc_lmv.c */ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars); #else static inline void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars) diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index bb3e8c7c0aa6..a66b3e000d57 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -1339,7 +1339,7 @@ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg) lprocfs_lmv_init_vars(&lvars); lprocfs_obd_setup(obd, lvars.obd_vars); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) { rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd", 0444, &lmv_proc_target_fops, obd); diff --git a/drivers/staging/lustre/lustre/lov/lov_internal.h b/drivers/staging/lustre/lustre/lov/lov_internal.h index 44a097baa8c9..017961a5cc3e 100644 --- a/drivers/staging/lustre/lustre/lov/lov_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_internal.h @@ -310,7 +310,7 @@ void dump_lsm(unsigned int level, const struct lov_stripe_md *lsm); int lovea_destroy_object(struct lov_obd *lov, struct lov_stripe_md *lsm, struct obdo *oa, void *data); /* lproc_lov.c */ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern const struct file_operations lov_proc_target_fops; void lprocfs_lov_init_vars(struct lprocfs_static_vars *lvars); #else diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 065561d29661..814dd49f332d 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -820,7 +820,7 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg) lprocfs_lov_init_vars(&lvars); lprocfs_obd_setup(obd, lvars.obd_vars); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) { int rc1; diff --git a/drivers/staging/lustre/lustre/lov/lov_pool.c b/drivers/staging/lustre/lustre/lov/lov_pool.c index 363fd6bd6ca6..91b3509a8083 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pool.c +++ b/drivers/staging/lustre/lustre/lov/lov_pool.c @@ -152,7 +152,7 @@ cfs_hash_ops_t pool_hash_operations = { }; -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) /* ifdef needed for liblustre support */ /* * pool /proc seq_file methods @@ -294,7 +294,7 @@ static struct file_operations pool_proc_operations = { .llseek = seq_lseek, .release = seq_release, }; -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ void lov_dump_pool(int level, struct pool_desc *pool) { @@ -452,7 +452,7 @@ int lov_pool_new(struct obd_device *obd, char *poolname) INIT_HLIST_NODE(&new_pool->pool_hash); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) /* we need this assert seq_file is not implemented for liblustre */ /* get ref for /proc file */ lov_pool_getref(new_pool); diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c index 191a70a9e665..eea0b2c94ba9 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c @@ -244,7 +244,7 @@ struct file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct dentry *de, } EXPORT_SYMBOL(l_dentry_open); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) __s64 lprocfs_read_helper(struct lprocfs_counter *lc, struct lprocfs_counter_header *header, enum lprocfs_stats_flags flags, @@ -286,7 +286,7 @@ __s64 lprocfs_read_helper(struct lprocfs_counter *lc, return ret; } EXPORT_SYMBOL(lprocfs_read_helper); -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS*/ MODULE_AUTHOR("Sun Microsystems, Inc. "); MODULE_DESCRIPTION("Lustre VFS Filesystem Helper v0.1"); diff --git a/drivers/staging/lustre/lustre/mdc/mdc_internal.h b/drivers/staging/lustre/lustre/mdc/mdc_internal.h index 8a7ec6d8b137..e8235559e27f 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_internal.h +++ b/drivers/staging/lustre/lustre/mdc/mdc_internal.h @@ -40,7 +40,7 @@ #include "../include/lustre_mdc.h" #include "../include/lustre_mds.h" -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars); #else static inline void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars) diff --git a/drivers/staging/lustre/lustre/mgc/mgc_internal.h b/drivers/staging/lustre/lustre/mgc/mgc_internal.h index b01d2dbb8623..a6f8b3ced2e7 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_internal.h +++ b/drivers/staging/lustre/lustre/mgc/mgc_internal.h @@ -44,7 +44,7 @@ #include "../include/lustre_log.h" #include "../include/lustre_export.h" -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void lprocfs_mgc_init_vars(struct lprocfs_static_vars *lvars); int lprocfs_mgc_rd_ir_state(struct seq_file *m, void *data); #else @@ -56,7 +56,7 @@ static inline int lprocfs_mgc_rd_ir_state(struct seq_file *m, void *data) { return 0; } -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ int mgc_process_log(struct obd_device *mgc, struct config_llog_data *cld); diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index fc638907af3a..46a7d767e828 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -445,7 +445,7 @@ static int config_log_end(char *logname, struct config_llog_instance *cfg) return rc; } -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int lprocfs_mgc_rd_ir_state(struct seq_file *m, void *data) { struct obd_device *obd = data; diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index df6a72fc24d0..8b19f3caa68f 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -483,7 +483,7 @@ int obd_init_checks(void) } extern spinlock_t obd_types_lock; -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) extern int class_procfs_init(void); extern int class_procfs_clean(void); #else @@ -594,7 +594,7 @@ void obd_update_maxusage(void) } EXPORT_SYMBOL(obd_update_maxusage); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) __u64 obd_memory_max(void) { __u64 ret; diff --git a/drivers/staging/lustre/lustre/obdclass/dt_object.c b/drivers/staging/lustre/lustre/obdclass/dt_object.c index faea1e1e29ef..130b8dd0b418 100644 --- a/drivers/staging/lustre/lustre/obdclass/dt_object.c +++ b/drivers/staging/lustre/lustre/obdclass/dt_object.c @@ -929,7 +929,7 @@ out: } EXPORT_SYMBOL(dt_index_read); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int lprocfs_dt_rd_blksize(char *page, char **start, off_t off, int count, int *eof, void *data) @@ -1046,4 +1046,4 @@ int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off, } EXPORT_SYMBOL(lprocfs_dt_rd_filesfree); -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c index 4b538279e0f9..1de1c650cf22 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c @@ -212,7 +212,7 @@ struct miscdevice obd_psdev = { }; -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int obd_proc_version_seq_show(struct seq_file *m, void *v) { return seq_printf(m, "lustre: %s\nkernel: %s\nbuild: %s\n", @@ -435,4 +435,4 @@ int class_procfs_clean(void) } return 0; } -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/staging/lustre/lustre/obdclass/llog_test.c b/drivers/staging/lustre/lustre/obdclass/llog_test.c index a433353c40df..6791d0263b11 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_test.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_test.c @@ -939,7 +939,7 @@ cleanup_ctxt: return rc; } -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) static struct lprocfs_vars lprocfs_llog_test_obd_vars[] = { {0} }; static struct lprocfs_vars lprocfs_llog_test_module_vars[] = { {0} }; static void lprocfs_llog_test_init_vars(struct lprocfs_static_vars *lvars) diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 005bcbabc5be..8309d4ce6d60 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -220,7 +220,7 @@ int lprocfs_write_frac_helper(const char *buffer, unsigned long count, } EXPORT_SYMBOL(lprocfs_write_frac_helper); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) static int lprocfs_no_percpu_stats = 0; module_param(lprocfs_no_percpu_stats, int, 0644); diff --git a/drivers/staging/lustre/lustre/obdclass/lu_object.c b/drivers/staging/lustre/lustre/obdclass/lu_object.c index b126bb8657b3..2fc037cfb62f 100644 --- a/drivers/staging/lustre/lustre/obdclass/lu_object.c +++ b/drivers/staging/lustre/lustre/obdclass/lu_object.c @@ -1994,7 +1994,7 @@ void lu_global_fini(void) static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx) { -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) struct lprocfs_counter ret; lprocfs_stats_collect(stats, idx, &ret); diff --git a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c index ccd751fd8480..487c4f3be20f 100644 --- a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c +++ b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c @@ -36,7 +36,7 @@ #include "../include/lprocfs_status.h" #include "../include/obd_class.h" -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) LPROC_SEQ_FOPS_RO_TYPE(echo, uuid); static struct lprocfs_vars lprocfs_echo_obd_vars[] = { { "uuid", &echo_uuid_fops, NULL, 0 }, @@ -54,4 +54,4 @@ void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) lvars->module_vars = lprocfs_echo_module_vars; lvars->obd_vars = lprocfs_echo_obd_vars; } -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/staging/lustre/lustre/osc/osc_internal.h b/drivers/staging/lustre/lustre/osc/osc_internal.h index 0e08891cca3e..f67a70083621 100644 --- a/drivers/staging/lustre/lustre/osc/osc_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_internal.h @@ -136,7 +136,7 @@ extern spinlock_t osc_ast_guard; int osc_cleanup(struct obd_device *obd); int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int lproc_osc_attach_seqstat(struct obd_device *dev); void lprocfs_osc_init_vars(struct lprocfs_static_vars *lvars); #else diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index bbef708ce5cb..927921541851 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -180,7 +180,7 @@ const char* ll_eopcode2str(__u32 opcode) LASSERT(ll_eopcode_table[opcode].opcode == opcode); return ll_eopcode_table[opcode].opname; } -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir, char *name, struct proc_dir_entry **procroot_ret, struct lprocfs_stats **stats_ret) @@ -1339,4 +1339,4 @@ int lprocfs_wr_pinger_recov(struct file *file, const char *buffer, } EXPORT_SYMBOL(lprocfs_wr_pinger_recov); -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h index 7c9405530596..f7be007c88cb 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h @@ -76,7 +76,7 @@ void ptlrpc_initiate_recovery(struct obd_import *imp); int lustre_unpack_req_ptlrpc_body(struct ptlrpc_request *req, int offset); int lustre_unpack_rep_ptlrpc_body(struct ptlrpc_request *req, int offset); -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) void ptlrpc_lprocfs_register_service(struct proc_dir_entry *proc_entry, struct ptlrpc_service *svc); void ptlrpc_lprocfs_unregister_service(struct ptlrpc_service *svc); @@ -88,7 +88,7 @@ void ptlrpc_lprocfs_do_request_stat(struct ptlrpc_request *req, #define ptlrpc_lprocfs_unregister_service(params...) do {} while (0) #define ptlrpc_lprocfs_rpc_sent(params...) do {} while (0) #define ptlrpc_lprocfs_do_request_stat(params...) do {} while (0) -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ /* NRS */ @@ -263,7 +263,7 @@ void sptlrpc_enc_pool_fini(void); int sptlrpc_proc_enc_pool_seq_show(struct seq_file *m, void *v); /* sec_lproc.c */ -#ifdef LPROCFS +#if defined (CONFIG_PROC_FS) int sptlrpc_lproc_init(void); void sptlrpc_lproc_fini(void); #else -- cgit From ceeb4aef56508768da351c3c1bb0e607dc82a8cf Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 21:15:26 -0700 Subject: staging: lustre: delete params_tree.h It's not being used at all, so delete it. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/include/linux/libcfs/libcfs.h | 1 - .../lustre/include/linux/libcfs/params_tree.h | 164 --------------------- 2 files changed, 165 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/libcfs/params_tree.h (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 0d7feb0196cc..7d37bec918f3 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -167,7 +167,6 @@ void cfs_get_random_bytes(void *buf, int size); #include "libcfs_hash.h" #include "libcfs_heap.h" #include "libcfs_fail.h" -#include "params_tree.h" #include "libcfs_crypto.h" /* container_of depends on "likely" which is defined in libcfs_private.h */ diff --git a/drivers/staging/lustre/include/linux/libcfs/params_tree.h b/drivers/staging/lustre/include/linux/libcfs/params_tree.h deleted file mode 100644 index 7c8d7c7d391c..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/params_tree.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * 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 version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * API and structure definitions for params_tree. - * - * Author: LiuYing - */ -#ifndef __PARAMS_TREE_H__ -#define __PARAMS_TREE_H__ - -#include "libcfs.h" - -#undef LPROCFS -#if defined(CONFIG_PROC_FS) -# define LPROCFS -#endif - -#ifdef LPROCFS -typedef struct file cfs_param_file_t; -typedef struct inode cfs_inode_t; -typedef struct proc_inode cfs_proc_inode_t; -typedef struct seq_file cfs_seq_file_t; -typedef struct seq_operations cfs_seq_ops_t; -typedef struct file_operations cfs_param_file_ops_t; -typedef struct proc_dir_entry cfs_param_dentry_t; -typedef struct poll_table_struct cfs_poll_table_t; -#define CFS_PARAM_MODULE THIS_MODULE -#define cfs_file_private(file) (file->private_data) -#define cfs_dentry_data(dentry) (dentry->data) -#define cfs_proc_inode_pde(proc_inode) (proc_inode->pde) -#define cfs_proc_inode(proc_inode) (proc_inode->vfs_inode) -#define cfs_seq_read_common seq_read -#define cfs_seq_lseek_common seq_lseek -#define cfs_seq_private(seq) (seq->private) -#define cfs_seq_printf(seq, format, ...) seq_printf(seq, format, \ - ## __VA_ARGS__) -#define cfs_seq_release(inode, file) seq_release(inode, file) -#define cfs_seq_puts(seq, s) seq_puts(seq, s) -#define cfs_seq_putc(seq, s) seq_putc(seq, s) -#define cfs_seq_read(file, buf, count, ppos, rc) (rc = seq_read(file, buf, \ - count, ppos)) -#define cfs_seq_open(file, ops, rc) (rc = seq_open(file, ops)) - -#else /* !LPROCFS */ - -typedef struct cfs_params_file { - void *param_private; - loff_t param_pos; - unsigned int param_flags; -} cfs_param_file_t; - -typedef struct cfs_param_inode { - void *param_private; -} cfs_inode_t; - -typedef struct cfs_param_dentry { - void *param_data; -} cfs_param_dentry_t; - -typedef struct cfs_proc_inode { - cfs_param_dentry_t *param_pde; - cfs_inode_t param_inode; -} cfs_proc_inode_t; - -struct cfs_seq_operations; -typedef struct cfs_seq_file { - char *buf; - size_t size; - size_t from; - size_t count; - loff_t index; - loff_t version; - struct mutex lock; - struct cfs_seq_operations *op; - void *private; -} cfs_seq_file_t; - -typedef struct cfs_seq_operations { - void *(*start)(cfs_seq_file_t *m, loff_t *pos); - void (*stop)(cfs_seq_file_t *m, void *v); - void *(*next)(cfs_seq_file_t *m, void *v, loff_t *pos); - int (*show)(cfs_seq_file_t *m, void *v); -} cfs_seq_ops_t; - -typedef void *cfs_poll_table_t; - -typedef struct cfs_param_file_ops { - struct module *owner; - int (*open)(cfs_inode_t *, struct file *); - loff_t (*llseek)(struct file *, loff_t, int); - int (*release)(cfs_inode_t *, cfs_param_file_t *); - unsigned int (*poll)(struct file *, cfs_poll_table_t *); - ssize_t (*write)(struct file *, const char *, size_t, loff_t *); - ssize_t (*read)(struct file *, char *, size_t, loff_t *); -} cfs_param_file_ops_t; -typedef cfs_param_file_ops_t *cfs_lproc_filep_t; - -static inline cfs_proc_inode_t *FAKE_PROC_I(const cfs_inode_t *inode) -{ - return container_of(inode, cfs_proc_inode_t, param_inode); -} - -#define CFS_PARAM_MODULE NULL -#define cfs_file_private(file) (file->param_private) -#define cfs_dentry_data(dentry) (dentry->param_data) -#define cfs_proc_inode(proc_inode) (proc_inode->param_inode) -#define cfs_proc_inode_pde(proc_inode) (proc_inode->param_pde) -#define cfs_seq_read_common NULL -#define cfs_seq_lseek_common NULL -#define cfs_seq_private(seq) (seq->private) -#define cfs_seq_read(file, buf, count, ppos, rc) do {} while (0) -#define cfs_seq_open(file, ops, rc) \ -do { \ - cfs_seq_file_t *p = cfs_file_private(file); \ - if (!p) { \ - LIBCFS_ALLOC(p, sizeof(*p)); \ - if (!p) { \ - rc = -ENOMEM; \ - break; \ - } \ - cfs_file_private(file) = p; \ - } \ - memset(p, 0, sizeof(*p)); \ - p->op = ops; \ - rc = 0; \ -} while (0) - -#endif /* LPROCFS */ - -/* XXX: params_tree APIs */ - -#endif /* __PARAMS_TREE_H__ */ -- cgit From 1d3ade00c6d3279c1e078137a3bc2fab7c6d715a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 12 Jul 2014 21:26:09 -0700 Subject: staging: lustre: remove proc function wrappers ll_proc_dointvec and ll_proc_dolongvec didn't do anything except confuse things due to a lack of a filep variable in the functions they were used in. So remove them and just call the real proc functions. This enabled the code to be unwound a bit and a few "empty" proc handlers were removed and just passed directly to procfs instead. Cc: Andreas Dilger Cc: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../include/linux/libcfs/linux/portals_compat25.h | 6 ---- .../lustre/lustre/libcfs/linux/linux-proc.c | 14 ++++---- .../lustre/lustre/obdclass/linux/linux-sysctl.c | 42 ++++------------------ 3 files changed, 13 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h index 0728f20b499f..442d61be1c18 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h @@ -78,10 +78,4 @@ #define __cfs_fls __fls #endif -#define ll_proc_dointvec(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec(table, write, buffer, lenp, ppos); - -#define ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos) \ - proc_doulongvec_minmax(table, write, buffer, lenp, ppos); - #endif /* _PORTALS_COMPAT_H */ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index 0732ff4ca72f..13a9266acfa0 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -243,13 +243,13 @@ int proc_console_max_delay_cs(struct ctl_table *table, int write, if (!write) { /* read */ max_delay_cs = cfs_duration_sec(libcfs_console_max_delay * 100); - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); return rc; } /* write */ max_delay_cs = 0; - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) return rc; if (max_delay_cs <= 0) @@ -275,13 +275,13 @@ int proc_console_min_delay_cs(struct ctl_table *table, int write, if (!write) { /* read */ min_delay_cs = cfs_duration_sec(libcfs_console_min_delay * 100); - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); return rc; } /* write */ min_delay_cs = 0; - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) return rc; if (min_delay_cs <= 0) @@ -306,13 +306,13 @@ int proc_console_backoff(struct ctl_table *table, int write, if (!write) { /* read */ backoff= libcfs_console_backoff; - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); return rc; } /* write */ backoff = 0; - rc = ll_proc_dointvec(&dummy, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) return rc; if (backoff <= 0) @@ -337,7 +337,7 @@ int proc_fail_loc(struct ctl_table *table, int write, void __user *buffer, int rc; long old_fail_loc = cfs_fail_loc; - rc = ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos); + rc = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); if (old_fail_loc != cfs_fail_loc) wake_up(&cfs_race_waitq); return rc; diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index 5a36930e8fbb..a4cd46b182d9 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -84,7 +84,7 @@ int proc_set_timeout(struct ctl_table *table, int write, void __user *buffer, { int rc; - rc = ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); + rc = proc_dointvec(table, write, buffer, lenp, ppos); if (ldlm_timeout >= obd_timeout) ldlm_timeout = max(obd_timeout / 3, 1U); return rc; @@ -259,36 +259,6 @@ int proc_alloc_fail_rate(struct ctl_table *table, int write, return rc; } -int proc_at_min(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); -} - -int proc_at_max(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); -} - -int proc_at_extra(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); -} - -int proc_at_early_margin(struct ctl_table *table, int write, - void __user *buffer, size_t *lenp, loff_t *ppos) -{ - return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); -} - -int proc_at_history(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - return ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); -} - #ifdef CONFIG_SYSCTL static struct ctl_table obd_table[] = { { @@ -373,35 +343,35 @@ static struct ctl_table obd_table[] = { .data = &at_min, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_at_min + .proc_handler = &proc_dointvec, }, { .procname = "at_max", .data = &at_max, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_at_max + .proc_handler = &proc_dointvec, }, { .procname = "at_extra", .data = &at_extra, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_at_extra + .proc_handler = &proc_dointvec, }, { .procname = "at_early_margin", .data = &at_early_margin, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_at_early_margin + .proc_handler = &proc_dointvec, }, { .procname = "at_history", .data = &at_history, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_at_history + .proc_handler = &proc_dointvec, }, {} }; -- cgit From 90c5f2d1b8212dde11a3dcc9e87ba3593beeb3ac Mon Sep 17 00:00:00 2001 From: Chen Gang Date: Sun, 13 Jul 2014 12:44:00 +0100 Subject: staging:iio:adc:Kconfig: Let MXS_LRADC depend on HAS_IOMEM MXS_LRADC need HAS_IOMEM, so let it depend on HAS_IOMEM The related error (with allmodconfig under score): MODPOST 1365 modules ERROR: "devm_ioremap_resource" [drivers/staging/iio/adc/mxs-lradc.ko] undefined! Signed-off-by: Chen Gang Acked-by: Marek Vasut Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index 75d2d1bf93d1..d01c7076a342 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig @@ -87,7 +87,7 @@ config LPC32XX_ADC config MXS_LRADC tristate "Freescale i.MX23/i.MX28 LRADC" - depends on ARCH_MXS || COMPILE_TEST + depends on (ARCH_MXS || COMPILE_TEST) && HAS_IOMEM depends on INPUT select STMP_DEVICE select IIO_BUFFER -- cgit From 635c4efa17bcd43b2c71d5f95ab63e1d4f7ad3dd Mon Sep 17 00:00:00 2001 From: Jeremiah Mahler Date: Sat, 12 Jul 2014 18:26:39 -0700 Subject: staging: dgnc: DGNC_VERIFY_BOARD macro in do while block Enclose the body of the multi-statement DGNC_VERIFY_BOARD macro inside a do - while block as per Documentation/CodingStyle. Fixes 1 error found by checkpatch.pl. Cc: Lidza Louina Signed-off-by: Jeremiah Mahler Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_sysfs.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_sysfs.c b/drivers/staging/dgnc/dgnc_sysfs.c index 0f0e8fcb663f..3f321bb2b79d 100644 --- a/drivers/staging/dgnc/dgnc_sysfs.c +++ b/drivers/staging/dgnc/dgnc_sysfs.c @@ -150,15 +150,17 @@ void dgnc_remove_driver_sysfiles(struct pci_driver *dgnc_driver) } -#define DGNC_VERIFY_BOARD(p, bd) \ - if (!p) \ - return 0; \ - \ - bd = dev_get_drvdata(p); \ - if (!bd || bd->magic != DGNC_BOARD_MAGIC) \ - return 0; \ - if (bd->state != BOARD_READY) \ - return 0; \ +#define DGNC_VERIFY_BOARD(p, bd) \ + do { \ + if (!p) \ + return 0; \ + \ + bd = dev_get_drvdata(p); \ + if (!bd || bd->magic != DGNC_BOARD_MAGIC) \ + return 0; \ + if (bd->state != BOARD_READY) \ + return 0; \ + } while (0) -- cgit From 974fe27ceca9f8449275169dd2759b23cbfd6a06 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:01 +0200 Subject: staging: rtl8723au: Remove horrendous code obfuscation READ_AND_CONFIG*() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 82b1b8348898..388654d502d0 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -19,11 +19,6 @@ #include "odm_precomp.h" -#define READ_AND_CONFIG READ_AND_CONFIG_MP - -#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig##txt##ic(pDM_Odm)) -#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC##txt##ic(pDM_Odm)) - static u8 odm_QueryRxPwrPercentage(s8 AntPower) { if ((AntPower <= -100) || (AntPower >= 20)) @@ -436,12 +431,7 @@ int ODM_ConfigRFWithHeaderFile23a(struct dm_odm_t *pDM_Odm, ("===>ODM_ConfigRFWithHeaderFile23a\n")); if (pDM_Odm->SupportICType == ODM_RTL8723A) { if (eRFPath == RF_PATH_A) - READ_AND_CONFIG_MP(8723A, _RadioA_1T_); - - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - (" ===> ODM_ConfigRFWithHeaderFile23a() Radio_A:Rtl8723RadioA_1TArray\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - (" ===> ODM_ConfigRFWithHeaderFile23a() Radio_B:Rtl8723RadioB_1TArray\n")); + ODM_ReadAndConfig_RadioA_1T_8723A(pDM_Odm); } ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("ODM_ConfigRFWithHeaderFile23a: Radio No %x\n", eRFPath)); @@ -453,9 +443,9 @@ int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, { if (pDM_Odm->SupportICType == ODM_RTL8723A) { if (ConfigType == CONFIG_BB_PHY_REG) - READ_AND_CONFIG_MP(8723A, _PHY_REG_1T_); + ODM_ReadAndConfig_PHY_REG_1T_8723A(pDM_Odm); else if (ConfigType == CONFIG_BB_AGC_TAB) - READ_AND_CONFIG_MP(8723A, _AGC_TAB_1T_); + ODM_ReadAndConfig_AGC_TAB_1T_8723A(pDM_Odm); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n")); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, @@ -467,6 +457,6 @@ int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm) { if (pDM_Odm->SupportICType == ODM_RTL8723A) - READ_AND_CONFIG_MP(8723A, _MAC_REG_); + ODM_ReadAndConfig_MAC_REG_8723A(pDM_Odm); return _SUCCESS; } -- cgit From a8950425732317380ddbe27453c7a16e61ec20c6 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:02 +0200 Subject: staging: rtl8723au: Call to ODM_ConfigRFWithHeaderFile23a path is identical for RF_PATH_[AB] Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c index c30bd232bf62..6686a298b204 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c @@ -455,13 +455,6 @@ static int phy_RF6052_Config_ParaFile(struct rtw_adapter *Adapter) /*----Initialize RF fom connfiguration file----*/ switch (eRFPath) { case RF_PATH_A: - if (ODM_ConfigRFWithHeaderFile23a(&pHalData->odmpriv, - (enum RF_RADIO_PATH) - eRFPath, - (enum RF_RADIO_PATH) - eRFPath) == _FAIL) - rtStatus = _FAIL; - break; case RF_PATH_B: if (ODM_ConfigRFWithHeaderFile23a(&pHalData->odmpriv, (enum RF_RADIO_PATH) -- cgit From 6b435adbcb2e05e92684bcb1721e7377f91c4825 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:03 +0200 Subject: staging: rtl8723au: Eliminate wrapper ODM_ConfigRFWithHeaderFile23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 15 --------------- drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c | 6 ++---- drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c | 8 ++------ drivers/staging/rtl8723au/include/odm_HWConfig.h | 4 ---- 4 files changed, 4 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 388654d502d0..4fc0b06c5dbc 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -423,21 +423,6 @@ void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, u8 *pMacStatus, u8 MacID, } -int ODM_ConfigRFWithHeaderFile23a(struct dm_odm_t *pDM_Odm, - enum RF_RADIO_PATH Content, - enum RF_RADIO_PATH eRFPath) -{ - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===>ODM_ConfigRFWithHeaderFile23a\n")); - if (pDM_Odm->SupportICType == ODM_RTL8723A) { - if (eRFPath == RF_PATH_A) - ODM_ReadAndConfig_RadioA_1T_8723A(pDM_Odm); - } - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, - ("ODM_ConfigRFWithHeaderFile23a: Radio No %x\n", eRFPath)); - return _SUCCESS; -} - int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, enum odm_bb_config_type ConfigType) { diff --git a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c index d076e14f36b9..8f883d933174 100644 --- a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c +++ b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c @@ -54,8 +54,7 @@ void odm_ConfigRF_RadioA_8723A(struct dm_odm_t *pDM_Odm, odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_A, Addr|maskforPhySet); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===> ODM_ConfigRFWithHeaderFile23a: [RadioA] %08X %08X\n", - Addr, Data)); + ("===> %s: [RadioA] %08X %08X\n", __func__, Addr, Data)); } void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, @@ -69,8 +68,7 @@ void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_B, Addr|maskforPhySet); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===> ODM_ConfigRFWithHeaderFile23a: [RadioB] %08X %08X\n", - Addr, Data)); + ("===> %s: [RadioB] %08X %08X\n", __func__, Addr, Data)); } void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c index 6686a298b204..2dc0886e5f90 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c @@ -455,13 +455,9 @@ static int phy_RF6052_Config_ParaFile(struct rtw_adapter *Adapter) /*----Initialize RF fom connfiguration file----*/ switch (eRFPath) { case RF_PATH_A: + ODM_ReadAndConfig_RadioA_1T_8723A(&pHalData->odmpriv); + break; case RF_PATH_B: - if (ODM_ConfigRFWithHeaderFile23a(&pHalData->odmpriv, - (enum RF_RADIO_PATH) - eRFPath, - (enum RF_RADIO_PATH) - eRFPath) == _FAIL) - rtStatus = _FAIL; break; } diff --git a/drivers/staging/rtl8723au/include/odm_HWConfig.h b/drivers/staging/rtl8723au/include/odm_HWConfig.h index 6b98e05d0460..f8236cac9c10 100644 --- a/drivers/staging/rtl8723au/include/odm_HWConfig.h +++ b/drivers/staging/rtl8723au/include/odm_HWConfig.h @@ -160,10 +160,6 @@ void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, bool bPacketBeacon ); -int ODM_ConfigRFWithHeaderFile23a(struct dm_odm_t *pDM_Odm, - enum RF_RADIO_PATH Content, - enum RF_RADIO_PATH eRFPath); - int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, enum odm_bb_config_type ConfigType); -- cgit From d10ef6371eab6642e9925c43200a7fea6fca04b8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:04 +0200 Subject: staging: rtl8723au: Remove zero value calculation added to address Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c index 8f883d933174..70b7168aca7f 100644 --- a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c +++ b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c @@ -43,30 +43,16 @@ odm_ConfigRFReg_8723A( } } -void odm_ConfigRF_RadioA_8723A(struct dm_odm_t *pDM_Odm, - u32 Addr, - u32 Data - ) +void odm_ConfigRF_RadioA_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data) { - u32 content = 0x1000; /* RF_Content: radioa_txt */ - u32 maskforPhySet = (u32)(content&0xE000); - - odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_A, - Addr|maskforPhySet); + odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_A, Addr); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> %s: [RadioA] %08X %08X\n", __func__, Addr, Data)); } -void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, - u32 Addr, - u32 Data - ) +void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data) { - u32 content = 0x1001; /* RF_Content: radiob_txt */ - u32 maskforPhySet = (u32)(content&0xE000); - - odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_B, - Addr|maskforPhySet); + odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_B, Addr); ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===> %s: [RadioB] %08X %08X\n", __func__, Addr, Data)); } -- cgit From 863b61948e4057f418ee081591724ed112f14cdf Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:05 +0200 Subject: staging: rtl8723au: Remove pointless wrappers for calling odm_ConfigRFReg_8723A() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c | 5 +++-- drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c | 14 -------------- drivers/staging/rtl8723au/include/odm_RegConfig8723A.h | 4 ---- 3 files changed, 3 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c b/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c index 0f2ae05c8eae..00480f5fcdab 100644 --- a/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c +++ b/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c @@ -230,7 +230,7 @@ void ODM_ReadAndConfig_RadioA_1T_8723A(struct dm_odm_t *pDM_Odm) /* This (offset, data) pair meets the condition. */ if (v1 < 0xCDCDCDCD) { - odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2); + odm_ConfigRFReg_8723A(pDM_Odm, v1, v2, RF_PATH_A, v1); continue; } else { if (!CheckCondition(Array[i], hex)) { @@ -247,7 +247,8 @@ void ODM_ReadAndConfig_RadioA_1T_8723A(struct dm_odm_t *pDM_Odm) while (v2 != 0xDEAD && v2 != 0xCDEF && v2 != 0xCDCD && i < ArrayLen - 2) { - odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2); + odm_ConfigRFReg_8723A(pDM_Odm, v1, v2, + RF_PATH_A, v1); READ_NEXT_PAIR(v1, v2, i); } diff --git a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c index 70b7168aca7f..bd86b6c526ee 100644 --- a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c +++ b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c @@ -43,20 +43,6 @@ odm_ConfigRFReg_8723A( } } -void odm_ConfigRF_RadioA_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data) -{ - odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_A, Addr); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===> %s: [RadioA] %08X %08X\n", __func__, Addr, Data)); -} - -void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data) -{ - odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, RF_PATH_B, Addr); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===> %s: [RadioB] %08X %08X\n", __func__, Addr, Data)); -} - void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data diff --git a/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h b/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h index 4ea579b2e8bd..4117830b3a8a 100644 --- a/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h +++ b/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h @@ -18,10 +18,6 @@ void odm_ConfigRFReg_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data, enum RF_RADIO_PATH RF_PATH, u32 RegAddr); -void odm_ConfigRF_RadioA_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data); - -void odm_ConfigRF_RadioB_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data); - void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data); void odm_ConfigBB_AGC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, -- cgit From 7bafabf2d939e72b56591939883a31c31b93a076 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:06 +0200 Subject: staging: rtl8723au: Remove unused ODM_ReadAndConfig_PHY_REG_PG_8723A() and related code+data Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c | 160 --------------------- drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c | 28 ---- .../staging/rtl8723au/include/HalHWImg8723A_BB.h | 6 - .../staging/rtl8723au/include/odm_RegConfig8723A.h | 2 - 4 files changed, 196 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c b/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c index 294e6a6c60db..9d4f6bed4269 100644 --- a/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c +++ b/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c @@ -564,163 +564,3 @@ void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm) } } } - -/****************************************************************************** -* PHY_REG_PG.TXT -******************************************************************************/ - -static u32 Array_PHY_REG_PG_8723A[] = { - 0xE00, 0xFFFFFFFF, 0x0A0C0C0C, - 0xE04, 0xFFFFFFFF, 0x02040608, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x0A0C0D0E, - 0xE14, 0xFFFFFFFF, 0x02040608, - 0xE18, 0xFFFFFFFF, 0x0A0C0D0E, - 0xE1C, 0xFFFFFFFF, 0x02040608, - 0x830, 0xFFFFFFFF, 0x0A0C0C0C, - 0x834, 0xFFFFFFFF, 0x02040608, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x0A0C0D0E, - 0x848, 0xFFFFFFFF, 0x02040608, - 0x84C, 0xFFFFFFFF, 0x0A0C0D0E, - 0x868, 0xFFFFFFFF, 0x02040608, - 0xE00, 0xFFFFFFFF, 0x00000000, - 0xE04, 0xFFFFFFFF, 0x00000000, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x00000000, - 0xE14, 0xFFFFFFFF, 0x00000000, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x00000000, - 0x834, 0xFFFFFFFF, 0x00000000, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x00000000, - 0x848, 0xFFFFFFFF, 0x00000000, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, - 0xE00, 0xFFFFFFFF, 0x04040404, - 0xE04, 0xFFFFFFFF, 0x00020204, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x06060606, - 0xE14, 0xFFFFFFFF, 0x00020406, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x04040404, - 0x834, 0xFFFFFFFF, 0x00020204, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x06060606, - 0x848, 0xFFFFFFFF, 0x00020406, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, - 0xE00, 0xFFFFFFFF, 0x00000000, - 0xE04, 0xFFFFFFFF, 0x00000000, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x00000000, - 0xE14, 0xFFFFFFFF, 0x00000000, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x00000000, - 0x834, 0xFFFFFFFF, 0x00000000, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x00000000, - 0x848, 0xFFFFFFFF, 0x00000000, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, - 0xE00, 0xFFFFFFFF, 0x00000000, - 0xE04, 0xFFFFFFFF, 0x00000000, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x00000000, - 0xE14, 0xFFFFFFFF, 0x00000000, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x00000000, - 0x834, 0xFFFFFFFF, 0x00000000, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x00000000, - 0x848, 0xFFFFFFFF, 0x00000000, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, - 0xE00, 0xFFFFFFFF, 0x04040404, - 0xE04, 0xFFFFFFFF, 0x00020204, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x00000000, - 0xE14, 0xFFFFFFFF, 0x00000000, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x04040404, - 0x834, 0xFFFFFFFF, 0x00020204, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x00000000, - 0x848, 0xFFFFFFFF, 0x00000000, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, - 0xE00, 0xFFFFFFFF, 0x00000000, - 0xE04, 0xFFFFFFFF, 0x00000000, - 0xE08, 0x0000FF00, 0x00000000, - 0x86C, 0xFFFFFF00, 0x00000000, - 0xE10, 0xFFFFFFFF, 0x00000000, - 0xE14, 0xFFFFFFFF, 0x00000000, - 0xE18, 0xFFFFFFFF, 0x00000000, - 0xE1C, 0xFFFFFFFF, 0x00000000, - 0x830, 0xFFFFFFFF, 0x00000000, - 0x834, 0xFFFFFFFF, 0x00000000, - 0x838, 0xFFFFFF00, 0x00000000, - 0x86C, 0x000000FF, 0x00000000, - 0x83C, 0xFFFFFFFF, 0x00000000, - 0x848, 0xFFFFFFFF, 0x00000000, - 0x84C, 0xFFFFFFFF, 0x00000000, - 0x868, 0xFFFFFFFF, 0x00000000, -}; - -void ODM_ReadAndConfig_PHY_REG_PG_8723A(struct dm_odm_t *pDM_Odm) -{ - u32 hex = 0; - u32 i = 0; - u8 platform = 0x04; - u8 interfaceValue = pDM_Odm->SupportInterface; - u8 board = pDM_Odm->BoardType; - u32 ArrayLen = sizeof(Array_PHY_REG_PG_8723A)/sizeof(u32); - u32 *Array = Array_PHY_REG_PG_8723A; - - hex += board; - hex += interfaceValue << 8; - hex += platform << 16; - hex += 0xFF000000; - for (i = 0; i < ArrayLen; i += 3) { - u32 v1 = Array[i]; - u32 v2 = Array[i+1]; - u32 v3 = Array[i+2]; - - /* this line is a line of pure_body */ - if (v1 < 0xCDCDCDCD) { - odm_ConfigBB_PHY_REG_PG_8723A(pDM_Odm, v1, v2, v3); - continue; - } else { /* this line is the start of branch */ - if (!CheckCondition(Array[i], hex)) { - /* don't need the hw_body */ - i += 2; /* skip the pair of expression */ - v1 = Array[i]; - v2 = Array[i+1]; - v3 = Array[i+2]; - while (v2 != 0xDEAD) { - i += 3; - v1 = Array[i]; - v2 = Array[i+1]; - v3 = Array[i+1]; - } - } - } - } -} diff --git a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c index bd86b6c526ee..88e0126e855a 100644 --- a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c +++ b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c @@ -71,34 +71,6 @@ odm_ConfigBB_AGC_8723A( Addr, Data)); } -void -odm_ConfigBB_PHY_REG_PG_8723A( - struct dm_odm_t *pDM_Odm, - u32 Addr, - u32 Bitmask, - u32 Data - ) -{ - if (Addr == 0xfe) - msleep(50); - else if (Addr == 0xfd) - mdelay(5); - else if (Addr == 0xfc) - mdelay(1); - else if (Addr == 0xfb) - udelay(50); - else if (Addr == 0xfa) - udelay(5); - else if (Addr == 0xf9) - udelay(1); - /* TODO: ODM_StorePwrIndexDiffRateOffset(...) */ - /* storePwrIndexDiffRateOffset(Adapter, Addr, Bitmask, Data); */ - - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - ("===> ODM_ConfigBBWithHeaderFile23a: [PHY_REG] %08X %08X %08X\n", - Addr, Bitmask, Data)); -} - void odm_ConfigBB_PHY_8723A( struct dm_odm_t *pDM_Odm, diff --git a/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h b/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h index e99833cc7929..127609404652 100644 --- a/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h +++ b/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h @@ -35,10 +35,4 @@ void ODM_ReadAndConfig_PHY_REG_1T_8723A(struct dm_odm_t *pDM_Odm); void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm); -/****************************************************************************** -* PHY_REG_PG.TXT -******************************************************************************/ - -void ODM_ReadAndConfig_PHY_REG_PG_8723A(struct dm_odm_t *pDM_Odm); - #endif /* end of HWIMG_SUPPORT */ diff --git a/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h b/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h index 4117830b3a8a..a6cfb6df4cf7 100644 --- a/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h +++ b/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h @@ -23,8 +23,6 @@ void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data); void odm_ConfigBB_AGC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data); -void odm_ConfigBB_PHY_REG_PG_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data); - void odm_ConfigBB_PHY_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data); #endif /* end of SUPPORT */ -- cgit From 79756e687c52e0cec233906dcc9b57a71c306b3d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:07 +0200 Subject: staging: rtl8723au: Remove ugly wrapper ODM_ConfigBBWithHeaderFile23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 16 ---------------- drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c | 10 ++-------- drivers/staging/rtl8723au/include/odm.h | 8 -------- drivers/staging/rtl8723au/include/odm_HWConfig.h | 3 --- 4 files changed, 2 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 4fc0b06c5dbc..40fea7de7a10 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -423,22 +423,6 @@ void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, u8 *pMacStatus, u8 MacID, } -int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, - enum odm_bb_config_type ConfigType) -{ - if (pDM_Odm->SupportICType == ODM_RTL8723A) { - if (ConfigType == CONFIG_BB_PHY_REG) - ODM_ReadAndConfig_PHY_REG_1T_8723A(pDM_Odm); - else if (ConfigType == CONFIG_BB_AGC_TAB) - ODM_ReadAndConfig_AGC_TAB_1T_8723A(pDM_Odm); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, - (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n")); - } - return _SUCCESS; -} - int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm) { if (pDM_Odm->SupportICType == ODM_RTL8723A) diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c index 8a6ba63151cd..7dc2de016108 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c @@ -753,11 +753,7 @@ phy_BB8723a_Config_ParaFile(struct rtw_adapter *Adapter) /* 1. Read PHY_REG.TXT BB INIT!! */ /* We will seperate as 88C / 92C according to chip version */ /* */ - if (ODM_ConfigBBWithHeaderFile23a(&pHalData->odmpriv, - CONFIG_BB_PHY_REG) == _FAIL) - rtStatus = _FAIL; - if (rtStatus != _SUCCESS) - goto phy_BB8190_Config_ParaFile_Fail; + ODM_ReadAndConfig_PHY_REG_1T_8723A(&pHalData->odmpriv); /* */ /* 20100318 Joseph: Config 2T2R to 1T2R if necessary. */ @@ -784,9 +780,7 @@ phy_BB8723a_Config_ParaFile(struct rtw_adapter *Adapter) /* */ /* 3. BB AGC table Initialization */ /* */ - if (ODM_ConfigBBWithHeaderFile23a(&pHalData->odmpriv, - CONFIG_BB_AGC_TAB) == _FAIL) - rtStatus = _FAIL; + ODM_ReadAndConfig_AGC_TAB_1T_8723A(&pHalData->odmpriv); phy_BB8190_Config_ParaFile_Fail: diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 183d8ff1ab9b..08c6f7297d6d 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -855,14 +855,6 @@ enum odm_rf_content { odm_radiod_txt = 0x1003 }; -enum odm_bb_config_type { - CONFIG_BB_PHY_REG, - CONFIG_BB_AGC_TAB, - CONFIG_BB_AGC_TAB_2G, - CONFIG_BB_AGC_TAB_5G, - CONFIG_BB_PHY_REG_PG, -}; - /* Status code */ enum rt_status { RT_STATUS_SUCCESS, diff --git a/drivers/staging/rtl8723au/include/odm_HWConfig.h b/drivers/staging/rtl8723au/include/odm_HWConfig.h index f8236cac9c10..6fe6f70de358 100644 --- a/drivers/staging/rtl8723au/include/odm_HWConfig.h +++ b/drivers/staging/rtl8723au/include/odm_HWConfig.h @@ -160,9 +160,6 @@ void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, bool bPacketBeacon ); -int ODM_ConfigBBWithHeaderFile23a(struct dm_odm_t *pDM_Odm, - enum odm_bb_config_type ConfigType); - int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm); #endif -- cgit From f467c2b214928132980a2d850741407cd59af502 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:08 +0200 Subject: staging: rtl8723au: Remove unused ODM_MacStatusQuery23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 9 --------- drivers/staging/rtl8723au/include/odm_HWConfig.h | 8 -------- 2 files changed, 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 40fea7de7a10..b3c711ad0ead 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -414,15 +414,6 @@ void ODM_PhyStatusQuery23a(struct dm_odm_t *pDM_Odm, struct phy_info *pPhyInfo, ODM_PhyStatusQuery23a_92CSeries(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo); } -/* For future use. */ -void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, u8 *pMacStatus, u8 MacID, - bool bPacketMatchBSSID, bool bPacketToSelf, - bool bPacketBeacon) -{ - /* 2011/10/19 Driver team will handle in the future. */ - -} - int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm) { if (pDM_Odm->SupportICType == ODM_RTL8723A) diff --git a/drivers/staging/rtl8723au/include/odm_HWConfig.h b/drivers/staging/rtl8723au/include/odm_HWConfig.h index 6fe6f70de358..2d0fc86a297e 100644 --- a/drivers/staging/rtl8723au/include/odm_HWConfig.h +++ b/drivers/staging/rtl8723au/include/odm_HWConfig.h @@ -152,14 +152,6 @@ ODM_PhyStatusQuery23a( struct odm_packet_info *pPktinfo ); -void ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, - u8 *pMacStatus, - u8 MacID, - bool bPacketMatchBSSID, - bool bPacketToSelf, - bool bPacketBeacon -); - int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm); #endif -- cgit From 9464cac7c940e800fc5a2e8696b19febbd8b537c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:09 +0200 Subject: staging: rtl8723au: Remove obfuscating wrapper ODM_ConfigMACWithHeaderFile23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 7 ------- drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c | 3 +-- drivers/staging/rtl8723au/include/odm_HWConfig.h | 2 -- 3 files changed, 1 insertion(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index b3c711ad0ead..26fbf6c38b99 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -413,10 +413,3 @@ void ODM_PhyStatusQuery23a(struct dm_odm_t *pDM_Odm, struct phy_info *pPhyInfo, { ODM_PhyStatusQuery23a_92CSeries(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo); } - -int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm) -{ - if (pDM_Odm->SupportICType == ODM_RTL8723A) - ODM_ReadAndConfig_MAC_REG_8723A(pDM_Odm); - return _SUCCESS; -} diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c index 7dc2de016108..bd01c10ba874 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c @@ -425,8 +425,7 @@ int PHY_MACConfig8723A(struct rtw_adapter *Adapter) /* */ /* Config MAC */ /* */ - if (ODM_ConfigMACWithHeaderFile23a(&pHalData->odmpriv) == _FAIL) - rtStatus = _FAIL; + ODM_ReadAndConfig_MAC_REG_8723A(&pHalData->odmpriv); /* 2010.07.13 AMPDU aggregation number 9 */ /* rtw_write16(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM); */ diff --git a/drivers/staging/rtl8723au/include/odm_HWConfig.h b/drivers/staging/rtl8723au/include/odm_HWConfig.h index 2d0fc86a297e..78021a8cf8f9 100644 --- a/drivers/staging/rtl8723au/include/odm_HWConfig.h +++ b/drivers/staging/rtl8723au/include/odm_HWConfig.h @@ -152,6 +152,4 @@ ODM_PhyStatusQuery23a( struct odm_packet_info *pPktinfo ); -int ODM_ConfigMACWithHeaderFile23a(struct dm_odm_t *pDM_Odm); - #endif -- cgit From f6a7125c82e8904436d09cf9002194143e4d7019 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Sun, 13 Jul 2014 09:32:10 +0200 Subject: staging: rtl8723au: Remove unncessary wrapper PHY_RFConfig8723A() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c | 12 ------------ drivers/staging/rtl8723au/hal/usb_halinit.c | 4 ++-- drivers/staging/rtl8723au/include/Hal8723APhyCfg.h | 1 - 3 files changed, 2 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c index bd01c10ba874..3d4d7ec27509 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c @@ -839,18 +839,6 @@ PHY_BBConfig8723A(struct rtw_adapter *Adapter) return rtStatus; } -int -PHY_RFConfig8723A(struct rtw_adapter *Adapter) -{ - int rtStatus = _SUCCESS; - - /* */ - /* RF config */ - /* */ - rtStatus = PHY_RF6052_Config8723A(Adapter); - return rtStatus; -} - static void getTxPowerIndex(struct rtw_adapter *Adapter, u8 channel, u8 *cckPowerLevel, u8 *ofdmPowerLevel) { diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index d3d72898edec..8a7e644525e2 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -718,9 +718,9 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) /* Add for tx power by rate fine tune. We need to call the function after BB config. */ /* Because the tx power by rate table is inited in BB config. */ - status = PHY_RFConfig8723A(Adapter); + status = PHY_RF6052_Config8723A(Adapter); if (status == _FAIL) { - DBG_8723A("PHY_RFConfig8723A fault !!\n"); + DBG_8723A("PHY_RF6052_Config8723A failed!!\n"); goto exit; } diff --git a/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h b/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h index 299598b53876..688f20412bca 100644 --- a/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h +++ b/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h @@ -224,7 +224,6 @@ SetAntennaConfig92C(struct rtw_adapter *Adapter, u8 DefaultAnt); /* MAC/BB/RF HAL config */ int PHY_BBConfig8723A(struct rtw_adapter *Adapter); -int PHY_RFConfig8723A(struct rtw_adapter *Adapter); s32 PHY_MACConfig8723A(struct rtw_adapter *padapter); #endif -- cgit From 80f0d0923f7a8f580db2415e30580585e5d7f272 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:41 +0100 Subject: staging: vt6656: replace typedef enum tagCMD_CODE with enum vnt_cmd Replacing the variables. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/wcmd.c | 8 ++++---- drivers/staging/vt6656/wcmd.h | 22 +++++++++++----------- 3 files changed, 16 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 789c55d1050c..4630206710db 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -400,7 +400,7 @@ struct vnt_private { CMD_STATE eCommandState; - CMD_CODE eCommand; + enum vnt_cmd command; int bStopDataPkt; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index ade0f8117af7..3d9ace2febd0 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -146,13 +146,13 @@ static int s_bCommandComplete(struct vnt_private *priv) return true; } - priv->eCommand = priv->eCmdQueue[priv->uCmdDequeueIdx].eCmd; + priv->command = priv->eCmdQueue[priv->uCmdDequeueIdx].cmd; ADD_ONE_WITH_WRAP_AROUND(priv->uCmdDequeueIdx, CMD_Q_SIZE); priv->cbFreeCmdQueue++; priv->bCmdRunning = true; - switch (priv->eCommand) { + switch (priv->command) { case WLAN_CMD_INIT_MAC80211: priv->eCommandState = WLAN_CMD_INIT_MAC80211_START; break; @@ -186,13 +186,13 @@ static int s_bCommandComplete(struct vnt_private *priv) return true; } -int bScheduleCommand(struct vnt_private *priv, CMD_CODE command, u8 *item0) +int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) { if (priv->cbFreeCmdQueue == 0) return false; - priv->eCmdQueue[priv->uCmdEnqueueIdx].eCmd = command; + priv->eCmdQueue[priv->uCmdEnqueueIdx].cmd = command; ADD_ONE_WITH_WRAP_AROUND(priv->uCmdEnqueueIdx, CMD_Q_SIZE); priv->cbFreeCmdQueue--; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 98387f33f1ff..1d0201a49c69 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -34,15 +34,15 @@ #define AUTHENTICATE_TIMEOUT 1000 //ms #define ASSOCIATE_TIMEOUT 1000 //ms -// Command code -typedef enum tagCMD_CODE { - WLAN_CMD_INIT_MAC80211, - WLAN_CMD_SETPOWER, - WLAN_CMD_TBTT_WAKEUP, - WLAN_CMD_BECON_SEND, - WLAN_CMD_CHANGE_ANTENNA, - WLAN_CMD_11H_CHSW, -} CMD_CODE, *PCMD_CODE; +/* Command code */ +enum vnt_cmd { + WLAN_CMD_INIT_MAC80211, + WLAN_CMD_SETPOWER, + WLAN_CMD_TBTT_WAKEUP, + WLAN_CMD_BECON_SEND, + WLAN_CMD_CHANGE_ANTENNA, + WLAN_CMD_11H_CHSW, +}; #define CMD_Q_SIZE 32 @@ -57,7 +57,7 @@ typedef enum tagCMD_STATUS { } CMD_STATUS, *PCMD_STATUS; typedef struct tagCMD_ITEM { - CMD_CODE eCmd; + enum vnt_cmd cmd; } CMD_ITEM, *PCMD_ITEM; // Command state @@ -75,7 +75,7 @@ struct vnt_private; void vResetCommandTimer(struct vnt_private *); -int bScheduleCommand(struct vnt_private *, CMD_CODE eCommand, u8 *pbyItem0); +int bScheduleCommand(struct vnt_private *, enum vnt_cmd, u8 *); void vRunCommand(struct work_struct *work); -- cgit From ad74e91d06225e9f649baad786faf0992e996050 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:42 +0100 Subject: staging: vt6656: replace typedef enum tagCMD_STATE with enum vnt_cmd_state Replacing variables. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/wcmd.c | 18 +++++++++--------- drivers/staging/vt6656/wcmd.h | 20 ++++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 4630206710db..0c9166e2969a 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -398,7 +398,7 @@ struct vnt_private { /* Beacon releated */ u16 wSeqCounter; - CMD_STATE eCommandState; + enum vnt_cmd_state command_state; enum vnt_cmd command; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 3d9ace2febd0..e0ad20aa49f5 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -67,7 +67,7 @@ void vRunCommand(struct work_struct *work) if (priv->bCmdRunning != true) return; - switch (priv->eCommandState) { + switch (priv->command_state) { case WLAN_CMD_INIT_MAC80211_START: if (priv->mac_hw) break; @@ -139,7 +139,7 @@ void vRunCommand(struct work_struct *work) static int s_bCommandComplete(struct vnt_private *priv) { - priv->eCommandState = WLAN_CMD_IDLE; + priv->command_state = WLAN_CMD_IDLE; if (priv->cbFreeCmdQueue == CMD_Q_SIZE) { /* Command Queue Empty */ priv->bCmdRunning = false; @@ -154,27 +154,27 @@ static int s_bCommandComplete(struct vnt_private *priv) switch (priv->command) { case WLAN_CMD_INIT_MAC80211: - priv->eCommandState = WLAN_CMD_INIT_MAC80211_START; + priv->command_state = WLAN_CMD_INIT_MAC80211_START; break; case WLAN_CMD_TBTT_WAKEUP: - priv->eCommandState = WLAN_CMD_TBTT_WAKEUP_START; + priv->command_state = WLAN_CMD_TBTT_WAKEUP_START; break; case WLAN_CMD_BECON_SEND: - priv->eCommandState = WLAN_CMD_BECON_SEND_START; + priv->command_state = WLAN_CMD_BECON_SEND_START; break; case WLAN_CMD_SETPOWER: - priv->eCommandState = WLAN_CMD_SETPOWER_START; + priv->command_state = WLAN_CMD_SETPOWER_START; break; case WLAN_CMD_CHANGE_ANTENNA: - priv->eCommandState = WLAN_CMD_CHANGE_ANTENNA_START; + priv->command_state = WLAN_CMD_CHANGE_ANTENNA_START; break; case WLAN_CMD_11H_CHSW: - priv->eCommandState = WLAN_CMD_11H_CHSW_START; + priv->command_state = WLAN_CMD_11H_CHSW_START; break; default: @@ -209,7 +209,7 @@ void vResetCommandTimer(struct vnt_private *priv) priv->cbFreeCmdQueue = CMD_Q_SIZE; priv->uCmdDequeueIdx = 0; priv->uCmdEnqueueIdx = 0; - priv->eCommandState = WLAN_CMD_IDLE; + priv->command_state = WLAN_CMD_IDLE; priv->bCmdRunning = false; priv->bCmdClear = false; } diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 1d0201a49c69..283df613baad 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -60,16 +60,16 @@ typedef struct tagCMD_ITEM { enum vnt_cmd cmd; } CMD_ITEM, *PCMD_ITEM; -// Command state -typedef enum tagCMD_STATE { - WLAN_CMD_INIT_MAC80211_START, - WLAN_CMD_SETPOWER_START, - WLAN_CMD_TBTT_WAKEUP_START, - WLAN_CMD_BECON_SEND_START, - WLAN_CMD_CHANGE_ANTENNA_START, - WLAN_CMD_11H_CHSW_START, - WLAN_CMD_IDLE -} CMD_STATE, *PCMD_STATE; +/* Command state */ +enum vnt_cmd_state { + WLAN_CMD_INIT_MAC80211_START, + WLAN_CMD_SETPOWER_START, + WLAN_CMD_TBTT_WAKEUP_START, + WLAN_CMD_BECON_SEND_START, + WLAN_CMD_CHANGE_ANTENNA_START, + WLAN_CMD_11H_CHSW_START, + WLAN_CMD_IDLE +}; struct vnt_private; -- cgit From b595f9b89c609476de8165ee081f8fb5d25d02f7 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:43 +0100 Subject: staging: vt6656: remove typedef struct tagCMD_ITEM Since enum vnt_cmd is only member replace with array enum vnt_cmd cmd_queue with size of CMD_Q_SIZE Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/wcmd.c | 4 ++-- drivers/staging/vt6656/wcmd.h | 4 ---- 3 files changed, 3 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 0c9166e2969a..a6eeebc6fe95 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -406,7 +406,7 @@ struct vnt_private { /* 802.11 counter */ - CMD_ITEM eCmdQueue[CMD_Q_SIZE]; + enum vnt_cmd cmd_queue[CMD_Q_SIZE]; u32 uCmdDequeueIdx; u32 uCmdEnqueueIdx; u32 cbFreeCmdQueue; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index e0ad20aa49f5..c2da8cceff10 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -146,7 +146,7 @@ static int s_bCommandComplete(struct vnt_private *priv) return true; } - priv->command = priv->eCmdQueue[priv->uCmdDequeueIdx].cmd; + priv->command = priv->cmd_queue[priv->uCmdDequeueIdx]; ADD_ONE_WITH_WRAP_AROUND(priv->uCmdDequeueIdx, CMD_Q_SIZE); priv->cbFreeCmdQueue++; @@ -192,7 +192,7 @@ int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) if (priv->cbFreeCmdQueue == 0) return false; - priv->eCmdQueue[priv->uCmdEnqueueIdx].cmd = command; + priv->cmd_queue[priv->uCmdEnqueueIdx] = command; ADD_ONE_WITH_WRAP_AROUND(priv->uCmdEnqueueIdx, CMD_Q_SIZE); priv->cbFreeCmdQueue--; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 283df613baad..f42270b8554a 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -56,10 +56,6 @@ typedef enum tagCMD_STATUS { } CMD_STATUS, *PCMD_STATUS; -typedef struct tagCMD_ITEM { - enum vnt_cmd cmd; -} CMD_ITEM, *PCMD_ITEM; - /* Command state */ enum vnt_cmd_state { WLAN_CMD_INIT_MAC80211_START, -- cgit From 9a309289b24afc1edb8f2be67efd7f91d163da81 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:44 +0100 Subject: staging: vt6656: remove unused variables bCmdClear and bNeedRadioOFF Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/wcmd.c | 1 - 2 files changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index a6eeebc6fe95..a1ed376acac2 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -411,8 +411,6 @@ struct vnt_private { u32 uCmdEnqueueIdx; u32 cbFreeCmdQueue; int bCmdRunning; - int bCmdClear; - int bNeedRadioOFF; unsigned long key_entry_inuse; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index c2da8cceff10..fa7c7b654cbd 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -211,5 +211,4 @@ void vResetCommandTimer(struct vnt_private *priv) priv->uCmdEnqueueIdx = 0; priv->command_state = WLAN_CMD_IDLE; priv->bCmdRunning = false; - priv->bCmdClear = false; } -- cgit From 33a60b87b65eb69bc31adb12ee92cf0664a2ad3b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:45 +0100 Subject: staging: vt6656: replace camel case from command variables camel case changes uCmdDequeueIdx -> cmd_dequeue_idx uCmdEnqueueIdx -> cmd_enqueue_idx cbFreeCmdQueue -> free_cmd_queue bCmdRunning -> cmd_running Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 8 ++++---- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 32 ++++++++++++++++---------------- 3 files changed, 21 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index a1ed376acac2..436f10966d2c 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -407,10 +407,10 @@ struct vnt_private { /* 802.11 counter */ enum vnt_cmd cmd_queue[CMD_Q_SIZE]; - u32 uCmdDequeueIdx; - u32 uCmdEnqueueIdx; - u32 cbFreeCmdQueue; - int bCmdRunning; + u32 cmd_dequeue_idx; + u32 cmd_enqueue_idx; + u32 free_cmd_queue; + int cmd_running; unsigned long key_entry_inuse; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4cdf29eb593e..34b6148784cd 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -708,7 +708,7 @@ static void vnt_stop(struct ieee80211_hw *hw) cancel_delayed_work_sync(&priv->run_command_work); - priv->bCmdRunning = false; + priv->cmd_running = false; priv->flags &= ~DEVICE_FLAGS_OPENED; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index fa7c7b654cbd..37ca3de2f1e3 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -64,7 +64,7 @@ void vRunCommand(struct work_struct *work) if (priv->Flags & fMP_DISCONNECTED) return; - if (priv->bCmdRunning != true) + if (priv->cmd_running != true) return; switch (priv->command_state) { @@ -140,17 +140,17 @@ static int s_bCommandComplete(struct vnt_private *priv) { priv->command_state = WLAN_CMD_IDLE; - if (priv->cbFreeCmdQueue == CMD_Q_SIZE) { + if (priv->free_cmd_queue == CMD_Q_SIZE) { /* Command Queue Empty */ - priv->bCmdRunning = false; + priv->cmd_running = false; return true; } - priv->command = priv->cmd_queue[priv->uCmdDequeueIdx]; + priv->command = priv->cmd_queue[priv->cmd_dequeue_idx]; - ADD_ONE_WITH_WRAP_AROUND(priv->uCmdDequeueIdx, CMD_Q_SIZE); - priv->cbFreeCmdQueue++; - priv->bCmdRunning = true; + ADD_ONE_WITH_WRAP_AROUND(priv->cmd_dequeue_idx, CMD_Q_SIZE); + priv->free_cmd_queue++; + priv->cmd_running = true; switch (priv->command) { case WLAN_CMD_INIT_MAC80211: @@ -189,15 +189,15 @@ static int s_bCommandComplete(struct vnt_private *priv) int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) { - if (priv->cbFreeCmdQueue == 0) + if (priv->free_cmd_queue == 0) return false; - priv->cmd_queue[priv->uCmdEnqueueIdx] = command; + priv->cmd_queue[priv->cmd_enqueue_idx] = command; - ADD_ONE_WITH_WRAP_AROUND(priv->uCmdEnqueueIdx, CMD_Q_SIZE); - priv->cbFreeCmdQueue--; + ADD_ONE_WITH_WRAP_AROUND(priv->cmd_enqueue_idx, CMD_Q_SIZE); + priv->free_cmd_queue--; - if (priv->bCmdRunning == false) + if (priv->cmd_running == false) s_bCommandComplete(priv); return true; @@ -206,9 +206,9 @@ int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) void vResetCommandTimer(struct vnt_private *priv) { - priv->cbFreeCmdQueue = CMD_Q_SIZE; - priv->uCmdDequeueIdx = 0; - priv->uCmdEnqueueIdx = 0; + priv->free_cmd_queue = CMD_Q_SIZE; + priv->cmd_dequeue_idx = 0; + priv->cmd_enqueue_idx = 0; priv->command_state = WLAN_CMD_IDLE; - priv->bCmdRunning = false; + priv->cmd_running = false; } -- cgit From 190c8190e1b0cd880c6717bfc2a190c32ee4d765 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:46 +0100 Subject: staging: vt6656: dead code remove typedef enum tagCMD_STATUS Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index f42270b8554a..a2943ab004e8 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -46,16 +46,6 @@ enum vnt_cmd { #define CMD_Q_SIZE 32 -typedef enum tagCMD_STATUS { - - CMD_STATUS_SUCCESS = 0, - CMD_STATUS_FAILURE, - CMD_STATUS_RESOURCES, - CMD_STATUS_TIMEOUT, - CMD_STATUS_PENDING - -} CMD_STATUS, *PCMD_STATUS; - /* Command state */ enum vnt_cmd_state { WLAN_CMD_INIT_MAC80211_START, -- cgit From 60cecd2857b26a38c3342a71489b83e61da2ed86 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:47 +0100 Subject: staging: vt6656: Move and rename s_bCommandComplete to vnt_cmd_complete Remove static declaration and moving for function visibility Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 108 +++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 55 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 37ca3de2f1e3..8c5a0e854492 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -28,7 +28,7 @@ * s_vProbeChannel - Active scan channel * s_MgrMakeProbeRequest - Make ProbeRequest packet * CommandTimer - Timer function to handle command - * s_bCommandComplete - Command Complete function + * vnt_cmd_complete - Command Complete function * bScheduleCommand - Push Command and wait Command Scheduler to do * vCommandTimer- Command call back functions * vCommandTimerWait- Call back timer @@ -49,13 +49,61 @@ #include "rf.h" #include "channel.h" -static int s_bCommandComplete(struct vnt_private *); - static void vCommandTimerWait(struct vnt_private *priv, unsigned long msecs) { schedule_delayed_work(&priv->run_command_work, msecs_to_jiffies(msecs)); } +static int vnt_cmd_complete(struct vnt_private *priv) +{ + + priv->command_state = WLAN_CMD_IDLE; + if (priv->free_cmd_queue == CMD_Q_SIZE) { + /* Command Queue Empty */ + priv->cmd_running = false; + return true; + } + + priv->command = priv->cmd_queue[priv->cmd_dequeue_idx]; + + ADD_ONE_WITH_WRAP_AROUND(priv->cmd_dequeue_idx, CMD_Q_SIZE); + priv->free_cmd_queue++; + priv->cmd_running = true; + + switch (priv->command) { + case WLAN_CMD_INIT_MAC80211: + priv->command_state = WLAN_CMD_INIT_MAC80211_START; + break; + + case WLAN_CMD_TBTT_WAKEUP: + priv->command_state = WLAN_CMD_TBTT_WAKEUP_START; + break; + + case WLAN_CMD_BECON_SEND: + priv->command_state = WLAN_CMD_BECON_SEND_START; + break; + + case WLAN_CMD_SETPOWER: + priv->command_state = WLAN_CMD_SETPOWER_START; + break; + + case WLAN_CMD_CHANGE_ANTENNA: + priv->command_state = WLAN_CMD_CHANGE_ANTENNA_START; + break; + + case WLAN_CMD_11H_CHSW: + priv->command_state = WLAN_CMD_11H_CHSW_START; + break; + + default: + break; + } + + vCommandTimerWait(priv, 0); + + return true; +} + void vRunCommand(struct work_struct *work) { struct vnt_private *priv = @@ -131,61 +179,11 @@ void vRunCommand(struct work_struct *work) break; } //switch - s_bCommandComplete(priv); + vnt_cmd_complete(priv); return; } -static int s_bCommandComplete(struct vnt_private *priv) -{ - - priv->command_state = WLAN_CMD_IDLE; - if (priv->free_cmd_queue == CMD_Q_SIZE) { - /* Command Queue Empty */ - priv->cmd_running = false; - return true; - } - - priv->command = priv->cmd_queue[priv->cmd_dequeue_idx]; - - ADD_ONE_WITH_WRAP_AROUND(priv->cmd_dequeue_idx, CMD_Q_SIZE); - priv->free_cmd_queue++; - priv->cmd_running = true; - - switch (priv->command) { - case WLAN_CMD_INIT_MAC80211: - priv->command_state = WLAN_CMD_INIT_MAC80211_START; - break; - - case WLAN_CMD_TBTT_WAKEUP: - priv->command_state = WLAN_CMD_TBTT_WAKEUP_START; - break; - - case WLAN_CMD_BECON_SEND: - priv->command_state = WLAN_CMD_BECON_SEND_START; - break; - - case WLAN_CMD_SETPOWER: - priv->command_state = WLAN_CMD_SETPOWER_START; - break; - - case WLAN_CMD_CHANGE_ANTENNA: - priv->command_state = WLAN_CMD_CHANGE_ANTENNA_START; - break; - - case WLAN_CMD_11H_CHSW: - priv->command_state = WLAN_CMD_11H_CHSW_START; - break; - - default: - break; - } - - vCommandTimerWait(priv, 0); - - return true; -} - int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) { @@ -198,7 +196,7 @@ int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) priv->free_cmd_queue--; if (priv->cmd_running == false) - s_bCommandComplete(priv); + vnt_cmd_complete(priv); return true; -- cgit From 2cd98cd5b83282d2317a410dd6a2e2aaf963787d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:48 +0100 Subject: staging: vt6656: rename vCommandTimerWait to vnt_cmd_timer_wait Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 8c5a0e854492..87e682ddd8e4 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -31,7 +31,7 @@ * vnt_cmd_complete - Command Complete function * bScheduleCommand - Push Command and wait Command Scheduler to do * vCommandTimer- Command call back functions - * vCommandTimerWait- Call back timer + * vnt_cmd_timer_wait- Call back timer * s_bClearBSSID_SCAN- Clear BSSID_SCAN cmd in CMD Queue * * Revision History: @@ -49,7 +49,7 @@ #include "rf.h" #include "channel.h" -static void vCommandTimerWait(struct vnt_private *priv, unsigned long msecs) +static void vnt_cmd_timer_wait(struct vnt_private *priv, unsigned long msecs) { schedule_delayed_work(&priv->run_command_work, msecs_to_jiffies(msecs)); } @@ -99,7 +99,7 @@ static int vnt_cmd_complete(struct vnt_private *priv) break; } - vCommandTimerWait(priv, 0); + vnt_cmd_timer_wait(priv, 0); return true; } -- cgit From 592365ae4ac2872ca48334a3ce0bd77704db3d28 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:49 +0100 Subject: staging: vt6656: rename vRunCommand to vnt_run_command Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- drivers/staging/vt6656/wcmd.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 34b6148784cd..d9b521063a84 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1111,7 +1111,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) spin_lock_init(&priv->lock); mutex_init(&priv->usb_lock); - INIT_DELAYED_WORK(&priv->run_command_work, vRunCommand); + INIT_DELAYED_WORK(&priv->run_command_work, vnt_run_command); usb_set_intfdata(intf, priv); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 87e682ddd8e4..864d5e59d362 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -104,7 +104,7 @@ static int vnt_cmd_complete(struct vnt_private *priv) return true; } -void vRunCommand(struct work_struct *work) +void vnt_run_command(struct work_struct *work) { struct vnt_private *priv = container_of(work, struct vnt_private, run_command_work.work); diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index a2943ab004e8..783d6c9a6ccb 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -63,6 +63,6 @@ void vResetCommandTimer(struct vnt_private *); int bScheduleCommand(struct vnt_private *, enum vnt_cmd, u8 *); -void vRunCommand(struct work_struct *work); +void vnt_run_command(struct work_struct *work); #endif /* __WCMD_H__ */ -- cgit From 57981a65fbd867fccf83b2c0d5cc8d0d835be056 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:50 +0100 Subject: staging: vt6656: Drop u8 pointer and rename bScheduleCommand. Rename to vnt_schedule_command removing unused u8 pointer. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 12 +++++------- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/wcmd.c | 4 ++-- drivers/staging/vt6656/wcmd.h | 2 +- 5 files changed, 10 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 77bd9dde4887..15841b8a846a 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -172,20 +172,18 @@ void INTnsProcessData(struct vnt_private *priv) if (int_data->isr0 != 0) { if (int_data->isr0 & ISR_BNTX && priv->op_mode == NL80211_IFTYPE_AP) - bScheduleCommand(priv, WLAN_CMD_BECON_SEND, NULL); + vnt_schedule_command(priv, WLAN_CMD_BECON_SEND); if (int_data->isr0 & ISR_TBTT) { if (priv->hw->conf.flags & IEEE80211_CONF_PS) - bScheduleCommand((void *) priv, - WLAN_CMD_TBTT_WAKEUP, - NULL); + vnt_schedule_command(priv, + WLAN_CMD_TBTT_WAKEUP); #if 0 /* TODO channel switch */ if (priv->bChannelSwitch) { priv->byChannelSwitchCount--; if (priv->byChannelSwitchCount == 0) - bScheduleCommand((void *) priv, - WLAN_CMD_11H_CHSW, - NULL); + vnt_schedule_command(priv, + WLAN_CMD_11H_CHSW); } #endif } diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d9b521063a84..ceef9ef3599e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1137,7 +1137,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); vResetCommandTimer(priv); - bScheduleCommand(priv, WLAN_CMD_INIT_MAC80211, NULL); + vnt_schedule_command(priv, WLAN_CMD_INIT_MAC80211); return 0; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 3dc6d071f012..1f1ec049ace3 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -767,7 +767,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (priv->wCurrentRate != current_rate && !(priv->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) { priv->wCurrentRate = current_rate; - bScheduleCommand(priv, WLAN_CMD_SETPOWER, NULL); + vnt_schedule_command(priv, WLAN_CMD_SETPOWER); } if (current_rate > RATE_11M) diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 864d5e59d362..b217efb1667a 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -29,7 +29,7 @@ * s_MgrMakeProbeRequest - Make ProbeRequest packet * CommandTimer - Timer function to handle command * vnt_cmd_complete - Command Complete function - * bScheduleCommand - Push Command and wait Command Scheduler to do + * vnt_schedule_command - Push Command and wait Command Scheduler to do * vCommandTimer- Command call back functions * vnt_cmd_timer_wait- Call back timer * s_bClearBSSID_SCAN- Clear BSSID_SCAN cmd in CMD Queue @@ -184,7 +184,7 @@ void vnt_run_command(struct work_struct *work) return; } -int bScheduleCommand(struct vnt_private *priv, enum vnt_cmd command, u8 *item0) +int vnt_schedule_command(struct vnt_private *priv, enum vnt_cmd command) { if (priv->free_cmd_queue == 0) diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 783d6c9a6ccb..3248c95a94cc 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -61,7 +61,7 @@ struct vnt_private; void vResetCommandTimer(struct vnt_private *); -int bScheduleCommand(struct vnt_private *, enum vnt_cmd, u8 *); +int vnt_schedule_command(struct vnt_private *, enum vnt_cmd); void vnt_run_command(struct work_struct *work); -- cgit From 68cc161ee57ee4ea1789a45be42f4c161c577f16 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:51 +0100 Subject: staging: vt6656: rename vResetCommandTimer to vnt_reset_command_timer Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 2 +- drivers/staging/vt6656/wcmd.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ceef9ef3599e..dffd0c77c544 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1135,7 +1135,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) usb_device_reset(priv); MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); - vResetCommandTimer(priv); + vnt_reset_command_timer(priv); vnt_schedule_command(priv, WLAN_CMD_INIT_MAC80211); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index b217efb1667a..bb9500fcc091 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -202,7 +202,7 @@ int vnt_schedule_command(struct vnt_private *priv, enum vnt_cmd command) } -void vResetCommandTimer(struct vnt_private *priv) +void vnt_reset_command_timer(struct vnt_private *priv) { priv->free_cmd_queue = CMD_Q_SIZE; priv->cmd_dequeue_idx = 0; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 3248c95a94cc..0fc2c402fef3 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -59,7 +59,7 @@ enum vnt_cmd_state { struct vnt_private; -void vResetCommandTimer(struct vnt_private *); +void vnt_reset_command_timer(struct vnt_private *); int vnt_schedule_command(struct vnt_private *, enum vnt_cmd); -- cgit From 983b65fa8d32061938e589d660ec85c30e9a9dc9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:52 +0100 Subject: staging: vt6656: wcmd remove unneeded headers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index bb9500fcc091..3c6522848ad9 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -40,14 +40,11 @@ #include "device.h" #include "mac.h" -#include "card.h" #include "wcmd.h" #include "power.h" -#include "baseband.h" #include "usbpipe.h" #include "rxtx.h" #include "rf.h" -#include "channel.h" static void vnt_cmd_timer_wait(struct vnt_private *priv, unsigned long msecs) { -- cgit From a83a85939b27e0c7f1fbe1100af8b959133ffa7f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 13 Jul 2014 10:42:53 +0100 Subject: staging: vt6656: wcnd.c clean up comments Removing old functions and comments. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 3c6522848ad9..bf41e673e9bb 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -25,14 +25,9 @@ * Date: May 8, 2003 * * Functions: - * s_vProbeChannel - Active scan channel - * s_MgrMakeProbeRequest - Make ProbeRequest packet - * CommandTimer - Timer function to handle command * vnt_cmd_complete - Command Complete function - * vnt_schedule_command - Push Command and wait Command Scheduler to do - * vCommandTimer- Command call back functions + * vnt_schedule_command - Push Command and wait Command Scheduler to do * vnt_cmd_timer_wait- Call back timer - * s_bClearBSSID_SCAN- Clear BSSID_SCAN cmd in CMD Queue * * Revision History: * @@ -174,7 +169,7 @@ void vnt_run_command(struct work_struct *work) default: break; - } //switch + } vnt_cmd_complete(priv); -- cgit From 48c72e880feb944240017289f6825a22c12b1e13 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:23 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_use_tkipkey_handler() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_security.c | 25 ------------------------ drivers/staging/rtl8188eu/include/rtw_security.h | 1 - 2 files changed, 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c b/drivers/staging/rtl8188eu/core/rtw_security.c index d78def549df1..f9096a512da5 100644 --- a/drivers/staging/rtl8188eu/core/rtw_security.c +++ b/drivers/staging/rtl8188eu/core/rtw_security.c @@ -1679,28 +1679,3 @@ do { \ d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \ d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]; \ } while (0); - -/** - * omac1_aes_128 - One-Key CBC MAC (OMAC1) hash with AES-128 (aka AES-CMAC) - * @key: 128-bit key for the hash operation - * @data: Data buffer for which a MAC is determined - * @data_len: Length of data buffer in bytes - * @mac: Buffer for MAC (128 bits, i.e., 16 bytes) - * Returns: 0 on success, -1 on failure - * - * This is a mode for using block cipher (AES in this case) for authentication. - * OMAC1 was standardized with the name CMAC by NIST in a Special Publication - * (SP) 800-38B. - */ -void rtw_use_tkipkey_handler(void *FunctionContext) -{ - struct adapter *padapter = (struct adapter *)FunctionContext; - - - RT_TRACE(_module_rtl871x_security_c_, _drv_err_, ("^^^rtw_use_tkipkey_handler ^^^\n")); - - padapter->securitypriv.busetkipkey = true; - - RT_TRACE(_module_rtl871x_security_c_, _drv_err_, ("^^^rtw_use_tkipkey_handler padapter->securitypriv.busetkipkey=%d^^^\n", padapter->securitypriv.busetkipkey)); - -} diff --git a/drivers/staging/rtl8188eu/include/rtw_security.h b/drivers/staging/rtl8188eu/include/rtw_security.h index 937cad803d19..66d60aaf4ae8 100644 --- a/drivers/staging/rtl8188eu/include/rtw_security.h +++ b/drivers/staging/rtl8188eu/include/rtw_security.h @@ -378,6 +378,5 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe); u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe); u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe); void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe); -void rtw_use_tkipkey_handler(void *FunctionContext); #endif /* __RTL871X_SECURITY_H_ */ -- cgit From fbb670586087d2398812a607ba12625e7d58f05c Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:24 +0530 Subject: staging: rtl8188eu: Remove function rtw_set_channel_plan() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 15 +-------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - 2 files changed, 1 insertion(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 39932cbc4837..5eb21cd94133 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -1091,19 +1091,6 @@ int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode) return _SUCCESS; } -/* -* rtw_set_channel_plan - -* @adapter: pointer to struct adapter structure -* @channel_plan: -* -* Return _SUCCESS or _FAIL -*/ -int rtw_set_channel_plan(struct adapter *adapter, u8 channel_plan) -{ - /* handle by cmd_thread to sync with scan operation */ - return rtw_set_chplan_cmd(adapter, channel_plan, 1); -} - /* * rtw_set_country - * @adapter: pointer to struct adapter structure @@ -1130,5 +1117,5 @@ int rtw_set_country(struct adapter *adapter, const char *country_code) else DBG_88E("%s unknown country_code:%s\n", __func__, country_code); - return rtw_set_channel_plan(adapter, channel_plan); + return rtw_set_chplan_cmd(adapter, channel_plan, 1); } diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 005ec17fcbbc..73351475e900 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -43,7 +43,6 @@ u8 rtw_set_802_11_remove_key(struct adapter *adapt, u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid); u16 rtw_get_cur_max_rate(struct adapter *adapter); int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode); -int rtw_set_channel_plan(struct adapter *adapter, u8 channel_plan); int rtw_set_country(struct adapter *adapter, const char *country_code); #endif -- cgit From 0306b4f5e701c08a28c62f6a0f6385c427b09fcc Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:25 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_scan_mode() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 17 ----------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - 2 files changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 5eb21cd94133..09d5bf4c166d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -1074,23 +1074,6 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter) return max_rate; } -/* -* rtw_set_scan_mode - -* @adapter: pointer to struct adapter structure -* @scan_mode: -* -* Return _SUCCESS or _FAIL -*/ -int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode) -{ - if (scan_mode != SCAN_ACTIVE && scan_mode != SCAN_PASSIVE) - return _FAIL; - - adapter->mlmepriv.scan_mode = scan_mode; - - return _SUCCESS; -} - /* * rtw_set_country - * @adapter: pointer to struct adapter structure diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 73351475e900..525abbd799bc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -42,7 +42,6 @@ u8 rtw_set_802_11_remove_key(struct adapter *adapt, struct ndis_802_11_remove_key *key); u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid); u16 rtw_get_cur_max_rate(struct adapter *adapter); -int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode); int rtw_set_country(struct adapter *adapter, const char *country_code); #endif -- cgit From 56da23db87dc7d1f2aa2b5fd09f69b35b70f405b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:26 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_validate_ssid() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 26 ----------------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - 2 files changed, 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 09d5bf4c166d..95c65392e368 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -34,32 +34,6 @@ extern void indicate_wx_scan_complete_event(struct adapter *padapter); (addr[4] == 0xff) && (addr[5] == 0xff)) ? true : false \ ) -u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid) -{ - u8 i; - u8 ret = true; - - - if (ssid->SsidLength > 32) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("ssid length >32\n")); - ret = false; - goto exit; - } - - for (i = 0; i < ssid->SsidLength; i++) { - /* wifi, printable ascii code must be supported */ - if (!((ssid->Ssid[i] >= 0x20) && (ssid->Ssid[i] <= 0x7e))) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("ssid has nonprintabl ascii\n")); - ret = false; - break; - } - } - -exit: - - return ret; -} - u8 rtw_do_join(struct adapter *padapter) { struct list_head *plist, *phead; diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 525abbd799bc..11791cb80d8c 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -40,7 +40,6 @@ u8 rtw_set_802_11_remove_wep(struct adapter *adapter, u32 keyindex); u8 rtw_set_802_11_ssid(struct adapter *adapt, struct ndis_802_11_ssid *ssid); u8 rtw_set_802_11_remove_key(struct adapter *adapt, struct ndis_802_11_remove_key *key); -u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid); u16 rtw_get_cur_max_rate(struct adapter *adapter); int rtw_set_country(struct adapter *adapter, const char *country_code); -- cgit From e2313dce40f44f8b01ec1533674d1e39d56b4262 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:27 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_802_11_add_key() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 352 ---------------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - 2 files changed, 353 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 95c65392e368..8c107f8a9eea 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -591,358 +591,6 @@ exit: return ret; } -u8 rtw_set_802_11_add_key(struct adapter *padapter, struct ndis_802_11_key *key) -{ - uint encryptionalgo; - u8 *pbssid; - struct sta_info *stainfo; - u8 bgroup = false; - u8 bgrouptkey = false;/* can be removed later */ - u8 ret = _SUCCESS; - - - if (((key->KeyIndex & 0x80000000) == 0) && ((key->KeyIndex & 0x40000000) > 0)) { - /* It is invalid to clear bit 31 and set bit 30. If the miniport driver encounters this combination, */ - /* it must fail the request and return NDIS_STATUS_INVALID_DATA. */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("rtw_set_802_11_add_key: ((key->KeyIndex & 0x80000000)==0)[=%d]", - (int)(key->KeyIndex & 0x80000000) == 0)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("rtw_set_802_11_add_key:((key->KeyIndex & 0x40000000)>0)[=%d]", - (int)(key->KeyIndex & 0x40000000) > 0)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, - ("rtw_set_802_11_add_key: key->KeyIndex=%d\n", - (int)key->KeyIndex)); - ret = _FAIL; - goto exit; - } - - if (key->KeyIndex & 0x40000000) { - /* Pairwise key */ - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY: +++++ Pairwise key +++++\n")); - - pbssid = get_bssid(&padapter->mlmepriv); - stainfo = rtw_get_stainfo(&padapter->stapriv, pbssid); - - if ((stainfo != NULL) && (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("OID_802_11_ADD_KEY:(stainfo!=NULL)&&(Adapter->securitypriv.dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)\n")); - encryptionalgo = stainfo->dot118021XPrivacy; - } else { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY: stainfo == NULL)||(Adapter->securitypriv.dot11AuthAlgrthm!= dot11AuthAlgrthm_8021X)\n")); - encryptionalgo = padapter->securitypriv.dot11PrivacyAlgrthm; - } - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_set_802_11_add_key: (encryptionalgo==%d)!\n", - encryptionalgo)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_set_802_11_add_key: (Adapter->securitypriv.dot11PrivacyAlgrthm==%d)!\n", - padapter->securitypriv.dot11PrivacyAlgrthm)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_set_802_11_add_key: (Adapter->securitypriv.dot11AuthAlgrthm==%d)!\n", - padapter->securitypriv.dot11AuthAlgrthm)); - - if ((stainfo != NULL)) - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("rtw_set_802_11_add_key: (stainfo->dot118021XPrivacy==%d)!\n", - stainfo->dot118021XPrivacy)); - - if (key->KeyIndex & 0x000000FF) { - /* The key index is specified in the lower 8 bits by values of zero to 255. */ - /* The key index should be set to zero for a Pairwise key, and the driver should fail with */ - /* NDIS_STATUS_INVALID_DATA if the lower 8 bits is not zero */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, (" key->KeyIndex & 0x000000FF.\n")); - ret = _FAIL; - goto exit; - } - - /* check BSSID */ - if (IS_MAC_ADDRESS_BROADCAST(key->BSSID) == true) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("MacAddr_isBcst(key->BSSID)\n")); - ret = false; - goto exit; - } - - /* Check key length for TKIP. */ - if ((encryptionalgo == _TKIP_) && (key->KeyLength != 32)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("TKIP KeyLength:0x%x != 32\n", key->KeyLength)); - ret = _FAIL; - goto exit; - } - - /* Check key length for AES. */ - if ((encryptionalgo == _AES_) && (key->KeyLength != 16)) { - /* For our supplicant, EAPPkt9x.vxd, cannot differentiate TKIP and AES case. */ - if (key->KeyLength == 32) { - key->KeyLength = 16; - } else { - ret = _FAIL; - goto exit; - } - } - - /* Check key length for WEP. For NDTEST, 2005.01.27, by rcnjko. */ - if ((encryptionalgo == _WEP40_ || encryptionalgo == _WEP104_) && - (key->KeyLength != 5 && key->KeyLength != 13)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("WEP KeyLength:0x%x != 5 or 13\n", key->KeyLength)); - ret = _FAIL; - goto exit; - } - - bgroup = false; - - /* Check the pairwise key. Added by Annie, 2005-07-06. */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("[Pairwise Key set]\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("key index: 0x%8x(0x%8x)\n", key->KeyIndex, (key->KeyIndex&0x3))); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("key Length: %d\n", key->KeyLength)); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")); - - } else { - /* Group key - KeyIndex(BIT30 == 0) */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY: +++++ Group key +++++\n")); - - - /* when add wep key through add key and didn't assigned encryption type before */ - if ((padapter->securitypriv.ndisauthtype <= 3) && - (padapter->securitypriv.dot118021XGrpPrivacy == 0)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("keylen =%d(Adapter->securitypriv.dot11PrivacyAlgrthm=%x )padapter->securitypriv.dot118021XGrpPrivacy(%x)\n", - key->KeyLength, padapter->securitypriv.dot11PrivacyAlgrthm, - padapter->securitypriv.dot118021XGrpPrivacy)); - switch (key->KeyLength) { - case 5: - padapter->securitypriv.dot11PrivacyAlgrthm = _WEP40_; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("Adapter->securitypriv.dot11PrivacyAlgrthm=%x key->KeyLength=%u\n", - padapter->securitypriv.dot11PrivacyAlgrthm, key->KeyLength)); - break; - case 13: - padapter->securitypriv.dot11PrivacyAlgrthm = _WEP104_; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("Adapter->securitypriv.dot11PrivacyAlgrthm=%x key->KeyLength=%u\n", - padapter->securitypriv.dot11PrivacyAlgrthm, key->KeyLength)); - break; - default: - padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("Adapter->securitypriv.dot11PrivacyAlgrthm=%x key->KeyLength=%u\n", - padapter->securitypriv.dot11PrivacyAlgrthm, key->KeyLength)); - break; - } - - encryptionalgo = padapter->securitypriv.dot11PrivacyAlgrthm; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - (" Adapter->securitypriv.dot11PrivacyAlgrthm=%x\n", - padapter->securitypriv.dot11PrivacyAlgrthm)); - - } else { - encryptionalgo = padapter->securitypriv.dot118021XGrpPrivacy; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("(Adapter->securitypriv.dot11PrivacyAlgrthm=%x)encryptionalgo(%x)=padapter->securitypriv.dot118021XGrpPrivacy(%x)keylen=%d\n", - padapter->securitypriv.dot11PrivacyAlgrthm, encryptionalgo, - padapter->securitypriv.dot118021XGrpPrivacy, key->KeyLength)); - } - - if ((check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE) == true) && (IS_MAC_ADDRESS_BROADCAST(key->BSSID) == false)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - (" IBSS but BSSID is not Broadcast Address.\n")); - ret = _FAIL; - goto exit; - } - - /* Check key length for TKIP */ - if ((encryptionalgo == _TKIP_) && (key->KeyLength != 32)) { - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - (" TKIP GTK KeyLength:%u != 32\n", key->KeyLength)); - ret = _FAIL; - goto exit; - } else if (encryptionalgo == _AES_ && (key->KeyLength != 16 && key->KeyLength != 32)) { - /* Check key length for AES */ - /* For NDTEST, we allow keylen = 32 in this case. 2005.01.27, by rcnjko. */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("<=== SetInfo, OID_802_11_ADD_KEY: AES GTK KeyLength:%u != 16 or 32\n", - key->KeyLength)); - ret = _FAIL; - goto exit; - } - - /* Change the key length for EAPPkt9x.vxd. Added by Annie, 2005-11-03. */ - if ((encryptionalgo == _AES_) && (key->KeyLength == 32)) { - key->KeyLength = 16; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("AES key length changed: %u\n", key->KeyLength)); - } - - if (key->KeyIndex & 0x8000000) {/* error ??? 0x8000_0000 */ - bgrouptkey = true; - } - - if ((check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE)) && - (check_fwstate(&padapter->mlmepriv, _FW_LINKED))) - bgrouptkey = true; - bgroup = true; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("[Group Key set]\n")); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")) ; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("key index: 0x%8x(0x%8x)\n", key->KeyIndex, (key->KeyIndex&0x3))); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("key Length: %d\n", key->KeyLength)) ; - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("------------------------------------------\n")); - } - - /* If WEP encryption algorithm, just call rtw_set_802_11_add_wep(). */ - if ((padapter->securitypriv.dot11AuthAlgrthm != dot11AuthAlgrthm_8021X) && - (encryptionalgo == _WEP40_ || encryptionalgo == _WEP104_)) { - u32 keyindex; - u32 len = FIELD_OFFSET(struct ndis_802_11_key, KeyMaterial) + key->KeyLength; - struct ndis_802_11_wep *wep = &padapter->securitypriv.ndiswep; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY: +++++ WEP key +++++\n")); - - wep->Length = len; - keyindex = key->KeyIndex&0x7fffffff; - wep->KeyIndex = keyindex ; - wep->KeyLength = key->KeyLength; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY:Before memcpy\n")); - - memcpy(wep->KeyMaterial, key->KeyMaterial, key->KeyLength); - memcpy(&(padapter->securitypriv.dot11DefKey[keyindex].skey[0]), key->KeyMaterial, key->KeyLength); - - padapter->securitypriv.dot11DefKeylen[keyindex] = key->KeyLength; - padapter->securitypriv.dot11PrivacyKeyIndex = keyindex; - - ret = rtw_set_802_11_add_wep(padapter, wep); - goto exit; - } - if (key->KeyIndex & 0x20000000) { - /* SetRSC */ - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("OID_802_11_ADD_KEY: +++++ SetRSC+++++\n")); - if (bgroup) { - unsigned long long keysrc = key->KeyRSC & 0x00FFFFFFFFFFFFULL; - memcpy(&padapter->securitypriv.dot11Grprxpn, &keysrc, 8); - } else { - unsigned long long keysrc = key->KeyRSC & 0x00FFFFFFFFFFFFULL; - memcpy(&padapter->securitypriv.dot11Grptxpn, &keysrc, 8); - } - } - - /* Indicate this key idx is used for TX */ - /* Save the key in KeyMaterial */ - if (bgroup) { /* Group transmit key */ - int res; - - if (bgrouptkey) - padapter->securitypriv.dot118021XGrpKeyid = (u8)key->KeyIndex; - if ((key->KeyIndex&0x3) == 0) { - ret = _FAIL; - goto exit; - } - memset(&padapter->securitypriv.dot118021XGrpKey[(u8)((key->KeyIndex) & 0x03)], 0, 16); - memset(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); - memset(&padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)], 0, 16); - - if ((key->KeyIndex & 0x10000000)) { - memcpy(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial + 16, 8); - memcpy(&padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial + 24, 8); - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n rtw_set_802_11_add_key:rx mic :0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n", - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[0], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[1], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[2], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[3], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[4], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[5], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[6], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[7])); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("\n rtw_set_802_11_add_key:set Group mic key!!!!!!!!\n")); - } else { - memcpy(&padapter->securitypriv.dot118021XGrptxmickey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial + 24, 8); - memcpy(&padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial + 16, 8); - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n rtw_set_802_11_add_key:rx mic :0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n", - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[0], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[1], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[2], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[3], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[4], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[5], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex) & 0x03)].skey[6], - padapter->securitypriv.dot118021XGrprxmickey[(u8)((key->KeyIndex-1) & 0x03)].skey[7])); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, - ("\n rtw_set_802_11_add_key:set Group mic key!!!!!!!!\n")); - } - - /* set group key by index */ - memcpy(&padapter->securitypriv.dot118021XGrpKey[(u8)((key->KeyIndex) & 0x03)], key->KeyMaterial, key->KeyLength); - - key->KeyIndex = key->KeyIndex & 0x03; - - padapter->securitypriv.binstallGrpkey = true; - - padapter->securitypriv.bcheck_grpkey = false; - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("reset group key")); - - res = rtw_set_key(padapter, &padapter->securitypriv, key->KeyIndex, 1); - - if (res == _FAIL) - ret = _FAIL; - - goto exit; - - } else { /* Pairwise Key */ - u8 res; - - pbssid = get_bssid(&padapter->mlmepriv); - stainfo = rtw_get_stainfo(&padapter->stapriv, pbssid); - - if (stainfo != NULL) { - memset(&stainfo->dot118021x_UncstKey, 0, 16);/* clear keybuffer */ - - memcpy(&stainfo->dot118021x_UncstKey, key->KeyMaterial, 16); - - if (encryptionalgo == _TKIP_) { - padapter->securitypriv.busetkipkey = false; - - /* _set_timer(&padapter->securitypriv.tkip_timer, 50); */ - - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("\n========== _set_timer\n")); - - /* if TKIP, save the Receive/Transmit MIC key in KeyMaterial[128-255] */ - if ((key->KeyIndex & 0x10000000)) { - memcpy(&stainfo->dot11tkiptxmickey, key->KeyMaterial + 16, 8); - memcpy(&stainfo->dot11tkiprxmickey, key->KeyMaterial + 24, 8); - - } else { - memcpy(&stainfo->dot11tkiptxmickey, key->KeyMaterial + 24, 8); - memcpy(&stainfo->dot11tkiprxmickey, key->KeyMaterial + 16, 8); - } - } - - - /* Set key to CAM through H2C command */ - if (bgrouptkey) { /* never go to here */ - res = rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, false); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(group)\n")); - } else { - res = rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, true); - RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(unicast)\n")); - } - if (!res) - ret = _FAIL; - } - } -exit: - - return ret; -} - u8 rtw_set_802_11_remove_key(struct adapter *padapter, struct ndis_802_11_remove_key *key) { u8 *pbssid; diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 11791cb80d8c..9ec645666dde 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -25,7 +25,6 @@ typedef u8 NDIS_802_11_PMKID_VALUE[16]; -u8 rtw_set_802_11_add_key(struct adapter *adapt, struct ndis_802_11_key *key); u8 rtw_set_802_11_authentication_mode(struct adapter *adapt, enum ndis_802_11_auth_mode authmode); u8 rtw_set_802_11_bssid(struct adapter *adapter, u8 *bssid); -- cgit From e68029d4df4bb875ccd389d35391e740209e7053 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:28 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_802_11_remove_key() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 38 ----------------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 2 -- 2 files changed, 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index 8c107f8a9eea..f4116d1c17ed 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -591,44 +591,6 @@ exit: return ret; } -u8 rtw_set_802_11_remove_key(struct adapter *padapter, struct ndis_802_11_remove_key *key) -{ - u8 *pbssid; - struct sta_info *stainfo; - u8 bgroup = (key->KeyIndex & 0x4000000) > 0 ? false : true; - u8 keyIndex = (u8)key->KeyIndex & 0x03; - u8 ret = _SUCCESS; - - - if ((key->KeyIndex & 0xbffffffc) > 0) { - ret = _FAIL; - goto exit; - } - - if (bgroup) { - /* clear group key by index */ - - memset(&padapter->securitypriv.dot118021XGrpKey[keyIndex], 0, 16); - - /* \todo Send a H2C Command to Firmware for removing this Key in CAM Entry. */ - } else { - pbssid = get_bssid(&padapter->mlmepriv); - stainfo = rtw_get_stainfo(&padapter->stapriv, pbssid); - if (stainfo) { - /* clear key by BSSID */ - memset(&stainfo->dot118021x_UncstKey, 0, 16); - - /* \todo Send a H2C Command to Firmware for disable this Key in CAM Entry. */ - } else { - ret = _FAIL; - goto exit; - } - } -exit: - - return ret; -} - /* * rtw_get_cur_max_rate - * @adapter: pointer to struct adapter structure diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index 9ec645666dde..a325326e1c72 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -37,8 +37,6 @@ u8 rtw_set_802_11_infrastructure_mode(struct adapter *adapter, enum ndis_802_11_network_infra type); u8 rtw_set_802_11_remove_wep(struct adapter *adapter, u32 keyindex); u8 rtw_set_802_11_ssid(struct adapter *adapt, struct ndis_802_11_ssid *ssid); -u8 rtw_set_802_11_remove_key(struct adapter *adapt, - struct ndis_802_11_remove_key *key); u16 rtw_get_cur_max_rate(struct adapter *adapter); int rtw_set_country(struct adapter *adapter, const char *country_code); -- cgit From 2b83940a2eff3655b531c097cb7f1e9e91c2d556 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:29 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_set_802_11_remove_wep() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_ioctl_set.c | 25 ----------------------- drivers/staging/rtl8188eu/include/rtw_ioctl_set.h | 1 - 2 files changed, 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c index f4116d1c17ed..fc280ce57d2c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c @@ -566,31 +566,6 @@ exit: return ret; } -u8 rtw_set_802_11_remove_wep(struct adapter *padapter, u32 keyindex) -{ - u8 ret = _SUCCESS; - - if (keyindex >= 0x80000000 || padapter == NULL) { - ret = false; - goto exit; - } else { - int res; - struct security_priv *psecuritypriv = &(padapter->securitypriv); - if (keyindex < 4) { - memset(&psecuritypriv->dot11DefKey[keyindex], 0, 16); - res = rtw_set_key(padapter, psecuritypriv, keyindex, 0); - psecuritypriv->dot11DefKeylen[keyindex] = 0; - if (res == _FAIL) - ret = _FAIL; - } else { - ret = _FAIL; - } - } -exit: - - return ret; -} - /* * rtw_get_cur_max_rate - * @adapter: pointer to struct adapter structure diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h index a325326e1c72..fa9d655eaab9 100644 --- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h +++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h @@ -35,7 +35,6 @@ u8 rtw_set_802_11_bssid_list_scan(struct adapter *adapter, int ssid_max_num); u8 rtw_set_802_11_infrastructure_mode(struct adapter *adapter, enum ndis_802_11_network_infra type); -u8 rtw_set_802_11_remove_wep(struct adapter *adapter, u32 keyindex); u8 rtw_set_802_11_ssid(struct adapter *adapt, struct ndis_802_11_ssid *ssid); u16 rtw_get_cur_max_rate(struct adapter *adapter); int rtw_set_country(struct adapter *adapter, const char *country_code); -- cgit From 5f3f2a2962aa08e412227275bb7ec58c70be8461 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:30 +0530 Subject: staging: rtl8188eu: Remove unused function _rtw_IOL_append_WW_cmd() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_iol.c | 14 -------------- drivers/staging/rtl8188eu/include/rtw_iol.h | 2 -- 2 files changed, 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_iol.c b/drivers/staging/rtl8188eu/core/rtw_iol.c index e6fdd32f9a3f..7796287be8f4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_iol.c +++ b/drivers/staging/rtl8188eu/core/rtw_iol.c @@ -113,20 +113,6 @@ int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length); } -int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, u16 mask) -{ - struct ioreg_cfg cmd = {8, IOREG_CMD_WW_REG, 0x0, 0x0, 0x0}; - - cmd.address = cpu_to_le16(addr); - cmd.data = cpu_to_le32(value); - - if (mask != 0xFFFF) { - cmd.length = 12; - cmd.mask = cpu_to_le32(mask); - } - return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length); -} - int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask) { struct ioreg_cfg cmd = {8, IOREG_CMD_WD_REG, 0x0, 0x0, 0x0}; diff --git a/drivers/staging/rtl8188eu/include/rtw_iol.h b/drivers/staging/rtl8188eu/include/rtw_iol.h index ec0c6cb12057..80bfd063dd8d 100644 --- a/drivers/staging/rtl8188eu/include/rtw_iol.h +++ b/drivers/staging/rtl8188eu/include/rtw_iol.h @@ -63,8 +63,6 @@ void read_efuse_from_txpktbuf(struct adapter *adapter, int bcnhead, int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 mask); -int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, - u16 value, u16 mask); int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask); int _rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, -- cgit From ebe98c4fc1a0d24aa577fa406ef6077a17dc2400 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:31 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_get_timestampe_from_ie() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 5 ----- drivers/staging/rtl8188eu/include/rtw_mlme.h | 1 - 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 1eef47d465de..3314708c496c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -331,11 +331,6 @@ u16 rtw_get_capability(struct wlan_bssid_ex *bss) return le16_to_cpu(val); } -u8 *rtw_get_timestampe_from_ie(u8 *ie) -{ - return ie + 0; -} - u8 *rtw_get_beacon_interval_from_ie(u8 *ie) { return ie + 8; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 45c22efe93fe..75f8cf535eaa 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -590,7 +590,6 @@ int rtw_if_up(struct adapter *padapter); u8 *rtw_get_capability_from_ie(u8 *ie); -u8 *rtw_get_timestampe_from_ie(u8 *ie); u8 *rtw_get_beacon_interval_from_ie(u8 *ie); -- cgit From 07e49db0160dab6f2b0a8a41aefca71700062452 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:32 +0530 Subject: staging: rtl8188eu: Rename _rtw_free_network_queue() to rtw_free_network_queue() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 8 +------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 3314708c496c..b1e406e1b00f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -265,7 +265,7 @@ exit: } -void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall) +void rtw_free_network_queue(struct adapter *padapter, u8 isfreeall) { struct list_head *phead, *plist; struct wlan_network *pnetwork; @@ -360,12 +360,6 @@ static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, _rtw_free_network_nolock(pmlmepriv, pnetwork); } - -void rtw_free_network_queue(struct adapter *dev, u8 isfreeall) -{ - _rtw_free_network_queue(dev, isfreeall); -} - /* return the wlan_network with the matching addr diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 75f8cf535eaa..56ef60042d33 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -584,8 +584,6 @@ void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr); -void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall); - int rtw_if_up(struct adapter *padapter); -- cgit From 8eca2e5f789cb9d03ed9be65165a0b7a7f950e36 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:33 +0530 Subject: staging: rtl8188eu: Rename _rtw_find_network() to rtw_find_network() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 14 +------------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 5 ----- 2 files changed, 1 insertion(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index b1e406e1b00f..fcd3f5ac5516 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -239,7 +239,7 @@ void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network * Shall be calle under atomic context... to avoid possible racing condition... */ -struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr) +struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr) { struct list_head *phead, *plist; struct wlan_network *pnetwork = NULL; @@ -360,18 +360,6 @@ static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, _rtw_free_network_nolock(pmlmepriv, pnetwork); } -/* - return the wlan_network with the matching addr - - Shall be calle under atomic context... to avoid possible racing condition... -*/ -struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr) -{ - struct wlan_network *pnetwork = _rtw_find_network(scanned_queue, addr); - - return pnetwork; -} - int rtw_is_same_ibss(struct adapter *adapter, struct wlan_network *pnetwork) { int ret = true; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 56ef60042d33..04d3b3d9ba57 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -581,16 +581,11 @@ void _rtw_free_network(struct mlme_priv *pmlmepriv, void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork); - -struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr); - int rtw_if_up(struct adapter *padapter); - u8 *rtw_get_capability_from_ie(u8 *ie); u8 *rtw_get_beacon_interval_from_ie(u8 *ie); - void rtw_joinbss_reset(struct adapter *padapter); unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, -- cgit From fe80537a5ce44e27e2db8b5d65c1bff66a10338d Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:34 +0530 Subject: staging: rtl8188eu: Make _rtw_free_network() static Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 2 +- drivers/staging/rtl8188eu/include/rtw_mlme.h | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index fcd3f5ac5516..6cfb729b1917 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -194,7 +194,7 @@ exit: return pnetwork; } -void _rtw_free_network(struct mlme_priv *pmlmepriv , struct wlan_network *pnetwork, u8 isfreeall) +static void _rtw_free_network(struct mlme_priv *pmlmepriv , struct wlan_network *pnetwork, u8 isfreeall) { u32 curr_time, delta_time; u32 lifetime = SCANQUEUE_LIFETIME; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 04d3b3d9ba57..e727cf0c8cd0 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -575,9 +575,6 @@ struct wlan_network *_rtw_dequeue_network(struct __queue *queue); struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv); - -void _rtw_free_network(struct mlme_priv *pmlmepriv, - struct wlan_network *pnetwork, u8 isfreeall); void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork); -- cgit From 4b5a1c16baa6504d42888923bc8bb4076832ccd7 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:35 +0530 Subject: staging: rtl8188eu: Remove unused function _rtw_dequeue_network() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 19 ------------------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 2 -- 2 files changed, 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 6cfb729b1917..5ab675205733 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -142,25 +142,6 @@ exit: return _SUCCESS; } -struct wlan_network *_rtw_dequeue_network(struct __queue *queue) -{ - struct wlan_network *pnetwork; - - spin_lock_bh(&queue->lock); - - if (list_empty(&queue->queue)) { - pnetwork = NULL; - } else { - pnetwork = container_of((&queue->queue)->next, struct wlan_network, list); - - list_del_init(&(pnetwork->list)); - } - - spin_unlock_bh(&queue->lock); - - return pnetwork; -} - struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)/* _queue *free_queue) */ { struct wlan_network *pnetwork; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index e727cf0c8cd0..a234e8d89301 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -571,8 +571,6 @@ void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); int _rtw_enqueue_network(struct __queue *queue, struct wlan_network *pnetwork); -struct wlan_network *_rtw_dequeue_network(struct __queue *queue); - struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv); void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, -- cgit From 246cf9ec613a6f00e3c6175d87bb53ea713db3d5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:36 +0530 Subject: staging: rtl8188eu: Remove unused function _rtw_enqueue_network() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 15 --------------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 2 -- 2 files changed, 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 5ab675205733..2aafac3df2bb 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -127,21 +127,6 @@ void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) } } -int _rtw_enqueue_network(struct __queue *queue, struct wlan_network *pnetwork) -{ - if (pnetwork == NULL) - goto exit; - - spin_lock_bh(&queue->lock); - - list_add_tail(&pnetwork->list, &queue->queue); - - spin_unlock_bh(&queue->lock); - -exit: - return _SUCCESS; -} - struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)/* _queue *free_queue) */ { struct wlan_network *pnetwork; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index a234e8d89301..13f87029eb78 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -569,8 +569,6 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); -int _rtw_enqueue_network(struct __queue *queue, struct wlan_network *pnetwork); - struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv); void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, -- cgit From 3596d6d6d88fefbb8f1818c3df87e5005ea5ac72 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:37 +0530 Subject: staging: rtl8188eu: Rename _rtw_free_mlme_priv() to rtw_free_mlme_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 8 +------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 2aafac3df2bb..7293589b6f1c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -117,7 +117,7 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) } #endif -void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) +void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) { rtw_free_mlme_priv_ie_data(pmlmepriv); @@ -309,12 +309,6 @@ int rtw_init_mlme_priv(struct adapter *padapter) return res; } -void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) -{ - RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("rtw_free_mlme_priv\n")); - _rtw_free_mlme_priv(pmlmepriv); -} - static struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv) { return _rtw_alloc_network(pmlmepriv); diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 13f87029eb78..2a828ec1fd5e 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -567,8 +567,6 @@ int _rtw_init_mlme_priv(struct adapter *padapter); void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); -void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); - struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv); void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, -- cgit From 01e1162946d4eb42119efa316ee01c4c50dc25ad Mon Sep 17 00:00:00 2001 From: navin patidar Date: Sun, 13 Jul 2014 19:59:38 +0530 Subject: staging: rtl8188eu: Rename _rtw_init_mlme_priv() to rtw_init_mlme_priv() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 9 +-------- drivers/staging/rtl8188eu/include/rtw_mlme.h | 3 --- 2 files changed, 1 insertion(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index 7293589b6f1c..c15fab21aecf 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -35,7 +35,7 @@ extern unsigned char MCS_rate_2R[16]; extern unsigned char MCS_rate_1R[16]; -int _rtw_init_mlme_priv(struct adapter *padapter) +int rtw_init_mlme_priv(struct adapter *padapter) { int i; u8 *pbuf; @@ -302,13 +302,6 @@ u8 *rtw_get_beacon_interval_from_ie(u8 *ie) return ie + 8; } -int rtw_init_mlme_priv(struct adapter *padapter) -{ - int res; - res = _rtw_init_mlme_priv(padapter);/* (pmlmepriv); */ - return res; -} - static struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv) { return _rtw_alloc_network(pmlmepriv); diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 2a828ec1fd5e..5b1fcd27f447 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -562,9 +562,6 @@ void rtw_dynamic_check_timer_handlder(struct adapter *adapter); #define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0) #define rtw_set_scan_deny(adapter, ms) do {} while (0) - -int _rtw_init_mlme_priv(struct adapter *padapter); - void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv); -- cgit From d0f17b64ec3f1b0181af623fbecff194e750ebde Mon Sep 17 00:00:00 2001 From: Chen Gang Date: Mon, 14 Jul 2014 19:59:13 +0800 Subject: drivers: staging: lustre: Use 'force_die' instead of 'die' to avoid compiling issue Some of architectures have already defined 'die' as macro, so can not use it as declaration or definition in other modules, or it will cause compiling issue. So use more precise name 'force_die' (like 'wrap_bulk') instead of. And the related error (with allmodconfig under score): CC [M] drivers/staging/lustre/lustre/ptlrpc/sec.o drivers/staging/lustre/lustre/ptlrpc/sec.c: In function 'sptlrpc_cli_ctx_expire': drivers/staging/lustre/lustre/ptlrpc/sec.c:309:13: error: 'struct ptlrpc_ctx_ops' has no member named '__die' ctx->cc_ops->die(ctx, 0); ^ drivers/staging/lustre/lustre/ptlrpc/sec.c: In function 'ctx_refresh_timeout': drivers/staging/lustre/lustre/ptlrpc/sec.c:594:26: error: 'struct ptlrpc_ctx_ops' has no member named '__die' req->rq_cli_ctx->cc_ops->die(req->rq_cli_ctx, 0); ^ make[5]: *** [drivers/staging/lustre/lustre/ptlrpc/sec.o] Error 1 make[4]: *** [drivers/staging/lustre/lustre/ptlrpc] Error 2 make[3]: *** [drivers/staging/lustre/lustre] Error 2 make[2]: *** [drivers/staging/lustre] Error 2 make[1]: *** [drivers/staging] Error 2 make: *** [drivers] Error 2 Signed-off-by: Chen Gang Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lustre_sec.h | 2 +- drivers/staging/lustre/lustre/ptlrpc/sec.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lustre_sec.h b/drivers/staging/lustre/lustre/include/lustre_sec.h index 9a21e88da78a..dc31bf93a1d7 100644 --- a/drivers/staging/lustre/lustre/include/lustre_sec.h +++ b/drivers/staging/lustre/lustre/include/lustre_sec.h @@ -387,7 +387,7 @@ struct ptlrpc_ctx_ops { /** * Force the \a ctx to die. */ - void (*die) (struct ptlrpc_cli_ctx *ctx, + void (*force_die) (struct ptlrpc_cli_ctx *ctx, int grace); int (*display) (struct ptlrpc_cli_ctx *ctx, char *buf, int bufsize); diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index 27d497df3254..5cff7ee6ee7b 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -305,8 +305,8 @@ EXPORT_SYMBOL(sptlrpc_cli_ctx_put); */ void sptlrpc_cli_ctx_expire(struct ptlrpc_cli_ctx *ctx) { - LASSERT(ctx->cc_ops->die); - ctx->cc_ops->die(ctx, 0); + LASSERT(ctx->cc_ops->force_die); + ctx->cc_ops->force_die(ctx, 0); } EXPORT_SYMBOL(sptlrpc_cli_ctx_expire); @@ -591,7 +591,7 @@ int ctx_refresh_timeout(void *data) * later than the context refresh expire time. */ if (rc == 0) - req->rq_cli_ctx->cc_ops->die(req->rq_cli_ctx, 0); + req->rq_cli_ctx->cc_ops->force_die(req->rq_cli_ctx, 0); return rc; } -- cgit From 6fdd946afe75bb58831b6fd7d67024c26193c9b0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 14 Jul 2014 19:43:05 +0100 Subject: staging: vt6656: device.h remove old wireless stats These are dead nolonger of use. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/int.c | 4 ---- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 436f10966d2c..a8b6c5ffac2f 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -289,7 +289,6 @@ struct vnt_private { u8 mac_hw; /* netdev */ struct usb_device *usb; - struct net_device_stats stats; u64 tsf_time; u8 rx_rate; @@ -437,7 +436,6 @@ struct vnt_private { u8 byNewChannel; u8 byChannelSwitchCount; - struct iw_statistics wstats; /* wireless stats */ struct ieee80211_low_level_stats low_stats; }; diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 15841b8a846a..dad1543b98e1 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -150,7 +150,6 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) void INTnsProcessData(struct vnt_private *priv) { struct vnt_interrupt_data *int_data; - struct net_device_stats *stats = &priv->stats; struct ieee80211_low_level_stats *low_stats = &priv->low_stats; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); @@ -196,7 +195,4 @@ void INTnsProcessData(struct vnt_private *priv) } priv->int_buf.in_use = false; - - stats->tx_errors = priv->wstats.discard.retries; - stats->tx_dropped = priv->wstats.discard.retries; } -- cgit From ed0db5135f550f301eed93c6a38be975dcb1776c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 14 Jul 2014 19:43:06 +0100 Subject: staging: vt6656: set BBvSetAntennaMode in device_init_registers BBvSetAntennaMode is not set at all, set to byRxAntennaMode Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index dffd0c77c544..f0388d60b4d2 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -371,6 +371,9 @@ static int device_init_registers(struct vnt_private *pDevice) } } + /* Set initial antenna mode */ + BBvSetAntennaMode(pDevice, pDevice->byRxAntennaMode); + /* get Auto Fall Back type */ pDevice->byAutoFBCtrl = AUTO_FB_0; -- cgit From 495e2be7e5137ea1f9e2a110a90cb5d68592ea5d Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Mon, 14 Jul 2014 21:15:29 +0200 Subject: staging: vt6556: Remove double parentheses This patch cleanup a checkpatch warning by removing double parentheses from if condition. Additionally it fixes a line over 80 chars. Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index c1675d54da9b..97e10e077c11 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -450,8 +450,9 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; /* Fix VT3226 DFC system timing issue */ - vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); - } else if ((priv->byRFType == RF_VT3342A0)) { + vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, + SOFTPWRCTL_RFLEOPT); + } else if (priv->byRFType == RF_VT3342A0) { priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; length = sizeof(vnt_vt3184_vt3226d0); addr = vnt_vt3184_vt3226d0; -- cgit From ca89a2950cc2821ef5ee678afc3eb3187db05294 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:54 +0200 Subject: Staging: bcm: PHSModule.c: Whitespace & Indentation cleanup Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 589 ++++++++++++++++++++++++++-------------- 1 file changed, 384 insertions(+), 205 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 4b6de7683deb..79d84d712bf9 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1,46 +1,80 @@ #include "headers.h" -static UINT CreateSFToClassifierRuleMapping(B_UINT16 uiVcid, B_UINT16 uiClsId, struct bcm_phs_table *psServiceFlowTable, struct bcm_phs_rule *psPhsRule, B_UINT8 u8AssociatedPHSI); - -static UINT CreateClassiferToPHSRuleMapping(B_UINT16 uiVcid, B_UINT16 uiClsId, struct bcm_phs_entry *pstServiceFlowEntry, struct bcm_phs_rule *psPhsRule, B_UINT8 u8AssociatedPHSI); - -static UINT CreateClassifierPHSRule(B_UINT16 uiClsId, struct bcm_phs_classifier_table *psaClassifiertable, struct bcm_phs_rule *psPhsRule, enum bcm_phs_classifier_context eClsContext, B_UINT8 u8AssociatedPHSI); - -static UINT UpdateClassifierPHSRule(B_UINT16 uiClsId, struct bcm_phs_classifier_entry *pstClassifierEntry, struct bcm_phs_classifier_table *psaClassifiertable, struct bcm_phs_rule *psPhsRule, B_UINT8 u8AssociatedPHSI); +static UINT CreateSFToClassifierRuleMapping(B_UINT16 uiVcid, + B_UINT16 uiClsId, + struct bcm_phs_table *psServiceFlowTable, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI); + +static UINT CreateClassiferToPHSRuleMapping(B_UINT16 uiVcid, + B_UINT16 uiClsId, + struct bcm_phs_entry *pstServiceFlowEntry, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI); + +static UINT CreateClassifierPHSRule(B_UINT16 uiClsId, + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *psPhsRule, + enum bcm_phs_classifier_context eClsContext, + B_UINT8 u8AssociatedPHSI); + +static UINT UpdateClassifierPHSRule(B_UINT16 uiClsId, + struct bcm_phs_classifier_entry *pstClassifierEntry, + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI); static bool ValidatePHSRuleComplete(struct bcm_phs_rule *psPhsRule); -static bool DerefPhsRule(B_UINT16 uiClsId, struct bcm_phs_classifier_table *psaClassifiertable, struct bcm_phs_rule *pstPhsRule); +static bool DerefPhsRule(B_UINT16 uiClsId, + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *pstPhsRule); -static UINT GetClassifierEntry(struct bcm_phs_classifier_table *pstClassifierTable, B_UINT32 uiClsid, enum bcm_phs_classifier_context eClsContext, struct bcm_phs_classifier_entry **ppstClassifierEntry); +static UINT GetClassifierEntry(struct bcm_phs_classifier_table *pstClassifierTable, + B_UINT32 uiClsid, + enum bcm_phs_classifier_context eClsContext, + struct bcm_phs_classifier_entry **ppstClassifierEntry); -static UINT GetPhsRuleEntry(struct bcm_phs_classifier_table *pstClassifierTable, B_UINT32 uiPHSI, enum bcm_phs_classifier_context eClsContext, struct bcm_phs_rule **ppstPhsRule); +static UINT GetPhsRuleEntry(struct bcm_phs_classifier_table *pstClassifierTable, + B_UINT32 uiPHSI, + enum bcm_phs_classifier_context eClsContext, + struct bcm_phs_rule **ppstPhsRule); static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesTable); -static int phs_compress(struct bcm_phs_rule *phs_members, unsigned char *in_buf, - unsigned char *out_buf, unsigned int *header_size, UINT *new_header_size); +static int phs_compress(struct bcm_phs_rule *phs_members, + unsigned char *in_buf, + unsigned char *out_buf, + unsigned int *header_size, + UINT *new_header_size); -static int verify_suppress_phsf(unsigned char *in_buffer, unsigned char *out_buffer, - unsigned char *phsf, unsigned char *phsm, unsigned int phss, unsigned int phsv, UINT *new_header_size); +static int verify_suppress_phsf(unsigned char *in_buffer, + unsigned char *out_buffer, + unsigned char *phsf, + unsigned char *phsm, + unsigned int phss, + unsigned int phsv, + UINT *new_header_size); -static int phs_decompress(unsigned char *in_buf, unsigned char *out_buf, - struct bcm_phs_rule *phs_rules, UINT *header_size); +static int phs_decompress(unsigned char *in_buf, + unsigned char *out_buf, + struct bcm_phs_rule *phs_rules, + UINT *header_size); static ULONG PhsCompress(void *pvContext, - B_UINT16 uiVcid, - B_UINT16 uiClsId, - void *pvInputBuffer, - void *pvOutputBuffer, - UINT *pOldHeaderSize, - UINT *pNewHeaderSize); + B_UINT16 uiVcid, + B_UINT16 uiClsId, + void *pvInputBuffer, + void *pvOutputBuffer, + UINT *pOldHeaderSize, + UINT *pNewHeaderSize); static ULONG PhsDeCompress(void *pvContext, - B_UINT16 uiVcid, - void *pvInputBuffer, - void *pvOutputBuffer, - UINT *pInHeaderSize, - UINT *pOutHeaderSize); + B_UINT16 uiVcid, + void *pvInputBuffer, + void *pvOutputBuffer, + UINT *pInHeaderSize, + UINT *pOutHeaderSize); #define IN #define OUT @@ -87,7 +121,8 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, struct sk_buff *newPacket = NULL; struct sk_buff *Packet = *pPacket; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "In PHSTransmit"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "In PHSTransmit"); if (!bEthCSSupport) BytesToRemove = ETH_HLEN; @@ -116,16 +151,22 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, (usPacketType == ETHERNET_FRAMETYPE_IPV6)) && (bHeaderSuppressionEnabled)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nTrying to PHS Compress Using Classifier rule 0x%X", uiClassifierRuleID); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, + DBG_LVL_ALL, + "\nTrying to PHS Compress Using Classifier rule 0x%X", + uiClassifierRuleID); unPHSNewPktHeaderLen = unPHSPktHdrBytesCopied; ulPhsStatus = PhsCompress(&Adapter->stBCMPhsContext, - Vcid, - uiClassifierRuleID, - pucPHSPktHdrInBuf, - pucPHSPktHdrOutBuf, - &unPhsOldHdrSize, - &unPHSNewPktHeaderLen); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nPHS Old header Size : %d New Header Size %d\n", unPhsOldHdrSize, unPHSNewPktHeaderLen); + Vcid, + uiClassifierRuleID, + pucPHSPktHdrInBuf, + pucPHSPktHdrOutBuf, + &unPhsOldHdrSize, + &unPHSNewPktHeaderLen); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, + DBG_LVL_ALL, + "\nPHS Old header Size : %d New Header Size %d\n", + unPhsOldHdrSize, unPHSNewPktHeaderLen); if (unPHSNewPktHeaderLen == unPhsOldHdrSize) { @@ -137,7 +178,9 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, if (ulPhsStatus == STATUS_PHS_COMPRESSED) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "PHS Sending packet Compressed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, + PHS_SEND, DBG_LVL_ALL, + "PHS Sending packet Compressed"); if (skb_cloned(Packet)) { newPacket = skb_copy(Packet, GFP_ATOMIC); @@ -147,22 +190,32 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, dev_kfree_skb(Packet); *pPacket = Packet = newPacket; - pucPHSPktHdrInBuf = Packet->data + BytesToRemove; + pucPHSPktHdrInBuf = + Packet->data + BytesToRemove; } - numBytesCompressed = unPhsOldHdrSize - (unPHSNewPktHeaderLen + PHSI_LEN); + numBytesCompressed = unPhsOldHdrSize - + (unPHSNewPktHeaderLen + PHSI_LEN); - memcpy(pucPHSPktHdrInBuf + numBytesCompressed, pucPHSPktHdrOutBuf, unPHSNewPktHeaderLen + PHSI_LEN); - memcpy(Packet->data + numBytesCompressed, Packet->data, BytesToRemove); + memcpy(pucPHSPktHdrInBuf + numBytesCompressed, + pucPHSPktHdrOutBuf, + unPHSNewPktHeaderLen + PHSI_LEN); + memcpy(Packet->data + numBytesCompressed, + Packet->data, BytesToRemove); skb_pull(Packet, numBytesCompressed); return STATUS_SUCCESS; } else { - /* if one byte headroom is not available, increase it through skb_cow */ + /* if one byte headroom is not available, + * increase it through skb_cow + */ if (!(skb_headroom(Packet) > 0)) { if (skb_cow(Packet, 1)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "SKB Cow Failed\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_PRINTK, + 0, 0, + "SKB Cow Failed\n"); return STATUS_FAILURE; } } @@ -179,7 +232,9 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, } else { if (!bHeaderSuppressionEnabled) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nHeader Suppression Disabled For SF: No PHS\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, + PHS_SEND, DBG_LVL_ALL, + "\nHeader Suppression Disabled For SF: No PHS\n"); return STATUS_SUCCESS; } @@ -190,11 +245,11 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, } int PHSReceive(struct bcm_mini_adapter *Adapter, - USHORT usVcid, - struct sk_buff *packet, - UINT *punPacketLen, - UCHAR *pucEthernetHdr, - UINT bHeaderSuppressionEnabled) + USHORT usVcid, + struct sk_buff *packet, + UINT *punPacketLen, + UCHAR *pucEthernetHdr, + UINT bHeaderSuppressionEnabled) { u32 nStandardPktHdrLen = 0; u32 nTotalsuppressedPktHdrBytes = 0; @@ -203,7 +258,9 @@ int PHSReceive(struct bcm_mini_adapter *Adapter, UINT TotalBytesAdded = 0; if (!bHeaderSuppressionEnabled) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "\nPhs Disabled for incoming packet"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, + DBG_LVL_ALL, + "\nPhs Disabled for incoming packet"); return ulPhsStatus; } @@ -212,27 +269,31 @@ int PHSReceive(struct bcm_mini_adapter *Adapter, /* Restore PHS suppressed header */ nStandardPktHdrLen = packet->len; ulPhsStatus = PhsDeCompress(&Adapter->stBCMPhsContext, - usVcid, - pucInBuff, - Adapter->ucaPHSPktRestoreBuf, - &nTotalsuppressedPktHdrBytes, - &nStandardPktHdrLen); - - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "\nSuppressed PktHdrLen : 0x%x Restored PktHdrLen : 0x%x", + usVcid, + pucInBuff, + Adapter->ucaPHSPktRestoreBuf, + &nTotalsuppressedPktHdrBytes, + &nStandardPktHdrLen); + + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, + "\nSuppressed PktHdrLen : 0x%x Restored PktHdrLen : 0x%x", nTotalsuppressedPktHdrBytes, nStandardPktHdrLen); if (ulPhsStatus != STATUS_PHS_COMPRESSED) { skb_pull(packet, 1); return STATUS_SUCCESS; } else { - TotalBytesAdded = nStandardPktHdrLen - nTotalsuppressedPktHdrBytes - PHSI_LEN; + TotalBytesAdded = nStandardPktHdrLen - + nTotalsuppressedPktHdrBytes - PHSI_LEN; if (TotalBytesAdded) { if (skb_headroom(packet) >= (SKB_RESERVE_ETHERNET_HEADER + TotalBytesAdded)) skb_push(packet, TotalBytesAdded); else { if (skb_cow(packet, skb_headroom(packet) + TotalBytesAdded)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "cow failed in receive\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_PRINTK, 0, 0, + "cow failed in receive\n"); return STATUS_FAILURE; } @@ -240,7 +301,8 @@ int PHSReceive(struct bcm_mini_adapter *Adapter, } } - memcpy(packet->data, Adapter->ucaPHSPktRestoreBuf, nStandardPktHdrLen); + memcpy(packet->data, Adapter->ucaPHSPktRestoreBuf, + nStandardPktHdrLen); } return STATUS_SUCCESS; @@ -250,8 +312,10 @@ void DumpFullPacket(UCHAR *pBuf, UINT nPktLen) { struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Dumping Data Packet"); - BCM_DEBUG_PRINT_BUFFER(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, pBuf, nPktLen); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, + "Dumping Data Packet"); + BCM_DEBUG_PRINT_BUFFER(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, + pBuf, nPktLen); } /* @@ -267,30 +331,38 @@ void DumpFullPacket(UCHAR *pBuf, UINT nPktLen) * TRUE(1) -If allocation of memory was successful. * FALSE -If allocation of memory fails. */ -int phs_init(struct bcm_phs_extension *pPhsdeviceExtension, struct bcm_mini_adapter *Adapter) +int phs_init(struct bcm_phs_extension *pPhsdeviceExtension, + struct bcm_mini_adapter *Adapter) { int i; struct bcm_phs_table *pstServiceFlowTable; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nPHS:phs_init function"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "\nPHS:phs_init function"); if (pPhsdeviceExtension->pstServiceFlowPhsRulesTable) return -EINVAL; - pPhsdeviceExtension->pstServiceFlowPhsRulesTable = kzalloc(sizeof(struct bcm_phs_table), GFP_KERNEL); + pPhsdeviceExtension->pstServiceFlowPhsRulesTable = + kzalloc(sizeof(struct bcm_phs_table), GFP_KERNEL); if (!pPhsdeviceExtension->pstServiceFlowPhsRulesTable) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAllocation ServiceFlowPhsRulesTable failed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, + "\nAllocation ServiceFlowPhsRulesTable failed"); return -ENOMEM; } pstServiceFlowTable = pPhsdeviceExtension->pstServiceFlowPhsRulesTable; for (i = 0; i < MAX_SERVICEFLOWS; i++) { - struct bcm_phs_entry sServiceFlow = pstServiceFlowTable->stSFList[i]; - - sServiceFlow.pstClassifierTable = kzalloc(sizeof(struct bcm_phs_classifier_table), GFP_KERNEL); + struct bcm_phs_entry sServiceFlow = + pstServiceFlowTable->stSFList[i]; + sServiceFlow.pstClassifierTable = + kzalloc(sizeof(struct bcm_phs_classifier_table), + GFP_KERNEL); if (!sServiceFlow.pstClassifierTable) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAllocation failed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "\nAllocation failed"); free_phs_serviceflow_rules(pPhsdeviceExtension->pstServiceFlowPhsRulesTable); pPhsdeviceExtension->pstServiceFlowPhsRulesTable = NULL; return -ENOMEM; @@ -299,22 +371,26 @@ int phs_init(struct bcm_phs_extension *pPhsdeviceExtension, struct bcm_mini_adap pPhsdeviceExtension->CompressedTxBuffer = kmalloc(PHS_BUFFER_SIZE, GFP_KERNEL); if (pPhsdeviceExtension->CompressedTxBuffer == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAllocation failed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "\nAllocation failed"); free_phs_serviceflow_rules(pPhsdeviceExtension->pstServiceFlowPhsRulesTable); pPhsdeviceExtension->pstServiceFlowPhsRulesTable = NULL; return -ENOMEM; } - pPhsdeviceExtension->UnCompressedRxBuffer = kmalloc(PHS_BUFFER_SIZE, GFP_KERNEL); + pPhsdeviceExtension->UnCompressedRxBuffer = + kmalloc(PHS_BUFFER_SIZE, GFP_KERNEL); if (pPhsdeviceExtension->UnCompressedRxBuffer == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAllocation failed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "\nAllocation failed"); kfree(pPhsdeviceExtension->CompressedTxBuffer); free_phs_serviceflow_rules(pPhsdeviceExtension->pstServiceFlowPhsRulesTable); pPhsdeviceExtension->pstServiceFlowPhsRulesTable = NULL; return -ENOMEM; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\n phs_init Successful"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "\n phs_init Successful"); return STATUS_SUCCESS; } @@ -353,10 +429,10 @@ int PhsCleanup(IN struct bcm_phs_extension *pPHSDeviceExt) * >0 Error. */ ULONG PhsUpdateClassifierRule(IN void *pvContext, - IN B_UINT16 uiVcid , - IN B_UINT16 uiClsId , - IN struct bcm_phs_rule *psPhsRule, - IN B_UINT8 u8AssociatedPHSI) + IN B_UINT16 uiVcid , + IN B_UINT16 uiClsId , + IN struct bcm_phs_rule *psPhsRule, + IN B_UINT8 u8AssociatedPHSI) { ULONG lStatus = 0; UINT nSFIndex = 0; @@ -364,10 +440,12 @@ ULONG PhsUpdateClassifierRule(IN void *pvContext, struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "PHS With Corr2 Changes\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "PHS With Corr2 Changes\n"); if (pDeviceExtension == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "Invalid Device Extension\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "Invalid Device Extension\n"); return ERR_PHS_INVALID_DEVICE_EXETENSION; } @@ -376,18 +454,22 @@ ULONG PhsUpdateClassifierRule(IN void *pvContext, /* Retrieve the SFID Entry Index for requested Service Flow */ nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { /* This is a new SF. Create a mapping entry for this */ lStatus = CreateSFToClassifierRuleMapping(uiVcid, uiClsId, - pDeviceExtension->pstServiceFlowPhsRulesTable, psPhsRule, u8AssociatedPHSI); + pDeviceExtension->pstServiceFlowPhsRulesTable, + psPhsRule, + u8AssociatedPHSI); return lStatus; } /* SF already Exists Add PHS Rule to existing SF */ lStatus = CreateClassiferToPHSRuleMapping(uiVcid, uiClsId, - pstServiceFlowEntry, psPhsRule, u8AssociatedPHSI); + pstServiceFlowEntry, + psPhsRule, + u8AssociatedPHSI); return lStatus; } @@ -408,7 +490,9 @@ ULONG PhsUpdateClassifierRule(IN void *pvContext, * 0 if successful, * >0 Error. */ -ULONG PhsDeletePHSRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT8 u8PHSI) +ULONG PhsDeletePHSRule(IN void *pvContext, + IN B_UINT16 uiVcid, + IN B_UINT8 u8PHSI) { UINT nSFIndex = 0, nClsidIndex = 0; struct bcm_phs_entry *pstServiceFlowEntry = NULL; @@ -416,14 +500,17 @@ ULONG PhsDeletePHSRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT8 u8PHSI struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "======>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "======>\n"); if (pDeviceExtension) { /* Retrieve the SFID Entry Index for requested Service Flow */ - nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, uiVcid, &pstServiceFlowEntry); + nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "SFID Match Failed\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "SFID Match Failed\n"); return ERR_SF_MATCH_FAIL; } @@ -439,8 +526,9 @@ ULONG PhsDeletePHSRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT8 u8PHSI if (0 == pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) kfree(pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule); - memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], 0, - sizeof(struct bcm_phs_classifier_entry)); + memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], + 0, + sizeof(struct bcm_phs_classifier_entry)); } } } @@ -471,18 +559,23 @@ ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT1 struct bcm_phs_entry *pstServiceFlowEntry = NULL; struct bcm_phs_classifier_entry *pstClassifierEntry = NULL; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_extension *pDeviceExtension = + (struct bcm_phs_extension *)pvContext; if (pDeviceExtension) { /* Retrieve the SFID Entry Index for requested Service Flow */ - nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, uiVcid, &pstServiceFlowEntry); + nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "SFID Match Failed\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "SFID Match Failed\n"); return ERR_SF_MATCH_FAIL; } nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, eActiveClassifierRuleContext, &pstClassifierEntry); + uiClsId, + eActiveClassifierRuleContext, + &pstClassifierEntry); if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { if (pstClassifierEntry->pstPhsRule) { @@ -492,15 +585,19 @@ ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT1 if (0 == pstClassifierEntry->pstPhsRule->u8RefCnt) kfree(pstClassifierEntry->pstPhsRule); } - memset(pstClassifierEntry, 0, sizeof(struct bcm_phs_classifier_entry)); + memset(pstClassifierEntry, 0, + sizeof(struct bcm_phs_classifier_entry)); } nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, eOldClassifierRuleContext, &pstClassifierEntry); + uiClsId, + eOldClassifierRuleContext, + &pstClassifierEntry); if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { kfree(pstClassifierEntry->pstPhsRule); - memset(pstClassifierEntry, 0, sizeof(struct bcm_phs_classifier_entry)); + memset(pstClassifierEntry, 0, + sizeof(struct bcm_phs_classifier_entry)); } } return 0; @@ -527,16 +624,19 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) struct bcm_phs_entry *pstServiceFlowEntry = NULL; struct bcm_phs_classifier_table *pstClassifierRulesTable = NULL; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_extension *pDeviceExtension = + (struct bcm_phs_extension *)pvContext; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "====>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "====>\n"); if (pDeviceExtension) { /* Retrieve the SFID Entry Index for requested Service Flow */ nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "SFID Match Failed\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "SFID Match Failed\n"); return ERR_SF_MATCH_FAIL; } @@ -553,7 +653,8 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule = NULL; } - memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], 0, sizeof(struct bcm_phs_classifier_entry)); + memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], + 0, sizeof(struct bcm_phs_classifier_entry)); if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule) { if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) @@ -564,7 +665,8 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule = NULL; } - memset(&pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex], 0, sizeof(struct bcm_phs_classifier_entry)); + memset(&pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex], + 0, sizeof(struct bcm_phs_classifier_entry)); } } pstServiceFlowEntry->bUsed = false; @@ -595,12 +697,12 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) * >0 Error. */ static ULONG PhsCompress(IN void *pvContext, - IN B_UINT16 uiVcid, - IN B_UINT16 uiClsId, - IN void *pvInputBuffer, - OUT void *pvOutputBuffer, - OUT UINT *pOldHeaderSize, - OUT UINT *pNewHeaderSize) + IN B_UINT16 uiVcid, + IN B_UINT16 uiClsId, + IN void *pvInputBuffer, + OUT void *pvOutputBuffer, + OUT UINT *pOldHeaderSize, + OUT UINT *pNewHeaderSize) { UINT nSFIndex = 0, nClsidIndex = 0; struct bcm_phs_entry *pstServiceFlowEntry = NULL; @@ -608,30 +710,36 @@ static ULONG PhsCompress(IN void *pvContext, struct bcm_phs_rule *pstPhsRule = NULL; ULONG lStatus = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_extension *pDeviceExtension = + (struct bcm_phs_extension *)pvContext; if (pDeviceExtension == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "Invalid Device Extension\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "Invalid Device Extension\n"); lStatus = STATUS_PHS_NOCOMPRESSION; return lStatus; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "Suppressing header\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "Suppressing header\n"); /* Retrieve the SFID Entry Index for requested Service Flow */ nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "SFID Match Failed\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "SFID Match Failed\n"); lStatus = STATUS_PHS_NOCOMPRESSION; return lStatus; } nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, eActiveClassifierRuleContext, &pstClassifierEntry); + uiClsId, eActiveClassifierRuleContext, + &pstClassifierEntry); if (nClsidIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "No PHS Rule Defined For Classifier\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "No PHS Rule Defined For Classifier\n"); lStatus = STATUS_PHS_NOCOMPRESSION; return lStatus; } @@ -639,7 +747,8 @@ static ULONG PhsCompress(IN void *pvContext, /* get rule from SF id,Cls ID pair and proceed */ pstPhsRule = pstClassifierEntry->pstPhsRule; if (!ValidatePHSRuleComplete(pstPhsRule)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "PHS Rule Defined For Classifier But Not Complete\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "PHS Rule Defined For Classifier But Not Complete\n"); lStatus = STATUS_PHS_NOCOMPRESSION; return lStatus; } @@ -649,7 +758,8 @@ static ULONG PhsCompress(IN void *pvContext, (PUCHAR)pvOutputBuffer, pOldHeaderSize, pNewHeaderSize); if (lStatus == STATUS_PHS_COMPRESSED) { - pstPhsRule->PHSModifiedBytes += *pOldHeaderSize - *pNewHeaderSize - 1; + pstPhsRule->PHSModifiedBytes += + *pOldHeaderSize - *pNewHeaderSize - 1; pstPhsRule->PHSModifiedNumPackets++; } else pstPhsRule->PHSErrorNumPackets++; @@ -676,52 +786,64 @@ static ULONG PhsCompress(IN void *pvContext, * >0 Error. */ static ULONG PhsDeCompress(IN void *pvContext, - IN B_UINT16 uiVcid, - IN void *pvInputBuffer, - OUT void *pvOutputBuffer, - OUT UINT *pInHeaderSize, - OUT UINT *pOutHeaderSize) + IN B_UINT16 uiVcid, + IN void *pvInputBuffer, + OUT void *pvOutputBuffer, + OUT UINT *pInHeaderSize, + OUT UINT *pOutHeaderSize) { UINT nSFIndex = 0, nPhsRuleIndex = 0; struct bcm_phs_entry *pstServiceFlowEntry = NULL; struct bcm_phs_rule *pstPhsRule = NULL; UINT phsi; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_extension *pDeviceExtension = + (struct bcm_phs_extension *)pvContext; *pInHeaderSize = 0; if (pDeviceExtension == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "Invalid Device Extension\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, + DBG_LVL_ALL, "Invalid Device Extension\n"); return ERR_PHS_INVALID_DEVICE_EXETENSION; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "Restoring header\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, + "Restoring header\n"); phsi = *((unsigned char *)(pvInputBuffer)); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "PHSI To Be Used For restore : %x\n", phsi); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, + "PHSI To Be Used For restore : %x\n", phsi); if (phsi == UNCOMPRESSED_PACKET) return STATUS_PHS_NOCOMPRESSION; /* Retrieve the SFID Entry Index for requested Service Flow */ nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "SFID Match Failed During Lookup\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, + DBG_LVL_ALL, + "SFID Match Failed During Lookup\n"); return ERR_SF_MATCH_FAIL; } - nPhsRuleIndex = GetPhsRuleEntry(pstServiceFlowEntry->pstClassifierTable, phsi, - eActiveClassifierRuleContext, &pstPhsRule); + nPhsRuleIndex = GetPhsRuleEntry(pstServiceFlowEntry->pstClassifierTable, + phsi, + eActiveClassifierRuleContext, + &pstPhsRule); if (nPhsRuleIndex == PHS_INVALID_TABLE_INDEX) { /* Phs Rule does not exist in active rules table. Lets try in the old rules table. */ nPhsRuleIndex = GetPhsRuleEntry(pstServiceFlowEntry->pstClassifierTable, - phsi, eOldClassifierRuleContext, &pstPhsRule); + phsi, + eOldClassifierRuleContext, + &pstPhsRule); if (nPhsRuleIndex == PHS_INVALID_TABLE_INDEX) return ERR_PHSRULE_MATCH_FAIL; } *pInHeaderSize = phs_decompress((PUCHAR)pvInputBuffer, - (PUCHAR)pvOutputBuffer, pstPhsRule, pOutHeaderSize); + (PUCHAR)pvOutputBuffer, + pstPhsRule, + pOutHeaderSize); pstPhsRule->PHSModifiedBytes += *pOutHeaderSize - *pInHeaderSize - 1; @@ -745,12 +867,15 @@ static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesT int i, j; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "=======>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "=======>\n"); if (psServiceFlowRulesTable) { for (i = 0; i < MAX_SERVICEFLOWS; i++) { - struct bcm_phs_entry stServiceFlowEntry = psServiceFlowRulesTable->stSFList[i]; - struct bcm_phs_classifier_table *pstClassifierRulesTable = stServiceFlowEntry.pstClassifierTable; + struct bcm_phs_entry stServiceFlowEntry = + psServiceFlowRulesTable->stSFList[i]; + struct bcm_phs_classifier_table *pstClassifierRulesTable = + stServiceFlowEntry.pstClassifierTable; if (pstClassifierRulesTable) { for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { @@ -777,7 +902,8 @@ static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesT } } kfree(pstClassifierRulesTable); - stServiceFlowEntry.pstClassifierTable = pstClassifierRulesTable = NULL; + stServiceFlowEntry.pstClassifierTable = + pstClassifierRulesTable = NULL; } } } @@ -809,15 +935,16 @@ static bool ValidatePHSRuleComplete(IN struct bcm_phs_rule *psPhsRule) } UINT GetServiceFlowEntry(IN struct bcm_phs_table *psServiceFlowTable, - IN B_UINT16 uiVcid, - struct bcm_phs_entry **ppstServiceFlowEntry) + IN B_UINT16 uiVcid, + struct bcm_phs_entry **ppstServiceFlowEntry) { int i; for (i = 0; i < MAX_SERVICEFLOWS; i++) { if (psServiceFlowTable->stSFList[i].bUsed) { if (psServiceFlowTable->stSFList[i].uiVcid == uiVcid) { - *ppstServiceFlowEntry = &psServiceFlowTable->stSFList[i]; + *ppstServiceFlowEntry = + &psServiceFlowTable->stSFList[i]; return i; } } @@ -828,8 +955,9 @@ UINT GetServiceFlowEntry(IN struct bcm_phs_table *psServiceFlowTable, } static UINT GetClassifierEntry(IN struct bcm_phs_classifier_table *pstClassifierTable, - IN B_UINT32 uiClsid, enum bcm_phs_classifier_context eClsContext, - OUT struct bcm_phs_classifier_entry **ppstClassifierEntry) + IN B_UINT32 uiClsid, + enum bcm_phs_classifier_context eClsContext, + OUT struct bcm_phs_classifier_entry **ppstClassifierEntry) { int i; struct bcm_phs_classifier_entry *psClassifierRules = NULL; @@ -837,9 +965,11 @@ static UINT GetClassifierEntry(IN struct bcm_phs_classifier_table *pstClassifier for (i = 0; i < MAX_PHSRULE_PER_SF; i++) { if (eClsContext == eActiveClassifierRuleContext) - psClassifierRules = &pstClassifierTable->stActivePhsRulesList[i]; + psClassifierRules = + &pstClassifierTable->stActivePhsRulesList[i]; else - psClassifierRules = &pstClassifierTable->stOldPhsRulesList[i]; + psClassifierRules = + &pstClassifierTable->stOldPhsRulesList[i]; if (psClassifierRules->bUsed) { if (psClassifierRules->uiClassifierRuleId == uiClsid) { @@ -854,17 +984,20 @@ static UINT GetClassifierEntry(IN struct bcm_phs_classifier_table *pstClassifier } static UINT GetPhsRuleEntry(IN struct bcm_phs_classifier_table *pstClassifierTable, - IN B_UINT32 uiPHSI, enum bcm_phs_classifier_context eClsContext, - OUT struct bcm_phs_rule **ppstPhsRule) + IN B_UINT32 uiPHSI, + enum bcm_phs_classifier_context eClsContext, + OUT struct bcm_phs_rule **ppstPhsRule) { int i; struct bcm_phs_classifier_entry *pstClassifierRule = NULL; for (i = 0; i < MAX_PHSRULE_PER_SF; i++) { if (eClsContext == eActiveClassifierRuleContext) - pstClassifierRule = &pstClassifierTable->stActivePhsRulesList[i]; + pstClassifierRule = + &pstClassifierTable->stActivePhsRulesList[i]; else - pstClassifierRule = &pstClassifierTable->stOldPhsRulesList[i]; + pstClassifierRule = + &pstClassifierTable->stOldPhsRulesList[i]; if (pstClassifierRule->bUsed) { if (pstClassifierRule->u8PHSI == uiPHSI) { @@ -878,10 +1011,11 @@ static UINT GetPhsRuleEntry(IN struct bcm_phs_classifier_table *pstClassifierTab return PHS_INVALID_TABLE_INDEX; } -static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, IN B_UINT16 uiClsId, - IN struct bcm_phs_table *psServiceFlowTable, - struct bcm_phs_rule *psPhsRule, - B_UINT8 u8AssociatedPHSI) +static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, + IN B_UINT16 uiClsId, + IN struct bcm_phs_table *psServiceFlowTable, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI) { struct bcm_phs_classifier_table *psaClassifiertable = NULL; UINT uiStatus = 0; @@ -899,8 +1033,10 @@ static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, IN B_UINT16 uiC if (!bFreeEntryFound) return ERR_SFTABLE_FULL; - psaClassifiertable = psServiceFlowTable->stSFList[iSfIndex].pstClassifierTable; - uiStatus = CreateClassifierPHSRule(uiClsId, psaClassifiertable, psPhsRule, + psaClassifiertable = + psServiceFlowTable->stSFList[iSfIndex].pstClassifierTable; + uiStatus = + CreateClassifierPHSRule(uiClsId, psaClassifiertable, psPhsRule, eActiveClassifierRuleContext, u8AssociatedPHSI); if (uiStatus == PHS_SUCCESS) { /* Add entry at free index to the SF */ @@ -912,10 +1048,10 @@ static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, IN B_UINT16 uiC } static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, - IN B_UINT16 uiClsId, - IN struct bcm_phs_entry *pstServiceFlowEntry, - struct bcm_phs_rule *psPhsRule, - B_UINT8 u8AssociatedPHSI) + IN B_UINT16 uiClsId, + IN struct bcm_phs_entry *pstServiceFlowEntry, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI) { struct bcm_phs_classifier_entry *pstClassifierEntry = NULL; UINT uiStatus = PHS_SUCCESS; @@ -925,7 +1061,8 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, psaClassifiertable = pstServiceFlowEntry->pstClassifierTable; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "==>"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "==>"); /* Check if the supplied Classifier already exists */ nClassifierIndex = GetClassifierEntry( @@ -941,9 +1078,9 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, */ uiStatus = CreateClassifierPHSRule(uiClsId, psaClassifiertable, - psPhsRule, - eActiveClassifierRuleContext, - u8AssociatedPHSI); + psPhsRule, + eActiveClassifierRuleContext, + u8AssociatedPHSI); return uiStatus; } @@ -964,18 +1101,21 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, if (psPhsRule->u8PHSFLength) { /* update PHSF */ memcpy(pstClassifierEntry->pstPhsRule->u8PHSF, - psPhsRule->u8PHSF, MAX_PHS_LENGTHS); + psPhsRule->u8PHSF, + MAX_PHS_LENGTHS); } if (psPhsRule->u8PHSFLength) { /* update PHSFLen */ - pstClassifierEntry->pstPhsRule->u8PHSFLength = psPhsRule->u8PHSFLength; + pstClassifierEntry->pstPhsRule->u8PHSFLength = + psPhsRule->u8PHSFLength; } if (psPhsRule->u8PHSMLength) { /* update PHSM */ memcpy(pstClassifierEntry->pstPhsRule->u8PHSM, - psPhsRule->u8PHSM, MAX_PHS_LENGTHS); + psPhsRule->u8PHSM, + MAX_PHS_LENGTHS); } if (psPhsRule->u8PHSMLength) { @@ -986,25 +1126,29 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, if (psPhsRule->u8PHSS) { /* update PHSS */ - pstClassifierEntry->pstPhsRule->u8PHSS = psPhsRule->u8PHSS; + pstClassifierEntry->pstPhsRule->u8PHSS = + psPhsRule->u8PHSS; } /* update PHSV */ pstClassifierEntry->pstPhsRule->u8PHSV = psPhsRule->u8PHSV; } else { /* A new rule is being set for this classifier. */ - uiStatus = UpdateClassifierPHSRule(uiClsId, pstClassifierEntry, - psaClassifiertable, psPhsRule, u8AssociatedPHSI); + uiStatus = UpdateClassifierPHSRule(uiClsId, + pstClassifierEntry, + psaClassifiertable, + psPhsRule, + u8AssociatedPHSI); } return uiStatus; } static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, - struct bcm_phs_classifier_table *psaClassifiertable, - struct bcm_phs_rule *psPhsRule, - enum bcm_phs_classifier_context eClsContext, - B_UINT8 u8AssociatedPHSI) + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *psPhsRule, + enum bcm_phs_classifier_context eClsContext, + B_UINT8 u8AssociatedPHSI) { UINT iClassifierIndex = 0; bool bFreeEntryFound = false; @@ -1012,7 +1156,8 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, UINT nStatus = PHS_SUCCESS; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "Inside CreateClassifierPHSRule"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, + "Inside CreateClassifierPHSRule"); if (psaClassifiertable == NULL) return ERR_INVALID_CLASSIFIERTABLE_FOR_SF; @@ -1023,9 +1168,10 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, * old rules table replace it. */ - iClassifierIndex = - GetClassifierEntry(psaClassifiertable, uiClsId, - eClsContext, &psClassifierRules); + iClassifierIndex = GetClassifierEntry(psaClassifiertable, + uiClsId, + eClsContext, + &psClassifierRules); if (iClassifierIndex != PHS_INVALID_TABLE_INDEX) { /* @@ -1061,8 +1207,10 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, if (psaClassifiertable->uiOldestPhsRuleIndex >= MAX_PHSRULE_PER_SF) psaClassifiertable->uiOldestPhsRuleIndex = 0; - iClassifierIndex = psaClassifiertable->uiOldestPhsRuleIndex; - psClassifierRules = &psaClassifiertable->stOldPhsRulesList[iClassifierIndex]; + iClassifierIndex = + psaClassifiertable->uiOldestPhsRuleIndex; + psClassifierRules = + &psaClassifiertable->stOldPhsRulesList[iClassifierIndex]; (psaClassifiertable->uiOldestPhsRuleIndex)++; } @@ -1072,7 +1220,9 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, if (psClassifierRules->pstPhsRule == NULL) { - psClassifierRules->pstPhsRule = kmalloc(sizeof(struct bcm_phs_rule), GFP_KERNEL); + psClassifierRules->pstPhsRule = + kmalloc(sizeof(struct bcm_phs_rule), + GFP_KERNEL); if (NULL == psClassifierRules->pstPhsRule) return ERR_PHSRULE_MEMALLOC_FAIL; @@ -1081,22 +1231,27 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, psClassifierRules->bUsed = TRUE; psClassifierRules->uiClassifierRuleId = uiClsId; psClassifierRules->u8PHSI = psPhsRule->u8PHSI; - psClassifierRules->bUnclassifiedPHSRule = psPhsRule->bUnclassifiedPHSRule; + psClassifierRules->bUnclassifiedPHSRule = + psPhsRule->bUnclassifiedPHSRule; /* Update The PHS rule */ - memcpy(psClassifierRules->pstPhsRule, psPhsRule, sizeof(struct bcm_phs_rule)); + memcpy(psClassifierRules->pstPhsRule, psPhsRule, + sizeof(struct bcm_phs_rule)); } else - nStatus = UpdateClassifierPHSRule(uiClsId, psClassifierRules, - psaClassifiertable, psPhsRule, u8AssociatedPHSI); + nStatus = UpdateClassifierPHSRule(uiClsId, + psClassifierRules, + psaClassifiertable, + psPhsRule, + u8AssociatedPHSI); return nStatus; } static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, - IN struct bcm_phs_classifier_entry *pstClassifierEntry, - struct bcm_phs_classifier_table *psaClassifiertable, - struct bcm_phs_rule *psPhsRule, - B_UINT8 u8AssociatedPHSI) + IN struct bcm_phs_classifier_entry *pstClassifierEntry, + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI) { struct bcm_phs_rule *pstAddPhsRule = NULL; UINT nPhsRuleIndex = 0; @@ -1111,27 +1266,36 @@ static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, /* Step 2 Search if there is a PHS Rule with u8AssociatedPHSI in Classifier table for this SF */ nPhsRuleIndex = GetPhsRuleEntry(psaClassifiertable, u8AssociatedPHSI, - eActiveClassifierRuleContext, &pstAddPhsRule); + eActiveClassifierRuleContext, + &pstAddPhsRule); if (PHS_INVALID_TABLE_INDEX == nPhsRuleIndex) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nAdding New PHSRuleEntry For Classifier"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, + "\nAdding New PHSRuleEntry For Classifier"); if (psPhsRule->u8PHSI == 0) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nError PHSI is Zero\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "\nError PHSI is Zero\n"); return ERR_PHS_INVALID_PHS_RULE; } /* Step 2.a PHS Rule Does Not Exist .Create New PHS Rule for uiClsId */ if (false == bPHSRuleOrphaned) { - pstClassifierEntry->pstPhsRule = kmalloc(sizeof(struct bcm_phs_rule), GFP_KERNEL); + pstClassifierEntry->pstPhsRule = + kmalloc(sizeof(struct bcm_phs_rule), + GFP_KERNEL); if (NULL == pstClassifierEntry->pstPhsRule) return ERR_PHSRULE_MEMALLOC_FAIL; } - memcpy(pstClassifierEntry->pstPhsRule, psPhsRule, sizeof(struct bcm_phs_rule)); + memcpy(pstClassifierEntry->pstPhsRule, psPhsRule, + sizeof(struct bcm_phs_rule)); } else { /* Step 2.b PHS Rule Exists Tie uiClsId with the existing PHS Rule */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nTying Classifier to Existing PHS Rule"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, + "\nTying Classifier to Existing PHS Rule"); if (bPHSRuleOrphaned) { kfree(pstClassifierEntry->pstPhsRule); pstClassifierEntry->pstPhsRule = NULL; @@ -1143,12 +1307,15 @@ static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, pstClassifierEntry->u8PHSI = pstClassifierEntry->pstPhsRule->u8PHSI; pstClassifierEntry->uiClassifierRuleId = uiClsId; pstClassifierEntry->pstPhsRule->u8RefCnt++; - pstClassifierEntry->bUnclassifiedPHSRule = pstClassifierEntry->pstPhsRule->bUnclassifiedPHSRule; + pstClassifierEntry->bUnclassifiedPHSRule = + pstClassifierEntry->pstPhsRule->bUnclassifiedPHSRule; return PHS_SUCCESS; } -static bool DerefPhsRule(IN B_UINT16 uiClsId, struct bcm_phs_classifier_table *psaClassifiertable, struct bcm_phs_rule *pstPhsRule) +static bool DerefPhsRule(IN B_UINT16 uiClsId, + struct bcm_phs_classifier_table *psaClassifiertable, + struct bcm_phs_rule *pstPhsRule) { if (pstPhsRule == NULL) return false; @@ -1172,7 +1339,8 @@ void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension) int i, j, k, l; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n Dumping PHS Rules :\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, + "\n Dumping PHS Rules :\n"); for (i = 0; i < MAX_SERVICEFLOWS; i++) { @@ -1238,9 +1406,9 @@ void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension) * 0 -If PHS rule is NULL.If PHSI is 0 indicateing packet as uncompressed. */ static int phs_decompress(unsigned char *in_buf, - unsigned char *out_buf, - struct bcm_phs_rule *decomp_phs_rules, - UINT *header_size) + unsigned char *out_buf, + struct bcm_phs_rule *decomp_phs_rules, + UINT *header_size) { int phss, size = 0; struct bcm_phs_rule *tmp_memb; @@ -1251,7 +1419,8 @@ static int phs_decompress(unsigned char *in_buf, in_buf++; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "====>\n"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, + "====>\n"); *header_size = 0; if (decomp_phs_rules == NULL) @@ -1278,11 +1447,15 @@ static int phs_decompress(unsigned char *in_buf, if (bit == SUPPRESS) { *out_buf = *phsf; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "\nDECOMP:In phss %d phsf %d output %d", + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, + DBG_LVL_ALL, + "\nDECOMP:In phss %d phsf %d output %d", phss, *phsf, *out_buf); } else { *out_buf = *in_buf; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, DBG_LVL_ALL, "\nDECOMP:In phss %d input %d output %d", + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_RECEIVE, + DBG_LVL_ALL, + "\nDECOMP:In phss %d input %d output %d", phss, *in_buf, *out_buf); in_buf++; size++; @@ -1333,7 +1506,8 @@ static int phs_compress(struct bcm_phs_rule *phs_rule, struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (phs_rule == NULL) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nphs_compress(): phs_rule null!"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "\nphs_compress(): phs_rule null!"); *out_buf = ZERO_PHSI; return STATUS_PHS_NOCOMPRESSION; } @@ -1351,10 +1525,13 @@ static int phs_compress(struct bcm_phs_rule *phs_rule, if (suppress == STATUS_PHS_COMPRESSED) { *old_addr = (unsigned char)phs_rule->u8PHSI; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nCOMP:In phs_compress phsi %d", phs_rule->u8PHSI); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "\nCOMP:In phs_compress phsi %d", + phs_rule->u8PHSI); } else { *old_addr = ZERO_PHSI; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nCOMP:In phs_compress PHSV Verification failed"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "\nCOMP:In phs_compress PHSV Verification failed"); } return suppress; @@ -1391,7 +1568,8 @@ static int verify_suppress_phsf(unsigned char *in_buffer, int bit, i = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nCOMP:In verify_phsf PHSM - 0x%X", *phsm); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "\nCOMP:In verify_phsf PHSM - 0x%X", *phsm); if (phss > (*new_header_size)) phss = *new_header_size; @@ -1443,7 +1621,8 @@ static int verify_suppress_phsf(unsigned char *in_buffer, phsm++; } } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "\nCOMP:In verify_phsf success"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + "\nCOMP:In verify_phsf success"); *new_header_size = size; return STATUS_PHS_COMPRESSED; } -- cgit From 20d174e2b4cde89322763b90dd85cf7d7abbb737 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:55 +0200 Subject: Staging: bcm: PHSModule.c: Outsourced debug printing in own function Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 95 ++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 79d84d712bf9..a6f0bf48ac90 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1334,9 +1334,61 @@ static bool DerefPhsRule(IN B_UINT16 uiClsId, return false; } +static void phsrules_per_sf_dbg_print(struct bcm_mini_adapter *ad, + struct bcm_phs_entry *st_serv_flow_entry) +{ + int j, l; + struct bcm_phs_classifier_entry st_cls_entry; + + for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { + + for (l = 0; l < 2; l++) { + + if (l == 0) { + st_cls_entry = st_serv_flow_entry->pstClassifierTable->stActivePhsRulesList[j]; + if (st_cls_entry.bUsed) + BCM_DEBUG_PRINT(ad, + DBG_TYPE_OTHERS, + DUMP_INFO, + (DBG_LVL_ALL | DBG_NO_FUNC_PRINT), + "\n Active PHS Rule :\n"); + } else { + st_cls_entry = st_serv_flow_entry->pstClassifierTable->stOldPhsRulesList[j]; + if (st_cls_entry.bUsed) + BCM_DEBUG_PRINT(ad, + DBG_TYPE_OTHERS, + DUMP_INFO, + (DBG_LVL_ALL | DBG_NO_FUNC_PRINT), + "\n Old PHS Rule :\n"); + } + + if (st_cls_entry.bUsed) { + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n VCID : %#X", st_serv_flow_entry->uiVcid); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n ClassifierID : %#X", st_cls_entry.uiClassifierRuleId); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSRuleID : %#X", st_cls_entry.u8PHSI); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n****************PHS Rule********************\n"); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSI : %#X", st_cls_entry.pstPhsRule->u8PHSI); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSFLength : %#X ", st_cls_entry.pstPhsRule->u8PHSFLength); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSF : "); + + for (k = 0 ; k < st_cls_entry.pstPhsRule->u8PHSFLength; k++) + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry.pstPhsRule->u8PHSF[k]); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSMLength : %#X", st_cls_entry.pstPhsRule->u8PHSMLength); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSM :"); + + for (k = 0; k < st_cls_entry.pstPhsRule->u8PHSMLength; k++) + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry.pstPhsRule->u8PHSM[k]); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSS : %#X ", st_cls_entry.pstPhsRule->u8PHSS); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSV : %#X", st_cls_entry.pstPhsRule->u8PHSV); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n********************************************\n"); + } + } + } +} + void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension) { - int i, j, k, l; + int i; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, @@ -1346,46 +1398,11 @@ void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension) struct bcm_phs_entry stServFlowEntry = pDeviceExtension->pstServiceFlowPhsRulesTable->stSFList[i]; - if (stServFlowEntry.bUsed) { - - for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { - for (l = 0; l < 2; l++) { - struct bcm_phs_classifier_entry stClsEntry; + if (!stServFlowEntry.bUsed) + continue; - if (l == 0) { - stClsEntry = stServFlowEntry.pstClassifierTable->stActivePhsRulesList[j]; - if (stClsEntry.bUsed) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n Active PHS Rule :\n"); - } else { - stClsEntry = stServFlowEntry.pstClassifierTable->stOldPhsRulesList[j]; - if (stClsEntry.bUsed) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n Old PHS Rule :\n"); - } - - if (stClsEntry.bUsed) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n VCID : %#X", stServFlowEntry.uiVcid); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n ClassifierID : %#X", stClsEntry.uiClassifierRuleId); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSRuleID : %#X", stClsEntry.u8PHSI); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n****************PHS Rule********************\n"); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSI : %#X", stClsEntry.pstPhsRule->u8PHSI); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSFLength : %#X ", stClsEntry.pstPhsRule->u8PHSFLength); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSF : "); - - for (k = 0 ; k < stClsEntry.pstPhsRule->u8PHSFLength; k++) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", stClsEntry.pstPhsRule->u8PHSF[k]); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSMLength : %#X", stClsEntry.pstPhsRule->u8PHSMLength); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSM :"); - - for (k = 0; k < stClsEntry.pstPhsRule->u8PHSMLength; k++) - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", stClsEntry.pstPhsRule->u8PHSM[k]); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSS : %#X ", stClsEntry.pstPhsRule->u8PHSS); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSV : %#X", stClsEntry.pstPhsRule->u8PHSV); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n********************************************\n"); - } - } - } - } + phsrules_per_sf_dbg_print(Adapter, &stServFlowEntry); } } -- cgit From c50e0b5c77cda8332cf44bd4245d101cdae91e3f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:56 +0200 Subject: Staging: bcm: PHSModule.c: Outsourced debug printing for phs classifier entry Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 47 +++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index a6f0bf48ac90..f726f2e446f8 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1334,6 +1334,32 @@ static bool DerefPhsRule(IN B_UINT16 uiClsId, return false; } +static void dbg_print_st_cls_entry(struct bcm_mini_adapter *ad, + struct bcm_phs_entry *st_serv_flow_entry, + struct bcm_phs_classifier_entry *st_cls_entry) +{ + int k; + + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n VCID : %#X", st_serv_flow_entry->uiVcid); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n ClassifierID : %#X", st_cls_entry->uiClassifierRuleId); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSRuleID : %#X", st_cls_entry->u8PHSI); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n****************PHS Rule********************\n"); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSI : %#X", st_cls_entry->pstPhsRule->u8PHSI); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSFLength : %#X ", st_cls_entry->pstPhsRule->u8PHSFLength); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSF : "); + + for (k = 0 ; k < st_cls_entry->pstPhsRule->u8PHSFLength; k++) + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry->pstPhsRule->u8PHSF[k]); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSMLength : %#X", st_cls_entry->pstPhsRule->u8PHSMLength); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSM :"); + + for (k = 0; k < st_cls_entry->pstPhsRule->u8PHSMLength; k++) + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry->pstPhsRule->u8PHSM[k]); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSS : %#X ", st_cls_entry->pstPhsRule->u8PHSS); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSV : %#X", st_cls_entry->pstPhsRule->u8PHSV); + BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n********************************************\n"); +} + static void phsrules_per_sf_dbg_print(struct bcm_mini_adapter *ad, struct bcm_phs_entry *st_serv_flow_entry) { @@ -1363,24 +1389,9 @@ static void phsrules_per_sf_dbg_print(struct bcm_mini_adapter *ad, } if (st_cls_entry.bUsed) { - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n VCID : %#X", st_serv_flow_entry->uiVcid); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n ClassifierID : %#X", st_cls_entry.uiClassifierRuleId); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSRuleID : %#X", st_cls_entry.u8PHSI); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n****************PHS Rule********************\n"); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSI : %#X", st_cls_entry.pstPhsRule->u8PHSI); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSFLength : %#X ", st_cls_entry.pstPhsRule->u8PHSFLength); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSF : "); - - for (k = 0 ; k < st_cls_entry.pstPhsRule->u8PHSFLength; k++) - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry.pstPhsRule->u8PHSF[k]); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSMLength : %#X", st_cls_entry.pstPhsRule->u8PHSMLength); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSM :"); - - for (k = 0; k < st_cls_entry.pstPhsRule->u8PHSMLength; k++) - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "%#X ", st_cls_entry.pstPhsRule->u8PHSM[k]); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSS : %#X ", st_cls_entry.pstPhsRule->u8PHSS); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, (DBG_LVL_ALL|DBG_NO_FUNC_PRINT), "\n PHSV : %#X", st_cls_entry.pstPhsRule->u8PHSV); - BCM_DEBUG_PRINT(ad, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "\n********************************************\n"); + dbg_print_st_cls_entry(ad, + st_serv_flow_entry, + &st_cls_entry); } } } -- cgit From 413852b6d4f4944c9c973029473cc0bc6ec82216 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:57 +0200 Subject: Staging: bcm: PHSModule.c: Replaced member accessing with variable in PhsDeletePHSRule() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index f726f2e446f8..55421efafb9b 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -499,6 +499,7 @@ ULONG PhsDeletePHSRule(IN void *pvContext, struct bcm_phs_classifier_table *pstClassifierRulesTable = NULL; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_classifier_entry *curr_entry; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "======>\n"); @@ -517,16 +518,17 @@ ULONG PhsDeletePHSRule(IN void *pvContext, pstClassifierRulesTable = pstServiceFlowEntry->pstClassifierTable; if (pstClassifierRulesTable) { for (nClsidIndex = 0; nClsidIndex < MAX_PHSRULE_PER_SF; nClsidIndex++) { - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].bUsed && pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule) { - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8PHSI == u8PHSI) { + curr_entry = &pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex]; + if (curr_entry->bUsed && curr_entry->pstPhsRule) { + if (curr_entry->pstPhsRule->u8PHSI == u8PHSI) { - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; + if (curr_entry->pstPhsRule->u8RefCnt) + curr_entry->pstPhsRule->u8RefCnt--; - if (0 == pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule); + if (0 == curr_entry->pstPhsRule->u8RefCnt) + kfree(curr_entry->pstPhsRule); - memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], + memset(curr_entry, 0, sizeof(struct bcm_phs_classifier_entry)); } -- cgit From 31f4f3fb15cd3e80cd162e4bf5524190be41d61d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:58 +0200 Subject: Staging: bcm: PHSModule.c: Replaced nested if statements with logical AND concatenation of the conditions Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 55421efafb9b..89cc90c4bfbe 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -519,19 +519,19 @@ ULONG PhsDeletePHSRule(IN void *pvContext, if (pstClassifierRulesTable) { for (nClsidIndex = 0; nClsidIndex < MAX_PHSRULE_PER_SF; nClsidIndex++) { curr_entry = &pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex]; - if (curr_entry->bUsed && curr_entry->pstPhsRule) { - if (curr_entry->pstPhsRule->u8PHSI == u8PHSI) { + if (curr_entry->bUsed && + curr_entry->pstPhsRule && + (curr_entry->pstPhsRule->u8PHSI == u8PHSI)) { - if (curr_entry->pstPhsRule->u8RefCnt) - curr_entry->pstPhsRule->u8RefCnt--; + if (curr_entry->pstPhsRule->u8RefCnt) + curr_entry->pstPhsRule->u8RefCnt--; - if (0 == curr_entry->pstPhsRule->u8RefCnt) - kfree(curr_entry->pstPhsRule); + if (0 == curr_entry->pstPhsRule->u8RefCnt) + kfree(curr_entry->pstPhsRule); - memset(curr_entry, - 0, - sizeof(struct bcm_phs_classifier_entry)); - } + memset(curr_entry, + 0, + sizeof(struct bcm_phs_classifier_entry)); } } } -- cgit From 525afdd1703e238fef30efb802df1a017207432a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:42:59 +0200 Subject: Staging: bcm: PHSModule.c: Reduced indentation level by using jump label Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 65 +++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 89cc90c4bfbe..a11474c51fa9 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -564,44 +564,47 @@ ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT1 struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; - if (pDeviceExtension) { - /* Retrieve the SFID Entry Index for requested Service Flow */ - nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); - if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, - DBG_LVL_ALL, "SFID Match Failed\n"); - return ERR_SF_MATCH_FAIL; - } + if (!pDeviceExtension) + goto out; + + /* Retrieve the SFID Entry Index for requested Service Flow */ + nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, + uiVcid, &pstServiceFlowEntry); + if (nSFIndex == PHS_INVALID_TABLE_INDEX) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "SFID Match Failed\n"); + return ERR_SF_MATCH_FAIL; + } - nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, - eActiveClassifierRuleContext, - &pstClassifierEntry); + nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, + uiClsId, + eActiveClassifierRuleContext, + &pstClassifierEntry); - if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { - if (pstClassifierEntry->pstPhsRule) { - if (pstClassifierEntry->pstPhsRule->u8RefCnt) - pstClassifierEntry->pstPhsRule->u8RefCnt--; + if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { + if (pstClassifierEntry->pstPhsRule) { + if (pstClassifierEntry->pstPhsRule->u8RefCnt) + pstClassifierEntry->pstPhsRule->u8RefCnt--; - if (0 == pstClassifierEntry->pstPhsRule->u8RefCnt) - kfree(pstClassifierEntry->pstPhsRule); - } - memset(pstClassifierEntry, 0, - sizeof(struct bcm_phs_classifier_entry)); + if (0 == pstClassifierEntry->pstPhsRule->u8RefCnt) + kfree(pstClassifierEntry->pstPhsRule); } + memset(pstClassifierEntry, 0, + sizeof(struct bcm_phs_classifier_entry)); + } - nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, - eOldClassifierRuleContext, - &pstClassifierEntry); + nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, + uiClsId, + eOldClassifierRuleContext, + &pstClassifierEntry); - if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { - kfree(pstClassifierEntry->pstPhsRule); - memset(pstClassifierEntry, 0, - sizeof(struct bcm_phs_classifier_entry)); - } + if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { + kfree(pstClassifierEntry->pstPhsRule); + memset(pstClassifierEntry, 0, + sizeof(struct bcm_phs_classifier_entry)); } + +out: return 0; } -- cgit From 93cc6ae8b3d28f6c4918e1783da416a6454bea2d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:00 +0200 Subject: Staging: bcm: PHSModule.c: Shortened lines Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index a11474c51fa9..7ced228a155d 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -576,12 +576,14 @@ ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT1 return ERR_SF_MATCH_FAIL; } - nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, - eActiveClassifierRuleContext, - &pstClassifierEntry); - - if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { + nClsidIndex = + GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, + uiClsId, + eActiveClassifierRuleContext, + &pstClassifierEntry); + + if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && + (!pstClassifierEntry->bUnclassifiedPHSRule)) { if (pstClassifierEntry->pstPhsRule) { if (pstClassifierEntry->pstPhsRule->u8RefCnt) pstClassifierEntry->pstPhsRule->u8RefCnt--; @@ -593,12 +595,14 @@ ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT1 sizeof(struct bcm_phs_classifier_entry)); } - nClsidIndex = GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, - uiClsId, - eOldClassifierRuleContext, - &pstClassifierEntry); + nClsidIndex = + GetClassifierEntry(pstServiceFlowEntry->pstClassifierTable, + uiClsId, + eOldClassifierRuleContext, + &pstClassifierEntry); - if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && (!pstClassifierEntry->bUnclassifiedPHSRule)) { + if ((nClsidIndex != PHS_INVALID_TABLE_INDEX) && + (!pstClassifierEntry->bUnclassifiedPHSRule)) { kfree(pstClassifierEntry->pstPhsRule); memset(pstClassifierEntry, 0, sizeof(struct bcm_phs_classifier_entry)); -- cgit From fc38bc1d686f14b88adb503d13ab344f6681de57 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:01 +0200 Subject: Staging: bcm: PHSModule.c: Reduced indentation by using jump label in PhsDeleteSFRules() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 66 +++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 7ced228a155d..4e6bcef56969 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -639,49 +639,51 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "====>\n"); - if (pDeviceExtension) { - /* Retrieve the SFID Entry Index for requested Service Flow */ - nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); - if (nSFIndex == PHS_INVALID_TABLE_INDEX) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, - DBG_LVL_ALL, "SFID Match Failed\n"); - return ERR_SF_MATCH_FAIL; - } + if (!pDeviceExtension) + goto out; - pstClassifierRulesTable = pstServiceFlowEntry->pstClassifierTable; - if (pstClassifierRulesTable) { - for (nClsidIndex = 0; nClsidIndex < MAX_PHSRULE_PER_SF; nClsidIndex++) { - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule) { + /* Retrieve the SFID Entry Index for requested Service Flow */ + nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, + uiVcid, &pstServiceFlowEntry); + if (nSFIndex == PHS_INVALID_TABLE_INDEX) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, + DBG_LVL_ALL, "SFID Match Failed\n"); + return ERR_SF_MATCH_FAIL; + } - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; + pstClassifierRulesTable = pstServiceFlowEntry->pstClassifierTable; + if (pstClassifierRulesTable) { + for (nClsidIndex = 0; nClsidIndex < MAX_PHSRULE_PER_SF; nClsidIndex++) { + if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule) { - if (0 == pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule); + if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) + pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; - pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule = NULL; - } - memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], - 0, sizeof(struct bcm_phs_classifier_entry)); - if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule) { + if (0 == pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) + kfree(pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule); + + pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule = NULL; + } + memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], + 0, sizeof(struct bcm_phs_classifier_entry)); + if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule) { - if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; + if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) + pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; - if (0 == pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule); + if (0 == pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) + kfree(pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule); - pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule = NULL; - } - memset(&pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex], - 0, sizeof(struct bcm_phs_classifier_entry)); + pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule = NULL; } + memset(&pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex], + 0, sizeof(struct bcm_phs_classifier_entry)); } - pstServiceFlowEntry->bUsed = false; - pstServiceFlowEntry->uiVcid = 0; } + pstServiceFlowEntry->bUsed = false; + pstServiceFlowEntry->uiVcid = 0; +out: return 0; } -- cgit From a984b124aab6e7baf3f936d94a0b4678772422af Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:02 +0200 Subject: Staging: bcm: PHSModule.c: Replaced member accessing with variables Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 4e6bcef56969..64319124343d 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -635,6 +635,8 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_classifier_entry *curr_clsf_entry; + struct bcm_phs_classifier_entry *curr_rules_list; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "====>\n"); @@ -654,30 +656,36 @@ ULONG PhsDeleteSFRules(IN void *pvContext, IN B_UINT16 uiVcid) pstClassifierRulesTable = pstServiceFlowEntry->pstClassifierTable; if (pstClassifierRulesTable) { for (nClsidIndex = 0; nClsidIndex < MAX_PHSRULE_PER_SF; nClsidIndex++) { - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule) { + curr_clsf_entry = + &pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex]; - if (pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; + curr_rules_list = + &pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex]; - if (0 == pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule); + if (curr_clsf_entry->pstPhsRule) { - pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex].pstPhsRule = NULL; + if (curr_clsf_entry->pstPhsRule->u8RefCnt) + curr_clsf_entry->pstPhsRule->u8RefCnt--; + + if (0 == curr_clsf_entry->pstPhsRule->u8RefCnt) + kfree(curr_clsf_entry->pstPhsRule); + + curr_clsf_entry->pstPhsRule = NULL; } - memset(&pstClassifierRulesTable->stActivePhsRulesList[nClsidIndex], - 0, sizeof(struct bcm_phs_classifier_entry)); - if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule) { + memset(curr_clsf_entry, 0, + sizeof(struct bcm_phs_classifier_entry)); + if (curr_rules_list->pstPhsRule) { - if (pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt--; + if (curr_rules_list->pstPhsRule->u8RefCnt) + curr_rules_list->pstPhsRule->u8RefCnt--; - if (0 == pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule); + if (0 == curr_rules_list->pstPhsRule->u8RefCnt) + kfree(curr_rules_list->pstPhsRule); - pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex].pstPhsRule = NULL; + curr_rules_list->pstPhsRule = NULL; } - memset(&pstClassifierRulesTable->stOldPhsRulesList[nClsidIndex], - 0, sizeof(struct bcm_phs_classifier_entry)); + memset(curr_rules_list, 0, + sizeof(struct bcm_phs_classifier_entry)); } } pstServiceFlowEntry->bUsed = false; -- cgit From babb7f94795009eb2500fc25b96dddc811991487 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:03 +0200 Subject: Staging: bcm: PHSModule.c: Whitespace cleanup in PhsCompress() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 64319124343d..e01c5cfbaf49 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -744,7 +744,7 @@ static ULONG PhsCompress(IN void *pvContext, /* Retrieve the SFID Entry Index for requested Service Flow */ nSFIndex = GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable, - uiVcid, &pstServiceFlowEntry); + uiVcid, &pstServiceFlowEntry); if (nSFIndex == PHS_INVALID_TABLE_INDEX) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, "SFID Match Failed\n"); @@ -773,8 +773,11 @@ static ULONG PhsCompress(IN void *pvContext, } /* Compress Packet */ - lStatus = phs_compress(pstPhsRule, (PUCHAR)pvInputBuffer, - (PUCHAR)pvOutputBuffer, pOldHeaderSize, pNewHeaderSize); + lStatus = phs_compress(pstPhsRule, + (PUCHAR)pvInputBuffer, + (PUCHAR)pvOutputBuffer, + pOldHeaderSize, + pNewHeaderSize); if (lStatus == STATUS_PHS_COMPRESSED) { pstPhsRule->PHSModifiedBytes += -- cgit From b43b245fb36c8068c2f33330a7935974b7bcca02 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:04 +0200 Subject: Staging: bcm: PHSModule.c: Added missing braces around else block Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index e01c5cfbaf49..e3db972d5b35 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -783,8 +783,9 @@ static ULONG PhsCompress(IN void *pvContext, pstPhsRule->PHSModifiedBytes += *pOldHeaderSize - *pNewHeaderSize - 1; pstPhsRule->PHSModifiedNumPackets++; - } else + } else { pstPhsRule->PHSErrorNumPackets++; + } return lStatus; } -- cgit From 3ed150a178a86c249f06024690b2924c48fd6e48 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:05 +0200 Subject: Staging: bcm: PHSModule.c: Replaced member accessing with variable in free_phs_service() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index e3db972d5b35..d2aa9c911d17 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -889,6 +889,8 @@ static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesT { int i, j; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + struct bcm_phs_classifier_entry *curr_act_rules_list; + struct bcm_phs_classifier_entry *curr_old_rules_list; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "=======>\n"); @@ -902,26 +904,32 @@ static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesT if (pstClassifierRulesTable) { for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { - if (pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule) { + curr_act_rules_list = + &pstClassifierRulesTable->stActivePhsRulesList[j]; - if (pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule->u8RefCnt--; + curr_old_rules_list = + &pstClassifierRulesTable->stOldPhsRulesList[j]; - if (0 == pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule); + if (curr_act_rules_list->pstPhsRule) { - pstClassifierRulesTable->stActivePhsRulesList[j].pstPhsRule = NULL; + if (curr_act_rules_list->pstPhsRule->u8RefCnt) + curr_act_rules_list->pstPhsRule->u8RefCnt--; + + if (0 == curr_act_rules_list->pstPhsRule->u8RefCnt) + kfree(curr_act_rules_list->pstPhsRule); + + curr_act_rules_list->pstPhsRule = NULL; } - if (pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule) { + if (curr_old_rules_list->pstPhsRule) { - if (pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule->u8RefCnt) - pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule->u8RefCnt--; + if (curr_old_rules_list->pstPhsRule->u8RefCnt) + curr_old_rules_list->pstPhsRule->u8RefCnt--; - if (0 == pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule->u8RefCnt) - kfree(pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule); + if (0 == curr_old_rules_list->pstPhsRule->u8RefCnt) + kfree(curr_old_rules_list->pstPhsRule); - pstClassifierRulesTable->stOldPhsRulesList[j].pstPhsRule = NULL; + curr_old_rules_list->pstPhsRule = NULL; } } kfree(pstClassifierRulesTable); -- cgit From c8020cc93e53ea9fcc5df56e09b70e002e5812ce Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:06 +0200 Subject: Staging: bcm: PHSModule.c: Replaced indentation level with goto jump on bad condition Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 61 +++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index d2aa9c911d17..c2901788cc0a 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -895,50 +895,53 @@ static void free_phs_serviceflow_rules(struct bcm_phs_table *psServiceFlowRulesT BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "=======>\n"); - if (psServiceFlowRulesTable) { - for (i = 0; i < MAX_SERVICEFLOWS; i++) { - struct bcm_phs_entry stServiceFlowEntry = - psServiceFlowRulesTable->stSFList[i]; - struct bcm_phs_classifier_table *pstClassifierRulesTable = - stServiceFlowEntry.pstClassifierTable; + if (!psServiceFlowRulesTable) + goto out; - if (pstClassifierRulesTable) { - for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { - curr_act_rules_list = - &pstClassifierRulesTable->stActivePhsRulesList[j]; + for (i = 0; i < MAX_SERVICEFLOWS; i++) { + struct bcm_phs_entry stServiceFlowEntry = + psServiceFlowRulesTable->stSFList[i]; + struct bcm_phs_classifier_table *pstClassifierRulesTable = + stServiceFlowEntry.pstClassifierTable; - curr_old_rules_list = - &pstClassifierRulesTable->stOldPhsRulesList[j]; + if (pstClassifierRulesTable) { + for (j = 0; j < MAX_PHSRULE_PER_SF; j++) { + curr_act_rules_list = + &pstClassifierRulesTable->stActivePhsRulesList[j]; - if (curr_act_rules_list->pstPhsRule) { + curr_old_rules_list = + &pstClassifierRulesTable->stOldPhsRulesList[j]; - if (curr_act_rules_list->pstPhsRule->u8RefCnt) - curr_act_rules_list->pstPhsRule->u8RefCnt--; + if (curr_act_rules_list->pstPhsRule) { - if (0 == curr_act_rules_list->pstPhsRule->u8RefCnt) - kfree(curr_act_rules_list->pstPhsRule); + if (curr_act_rules_list->pstPhsRule->u8RefCnt) + curr_act_rules_list->pstPhsRule->u8RefCnt--; - curr_act_rules_list->pstPhsRule = NULL; - } + if (0 == curr_act_rules_list->pstPhsRule->u8RefCnt) + kfree(curr_act_rules_list->pstPhsRule); - if (curr_old_rules_list->pstPhsRule) { + curr_act_rules_list->pstPhsRule = NULL; + } - if (curr_old_rules_list->pstPhsRule->u8RefCnt) - curr_old_rules_list->pstPhsRule->u8RefCnt--; + if (curr_old_rules_list->pstPhsRule) { - if (0 == curr_old_rules_list->pstPhsRule->u8RefCnt) - kfree(curr_old_rules_list->pstPhsRule); + if (curr_old_rules_list->pstPhsRule->u8RefCnt) + curr_old_rules_list->pstPhsRule->u8RefCnt--; - curr_old_rules_list->pstPhsRule = NULL; - } + if (0 == curr_old_rules_list->pstPhsRule->u8RefCnt) + kfree(curr_old_rules_list->pstPhsRule); + + curr_old_rules_list->pstPhsRule = NULL; } - kfree(pstClassifierRulesTable); - stServiceFlowEntry.pstClassifierTable = - pstClassifierRulesTable = NULL; } + kfree(pstClassifierRulesTable); + stServiceFlowEntry.pstClassifierTable = + pstClassifierRulesTable = NULL; } } +out: + kfree(psServiceFlowRulesTable); psServiceFlowRulesTable = NULL; } -- cgit From cc872f80709326283bd6d21324be54374d8bde8f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:07 +0200 Subject: Staging: bcm: PHSModule.c: Rewrote ValidatePHSRuleComplete() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index c2901788cc0a..9a248454a70a 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -948,24 +948,10 @@ out: static bool ValidatePHSRuleComplete(IN struct bcm_phs_rule *psPhsRule) { - if (psPhsRule) { - if (!psPhsRule->u8PHSI) { - /* PHSI is not valid */ - return false; - } - - if (!psPhsRule->u8PHSS) { - /* PHSS Is Undefined */ - return false; - } - - /* Check if PHSF is defines for the PHS Rule */ - if (!psPhsRule->u8PHSFLength) /* If any part of PHSF is valid then Rule contains valid PHSF */ - return false; - - return TRUE; - } else - return false; + return (psPhsRule && + psPhsRule->u8PHSI && + psPhsRule->u8PHSS && + psPhsRule->u8PHSFLength); } UINT GetServiceFlowEntry(IN struct bcm_phs_table *psServiceFlowTable, -- cgit From 14d8e915964b9566f37acbedcfd17daeb0633105 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:08 +0200 Subject: Staging: bcm: PHSModule.c: Added const keyword to ValidatePHSRUleComplete() argument Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 9a248454a70a..47eff7629039 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -24,7 +24,7 @@ static UINT UpdateClassifierPHSRule(B_UINT16 uiClsId, struct bcm_phs_rule *psPhsRule, B_UINT8 u8AssociatedPHSI); -static bool ValidatePHSRuleComplete(struct bcm_phs_rule *psPhsRule); +static bool ValidatePHSRuleComplete(const struct bcm_phs_rule *psPhsRule); static bool DerefPhsRule(B_UINT16 uiClsId, struct bcm_phs_classifier_table *psaClassifiertable, @@ -946,7 +946,7 @@ out: psServiceFlowRulesTable = NULL; } -static bool ValidatePHSRuleComplete(IN struct bcm_phs_rule *psPhsRule) +static bool ValidatePHSRuleComplete(IN const struct bcm_phs_rule *psPhsRule) { return (psPhsRule && psPhsRule->u8PHSI && -- cgit From cf423564fae6cab1fafad556e50de473225db834 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:09 +0200 Subject: Staging: bcm: PHSModule.c: Replaced member accessing with variable in GetServiceFlowEntry() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 47eff7629039..83bd12bf24a3 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -959,12 +959,13 @@ UINT GetServiceFlowEntry(IN struct bcm_phs_table *psServiceFlowTable, struct bcm_phs_entry **ppstServiceFlowEntry) { int i; + struct bcm_phs_entry *curr_sf_list; for (i = 0; i < MAX_SERVICEFLOWS; i++) { - if (psServiceFlowTable->stSFList[i].bUsed) { - if (psServiceFlowTable->stSFList[i].uiVcid == uiVcid) { - *ppstServiceFlowEntry = - &psServiceFlowTable->stSFList[i]; + curr_sf_list = &psServiceFlowTable->stSFList[i]; + if (curr_sf_list->bUsed) { + if (curr_sf_list->uiVcid == uiVcid) { + *ppstServiceFlowEntry = curr_sf_list; return i; } } -- cgit From c842dd2ddb888d64ad50387d36f93a5225cb0a9b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:10 +0200 Subject: Staging: bcm: PHSModule.c: Simplified nested if statements by linking them with logical AND in GetServiceFlowEntry() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 83bd12bf24a3..5eec7065ea6e 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -963,11 +963,9 @@ UINT GetServiceFlowEntry(IN struct bcm_phs_table *psServiceFlowTable, for (i = 0; i < MAX_SERVICEFLOWS; i++) { curr_sf_list = &psServiceFlowTable->stSFList[i]; - if (curr_sf_list->bUsed) { - if (curr_sf_list->uiVcid == uiVcid) { - *ppstServiceFlowEntry = curr_sf_list; - return i; - } + if (curr_sf_list->bUsed && (curr_sf_list->uiVcid == uiVcid)) { + *ppstServiceFlowEntry = curr_sf_list; + return i; } } -- cgit From 1c53f0877e874e4713e73342e51f8f3543fd59f9 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:11 +0200 Subject: Staging: bcm: PHSModule.c: Simplified nested if statements by linking them with logical AND in GetServiceFlowEntry() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 5eec7065ea6e..4074eb8550bd 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -990,11 +990,10 @@ static UINT GetClassifierEntry(IN struct bcm_phs_classifier_table *pstClassifier psClassifierRules = &pstClassifierTable->stOldPhsRulesList[i]; - if (psClassifierRules->bUsed) { - if (psClassifierRules->uiClassifierRuleId == uiClsid) { - *ppstClassifierEntry = psClassifierRules; - return i; - } + if (psClassifierRules->bUsed && + (psClassifierRules->uiClassifierRuleId == uiClsid)) { + *ppstClassifierEntry = psClassifierRules; + return i; } } -- cgit From 18002f567fcbfcaf36c1ed359bca603d2cc58b8e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:12 +0200 Subject: Staging: bcm: PHSModule.c: Simplified nested if statements by linking them with logical AND in GetPhsRuleEntry() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 4074eb8550bd..ceb57587f40a 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1017,11 +1017,10 @@ static UINT GetPhsRuleEntry(IN struct bcm_phs_classifier_table *pstClassifierTab pstClassifierRule = &pstClassifierTable->stOldPhsRulesList[i]; - if (pstClassifierRule->bUsed) { - if (pstClassifierRule->u8PHSI == uiPHSI) { - *ppstPhsRule = pstClassifierRule->pstPhsRule; - return i; - } + if (pstClassifierRule->bUsed && + (pstClassifierRule->u8PHSI == uiPHSI)) { + *ppstPhsRule = pstClassifierRule->pstPhsRule; + return i; } } -- cgit From 91283491c63c44cec6db9051a50d97a28c77e22d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:13 +0200 Subject: Staging: bcm: PHSModule.c: Replaced member accessing with variable in CreateSFToClassifierRuleMapping() Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index ceb57587f40a..bdc29a5ae4ca 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1038,10 +1038,12 @@ static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, UINT uiStatus = 0; int iSfIndex; bool bFreeEntryFound = false; + struct bcm_phs_entry *curr_list; /* Check for a free entry in SFID table */ for (iSfIndex = 0; iSfIndex < MAX_SERVICEFLOWS; iSfIndex++) { - if (!psServiceFlowTable->stSFList[iSfIndex].bUsed) { + curr_list = &psServiceFlowTable->stSFList[iSfIndex]; + if (!curr_list->bUsed) { bFreeEntryFound = TRUE; break; } @@ -1050,15 +1052,16 @@ static UINT CreateSFToClassifierRuleMapping(IN B_UINT16 uiVcid, if (!bFreeEntryFound) return ERR_SFTABLE_FULL; - psaClassifiertable = - psServiceFlowTable->stSFList[iSfIndex].pstClassifierTable; - uiStatus = - CreateClassifierPHSRule(uiClsId, psaClassifiertable, psPhsRule, - eActiveClassifierRuleContext, u8AssociatedPHSI); + psaClassifiertable = curr_list->pstClassifierTable; + uiStatus = CreateClassifierPHSRule(uiClsId, + psaClassifiertable, + psPhsRule, + eActiveClassifierRuleContext, + u8AssociatedPHSI); if (uiStatus == PHS_SUCCESS) { /* Add entry at free index to the SF */ - psServiceFlowTable->stSFList[iSfIndex].bUsed = TRUE; - psServiceFlowTable->stSFList[iSfIndex].uiVcid = uiVcid; + curr_list->bUsed = TRUE; + curr_list->uiVcid = uiVcid; } return uiStatus; -- cgit From 3be738ad55d8e2b9d949eb0d830de5aa4d4f8e05 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:14 +0200 Subject: Staging: bcm: PHSModule.c: Replaced if-else return code with simple return assertion Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index bdc29a5ae4ca..805ecb088a01 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -1343,15 +1343,7 @@ static bool DerefPhsRule(IN B_UINT16 uiClsId, if (pstPhsRule->u8RefCnt) pstPhsRule->u8RefCnt--; - if (0 == pstPhsRule->u8RefCnt) { - /* - * if(pstPhsRule->u8PHSI) - * Store the currently active rule into the old rules list - * CreateClassifierPHSRule(uiClsId,psaClassifiertable,pstPhsRule,eOldClassifierRuleContext,pstPhsRule->u8PHSI); - */ - return TRUE; - } else - return false; + return (0 == pstPhsRule->u8RefCnt); } static void dbg_print_st_cls_entry(struct bcm_mini_adapter *ad, -- cgit From e86bd61ee6cae2ec09c7f9782d573f9ce3081e44 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 15 Jul 2014 09:43:15 +0200 Subject: Staging: bcm: PHSModule.c: Shortened lines This patch shortenes all lines where possible without code refactoring, as well as comment lines. It does not change the wording of comments. Signed-off-by: Matthias Beyer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.c | 143 +++++++++++++++++++++++++--------------- 1 file changed, 89 insertions(+), 54 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c index 805ecb088a01..5f4e503d54ec 100644 --- a/drivers/staging/bcm/PHSModule.c +++ b/drivers/staging/bcm/PHSModule.c @@ -110,9 +110,11 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, UINT unPhsOldHdrSize = 0; UINT unPHSNewPktHeaderLen = 0; /* Pointer to PHS IN Hdr Buffer */ - PUCHAR pucPHSPktHdrInBuf = Adapter->stPhsTxContextInfo.ucaHdrSuppressionInBuf; + PUCHAR pucPHSPktHdrInBuf = + Adapter->stPhsTxContextInfo.ucaHdrSuppressionInBuf; /* Pointer to PHS OUT Hdr Buffer */ - PUCHAR pucPHSPktHdrOutBuf = Adapter->stPhsTxContextInfo.ucaHdrSuppressionOutBuf; + PUCHAR pucPHSPktHdrOutBuf = + Adapter->stPhsTxContextInfo.ucaHdrSuppressionOutBuf; UINT usPacketType; UINT BytesToRemove = 0; bool bPHSI = 0; @@ -144,8 +146,10 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, (unPHSPktHdrBytesCopied <= MAX_PHS_LENGTHS)) { /* - * Step 2 Suppress Header using PHS and fill into intermediate ucaPHSPktHdrOutBuf. - * Suppress only if IP Header and PHS Enabled For the Service Flow + * Step 2 Suppress Header using PHS and fill into intermediate + * ucaPHSPktHdrOutBuf. + * Suppress only if IP Header and PHS Enabled For the + * Service Flow */ if (((usPacketType == ETHERNET_FRAMETYPE_IPV4) || (usPacketType == ETHERNET_FRAMETYPE_IPV6)) && @@ -183,7 +187,8 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, "PHS Sending packet Compressed"); if (skb_cloned(Packet)) { - newPacket = skb_copy(Packet, GFP_ATOMIC); + newPacket = + skb_copy(Packet, GFP_ATOMIC); if (newPacket == NULL) return STATUS_FAILURE; @@ -240,7 +245,8 @@ int PHSTransmit(struct bcm_mini_adapter *Adapter, } } - /* BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL,"PHSTransmit : Dumping data packet After PHS"); */ + /* BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_SEND, DBG_LVL_ALL, + * "PHSTransmit : Dumping data packet After PHS"); */ return STATUS_SUCCESS; } @@ -321,11 +327,12 @@ void DumpFullPacket(UCHAR *pBuf, UINT nPktLen) /* * Procedure: phs_init * - * Description: This routine is responsible for allocating memory for classifier and - * PHS rules. + * Description: This routine is responsible for allocating memory for classifier + * and PHS rules. * * Arguments: - * pPhsdeviceExtension - ptr to Device extension containing PHS Classifier rules and PHS Rules , RX, TX buffer etc + * pPhsdeviceExtension - ptr to Device extension containing PHS Classifier rules + * and PHS Rules , RX, TX buffer etc * * Returns: * TRUE(1) -If allocation of memory was successful. @@ -438,7 +445,8 @@ ULONG PhsUpdateClassifierRule(IN void *pvContext, UINT nSFIndex = 0; struct bcm_phs_entry *pstServiceFlowEntry = NULL; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - struct bcm_phs_extension *pDeviceExtension = (struct bcm_phs_extension *)pvContext; + struct bcm_phs_extension *pDeviceExtension = + (struct bcm_phs_extension *)pvContext; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "PHS With Corr2 Changes\n"); @@ -555,7 +563,9 @@ ULONG PhsDeletePHSRule(IN void *pvContext, * 0 if successful, * >0 Error. */ -ULONG PhsDeleteClassifierRule(IN void *pvContext, IN B_UINT16 uiVcid, IN B_UINT16 uiClsId) +ULONG PhsDeleteClassifierRule(IN void *pvContext, + IN B_UINT16 uiVcid, + IN B_UINT16 uiClsId) { UINT nSFIndex = 0, nClsidIndex = 0; struct bcm_phs_entry *pstServiceFlowEntry = NULL; @@ -702,13 +712,18 @@ out: * Exported function to compress the data using PHS. * * Arguments: - * IN void* pvContext - PHS Driver Specific Context. - * IN B_UINT16 uiVcid - The Service Flow ID to which current packet header compression applies. - * IN UINT uiClsId - The Classifier ID to which current packet header compression applies. - * IN void *pvInputBuffer - The Input buffer containg packet header data - * IN void *pvOutputBuffer - The output buffer returned by this function after PHS - * IN UINT *pOldHeaderSize - The actual size of the header before PHS - * IN UINT *pNewHeaderSize - The new size of the header after applying PHS + * IN void* pvContext - PHS Driver Specific Context. + * IN B_UINT16 uiVcid - The Service Flow ID to which current + * packet header compression applies. + * IN UINT uiClsId - The Classifier ID to which current packet + * header compression applies. + * IN void *pvInputBuffer - The Input buffer containg packet header + * data + * IN void *pvOutputBuffer - The output buffer returned by this + * function after PHS + * IN UINT *pOldHeaderSize - The actual size of the header before PHS + * IN UINT *pNewHeaderSize - The new size of the header after applying + * PHS * * Return Value: * @@ -797,11 +812,15 @@ static ULONG PhsCompress(IN void *pvContext, * Exported function to restore the packet header in Rx path. * * Arguments: - * IN void* pvContext - PHS Driver Specific Context. - * IN B_UINT16 uiVcid - The Service Flow ID to which current packet header restoration applies. - * IN void *pvInputBuffer - The Input buffer containg suppressed packet header data - * OUT void *pvOutputBuffer - The output buffer returned by this function after restoration - * OUT UINT *pHeaderSize - The packet header size after restoration is returned in this parameter. + * IN void* pvContext - PHS Driver Specific Context. + * IN B_UINT16 uiVcid - The Service Flow ID to which current + * packet header restoration applies. + * IN void *pvInputBuffer - The Input buffer containg suppressed + * packet header data + * OUT void *pvOutputBuffer - The output buffer returned by this + * function after restoration + * OUT UINT *pHeaderSize - The packet header size after restoration + * is returned in this parameter. * * Return Value: * @@ -854,7 +873,8 @@ static ULONG PhsDeCompress(IN void *pvContext, eActiveClassifierRuleContext, &pstPhsRule); if (nPhsRuleIndex == PHS_INVALID_TABLE_INDEX) { - /* Phs Rule does not exist in active rules table. Lets try in the old rules table. */ + /* Phs Rule does not exist in active rules table. Lets try + * in the old rules table. */ nPhsRuleIndex = GetPhsRuleEntry(pstServiceFlowEntry->pstClassifierTable, phsi, eOldClassifierRuleContext, @@ -877,7 +897,8 @@ static ULONG PhsDeCompress(IN void *pvContext, /* * Procedure: free_phs_serviceflow_rules * - * Description: This routine is responsible for freeing memory allocated for PHS rules. + * Description: This routine is responsible for freeing memory allocated for + * PHS rules. * * Arguments: * rules - ptr to S_SERVICEFLOW_TABLE structure. @@ -1093,7 +1114,8 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, if (nClassifierIndex == PHS_INVALID_TABLE_INDEX) { /* - * The Classifier doesn't exist. So its a new classifier being added. + * The Classifier doesn't exist. So its a new classifier being + * added. * Add new entry to associate PHS Rule to the Classifier */ @@ -1114,8 +1136,8 @@ static UINT CreateClassiferToPHSRuleMapping(IN B_UINT16 uiVcid, return ERR_PHS_INVALID_PHS_RULE; /* - * This rule already exists if any fields are changed for this PHS - * rule update them. + * This rule already exists if any fields are changed for this + * PHS rule update them. */ /* If any part of PHSF is valid then we update PHSF */ if (psPhsRule->u8PHSFLength) { @@ -1223,7 +1245,8 @@ static UINT CreateClassifierPHSRule(IN B_UINT16 uiClsId, if (eClsContext == eActiveClassifierRuleContext) return ERR_CLSASSIFIER_TABLE_FULL; else { - /* Lets replace the oldest rule if we are looking in old Rule table */ + /* Lets replace the oldest rule if we are looking in + * old Rule table */ if (psaClassifiertable->uiOldestPhsRuleIndex >= MAX_PHSRULE_PER_SF) psaClassifiertable->uiOldestPhsRuleIndex = 0; @@ -1284,7 +1307,8 @@ static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, bPHSRuleOrphaned = DerefPhsRule(uiClsId, psaClassifiertable, pstClassifierEntry->pstPhsRule); - /* Step 2 Search if there is a PHS Rule with u8AssociatedPHSI in Classifier table for this SF */ + /* Step 2 Search if there is a PHS Rule with u8AssociatedPHSI in + * Classifier table for this SF */ nPhsRuleIndex = GetPhsRuleEntry(psaClassifiertable, u8AssociatedPHSI, eActiveClassifierRuleContext, &pstAddPhsRule); @@ -1300,7 +1324,8 @@ static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, return ERR_PHS_INVALID_PHS_RULE; } - /* Step 2.a PHS Rule Does Not Exist .Create New PHS Rule for uiClsId */ + /* Step 2.a PHS Rule Does Not Exist .Create New PHS Rule for + * uiClsId */ if (false == bPHSRuleOrphaned) { pstClassifierEntry->pstPhsRule = @@ -1312,7 +1337,8 @@ static UINT UpdateClassifierPHSRule(IN B_UINT16 uiClsId, memcpy(pstClassifierEntry->pstPhsRule, psPhsRule, sizeof(struct bcm_phs_rule)); } else { - /* Step 2.b PHS Rule Exists Tie uiClsId with the existing PHS Rule */ + /* Step 2.b PHS Rule Exists Tie uiClsId with the existing + * PHS Rule */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL, "\nTying Classifier to Existing PHS Rule"); @@ -1436,14 +1462,17 @@ void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension) * * Arguments: * in_buf - ptr to incoming packet buffer. - * out_buf - ptr to output buffer where the suppressed header is copied. - * decomp_phs_rules - ptr to PHS rule. - * header_size - ptr to field which holds the phss or phsf_length. + * out_buf - ptr to output buffer where the suppressed + * header is copied. + * decomp_phs_rules - ptr to PHS rule. + * header_size - ptr to field which holds the phss or + * phsf_length. * * Returns: - * size -The number of bytes of dynamic fields present with in the incoming packet - * header. - * 0 -If PHS rule is NULL.If PHSI is 0 indicateing packet as uncompressed. + * size - The number of bytes of dynamic fields present with in the + * incoming packet header. + * 0 - If PHS rule is NULL.If PHSI is 0 indicateing packet as + * uncompressed. */ static int phs_decompress(unsigned char *in_buf, unsigned char *out_buf, @@ -1468,7 +1497,8 @@ static int phs_decompress(unsigned char *in_buf, tmp_memb = decomp_phs_rules; /* - * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_RECEIVE,DBG_LVL_ALL,"\nDECOMP:In phs_decompress PHSI 1 %d",phsi)); + * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_RECEIVE,DBG_LVL_ALL, + * "\nDECOMP:In phs_decompress PHSI 1 %d",phsi)); * header_size = tmp_memb->u8PHSFLength; */ phss = tmp_memb->u8PHSS; @@ -1479,7 +1509,8 @@ static int phs_decompress(unsigned char *in_buf, phss = MAX_PHS_LENGTHS; /* - * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_RECEIVE,DBG_LVL_ALL,"\nDECOMP: + * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, PHS_RECEIVE,DBG_LVL_ALL, + * "\nDECOMP: * In phs_decompress PHSI %d phss %d index %d",phsi,phss,index)); */ while ((phss > 0) && (size < in_buf_len)) { @@ -1518,22 +1549,25 @@ static int phs_decompress(unsigned char *in_buf, /* * Procedure: phs_compress * - * Description: This routine suppresses the static fields within the packet.Before - * that it will verify the fields to be suppressed with the corresponding fields in the - * phsf. For verification it checks the phsv field of PHS rule. If set and verification - * succeeds it suppresses the field.If any one static field is found different none of - * the static fields are suppressed then the packet is sent as uncompressed packet with - * phsi=0. + * Description: This routine suppresses the static fields within the packet. + * Before that it will verify the fields to be suppressed with the corresponding + * fields in the phsf. For verification it checks the phsv field of PHS rule. + * If set and verification succeeds it suppresses the field.If any one static + * field is found different none of the static fields are suppressed then the + * packet is sent as uncompressed packet with phsi=0. * * Arguments: * phs_rule - ptr to PHS rule. * in_buf - ptr to incoming packet buffer. - * out_buf - ptr to output buffer where the suppressed header is copied. + * out_buf - ptr to output buffer where the suppressed header is + * copied. * header_size - ptr to field which holds the phss. * * Returns: - * size-The number of bytes copied into the output buffer i.e dynamic fields - * 0 -If PHS rule is NULL.If PHSV field is not set.If the verification fails. + * size - The number of bytes copied into the output buffer i.e + * dynamic fields + * 0 - If PHS rule is NULL.If PHSV field is not set. If the + * verification fails. */ static int phs_compress(struct bcm_phs_rule *phs_rule, unsigned char *in_buf, @@ -1588,13 +1622,14 @@ static int phs_compress(struct bcm_phs_rule *phs_rule, * rules_set - ptr to classifier_rules. * in_buffer - ptr to incoming packet buffer. * out_buffer - ptr to output buffer where the suppressed header is copied. - * phsf - ptr to phsf. - * phsm - ptr to phsm. - * phss - variable holding phss. + * phsf - ptr to phsf. + * phsm - ptr to phsm. + * phss - variable holding phss. * * Returns: - * size-The number of bytes copied into the output buffer i.e dynamic fields. - * 0 -Packet has failed the verification. + * size - The number of bytes copied into the output buffer i.e dynamic + * fields. + * 0 - Packet has failed the verification. */ static int verify_suppress_phsf(unsigned char *in_buffer, unsigned char *out_buffer, -- cgit From dfa30ac13952ee0c2918090815688a909ad074f0 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 15 Jul 2014 18:47:11 +0900 Subject: staging: dgap: remove redundant error value check The retval in dgap_block_til_ready() is initialized to zero, and if no error has occurred in this function, the retval has a zero. So it doesn't need to check "retval" itself. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 32988a8aead4..10bd0f2e7a32 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -2181,10 +2181,7 @@ static int dgap_block_til_ready(struct tty_struct *tty, struct file *file, spin_unlock_irqrestore(&ch->ch_lock, lock_flags); - if (retval) - return retval; - - return 0; + return retval; } /* -- cgit From 8e82ce02232c69560d73c6e0f251d4b3d1fc66d6 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 15 Jul 2014 18:48:25 +0900 Subject: staging: dgap: remove unused case value in dgap_parsefile() If rc is zero, this function will returns with an error and cannot reach switch-case statement. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 10bd0f2e7a32..470ae7b78404 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -6357,10 +6357,6 @@ static int dgap_parsefile(char **in) } switch (rc) { - case 0: - dgap_err("unexpected end of file"); - return -1; - case BEGIN: /* should only be 1 begin */ dgap_err("unexpected config_begin\n"); return -1; -- cgit From e9cc5b2bb1c1b121f35d430b0e70a73ce2a7a2e5 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 15 Jul 2014 18:49:09 +0900 Subject: staging: dgap: fix a typo in dgap_gettok() The "boar" should be "board". Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 470ae7b78404..17514c83f88e 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -7105,7 +7105,7 @@ static int dgap_gettok(char **in, struct cnode *p) char *w; struct toklist *t; - if (strstr(dgap_cword, "boar")) { + if (strstr(dgap_cword, "board")) { w = dgap_getword(in); snprintf(dgap_cword, MAXCWORD, "%s", w); for (t = dgap_tlist; t->token != 0; t++) { -- cgit From 7bab00ff654cfac02ec758e7726cdf1149b18565 Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 15 Jul 2014 18:49:52 +0900 Subject: staging: dgap: remove unused a parameter in dgap_gettok() The "p" as parameter is unused. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 17514c83f88e..1e52092f5ce9 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -150,7 +150,7 @@ static void dgap_firmware_reset_port(struct channel_t *ch); /* * Function prototypes from dgap_parse.c. */ -static int dgap_gettok(char **in, struct cnode *p); +static int dgap_gettok(char **in); static char *dgap_getword(char **in); static struct cnode *dgap_newnode(int t); static int dgap_checknode(struct cnode *p); @@ -6342,7 +6342,7 @@ static int dgap_parsefile(char **in) p = p->next; /* file must start with a BEGIN */ - while ((rc = dgap_gettok(in, p)) != BEGIN) { + while ((rc = dgap_gettok(in)) != BEGIN) { if (rc == 0) { dgap_err("unexpected EOF"); return -1; @@ -6350,7 +6350,7 @@ static int dgap_parsefile(char **in) } for (; ;) { - rc = dgap_gettok(in, p); + rc = dgap_gettok(in); if (rc == 0) { dgap_err("unexpected EOF"); return -1; @@ -7100,7 +7100,7 @@ static char *dgap_sindex(char *string, char *group) /* * Get a token from the input file; return 0 if end of file is reached */ -static int dgap_gettok(char **in, struct cnode *p) +static int dgap_gettok(char **in) { char *w; struct toklist *t; -- cgit From 825122353a2363b76c5568998be9fed17c5fdbfc Mon Sep 17 00:00:00 2001 From: Daeseok Youn Date: Tue, 15 Jul 2014 18:50:37 +0900 Subject: staging: dgap: remove dgap_newnode() The dgap_newnode() is useless for creating new node. So just use kzalloc and set a type in case statement. Signed-off-by: Daeseok Youn Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 104 +++++++++++++++++++++++++++++++------------- 1 file changed, 74 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 1e52092f5ce9..06c55cb57090 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -152,7 +152,6 @@ static void dgap_firmware_reset_port(struct channel_t *ch); */ static int dgap_gettok(char **in); static char *dgap_getword(char **in); -static struct cnode *dgap_newnode(int t); static int dgap_checknode(struct cnode *p); static void dgap_err(char *s); @@ -6367,13 +6366,15 @@ static int dgap_parsefile(char **in) case BOARD: /* board info */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(BNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } p = p->next; + p->type = BNODE; p->u.board.status = kstrdup("No", GFP_KERNEL); line = conc = NULL; brd = p; @@ -6658,12 +6659,16 @@ static int dgap_parsefile(char **in) case TTYN: /* tty name prefix */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(TNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = TNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpeced end of file"); @@ -6679,12 +6684,16 @@ static int dgap_parsefile(char **in) case CU: /* cu name prefix */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(CUNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = CUNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpeced end of file"); @@ -6709,12 +6718,15 @@ static int dgap_parsefile(char **in) dgap_err("line not vaild for PC/em"); return -1; } - p->next = dgap_newnode(LNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = LNODE; conc = NULL; line = p; linecnt++; @@ -6727,13 +6739,17 @@ static int dgap_parsefile(char **in) dgap_err("must specify line info before concentrator"); return -1; } - p->next = dgap_newnode(CNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = CNODE; conc = p; + if (linecnt) brd->u.board.conc2++; else @@ -6776,12 +6792,15 @@ static int dgap_parsefile(char **in) return -1; } } - p->next = dgap_newnode(MNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } p = p->next; + p->type = MNODE; + if (linecnt) brd->u.board.module2++; else @@ -6862,12 +6881,16 @@ static int dgap_parsefile(char **in) case PRINT: /* transparent print name prefix */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(PNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = PNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpeced end of file"); @@ -6883,12 +6906,16 @@ static int dgap_parsefile(char **in) case CMAJOR: /* major number */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(JNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = JNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -6903,12 +6930,16 @@ static int dgap_parsefile(char **in) case ALTPIN: /* altpin setting */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(ANODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = ANODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -6923,12 +6954,14 @@ static int dgap_parsefile(char **in) case USEINTR: /* enable interrupt setting */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(INTRNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } p = p->next; + p->type = INTRNODE; s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -6943,12 +6976,16 @@ static int dgap_parsefile(char **in) case TTSIZ: /* size of tty structure */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(TSNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = TSNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -6963,12 +7000,16 @@ static int dgap_parsefile(char **in) case CHSIZ: /* channel structure size */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(CSNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = CSNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -6983,12 +7024,16 @@ static int dgap_parsefile(char **in) case BSSIZ: /* board structure size */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(BSNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = BSNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -7003,12 +7048,16 @@ static int dgap_parsefile(char **in) case UNTSIZ: /* sched structure size */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(USNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = USNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -7023,12 +7072,16 @@ static int dgap_parsefile(char **in) case F2SIZ: /* f2200 structure size */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(FSNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = FSNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -7043,12 +7096,16 @@ static int dgap_parsefile(char **in) case VPSIZ: /* vpix structure size */ if (dgap_checknode(p)) return -1; - p->next = dgap_newnode(VSNODE); + + p->next = kzalloc(sizeof(struct cnode), GFP_KERNEL); if (!p->next) { dgap_err("out of memory"); return -1; } + p = p->next; + p->type = VSNODE; + s = dgap_getword(in); if (!s) { dgap_err("unexpected end of file"); @@ -7164,19 +7221,6 @@ static void dgap_err(char *s) pr_err("dgap: parse: %s\n", s); } -/* - * allocate a new configuration node of type t - */ -static struct cnode *dgap_newnode(int t) -{ - struct cnode *n; - - n = kzalloc(sizeof(struct cnode), GFP_KERNEL); - if (n) - n->type = t; - return n; -} - /* * dgap_checknode: see if all the necessary info has been supplied for a node * before creating the next node. -- cgit From 05c9c195a2d83e64a34811f1f0dc42808188619a Mon Sep 17 00:00:00 2001 From: "Joerg C. Meyer" Date: Mon, 14 Jul 2014 16:48:50 +0200 Subject: Staging: rtl8821ae: delete unneeded lines in cam.c This is a patch to the cam.c file that removes some unneeded lines of commented-out code Signed-off-by: Joerg C. Meyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/cam.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/cam.c b/drivers/staging/rtl8821ae/cam.c index 3bc6b3d06514..6185ea42deb1 100644 --- a/drivers/staging/rtl8821ae/cam.c +++ b/drivers/staging/rtl8821ae/cam.c @@ -152,7 +152,6 @@ u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, return 1; } -//EXPORT_SYMBOL(rtl_cam_add_one_entry); int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, u32 ul_key_id) @@ -176,7 +175,6 @@ int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, return 0; } -//EXPORT_SYMBOL(rtl_cam_delete_one_entry); void rtl_cam_reset_all_entry(struct ieee80211_hw *hw) { @@ -186,7 +184,6 @@ void rtl_cam_reset_all_entry(struct ieee80211_hw *hw) ul_command = BIT(31) | BIT(30); rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); } -//EXPORT_SYMBOL(rtl_cam_reset_all_entry); void rtl_cam_mark_invalid(struct ieee80211_hw *hw, u8 uc_index) { @@ -227,7 +224,6 @@ void rtl_cam_mark_invalid(struct ieee80211_hw *hw, u8 uc_index) RT_TRACE(COMP_SEC, DBG_DMESG, ("rtl_cam_mark_invalid(): WRITE A0: %x \n", ul_command)); } -//EXPORT_SYMBOL(rtl_cam_mark_invalid); void rtl_cam_empty_entry(struct ieee80211_hw *hw, u8 uc_index) { @@ -281,7 +277,6 @@ void rtl_cam_empty_entry(struct ieee80211_hw *hw, u8 uc_index) } } -//EXPORT_SYMBOL(rtl_cam_empty_entry); u8 rtl_cam_get_free_entry(struct ieee80211_hw *hw, u8 *sta_addr) { @@ -316,7 +311,6 @@ u8 rtl_cam_get_free_entry(struct ieee80211_hw *hw, u8 *sta_addr) } return TOTAL_CAM_ENTRY; } -//EXPORT_SYMBOL(rtl_cam_get_free_entry); void rtl_cam_del_entry(struct ieee80211_hw *hw, u8 *sta_addr) { @@ -349,4 +343,3 @@ void rtl_cam_del_entry(struct ieee80211_hw *hw, u8 *sta_addr) } return; } -//EXPORT_SYMBOL(rtl_cam_del_entry); -- cgit From 38064eb1a4cb52507afe84d4428eaa0c8d674f05 Mon Sep 17 00:00:00 2001 From: Rahul Bedarkar Date: Mon, 14 Jul 2014 22:51:15 +0530 Subject: staging: octeon: fix coding style This patch fixes checkpatch.pl warning. Add blank line after declaration. Signed-off-by: Rahul Bedarkar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon/ethernet-xaui.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/octeon/ethernet-xaui.c b/drivers/staging/octeon/ethernet-xaui.c index 20b3533ef95c..3cc286ee3599 100644 --- a/drivers/staging/octeon/ethernet-xaui.c +++ b/drivers/staging/octeon/ethernet-xaui.c @@ -128,6 +128,7 @@ int cvm_oct_xaui_stop(struct net_device *dev) int cvm_oct_xaui_init(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); + cvm_oct_common_init(dev); dev->netdev_ops->ndo_stop(dev); if (!octeon_is_simulation() && priv->phydev == NULL) -- cgit From 6a44b50f9819571c2b871bffba107defec556a87 Mon Sep 17 00:00:00 2001 From: Lucas Tanure Date: Tue, 15 Jul 2014 00:32:35 -0300 Subject: staging: android: Clean up else statement from sync_fence_poll() Kernel coding style. Remove useless else statement after return. Signed-off-by: Lucas Tanure Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/sync.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c index 18174f7c871c..cd7b8f59b948 100644 --- a/drivers/staging/android/sync.c +++ b/drivers/staging/android/sync.c @@ -687,8 +687,7 @@ static unsigned int sync_fence_poll(struct file *file, poll_table *wait) return POLLIN; else if (fence->status < 0) return POLLERR; - else - return 0; + return 0; } static long sync_fence_ioctl_wait(struct sync_fence *fence, unsigned long arg) -- cgit From d4ec15e16ff0d72f9a3f1909b1ed20515f1f40d0 Mon Sep 17 00:00:00 2001 From: Lucas Tanure Date: Sun, 13 Jul 2014 21:31:05 -0300 Subject: staging: android: Clean up else statement from binder_send_failed_reply Kernel coding style. Remove useless else statement after return. Changes from v1 and v2: Fix warning for mixed declarations and code. Declaration of "struct binder_transaction *next" made outside of while. Changes from v3: Removed initialization to NULL for next variable. Signed-off-by: Lucas Tanure Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/binder.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index e446f624a04e..02b0379ae550 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -1185,6 +1185,7 @@ static void binder_send_failed_reply(struct binder_transaction *t, uint32_t error_code) { struct binder_thread *target_thread; + struct binder_transaction *next; BUG_ON(t->flags & TF_ONE_WAY); while (1) { @@ -1212,24 +1213,23 @@ static void binder_send_failed_reply(struct binder_transaction *t, target_thread->return_error); } return; - } else { - struct binder_transaction *next = t->from_parent; + } + next = t->from_parent; - binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, - "send failed reply for transaction %d, target dead\n", - t->debug_id); + binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, + "send failed reply for transaction %d, target dead\n", + t->debug_id); - binder_pop_transaction(target_thread, t); - if (next == NULL) { - binder_debug(BINDER_DEBUG_DEAD_BINDER, - "reply failed, no target thread at root\n"); - return; - } - t = next; + binder_pop_transaction(target_thread, t); + if (next == NULL) { binder_debug(BINDER_DEBUG_DEAD_BINDER, - "reply failed, no target thread -- retry %d\n", - t->debug_id); + "reply failed, no target thread at root\n"); + return; } + t = next; + binder_debug(BINDER_DEBUG_DEAD_BINDER, + "reply failed, no target thread -- retry %d\n", + t->debug_id); } } -- cgit From 526fed3e16419ff75857ca580eb11ac03e5b1979 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:32 +0100 Subject: staging: vt6656: INTvWorkItem remove camel case Camel case changes pDevice -> priv ntStatus -> status Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index dad1543b98e1..54016f93e31b 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -77,18 +77,18 @@ static const u8 fallback_rate1[5][5] = { * if we've gotten no data * -*/ -void INTvWorkItem(struct vnt_private *pDevice) +void INTvWorkItem(struct vnt_private *priv) { unsigned long flags; - int ntStatus; + int status; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); - spin_lock_irqsave(&pDevice->lock, flags); + spin_lock_irqsave(&priv->lock, flags); - ntStatus = PIPEnsInterruptRead(pDevice); + status = PIPEnsInterruptRead(priv); - spin_unlock_irqrestore(&pDevice->lock, flags); + spin_unlock_irqrestore(&priv->lock, flags); } static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) -- cgit From 50730604c9aef89025bf2bed57e9afb15d8b1148 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:33 +0100 Subject: staging: vt6656: int.c Replace DBG_PRT debug messages Replace with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 54016f93e31b..ddf58f7fce9f 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -37,8 +37,6 @@ #include "power.h" #include "usbpipe.h" -static int msglevel = MSG_LEVEL_INFO; /* MSG_LEVEL_DEBUG */ - static const u8 fallback_rate0[5][5] = { {RATE_18M, RATE_18M, RATE_12M, RATE_12M, RATE_12M}, {RATE_24M, RATE_24M, RATE_18M, RATE_12M, RATE_12M}, @@ -82,7 +80,7 @@ void INTvWorkItem(struct vnt_private *priv) unsigned long flags; int status; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); + dev_dbg(&priv->usb->dev, "---->Interrupt Polling Thread\n"); spin_lock_irqsave(&priv->lock, flags); @@ -152,7 +150,7 @@ void INTnsProcessData(struct vnt_private *priv) struct vnt_interrupt_data *int_data; struct ieee80211_low_level_stats *low_stats = &priv->low_stats; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); + dev_dbg(&priv->usb->dev, "---->s_nsInterruptProcessData\n"); int_data = (struct vnt_interrupt_data *)priv->int_buf.data_buf; -- cgit From e360d2b8fa213d353b4dab7c9e03baf64158aca7 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:34 +0100 Subject: staging: vt6656: int rename INTnsProcessData to vnt_int_process_data Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/int.h | 2 +- drivers/staging/vt6656/usbpipe.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index ddf58f7fce9f..36be5265bdc7 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -145,7 +145,7 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) return 0; } -void INTnsProcessData(struct vnt_private *priv) +void vnt_int_process_data(struct vnt_private *priv) { struct vnt_interrupt_data *int_data; struct ieee80211_low_level_stats *low_stats = &priv->low_stats; diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index 08db868e1d07..008545cef337 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -56,6 +56,6 @@ struct vnt_interrupt_data { } __packed; void INTvWorkItem(struct vnt_private *); -void INTnsProcessData(struct vnt_private *); +void vnt_int_process_data(struct vnt_private *); #endif /* __INT_H__ */ diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index dd031bbb25ba..13b6852dc3d7 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -198,7 +198,7 @@ static void s_nsInterruptUsbIoCompleteRead(struct urb *urb) dev_dbg(&priv->usb->dev, "%s status = %d\n", __func__, status); } else { - INTnsProcessData(priv); + vnt_int_process_data(priv); } status = usb_submit_urb(priv->pInterruptURB, GFP_ATOMIC); -- cgit From 62001939790b14883a2e892baae95ccdc02032ea Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:35 +0100 Subject: staging: vt6656: rename INTvWorkItem to vnt_int_start_interrupt This function does run as work item, it starts interrupts from the device. Rename to vnt_int_start_interrupt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/int.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 36be5265bdc7..363e46455fd0 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -75,7 +75,7 @@ static const u8 fallback_rate1[5][5] = { * if we've gotten no data * -*/ -void INTvWorkItem(struct vnt_private *priv) +void vnt_int_start_interrupt(struct vnt_private *priv) { unsigned long flags; int status; diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index 008545cef337..154605c63947 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -55,7 +55,7 @@ struct vnt_interrupt_data { u8 sw[2]; } __packed; -void INTvWorkItem(struct vnt_private *); +void vnt_int_start_interrupt(struct vnt_private *); void vnt_int_process_data(struct vnt_private *); #endif /* __INT_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f0388d60b4d2..9890f7db1650 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -667,7 +667,7 @@ static int vnt_start(struct ieee80211_hw *hw) priv->int_interval = 1; /* bInterval is set to 1 */ - INTvWorkItem(priv); + vnt_int_start_interrupt(priv); priv->flags |= DEVICE_FLAGS_OPENED; -- cgit From 0d901321faae497452d2c5faea5c3470b63919aa Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:36 +0100 Subject: staging: vt6656: int.c remove irrelevant function description The function does not directly poll from here Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 22 ---------------------- 1 file changed, 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 363e46455fd0..e78720ceda0f 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -53,28 +53,6 @@ static const u8 fallback_rate1[5][5] = { {RATE_54M, RATE_54M, RATE_36M, RATE_18M, RATE_18M} }; -/*+ - * - * Function: InterruptPollingThread - * - * Synopsis: Thread running at IRQL PASSIVE_LEVEL. - * - * Arguments: Device Extension - * - * Returns: - * - * Algorithm: Call USBD for input data; - * - * History: dd-mm-yyyy Author Comment - * - * - * 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 - * --*/ void vnt_int_start_interrupt(struct vnt_private *priv) { unsigned long flags; -- cgit From b0bc5724f6a7840cd3c715b01eb28a472fe83385 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:37 +0100 Subject: staging: vt6656: usbpipe rename PIPEnsInterruptRead to vnt_start_interrupt_urb Drop Read and PIPE. The function starts the interrupt urb. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/usbpipe.c | 2 +- drivers/staging/vt6656/usbpipe.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index e78720ceda0f..87ac6a17f75c 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -62,7 +62,7 @@ void vnt_int_start_interrupt(struct vnt_private *priv) spin_lock_irqsave(&priv->lock, flags); - status = PIPEnsInterruptRead(priv); + status = vnt_start_interrupt_urb(priv); spin_unlock_irqrestore(&priv->lock, flags); } diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 13b6852dc3d7..a5c55f7dd1b4 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -131,7 +131,7 @@ void vnt_control_in_u8(struct vnt_private *priv, u8 reg, u8 reg_off, u8 *data) * */ -int PIPEnsInterruptRead(struct vnt_private *priv) +int vnt_start_interrupt_urb(struct vnt_private *priv) { int status = STATUS_FAILURE; diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index ea71782d8901..94694fe89356 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -38,7 +38,7 @@ int vnt_control_in(struct vnt_private *, u8, u16, u16, u16, u8 *); void vnt_control_out_u8(struct vnt_private *, u8, u8, u8); void vnt_control_in_u8(struct vnt_private *, u8, u8, u8 *); -int PIPEnsInterruptRead(struct vnt_private *); +int vnt_start_interrupt_urb(struct vnt_private *); int PIPEnsBulkInUsbRead(struct vnt_private *, struct vnt_rcb *pRCB); int PIPEnsSendBulkOut(struct vnt_private *, struct vnt_usb_send_context *pContext); -- cgit From 34f98e3f277aa296b424157c0d5d792cc625ba37 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:38 +0100 Subject: staging: vt6656: rename s_nsInterruptUsbIoCompleteRead to vnt_start_interrupt_urb_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index a5c55f7dd1b4..e7239d6a616a 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -57,7 +57,7 @@ #define URB_ASYNC_UNLINK 0 #endif -static void s_nsInterruptUsbIoCompleteRead(struct urb *urb); +static void vnt_start_interrupt_urb_complete(struct urb *urb); static void s_nsBulkInUsbIoCompleteRead(struct urb *urb); static void s_nsBulkOutIoCompleteWrite(struct urb *urb); @@ -145,7 +145,7 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) usb_rcvintpipe(priv->usb, 1), priv->int_buf.data_buf, MAX_INTERRUPT_SIZE, - s_nsInterruptUsbIoCompleteRead, + vnt_start_interrupt_urb_complete, priv, priv->int_interval); @@ -173,7 +173,7 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) * */ -static void s_nsInterruptUsbIoCompleteRead(struct urb *urb) +static void vnt_start_interrupt_urb_complete(struct urb *urb) { struct vnt_private *priv = urb->context; int status; -- cgit From 476e7d97aa86a7d4a47f7c866fced31328d7f5ac Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:39 +0100 Subject: staging: vt6656: rename PIPEnsSendBulkOut to vnt_tx_context. We are just tx the context Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 4 ++-- drivers/staging/vt6656/usbpipe.c | 2 +- drivers/staging/vt6656/usbpipe.h | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 1f1ec049ace3..76b7f173f4fa 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -928,7 +928,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) spin_lock_irqsave(&priv->lock, flags); - if (PIPEnsSendBulkOut(priv, tx_context) != STATUS_PENDING) { + if (vnt_tx_context(priv, tx_context) != STATUS_PENDING) { spin_unlock_irqrestore(&priv->lock, flags); return -EIO; } @@ -1022,7 +1022,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, spin_lock_irqsave(&priv->lock, flags); - if (PIPEnsSendBulkOut(priv, context) != STATUS_PENDING) + if (vnt_tx_context(priv, context) != STATUS_PENDING) ieee80211_free_txskb(priv->hw, context->skb); spin_unlock_irqrestore(&priv->lock, flags); diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index e7239d6a616a..db1bc1aaf567 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -337,7 +337,7 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) * */ -int PIPEnsSendBulkOut(struct vnt_private *priv, +int vnt_tx_context(struct vnt_private *priv, struct vnt_usb_send_context *context) { int status; diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index 94694fe89356..49c284fde907 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -40,7 +40,6 @@ void vnt_control_in_u8(struct vnt_private *, u8, u8, u8 *); int vnt_start_interrupt_urb(struct vnt_private *); int PIPEnsBulkInUsbRead(struct vnt_private *, struct vnt_rcb *pRCB); -int PIPEnsSendBulkOut(struct vnt_private *, - struct vnt_usb_send_context *pContext); +int vnt_tx_context(struct vnt_private *, struct vnt_usb_send_context *); #endif /* __USBPIPE_H__ */ -- cgit From ceebd9036a99309aeb3424f296835b0015919afb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:40 +0100 Subject: staging: vt6656: rename s_nsBulkOutIoCompleteWrite to vnt_tx_context_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index db1bc1aaf567..54badfe5f9fe 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -59,7 +59,7 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb); static void s_nsBulkInUsbIoCompleteRead(struct urb *urb); -static void s_nsBulkOutIoCompleteWrite(struct urb *urb); +static void vnt_tx_context_complete(struct urb *urb); int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, u16 index, u16 length, u8 *buffer) @@ -355,7 +355,7 @@ int vnt_tx_context(struct vnt_private *priv, usb_sndbulkpipe(priv->usb, 3), context->data, context->buf_len, - s_nsBulkOutIoCompleteWrite, + vnt_tx_context_complete, context); status = usb_submit_urb(urb, GFP_ATOMIC); @@ -370,7 +370,7 @@ int vnt_tx_context(struct vnt_private *priv, } /* - * Description: s_nsBulkOutIoCompleteWrite + * Description: vnt_tx_context_complete * 1a) Indicate to the protocol the status of the write. * 1b) Return ownership of the packet to the protocol. * @@ -397,7 +397,7 @@ int vnt_tx_context(struct vnt_private *priv, * */ -static void s_nsBulkOutIoCompleteWrite(struct urb *urb) +static void vnt_tx_context_complete(struct urb *urb) { struct vnt_usb_send_context *context = urb->context; struct vnt_private *priv = context->priv; -- cgit From 2dc37af09b255d01a90111cfea4e113b31d4be26 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:41 +0100 Subject: staging: vt6656: rename PIPEnsBulkInUsbRead to vnt_submit_rx_urb The function just submits to rx urbs. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/usbpipe.c | 2 +- drivers/staging/vt6656/usbpipe.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 9890f7db1650..b1da23c18aac 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -603,7 +603,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) rcb->bBoolInUse = false; /* submit rx urb */ - if (PIPEnsBulkInUsbRead(priv, rcb)) + if (vnt_submit_rx_urb(priv, rcb)) goto free_rx_tx; } diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 54badfe5f9fe..97ad3b6c3d7c 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -225,7 +225,7 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb) * */ -int PIPEnsBulkInUsbRead(struct vnt_private *priv, struct vnt_rcb *rcb) +int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) { int status = 0; struct urb *urb; diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index 49c284fde907..e74aa0809928 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -39,7 +39,7 @@ void vnt_control_out_u8(struct vnt_private *, u8, u8, u8); void vnt_control_in_u8(struct vnt_private *, u8, u8, u8 *); int vnt_start_interrupt_urb(struct vnt_private *); -int PIPEnsBulkInUsbRead(struct vnt_private *, struct vnt_rcb *pRCB); +int vnt_submit_rx_urb(struct vnt_private *, struct vnt_rcb *); int vnt_tx_context(struct vnt_private *, struct vnt_usb_send_context *); #endif /* __USBPIPE_H__ */ -- cgit From 08823af4223a35cc066340d0ee5c3da5420288eb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:42 +0100 Subject: staging: vt6656: rename s_nsBulkInUsbIoCompleteRead to vnt_submit_rx_urb_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 97ad3b6c3d7c..5fcfbf520208 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -58,7 +58,7 @@ #endif static void vnt_start_interrupt_urb_complete(struct urb *urb); -static void s_nsBulkInUsbIoCompleteRead(struct urb *urb); +static void vnt_submit_rx_urb_complete(struct urb *urb); static void vnt_tx_context_complete(struct urb *urb); int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, @@ -241,7 +241,7 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) usb_rcvbulkpipe(priv->usb, 2), skb_put(rcb->skb, skb_tailroom(rcb->skb)), MAX_TOTAL_SIZE_WITH_ALL_HEADERS, - s_nsBulkInUsbIoCompleteRead, + vnt_submit_rx_urb_complete, rcb); status = usb_submit_urb(urb, GFP_ATOMIC); @@ -271,7 +271,7 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) * */ -static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) +static void vnt_submit_rx_urb_complete(struct urb *urb) { struct vnt_rcb *rcb = urb->context; struct vnt_private *priv = rcb->pDevice; -- cgit From f24937db608b02cf5e27e22803351e0ed707bb7c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 15 Jul 2014 19:54:43 +0100 Subject: staging: vt6656: usbpipe irrelevant function descriptions All these have no or vague meaning. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 100 --------------------------------------- 1 file changed, 100 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 5fcfbf520208..59e508c648ab 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -117,20 +117,6 @@ void vnt_control_in_u8(struct vnt_private *priv, u8 reg, u8 reg_off, u8 *data) reg_off, reg, sizeof(u8), data); } -/* - * Description: - * Allocates an usb interrupt in irp and calls USBD. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * Out: - * none - * - * Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver - * - */ - int vnt_start_interrupt_urb(struct vnt_private *priv) { int status = STATUS_FAILURE; @@ -158,21 +144,6 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) return status; } -/* - * Description: - * Complete function of usb interrupt in irp. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * - * Out: - * none - * - * Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver - * - */ - static void vnt_start_interrupt_urb_complete(struct urb *urb) { struct vnt_private *priv = urb->context; @@ -211,20 +182,6 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb) return; } -/* - * Description: - * Allocates an usb BulkIn irp and calls USBD. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * Out: - * none - * - * Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver - * - */ - int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) { int status = 0; @@ -256,21 +213,6 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) return status; } -/* - * Description: - * Complete function of usb BulkIn irp. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * - * Out: - * none - * - * Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver - * - */ - static void vnt_submit_rx_urb_complete(struct urb *urb) { struct vnt_rcb *rcb = urb->context; @@ -323,20 +265,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) return; } -/* - * Description: - * Allocates an usb BulkOut irp and calls USBD. - * - * Parameters: - * In: - * pDevice - Pointer to the adapter - * Out: - * none - * - * Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver - * - */ - int vnt_tx_context(struct vnt_private *priv, struct vnt_usb_send_context *context) { @@ -369,34 +297,6 @@ int vnt_tx_context(struct vnt_private *priv, return STATUS_PENDING; } -/* - * Description: vnt_tx_context_complete - * 1a) Indicate to the protocol the status of the write. - * 1b) Return ownership of the packet to the protocol. - * - * 2) If any more packets are queue for sending, send another packet - * to USBD. - * If the attempt to send the packet to the driver fails, - * return ownership of the packet to the protocol and - * try another packet (until one succeeds). - * - * Parameters: - * In: - * pdoUsbDevObj - pointer to the USB device object which - * completed the irp - * pIrp - the irp which was completed by the - * device object - * pContext - the context given to IoSetCompletionRoutine - * before calling IoCallDriver on the irp - * The pContext is a pointer to the USB device object. - * Out: - * none - * - * Return Value: STATUS_MORE_PROCESSING_REQUIRED - allows the completion routine - * (IofCompleteRequest) to stop working on the irp. - * - */ - static void vnt_tx_context_complete(struct urb *urb) { struct vnt_usb_send_context *context = urb->context; -- cgit From cb3aadaec89109edb60d4829ce82e50b27cb4ce6 Mon Sep 17 00:00:00 2001 From: Kinka Huang Date: Tue, 15 Jul 2014 23:11:02 +0800 Subject: staging: comedi: removing not useful `else` after return Signed-off-by: Kinka Huang Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi.h | 8 ++++---- drivers/staging/comedi/comedi_fops.c | 9 ++++----- drivers/staging/comedi/comedidev.h | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index dbaeba7469ac..552a5e2a1077 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -555,16 +555,16 @@ static inline unsigned NI_USUAL_PFI_SELECT(unsigned pfi_channel) { if (pfi_channel < 10) return 0x1 + pfi_channel; - else - return 0xb + pfi_channel; + + return 0xb + pfi_channel; } static inline unsigned NI_USUAL_RTSI_SELECT(unsigned rtsi_channel) { if (rtsi_channel < 7) return 0xb + rtsi_channel; - else - return 0x1b; + + return 0x1b; } /* mode bits for NI general-purpose counters, set with diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 038b69a93185..36862965051b 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -206,8 +206,8 @@ struct comedi_device *comedi_dev_get_from_minor(unsigned minor) { if (minor < COMEDI_NUM_BOARD_MINORS) return comedi_dev_get_from_board_minor(minor); - else - return comedi_dev_get_from_subdevice_minor(minor); + + return comedi_dev_get_from_subdevice_minor(minor); } EXPORT_SYMBOL_GPL(comedi_dev_get_from_minor); @@ -2625,10 +2625,9 @@ static int __init comedi_init(void) unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0), COMEDI_NUM_MINORS); return PTR_ERR(dev); - } else { - /* comedi_alloc_board_minor() locked the mutex */ - mutex_unlock(&dev->mutex); } + /* comedi_alloc_board_minor() locked the mutex */ + mutex_unlock(&dev->mutex); } return 0; diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 83fd1553ff93..01679458ab63 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -388,8 +388,8 @@ static inline unsigned int bytes_per_sample(const struct comedi_subdevice *subd) { if (subd->subdev_flags & SDF_LSAMPL) return sizeof(unsigned int); - else - return sizeof(short); + + return sizeof(short); } /* -- cgit From f190be7f39a5e480ddc5e0f49bbe670feb328c32 Mon Sep 17 00:00:00 2001 From: Kristina Martšenko Date: Wed, 16 Jul 2014 02:30:18 +0300 Subject: staging: tidspbridge: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver has been broken and disabled for several kernel versions now. It doesn't have a maintainer anymore, and most of the people who've worked on it have moved on. There's also still a long list of issues in the TODO file before it can be moved out of staging. Until someone can put in the work to make the driver work again and move it out of staging, remove it from the kernel. Signed-off-by: Kristina Martšenko Cc: Omar Ramirez Luna Cc: Suman Anna Cc: Felipe Contreras Cc: Ohad Ben-Cohen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - .../staging/tidspbridge/Documentation/CONTRIBUTORS | 45 - drivers/staging/tidspbridge/Documentation/README | 70 - .../staging/tidspbridge/Documentation/error-codes | 157 - drivers/staging/tidspbridge/Kconfig | 69 - drivers/staging/tidspbridge/Makefile | 32 - drivers/staging/tidspbridge/TODO | 18 - drivers/staging/tidspbridge/core/_cmm.h | 45 - drivers/staging/tidspbridge/core/_deh.h | 35 - drivers/staging/tidspbridge/core/_msg_sm.h | 142 - drivers/staging/tidspbridge/core/_tiomap.h | 382 --- drivers/staging/tidspbridge/core/_tiomap_pwr.h | 85 - drivers/staging/tidspbridge/core/chnl_sm.c | 908 ------ drivers/staging/tidspbridge/core/dsp-clock.c | 391 --- drivers/staging/tidspbridge/core/io_sm.c | 2246 --------------- drivers/staging/tidspbridge/core/msg_sm.c | 564 ---- drivers/staging/tidspbridge/core/sync.c | 121 - drivers/staging/tidspbridge/core/tiomap3430.c | 1815 ------------ drivers/staging/tidspbridge/core/tiomap3430_pwr.c | 556 ---- drivers/staging/tidspbridge/core/tiomap_io.c | 440 --- drivers/staging/tidspbridge/core/tiomap_io.h | 104 - drivers/staging/tidspbridge/core/ue_deh.c | 272 -- drivers/staging/tidspbridge/core/wdt.c | 144 - drivers/staging/tidspbridge/dynload/cload.c | 1959 ------------- .../staging/tidspbridge/dynload/dload_internal.h | 344 --- drivers/staging/tidspbridge/dynload/doff.h | 354 --- drivers/staging/tidspbridge/dynload/getsection.c | 407 --- drivers/staging/tidspbridge/dynload/header.h | 49 - drivers/staging/tidspbridge/dynload/module_list.h | 159 - drivers/staging/tidspbridge/dynload/params.h | 226 -- drivers/staging/tidspbridge/dynload/reloc.c | 486 ---- drivers/staging/tidspbridge/dynload/reloc_table.h | 102 - .../tidspbridge/dynload/reloc_table_c6000.c | 257 -- drivers/staging/tidspbridge/dynload/tramp.c | 1143 -------- .../tidspbridge/dynload/tramp_table_c6000.c | 164 -- drivers/staging/tidspbridge/gen/gh.c | 141 - drivers/staging/tidspbridge/hw/EasiGlobal.h | 41 - drivers/staging/tidspbridge/hw/MMUAccInt.h | 76 - drivers/staging/tidspbridge/hw/MMURegAcM.h | 225 -- drivers/staging/tidspbridge/hw/hw_defs.h | 58 - drivers/staging/tidspbridge/hw/hw_mmu.c | 487 ---- drivers/staging/tidspbridge/hw/hw_mmu.h | 160 -- .../tidspbridge/include/dspbridge/_chnl_sm.h | 177 -- .../tidspbridge/include/dspbridge/brddefs.h | 37 - .../tidspbridge/include/dspbridge/cfgdefs.h | 61 - .../staging/tidspbridge/include/dspbridge/chnl.h | 80 - .../tidspbridge/include/dspbridge/chnldefs.h | 63 - .../tidspbridge/include/dspbridge/chnlpriv.h | 85 - .../staging/tidspbridge/include/dspbridge/clk.h | 101 - .../staging/tidspbridge/include/dspbridge/cmm.h | 337 --- .../tidspbridge/include/dspbridge/cmmdefs.h | 104 - .../staging/tidspbridge/include/dspbridge/cod.h | 329 --- .../staging/tidspbridge/include/dspbridge/dbdcd.h | 358 --- .../tidspbridge/include/dspbridge/dbdcddef.h | 78 - .../staging/tidspbridge/include/dspbridge/dbdefs.h | 488 ---- .../staging/tidspbridge/include/dspbridge/dbll.h | 56 - .../tidspbridge/include/dspbridge/dblldefs.h | 431 --- .../staging/tidspbridge/include/dspbridge/dev.h | 620 ---- .../tidspbridge/include/dspbridge/devdefs.h | 26 - .../staging/tidspbridge/include/dspbridge/disp.h | 186 -- .../staging/tidspbridge/include/dspbridge/dmm.h | 71 - .../staging/tidspbridge/include/dspbridge/drv.h | 468 --- .../tidspbridge/include/dspbridge/dspapi-ioctl.h | 467 --- .../staging/tidspbridge/include/dspbridge/dspapi.h | 167 -- .../tidspbridge/include/dspbridge/dspchnl.h | 72 - .../tidspbridge/include/dspbridge/dspdefs.h | 1048 ------- .../staging/tidspbridge/include/dspbridge/dspdeh.h | 43 - .../staging/tidspbridge/include/dspbridge/dspdrv.h | 60 - .../staging/tidspbridge/include/dspbridge/dspio.h | 41 - .../tidspbridge/include/dspbridge/dspioctl.h | 68 - .../staging/tidspbridge/include/dspbridge/dspmsg.h | 56 - .../tidspbridge/include/dspbridge/dynamic_loader.h | 490 ---- .../tidspbridge/include/dspbridge/getsection.h | 108 - drivers/staging/tidspbridge/include/dspbridge/gh.h | 32 - .../tidspbridge/include/dspbridge/host_os.h | 57 - drivers/staging/tidspbridge/include/dspbridge/io.h | 80 - .../staging/tidspbridge/include/dspbridge/io_sm.h | 160 -- .../staging/tidspbridge/include/dspbridge/mbx_sh.h | 144 - .../tidspbridge/include/dspbridge/memdefs.h | 30 - .../staging/tidspbridge/include/dspbridge/mgr.h | 205 -- .../tidspbridge/include/dspbridge/mgrpriv.h | 45 - .../staging/tidspbridge/include/dspbridge/msg.h | 59 - .../tidspbridge/include/dspbridge/msgdefs.h | 29 - .../staging/tidspbridge/include/dspbridge/nldr.h | 55 - .../tidspbridge/include/dspbridge/nldrdefs.h | 259 -- .../staging/tidspbridge/include/dspbridge/node.h | 524 ---- .../tidspbridge/include/dspbridge/nodedefs.h | 28 - .../tidspbridge/include/dspbridge/nodepriv.h | 181 -- .../staging/tidspbridge/include/dspbridge/ntfy.h | 217 -- .../staging/tidspbridge/include/dspbridge/proc.h | 591 ---- .../tidspbridge/include/dspbridge/procpriv.h | 25 - .../staging/tidspbridge/include/dspbridge/pwr.h | 113 - .../include/dspbridge/resourcecleanup.h | 41 - .../staging/tidspbridge/include/dspbridge/rmm.h | 156 - .../staging/tidspbridge/include/dspbridge/rms_sh.h | 86 - .../tidspbridge/include/dspbridge/rmstypes.h | 24 - .../staging/tidspbridge/include/dspbridge/strm.h | 306 -- .../tidspbridge/include/dspbridge/strmdefs.h | 44 - .../staging/tidspbridge/include/dspbridge/sync.h | 119 - .../tidspbridge/include/dspbridge/uuidutil.h | 24 - .../staging/tidspbridge/include/dspbridge/wdt.h | 79 - drivers/staging/tidspbridge/pmgr/chnl.c | 116 - drivers/staging/tidspbridge/pmgr/chnlobj.h | 46 - drivers/staging/tidspbridge/pmgr/cmm.c | 915 ------ drivers/staging/tidspbridge/pmgr/cod.c | 537 ---- drivers/staging/tidspbridge/pmgr/dbll.c | 1421 --------- drivers/staging/tidspbridge/pmgr/dev.c | 969 ------- drivers/staging/tidspbridge/pmgr/dmm.c | 487 ---- drivers/staging/tidspbridge/pmgr/dspapi.c | 1841 ------------ drivers/staging/tidspbridge/pmgr/io.c | 93 - drivers/staging/tidspbridge/pmgr/ioobj.h | 38 - drivers/staging/tidspbridge/pmgr/msg.c | 91 - drivers/staging/tidspbridge/pmgr/msgobj.h | 38 - drivers/staging/tidspbridge/rmgr/dbdcd.c | 1484 ---------- drivers/staging/tidspbridge/rmgr/disp.c | 655 ----- drivers/staging/tidspbridge/rmgr/drv.c | 816 ------ drivers/staging/tidspbridge/rmgr/drv_interface.c | 650 ----- drivers/staging/tidspbridge/rmgr/dspdrv.c | 139 - drivers/staging/tidspbridge/rmgr/mgr.c | 352 --- drivers/staging/tidspbridge/rmgr/nldr.c | 1861 ------------ drivers/staging/tidspbridge/rmgr/node.c | 3031 -------------------- drivers/staging/tidspbridge/rmgr/proc.c | 1836 ------------ drivers/staging/tidspbridge/rmgr/pwr.c | 176 -- drivers/staging/tidspbridge/rmgr/rmm.c | 456 --- drivers/staging/tidspbridge/rmgr/strm.c | 733 ----- 126 files changed, 44752 deletions(-) delete mode 100644 drivers/staging/tidspbridge/Documentation/CONTRIBUTORS delete mode 100644 drivers/staging/tidspbridge/Documentation/README delete mode 100644 drivers/staging/tidspbridge/Documentation/error-codes delete mode 100644 drivers/staging/tidspbridge/Kconfig delete mode 100644 drivers/staging/tidspbridge/Makefile delete mode 100644 drivers/staging/tidspbridge/TODO delete mode 100644 drivers/staging/tidspbridge/core/_cmm.h delete mode 100644 drivers/staging/tidspbridge/core/_deh.h delete mode 100644 drivers/staging/tidspbridge/core/_msg_sm.h delete mode 100644 drivers/staging/tidspbridge/core/_tiomap.h delete mode 100644 drivers/staging/tidspbridge/core/_tiomap_pwr.h delete mode 100644 drivers/staging/tidspbridge/core/chnl_sm.c delete mode 100644 drivers/staging/tidspbridge/core/dsp-clock.c delete mode 100644 drivers/staging/tidspbridge/core/io_sm.c delete mode 100644 drivers/staging/tidspbridge/core/msg_sm.c delete mode 100644 drivers/staging/tidspbridge/core/sync.c delete mode 100644 drivers/staging/tidspbridge/core/tiomap3430.c delete mode 100644 drivers/staging/tidspbridge/core/tiomap3430_pwr.c delete mode 100644 drivers/staging/tidspbridge/core/tiomap_io.c delete mode 100644 drivers/staging/tidspbridge/core/tiomap_io.h delete mode 100644 drivers/staging/tidspbridge/core/ue_deh.c delete mode 100644 drivers/staging/tidspbridge/core/wdt.c delete mode 100644 drivers/staging/tidspbridge/dynload/cload.c delete mode 100644 drivers/staging/tidspbridge/dynload/dload_internal.h delete mode 100644 drivers/staging/tidspbridge/dynload/doff.h delete mode 100644 drivers/staging/tidspbridge/dynload/getsection.c delete mode 100644 drivers/staging/tidspbridge/dynload/header.h delete mode 100644 drivers/staging/tidspbridge/dynload/module_list.h delete mode 100644 drivers/staging/tidspbridge/dynload/params.h delete mode 100644 drivers/staging/tidspbridge/dynload/reloc.c delete mode 100644 drivers/staging/tidspbridge/dynload/reloc_table.h delete mode 100644 drivers/staging/tidspbridge/dynload/reloc_table_c6000.c delete mode 100644 drivers/staging/tidspbridge/dynload/tramp.c delete mode 100644 drivers/staging/tidspbridge/dynload/tramp_table_c6000.c delete mode 100644 drivers/staging/tidspbridge/gen/gh.c delete mode 100644 drivers/staging/tidspbridge/hw/EasiGlobal.h delete mode 100644 drivers/staging/tidspbridge/hw/MMUAccInt.h delete mode 100644 drivers/staging/tidspbridge/hw/MMURegAcM.h delete mode 100644 drivers/staging/tidspbridge/hw/hw_defs.h delete mode 100644 drivers/staging/tidspbridge/hw/hw_mmu.c delete mode 100644 drivers/staging/tidspbridge/hw/hw_mmu.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/brddefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/chnl.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/chnldefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/clk.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/cmm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/cod.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dbdcd.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dbdcddef.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dbdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dbll.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dblldefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dev.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/devdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/disp.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dmm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/drv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspapi.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspchnl.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspdeh.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspdrv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspio.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspioctl.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dspmsg.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/getsection.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/gh.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/host_os.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/io.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/io_sm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/memdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/mgr.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/mgrpriv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/msg.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/msgdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/nldr.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/nldrdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/node.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/nodedefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/nodepriv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/ntfy.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/proc.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/procpriv.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/pwr.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/rmm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/rms_sh.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/rmstypes.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/strm.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/strmdefs.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/sync.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/uuidutil.h delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/wdt.h delete mode 100644 drivers/staging/tidspbridge/pmgr/chnl.c delete mode 100644 drivers/staging/tidspbridge/pmgr/chnlobj.h delete mode 100644 drivers/staging/tidspbridge/pmgr/cmm.c delete mode 100644 drivers/staging/tidspbridge/pmgr/cod.c delete mode 100644 drivers/staging/tidspbridge/pmgr/dbll.c delete mode 100644 drivers/staging/tidspbridge/pmgr/dev.c delete mode 100644 drivers/staging/tidspbridge/pmgr/dmm.c delete mode 100644 drivers/staging/tidspbridge/pmgr/dspapi.c delete mode 100644 drivers/staging/tidspbridge/pmgr/io.c delete mode 100644 drivers/staging/tidspbridge/pmgr/ioobj.h delete mode 100644 drivers/staging/tidspbridge/pmgr/msg.c delete mode 100644 drivers/staging/tidspbridge/pmgr/msgobj.h delete mode 100644 drivers/staging/tidspbridge/rmgr/dbdcd.c delete mode 100644 drivers/staging/tidspbridge/rmgr/disp.c delete mode 100644 drivers/staging/tidspbridge/rmgr/drv.c delete mode 100644 drivers/staging/tidspbridge/rmgr/drv_interface.c delete mode 100644 drivers/staging/tidspbridge/rmgr/dspdrv.c delete mode 100644 drivers/staging/tidspbridge/rmgr/mgr.c delete mode 100644 drivers/staging/tidspbridge/rmgr/nldr.c delete mode 100644 drivers/staging/tidspbridge/rmgr/node.c delete mode 100644 drivers/staging/tidspbridge/rmgr/proc.c delete mode 100644 drivers/staging/tidspbridge/rmgr/pwr.c delete mode 100644 drivers/staging/tidspbridge/rmgr/rmm.c delete mode 100644 drivers/staging/tidspbridge/rmgr/strm.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 0fd87443412a..12b092ce0d0f 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -74,8 +74,6 @@ source "drivers/staging/iio/Kconfig" source "drivers/staging/xgifb/Kconfig" -source "drivers/staging/tidspbridge/Kconfig" - source "drivers/staging/quickstart/Kconfig" source "drivers/staging/emxx_udc/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 9aeecc9b07e0..29fa5df5b969 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -31,7 +31,6 @@ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_FB_XGI) += xgifb/ -obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/ obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/ obj-$(CONFIG_USB_EMXX) += emxx_udc/ obj-$(CONFIG_USB_ENESTORAGE) += keucr/ diff --git a/drivers/staging/tidspbridge/Documentation/CONTRIBUTORS b/drivers/staging/tidspbridge/Documentation/CONTRIBUTORS deleted file mode 100644 index 86f578727f91..000000000000 --- a/drivers/staging/tidspbridge/Documentation/CONTRIBUTORS +++ /dev/null @@ -1,45 +0,0 @@ -TI DSP/Bridge Driver - Contributors File - -The DSP/Bridge project wish to thank all of its contributors, current bridge -driver is the result of the work of all of them. If any name is accidentally -omitted, let us know by sending a mail to omar.ramirez@ti.com or -x095840@ti.com. - -Please keep the following list in alphabetical order. - - Suman Anna - Sripal Bagadia - Felipe Balbi - Ohad Ben-Cohen - Phil Carmody - Deepak Chitriki - Felipe Contreras - Hiroshi Doyu - Seth Forshee - Ivan Gomez Castellanos - Mark Grosen - Ramesh Gupta G - Fernando Guzman Lugo - Axel Haslam - Janet Head - Shivananda Hebbar - Hari Kanigeri - Tony Lindgren - Antonio Luna - Hari Nagalla - Nishanth Menon - Ameya Palande - Vijay Pasam - Gilbert Pitney - Omar Ramirez Luna - Ernesto Ramos - Chris Ring - Larry Schiefer - Rebecca Schultz Zavin - Bhavin Shah - Andy Shevchenko - Jeff Taylor - Roman Tereshonkov - Armando Uribe de Leon - Nischal Varide - Wenbiao Wang diff --git a/drivers/staging/tidspbridge/Documentation/README b/drivers/staging/tidspbridge/Documentation/README deleted file mode 100644 index df6d371161e0..000000000000 --- a/drivers/staging/tidspbridge/Documentation/README +++ /dev/null @@ -1,70 +0,0 @@ - Linux DSP/BIOS Bridge release - -DSP/BIOS Bridge overview -======================== - -DSP/BIOS Bridge is designed for platforms that contain a GPP and one or more -attached DSPs. The GPP is considered the master or "host" processor, and the -attached DSPs are processing resources that can be utilized by applications -and drivers running on the GPP. - -The abstraction that DSP/BIOS Bridge supplies, is a direct link between a GPP -program and a DSP task. This communication link is partitioned into two -types of sub-links: messaging (short, fixed-length packets) and data -streaming (multiple, large buffers). Each sub-link operates independently, -and features in-order delivery of data, meaning that messages are delivered -in the order they were submitted to the message link, and stream buffers are -delivered in the order they were submitted to the stream link. - -In addition, a GPP client can specify what inputs and outputs a DSP task -uses. DSP tasks typically use message objects for passing control and status -information and stream objects for efficient streaming of real-time data. - -GPP Software Architecture -========================= - -A GPP application communicates with its associated DSP task running on the -DSP subsystem using the DSP/BIOS Bridge API. For example, a GPP audio -application can use the API to pass messages to a DSP task that is managing -data flowing from analog-to-digital converters (ADCs) to digital-to-analog -converters (DACs). - -From the perspective of the GPP OS, the DSP is treated as just another -peripheral device. Most high level GPP OS typically support a device driver -model, whereby applications can safely access and share a hardware peripheral -through standard driver interfaces. Therefore, to allow multiple GPP -applications to share access to the DSP, the GPP side of DSP/BIOS Bridge -implements a device driver for the DSP. - -Since driver interfaces are not always standard across GPP OS, and to provide -some level of interoperability of application code using DSP/BIOS Bridge -between GPP OS, DSP/BIOS Bridge provides a standard library of APIs which -wrap calls into the device driver. So, rather than calling GPP OS specific -driver interfaces, applications (and even other device drivers) can use the -standard API library directly. - -DSP Software Architecture -========================= - -For DSP/BIOS, DSP/BIOS Bridge adds a device-independent streaming I/O (STRM) -interface, a messaging interface (NODE), and a Resource Manager (RM) Server. -The RM Server runs as a task of DSP/BIOS and is subservient to commands -and queries from the GPP. It executes commands to start and stop DSP signal -processing nodes in response to GPP programs making requests through the -(GPP-side) API. - -DSP tasks started by the RM Server are similar to any other DSP task with two -important differences: they must follow a specific task model consisting of -three C-callable functions (node create, execute, and delete), with specific -sets of arguments, and they have a pre-defined task environment established -by the RM Server. - -Tasks started by the RM Server communicate using the STRM and NODE interfaces -and act as servers for their corresponding GPP clients, performing signal -processing functions as requested by messages sent by their GPP client. -Typically, a DSP task moves data from source devices to sink devices using -device independent I/O streams, performing application-specific processing -and transformations on the data while it is moved. For example, an audio -task might perform audio decompression (ADPCM, MPEG, CELP) on data received -from a GPP audio driver and then send the decompressed linear samples to a -digital-to-analog converter. diff --git a/drivers/staging/tidspbridge/Documentation/error-codes b/drivers/staging/tidspbridge/Documentation/error-codes deleted file mode 100644 index ad73cba058eb..000000000000 --- a/drivers/staging/tidspbridge/Documentation/error-codes +++ /dev/null @@ -1,157 +0,0 @@ - DSP/Bridge Error Code Guide - - -Success code is always taken as 0, except for one case where a success status -different than 0 can be possible, this is when enumerating a series of dsp -objects, if the enumeration doesn't have any more objects it is considered as a -successful case. In this case a positive ENODATA is returned (TODO: Change to -avoid this case). - -Error codes are returned as a negative 1, if an specific code is expected, it -can be propagated to user space by reading errno symbol defined in errno.h, for -specific details on the implementation a copy of the standard used should be -read first. - -The error codes used by this driver are: - -[EPERM] - General driver failure. - - According to the use case the following might apply: - - Device is in 'sleep/suspend' mode due to DPM. - - User cannot mark end of stream on an input channel. - - Requested operation is invalid for the node type. - - Invalid alignment for the node messaging buffer. - - The specified direction is invalid for the stream. - - Invalid stream mode. - -[ENOENT] - The specified object or file was not found. - -[ESRCH] - A shared memory buffer contained in a message or stream could not be mapped - to the GPP client process's virtual space. - -[EIO] - Driver interface I/O error. - - or: - - Unable to plug channel ISR for configured IRQ. - - No free I/O request packets are available. - -[ENXIO] - Unable to find a named section in DSP executable or a non-existent memory - segment identifier was specified. - -[EBADF] - General error for file handling: - - - Unable to open file. - - Unable to read file. - - An error occurred while parsing the DSP executable file. - -[ENOMEM] - A memory allocation failure occurred. - -[EACCES] - - Unable to read content of DCD data section; this is typically caused by - improperly configured nodes. - - Unable to decode DCD data section content; this is typically caused by - changes to DSP/BIOS Bridge data structures. - - Unable to get pointer to DCD data section; this is typically caused by - improperly configured UUIDs. - - Unable to load file containing DCD data section; this is typically - caused by a missing COFF file. - - The specified COFF file does not contain a valid node registration - section. - -[EFAULT] - Invalid pointer or handler. - -[EEXIST] - Attempted to create a channel manager when one already exists. - -[EINVAL] - Invalid argument. - -[ESPIPE] - Symbol not found in the COFF file. DSPNode_Create will return this if - the iAlg function table for an xDAIS socket is not found in the COFF file. - In this case, force the symbol to be linked into the COFF file. - DSPNode_Create, DSPNode_Execute, and DSPNode_Delete will return this if - the create, execute, or delete phase function, respectively, could not be - found in the COFF file. - - - No symbol table is loaded/found for this board. - - Unable to initialize the ZL COFF parsing module. - -[EPIPE] - I/O is currently pending. - - - End of stream was already requested on this output channel. - -[EDOM] - A parameter is specified outside its valid range. - -[ENOSYS] - The indicated operation is not supported. - -[EIDRM] - During enumeration a change in the number or properties of the objects - has occurred. - -[ECHRNG] - Attempt to created channel manager with too many channels or channel ID out - of range. - -[EBADR] - The state of the specified object is incorrect for the requested operation. - - - Invalid segment ID. - -[ENODATA] - Unable to retrieve resource information from the registry. - - - No more registry values. - -[ETIME] - A timeout occurred before the requested operation could complete. - -[ENOSR] - A stream has been issued the maximum number of buffers allowed in the - stream at once; buffers must be reclaimed from the stream before any more - can be issued. - - - No free channels are available. - -[EILSEQ] - Error occurred in a dynamic loader library function. - -[EISCONN] - The Specified Connection already exists. - -[ENOTCONN] - Nodes not connected. - -[ETIMEDOUT] - Timeout occurred waiting for a response from the hardware. - - - Wait for flush operation on an output channel timed out. - -[ECONNREFUSED] - No more connections can be made for this node. - -[EALREADY] - Channel is already in use. - -[EREMOTEIO] - dwTimeOut parameter was CHNL_IOCNOWAIT, yet no I/O completions were - queued. - -[ECANCELED] - I/O has been cancelled on this channel. - -[ENOKEY] - Invalid subkey parameter. - - - UUID not found in registry. diff --git a/drivers/staging/tidspbridge/Kconfig b/drivers/staging/tidspbridge/Kconfig deleted file mode 100644 index b5e74e9de6bd..000000000000 --- a/drivers/staging/tidspbridge/Kconfig +++ /dev/null @@ -1,69 +0,0 @@ -# -# DSP Bridge Driver Support -# - -menuconfig TIDSPBRIDGE - tristate "DSP Bridge driver" - depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM && BROKEN - select MAILBOX - select OMAP2PLUS_MBOX - help - DSP/BIOS Bridge is designed for platforms that contain a GPP and - one or more attached DSPs. The GPP is considered the master or - "host" processor, and the attached DSPs are processing resources - that can be utilized by applications and drivers running on the GPP. - - This driver depends on OMAP Mailbox (OMAP_MBOX_FWK). - -config TIDSPBRIDGE_DVFS - bool "Enable Bridge Dynamic Voltage and Frequency Scaling (DVFS)" - depends on TIDSPBRIDGE && CPU_FREQ - help - DVFS allows DSP Bridge to initiate the operating point change to - scale the chip voltage and frequency in order to match the - performance and power consumption to the current processing - requirements. - -config TIDSPBRIDGE_MEMPOOL_SIZE - hex "Physical memory pool size (Byte)" - depends on TIDSPBRIDGE - default 0x600000 - help - Allocate specified size of memory at booting time to avoid allocation - failure under heavy memory fragmentation after some use time. - -config TIDSPBRIDGE_RECOVERY - bool "Recovery Support" - depends on TIDSPBRIDGE - default y - help - In case of DSP fatal error, BRIDGE driver will try to - recover itself. - -config TIDSPBRIDGE_CACHE_LINE_CHECK - bool "Check buffers to be 128 byte aligned" - depends on TIDSPBRIDGE - help - When the DSP processes data, the DSP cache controller loads 128-Byte - chunks (lines) from SDRAM and writes the data back in 128-Byte chunks. - If a DMM buffer does not start and end on a 128-Byte boundary, the data - preceding the start address (SA) from the 128-Byte boundary to the SA - and the data at addresses trailing the end address (EA) from the EA to - the next 128-Byte boundary will be loaded and written back as well. - This can lead to heap corruption. Say Y, to enforce the check for 128 - byte alignment, buffers failing this check will be rejected. - -config TIDSPBRIDGE_NTFY_PWRERR - bool "Notify power errors" - depends on TIDSPBRIDGE - help - Enable notifications to registered clients on the event of power error - trying to suspend bridge driver. Say Y, to signal this event as a fatal - error, this will require a bridge restart to recover. - -config TIDSPBRIDGE_BACKTRACE - bool "Dump backtraces on fatal errors" - depends on TIDSPBRIDGE - help - Enable useful information to backtrace fatal errors. Say Y if you - want to dump information for testing purposes. diff --git a/drivers/staging/tidspbridge/Makefile b/drivers/staging/tidspbridge/Makefile deleted file mode 100644 index adb21c53f747..000000000000 --- a/drivers/staging/tidspbridge/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge.o - -libgen = gen/gh.o -libcore = core/chnl_sm.o core/msg_sm.o core/io_sm.o core/tiomap3430.o \ - core/tiomap3430_pwr.o core/tiomap_io.o \ - core/ue_deh.o core/wdt.o core/dsp-clock.o core/sync.o -libpmgr = pmgr/chnl.o pmgr/io.o pmgr/msg.o pmgr/cod.o pmgr/dev.o pmgr/dspapi.o \ - pmgr/dmm.o pmgr/cmm.o pmgr/dbll.o -librmgr = rmgr/dbdcd.o rmgr/disp.o rmgr/drv.o rmgr/mgr.o rmgr/node.o \ - rmgr/proc.o rmgr/pwr.o rmgr/rmm.o rmgr/strm.o rmgr/dspdrv.o \ - rmgr/nldr.o rmgr/drv_interface.o -libdload = dynload/cload.o dynload/getsection.o dynload/reloc.o \ - dynload/tramp.o -libhw = hw/hw_mmu.o - -tidspbridge-y := $(libgen) $(libservices) $(libcore) $(libpmgr) $(librmgr) \ - $(libdload) $(libhw) - -#Machine dependent -ccflags-y += -D_TI_ -D_DB_TIOMAP -DTMS32060 \ - -DTICFG_PROC_VER -DTICFG_EVM_TYPE -DCHNL_SMCLASS \ - -DCHNL_MESSAGES -DUSE_LEVEL_1_MACROS - -ccflags-y += -Idrivers/staging/tidspbridge/include -ccflags-y += -Idrivers/staging/tidspbridge/services -ccflags-y += -Idrivers/staging/tidspbridge/core -ccflags-y += -Idrivers/staging/tidspbridge/pmgr -ccflags-y += -Idrivers/staging/tidspbridge/rmgr -ccflags-y += -Idrivers/staging/tidspbridge/dynload -ccflags-y += -Idrivers/staging/tidspbridge/hw -ccflags-y += -Iarch/arm - diff --git a/drivers/staging/tidspbridge/TODO b/drivers/staging/tidspbridge/TODO deleted file mode 100644 index 1c51e2dc7b56..000000000000 --- a/drivers/staging/tidspbridge/TODO +++ /dev/null @@ -1,18 +0,0 @@ -* Migrate to (and if necessary, extend) existing upstream code such as - iommu, wdt, mcbsp, gptimers -* Decouple hardware-specific code (e.g. bridge_brd_start/stop/delete/monitor) -* DOFF binary loader: consider pushing to user space. at the very least - eliminate the direct filesystem access -* Eliminate general services and libraries - use or extend existing kernel - libraries instead (e.g. gcf/lcm in nldr.c, global helpers in gen/) -* Eliminate direct manipulation of OMAP_SYSC_BASE -* Eliminate DSP_SUCCEEDED macros and their imposed redundant indentations - (adopt the kernel way of checking for return values) -* Audit interfaces exposed to user space -* Audit and clean up header files folder -* Use kernel coding style -* checkpatch.pl fixes -* allocate ext_mem_pool from consistent memory instead of using ioremap - -Please send any patches to Greg Kroah-Hartman -and Omar Ramirez Luna . diff --git a/drivers/staging/tidspbridge/core/_cmm.h b/drivers/staging/tidspbridge/core/_cmm.h deleted file mode 100644 index 7660bef6ebb3..000000000000 --- a/drivers/staging/tidspbridge/core/_cmm.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * _cmm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private header file defining CMM manager objects and defines needed - * by IO manager to register shared memory regions when DSP base image - * is loaded(bridge_io_on_loaded). - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _CMM_ -#define _CMM_ - -/* - * These target side symbols define the beginning and ending addresses - * of the section of shared memory used for shared memory manager CMM. - * They are defined in the *cfg.cmd file by cdb code. - */ -#define SHM0_SHARED_BASE_SYM "_SHM0_BEG" -#define SHM0_SHARED_END_SYM "_SHM0_END" -#define SHM0_SHARED_RESERVED_BASE_SYM "_SHM0_RSVDSTRT" - -/* - * Shared Memory Region #0(SHMSEG0) is used in the following way: - * - * |(_SHM0_BEG) | (_SHM0_RSVDSTRT) | (_SHM0_END) - * V V V - * ------------------------------------------------------------ - * | DSP-side allocations | GPP-side allocations | - * ------------------------------------------------------------ - * - * - */ - -#endif /* _CMM_ */ diff --git a/drivers/staging/tidspbridge/core/_deh.h b/drivers/staging/tidspbridge/core/_deh.h deleted file mode 100644 index 025d34320e7e..000000000000 --- a/drivers/staging/tidspbridge/core/_deh.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * _deh.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private header for DEH module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * Copyright (C) 2010 Felipe Contreras - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _DEH_ -#define _DEH_ - -#include -#include - -/* DEH Manager: only one created per board: */ -struct deh_mgr { - struct bridge_dev_context *bridge_context; /* Bridge context. */ - struct ntfy_object *ntfy_obj; /* NTFY object */ - - /* MMU Fault DPC */ - struct tasklet_struct dpc_tasklet; -}; - -#endif /* _DEH_ */ diff --git a/drivers/staging/tidspbridge/core/_msg_sm.h b/drivers/staging/tidspbridge/core/_msg_sm.h deleted file mode 100644 index f6e58e3f3b48..000000000000 --- a/drivers/staging/tidspbridge/core/_msg_sm.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * _msg_sm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private header file defining msg_ctrl manager objects and defines needed - * by IO manager. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _MSG_SM_ -#define _MSG_SM_ - -#include -#include - -/* - * These target side symbols define the beginning and ending addresses - * of the section of shared memory used for messages. They are - * defined in the *cfg.cmd file by cdb code. - */ -#define MSG_SHARED_BUFFER_BASE_SYM "_MSG_BEG" -#define MSG_SHARED_BUFFER_LIMIT_SYM "_MSG_END" - -#ifndef _CHNL_WORDSIZE -#define _CHNL_WORDSIZE 4 /* default _CHNL_WORDSIZE is 2 bytes/word */ -#endif - -/* - * ======== msg_ctrl ======== - * There is a control structure for messages to the DSP, and a control - * structure for messages from the DSP. The shared memory region for - * transferring messages is partitioned as follows: - * - * ---------------------------------------------------------- - * |Control | Messages from DSP | Control | Messages to DSP | - * ---------------------------------------------------------- - * - * msg_ctrl control structure for messages to the DSP is used in the following - * way: - * - * buf_empty - This flag is set to FALSE by the GPP after it has output - * messages for the DSP. The DSP host driver sets it to - * TRUE after it has copied the messages. - * post_swi - Set to 1 by the GPP after it has written the messages, - * set the size, and set buf_empty to FALSE. - * The DSP Host driver uses SWI_andn of the post_swi field - * when a host interrupt occurs. The host driver clears - * this after posting the SWI. - * size - Number of messages to be read by the DSP. - * - * For messages from the DSP: - * buf_empty - This flag is set to FALSE by the DSP after it has output - * messages for the GPP. The DPC on the GPP sets it to - * TRUE after it has copied the messages. - * post_swi - Set to 1 the DPC on the GPP after copying the messages. - * size - Number of messages to be read by the GPP. - */ -struct msg_ctrl { - u32 buf_empty; /* to/from DSP buffer is empty */ - u32 post_swi; /* Set to "1" to post msg_ctrl SWI */ - u32 size; /* Number of messages to/from the DSP */ - u32 resvd; -}; - -/* - * ======== msg_mgr ======== - * The msg_mgr maintains a list of all MSG_QUEUEs. Each NODE object can - * have msg_queue to hold all messages that come up from the corresponding - * node on the DSP. The msg_mgr also has a shared queue of messages - * ready to go to the DSP. - */ -struct msg_mgr { - /* The first field must match that in msgobj.h */ - - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - - struct io_mgr *iomgr; /* IO manager */ - struct list_head queue_list; /* List of MSG_QUEUEs */ - spinlock_t msg_mgr_lock; /* For critical sections */ - /* Signalled when MsgFrame is available */ - struct sync_object *sync_event; - struct list_head msg_free_list; /* Free MsgFrames ready to be filled */ - struct list_head msg_used_list; /* MsgFrames ready to go to DSP */ - u32 msgs_pending; /* # of queued messages to go to DSP */ - u32 max_msgs; /* Max # of msgs that fit in buffer */ - msg_onexit on_exit; /* called when RMS_EXIT is received */ -}; - -/* - * ======== msg_queue ======== - * Each NODE has a msg_queue for receiving messages from the - * corresponding node on the DSP. The msg_queue object maintains a list - * of messages that have been sent to the host, but not yet read (MSG_Get), - * and a list of free frames that can be filled when new messages arrive - * from the DSP. - * The msg_queue's hSynEvent gets posted when a message is ready. - */ -struct msg_queue { - struct list_head list_elem; - struct msg_mgr *msg_mgr; - u32 max_msgs; /* Node message depth */ - u32 msgq_id; /* Node environment pointer */ - struct list_head msg_free_list; /* Free MsgFrames ready to be filled */ - /* Filled MsgFramess waiting to be read */ - struct list_head msg_used_list; - void *arg; /* Handle passed to mgr on_exit callback */ - struct sync_object *sync_event; /* Signalled when message is ready */ - struct sync_object *sync_done; /* For synchronizing cleanup */ - struct sync_object *sync_done_ack; /* For synchronizing cleanup */ - struct ntfy_object *ntfy_obj; /* For notification of message ready */ - bool done; /* TRUE <==> deleting the object */ - u32 io_msg_pend; /* Number of pending MSG_get/put calls */ -}; - -/* - * ======== msg_dspmsg ======== - */ -struct msg_dspmsg { - struct dsp_msg msg; - u32 msgq_id; /* Identifies the node the message goes to */ -}; - -/* - * ======== msg_frame ======== - */ -struct msg_frame { - struct list_head list_elem; - struct msg_dspmsg msg_data; -}; - -#endif /* _MSG_SM_ */ diff --git a/drivers/staging/tidspbridge/core/_tiomap.h b/drivers/staging/tidspbridge/core/_tiomap.h deleted file mode 100644 index 65971b784b78..000000000000 --- a/drivers/staging/tidspbridge/core/_tiomap.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * _tiomap.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Definitions and types private to this Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _TIOMAP_ -#define _TIOMAP_ - -/* - * XXX These powerdomain.h/clockdomain.h includes are wrong and should - * be removed. No driver should call pwrdm_* or clkdm_* functions - * directly; they should rely on OMAP core code to do this. - */ -#include -#include -/* - * XXX These mach-omap2/ includes are wrong and should be removed. No - * driver should read or write to PRM/CM registers directly; they - * should rely on OMAP core code to do this. - */ -#include -#include -#include -#include -#include -#include /* for bridge_ioctl_extproc defn */ -#include -#include - -struct map_l4_peripheral { - u32 phys_addr; - u32 dsp_virt_addr; -}; - -#define ARM_MAILBOX_START 0xfffcf000 -#define ARM_MAILBOX_LENGTH 0x800 - -/* New Registers in OMAP3.1 */ - -#define TESTBLOCK_ID_START 0xfffed400 -#define TESTBLOCK_ID_LENGTH 0xff - -/* ID Returned by OMAP1510 */ -#define TBC_ID_VALUE 0xB47002F - -#define SPACE_LENGTH 0x2000 -#define API_CLKM_DPLL_DMA 0xfffec000 -#define ARM_INTERRUPT_OFFSET 0xb00 - -#define BIOS24XX - -#define L4_PERIPHERAL_NULL 0x0 -#define DSPVA_PERIPHERAL_NULL 0x0 - -#define MAX_LOCK_TLB_ENTRIES 15 - -#define L4_PERIPHERAL_PRM 0x48306000 /*PRM L4 Peripheral */ -#define DSPVA_PERIPHERAL_PRM 0x1181e000 -#define L4_PERIPHERAL_SCM 0x48002000 /*SCM L4 Peripheral */ -#define DSPVA_PERIPHERAL_SCM 0x1181f000 -#define L4_PERIPHERAL_MMU 0x5D000000 /*MMU L4 Peripheral */ -#define DSPVA_PERIPHERAL_MMU 0x11820000 -#define L4_PERIPHERAL_CM 0x48004000 /* Core L4, Clock Management */ -#define DSPVA_PERIPHERAL_CM 0x1181c000 -#define L4_PERIPHERAL_PER 0x48005000 /* PER */ -#define DSPVA_PERIPHERAL_PER 0x1181d000 - -#define L4_PERIPHERAL_GPIO1 0x48310000 -#define DSPVA_PERIPHERAL_GPIO1 0x11809000 -#define L4_PERIPHERAL_GPIO2 0x49050000 -#define DSPVA_PERIPHERAL_GPIO2 0x1180a000 -#define L4_PERIPHERAL_GPIO3 0x49052000 -#define DSPVA_PERIPHERAL_GPIO3 0x1180b000 -#define L4_PERIPHERAL_GPIO4 0x49054000 -#define DSPVA_PERIPHERAL_GPIO4 0x1180c000 -#define L4_PERIPHERAL_GPIO5 0x49056000 -#define DSPVA_PERIPHERAL_GPIO5 0x1180d000 - -#define L4_PERIPHERAL_IVA2WDT 0x49030000 -#define DSPVA_PERIPHERAL_IVA2WDT 0x1180e000 - -#define L4_PERIPHERAL_DISPLAY 0x48050000 -#define DSPVA_PERIPHERAL_DISPLAY 0x1180f000 - -#define L4_PERIPHERAL_SSI 0x48058000 -#define DSPVA_PERIPHERAL_SSI 0x11804000 -#define L4_PERIPHERAL_GDD 0x48059000 -#define DSPVA_PERIPHERAL_GDD 0x11805000 -#define L4_PERIPHERAL_SS1 0x4805a000 -#define DSPVA_PERIPHERAL_SS1 0x11806000 -#define L4_PERIPHERAL_SS2 0x4805b000 -#define DSPVA_PERIPHERAL_SS2 0x11807000 - -#define L4_PERIPHERAL_CAMERA 0x480BC000 -#define DSPVA_PERIPHERAL_CAMERA 0x11819000 - -#define L4_PERIPHERAL_SDMA 0x48056000 -#define DSPVA_PERIPHERAL_SDMA 0x11810000 /* 0x1181d000 conflict w/ PER */ - -#define L4_PERIPHERAL_UART1 0x4806a000 -#define DSPVA_PERIPHERAL_UART1 0x11811000 -#define L4_PERIPHERAL_UART2 0x4806c000 -#define DSPVA_PERIPHERAL_UART2 0x11812000 -#define L4_PERIPHERAL_UART3 0x49020000 -#define DSPVA_PERIPHERAL_UART3 0x11813000 - -#define L4_PERIPHERAL_MCBSP1 0x48074000 -#define DSPVA_PERIPHERAL_MCBSP1 0x11814000 -#define L4_PERIPHERAL_MCBSP2 0x49022000 -#define DSPVA_PERIPHERAL_MCBSP2 0x11815000 -#define L4_PERIPHERAL_MCBSP3 0x49024000 -#define DSPVA_PERIPHERAL_MCBSP3 0x11816000 -#define L4_PERIPHERAL_MCBSP4 0x49026000 -#define DSPVA_PERIPHERAL_MCBSP4 0x11817000 -#define L4_PERIPHERAL_MCBSP5 0x48096000 -#define DSPVA_PERIPHERAL_MCBSP5 0x11818000 - -#define L4_PERIPHERAL_GPTIMER5 0x49038000 -#define DSPVA_PERIPHERAL_GPTIMER5 0x11800000 -#define L4_PERIPHERAL_GPTIMER6 0x4903a000 -#define DSPVA_PERIPHERAL_GPTIMER6 0x11801000 -#define L4_PERIPHERAL_GPTIMER7 0x4903c000 -#define DSPVA_PERIPHERAL_GPTIMER7 0x11802000 -#define L4_PERIPHERAL_GPTIMER8 0x4903e000 -#define DSPVA_PERIPHERAL_GPTIMER8 0x11803000 - -#define L4_PERIPHERAL_SPI1 0x48098000 -#define DSPVA_PERIPHERAL_SPI1 0x1181a000 -#define L4_PERIPHERAL_SPI2 0x4809a000 -#define DSPVA_PERIPHERAL_SPI2 0x1181b000 - -#define L4_PERIPHERAL_MBOX 0x48094000 -#define DSPVA_PERIPHERAL_MBOX 0x11808000 - -#define PM_GRPSEL_BASE 0x48307000 -#define DSPVA_GRPSEL_BASE 0x11821000 - -#define L4_PERIPHERAL_SIDETONE_MCBSP2 0x49028000 -#define DSPVA_PERIPHERAL_SIDETONE_MCBSP2 0x11824000 -#define L4_PERIPHERAL_SIDETONE_MCBSP3 0x4902a000 -#define DSPVA_PERIPHERAL_SIDETONE_MCBSP3 0x11825000 - -/* define a static array with L4 mappings */ -static const struct map_l4_peripheral l4_peripheral_table[] = { - {L4_PERIPHERAL_MBOX, DSPVA_PERIPHERAL_MBOX}, - {L4_PERIPHERAL_SCM, DSPVA_PERIPHERAL_SCM}, - {L4_PERIPHERAL_MMU, DSPVA_PERIPHERAL_MMU}, - {L4_PERIPHERAL_GPTIMER5, DSPVA_PERIPHERAL_GPTIMER5}, - {L4_PERIPHERAL_GPTIMER6, DSPVA_PERIPHERAL_GPTIMER6}, - {L4_PERIPHERAL_GPTIMER7, DSPVA_PERIPHERAL_GPTIMER7}, - {L4_PERIPHERAL_GPTIMER8, DSPVA_PERIPHERAL_GPTIMER8}, - {L4_PERIPHERAL_GPIO1, DSPVA_PERIPHERAL_GPIO1}, - {L4_PERIPHERAL_GPIO2, DSPVA_PERIPHERAL_GPIO2}, - {L4_PERIPHERAL_GPIO3, DSPVA_PERIPHERAL_GPIO3}, - {L4_PERIPHERAL_GPIO4, DSPVA_PERIPHERAL_GPIO4}, - {L4_PERIPHERAL_GPIO5, DSPVA_PERIPHERAL_GPIO5}, - {L4_PERIPHERAL_IVA2WDT, DSPVA_PERIPHERAL_IVA2WDT}, - {L4_PERIPHERAL_DISPLAY, DSPVA_PERIPHERAL_DISPLAY}, - {L4_PERIPHERAL_SSI, DSPVA_PERIPHERAL_SSI}, - {L4_PERIPHERAL_GDD, DSPVA_PERIPHERAL_GDD}, - {L4_PERIPHERAL_SS1, DSPVA_PERIPHERAL_SS1}, - {L4_PERIPHERAL_SS2, DSPVA_PERIPHERAL_SS2}, - {L4_PERIPHERAL_UART1, DSPVA_PERIPHERAL_UART1}, - {L4_PERIPHERAL_UART2, DSPVA_PERIPHERAL_UART2}, - {L4_PERIPHERAL_UART3, DSPVA_PERIPHERAL_UART3}, - {L4_PERIPHERAL_MCBSP1, DSPVA_PERIPHERAL_MCBSP1}, - {L4_PERIPHERAL_MCBSP2, DSPVA_PERIPHERAL_MCBSP2}, - {L4_PERIPHERAL_MCBSP3, DSPVA_PERIPHERAL_MCBSP3}, - {L4_PERIPHERAL_MCBSP4, DSPVA_PERIPHERAL_MCBSP4}, - {L4_PERIPHERAL_MCBSP5, DSPVA_PERIPHERAL_MCBSP5}, - {L4_PERIPHERAL_CAMERA, DSPVA_PERIPHERAL_CAMERA}, - {L4_PERIPHERAL_SPI1, DSPVA_PERIPHERAL_SPI1}, - {L4_PERIPHERAL_SPI2, DSPVA_PERIPHERAL_SPI2}, - {L4_PERIPHERAL_PRM, DSPVA_PERIPHERAL_PRM}, - {L4_PERIPHERAL_CM, DSPVA_PERIPHERAL_CM}, - {L4_PERIPHERAL_PER, DSPVA_PERIPHERAL_PER}, - {PM_GRPSEL_BASE, DSPVA_GRPSEL_BASE}, - {L4_PERIPHERAL_SIDETONE_MCBSP2, DSPVA_PERIPHERAL_SIDETONE_MCBSP2}, - {L4_PERIPHERAL_SIDETONE_MCBSP3, DSPVA_PERIPHERAL_SIDETONE_MCBSP3}, - {L4_PERIPHERAL_NULL, DSPVA_PERIPHERAL_NULL} -}; - -/* - * 15 10 0 - * --------------------------------- - * |0|0|1|0|0|0|c|c|c|i|i|i|i|i|i|i| - * --------------------------------- - * | (class) | (module specific) | - * - * where c -> Externel Clock Command: Clk & Autoidle Disable/Enable - * i -> External Clock ID Timers 5,6,7,8, McBSP1,2 and WDT3 - */ - -/* MBX_PM_CLK_IDMASK: DSP External clock id mask. */ -#define MBX_PM_CLK_IDMASK 0x7F - -/* MBX_PM_CLK_CMDSHIFT: DSP External clock command shift. */ -#define MBX_PM_CLK_CMDSHIFT 7 - -/* MBX_PM_CLK_CMDMASK: DSP External clock command mask. */ -#define MBX_PM_CLK_CMDMASK 7 - -/* MBX_PM_MAX_RESOURCES: CORE 1 Clock resources. */ -#define MBX_CORE1_RESOURCES 7 - -/* MBX_PM_MAX_RESOURCES: CORE 2 Clock Resources. */ -#define MBX_CORE2_RESOURCES 1 - -/* MBX_PM_MAX_RESOURCES: TOTAL Clock Resources. */ -#define MBX_PM_MAX_RESOURCES 11 - -/* Power Management Commands */ -#define BPWR_DISABLE_CLOCK 0 -#define BPWR_ENABLE_CLOCK 1 - -/* OMAP242x specific resources */ -enum bpwr_ext_clock_id { - BPWR_GP_TIMER5 = 0x10, - BPWR_GP_TIMER6, - BPWR_GP_TIMER7, - BPWR_GP_TIMER8, - BPWR_WD_TIMER3, - BPWR_MCBSP1, - BPWR_MCBSP2, - BPWR_MCBSP3, - BPWR_MCBSP4, - BPWR_MCBSP5, - BPWR_SSI = 0x20 -}; - -static const u32 bpwr_clkid[] = { - (u32) BPWR_GP_TIMER5, - (u32) BPWR_GP_TIMER6, - (u32) BPWR_GP_TIMER7, - (u32) BPWR_GP_TIMER8, - (u32) BPWR_WD_TIMER3, - (u32) BPWR_MCBSP1, - (u32) BPWR_MCBSP2, - (u32) BPWR_MCBSP3, - (u32) BPWR_MCBSP4, - (u32) BPWR_MCBSP5, - (u32) BPWR_SSI -}; - -struct bpwr_clk_t { - u32 clk_id; - enum dsp_clk_id clk; -}; - -static const struct bpwr_clk_t bpwr_clks[] = { - {(u32) BPWR_GP_TIMER5, DSP_CLK_GPT5}, - {(u32) BPWR_GP_TIMER6, DSP_CLK_GPT6}, - {(u32) BPWR_GP_TIMER7, DSP_CLK_GPT7}, - {(u32) BPWR_GP_TIMER8, DSP_CLK_GPT8}, - {(u32) BPWR_WD_TIMER3, DSP_CLK_WDT3}, - {(u32) BPWR_MCBSP1, DSP_CLK_MCBSP1}, - {(u32) BPWR_MCBSP2, DSP_CLK_MCBSP2}, - {(u32) BPWR_MCBSP3, DSP_CLK_MCBSP3}, - {(u32) BPWR_MCBSP4, DSP_CLK_MCBSP4}, - {(u32) BPWR_MCBSP5, DSP_CLK_MCBSP5}, - {(u32) BPWR_SSI, DSP_CLK_SSI} -}; - -/* Interrupt Register Offsets */ -#define INTH_IT_REG_OFFSET 0x00 /* Interrupt register offset */ -#define INTH_MASK_IT_REG_OFFSET 0x04 /* Mask Interrupt reg offset */ - -#define DSP_MAILBOX1_INT 10 -/* - * Bit definition of Interrupt Level Registers - */ - -/* Mail Box defines */ -#define MB_ARM2DSP1_REG_OFFSET 0x00 - -#define MB_ARM2DSP1B_REG_OFFSET 0x04 - -#define MB_DSP2ARM1B_REG_OFFSET 0x0C - -#define MB_ARM2DSP1_FLAG_REG_OFFSET 0x18 - -#define MB_ARM2DSP_FLAG 0x0001 - -#define MBOX_ARM2DSP HW_MBOX_ID0 -#define MBOX_DSP2ARM HW_MBOX_ID1 -#define MBOX_ARM HW_MBOX_U0_ARM -#define MBOX_DSP HW_MBOX_U1_DSP1 - -#define ENABLE true -#define DISABLE false - -#define HIGH_LEVEL true -#define LOW_LEVEL false - -/* Macro's */ -#define CLEAR_BIT(reg, mask) (reg &= ~mask) -#define SET_BIT(reg, mask) (reg |= mask) - -#define SET_GROUP_BITS16(reg, position, width, value) \ - do {\ - reg &= ~((0xFFFF >> (16 - (width))) << (position)); \ - reg |= ((value & (0xFFFF >> (16 - (width)))) << (position)); \ - } while (0); - -#define CLEAR_BIT_INDEX(reg, index) (reg &= ~(1 << (index))) - -/* This Bridge driver's device context: */ -struct bridge_dev_context { - struct dev_object *dev_obj; /* Handle to Bridge device object. */ - u32 dsp_base_addr; /* Arm's API to DSP virt base addr */ - /* - * DSP External memory prog address as seen virtually by the OS on - * the host side. - */ - u32 dsp_ext_base_addr; /* See the comment above */ - u32 api_reg_base; /* API mem map'd registers */ - void __iomem *dsp_mmu_base; /* DSP MMU Mapped registers */ - u32 api_clk_base; /* CLK Registers */ - u32 dsp_clk_m2_base; /* DSP Clock Module m2 */ - u32 public_rhea; /* Pub Rhea */ - u32 int_addr; /* MB INTR reg */ - u32 tc_endianism; /* TC Endianism register */ - u32 test_base; /* DSP MMU Mapped registers */ - u32 self_loop; /* Pointer to the selfloop */ - u32 dsp_start_add; /* API Boot vector */ - u32 internal_size; /* Internal memory size */ - - struct omap_mbox *mbox; /* Mail box handle */ - - struct cfg_hostres *resources; /* Host Resources */ - - /* - * Processor specific info is set when prog loaded and read from DCD. - * [See bridge_dev_ctrl()] PROC info contains DSP-MMU TLB entries. - */ - /* DMMU TLB entries */ - struct bridge_ioctl_extproc atlb_entry[BRDIOCTL_NUMOFMMUTLB]; - u32 brd_state; /* Last known board state. */ - - /* TC Settings */ - bool tc_word_swap_on; /* Traffic Controller Word Swap */ - struct pg_table_attrs *pt_attrs; - u32 dsp_per_clks; -}; - -/* - * If dsp_debug is true, do not branch to the DSP entry - * point and wait for DSP to boot. - */ -extern s32 dsp_debug; - -/* - * ======== sm_interrupt_dsp ======== - * Purpose: - * Set interrupt value & send an interrupt to the DSP processor(s). - * This is typically used when mailbox interrupt mechanisms allow data - * to be associated with interrupt such as for OMAP's CMD/DATA regs. - * Parameters: - * dev_context: Handle to Bridge driver defined device info. - * mb_val: Value associated with interrupt(e.g. mailbox value). - * Returns: - * 0: Interrupt sent; - * else: Unable to send interrupt. - * Requires: - * Ensures: - */ -int sm_interrupt_dsp(struct bridge_dev_context *dev_context, u16 mb_val); - -#endif /* _TIOMAP_ */ diff --git a/drivers/staging/tidspbridge/core/_tiomap_pwr.h b/drivers/staging/tidspbridge/core/_tiomap_pwr.h deleted file mode 100644 index 7bbd3802c15f..000000000000 --- a/drivers/staging/tidspbridge/core/_tiomap_pwr.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * _tiomap_pwr.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Definitions and types for the DSP wake/sleep routines. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _TIOMAP_PWR_ -#define _TIOMAP_PWR_ - -#ifdef CONFIG_PM -extern s32 dsp_test_sleepstate; -#endif - -extern struct mailbox_context mboxsetting; - -/* - * ======== wake_dsp ========= - * Wakes up the DSP from DeepSleep - */ -extern int wake_dsp(struct bridge_dev_context *dev_context, - void *pargs); - -/* - * ======== sleep_dsp ========= - * Places the DSP in DeepSleep. - */ -extern int sleep_dsp(struct bridge_dev_context *dev_context, - u32 dw_cmd, void *pargs); -/* - * ========interrupt_dsp======== - * Sends an interrupt to DSP unconditionally. - */ -extern void interrupt_dsp(struct bridge_dev_context *dev_context, - u16 mb_val); - -/* - * ======== wake_dsp ========= - * Wakes up the DSP from DeepSleep - */ -extern int dsp_peripheral_clk_ctrl(struct bridge_dev_context - *dev_context, void *pargs); -/* - * ======== handle_hibernation_from_dsp ======== - * Handle Hibernation requested from DSP - */ -int handle_hibernation_from_dsp(struct bridge_dev_context *dev_context); -/* - * ======== post_scale_dsp ======== - * Handle Post Scale notification to DSP - */ -int post_scale_dsp(struct bridge_dev_context *dev_context, - void *pargs); -/* - * ======== pre_scale_dsp ======== - * Handle Pre Scale notification to DSP - */ -int pre_scale_dsp(struct bridge_dev_context *dev_context, - void *pargs); -/* - * ======== handle_constraints_set ======== - * Handle constraints request from DSP - */ -int handle_constraints_set(struct bridge_dev_context *dev_context, - void *pargs); - -/* - * ======== dsp_clk_wakeup_event_ctrl ======== - * This function sets the group selction bits for while - * enabling/disabling. - */ -void dsp_clk_wakeup_event_ctrl(u32 clock_id, bool enable); - -#endif /* _TIOMAP_PWR_ */ diff --git a/drivers/staging/tidspbridge/core/chnl_sm.c b/drivers/staging/tidspbridge/core/chnl_sm.c deleted file mode 100644 index c855992f5950..000000000000 --- a/drivers/staging/tidspbridge/core/chnl_sm.c +++ /dev/null @@ -1,908 +0,0 @@ -/* - * chnl_sm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implements upper edge functions for Bridge driver channel module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * The lower edge functions must be implemented by the Bridge driver - * writer, and are declared in chnl_sm.h. - * - * Care is taken in this code to prevent simultaneous access to channel - * queues from - * 1. Threads. - * 2. io_dpc(), scheduled from the io_isr() as an event. - * - * This is done primarily by: - * - Semaphores. - * - state flags in the channel object; and - * - ensuring the IO_Dispatch() routine, which is called from both - * CHNL_AddIOReq() and the DPC(if implemented), is not re-entered. - * - * Channel Invariant: - * There is an important invariant condition which must be maintained per - * channel outside of bridge_chnl_get_ioc() and IO_Dispatch(), violation of - * which may cause timeouts and/or failure of function sync_wait_on_event. - * This invariant condition is: - * - * list_empty(&pchnl->io_completions) ==> pchnl->sync_event is reset - * and - * !list_empty(&pchnl->io_completions) ==> pchnl->sync_event is set. - */ - -#include - -/* ----------------------------------- OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Bridge Driver */ -#include -#include -#include "_tiomap.h" - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- Others */ -#include - -/* ----------------------------------- Define for This */ -#define USERMODE_ADDR PAGE_OFFSET - -#define MAILBOX_IRQ INT_MAIL_MPU_IRQ - -/* ----------------------------------- Function Prototypes */ -static int create_chirp_list(struct list_head *list, u32 chirps); - -static void free_chirp_list(struct list_head *list); - -static int search_free_channel(struct chnl_mgr *chnl_mgr_obj, - u32 *chnl); - -/* - * ======== bridge_chnl_add_io_req ======== - * Enqueue an I/O request for data transfer on a channel to the DSP. - * The direction (mode) is specified in the channel object. Note the DSP - * address is specified for channels opened in direct I/O mode. - */ -int bridge_chnl_add_io_req(struct chnl_object *chnl_obj, void *host_buf, - u32 byte_size, u32 buf_size, - u32 dw_dsp_addr, u32 dw_arg) -{ - int status = 0; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - struct chnl_irp *chnl_packet_obj = NULL; - struct bridge_dev_context *dev_ctxt; - struct dev_object *dev_obj; - u8 dw_state; - bool is_eos; - struct chnl_mgr *chnl_mgr_obj; - u8 *host_sys_buf = NULL; - bool sched_dpc = false; - u16 mb_val = 0; - - is_eos = (byte_size == 0); - - /* Validate args */ - if (!host_buf || !pchnl) - return -EFAULT; - - if (is_eos && CHNL_IS_INPUT(pchnl->chnl_mode)) - return -EPERM; - - /* - * Check the channel state: only queue chirp if channel state - * allows it. - */ - dw_state = pchnl->state; - if (dw_state != CHNL_STATEREADY) { - if (dw_state & CHNL_STATECANCEL) - return -ECANCELED; - if ((dw_state & CHNL_STATEEOS) && - CHNL_IS_OUTPUT(pchnl->chnl_mode)) - return -EPIPE; - /* No other possible states left */ - } - - dev_obj = dev_get_first(); - dev_get_bridge_context(dev_obj, &dev_ctxt); - if (!dev_ctxt) - return -EFAULT; - - if (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1 && host_buf) { - if (!(host_buf < (void *)USERMODE_ADDR)) { - host_sys_buf = host_buf; - goto func_cont; - } - /* if addr in user mode, then copy to kernel space */ - host_sys_buf = kmalloc(buf_size, GFP_KERNEL); - if (host_sys_buf == NULL) - return -ENOMEM; - - if (CHNL_IS_OUTPUT(pchnl->chnl_mode)) { - status = copy_from_user(host_sys_buf, host_buf, - buf_size); - if (status) { - kfree(host_sys_buf); - host_sys_buf = NULL; - return -EFAULT; - } - } - } -func_cont: - /* Mailbox IRQ is disabled to avoid race condition with DMA/ZCPY - * channels. DPCCS is held to avoid race conditions with PCPY channels. - * If DPC is scheduled in process context (iosm_schedule) and any - * non-mailbox interrupt occurs, that DPC will run and break CS. Hence - * we disable ALL DPCs. We will try to disable ONLY IO DPC later. */ - chnl_mgr_obj = pchnl->chnl_mgr_obj; - spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); - omap_mbox_disable_irq(dev_ctxt->mbox, IRQ_RX); - if (pchnl->chnl_type == CHNL_PCPY) { - /* This is a processor-copy channel. */ - if (CHNL_IS_OUTPUT(pchnl->chnl_mode)) { - /* Check buffer size on output channels for fit. */ - if (byte_size > io_buf_size( - pchnl->chnl_mgr_obj->iomgr)) { - status = -EINVAL; - goto out; - } - } - } - - /* Get a free chirp: */ - if (list_empty(&pchnl->free_packets_list)) { - status = -EIO; - goto out; - } - chnl_packet_obj = list_first_entry(&pchnl->free_packets_list, - struct chnl_irp, link); - list_del(&chnl_packet_obj->link); - - /* Enqueue the chirp on the chnl's IORequest queue: */ - chnl_packet_obj->host_user_buf = chnl_packet_obj->host_sys_buf = - host_buf; - if (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1) - chnl_packet_obj->host_sys_buf = host_sys_buf; - - /* - * Note: for dma chans dw_dsp_addr contains dsp address - * of SM buffer. - */ - /* DSP address */ - chnl_packet_obj->dsp_tx_addr = dw_dsp_addr / chnl_mgr_obj->word_size; - chnl_packet_obj->byte_size = byte_size; - chnl_packet_obj->buf_size = buf_size; - /* Only valid for output channel */ - chnl_packet_obj->arg = dw_arg; - chnl_packet_obj->status = (is_eos ? CHNL_IOCSTATEOS : - CHNL_IOCSTATCOMPLETE); - list_add_tail(&chnl_packet_obj->link, &pchnl->io_requests); - pchnl->cio_reqs++; - /* - * If end of stream, update the channel state to prevent - * more IOR's. - */ - if (is_eos) - pchnl->state |= CHNL_STATEEOS; - - /* Request IO from the DSP */ - io_request_chnl(chnl_mgr_obj->iomgr, pchnl, - (CHNL_IS_INPUT(pchnl->chnl_mode) ? IO_INPUT : - IO_OUTPUT), &mb_val); - sched_dpc = true; -out: - omap_mbox_enable_irq(dev_ctxt->mbox, IRQ_RX); - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); - if (mb_val != 0) - sm_interrupt_dsp(dev_ctxt, mb_val); - - /* Schedule a DPC, to do the actual data transfer */ - if (sched_dpc) - iosm_schedule(chnl_mgr_obj->iomgr); - - return status; -} - -/* - * ======== bridge_chnl_cancel_io ======== - * Return all I/O requests to the client which have not yet been - * transferred. The channel's I/O completion object is - * signalled, and all the I/O requests are queued as IOC's, with the - * status field set to CHNL_IOCSTATCANCEL. - * This call is typically used in abort situations, and is a prelude to - * chnl_close(); - */ -int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) -{ - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - u32 chnl_id = -1; - s8 chnl_mode; - struct chnl_irp *chirp, *tmp; - struct chnl_mgr *chnl_mgr_obj = NULL; - - /* Check args: */ - if (!pchnl || !pchnl->chnl_mgr_obj) - return -EFAULT; - - chnl_id = pchnl->chnl_id; - chnl_mode = pchnl->chnl_mode; - chnl_mgr_obj = pchnl->chnl_mgr_obj; - - /* Mark this channel as cancelled, to prevent further IORequests or - * IORequests or dispatching. */ - spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); - - pchnl->state |= CHNL_STATECANCEL; - - if (list_empty(&pchnl->io_requests)) { - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); - return 0; - } - - if (pchnl->chnl_type == CHNL_PCPY) { - /* Indicate we have no more buffers available for transfer: */ - if (CHNL_IS_INPUT(pchnl->chnl_mode)) { - io_cancel_chnl(chnl_mgr_obj->iomgr, chnl_id); - } else { - /* Record that we no longer have output buffers - * available: */ - chnl_mgr_obj->output_mask &= ~(1 << chnl_id); - } - } - /* Move all IOR's to IOC queue: */ - list_for_each_entry_safe(chirp, tmp, &pchnl->io_requests, link) { - list_del(&chirp->link); - chirp->byte_size = 0; - chirp->status |= CHNL_IOCSTATCANCEL; - list_add_tail(&chirp->link, &pchnl->io_completions); - pchnl->cio_cs++; - pchnl->cio_reqs--; - } - - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); - - return 0; -} - -/* - * ======== bridge_chnl_close ======== - * Purpose: - * Ensures all pending I/O on this channel is cancelled, discards all - * queued I/O completion notifications, then frees the resources allocated - * for this channel, and makes the corresponding logical channel id - * available for subsequent use. - */ -int bridge_chnl_close(struct chnl_object *chnl_obj) -{ - int status; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - - /* Check args: */ - if (!pchnl) - return -EFAULT; - /* Cancel IO: this ensures no further IO requests or notifications */ - status = bridge_chnl_cancel_io(chnl_obj); - if (status) - return status; - /* Invalidate channel object: Protects from CHNL_GetIOCompletion() */ - /* Free the slot in the channel manager: */ - pchnl->chnl_mgr_obj->channels[pchnl->chnl_id] = NULL; - spin_lock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); - pchnl->chnl_mgr_obj->open_channels -= 1; - spin_unlock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); - if (pchnl->ntfy_obj) { - ntfy_delete(pchnl->ntfy_obj); - kfree(pchnl->ntfy_obj); - pchnl->ntfy_obj = NULL; - } - /* Reset channel event: (NOTE: user_event freed in user context) */ - if (pchnl->sync_event) { - sync_reset_event(pchnl->sync_event); - kfree(pchnl->sync_event); - pchnl->sync_event = NULL; - } - /* Free I/O request and I/O completion queues: */ - free_chirp_list(&pchnl->io_completions); - pchnl->cio_cs = 0; - - free_chirp_list(&pchnl->io_requests); - pchnl->cio_reqs = 0; - - free_chirp_list(&pchnl->free_packets_list); - - /* Release channel object. */ - kfree(pchnl); - - return status; -} - -/* - * ======== bridge_chnl_create ======== - * Create a channel manager object, responsible for opening new channels - * and closing old ones for a given board. - */ -int bridge_chnl_create(struct chnl_mgr **channel_mgr, - struct dev_object *hdev_obj, - const struct chnl_mgrattrs *mgr_attrts) -{ - int status = 0; - struct chnl_mgr *chnl_mgr_obj = NULL; - u8 max_channels; - - /* Allocate channel manager object */ - chnl_mgr_obj = kzalloc(sizeof(struct chnl_mgr), GFP_KERNEL); - if (chnl_mgr_obj) { - /* - * The max_channels attr must equal the # of supported chnls for - * each transport(# chnls for PCPY = DDMA = ZCPY): i.e. - * mgr_attrts->max_channels = CHNL_MAXCHANNELS = - * DDMA_MAXDDMACHNLS = DDMA_MAXZCPYCHNLS. - */ - max_channels = CHNL_MAXCHANNELS + CHNL_MAXCHANNELS * CHNL_PCPY; - /* Create array of channels */ - chnl_mgr_obj->channels = kzalloc(sizeof(struct chnl_object *) - * max_channels, GFP_KERNEL); - if (chnl_mgr_obj->channels) { - /* Initialize chnl_mgr object */ - chnl_mgr_obj->type = CHNL_TYPESM; - chnl_mgr_obj->word_size = mgr_attrts->word_size; - /* Total # chnls supported */ - chnl_mgr_obj->max_channels = max_channels; - chnl_mgr_obj->open_channels = 0; - chnl_mgr_obj->output_mask = 0; - chnl_mgr_obj->last_output = 0; - chnl_mgr_obj->dev_obj = hdev_obj; - spin_lock_init(&chnl_mgr_obj->chnl_mgr_lock); - } else { - status = -ENOMEM; - } - } else { - status = -ENOMEM; - } - - if (status) { - bridge_chnl_destroy(chnl_mgr_obj); - *channel_mgr = NULL; - } else { - /* Return channel manager object to caller... */ - *channel_mgr = chnl_mgr_obj; - } - return status; -} - -/* - * ======== bridge_chnl_destroy ======== - * Purpose: - * Close all open channels, and destroy the channel manager. - */ -int bridge_chnl_destroy(struct chnl_mgr *hchnl_mgr) -{ - int status = 0; - struct chnl_mgr *chnl_mgr_obj = hchnl_mgr; - u32 chnl_id; - - if (hchnl_mgr) { - /* Close all open channels: */ - for (chnl_id = 0; chnl_id < chnl_mgr_obj->max_channels; - chnl_id++) { - status = - bridge_chnl_close(chnl_mgr_obj->channels - [chnl_id]); - if (status) - dev_dbg(bridge, "%s: Error status 0x%x\n", - __func__, status); - } - - /* Free channel manager object: */ - kfree(chnl_mgr_obj->channels); - - /* Set hchnl_mgr to NULL in device object. */ - dev_set_chnl_mgr(chnl_mgr_obj->dev_obj, NULL); - /* Free this Chnl Mgr object: */ - kfree(hchnl_mgr); - } else { - status = -EFAULT; - } - return status; -} - -/* - * ======== bridge_chnl_flush_io ======== - * purpose: - * Flushes all the outstanding data requests on a channel. - */ -int bridge_chnl_flush_io(struct chnl_object *chnl_obj, u32 timeout) -{ - int status = 0; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - s8 chnl_mode = -1; - struct chnl_mgr *chnl_mgr_obj; - struct chnl_ioc chnl_ioc_obj; - /* Check args: */ - if (pchnl) { - if ((timeout == CHNL_IOCNOWAIT) - && CHNL_IS_OUTPUT(pchnl->chnl_mode)) { - status = -EINVAL; - } else { - chnl_mode = pchnl->chnl_mode; - chnl_mgr_obj = pchnl->chnl_mgr_obj; - } - } else { - status = -EFAULT; - } - if (!status) { - /* Note: Currently, if another thread continues to add IO - * requests to this channel, this function will continue to - * flush all such queued IO requests. */ - if (CHNL_IS_OUTPUT(chnl_mode) - && (pchnl->chnl_type == CHNL_PCPY)) { - /* Wait for IO completions, up to the specified - * timeout: */ - while (!list_empty(&pchnl->io_requests) && !status) { - status = bridge_chnl_get_ioc(chnl_obj, - timeout, &chnl_ioc_obj); - if (status) - continue; - - if (chnl_ioc_obj.status & CHNL_IOCSTATTIMEOUT) - status = -ETIMEDOUT; - - } - } else { - status = bridge_chnl_cancel_io(chnl_obj); - /* Now, leave the channel in the ready state: */ - pchnl->state &= ~CHNL_STATECANCEL; - } - } - return status; -} - -/* - * ======== bridge_chnl_get_info ======== - * Purpose: - * Retrieve information related to a channel. - */ -int bridge_chnl_get_info(struct chnl_object *chnl_obj, - struct chnl_info *channel_info) -{ - int status = 0; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - - if (channel_info != NULL) { - if (pchnl) { - /* Return the requested information: */ - channel_info->chnl_mgr = pchnl->chnl_mgr_obj; - channel_info->event_obj = pchnl->user_event; - channel_info->cnhl_id = pchnl->chnl_id; - channel_info->mode = pchnl->chnl_mode; - channel_info->bytes_tx = pchnl->bytes_moved; - channel_info->process = pchnl->process; - channel_info->sync_event = pchnl->sync_event; - channel_info->cio_cs = pchnl->cio_cs; - channel_info->cio_reqs = pchnl->cio_reqs; - channel_info->state = pchnl->state; - } else { - status = -EFAULT; - } - } else { - status = -EFAULT; - } - return status; -} - -/* - * ======== bridge_chnl_get_ioc ======== - * Optionally wait for I/O completion on a channel. Dequeue an I/O - * completion record, which contains information about the completed - * I/O request. - * Note: Ensures Channel Invariant (see notes above). - */ -int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - struct chnl_ioc *chan_ioc) -{ - int status = 0; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - struct chnl_irp *chnl_packet_obj; - int stat_sync; - bool dequeue_ioc = true; - struct chnl_ioc ioc = { NULL, 0, 0, 0, 0 }; - u8 *host_sys_buf = NULL; - struct bridge_dev_context *dev_ctxt; - struct dev_object *dev_obj; - - /* Check args: */ - if (!chan_ioc || !pchnl) { - status = -EFAULT; - } else if (timeout == CHNL_IOCNOWAIT) { - if (list_empty(&pchnl->io_completions)) - status = -EREMOTEIO; - - } - - dev_obj = dev_get_first(); - dev_get_bridge_context(dev_obj, &dev_ctxt); - if (!dev_ctxt) - status = -EFAULT; - - if (status) - goto func_end; - - ioc.status = CHNL_IOCSTATCOMPLETE; - if (timeout != - CHNL_IOCNOWAIT && list_empty(&pchnl->io_completions)) { - if (timeout == CHNL_IOCINFINITE) - timeout = SYNC_INFINITE; - - stat_sync = sync_wait_on_event(pchnl->sync_event, timeout); - if (stat_sync == -ETIME) { - /* No response from DSP */ - ioc.status |= CHNL_IOCSTATTIMEOUT; - dequeue_ioc = false; - } else if (stat_sync == -EPERM) { - /* This can occur when the user mode thread is - * aborted (^C), or when _VWIN32_WaitSingleObject() - * fails due to unknown causes. */ - /* Even though Wait failed, there may be something in - * the Q: */ - if (list_empty(&pchnl->io_completions)) { - ioc.status |= CHNL_IOCSTATCANCEL; - dequeue_ioc = false; - } - } - } - /* See comment in AddIOReq */ - spin_lock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); - omap_mbox_disable_irq(dev_ctxt->mbox, IRQ_RX); - if (dequeue_ioc) { - /* Dequeue IOC and set chan_ioc; */ - chnl_packet_obj = list_first_entry(&pchnl->io_completions, - struct chnl_irp, link); - list_del(&chnl_packet_obj->link); - /* Update chan_ioc from channel state and chirp: */ - pchnl->cio_cs--; - /* - * If this is a zero-copy channel, then set IOC's pbuf - * to the DSP's address. This DSP address will get - * translated to user's virtual addr later. - */ - host_sys_buf = chnl_packet_obj->host_sys_buf; - ioc.buf = chnl_packet_obj->host_user_buf; - ioc.byte_size = chnl_packet_obj->byte_size; - ioc.buf_size = chnl_packet_obj->buf_size; - ioc.arg = chnl_packet_obj->arg; - ioc.status |= chnl_packet_obj->status; - /* Place the used chirp on the free list: */ - list_add_tail(&chnl_packet_obj->link, - &pchnl->free_packets_list); - } else { - ioc.buf = NULL; - ioc.byte_size = 0; - ioc.arg = 0; - ioc.buf_size = 0; - } - /* Ensure invariant: If any IOC's are queued for this channel... */ - if (!list_empty(&pchnl->io_completions)) { - /* Since DSPStream_Reclaim() does not take a timeout - * parameter, we pass the stream's timeout value to - * bridge_chnl_get_ioc. We cannot determine whether or not - * we have waited in user mode. Since the stream's timeout - * value may be non-zero, we still have to set the event. - * Therefore, this optimization is taken out. - * - * if (timeout == CHNL_IOCNOWAIT) { - * ... ensure event is set.. - * sync_set_event(pchnl->sync_event); - * } */ - sync_set_event(pchnl->sync_event); - } else { - /* else, if list is empty, ensure event is reset. */ - sync_reset_event(pchnl->sync_event); - } - omap_mbox_enable_irq(dev_ctxt->mbox, IRQ_RX); - spin_unlock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); - if (dequeue_ioc - && (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1)) { - if (!(ioc.buf < (void *)USERMODE_ADDR)) - goto func_cont; - - /* If the addr is in user mode, then copy it */ - if (!host_sys_buf || !ioc.buf) { - status = -EFAULT; - goto func_cont; - } - if (!CHNL_IS_INPUT(pchnl->chnl_mode)) - goto func_cont1; - - /*host_user_buf */ - status = copy_to_user(ioc.buf, host_sys_buf, ioc.byte_size); - if (status) { - if (current->flags & PF_EXITING) - status = 0; - } - if (status) - status = -EFAULT; -func_cont1: - kfree(host_sys_buf); - } -func_cont: - /* Update User's IOC block: */ - *chan_ioc = ioc; -func_end: - return status; -} - -/* - * ======== bridge_chnl_get_mgr_info ======== - * Retrieve information related to the channel manager. - */ -int bridge_chnl_get_mgr_info(struct chnl_mgr *hchnl_mgr, u32 ch_id, - struct chnl_mgrinfo *mgr_info) -{ - struct chnl_mgr *chnl_mgr_obj = (struct chnl_mgr *)hchnl_mgr; - - if (!mgr_info || !hchnl_mgr) - return -EFAULT; - - if (ch_id > CHNL_MAXCHANNELS) - return -ECHRNG; - - /* Return the requested information: */ - mgr_info->chnl_obj = chnl_mgr_obj->channels[ch_id]; - mgr_info->open_channels = chnl_mgr_obj->open_channels; - mgr_info->type = chnl_mgr_obj->type; - /* total # of chnls */ - mgr_info->max_channels = chnl_mgr_obj->max_channels; - - return 0; -} - -/* - * ======== bridge_chnl_idle ======== - * Idles a particular channel. - */ -int bridge_chnl_idle(struct chnl_object *chnl_obj, u32 timeout, - bool flush_data) -{ - s8 chnl_mode; - struct chnl_mgr *chnl_mgr_obj; - int status = 0; - - chnl_mode = chnl_obj->chnl_mode; - chnl_mgr_obj = chnl_obj->chnl_mgr_obj; - - if (CHNL_IS_OUTPUT(chnl_mode) && !flush_data) { - /* Wait for IO completions, up to the specified timeout: */ - status = bridge_chnl_flush_io(chnl_obj, timeout); - } else { - status = bridge_chnl_cancel_io(chnl_obj); - - /* Reset the byte count and put channel back in ready state. */ - chnl_obj->bytes_moved = 0; - chnl_obj->state &= ~CHNL_STATECANCEL; - } - - return status; -} - -/* - * ======== bridge_chnl_open ======== - * Open a new half-duplex channel to the DSP board. - */ -int bridge_chnl_open(struct chnl_object **chnl, - struct chnl_mgr *hchnl_mgr, s8 chnl_mode, - u32 ch_id, const struct chnl_attr *pattrs) -{ - int status = 0; - struct chnl_mgr *chnl_mgr_obj = hchnl_mgr; - struct chnl_object *pchnl = NULL; - struct sync_object *sync_event = NULL; - - *chnl = NULL; - - /* Validate Args: */ - if (!pattrs->uio_reqs) - return -EINVAL; - - if (!hchnl_mgr) - return -EFAULT; - - if (ch_id != CHNL_PICKFREE) { - if (ch_id >= chnl_mgr_obj->max_channels) - return -ECHRNG; - if (chnl_mgr_obj->channels[ch_id] != NULL) - return -EALREADY; - } else { - /* Check for free channel */ - status = search_free_channel(chnl_mgr_obj, &ch_id); - if (status) - return status; - } - - - /* Create channel object: */ - pchnl = kzalloc(sizeof(struct chnl_object), GFP_KERNEL); - if (!pchnl) - return -ENOMEM; - - /* Protect queues from io_dpc: */ - pchnl->state = CHNL_STATECANCEL; - - /* Allocate initial IOR and IOC queues: */ - status = create_chirp_list(&pchnl->free_packets_list, - pattrs->uio_reqs); - if (status) - goto out_err; - - INIT_LIST_HEAD(&pchnl->io_requests); - INIT_LIST_HEAD(&pchnl->io_completions); - - pchnl->chnl_packets = pattrs->uio_reqs; - pchnl->cio_cs = 0; - pchnl->cio_reqs = 0; - - sync_event = kzalloc(sizeof(struct sync_object), GFP_KERNEL); - if (!sync_event) { - status = -ENOMEM; - goto out_err; - } - sync_init_event(sync_event); - - pchnl->ntfy_obj = kmalloc(sizeof(struct ntfy_object), GFP_KERNEL); - if (!pchnl->ntfy_obj) { - status = -ENOMEM; - goto out_err; - } - ntfy_init(pchnl->ntfy_obj); - - /* Initialize CHNL object fields: */ - pchnl->chnl_mgr_obj = chnl_mgr_obj; - pchnl->chnl_id = ch_id; - pchnl->chnl_mode = chnl_mode; - pchnl->user_event = sync_event; - pchnl->sync_event = sync_event; - /* Get the process handle */ - pchnl->process = current->tgid; - pchnl->cb_arg = 0; - pchnl->bytes_moved = 0; - /* Default to proc-copy */ - pchnl->chnl_type = CHNL_PCPY; - - /* Insert channel object in channel manager: */ - chnl_mgr_obj->channels[pchnl->chnl_id] = pchnl; - spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); - chnl_mgr_obj->open_channels++; - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); - /* Return result... */ - pchnl->state = CHNL_STATEREADY; - *chnl = pchnl; - - return status; - -out_err: - /* Free memory */ - free_chirp_list(&pchnl->io_completions); - free_chirp_list(&pchnl->io_requests); - free_chirp_list(&pchnl->free_packets_list); - - kfree(sync_event); - - if (pchnl->ntfy_obj) { - ntfy_delete(pchnl->ntfy_obj); - kfree(pchnl->ntfy_obj); - pchnl->ntfy_obj = NULL; - } - kfree(pchnl); - - return status; -} - -/* - * ======== bridge_chnl_register_notify ======== - * Registers for events on a particular channel. - */ -int bridge_chnl_register_notify(struct chnl_object *chnl_obj, - u32 event_mask, u32 notify_type, - struct dsp_notification *hnotification) -{ - int status = 0; - - - if (event_mask) - status = ntfy_register(chnl_obj->ntfy_obj, hnotification, - event_mask, notify_type); - else - status = ntfy_unregister(chnl_obj->ntfy_obj, hnotification); - - return status; -} - -/* - * ======== create_chirp_list ======== - * Purpose: - * Initialize a queue of channel I/O Request/Completion packets. - * Parameters: - * list: Pointer to a list_head - * chirps: Number of Chirps to allocate. - * Returns: - * 0 if successful, error code otherwise. - * Requires: - * Ensures: - */ -static int create_chirp_list(struct list_head *list, u32 chirps) -{ - struct chnl_irp *chirp; - u32 i; - - INIT_LIST_HEAD(list); - - /* Make N chirps and place on queue. */ - for (i = 0; i < chirps; i++) { - chirp = kzalloc(sizeof(struct chnl_irp), GFP_KERNEL); - if (!chirp) - break; - list_add_tail(&chirp->link, list); - } - - /* If we couldn't allocate all chirps, free those allocated: */ - if (i != chirps) { - free_chirp_list(list); - return -ENOMEM; - } - - return 0; -} - -/* - * ======== free_chirp_list ======== - * Purpose: - * Free the queue of Chirps. - */ -static void free_chirp_list(struct list_head *chirp_list) -{ - struct chnl_irp *chirp, *tmp; - - list_for_each_entry_safe(chirp, tmp, chirp_list, link) { - list_del(&chirp->link); - kfree(chirp); - } -} - -/* - * ======== search_free_channel ======== - * Search for a free channel slot in the array of channel pointers. - */ -static int search_free_channel(struct chnl_mgr *chnl_mgr_obj, - u32 *chnl) -{ - int status = -ENOSR; - u32 i; - - for (i = 0; i < chnl_mgr_obj->max_channels; i++) { - if (chnl_mgr_obj->channels[i] == NULL) { - status = 0; - *chnl = i; - break; - } - } - - return status; -} diff --git a/drivers/staging/tidspbridge/core/dsp-clock.c b/drivers/staging/tidspbridge/core/dsp-clock.c deleted file mode 100644 index a1aca4416ca7..000000000000 --- a/drivers/staging/tidspbridge/core/dsp-clock.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - * clk.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Clock and Timer services. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#define L4_34XX_BASE 0x48000000 - -#include - -/* ----------------------------------- Host OS */ -#include -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include -#include -#include -#include "_tiomap.h" - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ - -#define OMAP_SSI_OFFSET 0x58000 -#define OMAP_SSI_SIZE 0x1000 -#define OMAP_SSI_SYSCONFIG_OFFSET 0x10 - -#define SSI_AUTOIDLE (1 << 0) -#define SSI_SIDLE_SMARTIDLE (2 << 3) -#define SSI_MIDLE_NOIDLE (1 << 12) - -/* Clk types requested by the dsp */ -#define IVA2_CLK 0 -#define GPT_CLK 1 -#define WDT_CLK 2 -#define MCBSP_CLK 3 -#define SSI_CLK 4 - -/* Bridge GPT id (1 - 4), DM Timer id (5 - 8) */ -#define DMT_ID(id) ((id) + 4) -#define DM_TIMER_CLOCKS 4 - -/* Bridge MCBSP id (6 - 10), OMAP Mcbsp id (0 - 4) */ -#define MCBSP_ID(id) ((id) - 6) - -static struct omap_dm_timer *timer[4]; - -struct clk *iva2_clk; - -struct dsp_ssi { - struct clk *sst_fck; - struct clk *ssr_fck; - struct clk *ick; -}; - -static struct dsp_ssi ssi; - -static u32 dsp_clocks; - -static inline u32 is_dsp_clk_active(u32 clk, u8 id) -{ - return clk & (1 << id); -} - -static inline void set_dsp_clk_active(u32 *clk, u8 id) -{ - *clk |= (1 << id); -} - -static inline void set_dsp_clk_inactive(u32 *clk, u8 id) -{ - *clk &= ~(1 << id); -} - -static s8 get_clk_type(u8 id) -{ - s8 type; - - if (id == DSP_CLK_IVA2) - type = IVA2_CLK; - else if (id <= DSP_CLK_GPT8) - type = GPT_CLK; - else if (id == DSP_CLK_WDT3) - type = WDT_CLK; - else if (id <= DSP_CLK_MCBSP5) - type = MCBSP_CLK; - else if (id == DSP_CLK_SSI) - type = SSI_CLK; - else - type = -1; - - return type; -} - -/* - * ======== dsp_clk_exit ======== - * Purpose: - * Cleanup CLK module. - */ -void dsp_clk_exit(void) -{ - int i; - - dsp_clock_disable_all(dsp_clocks); - - for (i = 0; i < DM_TIMER_CLOCKS; i++) - omap_dm_timer_free(timer[i]); - - clk_unprepare(iva2_clk); - clk_put(iva2_clk); - clk_unprepare(ssi.sst_fck); - clk_put(ssi.sst_fck); - clk_unprepare(ssi.ssr_fck); - clk_put(ssi.ssr_fck); - clk_unprepare(ssi.ick); - clk_put(ssi.ick); -} - -/* - * ======== dsp_clk_init ======== - * Purpose: - * Initialize CLK module. - */ -void dsp_clk_init(void) -{ - static struct platform_device dspbridge_device; - int i, id; - - dspbridge_device.dev.bus = &platform_bus_type; - - for (i = 0, id = 5; i < DM_TIMER_CLOCKS; i++, id++) - timer[i] = omap_dm_timer_request_specific(id); - - iva2_clk = clk_get(&dspbridge_device.dev, "iva2_ck"); - if (IS_ERR(iva2_clk)) - dev_err(bridge, "failed to get iva2 clock %p\n", iva2_clk); - else - clk_prepare(iva2_clk); - - ssi.sst_fck = clk_get(&dspbridge_device.dev, "ssi_sst_fck"); - ssi.ssr_fck = clk_get(&dspbridge_device.dev, "ssi_ssr_fck"); - ssi.ick = clk_get(&dspbridge_device.dev, "ssi_ick"); - - if (IS_ERR(ssi.sst_fck) || IS_ERR(ssi.ssr_fck) || IS_ERR(ssi.ick)) { - dev_err(bridge, "failed to get ssi: sst %p, ssr %p, ick %p\n", - ssi.sst_fck, ssi.ssr_fck, ssi.ick); - } else { - clk_prepare(ssi.sst_fck); - clk_prepare(ssi.ssr_fck); - clk_prepare(ssi.ick); - } -} - -/** - * dsp_gpt_wait_overflow - set gpt overflow and wait for fixed timeout - * @clk_id: GP Timer clock id. - * @load: Overflow value. - * - * Sets an overflow interrupt for the desired GPT waiting for a timeout - * of 5 msecs for the interrupt to occur. - */ -void dsp_gpt_wait_overflow(short int clk_id, unsigned int load) -{ - struct omap_dm_timer *gpt = timer[clk_id - 1]; - unsigned long timeout; - - if (!gpt) - return; - - /* Enable overflow interrupt */ - omap_dm_timer_set_int_enable(gpt, OMAP_TIMER_INT_OVERFLOW); - - /* - * Set counter value to overflow counter after - * one tick and start timer. - */ - omap_dm_timer_set_load_start(gpt, 0, load); - - /* Wait 80us for timer to overflow */ - udelay(80); - - timeout = msecs_to_jiffies(5); - /* Check interrupt status and wait for interrupt */ - while (!(omap_dm_timer_read_status(gpt) & OMAP_TIMER_INT_OVERFLOW)) { - if (time_is_after_jiffies(timeout)) { - pr_err("%s: GPTimer interrupt failed\n", __func__); - break; - } - } -} - -/* - * ======== dsp_clk_enable ======== - * Purpose: - * Enable Clock . - * - */ -int dsp_clk_enable(enum dsp_clk_id clk_id) -{ - int status = 0; - - if (is_dsp_clk_active(dsp_clocks, clk_id)) { - dev_err(bridge, "WARN: clock id %d already enabled\n", clk_id); - goto out; - } - - switch (get_clk_type(clk_id)) { - case IVA2_CLK: - clk_enable(iva2_clk); - break; - case GPT_CLK: - status = omap_dm_timer_start(timer[clk_id - 1]); - break; -#ifdef CONFIG_SND_OMAP_SOC_MCBSP - case MCBSP_CLK: - omap_mcbsp_request(MCBSP_ID(clk_id)); - omap2_mcbsp_set_clks_src(MCBSP_ID(clk_id), MCBSP_CLKS_PAD_SRC); - break; -#endif - case WDT_CLK: - dev_err(bridge, "ERROR: DSP requested to enable WDT3 clk\n"); - break; - case SSI_CLK: - clk_enable(ssi.sst_fck); - clk_enable(ssi.ssr_fck); - clk_enable(ssi.ick); - - /* - * The SSI module need to configured not to have the Forced - * idle for master interface. If it is set to forced idle, - * the SSI module is transitioning to standby thereby causing - * the client in the DSP hang waiting for the SSI module to - * be active after enabling the clocks - */ - ssi_clk_prepare(true); - break; - default: - dev_err(bridge, "Invalid clock id for enable\n"); - status = -EPERM; - } - - if (!status) - set_dsp_clk_active(&dsp_clocks, clk_id); - -out: - return status; -} - -/** - * dsp_clock_enable_all - Enable clocks used by the DSP - * @dev_context Driver's device context strucure - * - * This function enables all the peripheral clocks that were requested by DSP. - */ -u32 dsp_clock_enable_all(u32 dsp_per_clocks) -{ - u32 clk_id; - u32 status = -EPERM; - - for (clk_id = 0; clk_id < DSP_CLK_NOT_DEFINED; clk_id++) { - if (is_dsp_clk_active(dsp_per_clocks, clk_id)) - status = dsp_clk_enable(clk_id); - } - - return status; -} - -/* - * ======== dsp_clk_disable ======== - * Purpose: - * Disable the clock. - * - */ -int dsp_clk_disable(enum dsp_clk_id clk_id) -{ - int status = 0; - - if (!is_dsp_clk_active(dsp_clocks, clk_id)) { - dev_err(bridge, "ERR: clock id %d already disabled\n", clk_id); - goto out; - } - - switch (get_clk_type(clk_id)) { - case IVA2_CLK: - clk_disable(iva2_clk); - break; - case GPT_CLK: - status = omap_dm_timer_stop(timer[clk_id - 1]); - break; -#ifdef CONFIG_SND_OMAP_SOC_MCBSP - case MCBSP_CLK: - omap2_mcbsp_set_clks_src(MCBSP_ID(clk_id), MCBSP_CLKS_PRCM_SRC); - omap_mcbsp_free(MCBSP_ID(clk_id)); - break; -#endif - case WDT_CLK: - dev_err(bridge, "ERROR: DSP requested to disable WDT3 clk\n"); - break; - case SSI_CLK: - ssi_clk_prepare(false); - ssi_clk_prepare(false); - clk_disable(ssi.sst_fck); - clk_disable(ssi.ssr_fck); - clk_disable(ssi.ick); - break; - default: - dev_err(bridge, "Invalid clock id for disable\n"); - status = -EPERM; - } - - if (!status) - set_dsp_clk_inactive(&dsp_clocks, clk_id); - -out: - return status; -} - -/** - * dsp_clock_disable_all - Disable all active clocks - * @dev_context Driver's device context structure - * - * This function disables all the peripheral clocks that were enabled by DSP. - * It is meant to be called only when DSP is entering hibernation or when DSP - * is in error state. - */ -u32 dsp_clock_disable_all(u32 dsp_per_clocks) -{ - u32 clk_id; - u32 status = -EPERM; - - for (clk_id = 0; clk_id < DSP_CLK_NOT_DEFINED; clk_id++) { - if (is_dsp_clk_active(dsp_per_clocks, clk_id)) - status = dsp_clk_disable(clk_id); - } - - return status; -} - -u32 dsp_clk_get_iva2_rate(void) -{ - u32 clk_speed_khz; - - clk_speed_khz = clk_get_rate(iva2_clk); - clk_speed_khz /= 1000; - dev_dbg(bridge, "%s: clk speed Khz = %d\n", __func__, clk_speed_khz); - - return clk_speed_khz; -} - -void ssi_clk_prepare(bool FLAG) -{ - void __iomem *ssi_base; - unsigned int value; - - ssi_base = ioremap(L4_34XX_BASE + OMAP_SSI_OFFSET, OMAP_SSI_SIZE); - if (!ssi_base) { - pr_err("%s: error, SSI not configured\n", __func__); - return; - } - - if (FLAG) { - /* Set Autoidle, SIDLEMode to smart idle, and MIDLEmode to - * no idle - */ - value = SSI_AUTOIDLE | SSI_SIDLE_SMARTIDLE | SSI_MIDLE_NOIDLE; - } else { - /* Set Autoidle, SIDLEMode to forced idle, and MIDLEmode to - * forced idle - */ - value = SSI_AUTOIDLE; - } - - __raw_writel(value, ssi_base + OMAP_SSI_SYSCONFIG_OFFSET); - iounmap(ssi_base); -} - diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c deleted file mode 100644 index 42f94e157efd..000000000000 --- a/drivers/staging/tidspbridge/core/io_sm.c +++ /dev/null @@ -1,2246 +0,0 @@ -/* - * io_sm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * IO dispatcher for a shared memory channel driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * Channel Invariant: - * There is an important invariant condition which must be maintained per - * channel outside of bridge_chnl_get_ioc() and IO_Dispatch(), violation of - * which may cause timeouts and/or failure of the sync_wait_on_event - * function. - */ -#include -#include - -/* Host OS */ -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* Services Layer */ -#include -#include - -/* Hardware Abstraction Layer */ -#include -#include - -/* Bridge Driver */ -#include -#include -#include -#include -#include <_tiomap.h> -#include -#include <_tiomap_pwr.h> - -/* Platform Manager */ -#include -#include -#include - -/* Others */ -#include -#include -#include -#include "_cmm.h" -#include "module_list.h" - -/* This */ -#include -#include "_msg_sm.h" - -/* Defines, Data Structures, Typedefs */ -#define OUTPUTNOTREADY 0xffff -#define NOTENABLED 0xffff /* Channel(s) not enabled */ - -#define EXTEND "_EXT_END" - -#define SWAP_WORD(x) (x) -#define UL_PAGE_ALIGN_SIZE 0x10000 /* Page Align Size */ - -#define MAX_PM_REQS 32 - -#define MMU_FAULT_HEAD1 0xa5a5a5a5 -#define MMU_FAULT_HEAD2 0x96969696 -#define POLL_MAX 1000 -#define MAX_MMU_DBGBUFF 10240 - -/* IO Manager: only one created per board */ -struct io_mgr { - /* These four fields must be the first fields in a io_mgr_ struct */ - /* Bridge device context */ - struct bridge_dev_context *bridge_context; - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - struct dev_object *dev_obj; /* Device this board represents */ - - /* These fields initialized in bridge_io_create() */ - struct chnl_mgr *chnl_mgr; - struct shm *shared_mem; /* Shared Memory control */ - u8 *input; /* Address of input channel */ - u8 *output; /* Address of output channel */ - struct msg_mgr *msg_mgr; /* Message manager */ - /* Msg control for from DSP messages */ - struct msg_ctrl *msg_input_ctrl; - /* Msg control for to DSP messages */ - struct msg_ctrl *msg_output_ctrl; - u8 *msg_input; /* Address of input messages */ - u8 *msg_output; /* Address of output messages */ - u32 sm_buf_size; /* Size of a shared memory I/O channel */ - bool shared_irq; /* Is this IRQ shared? */ - u32 word_size; /* Size in bytes of DSP word */ - u16 intr_val; /* Interrupt value */ - /* Private extnd proc info; mmu setup */ - struct mgr_processorextinfo ext_proc_info; - struct cmm_object *cmm_mgr; /* Shared Mem Mngr */ - struct work_struct io_workq; /* workqueue */ -#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) - u32 trace_buffer_begin; /* Trace message start address */ - u32 trace_buffer_end; /* Trace message end address */ - u32 trace_buffer_current; /* Trace message current address */ - u32 gpp_read_pointer; /* GPP Read pointer to Trace buffer */ - u8 *msg; - u32 gpp_va; - u32 dsp_va; -#endif - /* IO Dpc */ - u32 dpc_req; /* Number of requested DPC's. */ - u32 dpc_sched; /* Number of executed DPC's. */ - struct tasklet_struct dpc_tasklet; - spinlock_t dpc_lock; - -}; - -struct shm_symbol_val { - u32 shm_base; - u32 shm_lim; - u32 msg_base; - u32 msg_lim; - u32 shm0_end; - u32 dyn_ext; - u32 ext_end; -}; - -/* Function Prototypes */ -static void io_dispatch_pm(struct io_mgr *pio_mgr); -static void notify_chnl_complete(struct chnl_object *pchnl, - struct chnl_irp *chnl_packet_obj); -static void input_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - u8 io_mode); -static void output_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - u8 io_mode); -static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr); -static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr); -static u32 find_ready_output(struct chnl_mgr *chnl_mgr_obj, - struct chnl_object *pchnl, u32 mask); - -/* Bus Addr (cached kernel) */ -static int register_shm_segs(struct io_mgr *hio_mgr, - struct cod_manager *cod_man, - u32 dw_gpp_base_pa); - -static inline void set_chnl_free(struct shm *sm, u32 chnl) -{ - sm->host_free_mask &= ~(1 << chnl); -} - -static inline void set_chnl_busy(struct shm *sm, u32 chnl) -{ - sm->host_free_mask |= 1 << chnl; -} - - -/* - * ======== bridge_io_create ======== - * Create an IO manager object. - */ -int bridge_io_create(struct io_mgr **io_man, - struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts) -{ - struct io_mgr *pio_mgr = NULL; - struct bridge_dev_context *hbridge_context = NULL; - struct cfg_devnode *dev_node_obj; - struct chnl_mgr *hchnl_mgr; - u8 dev_type; - - /* Check requirements */ - if (!io_man || !mgr_attrts || mgr_attrts->word_size == 0) - return -EFAULT; - - *io_man = NULL; - - dev_get_chnl_mgr(hdev_obj, &hchnl_mgr); - if (!hchnl_mgr || hchnl_mgr->iomgr) - return -EFAULT; - - /* - * Message manager will be created when a file is loaded, since - * size of message buffer in shared memory is configurable in - * the base image. - */ - dev_get_bridge_context(hdev_obj, &hbridge_context); - if (!hbridge_context) - return -EFAULT; - - dev_get_dev_type(hdev_obj, &dev_type); - - /* Allocate IO manager object */ - pio_mgr = kzalloc(sizeof(struct io_mgr), GFP_KERNEL); - if (!pio_mgr) - return -ENOMEM; - - /* Initialize chnl_mgr object */ - pio_mgr->chnl_mgr = hchnl_mgr; - pio_mgr->word_size = mgr_attrts->word_size; - - if (dev_type == DSP_UNIT) { - /* Create an IO DPC */ - tasklet_init(&pio_mgr->dpc_tasklet, io_dpc, (u32) pio_mgr); - - /* Initialize DPC counters */ - pio_mgr->dpc_req = 0; - pio_mgr->dpc_sched = 0; - - spin_lock_init(&pio_mgr->dpc_lock); - - if (dev_get_dev_node(hdev_obj, &dev_node_obj)) { - bridge_io_destroy(pio_mgr); - return -EIO; - } - } - - pio_mgr->bridge_context = hbridge_context; - pio_mgr->shared_irq = mgr_attrts->irq_shared; - if (dsp_wdt_init()) { - bridge_io_destroy(pio_mgr); - return -EPERM; - } - - /* Return IO manager object to caller... */ - hchnl_mgr->iomgr = pio_mgr; - *io_man = pio_mgr; - - return 0; -} - -/* - * ======== bridge_io_destroy ======== - * Purpose: - * Disable interrupts, destroy the IO manager. - */ -int bridge_io_destroy(struct io_mgr *hio_mgr) -{ - int status = 0; - - if (hio_mgr) { - /* Free IO DPC object */ - tasklet_kill(&hio_mgr->dpc_tasklet); - -#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) - kfree(hio_mgr->msg); -#endif - dsp_wdt_exit(); - /* Free this IO manager object */ - kfree(hio_mgr); - } else { - status = -EFAULT; - } - - return status; -} - -struct shm_symbol_val *_get_shm_symbol_values(struct io_mgr *hio_mgr) -{ - struct shm_symbol_val *s; - struct cod_manager *cod_man; - int status; - - s = kzalloc(sizeof(*s), GFP_KERNEL); - if (!s) - return ERR_PTR(-ENOMEM); - - status = dev_get_cod_mgr(hio_mgr->dev_obj, &cod_man); - if (status) - goto free_symbol; - - /* Get start and length of channel part of shared memory */ - status = cod_get_sym_value(cod_man, CHNL_SHARED_BUFFER_BASE_SYM, - &s->shm_base); - if (status) - goto free_symbol; - - status = cod_get_sym_value(cod_man, CHNL_SHARED_BUFFER_LIMIT_SYM, - &s->shm_lim); - if (status) - goto free_symbol; - - if (s->shm_lim <= s->shm_base) { - status = -EINVAL; - goto free_symbol; - } - - /* Get start and length of message part of shared memory */ - status = cod_get_sym_value(cod_man, MSG_SHARED_BUFFER_BASE_SYM, - &s->msg_base); - if (status) - goto free_symbol; - - status = cod_get_sym_value(cod_man, MSG_SHARED_BUFFER_LIMIT_SYM, - &s->msg_lim); - if (status) - goto free_symbol; - - if (s->msg_lim <= s->msg_base) { - status = -EINVAL; - goto free_symbol; - } - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - status = cod_get_sym_value(cod_man, DSP_TRACESEC_END, &s->shm0_end); -#else - status = cod_get_sym_value(cod_man, SHM0_SHARED_END_SYM, &s->shm0_end); -#endif - if (status) - goto free_symbol; - - status = cod_get_sym_value(cod_man, DYNEXTBASE, &s->dyn_ext); - if (status) - goto free_symbol; - - status = cod_get_sym_value(cod_man, EXTEND, &s->ext_end); - if (status) - goto free_symbol; - - return s; - -free_symbol: - kfree(s); - return ERR_PTR(status); -} - -/* - * ======== bridge_io_on_loaded ======== - * Purpose: - * Called when a new program is loaded to get shared memory buffer - * parameters from COFF file. ulSharedBufferBase and ulSharedBufferLimit - * are in DSP address units. - */ -int bridge_io_on_loaded(struct io_mgr *hio_mgr) -{ - struct bridge_dev_context *dc = hio_mgr->bridge_context; - struct cfg_hostres *cfg_res = dc->resources; - struct bridge_ioctl_extproc *eproc; - struct cod_manager *cod_man; - struct chnl_mgr *hchnl_mgr; - struct msg_mgr *hmsg_mgr; - struct shm_symbol_val *s; - int status; - u8 num_procs; - s32 ndx; - u32 i; - u32 mem_sz, msg_sz, pad_sz, shm_sz, shm_base_offs; - u32 seg0_sz, seg1_sz; - u32 pa, va, da; - u32 pa_curr, va_curr, da_curr; - u32 bytes; - u32 all_bits = 0; - u32 page_size[] = { - HW_PAGE_SIZE16MB, HW_PAGE_SIZE1MB, - HW_PAGE_SIZE64KB, HW_PAGE_SIZE4KB - }; - u32 map_attrs = DSP_MAPLITTLEENDIAN | DSP_MAPPHYSICALADDR | - DSP_MAPELEMSIZE32 | DSP_MAPDONOTLOCK; - - status = dev_get_cod_mgr(hio_mgr->dev_obj, &cod_man); - if (status) - return status; - - hchnl_mgr = hio_mgr->chnl_mgr; - - /* The message manager is destroyed when the board is stopped */ - dev_get_msg_mgr(hio_mgr->dev_obj, &hio_mgr->msg_mgr); - hmsg_mgr = hio_mgr->msg_mgr; - if (!hchnl_mgr || !hmsg_mgr) - return -EFAULT; - - if (hio_mgr->shared_mem) - hio_mgr->shared_mem = NULL; - - s = _get_shm_symbol_values(hio_mgr); - if (IS_ERR(s)) - return PTR_ERR(s); - - /* Get total length in bytes */ - shm_sz = (s->shm_lim - s->shm_base + 1) * hio_mgr->word_size; - - /* Calculate size of a PROCCOPY shared memory region */ - dev_dbg(bridge, "%s: (proc)proccopy shmmem size: 0x%x bytes\n", - __func__, shm_sz - sizeof(struct shm)); - - /* Length (bytes) of messaging part of shared memory */ - msg_sz = (s->msg_lim - s->msg_base + 1) * hio_mgr->word_size; - - /* Total length (bytes) of shared memory: chnl + msg */ - mem_sz = shm_sz + msg_sz; - - /* Get memory reserved in host resources */ - (void)mgr_enum_processor_info(0, - (struct dsp_processorinfo *) - &hio_mgr->ext_proc_info, - sizeof(struct mgr_processorextinfo), - &num_procs); - - /* IO supports only one DSP for now */ - if (num_procs != 1) { - status = -EINVAL; - goto free_symbol; - } - - /* The first MMU TLB entry(TLB_0) in DCD is ShmBase */ - pa = cfg_res->mem_phys[1]; - va = cfg_res->mem_base[1]; - - /* This is the virtual uncached ioremapped address!!! */ - /* Why can't we directly take the DSPVA from the symbols? */ - da = hio_mgr->ext_proc_info.ty_tlb[0].dsp_virt; - seg0_sz = (s->shm0_end - da) * hio_mgr->word_size; - seg1_sz = (s->ext_end - s->dyn_ext) * hio_mgr->word_size; - - /* 4K align */ - seg1_sz = (seg1_sz + 0xFFF) & (~0xFFFUL); - - /* 64K align */ - seg0_sz = (seg0_sz + 0xFFFF) & (~0xFFFFUL); - - pad_sz = UL_PAGE_ALIGN_SIZE - ((pa + seg1_sz) % UL_PAGE_ALIGN_SIZE); - if (pad_sz == UL_PAGE_ALIGN_SIZE) - pad_sz = 0x0; - - dev_dbg(bridge, "%s: pa %x, va %x, da %x\n", __func__, pa, va, da); - dev_dbg(bridge, - "shm0_end %x, dyn_ext %x, ext_end %x, seg0_sz %x seg1_sz %x\n", - s->shm0_end, s->dyn_ext, s->ext_end, seg0_sz, seg1_sz); - - if ((seg0_sz + seg1_sz + pad_sz) > cfg_res->mem_length[1]) { - pr_err("%s: shm Error, reserved 0x%x required 0x%x\n", - __func__, cfg_res->mem_length[1], - seg0_sz + seg1_sz + pad_sz); - status = -ENOMEM; - goto free_symbol; - } - - pa_curr = pa; - va_curr = s->dyn_ext * hio_mgr->word_size; - da_curr = va; - bytes = seg1_sz; - - /* - * Try to fit into TLB entries. If not possible, push them to page - * tables. It is quite possible that if sections are not on - * bigger page boundary, we may end up making several small pages. - * So, push them onto page tables, if that is the case. - */ - while (bytes) { - /* - * To find the max. page size with which both PA & VA are - * aligned. - */ - all_bits = pa_curr | va_curr; - dev_dbg(bridge, - "seg all_bits %x, pa_curr %x, va_curr %x, bytes %x\n", - all_bits, pa_curr, va_curr, bytes); - - for (i = 0; i < 4; i++) { - if ((bytes >= page_size[i]) && - ((all_bits & (page_size[i] - 1)) == 0)) { - status = hio_mgr->intf_fxns->brd_mem_map(dc, - pa_curr, va_curr, - page_size[i], map_attrs, - NULL); - if (status) - goto free_symbol; - - pa_curr += page_size[i]; - va_curr += page_size[i]; - da_curr += page_size[i]; - bytes -= page_size[i]; - /* - * Don't try smaller sizes. Hopefully we have - * reached an address aligned to a bigger page - * size. - */ - break; - } - } - } - - pa_curr += pad_sz; - va_curr += pad_sz; - da_curr += pad_sz; - bytes = seg0_sz; - va_curr = da * hio_mgr->word_size; - - eproc = kzalloc(sizeof(*eproc) * BRDIOCTL_NUMOFMMUTLB, GFP_KERNEL); - if (!eproc) { - status = -ENOMEM; - goto free_symbol; - } - - ndx = 0; - /* Configure the TLB entries for the next cacheable segment */ - while (bytes) { - /* - * To find the max. page size with which both PA & VA are - * aligned. - */ - all_bits = pa_curr | va_curr; - dev_dbg(bridge, - "seg1 all_bits %x, pa_curr %x, va_curr %x, bytes %x\n", - all_bits, pa_curr, va_curr, bytes); - - for (i = 0; i < 4; i++) { - if (!(bytes >= page_size[i]) || - !((all_bits & (page_size[i] - 1)) == 0)) - continue; - - if (ndx >= MAX_LOCK_TLB_ENTRIES) { - status = hio_mgr->intf_fxns->brd_mem_map(dc, - pa_curr, va_curr, - page_size[i], map_attrs, - NULL); - dev_dbg(bridge, - "PTE pa %x va %x dsp_va %x sz %x\n", - eproc[ndx].gpp_pa, - eproc[ndx].gpp_va, - eproc[ndx].dsp_va * - hio_mgr->word_size, page_size[i]); - if (status) - goto free_eproc; - } - - /* This is the physical address written to DSP MMU */ - eproc[ndx].gpp_pa = pa_curr; - - /* - * This is the virtual uncached ioremapped - * address!!! - */ - eproc[ndx].gpp_va = da_curr; - eproc[ndx].dsp_va = va_curr / hio_mgr->word_size; - eproc[ndx].size = page_size[i]; - eproc[ndx].endianism = HW_LITTLE_ENDIAN; - eproc[ndx].elem_size = HW_ELEM_SIZE16BIT; - eproc[ndx].mixed_mode = HW_MMU_CPUES; - dev_dbg(bridge, "%s: tlb pa %x va %x dsp_va %x sz %x\n", - __func__, eproc[ndx].gpp_pa, - eproc[ndx].gpp_va, - eproc[ndx].dsp_va * hio_mgr->word_size, - page_size[i]); - ndx++; - - pa_curr += page_size[i]; - va_curr += page_size[i]; - da_curr += page_size[i]; - bytes -= page_size[i]; - /* - * Don't try smaller sizes. Hopefully we have reached - * an address aligned to a bigger page size. - */ - break; - } - } - - /* - * Copy remaining entries from CDB. All entries are 1 MB and - * should not conflict with shm entries on MPU or DSP side. - */ - for (i = 3; i < 7 && ndx < BRDIOCTL_NUMOFMMUTLB; i++) { - struct mgr_processorextinfo *ep = &hio_mgr->ext_proc_info; - u32 word_sz = hio_mgr->word_size; - - if (ep->ty_tlb[i].gpp_phys == 0) - continue; - - if ((ep->ty_tlb[i].gpp_phys > pa - 0x100000 && - ep->ty_tlb[i].gpp_phys <= pa + seg0_sz) || - (ep->ty_tlb[i].dsp_virt > da - 0x100000 / word_sz && - ep->ty_tlb[i].dsp_virt <= da + seg0_sz / word_sz)) { - dev_dbg(bridge, - "err cdb%d pa %x da %x shm pa %x da %x sz %x\n", - i, ep->ty_tlb[i].gpp_phys, - ep->ty_tlb[i].dsp_virt, pa, da, seg0_sz); - status = -EPERM; - goto free_eproc; - } - - if (ndx >= MAX_LOCK_TLB_ENTRIES) { - status = hio_mgr->intf_fxns->brd_mem_map(dc, - ep->ty_tlb[i].gpp_phys, - ep->ty_tlb[i].dsp_virt, - 0x100000, map_attrs, NULL); - if (status) - goto free_eproc; - } - - eproc[ndx].dsp_va = ep->ty_tlb[i].dsp_virt; - eproc[ndx].gpp_pa = ep->ty_tlb[i].gpp_phys; - eproc[ndx].gpp_va = 0; - - /* 1 MB */ - eproc[ndx].size = 0x100000; - dev_dbg(bridge, "shm MMU entry pa %x da 0x%x\n", - eproc[ndx].gpp_pa, eproc[ndx].dsp_va); - ndx++; - } - - /* Map the L4 peripherals */ - i = 0; - while (l4_peripheral_table[i].phys_addr) { - status = hio_mgr->intf_fxns->brd_mem_map(dc, - l4_peripheral_table[i].phys_addr, - l4_peripheral_table[i].dsp_virt_addr, - HW_PAGE_SIZE4KB, map_attrs, NULL); - if (status) - goto free_eproc; - i++; - } - - for (i = ndx; i < BRDIOCTL_NUMOFMMUTLB; i++) { - eproc[i].dsp_va = 0; - eproc[i].gpp_pa = 0; - eproc[i].gpp_va = 0; - eproc[i].size = 0; - } - - /* - * Set the shm physical address entry (grayed out in CDB file) - * to the virtual uncached ioremapped address of shm reserved - * on MPU. - */ - hio_mgr->ext_proc_info.ty_tlb[0].gpp_phys = - (va + seg1_sz + pad_sz); - - /* - * Need shm Phys addr. IO supports only one DSP for now: - * num_procs = 1. - */ - if (!hio_mgr->ext_proc_info.ty_tlb[0].gpp_phys) - return -EFAULT; - - if (eproc[0].dsp_va > s->shm_base) - return -EPERM; - - /* shm_base may not be at ul_dsp_va address */ - shm_base_offs = (s->shm_base - eproc[0].dsp_va) * - hio_mgr->word_size; - /* - * bridge_dev_ctrl() will set dev context dsp-mmu info. In - * bridge_brd_start() the MMU will be re-programed with MMU - * DSPVa-GPPPa pair info while DSP is in a known - * (reset) state. - */ - status = hio_mgr->intf_fxns->dev_cntrl(hio_mgr->bridge_context, - BRDIOCTL_SETMMUCONFIG, eproc); - if (status) - goto free_eproc; - - s->shm_base = hio_mgr->ext_proc_info.ty_tlb[0].gpp_phys; - s->shm_base += shm_base_offs; - s->shm_base = (u32) MEM_LINEAR_ADDRESS((void *)s->shm_base, - mem_sz); - if (!s->shm_base) { - status = -EFAULT; - goto free_eproc; - } - - /* Register SM */ - status = register_shm_segs(hio_mgr, cod_man, eproc[0].gpp_pa); - - hio_mgr->shared_mem = (struct shm *)s->shm_base; - hio_mgr->input = (u8 *) hio_mgr->shared_mem + sizeof(struct shm); - hio_mgr->output = hio_mgr->input + (shm_sz - - sizeof(struct shm)) / 2; - hio_mgr->sm_buf_size = hio_mgr->output - hio_mgr->input; - - /* Set up Shared memory addresses for messaging */ - hio_mgr->msg_input_ctrl = - (struct msg_ctrl *)((u8 *) hio_mgr->shared_mem + shm_sz); - hio_mgr->msg_input = - (u8 *) hio_mgr->msg_input_ctrl + sizeof(struct msg_ctrl); - hio_mgr->msg_output_ctrl = - (struct msg_ctrl *)((u8 *) hio_mgr->msg_input_ctrl + - msg_sz / 2); - hio_mgr->msg_output = - (u8 *) hio_mgr->msg_output_ctrl + sizeof(struct msg_ctrl); - hmsg_mgr->max_msgs = - ((u8 *) hio_mgr->msg_output_ctrl - hio_mgr->msg_input) / - sizeof(struct msg_dspmsg); - - dev_dbg(bridge, "IO MGR shm details: shared_mem %p, input %p, " - "output %p, msg_input_ctrl %p, msg_input %p, " - "msg_output_ctrl %p, msg_output %p\n", - (u8 *) hio_mgr->shared_mem, hio_mgr->input, - hio_mgr->output, (u8 *) hio_mgr->msg_input_ctrl, - hio_mgr->msg_input, (u8 *) hio_mgr->msg_output_ctrl, - hio_mgr->msg_output); - dev_dbg(bridge, "(proc) Mas msgs in shared memory: 0x%x\n", - hmsg_mgr->max_msgs); - memset((void *)hio_mgr->shared_mem, 0, sizeof(struct shm)); - -#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) - /* Get the start address of trace buffer */ - status = cod_get_sym_value(cod_man, SYS_PUTCBEG, - &hio_mgr->trace_buffer_begin); - if (status) - goto free_eproc; - - hio_mgr->gpp_read_pointer = - hio_mgr->trace_buffer_begin = - (va + seg1_sz + pad_sz) + - (hio_mgr->trace_buffer_begin - da); - - /* Get the end address of trace buffer */ - status = cod_get_sym_value(cod_man, SYS_PUTCEND, - &hio_mgr->trace_buffer_end); - if (status) - goto free_eproc; - - hio_mgr->trace_buffer_end = - (va + seg1_sz + pad_sz) + - (hio_mgr->trace_buffer_end - da); - - /* Get the current address of DSP write pointer */ - status = cod_get_sym_value(cod_man, BRIDGE_SYS_PUTC_CURRENT, - &hio_mgr->trace_buffer_current); - if (status) - goto free_eproc; - - hio_mgr->trace_buffer_current = - (va + seg1_sz + pad_sz) + - (hio_mgr->trace_buffer_current - da); - - /* Calculate the size of trace buffer */ - kfree(hio_mgr->msg); - hio_mgr->msg = kmalloc(((hio_mgr->trace_buffer_end - - hio_mgr->trace_buffer_begin) * - hio_mgr->word_size) + 2, GFP_KERNEL); - if (!hio_mgr->msg) { - status = -ENOMEM; - goto free_eproc; - } - - hio_mgr->dsp_va = da; - hio_mgr->gpp_va = (va + seg1_sz + pad_sz); -#endif - -free_eproc: - kfree(eproc); -free_symbol: - kfree(s); - - return status; -} - -/* - * ======== io_buf_size ======== - * Size of shared memory I/O channel. - */ -u32 io_buf_size(struct io_mgr *hio_mgr) -{ - if (hio_mgr) - return hio_mgr->sm_buf_size; - else - return 0; -} - -/* - * ======== io_cancel_chnl ======== - * Cancel IO on a given PCPY channel. - */ -void io_cancel_chnl(struct io_mgr *hio_mgr, u32 chnl) -{ - struct io_mgr *pio_mgr = (struct io_mgr *)hio_mgr; - struct shm *sm; - - if (!hio_mgr) - goto func_end; - sm = hio_mgr->shared_mem; - - /* Inform DSP that we have no more buffers on this channel */ - set_chnl_free(sm, chnl); - - sm_interrupt_dsp(pio_mgr->bridge_context, MBX_PCPY_CLASS); -func_end: - return; -} - - -/* - * ======== io_dispatch_pm ======== - * Performs I/O dispatch on PM related messages from DSP - */ -static void io_dispatch_pm(struct io_mgr *pio_mgr) -{ - int status; - u32 parg[2]; - - /* Perform Power message processing here */ - parg[0] = pio_mgr->intr_val; - - /* Send the command to the Bridge clk/pwr manager to handle */ - if (parg[0] == MBX_PM_HIBERNATE_EN) { - dev_dbg(bridge, "PM: Hibernate command\n"); - status = pio_mgr->intf_fxns-> - dev_cntrl(pio_mgr->bridge_context, - BRDIOCTL_PWR_HIBERNATE, parg); - if (status) - pr_err("%s: hibernate cmd failed 0x%x\n", - __func__, status); - } else if (parg[0] == MBX_PM_OPP_REQ) { - parg[1] = pio_mgr->shared_mem->opp_request.rqst_opp_pt; - dev_dbg(bridge, "PM: Requested OPP = 0x%x\n", parg[1]); - status = pio_mgr->intf_fxns-> - dev_cntrl(pio_mgr->bridge_context, - BRDIOCTL_CONSTRAINT_REQUEST, parg); - if (status) - dev_dbg(bridge, "PM: Failed to set constraint " - "= 0x%x\n", parg[1]); - } else { - dev_dbg(bridge, "PM: clk control value of msg = 0x%x\n", - parg[0]); - status = pio_mgr->intf_fxns-> - dev_cntrl(pio_mgr->bridge_context, - BRDIOCTL_CLK_CTRL, parg); - if (status) - dev_dbg(bridge, "PM: Failed to ctrl the DSP clk" - "= 0x%x\n", *parg); - } -} - -/* - * ======== io_dpc ======== - * Deferred procedure call for shared memory channel driver ISR. Carries - * out the dispatch of I/O as a non-preemptible event. It can only be - * pre-empted by an ISR. - */ -void io_dpc(unsigned long ref_data) -{ - struct io_mgr *pio_mgr = (struct io_mgr *)ref_data; - struct chnl_mgr *chnl_mgr_obj; - struct msg_mgr *msg_mgr_obj; - struct deh_mgr *hdeh_mgr; - u32 requested; - u32 serviced; - - if (!pio_mgr) - goto func_end; - chnl_mgr_obj = pio_mgr->chnl_mgr; - dev_get_msg_mgr(pio_mgr->dev_obj, &msg_mgr_obj); - dev_get_deh_mgr(pio_mgr->dev_obj, &hdeh_mgr); - if (!chnl_mgr_obj) - goto func_end; - - requested = pio_mgr->dpc_req; - serviced = pio_mgr->dpc_sched; - - if (serviced == requested) - goto func_end; - - /* Process pending DPC's */ - do { - /* Check value of interrupt reg to ensure it's a valid error */ - if ((pio_mgr->intr_val > DEH_BASE) && - (pio_mgr->intr_val < DEH_LIMIT)) { - /* Notify DSP/BIOS exception */ - if (hdeh_mgr) { -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - print_dsp_debug_trace(pio_mgr); -#endif - bridge_deh_notify(hdeh_mgr, DSP_SYSERROR, - pio_mgr->intr_val); - } - } - /* Proc-copy channel dispatch */ - input_chnl(pio_mgr, NULL, IO_SERVICE); - output_chnl(pio_mgr, NULL, IO_SERVICE); - -#ifdef CHNL_MESSAGES - if (msg_mgr_obj) { - /* Perform I/O dispatch on message queues */ - input_msg(pio_mgr, msg_mgr_obj); - output_msg(pio_mgr, msg_mgr_obj); - } - -#endif -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - if (pio_mgr->intr_val & MBX_DBG_SYSPRINTF) { - /* Notify DSP Trace message */ - print_dsp_debug_trace(pio_mgr); - } -#endif - serviced++; - } while (serviced != requested); - pio_mgr->dpc_sched = requested; -func_end: - return; -} - -/* - * ======== io_mbox_msg ======== - * Main interrupt handler for the shared memory IO manager. - * Calls the Bridge's CHNL_ISR to determine if this interrupt is ours, then - * schedules a DPC to dispatch I/O. - */ -int io_mbox_msg(struct notifier_block *self, unsigned long len, void *msg) -{ - struct io_mgr *pio_mgr; - struct dev_object *dev_obj; - unsigned long flags; - - dev_obj = dev_get_first(); - dev_get_io_mgr(dev_obj, &pio_mgr); - - if (!pio_mgr) - return NOTIFY_BAD; - - pio_mgr->intr_val = (u16)((u32)msg); - if (pio_mgr->intr_val & MBX_PM_CLASS) - io_dispatch_pm(pio_mgr); - - if (pio_mgr->intr_val == MBX_DEH_RESET) { - pio_mgr->intr_val = 0; - } else { - spin_lock_irqsave(&pio_mgr->dpc_lock, flags); - pio_mgr->dpc_req++; - spin_unlock_irqrestore(&pio_mgr->dpc_lock, flags); - tasklet_schedule(&pio_mgr->dpc_tasklet); - } - return NOTIFY_OK; -} - -/* - * ======== io_request_chnl ======== - * Purpose: - * Request channel I/O from the DSP. Sets flags in shared memory, then - * interrupts the DSP. - */ -void io_request_chnl(struct io_mgr *io_manager, struct chnl_object *pchnl, - u8 io_mode, u16 *mbx_val) -{ - struct chnl_mgr *chnl_mgr_obj; - struct shm *sm; - - if (!pchnl || !mbx_val) - goto func_end; - chnl_mgr_obj = io_manager->chnl_mgr; - sm = io_manager->shared_mem; - if (io_mode == IO_INPUT) { - /* Indicate to the DSP we have a buffer available for input */ - set_chnl_busy(sm, pchnl->chnl_id); - *mbx_val = MBX_PCPY_CLASS; - } else if (io_mode == IO_OUTPUT) { - /* - * Record the fact that we have a buffer available for - * output. - */ - chnl_mgr_obj->output_mask |= (1 << pchnl->chnl_id); - } else { - } -func_end: - return; -} - -/* - * ======== iosm_schedule ======== - * Schedule DPC for IO. - */ -void iosm_schedule(struct io_mgr *io_manager) -{ - unsigned long flags; - - if (!io_manager) - return; - - /* Increment count of DPC's pending. */ - spin_lock_irqsave(&io_manager->dpc_lock, flags); - io_manager->dpc_req++; - spin_unlock_irqrestore(&io_manager->dpc_lock, flags); - - /* Schedule DPC */ - tasklet_schedule(&io_manager->dpc_tasklet); -} - -/* - * ======== find_ready_output ======== - * Search for a host output channel which is ready to send. If this is - * called as a result of servicing the DPC, then implement a round - * robin search; otherwise, this was called by a client thread (via - * IO_Dispatch()), so just start searching from the current channel id. - */ -static u32 find_ready_output(struct chnl_mgr *chnl_mgr_obj, - struct chnl_object *pchnl, u32 mask) -{ - u32 ret = OUTPUTNOTREADY; - u32 id, start_id; - u32 shift; - - id = (pchnl != - NULL ? pchnl->chnl_id : (chnl_mgr_obj->last_output + 1)); - id = ((id == CHNL_MAXCHANNELS) ? 0 : id); - if (id >= CHNL_MAXCHANNELS) - goto func_end; - if (mask) { - shift = (1 << id); - start_id = id; - do { - if (mask & shift) { - ret = id; - if (pchnl == NULL) - chnl_mgr_obj->last_output = id; - break; - } - id = id + 1; - id = ((id == CHNL_MAXCHANNELS) ? 0 : id); - shift = (1 << id); - } while (id != start_id); - } -func_end: - return ret; -} - -/* - * ======== input_chnl ======== - * Dispatch a buffer on an input channel. - */ -static void input_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - u8 io_mode) -{ - struct chnl_mgr *chnl_mgr_obj; - struct shm *sm; - u32 chnl_id; - u32 bytes; - struct chnl_irp *chnl_packet_obj = NULL; - u32 dw_arg; - bool clear_chnl = false; - bool notify_client = false; - - sm = pio_mgr->shared_mem; - chnl_mgr_obj = pio_mgr->chnl_mgr; - - /* Attempt to perform input */ - if (!sm->input_full) - goto func_end; - - bytes = sm->input_size * chnl_mgr_obj->word_size; - chnl_id = sm->input_id; - dw_arg = sm->arg; - if (chnl_id >= CHNL_MAXCHANNELS) { - /* Shouldn't be here: would indicate corrupted shm. */ - goto func_end; - } - pchnl = chnl_mgr_obj->channels[chnl_id]; - if ((pchnl != NULL) && CHNL_IS_INPUT(pchnl->chnl_mode)) { - if ((pchnl->state & ~CHNL_STATEEOS) == CHNL_STATEREADY) { - /* Get the I/O request, and attempt a transfer */ - if (!list_empty(&pchnl->io_requests)) { - if (!pchnl->cio_reqs) - goto func_end; - - chnl_packet_obj = list_first_entry( - &pchnl->io_requests, - struct chnl_irp, link); - list_del(&chnl_packet_obj->link); - pchnl->cio_reqs--; - - /* - * Ensure we don't overflow the client's - * buffer. - */ - bytes = min(bytes, chnl_packet_obj->byte_size); - memcpy(chnl_packet_obj->host_sys_buf, - pio_mgr->input, bytes); - pchnl->bytes_moved += bytes; - chnl_packet_obj->byte_size = bytes; - chnl_packet_obj->arg = dw_arg; - chnl_packet_obj->status = CHNL_IOCSTATCOMPLETE; - - if (bytes == 0) { - /* - * This assertion fails if the DSP - * sends EOS more than once on this - * channel. - */ - if (pchnl->state & CHNL_STATEEOS) - goto func_end; - /* - * Zero bytes indicates EOS. Update - * IOC status for this chirp, and also - * the channel state. - */ - chnl_packet_obj->status |= - CHNL_IOCSTATEOS; - pchnl->state |= CHNL_STATEEOS; - /* - * Notify that end of stream has - * occurred. - */ - ntfy_notify(pchnl->ntfy_obj, - DSP_STREAMDONE); - } - /* Tell DSP if no more I/O buffers available */ - if (list_empty(&pchnl->io_requests)) - set_chnl_free(sm, pchnl->chnl_id); - clear_chnl = true; - notify_client = true; - } else { - /* - * Input full for this channel, but we have no - * buffers available. The channel must be - * "idling". Clear out the physical input - * channel. - */ - clear_chnl = true; - } - } else { - /* Input channel cancelled: clear input channel */ - clear_chnl = true; - } - } else { - /* DPC fired after host closed channel: clear input channel */ - clear_chnl = true; - } - if (clear_chnl) { - /* Indicate to the DSP we have read the input */ - sm->input_full = 0; - sm_interrupt_dsp(pio_mgr->bridge_context, MBX_PCPY_CLASS); - } - if (notify_client) { - /* Notify client with IO completion record */ - notify_chnl_complete(pchnl, chnl_packet_obj); - } -func_end: - return; -} - -/* - * ======== input_msg ======== - * Copies messages from shared memory to the message queues. - */ -static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) -{ - u32 num_msgs; - u32 i; - u8 *msg_input; - struct msg_queue *msg_queue_obj; - struct msg_frame *pmsg; - struct msg_dspmsg msg; - struct msg_ctrl *msg_ctr_obj; - u32 input_empty; - u32 addr; - - msg_ctr_obj = pio_mgr->msg_input_ctrl; - /* Get the number of input messages to be read */ - input_empty = msg_ctr_obj->buf_empty; - num_msgs = msg_ctr_obj->size; - if (input_empty) - return; - - msg_input = pio_mgr->msg_input; - for (i = 0; i < num_msgs; i++) { - /* Read the next message */ - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.cmd); - msg.msg.cmd = - read_ext32_bit_dsp_data(pio_mgr->bridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.arg1); - msg.msg.arg1 = - read_ext32_bit_dsp_data(pio_mgr->bridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.arg2); - msg.msg.arg2 = - read_ext32_bit_dsp_data(pio_mgr->bridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msgq_id); - msg.msgq_id = - read_ext32_bit_dsp_data(pio_mgr->bridge_context, addr); - msg_input += sizeof(struct msg_dspmsg); - - /* Determine which queue to put the message in */ - dev_dbg(bridge, "input msg: cmd=0x%x arg1=0x%x " - "arg2=0x%x msgq_id=0x%x\n", msg.msg.cmd, - msg.msg.arg1, msg.msg.arg2, msg.msgq_id); - /* - * Interrupt may occur before shared memory and message - * input locations have been set up. If all nodes were - * cleaned up, hmsg_mgr->max_msgs should be 0. - */ - list_for_each_entry(msg_queue_obj, &hmsg_mgr->queue_list, - list_elem) { - if (msg.msgq_id != msg_queue_obj->msgq_id) - continue; - /* Found it */ - if (msg.msg.cmd == RMS_EXITACK) { - /* - * Call the node exit notification. - * The exit message does not get - * queued. - */ - (*hmsg_mgr->on_exit)(msg_queue_obj->arg, - msg.msg.arg1); - break; - } - /* - * Not an exit acknowledgement, queue - * the message. - */ - if (list_empty(&msg_queue_obj->msg_free_list)) { - /* - * No free frame to copy the - * message into. - */ - pr_err("%s: no free msg frames," - " discarding msg\n", - __func__); - break; - } - - pmsg = list_first_entry(&msg_queue_obj->msg_free_list, - struct msg_frame, list_elem); - list_del(&pmsg->list_elem); - pmsg->msg_data = msg; - list_add_tail(&pmsg->list_elem, - &msg_queue_obj->msg_used_list); - ntfy_notify(msg_queue_obj->ntfy_obj, - DSP_NODEMESSAGEREADY); - sync_set_event(msg_queue_obj->sync_event); - } - } - /* Set the post SWI flag */ - if (num_msgs > 0) { - /* Tell the DSP we've read the messages */ - msg_ctr_obj->buf_empty = true; - msg_ctr_obj->post_swi = true; - sm_interrupt_dsp(pio_mgr->bridge_context, MBX_PCPY_CLASS); - } -} - -/* - * ======== notify_chnl_complete ======== - * Purpose: - * Signal the channel event, notifying the client that I/O has completed. - */ -static void notify_chnl_complete(struct chnl_object *pchnl, - struct chnl_irp *chnl_packet_obj) -{ - bool signal_event; - - if (!pchnl || !pchnl->sync_event || !chnl_packet_obj) - goto func_end; - - /* - * Note: we signal the channel event only if the queue of IO - * completions is empty. If it is not empty, the event is sure to be - * signalled by the only IO completion list consumer: - * bridge_chnl_get_ioc(). - */ - signal_event = list_empty(&pchnl->io_completions); - /* Enqueue the IO completion info for the client */ - list_add_tail(&chnl_packet_obj->link, &pchnl->io_completions); - pchnl->cio_cs++; - - if (pchnl->cio_cs > pchnl->chnl_packets) - goto func_end; - /* Signal the channel event (if not already set) that IO is complete */ - if (signal_event) - sync_set_event(pchnl->sync_event); - - /* Notify that IO is complete */ - ntfy_notify(pchnl->ntfy_obj, DSP_STREAMIOCOMPLETION); -func_end: - return; -} - -/* - * ======== output_chnl ======== - * Purpose: - * Dispatch a buffer on an output channel. - */ -static void output_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - u8 io_mode) -{ - struct chnl_mgr *chnl_mgr_obj; - struct shm *sm; - u32 chnl_id; - struct chnl_irp *chnl_packet_obj; - u32 dw_dsp_f_mask; - - chnl_mgr_obj = pio_mgr->chnl_mgr; - sm = pio_mgr->shared_mem; - /* Attempt to perform output */ - if (sm->output_full) - goto func_end; - - if (pchnl && !((pchnl->state & ~CHNL_STATEEOS) == CHNL_STATEREADY)) - goto func_end; - - /* Look to see if both a PC and DSP output channel are ready */ - dw_dsp_f_mask = sm->dsp_free_mask; - chnl_id = - find_ready_output(chnl_mgr_obj, pchnl, - (chnl_mgr_obj->output_mask & dw_dsp_f_mask)); - if (chnl_id == OUTPUTNOTREADY) - goto func_end; - - pchnl = chnl_mgr_obj->channels[chnl_id]; - if (!pchnl || list_empty(&pchnl->io_requests)) { - /* Shouldn't get here */ - goto func_end; - } - - if (!pchnl->cio_reqs) - goto func_end; - - /* Get the I/O request, and attempt a transfer */ - chnl_packet_obj = list_first_entry(&pchnl->io_requests, - struct chnl_irp, link); - list_del(&chnl_packet_obj->link); - - pchnl->cio_reqs--; - - /* Record fact that no more I/O buffers available */ - if (list_empty(&pchnl->io_requests)) - chnl_mgr_obj->output_mask &= ~(1 << chnl_id); - - /* Transfer buffer to DSP side */ - chnl_packet_obj->byte_size = min(pio_mgr->sm_buf_size, - chnl_packet_obj->byte_size); - memcpy(pio_mgr->output, chnl_packet_obj->host_sys_buf, - chnl_packet_obj->byte_size); - pchnl->bytes_moved += chnl_packet_obj->byte_size; - /* Write all 32 bits of arg */ - sm->arg = chnl_packet_obj->arg; -#if _CHNL_WORDSIZE == 2 - /* Access can be different SM access word size (e.g. 16/32 bit words) */ - sm->output_id = (u16) chnl_id; - sm->output_size = (u16) (chnl_packet_obj->byte_size + - chnl_mgr_obj->word_size - 1) / - (u16) chnl_mgr_obj->word_size; -#else - sm->output_id = chnl_id; - sm->output_size = (chnl_packet_obj->byte_size + - chnl_mgr_obj->word_size - 1) / chnl_mgr_obj->word_size; -#endif - sm->output_full = 1; - /* Indicate to the DSP we have written the output */ - sm_interrupt_dsp(pio_mgr->bridge_context, MBX_PCPY_CLASS); - /* Notify client with IO completion record (keep EOS) */ - chnl_packet_obj->status &= CHNL_IOCSTATEOS; - notify_chnl_complete(pchnl, chnl_packet_obj); - /* Notify if stream is done. */ - if (chnl_packet_obj->status & CHNL_IOCSTATEOS) - ntfy_notify(pchnl->ntfy_obj, DSP_STREAMDONE); - -func_end: - return; -} - -/* - * ======== output_msg ======== - * Copies messages from the message queues to the shared memory. - */ -static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) -{ - u32 num_msgs = 0; - u32 i; - struct msg_dspmsg *msg_output; - struct msg_frame *pmsg; - struct msg_ctrl *msg_ctr_obj; - u32 val; - u32 addr; - - msg_ctr_obj = pio_mgr->msg_output_ctrl; - - /* Check if output has been cleared */ - if (!msg_ctr_obj->buf_empty) - return; - - num_msgs = (hmsg_mgr->msgs_pending > hmsg_mgr->max_msgs) ? - hmsg_mgr->max_msgs : hmsg_mgr->msgs_pending; - msg_output = (struct msg_dspmsg *) pio_mgr->msg_output; - - /* Copy num_msgs messages into shared memory */ - for (i = 0; i < num_msgs; i++) { - if (list_empty(&hmsg_mgr->msg_used_list)) - continue; - - pmsg = list_first_entry(&hmsg_mgr->msg_used_list, - struct msg_frame, list_elem); - list_del(&pmsg->list_elem); - - val = (pmsg->msg_data).msgq_id; - addr = (u32) &msg_output->msgq_id; - write_ext32_bit_dsp_data(pio_mgr->bridge_context, addr, val); - - val = (pmsg->msg_data).msg.cmd; - addr = (u32) &msg_output->msg.cmd; - write_ext32_bit_dsp_data(pio_mgr->bridge_context, addr, val); - - val = (pmsg->msg_data).msg.arg1; - addr = (u32) &msg_output->msg.arg1; - write_ext32_bit_dsp_data(pio_mgr->bridge_context, addr, val); - - val = (pmsg->msg_data).msg.arg2; - addr = (u32) &msg_output->msg.arg2; - write_ext32_bit_dsp_data(pio_mgr->bridge_context, addr, val); - - msg_output++; - list_add_tail(&pmsg->list_elem, &hmsg_mgr->msg_free_list); - sync_set_event(hmsg_mgr->sync_event); - } - - if (num_msgs > 0) { - hmsg_mgr->msgs_pending -= num_msgs; -#if _CHNL_WORDSIZE == 2 - /* - * Access can be different SM access word size - * (e.g. 16/32 bit words) - */ - msg_ctr_obj->size = (u16) num_msgs; -#else - msg_ctr_obj->size = num_msgs; -#endif - msg_ctr_obj->buf_empty = false; - /* Set the post SWI flag */ - msg_ctr_obj->post_swi = true; - /* Tell the DSP we have written the output. */ - sm_interrupt_dsp(pio_mgr->bridge_context, MBX_PCPY_CLASS); - } -} - -/* - * ======== register_shm_segs ======== - * purpose: - * Registers GPP SM segment with CMM. - */ -static int register_shm_segs(struct io_mgr *hio_mgr, - struct cod_manager *cod_man, - u32 dw_gpp_base_pa) -{ - int status = 0; - u32 ul_shm0_base = 0; - u32 shm0_end = 0; - u32 ul_shm0_rsrvd_start = 0; - u32 ul_rsrvd_size = 0; - u32 ul_gpp_phys; - u32 ul_dsp_virt; - u32 ul_shm_seg_id0 = 0; - u32 dw_offset, dw_gpp_base_va, ul_dsp_size; - - /* - * Read address and size info for first SM region. - * Get start of 1st SM Heap region. - */ - status = - cod_get_sym_value(cod_man, SHM0_SHARED_BASE_SYM, &ul_shm0_base); - if (ul_shm0_base == 0) { - status = -EPERM; - goto func_end; - } - /* Get end of 1st SM Heap region */ - if (!status) { - /* Get start and length of message part of shared memory */ - status = cod_get_sym_value(cod_man, SHM0_SHARED_END_SYM, - &shm0_end); - if (shm0_end == 0) { - status = -EPERM; - goto func_end; - } - } - /* Start of Gpp reserved region */ - if (!status) { - /* Get start and length of message part of shared memory */ - status = - cod_get_sym_value(cod_man, SHM0_SHARED_RESERVED_BASE_SYM, - &ul_shm0_rsrvd_start); - if (ul_shm0_rsrvd_start == 0) { - status = -EPERM; - goto func_end; - } - } - /* Register with CMM */ - if (!status) { - status = dev_get_cmm_mgr(hio_mgr->dev_obj, &hio_mgr->cmm_mgr); - if (!status) { - status = cmm_un_register_gppsm_seg(hio_mgr->cmm_mgr, - CMM_ALLSEGMENTS); - } - } - /* Register new SM region(s) */ - if (!status && (shm0_end - ul_shm0_base) > 0) { - /* Calc size (bytes) of SM the GPP can alloc from */ - ul_rsrvd_size = - (shm0_end - ul_shm0_rsrvd_start + 1) * hio_mgr->word_size; - if (ul_rsrvd_size <= 0) { - status = -EPERM; - goto func_end; - } - /* Calc size of SM DSP can alloc from */ - ul_dsp_size = - (ul_shm0_rsrvd_start - ul_shm0_base) * hio_mgr->word_size; - if (ul_dsp_size <= 0) { - status = -EPERM; - goto func_end; - } - /* First TLB entry reserved for Bridge SM use. */ - ul_gpp_phys = hio_mgr->ext_proc_info.ty_tlb[0].gpp_phys; - /* Get size in bytes */ - ul_dsp_virt = - hio_mgr->ext_proc_info.ty_tlb[0].dsp_virt * - hio_mgr->word_size; - /* - * Calc byte offset used to convert GPP phys <-> DSP byte - * address. - */ - if (dw_gpp_base_pa > ul_dsp_virt) - dw_offset = dw_gpp_base_pa - ul_dsp_virt; - else - dw_offset = ul_dsp_virt - dw_gpp_base_pa; - - if (ul_shm0_rsrvd_start * hio_mgr->word_size < ul_dsp_virt) { - status = -EPERM; - goto func_end; - } - /* - * Calc Gpp phys base of SM region. - * This is actually uncached kernel virtual address. - */ - dw_gpp_base_va = - ul_gpp_phys + ul_shm0_rsrvd_start * hio_mgr->word_size - - ul_dsp_virt; - /* - * Calc Gpp phys base of SM region. - * This is the physical address. - */ - dw_gpp_base_pa = - dw_gpp_base_pa + ul_shm0_rsrvd_start * hio_mgr->word_size - - ul_dsp_virt; - /* Register SM Segment 0. */ - status = - cmm_register_gppsm_seg(hio_mgr->cmm_mgr, dw_gpp_base_pa, - ul_rsrvd_size, dw_offset, - (dw_gpp_base_pa > - ul_dsp_virt) ? CMM_ADDTODSPPA : - CMM_SUBFROMDSPPA, - (u32) (ul_shm0_base * - hio_mgr->word_size), - ul_dsp_size, &ul_shm_seg_id0, - dw_gpp_base_va); - /* First SM region is seg_id = 1 */ - if (ul_shm_seg_id0 != 1) - status = -EPERM; - } -func_end: - return status; -} - -/* ZCPY IO routines. */ -/* - * ======== IO_SHMcontrol ======== - * Sets the requested shm setting. - */ -int io_sh_msetting(struct io_mgr *hio_mgr, u8 desc, void *pargs) -{ -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 i; - struct dspbridge_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - switch (desc) { - case SHM_CURROPP: - /* Update the shared memory with requested OPP information */ - if (pargs != NULL) - hio_mgr->shared_mem->opp_table_struct.curr_opp_pt = - *(u32 *) pargs; - else - return -EPERM; - break; - case SHM_OPPINFO: - /* - * Update the shared memory with the voltage, frequency, - * min and max frequency values for an OPP. - */ - for (i = 0; i <= dsp_max_opps; i++) { - hio_mgr->shared_mem->opp_table_struct.opp_point[i]. - voltage = vdd1_dsp_freq[i][0]; - dev_dbg(bridge, "OPP-shm: voltage: %d\n", - vdd1_dsp_freq[i][0]); - hio_mgr->shared_mem->opp_table_struct. - opp_point[i].frequency = vdd1_dsp_freq[i][1]; - dev_dbg(bridge, "OPP-shm: frequency: %d\n", - vdd1_dsp_freq[i][1]); - hio_mgr->shared_mem->opp_table_struct.opp_point[i]. - min_freq = vdd1_dsp_freq[i][2]; - dev_dbg(bridge, "OPP-shm: min freq: %d\n", - vdd1_dsp_freq[i][2]); - hio_mgr->shared_mem->opp_table_struct.opp_point[i]. - max_freq = vdd1_dsp_freq[i][3]; - dev_dbg(bridge, "OPP-shm: max freq: %d\n", - vdd1_dsp_freq[i][3]); - } - hio_mgr->shared_mem->opp_table_struct.num_opp_pts = - dsp_max_opps; - dev_dbg(bridge, "OPP-shm: max OPP number: %d\n", dsp_max_opps); - /* Update the current OPP number */ - if (pdata->dsp_get_opp) - i = (*pdata->dsp_get_opp) (); - hio_mgr->shared_mem->opp_table_struct.curr_opp_pt = i; - dev_dbg(bridge, "OPP-shm: value programmed = %d\n", i); - break; - case SHM_GETOPP: - /* Get the OPP that DSP has requested */ - *(u32 *) pargs = hio_mgr->shared_mem->opp_request.rqst_opp_pt; - break; - default: - break; - } -#endif - return 0; -} - -/* - * ======== bridge_io_get_proc_load ======== - * Gets the Processor's Load information - */ -int bridge_io_get_proc_load(struct io_mgr *hio_mgr, - struct dsp_procloadstat *proc_lstat) -{ - if (!hio_mgr->shared_mem) - return -EFAULT; - - proc_lstat->curr_load = - hio_mgr->shared_mem->load_mon_info.curr_dsp_load; - proc_lstat->predicted_load = - hio_mgr->shared_mem->load_mon_info.pred_dsp_load; - proc_lstat->curr_dsp_freq = - hio_mgr->shared_mem->load_mon_info.curr_dsp_freq; - proc_lstat->predicted_freq = - hio_mgr->shared_mem->load_mon_info.pred_dsp_freq; - - dev_dbg(bridge, "Curr Load = %d, Pred Load = %d, Curr Freq = %d, " - "Pred Freq = %d\n", proc_lstat->curr_load, - proc_lstat->predicted_load, proc_lstat->curr_dsp_freq, - proc_lstat->predicted_freq); - return 0; -} - - -#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) -void print_dsp_debug_trace(struct io_mgr *hio_mgr) -{ - u32 ul_new_message_length = 0, ul_gpp_cur_pointer; - - while (true) { - /* Get the DSP current pointer */ - ul_gpp_cur_pointer = - *(u32 *) (hio_mgr->trace_buffer_current); - ul_gpp_cur_pointer = - hio_mgr->gpp_va + (ul_gpp_cur_pointer - - hio_mgr->dsp_va); - - /* No new debug messages available yet */ - if (ul_gpp_cur_pointer == hio_mgr->gpp_read_pointer) { - break; - } else if (ul_gpp_cur_pointer > hio_mgr->gpp_read_pointer) { - /* Continuous data */ - ul_new_message_length = - ul_gpp_cur_pointer - hio_mgr->gpp_read_pointer; - - memcpy(hio_mgr->msg, - (char *)hio_mgr->gpp_read_pointer, - ul_new_message_length); - hio_mgr->msg[ul_new_message_length] = '\0'; - /* - * Advance the GPP trace pointer to DSP current - * pointer. - */ - hio_mgr->gpp_read_pointer += ul_new_message_length; - /* Print the trace messages */ - pr_info("DSPTrace: %s\n", hio_mgr->msg); - } else if (ul_gpp_cur_pointer < hio_mgr->gpp_read_pointer) { - /* Handle trace buffer wraparound */ - memcpy(hio_mgr->msg, - (char *)hio_mgr->gpp_read_pointer, - hio_mgr->trace_buffer_end - - hio_mgr->gpp_read_pointer); - ul_new_message_length = - ul_gpp_cur_pointer - hio_mgr->trace_buffer_begin; - memcpy(&hio_mgr->msg[hio_mgr->trace_buffer_end - - hio_mgr->gpp_read_pointer], - (char *)hio_mgr->trace_buffer_begin, - ul_new_message_length); - hio_mgr->msg[hio_mgr->trace_buffer_end - - hio_mgr->gpp_read_pointer + - ul_new_message_length] = '\0'; - /* - * Advance the GPP trace pointer to DSP current - * pointer. - */ - hio_mgr->gpp_read_pointer = - hio_mgr->trace_buffer_begin + - ul_new_message_length; - /* Print the trace messages */ - pr_info("DSPTrace: %s\n", hio_mgr->msg); - } - } -} -#endif - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/* - * ======== print_dsp_trace_buffer ======== - * Prints the trace buffer returned from the DSP (if DBG_Trace is enabled). - * Parameters: - * hdeh_mgr: Handle to DEH manager object - * number of extra carriage returns to generate. - * Returns: - * 0: Success. - * -ENOMEM: Unable to allocate memory. - * Requires: - * hdeh_mgr muse be valid. Checked in bridge_deh_notify. - */ -int print_dsp_trace_buffer(struct bridge_dev_context *hbridge_context) -{ - int status = 0; - struct cod_manager *cod_mgr; - u32 ul_trace_end; - u32 ul_trace_begin; - u32 trace_cur_pos; - u32 ul_num_bytes = 0; - u32 ul_num_words = 0; - u32 ul_word_size = 2; - char *psz_buf; - char *str_beg; - char *trace_end; - char *buf_end; - char *new_line; - - struct bridge_dev_context *pbridge_context = hbridge_context; - struct bridge_drv_interface *intf_fxns; - struct dev_object *dev_obj = (struct dev_object *) - pbridge_context->dev_obj; - - status = dev_get_cod_mgr(dev_obj, &cod_mgr); - - if (cod_mgr) { - /* Look for SYS_PUTCBEG/SYS_PUTCEND */ - status = - cod_get_sym_value(cod_mgr, COD_TRACEBEG, &ul_trace_begin); - } else { - status = -EFAULT; - } - if (!status) - status = - cod_get_sym_value(cod_mgr, COD_TRACEEND, &ul_trace_end); - - if (!status) - /* trace_cur_pos will hold the address of a DSP pointer */ - status = cod_get_sym_value(cod_mgr, COD_TRACECURPOS, - &trace_cur_pos); - - if (status) - goto func_end; - - ul_num_bytes = (ul_trace_end - ul_trace_begin); - - ul_num_words = ul_num_bytes * ul_word_size; - status = dev_get_intf_fxns(dev_obj, &intf_fxns); - - if (status) - goto func_end; - - psz_buf = kzalloc(ul_num_bytes + 2, GFP_ATOMIC); - if (psz_buf != NULL) { - /* Read trace buffer data */ - status = (*intf_fxns->brd_read)(pbridge_context, - (u8 *)psz_buf, (u32)ul_trace_begin, - ul_num_bytes, 0); - - if (status) - goto func_end; - - /* Pack and do newline conversion */ - pr_debug("PrintDspTraceBuffer: " - "before pack and unpack.\n"); - pr_debug("%s: DSP Trace Buffer Begin:\n" - "=======================\n%s\n", - __func__, psz_buf); - - /* Read the value at the DSP address in trace_cur_pos. */ - status = (*intf_fxns->brd_read)(pbridge_context, - (u8 *)&trace_cur_pos, (u32)trace_cur_pos, - 4, 0); - if (status) - goto func_end; - /* Pack and do newline conversion */ - pr_info("DSP Trace Buffer Begin:\n" - "=======================\n%s\n", - psz_buf); - - - /* convert to offset */ - trace_cur_pos = trace_cur_pos - ul_trace_begin; - - if (ul_num_bytes) { - /* - * The buffer is not full, find the end of the - * data -- buf_end will be >= pszBuf after - * while. - */ - buf_end = &psz_buf[ul_num_bytes+1]; - /* DSP print position */ - trace_end = &psz_buf[trace_cur_pos]; - - /* - * Search buffer for a new_line and replace it - * with '\0', then print as string. - * Continue until end of buffer is reached. - */ - str_beg = trace_end; - ul_num_bytes = buf_end - str_beg; - - while (str_beg < buf_end) { - new_line = strnchr(str_beg, ul_num_bytes, - '\n'); - if (new_line && new_line < buf_end) { - *new_line = 0; - pr_debug("%s\n", str_beg); - str_beg = ++new_line; - ul_num_bytes = buf_end - str_beg; - } else { - /* - * Assume buffer empty if it contains - * a zero - */ - if (*str_beg != '\0') { - str_beg[ul_num_bytes] = 0; - pr_debug("%s\n", str_beg); - } - str_beg = buf_end; - ul_num_bytes = 0; - } - } - /* - * Search buffer for a nNewLine and replace it - * with '\0', then print as string. - * Continue until buffer is exhausted. - */ - str_beg = psz_buf; - ul_num_bytes = trace_end - str_beg; - - while (str_beg < trace_end) { - new_line = strnchr(str_beg, ul_num_bytes, '\n'); - if (new_line != NULL && new_line < trace_end) { - *new_line = 0; - pr_debug("%s\n", str_beg); - str_beg = ++new_line; - ul_num_bytes = trace_end - str_beg; - } else { - /* - * Assume buffer empty if it contains - * a zero - */ - if (*str_beg != '\0') { - str_beg[ul_num_bytes] = 0; - pr_debug("%s\n", str_beg); - } - str_beg = trace_end; - ul_num_bytes = 0; - } - } - } - pr_info("\n=======================\n" - "DSP Trace Buffer End:\n"); - kfree(psz_buf); - } else { - status = -ENOMEM; - } -func_end: - if (status) - dev_dbg(bridge, "%s Failed, status 0x%x\n", __func__, status); - return status; -} - -/** - * dump_dsp_stack() - This function dumps the data on the DSP stack. - * @bridge_context: Bridge driver's device context pointer. - * - */ -int dump_dsp_stack(struct bridge_dev_context *bridge_context) -{ - int status = 0; - struct cod_manager *code_mgr; - struct node_mgr *node_mgr; - u32 trace_begin; - char name[256]; - struct { - u32 head[2]; - u32 size; - } mmu_fault_dbg_info; - u32 *buffer; - u32 *buffer_beg; - u32 *buffer_end; - u32 exc_type; - u32 dyn_ext_base; - u32 i; - u32 offset_output; - u32 total_size; - u32 poll_cnt; - const char *dsp_regs[] = {"EFR", "IERR", "ITSR", "NTSR", - "IRP", "NRP", "AMR", "SSR", - "ILC", "RILC", "IER", "CSR"}; - const char *exec_ctxt[] = {"Task", "SWI", "HWI", "Unknown"}; - struct bridge_drv_interface *intf_fxns; - struct dev_object *dev_object = bridge_context->dev_obj; - - status = dev_get_cod_mgr(dev_object, &code_mgr); - if (!code_mgr) { - pr_debug("%s: Failed on dev_get_cod_mgr.\n", __func__); - status = -EFAULT; - } - - if (!status) { - status = dev_get_node_manager(dev_object, &node_mgr); - if (!node_mgr) { - pr_debug("%s: Failed on dev_get_node_manager.\n", - __func__); - status = -EFAULT; - } - } - - if (!status) { - /* Look for SYS_PUTCBEG/SYS_PUTCEND: */ - status = - cod_get_sym_value(code_mgr, COD_TRACEBEG, &trace_begin); - pr_debug("%s: trace_begin Value 0x%x\n", - __func__, trace_begin); - if (status) - pr_debug("%s: Failed on cod_get_sym_value.\n", - __func__); - } - if (!status) - status = dev_get_intf_fxns(dev_object, &intf_fxns); - /* - * Check for the "magic number" in the trace buffer. If it has - * yet to appear then poll the trace buffer to wait for it. Its - * appearance signals that the DSP has finished dumping its state. - */ - mmu_fault_dbg_info.head[0] = 0; - mmu_fault_dbg_info.head[1] = 0; - if (!status) { - poll_cnt = 0; - while ((mmu_fault_dbg_info.head[0] != MMU_FAULT_HEAD1 || - mmu_fault_dbg_info.head[1] != MMU_FAULT_HEAD2) && - poll_cnt < POLL_MAX) { - - /* Read DSP dump size from the DSP trace buffer... */ - status = (*intf_fxns->brd_read)(bridge_context, - (u8 *)&mmu_fault_dbg_info, (u32)trace_begin, - sizeof(mmu_fault_dbg_info), 0); - - if (status) - break; - - poll_cnt++; - } - - if (mmu_fault_dbg_info.head[0] != MMU_FAULT_HEAD1 && - mmu_fault_dbg_info.head[1] != MMU_FAULT_HEAD2) { - status = -ETIME; - pr_err("%s:No DSP MMU-Fault information available.\n", - __func__); - } - } - - if (!status) { - total_size = mmu_fault_dbg_info.size; - /* Limit the size in case DSP went crazy */ - if (total_size > MAX_MMU_DBGBUFF) - total_size = MAX_MMU_DBGBUFF; - - buffer = kzalloc(total_size, GFP_ATOMIC); - if (!buffer) { - status = -ENOMEM; - pr_debug("%s: Failed to " - "allocate stack dump buffer.\n", __func__); - goto func_end; - } - - buffer_beg = buffer; - buffer_end = buffer + total_size / 4; - - /* Read bytes from the DSP trace buffer... */ - status = (*intf_fxns->brd_read)(bridge_context, - (u8 *)buffer, (u32)trace_begin, - total_size, 0); - if (status) { - pr_debug("%s: Failed to Read Trace Buffer.\n", - __func__); - goto func_end; - } - - pr_err("\nAproximate Crash Position:\n" - "--------------------------\n"); - - exc_type = buffer[3]; - if (!exc_type) - i = buffer[79]; /* IRP */ - else - i = buffer[80]; /* NRP */ - - status = - cod_get_sym_value(code_mgr, DYNEXTBASE, &dyn_ext_base); - if (status) { - status = -EFAULT; - goto func_end; - } - - if ((i > dyn_ext_base) && (node_find_addr(node_mgr, i, - 0x1000, &offset_output, name) == 0)) - pr_err("0x%-8x [\"%s\" + 0x%x]\n", i, name, - i - offset_output); - else - pr_err("0x%-8x [Unable to match to a symbol.]\n", i); - - buffer += 4; - - pr_err("\nExecution Info:\n" - "---------------\n"); - - if (*buffer < ARRAY_SIZE(exec_ctxt)) { - pr_err("Execution context \t%s\n", - exec_ctxt[*buffer++]); - } else { - pr_err("Execution context corrupt\n"); - kfree(buffer_beg); - return -EFAULT; - } - pr_err("Task Handle\t\t0x%x\n", *buffer++); - pr_err("Stack Pointer\t\t0x%x\n", *buffer++); - pr_err("Stack Top\t\t0x%x\n", *buffer++); - pr_err("Stack Bottom\t\t0x%x\n", *buffer++); - pr_err("Stack Size\t\t0x%x\n", *buffer++); - pr_err("Stack Size In Use\t0x%x\n", *buffer++); - - pr_err("\nCPU Registers\n" - "---------------\n"); - - for (i = 0; i < 32; i++) { - if (i == 4 || i == 6 || i == 8) - pr_err("A%d 0x%-8x [Function Argument %d]\n", - i, *buffer++, i-3); - else if (i == 15) - pr_err("A15 0x%-8x [Frame Pointer]\n", - *buffer++); - else - pr_err("A%d 0x%x\n", i, *buffer++); - } - - pr_err("\nB0 0x%x\n", *buffer++); - pr_err("B1 0x%x\n", *buffer++); - pr_err("B2 0x%x\n", *buffer++); - - if ((*buffer > dyn_ext_base) && (node_find_addr(node_mgr, - *buffer, 0x1000, &offset_output, name) == 0)) - - pr_err("B3 0x%-8x [Function Return Pointer:" - " \"%s\" + 0x%x]\n", *buffer, name, - *buffer - offset_output); - else - pr_err("B3 0x%-8x [Function Return Pointer:" - "Unable to match to a symbol.]\n", *buffer); - - buffer++; - - for (i = 4; i < 32; i++) { - if (i == 4 || i == 6 || i == 8) - pr_err("B%d 0x%-8x [Function Argument %d]\n", - i, *buffer++, i-2); - else if (i == 14) - pr_err("B14 0x%-8x [Data Page Pointer]\n", - *buffer++); - else - pr_err("B%d 0x%x\n", i, *buffer++); - } - - pr_err("\n"); - - for (i = 0; i < ARRAY_SIZE(dsp_regs); i++) - pr_err("%s 0x%x\n", dsp_regs[i], *buffer++); - - pr_err("\nStack:\n" - "------\n"); - - for (i = 0; buffer < buffer_end; i++, buffer++) { - if ((*buffer > dyn_ext_base) && ( - node_find_addr(node_mgr, *buffer , 0x600, - &offset_output, name) == 0)) - pr_err("[%d] 0x%-8x [\"%s\" + 0x%x]\n", - i, *buffer, name, - *buffer - offset_output); - else - pr_err("[%d] 0x%x\n", i, *buffer); - } - kfree(buffer_beg); - } -func_end: - return status; -} - -/** - * dump_dl_modules() - This functions dumps the _DLModules loaded in DSP side - * @bridge_context: Bridge driver's device context pointer. - * - */ -void dump_dl_modules(struct bridge_dev_context *bridge_context) -{ - struct cod_manager *code_mgr; - struct bridge_drv_interface *intf_fxns; - struct bridge_dev_context *bridge_ctxt = bridge_context; - struct dev_object *dev_object = bridge_ctxt->dev_obj; - struct modules_header modules_hdr; - struct dll_module *module_struct = NULL; - u32 module_dsp_addr; - u32 module_size; - u32 module_struct_size = 0; - u32 sect_ndx; - char *sect_str; - int status = 0; - - status = dev_get_intf_fxns(dev_object, &intf_fxns); - if (status) { - pr_debug("%s: Failed on dev_get_intf_fxns.\n", __func__); - goto func_end; - } - - status = dev_get_cod_mgr(dev_object, &code_mgr); - if (!code_mgr) { - pr_debug("%s: Failed on dev_get_cod_mgr.\n", __func__); - status = -EFAULT; - goto func_end; - } - - /* Lookup the address of the modules_header structure */ - status = cod_get_sym_value(code_mgr, "_DLModules", &module_dsp_addr); - if (status) { - pr_debug("%s: Failed on cod_get_sym_value for _DLModules.\n", - __func__); - goto func_end; - } - - pr_debug("%s: _DLModules at 0x%x\n", __func__, module_dsp_addr); - - /* Copy the modules_header structure from DSP memory. */ - status = (*intf_fxns->brd_read)(bridge_context, (u8 *) &modules_hdr, - (u32) module_dsp_addr, sizeof(modules_hdr), 0); - - if (status) { - pr_debug("%s: Failed failed to read modules header.\n", - __func__); - goto func_end; - } - - module_dsp_addr = modules_hdr.first_module; - module_size = modules_hdr.first_module_size; - - pr_debug("%s: dll_module_header 0x%x %d\n", __func__, module_dsp_addr, - module_size); - - pr_err("\nDynamically Loaded Modules:\n" - "---------------------------\n"); - - /* For each dll_module structure in the list... */ - while (module_size) { - /* - * Allocate/re-allocate memory to hold the dll_module - * structure. The memory is re-allocated only if the existing - * allocation is too small. - */ - if (module_size > module_struct_size) { - kfree(module_struct); - module_struct = kzalloc(module_size+128, GFP_ATOMIC); - module_struct_size = module_size+128; - pr_debug("%s: allocated module struct %p %d\n", - __func__, module_struct, module_struct_size); - if (!module_struct) - goto func_end; - } - /* Copy the dll_module structure from DSP memory */ - status = (*intf_fxns->brd_read)(bridge_context, - (u8 *)module_struct, module_dsp_addr, module_size, 0); - - if (status) { - pr_debug( - "%s: Failed to read dll_module struct for 0x%x.\n", - __func__, module_dsp_addr); - break; - } - - /* Update info regarding the _next_ module in the list. */ - module_dsp_addr = module_struct->next_module; - module_size = module_struct->next_module_size; - - pr_debug("%s: next module 0x%x %d, this module num sects %d\n", - __func__, module_dsp_addr, module_size, - module_struct->num_sects); - - /* - * The section name strings start immediately following - * the array of dll_sect structures. - */ - sect_str = (char *) &module_struct-> - sects[module_struct->num_sects]; - pr_err("%s\n", sect_str); - - /* - * Advance to the first section name string. - * Each string follows the one before. - */ - sect_str += strlen(sect_str) + 1; - - /* Access each dll_sect structure and its name string. */ - for (sect_ndx = 0; - sect_ndx < module_struct->num_sects; sect_ndx++) { - pr_err(" Section: 0x%x ", - module_struct->sects[sect_ndx].sect_load_adr); - - if (((u32) sect_str - (u32) module_struct) < - module_struct_size) { - pr_err("%s\n", sect_str); - /* Each string follows the one before. */ - sect_str += strlen(sect_str)+1; - } else { - pr_err("\n"); - pr_debug("%s: section name sting address " - "is invalid %p\n", __func__, sect_str); - } - } - } -func_end: - kfree(module_struct); -} -#endif diff --git a/drivers/staging/tidspbridge/core/msg_sm.c b/drivers/staging/tidspbridge/core/msg_sm.c deleted file mode 100644 index 7b517eb827fe..000000000000 --- a/drivers/staging/tidspbridge/core/msg_sm.c +++ /dev/null @@ -1,564 +0,0 @@ -/* - * msg_sm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implements upper edge functions for Bridge message module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- Others */ -#include - -/* ----------------------------------- This */ -#include <_msg_sm.h> -#include - -/* ----------------------------------- Function Prototypes */ -static int add_new_msg(struct list_head *msg_list); -static void delete_msg_mgr(struct msg_mgr *hmsg_mgr); -static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp); -static void free_msg_list(struct list_head *msg_list); - -/* - * ======== bridge_msg_create ======== - * Create an object to manage message queues. Only one of these objects - * can exist per device object. - */ -int bridge_msg_create(struct msg_mgr **msg_man, - struct dev_object *hdev_obj, - msg_onexit msg_callback) -{ - struct msg_mgr *msg_mgr_obj; - struct io_mgr *hio_mgr; - int status = 0; - - if (!msg_man || !msg_callback || !hdev_obj) - return -EFAULT; - - dev_get_io_mgr(hdev_obj, &hio_mgr); - if (!hio_mgr) - return -EFAULT; - - *msg_man = NULL; - /* Allocate msg_ctrl manager object */ - msg_mgr_obj = kzalloc(sizeof(struct msg_mgr), GFP_KERNEL); - if (!msg_mgr_obj) - return -ENOMEM; - - msg_mgr_obj->on_exit = msg_callback; - msg_mgr_obj->iomgr = hio_mgr; - /* List of MSG_QUEUEs */ - INIT_LIST_HEAD(&msg_mgr_obj->queue_list); - /* - * Queues of message frames for messages to the DSP. Message - * frames will only be added to the free queue when a - * msg_queue object is created. - */ - INIT_LIST_HEAD(&msg_mgr_obj->msg_free_list); - INIT_LIST_HEAD(&msg_mgr_obj->msg_used_list); - spin_lock_init(&msg_mgr_obj->msg_mgr_lock); - - /* - * Create an event to be used by bridge_msg_put() in waiting - * for an available free frame from the message manager. - */ - msg_mgr_obj->sync_event = - kzalloc(sizeof(struct sync_object), GFP_KERNEL); - if (!msg_mgr_obj->sync_event) { - kfree(msg_mgr_obj); - return -ENOMEM; - } - sync_init_event(msg_mgr_obj->sync_event); - - *msg_man = msg_mgr_obj; - - return status; -} - -/* - * ======== bridge_msg_create_queue ======== - * Create a msg_queue for sending/receiving messages to/from a node - * on the DSP. - */ -int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, struct msg_queue **msgq, - u32 msgq_id, u32 max_msgs, void *arg) -{ - u32 i; - u32 num_allocated = 0; - struct msg_queue *msg_q; - int status = 0; - - if (!hmsg_mgr || msgq == NULL) - return -EFAULT; - - *msgq = NULL; - /* Allocate msg_queue object */ - msg_q = kzalloc(sizeof(struct msg_queue), GFP_KERNEL); - if (!msg_q) - return -ENOMEM; - - msg_q->max_msgs = max_msgs; - msg_q->msg_mgr = hmsg_mgr; - msg_q->arg = arg; /* Node handle */ - msg_q->msgq_id = msgq_id; /* Node env (not valid yet) */ - /* Queues of Message frames for messages from the DSP */ - INIT_LIST_HEAD(&msg_q->msg_free_list); - INIT_LIST_HEAD(&msg_q->msg_used_list); - - /* Create event that will be signalled when a message from - * the DSP is available. */ - msg_q->sync_event = kzalloc(sizeof(struct sync_object), GFP_KERNEL); - if (!msg_q->sync_event) { - status = -ENOMEM; - goto out_err; - - } - sync_init_event(msg_q->sync_event); - - /* Create a notification list for message ready notification. */ - msg_q->ntfy_obj = kmalloc(sizeof(struct ntfy_object), GFP_KERNEL); - if (!msg_q->ntfy_obj) { - status = -ENOMEM; - goto out_err; - } - ntfy_init(msg_q->ntfy_obj); - - /* Create events that will be used to synchronize cleanup - * when the object is deleted. sync_done will be set to - * unblock threads in MSG_Put() or MSG_Get(). sync_done_ack - * will be set by the unblocked thread to signal that it - * is unblocked and will no longer reference the object. */ - msg_q->sync_done = kzalloc(sizeof(struct sync_object), GFP_KERNEL); - if (!msg_q->sync_done) { - status = -ENOMEM; - goto out_err; - } - sync_init_event(msg_q->sync_done); - - msg_q->sync_done_ack = kzalloc(sizeof(struct sync_object), GFP_KERNEL); - if (!msg_q->sync_done_ack) { - status = -ENOMEM; - goto out_err; - } - sync_init_event(msg_q->sync_done_ack); - - /* Enter critical section */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - /* Initialize message frames and put in appropriate queues */ - for (i = 0; i < max_msgs && !status; i++) { - status = add_new_msg(&hmsg_mgr->msg_free_list); - if (!status) { - num_allocated++; - status = add_new_msg(&msg_q->msg_free_list); - } - } - if (status) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - goto out_err; - } - - list_add_tail(&msg_q->list_elem, &hmsg_mgr->queue_list); - *msgq = msg_q; - /* Signal that free frames are now available */ - if (!list_empty(&hmsg_mgr->msg_free_list)) - sync_set_event(hmsg_mgr->sync_event); - - /* Exit critical section */ - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - - return 0; -out_err: - delete_msg_queue(msg_q, num_allocated); - return status; -} - -/* - * ======== bridge_msg_delete ======== - * Delete a msg_ctrl manager allocated in bridge_msg_create(). - */ -void bridge_msg_delete(struct msg_mgr *hmsg_mgr) -{ - delete_msg_mgr(hmsg_mgr); -} - -/* - * ======== bridge_msg_delete_queue ======== - * Delete a msg_ctrl queue allocated in bridge_msg_create_queue. - */ -void bridge_msg_delete_queue(struct msg_queue *msg_queue_obj) -{ - struct msg_mgr *hmsg_mgr; - u32 io_msg_pend; - - if (!msg_queue_obj || !msg_queue_obj->msg_mgr) - return; - - hmsg_mgr = msg_queue_obj->msg_mgr; - msg_queue_obj->done = true; - /* Unblock all threads blocked in MSG_Get() or MSG_Put(). */ - io_msg_pend = msg_queue_obj->io_msg_pend; - while (io_msg_pend) { - /* Unblock thread */ - sync_set_event(msg_queue_obj->sync_done); - /* Wait for acknowledgement */ - sync_wait_on_event(msg_queue_obj->sync_done_ack, SYNC_INFINITE); - io_msg_pend = msg_queue_obj->io_msg_pend; - } - /* Remove message queue from hmsg_mgr->queue_list */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - list_del(&msg_queue_obj->list_elem); - /* Free the message queue object */ - delete_msg_queue(msg_queue_obj, msg_queue_obj->max_msgs); - if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -} - -/* - * ======== bridge_msg_get ======== - * Get a message from a msg_ctrl queue. - */ -int bridge_msg_get(struct msg_queue *msg_queue_obj, - struct dsp_msg *pmsg, u32 utimeout) -{ - struct msg_frame *msg_frame_obj; - struct msg_mgr *hmsg_mgr; - struct sync_object *syncs[2]; - u32 index; - int status = 0; - - if (!msg_queue_obj || pmsg == NULL) - return -ENOMEM; - - hmsg_mgr = msg_queue_obj->msg_mgr; - - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - /* If a message is already there, get it */ - if (!list_empty(&msg_queue_obj->msg_used_list)) { - msg_frame_obj = list_first_entry(&msg_queue_obj->msg_used_list, - struct msg_frame, list_elem); - list_del(&msg_frame_obj->list_elem); - *pmsg = msg_frame_obj->msg_data.msg; - list_add_tail(&msg_frame_obj->list_elem, - &msg_queue_obj->msg_free_list); - if (list_empty(&msg_queue_obj->msg_used_list)) - sync_reset_event(msg_queue_obj->sync_event); - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - return 0; - } - - if (msg_queue_obj->done) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - return -EPERM; - } - msg_queue_obj->io_msg_pend++; - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - - /* - * Wait til message is available, timeout, or done. We don't - * have to schedule the DPC, since the DSP will send messages - * when they are available. - */ - syncs[0] = msg_queue_obj->sync_event; - syncs[1] = msg_queue_obj->sync_done; - status = sync_wait_on_multiple_events(syncs, 2, utimeout, &index); - - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - if (msg_queue_obj->done) { - msg_queue_obj->io_msg_pend--; - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - /* - * Signal that we're not going to access msg_queue_obj - * anymore, so it can be deleted. - */ - sync_set_event(msg_queue_obj->sync_done_ack); - return -EPERM; - } - if (!status && !list_empty(&msg_queue_obj->msg_used_list)) { - /* Get msg from used list */ - msg_frame_obj = list_first_entry(&msg_queue_obj->msg_used_list, - struct msg_frame, list_elem); - list_del(&msg_frame_obj->list_elem); - /* Copy message into pmsg and put frame on the free list */ - *pmsg = msg_frame_obj->msg_data.msg; - list_add_tail(&msg_frame_obj->list_elem, - &msg_queue_obj->msg_free_list); - } - msg_queue_obj->io_msg_pend--; - /* Reset the event if there are still queued messages */ - if (!list_empty(&msg_queue_obj->msg_used_list)) - sync_set_event(msg_queue_obj->sync_event); - - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - - return status; -} - -/* - * ======== bridge_msg_put ======== - * Put a message onto a msg_ctrl queue. - */ -int bridge_msg_put(struct msg_queue *msg_queue_obj, - const struct dsp_msg *pmsg, u32 utimeout) -{ - struct msg_frame *msg_frame_obj; - struct msg_mgr *hmsg_mgr; - struct sync_object *syncs[2]; - u32 index; - int status; - - if (!msg_queue_obj || !pmsg || !msg_queue_obj->msg_mgr) - return -EFAULT; - - hmsg_mgr = msg_queue_obj->msg_mgr; - - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - - /* If a message frame is available, use it */ - if (!list_empty(&hmsg_mgr->msg_free_list)) { - msg_frame_obj = list_first_entry(&hmsg_mgr->msg_free_list, - struct msg_frame, list_elem); - list_del(&msg_frame_obj->list_elem); - msg_frame_obj->msg_data.msg = *pmsg; - msg_frame_obj->msg_data.msgq_id = - msg_queue_obj->msgq_id; - list_add_tail(&msg_frame_obj->list_elem, - &hmsg_mgr->msg_used_list); - hmsg_mgr->msgs_pending++; - - if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); - - /* Release critical section before scheduling DPC */ - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - /* Schedule a DPC, to do the actual data transfer: */ - iosm_schedule(hmsg_mgr->iomgr); - return 0; - } - - if (msg_queue_obj->done) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - return -EPERM; - } - msg_queue_obj->io_msg_pend++; - - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - - /* Wait til a free message frame is available, timeout, or done */ - syncs[0] = hmsg_mgr->sync_event; - syncs[1] = msg_queue_obj->sync_done; - status = sync_wait_on_multiple_events(syncs, 2, utimeout, &index); - if (status) - return status; - - /* Enter critical section */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - if (msg_queue_obj->done) { - msg_queue_obj->io_msg_pend--; - /* Exit critical section */ - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - /* - * Signal that we're not going to access msg_queue_obj - * anymore, so it can be deleted. - */ - sync_set_event(msg_queue_obj->sync_done_ack); - return -EPERM; - } - - if (list_empty(&hmsg_mgr->msg_free_list)) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - return -EFAULT; - } - - /* Get msg from free list */ - msg_frame_obj = list_first_entry(&hmsg_mgr->msg_free_list, - struct msg_frame, list_elem); - /* - * Copy message into pmsg and put frame on the - * used list. - */ - list_del(&msg_frame_obj->list_elem); - msg_frame_obj->msg_data.msg = *pmsg; - msg_frame_obj->msg_data.msgq_id = msg_queue_obj->msgq_id; - list_add_tail(&msg_frame_obj->list_elem, &hmsg_mgr->msg_used_list); - hmsg_mgr->msgs_pending++; - /* - * Schedule a DPC, to do the actual - * data transfer. - */ - iosm_schedule(hmsg_mgr->iomgr); - - msg_queue_obj->io_msg_pend--; - /* Reset event if there are still frames available */ - if (!list_empty(&hmsg_mgr->msg_free_list)) - sync_set_event(hmsg_mgr->sync_event); - - /* Exit critical section */ - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - - return 0; -} - -/* - * ======== bridge_msg_register_notify ======== - */ -int bridge_msg_register_notify(struct msg_queue *msg_queue_obj, - u32 event_mask, u32 notify_type, - struct dsp_notification *hnotification) -{ - int status = 0; - - if (!msg_queue_obj || !hnotification) { - status = -ENOMEM; - goto func_end; - } - - if (!(event_mask == DSP_NODEMESSAGEREADY || event_mask == 0)) { - status = -EPERM; - goto func_end; - } - - if (notify_type != DSP_SIGNALEVENT) { - status = -EBADR; - goto func_end; - } - - if (event_mask) - status = ntfy_register(msg_queue_obj->ntfy_obj, hnotification, - event_mask, notify_type); - else - status = ntfy_unregister(msg_queue_obj->ntfy_obj, - hnotification); - - if (status == -EINVAL) { - /* Not registered. Ok, since we couldn't have known. Node - * notifications are split between node state change handled - * by NODE, and message ready handled by msg_ctrl. */ - status = 0; - } -func_end: - return status; -} - -/* - * ======== bridge_msg_set_queue_id ======== - */ -void bridge_msg_set_queue_id(struct msg_queue *msg_queue_obj, u32 msgq_id) -{ - /* - * A message queue must be created when a node is allocated, - * so that node_register_notify() can be called before the node - * is created. Since we don't know the node environment until the - * node is created, we need this function to set msg_queue_obj->msgq_id - * to the node environment, after the node is created. - */ - if (msg_queue_obj) - msg_queue_obj->msgq_id = msgq_id; -} - -/* - * ======== add_new_msg ======== - * Must be called in message manager critical section. - */ -static int add_new_msg(struct list_head *msg_list) -{ - struct msg_frame *pmsg; - - pmsg = kzalloc(sizeof(struct msg_frame), GFP_ATOMIC); - if (!pmsg) - return -ENOMEM; - - list_add_tail(&pmsg->list_elem, msg_list); - - return 0; -} - -/* - * ======== delete_msg_mgr ======== - */ -static void delete_msg_mgr(struct msg_mgr *hmsg_mgr) -{ - if (!hmsg_mgr) - return; - - /* FIXME: free elements from queue_list? */ - free_msg_list(&hmsg_mgr->msg_free_list); - free_msg_list(&hmsg_mgr->msg_used_list); - kfree(hmsg_mgr->sync_event); - kfree(hmsg_mgr); -} - -/* - * ======== delete_msg_queue ======== - */ -static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp) -{ - struct msg_mgr *hmsg_mgr; - struct msg_frame *pmsg, *tmp; - u32 i; - - if (!msg_queue_obj || !msg_queue_obj->msg_mgr) - return; - - hmsg_mgr = msg_queue_obj->msg_mgr; - - /* Pull off num_to_dsp message frames from Msg manager and free */ - i = 0; - list_for_each_entry_safe(pmsg, tmp, &hmsg_mgr->msg_free_list, - list_elem) { - list_del(&pmsg->list_elem); - kfree(pmsg); - if (i++ >= num_to_dsp) - break; - } - - free_msg_list(&msg_queue_obj->msg_free_list); - free_msg_list(&msg_queue_obj->msg_used_list); - - if (msg_queue_obj->ntfy_obj) { - ntfy_delete(msg_queue_obj->ntfy_obj); - kfree(msg_queue_obj->ntfy_obj); - } - - kfree(msg_queue_obj->sync_event); - kfree(msg_queue_obj->sync_done); - kfree(msg_queue_obj->sync_done_ack); - - kfree(msg_queue_obj); -} - -/* - * ======== free_msg_list ======== - */ -static void free_msg_list(struct list_head *msg_list) -{ - struct msg_frame *pmsg, *tmp; - - if (!msg_list) - return; - - list_for_each_entry_safe(pmsg, tmp, msg_list, list_elem) { - list_del(&pmsg->list_elem); - kfree(pmsg); - } -} diff --git a/drivers/staging/tidspbridge/core/sync.c b/drivers/staging/tidspbridge/core/sync.c deleted file mode 100644 index 743ff09d82d2..000000000000 --- a/drivers/staging/tidspbridge/core/sync.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * sync.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Synchronization services. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- This */ -#include -#include - -DEFINE_SPINLOCK(sync_lock); - -/** - * sync_set_event() - set or signal and specified event - * @event: Event to be set.. - * - * set the @event, if there is an thread waiting for the event - * it will be waken up, this function only wakes one thread. - */ - -void sync_set_event(struct sync_object *event) -{ - spin_lock_bh(&sync_lock); - complete(&event->comp); - if (event->multi_comp) - complete(event->multi_comp); - spin_unlock_bh(&sync_lock); -} - -/** - * sync_wait_on_multiple_events() - waits for multiple events to be set. - * @events: Array of events to wait for them. - * @count: number of elements of the array. - * @timeout timeout on waiting for the evetns. - * @pu_index index of the event set. - * - * These functions will wait until any of the array element is set or until - * timeout. In case of success the function will return 0 and - * @pu_index will store the index of the array element set or in case - * of timeout the function will return -ETIME or in case of - * interrupting by a signal it will return -EPERM. - */ - -int sync_wait_on_multiple_events(struct sync_object **events, - unsigned count, unsigned timeout, - unsigned *index) -{ - unsigned i; - int status = -EPERM; - struct completion m_comp; - - init_completion(&m_comp); - - if (SYNC_INFINITE == timeout) - timeout = MAX_SCHEDULE_TIMEOUT; - - spin_lock_bh(&sync_lock); - for (i = 0; i < count; i++) { - if (completion_done(&events[i]->comp)) { - reinit_completion(&events[i]->comp); - *index = i; - spin_unlock_bh(&sync_lock); - status = 0; - goto func_end; - } - } - - for (i = 0; i < count; i++) - events[i]->multi_comp = &m_comp; - - spin_unlock_bh(&sync_lock); - - if (!wait_for_completion_interruptible_timeout(&m_comp, - msecs_to_jiffies(timeout))) - status = -ETIME; - - spin_lock_bh(&sync_lock); - for (i = 0; i < count; i++) { - if (completion_done(&events[i]->comp)) { - reinit_completion(&events[i]->comp); - *index = i; - status = 0; - } - events[i]->multi_comp = NULL; - } - spin_unlock_bh(&sync_lock); -func_end: - return status; -} - -/** - * dsp_notifier_event() - callback function to nofity events - * @this: pointer to itself struct notifier_block - * @event: event to be notified. - * @data: Currently not used. - * - */ -int dsp_notifier_event(struct notifier_block *this, unsigned long event, - void *data) -{ - struct ntfy_event *ne = container_of(this, struct ntfy_event, - noti_block); - if (ne->event & event) - sync_set_event(&ne->sync_obj); - return NOTIFY_OK; -} diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c deleted file mode 100644 index f63dd8f4dde9..000000000000 --- a/drivers/staging/tidspbridge/core/tiomap3430.c +++ /dev/null @@ -1,1815 +0,0 @@ -/* - * tiomap.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Processor Manager Driver for TI OMAP3430 EVM. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -#include -/* ----------------------------------- Host OS */ -#include -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include -#include - -/* ------------------------------------ Hardware Abstraction Layer */ -#include -#include - -/* ----------------------------------- Link Driver */ -#include -#include -#include -#include -#include -#include -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Local */ -#include "_tiomap.h" -#include "_tiomap_pwr.h" -#include "tiomap_io.h" - -/* Offset in shared mem to write to in order to synchronize start with DSP */ -#define SHMSYNCOFFSET 4 /* GPP byte offset */ - -#define BUFFERSIZE 1024 - -#define TIHELEN_ACKTIMEOUT 10000 - -#define MMU_SECTION_ADDR_MASK 0xFFF00000 -#define MMU_SSECTION_ADDR_MASK 0xFF000000 -#define MMU_LARGE_PAGE_MASK 0xFFFF0000 -#define MMU_SMALL_PAGE_MASK 0xFFFFF000 -#define OMAP3_IVA2_BOOTADDR_MASK 0xFFFFFC00 -#define PAGES_II_LVL_TABLE 512 -#define PHYS_TO_PAGE(phys) pfn_to_page((phys) >> PAGE_SHIFT) - -/* IVA Boot modes */ -#define DIRECT 0 -#define IDLE 1 - -/* Forward Declarations: */ -static int bridge_brd_monitor(struct bridge_dev_context *dev_ctxt); -static int bridge_brd_read(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, - u32 dsp_addr, u32 ul_num_bytes, - u32 mem_type); -static int bridge_brd_start(struct bridge_dev_context *dev_ctxt, - u32 dsp_addr); -static int bridge_brd_status(struct bridge_dev_context *dev_ctxt, - int *board_state); -static int bridge_brd_stop(struct bridge_dev_context *dev_ctxt); -static int bridge_brd_write(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, - u32 dsp_addr, u32 ul_num_bytes, - u32 mem_type); -static int bridge_brd_set_state(struct bridge_dev_context *dev_ctxt, - u32 brd_state); -static int bridge_brd_mem_copy(struct bridge_dev_context *dev_ctxt, - u32 dsp_dest_addr, u32 dsp_src_addr, - u32 ul_num_bytes, u32 mem_type); -static int bridge_brd_mem_write(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type); -static int bridge_brd_mem_map(struct bridge_dev_context *dev_ctxt, - u32 ul_mpu_addr, u32 virt_addr, - u32 ul_num_bytes, u32 ul_map_attr, - struct page **mapped_pages); -static int bridge_brd_mem_un_map(struct bridge_dev_context *dev_ctxt, - u32 virt_addr, u32 ul_num_bytes); -static int bridge_dev_create(struct bridge_dev_context - **dev_cntxt, - struct dev_object *hdev_obj, - struct cfg_hostres *config_param); -static int bridge_dev_ctrl(struct bridge_dev_context *dev_context, - u32 dw_cmd, void *pargs); -static int bridge_dev_destroy(struct bridge_dev_context *dev_ctxt); -static u32 user_va2_pa(struct mm_struct *mm, u32 address); -static int pte_update(struct bridge_dev_context *dev_ctxt, u32 pa, - u32 va, u32 size, - struct hw_mmu_map_attrs_t *map_attrs); -static int pte_set(struct pg_table_attrs *pt, u32 pa, u32 va, - u32 size, struct hw_mmu_map_attrs_t *attrs); -static int mem_map_vmalloc(struct bridge_dev_context *dev_context, - u32 ul_mpu_addr, u32 virt_addr, - u32 ul_num_bytes, - struct hw_mmu_map_attrs_t *hw_attrs); - -bool wait_for_start(struct bridge_dev_context *dev_context, - void __iomem *sync_addr); - -/* ----------------------------------- Globals */ - -/* Attributes of L2 page tables for DSP MMU */ -struct page_info { - u32 num_entries; /* Number of valid PTEs in the L2 PT */ -}; - -/* Attributes used to manage the DSP MMU page tables */ -struct pg_table_attrs { - spinlock_t pg_lock; /* Critical section object handle */ - - u32 l1_base_pa; /* Physical address of the L1 PT */ - u32 l1_base_va; /* Virtual address of the L1 PT */ - u32 l1_size; /* Size of the L1 PT */ - u32 l1_tbl_alloc_pa; - /* Physical address of Allocated mem for L1 table. May not be aligned */ - u32 l1_tbl_alloc_va; - /* Virtual address of Allocated mem for L1 table. May not be aligned */ - u32 l1_tbl_alloc_sz; - /* Size of consistent memory allocated for L1 table. - * May not be aligned */ - - u32 l2_base_pa; /* Physical address of the L2 PT */ - u32 l2_base_va; /* Virtual address of the L2 PT */ - u32 l2_size; /* Size of the L2 PT */ - u32 l2_tbl_alloc_pa; - /* Physical address of Allocated mem for L2 table. May not be aligned */ - u32 l2_tbl_alloc_va; - /* Virtual address of Allocated mem for L2 table. May not be aligned */ - u32 l2_tbl_alloc_sz; - /* Size of consistent memory allocated for L2 table. - * May not be aligned */ - - u32 l2_num_pages; /* Number of allocated L2 PT */ - /* Array [l2_num_pages] of L2 PT info structs */ - struct page_info *pg_info; -}; - -/* - * This Bridge driver's function interface table. - */ -static struct bridge_drv_interface drv_interface_fxns = { - /* Bridge API ver. for which this bridge driver is built. */ - BRD_API_MAJOR_VERSION, - BRD_API_MINOR_VERSION, - bridge_dev_create, - bridge_dev_destroy, - bridge_dev_ctrl, - bridge_brd_monitor, - bridge_brd_start, - bridge_brd_stop, - bridge_brd_status, - bridge_brd_read, - bridge_brd_write, - bridge_brd_set_state, - bridge_brd_mem_copy, - bridge_brd_mem_write, - bridge_brd_mem_map, - bridge_brd_mem_un_map, - /* The following CHNL functions are provided by chnl_io.lib: */ - bridge_chnl_create, - bridge_chnl_destroy, - bridge_chnl_open, - bridge_chnl_close, - bridge_chnl_add_io_req, - bridge_chnl_get_ioc, - bridge_chnl_cancel_io, - bridge_chnl_flush_io, - bridge_chnl_get_info, - bridge_chnl_get_mgr_info, - bridge_chnl_idle, - bridge_chnl_register_notify, - /* The following IO functions are provided by chnl_io.lib: */ - bridge_io_create, - bridge_io_destroy, - bridge_io_on_loaded, - bridge_io_get_proc_load, - /* The following msg_ctrl functions are provided by chnl_io.lib: */ - bridge_msg_create, - bridge_msg_create_queue, - bridge_msg_delete, - bridge_msg_delete_queue, - bridge_msg_get, - bridge_msg_put, - bridge_msg_register_notify, - bridge_msg_set_queue_id, -}; - -static struct notifier_block dsp_mbox_notifier = { - .notifier_call = io_mbox_msg, -}; - -static inline void flush_all(struct bridge_dev_context *dev_context) -{ - if (dev_context->brd_state == BRD_DSP_HIBERNATION || - dev_context->brd_state == BRD_HIBERNATION) - wake_dsp(dev_context, NULL); - - hw_mmu_tlb_flush_all(dev_context->dsp_mmu_base); -} - -static void bad_page_dump(u32 pa, struct page *pg) -{ - pr_emerg("DSPBRIDGE: MAP function: COUNT 0 FOR PA 0x%x\n", pa); - pr_emerg("Bad page state in process '%s'\n" - "page:%p flags:0x%0*lx mapping:%p mapcount:%d count:%d\n" - "Backtrace:\n", - current->comm, pg, (int)(2 * sizeof(unsigned long)), - (unsigned long)pg->flags, pg->mapping, - page_mapcount(pg), page_count(pg)); - dump_stack(); -} - -/* - * ======== bridge_drv_entry ======== - * purpose: - * Bridge Driver entry point. - */ -void bridge_drv_entry(struct bridge_drv_interface **drv_intf, - const char *driver_file_name) -{ - if (strcmp(driver_file_name, "UMA") == 0) - *drv_intf = &drv_interface_fxns; - else - dev_dbg(bridge, "%s Unknown Bridge file name", __func__); - -} - -/* - * ======== bridge_brd_monitor ======== - * purpose: - * This bridge_brd_monitor puts DSP into a Loadable state. - * i.e Application can load and start the device. - * - * Preconditions: - * Device in 'OFF' state. - */ -static int bridge_brd_monitor(struct bridge_dev_context *dev_ctxt) -{ - struct bridge_dev_context *dev_context = dev_ctxt; - u32 temp; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - temp = (*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, OMAP2_PM_PWSTST) & - OMAP_POWERSTATEST_MASK; - if (!(temp & 0x02)) { - /* IVA2 is not in ON state */ - /* Read and set PM_PWSTCTRL_IVA2 to ON */ - (*pdata->dsp_prm_rmw_bits)(OMAP_POWERSTATEST_MASK, - PWRDM_POWER_ON, OMAP3430_IVA2_MOD, OMAP2_PM_PWSTCTRL); - /* Set the SW supervised state transition */ - (*pdata->dsp_cm_write)(OMAP34XX_CLKSTCTRL_FORCE_WAKEUP, - OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL); - - /* Wait until the state has moved to ON */ - while ((*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, - OMAP2_PM_PWSTST) & - OMAP_INTRANSITION_MASK) - ; - /* Disable Automatic transition */ - (*pdata->dsp_cm_write)(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, - OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL); - } - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST2_IVA2_MASK, 0, - OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); - dsp_clk_enable(DSP_CLK_IVA2); - - /* set the device state to IDLE */ - dev_context->brd_state = BRD_IDLE; - - return 0; -} - -/* - * ======== bridge_brd_read ======== - * purpose: - * Reads buffers for DSP memory. - */ -static int bridge_brd_read(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - u32 offset; - u32 dsp_base_addr = dev_ctxt->dsp_base_addr; - - if (dsp_addr < dev_context->dsp_start_add) { - status = -EPERM; - return status; - } - /* change here to account for the 3 bands of the DSP internal memory */ - if ((dsp_addr - dev_context->dsp_start_add) < - dev_context->internal_size) { - offset = dsp_addr - dev_context->dsp_start_add; - } else { - status = read_ext_dsp_data(dev_context, host_buff, dsp_addr, - ul_num_bytes, mem_type); - return status; - } - /* copy the data from DSP memory */ - memcpy(host_buff, (void *)(dsp_base_addr + offset), ul_num_bytes); - return status; -} - -/* - * ======== bridge_brd_set_state ======== - * purpose: - * This routine updates the Board status. - */ -static int bridge_brd_set_state(struct bridge_dev_context *dev_ctxt, - u32 brd_state) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - - dev_context->brd_state = brd_state; - return status; -} - -/* - * ======== bridge_brd_start ======== - * purpose: - * Initializes DSP MMU and Starts DSP. - * - * Preconditions: - * a) DSP domain is 'ACTIVE'. - * b) DSP_RST1 is asserted. - * b) DSP_RST2 is released. - */ -static int bridge_brd_start(struct bridge_dev_context *dev_ctxt, - u32 dsp_addr) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - void __iomem *sync_addr; - u32 ul_shm_base; /* Gpp Phys SM base addr(byte) */ - u32 ul_shm_base_virt; /* Dsp Virt SM base addr */ - u32 ul_tlb_base_virt; /* Base of MMU TLB entry */ - u32 shm_sync_pa; - /* Offset of shm_base_virt from tlb_base_virt */ - u32 ul_shm_offset_virt; - s32 entry_ndx; - s32 itmp_entry_ndx = 0; /* DSP-MMU TLB entry base address */ - struct cfg_hostres *resources = NULL; - u32 temp; - u32 ul_dsp_clk_rate; - u32 ul_dsp_clk_addr; - u32 ul_bios_gp_timer; - u32 clk_cmd; - struct io_mgr *hio_mgr; - u32 ul_load_monitor_timer; - u32 wdt_en = 0; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - /* The device context contains all the mmu setup info from when the - * last dsp base image was loaded. The first entry is always - * SHMMEM base. */ - /* Get SHM_BEG - convert to byte address */ - (void)dev_get_symbol(dev_context->dev_obj, SHMBASENAME, - &ul_shm_base_virt); - ul_shm_base_virt *= DSPWORDSIZE; - /* DSP Virtual address */ - ul_tlb_base_virt = dev_context->atlb_entry[0].dsp_va; - ul_shm_offset_virt = - ul_shm_base_virt - (ul_tlb_base_virt * DSPWORDSIZE); - /* Kernel logical address */ - ul_shm_base = dev_context->atlb_entry[0].gpp_va + ul_shm_offset_virt; - - /* SHM physical sync address */ - shm_sync_pa = dev_context->atlb_entry[0].gpp_pa + ul_shm_offset_virt + - SHMSYNCOFFSET; - - /* 2nd wd is used as sync field */ - sync_addr = ioremap(shm_sync_pa, SZ_32); - if (!sync_addr) - return -ENOMEM; - - /* Write a signature into the shm base + offset; this will - * get cleared when the DSP program starts. */ - if ((ul_shm_base_virt == 0) || (ul_shm_base == 0)) { - pr_err("%s: Illegal SM base\n", __func__); - status = -EPERM; - } else - __raw_writel(0xffffffff, sync_addr); - - if (!status) { - resources = dev_context->resources; - if (!resources) - status = -EPERM; - - /* Assert RST1 i.e only the RST only for DSP megacell */ - if (!status) { - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST1_IVA2_MASK, - OMAP3430_RST1_IVA2_MASK, - OMAP3430_IVA2_MOD, - OMAP2_RM_RSTCTRL); - - /* Mask address with 1K for compatibility */ - pdata->set_bootaddr(dsp_addr & - OMAP3_IVA2_BOOTADDR_MASK); - pdata->set_bootmode(dsp_debug ? IDLE : DIRECT); - } - } - if (!status) { - /* Reset and Unreset the RST2, so that BOOTADDR is copied to - * IVA2 SYSC register */ - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST2_IVA2_MASK, - OMAP3430_RST2_IVA2_MASK, OMAP3430_IVA2_MOD, - OMAP2_RM_RSTCTRL); - udelay(100); - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST2_IVA2_MASK, 0, - OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); - udelay(100); - - /* Disbale the DSP MMU */ - hw_mmu_disable(resources->dmmu_base); - /* Disable TWL */ - hw_mmu_twl_disable(resources->dmmu_base); - - /* Only make TLB entry if both addresses are non-zero */ - for (entry_ndx = 0; entry_ndx < BRDIOCTL_NUMOFMMUTLB; - entry_ndx++) { - struct bridge_ioctl_extproc *e = - &dev_context->atlb_entry[entry_ndx]; - struct hw_mmu_map_attrs_t map_attrs = { - .endianism = e->endianism, - .element_size = e->elem_size, - .mixed_size = e->mixed_mode, - }; - - if (!e->gpp_pa || !e->dsp_va) - continue; - - dev_dbg(bridge, - "MMU %d, pa: 0x%x, va: 0x%x, size: 0x%x", - itmp_entry_ndx, - e->gpp_pa, - e->dsp_va, - e->size); - - hw_mmu_tlb_add(dev_context->dsp_mmu_base, - e->gpp_pa, - e->dsp_va, - e->size, - itmp_entry_ndx, - &map_attrs, 1, 1); - - itmp_entry_ndx++; - } - } - - /* Lock the above TLB entries and get the BIOS and load monitor timer - * information */ - if (!status) { - hw_mmu_num_locked_set(resources->dmmu_base, itmp_entry_ndx); - hw_mmu_victim_num_set(resources->dmmu_base, itmp_entry_ndx); - hw_mmu_ttb_set(resources->dmmu_base, - dev_context->pt_attrs->l1_base_pa); - hw_mmu_twl_enable(resources->dmmu_base); - /* Enable the SmartIdle and AutoIdle bit for MMU_SYSCONFIG */ - - temp = __raw_readl((resources->dmmu_base) + 0x10); - temp = (temp & 0xFFFFFFEF) | 0x11; - __raw_writel(temp, (resources->dmmu_base) + 0x10); - - /* Let the DSP MMU run */ - hw_mmu_enable(resources->dmmu_base); - - /* Enable the BIOS clock */ - (void)dev_get_symbol(dev_context->dev_obj, - BRIDGEINIT_BIOSGPTIMER, &ul_bios_gp_timer); - (void)dev_get_symbol(dev_context->dev_obj, - BRIDGEINIT_LOADMON_GPTIMER, - &ul_load_monitor_timer); - } - - if (!status) { - if (ul_load_monitor_timer != 0xFFFF) { - clk_cmd = (BPWR_ENABLE_CLOCK << MBX_PM_CLK_CMDSHIFT) | - ul_load_monitor_timer; - dsp_peripheral_clk_ctrl(dev_context, &clk_cmd); - } else { - dev_dbg(bridge, "Not able to get the symbol for Load " - "Monitor Timer\n"); - } - } - - if (!status) { - if (ul_bios_gp_timer != 0xFFFF) { - clk_cmd = (BPWR_ENABLE_CLOCK << MBX_PM_CLK_CMDSHIFT) | - ul_bios_gp_timer; - dsp_peripheral_clk_ctrl(dev_context, &clk_cmd); - } else { - dev_dbg(bridge, - "Not able to get the symbol for BIOS Timer\n"); - } - } - - if (!status) { - /* Set the DSP clock rate */ - (void)dev_get_symbol(dev_context->dev_obj, - "_BRIDGEINIT_DSP_FREQ", &ul_dsp_clk_addr); - /*Set Autoidle Mode for IVA2 PLL */ - (*pdata->dsp_cm_write)(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT, - OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL); - - if ((unsigned int *)ul_dsp_clk_addr != NULL) { - /* Get the clock rate */ - ul_dsp_clk_rate = dsp_clk_get_iva2_rate(); - dev_dbg(bridge, "%s: DSP clock rate (KHZ): 0x%x \n", - __func__, ul_dsp_clk_rate); - (void)bridge_brd_write(dev_context, - (u8 *) &ul_dsp_clk_rate, - ul_dsp_clk_addr, sizeof(u32), 0); - } - /* - * Enable Mailbox events and also drain any pending - * stale messages. - */ - dev_context->mbox = omap_mbox_get("dsp", &dsp_mbox_notifier); - if (IS_ERR(dev_context->mbox)) { - dev_context->mbox = NULL; - pr_err("%s: Failed to get dsp mailbox handle\n", - __func__); - status = -EPERM; - } - - } - if (!status) { -/*PM_IVA2GRPSEL_PER = 0xC0;*/ - temp = readl(resources->per_pm_base + 0xA8); - temp = (temp & 0xFFFFFF30) | 0xC0; - writel(temp, resources->per_pm_base + 0xA8); - -/*PM_MPUGRPSEL_PER &= 0xFFFFFF3F; */ - temp = readl(resources->per_pm_base + 0xA4); - temp = (temp & 0xFFFFFF3F); - writel(temp, resources->per_pm_base + 0xA4); -/*CM_SLEEPDEP_PER |= 0x04; */ - temp = readl(resources->per_base + 0x44); - temp = (temp & 0xFFFFFFFB) | 0x04; - writel(temp, resources->per_base + 0x44); - -/*CM_CLKSTCTRL_IVA2 = 0x00000003 -To Allow automatic transitions */ - (*pdata->dsp_cm_write)(OMAP34XX_CLKSTCTRL_ENABLE_AUTO, - OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL); - - /* Let DSP go */ - dev_dbg(bridge, "%s Unreset\n", __func__); - /* Enable DSP MMU Interrupts */ - hw_mmu_event_enable(resources->dmmu_base, - HW_MMU_ALL_INTERRUPTS); - /* release the RST1, DSP starts executing now .. */ - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST1_IVA2_MASK, 0, - OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); - - dev_dbg(bridge, "Waiting for Sync @ 0x%x\n", *(u32 *)sync_addr); - dev_dbg(bridge, "DSP c_int00 Address = 0x%x\n", dsp_addr); - if (dsp_debug) - while (__raw_readw(sync_addr)) - ; - - /* Wait for DSP to clear word in shared memory */ - /* Read the Location */ - if (!wait_for_start(dev_context, sync_addr)) - status = -ETIMEDOUT; - - dev_get_symbol(dev_context->dev_obj, "_WDT_enable", &wdt_en); - if (wdt_en) { - /* Start wdt */ - dsp_wdt_sm_set((void *)ul_shm_base); - dsp_wdt_enable(true); - } - - status = dev_get_io_mgr(dev_context->dev_obj, &hio_mgr); - if (hio_mgr) { - io_sh_msetting(hio_mgr, SHM_OPPINFO, NULL); - /* Write the synchronization bit to indicate the - * completion of OPP table update to DSP - */ - __raw_writel(0XCAFECAFE, sync_addr); - - /* update board state */ - dev_context->brd_state = BRD_RUNNING; - /* (void)chnlsm_enable_interrupt(dev_context); */ - } else { - dev_context->brd_state = BRD_UNKNOWN; - } - } - - iounmap(sync_addr); - - return status; -} - -/* - * ======== bridge_brd_stop ======== - * purpose: - * Puts DSP in self loop. - * - * Preconditions : - * a) None - */ -static int bridge_brd_stop(struct bridge_dev_context *dev_ctxt) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - struct pg_table_attrs *pt_attrs; - u32 dsp_pwr_state; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - if (dev_context->brd_state == BRD_STOPPED) - return status; - - /* as per TRM, it is advised to first drive the IVA2 to 'Standby' mode, - * before turning off the clocks.. This is to ensure that there are no - * pending L3 or other transactons from IVA2 */ - dsp_pwr_state = (*pdata->dsp_prm_read) - (OMAP3430_IVA2_MOD, OMAP2_PM_PWSTST) & OMAP_POWERSTATEST_MASK; - if (dsp_pwr_state != PWRDM_POWER_OFF) { - (*pdata->dsp_prm_rmw_bits)(OMAP3430_RST2_IVA2_MASK, 0, - OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); - sm_interrupt_dsp(dev_context, MBX_PM_DSPIDLE); - mdelay(10); - - /* IVA2 is not in OFF state */ - /* Set PM_PWSTCTRL_IVA2 to OFF */ - (*pdata->dsp_prm_rmw_bits)(OMAP_POWERSTATEST_MASK, - PWRDM_POWER_OFF, OMAP3430_IVA2_MOD, OMAP2_PM_PWSTCTRL); - /* Set the SW supervised state transition for Sleep */ - (*pdata->dsp_cm_write)(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, - OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL); - } - udelay(10); - /* Release the Ext Base virtual Address as the next DSP Program - * may have a different load address */ - if (dev_context->dsp_ext_base_addr) - dev_context->dsp_ext_base_addr = 0; - - dev_context->brd_state = BRD_STOPPED; /* update board state */ - - dsp_wdt_enable(false); - - /* This is a good place to clear the MMU page tables as well */ - if (dev_context->pt_attrs) { - pt_attrs = dev_context->pt_attrs; - memset((u8 *) pt_attrs->l1_base_va, 0x00, pt_attrs->l1_size); - memset((u8 *) pt_attrs->l2_base_va, 0x00, pt_attrs->l2_size); - memset((u8 *) pt_attrs->pg_info, 0x00, - (pt_attrs->l2_num_pages * sizeof(struct page_info))); - } - /* Disable the mailbox interrupts */ - if (dev_context->mbox) { - omap_mbox_disable_irq(dev_context->mbox, IRQ_RX); - omap_mbox_put(dev_context->mbox, &dsp_mbox_notifier); - dev_context->mbox = NULL; - } - /* Reset IVA2 clocks*/ - (*pdata->dsp_prm_write)(OMAP3430_RST1_IVA2_MASK | - OMAP3430_RST2_IVA2_MASK | OMAP3430_RST3_IVA2_MASK, - OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); - - dsp_clock_disable_all(dev_context->dsp_per_clks); - dsp_clk_disable(DSP_CLK_IVA2); - - return status; -} - -/* - * ======== bridge_brd_status ======== - * Returns the board status. - */ -static int bridge_brd_status(struct bridge_dev_context *dev_ctxt, - int *board_state) -{ - struct bridge_dev_context *dev_context = dev_ctxt; - *board_state = dev_context->brd_state; - return 0; -} - -/* - * ======== bridge_brd_write ======== - * Copies the buffers to DSP internal or external memory. - */ -static int bridge_brd_write(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - - if (dsp_addr < dev_context->dsp_start_add) { - status = -EPERM; - return status; - } - if ((dsp_addr - dev_context->dsp_start_add) < - dev_context->internal_size) { - status = write_dsp_data(dev_ctxt, host_buff, dsp_addr, - ul_num_bytes, mem_type); - } else { - status = write_ext_dsp_data(dev_context, host_buff, dsp_addr, - ul_num_bytes, mem_type, false); - } - - return status; -} - -/* - * ======== bridge_dev_create ======== - * Creates a driver object. Puts DSP in self loop. - */ -static int bridge_dev_create(struct bridge_dev_context - **dev_cntxt, - struct dev_object *hdev_obj, - struct cfg_hostres *config_param) -{ - int status = 0; - struct bridge_dev_context *dev_context = NULL; - s32 entry_ndx; - struct cfg_hostres *resources = config_param; - struct pg_table_attrs *pt_attrs; - u32 pg_tbl_pa; - u32 pg_tbl_va; - u32 align_size; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* Allocate and initialize a data structure to contain the bridge driver - * state, which becomes the context for later calls into this driver */ - dev_context = kzalloc(sizeof(struct bridge_dev_context), GFP_KERNEL); - if (!dev_context) { - status = -ENOMEM; - goto func_end; - } - - dev_context->dsp_start_add = (u32) OMAP_GEM_BASE; - dev_context->self_loop = (u32) NULL; - dev_context->dsp_per_clks = 0; - dev_context->internal_size = OMAP_DSP_SIZE; - /* Clear dev context MMU table entries. - * These get set on bridge_io_on_loaded() call after program loaded. */ - for (entry_ndx = 0; entry_ndx < BRDIOCTL_NUMOFMMUTLB; entry_ndx++) { - dev_context->atlb_entry[entry_ndx].gpp_pa = - dev_context->atlb_entry[entry_ndx].dsp_va = 0; - } - dev_context->dsp_base_addr = (u32) MEM_LINEAR_ADDRESS((void *) - (config_param-> - mem_base - [3]), - config_param-> - mem_length - [3]); - if (!dev_context->dsp_base_addr) - status = -EPERM; - - pt_attrs = kzalloc(sizeof(struct pg_table_attrs), GFP_KERNEL); - if (pt_attrs != NULL) { - pt_attrs->l1_size = SZ_16K; /* 4096 entries of 32 bits */ - align_size = pt_attrs->l1_size; - /* Align sizes are expected to be power of 2 */ - /* we like to get aligned on L1 table size */ - pg_tbl_va = (u32) mem_alloc_phys_mem(pt_attrs->l1_size, - align_size, &pg_tbl_pa); - - /* Check if the PA is aligned for us */ - if ((pg_tbl_pa) & (align_size - 1)) { - /* PA not aligned to page table size , - * try with more allocation and align */ - mem_free_phys_mem((void *)pg_tbl_va, pg_tbl_pa, - pt_attrs->l1_size); - /* we like to get aligned on L1 table size */ - pg_tbl_va = - (u32) mem_alloc_phys_mem((pt_attrs->l1_size) * 2, - align_size, &pg_tbl_pa); - /* We should be able to get aligned table now */ - pt_attrs->l1_tbl_alloc_pa = pg_tbl_pa; - pt_attrs->l1_tbl_alloc_va = pg_tbl_va; - pt_attrs->l1_tbl_alloc_sz = pt_attrs->l1_size * 2; - /* Align the PA to the next 'align' boundary */ - pt_attrs->l1_base_pa = - ((pg_tbl_pa) + - (align_size - 1)) & (~(align_size - 1)); - pt_attrs->l1_base_va = - pg_tbl_va + (pt_attrs->l1_base_pa - pg_tbl_pa); - } else { - /* We got aligned PA, cool */ - pt_attrs->l1_tbl_alloc_pa = pg_tbl_pa; - pt_attrs->l1_tbl_alloc_va = pg_tbl_va; - pt_attrs->l1_tbl_alloc_sz = pt_attrs->l1_size; - pt_attrs->l1_base_pa = pg_tbl_pa; - pt_attrs->l1_base_va = pg_tbl_va; - } - if (pt_attrs->l1_base_va) - memset((u8 *) pt_attrs->l1_base_va, 0x00, - pt_attrs->l1_size); - - /* number of L2 page tables = DMM pool used + SHMMEM +EXTMEM + - * L4 pages */ - pt_attrs->l2_num_pages = ((DMMPOOLSIZE >> 20) + 6); - pt_attrs->l2_size = HW_MMU_COARSE_PAGE_SIZE * - pt_attrs->l2_num_pages; - align_size = 4; /* Make it u32 aligned */ - /* we like to get aligned on L1 table size */ - pg_tbl_va = (u32) mem_alloc_phys_mem(pt_attrs->l2_size, - align_size, &pg_tbl_pa); - pt_attrs->l2_tbl_alloc_pa = pg_tbl_pa; - pt_attrs->l2_tbl_alloc_va = pg_tbl_va; - pt_attrs->l2_tbl_alloc_sz = pt_attrs->l2_size; - pt_attrs->l2_base_pa = pg_tbl_pa; - pt_attrs->l2_base_va = pg_tbl_va; - - if (pt_attrs->l2_base_va) - memset((u8 *) pt_attrs->l2_base_va, 0x00, - pt_attrs->l2_size); - - pt_attrs->pg_info = kzalloc(pt_attrs->l2_num_pages * - sizeof(struct page_info), GFP_KERNEL); - dev_dbg(bridge, - "L1 pa %x, va %x, size %x\n L2 pa %x, va " - "%x, size %x\n", pt_attrs->l1_base_pa, - pt_attrs->l1_base_va, pt_attrs->l1_size, - pt_attrs->l2_base_pa, pt_attrs->l2_base_va, - pt_attrs->l2_size); - dev_dbg(bridge, "pt_attrs %p L2 NumPages %x pg_info %p\n", - pt_attrs, pt_attrs->l2_num_pages, pt_attrs->pg_info); - } - if ((pt_attrs != NULL) && (pt_attrs->l1_base_va != 0) && - (pt_attrs->l2_base_va != 0) && (pt_attrs->pg_info != NULL)) - dev_context->pt_attrs = pt_attrs; - else - status = -ENOMEM; - - if (!status) { - spin_lock_init(&pt_attrs->pg_lock); - dev_context->tc_word_swap_on = drv_datap->tc_wordswapon; - - /* Set the Clock Divisor for the DSP module */ - udelay(5); - /* MMU address is obtained from the host - * resources struct */ - dev_context->dsp_mmu_base = resources->dmmu_base; - } - if (!status) { - dev_context->dev_obj = hdev_obj; - /* Store current board state. */ - dev_context->brd_state = BRD_UNKNOWN; - dev_context->resources = resources; - dsp_clk_enable(DSP_CLK_IVA2); - bridge_brd_stop(dev_context); - /* Return ptr to our device state to the DSP API for storage */ - *dev_cntxt = dev_context; - } else { - if (pt_attrs != NULL) { - kfree(pt_attrs->pg_info); - - if (pt_attrs->l2_tbl_alloc_va) { - mem_free_phys_mem((void *) - pt_attrs->l2_tbl_alloc_va, - pt_attrs->l2_tbl_alloc_pa, - pt_attrs->l2_tbl_alloc_sz); - } - if (pt_attrs->l1_tbl_alloc_va) { - mem_free_phys_mem((void *) - pt_attrs->l1_tbl_alloc_va, - pt_attrs->l1_tbl_alloc_pa, - pt_attrs->l1_tbl_alloc_sz); - } - } - kfree(pt_attrs); - kfree(dev_context); - } -func_end: - return status; -} - -/* - * ======== bridge_dev_ctrl ======== - * Receives device specific commands. - */ -static int bridge_dev_ctrl(struct bridge_dev_context *dev_context, - u32 dw_cmd, void *pargs) -{ - int status = 0; - struct bridge_ioctl_extproc *pa_ext_proc = - (struct bridge_ioctl_extproc *)pargs; - s32 ndx; - - switch (dw_cmd) { - case BRDIOCTL_CHNLREAD: - break; - case BRDIOCTL_CHNLWRITE: - break; - case BRDIOCTL_SETMMUCONFIG: - /* store away dsp-mmu setup values for later use */ - for (ndx = 0; ndx < BRDIOCTL_NUMOFMMUTLB; ndx++, pa_ext_proc++) - dev_context->atlb_entry[ndx] = *pa_ext_proc; - break; - case BRDIOCTL_DEEPSLEEP: - case BRDIOCTL_EMERGENCYSLEEP: - /* Currently only DSP Idle is supported Need to update for - * later releases */ - status = sleep_dsp(dev_context, PWR_DEEPSLEEP, pargs); - break; - case BRDIOCTL_WAKEUP: - status = wake_dsp(dev_context, pargs); - break; - case BRDIOCTL_CLK_CTRL: - status = 0; - /* Looking For Baseport Fix for Clocks */ - status = dsp_peripheral_clk_ctrl(dev_context, pargs); - break; - case BRDIOCTL_PWR_HIBERNATE: - status = handle_hibernation_from_dsp(dev_context); - break; - case BRDIOCTL_PRESCALE_NOTIFY: - status = pre_scale_dsp(dev_context, pargs); - break; - case BRDIOCTL_POSTSCALE_NOTIFY: - status = post_scale_dsp(dev_context, pargs); - break; - case BRDIOCTL_CONSTRAINT_REQUEST: - status = handle_constraints_set(dev_context, pargs); - break; - default: - status = -EPERM; - break; - } - return status; -} - -/* - * ======== bridge_dev_destroy ======== - * Destroys the driver object. - */ -static int bridge_dev_destroy(struct bridge_dev_context *dev_ctxt) -{ - struct pg_table_attrs *pt_attrs; - int status = 0; - struct bridge_dev_context *dev_context = (struct bridge_dev_context *) - dev_ctxt; - struct cfg_hostres *host_res; - u32 shm_size; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* It should never happen */ - if (!dev_ctxt) - return -EFAULT; - - /* first put the device to stop state */ - bridge_brd_stop(dev_context); - if (dev_context->pt_attrs) { - pt_attrs = dev_context->pt_attrs; - kfree(pt_attrs->pg_info); - - if (pt_attrs->l2_tbl_alloc_va) { - mem_free_phys_mem((void *)pt_attrs->l2_tbl_alloc_va, - pt_attrs->l2_tbl_alloc_pa, - pt_attrs->l2_tbl_alloc_sz); - } - if (pt_attrs->l1_tbl_alloc_va) { - mem_free_phys_mem((void *)pt_attrs->l1_tbl_alloc_va, - pt_attrs->l1_tbl_alloc_pa, - pt_attrs->l1_tbl_alloc_sz); - } - kfree(pt_attrs); - - } - - if (dev_context->resources) { - host_res = dev_context->resources; - shm_size = drv_datap->shm_size; - if (shm_size >= 0x10000) { - if ((host_res->mem_base[1]) && - (host_res->mem_phys[1])) { - mem_free_phys_mem((void *) - host_res->mem_base - [1], - host_res->mem_phys - [1], shm_size); - } - } else { - dev_dbg(bridge, "%s: Error getting shm size " - "from registry: %x. Not calling " - "mem_free_phys_mem\n", __func__, - status); - } - host_res->mem_base[1] = 0; - host_res->mem_phys[1] = 0; - - if (host_res->mem_base[0]) - iounmap((void *)host_res->mem_base[0]); - if (host_res->mem_base[2]) - iounmap((void *)host_res->mem_base[2]); - if (host_res->mem_base[3]) - iounmap((void *)host_res->mem_base[3]); - if (host_res->mem_base[4]) - iounmap((void *)host_res->mem_base[4]); - if (host_res->dmmu_base) - iounmap(host_res->dmmu_base); - if (host_res->per_base) - iounmap(host_res->per_base); - if (host_res->per_pm_base) - iounmap((void *)host_res->per_pm_base); - if (host_res->core_pm_base) - iounmap((void *)host_res->core_pm_base); - - host_res->mem_base[0] = (u32) NULL; - host_res->mem_base[2] = (u32) NULL; - host_res->mem_base[3] = (u32) NULL; - host_res->mem_base[4] = (u32) NULL; - host_res->dmmu_base = NULL; - - kfree(host_res); - } - - /* Free the driver's device context: */ - kfree(drv_datap->base_img); - kfree((void *)dev_ctxt); - return status; -} - -static int bridge_brd_mem_copy(struct bridge_dev_context *dev_ctxt, - u32 dsp_dest_addr, u32 dsp_src_addr, - u32 ul_num_bytes, u32 mem_type) -{ - int status = 0; - u32 src_addr = dsp_src_addr; - u32 dest_addr = dsp_dest_addr; - u32 copy_bytes = 0; - u32 total_bytes = ul_num_bytes; - u8 host_buf[BUFFERSIZE]; - struct bridge_dev_context *dev_context = dev_ctxt; - - while (total_bytes > 0 && !status) { - copy_bytes = - total_bytes > BUFFERSIZE ? BUFFERSIZE : total_bytes; - /* Read from External memory */ - status = read_ext_dsp_data(dev_ctxt, host_buf, src_addr, - copy_bytes, mem_type); - if (!status) { - if (dest_addr < (dev_context->dsp_start_add + - dev_context->internal_size)) { - /* Write to Internal memory */ - status = write_dsp_data(dev_ctxt, host_buf, - dest_addr, copy_bytes, - mem_type); - } else { - /* Write to External memory */ - status = - write_ext_dsp_data(dev_ctxt, host_buf, - dest_addr, copy_bytes, - mem_type, false); - } - } - total_bytes -= copy_bytes; - src_addr += copy_bytes; - dest_addr += copy_bytes; - } - return status; -} - -/* Mem Write does not halt the DSP to write unlike bridge_brd_write */ -static int bridge_brd_mem_write(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - u32 ul_remain_bytes = 0; - u32 ul_bytes = 0; - - ul_remain_bytes = ul_num_bytes; - while (ul_remain_bytes > 0 && !status) { - ul_bytes = - ul_remain_bytes > BUFFERSIZE ? BUFFERSIZE : ul_remain_bytes; - if (dsp_addr < (dev_context->dsp_start_add + - dev_context->internal_size)) { - status = - write_dsp_data(dev_ctxt, host_buff, dsp_addr, - ul_bytes, mem_type); - } else { - status = write_ext_dsp_data(dev_ctxt, host_buff, - dsp_addr, ul_bytes, - mem_type, true); - } - ul_remain_bytes -= ul_bytes; - dsp_addr += ul_bytes; - host_buff = host_buff + ul_bytes; - } - return status; -} - -/* - * ======== bridge_brd_mem_map ======== - * This function maps MPU buffer to the DSP address space. It performs - * linear to physical address translation if required. It translates each - * page since linear addresses can be physically non-contiguous - * All address & size arguments are assumed to be page aligned (in proc.c) - * - * TODO: Disable MMU while updating the page tables (but that'll stall DSP) - */ -static int bridge_brd_mem_map(struct bridge_dev_context *dev_ctxt, - u32 ul_mpu_addr, u32 virt_addr, - u32 ul_num_bytes, u32 ul_map_attr, - struct page **mapped_pages) -{ - u32 attrs; - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - struct hw_mmu_map_attrs_t hw_attrs; - struct vm_area_struct *vma; - struct mm_struct *mm = current->mm; - u32 write = 0; - u32 num_usr_pgs = 0; - struct page *mapped_page, *pg; - s32 pg_num; - u32 va = virt_addr; - struct task_struct *curr_task = current; - u32 pg_i = 0; - u32 mpu_addr, pa; - - dev_dbg(bridge, - "%s hDevCtxt %p, pa %x, va %x, size %x, ul_map_attr %x\n", - __func__, dev_ctxt, ul_mpu_addr, virt_addr, ul_num_bytes, - ul_map_attr); - if (ul_num_bytes == 0) - return -EINVAL; - - if (ul_map_attr & DSP_MAP_DIR_MASK) { - attrs = ul_map_attr; - } else { - /* Assign default attributes */ - attrs = ul_map_attr | (DSP_MAPVIRTUALADDR | DSP_MAPELEMSIZE16); - } - /* Take mapping properties */ - if (attrs & DSP_MAPBIGENDIAN) - hw_attrs.endianism = HW_BIG_ENDIAN; - else - hw_attrs.endianism = HW_LITTLE_ENDIAN; - - hw_attrs.mixed_size = (enum hw_mmu_mixed_size_t) - ((attrs & DSP_MAPMIXEDELEMSIZE) >> 2); - /* Ignore element_size if mixed_size is enabled */ - if (hw_attrs.mixed_size == 0) { - if (attrs & DSP_MAPELEMSIZE8) { - /* Size is 8 bit */ - hw_attrs.element_size = HW_ELEM_SIZE8BIT; - } else if (attrs & DSP_MAPELEMSIZE16) { - /* Size is 16 bit */ - hw_attrs.element_size = HW_ELEM_SIZE16BIT; - } else if (attrs & DSP_MAPELEMSIZE32) { - /* Size is 32 bit */ - hw_attrs.element_size = HW_ELEM_SIZE32BIT; - } else if (attrs & DSP_MAPELEMSIZE64) { - /* Size is 64 bit */ - hw_attrs.element_size = HW_ELEM_SIZE64BIT; - } else { - /* - * Mixedsize isn't enabled, so size can't be - * zero here - */ - return -EINVAL; - } - } - if (attrs & DSP_MAPDONOTLOCK) - hw_attrs.donotlockmpupage = 1; - else - hw_attrs.donotlockmpupage = 0; - - if (attrs & DSP_MAPVMALLOCADDR) { - return mem_map_vmalloc(dev_ctxt, ul_mpu_addr, virt_addr, - ul_num_bytes, &hw_attrs); - } - /* - * Do OS-specific user-va to pa translation. - * Combine physically contiguous regions to reduce TLBs. - * Pass the translated pa to pte_update. - */ - if ((attrs & DSP_MAPPHYSICALADDR)) { - status = pte_update(dev_context, ul_mpu_addr, virt_addr, - ul_num_bytes, &hw_attrs); - goto func_cont; - } - - /* - * Important Note: ul_mpu_addr is mapped from user application process - * to current process - it must lie completely within the current - * virtual memory address space in order to be of use to us here! - */ - down_read(&mm->mmap_sem); - vma = find_vma(mm, ul_mpu_addr); - if (vma) - dev_dbg(bridge, - "VMAfor UserBuf: ul_mpu_addr=%x, ul_num_bytes=%x, " - "vm_start=%lx, vm_end=%lx, vm_flags=%lx\n", ul_mpu_addr, - ul_num_bytes, vma->vm_start, vma->vm_end, - vma->vm_flags); - - /* - * It is observed that under some circumstances, the user buffer is - * spread across several VMAs. So loop through and check if the entire - * user buffer is covered - */ - while ((vma) && (ul_mpu_addr + ul_num_bytes > vma->vm_end)) { - /* jump to the next VMA region */ - vma = find_vma(mm, vma->vm_end + 1); - dev_dbg(bridge, - "VMA for UserBuf ul_mpu_addr=%x ul_num_bytes=%x, " - "vm_start=%lx, vm_end=%lx, vm_flags=%lx\n", ul_mpu_addr, - ul_num_bytes, vma->vm_start, vma->vm_end, - vma->vm_flags); - } - if (!vma) { - pr_err("%s: Failed to get VMA region for 0x%x (%d)\n", - __func__, ul_mpu_addr, ul_num_bytes); - status = -EINVAL; - up_read(&mm->mmap_sem); - goto func_cont; - } - - if (vma->vm_flags & VM_IO) { - num_usr_pgs = ul_num_bytes / PG_SIZE4K; - mpu_addr = ul_mpu_addr; - - /* Get the physical addresses for user buffer */ - for (pg_i = 0; pg_i < num_usr_pgs; pg_i++) { - pa = user_va2_pa(mm, mpu_addr); - if (!pa) { - status = -EPERM; - pr_err("DSPBRIDGE: VM_IO mapping physical" - "address is invalid\n"); - break; - } - if (pfn_valid(__phys_to_pfn(pa))) { - pg = PHYS_TO_PAGE(pa); - get_page(pg); - if (page_count(pg) < 1) { - pr_err("Bad page in VM_IO buffer\n"); - bad_page_dump(pa, pg); - } - } - status = pte_set(dev_context->pt_attrs, pa, - va, HW_PAGE_SIZE4KB, &hw_attrs); - if (status) - break; - - va += HW_PAGE_SIZE4KB; - mpu_addr += HW_PAGE_SIZE4KB; - pa += HW_PAGE_SIZE4KB; - } - } else { - num_usr_pgs = ul_num_bytes / PG_SIZE4K; - if (vma->vm_flags & (VM_WRITE | VM_MAYWRITE)) - write = 1; - - for (pg_i = 0; pg_i < num_usr_pgs; pg_i++) { - pg_num = get_user_pages(curr_task, mm, ul_mpu_addr, 1, - write, 1, &mapped_page, NULL); - if (pg_num > 0) { - if (page_count(mapped_page) < 1) { - pr_err("Bad page count after doing" - "get_user_pages on" - "user buffer\n"); - bad_page_dump(page_to_phys(mapped_page), - mapped_page); - } - status = pte_set(dev_context->pt_attrs, - page_to_phys(mapped_page), va, - HW_PAGE_SIZE4KB, &hw_attrs); - if (status) - break; - - if (mapped_pages) - mapped_pages[pg_i] = mapped_page; - - va += HW_PAGE_SIZE4KB; - ul_mpu_addr += HW_PAGE_SIZE4KB; - } else { - pr_err("DSPBRIDGE: get_user_pages FAILED," - "MPU addr = 0x%x," - "vma->vm_flags = 0x%lx," - "get_user_pages Err" - "Value = %d, Buffer" - "size=0x%x\n", ul_mpu_addr, - vma->vm_flags, pg_num, ul_num_bytes); - status = -EPERM; - break; - } - } - } - up_read(&mm->mmap_sem); -func_cont: - if (status) { - /* - * Roll out the mapped pages incase it failed in middle of - * mapping - */ - if (pg_i) { - bridge_brd_mem_un_map(dev_context, virt_addr, - (pg_i * PG_SIZE4K)); - } - status = -EPERM; - } - /* - * In any case, flush the TLB - * This is called from here instead from pte_update to avoid unnecessary - * repetition while mapping non-contiguous physical regions of a virtual - * region - */ - flush_all(dev_context); - dev_dbg(bridge, "%s status %x\n", __func__, status); - return status; -} - -/* - * ======== bridge_brd_mem_un_map ======== - * Invalidate the PTEs for the DSP VA block to be unmapped. - * - * PTEs of a mapped memory block are contiguous in any page table - * So, instead of looking up the PTE address for every 4K block, - * we clear consecutive PTEs until we unmap all the bytes - */ -static int bridge_brd_mem_un_map(struct bridge_dev_context *dev_ctxt, - u32 virt_addr, u32 ul_num_bytes) -{ - u32 l1_base_va; - u32 l2_base_va; - u32 l2_base_pa; - u32 l2_page_num; - u32 pte_val; - u32 pte_size; - u32 pte_count; - u32 pte_addr_l1; - u32 pte_addr_l2 = 0; - u32 rem_bytes; - u32 rem_bytes_l2; - u32 va_curr; - struct page *pg = NULL; - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - struct pg_table_attrs *pt = dev_context->pt_attrs; - u32 temp; - u32 paddr; - u32 numof4k_pages = 0; - - va_curr = virt_addr; - rem_bytes = ul_num_bytes; - rem_bytes_l2 = 0; - l1_base_va = pt->l1_base_va; - pte_addr_l1 = hw_mmu_pte_addr_l1(l1_base_va, va_curr); - dev_dbg(bridge, "%s dev_ctxt %p, va %x, NumBytes %x l1_base_va %x, " - "pte_addr_l1 %x\n", __func__, dev_ctxt, virt_addr, - ul_num_bytes, l1_base_va, pte_addr_l1); - - while (rem_bytes && !status) { - u32 va_curr_orig = va_curr; - /* Find whether the L1 PTE points to a valid L2 PT */ - pte_addr_l1 = hw_mmu_pte_addr_l1(l1_base_va, va_curr); - pte_val = *(u32 *) pte_addr_l1; - pte_size = hw_mmu_pte_size_l1(pte_val); - - if (pte_size != HW_MMU_COARSE_PAGE_SIZE) - goto skip_coarse_page; - - /* - * Get the L2 PA from the L1 PTE, and find - * corresponding L2 VA - */ - l2_base_pa = hw_mmu_pte_coarse_l1(pte_val); - l2_base_va = l2_base_pa - pt->l2_base_pa + pt->l2_base_va; - l2_page_num = - (l2_base_pa - pt->l2_base_pa) / HW_MMU_COARSE_PAGE_SIZE; - /* - * Find the L2 PTE address from which we will start - * clearing, the number of PTEs to be cleared on this - * page, and the size of VA space that needs to be - * cleared on this L2 page - */ - pte_addr_l2 = hw_mmu_pte_addr_l2(l2_base_va, va_curr); - pte_count = pte_addr_l2 & (HW_MMU_COARSE_PAGE_SIZE - 1); - pte_count = (HW_MMU_COARSE_PAGE_SIZE - pte_count) / sizeof(u32); - if (rem_bytes < (pte_count * PG_SIZE4K)) - pte_count = rem_bytes / PG_SIZE4K; - rem_bytes_l2 = pte_count * PG_SIZE4K; - - /* - * Unmap the VA space on this L2 PT. A quicker way - * would be to clear pte_count entries starting from - * pte_addr_l2. However, below code checks that we don't - * clear invalid entries or less than 64KB for a 64KB - * entry. Similar checking is done for L1 PTEs too - * below - */ - while (rem_bytes_l2 && !status) { - pte_val = *(u32 *) pte_addr_l2; - pte_size = hw_mmu_pte_size_l2(pte_val); - /* va_curr aligned to pte_size? */ - if (pte_size == 0 || rem_bytes_l2 < pte_size || - va_curr & (pte_size - 1)) { - status = -EPERM; - break; - } - - /* Collect Physical addresses from VA */ - paddr = (pte_val & ~(pte_size - 1)); - if (pte_size == HW_PAGE_SIZE64KB) - numof4k_pages = 16; - else - numof4k_pages = 1; - temp = 0; - while (temp++ < numof4k_pages) { - if (!pfn_valid(__phys_to_pfn(paddr))) { - paddr += HW_PAGE_SIZE4KB; - continue; - } - pg = PHYS_TO_PAGE(paddr); - if (page_count(pg) < 1) { - pr_info("DSPBRIDGE: UNMAP function: " - "COUNT 0 FOR PA 0x%x, size = " - "0x%x\n", paddr, ul_num_bytes); - bad_page_dump(paddr, pg); - } else { - set_page_dirty(pg); - page_cache_release(pg); - } - paddr += HW_PAGE_SIZE4KB; - } - if (hw_mmu_pte_clear(pte_addr_l2, va_curr, pte_size)) { - status = -EPERM; - goto EXIT_LOOP; - } - - status = 0; - rem_bytes_l2 -= pte_size; - va_curr += pte_size; - pte_addr_l2 += (pte_size >> 12) * sizeof(u32); - } - spin_lock(&pt->pg_lock); - if (rem_bytes_l2 == 0) { - pt->pg_info[l2_page_num].num_entries -= pte_count; - if (pt->pg_info[l2_page_num].num_entries == 0) { - /* - * Clear the L1 PTE pointing to the L2 PT - */ - if (!hw_mmu_pte_clear(l1_base_va, va_curr_orig, - HW_MMU_COARSE_PAGE_SIZE)) - status = 0; - else { - status = -EPERM; - spin_unlock(&pt->pg_lock); - goto EXIT_LOOP; - } - } - rem_bytes -= pte_count * PG_SIZE4K; - } else - status = -EPERM; - - spin_unlock(&pt->pg_lock); - continue; -skip_coarse_page: - /* va_curr aligned to pte_size? */ - /* pte_size = 1 MB or 16 MB */ - if (pte_size == 0 || rem_bytes < pte_size || - va_curr & (pte_size - 1)) { - status = -EPERM; - break; - } - - if (pte_size == HW_PAGE_SIZE1MB) - numof4k_pages = 256; - else - numof4k_pages = 4096; - temp = 0; - /* Collect Physical addresses from VA */ - paddr = (pte_val & ~(pte_size - 1)); - while (temp++ < numof4k_pages) { - if (pfn_valid(__phys_to_pfn(paddr))) { - pg = PHYS_TO_PAGE(paddr); - if (page_count(pg) < 1) { - pr_info("DSPBRIDGE: UNMAP function: " - "COUNT 0 FOR PA 0x%x, size = " - "0x%x\n", paddr, ul_num_bytes); - bad_page_dump(paddr, pg); - } else { - set_page_dirty(pg); - page_cache_release(pg); - } - } - paddr += HW_PAGE_SIZE4KB; - } - if (!hw_mmu_pte_clear(l1_base_va, va_curr, pte_size)) { - status = 0; - rem_bytes -= pte_size; - va_curr += pte_size; - } else { - status = -EPERM; - goto EXIT_LOOP; - } - } - /* - * It is better to flush the TLB here, so that any stale old entries - * get flushed - */ -EXIT_LOOP: - flush_all(dev_context); - dev_dbg(bridge, - "%s: va_curr %x, pte_addr_l1 %x pte_addr_l2 %x rem_bytes %x," - " rem_bytes_l2 %x status %x\n", __func__, va_curr, pte_addr_l1, - pte_addr_l2, rem_bytes, rem_bytes_l2, status); - return status; -} - -/* - * ======== user_va2_pa ======== - * Purpose: - * This function walks through the page tables to convert a userland - * virtual address to physical address - */ -static u32 user_va2_pa(struct mm_struct *mm, u32 address) -{ - pgd_t *pgd; - pud_t *pud; - pmd_t *pmd; - pte_t *ptep, pte; - - pgd = pgd_offset(mm, address); - if (pgd_none(*pgd) || pgd_bad(*pgd)) - return 0; - - pud = pud_offset(pgd, address); - if (pud_none(*pud) || pud_bad(*pud)) - return 0; - - pmd = pmd_offset(pud, address); - if (pmd_none(*pmd) || pmd_bad(*pmd)) - return 0; - - ptep = pte_offset_map(pmd, address); - if (ptep) { - pte = *ptep; - if (pte_present(pte)) - return pte & PAGE_MASK; - } - - return 0; -} - -/* - * ======== pte_update ======== - * This function calculates the optimum page-aligned addresses and sizes - * Caller must pass page-aligned values - */ -static int pte_update(struct bridge_dev_context *dev_ctxt, u32 pa, - u32 va, u32 size, - struct hw_mmu_map_attrs_t *map_attrs) -{ - u32 i; - u32 all_bits; - u32 pa_curr = pa; - u32 va_curr = va; - u32 num_bytes = size; - struct bridge_dev_context *dev_context = dev_ctxt; - int status = 0; - u32 page_size[] = { HW_PAGE_SIZE16MB, HW_PAGE_SIZE1MB, - HW_PAGE_SIZE64KB, HW_PAGE_SIZE4KB - }; - - while (num_bytes && !status) { - /* To find the max. page size with which both PA & VA are - * aligned */ - all_bits = pa_curr | va_curr; - - for (i = 0; i < 4; i++) { - if ((num_bytes >= page_size[i]) && ((all_bits & - (page_size[i] - - 1)) == 0)) { - status = - pte_set(dev_context->pt_attrs, pa_curr, - va_curr, page_size[i], map_attrs); - pa_curr += page_size[i]; - va_curr += page_size[i]; - num_bytes -= page_size[i]; - /* Don't try smaller sizes. Hopefully we have - * reached an address aligned to a bigger page - * size */ - break; - } - } - } - - return status; -} - -/* - * ======== pte_set ======== - * This function calculates PTE address (MPU virtual) to be updated - * It also manages the L2 page tables - */ -static int pte_set(struct pg_table_attrs *pt, u32 pa, u32 va, - u32 size, struct hw_mmu_map_attrs_t *attrs) -{ - u32 i; - u32 pte_val; - u32 pte_addr_l1; - u32 pte_size; - /* Base address of the PT that will be updated */ - u32 pg_tbl_va; - u32 l1_base_va; - /* Compiler warns that the next three variables might be used - * uninitialized in this function. Doesn't seem so. Working around, - * anyways. */ - u32 l2_base_va = 0; - u32 l2_base_pa = 0; - u32 l2_page_num = 0; - int status = 0; - - l1_base_va = pt->l1_base_va; - pg_tbl_va = l1_base_va; - if ((size == HW_PAGE_SIZE64KB) || (size == HW_PAGE_SIZE4KB)) { - /* Find whether the L1 PTE points to a valid L2 PT */ - pte_addr_l1 = hw_mmu_pte_addr_l1(l1_base_va, va); - if (pte_addr_l1 <= (pt->l1_base_va + pt->l1_size)) { - pte_val = *(u32 *) pte_addr_l1; - pte_size = hw_mmu_pte_size_l1(pte_val); - } else { - return -EPERM; - } - spin_lock(&pt->pg_lock); - if (pte_size == HW_MMU_COARSE_PAGE_SIZE) { - /* Get the L2 PA from the L1 PTE, and find - * corresponding L2 VA */ - l2_base_pa = hw_mmu_pte_coarse_l1(pte_val); - l2_base_va = - l2_base_pa - pt->l2_base_pa + pt->l2_base_va; - l2_page_num = - (l2_base_pa - - pt->l2_base_pa) / HW_MMU_COARSE_PAGE_SIZE; - } else if (pte_size == 0) { - /* L1 PTE is invalid. Allocate a L2 PT and - * point the L1 PTE to it */ - /* Find a free L2 PT. */ - for (i = 0; (i < pt->l2_num_pages) && - (pt->pg_info[i].num_entries != 0); i++) - ; - if (i < pt->l2_num_pages) { - l2_page_num = i; - l2_base_pa = pt->l2_base_pa + (l2_page_num * - HW_MMU_COARSE_PAGE_SIZE); - l2_base_va = pt->l2_base_va + (l2_page_num * - HW_MMU_COARSE_PAGE_SIZE); - /* Endianness attributes are ignored for - * HW_MMU_COARSE_PAGE_SIZE */ - status = - hw_mmu_pte_set(l1_base_va, l2_base_pa, va, - HW_MMU_COARSE_PAGE_SIZE, - attrs); - } else { - status = -ENOMEM; - } - } else { - /* Found valid L1 PTE of another size. - * Should not overwrite it. */ - status = -EPERM; - } - if (!status) { - pg_tbl_va = l2_base_va; - if (size == HW_PAGE_SIZE64KB) - pt->pg_info[l2_page_num].num_entries += 16; - else - pt->pg_info[l2_page_num].num_entries++; - dev_dbg(bridge, "PTE: L2 BaseVa %x, BasePa %x, PageNum " - "%x, num_entries %x\n", l2_base_va, - l2_base_pa, l2_page_num, - pt->pg_info[l2_page_num].num_entries); - } - spin_unlock(&pt->pg_lock); - } - if (!status) { - dev_dbg(bridge, "PTE: pg_tbl_va %x, pa %x, va %x, size %x\n", - pg_tbl_va, pa, va, size); - dev_dbg(bridge, "PTE: endianism %x, element_size %x, " - "mixed_size %x\n", attrs->endianism, - attrs->element_size, attrs->mixed_size); - status = hw_mmu_pte_set(pg_tbl_va, pa, va, size, attrs); - } - - return status; -} - -/* Memory map kernel VA -- memory allocated with vmalloc */ -static int mem_map_vmalloc(struct bridge_dev_context *dev_context, - u32 ul_mpu_addr, u32 virt_addr, - u32 ul_num_bytes, - struct hw_mmu_map_attrs_t *hw_attrs) -{ - int status = 0; - struct page *page[1]; - u32 i; - u32 pa_curr; - u32 pa_next; - u32 va_curr; - u32 size_curr; - u32 num_pages; - u32 pa; - u32 num_of4k_pages; - u32 temp = 0; - - /* - * Do Kernel va to pa translation. - * Combine physically contiguous regions to reduce TLBs. - * Pass the translated pa to pte_update. - */ - num_pages = ul_num_bytes / PAGE_SIZE; /* PAGE_SIZE = OS page size */ - i = 0; - va_curr = ul_mpu_addr; - page[0] = vmalloc_to_page((void *)va_curr); - pa_next = page_to_phys(page[0]); - while (!status && (i < num_pages)) { - /* - * Reuse pa_next from the previous iteration to avoid - * an extra va2pa call - */ - pa_curr = pa_next; - size_curr = PAGE_SIZE; - /* - * If the next page is physically contiguous, - * map it with the current one by increasing - * the size of the region to be mapped - */ - while (++i < num_pages) { - page[0] = - vmalloc_to_page((void *)(va_curr + size_curr)); - pa_next = page_to_phys(page[0]); - - if (pa_next == (pa_curr + size_curr)) - size_curr += PAGE_SIZE; - else - break; - - } - if (pa_next == 0) { - status = -ENOMEM; - break; - } - pa = pa_curr; - num_of4k_pages = size_curr / HW_PAGE_SIZE4KB; - while (temp++ < num_of4k_pages) { - get_page(PHYS_TO_PAGE(pa)); - pa += HW_PAGE_SIZE4KB; - } - status = pte_update(dev_context, pa_curr, virt_addr + - (va_curr - ul_mpu_addr), size_curr, - hw_attrs); - va_curr += size_curr; - } - /* - * In any case, flush the TLB - * This is called from here instead from pte_update to avoid unnecessary - * repetition while mapping non-contiguous physical regions of a virtual - * region - */ - flush_all(dev_context); - dev_dbg(bridge, "%s status %x\n", __func__, status); - return status; -} - -/* - * ======== wait_for_start ======== - * Wait for the singal from DSP that it has started, or time out. - */ -bool wait_for_start(struct bridge_dev_context *dev_context, - void __iomem *sync_addr) -{ - u16 timeout = TIHELEN_ACKTIMEOUT; - - /* Wait for response from board */ - while (__raw_readw(sync_addr) && --timeout) - udelay(10); - - /* If timed out: return false */ - if (!timeout) { - pr_err("%s: Timed out waiting DSP to Start\n", __func__); - return false; - } - return true; -} diff --git a/drivers/staging/tidspbridge/core/tiomap3430_pwr.c b/drivers/staging/tidspbridge/core/tiomap3430_pwr.c deleted file mode 100644 index 657104f37f7d..000000000000 --- a/drivers/staging/tidspbridge/core/tiomap3430_pwr.c +++ /dev/null @@ -1,556 +0,0 @@ -/* - * tiomap_pwr.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implementation of DSP wake/sleep routines. - * - * Copyright (C) 2007-2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* ----------------------------------- Host OS */ -#include - -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include -#include -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include - -/* ------------------------------------ Hardware Abstraction Layer */ -#include -#include - -#include - -/* ----------------------------------- Bridge Driver */ -#include -#include - -/* ----------------------------------- specific to this file */ -#include "_tiomap.h" -#include "_tiomap_pwr.h" -#include -#include - -#define PWRSTST_TIMEOUT 200 - -/* - * ======== handle_constraints_set ======== - * Sets new DSP constraint - */ -int handle_constraints_set(struct bridge_dev_context *dev_context, - void *pargs) -{ -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 *constraint_val; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - constraint_val = (u32 *) (pargs); - /* Read the target value requested by DSP */ - dev_dbg(bridge, "OPP: %s opp requested = 0x%x\n", __func__, - (u32) *(constraint_val + 1)); - - /* Set the new opp value */ - if (pdata->dsp_set_min_opp) - (*pdata->dsp_set_min_opp) ((u32) *(constraint_val + 1)); -#endif /* #ifdef CONFIG_TIDSPBRIDGE_DVFS */ - return 0; -} - -/* - * ======== handle_hibernation_from_dsp ======== - * Handle Hibernation requested from DSP - */ -int handle_hibernation_from_dsp(struct bridge_dev_context *dev_context) -{ - int status = 0; -#ifdef CONFIG_PM - u16 timeout = PWRSTST_TIMEOUT / 10; - u32 pwr_state; -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 opplevel; - struct io_mgr *hio_mgr; -#endif - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - pwr_state = (*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, OMAP2_PM_PWSTST) & - OMAP_POWERSTATEST_MASK; - /* Wait for DSP to move into OFF state */ - while ((pwr_state != PWRDM_POWER_OFF) && --timeout) { - if (msleep_interruptible(10)) { - pr_err("Waiting for DSP OFF mode interrupted\n"); - return -EPERM; - } - pwr_state = (*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, - OMAP2_PM_PWSTST) & - OMAP_POWERSTATEST_MASK; - } - if (timeout == 0) { - pr_err("%s: Timed out waiting for DSP off mode\n", __func__); - status = -ETIMEDOUT; - return status; - } else { - - /* Save mailbox settings */ - omap_mbox_save_ctx(dev_context->mbox); - - /* Turn off DSP Peripheral clocks and DSP Load monitor timer */ - status = dsp_clock_disable_all(dev_context->dsp_per_clks); - - /* Disable wdt on hibernation. */ - dsp_wdt_enable(false); - - if (!status) { - /* Update the Bridger Driver state */ - dev_context->brd_state = BRD_DSP_HIBERNATION; -#ifdef CONFIG_TIDSPBRIDGE_DVFS - status = - dev_get_io_mgr(dev_context->dev_obj, &hio_mgr); - if (!hio_mgr) { - status = DSP_EHANDLE; - return status; - } - io_sh_msetting(hio_mgr, SHM_GETOPP, &opplevel); - - /* - * Set the OPP to low level before moving to OFF - * mode - */ - if (pdata->dsp_set_min_opp) - (*pdata->dsp_set_min_opp) (VDD1_OPP1); - status = 0; -#endif /* CONFIG_TIDSPBRIDGE_DVFS */ - } - } -#endif - return status; -} - -/* - * ======== sleep_dsp ======== - * Put DSP in low power consuming state. - */ -int sleep_dsp(struct bridge_dev_context *dev_context, u32 dw_cmd, - void *pargs) -{ - int status = 0; -#ifdef CONFIG_PM -#ifdef CONFIG_TIDSPBRIDGE_NTFY_PWRERR - struct deh_mgr *hdeh_mgr; -#endif /* CONFIG_TIDSPBRIDGE_NTFY_PWRERR */ - u16 timeout = PWRSTST_TIMEOUT / 10; - u32 pwr_state, target_pwr_state; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - /* Check if sleep code is valid */ - if ((dw_cmd != PWR_DEEPSLEEP) && (dw_cmd != PWR_EMERGENCYDEEPSLEEP)) - return -EINVAL; - - switch (dev_context->brd_state) { - case BRD_RUNNING: - omap_mbox_save_ctx(dev_context->mbox); - if (dsp_test_sleepstate == PWRDM_POWER_OFF) { - sm_interrupt_dsp(dev_context, MBX_PM_DSPHIBERNATE); - dev_dbg(bridge, "PM: %s - sent hibernate cmd to DSP\n", - __func__); - target_pwr_state = PWRDM_POWER_OFF; - } else { - sm_interrupt_dsp(dev_context, MBX_PM_DSPRETENTION); - target_pwr_state = PWRDM_POWER_RET; - } - break; - case BRD_RETENTION: - omap_mbox_save_ctx(dev_context->mbox); - if (dsp_test_sleepstate == PWRDM_POWER_OFF) { - sm_interrupt_dsp(dev_context, MBX_PM_DSPHIBERNATE); - target_pwr_state = PWRDM_POWER_OFF; - } else - return 0; - break; - case BRD_HIBERNATION: - case BRD_DSP_HIBERNATION: - /* Already in Hibernation, so just return */ - dev_dbg(bridge, "PM: %s - DSP already in hibernation\n", - __func__); - return 0; - case BRD_STOPPED: - dev_dbg(bridge, "PM: %s - Board in STOP state\n", __func__); - return 0; - default: - dev_dbg(bridge, "PM: %s - Bridge in Illegal state\n", __func__); - return -EPERM; - } - - /* Get the PRCM DSP power domain status */ - pwr_state = (*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, OMAP2_PM_PWSTST) & - OMAP_POWERSTATEST_MASK; - - /* Wait for DSP to move into target power state */ - while ((pwr_state != target_pwr_state) && --timeout) { - if (msleep_interruptible(10)) { - pr_err("Waiting for DSP to Suspend interrupted\n"); - return -EPERM; - } - pwr_state = (*pdata->dsp_prm_read)(OMAP3430_IVA2_MOD, - OMAP2_PM_PWSTST) & - OMAP_POWERSTATEST_MASK; - } - - if (!timeout) { - pr_err("%s: Timed out waiting for DSP off mode, state %x\n", - __func__, pwr_state); -#ifdef CONFIG_TIDSPBRIDGE_NTFY_PWRERR - dev_get_deh_mgr(dev_context->dev_obj, &hdeh_mgr); - bridge_deh_notify(hdeh_mgr, DSP_PWRERROR, 0); -#endif /* CONFIG_TIDSPBRIDGE_NTFY_PWRERR */ - return -ETIMEDOUT; - } else { - /* Update the Bridger Driver state */ - if (dsp_test_sleepstate == PWRDM_POWER_OFF) - dev_context->brd_state = BRD_HIBERNATION; - else - dev_context->brd_state = BRD_RETENTION; - - /* Disable wdt on hibernation. */ - dsp_wdt_enable(false); - - /* Turn off DSP Peripheral clocks */ - status = dsp_clock_disable_all(dev_context->dsp_per_clks); - if (status) - return status; -#ifdef CONFIG_TIDSPBRIDGE_DVFS - else if (target_pwr_state == PWRDM_POWER_OFF) { - /* - * Set the OPP to low level before moving to OFF mode - */ - if (pdata->dsp_set_min_opp) - (*pdata->dsp_set_min_opp) (VDD1_OPP1); - } -#endif /* CONFIG_TIDSPBRIDGE_DVFS */ - } -#endif /* CONFIG_PM */ - return status; -} - -/* - * ======== wake_dsp ======== - * Wake up DSP from sleep. - */ -int wake_dsp(struct bridge_dev_context *dev_context, void *pargs) -{ - int status = 0; -#ifdef CONFIG_PM - - /* Check the board state, if it is not 'SLEEP' then return */ - if (dev_context->brd_state == BRD_RUNNING || - dev_context->brd_state == BRD_STOPPED) { - /* The Device is in 'RET' or 'OFF' state and Bridge state is not - * 'SLEEP', this means state inconsistency, so return */ - return 0; - } - - /* Send a wakeup message to DSP */ - sm_interrupt_dsp(dev_context, MBX_PM_DSPWAKEUP); - - /* Set the device state to RUNNIG */ - dev_context->brd_state = BRD_RUNNING; -#endif /* CONFIG_PM */ - return status; -} - -/* - * ======== dsp_peripheral_clk_ctrl ======== - * Enable/Disable the DSP peripheral clocks as needed.. - */ -int dsp_peripheral_clk_ctrl(struct bridge_dev_context *dev_context, - void *pargs) -{ - u32 ext_clk = 0; - u32 ext_clk_id = 0; - u32 ext_clk_cmd = 0; - u32 clk_id_index = MBX_PM_MAX_RESOURCES; - u32 tmp_index; - u32 dsp_per_clks_before; - int status = 0; - - dsp_per_clks_before = dev_context->dsp_per_clks; - - ext_clk = (u32) *((u32 *) pargs); - ext_clk_id = ext_clk & MBX_PM_CLK_IDMASK; - - /* process the power message -- TODO, keep it in a separate function */ - for (tmp_index = 0; tmp_index < MBX_PM_MAX_RESOURCES; tmp_index++) { - if (ext_clk_id == bpwr_clkid[tmp_index]) { - clk_id_index = tmp_index; - break; - } - } - /* TODO -- Assert may be a too hard restriction here.. May be we should - * just return with failure when the CLK ID does not match */ - if (clk_id_index == MBX_PM_MAX_RESOURCES) { - /* return with a more meaningfull error code */ - return -EPERM; - } - ext_clk_cmd = (ext_clk >> MBX_PM_CLK_CMDSHIFT) & MBX_PM_CLK_CMDMASK; - switch (ext_clk_cmd) { - case BPWR_DISABLE_CLOCK: - status = dsp_clk_disable(bpwr_clks[clk_id_index].clk); - dsp_clk_wakeup_event_ctrl(bpwr_clks[clk_id_index].clk_id, - false); - if (!status) { - (dev_context->dsp_per_clks) &= - (~((u32) (1 << bpwr_clks[clk_id_index].clk))); - } - break; - case BPWR_ENABLE_CLOCK: - status = dsp_clk_enable(bpwr_clks[clk_id_index].clk); - dsp_clk_wakeup_event_ctrl(bpwr_clks[clk_id_index].clk_id, true); - if (!status) - (dev_context->dsp_per_clks) |= - (1 << bpwr_clks[clk_id_index].clk); - break; - default: - dev_dbg(bridge, "%s: Unsupported CMD\n", __func__); - /* unsupported cmd */ - /* TODO -- provide support for AUTOIDLE Enable/Disable - * commands */ - } - return status; -} - -/* - * ========pre_scale_dsp======== - * Sends prescale notification to DSP - * - */ -int pre_scale_dsp(struct bridge_dev_context *dev_context, void *pargs) -{ -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 level; - u32 voltage_domain; - - voltage_domain = *((u32 *) pargs); - level = *((u32 *) pargs + 1); - - dev_dbg(bridge, "OPP: %s voltage_domain = %x, level = 0x%x\n", - __func__, voltage_domain, level); - if ((dev_context->brd_state == BRD_HIBERNATION) || - (dev_context->brd_state == BRD_RETENTION) || - (dev_context->brd_state == BRD_DSP_HIBERNATION)) { - dev_dbg(bridge, "OPP: %s IVA in sleep. No message to DSP\n"); - return 0; - } else if (dev_context->brd_state == BRD_RUNNING) { - /* Send a prenotification to DSP */ - dev_dbg(bridge, "OPP: %s sent notification to DSP\n", __func__); - sm_interrupt_dsp(dev_context, MBX_PM_SETPOINT_PRENOTIFY); - return 0; - } else { - return -EPERM; - } -#endif /* #ifdef CONFIG_TIDSPBRIDGE_DVFS */ - return 0; -} - -/* - * ========post_scale_dsp======== - * Sends postscale notification to DSP - * - */ -int post_scale_dsp(struct bridge_dev_context *dev_context, - void *pargs) -{ - int status = 0; -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 level; - u32 voltage_domain; - struct io_mgr *hio_mgr; - - status = dev_get_io_mgr(dev_context->dev_obj, &hio_mgr); - if (!hio_mgr) - return -EFAULT; - - voltage_domain = *((u32 *) pargs); - level = *((u32 *) pargs + 1); - dev_dbg(bridge, "OPP: %s voltage_domain = %x, level = 0x%x\n", - __func__, voltage_domain, level); - if ((dev_context->brd_state == BRD_HIBERNATION) || - (dev_context->brd_state == BRD_RETENTION) || - (dev_context->brd_state == BRD_DSP_HIBERNATION)) { - /* Update the OPP value in shared memory */ - io_sh_msetting(hio_mgr, SHM_CURROPP, &level); - dev_dbg(bridge, "OPP: %s IVA in sleep. Wrote to shm\n", - __func__); - } else if (dev_context->brd_state == BRD_RUNNING) { - /* Update the OPP value in shared memory */ - io_sh_msetting(hio_mgr, SHM_CURROPP, &level); - /* Send a post notification to DSP */ - sm_interrupt_dsp(dev_context, MBX_PM_SETPOINT_POSTNOTIFY); - dev_dbg(bridge, - "OPP: %s wrote to shm. Sent post notification to DSP\n", - __func__); - } else { - status = -EPERM; - } -#endif /* #ifdef CONFIG_TIDSPBRIDGE_DVFS */ - return status; -} - -void dsp_clk_wakeup_event_ctrl(u32 clock_id, bool enable) -{ - struct cfg_hostres *resources; - int status = 0; - u32 iva2_grpsel; - u32 mpu_grpsel; - struct dev_object *hdev_object = NULL; - struct bridge_dev_context *bridge_context = NULL; - - hdev_object = (struct dev_object *)drv_get_first_dev_object(); - if (!hdev_object) - return; - - status = dev_get_bridge_context(hdev_object, &bridge_context); - if (!bridge_context) - return; - - resources = bridge_context->resources; - if (!resources) - return; - - switch (clock_id) { - case BPWR_GP_TIMER5: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_GPT5_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_GPT5_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_GPT5_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_GPT5_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_GP_TIMER6: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_GPT6_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_GPT6_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_GPT6_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_GPT6_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_GP_TIMER7: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_GPT7_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_GPT7_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_GPT7_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_GPT7_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_GP_TIMER8: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_GPT8_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_GPT8_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_GPT8_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_GPT8_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_MCBSP1: - iva2_grpsel = readl(resources->core_pm_base + 0xA8); - mpu_grpsel = readl(resources->core_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_MCBSP1_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_MCBSP1_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_MCBSP1_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_MCBSP1_MASK; - } - writel(iva2_grpsel, resources->core_pm_base + 0xA8); - writel(mpu_grpsel, resources->core_pm_base + 0xA4); - break; - case BPWR_MCBSP2: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_MCBSP2_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_MCBSP2_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_MCBSP2_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_MCBSP2_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_MCBSP3: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_MCBSP3_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_MCBSP3_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_MCBSP3_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_MCBSP3_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_MCBSP4: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_MCBSP4_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_MCBSP4_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_MCBSP4_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_MCBSP4_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - case BPWR_MCBSP5: - iva2_grpsel = readl(resources->per_pm_base + 0xA8); - mpu_grpsel = readl(resources->per_pm_base + 0xA4); - if (enable) { - iva2_grpsel |= OMAP3430_GRPSEL_MCBSP5_MASK; - mpu_grpsel &= ~OMAP3430_GRPSEL_MCBSP5_MASK; - } else { - mpu_grpsel |= OMAP3430_GRPSEL_MCBSP5_MASK; - iva2_grpsel &= ~OMAP3430_GRPSEL_MCBSP5_MASK; - } - writel(iva2_grpsel, resources->per_pm_base + 0xA8); - writel(mpu_grpsel, resources->per_pm_base + 0xA4); - break; - } -} diff --git a/drivers/staging/tidspbridge/core/tiomap_io.c b/drivers/staging/tidspbridge/core/tiomap_io.c deleted file mode 100644 index 28364672c7f8..000000000000 --- a/drivers/staging/tidspbridge/core/tiomap_io.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * tiomap_io.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implementation for the io read/write routines. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- specific to this file */ -#include "_tiomap.h" -#include "_tiomap_pwr.h" -#include "tiomap_io.h" - -static u32 ul_ext_base; -static u32 ul_ext_end; - -static u32 shm0_end; -static u32 ul_dyn_ext_base; -static u32 ul_trace_sec_beg; -static u32 ul_trace_sec_end; -static u32 ul_shm_base_virt; - -bool symbols_reloaded = true; - -/* - * ======== read_ext_dsp_data ======== - * Copies DSP external memory buffers to the host side buffers. - */ -int read_ext_dsp_data(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type) -{ - int status = 0; - struct bridge_dev_context *dev_context = dev_ctxt; - u32 offset; - u32 ul_tlb_base_virt = 0; - u32 ul_shm_offset_virt = 0; - u32 dw_ext_prog_virt_mem; - u32 dw_base_addr = dev_context->dsp_ext_base_addr; - bool trace_read = false; - - if (!ul_shm_base_virt) { - status = dev_get_symbol(dev_context->dev_obj, - SHMBASENAME, &ul_shm_base_virt); - } - - /* Check if it is a read of Trace section */ - if (!status && !ul_trace_sec_beg) { - status = dev_get_symbol(dev_context->dev_obj, - DSP_TRACESEC_BEG, &ul_trace_sec_beg); - } - - if (!status && !ul_trace_sec_end) { - status = dev_get_symbol(dev_context->dev_obj, - DSP_TRACESEC_END, &ul_trace_sec_end); - } - - if (!status) { - if ((dsp_addr <= ul_trace_sec_end) && - (dsp_addr >= ul_trace_sec_beg)) - trace_read = true; - } - - /* If reading from TRACE, force remap/unmap */ - if (trace_read && dw_base_addr) { - dw_base_addr = 0; - dev_context->dsp_ext_base_addr = 0; - } - - if (!dw_base_addr) { - /* Initialize ul_ext_base and ul_ext_end */ - ul_ext_base = 0; - ul_ext_end = 0; - - /* Get DYNEXT_BEG, EXT_BEG and EXT_END. */ - if (!status && !ul_dyn_ext_base) { - status = dev_get_symbol(dev_context->dev_obj, - DYNEXTBASE, &ul_dyn_ext_base); - } - - if (!status) { - status = dev_get_symbol(dev_context->dev_obj, - EXTBASE, &ul_ext_base); - } - - if (!status) { - status = dev_get_symbol(dev_context->dev_obj, - EXTEND, &ul_ext_end); - } - - /* Trace buffer is right after the shm SEG0, - * so set the base address to SHMBASE */ - if (trace_read) { - ul_ext_base = ul_shm_base_virt; - ul_ext_end = ul_trace_sec_end; - } - - - if (ul_ext_end < ul_ext_base) - status = -EPERM; - - if (!status) { - ul_tlb_base_virt = - dev_context->atlb_entry[0].dsp_va * DSPWORDSIZE; - dw_ext_prog_virt_mem = - dev_context->atlb_entry[0].gpp_va; - - if (!trace_read) { - ul_shm_offset_virt = - ul_shm_base_virt - ul_tlb_base_virt; - ul_shm_offset_virt += - PG_ALIGN_HIGH(ul_ext_end - ul_dyn_ext_base + - 1, HW_PAGE_SIZE64KB); - dw_ext_prog_virt_mem -= ul_shm_offset_virt; - dw_ext_prog_virt_mem += - (ul_ext_base - ul_dyn_ext_base); - dev_context->dsp_ext_base_addr = - dw_ext_prog_virt_mem; - - /* - * This dsp_ext_base_addr will get cleared - * only when the board is stopped. - */ - if (!dev_context->dsp_ext_base_addr) - status = -EPERM; - } - - dw_base_addr = dw_ext_prog_virt_mem; - } - } - - if (!dw_base_addr || !ul_ext_base || !ul_ext_end) - status = -EPERM; - - offset = dsp_addr - ul_ext_base; - - if (!status) - memcpy(host_buff, (u8 *) dw_base_addr + offset, ul_num_bytes); - - return status; -} - -/* - * ======== write_dsp_data ======== - * purpose: - * Copies buffers to the DSP internal/external memory. - */ -int write_dsp_data(struct bridge_dev_context *dev_context, - u8 *host_buff, u32 dsp_addr, u32 ul_num_bytes, - u32 mem_type) -{ - u32 offset; - u32 dw_base_addr = dev_context->dsp_base_addr; - struct cfg_hostres *resources = dev_context->resources; - int status = 0; - u32 base1, base2, base3; - - base1 = OMAP_DSP_MEM1_SIZE; - base2 = OMAP_DSP_MEM2_BASE - OMAP_DSP_MEM1_BASE; - base3 = OMAP_DSP_MEM3_BASE - OMAP_DSP_MEM1_BASE; - - if (!resources) - return -EPERM; - - offset = dsp_addr - dev_context->dsp_start_add; - if (offset < base1) { - dw_base_addr = MEM_LINEAR_ADDRESS(resources->mem_base[2], - resources->mem_length[2]); - } else if (offset > base1 && offset < base2 + OMAP_DSP_MEM2_SIZE) { - dw_base_addr = MEM_LINEAR_ADDRESS(resources->mem_base[3], - resources->mem_length[3]); - offset = offset - base2; - } else if (offset >= base2 + OMAP_DSP_MEM2_SIZE && - offset < base3 + OMAP_DSP_MEM3_SIZE) { - dw_base_addr = MEM_LINEAR_ADDRESS(resources->mem_base[4], - resources->mem_length[4]); - offset = offset - base3; - } else { - return -EPERM; - } - if (ul_num_bytes) - memcpy((u8 *) (dw_base_addr + offset), host_buff, ul_num_bytes); - else - *((u32 *) host_buff) = dw_base_addr + offset; - - return status; -} - -/* - * ======== write_ext_dsp_data ======== - * purpose: - * Copies buffers to the external memory. - * - */ -int write_ext_dsp_data(struct bridge_dev_context *dev_context, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type, - bool dynamic_load) -{ - u32 dw_base_addr = dev_context->dsp_ext_base_addr; - u32 dw_offset = 0; - u8 temp_byte1, temp_byte2; - u8 remain_byte[4]; - s32 i; - int ret = 0; - u32 dw_ext_prog_virt_mem; - u32 ul_tlb_base_virt = 0; - u32 ul_shm_offset_virt = 0; - struct cfg_hostres *host_res = dev_context->resources; - bool trace_load = false; - - temp_byte1 = 0x0; - temp_byte2 = 0x0; - - if (symbols_reloaded) { - /* Check if it is a load to Trace section */ - ret = dev_get_symbol(dev_context->dev_obj, - DSP_TRACESEC_BEG, &ul_trace_sec_beg); - if (!ret) - ret = dev_get_symbol(dev_context->dev_obj, - DSP_TRACESEC_END, - &ul_trace_sec_end); - } - if (!ret) { - if ((dsp_addr <= ul_trace_sec_end) && - (dsp_addr >= ul_trace_sec_beg)) - trace_load = true; - } - - /* If dynamic, force remap/unmap */ - if ((dynamic_load || trace_load) && dw_base_addr) { - dw_base_addr = 0; - MEM_UNMAP_LINEAR_ADDRESS((void *) - dev_context->dsp_ext_base_addr); - dev_context->dsp_ext_base_addr = 0x0; - } - if (!dw_base_addr) { - if (symbols_reloaded) - /* Get SHM_BEG EXT_BEG and EXT_END. */ - ret = dev_get_symbol(dev_context->dev_obj, - SHMBASENAME, &ul_shm_base_virt); - if (dynamic_load) { - if (!ret) { - if (symbols_reloaded) - ret = - dev_get_symbol - (dev_context->dev_obj, DYNEXTBASE, - &ul_ext_base); - } - if (!ret) { - /* DR OMAPS00013235 : DLModules array may be - * in EXTMEM. It is expected that DYNEXTMEM and - * EXTMEM are contiguous, so checking for the - * upper bound at EXTEND should be Ok. */ - if (symbols_reloaded) - ret = - dev_get_symbol - (dev_context->dev_obj, EXTEND, - &ul_ext_end); - } - } else { - if (symbols_reloaded) { - if (!ret) - ret = - dev_get_symbol - (dev_context->dev_obj, EXTBASE, - &ul_ext_base); - if (!ret) - ret = - dev_get_symbol - (dev_context->dev_obj, EXTEND, - &ul_ext_end); - } - } - /* Trace buffer it right after the shm SEG0, so set the - * base address to SHMBASE */ - if (trace_load) - ul_ext_base = ul_shm_base_virt; - - if (ul_ext_end < ul_ext_base) - ret = -EPERM; - - if (!ret) { - ul_tlb_base_virt = - dev_context->atlb_entry[0].dsp_va * DSPWORDSIZE; - - if (symbols_reloaded) { - ret = dev_get_symbol - (dev_context->dev_obj, - DSP_TRACESEC_END, &shm0_end); - if (!ret) { - ret = - dev_get_symbol - (dev_context->dev_obj, DYNEXTBASE, - &ul_dyn_ext_base); - } - } - ul_shm_offset_virt = - ul_shm_base_virt - ul_tlb_base_virt; - if (trace_load) { - dw_ext_prog_virt_mem = - dev_context->atlb_entry[0].gpp_va; - } else { - dw_ext_prog_virt_mem = host_res->mem_base[1]; - dw_ext_prog_virt_mem += - (ul_ext_base - ul_dyn_ext_base); - } - - dev_context->dsp_ext_base_addr = - (u32) MEM_LINEAR_ADDRESS((void *) - dw_ext_prog_virt_mem, - ul_ext_end - ul_ext_base); - dw_base_addr += dev_context->dsp_ext_base_addr; - /* This dsp_ext_base_addr will get cleared only when - * the board is stopped. */ - if (!dev_context->dsp_ext_base_addr) - ret = -EPERM; - } - } - if (!dw_base_addr || !ul_ext_base || !ul_ext_end) - ret = -EPERM; - - if (!ret) { - for (i = 0; i < 4; i++) - remain_byte[i] = 0x0; - - dw_offset = dsp_addr - ul_ext_base; - /* Also make sure the dsp_addr is < ul_ext_end */ - if (dsp_addr > ul_ext_end || dw_offset > dsp_addr) - ret = -EPERM; - } - if (!ret) { - if (ul_num_bytes) - memcpy((u8 *) dw_base_addr + dw_offset, host_buff, - ul_num_bytes); - else - *((u32 *) host_buff) = dw_base_addr + dw_offset; - } - /* Unmap here to force remap for other Ext loads */ - if ((dynamic_load || trace_load) && dev_context->dsp_ext_base_addr) { - MEM_UNMAP_LINEAR_ADDRESS((void *) - dev_context->dsp_ext_base_addr); - dev_context->dsp_ext_base_addr = 0x0; - } - symbols_reloaded = false; - return ret; -} - -int sm_interrupt_dsp(struct bridge_dev_context *dev_context, u16 mb_val) -{ -#ifdef CONFIG_TIDSPBRIDGE_DVFS - u32 opplevel = 0; -#endif - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - struct cfg_hostres *resources = dev_context->resources; - int status = 0; - u32 temp; - - if (!dev_context->mbox) - return 0; - - if (!resources) - return -EPERM; - - if (dev_context->brd_state == BRD_DSP_HIBERNATION || - dev_context->brd_state == BRD_HIBERNATION) { -#ifdef CONFIG_TIDSPBRIDGE_DVFS - if (pdata->dsp_get_opp) - opplevel = (*pdata->dsp_get_opp) (); - if (opplevel == VDD1_OPP1) { - if (pdata->dsp_set_min_opp) - (*pdata->dsp_set_min_opp) (VDD1_OPP2); - } -#endif - /* Restart the peripheral clocks */ - dsp_clock_enable_all(dev_context->dsp_per_clks); - dsp_wdt_enable(true); - - /* - * 2:0 AUTO_IVA2_DPLL - Enabling IVA2 DPLL auto control - * in CM_AUTOIDLE_PLL_IVA2 register - */ - (*pdata->dsp_cm_write)(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT, - OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL); - - /* - * 7:4 IVA2_DPLL_FREQSEL - IVA2 internal frq set to - * 0.75 MHz - 1.0 MHz - * 2:0 EN_IVA2_DPLL - Enable IVA2 DPLL in lock mode - */ - (*pdata->dsp_cm_rmw_bits)(OMAP3430_IVA2_DPLL_FREQSEL_MASK | - OMAP3430_EN_IVA2_DPLL_MASK, - 0x3 << OMAP3430_IVA2_DPLL_FREQSEL_SHIFT | - 0x7 << OMAP3430_EN_IVA2_DPLL_SHIFT, - OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL); - - /* Restore mailbox settings */ - omap_mbox_restore_ctx(dev_context->mbox); - - /* Access MMU SYS CONFIG register to generate a short wakeup */ - temp = readl(resources->dmmu_base + 0x10); - - dev_context->brd_state = BRD_RUNNING; - } else if (dev_context->brd_state == BRD_RETENTION) { - /* Restart the peripheral clocks */ - dsp_clock_enable_all(dev_context->dsp_per_clks); - } - - status = omap_mbox_msg_send(dev_context->mbox, mb_val); - - if (status) { - pr_err("omap_mbox_msg_send Fail and status = %d\n", status); - status = -EPERM; - } - - return 0; -} diff --git a/drivers/staging/tidspbridge/core/tiomap_io.h b/drivers/staging/tidspbridge/core/tiomap_io.h deleted file mode 100644 index a3f19c7b79f3..000000000000 --- a/drivers/staging/tidspbridge/core/tiomap_io.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * tiomap_io.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Definitions, types and function prototypes for the io (r/w external mem). - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _TIOMAP_IO_ -#define _TIOMAP_IO_ - -/* - * Symbol that defines beginning of shared memory. - * For OMAP (Helen) this is the DSP Virtual base address of SDRAM. - * This will be used to program DSP MMU to map DSP Virt to GPP phys. - * (see dspMmuTlbEntry()). - */ -#define SHMBASENAME "SHM_BEG" -#define EXTBASE "EXT_BEG" -#define EXTEND "_EXT_END" -#define DYNEXTBASE "_DYNEXT_BEG" -#define DYNEXTEND "_DYNEXT_END" -#define IVAEXTMEMBASE "_IVAEXTMEM_BEG" -#define IVAEXTMEMEND "_IVAEXTMEM_END" - -#define DSP_TRACESEC_BEG "_BRIDGE_TRACE_BEG" -#define DSP_TRACESEC_END "_BRIDGE_TRACE_END" - -#define SYS_PUTCBEG "_SYS_PUTCBEG" -#define SYS_PUTCEND "_SYS_PUTCEND" -#define BRIDGE_SYS_PUTC_CURRENT "_BRIDGE_SYS_PUTC_current" - -#define WORDSWAP_ENABLE 0x3 /* Enable word swap */ - -/* - * ======== read_ext_dsp_data ======== - * Reads it from DSP External memory. The external memory for the DSP - * is configured by the combination of DSP MMU and shm Memory manager in the CDB - */ -extern int read_ext_dsp_data(struct bridge_dev_context *dev_ctxt, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type); - -/* - * ======== write_dsp_data ======== - */ -extern int write_dsp_data(struct bridge_dev_context *dev_context, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type); - -/* - * ======== write_ext_dsp_data ======== - * Writes to the DSP External memory for external program. - * The ext mem for progra is configured by the combination of DSP MMU and - * shm Memory manager in the CDB - */ -extern int write_ext_dsp_data(struct bridge_dev_context *dev_context, - u8 *host_buff, u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type, - bool dynamic_load); - -/* - * ======== write_ext32_bit_dsp_data ======== - * Writes 32 bit data to the external memory - */ -extern inline void write_ext32_bit_dsp_data(const - struct bridge_dev_context *dev_context, - u32 dsp_addr, u32 val) -{ - *(u32 *) dsp_addr = ((dev_context->tc_word_swap_on) ? (((val << 16) & - 0xFFFF0000) | - ((val >> 16) & - 0x0000FFFF)) : - val); -} - -/* - * ======== read_ext32_bit_dsp_data ======== - * Reads 32 bit data from the external memory - */ -extern inline u32 read_ext32_bit_dsp_data(const struct bridge_dev_context - *dev_context, u32 dsp_addr) -{ - u32 ret; - ret = *(u32 *) dsp_addr; - - ret = ((dev_context->tc_word_swap_on) ? (((ret << 16) - & 0xFFFF0000) | ((ret >> 16) & - 0x0000FFFF)) - : ret); - return ret; -} - -#endif /* _TIOMAP_IO_ */ diff --git a/drivers/staging/tidspbridge/core/ue_deh.c b/drivers/staging/tidspbridge/core/ue_deh.c deleted file mode 100644 index e68f0ba8e12b..000000000000 --- a/drivers/staging/tidspbridge/core/ue_deh.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * ue_deh.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implements upper edge DSP exception handling (DEH) functions. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * Copyright (C) 2010 Felipe Contreras - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include - -#include -#include -#include -#include "_tiomap.h" -#include "_deh.h" - -#include -#include -#include - -static u32 fault_addr; - -static void mmu_fault_dpc(unsigned long data) -{ - struct deh_mgr *deh = (void *)data; - - if (!deh) - return; - - bridge_deh_notify(deh, DSP_MMUFAULT, 0); -} - -static irqreturn_t mmu_fault_isr(int irq, void *data) -{ - struct deh_mgr *deh = data; - struct cfg_hostres *resources; - u32 event; - - if (!deh) - return IRQ_HANDLED; - - resources = deh->bridge_context->resources; - if (!resources) { - dev_dbg(bridge, "%s: Failed to get Host Resources\n", - __func__); - return IRQ_HANDLED; - } - - hw_mmu_event_status(resources->dmmu_base, &event); - if (event == HW_MMU_TRANSLATION_FAULT) { - hw_mmu_fault_addr_read(resources->dmmu_base, &fault_addr); - dev_dbg(bridge, "%s: event=0x%x, fault_addr=0x%x\n", __func__, - event, fault_addr); - /* - * Schedule a DPC directly. In the future, it may be - * necessary to check if DSP MMU fault is intended for - * Bridge. - */ - tasklet_schedule(&deh->dpc_tasklet); - - /* Disable the MMU events, else once we clear it will - * start to raise INTs again */ - hw_mmu_event_disable(resources->dmmu_base, - HW_MMU_TRANSLATION_FAULT); - } else { - hw_mmu_event_disable(resources->dmmu_base, - HW_MMU_ALL_INTERRUPTS); - } - return IRQ_HANDLED; -} - -int bridge_deh_create(struct deh_mgr **ret_deh, - struct dev_object *hdev_obj) -{ - int status; - struct deh_mgr *deh; - struct bridge_dev_context *hbridge_context = NULL; - - /* Message manager will be created when a file is loaded, since - * size of message buffer in shared memory is configurable in - * the base image. */ - /* Get Bridge context info. */ - dev_get_bridge_context(hdev_obj, &hbridge_context); - /* Allocate IO manager object: */ - deh = kzalloc(sizeof(*deh), GFP_KERNEL); - if (!deh) { - status = -ENOMEM; - goto err; - } - - /* Create an NTFY object to manage notifications */ - deh->ntfy_obj = kmalloc(sizeof(struct ntfy_object), GFP_KERNEL); - if (!deh->ntfy_obj) { - status = -ENOMEM; - goto err; - } - ntfy_init(deh->ntfy_obj); - - /* Create a MMUfault DPC */ - tasklet_init(&deh->dpc_tasklet, mmu_fault_dpc, (u32) deh); - - /* Fill in context structure */ - deh->bridge_context = hbridge_context; - - /* Install ISR function for DSP MMU fault */ - status = request_irq(INT_DSP_MMU_IRQ, mmu_fault_isr, 0, - "DspBridge\tiommu fault", deh); - if (status < 0) - goto err; - - *ret_deh = deh; - return 0; - -err: - bridge_deh_destroy(deh); - *ret_deh = NULL; - return status; -} - -int bridge_deh_destroy(struct deh_mgr *deh) -{ - if (!deh) - return -EFAULT; - - /* If notification object exists, delete it */ - if (deh->ntfy_obj) { - ntfy_delete(deh->ntfy_obj); - kfree(deh->ntfy_obj); - } - /* Disable DSP MMU fault */ - free_irq(INT_DSP_MMU_IRQ, deh); - - /* Free DPC object */ - tasklet_kill(&deh->dpc_tasklet); - - /* Deallocate the DEH manager object */ - kfree(deh); - - return 0; -} - -int bridge_deh_register_notify(struct deh_mgr *deh, u32 event_mask, - u32 notify_type, - struct dsp_notification *hnotification) -{ - if (!deh) - return -EFAULT; - - if (event_mask) - return ntfy_register(deh->ntfy_obj, hnotification, - event_mask, notify_type); - else - return ntfy_unregister(deh->ntfy_obj, hnotification); -} - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -static void mmu_fault_print_stack(struct bridge_dev_context *dev_context) -{ - struct cfg_hostres *resources; - struct hw_mmu_map_attrs_t map_attrs = { - .endianism = HW_LITTLE_ENDIAN, - .element_size = HW_ELEM_SIZE16BIT, - .mixed_size = HW_MMU_CPUES, - }; - void *dummy_va_addr; - - resources = dev_context->resources; - dummy_va_addr = (void *)__get_free_page(GFP_ATOMIC); - - /* - * Before acking the MMU fault, let's make sure MMU can only - * access entry #0. Then add a new entry so that the DSP OS - * can continue in order to dump the stack. - */ - hw_mmu_twl_disable(resources->dmmu_base); - hw_mmu_tlb_flush_all(resources->dmmu_base); - - hw_mmu_tlb_add(resources->dmmu_base, - virt_to_phys(dummy_va_addr), fault_addr, - HW_PAGE_SIZE4KB, 1, - &map_attrs, HW_SET, HW_SET); - - dsp_clk_enable(DSP_CLK_GPT8); - - dsp_gpt_wait_overflow(DSP_CLK_GPT8, 0xfffffffe); - - /* Clear MMU interrupt */ - hw_mmu_event_ack(resources->dmmu_base, - HW_MMU_TRANSLATION_FAULT); - dump_dsp_stack(dev_context); - dsp_clk_disable(DSP_CLK_GPT8); - - hw_mmu_disable(resources->dmmu_base); - free_page((unsigned long)dummy_va_addr); -} -#endif - -static inline const char *event_to_string(int event) -{ - switch (event) { - case DSP_SYSERROR: return "DSP_SYSERROR"; break; - case DSP_MMUFAULT: return "DSP_MMUFAULT"; break; - case DSP_PWRERROR: return "DSP_PWRERROR"; break; - case DSP_WDTOVERFLOW: return "DSP_WDTOVERFLOW"; break; - default: return "unknown event"; break; - } -} - -void bridge_deh_notify(struct deh_mgr *deh, int event, int info) -{ - struct bridge_dev_context *dev_context; - const char *str = event_to_string(event); - - if (!deh) - return; - - dev_dbg(bridge, "%s: device exception", __func__); - dev_context = deh->bridge_context; - - switch (event) { - case DSP_SYSERROR: - dev_err(bridge, "%s: %s, info=0x%x", __func__, - str, info); -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - dump_dl_modules(dev_context); - dump_dsp_stack(dev_context); -#endif - break; - case DSP_MMUFAULT: - dev_err(bridge, "%s: %s, addr=0x%x", __func__, - str, fault_addr); -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - print_dsp_trace_buffer(dev_context); - dump_dl_modules(dev_context); - mmu_fault_print_stack(dev_context); -#endif - break; - default: - dev_err(bridge, "%s: %s", __func__, str); - break; - } - - /* Filter subsequent notifications when an error occurs */ - if (dev_context->brd_state != BRD_ERROR) { - ntfy_notify(deh->ntfy_obj, event); -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - bridge_recover_schedule(); -#endif - } - - /* Set the Board state as ERROR */ - dev_context->brd_state = BRD_ERROR; - /* Disable all the clocks that were enabled by DSP */ - dsp_clock_disable_all(dev_context->dsp_per_clks); - /* - * Avoid the subsequent WDT if it happens once, - * also if fatal error occurs. - */ - dsp_wdt_enable(false); -} diff --git a/drivers/staging/tidspbridge/core/wdt.c b/drivers/staging/tidspbridge/core/wdt.c deleted file mode 100644 index b19f887dfd88..000000000000 --- a/drivers/staging/tidspbridge/core/wdt.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * wdt.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * IO dispatcher for a shared memory channel driver. - * - * Copyright (C) 2010 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -#include -#include -#include -#include -#include -#include - - -#define OMAP34XX_WDT3_BASE (0x49000000 + 0x30000) -#define INT_34XX_WDT3_IRQ (36 + NR_IRQS) - -static struct dsp_wdt_setting dsp_wdt; - -void dsp_wdt_dpc(unsigned long data) -{ - struct deh_mgr *deh_mgr; - - dev_get_deh_mgr(dev_get_first(), &deh_mgr); - if (deh_mgr) - bridge_deh_notify(deh_mgr, DSP_WDTOVERFLOW, 0); -} - -irqreturn_t dsp_wdt_isr(int irq, void *data) -{ - u32 value; - /* ack wdt3 interrupt */ - value = __raw_readl(dsp_wdt.reg_base + OMAP3_WDT3_ISR_OFFSET); - __raw_writel(value, dsp_wdt.reg_base + OMAP3_WDT3_ISR_OFFSET); - - tasklet_schedule(&dsp_wdt.wdt3_tasklet); - return IRQ_HANDLED; -} - -int dsp_wdt_init(void) -{ - int ret = 0; - - dsp_wdt.sm_wdt = NULL; - dsp_wdt.reg_base = ioremap(OMAP34XX_WDT3_BASE, SZ_4K); - if (!dsp_wdt.reg_base) - return -ENOMEM; - - tasklet_init(&dsp_wdt.wdt3_tasklet, dsp_wdt_dpc, 0); - - dsp_wdt.fclk = clk_get(NULL, "wdt3_fck"); - - if (!IS_ERR(dsp_wdt.fclk)) { - clk_prepare(dsp_wdt.fclk); - - dsp_wdt.iclk = clk_get(NULL, "wdt3_ick"); - if (IS_ERR(dsp_wdt.iclk)) { - clk_put(dsp_wdt.fclk); - dsp_wdt.fclk = NULL; - ret = -EFAULT; - } else { - clk_prepare(dsp_wdt.iclk); - } - } else - ret = -EFAULT; - - if (!ret) - ret = request_irq(INT_34XX_WDT3_IRQ, dsp_wdt_isr, 0, - "dsp_wdt", &dsp_wdt); - - /* Disable at this moment, it will be enabled when DSP starts */ - if (!ret) - disable_irq(INT_34XX_WDT3_IRQ); - - return ret; -} - -void dsp_wdt_sm_set(void *data) -{ - dsp_wdt.sm_wdt = data; - dsp_wdt.sm_wdt->wdt_overflow = 5; /* in seconds */ -} - - -void dsp_wdt_exit(void) -{ - free_irq(INT_34XX_WDT3_IRQ, &dsp_wdt); - tasklet_kill(&dsp_wdt.wdt3_tasklet); - - if (dsp_wdt.fclk) { - clk_unprepare(dsp_wdt.fclk); - clk_put(dsp_wdt.fclk); - } - if (dsp_wdt.iclk) { - clk_unprepare(dsp_wdt.iclk); - clk_put(dsp_wdt.iclk); - } - - dsp_wdt.fclk = NULL; - dsp_wdt.iclk = NULL; - dsp_wdt.sm_wdt = NULL; - - if (dsp_wdt.reg_base) - iounmap(dsp_wdt.reg_base); - dsp_wdt.reg_base = NULL; -} - -void dsp_wdt_enable(bool enable) -{ - u32 tmp; - static bool wdt_enable; - - if (wdt_enable == enable || !dsp_wdt.fclk || !dsp_wdt.iclk) - return; - - wdt_enable = enable; - - if (enable) { - clk_enable(dsp_wdt.fclk); - clk_enable(dsp_wdt.iclk); - dsp_wdt.sm_wdt->wdt_setclocks = 1; - tmp = __raw_readl(dsp_wdt.reg_base + OMAP3_WDT3_ISR_OFFSET); - __raw_writel(tmp, dsp_wdt.reg_base + OMAP3_WDT3_ISR_OFFSET); - enable_irq(INT_34XX_WDT3_IRQ); - } else { - disable_irq(INT_34XX_WDT3_IRQ); - dsp_wdt.sm_wdt->wdt_setclocks = 0; - clk_disable(dsp_wdt.iclk); - clk_disable(dsp_wdt.fclk); - } -} diff --git a/drivers/staging/tidspbridge/dynload/cload.c b/drivers/staging/tidspbridge/dynload/cload.c deleted file mode 100644 index 83f2106ff8a7..000000000000 --- a/drivers/staging/tidspbridge/dynload/cload.c +++ /dev/null @@ -1,1959 +0,0 @@ -/* - * cload.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -#include "header.h" - -#include "module_list.h" -#define LINKER_MODULES_HEADER ("_" MODULES_HEADER) - -/* - * forward references - */ -static void dload_symbols(struct dload_state *dlthis); -static void dload_data(struct dload_state *dlthis); -static void allocate_sections(struct dload_state *dlthis); -static void string_table_free(struct dload_state *dlthis); -static void symbol_table_free(struct dload_state *dlthis); -static void section_table_free(struct dload_state *dlthis); -static void init_module_handle(struct dload_state *dlthis); -#if BITS_PER_AU > BITS_PER_BYTE -static char *unpack_name(struct dload_state *dlthis, u32 soffset); -#endif - -static const char cinitname[] = { ".cinit" }; -static const char loader_dllview_root[] = { "?DLModules?" }; - -/* - * Error strings - */ -static const char readstrm[] = { "Error reading %s from input stream" }; -static const char err_alloc[] = { "Syms->dload_allocate( %d ) failed" }; -static const char tgtalloc[] = { - "Target memory allocate failed, section %s size " FMT_UI32 }; -static const char initfail[] = { "%s to target address " FMT_UI32 " failed" }; -static const char dlvwrite[] = { "Write to DLLview list failed" }; -static const char iconnect[] = { "Connect call to init interface failed" }; -static const char err_checksum[] = { "Checksum failed on %s" }; - -/************************************************************************* - * Procedure dload_error - * - * Parameters: - * errtxt description of the error, printf style - * ... additional information - * - * Effect: - * Reports or records the error as appropriate. - *********************************************************************** */ -void dload_error(struct dload_state *dlthis, const char *errtxt, ...) -{ - va_list args; - - va_start(args, errtxt); - dlthis->mysym->error_report(dlthis->mysym, errtxt, args); - va_end(args); - dlthis->dload_errcount += 1; - -} /* dload_error */ - -#define DL_ERROR(zza, zzb) dload_error(dlthis, zza, zzb) - -/************************************************************************* - * Procedure dload_syms_error - * - * Parameters: - * errtxt description of the error, printf style - * ... additional information - * - * Effect: - * Reports or records the error as appropriate. - *********************************************************************** */ -void dload_syms_error(struct dynamic_loader_sym *syms, const char *errtxt, ...) -{ - va_list args; - - va_start(args, errtxt); - syms->error_report(syms, errtxt, args); - va_end(args); -} - -/************************************************************************* - * Procedure dynamic_load_module - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * init Target-side memory initialization - * options Option flags DLOAD_* - * mhandle A module handle for use with Dynamic_Unload - * - * Effect: - * The module image is read using *module. Target storage for the new - * image is - * obtained from *alloc. Symbols defined and referenced by the module are - * managed using *syms. The image is then relocated and references - * resolved as necessary, and the resulting executable bits are placed - * into target memory using *init. - * - * Returns: - * On a successful load, a module handle is placed in *mhandle, - * and zero is returned. On error, the number of errors detected is - * returned. Individual errors are reported during the load process - * using syms->error_report(). - ********************************************************************** */ -int dynamic_load_module(struct dynamic_loader_stream *module, - struct dynamic_loader_sym *syms, - struct dynamic_loader_allocate *alloc, - struct dynamic_loader_initialize *init, - unsigned options, void **mhandle) -{ - register unsigned *dp, sz; - struct dload_state dl_state; /* internal state for this call */ - - /* blast our internal state */ - dp = (unsigned *)&dl_state; - for (sz = sizeof(dl_state) / sizeof(unsigned); sz > 0; sz -= 1) - *dp++ = 0; - - /* Enable _only_ BSS initialization if enabled by user */ - if ((options & DLOAD_INITBSS) == DLOAD_INITBSS) - dl_state.myoptions = DLOAD_INITBSS; - - /* Check that mandatory arguments are present */ - if (!module || !syms) { - dload_error(&dl_state, "Required parameter is NULL"); - } else { - dl_state.strm = module; - dl_state.mysym = syms; - dload_headers(&dl_state); - if (!dl_state.dload_errcount) - dload_strings(&dl_state, false); - if (!dl_state.dload_errcount) - dload_sections(&dl_state); - - if (init && !dl_state.dload_errcount) { - if (init->connect(init)) { - dl_state.myio = init; - dl_state.myalloc = alloc; - /* do now, before reducing symbols */ - allocate_sections(&dl_state); - } else - dload_error(&dl_state, iconnect); - } - - if (!dl_state.dload_errcount) { - /* fix up entry point address */ - unsigned sref = dl_state.dfile_hdr.df_entry_secn - 1; - - if (sref < dl_state.allocated_secn_count) - dl_state.dfile_hdr.df_entrypt += - dl_state.ldr_sections[sref].run_addr; - - dload_symbols(&dl_state); - } - - if (init && !dl_state.dload_errcount) - dload_data(&dl_state); - - init_module_handle(&dl_state); - - /* dl_state.myio is init or 0 at this point. */ - if (dl_state.myio) { - if ((!dl_state.dload_errcount) && - (dl_state.dfile_hdr.df_entry_secn != DN_UNDEF) && - (!init->execute(init, - dl_state.dfile_hdr.df_entrypt))) - dload_error(&dl_state, "Init->Execute Failed"); - init->release(init); - } - - symbol_table_free(&dl_state); - section_table_free(&dl_state); - string_table_free(&dl_state); - dload_tramp_cleanup(&dl_state); - - if (dl_state.dload_errcount) { - dynamic_unload_module(dl_state.myhandle, syms, alloc, - init); - dl_state.myhandle = NULL; - } - } - - if (mhandle) - *mhandle = dl_state.myhandle; /* give back the handle */ - - return dl_state.dload_errcount; -} /* DLOAD_File */ - -/************************************************************************* - * Procedure dynamic_open_module - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * init Target-side memory initialization - * options Option flags DLOAD_* - * mhandle A module handle for use with Dynamic_Unload - * - * Effect: - * The module image is read using *module. Target storage for the new - * image is - * obtained from *alloc. Symbols defined and referenced by the module are - * managed using *syms. The image is then relocated and references - * resolved as necessary, and the resulting executable bits are placed - * into target memory using *init. - * - * Returns: - * On a successful load, a module handle is placed in *mhandle, - * and zero is returned. On error, the number of errors detected is - * returned. Individual errors are reported during the load process - * using syms->error_report(). - ********************************************************************** */ -int -dynamic_open_module(struct dynamic_loader_stream *module, - struct dynamic_loader_sym *syms, - struct dynamic_loader_allocate *alloc, - struct dynamic_loader_initialize *init, - unsigned options, void **mhandle) -{ - register unsigned *dp, sz; - struct dload_state dl_state; /* internal state for this call */ - - /* blast our internal state */ - dp = (unsigned *)&dl_state; - for (sz = sizeof(dl_state) / sizeof(unsigned); sz > 0; sz -= 1) - *dp++ = 0; - - /* Enable _only_ BSS initialization if enabled by user */ - if ((options & DLOAD_INITBSS) == DLOAD_INITBSS) - dl_state.myoptions = DLOAD_INITBSS; - - /* Check that mandatory arguments are present */ - if (!module || !syms) { - dload_error(&dl_state, "Required parameter is NULL"); - } else { - dl_state.strm = module; - dl_state.mysym = syms; - dload_headers(&dl_state); - if (!dl_state.dload_errcount) - dload_strings(&dl_state, false); - if (!dl_state.dload_errcount) - dload_sections(&dl_state); - - if (init && !dl_state.dload_errcount) { - if (init->connect(init)) { - dl_state.myio = init; - dl_state.myalloc = alloc; - /* do now, before reducing symbols */ - allocate_sections(&dl_state); - } else - dload_error(&dl_state, iconnect); - } - - if (!dl_state.dload_errcount) { - /* fix up entry point address */ - unsigned sref = dl_state.dfile_hdr.df_entry_secn - 1; - - if (sref < dl_state.allocated_secn_count) - dl_state.dfile_hdr.df_entrypt += - dl_state.ldr_sections[sref].run_addr; - - dload_symbols(&dl_state); - } - - init_module_handle(&dl_state); - - /* dl_state.myio is either 0 or init at this point. */ - if (dl_state.myio) { - if ((!dl_state.dload_errcount) && - (dl_state.dfile_hdr.df_entry_secn != DN_UNDEF) && - (!init->execute(init, - dl_state.dfile_hdr.df_entrypt))) - dload_error(&dl_state, "Init->Execute Failed"); - init->release(init); - } - - symbol_table_free(&dl_state); - section_table_free(&dl_state); - string_table_free(&dl_state); - - if (dl_state.dload_errcount) { - dynamic_unload_module(dl_state.myhandle, syms, alloc, - init); - dl_state.myhandle = NULL; - } - } - - if (mhandle) - *mhandle = dl_state.myhandle; /* give back the handle */ - - return dl_state.dload_errcount; -} /* DLOAD_File */ - -/************************************************************************* - * Procedure dload_headers - * - * Parameters: - * none - * - * Effect: - * Loads the DOFF header and verify record. Deals with any byte-order - * issues and checks them for validity. - *********************************************************************** */ -#define COMBINED_HEADER_SIZE (sizeof(struct doff_filehdr_t)+ \ - sizeof(struct doff_verify_rec_t)) - -void dload_headers(struct dload_state *dlthis) -{ - u32 map; - - /* Read the header and the verify record as one. If we don't get it - all, we're done */ - if (dlthis->strm->read_buffer(dlthis->strm, &dlthis->dfile_hdr, - COMBINED_HEADER_SIZE) != - COMBINED_HEADER_SIZE) { - DL_ERROR(readstrm, "File Headers"); - return; - } - /* - * Verify that we have the byte order of the file correct. - * If not, must fix it before we can continue - */ - map = REORDER_MAP(dlthis->dfile_hdr.df_byte_reshuffle); - if (map != REORDER_MAP(BYTE_RESHUFFLE_VALUE)) { - /* input is either byte-shuffled or bad */ - if ((map & 0xFCFCFCFC) == 0) { /* no obviously bogus bits */ - dload_reorder(&dlthis->dfile_hdr, COMBINED_HEADER_SIZE, - map); - } - if (dlthis->dfile_hdr.df_byte_reshuffle != - BYTE_RESHUFFLE_VALUE) { - /* didn't fix the problem, the byte swap map is bad */ - dload_error(dlthis, - "Bad byte swap map " FMT_UI32 " in header", - dlthis->dfile_hdr.df_byte_reshuffle); - return; - } - dlthis->reorder_map = map; /* keep map for future use */ - } - - /* - * Verify checksum of header and verify record - */ - if (~dload_checksum(&dlthis->dfile_hdr, - sizeof(struct doff_filehdr_t)) || - ~dload_checksum(&dlthis->verify, - sizeof(struct doff_verify_rec_t))) { - DL_ERROR(err_checksum, "header or verify record"); - return; - } -#if HOST_ENDIANNESS - dlthis->dfile_hdr.df_byte_reshuffle = map; /* put back for later */ -#endif - - /* Check for valid target ID */ - if ((dlthis->dfile_hdr.df_target_id != TARGET_ID) && - -(dlthis->dfile_hdr.df_target_id != TMS470_ID)) { - dload_error(dlthis, "Bad target ID 0x%x and TARGET_ID 0x%x", - dlthis->dfile_hdr.df_target_id, TARGET_ID); - return; - } - /* Check for valid file format */ - if ((dlthis->dfile_hdr.df_doff_version != DOFF0)) { - dload_error(dlthis, "Bad DOFF version 0x%x", - dlthis->dfile_hdr.df_doff_version); - return; - } - - /* - * Apply reasonableness checks to count fields - */ - if (dlthis->dfile_hdr.df_strtab_size > MAX_REASONABLE_STRINGTAB) { - dload_error(dlthis, "Excessive string table size " FMT_UI32, - dlthis->dfile_hdr.df_strtab_size); - return; - } - if (dlthis->dfile_hdr.df_no_scns > MAX_REASONABLE_SECTIONS) { - dload_error(dlthis, "Excessive section count 0x%x", - dlthis->dfile_hdr.df_no_scns); - return; - } -#ifndef TARGET_ENDIANNESS - /* - * Check that endianness does not disagree with explicit specification - */ - if ((dlthis->dfile_hdr.df_flags >> ALIGN_COFF_ENDIANNESS) & - dlthis->myoptions & ENDIANNESS_MASK) { - dload_error(dlthis, - "Input endianness disagrees with specified option"); - return; - } - dlthis->big_e_target = dlthis->dfile_hdr.df_flags & DF_BIG; -#endif - -} /* dload_headers */ - -/* COFF Section Processing - * - * COFF sections are read in and retained intact. Each record is embedded - * in a new structure that records the updated load and - * run addresses of the section */ - -static const char secn_errid[] = { "section" }; - -/************************************************************************* - * Procedure dload_sections - * - * Parameters: - * none - * - * Effect: - * Loads the section records into an internal table. - *********************************************************************** */ -void dload_sections(struct dload_state *dlthis) -{ - s16 siz; - struct doff_scnhdr_t *shp; - unsigned nsecs = dlthis->dfile_hdr.df_no_scns; - - /* allocate space for the DOFF section records */ - siz = nsecs * sizeof(struct doff_scnhdr_t); - shp = - (struct doff_scnhdr_t *)dlthis->mysym->dload_allocate(dlthis->mysym, - siz); - if (!shp) { /* not enough storage */ - DL_ERROR(err_alloc, siz); - return; - } - dlthis->sect_hdrs = shp; - - /* read in the section records */ - if (dlthis->strm->read_buffer(dlthis->strm, shp, siz) != siz) { - DL_ERROR(readstrm, secn_errid); - return; - } - - /* if we need to fix up byte order, do it now */ - if (dlthis->reorder_map) - dload_reorder(shp, siz, dlthis->reorder_map); - - /* check for validity */ - if (~dload_checksum(dlthis->sect_hdrs, siz) != - dlthis->verify.dv_scn_rec_checksum) { - DL_ERROR(err_checksum, secn_errid); - return; - } - -} /* dload_sections */ - -/***************************************************************************** - * Procedure allocate_sections - * - * Parameters: - * alloc target memory allocator class - * - * Effect: - * Assigns new (target) addresses for sections - **************************************************************************** */ -static void allocate_sections(struct dload_state *dlthis) -{ - u16 curr_sect, nsecs, siz; - struct doff_scnhdr_t *shp; - struct ldr_section_info *asecs; - struct my_handle *hndl; - - nsecs = dlthis->dfile_hdr.df_no_scns; - if (!nsecs) - return; - if ((dlthis->myalloc == NULL) && - (dlthis->dfile_hdr.df_target_scns > 0)) { - DL_ERROR("Arg 3 (alloc) required but NULL", 0); - return; - } - /* - * allocate space for the module handle, which we will keep for unload - * purposes include an additional section store for an auto-generated - * trampoline section in case we need it. - */ - siz = (dlthis->dfile_hdr.df_target_scns + 1) * - sizeof(struct ldr_section_info) + MY_HANDLE_SIZE; - - hndl = - (struct my_handle *)dlthis->mysym->dload_allocate(dlthis->mysym, - siz); - if (!hndl) { /* not enough storage */ - DL_ERROR(err_alloc, siz); - return; - } - /* initialize the handle header */ - hndl->dm.next = hndl->dm.prev = hndl; /* circular list */ - hndl->dm.root = NULL; - hndl->dm.dbthis = 0; - dlthis->myhandle = hndl; /* save away for return */ - /* pointer to the section list of allocated sections */ - dlthis->ldr_sections = asecs = hndl->secns; - /* * Insert names into all sections, make copies of - the sections we allocate */ - shp = dlthis->sect_hdrs; - for (curr_sect = 0; curr_sect < nsecs; curr_sect++) { - u32 soffset = shp->ds_offset; -#if BITS_PER_AU <= BITS_PER_BYTE - /* attempt to insert the name of this section */ - if (soffset < dlthis->dfile_hdr.df_strtab_size) - ((struct ldr_section_info *)shp)->name = - dlthis->str_head + soffset; - else { - dload_error(dlthis, "Bad name offset in section %d", - curr_sect); - ((struct ldr_section_info *)shp)->name = NULL; - } -#endif - /* allocate target storage for sections that require it */ - if (ds_needs_allocation(shp)) { - *asecs = *(struct ldr_section_info *)shp; - asecs->context = 0; /* zero the context field */ -#if BITS_PER_AU > BITS_PER_BYTE - asecs->name = unpack_name(dlthis, soffset); - dlthis->debug_string_size = soffset + dlthis->temp_len; -#else - dlthis->debug_string_size = soffset; -#endif - if (dlthis->myalloc != NULL) { - if (!dlthis->myalloc-> - dload_allocate(dlthis->myalloc, asecs, - ds_alignment(asecs->type))) { - dload_error(dlthis, tgtalloc, - asecs->name, asecs->size); - return; - } - } - /* keep address deltas in original section table */ - shp->ds_vaddr = asecs->load_addr - shp->ds_vaddr; - shp->ds_paddr = asecs->run_addr - shp->ds_paddr; - dlthis->allocated_secn_count += 1; - } /* allocate target storage */ - shp += 1; - asecs += 1; - } -#if BITS_PER_AU <= BITS_PER_BYTE - dlthis->debug_string_size += - strlen(dlthis->str_head + dlthis->debug_string_size) + 1; -#endif -} /* allocate sections */ - -/************************************************************************* - * Procedure section_table_free - * - * Parameters: - * none - * - * Effect: - * Frees any state used by the symbol table. - * - * WARNING: - * This routine is not allowed to declare errors! - *********************************************************************** */ -static void section_table_free(struct dload_state *dlthis) -{ - struct doff_scnhdr_t *shp; - - shp = dlthis->sect_hdrs; - if (shp) - dlthis->mysym->dload_deallocate(dlthis->mysym, shp); - -} /* section_table_free */ - -/************************************************************************* - * Procedure dload_strings - * - * Parameters: - * sec_names_only If true only read in the "section names" - * portion of the string table - * - * Effect: - * Loads the DOFF string table into memory. DOFF keeps all strings in a - * big unsorted array. We just read that array into memory in bulk. - *********************************************************************** */ -static const char stringtbl[] = { "string table" }; - -void dload_strings(struct dload_state *dlthis, bool sec_names_only) -{ - u32 ssiz; - char *strbuf; - - if (sec_names_only) { - ssiz = BYTE_TO_HOST(DOFF_ALIGN - (dlthis->dfile_hdr.df_scn_name_size)); - } else { - ssiz = BYTE_TO_HOST(DOFF_ALIGN - (dlthis->dfile_hdr.df_strtab_size)); - } - if (ssiz == 0) - return; - - /* get some memory for the string table */ -#if BITS_PER_AU > BITS_PER_BYTE - strbuf = (char *)dlthis->mysym->dload_allocate(dlthis->mysym, ssiz + - dlthis->dfile_hdr. - df_max_str_len); -#else - strbuf = (char *)dlthis->mysym->dload_allocate(dlthis->mysym, ssiz); -#endif - if (strbuf == NULL) { - DL_ERROR(err_alloc, ssiz); - return; - } - dlthis->str_head = strbuf; -#if BITS_PER_AU > BITS_PER_BYTE - dlthis->str_temp = strbuf + ssiz; -#endif - /* read in the strings and verify them */ - if ((unsigned)(dlthis->strm->read_buffer(dlthis->strm, strbuf, - ssiz)) != ssiz) { - DL_ERROR(readstrm, stringtbl); - } - /* if we need to fix up byte order, do it now */ -#ifndef _BIG_ENDIAN - if (dlthis->reorder_map) - dload_reorder(strbuf, ssiz, dlthis->reorder_map); - - if ((!sec_names_only) && (~dload_checksum(strbuf, ssiz) != - dlthis->verify.dv_str_tab_checksum)) { - DL_ERROR(err_checksum, stringtbl); - } -#else - if (dlthis->dfile_hdr.df_byte_reshuffle != - HOST_BYTE_ORDER(REORDER_MAP(BYTE_RESHUFFLE_VALUE))) { - /* put strings in big-endian order, not in PC order */ - dload_reorder(strbuf, ssiz, - HOST_BYTE_ORDER(dlthis-> - dfile_hdr.df_byte_reshuffle)); - } - if ((!sec_names_only) && (~dload_reverse_checksum(strbuf, ssiz) != - dlthis->verify.dv_str_tab_checksum)) { - DL_ERROR(err_checksum, stringtbl); - } -#endif -} /* dload_strings */ - -/************************************************************************* - * Procedure string_table_free - * - * Parameters: - * none - * - * Effect: - * Frees any state used by the string table. - * - * WARNING: - * This routine is not allowed to declare errors! - ************************************************************************ */ -static void string_table_free(struct dload_state *dlthis) -{ - if (dlthis->str_head) - dlthis->mysym->dload_deallocate(dlthis->mysym, - dlthis->str_head); - -} /* string_table_free */ - -/* - * Symbol Table Maintenance Functions - * - * COFF symbols are read by dload_symbols(), which is called after - * sections have been allocated. Symbols which might be used in - * relocation (ie, not debug info) are retained in an internal temporary - * compressed table (type local_symbol). A particular symbol is recovered - * by index by calling dload_find_symbol(). dload_find_symbol - * reconstructs a more explicit representation (type SLOTVEC) which is - * used by reloc.c - */ -/* real size of debug header */ -#define DBG_HDR_SIZE (sizeof(struct dll_module) - sizeof(struct dll_sect)) - -static const char sym_errid[] = { "symbol" }; - -/************************************************************************** - * Procedure dload_symbols - * - * Parameters: - * none - * - * Effect: - * Reads in symbols and retains ones that might be needed for relocation - * purposes. - *********************************************************************** */ -/* size of symbol buffer no bigger than target data buffer, to limit stack - * usage */ -#define MY_SYM_BUF_SIZ (BYTE_TO_HOST(IMAGE_PACKET_SIZE)/\ - sizeof(struct doff_syment_t)) - -static void dload_symbols(struct dload_state *dlthis) -{ - u32 sym_count, siz, dsiz, symbols_left; - u32 checks; - struct local_symbol *sp; - struct dynload_symbol *symp; - struct dynload_symbol *newsym; - struct doff_syment_t *my_sym_buf; - - sym_count = dlthis->dfile_hdr.df_no_syms; - if (sym_count == 0) - return; - - /* - * We keep a local symbol table for all of the symbols in the input. - * This table contains only section & value info, as we do not have - * to do any name processing for locals. We reuse this storage - * as a temporary for .dllview record construction. - * Allocate storage for the whole table. Add 1 to the section count - * in case a trampoline section is auto-generated as well as the - * size of the trampoline section name so DLLView doesn't get lost. - */ - - siz = sym_count * sizeof(struct local_symbol); - dsiz = DBG_HDR_SIZE + - (sizeof(struct dll_sect) * dlthis->allocated_secn_count) + - BYTE_TO_HOST_ROUND(dlthis->debug_string_size + 1); - if (dsiz > siz) - siz = dsiz; /* larger of symbols and .dllview temp */ - sp = (struct local_symbol *)dlthis->mysym->dload_allocate(dlthis->mysym, - siz); - if (!sp) { - DL_ERROR(err_alloc, siz); - return; - } - dlthis->local_symtab = sp; - /* Read the symbols in the input, store them in the table, and post any - * globals to the global symbol table. In the process, externals - become defined from the global symbol table */ - checks = dlthis->verify.dv_sym_tab_checksum; - symbols_left = sym_count; - - my_sym_buf = kzalloc(sizeof(*my_sym_buf) * MY_SYM_BUF_SIZ, GFP_KERNEL); - if (!my_sym_buf) - return; - - do { /* read all symbols */ - char *sname; - u32 val; - s32 delta; - struct doff_syment_t *input_sym; - unsigned syms_in_buf; - - input_sym = my_sym_buf; - syms_in_buf = symbols_left > MY_SYM_BUF_SIZ ? - MY_SYM_BUF_SIZ : symbols_left; - siz = syms_in_buf * sizeof(struct doff_syment_t); - if (dlthis->strm->read_buffer(dlthis->strm, input_sym, siz) != - siz) { - DL_ERROR(readstrm, sym_errid); - goto free_sym_buf; - } - if (dlthis->reorder_map) - dload_reorder(input_sym, siz, dlthis->reorder_map); - - checks += dload_checksum(input_sym, siz); - do { /* process symbols in buffer */ - symbols_left -= 1; - /* attempt to derive the name of this symbol */ - sname = NULL; - if (input_sym->dn_offset > 0) { -#if BITS_PER_AU <= BITS_PER_BYTE - if ((u32) input_sym->dn_offset < - dlthis->dfile_hdr.df_strtab_size) - sname = dlthis->str_head + - BYTE_TO_HOST(input_sym->dn_offset); - else - dload_error(dlthis, - "Bad name offset in symbol " - " %d", symbols_left); -#else - sname = unpack_name(dlthis, - input_sym->dn_offset); -#endif - } - val = input_sym->dn_value; - delta = 0; - sp->sclass = input_sym->dn_sclass; - sp->secnn = input_sym->dn_scnum; - /* if this is an undefined symbol, - * define it (or fail) now */ - if (sp->secnn == DN_UNDEF) { - /* pointless for static undefined */ - if (input_sym->dn_sclass != DN_EXT) - goto loop_cont; - - /* try to define symbol from previously - * loaded images */ - symp = dlthis->mysym->find_matching_symbol - (dlthis->mysym, sname); - if (!symp) { - DL_ERROR - ("Undefined external symbol %s", - sname); - goto loop_cont; - } - val = delta = symp->value; -#ifdef ENABLE_TRAMP_DEBUG - dload_syms_error(dlthis->mysym, - "===> ext sym [%s] at %x", - sname, val); -#endif - - goto loop_cont; - } - /* symbol defined by this module */ - if (sp->secnn > 0) { - /* symbol references a section */ - if ((unsigned)sp->secnn <= - dlthis->allocated_secn_count) { - /* section was allocated */ - struct doff_scnhdr_t *srefp = - &dlthis->sect_hdrs[sp->secnn - 1]; - - if (input_sym->dn_sclass == - DN_STATLAB || - input_sym->dn_sclass == DN_EXTLAB) { - /* load */ - delta = srefp->ds_vaddr; - } else { - /* run */ - delta = srefp->ds_paddr; - } - val += delta; - } - goto loop_itr; - } - /* This symbol is an absolute symbol */ - if (sp->secnn == DN_ABS && ((sp->sclass == DN_EXT) || - (sp->sclass == - DN_EXTLAB))) { - symp = - dlthis->mysym->find_matching_symbol(dlthis-> - mysym, - sname); - if (!symp) - goto loop_itr; - /* This absolute symbol is already defined. */ - if (symp->value == input_sym->dn_value) { - /* If symbol values are equal, continue - * but don't add to the global symbol - * table */ - sp->value = val; - sp->delta = delta; - sp += 1; - input_sym += 1; - continue; - } else { - /* If symbol values are not equal, - * return with redefinition error */ - DL_ERROR("Absolute symbol %s is " - "defined multiple times with " - "different values", sname); - goto free_sym_buf; - } - } -loop_itr: - /* if this is a global symbol, post it to the - * global table */ - if (input_sym->dn_sclass == DN_EXT || - input_sym->dn_sclass == DN_EXTLAB) { - /* Keep this global symbol for subsequent - * modules. Don't complain on error, to allow - * symbol API to suppress global symbols */ - if (!sname) - goto loop_cont; - - newsym = dlthis->mysym->add_to_symbol_table - (dlthis->mysym, sname, - (unsigned)dlthis->myhandle); - if (newsym) - newsym->value = val; - - } /* global */ -loop_cont: - sp->value = val; - sp->delta = delta; - sp += 1; - input_sym += 1; - } while ((syms_in_buf -= 1) > 0); /* process sym in buf */ - } while (symbols_left > 0); /* read all symbols */ - if (~checks) - dload_error(dlthis, "Checksum of symbols failed"); - -free_sym_buf: - kfree(my_sym_buf); - return; -} /* dload_symbols */ - -/***************************************************************************** - * Procedure symbol_table_free - * - * Parameters: - * none - * - * Effect: - * Frees any state used by the symbol table. - * - * WARNING: - * This routine is not allowed to declare errors! - **************************************************************************** */ -static void symbol_table_free(struct dload_state *dlthis) -{ - if (dlthis->local_symtab) { - if (dlthis->dload_errcount) { /* blow off our symbols */ - dlthis->mysym->purge_symbol_table(dlthis->mysym, - (unsigned) - dlthis->myhandle); - } - dlthis->mysym->dload_deallocate(dlthis->mysym, - dlthis->local_symtab); - } -} /* symbol_table_free */ - -/* .cinit Processing - * - * The dynamic loader does .cinit interpretation. cload_cinit() - * acts as a special write-to-target function, in that it takes relocated - * data from the normal data flow, and interprets it as .cinit actions. - * Because the normal data flow does not necessarily process the whole - * .cinit section in one buffer, cload_cinit() must be prepared to - * interpret the data piecemeal. A state machine is used for this - * purpose. - */ - -/* The following are only for use by reloc.c and things it calls */ -static const struct ldr_section_info cinit_info_init = { cinitname, 0, 0, - (ldr_addr)-1, 0, DLOAD_BSS, 0 -}; - -/************************************************************************* - * Procedure cload_cinit - * - * Parameters: - * ipacket Pointer to data packet to be loaded - * - * Effect: - * Interprets the data in the buffer as .cinit data, and performs the - * appropriate initializations. - *********************************************************************** */ -static void cload_cinit(struct dload_state *dlthis, - struct image_packet_t *ipacket) -{ -#if TDATA_TO_HOST(CINIT_COUNT)*BITS_PER_AU > 16 - s32 init_count, left; -#else - s16 init_count, left; -#endif - unsigned char *pktp = ipacket->img_data; - unsigned char *pktend = pktp + BYTE_TO_HOST_ROUND(ipacket->packet_size); - int temp; - ldr_addr atmp; - struct ldr_section_info cinit_info; - - /* PROCESS ALL THE INITIALIZATION RECORDS THE BUFFER. */ - while (true) { - left = pktend - pktp; - switch (dlthis->cinit_state) { - case CI_COUNT: /* count field */ - if (left < TDATA_TO_HOST(CINIT_COUNT)) - goto loopexit; - temp = dload_unpack(dlthis, (tgt_au_t *) pktp, - CINIT_COUNT * TDATA_AU_BITS, 0, - ROP_SGN); - pktp += TDATA_TO_HOST(CINIT_COUNT); - /* negative signifies BSS table, zero means done */ - if (temp <= 0) { - dlthis->cinit_state = CI_DONE; - break; - } - dlthis->cinit_count = temp; - dlthis->cinit_state = CI_ADDRESS; - break; -#if CINIT_ALIGN < CINIT_ADDRESS - case CI_PARTADDRESS: - pktp -= TDATA_TO_HOST(CINIT_ALIGN); - /* back up pointer into space courtesy of caller */ - *(uint16_t *) pktp = dlthis->cinit_addr; - /* stuff in saved bits !! FALL THRU !! */ -#endif - case CI_ADDRESS: /* Address field for a copy packet */ - if (left < TDATA_TO_HOST(CINIT_ADDRESS)) { -#if CINIT_ALIGN < CINIT_ADDRESS - if (left == TDATA_TO_HOST(CINIT_ALIGN)) { - /* address broken into halves */ - dlthis->cinit_addr = *(uint16_t *) pktp; - /* remember 1st half */ - dlthis->cinit_state = CI_PARTADDRESS; - left = 0; - } -#endif - goto loopexit; - } - atmp = dload_unpack(dlthis, (tgt_au_t *) pktp, - CINIT_ADDRESS * TDATA_AU_BITS, 0, - ROP_UNS); - pktp += TDATA_TO_HOST(CINIT_ADDRESS); -#if CINIT_PAGE_BITS > 0 - dlthis->cinit_page = atmp & - ((1 << CINIT_PAGE_BITS) - 1); - atmp >>= CINIT_PAGE_BITS; -#else - dlthis->cinit_page = CINIT_DEFAULT_PAGE; -#endif - dlthis->cinit_addr = atmp; - dlthis->cinit_state = CI_COPY; - break; - case CI_COPY: /* copy bits to the target */ - init_count = HOST_TO_TDATA(left); - if (init_count > dlthis->cinit_count) - init_count = dlthis->cinit_count; - if (init_count == 0) - goto loopexit; /* get more bits */ - cinit_info = cinit_info_init; - cinit_info.page = dlthis->cinit_page; - if (!dlthis->myio->writemem(dlthis->myio, pktp, - TDATA_TO_TADDR - (dlthis->cinit_addr), - &cinit_info, - TDATA_TO_HOST(init_count))) { - dload_error(dlthis, initfail, "write", - dlthis->cinit_addr); - } - dlthis->cinit_count -= init_count; - if (dlthis->cinit_count <= 0) { - dlthis->cinit_state = CI_COUNT; - init_count = (init_count + CINIT_ALIGN - 1) & - -CINIT_ALIGN; - /* align to next init */ - } - pktp += TDATA_TO_HOST(init_count); - dlthis->cinit_addr += init_count; - break; - case CI_DONE: /* no more .cinit to do */ - return; - } /* switch (cinit_state) */ - } /* while */ - -loopexit: - if (left > 0) { - dload_error(dlthis, "%d bytes left over in cinit packet", left); - dlthis->cinit_state = CI_DONE; /* left over bytes are bad */ - } -} /* cload_cinit */ - -/* Functions to interface to reloc.c - * - * reloc.c is the relocation module borrowed from the linker, with - * minimal (we hope) changes for our purposes. cload_sect_data() invokes - * this module on a section to relocate and load the image data for that - * section. The actual read and write actions are supplied by the global - * routines below. - */ - -/************************************************************************ - * Procedure relocate_packet - * - * Parameters: - * ipacket Pointer to an image packet to relocate - * - * Effect: - * Performs the required relocations on the packet. Returns a checksum - * of the relocation operations. - *********************************************************************** */ -#define MY_RELOC_BUF_SIZ 8 -/* careful! exists at the same time as the image buffer */ -static int relocate_packet(struct dload_state *dlthis, - struct image_packet_t *ipacket, - u32 *checks, bool *tramps_generated) -{ - u32 rnum; - *tramps_generated = false; - - rnum = ipacket->num_relocs; - do { /* all relocs */ - unsigned rinbuf; - int siz; - struct reloc_record_t *rp, rrec[MY_RELOC_BUF_SIZ]; - - rp = rrec; - rinbuf = rnum > MY_RELOC_BUF_SIZ ? MY_RELOC_BUF_SIZ : rnum; - siz = rinbuf * sizeof(struct reloc_record_t); - if (dlthis->strm->read_buffer(dlthis->strm, rp, siz) != siz) { - DL_ERROR(readstrm, "relocation"); - return 0; - } - /* reorder the bytes if need be */ - if (dlthis->reorder_map) - dload_reorder(rp, siz, dlthis->reorder_map); - - *checks += dload_checksum(rp, siz); - do { - /* perform the relocation operation */ - dload_relocate(dlthis, (tgt_au_t *) ipacket->img_data, - rp, tramps_generated, false); - rp += 1; - rnum -= 1; - } while ((rinbuf -= 1) > 0); - } while (rnum > 0); /* all relocs */ - /* If trampoline(s) were generated, we need to do an update of the - * trampoline copy of the packet since a 2nd phase relo will be done - * later. */ - if (*tramps_generated == true) { - dload_tramp_pkt_udpate(dlthis, - (dlthis->image_secn - - dlthis->ldr_sections), - dlthis->image_offset, ipacket); - } - - return 1; -} /* dload_read_reloc */ - -#define IPH_SIZE (sizeof(struct image_packet_t) - sizeof(u32)) - -/* VERY dangerous */ -static const char imagepak[] = { "image packet" }; - -struct img_buffer { - struct image_packet_t ipacket; - u8 bufr[BYTE_TO_HOST(IMAGE_PACKET_SIZE)]; -}; - -/************************************************************************* - * Procedure dload_data - * - * Parameters: - * none - * - * Effect: - * Read image data from input file, relocate it, and download it to the - * target. - *********************************************************************** */ -static void dload_data(struct dload_state *dlthis) -{ - u16 curr_sect; - struct doff_scnhdr_t *sptr = dlthis->sect_hdrs; - struct ldr_section_info *lptr = dlthis->ldr_sections; - struct img_buffer *ibuf; - u8 *dest; - - /* Indicates whether CINIT processing has occurred */ - bool cinit_processed = false; - - ibuf = kzalloc(sizeof(*ibuf), GFP_KERNEL); - if (!ibuf) - return; - - /* Loop through the sections and load them one at a time. - */ - for (curr_sect = 0; curr_sect < dlthis->dfile_hdr.df_no_scns; - curr_sect += 1) { - if (ds_needs_download(sptr)) { - s32 nip; - ldr_addr image_offset = 0; - /* set relocation info for this section */ - if (curr_sect < dlthis->allocated_secn_count) - dlthis->delta_runaddr = sptr->ds_paddr; - else { - lptr = (struct ldr_section_info *)sptr; - dlthis->delta_runaddr = 0; - } - dlthis->image_secn = lptr; -#if BITS_PER_AU > BITS_PER_BYTE - lptr->name = unpack_name(dlthis, sptr->ds_offset); -#endif - nip = sptr->ds_nipacks; - while ((nip -= 1) >= 0) { /* process packets */ - - s32 ipsize; - u32 checks; - bool tramp_generated = false; - - /* get the fixed header bits */ - if (dlthis->strm->read_buffer(dlthis->strm, - &ibuf->ipacket, - IPH_SIZE) != - IPH_SIZE) { - DL_ERROR(readstrm, imagepak); - goto free_ibuf; - } - /* reorder the header if need be */ - if (dlthis->reorder_map) { - dload_reorder(&ibuf->ipacket, IPH_SIZE, - dlthis->reorder_map); - } - /* now read the rest of the packet */ - ipsize = - BYTE_TO_HOST(DOFF_ALIGN - (ibuf->ipacket.packet_size)); - if (ipsize > BYTE_TO_HOST(IMAGE_PACKET_SIZE)) { - DL_ERROR("Bad image packet size %d", - ipsize); - goto free_ibuf; - } - dest = ibuf->bufr; - /* End of determination */ - - if (dlthis->strm->read_buffer(dlthis->strm, - ibuf->bufr, - ipsize) != - ipsize) { - DL_ERROR(readstrm, imagepak); - goto free_ibuf; - } - ibuf->ipacket.img_data = dest; - - /* reorder the bytes if need be */ -#if !defined(_BIG_ENDIAN) || (TARGET_AU_BITS > 16) - if (dlthis->reorder_map) { - dload_reorder(dest, ipsize, - dlthis->reorder_map); - } - checks = dload_checksum(dest, ipsize); -#else - if (dlthis->dfile_hdr.df_byte_reshuffle != - TARGET_ORDER(REORDER_MAP - (BYTE_RESHUFFLE_VALUE))) { - /* put image bytes in big-endian order, - * not PC order */ - dload_reorder(dest, ipsize, - TARGET_ORDER - (dlthis->dfile_hdr. - df_byte_reshuffle)); - } -#if TARGET_AU_BITS > 8 - checks = dload_reverse_checksum16(dest, ipsize); -#else - checks = dload_reverse_checksum(dest, ipsize); -#endif -#endif - - checks += dload_checksum(&ibuf->ipacket, - IPH_SIZE); - /* relocate the image bits as needed */ - if (ibuf->ipacket.num_relocs) { - dlthis->image_offset = image_offset; - if (!relocate_packet(dlthis, - &ibuf->ipacket, - &checks, - &tramp_generated)) - goto free_ibuf; /* error */ - } - if (~checks) - DL_ERROR(err_checksum, imagepak); - /* Only write the result to the target if no - * trampoline was generated. Otherwise it - *will be done during trampoline finalize. */ - - if (tramp_generated == false) { - - /* stuff the result into target - * memory */ - if (dload_check_type(sptr, - DLOAD_CINIT)) { - cload_cinit(dlthis, - &ibuf->ipacket); - cinit_processed = true; - } else { - /* FIXME */ - if (!dlthis->myio-> - writemem(dlthis-> - myio, - ibuf->bufr, - lptr-> - load_addr + - image_offset, - lptr, - BYTE_TO_HOST - (ibuf-> - ipacket. - packet_size))) { - DL_ERROR - ("Write to " - FMT_UI32 - " failed", - lptr-> - load_addr + - image_offset); - } - } - } - image_offset += - BYTE_TO_TADDR(ibuf->ipacket.packet_size); - } /* process packets */ - /* if this is a BSS section, we may want to fill it */ - if (!dload_check_type(sptr, DLOAD_BSS)) - goto loop_cont; - - if (!(dlthis->myoptions & DLOAD_INITBSS)) - goto loop_cont; - - if (cinit_processed) { - /* Don't clear BSS after load-time - * initialization */ - DL_ERROR - ("Zero-initialization at " FMT_UI32 - " after " "load-time initialization!", - lptr->load_addr); - goto loop_cont; - } - /* fill the .bss area */ - dlthis->myio->fillmem(dlthis->myio, - TADDR_TO_HOST(lptr->load_addr), - lptr, TADDR_TO_HOST(lptr->size), - DLOAD_FILL_BSS); - goto loop_cont; - } - /* if DS_DOWNLOAD_MASK */ - /* If not loading, but BSS, zero initialize */ - if (!dload_check_type(sptr, DLOAD_BSS)) - goto loop_cont; - - if (!(dlthis->myoptions & DLOAD_INITBSS)) - goto loop_cont; - - if (curr_sect >= dlthis->allocated_secn_count) - lptr = (struct ldr_section_info *)sptr; - - if (cinit_processed) { - /*Don't clear BSS after load-time initialization */ - DL_ERROR("Zero-initialization at " FMT_UI32 - " attempted after " - "load-time initialization!", lptr->load_addr); - goto loop_cont; - } - /* fill the .bss area */ - dlthis->myio->fillmem(dlthis->myio, - TADDR_TO_HOST(lptr->load_addr), lptr, - TADDR_TO_HOST(lptr->size), - DLOAD_FILL_BSS); -loop_cont: - sptr += 1; - lptr += 1; - } /* load sections */ - - /* Finalize any trampolines that were created during the load */ - if (dload_tramp_finalize(dlthis) == 0) { - DL_ERROR("Finalization of auto-trampolines (size = " FMT_UI32 - ") failed", dlthis->tramp.tramp_sect_next_addr); - } -free_ibuf: - kfree(ibuf); - return; -} /* dload_data */ - -/************************************************************************* - * Procedure dload_reorder - * - * Parameters: - * data 32-bit aligned pointer to data to be byte-swapped - * dsiz size of the data to be reordered in sizeof() units. - * map 32-bit map defining how to reorder the data. Value - * must be REORDER_MAP() of some permutation - * of 0x00 01 02 03 - * - * Effect: - * Re-arranges the bytes in each word according to the map specified. - * - *********************************************************************** */ -/* mask for byte shift count */ -#define SHIFT_COUNT_MASK (3 << LOG_BITS_PER_BYTE) - -void dload_reorder(void *data, int dsiz, unsigned int map) -{ - register u32 tmp, tmap, datv; - u32 *dp = (u32 *) data; - - map <<= LOG_BITS_PER_BYTE; /* align map with SHIFT_COUNT_MASK */ - do { - tmp = 0; - datv = *dp; - tmap = map; - do { - tmp |= (datv & BYTE_MASK) << (tmap & SHIFT_COUNT_MASK); - tmap >>= BITS_PER_BYTE; - } while (datv >>= BITS_PER_BYTE); - *dp++ = tmp; - } while ((dsiz -= sizeof(u32)) > 0); -} /* dload_reorder */ - -/************************************************************************* - * Procedure dload_checksum - * - * Parameters: - * data 32-bit aligned pointer to data to be checksummed - * siz size of the data to be checksummed in sizeof() units. - * - * Effect: - * Returns a checksum of the specified block - * - *********************************************************************** */ -u32 dload_checksum(void *data, unsigned siz) -{ - u32 sum; - u32 *dp; - int left; - - sum = 0; - dp = (u32 *) data; - for (left = siz; left > 0; left -= sizeof(u32)) - sum += *dp++; - return sum; -} /* dload_checksum */ - -#if HOST_ENDIANNESS -/************************************************************************* - * Procedure dload_reverse_checksum - * - * Parameters: - * data 32-bit aligned pointer to data to be checksummed - * siz size of the data to be checksummed in sizeof() units. - * - * Effect: - * Returns a checksum of the specified block, which is assumed to be bytes - * in big-endian order. - * - * Notes: - * In a big-endian host, things like the string table are stored as bytes - * in host order. But dllcreate always checksums in little-endian order. - * It is most efficient to just handle the difference a word at a time. - * - ********************************************************************** */ -u32 dload_reverse_checksum(void *data, unsigned siz) -{ - u32 sum, temp; - u32 *dp; - int left; - - sum = 0; - dp = (u32 *) data; - - for (left = siz; left > 0; left -= sizeof(u32)) { - temp = *dp++; - sum += temp << BITS_PER_BYTE * 3; - sum += temp >> BITS_PER_BYTE * 3; - sum += (temp >> BITS_PER_BYTE) & (BYTE_MASK << BITS_PER_BYTE); - sum += (temp & (BYTE_MASK << BITS_PER_BYTE)) << BITS_PER_BYTE; - } - - return sum; -} /* dload_reverse_checksum */ - -#if (TARGET_AU_BITS > 8) && (TARGET_AU_BITS < 32) -u32 dload_reverse_checksum16(void *data, unsigned siz) -{ - uint_fast32_t sum, temp; - u32 *dp; - int left; - - sum = 0; - dp = (u32 *) data; - - for (left = siz; left > 0; left -= sizeof(u32)) { - temp = *dp++; - sum += temp << BITS_PER_BYTE * 2; - sum += temp >> BITS_PER_BYTE * 2; - } - - return sum; -} /* dload_reverse_checksum16 */ -#endif -#endif - -/************************************************************************* - * Procedure swap_words - * - * Parameters: - * data 32-bit aligned pointer to data to be swapped - * siz size of the data to be swapped. - * bitmap Bit map of how to swap each 32-bit word; 1 => 2 shorts, - * 0 => 1 long - * - * Effect: - * Swaps the specified data according to the specified map - * - *********************************************************************** */ -static void swap_words(void *data, unsigned siz, unsigned bitmap) -{ - register int i; -#if TARGET_AU_BITS < 16 - register u16 *sp; -#endif - register u32 *lp; - - siz /= sizeof(u16); - -#if TARGET_AU_BITS < 16 - /* pass 1: do all the bytes */ - i = siz; - sp = (u16 *) data; - do { - register u16 tmp; - - tmp = *sp; - *sp++ = SWAP16BY8(tmp); - } while ((i -= 1) > 0); -#endif - -#if TARGET_AU_BITS < 32 - /* pass 2: fixup the 32-bit words */ - i = siz >> 1; - lp = (u32 *) data; - do { - if ((bitmap & 1) == 0) { - register u32 tmp; - tmp = *lp; - *lp = SWAP32BY16(tmp); - } - lp += 1; - bitmap >>= 1; - } while ((i -= 1) > 0); -#endif -} /* swap_words */ - -/************************************************************************* - * Procedure copy_tgt_strings - * - * Parameters: - * dstp Destination address. Assumed to be 32-bit aligned - * srcp Source address. Assumed to be 32-bit aligned - * charcount Number of characters to copy. - * - * Effect: - * Copies strings from the source (which is in usual .dof file order on - * the loading processor) to the destination buffer (which should be in proper - * target addressable unit order). Makes sure the last string in the - * buffer is NULL terminated (for safety). - * Returns the first unused destination address. - *********************************************************************** */ -static char *copy_tgt_strings(void *dstp, void *srcp, unsigned charcount) -{ - register tgt_au_t *src = (tgt_au_t *) srcp; - register tgt_au_t *dst = (tgt_au_t *) dstp; - register int cnt = charcount; - - do { -#if TARGET_AU_BITS <= BITS_PER_AU - /* byte-swapping issues may exist for strings on target */ - *dst++ = *src++; -#else - *dst++ = *src++; -#endif - } while ((cnt -= (sizeof(tgt_au_t) * BITS_PER_AU / BITS_PER_BYTE)) > 0); - /*apply force to make sure that the string table has null terminator */ -#if (BITS_PER_AU == BITS_PER_BYTE) && (TARGET_AU_BITS == BITS_PER_BYTE) - dst[-1] = 0; -#else - /* little endian */ - dst[-1] &= (1 << (BITS_PER_AU - BITS_PER_BYTE)) - 1; -#endif - return (char *)dst; -} /* copy_tgt_strings */ - -/************************************************************************* - * Procedure init_module_handle - * - * Parameters: - * none - * - * Effect: - * Initializes the module handle we use to enable unloading, and installs - * the debug information required by the target. - * - * Notes: - * The handle returned from dynamic_load_module needs to encapsulate all the - * allocations done for the module, and enable them plus the modules symbols to - * be deallocated. - * - *********************************************************************** */ -#ifndef _BIG_ENDIAN -static const struct ldr_section_info dllview_info_init = { ".dllview", 0, 0, - (ldr_addr)-1, DBG_LIST_PAGE, DLOAD_DATA, 0 -}; -#else -static const struct ldr_section_info dllview_info_init = { ".dllview", 0, 0, - (ldr_addr)-1, DLOAD_DATA, DBG_LIST_PAGE, 0 -}; -#endif -static void init_module_handle(struct dload_state *dlthis) -{ - struct my_handle *hndl; - u16 curr_sect; - struct ldr_section_info *asecs; - struct dll_module *dbmod; - struct dll_sect *dbsec; - struct dbg_mirror_root *mlist; - register char *cp; - struct modules_header mhdr; - struct ldr_section_info dllview_info; - struct dynload_symbol *debug_mirror_sym; - - hndl = dlthis->myhandle; - if (!hndl) - return; /* must be errors detected, so forget it */ - - /* Store the section count */ - hndl->secn_count = dlthis->allocated_secn_count; - - /* If a trampoline section was created, add it in */ - if (dlthis->tramp.tramp_sect_next_addr != 0) - hndl->secn_count += 1; - - hndl->secn_count = hndl->secn_count << 1; - - hndl->secn_count = dlthis->allocated_secn_count << 1; -#ifndef TARGET_ENDIANNESS - if (dlthis->big_e_target) - hndl->secn_count += 1; /* flag for big-endian */ -#endif - if (dlthis->dload_errcount) - return; /* abandon if errors detected */ - /* Locate the symbol that names the header for the CCS debug list - of modules. If not found, we just don't generate the debug record. - If found, we create our modules list. We make sure to create the - loader_dllview_root even if there is no relocation info to record, - just to try to put both symbols in the same symbol table and - module. */ - debug_mirror_sym = dlthis->mysym->find_matching_symbol(dlthis->mysym, - loader_dllview_root); - if (!debug_mirror_sym) { - struct dynload_symbol *dlmodsym; - struct dbg_mirror_root *mlst; - - /* our root symbol is not yet present; - check if we have DLModules defined */ - dlmodsym = dlthis->mysym->find_matching_symbol(dlthis->mysym, - LINKER_MODULES_HEADER); - if (!dlmodsym) - return; /* no DLModules list so no debug info */ - /* if we have DLModules defined, construct our header */ - mlst = (struct dbg_mirror_root *) - dlthis->mysym->dload_allocate(dlthis->mysym, - sizeof(struct - dbg_mirror_root)); - if (!mlst) { - DL_ERROR(err_alloc, sizeof(struct dbg_mirror_root)); - return; - } - mlst->next = NULL; - mlst->changes = 0; - mlst->refcount = 0; - mlst->dbthis = TDATA_TO_TADDR(dlmodsym->value); - /* add our root symbol */ - debug_mirror_sym = dlthis->mysym->add_to_symbol_table - (dlthis->mysym, loader_dllview_root, - (unsigned)dlthis->myhandle); - if (!debug_mirror_sym) { - /* failed, recover memory */ - dlthis->mysym->dload_deallocate(dlthis->mysym, mlst); - return; - } - debug_mirror_sym->value = (u32) mlst; - } - /* First create the DLLview record and stuff it into the buffer. - Then write it to the DSP. Record pertinent locations in our hndl, - and add it to the per-processor list of handles with debug info. */ -#ifndef DEBUG_HEADER_IN_LOADER - mlist = (struct dbg_mirror_root *)debug_mirror_sym->value; - if (!mlist) - return; -#else - mlist = (struct dbg_mirror_root *)&debug_list_header; -#endif - hndl->dm.root = mlist; /* set pointer to root into our handle */ - if (!dlthis->allocated_secn_count) - return; /* no load addresses to be recorded */ - /* reuse temporary symbol storage */ - dbmod = (struct dll_module *)dlthis->local_symtab; - /* Create the DLLview record in the memory we retain for our handle */ - dbmod->num_sects = dlthis->allocated_secn_count; - dbmod->timestamp = dlthis->verify.dv_timdat; - dbmod->version = INIT_VERSION; - dbmod->verification = VERIFICATION; - asecs = dlthis->ldr_sections; - dbsec = dbmod->sects; - for (curr_sect = dlthis->allocated_secn_count; - curr_sect > 0; curr_sect -= 1) { - dbsec->sect_load_adr = asecs->load_addr; - dbsec->sect_run_adr = asecs->run_addr; - dbsec += 1; - asecs += 1; - } - - /* If a trampoline section was created go ahead and add its info */ - if (dlthis->tramp.tramp_sect_next_addr != 0) { - dbmod->num_sects++; - dbsec->sect_load_adr = asecs->load_addr; - dbsec->sect_run_adr = asecs->run_addr; - dbsec++; - asecs++; - } - - /* now cram in the names */ - cp = copy_tgt_strings(dbsec, dlthis->str_head, - dlthis->debug_string_size); - - /* If a trampoline section was created, add its name so DLLView - * can show the user the section info. */ - if (dlthis->tramp.tramp_sect_next_addr != 0) { - cp = copy_tgt_strings(cp, - dlthis->tramp.final_string_table, - strlen(dlthis->tramp.final_string_table) + - 1); - } - - /* round off the size of the debug record, and remember same */ - hndl->dm.dbsiz = HOST_TO_TDATA_ROUND(cp - (char *)dbmod); - *cp = 0; /* strictly to make our test harness happy */ - dllview_info = dllview_info_init; - dllview_info.size = TDATA_TO_TADDR(hndl->dm.dbsiz); - /* Initialize memory context to default heap */ - dllview_info.context = 0; - hndl->dm.context = 0; - /* fill in next pointer and size */ - if (mlist->next) { - dbmod->next_module = TADDR_TO_TDATA(mlist->next->dm.dbthis); - dbmod->next_module_size = mlist->next->dm.dbsiz; - } else { - dbmod->next_module_size = 0; - dbmod->next_module = 0; - } - /* allocate memory for on-DSP DLLview debug record */ - if (!dlthis->myalloc) - return; - if (!dlthis->myalloc->dload_allocate(dlthis->myalloc, &dllview_info, - HOST_TO_TADDR(sizeof(u32)))) { - return; - } - /* Store load address of .dllview section */ - hndl->dm.dbthis = dllview_info.load_addr; - /* Store memory context (segid) in which .dllview section - * was allocated */ - hndl->dm.context = dllview_info.context; - mlist->refcount += 1; - /* swap bytes in the entire debug record, but not the string table */ - if (TARGET_ENDIANNESS_DIFFERS(TARGET_BIG_ENDIAN)) { - swap_words(dbmod, (char *)dbsec - (char *)dbmod, - DLL_MODULE_BITMAP); - } - /* Update the DLLview list on the DSP write new record */ - if (!dlthis->myio->writemem(dlthis->myio, dbmod, - dllview_info.load_addr, &dllview_info, - TADDR_TO_HOST(dllview_info.size))) { - return; - } - /* write new header */ - mhdr.first_module_size = hndl->dm.dbsiz; - mhdr.first_module = TADDR_TO_TDATA(dllview_info.load_addr); - /* swap bytes in the module header, if needed */ - if (TARGET_ENDIANNESS_DIFFERS(TARGET_BIG_ENDIAN)) { - swap_words(&mhdr, sizeof(struct modules_header) - sizeof(u16), - MODULES_HEADER_BITMAP); - } - dllview_info = dllview_info_init; - if (!dlthis->myio->writemem(dlthis->myio, &mhdr, mlist->dbthis, - &dllview_info, - sizeof(struct modules_header) - - sizeof(u16))) { - return; - } - /* Add the module handle to this processor's list - of handles with debug info */ - hndl->dm.next = mlist->next; - if (hndl->dm.next) - hndl->dm.next->dm.prev = hndl; - hndl->dm.prev = (struct my_handle *)mlist; - mlist->next = hndl; /* insert after root */ -} /* init_module_handle */ - -/************************************************************************* - * Procedure dynamic_unload_module - * - * Parameters: - * mhandle A module handle from dynamic_load_module - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * - * Effect: - * The module specified by mhandle is unloaded. Unloading causes all - * target memory to be deallocated, all symbols defined by the module to - * be purged, and any host-side storage used by the dynamic loader for - * this module to be released. - * - * Returns: - * Zero for success. On error, the number of errors detected is returned. - * Individual errors are reported using syms->error_report(). - *********************************************************************** */ -int dynamic_unload_module(void *mhandle, - struct dynamic_loader_sym *syms, - struct dynamic_loader_allocate *alloc, - struct dynamic_loader_initialize *init) -{ - s16 curr_sect; - struct ldr_section_info *asecs; - struct my_handle *hndl; - struct dbg_mirror_root *root; - unsigned errcount = 0; - struct ldr_section_info dllview_info = dllview_info_init; - struct modules_header mhdr; - - hndl = (struct my_handle *)mhandle; - if (!hndl) - return 0; /* if handle is null, nothing to do */ - /* Clear out the module symbols - * Note that if this is the module that defined MODULES_HEADER - (the head of the target debug list) - * then this operation will blow away that symbol. - It will therefore be impossible for subsequent - * operations to add entries to this un-referenceable list. */ - if (!syms) - return 1; - syms->purge_symbol_table(syms, (unsigned)hndl); - /* Deallocate target memory for sections - * NOTE: The trampoline section, if created, gets deleted here, too */ - - asecs = hndl->secns; - if (alloc) - for (curr_sect = (hndl->secn_count >> 1); curr_sect > 0; - curr_sect -= 1) { - asecs->name = NULL; - alloc->dload_deallocate(alloc, asecs++); - } - root = hndl->dm.root; - if (!root) { - /* there is a debug list containing this module */ - goto func_end; - } - if (!hndl->dm.dbthis) { /* target-side dllview record exists */ - goto loop_end; - } - /* Retrieve memory context in which .dllview was allocated */ - dllview_info.context = hndl->dm.context; - if (hndl->dm.prev == hndl) - goto exitunltgt; - - /* target-side dllview record is in list */ - /* dequeue this record from our GPP-side mirror list */ - hndl->dm.prev->dm.next = hndl->dm.next; - if (hndl->dm.next) - hndl->dm.next->dm.prev = hndl->dm.prev; - /* Update next_module of previous entry in target list - * We are using mhdr here as a surrogate for either a - struct modules_header or a dll_module */ - if (hndl->dm.next) { - mhdr.first_module = TADDR_TO_TDATA(hndl->dm.next->dm.dbthis); - mhdr.first_module_size = hndl->dm.next->dm.dbsiz; - } else { - mhdr.first_module = 0; - mhdr.first_module_size = 0; - } - if (!init) - goto exitunltgt; - - if (!init->connect(init)) { - dload_syms_error(syms, iconnect); - errcount += 1; - goto exitunltgt; - } - /* swap bytes in the module header, if needed */ - if (TARGET_ENDIANNESS_DIFFERS(hndl->secn_count & 0x1)) { - swap_words(&mhdr, sizeof(struct modules_header) - sizeof(u16), - MODULES_HEADER_BITMAP); - } - if (!init->writemem(init, &mhdr, hndl->dm.prev->dm.dbthis, - &dllview_info, sizeof(struct modules_header) - - sizeof(mhdr.update_flag))) { - dload_syms_error(syms, dlvwrite); - errcount += 1; - } - /* update change counter */ - root->changes += 1; - if (!init->writemem(init, &(root->changes), - root->dbthis + HOST_TO_TADDR - (sizeof(mhdr.first_module) + - sizeof(mhdr.first_module_size)), - &dllview_info, sizeof(mhdr.update_flag))) { - dload_syms_error(syms, dlvwrite); - errcount += 1; - } - init->release(init); -exitunltgt: - /* release target storage */ - dllview_info.size = TDATA_TO_TADDR(hndl->dm.dbsiz); - dllview_info.load_addr = hndl->dm.dbthis; - if (alloc) - alloc->dload_deallocate(alloc, &dllview_info); - root->refcount -= 1; - /* target-side dllview record exists */ -loop_end: -#ifndef DEBUG_HEADER_IN_LOADER - if (root->refcount <= 0) { - /* if all references gone, blow off the header */ - /* our root symbol may be gone due to the Purge above, - but if not, do not destroy the root */ - if (syms->find_matching_symbol - (syms, loader_dllview_root) == NULL) - syms->dload_deallocate(syms, root); - } -#endif -func_end: - /* there is a debug list containing this module */ - syms->dload_deallocate(syms, mhandle); /* release our storage */ - return errcount; -} /* dynamic_unload_module */ - -#if BITS_PER_AU > BITS_PER_BYTE -/************************************************************************* - * Procedure unpack_name - * - * Parameters: - * soffset Byte offset into the string table - * - * Effect: - * Returns a pointer to the string specified by the offset supplied, or - * NULL for error. - * - *********************************************************************** */ -static char *unpack_name(struct dload_state *dlthis, u32 soffset) -{ - u8 tmp, *src; - char *dst; - - if (soffset >= dlthis->dfile_hdr.df_strtab_size) { - dload_error(dlthis, "Bad string table offset " FMT_UI32, - soffset); - return NULL; - } - src = (uint_least8_t *) dlthis->str_head + - (soffset >> (LOG_BITS_PER_AU - LOG_BITS_PER_BYTE)); - dst = dlthis->str_temp; - if (soffset & 1) - *dst++ = *src++; /* only 1 character in first word */ - do { - tmp = *src++; - *dst = (tmp >> BITS_PER_BYTE); - if (!(*dst++)) - break; - } while ((*dst++ = tmp & BYTE_MASK)); - dlthis->temp_len = dst - dlthis->str_temp; - /* squirrel away length including terminating null */ - return dlthis->str_temp; -} /* unpack_name */ -#endif diff --git a/drivers/staging/tidspbridge/dynload/dload_internal.h b/drivers/staging/tidspbridge/dynload/dload_internal.h deleted file mode 100644 index b9d079b96190..000000000000 --- a/drivers/staging/tidspbridge/dynload/dload_internal.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * dload_internal.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _DLOAD_INTERNAL_ -#define _DLOAD_INTERNAL_ - -#include - -/* - * Internal state definitions for the dynamic loader - */ - -/* type used for relocation intermediate results */ -typedef s32 rvalue; - -/* unsigned version of same; must have at least as many bits */ -typedef u32 urvalue; - -/* - * Dynamic loader configuration constants - */ -/* error issued if input has more sections than this limit */ -#define REASONABLE_SECTION_LIMIT 100 - -/* (Addressable unit) value used to clear BSS section */ -#define DLOAD_FILL_BSS 0 - -/* - * Reorder maps explained (?) - * - * The doff file format defines a 32-bit pattern used to determine the - * byte order of an image being read. That value is - * BYTE_RESHUFFLE_VALUE == 0x00010203 - * For purposes of the reorder routine, we would rather have the all-is-OK - * for 32-bits pattern be 0x03020100. This first macro makes the - * translation from doff file header value to MAP value: */ -#define REORDER_MAP(rawmap) ((rawmap) ^ 0x3030303) -/* This translation is made in dload_headers. Thereafter, the all-is-OK - * value for the maps stored in dlthis is REORDER_MAP(BYTE_RESHUFFLE_VALUE). - * But sadly, not all bits of the doff file are 32-bit integers. - * The notable exceptions are strings and image bits. - * Strings obey host byte order: */ -#if defined(_BIG_ENDIAN) -#define HOST_BYTE_ORDER(cookedmap) ((cookedmap) ^ 0x3030303) -#else -#define HOST_BYTE_ORDER(cookedmap) (cookedmap) -#endif -/* Target bits consist of target AUs (could be bytes, or 16-bits, - * or 32-bits) stored as an array in host order. A target order - * map is defined by: */ -#if !defined(_BIG_ENDIAN) || TARGET_AU_BITS > 16 -#define TARGET_ORDER(cookedmap) (cookedmap) -#elif TARGET_AU_BITS > 8 -#define TARGET_ORDER(cookedmap) ((cookedmap) ^ 0x2020202) -#else -#define TARGET_ORDER(cookedmap) ((cookedmap) ^ 0x3030303) -#endif - -/* forward declaration for handle returned by dynamic loader */ -struct my_handle; - -/* - * a list of module handles, which mirrors the debug list on the target - */ -struct dbg_mirror_root { - /* must be same as dbg_mirror_list; __DLModules address on target */ - u32 dbthis; - struct my_handle *next; /* must be same as dbg_mirror_list */ - u16 changes; /* change counter */ - u16 refcount; /* number of modules referencing this root */ -}; - -struct dbg_mirror_list { - u32 dbthis; - struct my_handle *next, *prev; - struct dbg_mirror_root *root; - u16 dbsiz; - u32 context; /* Save context for .dllview memory allocation */ -}; - -#define VARIABLE_SIZE 1 -/* - * the structure we actually return as an opaque module handle - */ -struct my_handle { - struct dbg_mirror_list dm; /* !!! must be first !!! */ - /* sections following << 1, LSB is set for big-endian target */ - u16 secn_count; - struct ldr_section_info secns[VARIABLE_SIZE]; -}; -#define MY_HANDLE_SIZE (sizeof(struct my_handle) -\ - sizeof(struct ldr_section_info)) -/* real size of my_handle */ - -/* - * reduced symbol structure used for symbols during relocation - */ -struct local_symbol { - s32 value; /* Relocated symbol value */ - s32 delta; /* Original value in input file */ - s16 secnn; /* section number */ - s16 sclass; /* symbol class */ -}; - -/* - * Trampoline data structures - */ -#define TRAMP_NO_GEN_AVAIL 65535 -#define TRAMP_SYM_PREFIX "__$dbTR__" -#define TRAMP_SECT_NAME ".dbTR" -/* MUST MATCH THE LENGTH ABOVE!! */ -#define TRAMP_SYM_PREFIX_LEN 9 -/* Includes NULL termination */ -#define TRAMP_SYM_HEX_ASCII_LEN 9 - -#define GET_CONTAINER(ptr, type, field) ((type *)((unsigned long)ptr -\ - (unsigned long)(&((type *)0)->field))) -#ifndef FIELD_OFFSET -#define FIELD_OFFSET(type, field) ((unsigned long)(&((type *)0)->field)) -#endif - -/* - The trampoline code for the target is located in a table called - "tramp_gen_info" with is indexed by looking up the index in the table - "tramp_map". The tramp_map index is acquired using the target - HASH_FUNC on the relocation type that caused the trampoline. Each - trampoline code table entry MUST follow this format: - - |----------------------------------------------| - | tramp_gen_code_hdr | - |----------------------------------------------| - | Trampoline image code | - | (the raw instruction code for the target) | - |----------------------------------------------| - | Relocation entries for the image code | - |----------------------------------------------| - - This is very similar to how image data is laid out in the DOFF file - itself. - */ -struct tramp_gen_code_hdr { - u32 tramp_code_size; /* in BYTES */ - u32 num_relos; - u32 relo_offset; /* in BYTES */ -}; - -struct tramp_img_pkt { - struct tramp_img_pkt *next; /* MUST BE FIRST */ - u32 base; - struct tramp_gen_code_hdr hdr; - u8 payload[VARIABLE_SIZE]; -}; - -struct tramp_img_dup_relo { - struct tramp_img_dup_relo *next; - struct reloc_record_t relo; -}; - -struct tramp_img_dup_pkt { - struct tramp_img_dup_pkt *next; /* MUST BE FIRST */ - s16 secnn; - u32 offset; - struct image_packet_t img_pkt; - struct tramp_img_dup_relo *relo_chain; - - /* PAYLOAD OF IMG PKT FOLLOWS */ -}; - -struct tramp_sym { - struct tramp_sym *next; /* MUST BE FIRST */ - u32 index; - u32 str_index; - struct local_symbol sym_info; -}; - -struct tramp_string { - struct tramp_string *next; /* MUST BE FIRST */ - u32 index; - char str[VARIABLE_SIZE]; /* NULL terminated */ -}; - -struct tramp_info { - u32 tramp_sect_next_addr; - struct ldr_section_info sect_info; - - struct tramp_sym *symbol_head; - struct tramp_sym *symbol_tail; - u32 tramp_sym_next_index; - struct local_symbol *final_sym_table; - - struct tramp_string *string_head; - struct tramp_string *string_tail; - u32 tramp_string_next_index; - u32 tramp_string_size; - char *final_string_table; - - struct tramp_img_pkt *tramp_pkts; - struct tramp_img_dup_pkt *dup_pkts; -}; - -/* - * States of the .cinit state machine - */ -enum cinit_mode { - CI_COUNT = 0, /* expecting a count */ - CI_ADDRESS, /* expecting an address */ -#if CINIT_ALIGN < CINIT_ADDRESS /* handle case of partial address field */ - CI_PARTADDRESS, /* have only part of the address */ -#endif - CI_COPY, /* in the middle of copying data */ - CI_DONE /* end of .cinit table */ -}; - -/* - * The internal state of the dynamic loader, which is passed around as - * an object - */ -struct dload_state { - struct dynamic_loader_stream *strm; /* The module input stream */ - struct dynamic_loader_sym *mysym; /* Symbols for this session */ - /* target memory allocator */ - struct dynamic_loader_allocate *myalloc; - struct dynamic_loader_initialize *myio; /* target memory initializer */ - unsigned myoptions; /* Options parameter dynamic_load_module */ - - char *str_head; /* Pointer to string table */ -#if BITS_PER_AU > BITS_PER_BYTE - char *str_temp; /* Pointer to temporary buffer for strings */ - /* big enough to hold longest string */ - unsigned temp_len; /* length of last temporary string */ - char *xstrings; /* Pointer to buffer for expanded */ - /* strings for sec names */ -#endif - /* Total size of strings for DLLView section names */ - unsigned debug_string_size; - /* Pointer to parallel section info for allocated sections only */ - struct doff_scnhdr_t *sect_hdrs; /* Pointer to section table */ - struct ldr_section_info *ldr_sections; -#if TMS32060 - /* The address of the start of the .bss section */ - ldr_addr bss_run_base; -#endif - struct local_symbol *local_symtab; /* Relocation symbol table */ - - /* pointer to DL section info for the section being relocated */ - struct ldr_section_info *image_secn; - /* change in run address for current section during relocation */ - ldr_addr delta_runaddr; - ldr_addr image_offset; /* offset of current packet in section */ - enum cinit_mode cinit_state; /* current state of cload_cinit() */ - int cinit_count; /* the current count */ - ldr_addr cinit_addr; /* the current address */ - s16 cinit_page; /* the current page */ - /* Handle to be returned by dynamic_load_module */ - struct my_handle *myhandle; - unsigned dload_errcount; /* Total # of errors reported so far */ - /* Number of target sections that require allocation and relocation */ - unsigned allocated_secn_count; -#ifndef TARGET_ENDIANNESS - int big_e_target; /* Target data in big-endian format */ -#endif - /* map for reordering bytes, 0 if not needed */ - u32 reorder_map; - struct doff_filehdr_t dfile_hdr; /* DOFF file header structure */ - struct doff_verify_rec_t verify; /* Verify record */ - - struct tramp_info tramp; /* Trampoline data, if needed */ - - int relstkidx; /* index into relocation value stack */ - /* relocation value stack used in relexp.c */ - rvalue relstk[STATIC_EXPR_STK_SIZE]; - -}; - -#ifdef TARGET_ENDIANNESS -#define TARGET_BIG_ENDIAN TARGET_ENDIANNESS -#else -#define TARGET_BIG_ENDIAN (dlthis->big_e_target) -#endif - -/* - * Exports from cload.c to rest of the world - */ -extern void dload_error(struct dload_state *dlthis, const char *errtxt, ...); -extern void dload_syms_error(struct dynamic_loader_sym *syms, - const char *errtxt, ...); -extern void dload_headers(struct dload_state *dlthis); -extern void dload_strings(struct dload_state *dlthis, bool sec_names_only); -extern void dload_sections(struct dload_state *dlthis); -extern void dload_reorder(void *data, int dsiz, u32 map); -extern u32 dload_checksum(void *data, unsigned siz); - -#if HOST_ENDIANNESS -extern uint32_t dload_reverse_checksum(void *data, unsigned siz); -#if (TARGET_AU_BITS > 8) && (TARGET_AU_BITS < 32) -extern uint32_t dload_reverse_checksum16(void *data, unsigned siz); -#endif -#endif - -/* - * exported by reloc.c - */ -extern void dload_relocate(struct dload_state *dlthis, tgt_au_t *data, - struct reloc_record_t *rp, bool *tramps_generated, - bool second_pass); - -extern rvalue dload_unpack(struct dload_state *dlthis, tgt_au_t *data, - int fieldsz, int offset, unsigned sgn); - -extern int dload_repack(struct dload_state *dlthis, rvalue val, tgt_au_t *data, - int fieldsz, int offset, unsigned sgn); - -/* - * exported by tramp.c - */ -extern bool dload_tramp_avail(struct dload_state *dlthis, - struct reloc_record_t *rp); - -int dload_tramp_generate(struct dload_state *dlthis, s16 secnn, - u32 image_offset, struct image_packet_t *ipacket, - struct reloc_record_t *rp); - -extern int dload_tramp_pkt_udpate(struct dload_state *dlthis, - s16 secnn, u32 image_offset, - struct image_packet_t *ipacket); - -extern int dload_tramp_finalize(struct dload_state *dlthis); - -extern void dload_tramp_cleanup(struct dload_state *dlthis); - -#endif /* _DLOAD_INTERNAL_ */ diff --git a/drivers/staging/tidspbridge/dynload/doff.h b/drivers/staging/tidspbridge/dynload/doff.h deleted file mode 100644 index a7c3145746ee..000000000000 --- a/drivers/staging/tidspbridge/dynload/doff.h +++ /dev/null @@ -1,354 +0,0 @@ -/* - * doff.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Structures & definitions used for dynamically loaded modules file format. - * This format is a reformatted version of COFF. It optimizes the layout for - * the dynamic loader. - * - * .dof files, when viewed as a sequence of 32-bit integers, look the same - * on big-endian and little-endian machines. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _DOFF_H -#define _DOFF_H - - -#define BYTE_RESHUFFLE_VALUE 0x00010203 - -/* DOFF file header containing fields categorizing the remainder of the file */ -struct doff_filehdr_t { - - /* string table size, including filename, in bytes */ - u32 df_strtab_size; - - /* entry point if one exists */ - u32 df_entrypt; - - /* identifies byte ordering of file; - * always set to BYTE_RESHUFFLE_VALUE */ - u32 df_byte_reshuffle; - - /* Size of the string table up to and including the last section name */ - /* Size includes the name of the COFF file also */ - u32 df_scn_name_size; - -#ifndef _BIG_ENDIAN - /* number of symbols */ - u16 df_no_syms; - - /* length in bytes of the longest string, including terminating NULL */ - /* excludes the name of the file */ - u16 df_max_str_len; - - /* total number of sections including no-load ones */ - u16 df_no_scns; - - /* number of sections containing target code allocated or downloaded */ - u16 df_target_scns; - - /* unique id for dll file format & version */ - u16 df_doff_version; - - /* identifies ISA */ - u16 df_target_id; - - /* useful file flags */ - u16 df_flags; - - /* section reference for entry point, N_UNDEF for none, */ - /* N_ABS for absolute address */ - s16 df_entry_secn; -#else - /* length of the longest string, including terminating NULL */ - u16 df_max_str_len; - - /* number of symbols */ - u16 df_no_syms; - - /* number of sections containing target code allocated or downloaded */ - u16 df_target_scns; - - /* total number of sections including no-load ones */ - u16 df_no_scns; - - /* identifies ISA */ - u16 df_target_id; - - /* unique id for dll file format & version */ - u16 df_doff_version; - - /* section reference for entry point, N_UNDEF for none, */ - /* N_ABS for absolute address */ - s16 df_entry_secn; - - /* useful file flags */ - u16 df_flags; -#endif - /* checksum for file header record */ - u32 df_checksum; - -}; - -/* flags in the df_flags field */ -#define DF_LITTLE 0x100 -#define DF_BIG 0x200 -#define DF_BYTE_ORDER (DF_LITTLE | DF_BIG) - -/* Supported processors */ -#define TMS470_ID 0x97 -#define LEAD_ID 0x98 -#define TMS32060_ID 0x99 -#define LEAD3_ID 0x9c - -/* Primary processor for loading */ -#if TMS32060 -#define TARGET_ID TMS32060_ID -#endif - -/* Verification record containing values used to test integrity of the bits */ -struct doff_verify_rec_t { - - /* time and date stamp */ - u32 dv_timdat; - - /* checksum for all section records */ - u32 dv_scn_rec_checksum; - - /* checksum for string table */ - u32 dv_str_tab_checksum; - - /* checksum for symbol table */ - u32 dv_sym_tab_checksum; - - /* checksum for verification record */ - u32 dv_verify_rec_checksum; - -}; - -/* String table is an array of null-terminated strings. The first entry is - * the filename, which is added by DLLcreate. No new structure definitions - * are required. - */ - -/* Section Records including information on the corresponding image packets */ -/* - * !!WARNING!! - * - * This structure is expected to match in form ldr_section_info in - * dynamic_loader.h - */ - -struct doff_scnhdr_t { - - s32 ds_offset; /* offset into string table of name */ - s32 ds_paddr; /* RUN address, in target AU */ - s32 ds_vaddr; /* LOAD address, in target AU */ - s32 ds_size; /* section size, in target AU */ -#ifndef _BIG_ENDIAN - u16 ds_page; /* memory page id */ - u16 ds_flags; /* section flags */ -#else - u16 ds_flags; /* section flags */ - u16 ds_page; /* memory page id */ -#endif - u32 ds_first_pkt_offset; - /* Absolute byte offset into the file */ - /* where the first image record resides */ - - s32 ds_nipacks; /* number of image packets */ - -}; - -/* Symbol table entry */ -struct doff_syment_t { - - s32 dn_offset; /* offset into string table of name */ - s32 dn_value; /* value of symbol */ -#ifndef _BIG_ENDIAN - s16 dn_scnum; /* section number */ - s16 dn_sclass; /* storage class */ -#else - s16 dn_sclass; /* storage class */ - s16 dn_scnum; /* section number, 1-based */ -#endif - -}; - -/* special values for dn_scnum */ -#define DN_UNDEF 0 /* undefined symbol */ -#define DN_ABS (-1) /* value of symbol is absolute */ -/* special values for dn_sclass */ -#define DN_EXT 2 -#define DN_STATLAB 20 -#define DN_EXTLAB 21 - -/* Default value of image bits in packet */ -/* Configurable by user on the command line */ -#define IMAGE_PACKET_SIZE 1024 - -/* An image packet contains a chunk of data from a section along with */ -/* information necessary for its processing. */ -struct image_packet_t { - - s32 num_relocs; /* number of relocations for */ - /* this packet */ - - s32 packet_size; /* number of bytes in array */ - /* "bits" occupied by */ - /* valid data. Could be */ - /* < IMAGE_PACKET_SIZE to */ - /* prevent splitting a */ - /* relocation across packets. */ - /* Last packet of a section */ - /* will most likely contain */ - /* < IMAGE_PACKET_SIZE bytes */ - /* of valid data */ - - s32 img_chksum; /* Checksum for image packet */ - /* and the corresponding */ - /* relocation records */ - - u8 *img_data; /* Actual data in section */ - -}; - -/* The relocation structure definition matches the COFF version. Offsets */ -/* however are relative to the image packet base not the section base. */ -struct reloc_record_t { - - s32 vaddr; - - /* expressed in target AUs */ - - union { - struct { -#ifndef _BIG_ENDIAN - u8 _offset; /* bit offset of rel fld */ - u8 _fieldsz; /* size of rel fld */ - u8 _wordsz; /* # bytes containing rel fld */ - u8 _dum1; - u16 _dum2; - u16 _type; -#else - unsigned _dum1:8; - unsigned _wordsz:8; /* # bytes containing rel fld */ - unsigned _fieldsz:8; /* size of rel fld */ - unsigned _offset:8; /* bit offset of rel fld */ - u16 _type; - u16 _dum2; -#endif - } _r_field; - - struct { - u32 _spc; /* image packet relative PC */ -#ifndef _BIG_ENDIAN - u16 _dum; - u16 _type; /* relocation type */ -#else - u16 _type; /* relocation type */ - u16 _dum; -#endif - } _r_spc; - - struct { - u32 _uval; /* constant value */ -#ifndef _BIG_ENDIAN - u16 _dum; - u16 _type; /* relocation type */ -#else - u16 _type; /* relocation type */ - u16 _dum; -#endif - } _r_uval; - - struct { - s32 _symndx; /* 32-bit sym tbl index */ -#ifndef _BIG_ENDIAN - u16 _disp; /* extra addr encode data */ - u16 _type; /* relocation type */ -#else - u16 _type; /* relocation type */ - u16 _disp; /* extra addr encode data */ -#endif - } _r_sym; - } _u_reloc; - -}; - -/* abbreviations for convenience */ -#ifndef TYPE -#define TYPE _u_reloc._r_sym._type -#define UVAL _u_reloc._r_uval._uval -#define SYMNDX _u_reloc._r_sym._symndx -#define OFFSET _u_reloc._r_field._offset -#define FIELDSZ _u_reloc._r_field._fieldsz -#define WORDSZ _u_reloc._r_field._wordsz -#define R_DISP _u_reloc._r_sym._disp -#endif - -/**************************************************************************** */ -/* */ -/* Important DOFF macros used for file processing */ -/* */ -/**************************************************************************** */ - -/* DOFF Versions */ -#define DOFF0 0 - -/* Return the address/size >= to addr that is at a 32-bit boundary */ -/* This assumes that a byte is 8 bits */ -#define DOFF_ALIGN(addr) (((addr) + 3) & ~3UL) - -/**************************************************************************** */ -/* */ -/* The DOFF section header flags field is laid out as follows: */ -/* */ -/* Bits 0-3 : Section Type */ -/* Bit 4 : Set when section requires target memory to be allocated by DL */ -/* Bit 5 : Set when section requires downloading */ -/* Bits 8-11: Alignment, same as COFF */ -/* */ -/**************************************************************************** */ - -/* Enum for DOFF section types (bits 0-3 of flag): See dynamic_loader.h */ -#define DS_SECTION_TYPE_MASK 0xF -/* DS_ALLOCATE indicates whether a section needs space on the target */ -#define DS_ALLOCATE_MASK 0x10 -/* DS_DOWNLOAD indicates that the loader needs to copy bits */ -#define DS_DOWNLOAD_MASK 0x20 -/* Section alignment requirement in AUs */ -#define DS_ALIGNMENT_SHIFT 8 - -static inline bool dload_check_type(struct doff_scnhdr_t *sptr, u32 flag) -{ - return (sptr->ds_flags & DS_SECTION_TYPE_MASK) == flag; -} -static inline bool ds_needs_allocation(struct doff_scnhdr_t *sptr) -{ - return sptr->ds_flags & DS_ALLOCATE_MASK; -} - -static inline bool ds_needs_download(struct doff_scnhdr_t *sptr) -{ - return sptr->ds_flags & DS_DOWNLOAD_MASK; -} - -static inline int ds_alignment(u16 ds_flags) -{ - return 1 << ((ds_flags >> DS_ALIGNMENT_SHIFT) & DS_SECTION_TYPE_MASK); -} - - -#endif /* _DOFF_H */ diff --git a/drivers/staging/tidspbridge/dynload/getsection.c b/drivers/staging/tidspbridge/dynload/getsection.c deleted file mode 100644 index e0b37714dd65..000000000000 --- a/drivers/staging/tidspbridge/dynload/getsection.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * getsection.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include "header.h" - -/* - * Error strings - */ -static const char readstrm[] = { "Error reading %s from input stream" }; -static const char seek[] = { "Set file position to %d failed" }; -static const char isiz[] = { "Bad image packet size %d" }; -static const char err_checksum[] = { "Checksum failed on %s" }; - -static const char err_reloc[] = { "dload_get_section unable to read" - "sections containing relocation entries" -}; - -#if BITS_PER_AU > BITS_PER_BYTE -static const char err_alloc[] = { "Syms->dload_allocate( %d ) failed" }; -static const char stbl[] = { "Bad string table offset " FMT_UI32 }; -#endif - -/************************************************************** */ -/********************* SUPPORT FUNCTIONS ********************** */ -/************************************************************** */ - -#if BITS_PER_AU > BITS_PER_BYTE -/************************************************************************** - * Procedure unpack_sec_name - * - * Parameters: - * dlthis Handle from dload_module_open for this module - * soffset Byte offset into the string table - * dst Place to store the expanded string - * - * Effect: - * Stores a string from the string table into the destination, expanding - * it in the process. Returns a pointer just past the end of the stored - * string on success, or NULL on failure. - * - ************************************************************************ */ -static char *unpack_sec_name(struct dload_state *dlthis, u32 soffset, char *dst) -{ - u8 tmp, *src; - - if (soffset >= dlthis->dfile_hdr.df_scn_name_size) { - dload_error(dlthis, stbl, soffset); - return NULL; - } - src = (u8 *) dlthis->str_head + - (soffset >> (LOG_BITS_PER_AU - LOG_BITS_PER_BYTE)); - if (soffset & 1) - *dst++ = *src++; /* only 1 character in first word */ - do { - tmp = *src++; - *dst = (tmp >> BITS_PER_BYTE) - if (!(*dst++)) - break; - } while ((*dst++ = tmp & BYTE_MASK)); - - return dst; -} - -/************************************************************************** - * Procedure expand_sec_names - * - * Parameters: - * dlthis Handle from dload_module_open for this module - * - * Effect: - * Allocates a buffer, unpacks and copies strings from string table into it. - * Stores a pointer to the buffer into a state variable. - ************************************************************************* */ -static void expand_sec_names(struct dload_state *dlthis) -{ - char *xstrings, *curr, *next; - u32 xsize; - u16 sec; - struct ldr_section_info *shp; - /* assume worst-case size requirement */ - xsize = dlthis->dfile_hdr.df_max_str_len * dlthis->dfile_hdr.df_no_scns; - xstrings = (char *)dlthis->mysym->dload_allocate(dlthis->mysym, xsize); - if (xstrings == NULL) { - dload_error(dlthis, err_alloc, xsize); - return; - } - dlthis->xstrings = xstrings; - /* For each sec, copy and expand its name */ - curr = xstrings; - for (sec = 0; sec < dlthis->dfile_hdr.df_no_scns; sec++) { - shp = (struct ldr_section_info *)&dlthis->sect_hdrs[sec]; - next = unpack_sec_name(dlthis, *(u32 *) &shp->name, curr); - if (next == NULL) - break; /* error */ - shp->name = curr; - curr = next; - } -} - -#endif - -/************************************************************** */ -/********************* EXPORTED FUNCTIONS ********************* */ -/************************************************************** */ - -/************************************************************************** - * Procedure dload_module_open - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side malloc/free and error reporting functions. - * Other methods are unused. - * - * Effect: - * Reads header information from a dynamic loader module using the - specified - * stream object, and returns a handle for the module information. This - * handle may be used in subsequent query calls to obtain information - * contained in the module. - * - * Returns: - * NULL if an error is encountered, otherwise a module handle for use - * in subsequent operations. - ************************************************************************* */ -void *dload_module_open(struct dynamic_loader_stream *module, - struct dynamic_loader_sym *syms) -{ - struct dload_state *dlthis; /* internal state for this call */ - unsigned *dp, sz; - u32 sec_start; -#if BITS_PER_AU <= BITS_PER_BYTE - u16 sec; -#endif - - /* Check that mandatory arguments are present */ - if (!module || !syms) { - if (syms != NULL) - dload_syms_error(syms, "Required parameter is NULL"); - - return NULL; - } - - dlthis = (struct dload_state *) - syms->dload_allocate(syms, sizeof(struct dload_state)); - if (!dlthis) { - /* not enough storage */ - dload_syms_error(syms, "Can't allocate module info"); - return NULL; - } - - /* clear our internal state */ - dp = (unsigned *)dlthis; - for (sz = sizeof(struct dload_state) / sizeof(unsigned); - sz > 0; sz -= 1) - *dp++ = 0; - - dlthis->strm = module; - dlthis->mysym = syms; - - /* read in the doff image and store in our state variable */ - dload_headers(dlthis); - - if (!dlthis->dload_errcount) - dload_strings(dlthis, true); - - /* skip ahead past the unread portion of the string table */ - sec_start = sizeof(struct doff_filehdr_t) + - sizeof(struct doff_verify_rec_t) + - BYTE_TO_HOST(DOFF_ALIGN(dlthis->dfile_hdr.df_strtab_size)); - - if (dlthis->strm->set_file_posn(dlthis->strm, sec_start) != 0) { - dload_error(dlthis, seek, sec_start); - return NULL; - } - - if (!dlthis->dload_errcount) - dload_sections(dlthis); - - if (dlthis->dload_errcount) { - dload_module_close(dlthis); /* errors, blow off our state */ - dlthis = NULL; - return NULL; - } -#if BITS_PER_AU > BITS_PER_BYTE - /* Expand all section names from the string table into the */ - /* state variable, and convert section names from a relative */ - /* string table offset to a pointers to the expanded string. */ - expand_sec_names(dlthis); -#else - /* Convert section names from a relative string table offset */ - /* to a pointer into the string table. */ - for (sec = 0; sec < dlthis->dfile_hdr.df_no_scns; sec++) { - struct ldr_section_info *shp = - (struct ldr_section_info *)&dlthis->sect_hdrs[sec]; - shp->name = dlthis->str_head + *(u32 *) &shp->name; - } -#endif - - return dlthis; -} - -/*************************************************************************** - * Procedure dload_get_section_info - * - * Parameters: - * minfo Handle from dload_module_open for this module - * section_name Pointer to the string name of the section desired - * section_info Address of a section info structure pointer to be - * initialized - * - * Effect: - * Finds the specified section in the module information, and initializes - * the provided struct ldr_section_info pointer. - * - * Returns: - * true for success, false for section not found - ************************************************************************* */ -int dload_get_section_info(void *minfo, const char *section_name, - const struct ldr_section_info **const section_info) -{ - struct dload_state *dlthis; - struct ldr_section_info *shp; - u16 sec; - - dlthis = (struct dload_state *)minfo; - if (!dlthis) - return false; - - for (sec = 0; sec < dlthis->dfile_hdr.df_no_scns; sec++) { - shp = (struct ldr_section_info *)&dlthis->sect_hdrs[sec]; - if (strcmp(section_name, shp->name) == 0) { - *section_info = shp; - return true; - } - } - - return false; -} - -#define IPH_SIZE (sizeof(struct image_packet_t) - sizeof(u32)) - -/************************************************************************** - * Procedure dload_get_section - * - * Parameters: - * minfo Handle from dload_module_open for this module - * section_info Pointer to a section info structure for the desired - * section - * section_data Buffer to contain the section initialized data - * - * Effect: - * Copies the initialized data for the specified section into the - * supplied buffer. - * - * Returns: - * true for success, false for section not found - ************************************************************************* */ -int dload_get_section(void *minfo, - const struct ldr_section_info *section_info, - void *section_data) -{ - struct dload_state *dlthis; - u32 pos; - struct doff_scnhdr_t *sptr = NULL; - s32 nip; - struct image_packet_t ipacket; - s32 ipsize; - u32 checks; - s8 *dest = (s8 *) section_data; - - dlthis = (struct dload_state *)minfo; - if (!dlthis) - return false; - sptr = (struct doff_scnhdr_t *)section_info; - if (sptr == NULL) - return false; - - /* skip ahead to the start of the first packet */ - pos = BYTE_TO_HOST(DOFF_ALIGN((u32) sptr->ds_first_pkt_offset)); - if (dlthis->strm->set_file_posn(dlthis->strm, pos) != 0) { - dload_error(dlthis, seek, pos); - return false; - } - - nip = sptr->ds_nipacks; - while ((nip -= 1) >= 0) { /* for each packet */ - /* get the fixed header bits */ - if (dlthis->strm->read_buffer(dlthis->strm, &ipacket, - IPH_SIZE) != IPH_SIZE) { - dload_error(dlthis, readstrm, "image packet"); - return false; - } - /* reorder the header if need be */ - if (dlthis->reorder_map) - dload_reorder(&ipacket, IPH_SIZE, dlthis->reorder_map); - - /* Now read the packet image bits. Note: round the size up to - * the next multiple of 4 bytes; this is what checksum - * routines want. */ - ipsize = BYTE_TO_HOST(DOFF_ALIGN(ipacket.packet_size)); - if (ipsize > BYTE_TO_HOST(IMAGE_PACKET_SIZE)) { - dload_error(dlthis, isiz, ipsize); - return false; - } - if (dlthis->strm->read_buffer - (dlthis->strm, dest, ipsize) != ipsize) { - dload_error(dlthis, readstrm, "image packet"); - return false; - } - /* reorder the bytes if need be */ -#if !defined(_BIG_ENDIAN) || (TARGET_AU_BITS > 16) - if (dlthis->reorder_map) - dload_reorder(dest, ipsize, dlthis->reorder_map); - - checks = dload_checksum(dest, ipsize); -#else - if (dlthis->dfile_hdr.df_byte_reshuffle != - TARGET_ORDER(REORDER_MAP(BYTE_RESHUFFLE_VALUE))) { - /* put image bytes in big-endian order, not PC order */ - dload_reorder(dest, ipsize, - TARGET_ORDER(dlthis-> - dfile_hdr.df_byte_reshuffle)); - } -#if TARGET_AU_BITS > 8 - checks = dload_reverse_checksum16(dest, ipsize); -#else - checks = dload_reverse_checksum(dest, ipsize); -#endif -#endif - checks += dload_checksum(&ipacket, IPH_SIZE); - - /* NYI: unable to handle relocation entries here. Reloc - * entries referring to fields that span the packet boundaries - * may result in packets of sizes that are not multiple of - * 4 bytes. Our checksum implementation works on 32-bit words - * only. */ - if (ipacket.num_relocs != 0) { - dload_error(dlthis, err_reloc, ipsize); - return false; - } - - if (~checks) { - dload_error(dlthis, err_checksum, "image packet"); - return false; - } - - /*Advance destination ptr by the size of the just-read packet */ - dest += ipsize; - } - - return true; -} - -/*************************************************************************** - * Procedure dload_module_close - * - * Parameters: - * minfo Handle from dload_module_open for this module - * - * Effect: - * Releases any storage associated with the module handle. On return, - * the module handle is invalid. - * - * Returns: - * Zero for success. On error, the number of errors detected is returned. - * Individual errors are reported using syms->error_report(), where syms was - * an argument to dload_module_open - ************************************************************************* */ -void dload_module_close(void *minfo) -{ - struct dload_state *dlthis; - - dlthis = (struct dload_state *)minfo; - if (!dlthis) - return; - - if (dlthis->str_head) - dlthis->mysym->dload_deallocate(dlthis->mysym, - dlthis->str_head); - - if (dlthis->sect_hdrs) - dlthis->mysym->dload_deallocate(dlthis->mysym, - dlthis->sect_hdrs); - -#if BITS_PER_AU > BITS_PER_BYTE - if (dlthis->xstrings) - dlthis->mysym->dload_deallocate(dlthis->mysym, - dlthis->xstrings); - -#endif - - dlthis->mysym->dload_deallocate(dlthis->mysym, dlthis); -} diff --git a/drivers/staging/tidspbridge/dynload/header.h b/drivers/staging/tidspbridge/dynload/header.h deleted file mode 100644 index 5b50a15a343e..000000000000 --- a/drivers/staging/tidspbridge/dynload/header.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * header.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#define DL_STRCMP strcmp - -/* maximum parenthesis nesting in relocation stack expressions */ -#define STATIC_EXPR_STK_SIZE 10 - -#include - -#include "doff.h" -#include -#include "params.h" -#include "dload_internal.h" -#include "reloc_table.h" - -/* - * Plausibility limits - * - * These limits are imposed upon the input DOFF file as a check for validity. - * They are hard limits, in that the load will fail if they are exceeded. - * The numbers selected are arbitrary, in that the loader implementation does - * not require these limits. - */ - -/* maximum number of bytes in string table */ -#define MAX_REASONABLE_STRINGTAB (0x100000) -/* maximum number of code,data,etc. sections */ -#define MAX_REASONABLE_SECTIONS (200) -/* maximum number of linker symbols */ -#define MAX_REASONABLE_SYMBOLS (100000) - -/* shift count to align F_BIG with DLOAD_LITTLE */ -#define ALIGN_COFF_ENDIANNESS 7 -#define ENDIANNESS_MASK (DF_BYTE_ORDER >> ALIGN_COFF_ENDIANNESS) diff --git a/drivers/staging/tidspbridge/dynload/module_list.h b/drivers/staging/tidspbridge/dynload/module_list.h deleted file mode 100644 index a216bb131a40..000000000000 --- a/drivers/staging/tidspbridge/dynload/module_list.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * dspbridge/mpu_driver/src/dynload/module_list.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * This C header file gives the layout of the data structure created by the - * dynamic loader to describe the set of modules loaded into the DSP. - * - * Linked List Structure: - * ---------------------- - * The data structure defined here is a singly-linked list. The list - * represents the set of modules which are currently loaded in the DSP memory. - * The first entry in the list is a header record which contains a flag - * representing the state of the list. The rest of the entries in the list - * are module records. - * - * Global symbol _DLModules designates the first record in the list (i.e. the - * header record). This symbol must be defined in any program that wishes to - * use DLLview plug-in. - * - * String Representation: - * ---------------------- - * The string names of the module and its sections are stored in a block of - * memory which follows the module record itself. The strings are ordered: - * module name first, followed by section names in order from the first - * section to the last. String names are tightly packed arrays of 8-bit - * characters (two characters per 16-bit word on the C55x). Strings are - * zero-byte-terminated. - * - * Creating and updating the list: - * ------------------------------- - * Upon loading a new module into the DSP memory the dynamic loader inserts a - * new module record as the first module record in the list. The fields of - * this module record are initialized to reflect the properties of the module. - * The dynamic loader does NOT increment the flag/counter in the list's header - * record. - * - * Upon unloading a module from the DSP memory the dynamic loader removes the - * module's record from this list. The dynamic loader also increments the - * flag/counter in the list's header record to indicate that the list has been - * changed. - */ - -#ifndef _MODULE_LIST_H_ -#define _MODULE_LIST_H_ - -#include - -/* Global pointer to the modules_header structure */ -#define MODULES_HEADER "_DLModules" -#define MODULES_HEADER_NO_UNDERSCORE "DLModules" - -/* Initial version number */ -#define INIT_VERSION 1 - -/* Verification number -- to be recorded in each module record */ -#define VERIFICATION 0x79 - -/* forward declarations */ -struct dll_module; -struct dll_sect; - -/* the first entry in the list is the modules_header record; - * its address is contained in the global _DLModules pointer */ -struct modules_header { - - /* - * Address of the first dll_module record in the list or NULL. - * Note: for C55x this is a word address (C55x data is - * word-addressable) - */ - u32 first_module; - - /* Combined storage size (in target addressable units) of the - * dll_module record which follows this header record, or zero - * if the list is empty. This size includes the module's string table. - * Note: for C55x the unit is a 16-bit word */ - u16 first_module_size; - - /* Counter is incremented whenever a module record is removed from - * the list */ - u16 update_flag; - -}; - -/* for each 32-bits in above structure, a bitmap, LSB first, whose bits are: - * 0 => a 32-bit value, 1 => 2 16-bit values */ -/* swapping bitmap for type modules_header */ -#define MODULES_HEADER_BITMAP 0x2 - -/* information recorded about each section in a module */ -struct dll_sect { - - /* Load-time address of the section. - * Note: for C55x this is a byte address for program sections, and - * a word address for data sections. C55x program memory is - * byte-addressable, while data memory is word-addressable. */ - u32 sect_load_adr; - - /* Run-time address of the section. - * Note 1: for C55x this is a byte address for program sections, and - * a word address for data sections. - * Note 2: for C55x two most significant bits of this field indicate - * the section type: '00' for a code section, '11' for a data section - * (C55 addresses are really only 24-bits wide). */ - u32 sect_run_adr; - -}; - -/* the rest of the entries in the list are module records */ -struct dll_module { - - /* Address of the next dll_module record in the list, or 0 if this is - * the last record in the list. - * Note: for C55x this is a word address (C55x data is - * word-addressable) */ - u32 next_module; - - /* Combined storage size (in target addressable units) of the - * dll_module record which follows this one, or zero if this is the - * last record in the list. This size includes the module's string - * table. - * Note: for C55x the unit is a 16-bit word. */ - u16 next_module_size; - - /* version number of the tooling; set to INIT_VERSION for Phase 1 */ - u16 version; - - /* the verification word; set to VERIFICATION */ - u16 verification; - - /* Number of sections in the sects array */ - u16 num_sects; - - /* Module's "unique" id; copy of the timestamp from the host - * COFF file */ - u32 timestamp; - - /* Array of num_sects elements of the module's section records */ - struct dll_sect sects[1]; -}; - -/* for each 32 bits in above structure, a bitmap, LSB first, whose bits are: - * 0 => a 32-bit value, 1 => 2 16-bit values */ -#define DLL_MODULE_BITMAP 0x6 /* swapping bitmap for type dll_module */ - -#endif /* _MODULE_LIST_H_ */ diff --git a/drivers/staging/tidspbridge/dynload/params.h b/drivers/staging/tidspbridge/dynload/params.h deleted file mode 100644 index d797fcd3b662..000000000000 --- a/drivers/staging/tidspbridge/dynload/params.h +++ /dev/null @@ -1,226 +0,0 @@ -/* - * params.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This file defines host and target properties for all machines - * supported by the dynamic loader. To be tedious... - * - * host: the machine on which the dynamic loader runs - * target: the machine that the dynamic loader is loading - * - * Host and target may or may not be the same, depending upon the particular - * use. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/****************************************************************************** - * - * Host Properties - * - **************************************************************************** */ - -#define BITS_PER_BYTE 8 /* bits in the standard PC/SUN byte */ -#define LOG_BITS_PER_BYTE 3 /* log base 2 of same */ -#define BYTE_MASK ((1U<> 16)) -#define SWAP16BY8(zz) (((zz) << 8) | ((zz) >> 8)) - -/* !! don't be tempted to insert type definitions here; use !! */ - -/****************************************************************************** - * - * Target Properties - * - **************************************************************************** */ - -/*-------------------------------------------------------------------------- */ -/* TMS320C6x Target Specific Parameters (byte-addressable) */ -/*-------------------------------------------------------------------------- */ -#if TMS32060 -#define MEMORG 0x0L /* Size of configured memory */ -#define MEMSIZE 0x0L /* (full address space) */ - -#define CINIT_ALIGN 8 /* alignment of cinit record in TDATA AUs */ -#define CINIT_COUNT 4 /* width of count field in TDATA AUs */ -#define CINIT_ADDRESS 4 /* width of address field in TDATA AUs */ -#define CINIT_PAGE_BITS 0 /* Number of LSBs of address that - * are page number */ - -#define LENIENT_SIGNED_RELEXPS 0 /* DOES SIGNED ALLOW MAX UNSIGNED */ - -#undef TARGET_ENDIANNESS /* may be big or little endian */ - -/* align a target address to a word boundary */ -#define TARGET_WORD_ALIGN(zz) (((zz) + 0x3) & -0x4) -#endif - -/*-------------------------------------------------------------------------- - * - * DEFAULT SETTINGS and DERIVED PROPERTIES - * - * This section establishes defaults for values not specified above - *-------------------------------------------------------------------------- */ -#ifndef TARGET_AU_BITS -#define TARGET_AU_BITS 8 /* width of the target addressable unit */ -#define LOG_TARGET_AU_BITS 3 /* log2 of same */ -#endif - -#ifndef CINIT_DEFAULT_PAGE -#define CINIT_DEFAULT_PAGE 0 /* default .cinit page number */ -#endif - -#ifndef DATA_RUN2LOAD -#define DATA_RUN2LOAD(zz) (zz) /* translate data run address to load address */ -#endif - -#ifndef DBG_LIST_PAGE -#define DBG_LIST_PAGE 0 /* page number for .dllview section */ -#endif - -#ifndef TARGET_WORD_ALIGN -/* align a target address to a word boundary */ -#define TARGET_WORD_ALIGN(zz) (zz) -#endif - -#ifndef TDATA_TO_TADDR -#define TDATA_TO_TADDR(zz) (zz) /* target data address to target AU address */ -#define TADDR_TO_TDATA(zz) (zz) /* target AU address to target data address */ -#define TDATA_AU_BITS TARGET_AU_BITS /* bits per data AU */ -#define LOG_TDATA_AU_BITS LOG_TARGET_AU_BITS -#endif - -/* - * - * Useful properties and conversions derived from the above - * - */ - -/* - * Conversions between host and target addresses - */ -#if LOG_BITS_PER_AU == LOG_TARGET_AU_BITS -/* translate target addressable unit to host address */ -#define TADDR_TO_HOST(x) (x) -/* translate host address to target addressable unit */ -#define HOST_TO_TADDR(x) (x) -#elif LOG_BITS_PER_AU > LOG_TARGET_AU_BITS -#define TADDR_TO_HOST(x) ((x) >> (LOG_BITS_PER_AU-LOG_TARGET_AU_BITS)) -#define HOST_TO_TADDR(x) ((x) << (LOG_BITS_PER_AU-LOG_TARGET_AU_BITS)) -#else -#define TADDR_TO_HOST(x) ((x) << (LOG_TARGET_AU_BITS-LOG_BITS_PER_AU)) -#define HOST_TO_TADDR(x) ((x) >> (LOG_TARGET_AU_BITS-LOG_BITS_PER_AU)) -#endif - -#if LOG_BITS_PER_AU == LOG_TDATA_AU_BITS -/* translate target addressable unit to host address */ -#define TDATA_TO_HOST(x) (x) -/* translate host address to target addressable unit */ -#define HOST_TO_TDATA(x) (x) -/* translate host address to target addressable unit, round up */ -#define HOST_TO_TDATA_ROUND(x) (x) -/* byte offset to host offset, rounded up for TDATA size */ -#define BYTE_TO_HOST_TDATA_ROUND(x) BYTE_TO_HOST_ROUND(x) -#elif LOG_BITS_PER_AU > LOG_TDATA_AU_BITS -#define TDATA_TO_HOST(x) ((x) >> (LOG_BITS_PER_AU-LOG_TDATA_AU_BITS)) -#define HOST_TO_TDATA(x) ((x) << (LOG_BITS_PER_AU-LOG_TDATA_AU_BITS)) -#define HOST_TO_TDATA_ROUND(x) ((x) << (LOG_BITS_PER_AU-LOG_TDATA_AU_BITS)) -#define BYTE_TO_HOST_TDATA_ROUND(x) BYTE_TO_HOST_ROUND(x) -#else -#define TDATA_TO_HOST(x) ((x) << (LOG_TDATA_AU_BITS-LOG_BITS_PER_AU)) -#define HOST_TO_TDATA(x) ((x) >> (LOG_TDATA_AU_BITS-LOG_BITS_PER_AU)) -#define HOST_TO_TDATA_ROUND(x) (((x) +\ - (1<<(LOG_TDATA_AU_BITS-LOG_BITS_PER_AU))-1) >>\ - (LOG_TDATA_AU_BITS-LOG_BITS_PER_AU)) -#define BYTE_TO_HOST_TDATA_ROUND(x) (BYTE_TO_HOST((x) +\ - (1<<(LOG_TDATA_AU_BITS-LOG_BITS_PER_BYTE))-1) &\ - -(TDATA_AU_BITS/BITS_PER_AU)) -#endif - -/* - * Input in DOFF format is always expresed in bytes, regardless of loading host - * so we wind up converting from bytes to target and host units even when the - * host is not a byte machine. - */ -#if LOG_BITS_PER_AU == LOG_BITS_PER_BYTE -#define BYTE_TO_HOST(x) (x) -#define BYTE_TO_HOST_ROUND(x) (x) -#define HOST_TO_BYTE(x) (x) -#elif LOG_BITS_PER_AU >= LOG_BITS_PER_BYTE -#define BYTE_TO_HOST(x) ((x) >> (LOG_BITS_PER_AU - LOG_BITS_PER_BYTE)) -#define BYTE_TO_HOST_ROUND(x) ((x + (BITS_PER_AU/BITS_PER_BYTE-1)) >>\ - (LOG_BITS_PER_AU - LOG_BITS_PER_BYTE)) -#define HOST_TO_BYTE(x) ((x) << (LOG_BITS_PER_AU - LOG_BITS_PER_BYTE)) -#else -/* lets not try to deal with sub-8-bit byte machines */ -#endif - -#if LOG_TARGET_AU_BITS == LOG_BITS_PER_BYTE -/* translate target addressable unit to byte address */ -#define TADDR_TO_BYTE(x) (x) -/* translate byte address to target addressable unit */ -#define BYTE_TO_TADDR(x) (x) -#elif LOG_TARGET_AU_BITS > LOG_BITS_PER_BYTE -#define TADDR_TO_BYTE(x) ((x) << (LOG_TARGET_AU_BITS-LOG_BITS_PER_BYTE)) -#define BYTE_TO_TADDR(x) ((x) >> (LOG_TARGET_AU_BITS-LOG_BITS_PER_BYTE)) -#else -/* lets not try to deal with sub-8-bit byte machines */ -#endif - -#ifdef _BIG_ENDIAN -#define HOST_ENDIANNESS 1 -#else -#define HOST_ENDIANNESS 0 -#endif - -#ifdef TARGET_ENDIANNESS -#define TARGET_ENDIANNESS_DIFFERS(rtend) (HOST_ENDIANNESS^TARGET_ENDIANNESS) -#elif HOST_ENDIANNESS -#define TARGET_ENDIANNESS_DIFFERS(rtend) (!(rtend)) -#else -#define TARGET_ENDIANNESS_DIFFERS(rtend) (rtend) -#endif - -/* the unit in which we process target image data */ -#if TARGET_AU_BITS <= 8 -typedef u8 tgt_au_t; -#elif TARGET_AU_BITS <= 16 -typedef u16 tgt_au_t; -#else -typedef u32 tgt_au_t; -#endif - -/* size of that unit */ -#if TARGET_AU_BITS < BITS_PER_AU -#define TGTAU_BITS BITS_PER_AU -#define LOG_TGTAU_BITS LOG_BITS_PER_AU -#else -#define TGTAU_BITS TARGET_AU_BITS -#define LOG_TGTAU_BITS LOG_TARGET_AU_BITS -#endif diff --git a/drivers/staging/tidspbridge/dynload/reloc.c b/drivers/staging/tidspbridge/dynload/reloc.c deleted file mode 100644 index bb422b693290..000000000000 --- a/drivers/staging/tidspbridge/dynload/reloc.c +++ /dev/null @@ -1,486 +0,0 @@ -/* - * reloc.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include "header.h" - -#if TMS32060 -/* the magic symbol for the start of BSS */ -static const char bsssymbol[] = { ".bss" }; -#endif - -#if TMS32060 -#include "reloc_table_c6000.c" -#endif - -#if TMS32060 -/* From coff.h - ignore these relocation operations */ -#define R_C60ALIGN 0x76 /* C60: Alignment info for compressor */ -#define R_C60FPHEAD 0x77 /* C60: Explicit assembly directive */ -#define R_C60NOCMP 0x100 /* C60: Don't compress this code scn */ -#endif - -/************************************************************************** - * Procedure dload_unpack - * - * Parameters: - * data pointer to storage unit containing lowest host address of - * image data - * fieldsz Size of bit field, 0 < fieldsz <= sizeof(rvalue)*BITS_PER_AU - * offset Offset from LSB, 0 <= offset < BITS_PER_AU - * sgn Signedness of the field (ROP_SGN, ROP_UNS, ROP_MAX, ROP_ANY) - * - * Effect: - * Extracts the specified field and returns it. - ************************************************************************* */ -rvalue dload_unpack(struct dload_state *dlthis, tgt_au_t *data, int fieldsz, - int offset, unsigned sgn) -{ - register rvalue objval; - register int shift, direction; - register tgt_au_t *dp = data; - - fieldsz -= 1; /* avoid nastiness with 32-bit shift of 32-bit value */ - /* * collect up enough bits to contain the desired field */ - if (TARGET_BIG_ENDIAN) { - dp += (fieldsz + offset) >> LOG_TGTAU_BITS; - direction = -1; - } else - direction = 1; - objval = *dp >> offset; - shift = TGTAU_BITS - offset; - while (shift <= fieldsz) { - dp += direction; - objval += (rvalue) *dp << shift; - shift += TGTAU_BITS; - } - - /* * sign or zero extend the value appropriately */ - if (sgn == ROP_UNS) - objval &= (2 << fieldsz) - 1; - else { - shift = sizeof(rvalue) * BITS_PER_AU - 1 - fieldsz; - objval = (objval << shift) >> shift; - } - - return objval; - -} /* dload_unpack */ - -/************************************************************************** - * Procedure dload_repack - * - * Parameters: - * val Value to insert - * data Pointer to storage unit containing lowest host address of - * image data - * fieldsz Size of bit field, 0 < fieldsz <= sizeof(rvalue)*BITS_PER_AU - * offset Offset from LSB, 0 <= offset < BITS_PER_AU - * sgn Signedness of the field (ROP_SGN, ROP_UNS, ROP_MAX, ROP_ANY) - * - * Effect: - * Stuffs the specified value in the specified field. Returns 0 for - * success - * or 1 if the value will not fit in the specified field according to the - * specified signedness rule. - ************************************************************************* */ -static const unsigned char ovf_limit[] = { 1, 2, 2 }; - -int dload_repack(struct dload_state *dlthis, rvalue val, tgt_au_t *data, - int fieldsz, int offset, unsigned sgn) -{ - register urvalue objval, mask; - register int shift, direction; - register tgt_au_t *dp = data; - - fieldsz -= 1; /* avoid nastiness with 32-bit shift of 32-bit value */ - /* clip the bits */ - mask = (2UL << fieldsz) - 1; - objval = (val & mask); - /* * store the bits through the specified mask */ - if (TARGET_BIG_ENDIAN) { - dp += (fieldsz + offset) >> LOG_TGTAU_BITS; - direction = -1; - } else - direction = 1; - - /* insert LSBs */ - *dp = (*dp & ~(mask << offset)) + (objval << offset); - shift = TGTAU_BITS - offset; - /* align mask and objval with AU boundary */ - objval >>= shift; - mask >>= shift; - - while (mask) { - dp += direction; - *dp = (*dp & ~mask) + objval; - objval >>= TGTAU_BITS; - mask >>= TGTAU_BITS; - } - - /* - * check for overflow - */ - if (sgn) { - unsigned tmp = (val >> fieldsz) + (sgn & 0x1); - - if (tmp > ovf_limit[sgn - 1]) - return 1; - } - return 0; - -} /* dload_repack */ - -/* lookup table for the scaling amount in a C6x instruction */ -#if TMS32060 -#define SCALE_BITS 4 /* there are 4 bits in the scale field */ -#define SCALE_MASK 0x7 /* we really only use the bottom 3 bits */ -static const u8 c60_scale[SCALE_MASK + 1] = { - 1, 0, 0, 0, 1, 1, 2, 2 -}; -#endif - -/************************************************************************** - * Procedure dload_relocate - * - * Parameters: - * data Pointer to base of image data - * rp Pointer to relocation operation - * - * Effect: - * Performs the specified relocation operation - ************************************************************************* */ -void dload_relocate(struct dload_state *dlthis, tgt_au_t *data, - struct reloc_record_t *rp, bool *tramps_generated, - bool second_pass) -{ - rvalue val, reloc_amt, orig_val = 0; - unsigned int fieldsz = 0; - unsigned int offset = 0; - unsigned int reloc_info = 0; - unsigned int reloc_action = 0; - register int rx = 0; - rvalue *stackp = NULL; - int top; - struct local_symbol *svp = NULL; -#ifdef RFV_SCALE - unsigned int scale = 0; -#endif - struct image_packet_t *img_pkt = NULL; - - /* The image packet data struct is only used during first pass - * relocation in the event that a trampoline is needed. 2nd pass - * relocation doesn't guarantee that data is coming from an - * image_packet_t structure. See cload.c, dload_data for how img_data is - * set. If that changes this needs to be updated!!! */ - if (second_pass == false) - img_pkt = (struct image_packet_t *)((u8 *) data - - sizeof(struct - image_packet_t)); - - rx = HASH_FUNC(rp->TYPE); - while (rop_map1[rx] != rp->TYPE) { - rx = HASH_L(rop_map2[rx]); - if (rx < 0) { -#if TMS32060 - switch (rp->TYPE) { - case R_C60ALIGN: - case R_C60NOCMP: - case R_C60FPHEAD: - /* Ignore these reloc types and return */ - break; - default: - /* Unknown reloc type, print error and return */ - dload_error(dlthis, "Bad coff operator 0x%x", - rp->TYPE); - } -#else - dload_error(dlthis, "Bad coff operator 0x%x", rp->TYPE); -#endif - return; - } - } - rx = HASH_I(rop_map2[rx]); - if ((rx < (sizeof(rop_action) / sizeof(u16))) - && (rx < (sizeof(rop_info) / sizeof(u16))) && (rx > 0)) { - reloc_action = rop_action[rx]; - reloc_info = rop_info[rx]; - } else { - dload_error(dlthis, "Buffer Overflow - Array Index Out " - "of Bounds"); - } - - /* Compute the relocation amount for the referenced symbol, if any */ - reloc_amt = rp->UVAL; - if (RFV_SYM(reloc_info)) { /* relocation uses a symbol reference */ - /* If this is first pass, use the module local symbol table, - * else use the trampoline symbol table. */ - if (second_pass == false) { - if ((u32) rp->SYMNDX < dlthis->dfile_hdr.df_no_syms) { - /* real symbol reference */ - svp = &dlthis->local_symtab[rp->SYMNDX]; - reloc_amt = (RFV_SYM(reloc_info) == ROP_SYMD) ? - svp->delta : svp->value; - } - /* reloc references current section */ - else if (rp->SYMNDX == -1) { - reloc_amt = (RFV_SYM(reloc_info) == ROP_SYMD) ? - dlthis->delta_runaddr : - dlthis->image_secn->run_addr; - } - } - } - /* relocation uses a symbol reference */ - /* Handle stack adjustment */ - val = 0; - top = RFV_STK(reloc_info); - if (top) { - top += dlthis->relstkidx - RSTK_UOP; - if (top >= STATIC_EXPR_STK_SIZE) { - dload_error(dlthis, - "Expression stack overflow in %s at offset " - FMT_UI32, dlthis->image_secn->name, - rp->vaddr + dlthis->image_offset); - return; - } - val = dlthis->relstk[dlthis->relstkidx]; - dlthis->relstkidx = top; - stackp = &dlthis->relstk[top]; - } - /* Derive field position and size, if we need them */ - if (reloc_info & ROP_RW) { /* read or write action in our future */ - fieldsz = RFV_WIDTH(reloc_action); - if (fieldsz) { /* field info from table */ - offset = RFV_POSN(reloc_action); - if (TARGET_BIG_ENDIAN) - /* make sure vaddr is the lowest target - * address containing bits */ - rp->vaddr += RFV_BIGOFF(reloc_info); - } else { /* field info from relocation op */ - fieldsz = rp->FIELDSZ; - offset = rp->OFFSET; - if (TARGET_BIG_ENDIAN) - /* make sure vaddr is the lowest target - address containing bits */ - rp->vaddr += (rp->WORDSZ - offset - fieldsz) - >> LOG_TARGET_AU_BITS; - } - data = (tgt_au_t *) ((char *)data + TADDR_TO_HOST(rp->vaddr)); - /* compute lowest host location of referenced data */ -#if BITS_PER_AU > TARGET_AU_BITS - /* conversion from target address to host address may lose - address bits; add loss to offset */ - if (TARGET_BIG_ENDIAN) { - offset += -((rp->vaddr << LOG_TARGET_AU_BITS) + - offset + fieldsz) & - (BITS_PER_AU - TARGET_AU_BITS); - } else { - offset += (rp->vaddr << LOG_TARGET_AU_BITS) & - (BITS_PER_AU - 1); - } -#endif -#ifdef RFV_SCALE - scale = RFV_SCALE(reloc_info); -#endif - } - /* read the object value from the current image, if so ordered */ - if (reloc_info & ROP_R) { - /* relocation reads current image value */ - val = dload_unpack(dlthis, data, fieldsz, offset, - RFV_SIGN(reloc_info)); - /* Save off the original value in case the relo overflows and - * we can trampoline it. */ - orig_val = val; - -#ifdef RFV_SCALE - val <<= scale; -#endif - } - /* perform the necessary arithmetic */ - switch (RFV_ACTION(reloc_action)) { /* relocation actions */ - case RACT_VAL: - break; - case RACT_ASGN: - val = reloc_amt; - break; - case RACT_ADD: - val += reloc_amt; - break; - case RACT_PCR: - /*----------------------------------------------------------- - * Handle special cases of jumping from absolute sections - * (special reloc type) or to absolute destination - * (symndx == -1). In either case, set the appropriate - * relocation amount to 0. - *----------------------------------------------------------- */ - if (rp->SYMNDX == -1) - reloc_amt = 0; - val += reloc_amt - dlthis->delta_runaddr; - break; - case RACT_ADDISP: - val += rp->R_DISP + reloc_amt; - break; - case RACT_ASGPC: - val = dlthis->image_secn->run_addr + reloc_amt; - break; - case RACT_PLUS: - if (stackp != NULL) - val += *stackp; - break; - case RACT_SUB: - if (stackp != NULL) - val = *stackp - val; - break; - case RACT_NEG: - val = -val; - break; - case RACT_MPY: - if (stackp != NULL) - val *= *stackp; - break; - case RACT_DIV: - if (stackp != NULL) - val = *stackp / val; - break; - case RACT_MOD: - if (stackp != NULL) - val = *stackp % val; - break; - case RACT_SR: - if (val >= sizeof(rvalue) * BITS_PER_AU) - val = 0; - else if (stackp != NULL) - val = (urvalue) *stackp >> val; - break; - case RACT_ASR: - if (val >= sizeof(rvalue) * BITS_PER_AU) - val = sizeof(rvalue) * BITS_PER_AU - 1; - else if (stackp != NULL) - val = *stackp >> val; - break; - case RACT_SL: - if (val >= sizeof(rvalue) * BITS_PER_AU) - val = 0; - else if (stackp != NULL) - val = *stackp << val; - break; - case RACT_AND: - if (stackp != NULL) - val &= *stackp; - break; - case RACT_OR: - if (stackp != NULL) - val |= *stackp; - break; - case RACT_XOR: - if (stackp != NULL) - val ^= *stackp; - break; - case RACT_NOT: - val = ~val; - break; -#if TMS32060 - case RACT_C6SECT: - /* actually needed address of secn containing symbol */ - if (svp != NULL) { - if (rp->SYMNDX >= 0) - if (svp->secnn > 0) - reloc_amt = dlthis->ldr_sections - [svp->secnn - 1].run_addr; - } - /* !!! FALL THRU !!! */ - case RACT_C6BASE: - if (dlthis->bss_run_base == 0) { - struct dynload_symbol *symp; - - symp = dlthis->mysym->find_matching_symbol - (dlthis->mysym, bsssymbol); - /* lookup value of global BSS base */ - if (symp) - dlthis->bss_run_base = symp->value; - else - dload_error(dlthis, - "Global BSS base referenced in %s " - "offset" FMT_UI32 " but not " - "defined", - dlthis->image_secn->name, - rp->vaddr + dlthis->image_offset); - } - reloc_amt -= dlthis->bss_run_base; - /* !!! FALL THRU !!! */ - case RACT_C6DSPL: - /* scale factor determined by 3 LSBs of field */ - scale = c60_scale[val & SCALE_MASK]; - offset += SCALE_BITS; - fieldsz -= SCALE_BITS; - val >>= SCALE_BITS; /* ignore the scale field hereafter */ - val <<= scale; - val += reloc_amt; /* do the usual relocation */ - if (((1 << scale) - 1) & val) - dload_error(dlthis, - "Unaligned reference in %s offset " - FMT_UI32, dlthis->image_secn->name, - rp->vaddr + dlthis->image_offset); - break; -#endif - } /* relocation actions */ - /* * Put back result as required */ - if (reloc_info & ROP_W) { /* relocation writes image value */ -#ifdef RFV_SCALE - val >>= scale; -#endif - if (dload_repack(dlthis, val, data, fieldsz, offset, - RFV_SIGN(reloc_info))) { - /* Check to see if this relo can be trampolined, - * but only in first phase relocation. 2nd phase - * relocation cannot trampoline. */ - if ((second_pass == false) && - (dload_tramp_avail(dlthis, rp) == true)) { - - /* Before generating the trampoline, restore - * the value to its original so the 2nd pass - * relo will work. */ - dload_repack(dlthis, orig_val, data, fieldsz, - offset, RFV_SIGN(reloc_info)); - if (!dload_tramp_generate(dlthis, - (dlthis->image_secn - - dlthis->ldr_sections), - dlthis->image_offset, - img_pkt, rp)) { - dload_error(dlthis, - "Failed to " - "generate trampoline for " - "bit overflow"); - dload_error(dlthis, - "Relocation val " FMT_UI32 - " overflows %d bits in %s " - "offset " FMT_UI32, val, - fieldsz, - dlthis->image_secn->name, - dlthis->image_offset + - rp->vaddr); - } else - *tramps_generated = true; - } else { - dload_error(dlthis, "Relocation value " - FMT_UI32 " overflows %d bits in %s" - " offset " FMT_UI32, val, fieldsz, - dlthis->image_secn->name, - dlthis->image_offset + rp->vaddr); - } - } - } else if (top) - *stackp = val; -} /* reloc_value */ diff --git a/drivers/staging/tidspbridge/dynload/reloc_table.h b/drivers/staging/tidspbridge/dynload/reloc_table.h deleted file mode 100644 index 6aab03d4668d..000000000000 --- a/drivers/staging/tidspbridge/dynload/reloc_table.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * reloc_table.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _RELOC_TABLE_H_ -#define _RELOC_TABLE_H_ -/* - * Table of relocation operator properties - */ -#include - -/* How does this relocation operation access the program image? */ -#define ROP_N 0 /* does not access image */ -#define ROP_R 1 /* read from image */ -#define ROP_W 2 /* write to image */ -#define ROP_RW 3 /* read from and write to image */ - -/* For program image access, what are the overflow rules for the bit field? */ -/* Beware! Procedure repack depends on this encoding */ -#define ROP_ANY 0 /* no overflow ever, just truncate the value */ -#define ROP_SGN 1 /* signed field */ -#define ROP_UNS 2 /* unsigned field */ -#define ROP_MAX 3 /* allow maximum range of either signed or unsigned */ - -/* How does the relocation operation use the symbol reference */ -#define ROP_IGN 0 /* no symbol is referenced */ -#define ROP_LIT 0 /* use rp->UVAL literal field */ -#define ROP_SYM 1 /* symbol value is used in relocation */ -#define ROP_SYMD 2 /* delta value vs last link is used */ - -/* How does the reloc op use the stack? */ -#define RSTK_N 0 /* Does not use */ -#define RSTK_POP 1 /* Does a POP */ -#define RSTK_UOP 2 /* Unary op, stack position unaffected */ -#define RSTK_PSH 3 /* Does a push */ - -/* - * Computational actions performed by the dynamic loader - */ -enum dload_actions { - /* don't alter the current val (from stack or mem fetch) */ - RACT_VAL, - /* set value to reference amount (from symbol reference) */ - RACT_ASGN, - RACT_ADD, /* add reference to value */ - RACT_PCR, /* add reference minus PC delta to value */ - RACT_ADDISP, /* add reference plus R_DISP */ - RACT_ASGPC, /* set value to section addr plus reference */ - - RACT_PLUS, /* stack + */ - RACT_SUB, /* stack - */ - RACT_NEG, /* stack unary - */ - - RACT_MPY, /* stack * */ - RACT_DIV, /* stack / */ - RACT_MOD, /* stack % */ - - RACT_SR, /* stack unsigned >> */ - RACT_ASR, /* stack signed >> */ - RACT_SL, /* stack << */ - RACT_AND, /* stack & */ - RACT_OR, /* stack | */ - RACT_XOR, /* stack ^ */ - RACT_NOT, /* stack ~ */ - RACT_C6SECT, /* for C60 R_SECT op */ - RACT_C6BASE, /* for C60 R_BASE op */ - RACT_C6DSPL, /* for C60 scaled 15-bit displacement */ - RACT_PCR23T /* for ARM Thumb long branch */ -}; - -/* - * macros used to extract values - */ -#define RFV_POSN(aaa) ((aaa) & 0xF) -#define RFV_WIDTH(aaa) (((aaa) >> 4) & 0x3F) -#define RFV_ACTION(aaa) ((aaa) >> 10) - -#define RFV_SIGN(iii) (((iii) >> 2) & 0x3) -#define RFV_SYM(iii) (((iii) >> 4) & 0x3) -#define RFV_STK(iii) (((iii) >> 6) & 0x3) -#define RFV_ACCS(iii) ((iii) & 0x3) - -#if (TMS32060) -#define RFV_SCALE(iii) ((iii) >> 11) -#define RFV_BIGOFF(iii) (((iii) >> 8) & 0x7) -#else -#define RFV_BIGOFF(iii) ((iii) >> 8) -#endif - -#endif /* _RELOC_TABLE_H_ */ diff --git a/drivers/staging/tidspbridge/dynload/reloc_table_c6000.c b/drivers/staging/tidspbridge/dynload/reloc_table_c6000.c deleted file mode 100644 index a28bc0442491..000000000000 --- a/drivers/staging/tidspbridge/dynload/reloc_table_c6000.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * reloc_table_c6000.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* Tables generated for c6000 */ - -#define HASH_FUNC(zz) (((((zz) + 1) * 1845UL) >> 11) & 63) -#define HASH_L(zz) ((zz) >> 8) -#define HASH_I(zz) ((zz) & 0xFF) - -static const u16 rop_map1[] = { - 0, - 1, - 2, - 20, - 4, - 5, - 6, - 15, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 17, - 18, - 19, - 21, - 16, - 16394, - 16404, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 32, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 40, - 112, - 113, - 65535, - 16384, - 16385, - 16386, - 16387, - 16388, - 16389, - 16390, - 16391, - 16392, - 16393, - 16395, - 16396, - 16397, - 16398, - 16399, - 16400, - 16401, - 16402, - 16403, - 16405, - 16406, - 65535, - 65535, - 65535 -}; - -static const s16 rop_map2[] = { - -256, - -255, - -254, - -245, - -253, - -252, - -251, - -250, - -241, - -240, - -239, - -238, - -237, - -236, - 1813, - 5142, - -248, - -247, - 778, - -244, - -249, - -221, - -211, - -1, - -1, - -1, - -1, - -1, - -1, - -243, - -1, - -1, - -1, - -1, - -1, - -1, - -242, - -233, - -232, - -1, - -231, - -230, - -229, - -228, - -227, - -226, - -225, - -224, - -223, - 5410, - -220, - -219, - -218, - -217, - -216, - -215, - -214, - -213, - 5676, - -210, - -209, - -1, - -1, - -1 -}; - -static const u16 rop_action[] = { - 2560, - 2304, - 2304, - 2432, - 2432, - 2560, - 2176, - 2304, - 2560, - 3200, - 3328, - 3584, - 3456, - 2304, - 4208, - 20788, - 21812, - 3415, - 3245, - 2311, - 4359, - 19764, - 2311, - 3191, - 3280, - 6656, - 7680, - 8704, - 9728, - 10752, - 11776, - 12800, - 13824, - 14848, - 15872, - 16896, - 17920, - 18944, - 0, - 0, - 0, - 0, - 1536, - 1536, - 1536, - 5632, - 512, - 0 -}; - -static const u16 rop_info[] = { - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 39, - 39, - 39, - 39, - 35, - 34, - 283, - 299, - 4135, - 4391, - 291, - 33059, - 283, - 295, - 4647, - 4135, - 64, - 64, - 128, - 64, - 64, - 64, - 64, - 64, - 64, - 64, - 64, - 64, - 128, - 201, - 197, - 74, - 70, - 208, - 196, - 200, - 192, - 192, - 66 -}; diff --git a/drivers/staging/tidspbridge/dynload/tramp.c b/drivers/staging/tidspbridge/dynload/tramp.c deleted file mode 100644 index 5f0431305fbb..000000000000 --- a/drivers/staging/tidspbridge/dynload/tramp.c +++ /dev/null @@ -1,1143 +0,0 @@ -/* - * tramp.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2009 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include "header.h" - -#if TMS32060 -#include "tramp_table_c6000.c" -#endif - -#define MAX_RELOS_PER_PASS 4 - -/* - * Function: priv_tramp_sect_tgt_alloc - * Description: Allocate target memory for the trampoline section. The - * target mem size is easily obtained as the next available address. - */ -static int priv_tramp_sect_tgt_alloc(struct dload_state *dlthis) -{ - int ret_val = 0; - struct ldr_section_info *sect_info; - - /* Populate the trampoline loader section and allocate it on the - * target. The section name is ALWAYS the first string in the final - * string table for trampolines. The trampoline section is always - * 1 beyond the total number of allocated sections. */ - sect_info = &dlthis->ldr_sections[dlthis->allocated_secn_count]; - - sect_info->name = dlthis->tramp.final_string_table; - sect_info->size = dlthis->tramp.tramp_sect_next_addr; - sect_info->context = 0; - sect_info->type = - (4 << 8) | DLOAD_TEXT | DS_ALLOCATE_MASK | DS_DOWNLOAD_MASK; - sect_info->page = 0; - sect_info->run_addr = 0; - sect_info->load_addr = 0; - ret_val = dlthis->myalloc->dload_allocate(dlthis->myalloc, - sect_info, - ds_alignment - (sect_info->type)); - - if (ret_val == 0) - dload_error(dlthis, "Failed to allocate target memory for" - " trampoline"); - - return ret_val; -} - -/* - * Function: priv_h2a - * Description: Helper function to convert a hex value to its ASCII - * representation. Used for trampoline symbol name generation. - */ -static u8 priv_h2a(u8 value) -{ - if (value > 0xF) - return 0xFF; - - if (value <= 9) - value += 0x30; - else - value += 0x37; - - return value; -} - -/* - * Function: priv_tramp_sym_gen_name - * Description: Generate a trampoline symbol name (ASCII) using the value - * of the symbol. This places the new name into the user buffer. - * The name is fixed in length and of the form: __$dbTR__xxxxxxxx - * (where "xxxxxxxx" is the hex value). - */ -static void priv_tramp_sym_gen_name(u32 value, char *dst) -{ - u32 i; - char *prefix = TRAMP_SYM_PREFIX; - char *dst_local = dst; - u8 tmp; - - /* Clear out the destination, including the ending NULL */ - for (i = 0; i < (TRAMP_SYM_PREFIX_LEN + TRAMP_SYM_HEX_ASCII_LEN); i++) - *(dst_local + i) = 0; - - /* Copy the prefix to start */ - for (i = 0; i < strlen(TRAMP_SYM_PREFIX); i++) { - *dst_local = *(prefix + i); - dst_local++; - } - - /* Now convert the value passed in to a string equiv of the hex */ - for (i = 0; i < sizeof(value); i++) { -#ifndef _BIG_ENDIAN - tmp = *(((u8 *) &value) + (sizeof(value) - 1) - i); - *dst_local = priv_h2a((tmp & 0xF0) >> 4); - dst_local++; - *dst_local = priv_h2a(tmp & 0x0F); - dst_local++; -#else - tmp = *(((u8 *) &value) + i); - *dst_local = priv_h2a((tmp & 0xF0) >> 4); - dst_local++; - *dst_local = priv_h2a(tmp & 0x0F); - dst_local++; -#endif - } - - /* NULL terminate */ - *dst_local = 0; -} - -/* - * Function: priv_tramp_string_create - * Description: Create a new string specific to the trampoline loading and add - * it to the trampoline string list. This list contains the - * trampoline section name and trampoline point symbols. - */ -static struct tramp_string *priv_tramp_string_create(struct dload_state *dlthis, - u32 str_len, char *str) -{ - struct tramp_string *new_string = NULL; - u32 i; - - /* Create a new string object with the specified size. */ - new_string = - (struct tramp_string *)dlthis->mysym->dload_allocate(dlthis->mysym, - (sizeof - (struct - tramp_string) - + str_len + - 1)); - if (new_string != NULL) { - /* Clear the string first. This ensures the ending NULL is - * present and the optimizer won't touch it. */ - for (i = 0; i < (sizeof(struct tramp_string) + str_len + 1); - i++) - *((u8 *) new_string + i) = 0; - - /* Add this string to our virtual table by assigning it the - * next index and pushing it to the tail of the list. */ - new_string->index = dlthis->tramp.tramp_string_next_index; - dlthis->tramp.tramp_string_next_index++; - dlthis->tramp.tramp_string_size += str_len + 1; - - new_string->next = NULL; - if (dlthis->tramp.string_head == NULL) - dlthis->tramp.string_head = new_string; - else - dlthis->tramp.string_tail->next = new_string; - - dlthis->tramp.string_tail = new_string; - - /* Copy the string over to the new object */ - for (i = 0; i < str_len; i++) - new_string->str[i] = str[i]; - } - - return new_string; -} - -/* - * Function: priv_tramp_string_find - * Description: Walk the trampoline string list and find a match for the - * provided string. If not match is found, NULL is returned. - */ -static struct tramp_string *priv_tramp_string_find(struct dload_state *dlthis, - char *str) -{ - struct tramp_string *cur_str = NULL; - struct tramp_string *ret_val = NULL; - u32 i; - u32 str_len = strlen(str); - - for (cur_str = dlthis->tramp.string_head; - (ret_val == NULL) && (cur_str != NULL); cur_str = cur_str->next) { - /* If the string lengths aren't equal, don't bother - * comparing */ - if (str_len != strlen(cur_str->str)) - continue; - - /* Walk the strings until one of them ends */ - for (i = 0; i < str_len; i++) { - /* If they don't match in the current position then - * break out now, no sense in continuing to look at - * this string. */ - if (str[i] != cur_str->str[i]) - break; - } - - if (i == str_len) - ret_val = cur_str; - } - - return ret_val; -} - -/* - * Function: priv_string_tbl_finalize - * Description: Flatten the trampoline string list into a table of NULL - * terminated strings. This is the same format of string table - * as used by the COFF/DOFF file. - */ -static int priv_string_tbl_finalize(struct dload_state *dlthis) -{ - int ret_val = 0; - struct tramp_string *cur_string; - char *cur_loc; - char *tmp; - - /* Allocate enough space for all strings that have been created. The - * table is simply all strings concatenated together will NULL - * endings. */ - dlthis->tramp.final_string_table = - (char *)dlthis->mysym->dload_allocate(dlthis->mysym, - dlthis->tramp. - tramp_string_size); - if (dlthis->tramp.final_string_table != NULL) { - /* We got our buffer, walk the list and release the nodes as* - * we go */ - cur_loc = dlthis->tramp.final_string_table; - cur_string = dlthis->tramp.string_head; - while (cur_string != NULL) { - /* Move the head/tail pointers */ - dlthis->tramp.string_head = cur_string->next; - if (dlthis->tramp.string_tail == cur_string) - dlthis->tramp.string_tail = NULL; - - /* Copy the string contents */ - for (tmp = cur_string->str; - *tmp != '\0'; tmp++, cur_loc++) - *cur_loc = *tmp; - - /* Pick up the NULL termination since it was missed by - * breaking using it to end the above loop. */ - *cur_loc = '\0'; - cur_loc++; - - /* Free the string node, we don't need it any more. */ - dlthis->mysym->dload_deallocate(dlthis->mysym, - cur_string); - - /* Move our pointer to the next one */ - cur_string = dlthis->tramp.string_head; - } - - /* Update our return value to success */ - ret_val = 1; - } else - dload_error(dlthis, "Failed to allocate trampoline " - "string table"); - - return ret_val; -} - -/* - * Function: priv_tramp_sect_alloc - * Description: Virtually allocate space from the trampoline section. This - * function returns the next offset within the trampoline section - * that is available and moved the next available offset by the - * requested size. NO TARGET ALLOCATION IS DONE AT THIS TIME. - */ -static u32 priv_tramp_sect_alloc(struct dload_state *dlthis, u32 tramp_size) -{ - u32 ret_val; - - /* If the next available address is 0, this is our first allocation. - * Create a section name string to go into the string table . */ - if (dlthis->tramp.tramp_sect_next_addr == 0) { - dload_syms_error(dlthis->mysym, "*** WARNING *** created " - "dynamic TRAMPOLINE section for module %s", - dlthis->str_head); - } - - /* Reserve space for the new trampoline */ - ret_val = dlthis->tramp.tramp_sect_next_addr; - dlthis->tramp.tramp_sect_next_addr += tramp_size; - return ret_val; -} - -/* - * Function: priv_tramp_sym_create - * Description: Allocate and create a new trampoline specific symbol and add - * it to the trampoline symbol list. These symbols will include - * trampoline points as well as the external symbols they - * reference. - */ -static struct tramp_sym *priv_tramp_sym_create(struct dload_state *dlthis, - u32 str_index, - struct local_symbol *tmp_sym) -{ - struct tramp_sym *new_sym = NULL; - u32 i; - - /* Allocate new space for the symbol in the symbol table. */ - new_sym = - (struct tramp_sym *)dlthis->mysym->dload_allocate(dlthis->mysym, - sizeof(struct tramp_sym)); - if (new_sym != NULL) { - for (i = 0; i != sizeof(struct tramp_sym); i++) - *((char *)new_sym + i) = 0; - - /* Assign this symbol the next symbol index for easier - * reference later during relocation. */ - new_sym->index = dlthis->tramp.tramp_sym_next_index; - dlthis->tramp.tramp_sym_next_index++; - - /* Populate the symbol information. At this point any - * trampoline symbols will be the offset location, not the - * final. Copy over the symbol info to start, then be sure to - * get the string index from the trampoline string table. */ - new_sym->sym_info = *tmp_sym; - new_sym->str_index = str_index; - - /* Push the new symbol to the tail of the symbol table list */ - new_sym->next = NULL; - if (dlthis->tramp.symbol_head == NULL) - dlthis->tramp.symbol_head = new_sym; - else - dlthis->tramp.symbol_tail->next = new_sym; - - dlthis->tramp.symbol_tail = new_sym; - } - - return new_sym; -} - -/* - * Function: priv_tramp_sym_get - * Description: Search for the symbol with the matching string index (from - * the trampoline string table) and return the trampoline - * symbol object, if found. Otherwise return NULL. - */ -static struct tramp_sym *priv_tramp_sym_get(struct dload_state *dlthis, - u32 string_index) -{ - struct tramp_sym *sym_found = NULL; - - /* Walk the symbol table list and search vs. the string index */ - for (sym_found = dlthis->tramp.symbol_head; - sym_found != NULL; sym_found = sym_found->next) { - if (sym_found->str_index == string_index) - break; - } - - return sym_found; -} - -/* - * Function: priv_tramp_sym_find - * Description: Search for a trampoline symbol based on the string name of - * the symbol. Return the symbol object, if found, otherwise - * return NULL. - */ -static struct tramp_sym *priv_tramp_sym_find(struct dload_state *dlthis, - char *string) -{ - struct tramp_sym *sym_found = NULL; - struct tramp_string *str_found = NULL; - - /* First, search for the string, then search for the sym based on the - string index. */ - str_found = priv_tramp_string_find(dlthis, string); - if (str_found != NULL) - sym_found = priv_tramp_sym_get(dlthis, str_found->index); - - return sym_found; -} - -/* - * Function: priv_tramp_sym_finalize - * Description: Allocate a flat symbol table for the trampoline section, - * put each trampoline symbol into the table, adjust the - * symbol value based on the section address on the target and - * free the trampoline symbol list nodes. - */ -static int priv_tramp_sym_finalize(struct dload_state *dlthis) -{ - int ret_val = 0; - struct tramp_sym *cur_sym; - struct ldr_section_info *tramp_sect = - &dlthis->ldr_sections[dlthis->allocated_secn_count]; - struct local_symbol *new_sym; - - /* Allocate a table to hold a flattened version of all symbols - * created. */ - dlthis->tramp.final_sym_table = - (struct local_symbol *)dlthis->mysym->dload_allocate(dlthis->mysym, - (sizeof(struct local_symbol) * dlthis->tramp. - tramp_sym_next_index)); - if (dlthis->tramp.final_sym_table != NULL) { - /* Walk the list of all symbols, copy it over to the flattened - * table. After it has been copied, the node can be freed as - * it is no longer needed. */ - new_sym = dlthis->tramp.final_sym_table; - cur_sym = dlthis->tramp.symbol_head; - while (cur_sym != NULL) { - /* Pop it off the list */ - dlthis->tramp.symbol_head = cur_sym->next; - if (cur_sym == dlthis->tramp.symbol_tail) - dlthis->tramp.symbol_tail = NULL; - - /* Copy the symbol contents into the flat table */ - *new_sym = cur_sym->sym_info; - - /* Now finalize the symbol. If it is in the tramp - * section, we need to adjust for the section start. - * If it is external then we don't need to adjust at - * all. - * NOTE: THIS CODE ASSUMES THAT THE TRAMPOLINE IS - * REFERENCED LIKE A CALL TO AN EXTERNAL SO VALUE AND - * DELTA ARE THE SAME. SEE THE FUNCTION dload_symbols - * WHERE DN_UNDEF IS HANDLED FOR MORE REFERENCE. */ - if (new_sym->secnn < 0) { - new_sym->value += tramp_sect->load_addr; - new_sym->delta = new_sym->value; - } - - /* Let go of the symbol node */ - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_sym); - - /* Move to the next node */ - cur_sym = dlthis->tramp.symbol_head; - new_sym++; - } - - ret_val = 1; - } else - dload_error(dlthis, "Failed to alloc trampoline sym table"); - - return ret_val; -} - -/* - * Function: priv_tgt_img_gen - * Description: Allocate storage for and copy the target specific image data - * and fix up its relocations for the new external symbol. If - * a trampoline image packet was successfully created it is added - * to the trampoline list. - */ -static int priv_tgt_img_gen(struct dload_state *dlthis, u32 base, - u32 gen_index, struct tramp_sym *new_ext_sym) -{ - struct tramp_img_pkt *new_img_pkt = NULL; - u32 i; - u32 pkt_size = tramp_img_pkt_size_get(); - u8 *gen_tbl_entry; - u8 *pkt_data; - struct reloc_record_t *cur_relo; - int ret_val = 0; - - /* Allocate a new image packet and set it up. */ - new_img_pkt = - (struct tramp_img_pkt *)dlthis->mysym->dload_allocate(dlthis->mysym, - pkt_size); - if (new_img_pkt != NULL) { - /* Save the base, this is where it goes in the section */ - new_img_pkt->base = base; - - /* Copy over the image data and relos from the target table */ - pkt_data = (u8 *) &new_img_pkt->hdr; - gen_tbl_entry = (u8 *) &tramp_gen_info[gen_index]; - for (i = 0; i < pkt_size; i++) { - *pkt_data = *gen_tbl_entry; - pkt_data++; - gen_tbl_entry++; - } - - /* Update the relocations to point to the external symbol */ - cur_relo = - (struct reloc_record_t *)((u8 *) &new_img_pkt->hdr + - new_img_pkt->hdr.relo_offset); - for (i = 0; i < new_img_pkt->hdr.num_relos; i++) - cur_relo[i].SYMNDX = new_ext_sym->index; - - /* Add it to the trampoline list. */ - new_img_pkt->next = dlthis->tramp.tramp_pkts; - dlthis->tramp.tramp_pkts = new_img_pkt; - - ret_val = 1; - } - - return ret_val; -} - -/* - * Function: priv_pkt_relo - * Description: Take the provided image data and the collection of relocations - * for it and perform the relocations. Note that all relocations - * at this stage are considered SECOND PASS since the original - * image has already been processed in the first pass. This means - * TRAMPOLINES ARE TREATED AS 2ND PASS even though this is really - * the first (and only) relocation that will be performed on them. - */ -static int priv_pkt_relo(struct dload_state *dlthis, tgt_au_t *data, - struct reloc_record_t *rp[], u32 relo_count) -{ - int ret_val = 1; - u32 i; - bool tmp; - - /* Walk through all of the relos and process them. This function is - * the equivalent of relocate_packet() from cload.c, but specialized - * for trampolines and 2nd phase relocations. */ - for (i = 0; i < relo_count; i++) - dload_relocate(dlthis, data, rp[i], &tmp, true); - - return ret_val; -} - -/* - * Function: priv_tramp_pkt_finalize - * Description: Walk the list of all trampoline packets and finalize them. - * Each trampoline image packet will be relocated now that the - * trampoline section has been allocated on the target. Once - * all of the relocations are done the trampoline image data - * is written into target memory and the trampoline packet - * is freed: it is no longer needed after this point. - */ -static int priv_tramp_pkt_finalize(struct dload_state *dlthis) -{ - int ret_val = 1; - struct tramp_img_pkt *cur_pkt = NULL; - struct reloc_record_t *relos[MAX_RELOS_PER_PASS]; - u32 relos_done; - u32 i; - struct reloc_record_t *cur_relo; - struct ldr_section_info *sect_info = - &dlthis->ldr_sections[dlthis->allocated_secn_count]; - - /* Walk the list of trampoline packets and relocate each packet. This - * function is the trampoline equivalent of dload_data() from - * cload.c. */ - cur_pkt = dlthis->tramp.tramp_pkts; - while ((ret_val != 0) && (cur_pkt != NULL)) { - /* Remove the pkt from the list */ - dlthis->tramp.tramp_pkts = cur_pkt->next; - - /* Setup section and image offset information for the relo */ - dlthis->image_secn = sect_info; - dlthis->image_offset = cur_pkt->base; - dlthis->delta_runaddr = sect_info->run_addr; - - /* Walk through all relos for the packet */ - relos_done = 0; - cur_relo = (struct reloc_record_t *)((u8 *) &cur_pkt->hdr + - cur_pkt->hdr.relo_offset); - while (relos_done < cur_pkt->hdr.num_relos) { -#ifdef ENABLE_TRAMP_DEBUG - dload_syms_error(dlthis->mysym, - "===> Trampoline %x branches to %x", - sect_info->run_addr + - dlthis->image_offset, - dlthis-> - tramp.final_sym_table[cur_relo-> - SYMNDX].value); -#endif - - for (i = 0; - ((i < MAX_RELOS_PER_PASS) && - ((i + relos_done) < cur_pkt->hdr.num_relos)); i++) - relos[i] = cur_relo + i; - - /* Do the actual relo */ - ret_val = priv_pkt_relo(dlthis, - (tgt_au_t *) &cur_pkt->payload, - relos, i); - if (ret_val == 0) { - dload_error(dlthis, - "Relocation of trampoline pkt at %x" - " failed", cur_pkt->base + - sect_info->run_addr); - break; - } - - relos_done += i; - cur_relo += i; - } - - /* Make sure we didn't hit a problem */ - if (ret_val != 0) { - /* Relos are done for the packet, write it to the - * target */ - ret_val = dlthis->myio->writemem(dlthis->myio, - &cur_pkt->payload, - sect_info->load_addr + - cur_pkt->base, - sect_info, - BYTE_TO_HOST - (cur_pkt->hdr. - tramp_code_size)); - if (ret_val == 0) { - dload_error(dlthis, - "Write to " FMT_UI32 " failed", - sect_info->load_addr + - cur_pkt->base); - } - - /* Done with the pkt, let it go */ - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_pkt); - - /* Get the next packet to process */ - cur_pkt = dlthis->tramp.tramp_pkts; - } - } - - return ret_val; -} - -/* - * Function: priv_dup_pkt_finalize - * Description: Walk the list of duplicate image packets and finalize them. - * Each duplicate packet will be relocated again for the - * relocations that previously failed and have been adjusted - * to point at a trampoline. Once all relocations for a packet - * have been done, write the packet into target memory. The - * duplicate packet and its relocation chain are all freed - * after use here as they are no longer needed after this. - */ -static int priv_dup_pkt_finalize(struct dload_state *dlthis) -{ - int ret_val = 1; - struct tramp_img_dup_pkt *cur_pkt; - struct tramp_img_dup_relo *cur_relo; - struct reloc_record_t *relos[MAX_RELOS_PER_PASS]; - struct doff_scnhdr_t *sect_hdr = NULL; - s32 i; - - /* Similar to the trampoline pkt finalize, this function walks each dup - * pkt that was generated and performs all relocations that were - * deferred to a 2nd pass. This is the equivalent of dload_data() from - * cload.c, but does not need the additional reorder and checksum - * processing as it has already been done. */ - cur_pkt = dlthis->tramp.dup_pkts; - while ((ret_val != 0) && (cur_pkt != NULL)) { - /* Remove the node from the list, we'll be freeing it - * shortly */ - dlthis->tramp.dup_pkts = cur_pkt->next; - - /* Setup the section and image offset for relocation */ - dlthis->image_secn = &dlthis->ldr_sections[cur_pkt->secnn]; - dlthis->image_offset = cur_pkt->offset; - - /* In order to get the delta run address, we need to reference - * the original section header. It's a bit ugly, but needed - * for relo. */ - i = (s32) (dlthis->image_secn - dlthis->ldr_sections); - sect_hdr = dlthis->sect_hdrs + i; - dlthis->delta_runaddr = sect_hdr->ds_paddr; - - /* Walk all relos in the chain and process each. */ - cur_relo = cur_pkt->relo_chain; - while (cur_relo != NULL) { - /* Process them a chunk at a time to be efficient */ - for (i = 0; (i < MAX_RELOS_PER_PASS) - && (cur_relo != NULL); - i++, cur_relo = cur_relo->next) { - relos[i] = &cur_relo->relo; - cur_pkt->relo_chain = cur_relo->next; - } - - /* Do the actual relo */ - ret_val = priv_pkt_relo(dlthis, - cur_pkt->img_pkt.img_data, - relos, i); - if (ret_val == 0) { - dload_error(dlthis, - "Relocation of dup pkt at %x" - " failed", cur_pkt->offset + - dlthis->image_secn->run_addr); - break; - } - - /* Release all of these relos, we're done with them */ - while (i > 0) { - dlthis->mysym->dload_deallocate(dlthis->mysym, - GET_CONTAINER - (relos[i - 1], - struct tramp_img_dup_relo, - relo)); - i--; - } - - /* DO NOT ADVANCE cur_relo, IT IS ALREADY READY TO - * GO! */ - } - - /* Done with all relos. Make sure we didn't have a problem and - * write it out to the target */ - if (ret_val != 0) { - ret_val = dlthis->myio->writemem(dlthis->myio, - cur_pkt->img_pkt. - img_data, - dlthis->image_secn-> - load_addr + - cur_pkt->offset, - dlthis->image_secn, - BYTE_TO_HOST - (cur_pkt->img_pkt. - packet_size)); - if (ret_val == 0) { - dload_error(dlthis, - "Write to " FMT_UI32 " failed", - dlthis->image_secn->load_addr + - cur_pkt->offset); - } - - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_pkt); - - /* Advance to the next packet */ - cur_pkt = dlthis->tramp.dup_pkts; - } - } - - return ret_val; -} - -/* - * Function: priv_dup_find - * Description: Walk the list of existing duplicate packets and find a - * match based on the section number and image offset. Return - * the duplicate packet if found, otherwise NULL. - */ -static struct tramp_img_dup_pkt *priv_dup_find(struct dload_state *dlthis, - s16 secnn, u32 image_offset) -{ - struct tramp_img_dup_pkt *cur_pkt = NULL; - - for (cur_pkt = dlthis->tramp.dup_pkts; - cur_pkt != NULL; cur_pkt = cur_pkt->next) { - if ((cur_pkt->secnn == secnn) && - (cur_pkt->offset == image_offset)) { - /* Found a match, break out */ - break; - } - } - - return cur_pkt; -} - -/* - * Function: priv_img_pkt_dup - * Description: Duplicate the original image packet. If this is the first - * time this image packet has been seen (based on section number - * and image offset), create a new duplicate packet and add it - * to the dup packet list. If not, just get the existing one and - * update it with the current packet contents (since relocation - * on the packet is still ongoing in first pass.) Create a - * duplicate of the provided relocation, but update it to point - * to the new trampoline symbol. Add the new relocation dup to - * the dup packet's relo chain for 2nd pass relocation later. - */ -static int priv_img_pkt_dup(struct dload_state *dlthis, - s16 secnn, u32 image_offset, - struct image_packet_t *ipacket, - struct reloc_record_t *rp, - struct tramp_sym *new_tramp_sym) -{ - struct tramp_img_dup_pkt *dup_pkt = NULL; - u32 new_dup_size; - s32 i; - int ret_val = 0; - struct tramp_img_dup_relo *dup_relo = NULL; - - /* Determine if this image packet is already being tracked in the - dup list for other trampolines. */ - dup_pkt = priv_dup_find(dlthis, secnn, image_offset); - - if (dup_pkt == NULL) { - /* This image packet does not exist in our tracking, so create - * a new one and add it to the head of the list. */ - new_dup_size = sizeof(struct tramp_img_dup_pkt) + - ipacket->packet_size; - - dup_pkt = (struct tramp_img_dup_pkt *) - dlthis->mysym->dload_allocate(dlthis->mysym, new_dup_size); - if (dup_pkt != NULL) { - /* Save off the section and offset information */ - dup_pkt->secnn = secnn; - dup_pkt->offset = image_offset; - dup_pkt->relo_chain = NULL; - - /* Copy the original packet content */ - dup_pkt->img_pkt = *ipacket; - dup_pkt->img_pkt.img_data = (u8 *) (dup_pkt + 1); - for (i = 0; i < ipacket->packet_size; i++) - *(dup_pkt->img_pkt.img_data + i) = - *(ipacket->img_data + i); - - /* Add the packet to the dup list */ - dup_pkt->next = dlthis->tramp.dup_pkts; - dlthis->tramp.dup_pkts = dup_pkt; - } else - dload_error(dlthis, "Failed to create dup packet!"); - } else { - /* The image packet contents could have changed since - * trampoline detection happens during relocation of the image - * packets. So, we need to update the image packet contents - * before adding relo information. */ - for (i = 0; i < dup_pkt->img_pkt.packet_size; i++) - *(dup_pkt->img_pkt.img_data + i) = - *(ipacket->img_data + i); - } - - /* Since the previous code may have allocated a new dup packet for us, - double check that we actually have one. */ - if (dup_pkt != NULL) { - /* Allocate a new node for the relo chain. Each image packet - * can potentially have multiple relocations that cause a - * trampoline to be generated. So, we keep them in a chain, - * order is not important. */ - dup_relo = dlthis->mysym->dload_allocate(dlthis->mysym, - sizeof(struct tramp_img_dup_relo)); - if (dup_relo != NULL) { - /* Copy the relo contents, adjust for the new - * trampoline and add it to the list. */ - dup_relo->relo = *rp; - dup_relo->relo.SYMNDX = new_tramp_sym->index; - - dup_relo->next = dup_pkt->relo_chain; - dup_pkt->relo_chain = dup_relo; - - /* That's it, we're done. Make sure we update our - * return value to be success since everything finished - * ok */ - ret_val = 1; - } else - dload_error(dlthis, "Unable to alloc dup relo"); - } - - return ret_val; -} - -/* - * Function: dload_tramp_avail - * Description: Check to see if the target supports a trampoline for this type - * of relocation. Return true if it does, otherwise false. - */ -bool dload_tramp_avail(struct dload_state *dlthis, struct reloc_record_t *rp) -{ - bool ret_val = false; - u16 map_index; - u16 gen_index; - - /* Check type hash vs. target tramp table */ - map_index = HASH_FUNC(rp->TYPE); - gen_index = tramp_map[map_index]; - if (gen_index != TRAMP_NO_GEN_AVAIL) - ret_val = true; - - return ret_val; -} - -/* - * Function: dload_tramp_generate - * Description: Create a new trampoline for the provided image packet and - * relocation causing problems. This will create the trampoline - * as well as duplicate/update the image packet and relocation - * causing the problem, which will be relo'd again during - * finalization. - */ -int dload_tramp_generate(struct dload_state *dlthis, s16 secnn, - u32 image_offset, struct image_packet_t *ipacket, - struct reloc_record_t *rp) -{ - u16 map_index; - u16 gen_index; - int ret_val = 1; - char tramp_sym_str[TRAMP_SYM_PREFIX_LEN + TRAMP_SYM_HEX_ASCII_LEN]; - struct local_symbol *ref_sym; - struct tramp_sym *new_tramp_sym; - struct tramp_sym *new_ext_sym; - struct tramp_string *new_tramp_str; - u32 new_tramp_base; - struct local_symbol tmp_sym; - struct local_symbol ext_tmp_sym; - - /* Hash the relo type to get our generator information */ - map_index = HASH_FUNC(rp->TYPE); - gen_index = tramp_map[map_index]; - if (gen_index != TRAMP_NO_GEN_AVAIL) { - /* If this is the first trampoline, create the section name in - * our string table for debug help later. */ - if (dlthis->tramp.string_head == NULL) { - priv_tramp_string_create(dlthis, - strlen(TRAMP_SECT_NAME), - TRAMP_SECT_NAME); - } -#ifdef ENABLE_TRAMP_DEBUG - dload_syms_error(dlthis->mysym, - "Trampoline at img loc %x, references %x", - dlthis->ldr_sections[secnn].run_addr + - image_offset + rp->vaddr, - dlthis->local_symtab[rp->SYMNDX].value); -#endif - - /* Generate the trampoline string, check if already defined. - * If the relo symbol index is -1, it means we need the section - * info for relo later. To do this we'll dummy up a symbol - * with the section delta and run addresses. */ - if (rp->SYMNDX == -1) { - ext_tmp_sym.value = - dlthis->ldr_sections[secnn].run_addr; - ext_tmp_sym.delta = dlthis->sect_hdrs[secnn].ds_paddr; - ref_sym = &ext_tmp_sym; - } else - ref_sym = &(dlthis->local_symtab[rp->SYMNDX]); - - priv_tramp_sym_gen_name(ref_sym->value, tramp_sym_str); - new_tramp_sym = priv_tramp_sym_find(dlthis, tramp_sym_str); - if (new_tramp_sym == NULL) { - /* If tramp string not defined, create it and a new - * string, and symbol for it as well as the original - * symbol which caused the trampoline. */ - new_tramp_str = priv_tramp_string_create(dlthis, - strlen - (tramp_sym_str), - tramp_sym_str); - if (new_tramp_str == NULL) { - dload_error(dlthis, "Failed to create new " - "trampoline string\n"); - ret_val = 0; - } else { - /* Allocate tramp section space for the new - * tramp from the target */ - new_tramp_base = priv_tramp_sect_alloc(dlthis, - tramp_size_get()); - - /* We have a string, create the new symbol and - * duplicate the external. */ - tmp_sym.value = new_tramp_base; - tmp_sym.delta = 0; - tmp_sym.secnn = -1; - tmp_sym.sclass = 0; - new_tramp_sym = priv_tramp_sym_create(dlthis, - new_tramp_str-> - index, - &tmp_sym); - - new_ext_sym = priv_tramp_sym_create(dlthis, -1, - ref_sym); - - if ((new_tramp_sym != NULL) && - (new_ext_sym != NULL)) { - /* Call the image generator to get the - * new image data and fix up its - * relocations for the external - * symbol. */ - ret_val = priv_tgt_img_gen(dlthis, - new_tramp_base, - gen_index, - new_ext_sym); - - /* Add generated image data to tramp - * image list */ - if (ret_val != 1) { - dload_error(dlthis, "Failed to " - "create img pkt for" - " trampoline\n"); - } - } else { - dload_error(dlthis, "Failed to create " - "new tramp syms " - "(%8.8X, %8.8X)\n", - new_tramp_sym, new_ext_sym); - ret_val = 0; - } - } - } - - /* Duplicate the image data and relo record that caused the - * tramp, including update the relo data to point to the tramp - * symbol. */ - if (ret_val == 1) { - ret_val = priv_img_pkt_dup(dlthis, secnn, image_offset, - ipacket, rp, new_tramp_sym); - if (ret_val != 1) { - dload_error(dlthis, "Failed to create dup of " - "original img pkt\n"); - } - } - } - - return ret_val; -} - -/* - * Function: dload_tramp_pkt_update - * Description: Update the duplicate copy of this image packet, which the - * trampoline layer is already tracking. This call is critical - * to make if trampolines were generated anywhere within the - * packet and first pass relo continued on the remainder. The - * trampoline layer needs the updates image data so when 2nd - * pass relo is done during finalize the image packet can be - * written to the target since all relo is done. - */ -int dload_tramp_pkt_udpate(struct dload_state *dlthis, s16 secnn, - u32 image_offset, struct image_packet_t *ipacket) -{ - struct tramp_img_dup_pkt *dup_pkt = NULL; - s32 i; - int ret_val = 0; - - /* Find the image packet in question, the caller needs us to update it - since a trampoline was previously generated. */ - dup_pkt = priv_dup_find(dlthis, secnn, image_offset); - if (dup_pkt != NULL) { - for (i = 0; i < dup_pkt->img_pkt.packet_size; i++) - *(dup_pkt->img_pkt.img_data + i) = - *(ipacket->img_data + i); - - ret_val = 1; - } else { - dload_error(dlthis, - "Unable to find existing DUP pkt for %x, offset %x", - secnn, image_offset); - - } - - return ret_val; -} - -/* - * Function: dload_tramp_finalize - * Description: If any trampolines were created, finalize everything on the - * target by allocating the trampoline section on the target, - * finalizing the trampoline symbols, finalizing the trampoline - * packets (write the new section to target memory) and finalize - * the duplicate packets by doing 2nd pass relo over them. - */ -int dload_tramp_finalize(struct dload_state *dlthis) -{ - int ret_val = 1; - - if (dlthis->tramp.tramp_sect_next_addr != 0) { - /* Finalize strings into a flat table. This is needed so it - * can be added to the debug string table later. */ - ret_val = priv_string_tbl_finalize(dlthis); - - /* Do target allocation for section BEFORE finalizing - * symbols. */ - if (ret_val != 0) - ret_val = priv_tramp_sect_tgt_alloc(dlthis); - - /* Finalize symbols with their correct target information and - * flatten */ - if (ret_val != 0) - ret_val = priv_tramp_sym_finalize(dlthis); - - /* Finalize all trampoline packets. This performs the - * relocation on the packets as well as writing them to target - * memory. */ - if (ret_val != 0) - ret_val = priv_tramp_pkt_finalize(dlthis); - - /* Perform a 2nd pass relocation on the dup list. */ - if (ret_val != 0) - ret_val = priv_dup_pkt_finalize(dlthis); - } - - return ret_val; -} - -/* - * Function: dload_tramp_cleanup - * Description: Release all temporary resources used in the trampoline layer. - * Note that the target memory which may have been allocated and - * written to store the trampolines is NOT RELEASED HERE since it - * is potentially still in use. It is automatically released - * when the module is unloaded. - */ -void dload_tramp_cleanup(struct dload_state *dlthis) -{ - struct tramp_info *tramp = &dlthis->tramp; - struct tramp_sym *cur_sym; - struct tramp_string *cur_string; - struct tramp_img_pkt *cur_tramp_pkt; - struct tramp_img_dup_pkt *cur_dup_pkt; - struct tramp_img_dup_relo *cur_dup_relo; - - /* If there were no tramps generated, just return */ - if (tramp->tramp_sect_next_addr == 0) - return; - - /* Destroy all tramp information */ - for (cur_sym = tramp->symbol_head; - cur_sym != NULL; cur_sym = tramp->symbol_head) { - tramp->symbol_head = cur_sym->next; - if (tramp->symbol_tail == cur_sym) - tramp->symbol_tail = NULL; - - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_sym); - } - - if (tramp->final_sym_table != NULL) - dlthis->mysym->dload_deallocate(dlthis->mysym, - tramp->final_sym_table); - - for (cur_string = tramp->string_head; - cur_string != NULL; cur_string = tramp->string_head) { - tramp->string_head = cur_string->next; - if (tramp->string_tail == cur_string) - tramp->string_tail = NULL; - - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_string); - } - - if (tramp->final_string_table != NULL) - dlthis->mysym->dload_deallocate(dlthis->mysym, - tramp->final_string_table); - - for (cur_tramp_pkt = tramp->tramp_pkts; - cur_tramp_pkt != NULL; cur_tramp_pkt = tramp->tramp_pkts) { - tramp->tramp_pkts = cur_tramp_pkt->next; - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_tramp_pkt); - } - - for (cur_dup_pkt = tramp->dup_pkts; - cur_dup_pkt != NULL; cur_dup_pkt = tramp->dup_pkts) { - tramp->dup_pkts = cur_dup_pkt->next; - - for (cur_dup_relo = cur_dup_pkt->relo_chain; - cur_dup_relo != NULL; - cur_dup_relo = cur_dup_pkt->relo_chain) { - cur_dup_pkt->relo_chain = cur_dup_relo->next; - dlthis->mysym->dload_deallocate(dlthis->mysym, - cur_dup_relo); - } - - dlthis->mysym->dload_deallocate(dlthis->mysym, cur_dup_pkt); - } -} diff --git a/drivers/staging/tidspbridge/dynload/tramp_table_c6000.c b/drivers/staging/tidspbridge/dynload/tramp_table_c6000.c deleted file mode 100644 index 09cc64f213c0..000000000000 --- a/drivers/staging/tidspbridge/dynload/tramp_table_c6000.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * tramp_table_c6000.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include "dload_internal.h" - -/* These are defined in coff.h, but may not be available on all platforms - so we'll go ahead and define them here. */ -#ifndef R_C60LO16 -#define R_C60LO16 0x54 /* C60: MVK Low Half Register */ -#define R_C60HI16 0x55 /* C60: MVKH/MVKLH High Half Register */ -#endif - -#define C6X_TRAMP_WORD_COUNT 8 -#define C6X_TRAMP_MAX_RELOS 8 - -/* THIS HASH FUNCTION MUST MATCH THE ONE reloc_table_c6000.c */ -#define HASH_FUNC(zz) (((((zz) + 1) * 1845UL) >> 11) & 63) - -/* THIS MUST MATCH reloc_record_t FOR A SYMBOL BASED RELO */ -struct c6000_relo_record { - s32 vaddr; - s32 symndx; -#ifndef _BIG_ENDIAN - u16 disp; - u16 type; -#else - u16 type; - u16 disp; -#endif -}; - -struct c6000_gen_code { - struct tramp_gen_code_hdr hdr; - u32 tramp_instrs[C6X_TRAMP_WORD_COUNT]; - struct c6000_relo_record relos[C6X_TRAMP_MAX_RELOS]; -}; - -/* Hash mapping for relos that can cause trampolines. */ -static const u16 tramp_map[] = { - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 0, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535, - 65535 -}; - -static const struct c6000_gen_code tramp_gen_info[] = { - /* Tramp caused by R_C60PCR21 */ - { - /* Header - 8 instructions, 2 relos */ - { - sizeof(u32) * C6X_TRAMP_WORD_COUNT, - 2, - FIELD_OFFSET(struct c6000_gen_code, relos) - }, - - /* Trampoline instructions */ - { - 0x053C54F7, /* STW.D2T2 B10, *sp--[2] */ - 0x0500002A, /* || MVK.S2 , B10 */ - 0x0500006A, /* MVKH.S2 , B10 */ - 0x00280362, /* B.S2 B10 */ - 0x053C52E6, /* LDW.D2T2 *++sp[2], B10 */ - 0x00006000, /* NOP 4 */ - 0x00000000, /* NOP */ - 0x00000000 /* NOP */ - }, - - /* Relocations */ - { - {4, 0, 0, R_C60LO16}, - {8, 0, 0, R_C60HI16}, - {0, 0, 0, 0x0000}, - {0, 0, 0, 0x0000}, - {0, 0, 0, 0x0000}, - {0, 0, 0, 0x0000}, - {0, 0, 0, 0x0000}, - {0, 0, 0, 0x0000} - } - } -}; - -/* TARGET SPECIFIC FUNCTIONS THAT MUST BE DEFINED */ -static u32 tramp_size_get(void) -{ - return sizeof(u32) * C6X_TRAMP_WORD_COUNT; -} - -static u32 tramp_img_pkt_size_get(void) -{ - return sizeof(struct c6000_gen_code); -} diff --git a/drivers/staging/tidspbridge/gen/gh.c b/drivers/staging/tidspbridge/gen/gh.c deleted file mode 100644 index 936470cb608e..000000000000 --- a/drivers/staging/tidspbridge/gen/gh.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * gh.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include -#include - -struct gh_node { - struct hlist_node hl; - u8 data[0]; -}; - -#define GH_HASH_ORDER 8 - -struct gh_t_hash_tab { - u32 val_size; - DECLARE_HASHTABLE(hash_table, GH_HASH_ORDER); - u32 (*hash)(const void *key); - bool (*match)(const void *key, const void *value); - void (*delete)(void *key); -}; - -/* - * ======== gh_create ======== - */ - -struct gh_t_hash_tab *gh_create(u32 val_size, u32 (*hash)(const void *), - bool (*match)(const void *, const void *), - void (*delete)(void *)) -{ - struct gh_t_hash_tab *hash_tab; - - hash_tab = kzalloc(sizeof(struct gh_t_hash_tab), GFP_KERNEL); - if (!hash_tab) - return ERR_PTR(-ENOMEM); - - hash_init(hash_tab->hash_table); - - hash_tab->val_size = val_size; - hash_tab->hash = hash; - hash_tab->match = match; - hash_tab->delete = delete; - - return hash_tab; -} - -/* - * ======== gh_delete ======== - */ -void gh_delete(struct gh_t_hash_tab *hash_tab) -{ - struct gh_node *n; - struct hlist_node *tmp; - u32 i; - - if (hash_tab) { - hash_for_each_safe(hash_tab->hash_table, i, tmp, n, hl) { - hash_del(&n->hl); - if (hash_tab->delete) - hash_tab->delete(n->data); - kfree(n); - } - - kfree(hash_tab); - } -} - -/* - * ======== gh_find ======== - */ - -void *gh_find(struct gh_t_hash_tab *hash_tab, const void *key) -{ - struct gh_node *n; - u32 key_hash = hash_tab->hash(key); - - hash_for_each_possible(hash_tab->hash_table, n, hl, key_hash) { - if (hash_tab->match(key, n->data)) - return n->data; - } - - return ERR_PTR(-ENODATA); -} - -/* - * ======== gh_insert ======== - */ - -void *gh_insert(struct gh_t_hash_tab *hash_tab, const void *key, - const void *value) -{ - struct gh_node *n; - - n = kmalloc(sizeof(struct gh_node) + hash_tab->val_size, - GFP_KERNEL); - - if (!n) - return ERR_PTR(-ENOMEM); - - INIT_HLIST_NODE(&n->hl); - hash_add(hash_tab->hash_table, &n->hl, hash_tab->hash(key)); - memcpy(n->data, value, hash_tab->val_size); - - return n->data; -} - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/** - * gh_iterate() - This function goes through all the elements in the hash table - * looking for the dsp symbols. - * @hash_tab: Hash table - * @callback: pointer to callback function - * @user_data: User data, contains the find_symbol_context pointer - * - */ -void gh_iterate(struct gh_t_hash_tab *hash_tab, - void (*callback)(void *, void *), void *user_data) -{ - struct gh_node *n; - u32 i; - - if (!hash_tab) - return; - - hash_for_each(hash_tab->hash_table, i, n, hl) - callback(&n->data, user_data); -} -#endif diff --git a/drivers/staging/tidspbridge/hw/EasiGlobal.h b/drivers/staging/tidspbridge/hw/EasiGlobal.h deleted file mode 100644 index e48d7f67c60a..000000000000 --- a/drivers/staging/tidspbridge/hw/EasiGlobal.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * EasiGlobal.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _EASIGLOBAL_H -#define _EASIGLOBAL_H -#include - -/* - * DEFINE: READ_ONLY, WRITE_ONLY & READ_WRITE - * - * DESCRIPTION: Defines used to describe register types for EASI-checker tests. - */ - -#define READ_ONLY 1 -#define WRITE_ONLY 2 -#define READ_WRITE 3 - -/* - * MACRO: _DEBUG_LEVEL1_EASI - * - * DESCRIPTION: A MACRO which can be used to indicate that a particular beach - * register access function was called. - * - * NOTE: We currently dont use this functionality. - */ -#define _DEBUG_LEVEL1_EASI(easi_num) ((void)0) - -#endif /* _EASIGLOBAL_H */ diff --git a/drivers/staging/tidspbridge/hw/MMUAccInt.h b/drivers/staging/tidspbridge/hw/MMUAccInt.h deleted file mode 100644 index 1cefca321d71..000000000000 --- a/drivers/staging/tidspbridge/hw/MMUAccInt.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * MMUAccInt.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _MMU_ACC_INT_H -#define _MMU_ACC_INT_H - -/* Mappings of level 1 EASI function numbers to function names */ - -#define EASIL1_MMUMMU_SYSCONFIG_READ_REGISTER32 (MMU_BASE_EASIL1 + 3) -#define EASIL1_MMUMMU_SYSCONFIG_IDLE_MODE_WRITE32 (MMU_BASE_EASIL1 + 17) -#define EASIL1_MMUMMU_SYSCONFIG_AUTO_IDLE_WRITE32 (MMU_BASE_EASIL1 + 39) -#define EASIL1_MMUMMU_IRQSTATUS_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 51) -#define EASIL1_MMUMMU_IRQENABLE_READ_REGISTER32 (MMU_BASE_EASIL1 + 102) -#define EASIL1_MMUMMU_IRQENABLE_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 103) -#define EASIL1_MMUMMU_WALKING_STTWL_RUNNING_READ32 (MMU_BASE_EASIL1 + 156) -#define EASIL1_MMUMMU_CNTLTWL_ENABLE_READ32 (MMU_BASE_EASIL1 + 174) -#define EASIL1_MMUMMU_CNTLTWL_ENABLE_WRITE32 (MMU_BASE_EASIL1 + 180) -#define EASIL1_MMUMMU_CNTLMMU_ENABLE_WRITE32 (MMU_BASE_EASIL1 + 190) -#define EASIL1_MMUMMU_FAULT_AD_READ_REGISTER32 (MMU_BASE_EASIL1 + 194) -#define EASIL1_MMUMMU_TTB_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 198) -#define EASIL1_MMUMMU_LOCK_READ_REGISTER32 (MMU_BASE_EASIL1 + 203) -#define EASIL1_MMUMMU_LOCK_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 204) -#define EASIL1_MMUMMU_LOCK_BASE_VALUE_READ32 (MMU_BASE_EASIL1 + 205) -#define EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_READ32 (MMU_BASE_EASIL1 + 209) -#define EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_WRITE32 (MMU_BASE_EASIL1 + 211) -#define EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_SET32 (MMU_BASE_EASIL1 + 212) -#define EASIL1_MMUMMU_LD_TLB_READ_REGISTER32 (MMU_BASE_EASIL1 + 213) -#define EASIL1_MMUMMU_LD_TLB_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 214) -#define EASIL1_MMUMMU_CAM_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 226) -#define EASIL1_MMUMMU_RAM_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 268) -#define EASIL1_MMUMMU_FLUSH_ENTRY_WRITE_REGISTER32 (MMU_BASE_EASIL1 + 322) - -/* Register offset address definitions */ -#define MMU_MMU_SYSCONFIG_OFFSET 0x10 -#define MMU_MMU_IRQSTATUS_OFFSET 0x18 -#define MMU_MMU_IRQENABLE_OFFSET 0x1c -#define MMU_MMU_WALKING_ST_OFFSET 0x40 -#define MMU_MMU_CNTL_OFFSET 0x44 -#define MMU_MMU_FAULT_AD_OFFSET 0x48 -#define MMU_MMU_TTB_OFFSET 0x4c -#define MMU_MMU_LOCK_OFFSET 0x50 -#define MMU_MMU_LD_TLB_OFFSET 0x54 -#define MMU_MMU_CAM_OFFSET 0x58 -#define MMU_MMU_RAM_OFFSET 0x5c -#define MMU_MMU_GFLUSH_OFFSET 0x60 -#define MMU_MMU_FLUSH_ENTRY_OFFSET 0x64 -/* Bitfield mask and offset declarations */ -#define MMU_MMU_SYSCONFIG_IDLE_MODE_MASK 0x18 -#define MMU_MMU_SYSCONFIG_IDLE_MODE_OFFSET 3 -#define MMU_MMU_SYSCONFIG_AUTO_IDLE_MASK 0x1 -#define MMU_MMU_SYSCONFIG_AUTO_IDLE_OFFSET 0 -#define MMU_MMU_WALKING_ST_TWL_RUNNING_MASK 0x1 -#define MMU_MMU_WALKING_ST_TWL_RUNNING_OFFSET 0 -#define MMU_MMU_CNTL_TWL_ENABLE_MASK 0x4 -#define MMU_MMU_CNTL_TWL_ENABLE_OFFSET 2 -#define MMU_MMU_CNTL_MMU_ENABLE_MASK 0x2 -#define MMU_MMU_CNTL_MMU_ENABLE_OFFSET 1 -#define MMU_MMU_LOCK_BASE_VALUE_MASK 0xfc00 -#define MMU_MMU_LOCK_BASE_VALUE_OFFSET 10 -#define MMU_MMU_LOCK_CURRENT_VICTIM_MASK 0x3f0 -#define MMU_MMU_LOCK_CURRENT_VICTIM_OFFSET 4 - -#endif /* _MMU_ACC_INT_H */ diff --git a/drivers/staging/tidspbridge/hw/MMURegAcM.h b/drivers/staging/tidspbridge/hw/MMURegAcM.h deleted file mode 100644 index ab1a16da731c..000000000000 --- a/drivers/staging/tidspbridge/hw/MMURegAcM.h +++ /dev/null @@ -1,225 +0,0 @@ -/* - * MMURegAcM.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _MMU_REG_ACM_H -#define _MMU_REG_ACM_H - -#include -#include - -#include "MMUAccInt.h" - -#if defined(USE_LEVEL_1_MACROS) - -#define MMUMMU_SYSCONFIG_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_SYSCONFIG_READ_REGISTER32),\ - __raw_readl((base_address)+MMU_MMU_SYSCONFIG_OFFSET)) - -#define MMUMMU_SYSCONFIG_IDLE_MODE_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_SYSCONFIG_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_SYSCONFIG_IDLE_MODE_WRITE32);\ - data &= ~(MMU_MMU_SYSCONFIG_IDLE_MODE_MASK);\ - new_value <<= MMU_MMU_SYSCONFIG_IDLE_MODE_OFFSET;\ - new_value &= MMU_MMU_SYSCONFIG_IDLE_MODE_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_SYSCONFIG_AUTO_IDLE_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_SYSCONFIG_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_SYSCONFIG_AUTO_IDLE_WRITE32);\ - data &= ~(MMU_MMU_SYSCONFIG_AUTO_IDLE_MASK);\ - new_value <<= MMU_MMU_SYSCONFIG_AUTO_IDLE_OFFSET;\ - new_value &= MMU_MMU_SYSCONFIG_AUTO_IDLE_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_IRQSTATUS_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(easil1_mmummu_irqstatus_read_register32),\ - __raw_readl((base_address)+MMU_MMU_IRQSTATUS_OFFSET)) - -#define MMUMMU_IRQSTATUS_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_IRQSTATUS_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_IRQSTATUS_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_IRQENABLE_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_IRQENABLE_READ_REGISTER32),\ - __raw_readl((base_address)+MMU_MMU_IRQENABLE_OFFSET)) - -#define MMUMMU_IRQENABLE_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_IRQENABLE_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_IRQENABLE_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_WALKING_STTWL_RUNNING_READ32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_WALKING_STTWL_RUNNING_READ32),\ - (((__raw_readl(((base_address)+(MMU_MMU_WALKING_ST_OFFSET))))\ - & MMU_MMU_WALKING_ST_TWL_RUNNING_MASK) >>\ - MMU_MMU_WALKING_ST_TWL_RUNNING_OFFSET)) - -#define MMUMMU_CNTLTWL_ENABLE_READ32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_CNTLTWL_ENABLE_READ32),\ - (((__raw_readl(((base_address)+(MMU_MMU_CNTL_OFFSET)))) &\ - MMU_MMU_CNTL_TWL_ENABLE_MASK) >>\ - MMU_MMU_CNTL_TWL_ENABLE_OFFSET)) - -#define MMUMMU_CNTLTWL_ENABLE_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_CNTL_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_CNTLTWL_ENABLE_WRITE32);\ - data &= ~(MMU_MMU_CNTL_TWL_ENABLE_MASK);\ - new_value <<= MMU_MMU_CNTL_TWL_ENABLE_OFFSET;\ - new_value &= MMU_MMU_CNTL_TWL_ENABLE_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_CNTLMMU_ENABLE_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_CNTL_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_CNTLMMU_ENABLE_WRITE32);\ - data &= ~(MMU_MMU_CNTL_MMU_ENABLE_MASK);\ - new_value <<= MMU_MMU_CNTL_MMU_ENABLE_OFFSET;\ - new_value &= MMU_MMU_CNTL_MMU_ENABLE_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_FAULT_AD_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_FAULT_AD_READ_REGISTER32),\ - __raw_readl((base_address)+MMU_MMU_FAULT_AD_OFFSET)) - -#define MMUMMU_TTB_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_TTB_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_TTB_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_LOCK_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_READ_REGISTER32),\ - __raw_readl((base_address)+MMU_MMU_LOCK_OFFSET)) - -#define MMUMMU_LOCK_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_LOCK_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_LOCK_BASE_VALUE_READ32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_BASE_VALUE_READ32),\ - (((__raw_readl(((base_address)+(MMU_MMU_LOCK_OFFSET)))) &\ - MMU_MMU_LOCK_BASE_VALUE_MASK) >>\ - MMU_MMU_LOCK_BASE_VALUE_OFFSET)) - -#define MMUMMU_LOCK_BASE_VALUE_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_LOCK_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(easil1_mmummu_lock_base_value_write32);\ - data &= ~(MMU_MMU_LOCK_BASE_VALUE_MASK);\ - new_value <<= MMU_MMU_LOCK_BASE_VALUE_OFFSET;\ - new_value &= MMU_MMU_LOCK_BASE_VALUE_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_LOCK_CURRENT_VICTIM_READ32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_READ32),\ - (((__raw_readl(((base_address)+(MMU_MMU_LOCK_OFFSET)))) &\ - MMU_MMU_LOCK_CURRENT_VICTIM_MASK) >>\ - MMU_MMU_LOCK_CURRENT_VICTIM_OFFSET)) - -#define MMUMMU_LOCK_CURRENT_VICTIM_WRITE32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_LOCK_OFFSET;\ - register u32 data = __raw_readl((base_address)+offset);\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_WRITE32);\ - data &= ~(MMU_MMU_LOCK_CURRENT_VICTIM_MASK);\ - new_value <<= MMU_MMU_LOCK_CURRENT_VICTIM_OFFSET;\ - new_value &= MMU_MMU_LOCK_CURRENT_VICTIM_MASK;\ - new_value |= data;\ - __raw_writel(new_value, base_address+offset);\ -} - -#define MMUMMU_LOCK_CURRENT_VICTIM_SET32(var, value)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LOCK_CURRENT_VICTIM_SET32),\ - (((var) & ~(MMU_MMU_LOCK_CURRENT_VICTIM_MASK)) |\ - (((value) << MMU_MMU_LOCK_CURRENT_VICTIM_OFFSET) &\ - MMU_MMU_LOCK_CURRENT_VICTIM_MASK))) - -#define MMUMMU_LD_TLB_READ_REGISTER32(base_address)\ - (_DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LD_TLB_READ_REGISTER32),\ - __raw_readl((base_address)+MMU_MMU_LD_TLB_OFFSET)) - -#define MMUMMU_LD_TLB_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_LD_TLB_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_LD_TLB_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_CAM_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_CAM_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_CAM_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_RAM_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_RAM_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_RAM_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#define MMUMMU_FLUSH_ENTRY_WRITE_REGISTER32(base_address, value)\ -{\ - const u32 offset = MMU_MMU_FLUSH_ENTRY_OFFSET;\ - register u32 new_value = (value);\ - _DEBUG_LEVEL1_EASI(EASIL1_MMUMMU_FLUSH_ENTRY_WRITE_REGISTER32);\ - __raw_writel(new_value, (base_address)+offset);\ -} - -#endif /* USE_LEVEL_1_MACROS */ - -#endif /* _MMU_REG_ACM_H */ diff --git a/drivers/staging/tidspbridge/hw/hw_defs.h b/drivers/staging/tidspbridge/hw/hw_defs.h deleted file mode 100644 index d5266d4c163f..000000000000 --- a/drivers/staging/tidspbridge/hw/hw_defs.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * hw_defs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global HW definitions - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _HW_DEFS_H -#define _HW_DEFS_H - -/* Page size */ -#define HW_PAGE_SIZE4KB 0x1000 -#define HW_PAGE_SIZE64KB 0x10000 -#define HW_PAGE_SIZE1MB 0x100000 -#define HW_PAGE_SIZE16MB 0x1000000 - -/* hw_status: return type for HW API */ -typedef long hw_status; - -/* Macro used to set and clear any bit */ -#define HW_CLEAR 0 -#define HW_SET 1 - -/* hw_endianism_t: Enumerated Type used to specify the endianism - * Do NOT change these values. They are used as bit fields. */ -enum hw_endianism_t { - HW_LITTLE_ENDIAN, - HW_BIG_ENDIAN -}; - -/* hw_element_size_t: Enumerated Type used to specify the element size - * Do NOT change these values. They are used as bit fields. */ -enum hw_element_size_t { - HW_ELEM_SIZE8BIT, - HW_ELEM_SIZE16BIT, - HW_ELEM_SIZE32BIT, - HW_ELEM_SIZE64BIT -}; - -/* hw_idle_mode_t: Enumerated Type used to specify Idle modes */ -enum hw_idle_mode_t { - HW_FORCE_IDLE, - HW_NO_IDLE, - HW_SMART_IDLE -}; - -#endif /* _HW_DEFS_H */ diff --git a/drivers/staging/tidspbridge/hw/hw_mmu.c b/drivers/staging/tidspbridge/hw/hw_mmu.c deleted file mode 100644 index 50244a474178..000000000000 --- a/drivers/staging/tidspbridge/hw/hw_mmu.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - * hw_mmu.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * API definitions to setup MMU TLB and PTE - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include "MMURegAcM.h" -#include -#include -#include -#include - -#define MMU_BASE_VAL_MASK 0xFC00 -#define MMU_PAGE_MAX 3 -#define MMU_ELEMENTSIZE_MAX 3 -#define MMU_ADDR_MASK 0xFFFFF000 -#define MMU_TTB_MASK 0xFFFFC000 -#define MMU_SECTION_ADDR_MASK 0xFFF00000 -#define MMU_SSECTION_ADDR_MASK 0xFF000000 -#define MMU_PAGE_TABLE_MASK 0xFFFFFC00 -#define MMU_LARGE_PAGE_MASK 0xFFFF0000 -#define MMU_SMALL_PAGE_MASK 0xFFFFF000 - -#define MMU_LOAD_TLB 0x00000001 -#define MMU_GFLUSH 0x60 - -/* - * hw_mmu_page_size_t: Enumerated Type used to specify the MMU Page Size(SLSS) - */ -enum hw_mmu_page_size_t { - HW_MMU_SECTION, - HW_MMU_LARGE_PAGE, - HW_MMU_SMALL_PAGE, - HW_MMU_SUPERSECTION -}; - -/* - * FUNCTION : mmu_set_cam_entry - * - * INPUTS: - * - * Identifier : base_address - * Type : void __iomem * - * Description : Base Address of instance of MMU module - * - * Identifier : page_sz - * TypE : const u32 - * Description : It indicates the page size - * - * Identifier : preserved_bit - * Type : const u32 - * Description : It indicates the TLB entry is preserved entry - * or not - * - * Identifier : valid_bit - * Type : const u32 - * Description : It indicates the TLB entry is valid entry or not - * - * - * Identifier : virtual_addr_tag - * Type : const u32 - * Description : virtual Address - * - * RETURNS: - * - * Type : hw_status - * Description : 0 -- No errors occurred - * RET_BAD_NULL_PARAM -- A Pointer Parameter - * was set to NULL - * RET_PARAM_OUT_OF_RANGE -- Input Parameter out - * of Range - * - * PURPOSE: : Set MMU_CAM reg - * - * METHOD: : Check the Input parameters and set the CAM entry. - */ -static hw_status mmu_set_cam_entry(void __iomem *base_address, - const u32 page_sz, - const u32 preserved_bit, - const u32 valid_bit, - const u32 virtual_addr_tag); - -/* - * FUNCTION : mmu_set_ram_entry - * - * INPUTS: - * - * Identifier : base_address - * Type : void __iomem * - * Description : Base Address of instance of MMU module - * - * Identifier : physical_addr - * Type : const u32 - * Description : Physical Address to which the corresponding - * virtual Address shouldpoint - * - * Identifier : endianism - * Type : hw_endianism_t - * Description : endianism for the given page - * - * Identifier : element_size - * Type : hw_element_size_t - * Description : The element size ( 8,16, 32 or 64 bit) - * - * Identifier : mixed_size - * Type : hw_mmu_mixed_size_t - * Description : Element Size to follow CPU or TLB - * - * RETURNS: - * - * Type : hw_status - * Description : 0 -- No errors occurred - * RET_BAD_NULL_PARAM -- A Pointer Parameter - * was set to NULL - * RET_PARAM_OUT_OF_RANGE -- Input Parameter - * out of Range - * - * PURPOSE: : Set MMU_CAM reg - * - * METHOD: : Check the Input parameters and set the RAM entry. - */ -static hw_status mmu_set_ram_entry(void __iomem *base_address, - const u32 physical_addr, - enum hw_endianism_t endianism, - enum hw_element_size_t element_size, - enum hw_mmu_mixed_size_t mixed_size); - -/* HW FUNCTIONS */ - -hw_status hw_mmu_enable(void __iomem *base_address) -{ - hw_status status = 0; - - MMUMMU_CNTLMMU_ENABLE_WRITE32(base_address, HW_SET); - - return status; -} - -hw_status hw_mmu_disable(void __iomem *base_address) -{ - hw_status status = 0; - - MMUMMU_CNTLMMU_ENABLE_WRITE32(base_address, HW_CLEAR); - - return status; -} - -hw_status hw_mmu_num_locked_set(void __iomem *base_address, - u32 num_locked_entries) -{ - hw_status status = 0; - - MMUMMU_LOCK_BASE_VALUE_WRITE32(base_address, num_locked_entries); - - return status; -} - -hw_status hw_mmu_victim_num_set(void __iomem *base_address, - u32 victim_entry_num) -{ - hw_status status = 0; - - MMUMMU_LOCK_CURRENT_VICTIM_WRITE32(base_address, victim_entry_num); - - return status; -} - -hw_status hw_mmu_event_ack(void __iomem *base_address, u32 irq_mask) -{ - hw_status status = 0; - - MMUMMU_IRQSTATUS_WRITE_REGISTER32(base_address, irq_mask); - - return status; -} - -hw_status hw_mmu_event_disable(void __iomem *base_address, u32 irq_mask) -{ - hw_status status = 0; - u32 irq_reg; - - irq_reg = MMUMMU_IRQENABLE_READ_REGISTER32(base_address); - - MMUMMU_IRQENABLE_WRITE_REGISTER32(base_address, irq_reg & ~irq_mask); - - return status; -} - -hw_status hw_mmu_event_enable(void __iomem *base_address, u32 irq_mask) -{ - hw_status status = 0; - u32 irq_reg; - - irq_reg = MMUMMU_IRQENABLE_READ_REGISTER32(base_address); - - MMUMMU_IRQENABLE_WRITE_REGISTER32(base_address, irq_reg | irq_mask); - - return status; -} - -hw_status hw_mmu_event_status(void __iomem *base_address, u32 *irq_mask) -{ - hw_status status = 0; - - *irq_mask = MMUMMU_IRQSTATUS_READ_REGISTER32(base_address); - - return status; -} - -hw_status hw_mmu_fault_addr_read(void __iomem *base_address, u32 *addr) -{ - hw_status status = 0; - - /* read values from register */ - *addr = MMUMMU_FAULT_AD_READ_REGISTER32(base_address); - - return status; -} - -hw_status hw_mmu_ttb_set(void __iomem *base_address, u32 ttb_phys_addr) -{ - hw_status status = 0; - u32 load_ttb; - - load_ttb = ttb_phys_addr & ~0x7FUL; - /* write values to register */ - MMUMMU_TTB_WRITE_REGISTER32(base_address, load_ttb); - - return status; -} - -hw_status hw_mmu_twl_enable(void __iomem *base_address) -{ - hw_status status = 0; - - MMUMMU_CNTLTWL_ENABLE_WRITE32(base_address, HW_SET); - - return status; -} - -hw_status hw_mmu_twl_disable(void __iomem *base_address) -{ - hw_status status = 0; - - MMUMMU_CNTLTWL_ENABLE_WRITE32(base_address, HW_CLEAR); - - return status; -} - -hw_status hw_mmu_tlb_add(void __iomem *base_address, - u32 physical_addr, - u32 virtual_addr, - u32 page_sz, - u32 entry_num, - struct hw_mmu_map_attrs_t *map_attrs, - s8 preserved_bit, s8 valid_bit) -{ - hw_status status = 0; - u32 lock_reg; - u32 virtual_addr_tag; - enum hw_mmu_page_size_t mmu_pg_size; - - /*Check the input Parameters */ - switch (page_sz) { - case HW_PAGE_SIZE4KB: - mmu_pg_size = HW_MMU_SMALL_PAGE; - break; - - case HW_PAGE_SIZE64KB: - mmu_pg_size = HW_MMU_LARGE_PAGE; - break; - - case HW_PAGE_SIZE1MB: - mmu_pg_size = HW_MMU_SECTION; - break; - - case HW_PAGE_SIZE16MB: - mmu_pg_size = HW_MMU_SUPERSECTION; - break; - - default: - return -EINVAL; - } - - lock_reg = MMUMMU_LOCK_READ_REGISTER32(base_address); - - /* Generate the 20-bit tag from virtual address */ - virtual_addr_tag = ((virtual_addr & MMU_ADDR_MASK) >> 12); - - /* Write the fields in the CAM Entry Register */ - mmu_set_cam_entry(base_address, mmu_pg_size, preserved_bit, valid_bit, - virtual_addr_tag); - - /* Write the different fields of the RAM Entry Register */ - /* endianism of the page,Element Size of the page (8, 16, 32, 64 bit) */ - mmu_set_ram_entry(base_address, physical_addr, map_attrs->endianism, - map_attrs->element_size, map_attrs->mixed_size); - - /* Update the MMU Lock Register */ - /* currentVictim between lockedBaseValue and (MMU_Entries_Number - 1) */ - MMUMMU_LOCK_CURRENT_VICTIM_WRITE32(base_address, entry_num); - - /* Enable loading of an entry in TLB by writing 1 - into LD_TLB_REG register */ - MMUMMU_LD_TLB_WRITE_REGISTER32(base_address, MMU_LOAD_TLB); - - MMUMMU_LOCK_WRITE_REGISTER32(base_address, lock_reg); - - return status; -} - -hw_status hw_mmu_pte_set(const u32 pg_tbl_va, - u32 physical_addr, - u32 virtual_addr, - u32 page_sz, struct hw_mmu_map_attrs_t *map_attrs) -{ - hw_status status = 0; - u32 pte_addr, pte_val; - s32 num_entries = 1; - - switch (page_sz) { - case HW_PAGE_SIZE4KB: - pte_addr = hw_mmu_pte_addr_l2(pg_tbl_va, - virtual_addr & - MMU_SMALL_PAGE_MASK); - pte_val = - ((physical_addr & MMU_SMALL_PAGE_MASK) | - (map_attrs->endianism << 9) | (map_attrs-> - element_size << 4) | - (map_attrs->mixed_size << 11) | 2); - break; - - case HW_PAGE_SIZE64KB: - num_entries = 16; - pte_addr = hw_mmu_pte_addr_l2(pg_tbl_va, - virtual_addr & - MMU_LARGE_PAGE_MASK); - pte_val = - ((physical_addr & MMU_LARGE_PAGE_MASK) | - (map_attrs->endianism << 9) | (map_attrs-> - element_size << 4) | - (map_attrs->mixed_size << 11) | 1); - break; - - case HW_PAGE_SIZE1MB: - pte_addr = hw_mmu_pte_addr_l1(pg_tbl_va, - virtual_addr & - MMU_SECTION_ADDR_MASK); - pte_val = - ((((physical_addr & MMU_SECTION_ADDR_MASK) | - (map_attrs->endianism << 15) | (map_attrs-> - element_size << 10) | - (map_attrs->mixed_size << 17)) & ~0x40000) | 0x2); - break; - - case HW_PAGE_SIZE16MB: - num_entries = 16; - pte_addr = hw_mmu_pte_addr_l1(pg_tbl_va, - virtual_addr & - MMU_SSECTION_ADDR_MASK); - pte_val = - (((physical_addr & MMU_SSECTION_ADDR_MASK) | - (map_attrs->endianism << 15) | (map_attrs-> - element_size << 10) | - (map_attrs->mixed_size << 17) - ) | 0x40000 | 0x2); - break; - - case HW_MMU_COARSE_PAGE_SIZE: - pte_addr = hw_mmu_pte_addr_l1(pg_tbl_va, - virtual_addr & - MMU_SECTION_ADDR_MASK); - pte_val = (physical_addr & MMU_PAGE_TABLE_MASK) | 1; - break; - - default: - return -EINVAL; - } - - while (--num_entries >= 0) - ((u32 *) pte_addr)[num_entries] = pte_val; - - return status; -} - -hw_status hw_mmu_pte_clear(const u32 pg_tbl_va, u32 virtual_addr, u32 page_size) -{ - hw_status status = 0; - u32 pte_addr; - s32 num_entries = 1; - - switch (page_size) { - case HW_PAGE_SIZE4KB: - pte_addr = hw_mmu_pte_addr_l2(pg_tbl_va, - virtual_addr & - MMU_SMALL_PAGE_MASK); - break; - - case HW_PAGE_SIZE64KB: - num_entries = 16; - pte_addr = hw_mmu_pte_addr_l2(pg_tbl_va, - virtual_addr & - MMU_LARGE_PAGE_MASK); - break; - - case HW_PAGE_SIZE1MB: - case HW_MMU_COARSE_PAGE_SIZE: - pte_addr = hw_mmu_pte_addr_l1(pg_tbl_va, - virtual_addr & - MMU_SECTION_ADDR_MASK); - break; - - case HW_PAGE_SIZE16MB: - num_entries = 16; - pte_addr = hw_mmu_pte_addr_l1(pg_tbl_va, - virtual_addr & - MMU_SSECTION_ADDR_MASK); - break; - - default: - return -EINVAL; - } - - while (--num_entries >= 0) - ((u32 *) pte_addr)[num_entries] = 0; - - return status; -} - -/* mmu_set_cam_entry */ -static hw_status mmu_set_cam_entry(void __iomem *base_address, - const u32 page_sz, - const u32 preserved_bit, - const u32 valid_bit, - const u32 virtual_addr_tag) -{ - hw_status status = 0; - u32 mmu_cam_reg; - - mmu_cam_reg = (virtual_addr_tag << 12); - mmu_cam_reg = (mmu_cam_reg) | (page_sz) | (valid_bit << 2) | - (preserved_bit << 3); - - /* write values to register */ - MMUMMU_CAM_WRITE_REGISTER32(base_address, mmu_cam_reg); - - return status; -} - -/* mmu_set_ram_entry */ -static hw_status mmu_set_ram_entry(void __iomem *base_address, - const u32 physical_addr, - enum hw_endianism_t endianism, - enum hw_element_size_t element_size, - enum hw_mmu_mixed_size_t mixed_size) -{ - hw_status status = 0; - u32 mmu_ram_reg; - - mmu_ram_reg = (physical_addr & MMU_ADDR_MASK); - mmu_ram_reg = (mmu_ram_reg) | ((endianism << 9) | (element_size << 7) | - (mixed_size << 6)); - - /* write values to register */ - MMUMMU_RAM_WRITE_REGISTER32(base_address, mmu_ram_reg); - - return status; - -} - -void hw_mmu_tlb_flush_all(void __iomem *base) -{ - __raw_writel(1, base + MMU_GFLUSH); -} diff --git a/drivers/staging/tidspbridge/hw/hw_mmu.h b/drivers/staging/tidspbridge/hw/hw_mmu.h deleted file mode 100644 index 1c50bb36edfe..000000000000 --- a/drivers/staging/tidspbridge/hw/hw_mmu.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * hw_mmu.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * MMU types and API declarations - * - * Copyright (C) 2007 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _HW_MMU_H -#define _HW_MMU_H - -#include - -/* Bitmasks for interrupt sources */ -#define HW_MMU_TRANSLATION_FAULT 0x2 -#define HW_MMU_ALL_INTERRUPTS 0x1F - -#define HW_MMU_COARSE_PAGE_SIZE 0x400 - -/* hw_mmu_mixed_size_t: Enumerated Type used to specify whether to follow - CPU/TLB Element size */ -enum hw_mmu_mixed_size_t { - HW_MMU_TLBES, - HW_MMU_CPUES -}; - -/* hw_mmu_map_attrs_t: Struct containing MMU mapping attributes */ -struct hw_mmu_map_attrs_t { - enum hw_endianism_t endianism; - enum hw_element_size_t element_size; - enum hw_mmu_mixed_size_t mixed_size; - bool donotlockmpupage; -}; - -extern hw_status hw_mmu_enable(void __iomem *base_address); - -extern hw_status hw_mmu_disable(void __iomem *base_address); - -extern hw_status hw_mmu_num_locked_set(void __iomem *base_address, - u32 num_locked_entries); - -extern hw_status hw_mmu_victim_num_set(void __iomem *base_address, - u32 victim_entry_num); - -/* For MMU faults */ -extern hw_status hw_mmu_event_ack(void __iomem *base_address, - u32 irq_mask); - -extern hw_status hw_mmu_event_disable(void __iomem *base_address, - u32 irq_mask); - -extern hw_status hw_mmu_event_enable(void __iomem *base_address, - u32 irq_mask); - -extern hw_status hw_mmu_event_status(void __iomem *base_address, - u32 *irq_mask); - -extern hw_status hw_mmu_fault_addr_read(void __iomem *base_address, - u32 *addr); - -/* Set the TT base address */ -extern hw_status hw_mmu_ttb_set(void __iomem *base_address, - u32 ttb_phys_addr); - -extern hw_status hw_mmu_twl_enable(void __iomem *base_address); - -extern hw_status hw_mmu_twl_disable(void __iomem *base_address); - -extern hw_status hw_mmu_tlb_add(void __iomem *base_address, - u32 physical_addr, - u32 virtual_addr, - u32 page_sz, - u32 entry_num, - struct hw_mmu_map_attrs_t *map_attrs, - s8 preserved_bit, s8 valid_bit); - -/* For PTEs */ -extern hw_status hw_mmu_pte_set(const u32 pg_tbl_va, - u32 physical_addr, - u32 virtual_addr, - u32 page_sz, - struct hw_mmu_map_attrs_t *map_attrs); - -extern hw_status hw_mmu_pte_clear(const u32 pg_tbl_va, - u32 virtual_addr, u32 page_size); - -void hw_mmu_tlb_flush_all(void __iomem *base); - -static inline u32 hw_mmu_pte_addr_l1(u32 l1_base, u32 va) -{ - u32 pte_addr; - u32 va31_to20; - - va31_to20 = va >> (20 - 2); /* Left-shift by 2 here itself */ - va31_to20 &= 0xFFFFFFFCUL; - pte_addr = l1_base + va31_to20; - - return pte_addr; -} - -static inline u32 hw_mmu_pte_addr_l2(u32 l2_base, u32 va) -{ - u32 pte_addr; - - pte_addr = (l2_base & 0xFFFFFC00) | ((va >> 10) & 0x3FC); - - return pte_addr; -} - -static inline u32 hw_mmu_pte_coarse_l1(u32 pte_val) -{ - u32 pte_coarse; - - pte_coarse = pte_val & 0xFFFFFC00; - - return pte_coarse; -} - -static inline u32 hw_mmu_pte_size_l1(u32 pte_val) -{ - u32 pte_size = 0; - - if ((pte_val & 0x3) == 0x1) { - /* Points to L2 PT */ - pte_size = HW_MMU_COARSE_PAGE_SIZE; - } - - if ((pte_val & 0x3) == 0x2) { - if (pte_val & (1 << 18)) - pte_size = HW_PAGE_SIZE16MB; - else - pte_size = HW_PAGE_SIZE1MB; - } - - return pte_size; -} - -static inline u32 hw_mmu_pte_size_l2(u32 pte_val) -{ - u32 pte_size = 0; - - if (pte_val & 0x2) - pte_size = HW_PAGE_SIZE4KB; - else if (pte_val & 0x1) - pte_size = HW_PAGE_SIZE64KB; - - return pte_size; -} - -#endif /* _HW_MMU_H */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h b/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h deleted file mode 100644 index cc95a18f1db9..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - * _chnl_sm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private header file defining channel manager and channel objects for - * a shared memory channel driver. - * - * Shared between the modules implementing the shared memory channel class - * library. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _CHNL_SM_ -#define _CHNL_SM_ - -#include -#include - -#include -#include - -/* - * These target side symbols define the beginning and ending addresses - * of shared memory buffer. They are defined in the *cfg.cmd file by - * cdb code. - */ -#define CHNL_SHARED_BUFFER_BASE_SYM "_SHM_BEG" -#define CHNL_SHARED_BUFFER_LIMIT_SYM "_SHM_END" -#define BRIDGEINIT_BIOSGPTIMER "_BRIDGEINIT_BIOSGPTIMER" -#define BRIDGEINIT_LOADMON_GPTIMER "_BRIDGEINIT_LOADMON_GPTIMER" - -#ifndef _CHNL_WORDSIZE -#define _CHNL_WORDSIZE 4 /* default _CHNL_WORDSIZE is 2 bytes/word */ -#endif - -#define MAXOPPS 16 - -/* Shared memory config options */ -#define SHM_CURROPP 0 /* Set current OPP in shm */ -#define SHM_OPPINFO 1 /* Set dsp voltage and freq table values */ -#define SHM_GETOPP 2 /* Get opp requested by DSP */ - -struct opp_table_entry { - u32 voltage; - u32 frequency; - u32 min_freq; - u32 max_freq; -}; - -struct opp_struct { - u32 curr_opp_pt; - u32 num_opp_pts; - struct opp_table_entry opp_point[MAXOPPS]; -}; - -/* Request to MPU */ -struct opp_rqst_struct { - u32 rqst_dsp_freq; - u32 rqst_opp_pt; -}; - -/* Info to MPU */ -struct load_mon_struct { - u32 curr_dsp_load; - u32 curr_dsp_freq; - u32 pred_dsp_load; - u32 pred_dsp_freq; -}; - -/* Structure in shared between DSP and PC for communication. */ -struct shm { - u32 dsp_free_mask; /* Written by DSP, read by PC. */ - u32 host_free_mask; /* Written by PC, read by DSP */ - - u32 input_full; /* Input channel has unread data. */ - u32 input_id; /* Channel for which input is available. */ - u32 input_size; /* Size of data block (in DSP words). */ - - u32 output_full; /* Output channel has unread data. */ - u32 output_id; /* Channel for which output is available. */ - u32 output_size; /* Size of data block (in DSP words). */ - - u32 arg; /* Arg for Issue/Reclaim (23 bits for 55x). */ - u32 resvd; /* Keep structure size even for 32-bit DSPs */ - - /* Operating Point structure */ - struct opp_struct opp_table_struct; - /* Operating Point Request structure */ - struct opp_rqst_struct opp_request; - /* load monitor information structure */ - struct load_mon_struct load_mon_info; - /* Flag for WDT enable/disable F/I clocks */ - u32 wdt_setclocks; - u32 wdt_overflow; /* WDT overflow time */ - char dummy[176]; /* padding to 256 byte boundary */ - u32 shm_dbg_var[64]; /* shared memory debug variables */ -}; - - /* Channel Manager: only one created per board: */ -struct chnl_mgr { - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - struct io_mgr *iomgr; /* IO manager */ - /* Device this board represents */ - struct dev_object *dev_obj; - - /* These fields initialized in bridge_chnl_create(): */ - u32 output_mask; /* Host output channels w/ full buffers */ - u32 last_output; /* Last output channel fired from DPC */ - /* Critical section object handle */ - spinlock_t chnl_mgr_lock; - u32 word_size; /* Size in bytes of DSP word */ - u8 max_channels; /* Total number of channels */ - u8 open_channels; /* Total number of open channels */ - struct chnl_object **channels; /* Array of channels */ - u8 type; /* Type of channel class library */ - /* If no shm syms, return for CHNL_Open */ - int chnl_open_status; -}; - -/* - * Channel: up to CHNL_MAXCHANNELS per board or if DSP-DMA supported then - * up to CHNL_MAXCHANNELS + CHNL_MAXDDMACHNLS per board. - */ -struct chnl_object { - /* Pointer back to channel manager */ - struct chnl_mgr *chnl_mgr_obj; - u32 chnl_id; /* Channel id */ - u8 state; /* Current channel state */ - s8 chnl_mode; /* Chnl mode and attributes */ - /* Chnl I/O completion event (user mode) */ - void *user_event; - /* Abstract synchronization object */ - struct sync_object *sync_event; - u32 process; /* Process which created this channel */ - u32 cb_arg; /* Argument to use with callback */ - struct list_head io_requests; /* List of IOR's to driver */ - s32 cio_cs; /* Number of IOC's in queue */ - s32 cio_reqs; /* Number of IORequests in queue */ - s32 chnl_packets; /* Initial number of free Irps */ - /* List of IOC's from driver */ - struct list_head io_completions; - struct list_head free_packets_list; /* List of free Irps */ - struct ntfy_object *ntfy_obj; - u32 bytes_moved; /* Total number of bytes transferred */ - - /* For DSP-DMA */ - - /* Type of chnl transport:CHNL_[PCPY][DDMA] */ - u32 chnl_type; -}; - -/* I/O Request/completion packet: */ -struct chnl_irp { - struct list_head link; /* Link to next CHIRP in queue. */ - /* Buffer to be filled/emptied. (User) */ - u8 *host_user_buf; - /* Buffer to be filled/emptied. (System) */ - u8 *host_sys_buf; - u32 arg; /* Issue/Reclaim argument. */ - u32 dsp_tx_addr; /* Transfer address on DSP side. */ - u32 byte_size; /* Bytes transferred. */ - u32 buf_size; /* Actual buffer size when allocated. */ - u32 status; /* Status of IO completion. */ -}; - -#endif /* _CHNL_SM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/brddefs.h b/drivers/staging/tidspbridge/include/dspbridge/brddefs.h deleted file mode 100644 index 725d7b37414c..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/brddefs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * brddefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global BRD constants and types, shared between DSP API and Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef BRDDEFS_ -#define BRDDEFS_ - -/* platform status values */ -#define BRD_STOPPED 0x0 /* No Monitor Loaded, Not running. */ -#define BRD_IDLE 0x1 /* Monitor Loaded, but suspended. */ -#define BRD_RUNNING 0x2 /* Monitor loaded, and executing. */ -#define BRD_UNKNOWN 0x3 /* Board state is indeterminate. */ -#define BRD_LOADED 0x5 -#define BRD_SLEEP_TRANSITION 0x6 /* Sleep transition in progress */ -#define BRD_HIBERNATION 0x7 /* MPU initiated hibernation */ -#define BRD_RETENTION 0x8 /* Retention mode */ -#define BRD_DSP_HIBERNATION 0x9 /* DSP initiated hibernation */ -#define BRD_ERROR 0xA /* Board state is Error */ - -/* BRD Object */ -struct brd_object; - -#endif /* BRDDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h deleted file mode 100644 index b32c75673ab4..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * cfgdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global CFG constants and types, shared between DSP API and Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CFGDEFS_ -#define CFGDEFS_ - -/* Host Resources: */ -#define CFG_MAXMEMREGISTERS 9 - -/* IRQ flag */ -#define CFG_IRQSHARED 0x01 /* IRQ can be shared */ - -/* A platform-related device handle: */ -struct cfg_devnode; - -/* - * Host resource structure. - */ -struct cfg_hostres { - u32 num_mem_windows; /* Set to default */ - /* This is the base.memory */ - u32 mem_base[CFG_MAXMEMREGISTERS]; /* shm virtual address */ - u32 mem_length[CFG_MAXMEMREGISTERS]; /* Length of the Base */ - u32 mem_phys[CFG_MAXMEMREGISTERS]; /* shm Physical address */ - u8 birq_registers; /* IRQ Number */ - u8 birq_attrib; /* IRQ Attribute */ - u32 offset_for_monitor; /* The Shared memory starts from - * mem_base + this offset */ - /* - * Info needed by NODE for allocating channels to communicate with RMS: - * chnl_offset: Offset of RMS channels. Lower channels are - * reserved. - * chnl_buf_size: Size of channel buffer to send to RMS - * num_chnls: Total number of channels - * (including reserved). - */ - u32 chnl_offset; - u32 chnl_buf_size; - u32 num_chnls; - void __iomem *per_base; - void __iomem *per_pm_base; - void __iomem *core_pm_base; - void __iomem *dmmu_base; -}; - -#endif /* CFGDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnl.h b/drivers/staging/tidspbridge/include/dspbridge/chnl.h deleted file mode 100644 index 9b018b1f9bf3..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/chnl.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * chnl.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP API channel interface: multiplexes data streams through the single - * physical link managed by a Bridge driver. - * - * See DSP API chnl.h for more details. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CHNL_ -#define CHNL_ - -#include - -/* - * ======== chnl_create ======== - * Purpose: - * Create a channel manager object, responsible for opening new channels - * and closing old ones for a given board. - * Parameters: - * channel_mgr: Location to store a channel manager object on output. - * hdev_obj: Handle to a device object. - * mgr_attrts: Channel manager attributes. - * mgr_attrts->max_channels: Max channels - * mgr_attrts->birq: Channel's I/O IRQ number. - * mgr_attrts->irq_shared: TRUE if the IRQ is shareable. - * mgr_attrts->word_size: DSP Word size in equivalent PC bytes.. - * Returns: - * 0: Success; - * -EFAULT: hdev_obj is invalid. - * -EINVAL: max_channels is 0. - * Invalid DSP word size (must be > 0). - * Invalid base address for DSP communications. - * -ENOMEM: Insufficient memory for requested resources. - * -EIO: Unable to plug channel ISR for configured IRQ. - * -ECHRNG: This manager cannot handle this many channels. - * -EEXIST: Channel manager already exists for this device. - * Requires: - * channel_mgr != NULL. - * mgr_attrts != NULL. - * Ensures: - * 0: Subsequent calls to chnl_create() for the same - * board without an intervening call to - * chnl_destroy() will fail. - */ -extern int chnl_create(struct chnl_mgr **channel_mgr, - struct dev_object *hdev_obj, - const struct chnl_mgrattrs *mgr_attrts); - -/* - * ======== chnl_destroy ======== - * Purpose: - * Close all open channels, and destroy the channel manager. - * Parameters: - * hchnl_mgr: Channel manager object. - * Returns: - * 0: Success. - * -EFAULT: hchnl_mgr was invalid. - * Requires: - * Ensures: - * 0: Cancels I/O on each open channel. - * Closes each open channel. - * chnl_create may subsequently be called for the - * same board. - */ -extern int chnl_destroy(struct chnl_mgr *hchnl_mgr); - -#endif /* CHNL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h b/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h deleted file mode 100644 index cb67c309b6ca..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * chnldefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * System-wide channel objects and constants. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CHNLDEFS_ -#define CHNLDEFS_ - -/* Channel id option. */ -#define CHNL_PICKFREE (~0UL) /* Let manager pick a free channel. */ - -/* Channel modes */ -#define CHNL_MODETODSP 0 /* Data streaming to the DSP. */ -#define CHNL_MODEFROMDSP 1 /* Data streaming from the DSP. */ - -/* GetIOCompletion flags */ -#define CHNL_IOCINFINITE 0xffffffff /* Wait forever for IO completion. */ -#define CHNL_IOCNOWAIT 0x0 /* Dequeue an IOC, if available. */ - -/* IO Completion Record status: */ -#define CHNL_IOCSTATCOMPLETE 0x0000 /* IO Completed. */ -#define CHNL_IOCSTATCANCEL 0x0002 /* IO was cancelled */ -#define CHNL_IOCSTATTIMEOUT 0x0008 /* Wait for IOC timed out. */ -#define CHNL_IOCSTATEOS 0x8000 /* End Of Stream reached. */ - -/* Macros for checking I/O Completion status: */ -#define CHNL_IS_IO_COMPLETE(ioc) (!(ioc.status & ~CHNL_IOCSTATEOS)) -#define CHNL_IS_IO_CANCELLED(ioc) (ioc.status & CHNL_IOCSTATCANCEL) -#define CHNL_IS_TIMED_OUT(ioc) (ioc.status & CHNL_IOCSTATTIMEOUT) - -/* Channel attributes: */ -struct chnl_attr { - u32 uio_reqs; /* Max # of preallocated I/O requests. */ - void *event_obj; /* User supplied auto-reset event object. */ - char *str_event_name; /* Ptr to name of user event object. */ - void *reserved1; /* Reserved for future use. */ - u32 reserved2; /* Reserved for future use. */ - -}; - -/* I/O completion record: */ -struct chnl_ioc { - void *buf; /* Buffer to be filled/emptied. */ - u32 byte_size; /* Bytes transferred. */ - u32 buf_size; /* Actual buffer size in bytes */ - u32 status; /* Status of IO completion. */ - u32 arg; /* User argument associated with buf. */ -}; - -#endif /* CHNLDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h b/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h deleted file mode 100644 index 4114c79e2466..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * chnlpriv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private channel header shared between DSPSYS, DSPAPI and - * Bridge driver modules. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CHNLPRIV_ -#define CHNLPRIV_ - -#include -#include -#include - -/* Channel manager limits: */ -#define CHNL_MAXCHANNELS 32 /* Max channels available per transport */ - -/* - * Trans port channel Id definitions:(must match dsp-side). - * - * For CHNL_MAXCHANNELS = 16: - * - * ChnlIds: - * 0-15 (PCPY) - transport 0) - * 16-31 (DDMA) - transport 1) - * 32-47 (ZCPY) - transport 2) - */ -#define CHNL_PCPY 0 /* Proc-copy transport 0 */ - -/* Higher level channel states: */ -#define CHNL_STATEREADY 0 /* Channel ready for I/O. */ -#define CHNL_STATECANCEL 1 /* I/O was cancelled. */ -#define CHNL_STATEEOS 2 /* End Of Stream reached. */ - -/* Macros for checking mode: */ -#define CHNL_IS_INPUT(mode) (mode & CHNL_MODEFROMDSP) -#define CHNL_IS_OUTPUT(mode) (!CHNL_IS_INPUT(mode)) - -/* Types of channel class libraries: */ -#define CHNL_TYPESM 1 /* Shared memory driver. */ - -/* Channel info. */ -struct chnl_info { - struct chnl_mgr *chnl_mgr; /* Owning channel manager. */ - u32 cnhl_id; /* Channel ID. */ - void *event_obj; /* Channel I/O completion event. */ - /*Abstraction of I/O completion event. */ - struct sync_object *sync_event; - s8 mode; /* Channel mode. */ - u8 state; /* Current channel state. */ - u32 bytes_tx; /* Total bytes transferred. */ - u32 cio_cs; /* Number of IOCs in queue. */ - u32 cio_reqs; /* Number of IO Requests in queue. */ - u32 process; /* Process owning this channel. */ -}; - -/* Channel manager info: */ -struct chnl_mgrinfo { - u8 type; /* Type of channel class library. */ - /* Channel handle, given the channel id. */ - struct chnl_object *chnl_obj; - u8 open_channels; /* Number of open channels. */ - u8 max_channels; /* total # of chnls supported */ -}; - -/* Channel Manager Attrs: */ -struct chnl_mgrattrs { - /* Max number of channels this manager can use. */ - u8 max_channels; - u32 word_size; /* DSP Word size. */ -}; - -#endif /* CHNLPRIV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/clk.h b/drivers/staging/tidspbridge/include/dspbridge/clk.h deleted file mode 100644 index 685341c50693..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/clk.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * clk.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Provides Clock functions. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _CLK_H -#define _CLK_H - -enum dsp_clk_id { - DSP_CLK_IVA2 = 0, - DSP_CLK_GPT5, - DSP_CLK_GPT6, - DSP_CLK_GPT7, - DSP_CLK_GPT8, - DSP_CLK_WDT3, - DSP_CLK_MCBSP1, - DSP_CLK_MCBSP2, - DSP_CLK_MCBSP3, - DSP_CLK_MCBSP4, - DSP_CLK_MCBSP5, - DSP_CLK_SSI, - DSP_CLK_NOT_DEFINED -}; - -/* - * ======== dsp_clk_exit ======== - * Purpose: - * Discontinue usage of module; free resources when reference count - * reaches 0. - * Parameters: - * Returns: - * Requires: - * CLK initialized. - * Ensures: - * Resources used by module are freed when cRef reaches zero. - */ -extern void dsp_clk_exit(void); - -/* - * ======== dsp_clk_init ======== - * Purpose: - * Initializes private state of CLK module. - * Parameters: - * Returns: - * TRUE if initialized; FALSE if error occurred. - * Requires: - * Ensures: - * CLK initialized. - */ -extern void dsp_clk_init(void); - -void dsp_gpt_wait_overflow(short int clk_id, unsigned int load); - -/* - * ======== dsp_clk_enable ======== - * Purpose: - * Enables the clock requested. - * Parameters: - * Returns: - * 0: Success. - * -EPERM: Error occurred while enabling the clock. - * Requires: - * Ensures: - */ -extern int dsp_clk_enable(enum dsp_clk_id clk_id); - -u32 dsp_clock_enable_all(u32 dsp_per_clocks); - -/* - * ======== dsp_clk_disable ======== - * Purpose: - * Disables the clock requested. - * Parameters: - * Returns: - * 0: Success. - * -EPERM: Error occurred while disabling the clock. - * Requires: - * Ensures: - */ -extern int dsp_clk_disable(enum dsp_clk_id clk_id); - -extern u32 dsp_clk_get_iva2_rate(void); - -u32 dsp_clock_disable_all(u32 dsp_per_clocks); - -extern void ssi_clk_prepare(bool FLAG); - -#endif /* _SYNC_H */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/cmm.h b/drivers/staging/tidspbridge/include/dspbridge/cmm.h deleted file mode 100644 index 2adf9ecdf07f..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/cmm.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - * cmm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * The Communication Memory Management(CMM) module provides shared memory - * management services for DSP/BIOS Bridge data streaming and messaging. - * Multiple shared memory segments can be registered with CMM. Memory is - * coelesced back to the appropriate pool when a buffer is freed. - * - * The CMM_Xlator[xxx] functions are used for node messaging and data - * streaming address translation to perform zero-copy inter-processor - * data transfer(GPP<->DSP). A "translator" object is created for a node or - * stream object that contains per thread virtual address information. This - * translator info is used at runtime to perform SM address translation - * to/from the DSP address space. - * - * Notes: - * cmm_xlator_alloc_buf - Used by Node and Stream modules for SM address - * translation. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CMM_ -#define CMM_ - -#include - -#include -#include - -/* - * ======== cmm_calloc_buf ======== - * Purpose: - * Allocate memory buffers that can be used for data streaming or - * messaging. - * Parameters: - * hcmm_mgr: Cmm Mgr handle. - * usize: Number of bytes to allocate. - * pattr: Attributes of memory to allocate. - * pp_buf_va: Address of where to place VA. - * Returns: - * Pointer to a zero'd block of SM memory; - * NULL if memory couldn't be allocated, - * or if byte_size == 0, - * Requires: - * Valid hcmm_mgr. - * CMM initialized. - * Ensures: - * The returned pointer, if not NULL, points to a valid memory block of - * the size requested. - * - */ -extern void *cmm_calloc_buf(struct cmm_object *hcmm_mgr, - u32 usize, struct cmm_attrs *pattrs, - void **pp_buf_va); - -/* - * ======== cmm_create ======== - * Purpose: - * Create a communication memory manager object. - * Parameters: - * ph_cmm_mgr: Location to store a communication manager handle on - * output. - * hdev_obj: Handle to a device object. - * mgr_attrts: Comm mem manager attributes. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EPERM: Failed to initialize critical sect sync object. - * - * Requires: - * ph_cmm_mgr != NULL. - * mgr_attrts->min_block_size >= 4 bytes. - * Ensures: - * - */ -extern int cmm_create(struct cmm_object **ph_cmm_mgr, - struct dev_object *hdev_obj, - const struct cmm_mgrattrs *mgr_attrts); - -/* - * ======== cmm_destroy ======== - * Purpose: - * Destroy the communication memory manager object. - * Parameters: - * hcmm_mgr: Cmm Mgr handle. - * force: Force deallocation of all cmm memory immediately if set TRUE. - * If FALSE, and outstanding allocations will return -EPERM - * status. - * Returns: - * 0: CMM object & resources deleted. - * -EPERM: Unable to free CMM object due to outstanding allocation. - * -EFAULT: Unable to free CMM due to bad handle. - * Requires: - * CMM is initialized. - * hcmm_mgr != NULL. - * Ensures: - * Memory resources used by Cmm Mgr are freed. - */ -extern int cmm_destroy(struct cmm_object *hcmm_mgr, bool force); - -/* - * ======== cmm_free_buf ======== - * Purpose: - * Free the given buffer. - * Parameters: - * hcmm_mgr: Cmm Mgr handle. - * pbuf: Pointer to memory allocated by cmm_calloc_buf(). - * ul_seg_id: SM segment Id used in CMM_Calloc() attrs. - * Set to 0 to use default segment. - * Returns: - * 0 - * -EPERM - * Requires: - * CMM initialized. - * buf_pa != NULL - * Ensures: - * - */ -extern int cmm_free_buf(struct cmm_object *hcmm_mgr, - void *buf_pa, u32 ul_seg_id); - -/* - * ======== cmm_get_handle ======== - * Purpose: - * Return the handle to the cmm mgr for the given device obj. - * Parameters: - * hprocessor: Handle to a Processor. - * ph_cmm_mgr: Location to store the shared memory mgr handle on - * output. - * - * Returns: - * 0: Cmm Mgr opaque handle returned. - * -EFAULT: Invalid handle. - * Requires: - * ph_cmm_mgr != NULL - * hdev_obj != NULL - * Ensures: - */ -extern int cmm_get_handle(void *hprocessor, - struct cmm_object **ph_cmm_mgr); - -/* - * ======== cmm_get_info ======== - * Purpose: - * Return the current SM and VM utilization information. - * Parameters: - * hcmm_mgr: Handle to a Cmm Mgr. - * cmm_info_obj: Location to store the Cmm information on output. - * - * Returns: - * 0: Success. - * -EFAULT: Invalid handle. - * -EINVAL Invalid input argument. - * Requires: - * Ensures: - * - */ -extern int cmm_get_info(struct cmm_object *hcmm_mgr, - struct cmm_info *cmm_info_obj); - -/* - * ======== cmm_register_gppsm_seg ======== - * Purpose: - * Register a block of SM with the CMM. - * Parameters: - * hcmm_mgr: Handle to a Cmm Mgr. - * lpGPPBasePA: GPP Base Physical address. - * ul_size: Size in GPP bytes. - * dsp_addr_offset GPP PA to DSP PA Offset. - * c_factor: Add offset if CMM_ADDTODSPPA, sub if CMM_SUBFROMDSPPA. - * dw_dsp_base: DSP virtual base byte address. - * ul_dsp_size: Size of DSP segment in bytes. - * sgmt_id: Address to store segment Id. - * - * Returns: - * 0: Success. - * -EFAULT: Invalid hcmm_mgr handle. - * -EINVAL: Invalid input argument. - * -EPERM: Unable to register. - * - On success *sgmt_id is a valid SM segment ID. - * Requires: - * ul_size > 0 - * sgmt_id != NULL - * dw_gpp_base_pa != 0 - * c_factor = CMM_ADDTODSPPA || c_factor = CMM_SUBFROMDSPPA - * Ensures: - * - */ -extern int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - unsigned int dw_gpp_base_pa, - u32 ul_size, - u32 dsp_addr_offset, - s8 c_factor, - unsigned int dw_dsp_base, - u32 ul_dsp_size, - u32 *sgmt_id, u32 gpp_base_va); - -/* - * ======== cmm_un_register_gppsm_seg ======== - * Purpose: - * Unregister the given memory segment that was previously registered - * by cmm_register_gppsm_seg. - * Parameters: - * hcmm_mgr: Handle to a Cmm Mgr. - * ul_seg_id Segment identifier returned by cmm_register_gppsm_seg. - * Returns: - * 0: Success. - * -EFAULT: Invalid handle. - * -EINVAL: Invalid ul_seg_id. - * -EPERM: Unable to unregister for unknown reason. - * Requires: - * Ensures: - * - */ -extern int cmm_un_register_gppsm_seg(struct cmm_object *hcmm_mgr, - u32 ul_seg_id); - -/* - * ======== cmm_xlator_alloc_buf ======== - * Purpose: - * Allocate the specified SM buffer and create a local memory descriptor. - * Place on the descriptor on the translator's HaQ (Host Alloc'd Queue). - * Parameters: - * xlator: Handle to a Xlator object. - * va_buf: Virtual address ptr(client context) - * pa_size: Size of SM memory to allocate. - * Returns: - * Ptr to valid physical address(Pa) of pa_size bytes, NULL if failed. - * Requires: - * va_buf != 0. - * pa_size != 0. - * Ensures: - * - */ -extern void *cmm_xlator_alloc_buf(struct cmm_xlatorobject *xlator, - void *va_buf, u32 pa_size); - -/* - * ======== cmm_xlator_create ======== - * Purpose: - * Create a translator(xlator) object used for process specific Va<->Pa - * address translation. Node messaging and streams use this to perform - * inter-processor(GPP<->DSP) zero-copy data transfer. - * Parameters: - * xlator: Address to place handle to a new Xlator handle. - * hcmm_mgr: Handle to Cmm Mgr associated with this translator. - * xlator_attrs: Translator attributes used for the client NODE or STREAM. - * Returns: - * 0: Success. - * -EINVAL: Bad input Attrs. - * -ENOMEM: Insufficient memory(local) for requested resources. - * Requires: - * xlator != NULL - * hcmm_mgr != NULL - * xlator_attrs != NULL - * Ensures: - * - */ -extern int cmm_xlator_create(struct cmm_xlatorobject **xlator, - struct cmm_object *hcmm_mgr, - struct cmm_xlatorattrs *xlator_attrs); - -/* - * ======== cmm_xlator_free_buf ======== - * Purpose: - * Free SM buffer and descriptor. - * Does not free client process VM. - * Parameters: - * xlator: handle to translator. - * buf_va Virtual address of PA to free. - * Returns: - * 0: Success. - * -EFAULT: Bad translator handle. - * Requires: - * Ensures: - * - */ -extern int cmm_xlator_free_buf(struct cmm_xlatorobject *xlator, - void *buf_va); - -/* - * ======== cmm_xlator_info ======== - * Purpose: - * Set/Get process specific "translator" address info. - * This is used to perform fast virtual address translation - * for shared memory buffers between the GPP and DSP. - * Parameters: - * xlator: handle to translator. - * paddr: Virtual base address of segment. - * ul_size: Size in bytes. - * segm_id: Segment identifier of SM segment(s) - * set_info Set xlator fields if TRUE, else return base addr - * Returns: - * 0: Success. - * -EFAULT: Bad translator handle. - * Requires: - * (paddr != NULL) - * (ul_size > 0) - * Ensures: - * - */ -extern int cmm_xlator_info(struct cmm_xlatorobject *xlator, - u8 **paddr, - u32 ul_size, u32 segm_id, bool set_info); - -/* - * ======== cmm_xlator_translate ======== - * Purpose: - * Perform address translation VA<->PA for the specified stream or - * message shared memory buffer. - * Parameters: - * xlator: handle to translator. - * paddr address of buffer to translate. - * xtype Type of address xlation. CMM_PA2VA or CMM_VA2PA. - * Returns: - * Valid address on success, else NULL. - * Requires: - * paddr != NULL - * xtype >= CMM_VA2PA) && (xtype <= CMM_DSPPA2PA) - * Ensures: - * - */ -extern void *cmm_xlator_translate(struct cmm_xlatorobject *xlator, - void *paddr, enum cmm_xlatetype xtype); - -#endif /* CMM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h deleted file mode 100644 index a264fa69a4fc..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * cmmdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global MEM constants and types. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CMMDEFS_ -#define CMMDEFS_ - - -/* Cmm attributes used in cmm_create() */ -struct cmm_mgrattrs { - /* Minimum SM allocation; default 32 bytes. */ - u32 min_block_size; -}; - -/* Attributes for CMM_AllocBuf() & CMM_AllocDesc() */ -struct cmm_attrs { - u32 seg_id; /* 1,2... are SM segments. 0 is not. */ - u32 alignment; /* 0,1,2,4....min_block_size */ -}; - -/* - * DSPPa to GPPPa Conversion Factor. - * - * For typical platforms: - * converted Address = PaDSP + ( c_factor * addressToConvert). - */ -#define CMM_SUBFROMDSPPA -1 -#define CMM_ADDTODSPPA 1 - -#define CMM_ALLSEGMENTS 0xFFFFFF /* All SegIds */ -#define CMM_MAXGPPSEGS 1 /* Maximum # of SM segs */ - -/* - * SMSEGs are SM segments the DSP allocates from. - * - * This info is used by the GPP to xlate DSP allocated PAs. - */ - -struct cmm_seginfo { - u32 seg_base_pa; /* Start Phys address of SM segment */ - /* Total size in bytes of segment: DSP+GPP */ - u32 total_seg_size; - u32 gpp_base_pa; /* Start Phys addr of Gpp SM seg */ - u32 gpp_size; /* Size of Gpp SM seg in bytes */ - u32 dsp_base_va; /* DSP virt base byte address */ - u32 dsp_size; /* DSP seg size in bytes */ - /* # of current GPP allocations from this segment */ - u32 in_use_cnt; - u32 seg_base_va; /* Start Virt address of SM seg */ - -}; - -/* CMM useful information */ -struct cmm_info { - /* # of SM segments registered with this Cmm. */ - u32 num_gppsm_segs; - /* Total # of allocations outstanding for CMM */ - u32 total_in_use_cnt; - /* Min SM block size allocation from cmm_create() */ - u32 min_block_size; - /* Info per registered SM segment. */ - struct cmm_seginfo seg_info[CMM_MAXGPPSEGS]; -}; - -/* XlatorCreate attributes */ -struct cmm_xlatorattrs { - u32 seg_id; /* segment Id used for SM allocations */ - u32 dsp_bufs; /* # of DSP-side bufs */ - u32 dsp_buf_size; /* size of DSP-side bufs in GPP bytes */ - /* Vm base address alloc'd in client process context */ - void *vm_base; - /* vm_size must be >= (dwMaxNumBufs * dwMaxSize) */ - u32 vm_size; -}; - -/* - * Cmm translation types. Use to map SM addresses to process context. - */ -enum cmm_xlatetype { - CMM_VA2PA = 0, /* Virtual to GPP physical address xlation */ - CMM_PA2VA = 1, /* GPP Physical to virtual */ - CMM_VA2DSPPA = 2, /* Va to DSP Pa */ - CMM_PA2DSPPA = 3, /* GPP Pa to DSP Pa */ - CMM_DSPPA2PA = 4, /* DSP Pa to GPP Pa */ -}; - -struct cmm_object; -struct cmm_xlatorobject; - -#endif /* CMMDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/cod.h b/drivers/staging/tidspbridge/include/dspbridge/cod.h deleted file mode 100644 index ba2005d02422..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/cod.h +++ /dev/null @@ -1,329 +0,0 @@ -/* - * cod.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Code management module for DSPs. This module provides an interface - * interface for loading both static and dynamic code objects onto DSP - * systems. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef COD_ -#define COD_ - -#include - -#define COD_MAXPATHLENGTH 255 -#define COD_TRACEBEG "SYS_PUTCBEG" -#define COD_TRACEEND "SYS_PUTCEND" -#define COD_TRACECURPOS "BRIDGE_SYS_PUTC_current" - -#define COD_NOLOAD DBLL_NOLOAD -#define COD_SYMB DBLL_SYMB - -/* COD code manager handle */ -struct cod_manager; - -/* COD library handle */ -struct cod_libraryobj; - -/* - * Function prototypes for writing memory to a DSP system, allocating - * and freeing DSP memory. - */ -typedef u32(*cod_writefxn) (void *priv_ref, u32 dsp_add, - void *pbuf, u32 ul_num_bytes, u32 mem_space); - -/* - * ======== cod_close ======== - * Purpose: - * Close a library opened with cod_open(). - * Parameters: - * lib - Library handle returned by cod_open(). - * Returns: - * None. - * Requires: - * COD module initialized. - * valid lib. - * Ensures: - * - */ -extern void cod_close(struct cod_libraryobj *lib); - -/* - * ======== cod_create ======== - * Purpose: - * Create an object to manage code on a DSP system. This object can be - * used to load an initial program image with arguments that can later - * be expanded with dynamically loaded object files. - * Symbol table information is managed by this object and can be retrieved - * using the cod_get_sym_value() function. - * Parameters: - * manager: created manager object - * str_zl_file: ZL DLL filename, of length < COD_MAXPATHLENGTH. - * Returns: - * 0: Success. - * -ESPIPE: ZL_Create failed. - * -ENOSYS: attrs was not NULL. We don't yet support - * non default values of attrs. - * Requires: - * COD module initialized. - * str_zl_file != NULL - * Ensures: - */ -extern int cod_create(struct cod_manager **mgr, - char *str_zl_file); - -/* - * ======== cod_delete ======== - * Purpose: - * Delete a code manager object. - * Parameters: - * cod_mgr_obj: handle of manager to be deleted - * Returns: - * None. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * Ensures: - */ -extern void cod_delete(struct cod_manager *cod_mgr_obj); - -/* - * ======== cod_get_base_lib ======== - * Purpose: - * Get handle to the base image DBL library. - * Parameters: - * cod_mgr_obj: handle of manager to be deleted - * plib: location to store library handle on output. - * Returns: - * 0: Success. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * plib != NULL. - * Ensures: - */ -extern int cod_get_base_lib(struct cod_manager *cod_mgr_obj, - struct dbll_library_obj **plib); - -/* - * ======== cod_get_base_name ======== - * Purpose: - * Get the name of the base image DBL library. - * Parameters: - * cod_mgr_obj: handle of manager to be deleted - * sz_name: location to store library name on output. - * usize: size of name buffer. - * Returns: - * 0: Success. - * -EPERM: Buffer too small. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * sz_name != NULL. - * Ensures: - */ -extern int cod_get_base_name(struct cod_manager *cod_mgr_obj, - char *sz_name, u32 usize); - -/* - * ======== cod_get_entry ======== - * Purpose: - * Retrieve the entry point of a loaded DSP program image - * Parameters: - * cod_mgr_obj: handle of manager to be deleted - * entry_pt: pointer to location for entry point - * Returns: - * 0: Success. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * entry_pt != NULL. - * Ensures: - */ -extern int cod_get_entry(struct cod_manager *cod_mgr_obj, - u32 *entry_pt); - -/* - * ======== cod_get_loader ======== - * Purpose: - * Get handle to the DBL loader. - * Parameters: - * cod_mgr_obj: handle of manager to be deleted - * loader: location to store loader handle on output. - * Returns: - * 0: Success. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * loader != NULL. - * Ensures: - */ -extern int cod_get_loader(struct cod_manager *cod_mgr_obj, - struct dbll_tar_obj **loader); - -/* - * ======== cod_get_section ======== - * Purpose: - * Retrieve the starting address and length of a section in the COFF file - * given the section name. - * Parameters: - * lib Library handle returned from cod_open(). - * str_sect: name of the section, with or without leading "." - * addr: Location to store address. - * len: Location to store length. - * Returns: - * 0: Success - * -ESPIPE: Symbols could not be found or have not been loaded onto - * the board. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * str_sect != NULL; - * addr != NULL; - * len != NULL; - * Ensures: - * 0: *addr and *len contain the address and length of the - * section. - * else: *addr == 0 and *len == 0; - * - */ -extern int cod_get_section(struct cod_libraryobj *lib, - char *str_sect, - u32 *addr, u32 *len); - -/* - * ======== cod_get_sym_value ======== - * Purpose: - * Retrieve the value for the specified symbol. The symbol is first - * searched for literally and then, if not found, searched for as a - * C symbol. - * Parameters: - * lib: library handle returned from cod_open(). - * pstrSymbol: name of the symbol - * value: value of the symbol - * Returns: - * 0: Success. - * -ESPIPE: Symbols could not be found or have not been loaded onto - * the board. - * Requires: - * COD module initialized. - * Valid cod_mgr_obj. - * str_sym != NULL. - * pul_value != NULL. - * Ensures: - */ -extern int cod_get_sym_value(struct cod_manager *cod_mgr_obj, - char *str_sym, u32 * pul_value); - -/* - * ======== cod_load_base ======== - * Purpose: - * Load the initial program image, optionally with command-line arguments, - * on the DSP system managed by the supplied handle. The program to be - * loaded must be the first element of the args array and must be a fully - * qualified pathname. - * Parameters: - * hmgr: manager to load the code with - * num_argc: number of arguments in the args array - * args: array of strings for arguments to DSP program - * write_fxn: board-specific function to write data to DSP system - * arb: arbitrary pointer to be passed as first arg to write_fxn - * envp: array of environment strings for DSP exec. - * Returns: - * 0: Success. - * -EBADF: Failed to open target code. - * Requires: - * COD module initialized. - * hmgr is valid. - * num_argc > 0. - * args != NULL. - * args[0] != NULL. - * pfn_write != NULL. - * Ensures: - */ -extern int cod_load_base(struct cod_manager *cod_mgr_obj, - u32 num_argc, char *args[], - cod_writefxn pfn_write, void *arb, - char *envp[]); - -/* - * ======== cod_open ======== - * Purpose: - * Open a library for reading sections. Does not load or set the base. - * Parameters: - * hmgr: manager to load the code with - * sz_coff_path: Coff file to open. - * flags: COD_NOLOAD (don't load symbols) or COD_SYMB (load - * symbols). - * lib_obj: Handle returned that can be used in calls to cod_close - * and cod_get_section. - * Returns: - * S_OK: Success. - * -EBADF: Failed to open target code. - * Requires: - * COD module initialized. - * hmgr is valid. - * flags == COD_NOLOAD || flags == COD_SYMB. - * sz_coff_path != NULL. - * Ensures: - */ -extern int cod_open(struct cod_manager *hmgr, - char *sz_coff_path, - u32 flags, struct cod_libraryobj **lib_obj); - -/* - * ======== cod_open_base ======== - * Purpose: - * Open base image for reading sections. Does not load the base. - * Parameters: - * hmgr: manager to load the code with - * sz_coff_path: Coff file to open. - * flags: Specifies whether to load symbols. - * Returns: - * 0: Success. - * -EBADF: Failed to open target code. - * Requires: - * COD module initialized. - * hmgr is valid. - * sz_coff_path != NULL. - * Ensures: - */ -extern int cod_open_base(struct cod_manager *hmgr, char *sz_coff_path, - dbll_flags flags); - -/* - * ======== cod_read_section ======== - * Purpose: - * Retrieve the content of a code section given the section name. - * Parameters: - * cod_mgr_obj - manager in which to search for the symbol - * str_sect - name of the section, with or without leading "." - * str_content - buffer to store content of the section. - * Returns: - * 0: on success, error code on failure - * -ESPIPE: Symbols have not been loaded onto the board. - * Requires: - * COD module initialized. - * valid cod_mgr_obj. - * str_sect != NULL; - * str_content != NULL; - * Ensures: - * 0: *str_content stores the content of the named section. - */ -extern int cod_read_section(struct cod_libraryobj *lib, - char *str_sect, - char *str_content, u32 content_size); - -#endif /* COD_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbdcd.h b/drivers/staging/tidspbridge/include/dspbridge/dbdcd.h deleted file mode 100644 index 7cc3e12686e8..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dbdcd.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * dbdcd.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Defines the DSP/BIOS Bridge Configuration Database (DCD) API. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DBDCD_ -#define DBDCD_ - -#include -#include -#include - -/* - * ======== dcd_auto_register ======== - * Purpose: - * This function automatically registers DCD objects specified in a - * special COFF section called ".dcd_register" - * Parameters: - * hdcd_mgr: A DCD manager handle. - * sz_coff_path: Pointer to name of COFF file containing DCD - * objects to be registered. - * Returns: - * 0: Success. - * -EACCES: Unable to find auto-registration/read/load section. - * -EFAULT: Invalid DCD_HMANAGER handle.. - * Requires: - * DCD initialized. - * Ensures: - * Note: - * Due to the DCD database construction, it is essential for a DCD-enabled - * COFF file to contain the right COFF sections, especially - * ".dcd_register", which is used for auto registration. - */ -extern int dcd_auto_register(struct dcd_manager *hdcd_mgr, - char *sz_coff_path); - -/* - * ======== dcd_auto_unregister ======== - * Purpose: - * This function automatically unregisters DCD objects specified in a - * special COFF section called ".dcd_register" - * Parameters: - * hdcd_mgr: A DCD manager handle. - * sz_coff_path: Pointer to name of COFF file containing - * DCD objects to be unregistered. - * Returns: - * 0: Success. - * -EACCES: Unable to find auto-registration/read/load section. - * -EFAULT: Invalid DCD_HMANAGER handle.. - * Requires: - * DCD initialized. - * Ensures: - * Note: - * Due to the DCD database construction, it is essential for a DCD-enabled - * COFF file to contain the right COFF sections, especially - * ".dcd_register", which is used for auto unregistration. - */ -extern int dcd_auto_unregister(struct dcd_manager *hdcd_mgr, - char *sz_coff_path); - -/* - * ======== dcd_create_manager ======== - * Purpose: - * This function creates a DCD module manager. - * Parameters: - * sz_zl_dll_name: Pointer to a DLL name string. - * dcd_mgr: A pointer to a DCD manager handle. - * Returns: - * 0: Success. - * -ENOMEM: Unable to allocate memory for DCD manager handle. - * -EPERM: General failure. - * Requires: - * DCD initialized. - * sz_zl_dll_name is non-NULL. - * dcd_mgr is non-NULL. - * Ensures: - * A DCD manager handle is created. - */ -extern int dcd_create_manager(char *sz_zl_dll_name, - struct dcd_manager **dcd_mgr); - -/* - * ======== dcd_destroy_manager ======== - * Purpose: - * This function destroys a DCD module manager. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid DCD manager handle. - * Requires: - * DCD initialized. - * Ensures: - */ -extern int dcd_destroy_manager(struct dcd_manager *hdcd_mgr); - -/* - * ======== dcd_enumerate_object ======== - * Purpose: - * This function enumerates currently visible DSP/BIOS Bridge objects - * and returns the UUID and type of each enumerated object. - * Parameters: - * index: The object enumeration index. - * obj_type: Type of object to enumerate. - * uuid_obj: Pointer to a dsp_uuid object. - * Returns: - * 0: Success. - * -EPERM: Unable to enumerate through the DCD database. - * ENODATA: Enumeration completed. This is not an error code. - * Requires: - * DCD initialized. - * uuid_obj is a valid pointer. - * Ensures: - * Details: - * This function can be used in conjunction with dcd_get_object_def to - * retrieve object properties. - */ -extern int dcd_enumerate_object(s32 index, - enum dsp_dcdobjtype obj_type, - struct dsp_uuid *uuid_obj); - -/* - * ======== dcd_exit ======== - * Purpose: - * This function cleans up the DCD module. - * Parameters: - * Returns: - * Requires: - * DCD initialized. - * Ensures: - */ -extern void dcd_exit(void); - -/* - * ======== dcd_get_dep_libs ======== - * Purpose: - * Given the uuid of a library and size of array of uuids, this function - * fills the array with the uuids of all dependent libraries of the input - * library. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * uuid_obj: Pointer to a dsp_uuid for a library. - * num_libs: Size of uuid array (number of library uuids). - * dep_lib_uuids: Array of dependent library uuids to be filled in. - * prstnt_dep_libs: Array indicating if corresponding lib is persistent. - * phase: phase to obtain correct input library - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failure. - * -EACCES: Failure to read section containing library info. - * -EPERM: General failure. - * Requires: - * DCD initialized. - * Valid hdcd_mgr. - * uuid_obj != NULL - * dep_lib_uuids != NULL. - * Ensures: - */ -extern int dcd_get_dep_libs(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 num_libs, - struct dsp_uuid *dep_lib_uuids, - bool *prstnt_dep_libs, - enum nldr_phase phase); - -/* - * ======== dcd_get_num_dep_libs ======== - * Purpose: - * Given the uuid of a library, determine its number of dependent - * libraries. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * uuid_obj: Pointer to a dsp_uuid for a library. - * num_libs: Size of uuid array (number of library uuids). - * num_pers_libs: number of persistent dependent library. - * phase: Phase to obtain correct input library - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failure. - * -EACCES: Failure to read section containing library info. - * -EPERM: General failure. - * Requires: - * DCD initialized. - * Valid hdcd_mgr. - * uuid_obj != NULL - * num_libs != NULL. - * Ensures: - */ -extern int dcd_get_num_dep_libs(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 *num_libs, - u16 *num_pers_libs, - enum nldr_phase phase); - -/* - * ======== dcd_get_library_name ======== - * Purpose: - * This function returns the name of a (dynamic) library for a given - * UUID. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * uuid_obj: Pointer to a dsp_uuid that represents a unique DSP/BIOS - * Bridge object. - * str_lib_name: Buffer to hold library name. - * buff_size: Contains buffer size. Set to string size on output. - * phase: Which phase to load - * phase_split: Are phases in multiple libraries - * Returns: - * 0: Success. - * -EPERM: General failure. - * Requires: - * DCD initialized. - * Valid hdcd_mgr. - * str_lib_name != NULL. - * uuid_obj != NULL - * buff_size != NULL. - * Ensures: - */ -extern int dcd_get_library_name(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - char *str_lib_name, - u32 *buff_size, - enum nldr_phase phase, - bool *phase_split); - -/* - * ======== dcd_get_object_def ======== - * Purpose: - * This function returns the properties/attributes of a DSP/BIOS Bridge - * object. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * uuid_obj: Pointer to a dsp_uuid that represents a unique - * DSP/BIOS Bridge object. - * obj_type: The type of DSP/BIOS Bridge object to be - * referenced (node, processor, etc). - * obj_def: Pointer to an object definition structure. A - * union of various possible DCD object types. - * Returns: - * 0: Success. - * -EACCES: Unable to access/read/parse/load content of object code - * section. - * -EPERM: General failure. - * -EFAULT: Invalid DCD_HMANAGER handle. - * Requires: - * DCD initialized. - * obj_uuid is non-NULL. - * obj_def is non-NULL. - * Ensures: - */ -extern int dcd_get_object_def(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *obj_uuid, - enum dsp_dcdobjtype obj_type, - struct dcd_genericobj *obj_def); - -/* - * ======== dcd_get_objects ======== - * Purpose: - * This function finds all DCD objects specified in a special - * COFF section called ".dcd_register", and for each object, - * call a "register" function. The "register" function may perform - * various actions, such as 1) register nodes in the node database, 2) - * unregister nodes from the node database, and 3) add overlay nodes. - * Parameters: - * hdcd_mgr: A DCD manager handle. - * sz_coff_path: Pointer to name of COFF file containing DCD - * objects. - * register_fxn: Callback fxn to be applied on each located - * DCD object. - * handle: Handle to pass to callback. - * Returns: - * 0: Success. - * -EACCES: Unable to access/read/parse/load content of object code - * section. - * -EFAULT: Invalid DCD_HMANAGER handle.. - * Requires: - * DCD initialized. - * Ensures: - * Note: - * Due to the DCD database construction, it is essential for a DCD-enabled - * COFF file to contain the right COFF sections, especially - * ".dcd_register", which is used for auto registration. - */ -extern int dcd_get_objects(struct dcd_manager *hdcd_mgr, - char *sz_coff_path, - dcd_registerfxn register_fxn, void *handle); - -/* - * ======== dcd_init ======== - * Purpose: - * This function initializes DCD. - * Parameters: - * Returns: - * FALSE: Initialization failed. - * TRUE: Initialization succeeded. - * Requires: - * Ensures: - * DCD initialized. - */ -extern bool dcd_init(void); - -/* - * ======== dcd_register_object ======== - * Purpose: - * This function registers a DSP/BIOS Bridge object in the DCD database. - * Parameters: - * uuid_obj: Pointer to a dsp_uuid that identifies a DSP/BIOS - * Bridge object. - * obj_type: Type of object. - * psz_path_name: Path to the object's COFF file. - * Returns: - * 0: Success. - * -EPERM: Failed to register object. - * Requires: - * DCD initialized. - * uuid_obj and szPathName are non-NULL values. - * obj_type is a valid type value. - * Ensures: - */ -extern int dcd_register_object(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type, - char *psz_path_name); - -/* - * ======== dcd_unregister_object ======== - * Purpose: - * This function de-registers a valid DSP/BIOS Bridge object from the DCD - * database. - * Parameters: - * uuid_obj: Pointer to a dsp_uuid that identifies a DSP/BIOS Bridge - * object. - * obj_type: Type of object. - * Returns: - * 0: Success. - * -EPERM: Unable to de-register the specified object. - * Requires: - * DCD initialized. - * uuid_obj is a non-NULL value. - * obj_type is a valid type value. - * Ensures: - */ -extern int dcd_unregister_object(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type); - -#endif /* _DBDCD_H */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbdcddef.h b/drivers/staging/tidspbridge/include/dspbridge/dbdcddef.h deleted file mode 100644 index bc201b329033..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dbdcddef.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * dbdcddef.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DCD (DSP/BIOS Bridge Configuration Database) constants and types. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DBDCDDEF_ -#define DBDCDDEF_ - -#include -#include /* for mgr_processorextinfo */ - -/* - * The following defines are critical elements for the DCD module: - * - * - DCD_REGKEY enables DCD functions to locate registered DCD objects. - * - DCD_REGISTER_SECTION identifies the COFF section where the UUID of - * registered DCD objects are stored. - */ -#define DCD_REGKEY "Software\\TexasInstruments\\DspBridge\\DCD" -#define DCD_REGISTER_SECTION ".dcd_register" - -#define DCD_MAXPATHLENGTH 255 - -/* DCD Manager Object */ -struct dcd_manager; - -struct dcd_key_elem { - struct list_head link; /* Make it linked to a list */ - char name[DCD_MAXPATHLENGTH]; /* Name of a given value entry */ - char *path; /* Pointer to the actual data */ -}; - -/* DCD Node Properties */ -struct dcd_nodeprops { - struct dsp_ndbprops ndb_props; - u32 msg_segid; - u32 msg_notify_type; - char *str_create_phase_fxn; - char *str_delete_phase_fxn; - char *str_execute_phase_fxn; - char *str_i_alg_name; - - /* Dynamic load properties */ - u16 load_type; /* Static, dynamic, overlay */ - u32 data_mem_seg_mask; /* Data memory requirements */ - u32 code_mem_seg_mask; /* Code memory requirements */ -}; - -/* DCD Generic Object Type */ -struct dcd_genericobj { - union dcd_obj { - struct dcd_nodeprops node_obj; /* node object. */ - /* processor object. */ - struct dsp_processorinfo proc_info; - /* extended proc object (private) */ - struct mgr_processorextinfo ext_proc_obj; - } obj_data; -}; - -/* DCD Internal Callback Type */ -typedef int(*dcd_registerfxn) (struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type, - void *handle); - -#endif /* DBDCDDEF_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h deleted file mode 100644 index c8f464505efc..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h +++ /dev/null @@ -1,488 +0,0 @@ -/* - * dbdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global definitions and constants for DSP/BIOS Bridge. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DBDEFS_ -#define DBDEFS_ - -#include - -#include /* Types shared between GPP and DSP */ - -#define PG_SIZE4K 4096 -#define PG_MASK(pg_size) (~((pg_size)-1)) -#define PG_ALIGN_LOW(addr, pg_size) ((addr) & PG_MASK(pg_size)) -#define PG_ALIGN_HIGH(addr, pg_size) (((addr)+(pg_size)-1) & PG_MASK(pg_size)) - -/* API return value and calling convention */ -#define DBAPI int - -/* Maximum length of node name, used in dsp_ndbprops */ -#define DSP_MAXNAMELEN 32 - -/* notify_type values for the RegisterNotify() functions. */ -#define DSP_SIGNALEVENT 0x00000001 - -/* Types of events for processors */ -#define DSP_PROCESSORSTATECHANGE 0x00000001 -#define DSP_PROCESSORATTACH 0x00000002 -#define DSP_PROCESSORDETACH 0x00000004 -#define DSP_PROCESSORRESTART 0x00000008 - -/* DSP exception events (DSP/BIOS and DSP MMU fault) */ -#define DSP_MMUFAULT 0x00000010 -#define DSP_SYSERROR 0x00000020 -#define DSP_EXCEPTIONABORT 0x00000300 -#define DSP_PWRERROR 0x00000080 -#define DSP_WDTOVERFLOW 0x00000040 - -/* IVA exception events (IVA MMU fault) */ -#define IVA_MMUFAULT 0x00000040 -/* Types of events for nodes */ -#define DSP_NODESTATECHANGE 0x00000100 -#define DSP_NODEMESSAGEREADY 0x00000200 - -/* Types of events for streams */ -#define DSP_STREAMDONE 0x00001000 -#define DSP_STREAMIOCOMPLETION 0x00002000 - -/* Handle definition representing the GPP node in DSPNode_Connect() calls */ -#define DSP_HGPPNODE 0xFFFFFFFF - -/* Node directions used in DSPNode_Connect() */ -#define DSP_TONODE 1 -#define DSP_FROMNODE 2 - -/* Define Node Minimum and Maximum Priorities */ -#define DSP_NODE_MIN_PRIORITY 1 -#define DSP_NODE_MAX_PRIORITY 15 - -/* msg_ctrl contains SM buffer description */ -#define DSP_RMSBUFDESC RMS_BUFDESC - -/* Processor ID numbers */ -#define DSP_UNIT 0 -#define IVA_UNIT 1 - -#define DSPWORD unsigned char -#define DSPWORDSIZE sizeof(DSPWORD) - -#define MAX_PROFILES 16 - -/* DSP chip type */ -#define DSPTYPE64 0x99 - -/* Handy Macros */ -#define VALID_PROC_EVENT (DSP_PROCESSORSTATECHANGE | DSP_PROCESSORATTACH | \ - DSP_PROCESSORDETACH | DSP_PROCESSORRESTART | DSP_NODESTATECHANGE | \ - DSP_STREAMDONE | DSP_STREAMIOCOMPLETION | DSP_MMUFAULT | \ - DSP_SYSERROR | DSP_WDTOVERFLOW | DSP_PWRERROR) - -static inline bool is_valid_proc_event(u32 x) -{ - return (x == 0 || (x & VALID_PROC_EVENT && !(x & ~VALID_PROC_EVENT))); -} - -/* The Node UUID structure */ -struct dsp_uuid { - u32 data1; - u16 data2; - u16 data3; - u8 data4; - u8 data5; - u8 data6[6]; -}; - -/* DCD types */ -enum dsp_dcdobjtype { - DSP_DCDNODETYPE, - DSP_DCDPROCESSORTYPE, - DSP_DCDLIBRARYTYPE, - DSP_DCDCREATELIBTYPE, - DSP_DCDEXECUTELIBTYPE, - DSP_DCDDELETELIBTYPE, - /* DSP_DCDMAXOBJTYPE is meant to be the last DCD object type */ - DSP_DCDMAXOBJTYPE -}; - -/* Processor states */ -enum dsp_procstate { - PROC_STOPPED, - PROC_LOADED, - PROC_RUNNING, - PROC_ERROR -}; - -/* - * Node types: Message node, task node, xDAIS socket node, and - * device node. _NODE_GPP is used when defining a stream connection - * between a task or socket node and the GPP. - * - */ -enum node_type { - NODE_DEVICE, - NODE_TASK, - NODE_DAISSOCKET, - NODE_MESSAGE, - NODE_GPP -}; - -/* - * ======== node_state ======== - * Internal node states. - */ -enum node_state { - NODE_ALLOCATED, - NODE_CREATED, - NODE_RUNNING, - NODE_PAUSED, - NODE_DONE, - NODE_CREATING, - NODE_STARTING, - NODE_PAUSING, - NODE_TERMINATING, - NODE_DELETING, -}; - -/* Stream states */ -enum dsp_streamstate { - STREAM_IDLE, - STREAM_READY, - STREAM_PENDING, - STREAM_DONE -}; - -/* Stream connect types */ -enum dsp_connecttype { - CONNECTTYPE_NODEOUTPUT, - CONNECTTYPE_GPPOUTPUT, - CONNECTTYPE_NODEINPUT, - CONNECTTYPE_GPPINPUT -}; - -/* Stream mode types */ -enum dsp_strmmode { - STRMMODE_PROCCOPY, /* Processor(s) copy stream data payloads */ - STRMMODE_ZEROCOPY, /* Strm buffer ptrs swapped no data copied */ - STRMMODE_LDMA, /* Local DMA : OMAP's System-DMA device */ - STRMMODE_RDMA /* Remote DMA: OMAP's DSP-DMA device */ -}; - -/* Resource Types */ -enum dsp_resourceinfotype { - DSP_RESOURCE_DYNDARAM = 0, - DSP_RESOURCE_DYNSARAM, - DSP_RESOURCE_DYNEXTERNAL, - DSP_RESOURCE_DYNSRAM, - DSP_RESOURCE_PROCLOAD -}; - -/* Memory Segment Types */ -enum dsp_memtype { - DSP_DYNDARAM = 0, - DSP_DYNSARAM, - DSP_DYNEXTERNAL, - DSP_DYNSRAM -}; - -/* Memory Flush Types */ -enum dsp_flushtype { - PROC_INVALIDATE_MEM = 0, - PROC_WRITEBACK_MEM, - PROC_WRITEBACK_INVALIDATE_MEM, -}; - -/* Memory Segment Status Values */ -struct dsp_memstat { - u32 size; - u32 total_free_size; - u32 len_max_free_block; - u32 num_free_blocks; - u32 num_alloc_blocks; -}; - -/* Processor Load information Values */ -struct dsp_procloadstat { - u32 curr_load; - u32 predicted_load; - u32 curr_dsp_freq; - u32 predicted_freq; -}; - -/* Attributes for STRM connections between nodes */ -struct dsp_strmattr { - u32 seg_id; /* Memory segment on DSP to allocate buffers */ - u32 buf_size; /* Buffer size (DSP words) */ - u32 num_bufs; /* Number of buffers */ - u32 buf_alignment; /* Buffer alignment */ - u32 timeout; /* Timeout for blocking STRM calls */ - enum dsp_strmmode strm_mode; /* mode of stream when opened */ - /* DMA chnl id if dsp_strmmode is LDMA or RDMA */ - u32 dma_chnl_id; - u32 dma_priority; /* DMA channel priority 0=lowest, >0=high */ -}; - -/* The dsp_cbdata structure */ -struct dsp_cbdata { - u32 cb_data; - u8 node_data[1]; -}; - -/* The dsp_msg structure */ -struct dsp_msg { - u32 cmd; - u32 arg1; - u32 arg2; -}; - -/* The dsp_resourcereqmts structure for node's resource requirements */ -struct dsp_resourcereqmts { - u32 cb_struct; - u32 static_data_size; - u32 global_data_size; - u32 program_mem_size; - u32 wc_execution_time; - u32 wc_period; - u32 wc_deadline; - u32 avg_exection_time; - u32 minimum_period; -}; - -/* - * The dsp_streamconnect structure describes a stream connection - * between two nodes, or between a node and the GPP - */ -struct dsp_streamconnect { - u32 cb_struct; - enum dsp_connecttype connect_type; - u32 this_node_stream_index; - void *connected_node; - struct dsp_uuid ui_connected_node_id; - u32 connected_node_stream_index; -}; - -struct dsp_nodeprofs { - u32 heap_size; -}; - -/* The dsp_ndbprops structure reports the attributes of a node */ -struct dsp_ndbprops { - u32 cb_struct; - struct dsp_uuid ui_node_id; - char ac_name[DSP_MAXNAMELEN]; - enum node_type ntype; - u32 cache_on_gpp; - struct dsp_resourcereqmts dsp_resource_reqmts; - s32 prio; - u32 stack_size; - u32 sys_stack_size; - u32 stack_seg; - u32 message_depth; - u32 num_input_streams; - u32 num_output_streams; - u32 timeout; - u32 count_profiles; /* Number of supported profiles */ - /* Array of profiles */ - struct dsp_nodeprofs node_profiles[MAX_PROFILES]; - u32 stack_seg_name; /* Stack Segment Name */ -}; - - /* The dsp_nodeattrin structure describes the attributes of a - * node client */ -struct dsp_nodeattrin { - u32 cb_struct; - s32 prio; - u32 timeout; - u32 profile_id; - /* Reserved, for Bridge Internal use only */ - u32 heap_size; - void *pgpp_virt_addr; /* Reserved, for Bridge Internal use only */ -}; - - /* The dsp_nodeinfo structure is used to retrieve information - * about a node */ -struct dsp_nodeinfo { - u32 cb_struct; - struct dsp_ndbprops nb_node_database_props; - u32 execution_priority; - enum node_state ns_execution_state; - void *device_owner; - u32 number_streams; - struct dsp_streamconnect sc_stream_connection[16]; - u32 node_env; -}; - - /* The dsp_nodeattr structure describes the attributes of a node */ -struct dsp_nodeattr { - u32 cb_struct; - struct dsp_nodeattrin in_node_attr_in; - u32 node_attr_inputs; - u32 node_attr_outputs; - struct dsp_nodeinfo node_info; -}; - -/* - * Notification type: either the name of an opened event, or an event or - * window handle. - */ -struct dsp_notification { - char *name; - void *handle; -}; - -/* The dsp_processorattrin structure describes the attributes of a processor */ -struct dsp_processorattrin { - u32 cb_struct; - u32 timeout; -}; -/* - * The dsp_processorinfo structure describes basic capabilities of a - * DSP processor - */ -struct dsp_processorinfo { - u32 cb_struct; - int processor_family; - int processor_type; - u32 clock_rate; - u32 internal_mem_size; - u32 external_mem_size; - u32 processor_id; - int ty_running_rtos; - s32 node_min_priority; - s32 node_max_priority; -}; - -/* Error information of last DSP exception signalled to the GPP */ -struct dsp_errorinfo { - u32 err_mask; - u32 val1; - u32 val2; - u32 val3; -}; - -/* The dsp_processorstate structure describes the state of a DSP processor */ -struct dsp_processorstate { - u32 cb_struct; - enum dsp_procstate proc_state; -}; - -/* - * The dsp_resourceinfo structure is used to retrieve information about a - * processor's resources - */ -struct dsp_resourceinfo { - u32 cb_struct; - enum dsp_resourceinfotype resource_type; - union { - u32 resource; - struct dsp_memstat mem_stat; - struct dsp_procloadstat proc_load_stat; - } result; -}; - -/* - * The dsp_streamattrin structure describes the attributes of a stream, - * including segment and alignment of data buffers allocated with - * DSPStream_AllocateBuffers(), if applicable - */ -struct dsp_streamattrin { - u32 cb_struct; - u32 timeout; - u32 segment_id; - u32 buf_alignment; - u32 num_bufs; - enum dsp_strmmode strm_mode; - u32 dma_chnl_id; - u32 dma_priority; -}; - -/* The dsp_bufferattr structure describes the attributes of a data buffer */ -struct dsp_bufferattr { - u32 cb_struct; - u32 segment_id; - u32 buf_alignment; -}; - -/* - * The dsp_streaminfo structure is used to retrieve information - * about a stream. - */ -struct dsp_streaminfo { - u32 cb_struct; - u32 number_bufs_allowed; - u32 number_bufs_in_stream; - u32 number_bytes; - void *sync_object_handle; - enum dsp_streamstate ss_stream_state; -}; - -/* DMM MAP attributes -It is a bit mask with each bit value indicating a specific attribute -bit 0 - GPP address type (user virtual=0, physical=1) -bit 1 - MMU Endianism (Big Endian=1, Little Endian=0) -bit 2 - MMU mixed page attribute (Mixed/ CPUES=1, TLBES =0) -bit 3 - MMU element size = 8bit (valid only for non mixed page entries) -bit 4 - MMU element size = 16bit (valid only for non mixed page entries) -bit 5 - MMU element size = 32bit (valid only for non mixed page entries) -bit 6 - MMU element size = 64bit (valid only for non mixed page entries) - -bit 14 - Input (read only) buffer -bit 15 - Output (writeable) buffer -*/ - -/* Types of mapping attributes */ - -/* MPU address is virtual and needs to be translated to physical addr */ -#define DSP_MAPVIRTUALADDR 0x00000000 -#define DSP_MAPPHYSICALADDR 0x00000001 - -/* Mapped data is big endian */ -#define DSP_MAPBIGENDIAN 0x00000002 -#define DSP_MAPLITTLEENDIAN 0x00000000 - -/* Element size is based on DSP r/w access size */ -#define DSP_MAPMIXEDELEMSIZE 0x00000004 - -/* - * Element size for MMU mapping (8, 16, 32, or 64 bit) - * Ignored if DSP_MAPMIXEDELEMSIZE enabled - */ -#define DSP_MAPELEMSIZE8 0x00000008 -#define DSP_MAPELEMSIZE16 0x00000010 -#define DSP_MAPELEMSIZE32 0x00000020 -#define DSP_MAPELEMSIZE64 0x00000040 - -#define DSP_MAPVMALLOCADDR 0x00000080 - -#define DSP_MAPDONOTLOCK 0x00000100 - -#define DSP_MAP_DIR_MASK 0x3FFF - -#define GEM_CACHE_LINE_SIZE 128 -#define GEM_L1P_PREFETCH_SIZE 128 - -/* - * Definitions from dbreg.h - */ - -#define DSPPROCTYPE_C64 6410 -#define IVAPROCTYPE_ARM7 470 - -/* Max registry path length. Also the max registry value length. */ -#define MAXREGPATHLENGTH 255 - -#endif /* DBDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbll.h b/drivers/staging/tidspbridge/include/dspbridge/dbll.h deleted file mode 100644 index 46a9e0027ea5..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dbll.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * dbll.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Dynamic load library module interface. Function header - * comments are in the file dblldefs.h. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DBLL_ -#define DBLL_ - -#include -#include - -extern bool symbols_reloaded; - -extern void dbll_close(struct dbll_library_obj *zl_lib); -extern int dbll_create(struct dbll_tar_obj **target_obj, - struct dbll_attrs *pattrs); -extern void dbll_delete(struct dbll_tar_obj *target); -extern void dbll_exit(void); -extern bool dbll_get_addr(struct dbll_library_obj *zl_lib, char *name, - struct dbll_sym_val **sym_val); -extern void dbll_get_attrs(struct dbll_tar_obj *target, - struct dbll_attrs *pattrs); -extern bool dbll_get_c_addr(struct dbll_library_obj *zl_lib, char *name, - struct dbll_sym_val **sym_val); -extern int dbll_get_sect(struct dbll_library_obj *lib, char *name, - u32 *paddr, u32 *psize); -extern bool dbll_init(void); -extern int dbll_load(struct dbll_library_obj *lib, - dbll_flags flags, - struct dbll_attrs *attrs, u32 * entry); -extern int dbll_open(struct dbll_tar_obj *target, char *file, - dbll_flags flags, - struct dbll_library_obj **lib_obj); -extern int dbll_read_sect(struct dbll_library_obj *lib, - char *name, char *buf, u32 size); -extern void dbll_unload(struct dbll_library_obj *lib, struct dbll_attrs *attrs); -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -bool dbll_find_dsp_symbol(struct dbll_library_obj *zl_lib, u32 address, - u32 offset_range, u32 *sym_addr_output, char *name_output); -#endif - -#endif /* DBLL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h deleted file mode 100644 index a19e07809ff6..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h +++ /dev/null @@ -1,431 +0,0 @@ -/* - * dblldefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DBLLDEFS_ -#define DBLLDEFS_ - -/* - * Bit masks for dbl_flags. - */ -#define DBLL_NOLOAD 0x0 /* Don't load symbols, code, or data */ -#define DBLL_SYMB 0x1 /* load symbols */ -#define DBLL_CODE 0x2 /* load code */ -#define DBLL_DATA 0x4 /* load data */ -#define DBLL_DYNAMIC 0x8 /* dynamic load */ -#define DBLL_BSS 0x20 /* Unitialized section */ - -#define DBLL_MAXPATHLENGTH 255 - -/* - * ======== DBLL_Target ======== - * - */ -struct dbll_tar_obj; - -/* - * ======== dbll_flags ======== - * Specifies whether to load code, data, or symbols - */ -typedef s32 dbll_flags; - -/* - * ======== DBLL_Library ======== - * - */ -struct dbll_library_obj; - -/* - * ======== dbll_sect_info ======== - * For collecting info on overlay sections - */ -struct dbll_sect_info { - const char *name; /* name of section */ - u32 sect_run_addr; /* run address of section */ - u32 sect_load_addr; /* load address of section */ - u32 size; /* size of section (target MAUs) */ - dbll_flags type; /* Code, data, or BSS */ -}; - -/* - * ======== dbll_sym_val ======== - * (Needed for dynamic load library) - */ -struct dbll_sym_val { - u32 value; -}; - -/* - * ======== dbll_alloc_fxn ======== - * Allocate memory function. Allocate or reserve (if reserved == TRUE) - * "size" bytes of memory from segment "space" and return the address in - * *dsp_address (or starting at *dsp_address if reserve == TRUE). Returns 0 on - * success, or an error code on failure. - */ -typedef s32(*dbll_alloc_fxn) (void *hdl, s32 space, u32 size, u32 align, - u32 *dsp_address, s32 seg_id, s32 req, - bool reserved); - -/* - * ======== dbll_close_fxn ======== - */ -typedef s32(*dbll_f_close_fxn) (void *); - -/* - * ======== dbll_free_fxn ======== - * Free memory function. Free, or unreserve (if reserved == TRUE) "size" - * bytes of memory from segment "space" - */ -typedef bool(*dbll_free_fxn) (void *hdl, u32 addr, s32 space, u32 size, - bool reserved); - -/* - * ======== dbll_f_open_fxn ======== - */ -typedef void *(*dbll_f_open_fxn) (const char *, const char *); - -/* - * ======== dbll_log_write_fxn ======== - * Function to call when writing data from a section, to log the info. - * Can be NULL if no logging is required. - */ -typedef int(*dbll_log_write_fxn) (void *handle, - struct dbll_sect_info *sect, u32 addr, - u32 bytes); - -/* - * ======== dbll_read_fxn ======== - */ -typedef s32(*dbll_read_fxn) (void *, size_t, size_t, void *); - -/* - * ======== dbll_seek_fxn ======== - */ -typedef s32(*dbll_seek_fxn) (void *, long, int); - -/* - * ======== dbll_sym_lookup ======== - * Symbol lookup function - Find the symbol name and return its value. - * - * Parameters: - * handle - Opaque handle - * parg - Opaque argument. - * name - Name of symbol to lookup. - * sym - Location to store address of symbol structure. - * - * Returns: - * TRUE: Success (symbol was found). - * FALSE: Failed to find symbol. - */ -typedef bool(*dbll_sym_lookup) (void *handle, void *parg, void *rmm_handle, - const char *name, struct dbll_sym_val **sym); - -/* - * ======== dbll_tell_fxn ======== - */ -typedef s32(*dbll_tell_fxn) (void *); - -/* - * ======== dbll_write_fxn ======== - * Write memory function. Write "n" HOST bytes of memory to segment "mtype" - * starting at address "dsp_address" from the buffer "buf". The buffer is - * formatted as an array of words appropriate for the DSP. - */ -typedef s32(*dbll_write_fxn) (void *hdl, u32 dsp_address, void *buf, - u32 n, s32 mtype); - -/* - * ======== dbll_attrs ======== - */ -struct dbll_attrs { - dbll_alloc_fxn alloc; - dbll_free_fxn free; - void *rmm_handle; /* Handle to pass to alloc, free functions */ - dbll_write_fxn write; - void *input_params; /* Handle to pass to write, cinit function */ - bool base_image; - dbll_log_write_fxn log_write; - void *log_write_handle; - - /* Symbol matching function and handle to pass to it */ - dbll_sym_lookup sym_lookup; - void *sym_handle; - void *sym_arg; - - /* - * These file manipulation functions should be compatible with the - * "C" run time library functions of the same name. - */ - s32 (*fread)(void *ptr, size_t size, size_t count, void *filp); - s32 (*fseek)(void *filp, long offset, int origin); - s32 (*ftell)(void *filp); - s32 (*fclose)(void *filp); - void *(*fopen)(const char *path, const char *mode); -}; - -/* - * ======== dbll_close ======== - * Close library opened with dbll_open. - * Parameters: - * lib - Handle returned from dbll_open(). - * Returns: - * Requires: - * DBL initialized. - * Valid lib. - * Ensures: - */ -typedef void (*dbll_close_fxn) (struct dbll_library_obj *library); - -/* - * ======== dbll_create ======== - * Create a target object, specifying the alloc, free, and write functions. - * Parameters: - * target_obj - Location to store target handle on output. - * pattrs - Attributes. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failed. - * Requires: - * DBL initialized. - * pattrs != NULL. - * target_obj != NULL; - * Ensures: - * Success: *target_obj != NULL. - * Failure: *target_obj == NULL. - */ -typedef int(*dbll_create_fxn) (struct dbll_tar_obj **target_obj, - struct dbll_attrs *attrs); - -/* - * ======== dbll_delete ======== - * Delete target object and free resources for any loaded libraries. - * Parameters: - * target - Handle returned from DBLL_Create(). - * Returns: - * Requires: - * DBL initialized. - * Valid target. - * Ensures: - */ -typedef void (*dbll_delete_fxn) (struct dbll_tar_obj *target); - -/* - * ======== dbll_exit ======== - * Discontinue use of DBL module. - * Parameters: - * Returns: - * Requires: - * refs > 0. - * Ensures: - * refs >= 0. - */ -typedef void (*dbll_exit_fxn) (void); - -/* - * ======== dbll_get_addr ======== - * Get address of name in the specified library. - * Parameters: - * lib - Handle returned from dbll_open(). - * name - Name of symbol - * sym_val - Location to store symbol address on output. - * Returns: - * TRUE: Success. - * FALSE: Symbol not found. - * Requires: - * DBL initialized. - * Valid library. - * name != NULL. - * sym_val != NULL. - * Ensures: - */ -typedef bool(*dbll_get_addr_fxn) (struct dbll_library_obj *lib, char *name, - struct dbll_sym_val **sym_val); - -/* - * ======== dbll_get_attrs ======== - * Retrieve the attributes of the target. - * Parameters: - * target - Handle returned from DBLL_Create(). - * pattrs - Location to store attributes on output. - * Returns: - * Requires: - * DBL initialized. - * Valid target. - * pattrs != NULL. - * Ensures: - */ -typedef void (*dbll_get_attrs_fxn) (struct dbll_tar_obj *target, - struct dbll_attrs *attrs); - -/* - * ======== dbll_get_c_addr ======== - * Get address of "C" name on the specified library. - * Parameters: - * lib - Handle returned from dbll_open(). - * name - Name of symbol - * sym_val - Location to store symbol address on output. - * Returns: - * TRUE: Success. - * FALSE: Symbol not found. - * Requires: - * DBL initialized. - * Valid target. - * name != NULL. - * sym_val != NULL. - * Ensures: - */ -typedef bool(*dbll_get_c_addr_fxn) (struct dbll_library_obj *lib, char *name, - struct dbll_sym_val **sym_val); - -/* - * ======== dbll_get_sect ======== - * Get address and size of a named section. - * Parameters: - * lib - Library handle returned from dbll_open(). - * name - Name of section. - * paddr - Location to store section address on output. - * psize - Location to store section size on output. - * Returns: - * 0: Success. - * -ENXIO: Section not found. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * paddr != NULL; - * psize != NULL. - * Ensures: - */ -typedef int(*dbll_get_sect_fxn) (struct dbll_library_obj *lib, - char *name, u32 *addr, u32 *size); - -/* - * ======== dbll_init ======== - * Initialize DBL module. - * Parameters: - * Returns: - * TRUE: Success. - * FALSE: Failure. - * Requires: - * refs >= 0. - * Ensures: - * Success: refs > 0. - * Failure: refs >= 0. - */ -typedef bool(*dbll_init_fxn) (void); - -/* - * ======== dbll_load ======== - * Load library onto the target. - * - * Parameters: - * lib - Library handle returned from dbll_open(). - * flags - Load code, data and/or symbols. - * attrs - May contain alloc, free, and write function. - * entry_pt - Location to store program entry on output. - * Returns: - * 0: Success. - * -EBADF: File read failed. - * -EILSEQ: Failure in dynamic loader library. - * Requires: - * DBL initialized. - * Valid lib. - * entry != NULL. - * Ensures: - */ -typedef int(*dbll_load_fxn) (struct dbll_library_obj *lib, - dbll_flags flags, - struct dbll_attrs *attrs, u32 *entry); -/* - * ======== dbll_open ======== - * dbll_open() returns a library handle that can be used to load/unload - * the symbols/code/data via dbll_load()/dbll_unload(). - * Parameters: - * target - Handle returned from dbll_create(). - * file - Name of file to open. - * flags - If flags & DBLL_SYMB, load symbols. - * lib_obj - Location to store library handle on output. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failure. - * -EBADF: File open/read failure. - * Unable to determine target type. - * Requires: - * DBL initialized. - * Valid target. - * file != NULL. - * lib_obj != NULL. - * dbll_attrs fopen function non-NULL. - * Ensures: - * Success: Valid *lib_obj. - * Failure: *lib_obj == NULL. - */ -typedef int(*dbll_open_fxn) (struct dbll_tar_obj *target, char *file, - dbll_flags flags, - struct dbll_library_obj **lib_obj); - -/* - * ======== dbll_read_sect ======== - * Read COFF section into a character buffer. - * Parameters: - * lib - Library handle returned from dbll_open(). - * name - Name of section. - * pbuf - Buffer to write section contents into. - * size - Buffer size - * Returns: - * 0: Success. - * -ENXIO: Named section does not exists. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * pbuf != NULL. - * size != 0. - * Ensures: - */ -typedef int(*dbll_read_sect_fxn) (struct dbll_library_obj *lib, - char *name, char *content, - u32 cont_size); -/* - * ======== dbll_unload ======== - * Unload library loaded with dbll_load(). - * Parameters: - * lib - Handle returned from dbll_open(). - * attrs - Contains free() function and handle to pass to it. - * Returns: - * Requires: - * DBL initialized. - * Valid lib. - * Ensures: - */ -typedef void (*dbll_unload_fxn) (struct dbll_library_obj *library, - struct dbll_attrs *attrs); -struct dbll_fxns { - dbll_close_fxn close_fxn; - dbll_create_fxn create_fxn; - dbll_delete_fxn delete_fxn; - dbll_exit_fxn exit_fxn; - dbll_get_attrs_fxn get_attrs_fxn; - dbll_get_addr_fxn get_addr_fxn; - dbll_get_c_addr_fxn get_c_addr_fxn; - dbll_get_sect_fxn get_sect_fxn; - dbll_init_fxn init_fxn; - dbll_load_fxn load_fxn; - dbll_open_fxn open_fxn; - dbll_read_sect_fxn read_sect_fxn; - dbll_unload_fxn unload_fxn; -}; - -#endif /* DBLDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dev.h b/drivers/staging/tidspbridge/include/dspbridge/dev.h deleted file mode 100644 index fa2d79ef6cc8..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dev.h +++ /dev/null @@ -1,620 +0,0 @@ -/* - * dev.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Bridge Bridge driver device operations. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DEV_ -#define DEV_ - -/* ----------------------------------- Module Dependent Headers */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* ----------------------------------- This */ -#include - -/* - * ======== dev_brd_write_fxn ======== - * Purpose: - * Exported function to be used as the COD write function. This function - * is passed a handle to a DEV_hObject by ZL in arb, then calls the - * device's bridge_brd_write() function. - * Parameters: - * arb: Handle to a Device Object. - * dev_ctxt: Handle to Bridge driver defined device info. - * dsp_addr: Address on DSP board (Destination). - * host_buf: Pointer to host buffer (Source). - * ul_num_bytes: Number of bytes to transfer. - * mem_type: Memory space on DSP to which to transfer. - * Returns: - * Number of bytes written. Returns 0 if the DEV_hObject passed in via - * arb is invalid. - * Requires: - * DEV Initialized. - * host_buf != NULL - * Ensures: - */ -extern u32 dev_brd_write_fxn(void *arb, - u32 dsp_add, - void *host_buf, u32 ul_num_bytes, u32 mem_space); - -/* - * ======== dev_create_device ======== - * Purpose: - * Called by the operating system to load the Bridge Driver for a - * 'Bridge device. - * Parameters: - * device_obj: Ptr to location to receive the device object handle. - * driver_file_name: Name of Bridge driver PE DLL file to load. If the - * absolute path is not provided, the file is loaded - * through 'Bridge's module search path. - * host_config: Host configuration information, to be passed down - * to the Bridge driver when bridge_dev_create() is called. - * pDspConfig: DSP resources, to be passed down to the Bridge driver - * when bridge_dev_create() is called. - * dev_node_obj: Platform specific device node. - * Returns: - * 0: Module is loaded, device object has been created - * -ENOMEM: Insufficient memory to create needed resources. - * -EPERM: Unable to find Bridge driver entry point function. - * -ESPIPE: Unable to load ZL DLL. - * Requires: - * DEV Initialized. - * device_obj != NULL. - * driver_file_name != NULL. - * host_config != NULL. - * pDspConfig != NULL. - * Ensures: - * 0: *device_obj will contain handle to the new device object. - * Otherwise, does not create the device object, ensures the Bridge driver - * module is unloaded, and sets *device_obj to NULL. - */ -extern int dev_create_device(struct dev_object - **device_obj, - const char *driver_file_name, - struct cfg_devnode *dev_node_obj); - -/* - * ======== dev_create2 ======== - * Purpose: - * After successful loading of the image from api_init_complete2 - * (PROC Auto_Start) or proc_load this fxn is called. This creates - * the Node Manager and updates the DEV Object. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device(). - * Returns: - * 0: Successful Creation of Node Manager - * -EPERM: Some Error Occurred. - * Requires: - * DEV Initialized - * Valid hdev_obj - * Ensures: - * 0 and hdev_obj->node_mgr != NULL - * else hdev_obj->node_mgr == NULL - */ -extern int dev_create2(struct dev_object *hdev_obj); - -/* - * ======== dev_destroy2 ======== - * Purpose: - * Destroys the Node manager for this device. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device(). - * Returns: - * 0: Successful Creation of Node Manager - * -EPERM: Some Error Occurred. - * Requires: - * DEV Initialized - * Valid hdev_obj - * Ensures: - * 0 and hdev_obj->node_mgr == NULL - * else -EPERM. - */ -extern int dev_destroy2(struct dev_object *hdev_obj); - -/* - * ======== dev_destroy_device ======== - * Purpose: - * Destroys the channel manager for this device, if any, calls - * bridge_dev_destroy(), and then attempts to unload the Bridge module. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * -EPERM: The Bridge driver failed it's bridge_dev_destroy() function. - * Requires: - * DEV Initialized. - * Ensures: - */ -extern int dev_destroy_device(struct dev_object - *hdev_obj); - -/* - * ======== dev_get_chnl_mgr ======== - * Purpose: - * Retrieve the handle to the channel manager created for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *mgr: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * mgr != NULL. - * DEV Initialized. - * Ensures: - * 0: *mgr contains a handle to a channel manager object, - * or NULL. - * else: *mgr is NULL. - */ -extern int dev_get_chnl_mgr(struct dev_object *hdev_obj, - struct chnl_mgr **mgr); - -/* - * ======== dev_get_cmm_mgr ======== - * Purpose: - * Retrieve the handle to the shared memory manager created for this - * device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *mgr: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * mgr != NULL. - * DEV Initialized. - * Ensures: - * 0: *mgr contains a handle to a channel manager object, - * or NULL. - * else: *mgr is NULL. - */ -extern int dev_get_cmm_mgr(struct dev_object *hdev_obj, - struct cmm_object **mgr); - -/* - * ======== dev_get_dmm_mgr ======== - * Purpose: - * Retrieve the handle to the dynamic memory manager created for this - * device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *mgr: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * mgr != NULL. - * DEV Initialized. - * Ensures: - * 0: *mgr contains a handle to a channel manager object, - * or NULL. - * else: *mgr is NULL. - */ -extern int dev_get_dmm_mgr(struct dev_object *hdev_obj, - struct dmm_object **mgr); - -/* - * ======== dev_get_cod_mgr ======== - * Purpose: - * Retrieve the COD manager create for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *cod_mgr: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * cod_mgr != NULL. - * DEV Initialized. - * Ensures: - * 0: *cod_mgr contains a handle to a COD manager object. - * else: *cod_mgr is NULL. - */ -extern int dev_get_cod_mgr(struct dev_object *hdev_obj, - struct cod_manager **cod_mgr); - -/* - * ======== dev_get_deh_mgr ======== - * Purpose: - * Retrieve the DEH manager created for this device. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device(). - * *deh_manager: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * deh_manager != NULL. - * DEH Initialized. - * Ensures: - * 0: *deh_manager contains a handle to a DEH manager object. - * else: *deh_manager is NULL. - */ -extern int dev_get_deh_mgr(struct dev_object *hdev_obj, - struct deh_mgr **deh_manager); - -/* - * ======== dev_get_dev_node ======== - * Purpose: - * Retrieve the platform specific device ID for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * dev_nde: Ptr to location to get the device node handle. - * Returns: - * 0: Returns a DEVNODE in *dev_node_obj. - * -EFAULT: Invalid hdev_obj. - * Requires: - * dev_nde != NULL. - * DEV Initialized. - * Ensures: - * 0: *dev_nde contains a platform specific device ID; - * else: *dev_nde is NULL. - */ -extern int dev_get_dev_node(struct dev_object *hdev_obj, - struct cfg_devnode **dev_nde); - -/* - * ======== dev_get_dev_type ======== - * Purpose: - * Retrieve the platform specific device ID for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * dev_nde: Ptr to location to get the device node handle. - * Returns: - * 0: Success - * -EFAULT: Invalid hdev_obj. - * Requires: - * dev_nde != NULL. - * DEV Initialized. - * Ensures: - * 0: *dev_nde contains a platform specific device ID; - * else: *dev_nde is NULL. - */ -extern int dev_get_dev_type(struct dev_object *device_obj, - u8 *dev_type); - -/* - * ======== dev_get_first ======== - * Purpose: - * Retrieve the first Device Object handle from an internal linked list of - * of DEV_OBJECTs maintained by DEV. - * Parameters: - * Returns: - * NULL if there are no device objects stored; else - * a valid DEV_HOBJECT. - * Requires: - * No calls to dev_create_device or dev_destroy_device (which my modify the - * internal device object list) may occur between calls to dev_get_first - * and dev_get_next. - * Ensures: - * The DEV_HOBJECT returned is valid. - * A subsequent call to dev_get_next will return the next device object in - * the list. - */ -extern struct dev_object *dev_get_first(void); - -/* - * ======== dev_get_intf_fxns ======== - * Purpose: - * Retrieve the Bridge driver interface function structure for the - * loaded Bridge driver. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *if_fxns: Ptr to location to store fxn interface. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * if_fxns != NULL. - * DEV Initialized. - * Ensures: - * 0: *if_fxns contains a pointer to the Bridge - * driver interface; - * else: *if_fxns is NULL. - */ -extern int dev_get_intf_fxns(struct dev_object *hdev_obj, - struct bridge_drv_interface **if_fxns); - -/* - * ======== dev_get_io_mgr ======== - * Purpose: - * Retrieve the handle to the IO manager created for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * *mgr: Ptr to location to store handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * mgr != NULL. - * DEV Initialized. - * Ensures: - * 0: *mgr contains a handle to an IO manager object. - * else: *mgr is NULL. - */ -extern int dev_get_io_mgr(struct dev_object *hdev_obj, - struct io_mgr **mgr); - -/* - * ======== dev_get_next ======== - * Purpose: - * Retrieve the next Device Object handle from an internal linked list of - * of DEV_OBJECTs maintained by DEV, after having previously called - * dev_get_first() and zero or more dev_get_next - * Parameters: - * hdev_obj: Handle to the device object returned from a previous - * call to dev_get_first() or dev_get_next(). - * Returns: - * NULL if there are no further device objects on the list or hdev_obj - * was invalid; - * else the next valid DEV_HOBJECT in the list. - * Requires: - * No calls to dev_create_device or dev_destroy_device (which my modify the - * internal device object list) may occur between calls to dev_get_first - * and dev_get_next. - * Ensures: - * The DEV_HOBJECT returned is valid. - * A subsequent call to dev_get_next will return the next device object in - * the list. - */ -extern struct dev_object *dev_get_next(struct dev_object - *hdev_obj); - -/* - * ========= dev_get_msg_mgr ======== - * Purpose: - * Retrieve the msg_ctrl Manager Handle from the DevObject. - * Parameters: - * hdev_obj: Handle to the Dev Object - * msg_man: Location where msg_ctrl Manager handle will be returned. - * Returns: - * Requires: - * DEV Initialized. - * Valid hdev_obj. - * node_man != NULL. - * Ensures: - */ -extern void dev_get_msg_mgr(struct dev_object *hdev_obj, - struct msg_mgr **msg_man); - -/* - * ========= dev_get_node_manager ======== - * Purpose: - * Retrieve the Node Manager Handle from the DevObject. It is an - * accessor function - * Parameters: - * hdev_obj: Handle to the Dev Object - * node_man: Location where Handle to the Node Manager will be - * returned.. - * Returns: - * 0: Success - * -EFAULT: Invalid Dev Object handle. - * Requires: - * DEV Initialized. - * node_man is not null - * Ensures: - * 0: *node_man contains a handle to a Node manager object. - * else: *node_man is NULL. - */ -extern int dev_get_node_manager(struct dev_object - *hdev_obj, - struct node_mgr **node_man); - -/* - * ======== dev_get_symbol ======== - * Purpose: - * Get the value of a symbol in the currently loaded program. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * str_sym: Name of symbol to look up. - * pul_value: Ptr to symbol value. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * -ESPIPE: Symbols couldn not be found or have not been loaded onto - * the board. - * Requires: - * str_sym != NULL. - * pul_value != NULL. - * DEV Initialized. - * Ensures: - * 0: *pul_value contains the symbol value; - */ -extern int dev_get_symbol(struct dev_object *hdev_obj, - const char *str_sym, u32 * pul_value); - -/* - * ======== dev_get_bridge_context ======== - * Purpose: - * Retrieve the Bridge Context handle, as returned by the - * bridge_dev_create fxn. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device() - * *phbridge_context: Ptr to location to store context handle. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * phbridge_context != NULL. - * DEV Initialized. - * Ensures: - * 0: *phbridge_context contains context handle; - * else: *phbridge_context is NULL; - */ -extern int dev_get_bridge_context(struct dev_object *hdev_obj, - struct bridge_dev_context - **phbridge_context); - -/* - * ======== dev_insert_proc_object ======== - * Purpose: - * Inserts the Processor Object into the List of PROC Objects - * kept in the DEV Object - * Parameters: - * proc_obj: Handle to the Proc Object - * hdev_obj Handle to the Dev Object - * bAttachedNew Specifies if there are already processors attached - * Returns: - * 0: Successfully inserted into the list - * Requires: - * proc_obj is not NULL - * hdev_obj is a valid handle to the DEV. - * DEV Initialized. - * List(of Proc object in Dev) Exists. - * Ensures: - * 0 & the PROC Object is inserted and the list is not empty - * Details: - * If the List of Proc Object is empty bAttachedNew is TRUE, it indicated - * this is the first Processor attaching. - * If it is False, there are already processors attached. - */ -extern int dev_insert_proc_object(struct dev_object - *hdev_obj, - u32 proc_obj, - bool *already_attached); - -/* - * ======== dev_remove_proc_object ======== - * Purpose: - * Search for and remove a Proc object from the given list maintained - * by the DEV - * Parameters: - * p_proc_object: Ptr to ProcObject to insert. - * dev_obj: Ptr to Dev Object where the list is. - * already_attached: Ptr to return the bool - * Returns: - * 0: If successful. - * -EPERM Failure to Remove the PROC Object from the list - * Requires: - * DevObject is Valid - * proc_obj != 0 - * dev_obj->proc_list != NULL - * !LST_IS_EMPTY(dev_obj->proc_list) - * already_attached !=NULL - * Ensures: - * Details: - * List will be deleted when the DEV is destroyed. - * - */ -extern int dev_remove_proc_object(struct dev_object - *hdev_obj, u32 proc_obj); - -/* - * ======== dev_notify_clients ======== - * Purpose: - * Notify all clients of this device of a change in device status. - * Clients may include multiple users of BRD, as well as CHNL. - * This function is asychronous, and may be called by a timer event - * set up by a watchdog timer. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device(). - * ret: A status word, most likely a BRD_STATUS. - * Returns: - * 0: All registered clients were asynchronously notified. - * -EINVAL: Invalid hdev_obj. - * Requires: - * DEV Initialized. - * Ensures: - * 0: Notifications are queued by the operating system to be - * delivered to clients. This function does not ensure that - * the notifications will ever be delivered. - */ -extern int dev_notify_clients(struct dev_object *hdev_obj, u32 ret); - -/* - * ======== dev_remove_device ======== - * Purpose: - * Destroys the Device Object created by dev_start_device. - * Parameters: - * dev_node_obj: Device node as it is know to OS. - * Returns: - * 0: If success; - * Otherwise. - * Requires: - * Ensures: - */ -extern int dev_remove_device(struct cfg_devnode *dev_node_obj); - -/* - * ======== dev_set_chnl_mgr ======== - * Purpose: - * Set the channel manager for this device. - * Parameters: - * hdev_obj: Handle to device object created with - * dev_create_device(). - * hmgr: Handle to a channel manager, or NULL. - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * DEV Initialized. - * Ensures: - */ -extern int dev_set_chnl_mgr(struct dev_object *hdev_obj, - struct chnl_mgr *hmgr); - -/* - * ======== dev_set_msg_mgr ======== - * Purpose: - * Set the Message manager for this device. - * Parameters: - * hdev_obj: Handle to device object created with dev_create_device(). - * hmgr: Handle to a message manager, or NULL. - * Returns: - * Requires: - * DEV Initialized. - * Ensures: - */ -extern void dev_set_msg_mgr(struct dev_object *hdev_obj, struct msg_mgr *hmgr); - -/* - * ======== dev_start_device ======== - * Purpose: - * Initializes the new device with bridge environment. This involves - * querying CM for allocated resources, querying the registry for - * necessary dsp resources (requested in the INF file), and using this - * information to create a bridge device object. - * Parameters: - * dev_node_obj: Device node as it is know to OS. - * Returns: - * 0: If success; - * Otherwise. - * Requires: - * DEV initialized. - * Ensures: - */ -extern int dev_start_device(struct cfg_devnode *dev_node_obj); - -#endif /* DEV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/devdefs.h b/drivers/staging/tidspbridge/include/dspbridge/devdefs.h deleted file mode 100644 index a2f9241ff139..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/devdefs.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * devdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Definition of common include typedef between dspdefs.h and dev.h. Required - * to break circular dependency between Bridge driver and DEV include files. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DEVDEFS_ -#define DEVDEFS_ - -/* Bridge Device Object */ -struct dev_object; - -#endif /* DEVDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/disp.h b/drivers/staging/tidspbridge/include/dspbridge/disp.h deleted file mode 100644 index 39d3cea9ca8b..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/disp.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * disp.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Node Dispatcher. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DISP_ -#define DISP_ - -#include -#include -#include - -struct disp_object; - -/* Node Dispatcher attributes */ -struct disp_attr { - u32 chnl_offset; /* Offset of channel ids reserved for RMS */ - /* Size of buffer for sending data to RMS */ - u32 chnl_buf_size; - int proc_family; /* eg, 5000 */ - int proc_type; /* eg, 5510 */ - void *reserved1; /* Reserved for future use. */ - u32 reserved2; /* Reserved for future use. */ -}; - - -/* - * ======== disp_create ======== - * Create a NODE Dispatcher object. This object handles the creation, - * deletion, and execution of nodes on the DSP target, through communication - * with the Resource Manager Server running on the target. Each NODE - * Manager object should have exactly one NODE Dispatcher. - * - * Parameters: - * dispatch_obj: Location to store node dispatcher object on output. - * hdev_obj: Device for this processor. - * disp_attrs: Node dispatcher attributes. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EPERM: Unable to create dispatcher. - * Requires: - * disp_attrs != NULL. - * hdev_obj != NULL. - * dispatch_obj != NULL. - * Ensures: - * 0: IS_VALID(*dispatch_obj). - * error: *dispatch_obj == NULL. - */ -extern int disp_create(struct disp_object **dispatch_obj, - struct dev_object *hdev_obj, - const struct disp_attr *disp_attrs); - -/* - * ======== disp_delete ======== - * Delete the NODE Dispatcher. - * - * Parameters: - * disp_obj: Node Dispatcher object. - * Returns: - * Requires: - * Valid disp_obj. - * Ensures: - * disp_obj is invalid. - */ -extern void disp_delete(struct disp_object *disp_obj); - -/* - * ======== disp_node_change_priority ======== - * Change the priority of a node currently running on the target. - * - * Parameters: - * disp_obj: Node Dispatcher object. - * hnode: Node object representing a node currently - * allocated or running on the DSP. - * ulFxnAddress: Address of RMS function for changing priority. - * node_env: Address of node's environment structure. - * prio: New priority level to set node's priority to. - * Returns: - * 0: Success. - * -ETIME: A timeout occurred before the DSP responded. - * Requires: - * Valid disp_obj. - * hnode != NULL. - * Ensures: - */ -extern int disp_node_change_priority(struct disp_object - *disp_obj, - struct node_object *hnode, - u32 rms_fxn, - nodeenv node_env, s32 prio); - -/* - * ======== disp_node_create ======== - * Create a node on the DSP by remotely calling the node's create function. - * - * Parameters: - * disp_obj: Node Dispatcher object. - * hnode: Node handle obtained from node_allocate(). - * ul_fxn_addr: Address or RMS create node function. - * ul_create_fxn: Address of node's create function. - * pargs: Arguments to pass to RMS node create function. - * node_env: Location to store node environment pointer on - * output. - * Returns: - * 0: Success. - * -ETIME: A timeout occurred before the DSP responded. - * -EPERM: A failure occurred, unable to create node. - * Requires: - * Valid disp_obj. - * pargs != NULL. - * hnode != NULL. - * node_env != NULL. - * node_get_type(hnode) != NODE_DEVICE. - * Ensures: - */ -extern int disp_node_create(struct disp_object *disp_obj, - struct node_object *hnode, - u32 rms_fxn, - u32 ul_create_fxn, - const struct node_createargs - *pargs, nodeenv *node_env); - -/* - * ======== disp_node_delete ======== - * Delete a node on the DSP by remotely calling the node's delete function. - * - * Parameters: - * disp_obj: Node Dispatcher object. - * hnode: Node object representing a node currently - * loaded on the DSP. - * ul_fxn_addr: Address or RMS delete node function. - * ul_delete_fxn: Address of node's delete function. - * node_env: Address of node's environment structure. - * Returns: - * 0: Success. - * -ETIME: A timeout occurred before the DSP responded. - * Requires: - * Valid disp_obj. - * hnode != NULL. - * Ensures: - */ -extern int disp_node_delete(struct disp_object *disp_obj, - struct node_object *hnode, - u32 rms_fxn, - u32 ul_delete_fxn, nodeenv node_env); - -/* - * ======== disp_node_run ======== - * Start execution of a node's execute phase, or resume execution of a node - * that has been suspended (via DISP_NodePause()) on the DSP. - * - * Parameters: - * disp_obj: Node Dispatcher object. - * hnode: Node object representing a node to be executed - * on the DSP. - * ul_fxn_addr: Address or RMS node execute function. - * ul_execute_fxn: Address of node's execute function. - * node_env: Address of node's environment structure. - * Returns: - * 0: Success. - * -ETIME: A timeout occurred before the DSP responded. - * Requires: - * Valid disp_obj. - * hnode != NULL. - * Ensures: - */ -extern int disp_node_run(struct disp_object *disp_obj, - struct node_object *hnode, - u32 rms_fxn, - u32 ul_execute_fxn, nodeenv node_env); - -#endif /* DISP_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dmm.h b/drivers/staging/tidspbridge/include/dspbridge/dmm.h deleted file mode 100644 index c3487be8fcf5..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dmm.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * dmm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * The Dynamic Memory Mapping(DMM) module manages the DSP Virtual address - * space that can be directly mapped to any MPU buffer or memory region. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DMM_ -#define DMM_ - -#include - -struct dmm_object; - -/* DMM attributes used in dmm_create() */ -struct dmm_mgrattrs { - u32 reserved; -}; - -#define DMMPOOLSIZE 0x4000000 - -/* - * ======== dmm_get_handle ======== - * Purpose: - * Return the dynamic memory manager object for this device. - * This is typically called from the client process. - */ - -extern int dmm_get_handle(void *hprocessor, - struct dmm_object **dmm_manager); - -extern int dmm_reserve_memory(struct dmm_object *dmm_mgr, - u32 size, u32 *prsv_addr); - -extern int dmm_un_reserve_memory(struct dmm_object *dmm_mgr, - u32 rsv_addr); - -extern int dmm_map_memory(struct dmm_object *dmm_mgr, u32 addr, - u32 size); - -extern int dmm_un_map_memory(struct dmm_object *dmm_mgr, - u32 addr, u32 *psize); - -extern int dmm_destroy(struct dmm_object *dmm_mgr); - -extern int dmm_delete_tables(struct dmm_object *dmm_mgr); - -extern int dmm_create(struct dmm_object **dmm_manager, - struct dev_object *hdev_obj, - const struct dmm_mgrattrs *mgr_attrts); - -extern int dmm_create_tables(struct dmm_object *dmm_mgr, - u32 addr, u32 size); - -#ifdef DSP_DMM_DEBUG -u32 dmm_mem_map_dump(struct dmm_object *dmm_mgr); -#endif - -#endif /* DMM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/drv.h b/drivers/staging/tidspbridge/include/dspbridge/drv.h deleted file mode 100644 index b0c7708321b2..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/drv.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * drv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DRV Resource allocation module. Driver Object gets Created - * at the time of Loading. It holds the List of Device Objects - * in the system. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DRV_ -#define DRV_ - -#include - -#include - -/* Bridge Driver Object */ -struct drv_object; - -/* Provide the DSP Internal memory windows that can be accessed from L3 address - * space */ - -#define OMAP_GEM_BASE 0x107F8000 -#define OMAP_DSP_SIZE 0x00720000 - -/* MEM1 is L2 RAM + L2 Cache space */ -#define OMAP_DSP_MEM1_BASE 0x5C7F8000 -#define OMAP_DSP_MEM1_SIZE 0x18000 - -/* MEM2 is L1P RAM/CACHE space */ -#define OMAP_DSP_MEM2_BASE 0x5CE00000 -#define OMAP_DSP_MEM2_SIZE 0x8000 - -/* MEM3 is L1D RAM/CACHE space */ -#define OMAP_DSP_MEM3_BASE 0x5CF04000 -#define OMAP_DSP_MEM3_SIZE 0x14000 - -#define OMAP_PER_CM_BASE 0x48005000 -#define OMAP_PER_CM_SIZE 0x1000 - -#define OMAP_PER_PRM_BASE 0x48307000 -#define OMAP_PER_PRM_SIZE 0x1000 - -#define OMAP_CORE_PRM_BASE 0x48306A00 -#define OMAP_CORE_PRM_SIZE 0x1000 - -#define OMAP_DMMU_BASE 0x5D000000 -#define OMAP_DMMU_SIZE 0x1000 - -/* GPP PROCESS CLEANUP Data structures */ - -/* New structure (member of process context) abstracts NODE resource info */ -struct node_res_object { - void *node; - s32 node_allocated; /* Node status */ - s32 heap_allocated; /* Heap status */ - s32 streams_allocated; /* Streams status */ - int id; -}; - -/* used to cache dma mapping information */ -struct bridge_dma_map_info { - /* direction of DMA in action, or DMA_NONE */ - enum dma_data_direction dir; - /* number of elements requested by us */ - int num_pages; - /* number of elements returned from dma_map_sg */ - int sg_num; - /* list of buffers used in this DMA action */ - struct scatterlist *sg; -}; - -/* Used for DMM mapped memory accounting */ -struct dmm_map_object { - struct list_head link; - u32 dsp_addr; - u32 mpu_addr; - u32 size; - u32 num_usr_pgs; - struct page **pages; - struct bridge_dma_map_info dma_info; -}; - -/* Used for DMM reserved memory accounting */ -struct dmm_rsv_object { - struct list_head link; - u32 dsp_reserved_addr; -}; - -/* New structure (member of process context) abstracts stream resource info */ -struct strm_res_object { - s32 stream_allocated; /* Stream status */ - void *stream; - u32 num_bufs; - u32 dir; - int id; -}; - -/* Overall Bridge process resource usage state */ -enum gpp_proc_res_state { - PROC_RES_ALLOCATED, - PROC_RES_FREED -}; - -/* Bridge Data */ -struct drv_data { - char *base_img; - s32 shm_size; - int tc_wordswapon; - void *drv_object; - void *dev_object; - void *mgr_object; -}; - -/* Process Context */ -struct process_context { - /* Process State */ - enum gpp_proc_res_state res_state; - - /* Handle to Processor */ - void *processor; - - /* DSP Node resources */ - struct idr *node_id; - - /* DMM mapped memory resources */ - struct list_head dmm_map_list; - spinlock_t dmm_map_lock; - - /* DMM reserved memory resources */ - struct list_head dmm_rsv_list; - spinlock_t dmm_rsv_lock; - - /* Stream resources */ - struct idr *stream_id; -}; - -/* - * ======== drv_create ======== - * Purpose: - * Creates the Driver Object. This is done during the driver loading. - * There is only one Driver Object in the DSP/BIOS Bridge. - * Parameters: - * drv_obj: Location to store created DRV Object handle. - * Returns: - * 0: Success - * -ENOMEM: Failed in Memory allocation - * -EPERM: General Failure - * Requires: - * DRV Initialized (refs > 0 ) - * drv_obj != NULL. - * Ensures: - * 0: - *drv_obj is a valid DRV interface to the device. - * - List of DevObject Created and Initialized. - * - List of dev_node String created and initialized. - * - Registry is updated with the DRV Object. - * !0: DRV Object not created - * Details: - * There is one Driver Object for the Driver representing - * the driver itself. It contains the list of device - * Objects and the list of Device Extensions in the system. - * Also it can hold other necessary - * information in its storage area. - */ -extern int drv_create(struct drv_object **drv_obj); - -/* - * ======== drv_destroy ======== - * Purpose: - * destroys the Dev Object list, DrvExt list - * and destroy the DRV object - * Called upon driver unLoading.or unsuccessful loading of the driver. - * Parameters: - * driver_obj: Handle to Driver object . - * Returns: - * 0: Success. - * -EPERM: Failed to destroy DRV Object - * Requires: - * DRV Initialized (cRegs > 0 ) - * hdrv_obj is not NULL and a valid DRV handle . - * List of DevObject is Empty. - * List of DrvExt is Empty - * Ensures: - * 0: - DRV Object destroyed and hdrv_obj is not a valid - * DRV handle. - * - Registry is updated with "0" as the DRV Object. - */ -extern int drv_destroy(struct drv_object *driver_obj); - -/* - * ======== drv_get_first_dev_object ======== - * Purpose: - * Returns the Ptr to the FirstDev Object in the List - * Parameters: - * Requires: - * DRV Initialized - * Returns: - * dw_dev_object: Ptr to the First Dev Object as a u32 - * 0 if it fails to retrieve the First Dev Object - * Ensures: - */ -extern u32 drv_get_first_dev_object(void); - -/* - * ======== drv_get_first_dev_extension ======== - * Purpose: - * Returns the Ptr to the First Device Extension in the List - * Parameters: - * Requires: - * DRV Initialized - * Returns: - * dw_dev_extension: Ptr to the First Device Extension as a u32 - * 0: Failed to Get the Device Extension - * Ensures: - */ -extern u32 drv_get_first_dev_extension(void); - -/* - * ======== drv_get_dev_object ======== - * Purpose: - * Given a index, returns a handle to DevObject from the list - * Parameters: - * hdrv_obj: Handle to the Manager - * device_obj: Location to store the Dev Handle - * Requires: - * DRV Initialized - * index >= 0 - * hdrv_obj is not NULL and Valid DRV Object - * device_obj is not NULL - * Device Object List not Empty - * Returns: - * 0: Success - * -EPERM: Failed to Get the Dev Object - * Ensures: - * 0: *device_obj != NULL - * -EPERM: *device_obj = NULL - */ -extern int drv_get_dev_object(u32 index, - struct drv_object *hdrv_obj, - struct dev_object **device_obj); - -/* - * ======== drv_get_next_dev_object ======== - * Purpose: - * Returns the Ptr to the Next Device Object from the the List - * Parameters: - * hdev_obj: Handle to the Device Object - * Requires: - * DRV Initialized - * hdev_obj != 0 - * Returns: - * dw_dev_object: Ptr to the Next Dev Object as a u32 - * 0: If it fail to get the next Dev Object. - * Ensures: - */ -extern u32 drv_get_next_dev_object(u32 hdev_obj); - -/* - * ======== drv_get_next_dev_extension ======== - * Purpose: - * Returns the Ptr to the Next Device Extension from the the List - * Parameters: - * dev_extension: Handle to the Device Extension - * Requires: - * DRV Initialized - * dev_extension != 0. - * Returns: - * dw_dev_extension: Ptr to the Next Dev Extension - * 0: If it fail to Get the next Dev Extension - * Ensures: - */ -extern u32 drv_get_next_dev_extension(u32 dev_extension); - -/* - * ======== drv_insert_dev_object ======== - * Purpose: - * Insert a DeviceObject into the list of Driver object. - * Parameters: - * driver_obj: Handle to DrvObject - * hdev_obj: Handle to DeviceObject to insert. - * Returns: - * 0: If successful. - * -EPERM: General Failure: - * Requires: - * hdrv_obj != NULL and Valid DRV Handle. - * hdev_obj != NULL. - * Ensures: - * 0: Device Object is inserted and the List is not empty. - */ -extern int drv_insert_dev_object(struct drv_object *driver_obj, - struct dev_object *hdev_obj); - -/* - * ======== drv_remove_dev_object ======== - * Purpose: - * Search for and remove a Device object from the given list of Device Obj - * objects. - * Parameters: - * driver_obj: Handle to DrvObject - * hdev_obj: Handle to DevObject to Remove - * Returns: - * 0: Success. - * -EPERM: Unable to find dev_obj. - * Requires: - * hdrv_obj != NULL and a Valid DRV Handle. - * hdev_obj != NULL. - * List exists and is not empty. - * Ensures: - * List either does not exist (NULL), or is not empty if it does exist. - */ -extern int drv_remove_dev_object(struct drv_object *driver_obj, - struct dev_object *hdev_obj); - -/* - * ======== drv_request_resources ======== - * Purpose: - * Assigns the Resources or Releases them. - * Parameters: - * dw_context: Path to the driver Registry Key. - * dev_node_strg: Ptr to dev_node String stored in the Device Ext. - * Returns: - * TRUE if success; FALSE otherwise. - * Requires: - * Ensures: - * The Resources are assigned based on Bus type. - * The hardware is initialized. Resource information is - * gathered from the Registry(ISA, PCMCIA)or scanned(PCI) - * Resource structure is stored in the registry which will be - * later used by the CFG module. - */ -extern int drv_request_resources(u32 dw_context, - u32 *dev_node_strg); - -/* - * ======== drv_release_resources ======== - * Purpose: - * Assigns the Resources or Releases them. - * Parameters: - * dw_context: Path to the driver Registry Key. - * hdrv_obj: Handle to the Driver Object. - * Returns: - * TRUE if success; FALSE otherwise. - * Requires: - * Ensures: - * The Resources are released based on Bus type. - * Resource structure is deleted from the registry - */ -extern int drv_release_resources(u32 dw_context, - struct drv_object *hdrv_obj); - -/** - * drv_request_bridge_res_dsp() - Reserves shared memory for bridge. - * @phost_resources: pointer to host resources. - */ -int drv_request_bridge_res_dsp(void **phost_resources); - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY -void bridge_recover_schedule(void); -#endif - -/* - * ======== mem_ext_phys_pool_init ======== - * Purpose: - * Uses the physical memory chunk passed for internal consistent memory - * allocations. - * physical address based on the page frame address. - * Parameters: - * pool_phys_base starting address of the physical memory pool. - * pool_size size of the physical memory pool. - * Returns: - * none. - * Requires: - * - MEM initialized. - * - valid physical address for the base and size > 0 - */ -extern void mem_ext_phys_pool_init(u32 pool_phys_base, u32 pool_size); - -/* - * ======== mem_ext_phys_pool_release ======== - */ -extern void mem_ext_phys_pool_release(void); - -/* ======== mem_alloc_phys_mem ======== - * Purpose: - * Allocate physically contiguous, uncached memory - * Parameters: - * byte_size: Number of bytes to allocate. - * align_mask: Alignment Mask. - * physical_address: Physical address of allocated memory. - * Returns: - * Pointer to a block of memory; - * NULL if memory couldn't be allocated, or if byte_size == 0. - * Requires: - * MEM initialized. - * Ensures: - * The returned pointer, if not NULL, points to a valid memory block of - * the size requested. Returned physical address refers to physical - * location of memory. - */ -extern void *mem_alloc_phys_mem(u32 byte_size, - u32 align_mask, u32 *physical_address); - -/* - * ======== mem_free_phys_mem ======== - * Purpose: - * Free the given block of physically contiguous memory. - * Parameters: - * virtual_address: Pointer to virtual memory region allocated - * by mem_alloc_phys_mem(). - * physical_address: Pointer to physical memory region allocated - * by mem_alloc_phys_mem(). - * byte_size: Size of the memory region allocated by mem_alloc_phys_mem(). - * Returns: - * Requires: - * MEM initialized. - * virtual_address is a valid memory address returned by - * mem_alloc_phys_mem() - * Ensures: - * virtual_address is no longer a valid pointer to memory. - */ -extern void mem_free_phys_mem(void *virtual_address, - u32 physical_address, u32 byte_size); - -/* - * ======== MEM_LINEAR_ADDRESS ======== - * Purpose: - * Get the linear address corresponding to the given physical address. - * Parameters: - * phys_addr: Physical address to be mapped. - * byte_size: Number of bytes in physical range to map. - * Returns: - * The corresponding linear address, or NULL if unsuccessful. - * Requires: - * MEM initialized. - * Ensures: - * Notes: - * If valid linear address is returned, be sure to call - * MEM_UNMAP_LINEAR_ADDRESS(). - */ -#define MEM_LINEAR_ADDRESS(phy_addr, byte_size) phy_addr - -/* - * ======== MEM_UNMAP_LINEAR_ADDRESS ======== - * Purpose: - * Unmap the linear address mapped in MEM_LINEAR_ADDRESS. - * Parameters: - * base_addr: Ptr to mapped memory (as returned by MEM_LINEAR_ADDRESS()). - * Returns: - * Requires: - * - MEM initialized. - * - base_addr is a valid linear address mapped in MEM_LINEAR_ADDRESS. - * Ensures: - * - base_addr no longer points to a valid linear address. - */ -#define MEM_UNMAP_LINEAR_ADDRESS(base_addr) {} - -#endif /* DRV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h b/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h deleted file mode 100644 index 6ff808297c10..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h +++ /dev/null @@ -1,467 +0,0 @@ -/* - * dspapi-ioctl.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Contains structures and commands that are used for interaction - * between the DDSP API and Bridge driver. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPAPIIOCTL_ -#define DSPAPIIOCTL_ - -#include -#include -#include - -union trapped_args { - - /* MGR Module */ - struct { - u32 node_id; - struct dsp_ndbprops __user *ndb_props; - u32 ndb_props_size; - u32 __user *num_nodes; - } args_mgr_enumnode_info; - - struct { - u32 processor_id; - struct dsp_processorinfo __user *processor_info; - u32 processor_info_size; - u32 __user *num_procs; - } args_mgr_enumproc_info; - - struct { - struct dsp_uuid *uuid_obj; - enum dsp_dcdobjtype obj_type; - char *sz_path_name; - } args_mgr_registerobject; - - struct { - struct dsp_uuid *uuid_obj; - enum dsp_dcdobjtype obj_type; - } args_mgr_unregisterobject; - - struct { - struct dsp_notification __user *__user *anotifications; - u32 count; - u32 __user *index; - u32 timeout; - } args_mgr_wait; - - /* PROC Module */ - struct { - u32 processor_id; - struct dsp_processorattrin __user *attr_in; - void *__user *ph_processor; - } args_proc_attach; - - struct { - void *processor; - u32 cmd; - struct dsp_cbdata __user *args; - } args_proc_ctrl; - - struct { - void *processor; - } args_proc_detach; - - struct { - void *processor; - void *__user *node_tab; - u32 node_tab_size; - u32 __user *num_nodes; - u32 __user *allocated; - } args_proc_enumnode_info; - - struct { - void *processor; - u32 resource_type; - struct dsp_resourceinfo *resource_info; - u32 resource_info_size; - } args_proc_enumresources; - - struct { - void *processor; - struct dsp_processorstate __user *proc_state_obj; - u32 state_info_size; - } args_proc_getstate; - - struct { - void *processor; - u8 __user *buf; - u8 __user *size; - u32 max_size; - } args_proc_gettrace; - - struct { - void *processor; - s32 argc_index; - char __user *__user *user_args; - char *__user *user_envp; - } args_proc_load; - - struct { - void *processor; - u32 event_mask; - u32 notify_type; - struct dsp_notification __user *notification; - } args_proc_register_notify; - - struct { - void *processor; - u32 size; - void *__user *rsv_addr; - } args_proc_rsvmem; - - struct { - void *processor; - u32 size; - void *rsv_addr; - } args_proc_unrsvmem; - - struct { - void *processor; - void *mpu_addr; - u32 size; - void *req_addr; - void *__user *map_addr; - u32 map_attr; - } args_proc_mapmem; - - struct { - void *processor; - u32 size; - void *map_addr; - } args_proc_unmapmem; - - struct { - void *processor; - void *mpu_addr; - u32 size; - u32 dir; - } args_proc_dma; - - struct { - void *processor; - void *mpu_addr; - u32 size; - u32 flags; - } args_proc_flushmemory; - - struct { - void *processor; - void *mpu_addr; - u32 size; - } args_proc_invalidatememory; - - /* NODE Module */ - struct { - void *processor; - struct dsp_uuid __user *node_id_ptr; - struct dsp_cbdata __user *args; - struct dsp_nodeattrin __user *attr_in; - void *__user *node; - } args_node_allocate; - - struct { - void *node; - u32 size; - struct dsp_bufferattr __user *attr; - u8 *__user *buffer; - } args_node_allocmsgbuf; - - struct { - void *node; - s32 prio; - } args_node_changepriority; - - struct { - void *node; - u32 stream_id; - void *other_node; - u32 other_stream; - struct dsp_strmattr __user *attrs; - struct dsp_cbdata __user *conn_param; - } args_node_connect; - - struct { - void *node; - } args_node_create; - - struct { - void *node; - } args_node_delete; - - struct { - void *node; - struct dsp_bufferattr __user *attr; - u8 *buffer; - } args_node_freemsgbuf; - - struct { - void *node; - struct dsp_nodeattr __user *attr; - u32 attr_size; - } args_node_getattr; - - struct { - void *node; - struct dsp_msg __user *message; - u32 timeout; - } args_node_getmessage; - - struct { - void *node; - } args_node_pause; - - struct { - void *node; - struct dsp_msg __user *message; - u32 timeout; - } args_node_putmessage; - - struct { - void *node; - u32 event_mask; - u32 notify_type; - struct dsp_notification __user *notification; - } args_node_registernotify; - - struct { - void *node; - } args_node_run; - - struct { - void *node; - int __user *status; - } args_node_terminate; - - struct { - void *processor; - struct dsp_uuid __user *node_id_ptr; - struct dsp_ndbprops __user *node_props; - } args_node_getuuidprops; - - /* STRM module */ - - struct { - void *stream; - u32 size; - u8 *__user *ap_buffer; - u32 num_bufs; - } args_strm_allocatebuffer; - - struct { - void *stream; - } args_strm_close; - - struct { - void *stream; - u8 *__user *ap_buffer; - u32 num_bufs; - } args_strm_freebuffer; - - struct { - void *stream; - void **event; - } args_strm_geteventhandle; - - struct { - void *stream; - struct stream_info __user *stream_info; - u32 stream_info_size; - } args_strm_getinfo; - - struct { - void *stream; - bool flush_flag; - } args_strm_idle; - - struct { - void *stream; - u8 *buffer; - u32 bytes; - u32 buf_size; - u32 arg; - } args_strm_issue; - - struct { - void *node; - u32 direction; - u32 index; - struct strm_attr __user *attr_in; - void *__user *stream; - } args_strm_open; - - struct { - void *stream; - u8 *__user *buf_ptr; - u32 __user *bytes; - u32 __user *buf_size_ptr; - u32 __user *arg; - } args_strm_reclaim; - - struct { - void *stream; - u32 event_mask; - u32 notify_type; - struct dsp_notification __user *notification; - } args_strm_registernotify; - - struct { - void *__user *stream_tab; - u32 strm_num; - u32 __user *mask; - u32 timeout; - } args_strm_select; - - /* CMM Module */ - struct { - struct cmm_object *cmm_mgr; - u32 size; - struct cmm_attrs *attrs; - void **buf_va; - } args_cmm_allocbuf; - - struct { - struct cmm_object *cmm_mgr; - void *buf_pa; - u32 seg_id; - } args_cmm_freebuf; - - struct { - void *processor; - struct cmm_object *__user *cmm_mgr; - } args_cmm_gethandle; - - struct { - struct cmm_object *cmm_mgr; - struct cmm_info __user *cmm_info_obj; - } args_cmm_getinfo; - - /* UTIL module */ - struct { - s32 util_argc; - char **argv; - } args_util_testdll; -}; - -/* - * Dspbridge Ioctl numbering scheme - * - * 7 0 - * --------------------------------- - * | Module | Ioctl Number | - * --------------------------------- - * | x | x | x | 0 | 0 | 0 | 0 | 0 | - * --------------------------------- - */ - -/* Ioctl driver identifier */ -#define DB 0xDB - -/* - * Following are used to distinguish between module ioctls, this is needed - * in case new ioctls are introduced. - */ -#define DB_MODULE_MASK 0xE0 -#define DB_IOC_MASK 0x1F - -/* Ioctl module masks */ -#define DB_MGR 0x0 -#define DB_PROC 0x20 -#define DB_NODE 0x40 -#define DB_STRM 0x60 -#define DB_CMM 0x80 - -#define DB_MODULE_SHIFT 5 - -/* Used to calculate the ioctl per dspbridge module */ -#define DB_IOC(module, num) \ - (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK)) -/* Used to get dspbridge ioctl module */ -#define DB_GET_MODULE(cmd) ((cmd) & DB_MODULE_MASK) -/* Used to get dspbridge ioctl number */ -#define DB_GET_IOC(cmd) ((cmd) & DB_IOC_MASK) - -/* TODO: Remove deprecated and not implemented */ - -/* MGR Module */ -#define MGR_ENUMNODE_INFO _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long) -#define MGR_ENUMPROC_INFO _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long) -#define MGR_REGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long) -#define MGR_UNREGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long) -#define MGR_WAIT _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long) -/* MGR_GET_PROC_RES Deprecated */ -#define MGR_GET_PROC_RES _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long) - -/* PROC Module */ -#define PROC_ATTACH _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long) -#define PROC_CTRL _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long) -/* PROC_DETACH Deprecated */ -#define PROC_DETACH _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long) -#define PROC_ENUMNODE _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long) -#define PROC_ENUMRESOURCES _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long) -#define PROC_GET_STATE _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long) -#define PROC_GET_TRACE _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long) -#define PROC_LOAD _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long) -#define PROC_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long) -#define PROC_START _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long) -#define PROC_RSVMEM _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long) -#define PROC_UNRSVMEM _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long) -#define PROC_MAPMEM _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long) -#define PROC_UNMAPMEM _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long) -#define PROC_FLUSHMEMORY _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long) -#define PROC_STOP _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long) -#define PROC_INVALIDATEMEMORY _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long) -#define PROC_BEGINDMA _IOW(DB, DB_IOC(DB_PROC, 17), unsigned long) -#define PROC_ENDDMA _IOW(DB, DB_IOC(DB_PROC, 18), unsigned long) - -/* NODE Module */ -#define NODE_ALLOCATE _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long) -#define NODE_ALLOCMSGBUF _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long) -#define NODE_CHANGEPRIORITY _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long) -#define NODE_CONNECT _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long) -#define NODE_CREATE _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long) -#define NODE_DELETE _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long) -#define NODE_FREEMSGBUF _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long) -#define NODE_GETATTR _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long) -#define NODE_GETMESSAGE _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long) -#define NODE_PAUSE _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long) -#define NODE_PUTMESSAGE _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long) -#define NODE_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long) -#define NODE_RUN _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long) -#define NODE_TERMINATE _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long) -#define NODE_GETUUIDPROPS _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long) - -/* STRM Module */ -#define STRM_ALLOCATEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long) -#define STRM_CLOSE _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long) -#define STRM_FREEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long) -#define STRM_GETEVENTHANDLE _IO(DB, DB_IOC(DB_STRM, 3)) /* Not Impl'd */ -#define STRM_GETINFO _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long) -#define STRM_IDLE _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long) -#define STRM_ISSUE _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long) -#define STRM_OPEN _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long) -#define STRM_RECLAIM _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long) -#define STRM_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long) -#define STRM_SELECT _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long) - -/* CMM Module */ -#define CMM_ALLOCBUF _IO(DB, DB_IOC(DB_CMM, 0)) /* Not Impl'd */ -#define CMM_FREEBUF _IO(DB, DB_IOC(DB_CMM, 1)) /* Not Impl'd */ -#define CMM_GETHANDLE _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long) -#define CMM_GETINFO _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long) - -#endif /* DSPAPIIOCTL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspapi.h b/drivers/staging/tidspbridge/include/dspbridge/dspapi.h deleted file mode 100644 index c99c68738b0f..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspapi.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - * dspapi.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Includes the wrapper functions called directly by the - * DeviceIOControl interface. - * - * Notes: - * Bridge services exported to Bridge driver are initialized by the DSPAPI on - * behalf of the Bridge driver. Bridge driver must not call module Init/Exit - * functions. - * - * To ensure Bridge driver binary compatibility across different platforms, - * for the same processor, a Bridge driver must restrict its usage of system - * services to those exported by the DSPAPI library. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPAPI_ -#define DSPAPI_ - -#include - -/* This BRD API Library Version: */ -#define BRD_API_MAJOR_VERSION (u32)8 /* .8x - Alpha, .9x - Beta, 1.x FCS */ -#define BRD_API_MINOR_VERSION (u32)0 - -/* - * ======== api_call_dev_ioctl ======== - * Purpose: - * Call the (wrapper) function for the corresponding API IOCTL. - * Parameters: - * cmd: IOCTL id, base 0. - * args: Argument structure. - * result: - * Returns: - * 0 if command called; -EINVAL if command not in IOCTL - * table. - * Requires: - * Ensures: - */ -extern int api_call_dev_ioctl(unsigned int cmd, - union trapped_args *args, - u32 *result, void *pr_ctxt); - -/* - * ======== api_init ======== - * Purpose: - * Initialize modules used by Bridge API. - * This procedure is called when the driver is loaded. - * Parameters: - * Returns: - * TRUE if success; FALSE otherwise. - * Requires: - * Ensures: - */ -extern bool api_init(void); - -/* - * ======== api_init_complete2 ======== - * Purpose: - * Perform any required bridge initialization which cannot - * be performed in api_init() or dev_start_device() due - * to the fact that some services are not yet - * completely initialized. - * Parameters: - * Returns: - * 0: Allow this device to load - * -EPERM: Failure. - * Requires: - * Bridge API initialized. - * Ensures: - */ -extern int api_init_complete2(void); - -/* - * ======== api_exit ======== - * Purpose: - * Exit all modules initialized in api_init(void). - * This procedure is called when the driver is unloaded. - * Parameters: - * Returns: - * Requires: - * api_init(void) was previously called. - * Ensures: - * Resources acquired in api_init(void) are freed. - */ -extern void api_exit(void); - -/* MGR wrapper functions */ -extern u32 mgrwrap_enum_node_info(union trapped_args *args, void *pr_ctxt); -extern u32 mgrwrap_enum_proc_info(union trapped_args *args, void *pr_ctxt); -extern u32 mgrwrap_register_object(union trapped_args *args, void *pr_ctxt); -extern u32 mgrwrap_unregister_object(union trapped_args *args, void *pr_ctxt); -extern u32 mgrwrap_wait_for_bridge_events(union trapped_args *args, - void *pr_ctxt); - -extern u32 mgrwrap_get_process_resources_info(union trapped_args *args, - void *pr_ctxt); - -/* CPRC (Processor) wrapper Functions */ -extern u32 procwrap_attach(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_ctrl(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_detach(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_enum_node_info(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_enum_resources(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_get_state(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_get_trace(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_load(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_register_notify(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_start(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_reserve_memory(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_un_reserve_memory(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_map(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_un_map(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_flush_memory(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_stop(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_invalidate_memory(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_begin_dma(union trapped_args *args, void *pr_ctxt); -extern u32 procwrap_end_dma(union trapped_args *args, void *pr_ctxt); - -/* NODE wrapper functions */ -extern u32 nodewrap_allocate(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_alloc_msg_buf(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_change_priority(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_connect(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_create(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_delete(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_free_msg_buf(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_get_attr(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_get_message(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_pause(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_put_message(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_register_notify(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_run(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_terminate(union trapped_args *args, void *pr_ctxt); -extern u32 nodewrap_get_uuid_props(union trapped_args *args, void *pr_ctxt); - -/* STRM wrapper functions */ -extern u32 strmwrap_allocate_buffer(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_close(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_free_buffer(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_get_event_handle(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_get_info(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_idle(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_issue(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_open(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_reclaim(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_register_notify(union trapped_args *args, void *pr_ctxt); -extern u32 strmwrap_select(union trapped_args *args, void *pr_ctxt); - -extern u32 cmmwrap_calloc_buf(union trapped_args *args, void *pr_ctxt); -extern u32 cmmwrap_free_buf(union trapped_args *args, void *pr_ctxt); -extern u32 cmmwrap_get_handle(union trapped_args *args, void *pr_ctxt); -extern u32 cmmwrap_get_info(union trapped_args *args, void *pr_ctxt); - -#endif /* DSPAPI_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspchnl.h b/drivers/staging/tidspbridge/include/dspbridge/dspchnl.h deleted file mode 100644 index 7146a5057e29..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspchnl.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * dspchnl.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Declares the upper edge channel class library functions required by - * all Bridge driver / DSP API driver interface tables. These functions are - * implemented by every class of Bridge channel library. - * - * Notes: - * The function comment headers reside in dspdefs.h. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPCHNL_ -#define DSPCHNL_ - -extern int bridge_chnl_create(struct chnl_mgr **channel_mgr, - struct dev_object *hdev_obj, - const struct chnl_mgrattrs - *mgr_attrts); - -extern int bridge_chnl_destroy(struct chnl_mgr *hchnl_mgr); - -extern int bridge_chnl_open(struct chnl_object **chnl, - struct chnl_mgr *hchnl_mgr, - s8 chnl_mode, - u32 ch_id, - const struct chnl_attr - *pattrs); - -extern int bridge_chnl_close(struct chnl_object *chnl_obj); - -extern int bridge_chnl_add_io_req(struct chnl_object *chnl_obj, - void *host_buf, - u32 byte_size, u32 buf_size, - u32 dw_dsp_addr, u32 dw_arg); - -extern int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, - u32 timeout, struct chnl_ioc *chan_ioc); - -extern int bridge_chnl_cancel_io(struct chnl_object *chnl_obj); - -extern int bridge_chnl_flush_io(struct chnl_object *chnl_obj, - u32 timeout); - -extern int bridge_chnl_get_info(struct chnl_object *chnl_obj, - struct chnl_info *channel_info); - -extern int bridge_chnl_get_mgr_info(struct chnl_mgr *hchnl_mgr, - u32 ch_id, struct chnl_mgrinfo - *mgr_info); - -extern int bridge_chnl_idle(struct chnl_object *chnl_obj, - u32 timeout, bool flush_data); - -extern int bridge_chnl_register_notify(struct chnl_object *chnl_obj, - u32 event_mask, - u32 notify_type, - struct dsp_notification - *hnotification); - -#endif /* DSPCHNL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h deleted file mode 100644 index ed32bf383132..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h +++ /dev/null @@ -1,1048 +0,0 @@ -/* - * dspdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Bridge driver entry point and interface function declarations. - * - * Notes: - * The DSP API obtains it's function interface to - * the Bridge driver via a call to bridge_drv_entry(). - * - * Bridge services exported to Bridge drivers are initialized by the - * DSP API on behalf of the Bridge driver. - * - * Bridge function DBC Requires and Ensures are also made by the DSP API on - * behalf of the Bridge driver, to simplify the Bridge driver code. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPDEFS_ -#define DSPDEFS_ - -#include -#include -#include -#include -#include -#include -#include - -/* Handle to Bridge driver's private device context. */ -struct bridge_dev_context; - -/*--------------------------------------------------------------------------- */ -/* BRIDGE DRIVER FUNCTION TYPES */ -/*--------------------------------------------------------------------------- */ - -/* - * ======== bridge_brd_monitor ======== - * Purpose: - * Bring the board to the BRD_IDLE (monitor) state. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device context. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL - * Ensures: - * 0: Board is in BRD_IDLE state; - * else: Board state is indeterminate. - */ -typedef int(*fxn_brd_monitor) (struct bridge_dev_context *dev_ctxt); - -/* - * ======== fxn_brd_setstate ======== - * Purpose: - * Sets the Bridge driver state - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * brd_state: Board state - * Returns: - * 0: Success. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * brd_state <= BRD_LASTSTATE. - * Ensures: - * brd_state <= BRD_LASTSTATE. - * Update the Board state to the specified state. - */ -typedef int(*fxn_brd_setstate) (struct bridge_dev_context - * dev_ctxt, u32 brd_state); - -/* - * ======== bridge_brd_start ======== - * Purpose: - * Bring board to the BRD_RUNNING (start) state. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device context. - * dsp_addr: DSP address at which to start execution. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL - * Board is in monitor (BRD_IDLE) state. - * Ensures: - * 0: Board is in BRD_RUNNING state. - * Interrupts to the PC are enabled. - * else: Board state is indeterminate. - */ -typedef int(*fxn_brd_start) (struct bridge_dev_context - * dev_ctxt, u32 dsp_addr); - -/* - * ======== bridge_brd_mem_copy ======== - * Purpose: - * Copy memory from one DSP address to another - * Parameters: - * dev_context: Pointer to context handle - * dsp_dest_addr: DSP address to copy to - * dsp_src_addr: DSP address to copy from - * ul_num_bytes: Number of bytes to copy - * mem_type: What section of memory to copy to - * Returns: - * 0: Success. - * -EPERM: Other, unspecified error. - * Requires: - * dev_context != NULL - * Ensures: - * 0: Board is in BRD_RUNNING state. - * Interrupts to the PC are enabled. - * else: Board state is indeterminate. - */ -typedef int(*fxn_brd_memcopy) (struct bridge_dev_context - * dev_ctxt, - u32 dsp_dest_addr, - u32 dsp_src_addr, - u32 ul_num_bytes, u32 mem_type); -/* - * ======== bridge_brd_mem_write ======== - * Purpose: - * Write a block of host memory into a DSP address, into a given memory - * space. Unlike bridge_brd_write, this API does reset the DSP - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * dsp_addr: Address on DSP board (Destination). - * host_buf: Pointer to host buffer (Source). - * ul_num_bytes: Number of bytes to transfer. - * mem_type: Memory space on DSP to which to transfer. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * host_buf != NULL. - * Ensures: - */ -typedef int(*fxn_brd_memwrite) (struct bridge_dev_context - * dev_ctxt, - u8 *host_buf, - u32 dsp_addr, u32 ul_num_bytes, - u32 mem_type); - -/* - * ======== bridge_brd_mem_map ======== - * Purpose: - * Map a MPU memory region to a DSP/IVA memory space - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * ul_mpu_addr: MPU memory region start address. - * virt_addr: DSP/IVA memory region u8 address. - * ul_num_bytes: Number of bytes to map. - * map_attrs: Mapping attributes (e.g. endianness). - * Returns: - * 0: Success. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * Ensures: - */ -typedef int(*fxn_brd_memmap) (struct bridge_dev_context - * dev_ctxt, u32 ul_mpu_addr, - u32 virt_addr, u32 ul_num_bytes, - u32 map_attr, - struct page **mapped_pages); - -/* - * ======== bridge_brd_mem_un_map ======== - * Purpose: - * UnMap an MPU memory region from DSP/IVA memory space - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * virt_addr: DSP/IVA memory region u8 address. - * ul_num_bytes: Number of bytes to unmap. - * Returns: - * 0: Success. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * Ensures: - */ -typedef int(*fxn_brd_memunmap) (struct bridge_dev_context - * dev_ctxt, - u32 virt_addr, u32 ul_num_bytes); - -/* - * ======== bridge_brd_stop ======== - * Purpose: - * Bring board to the BRD_STOPPED state. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device context. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL - * Ensures: - * 0: Board is in BRD_STOPPED (stop) state; - * Interrupts to the PC are disabled. - * else: Board state is indeterminate. - */ -typedef int(*fxn_brd_stop) (struct bridge_dev_context *dev_ctxt); - -/* - * ======== bridge_brd_status ======== - * Purpose: - * Report the current state of the board. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device context. - * board_state: Ptr to BRD status variable. - * Returns: - * 0: - * Requires: - * board_state != NULL; - * dev_ctxt != NULL - * Ensures: - * *board_state is one of - * {BRD_STOPPED, BRD_IDLE, BRD_RUNNING, BRD_UNKNOWN}; - */ -typedef int(*fxn_brd_status) (struct bridge_dev_context *dev_ctxt, - int *board_state); - -/* - * ======== bridge_brd_read ======== - * Purpose: - * Read a block of DSP memory, from a given memory space, into a host - * buffer. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * host_buf: Pointer to host buffer (Destination). - * dsp_addr: Address on DSP board (Source). - * ul_num_bytes: Number of bytes to transfer. - * mem_type: Memory space on DSP from which to transfer. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * host_buf != NULL. - * Ensures: - * Will not write more than ul_num_bytes bytes into host_buf. - */ -typedef int(*fxn_brd_read) (struct bridge_dev_context *dev_ctxt, - u8 *host_buf, - u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type); - -/* - * ======== bridge_brd_write ======== - * Purpose: - * Write a block of host memory into a DSP address, into a given memory - * space. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * dsp_addr: Address on DSP board (Destination). - * host_buf: Pointer to host buffer (Source). - * ul_num_bytes: Number of bytes to transfer. - * mem_type: Memory space on DSP to which to transfer. - * Returns: - * 0: Success. - * -ETIMEDOUT: Timeout occurred waiting for a response from hardware. - * -EPERM: Other, unspecified error. - * Requires: - * dev_ctxt != NULL; - * host_buf != NULL. - * Ensures: - */ -typedef int(*fxn_brd_write) (struct bridge_dev_context *dev_ctxt, - u8 *host_buf, - u32 dsp_addr, - u32 ul_num_bytes, u32 mem_type); - -/* - * ======== bridge_chnl_create ======== - * Purpose: - * Create a channel manager object, responsible for opening new channels - * and closing old ones for a given 'Bridge board. - * Parameters: - * channel_mgr: Location to store a channel manager object on output. - * hdev_obj: Handle to a device object. - * mgr_attrts: Channel manager attributes. - * mgr_attrts->max_channels: Max channels - * mgr_attrts->birq: Channel's I/O IRQ number. - * mgr_attrts->irq_shared: TRUE if the IRQ is shareable. - * mgr_attrts->word_size: DSP Word size in equivalent PC bytes.. - * mgr_attrts->shm_base: Base physical address of shared memory, if any. - * mgr_attrts->sm_length: Bytes of shared memory block. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EIO: Unable to plug ISR for given IRQ. - * -EFAULT: Couldn't map physical address to a virtual one. - * Requires: - * channel_mgr != NULL. - * mgr_attrts != NULL - * mgr_attrts field are all valid: - * 0 < max_channels <= CHNL_MAXCHANNELS. - * birq <= 15. - * word_size > 0. - * hdev_obj != NULL - * No channel manager exists for this board. - * Ensures: - */ -typedef int(*fxn_chnl_create) (struct chnl_mgr - **channel_mgr, - struct dev_object - * hdev_obj, - const struct - chnl_mgrattrs * mgr_attrts); - -/* - * ======== bridge_chnl_destroy ======== - * Purpose: - * Close all open channels, and destroy the channel manager. - * Parameters: - * hchnl_mgr: Channel manager object. - * Returns: - * 0: Success. - * -EFAULT: hchnl_mgr was invalid. - * Requires: - * Ensures: - * 0: Cancels I/O on each open channel. Closes each open channel. - * chnl_create may subsequently be called for the same device. - */ -typedef int(*fxn_chnl_destroy) (struct chnl_mgr *hchnl_mgr); -/* - * ======== bridge_deh_notify ======== - * Purpose: - * When notified of DSP error, take appropriate action. - * Parameters: - * hdeh_mgr: Handle to DEH manager object. - * evnt_mask: Indicate the type of exception - * error_info: Error information - * Returns: - * - * Requires: - * hdeh_mgr != NULL; - * evnt_mask with a valid exception - * Ensures: - */ -typedef void (*fxn_deh_notify) (struct deh_mgr *hdeh_mgr, - u32 evnt_mask, u32 error_info); - -/* - * ======== bridge_chnl_open ======== - * Purpose: - * Open a new half-duplex channel to the DSP board. - * Parameters: - * chnl: Location to store a channel object handle. - * hchnl_mgr: Handle to channel manager, as returned by - * CHNL_GetMgr(). - * chnl_mode: One of {CHNL_MODETODSP, CHNL_MODEFROMDSP} specifies - * direction of data transfer. - * ch_id: If CHNL_PICKFREE is specified, the channel manager will - * select a free channel id (default); - * otherwise this field specifies the id of the channel. - * pattrs: Channel attributes. Attribute fields are as follows: - * pattrs->uio_reqs: Specifies the maximum number of I/O requests which can - * be pending at any given time. All request packets are - * preallocated when the channel is opened. - * pattrs->event_obj: This field allows the user to supply an auto reset - * event object for channel I/O completion notifications. - * It is the responsibility of the user to destroy this - * object AFTER closing the channel. - * This channel event object can be retrieved using - * CHNL_GetEventHandle(). - * pattrs->hReserved: The kernel mode handle of this event object. - * - * Returns: - * 0: Success. - * -EFAULT: hchnl_mgr is invalid. - * -ENOMEM: Insufficient memory for requested resources. - * -EINVAL: Invalid number of IOReqs. - * -ENOSR: No free channels available. - * -ECHRNG: Channel ID is out of range. - * -EALREADY: Channel is in use. - * -EIO: No free IO request packets available for - * queuing. - * Requires: - * chnl != NULL. - * pattrs != NULL. - * pattrs->event_obj is a valid event handle. - * pattrs->hReserved is the kernel mode handle for pattrs->event_obj. - * Ensures: - * 0: *chnl is a valid channel. - * else: *chnl is set to NULL if (chnl != NULL); - */ -typedef int(*fxn_chnl_open) (struct chnl_object - **chnl, - struct chnl_mgr *hchnl_mgr, - s8 chnl_mode, - u32 ch_id, - const struct - chnl_attr * pattrs); - -/* - * ======== bridge_chnl_close ======== - * Purpose: - * Ensures all pending I/O on this channel is cancelled, discards all - * queued I/O completion notifications, then frees the resources allocated - * for this channel, and makes the corresponding logical channel id - * available for subsequent use. - * Parameters: - * chnl_obj: Handle to a channel object. - * Returns: - * 0: Success; - * -EFAULT: Invalid chnl_obj. - * Requires: - * No thread must be blocked on this channel's I/O completion event. - * Ensures: - * 0: chnl_obj is no longer valid. - */ -typedef int(*fxn_chnl_close) (struct chnl_object *chnl_obj); - -/* - * ======== bridge_chnl_add_io_req ======== - * Purpose: - * Enqueue an I/O request for data transfer on a channel to the DSP. - * The direction (mode) is specified in the channel object. Note the DSP - * address is specified for channels opened in direct I/O mode. - * Parameters: - * chnl_obj: Channel object handle. - * host_buf: Host buffer address source. - * byte_size: Number of PC bytes to transfer. A zero value indicates - * that this buffer is the last in the output channel. - * A zero value is invalid for an input channel. - *! buf_size: Actual buffer size in host bytes. - * dw_dsp_addr: DSP address for transfer. (Currently ignored). - * dw_arg: A user argument that travels with the buffer. - * Returns: - * 0: Success; - * -EFAULT: Invalid chnl_obj or host_buf. - * -EPERM: User cannot mark EOS on an input channel. - * -ECANCELED: I/O has been cancelled on this channel. No further - * I/O is allowed. - * -EPIPE: End of stream was already marked on a previous - * IORequest on this channel. No further I/O is expected. - * -EINVAL: Buffer submitted to this output channel is larger than - * the size of the physical shared memory output window. - * Requires: - * Ensures: - * 0: The buffer will be transferred if the channel is ready; - * otherwise, will be queued for transfer when the channel becomes - * ready. In any case, notifications of I/O completion are - * asynchronous. - * If byte_size is 0 for an output channel, subsequent CHNL_AddIOReq's - * on this channel will fail with error code -EPIPE. The - * corresponding IOC for this I/O request will have its status flag - * set to CHNL_IOCSTATEOS. - */ -typedef int(*fxn_chnl_addioreq) (struct chnl_object - * chnl_obj, - void *host_buf, - u32 byte_size, - u32 buf_size, - u32 dw_dsp_addr, u32 dw_arg); - -/* - * ======== bridge_chnl_get_ioc ======== - * Purpose: - * Dequeue an I/O completion record, which contains information about the - * completed I/O request. - * Parameters: - * chnl_obj: Channel object handle. - * timeout: A value of CHNL_IOCNOWAIT will simply dequeue the - * first available IOC. - * chan_ioc: On output, contains host buffer address, bytes - * transferred, and status of I/O completion. - * chan_ioc->status: See chnldefs.h. - * Returns: - * 0: Success. - * -EFAULT: Invalid chnl_obj or chan_ioc. - * -EREMOTEIO: CHNL_IOCNOWAIT was specified as the timeout parameter - * yet no I/O completions were queued. - * Requires: - * timeout == CHNL_IOCNOWAIT. - * Ensures: - * 0: if there are any remaining IOC's queued before this call - * returns, the channel event object will be left in a signalled - * state. - */ -typedef int(*fxn_chnl_getioc) (struct chnl_object *chnl_obj, - u32 timeout, - struct chnl_ioc *chan_ioc); - -/* - * ======== bridge_chnl_cancel_io ======== - * Purpose: - * Return all I/O requests to the client which have not yet been - * transferred. The channel's I/O completion object is - * signalled, and all the I/O requests are queued as IOC's, with the - * status field set to CHNL_IOCSTATCANCEL. - * This call is typically used in abort situations, and is a prelude to - * chnl_close(); - * Parameters: - * chnl_obj: Channel object handle. - * Returns: - * 0: Success; - * -EFAULT: Invalid chnl_obj. - * Requires: - * Ensures: - * Subsequent I/O requests to this channel will not be accepted. - */ -typedef int(*fxn_chnl_cancelio) (struct chnl_object *chnl_obj); - -/* - * ======== bridge_chnl_flush_io ======== - * Purpose: - * For an output stream (to the DSP), indicates if any IO requests are in - * the output request queue. For input streams (from the DSP), will - * cancel all pending IO requests. - * Parameters: - * chnl_obj: Channel object handle. - * timeout: Timeout value for flush operation. - * Returns: - * 0: Success; - * S_CHNLIOREQUEST: Returned if any IORequests are in the output queue. - * -EFAULT: Invalid chnl_obj. - * Requires: - * Ensures: - * 0: No I/O requests will be pending on this channel. - */ -typedef int(*fxn_chnl_flushio) (struct chnl_object *chnl_obj, - u32 timeout); - -/* - * ======== bridge_chnl_get_info ======== - * Purpose: - * Retrieve information related to a channel. - * Parameters: - * chnl_obj: Handle to a valid channel object, or NULL. - * channel_info: Location to store channel info. - * Returns: - * 0: Success; - * -EFAULT: Invalid chnl_obj or channel_info. - * Requires: - * Ensures: - * 0: channel_info points to a filled in chnl_info struct, - * if (channel_info != NULL). - */ -typedef int(*fxn_chnl_getinfo) (struct chnl_object *chnl_obj, - struct chnl_info *channel_info); - -/* - * ======== bridge_chnl_get_mgr_info ======== - * Purpose: - * Retrieve information related to the channel manager. - * Parameters: - * hchnl_mgr: Handle to a valid channel manager, or NULL. - * ch_id: Channel ID. - * mgr_info: Location to store channel manager info. - * Returns: - * 0: Success; - * -EFAULT: Invalid hchnl_mgr or mgr_info. - * -ECHRNG: Invalid channel ID. - * Requires: - * Ensures: - * 0: mgr_info points to a filled in chnl_mgrinfo - * struct, if (mgr_info != NULL). - */ -typedef int(*fxn_chnl_getmgrinfo) (struct chnl_mgr - * hchnl_mgr, - u32 ch_id, - struct chnl_mgrinfo *mgr_info); - -/* - * ======== bridge_chnl_idle ======== - * Purpose: - * Idle a channel. If this is an input channel, or if this is an output - * channel and flush_data is TRUE, all currently enqueued buffers will be - * dequeued (data discarded for output channel). - * If this is an output channel and flush_data is FALSE, this function - * will block until all currently buffered data is output, or the timeout - * specified has been reached. - * - * Parameters: - * chnl_obj: Channel object handle. - * timeout: If output channel and flush_data is FALSE, timeout value - * to wait for buffers to be output. (Not used for - * input channel). - * flush_data: If output channel and flush_data is TRUE, discard any - * currently buffered data. If FALSE, wait for currently - * buffered data to be output, or timeout, whichever - * occurs first. flush_data is ignored for input channel. - * Returns: - * 0: Success; - * -EFAULT: Invalid chnl_obj. - * -ETIMEDOUT: Timeout occurred before channel could be idled. - * Requires: - * Ensures: - */ -typedef int(*fxn_chnl_idle) (struct chnl_object *chnl_obj, - u32 timeout, bool flush_data); - -/* - * ======== bridge_chnl_register_notify ======== - * Purpose: - * Register for notification of events on a channel. - * Parameters: - * chnl_obj: Channel object handle. - * event_mask: Type of events to be notified about: IO completion - * (DSP_STREAMIOCOMPLETION) or end of stream - * (DSP_STREAMDONE). - * notify_type: DSP_SIGNALEVENT. - * hnotification: Handle of a dsp_notification object. - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory. - * -EINVAL: event_mask is 0 and hnotification was not - * previously registered. - * -EFAULT: NULL hnotification, hnotification event name - * too long, or hnotification event name NULL. - * Requires: - * Valid chnl_obj. - * hnotification != NULL. - * (event_mask & ~(DSP_STREAMIOCOMPLETION | DSP_STREAMDONE)) == 0. - * notify_type == DSP_SIGNALEVENT. - * Ensures: - */ -typedef int(*fxn_chnl_registernotify) - (struct chnl_object *chnl_obj, - u32 event_mask, u32 notify_type, struct dsp_notification *hnotification); - -/* - * ======== bridge_dev_create ======== - * Purpose: - * Complete creation of the device object for this board. - * Parameters: - * device_ctx: Ptr to location to store a Bridge device context. - * hdev_obj: Handle to a Device Object, created and managed by DSP API. - * config_param: Ptr to configuration parameters provided by the - * Configuration Manager during device loading. - * pDspConfig: DSP resources, as specified in the registry key for this - * device. - * Returns: - * 0: Success. - * -ENOMEM: Unable to allocate memory for device context. - * Requires: - * device_ctx != NULL; - * hdev_obj != NULL; - * config_param != NULL; - * pDspConfig != NULL; - * Fields in config_param and pDspConfig contain valid values. - * Ensures: - * 0: All Bridge driver specific DSP resource and other - * board context has been allocated. - * -ENOMEM: Bridge failed to allocate resources. - * Any acquired resources have been freed. The DSP API - * will not call bridge_dev_destroy() if - * bridge_dev_create() fails. - * Details: - * Called during the CONFIGMG's Device_Init phase. Based on host and - * DSP configuration information, create a board context, a handle to - * which is passed into other Bridge BRD and CHNL functions. The - * board context contains state information for the device. Since the - * addresses of all pointer parameters may be invalid when this - * function returns, they must not be stored into the device context - * structure. - */ -typedef int(*fxn_dev_create) (struct bridge_dev_context - **device_ctx, - struct dev_object - * hdev_obj, - struct cfg_hostres - * config_param); - -/* - * ======== bridge_dev_ctrl ======== - * Purpose: - * Bridge driver specific interface. - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device info. - * dw_cmd: Bridge driver defined command code. - * pargs: Pointer to an arbitrary argument structure. - * Returns: - * 0 or -EPERM. Actual command error codes should be passed back in - * the pargs structure, and are defined by the Bridge driver implementor. - * Requires: - * All calls are currently assumed to be synchronous. There are no - * IOCTL completion routines provided. - * Ensures: - */ -typedef int(*fxn_dev_ctrl) (struct bridge_dev_context *dev_ctxt, - u32 dw_cmd, void *pargs); - -/* - * ======== bridge_dev_destroy ======== - * Purpose: - * Deallocate Bridge device extension structures and all other resources - * acquired by the Bridge driver. - * No calls to other Bridge driver functions may subsequently - * occur, except for bridge_dev_create(). - * Parameters: - * dev_ctxt: Handle to Bridge driver defined device information. - * Returns: - * 0: Success. - * -EPERM: Failed to release a resource previously acquired. - * Requires: - * dev_ctxt != NULL; - * Ensures: - * 0: Device context is freed. - */ -typedef int(*fxn_dev_destroy) (struct bridge_dev_context *dev_ctxt); - -/* - * ======== bridge_io_create ======== - * Purpose: - * Create an object that manages I/O between CHNL and msg_ctrl. - * Parameters: - * io_man: Location to store IO manager on output. - * hchnl_mgr: Handle to channel manager. - * hmsg_mgr: Handle to message manager. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failure. - * -EPERM: Creation failed. - * Requires: - * hdev_obj != NULL; - * Channel manager already created; - * Message manager already created; - * mgr_attrts != NULL; - * io_man != NULL; - * Ensures: - */ -typedef int(*fxn_io_create) (struct io_mgr **io_man, - struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts); - -/* - * ======== bridge_io_destroy ======== - * Purpose: - * Destroy object created in bridge_io_create. - * Parameters: - * hio_mgr: IO Manager. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failure. - * -EPERM: Creation failed. - * Requires: - * Valid hio_mgr; - * Ensures: - */ -typedef int(*fxn_io_destroy) (struct io_mgr *hio_mgr); - -/* - * ======== bridge_io_on_loaded ======== - * Purpose: - * Called whenever a program is loaded to update internal data. For - * example, if shared memory is used, this function would update the - * shared memory location and address. - * Parameters: - * hio_mgr: IO Manager. - * Returns: - * 0: Success. - * -EPERM: Internal failure occurred. - * Requires: - * Valid hio_mgr; - * Ensures: - */ -typedef int(*fxn_io_onloaded) (struct io_mgr *hio_mgr); - -/* - * ======== fxn_io_getprocload ======== - * Purpose: - * Called to get the Processor's current and predicted load - * Parameters: - * hio_mgr: IO Manager. - * proc_load_stat Processor Load statistics - * Returns: - * 0: Success. - * -EPERM: Internal failure occurred. - * Requires: - * Valid hio_mgr; - * Ensures: - */ -typedef int(*fxn_io_getprocload) (struct io_mgr *hio_mgr, - struct dsp_procloadstat * - proc_load_stat); - -/* - * ======== bridge_msg_create ======== - * Purpose: - * Create an object to manage message queues. Only one of these objects - * can exist per device object. - * Parameters: - * msg_man: Location to store msg_ctrl manager on output. - * hdev_obj: Handle to a device object. - * msg_callback: Called whenever an RMS_EXIT message is received. - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory. - * Requires: - * msg_man != NULL. - * msg_callback != NULL. - * hdev_obj != NULL. - * Ensures: - */ -typedef int(*fxn_msg_create) - (struct msg_mgr **msg_man, - struct dev_object *hdev_obj, msg_onexit msg_callback); - -/* - * ======== bridge_msg_create_queue ======== - * Purpose: - * Create a msg_ctrl queue for sending or receiving messages from a Message - * node on the DSP. - * Parameters: - * hmsg_mgr: msg_ctrl queue manager handle returned from - * bridge_msg_create. - * msgq: Location to store msg_ctrl queue on output. - * msgq_id: Identifier for messages (node environment pointer). - * max_msgs: Max number of simultaneous messages for the node. - * h: Handle passed to hmsg_mgr->msg_callback(). - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory. - * Requires: - * msgq != NULL. - * h != NULL. - * max_msgs > 0. - * Ensures: - * msgq !=NULL <==> 0. - */ -typedef int(*fxn_msg_createqueue) - (struct msg_mgr *hmsg_mgr, - struct msg_queue **msgq, u32 msgq_id, u32 max_msgs, void *h); - -/* - * ======== bridge_msg_delete ======== - * Purpose: - * Delete a msg_ctrl manager allocated in bridge_msg_create(). - * Parameters: - * hmsg_mgr: Handle returned from bridge_msg_create(). - * Returns: - * Requires: - * Valid hmsg_mgr. - * Ensures: - */ -typedef void (*fxn_msg_delete) (struct msg_mgr *hmsg_mgr); - -/* - * ======== bridge_msg_delete_queue ======== - * Purpose: - * Delete a msg_ctrl queue allocated in bridge_msg_create_queue. - * Parameters: - * msg_queue_obj: Handle to msg_ctrl queue returned from - * bridge_msg_create_queue. - * Returns: - * Requires: - * Valid msg_queue_obj. - * Ensures: - */ -typedef void (*fxn_msg_deletequeue) (struct msg_queue *msg_queue_obj); - -/* - * ======== bridge_msg_get ======== - * Purpose: - * Get a message from a msg_ctrl queue. - * Parameters: - * msg_queue_obj: Handle to msg_ctrl queue returned from - * bridge_msg_create_queue. - * pmsg: Location to copy message into. - * utimeout: Timeout to wait for a message. - * Returns: - * 0: Success. - * -ETIME: Timeout occurred. - * -EPERM: No frames available for message (max_msgs too - * small). - * Requires: - * Valid msg_queue_obj. - * pmsg != NULL. - * Ensures: - */ -typedef int(*fxn_msg_get) (struct msg_queue *msg_queue_obj, - struct dsp_msg *pmsg, u32 utimeout); - -/* - * ======== bridge_msg_put ======== - * Purpose: - * Put a message onto a msg_ctrl queue. - * Parameters: - * msg_queue_obj: Handle to msg_ctrl queue returned from - * bridge_msg_create_queue. - * pmsg: Pointer to message. - * utimeout: Timeout to wait for a message. - * Returns: - * 0: Success. - * -ETIME: Timeout occurred. - * -EPERM: No frames available for message (max_msgs too - * small). - * Requires: - * Valid msg_queue_obj. - * pmsg != NULL. - * Ensures: - */ -typedef int(*fxn_msg_put) (struct msg_queue *msg_queue_obj, - const struct dsp_msg *pmsg, u32 utimeout); - -/* - * ======== bridge_msg_register_notify ======== - * Purpose: - * Register notification for when a message is ready. - * Parameters: - * msg_queue_obj: Handle to msg_ctrl queue returned from - * bridge_msg_create_queue. - * event_mask: Type of events to be notified about: Must be - * DSP_NODEMESSAGEREADY, or 0 to unregister. - * notify_type: DSP_SIGNALEVENT. - * hnotification: Handle of notification object. - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory. - * Requires: - * Valid msg_queue_obj. - * hnotification != NULL. - * notify_type == DSP_SIGNALEVENT. - * event_mask == DSP_NODEMESSAGEREADY || event_mask == 0. - * Ensures: - */ -typedef int(*fxn_msg_registernotify) - (struct msg_queue *msg_queue_obj, - u32 event_mask, u32 notify_type, struct dsp_notification *hnotification); - -/* - * ======== bridge_msg_set_queue_id ======== - * Purpose: - * Set message queue id to node environment. Allows bridge_msg_create_queue - * to be called in node_allocate, before the node environment is known. - * Parameters: - * msg_queue_obj: Handle to msg_ctrl queue returned from - * bridge_msg_create_queue. - * msgq_id: Node environment pointer. - * Returns: - * Requires: - * Valid msg_queue_obj. - * msgq_id != 0. - * Ensures: - */ -typedef void (*fxn_msg_setqueueid) (struct msg_queue *msg_queue_obj, - u32 msgq_id); - -/* - * Bridge Driver interface function table. - * - * The information in this table is filled in by the specific Bridge driver, - * and copied into the DSP API's own space. If any interface - * function field is set to a value of NULL, then the DSP API will - * consider that function not implemented, and return the error code - * -ENOSYS when a Bridge driver client attempts to call that function. - * - * This function table contains DSP API version numbers, which are used by the - * Bridge driver loader to help ensure backwards compatility between older - * Bridge drivers and newer DSP API. These must be set to - * BRD_API_MAJOR_VERSION and BRD_API_MINOR_VERSION, respectively. - * - * A Bridge driver need not export a CHNL interface. In this case, *all* of - * the bridge_chnl_* entries must be set to NULL. - */ -struct bridge_drv_interface { - u32 brd_api_major_version; /* Set to BRD_API_MAJOR_VERSION. */ - u32 brd_api_minor_version; /* Set to BRD_API_MINOR_VERSION. */ - fxn_dev_create dev_create; /* Create device context */ - fxn_dev_destroy dev_destroy; /* Destroy device context */ - fxn_dev_ctrl dev_cntrl; /* Optional vendor interface */ - fxn_brd_monitor brd_monitor; /* Load and/or start monitor */ - fxn_brd_start brd_start; /* Start DSP program. */ - fxn_brd_stop brd_stop; /* Stop/reset board. */ - fxn_brd_status brd_status; /* Get current board status. */ - fxn_brd_read brd_read; /* Read board memory */ - fxn_brd_write brd_write; /* Write board memory. */ - fxn_brd_setstate brd_set_state; /* Sets the Board State */ - fxn_brd_memcopy brd_mem_copy; /* Copies DSP Memory */ - fxn_brd_memwrite brd_mem_write; /* Write DSP Memory w/o halt */ - fxn_brd_memmap brd_mem_map; /* Maps MPU mem to DSP mem */ - fxn_brd_memunmap brd_mem_un_map; /* Unmaps MPU mem to DSP mem */ - fxn_chnl_create chnl_create; /* Create channel manager. */ - fxn_chnl_destroy chnl_destroy; /* Destroy channel manager. */ - fxn_chnl_open chnl_open; /* Create a new channel. */ - fxn_chnl_close chnl_close; /* Close a channel. */ - fxn_chnl_addioreq chnl_add_io_req; /* Req I/O on a channel. */ - fxn_chnl_getioc chnl_get_ioc; /* Wait for I/O completion. */ - fxn_chnl_cancelio chnl_cancel_io; /* Cancl I/O on a channel. */ - fxn_chnl_flushio chnl_flush_io; /* Flush I/O. */ - fxn_chnl_getinfo chnl_get_info; /* Get channel specific info */ - /* Get channel manager info. */ - fxn_chnl_getmgrinfo chnl_get_mgr_info; - fxn_chnl_idle chnl_idle; /* Idle the channel */ - /* Register for notif. */ - fxn_chnl_registernotify chnl_register_notify; - fxn_io_create io_create; /* Create IO manager */ - fxn_io_destroy io_destroy; /* Destroy IO manager */ - fxn_io_onloaded io_on_loaded; /* Notify of program loaded */ - /* Get Processor's current and predicted load */ - fxn_io_getprocload io_get_proc_load; - fxn_msg_create msg_create; /* Create message manager */ - /* Create message queue */ - fxn_msg_createqueue msg_create_queue; - fxn_msg_delete msg_delete; /* Delete message manager */ - /* Delete message queue */ - fxn_msg_deletequeue msg_delete_queue; - fxn_msg_get msg_get; /* Get a message */ - fxn_msg_put msg_put; /* Send a message */ - /* Register for notif. */ - fxn_msg_registernotify msg_register_notify; - /* Set message queue id */ - fxn_msg_setqueueid msg_set_queue_id; -}; - -/* - * ======== bridge_drv_entry ======== - * Purpose: - * Registers Bridge driver functions with the DSP API. Called only once - * by the DSP API. The caller will first check DSP API version - * compatibility, and then copy the interface functions into its own - * memory space. - * Parameters: - * drv_intf Pointer to a location to receive a pointer to the - * Bridge driver interface. - * Returns: - * Requires: - * The code segment this function resides in must expect to be discarded - * after completion. - * Ensures: - * drv_intf pointer initialized to Bridge driver's function - * interface. No system resources are acquired by this function. - * Details: - * Called during the Device_Init phase. - */ -void bridge_drv_entry(struct bridge_drv_interface **drv_intf, - const char *driver_file_name); - -#endif /* DSPDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdeh.h b/drivers/staging/tidspbridge/include/dspbridge/dspdeh.h deleted file mode 100644 index d258ab6a41d1..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspdeh.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * dspdeh.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Defines upper edge DEH functions required by all Bridge driver/DSP API - * interface tables. - * - * Notes: - * Function comment headers reside with the function typedefs in dspdefs.h. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * Copyright (C) 2010 Felipe Contreras - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPDEH_ -#define DSPDEH_ - -struct deh_mgr; -struct dev_object; -struct dsp_notification; - -int bridge_deh_create(struct deh_mgr **ret_deh, - struct dev_object *hdev_obj); - -int bridge_deh_destroy(struct deh_mgr *deh); - -int bridge_deh_register_notify(struct deh_mgr *deh, - u32 event_mask, - u32 notify_type, - struct dsp_notification *hnotification); - -void bridge_deh_notify(struct deh_mgr *deh, int event, int info); - -#endif /* DSPDEH_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h b/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h deleted file mode 100644 index 7adf1e705314..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * dspdrv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This is the Stream Interface for the DSp API. - * All Device operations are performed via DeviceIOControl. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#if !defined _DSPDRV_H_ -#define _DSPDRV_H_ - -/* - * ======== dsp_deinit ======== - * Purpose: - * This function is called by Device Manager to de-initialize a device. - * This function is not called by applications. - * Parameters: - * device_context:Handle to the device context. The XXX_Init function - * creates and returns this identifier. - * Returns: - * TRUE indicates the device successfully de-initialized. Otherwise it - * returns FALSE. - * Requires: - * device_context!= NULL. For a built in device this should never - * get called. - * Ensures: - */ -extern bool dsp_deinit(u32 device_context); - -/* - * ======== dsp_init ======== - * Purpose: - * This function is called by Device Manager to initialize a device. - * This function is not called by applications - * Parameters: - * dw_context: Specifies a pointer to a string containing the registry - * path to the active key for the stream interface driver. - * HKEY_LOCAL_MACHINE\Drivers\Active - * Returns: - * Returns a handle to the device context created. This is the our actual - * Device Object representing the DSP Device instance. - * Requires: - * Ensures: - * Succeeded: device context > 0 - * Failed: device Context = 0 - */ -extern u32 dsp_init(u32 *init_status); - -#endif diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspio.h b/drivers/staging/tidspbridge/include/dspbridge/dspio.h deleted file mode 100644 index 66b64fadf197..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspio.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * dspio.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Declares the upper edge IO functions required by all Bridge driver /DSP API - * interface tables. - * - * Notes: - * Function comment headers reside in dspdefs.h. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPIO_ -#define DSPIO_ - -#include -#include - - -extern int bridge_io_create(struct io_mgr **io_man, - struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts); - -extern int bridge_io_destroy(struct io_mgr *hio_mgr); - -extern int bridge_io_on_loaded(struct io_mgr *hio_mgr); - -extern int bridge_io_get_proc_load(struct io_mgr *hio_mgr, - struct dsp_procloadstat *proc_lstat); - -#endif /* DSPIO_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h b/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h deleted file mode 100644 index 0fcda1978921..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * dspioctl.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Bridge driver BRD_IOCtl reserved command definitions. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPIOCTL_ -#define DSPIOCTL_ - -/* ------------------------------------ Hardware Abstraction Layer */ -#include -#include - -/* - * Any IOCTLS at or above this value are reserved for standard Bridge driver - * interfaces. - */ -#define BRDIOCTL_RESERVEDBASE 0x8000 - -#define BRDIOCTL_CHNLREAD (BRDIOCTL_RESERVEDBASE + 0x10) -#define BRDIOCTL_CHNLWRITE (BRDIOCTL_RESERVEDBASE + 0x20) -/* DMMU */ -#define BRDIOCTL_SETMMUCONFIG (BRDIOCTL_RESERVEDBASE + 0x60) -/* PWR */ -#define BRDIOCTL_PWRCONTROL (BRDIOCTL_RESERVEDBASE + 0x70) - -/* attention, modifiers: - * Some of these control enumerations are made visible to user for power - * control, so any changes to this list, should also be updated in the user - * header file 'dbdefs.h' ***/ -/* These ioctls are reserved for PWR power commands for the DSP */ -#define BRDIOCTL_DEEPSLEEP (BRDIOCTL_PWRCONTROL + 0x0) -#define BRDIOCTL_EMERGENCYSLEEP (BRDIOCTL_PWRCONTROL + 0x1) -#define BRDIOCTL_WAKEUP (BRDIOCTL_PWRCONTROL + 0x2) -#define BRDIOCTL_CLK_CTRL (BRDIOCTL_PWRCONTROL + 0x7) -/* DSP Initiated Hibernate */ -#define BRDIOCTL_PWR_HIBERNATE (BRDIOCTL_PWRCONTROL + 0x8) -#define BRDIOCTL_PRESCALE_NOTIFY (BRDIOCTL_PWRCONTROL + 0x9) -#define BRDIOCTL_POSTSCALE_NOTIFY (BRDIOCTL_PWRCONTROL + 0xA) -#define BRDIOCTL_CONSTRAINT_REQUEST (BRDIOCTL_PWRCONTROL + 0xB) - -/* Number of actual DSP-MMU TLB entries */ -#define BRDIOCTL_NUMOFMMUTLB 32 - -struct bridge_ioctl_extproc { - u32 dsp_va; /* DSP virtual address */ - u32 gpp_pa; /* GPP physical address */ - /* GPP virtual address. __va does not work for ioremapped addresses */ - u32 gpp_va; - u32 size; /* Size of the mapped memory in bytes */ - enum hw_endianism_t endianism; - enum hw_mmu_mixed_size_t mixed_mode; - enum hw_element_size_t elem_size; -}; - -#endif /* DSPIOCTL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspmsg.h b/drivers/staging/tidspbridge/include/dspbridge/dspmsg.h deleted file mode 100644 index d4bd458bc8be..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dspmsg.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * dspmsg.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Declares the upper edge message class library functions required by - * all Bridge driver / DSP API interface tables. These functions are - * implemented by every class of Bridge driver channel library. - * - * Notes: - * Function comment headers reside in dspdefs.h. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef DSPMSG_ -#define DSPMSG_ - -#include - -extern int bridge_msg_create(struct msg_mgr **msg_man, - struct dev_object *hdev_obj, - msg_onexit msg_callback); - -extern int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - struct msg_queue **msgq, - u32 msgq_id, u32 max_msgs, void *arg); - -extern void bridge_msg_delete(struct msg_mgr *hmsg_mgr); - -extern void bridge_msg_delete_queue(struct msg_queue *msg_queue_obj); - -extern int bridge_msg_get(struct msg_queue *msg_queue_obj, - struct dsp_msg *pmsg, u32 utimeout); - -extern int bridge_msg_put(struct msg_queue *msg_queue_obj, - const struct dsp_msg *pmsg, u32 utimeout); - -extern int bridge_msg_register_notify(struct msg_queue *msg_queue_obj, - u32 event_mask, - u32 notify_type, - struct dsp_notification - *hnotification); - -extern void bridge_msg_set_queue_id(struct msg_queue *msg_queue_obj, - u32 msgq_id); - -#endif /* DSPMSG_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h b/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h deleted file mode 100644 index 052d27ee8b1a..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h +++ /dev/null @@ -1,490 +0,0 @@ -/* - * dynamic_loader.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _DYNAMIC_LOADER_H_ -#define _DYNAMIC_LOADER_H_ -#include -#include - -/* - * Dynamic Loader - * - * The function of the dynamic loader is to load a "module" containing - * instructions for a "target" processor into that processor. In the process - * it assigns memory for the module, resolves symbol references made by the - * module, and remembers symbols defined by the module. - * - * The dynamic loader is parameterized for a particular system by 4 classes - * that supply the module and system specific functions it requires - */ - /* The read functions for the module image to be loaded */ -struct dynamic_loader_stream; - - /* This class defines "host" symbol and support functions */ -struct dynamic_loader_sym; - - /* This class defines the allocator for "target" memory */ -struct dynamic_loader_allocate; - - /* This class defines the copy-into-target-memory functions */ -struct dynamic_loader_initialize; - -/* - * Option flags to modify the behavior of module loading - */ -#define DLOAD_INITBSS 0x1 /* initialize BSS sections to zero */ - -/***************************************************************************** - * Procedure dynamic_load_module - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * init Target-side memory initialization, or NULL for symbol read only - * options Option flags DLOAD_* - * mhandle A module handle for use with Dynamic_Unload - * - * Effect: - * The module image is read using *module. Target storage for the new image is - * obtained from *alloc. Symbols defined and referenced by the module are - * managed using *syms. The image is then relocated and references resolved - * as necessary, and the resulting executable bits are placed into target memory - * using *init. - * - * Returns: - * On a successful load, a module handle is placed in *mhandle, and zero is - * returned. On error, the number of errors detected is returned. Individual - * errors are reported during the load process using syms->error_report(). - **************************************************************************** */ -extern int dynamic_load_module( - /* the source for the module image */ - struct dynamic_loader_stream *module, - /* host support for symbols and storage */ - struct dynamic_loader_sym *syms, - /* the target memory allocator */ - struct dynamic_loader_allocate *alloc, - /* the target memory initializer */ - struct dynamic_loader_initialize *init, - unsigned options, /* option flags */ - /* the returned module handle */ - void **mhandle); - -/***************************************************************************** - * Procedure dynamic_open_module - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * init Target-side memory initialization, or NULL for symbol read only - * options Option flags DLOAD_* - * mhandle A module handle for use with Dynamic_Unload - * - * Effect: - * The module image is read using *module. Target storage for the new image is - * obtained from *alloc. Symbols defined and referenced by the module are - * managed using *syms. The image is then relocated and references resolved - * as necessary, and the resulting executable bits are placed into target memory - * using *init. - * - * Returns: - * On a successful load, a module handle is placed in *mhandle, and zero is - * returned. On error, the number of errors detected is returned. Individual - * errors are reported during the load process using syms->error_report(). - **************************************************************************** */ -extern int dynamic_open_module( - /* the source for the module image */ - struct dynamic_loader_stream *module, - /* host support for symbols and storage */ - struct dynamic_loader_sym *syms, - /* the target memory allocator */ - struct dynamic_loader_allocate *alloc, - /* the target memory initializer */ - struct dynamic_loader_initialize *init, - unsigned options, /* option flags */ - /* the returned module handle */ - void **mhandle); - -/***************************************************************************** - * Procedure dynamic_unload_module - * - * Parameters: - * mhandle A module handle from dynamic_load_module - * syms Host-side symbol table and malloc/free functions - * alloc Target-side memory allocation - * - * Effect: - * The module specified by mhandle is unloaded. Unloading causes all - * target memory to be deallocated, all symbols defined by the module to - * be purged, and any host-side storage used by the dynamic loader for - * this module to be released. - * - * Returns: - * Zero for success. On error, the number of errors detected is returned. - * Individual errors are reported using syms->error_report(). - **************************************************************************** */ -extern int dynamic_unload_module(void *mhandle, /* the module - * handle */ - /* host support for symbols and - * storage */ - struct dynamic_loader_sym *syms, - /* the target memory allocator */ - struct dynamic_loader_allocate *alloc, - /* the target memory initializer */ - struct dynamic_loader_initialize *init); - -/***************************************************************************** - ***************************************************************************** - * A class used by the dynamic loader for input of the module image - ***************************************************************************** - **************************************************************************** */ -struct dynamic_loader_stream { -/* public: */ - /************************************************************************* - * read_buffer - * - * PARAMETERS : - * buffer Pointer to the buffer to fill - * bufsiz Amount of data desired in sizeof() units - * - * EFFECT : - * Reads the specified amount of data from the module input stream - * into the specified buffer. Returns the amount of data read in sizeof() - * units (which if less than the specification, represents an error). - * - * NOTES: - * In release 1 increments the file position by the number of bytes read - * - ************************************************************************ */ - int (*read_buffer) (struct dynamic_loader_stream *thisptr, - void *buffer, unsigned bufsiz); - - /************************************************************************* - * set_file_posn (release 1 only) - * - * PARAMETERS : - * posn Desired file position relative to start of file in sizeof() units. - * - * EFFECT : - * Adjusts the internal state of the stream object so that the next - * read_buffer call will begin to read at the specified offset from - * the beginning of the input module. Returns 0 for success, non-zero - * for failure. - * - ************************************************************************ */ - int (*set_file_posn) (struct dynamic_loader_stream *thisptr, - /* to be eliminated in release 2 */ - unsigned int posn); - -}; - -/***************************************************************************** - ***************************************************************************** - * A class used by the dynamic loader for symbol table support and - * miscellaneous host-side functions - ***************************************************************************** - **************************************************************************** */ - -typedef u32 ldr_addr; - -/* - * the structure of a symbol known to the dynamic loader - */ -struct dynload_symbol { - ldr_addr value; -}; - -struct dynamic_loader_sym { -/* public: */ - /************************************************************************* - * find_matching_symbol - * - * PARAMETERS : - * name The name of the desired symbol - * - * EFFECT : - * Locates a symbol matching the name specified. A pointer to the - * symbol is returned if it exists; 0 is returned if no such symbol is - * found. - * - ************************************************************************ */ - struct dynload_symbol *(*find_matching_symbol) - (struct dynamic_loader_sym *thisptr, const char *name); - - /************************************************************************* - * add_to_symbol_table - * - * PARAMETERS : - * nname Pointer to the name of the new symbol - * moduleid An opaque module id assigned by the dynamic loader - * - * EFFECT : - * The new symbol is added to the table. A pointer to the symbol is - * returned, or NULL is returned for failure. - * - * NOTES: - * It is permissible for this function to return NULL; the effect is that - * the named symbol will not be available to resolve references in - * subsequent loads. Returning NULL will not cause the current load - * to fail. - ************************************************************************ */ - struct dynload_symbol *(*add_to_symbol_table) - (struct dynamic_loader_sym * - thisptr, const char *nname, unsigned moduleid); - - /************************************************************************* - * purge_symbol_table - * - * PARAMETERS : - * moduleid An opaque module id assigned by the dynamic loader - * - * EFFECT : - * Each symbol in the symbol table whose moduleid matches the argument - * is removed from the table. - ************************************************************************ */ - void (*purge_symbol_table) (struct dynamic_loader_sym *thisptr, - unsigned moduleid); - - /************************************************************************* - * dload_allocate - * - * PARAMETERS : - * memsiz size of desired memory in sizeof() units - * - * EFFECT : - * Returns a pointer to some "host" memory for use by the dynamic - * loader, or NULL for failure. - * This function is serves as a replaceable form of "malloc" to - * allow the user to configure the memory usage of the dynamic loader. - ************************************************************************ */ - void *(*dload_allocate) (struct dynamic_loader_sym *thisptr, - unsigned memsiz); - - /************************************************************************* - * dload_deallocate - * - * PARAMETERS : - * memptr pointer to previously allocated memory - * - * EFFECT : - * Releases the previously allocated "host" memory. - ************************************************************************ */ - void (*dload_deallocate) (struct dynamic_loader_sym *thisptr, - void *memptr); - - /************************************************************************* - * error_report - * - * PARAMETERS : - * errstr pointer to an error string - * args additional arguments - * - * EFFECT : - * This function provides an error reporting interface for the dynamic - * loader. The error string and arguments are designed as for the - * library function vprintf. - ************************************************************************ */ - void (*error_report) (struct dynamic_loader_sym *thisptr, - const char *errstr, va_list args); - -}; /* class dynamic_loader_sym */ - -/***************************************************************************** - ***************************************************************************** - * A class used by the dynamic loader to allocate and deallocate target memory. - ***************************************************************************** - **************************************************************************** */ - -struct ldr_section_info { - /* Name of the memory section assigned at build time */ - const char *name; - ldr_addr run_addr; /* execution address of the section */ - ldr_addr load_addr; /* load address of the section */ - ldr_addr size; /* size of the section in addressable units */ -#ifndef _BIG_ENDIAN - u16 page; /* memory page or view */ - u16 type; /* one of the section types below */ -#else - u16 type; /* one of the section types below */ - u16 page; /* memory page or view */ -#endif - /* a context field for use by dynamic_loader_allocate; - * ignored but maintained by the dynamic loader */ - u32 context; -}; - -/* use this macro to extract type of section from ldr_section_info.type field */ -#define DLOAD_SECTION_TYPE(typeinfo) (typeinfo & 0xF) - -/* type of section to be allocated */ -#define DLOAD_TEXT 0 -#define DLOAD_DATA 1 -#define DLOAD_BSS 2 - /* internal use only, run-time cinit will be of type DLOAD_DATA */ -#define DLOAD_CINIT 3 - -struct dynamic_loader_allocate { -/* public: */ - - /************************************************************************* - * Function allocate - * - * Parameters: - * info A pointer to an information block for the section - * align The alignment of the storage in target AUs - * - * Effect: - * Allocates target memory for the specified section and fills in the - * load_addr and run_addr fields of the section info structure. Returns TRUE - * for success, FALSE for failure. - * - * Notes: - * Frequently load_addr and run_addr are the same, but if they are not - * load_addr is used with dynamic_loader_initialize, and run_addr is - * used for almost all relocations. This function should always initialize - * both fields. - ************************************************************************ */ - int (*dload_allocate) (struct dynamic_loader_allocate *thisptr, - struct ldr_section_info *info, unsigned align); - - /************************************************************************* - * Function deallocate - * - * Parameters: - * info A pointer to an information block for the section - * - * Effect: - * Releases the target memory previously allocated. - * - * Notes: - * The content of the info->name field is undefined on call to this function. - ************************************************************************ */ - void (*dload_deallocate) (struct dynamic_loader_allocate *thisptr, - struct ldr_section_info *info); - -}; /* class dynamic_loader_allocate */ - -/***************************************************************************** - ***************************************************************************** - * A class used by the dynamic loader to load data into a target. This class - * provides the interface-specific functions needed to load data. - ***************************************************************************** - **************************************************************************** */ - -struct dynamic_loader_initialize { -/* public: */ - /************************************************************************* - * Function connect - * - * Parameters: - * none - * - * Effect: - * Connect to the initialization interface. Returns TRUE for success, - * FALSE for failure. - * - * Notes: - * This function is called prior to use of any other functions in - * this interface. - ************************************************************************ */ - int (*connect) (struct dynamic_loader_initialize *thisptr); - - /************************************************************************* - * Function readmem - * - * Parameters: - * bufr Pointer to a word-aligned buffer for the result - * locn Target address of first data element - * info Section info for the section in which the address resides - * bytsiz Size of the data to be read in sizeof() units - * - * Effect: - * Fills the specified buffer with data from the target. Returns TRUE for - * success, FALSE for failure. - ************************************************************************ */ - int (*readmem) (struct dynamic_loader_initialize *thisptr, - void *bufr, - ldr_addr locn, - struct ldr_section_info *info, unsigned bytsiz); - - /************************************************************************* - * Function writemem - * - * Parameters: - * bufr Pointer to a word-aligned buffer of data - * locn Target address of first data element to be written - * info Section info for the section in which the address resides - * bytsiz Size of the data to be written in sizeof() units - * - * Effect: - * Writes the specified buffer to the target. Returns TRUE for success, - * FALSE for failure. - ************************************************************************ */ - int (*writemem) (struct dynamic_loader_initialize *thisptr, - void *bufr, - ldr_addr locn, - struct ldr_section_info *info, unsigned bytsiz); - - /************************************************************************* - * Function fillmem - * - * Parameters: - * locn Target address of first data element to be written - * info Section info for the section in which the address resides - * bytsiz Size of the data to be written in sizeof() units - * val Value to be written in each byte - * Effect: - * Fills the specified area of target memory. Returns TRUE for success, - * FALSE for failure. - ************************************************************************ */ - int (*fillmem) (struct dynamic_loader_initialize *thisptr, - ldr_addr locn, struct ldr_section_info *info, - unsigned bytsiz, unsigned val); - - /************************************************************************* - * Function execute - * - * Parameters: - * start Starting address - * - * Effect: - * The target code at the specified starting address is executed. - * - * Notes: - * This function is called at the end of the dynamic load process - * if the input module has specified a starting address. - ************************************************************************ */ - int (*execute) (struct dynamic_loader_initialize *thisptr, - ldr_addr start); - - /************************************************************************* - * Function release - * - * Parameters: - * none - * - * Effect: - * Releases the connection to the load interface. - * - * Notes: - * This function is called at the end of the dynamic load process. - ************************************************************************ */ - void (*release) (struct dynamic_loader_initialize *thisptr); - -}; /* class dynamic_loader_initialize */ - -#endif /* _DYNAMIC_LOADER_H_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/getsection.h b/drivers/staging/tidspbridge/include/dspbridge/getsection.h deleted file mode 100644 index 626063dd9dfe..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/getsection.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * getsection.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This file provides an API add-on to the dynamic loader that allows the user - * to query section information and extract section data from dynamic load - * modules. - * - * Notes: - * Functions in this API assume that the supplied dynamic_loader_stream - * object supports the set_file_posn method. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _GETSECTION_H_ -#define _GETSECTION_H_ - -#include "dynamic_loader.h" - -/* - * Procedure dload_module_open - * - * Parameters: - * module The input stream that supplies the module image - * syms Host-side malloc/free and error reporting functions. - * Other methods are unused. - * - * Effect: - * Reads header information from a dynamic loader module using the specified - * stream object, and returns a handle for the module information. This - * handle may be used in subsequent query calls to obtain information - * contained in the module. - * - * Returns: - * NULL if an error is encountered, otherwise a module handle for use - * in subsequent operations. - */ -extern void *dload_module_open(struct dynamic_loader_stream - *module, struct dynamic_loader_sym - *syms); - -/* - * Procedure dload_get_section_info - * - * Parameters: - * minfo Handle from dload_module_open for this module - * section_name Pointer to the string name of the section desired - * section_info Address of a section info structure pointer to be initialized - * - * Effect: - * Finds the specified section in the module information, and fills in - * the provided ldr_section_info structure. - * - * Returns: - * TRUE for success, FALSE for section not found - */ -extern int dload_get_section_info(void *minfo, - const char *section_name, - const struct ldr_section_info - **const section_info); - -/* - * Procedure dload_get_section - * - * Parameters: - * minfo Handle from dload_module_open for this module - * section_info Pointer to a section info structure for the desired section - * section_data Buffer to contain the section initialized data - * - * Effect: - * Copies the initialized data for the specified section into the - * supplied buffer. - * - * Returns: - * TRUE for success, FALSE for section not found - */ -extern int dload_get_section(void *minfo, - const struct ldr_section_info *section_info, - void *section_data); - -/* - * Procedure dload_module_close - * - * Parameters: - * minfo Handle from dload_module_open for this module - * - * Effect: - * Releases any storage associated with the module handle. On return, - * the module handle is invalid. - * - * Returns: - * Zero for success. On error, the number of errors detected is returned. - * Individual errors are reported using syms->error_report(), where syms was - * an argument to dload_module_open - */ -extern void dload_module_close(void *minfo); - -#endif /* _GETSECTION_H_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/gh.h b/drivers/staging/tidspbridge/include/dspbridge/gh.h deleted file mode 100644 index e4303b4bf5fd..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/gh.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * gh.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef GH_ -#define GH_ -#include - -extern struct gh_t_hash_tab *gh_create(u32 val_size, - u32 (*hash)(const void *), bool (*match)(const void *, - const void *), void (*delete) (void *)); -extern void gh_delete(struct gh_t_hash_tab *hash_tab); -extern void *gh_find(struct gh_t_hash_tab *hash_tab, const void *key); -extern void *gh_insert(struct gh_t_hash_tab *hash_tab, const void *key, - const void *value); -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -void gh_iterate(struct gh_t_hash_tab *hash_tab, - void (*callback)(void *, void *), void *user_data); -#endif -#endif /* GH_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/host_os.h b/drivers/staging/tidspbridge/include/dspbridge/host_os.h deleted file mode 100644 index d1441db469fc..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/host_os.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * host_os.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _HOST_OS_H_ -#define _HOST_OS_H_ - -#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 - -/* TODO -- Remove, once omap-iommu is used */ -#define INT_DSP_MMU_IRQ (28 + NR_IRQS) - -#define PRCM_VDD1 1 - -extern struct platform_device *omap_dspbridge_dev; -extern struct device *bridge; - -#endif diff --git a/drivers/staging/tidspbridge/include/dspbridge/io.h b/drivers/staging/tidspbridge/include/dspbridge/io.h deleted file mode 100644 index 750571856908..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/io.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * io.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * The io module manages IO between CHNL and msg_ctrl. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef IO_ -#define IO_ - -#include -#include - -/* IO Objects: */ -struct io_mgr; - -/* IO manager attributes: */ -struct io_attrs { - u8 birq; /* Channel's I/O IRQ number. */ - bool irq_shared; /* TRUE if the IRQ is shareable. */ - u32 word_size; /* DSP Word size. */ - u32 shm_base; /* Physical base address of shared memory. */ - u32 sm_length; /* Size (in bytes) of shared memory. */ -}; - - -/* - * ======== io_create ======== - * Purpose: - * Create an IO manager object, responsible for managing IO between - * CHNL and msg_ctrl. - * Parameters: - * channel_mgr: Location to store a channel manager object on - * output. - * hdev_obj: Handle to a device object. - * mgr_attrts: IO manager attributes. - * mgr_attrts->birq: I/O IRQ number. - * mgr_attrts->irq_shared: TRUE if the IRQ is shareable. - * mgr_attrts->word_size: DSP Word size in equivalent PC bytes.. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EIO: Unable to plug channel ISR for configured IRQ. - * -EINVAL: Invalid DSP word size (must be > 0). - * Invalid base address for DSP communications. - * Requires: - * io_man != NULL. - * mgr_attrts != NULL. - * Ensures: - */ -extern int io_create(struct io_mgr **io_man, - struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts); - -/* - * ======== io_destroy ======== - * Purpose: - * Destroy the IO manager. - * Parameters: - * hio_mgr: IOmanager object. - * Returns: - * 0: Success. - * -EFAULT: hio_mgr was invalid. - * Requires: - * Ensures: - */ -extern int io_destroy(struct io_mgr *hio_mgr); - -#endif /* CHNL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h deleted file mode 100644 index 903ff12b14de..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * io_sm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * IO dispatcher for a shared memory channel driver. - * Also, includes macros to simulate shm via port io calls. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef IOSM_ -#define IOSM_ - -#include -#include - -#include -#include /* shared mailbox codes */ - -/* Magic code used to determine if DSP signaled exception. */ -#define DEH_BASE MBX_DEH_BASE -#define DEH_LIMIT MBX_DEH_LIMIT - -#define IO_INPUT 0 -#define IO_OUTPUT 1 -#define IO_SERVICE 2 - -#ifdef CONFIG_TIDSPBRIDGE_DVFS -/* The maximum number of OPPs that are supported */ -extern s32 dsp_max_opps; -/* The Vdd1 opp table information */ -extern u32 vdd1_dsp_freq[6][4]; -#endif - -/* - * ======== io_cancel_chnl ======== - * Purpose: - * Cancel IO on a given channel. - * Parameters: - * hio_mgr: IO Manager. - * chnl: Index of channel to cancel IO on. - * Returns: - * Requires: - * Valid hio_mgr. - * Ensures: - */ -extern void io_cancel_chnl(struct io_mgr *hio_mgr, u32 chnl); - -/* - * ======== io_dpc ======== - * Purpose: - * Deferred procedure call for shared memory channel driver ISR. Carries - * out the dispatch of I/O. - * Parameters: - * ref_data: Pointer to reference data registered via a call to - * DPC_Create(). - * Returns: - * Requires: - * Must not block. - * Must not acquire resources. - * All data touched must be locked in memory if running in kernel mode. - * Ensures: - * Non-preemptible (but interruptible). - */ -extern void io_dpc(unsigned long ref_data); - -/* - * ======== io_mbox_msg ======== - * Purpose: - * Main message handler for the shared memory Bridge channel manager. - * Determine if this message is ours, then schedules a DPC to - * dispatch I/O. - * Parameters: - * self: Pointer to its own notifier_block struct. - * len: Length of message. - * msg: Message code received. - * Returns: - * NOTIFY_OK if handled; NOTIFY_BAD otherwise. - */ -int io_mbox_msg(struct notifier_block *self, unsigned long len, void *msg); - -/* - * ======== io_request_chnl ======== - * Purpose: - * Request I/O from the DSP. Sets flags in shared memory, then interrupts - * the DSP. - * Parameters: - * hio_mgr: IO manager handle. - * pchnl: Ptr to the channel requesting I/O. - * io_mode: Mode of channel: {IO_INPUT | IO_OUTPUT}. - * Returns: - * Requires: - * pchnl != NULL - * Ensures: - */ -extern void io_request_chnl(struct io_mgr *io_manager, - struct chnl_object *pchnl, - u8 io_mode, u16 *mbx_val); - -/* - * ======== iosm_schedule ======== - * Purpose: - * Schedule DPC for IO. - * Parameters: - * pio_mgr: Ptr to a I/O manager. - * Returns: - * Requires: - * pchnl != NULL - * Ensures: - */ -extern void iosm_schedule(struct io_mgr *io_manager); - -/* - * ======== io_sh_msetting ======== - * Purpose: - * Sets the shared memory setting - * Parameters: - * hio_mgr: Handle to a I/O manager. - * desc: Shared memory type - * pargs: Ptr to shm setting - * Returns: - * Requires: - * hio_mgr != NULL - * pargs != NULL - * Ensures: - */ -extern int io_sh_msetting(struct io_mgr *hio_mgr, u8 desc, void *pargs); - -/* - * Misc functions for the CHNL_IO shared memory library: - */ - -/* Maximum channel bufsize that can be used. */ -extern u32 io_buf_size(struct io_mgr *hio_mgr); - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/* - * ========print_dsp_trace_buffer ======== - * Print DSP tracebuffer. - */ -extern int print_dsp_trace_buffer(struct bridge_dev_context - *hbridge_context); - -int dump_dsp_stack(struct bridge_dev_context *bridge_context); - -void dump_dl_modules(struct bridge_dev_context *bridge_context); - -void print_dsp_debug_trace(struct io_mgr *hio_mgr); -#endif - -#endif /* IOSM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h b/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h deleted file mode 100644 index d4cb3948baba..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * mbx_sh.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Definitions for shared mailbox cmd/data values.(used on both - * the GPP and DSP sides). - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * Bridge usage of OMAP mailbox 1 is determined by the "class" of the - * mailbox interrupt's cmd value received. The class value are defined - * as a bit (10 thru 15) being set. - * - * Note: Only 16 bits of each is used. Other 16 bit data reg available. - * - * 16 bit Mbx bit defns: - * - * A). Exception/Error handling (Module DEH) : class = 0. - * - * 15 10 0 - * --------------------------------- - * |0|0|0|0|0|0|x|x|x|x|x|x|x|x|x|x| - * --------------------------------- - * | (class) | (module specific) | - * - * - * B: DSP-DMA link driver channels (DDMA) : class = 1. - * - * 15 10 0 - * --------------------------------- - * |0|0|0|0|0|1|b|b|b|b|b|c|c|c|c|c| - * --------------------------------- - * | (class) | (module specific) | - * - * where b -> buffer index (32 DDMA buffers/chnl max) - * c -> channel Id (32 DDMA chnls max) - * - * - * C: Proc-copy link driver channels (PCPY) : class = 2. - * - * 15 10 0 - * --------------------------------- - * |0|0|0|0|1|0|x|x|x|x|x|x|x|x|x|x| - * --------------------------------- - * | (class) | (module specific) | - * - * - * D: Zero-copy link driver channels (DDZC) : class = 4. - * - * 15 10 0 - * --------------------------------- - * |0|0|0|1|0|0|x|x|x|x|x|c|c|c|c|c| - * --------------------------------- - * | (class) | (module specific) | - * - * where x -> not used - * c -> channel Id (32 ZCPY chnls max) - * - * - * E: Power management : class = 8. - * - * 15 10 0 - * --------------------------------- - * |0|0|1|0|0|0|x|x|x|x|x|c|c|c|c|c| - - * 0010 00xx xxxc cccc - * 0010 00nn pppp qqqq - * nn: - * 00 = reserved - * 01 = pwr state change - * 10 = opp pre-change - * 11 = opp post-change - * - * if nn = pwr state change: - * pppp = don't care - * qqqq: - * 0010 = hibernate - * 0010 0001 0000 0010 - * 0110 = retention - * 0010 0001 0000 0110 - * others reserved - * - * if nn = opp pre-change: - * pppp = current opp - * qqqq = next opp - * - * if nn = opp post-change: - * pppp = prev opp - * qqqq = current opp - * - * --------------------------------- - * | (class) | (module specific) | - * - * where x -> not used - * c -> Power management command - * - */ - -#ifndef _MBX_SH_H -#define _MBX_SH_H - -#define MBX_PCPY_CLASS 0x0800 /* PROC-COPY " */ -#define MBX_PM_CLASS 0x2000 /* Power Management */ -#define MBX_DBG_CLASS 0x4000 /* For debugging purpose */ - -/* - * Exception Handler codes - * Magic code used to determine if DSP signaled exception. - */ -#define MBX_DEH_BASE 0x0 -#define MBX_DEH_USERS_BASE 0x100 /* 256 */ -#define MBX_DEH_LIMIT 0x3FF /* 1023 */ -#define MBX_DEH_RESET 0x101 /* DSP RESET (DEH) */ - -/* - * Link driver command/status codes. - */ - -/* Power Management Commands */ -#define MBX_PM_DSPIDLE (MBX_PM_CLASS + 0x0) -#define MBX_PM_DSPWAKEUP (MBX_PM_CLASS + 0x1) -#define MBX_PM_EMERGENCYSLEEP (MBX_PM_CLASS + 0x2) -#define MBX_PM_SETPOINT_PRENOTIFY (MBX_PM_CLASS + 0x6) -#define MBX_PM_SETPOINT_POSTNOTIFY (MBX_PM_CLASS + 0x7) -#define MBX_PM_DSPRETENTION (MBX_PM_CLASS + 0x8) -#define MBX_PM_DSPHIBERNATE (MBX_PM_CLASS + 0x9) -#define MBX_PM_HIBERNATE_EN (MBX_PM_CLASS + 0xA) -#define MBX_PM_OPP_REQ (MBX_PM_CLASS + 0xB) - -/* Bridge Debug Commands */ -#define MBX_DBG_SYSPRINTF (MBX_DBG_CLASS + 0x0) - -#endif /* _MBX_SH_H */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/memdefs.h b/drivers/staging/tidspbridge/include/dspbridge/memdefs.h deleted file mode 100644 index 78d2c5d0045b..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/memdefs.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * memdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global MEM constants and types, shared between Bridge driver and DSP API. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MEMDEFS_ -#define MEMDEFS_ - -/* - * MEM_VIRTUALSEGID is used by Node & Strm to access virtual address space in - * the correct client process context. - */ -#define MEM_SETVIRTUALSEGID 0x10000000 -#define MEM_GETVIRTUALSEGID 0x20000000 -#define MEM_MASKVIRTUALSEGID (MEM_SETVIRTUALSEGID | MEM_GETVIRTUALSEGID) - -#endif /* MEMDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/mgr.h b/drivers/staging/tidspbridge/include/dspbridge/mgr.h deleted file mode 100644 index 47b0318430e1..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/mgr.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * mgr.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This is the DSP API RM module interface. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MGR_ -#define MGR_ - -#include - -#define MAX_EVENTS 32 - -/* - * ======== mgr_wait_for_bridge_events ======== - * Purpose: - * Block on any Bridge event(s) - * Parameters: - * anotifications : array of pointers to notification objects. - * count : number of elements in above array - * pu_index : index of signaled event object - * utimeout : timeout interval in milliseocnds - * Returns: - * 0 : Success. - * -ETIME : Wait timed out. *pu_index is undetermined. - * Details: - */ - -int mgr_wait_for_bridge_events(struct dsp_notification - **anotifications, - u32 count, u32 *pu_index, - u32 utimeout); - -/* - * ======== mgr_create ======== - * Purpose: - * Creates the Manager Object. This is done during the driver loading. - * There is only one Manager Object in the DSP/BIOS Bridge. - * Parameters: - * mgr_obj: Location to store created MGR Object handle. - * dev_node_obj: Device object as known to the system. - * Returns: - * 0: Success - * -ENOMEM: Failed to Create the Object - * -EPERM: General Failure - * Requires: - * MGR Initialized (refs > 0 ) - * mgr_obj != NULL. - * Ensures: - * 0: *mgr_obj is a valid MGR interface to the device. - * MGR Object stores the DCD Manager Handle. - * MGR Object stored in the Regsitry. - * !0: MGR Object not created - * Details: - * DCD Dll is loaded and MGR Object stores the handle of the DLL. - */ -extern int mgr_create(struct mgr_object **mgr_obj, - struct cfg_devnode *dev_node_obj); - -/* - * ======== mgr_destroy ======== - * Purpose: - * Destroys the MGR object. Called upon driver unloading. - * Parameters: - * hmgr_obj: Handle to Manager object . - * Returns: - * 0: Success. - * DCD Manager freed; MGR Object destroyed; - * MGR Object deleted from the Registry. - * -EPERM: Failed to destroy MGR Object - * Requires: - * MGR Initialized (refs > 0 ) - * hmgr_obj is a valid MGR handle . - * Ensures: - * 0: MGR Object destroyed and hmgr_obj is Invalid MGR - * Handle. - */ -extern int mgr_destroy(struct mgr_object *hmgr_obj); - -/* - * ======== mgr_enum_node_info ======== - * Purpose: - * Enumerate and get configuration information about nodes configured - * in the node database. - * Parameters: - * node_id: The node index (base 0). - * pndb_props: Ptr to the dsp_ndbprops structure for output. - * undb_props_size: Size of the dsp_ndbprops structure. - * pu_num_nodes: Location where the number of nodes configured - * in the database will be returned. - * Returns: - * 0: Success. - * -EINVAL: Parameter node_id is > than the number of nodes. - * configutred in the system - * -EIDRM: During Enumeration there has been a change in - * the number of nodes configured or in the - * the properties of the enumerated nodes. - * -EPERM: Failed to querry the Node Data Base - * Requires: - * pNDBPROPS is not null - * undb_props_size >= sizeof(dsp_ndbprops) - * pu_num_nodes is not null - * MGR Initialized (refs > 0 ) - * Ensures: - * SUCCESS on successful retreival of data and *pu_num_nodes > 0 OR - * DSP_FAILED && *pu_num_nodes == 0. - * Details: - */ -extern int mgr_enum_node_info(u32 node_id, - struct dsp_ndbprops *pndb_props, - u32 undb_props_size, - u32 *pu_num_nodes); - -/* - * ======== mgr_enum_processor_info ======== - * Purpose: - * Enumerate and get configuration information about available DSP - * processors - * Parameters: - * processor_id: The processor index (zero-based). - * processor_info: Ptr to the dsp_processorinfo structure . - * processor_info_size: Size of dsp_processorinfo structure. - * pu_num_procs: Location where the number of DSPs configured - * in the database will be returned - * Returns: - * 0: Success. - * -EINVAL: Parameter processor_id is > than the number of - * DSP Processors in the system. - * -EPERM: Failed to querry the Node Data Base - * Requires: - * processor_info is not null - * pu_num_procs is not null - * processor_info_size >= sizeof(dsp_processorinfo) - * MGR Initialized (refs > 0 ) - * Ensures: - * SUCCESS on successful retreival of data and *pu_num_procs > 0 OR - * DSP_FAILED && *pu_num_procs == 0. - * Details: - */ -extern int mgr_enum_processor_info(u32 processor_id, - struct dsp_processorinfo - *processor_info, - u32 processor_info_size, - u8 *pu_num_procs); -/* - * ======== mgr_exit ======== - * Purpose: - * Decrement reference count, and free resources when reference count is - * 0. - * Parameters: - * Returns: - * Requires: - * MGR is initialized. - * Ensures: - * When reference count == 0, MGR's private resources are freed. - */ -extern void mgr_exit(void); - -/* - * ======== mgr_get_dcd_handle ======== - * Purpose: - * Retrieves the MGR handle. Accessor Function - * Parameters: - * mgr_handle: Handle to the Manager Object - * dcd_handle: Ptr to receive the DCD Handle. - * Returns: - * 0: Success - * -EPERM: Failure to get the Handle - * Requires: - * MGR is initialized. - * dcd_handle != NULL - * Ensures: - * 0 and *dcd_handle != NULL || - * -EPERM and *dcd_handle == NULL - */ -extern int mgr_get_dcd_handle(struct mgr_object - *mgr_handle, u32 *dcd_handle); - -/* - * ======== mgr_init ======== - * Purpose: - * Initialize MGR's private state, keeping a reference count on each - * call. Initializes the DCD. - * Parameters: - * Returns: - * TRUE if initialized; FALSE if error occurred. - * Requires: - * Ensures: - * TRUE: A requirement for the other public MGR functions. - */ -extern bool mgr_init(void); - -#endif /* MGR_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/mgrpriv.h b/drivers/staging/tidspbridge/include/dspbridge/mgrpriv.h deleted file mode 100644 index 3a4e337c040d..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/mgrpriv.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * mgrpriv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global MGR constants and types, shared by PROC, MGR, and DSP API. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MGRPRIV_ -#define MGRPRIV_ - -/* - * OMAP1510 specific - */ -#define MGR_MAXTLBENTRIES 32 - -/* RM MGR Object */ -struct mgr_object; - -struct mgr_tlbentry { - u32 dsp_virt; /* DSP virtual address */ - u32 gpp_phys; /* GPP physical address */ -}; - -/* - * The DSP_PROCESSOREXTINFO structure describes additional extended - * capabilities of a DSP processor not exposed to user. - */ -struct mgr_processorextinfo { - struct dsp_processorinfo ty_basic; /* user processor info */ - /* private dsp mmu entries */ - struct mgr_tlbentry ty_tlb[MGR_MAXTLBENTRIES]; -}; - -#endif /* MGRPRIV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/msg.h b/drivers/staging/tidspbridge/include/dspbridge/msg.h deleted file mode 100644 index 2c8712c933fc..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/msg.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * msg.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge msg_ctrl Module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MSG_ -#define MSG_ - -#include -#include - -/* - * ======== msg_create ======== - * Purpose: - * Create an object to manage message queues. Only one of these objects - * can exist per device object. The msg_ctrl manager must be created before - * the IO Manager. - * Parameters: - * msg_man: Location to store msg_ctrl manager handle on output. - * hdev_obj: The device object. - * msg_callback: Called whenever an RMS_EXIT message is received. - * Returns: - * Requires: - * msg_man != NULL. - * hdev_obj != NULL. - * msg_callback != NULL. - * Ensures: - */ -extern int msg_create(struct msg_mgr **msg_man, - struct dev_object *hdev_obj, - msg_onexit msg_callback); - -/* - * ======== msg_delete ======== - * Purpose: - * Delete a msg_ctrl manager allocated in msg_create(). - * Parameters: - * hmsg_mgr: Handle returned from msg_create(). - * Returns: - * Requires: - * Valid hmsg_mgr. - * Ensures: - */ -extern void msg_delete(struct msg_mgr *hmsg_mgr); - -#endif /* MSG_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/msgdefs.h b/drivers/staging/tidspbridge/include/dspbridge/msgdefs.h deleted file mode 100644 index 80a3fa1a8a33..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/msgdefs.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * msgdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global msg_ctrl constants and types. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MSGDEFS_ -#define MSGDEFS_ - -/* msg_ctrl Objects: */ -struct msg_mgr; -struct msg_queue; - -/* Function prototype for callback to be called on RMS_EXIT message received */ -typedef void (*msg_onexit) (void *h, s32 node_status); - -#endif /* MSGDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/nldr.h b/drivers/staging/tidspbridge/include/dspbridge/nldr.h deleted file mode 100644 index c5e48ca6c548..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/nldr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * nldr.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge dynamic loader interface. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include -#include -#include -#include - -#ifndef NLDR_ -#define NLDR_ - -extern int nldr_allocate(struct nldr_object *nldr_obj, - void *priv_ref, const struct dcd_nodeprops - *node_props, - struct nldr_nodeobject **nldr_nodeobj, - bool *pf_phase_split); - -extern int nldr_create(struct nldr_object **nldr, - struct dev_object *hdev_obj, - const struct nldr_attrs *pattrs); - -extern void nldr_delete(struct nldr_object *nldr_obj); - -extern int nldr_get_fxn_addr(struct nldr_nodeobject *nldr_node_obj, - char *str_fxn, u32 * addr); - -extern int nldr_get_rmm_manager(struct nldr_object *nldr, - struct rmm_target_obj **rmm_mgr); - -extern int nldr_load(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); -extern int nldr_unload(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr, - u32 offset_range, void *offset_output, char *sym_name); -#endif - -#endif /* NLDR_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/nldrdefs.h b/drivers/staging/tidspbridge/include/dspbridge/nldrdefs.h deleted file mode 100644 index 7e3c7f58b496..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/nldrdefs.h +++ /dev/null @@ -1,259 +0,0 @@ -/* - * nldrdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global Dynamic + static/overlay Node loader (NLDR) constants and types. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef NLDRDEFS_ -#define NLDRDEFS_ - -#include -#include - -#define NLDR_MAXPATHLENGTH 255 -/* NLDR Objects: */ -struct nldr_object; -struct nldr_nodeobject; - -/* - * ======== nldr_loadtype ======== - * Load types for a node. Must match values in node.h55. - */ -enum nldr_loadtype { - NLDR_STATICLOAD, /* Linked in base image, not overlay */ - NLDR_DYNAMICLOAD, /* Dynamically loaded node */ - NLDR_OVLYLOAD /* Linked in base image, overlay node */ -}; - -/* - * ======== nldr_ovlyfxn ======== - * Causes code or data to be copied from load address to run address. This - * is the "cod_writefxn" that gets passed to the DBLL_Library and is used as - * the ZL write function. - * - * Parameters: - * priv_ref: Handle to identify the node. - * dsp_run_addr: Run address of code or data. - * dsp_load_addr: Load address of code or data. - * ul_num_bytes: Number of (GPP) bytes to copy. - * mem_space: RMS_CODE or RMS_DATA. - * Returns: - * ul_num_bytes: Success. - * 0: Failure. - * Requires: - * Ensures: - */ -typedef u32(*nldr_ovlyfxn) (void *priv_ref, u32 dsp_run_addr, - u32 dsp_load_addr, u32 ul_num_bytes, u32 mem_space); - -/* - * ======== nldr_writefxn ======== - * Write memory function. Used for dynamic load writes. - * Parameters: - * priv_ref: Handle to identify the node. - * dsp_add: Address of code or data. - * pbuf: Code or data to be written - * ul_num_bytes: Number of (GPP) bytes to write. - * mem_space: DBLL_DATA or DBLL_CODE. - * Returns: - * ul_num_bytes: Success. - * 0: Failure. - * Requires: - * Ensures: - */ -typedef u32(*nldr_writefxn) (void *priv_ref, - u32 dsp_add, void *pbuf, - u32 ul_num_bytes, u32 mem_space); - -/* - * ======== nldr_attrs ======== - * Attributes passed to nldr_create function. - */ -struct nldr_attrs { - nldr_ovlyfxn ovly; - nldr_writefxn write; - u16 dsp_word_size; - u16 dsp_mau_size; -}; - -/* - * ======== nldr_phase ======== - * Indicates node create, delete, or execute phase function. - */ -enum nldr_phase { - NLDR_CREATE, - NLDR_DELETE, - NLDR_EXECUTE, - NLDR_NOPHASE -}; - -/* - * Typedefs of loader functions imported from a DLL, or defined in a - * function table. - */ - -/* - * ======== nldr_allocate ======== - * Allocate resources to manage the loading of a node on the DSP. - * - * Parameters: - * nldr_obj: Handle of loader that will load the node. - * priv_ref: Handle to identify the node. - * node_props: Pointer to a dcd_nodeprops for the node. - * nldr_nodeobj: Location to store node handle on output. This handle - * will be passed to nldr_load/nldr_unload. - * pf_phase_split: pointer to int variable referenced in node.c - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory on GPP. - * Requires: - * Valid nldr_obj. - * node_props != NULL. - * nldr_nodeobj != NULL. - * Ensures: - * 0: IsValidNode(*nldr_nodeobj). - * error: *nldr_nodeobj == NULL. - */ -typedef int(*nldr_allocatefxn) (struct nldr_object *nldr_obj, - void *priv_ref, - const struct dcd_nodeprops - * node_props, - struct nldr_nodeobject - **nldr_nodeobj, - bool *pf_phase_split); - -/* - * ======== nldr_create ======== - * Create a loader object. This object handles the loading and unloading of - * create, delete, and execute phase functions of nodes on the DSP target. - * - * Parameters: - * nldr: Location to store loader handle on output. - * hdev_obj: Device for this processor. - * pattrs: Loader attributes. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * Requires: - * nldr != NULL. - * hdev_obj != NULL. - * pattrs != NULL. - * Ensures: - * 0: Valid *nldr. - * error: *nldr == NULL. - */ -typedef int(*nldr_createfxn) (struct nldr_object **nldr, - struct dev_object *hdev_obj, - const struct nldr_attrs *pattrs); - -/* - * ======== nldr_delete ======== - * Delete the NLDR loader. - * - * Parameters: - * nldr_obj: Node manager object. - * Returns: - * Requires: - * Valid nldr_obj. - * Ensures: - * nldr_obj invalid - */ -typedef void (*nldr_deletefxn) (struct nldr_object *nldr_obj); - -/* - * ======== NLDR_Free ======== - * Free resources allocated in nldr_allocate. - * - * Parameters: - * nldr_node_obj: Handle returned from nldr_allocate(). - * Returns: - * Requires: - * Valid nldr_node_obj. - * Ensures: - */ -typedef void (*nldr_freefxn) (struct nldr_nodeobject *nldr_node_obj); - -/* - * ======== nldr_get_fxn_addr ======== - * Get address of create, delete, or execute phase function of a node on - * the DSP. - * - * Parameters: - * nldr_node_obj: Handle returned from nldr_allocate(). - * str_fxn: Name of function. - * addr: Location to store function address. - * Returns: - * 0: Success. - * -ESPIPE: Address of function not found. - * Requires: - * Valid nldr_node_obj. - * addr != NULL; - * str_fxn != NULL; - * Ensures: - */ -typedef int(*nldr_getfxnaddrfxn) (struct nldr_nodeobject - * nldr_node_obj, - char *str_fxn, u32 * addr); - -/* - * ======== nldr_load ======== - * Load create, delete, or execute phase function of a node on the DSP. - * - * Parameters: - * nldr_node_obj: Handle returned from nldr_allocate(). - * phase: Type of function to load (create, delete, or execute). - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory on GPP. - * -ENXIO: Can't overlay phase because overlay memory - * is already in use. - * -EILSEQ: Failure in dynamic loader library. - * Requires: - * Valid nldr_node_obj. - * Ensures: - */ -typedef int(*nldr_loadfxn) (struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); - -/* - * ======== nldr_unload ======== - * Unload create, delete, or execute phase function of a node on the DSP. - * - * Parameters: - * nldr_node_obj: Handle returned from nldr_allocate(). - * phase: Node function to unload (create, delete, or execute). - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory on GPP. - * Requires: - * Valid nldr_node_obj. - * Ensures: - */ -typedef int(*nldr_unloadfxn) (struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); - -/* - * ======== node_ldr_fxns ======== - */ -struct node_ldr_fxns { - nldr_allocatefxn allocate; - nldr_createfxn create; - nldr_deletefxn delete; - nldr_getfxnaddrfxn get_fxn_addr; - nldr_loadfxn load; - nldr_unloadfxn unload; -}; - -#endif /* NLDRDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/node.h b/drivers/staging/tidspbridge/include/dspbridge/node.h deleted file mode 100644 index 68ed74a86c95..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/node.h +++ /dev/null @@ -1,524 +0,0 @@ -/* - * node.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Node Manager. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef NODE_ -#define NODE_ - -#include - -#include -#include -#include -#include - -/* - * ======== node_allocate ======== - * Purpose: - * Allocate GPP resources to manage a node on the DSP. - * Parameters: - * hprocessor: Handle of processor that is allocating the node. - * node_uuid: Pointer to a dsp_uuid for the node. - * pargs: Optional arguments to be passed to the node. - * attr_in: Optional pointer to node attributes (priority, - * timeout...) - * noderes: Location to store node resource info. - * Returns: - * 0: Success. - * -ENOMEM: Insufficient memory on GPP. - * -ENOKEY: Node UUID has not been registered. - * -ESPIPE: iAlg functions not found for a DAIS node. - * -EDOM: attr_in != NULL and attr_in->prio out of - * range. - * -EPERM: A failure occurred, unable to allocate node. - * -EBADR: Proccessor is not in the running state. - * Requires: - * hprocessor != NULL. - * node_uuid != NULL. - * noderes != NULL. - * Ensures: - * 0: IsValidNode(*ph_node). - * error: *noderes == NULL. - */ -extern int node_allocate(struct proc_object *hprocessor, - const struct dsp_uuid *node_uuid, - const struct dsp_cbdata - *pargs, const struct dsp_nodeattrin - *attr_in, - struct node_res_object **noderes, - struct process_context *pr_ctxt); - -/* - * ======== node_alloc_msg_buf ======== - * Purpose: - * Allocate and Prepare a buffer whose descriptor will be passed to a - * Node within a (dsp_msg)message - * Parameters: - * hnode: The node handle. - * usize: The size of the buffer to be allocated. - * pattr: Pointer to a dsp_bufferattr structure. - * pbuffer: Location to store the address of the allocated - * buffer on output. - * Returns: - * 0: Success. - * -EFAULT: Invalid node handle. - * -ENOMEM: Insufficent memory. - * -EPERM: General Failure. - * -EINVAL: Invalid Size. - * Requires: - * pbuffer != NULL. - * Ensures: - */ -extern int node_alloc_msg_buf(struct node_object *hnode, - u32 usize, struct dsp_bufferattr - *pattr, u8 **pbuffer); - -/* - * ======== node_change_priority ======== - * Purpose: - * Change the priority of an allocated node. - * Parameters: - * hnode: Node handle returned from node_allocate. - * prio: New priority level to set node's priority to. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EDOM: prio is out of range. - * -EPERM: The specified node is not a task node. - * Unable to change node's runtime priority level. - * -EBADR: Node is not in the NODE_ALLOCATED, NODE_PAUSED, - * or NODE_RUNNING state. - * -ETIME: A timeout occurred before the DSP responded. - * Requires: - * Ensures: - * 0 && (Node's current priority == prio) - */ -extern int node_change_priority(struct node_object *hnode, s32 prio); - -/* - * ======== node_connect ======== - * Purpose: - * Connect two nodes on the DSP, or a node on the DSP to the GPP. In the - * case that the connection is being made between a node on the DSP and - * the GPP, one of the node handles (either node1 or node2) must be - * the constant NODE_HGPPNODE. - * Parameters: - * node1: Handle of first node to connect to second node. If - * this is a connection from the GPP to node2, node1 - * must be the constant NODE_HGPPNODE. Otherwise, node1 - * must be a node handle returned from a successful call - * to Node_Allocate(). - * node2: Handle of second node. Must be either NODE_HGPPNODE - * if this is a connection from DSP node to GPP, or a - * node handle returned from a successful call to - * node_allocate(). - * stream1: Output stream index on first node, to be connected - * to second node's input stream. Value must range from - * 0 <= stream1 < number of output streams. - * stream2: Input stream index on second node. Value must range - * from 0 <= stream2 < number of input streams. - * pattrs: Stream attributes (NULL ==> use defaults). - * conn_param: A pointer to a dsp_cbdata structure that defines - * connection parameter for device nodes to pass to DSP - * side. - * If the value of this parameter is NULL, then this API - * behaves like DSPNode_Connect. This parameter will have - * length of the string and the null terminated string in - * dsp_cbdata struct. This can be extended in future tp - * pass binary data. - * Returns: - * 0: Success. - * -EFAULT: Invalid node1 or node2. - * -ENOMEM: Insufficient host memory. - * -EINVAL: A stream index parameter is invalid. - * -EISCONN: A connection already exists for one of the - * indices stream1 or stream2. - * -EBADR: Either node1 or node2 is not in the - * NODE_ALLOCATED state. - * -ECONNREFUSED: No more connections available. - * -EPERM: Attempt to make an illegal connection (eg, - * Device node to device node, or device node to - * GPP), the two nodes are on different DSPs. - * Requires: - * Ensures: - */ -extern int node_connect(struct node_object *node1, - u32 stream1, - struct node_object *node2, - u32 stream2, - struct dsp_strmattr *pattrs, - struct dsp_cbdata - *conn_param); - -/* - * ======== node_create ======== - * Purpose: - * Create a node on the DSP by remotely calling the node's create - * function. If necessary, load code that contains the node's create - * function. - * Parameters: - * hnode: Node handle returned from node_allocate(). - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -ESPIPE: Create function not found in the COFF file. - * -EBADR: Node is not in the NODE_ALLOCATED state. - * -ENOMEM: Memory allocation failure on the DSP. - * -ETIME: A timeout occurred before the DSP responded. - * -EPERM: A failure occurred, unable to create node. - * Requires: - * Ensures: - */ -extern int node_create(struct node_object *hnode); - -/* - * ======== node_create_mgr ======== - * Purpose: - * Create a NODE Manager object. This object handles the creation, - * deletion, and execution of nodes on the DSP target. The NODE Manager - * also maintains a pipe map of used and available node connections. - * Each DEV object should have exactly one NODE Manager object. - * - * Parameters: - * node_man: Location to store node manager handle on output. - * hdev_obj: Device for this processor. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EPERM: General failure. - * Requires: - * node_man != NULL. - * hdev_obj != NULL. - * Ensures: - * 0: Valide *node_man. - * error: *node_man == NULL. - */ -extern int node_create_mgr(struct node_mgr **node_man, - struct dev_object *hdev_obj); - -/* - * ======== node_delete ======== - * Purpose: - * Delete resources allocated in node_allocate(). If the node was - * created, delete the node on the DSP by remotely calling the node's - * delete function. Loads the node's delete function if necessary. - * GPP side resources are freed after node's delete function returns. - * Parameters: - * noderes: Node resource info handle returned from - * node_allocate(). - * pr_ctxt: Pointer to process context data. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -ETIME: A timeout occurred before the DSP responded. - * -EPERM: A failure occurred in deleting the node. - * -ESPIPE: Delete function not found in the COFF file. - * Requires: - * Ensures: - * 0: hnode is invalid. - */ -extern int node_delete(struct node_res_object *noderes, - struct process_context *pr_ctxt); - -/* - * ======== node_delete_mgr ======== - * Purpose: - * Delete the NODE Manager. - * Parameters: - * hnode_mgr: Node manager object. - * Returns: - * 0: Success. - * Requires: - * Valid hnode_mgr. - * Ensures: - */ -extern int node_delete_mgr(struct node_mgr *hnode_mgr); - -/* - * ======== node_enum_nodes ======== - * Purpose: - * Enumerate the nodes currently allocated for the DSP. - * Parameters: - * hnode_mgr: Node manager returned from node_create_mgr(). - * node_tab: Array to copy node handles into. - * node_tab_size: Number of handles that can be written to node_tab. - * pu_num_nodes: Location where number of node handles written to - * node_tab will be written. - * pu_allocated: Location to write total number of allocated nodes. - * Returns: - * 0: Success. - * -EINVAL: node_tab is too small to hold all node handles. - * Requires: - * Valid hnode_mgr. - * node_tab != NULL || node_tab_size == 0. - * pu_num_nodes != NULL. - * pu_allocated != NULL. - * Ensures: - * - (-EINVAL && *pu_num_nodes == 0) - * - || (0 && *pu_num_nodes <= node_tab_size) && - * (*pu_allocated == *pu_num_nodes) - */ -extern int node_enum_nodes(struct node_mgr *hnode_mgr, - void **node_tab, - u32 node_tab_size, - u32 *pu_num_nodes, - u32 *pu_allocated); - -/* - * ======== node_free_msg_buf ======== - * Purpose: - * Free a message buffer previously allocated with node_alloc_msg_buf. - * Parameters: - * hnode: The node handle. - * pbuffer: (Address) Buffer allocated by node_alloc_msg_buf. - * pattr: Same buffer attributes passed to node_alloc_msg_buf. - * Returns: - * 0: Success. - * -EFAULT: Invalid node handle. - * -EPERM: Failure to free the buffer. - * Requires: - * pbuffer != NULL. - * Ensures: - */ -extern int node_free_msg_buf(struct node_object *hnode, - u8 *pbuffer, - struct dsp_bufferattr - *pattr); - -/* - * ======== node_get_attr ======== - * Purpose: - * Copy the current attributes of the specified node into a dsp_nodeattr - * structure. - * Parameters: - * hnode: Node object allocated from node_allocate(). - * pattr: Pointer to dsp_nodeattr structure to copy node's - * attributes. - * attr_size: Size of pattr. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * Requires: - * pattr != NULL. - * Ensures: - * 0: *pattrs contains the node's current attributes. - */ -extern int node_get_attr(struct node_object *hnode, - struct dsp_nodeattr *pattr, u32 attr_size); - -/* - * ======== node_get_message ======== - * Purpose: - * Retrieve a message from a node on the DSP. The node must be either a - * message node, task node, or XDAIS socket node. - * If a message is not available, this function will block until a - * message is available, or the node's timeout value is reached. - * Parameters: - * hnode: Node handle returned from node_allocate(). - * message: Pointer to dsp_msg structure to copy the - * message into. - * utimeout: Timeout in milliseconds to wait for message. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: Cannot retrieve messages from this type of node. - * Error occurred while trying to retrieve a message. - * -ETIME: Timeout occurred and no message is available. - * Requires: - * message != NULL. - * Ensures: - */ -extern int node_get_message(struct node_object *hnode, - struct dsp_msg *message, u32 utimeout); - -/* - * ======== node_get_nldr_obj ======== - * Purpose: - * Retrieve the Nldr manager - * Parameters: - * hnode_mgr: Node Manager - * nldr_ovlyobj: Pointer to a Nldr manager handle - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * Ensures: - */ -extern int node_get_nldr_obj(struct node_mgr *hnode_mgr, - struct nldr_object **nldr_ovlyobj); - -/* - * ======== node_on_exit ======== - * Purpose: - * Gets called when RMS_EXIT is received for a node. PROC needs to pass - * this function as a parameter to msg_create(). This function then gets - * called by the Bridge driver when an exit message for a node is received. - * Parameters: - * hnode: Handle of the node that the exit message is for. - * node_status: Return status of the node's execute phase. - * Returns: - * Ensures: - */ -void node_on_exit(struct node_object *hnode, s32 node_status); - -/* - * ======== node_pause ======== - * Purpose: - * Suspend execution of a node currently running on the DSP. - * Parameters: - * hnode: Node object representing a node currently - * running on the DSP. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: Node is not a task or socket node. - * Failed to pause node. - * -ETIME: A timeout occurred before the DSP responded. - * DSP_EWRONGSTSATE: Node is not in NODE_RUNNING state. - * Requires: - * Ensures: - */ -extern int node_pause(struct node_object *hnode); - -/* - * ======== node_put_message ======== - * Purpose: - * Send a message to a message node, task node, or XDAIS socket node. - * This function will block until the message stream can accommodate - * the message, or a timeout occurs. The message will be copied, so Msg - * can be re-used immediately after return. - * Parameters: - * hnode: Node handle returned by node_allocate(). - * pmsg: Location of message to be sent to the node. - * utimeout: Timeout in msecs to wait. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: Messages can't be sent to this type of node. - * Unable to send message. - * -ETIME: Timeout occurred before message could be set. - * -EBADR: Node is in invalid state for sending messages. - * Requires: - * pmsg != NULL. - * Ensures: - */ -extern int node_put_message(struct node_object *hnode, - const struct dsp_msg *pmsg, u32 utimeout); - -/* - * ======== node_register_notify ======== - * Purpose: - * Register to be notified on specific events for this node. - * Parameters: - * hnode: Node handle returned by node_allocate(). - * event_mask: Mask of types of events to be notified about. - * notify_type: Type of notification to be sent. - * hnotification: Handle to be used for notification. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -ENOMEM: Insufficient memory on GPP. - * -EINVAL: event_mask is invalid. - * -ENOSYS: Notification type specified by notify_type is not - * supported. - * Requires: - * hnotification != NULL. - * Ensures: - */ -extern int node_register_notify(struct node_object *hnode, - u32 event_mask, u32 notify_type, - struct dsp_notification - *hnotification); - -/* - * ======== node_run ======== - * Purpose: - * Start execution of a node's execute phase, or resume execution of - * a node that has been suspended (via node_pause()) on the DSP. Load - * the node's execute function if necessary. - * Parameters: - * hnode: Node object representing a node currently - * running on the DSP. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: hnode doesn't represent a message, task or dais socket node. - * Unable to start or resume execution. - * -ETIME: A timeout occurred before the DSP responded. - * DSP_EWRONGSTSATE: Node is not in NODE_PAUSED or NODE_CREATED state. - * -ESPIPE: Execute function not found in the COFF file. - * Requires: - * Ensures: - */ -extern int node_run(struct node_object *hnode); - -/* - * ======== node_terminate ======== - * Purpose: - * Signal a node running on the DSP that it should exit its execute - * phase function. - * Parameters: - * hnode: Node object representing a node currently - * running on the DSP. - * pstatus: Location to store execute-phase function return - * value. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -ETIME: A timeout occurred before the DSP responded. - * -EPERM: Type of node specified cannot be terminated. - * Unable to terminate the node. - * -EBADR: Operation not valid for the current node state. - * Requires: - * pstatus != NULL. - * Ensures: - */ -extern int node_terminate(struct node_object *hnode, - int *pstatus); - -/* - * ======== node_get_uuid_props ======== - * Purpose: - * Fetch Node properties given the UUID - * Parameters: - * - */ -extern int node_get_uuid_props(void *hprocessor, - const struct dsp_uuid *node_uuid, - struct dsp_ndbprops - *node_props); - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/** - * node_find_addr() - Find the closest symbol to the given address. - * - * @node_mgr: Node manager handle - * @sym_addr: Given address to find the closest symbol - * @offset_range: offset range to look fo the closest symbol - * @sym_addr_output: Symbol Output address - * @sym_name: String with the symbol name of the closest symbol - * - * This function finds the closest symbol to the address where a MMU - * Fault occurred on the DSP side. - */ -int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr, - u32 offset_range, void *sym_addr_output, - char *sym_name); - -enum node_state node_get_state(void *hnode); -#endif - -#endif /* NODE_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/nodedefs.h b/drivers/staging/tidspbridge/include/dspbridge/nodedefs.h deleted file mode 100644 index fb9623d8a79a..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/nodedefs.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * nodedefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global NODE constants and types, shared by PROCESSOR, NODE, and DISP. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef NODEDEFS_ -#define NODEDEFS_ - -#define NODE_SUSPENDEDPRI -1 - -/* NODE Objects: */ -struct node_mgr; -struct node_object; - -#endif /* NODEDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/nodepriv.h b/drivers/staging/tidspbridge/include/dspbridge/nodepriv.h deleted file mode 100644 index d5b54bb81e8e..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/nodepriv.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * nodepriv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Private node header shared by NODE and DISP. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef NODEPRIV_ -#define NODEPRIV_ - -#include -#include -#include - -/* DSP address of node environment structure */ -typedef u32 nodeenv; - -/* - * Node create structures - */ - -/* Message node */ -struct node_msgargs { - u32 max_msgs; /* Max # of simultaneous messages for node */ - u32 seg_id; /* Segment for allocating message buffers */ - u32 notify_type; /* Notify type (SEM_post, SWI_post, etc.) */ - u32 arg_length; /* Length in 32-bit words of arg data block */ - u8 *pdata; /* Argument data for node */ -}; - -struct node_strmdef { - u32 buf_size; /* Size of buffers for SIO stream */ - u32 num_bufs; /* max # of buffers in SIO stream at once */ - u32 seg_id; /* Memory segment id to allocate buffers */ - u32 timeout; /* Timeout for blocking SIO calls */ - u32 buf_alignment; /* Buffer alignment */ - char *sz_device; /* Device name for stream */ -}; - -/* Task node */ -struct node_taskargs { - struct node_msgargs node_msg_args; - s32 prio; - u32 stack_size; - u32 sys_stack_size; - u32 stack_seg; - u32 dsp_heap_res_addr; /* DSP virtual heap address */ - u32 dsp_heap_addr; /* DSP virtual heap address */ - u32 heap_size; /* Heap size */ - u32 gpp_heap_addr; /* GPP virtual heap address */ - u32 profile_id; /* Profile ID */ - u32 num_inputs; - u32 num_outputs; - u32 dais_arg; /* Address of iAlg object */ - struct node_strmdef *strm_in_def; - struct node_strmdef *strm_out_def; -}; - -/* - * ======== node_createargs ======== - */ -struct node_createargs { - union { - struct node_msgargs node_msg_args; - struct node_taskargs task_arg_obj; - } asa; -}; - -/* - * ======== node_get_channel_id ======== - * Purpose: - * Get the channel index reserved for a stream connection between the - * host and a node. This index is reserved when node_connect() is called - * to connect the node with the host. This index should be passed to - * the CHNL_Open function when the stream is actually opened. - * Parameters: - * hnode: Node object allocated from node_allocate(). - * dir: Input (DSP_TONODE) or output (DSP_FROMNODE). - * index: Stream index. - * chan_id: Location to store channel index. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: Not a task or DAIS socket node. - * -EINVAL: The node's stream corresponding to index and dir - * is not a stream to or from the host. - * Requires: - * Valid dir. - * chan_id != NULL. - * Ensures: - */ -extern int node_get_channel_id(struct node_object *hnode, - u32 dir, u32 index, u32 *chan_id); - -/* - * ======== node_get_strm_mgr ======== - * Purpose: - * Get the STRM manager for a node. - * Parameters: - * hnode: Node allocated with node_allocate(). - * strm_man: Location to store STRM manager on output. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * Requires: - * strm_man != NULL. - * Ensures: - */ -extern int node_get_strm_mgr(struct node_object *hnode, - struct strm_mgr **strm_man); - -/* - * ======== node_get_timeout ======== - * Purpose: - * Get the timeout value of a node. - * Parameters: - * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE. - * Returns: - * Node's timeout value. - * Requires: - * Valid hnode. - * Ensures: - */ -extern u32 node_get_timeout(struct node_object *hnode); - -/* - * ======== node_get_type ======== - * Purpose: - * Get the type (device, message, task, or XDAIS socket) of a node. - * Parameters: - * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE. - * Returns: - * Node type: NODE_DEVICE, NODE_TASK, NODE_XDAIS, or NODE_GPP. - * Requires: - * Valid hnode. - * Ensures: - */ -extern enum node_type node_get_type(struct node_object *hnode); - -/* - * ======== get_node_info ======== - * Purpose: - * Get node information without holding semaphore. - * Parameters: - * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE. - * Returns: - * Node info: priority, device owner, no. of streams, execution state - * NDB properties. - * Requires: - * Valid hnode. - * Ensures: - */ -extern void get_node_info(struct node_object *hnode, - struct dsp_nodeinfo *node_info); - -/* - * ======== node_get_load_type ======== - * Purpose: - * Get the load type (dynamic, overlay, static) of a node. - * Parameters: - * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE. - * Returns: - * Node type: NLDR_DYNAMICLOAD, NLDR_OVLYLOAD, NLDR_STATICLOAD - * Requires: - * Valid hnode. - * Ensures: - */ -extern enum nldr_loadtype node_get_load_type(struct node_object *hnode); - -#endif /* NODEPRIV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/ntfy.h b/drivers/staging/tidspbridge/include/dspbridge/ntfy.h deleted file mode 100644 index 6bb94d20e99a..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/ntfy.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * ntfy.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Manage lists of notification events. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef NTFY_ -#define NTFY_ - -#include -#include -#include - -/** - * ntfy_object - head structure to nofify dspbridge events - * @head: List of notify objects - * @ntfy_lock: lock for list access. - * - */ -struct ntfy_object { - struct raw_notifier_head head;/* List of notifier objects */ - spinlock_t ntfy_lock; /* For critical sections */ -}; - -/** - * ntfy_event - structure store specify event to be notified - * @noti_block: List of notify objects - * @event: event that it respond - * @type: event type (only DSP_SIGNALEVENT supported) - * @sync_obj: sync_event used to set the event - * - */ -struct ntfy_event { - struct notifier_block noti_block; - u32 event; /* Events to be notified about */ - u32 type; /* Type of notification to be sent */ - struct sync_object sync_obj; -}; - - -/** - * dsp_notifier_event() - callback function to nofity events - * @this: pointer to itself struct notifier_block - * @event: event to be notified. - * @data: Currently not used. - * - */ -int dsp_notifier_event(struct notifier_block *this, unsigned long event, - void *data); - -/** - * ntfy_init() - Set the initial state of the ntfy_object structure. - * @no: pointer to ntfy_object structure. - * - * This function sets the initial state of the ntfy_object in order it - * can be used by the other ntfy functions. - */ - -static inline void ntfy_init(struct ntfy_object *no) -{ - spin_lock_init(&no->ntfy_lock); - RAW_INIT_NOTIFIER_HEAD(&no->head); -} - -/** - * ntfy_delete() - delete list of nofy events registered. - * @ntfy_obj: Pointer to the ntfy object structure. - * - * This function is used to remove all the notify events registered. - * unregister function is not needed in this function, to unregister - * a ntfy_event please look at ntfy_register function. - * - */ -static inline void ntfy_delete(struct ntfy_object *ntfy_obj) -{ - struct ntfy_event *ne; - struct notifier_block *nb; - - spin_lock_bh(&ntfy_obj->ntfy_lock); - nb = ntfy_obj->head.head; - while (nb) { - ne = container_of(nb, struct ntfy_event, noti_block); - nb = nb->next; - kfree(ne); - } - spin_unlock_bh(&ntfy_obj->ntfy_lock); -} - -/** - * ntfy_notify() - nofity all event register for an specific event. - * @ntfy_obj: Pointer to the ntfy_object structure. - * @event: event to be notified. - * - * This function traverses all the ntfy events registers and - * set the event with mach with @event. - */ -static inline void ntfy_notify(struct ntfy_object *ntfy_obj, u32 event) -{ - spin_lock_bh(&ntfy_obj->ntfy_lock); - raw_notifier_call_chain(&ntfy_obj->head, event, NULL); - spin_unlock_bh(&ntfy_obj->ntfy_lock); -} - - - -/** - * ntfy_init() - Create and initialize a ntfy_event structure. - * @event: event that the ntfy event will respond - * @type event type (only DSP_SIGNALEVENT supported) - * - * This function create a ntfy_event element and sets the event it will - * respond the ntfy_event in order it can be used by the other ntfy functions. - * In case of success it will return a pointer to the ntfy_event struct - * created. Otherwise it will return NULL; - */ - -static inline struct ntfy_event *ntfy_event_create(u32 event, u32 type) -{ - struct ntfy_event *ne; - ne = kmalloc(sizeof(struct ntfy_event), GFP_KERNEL); - if (ne) { - sync_init_event(&ne->sync_obj); - ne->noti_block.notifier_call = dsp_notifier_event; - ne->event = event; - ne->type = type; - } - return ne; -} - -/** - * ntfy_register() - register new ntfy_event into a given ntfy_object - * @ntfy_obj: Pointer to the ntfy_object structure. - * @noti: Pointer to the handle to be returned to the user space. - * @event event that the ntfy event will respond - * @type event type (only DSP_SIGNALEVENT supported) - * - * This function register a new ntfy_event into the ntfy_object list, - * which will respond to the @event passed. - * This function will return 0 in case of error. - * -EFAULT in case of bad pointers and - * DSP_EMemory in case of no memory to create ntfy_event. - */ -static inline int ntfy_register(struct ntfy_object *ntfy_obj, - struct dsp_notification *noti, - u32 event, u32 type) -{ - struct ntfy_event *ne; - int status = 0; - - if (!noti || !ntfy_obj) { - status = -EFAULT; - goto func_end; - } - if (!event) { - status = -EINVAL; - goto func_end; - } - ne = ntfy_event_create(event, type); - if (!ne) { - status = -ENOMEM; - goto func_end; - } - noti->handle = &ne->sync_obj; - - spin_lock_bh(&ntfy_obj->ntfy_lock); - raw_notifier_chain_register(&ntfy_obj->head, &ne->noti_block); - spin_unlock_bh(&ntfy_obj->ntfy_lock); -func_end: - return status; -} - -/** - * ntfy_unregister() - unregister a ntfy_event from a given ntfy_object - * @ntfy_obj: Pointer to the ntfy_object structure. - * @noti: Pointer to the event that will be removed. - * - * This function unregister a ntfy_event from the ntfy_object list, - * @noti contains the event which is wanted to be removed. - * This function will return 0 in case of error. - * -EFAULT in case of bad pointers and - * DSP_EMemory in case of no memory to create ntfy_event. - */ -static inline int ntfy_unregister(struct ntfy_object *ntfy_obj, - struct dsp_notification *noti) -{ - int status = 0; - struct ntfy_event *ne; - - if (!noti || !ntfy_obj) { - status = -EFAULT; - goto func_end; - } - - ne = container_of((struct sync_object *)noti, struct ntfy_event, - sync_obj); - spin_lock_bh(&ntfy_obj->ntfy_lock); - raw_notifier_chain_unregister(&ntfy_obj->head, - &ne->noti_block); - kfree(ne); - spin_unlock_bh(&ntfy_obj->ntfy_lock); -func_end: - return status; -} - -#endif /* NTFY_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/proc.h b/drivers/staging/tidspbridge/include/dspbridge/proc.h deleted file mode 100644 index 64c2457aae95..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/proc.h +++ /dev/null @@ -1,591 +0,0 @@ -/* - * proc.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This is the DSP API RM module interface. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef PROC_ -#define PROC_ - -#include -#include -#include - -/* - * ======== proc_attach ======== - * Purpose: - * Prepare for communication with a particular DSP processor, and return - * a handle to the processor object. The PROC Object gets created - * Parameters: - * processor_id : The processor index (zero-based). - * hmgr_obj : Handle to the Manager Object - * attr_in : Ptr to the dsp_processorattrin structure. - * A NULL value means use default values. - * ph_processor : Ptr to location to store processor handle. - * Returns: - * 0 : Success. - * -EPERM : General failure. - * -EFAULT : Invalid processor handle. - * 0: Success; Processor already attached. - * Requires: - * ph_processor != NULL. - * PROC Initialized. - * Ensures: - * -EPERM, and *ph_processor == NULL, OR - * Success and *ph_processor is a Valid Processor handle OR - * 0 and *ph_processor is a Valid Processor. - * Details: - * When attr_in is NULL, the default timeout value is 10 seconds. - */ -extern int proc_attach(u32 processor_id, - const struct dsp_processorattrin - *attr_in, void **ph_processor, - struct process_context *pr_ctxt); - -/* - * ======== proc_auto_start ========= - * Purpose: - * A Particular device gets loaded with the default image - * if the AutoStart flag is set. - * Parameters: - * hdev_obj : Handle to the Device - * Returns: - * 0 : On Successful Loading - * -ENOENT : No DSP exec file found. - * -EPERM : General Failure - * Requires: - * hdev_obj != NULL. - * dev_node_obj != NULL. - * PROC Initialized. - * Ensures: - */ -extern int proc_auto_start(struct cfg_devnode *dev_node_obj, - struct dev_object *hdev_obj); - -/* - * ======== proc_ctrl ======== - * Purpose: - * Pass control information to the GPP device driver managing the DSP - * processor. This will be an OEM-only function, and not part of the - * 'Bridge application developer's API. - * Parameters: - * hprocessor : The processor handle. - * dw_cmd : Private driver IOCTL cmd ID. - * pargs : Ptr to an driver defined argument structure. - * Returns: - * 0 : SUCCESS - * -EFAULT : Invalid processor handle. - * -ETIME: A Timeout Occurred before the Control information - * could be sent. - * -EPERM : General Failure. - * Requires: - * PROC Initialized. - * Ensures - * Details: - * This function Calls bridge_dev_ctrl. - */ -extern int proc_ctrl(void *hprocessor, - u32 dw_cmd, struct dsp_cbdata *arg); - -/* - * ======== proc_detach ======== - * Purpose: - * Close a DSP processor and de-allocate all (GPP) resources reserved - * for it. The Processor Object is deleted. - * Parameters: - * pr_ctxt : The processor handle. - * Returns: - * 0 : Success. - * -EFAULT : InValid Handle. - * -EPERM : General failure. - * Requires: - * PROC Initialized. - * Ensures: - * PROC Object is destroyed. - */ -extern int proc_detach(struct process_context *pr_ctxt); - -/* - * ======== proc_enum_nodes ======== - * Purpose: - * Enumerate the nodes currently allocated on a processor. - * Parameters: - * hprocessor : The processor handle. - * node_tab : The first Location of an array allocated for node - * handles. - * node_tab_size: The number of (DSP_HNODE) handles that can be held - * to the memory the client has allocated for node_tab - * pu_num_nodes : Location where DSPProcessor_EnumNodes will return - * the number of valid handles written to node_tab - * pu_allocated : Location where DSPProcessor_EnumNodes will return - * the number of nodes that are allocated on the DSP. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EINVAL : The amount of memory allocated for node_tab is - * insufficent. That is the number of nodes actually - * allocated on the DSP is greater than the value - * specified for node_tab_size. - * -EPERM : Unable to get Resource Information. - * Details: - * Requires - * pu_num_nodes is not NULL. - * pu_allocated is not NULL. - * node_tab is not NULL. - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_enum_nodes(void *hprocessor, - void **node_tab, - u32 node_tab_size, - u32 *pu_num_nodes, - u32 *pu_allocated); - -/* - * ======== proc_get_resource_info ======== - * Purpose: - * Enumerate the resources currently available on a processor. - * Parameters: - * hprocessor : The processor handle. - * resource_type: Type of resource . - * resource_info: Ptr to the dsp_resourceinfo structure. - * resource_info_size: Size of the structure. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EBADR: The processor is not in the PROC_RUNNING state. - * -ETIME: A timeout occurred before the DSP responded to the - * querry. - * -EPERM : Unable to get Resource Information - * Requires: - * resource_info is not NULL. - * Parameter resource_type is Valid.[TBD] - * resource_info_size is >= sizeof dsp_resourceinfo struct. - * PROC Initialized. - * Ensures: - * Details: - * This function currently returns - * -ENOSYS, and does not write any data to the resource_info struct. - */ -extern int proc_get_resource_info(void *hprocessor, - u32 resource_type, - struct dsp_resourceinfo - *resource_info, - u32 resource_info_size); - -/* - * ======== proc_get_dev_object ========= - * Purpose: - * Returns the DEV Hanlde for a given Processor handle - * Parameters: - * hprocessor : Processor Handle - * device_obj : Location to store the DEV Handle. - * Returns: - * 0 : Success; *device_obj has Dev handle - * -EPERM : Failure; *device_obj is zero. - * Requires: - * device_obj is not NULL - * PROC Initialized. - * Ensures: - * 0 : *device_obj is not NULL - * -EPERM : *device_obj is NULL. - */ -extern int proc_get_dev_object(void *hprocessor, - struct dev_object **device_obj); - -/* - * ======== proc_get_state ======== - * Purpose: - * Report the state of the specified DSP processor. - * Parameters: - * hprocessor : The processor handle. - * proc_state_obj : Ptr to location to store the dsp_processorstate - * structure. - * state_info_size: Size of dsp_processorstate. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure while querying processor state. - * Requires: - * proc_state_obj is not NULL - * state_info_size is >= than the size of dsp_processorstate structure. - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_get_state(void *hprocessor, struct dsp_processorstate - *proc_state_obj, u32 state_info_size); - -/* - * ======== PROC_GetProcessorID ======== - * Purpose: - * Report the state of the specified DSP processor. - * Parameters: - * hprocessor : The processor handle. - * proc_id : Processor ID - * - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure while querying processor state. - * Requires: - * proc_state_obj is not NULL - * state_info_size is >= than the size of dsp_processorstate structure. - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_get_processor_id(void *proc, u32 * proc_id); - -/* - * ======== proc_get_trace ======== - * Purpose: - * Retrieve the trace buffer from the specified DSP processor. - * Parameters: - * hprocessor : The processor handle. - * pbuf : Ptr to buffer to hold trace output. - * max_size : Maximum size of the output buffer. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure while retrieving processor trace - * Buffer. - * Requires: - * pbuf is not NULL - * max_size is > 0. - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_get_trace(void *hprocessor, u8 * pbuf, u32 max_size); - -/* - * ======== proc_load ======== - * Purpose: - * Reset a processor and load a new base program image. - * This will be an OEM-only function. - * Parameters: - * hprocessor: The processor handle. - * argc_index: The number of Arguments(strings)in the aArgV[] - * user_args: An Array of Arguments(Unicode Strings) - * user_envp: An Array of Environment settings(Unicode Strings) - * Returns: - * 0: Success. - * -ENOENT: The DSP Executable was not found. - * -EFAULT: Invalid processor handle. - * -EPERM : Unable to Load the Processor - * Requires: - * user_args is not NULL - * argc_index is > 0 - * PROC Initialized. - * Ensures: - * Success and ProcState == PROC_LOADED - * or DSP_FAILED status. - * Details: - * Does not implement access rights to control which GPP application - * can load the processor. - */ -extern int proc_load(void *hprocessor, - const s32 argc_index, const char **user_args, - const char **user_envp); - -/* - * ======== proc_register_notify ======== - * Purpose: - * Register to be notified of specific processor events - * Parameters: - * hprocessor : The processor handle. - * event_mask : Mask of types of events to be notified about. - * notify_type : Type of notification to be sent. - * hnotification: Handle to be used for notification. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle or hnotification. - * -EINVAL : Parameter event_mask is Invalid - * DSP_ENOTIMP : The notification type specified in uNotifyMask - * is not supported. - * -EPERM : Unable to register for notification. - * Requires: - * hnotification is not NULL - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_register_notify(void *hprocessor, - u32 event_mask, u32 notify_type, - struct dsp_notification - *hnotification); - -/* - * ======== proc_notify_clients ======== - * Purpose: - * Notify the Processor Clients - * Parameters: - * proc : The processor handle. - * events : Event to be notified about. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : Failure to Set or Reset the Event - * Requires: - * events is Supported or Valid type of Event - * proc is a valid handle - * PROC Initialized. - * Ensures: - */ -extern int proc_notify_clients(void *proc, u32 events); - -/* - * ======== proc_notify_all_clients ======== - * Purpose: - * Notify the Processor Clients - * Parameters: - * proc : The processor handle. - * events : Event to be notified about. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : Failure to Set or Reset the Event - * Requires: - * events is Supported or Valid type of Event - * proc is a valid handle - * PROC Initialized. - * Ensures: - * Details: - * NODE And STRM would use this function to notify their clients - * about the state changes in NODE or STRM. - */ -extern int proc_notify_all_clients(void *proc, u32 events); - -/* - * ======== proc_start ======== - * Purpose: - * Start a processor running. - * Processor must be in PROC_LOADED state. - * This will be an OEM-only function, and not part of the 'Bridge - * application developer's API. - * Parameters: - * hprocessor : The processor handle. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EBADR: Processor is not in PROC_LOADED state. - * -EPERM : Unable to start the processor. - * Requires: - * PROC Initialized. - * Ensures: - * Success and ProcState == PROC_RUNNING or DSP_FAILED status. - * Details: - */ -extern int proc_start(void *hprocessor); - -/* - * ======== proc_stop ======== - * Purpose: - * Start a processor running. - * Processor must be in PROC_LOADED state. - * This will be an OEM-only function, and not part of the 'Bridge - * application developer's API. - * Parameters: - * hprocessor : The processor handle. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EBADR: Processor is not in PROC_LOADED state. - * -EPERM : Unable to start the processor. - * Requires: - * PROC Initialized. - * Ensures: - * Success and ProcState == PROC_RUNNING or DSP_FAILED status. - * Details: - */ -extern int proc_stop(void *hprocessor); - -/* - * ======== proc_end_dma ======== - * Purpose: - * Begin a DMA transfer - * Parameters: - * hprocessor : The processor handle. - * pmpu_addr : Buffer start address - * ul_size : Buffer size - * dir : The direction of the transfer - * Requires: - * Memory was previously mapped. - */ -extern int proc_end_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, - enum dma_data_direction dir); -/* - * ======== proc_begin_dma ======== - * Purpose: - * Begin a DMA transfer - * Parameters: - * hprocessor : The processor handle. - * pmpu_addr : Buffer start address - * ul_size : Buffer size - * dir : The direction of the transfer - * Requires: - * Memory was previously mapped. - */ -extern int proc_begin_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, - enum dma_data_direction dir); - -/* - * ======== proc_flush_memory ======== - * Purpose: - * Flushes a buffer from the MPU data cache. - * Parameters: - * hprocessor : The processor handle. - * pmpu_addr : Buffer start address - * ul_size : Buffer size - * ul_flags : Reserved. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * Requires: - * PROC Initialized. - * Ensures: - * Details: - * All the arguments are currently ignored. - */ -extern int proc_flush_memory(void *hprocessor, - void *pmpu_addr, u32 ul_size, u32 ul_flags); - -/* - * ======== proc_invalidate_memory ======== - * Purpose: - * Invalidates a buffer from the MPU data cache. - * Parameters: - * hprocessor : The processor handle. - * pmpu_addr : Buffer start address - * ul_size : Buffer size - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * Requires: - * PROC Initialized. - * Ensures: - * Details: - * All the arguments are currently ignored. - */ -extern int proc_invalidate_memory(void *hprocessor, - void *pmpu_addr, u32 ul_size); - -/* - * ======== proc_map ======== - * Purpose: - * Maps a MPU buffer to DSP address space. - * Parameters: - * hprocessor : The processor handle. - * pmpu_addr : Starting address of the memory region to map. - * ul_size : Size of the memory region to map. - * req_addr : Requested DSP start address. Offset-adjusted actual - * mapped address is in the last argument. - * pp_map_addr : Ptr to DSP side mapped u8 address. - * ul_map_attr : Optional endianness attributes, virt to phys flag. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * -ENOMEM : MPU side memory allocation error. - * -ENOENT : Cannot find a reserved region starting with this - * : address. - * Requires: - * pmpu_addr is not NULL - * ul_size is not zero - * pp_map_addr is not NULL - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_map(void *hprocessor, - void *pmpu_addr, - u32 ul_size, - void *req_addr, - void **pp_map_addr, u32 ul_map_attr, - struct process_context *pr_ctxt); - -/* - * ======== proc_reserve_memory ======== - * Purpose: - * Reserve a virtually contiguous region of DSP address space. - * Parameters: - * hprocessor : The processor handle. - * ul_size : Size of the address space to reserve. - * pp_rsv_addr : Ptr to DSP side reserved u8 address. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * -ENOMEM : Cannot reserve chunk of this size. - * Requires: - * pp_rsv_addr is not NULL - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_reserve_memory(void *hprocessor, - u32 ul_size, void **pp_rsv_addr, - struct process_context *pr_ctxt); - -/* - * ======== proc_un_map ======== - * Purpose: - * Removes a MPU buffer mapping from the DSP address space. - * Parameters: - * hprocessor : The processor handle. - * map_addr : Starting address of the mapped memory region. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * -ENOENT : Cannot find a mapped region starting with this - * : address. - * Requires: - * map_addr is not NULL - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_un_map(void *hprocessor, void *map_addr, - struct process_context *pr_ctxt); - -/* - * ======== proc_un_reserve_memory ======== - * Purpose: - * Frees a previously reserved region of DSP address space. - * Parameters: - * hprocessor : The processor handle. - * prsv_addr : Ptr to DSP side reservedBYTE address. - * Returns: - * 0 : Success. - * -EFAULT : Invalid processor handle. - * -EPERM : General failure. - * -ENOENT : Cannot find a reserved region starting with this - * : address. - * Requires: - * prsv_addr is not NULL - * PROC Initialized. - * Ensures: - * Details: - */ -extern int proc_un_reserve_memory(void *hprocessor, - void *prsv_addr, - struct process_context *pr_ctxt); - -#endif /* PROC_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/procpriv.h b/drivers/staging/tidspbridge/include/dspbridge/procpriv.h deleted file mode 100644 index 77d1f0ef95c3..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/procpriv.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * procpriv.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global PROC constants and types, shared by PROC, MGR and DSP API. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef PROCPRIV_ -#define PROCPRIV_ - -/* RM PROC Object */ -struct proc_object; - -#endif /* PROCPRIV_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/pwr.h b/drivers/staging/tidspbridge/include/dspbridge/pwr.h deleted file mode 100644 index 0fb066488da9..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/pwr.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * pwr.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef PWR_ -#define PWR_ - -#include -#include - -/* valid sleep command codes that can be sent by GPP via mailbox: */ -#define PWR_DEEPSLEEP MBX_PM_DSPIDLE -#define PWR_EMERGENCYDEEPSLEEP MBX_PM_EMERGENCYSLEEP -#define PWR_WAKEUP MBX_PM_DSPWAKEUP - - -/* - * ======== pwr_sleep_dsp ======== - * Signal the DSP to go to sleep. - * - * Parameters: - * sleep_code: New sleep state for DSP. (Initially, valid codes - * are PWR_DEEPSLEEP or PWR_EMERGENCYDEEPSLEEP; both of - * these codes will simply put the DSP in deep sleep.) - * - * timeout: Maximum time (msec) that PWR should wait for - * confirmation that the DSP sleep state has been - * reached. If PWR should simply send the command to - * the DSP to go to sleep and then return (i.e., - * asynchrounous sleep), the timeout should be - * specified as zero. - * - * Returns: - * 0: Success. - * 0: Success, but the DSP was already asleep. - * -EINVAL: The specified sleep_code is not supported. - * -ETIME: A timeout occurred while waiting for DSP sleep - * confirmation. - * -EPERM: General failure, unable to send sleep command to - * the DSP. - */ -extern int pwr_sleep_dsp(const u32 sleep_code, const u32 timeout); - -/* - * ======== pwr_wake_dsp ======== - * Signal the DSP to wake from sleep. - * - * Parameters: - * timeout: Maximum time (msec) that PWR should wait for - * confirmation that the DSP is awake. If PWR should - * simply send a command to the DSP to wake and then - * return (i.e., asynchrounous wake), timeout should - * be specified as zero. - * - * Returns: - * 0: Success. - * 0: Success, but the DSP was already awake. - * -ETIME: A timeout occurred while waiting for wake - * confirmation. - * -EPERM: General failure, unable to send wake command to - * the DSP. - */ -extern int pwr_wake_dsp(const u32 timeout); - -/* - * ======== pwr_pm_pre_scale ======== - * Prescale notification to DSP. - * - * Parameters: - * voltage_domain: The voltage domain for which notification is sent - * level: The level of voltage domain - * - * Returns: - * 0: Success. - * 0: Success, but the DSP was already awake. - * -ETIME: A timeout occurred while waiting for wake - * confirmation. - * -EPERM: General failure, unable to send wake command to - * the DSP. - */ -extern int pwr_pm_pre_scale(u16 voltage_domain, u32 level); - -/* - * ======== pwr_pm_post_scale ======== - * PostScale notification to DSP. - * - * Parameters: - * voltage_domain: The voltage domain for which notification is sent - * level: The level of voltage domain - * - * Returns: - * 0: Success. - * 0: Success, but the DSP was already awake. - * -ETIME: A timeout occurred while waiting for wake - * confirmation. - * -EPERM: General failure, unable to send wake command to - * the DSP. - */ -extern int pwr_pm_post_scale(u16 voltage_domain, u32 level); - -#endif /* PWR_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h b/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h deleted file mode 100644 index 8c9c902a0432..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * resourcecleanup.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include - -extern int drv_remove_all_dmm_res_elements(void *process_ctxt); - -extern int drv_remove_all_node_res_elements(void *process_ctxt); - -extern int drv_remove_all_resources(void *process_ctxt); - -extern int drv_insert_node_res_element(void *hnode, void *node_resource, - void *process_ctxt); - -extern void drv_proc_node_update_heap_status(void *node_resource, s32 status); - -extern void drv_proc_node_update_status(void *node_resource, s32 status); - -extern int drv_proc_update_strm_res(u32 num_bufs, void *strm_resources); - -extern int drv_proc_insert_strm_res_element(void *stream_obj, - void *strm_res, - void *process_ctxt); - -extern int drv_remove_all_strm_res_elements(void *process_ctxt); - -extern enum node_state node_get_state(void *hnode); diff --git a/drivers/staging/tidspbridge/include/dspbridge/rmm.h b/drivers/staging/tidspbridge/include/dspbridge/rmm.h deleted file mode 100644 index f7a4dc8ecb4f..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/rmm.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * rmm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This memory manager provides general heap management and arbitrary - * alignment for any number of memory segments, and management of overlay - * memory. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef RMM_ -#define RMM_ - -/* - * ======== rmm_addr ======== - * DSP address + segid - */ -struct rmm_addr { - u32 addr; - s32 segid; -}; - -/* - * ======== rmm_segment ======== - * Memory segment on the DSP available for remote allocations. - */ -struct rmm_segment { - u32 base; /* Base of the segment */ - u32 length; /* Size of the segment (target MAUs) */ - s32 space; /* Code or data */ - u32 number; /* Number of Allocated Blocks */ -}; - -/* - * ======== RMM_Target ======== - */ -struct rmm_target_obj; - -/* - * ======== rmm_alloc ======== - * - * rmm_alloc is used to remotely allocate or reserve memory on the DSP. - * - * Parameters: - * target - Target returned from rmm_create(). - * segid - Memory segment to allocate from. - * size - Size (target MAUS) to allocate. - * align - alignment. - * dsp_address - If reserve is FALSE, the location to store allocated - * address on output, otherwise, the DSP address to - * reserve. - * reserve - If TRUE, reserve the memory specified by dsp_address. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation on GPP failed. - * -ENXIO: Cannot "allocate" overlay memory because it's - * already in use. - * Requires: - * RMM initialized. - * Valid target. - * dsp_address != NULL. - * size > 0 - * reserve || target->num_segs > 0. - * Ensures: - */ -extern int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - u32 align, u32 *dsp_address, bool reserve); - -/* - * ======== rmm_create ======== - * Create a target object with memory segments for remote allocation. If - * seg_tab == NULL or num_segs == 0, memory can only be reserved through - * rmm_alloc(). - * - * Parameters: - * target_obj: - Location to store target on output. - * seg_tab: - Table of memory segments. - * num_segs: - Number of memory segments. - * Returns: - * 0: Success. - * -ENOMEM: Memory allocation failed. - * Requires: - * RMM initialized. - * target_obj != NULL. - * num_segs == 0 || seg_tab != NULL. - * Ensures: - * Success: Valid *target_obj. - * Failure: *target_obj == NULL. - */ -extern int rmm_create(struct rmm_target_obj **target_obj, - struct rmm_segment seg_tab[], u32 num_segs); - -/* - * ======== rmm_delete ======== - * Delete target allocated in rmm_create(). - * - * Parameters: - * target - Target returned from rmm_create(). - * Returns: - * Requires: - * RMM initialized. - * Valid target. - * Ensures: - */ -extern void rmm_delete(struct rmm_target_obj *target); - -/* - * ======== rmm_free ======== - * Free or unreserve memory allocated through rmm_alloc(). - * - * Parameters: - * target: - Target returned from rmm_create(). - * segid: - Segment of memory to free. - * dsp_address: - Address to free or unreserve. - * size: - Size of memory to free or unreserve. - * reserved: - TRUE if memory was reserved only, otherwise FALSE. - * Returns: - * Requires: - * RMM initialized. - * Valid target. - * reserved || segid < target->num_segs. - * reserve || [dsp_address, dsp_address + size] is a valid memory range. - * Ensures: - */ -extern bool rmm_free(struct rmm_target_obj *target, u32 segid, u32 dsp_addr, - u32 size, bool reserved); - -/* - * ======== rmm_stat ======== - * Obtain memory segment status - * - * Parameters: - * segid: Segment ID of the dynamic loading segment. - * mem_stat_buf: Pointer to allocated buffer into which memory stats are - * placed. - * Returns: - * TRUE: Success. - * FALSE: Failure. - * Requires: - * segid < target->num_segs - * Ensures: - */ -extern bool rmm_stat(struct rmm_target_obj *target, enum dsp_memtype segid, - struct dsp_memstat *mem_stat_buf); - -#endif /* RMM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h b/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h deleted file mode 100644 index ba7f47845673..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * rms_sh.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Resource Manager Server shared definitions (used on both - * GPP and DSP sides). - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef RMS_SH_ -#define RMS_SH_ - -#include - -/* Memory Types: */ -#define RMS_CODE 0 /* Program space */ -#define RMS_DATA 1 /* Data space */ - -/* RM Server Command and Response Buffer Sizes: */ -#define RMS_COMMANDBUFSIZE 256 /* Size of command buffer */ - -/* Pre-Defined Command/Response Codes: */ -#define RMS_EXIT 0x80000000 /* GPP->Node: shutdown */ -#define RMS_EXITACK 0x40000000 /* Node->GPP: ack shutdown */ -#define RMS_BUFDESC 0x20000000 /* Arg1 SM buf, Arg2 SM size */ -#define RMS_KILLTASK 0x10000000 /* GPP->Node: Kill Task */ - -/* RM Server RPC Command Structure: */ -struct rms_command { - rms_word fxn; /* Server function address */ - rms_word arg1; /* First argument */ - rms_word arg2; /* Second argument */ - rms_word data; /* Function-specific data array */ -}; - -/* - * The rms_strm_def structure defines the parameters for both input and output - * streams, and is passed to a node's create function. - */ -struct rms_strm_def { - rms_word bufsize; /* Buffer size (in DSP words) */ - rms_word nbufs; /* Max number of bufs in stream */ - rms_word segid; /* Segment to allocate buffers */ - rms_word align; /* Alignment for allocated buffers */ - rms_word timeout; /* Timeout (msec) for blocking calls */ - char name[1]; /* Device Name (terminated by '\0') */ -}; - -/* Message node create args structure: */ -struct rms_msg_args { - rms_word max_msgs; /* Max # simultaneous msgs to node */ - rms_word segid; /* Mem segment for NODE_allocMsgBuf */ - rms_word notify_type; /* Type of message notification */ - rms_word arg_length; /* Length (in DSP chars) of arg data */ - rms_word arg_data; /* Arg data for node */ -}; - -/* Partial task create args structure */ -struct rms_more_task_args { - rms_word priority; /* Task's runtime priority level */ - rms_word stack_size; /* Task's stack size */ - rms_word sysstack_size; /* Task's system stack size (55x) */ - rms_word stack_seg; /* Memory segment for task's stack */ - rms_word heap_addr; /* base address of the node memory heap in - * external memory (DSP virtual address) */ - rms_word heap_size; /* size in MAUs of the node memory heap in - * external memory */ - rms_word misc; /* Misc field. Not used for 'normal' - * task nodes; for xDAIS socket nodes - * specifies the IALG_Fxn pointer. - */ - /* # input STRM definition structures */ - rms_word num_input_streams; -}; - -#endif /* RMS_SH_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/rmstypes.h b/drivers/staging/tidspbridge/include/dspbridge/rmstypes.h deleted file mode 100644 index 83c0f1d9619e..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/rmstypes.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * rmstypes.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Resource Manager Server shared data type definitions. - * - * Copyright (C) 2008 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef RMSTYPES_ -#define RMSTYPES_ -#include -typedef u32 rms_word; - -#endif /* RMSTYPES_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/strm.h b/drivers/staging/tidspbridge/include/dspbridge/strm.h deleted file mode 100644 index 97aee4c63d24..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/strm.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * strm.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSPBridge Stream Manager. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef STRM_ -#define STRM_ - -#include - -#include -#include - -/* - * ======== strm_allocate_buffer ======== - * Purpose: - * Allocate data buffer(s) for use with a stream. - * Parameter: - * strmres: Stream resource info handle returned from strm_open(). - * usize: Size (GPP bytes) of the buffer(s). - * num_bufs: Number of buffers to allocate. - * ap_buffer: Array to hold buffer addresses. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -ENOMEM: Insufficient memory. - * -EPERM: Failure occurred, unable to allocate buffers. - * -EINVAL: usize must be > 0 bytes. - * Requires: - * ap_buffer != NULL. - * Ensures: - */ -extern int strm_allocate_buffer(struct strm_res_object *strmres, - u32 usize, - u8 **ap_buffer, - u32 num_bufs, - struct process_context *pr_ctxt); - -/* - * ======== strm_close ======== - * Purpose: - * Close a stream opened with strm_open(). - * Parameter: - * strmres: Stream resource info handle returned from strm_open(). - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -EPIPE: Some data buffers issued to the stream have not - * been reclaimed. - * -EPERM: Failure to close stream. - * Requires: - * Ensures: - */ -extern int strm_close(struct strm_res_object *strmres, - struct process_context *pr_ctxt); - -/* - * ======== strm_create ======== - * Purpose: - * Create a STRM manager object. This object holds information about the - * device needed to open streams. - * Parameters: - * strm_man: Location to store handle to STRM manager object on - * output. - * dev_obj: Device for this processor. - * Returns: - * 0: Success; - * -ENOMEM: Insufficient memory for requested resources. - * -EPERM: General failure. - * Requires: - * strm_man != NULL. - * dev_obj != NULL. - * Ensures: - * 0: Valid *strm_man. - * error: *strm_man == NULL. - */ -extern int strm_create(struct strm_mgr **strm_man, - struct dev_object *dev_obj); - -/* - * ======== strm_delete ======== - * Purpose: - * Delete the STRM Object. - * Parameters: - * strm_mgr_obj: Handle to STRM manager object from strm_create. - * Returns: - * Requires: - * Valid strm_mgr_obj. - * Ensures: - * strm_mgr_obj is not valid. - */ -extern void strm_delete(struct strm_mgr *strm_mgr_obj); - -/* - * ======== strm_free_buffer ======== - * Purpose: - * Free buffer(s) allocated with strm_allocate_buffer. - * Parameter: - * strmres: Stream resource info handle returned from strm_open(). - * ap_buffer: Array containing buffer addresses. - * num_bufs: Number of buffers to be freed. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream handle. - * -EPERM: Failure occurred, unable to free buffers. - * Requires: - * ap_buffer != NULL. - * Ensures: - */ -extern int strm_free_buffer(struct strm_res_object *strmres, - u8 **ap_buffer, u32 num_bufs, - struct process_context *pr_ctxt); - -/* - * ======== strm_get_info ======== - * Purpose: - * Get information about a stream. User's dsp_streaminfo is contained - * in stream_info struct. stream_info also contains Bridge private info. - * Parameters: - * stream_obj: Stream handle returned from strm_open(). - * stream_info: Location to store stream info on output. - * uSteamInfoSize: Size of user's dsp_streaminfo structure. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -EINVAL: stream_info_size < sizeof(dsp_streaminfo). - * -EPERM: Unable to get stream info. - * Requires: - * stream_info != NULL. - * Ensures: - */ -extern int strm_get_info(struct strm_object *stream_obj, - struct stream_info *stream_info, - u32 stream_info_size); - -/* - * ======== strm_idle ======== - * Purpose: - * Idle a stream and optionally flush output data buffers. - * If this is an output stream and flush_data is TRUE, all data currently - * enqueued will be discarded. - * If this is an output stream and flush_data is FALSE, this function - * will block until all currently buffered data is output, or the timeout - * specified has been reached. - * After a successful call to strm_idle(), all buffers can immediately - * be reclaimed. - * Parameters: - * stream_obj: Stream handle returned from strm_open(). - * flush_data: If TRUE, discard output buffers. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -ETIME: A timeout occurred before the stream could be idled. - * -EPERM: Unable to idle stream. - * Requires: - * Ensures: - */ -extern int strm_idle(struct strm_object *stream_obj, bool flush_data); - -/* - * ======== strm_issue ======== - * Purpose: - * Send a buffer of data to a stream. - * Parameters: - * stream_obj: Stream handle returned from strm_open(). - * pbuf: Pointer to buffer of data to be sent to the stream. - * ul_bytes: Number of bytes of data in the buffer. - * ul_buf_size: Actual buffer size in bytes. - * dw_arg: A user argument that travels with the buffer. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -ENOSR: The stream is full. - * -EPERM: Failure occurred, unable to issue buffer. - * Requires: -* pbuf != NULL. - * Ensures: - */ -extern int strm_issue(struct strm_object *stream_obj, u8 * pbuf, - u32 ul_bytes, u32 ul_buf_size, u32 dw_arg); - -/* - * ======== strm_open ======== - * Purpose: - * Open a stream for sending/receiving data buffers to/from a task of - * DAIS socket node on the DSP. - * Parameters: - * hnode: Node handle returned from node_allocate(). - * dir: DSP_TONODE or DSP_FROMNODE. - * index: Stream index. - * pattr: Pointer to structure containing attributes to be - * applied to stream. Cannot be NULL. - * strmres: Location to store stream resource info handle on output. - * Returns: - * 0: Success. - * -EFAULT: Invalid hnode. - * -EPERM: Invalid direction. - * hnode is not a task or DAIS socket node. - * Unable to open stream. - * -EINVAL: Invalid index. - * Requires: - * strmres != NULL. - * pattr != NULL. - * Ensures: - * 0: *strmres is valid. - * error: *strmres == NULL. - */ -extern int strm_open(struct node_object *hnode, u32 dir, - u32 index, struct strm_attr *pattr, - struct strm_res_object **strmres, - struct process_context *pr_ctxt); - -/* - * ======== strm_reclaim ======== - * Purpose: - * Request a buffer back from a stream. - * Parameters: - * stream_obj: Stream handle returned from strm_open(). - * buf_ptr: Location to store pointer to reclaimed buffer. - * nbytes: Location where number of bytes of data in the - * buffer will be written. - * buff_size: Location where actual buffer size will be written. - * pdw_arg: Location where user argument that travels with - * the buffer will be written. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -ETIME: A timeout occurred before a buffer could be - * retrieved. - * -EPERM: Failure occurred, unable to reclaim buffer. - * Requires: - * buf_ptr != NULL. - * nbytes != NULL. - * pdw_arg != NULL. - * Ensures: - */ -extern int strm_reclaim(struct strm_object *stream_obj, - u8 **buf_ptr, u32 * nbytes, - u32 *buff_size, u32 *pdw_arg); - -/* - * ======== strm_register_notify ======== - * Purpose: - * Register to be notified on specific events for this stream. - * Parameters: - * stream_obj: Stream handle returned by strm_open(). - * event_mask: Mask of types of events to be notified about. - * notify_type: Type of notification to be sent. - * hnotification: Handle to be used for notification. - * Returns: - * 0: Success. - * -EFAULT: Invalid stream_obj. - * -ENOMEM: Insufficient memory on GPP. - * -EINVAL: event_mask is invalid. - * -ENOSYS: Notification type specified by notify_type is not - * supported. - * Requires: - * hnotification != NULL. - * Ensures: - */ -extern int strm_register_notify(struct strm_object *stream_obj, - u32 event_mask, u32 notify_type, - struct dsp_notification - *hnotification); - -/* - * ======== strm_select ======== - * Purpose: - * Select a ready stream. - * Parameters: - * strm_tab: Array of stream handles returned from strm_open(). - * strms: Number of stream handles in array. - * pmask: Location to store mask of ready streams on output. - * utimeout: Timeout value (milliseconds). - * Returns: - * 0: Success. - * -EDOM: strms out of range. - - * -EFAULT: Invalid stream handle in array. - * -ETIME: A timeout occurred before a stream became ready. - * -EPERM: Failure occurred, unable to select a stream. - * Requires: - * strm_tab != NULL. - * strms > 0. - * pmask != NULL. - * Ensures: - * 0: *pmask != 0 || utimeout == 0. - * Error: *pmask == 0. - */ -extern int strm_select(struct strm_object **strm_tab, - u32 strms, u32 *pmask, u32 utimeout); - -#endif /* STRM_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h b/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h deleted file mode 100644 index 4f90e6ba69ef..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * strmdefs.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Global STRM constants and types. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef STRMDEFS_ -#define STRMDEFS_ - -struct strm_mgr; - -struct strm_object; - -struct strm_attr { - void *user_event; - char *str_event_name; - void *virt_base; /* Process virtual base address of - * mapped SM */ - u32 virt_size; /* Size of virtual space in bytes */ - struct dsp_streamattrin *stream_attr_in; -}; - -struct stream_info { - enum dsp_strmmode strm_mode; /* transport mode of - * stream(DMA, ZEROCOPY..) */ - u32 segment_id; /* Segment strm allocs from. 0 is local mem */ - void *virt_base; /* " " Stream'process virt base */ - struct dsp_streaminfo *user_strm; /* User's stream information - * returned */ -}; - -#endif /* STRMDEFS_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/sync.h b/drivers/staging/tidspbridge/include/dspbridge/sync.h deleted file mode 100644 index fc19b9707087..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/sync.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * sync.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Provide synchronization services. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef _SYNC_H -#define _SYNC_H - -#include -#include - - -/* Special timeout value indicating an infinite wait: */ -#define SYNC_INFINITE 0xffffffff - -/** - * struct sync_object - the basic sync_object structure - * @comp: use to signal events - * @multi_comp: use to signal multiple events. - * - */ -struct sync_object{ - struct completion comp; - struct completion *multi_comp; -}; - -/** - * sync_init_event() - set initial state for a sync_event element - * @event: event to be initialized. - * - * Set the initial state for a sync_event element. - */ - -static inline void sync_init_event(struct sync_object *event) -{ - init_completion(&event->comp); - event->multi_comp = NULL; -} - -/** - * sync_reset_event() - reset a sync_event element - * @event: event to be reset. - * - * This function reset to the initial state to @event. - */ - -static inline void sync_reset_event(struct sync_object *event) -{ - reinit_completion(&event->comp); - event->multi_comp = NULL; -} - -/** - * sync_set_event() - set or signal and specified event - * @event: Event to be set.. - * - * set the @event, if there is an thread waiting for the event - * it will be waken up, this function only wakes one thread. - */ - -void sync_set_event(struct sync_object *event); - -/** - * sync_wait_on_event() - waits for a event to be set. - * @event: events to wait for it. - * @timeout timeout on waiting for the evetn. - * - * This function will wait until @event is set or until timeout. In case of - * success the function will return 0 and - * in case of timeout the function will return -ETIME - * in case of signal the function will return -ERESTARTSYS - */ - -static inline int sync_wait_on_event(struct sync_object *event, - unsigned timeout) -{ - int res; - - res = wait_for_completion_interruptible_timeout(&event->comp, - msecs_to_jiffies(timeout)); - if (!res) - res = -ETIME; - else if (res > 0) - res = 0; - - return res; -} - -/** - * sync_wait_on_multiple_events() - waits for multiple events to be set. - * @events: Array of events to wait for them. - * @count: number of elements of the array. - * @timeout timeout on waiting for the evetns. - * @pu_index index of the event set. - * - * This function will wait until any of the array element is set or until - * timeout. In case of success the function will return 0 and - * @pu_index will store the index of the array element set and in case - * of timeout the function will return -ETIME. - */ - -int sync_wait_on_multiple_events(struct sync_object **events, - unsigned count, unsigned timeout, - unsigned *index); - -#endif /* _SYNC_H */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/uuidutil.h b/drivers/staging/tidspbridge/include/dspbridge/uuidutil.h deleted file mode 100644 index b4951a1381e7..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/uuidutil.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * uuidutil.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This file contains the specification of UUID helper functions. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef UUIDUTIL_ -#define UUIDUTIL_ - -#define MAXUUIDLEN 37 - -#endif /* UUIDUTIL_ */ diff --git a/drivers/staging/tidspbridge/include/dspbridge/wdt.h b/drivers/staging/tidspbridge/include/dspbridge/wdt.h deleted file mode 100644 index 36193db2e9a3..000000000000 --- a/drivers/staging/tidspbridge/include/dspbridge/wdt.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * wdt.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * IO dispatcher for a shared memory channel driver. - * - * Copyright (C) 2010 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#ifndef __DSP_WDT3_H_ -#define __DSP_WDT3_H_ - -/* WDT defines */ -#define OMAP3_WDT3_ISR_OFFSET 0x0018 - - -/** - * struct dsp_wdt_setting - the basic dsp_wdt_setting structure - * @reg_base: pointer to the base of the wdt registers - * @sm_wdt: pointer to flags in shared memory - * @wdt3_tasklet tasklet to manage wdt event - * @fclk handle to wdt3 functional clock - * @iclk handle to wdt3 interface clock - * - * This struct is used in the function to manage wdt3. - */ - -struct dsp_wdt_setting { - void __iomem *reg_base; - struct shm *sm_wdt; - struct tasklet_struct wdt3_tasklet; - struct clk *fclk; - struct clk *iclk; -}; - -/** - * dsp_wdt_init() - initialize wdt3 module. - * - * This function initialize to wdt3 module, so that - * other wdt3 function can be used. - */ -int dsp_wdt_init(void); - -/** - * dsp_wdt_exit() - initialize wdt3 module. - * - * This function frees all resources allocated for wdt3 module. - */ -void dsp_wdt_exit(void); - -/** - * dsp_wdt_enable() - enable/disable wdt3 - * @enable: bool value to enable/disable wdt3 - * - * This function enables or disables wdt3 base on @enable value. - * - */ -void dsp_wdt_enable(bool enable); - -/** - * dsp_wdt_sm_set() - store pointer to the share memory - * @data: pointer to dspbridge share memory - * - * This function is used to pass a valid pointer to share memory, - * so that the flags can be set in order DSP side can read them. - * - */ -void dsp_wdt_sm_set(void *data); - -#endif - diff --git a/drivers/staging/tidspbridge/pmgr/chnl.c b/drivers/staging/tidspbridge/pmgr/chnl.c deleted file mode 100644 index e03c32679aa5..000000000000 --- a/drivers/staging/tidspbridge/pmgr/chnl.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * chnl.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP API channel interface: multiplexes data streams through the single - * physical link managed by a Bridge Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- Others */ -#include -#include - -/* ----------------------------------- This */ -#include - -/* - * ======== chnl_create ======== - * Purpose: - * Create a channel manager object, responsible for opening new channels - * and closing old ones for a given 'Bridge board. - */ -int chnl_create(struct chnl_mgr **channel_mgr, - struct dev_object *hdev_obj, - const struct chnl_mgrattrs *mgr_attrts) -{ - int status; - struct chnl_mgr *hchnl_mgr; - struct chnl_mgr_ *chnl_mgr_obj = NULL; - - *channel_mgr = NULL; - - /* Validate args: */ - if ((0 < mgr_attrts->max_channels) && - (mgr_attrts->max_channels <= CHNL_MAXCHANNELS)) - status = 0; - else if (mgr_attrts->max_channels == 0) - status = -EINVAL; - else - status = -ECHRNG; - - if (mgr_attrts->word_size == 0) - status = -EINVAL; - - if (!status) { - status = dev_get_chnl_mgr(hdev_obj, &hchnl_mgr); - if (!status && hchnl_mgr != NULL) - status = -EEXIST; - - } - - if (!status) { - struct bridge_drv_interface *intf_fxns; - - dev_get_intf_fxns(hdev_obj, &intf_fxns); - /* Let Bridge channel module finish the create: */ - status = (*intf_fxns->chnl_create) (&hchnl_mgr, hdev_obj, - mgr_attrts); - if (!status) { - /* Fill in DSP API channel module's fields of the - * chnl_mgr structure */ - chnl_mgr_obj = (struct chnl_mgr_ *)hchnl_mgr; - chnl_mgr_obj->intf_fxns = intf_fxns; - /* Finally, return the new channel manager handle: */ - *channel_mgr = hchnl_mgr; - } - } - - return status; -} - -/* - * ======== chnl_destroy ======== - * Purpose: - * Close all open channels, and destroy the channel manager. - */ -int chnl_destroy(struct chnl_mgr *hchnl_mgr) -{ - struct chnl_mgr_ *chnl_mgr_obj = (struct chnl_mgr_ *)hchnl_mgr; - struct bridge_drv_interface *intf_fxns; - int status; - - if (chnl_mgr_obj) { - intf_fxns = chnl_mgr_obj->intf_fxns; - /* Let Bridge channel module destroy the chnl_mgr: */ - status = (*intf_fxns->chnl_destroy) (hchnl_mgr); - } else { - status = -EFAULT; - } - - return status; -} diff --git a/drivers/staging/tidspbridge/pmgr/chnlobj.h b/drivers/staging/tidspbridge/pmgr/chnlobj.h deleted file mode 100644 index 6795e0aa8fd6..000000000000 --- a/drivers/staging/tidspbridge/pmgr/chnlobj.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * chnlobj.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Structure subcomponents of channel class library channel objects which - * are exposed to DSP API from Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef CHNLOBJ_ -#define CHNLOBJ_ - -#include -#include - -/* - * This struct is the first field in a chnl_mgr struct. Other. implementation - * specific fields follow this structure in memory. - */ -struct chnl_mgr_ { - /* These must be the first fields in a chnl_mgr struct: */ - - /* Function interface to Bridge driver. */ - struct bridge_drv_interface *intf_fxns; -}; - -/* - * This struct is the first field in a chnl_object struct. Other, - * implementation specific fields follow this structure in memory. - */ -struct chnl_object_ { - /* These must be the first fields in a chnl_object struct: */ - struct chnl_mgr_ *chnl_mgr_obj; /* Pointer back to channel manager. */ -}; - -#endif /* CHNLOBJ_ */ diff --git a/drivers/staging/tidspbridge/pmgr/cmm.c b/drivers/staging/tidspbridge/pmgr/cmm.c deleted file mode 100644 index f961e0ec9da8..000000000000 --- a/drivers/staging/tidspbridge/pmgr/cmm.c +++ /dev/null @@ -1,915 +0,0 @@ -/* - * cmm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * The Communication(Shared) Memory Management(CMM) module provides - * shared memory management services for DSP/BIOS Bridge data streaming - * and messaging. - * - * Multiple shared memory segments can be registered with CMM. - * Each registered SM segment is represented by a SM "allocator" that - * describes a block of physically contiguous shared memory used for - * future allocations by CMM. - * - * Memory is coalesced back to the appropriate heap when a buffer is - * freed. - * - * Notes: - * Va: Virtual address. - * Pa: Physical or kernel system address. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define NEXT_PA(pnode) (pnode->pa + pnode->size) - -/* Other bus/platform translations */ -#define DSPPA2GPPPA(base, x, y) ((x)+(y)) -#define GPPPA2DSPPA(base, x, y) ((x)-(y)) - -/* - * Allocators define a block of contiguous memory used for future allocations. - * - * sma - shared memory allocator. - * vma - virtual memory allocator.(not used). - */ -struct cmm_allocator { /* sma */ - unsigned int shm_base; /* Start of physical SM block */ - u32 sm_size; /* Size of SM block in bytes */ - unsigned int vm_base; /* Start of VM block. (Dev driver - * context for 'sma') */ - u32 dsp_phys_addr_offset; /* DSP PA to GPP PA offset for this - * SM space */ - s8 c_factor; /* DSPPa to GPPPa Conversion Factor */ - unsigned int dsp_base; /* DSP virt base byte address */ - u32 dsp_size; /* DSP seg size in bytes */ - struct cmm_object *cmm_mgr; /* back ref to parent mgr */ - /* node list of available memory */ - struct list_head free_list; - /* node list of memory in use */ - struct list_head in_use_list; -}; - -struct cmm_xlator { /* Pa<->Va translator object */ - /* CMM object this translator associated */ - struct cmm_object *cmm_mgr; - /* - * Client process virtual base address that corresponds to phys SM - * base address for translator's seg_id. - * Only 1 segment ID currently supported. - */ - unsigned int virt_base; /* virtual base address */ - u32 virt_size; /* size of virt space in bytes */ - u32 seg_id; /* Segment Id */ -}; - -/* CMM Mgr */ -struct cmm_object { - /* - * Cmm Lock is used to serialize access mem manager for multi-threads. - */ - struct mutex cmm_lock; /* Lock to access cmm mgr */ - struct list_head node_free_list; /* Free list of memory nodes */ - u32 min_block_size; /* Min SM block; default 16 bytes */ - u32 page_size; /* Memory Page size (1k/4k) */ - /* GPP SM segment ptrs */ - struct cmm_allocator *pa_gppsm_seg_tab[CMM_MAXGPPSEGS]; -}; - -/* Default CMM Mgr attributes */ -static struct cmm_mgrattrs cmm_dfltmgrattrs = { - /* min_block_size, min block size(bytes) allocated by cmm mgr */ - 16 -}; - -/* Default allocation attributes */ -static struct cmm_attrs cmm_dfltalctattrs = { - 1 /* seg_id, default segment Id for allocator */ -}; - -/* Address translator default attrs */ -static struct cmm_xlatorattrs cmm_dfltxlatorattrs = { - /* seg_id, does not have to match cmm_dfltalctattrs ul_seg_id */ - 1, - 0, /* dsp_bufs */ - 0, /* dsp_buf_size */ - NULL, /* vm_base */ - 0, /* vm_size */ -}; - -/* SM node representing a block of memory. */ -struct cmm_mnode { - struct list_head link; /* must be 1st element */ - u32 pa; /* Phys addr */ - u32 va; /* Virtual address in device process context */ - u32 size; /* SM block size in bytes */ - u32 client_proc; /* Process that allocated this mem block */ -}; - -/* ----------------------------------- Function Prototypes */ -static void add_to_free_list(struct cmm_allocator *allocator, - struct cmm_mnode *pnode); -static struct cmm_allocator *get_allocator(struct cmm_object *cmm_mgr_obj, - u32 ul_seg_id); -static struct cmm_mnode *get_free_block(struct cmm_allocator *allocator, - u32 usize); -static struct cmm_mnode *get_node(struct cmm_object *cmm_mgr_obj, u32 dw_pa, - u32 dw_va, u32 ul_size); -/* get available slot for new allocator */ -static s32 get_slot(struct cmm_object *cmm_mgr_obj); -static void un_register_gppsm_seg(struct cmm_allocator *psma); - -/* - * ======== cmm_calloc_buf ======== - * Purpose: - * Allocate a SM buffer, zero contents, and return the physical address - * and optional driver context virtual address(pp_buf_va). - * - * The freelist is sorted in increasing size order. Get the first - * block that satifies the request and sort the remaining back on - * the freelist; if large enough. The kept block is placed on the - * inUseList. - */ -void *cmm_calloc_buf(struct cmm_object *hcmm_mgr, u32 usize, - struct cmm_attrs *pattrs, void **pp_buf_va) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - void *buf_pa = NULL; - struct cmm_mnode *pnode = NULL; - struct cmm_mnode *new_node = NULL; - struct cmm_allocator *allocator = NULL; - u32 delta_size; - u8 *pbyte = NULL; - s32 cnt; - - if (pattrs == NULL) - pattrs = &cmm_dfltalctattrs; - - if (pp_buf_va != NULL) - *pp_buf_va = NULL; - - if (cmm_mgr_obj && (usize != 0)) { - if (pattrs->seg_id > 0) { - /* SegId > 0 is SM */ - /* get the allocator object for this segment id */ - allocator = - get_allocator(cmm_mgr_obj, pattrs->seg_id); - /* keep block size a multiple of min_block_size */ - usize = - ((usize - 1) & ~(cmm_mgr_obj->min_block_size - - 1)) - + cmm_mgr_obj->min_block_size; - mutex_lock(&cmm_mgr_obj->cmm_lock); - pnode = get_free_block(allocator, usize); - } - if (pnode) { - delta_size = (pnode->size - usize); - if (delta_size >= cmm_mgr_obj->min_block_size) { - /* create a new block with the leftovers and - * add to freelist */ - new_node = - get_node(cmm_mgr_obj, pnode->pa + usize, - pnode->va + usize, - (u32) delta_size); - /* leftovers go free */ - add_to_free_list(allocator, new_node); - /* adjust our node's size */ - pnode->size = usize; - } - /* Tag node with client process requesting allocation - * We'll need to free up a process's alloc'd SM if the - * client process goes away. - */ - /* Return TGID instead of process handle */ - pnode->client_proc = current->tgid; - - /* put our node on InUse list */ - list_add_tail(&pnode->link, &allocator->in_use_list); - buf_pa = (void *)pnode->pa; /* physical address */ - /* clear mem */ - pbyte = (u8 *) pnode->va; - for (cnt = 0; cnt < (s32) usize; cnt++, pbyte++) - *pbyte = 0; - - if (pp_buf_va != NULL) { - /* Virtual address */ - *pp_buf_va = (void *)pnode->va; - } - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - } - return buf_pa; -} - -/* - * ======== cmm_create ======== - * Purpose: - * Create a communication memory manager object. - */ -int cmm_create(struct cmm_object **ph_cmm_mgr, - struct dev_object *hdev_obj, - const struct cmm_mgrattrs *mgr_attrts) -{ - struct cmm_object *cmm_obj = NULL; - int status = 0; - - *ph_cmm_mgr = NULL; - /* create, zero, and tag a cmm mgr object */ - cmm_obj = kzalloc(sizeof(struct cmm_object), GFP_KERNEL); - if (!cmm_obj) - return -ENOMEM; - - if (mgr_attrts == NULL) - mgr_attrts = &cmm_dfltmgrattrs; /* set defaults */ - - /* save away smallest block allocation for this cmm mgr */ - cmm_obj->min_block_size = mgr_attrts->min_block_size; - cmm_obj->page_size = PAGE_SIZE; - - /* create node free list */ - INIT_LIST_HEAD(&cmm_obj->node_free_list); - mutex_init(&cmm_obj->cmm_lock); - *ph_cmm_mgr = cmm_obj; - - return status; -} - -/* - * ======== cmm_destroy ======== - * Purpose: - * Release the communication memory manager resources. - */ -int cmm_destroy(struct cmm_object *hcmm_mgr, bool force) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - struct cmm_info temp_info; - int status = 0; - s32 slot_seg; - struct cmm_mnode *node, *tmp; - - if (!hcmm_mgr) { - status = -EFAULT; - return status; - } - mutex_lock(&cmm_mgr_obj->cmm_lock); - /* If not force then fail if outstanding allocations exist */ - if (!force) { - /* Check for outstanding memory allocations */ - status = cmm_get_info(hcmm_mgr, &temp_info); - if (!status) { - if (temp_info.total_in_use_cnt > 0) { - /* outstanding allocations */ - status = -EPERM; - } - } - } - if (!status) { - /* UnRegister SM allocator */ - for (slot_seg = 0; slot_seg < CMM_MAXGPPSEGS; slot_seg++) { - if (cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg] != NULL) { - un_register_gppsm_seg - (cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg]); - /* Set slot to NULL for future reuse */ - cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg] = NULL; - } - } - } - list_for_each_entry_safe(node, tmp, &cmm_mgr_obj->node_free_list, - link) { - list_del(&node->link); - kfree(node); - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - if (!status) { - /* delete CS & cmm mgr object */ - mutex_destroy(&cmm_mgr_obj->cmm_lock); - kfree(cmm_mgr_obj); - } - return status; -} - -/* - * ======== cmm_free_buf ======== - * Purpose: - * Free the given buffer. - */ -int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, u32 ul_seg_id) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - int status = -EFAULT; - struct cmm_mnode *curr, *tmp; - struct cmm_allocator *allocator; - struct cmm_attrs *pattrs; - - if (ul_seg_id == 0) { - pattrs = &cmm_dfltalctattrs; - ul_seg_id = pattrs->seg_id; - } - if (!hcmm_mgr || !(ul_seg_id > 0)) { - status = -EFAULT; - return status; - } - - allocator = get_allocator(cmm_mgr_obj, ul_seg_id); - if (!allocator) - return status; - - mutex_lock(&cmm_mgr_obj->cmm_lock); - list_for_each_entry_safe(curr, tmp, &allocator->in_use_list, link) { - if (curr->pa == (u32) buf_pa) { - list_del(&curr->link); - add_to_free_list(allocator, curr); - status = 0; - break; - } - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - - return status; -} - -/* - * ======== cmm_get_handle ======== - * Purpose: - * Return the communication memory manager object for this device. - * This is typically called from the client process. - */ -int cmm_get_handle(void *hprocessor, struct cmm_object **ph_cmm_mgr) -{ - int status = 0; - struct dev_object *hdev_obj; - - if (hprocessor != NULL) - status = proc_get_dev_object(hprocessor, &hdev_obj); - else - hdev_obj = dev_get_first(); /* default */ - - if (!status) - status = dev_get_cmm_mgr(hdev_obj, ph_cmm_mgr); - - return status; -} - -/* - * ======== cmm_get_info ======== - * Purpose: - * Return the current memory utilization information. - */ -int cmm_get_info(struct cmm_object *hcmm_mgr, - struct cmm_info *cmm_info_obj) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - u32 ul_seg; - int status = 0; - struct cmm_allocator *altr; - struct cmm_mnode *curr; - - if (!hcmm_mgr) { - status = -EFAULT; - return status; - } - mutex_lock(&cmm_mgr_obj->cmm_lock); - cmm_info_obj->num_gppsm_segs = 0; /* # of SM segments */ - /* Total # of outstanding alloc */ - cmm_info_obj->total_in_use_cnt = 0; - /* min block size */ - cmm_info_obj->min_block_size = cmm_mgr_obj->min_block_size; - /* check SM memory segments */ - for (ul_seg = 1; ul_seg <= CMM_MAXGPPSEGS; ul_seg++) { - /* get the allocator object for this segment id */ - altr = get_allocator(cmm_mgr_obj, ul_seg); - if (!altr) - continue; - cmm_info_obj->num_gppsm_segs++; - cmm_info_obj->seg_info[ul_seg - 1].seg_base_pa = - altr->shm_base - altr->dsp_size; - cmm_info_obj->seg_info[ul_seg - 1].total_seg_size = - altr->dsp_size + altr->sm_size; - cmm_info_obj->seg_info[ul_seg - 1].gpp_base_pa = - altr->shm_base; - cmm_info_obj->seg_info[ul_seg - 1].gpp_size = - altr->sm_size; - cmm_info_obj->seg_info[ul_seg - 1].dsp_base_va = - altr->dsp_base; - cmm_info_obj->seg_info[ul_seg - 1].dsp_size = - altr->dsp_size; - cmm_info_obj->seg_info[ul_seg - 1].seg_base_va = - altr->vm_base - altr->dsp_size; - cmm_info_obj->seg_info[ul_seg - 1].in_use_cnt = 0; - - list_for_each_entry(curr, &altr->in_use_list, link) { - cmm_info_obj->total_in_use_cnt++; - cmm_info_obj->seg_info[ul_seg - 1].in_use_cnt++; - } - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - return status; -} - -/* - * ======== cmm_register_gppsm_seg ======== - * Purpose: - * Register a block of SM with the CMM to be used for later GPP SM - * allocations. - */ -int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - u32 dw_gpp_base_pa, u32 ul_size, - u32 dsp_addr_offset, s8 c_factor, - u32 dw_dsp_base, u32 ul_dsp_size, - u32 *sgmt_id, u32 gpp_base_va) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - struct cmm_allocator *psma = NULL; - int status = 0; - struct cmm_mnode *new_node; - s32 slot_seg; - - dev_dbg(bridge, "%s: dw_gpp_base_pa %x ul_size %x dsp_addr_offset %x dw_dsp_base %x ul_dsp_size %x gpp_base_va %x\n", - __func__, dw_gpp_base_pa, ul_size, dsp_addr_offset, - dw_dsp_base, ul_dsp_size, gpp_base_va); - - if (!hcmm_mgr) - return -EFAULT; - - /* make sure we have room for another allocator */ - mutex_lock(&cmm_mgr_obj->cmm_lock); - - slot_seg = get_slot(cmm_mgr_obj); - if (slot_seg < 0) { - status = -EPERM; - goto func_end; - } - - /* Check if input ul_size is big enough to alloc at least one block */ - if (ul_size < cmm_mgr_obj->min_block_size) { - status = -EINVAL; - goto func_end; - } - - /* create, zero, and tag an SM allocator object */ - psma = kzalloc(sizeof(struct cmm_allocator), GFP_KERNEL); - if (!psma) { - status = -ENOMEM; - goto func_end; - } - - psma->cmm_mgr = hcmm_mgr; /* ref to parent */ - psma->shm_base = dw_gpp_base_pa; /* SM Base phys */ - psma->sm_size = ul_size; /* SM segment size in bytes */ - psma->vm_base = gpp_base_va; - psma->dsp_phys_addr_offset = dsp_addr_offset; - psma->c_factor = c_factor; - psma->dsp_base = dw_dsp_base; - psma->dsp_size = ul_dsp_size; - if (psma->vm_base == 0) { - status = -EPERM; - goto func_end; - } - /* return the actual segment identifier */ - *sgmt_id = (u32) slot_seg + 1; - - INIT_LIST_HEAD(&psma->free_list); - INIT_LIST_HEAD(&psma->in_use_list); - - /* Get a mem node for this hunk-o-memory */ - new_node = get_node(cmm_mgr_obj, dw_gpp_base_pa, - psma->vm_base, ul_size); - /* Place node on the SM allocator's free list */ - if (new_node) { - list_add_tail(&new_node->link, &psma->free_list); - } else { - status = -ENOMEM; - goto func_end; - } - /* make entry */ - cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg] = psma; - -func_end: - /* Cleanup allocator */ - if (status && psma) - un_register_gppsm_seg(psma); - mutex_unlock(&cmm_mgr_obj->cmm_lock); - - return status; -} - -/* - * ======== cmm_un_register_gppsm_seg ======== - * Purpose: - * UnRegister GPP SM segments with the CMM. - */ -int cmm_un_register_gppsm_seg(struct cmm_object *hcmm_mgr, - u32 ul_seg_id) -{ - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - int status = 0; - struct cmm_allocator *psma; - u32 ul_id = ul_seg_id; - - if (!hcmm_mgr) - return -EFAULT; - - if (ul_seg_id == CMM_ALLSEGMENTS) - ul_id = 1; - - if ((ul_id <= 0) || (ul_id > CMM_MAXGPPSEGS)) - return -EINVAL; - - /* - * FIXME: CMM_MAXGPPSEGS == 1. why use a while cycle? Seems to me like - * the ul_seg_id is not needed here. It must be always 1. - */ - while (ul_id <= CMM_MAXGPPSEGS) { - mutex_lock(&cmm_mgr_obj->cmm_lock); - /* slot = seg_id-1 */ - psma = cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - 1]; - if (psma != NULL) { - un_register_gppsm_seg(psma); - /* Set alctr ptr to NULL for future reuse */ - cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - 1] = NULL; - } else if (ul_seg_id != CMM_ALLSEGMENTS) { - status = -EPERM; - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - if (ul_seg_id != CMM_ALLSEGMENTS) - break; - - ul_id++; - } /* end while */ - return status; -} - -/* - * ======== un_register_gppsm_seg ======== - * Purpose: - * UnRegister the SM allocator by freeing all its resources and - * nulling cmm mgr table entry. - * Note: - * This routine is always called within cmm lock crit sect. - */ -static void un_register_gppsm_seg(struct cmm_allocator *psma) -{ - struct cmm_mnode *curr, *tmp; - - /* free nodes on free list */ - list_for_each_entry_safe(curr, tmp, &psma->free_list, link) { - list_del(&curr->link); - kfree(curr); - } - - /* free nodes on InUse list */ - list_for_each_entry_safe(curr, tmp, &psma->in_use_list, link) { - list_del(&curr->link); - kfree(curr); - } - - if ((void *)psma->vm_base != NULL) - MEM_UNMAP_LINEAR_ADDRESS((void *)psma->vm_base); - - /* Free allocator itself */ - kfree(psma); -} - -/* - * ======== get_slot ======== - * Purpose: - * An available slot # is returned. Returns negative on failure. - */ -static s32 get_slot(struct cmm_object *cmm_mgr_obj) -{ - s32 slot_seg = -1; /* neg on failure */ - /* get first available slot in cmm mgr SMSegTab[] */ - for (slot_seg = 0; slot_seg < CMM_MAXGPPSEGS; slot_seg++) { - if (cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg] == NULL) - break; - - } - if (slot_seg == CMM_MAXGPPSEGS) - slot_seg = -1; /* failed */ - - return slot_seg; -} - -/* - * ======== get_node ======== - * Purpose: - * Get a memory node from freelist or create a new one. - */ -static struct cmm_mnode *get_node(struct cmm_object *cmm_mgr_obj, u32 dw_pa, - u32 dw_va, u32 ul_size) -{ - struct cmm_mnode *pnode; - - /* Check cmm mgr's node freelist */ - if (list_empty(&cmm_mgr_obj->node_free_list)) { - pnode = kzalloc(sizeof(struct cmm_mnode), GFP_KERNEL); - if (!pnode) - return NULL; - } else { - /* surely a valid element */ - pnode = list_first_entry(&cmm_mgr_obj->node_free_list, - struct cmm_mnode, link); - list_del_init(&pnode->link); - } - - pnode->pa = dw_pa; - pnode->va = dw_va; - pnode->size = ul_size; - - return pnode; -} - -/* - * ======== delete_node ======== - * Purpose: - * Put a memory node on the cmm nodelist for later use. - * Doesn't actually delete the node. Heap thrashing friendly. - */ -static void delete_node(struct cmm_object *cmm_mgr_obj, struct cmm_mnode *pnode) -{ - list_add_tail(&pnode->link, &cmm_mgr_obj->node_free_list); -} - -/* - * ====== get_free_block ======== - * Purpose: - * Scan the free block list and return the first block that satisfies - * the size. - */ -static struct cmm_mnode *get_free_block(struct cmm_allocator *allocator, - u32 usize) -{ - struct cmm_mnode *node, *tmp; - - if (!allocator) - return NULL; - - list_for_each_entry_safe(node, tmp, &allocator->free_list, link) { - if (usize <= node->size) { - list_del(&node->link); - return node; - } - } - - return NULL; -} - -/* - * ======== add_to_free_list ======== - * Purpose: - * Coalesce node into the freelist in ascending size order. - */ -static void add_to_free_list(struct cmm_allocator *allocator, - struct cmm_mnode *node) -{ - struct cmm_mnode *curr; - - if (!node) { - pr_err("%s: failed - node is NULL\n", __func__); - return; - } - - list_for_each_entry(curr, &allocator->free_list, link) { - if (NEXT_PA(curr) == node->pa) { - curr->size += node->size; - delete_node(allocator->cmm_mgr, node); - return; - } - if (curr->pa == NEXT_PA(node)) { - curr->pa = node->pa; - curr->va = node->va; - curr->size += node->size; - delete_node(allocator->cmm_mgr, node); - return; - } - } - list_for_each_entry(curr, &allocator->free_list, link) { - if (curr->size >= node->size) { - list_add_tail(&node->link, &curr->link); - return; - } - } - list_add_tail(&node->link, &allocator->free_list); -} - -/* - * ======== get_allocator ======== - * Purpose: - * Return the allocator for the given SM Segid. - * SegIds: 1,2,3..max. - */ -static struct cmm_allocator *get_allocator(struct cmm_object *cmm_mgr_obj, - u32 ul_seg_id) -{ - return cmm_mgr_obj->pa_gppsm_seg_tab[ul_seg_id - 1]; -} - -/* - * The CMM_Xlator[xxx] routines below are used by Node and Stream - * to perform SM address translation to the client process address space. - * A "translator" object is created by a node/stream for each SM seg used. - */ - -/* - * ======== cmm_xlator_create ======== - * Purpose: - * Create an address translator object. - */ -int cmm_xlator_create(struct cmm_xlatorobject **xlator, - struct cmm_object *hcmm_mgr, - struct cmm_xlatorattrs *xlator_attrs) -{ - struct cmm_xlator *xlator_object = NULL; - int status = 0; - - *xlator = NULL; - if (xlator_attrs == NULL) - xlator_attrs = &cmm_dfltxlatorattrs; /* set defaults */ - - xlator_object = kzalloc(sizeof(struct cmm_xlator), GFP_KERNEL); - if (xlator_object != NULL) { - xlator_object->cmm_mgr = hcmm_mgr; /* ref back to CMM */ - /* SM seg_id */ - xlator_object->seg_id = xlator_attrs->seg_id; - } else { - status = -ENOMEM; - } - if (!status) - *xlator = (struct cmm_xlatorobject *)xlator_object; - - return status; -} - -/* - * ======== cmm_xlator_alloc_buf ======== - */ -void *cmm_xlator_alloc_buf(struct cmm_xlatorobject *xlator, void *va_buf, - u32 pa_size) -{ - struct cmm_xlator *xlator_obj = (struct cmm_xlator *)xlator; - void *pbuf = NULL; - void *tmp_va_buff; - struct cmm_attrs attrs; - - if (xlator_obj) { - attrs.seg_id = xlator_obj->seg_id; - __raw_writel(0, va_buf); - /* Alloc SM */ - pbuf = - cmm_calloc_buf(xlator_obj->cmm_mgr, pa_size, &attrs, NULL); - if (pbuf) { - /* convert to translator(node/strm) process Virtual - * address */ - tmp_va_buff = cmm_xlator_translate(xlator, - pbuf, CMM_PA2VA); - __raw_writel((u32)tmp_va_buff, va_buf); - } - } - return pbuf; -} - -/* - * ======== cmm_xlator_free_buf ======== - * Purpose: - * Free the given SM buffer and descriptor. - * Does not free virtual memory. - */ -int cmm_xlator_free_buf(struct cmm_xlatorobject *xlator, void *buf_va) -{ - struct cmm_xlator *xlator_obj = (struct cmm_xlator *)xlator; - int status = -EPERM; - void *buf_pa = NULL; - - if (xlator_obj) { - /* convert Va to Pa so we can free it. */ - buf_pa = cmm_xlator_translate(xlator, buf_va, CMM_VA2PA); - if (buf_pa) { - status = cmm_free_buf(xlator_obj->cmm_mgr, buf_pa, - xlator_obj->seg_id); - if (status) { - /* Uh oh, this shouldn't happen. Descriptor - * gone! */ - pr_err("%s, line %d: Assertion failed\n", - __FILE__, __LINE__); - } - } - } - return status; -} - -/* - * ======== cmm_xlator_info ======== - * Purpose: - * Set/Get translator info. - */ -int cmm_xlator_info(struct cmm_xlatorobject *xlator, u8 **paddr, - u32 ul_size, u32 segm_id, bool set_info) -{ - struct cmm_xlator *xlator_obj = (struct cmm_xlator *)xlator; - int status = 0; - - if (xlator_obj) { - if (set_info) { - /* set translators virtual address range */ - xlator_obj->virt_base = (u32) *paddr; - xlator_obj->virt_size = ul_size; - } else { /* return virt base address */ - *paddr = (u8 *) xlator_obj->virt_base; - } - } else { - status = -EFAULT; - } - return status; -} - -/* - * ======== cmm_xlator_translate ======== - */ -void *cmm_xlator_translate(struct cmm_xlatorobject *xlator, void *paddr, - enum cmm_xlatetype xtype) -{ - u32 dw_addr_xlate = 0; - struct cmm_xlator *xlator_obj = (struct cmm_xlator *)xlator; - struct cmm_object *cmm_mgr_obj = NULL; - struct cmm_allocator *allocator = NULL; - u32 dw_offset = 0; - - if (!xlator_obj) - goto loop_cont; - - cmm_mgr_obj = (struct cmm_object *)xlator_obj->cmm_mgr; - /* get this translator's default SM allocator */ - allocator = cmm_mgr_obj->pa_gppsm_seg_tab[xlator_obj->seg_id - 1]; - if (!allocator) - goto loop_cont; - - if ((xtype == CMM_VA2DSPPA) || (xtype == CMM_VA2PA) || - (xtype == CMM_PA2VA)) { - if (xtype == CMM_PA2VA) { - /* Gpp Va = Va Base + offset */ - dw_offset = (u8 *) paddr - (u8 *) (allocator->shm_base - - allocator-> - dsp_size); - dw_addr_xlate = xlator_obj->virt_base + dw_offset; - /* Check if translated Va base is in range */ - if ((dw_addr_xlate < xlator_obj->virt_base) || - (dw_addr_xlate >= - (xlator_obj->virt_base + - xlator_obj->virt_size))) { - dw_addr_xlate = 0; /* bad address */ - } - } else { - /* Gpp PA = Gpp Base + offset */ - dw_offset = - (u8 *) paddr - (u8 *) xlator_obj->virt_base; - dw_addr_xlate = - allocator->shm_base - allocator->dsp_size + - dw_offset; - } - } else { - dw_addr_xlate = (u32) paddr; - } - /*Now convert address to proper target physical address if needed */ - if ((xtype == CMM_VA2DSPPA) || (xtype == CMM_PA2DSPPA)) { - /* Got Gpp Pa now, convert to DSP Pa */ - dw_addr_xlate = - GPPPA2DSPPA((allocator->shm_base - allocator->dsp_size), - dw_addr_xlate, - allocator->dsp_phys_addr_offset * - allocator->c_factor); - } else if (xtype == CMM_DSPPA2PA) { - /* Got DSP Pa, convert to GPP Pa */ - dw_addr_xlate = - DSPPA2GPPPA(allocator->shm_base - allocator->dsp_size, - dw_addr_xlate, - allocator->dsp_phys_addr_offset * - allocator->c_factor); - } -loop_cont: - return (void *)dw_addr_xlate; -} diff --git a/drivers/staging/tidspbridge/pmgr/cod.c b/drivers/staging/tidspbridge/pmgr/cod.c deleted file mode 100644 index 6c29379baf60..000000000000 --- a/drivers/staging/tidspbridge/pmgr/cod.c +++ /dev/null @@ -1,537 +0,0 @@ -/* - * cod.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This module implements DSP code management for the DSP/BIOS Bridge - * environment. It is mostly a thin wrapper. - * - * This module provides an interface for loading both static and - * dynamic code objects onto DSP systems. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -/* ----------------------------------- Host OS */ -#include -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -/* Include appropriate loader header file */ -#include - -/* ----------------------------------- This */ -#include - -/* - * ======== cod_manager ======== - */ -struct cod_manager { - struct dbll_tar_obj *target; - struct dbll_library_obj *base_lib; - bool loaded; /* Base library loaded? */ - u32 entry; - struct dbll_fxns fxns; - struct dbll_attrs attrs; - char sz_zl_file[COD_MAXPATHLENGTH]; -}; - -/* - * ======== cod_libraryobj ======== - */ -struct cod_libraryobj { - struct dbll_library_obj *dbll_lib; - struct cod_manager *cod_mgr; -}; - -static struct dbll_fxns ldr_fxns = { - (dbll_close_fxn) dbll_close, - (dbll_create_fxn) dbll_create, - (dbll_delete_fxn) dbll_delete, - (dbll_exit_fxn) dbll_exit, - (dbll_get_attrs_fxn) dbll_get_attrs, - (dbll_get_addr_fxn) dbll_get_addr, - (dbll_get_c_addr_fxn) dbll_get_c_addr, - (dbll_get_sect_fxn) dbll_get_sect, - (dbll_init_fxn) dbll_init, - (dbll_load_fxn) dbll_load, - (dbll_open_fxn) dbll_open, - (dbll_read_sect_fxn) dbll_read_sect, - (dbll_unload_fxn) dbll_unload, -}; - -static bool no_op(void); - -/* - * File operations (originally were under kfile.c) - */ -static s32 cod_f_close(struct file *filp) -{ - /* Check for valid handle */ - if (!filp) - return -EFAULT; - - filp_close(filp, NULL); - - /* we can't use 0 here */ - return 0; -} - -static struct file *cod_f_open(const char *psz_file_name, const char *sz_mode) -{ - mm_segment_t fs; - struct file *filp; - - fs = get_fs(); - set_fs(get_ds()); - - /* ignore given mode and open file as read-only */ - filp = filp_open(psz_file_name, O_RDONLY, 0); - - if (IS_ERR(filp)) - filp = NULL; - - set_fs(fs); - - return filp; -} - -static s32 cod_f_read(void __user *pbuffer, s32 size, s32 count, - struct file *filp) -{ - /* check for valid file handle */ - if (!filp) - return -EFAULT; - - if ((size > 0) && (count > 0) && pbuffer) { - u32 dw_bytes_read; - mm_segment_t fs; - - /* read from file */ - fs = get_fs(); - set_fs(get_ds()); - dw_bytes_read = filp->f_op->read(filp, pbuffer, size * count, - &(filp->f_pos)); - set_fs(fs); - - if (!dw_bytes_read) - return -EBADF; - - return dw_bytes_read / size; - } - - return -EINVAL; -} - -static s32 cod_f_seek(struct file *filp, s32 offset, s32 origin) -{ - loff_t dw_cur_pos; - - /* check for valid file handle */ - if (!filp) - return -EFAULT; - - /* based on the origin flag, move the internal pointer */ - dw_cur_pos = filp->f_op->llseek(filp, offset, origin); - - if ((s32) dw_cur_pos < 0) - return -EPERM; - - /* we can't use 0 here */ - return 0; -} - -static s32 cod_f_tell(struct file *filp) -{ - loff_t dw_cur_pos; - - if (!filp) - return -EFAULT; - - /* Get current position */ - dw_cur_pos = filp->f_op->llseek(filp, 0, SEEK_CUR); - - if ((s32) dw_cur_pos < 0) - return -EPERM; - - return dw_cur_pos; -} - -/* - * ======== cod_close ======== - */ -void cod_close(struct cod_libraryobj *lib) -{ - struct cod_manager *hmgr; - - hmgr = lib->cod_mgr; - hmgr->fxns.close_fxn(lib->dbll_lib); - - kfree(lib); -} - -/* - * ======== cod_create ======== - * Purpose: - * Create an object to manage code on a DSP system. - * This object can be used to load an initial program image with - * arguments that can later be expanded with - * dynamically loaded object files. - * - */ -int cod_create(struct cod_manager **mgr, char *str_zl_file) -{ - struct cod_manager *mgr_new; - struct dbll_attrs zl_attrs; - int status = 0; - - /* assume failure */ - *mgr = NULL; - - mgr_new = kzalloc(sizeof(struct cod_manager), GFP_KERNEL); - if (mgr_new == NULL) - return -ENOMEM; - - /* Set up loader functions */ - mgr_new->fxns = ldr_fxns; - - /* initialize the ZL module */ - mgr_new->fxns.init_fxn(); - - zl_attrs.alloc = (dbll_alloc_fxn) no_op; - zl_attrs.free = (dbll_free_fxn) no_op; - zl_attrs.fread = (dbll_read_fxn) cod_f_read; - zl_attrs.fseek = (dbll_seek_fxn) cod_f_seek; - zl_attrs.ftell = (dbll_tell_fxn) cod_f_tell; - zl_attrs.fclose = (dbll_f_close_fxn) cod_f_close; - zl_attrs.fopen = (dbll_f_open_fxn) cod_f_open; - zl_attrs.sym_lookup = NULL; - zl_attrs.base_image = true; - zl_attrs.log_write = NULL; - zl_attrs.log_write_handle = NULL; - zl_attrs.write = NULL; - zl_attrs.rmm_handle = NULL; - zl_attrs.input_params = NULL; - zl_attrs.sym_handle = NULL; - zl_attrs.sym_arg = NULL; - - mgr_new->attrs = zl_attrs; - - status = mgr_new->fxns.create_fxn(&mgr_new->target, &zl_attrs); - - if (status) { - cod_delete(mgr_new); - return -ESPIPE; - } - - /* return the new manager */ - *mgr = mgr_new; - - return 0; -} - -/* - * ======== cod_delete ======== - * Purpose: - * Delete a code manager object. - */ -void cod_delete(struct cod_manager *cod_mgr_obj) -{ - if (cod_mgr_obj->base_lib) { - if (cod_mgr_obj->loaded) - cod_mgr_obj->fxns.unload_fxn(cod_mgr_obj->base_lib, - &cod_mgr_obj->attrs); - - cod_mgr_obj->fxns.close_fxn(cod_mgr_obj->base_lib); - } - if (cod_mgr_obj->target) { - cod_mgr_obj->fxns.delete_fxn(cod_mgr_obj->target); - cod_mgr_obj->fxns.exit_fxn(); - } - kfree(cod_mgr_obj); -} - -/* - * ======== cod_get_base_lib ======== - * Purpose: - * Get handle to the base image DBL library. - */ -int cod_get_base_lib(struct cod_manager *cod_mgr_obj, - struct dbll_library_obj **plib) -{ - int status = 0; - - *plib = (struct dbll_library_obj *)cod_mgr_obj->base_lib; - - return status; -} - -/* - * ======== cod_get_base_name ======== - */ -int cod_get_base_name(struct cod_manager *cod_mgr_obj, char *sz_name, - u32 usize) -{ - int status = 0; - - if (usize <= COD_MAXPATHLENGTH) - strlcpy(sz_name, cod_mgr_obj->sz_zl_file, usize); - else - status = -EPERM; - - return status; -} - -/* - * ======== cod_get_entry ======== - * Purpose: - * Retrieve the entry point of a loaded DSP program image - * - */ -int cod_get_entry(struct cod_manager *cod_mgr_obj, u32 *entry_pt) -{ - *entry_pt = cod_mgr_obj->entry; - - return 0; -} - -/* - * ======== cod_get_loader ======== - * Purpose: - * Get handle to the DBLL loader. - */ -int cod_get_loader(struct cod_manager *cod_mgr_obj, - struct dbll_tar_obj **loader) -{ - int status = 0; - - *loader = (struct dbll_tar_obj *)cod_mgr_obj->target; - - return status; -} - -/* - * ======== cod_get_section ======== - * Purpose: - * Retrieve the starting address and length of a section in the COFF file - * given the section name. - */ -int cod_get_section(struct cod_libraryobj *lib, char *str_sect, - u32 *addr, u32 *len) -{ - struct cod_manager *cod_mgr_obj; - int status = 0; - - *addr = 0; - *len = 0; - if (lib != NULL) { - cod_mgr_obj = lib->cod_mgr; - status = cod_mgr_obj->fxns.get_sect_fxn(lib->dbll_lib, str_sect, - addr, len); - } else { - status = -ESPIPE; - } - - return status; -} - -/* - * ======== cod_get_sym_value ======== - * Purpose: - * Retrieve the value for the specified symbol. The symbol is first - * searched for literally and then, if not found, searched for as a - * C symbol. - * - */ -int cod_get_sym_value(struct cod_manager *cod_mgr_obj, char *str_sym, - u32 *pul_value) -{ - struct dbll_sym_val *dbll_sym; - - dev_dbg(bridge, "%s: cod_mgr_obj: %p str_sym: %s pul_value: %p\n", - __func__, cod_mgr_obj, str_sym, pul_value); - if (cod_mgr_obj->base_lib) { - if (!cod_mgr_obj->fxns. - get_addr_fxn(cod_mgr_obj->base_lib, str_sym, &dbll_sym)) { - if (!cod_mgr_obj->fxns. - get_c_addr_fxn(cod_mgr_obj->base_lib, str_sym, - &dbll_sym)) - return -ESPIPE; - } - } else { - return -ESPIPE; - } - - *pul_value = dbll_sym->value; - - return 0; -} - -/* - * ======== cod_load_base ======== - * Purpose: - * Load the initial program image, optionally with command-line arguments, - * on the DSP system managed by the supplied handle. The program to be - * loaded must be the first element of the args array and must be a fully - * qualified pathname. - * Details: - * if num_argc doesn't match the number of arguments in the args array, the - * args array is searched for a NULL terminating entry, and argc is - * recalculated to reflect this. In this way, we can support NULL - * terminating args arrays, if num_argc is very large. - */ -int cod_load_base(struct cod_manager *cod_mgr_obj, u32 num_argc, char *args[], - cod_writefxn pfn_write, void *arb, char *envp[]) -{ - dbll_flags flags; - struct dbll_attrs save_attrs; - struct dbll_attrs new_attrs; - int status; - u32 i; - - /* - * Make sure every argv[] stated in argc has a value, or change argc to - * reflect true number in NULL terminated argv array. - */ - for (i = 0; i < num_argc; i++) { - if (args[i] == NULL) { - num_argc = i; - break; - } - } - - /* set the write function for this operation */ - cod_mgr_obj->fxns.get_attrs_fxn(cod_mgr_obj->target, &save_attrs); - - new_attrs = save_attrs; - new_attrs.write = (dbll_write_fxn) pfn_write; - new_attrs.input_params = arb; - new_attrs.alloc = (dbll_alloc_fxn) no_op; - new_attrs.free = (dbll_free_fxn) no_op; - new_attrs.log_write = NULL; - new_attrs.log_write_handle = NULL; - - /* Load the image */ - flags = DBLL_CODE | DBLL_DATA | DBLL_SYMB; - status = cod_mgr_obj->fxns.load_fxn(cod_mgr_obj->base_lib, flags, - &new_attrs, - &cod_mgr_obj->entry); - if (status) - cod_mgr_obj->fxns.close_fxn(cod_mgr_obj->base_lib); - - if (!status) - cod_mgr_obj->loaded = true; - else - cod_mgr_obj->base_lib = NULL; - - return status; -} - -/* - * ======== cod_open ======== - * Open library for reading sections. - */ -int cod_open(struct cod_manager *hmgr, char *sz_coff_path, - u32 flags, struct cod_libraryobj **lib_obj) -{ - int status = 0; - struct cod_libraryobj *lib = NULL; - - *lib_obj = NULL; - - lib = kzalloc(sizeof(struct cod_libraryobj), GFP_KERNEL); - if (lib == NULL) - status = -ENOMEM; - - if (!status) { - lib->cod_mgr = hmgr; - status = hmgr->fxns.open_fxn(hmgr->target, sz_coff_path, flags, - &lib->dbll_lib); - if (!status) - *lib_obj = lib; - } - - if (status) - pr_err("%s: error status 0x%x, sz_coff_path: %s flags: 0x%x\n", - __func__, status, sz_coff_path, flags); - return status; -} - -/* - * ======== cod_open_base ======== - * Purpose: - * Open base image for reading sections. - */ -int cod_open_base(struct cod_manager *hmgr, char *sz_coff_path, - dbll_flags flags) -{ - int status = 0; - struct dbll_library_obj *lib; - - /* if we previously opened a base image, close it now */ - if (hmgr->base_lib) { - if (hmgr->loaded) { - hmgr->fxns.unload_fxn(hmgr->base_lib, &hmgr->attrs); - hmgr->loaded = false; - } - hmgr->fxns.close_fxn(hmgr->base_lib); - hmgr->base_lib = NULL; - } - status = hmgr->fxns.open_fxn(hmgr->target, sz_coff_path, flags, &lib); - if (!status) { - /* hang onto the library for subsequent sym table usage */ - hmgr->base_lib = lib; - strncpy(hmgr->sz_zl_file, sz_coff_path, COD_MAXPATHLENGTH - 1); - hmgr->sz_zl_file[COD_MAXPATHLENGTH - 1] = '\0'; - } - - if (status) - pr_err("%s: error status 0x%x sz_coff_path: %s\n", __func__, - status, sz_coff_path); - return status; -} - -/* - * ======== cod_read_section ======== - * Purpose: - * Retrieve the content of a code section given the section name. - */ -int cod_read_section(struct cod_libraryobj *lib, char *str_sect, - char *str_content, u32 content_size) -{ - int status = 0; - - if (lib != NULL) - status = - lib->cod_mgr->fxns.read_sect_fxn(lib->dbll_lib, str_sect, - str_content, content_size); - else - status = -ESPIPE; - - return status; -} - -/* - * ======== no_op ======== - * Purpose: - * No Operation. - * - */ -static bool no_op(void) -{ - return true; -} diff --git a/drivers/staging/tidspbridge/pmgr/dbll.c b/drivers/staging/tidspbridge/pmgr/dbll.c deleted file mode 100644 index 8e21d1e47c9c..000000000000 --- a/drivers/staging/tidspbridge/pmgr/dbll.c +++ /dev/null @@ -1,1421 +0,0 @@ -/* - * dbll.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -#include - -/* ----------------------------------- OS Adaptation Layer */ - -/* Dynamic loader library interface */ -#include -#include - -/* ----------------------------------- This */ -#include -#include - -/* Max buffer length */ -#define MAXEXPR 128 - -#define DOFF_ALIGN(x) (((x) + 3) & ~3UL) - -/* - * ======== struct dbll_tar_obj* ======== - * A target may have one or more libraries of symbols/code/data loaded - * onto it, where a library is simply the symbols/code/data contained - * in a DOFF file. - */ -/* - * ======== dbll_tar_obj ======== - */ -struct dbll_tar_obj { - struct dbll_attrs attrs; - struct dbll_library_obj *head; /* List of all opened libraries */ -}; - -/* - * The following 4 typedefs are "super classes" of the dynamic loader - * library types used in dynamic loader functions (dynamic_loader.h). - */ -/* - * ======== dbll_stream ======== - * Contains dynamic_loader_stream - */ -struct dbll_stream { - struct dynamic_loader_stream dl_stream; - struct dbll_library_obj *lib; -}; - -/* - * ======== ldr_symbol ======== - */ -struct ldr_symbol { - struct dynamic_loader_sym dl_symbol; - struct dbll_library_obj *lib; -}; - -/* - * ======== dbll_alloc ======== - */ -struct dbll_alloc { - struct dynamic_loader_allocate dl_alloc; - struct dbll_library_obj *lib; -}; - -/* - * ======== dbll_init_obj ======== - */ -struct dbll_init_obj { - struct dynamic_loader_initialize dl_init; - struct dbll_library_obj *lib; -}; - -/* - * ======== DBLL_Library ======== - * A library handle is returned by DBLL_Open() and is passed to dbll_load() - * to load symbols/code/data, and to dbll_unload(), to remove the - * symbols/code/data loaded by dbll_load(). - */ - -/* - * ======== dbll_library_obj ======== - */ -struct dbll_library_obj { - struct dbll_library_obj *next; /* Next library in target's list */ - struct dbll_library_obj *prev; /* Previous in the list */ - struct dbll_tar_obj *target_obj; /* target for this library */ - - /* Objects needed by dynamic loader */ - struct dbll_stream stream; - struct ldr_symbol symbol; - struct dbll_alloc allocate; - struct dbll_init_obj init; - void *dload_mod_obj; - - char *file_name; /* COFF file name */ - void *fp; /* Opaque file handle */ - u32 entry; /* Entry point */ - void *desc; /* desc of DOFF file loaded */ - u32 open_ref; /* Number of times opened */ - u32 load_ref; /* Number of times loaded */ - struct gh_t_hash_tab *sym_tab; /* Hash table of symbols */ - u32 pos; -}; - -/* - * ======== dbll_symbol ======== - */ -struct dbll_symbol { - struct dbll_sym_val value; - char *name; -}; - -static void dof_close(struct dbll_library_obj *zl_lib); -static int dof_open(struct dbll_library_obj *zl_lib); -static s32 no_op(struct dynamic_loader_initialize *thisptr, void *bufr, - ldr_addr locn, struct ldr_section_info *info, - unsigned bytsize); - -/* - * Functions called by dynamic loader - * - */ -/* dynamic_loader_stream */ -static int dbll_read_buffer(struct dynamic_loader_stream *this, void *buffer, - unsigned bufsize); -static int dbll_set_file_posn(struct dynamic_loader_stream *this, - unsigned int pos); -/* dynamic_loader_sym */ -static struct dynload_symbol *dbll_find_symbol(struct dynamic_loader_sym *this, - const char *name); -static struct dynload_symbol *dbll_add_to_symbol_table(struct dynamic_loader_sym - *this, const char *name, - unsigned module_id); -static struct dynload_symbol *find_in_symbol_table(struct dynamic_loader_sym - *this, const char *name, - unsigned moduleid); -static void dbll_purge_symbol_table(struct dynamic_loader_sym *this, - unsigned module_id); -static void *allocate(struct dynamic_loader_sym *this, unsigned memsize); -static void deallocate(struct dynamic_loader_sym *this, void *mem_ptr); -static void dbll_err_report(struct dynamic_loader_sym *this, const char *errstr, - va_list args); -/* dynamic_loader_allocate */ -static int dbll_rmm_alloc(struct dynamic_loader_allocate *this, - struct ldr_section_info *info, unsigned align); -static void rmm_dealloc(struct dynamic_loader_allocate *this, - struct ldr_section_info *info); - -/* dynamic_loader_initialize */ -static int connect(struct dynamic_loader_initialize *this); -static int read_mem(struct dynamic_loader_initialize *this, void *buf, - ldr_addr addr, struct ldr_section_info *info, - unsigned bytes); -static int write_mem(struct dynamic_loader_initialize *this, void *buf, - ldr_addr addr, struct ldr_section_info *info, - unsigned nbytes); -static int fill_mem(struct dynamic_loader_initialize *this, ldr_addr addr, - struct ldr_section_info *info, unsigned bytes, - unsigned val); -static int execute(struct dynamic_loader_initialize *this, ldr_addr start); -static void release(struct dynamic_loader_initialize *this); - -/* symbol table hash functions */ -static u32 name_hash(const void *key); -static bool name_match(const void *key, const void *sp); -static void sym_delete(void *value); - -/* Symbol Redefinition */ -static int redefined_symbol; -static int gbl_search = 1; - -/* - * ======== dbll_close ======== - */ -void dbll_close(struct dbll_library_obj *zl_lib) -{ - struct dbll_tar_obj *zl_target; - - zl_target = zl_lib->target_obj; - zl_lib->open_ref--; - if (zl_lib->open_ref == 0) { - /* Remove library from list */ - if (zl_target->head == zl_lib) - zl_target->head = zl_lib->next; - - if (zl_lib->prev) - (zl_lib->prev)->next = zl_lib->next; - - if (zl_lib->next) - (zl_lib->next)->prev = zl_lib->prev; - - /* Free DOF resources */ - dof_close(zl_lib); - kfree(zl_lib->file_name); - - /* remove symbols from symbol table */ - if (zl_lib->sym_tab) - gh_delete(zl_lib->sym_tab); - - /* remove the library object itself */ - kfree(zl_lib); - zl_lib = NULL; - } -} - -/* - * ======== dbll_create ======== - */ -int dbll_create(struct dbll_tar_obj **target_obj, - struct dbll_attrs *pattrs) -{ - struct dbll_tar_obj *pzl_target; - int status = 0; - - /* Allocate DBL target object */ - pzl_target = kzalloc(sizeof(struct dbll_tar_obj), GFP_KERNEL); - if (target_obj != NULL) { - if (pzl_target == NULL) { - *target_obj = NULL; - status = -ENOMEM; - } else { - pzl_target->attrs = *pattrs; - *target_obj = (struct dbll_tar_obj *)pzl_target; - } - } - - return status; -} - -/* - * ======== dbll_delete ======== - */ -void dbll_delete(struct dbll_tar_obj *target) -{ - struct dbll_tar_obj *zl_target = (struct dbll_tar_obj *)target; - - kfree(zl_target); - -} - -/* - * ======== dbll_exit ======== - * Discontinue usage of DBL module. - */ -void dbll_exit(void) -{ - /* do nothing */ -} - -/* - * ======== dbll_get_addr ======== - * Get address of name in the specified library. - */ -bool dbll_get_addr(struct dbll_library_obj *zl_lib, char *name, - struct dbll_sym_val **sym_val) -{ - struct dbll_symbol *sym; - - sym = (struct dbll_symbol *)gh_find(zl_lib->sym_tab, name); - if (IS_ERR(sym)) - return false; - - *sym_val = &sym->value; - - dev_dbg(bridge, "%s: lib: %p name: %s paddr: %p\n", - __func__, zl_lib, name, sym_val); - return true; -} - -/* - * ======== dbll_get_attrs ======== - * Retrieve the attributes of the target. - */ -void dbll_get_attrs(struct dbll_tar_obj *target, struct dbll_attrs *pattrs) -{ - struct dbll_tar_obj *zl_target = (struct dbll_tar_obj *)target; - - if ((pattrs != NULL) && (zl_target != NULL)) - *pattrs = zl_target->attrs; - -} - -/* - * ======== dbll_get_c_addr ======== - * Get address of a "C" name in the specified library. - */ -bool dbll_get_c_addr(struct dbll_library_obj *zl_lib, char *name, - struct dbll_sym_val **sym_val) -{ - struct dbll_symbol *sym; - char cname[MAXEXPR + 1]; - - cname[0] = '_'; - - strncpy(cname + 1, name, sizeof(cname) - 2); - cname[MAXEXPR] = '\0'; /* insure '\0' string termination */ - - /* Check for C name, if not found */ - sym = (struct dbll_symbol *)gh_find(zl_lib->sym_tab, cname); - if (IS_ERR(sym)) - return false; - - *sym_val = &sym->value; - - return true; -} - -/* - * ======== dbll_get_sect ======== - * Get the base address and size (in bytes) of a COFF section. - */ -int dbll_get_sect(struct dbll_library_obj *lib, char *name, u32 *paddr, - u32 *psize) -{ - u32 byte_size; - bool opened_doff = false; - const struct ldr_section_info *sect = NULL; - struct dbll_library_obj *zl_lib = (struct dbll_library_obj *)lib; - int status = 0; - - /* If DOFF file is not open, we open it. */ - if (zl_lib != NULL) { - if (zl_lib->fp == NULL) { - status = dof_open(zl_lib); - if (!status) - opened_doff = true; - - } else { - (*(zl_lib->target_obj->attrs.fseek)) (zl_lib->fp, - zl_lib->pos, - SEEK_SET); - } - } else { - status = -EFAULT; - } - if (!status) { - byte_size = 1; - if (dload_get_section_info(zl_lib->desc, name, §)) { - *paddr = sect->load_addr; - *psize = sect->size * byte_size; - /* Make sure size is even for good swap */ - if (*psize % 2) - (*psize)++; - - /* Align size */ - *psize = DOFF_ALIGN(*psize); - } else { - status = -ENXIO; - } - } - if (opened_doff) { - dof_close(zl_lib); - opened_doff = false; - } - - dev_dbg(bridge, "%s: lib: %p name: %s paddr: %p psize: %p, status 0x%x\n", - __func__, lib, name, paddr, psize, status); - - return status; -} - -/* - * ======== dbll_init ======== - */ -bool dbll_init(void) -{ - /* do nothing */ - - return true; -} - -/* - * ======== dbll_load ======== - */ -int dbll_load(struct dbll_library_obj *lib, dbll_flags flags, - struct dbll_attrs *attrs, u32 *entry) -{ - struct dbll_library_obj *zl_lib = (struct dbll_library_obj *)lib; - struct dbll_tar_obj *dbzl; - bool got_symbols = true; - s32 err; - int status = 0; - bool opened_doff = false; - - /* - * Load if not already loaded. - */ - if (zl_lib->load_ref == 0 || !(flags & DBLL_DYNAMIC)) { - dbzl = zl_lib->target_obj; - dbzl->attrs = *attrs; - /* Create a hash table for symbols if not already created */ - if (zl_lib->sym_tab == NULL) { - got_symbols = false; - zl_lib->sym_tab = gh_create(sizeof(struct dbll_symbol), - name_hash, - name_match, sym_delete); - if (IS_ERR(zl_lib->sym_tab)) { - status = PTR_ERR(zl_lib->sym_tab); - zl_lib->sym_tab = NULL; - } - - } - /* - * Set up objects needed by the dynamic loader - */ - /* Stream */ - zl_lib->stream.dl_stream.read_buffer = dbll_read_buffer; - zl_lib->stream.dl_stream.set_file_posn = dbll_set_file_posn; - zl_lib->stream.lib = zl_lib; - /* Symbol */ - zl_lib->symbol.dl_symbol.find_matching_symbol = - dbll_find_symbol; - if (got_symbols) { - zl_lib->symbol.dl_symbol.add_to_symbol_table = - find_in_symbol_table; - } else { - zl_lib->symbol.dl_symbol.add_to_symbol_table = - dbll_add_to_symbol_table; - } - zl_lib->symbol.dl_symbol.purge_symbol_table = - dbll_purge_symbol_table; - zl_lib->symbol.dl_symbol.dload_allocate = allocate; - zl_lib->symbol.dl_symbol.dload_deallocate = deallocate; - zl_lib->symbol.dl_symbol.error_report = dbll_err_report; - zl_lib->symbol.lib = zl_lib; - /* Allocate */ - zl_lib->allocate.dl_alloc.dload_allocate = dbll_rmm_alloc; - zl_lib->allocate.dl_alloc.dload_deallocate = rmm_dealloc; - zl_lib->allocate.lib = zl_lib; - /* Init */ - zl_lib->init.dl_init.connect = connect; - zl_lib->init.dl_init.readmem = read_mem; - zl_lib->init.dl_init.writemem = write_mem; - zl_lib->init.dl_init.fillmem = fill_mem; - zl_lib->init.dl_init.execute = execute; - zl_lib->init.dl_init.release = release; - zl_lib->init.lib = zl_lib; - /* If COFF file is not open, we open it. */ - if (zl_lib->fp == NULL) { - status = dof_open(zl_lib); - if (!status) - opened_doff = true; - - } - if (!status) { - zl_lib->pos = (*(zl_lib->target_obj->attrs.ftell)) - (zl_lib->fp); - /* Reset file cursor */ - (*(zl_lib->target_obj->attrs.fseek)) (zl_lib->fp, - (long)0, - SEEK_SET); - symbols_reloaded = true; - /* The 5th argument, DLOAD_INITBSS, tells the DLL - * module to zero-init all BSS sections. In general, - * this is not necessary and also increases load time. - * We may want to make this configurable by the user */ - err = dynamic_load_module(&zl_lib->stream.dl_stream, - &zl_lib->symbol.dl_symbol, - &zl_lib->allocate.dl_alloc, - &zl_lib->init.dl_init, - DLOAD_INITBSS, - &zl_lib->dload_mod_obj); - - if (err != 0) { - status = -EILSEQ; - } else if (redefined_symbol) { - zl_lib->load_ref++; - dbll_unload(zl_lib, (struct dbll_attrs *)attrs); - redefined_symbol = false; - status = -EILSEQ; - } else { - *entry = zl_lib->entry; - } - } - } - if (!status) - zl_lib->load_ref++; - - /* Clean up DOFF resources */ - if (opened_doff) - dof_close(zl_lib); - - dev_dbg(bridge, "%s: lib: %p flags: 0x%x entry: %p, status 0x%x\n", - __func__, lib, flags, entry, status); - - return status; -} - -/* - * ======== dbll_open ======== - */ -int dbll_open(struct dbll_tar_obj *target, char *file, dbll_flags flags, - struct dbll_library_obj **lib_obj) -{ - struct dbll_tar_obj *zl_target = (struct dbll_tar_obj *)target; - struct dbll_library_obj *zl_lib = NULL; - s32 err; - int status = 0; - - zl_lib = zl_target->head; - while (zl_lib != NULL) { - if (strcmp(zl_lib->file_name, file) == 0) { - /* Library is already opened */ - zl_lib->open_ref++; - break; - } - zl_lib = zl_lib->next; - } - if (zl_lib == NULL) { - /* Allocate DBL library object */ - zl_lib = kzalloc(sizeof(struct dbll_library_obj), GFP_KERNEL); - if (zl_lib == NULL) { - status = -ENOMEM; - } else { - zl_lib->pos = 0; - /* Increment ref count to allow close on failure - * later on */ - zl_lib->open_ref++; - zl_lib->target_obj = zl_target; - /* Keep a copy of the file name */ - zl_lib->file_name = kzalloc(strlen(file) + 1, - GFP_KERNEL); - if (zl_lib->file_name == NULL) { - status = -ENOMEM; - } else { - strncpy(zl_lib->file_name, file, - strlen(file) + 1); - } - zl_lib->sym_tab = NULL; - } - } - /* - * Set up objects needed by the dynamic loader - */ - if (status) - goto func_cont; - - /* Stream */ - zl_lib->stream.dl_stream.read_buffer = dbll_read_buffer; - zl_lib->stream.dl_stream.set_file_posn = dbll_set_file_posn; - zl_lib->stream.lib = zl_lib; - /* Symbol */ - zl_lib->symbol.dl_symbol.add_to_symbol_table = dbll_add_to_symbol_table; - zl_lib->symbol.dl_symbol.find_matching_symbol = dbll_find_symbol; - zl_lib->symbol.dl_symbol.purge_symbol_table = dbll_purge_symbol_table; - zl_lib->symbol.dl_symbol.dload_allocate = allocate; - zl_lib->symbol.dl_symbol.dload_deallocate = deallocate; - zl_lib->symbol.dl_symbol.error_report = dbll_err_report; - zl_lib->symbol.lib = zl_lib; - /* Allocate */ - zl_lib->allocate.dl_alloc.dload_allocate = dbll_rmm_alloc; - zl_lib->allocate.dl_alloc.dload_deallocate = rmm_dealloc; - zl_lib->allocate.lib = zl_lib; - /* Init */ - zl_lib->init.dl_init.connect = connect; - zl_lib->init.dl_init.readmem = read_mem; - zl_lib->init.dl_init.writemem = write_mem; - zl_lib->init.dl_init.fillmem = fill_mem; - zl_lib->init.dl_init.execute = execute; - zl_lib->init.dl_init.release = release; - zl_lib->init.lib = zl_lib; - if (!status && zl_lib->fp == NULL) - status = dof_open(zl_lib); - - zl_lib->pos = (*(zl_lib->target_obj->attrs.ftell)) (zl_lib->fp); - (*(zl_lib->target_obj->attrs.fseek)) (zl_lib->fp, (long)0, SEEK_SET); - /* Create a hash table for symbols if flag is set */ - if (zl_lib->sym_tab != NULL || !(flags & DBLL_SYMB)) - goto func_cont; - - zl_lib->sym_tab = - gh_create(sizeof(struct dbll_symbol), name_hash, name_match, - sym_delete); - if (IS_ERR(zl_lib->sym_tab)) { - status = PTR_ERR(zl_lib->sym_tab); - zl_lib->sym_tab = NULL; - } else { - /* Do a fake load to get symbols - set write func to no_op */ - zl_lib->init.dl_init.writemem = no_op; - err = dynamic_open_module(&zl_lib->stream.dl_stream, - &zl_lib->symbol.dl_symbol, - &zl_lib->allocate.dl_alloc, - &zl_lib->init.dl_init, 0, - &zl_lib->dload_mod_obj); - if (err != 0) { - status = -EILSEQ; - } else { - /* Now that we have the symbol table, we can unload */ - err = dynamic_unload_module(zl_lib->dload_mod_obj, - &zl_lib->symbol.dl_symbol, - &zl_lib->allocate.dl_alloc, - &zl_lib->init.dl_init); - if (err != 0) - status = -EILSEQ; - - zl_lib->dload_mod_obj = NULL; - } - } -func_cont: - if (!status) { - if (zl_lib->open_ref == 1) { - /* First time opened - insert in list */ - if (zl_target->head) - (zl_target->head)->prev = zl_lib; - - zl_lib->prev = NULL; - zl_lib->next = zl_target->head; - zl_target->head = zl_lib; - } - *lib_obj = (struct dbll_library_obj *)zl_lib; - } else { - *lib_obj = NULL; - if (zl_lib != NULL) - dbll_close((struct dbll_library_obj *)zl_lib); - - } - - dev_dbg(bridge, "%s: target: %p file: %s lib_obj: %p, status 0x%x\n", - __func__, target, file, lib_obj, status); - - return status; -} - -/* - * ======== dbll_read_sect ======== - * Get the content of a COFF section. - */ -int dbll_read_sect(struct dbll_library_obj *lib, char *name, - char *buf, u32 size) -{ - struct dbll_library_obj *zl_lib = (struct dbll_library_obj *)lib; - bool opened_doff = false; - u32 byte_size; /* size of bytes */ - u32 ul_sect_size; /* size of section */ - const struct ldr_section_info *sect = NULL; - int status = 0; - - /* If DOFF file is not open, we open it. */ - if (zl_lib != NULL) { - if (zl_lib->fp == NULL) { - status = dof_open(zl_lib); - if (!status) - opened_doff = true; - - } else { - (*(zl_lib->target_obj->attrs.fseek)) (zl_lib->fp, - zl_lib->pos, - SEEK_SET); - } - } else { - status = -EFAULT; - } - if (status) - goto func_cont; - - byte_size = 1; - if (!dload_get_section_info(zl_lib->desc, name, §)) { - status = -ENXIO; - goto func_cont; - } - /* - * Ensure the supplied buffer size is sufficient to store - * the section buf to be read. - */ - ul_sect_size = sect->size * byte_size; - /* Make sure size is even for good swap */ - if (ul_sect_size % 2) - ul_sect_size++; - - /* Align size */ - ul_sect_size = DOFF_ALIGN(ul_sect_size); - if (ul_sect_size > size) { - status = -EPERM; - } else { - if (!dload_get_section(zl_lib->desc, sect, buf)) - status = -EBADF; - - } -func_cont: - if (opened_doff) { - dof_close(zl_lib); - opened_doff = false; - } - - dev_dbg(bridge, "%s: lib: %p name: %s buf: %p size: 0x%x, status 0x%x\n", - __func__, lib, name, buf, size, status); - return status; -} - -/* - * ======== dbll_unload ======== - */ -void dbll_unload(struct dbll_library_obj *lib, struct dbll_attrs *attrs) -{ - struct dbll_library_obj *zl_lib = (struct dbll_library_obj *)lib; - s32 err = 0; - - dev_dbg(bridge, "%s: lib: %p\n", __func__, lib); - zl_lib->load_ref--; - /* Unload only if reference count is 0 */ - if (zl_lib->load_ref != 0) - return; - - zl_lib->target_obj->attrs = *attrs; - if (zl_lib->dload_mod_obj) { - err = dynamic_unload_module(zl_lib->dload_mod_obj, - &zl_lib->symbol.dl_symbol, - &zl_lib->allocate.dl_alloc, - &zl_lib->init.dl_init); - if (err != 0) - dev_dbg(bridge, "%s: failed: 0x%x\n", __func__, err); - } - /* remove symbols from symbol table */ - if (zl_lib->sym_tab != NULL) { - gh_delete(zl_lib->sym_tab); - zl_lib->sym_tab = NULL; - } - /* delete DOFF desc since it holds *lots* of host OS - * resources */ - dof_close(zl_lib); -} - -/* - * ======== dof_close ======== - */ -static void dof_close(struct dbll_library_obj *zl_lib) -{ - if (zl_lib->desc) { - dload_module_close(zl_lib->desc); - zl_lib->desc = NULL; - } - /* close file */ - if (zl_lib->fp) { - (zl_lib->target_obj->attrs.fclose) (zl_lib->fp); - zl_lib->fp = NULL; - } -} - -/* - * ======== dof_open ======== - */ -static int dof_open(struct dbll_library_obj *zl_lib) -{ - void *open = *(zl_lib->target_obj->attrs.fopen); - int status = 0; - - /* First open the file for the dynamic loader, then open COF */ - zl_lib->fp = - (void *)((dbll_f_open_fxn) (open)) (zl_lib->file_name, "rb"); - - /* Open DOFF module */ - if (zl_lib->fp && zl_lib->desc == NULL) { - (*(zl_lib->target_obj->attrs.fseek)) (zl_lib->fp, (long)0, - SEEK_SET); - zl_lib->desc = - dload_module_open(&zl_lib->stream.dl_stream, - &zl_lib->symbol.dl_symbol); - if (zl_lib->desc == NULL) { - (zl_lib->target_obj->attrs.fclose) (zl_lib->fp); - zl_lib->fp = NULL; - status = -EBADF; - } - } else { - status = -EBADF; - } - - return status; -} - -/* - * ======== name_hash ======== - */ -static u32 name_hash(const void *key) -{ - u32 hash; - const char *name = key; - - hash = 0; - - while (*name) { - hash <<= 1; - hash ^= *name++; - } - - return hash; -} - -/* - * ======== name_match ======== - */ -static bool name_match(const void *key, const void *sp) -{ - if ((key != NULL) && (sp != NULL)) { - if (strcmp(key, ((struct dbll_symbol *)sp)->name) == 0) - return true; - } - return false; -} - -/* - * ======== no_op ======== - */ -static int no_op(struct dynamic_loader_initialize *thisptr, void *bufr, - ldr_addr locn, struct ldr_section_info *info, unsigned bytsize) -{ - return 1; -} - -/* - * ======== sym_delete ======== - */ -static void sym_delete(void *value) -{ - struct dbll_symbol *sp = (struct dbll_symbol *)value; - - kfree(sp->name); -} - -/* - * Dynamic Loader Functions - */ - -/* dynamic_loader_stream */ -/* - * ======== dbll_read_buffer ======== - */ -static int dbll_read_buffer(struct dynamic_loader_stream *this, void *buffer, - unsigned bufsize) -{ - struct dbll_stream *pstream = (struct dbll_stream *)this; - struct dbll_library_obj *lib; - int bytes_read = 0; - - lib = pstream->lib; - if (lib != NULL) { - bytes_read = - (*(lib->target_obj->attrs.fread)) (buffer, 1, bufsize, - lib->fp); - } - return bytes_read; -} - -/* - * ======== dbll_set_file_posn ======== - */ -static int dbll_set_file_posn(struct dynamic_loader_stream *this, - unsigned int pos) -{ - struct dbll_stream *pstream = (struct dbll_stream *)this; - struct dbll_library_obj *lib; - int status = 0; /* Success */ - - lib = pstream->lib; - if (lib != NULL) { - status = (*(lib->target_obj->attrs.fseek)) (lib->fp, (long)pos, - SEEK_SET); - } - - return status; -} - -/* dynamic_loader_sym */ - -/* - * ======== dbll_find_symbol ======== - */ -static struct dynload_symbol *dbll_find_symbol(struct dynamic_loader_sym *this, - const char *name) -{ - struct dynload_symbol *ret_sym; - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - struct dbll_sym_val *dbll_sym = NULL; - bool status = false; /* Symbol not found yet */ - - lib = ldr_sym->lib; - if (lib != NULL) { - if (lib->target_obj->attrs.sym_lookup) { - /* Check current lib + base lib + dep lib + - * persistent lib */ - status = (*(lib->target_obj->attrs.sym_lookup)) - (lib->target_obj->attrs.sym_handle, - lib->target_obj->attrs.sym_arg, - lib->target_obj->attrs.rmm_handle, name, - &dbll_sym); - } else { - /* Just check current lib for symbol */ - status = dbll_get_addr((struct dbll_library_obj *)lib, - (char *)name, &dbll_sym); - if (!status) { - status = dbll_get_c_addr( - (struct dbll_library_obj *) - lib, (char *)name, - &dbll_sym); - } - } - } - - if (!status && gbl_search) - dev_dbg(bridge, "%s: Symbol not found: %s\n", __func__, name); - - ret_sym = (struct dynload_symbol *)dbll_sym; - return ret_sym; -} - -/* - * ======== find_in_symbol_table ======== - */ -static struct dynload_symbol *find_in_symbol_table(struct dynamic_loader_sym - *this, const char *name, - unsigned moduleid) -{ - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - struct dbll_symbol *sym; - - lib = ldr_sym->lib; - sym = (struct dbll_symbol *)gh_find(lib->sym_tab, (char *)name); - - if (IS_ERR(sym)) - return NULL; - - return (struct dynload_symbol *)&sym->value; -} - -/* - * ======== dbll_add_to_symbol_table ======== - */ -static struct dynload_symbol *dbll_add_to_symbol_table(struct dynamic_loader_sym - *this, const char *name, - unsigned module_id) -{ - struct dbll_symbol *sym_ptr = NULL; - struct dbll_symbol symbol; - struct dynload_symbol *dbll_sym = NULL; - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - struct dynload_symbol *ret; - - lib = ldr_sym->lib; - - /* Check to see if symbol is already defined in symbol table */ - if (!(lib->target_obj->attrs.base_image)) { - gbl_search = false; - dbll_sym = dbll_find_symbol(this, name); - gbl_search = true; - if (dbll_sym) { - redefined_symbol = true; - dev_dbg(bridge, "%s already defined in symbol table\n", - name); - return NULL; - } - } - /* Allocate string to copy symbol name */ - symbol.name = kzalloc(strlen((char *const)name) + 1, GFP_KERNEL); - if (symbol.name == NULL) - return NULL; - - if (symbol.name != NULL) { - /* Just copy name (value will be filled in by dynamic loader) */ - strncpy(symbol.name, (char *const)name, - strlen((char *const)name) + 1); - - /* Add symbol to symbol table */ - sym_ptr = - (struct dbll_symbol *)gh_insert(lib->sym_tab, (void *)name, - (void *)&symbol); - if (IS_ERR(sym_ptr)) { - kfree(symbol.name); - sym_ptr = NULL; - } - - } - if (sym_ptr != NULL) - ret = (struct dynload_symbol *)&sym_ptr->value; - else - ret = NULL; - - return ret; -} - -/* - * ======== dbll_purge_symbol_table ======== - */ -static void dbll_purge_symbol_table(struct dynamic_loader_sym *this, - unsigned module_id) -{ - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - - lib = ldr_sym->lib; - /* May not need to do anything */ -} - -/* - * ======== allocate ======== - */ -static void *allocate(struct dynamic_loader_sym *this, unsigned memsize) -{ - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - void *buf; - - lib = ldr_sym->lib; - - buf = kzalloc(memsize, GFP_KERNEL); - - return buf; -} - -/* - * ======== deallocate ======== - */ -static void deallocate(struct dynamic_loader_sym *this, void *mem_ptr) -{ - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - - lib = ldr_sym->lib; - - kfree(mem_ptr); -} - -/* - * ======== dbll_err_report ======== - */ -static void dbll_err_report(struct dynamic_loader_sym *this, const char *errstr, - va_list args) -{ - struct ldr_symbol *ldr_sym = (struct ldr_symbol *)this; - struct dbll_library_obj *lib; - char temp_buf[MAXEXPR]; - - lib = ldr_sym->lib; - vsnprintf((char *)temp_buf, MAXEXPR, (char *)errstr, args); - dev_dbg(bridge, "%s\n", temp_buf); -} - -/* dynamic_loader_allocate */ - -/* - * ======== dbll_rmm_alloc ======== - */ -static int dbll_rmm_alloc(struct dynamic_loader_allocate *this, - struct ldr_section_info *info, unsigned align) -{ - struct dbll_alloc *dbll_alloc_obj = (struct dbll_alloc *)this; - struct dbll_library_obj *lib; - int status = 0; - u32 mem_sect_type; - struct rmm_addr rmm_addr_obj; - s32 ret = true; - unsigned stype = DLOAD_SECTION_TYPE(info->type); - char *token = NULL; - char *sz_sec_last_token = NULL; - char *sz_last_token = NULL; - char *sz_sect_name = NULL; - char *psz_cur; - s32 token_len = 0; - s32 seg_id = -1; - s32 req = -1; - s32 count = 0; - u32 alloc_size = 0; - u32 run_addr_flag = 0; - - lib = dbll_alloc_obj->lib; - - mem_sect_type = - (stype == DLOAD_TEXT) ? DBLL_CODE : (stype == - DLOAD_BSS) ? DBLL_BSS : - DBLL_DATA; - - /* Attempt to extract the segment ID and requirement information from - the name of the section */ - token_len = strlen((char *)(info->name)) + 1; - - sz_sect_name = kzalloc(token_len, GFP_KERNEL); - sz_last_token = kzalloc(token_len, GFP_KERNEL); - sz_sec_last_token = kzalloc(token_len, GFP_KERNEL); - - if (sz_sect_name == NULL || sz_sec_last_token == NULL || - sz_last_token == NULL) { - status = -ENOMEM; - goto func_cont; - } - strncpy(sz_sect_name, (char *)(info->name), token_len); - psz_cur = sz_sect_name; - while ((token = strsep(&psz_cur, ":")) && *token != '\0') { - strncpy(sz_sec_last_token, sz_last_token, - strlen(sz_last_token) + 1); - strncpy(sz_last_token, token, strlen(token) + 1); - token = strsep(&psz_cur, ":"); - count++; /* optimizes processing */ - } - /* If token is 0 or 1, and sz_sec_last_token is DYN_DARAM or DYN_SARAM, - or DYN_EXTERNAL, then mem granularity information is present - within the section name - only process if there are at least three - tokens within the section name (just a minor optimization) */ - if (count >= 3) { - status = kstrtos32(sz_last_token, 10, &req); - if (status) - goto func_cont; - } - - if ((req == 0) || (req == 1)) { - if (strcmp(sz_sec_last_token, "DYN_DARAM") == 0) { - seg_id = 0; - } else { - if (strcmp(sz_sec_last_token, "DYN_SARAM") == 0) { - seg_id = 1; - } else { - if (strcmp(sz_sec_last_token, - "DYN_EXTERNAL") == 0) - seg_id = 2; - } - } - } -func_cont: - kfree(sz_sect_name); - sz_sect_name = NULL; - kfree(sz_last_token); - sz_last_token = NULL; - kfree(sz_sec_last_token); - sz_sec_last_token = NULL; - - if (mem_sect_type == DBLL_CODE) - alloc_size = info->size + GEM_L1P_PREFETCH_SIZE; - else - alloc_size = info->size; - - if (info->load_addr != info->run_addr) - run_addr_flag = 1; - /* TODO - ideally, we can pass the alignment requirement also - * from here */ - if (lib != NULL) { - status = - (lib->target_obj->attrs.alloc) (lib->target_obj->attrs. - rmm_handle, mem_sect_type, - alloc_size, align, - (u32 *) &rmm_addr_obj, - seg_id, req, false); - } - if (status) { - ret = false; - } else { - /* RMM gives word address. Need to convert to byte address */ - info->load_addr = rmm_addr_obj.addr * DSPWORDSIZE; - if (!run_addr_flag) - info->run_addr = info->load_addr; - info->context = (u32) rmm_addr_obj.segid; - dev_dbg(bridge, "%s: %s base = 0x%x len = 0x%x, info->run_addr 0x%x, info->load_addr 0x%x\n", - __func__, info->name, info->load_addr / DSPWORDSIZE, - info->size / DSPWORDSIZE, info->run_addr, - info->load_addr); - } - return ret; -} - -/* - * ======== rmm_dealloc ======== - */ -static void rmm_dealloc(struct dynamic_loader_allocate *this, - struct ldr_section_info *info) -{ - struct dbll_alloc *dbll_alloc_obj = (struct dbll_alloc *)this; - struct dbll_library_obj *lib; - u32 segid; - int status = 0; - unsigned stype = DLOAD_SECTION_TYPE(info->type); - u32 mem_sect_type; - u32 free_size = 0; - - mem_sect_type = - (stype == DLOAD_TEXT) ? DBLL_CODE : (stype == - DLOAD_BSS) ? DBLL_BSS : - DBLL_DATA; - lib = dbll_alloc_obj->lib; - /* segid was set by alloc function */ - segid = (u32) info->context; - if (mem_sect_type == DBLL_CODE) - free_size = info->size + GEM_L1P_PREFETCH_SIZE; - else - free_size = info->size; - if (lib != NULL) { - status = - (lib->target_obj->attrs.free) (lib->target_obj->attrs. - sym_handle, segid, - info->load_addr / - DSPWORDSIZE, free_size, - false); - } -} - -/* dynamic_loader_initialize */ -/* - * ======== connect ======== - */ -static int connect(struct dynamic_loader_initialize *this) -{ - return true; -} - -/* - * ======== read_mem ======== - * This function does not need to be implemented. - */ -static int read_mem(struct dynamic_loader_initialize *this, void *buf, - ldr_addr addr, struct ldr_section_info *info, - unsigned nbytes) -{ - struct dbll_init_obj *init_obj = (struct dbll_init_obj *)this; - struct dbll_library_obj *lib; - int bytes_read = 0; - - lib = init_obj->lib; - /* Need bridge_brd_read function */ - return bytes_read; -} - -/* - * ======== write_mem ======== - */ -static int write_mem(struct dynamic_loader_initialize *this, void *buf, - ldr_addr addr, struct ldr_section_info *info, - unsigned bytes) -{ - struct dbll_init_obj *init_obj = (struct dbll_init_obj *)this; - struct dbll_library_obj *lib; - struct dbll_tar_obj *target_obj; - struct dbll_sect_info sect_info; - u32 mem_sect_type; - bool ret = true; - - lib = init_obj->lib; - if (!lib) - return false; - - target_obj = lib->target_obj; - - mem_sect_type = - (DLOAD_SECTION_TYPE(info->type) == - DLOAD_TEXT) ? DBLL_CODE : DBLL_DATA; - if (target_obj && target_obj->attrs.write) { - ret = - (*target_obj->attrs.write) (target_obj->attrs.input_params, - addr, buf, bytes, - mem_sect_type); - - if (target_obj->attrs.log_write) { - sect_info.name = info->name; - sect_info.sect_run_addr = info->run_addr; - sect_info.sect_load_addr = info->load_addr; - sect_info.size = info->size; - sect_info.type = mem_sect_type; - /* Pass the information about what we've written to - * another module */ - (*target_obj->attrs.log_write) (target_obj->attrs. - log_write_handle, - §_info, addr, - bytes); - } - } - return ret; -} - -/* - * ======== fill_mem ======== - * Fill bytes of memory at a given address with a given value by - * writing from a buffer containing the given value. Write in - * sets of MAXEXPR (128) bytes to avoid large stack buffer issues. - */ -static int fill_mem(struct dynamic_loader_initialize *this, ldr_addr addr, - struct ldr_section_info *info, unsigned bytes, unsigned val) -{ - bool ret = true; - char *pbuf; - struct dbll_library_obj *lib; - struct dbll_init_obj *init_obj = (struct dbll_init_obj *)this; - - lib = init_obj->lib; - pbuf = NULL; - /* Pass the NULL pointer to write_mem to get the start address of Shared - memory. This is a trick to just get the start address, there is no - writing taking place with this Writemem - */ - if ((lib->target_obj->attrs.write) != (dbll_write_fxn) no_op) - write_mem(this, &pbuf, addr, info, 0); - if (pbuf) - memset(pbuf, val, bytes); - - return ret; -} - -/* - * ======== execute ======== - */ -static int execute(struct dynamic_loader_initialize *this, ldr_addr start) -{ - struct dbll_init_obj *init_obj = (struct dbll_init_obj *)this; - struct dbll_library_obj *lib; - bool ret = true; - - lib = init_obj->lib; - /* Save entry point */ - if (lib != NULL) - lib->entry = (u32) start; - - return ret; -} - -/* - * ======== release ======== - */ -static void release(struct dynamic_loader_initialize *this) -{ -} - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/** - * find_symbol_context - Basic symbol context structure - * @address: Symbol Address - * @offset_range: Offset range where the search for the DSP symbol - * started. - * @cur_best_offset: Best offset to start looking for the DSP symbol - * @sym_addr: Address of the DSP symbol - * @name: Symbol name - * - */ -struct find_symbol_context { - /* input */ - u32 address; - u32 offset_range; - /* state */ - u32 cur_best_offset; - /* output */ - u32 sym_addr; - char name[120]; -}; - -/** - * find_symbol_callback() - Validates symbol address and copies the symbol name - * to the user data. - * @elem: dsp library context - * @user_data: Find symbol context - * - */ -void find_symbol_callback(void *elem, void *user_data) -{ - struct dbll_symbol *symbol = elem; - struct find_symbol_context *context = user_data; - u32 symbol_addr = symbol->value.value; - u32 offset = context->address - symbol_addr; - - /* - * Address given should be greater than symbol address, - * symbol address should be within specified range - * and the offset should be better than previous one - */ - if (context->address >= symbol_addr && symbol_addr < (u32)-1 && - offset < context->cur_best_offset) { - context->cur_best_offset = offset; - context->sym_addr = symbol_addr; - strlcpy(context->name, symbol->name, sizeof(context->name)); - } - - return; -} - -/** - * dbll_find_dsp_symbol() - This function retrieves the dsp symbol from the dsp binary. - * @zl_lib: DSP binary obj library pointer - * @address: Given address to find the dsp symbol - * @offset_range: offset range to look for dsp symbol - * @sym_addr_output: Symbol Output address - * @name_output: String with the dsp symbol - * - * This function retrieves the dsp symbol from the dsp binary. - */ -bool dbll_find_dsp_symbol(struct dbll_library_obj *zl_lib, u32 address, - u32 offset_range, u32 *sym_addr_output, - char *name_output) -{ - bool status = false; - struct find_symbol_context context; - - context.address = address; - context.offset_range = offset_range; - context.cur_best_offset = offset_range; - context.sym_addr = 0; - context.name[0] = '\0'; - - gh_iterate(zl_lib->sym_tab, find_symbol_callback, &context); - - if (context.name[0]) { - status = true; - strcpy(name_output, context.name); - *sym_addr_output = context.sym_addr; - } - - return status; -} -#endif diff --git a/drivers/staging/tidspbridge/pmgr/dev.c b/drivers/staging/tidspbridge/pmgr/dev.c deleted file mode 100644 index 616dc1f63070..000000000000 --- a/drivers/staging/tidspbridge/pmgr/dev.c +++ /dev/null @@ -1,969 +0,0 @@ -/* - * dev.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implementation of Bridge Bridge driver device operations. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Resource Manager */ -#include -#include - -/* ----------------------------------- Others */ -#include /* DSP API version info. */ - -#include -#include -#include -#include -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ - -#define MAKEVERSION(major, minor) (major * 10 + minor) -#define BRD_API_VERSION MAKEVERSION(BRD_API_MAJOR_VERSION, \ - BRD_API_MINOR_VERSION) - -/* The Bridge device object: */ -struct dev_object { - struct list_head link; /* Link to next dev_object. */ - u8 dev_type; /* Device Type */ - struct cfg_devnode *dev_node_obj; /* Platform specific dev id */ - /* Bridge Context Handle */ - struct bridge_dev_context *bridge_context; - /* Function interface to Bridge driver. */ - struct bridge_drv_interface bridge_interface; - struct brd_object *lock_owner; /* Client with exclusive access. */ - struct cod_manager *cod_mgr; /* Code manager handle. */ - struct chnl_mgr *chnl_mgr; /* Channel manager. */ - struct deh_mgr *deh_mgr; /* DEH manager. */ - struct msg_mgr *msg_mgr; /* Message manager. */ - struct io_mgr *iomgr; /* IO manager (CHNL, msg_ctrl) */ - struct cmm_object *cmm_mgr; /* SM memory manager. */ - struct dmm_object *dmm_mgr; /* Dynamic memory manager. */ - u32 word_size; /* DSP word size: quick access. */ - struct drv_object *drv_obj; /* Driver Object */ - /* List of Processors attached to this device */ - struct list_head proc_list; - struct node_mgr *node_mgr; -}; - -struct drv_ext { - struct list_head link; - char sz_string[MAXREGPATHLENGTH]; -}; - -/* ----------------------------------- Function Prototypes */ -static int fxn_not_implemented(int arg, ...); -static int init_cod_mgr(struct dev_object *dev_obj); -static void store_interface_fxns(struct bridge_drv_interface *drv_fxns, - struct bridge_drv_interface *intf_fxns); -/* - * ======== dev_brd_write_fxn ======== - * Purpose: - * Exported function to be used as the COD write function. This function - * is passed a handle to a DEV_hObject, then calls the - * device's bridge_brd_write() function. - */ -u32 dev_brd_write_fxn(void *arb, u32 dsp_add, void *host_buf, - u32 ul_num_bytes, u32 mem_space) -{ - struct dev_object *dev_obj = (struct dev_object *)arb; - u32 ul_written = 0; - int status; - - if (dev_obj) { - /* Require of BrdWrite() */ - status = (*dev_obj->bridge_interface.brd_write) ( - dev_obj->bridge_context, host_buf, - dsp_add, ul_num_bytes, mem_space); - /* Special case of getting the address only */ - if (ul_num_bytes == 0) - ul_num_bytes = 1; - if (!status) - ul_written = ul_num_bytes; - - } - return ul_written; -} - -/* - * ======== dev_create_device ======== - * Purpose: - * Called by the operating system to load the PM Bridge Driver for a - * PM board (device). - */ -int dev_create_device(struct dev_object **device_obj, - const char *driver_file_name, - struct cfg_devnode *dev_node_obj) -{ - struct cfg_hostres *host_res; - struct bridge_drv_interface *drv_fxns = NULL; - struct dev_object *dev_obj = NULL; - struct chnl_mgrattrs mgr_attrs; - struct io_attrs io_mgr_attrs; - u32 num_windows; - struct drv_object *hdrv_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - int status = 0; - - status = drv_request_bridge_res_dsp((void *)&host_res); - - if (status) { - dev_dbg(bridge, "%s: Failed to reserve bridge resources\n", - __func__); - goto leave; - } - - /* Get the Bridge driver interface functions */ - bridge_drv_entry(&drv_fxns, driver_file_name); - - /* Retrieve the Object handle from the driver data */ - if (drv_datap && drv_datap->drv_object) { - hdrv_obj = drv_datap->drv_object; - } else { - status = -EPERM; - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - /* Create the device object, and pass a handle to the Bridge driver for - * storage. */ - if (!status) { - dev_obj = kzalloc(sizeof(struct dev_object), GFP_KERNEL); - if (dev_obj) { - /* Fill out the rest of the Dev Object structure: */ - dev_obj->dev_node_obj = dev_node_obj; - dev_obj->cod_mgr = NULL; - dev_obj->chnl_mgr = NULL; - dev_obj->deh_mgr = NULL; - dev_obj->lock_owner = NULL; - dev_obj->word_size = DSPWORDSIZE; - dev_obj->drv_obj = hdrv_obj; - dev_obj->dev_type = DSP_UNIT; - /* Store this Bridge's interface functions, based on its - * version. */ - store_interface_fxns(drv_fxns, - &dev_obj->bridge_interface); - - /* Call fxn_dev_create() to get the Bridge's device - * context handle. */ - status = (dev_obj->bridge_interface.dev_create) - (&dev_obj->bridge_context, dev_obj, - host_res); - } else { - status = -ENOMEM; - } - } - /* Attempt to create the COD manager for this device: */ - if (!status) - status = init_cod_mgr(dev_obj); - - /* Attempt to create the channel manager for this device: */ - if (!status) { - mgr_attrs.max_channels = CHNL_MAXCHANNELS; - io_mgr_attrs.birq = host_res->birq_registers; - io_mgr_attrs.irq_shared = - (host_res->birq_attrib & CFG_IRQSHARED); - io_mgr_attrs.word_size = DSPWORDSIZE; - mgr_attrs.word_size = DSPWORDSIZE; - num_windows = host_res->num_mem_windows; - if (num_windows) { - /* Assume last memory window is for CHNL */ - io_mgr_attrs.shm_base = host_res->mem_base[1] + - host_res->offset_for_monitor; - io_mgr_attrs.sm_length = - host_res->mem_length[1] - - host_res->offset_for_monitor; - } else { - io_mgr_attrs.shm_base = 0; - io_mgr_attrs.sm_length = 0; - pr_err("%s: No memory reserved for shared structures\n", - __func__); - } - status = chnl_create(&dev_obj->chnl_mgr, dev_obj, &mgr_attrs); - if (status == -ENOSYS) { - /* It's OK for a device not to have a channel - * manager: */ - status = 0; - } - /* Create CMM mgr even if Msg Mgr not impl. */ - status = cmm_create(&dev_obj->cmm_mgr, - (struct dev_object *)dev_obj, NULL); - /* Only create IO manager if we have a channel manager */ - if (!status && dev_obj->chnl_mgr) { - status = io_create(&dev_obj->iomgr, dev_obj, - &io_mgr_attrs); - } - /* Only create DEH manager if we have an IO manager */ - if (!status) { - /* Instantiate the DEH module */ - status = bridge_deh_create(&dev_obj->deh_mgr, dev_obj); - } - /* Create DMM mgr . */ - status = dmm_create(&dev_obj->dmm_mgr, - (struct dev_object *)dev_obj, NULL); - } - /* Add the new DEV_Object to the global list: */ - if (!status) - status = drv_insert_dev_object(hdrv_obj, dev_obj); - - /* Create the Processor List */ - if (!status) - INIT_LIST_HEAD(&dev_obj->proc_list); -leave: - /* If all went well, return a handle to the dev object; - * else, cleanup and return NULL in the OUT parameter. */ - if (!status) { - *device_obj = dev_obj; - } else { - if (dev_obj) { - if (dev_obj->cod_mgr) - cod_delete(dev_obj->cod_mgr); - if (dev_obj->dmm_mgr) - dmm_destroy(dev_obj->dmm_mgr); - kfree(dev_obj); - } - - *device_obj = NULL; - } - - return status; -} - -/* - * ======== dev_create2 ======== - * Purpose: - * After successful loading of the image from api_init_complete2 - * (PROC Auto_Start) or proc_load this fxn is called. This creates - * the Node Manager and updates the DEV Object. - */ -int dev_create2(struct dev_object *hdev_obj) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - /* There can be only one Node Manager per DEV object */ - status = node_create_mgr(&dev_obj->node_mgr, hdev_obj); - if (status) - dev_obj->node_mgr = NULL; - - return status; -} - -/* - * ======== dev_destroy2 ======== - * Purpose: - * Destroys the Node manager for this device. - */ -int dev_destroy2(struct dev_object *hdev_obj) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (dev_obj->node_mgr) { - if (node_delete_mgr(dev_obj->node_mgr)) - status = -EPERM; - else - dev_obj->node_mgr = NULL; - - } - - return status; -} - -/* - * ======== dev_destroy_device ======== - * Purpose: - * Destroys the channel manager for this device, if any, calls - * bridge_dev_destroy(), and then attempts to unload the Bridge module. - */ -int dev_destroy_device(struct dev_object *hdev_obj) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - if (dev_obj->cod_mgr) { - cod_delete(dev_obj->cod_mgr); - dev_obj->cod_mgr = NULL; - } - - if (dev_obj->node_mgr) { - node_delete_mgr(dev_obj->node_mgr); - dev_obj->node_mgr = NULL; - } - - /* Free the io, channel, and message managers for this board: */ - if (dev_obj->iomgr) { - io_destroy(dev_obj->iomgr); - dev_obj->iomgr = NULL; - } - if (dev_obj->chnl_mgr) { - chnl_destroy(dev_obj->chnl_mgr); - dev_obj->chnl_mgr = NULL; - } - if (dev_obj->msg_mgr) { - msg_delete(dev_obj->msg_mgr); - dev_obj->msg_mgr = NULL; - } - - if (dev_obj->deh_mgr) { - /* Uninitialize DEH module. */ - bridge_deh_destroy(dev_obj->deh_mgr); - dev_obj->deh_mgr = NULL; - } - if (dev_obj->cmm_mgr) { - cmm_destroy(dev_obj->cmm_mgr, true); - dev_obj->cmm_mgr = NULL; - } - - if (dev_obj->dmm_mgr) { - dmm_destroy(dev_obj->dmm_mgr); - dev_obj->dmm_mgr = NULL; - } - - /* Call the driver's bridge_dev_destroy() function: */ - /* Require of DevDestroy */ - if (dev_obj->bridge_context) { - status = (*dev_obj->bridge_interface.dev_destroy) - (dev_obj->bridge_context); - dev_obj->bridge_context = NULL; - } else - status = -EPERM; - if (!status) { - /* Remove this DEV_Object from the global list: */ - drv_remove_dev_object(dev_obj->drv_obj, dev_obj); - /* Free The library * LDR_FreeModule - * (dev_obj->module_obj); */ - /* Free this dev object: */ - kfree(dev_obj); - dev_obj = NULL; - } - } else { - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_chnl_mgr ======== - * Purpose: - * Retrieve the handle to the channel manager handle created for this - * device. - */ -int dev_get_chnl_mgr(struct dev_object *hdev_obj, - struct chnl_mgr **mgr) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *mgr = dev_obj->chnl_mgr; - } else { - *mgr = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_cmm_mgr ======== - * Purpose: - * Retrieve the handle to the shared memory manager created for this - * device. - */ -int dev_get_cmm_mgr(struct dev_object *hdev_obj, - struct cmm_object **mgr) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *mgr = dev_obj->cmm_mgr; - } else { - *mgr = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_dmm_mgr ======== - * Purpose: - * Retrieve the handle to the dynamic memory manager created for this - * device. - */ -int dev_get_dmm_mgr(struct dev_object *hdev_obj, - struct dmm_object **mgr) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *mgr = dev_obj->dmm_mgr; - } else { - *mgr = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_cod_mgr ======== - * Purpose: - * Retrieve the COD manager create for this device. - */ -int dev_get_cod_mgr(struct dev_object *hdev_obj, - struct cod_manager **cod_mgr) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *cod_mgr = dev_obj->cod_mgr; - } else { - *cod_mgr = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ========= dev_get_deh_mgr ======== - */ -int dev_get_deh_mgr(struct dev_object *hdev_obj, - struct deh_mgr **deh_manager) -{ - int status = 0; - - if (hdev_obj) { - *deh_manager = hdev_obj->deh_mgr; - } else { - *deh_manager = NULL; - status = -EFAULT; - } - return status; -} - -/* - * ======== dev_get_dev_node ======== - * Purpose: - * Retrieve the platform specific device ID for this device. - */ -int dev_get_dev_node(struct dev_object *hdev_obj, - struct cfg_devnode **dev_nde) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *dev_nde = dev_obj->dev_node_obj; - } else { - *dev_nde = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_first ======== - * Purpose: - * Retrieve the first Device Object handle from an internal linked list - * DEV_OBJECTs maintained by DEV. - */ -struct dev_object *dev_get_first(void) -{ - struct dev_object *dev_obj = NULL; - - dev_obj = (struct dev_object *)drv_get_first_dev_object(); - - return dev_obj; -} - -/* - * ======== dev_get_intf_fxns ======== - * Purpose: - * Retrieve the Bridge interface function structure for the loaded driver. - * if_fxns != NULL. - */ -int dev_get_intf_fxns(struct dev_object *hdev_obj, - struct bridge_drv_interface **if_fxns) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *if_fxns = &dev_obj->bridge_interface; - } else { - *if_fxns = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ========= dev_get_io_mgr ======== - */ -int dev_get_io_mgr(struct dev_object *hdev_obj, - struct io_mgr **io_man) -{ - int status = 0; - - if (hdev_obj) { - *io_man = hdev_obj->iomgr; - } else { - *io_man = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_next ======== - * Purpose: - * Retrieve the next Device Object handle from an internal linked list - * of DEV_OBJECTs maintained by DEV, after having previously called - * dev_get_first() and zero or more dev_get_next - */ -struct dev_object *dev_get_next(struct dev_object *hdev_obj) -{ - struct dev_object *next_dev_object = NULL; - - if (hdev_obj) { - next_dev_object = (struct dev_object *) - drv_get_next_dev_object((u32) hdev_obj); - } - - return next_dev_object; -} - -/* - * ========= dev_get_msg_mgr ======== - */ -void dev_get_msg_mgr(struct dev_object *hdev_obj, struct msg_mgr **msg_man) -{ - *msg_man = hdev_obj->msg_mgr; -} - -/* - * ======== dev_get_node_manager ======== - * Purpose: - * Retrieve the Node Manager Handle - */ -int dev_get_node_manager(struct dev_object *hdev_obj, - struct node_mgr **node_man) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *node_man = dev_obj->node_mgr; - } else { - *node_man = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_symbol ======== - */ -int dev_get_symbol(struct dev_object *hdev_obj, - const char *str_sym, u32 *pul_value) -{ - int status = 0; - struct cod_manager *cod_mgr; - - if (hdev_obj) { - status = dev_get_cod_mgr(hdev_obj, &cod_mgr); - if (cod_mgr) - status = cod_get_sym_value(cod_mgr, (char *)str_sym, - pul_value); - else - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_get_bridge_context ======== - * Purpose: - * Retrieve the Bridge Context handle, as returned by the - * bridge_dev_create fxn. - */ -int dev_get_bridge_context(struct dev_object *hdev_obj, - struct bridge_dev_context **phbridge_context) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) { - *phbridge_context = dev_obj->bridge_context; - } else { - *phbridge_context = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== dev_notify_clients ======== - * Purpose: - * Notify all clients of this device of a change in device status. - */ -int dev_notify_clients(struct dev_object *dev_obj, u32 ret) -{ - struct list_head *curr; - - /* - * FIXME: this code needs struct proc_object to have a list_head - * at the beginning. If not, this can go horribly wrong. - */ - list_for_each(curr, &dev_obj->proc_list) - proc_notify_clients((void *)curr, ret); - - return 0; -} - -/* - * ======== dev_remove_device ======== - */ -int dev_remove_device(struct cfg_devnode *dev_node_obj) -{ - struct dev_object *hdev_obj; /* handle to device object */ - int status = 0; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - if (!drv_datap) - status = -ENODATA; - - if (!dev_node_obj) - status = -EFAULT; - - /* Retrieve the device object handle originally stored with - * the dev_node: */ - if (!status) { - /* check the device string and then store dev object */ - if (!strcmp((char *)((struct drv_ext *)dev_node_obj)->sz_string, - "TIOMAP1510")) { - hdev_obj = drv_datap->dev_object; - /* Destroy the device object. */ - status = dev_destroy_device(hdev_obj); - } else { - status = -EPERM; - } - } - - if (status) - pr_err("%s: Failed, status 0x%x\n", __func__, status); - - return status; -} - -/* - * ======== dev_set_chnl_mgr ======== - * Purpose: - * Set the channel manager for this device. - */ -int dev_set_chnl_mgr(struct dev_object *hdev_obj, - struct chnl_mgr *hmgr) -{ - int status = 0; - struct dev_object *dev_obj = hdev_obj; - - if (hdev_obj) - dev_obj->chnl_mgr = hmgr; - else - status = -EFAULT; - - return status; -} - -/* - * ======== dev_set_msg_mgr ======== - * Purpose: - * Set the message manager for this device. - */ -void dev_set_msg_mgr(struct dev_object *hdev_obj, struct msg_mgr *hmgr) -{ - hdev_obj->msg_mgr = hmgr; -} - -/* - * ======== dev_start_device ======== - * Purpose: - * Initializes the new device with the BRIDGE environment. - */ -int dev_start_device(struct cfg_devnode *dev_node_obj) -{ - struct dev_object *hdev_obj = NULL; /* handle to 'Bridge Device */ - /* Bridge driver filename */ - char *bridge_file_name = "UMA"; - int status; - struct mgr_object *hmgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* Given all resources, create a device object. */ - status = dev_create_device(&hdev_obj, bridge_file_name, - dev_node_obj); - if (!status) { - /* Store away the hdev_obj with the DEVNODE */ - if (!drv_datap || !dev_node_obj) { - status = -EFAULT; - pr_err("%s: Failed, status 0x%x\n", __func__, status); - } else if (!(strcmp((char *)dev_node_obj, "TIOMAP1510"))) { - drv_datap->dev_object = (void *) hdev_obj; - } - if (!status) { - /* Create the Manager Object */ - status = mgr_create(&hmgr_obj, dev_node_obj); - if (status && !(strcmp((char *)dev_node_obj, - "TIOMAP1510"))) { - /* Ensure the device extension is NULL */ - drv_datap->dev_object = NULL; - } - } - if (status) { - /* Clean up */ - dev_destroy_device(hdev_obj); - hdev_obj = NULL; - } - } - - return status; -} - -/* - * ======== fxn_not_implemented ======== - * Purpose: - * Takes the place of a Bridge Null Function. - * Parameters: - * Multiple, optional. - * Returns: - * -ENOSYS: Always. - */ -static int fxn_not_implemented(int arg, ...) -{ - return -ENOSYS; -} - -/* - * ======== init_cod_mgr ======== - * Purpose: - * Create a COD manager for this device. - * Parameters: - * dev_obj: Pointer to device object created with - * dev_create_device() - * Returns: - * 0: Success. - * -EFAULT: Invalid hdev_obj. - * Requires: - * Should only be called once by dev_create_device() for a given DevObject. - * Ensures: - */ -static int init_cod_mgr(struct dev_object *dev_obj) -{ - int status = 0; - char *sz_dummy_file = "dummy"; - - status = cod_create(&dev_obj->cod_mgr, sz_dummy_file); - - return status; -} - -/* - * ======== dev_insert_proc_object ======== - * Purpose: - * Insert a ProcObject into the list maintained by DEV. - * Parameters: - * p_proc_object: Ptr to ProcObject to insert. - * dev_obj: Ptr to Dev Object where the list is. - * already_attached: Ptr to return the bool - * Returns: - * 0: If successful. - * Requires: - * List Exists - * hdev_obj is Valid handle - * DEV Initialized - * already_attached != NULL - * proc_obj != 0 - * Ensures: - * 0 and List is not Empty. - */ -int dev_insert_proc_object(struct dev_object *hdev_obj, - u32 proc_obj, bool *already_attached) -{ - struct dev_object *dev_obj = (struct dev_object *)hdev_obj; - - if (!list_empty(&dev_obj->proc_list)) - *already_attached = true; - - /* Add DevObject to tail. */ - /* - * FIXME: this code needs struct proc_object to have a list_head - * at the beginning. If not, this can go horribly wrong. - */ - list_add_tail((struct list_head *)proc_obj, &dev_obj->proc_list); - - return 0; -} - -/* - * ======== dev_remove_proc_object ======== - * Purpose: - * Search for and remove a Proc object from the given list maintained - * by the DEV - * Parameters: - * p_proc_object: Ptr to ProcObject to insert. - * dev_obj Ptr to Dev Object where the list is. - * Returns: - * 0: If successful. - * Requires: - * List exists and is not empty - * proc_obj != 0 - * hdev_obj is a valid Dev handle. - * Ensures: - * Details: - * List will be deleted when the DEV is destroyed. - */ -int dev_remove_proc_object(struct dev_object *hdev_obj, u32 proc_obj) -{ - int status = -EPERM; - struct list_head *cur_elem; - struct dev_object *dev_obj = (struct dev_object *)hdev_obj; - - /* Search list for dev_obj: */ - list_for_each(cur_elem, &dev_obj->proc_list) { - if ((u32) cur_elem == proc_obj) { - list_del(cur_elem); - status = 0; - break; - } - } - - return status; -} - -int dev_get_dev_type(struct dev_object *dev_obj, u8 *dev_type) -{ - *dev_type = dev_obj->dev_type; - return 0; -} - -/* - * ======== store_interface_fxns ======== - * Purpose: - * Copy the Bridge's interface functions into the device object, - * ensuring that fxn_not_implemented() is set for: - * - * 1. All Bridge function pointers which are NULL; and - * 2. All function slots in the struct dev_object structure which have no - * corresponding slots in the the Bridge's interface, because the Bridge - * is of an *older* version. - * Parameters: - * intf_fxns: Interface fxn Structure of the Bridge's Dev Object. - * drv_fxns: Interface Fxns offered by the Bridge during DEV_Create(). - * Returns: - * Requires: - * Input pointers are valid. - * Bridge driver is *not* written for a newer DSP API. - * Ensures: - * All function pointers in the dev object's fxn interface are not NULL. - */ -static void store_interface_fxns(struct bridge_drv_interface *drv_fxns, - struct bridge_drv_interface *intf_fxns) -{ - u32 bridge_version; - - /* Local helper macro: */ -#define STORE_FXN(cast, pfn) \ - (intf_fxns->pfn = ((drv_fxns->pfn != NULL) ? drv_fxns->pfn : \ - (cast)fxn_not_implemented)) - - bridge_version = MAKEVERSION(drv_fxns->brd_api_major_version, - drv_fxns->brd_api_minor_version); - intf_fxns->brd_api_major_version = drv_fxns->brd_api_major_version; - intf_fxns->brd_api_minor_version = drv_fxns->brd_api_minor_version; - /* Install functions up to DSP API version .80 (first alpha): */ - if (bridge_version > 0) { - STORE_FXN(fxn_dev_create, dev_create); - STORE_FXN(fxn_dev_destroy, dev_destroy); - STORE_FXN(fxn_dev_ctrl, dev_cntrl); - STORE_FXN(fxn_brd_monitor, brd_monitor); - STORE_FXN(fxn_brd_start, brd_start); - STORE_FXN(fxn_brd_stop, brd_stop); - STORE_FXN(fxn_brd_status, brd_status); - STORE_FXN(fxn_brd_read, brd_read); - STORE_FXN(fxn_brd_write, brd_write); - STORE_FXN(fxn_brd_setstate, brd_set_state); - STORE_FXN(fxn_brd_memcopy, brd_mem_copy); - STORE_FXN(fxn_brd_memwrite, brd_mem_write); - STORE_FXN(fxn_brd_memmap, brd_mem_map); - STORE_FXN(fxn_brd_memunmap, brd_mem_un_map); - STORE_FXN(fxn_chnl_create, chnl_create); - STORE_FXN(fxn_chnl_destroy, chnl_destroy); - STORE_FXN(fxn_chnl_open, chnl_open); - STORE_FXN(fxn_chnl_close, chnl_close); - STORE_FXN(fxn_chnl_addioreq, chnl_add_io_req); - STORE_FXN(fxn_chnl_getioc, chnl_get_ioc); - STORE_FXN(fxn_chnl_cancelio, chnl_cancel_io); - STORE_FXN(fxn_chnl_flushio, chnl_flush_io); - STORE_FXN(fxn_chnl_getinfo, chnl_get_info); - STORE_FXN(fxn_chnl_getmgrinfo, chnl_get_mgr_info); - STORE_FXN(fxn_chnl_idle, chnl_idle); - STORE_FXN(fxn_chnl_registernotify, chnl_register_notify); - STORE_FXN(fxn_io_create, io_create); - STORE_FXN(fxn_io_destroy, io_destroy); - STORE_FXN(fxn_io_onloaded, io_on_loaded); - STORE_FXN(fxn_io_getprocload, io_get_proc_load); - STORE_FXN(fxn_msg_create, msg_create); - STORE_FXN(fxn_msg_createqueue, msg_create_queue); - STORE_FXN(fxn_msg_delete, msg_delete); - STORE_FXN(fxn_msg_deletequeue, msg_delete_queue); - STORE_FXN(fxn_msg_get, msg_get); - STORE_FXN(fxn_msg_put, msg_put); - STORE_FXN(fxn_msg_registernotify, msg_register_notify); - STORE_FXN(fxn_msg_setqueueid, msg_set_queue_id); - } - /* Add code for any additional functions in newerBridge versions here */ -#undef STORE_FXN -} diff --git a/drivers/staging/tidspbridge/pmgr/dmm.c b/drivers/staging/tidspbridge/pmgr/dmm.c deleted file mode 100644 index fcf564aa566d..000000000000 --- a/drivers/staging/tidspbridge/pmgr/dmm.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - * dmm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * The Dynamic Memory Manager (DMM) module manages the DSP Virtual address - * space that can be directly mapped to any MPU buffer or memory region - * - * Notes: - * Region: Generic memory entitiy having a start address and a size - * Chunk: Reserved region - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define DMM_ADDR_VIRTUAL(a) \ - (((struct map_page *)(a) - virtual_mapping_table) * PG_SIZE4K +\ - dyn_mem_map_beg) -#define DMM_ADDR_TO_INDEX(a) (((a) - dyn_mem_map_beg) / PG_SIZE4K) - -/* DMM Mgr */ -struct dmm_object { - /* Dmm Lock is used to serialize access mem manager for - * multi-threads. */ - spinlock_t dmm_lock; /* Lock to access dmm mgr */ -}; - -struct map_page { - u32 region_size:15; - u32 mapped_size:15; - u32 reserved:1; - u32 mapped:1; -}; - -/* Create the free list */ -static struct map_page *virtual_mapping_table; -static u32 free_region; /* The index of free region */ -static u32 free_size; -static u32 dyn_mem_map_beg; /* The Beginning of dynamic memory mapping */ -static u32 table_size; /* The size of virt and phys pages tables */ - -/* ----------------------------------- Function Prototypes */ -static struct map_page *get_region(u32 addr); -static struct map_page *get_free_region(u32 len); -static struct map_page *get_mapped_region(u32 addrs); - -/* ======== dmm_create_tables ======== - * Purpose: - * Create table to hold the information of physical address - * the buffer pages that is passed by the user, and the table - * to hold the information of the virtual memory that is reserved - * for DSP. - */ -int dmm_create_tables(struct dmm_object *dmm_mgr, u32 addr, u32 size) -{ - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - int status = 0; - - status = dmm_delete_tables(dmm_obj); - if (!status) { - dyn_mem_map_beg = addr; - table_size = PG_ALIGN_HIGH(size, PG_SIZE4K) / PG_SIZE4K; - /* Create the free list */ - virtual_mapping_table = __vmalloc(table_size * - sizeof(struct map_page), GFP_KERNEL | - __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); - if (virtual_mapping_table == NULL) - status = -ENOMEM; - else { - /* On successful allocation, - * all entries are zero ('free') */ - free_region = 0; - free_size = table_size * PG_SIZE4K; - virtual_mapping_table[0].region_size = table_size; - } - } - - if (status) - pr_err("%s: failure, status 0x%x\n", __func__, status); - - return status; -} - -/* - * ======== dmm_create ======== - * Purpose: - * Create a dynamic memory manager object. - */ -int dmm_create(struct dmm_object **dmm_manager, - struct dev_object *hdev_obj, - const struct dmm_mgrattrs *mgr_attrts) -{ - struct dmm_object *dmm_obj = NULL; - int status = 0; - - *dmm_manager = NULL; - /* create, zero, and tag a cmm mgr object */ - dmm_obj = kzalloc(sizeof(struct dmm_object), GFP_KERNEL); - if (dmm_obj != NULL) { - spin_lock_init(&dmm_obj->dmm_lock); - *dmm_manager = dmm_obj; - } else { - status = -ENOMEM; - } - - return status; -} - -/* - * ======== dmm_destroy ======== - * Purpose: - * Release the communication memory manager resources. - */ -int dmm_destroy(struct dmm_object *dmm_mgr) -{ - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - int status = 0; - - if (dmm_mgr) { - status = dmm_delete_tables(dmm_obj); - if (!status) - kfree(dmm_obj); - } else - status = -EFAULT; - - return status; -} - -/* - * ======== dmm_delete_tables ======== - * Purpose: - * Delete DMM Tables. - */ -int dmm_delete_tables(struct dmm_object *dmm_mgr) -{ - int status = 0; - - /* Delete all DMM tables */ - if (dmm_mgr) - vfree(virtual_mapping_table); - else - status = -EFAULT; - return status; -} - -/* - * ======== dmm_get_handle ======== - * Purpose: - * Return the dynamic memory manager object for this device. - * This is typically called from the client process. - */ -int dmm_get_handle(void *hprocessor, struct dmm_object **dmm_manager) -{ - int status = 0; - struct dev_object *hdev_obj; - - if (hprocessor != NULL) - status = proc_get_dev_object(hprocessor, &hdev_obj); - else - hdev_obj = dev_get_first(); /* default */ - - if (!status) - status = dev_get_dmm_mgr(hdev_obj, dmm_manager); - - return status; -} - -/* - * ======== dmm_map_memory ======== - * Purpose: - * Add a mapping block to the reserved chunk. DMM assumes that this block - * will be mapped in the DSP/IVA's address space. DMM returns an error if a - * mapping overlaps another one. This function stores the info that will be - * required later while unmapping the block. - */ -int dmm_map_memory(struct dmm_object *dmm_mgr, u32 addr, u32 size) -{ - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - struct map_page *chunk; - int status = 0; - - spin_lock(&dmm_obj->dmm_lock); - /* Find the Reserved memory chunk containing the DSP block to - * be mapped */ - chunk = (struct map_page *)get_region(addr); - if (chunk != NULL) { - /* Mark the region 'mapped', leave the 'reserved' info as-is */ - chunk->mapped = true; - chunk->mapped_size = (size / PG_SIZE4K); - } else - status = -ENOENT; - spin_unlock(&dmm_obj->dmm_lock); - - dev_dbg(bridge, "%s dmm_mgr %p, addr %x, size %x\n\tstatus %x, chunk %p", - __func__, dmm_mgr, addr, size, status, chunk); - - return status; -} - -/* - * ======== dmm_reserve_memory ======== - * Purpose: - * Reserve a chunk of virtually contiguous DSP/IVA address space. - */ -int dmm_reserve_memory(struct dmm_object *dmm_mgr, u32 size, - u32 *prsv_addr) -{ - int status = 0; - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - struct map_page *node; - u32 rsv_addr = 0; - u32 rsv_size = 0; - - spin_lock(&dmm_obj->dmm_lock); - - /* Try to get a DSP chunk from the free list */ - node = get_free_region(size); - if (node != NULL) { - /* DSP chunk of given size is available. */ - rsv_addr = DMM_ADDR_VIRTUAL(node); - /* Calculate the number entries to use */ - rsv_size = size / PG_SIZE4K; - if (rsv_size < node->region_size) { - /* Mark remainder of free region */ - node[rsv_size].mapped = false; - node[rsv_size].reserved = false; - node[rsv_size].region_size = - node->region_size - rsv_size; - node[rsv_size].mapped_size = 0; - } - /* get_region will return first fit chunk. But we only use what - is requested. */ - node->mapped = false; - node->reserved = true; - node->region_size = rsv_size; - node->mapped_size = 0; - /* Return the chunk's starting address */ - *prsv_addr = rsv_addr; - } else - /*dSP chunk of given size is not available */ - status = -ENOMEM; - - spin_unlock(&dmm_obj->dmm_lock); - - dev_dbg(bridge, "%s dmm_mgr %p, size %x, prsv_addr %p\n\tstatus %x, rsv_addr %x, rsv_size %x\n", - __func__, dmm_mgr, size, - prsv_addr, status, rsv_addr, rsv_size); - - return status; -} - -/* - * ======== dmm_un_map_memory ======== - * Purpose: - * Remove the mapped block from the reserved chunk. - */ -int dmm_un_map_memory(struct dmm_object *dmm_mgr, u32 addr, u32 *psize) -{ - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - struct map_page *chunk; - int status = 0; - - spin_lock(&dmm_obj->dmm_lock); - chunk = get_mapped_region(addr); - if (chunk == NULL) - status = -ENOENT; - - if (!status) { - /* Unmap the region */ - *psize = chunk->mapped_size * PG_SIZE4K; - chunk->mapped = false; - chunk->mapped_size = 0; - } - spin_unlock(&dmm_obj->dmm_lock); - - dev_dbg(bridge, "%s: dmm_mgr %p, addr %x, psize %p\n\tstatus %x, chunk %p\n", - __func__, dmm_mgr, addr, psize, status, chunk); - - return status; -} - -/* - * ======== dmm_un_reserve_memory ======== - * Purpose: - * Free a chunk of reserved DSP/IVA address space. - */ -int dmm_un_reserve_memory(struct dmm_object *dmm_mgr, u32 rsv_addr) -{ - struct dmm_object *dmm_obj = (struct dmm_object *)dmm_mgr; - struct map_page *chunk; - u32 i; - int status = 0; - u32 chunk_size; - - spin_lock(&dmm_obj->dmm_lock); - - /* Find the chunk containing the reserved address */ - chunk = get_mapped_region(rsv_addr); - if (chunk == NULL) - status = -ENOENT; - - if (!status) { - /* Free all the mapped pages for this reserved region */ - i = 0; - while (i < chunk->region_size) { - if (chunk[i].mapped) { - /* Remove mapping from the page tables. */ - chunk_size = chunk[i].mapped_size; - /* Clear the mapping flags */ - chunk[i].mapped = false; - chunk[i].mapped_size = 0; - i += chunk_size; - } else - i++; - } - /* Clear the flags (mark the region 'free') */ - chunk->reserved = false; - /* NOTE: We do NOT coalesce free regions here. - * Free regions are coalesced in get_region(), as it traverses - *the whole mapping table - */ - } - spin_unlock(&dmm_obj->dmm_lock); - - dev_dbg(bridge, "%s: dmm_mgr %p, rsv_addr %x\n\tstatus %x chunk %p", - __func__, dmm_mgr, rsv_addr, status, chunk); - - return status; -} - -/* - * ======== get_region ======== - * Purpose: - * Returns a region containing the specified memory region - */ -static struct map_page *get_region(u32 addr) -{ - struct map_page *curr_region = NULL; - u32 i = 0; - - if (virtual_mapping_table != NULL) { - /* find page mapped by this address */ - i = DMM_ADDR_TO_INDEX(addr); - if (i < table_size) - curr_region = virtual_mapping_table + i; - } - - dev_dbg(bridge, "%s: curr_region %p, free_region %d, free_size %d\n", - __func__, curr_region, free_region, free_size); - return curr_region; -} - -/* - * ======== get_free_region ======== - * Purpose: - * Returns the requested free region - */ -static struct map_page *get_free_region(u32 len) -{ - struct map_page *curr_region = NULL; - u32 i = 0; - u32 region_size = 0; - u32 next_i = 0; - - if (virtual_mapping_table == NULL) - return curr_region; - if (len > free_size) { - /* Find the largest free region - * (coalesce during the traversal) */ - while (i < table_size) { - region_size = virtual_mapping_table[i].region_size; - next_i = i + region_size; - if (virtual_mapping_table[i].reserved == false) { - /* Coalesce, if possible */ - if (next_i < table_size && - virtual_mapping_table[next_i].reserved - == false) { - virtual_mapping_table[i].region_size += - virtual_mapping_table - [next_i].region_size; - continue; - } - region_size *= PG_SIZE4K; - if (region_size > free_size) { - free_region = i; - free_size = region_size; - } - } - i = next_i; - } - } - if (len <= free_size) { - curr_region = virtual_mapping_table + free_region; - free_region += (len / PG_SIZE4K); - free_size -= len; - } - return curr_region; -} - -/* - * ======== get_mapped_region ======== - * Purpose: - * Returns the requestedmapped region - */ -static struct map_page *get_mapped_region(u32 addrs) -{ - u32 i = 0; - struct map_page *curr_region = NULL; - - if (virtual_mapping_table == NULL) - return curr_region; - - i = DMM_ADDR_TO_INDEX(addrs); - if (i < table_size && (virtual_mapping_table[i].mapped || - virtual_mapping_table[i].reserved)) - curr_region = virtual_mapping_table + i; - return curr_region; -} - -#ifdef DSP_DMM_DEBUG -u32 dmm_mem_map_dump(struct dmm_object *dmm_mgr) -{ - struct map_page *curr_node = NULL; - u32 i; - u32 freemem = 0; - u32 bigsize = 0; - - spin_lock(&dmm_mgr->dmm_lock); - - if (virtual_mapping_table != NULL) { - for (i = 0; i < table_size; i += - virtual_mapping_table[i].region_size) { - curr_node = virtual_mapping_table + i; - if (curr_node->reserved) { - /*printk("RESERVED size = 0x%x, " - "Map size = 0x%x\n", - (curr_node->region_size * PG_SIZE4K), - (curr_node->mapped == false) ? 0 : - (curr_node->mapped_size * PG_SIZE4K)); - */ - } else { -/* printk("UNRESERVED size = 0x%x\n", - (curr_node->region_size * PG_SIZE4K)); - */ - freemem += (curr_node->region_size * PG_SIZE4K); - if (curr_node->region_size > bigsize) - bigsize = curr_node->region_size; - } - } - } - spin_unlock(&dmm_mgr->dmm_lock); - dev_info(bridge, "Total DSP VA FREE memory = %d Mbytes\n", - freemem / (1024 * 1024)); - dev_info(bridge, "Total DSP VA USED memory= %d Mbytes\n", - (((table_size * PG_SIZE4K) - freemem)) / (1024 * 1024)); - dev_info(bridge, "DSP VA - Biggest FREE block = %d Mbytes\n", - (bigsize * PG_SIZE4K / (1024 * 1024))); - - return 0; -} -#endif diff --git a/drivers/staging/tidspbridge/pmgr/dspapi.c b/drivers/staging/tidspbridge/pmgr/dspapi.c deleted file mode 100644 index c4ccf17d21c0..000000000000 --- a/drivers/staging/tidspbridge/pmgr/dspapi.c +++ /dev/null @@ -1,1841 +0,0 @@ -/* - * dspapi.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Common DSP API functions, also includes the wrapper - * functions called directly by the DeviceIOControl interface. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include - -#include -#include - -/* ----------------------------------- Resource Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Others */ -#include -#include -#include - -/* ----------------------------------- This */ -#include -#include - -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define MAX_TRACEBUFLEN 255 -#define MAX_LOADARGS 16 -#define MAX_NODES 64 -#define MAX_STREAMS 16 -#define MAX_BUFS 64 - -/* Used to get dspbridge ioctl table */ -#define DB_GET_IOC_TABLE(cmd) (DB_GET_MODULE(cmd) >> DB_MODULE_SHIFT) - -/* Device IOCtl function pointer */ -struct api_cmd { - u32(*fxn) (union trapped_args *args, void *pr_ctxt); - u32 index; -}; - -/* ----------------------------------- Globals */ -static u32 api_c_refs; - -/* - * Function tables. - * The order of these functions MUST be the same as the order of the command - * numbers defined in dspapi-ioctl.h This is how an IOCTL number in user mode - * turns into a function call in kernel mode. - */ - -/* MGR wrapper functions */ -static struct api_cmd mgr_cmd[] = { - {mgrwrap_enum_node_info}, /* MGR_ENUMNODE_INFO */ - {mgrwrap_enum_proc_info}, /* MGR_ENUMPROC_INFO */ - {mgrwrap_register_object}, /* MGR_REGISTEROBJECT */ - {mgrwrap_unregister_object}, /* MGR_UNREGISTEROBJECT */ - {mgrwrap_wait_for_bridge_events}, /* MGR_WAIT */ - {mgrwrap_get_process_resources_info}, /* MGR_GET_PROC_RES */ -}; - -/* PROC wrapper functions */ -static struct api_cmd proc_cmd[] = { - {procwrap_attach}, /* PROC_ATTACH */ - {procwrap_ctrl}, /* PROC_CTRL */ - {procwrap_detach}, /* PROC_DETACH */ - {procwrap_enum_node_info}, /* PROC_ENUMNODE */ - {procwrap_enum_resources}, /* PROC_ENUMRESOURCES */ - {procwrap_get_state}, /* PROC_GET_STATE */ - {procwrap_get_trace}, /* PROC_GET_TRACE */ - {procwrap_load}, /* PROC_LOAD */ - {procwrap_register_notify}, /* PROC_REGISTERNOTIFY */ - {procwrap_start}, /* PROC_START */ - {procwrap_reserve_memory}, /* PROC_RSVMEM */ - {procwrap_un_reserve_memory}, /* PROC_UNRSVMEM */ - {procwrap_map}, /* PROC_MAPMEM */ - {procwrap_un_map}, /* PROC_UNMAPMEM */ - {procwrap_flush_memory}, /* PROC_FLUSHMEMORY */ - {procwrap_stop}, /* PROC_STOP */ - {procwrap_invalidate_memory}, /* PROC_INVALIDATEMEMORY */ - {procwrap_begin_dma}, /* PROC_BEGINDMA */ - {procwrap_end_dma}, /* PROC_ENDDMA */ -}; - -/* NODE wrapper functions */ -static struct api_cmd node_cmd[] = { - {nodewrap_allocate}, /* NODE_ALLOCATE */ - {nodewrap_alloc_msg_buf}, /* NODE_ALLOCMSGBUF */ - {nodewrap_change_priority}, /* NODE_CHANGEPRIORITY */ - {nodewrap_connect}, /* NODE_CONNECT */ - {nodewrap_create}, /* NODE_CREATE */ - {nodewrap_delete}, /* NODE_DELETE */ - {nodewrap_free_msg_buf}, /* NODE_FREEMSGBUF */ - {nodewrap_get_attr}, /* NODE_GETATTR */ - {nodewrap_get_message}, /* NODE_GETMESSAGE */ - {nodewrap_pause}, /* NODE_PAUSE */ - {nodewrap_put_message}, /* NODE_PUTMESSAGE */ - {nodewrap_register_notify}, /* NODE_REGISTERNOTIFY */ - {nodewrap_run}, /* NODE_RUN */ - {nodewrap_terminate}, /* NODE_TERMINATE */ - {nodewrap_get_uuid_props}, /* NODE_GETUUIDPROPS */ -}; - -/* STRM wrapper functions */ -static struct api_cmd strm_cmd[] = { - {strmwrap_allocate_buffer}, /* STRM_ALLOCATEBUFFER */ - {strmwrap_close}, /* STRM_CLOSE */ - {strmwrap_free_buffer}, /* STRM_FREEBUFFER */ - {strmwrap_get_event_handle}, /* STRM_GETEVENTHANDLE */ - {strmwrap_get_info}, /* STRM_GETINFO */ - {strmwrap_idle}, /* STRM_IDLE */ - {strmwrap_issue}, /* STRM_ISSUE */ - {strmwrap_open}, /* STRM_OPEN */ - {strmwrap_reclaim}, /* STRM_RECLAIM */ - {strmwrap_register_notify}, /* STRM_REGISTERNOTIFY */ - {strmwrap_select}, /* STRM_SELECT */ -}; - -/* CMM wrapper functions */ -static struct api_cmd cmm_cmd[] = { - {cmmwrap_calloc_buf}, /* CMM_ALLOCBUF */ - {cmmwrap_free_buf}, /* CMM_FREEBUF */ - {cmmwrap_get_handle}, /* CMM_GETHANDLE */ - {cmmwrap_get_info}, /* CMM_GETINFO */ -}; - -/* Array used to store ioctl table sizes. It can hold up to 8 entries */ -static u8 size_cmd[] = { - ARRAY_SIZE(mgr_cmd), - ARRAY_SIZE(proc_cmd), - ARRAY_SIZE(node_cmd), - ARRAY_SIZE(strm_cmd), - ARRAY_SIZE(cmm_cmd), -}; - -static inline void _cp_fm_usr(void *to, const void __user *from, - int *err, unsigned long bytes) -{ - if (*err) - return; - - if (unlikely(!from)) { - *err = -EFAULT; - return; - } - - if (unlikely(copy_from_user(to, from, bytes))) - *err = -EFAULT; -} - -#define CP_FM_USR(to, from, err, n) \ - _cp_fm_usr(to, from, &(err), (n) * sizeof(*(to))) - -static inline void _cp_to_usr(void __user *to, const void *from, - int *err, unsigned long bytes) -{ - if (*err) - return; - - if (unlikely(!to)) { - *err = -EFAULT; - return; - } - - if (unlikely(copy_to_user(to, from, bytes))) - *err = -EFAULT; -} - -#define CP_TO_USR(to, from, err, n) \ - _cp_to_usr(to, from, &(err), (n) * sizeof(*(from))) - -/* - * ======== api_call_dev_ioctl ======== - * Purpose: - * Call the (wrapper) function for the corresponding API IOCTL. - */ -inline int api_call_dev_ioctl(u32 cmd, union trapped_args *args, - u32 *result, void *pr_ctxt) -{ - u32(*ioctl_cmd) (union trapped_args *args, void *pr_ctxt) = NULL; - int i; - - if (_IOC_TYPE(cmd) != DB) { - pr_err("%s: Incompatible dspbridge ioctl number\n", __func__); - goto err; - } - - if (DB_GET_IOC_TABLE(cmd) > ARRAY_SIZE(size_cmd)) { - pr_err("%s: undefined ioctl module\n", __func__); - goto err; - } - - /* Check the size of the required cmd table */ - i = DB_GET_IOC(cmd); - if (i > size_cmd[DB_GET_IOC_TABLE(cmd)]) { - pr_err("%s: requested ioctl %d out of bounds for table %d\n", - __func__, i, DB_GET_IOC_TABLE(cmd)); - goto err; - } - - switch (DB_GET_MODULE(cmd)) { - case DB_MGR: - ioctl_cmd = mgr_cmd[i].fxn; - break; - case DB_PROC: - ioctl_cmd = proc_cmd[i].fxn; - break; - case DB_NODE: - ioctl_cmd = node_cmd[i].fxn; - break; - case DB_STRM: - ioctl_cmd = strm_cmd[i].fxn; - break; - case DB_CMM: - ioctl_cmd = cmm_cmd[i].fxn; - break; - } - - if (!ioctl_cmd) { - pr_err("%s: requested ioctl not defined\n", __func__); - goto err; - } else { - *result = (*ioctl_cmd) (args, pr_ctxt); - } - - return 0; - -err: - return -EINVAL; -} - -/* - * ======== api_exit ======== - */ -void api_exit(void) -{ - api_c_refs--; - - if (api_c_refs == 0) - mgr_exit(); -} - -/* - * ======== api_init ======== - * Purpose: - * Module initialization used by Bridge API. - */ -bool api_init(void) -{ - bool ret = true; - - if (api_c_refs == 0) - ret = mgr_init(); - - if (ret) - api_c_refs++; - - return ret; -} - -/* - * ======== api_init_complete2 ======== - * Purpose: - * Perform any required bridge initialization which cannot - * be performed in api_init() or dev_start_device() due - * to the fact that some services are not yet - * completely initialized. - * Parameters: - * Returns: - * 0: Allow this device to load - * -EPERM: Failure. - * Requires: - * Bridge API initialized. - * Ensures: - */ -int api_init_complete2(void) -{ - int status = 0; - struct cfg_devnode *dev_node; - struct dev_object *hdev_obj; - struct drv_data *drv_datap; - u8 dev_type; - - /* Walk the list of DevObjects, get each devnode, and attempting to - * autostart the board. Note that this requires COF loading, which - * requires KFILE. */ - for (hdev_obj = dev_get_first(); hdev_obj != NULL; - hdev_obj = dev_get_next(hdev_obj)) { - if (dev_get_dev_node(hdev_obj, &dev_node)) - continue; - - if (dev_get_dev_type(hdev_obj, &dev_type)) - continue; - - if ((dev_type == DSP_UNIT) || (dev_type == IVA_UNIT)) { - drv_datap = dev_get_drvdata(bridge); - - if (drv_datap && drv_datap->base_img) - proc_auto_start(dev_node, hdev_obj); - } - } - - return status; -} - -/* TODO: Remove deprecated and not implemented ioctl wrappers */ - -/* - * ======== mgrwrap_enum_node_info ======== - */ -u32 mgrwrap_enum_node_info(union trapped_args *args, void *pr_ctxt) -{ - u8 *pndb_props; - u32 num_nodes = 0; - int status; - u32 size = args->args_mgr_enumnode_info.ndb_props_size; - - if (size < sizeof(struct dsp_ndbprops)) - return -EINVAL; - size = sizeof(struct dsp_ndbprops); - - pndb_props = kmalloc(size, GFP_KERNEL); - if (pndb_props == NULL) - return -ENOMEM; - - status = - mgr_enum_node_info(args->args_mgr_enumnode_info.node_id, - (struct dsp_ndbprops *)pndb_props, size, - &num_nodes); - - CP_TO_USR(args->args_mgr_enumnode_info.ndb_props, pndb_props, status, - size); - CP_TO_USR(args->args_mgr_enumnode_info.num_nodes, &num_nodes, status, - 1); - kfree(pndb_props); - - return status; -} - -/* - * ======== mgrwrap_enum_proc_info ======== - */ -u32 mgrwrap_enum_proc_info(union trapped_args *args, void *pr_ctxt) -{ - u8 *processor_info; - u8 num_procs = 0; - int status; - u32 size = args->args_mgr_enumproc_info.processor_info_size; - - if (size < sizeof(struct dsp_processorinfo)) - return -EINVAL; - - if (size > sizeof(struct mgr_processorextinfo)) - size = sizeof(struct mgr_processorextinfo); - - processor_info = kzalloc(size, GFP_KERNEL); - if (processor_info == NULL) - return -ENOMEM; - - status = - mgr_enum_processor_info(args->args_mgr_enumproc_info. - processor_id, - (struct dsp_processorinfo *) - processor_info, size, &num_procs); - - CP_TO_USR(args->args_mgr_enumproc_info.processor_info, processor_info, - status, size); - CP_TO_USR(args->args_mgr_enumproc_info.num_procs, &num_procs, - status, 1); - kfree(processor_info); - - return status; -} - -#define WRAP_MAP2CALLER(x) x -/* - * ======== mgrwrap_register_object ======== - */ -u32 mgrwrap_register_object(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct dsp_uuid uuid_obj; - u32 path_size = 0; - char *psz_path_name = NULL; - int status = 0; - - CP_FM_USR(&uuid_obj, args->args_mgr_registerobject.uuid_obj, status, 1); - if (status) - goto func_end; - path_size = strlen_user((char *) - args->args_mgr_registerobject.sz_path_name); - if (!path_size) { - status = -EINVAL; - goto func_end; - } - - psz_path_name = kmalloc(path_size, GFP_KERNEL); - if (!psz_path_name) { - status = -ENOMEM; - goto func_end; - } - ret = strncpy_from_user(psz_path_name, - (char *)args->args_mgr_registerobject. - sz_path_name, path_size); - if (!ret) { - status = -EFAULT; - goto func_end; - } - - if (args->args_mgr_registerobject.obj_type >= DSP_DCDMAXOBJTYPE) { - status = -EINVAL; - goto func_end; - } - - status = dcd_register_object(&uuid_obj, - args->args_mgr_registerobject.obj_type, - (char *)psz_path_name); -func_end: - kfree(psz_path_name); - return status; -} - -/* - * ======== mgrwrap_unregister_object ======== - */ -u32 mgrwrap_unregister_object(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_uuid uuid_obj; - - CP_FM_USR(&uuid_obj, args->args_mgr_registerobject.uuid_obj, status, 1); - if (status) - goto func_end; - - status = dcd_unregister_object(&uuid_obj, - args->args_mgr_unregisterobject. - obj_type); -func_end: - return status; - -} - -/* - * ======== mgrwrap_wait_for_bridge_events ======== - */ -u32 mgrwrap_wait_for_bridge_events(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_notification *anotifications[MAX_EVENTS]; - struct dsp_notification notifications[MAX_EVENTS]; - u32 index = 0, i; - u32 count = args->args_mgr_wait.count; - - if (count > MAX_EVENTS) - return -EINVAL; - - /* get the array of pointers to user structures */ - CP_FM_USR(anotifications, args->args_mgr_wait.anotifications, - status, count); - /* get the events */ - for (i = 0; i < count; i++) { - CP_FM_USR(¬ifications[i], anotifications[i], status, 1); - if (status || !notifications[i].handle) - return -EINVAL; - /* set the array of pointers to kernel structures */ - anotifications[i] = ¬ifications[i]; - } - status = mgr_wait_for_bridge_events(anotifications, count, - &index, - args->args_mgr_wait. - timeout); - CP_TO_USR(args->args_mgr_wait.index, &index, status, 1); - return status; -} - -/* - * ======== MGRWRAP_GetProcessResourceInfo ======== - */ -u32 __deprecated mgrwrap_get_process_resources_info(union trapped_args *args, - void *pr_ctxt) -{ - pr_err("%s: deprecated dspbridge ioctl\n", __func__); - return 0; -} - -/* - * ======== procwrap_attach ======== - */ -u32 procwrap_attach(union trapped_args *args, void *pr_ctxt) -{ - void *processor; - int status = 0; - struct dsp_processorattrin proc_attr_in, *attr_in = NULL; - - /* Optional argument */ - if (args->args_proc_attach.attr_in) { - CP_FM_USR(&proc_attr_in, args->args_proc_attach.attr_in, status, - 1); - if (!status) - attr_in = &proc_attr_in; - else - goto func_end; - - } - status = proc_attach(args->args_proc_attach.processor_id, attr_in, - &processor, pr_ctxt); - CP_TO_USR(args->args_proc_attach.ph_processor, &processor, status, 1); -func_end: - return status; -} - -/* - * ======== procwrap_ctrl ======== - */ -u32 procwrap_ctrl(union trapped_args *args, void *pr_ctxt) -{ - u32 cb_data_size, __user * psize = (u32 __user *) - args->args_proc_ctrl.args; - u8 *pargs = NULL; - int status = 0; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (psize) { - if (get_user(cb_data_size, psize)) { - status = -EPERM; - goto func_end; - } - cb_data_size += sizeof(u32); - pargs = kmalloc(cb_data_size, GFP_KERNEL); - if (pargs == NULL) { - status = -ENOMEM; - goto func_end; - } - - CP_FM_USR(pargs, args->args_proc_ctrl.args, status, - cb_data_size); - } - if (!status) { - status = proc_ctrl(hprocessor, - args->args_proc_ctrl.cmd, - (struct dsp_cbdata *)pargs); - } - - /* CP_TO_USR(args->args_proc_ctrl.args, pargs, status, 1); */ - kfree(pargs); -func_end: - return status; -} - -/* - * ======== procwrap_detach ======== - */ -u32 __deprecated procwrap_detach(union trapped_args *args, void *pr_ctxt) -{ - /* proc_detach called at bridge_release only */ - pr_err("%s: deprecated dspbridge ioctl\n", __func__); - return 0; -} - -/* - * ======== procwrap_enum_node_info ======== - */ -u32 procwrap_enum_node_info(union trapped_args *args, void *pr_ctxt) -{ - int status; - void *node_tab[MAX_NODES]; - u32 num_nodes; - u32 alloc_cnt; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (!args->args_proc_enumnode_info.node_tab_size) - return -EINVAL; - - status = proc_enum_nodes(hprocessor, - node_tab, - args->args_proc_enumnode_info.node_tab_size, - &num_nodes, &alloc_cnt); - CP_TO_USR(args->args_proc_enumnode_info.node_tab, node_tab, status, - num_nodes); - CP_TO_USR(args->args_proc_enumnode_info.num_nodes, &num_nodes, - status, 1); - CP_TO_USR(args->args_proc_enumnode_info.allocated, &alloc_cnt, - status, 1); - return status; -} - -u32 procwrap_end_dma(union trapped_args *args, void *pr_ctxt) -{ - int status; - - if (args->args_proc_dma.dir >= DMA_NONE) - return -EINVAL; - - status = proc_end_dma(pr_ctxt, - args->args_proc_dma.mpu_addr, - args->args_proc_dma.size, - args->args_proc_dma.dir); - return status; -} - -u32 procwrap_begin_dma(union trapped_args *args, void *pr_ctxt) -{ - int status; - - if (args->args_proc_dma.dir >= DMA_NONE) - return -EINVAL; - - status = proc_begin_dma(pr_ctxt, - args->args_proc_dma.mpu_addr, - args->args_proc_dma.size, - args->args_proc_dma.dir); - return status; -} - -/* - * ======== procwrap_flush_memory ======== - */ -u32 procwrap_flush_memory(union trapped_args *args, void *pr_ctxt) -{ - int status; - - if (args->args_proc_flushmemory.flags > - PROC_WRITEBACK_INVALIDATE_MEM) - return -EINVAL; - - status = proc_flush_memory(pr_ctxt, - args->args_proc_flushmemory.mpu_addr, - args->args_proc_flushmemory.size, - args->args_proc_flushmemory.flags); - return status; -} - -/* - * ======== procwrap_invalidate_memory ======== - */ -u32 procwrap_invalidate_memory(union trapped_args *args, void *pr_ctxt) -{ - int status; - - status = - proc_invalidate_memory(pr_ctxt, - args->args_proc_invalidatememory.mpu_addr, - args->args_proc_invalidatememory.size); - return status; -} - -/* - * ======== procwrap_enum_resources ======== - */ -u32 procwrap_enum_resources(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_resourceinfo resource_info; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (args->args_proc_enumresources.resource_info_size < - sizeof(struct dsp_resourceinfo)) - return -EINVAL; - - status = - proc_get_resource_info(hprocessor, - args->args_proc_enumresources.resource_type, - &resource_info, - args->args_proc_enumresources. - resource_info_size); - - CP_TO_USR(args->args_proc_enumresources.resource_info, &resource_info, - status, 1); - - return status; - -} - -/* - * ======== procwrap_get_state ======== - */ -u32 procwrap_get_state(union trapped_args *args, void *pr_ctxt) -{ - int status; - struct dsp_processorstate proc_state; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (args->args_proc_getstate.state_info_size < - sizeof(struct dsp_processorstate)) - return -EINVAL; - - status = proc_get_state(hprocessor, &proc_state, - args->args_proc_getstate.state_info_size); - CP_TO_USR(args->args_proc_getstate.proc_state_obj, &proc_state, status, - 1); - return status; - -} - -/* - * ======== procwrap_get_trace ======== - */ -u32 procwrap_get_trace(union trapped_args *args, void *pr_ctxt) -{ - int status; - u8 *pbuf; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (args->args_proc_gettrace.max_size > MAX_TRACEBUFLEN) - return -EINVAL; - - pbuf = kzalloc(args->args_proc_gettrace.max_size, GFP_KERNEL); - if (pbuf != NULL) { - status = proc_get_trace(hprocessor, pbuf, - args->args_proc_gettrace.max_size); - } else { - status = -ENOMEM; - } - CP_TO_USR(args->args_proc_gettrace.buf, pbuf, status, - args->args_proc_gettrace.max_size); - kfree(pbuf); - - return status; -} - -/* - * ======== procwrap_load ======== - */ -u32 procwrap_load(union trapped_args *args, void *pr_ctxt) -{ - s32 i, len; - int status = 0; - char *temp; - s32 count = args->args_proc_load.argc_index; - u8 **argv = NULL, **envp = NULL; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (count <= 0 || count > MAX_LOADARGS) { - status = -EINVAL; - goto func_cont; - } - - argv = kmalloc(count * sizeof(u8 *), GFP_KERNEL); - if (!argv) { - status = -ENOMEM; - goto func_cont; - } - - CP_FM_USR(argv, args->args_proc_load.user_args, status, count); - if (status) { - kfree(argv); - argv = NULL; - goto func_cont; - } - - for (i = 0; i < count; i++) { - if (argv[i]) { - /* User space pointer to argument */ - temp = (char *)argv[i]; - /* len is increased by 1 to accommodate NULL */ - len = strlen_user((char *)temp) + 1; - /* Kernel space pointer to argument */ - argv[i] = kmalloc(len, GFP_KERNEL); - if (argv[i]) { - CP_FM_USR(argv[i], temp, status, len); - if (status) { - kfree(argv[i]); - argv[i] = NULL; - goto func_cont; - } - } else { - status = -ENOMEM; - goto func_cont; - } - } - } - /* TODO: validate this */ - if (args->args_proc_load.user_envp) { - /* number of elements in the envp array including NULL */ - count = 0; - do { - if (get_user(temp, - args->args_proc_load.user_envp + count)) { - status = -EFAULT; - goto func_cont; - } - count++; - } while (temp); - envp = kmalloc(count * sizeof(u8 *), GFP_KERNEL); - if (!envp) { - status = -ENOMEM; - goto func_cont; - } - - CP_FM_USR(envp, args->args_proc_load.user_envp, status, count); - if (status) { - kfree(envp); - envp = NULL; - goto func_cont; - } - for (i = 0; envp[i]; i++) { - /* User space pointer to argument */ - temp = (char *)envp[i]; - /* len is increased by 1 to accommodate NULL */ - len = strlen_user((char *)temp) + 1; - /* Kernel space pointer to argument */ - envp[i] = kmalloc(len, GFP_KERNEL); - if (envp[i]) { - CP_FM_USR(envp[i], temp, status, len); - if (status) { - kfree(envp[i]); - envp[i] = NULL; - goto func_cont; - } - } else { - status = -ENOMEM; - goto func_cont; - } - } - } - - if (!status) { - status = proc_load(hprocessor, - args->args_proc_load.argc_index, - (const char **)argv, (const char **)envp); - } -func_cont: - if (envp) { - i = 0; - while (envp[i]) - kfree(envp[i++]); - - kfree(envp); - } - - if (argv) { - count = args->args_proc_load.argc_index; - for (i = 0; (i < count) && argv[i]; i++) - kfree(argv[i]); - - kfree(argv); - } - - return status; -} - -/* - * ======== procwrap_map ======== - */ -u32 procwrap_map(union trapped_args *args, void *pr_ctxt) -{ - int status; - void *map_addr; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if (!args->args_proc_mapmem.size) - return -EINVAL; - - status = proc_map(args->args_proc_mapmem.processor, - args->args_proc_mapmem.mpu_addr, - args->args_proc_mapmem.size, - args->args_proc_mapmem.req_addr, &map_addr, - args->args_proc_mapmem.map_attr, pr_ctxt); - if (!status) { - if (put_user(map_addr, args->args_proc_mapmem.map_addr)) { - status = -EINVAL; - proc_un_map(hprocessor, map_addr, pr_ctxt); - } - - } - return status; -} - -/* - * ======== procwrap_register_notify ======== - */ -u32 procwrap_register_notify(union trapped_args *args, void *pr_ctxt) -{ - int status; - struct dsp_notification notification; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - /* Initialize the notification data structure */ - notification.name = NULL; - notification.handle = NULL; - - status = proc_register_notify(hprocessor, - args->args_proc_register_notify.event_mask, - args->args_proc_register_notify.notify_type, - ¬ification); - CP_TO_USR(args->args_proc_register_notify.notification, ¬ification, - status, 1); - return status; -} - -/* - * ======== procwrap_reserve_memory ======== - */ -u32 procwrap_reserve_memory(union trapped_args *args, void *pr_ctxt) -{ - int status; - void *prsv_addr; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - if ((args->args_proc_rsvmem.size <= 0) || - (args->args_proc_rsvmem.size & (PG_SIZE4K - 1)) != 0) - return -EINVAL; - - status = proc_reserve_memory(hprocessor, - args->args_proc_rsvmem.size, &prsv_addr, - pr_ctxt); - if (!status) { - if (put_user(prsv_addr, args->args_proc_rsvmem.rsv_addr)) { - status = -EINVAL; - proc_un_reserve_memory(args->args_proc_rsvmem. - processor, prsv_addr, pr_ctxt); - } - } - return status; -} - -/* - * ======== procwrap_start ======== - */ -u32 procwrap_start(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - - ret = proc_start(((struct process_context *)pr_ctxt)->processor); - return ret; -} - -/* - * ======== procwrap_un_map ======== - */ -u32 procwrap_un_map(union trapped_args *args, void *pr_ctxt) -{ - int status; - - status = proc_un_map(((struct process_context *)pr_ctxt)->processor, - args->args_proc_unmapmem.map_addr, pr_ctxt); - return status; -} - -/* - * ======== procwrap_un_reserve_memory ======== - */ -u32 procwrap_un_reserve_memory(union trapped_args *args, void *pr_ctxt) -{ - int status; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - status = proc_un_reserve_memory(hprocessor, - args->args_proc_unrsvmem.rsv_addr, - pr_ctxt); - return status; -} - -/* - * ======== procwrap_stop ======== - */ -u32 procwrap_stop(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - - ret = proc_stop(((struct process_context *)pr_ctxt)->processor); - - return ret; -} - -/* - * ======== find_handle ========= - */ -inline void find_node_handle(struct node_res_object **noderes, - void *pr_ctxt, void *hnode) -{ - rcu_read_lock(); - *noderes = idr_find(((struct process_context *)pr_ctxt)->node_id, - (int)hnode - 1); - rcu_read_unlock(); - return; -} - - -/* - * ======== nodewrap_allocate ======== - */ -u32 nodewrap_allocate(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_uuid node_uuid; - u32 cb_data_size = 0; - u32 __user *psize = (u32 __user *) args->args_node_allocate.args; - u8 *pargs = NULL; - struct dsp_nodeattrin proc_attr_in, *attr_in = NULL; - struct node_res_object *node_res; - int nodeid; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - /* Optional argument */ - if (psize) { - if (get_user(cb_data_size, psize)) - status = -EPERM; - - cb_data_size += sizeof(u32); - if (!status) { - pargs = kmalloc(cb_data_size, GFP_KERNEL); - if (pargs == NULL) - status = -ENOMEM; - - } - CP_FM_USR(pargs, args->args_node_allocate.args, status, - cb_data_size); - } - CP_FM_USR(&node_uuid, args->args_node_allocate.node_id_ptr, status, 1); - if (status) - goto func_cont; - /* Optional argument */ - if (args->args_node_allocate.attr_in) { - CP_FM_USR(&proc_attr_in, args->args_node_allocate.attr_in, - status, 1); - if (!status) - attr_in = &proc_attr_in; - else - status = -ENOMEM; - - } - if (!status) { - status = node_allocate(hprocessor, - &node_uuid, (struct dsp_cbdata *)pargs, - attr_in, &node_res, pr_ctxt); - } - if (!status) { - nodeid = node_res->id + 1; - CP_TO_USR(args->args_node_allocate.node, &nodeid, - status, 1); - if (status) { - status = -EFAULT; - node_delete(node_res, pr_ctxt); - } - } -func_cont: - kfree(pargs); - - return status; -} - -/* - * ======== nodewrap_alloc_msg_buf ======== - */ -u32 nodewrap_alloc_msg_buf(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_bufferattr *pattr = NULL; - struct dsp_bufferattr attr; - u8 *pbuffer = NULL; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, - args->args_node_allocmsgbuf.node); - - if (!node_res) - return -EFAULT; - - if (!args->args_node_allocmsgbuf.size) - return -EINVAL; - - if (args->args_node_allocmsgbuf.attr) { /* Optional argument */ - CP_FM_USR(&attr, args->args_node_allocmsgbuf.attr, status, 1); - if (!status) - pattr = &attr; - - } - /* argument */ - CP_FM_USR(&pbuffer, args->args_node_allocmsgbuf.buffer, status, 1); - if (!status) { - status = node_alloc_msg_buf(node_res->node, - args->args_node_allocmsgbuf.size, - pattr, &pbuffer); - } - CP_TO_USR(args->args_node_allocmsgbuf.buffer, &pbuffer, status, 1); - return status; -} - -/* - * ======== nodewrap_change_priority ======== - */ -u32 nodewrap_change_priority(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, - args->args_node_changepriority.node); - - if (!node_res) - return -EFAULT; - - ret = node_change_priority(node_res->node, - args->args_node_changepriority.prio); - - return ret; -} - -/* - * ======== nodewrap_connect ======== - */ -u32 nodewrap_connect(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_strmattr attrs; - struct dsp_strmattr *pattrs = NULL; - u32 cb_data_size; - u32 __user *psize = (u32 __user *) args->args_node_connect.conn_param; - u8 *pargs = NULL; - struct node_res_object *node_res1, *node_res2; - struct node_object *node1 = NULL, *node2 = NULL; - - if ((int)args->args_node_connect.node != DSP_HGPPNODE) { - find_node_handle(&node_res1, pr_ctxt, - args->args_node_connect.node); - if (node_res1) - node1 = node_res1->node; - } else { - node1 = args->args_node_connect.node; - } - - if ((int)args->args_node_connect.other_node != DSP_HGPPNODE) { - find_node_handle(&node_res2, pr_ctxt, - args->args_node_connect.other_node); - if (node_res2) - node2 = node_res2->node; - } else { - node2 = args->args_node_connect.other_node; - } - - if (!node1 || !node2) - return -EFAULT; - - /* Optional argument */ - if (psize) { - if (get_user(cb_data_size, psize)) - status = -EPERM; - - cb_data_size += sizeof(u32); - if (!status) { - pargs = kmalloc(cb_data_size, GFP_KERNEL); - if (pargs == NULL) { - status = -ENOMEM; - goto func_cont; - } - - } - CP_FM_USR(pargs, args->args_node_connect.conn_param, status, - cb_data_size); - if (status) - goto func_cont; - } - if (args->args_node_connect.attrs) { /* Optional argument */ - CP_FM_USR(&attrs, args->args_node_connect.attrs, status, 1); - if (!status) - pattrs = &attrs; - - } - if (!status) { - status = node_connect(node1, - args->args_node_connect.stream_id, - node2, - args->args_node_connect.other_stream, - pattrs, (struct dsp_cbdata *)pargs); - } -func_cont: - kfree(pargs); - - return status; -} - -/* - * ======== nodewrap_create ======== - */ -u32 nodewrap_create(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_create.node); - - if (!node_res) - return -EFAULT; - - ret = node_create(node_res->node); - - return ret; -} - -/* - * ======== nodewrap_delete ======== - */ -u32 nodewrap_delete(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_delete.node); - - if (!node_res) - return -EFAULT; - - ret = node_delete(node_res, pr_ctxt); - - return ret; -} - -/* - * ======== nodewrap_free_msg_buf ======== - */ -u32 nodewrap_free_msg_buf(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_bufferattr *pattr = NULL; - struct dsp_bufferattr attr; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_freemsgbuf.node); - - if (!node_res) - return -EFAULT; - - if (args->args_node_freemsgbuf.attr) { /* Optional argument */ - CP_FM_USR(&attr, args->args_node_freemsgbuf.attr, status, 1); - if (!status) - pattr = &attr; - - } - - if (!args->args_node_freemsgbuf.buffer) - return -EFAULT; - - if (!status) { - status = node_free_msg_buf(node_res->node, - args->args_node_freemsgbuf.buffer, - pattr); - } - - return status; -} - -/* - * ======== nodewrap_get_attr ======== - */ -u32 nodewrap_get_attr(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_nodeattr attr; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_getattr.node); - - if (!node_res) - return -EFAULT; - - status = node_get_attr(node_res->node, &attr, - args->args_node_getattr.attr_size); - CP_TO_USR(args->args_node_getattr.attr, &attr, status, 1); - - return status; -} - -/* - * ======== nodewrap_get_message ======== - */ -u32 nodewrap_get_message(union trapped_args *args, void *pr_ctxt) -{ - int status; - struct dsp_msg msg; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_getmessage.node); - - if (!node_res) - return -EFAULT; - - status = node_get_message(node_res->node, &msg, - args->args_node_getmessage.timeout); - - CP_TO_USR(args->args_node_getmessage.message, &msg, status, 1); - - return status; -} - -/* - * ======== nodewrap_pause ======== - */ -u32 nodewrap_pause(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_pause.node); - - if (!node_res) - return -EFAULT; - - ret = node_pause(node_res->node); - - return ret; -} - -/* - * ======== nodewrap_put_message ======== - */ -u32 nodewrap_put_message(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_msg msg; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_putmessage.node); - - if (!node_res) - return -EFAULT; - - CP_FM_USR(&msg, args->args_node_putmessage.message, status, 1); - - if (!status) { - status = - node_put_message(node_res->node, &msg, - args->args_node_putmessage.timeout); - } - - return status; -} - -/* - * ======== nodewrap_register_notify ======== - */ -u32 nodewrap_register_notify(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_notification notification; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, - args->args_node_registernotify.node); - - if (!node_res) - return -EFAULT; - - /* Initialize the notification data structure */ - notification.name = NULL; - notification.handle = NULL; - - if (!args->args_proc_register_notify.event_mask) - CP_FM_USR(¬ification, - args->args_proc_register_notify.notification, - status, 1); - - status = node_register_notify(node_res->node, - args->args_node_registernotify.event_mask, - args->args_node_registernotify. - notify_type, ¬ification); - CP_TO_USR(args->args_node_registernotify.notification, ¬ification, - status, 1); - return status; -} - -/* - * ======== nodewrap_run ======== - */ -u32 nodewrap_run(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_run.node); - - if (!node_res) - return -EFAULT; - - ret = node_run(node_res->node); - - return ret; -} - -/* - * ======== nodewrap_terminate ======== - */ -u32 nodewrap_terminate(union trapped_args *args, void *pr_ctxt) -{ - int status; - int tempstatus; - struct node_res_object *node_res; - - find_node_handle(&node_res, pr_ctxt, args->args_node_terminate.node); - - if (!node_res) - return -EFAULT; - - status = node_terminate(node_res->node, &tempstatus); - - CP_TO_USR(args->args_node_terminate.status, &tempstatus, status, 1); - - return status; -} - -/* - * ======== nodewrap_get_uuid_props ======== - */ -u32 nodewrap_get_uuid_props(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_uuid node_uuid; - struct dsp_ndbprops *pnode_props = NULL; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - CP_FM_USR(&node_uuid, args->args_node_getuuidprops.node_id_ptr, status, - 1); - if (status) - goto func_cont; - pnode_props = kmalloc(sizeof(struct dsp_ndbprops), GFP_KERNEL); - if (pnode_props != NULL) { - status = - node_get_uuid_props(hprocessor, &node_uuid, pnode_props); - CP_TO_USR(args->args_node_getuuidprops.node_props, pnode_props, - status, 1); - } else - status = -ENOMEM; -func_cont: - kfree(pnode_props); - return status; -} - -/* - * ======== find_strm_handle ========= - */ -inline void find_strm_handle(struct strm_res_object **strmres, - void *pr_ctxt, void *hstream) -{ - rcu_read_lock(); - *strmres = idr_find(((struct process_context *)pr_ctxt)->stream_id, - (int)hstream - 1); - rcu_read_unlock(); - return; -} - -/* - * ======== strmwrap_allocate_buffer ======== - */ -u32 strmwrap_allocate_buffer(union trapped_args *args, void *pr_ctxt) -{ - int status; - u8 **ap_buffer = NULL; - u32 num_bufs = args->args_strm_allocatebuffer.num_bufs; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, - args->args_strm_allocatebuffer.stream); - - if (!strm_res) - return -EFAULT; - - if (num_bufs > MAX_BUFS) - return -EINVAL; - - ap_buffer = kmalloc((num_bufs * sizeof(u8 *)), GFP_KERNEL); - if (ap_buffer == NULL) - return -ENOMEM; - - status = strm_allocate_buffer(strm_res, - args->args_strm_allocatebuffer.size, - ap_buffer, num_bufs, pr_ctxt); - if (!status) { - CP_TO_USR(args->args_strm_allocatebuffer.ap_buffer, ap_buffer, - status, num_bufs); - if (status) { - status = -EFAULT; - strm_free_buffer(strm_res, - ap_buffer, num_bufs, pr_ctxt); - } - } - kfree(ap_buffer); - - return status; -} - -/* - * ======== strmwrap_close ======== - */ -u32 strmwrap_close(union trapped_args *args, void *pr_ctxt) -{ - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, args->args_strm_close.stream); - - if (!strm_res) - return -EFAULT; - - return strm_close(strm_res, pr_ctxt); -} - -/* - * ======== strmwrap_free_buffer ======== - */ -u32 strmwrap_free_buffer(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - u8 **ap_buffer = NULL; - u32 num_bufs = args->args_strm_freebuffer.num_bufs; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, - args->args_strm_freebuffer.stream); - - if (!strm_res) - return -EFAULT; - - if (num_bufs > MAX_BUFS) - return -EINVAL; - - ap_buffer = kmalloc_array(num_bufs, sizeof(u8 *), GFP_KERNEL); - if (ap_buffer == NULL) - return -ENOMEM; - - CP_FM_USR(ap_buffer, args->args_strm_freebuffer.ap_buffer, status, - num_bufs); - - if (!status) - status = strm_free_buffer(strm_res, - ap_buffer, num_bufs, pr_ctxt); - - CP_TO_USR(args->args_strm_freebuffer.ap_buffer, ap_buffer, status, - num_bufs); - kfree(ap_buffer); - - return status; -} - -/* - * ======== strmwrap_get_event_handle ======== - */ -u32 __deprecated strmwrap_get_event_handle(union trapped_args *args, - void *pr_ctxt) -{ - pr_err("%s: deprecated dspbridge ioctl\n", __func__); - return -ENOSYS; -} - -/* - * ======== strmwrap_get_info ======== - */ -u32 strmwrap_get_info(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct stream_info strm_info; - struct dsp_streaminfo user; - struct dsp_streaminfo *temp; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, - args->args_strm_getinfo.stream); - - if (!strm_res) - return -EFAULT; - - CP_FM_USR(&strm_info, args->args_strm_getinfo.stream_info, status, 1); - temp = strm_info.user_strm; - - strm_info.user_strm = &user; - - if (!status) { - status = strm_get_info(strm_res->stream, - &strm_info, - args->args_strm_getinfo. - stream_info_size); - } - CP_TO_USR(temp, strm_info.user_strm, status, 1); - strm_info.user_strm = temp; - CP_TO_USR(args->args_strm_getinfo.stream_info, &strm_info, status, 1); - return status; -} - -/* - * ======== strmwrap_idle ======== - */ -u32 strmwrap_idle(union trapped_args *args, void *pr_ctxt) -{ - u32 ret; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, args->args_strm_idle.stream); - - if (!strm_res) - return -EFAULT; - - ret = strm_idle(strm_res->stream, args->args_strm_idle.flush_flag); - - return ret; -} - -/* - * ======== strmwrap_issue ======== - */ -u32 strmwrap_issue(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, args->args_strm_issue.stream); - - if (!strm_res) - return -EFAULT; - - if (!args->args_strm_issue.buffer) - return -EFAULT; - - /* No need of doing CP_FM_USR for the user buffer (pbuffer) - as this is done in Bridge internal function bridge_chnl_add_io_req - in chnl_sm.c */ - status = strm_issue(strm_res->stream, - args->args_strm_issue.buffer, - args->args_strm_issue.bytes, - args->args_strm_issue.buf_size, - args->args_strm_issue.arg); - - return status; -} - -/* - * ======== strmwrap_open ======== - */ -u32 strmwrap_open(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct strm_attr attr; - struct strm_res_object *strm_res_obj; - struct dsp_streamattrin strm_attr_in; - struct node_res_object *node_res; - int strmid; - - find_node_handle(&node_res, pr_ctxt, args->args_strm_open.node); - - if (!node_res) - return -EFAULT; - - CP_FM_USR(&attr, args->args_strm_open.attr_in, status, 1); - - if (attr.stream_attr_in != NULL) { /* Optional argument */ - CP_FM_USR(&strm_attr_in, attr.stream_attr_in, status, 1); - if (!status) { - attr.stream_attr_in = &strm_attr_in; - if (attr.stream_attr_in->strm_mode == STRMMODE_LDMA) - return -ENOSYS; - } - - } - status = strm_open(node_res->node, - args->args_strm_open.direction, - args->args_strm_open.index, &attr, &strm_res_obj, - pr_ctxt); - if (!status) { - strmid = strm_res_obj->id + 1; - CP_TO_USR(args->args_strm_open.stream, &strmid, status, 1); - } - return status; -} - -/* - * ======== strmwrap_reclaim ======== - */ -u32 strmwrap_reclaim(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - u8 *buf_ptr; - u32 ul_bytes; - u32 dw_arg; - u32 ul_buf_size; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, args->args_strm_reclaim.stream); - - if (!strm_res) - return -EFAULT; - - status = strm_reclaim(strm_res->stream, &buf_ptr, - &ul_bytes, &ul_buf_size, &dw_arg); - CP_TO_USR(args->args_strm_reclaim.buf_ptr, &buf_ptr, status, 1); - CP_TO_USR(args->args_strm_reclaim.bytes, &ul_bytes, status, 1); - CP_TO_USR(args->args_strm_reclaim.arg, &dw_arg, status, 1); - - if (args->args_strm_reclaim.buf_size_ptr != NULL) { - CP_TO_USR(args->args_strm_reclaim.buf_size_ptr, &ul_buf_size, - status, 1); - } - - return status; -} - -/* - * ======== strmwrap_register_notify ======== - */ -u32 strmwrap_register_notify(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct dsp_notification notification; - struct strm_res_object *strm_res; - - find_strm_handle(&strm_res, pr_ctxt, - args->args_strm_registernotify.stream); - - if (!strm_res) - return -EFAULT; - - /* Initialize the notification data structure */ - notification.name = NULL; - notification.handle = NULL; - - status = strm_register_notify(strm_res->stream, - args->args_strm_registernotify.event_mask, - args->args_strm_registernotify. - notify_type, ¬ification); - CP_TO_USR(args->args_strm_registernotify.notification, ¬ification, - status, 1); - - return status; -} - -/* - * ======== strmwrap_select ======== - */ -u32 strmwrap_select(union trapped_args *args, void *pr_ctxt) -{ - u32 mask = 0; - struct strm_object *strm_tab[MAX_STREAMS]; - int status = 0; - struct strm_res_object *strm_res; - int *ids[MAX_STREAMS]; - int i; - - if (args->args_strm_select.strm_num > MAX_STREAMS) - return -EINVAL; - - CP_FM_USR(ids, args->args_strm_select.stream_tab, status, - args->args_strm_select.strm_num); - - if (status) - return status; - - for (i = 0; i < args->args_strm_select.strm_num; i++) { - find_strm_handle(&strm_res, pr_ctxt, ids[i]); - - if (!strm_res) - return -EFAULT; - - strm_tab[i] = strm_res->stream; - } - - if (!status) { - status = strm_select(strm_tab, args->args_strm_select.strm_num, - &mask, args->args_strm_select.timeout); - } - CP_TO_USR(args->args_strm_select.mask, &mask, status, 1); - return status; -} - -/* CMM */ - -/* - * ======== cmmwrap_calloc_buf ======== - */ -u32 __deprecated cmmwrap_calloc_buf(union trapped_args *args, void *pr_ctxt) -{ - /* This operation is done in kernel */ - pr_err("%s: deprecated dspbridge ioctl\n", __func__); - return -ENOSYS; -} - -/* - * ======== cmmwrap_free_buf ======== - */ -u32 __deprecated cmmwrap_free_buf(union trapped_args *args, void *pr_ctxt) -{ - /* This operation is done in kernel */ - pr_err("%s: deprecated dspbridge ioctl\n", __func__); - return -ENOSYS; -} - -/* - * ======== cmmwrap_get_handle ======== - */ -u32 cmmwrap_get_handle(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct cmm_object *hcmm_mgr; - void *hprocessor = ((struct process_context *)pr_ctxt)->processor; - - status = cmm_get_handle(hprocessor, &hcmm_mgr); - - CP_TO_USR(args->args_cmm_gethandle.cmm_mgr, &hcmm_mgr, status, 1); - - return status; -} - -/* - * ======== cmmwrap_get_info ======== - */ -u32 cmmwrap_get_info(union trapped_args *args, void *pr_ctxt) -{ - int status = 0; - struct cmm_info cmm_info_obj; - - status = cmm_get_info(args->args_cmm_getinfo.cmm_mgr, &cmm_info_obj); - - CP_TO_USR(args->args_cmm_getinfo.cmm_info_obj, &cmm_info_obj, status, - 1); - - return status; -} diff --git a/drivers/staging/tidspbridge/pmgr/io.c b/drivers/staging/tidspbridge/pmgr/io.c deleted file mode 100644 index 4073c9c672fd..000000000000 --- a/drivers/staging/tidspbridge/pmgr/io.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * io.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * IO manager interface: Manages IO between CHNL and msg_ctrl. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- This */ -#include -#include - -/* - * ======== io_create ======== - * Purpose: - * Create an IO manager object, responsible for managing IO between - * CHNL and msg_ctrl - */ -int io_create(struct io_mgr **io_man, struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts) -{ - struct bridge_drv_interface *intf_fxns; - struct io_mgr *hio_mgr = NULL; - struct io_mgr_ *pio_mgr = NULL; - int status = 0; - - *io_man = NULL; - - /* A memory base of 0 implies no memory base: */ - if ((mgr_attrts->shm_base != 0) && (mgr_attrts->sm_length == 0)) - status = -EINVAL; - - if (mgr_attrts->word_size == 0) - status = -EINVAL; - - if (!status) { - dev_get_intf_fxns(hdev_obj, &intf_fxns); - - /* Let Bridge channel module finish the create: */ - status = (*intf_fxns->io_create) (&hio_mgr, hdev_obj, - mgr_attrts); - - if (!status) { - pio_mgr = (struct io_mgr_ *)hio_mgr; - pio_mgr->intf_fxns = intf_fxns; - pio_mgr->dev_obj = hdev_obj; - - /* Return the new channel manager handle: */ - *io_man = hio_mgr; - } - } - - return status; -} - -/* - * ======== io_destroy ======== - * Purpose: - * Delete IO manager. - */ -int io_destroy(struct io_mgr *hio_mgr) -{ - struct bridge_drv_interface *intf_fxns; - struct io_mgr_ *pio_mgr = (struct io_mgr_ *)hio_mgr; - int status; - - intf_fxns = pio_mgr->intf_fxns; - - /* Let Bridge channel module destroy the io_mgr: */ - status = (*intf_fxns->io_destroy) (hio_mgr); - - return status; -} diff --git a/drivers/staging/tidspbridge/pmgr/ioobj.h b/drivers/staging/tidspbridge/pmgr/ioobj.h deleted file mode 100644 index 7defd9481458..000000000000 --- a/drivers/staging/tidspbridge/pmgr/ioobj.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ioobj.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Structure subcomponents of channel class library IO objects which - * are exposed to DSP API from Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef IOOBJ_ -#define IOOBJ_ - -#include -#include - -/* - * This struct is the first field in a io_mgr struct. Other, implementation - * specific fields follow this structure in memory. - */ -struct io_mgr_ { - /* These must be the first fields in a io_mgr struct: */ - struct bridge_dev_context *bridge_context; /* Bridge context. */ - /* Function interface to Bridge driver. */ - struct bridge_drv_interface *intf_fxns; - struct dev_object *dev_obj; /* Device this board represents. */ -}; - -#endif /* IOOBJ_ */ diff --git a/drivers/staging/tidspbridge/pmgr/msg.c b/drivers/staging/tidspbridge/pmgr/msg.c deleted file mode 100644 index f093cfb51c00..000000000000 --- a/drivers/staging/tidspbridge/pmgr/msg.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * msg.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge msg_ctrl Module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Bridge Driver */ -#include - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- This */ -#include -#include - -/* - * ======== msg_create ======== - * Purpose: - * Create an object to manage message queues. Only one of these objects - * can exist per device object. - */ -int msg_create(struct msg_mgr **msg_man, - struct dev_object *hdev_obj, msg_onexit msg_callback) -{ - struct bridge_drv_interface *intf_fxns; - struct msg_mgr_ *msg_mgr_obj; - struct msg_mgr *hmsg_mgr; - int status = 0; - - *msg_man = NULL; - - dev_get_intf_fxns(hdev_obj, &intf_fxns); - - /* Let Bridge message module finish the create: */ - status = - (*intf_fxns->msg_create) (&hmsg_mgr, hdev_obj, msg_callback); - - if (!status) { - /* Fill in DSP API message module's fields of the msg_mgr - * structure */ - msg_mgr_obj = (struct msg_mgr_ *)hmsg_mgr; - msg_mgr_obj->intf_fxns = intf_fxns; - - /* Finally, return the new message manager handle: */ - *msg_man = hmsg_mgr; - } else { - status = -EPERM; - } - return status; -} - -/* - * ======== msg_delete ======== - * Purpose: - * Delete a msg_ctrl manager allocated in msg_create(). - */ -void msg_delete(struct msg_mgr *hmsg_mgr) -{ - struct msg_mgr_ *msg_mgr_obj = (struct msg_mgr_ *)hmsg_mgr; - struct bridge_drv_interface *intf_fxns; - - if (msg_mgr_obj) { - intf_fxns = msg_mgr_obj->intf_fxns; - - /* Let Bridge message module destroy the msg_mgr: */ - (*intf_fxns->msg_delete) (hmsg_mgr); - } else { - dev_dbg(bridge, "%s: Error hmsg_mgr handle: %p\n", - __func__, hmsg_mgr); - } -} diff --git a/drivers/staging/tidspbridge/pmgr/msgobj.h b/drivers/staging/tidspbridge/pmgr/msgobj.h deleted file mode 100644 index 14ca633c56cb..000000000000 --- a/drivers/staging/tidspbridge/pmgr/msgobj.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * msgobj.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Structure subcomponents of channel class library msg_ctrl objects which - * are exposed to DSP API from Bridge driver. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef MSGOBJ_ -#define MSGOBJ_ - -#include - -#include - -/* - * This struct is the first field in a msg_mgr struct. Other, implementation - * specific fields follow this structure in memory. - */ -struct msg_mgr_ { - /* The first field must match that in _msg_sm.h */ - - /* Function interface to Bridge driver. */ - struct bridge_drv_interface *intf_fxns; -}; - -#endif /* MSGOBJ_ */ diff --git a/drivers/staging/tidspbridge/rmgr/dbdcd.c b/drivers/staging/tidspbridge/rmgr/dbdcd.c deleted file mode 100644 index c91d1d7d0884..000000000000 --- a/drivers/staging/tidspbridge/rmgr/dbdcd.c +++ /dev/null @@ -1,1484 +0,0 @@ -/* - * dbdcd.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * This file contains the implementation of the DSP/BIOS Bridge - * Configuration Database (DCD). - * - * Notes: - * The fxn dcd_get_objects can apply a callback fxn to each DCD object - * that is located in a specified COFF file. At the moment, - * dcd_auto_register, dcd_auto_unregister, and NLDR module all use - * dcd_get_objects. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- Others */ -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Global defines. */ -#define MAX_INT2CHAR_LENGTH 16 /* Max int2char len of 32 bit int */ - -/* Name of section containing dependent libraries */ -#define DEPLIBSECT ".dspbridge_deplibs" - -/* DCD specific structures. */ -struct dcd_manager { - struct cod_manager *cod_mgr; /* Handle to COD manager object. */ -}; - -/* Pointer to the registry support key */ -static struct list_head reg_key_list; -static DEFINE_SPINLOCK(dbdcd_lock); - -/* Global reference variables. */ -static u32 refs; -static u32 enum_refs; - -/* Helper function prototypes. */ -static s32 atoi(char *psz_buf); -static int get_attrs_from_buf(char *psz_buf, u32 ul_buf_size, - enum dsp_dcdobjtype obj_type, - struct dcd_genericobj *gen_obj); -static void compress_buf(char *psz_buf, u32 ul_buf_size, s32 char_size); -static char dsp_char2_gpp_char(char *word, s32 dsp_char_size); -static int get_dep_lib_info(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 *num_libs, - u16 *num_pers_libs, - struct dsp_uuid *dep_lib_uuids, - bool *prstnt_dep_libs, - enum nldr_phase phase); - -/* - * ======== dcd_uuid_from_string ======== - * Purpose: - * Converts an ANSI string to a dsp_uuid. - * Parameters: - * sz_uuid: Pointer to a string that represents a dsp_uuid object. - * uuid_obj: Pointer to a dsp_uuid object. - * Returns: - * 0: Success. - * -EINVAL: Coversion failed - * Requires: - * uuid_obj & sz_uuid are non-NULL values. - * Ensures: - * Details: - * We assume the string representation of a UUID has the following format: - * "12345678_1234_1234_1234_123456789abc". - */ -static int dcd_uuid_from_string(char *sz_uuid, struct dsp_uuid *uuid_obj) -{ - char c; - u64 t; - struct dsp_uuid uuid_tmp; - - /* - * sscanf implementation cannot deal with hh format modifier - * if the converted value doesn't fit in u32. So, convert the - * last six bytes to u64 and memcpy what is needed - */ - if (sscanf(sz_uuid, "%8x%c%4hx%c%4hx%c%2hhx%2hhx%c%llx", - &uuid_tmp.data1, &c, &uuid_tmp.data2, &c, - &uuid_tmp.data3, &c, &uuid_tmp.data4, - &uuid_tmp.data5, &c, &t) != 10) - return -EINVAL; - - t = cpu_to_be64(t); - memcpy(&uuid_tmp.data6[0], ((char *)&t) + 2, 6); - *uuid_obj = uuid_tmp; - - return 0; -} - -/* - * ======== dcd_auto_register ======== - * Purpose: - * Parses the supplied image and resigsters with DCD. - */ -int dcd_auto_register(struct dcd_manager *hdcd_mgr, - char *sz_coff_path) -{ - int status = 0; - - if (hdcd_mgr) - status = dcd_get_objects(hdcd_mgr, sz_coff_path, - (dcd_registerfxn) dcd_register_object, - (void *)sz_coff_path); - else - status = -EFAULT; - - return status; -} - -/* - * ======== dcd_auto_unregister ======== - * Purpose: - * Parses the supplied DSP image and unresiters from DCD. - */ -int dcd_auto_unregister(struct dcd_manager *hdcd_mgr, - char *sz_coff_path) -{ - int status = 0; - - if (hdcd_mgr) - status = dcd_get_objects(hdcd_mgr, sz_coff_path, - (dcd_registerfxn) dcd_register_object, - NULL); - else - status = -EFAULT; - - return status; -} - -/* - * ======== dcd_create_manager ======== - * Purpose: - * Creates DCD manager. - */ -int dcd_create_manager(char *sz_zl_dll_name, - struct dcd_manager **dcd_mgr) -{ - struct cod_manager *cod_mgr; /* COD manager handle */ - struct dcd_manager *dcd_mgr_obj = NULL; /* DCD Manager pointer */ - int status = 0; - - status = cod_create(&cod_mgr, sz_zl_dll_name); - if (status) - goto func_end; - - /* Create a DCD object. */ - dcd_mgr_obj = kzalloc(sizeof(struct dcd_manager), GFP_KERNEL); - if (dcd_mgr_obj != NULL) { - /* Fill out the object. */ - dcd_mgr_obj->cod_mgr = cod_mgr; - - /* Return handle to this DCD interface. */ - *dcd_mgr = dcd_mgr_obj; - } else { - status = -ENOMEM; - - /* - * If allocation of DcdManager object failed, delete the - * COD manager. - */ - cod_delete(cod_mgr); - } - -func_end: - return status; -} - -/* - * ======== dcd_destroy_manager ======== - * Purpose: - * Frees DCD Manager object. - */ -int dcd_destroy_manager(struct dcd_manager *hdcd_mgr) -{ - struct dcd_manager *dcd_mgr_obj = hdcd_mgr; - int status = -EFAULT; - - if (hdcd_mgr) { - /* Delete the COD manager. */ - cod_delete(dcd_mgr_obj->cod_mgr); - - /* Deallocate a DCD manager object. */ - kfree(dcd_mgr_obj); - - status = 0; - } - - return status; -} - -/* - * ======== dcd_enumerate_object ======== - * Purpose: - * Enumerates objects in the DCD. - */ -int dcd_enumerate_object(s32 index, enum dsp_dcdobjtype obj_type, - struct dsp_uuid *uuid_obj) -{ - int status = 0; - char sz_reg_key[DCD_MAXPATHLENGTH]; - char sz_value[DCD_MAXPATHLENGTH]; - struct dsp_uuid dsp_uuid_obj; - char sz_obj_type[MAX_INT2CHAR_LENGTH]; /* str. rep. of obj_type. */ - u32 dw_key_len = 0; - struct dcd_key_elem *dcd_key; - int len; - - if ((index != 0) && (enum_refs == 0)) { - /* - * If an enumeration is being performed on an index greater - * than zero, then the current enum_refs must have been - * incremented to greater than zero. - */ - status = -EIDRM; - } else { - /* - * Pre-determine final key length. It's length of DCD_REGKEY + - * "_\0" + length of sz_obj_type string + terminating NULL. - */ - dw_key_len = strlen(DCD_REGKEY) + 1 + sizeof(sz_obj_type) + 1; - - /* Create proper REG key; concatenate DCD_REGKEY with - * obj_type. */ - strncpy(sz_reg_key, DCD_REGKEY, strlen(DCD_REGKEY) + 1); - if ((strlen(sz_reg_key) + strlen("_\0")) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, "_\0", 2); - } else { - status = -EPERM; - } - - /* This snprintf is guaranteed not to exceed max size of an - * integer. */ - status = snprintf(sz_obj_type, MAX_INT2CHAR_LENGTH, "%d", - obj_type); - - if (status == -1) { - status = -EPERM; - } else { - status = 0; - if ((strlen(sz_reg_key) + strlen(sz_obj_type)) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, sz_obj_type, - strlen(sz_obj_type) + 1); - } else { - status = -EPERM; - } - } - - if (!status) { - len = strlen(sz_reg_key); - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - if (!strncmp(dcd_key->name, sz_reg_key, len) - && !index--) { - strncpy(sz_value, &dcd_key->name[len], - strlen(&dcd_key->name[len]) + 1); - break; - } - } - spin_unlock(&dbdcd_lock); - - if (&dcd_key->link == ®_key_list) - status = -ENODATA; - } - - if (!status) { - /* Create UUID value using string retrieved from - * registry. */ - status = dcd_uuid_from_string(sz_value, &dsp_uuid_obj); - - if (!status) { - *uuid_obj = dsp_uuid_obj; - - /* Increment enum_refs to update reference - * count. */ - enum_refs++; - } - } else if (status == -ENODATA) { - /* At the end of enumeration. Reset enum_refs. */ - enum_refs = 0; - - /* - * TODO: Revisit, this is not an error case but code - * expects non-zero value. - */ - status = ENODATA; - } else { - status = -EPERM; - } - } - - return status; -} - -/* - * ======== dcd_exit ======== - * Purpose: - * Discontinue usage of the DCD module. - */ -void dcd_exit(void) -{ - struct dcd_key_elem *rv, *rv_tmp; - - refs--; - if (refs == 0) { - list_for_each_entry_safe(rv, rv_tmp, ®_key_list, link) { - list_del(&rv->link); - kfree(rv->path); - kfree(rv); - } - } - -} - -/* - * ======== dcd_get_dep_libs ======== - */ -int dcd_get_dep_libs(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 num_libs, struct dsp_uuid *dep_lib_uuids, - bool *prstnt_dep_libs, - enum nldr_phase phase) -{ - int status = 0; - - status = - get_dep_lib_info(hdcd_mgr, uuid_obj, &num_libs, NULL, dep_lib_uuids, - prstnt_dep_libs, phase); - - return status; -} - -/* - * ======== dcd_get_num_dep_libs ======== - */ -int dcd_get_num_dep_libs(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 *num_libs, u16 *num_pers_libs, - enum nldr_phase phase) -{ - int status = 0; - - status = get_dep_lib_info(hdcd_mgr, uuid_obj, num_libs, num_pers_libs, - NULL, NULL, phase); - - return status; -} - -/* - * ======== dcd_get_object_def ======== - * Purpose: - * Retrieves the properties of a node or processor based on the UUID and - * object type. - */ -int dcd_get_object_def(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *obj_uuid, - enum dsp_dcdobjtype obj_type, - struct dcd_genericobj *obj_def) -{ - struct dcd_manager *dcd_mgr_obj = hdcd_mgr; /* ptr to DCD mgr */ - struct cod_libraryobj *lib = NULL; - int status = 0; - int len; - u32 ul_addr = 0; /* Used by cod_get_section */ - u32 ul_len = 0; /* Used by cod_get_section */ - u32 dw_buf_size; /* Used by REG functions */ - char sz_reg_key[DCD_MAXPATHLENGTH]; - char *sz_uuid; /*[MAXUUIDLEN]; */ - char *tmp; - struct dcd_key_elem *dcd_key = NULL; - char sz_sect_name[MAXUUIDLEN + 2]; /* ".[UUID]\0" */ - char *psz_coff_buf; - u32 dw_key_len; /* Len of REG key. */ - char sz_obj_type[MAX_INT2CHAR_LENGTH]; /* str. rep. of obj_type. */ - - sz_uuid = kzalloc(MAXUUIDLEN, GFP_KERNEL); - if (!sz_uuid) { - status = -ENOMEM; - goto func_end; - } - - if (!hdcd_mgr) { - status = -EFAULT; - goto func_end; - } - - /* Pre-determine final key length. It's length of DCD_REGKEY + - * "_\0" + length of sz_obj_type string + terminating NULL */ - dw_key_len = strlen(DCD_REGKEY) + 1 + sizeof(sz_obj_type) + 1; - - /* Create proper REG key; concatenate DCD_REGKEY with obj_type. */ - strncpy(sz_reg_key, DCD_REGKEY, strlen(DCD_REGKEY) + 1); - - if ((strlen(sz_reg_key) + strlen("_\0")) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, "_\0", 2); - else - status = -EPERM; - - status = snprintf(sz_obj_type, MAX_INT2CHAR_LENGTH, "%d", obj_type); - if (status == -1) { - status = -EPERM; - } else { - status = 0; - - if ((strlen(sz_reg_key) + strlen(sz_obj_type)) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, sz_obj_type, - strlen(sz_obj_type) + 1); - } else { - status = -EPERM; - } - - /* Create UUID value to set in registry. */ - snprintf(sz_uuid, MAXUUIDLEN, "%pUL", obj_uuid); - - if ((strlen(sz_reg_key) + MAXUUIDLEN) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, sz_uuid, MAXUUIDLEN); - else - status = -EPERM; - - /* Retrieve paths from the registry based on struct dsp_uuid */ - dw_buf_size = DCD_MAXPATHLENGTH; - } - if (!status) { - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - if (!strncmp(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1)) - break; - } - spin_unlock(&dbdcd_lock); - if (&dcd_key->link == ®_key_list) { - status = -ENOKEY; - goto func_end; - } - } - - - /* Open COFF file. */ - status = cod_open(dcd_mgr_obj->cod_mgr, dcd_key->path, - COD_NOLOAD, &lib); - if (status) { - status = -EACCES; - goto func_end; - } - - /* Ensure sz_uuid + 1 is not greater than sizeof sz_sect_name. */ - len = strlen(sz_uuid); - if (len + 1 > sizeof(sz_sect_name)) { - status = -EPERM; - goto func_end; - } - - /* Create section name based on node UUID. A period is - * pre-pended to the UUID string to form the section name. - * I.e. ".24BC8D90_BB45_11d4_B756_006008BDB66F" */ - - len -= 4; /* uuid has 4 delimiters '-' */ - tmp = sz_uuid; - - strncpy(sz_sect_name, ".", 2); - do { - char *uuid = strsep(&tmp, "-"); - - if (!uuid) - break; - len -= strlen(uuid); - strncat(sz_sect_name, uuid, strlen(uuid) + 1); - } while (len && strncat(sz_sect_name, "_", 2)); - - /* Get section information. */ - status = cod_get_section(lib, sz_sect_name, &ul_addr, &ul_len); - if (status) { - status = -EACCES; - goto func_end; - } - - /* Allocate zeroed buffer. */ - psz_coff_buf = kzalloc(ul_len + 4, GFP_KERNEL); - if (psz_coff_buf == NULL) { - status = -ENOMEM; - goto func_end; - } -#ifdef _DB_TIOMAP - if (strstr(dcd_key->path, "iva") == NULL) { - /* Locate section by objectID and read its content. */ - status = - cod_read_section(lib, sz_sect_name, psz_coff_buf, ul_len); - } else { - status = - cod_read_section(lib, sz_sect_name, psz_coff_buf, ul_len); - dev_dbg(bridge, "%s: Skipped Byte swap for IVA!!\n", __func__); - } -#else - status = cod_read_section(lib, sz_sect_name, psz_coff_buf, ul_len); -#endif - if (!status) { - /* Compress DSP buffer to conform to PC format. */ - if (strstr(dcd_key->path, "iva") == NULL) { - compress_buf(psz_coff_buf, ul_len, DSPWORDSIZE); - } else { - compress_buf(psz_coff_buf, ul_len, 1); - dev_dbg(bridge, "%s: Compressing IVA COFF buffer by 1 " - "for IVA!!\n", __func__); - } - - /* Parse the content of the COFF buffer. */ - status = - get_attrs_from_buf(psz_coff_buf, ul_len, obj_type, obj_def); - if (status) - status = -EACCES; - } else { - status = -EACCES; - } - - /* Free the previously allocated dynamic buffer. */ - kfree(psz_coff_buf); -func_end: - if (lib) - cod_close(lib); - - kfree(sz_uuid); - - return status; -} - -/* - * ======== dcd_get_objects ======== - */ -int dcd_get_objects(struct dcd_manager *hdcd_mgr, - char *sz_coff_path, dcd_registerfxn register_fxn, - void *handle) -{ - struct dcd_manager *dcd_mgr_obj = hdcd_mgr; - int status = 0; - char *psz_coff_buf; - char *psz_cur; - struct cod_libraryobj *lib = NULL; - u32 ul_addr = 0; /* Used by cod_get_section */ - u32 ul_len = 0; /* Used by cod_get_section */ - char seps[] = ":, "; - char *token = NULL; - struct dsp_uuid dsp_uuid_obj; - s32 object_type; - - if (!hdcd_mgr) { - status = -EFAULT; - goto func_end; - } - - /* Open DSP coff file, don't load symbols. */ - status = cod_open(dcd_mgr_obj->cod_mgr, sz_coff_path, COD_NOLOAD, &lib); - if (status) { - status = -EACCES; - goto func_cont; - } - - /* Get DCD_RESIGER_SECTION section information. */ - status = cod_get_section(lib, DCD_REGISTER_SECTION, &ul_addr, &ul_len); - if (status || !(ul_len > 0)) { - status = -EACCES; - goto func_cont; - } - - /* Allocate zeroed buffer. */ - psz_coff_buf = kzalloc(ul_len + 4, GFP_KERNEL); - if (psz_coff_buf == NULL) { - status = -ENOMEM; - goto func_cont; - } -#ifdef _DB_TIOMAP - if (strstr(sz_coff_path, "iva") == NULL) { - /* Locate section by objectID and read its content. */ - status = cod_read_section(lib, DCD_REGISTER_SECTION, - psz_coff_buf, ul_len); - } else { - dev_dbg(bridge, "%s: Skipped Byte swap for IVA!!\n", __func__); - status = cod_read_section(lib, DCD_REGISTER_SECTION, - psz_coff_buf, ul_len); - } -#else - status = - cod_read_section(lib, DCD_REGISTER_SECTION, psz_coff_buf, ul_len); -#endif - if (!status) { - /* Compress DSP buffer to conform to PC format. */ - if (strstr(sz_coff_path, "iva") == NULL) { - compress_buf(psz_coff_buf, ul_len, DSPWORDSIZE); - } else { - compress_buf(psz_coff_buf, ul_len, 1); - dev_dbg(bridge, "%s: Compress COFF buffer with 1 word " - "for IVA!!\n", __func__); - } - - /* Read from buffer and register object in buffer. */ - psz_cur = psz_coff_buf; - while ((token = strsep(&psz_cur, seps)) && *token != '\0') { - /* Retrieve UUID string. */ - status = dcd_uuid_from_string(token, &dsp_uuid_obj); - - if (!status) { - /* Retrieve object type */ - token = strsep(&psz_cur, seps); - - /* Retrieve object type */ - object_type = atoi(token); - - /* - * Apply register_fxn to the found DCD object. - * Possible actions include: - * - * 1) Register found DCD object. - * 2) Unregister found DCD object - * (when handle == NULL) - * 3) Add overlay node. - */ - status = - register_fxn(&dsp_uuid_obj, object_type, - handle); - } - if (status) { - /* if error occurs, break from while loop. */ - break; - } - } - } else { - status = -EACCES; - } - - /* Free the previously allocated dynamic buffer. */ - kfree(psz_coff_buf); -func_cont: - if (lib) - cod_close(lib); - -func_end: - return status; -} - -/* - * ======== dcd_get_library_name ======== - * Purpose: - * Retrieves the library name for the given UUID. - * - */ -int dcd_get_library_name(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - char *str_lib_name, - u32 *buff_size, - enum nldr_phase phase, bool *phase_split) -{ - char sz_reg_key[DCD_MAXPATHLENGTH]; - char sz_uuid[MAXUUIDLEN]; - u32 dw_key_len; /* Len of REG key. */ - char sz_obj_type[MAX_INT2CHAR_LENGTH]; /* str. rep. of obj_type. */ - int status = 0; - struct dcd_key_elem *dcd_key = NULL; - - dev_dbg(bridge, "%s: hdcd_mgr %p, uuid_obj %p, str_lib_name %p," - " buff_size %p\n", __func__, hdcd_mgr, uuid_obj, str_lib_name, - buff_size); - - /* - * Pre-determine final key length. It's length of DCD_REGKEY + - * "_\0" + length of sz_obj_type string + terminating NULL. - */ - dw_key_len = strlen(DCD_REGKEY) + 1 + sizeof(sz_obj_type) + 1; - - /* Create proper REG key; concatenate DCD_REGKEY with obj_type. */ - strncpy(sz_reg_key, DCD_REGKEY, strlen(DCD_REGKEY) + 1); - if ((strlen(sz_reg_key) + strlen("_\0")) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, "_\0", 2); - else - status = -EPERM; - - switch (phase) { - case NLDR_CREATE: - /* create phase type */ - sprintf(sz_obj_type, "%d", DSP_DCDCREATELIBTYPE); - break; - case NLDR_EXECUTE: - /* execute phase type */ - sprintf(sz_obj_type, "%d", DSP_DCDEXECUTELIBTYPE); - break; - case NLDR_DELETE: - /* delete phase type */ - sprintf(sz_obj_type, "%d", DSP_DCDDELETELIBTYPE); - break; - case NLDR_NOPHASE: - /* known to be a dependent library */ - sprintf(sz_obj_type, "%d", DSP_DCDLIBRARYTYPE); - break; - default: - status = -EINVAL; - } - if (!status) { - if ((strlen(sz_reg_key) + strlen(sz_obj_type)) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, sz_obj_type, - strlen(sz_obj_type) + 1); - } else { - status = -EPERM; - } - /* Create UUID value to find match in registry. */ - snprintf(sz_uuid, MAXUUIDLEN, "%pUL", uuid_obj); - if ((strlen(sz_reg_key) + MAXUUIDLEN) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, sz_uuid, MAXUUIDLEN); - else - status = -EPERM; - } - if (!status) { - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - /* See if the name matches. */ - if (!strncmp(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1)) - break; - } - spin_unlock(&dbdcd_lock); - } - - if (&dcd_key->link == ®_key_list) - status = -ENOKEY; - - /* If can't find, phases might be registered as generic LIBRARYTYPE */ - if (status && phase != NLDR_NOPHASE) { - if (phase_split) - *phase_split = false; - - strncpy(sz_reg_key, DCD_REGKEY, strlen(DCD_REGKEY) + 1); - if ((strlen(sz_reg_key) + strlen("_\0")) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, "_\0", 2); - } else { - status = -EPERM; - } - sprintf(sz_obj_type, "%d", DSP_DCDLIBRARYTYPE); - if ((strlen(sz_reg_key) + strlen(sz_obj_type)) - < DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, sz_obj_type, - strlen(sz_obj_type) + 1); - } else { - status = -EPERM; - } - snprintf(sz_uuid, MAXUUIDLEN, "%pUL", uuid_obj); - if ((strlen(sz_reg_key) + MAXUUIDLEN) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, sz_uuid, MAXUUIDLEN); - else - status = -EPERM; - - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - /* See if the name matches. */ - if (!strncmp(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1)) - break; - } - spin_unlock(&dbdcd_lock); - - status = (&dcd_key->link != ®_key_list) ? - 0 : -ENOKEY; - } - - if (!status) - memcpy(str_lib_name, dcd_key->path, strlen(dcd_key->path) + 1); - return status; -} - -/* - * ======== dcd_init ======== - * Purpose: - * Initialize the DCD module. - */ -bool dcd_init(void) -{ - bool ret = true; - - if (refs == 0) - INIT_LIST_HEAD(®_key_list); - - if (ret) - refs++; - - return ret; -} - -/* - * ======== dcd_register_object ======== - * Purpose: - * Registers a node or a processor with the DCD. - * If psz_path_name == NULL, unregister the specified DCD object. - */ -int dcd_register_object(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type, - char *psz_path_name) -{ - int status = 0; - char sz_reg_key[DCD_MAXPATHLENGTH]; - char sz_uuid[MAXUUIDLEN + 1]; - u32 dw_path_size = 0; - u32 dw_key_len; /* Len of REG key. */ - char sz_obj_type[MAX_INT2CHAR_LENGTH]; /* str. rep. of obj_type. */ - struct dcd_key_elem *dcd_key = NULL; - - dev_dbg(bridge, "%s: object UUID %p, obj_type %d, szPathName %s\n", - __func__, uuid_obj, obj_type, psz_path_name); - - /* - * Pre-determine final key length. It's length of DCD_REGKEY + - * "_\0" + length of sz_obj_type string + terminating NULL. - */ - dw_key_len = strlen(DCD_REGKEY) + 1 + sizeof(sz_obj_type) + 1; - - /* Create proper REG key; concatenate DCD_REGKEY with obj_type. */ - strncpy(sz_reg_key, DCD_REGKEY, strlen(DCD_REGKEY) + 1); - if ((strlen(sz_reg_key) + strlen("_\0")) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, "_\0", 2); - else { - status = -EPERM; - goto func_end; - } - - status = snprintf(sz_obj_type, MAX_INT2CHAR_LENGTH, "%d", obj_type); - if (status == -1) { - status = -EPERM; - } else { - status = 0; - if ((strlen(sz_reg_key) + strlen(sz_obj_type)) < - DCD_MAXPATHLENGTH) { - strncat(sz_reg_key, sz_obj_type, - strlen(sz_obj_type) + 1); - } else - status = -EPERM; - - /* Create UUID value to set in registry. */ - snprintf(sz_uuid, MAXUUIDLEN, "%pUL", uuid_obj); - if ((strlen(sz_reg_key) + MAXUUIDLEN) < DCD_MAXPATHLENGTH) - strncat(sz_reg_key, sz_uuid, MAXUUIDLEN); - else - status = -EPERM; - } - - if (status) - goto func_end; - - /* - * If psz_path_name != NULL, perform registration, otherwise, - * perform unregistration. - */ - - if (psz_path_name) { - dw_path_size = strlen(psz_path_name) + 1; - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - /* See if the name matches. */ - if (!strncmp(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1)) - break; - } - spin_unlock(&dbdcd_lock); - if (&dcd_key->link == ®_key_list) { - /* - * Add new reg value (UUID+obj_type) - * with COFF path info - */ - - dcd_key = kmalloc(sizeof(struct dcd_key_elem), - GFP_KERNEL); - if (!dcd_key) { - status = -ENOMEM; - goto func_end; - } - - dcd_key->path = kmalloc(dw_path_size, GFP_KERNEL); - - if (!dcd_key->path) { - kfree(dcd_key); - status = -ENOMEM; - goto func_end; - } - - strncpy(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1); - strncpy(dcd_key->path, psz_path_name , - dw_path_size); - spin_lock(&dbdcd_lock); - list_add_tail(&dcd_key->link, ®_key_list); - spin_unlock(&dbdcd_lock); - } else { - /* Make sure the new data is the same. */ - if (strncmp(dcd_key->path, psz_path_name, - dw_path_size)) { - /* The caller needs a different data size! */ - kfree(dcd_key->path); - dcd_key->path = kmalloc(dw_path_size, - GFP_KERNEL); - if (dcd_key->path == NULL) { - status = -ENOMEM; - goto func_end; - } - } - - /* We have a match! Copy out the data. */ - memcpy(dcd_key->path, psz_path_name, dw_path_size); - } - dev_dbg(bridge, "%s: psz_path_name=%s, dw_path_size=%d\n", - __func__, psz_path_name, dw_path_size); - } else { - /* Deregister an existing object */ - spin_lock(&dbdcd_lock); - list_for_each_entry(dcd_key, ®_key_list, link) { - if (!strncmp(dcd_key->name, sz_reg_key, - strlen(sz_reg_key) + 1)) { - list_del(&dcd_key->link); - kfree(dcd_key->path); - kfree(dcd_key); - break; - } - } - spin_unlock(&dbdcd_lock); - if (&dcd_key->link == ®_key_list) - status = -EPERM; - } - - if (!status) { - /* - * Because the node database has been updated through a - * successful object registration/de-registration operation, - * we need to reset the object enumeration counter to allow - * current enumerations to reflect this update in the node - * database. - */ - enum_refs = 0; - } -func_end: - return status; -} - -/* - * ======== dcd_unregister_object ======== - * Call DCD_Register object with psz_path_name set to NULL to - * perform actual object de-registration. - */ -int dcd_unregister_object(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type) -{ - int status = 0; - - /* - * When dcd_register_object is called with NULL as pathname, - * it indicates an unregister object operation. - */ - status = dcd_register_object(uuid_obj, obj_type, NULL); - - return status; -} - -/* - ********************************************************************** - * DCD Helper Functions - ********************************************************************** - */ - -/* - * ======== atoi ======== - * Purpose: - * This function converts strings in decimal or hex format to integers. - */ -static s32 atoi(char *psz_buf) -{ - char *pch = psz_buf; - s32 base = 0; - - while (isspace(*pch)) - pch++; - - if (*pch == '-' || *pch == '+') { - base = 10; - pch++; - } else if (*pch && tolower(pch[strlen(pch) - 1]) == 'h') { - base = 16; - } - - return simple_strtoul(pch, NULL, base); -} - -/* - * ======== get_attrs_from_buf ======== - * Purpose: - * Parse the content of a buffer filled with DSP-side data and - * retrieve an object's attributes from it. IMPORTANT: Assume the - * buffer has been converted from DSP format to GPP format. - */ -static int get_attrs_from_buf(char *psz_buf, u32 ul_buf_size, - enum dsp_dcdobjtype obj_type, - struct dcd_genericobj *gen_obj) -{ - int status = 0; - char seps[] = ", "; - char *psz_cur; - char *token; - s32 token_len = 0; - u32 i = 0; -#ifdef _DB_TIOMAP - s32 entry_id; -#endif - - switch (obj_type) { - case DSP_DCDNODETYPE: - /* - * Parse COFF sect buffer to retrieve individual tokens used - * to fill in object attrs. - */ - psz_cur = psz_buf; - token = strsep(&psz_cur, seps); - - /* u32 cb_struct */ - gen_obj->obj_data.node_obj.ndb_props.cb_struct = - (u32) atoi(token); - token = strsep(&psz_cur, seps); - - /* dsp_uuid ui_node_id */ - status = dcd_uuid_from_string(token, - &gen_obj->obj_data.node_obj. - ndb_props.ui_node_id); - if (status) - break; - - token = strsep(&psz_cur, seps); - - /* ac_name */ - token_len = strlen(token); - if (token_len > DSP_MAXNAMELEN - 1) - token_len = DSP_MAXNAMELEN - 1; - - strncpy(gen_obj->obj_data.node_obj.ndb_props.ac_name, - token, token_len); - gen_obj->obj_data.node_obj.ndb_props.ac_name[token_len] = '\0'; - token = strsep(&psz_cur, seps); - /* u32 ntype */ - gen_obj->obj_data.node_obj.ndb_props.ntype = atoi(token); - token = strsep(&psz_cur, seps); - /* u32 cache_on_gpp */ - gen_obj->obj_data.node_obj.ndb_props.cache_on_gpp = atoi(token); - token = strsep(&psz_cur, seps); - /* dsp_resourcereqmts dsp_resource_reqmts */ - gen_obj->obj_data.node_obj.ndb_props.dsp_resource_reqmts. - cb_struct = (u32) atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.static_data_size = atoi(token); - token = strsep(&psz_cur, seps); - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.global_data_size = atoi(token); - token = strsep(&psz_cur, seps); - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.program_mem_size = atoi(token); - token = strsep(&psz_cur, seps); - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.wc_execution_time = atoi(token); - token = strsep(&psz_cur, seps); - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.wc_period = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.wc_deadline = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.avg_exection_time = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.node_obj.ndb_props. - dsp_resource_reqmts.minimum_period = atoi(token); - token = strsep(&psz_cur, seps); - - /* s32 prio */ - gen_obj->obj_data.node_obj.ndb_props.prio = atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 stack_size */ - gen_obj->obj_data.node_obj.ndb_props.stack_size = atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 sys_stack_size */ - gen_obj->obj_data.node_obj.ndb_props.sys_stack_size = - atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 stack_seg */ - gen_obj->obj_data.node_obj.ndb_props.stack_seg = atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 message_depth */ - gen_obj->obj_data.node_obj.ndb_props.message_depth = - atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 num_input_streams */ - gen_obj->obj_data.node_obj.ndb_props.num_input_streams = - atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 num_output_streams */ - gen_obj->obj_data.node_obj.ndb_props.num_output_streams = - atoi(token); - token = strsep(&psz_cur, seps); - - /* u32 timeout */ - gen_obj->obj_data.node_obj.ndb_props.timeout = atoi(token); - token = strsep(&psz_cur, seps); - - /* char *str_create_phase_fxn */ - token_len = strlen(token); - gen_obj->obj_data.node_obj.str_create_phase_fxn = - kzalloc(token_len + 1, GFP_KERNEL); - strncpy(gen_obj->obj_data.node_obj.str_create_phase_fxn, - token, token_len); - gen_obj->obj_data.node_obj.str_create_phase_fxn[token_len] = - '\0'; - token = strsep(&psz_cur, seps); - - /* char *str_execute_phase_fxn */ - token_len = strlen(token); - gen_obj->obj_data.node_obj.str_execute_phase_fxn = - kzalloc(token_len + 1, GFP_KERNEL); - strncpy(gen_obj->obj_data.node_obj.str_execute_phase_fxn, - token, token_len); - gen_obj->obj_data.node_obj.str_execute_phase_fxn[token_len] = - '\0'; - token = strsep(&psz_cur, seps); - - /* char *str_delete_phase_fxn */ - token_len = strlen(token); - gen_obj->obj_data.node_obj.str_delete_phase_fxn = - kzalloc(token_len + 1, GFP_KERNEL); - strncpy(gen_obj->obj_data.node_obj.str_delete_phase_fxn, - token, token_len); - gen_obj->obj_data.node_obj.str_delete_phase_fxn[token_len] = - '\0'; - token = strsep(&psz_cur, seps); - - /* Segment id for message buffers */ - gen_obj->obj_data.node_obj.msg_segid = atoi(token); - token = strsep(&psz_cur, seps); - - /* Message notification type */ - gen_obj->obj_data.node_obj.msg_notify_type = atoi(token); - token = strsep(&psz_cur, seps); - - /* char *str_i_alg_name */ - if (token) { - token_len = strlen(token); - gen_obj->obj_data.node_obj.str_i_alg_name = - kzalloc(token_len + 1, GFP_KERNEL); - strncpy(gen_obj->obj_data.node_obj.str_i_alg_name, - token, token_len); - gen_obj->obj_data.node_obj.str_i_alg_name[token_len] = - '\0'; - token = strsep(&psz_cur, seps); - } - - /* Load type (static, dynamic, or overlay) */ - if (token) { - gen_obj->obj_data.node_obj.load_type = atoi(token); - token = strsep(&psz_cur, seps); - } - - /* Dynamic load data requirements */ - if (token) { - gen_obj->obj_data.node_obj.data_mem_seg_mask = - atoi(token); - token = strsep(&psz_cur, seps); - } - - /* Dynamic load code requirements */ - if (token) { - gen_obj->obj_data.node_obj.code_mem_seg_mask = - atoi(token); - token = strsep(&psz_cur, seps); - } - - /* Extract node profiles into node properties */ - if (token) { - - gen_obj->obj_data.node_obj.ndb_props.count_profiles = - atoi(token); - for (i = 0; - i < - gen_obj->obj_data.node_obj. - ndb_props.count_profiles; i++) { - token = strsep(&psz_cur, seps); - if (token) { - /* Heap Size for the node */ - gen_obj->obj_data.node_obj. - ndb_props.node_profiles[i]. - heap_size = atoi(token); - } - } - } - token = strsep(&psz_cur, seps); - if (token) { - gen_obj->obj_data.node_obj.ndb_props.stack_seg_name = - (u32) (token); - } - - break; - - case DSP_DCDPROCESSORTYPE: - /* - * Parse COFF sect buffer to retrieve individual tokens used - * to fill in object attrs. - */ - psz_cur = psz_buf; - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.cb_struct = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.processor_family = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.processor_type = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.clock_rate = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.internal_mem_size = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.external_mem_size = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.processor_id = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.ty_running_rtos = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.node_min_priority = atoi(token); - token = strsep(&psz_cur, seps); - - gen_obj->obj_data.proc_info.node_max_priority = atoi(token); - -#ifdef _DB_TIOMAP - /* Proc object may contain additional(extended) attributes. */ - /* attr must match proc.hxx */ - for (entry_id = 0; entry_id < 7; entry_id++) { - token = strsep(&psz_cur, seps); - gen_obj->obj_data.ext_proc_obj.ty_tlb[entry_id]. - gpp_phys = atoi(token); - - token = strsep(&psz_cur, seps); - gen_obj->obj_data.ext_proc_obj.ty_tlb[entry_id]. - dsp_virt = atoi(token); - } -#endif - - break; - - default: - status = -EPERM; - break; - } - - return status; -} - -/* - * ======== CompressBuffer ======== - * Purpose: - * Compress the DSP buffer, if necessary, to conform to PC format. - */ -static void compress_buf(char *psz_buf, u32 ul_buf_size, s32 char_size) -{ - char *p; - char ch; - char *q; - - p = psz_buf; - if (p == NULL) - return; - - for (q = psz_buf; q < (psz_buf + ul_buf_size);) { - ch = dsp_char2_gpp_char(q, char_size); - if (ch == '\\') { - q += char_size; - ch = dsp_char2_gpp_char(q, char_size); - switch (ch) { - case 't': - *p = '\t'; - break; - - case 'n': - *p = '\n'; - break; - - case 'r': - *p = '\r'; - break; - - case '0': - *p = '\0'; - break; - - default: - *p = ch; - break; - } - } else { - *p = ch; - } - p++; - q += char_size; - } - - /* NULL out remainder of buffer. */ - while (p < q) - *p++ = '\0'; -} - -/* - * ======== dsp_char2_gpp_char ======== - * Purpose: - * Convert DSP char to host GPP char in a portable manner - */ -static char dsp_char2_gpp_char(char *word, s32 dsp_char_size) -{ - char ch = '\0'; - char *ch_src; - s32 i; - - for (ch_src = word, i = dsp_char_size; i > 0; i--) - ch |= *ch_src++; - - return ch; -} - -/* - * ======== get_dep_lib_info ======== - */ -static int get_dep_lib_info(struct dcd_manager *hdcd_mgr, - struct dsp_uuid *uuid_obj, - u16 *num_libs, - u16 *num_pers_libs, - struct dsp_uuid *dep_lib_uuids, - bool *prstnt_dep_libs, - enum nldr_phase phase) -{ - struct dcd_manager *dcd_mgr_obj = hdcd_mgr; - char *psz_coff_buf = NULL; - char *psz_cur; - char *psz_file_name = NULL; - struct cod_libraryobj *lib = NULL; - u32 ul_addr = 0; /* Used by cod_get_section */ - u32 ul_len = 0; /* Used by cod_get_section */ - u32 dw_data_size = COD_MAXPATHLENGTH; - char seps[] = ", "; - char *token = NULL; - bool get_uuids = (dep_lib_uuids != NULL); - u16 dep_libs = 0; - int status = 0; - - /* Initialize to 0 dependent libraries, if only counting number of - * dependent libraries */ - if (!get_uuids) { - *num_libs = 0; - *num_pers_libs = 0; - } - - /* Allocate a buffer for file name */ - psz_file_name = kzalloc(dw_data_size, GFP_KERNEL); - if (psz_file_name == NULL) { - status = -ENOMEM; - } else { - /* Get the name of the library */ - status = dcd_get_library_name(hdcd_mgr, uuid_obj, psz_file_name, - &dw_data_size, phase, NULL); - } - - /* Open the library */ - if (!status) { - status = cod_open(dcd_mgr_obj->cod_mgr, psz_file_name, - COD_NOLOAD, &lib); - } - if (!status) { - /* Get dependent library section information. */ - status = cod_get_section(lib, DEPLIBSECT, &ul_addr, &ul_len); - - if (status) { - /* Ok, no dependent libraries */ - ul_len = 0; - status = 0; - } - } - - if (status || !(ul_len > 0)) - goto func_cont; - - /* Allocate zeroed buffer. */ - psz_coff_buf = kzalloc(ul_len + 4, GFP_KERNEL); - if (psz_coff_buf == NULL) - status = -ENOMEM; - - /* Read section contents. */ - status = cod_read_section(lib, DEPLIBSECT, psz_coff_buf, ul_len); - if (status) - goto func_cont; - - /* Compress and format DSP buffer to conform to PC format. */ - compress_buf(psz_coff_buf, ul_len, DSPWORDSIZE); - - /* Read from buffer */ - psz_cur = psz_coff_buf; - while ((token = strsep(&psz_cur, seps)) && *token != '\0') { - if (get_uuids) { - if (dep_libs >= *num_libs) { - /* Gone beyond the limit */ - break; - } else { - /* Retrieve UUID string. */ - status = dcd_uuid_from_string(token, - &(dep_lib_uuids - [dep_libs])); - if (status) - break; - - /* Is this library persistent? */ - token = strsep(&psz_cur, seps); - prstnt_dep_libs[dep_libs] = atoi(token); - dep_libs++; - } - } else { - /* Advanc to next token */ - token = strsep(&psz_cur, seps); - if (atoi(token)) - (*num_pers_libs)++; - - /* Just counting number of dependent libraries */ - (*num_libs)++; - } - } -func_cont: - if (lib) - cod_close(lib); - - /* Free previously allocated dynamic buffers. */ - kfree(psz_file_name); - - kfree(psz_coff_buf); - - return status; -} diff --git a/drivers/staging/tidspbridge/rmgr/disp.c b/drivers/staging/tidspbridge/rmgr/disp.c deleted file mode 100644 index 4af51b75aeab..000000000000 --- a/drivers/staging/tidspbridge/rmgr/disp.c +++ /dev/null @@ -1,655 +0,0 @@ -/* - * disp.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Node Dispatcher interface. Communicates with Resource Manager Server - * (RMS) on DSP. Access to RMS is synchronized in NODE. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Link Driver */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- Resource Manager */ -#include -#include -#include - -/* ----------------------------------- This */ -#include - -/* Size of a reply from RMS */ -#define REPLYSIZE (3 * sizeof(rms_word)) - -/* Reserved channel offsets for communication with RMS */ -#define CHNLTORMSOFFSET 0 -#define CHNLFROMRMSOFFSET 1 - -#define CHNLIOREQS 1 - -/* - * ======== disp_object ======== - */ -struct disp_object { - struct dev_object *dev_obj; /* Device for this processor */ - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - struct chnl_mgr *chnl_mgr; /* Channel manager */ - struct chnl_object *chnl_to_dsp; /* Chnl for commands to RMS */ - struct chnl_object *chnl_from_dsp; /* Chnl for replies from RMS */ - u8 *buf; /* Buffer for commands, replies */ - u32 bufsize; /* buf size in bytes */ - u32 bufsize_rms; /* buf size in RMS words */ - u32 char_size; /* Size of DSP character */ - u32 word_size; /* Size of DSP word */ - u32 data_mau_size; /* Size of DSP Data MAU */ -}; - -static void delete_disp(struct disp_object *disp_obj); -static int fill_stream_def(rms_word *pdw_buf, u32 *ptotal, u32 offset, - struct node_strmdef strm_def, u32 max, - u32 chars_in_rms_word); -static int send_message(struct disp_object *disp_obj, u32 timeout, - u32 ul_bytes, u32 *pdw_arg); - -/* - * ======== disp_create ======== - * Create a NODE Dispatcher object. - */ -int disp_create(struct disp_object **dispatch_obj, - struct dev_object *hdev_obj, - const struct disp_attr *disp_attrs) -{ - struct disp_object *disp_obj; - struct bridge_drv_interface *intf_fxns; - u32 ul_chnl_id; - struct chnl_attr chnl_attr_obj; - int status = 0; - u8 dev_type; - - *dispatch_obj = NULL; - - /* Allocate Node Dispatcher object */ - disp_obj = kzalloc(sizeof(struct disp_object), GFP_KERNEL); - if (disp_obj == NULL) - status = -ENOMEM; - else - disp_obj->dev_obj = hdev_obj; - - /* Get Channel manager and Bridge function interface */ - if (!status) { - status = dev_get_chnl_mgr(hdev_obj, &(disp_obj->chnl_mgr)); - if (!status) { - (void)dev_get_intf_fxns(hdev_obj, &intf_fxns); - disp_obj->intf_fxns = intf_fxns; - } - } - - /* check device type and decide if streams or messag'ing is used for - * RMS/EDS */ - if (status) - goto func_cont; - - status = dev_get_dev_type(hdev_obj, &dev_type); - - if (status) - goto func_cont; - - if (dev_type != DSP_UNIT) { - status = -EPERM; - goto func_cont; - } - - disp_obj->char_size = DSPWORDSIZE; - disp_obj->word_size = DSPWORDSIZE; - disp_obj->data_mau_size = DSPWORDSIZE; - /* Open channels for communicating with the RMS */ - chnl_attr_obj.uio_reqs = CHNLIOREQS; - chnl_attr_obj.event_obj = NULL; - ul_chnl_id = disp_attrs->chnl_offset + CHNLTORMSOFFSET; - status = (*intf_fxns->chnl_open) (&(disp_obj->chnl_to_dsp), - disp_obj->chnl_mgr, - CHNL_MODETODSP, ul_chnl_id, - &chnl_attr_obj); - - if (!status) { - ul_chnl_id = disp_attrs->chnl_offset + CHNLFROMRMSOFFSET; - status = - (*intf_fxns->chnl_open) (&(disp_obj->chnl_from_dsp), - disp_obj->chnl_mgr, - CHNL_MODEFROMDSP, ul_chnl_id, - &chnl_attr_obj); - } - if (!status) { - /* Allocate buffer for commands, replies */ - disp_obj->bufsize = disp_attrs->chnl_buf_size; - disp_obj->bufsize_rms = RMS_COMMANDBUFSIZE; - disp_obj->buf = kzalloc(disp_obj->bufsize, GFP_KERNEL); - if (disp_obj->buf == NULL) - status = -ENOMEM; - } -func_cont: - if (!status) - *dispatch_obj = disp_obj; - else - delete_disp(disp_obj); - - return status; -} - -/* - * ======== disp_delete ======== - * Delete the NODE Dispatcher. - */ -void disp_delete(struct disp_object *disp_obj) -{ - delete_disp(disp_obj); -} - -/* - * ======== disp_node_change_priority ======== - * Change the priority of a node currently running on the target. - */ -int disp_node_change_priority(struct disp_object *disp_obj, - struct node_object *hnode, - u32 rms_fxn, nodeenv node_env, s32 prio) -{ - u32 dw_arg; - struct rms_command *rms_cmd; - int status = 0; - - /* Send message to RMS to change priority */ - rms_cmd = (struct rms_command *)(disp_obj->buf); - rms_cmd->fxn = (rms_word) (rms_fxn); - rms_cmd->arg1 = (rms_word) node_env; - rms_cmd->arg2 = prio; - status = send_message(disp_obj, node_get_timeout(hnode), - sizeof(struct rms_command), &dw_arg); - - return status; -} - -/* - * ======== disp_node_create ======== - * Create a node on the DSP by remotely calling the node's create function. - */ -int disp_node_create(struct disp_object *disp_obj, - struct node_object *hnode, u32 rms_fxn, - u32 ul_create_fxn, - const struct node_createargs *pargs, - nodeenv *node_env) -{ - struct node_msgargs node_msg_args; - struct node_taskargs task_arg_obj; - struct rms_command *rms_cmd; - struct rms_msg_args *pmsg_args; - struct rms_more_task_args *more_task_args; - enum node_type node_type; - u32 dw_length; - rms_word *pdw_buf = NULL; - u32 ul_bytes; - u32 i; - u32 total; - u32 chars_in_rms_word; - s32 task_args_offset; - s32 sio_in_def_offset; - s32 sio_out_def_offset; - s32 sio_defs_offset; - s32 args_offset = -1; - s32 offset; - struct node_strmdef strm_def; - u32 max; - int status = 0; - struct dsp_nodeinfo node_info; - u8 dev_type; - - status = dev_get_dev_type(disp_obj->dev_obj, &dev_type); - - if (status) - goto func_end; - - if (dev_type != DSP_UNIT) { - dev_dbg(bridge, "%s: unknown device type = 0x%x\n", - __func__, dev_type); - goto func_end; - } - node_type = node_get_type(hnode); - node_msg_args = pargs->asa.node_msg_args; - max = disp_obj->bufsize_rms; /*Max # of RMS words that can be sent */ - chars_in_rms_word = sizeof(rms_word) / disp_obj->char_size; - /* Number of RMS words needed to hold arg data */ - dw_length = - (node_msg_args.arg_length + chars_in_rms_word - - 1) / chars_in_rms_word; - /* Make sure msg args and command fit in buffer */ - total = sizeof(struct rms_command) / sizeof(rms_word) + - sizeof(struct rms_msg_args) - / sizeof(rms_word) - 1 + dw_length; - if (total >= max) { - status = -EPERM; - dev_dbg(bridge, "%s: Message args too large for buffer! size " - "= %d, max = %d\n", __func__, total, max); - } - /* - * Fill in buffer to send to RMS. - * The buffer will have the following format: - * - * RMS command: - * Address of RMS_CreateNode() - * Address of node's create function - * dummy argument - * node type - * - * Message Args: - * max number of messages - * segid for message buffer allocation - * notification type to use when message is received - * length of message arg data - * message args data - * - * Task Args (if task or socket node): - * priority - * stack size - * system stack size - * stack segment - * misc - * number of input streams - * pSTRMInDef[] - offsets of STRM definitions for input streams - * number of output streams - * pSTRMOutDef[] - offsets of STRM definitions for output - * streams - * STRMInDef[] - array of STRM definitions for input streams - * STRMOutDef[] - array of STRM definitions for output streams - * - * Socket Args (if DAIS socket node): - * - */ - if (!status) { - total = 0; /* Total number of words in buffer so far */ - pdw_buf = (rms_word *) disp_obj->buf; - rms_cmd = (struct rms_command *)pdw_buf; - rms_cmd->fxn = (rms_word) (rms_fxn); - rms_cmd->arg1 = (rms_word) (ul_create_fxn); - if (node_get_load_type(hnode) == NLDR_DYNAMICLOAD) { - /* Flush ICACHE on Load */ - rms_cmd->arg2 = 1; /* dummy argument */ - } else { - /* Do not flush ICACHE */ - rms_cmd->arg2 = 0; /* dummy argument */ - } - rms_cmd->data = node_get_type(hnode); - /* - * args_offset is the offset of the data field in struct - * rms_command structure. We need this to calculate stream - * definition offsets. - */ - args_offset = 3; - total += sizeof(struct rms_command) / sizeof(rms_word); - /* Message args */ - pmsg_args = (struct rms_msg_args *)(pdw_buf + total); - pmsg_args->max_msgs = node_msg_args.max_msgs; - pmsg_args->segid = node_msg_args.seg_id; - pmsg_args->notify_type = node_msg_args.notify_type; - pmsg_args->arg_length = node_msg_args.arg_length; - total += sizeof(struct rms_msg_args) / sizeof(rms_word) - 1; - memcpy(pdw_buf + total, node_msg_args.pdata, - node_msg_args.arg_length); - total += dw_length; - } - if (status) - goto func_end; - - /* If node is a task node, copy task create arguments into buffer */ - if (node_type == NODE_TASK || node_type == NODE_DAISSOCKET) { - task_arg_obj = pargs->asa.task_arg_obj; - task_args_offset = total; - total += sizeof(struct rms_more_task_args) / sizeof(rms_word) + - 1 + task_arg_obj.num_inputs + task_arg_obj.num_outputs; - /* Copy task arguments */ - if (total < max) { - total = task_args_offset; - more_task_args = (struct rms_more_task_args *)(pdw_buf + - total); - /* - * Get some important info about the node. Note that we - * don't just reach into the hnode struct because - * that would break the node object's abstraction. - */ - get_node_info(hnode, &node_info); - more_task_args->priority = node_info.execution_priority; - more_task_args->stack_size = task_arg_obj.stack_size; - more_task_args->sysstack_size = - task_arg_obj.sys_stack_size; - more_task_args->stack_seg = task_arg_obj.stack_seg; - more_task_args->heap_addr = task_arg_obj.dsp_heap_addr; - more_task_args->heap_size = task_arg_obj.heap_size; - more_task_args->misc = task_arg_obj.dais_arg; - more_task_args->num_input_streams = - task_arg_obj.num_inputs; - total += - sizeof(struct rms_more_task_args) / - sizeof(rms_word); - dev_dbg(bridge, "%s: dsp_heap_addr %x, heap_size %x\n", - __func__, task_arg_obj.dsp_heap_addr, - task_arg_obj.heap_size); - /* Keep track of pSIOInDef[] and pSIOOutDef[] - * positions in the buffer, since this needs to be - * filled in later. */ - sio_in_def_offset = total; - total += task_arg_obj.num_inputs; - pdw_buf[total++] = task_arg_obj.num_outputs; - sio_out_def_offset = total; - total += task_arg_obj.num_outputs; - sio_defs_offset = total; - /* Fill SIO defs and offsets */ - offset = sio_defs_offset; - for (i = 0; i < task_arg_obj.num_inputs; i++) { - if (status) - break; - - pdw_buf[sio_in_def_offset + i] = - (offset - args_offset) - * (sizeof(rms_word) / DSPWORDSIZE); - strm_def = task_arg_obj.strm_in_def[i]; - status = - fill_stream_def(pdw_buf, &total, offset, - strm_def, max, - chars_in_rms_word); - offset = total; - } - for (i = 0; (i < task_arg_obj.num_outputs) && - (!status); i++) { - pdw_buf[sio_out_def_offset + i] = - (offset - args_offset) - * (sizeof(rms_word) / DSPWORDSIZE); - strm_def = task_arg_obj.strm_out_def[i]; - status = - fill_stream_def(pdw_buf, &total, offset, - strm_def, max, - chars_in_rms_word); - offset = total; - } - } else { - /* Args won't fit */ - status = -EPERM; - } - } - if (!status) { - ul_bytes = total * sizeof(rms_word); - status = send_message(disp_obj, node_get_timeout(hnode), - ul_bytes, node_env); - } -func_end: - return status; -} - -/* - * ======== disp_node_delete ======== - * purpose: - * Delete a node on the DSP by remotely calling the node's delete function. - * - */ -int disp_node_delete(struct disp_object *disp_obj, - struct node_object *hnode, u32 rms_fxn, - u32 ul_delete_fxn, nodeenv node_env) -{ - u32 dw_arg; - struct rms_command *rms_cmd; - int status = 0; - u8 dev_type; - - status = dev_get_dev_type(disp_obj->dev_obj, &dev_type); - - if (!status) { - - if (dev_type == DSP_UNIT) { - - /* - * Fill in buffer to send to RMS - */ - rms_cmd = (struct rms_command *)disp_obj->buf; - rms_cmd->fxn = (rms_word) (rms_fxn); - rms_cmd->arg1 = (rms_word) node_env; - rms_cmd->arg2 = (rms_word) (ul_delete_fxn); - rms_cmd->data = node_get_type(hnode); - - status = send_message(disp_obj, node_get_timeout(hnode), - sizeof(struct rms_command), - &dw_arg); - } - } - return status; -} - -/* - * ======== disp_node_run ======== - * purpose: - * Start execution of a node's execute phase, or resume execution of a node - * that has been suspended (via DISP_NodePause()) on the DSP. - */ -int disp_node_run(struct disp_object *disp_obj, - struct node_object *hnode, u32 rms_fxn, - u32 ul_execute_fxn, nodeenv node_env) -{ - u32 dw_arg; - struct rms_command *rms_cmd; - int status = 0; - u8 dev_type; - - status = dev_get_dev_type(disp_obj->dev_obj, &dev_type); - - if (!status) { - - if (dev_type == DSP_UNIT) { - - /* - * Fill in buffer to send to RMS. - */ - rms_cmd = (struct rms_command *)disp_obj->buf; - rms_cmd->fxn = (rms_word) (rms_fxn); - rms_cmd->arg1 = (rms_word) node_env; - rms_cmd->arg2 = (rms_word) (ul_execute_fxn); - rms_cmd->data = node_get_type(hnode); - - status = send_message(disp_obj, node_get_timeout(hnode), - sizeof(struct rms_command), - &dw_arg); - } - } - - return status; -} - -/* - * ======== delete_disp ======== - * purpose: - * Frees the resources allocated for the dispatcher. - */ -static void delete_disp(struct disp_object *disp_obj) -{ - int status = 0; - struct bridge_drv_interface *intf_fxns; - - if (disp_obj) { - intf_fxns = disp_obj->intf_fxns; - - /* Free Node Dispatcher resources */ - if (disp_obj->chnl_from_dsp) { - /* Channel close can fail only if the channel handle - * is invalid. */ - status = (*intf_fxns->chnl_close) - (disp_obj->chnl_from_dsp); - if (status) { - dev_dbg(bridge, "%s: Failed to close channel " - "from RMS: 0x%x\n", __func__, status); - } - } - if (disp_obj->chnl_to_dsp) { - status = - (*intf_fxns->chnl_close) (disp_obj-> - chnl_to_dsp); - if (status) { - dev_dbg(bridge, "%s: Failed to close channel to" - " RMS: 0x%x\n", __func__, status); - } - } - kfree(disp_obj->buf); - - kfree(disp_obj); - } -} - -/* - * ======== fill_stream_def ======== - * purpose: - * Fills stream definitions. - */ -static int fill_stream_def(rms_word *pdw_buf, u32 *ptotal, u32 offset, - struct node_strmdef strm_def, u32 max, - u32 chars_in_rms_word) -{ - struct rms_strm_def *strm_def_obj; - u32 total = *ptotal; - u32 name_len; - u32 dw_length; - int status = 0; - - if (total + sizeof(struct rms_strm_def) / sizeof(rms_word) >= max) { - status = -EPERM; - } else { - strm_def_obj = (struct rms_strm_def *)(pdw_buf + total); - strm_def_obj->bufsize = strm_def.buf_size; - strm_def_obj->nbufs = strm_def.num_bufs; - strm_def_obj->segid = strm_def.seg_id; - strm_def_obj->align = strm_def.buf_alignment; - strm_def_obj->timeout = strm_def.timeout; - } - - if (!status) { - /* - * Since we haven't added the device name yet, subtract - * 1 from total. - */ - total += sizeof(struct rms_strm_def) / sizeof(rms_word) - 1; - dw_length = strlen(strm_def.sz_device) + 1; - - /* Number of RMS_WORDS needed to hold device name */ - name_len = - (dw_length + chars_in_rms_word - 1) / chars_in_rms_word; - - if (total + name_len >= max) { - status = -EPERM; - } else { - /* - * Zero out last word, since the device name may not - * extend to completely fill this word. - */ - pdw_buf[total + name_len - 1] = 0; - /** TODO USE SERVICES * */ - memcpy(pdw_buf + total, strm_def.sz_device, dw_length); - total += name_len; - *ptotal = total; - } - } - - return status; -} - -/* - * ======== send_message ====== - * Send command message to RMS, get reply from RMS. - */ -static int send_message(struct disp_object *disp_obj, u32 timeout, - u32 ul_bytes, u32 *pdw_arg) -{ - struct bridge_drv_interface *intf_fxns; - struct chnl_object *chnl_obj; - u32 dw_arg = 0; - u8 *pbuf; - struct chnl_ioc chnl_ioc_obj; - int status = 0; - - *pdw_arg = (u32) NULL; - intf_fxns = disp_obj->intf_fxns; - chnl_obj = disp_obj->chnl_to_dsp; - pbuf = disp_obj->buf; - - /* Send the command */ - status = (*intf_fxns->chnl_add_io_req) (chnl_obj, pbuf, ul_bytes, 0, - 0L, dw_arg); - if (status) - goto func_end; - - status = - (*intf_fxns->chnl_get_ioc) (chnl_obj, timeout, &chnl_ioc_obj); - if (!status) { - if (!CHNL_IS_IO_COMPLETE(chnl_ioc_obj)) { - if (CHNL_IS_TIMED_OUT(chnl_ioc_obj)) - status = -ETIME; - else - status = -EPERM; - } - } - /* Get the reply */ - if (status) - goto func_end; - - chnl_obj = disp_obj->chnl_from_dsp; - ul_bytes = REPLYSIZE; - status = (*intf_fxns->chnl_add_io_req) (chnl_obj, pbuf, ul_bytes, - 0, 0L, dw_arg); - if (status) - goto func_end; - - status = - (*intf_fxns->chnl_get_ioc) (chnl_obj, timeout, &chnl_ioc_obj); - if (!status) { - if (CHNL_IS_TIMED_OUT(chnl_ioc_obj)) { - status = -ETIME; - } else if (chnl_ioc_obj.byte_size < ul_bytes) { - /* Did not get all of the reply from the RMS */ - status = -EPERM; - } else { - if (CHNL_IS_IO_COMPLETE(chnl_ioc_obj)) { - if (*((int *)chnl_ioc_obj.buf) < 0) { - /* Translate DSP's to kernel error */ - status = -EREMOTEIO; - dev_dbg(bridge, "%s: DSP-side failed:" - " DSP errcode = 0x%x, Kernel " - "errcode = %d\n", __func__, - *(int *)pbuf, status); - } - *pdw_arg = - (((rms_word *) (chnl_ioc_obj.buf))[1]); - } else { - status = -EPERM; - } - } - } -func_end: - return status; -} diff --git a/drivers/staging/tidspbridge/rmgr/drv.c b/drivers/staging/tidspbridge/rmgr/drv.c deleted file mode 100644 index 757ae20b38ee..000000000000 --- a/drivers/staging/tidspbridge/rmgr/drv.c +++ /dev/null @@ -1,816 +0,0 @@ -/* - * drv.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge resource allocation module. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- This */ -#include -#include - -#include -#include -#include -#include -#include -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -struct drv_object { - struct list_head dev_list; - struct list_head dev_node_string; -}; - -/* - * This is the Device Extension. Named with the Prefix - * DRV_ since it is living in this module - */ -struct drv_ext { - struct list_head link; - char sz_string[MAXREGPATHLENGTH]; -}; - -/* ----------------------------------- Globals */ -static bool ext_phys_mem_pool_enabled; -struct ext_phys_mem_pool { - u32 phys_mem_base; - u32 phys_mem_size; - u32 virt_mem_base; - u32 next_phys_alloc_ptr; -}; -static struct ext_phys_mem_pool ext_mem_pool; - -/* ----------------------------------- Function Prototypes */ -static int request_bridge_resources(struct cfg_hostres *res); - - -/* GPP PROCESS CLEANUP CODE */ - -static int drv_proc_free_node_res(int id, void *p, void *data); - -/* Allocate and add a node resource element -* This function is called from .Node_Allocate. */ -int drv_insert_node_res_element(void *hnode, void *node_resource, - void *process_ctxt) -{ - struct node_res_object **node_res_obj = - (struct node_res_object **)node_resource; - struct process_context *ctxt = (struct process_context *)process_ctxt; - int retval; - - *node_res_obj = kzalloc(sizeof(struct node_res_object), GFP_KERNEL); - if (!*node_res_obj) - return -ENOMEM; - - (*node_res_obj)->node = hnode; - retval = idr_alloc(ctxt->node_id, *node_res_obj, 0, 0, GFP_KERNEL); - if (retval >= 0) { - (*node_res_obj)->id = retval; - return 0; - } - - kfree(*node_res_obj); - - if (retval == -ENOSPC) { - pr_err("%s: FAILED, IDR is FULL\n", __func__); - return -EFAULT; - } else { - pr_err("%s: OUT OF MEMORY\n", __func__); - return -ENOMEM; - } -} - -/* Release all Node resources and its context - * Actual Node De-Allocation */ -static int drv_proc_free_node_res(int id, void *p, void *data) -{ - struct process_context *ctxt = data; - int status; - struct node_res_object *node_res_obj = p; - u32 node_state; - - if (node_res_obj->node_allocated) { - node_state = node_get_state(node_res_obj->node); - if (node_state <= NODE_DELETING) { - if ((node_state == NODE_RUNNING) || - (node_state == NODE_PAUSED) || - (node_state == NODE_TERMINATING)) - node_terminate - (node_res_obj->node, &status); - - node_delete(node_res_obj, ctxt); - } - } - - return 0; -} - -/* Release all Mapped and Reserved DMM resources */ -int drv_remove_all_dmm_res_elements(void *process_ctxt) -{ - struct process_context *ctxt = (struct process_context *)process_ctxt; - int status = 0; - struct dmm_map_object *temp_map, *map_obj; - struct dmm_rsv_object *temp_rsv, *rsv_obj; - - /* Free DMM mapped memory resources */ - list_for_each_entry_safe(map_obj, temp_map, &ctxt->dmm_map_list, link) { - status = proc_un_map(ctxt->processor, - (void *)map_obj->dsp_addr, ctxt); - if (status) - pr_err("%s: proc_un_map failed!" - " status = 0x%xn", __func__, status); - } - - /* Free DMM reserved memory resources */ - list_for_each_entry_safe(rsv_obj, temp_rsv, &ctxt->dmm_rsv_list, link) { - status = proc_un_reserve_memory(ctxt->processor, (void *) - rsv_obj->dsp_reserved_addr, - ctxt); - if (status) - pr_err("%s: proc_un_reserve_memory failed!" - " status = 0x%xn", __func__, status); - } - return status; -} - -/* Update Node allocation status */ -void drv_proc_node_update_status(void *node_resource, s32 status) -{ - struct node_res_object *node_res_obj = - (struct node_res_object *)node_resource; - node_res_obj->node_allocated = status; -} - -/* Update Node Heap status */ -void drv_proc_node_update_heap_status(void *node_resource, s32 status) -{ - struct node_res_object *node_res_obj = - (struct node_res_object *)node_resource; - node_res_obj->heap_allocated = status; -} - -/* Release all Node resources and its context -* This is called from .bridge_release. - */ -int drv_remove_all_node_res_elements(void *process_ctxt) -{ - struct process_context *ctxt = process_ctxt; - - idr_for_each(ctxt->node_id, drv_proc_free_node_res, ctxt); - idr_destroy(ctxt->node_id); - - return 0; -} - -/* Allocate the STRM resource element -* This is called after the actual resource is allocated - */ -int drv_proc_insert_strm_res_element(void *stream_obj, - void *strm_res, void *process_ctxt) -{ - struct strm_res_object **pstrm_res = - (struct strm_res_object **)strm_res; - struct process_context *ctxt = (struct process_context *)process_ctxt; - int retval; - - *pstrm_res = kzalloc(sizeof(struct strm_res_object), GFP_KERNEL); - if (*pstrm_res == NULL) - return -EFAULT; - - (*pstrm_res)->stream = stream_obj; - retval = idr_alloc(ctxt->stream_id, *pstrm_res, 0, 0, GFP_KERNEL); - if (retval >= 0) { - (*pstrm_res)->id = retval; - return 0; - } - - if (retval == -ENOSPC) { - pr_err("%s: FAILED, IDR is FULL\n", __func__); - return -EPERM; - } else { - pr_err("%s: OUT OF MEMORY\n", __func__); - return -ENOMEM; - } -} - -static int drv_proc_free_strm_res(int id, void *p, void *process_ctxt) -{ - struct process_context *ctxt = process_ctxt; - struct strm_res_object *strm_res = p; - struct stream_info strm_info; - struct dsp_streaminfo user; - u8 **ap_buffer = NULL; - u8 *buf_ptr; - u32 ul_bytes; - u32 dw_arg; - s32 ul_buf_size; - - if (strm_res->num_bufs) { - ap_buffer = kmalloc((strm_res->num_bufs * - sizeof(u8 *)), GFP_KERNEL); - if (ap_buffer) { - strm_free_buffer(strm_res, - ap_buffer, - strm_res->num_bufs, - ctxt); - kfree(ap_buffer); - } - } - strm_info.user_strm = &user; - user.number_bufs_in_stream = 0; - strm_get_info(strm_res->stream, &strm_info, sizeof(strm_info)); - while (user.number_bufs_in_stream--) - strm_reclaim(strm_res->stream, &buf_ptr, &ul_bytes, - (u32 *) &ul_buf_size, &dw_arg); - strm_close(strm_res, ctxt); - return 0; -} - -/* Release all Stream resources and its context -* This is called from .bridge_release. - */ -int drv_remove_all_strm_res_elements(void *process_ctxt) -{ - struct process_context *ctxt = process_ctxt; - - idr_for_each(ctxt->stream_id, drv_proc_free_strm_res, ctxt); - idr_destroy(ctxt->stream_id); - - return 0; -} - -/* Updating the stream resource element */ -int drv_proc_update_strm_res(u32 num_bufs, void *strm_resources) -{ - int status = 0; - struct strm_res_object **strm_res = - (struct strm_res_object **)strm_resources; - - (*strm_res)->num_bufs = num_bufs; - return status; -} - -/* GPP PROCESS CLEANUP CODE END */ - -/* - * ======== = drv_create ======== = - * Purpose: - * DRV Object gets created only once during Driver Loading. - */ -int drv_create(struct drv_object **drv_obj) -{ - int status = 0; - struct drv_object *pdrv_object = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - pdrv_object = kzalloc(sizeof(struct drv_object), GFP_KERNEL); - if (pdrv_object) { - /* Create and Initialize List of device objects */ - INIT_LIST_HEAD(&pdrv_object->dev_list); - INIT_LIST_HEAD(&pdrv_object->dev_node_string); - } else { - status = -ENOMEM; - } - /* Store the DRV Object in the driver data */ - if (!status) { - if (drv_datap) { - drv_datap->drv_object = (void *)pdrv_object; - } else { - status = -EPERM; - pr_err("%s: Failed to store DRV object\n", __func__); - } - } - - if (!status) { - *drv_obj = pdrv_object; - } else { - /* Free the DRV Object */ - kfree(pdrv_object); - } - - return status; -} - -/* - * ======== = drv_destroy ======== = - * purpose: - * Invoked during bridge de-initialization - */ -int drv_destroy(struct drv_object *driver_obj) -{ - int status = 0; - struct drv_object *pdrv_object = (struct drv_object *)driver_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - kfree(pdrv_object); - /* Update the DRV Object in the driver data */ - if (drv_datap) { - drv_datap->drv_object = NULL; - } else { - status = -EPERM; - pr_err("%s: Failed to store DRV object\n", __func__); - } - - return status; -} - -/* - * ======== drv_get_dev_object ======== - * Purpose: - * Given a index, returns a handle to DevObject from the list. - */ -int drv_get_dev_object(u32 index, struct drv_object *hdrv_obj, - struct dev_object **device_obj) -{ - int status = 0; - struct dev_object *dev_obj; - u32 i; - - dev_obj = (struct dev_object *)drv_get_first_dev_object(); - for (i = 0; i < index; i++) { - dev_obj = - (struct dev_object *)drv_get_next_dev_object((u32) dev_obj); - } - if (dev_obj) { - *device_obj = (struct dev_object *)dev_obj; - } else { - *device_obj = NULL; - status = -EPERM; - } - - return status; -} - -/* - * ======== drv_get_first_dev_object ======== - * Purpose: - * Retrieve the first Device Object handle from an internal linked list of - * of DEV_OBJECTs maintained by DRV. - */ -u32 drv_get_first_dev_object(void) -{ - u32 dw_dev_object = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; - if (!list_empty(&pdrv_obj->dev_list)) - dw_dev_object = (u32) pdrv_obj->dev_list.next; - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - return dw_dev_object; -} - -/* - * ======== DRV_GetFirstDevNodeString ======== - * Purpose: - * Retrieve the first Device Extension from an internal linked list of - * of Pointer to dev_node Strings maintained by DRV. - */ -u32 drv_get_first_dev_extension(void) -{ - u32 dw_dev_extension = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; - if (!list_empty(&pdrv_obj->dev_node_string)) { - dw_dev_extension = - (u32) pdrv_obj->dev_node_string.next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - return dw_dev_extension; -} - -/* - * ======== drv_get_next_dev_object ======== - * Purpose: - * Retrieve the next Device Object handle from an internal linked list of - * of DEV_OBJECTs maintained by DRV, after having previously called - * drv_get_first_dev_object() and zero or more DRV_GetNext. - */ -u32 drv_get_next_dev_object(u32 hdev_obj) -{ - u32 dw_next_dev_object = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - struct list_head *curr; - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; - if (!list_empty(&pdrv_obj->dev_list)) { - curr = (struct list_head *)hdev_obj; - if (list_is_last(curr, &pdrv_obj->dev_list)) - return 0; - dw_next_dev_object = (u32) curr->next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - return dw_next_dev_object; -} - -/* - * ======== drv_get_next_dev_extension ======== - * Purpose: - * Retrieve the next Device Extension from an internal linked list of - * of pointer to DevNodeString maintained by DRV, after having previously - * called drv_get_first_dev_extension() and zero or more - * drv_get_next_dev_extension(). - */ -u32 drv_get_next_dev_extension(u32 dev_extension) -{ - u32 dw_dev_extension = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - struct list_head *curr; - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; - if (!list_empty(&pdrv_obj->dev_node_string)) { - curr = (struct list_head *)dev_extension; - if (list_is_last(curr, &pdrv_obj->dev_node_string)) - return 0; - dw_dev_extension = (u32) curr->next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - return dw_dev_extension; -} - -/* - * ======== drv_insert_dev_object ======== - * Purpose: - * Insert a DevObject into the list of Manager object. - */ -int drv_insert_dev_object(struct drv_object *driver_obj, - struct dev_object *hdev_obj) -{ - struct drv_object *pdrv_object = (struct drv_object *)driver_obj; - - list_add_tail((struct list_head *)hdev_obj, &pdrv_object->dev_list); - - return 0; -} - -/* - * ======== drv_remove_dev_object ======== - * Purpose: - * Search for and remove a DeviceObject from the given list of DRV - * objects. - */ -int drv_remove_dev_object(struct drv_object *driver_obj, - struct dev_object *hdev_obj) -{ - int status = -EPERM; - struct drv_object *pdrv_object = (struct drv_object *)driver_obj; - struct list_head *cur_elem; - - /* Search list for p_proc_object: */ - list_for_each(cur_elem, &pdrv_object->dev_list) { - /* If found, remove it. */ - if ((struct dev_object *)cur_elem == hdev_obj) { - list_del(cur_elem); - status = 0; - break; - } - } - - return status; -} - -/* - * ======== drv_request_resources ======== - * Purpose: - * Requests resources from the OS. - */ -int drv_request_resources(u32 dw_context, u32 *dev_node_strg) -{ - int status = 0; - struct drv_object *pdrv_object; - struct drv_ext *pszdev_node; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* - * Allocate memory to hold the string. This will live until - * it is freed in the Release resources. Update the driver object - * list. - */ - - if (!drv_datap || !drv_datap->drv_object) - status = -ENODATA; - else - pdrv_object = drv_datap->drv_object; - - if (!status) { - pszdev_node = kzalloc(sizeof(struct drv_ext), GFP_KERNEL); - if (pszdev_node) { - strncpy(pszdev_node->sz_string, - (char *)dw_context, MAXREGPATHLENGTH - 1); - pszdev_node->sz_string[MAXREGPATHLENGTH - 1] = '\0'; - /* Update the Driver Object List */ - *dev_node_strg = (u32) pszdev_node->sz_string; - list_add_tail(&pszdev_node->link, - &pdrv_object->dev_node_string); - } else { - status = -ENOMEM; - *dev_node_strg = 0; - } - } else { - dev_dbg(bridge, "%s: Failed to get Driver Object from Registry", - __func__); - *dev_node_strg = 0; - } - - return status; -} - -/* - * ======== drv_release_resources ======== - * Purpose: - * Releases resources from the OS. - */ -int drv_release_resources(u32 dw_context, struct drv_object *hdrv_obj) -{ - int status = 0; - struct drv_ext *pszdev_node; - - /* - * Irrespective of the status go ahead and clean it - * The following will over write the status. - */ - for (pszdev_node = (struct drv_ext *)drv_get_first_dev_extension(); - pszdev_node != NULL; pszdev_node = (struct drv_ext *) - drv_get_next_dev_extension((u32) pszdev_node)) { - if ((u32) pszdev_node == dw_context) { - /* Found it */ - /* Delete from the Driver object list */ - list_del(&pszdev_node->link); - kfree(pszdev_node); - break; - } - } - return status; -} - -/* - * ======== request_bridge_resources ======== - * Purpose: - * Reserves shared memory for bridge. - */ -static int request_bridge_resources(struct cfg_hostres *res) -{ - struct cfg_hostres *host_res = res; - - /* num_mem_windows must not be more than CFG_MAXMEMREGISTERS */ - host_res->num_mem_windows = 2; - - /* First window is for DSP internal memory */ - dev_dbg(bridge, "mem_base[0] 0x%x\n", host_res->mem_base[0]); - dev_dbg(bridge, "mem_base[3] 0x%x\n", host_res->mem_base[3]); - dev_dbg(bridge, "dmmu_base %p\n", host_res->dmmu_base); - - /* for 24xx base port is not mapping the mamory for DSP - * internal memory TODO Do a ioremap here */ - /* Second window is for DSP external memory shared with MPU */ - - /* These are hard-coded values */ - host_res->birq_registers = 0; - host_res->birq_attrib = 0; - host_res->offset_for_monitor = 0; - host_res->chnl_offset = 0; - /* CHNL_MAXCHANNELS */ - host_res->num_chnls = CHNL_MAXCHANNELS; - host_res->chnl_buf_size = 0x400; - - return 0; -} - -/* - * ======== drv_request_bridge_res_dsp ======== - * Purpose: - * Reserves shared memory for bridge. - */ -int drv_request_bridge_res_dsp(void **phost_resources) -{ - int status = 0; - struct cfg_hostres *host_res; - u32 dw_buff_size; - u32 dma_addr; - u32 shm_size; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - dw_buff_size = sizeof(struct cfg_hostres); - - host_res = kzalloc(dw_buff_size, GFP_KERNEL); - - if (host_res != NULL) { - request_bridge_resources(host_res); - /* num_mem_windows must not be more than CFG_MAXMEMREGISTERS */ - host_res->num_mem_windows = 4; - - host_res->mem_base[0] = 0; - host_res->mem_base[2] = (u32) ioremap(OMAP_DSP_MEM1_BASE, - OMAP_DSP_MEM1_SIZE); - host_res->mem_base[3] = (u32) ioremap(OMAP_DSP_MEM2_BASE, - OMAP_DSP_MEM2_SIZE); - host_res->mem_base[4] = (u32) ioremap(OMAP_DSP_MEM3_BASE, - OMAP_DSP_MEM3_SIZE); - host_res->per_base = ioremap(OMAP_PER_CM_BASE, - OMAP_PER_CM_SIZE); - host_res->per_pm_base = ioremap(OMAP_PER_PRM_BASE, - OMAP_PER_PRM_SIZE); - host_res->core_pm_base = ioremap(OMAP_CORE_PRM_BASE, - OMAP_CORE_PRM_SIZE); - host_res->dmmu_base = ioremap(OMAP_DMMU_BASE, - OMAP_DMMU_SIZE); - - dev_dbg(bridge, "mem_base[0] 0x%x\n", - host_res->mem_base[0]); - dev_dbg(bridge, "mem_base[1] 0x%x\n", - host_res->mem_base[1]); - dev_dbg(bridge, "mem_base[2] 0x%x\n", - host_res->mem_base[2]); - dev_dbg(bridge, "mem_base[3] 0x%x\n", - host_res->mem_base[3]); - dev_dbg(bridge, "mem_base[4] 0x%x\n", - host_res->mem_base[4]); - dev_dbg(bridge, "dmmu_base %p\n", host_res->dmmu_base); - - shm_size = drv_datap->shm_size; - if (shm_size >= 0x10000) { - /* Allocate Physically contiguous, - * non-cacheable memory */ - host_res->mem_base[1] = - (u32) mem_alloc_phys_mem(shm_size, 0x100000, - &dma_addr); - if (host_res->mem_base[1] == 0) { - status = -ENOMEM; - pr_err("shm reservation Failed\n"); - } else { - host_res->mem_length[1] = shm_size; - host_res->mem_phys[1] = dma_addr; - - dev_dbg(bridge, "%s: Bridge shm address 0x%x " - "dma_addr %x size %x\n", __func__, - host_res->mem_base[1], - dma_addr, shm_size); - } - } - if (!status) { - /* These are hard-coded values */ - host_res->birq_registers = 0; - host_res->birq_attrib = 0; - host_res->offset_for_monitor = 0; - host_res->chnl_offset = 0; - /* CHNL_MAXCHANNELS */ - host_res->num_chnls = CHNL_MAXCHANNELS; - host_res->chnl_buf_size = 0x400; - dw_buff_size = sizeof(struct cfg_hostres); - } - *phost_resources = host_res; - } - /* End Mem alloc */ - return status; -} - -void mem_ext_phys_pool_init(u32 pool_phys_base, u32 pool_size) -{ - u32 pool_virt_base; - - /* get the virtual address for the physical memory pool passed */ - pool_virt_base = (u32) ioremap(pool_phys_base, pool_size); - - if ((void **)pool_virt_base == NULL) { - pr_err("%s: external physical memory map failed\n", __func__); - ext_phys_mem_pool_enabled = false; - } else { - ext_mem_pool.phys_mem_base = pool_phys_base; - ext_mem_pool.phys_mem_size = pool_size; - ext_mem_pool.virt_mem_base = pool_virt_base; - ext_mem_pool.next_phys_alloc_ptr = pool_phys_base; - ext_phys_mem_pool_enabled = true; - } -} - -void mem_ext_phys_pool_release(void) -{ - if (ext_phys_mem_pool_enabled) { - iounmap((void *)(ext_mem_pool.virt_mem_base)); - ext_phys_mem_pool_enabled = false; - } -} - -/* - * ======== mem_ext_phys_mem_alloc ======== - * Purpose: - * Allocate physically contiguous, uncached memory from external memory pool - */ - -static void *mem_ext_phys_mem_alloc(u32 bytes, u32 align, u32 *phys_addr) -{ - u32 new_alloc_ptr; - u32 offset; - u32 virt_addr; - - if (align == 0) - align = 1; - - if (bytes > ((ext_mem_pool.phys_mem_base + ext_mem_pool.phys_mem_size) - - ext_mem_pool.next_phys_alloc_ptr)) { - phys_addr = NULL; - return NULL; - } else { - offset = (ext_mem_pool.next_phys_alloc_ptr & (align - 1)); - if (offset == 0) - new_alloc_ptr = ext_mem_pool.next_phys_alloc_ptr; - else - new_alloc_ptr = (ext_mem_pool.next_phys_alloc_ptr) + - (align - offset); - if ((new_alloc_ptr + bytes) <= - (ext_mem_pool.phys_mem_base + ext_mem_pool.phys_mem_size)) { - /* we can allocate */ - *phys_addr = new_alloc_ptr; - ext_mem_pool.next_phys_alloc_ptr = - new_alloc_ptr + bytes; - virt_addr = - ext_mem_pool.virt_mem_base + (new_alloc_ptr - - ext_mem_pool. - phys_mem_base); - return (void *)virt_addr; - } else { - *phys_addr = 0; - return NULL; - } - } -} - -/* - * ======== mem_alloc_phys_mem ======== - * Purpose: - * Allocate physically contiguous, uncached memory - */ -void *mem_alloc_phys_mem(u32 byte_size, u32 align_mask, - u32 *physical_address) -{ - void *va_mem = NULL; - dma_addr_t pa_mem; - - if (byte_size > 0) { - if (ext_phys_mem_pool_enabled) { - va_mem = mem_ext_phys_mem_alloc(byte_size, align_mask, - (u32 *) &pa_mem); - } else - va_mem = dma_alloc_coherent(NULL, byte_size, &pa_mem, - GFP_KERNEL); - if (va_mem == NULL) - *physical_address = 0; - else - *physical_address = pa_mem; - } - return va_mem; -} - -/* - * ======== mem_free_phys_mem ======== - * Purpose: - * Free the given block of physically contiguous memory. - */ -void mem_free_phys_mem(void *virtual_address, u32 physical_address, - u32 byte_size) -{ - if (!ext_phys_mem_pool_enabled) - dma_free_coherent(NULL, byte_size, virtual_address, - physical_address); -} diff --git a/drivers/staging/tidspbridge/rmgr/drv_interface.c b/drivers/staging/tidspbridge/rmgr/drv_interface.c deleted file mode 100644 index e3918d2efa17..000000000000 --- a/drivers/staging/tidspbridge/rmgr/drv_interface.c +++ /dev/null @@ -1,650 +0,0 @@ -/* - * drv_interface.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge driver interface. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include - -/* ----------------------------------- Resource Manager */ -#include - -#include -#include -#include - -#ifdef CONFIG_TIDSPBRIDGE_DVFS -#include -#endif - -/* ----------------------------------- Globals */ -#define DSPBRIDGE_VERSION "0.3" -s32 dsp_debug; - -struct platform_device *omap_dspbridge_dev; -struct device *bridge; - -/* This is a test variable used by Bridge to test different sleep states */ -s32 dsp_test_sleepstate; - -static struct cdev bridge_cdev; - -static struct class *bridge_class; - -static u32 driver_context; -static s32 driver_major; -static char *base_img; -static s32 shm_size = 0x500000; /* 5 MB */ -static int tc_wordswapon; /* Default value is always false */ -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY -#define REC_TIMEOUT 5000 /*recovery timeout in msecs */ -static atomic_t bridge_cref; /* number of bridge open handles */ -static struct workqueue_struct *bridge_rec_queue; -static struct work_struct bridge_recovery_work; -static DECLARE_COMPLETION(bridge_comp); -static DECLARE_COMPLETION(bridge_open_comp); -static bool recover; -#endif - -#ifdef CONFIG_PM -struct omap34_xx_bridge_suspend_data { - int suspended; - wait_queue_head_t suspend_wq; -}; - -static struct omap34_xx_bridge_suspend_data bridge_suspend_data; - -static int omap34_xxbridge_suspend_lockout(struct omap34_xx_bridge_suspend_data - *s, struct file *f) -{ - if ((s)->suspended) { - if ((f)->f_flags & O_NONBLOCK) - return -EPERM; - wait_event_interruptible((s)->suspend_wq, (s)->suspended == 0); - } - return 0; -} -#endif - -module_param(dsp_debug, int, 0); -MODULE_PARM_DESC(dsp_debug, "Wait after loading DSP image. default = false"); - -module_param(dsp_test_sleepstate, int, 0); -MODULE_PARM_DESC(dsp_test_sleepstate, "DSP Sleep state = 0"); - -module_param(base_img, charp, 0); -MODULE_PARM_DESC(base_img, "DSP base image, default = NULL"); - -module_param(shm_size, int, 0); -MODULE_PARM_DESC(shm_size, "shm size, default = 4 MB, minimum = 64 KB"); - -module_param(tc_wordswapon, int, 0); -MODULE_PARM_DESC(tc_wordswapon, "TC Word Swap Option. default = 0"); - -MODULE_AUTHOR("Texas Instruments"); -MODULE_LICENSE("GPL"); -MODULE_VERSION(DSPBRIDGE_VERSION); - -/* - * This function is called when an application opens handle to the - * bridge driver. - */ -static int bridge_open(struct inode *ip, struct file *filp) -{ - int status = 0; - struct process_context *pr_ctxt = NULL; - - /* - * Allocate a new process context and insert it into global - * process context list. - */ - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - if (recover) { - if (filp->f_flags & O_NONBLOCK || - wait_for_completion_interruptible(&bridge_open_comp)) - return -EBUSY; - } -#endif - pr_ctxt = kzalloc(sizeof(struct process_context), GFP_KERNEL); - if (!pr_ctxt) - return -ENOMEM; - - pr_ctxt->res_state = PROC_RES_ALLOCATED; - spin_lock_init(&pr_ctxt->dmm_map_lock); - INIT_LIST_HEAD(&pr_ctxt->dmm_map_list); - spin_lock_init(&pr_ctxt->dmm_rsv_lock); - INIT_LIST_HEAD(&pr_ctxt->dmm_rsv_list); - - pr_ctxt->node_id = kzalloc(sizeof(struct idr), GFP_KERNEL); - if (!pr_ctxt->node_id) { - status = -ENOMEM; - goto err1; - } - - idr_init(pr_ctxt->node_id); - - pr_ctxt->stream_id = kzalloc(sizeof(struct idr), GFP_KERNEL); - if (!pr_ctxt->stream_id) { - status = -ENOMEM; - goto err2; - } - - idr_init(pr_ctxt->stream_id); - - filp->private_data = pr_ctxt; - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - atomic_inc(&bridge_cref); -#endif - return 0; - -err2: - kfree(pr_ctxt->node_id); -err1: - kfree(pr_ctxt); - return status; -} - -/* - * This function is called when an application closes handle to the bridge - * driver. - */ -static int bridge_release(struct inode *ip, struct file *filp) -{ - int status = 0; - struct process_context *pr_ctxt; - - if (!filp->private_data) { - status = -EIO; - goto err; - } - - pr_ctxt = filp->private_data; - flush_signals(current); - drv_remove_all_resources(pr_ctxt); - proc_detach(pr_ctxt); - kfree(pr_ctxt->node_id); - kfree(pr_ctxt->stream_id); - kfree(pr_ctxt); - - filp->private_data = NULL; - -err: -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - if (!atomic_dec_return(&bridge_cref)) - complete(&bridge_comp); -#endif - return status; -} - -/* This function provides IO interface to the bridge driver. */ -static long bridge_ioctl(struct file *filp, unsigned int code, - unsigned long args) -{ - int status; - u32 retval = 0; - union trapped_args buf_in; - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - if (recover) { - status = -EIO; - goto err; - } -#endif -#ifdef CONFIG_PM - status = omap34_xxbridge_suspend_lockout(&bridge_suspend_data, filp); - if (status != 0) - return status; -#endif - - if (!filp->private_data) { - status = -EIO; - goto err; - } - - status = copy_from_user(&buf_in, (union trapped_args *)args, - sizeof(union trapped_args)); - - if (!status) { - status = api_call_dev_ioctl(code, &buf_in, &retval, - filp->private_data); - - if (!status) { - status = retval; - } else { - dev_dbg(bridge, "%s: IOCTL Failed, code: 0x%x " - "status 0x%x\n", __func__, code, status); - status = -1; - } - - } - -err: - return status; -} - -/* This function maps kernel space memory to user space memory. */ -static int bridge_mmap(struct file *filp, struct vm_area_struct *vma) -{ - unsigned long base_pgoff; - int status; - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - /* VM_IO | VM_DONTEXPAND | VM_DONTDUMP are set by remap_pfn_range() */ - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - - dev_dbg(bridge, "%s: vm filp %p start %lx end %lx page_prot %ulx " - "flags %lx\n", __func__, filp, - vma->vm_start, vma->vm_end, vma->vm_page_prot, - vma->vm_flags); - - /* - * vm_iomap_memory() expects vma->vm_pgoff to be expressed as an offset - * from the start of the physical memory pool, but we're called with - * a pfn (physical page number) stored there instead. - * - * To avoid duplicating lots of tricky overflow checking logic, - * temporarily convert vma->vm_pgoff to the offset vm_iomap_memory() - * expects, but restore the original value once the mapping has been - * created. - */ - base_pgoff = pdata->phys_mempool_base >> PAGE_SHIFT; - - if (vma->vm_pgoff < base_pgoff) - return -EINVAL; - - vma->vm_pgoff -= base_pgoff; - - status = vm_iomap_memory(vma, - pdata->phys_mempool_base, - pdata->phys_mempool_size); - - /* Restore the original value of vma->vm_pgoff */ - vma->vm_pgoff += base_pgoff; - - return status; -} - -static const struct file_operations bridge_fops = { - .open = bridge_open, - .release = bridge_release, - .unlocked_ioctl = bridge_ioctl, - .mmap = bridge_mmap, - .llseek = noop_llseek, -}; - -#ifdef CONFIG_PM -static u32 time_out = 1000; -#ifdef CONFIG_TIDSPBRIDGE_DVFS -s32 dsp_max_opps = VDD1_OPP5; -#endif - -/* Maximum Opps that can be requested by IVA */ -/*vdd1 rate table */ -#ifdef CONFIG_TIDSPBRIDGE_DVFS -const struct omap_opp vdd1_rate_table_bridge[] = { - {0, 0, 0}, - /*OPP1 */ - {S125M, VDD1_OPP1, 0}, - /*OPP2 */ - {S250M, VDD1_OPP2, 0}, - /*OPP3 */ - {S500M, VDD1_OPP3, 0}, - /*OPP4 */ - {S550M, VDD1_OPP4, 0}, - /*OPP5 */ - {S600M, VDD1_OPP5, 0}, -}; -#endif -#endif - -struct omap_dsp_platform_data *omap_dspbridge_pdata; - -u32 vdd1_dsp_freq[6][4] = { - {0, 0, 0, 0}, - /*OPP1 */ - {0, 90000, 0, 86000}, - /*OPP2 */ - {0, 180000, 80000, 170000}, - /*OPP3 */ - {0, 360000, 160000, 340000}, - /*OPP4 */ - {0, 396000, 325000, 376000}, - /*OPP5 */ - {0, 430000, 355000, 430000}, -}; - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY -static void bridge_recover(struct work_struct *work) -{ - struct dev_object *dev; - struct cfg_devnode *dev_node; - - if (atomic_read(&bridge_cref)) { - reinit_completion(&bridge_comp); - while (!wait_for_completion_timeout(&bridge_comp, - msecs_to_jiffies(REC_TIMEOUT))) - pr_info("%s:%d handle(s) still opened\n", - __func__, atomic_read(&bridge_cref)); - } - dev = dev_get_first(); - dev_get_dev_node(dev, &dev_node); - if (!dev_node || proc_auto_start(dev_node, dev)) - pr_err("DSP could not be restarted\n"); - recover = false; - complete_all(&bridge_open_comp); -} - -void bridge_recover_schedule(void) -{ - reinit_completion(&bridge_open_comp); - recover = true; - queue_work(bridge_rec_queue, &bridge_recovery_work); -} -#endif -#ifdef CONFIG_TIDSPBRIDGE_DVFS -static int dspbridge_scale_notification(struct notifier_block *op, - unsigned long val, void *ptr) -{ - struct omap_dsp_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; - - if (CPUFREQ_POSTCHANGE == val && pdata->dsp_get_opp) - pwr_pm_post_scale(PRCM_VDD1, pdata->dsp_get_opp()); - - return 0; -} - -static struct notifier_block iva_clk_notifier = { - .notifier_call = dspbridge_scale_notification, - NULL, -}; -#endif - -/** - * omap3_bridge_startup() - perform low lever initializations - * @pdev: pointer to platform device - * - * Initializes recovery, PM and DVFS required data, before calling - * clk and memory init routines. - */ -static int omap3_bridge_startup(struct platform_device *pdev) -{ - struct omap_dsp_platform_data *pdata = pdev->dev.platform_data; - struct drv_data *drv_datap = NULL; - u32 phys_membase, phys_memsize; - int err; - -#ifdef CONFIG_TIDSPBRIDGE_RECOVERY - bridge_rec_queue = create_workqueue("bridge_rec_queue"); - INIT_WORK(&bridge_recovery_work, bridge_recover); - reinit_completion(&bridge_comp); -#endif - -#ifdef CONFIG_PM - /* Initialize the wait queue */ - bridge_suspend_data.suspended = 0; - init_waitqueue_head(&bridge_suspend_data.suspend_wq); - -#ifdef CONFIG_TIDSPBRIDGE_DVFS - for (i = 0; i < 6; i++) - pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].rate; - - err = cpufreq_register_notifier(&iva_clk_notifier, - CPUFREQ_TRANSITION_NOTIFIER); - if (err) - pr_err("%s: clk_notifier_register failed for iva2_ck\n", - __func__); -#endif -#endif - - dsp_clk_init(); - - drv_datap = kzalloc(sizeof(struct drv_data), GFP_KERNEL); - if (!drv_datap) { - err = -ENOMEM; - goto err1; - } - - drv_datap->shm_size = shm_size; - drv_datap->tc_wordswapon = tc_wordswapon; - - if (base_img) { - drv_datap->base_img = kstrdup(base_img, GFP_KERNEL); - if (!drv_datap->base_img) { - err = -ENOMEM; - goto err2; - } - } - - dev_set_drvdata(bridge, drv_datap); - - if (shm_size < 0x10000) { /* 64 KB */ - err = -EINVAL; - pr_err("%s: shm size must be at least 64 KB\n", __func__); - goto err3; - } - dev_dbg(bridge, "%s: requested shm_size = 0x%x\n", __func__, shm_size); - - phys_membase = pdata->phys_mempool_base; - phys_memsize = pdata->phys_mempool_size; - if (phys_membase > 0 && phys_memsize > 0) - mem_ext_phys_pool_init(phys_membase, phys_memsize); - - if (tc_wordswapon) - dev_dbg(bridge, "%s: TC Word Swap is enabled\n", __func__); - - driver_context = dsp_init(&err); - if (err) { - pr_err("DSP Bridge driver initialization failed\n"); - goto err4; - } - - return 0; - -err4: - mem_ext_phys_pool_release(); -err3: - kfree(drv_datap->base_img); -err2: - kfree(drv_datap); -err1: -#ifdef CONFIG_TIDSPBRIDGE_DVFS - cpufreq_unregister_notifier(&iva_clk_notifier, - CPUFREQ_TRANSITION_NOTIFIER); -#endif - dsp_clk_exit(); - - return err; -} - -static int omap34_xx_bridge_probe(struct platform_device *pdev) -{ - int err; - dev_t dev = 0; -#ifdef CONFIG_TIDSPBRIDGE_DVFS - int i = 0; -#endif - - omap_dspbridge_dev = pdev; - - /* Global bridge device */ - bridge = &omap_dspbridge_dev->dev; - - /* Bridge low level initializations */ - err = omap3_bridge_startup(pdev); - if (err) - goto err1; - - /* use 2.6 device model */ - err = alloc_chrdev_region(&dev, 0, 1, "DspBridge"); - if (err) { - pr_err("%s: Can't get major %d\n", __func__, driver_major); - goto err1; - } - - cdev_init(&bridge_cdev, &bridge_fops); - bridge_cdev.owner = THIS_MODULE; - - err = cdev_add(&bridge_cdev, dev, 1); - if (err) { - pr_err("%s: Failed to add bridge device\n", __func__); - goto err2; - } - - /* udev support */ - bridge_class = class_create(THIS_MODULE, "ti_bridge"); - if (IS_ERR(bridge_class)) { - pr_err("%s: Error creating bridge class\n", __func__); - err = PTR_ERR(bridge_class); - goto err3; - } - - driver_major = MAJOR(dev); - device_create(bridge_class, NULL, MKDEV(driver_major, 0), - NULL, "DspBridge"); - pr_info("DSP Bridge driver loaded\n"); - - return 0; - -err3: - cdev_del(&bridge_cdev); -err2: - unregister_chrdev_region(dev, 1); -err1: - return err; -} - -static int omap34_xx_bridge_remove(struct platform_device *pdev) -{ - dev_t devno; - int status = 0; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* Retrieve the Object handle from the driver data */ - if (!drv_datap || !drv_datap->drv_object) { - status = -ENODATA; - pr_err("%s: Failed to retrieve the object handle\n", __func__); - goto func_cont; - } - -#ifdef CONFIG_TIDSPBRIDGE_DVFS - if (cpufreq_unregister_notifier(&iva_clk_notifier, - CPUFREQ_TRANSITION_NOTIFIER)) - pr_err("%s: cpufreq_unregister_notifier failed for iva2_ck\n", - __func__); -#endif /* #ifdef CONFIG_TIDSPBRIDGE_DVFS */ - - if (driver_context) { - /* Put the DSP in reset state */ - dsp_deinit(driver_context); - driver_context = 0; - } - - kfree(drv_datap); - dev_set_drvdata(bridge, NULL); - -func_cont: - mem_ext_phys_pool_release(); - - dsp_clk_exit(); - - devno = MKDEV(driver_major, 0); - cdev_del(&bridge_cdev); - unregister_chrdev_region(devno, 1); - if (bridge_class) { - /* remove the device from sysfs */ - device_destroy(bridge_class, MKDEV(driver_major, 0)); - class_destroy(bridge_class); - - } - return status; -} - -#ifdef CONFIG_PM -static int bridge_suspend(struct platform_device *pdev, pm_message_t state) -{ - u32 status; - u32 command = PWR_EMERGENCYDEEPSLEEP; - - status = pwr_sleep_dsp(command, time_out); - if (status) - return -1; - - bridge_suspend_data.suspended = 1; - return 0; -} - -static int bridge_resume(struct platform_device *pdev) -{ - u32 status; - - status = pwr_wake_dsp(time_out); - if (status) - return -1; - - bridge_suspend_data.suspended = 0; - wake_up(&bridge_suspend_data.suspend_wq); - return 0; -} -#endif - -static struct platform_driver bridge_driver = { - .driver = { - .name = "omap-dsp", - }, - .probe = omap34_xx_bridge_probe, - .remove = omap34_xx_bridge_remove, -#ifdef CONFIG_PM - .suspend = bridge_suspend, - .resume = bridge_resume, -#endif -}; - -/* To remove all process resources before removing the process from the - * process context list */ -int drv_remove_all_resources(void *process_ctxt) -{ - int status = 0; - struct process_context *ctxt = (struct process_context *)process_ctxt; - - drv_remove_all_strm_res_elements(ctxt); - drv_remove_all_node_res_elements(ctxt); - drv_remove_all_dmm_res_elements(ctxt); - ctxt->res_state = PROC_RES_FREED; - return status; -} - -module_platform_driver(bridge_driver); diff --git a/drivers/staging/tidspbridge/rmgr/dspdrv.c b/drivers/staging/tidspbridge/rmgr/dspdrv.c deleted file mode 100644 index 012e4a38d2db..000000000000 --- a/drivers/staging/tidspbridge/rmgr/dspdrv.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * dspdrv.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Interface to allocate and free bridge resources. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* ----------------------------------- Host OS */ -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include - -/* ----------------------------------- Resource Manager */ -#include - -/* ----------------------------------- This */ -#include - -/* - * ======== dsp_init ======== - * Allocates bridge resources. Loads a base image onto DSP, if specified. - */ -u32 dsp_init(u32 *init_status) -{ - char dev_node[MAXREGPATHLENGTH] = "TIOMAP1510"; - int status = -EPERM; - struct drv_object *drv_obj = NULL; - u32 device_node; - u32 device_node_string; - - if (!api_init()) - goto func_cont; - - status = drv_create(&drv_obj); - if (status) { - api_exit(); - goto func_cont; - } - - /* End drv_create */ - /* Request Resources */ - status = drv_request_resources((u32) &dev_node, &device_node_string); - if (!status) { - /* Attempt to Start the Device */ - status = dev_start_device((struct cfg_devnode *) - device_node_string); - if (status) - (void)drv_release_resources - ((u32) device_node_string, drv_obj); - } else { - dev_dbg(bridge, "%s: drv_request_resources Failed\n", __func__); - status = -EPERM; - } - - /* Unwind whatever was loaded */ - if (status) { - /* irrespective of the status of dev_remove_device we continue - * unloading. Get the Driver Object iterate through and remove. - * Reset the status to E_FAIL to avoid going through - * api_init_complete2. */ - for (device_node = drv_get_first_dev_extension(); - device_node != 0; - device_node = drv_get_next_dev_extension(device_node)) { - (void)dev_remove_device((struct cfg_devnode *) - device_node); - (void)drv_release_resources((u32) device_node, drv_obj); - } - /* Remove the Driver Object */ - (void)drv_destroy(drv_obj); - drv_obj = NULL; - api_exit(); - dev_dbg(bridge, "%s: Logical device failed init\n", __func__); - } /* Unwinding the loaded drivers */ -func_cont: - /* Attempt to Start the Board */ - if (!status) { - /* BRD_AutoStart could fail if the dsp executable is not the - * correct one. We should not propagate that error - * into the device loader. */ - (void)api_init_complete2(); - } else { - dev_dbg(bridge, "%s: Failed\n", __func__); - } /* End api_init_complete2 */ - *init_status = status; - /* Return the Driver Object */ - return (u32) drv_obj; -} - -/* - * ======== dsp_deinit ======== - * Frees the resources allocated for bridge. - */ -bool dsp_deinit(u32 device_context) -{ - bool ret = true; - u32 device_node; - struct mgr_object *mgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - while ((device_node = drv_get_first_dev_extension()) != 0) { - (void)dev_remove_device((struct cfg_devnode *)device_node); - - (void)drv_release_resources((u32) device_node, - (struct drv_object *)device_context); - } - - (void)drv_destroy((struct drv_object *)device_context); - - /* Get the Manager Object from driver data - * MGR Destroy will unload the DCD dll */ - if (drv_datap && drv_datap->mgr_object) { - mgr_obj = drv_datap->mgr_object; - (void)mgr_destroy(mgr_obj); - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } - - api_exit(); - - return ret; -} diff --git a/drivers/staging/tidspbridge/rmgr/mgr.c b/drivers/staging/tidspbridge/rmgr/mgr.c deleted file mode 100644 index 93e6282f122b..000000000000 --- a/drivers/staging/tidspbridge/rmgr/mgr.c +++ /dev/null @@ -1,352 +0,0 @@ -/* - * mgr.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Implementation of Manager interface to the device object at the - * driver level. This queries the NDB data base and retrieves the - * data about Node and Processor. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Others */ -#include -#include -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define ZLDLLNAME "" - -struct mgr_object { - struct dcd_manager *dcd_mgr; /* Proc/Node data manager */ -}; - -/* ----------------------------------- Globals */ -static u32 refs; - -/* - * ========= mgr_create ========= - * Purpose: - * MGR Object gets created only once during driver Loading. - */ -int mgr_create(struct mgr_object **mgr_obj, - struct cfg_devnode *dev_node_obj) -{ - int status = 0; - struct mgr_object *pmgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - pmgr_obj = kzalloc(sizeof(struct mgr_object), GFP_KERNEL); - if (pmgr_obj) { - status = dcd_create_manager(ZLDLLNAME, &pmgr_obj->dcd_mgr); - if (!status) { - /* If succeeded store the handle in the MGR Object */ - if (drv_datap) { - drv_datap->mgr_object = (void *)pmgr_obj; - } else { - status = -EPERM; - pr_err("%s: Failed to store MGR object\n", - __func__); - } - - if (!status) { - *mgr_obj = pmgr_obj; - } else { - dcd_destroy_manager(pmgr_obj->dcd_mgr); - kfree(pmgr_obj); - } - } else { - /* failed to Create DCD Manager */ - kfree(pmgr_obj); - } - } else { - status = -ENOMEM; - } - - return status; -} - -/* - * ========= mgr_destroy ========= - * This function is invoked during bridge driver unloading.Frees MGR object. - */ -int mgr_destroy(struct mgr_object *hmgr_obj) -{ - int status = 0; - struct mgr_object *pmgr_obj = (struct mgr_object *)hmgr_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - /* Free resources */ - if (hmgr_obj->dcd_mgr) - dcd_destroy_manager(hmgr_obj->dcd_mgr); - - kfree(pmgr_obj); - /* Update the driver data with NULL for MGR Object */ - if (drv_datap) { - drv_datap->mgr_object = NULL; - } else { - status = -EPERM; - pr_err("%s: Failed to store MGR object\n", __func__); - } - - return status; -} - -/* - * ======== mgr_enum_node_info ======== - * Enumerate and get configuration information about nodes configured - * in the node database. - */ -int mgr_enum_node_info(u32 node_id, struct dsp_ndbprops *pndb_props, - u32 undb_props_size, u32 *pu_num_nodes) -{ - int status = 0; - struct dsp_uuid node_uuid; - u32 node_index = 0; - struct dcd_genericobj gen_obj; - struct mgr_object *pmgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - *pu_num_nodes = 0; - /* Get the Manager Object from the driver data */ - if (!drv_datap || !drv_datap->mgr_object) { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - return -ENODATA; - } - pmgr_obj = drv_datap->mgr_object; - - /* Forever loop till we hit failed or no more items in the - * Enumeration. We will exit the loop other than 0; */ - while (!status) { - status = dcd_enumerate_object(node_index++, DSP_DCDNODETYPE, - &node_uuid); - if (status) - break; - *pu_num_nodes = node_index; - if (node_id == (node_index - 1)) { - status = dcd_get_object_def(pmgr_obj->dcd_mgr, - &node_uuid, DSP_DCDNODETYPE, &gen_obj); - if (status) - break; - /* Get the Obj def */ - *pndb_props = gen_obj.obj_data.node_obj.ndb_props; - } - } - - /* the last status is not 0, but neither an error */ - if (status > 0) - status = 0; - - return status; -} - -/* - * ======== mgr_enum_processor_info ======== - * Enumerate and get configuration information about available - * DSP processors. - */ -int mgr_enum_processor_info(u32 processor_id, - struct dsp_processorinfo * - processor_info, u32 processor_info_size, - u8 *pu_num_procs) -{ - int status = 0; - int status1 = 0; - int status2 = 0; - struct dsp_uuid temp_uuid; - u32 temp_index = 0; - u32 proc_index = 0; - struct dcd_genericobj gen_obj; - struct mgr_object *pmgr_obj = NULL; - struct mgr_processorextinfo *ext_info; - struct dev_object *hdev_obj; - struct drv_object *hdrv_obj; - u8 dev_type; - struct cfg_devnode *dev_node; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - bool proc_detect = false; - - *pu_num_procs = 0; - - /* Retrieve the Object handle from the driver data */ - if (!drv_datap || !drv_datap->drv_object) { - status = -ENODATA; - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } else { - hdrv_obj = drv_datap->drv_object; - } - - if (!status) { - status = drv_get_dev_object(processor_id, hdrv_obj, &hdev_obj); - if (!status) { - status = dev_get_dev_type(hdev_obj, (u8 *) &dev_type); - status = dev_get_dev_node(hdev_obj, &dev_node); - if (dev_type != DSP_UNIT) - status = -EPERM; - - if (!status) - processor_info->processor_type = DSPTYPE64; - } - } - if (status) - goto func_end; - - /* Get The Manager Object from the driver data */ - if (drv_datap && drv_datap->mgr_object) { - pmgr_obj = drv_datap->mgr_object; - } else { - dev_dbg(bridge, "%s: Failed to get MGR Object\n", __func__); - goto func_end; - } - /* Forever loop till we hit no more items in the - * Enumeration. We will exit the loop other than 0; */ - while (status1 == 0) { - status1 = dcd_enumerate_object(temp_index++, - DSP_DCDPROCESSORTYPE, - &temp_uuid); - if (status1 != 0) - break; - - proc_index++; - /* Get the Object properties to find the Device/Processor - * Type */ - if (proc_detect != false) - continue; - - status2 = dcd_get_object_def(pmgr_obj->dcd_mgr, - (struct dsp_uuid *)&temp_uuid, - DSP_DCDPROCESSORTYPE, &gen_obj); - if (!status2) { - /* Get the Obj def */ - if (processor_info_size < - sizeof(struct mgr_processorextinfo)) { - *processor_info = gen_obj.obj_data.proc_info; - } else { - /* extended info */ - ext_info = (struct mgr_processorextinfo *) - processor_info; - *ext_info = gen_obj.obj_data.ext_proc_obj; - } - dev_dbg(bridge, "%s: Got proctype from DCD %x\n", - __func__, processor_info->processor_type); - /* See if we got the needed processor */ - if (dev_type == DSP_UNIT) { - if (processor_info->processor_type == - DSPPROCTYPE_C64) - proc_detect = true; - } else if (dev_type == IVA_UNIT) { - if (processor_info->processor_type == - IVAPROCTYPE_ARM7) - proc_detect = true; - } - /* User applications only check for chip type, so - * this is a clumsy overwrite */ - processor_info->processor_type = DSPTYPE64; - } else { - dev_dbg(bridge, "%s: Failed to get DCD processor info %x\n", - __func__, status2); - status = -EPERM; - } - } - *pu_num_procs = proc_index; - if (proc_detect == false) { - dev_dbg(bridge, "%s: Failed to get proc info from DCD, so use CFG registry\n", - __func__); - processor_info->processor_type = DSPTYPE64; - } -func_end: - return status; -} - -/* - * ======== mgr_exit ======== - * Decrement reference count, and free resources when reference count is - * 0. - */ -void mgr_exit(void) -{ - refs--; - if (refs == 0) - dcd_exit(); -} - -/* - * ======== mgr_get_dcd_handle ======== - * Retrieves the MGR handle. Accessor Function. - */ -int mgr_get_dcd_handle(struct mgr_object *mgr_handle, - u32 *dcd_handle) -{ - int status = -EPERM; - struct mgr_object *pmgr_obj = (struct mgr_object *)mgr_handle; - - *dcd_handle = (u32) NULL; - if (pmgr_obj) { - *dcd_handle = (u32) pmgr_obj->dcd_mgr; - status = 0; - } - - return status; -} - -/* - * ======== mgr_init ======== - * Initialize MGR's private state, keeping a reference count on each call. - */ -bool mgr_init(void) -{ - bool ret = true; - - if (refs == 0) - ret = dcd_init(); /* DCD Module */ - - if (ret) - refs++; - - return ret; -} - -/* - * ======== mgr_wait_for_bridge_events ======== - * Block on any Bridge event(s) - */ -int mgr_wait_for_bridge_events(struct dsp_notification **anotifications, - u32 count, u32 *pu_index, - u32 utimeout) -{ - int status; - struct sync_object *sync_events[MAX_EVENTS]; - u32 i; - - for (i = 0; i < count; i++) - sync_events[i] = anotifications[i]->handle; - - status = sync_wait_on_multiple_events(sync_events, count, utimeout, - pu_index); - - return status; - -} diff --git a/drivers/staging/tidspbridge/rmgr/nldr.c b/drivers/staging/tidspbridge/rmgr/nldr.c deleted file mode 100644 index 900585ab059a..000000000000 --- a/drivers/staging/tidspbridge/rmgr/nldr.c +++ /dev/null @@ -1,1861 +0,0 @@ -/* - * nldr.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge dynamic + overlay Node loader. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -#include - -#include - -/* Platform manager */ -#include -#include - -/* Resource manager */ -#include -#include -#include -#include - -#include -#include - -/* Name of section containing dynamic load mem */ -#define DYNMEMSECT ".dspbridge_mem" - -/* Name of section containing dependent library information */ -#define DEPLIBSECT ".dspbridge_deplibs" - -/* Max depth of recursion for loading node's dependent libraries */ -#define MAXDEPTH 5 - -/* Max number of persistent libraries kept by a node */ -#define MAXLIBS 5 - -/* - * Defines for extracting packed dynamic load memory requirements from two - * masks. - * These defines must match node.cdb and dynm.cdb - * Format of data/code mask is: - * uuuuuuuu|fueeeeee|fudddddd|fucccccc| - * where - * u = unused - * cccccc = preferred/required dynamic mem segid for create phase data/code - * dddddd = preferred/required dynamic mem segid for delete phase data/code - * eeeeee = preferred/req. dynamic mem segid for execute phase data/code - * f = flag indicating if memory is preferred or required: - * f = 1 if required, f = 0 if preferred. - * - * The 6 bits of the segid are interpreted as follows: - * - * If the 6th bit (bit 5) is not set, then this specifies a memory segment - * between 0 and 31 (a maximum of 32 dynamic loading memory segments). - * If the 6th bit (bit 5) is set, segid has the following interpretation: - * segid = 32 - Any internal memory segment can be used. - * segid = 33 - Any external memory segment can be used. - * segid = 63 - Any memory segment can be used (in this case the - * required/preferred flag is irrelevant). - * - */ -/* Maximum allowed dynamic loading memory segments */ -#define MAXMEMSEGS 32 - -#define MAXSEGID 3 /* Largest possible (real) segid */ -#define MEMINTERNALID 32 /* Segid meaning use internal mem */ -#define MEMEXTERNALID 33 /* Segid meaning use external mem */ -#define NULLID 63 /* Segid meaning no memory req/pref */ -#define FLAGBIT 7 /* 7th bit is pref./req. flag */ -#define SEGMASK 0x3f /* Bits 0 - 5 */ - -#define CREATEBIT 0 /* Create segid starts at bit 0 */ -#define DELETEBIT 8 /* Delete segid starts at bit 8 */ -#define EXECUTEBIT 16 /* Execute segid starts at bit 16 */ - -/* - * Masks that define memory type. Must match defines in dynm.cdb. - */ -#define DYNM_CODE 0x2 -#define DYNM_DATA 0x4 -#define DYNM_CODEDATA (DYNM_CODE | DYNM_DATA) -#define DYNM_INTERNAL 0x8 -#define DYNM_EXTERNAL 0x10 - -/* - * Defines for packing memory requirement/preference flags for code and - * data of each of the node's phases into one mask. - * The bit is set if the segid is required for loading code/data of the - * given phase. The bit is not set, if the segid is preferred only. - * - * These defines are also used as indeces into a segid array for the node. - * eg node's segid[CREATEDATAFLAGBIT] is the memory segment id that the - * create phase data is required or preferred to be loaded into. - */ -#define CREATEDATAFLAGBIT 0 -#define CREATECODEFLAGBIT 1 -#define EXECUTEDATAFLAGBIT 2 -#define EXECUTECODEFLAGBIT 3 -#define DELETEDATAFLAGBIT 4 -#define DELETECODEFLAGBIT 5 -#define MAXFLAGS 6 - - /* - * These names may be embedded in overlay sections to identify which - * node phase the section should be overlayed. - */ -#define PCREATE "create" -#define PDELETE "delete" -#define PEXECUTE "execute" - -static inline bool is_equal_uuid(struct dsp_uuid *uuid1, - struct dsp_uuid *uuid2) -{ - return !memcmp(uuid1, uuid2, sizeof(struct dsp_uuid)); -} - - /* - * ======== mem_seg_info ======== - * Format of dynamic loading memory segment info in coff file. - * Must match dynm.h55. - */ -struct mem_seg_info { - u32 segid; /* Dynamic loading memory segment number */ - u32 base; - u32 len; - u32 type; /* Mask of DYNM_CODE, DYNM_INTERNAL, etc. */ -}; - -/* - * ======== lib_node ======== - * For maintaining a tree of library dependencies. - */ -struct lib_node { - struct dbll_library_obj *lib; /* The library */ - u16 dep_libs; /* Number of dependent libraries */ - struct lib_node *dep_libs_tree; /* Dependent libraries of lib */ -}; - -/* - * ======== ovly_sect ======== - * Information needed to overlay a section. - */ -struct ovly_sect { - struct ovly_sect *next_sect; - u32 sect_load_addr; /* Load address of section */ - u32 sect_run_addr; /* Run address of section */ - u32 size; /* Size of section */ - u16 page; /* DBL_CODE, DBL_DATA */ -}; - -/* - * ======== ovly_node ======== - * For maintaining a list of overlay nodes, with sections that need to be - * overlayed for each of the nodes phases. - */ -struct ovly_node { - struct dsp_uuid uuid; - char *node_name; - struct ovly_sect *create_sects_list; - struct ovly_sect *delete_sects_list; - struct ovly_sect *execute_sects_list; - struct ovly_sect *other_sects_list; - u16 create_sects; - u16 delete_sects; - u16 execute_sects; - u16 other_sects; - u16 create_ref; - u16 delete_ref; - u16 execute_ref; - u16 other_ref; -}; - -/* - * ======== nldr_object ======== - * Overlay loader object. - */ -struct nldr_object { - struct dev_object *dev_obj; /* Device object */ - struct dcd_manager *dcd_mgr; /* Proc/Node data manager */ - struct dbll_tar_obj *dbll; /* The DBL loader */ - struct dbll_library_obj *base_lib; /* Base image library */ - struct rmm_target_obj *rmm; /* Remote memory manager for DSP */ - struct dbll_fxns ldr_fxns; /* Loader function table */ - struct dbll_attrs ldr_attrs; /* attrs to pass to loader functions */ - nldr_ovlyfxn ovly_fxn; /* "write" for overlay nodes */ - nldr_writefxn write_fxn; /* "write" for dynamic nodes */ - struct ovly_node *ovly_table; /* Table of overlay nodes */ - u16 ovly_nodes; /* Number of overlay nodes in base */ - u16 ovly_nid; /* Index for tracking overlay nodes */ - u16 dload_segs; /* Number of dynamic load mem segs */ - u32 *seg_table; /* memtypes of dynamic memory segs - * indexed by segid - */ - u16 dsp_mau_size; /* Size of DSP MAU */ - u16 dsp_word_size; /* Size of DSP word */ -}; - -/* - * ======== nldr_nodeobject ======== - * Dynamic node object. This object is created when a node is allocated. - */ -struct nldr_nodeobject { - struct nldr_object *nldr_obj; /* Dynamic loader handle */ - void *priv_ref; /* Handle to pass to dbl_write_fxn */ - struct dsp_uuid uuid; /* Node's UUID */ - bool dynamic; /* Dynamically loaded node? */ - bool overlay; /* Overlay node? */ - bool *phase_split; /* Multiple phase libraries? */ - struct lib_node root; /* Library containing node phase */ - struct lib_node create_lib; /* Library with create phase lib */ - struct lib_node execute_lib; /* Library with execute phase lib */ - struct lib_node delete_lib; /* Library with delete phase lib */ - /* libs remain loaded until Delete */ - struct lib_node pers_lib_table[MAXLIBS]; - s32 pers_libs; /* Number of persistent libraries */ - /* Path in lib dependency tree */ - struct dbll_library_obj *lib_path[MAXDEPTH + 1]; - enum nldr_phase phase; /* Node phase currently being loaded */ - - /* - * Dynamic loading memory segments for data and code of each phase. - */ - u16 seg_id[MAXFLAGS]; - - /* - * Mask indicating whether each mem segment specified in seg_id[] - * is preferred or required. - * For example - * if (code_data_flag_mask & (1 << EXECUTEDATAFLAGBIT)) != 0, - * then it is required to load execute phase data into the memory - * specified by seg_id[EXECUTEDATAFLAGBIT]. - */ - u32 code_data_flag_mask; -}; - -/* Dynamic loader function table */ -static struct dbll_fxns ldr_fxns = { - (dbll_close_fxn) dbll_close, - (dbll_create_fxn) dbll_create, - (dbll_delete_fxn) dbll_delete, - (dbll_exit_fxn) dbll_exit, - (dbll_get_attrs_fxn) dbll_get_attrs, - (dbll_get_addr_fxn) dbll_get_addr, - (dbll_get_c_addr_fxn) dbll_get_c_addr, - (dbll_get_sect_fxn) dbll_get_sect, - (dbll_init_fxn) dbll_init, - (dbll_load_fxn) dbll_load, - (dbll_open_fxn) dbll_open, - (dbll_read_sect_fxn) dbll_read_sect, - (dbll_unload_fxn) dbll_unload, -}; - -static int add_ovly_info(void *handle, struct dbll_sect_info *sect_info, - u32 addr, u32 bytes); -static int add_ovly_node(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type, void *handle); -static int add_ovly_sect(struct nldr_object *nldr_obj, - struct ovly_sect **lst, - struct dbll_sect_info *sect_inf, - bool *exists, u32 addr, u32 bytes); -static s32 fake_ovly_write(void *handle, u32 dsp_address, void *buf, u32 bytes, - s32 mtype); -static void free_sects(struct nldr_object *nldr_obj, - struct ovly_sect *phase_sects, u16 alloc_num); -static bool get_symbol_value(void *handle, void *parg, void *rmm_handle, - char *sym_name, struct dbll_sym_val **sym); -static int load_lib(struct nldr_nodeobject *nldr_node_obj, - struct lib_node *root, struct dsp_uuid uuid, - bool root_prstnt, - struct dbll_library_obj **lib_path, - enum nldr_phase phase, u16 depth); -static int load_ovly(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); -static int remote_alloc(void **ref, u16 mem_sect, u32 size, - u32 align, u32 *dsp_address, - s32 segmnt_id, - s32 req, bool reserve); -static int remote_free(void **ref, u16 space, u32 dsp_address, u32 size, - bool reserve); - -static void unload_lib(struct nldr_nodeobject *nldr_node_obj, - struct lib_node *root); -static void unload_ovly(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase); -static bool find_in_persistent_lib_array(struct nldr_nodeobject *nldr_node_obj, - struct dbll_library_obj *lib); - -/* - * ======== nldr_allocate ======== - */ -int nldr_allocate(struct nldr_object *nldr_obj, void *priv_ref, - const struct dcd_nodeprops *node_props, - struct nldr_nodeobject **nldr_nodeobj, - bool *pf_phase_split) -{ - struct nldr_nodeobject *nldr_node_obj = NULL; - int status = 0; - - /* Initialize handle in case of failure */ - *nldr_nodeobj = NULL; - /* Allocate node object */ - nldr_node_obj = kzalloc(sizeof(struct nldr_nodeobject), GFP_KERNEL); - - if (nldr_node_obj == NULL) { - status = -ENOMEM; - } else { - nldr_node_obj->phase_split = pf_phase_split; - nldr_node_obj->pers_libs = 0; - nldr_node_obj->nldr_obj = nldr_obj; - nldr_node_obj->priv_ref = priv_ref; - /* Save node's UUID. */ - nldr_node_obj->uuid = node_props->ndb_props.ui_node_id; - /* - * Determine if node is a dynamically loaded node from - * ndb_props. - */ - if (node_props->load_type == NLDR_DYNAMICLOAD) { - /* Dynamic node */ - nldr_node_obj->dynamic = true; - /* - * Extract memory requirements from ndb_props masks - */ - /* Create phase */ - nldr_node_obj->seg_id[CREATEDATAFLAGBIT] = (u16) - (node_props->data_mem_seg_mask >> CREATEBIT) & - SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->data_mem_seg_mask >> - (CREATEBIT + FLAGBIT)) & 1) << CREATEDATAFLAGBIT; - nldr_node_obj->seg_id[CREATECODEFLAGBIT] = (u16) - (node_props->code_mem_seg_mask >> - CREATEBIT) & SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->code_mem_seg_mask >> - (CREATEBIT + FLAGBIT)) & 1) << CREATECODEFLAGBIT; - /* Execute phase */ - nldr_node_obj->seg_id[EXECUTEDATAFLAGBIT] = (u16) - (node_props->data_mem_seg_mask >> - EXECUTEBIT) & SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->data_mem_seg_mask >> - (EXECUTEBIT + FLAGBIT)) & 1) << - EXECUTEDATAFLAGBIT; - nldr_node_obj->seg_id[EXECUTECODEFLAGBIT] = (u16) - (node_props->code_mem_seg_mask >> - EXECUTEBIT) & SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->code_mem_seg_mask >> - (EXECUTEBIT + FLAGBIT)) & 1) << - EXECUTECODEFLAGBIT; - /* Delete phase */ - nldr_node_obj->seg_id[DELETEDATAFLAGBIT] = (u16) - (node_props->data_mem_seg_mask >> DELETEBIT) & - SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->data_mem_seg_mask >> - (DELETEBIT + FLAGBIT)) & 1) << DELETEDATAFLAGBIT; - nldr_node_obj->seg_id[DELETECODEFLAGBIT] = (u16) - (node_props->code_mem_seg_mask >> - DELETEBIT) & SEGMASK; - nldr_node_obj->code_data_flag_mask |= - ((node_props->code_mem_seg_mask >> - (DELETEBIT + FLAGBIT)) & 1) << DELETECODEFLAGBIT; - } else { - /* Non-dynamically loaded nodes are part of the - * base image */ - nldr_node_obj->root.lib = nldr_obj->base_lib; - /* Check for overlay node */ - if (node_props->load_type == NLDR_OVLYLOAD) - nldr_node_obj->overlay = true; - - } - *nldr_nodeobj = (struct nldr_nodeobject *)nldr_node_obj; - } - /* Cleanup on failure */ - if (status && nldr_node_obj) - kfree(nldr_node_obj); - - return status; -} - -/* - * ======== nldr_create ======== - */ -int nldr_create(struct nldr_object **nldr, - struct dev_object *hdev_obj, - const struct nldr_attrs *pattrs) -{ - struct cod_manager *cod_mgr; /* COD manager */ - char *psz_coff_buf = NULL; - char sz_zl_file[COD_MAXPATHLENGTH]; - struct nldr_object *nldr_obj = NULL; - struct dbll_attrs save_attrs; - struct dbll_attrs new_attrs; - dbll_flags flags; - u32 ul_entry; - u16 dload_segs = 0; - struct mem_seg_info *mem_info_obj; - u32 ul_len = 0; - u32 ul_addr; - struct rmm_segment *rmm_segs = NULL; - u16 i; - int status = 0; - - /* Allocate dynamic loader object */ - nldr_obj = kzalloc(sizeof(struct nldr_object), GFP_KERNEL); - if (nldr_obj) { - nldr_obj->dev_obj = hdev_obj; - /* warning, lazy status checking alert! */ - dev_get_cod_mgr(hdev_obj, &cod_mgr); - if (cod_mgr) { - status = cod_get_loader(cod_mgr, &nldr_obj->dbll); - status = cod_get_base_lib(cod_mgr, &nldr_obj->base_lib); - status = - cod_get_base_name(cod_mgr, sz_zl_file, - COD_MAXPATHLENGTH); - } - status = 0; - /* end lazy status checking */ - nldr_obj->dsp_mau_size = pattrs->dsp_mau_size; - nldr_obj->dsp_word_size = pattrs->dsp_word_size; - nldr_obj->ldr_fxns = ldr_fxns; - if (!(nldr_obj->ldr_fxns.init_fxn())) - status = -ENOMEM; - - } else { - status = -ENOMEM; - } - /* Create the DCD Manager */ - if (!status) - status = dcd_create_manager(NULL, &nldr_obj->dcd_mgr); - - /* Get dynamic loading memory sections from base lib */ - if (!status) { - status = - nldr_obj->ldr_fxns.get_sect_fxn(nldr_obj->base_lib, - DYNMEMSECT, &ul_addr, - &ul_len); - if (!status) { - psz_coff_buf = - kzalloc(ul_len * nldr_obj->dsp_mau_size, - GFP_KERNEL); - if (!psz_coff_buf) - status = -ENOMEM; - } else { - /* Ok to not have dynamic loading memory */ - status = 0; - ul_len = 0; - dev_dbg(bridge, "%s: failed - no dynamic loading mem " - "segments: 0x%x\n", __func__, status); - } - } - if (!status && ul_len > 0) { - /* Read section containing dynamic load mem segments */ - status = - nldr_obj->ldr_fxns.read_sect_fxn(nldr_obj->base_lib, - DYNMEMSECT, psz_coff_buf, - ul_len); - } - if (!status && ul_len > 0) { - /* Parse memory segment data */ - dload_segs = (u16) (*((u32 *) psz_coff_buf)); - if (dload_segs > MAXMEMSEGS) - status = -EBADF; - } - /* Parse dynamic load memory segments */ - if (!status && dload_segs > 0) { - rmm_segs = kzalloc(sizeof(struct rmm_segment) * dload_segs, - GFP_KERNEL); - nldr_obj->seg_table = - kzalloc(sizeof(u32) * dload_segs, GFP_KERNEL); - if (rmm_segs == NULL || nldr_obj->seg_table == NULL) { - status = -ENOMEM; - } else { - nldr_obj->dload_segs = dload_segs; - mem_info_obj = (struct mem_seg_info *)(psz_coff_buf + - sizeof(u32)); - for (i = 0; i < dload_segs; i++) { - rmm_segs[i].base = (mem_info_obj + i)->base; - rmm_segs[i].length = (mem_info_obj + i)->len; - rmm_segs[i].space = 0; - nldr_obj->seg_table[i] = - (mem_info_obj + i)->type; - dev_dbg(bridge, - "(proc) DLL MEMSEGMENT: %d, " - "Base: 0x%x, Length: 0x%x\n", i, - rmm_segs[i].base, rmm_segs[i].length); - } - } - } - /* Create Remote memory manager */ - if (!status) - status = rmm_create(&nldr_obj->rmm, rmm_segs, dload_segs); - - if (!status) { - /* set the alloc, free, write functions for loader */ - nldr_obj->ldr_fxns.get_attrs_fxn(nldr_obj->dbll, &save_attrs); - new_attrs = save_attrs; - new_attrs.alloc = (dbll_alloc_fxn) remote_alloc; - new_attrs.free = (dbll_free_fxn) remote_free; - new_attrs.sym_lookup = (dbll_sym_lookup) get_symbol_value; - new_attrs.sym_handle = nldr_obj; - new_attrs.write = (dbll_write_fxn) pattrs->write; - nldr_obj->ovly_fxn = pattrs->ovly; - nldr_obj->write_fxn = pattrs->write; - nldr_obj->ldr_attrs = new_attrs; - } - kfree(rmm_segs); - - kfree(psz_coff_buf); - - /* Get overlay nodes */ - if (!status) { - status = - cod_get_base_name(cod_mgr, sz_zl_file, COD_MAXPATHLENGTH); - /* lazy check */ - /* First count number of overlay nodes */ - status = - dcd_get_objects(nldr_obj->dcd_mgr, sz_zl_file, - add_ovly_node, (void *)nldr_obj); - /* Now build table of overlay nodes */ - if (!status && nldr_obj->ovly_nodes > 0) { - /* Allocate table for overlay nodes */ - nldr_obj->ovly_table = - kzalloc(sizeof(struct ovly_node) * - nldr_obj->ovly_nodes, GFP_KERNEL); - /* Put overlay nodes in the table */ - nldr_obj->ovly_nid = 0; - status = dcd_get_objects(nldr_obj->dcd_mgr, sz_zl_file, - add_ovly_node, - (void *)nldr_obj); - } - } - /* Do a fake reload of the base image to get overlay section info */ - if (!status && nldr_obj->ovly_nodes > 0) { - save_attrs.write = fake_ovly_write; - save_attrs.log_write = add_ovly_info; - save_attrs.log_write_handle = nldr_obj; - flags = DBLL_CODE | DBLL_DATA | DBLL_SYMB; - status = nldr_obj->ldr_fxns.load_fxn(nldr_obj->base_lib, flags, - &save_attrs, &ul_entry); - } - if (!status) { - *nldr = (struct nldr_object *)nldr_obj; - } else { - if (nldr_obj) - nldr_delete((struct nldr_object *)nldr_obj); - - *nldr = NULL; - } - /* FIXME:Temp. Fix. Must be removed */ - return status; -} - -/* - * ======== nldr_delete ======== - */ -void nldr_delete(struct nldr_object *nldr_obj) -{ - struct ovly_sect *ovly_section; - struct ovly_sect *next; - u16 i; - - nldr_obj->ldr_fxns.exit_fxn(); - if (nldr_obj->rmm) - rmm_delete(nldr_obj->rmm); - - kfree(nldr_obj->seg_table); - - if (nldr_obj->dcd_mgr) - dcd_destroy_manager(nldr_obj->dcd_mgr); - - /* Free overlay node information */ - if (nldr_obj->ovly_table) { - for (i = 0; i < nldr_obj->ovly_nodes; i++) { - ovly_section = - nldr_obj->ovly_table[i].create_sects_list; - while (ovly_section) { - next = ovly_section->next_sect; - kfree(ovly_section); - ovly_section = next; - } - ovly_section = - nldr_obj->ovly_table[i].delete_sects_list; - while (ovly_section) { - next = ovly_section->next_sect; - kfree(ovly_section); - ovly_section = next; - } - ovly_section = - nldr_obj->ovly_table[i].execute_sects_list; - while (ovly_section) { - next = ovly_section->next_sect; - kfree(ovly_section); - ovly_section = next; - } - ovly_section = nldr_obj->ovly_table[i].other_sects_list; - while (ovly_section) { - next = ovly_section->next_sect; - kfree(ovly_section); - ovly_section = next; - } - } - kfree(nldr_obj->ovly_table); - } - kfree(nldr_obj); -} - -/* - * ======== nldr_get_fxn_addr ======== - */ -int nldr_get_fxn_addr(struct nldr_nodeobject *nldr_node_obj, - char *str_fxn, u32 *addr) -{ - struct dbll_sym_val *dbll_sym; - struct nldr_object *nldr_obj; - int status = 0; - bool status1 = false; - s32 i = 0; - struct lib_node root = { NULL, 0, NULL }; - - nldr_obj = nldr_node_obj->nldr_obj; - /* Called from node_create(), node_delete(), or node_run(). */ - if (nldr_node_obj->dynamic && *nldr_node_obj->phase_split) { - switch (nldr_node_obj->phase) { - case NLDR_CREATE: - root = nldr_node_obj->create_lib; - break; - case NLDR_EXECUTE: - root = nldr_node_obj->execute_lib; - break; - case NLDR_DELETE: - root = nldr_node_obj->delete_lib; - break; - default: - break; - } - } else { - /* for Overlay nodes or non-split Dynamic nodes */ - root = nldr_node_obj->root; - } - status1 = - nldr_obj->ldr_fxns.get_c_addr_fxn(root.lib, str_fxn, &dbll_sym); - if (!status1) - status1 = - nldr_obj->ldr_fxns.get_addr_fxn(root.lib, str_fxn, - &dbll_sym); - - /* If symbol not found, check dependent libraries */ - if (!status1) { - for (i = 0; i < root.dep_libs; i++) { - status1 = - nldr_obj->ldr_fxns.get_addr_fxn(root.dep_libs_tree - [i].lib, str_fxn, - &dbll_sym); - if (!status1) { - status1 = - nldr_obj->ldr_fxns. - get_c_addr_fxn(root.dep_libs_tree[i].lib, - str_fxn, &dbll_sym); - } - if (status1) { - /* Symbol found */ - break; - } - } - } - /* Check persistent libraries */ - if (!status1) { - for (i = 0; i < nldr_node_obj->pers_libs; i++) { - status1 = - nldr_obj->ldr_fxns. - get_addr_fxn(nldr_node_obj->pers_lib_table[i].lib, - str_fxn, &dbll_sym); - if (!status1) { - status1 = - nldr_obj->ldr_fxns. - get_c_addr_fxn(nldr_node_obj->pers_lib_table - [i].lib, str_fxn, &dbll_sym); - } - if (status1) { - /* Symbol found */ - break; - } - } - } - - if (status1) - *addr = dbll_sym->value; - else - status = -ESPIPE; - - return status; -} - -/* - * ======== nldr_get_rmm_manager ======== - * Given a NLDR object, retrieve RMM Manager Handle - */ -int nldr_get_rmm_manager(struct nldr_object *nldr, - struct rmm_target_obj **rmm_mgr) -{ - int status = 0; - struct nldr_object *nldr_obj = nldr; - - if (nldr) { - *rmm_mgr = nldr_obj->rmm; - } else { - *rmm_mgr = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== nldr_load ======== - */ -int nldr_load(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase) -{ - struct nldr_object *nldr_obj; - struct dsp_uuid lib_uuid; - int status = 0; - - nldr_obj = nldr_node_obj->nldr_obj; - - if (nldr_node_obj->dynamic) { - nldr_node_obj->phase = phase; - - lib_uuid = nldr_node_obj->uuid; - - /* At this point, we may not know if node is split into - * different libraries. So we'll go ahead and load the - * library, and then save the pointer to the appropriate - * location after we know. */ - - status = - load_lib(nldr_node_obj, &nldr_node_obj->root, lib_uuid, - false, nldr_node_obj->lib_path, phase, 0); - - if (!status) { - if (*nldr_node_obj->phase_split) { - switch (phase) { - case NLDR_CREATE: - nldr_node_obj->create_lib = - nldr_node_obj->root; - break; - - case NLDR_EXECUTE: - nldr_node_obj->execute_lib = - nldr_node_obj->root; - break; - - case NLDR_DELETE: - nldr_node_obj->delete_lib = - nldr_node_obj->root; - break; - - default: - break; - } - } - } - } else { - if (nldr_node_obj->overlay) - status = load_ovly(nldr_node_obj, phase); - - } - - return status; -} - -/* - * ======== nldr_unload ======== - */ -int nldr_unload(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase) -{ - int status = 0; - struct lib_node *root_lib = NULL; - s32 i = 0; - - if (nldr_node_obj != NULL) { - if (nldr_node_obj->dynamic) { - if (*nldr_node_obj->phase_split) { - switch (phase) { - case NLDR_CREATE: - root_lib = &nldr_node_obj->create_lib; - break; - case NLDR_EXECUTE: - root_lib = &nldr_node_obj->execute_lib; - break; - case NLDR_DELETE: - root_lib = &nldr_node_obj->delete_lib; - /* Unload persistent libraries */ - for (i = 0; - i < nldr_node_obj->pers_libs; - i++) { - unload_lib(nldr_node_obj, - &nldr_node_obj-> - pers_lib_table[i]); - } - nldr_node_obj->pers_libs = 0; - break; - default: - break; - } - } else { - /* Unload main library */ - root_lib = &nldr_node_obj->root; - } - if (root_lib) - unload_lib(nldr_node_obj, root_lib); - } else { - if (nldr_node_obj->overlay) - unload_ovly(nldr_node_obj, phase); - - } - } - return status; -} - -/* - * ======== add_ovly_info ======== - */ -static int add_ovly_info(void *handle, struct dbll_sect_info *sect_info, - u32 addr, u32 bytes) -{ - char *node_name; - char *sect_name = (char *)sect_info->name; - bool sect_exists = false; - char seps = ':'; - char *pch; - u16 i; - struct nldr_object *nldr_obj = (struct nldr_object *)handle; - int status = 0; - - /* Is this an overlay section (load address != run address)? */ - if (sect_info->sect_load_addr == sect_info->sect_run_addr) - goto func_end; - - /* Find the node it belongs to */ - for (i = 0; i < nldr_obj->ovly_nodes; i++) { - node_name = nldr_obj->ovly_table[i].node_name; - if (strncmp(node_name, sect_name + 1, strlen(node_name)) == 0) { - /* Found the node */ - break; - } - } - if (!(i < nldr_obj->ovly_nodes)) - goto func_end; - - /* Determine which phase this section belongs to */ - for (pch = sect_name + 1; *pch && *pch != seps; pch++) - ; - - if (*pch) { - pch++; /* Skip over the ':' */ - if (strncmp(pch, PCREATE, strlen(PCREATE)) == 0) { - status = - add_ovly_sect(nldr_obj, - &nldr_obj-> - ovly_table[i].create_sects_list, - sect_info, §_exists, addr, bytes); - if (!status && !sect_exists) - nldr_obj->ovly_table[i].create_sects++; - - } else if (strncmp(pch, PDELETE, strlen(PDELETE)) == 0) { - status = - add_ovly_sect(nldr_obj, - &nldr_obj-> - ovly_table[i].delete_sects_list, - sect_info, §_exists, addr, bytes); - if (!status && !sect_exists) - nldr_obj->ovly_table[i].delete_sects++; - - } else if (strncmp(pch, PEXECUTE, strlen(PEXECUTE)) == 0) { - status = - add_ovly_sect(nldr_obj, - &nldr_obj-> - ovly_table[i].execute_sects_list, - sect_info, §_exists, addr, bytes); - if (!status && !sect_exists) - nldr_obj->ovly_table[i].execute_sects++; - - } else { - /* Put in "other" sections */ - status = - add_ovly_sect(nldr_obj, - &nldr_obj-> - ovly_table[i].other_sects_list, - sect_info, §_exists, addr, bytes); - if (!status && !sect_exists) - nldr_obj->ovly_table[i].other_sects++; - - } - } -func_end: - return status; -} - -/* - * ======== add_ovly_node ========= - * Callback function passed to dcd_get_objects. - */ -static int add_ovly_node(struct dsp_uuid *uuid_obj, - enum dsp_dcdobjtype obj_type, void *handle) -{ - struct nldr_object *nldr_obj = (struct nldr_object *)handle; - char *node_name = NULL; - char *pbuf = NULL; - u32 len; - struct dcd_genericobj obj_def; - int status = 0; - - if (obj_type != DSP_DCDNODETYPE) - goto func_end; - - status = - dcd_get_object_def(nldr_obj->dcd_mgr, uuid_obj, obj_type, - &obj_def); - if (status) - goto func_end; - - /* If overlay node, add to the list */ - if (obj_def.obj_data.node_obj.load_type == NLDR_OVLYLOAD) { - if (nldr_obj->ovly_table == NULL) { - nldr_obj->ovly_nodes++; - } else { - /* Add node to table */ - nldr_obj->ovly_table[nldr_obj->ovly_nid].uuid = - *uuid_obj; - len = - strlen(obj_def.obj_data.node_obj.ndb_props.ac_name); - node_name = obj_def.obj_data.node_obj.ndb_props.ac_name; - pbuf = kzalloc(len + 1, GFP_KERNEL); - if (pbuf == NULL) { - status = -ENOMEM; - } else { - strncpy(pbuf, node_name, len); - nldr_obj->ovly_table[nldr_obj->ovly_nid]. - node_name = pbuf; - nldr_obj->ovly_nid++; - } - } - } - /* These were allocated in dcd_get_object_def */ - kfree(obj_def.obj_data.node_obj.str_create_phase_fxn); - - kfree(obj_def.obj_data.node_obj.str_execute_phase_fxn); - - kfree(obj_def.obj_data.node_obj.str_delete_phase_fxn); - - kfree(obj_def.obj_data.node_obj.str_i_alg_name); - -func_end: - return status; -} - -/* - * ======== add_ovly_sect ======== - */ -static int add_ovly_sect(struct nldr_object *nldr_obj, - struct ovly_sect **lst, - struct dbll_sect_info *sect_inf, - bool *exists, u32 addr, u32 bytes) -{ - struct ovly_sect *new_sect = NULL; - struct ovly_sect *last_sect; - struct ovly_sect *ovly_section; - int status = 0; - - ovly_section = last_sect = *lst; - *exists = false; - while (ovly_section) { - /* - * Make sure section has not already been added. Multiple - * 'write' calls may be made to load the section. - */ - if (ovly_section->sect_load_addr == addr) { - /* Already added */ - *exists = true; - break; - } - last_sect = ovly_section; - ovly_section = ovly_section->next_sect; - } - - if (!ovly_section) { - /* New section */ - new_sect = kzalloc(sizeof(struct ovly_sect), GFP_KERNEL); - if (new_sect == NULL) { - status = -ENOMEM; - } else { - new_sect->sect_load_addr = addr; - new_sect->sect_run_addr = sect_inf->sect_run_addr + - (addr - sect_inf->sect_load_addr); - new_sect->size = bytes; - new_sect->page = sect_inf->type; - } - - /* Add to the list */ - if (!status) { - if (*lst == NULL) { - /* First in the list */ - *lst = new_sect; - } else { - last_sect->next_sect = new_sect; - } - } - } - - return status; -} - -/* - * ======== fake_ovly_write ======== - */ -static s32 fake_ovly_write(void *handle, u32 dsp_address, void *buf, u32 bytes, - s32 mtype) -{ - return (s32) bytes; -} - -/* - * ======== free_sects ======== - */ -static void free_sects(struct nldr_object *nldr_obj, - struct ovly_sect *phase_sects, u16 alloc_num) -{ - struct ovly_sect *ovly_section = phase_sects; - u16 i = 0; - bool ret; - - while (ovly_section && i < alloc_num) { - /* 'Deallocate' */ - /* segid - page not supported yet */ - /* Reserved memory */ - ret = - rmm_free(nldr_obj->rmm, 0, ovly_section->sect_run_addr, - ovly_section->size, true); - ovly_section = ovly_section->next_sect; - i++; - } -} - -/* - * ======== get_symbol_value ======== - * Find symbol in library's base image. If not there, check dependent - * libraries. - */ -static bool get_symbol_value(void *handle, void *parg, void *rmm_handle, - char *sym_name, struct dbll_sym_val **sym) -{ - struct nldr_object *nldr_obj = (struct nldr_object *)handle; - struct nldr_nodeobject *nldr_node_obj = - (struct nldr_nodeobject *)rmm_handle; - struct lib_node *root = (struct lib_node *)parg; - u16 i; - bool status = false; - - /* check the base image */ - status = nldr_obj->ldr_fxns.get_addr_fxn(nldr_obj->base_lib, - sym_name, sym); - if (!status) - status = - nldr_obj->ldr_fxns.get_c_addr_fxn(nldr_obj->base_lib, - sym_name, sym); - - /* - * Check in root lib itself. If the library consists of - * multiple object files linked together, some symbols in the - * library may need to be resolved. - */ - if (!status) { - status = nldr_obj->ldr_fxns.get_addr_fxn(root->lib, sym_name, - sym); - if (!status) { - status = - nldr_obj->ldr_fxns.get_c_addr_fxn(root->lib, - sym_name, sym); - } - } - - /* - * Check in root lib's dependent libraries, but not dependent - * libraries' dependents. - */ - if (!status) { - for (i = 0; i < root->dep_libs; i++) { - status = - nldr_obj->ldr_fxns.get_addr_fxn(root-> - dep_libs_tree - [i].lib, - sym_name, sym); - if (!status) { - status = - nldr_obj->ldr_fxns. - get_c_addr_fxn(root->dep_libs_tree[i].lib, - sym_name, sym); - } - if (status) { - /* Symbol found */ - break; - } - } - } - /* - * Check in persistent libraries - */ - if (!status) { - for (i = 0; i < nldr_node_obj->pers_libs; i++) { - status = - nldr_obj->ldr_fxns. - get_addr_fxn(nldr_node_obj->pers_lib_table[i].lib, - sym_name, sym); - if (!status) { - status = nldr_obj->ldr_fxns.get_c_addr_fxn - (nldr_node_obj->pers_lib_table[i].lib, - sym_name, sym); - } - if (status) { - /* Symbol found */ - break; - } - } - } - - return status; -} - -/* - * ======== load_lib ======== - * Recursively load library and all its dependent libraries. The library - * we're loading is specified by a uuid. - */ -static int load_lib(struct nldr_nodeobject *nldr_node_obj, - struct lib_node *root, struct dsp_uuid uuid, - bool root_prstnt, - struct dbll_library_obj **lib_path, - enum nldr_phase phase, u16 depth) -{ - struct nldr_object *nldr_obj = nldr_node_obj->nldr_obj; - u16 nd_libs = 0; /* Number of dependent libraries */ - u16 np_libs = 0; /* Number of persistent libraries */ - u16 nd_libs_loaded = 0; /* Number of dep. libraries loaded */ - u16 i; - u32 entry; - u32 dw_buf_size = NLDR_MAXPATHLENGTH; - dbll_flags flags = DBLL_SYMB | DBLL_CODE | DBLL_DATA | DBLL_DYNAMIC; - struct dbll_attrs new_attrs; - char *psz_file_name = NULL; - struct dsp_uuid *dep_lib_uui_ds = NULL; - bool *persistent_dep_libs = NULL; - int status = 0; - bool lib_status = false; - struct lib_node *dep_lib; - - if (depth > MAXDEPTH) { - /* Error */ - } - root->lib = NULL; - /* Allocate a buffer for library file name of size DBL_MAXPATHLENGTH */ - psz_file_name = kzalloc(DBLL_MAXPATHLENGTH, GFP_KERNEL); - if (psz_file_name == NULL) - status = -ENOMEM; - - if (!status) { - /* Get the name of the library */ - if (depth == 0) { - status = - dcd_get_library_name(nldr_node_obj->nldr_obj-> - dcd_mgr, &uuid, psz_file_name, - &dw_buf_size, phase, - nldr_node_obj->phase_split); - } else { - /* Dependent libraries are registered with a phase */ - status = - dcd_get_library_name(nldr_node_obj->nldr_obj-> - dcd_mgr, &uuid, psz_file_name, - &dw_buf_size, NLDR_NOPHASE, - NULL); - } - } - if (!status) { - /* Open the library, don't load symbols */ - status = - nldr_obj->ldr_fxns.open_fxn(nldr_obj->dbll, psz_file_name, - DBLL_NOLOAD, &root->lib); - } - /* Done with file name */ - kfree(psz_file_name); - - /* Check to see if library not already loaded */ - if (!status && root_prstnt) { - lib_status = - find_in_persistent_lib_array(nldr_node_obj, root->lib); - /* Close library */ - if (lib_status) { - nldr_obj->ldr_fxns.close_fxn(root->lib); - return 0; - } - } - if (!status) { - /* Check for circular dependencies. */ - for (i = 0; i < depth; i++) { - if (root->lib == lib_path[i]) { - /* This condition could be checked by a - * tool at build time. */ - status = -EILSEQ; - } - } - } - if (!status) { - /* Add library to current path in dependency tree */ - lib_path[depth] = root->lib; - depth++; - /* Get number of dependent libraries */ - status = - dcd_get_num_dep_libs(nldr_node_obj->nldr_obj->dcd_mgr, - &uuid, &nd_libs, &np_libs, phase); - } - if (!status) { - if (!(*nldr_node_obj->phase_split)) - np_libs = 0; - - /* nd_libs = #of dependent libraries */ - root->dep_libs = nd_libs - np_libs; - if (nd_libs > 0) { - dep_lib_uui_ds = kzalloc(sizeof(struct dsp_uuid) * - nd_libs, GFP_KERNEL); - persistent_dep_libs = - kzalloc(sizeof(bool) * nd_libs, GFP_KERNEL); - if (!dep_lib_uui_ds || !persistent_dep_libs) - status = -ENOMEM; - - if (root->dep_libs > 0) { - /* Allocate arrays for dependent lib UUIDs, - * lib nodes */ - root->dep_libs_tree = kzalloc - (sizeof(struct lib_node) * - (root->dep_libs), GFP_KERNEL); - if (!(root->dep_libs_tree)) - status = -ENOMEM; - - } - - if (!status) { - /* Get the dependent library UUIDs */ - status = - dcd_get_dep_libs(nldr_node_obj-> - nldr_obj->dcd_mgr, &uuid, - nd_libs, dep_lib_uui_ds, - persistent_dep_libs, - phase); - } - } - } - - /* - * Recursively load dependent libraries. - */ - if (!status) { - for (i = 0; i < nd_libs; i++) { - /* If root library is NOT persistent, and dep library - * is, then record it. If root library IS persistent, - * the deplib is already included */ - if (!root_prstnt && persistent_dep_libs[i] && - *nldr_node_obj->phase_split) { - if ((nldr_node_obj->pers_libs) >= MAXLIBS) { - status = -EILSEQ; - break; - } - - /* Allocate library outside of phase */ - dep_lib = - &nldr_node_obj->pers_lib_table - [nldr_node_obj->pers_libs]; - } else { - if (root_prstnt) - persistent_dep_libs[i] = true; - - /* Allocate library within phase */ - dep_lib = &root->dep_libs_tree[nd_libs_loaded]; - } - - status = load_lib(nldr_node_obj, dep_lib, - dep_lib_uui_ds[i], - persistent_dep_libs[i], lib_path, - phase, depth); - - if (!status) { - if ((status != 0) && - !root_prstnt && persistent_dep_libs[i] && - *nldr_node_obj->phase_split) { - (nldr_node_obj->pers_libs)++; - } else { - if (!persistent_dep_libs[i] || - !(*nldr_node_obj->phase_split)) { - nd_libs_loaded++; - } - } - } else { - break; - } - } - } - - /* Now we can load the root library */ - if (!status) { - new_attrs = nldr_obj->ldr_attrs; - new_attrs.sym_arg = root; - new_attrs.rmm_handle = nldr_node_obj; - new_attrs.input_params = nldr_node_obj->priv_ref; - new_attrs.base_image = false; - - status = - nldr_obj->ldr_fxns.load_fxn(root->lib, flags, &new_attrs, - &entry); - } - - /* - * In case of failure, unload any dependent libraries that - * were loaded, and close the root library. - * (Persistent libraries are unloaded from the very top) - */ - if (status) { - if (phase != NLDR_EXECUTE) { - for (i = 0; i < nldr_node_obj->pers_libs; i++) - unload_lib(nldr_node_obj, - &nldr_node_obj->pers_lib_table[i]); - - nldr_node_obj->pers_libs = 0; - } - for (i = 0; i < nd_libs_loaded; i++) - unload_lib(nldr_node_obj, &root->dep_libs_tree[i]); - - if (root->lib) - nldr_obj->ldr_fxns.close_fxn(root->lib); - - } - - /* Going up one node in the dependency tree */ - depth--; - - kfree(dep_lib_uui_ds); - dep_lib_uui_ds = NULL; - - kfree(persistent_dep_libs); - persistent_dep_libs = NULL; - - return status; -} - -/* - * ======== load_ovly ======== - */ -static int load_ovly(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase) -{ - struct nldr_object *nldr_obj = nldr_node_obj->nldr_obj; - struct ovly_node *po_node = NULL; - struct ovly_sect *phase_sects = NULL; - struct ovly_sect *other_sects_list = NULL; - u16 i; - u16 alloc_num = 0; - u16 other_alloc = 0; - u16 *ref_count = NULL; - u16 *other_ref = NULL; - u32 bytes; - struct ovly_sect *ovly_section; - int status = 0; - - /* Find the node in the table */ - for (i = 0; i < nldr_obj->ovly_nodes; i++) { - if (is_equal_uuid - (&nldr_node_obj->uuid, &nldr_obj->ovly_table[i].uuid)) { - /* Found it */ - po_node = &(nldr_obj->ovly_table[i]); - break; - } - } - - - if (!po_node) { - status = -ENOENT; - goto func_end; - } - - switch (phase) { - case NLDR_CREATE: - ref_count = &(po_node->create_ref); - other_ref = &(po_node->other_ref); - phase_sects = po_node->create_sects_list; - other_sects_list = po_node->other_sects_list; - break; - - case NLDR_EXECUTE: - ref_count = &(po_node->execute_ref); - phase_sects = po_node->execute_sects_list; - break; - - case NLDR_DELETE: - ref_count = &(po_node->delete_ref); - phase_sects = po_node->delete_sects_list; - break; - - default: - break; - } - - if (ref_count == NULL) - goto func_end; - - if (*ref_count != 0) - goto func_end; - - /* 'Allocate' memory for overlay sections of this phase */ - ovly_section = phase_sects; - while (ovly_section) { - /* allocate *//* page not supported yet */ - /* reserve *//* align */ - status = rmm_alloc(nldr_obj->rmm, 0, ovly_section->size, 0, - &(ovly_section->sect_run_addr), true); - if (!status) { - ovly_section = ovly_section->next_sect; - alloc_num++; - } else { - break; - } - } - if (other_ref && *other_ref == 0) { - /* 'Allocate' memory for other overlay sections - * (create phase) */ - if (!status) { - ovly_section = other_sects_list; - while (ovly_section) { - /* page not supported *//* align */ - /* reserve */ - status = - rmm_alloc(nldr_obj->rmm, 0, - ovly_section->size, 0, - &(ovly_section->sect_run_addr), - true); - if (!status) { - ovly_section = ovly_section->next_sect; - other_alloc++; - } else { - break; - } - } - } - } - if (*ref_count == 0) { - if (!status) { - /* Load sections for this phase */ - ovly_section = phase_sects; - while (ovly_section && !status) { - bytes = - (*nldr_obj->ovly_fxn) (nldr_node_obj-> - priv_ref, - ovly_section-> - sect_run_addr, - ovly_section-> - sect_load_addr, - ovly_section->size, - ovly_section->page); - if (bytes != ovly_section->size) - status = -EPERM; - - ovly_section = ovly_section->next_sect; - } - } - } - if (other_ref && *other_ref == 0) { - if (!status) { - /* Load other sections (create phase) */ - ovly_section = other_sects_list; - while (ovly_section && !status) { - bytes = - (*nldr_obj->ovly_fxn) (nldr_node_obj-> - priv_ref, - ovly_section-> - sect_run_addr, - ovly_section-> - sect_load_addr, - ovly_section->size, - ovly_section->page); - if (bytes != ovly_section->size) - status = -EPERM; - - ovly_section = ovly_section->next_sect; - } - } - } - if (status) { - /* 'Deallocate' memory */ - free_sects(nldr_obj, phase_sects, alloc_num); - free_sects(nldr_obj, other_sects_list, other_alloc); - } -func_end: - if (!status && (ref_count != NULL)) { - *ref_count += 1; - if (other_ref) - *other_ref += 1; - - } - - return status; -} - -/* - * ======== remote_alloc ======== - */ -static int remote_alloc(void **ref, u16 mem_sect, u32 size, - u32 align, u32 *dsp_address, - s32 segmnt_id, s32 req, - bool reserve) -{ - struct nldr_nodeobject *hnode = (struct nldr_nodeobject *)ref; - struct nldr_object *nldr_obj; - struct rmm_target_obj *rmm; - u16 mem_phase_bit = MAXFLAGS; - u16 segid = 0; - u16 i; - u16 mem_sect_type; - u32 word_size; - struct rmm_addr *rmm_addr_obj = (struct rmm_addr *)dsp_address; - bool mem_load_req = false; - int status = -ENOMEM; /* Set to fail */ - - nldr_obj = hnode->nldr_obj; - rmm = nldr_obj->rmm; - /* Convert size to DSP words */ - word_size = - (size + nldr_obj->dsp_word_size - - 1) / nldr_obj->dsp_word_size; - /* Modify memory 'align' to account for DSP cache line size */ - align = lcm(GEM_CACHE_LINE_SIZE, align); - dev_dbg(bridge, "%s: memory align to 0x%x\n", __func__, align); - if (segmnt_id != -1) { - rmm_addr_obj->segid = segmnt_id; - segid = segmnt_id; - mem_load_req = req; - } else { - switch (hnode->phase) { - case NLDR_CREATE: - mem_phase_bit = CREATEDATAFLAGBIT; - break; - case NLDR_DELETE: - mem_phase_bit = DELETEDATAFLAGBIT; - break; - case NLDR_EXECUTE: - mem_phase_bit = EXECUTEDATAFLAGBIT; - break; - default: - break; - } - if (mem_sect == DBLL_CODE) - mem_phase_bit++; - - if (mem_phase_bit < MAXFLAGS) - segid = hnode->seg_id[mem_phase_bit]; - - /* Determine if there is a memory loading requirement */ - if ((hnode->code_data_flag_mask >> mem_phase_bit) & 0x1) - mem_load_req = true; - - } - mem_sect_type = (mem_sect == DBLL_CODE) ? DYNM_CODE : DYNM_DATA; - - /* Find an appropriate segment based on mem_sect */ - if (segid == NULLID) { - /* No memory requirements of preferences */ - goto func_cont; - } - if (segid <= MAXSEGID) { - /* Attempt to allocate from segid first. */ - rmm_addr_obj->segid = segid; - status = - rmm_alloc(rmm, segid, word_size, align, dsp_address, false); - if (status) { - dev_dbg(bridge, "%s: Unable allocate from segment %d\n", - __func__, segid); - } - } else { - /* segid > MAXSEGID ==> Internal or external memory */ - /* Check for any internal or external memory segment, - * depending on segid. */ - mem_sect_type |= segid == MEMINTERNALID ? - DYNM_INTERNAL : DYNM_EXTERNAL; - for (i = 0; i < nldr_obj->dload_segs; i++) { - if ((nldr_obj->seg_table[i] & mem_sect_type) != - mem_sect_type) - continue; - - status = rmm_alloc(rmm, i, word_size, align, - dsp_address, false); - if (!status) { - /* Save segid for freeing later */ - rmm_addr_obj->segid = i; - break; - } - } - } -func_cont: - /* Haven't found memory yet, attempt to find any segment that works */ - if (status == -ENOMEM && !mem_load_req) { - dev_dbg(bridge, "%s: Preferred segment unavailable, trying " - "another\n", __func__); - for (i = 0; i < nldr_obj->dload_segs; i++) { - /* All bits of mem_sect_type must be set */ - if ((nldr_obj->seg_table[i] & mem_sect_type) != - mem_sect_type) - continue; - - status = rmm_alloc(rmm, i, word_size, align, - dsp_address, false); - if (!status) { - /* Save segid */ - rmm_addr_obj->segid = i; - break; - } - } - } - - return status; -} - -static int remote_free(void **ref, u16 space, u32 dsp_address, - u32 size, bool reserve) -{ - struct nldr_object *nldr_obj = (struct nldr_object *)ref; - struct rmm_target_obj *rmm; - u32 word_size; - int status = -ENOMEM; /* Set to fail */ - - rmm = nldr_obj->rmm; - - /* Convert size to DSP words */ - word_size = - (size + nldr_obj->dsp_word_size - - 1) / nldr_obj->dsp_word_size; - - if (rmm_free(rmm, space, dsp_address, word_size, reserve)) - status = 0; - - return status; -} - -/* - * ======== unload_lib ======== - */ -static void unload_lib(struct nldr_nodeobject *nldr_node_obj, - struct lib_node *root) -{ - struct dbll_attrs new_attrs; - struct nldr_object *nldr_obj = nldr_node_obj->nldr_obj; - u16 i; - - - /* Unload dependent libraries */ - for (i = 0; i < root->dep_libs; i++) - unload_lib(nldr_node_obj, &root->dep_libs_tree[i]); - - root->dep_libs = 0; - - new_attrs = nldr_obj->ldr_attrs; - new_attrs.rmm_handle = nldr_obj->rmm; - new_attrs.input_params = nldr_node_obj->priv_ref; - new_attrs.base_image = false; - new_attrs.sym_arg = root; - - if (root->lib) { - /* Unload the root library */ - nldr_obj->ldr_fxns.unload_fxn(root->lib, &new_attrs); - nldr_obj->ldr_fxns.close_fxn(root->lib); - } - - /* Free dependent library list */ - kfree(root->dep_libs_tree); - root->dep_libs_tree = NULL; -} - -/* - * ======== unload_ovly ======== - */ -static void unload_ovly(struct nldr_nodeobject *nldr_node_obj, - enum nldr_phase phase) -{ - struct nldr_object *nldr_obj = nldr_node_obj->nldr_obj; - struct ovly_node *po_node = NULL; - struct ovly_sect *phase_sects = NULL; - struct ovly_sect *other_sects_list = NULL; - u16 i; - u16 alloc_num = 0; - u16 other_alloc = 0; - u16 *ref_count = NULL; - u16 *other_ref = NULL; - - /* Find the node in the table */ - for (i = 0; i < nldr_obj->ovly_nodes; i++) { - if (is_equal_uuid - (&nldr_node_obj->uuid, &nldr_obj->ovly_table[i].uuid)) { - /* Found it */ - po_node = &(nldr_obj->ovly_table[i]); - break; - } - } - - - if (!po_node) - /* TODO: Should we print warning here? */ - return; - - switch (phase) { - case NLDR_CREATE: - ref_count = &(po_node->create_ref); - phase_sects = po_node->create_sects_list; - alloc_num = po_node->create_sects; - break; - case NLDR_EXECUTE: - ref_count = &(po_node->execute_ref); - phase_sects = po_node->execute_sects_list; - alloc_num = po_node->execute_sects; - break; - case NLDR_DELETE: - ref_count = &(po_node->delete_ref); - other_ref = &(po_node->other_ref); - phase_sects = po_node->delete_sects_list; - /* 'Other' overlay sections are unloaded in the delete phase */ - other_sects_list = po_node->other_sects_list; - alloc_num = po_node->delete_sects; - other_alloc = po_node->other_sects; - break; - default: - break; - } - if (ref_count && (*ref_count > 0)) { - *ref_count -= 1; - if (other_ref) - *other_ref -= 1; - } - - if (ref_count && *ref_count == 0) { - /* 'Deallocate' memory */ - free_sects(nldr_obj, phase_sects, alloc_num); - } - if (other_ref && *other_ref == 0) - free_sects(nldr_obj, other_sects_list, other_alloc); -} - -/* - * ======== find_in_persistent_lib_array ======== - */ -static bool find_in_persistent_lib_array(struct nldr_nodeobject *nldr_node_obj, - struct dbll_library_obj *lib) -{ - s32 i = 0; - - for (i = 0; i < nldr_node_obj->pers_libs; i++) { - if (lib == nldr_node_obj->pers_lib_table[i].lib) - return true; - - } - - return false; -} - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/** - * nldr_find_addr() - Find the closest symbol to the given address based on - * dynamic node object. - * - * @nldr_node: Dynamic node object - * @sym_addr: Given address to find the dsp symbol - * @offset_range: offset range to look for dsp symbol - * @offset_output: Symbol Output address - * @sym_name: String with the dsp symbol - * - * This function finds the node library for a given address and - * retrieves the dsp symbol by calling dbll_find_dsp_symbol. - */ -int nldr_find_addr(struct nldr_nodeobject *nldr_node, u32 sym_addr, - u32 offset_range, void *offset_output, char *sym_name) -{ - int status = 0; - bool status1 = false; - s32 i = 0; - struct lib_node root = { NULL, 0, NULL }; - - if (nldr_node->dynamic && *nldr_node->phase_split) { - switch (nldr_node->phase) { - case NLDR_CREATE: - root = nldr_node->create_lib; - break; - case NLDR_EXECUTE: - root = nldr_node->execute_lib; - break; - case NLDR_DELETE: - root = nldr_node->delete_lib; - break; - default: - break; - } - } else { - /* for Overlay nodes or non-split Dynamic nodes */ - root = nldr_node->root; - } - - status1 = dbll_find_dsp_symbol(root.lib, sym_addr, - offset_range, offset_output, sym_name); - - /* If symbol not found, check dependent libraries */ - if (!status1) - for (i = 0; i < root.dep_libs; i++) { - status1 = dbll_find_dsp_symbol( - root.dep_libs_tree[i].lib, sym_addr, - offset_range, offset_output, sym_name); - if (status1) - /* Symbol found */ - break; - } - /* Check persistent libraries */ - if (!status1) - for (i = 0; i < nldr_node->pers_libs; i++) { - status1 = dbll_find_dsp_symbol( - nldr_node->pers_lib_table[i].lib, sym_addr, - offset_range, offset_output, sym_name); - if (status1) - /* Symbol found */ - break; - } - - if (!status1) { - pr_debug("%s: Address 0x%x not found in range %d.\n", - __func__, sym_addr, offset_range); - status = -ESPIPE; - } else { - pr_debug("%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n", - __func__, (u32) nldr_node, sym_addr, offset_range, - (u32) offset_output, sym_name); - } - - return status; -} -#endif diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c deleted file mode 100644 index 133f2dbc3762..000000000000 --- a/drivers/staging/tidspbridge/rmgr/node.c +++ /dev/null @@ -1,3031 +0,0 @@ -/* - * node.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Node Manager. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include -#include -#include -#include -#include - -/* ----------------------------------- Platform Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Resource Manager */ -#include -#include -#include - -/* ----------------------------------- Link Driver */ -#include -#include - -/* ----------------------------------- Others */ -#include - -/* ----------------------------------- This */ -#include -#include -#include - -/* Static/Dynamic Loader includes */ -#include -#include - -#include -#include -#include <_tiomap.h> - -#include - -#define HOSTPREFIX "/host" -#define PIPEPREFIX "/dbpipe" - -#define MAX_INPUTS(h) \ - ((h)->dcd_props.obj_data.node_obj.ndb_props.num_input_streams) -#define MAX_OUTPUTS(h) \ - ((h)->dcd_props.obj_data.node_obj.ndb_props.num_output_streams) - -#define NODE_GET_PRIORITY(h) ((h)->prio) -#define NODE_SET_PRIORITY(hnode, prio) ((hnode)->prio = prio) -#define NODE_SET_STATE(hnode, state) ((hnode)->node_state = state) - -#define MAXPIPES 100 /* Max # of /pipe connections (CSL limit) */ -#define MAXDEVSUFFIXLEN 2 /* Max(Log base 10 of MAXPIPES, MAXSTREAMS) */ - -#define PIPENAMELEN (sizeof(PIPEPREFIX) + MAXDEVSUFFIXLEN) -#define HOSTNAMELEN (sizeof(HOSTPREFIX) + MAXDEVSUFFIXLEN) - -#define MAXDEVNAMELEN 32 /* dsp_ndbprops.ac_name size */ -#define CREATEPHASE 1 -#define EXECUTEPHASE 2 -#define DELETEPHASE 3 - -/* Define default STRM parameters */ -/* - * TBD: Put in header file, make global DSP_STRMATTRS with defaults, - * or make defaults configurable. - */ -#define DEFAULTBUFSIZE 32 -#define DEFAULTNBUFS 2 -#define DEFAULTSEGID 0 -#define DEFAULTALIGNMENT 0 -#define DEFAULTTIMEOUT 10000 - -#define RMSQUERYSERVER 0 -#define RMSCONFIGURESERVER 1 -#define RMSCREATENODE 2 -#define RMSEXECUTENODE 3 -#define RMSDELETENODE 4 -#define RMSCHANGENODEPRIORITY 5 -#define RMSREADMEMORY 6 -#define RMSWRITEMEMORY 7 -#define RMSCOPY 8 -#define MAXTIMEOUT 2000 - -#define NUMRMSFXNS 9 - -#define PWR_TIMEOUT 500 /* default PWR timeout in msec */ - -#define STACKSEGLABEL "L1DSRAM_HEAP" /* Label for DSP Stack Segment Addr */ - -/* - * ======== node_mgr ======== - */ -struct node_mgr { - struct dev_object *dev_obj; /* Device object */ - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - struct dcd_manager *dcd_mgr; /* Proc/Node data manager */ - struct disp_object *disp_obj; /* Node dispatcher */ - struct list_head node_list; /* List of all allocated nodes */ - u32 num_nodes; /* Number of nodes in node_list */ - u32 num_created; /* Number of nodes *created* on DSP */ - DECLARE_BITMAP(pipe_map, MAXPIPES); /* Pipe connection bitmap */ - DECLARE_BITMAP(pipe_done_map, MAXPIPES); /* Pipes that are half free */ - /* Channel allocation bitmap */ - DECLARE_BITMAP(chnl_map, CHNL_MAXCHANNELS); - /* DMA Channel allocation bitmap */ - DECLARE_BITMAP(dma_chnl_map, CHNL_MAXCHANNELS); - /* Zero-Copy Channel alloc bitmap */ - DECLARE_BITMAP(zc_chnl_map, CHNL_MAXCHANNELS); - struct ntfy_object *ntfy_obj; /* Manages registered notifications */ - struct mutex node_mgr_lock; /* For critical sections */ - u32 fxn_addrs[NUMRMSFXNS]; /* RMS function addresses */ - struct msg_mgr *msg_mgr_obj; - - /* Processor properties needed by Node Dispatcher */ - u32 num_chnls; /* Total number of channels */ - u32 chnl_offset; /* Offset of chnl ids rsvd for RMS */ - u32 chnl_buf_size; /* Buffer size for data to RMS */ - int proc_family; /* eg, 5000 */ - int proc_type; /* eg, 5510 */ - u32 dsp_word_size; /* Size of DSP word on host bytes */ - u32 dsp_data_mau_size; /* Size of DSP data MAU */ - u32 dsp_mau_size; /* Size of MAU */ - s32 min_pri; /* Minimum runtime priority for node */ - s32 max_pri; /* Maximum runtime priority for node */ - - struct strm_mgr *strm_mgr_obj; /* STRM manager */ - - /* Loader properties */ - struct nldr_object *nldr_obj; /* Handle to loader */ - struct node_ldr_fxns nldr_fxns; /* Handle to loader functions */ -}; - -/* - * ======== connecttype ======== - */ -enum connecttype { - NOTCONNECTED = 0, - NODECONNECT, - HOSTCONNECT, - DEVICECONNECT, -}; - -/* - * ======== stream_chnl ======== - */ -struct stream_chnl { - enum connecttype type; /* Type of stream connection */ - u32 dev_id; /* pipe or channel id */ -}; - -/* - * ======== node_object ======== - */ -struct node_object { - struct list_head list_elem; - struct node_mgr *node_mgr; /* The manager of this node */ - struct proc_object *processor; /* Back pointer to processor */ - struct dsp_uuid node_uuid; /* Node's ID */ - s32 prio; /* Node's current priority */ - u32 timeout; /* Timeout for blocking NODE calls */ - u32 heap_size; /* Heap Size */ - u32 dsp_heap_virt_addr; /* Heap Size */ - u32 gpp_heap_virt_addr; /* Heap Size */ - enum node_type ntype; /* Type of node: message, task, etc */ - enum node_state node_state; /* NODE_ALLOCATED, NODE_CREATED, ... */ - u32 num_inputs; /* Current number of inputs */ - u32 num_outputs; /* Current number of outputs */ - u32 max_input_index; /* Current max input stream index */ - u32 max_output_index; /* Current max output stream index */ - struct stream_chnl *inputs; /* Node's input streams */ - struct stream_chnl *outputs; /* Node's output streams */ - struct node_createargs create_args; /* Args for node create func */ - nodeenv node_env; /* Environment returned by RMS */ - struct dcd_genericobj dcd_props; /* Node properties from DCD */ - struct dsp_cbdata *args; /* Optional args to pass to node */ - struct ntfy_object *ntfy_obj; /* Manages registered notifications */ - char *str_dev_name; /* device name, if device node */ - struct sync_object *sync_done; /* Synchronize node_terminate */ - s32 exit_status; /* execute function return status */ - - /* Information needed for node_get_attr() */ - void *device_owner; /* If dev node, task that owns it */ - u32 num_gpp_inputs; /* Current # of from GPP streams */ - u32 num_gpp_outputs; /* Current # of to GPP streams */ - /* Current stream connections */ - struct dsp_streamconnect *stream_connect; - - /* Message queue */ - struct msg_queue *msg_queue_obj; - - /* These fields used for SM messaging */ - struct cmm_xlatorobject *xlator; /* Node's SM addr translator */ - - /* Handle to pass to dynamic loader */ - struct nldr_nodeobject *nldr_node_obj; - bool loaded; /* Code is (dynamically) loaded */ - bool phase_split; /* Phases split in many libs or ovly */ - -}; - -/* Default buffer attributes */ -static struct dsp_bufferattr node_dfltbufattrs = { - .cb_struct = 0, - .segment_id = 1, - .buf_alignment = 0, -}; - -static void delete_node(struct node_object *hnode, - struct process_context *pr_ctxt); -static void delete_node_mgr(struct node_mgr *hnode_mgr); -static void fill_stream_connect(struct node_object *node1, - struct node_object *node2, u32 stream1, - u32 stream2); -static void fill_stream_def(struct node_object *hnode, - struct node_strmdef *pstrm_def, - struct dsp_strmattr *pattrs); -static void free_stream(struct node_mgr *hnode_mgr, struct stream_chnl stream); -static int get_fxn_address(struct node_object *hnode, u32 *fxn_addr, - u32 phase); -static int get_node_props(struct dcd_manager *hdcd_mgr, - struct node_object *hnode, - const struct dsp_uuid *node_uuid, - struct dcd_genericobj *dcd_prop); -static int get_proc_props(struct node_mgr *hnode_mgr, - struct dev_object *hdev_obj); -static int get_rms_fxns(struct node_mgr *hnode_mgr); -static u32 ovly(void *priv_ref, u32 dsp_run_addr, u32 dsp_load_addr, - u32 ul_num_bytes, u32 mem_space); -static u32 mem_write(void *priv_ref, u32 dsp_add, void *pbuf, - u32 ul_num_bytes, u32 mem_space); - -/* Dynamic loader functions. */ -static struct node_ldr_fxns nldr_fxns = { - nldr_allocate, - nldr_create, - nldr_delete, - nldr_get_fxn_addr, - nldr_load, - nldr_unload, -}; - -enum node_state node_get_state(void *hnode) -{ - struct node_object *pnode = (struct node_object *)hnode; - - if (!pnode) - return -1; - return pnode->node_state; -} - -/* - * ======== node_allocate ======== - * Purpose: - * Allocate GPP resources to manage a node on the DSP. - */ -int node_allocate(struct proc_object *hprocessor, - const struct dsp_uuid *node_uuid, - const struct dsp_cbdata *pargs, - const struct dsp_nodeattrin *attr_in, - struct node_res_object **noderes, - struct process_context *pr_ctxt) -{ - struct node_mgr *hnode_mgr; - struct dev_object *hdev_obj; - struct node_object *pnode = NULL; - enum node_type node_type = NODE_TASK; - struct node_msgargs *pmsg_args; - struct node_taskargs *ptask_args; - u32 num_streams; - struct bridge_drv_interface *intf_fxns; - int status = 0; - struct cmm_object *hcmm_mgr = NULL; /* Shared memory manager hndl */ - u32 proc_id; - u32 pul_value; - u32 dynext_base; - u32 off_set = 0; - u32 ul_stack_seg_val; - struct cfg_hostres *host_res; - struct bridge_dev_context *pbridge_context; - u32 mapped_addr = 0; - u32 map_attrs = 0x0; - struct dsp_processorstate proc_state; -#ifdef DSP_DMM_DEBUG - struct dmm_object *dmm_mgr; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; -#endif - - void *node_res; - - *noderes = NULL; - - status = proc_get_processor_id(hprocessor, &proc_id); - - if (proc_id != DSP_UNIT) - goto func_end; - - status = proc_get_dev_object(hprocessor, &hdev_obj); - if (!status) { - status = dev_get_node_manager(hdev_obj, &hnode_mgr); - if (hnode_mgr == NULL) - status = -EPERM; - - } - - if (status) - goto func_end; - - status = dev_get_bridge_context(hdev_obj, &pbridge_context); - if (!pbridge_context) { - status = -EFAULT; - goto func_end; - } - - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in error state then don't attempt - to send the message */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - - /* Assuming that 0 is not a valid function address */ - if (hnode_mgr->fxn_addrs[0] == 0) { - /* No RMS on target - we currently can't handle this */ - pr_err("%s: Failed, no RMS in base image\n", __func__); - status = -EPERM; - } else { - /* Validate attr_in fields, if non-NULL */ - if (attr_in) { - /* Check if attr_in->prio is within range */ - if (attr_in->prio < hnode_mgr->min_pri || - attr_in->prio > hnode_mgr->max_pri) - status = -EDOM; - } - } - /* Allocate node object and fill in */ - if (status) - goto func_end; - - pnode = kzalloc(sizeof(struct node_object), GFP_KERNEL); - if (pnode == NULL) { - status = -ENOMEM; - goto func_end; - } - pnode->node_mgr = hnode_mgr; - /* This critical section protects get_node_props */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - /* Get dsp_ndbprops from node database */ - status = get_node_props(hnode_mgr->dcd_mgr, pnode, node_uuid, - &(pnode->dcd_props)); - if (status) - goto func_cont; - - pnode->node_uuid = *node_uuid; - pnode->processor = hprocessor; - pnode->ntype = pnode->dcd_props.obj_data.node_obj.ndb_props.ntype; - pnode->timeout = pnode->dcd_props.obj_data.node_obj.ndb_props.timeout; - pnode->prio = pnode->dcd_props.obj_data.node_obj.ndb_props.prio; - - /* Currently only C64 DSP builds support Node Dynamic * heaps */ - /* Allocate memory for node heap */ - pnode->create_args.asa.task_arg_obj.heap_size = 0; - pnode->create_args.asa.task_arg_obj.dsp_heap_addr = 0; - pnode->create_args.asa.task_arg_obj.dsp_heap_res_addr = 0; - pnode->create_args.asa.task_arg_obj.gpp_heap_addr = 0; - if (!attr_in) - goto func_cont; - - /* Check if we have a user allocated node heap */ - if (!(attr_in->pgpp_virt_addr)) - goto func_cont; - - /* check for page aligned Heap size */ - if (((attr_in->heap_size) & (PG_SIZE4K - 1))) { - pr_err("%s: node heap size not aligned to 4K, size = 0x%x\n", - __func__, attr_in->heap_size); - status = -EINVAL; - } else { - pnode->create_args.asa.task_arg_obj.heap_size = - attr_in->heap_size; - pnode->create_args.asa.task_arg_obj.gpp_heap_addr = - (u32) attr_in->pgpp_virt_addr; - } - if (status) - goto func_cont; - - status = proc_reserve_memory(hprocessor, - pnode->create_args.asa.task_arg_obj. - heap_size + PAGE_SIZE, - (void **)&(pnode->create_args.asa. - task_arg_obj.dsp_heap_res_addr), - pr_ctxt); - if (status) { - pr_err("%s: Failed to reserve memory for heap: 0x%x\n", - __func__, status); - goto func_cont; - } -#ifdef DSP_DMM_DEBUG - status = dmm_get_handle(p_proc_object, &dmm_mgr); - if (!dmm_mgr) { - status = DSP_EHANDLE; - goto func_cont; - } - - dmm_mem_map_dump(dmm_mgr); -#endif - - map_attrs |= DSP_MAPLITTLEENDIAN; - map_attrs |= DSP_MAPELEMSIZE32; - map_attrs |= DSP_MAPVIRTUALADDR; - status = proc_map(hprocessor, (void *)attr_in->pgpp_virt_addr, - pnode->create_args.asa.task_arg_obj.heap_size, - (void *)pnode->create_args.asa.task_arg_obj. - dsp_heap_res_addr, (void **)&mapped_addr, map_attrs, - pr_ctxt); - if (status) - pr_err("%s: Failed to map memory for Heap: 0x%x\n", - __func__, status); - else - pnode->create_args.asa.task_arg_obj.dsp_heap_addr = - (u32) mapped_addr; - -func_cont: - mutex_unlock(&hnode_mgr->node_mgr_lock); - if (attr_in != NULL) { - /* Overrides of NBD properties */ - pnode->timeout = attr_in->timeout; - pnode->prio = attr_in->prio; - } - /* Create object to manage notifications */ - if (!status) { - pnode->ntfy_obj = kmalloc(sizeof(struct ntfy_object), - GFP_KERNEL); - if (pnode->ntfy_obj) - ntfy_init(pnode->ntfy_obj); - else - status = -ENOMEM; - } - - if (!status) { - node_type = node_get_type(pnode); - /* Allocate dsp_streamconnect array for device, task, and - * dais socket nodes. */ - if (node_type != NODE_MESSAGE) { - num_streams = MAX_INPUTS(pnode) + MAX_OUTPUTS(pnode); - pnode->stream_connect = kzalloc(num_streams * - sizeof(struct dsp_streamconnect), - GFP_KERNEL); - if (num_streams > 0 && pnode->stream_connect == NULL) - status = -ENOMEM; - - } - if (!status && (node_type == NODE_TASK || - node_type == NODE_DAISSOCKET)) { - /* Allocate arrays for maintainig stream connections */ - pnode->inputs = kzalloc(MAX_INPUTS(pnode) * - sizeof(struct stream_chnl), GFP_KERNEL); - pnode->outputs = kzalloc(MAX_OUTPUTS(pnode) * - sizeof(struct stream_chnl), GFP_KERNEL); - ptask_args = &(pnode->create_args.asa.task_arg_obj); - ptask_args->strm_in_def = kzalloc(MAX_INPUTS(pnode) * - sizeof(struct node_strmdef), - GFP_KERNEL); - ptask_args->strm_out_def = kzalloc(MAX_OUTPUTS(pnode) * - sizeof(struct node_strmdef), - GFP_KERNEL); - if ((MAX_INPUTS(pnode) > 0 && (pnode->inputs == NULL || - ptask_args->strm_in_def - == NULL)) - || (MAX_OUTPUTS(pnode) > 0 - && (pnode->outputs == NULL - || ptask_args->strm_out_def == NULL))) - status = -ENOMEM; - } - } - if (!status && (node_type != NODE_DEVICE)) { - /* Create an event that will be posted when RMS_EXIT is - * received. */ - pnode->sync_done = kzalloc(sizeof(struct sync_object), - GFP_KERNEL); - if (pnode->sync_done) - sync_init_event(pnode->sync_done); - else - status = -ENOMEM; - - if (!status) { - /*Get the shared mem mgr for this nodes dev object */ - status = cmm_get_handle(hprocessor, &hcmm_mgr); - if (!status) { - /* Allocate a SM addr translator for this node - * w/ deflt attr */ - status = cmm_xlator_create(&pnode->xlator, - hcmm_mgr, NULL); - } - } - if (!status) { - /* Fill in message args */ - if ((pargs != NULL) && (pargs->cb_data > 0)) { - pmsg_args = - &(pnode->create_args.asa.node_msg_args); - pmsg_args->pdata = kzalloc(pargs->cb_data, - GFP_KERNEL); - if (pmsg_args->pdata == NULL) { - status = -ENOMEM; - } else { - pmsg_args->arg_length = pargs->cb_data; - memcpy(pmsg_args->pdata, - pargs->node_data, - pargs->cb_data); - } - } - } - } - - if (!status && node_type != NODE_DEVICE) { - /* Create a message queue for this node */ - intf_fxns = hnode_mgr->intf_fxns; - status = - (*intf_fxns->msg_create_queue) (hnode_mgr->msg_mgr_obj, - &pnode->msg_queue_obj, - 0, - pnode->create_args.asa. - node_msg_args.max_msgs, - pnode); - } - - if (!status) { - /* Create object for dynamic loading */ - - status = hnode_mgr->nldr_fxns.allocate(hnode_mgr->nldr_obj, - (void *)pnode, - &pnode->dcd_props. - obj_data.node_obj, - &pnode-> - nldr_node_obj, - &pnode->phase_split); - } - - /* Compare value read from Node Properties and check if it is same as - * STACKSEGLABEL, if yes read the Address of STACKSEGLABEL, calculate - * GPP Address, Read the value in that address and override the - * stack_seg value in task args */ - if (!status && - (char *)pnode->dcd_props.obj_data.node_obj.ndb_props. - stack_seg_name != NULL) { - if (strcmp((char *) - pnode->dcd_props.obj_data.node_obj.ndb_props. - stack_seg_name, STACKSEGLABEL) == 0) { - void __iomem *stack_seg; - u32 stack_seg_pa; - - status = - hnode_mgr->nldr_fxns. - get_fxn_addr(pnode->nldr_node_obj, "DYNEXT_BEG", - &dynext_base); - if (status) - pr_err("%s: Failed to get addr for DYNEXT_BEG" - " status = 0x%x\n", __func__, status); - - status = - hnode_mgr->nldr_fxns. - get_fxn_addr(pnode->nldr_node_obj, - "L1DSRAM_HEAP", &pul_value); - - if (status) - pr_err("%s: Failed to get addr for L1DSRAM_HEAP" - " status = 0x%x\n", __func__, status); - - host_res = pbridge_context->resources; - if (!host_res) - status = -EPERM; - - if (status) { - pr_err("%s: Failed to get host resource, status" - " = 0x%x\n", __func__, status); - goto func_end; - } - - off_set = pul_value - dynext_base; - stack_seg_pa = host_res->mem_phys[1] + off_set; - stack_seg = ioremap(stack_seg_pa, SZ_32); - if (!stack_seg) { - status = -ENOMEM; - goto func_end; - } - - ul_stack_seg_val = readl(stack_seg); - - iounmap(stack_seg); - - dev_dbg(bridge, "%s: StackSegVal = 0x%x, StackSegAddr =" - " 0x%x\n", __func__, ul_stack_seg_val, - host_res->mem_base[1] + off_set); - - pnode->create_args.asa.task_arg_obj.stack_seg = - ul_stack_seg_val; - - } - } - - if (!status) { - /* Add the node to the node manager's list of allocated - * nodes. */ - NODE_SET_STATE(pnode, NODE_ALLOCATED); - - mutex_lock(&hnode_mgr->node_mgr_lock); - - list_add_tail(&pnode->list_elem, &hnode_mgr->node_list); - ++(hnode_mgr->num_nodes); - - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - - /* Preset this to assume phases are split - * (for overlay and dll) */ - pnode->phase_split = true; - - /* Notify all clients registered for DSP_NODESTATECHANGE. */ - proc_notify_all_clients(hprocessor, DSP_NODESTATECHANGE); - } else { - /* Cleanup */ - if (pnode) - delete_node(pnode, pr_ctxt); - - } - - if (!status) { - status = drv_insert_node_res_element(pnode, &node_res, pr_ctxt); - if (status) { - delete_node(pnode, pr_ctxt); - goto func_end; - } - - *noderes = (struct node_res_object *)node_res; - drv_proc_node_update_heap_status(node_res, true); - drv_proc_node_update_status(node_res, true); - } -func_end: - dev_dbg(bridge, "%s: hprocessor: %p pNodeId: %p pargs: %p attr_in: %p " - "node_res: %p status: 0x%x\n", __func__, hprocessor, - node_uuid, pargs, attr_in, noderes, status); - return status; -} - -/* - * ======== node_alloc_msg_buf ======== - * Purpose: - * Allocates buffer for zero copy messaging. - */ -DBAPI node_alloc_msg_buf(struct node_object *hnode, u32 usize, - struct dsp_bufferattr *pattr, - u8 **pbuffer) -{ - struct node_object *pnode = (struct node_object *)hnode; - int status = 0; - bool va_flag = false; - bool set_info; - u32 proc_id; - - if (!pnode) - status = -EFAULT; - else if (node_get_type(pnode) == NODE_DEVICE) - status = -EPERM; - - if (status) - goto func_end; - - if (pattr == NULL) - pattr = &node_dfltbufattrs; /* set defaults */ - - status = proc_get_processor_id(pnode->processor, &proc_id); - if (proc_id != DSP_UNIT) - goto func_end; - - /* If segment ID includes MEM_SETVIRTUALSEGID then pbuffer is a - * virt address, so set this info in this node's translator - * object for future ref. If MEM_GETVIRTUALSEGID then retrieve - * virtual address from node's translator. */ - if ((pattr->segment_id & MEM_SETVIRTUALSEGID) || - (pattr->segment_id & MEM_GETVIRTUALSEGID)) { - va_flag = true; - set_info = (pattr->segment_id & MEM_SETVIRTUALSEGID) ? - true : false; - /* Clear mask bits */ - pattr->segment_id &= ~MEM_MASKVIRTUALSEGID; - /* Set/get this node's translators virtual address base/size */ - status = cmm_xlator_info(pnode->xlator, pbuffer, usize, - pattr->segment_id, set_info); - } - if (!status && (!va_flag)) { - if (pattr->segment_id != 1) { - /* Node supports single SM segment only. */ - status = -EBADR; - } - /* Arbitrary SM buffer alignment not supported for host side - * allocs, but guaranteed for the following alignment - * values. */ - switch (pattr->buf_alignment) { - case 0: - case 1: - case 2: - case 4: - break; - default: - /* alignment value not supportted */ - status = -EPERM; - break; - } - if (!status) { - /* allocate physical buffer from seg_id in node's - * translator */ - (void)cmm_xlator_alloc_buf(pnode->xlator, pbuffer, - usize); - if (*pbuffer == NULL) { - pr_err("%s: error - Out of shared memory\n", - __func__); - status = -ENOMEM; - } - } - } -func_end: - return status; -} - -/* - * ======== node_change_priority ======== - * Purpose: - * Change the priority of a node in the allocated state, or that is - * currently running or paused on the target. - */ -int node_change_priority(struct node_object *hnode, s32 prio) -{ - struct node_object *pnode = (struct node_object *)hnode; - struct node_mgr *hnode_mgr = NULL; - enum node_type node_type; - enum node_state state; - int status = 0; - u32 proc_id; - - if (!hnode || !hnode->node_mgr) { - status = -EFAULT; - } else { - hnode_mgr = hnode->node_mgr; - node_type = node_get_type(hnode); - if (node_type != NODE_TASK && node_type != NODE_DAISSOCKET) - status = -EPERM; - else if (prio < hnode_mgr->min_pri || prio > hnode_mgr->max_pri) - status = -EDOM; - } - if (status) - goto func_end; - - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - state = node_get_state(hnode); - if (state == NODE_ALLOCATED || state == NODE_PAUSED) { - NODE_SET_PRIORITY(hnode, prio); - } else { - if (state != NODE_RUNNING) { - status = -EBADR; - goto func_cont; - } - status = proc_get_processor_id(pnode->processor, &proc_id); - if (proc_id == DSP_UNIT) { - status = - disp_node_change_priority(hnode_mgr->disp_obj, - hnode, - hnode_mgr->fxn_addrs - [RMSCHANGENODEPRIORITY], - hnode->node_env, prio); - } - if (status >= 0) - NODE_SET_PRIORITY(hnode, prio); - - } -func_cont: - /* Leave critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); -func_end: - return status; -} - -/* - * ======== node_connect ======== - * Purpose: - * Connect two nodes on the DSP, or a node on the DSP to the GPP. - */ -int node_connect(struct node_object *node1, u32 stream1, - struct node_object *node2, - u32 stream2, struct dsp_strmattr *pattrs, - struct dsp_cbdata *conn_param) -{ - struct node_mgr *hnode_mgr; - char *pstr_dev_name = NULL; - enum node_type node1_type = NODE_TASK; - enum node_type node2_type = NODE_TASK; - enum dsp_strmmode strm_mode; - struct node_strmdef *pstrm_def; - struct node_strmdef *input = NULL; - struct node_strmdef *output = NULL; - struct node_object *dev_node_obj; - struct node_object *hnode; - struct stream_chnl *pstream; - u32 pipe_id; - u32 chnl_id; - s8 chnl_mode; - u32 dw_length; - int status = 0; - - if (!node1 || !node2) - return -EFAULT; - - /* The two nodes must be on the same processor */ - if (node1 != (struct node_object *)DSP_HGPPNODE && - node2 != (struct node_object *)DSP_HGPPNODE && - node1->node_mgr != node2->node_mgr) - return -EPERM; - - /* Cannot connect a node to itself */ - if (node1 == node2) - return -EPERM; - - /* node_get_type() will return NODE_GPP if hnode = DSP_HGPPNODE. */ - node1_type = node_get_type(node1); - node2_type = node_get_type(node2); - /* Check stream indices ranges */ - if ((node1_type != NODE_GPP && node1_type != NODE_DEVICE && - stream1 >= MAX_OUTPUTS(node1)) || - (node2_type != NODE_GPP && node2_type != NODE_DEVICE && - stream2 >= MAX_INPUTS(node2))) - return -EINVAL; - - /* - * Only the following types of connections are allowed: - * task/dais socket < == > task/dais socket - * task/dais socket < == > device - * task/dais socket < == > GPP - * - * ie, no message nodes, and at least one task or dais - * socket node. - */ - if (node1_type == NODE_MESSAGE || node2_type == NODE_MESSAGE || - (node1_type != NODE_TASK && - node1_type != NODE_DAISSOCKET && - node2_type != NODE_TASK && - node2_type != NODE_DAISSOCKET)) - return -EPERM; - /* - * Check stream mode. Default is STRMMODE_PROCCOPY. - */ - if (pattrs && pattrs->strm_mode != STRMMODE_PROCCOPY) - return -EPERM; /* illegal stream mode */ - - if (node1_type != NODE_GPP) - hnode_mgr = node1->node_mgr; - else - hnode_mgr = node2->node_mgr; - - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - /* Nodes must be in the allocated state */ - if (node1_type != NODE_GPP && - node_get_state(node1) != NODE_ALLOCATED) { - status = -EBADR; - goto out_unlock; - } - - if (node2_type != NODE_GPP && - node_get_state(node2) != NODE_ALLOCATED) { - status = -EBADR; - goto out_unlock; - } - - /* - * Check that stream indices for task and dais socket nodes - * are not already be used. (Device nodes checked later) - */ - if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { - output = &(node1->create_args.asa. - task_arg_obj.strm_out_def[stream1]); - if (output->sz_device) { - status = -EISCONN; - goto out_unlock; - } - - } - if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { - input = &(node2->create_args.asa. - task_arg_obj.strm_in_def[stream2]); - if (input->sz_device) { - status = -EISCONN; - goto out_unlock; - } - - } - /* Connecting two task nodes? */ - if ((node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) && - (node2_type == NODE_TASK || - node2_type == NODE_DAISSOCKET)) { - /* Find available pipe */ - pipe_id = find_first_zero_bit(hnode_mgr->pipe_map, MAXPIPES); - if (pipe_id == MAXPIPES) { - status = -ECONNREFUSED; - goto out_unlock; - } - set_bit(pipe_id, hnode_mgr->pipe_map); - node1->outputs[stream1].type = NODECONNECT; - node2->inputs[stream2].type = NODECONNECT; - node1->outputs[stream1].dev_id = pipe_id; - node2->inputs[stream2].dev_id = pipe_id; - output->sz_device = kzalloc(PIPENAMELEN + 1, GFP_KERNEL); - input->sz_device = kzalloc(PIPENAMELEN + 1, GFP_KERNEL); - if (!output->sz_device || !input->sz_device) { - /* Undo the connection */ - kfree(output->sz_device); - kfree(input->sz_device); - clear_bit(pipe_id, hnode_mgr->pipe_map); - status = -ENOMEM; - goto out_unlock; - } - /* Copy "/dbpipe" name to device names */ - sprintf(output->sz_device, "%s%d", PIPEPREFIX, pipe_id); - strcpy(input->sz_device, output->sz_device); - } - /* Connecting task node to host? */ - if (node1_type == NODE_GPP || node2_type == NODE_GPP) { - pstr_dev_name = kzalloc(HOSTNAMELEN + 1, GFP_KERNEL); - if (!pstr_dev_name) { - status = -ENOMEM; - goto out_unlock; - } - - chnl_mode = (node1_type == NODE_GPP) ? - CHNL_MODETODSP : CHNL_MODEFROMDSP; - - /* - * Reserve a channel id. We need to put the name "/host" - * in the node's create_args, but the host - * side channel will not be opened until DSPStream_Open is - * called for this node. - */ - strm_mode = pattrs ? pattrs->strm_mode : STRMMODE_PROCCOPY; - switch (strm_mode) { - case STRMMODE_RDMA: - chnl_id = find_first_zero_bit(hnode_mgr->dma_chnl_map, - CHNL_MAXCHANNELS); - if (chnl_id < CHNL_MAXCHANNELS) { - set_bit(chnl_id, hnode_mgr->dma_chnl_map); - /* dma chans are 2nd transport chnl set - * ids(e.g. 16-31) */ - chnl_id = chnl_id + hnode_mgr->num_chnls; - } - break; - case STRMMODE_ZEROCOPY: - chnl_id = find_first_zero_bit(hnode_mgr->zc_chnl_map, - CHNL_MAXCHANNELS); - if (chnl_id < CHNL_MAXCHANNELS) { - set_bit(chnl_id, hnode_mgr->zc_chnl_map); - /* zero-copy chans are 3nd transport set - * (e.g. 32-47) */ - chnl_id = chnl_id + - (2 * hnode_mgr->num_chnls); - } - break; - case STRMMODE_PROCCOPY: - chnl_id = find_first_zero_bit(hnode_mgr->chnl_map, - CHNL_MAXCHANNELS); - if (chnl_id < CHNL_MAXCHANNELS) - set_bit(chnl_id, hnode_mgr->chnl_map); - break; - default: - status = -EINVAL; - goto out_unlock; - } - if (chnl_id == CHNL_MAXCHANNELS) { - status = -ECONNREFUSED; - goto out_unlock; - } - - if (node1 == (struct node_object *)DSP_HGPPNODE) { - node2->inputs[stream2].type = HOSTCONNECT; - node2->inputs[stream2].dev_id = chnl_id; - input->sz_device = pstr_dev_name; - } else { - node1->outputs[stream1].type = HOSTCONNECT; - node1->outputs[stream1].dev_id = chnl_id; - output->sz_device = pstr_dev_name; - } - sprintf(pstr_dev_name, "%s%d", HOSTPREFIX, chnl_id); - } - /* Connecting task node to device node? */ - if ((node1_type == NODE_DEVICE) || (node2_type == NODE_DEVICE)) { - if (node2_type == NODE_DEVICE) { - /* node1 == > device */ - dev_node_obj = node2; - hnode = node1; - pstream = &(node1->outputs[stream1]); - pstrm_def = output; - } else { - /* device == > node2 */ - dev_node_obj = node1; - hnode = node2; - pstream = &(node2->inputs[stream2]); - pstrm_def = input; - } - /* Set up create args */ - pstream->type = DEVICECONNECT; - dw_length = strlen(dev_node_obj->str_dev_name); - if (conn_param) - pstrm_def->sz_device = kzalloc(dw_length + 1 + - conn_param->cb_data, - GFP_KERNEL); - else - pstrm_def->sz_device = kzalloc(dw_length + 1, - GFP_KERNEL); - if (!pstrm_def->sz_device) { - status = -ENOMEM; - goto out_unlock; - } - /* Copy device name */ - strncpy(pstrm_def->sz_device, - dev_node_obj->str_dev_name, dw_length); - if (conn_param) - strncat(pstrm_def->sz_device, - (char *)conn_param->node_data, - (u32) conn_param->cb_data); - dev_node_obj->device_owner = hnode; - } - /* Fill in create args */ - if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { - node1->create_args.asa.task_arg_obj.num_outputs++; - fill_stream_def(node1, output, pattrs); - } - if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { - node2->create_args.asa.task_arg_obj.num_inputs++; - fill_stream_def(node2, input, pattrs); - } - /* Update node1 and node2 stream_connect */ - if (node1_type != NODE_GPP && node1_type != NODE_DEVICE) { - node1->num_outputs++; - if (stream1 > node1->max_output_index) - node1->max_output_index = stream1; - - } - if (node2_type != NODE_GPP && node2_type != NODE_DEVICE) { - node2->num_inputs++; - if (stream2 > node2->max_input_index) - node2->max_input_index = stream2; - - } - fill_stream_connect(node1, node2, stream1, stream2); - /* end of sync_enter_cs */ - /* Exit critical section */ -out_unlock: - if (status && pstr_dev_name) - kfree(pstr_dev_name); - mutex_unlock(&hnode_mgr->node_mgr_lock); - dev_dbg(bridge, "%s: node1: %p stream1: %d node2: %p stream2: %d" - "pattrs: %p status: 0x%x\n", __func__, node1, - stream1, node2, stream2, pattrs, status); - return status; -} - -/* - * ======== node_create ======== - * Purpose: - * Create a node on the DSP by remotely calling the node's create function. - */ -int node_create(struct node_object *hnode) -{ - struct node_object *pnode = (struct node_object *)hnode; - struct node_mgr *hnode_mgr; - struct bridge_drv_interface *intf_fxns; - u32 ul_create_fxn; - enum node_type node_type; - int status = 0; - int status1 = 0; - struct dsp_cbdata cb_data; - u32 proc_id = 255; - struct dsp_processorstate proc_state; - struct proc_object *hprocessor; -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - struct dspbridge_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; -#endif - - if (!pnode) { - status = -EFAULT; - goto func_end; - } - hprocessor = hnode->processor; - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in error state then don't attempt to create - new node */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - /* create struct dsp_cbdata struct for PWR calls */ - cb_data.cb_data = PWR_TIMEOUT; - node_type = node_get_type(hnode); - hnode_mgr = hnode->node_mgr; - intf_fxns = hnode_mgr->intf_fxns; - /* Get access to node dispatcher */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - /* Check node state */ - if (node_get_state(hnode) != NODE_ALLOCATED) - status = -EBADR; - - if (!status) - status = proc_get_processor_id(pnode->processor, &proc_id); - - if (status) - goto func_cont2; - - if (proc_id != DSP_UNIT) - goto func_cont2; - - /* Make sure streams are properly connected */ - if ((hnode->num_inputs && hnode->max_input_index > - hnode->num_inputs - 1) || - (hnode->num_outputs && hnode->max_output_index > - hnode->num_outputs - 1)) - status = -ENOTCONN; - - if (!status) { - /* If node's create function is not loaded, load it */ - /* Boost the OPP level to max level that DSP can be requested */ -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - if (pdata->cpu_set_freq) - (*pdata->cpu_set_freq) (pdata->mpu_speed[VDD1_OPP3]); -#endif - status = hnode_mgr->nldr_fxns.load(hnode->nldr_node_obj, - NLDR_CREATE); - /* Get address of node's create function */ - if (!status) { - hnode->loaded = true; - if (node_type != NODE_DEVICE) { - status = get_fxn_address(hnode, &ul_create_fxn, - CREATEPHASE); - } - } else { - pr_err("%s: failed to load create code: 0x%x\n", - __func__, status); - } - /* Request the lowest OPP level */ -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - if (pdata->cpu_set_freq) - (*pdata->cpu_set_freq) (pdata->mpu_speed[VDD1_OPP1]); -#endif - /* Get address of iAlg functions, if socket node */ - if (!status) { - if (node_type == NODE_DAISSOCKET) { - status = hnode_mgr->nldr_fxns.get_fxn_addr - (hnode->nldr_node_obj, - hnode->dcd_props.obj_data.node_obj. - str_i_alg_name, - &hnode->create_args.asa. - task_arg_obj.dais_arg); - } - } - } - if (!status) { - if (node_type != NODE_DEVICE) { - status = disp_node_create(hnode_mgr->disp_obj, hnode, - hnode_mgr->fxn_addrs - [RMSCREATENODE], - ul_create_fxn, - &(hnode->create_args), - &(hnode->node_env)); - if (status >= 0) { - /* Set the message queue id to the node env - * pointer */ - intf_fxns = hnode_mgr->intf_fxns; - (*intf_fxns->msg_set_queue_id) (hnode-> - msg_queue_obj, - hnode->node_env); - } - } - } - /* Phase II/Overlays: Create, execute, delete phases possibly in - * different files/sections. */ - if (hnode->loaded && hnode->phase_split) { - /* If create code was dynamically loaded, we can now unload - * it. */ - status1 = hnode_mgr->nldr_fxns.unload(hnode->nldr_node_obj, - NLDR_CREATE); - hnode->loaded = false; - } - if (status1) - pr_err("%s: Failed to unload create code: 0x%x\n", - __func__, status1); -func_cont2: - /* Update node state and node manager state */ - if (status >= 0) { - NODE_SET_STATE(hnode, NODE_CREATED); - hnode_mgr->num_created++; - goto func_cont; - } - if (status != -EBADR) { - /* Put back in NODE_ALLOCATED state if error occurred */ - NODE_SET_STATE(hnode, NODE_ALLOCATED); - } -func_cont: - /* Free access to node dispatcher */ - mutex_unlock(&hnode_mgr->node_mgr_lock); -func_end: - if (status >= 0) { - proc_notify_clients(hnode->processor, DSP_NODESTATECHANGE); - ntfy_notify(hnode->ntfy_obj, DSP_NODESTATECHANGE); - } - - dev_dbg(bridge, "%s: hnode: %p status: 0x%x\n", __func__, - hnode, status); - return status; -} - -/* - * ======== node_create_mgr ======== - * Purpose: - * Create a NODE Manager object. - */ -int node_create_mgr(struct node_mgr **node_man, - struct dev_object *hdev_obj) -{ - u32 i; - struct node_mgr *node_mgr_obj = NULL; - struct disp_attr disp_attr_obj; - char *sz_zl_file = ""; - struct nldr_attrs nldr_attrs_obj; - int status = 0; - u8 dev_type; - - *node_man = NULL; - /* Allocate Node manager object */ - node_mgr_obj = kzalloc(sizeof(struct node_mgr), GFP_KERNEL); - if (!node_mgr_obj) - return -ENOMEM; - - node_mgr_obj->dev_obj = hdev_obj; - - node_mgr_obj->ntfy_obj = kmalloc(sizeof(struct ntfy_object), - GFP_KERNEL); - if (!node_mgr_obj->ntfy_obj) { - status = -ENOMEM; - goto out_err; - } - ntfy_init(node_mgr_obj->ntfy_obj); - - INIT_LIST_HEAD(&node_mgr_obj->node_list); - - dev_get_dev_type(hdev_obj, &dev_type); - - status = dcd_create_manager(sz_zl_file, &node_mgr_obj->dcd_mgr); - if (status) - goto out_err; - - status = get_proc_props(node_mgr_obj, hdev_obj); - if (status) - goto out_err; - - /* Create NODE Dispatcher */ - disp_attr_obj.chnl_offset = node_mgr_obj->chnl_offset; - disp_attr_obj.chnl_buf_size = node_mgr_obj->chnl_buf_size; - disp_attr_obj.proc_family = node_mgr_obj->proc_family; - disp_attr_obj.proc_type = node_mgr_obj->proc_type; - - status = disp_create(&node_mgr_obj->disp_obj, hdev_obj, &disp_attr_obj); - if (status) - goto out_err; - - /* Create a STRM Manager */ - status = strm_create(&node_mgr_obj->strm_mgr_obj, hdev_obj); - if (status) - goto out_err; - - dev_get_intf_fxns(hdev_obj, &node_mgr_obj->intf_fxns); - /* Get msg_ctrl queue manager */ - dev_get_msg_mgr(hdev_obj, &node_mgr_obj->msg_mgr_obj); - mutex_init(&node_mgr_obj->node_mgr_lock); - - /* Block out reserved channels */ - for (i = 0; i < node_mgr_obj->chnl_offset; i++) - set_bit(i, node_mgr_obj->chnl_map); - - /* Block out channels reserved for RMS */ - set_bit(node_mgr_obj->chnl_offset, node_mgr_obj->chnl_map); - set_bit(node_mgr_obj->chnl_offset + 1, node_mgr_obj->chnl_map); - - /* NO RM Server on the IVA */ - if (dev_type != IVA_UNIT) { - /* Get addresses of any RMS functions loaded */ - status = get_rms_fxns(node_mgr_obj); - if (status) - goto out_err; - } - - /* Get loader functions and create loader */ - node_mgr_obj->nldr_fxns = nldr_fxns; /* Dyn loader funcs */ - - nldr_attrs_obj.ovly = ovly; - nldr_attrs_obj.write = mem_write; - nldr_attrs_obj.dsp_word_size = node_mgr_obj->dsp_word_size; - nldr_attrs_obj.dsp_mau_size = node_mgr_obj->dsp_mau_size; - status = node_mgr_obj->nldr_fxns.create(&node_mgr_obj->nldr_obj, - hdev_obj, - &nldr_attrs_obj); - if (status) - goto out_err; - - *node_man = node_mgr_obj; - - return status; -out_err: - delete_node_mgr(node_mgr_obj); - return status; -} - -/* - * ======== node_delete ======== - * Purpose: - * Delete a node on the DSP by remotely calling the node's delete function. - * Loads the node's delete function if necessary. Free GPP side resources - * after node's delete function returns. - */ -int node_delete(struct node_res_object *noderes, - struct process_context *pr_ctxt) -{ - struct node_object *pnode = noderes->node; - struct node_mgr *hnode_mgr; - struct proc_object *hprocessor; - struct disp_object *disp_obj; - u32 ul_delete_fxn; - enum node_type node_type; - enum node_state state; - int status = 0; - int status1 = 0; - struct dsp_cbdata cb_data; - u32 proc_id; - struct bridge_drv_interface *intf_fxns; - - void *node_res = noderes; - - struct dsp_processorstate proc_state; - - if (!pnode) { - status = -EFAULT; - goto func_end; - } - /* create struct dsp_cbdata struct for PWR call */ - cb_data.cb_data = PWR_TIMEOUT; - hnode_mgr = pnode->node_mgr; - hprocessor = pnode->processor; - disp_obj = hnode_mgr->disp_obj; - node_type = node_get_type(pnode); - intf_fxns = hnode_mgr->intf_fxns; - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - state = node_get_state(pnode); - /* Execute delete phase code for non-device node in all cases - * except when the node was only allocated. Delete phase must be - * executed even if create phase was executed, but failed. - * If the node environment pointer is non-NULL, the delete phase - * code must be executed. */ - if (!(state == NODE_ALLOCATED && pnode->node_env == (u32) NULL) && - node_type != NODE_DEVICE) { - status = proc_get_processor_id(pnode->processor, &proc_id); - if (status) - goto func_cont1; - - if (proc_id == DSP_UNIT || proc_id == IVA_UNIT) { - /* If node has terminated, execute phase code will - * have already been unloaded in node_on_exit(). If the - * node is PAUSED, the execute phase is loaded, and it - * is now ok to unload it. If the node is running, we - * will unload the execute phase only after deleting - * the node. */ - if (state == NODE_PAUSED && pnode->loaded && - pnode->phase_split) { - /* Ok to unload execute code as long as node - * is not * running */ - status1 = - hnode_mgr->nldr_fxns. - unload(pnode->nldr_node_obj, - NLDR_EXECUTE); - pnode->loaded = false; - NODE_SET_STATE(pnode, NODE_DONE); - } - /* Load delete phase code if not loaded or if haven't - * * unloaded EXECUTE phase */ - if ((!(pnode->loaded) || (state == NODE_RUNNING)) && - pnode->phase_split) { - status = - hnode_mgr->nldr_fxns. - load(pnode->nldr_node_obj, NLDR_DELETE); - if (!status) - pnode->loaded = true; - else - pr_err("%s: fail - load delete code:" - " 0x%x\n", __func__, status); - } - } -func_cont1: - if (!status) { - /* Unblock a thread trying to terminate the node */ - (void)sync_set_event(pnode->sync_done); - if (proc_id == DSP_UNIT) { - /* ul_delete_fxn = address of node's delete - * function */ - status = get_fxn_address(pnode, &ul_delete_fxn, - DELETEPHASE); - } else if (proc_id == IVA_UNIT) - ul_delete_fxn = (u32) pnode->node_env; - if (!status) { - status = proc_get_state(hprocessor, - &proc_state, - sizeof(struct - dsp_processorstate)); - if (proc_state.proc_state != PROC_ERROR) { - status = - disp_node_delete(disp_obj, pnode, - hnode_mgr-> - fxn_addrs - [RMSDELETENODE], - ul_delete_fxn, - pnode->node_env); - } else - NODE_SET_STATE(pnode, NODE_DONE); - - /* Unload execute, if not unloaded, and delete - * function */ - if (state == NODE_RUNNING && - pnode->phase_split) { - status1 = - hnode_mgr->nldr_fxns. - unload(pnode->nldr_node_obj, - NLDR_EXECUTE); - } - if (status1) - pr_err("%s: fail - unload execute code:" - " 0x%x\n", __func__, status1); - - status1 = - hnode_mgr->nldr_fxns.unload(pnode-> - nldr_node_obj, - NLDR_DELETE); - pnode->loaded = false; - if (status1) - pr_err("%s: fail - unload delete code: " - "0x%x\n", __func__, status1); - } - } - } - /* Free host side resources even if a failure occurred */ - /* Remove node from hnode_mgr->node_list */ - list_del(&pnode->list_elem); - hnode_mgr->num_nodes--; - /* Decrement count of nodes created on DSP */ - if ((state != NODE_ALLOCATED) || ((state == NODE_ALLOCATED) && - (pnode->node_env != (u32) NULL))) - hnode_mgr->num_created--; - /* Free host-side resources allocated by node_create() - * delete_node() fails if SM buffers not freed by client! */ - drv_proc_node_update_status(node_res, false); - delete_node(pnode, pr_ctxt); - - /* - * Release all Node resources and its context - */ - idr_remove(pr_ctxt->node_id, ((struct node_res_object *)node_res)->id); - kfree(node_res); - - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - proc_notify_clients(hprocessor, DSP_NODESTATECHANGE); -func_end: - dev_dbg(bridge, "%s: pnode: %p status 0x%x\n", __func__, pnode, status); - return status; -} - -/* - * ======== node_delete_mgr ======== - * Purpose: - * Delete the NODE Manager. - */ -int node_delete_mgr(struct node_mgr *hnode_mgr) -{ - if (!hnode_mgr) - return -EFAULT; - - delete_node_mgr(hnode_mgr); - - return 0; -} - -/* - * ======== node_enum_nodes ======== - * Purpose: - * Enumerate currently allocated nodes. - */ -int node_enum_nodes(struct node_mgr *hnode_mgr, void **node_tab, - u32 node_tab_size, u32 *pu_num_nodes, - u32 *pu_allocated) -{ - struct node_object *hnode; - u32 i = 0; - int status = 0; - - if (!hnode_mgr) { - status = -EFAULT; - goto func_end; - } - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - if (hnode_mgr->num_nodes > node_tab_size) { - *pu_allocated = hnode_mgr->num_nodes; - *pu_num_nodes = 0; - status = -EINVAL; - } else { - list_for_each_entry(hnode, &hnode_mgr->node_list, list_elem) - node_tab[i++] = hnode; - *pu_allocated = *pu_num_nodes = hnode_mgr->num_nodes; - } - /* end of sync_enter_cs */ - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); -func_end: - return status; -} - -/* - * ======== node_free_msg_buf ======== - * Purpose: - * Frees the message buffer. - */ -int node_free_msg_buf(struct node_object *hnode, u8 *pbuffer, - struct dsp_bufferattr *pattr) -{ - struct node_object *pnode = (struct node_object *)hnode; - int status = 0; - u32 proc_id; - - if (!hnode) { - status = -EFAULT; - goto func_end; - } - status = proc_get_processor_id(pnode->processor, &proc_id); - if (proc_id == DSP_UNIT) { - if (!status) { - if (pattr == NULL) { - /* set defaults */ - pattr = &node_dfltbufattrs; - } - /* Node supports single SM segment only */ - if (pattr->segment_id != 1) - status = -EBADR; - - /* pbuffer is clients Va. */ - status = cmm_xlator_free_buf(pnode->xlator, pbuffer); - } - } else { - } -func_end: - return status; -} - -/* - * ======== node_get_attr ======== - * Purpose: - * Copy the current attributes of the specified node into a dsp_nodeattr - * structure. - */ -int node_get_attr(struct node_object *hnode, - struct dsp_nodeattr *pattr, u32 attr_size) -{ - struct node_mgr *hnode_mgr; - - if (!hnode) - return -EFAULT; - - hnode_mgr = hnode->node_mgr; - /* Enter hnode_mgr critical section since we're accessing - * data that could be changed by node_change_priority() and - * node_connect(). */ - mutex_lock(&hnode_mgr->node_mgr_lock); - pattr->cb_struct = sizeof(struct dsp_nodeattr); - /* dsp_nodeattrin */ - pattr->in_node_attr_in.cb_struct = - sizeof(struct dsp_nodeattrin); - pattr->in_node_attr_in.prio = hnode->prio; - pattr->in_node_attr_in.timeout = hnode->timeout; - pattr->in_node_attr_in.heap_size = - hnode->create_args.asa.task_arg_obj.heap_size; - pattr->in_node_attr_in.pgpp_virt_addr = (void *) - hnode->create_args.asa.task_arg_obj.gpp_heap_addr; - pattr->node_attr_inputs = hnode->num_gpp_inputs; - pattr->node_attr_outputs = hnode->num_gpp_outputs; - /* dsp_nodeinfo */ - get_node_info(hnode, &(pattr->node_info)); - /* end of sync_enter_cs */ - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - - return 0; -} - -/* - * ======== node_get_channel_id ======== - * Purpose: - * Get the channel index reserved for a stream connection between the - * host and a node. - */ -int node_get_channel_id(struct node_object *hnode, u32 dir, u32 index, - u32 *chan_id) -{ - enum node_type node_type; - int status = -EINVAL; - - if (!hnode) { - status = -EFAULT; - return status; - } - node_type = node_get_type(hnode); - if (node_type != NODE_TASK && node_type != NODE_DAISSOCKET) { - status = -EPERM; - return status; - } - if (dir == DSP_TONODE) { - if (index < MAX_INPUTS(hnode)) { - if (hnode->inputs[index].type == HOSTCONNECT) { - *chan_id = hnode->inputs[index].dev_id; - status = 0; - } - } - } else { - if (index < MAX_OUTPUTS(hnode)) { - if (hnode->outputs[index].type == HOSTCONNECT) { - *chan_id = hnode->outputs[index].dev_id; - status = 0; - } - } - } - return status; -} - -/* - * ======== node_get_message ======== - * Purpose: - * Retrieve a message from a node on the DSP. - */ -int node_get_message(struct node_object *hnode, - struct dsp_msg *message, u32 utimeout) -{ - struct node_mgr *hnode_mgr; - enum node_type node_type; - struct bridge_drv_interface *intf_fxns; - int status = 0; - void *tmp_buf; - struct dsp_processorstate proc_state; - struct proc_object *hprocessor; - - if (!hnode) { - status = -EFAULT; - goto func_end; - } - hprocessor = hnode->processor; - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in error state then don't attempt to get the - message */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - hnode_mgr = hnode->node_mgr; - node_type = node_get_type(hnode); - if (node_type != NODE_MESSAGE && node_type != NODE_TASK && - node_type != NODE_DAISSOCKET) { - status = -EPERM; - goto func_end; - } - /* This function will block unless a message is available. Since - * DSPNode_RegisterNotify() allows notification when a message - * is available, the system can be designed so that - * DSPNode_GetMessage() is only called when a message is - * available. */ - intf_fxns = hnode_mgr->intf_fxns; - status = - (*intf_fxns->msg_get) (hnode->msg_queue_obj, message, utimeout); - /* Check if message contains SM descriptor */ - if (status || !(message->cmd & DSP_RMSBUFDESC)) - goto func_end; - - /* Translate DSP byte addr to GPP Va. */ - tmp_buf = cmm_xlator_translate(hnode->xlator, - (void *)(message->arg1 * - hnode->node_mgr-> - dsp_word_size), CMM_DSPPA2PA); - if (tmp_buf != NULL) { - /* now convert this GPP Pa to Va */ - tmp_buf = cmm_xlator_translate(hnode->xlator, tmp_buf, - CMM_PA2VA); - if (tmp_buf != NULL) { - /* Adjust SM size in msg */ - message->arg1 = (u32) tmp_buf; - message->arg2 *= hnode->node_mgr->dsp_word_size; - } else { - status = -ESRCH; - } - } else { - status = -ESRCH; - } -func_end: - dev_dbg(bridge, "%s: hnode: %p message: %p utimeout: 0x%x\n", __func__, - hnode, message, utimeout); - return status; -} - -/* - * ======== node_get_nldr_obj ======== - */ -int node_get_nldr_obj(struct node_mgr *hnode_mgr, - struct nldr_object **nldr_ovlyobj) -{ - int status = 0; - struct node_mgr *node_mgr_obj = hnode_mgr; - - if (!hnode_mgr) - status = -EFAULT; - else - *nldr_ovlyobj = node_mgr_obj->nldr_obj; - - return status; -} - -/* - * ======== node_get_strm_mgr ======== - * Purpose: - * Returns the Stream manager. - */ -int node_get_strm_mgr(struct node_object *hnode, - struct strm_mgr **strm_man) -{ - int status = 0; - - if (!hnode) - status = -EFAULT; - else - *strm_man = hnode->node_mgr->strm_mgr_obj; - - return status; -} - -/* - * ======== node_get_load_type ======== - */ -enum nldr_loadtype node_get_load_type(struct node_object *hnode) -{ - if (!hnode) { - dev_dbg(bridge, "%s: Failed. hnode: %p\n", __func__, hnode); - return -1; - } else { - return hnode->dcd_props.obj_data.node_obj.load_type; - } -} - -/* - * ======== node_get_timeout ======== - * Purpose: - * Returns the timeout value for this node. - */ -u32 node_get_timeout(struct node_object *hnode) -{ - if (!hnode) { - dev_dbg(bridge, "%s: failed. hnode: %p\n", __func__, hnode); - return 0; - } else { - return hnode->timeout; - } -} - -/* - * ======== node_get_type ======== - * Purpose: - * Returns the node type. - */ -enum node_type node_get_type(struct node_object *hnode) -{ - enum node_type node_type; - - if (hnode == (struct node_object *)DSP_HGPPNODE) - node_type = NODE_GPP; - else { - if (!hnode) - node_type = -1; - else - node_type = hnode->ntype; - } - return node_type; -} - -/* - * ======== node_on_exit ======== - * Purpose: - * Gets called when RMS_EXIT is received for a node. - */ -void node_on_exit(struct node_object *hnode, s32 node_status) -{ - if (!hnode) - return; - - /* Set node state to done */ - NODE_SET_STATE(hnode, NODE_DONE); - hnode->exit_status = node_status; - if (hnode->loaded && hnode->phase_split) { - (void)hnode->node_mgr->nldr_fxns.unload(hnode-> - nldr_node_obj, - NLDR_EXECUTE); - hnode->loaded = false; - } - /* Unblock call to node_terminate */ - (void)sync_set_event(hnode->sync_done); - /* Notify clients */ - proc_notify_clients(hnode->processor, DSP_NODESTATECHANGE); - ntfy_notify(hnode->ntfy_obj, DSP_NODESTATECHANGE); -} - -/* - * ======== node_pause ======== - * Purpose: - * Suspend execution of a node currently running on the DSP. - */ -int node_pause(struct node_object *hnode) -{ - struct node_object *pnode = (struct node_object *)hnode; - enum node_type node_type; - enum node_state state; - struct node_mgr *hnode_mgr; - int status = 0; - u32 proc_id; - struct dsp_processorstate proc_state; - struct proc_object *hprocessor; - - if (!hnode) { - status = -EFAULT; - } else { - node_type = node_get_type(hnode); - if (node_type != NODE_TASK && node_type != NODE_DAISSOCKET) - status = -EPERM; - } - if (status) - goto func_end; - - status = proc_get_processor_id(pnode->processor, &proc_id); - - if (proc_id == IVA_UNIT) - status = -ENOSYS; - - if (!status) { - hnode_mgr = hnode->node_mgr; - - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - state = node_get_state(hnode); - /* Check node state */ - if (state != NODE_RUNNING) - status = -EBADR; - - if (status) - goto func_cont; - hprocessor = hnode->processor; - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_cont; - /* If processor is in error state then don't attempt - to send the message */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_cont; - } - - status = disp_node_change_priority(hnode_mgr->disp_obj, hnode, - hnode_mgr->fxn_addrs[RMSCHANGENODEPRIORITY], - hnode->node_env, NODE_SUSPENDEDPRI); - - /* Update state */ - if (status >= 0) - NODE_SET_STATE(hnode, NODE_PAUSED); - -func_cont: - /* End of sync_enter_cs */ - /* Leave critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - if (status >= 0) { - proc_notify_clients(hnode->processor, - DSP_NODESTATECHANGE); - ntfy_notify(hnode->ntfy_obj, DSP_NODESTATECHANGE); - } - } -func_end: - dev_dbg(bridge, "%s: hnode: %p status 0x%x\n", __func__, hnode, status); - return status; -} - -/* - * ======== node_put_message ======== - * Purpose: - * Send a message to a message node, task node, or XDAIS socket node. This - * function will block until the message stream can accommodate the - * message, or a timeout occurs. - */ -int node_put_message(struct node_object *hnode, - const struct dsp_msg *pmsg, u32 utimeout) -{ - struct node_mgr *hnode_mgr = NULL; - enum node_type node_type; - struct bridge_drv_interface *intf_fxns; - enum node_state state; - int status = 0; - void *tmp_buf; - struct dsp_msg new_msg; - struct dsp_processorstate proc_state; - struct proc_object *hprocessor; - - if (!hnode) { - status = -EFAULT; - goto func_end; - } - hprocessor = hnode->processor; - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in bad state then don't attempt sending the - message */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - hnode_mgr = hnode->node_mgr; - node_type = node_get_type(hnode); - if (node_type != NODE_MESSAGE && node_type != NODE_TASK && - node_type != NODE_DAISSOCKET) - status = -EPERM; - - if (!status) { - /* Check node state. Can't send messages to a node after - * we've sent the RMS_EXIT command. There is still the - * possibility that node_terminate can be called after we've - * checked the state. Could add another SYNC object to - * prevent this (can't use node_mgr_lock, since we don't - * want to block other NODE functions). However, the node may - * still exit on its own, before this message is sent. */ - mutex_lock(&hnode_mgr->node_mgr_lock); - state = node_get_state(hnode); - if (state == NODE_TERMINATING || state == NODE_DONE) - status = -EBADR; - - /* end of sync_enter_cs */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - } - if (status) - goto func_end; - - /* assign pmsg values to new msg */ - new_msg = *pmsg; - /* Now, check if message contains a SM buffer descriptor */ - if (pmsg->cmd & DSP_RMSBUFDESC) { - /* Translate GPP Va to DSP physical buf Ptr. */ - tmp_buf = cmm_xlator_translate(hnode->xlator, - (void *)new_msg.arg1, - CMM_VA2DSPPA); - if (tmp_buf != NULL) { - /* got translation, convert to MAUs in msg */ - if (hnode->node_mgr->dsp_word_size != 0) { - new_msg.arg1 = - (u32) tmp_buf / - hnode->node_mgr->dsp_word_size; - /* MAUs */ - new_msg.arg2 /= hnode->node_mgr-> - dsp_word_size; - } else { - pr_err("%s: dsp_word_size is zero!\n", - __func__); - status = -EPERM; /* bad DSPWordSize */ - } - } else { /* failed to translate buffer address */ - status = -ESRCH; - } - } - if (!status) { - intf_fxns = hnode_mgr->intf_fxns; - status = (*intf_fxns->msg_put) (hnode->msg_queue_obj, - &new_msg, utimeout); - } -func_end: - dev_dbg(bridge, "%s: hnode: %p pmsg: %p utimeout: 0x%x, " - "status 0x%x\n", __func__, hnode, pmsg, utimeout, status); - return status; -} - -/* - * ======== node_register_notify ======== - * Purpose: - * Register to be notified on specific events for this node. - */ -int node_register_notify(struct node_object *hnode, u32 event_mask, - u32 notify_type, - struct dsp_notification *hnotification) -{ - struct bridge_drv_interface *intf_fxns; - int status = 0; - - if (!hnode) { - status = -EFAULT; - } else { - /* Check if event mask is a valid node related event */ - if (event_mask & ~(DSP_NODESTATECHANGE | DSP_NODEMESSAGEREADY)) - status = -EINVAL; - - /* Check if notify type is valid */ - if (notify_type != DSP_SIGNALEVENT) - status = -EINVAL; - - /* Only one Notification can be registered at a - * time - Limitation */ - if (event_mask == (DSP_NODESTATECHANGE | DSP_NODEMESSAGEREADY)) - status = -EINVAL; - } - if (!status) { - if (event_mask == DSP_NODESTATECHANGE) { - status = ntfy_register(hnode->ntfy_obj, hnotification, - event_mask & DSP_NODESTATECHANGE, - notify_type); - } else { - /* Send Message part of event mask to msg_ctrl */ - intf_fxns = hnode->node_mgr->intf_fxns; - status = (*intf_fxns->msg_register_notify) - (hnode->msg_queue_obj, - event_mask & DSP_NODEMESSAGEREADY, notify_type, - hnotification); - } - - } - dev_dbg(bridge, "%s: hnode: %p event_mask: 0x%x notify_type: 0x%x " - "hnotification: %p status 0x%x\n", __func__, hnode, - event_mask, notify_type, hnotification, status); - return status; -} - -/* - * ======== node_run ======== - * Purpose: - * Start execution of a node's execute phase, or resume execution of a node - * that has been suspended (via NODE_NodePause()) on the DSP. Load the - * node's execute function if necessary. - */ -int node_run(struct node_object *hnode) -{ - struct node_object *pnode = (struct node_object *)hnode; - struct node_mgr *hnode_mgr; - enum node_type node_type; - enum node_state state; - u32 ul_execute_fxn; - u32 ul_fxn_addr; - int status = 0; - u32 proc_id; - struct bridge_drv_interface *intf_fxns; - struct dsp_processorstate proc_state; - struct proc_object *hprocessor; - - if (!hnode) { - status = -EFAULT; - goto func_end; - } - hprocessor = hnode->processor; - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in error state then don't attempt to run the node */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - node_type = node_get_type(hnode); - if (node_type == NODE_DEVICE) - status = -EPERM; - if (status) - goto func_end; - - hnode_mgr = hnode->node_mgr; - if (!hnode_mgr) { - status = -EFAULT; - goto func_end; - } - intf_fxns = hnode_mgr->intf_fxns; - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - state = node_get_state(hnode); - if (state != NODE_CREATED && state != NODE_PAUSED) - status = -EBADR; - - if (!status) - status = proc_get_processor_id(pnode->processor, &proc_id); - - if (status) - goto func_cont1; - - if ((proc_id != DSP_UNIT) && (proc_id != IVA_UNIT)) - goto func_cont1; - - if (state == NODE_CREATED) { - /* If node's execute function is not loaded, load it */ - if (!(hnode->loaded) && hnode->phase_split) { - status = - hnode_mgr->nldr_fxns.load(hnode->nldr_node_obj, - NLDR_EXECUTE); - if (!status) { - hnode->loaded = true; - } else { - pr_err("%s: fail - load execute code: 0x%x\n", - __func__, status); - } - } - if (!status) { - /* Get address of node's execute function */ - if (proc_id == IVA_UNIT) - ul_execute_fxn = (u32) hnode->node_env; - else { - status = get_fxn_address(hnode, &ul_execute_fxn, - EXECUTEPHASE); - } - } - if (!status) { - ul_fxn_addr = hnode_mgr->fxn_addrs[RMSEXECUTENODE]; - status = - disp_node_run(hnode_mgr->disp_obj, hnode, - ul_fxn_addr, ul_execute_fxn, - hnode->node_env); - } - } else if (state == NODE_PAUSED) { - ul_fxn_addr = hnode_mgr->fxn_addrs[RMSCHANGENODEPRIORITY]; - status = disp_node_change_priority(hnode_mgr->disp_obj, hnode, - ul_fxn_addr, hnode->node_env, - NODE_GET_PRIORITY(hnode)); - } else { - /* We should never get here */ - } -func_cont1: - /* Update node state. */ - if (status >= 0) - NODE_SET_STATE(hnode, NODE_RUNNING); - else /* Set state back to previous value */ - NODE_SET_STATE(hnode, state); - /*End of sync_enter_cs */ - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - if (status >= 0) { - proc_notify_clients(hnode->processor, DSP_NODESTATECHANGE); - ntfy_notify(hnode->ntfy_obj, DSP_NODESTATECHANGE); - } -func_end: - dev_dbg(bridge, "%s: hnode: %p status 0x%x\n", __func__, hnode, status); - return status; -} - -/* - * ======== node_terminate ======== - * Purpose: - * Signal a node running on the DSP that it should exit its execute phase - * function. - */ -int node_terminate(struct node_object *hnode, int *pstatus) -{ - struct node_object *pnode = (struct node_object *)hnode; - struct node_mgr *hnode_mgr = NULL; - enum node_type node_type; - struct bridge_drv_interface *intf_fxns; - enum node_state state; - struct dsp_msg msg, killmsg; - int status = 0; - u32 proc_id, kill_time_out; - struct deh_mgr *hdeh_mgr; - struct dsp_processorstate proc_state; - - if (!hnode || !hnode->node_mgr) { - status = -EFAULT; - goto func_end; - } - if (pnode->processor == NULL) { - status = -EFAULT; - goto func_end; - } - status = proc_get_processor_id(pnode->processor, &proc_id); - - if (!status) { - hnode_mgr = hnode->node_mgr; - node_type = node_get_type(hnode); - if (node_type != NODE_TASK && node_type != NODE_DAISSOCKET) - status = -EPERM; - } - if (!status) { - /* Check node state */ - mutex_lock(&hnode_mgr->node_mgr_lock); - state = node_get_state(hnode); - if (state != NODE_RUNNING) { - status = -EBADR; - /* Set the exit status if node terminated on - * its own. */ - if (state == NODE_DONE) - *pstatus = hnode->exit_status; - - } else { - NODE_SET_STATE(hnode, NODE_TERMINATING); - } - /* end of sync_enter_cs */ - mutex_unlock(&hnode_mgr->node_mgr_lock); - } - if (!status) { - /* - * Send exit message. Do not change state to NODE_DONE - * here. That will be done in callback. - */ - status = proc_get_state(pnode->processor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_cont; - /* If processor is in error state then don't attempt to send - * A kill task command */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_cont; - } - - msg.cmd = RMS_EXIT; - msg.arg1 = hnode->node_env; - killmsg.cmd = RMS_KILLTASK; - killmsg.arg1 = hnode->node_env; - intf_fxns = hnode_mgr->intf_fxns; - - if (hnode->timeout > MAXTIMEOUT) - kill_time_out = MAXTIMEOUT; - else - kill_time_out = (hnode->timeout) * 2; - - status = (*intf_fxns->msg_put) (hnode->msg_queue_obj, &msg, - hnode->timeout); - if (status) - goto func_cont; - - /* - * Wait on synchronization object that will be - * posted in the callback on receiving RMS_EXIT - * message, or by node_delete. Check for valid hnode, - * in case posted by node_delete(). - */ - status = sync_wait_on_event(hnode->sync_done, - kill_time_out / 2); - if (status != ETIME) - goto func_cont; - - status = (*intf_fxns->msg_put)(hnode->msg_queue_obj, - &killmsg, hnode->timeout); - if (status) - goto func_cont; - status = sync_wait_on_event(hnode->sync_done, - kill_time_out / 2); - if (status) { - /* - * Here it goes the part of the simulation of - * the DSP exception. - */ - dev_get_deh_mgr(hnode_mgr->dev_obj, &hdeh_mgr); - if (!hdeh_mgr) - goto func_cont; - - bridge_deh_notify(hdeh_mgr, DSP_SYSERROR, - DSP_EXCEPTIONABORT); - } - } -func_cont: - if (!status) { - /* Enter CS before getting exit status, in case node was - * deleted. */ - mutex_lock(&hnode_mgr->node_mgr_lock); - /* Make sure node wasn't deleted while we blocked */ - if (!hnode) { - status = -EPERM; - } else { - *pstatus = hnode->exit_status; - dev_dbg(bridge, "%s: hnode: %p env 0x%x status 0x%x\n", - __func__, hnode, hnode->node_env, status); - } - mutex_unlock(&hnode_mgr->node_mgr_lock); - } /*End of sync_enter_cs */ -func_end: - return status; -} - -/* - * ======== delete_node ======== - * Purpose: - * Free GPP resources allocated in node_allocate() or node_connect(). - */ -static void delete_node(struct node_object *hnode, - struct process_context *pr_ctxt) -{ - struct node_mgr *hnode_mgr; - struct bridge_drv_interface *intf_fxns; - u32 i; - enum node_type node_type; - struct stream_chnl stream; - struct node_msgargs node_msg_args; - struct node_taskargs task_arg_obj; -#ifdef DSP_DMM_DEBUG - struct dmm_object *dmm_mgr; - struct proc_object *p_proc_object = - (struct proc_object *)hnode->processor; -#endif - int status; - - if (!hnode) - goto func_end; - hnode_mgr = hnode->node_mgr; - if (!hnode_mgr) - goto func_end; - - node_type = node_get_type(hnode); - if (node_type != NODE_DEVICE) { - node_msg_args = hnode->create_args.asa.node_msg_args; - kfree(node_msg_args.pdata); - - /* Free msg_ctrl queue */ - if (hnode->msg_queue_obj) { - intf_fxns = hnode_mgr->intf_fxns; - (*intf_fxns->msg_delete_queue) (hnode-> - msg_queue_obj); - hnode->msg_queue_obj = NULL; - } - - kfree(hnode->sync_done); - - /* Free all stream info */ - if (hnode->inputs) { - for (i = 0; i < MAX_INPUTS(hnode); i++) { - stream = hnode->inputs[i]; - free_stream(hnode_mgr, stream); - } - kfree(hnode->inputs); - hnode->inputs = NULL; - } - if (hnode->outputs) { - for (i = 0; i < MAX_OUTPUTS(hnode); i++) { - stream = hnode->outputs[i]; - free_stream(hnode_mgr, stream); - } - kfree(hnode->outputs); - hnode->outputs = NULL; - } - task_arg_obj = hnode->create_args.asa.task_arg_obj; - if (task_arg_obj.strm_in_def) { - for (i = 0; i < MAX_INPUTS(hnode); i++) { - kfree(task_arg_obj.strm_in_def[i].sz_device); - task_arg_obj.strm_in_def[i].sz_device = NULL; - } - kfree(task_arg_obj.strm_in_def); - task_arg_obj.strm_in_def = NULL; - } - if (task_arg_obj.strm_out_def) { - for (i = 0; i < MAX_OUTPUTS(hnode); i++) { - kfree(task_arg_obj.strm_out_def[i].sz_device); - task_arg_obj.strm_out_def[i].sz_device = NULL; - } - kfree(task_arg_obj.strm_out_def); - task_arg_obj.strm_out_def = NULL; - } - if (task_arg_obj.dsp_heap_res_addr) { - status = proc_un_map(hnode->processor, (void *) - task_arg_obj.dsp_heap_addr, - pr_ctxt); - - status = proc_un_reserve_memory(hnode->processor, - (void *) - task_arg_obj. - dsp_heap_res_addr, - pr_ctxt); -#ifdef DSP_DMM_DEBUG - status = dmm_get_handle(p_proc_object, &dmm_mgr); - if (dmm_mgr) - dmm_mem_map_dump(dmm_mgr); - else - status = DSP_EHANDLE; -#endif - } - } - if (node_type != NODE_MESSAGE) { - kfree(hnode->stream_connect); - hnode->stream_connect = NULL; - } - kfree(hnode->str_dev_name); - hnode->str_dev_name = NULL; - - if (hnode->ntfy_obj) { - ntfy_delete(hnode->ntfy_obj); - kfree(hnode->ntfy_obj); - hnode->ntfy_obj = NULL; - } - - /* These were allocated in dcd_get_object_def (via node_allocate) */ - kfree(hnode->dcd_props.obj_data.node_obj.str_create_phase_fxn); - hnode->dcd_props.obj_data.node_obj.str_create_phase_fxn = NULL; - - kfree(hnode->dcd_props.obj_data.node_obj.str_execute_phase_fxn); - hnode->dcd_props.obj_data.node_obj.str_execute_phase_fxn = NULL; - - kfree(hnode->dcd_props.obj_data.node_obj.str_delete_phase_fxn); - hnode->dcd_props.obj_data.node_obj.str_delete_phase_fxn = NULL; - - kfree(hnode->dcd_props.obj_data.node_obj.str_i_alg_name); - hnode->dcd_props.obj_data.node_obj.str_i_alg_name = NULL; - - /* Free all SM address translator resources */ - kfree(hnode->xlator); - kfree(hnode->nldr_node_obj); - hnode->nldr_node_obj = NULL; - hnode->node_mgr = NULL; - kfree(hnode); - hnode = NULL; -func_end: - return; -} - -/* - * ======== delete_node_mgr ======== - * Purpose: - * Frees the node manager. - */ -static void delete_node_mgr(struct node_mgr *hnode_mgr) -{ - struct node_object *hnode, *tmp; - - if (hnode_mgr) { - /* Free resources */ - if (hnode_mgr->dcd_mgr) - dcd_destroy_manager(hnode_mgr->dcd_mgr); - - /* Remove any elements remaining in lists */ - list_for_each_entry_safe(hnode, tmp, &hnode_mgr->node_list, - list_elem) { - list_del(&hnode->list_elem); - delete_node(hnode, NULL); - } - mutex_destroy(&hnode_mgr->node_mgr_lock); - if (hnode_mgr->ntfy_obj) { - ntfy_delete(hnode_mgr->ntfy_obj); - kfree(hnode_mgr->ntfy_obj); - } - - if (hnode_mgr->disp_obj) - disp_delete(hnode_mgr->disp_obj); - - if (hnode_mgr->strm_mgr_obj) - strm_delete(hnode_mgr->strm_mgr_obj); - - /* Delete the loader */ - if (hnode_mgr->nldr_obj) - hnode_mgr->nldr_fxns.delete(hnode_mgr->nldr_obj); - - kfree(hnode_mgr); - } -} - -/* - * ======== fill_stream_connect ======== - * Purpose: - * Fills stream information. - */ -static void fill_stream_connect(struct node_object *node1, - struct node_object *node2, - u32 stream1, u32 stream2) -{ - u32 strm_index; - struct dsp_streamconnect *strm1 = NULL; - struct dsp_streamconnect *strm2 = NULL; - enum node_type node1_type = NODE_TASK; - enum node_type node2_type = NODE_TASK; - - node1_type = node_get_type(node1); - node2_type = node_get_type(node2); - if (node1 != (struct node_object *)DSP_HGPPNODE) { - - if (node1_type != NODE_DEVICE) { - strm_index = node1->num_inputs + - node1->num_outputs - 1; - strm1 = &(node1->stream_connect[strm_index]); - strm1->cb_struct = sizeof(struct dsp_streamconnect); - strm1->this_node_stream_index = stream1; - } - - if (node2 != (struct node_object *)DSP_HGPPNODE) { - /* NODE == > NODE */ - if (node1_type != NODE_DEVICE) { - strm1->connected_node = node2; - strm1->ui_connected_node_id = node2->node_uuid; - strm1->connected_node_stream_index = stream2; - strm1->connect_type = CONNECTTYPE_NODEOUTPUT; - } - if (node2_type != NODE_DEVICE) { - strm_index = node2->num_inputs + - node2->num_outputs - 1; - strm2 = &(node2->stream_connect[strm_index]); - strm2->cb_struct = - sizeof(struct dsp_streamconnect); - strm2->this_node_stream_index = stream2; - strm2->connected_node = node1; - strm2->ui_connected_node_id = node1->node_uuid; - strm2->connected_node_stream_index = stream1; - strm2->connect_type = CONNECTTYPE_NODEINPUT; - } - } else if (node1_type != NODE_DEVICE) - strm1->connect_type = CONNECTTYPE_GPPOUTPUT; - } else { - /* GPP == > NODE */ - strm_index = node2->num_inputs + node2->num_outputs - 1; - strm2 = &(node2->stream_connect[strm_index]); - strm2->cb_struct = sizeof(struct dsp_streamconnect); - strm2->this_node_stream_index = stream2; - strm2->connect_type = CONNECTTYPE_GPPINPUT; - } -} - -/* - * ======== fill_stream_def ======== - * Purpose: - * Fills Stream attributes. - */ -static void fill_stream_def(struct node_object *hnode, - struct node_strmdef *pstrm_def, - struct dsp_strmattr *pattrs) -{ - struct node_mgr *hnode_mgr = hnode->node_mgr; - - if (pattrs != NULL) { - pstrm_def->num_bufs = pattrs->num_bufs; - pstrm_def->buf_size = - pattrs->buf_size / hnode_mgr->dsp_data_mau_size; - pstrm_def->seg_id = pattrs->seg_id; - pstrm_def->buf_alignment = pattrs->buf_alignment; - pstrm_def->timeout = pattrs->timeout; - } else { - pstrm_def->num_bufs = DEFAULTNBUFS; - pstrm_def->buf_size = - DEFAULTBUFSIZE / hnode_mgr->dsp_data_mau_size; - pstrm_def->seg_id = DEFAULTSEGID; - pstrm_def->buf_alignment = DEFAULTALIGNMENT; - pstrm_def->timeout = DEFAULTTIMEOUT; - } -} - -/* - * ======== free_stream ======== - * Purpose: - * Updates the channel mask and frees the pipe id. - */ -static void free_stream(struct node_mgr *hnode_mgr, struct stream_chnl stream) -{ - /* Free up the pipe id unless other node has not yet been deleted. */ - if (stream.type == NODECONNECT) { - if (test_bit(stream.dev_id, hnode_mgr->pipe_done_map)) { - /* The other node has already been deleted */ - clear_bit(stream.dev_id, hnode_mgr->pipe_done_map); - clear_bit(stream.dev_id, hnode_mgr->pipe_map); - } else { - /* The other node has not been deleted yet */ - set_bit(stream.dev_id, hnode_mgr->pipe_done_map); - } - } else if (stream.type == HOSTCONNECT) { - if (stream.dev_id < hnode_mgr->num_chnls) { - clear_bit(stream.dev_id, hnode_mgr->chnl_map); - } else if (stream.dev_id < (2 * hnode_mgr->num_chnls)) { - /* dsp-dma */ - clear_bit(stream.dev_id - (1 * hnode_mgr->num_chnls), - hnode_mgr->dma_chnl_map); - } else if (stream.dev_id < (3 * hnode_mgr->num_chnls)) { - /* zero-copy */ - clear_bit(stream.dev_id - (2 * hnode_mgr->num_chnls), - hnode_mgr->zc_chnl_map); - } - } -} - -/* - * ======== get_fxn_address ======== - * Purpose: - * Retrieves the address for create, execute or delete phase for a node. - */ -static int get_fxn_address(struct node_object *hnode, u32 *fxn_addr, - u32 phase) -{ - char *pstr_fxn_name = NULL; - struct node_mgr *hnode_mgr = hnode->node_mgr; - int status = 0; - - switch (phase) { - case CREATEPHASE: - pstr_fxn_name = - hnode->dcd_props.obj_data.node_obj.str_create_phase_fxn; - break; - case EXECUTEPHASE: - pstr_fxn_name = - hnode->dcd_props.obj_data.node_obj.str_execute_phase_fxn; - break; - case DELETEPHASE: - pstr_fxn_name = - hnode->dcd_props.obj_data.node_obj.str_delete_phase_fxn; - break; - default: - /* Should never get here */ - break; - } - - status = - hnode_mgr->nldr_fxns.get_fxn_addr(hnode->nldr_node_obj, - pstr_fxn_name, fxn_addr); - - return status; -} - -/* - * ======== get_node_info ======== - * Purpose: - * Retrieves the node information. - */ -void get_node_info(struct node_object *hnode, struct dsp_nodeinfo *node_info) -{ - u32 i; - - node_info->cb_struct = sizeof(struct dsp_nodeinfo); - node_info->nb_node_database_props = - hnode->dcd_props.obj_data.node_obj.ndb_props; - node_info->execution_priority = hnode->prio; - node_info->device_owner = hnode->device_owner; - node_info->number_streams = hnode->num_inputs + hnode->num_outputs; - node_info->node_env = hnode->node_env; - - node_info->ns_execution_state = node_get_state(hnode); - - /* Copy stream connect data */ - for (i = 0; i < hnode->num_inputs + hnode->num_outputs; i++) - node_info->sc_stream_connection[i] = hnode->stream_connect[i]; - -} - -/* - * ======== get_node_props ======== - * Purpose: - * Retrieve node properties. - */ -static int get_node_props(struct dcd_manager *hdcd_mgr, - struct node_object *hnode, - const struct dsp_uuid *node_uuid, - struct dcd_genericobj *dcd_prop) -{ - u32 len; - struct node_msgargs *pmsg_args; - struct node_taskargs *task_arg_obj; - enum node_type node_type = NODE_TASK; - struct dsp_ndbprops *pndb_props = - &(dcd_prop->obj_data.node_obj.ndb_props); - int status = 0; - char sz_uuid[MAXUUIDLEN]; - - status = dcd_get_object_def(hdcd_mgr, (struct dsp_uuid *)node_uuid, - DSP_DCDNODETYPE, dcd_prop); - - if (!status) { - hnode->ntype = node_type = pndb_props->ntype; - - /* Create UUID value to set in registry. */ - snprintf(sz_uuid, MAXUUIDLEN, "%pUL", node_uuid); - dev_dbg(bridge, "(node) UUID: %s\n", sz_uuid); - - /* Fill in message args that come from NDB */ - if (node_type != NODE_DEVICE) { - pmsg_args = &(hnode->create_args.asa.node_msg_args); - pmsg_args->seg_id = - dcd_prop->obj_data.node_obj.msg_segid; - pmsg_args->notify_type = - dcd_prop->obj_data.node_obj.msg_notify_type; - pmsg_args->max_msgs = pndb_props->message_depth; - dev_dbg(bridge, "(node) Max Number of Messages: 0x%x\n", - pmsg_args->max_msgs); - } else { - /* Copy device name */ - len = strlen(pndb_props->ac_name); - hnode->str_dev_name = kzalloc(len + 1, GFP_KERNEL); - if (hnode->str_dev_name == NULL) { - status = -ENOMEM; - } else { - strncpy(hnode->str_dev_name, - pndb_props->ac_name, len); - } - } - } - if (!status) { - /* Fill in create args that come from NDB */ - if (node_type == NODE_TASK || node_type == NODE_DAISSOCKET) { - task_arg_obj = &(hnode->create_args.asa.task_arg_obj); - task_arg_obj->prio = pndb_props->prio; - task_arg_obj->stack_size = pndb_props->stack_size; - task_arg_obj->sys_stack_size = - pndb_props->sys_stack_size; - task_arg_obj->stack_seg = pndb_props->stack_seg; - dev_dbg(bridge, "(node) Priority: 0x%x Stack Size: " - "0x%x words System Stack Size: 0x%x words " - "Stack Segment: 0x%x profile count : 0x%x\n", - task_arg_obj->prio, task_arg_obj->stack_size, - task_arg_obj->sys_stack_size, - task_arg_obj->stack_seg, - pndb_props->count_profiles); - } - } - - return status; -} - -/* - * ======== get_proc_props ======== - * Purpose: - * Retrieve the processor properties. - */ -static int get_proc_props(struct node_mgr *hnode_mgr, - struct dev_object *hdev_obj) -{ - struct cfg_hostres *host_res; - struct bridge_dev_context *pbridge_context; - int status = 0; - - status = dev_get_bridge_context(hdev_obj, &pbridge_context); - if (!pbridge_context) - status = -EFAULT; - - if (!status) { - host_res = pbridge_context->resources; - if (!host_res) - return -EPERM; - hnode_mgr->chnl_offset = host_res->chnl_offset; - hnode_mgr->chnl_buf_size = host_res->chnl_buf_size; - hnode_mgr->num_chnls = host_res->num_chnls; - - /* - * PROC will add an API to get dsp_processorinfo. - * Fill in default values for now. - */ - /* TODO -- Instead of hard coding, take from registry */ - hnode_mgr->proc_family = 6000; - hnode_mgr->proc_type = 6410; - hnode_mgr->min_pri = DSP_NODE_MIN_PRIORITY; - hnode_mgr->max_pri = DSP_NODE_MAX_PRIORITY; - hnode_mgr->dsp_word_size = DSPWORDSIZE; - hnode_mgr->dsp_data_mau_size = DSPWORDSIZE; - hnode_mgr->dsp_mau_size = 1; - - } - return status; -} - -/* - * ======== node_get_uuid_props ======== - * Purpose: - * Fetch Node UUID properties from DCD/DOF file. - */ -int node_get_uuid_props(void *hprocessor, - const struct dsp_uuid *node_uuid, - struct dsp_ndbprops *node_props) -{ - struct node_mgr *hnode_mgr = NULL; - struct dev_object *hdev_obj; - int status = 0; - struct dcd_nodeprops dcd_node_props; - struct dsp_processorstate proc_state; - - if (hprocessor == NULL || node_uuid == NULL) { - status = -EFAULT; - goto func_end; - } - status = proc_get_state(hprocessor, &proc_state, - sizeof(struct dsp_processorstate)); - if (status) - goto func_end; - /* If processor is in error state then don't attempt - to send the message */ - if (proc_state.proc_state == PROC_ERROR) { - status = -EPERM; - goto func_end; - } - - status = proc_get_dev_object(hprocessor, &hdev_obj); - if (hdev_obj) { - status = dev_get_node_manager(hdev_obj, &hnode_mgr); - if (hnode_mgr == NULL) { - status = -EFAULT; - goto func_end; - } - } - - /* - * Enter the critical section. This is needed because - * dcd_get_object_def will ultimately end up calling dbll_open/close, - * which needs to be protected in order to not corrupt the zlib manager - * (COD). - */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - dcd_node_props.str_create_phase_fxn = NULL; - dcd_node_props.str_execute_phase_fxn = NULL; - dcd_node_props.str_delete_phase_fxn = NULL; - dcd_node_props.str_i_alg_name = NULL; - - status = dcd_get_object_def(hnode_mgr->dcd_mgr, - (struct dsp_uuid *)node_uuid, DSP_DCDNODETYPE, - (struct dcd_genericobj *)&dcd_node_props); - - if (!status) { - *node_props = dcd_node_props.ndb_props; - kfree(dcd_node_props.str_create_phase_fxn); - - kfree(dcd_node_props.str_execute_phase_fxn); - - kfree(dcd_node_props.str_delete_phase_fxn); - - kfree(dcd_node_props.str_i_alg_name); - } - /* Leave the critical section, we're done. */ - mutex_unlock(&hnode_mgr->node_mgr_lock); -func_end: - return status; -} - -/* - * ======== get_rms_fxns ======== - * Purpose: - * Retrieve the RMS functions. - */ -static int get_rms_fxns(struct node_mgr *hnode_mgr) -{ - s32 i; - struct dev_object *dev_obj = hnode_mgr->dev_obj; - int status = 0; - - static char *psz_fxns[NUMRMSFXNS] = { - "RMS_queryServer", /* RMSQUERYSERVER */ - "RMS_configureServer", /* RMSCONFIGURESERVER */ - "RMS_createNode", /* RMSCREATENODE */ - "RMS_executeNode", /* RMSEXECUTENODE */ - "RMS_deleteNode", /* RMSDELETENODE */ - "RMS_changeNodePriority", /* RMSCHANGENODEPRIORITY */ - "RMS_readMemory", /* RMSREADMEMORY */ - "RMS_writeMemory", /* RMSWRITEMEMORY */ - "RMS_copy", /* RMSCOPY */ - }; - - for (i = 0; i < NUMRMSFXNS; i++) { - status = dev_get_symbol(dev_obj, psz_fxns[i], - &(hnode_mgr->fxn_addrs[i])); - if (status) { - if (status == -ESPIPE) { - /* - * May be loaded dynamically (in the future), - * but return an error for now. - */ - dev_dbg(bridge, "%s: RMS function: %s currently" - " not loaded\n", __func__, psz_fxns[i]); - } else { - dev_dbg(bridge, "%s: Symbol not found: %s " - "status = 0x%x\n", __func__, - psz_fxns[i], status); - break; - } - } - } - - return status; -} - -/* - * ======== ovly ======== - * Purpose: - * Called during overlay.Sends command to RMS to copy a block of data. - */ -static u32 ovly(void *priv_ref, u32 dsp_run_addr, u32 dsp_load_addr, - u32 ul_num_bytes, u32 mem_space) -{ - struct node_object *hnode = (struct node_object *)priv_ref; - struct node_mgr *hnode_mgr; - u32 ul_bytes = 0; - u32 ul_size; - u32 ul_timeout; - int status = 0; - struct bridge_dev_context *hbridge_context; - /* Function interface to Bridge driver*/ - struct bridge_drv_interface *intf_fxns; - - hnode_mgr = hnode->node_mgr; - - ul_size = ul_num_bytes / hnode_mgr->dsp_word_size; - ul_timeout = hnode->timeout; - - /* Call new MemCopy function */ - intf_fxns = hnode_mgr->intf_fxns; - status = dev_get_bridge_context(hnode_mgr->dev_obj, &hbridge_context); - if (!status) { - status = - (*intf_fxns->brd_mem_copy) (hbridge_context, - dsp_run_addr, dsp_load_addr, - ul_num_bytes, (u32) mem_space); - if (!status) - ul_bytes = ul_num_bytes; - else - pr_debug("%s: failed to copy brd memory, status 0x%x\n", - __func__, status); - } else { - pr_debug("%s: failed to get Bridge context, status 0x%x\n", - __func__, status); - } - - return ul_bytes; -} - -/* - * ======== mem_write ======== - */ -static u32 mem_write(void *priv_ref, u32 dsp_add, void *pbuf, - u32 ul_num_bytes, u32 mem_space) -{ - struct node_object *hnode = (struct node_object *)priv_ref; - struct node_mgr *hnode_mgr; - u16 mem_sect_type; - u32 ul_timeout; - int status = 0; - struct bridge_dev_context *hbridge_context; - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - - hnode_mgr = hnode->node_mgr; - - ul_timeout = hnode->timeout; - mem_sect_type = (mem_space & DBLL_CODE) ? RMS_CODE : RMS_DATA; - - /* Call new MemWrite function */ - intf_fxns = hnode_mgr->intf_fxns; - status = dev_get_bridge_context(hnode_mgr->dev_obj, &hbridge_context); - status = (*intf_fxns->brd_mem_write) (hbridge_context, pbuf, - dsp_add, ul_num_bytes, mem_sect_type); - - return ul_num_bytes; -} - -#ifdef CONFIG_TIDSPBRIDGE_BACKTRACE -/* - * ======== node_find_addr ======== - */ -int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr, - u32 offset_range, void *sym_addr_output, char *sym_name) -{ - struct node_object *node_obj; - int status = -ENOENT; - - list_for_each_entry(node_obj, &node_mgr->node_list, list_elem) { - status = nldr_find_addr(node_obj->nldr_node_obj, sym_addr, - offset_range, sym_addr_output, sym_name); - if (!status) { - pr_debug("%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n", __func__, - (unsigned int) node_mgr, - sym_addr, offset_range, - (unsigned int) sym_addr_output, sym_name); - break; - } - } - - return status; -} -#endif diff --git a/drivers/staging/tidspbridge/rmgr/proc.c b/drivers/staging/tidspbridge/rmgr/proc.c deleted file mode 100644 index 23e5146989b1..000000000000 --- a/drivers/staging/tidspbridge/rmgr/proc.c +++ /dev/null @@ -1,1836 +0,0 @@ -/* - * proc.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Processor interface at the driver level. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -/* ------------------------------------ Host OS */ -#include -#include -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include -#include -/* ----------------------------------- Bridge Driver */ -#include -#include -/* ----------------------------------- Platform Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Resource Manager */ -#include -#include -#include -#include - -/* ----------------------------------- Others */ -#include -#include -#include -#include - -/* ----------------------------------- This */ -#include -#include - -#include -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define MAXCMDLINELEN 255 -#define PROC_ENVPROCID "PROC_ID=%d" -#define MAXPROCIDLEN (8 + 5) -#define PROC_DFLT_TIMEOUT 10000 /* Time out in milliseconds */ -#define PWR_TIMEOUT 500 /* Sleep/wake timout in msec */ -#define EXTEND "_EXT_END" /* Extmem end addr in DSP binary */ - -#define DSP_CACHE_LINE 128 - -#define BUFMODE_MASK (3 << 14) - -/* Buffer modes from DSP perspective */ -#define RBUF 0x4000 /* Input buffer */ -#define WBUF 0x8000 /* Output Buffer */ - -extern struct device *bridge; - -/* ----------------------------------- Globals */ - -/* The proc_object structure. */ -struct proc_object { - struct list_head link; /* Link to next proc_object */ - struct dev_object *dev_obj; /* Device this PROC represents */ - u32 process; /* Process owning this Processor */ - struct mgr_object *mgr_obj; /* Manager Object Handle */ - u32 attach_count; /* Processor attach count */ - u32 processor_id; /* Processor number */ - u32 timeout; /* Time out count */ - enum dsp_procstate proc_state; /* Processor state */ - u32 unit; /* DDSP unit number */ - bool is_already_attached; /* - * True if the Device below has - * GPP Client attached - */ - struct ntfy_object *ntfy_obj; /* Manages notifications */ - /* Bridge Context Handle */ - struct bridge_dev_context *bridge_context; - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; - char *last_coff; - struct list_head proc_list; -}; - -DEFINE_MUTEX(proc_lock); /* For critical sections */ - -/* ----------------------------------- Function Prototypes */ -static int proc_monitor(struct proc_object *proc_obj); -static s32 get_envp_count(char **envp); -static char **prepend_envp(char **new_envp, char **envp, s32 envp_elems, - s32 cnew_envp, char *sz_var); - -/* remember mapping information */ -static struct dmm_map_object *add_mapping_info(struct process_context *pr_ctxt, - u32 mpu_addr, u32 dsp_addr, u32 size) -{ - struct dmm_map_object *map_obj; - - u32 num_usr_pgs = size / PG_SIZE4K; - - pr_debug("%s: adding map info: mpu_addr 0x%x virt 0x%x size 0x%x\n", - __func__, mpu_addr, - dsp_addr, size); - - map_obj = kzalloc(sizeof(struct dmm_map_object), GFP_KERNEL); - if (!map_obj) - return NULL; - - INIT_LIST_HEAD(&map_obj->link); - - map_obj->pages = kcalloc(num_usr_pgs, sizeof(struct page *), - GFP_KERNEL); - if (!map_obj->pages) { - kfree(map_obj); - return NULL; - } - - map_obj->mpu_addr = mpu_addr; - map_obj->dsp_addr = dsp_addr; - map_obj->size = size; - map_obj->num_usr_pgs = num_usr_pgs; - - spin_lock(&pr_ctxt->dmm_map_lock); - list_add(&map_obj->link, &pr_ctxt->dmm_map_list); - spin_unlock(&pr_ctxt->dmm_map_lock); - - return map_obj; -} - -static int match_exact_map_obj(struct dmm_map_object *map_obj, - u32 dsp_addr, u32 size) -{ - if (map_obj->dsp_addr == dsp_addr && map_obj->size != size) - pr_err("%s: addr match (0x%x), size don't (0x%x != 0x%x)\n", - __func__, dsp_addr, map_obj->size, size); - - return map_obj->dsp_addr == dsp_addr && - map_obj->size == size; -} - -static void remove_mapping_information(struct process_context *pr_ctxt, - u32 dsp_addr, u32 size) -{ - struct dmm_map_object *map_obj; - - pr_debug("%s: looking for virt 0x%x size 0x%x\n", __func__, - dsp_addr, size); - - spin_lock(&pr_ctxt->dmm_map_lock); - list_for_each_entry(map_obj, &pr_ctxt->dmm_map_list, link) { - pr_debug("%s: candidate: mpu_addr 0x%x virt 0x%x size 0x%x\n", - __func__, - map_obj->mpu_addr, - map_obj->dsp_addr, - map_obj->size); - - if (match_exact_map_obj(map_obj, dsp_addr, size)) { - pr_debug("%s: match, deleting map info\n", __func__); - list_del(&map_obj->link); - kfree(map_obj->dma_info.sg); - kfree(map_obj->pages); - kfree(map_obj); - goto out; - } - pr_debug("%s: candidate didn't match\n", __func__); - } - - pr_err("%s: failed to find given map info\n", __func__); -out: - spin_unlock(&pr_ctxt->dmm_map_lock); -} - -static int match_containing_map_obj(struct dmm_map_object *map_obj, - u32 mpu_addr, u32 size) -{ - u32 map_obj_end = map_obj->mpu_addr + map_obj->size; - - return mpu_addr >= map_obj->mpu_addr && - mpu_addr + size <= map_obj_end; -} - -static struct dmm_map_object *find_containing_mapping( - struct process_context *pr_ctxt, - u32 mpu_addr, u32 size) -{ - struct dmm_map_object *map_obj; - - pr_debug("%s: looking for mpu_addr 0x%x size 0x%x\n", __func__, - mpu_addr, size); - - spin_lock(&pr_ctxt->dmm_map_lock); - list_for_each_entry(map_obj, &pr_ctxt->dmm_map_list, link) { - pr_debug("%s: candidate: mpu_addr 0x%x virt 0x%x size 0x%x\n", - __func__, - map_obj->mpu_addr, - map_obj->dsp_addr, - map_obj->size); - if (match_containing_map_obj(map_obj, mpu_addr, size)) { - pr_debug("%s: match!\n", __func__); - goto out; - } - - pr_debug("%s: no match!\n", __func__); - } - - map_obj = NULL; -out: - spin_unlock(&pr_ctxt->dmm_map_lock); - return map_obj; -} - -static int find_first_page_in_cache(struct dmm_map_object *map_obj, - unsigned long mpu_addr) -{ - u32 mapped_base_page = map_obj->mpu_addr >> PAGE_SHIFT; - u32 requested_base_page = mpu_addr >> PAGE_SHIFT; - int pg_index = requested_base_page - mapped_base_page; - - if (pg_index < 0 || pg_index >= map_obj->num_usr_pgs) { - pr_err("%s: failed (got %d)\n", __func__, pg_index); - return -1; - } - - pr_debug("%s: first page is %d\n", __func__, pg_index); - return pg_index; -} - -static inline struct page *get_mapping_page(struct dmm_map_object *map_obj, - int pg_i) -{ - pr_debug("%s: looking for pg_i %d, num_usr_pgs: %d\n", __func__, - pg_i, map_obj->num_usr_pgs); - - if (pg_i < 0 || pg_i >= map_obj->num_usr_pgs) { - pr_err("%s: requested pg_i %d is out of mapped range\n", - __func__, pg_i); - return NULL; - } - - return map_obj->pages[pg_i]; -} - -/* - * ======== proc_attach ======== - * Purpose: - * Prepare for communication with a particular DSP processor, and return - * a handle to the processor object. - */ -int -proc_attach(u32 processor_id, - const struct dsp_processorattrin *attr_in, - void **ph_processor, struct process_context *pr_ctxt) -{ - int status = 0; - struct dev_object *hdev_obj; - struct proc_object *p_proc_object = NULL; - struct mgr_object *hmgr_obj = NULL; - struct drv_object *hdrv_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - u8 dev_type; - - if (pr_ctxt->processor) { - *ph_processor = pr_ctxt->processor; - return status; - } - - /* Get the Driver and Manager Object Handles */ - if (!drv_datap || !drv_datap->drv_object || !drv_datap->mgr_object) { - status = -ENODATA; - pr_err("%s: Failed to get object handles\n", __func__); - } else { - hdrv_obj = drv_datap->drv_object; - hmgr_obj = drv_datap->mgr_object; - } - - if (!status) { - /* Get the Device Object */ - status = drv_get_dev_object(processor_id, hdrv_obj, &hdev_obj); - } - if (!status) - status = dev_get_dev_type(hdev_obj, &dev_type); - - if (status) - goto func_end; - - /* If we made it this far, create the Processor object: */ - p_proc_object = kzalloc(sizeof(struct proc_object), GFP_KERNEL); - /* Fill out the Processor Object: */ - if (p_proc_object == NULL) { - status = -ENOMEM; - goto func_end; - } - p_proc_object->dev_obj = hdev_obj; - p_proc_object->mgr_obj = hmgr_obj; - p_proc_object->processor_id = dev_type; - /* Store TGID instead of process handle */ - p_proc_object->process = current->tgid; - - INIT_LIST_HEAD(&p_proc_object->proc_list); - - if (attr_in) - p_proc_object->timeout = attr_in->timeout; - else - p_proc_object->timeout = PROC_DFLT_TIMEOUT; - - status = dev_get_intf_fxns(hdev_obj, &p_proc_object->intf_fxns); - if (!status) { - status = dev_get_bridge_context(hdev_obj, - &p_proc_object->bridge_context); - if (status) - kfree(p_proc_object); - } else - kfree(p_proc_object); - - if (status) - goto func_end; - - /* Create the Notification Object */ - /* This is created with no event mask, no notify mask - * and no valid handle to the notification. They all get - * filled up when proc_register_notify is called */ - p_proc_object->ntfy_obj = kmalloc(sizeof(struct ntfy_object), - GFP_KERNEL); - if (p_proc_object->ntfy_obj) - ntfy_init(p_proc_object->ntfy_obj); - else - status = -ENOMEM; - - if (!status) { - /* Insert the Processor Object into the DEV List. - * Return handle to this Processor Object: - * Find out if the Device is already attached to a - * Processor. If so, return AlreadyAttached status */ - status = dev_insert_proc_object(p_proc_object->dev_obj, - (u32) p_proc_object, - &p_proc_object-> - is_already_attached); - if (!status) { - if (p_proc_object->is_already_attached) - status = 0; - } else { - if (p_proc_object->ntfy_obj) { - ntfy_delete(p_proc_object->ntfy_obj); - kfree(p_proc_object->ntfy_obj); - } - - kfree(p_proc_object); - } - if (!status) { - *ph_processor = (void *)p_proc_object; - pr_ctxt->processor = *ph_processor; - (void)proc_notify_clients(p_proc_object, - DSP_PROCESSORATTACH); - } - } else { - /* Don't leak memory if status is failed */ - kfree(p_proc_object); - } -func_end: - return status; -} - -static int get_exec_file(struct cfg_devnode *dev_node_obj, - struct dev_object *hdev_obj, - u32 size, char *exec_file) -{ - u8 dev_type; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - dev_get_dev_type(hdev_obj, (u8 *) &dev_type); - - if (!exec_file) - return -EFAULT; - - if (dev_type == DSP_UNIT) { - if (!drv_datap || !drv_datap->base_img) - return -EFAULT; - - if (strlen(drv_datap->base_img) >= size) - return -EINVAL; - - strcpy(exec_file, drv_datap->base_img); - } else { - return -ENOENT; - } - - return 0; -} - -/* - * ======== proc_auto_start ======== = - * Purpose: - * A Particular device gets loaded with the default image - * if the AutoStart flag is set. - * Parameters: - * hdev_obj: Handle to the Device - * Returns: - * 0: On Successful Loading - * -EPERM General Failure - * Requires: - * hdev_obj != NULL - * Ensures: - */ -int proc_auto_start(struct cfg_devnode *dev_node_obj, - struct dev_object *hdev_obj) -{ - int status = -EPERM; - struct proc_object *p_proc_object; - char sz_exec_file[MAXCMDLINELEN]; - char *argv[2]; - struct mgr_object *hmgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - u8 dev_type; - - /* Create a Dummy PROC Object */ - if (!drv_datap || !drv_datap->mgr_object) { - status = -ENODATA; - pr_err("%s: Failed to retrieve the object handle\n", __func__); - goto func_end; - } else { - hmgr_obj = drv_datap->mgr_object; - } - - p_proc_object = kzalloc(sizeof(struct proc_object), GFP_KERNEL); - if (p_proc_object == NULL) { - status = -ENOMEM; - goto func_end; - } - p_proc_object->dev_obj = hdev_obj; - p_proc_object->mgr_obj = hmgr_obj; - status = dev_get_intf_fxns(hdev_obj, &p_proc_object->intf_fxns); - if (!status) - status = dev_get_bridge_context(hdev_obj, - &p_proc_object->bridge_context); - if (status) - goto func_cont; - - /* Stop the Device, put it into standby mode */ - status = proc_stop(p_proc_object); - - if (status) - goto func_cont; - - /* Get the default executable for this board... */ - dev_get_dev_type(hdev_obj, (u8 *) &dev_type); - p_proc_object->processor_id = dev_type; - status = get_exec_file(dev_node_obj, hdev_obj, sizeof(sz_exec_file), - sz_exec_file); - if (!status) { - argv[0] = sz_exec_file; - argv[1] = NULL; - /* ...and try to load it: */ - status = proc_load(p_proc_object, 1, (const char **)argv, NULL); - if (!status) - status = proc_start(p_proc_object); - } - kfree(p_proc_object->last_coff); - p_proc_object->last_coff = NULL; -func_cont: - kfree(p_proc_object); -func_end: - return status; -} - -/* - * ======== proc_ctrl ======== - * Purpose: - * Pass control information to the GPP device driver managing the - * DSP processor. - * - * This will be an OEM-only function, and not part of the DSP/BIOS Bridge - * application developer's API. - * Call the bridge_dev_ctrl fxn with the Argument. This is a Synchronous - * Operation. arg can be null. - */ -int proc_ctrl(void *hprocessor, u32 dw_cmd, struct dsp_cbdata *arg) -{ - int status = 0; - struct proc_object *p_proc_object = hprocessor; - u32 timeout = 0; - - if (p_proc_object) { - /* intercept PWR deep sleep command */ - if (dw_cmd == BRDIOCTL_DEEPSLEEP) { - timeout = arg->cb_data; - status = pwr_sleep_dsp(PWR_DEEPSLEEP, timeout); - } - /* intercept PWR emergency sleep command */ - else if (dw_cmd == BRDIOCTL_EMERGENCYSLEEP) { - timeout = arg->cb_data; - status = pwr_sleep_dsp(PWR_EMERGENCYDEEPSLEEP, timeout); - } else if (dw_cmd == PWR_DEEPSLEEP) { - /* timeout = arg->cb_data; */ - status = pwr_sleep_dsp(PWR_DEEPSLEEP, timeout); - } - /* intercept PWR wake commands */ - else if (dw_cmd == BRDIOCTL_WAKEUP) { - timeout = arg->cb_data; - status = pwr_wake_dsp(timeout); - } else if (dw_cmd == PWR_WAKEUP) { - /* timeout = arg->cb_data; */ - status = pwr_wake_dsp(timeout); - } else - if (!((*p_proc_object->intf_fxns->dev_cntrl) - (p_proc_object->bridge_context, dw_cmd, - arg))) { - status = 0; - } else { - status = -EPERM; - } - } else { - status = -EFAULT; - } - - return status; -} - -/* - * ======== proc_detach ======== - * Purpose: - * Destroys the Processor Object. Removes the notification from the Dev - * List. - */ -int proc_detach(struct process_context *pr_ctxt) -{ - int status = 0; - struct proc_object *p_proc_object = NULL; - - p_proc_object = (struct proc_object *)pr_ctxt->processor; - - if (p_proc_object) { - /* Notify the Client */ - ntfy_notify(p_proc_object->ntfy_obj, DSP_PROCESSORDETACH); - /* Remove the notification memory */ - if (p_proc_object->ntfy_obj) { - ntfy_delete(p_proc_object->ntfy_obj); - kfree(p_proc_object->ntfy_obj); - } - - kfree(p_proc_object->last_coff); - p_proc_object->last_coff = NULL; - /* Remove the Proc from the DEV List */ - (void)dev_remove_proc_object(p_proc_object->dev_obj, - (u32) p_proc_object); - /* Free the Processor Object */ - kfree(p_proc_object); - pr_ctxt->processor = NULL; - } else { - status = -EFAULT; - } - - return status; -} - -/* - * ======== proc_enum_nodes ======== - * Purpose: - * Enumerate and get configuration information about nodes allocated - * on a DSP processor. - */ -int proc_enum_nodes(void *hprocessor, void **node_tab, - u32 node_tab_size, u32 *pu_num_nodes, - u32 *pu_allocated) -{ - int status = -EPERM; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct node_mgr *hnode_mgr = NULL; - - if (p_proc_object) { - if (!(dev_get_node_manager(p_proc_object->dev_obj, - &hnode_mgr))) { - if (hnode_mgr) { - status = node_enum_nodes(hnode_mgr, node_tab, - node_tab_size, - pu_num_nodes, - pu_allocated); - } - } - } else { - status = -EFAULT; - } - - return status; -} - -/* Cache operation against kernel address instead of users */ -static int build_dma_sg(struct dmm_map_object *map_obj, unsigned long start, - ssize_t len, int pg_i) -{ - struct page *page; - unsigned long offset; - ssize_t rest; - int ret = 0, i = 0; - struct scatterlist *sg = map_obj->dma_info.sg; - - while (len) { - page = get_mapping_page(map_obj, pg_i); - if (!page) { - pr_err("%s: no page for %08lx\n", __func__, start); - ret = -EINVAL; - goto out; - } else if (IS_ERR(page)) { - pr_err("%s: err page for %08lx(%lu)\n", __func__, start, - PTR_ERR(page)); - ret = PTR_ERR(page); - goto out; - } - - offset = start & ~PAGE_MASK; - rest = min_t(ssize_t, PAGE_SIZE - offset, len); - - sg_set_page(&sg[i], page, rest, offset); - - len -= rest; - start += rest; - pg_i++, i++; - } - - if (i != map_obj->dma_info.num_pages) { - pr_err("%s: bad number of sg iterations\n", __func__); - ret = -EFAULT; - goto out; - } - -out: - return ret; -} - -static int memory_regain_ownership(struct dmm_map_object *map_obj, - unsigned long start, ssize_t len, enum dma_data_direction dir) -{ - int ret = 0; - unsigned long first_data_page = start >> PAGE_SHIFT; - unsigned long last_data_page = ((u32)(start + len - 1) >> PAGE_SHIFT); - /* calculating the number of pages this area spans */ - unsigned long num_pages = last_data_page - first_data_page + 1; - struct bridge_dma_map_info *dma_info = &map_obj->dma_info; - - if (!dma_info->sg) - goto out; - - if (dma_info->dir != dir || dma_info->num_pages != num_pages) { - pr_err("%s: dma info doesn't match given params\n", __func__); - return -EINVAL; - } - - dma_unmap_sg(bridge, dma_info->sg, num_pages, dma_info->dir); - - pr_debug("%s: dma_map_sg unmapped\n", __func__); - - kfree(dma_info->sg); - - map_obj->dma_info.sg = NULL; - -out: - return ret; -} - -/* Cache operation against kernel address instead of users */ -static int memory_give_ownership(struct dmm_map_object *map_obj, - unsigned long start, ssize_t len, enum dma_data_direction dir) -{ - int pg_i, ret, sg_num; - struct scatterlist *sg; - unsigned long first_data_page = start >> PAGE_SHIFT; - unsigned long last_data_page = ((u32)(start + len - 1) >> PAGE_SHIFT); - /* calculating the number of pages this area spans */ - unsigned long num_pages = last_data_page - first_data_page + 1; - - pg_i = find_first_page_in_cache(map_obj, start); - if (pg_i < 0) { - pr_err("%s: failed to find first page in cache\n", __func__); - ret = -EINVAL; - goto out; - } - - sg = kcalloc(num_pages, sizeof(*sg), GFP_KERNEL); - if (!sg) { - ret = -ENOMEM; - goto out; - } - - sg_init_table(sg, num_pages); - - /* cleanup a previous sg allocation */ - /* this may happen if application doesn't signal for e/o DMA */ - kfree(map_obj->dma_info.sg); - - map_obj->dma_info.sg = sg; - map_obj->dma_info.dir = dir; - map_obj->dma_info.num_pages = num_pages; - - ret = build_dma_sg(map_obj, start, len, pg_i); - if (ret) - goto kfree_sg; - - sg_num = dma_map_sg(bridge, sg, num_pages, dir); - if (sg_num < 1) { - pr_err("%s: dma_map_sg failed: %d\n", __func__, sg_num); - ret = -EFAULT; - goto kfree_sg; - } - - pr_debug("%s: dma_map_sg mapped %d elements\n", __func__, sg_num); - map_obj->dma_info.sg_num = sg_num; - - return 0; - -kfree_sg: - kfree(sg); - map_obj->dma_info.sg = NULL; -out: - return ret; -} - -int proc_begin_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, - enum dma_data_direction dir) -{ - /* Keep STATUS here for future additions to this function */ - int status = 0; - struct process_context *pr_ctxt = (struct process_context *) hprocessor; - struct dmm_map_object *map_obj; - - if (!pr_ctxt) { - status = -EFAULT; - goto err_out; - } - - pr_debug("%s: addr 0x%x, size 0x%x, type %d\n", __func__, - (u32)pmpu_addr, - ul_size, dir); - - mutex_lock(&proc_lock); - - /* find requested memory are in cached mapping information */ - map_obj = find_containing_mapping(pr_ctxt, (u32) pmpu_addr, ul_size); - if (!map_obj) { - pr_err("%s: find_containing_mapping failed\n", __func__); - status = -EFAULT; - goto no_map; - } - - if (memory_give_ownership(map_obj, (u32) pmpu_addr, ul_size, dir)) { - pr_err("%s: InValid address parameters %p %x\n", - __func__, pmpu_addr, ul_size); - status = -EFAULT; - } - -no_map: - mutex_unlock(&proc_lock); -err_out: - - return status; -} - -int proc_end_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, - enum dma_data_direction dir) -{ - /* Keep STATUS here for future additions to this function */ - int status = 0; - struct process_context *pr_ctxt = (struct process_context *) hprocessor; - struct dmm_map_object *map_obj; - - if (!pr_ctxt) { - status = -EFAULT; - goto err_out; - } - - pr_debug("%s: addr 0x%x, size 0x%x, type %d\n", __func__, - (u32)pmpu_addr, - ul_size, dir); - - mutex_lock(&proc_lock); - - /* find requested memory are in cached mapping information */ - map_obj = find_containing_mapping(pr_ctxt, (u32) pmpu_addr, ul_size); - if (!map_obj) { - pr_err("%s: find_containing_mapping failed\n", __func__); - status = -EFAULT; - goto no_map; - } - - if (memory_regain_ownership(map_obj, (u32) pmpu_addr, ul_size, dir)) { - pr_err("%s: InValid address parameters %p %x\n", - __func__, pmpu_addr, ul_size); - status = -EFAULT; - } - -no_map: - mutex_unlock(&proc_lock); -err_out: - return status; -} - -/* - * ======== proc_flush_memory ======== - * Purpose: - * Flush cache - */ -int proc_flush_memory(void *hprocessor, void *pmpu_addr, - u32 ul_size, u32 ul_flags) -{ - enum dma_data_direction dir = DMA_BIDIRECTIONAL; - - return proc_begin_dma(hprocessor, pmpu_addr, ul_size, dir); -} - -/* - * ======== proc_invalidate_memory ======== - * Purpose: - * Invalidates the memory specified - */ -int proc_invalidate_memory(void *hprocessor, void *pmpu_addr, u32 size) -{ - enum dma_data_direction dir = DMA_FROM_DEVICE; - - return proc_begin_dma(hprocessor, pmpu_addr, size, dir); -} - -/* - * ======== proc_get_resource_info ======== - * Purpose: - * Enumerate the resources currently available on a processor. - */ -int proc_get_resource_info(void *hprocessor, u32 resource_type, - struct dsp_resourceinfo *resource_info, - u32 resource_info_size) -{ - int status = -EPERM; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct node_mgr *hnode_mgr = NULL; - struct nldr_object *nldr_obj = NULL; - struct rmm_target_obj *rmm = NULL; - struct io_mgr *hio_mgr = NULL; /* IO manager handle */ - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - switch (resource_type) { - case DSP_RESOURCE_DYNDARAM: - case DSP_RESOURCE_DYNSARAM: - case DSP_RESOURCE_DYNEXTERNAL: - case DSP_RESOURCE_DYNSRAM: - status = dev_get_node_manager(p_proc_object->dev_obj, - &hnode_mgr); - if (!hnode_mgr) { - status = -EFAULT; - goto func_end; - } - - status = node_get_nldr_obj(hnode_mgr, &nldr_obj); - if (!status) { - status = nldr_get_rmm_manager(nldr_obj, &rmm); - if (rmm) { - if (!rmm_stat(rmm, - (enum dsp_memtype)resource_type, - (struct dsp_memstat *) - &(resource_info->result. - mem_stat))) - status = -EINVAL; - } else { - status = -EFAULT; - } - } - break; - case DSP_RESOURCE_PROCLOAD: - status = dev_get_io_mgr(p_proc_object->dev_obj, &hio_mgr); - if (hio_mgr) - status = - p_proc_object->intf_fxns-> - io_get_proc_load(hio_mgr, - (struct dsp_procloadstat *) - &(resource_info->result. - proc_load_stat)); - else - status = -EFAULT; - break; - default: - status = -EPERM; - break; - } -func_end: - return status; -} - -/* - * ======== proc_get_dev_object ======== - * Purpose: - * Return the Dev Object handle for a given Processor. - * - */ -int proc_get_dev_object(void *hprocessor, - struct dev_object **device_obj) -{ - int status = -EPERM; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - - if (p_proc_object) { - *device_obj = p_proc_object->dev_obj; - status = 0; - } else { - *device_obj = NULL; - status = -EFAULT; - } - - return status; -} - -/* - * ======== proc_get_state ======== - * Purpose: - * Report the state of the specified DSP processor. - */ -int proc_get_state(void *hprocessor, - struct dsp_processorstate *proc_state_obj, - u32 state_info_size) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - int brd_status; - - if (p_proc_object) { - /* First, retrieve BRD state information */ - status = (*p_proc_object->intf_fxns->brd_status) - (p_proc_object->bridge_context, &brd_status); - if (!status) { - switch (brd_status) { - case BRD_STOPPED: - proc_state_obj->proc_state = PROC_STOPPED; - break; - case BRD_SLEEP_TRANSITION: - case BRD_DSP_HIBERNATION: - /* Fall through */ - case BRD_RUNNING: - proc_state_obj->proc_state = PROC_RUNNING; - break; - case BRD_LOADED: - proc_state_obj->proc_state = PROC_LOADED; - break; - case BRD_ERROR: - proc_state_obj->proc_state = PROC_ERROR; - break; - default: - proc_state_obj->proc_state = 0xFF; - status = -EPERM; - break; - } - } - } else { - status = -EFAULT; - } - dev_dbg(bridge, "%s, results: status: 0x%x proc_state_obj: 0x%x\n", - __func__, status, proc_state_obj->proc_state); - return status; -} - -/* - * ======== proc_get_trace ======== - * Purpose: - * Retrieve the current contents of the trace buffer, located on the - * Processor. Predefined symbols for the trace buffer must have been - * configured into the DSP executable. - * Details: - * We support using the symbols SYS_PUTCBEG and SYS_PUTCEND to define a - * trace buffer, only. Treat it as an undocumented feature. - * This call is destructive, meaning the processor is placed in the monitor - * state as a result of this function. - */ -int proc_get_trace(void *hprocessor, u8 *pbuf, u32 max_size) -{ - int status; - - status = -ENOSYS; - return status; -} - -/* - * ======== proc_load ======== - * Purpose: - * Reset a processor and load a new base program image. - * This will be an OEM-only function, and not part of the DSP/BIOS Bridge - * application developer's API. - */ -int proc_load(void *hprocessor, const s32 argc_index, - const char **user_args, const char **user_envp) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct io_mgr *hio_mgr; /* IO manager handle */ - struct msg_mgr *hmsg_mgr; - struct cod_manager *cod_mgr; /* Code manager handle */ - char *pargv0; /* temp argv[0] ptr */ - char **new_envp; /* Updated envp[] array. */ - char sz_proc_id[MAXPROCIDLEN]; /* Size of "PROC_ID=" */ - s32 envp_elems; /* Num elements in envp[]. */ - s32 cnew_envp; /* " " in new_envp[] */ - s32 nproc_id = 0; /* Anticipate MP version. */ - struct dcd_manager *hdcd_handle; - struct dmm_object *dmm_mgr; - u32 dw_ext_end; - u32 proc_id; - int brd_state; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - -#ifdef OPT_LOAD_TIME_INSTRUMENTATION - struct timeval tv1; - struct timeval tv2; -#endif - -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - struct dspbridge_platform_data *pdata = - omap_dspbridge_dev->dev.platform_data; -#endif - -#ifdef OPT_LOAD_TIME_INSTRUMENTATION - do_gettimeofday(&tv1); -#endif - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - dev_get_cod_mgr(p_proc_object->dev_obj, &cod_mgr); - if (!cod_mgr) { - status = -EPERM; - goto func_end; - } - status = proc_stop(hprocessor); - if (status) - goto func_end; - - /* Place the board in the monitor state. */ - status = proc_monitor(hprocessor); - if (status) - goto func_end; - - /* Save ptr to original argv[0]. */ - pargv0 = (char *)user_args[0]; - /*Prepend "PROC_ID="to envp array for target. */ - envp_elems = get_envp_count((char **)user_envp); - cnew_envp = (envp_elems ? (envp_elems + 1) : (envp_elems + 2)); - new_envp = kzalloc(cnew_envp * sizeof(char **), GFP_KERNEL); - if (new_envp) { - status = snprintf(sz_proc_id, MAXPROCIDLEN, PROC_ENVPROCID, - nproc_id); - if (status == -1) { - dev_dbg(bridge, "%s: Proc ID string overflow\n", - __func__); - status = -EPERM; - } else { - new_envp = - prepend_envp(new_envp, (char **)user_envp, - envp_elems, cnew_envp, sz_proc_id); - /* Get the DCD Handle */ - status = mgr_get_dcd_handle(p_proc_object->mgr_obj, - (u32 *) &hdcd_handle); - if (!status) { - /* Before proceeding with new load, - * check if a previously registered COFF - * exists. - * If yes, unregister nodes in previously - * registered COFF. If any error occurred, - * set previously registered COFF to NULL. */ - if (p_proc_object->last_coff != NULL) { - status = - dcd_auto_unregister(hdcd_handle, - p_proc_object-> - last_coff); - /* Regardless of auto unregister status, - * free previously allocated - * memory. */ - kfree(p_proc_object->last_coff); - p_proc_object->last_coff = NULL; - } - } - /* On success, do cod_open_base() */ - status = cod_open_base(cod_mgr, (char *)user_args[0], - COD_SYMB); - } - } else { - status = -ENOMEM; - } - if (!status) { - /* Auto-register data base */ - /* Get the DCD Handle */ - status = mgr_get_dcd_handle(p_proc_object->mgr_obj, - (u32 *) &hdcd_handle); - if (!status) { - /* Auto register nodes in specified COFF - * file. If registration did not fail, - * (status = 0 or -EACCES) - * save the name of the COFF file for - * de-registration in the future. */ - status = - dcd_auto_register(hdcd_handle, - (char *)user_args[0]); - if (status == -EACCES) - status = 0; - - if (status) { - status = -EPERM; - } else { - /* Allocate memory for pszLastCoff */ - p_proc_object->last_coff = - kzalloc((strlen(user_args[0]) + - 1), GFP_KERNEL); - /* If memory allocated, save COFF file name */ - if (p_proc_object->last_coff) { - strncpy(p_proc_object->last_coff, - (char *)user_args[0], - (strlen((char *)user_args[0]) + - 1)); - } - } - } - } - /* Update shared memory address and size */ - if (!status) { - /* Create the message manager. This must be done - * before calling the IOOnLoaded function. */ - dev_get_msg_mgr(p_proc_object->dev_obj, &hmsg_mgr); - if (!hmsg_mgr) { - status = msg_create(&hmsg_mgr, p_proc_object->dev_obj, - (msg_onexit) node_on_exit); - dev_set_msg_mgr(p_proc_object->dev_obj, hmsg_mgr); - } - } - if (!status) { - /* Set the Device object's message manager */ - status = dev_get_io_mgr(p_proc_object->dev_obj, &hio_mgr); - if (hio_mgr) - status = (*p_proc_object->intf_fxns->io_on_loaded) - (hio_mgr); - else - status = -EFAULT; - } - if (!status) { - /* Now, attempt to load an exec: */ - - /* Boost the OPP level to Maximum level supported by baseport */ -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - if (pdata->cpu_set_freq) - (*pdata->cpu_set_freq) (pdata->mpu_speed[VDD1_OPP5]); -#endif - status = cod_load_base(cod_mgr, argc_index, (char **)user_args, - dev_brd_write_fxn, - p_proc_object->dev_obj, NULL); - if (status) { - if (status == -EBADF) { - dev_dbg(bridge, "%s: Failure to Load the EXE\n", - __func__); - } - if (status == -ESPIPE) { - pr_err("%s: Couldn't parse the file\n", - __func__); - } - } - /* Requesting the lowest opp supported */ -#if defined(CONFIG_TIDSPBRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ) - if (pdata->cpu_set_freq) - (*pdata->cpu_set_freq) (pdata->mpu_speed[VDD1_OPP1]); -#endif - - } - if (!status) { - /* Update the Processor status to loaded */ - status = (*p_proc_object->intf_fxns->brd_set_state) - (p_proc_object->bridge_context, BRD_LOADED); - if (!status) { - p_proc_object->proc_state = PROC_LOADED; - if (p_proc_object->ntfy_obj) - proc_notify_clients(p_proc_object, - DSP_PROCESSORSTATECHANGE); - } - } - if (!status) { - status = proc_get_processor_id(hprocessor, &proc_id); - if (proc_id == DSP_UNIT) { - /* Use all available DSP address space after EXTMEM - * for DMM */ - if (!status) - status = cod_get_sym_value(cod_mgr, EXTEND, - &dw_ext_end); - - /* Reset DMM structs and add an initial free chunk */ - if (!status) { - status = - dev_get_dmm_mgr(p_proc_object->dev_obj, - &dmm_mgr); - if (dmm_mgr) { - /* Set dw_ext_end to DMM START u8 - * address */ - dw_ext_end = - (dw_ext_end + 1) * DSPWORDSIZE; - /* DMM memory is from EXT_END */ - status = dmm_create_tables(dmm_mgr, - dw_ext_end, - DMMPOOLSIZE); - } else { - status = -EFAULT; - } - } - } - } - /* Restore the original argv[0] */ - kfree(new_envp); - user_args[0] = pargv0; - if (!status) { - if (!((*p_proc_object->intf_fxns->brd_status) - (p_proc_object->bridge_context, &brd_state))) { - pr_info("%s: Processor Loaded %s\n", __func__, pargv0); - kfree(drv_datap->base_img); - drv_datap->base_img = kstrdup(pargv0, GFP_KERNEL); - if (!drv_datap->base_img) - status = -ENOMEM; - } - } - -func_end: - if (status) { - pr_err("%s: Processor failed to load\n", __func__); - proc_stop(p_proc_object); - } -#ifdef OPT_LOAD_TIME_INSTRUMENTATION - do_gettimeofday(&tv2); - if (tv2.tv_usec < tv1.tv_usec) { - tv2.tv_usec += 1000000; - tv2.tv_sec--; - } - dev_dbg(bridge, "%s: time to load %d sec and %d usec\n", __func__, - tv2.tv_sec - tv1.tv_sec, tv2.tv_usec - tv1.tv_usec); -#endif - return status; -} - -/* - * ======== proc_map ======== - * Purpose: - * Maps a MPU buffer to DSP address space. - */ -int proc_map(void *hprocessor, void *pmpu_addr, u32 ul_size, - void *req_addr, void **pp_map_addr, u32 ul_map_attr, - struct process_context *pr_ctxt) -{ - u32 va_align; - u32 pa_align; - struct dmm_object *dmm_mgr; - u32 size_align; - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct dmm_map_object *map_obj; - u32 tmp_addr = 0; - -#ifdef CONFIG_TIDSPBRIDGE_CACHE_LINE_CHECK - if ((ul_map_attr & BUFMODE_MASK) != RBUF) { - if (!IS_ALIGNED((u32)pmpu_addr, DSP_CACHE_LINE) || - !IS_ALIGNED(ul_size, DSP_CACHE_LINE)) { - pr_err("%s: not aligned: 0x%x (%d)\n", __func__, - (u32)pmpu_addr, ul_size); - return -EFAULT; - } - } -#endif - - /* Calculate the page-aligned PA, VA and size */ - va_align = PG_ALIGN_LOW((u32) req_addr, PG_SIZE4K); - pa_align = PG_ALIGN_LOW((u32) pmpu_addr, PG_SIZE4K); - size_align = PG_ALIGN_HIGH(ul_size + (u32) pmpu_addr - pa_align, - PG_SIZE4K); - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - /* Critical section */ - mutex_lock(&proc_lock); - dmm_get_handle(p_proc_object, &dmm_mgr); - if (dmm_mgr) - status = dmm_map_memory(dmm_mgr, va_align, size_align); - else - status = -EFAULT; - - /* Add mapping to the page tables. */ - if (!status) { - - /* Mapped address = MSB of VA | LSB of PA */ - tmp_addr = (va_align | ((u32) pmpu_addr & (PG_SIZE4K - 1))); - /* mapped memory resource tracking */ - map_obj = add_mapping_info(pr_ctxt, pa_align, tmp_addr, - size_align); - if (!map_obj) - status = -ENOMEM; - else - status = (*p_proc_object->intf_fxns->brd_mem_map) - (p_proc_object->bridge_context, pa_align, va_align, - size_align, ul_map_attr, map_obj->pages); - } - if (!status) { - /* Mapped address = MSB of VA | LSB of PA */ - *pp_map_addr = (void *) tmp_addr; - } else { - remove_mapping_information(pr_ctxt, tmp_addr, size_align); - dmm_un_map_memory(dmm_mgr, va_align, &size_align); - } - mutex_unlock(&proc_lock); - - if (status) - goto func_end; - -func_end: - dev_dbg(bridge, "%s: hprocessor %p, pmpu_addr %p, ul_size %x, " - "req_addr %p, ul_map_attr %x, pp_map_addr %p, va_align %x, " - "pa_align %x, size_align %x status 0x%x\n", __func__, - hprocessor, pmpu_addr, ul_size, req_addr, ul_map_attr, - pp_map_addr, va_align, pa_align, size_align, status); - - return status; -} - -/* - * ======== proc_register_notify ======== - * Purpose: - * Register to be notified of specific processor events. - */ -int proc_register_notify(void *hprocessor, u32 event_mask, - u32 notify_type, struct dsp_notification - *hnotification) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct deh_mgr *hdeh_mgr; - - /* Check processor handle */ - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - /* Check if event mask is a valid processor related event */ - if (event_mask & ~(DSP_PROCESSORSTATECHANGE | DSP_PROCESSORATTACH | - DSP_PROCESSORDETACH | DSP_PROCESSORRESTART | - DSP_MMUFAULT | DSP_SYSERROR | DSP_PWRERROR | - DSP_WDTOVERFLOW)) - status = -EINVAL; - - /* Check if notify type is valid */ - if (notify_type != DSP_SIGNALEVENT) - status = -EINVAL; - - if (!status) { - /* If event mask is not DSP_SYSERROR, DSP_MMUFAULT, - * or DSP_PWRERROR then register event immediately. */ - if (event_mask & - ~(DSP_SYSERROR | DSP_MMUFAULT | DSP_PWRERROR | - DSP_WDTOVERFLOW)) { - status = ntfy_register(p_proc_object->ntfy_obj, - hnotification, event_mask, - notify_type); - /* Special case alert, special case alert! - * If we're trying to *deregister* (i.e. event_mask - * is 0), a DSP_SYSERROR or DSP_MMUFAULT notification, - * we have to deregister with the DEH manager. - * There's no way to know, based on event_mask which - * manager the notification event was registered with, - * so if we're trying to deregister and ntfy_register - * failed, we'll give the deh manager a shot. - */ - if ((event_mask == 0) && status) { - status = - dev_get_deh_mgr(p_proc_object->dev_obj, - &hdeh_mgr); - status = - bridge_deh_register_notify(hdeh_mgr, - event_mask, - notify_type, - hnotification); - } - } else { - status = dev_get_deh_mgr(p_proc_object->dev_obj, - &hdeh_mgr); - status = - bridge_deh_register_notify(hdeh_mgr, - event_mask, - notify_type, - hnotification); - - } - } -func_end: - return status; -} - -/* - * ======== proc_reserve_memory ======== - * Purpose: - * Reserve a virtually contiguous region of DSP address space. - */ -int proc_reserve_memory(void *hprocessor, u32 ul_size, - void **pp_rsv_addr, - struct process_context *pr_ctxt) -{ - struct dmm_object *dmm_mgr; - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct dmm_rsv_object *rsv_obj; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - - status = dmm_get_handle(p_proc_object, &dmm_mgr); - if (!dmm_mgr) { - status = -EFAULT; - goto func_end; - } - - status = dmm_reserve_memory(dmm_mgr, ul_size, (u32 *) pp_rsv_addr); - if (status != 0) - goto func_end; - - /* - * A successful reserve should be followed by insertion of rsv_obj - * into dmm_rsv_list, so that reserved memory resource tracking - * remains uptodate - */ - rsv_obj = kmalloc(sizeof(struct dmm_rsv_object), GFP_KERNEL); - if (rsv_obj) { - rsv_obj->dsp_reserved_addr = (u32) *pp_rsv_addr; - spin_lock(&pr_ctxt->dmm_rsv_lock); - list_add(&rsv_obj->link, &pr_ctxt->dmm_rsv_list); - spin_unlock(&pr_ctxt->dmm_rsv_lock); - } - -func_end: - dev_dbg(bridge, "%s: hprocessor: 0x%p ul_size: 0x%x pp_rsv_addr: 0x%p " - "status 0x%x\n", __func__, hprocessor, - ul_size, pp_rsv_addr, status); - return status; -} - -/* - * ======== proc_start ======== - * Purpose: - * Start a processor running. - */ -int proc_start(void *hprocessor) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct cod_manager *cod_mgr; /* Code manager handle */ - u32 dw_dsp_addr; /* Loaded code's entry point. */ - int brd_state; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - /* Call the bridge_brd_start */ - if (p_proc_object->proc_state != PROC_LOADED) { - status = -EBADR; - goto func_end; - } - status = dev_get_cod_mgr(p_proc_object->dev_obj, &cod_mgr); - if (!cod_mgr) { - status = -EFAULT; - goto func_cont; - } - - status = cod_get_entry(cod_mgr, &dw_dsp_addr); - if (status) - goto func_cont; - - status = (*p_proc_object->intf_fxns->brd_start) - (p_proc_object->bridge_context, dw_dsp_addr); - if (status) - goto func_cont; - - /* Call dev_create2 */ - status = dev_create2(p_proc_object->dev_obj); - if (!status) { - p_proc_object->proc_state = PROC_RUNNING; - /* Deep sleep switces off the peripheral clocks. - * we just put the DSP CPU in idle in the idle loop. - * so there is no need to send a command to DSP */ - - if (p_proc_object->ntfy_obj) { - proc_notify_clients(p_proc_object, - DSP_PROCESSORSTATECHANGE); - } - } else { - /* Failed to Create Node Manager and DISP Object - * Stop the Processor from running. Put it in STOPPED State */ - (void)(*p_proc_object->intf_fxns-> - brd_stop) (p_proc_object->bridge_context); - p_proc_object->proc_state = PROC_STOPPED; - } -func_cont: - if (!status) { - if (!((*p_proc_object->intf_fxns->brd_status) - (p_proc_object->bridge_context, &brd_state))) { - pr_info("%s: dsp in running state\n", __func__); - } - } else { - pr_err("%s: Failed to start the dsp\n", __func__); - proc_stop(p_proc_object); - } - -func_end: - return status; -} - -/* - * ======== proc_stop ======== - * Purpose: - * Stop a processor running. - */ -int proc_stop(void *hprocessor) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct msg_mgr *hmsg_mgr; - struct node_mgr *hnode_mgr; - void *hnode; - u32 node_tab_size = 1; - u32 num_nodes = 0; - u32 nodes_allocated = 0; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - /* check if there are any running nodes */ - status = dev_get_node_manager(p_proc_object->dev_obj, &hnode_mgr); - if (!status && hnode_mgr) { - status = node_enum_nodes(hnode_mgr, &hnode, node_tab_size, - &num_nodes, &nodes_allocated); - if ((status == -EINVAL) || (nodes_allocated > 0)) { - pr_err("%s: Can't stop device, active nodes = %d\n", - __func__, nodes_allocated); - return -EBADR; - } - } - /* Call the bridge_brd_stop */ - /* It is OK to stop a device that does n't have nodes OR not started */ - status = - (*p_proc_object->intf_fxns-> - brd_stop) (p_proc_object->bridge_context); - if (!status) { - dev_dbg(bridge, "%s: processor in standby mode\n", __func__); - p_proc_object->proc_state = PROC_STOPPED; - /* Destroy the Node Manager, msg_ctrl Manager */ - if (!(dev_destroy2(p_proc_object->dev_obj))) { - /* Destroy the msg_ctrl by calling msg_delete */ - dev_get_msg_mgr(p_proc_object->dev_obj, &hmsg_mgr); - if (hmsg_mgr) { - msg_delete(hmsg_mgr); - dev_set_msg_mgr(p_proc_object->dev_obj, NULL); - } - } - } else { - pr_err("%s: Failed to stop the processor\n", __func__); - } -func_end: - - return status; -} - -/* - * ======== proc_un_map ======== - * Purpose: - * Removes a MPU buffer mapping from the DSP address space. - */ -int proc_un_map(void *hprocessor, void *map_addr, - struct process_context *pr_ctxt) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct dmm_object *dmm_mgr; - u32 va_align; - u32 size_align; - - va_align = PG_ALIGN_LOW((u32) map_addr, PG_SIZE4K); - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - - status = dmm_get_handle(hprocessor, &dmm_mgr); - if (!dmm_mgr) { - status = -EFAULT; - goto func_end; - } - - /* Critical section */ - mutex_lock(&proc_lock); - /* - * Update DMM structures. Get the size to unmap. - * This function returns error if the VA is not mapped - */ - status = dmm_un_map_memory(dmm_mgr, (u32) va_align, &size_align); - /* Remove mapping from the page tables. */ - if (!status) { - status = (*p_proc_object->intf_fxns->brd_mem_un_map) - (p_proc_object->bridge_context, va_align, size_align); - } - - if (status) - goto unmap_failed; - - /* - * A successful unmap should be followed by removal of map_obj - * from dmm_map_list, so that mapped memory resource tracking - * remains uptodate - */ - remove_mapping_information(pr_ctxt, (u32) map_addr, size_align); - -unmap_failed: - mutex_unlock(&proc_lock); - -func_end: - dev_dbg(bridge, "%s: hprocessor: 0x%p map_addr: 0x%p status: 0x%x\n", - __func__, hprocessor, map_addr, status); - return status; -} - -/* - * ======== proc_un_reserve_memory ======== - * Purpose: - * Frees a previously reserved region of DSP address space. - */ -int proc_un_reserve_memory(void *hprocessor, void *prsv_addr, - struct process_context *pr_ctxt) -{ - struct dmm_object *dmm_mgr; - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)hprocessor; - struct dmm_rsv_object *rsv_obj; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - - status = dmm_get_handle(p_proc_object, &dmm_mgr); - if (!dmm_mgr) { - status = -EFAULT; - goto func_end; - } - - status = dmm_un_reserve_memory(dmm_mgr, (u32) prsv_addr); - if (status != 0) - goto func_end; - - /* - * A successful unreserve should be followed by removal of rsv_obj - * from dmm_rsv_list, so that reserved memory resource tracking - * remains uptodate - */ - spin_lock(&pr_ctxt->dmm_rsv_lock); - list_for_each_entry(rsv_obj, &pr_ctxt->dmm_rsv_list, link) { - if (rsv_obj->dsp_reserved_addr == (u32) prsv_addr) { - list_del(&rsv_obj->link); - kfree(rsv_obj); - break; - } - } - spin_unlock(&pr_ctxt->dmm_rsv_lock); - -func_end: - dev_dbg(bridge, "%s: hprocessor: 0x%p prsv_addr: 0x%p status: 0x%x\n", - __func__, hprocessor, prsv_addr, status); - return status; -} - -/* - * ======== = proc_monitor ======== == - * Purpose: - * Place the Processor in Monitor State. This is an internal - * function and a requirement before Processor is loaded. - * This does a bridge_brd_stop, dev_destroy2 and bridge_brd_monitor. - * In dev_destroy2 we delete the node manager. - * Parameters: - * p_proc_object: Pointer to Processor Object - * Returns: - * 0: Processor placed in monitor mode. - * !0: Failed to place processor in monitor mode. - * Requires: - * Valid Processor Handle - * Ensures: - * Success: ProcObject state is PROC_IDLE - */ -static int proc_monitor(struct proc_object *proc_obj) -{ - int status = -EPERM; - struct msg_mgr *hmsg_mgr; - - /* This is needed only when Device is loaded when it is - * already 'ACTIVE' */ - /* Destroy the Node Manager, msg_ctrl Manager */ - if (!dev_destroy2(proc_obj->dev_obj)) { - /* Destroy the msg_ctrl by calling msg_delete */ - dev_get_msg_mgr(proc_obj->dev_obj, &hmsg_mgr); - if (hmsg_mgr) { - msg_delete(hmsg_mgr); - dev_set_msg_mgr(proc_obj->dev_obj, NULL); - } - } - /* Place the Board in the Monitor State */ - if (!((*proc_obj->intf_fxns->brd_monitor) - (proc_obj->bridge_context))) { - status = 0; - } - - return status; -} - -/* - * ======== get_envp_count ======== - * Purpose: - * Return the number of elements in the envp array, including the - * terminating NULL element. - */ -static s32 get_envp_count(char **envp) -{ - s32 ret = 0; - - if (envp) { - while (*envp++) - ret++; - - ret += 1; /* Include the terminating NULL in the count. */ - } - - return ret; -} - -/* - * ======== prepend_envp ======== - * Purpose: - * Prepend an environment variable=value pair to the new envp array, and - * copy in the existing var=value pairs in the old envp array. - */ -static char **prepend_envp(char **new_envp, char **envp, s32 envp_elems, - s32 cnew_envp, char *sz_var) -{ - char **pp_envp = new_envp; - - /* Prepend new environ var=value string */ - *new_envp++ = sz_var; - - /* Copy user's environment into our own. */ - while (envp_elems--) - *new_envp++ = *envp++; - - /* Ensure NULL terminates the new environment strings array. */ - if (envp_elems == 0) - *new_envp = NULL; - - return pp_envp; -} - -/* - * ======== proc_notify_clients ======== - * Purpose: - * Notify the processor the events. - */ -int proc_notify_clients(void *proc, u32 events) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)proc; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - - ntfy_notify(p_proc_object->ntfy_obj, events); -func_end: - return status; -} - -/* - * ======== proc_notify_all_clients ======== - * Purpose: - * Notify the processor the events. This includes notifying all clients - * attached to a particulat DSP. - */ -int proc_notify_all_clients(void *proc, u32 events) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)proc; - - if (!p_proc_object) { - status = -EFAULT; - goto func_end; - } - - dev_notify_clients(p_proc_object->dev_obj, events); - -func_end: - return status; -} - -/* - * ======== proc_get_processor_id ======== - * Purpose: - * Retrieves the processor ID. - */ -int proc_get_processor_id(void *proc, u32 *proc_id) -{ - int status = 0; - struct proc_object *p_proc_object = (struct proc_object *)proc; - - if (p_proc_object) - *proc_id = p_proc_object->processor_id; - else - status = -EFAULT; - - return status; -} diff --git a/drivers/staging/tidspbridge/rmgr/pwr.c b/drivers/staging/tidspbridge/rmgr/pwr.c deleted file mode 100644 index 17748df351b9..000000000000 --- a/drivers/staging/tidspbridge/rmgr/pwr.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * pwr.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * PWR API for controlling DSP power states. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- This */ -#include - -/* ----------------------------------- Resource Manager */ -#include -#include - -/* ----------------------------------- Platform Manager */ -#include - -/* ----------------------------------- Link Driver */ -#include - -/* - * ======== pwr_sleep_dsp ======== - * Send command to DSP to enter sleep state. - */ -int pwr_sleep_dsp(const u32 sleep_code, const u32 timeout) -{ - struct bridge_drv_interface *intf_fxns; - struct bridge_dev_context *dw_context; - int status = -EPERM; - struct dev_object *hdev_obj = NULL; - u32 ioctlcode = 0; - u32 arg = timeout; - - for (hdev_obj = (struct dev_object *)drv_get_first_dev_object(); - hdev_obj != NULL; - hdev_obj = - (struct dev_object *)drv_get_next_dev_object((u32) hdev_obj)) { - if (dev_get_bridge_context(hdev_obj, - (struct bridge_dev_context **) - &dw_context)) { - continue; - } - if (dev_get_intf_fxns(hdev_obj, - (struct bridge_drv_interface **) - &intf_fxns)) { - continue; - } - if (sleep_code == PWR_DEEPSLEEP) - ioctlcode = BRDIOCTL_DEEPSLEEP; - else if (sleep_code == PWR_EMERGENCYDEEPSLEEP) - ioctlcode = BRDIOCTL_EMERGENCYSLEEP; - else - status = -EINVAL; - - if (status != -EINVAL) { - status = (*intf_fxns->dev_cntrl) (dw_context, - ioctlcode, - (void *)&arg); - } - } - return status; -} - -/* - * ======== pwr_wake_dsp ======== - * Send command to DSP to wake it from sleep. - */ -int pwr_wake_dsp(const u32 timeout) -{ - struct bridge_drv_interface *intf_fxns; - struct bridge_dev_context *dw_context; - int status = -EPERM; - struct dev_object *hdev_obj = NULL; - u32 arg = timeout; - - for (hdev_obj = (struct dev_object *)drv_get_first_dev_object(); - hdev_obj != NULL; - hdev_obj = (struct dev_object *)drv_get_next_dev_object - ((u32) hdev_obj)) { - if (!(dev_get_bridge_context(hdev_obj, - (struct bridge_dev_context - **)&dw_context))) { - if (!(dev_get_intf_fxns(hdev_obj, - (struct bridge_drv_interface **)&intf_fxns))) { - status = - (*intf_fxns->dev_cntrl) (dw_context, - BRDIOCTL_WAKEUP, - (void *)&arg); - } - } - } - return status; -} - -/* - * ======== pwr_pm_pre_scale======== - * Sends pre-notification message to DSP. - */ -int pwr_pm_pre_scale(u16 voltage_domain, u32 level) -{ - struct bridge_drv_interface *intf_fxns; - struct bridge_dev_context *dw_context; - int status = -EPERM; - struct dev_object *hdev_obj = NULL; - u32 arg[2]; - - arg[0] = voltage_domain; - arg[1] = level; - - for (hdev_obj = (struct dev_object *)drv_get_first_dev_object(); - hdev_obj != NULL; - hdev_obj = (struct dev_object *)drv_get_next_dev_object - ((u32) hdev_obj)) { - if (!(dev_get_bridge_context(hdev_obj, - (struct bridge_dev_context - **)&dw_context))) { - if (!(dev_get_intf_fxns(hdev_obj, - (struct bridge_drv_interface **)&intf_fxns))) { - status = - (*intf_fxns->dev_cntrl) (dw_context, - BRDIOCTL_PRESCALE_NOTIFY, - (void *)&arg); - } - } - } - return status; -} - -/* - * ======== pwr_pm_post_scale======== - * Sends post-notification message to DSP. - */ -int pwr_pm_post_scale(u16 voltage_domain, u32 level) -{ - struct bridge_drv_interface *intf_fxns; - struct bridge_dev_context *dw_context; - int status = -EPERM; - struct dev_object *hdev_obj = NULL; - u32 arg[2]; - - arg[0] = voltage_domain; - arg[1] = level; - - for (hdev_obj = (struct dev_object *)drv_get_first_dev_object(); - hdev_obj != NULL; - hdev_obj = (struct dev_object *)drv_get_next_dev_object - ((u32) hdev_obj)) { - if (!(dev_get_bridge_context(hdev_obj, - (struct bridge_dev_context - **)&dw_context))) { - if (!(dev_get_intf_fxns(hdev_obj, - (struct bridge_drv_interface **)&intf_fxns))) { - status = - (*intf_fxns->dev_cntrl) (dw_context, - BRDIOCTL_POSTSCALE_NOTIFY, - (void *)&arg); - } - } - } - return status; - -} diff --git a/drivers/staging/tidspbridge/rmgr/rmm.c b/drivers/staging/tidspbridge/rmgr/rmm.c deleted file mode 100644 index 52187bd97729..000000000000 --- a/drivers/staging/tidspbridge/rmgr/rmm.c +++ /dev/null @@ -1,456 +0,0 @@ -/* - * rmm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * This memory manager provides general heap management and arbitrary - * alignment for any number of memory segments. - * - * Notes: - * - * Memory blocks are allocated from the end of the first free memory - * block large enough to satisfy the request. Alignment requirements - * are satisfied by "sliding" the block forward until its base satisfies - * the alignment specification; if this is not possible then the next - * free block large enough to hold the request is tried. - * - * Since alignment can cause the creation of a new free block - the - * unused memory formed between the start of the original free block - * and the start of the allocated block - the memory manager must free - * this memory to prevent a memory leak. - * - * Overlay memory is managed by reserving through rmm_alloc, and freeing - * it through rmm_free. The memory manager prevents DSP code/data that is - * overlayed from being overwritten as long as the memory it runs at has - * been allocated, and not yet freed. - */ - -#include -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- This */ -#include - -/* - * ======== rmm_header ======== - * This header is used to maintain a list of free memory blocks. - */ -struct rmm_header { - struct rmm_header *next; /* form a free memory link list */ - u32 size; /* size of the free memory */ - u32 addr; /* DSP address of memory block */ -}; - -/* - * ======== rmm_ovly_sect ======== - * Keeps track of memory occupied by overlay section. - */ -struct rmm_ovly_sect { - struct list_head list_elem; - u32 addr; /* Start of memory section */ - u32 size; /* Length (target MAUs) of section */ - s32 page; /* Memory page */ -}; - -/* - * ======== rmm_target_obj ======== - */ -struct rmm_target_obj { - struct rmm_segment *seg_tab; - struct rmm_header **free_list; - u32 num_segs; - struct list_head ovly_list; /* List of overlay memory in use */ -}; - -static bool alloc_block(struct rmm_target_obj *target, u32 segid, u32 size, - u32 align, u32 *dsp_address); -static bool free_block(struct rmm_target_obj *target, u32 segid, u32 addr, - u32 size); - -/* - * ======== rmm_alloc ======== - */ -int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - u32 align, u32 *dsp_address, bool reserve) -{ - struct rmm_ovly_sect *sect, *prev_sect = NULL; - struct rmm_ovly_sect *new_sect; - u32 addr; - int status = 0; - - if (!reserve) { - if (!alloc_block(target, segid, size, align, dsp_address)) { - status = -ENOMEM; - } else { - /* Increment the number of allocated blocks in this - * segment */ - target->seg_tab[segid].number++; - } - goto func_end; - } - /* An overlay section - See if block is already in use. If not, - * insert into the list in ascending address size. */ - addr = *dsp_address; - /* Find place to insert new list element. List is sorted from - * smallest to largest address. */ - list_for_each_entry(sect, &target->ovly_list, list_elem) { - if (addr <= sect->addr) { - /* Check for overlap with sect */ - if ((addr + size > sect->addr) || (prev_sect && - (prev_sect->addr + - prev_sect->size > - addr))) { - status = -ENXIO; - } - break; - } - prev_sect = sect; - } - if (!status) { - /* No overlap - allocate list element for new section. */ - new_sect = kzalloc(sizeof(struct rmm_ovly_sect), GFP_KERNEL); - if (new_sect == NULL) { - status = -ENOMEM; - } else { - new_sect->addr = addr; - new_sect->size = size; - new_sect->page = segid; - if (list_is_last(§->list_elem, &target->ovly_list)) - /* Put new section at the end of the list */ - list_add_tail(&new_sect->list_elem, - &target->ovly_list); - else - /* Put new section just before sect */ - list_add_tail(&new_sect->list_elem, - §->list_elem); - } - } -func_end: - return status; -} - -/* - * ======== rmm_create ======== - */ -int rmm_create(struct rmm_target_obj **target_obj, - struct rmm_segment seg_tab[], u32 num_segs) -{ - struct rmm_header *hptr; - struct rmm_segment *sptr, *tmp; - struct rmm_target_obj *target; - s32 i; - int status = 0; - - /* Allocate DBL target object */ - target = kzalloc(sizeof(struct rmm_target_obj), GFP_KERNEL); - - if (target == NULL) - status = -ENOMEM; - - if (status) - goto func_cont; - - target->num_segs = num_segs; - if (!(num_segs > 0)) - goto func_cont; - - /* Allocate the memory for freelist from host's memory */ - target->free_list = kzalloc(num_segs * sizeof(struct rmm_header *), - GFP_KERNEL); - if (target->free_list == NULL) { - status = -ENOMEM; - } else { - /* Allocate headers for each element on the free list */ - for (i = 0; i < (s32) num_segs; i++) { - target->free_list[i] = - kzalloc(sizeof(struct rmm_header), GFP_KERNEL); - if (target->free_list[i] == NULL) { - status = -ENOMEM; - break; - } - } - /* Allocate memory for initial segment table */ - target->seg_tab = kzalloc(num_segs * sizeof(struct rmm_segment), - GFP_KERNEL); - if (target->seg_tab == NULL) { - status = -ENOMEM; - } else { - /* Initialize segment table and free list */ - sptr = target->seg_tab; - for (i = 0, tmp = seg_tab; num_segs > 0; - num_segs--, i++) { - *sptr = *tmp; - hptr = target->free_list[i]; - hptr->addr = tmp->base; - hptr->size = tmp->length; - hptr->next = NULL; - tmp++; - sptr++; - } - } - } -func_cont: - /* Initialize overlay memory list */ - if (!status) - INIT_LIST_HEAD(&target->ovly_list); - - if (!status) { - *target_obj = target; - } else { - *target_obj = NULL; - if (target) - rmm_delete(target); - - } - - return status; -} - -/* - * ======== rmm_delete ======== - */ -void rmm_delete(struct rmm_target_obj *target) -{ - struct rmm_ovly_sect *sect, *tmp; - struct rmm_header *hptr; - struct rmm_header *next; - u32 i; - - kfree(target->seg_tab); - - list_for_each_entry_safe(sect, tmp, &target->ovly_list, list_elem) { - list_del(§->list_elem); - kfree(sect); - } - - if (target->free_list != NULL) { - /* Free elements on freelist */ - for (i = 0; i < target->num_segs; i++) { - hptr = next = target->free_list[i]; - while (next) { - hptr = next; - next = hptr->next; - kfree(hptr); - } - } - kfree(target->free_list); - } - - kfree(target); -} - -/* - * ======== rmm_free ======== - */ -bool rmm_free(struct rmm_target_obj *target, u32 segid, u32 dsp_addr, u32 size, - bool reserved) -{ - struct rmm_ovly_sect *sect, *tmp; - bool ret = false; - - /* - * Free or unreserve memory. - */ - if (!reserved) { - ret = free_block(target, segid, dsp_addr, size); - if (ret) - target->seg_tab[segid].number--; - - } else { - /* Unreserve memory */ - list_for_each_entry_safe(sect, tmp, &target->ovly_list, - list_elem) { - if (dsp_addr == sect->addr) { - /* Remove from list */ - list_del(§->list_elem); - kfree(sect); - return true; - } - } - } - return ret; -} - -/* - * ======== rmm_stat ======== - */ -bool rmm_stat(struct rmm_target_obj *target, enum dsp_memtype segid, - struct dsp_memstat *mem_stat_buf) -{ - struct rmm_header *head; - bool ret = false; - u32 max_free_size = 0; - u32 total_free_size = 0; - u32 free_blocks = 0; - - if ((u32) segid < target->num_segs) { - head = target->free_list[segid]; - - /* Collect data from free_list */ - while (head != NULL) { - max_free_size = max(max_free_size, head->size); - total_free_size += head->size; - free_blocks++; - head = head->next; - } - - /* ul_size */ - mem_stat_buf->size = target->seg_tab[segid].length; - - /* num_free_blocks */ - mem_stat_buf->num_free_blocks = free_blocks; - - /* total_free_size */ - mem_stat_buf->total_free_size = total_free_size; - - /* len_max_free_block */ - mem_stat_buf->len_max_free_block = max_free_size; - - /* num_alloc_blocks */ - mem_stat_buf->num_alloc_blocks = - target->seg_tab[segid].number; - - ret = true; - } - - return ret; -} - -/* - * ======== balloc ======== - * This allocation function allocates memory from the lowest addresses - * first. - */ -static bool alloc_block(struct rmm_target_obj *target, u32 segid, u32 size, - u32 align, u32 *dsp_address) -{ - struct rmm_header *head; - struct rmm_header *prevhead = NULL; - struct rmm_header *next; - u32 tmpalign; - u32 alignbytes; - u32 hsize; - u32 allocsize; - u32 addr; - - alignbytes = (align == 0) ? 1 : align; - prevhead = NULL; - head = target->free_list[segid]; - - do { - hsize = head->size; - next = head->next; - - addr = head->addr; /* alloc from the bottom */ - - /* align allocation */ - (tmpalign = (u32) addr % alignbytes); - if (tmpalign != 0) - tmpalign = alignbytes - tmpalign; - - allocsize = size + tmpalign; - - if (hsize >= allocsize) { /* big enough */ - if (hsize == allocsize && prevhead != NULL) { - prevhead->next = next; - kfree(head); - } else { - head->size = hsize - allocsize; - head->addr += allocsize; - } - - /* free up any hole created by alignment */ - if (tmpalign) - free_block(target, segid, addr, tmpalign); - - *dsp_address = addr + tmpalign; - return true; - } - - prevhead = head; - head = next; - - } while (head != NULL); - - return false; -} - -/* - * ======== free_block ======== - * TO DO: free_block() allocates memory, which could result in failure. - * Could allocate an rmm_header in rmm_alloc(), to be kept in a pool. - * free_block() could use an rmm_header from the pool, freeing as blocks - * are coalesced. - */ -static bool free_block(struct rmm_target_obj *target, u32 segid, u32 addr, - u32 size) -{ - struct rmm_header *head; - struct rmm_header *thead; - struct rmm_header *rhead; - bool ret = true; - - /* Create a memory header to hold the newly free'd block. */ - rhead = kzalloc(sizeof(struct rmm_header), GFP_KERNEL); - if (rhead == NULL) { - ret = false; - } else { - /* search down the free list to find the right place for addr */ - head = target->free_list[segid]; - - if (addr >= head->addr) { - while (head->next != NULL && addr > head->next->addr) - head = head->next; - - thead = head->next; - - head->next = rhead; - rhead->next = thead; - rhead->addr = addr; - rhead->size = size; - } else { - *rhead = *head; - head->next = rhead; - head->addr = addr; - head->size = size; - thead = rhead->next; - } - - /* join with upper block, if possible */ - if (thead != NULL && (rhead->addr + rhead->size) == - thead->addr) { - head->next = rhead->next; - thead->size = size + thead->size; - thead->addr = addr; - kfree(rhead); - rhead = thead; - } - - /* join with the lower block, if possible */ - if ((head->addr + head->size) == rhead->addr) { - head->next = rhead->next; - head->size = head->size + rhead->size; - kfree(rhead); - } - } - - return ret; -} diff --git a/drivers/staging/tidspbridge/rmgr/strm.c b/drivers/staging/tidspbridge/rmgr/strm.c deleted file mode 100644 index b88b27bbe2e7..000000000000 --- a/drivers/staging/tidspbridge/rmgr/strm.c +++ /dev/null @@ -1,733 +0,0 @@ -/* - * strm.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * DSP/BIOS Bridge Stream Manager. - * - * Copyright (C) 2005-2006 Texas Instruments, Inc. - * - * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include - -/* ----------------------------------- Host OS */ -#include - -/* ----------------------------------- DSP/BIOS Bridge */ -#include - -/* ----------------------------------- OS Adaptation Layer */ -#include - -/* ----------------------------------- Bridge Driver */ -#include - -/* ----------------------------------- Resource Manager */ -#include - -/* ----------------------------------- Others */ -#include - -/* ----------------------------------- This */ -#include - -#include - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define DEFAULTTIMEOUT 10000 -#define DEFAULTNUMBUFS 2 - -/* - * ======== strm_mgr ======== - * The strm_mgr contains device information needed to open the underlying - * channels of a stream. - */ -struct strm_mgr { - struct dev_object *dev_obj; /* Device for this processor */ - struct chnl_mgr *chnl_mgr; /* Channel manager */ - /* Function interface to Bridge driver */ - struct bridge_drv_interface *intf_fxns; -}; - -/* - * ======== strm_object ======== - * This object is allocated in strm_open(). - */ -struct strm_object { - struct strm_mgr *strm_mgr_obj; - struct chnl_object *chnl_obj; - u32 dir; /* DSP_TONODE or DSP_FROMNODE */ - u32 timeout; - u32 num_bufs; /* Max # of bufs allowed in stream */ - u32 bufs_in_strm; /* Current # of bufs in stream */ - u32 bytes; /* bytes transferred since idled */ - /* STREAM_IDLE, STREAM_READY, ... */ - enum dsp_streamstate strm_state; - void *user_event; /* Saved for strm_get_info() */ - enum dsp_strmmode strm_mode; /* STRMMODE_[PROCCOPY][ZEROCOPY]... */ - u32 dma_chnl_id; /* DMA chnl id */ - u32 dma_priority; /* DMA priority:DMAPRI_[LOW][HIGH] */ - u32 segment_id; /* >0 is SM segment.=0 is local heap */ - u32 buf_alignment; /* Alignment for stream bufs */ - /* Stream's SM address translator */ - struct cmm_xlatorobject *xlator; -}; - -/* ----------------------------------- Function Prototypes */ -static int delete_strm(struct strm_object *stream_obj); - -/* - * ======== strm_allocate_buffer ======== - * Purpose: - * Allocates buffers for a stream. - */ -int strm_allocate_buffer(struct strm_res_object *strmres, u32 usize, - u8 **ap_buffer, u32 num_bufs, - struct process_context *pr_ctxt) -{ - int status = 0; - u32 alloc_cnt = 0; - u32 i; - struct strm_object *stream_obj = strmres->stream; - - if (stream_obj) { - /* - * Allocate from segment specified at time of stream open. - */ - if (usize == 0) - status = -EINVAL; - - } else { - status = -EFAULT; - } - - if (status) - goto func_end; - - for (i = 0; i < num_bufs; i++) { - (void)cmm_xlator_alloc_buf(stream_obj->xlator, &ap_buffer[i], - usize); - if (ap_buffer[i] == NULL) { - status = -ENOMEM; - alloc_cnt = i; - break; - } - } - if (status) - strm_free_buffer(strmres, ap_buffer, alloc_cnt, pr_ctxt); - - if (status) - goto func_end; - - drv_proc_update_strm_res(num_bufs, strmres); - -func_end: - return status; -} - -/* - * ======== strm_close ======== - * Purpose: - * Close a stream opened with strm_open(). - */ -int strm_close(struct strm_res_object *strmres, - struct process_context *pr_ctxt) -{ - struct bridge_drv_interface *intf_fxns; - struct chnl_info chnl_info_obj; - int status = 0; - struct strm_object *stream_obj = strmres->stream; - - if (!stream_obj) { - status = -EFAULT; - } else { - /* Have all buffers been reclaimed? If not, return - * -EPIPE */ - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - status = - (*intf_fxns->chnl_get_info) (stream_obj->chnl_obj, - &chnl_info_obj); - - if (chnl_info_obj.cio_cs > 0 || chnl_info_obj.cio_reqs > 0) - status = -EPIPE; - else - status = delete_strm(stream_obj); - } - - if (status) - goto func_end; - - idr_remove(pr_ctxt->stream_id, strmres->id); -func_end: - dev_dbg(bridge, "%s: stream_obj: %p, status 0x%x\n", __func__, - stream_obj, status); - return status; -} - -/* - * ======== strm_create ======== - * Purpose: - * Create a STRM manager object. - */ -int strm_create(struct strm_mgr **strm_man, - struct dev_object *dev_obj) -{ - struct strm_mgr *strm_mgr_obj; - int status = 0; - - *strm_man = NULL; - /* Allocate STRM manager object */ - strm_mgr_obj = kzalloc(sizeof(struct strm_mgr), GFP_KERNEL); - if (strm_mgr_obj == NULL) - status = -ENOMEM; - else - strm_mgr_obj->dev_obj = dev_obj; - - /* Get Channel manager and Bridge function interface */ - if (!status) { - status = dev_get_chnl_mgr(dev_obj, &(strm_mgr_obj->chnl_mgr)); - if (!status) { - (void)dev_get_intf_fxns(dev_obj, - &(strm_mgr_obj->intf_fxns)); - } - } - - if (!status) - *strm_man = strm_mgr_obj; - else - kfree(strm_mgr_obj); - - return status; -} - -/* - * ======== strm_delete ======== - * Purpose: - * Delete the STRM Manager Object. - */ -void strm_delete(struct strm_mgr *strm_mgr_obj) -{ - kfree(strm_mgr_obj); -} - -/* - * ======== strm_free_buffer ======== - * Purpose: - * Frees the buffers allocated for a stream. - */ -int strm_free_buffer(struct strm_res_object *strmres, u8 **ap_buffer, - u32 num_bufs, struct process_context *pr_ctxt) -{ - int status = 0; - u32 i = 0; - struct strm_object *stream_obj = strmres->stream; - - if (!stream_obj) - status = -EFAULT; - - if (!status) { - for (i = 0; i < num_bufs; i++) { - status = - cmm_xlator_free_buf(stream_obj->xlator, - ap_buffer[i]); - if (status) - break; - ap_buffer[i] = NULL; - } - } - drv_proc_update_strm_res(num_bufs - i, strmres); - - return status; -} - -/* - * ======== strm_get_info ======== - * Purpose: - * Retrieves information about a stream. - */ -int strm_get_info(struct strm_object *stream_obj, - struct stream_info *stream_info, - u32 stream_info_size) -{ - struct bridge_drv_interface *intf_fxns; - struct chnl_info chnl_info_obj; - int status = 0; - void *virt_base = NULL; /* NULL if no SM used */ - - if (!stream_obj) { - status = -EFAULT; - } else { - if (stream_info_size < sizeof(struct stream_info)) { - /* size of users info */ - status = -EINVAL; - } - } - if (status) - goto func_end; - - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - status = - (*intf_fxns->chnl_get_info) (stream_obj->chnl_obj, - &chnl_info_obj); - if (status) - goto func_end; - - if (stream_obj->xlator) { - /* We have a translator */ - cmm_xlator_info(stream_obj->xlator, (u8 **) &virt_base, 0, - stream_obj->segment_id, false); - } - stream_info->segment_id = stream_obj->segment_id; - stream_info->strm_mode = stream_obj->strm_mode; - stream_info->virt_base = virt_base; - stream_info->user_strm->number_bufs_allowed = stream_obj->num_bufs; - stream_info->user_strm->number_bufs_in_stream = chnl_info_obj.cio_cs + - chnl_info_obj.cio_reqs; - /* # of bytes transferred since last call to DSPStream_Idle() */ - stream_info->user_strm->number_bytes = chnl_info_obj.bytes_tx; - stream_info->user_strm->sync_object_handle = chnl_info_obj.event_obj; - /* Determine stream state based on channel state and info */ - if (chnl_info_obj.state & CHNL_STATEEOS) { - stream_info->user_strm->ss_stream_state = STREAM_DONE; - } else { - if (chnl_info_obj.cio_cs > 0) - stream_info->user_strm->ss_stream_state = STREAM_READY; - else if (chnl_info_obj.cio_reqs > 0) - stream_info->user_strm->ss_stream_state = - STREAM_PENDING; - else - stream_info->user_strm->ss_stream_state = STREAM_IDLE; - - } -func_end: - return status; -} - -/* - * ======== strm_idle ======== - * Purpose: - * Idles a particular stream. - */ -int strm_idle(struct strm_object *stream_obj, bool flush_data) -{ - struct bridge_drv_interface *intf_fxns; - int status = 0; - - if (!stream_obj) { - status = -EFAULT; - } else { - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - - status = (*intf_fxns->chnl_idle) (stream_obj->chnl_obj, - stream_obj->timeout, - flush_data); - } - - dev_dbg(bridge, "%s: stream_obj: %p flush_data: 0x%x status: 0x%x\n", - __func__, stream_obj, flush_data, status); - return status; -} - -/* - * ======== strm_issue ======== - * Purpose: - * Issues a buffer on a stream - */ -int strm_issue(struct strm_object *stream_obj, u8 *pbuf, u32 ul_bytes, - u32 ul_buf_size, u32 dw_arg) -{ - struct bridge_drv_interface *intf_fxns; - int status = 0; - void *tmp_buf = NULL; - - if (!stream_obj) { - status = -EFAULT; - } else { - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - - if (stream_obj->segment_id != 0) { - tmp_buf = cmm_xlator_translate(stream_obj->xlator, - (void *)pbuf, - CMM_VA2DSPPA); - if (tmp_buf == NULL) - status = -ESRCH; - - } - if (!status) { - status = (*intf_fxns->chnl_add_io_req) - (stream_obj->chnl_obj, pbuf, ul_bytes, ul_buf_size, - (u32) tmp_buf, dw_arg); - } - if (status == -EIO) - status = -ENOSR; - } - - dev_dbg(bridge, "%s: stream_obj: %p pbuf: %p ul_bytes: 0x%x dw_arg:" - " 0x%x status: 0x%x\n", __func__, stream_obj, pbuf, - ul_bytes, dw_arg, status); - return status; -} - -/* - * ======== strm_open ======== - * Purpose: - * Open a stream for sending/receiving data buffers to/from a task or - * XDAIS socket node on the DSP. - */ -int strm_open(struct node_object *hnode, u32 dir, u32 index, - struct strm_attr *pattr, - struct strm_res_object **strmres, - struct process_context *pr_ctxt) -{ - struct strm_mgr *strm_mgr_obj; - struct bridge_drv_interface *intf_fxns; - u32 ul_chnl_id; - struct strm_object *strm_obj = NULL; - s8 chnl_mode; - struct chnl_attr chnl_attr_obj; - int status = 0; - struct cmm_object *hcmm_mgr = NULL; /* Shared memory manager hndl */ - - void *stream_res; - - *strmres = NULL; - if (dir != DSP_TONODE && dir != DSP_FROMNODE) { - status = -EPERM; - } else { - /* Get the channel id from the node (set in node_connect()) */ - status = node_get_channel_id(hnode, dir, index, &ul_chnl_id); - } - if (!status) - status = node_get_strm_mgr(hnode, &strm_mgr_obj); - - if (!status) { - strm_obj = kzalloc(sizeof(struct strm_object), GFP_KERNEL); - if (strm_obj == NULL) { - status = -ENOMEM; - } else { - strm_obj->strm_mgr_obj = strm_mgr_obj; - strm_obj->dir = dir; - strm_obj->strm_state = STREAM_IDLE; - strm_obj->user_event = pattr->user_event; - if (pattr->stream_attr_in != NULL) { - strm_obj->timeout = - pattr->stream_attr_in->timeout; - strm_obj->num_bufs = - pattr->stream_attr_in->num_bufs; - strm_obj->strm_mode = - pattr->stream_attr_in->strm_mode; - strm_obj->segment_id = - pattr->stream_attr_in->segment_id; - strm_obj->buf_alignment = - pattr->stream_attr_in->buf_alignment; - strm_obj->dma_chnl_id = - pattr->stream_attr_in->dma_chnl_id; - strm_obj->dma_priority = - pattr->stream_attr_in->dma_priority; - chnl_attr_obj.uio_reqs = - pattr->stream_attr_in->num_bufs; - } else { - strm_obj->timeout = DEFAULTTIMEOUT; - strm_obj->num_bufs = DEFAULTNUMBUFS; - strm_obj->strm_mode = STRMMODE_PROCCOPY; - strm_obj->segment_id = 0; /* local mem */ - strm_obj->buf_alignment = 0; - strm_obj->dma_chnl_id = 0; - strm_obj->dma_priority = 0; - chnl_attr_obj.uio_reqs = DEFAULTNUMBUFS; - } - chnl_attr_obj.reserved1 = NULL; - /* DMA chnl flush timeout */ - chnl_attr_obj.reserved2 = strm_obj->timeout; - chnl_attr_obj.event_obj = NULL; - if (pattr->user_event != NULL) - chnl_attr_obj.event_obj = pattr->user_event; - - } - } - if (status) - goto func_cont; - - if ((pattr->virt_base == NULL) || !(pattr->virt_size > 0)) - goto func_cont; - - /* No System DMA */ - /* Get the shared mem mgr for this streams dev object */ - status = dev_get_cmm_mgr(strm_mgr_obj->dev_obj, &hcmm_mgr); - if (!status) { - /*Allocate a SM addr translator for this strm. */ - status = cmm_xlator_create(&strm_obj->xlator, hcmm_mgr, NULL); - if (!status) { - /* Set translators Virt Addr attributes */ - status = cmm_xlator_info(strm_obj->xlator, - (u8 **) &pattr->virt_base, - pattr->virt_size, - strm_obj->segment_id, true); - } - } -func_cont: - if (!status) { - /* Open channel */ - chnl_mode = (dir == DSP_TONODE) ? - CHNL_MODETODSP : CHNL_MODEFROMDSP; - intf_fxns = strm_mgr_obj->intf_fxns; - status = (*intf_fxns->chnl_open) (&(strm_obj->chnl_obj), - strm_mgr_obj->chnl_mgr, - chnl_mode, ul_chnl_id, - &chnl_attr_obj); - if (status) { - /* - * over-ride non-returnable status codes so we return - * something documented - */ - if (status != -ENOMEM && status != - -EINVAL && status != -EPERM) { - /* - * We got a status that's not return-able. - * Assert that we got something we were - * expecting (-EFAULT isn't acceptable, - * strm_mgr_obj->chnl_mgr better be valid or we - * assert here), and then return -EPERM. - */ - status = -EPERM; - } - } - } - if (!status) { - status = drv_proc_insert_strm_res_element(strm_obj, - &stream_res, pr_ctxt); - if (status) - delete_strm(strm_obj); - else - *strmres = (struct strm_res_object *)stream_res; - } else { - (void)delete_strm(strm_obj); - } - - dev_dbg(bridge, "%s: hnode: %p dir: 0x%x index: 0x%x pattr: %p " - "strmres: %p status: 0x%x\n", __func__, - hnode, dir, index, pattr, strmres, status); - return status; -} - -/* - * ======== strm_reclaim ======== - * Purpose: - * Relcaims a buffer from a stream. - */ -int strm_reclaim(struct strm_object *stream_obj, u8 **buf_ptr, - u32 *nbytes, u32 *buff_size, u32 *pdw_arg) -{ - struct bridge_drv_interface *intf_fxns; - struct chnl_ioc chnl_ioc_obj; - int status = 0; - void *tmp_buf = NULL; - - if (!stream_obj) { - status = -EFAULT; - goto func_end; - } - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - - status = - (*intf_fxns->chnl_get_ioc) (stream_obj->chnl_obj, - stream_obj->timeout, - &chnl_ioc_obj); - if (!status) { - *nbytes = chnl_ioc_obj.byte_size; - if (buff_size) - *buff_size = chnl_ioc_obj.buf_size; - - *pdw_arg = chnl_ioc_obj.arg; - if (!CHNL_IS_IO_COMPLETE(chnl_ioc_obj)) { - if (CHNL_IS_TIMED_OUT(chnl_ioc_obj)) { - status = -ETIME; - } else { - /* Allow reclaims after idle to succeed */ - if (!CHNL_IS_IO_CANCELLED(chnl_ioc_obj)) - status = -EPERM; - - } - } - /* Translate zerocopy buffer if channel not canceled. */ - if (!status - && (!CHNL_IS_IO_CANCELLED(chnl_ioc_obj)) - && (stream_obj->strm_mode == STRMMODE_ZEROCOPY)) { - /* - * This is a zero-copy channel so chnl_ioc_obj.buf - * contains the DSP address of SM. We need to - * translate it to a virtual address for the user - * thread to access. - * Note: Could add CMM_DSPPA2VA to CMM in the future. - */ - tmp_buf = cmm_xlator_translate(stream_obj->xlator, - chnl_ioc_obj.buf, - CMM_DSPPA2PA); - if (tmp_buf != NULL) { - /* now convert this GPP Pa to Va */ - tmp_buf = cmm_xlator_translate(stream_obj-> - xlator, - tmp_buf, - CMM_PA2VA); - } - if (tmp_buf == NULL) - status = -ESRCH; - - chnl_ioc_obj.buf = tmp_buf; - } - *buf_ptr = chnl_ioc_obj.buf; - } -func_end: - dev_dbg(bridge, "%s: stream_obj: %p buf_ptr: %p nbytes: %p " - "pdw_arg: %p status 0x%x\n", __func__, stream_obj, - buf_ptr, nbytes, pdw_arg, status); - return status; -} - -/* - * ======== strm_register_notify ======== - * Purpose: - * Register to be notified on specific events for this stream. - */ -int strm_register_notify(struct strm_object *stream_obj, u32 event_mask, - u32 notify_type, struct dsp_notification - *hnotification) -{ - struct bridge_drv_interface *intf_fxns; - int status = 0; - - if (!stream_obj) { - status = -EFAULT; - } else if ((event_mask & ~((DSP_STREAMIOCOMPLETION) | - DSP_STREAMDONE)) != 0) { - status = -EINVAL; - } else { - if (notify_type != DSP_SIGNALEVENT) - status = -ENOSYS; - - } - if (!status) { - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - - status = - (*intf_fxns->chnl_register_notify) (stream_obj-> - chnl_obj, - event_mask, - notify_type, - hnotification); - } - - return status; -} - -/* - * ======== strm_select ======== - * Purpose: - * Selects a ready stream. - */ -int strm_select(struct strm_object **strm_tab, u32 strms, - u32 *pmask, u32 utimeout) -{ - u32 index; - struct chnl_info chnl_info_obj; - struct bridge_drv_interface *intf_fxns; - struct sync_object **sync_events = NULL; - u32 i; - int status = 0; - - *pmask = 0; - for (i = 0; i < strms; i++) { - if (!strm_tab[i]) { - status = -EFAULT; - break; - } - } - if (status) - goto func_end; - - /* Determine which channels have IO ready */ - for (i = 0; i < strms; i++) { - intf_fxns = strm_tab[i]->strm_mgr_obj->intf_fxns; - status = (*intf_fxns->chnl_get_info) (strm_tab[i]->chnl_obj, - &chnl_info_obj); - if (status) { - break; - } else { - if (chnl_info_obj.cio_cs > 0) - *pmask |= (1 << i); - - } - } - if (!status && utimeout > 0 && *pmask == 0) { - /* Non-zero timeout */ - sync_events = kmalloc(strms * sizeof(struct sync_object *), - GFP_KERNEL); - - if (sync_events == NULL) { - status = -ENOMEM; - } else { - for (i = 0; i < strms; i++) { - intf_fxns = - strm_tab[i]->strm_mgr_obj->intf_fxns; - status = (*intf_fxns->chnl_get_info) - (strm_tab[i]->chnl_obj, &chnl_info_obj); - if (status) - break; - else - sync_events[i] = - chnl_info_obj.sync_event; - - } - } - if (!status) { - status = - sync_wait_on_multiple_events(sync_events, strms, - utimeout, &index); - if (!status) { - /* Since we waited on the event, we have to - * reset it */ - sync_set_event(sync_events[index]); - *pmask = 1 << index; - } - } - } -func_end: - kfree(sync_events); - - return status; -} - -/* - * ======== delete_strm ======== - * Purpose: - * Frees the resources allocated for a stream. - */ -static int delete_strm(struct strm_object *stream_obj) -{ - struct bridge_drv_interface *intf_fxns; - int status = 0; - - if (stream_obj) { - if (stream_obj->chnl_obj) { - intf_fxns = stream_obj->strm_mgr_obj->intf_fxns; - /* Channel close can fail only if the channel handle - * is invalid. */ - status = (*intf_fxns->chnl_close) - (stream_obj->chnl_obj); - } - /* Free all SM address translator resources */ - kfree(stream_obj->xlator); - kfree(stream_obj); - } else { - status = -EFAULT; - } - return status; -} -- cgit From 1783319f47c58e4a0d1d2cd3d34e953261282156 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 15 Jul 2014 13:30:41 -0400 Subject: staging: unisys: remove proc entries from /proc/visorchipset/controlvm Remove the code that generates proc entries for the controlVM channel. These entries are no longer necessary for debug. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 109 +-------------------- 1 file changed, 1 insertion(+), 108 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index f89712849d72..ecbeaec0e8d2 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -125,42 +125,7 @@ InitPartitionProperties(void) p[PARTPROP_last] = NULL; } -typedef enum { - CTLVMPROP_invalid, - CTLVMPROP_physAddr, - CTLVMPROP_controlChannelAddr, - CTLVMPROP_controlChannelBytes, - CTLVMPROP_sparBootPart, - CTLVMPROP_sparStoragePart, - CTLVMPROP_livedumpLength, - CTLVMPROP_livedumpCrc32, - /* add new properties above, but don't forget to change - * InitControlVmProperties() show_controlvm_property() also... - */ - CTLVMPROP_last -} CONTROLVM_property; - -static const char *ControlVmTypeNames[] = { "controlvm", NULL }; - -static char *ControlVmPropertyNames[CTLVMPROP_last + 1]; -static void -InitControlVmProperties(void) -{ - char **p = ControlVmPropertyNames; - p[CTLVMPROP_invalid] = ""; - p[CTLVMPROP_physAddr] = "physAddr"; - p[CTLVMPROP_controlChannelAddr] = "controlChannelAddr"; - p[CTLVMPROP_controlChannelBytes] = "controlChannelBytes"; - p[CTLVMPROP_sparBootPart] = "spar_boot_part"; - p[CTLVMPROP_sparStoragePart] = "spar_storage_part"; - p[CTLVMPROP_livedumpLength] = "livedumpLength"; - p[CTLVMPROP_livedumpCrc32] = "livedumpCrc32"; - p[CTLVMPROP_last] = NULL; -} - -static MYPROCOBJECT *ControlVmObject; static MYPROCTYPE *PartitionType; -static MYPROCTYPE *ControlVmType; #define VISORCHIPSET_DIAG_PROC_ENTRY_FN "diagdump" static struct proc_dir_entry *diag_proc_dir; @@ -396,63 +361,6 @@ show_partition_property(struct seq_file *f, void *ctx, int property) } } -static void -show_controlvm_property(struct seq_file *f, void *ctx, int property) -{ - /* Note: ctx is not needed since we only have 1 controlvm channel */ - switch (property) { - case CTLVMPROP_physAddr: - if (ControlVm_channel == NULL) - seq_puts(f, "0x0\n"); - else - seq_printf(f, "0x%-16.16Lx\n", - visorchannel_get_physaddr - (ControlVm_channel)); - break; - case CTLVMPROP_controlChannelAddr: - if (ControlVm_channel == NULL) - seq_puts(f, "0x0\n"); - else { - GUEST_PHYSICAL_ADDRESS addr = 0; - visorchannel_read(ControlVm_channel, - offsetof - (ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - gpControlChannel), &addr, - sizeof(addr)); - seq_printf(f, "0x%-16.16Lx\n", (u64) (addr)); - } - break; - case CTLVMPROP_controlChannelBytes: - if (ControlVm_channel == NULL) - seq_puts(f, "0x0\n"); - else { - U32 bytes = 0; - visorchannel_read(ControlVm_channel, - offsetof - (ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - ControlChannelBytes), &bytes, - sizeof(bytes)); - seq_printf(f, "%lu\n", (ulong) (bytes)); - } - break; - case CTLVMPROP_sparBootPart: - seq_puts(f, "0:0:0:0/1\n"); - break; - case CTLVMPROP_sparStoragePart: - seq_puts(f, "0:0:0:0/2\n"); - break; - case CTLVMPROP_livedumpLength: - seq_printf(f, "%lu\n", LiveDump_info.length); - break; - case CTLVMPROP_livedumpCrc32: - seq_printf(f, "%lu\n", (ulong) LiveDump_info.crc32); - break; - default: - seq_printf(f, "(%d??)\n", property); - break; - } -} - static void proc_Init(void) { @@ -2736,20 +2644,12 @@ visorchipset_init(void) proc_Init(); memset(PartitionPropertyNames, 0, sizeof(PartitionPropertyNames)); - memset(ControlVmPropertyNames, 0, sizeof(ControlVmPropertyNames)); InitPartitionProperties(); - InitControlVmProperties(); PartitionType = visor_proc_CreateType(ProcDir, PartitionTypeNames, (const char **) PartitionPropertyNames, &show_partition_property); - ControlVmType = - visor_proc_CreateType(ProcDir, ControlVmTypeNames, - (const char **) ControlVmPropertyNames, - &show_controlvm_property); - - ControlVmObject = visor_proc_CreateObject(ControlVmType, NULL, NULL); /* Setup Installation fields */ installer_file = proc_create("installer", 0644, ProcDir, @@ -2855,16 +2755,9 @@ visorchipset_exit(void) kmem_cache_destroy(Putfile_buffer_list_pool); Putfile_buffer_list_pool = NULL; } - if (ControlVmObject) { - visor_proc_DestroyObject(ControlVmObject); - ControlVmObject = NULL; - } + cleanup_controlvm_structures(); - if (ControlVmType) { - visor_proc_DestroyType(ControlVmType); - ControlVmType = NULL; - } if (PartitionType) { visor_proc_DestroyType(PartitionType); PartitionType = NULL; -- cgit From 33e9ab3d4dc00ea67ae1267060de42e949326347 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Tue, 15 Jul 2014 22:46:48 +0200 Subject: staging: vt6556: Cleanup indentation on statements Use tabs instead of spaces in a set of statements and fix lines over 80 chars. Reported by checkpatch. Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 44 ++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index b1da23c18aac..d8e984ea5cb8 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -386,38 +386,40 @@ static int device_init_registers(struct vnt_private *pDevice) /* load vt3266 calibration parameters in EEPROM */ if (pDevice->byRFType == RF_VT3226D0) { if ((pDevice->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && - (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { + (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { byCalibTXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_IQ]; byCalibTXDC = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_DC]; byCalibRXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; if (byCalibTXIQ || byCalibTXDC || byCalibRXIQ) { - /* CR255, enable TX/RX IQ and DC compensation mode */ + /* CR255, enable TX/RX IQ and + DC compensation mode */ vnt_control_out_u8(pDevice, - MESSAGE_REQUEST_BBREG, - 0xff, - 0x03); - /* CR251, TX I/Q Imbalance Calibration */ + MESSAGE_REQUEST_BBREG, + 0xff, + 0x03); + /* CR251, TX I/Q Imbalance Calibration */ vnt_control_out_u8(pDevice, - MESSAGE_REQUEST_BBREG, - 0xfb, - byCalibTXIQ); - /* CR252, TX DC-Offset Calibration */ + MESSAGE_REQUEST_BBREG, + 0xfb, + byCalibTXIQ); + /* CR252, TX DC-Offset Calibration */ vnt_control_out_u8(pDevice, - MESSAGE_REQUEST_BBREG, - 0xfC, - byCalibTXDC); - /* CR253, RX I/Q Imbalance Calibration */ + MESSAGE_REQUEST_BBREG, + 0xfC, + byCalibTXDC); + /* CR253, RX I/Q Imbalance Calibration */ vnt_control_out_u8(pDevice, - MESSAGE_REQUEST_BBREG, - 0xfd, - byCalibRXIQ); + MESSAGE_REQUEST_BBREG, + 0xfd, + byCalibRXIQ); } else { - /* CR255, turn off BB Calibration compensation */ + /* CR255, turn off + BB Calibration compensation */ vnt_control_out_u8(pDevice, - MESSAGE_REQUEST_BBREG, - 0xff, - 0x0); + MESSAGE_REQUEST_BBREG, + 0xff, + 0x0); } } } -- cgit From dbf0a03b66e0d26795a7582ffa4be0fff5e00254 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Tue, 15 Jul 2014 23:23:24 +0200 Subject: staging: vt6556: Cleanup coding style: #define This patch cleanup coding style issues on #defines. Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.h | 6 +++--- drivers/staging/vt6656/device.h | 10 +++++----- drivers/staging/vt6656/main_usb.c | 18 +++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 5b7cc5a908f6..80fcd531207c 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -39,9 +39,9 @@ typedef enum _CARD_PHY_TYPE { PHY_TYPE_11A } CARD_PHY_TYPE, *PCARD_PHY_TYPE; -#define CB_MAX_CHANNEL_24G 14 -#define CB_MAX_CHANNEL_5G 42 /* add channel9(5045MHz), 41==>42 */ -#define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G+CB_MAX_CHANNEL_5G) +#define CB_MAX_CHANNEL_24G 14 +#define CB_MAX_CHANNEL_5G 42 /* add channel9(5045MHz), 41==>42 */ +#define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G + CB_MAX_CHANNEL_5G) struct vnt_private; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index a8b6c5ffac2f..b23d8444dfff 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -439,11 +439,11 @@ struct vnt_private { struct ieee80211_low_level_stats low_stats; }; -#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \ - if ((uVar) >= ((uModulo) - 1)) \ - (uVar) = 0; \ - else \ - (uVar)++; \ +#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \ + if ((uVar) >= ((uModulo) - 1)) \ + (uVar) = 0; \ + else \ + (uVar)++; \ } #define fMP_DISCONNECTED 0x00000002 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d8e984ea5cb8..21745c517379 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -75,18 +75,18 @@ MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); -#define DEVICE_PARAM(N,D) \ - static int N[MAX_UINTS]=OPTION_DEFAULT;\ - module_param_array(N, int, NULL, 0);\ - MODULE_PARM_DESC(N, D); +#define DEVICE_PARAM(N, D) \ + static int N[MAX_UINTS] = OPTION_DEFAULT; \ + module_param_array(N, int, NULL, 0); \ + MODULE_PARM_DESC(N, D) -#define RX_DESC_DEF0 64 -DEVICE_PARAM(RxDescriptors0,"Number of receive usb desc buffer"); +#define RX_DESC_DEF0 64 +DEVICE_PARAM(RxDescriptors0, "Number of receive usb desc buffer"); -#define TX_DESC_DEF0 64 -DEVICE_PARAM(TxDescriptors0,"Number of transmit usb desc buffer"); +#define TX_DESC_DEF0 64 +DEVICE_PARAM(TxDescriptors0, "Number of transmit usb desc buffer"); -#define CHANNEL_DEF 6 +#define CHANNEL_DEF 6 DEVICE_PARAM(Channel, "Channel number"); /* PreambleType[] is the preamble length used for transmit. -- cgit From 618d7d07bd11d077842e0384aded23655080b817 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Tue, 15 Jul 2014 23:23:25 +0200 Subject: staging: vt6556: Cleanup coding style: comments This patch cleanup coding style issues on comments. Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 15 ++++++++------- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/channel.c | 5 +++-- 3 files changed, 13 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 97e10e077c11..adf27bae599f 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -26,9 +26,10 @@ * Date: Jun. 5, 2002 * * Functions: - * vnt_get_frame_time - Calculate data frame transmitting time - * vnt_get_phy_field - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx - * BBbVT3184Init - VIA VT3184 baseband chip init code + * vnt_get_frame_time - Calculate data frame transmitting time + * vnt_get_phy_field - Calculate PhyLength, PhyService and Phy + * Signal parameter for baseband Tx + * BBbVT3184Init - VIA VT3184 baseband chip init code * * Revision History: * @@ -86,7 +87,7 @@ static u8 vnt_vt3184_al2230[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */ }; -//{{RobertYu:20060515, new BB setting for VT3226D0 +/* {{RobertYu:20060515, new BB setting for VT3226D0 */ static u8 vnt_vt3184_vt3226d0[] = { 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00, /* 0x0f */ @@ -191,9 +192,9 @@ unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type, * tx_rate - Tx Rate * Out: * struct vnt_phy_field *phy - * - pointer to Phy Length field - * - pointer to Phy Service field - * - pointer to Phy Signal field + * - pointer to Phy Length field + * - pointer to Phy Service field + * - pointer to Phy Signal field * * Return Value: none * diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index ea06b637a328..6a6e6148fa07 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -55,8 +55,8 @@ #include "key.h" #include "usbpipe.h" -//const u16 cwRXBCNTSFOff[MAX_RATE] = -//{17, 34, 96, 192, 34, 23, 17, 11, 8, 5, 4, 3}; +/* const u16 cwRXBCNTSFOff[MAX_RATE] = + {17, 34, 96, 192, 34, 23, 17, 11, 8, 5, 4, 3}; */ static const u16 cwRXBCNTSFOff[MAX_RATE] = {192, 96, 34, 17, 34, 23, 17, 11, 8, 5, 4, 3}; diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index fb1838e9b292..4a53f1a734b3 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -28,8 +28,9 @@ * * * Revision History: - * 01-18-2005 RobertYu: remove the for loop searching in ChannelValid, - * change ChannelRuleTab to lookup-type, reorder table items. + * 01-18-2005 RobertYu: remove the for loop searching in + * ChannelValid, change ChannelRuleTab + * to lookup-type, reorder table items. * * */ -- cgit From 42b138d96ccd0430eb3eae3f31cd6e23696d5e09 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Tue, 15 Jul 2014 23:23:26 +0200 Subject: staging: vt6556: Cleanup coding style: lines over 80 chars This patch cleanup the follwoing coding style issues: - line over 80 chars - spaces on the beginning of a line - put { and } on the correct places Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 8 +++++--- drivers/staging/vt6656/card.c | 9 +++++---- drivers/staging/vt6656/main_usb.c | 5 +++-- 3 files changed, 13 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index adf27bae599f..040b2321585a 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -123,8 +123,9 @@ static u8 vnt_vt3184_vt3226d0[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */ }; -static const u16 awcFrameTime[MAX_RATE] = -{10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216}; +static const u16 awcFrameTime[MAX_RATE] = { + 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216 +}; /* * Description: Calculate data frame transmitting time @@ -469,7 +470,8 @@ int BBbVT3184Init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; /* Fix VT3226 DFC system timing issue */ - vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); + vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, + SOFTPWRCTL_RFLEOPT); } else { return true; } diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 6a6e6148fa07..37cd96bbbfc6 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -58,8 +58,9 @@ /* const u16 cwRXBCNTSFOff[MAX_RATE] = {17, 34, 96, 192, 34, 23, 17, 11, 8, 5, 4, 3}; */ -static const u16 cwRXBCNTSFOff[MAX_RATE] = -{192, 96, 34, 17, 34, 23, 17, 11, 8, 5, 4, 3}; +static const u16 cwRXBCNTSFOff[MAX_RATE] = { + 192, 96, 34, 17, 34, 23, 17, 11, 8, 5, 4, 3 +}; /* * Description: Set NIC media channel @@ -477,7 +478,7 @@ void vnt_update_top_rates(struct vnt_private *priv) } priv->byTopCCKBasicRate = top_cck; - } +} int vnt_ofdm_min_rate(struct vnt_private *priv) { @@ -710,7 +711,7 @@ void vnt_update_next_tbtt(struct vnt_private *priv, u64 tsf, data[7] = (u8)(tsf >> 56); vnt_control_out(priv, MESSAGE_TYPE_SET_TSFTBTT, - MESSAGE_REQUEST_TBTT, 0, 8, data); + MESSAGE_REQUEST_TBTT, 0, 8, data); dev_dbg(&priv->usb->dev, "%s TBTT: %8llx\n", __func__, tsf); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 21745c517379..0ae0fbbd82bc 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -531,8 +531,9 @@ static void device_free_rx_bufs(struct vnt_private *priv) static void usb_device_reset(struct vnt_private *pDevice) { - int status; - status = usb_reset_device(pDevice->usb); + int status; + + status = usb_reset_device(pDevice->usb); if (status) printk("usb_device_reset fail status=%d\n",status); return ; -- cgit From 14c5e41f3801962d9af780c240a97884ed8f23f3 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Tue, 15 Jul 2014 23:23:27 +0200 Subject: staging: vt6556: Cleanup coding style: indentation This patch cleanup the follwoing coding style issues: - indentation style - new line after declaration Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0ae0fbbd82bc..a3057dac12e9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -62,7 +62,7 @@ #include "int.h" /* static int msglevel = MSG_LEVEL_DEBUG; */ -static int msglevel =MSG_LEVEL_INFO; +static int msglevel = MSG_LEVEL_INFO; /* * define module options @@ -177,13 +177,12 @@ static struct usb_device_id vt6656_table[] = { /* frequency list (map channels to frequencies) */ /* static const long frequency_list[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, - 4915, 4920, 4925, 4935, 4940, 4945, 4960, 4980, - 5035, 5040, 5045, 5055, 5060, 5080, 5170, 5180, 5190, 5200, 5210, 5220, 5230, 5240, - 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 5620, 5640, 5660, 5680, - 5700, 5745, 5765, 5785, 5805, 5825 - }; - + 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, + 2472, 2484, 4915, 4920, 4925, 4935, 4940, 4945, 4960, 4980, 5035, 5040, + 5045, 5055, 5060, 5080, 5170, 5180, 5190, 5200, 5210, 5220, 5230, 5240, + 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 5620, 5640, + 5660, 5680, 5700, 5745, 5765, 5785, 5805, 5825 +}; */ static int vt6656_probe(struct usb_interface *intf, @@ -206,16 +205,16 @@ static void usb_device_reset(struct vnt_private *pDevice); static void device_set_options(struct vnt_private *pDevice) { - pDevice->cbTD = TX_DESC_DEF0; - pDevice->cbRD = RX_DESC_DEF0; - pDevice->byShortRetryLimit = SHORT_RETRY_DEF; - pDevice->byLongRetryLimit = LONG_RETRY_DEF; - pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; - pDevice->byBBType = BBP_TYPE_DEF; - pDevice->byPacketType = pDevice->byBBType; - pDevice->byAutoFBCtrl = AUTO_FB_0; - pDevice->byPreambleType = 0; - pDevice->bExistSWNetAddr = false; + pDevice->cbTD = TX_DESC_DEF0; + pDevice->cbRD = RX_DESC_DEF0; + pDevice->byShortRetryLimit = SHORT_RETRY_DEF; + pDevice->byLongRetryLimit = LONG_RETRY_DEF; + pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; + pDevice->byBBType = BBP_TYPE_DEF; + pDevice->byPacketType = pDevice->byBBType; + pDevice->byAutoFBCtrl = AUTO_FB_0; + pDevice->byPreambleType = 0; + pDevice->bExistSWNetAddr = false; } /* @@ -842,6 +841,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, u32 changed) { struct vnt_private *priv = hw->priv; + priv->current_aid = conf->aid; if (changed & BSS_CHANGED_BSSID) -- cgit From a2c14e9712252fb6fd365b6cde3df4eaa1950ef6 Mon Sep 17 00:00:00 2001 From: KANG Yuxuan Date: Wed, 16 Jul 2014 10:45:01 +0800 Subject: staging: emxx_udc: Fix coding style errors Only fixing errors reported by checkpatch.pl, based on the following rules: 1. '*' should be adjacent to the data name or function name. 2. Don't use C99-style "// ..." comments. Signed-off-by: KANG Yuxuan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/emxx_udc/emxx_udc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c index 0003463cd231..b2eaf0108e46 100644 --- a/drivers/staging/emxx_udc/emxx_udc.c +++ b/drivers/staging/emxx_udc/emxx_udc.c @@ -562,12 +562,12 @@ static void _nbu2ss_dma_unmap_single( /*-------------------------------------------------------------------------*/ /* Endpoint 0 OUT Transfer (PIO) */ -static int EP0_out_PIO(struct nbu2ss_udc *udc, u8* pBuf, u32 length) +static int EP0_out_PIO(struct nbu2ss_udc *udc, u8 *pBuf, u32 length) { u32 i; int nret = 0; u32 iWordLength = 0; - USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + USB_REG_ACCESS *pBuf32 = (USB_REG_ACCESS *)pBuf; /*------------------------------------------------------------*/ /* Read Length */ @@ -588,12 +588,12 @@ static int EP0_out_PIO(struct nbu2ss_udc *udc, u8* pBuf, u32 length) /*-------------------------------------------------------------------------*/ /* Endpoint 0 OUT Transfer (PIO, OverBytes) */ -static int EP0_out_OverBytes(struct nbu2ss_udc *udc, u8* pBuf, u32 length) +static int EP0_out_OverBytes(struct nbu2ss_udc *udc, u8 *pBuf, u32 length) { u32 i; u32 iReadSize = 0; USB_REG_ACCESS Temp32; - USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + USB_REG_ACCESS *pBuf32 = (USB_REG_ACCESS *)pBuf; if ((0 < length) && (length < sizeof(u32))) { Temp32.dw = _nbu2ss_readl(&udc->p_regs->EP0_READ); @@ -613,7 +613,7 @@ static int EP0_in_PIO(struct nbu2ss_udc *udc, u8 *pBuf, u32 length) u32 iMaxLength = EP0_PACKETSIZE; u32 iWordLength = 0; u32 iWriteLength = 0; - USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + USB_REG_ACCESS *pBuf32 = (USB_REG_ACCESS *)pBuf; /*------------------------------------------------------------*/ /* Transfer Length */ @@ -639,7 +639,7 @@ static int EP0_in_OverBytes(struct nbu2ss_udc *udc, u8 *pBuf, u32 iRemainSize) { u32 i; USB_REG_ACCESS Temp32; - USB_REG_ACCESS* pBuf32 = (USB_REG_ACCESS *)pBuf; + USB_REG_ACCESS *pBuf32 = (USB_REG_ACCESS *)pBuf; if ((0 < iRemainSize) && (iRemainSize < sizeof(u32))) { for (i = 0 ; i < iRemainSize ; i++) @@ -3339,7 +3339,7 @@ static int __init nbu2ss_drv_contest_init( udc->gadget.ep0 = &udc->ep[0].ep; udc->gadget.speed = USB_SPEED_UNKNOWN; udc->gadget.name = driver_name; - //udc->gadget.is_dualspeed = 1; + /* udc->gadget.is_dualspeed = 1; */ device_initialize(&udc->gadget.dev); -- cgit From 99acc5ae9b9e544adb0921c16640293010360566 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 12 Jul 2014 17:42:36 -0500 Subject: staging: comedi: addi_apci_1564: driver no longer needs to include addi_common.h This driver no longer depends on anything in addi_common.h, save for a few headers that it was including indirectly. Remove the include of addi_common.h and add the includes of and directly. Signed-off-by: Chase Southwood Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 1e25342ebc81..16f3b69871ef 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -1,13 +1,13 @@ #include #include +#include +#include #include "../comedidev.h" #include "comedi_fc.h" #include "amcc_s5933.h" #include "addi_watchdog.h" -#include "addi-data/addi_common.h" - struct apci1564_private { unsigned int amcc_iobase; /* base of AMCC I/O registers */ unsigned int mode1; /* riding-edge/high level channels */ -- cgit From 1496e5961113860e97e8fc39c4fdc0e83c1fbcab Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Sat, 12 Jul 2014 17:44:09 -0500 Subject: staging: comedi: addi_apci_1564: use addi_watchdog module to init watchdog subdevice Use the addi_watchdog module to provide support for the watchdog subdevice. Also, rearrange the subdevice init blocks so that the order makes sense. Digital input/output subdevices and subdevices for DI/DO interrupt support, followed by timer/counter/watchdog subdevices is the new order. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 34 +++++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 16f3b69871ef..190b02663bd0 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -373,7 +373,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, dev->irq = pcidev->irq; } - ret = comedi_alloc_subdevices(dev, 4); + ret = comedi_alloc_subdevices(dev, 5); if (ret) return ret; @@ -397,20 +397,8 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->insn_bits = apci1564_do_insn_bits; s->insn_read = apci1564_do_read; - /* Allocate and Initialise Timer Subdevice Structures */ - s = &dev->subdevices[2]; - s->type = COMEDI_SUBD_TIMER; - s->subdev_flags = SDF_WRITEABLE; - s->n_chan = 1; - s->maxdata = 0; - s->len_chanlist = 1; - s->range_table = &range_digital; - s->insn_write = apci1564_timer_write; - s->insn_read = apci1564_timer_read; - s->insn_config = apci1564_timer_config; - /* Change-Of-State (COS) interrupt subdevice */ - s = &dev->subdevices[3]; + s = &dev->subdevices[2]; if (dev->irq) { dev->read_subdev = s; s->type = COMEDI_SUBD_DI; @@ -428,6 +416,24 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->type = COMEDI_SUBD_UNUSED; } + /* Allocate and Initialise Timer Subdevice Structures */ + s = &dev->subdevices[3]; + s->type = COMEDI_SUBD_TIMER; + s->subdev_flags = SDF_WRITEABLE; + s->n_chan = 1; + s->maxdata = 0; + s->len_chanlist = 1; + s->range_table = &range_digital; + s->insn_write = apci1564_timer_write; + s->insn_read = apci1564_timer_read; + s->insn_config = apci1564_timer_config; + + /* Initialize the watchdog subdevice */ + s = &dev->subdevices[4]; + ret = addi_watchdog_init(s, devpriv->amcc_iobase + APCI1564_WDOG_REG); + if (ret) + return ret; + return 0; } -- cgit From e2f1036a9b22315d5134a1145b2743044d94b733 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 11:54:26 -0700 Subject: staging: comedi: 8255_pci: remove include of mite.h The mite.h header is included only to pickup the MITE_IODWBSR and WENAB defines needed to set the data window (PCI BAR 1) when initializing the PCI MITE ASIC on the National Instruments boards supported by this driver. Remove the include of mite.h by adding the two defines locally in this driver. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8255_pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index 46a385c29ba8..be4c95ee9eb1 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -56,7 +56,6 @@ Configuration Options: not applicable, uses PCI auto config #include "../comedidev.h" #include "8255.h" -#include "mite.h" enum pci_8255_boardid { BOARD_ADLINK_PCI7224, @@ -172,6 +171,10 @@ struct pci_8255_private { void __iomem *mmio_base; }; +/* ripped from mite.h and mite_setup2() to avoid mite dependancy */ +#define MITE_IODWBSR 0xc0 /* IO Device Window Base Size Register */ +#define WENAB (1 << 7) /* window enable */ + static int pci_8255_mite_init(struct pci_dev *pcidev) { void __iomem *mite_base; -- cgit From 319a883bfdfe163094ba32c8ab7815a109ba3bcc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 11:54:27 -0700 Subject: staging: comedi: ni_labpc_pci: remove COMEDI_MITE and HAS_DMA dependancy The mite module provides the DMA interface for the PCI MITE ASIC used on many National Instruments DAQ boards. This driver does not use DMA and only depends on the mite module to initialize the MITE ASIC. Handle the initialization localy and remove the unnecessary dependancies. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 2 -- drivers/staging/comedi/drivers/ni_labpc.h | 1 - drivers/staging/comedi/drivers/ni_labpc_pci.c | 48 +++++++++++++++++++-------- 3 files changed, 35 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 8d992a87d3c4..0c079d29053b 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -1049,9 +1049,7 @@ config COMEDI_NI_670X config COMEDI_NI_LABPC_PCI tristate "NI Lab-PC PCI-1200 support" - depends on HAS_DMA select COMEDI_NI_LABPC - select COMEDI_MITE ---help--- Enable support for National Instruments Lab-PC PCI-1200. diff --git a/drivers/staging/comedi/drivers/ni_labpc.h b/drivers/staging/comedi/drivers/ni_labpc.h index 486589fa6fd8..0fb431137c76 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.h +++ b/drivers/staging/comedi/drivers/ni_labpc.h @@ -36,7 +36,6 @@ struct labpc_boardinfo { }; struct labpc_private { - struct mite_struct *mite; /* for mite chip on pci-1200 */ /* number of data points left to be taken */ unsigned long long count; /* software copy of analog output values */ diff --git a/drivers/staging/comedi/drivers/ni_labpc_pci.c b/drivers/staging/comedi/drivers/ni_labpc_pci.c index 358c4af3e174..5b59be3350ad 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_pci.c +++ b/drivers/staging/comedi/drivers/ni_labpc_pci.c @@ -35,7 +35,6 @@ #include "../comedidev.h" -#include "mite.h" #include "ni_labpc.h" enum labpc_pci_boardid { @@ -53,12 +52,36 @@ static const struct labpc_boardinfo labpc_pci_boards[] = { }, }; +/* ripped from mite.h and mite_setup2() to avoid mite dependancy */ +#define MITE_IODWBSR 0xc0 /* IO Device Window Base Size Register */ +#define WENAB (1 << 7) /* window enable */ + +static int labpc_pci_mite_init(struct pci_dev *pcidev) +{ + void __iomem *mite_base; + u32 main_phys_addr; + + /* ioremap the MITE registers (BAR 0) temporarily */ + mite_base = pci_ioremap_bar(pcidev, 0); + if (!mite_base) + return -ENOMEM; + + /* set data window to main registers (BAR 1) */ + main_phys_addr = pci_resource_start(pcidev, 1); + writel(main_phys_addr | WENAB, mite_base + MITE_IODWBSR); + + /* finished with MITE registers */ + iounmap(mite_base); + return 0; +} + static int labpc_pci_auto_attach(struct comedi_device *dev, unsigned long context) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct labpc_boardinfo *board = NULL; struct labpc_private *devpriv; + void __iomem *mmio; int ret; if (context < ARRAY_SIZE(labpc_pci_boards)) @@ -72,27 +95,26 @@ static int labpc_pci_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) + ret = labpc_pci_mite_init(pcidev); + if (ret) + return ret; + + mmio = pci_ioremap_bar(pcidev, 1); + if (!mmio) return -ENOMEM; + dev->iobase = (unsigned long)mmio; - devpriv->mite = mite_alloc(pcidev); - if (!devpriv->mite) + devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); + if (!devpriv) return -ENOMEM; - ret = mite_setup(devpriv->mite); - if (ret < 0) - return ret; - dev->iobase = (unsigned long)devpriv->mite->daq_io_addr; return labpc_common_attach(dev, pcidev->irq, IRQF_SHARED); } static void labpc_pci_detach(struct comedi_device *dev) { - struct labpc_private *devpriv = dev->private; - - if (devpriv) - mite_detach(devpriv->mite); + if (dev->iobase) + iounmap((void __iomem *)dev->iobase); if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); -- cgit From b965b77f7c19e587fab99c8efc7ee623e13158a0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 11:54:28 -0700 Subject: staging: comedi: ni_65xx: remove COMEDI_MITE and HAS_DMA dependancy The mite module provides the DMA interface for the PCI MITE ASIC used on many National Instruments DAQ boards. This driver does not use DMA and only depends on the mite module to initialize the MITE ASIC. Handle the initialization localy and remove the unnecessary dependancies. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 2 - drivers/staging/comedi/drivers/ni_65xx.c | 127 +++++++++++++++---------------- 2 files changed, 60 insertions(+), 69 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 0c079d29053b..8304c39ab57c 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -1014,8 +1014,6 @@ config COMEDI_NI_6527 config COMEDI_NI_65XX tristate "NI 65xx static dio PCI card support" - depends on HAS_DMA - select COMEDI_MITE ---help--- Enable support for National Instruments 65xx static dio boards. Supported devices: National Instruments PCI-6509 (ni_65xx), diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 59f592e0ca76..d6c11405ebc0 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -50,7 +50,6 @@ except maybe the 6514. #include "../comedidev.h" #include "comedi_fc.h" -#include "mite.h" #define NI6514_DIO_SIZE 4096 #define NI6514_MITE_SIZE 4096 @@ -261,7 +260,7 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board } struct ni_65xx_private { - struct mite_struct *mite; + void __iomem *mmio; unsigned int filter_interval; unsigned short filter_enable[NI_65XX_MAX_NUM_PORTS]; unsigned short output_bits[NI_65XX_MAX_NUM_PORTS]; @@ -300,9 +299,7 @@ static int ni_65xx_config_filter(struct comedi_device *dev, data[1] = interval * filter_resolution_ns; if (interval != devpriv->filter_interval) { - writeb(interval, - devpriv->mite->daq_io_addr + - Filter_Interval); + writeb(interval, devpriv->mmio + Filter_Interval); devpriv->filter_interval = interval; } @@ -314,7 +311,7 @@ static int ni_65xx_config_filter(struct comedi_device *dev, } writeb(devpriv->filter_enable[port], - devpriv->mite->daq_io_addr + Filter_Enable(port)); + devpriv->mmio + Filter_Enable(port)); return 2; } @@ -338,14 +335,14 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, if (s->type != COMEDI_SUBD_DIO) return -EINVAL; devpriv->dio_direction[port] = COMEDI_OUTPUT; - writeb(0, devpriv->mite->daq_io_addr + Port_Select(port)); + writeb(0, devpriv->mmio + Port_Select(port)); return 1; break; case INSN_CONFIG_DIO_INPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; devpriv->dio_direction[port] = COMEDI_INPUT; - writeb(1, devpriv->mite->daq_io_addr + Port_Select(port)); + writeb(1, devpriv->mmio + Port_Select(port)); return 1; break; case INSN_CONFIG_DIO_QUERY: @@ -400,12 +397,9 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, bits = devpriv->output_bits[port]; if (board->invert_outputs) bits = ~bits; - writeb(bits, - devpriv->mite->daq_io_addr + - Port_Data(port)); + writeb(bits, devpriv->mmio + Port_Data(port)); } - port_read_bits = - readb(devpriv->mite->daq_io_addr + Port_Data(port)); + port_read_bits = readb(devpriv->mmio + Port_Data(port)); if (s->type == COMEDI_SUBD_DO && board->invert_outputs) { /* Outputs inverted, so invert value read back from * DO subdevice. (Does not apply to boards with DIO @@ -430,14 +424,13 @@ static irqreturn_t ni_65xx_interrupt(int irq, void *d) struct comedi_subdevice *s = dev->read_subdev; unsigned int status; - status = readb(devpriv->mite->daq_io_addr + Change_Status); + status = readb(devpriv->mmio + Change_Status); if ((status & MasterInterruptStatus) == 0) return IRQ_NONE; if ((status & EdgeStatus) == 0) return IRQ_NONE; - writeb(ClrEdge | ClrOverflow, - devpriv->mite->daq_io_addr + Clear_Register); + writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); comedi_buf_put(s, 0); s->async->events |= COMEDI_CB_EOS; @@ -492,11 +485,10 @@ static int ni_65xx_intr_cmd(struct comedi_device *dev, { struct ni_65xx_private *devpriv = dev->private; - writeb(ClrEdge | ClrOverflow, - devpriv->mite->daq_io_addr + Clear_Register); + writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); writeb(FallingEdgeIntEnable | RisingEdgeIntEnable | MasterInterruptEnable | EdgeIntEnable, - devpriv->mite->daq_io_addr + Master_Interrupt_Control); + devpriv->mmio + Master_Interrupt_Control); return 0; } @@ -506,7 +498,7 @@ static int ni_65xx_intr_cancel(struct comedi_device *dev, { struct ni_65xx_private *devpriv = dev->private; - writeb(0x00, devpriv->mite->daq_io_addr + Master_Interrupt_Control); + writeb(0x00, devpriv->mmio + Master_Interrupt_Control); return 0; } @@ -531,35 +523,48 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, if (data[0] != INSN_CONFIG_CHANGE_NOTIFY) return -EINVAL; - writeb(data[1], - devpriv->mite->daq_io_addr + - Rising_Edge_Detection_Enable(0)); + writeb(data[1], devpriv->mmio + Rising_Edge_Detection_Enable(0)); writeb(data[1] >> 8, - devpriv->mite->daq_io_addr + - Rising_Edge_Detection_Enable(0x10)); + devpriv->mmio + Rising_Edge_Detection_Enable(0x10)); writeb(data[1] >> 16, - devpriv->mite->daq_io_addr + - Rising_Edge_Detection_Enable(0x20)); + devpriv->mmio + Rising_Edge_Detection_Enable(0x20)); writeb(data[1] >> 24, - devpriv->mite->daq_io_addr + - Rising_Edge_Detection_Enable(0x30)); + devpriv->mmio + Rising_Edge_Detection_Enable(0x30)); - writeb(data[2], - devpriv->mite->daq_io_addr + - Falling_Edge_Detection_Enable(0)); + writeb(data[2], devpriv->mmio + Falling_Edge_Detection_Enable(0)); writeb(data[2] >> 8, - devpriv->mite->daq_io_addr + - Falling_Edge_Detection_Enable(0x10)); + devpriv->mmio + Falling_Edge_Detection_Enable(0x10)); writeb(data[2] >> 16, - devpriv->mite->daq_io_addr + - Falling_Edge_Detection_Enable(0x20)); + devpriv->mmio + Falling_Edge_Detection_Enable(0x20)); writeb(data[2] >> 24, - devpriv->mite->daq_io_addr + - Falling_Edge_Detection_Enable(0x30)); + devpriv->mmio + Falling_Edge_Detection_Enable(0x30)); return 2; } +/* ripped from mite.h and mite_setup2() to avoid mite dependancy */ +#define MITE_IODWBSR 0xc0 /* IO Device Window Base Size Register */ +#define WENAB (1 << 7) /* window enable */ + +static int ni_65xx_mite_init(struct pci_dev *pcidev) +{ + void __iomem *mite_base; + u32 main_phys_addr; + + /* ioremap the MITE registers (BAR 0) temporarily */ + mite_base = pci_ioremap_bar(pcidev, 0); + if (!mite_base) + return -ENOMEM; + + /* set data window to main registers (BAR 1) */ + main_phys_addr = pci_resource_start(pcidev, 1); + writel(main_phys_addr | WENAB, mite_base + MITE_IODWBSR); + + /* finished with MITE registers */ + iounmap(mite_base); + return 0; +} + static int ni_65xx_auto_attach(struct comedi_device *dev, unsigned long context) { @@ -586,19 +591,17 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (!devpriv) return -ENOMEM; - devpriv->mite = mite_alloc(pcidev); - if (!devpriv->mite) - return -ENOMEM; - - ret = mite_setup(devpriv->mite); - if (ret < 0) { - dev_warn(dev->class_dev, "error setting up mite\n"); + ret = ni_65xx_mite_init(pcidev); + if (ret) return ret; - } + + devpriv->mmio = pci_ioremap_bar(pcidev, 1); + if (!devpriv->mmio) + return -ENOMEM; dev->irq = pcidev->irq; dev_info(dev->class_dev, "board: %s, ID=0x%02x", dev->board_name, - readb(devpriv->mite->daq_io_addr + ID_Register)); + readb(devpriv->mmio + ID_Register)); ret = comedi_alloc_subdevices(dev, 4); if (ret) @@ -655,9 +658,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, spriv->base_port = 0; for (i = 0; i < board->num_dio_ports; ++i) { /* configure all ports for input */ - writeb(0x1, - devpriv->mite->daq_io_addr + - Port_Select(i)); + writeb(0x1, devpriv->mmio + Port_Select(i)); } } else { s->type = COMEDI_SUBD_UNUSED; @@ -678,22 +679,17 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->insn_config = ni_65xx_intr_insn_config; for (i = 0; i < ni_65xx_total_num_ports(board); ++i) { - writeb(0x00, - devpriv->mite->daq_io_addr + Filter_Enable(i)); + writeb(0x00, devpriv->mmio + Filter_Enable(i)); if (board->invert_outputs) - writeb(0x01, - devpriv->mite->daq_io_addr + Port_Data(i)); + writeb(0x01, devpriv->mmio + Port_Data(i)); else - writeb(0x00, - devpriv->mite->daq_io_addr + Port_Data(i)); + writeb(0x00, devpriv->mmio + Port_Data(i)); } - writeb(ClrEdge | ClrOverflow, - devpriv->mite->daq_io_addr + Clear_Register); - writeb(0x00, - devpriv->mite->daq_io_addr + Master_Interrupt_Control); + writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); + writeb(0x00, devpriv->mmio + Master_Interrupt_Control); /* Set filter interval to 0 (32bit reg) */ - writeb(0x00000000, devpriv->mite->daq_io_addr + Filter_Interval); + writeb(0x00000000, devpriv->mmio + Filter_Interval); ret = request_irq(dev->irq, ni_65xx_interrupt, IRQF_SHARED, "ni_65xx", dev); @@ -709,15 +705,12 @@ static void ni_65xx_detach(struct comedi_device *dev) { struct ni_65xx_private *devpriv = dev->private; - if (devpriv && devpriv->mite && devpriv->mite->daq_io_addr) { - writeb(0x00, - devpriv->mite->daq_io_addr + - Master_Interrupt_Control); + if (devpriv && devpriv->mmio) { + writeb(0x00, devpriv->mmio + Master_Interrupt_Control); + iounmap(devpriv->mmio); } if (dev->irq) free_irq(dev->irq, dev); - if (devpriv) - mite_detach(devpriv->mite); comedi_pci_disable(dev); } -- cgit From 39798450a449dadb35f38a0843f1e3a886e66e7f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 11:54:29 -0700 Subject: staging: comedi: ni_670x: remove COMEDI_MITE and HAS_DMA dependancy The mite module provides the DMA interface for the PCI MITE ASIC used on many National Instruments DAQ boards. This driver does not use DMA and only depends on the mite module to initialize the MITE ASIC. Handle the initialization localy and remove the unnecessary dependancies. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 2 -- drivers/staging/comedi/drivers/ni_670x.c | 59 ++++++++++++++++++++------------ 2 files changed, 38 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 8304c39ab57c..341fc07b2a54 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -1037,8 +1037,6 @@ config COMEDI_NI_660X config COMEDI_NI_670X tristate "NI 670x PCI card support" - depends on HAS_DMA - select COMEDI_MITE ---help--- Enable support for National Instruments PCI-6703 and PCI-6704 diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c index b487f8d9eeed..709119c9e089 100644 --- a/drivers/staging/comedi/drivers/ni_670x.c +++ b/drivers/staging/comedi/drivers/ni_670x.c @@ -42,8 +42,6 @@ Commands are not supported. #include "../comedidev.h" -#include "mite.h" - #define AO_VALUE_OFFSET 0x00 #define AO_CHAN_OFFSET 0x0c #define AO_STATUS_OFFSET 0x10 @@ -82,8 +80,7 @@ static const struct ni_670x_board ni_670x_boards[] = { }; struct ni_670x_private { - - struct mite_struct *mite; + void __iomem *mmio; int boardtype; int dio; unsigned int ao_readback[32]; @@ -111,9 +108,9 @@ static int ni_670x_ao_winsn(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { /* First write in channel register which channel to use */ writel(((chan & 15) << 1) | ((chan & 16) >> 4), - devpriv->mite->daq_io_addr + AO_CHAN_OFFSET); + devpriv->mmio + AO_CHAN_OFFSET); /* write channel value */ - writel(data[i], devpriv->mite->daq_io_addr + AO_VALUE_OFFSET); + writel(data[i], devpriv->mmio + AO_VALUE_OFFSET); devpriv->ao_readback[chan] = data[i]; } @@ -140,8 +137,7 @@ static int ni_670x_dio_insn_bits(struct comedi_device *dev, unsigned int *data) { struct ni_670x_private *devpriv = dev->private; - void __iomem *io_addr = devpriv->mite->daq_io_addr + - DIO_PORT0_DATA_OFFSET; + void __iomem *io_addr = devpriv->mmio + DIO_PORT0_DATA_OFFSET; if (comedi_dio_update_state(s, data)) writel(s->state, io_addr); @@ -163,11 +159,34 @@ static int ni_670x_dio_insn_config(struct comedi_device *dev, if (ret) return ret; - writel(s->io_bits, devpriv->mite->daq_io_addr + DIO_PORT0_DIR_OFFSET); + writel(s->io_bits, devpriv->mmio + DIO_PORT0_DIR_OFFSET); return insn->n; } +/* ripped from mite.h and mite_setup2() to avoid mite dependancy */ +#define MITE_IODWBSR 0xc0 /* IO Device Window Base Size Register */ +#define WENAB (1 << 7) /* window enable */ + +static int ni_670x_mite_init(struct pci_dev *pcidev) +{ + void __iomem *mite_base; + u32 main_phys_addr; + + /* ioremap the MITE registers (BAR 0) temporarily */ + mite_base = pci_ioremap_bar(pcidev, 0); + if (!mite_base) + return -ENOMEM; + + /* set data window to main registers (BAR 1) */ + main_phys_addr = pci_resource_start(pcidev, 1); + writel(main_phys_addr | WENAB, mite_base + MITE_IODWBSR); + + /* finished with MITE registers */ + iounmap(mite_base); + return 0; +} + static int ni_670x_auto_attach(struct comedi_device *dev, unsigned long context) { @@ -193,15 +212,13 @@ static int ni_670x_auto_attach(struct comedi_device *dev, if (!devpriv) return -ENOMEM; - devpriv->mite = mite_alloc(pcidev); - if (!devpriv->mite) - return -ENOMEM; - - ret = mite_setup(devpriv->mite); - if (ret < 0) { - dev_warn(dev->class_dev, "error setting up mite\n"); + ret = ni_670x_mite_init(pcidev); + if (ret) return ret; - } + + devpriv->mmio = pci_ioremap_bar(pcidev, 1); + if (!devpriv->mmio) + return -ENOMEM; ret = comedi_alloc_subdevices(dev, 2); if (ret) @@ -242,9 +259,9 @@ static int ni_670x_auto_attach(struct comedi_device *dev, s->insn_config = ni_670x_dio_insn_config; /* Config of misc registers */ - writel(0x10, devpriv->mite->daq_io_addr + MISC_CONTROL_OFFSET); + writel(0x10, devpriv->mmio + MISC_CONTROL_OFFSET); /* Config of ao registers */ - writel(0x00, devpriv->mite->daq_io_addr + AO_CONTROL_OFFSET); + writel(0x00, devpriv->mmio + AO_CONTROL_OFFSET); return 0; } @@ -259,8 +276,8 @@ static void ni_670x_detach(struct comedi_device *dev) if (s) kfree(s->range_table_list); } - if (devpriv) - mite_detach(devpriv->mite); + if (devpriv && devpriv->mmio) + iounmap(devpriv->mmio); comedi_pci_disable(dev); } -- cgit From 0f9e53012031b25bfd4ea130eb56de0399491070 Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Wed, 16 Jul 2014 16:03:20 -0400 Subject: staging: unisys: added virtpci info entry This patch adds the virtpci debugfs directory and the info entry inside of it. Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virtpci/virtpci.c | 110 ++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virtpci/virtpci.c b/drivers/staging/unisys/virtpci/virtpci.c index 7d840b0618eb..a80617fc61c9 100644 --- a/drivers/staging/unisys/virtpci/virtpci.c +++ b/drivers/staging/unisys/virtpci/virtpci.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "version.h" #include "guestlinuxdebug.h" #include "timskmodutils.h" @@ -58,6 +59,11 @@ struct driver_private { #define BUS_ID(x) dev_name(x) +/* MAX_BUF = 4 busses x ( 32 devices/bus + 1 busline) x 80 characters + * = 10,560 bytes ~ 2^14 = 16,384 bytes + */ +#define MAX_BUF 16384 + #include "virtpci.h" /* this is shorter than using __FILE__ (full path name) in @@ -100,6 +106,12 @@ static int virtpci_device_resume(struct device *dev); static int virtpci_device_probe(struct device *dev); static int virtpci_device_remove(struct device *dev); +static ssize_t info_debugfs_read(struct file *file, char __user *buf, + size_t len, loff_t *offset); + +static const struct file_operations debugfs_info_fops = { + .read = info_debugfs_read, +}; /*****************************************************/ /* Globals */ @@ -140,6 +152,13 @@ static DEFINE_RWLOCK(VpcidevListLock); /* filled in with info about this driver, wrt it servicing client busses */ static ULTRA_VBUS_DEVICEINFO Bus_DriverInfo; +/*****************************************************/ +/* debugfs entries */ +/*****************************************************/ +/* dentry is used to create the debugfs entry directory + * for virtpci + */ +static struct dentry *virtpci_debugfs_dir; struct virtpci_busdev { struct device virtpci_bus_device; @@ -1376,6 +1395,90 @@ void virtpci_unregister_driver(struct virtpci_driver *drv) } EXPORT_SYMBOL_GPL(virtpci_unregister_driver); +/*****************************************************/ +/* debugfs filesystem functions */ +/*****************************************************/ +struct print_vbus_info { + int *str_pos; + char *buf; + size_t *len; +}; + +static int print_vbus(struct device *vbus, void *data) +{ + struct print_vbus_info *p = (struct print_vbus_info *)data; + + *p->str_pos += scnprintf(p->buf + *p->str_pos, *p->len - *p->str_pos, + "bus_id:%s\n", dev_name(vbus)); + return 0; +} + +static ssize_t info_debugfs_read(struct file *file, char __user *buf, + size_t len, loff_t *offset) +{ + ssize_t bytes_read = 0; + int str_pos = 0; + struct virtpci_dev *tmpvpcidev; + unsigned long flags; + struct print_vbus_info printparam; + char *vbuf; + + if (len > MAX_BUF) + len = MAX_BUF; + vbuf = kzalloc(len, GFP_KERNEL); + if (!vbuf) + return -ENOMEM; + + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + " Virtual PCI Bus devices\n"); + printparam.str_pos = &str_pos; + printparam.buf = vbuf; + printparam.len = &len; + if (bus_for_each_dev(&virtpci_bus_type, NULL, + (void *) &printparam, print_vbus)) + LOGERR("Failed to find bus\n"); + + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "\n Virtual PCI devices\n"); + read_lock_irqsave(&VpcidevListLock, flags); + tmpvpcidev = VpcidevListHead; + while (tmpvpcidev) { + if (tmpvpcidev->devtype == VIRTHBA_TYPE) { + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "[%d:%d] VHba:%08x:%08x max-config:%d-%d-%d-%d", + tmpvpcidev->busNo, tmpvpcidev->deviceNo, + tmpvpcidev->scsi.wwnn.wwnn1, + tmpvpcidev->scsi.wwnn.wwnn2, + tmpvpcidev->scsi.max.max_channel, + tmpvpcidev->scsi.max.max_id, + tmpvpcidev->scsi.max.max_lun, + tmpvpcidev->scsi.max.cmd_per_lun); + } else { + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "[%d:%d] VNic:%02x:%02x:%02x:%02x:%02x:%02x num_rcv_bufs:%d mtu:%d", + tmpvpcidev->busNo, tmpvpcidev->deviceNo, + tmpvpcidev->net.mac_addr[0], + tmpvpcidev->net.mac_addr[1], + tmpvpcidev->net.mac_addr[2], + tmpvpcidev->net.mac_addr[3], + tmpvpcidev->net.mac_addr[4], + tmpvpcidev->net.mac_addr[5], + tmpvpcidev->net.num_rcv_bufs, + tmpvpcidev->net.mtu); + } + str_pos += scnprintf(vbuf + str_pos, + len - str_pos, " chanptr:%p\n", + tmpvpcidev->queueinfo.chan); + tmpvpcidev = tmpvpcidev->next; + } + read_unlock_irqrestore(&VpcidevListLock, flags); + + str_pos += scnprintf(vbuf + str_pos, len - str_pos, "\n"); + bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos); + kfree(vbuf); + return bytes_read; +} + /*****************************************************/ /* Module Init & Exit functions */ /*****************************************************/ @@ -1426,7 +1529,10 @@ static int __init virtpci_mod_init(void) LOGINF("successfully registered virtpci_ctrlchan_func (0x%p) as callback.\n", (void *) &virtpci_ctrlchan_func); - + /* create debugfs directory and info file inside. */ + virtpci_debugfs_dir = debugfs_create_dir("virtpci", NULL); + debugfs_create_file("info", S_IRUSR, virtpci_debugfs_dir, + NULL, &debugfs_info_fops); LOGINF("Leaving\n"); POSTCODE_LINUX_2(VPCI_CREATE_EXIT_PC, POSTCODE_SEVERITY_INFO); return 0; @@ -1442,7 +1548,7 @@ static void __exit virtpci_mod_exit(void) device_unregister(&virtpci_rootbus_device); bus_unregister(&virtpci_bus_type); - + debugfs_remove_recursive(virtpci_debugfs_dir); LOGINF("Leaving\n"); } -- cgit From 16b2a37895ee553f7da2e1a4027d33d1ebe7b032 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:51 -0700 Subject: staging: comedi: ni_65xx: filter interval register is 32-bit According to the register programming manual, the filter interval register is 32-bit. Fix the writes to this register. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index d6c11405ebc0..292355b24994 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -299,7 +299,7 @@ static int ni_65xx_config_filter(struct comedi_device *dev, data[1] = interval * filter_resolution_ns; if (interval != devpriv->filter_interval) { - writeb(interval, devpriv->mmio + Filter_Interval); + writel(interval, devpriv->mmio + Filter_Interval); devpriv->filter_interval = interval; } @@ -689,7 +689,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, writeb(0x00, devpriv->mmio + Master_Interrupt_Control); /* Set filter interval to 0 (32bit reg) */ - writeb(0x00000000, devpriv->mmio + Filter_Interval); + writel(0x00000000, devpriv->mmio + Filter_Interval); ret = request_irq(dev->irq, ni_65xx_interrupt, IRQF_SHARED, "ni_65xx", dev); -- cgit From 8f587d35af6978fcdd3a88680ff7fe8f83497090 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:52 -0700 Subject: staging: comedi: ni_65xx: cleanup non-recurring register map defines Rename the CamelCase defines used for the non-recurring registers. Define all the non-recurring registers and bits. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 99 ++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 292355b24994..42d2c2409c0d 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -51,8 +51,50 @@ except maybe the 6514. #include "comedi_fc.h" -#define NI6514_DIO_SIZE 4096 -#define NI6514_MITE_SIZE 4096 +/* + * PCI BAR1 Register Map + */ + +/* Non-recurring Registers (8-bit except where noted) */ +#define NI_65XX_ID_REG 0x00 +#define NI_65XX_CLR_REG 0x01 +#define NI_65XX_CLR_WDOG_INT (1 << 6) +#define NI_65XX_CLR_WDOG_PING (1 << 5) +#define NI_65XX_CLR_WDOG_EXP (1 << 4) +#define NI_65XX_CLR_EDGE_INT (1 << 3) +#define NI_65XX_CLR_OVERFLOW_INT (1 << 2) +#define NI_65XX_STATUS_REG 0x02 +#define NI_65XX_STATUS_WDOG_INT (1 << 5) +#define NI_65XX_STATUS_FALL_EDGE (1 << 4) +#define NI_65XX_STATUS_RISE_EDGE (1 << 3) +#define NI_65XX_STATUS_INT (1 << 2) +#define NI_65XX_STATUS_OVERFLOW_INT (1 << 1) +#define NI_65XX_STATUS_EDGE_INT (1 << 0) +#define NI_65XX_CTRL_REG 0x03 +#define NI_65XX_CTRL_WDOG_ENA (1 << 5) +#define NI_65XX_CTRL_FALL_EDGE_ENA (1 << 4) +#define NI_65XX_CTRL_RISE_EDGE_ENA (1 << 3) +#define NI_65XX_CTRL_INT_ENA (1 << 2) +#define NI_65XX_CTRL_OVERFLOW_ENA (1 << 1) +#define NI_65XX_CTRL_EDGE_ENA (1 << 0) +#define NI_65XX_REV_REG 0x04 /* 32-bit */ +#define NI_65XX_FILTER_REG 0x08 /* 32-bit */ +#define NI_65XX_RTSI_ROUTE_REG 0x0c /* 16-bit */ +#define NI_65XX_RTSI_EDGE_REG 0x0e /* 16-bit */ +#define NI_65XX_RTSI_WDOG_REG 0x10 /* 16-bit */ +#define NI_65XX_RTSI_TRIG_REG 0x12 /* 16-bit */ +#define NI_65XX_AUTO_CLK_SEL_REG 0x14 /* PXI-6528 only */ +#define NI_65XX_AUTO_CLK_SEL_STATUS (1 << 1) +#define NI_65XX_AUTO_CLK_SEL_DISABLE (1 << 0) +#define NI_65XX_WDOG_CTRL_REG 0x15 +#define NI_65XX_WDOG_CTRL_ENA (1 << 0) +#define NI_65XX_RTSI_CFG_REG 0x16 +#define NI_65XX_RTSI_CFG_RISE_SENSE (1 << 2) +#define NI_65XX_RTSI_CFG_FALL_SENSE (1 << 1) +#define NI_65XX_RTSI_CFG_SYNC_DETECT (1 << 0) +#define NI_65XX_WDOG_STATUS_REG 0x17 +#define NI_65XX_WDOG_STATUS_EXP (1 << 0) +#define NI_65XX_WDOG_INTERVAL_REG 0x18 /* 32-bit */ #define NI_65XX_MAX_NUM_PORTS 12 static const unsigned ni_65xx_channels_per_port = 8; @@ -83,26 +125,6 @@ static inline unsigned Filter_Enable(unsigned port) return 0x44 + port * ni_65xx_port_offset; } -#define ID_Register 0x00 - -#define Clear_Register 0x01 -#define ClrEdge 0x08 -#define ClrOverflow 0x04 - -#define Filter_Interval 0x08 - -#define Change_Status 0x02 -#define MasterInterruptStatus 0x04 -#define Overflow 0x02 -#define EdgeStatus 0x01 - -#define Master_Interrupt_Control 0x03 -#define FallingEdgeIntEnable 0x10 -#define RisingEdgeIntEnable 0x08 -#define MasterInterruptEnable 0x04 -#define OverflowIntEnable 0x02 -#define EdgeIntEnable 0x01 - enum ni_65xx_boardid { BOARD_PCI6509, BOARD_PXI6509, @@ -299,7 +321,7 @@ static int ni_65xx_config_filter(struct comedi_device *dev, data[1] = interval * filter_resolution_ns; if (interval != devpriv->filter_interval) { - writel(interval, devpriv->mmio + Filter_Interval); + writel(interval, devpriv->mmio + NI_65XX_FILTER_REG); devpriv->filter_interval = interval; } @@ -424,13 +446,14 @@ static irqreturn_t ni_65xx_interrupt(int irq, void *d) struct comedi_subdevice *s = dev->read_subdev; unsigned int status; - status = readb(devpriv->mmio + Change_Status); - if ((status & MasterInterruptStatus) == 0) + status = readb(devpriv->mmio + NI_65XX_STATUS_REG); + if ((status & NI_65XX_STATUS_INT) == 0) return IRQ_NONE; - if ((status & EdgeStatus) == 0) + if ((status & NI_65XX_STATUS_EDGE_INT) == 0) return IRQ_NONE; - writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); + writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, + devpriv->mmio + NI_65XX_CLR_REG); comedi_buf_put(s, 0); s->async->events |= COMEDI_CB_EOS; @@ -485,10 +508,11 @@ static int ni_65xx_intr_cmd(struct comedi_device *dev, { struct ni_65xx_private *devpriv = dev->private; - writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); - writeb(FallingEdgeIntEnable | RisingEdgeIntEnable | - MasterInterruptEnable | EdgeIntEnable, - devpriv->mmio + Master_Interrupt_Control); + writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, + devpriv->mmio + NI_65XX_CLR_REG); + writeb(NI_65XX_CTRL_FALL_EDGE_ENA | NI_65XX_CTRL_RISE_EDGE_ENA | + NI_65XX_CTRL_INT_ENA | NI_65XX_CTRL_EDGE_ENA, + devpriv->mmio + NI_65XX_CTRL_REG); return 0; } @@ -498,7 +522,7 @@ static int ni_65xx_intr_cancel(struct comedi_device *dev, { struct ni_65xx_private *devpriv = dev->private; - writeb(0x00, devpriv->mmio + Master_Interrupt_Control); + writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); return 0; } @@ -601,7 +625,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, dev->irq = pcidev->irq; dev_info(dev->class_dev, "board: %s, ID=0x%02x", dev->board_name, - readb(devpriv->mmio + ID_Register)); + readb(devpriv->mmio + NI_65XX_ID_REG)); ret = comedi_alloc_subdevices(dev, 4); if (ret) @@ -685,11 +709,12 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, else writeb(0x00, devpriv->mmio + Port_Data(i)); } - writeb(ClrEdge | ClrOverflow, devpriv->mmio + Clear_Register); - writeb(0x00, devpriv->mmio + Master_Interrupt_Control); + writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, + devpriv->mmio + NI_65XX_CLR_REG); + writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); /* Set filter interval to 0 (32bit reg) */ - writel(0x00000000, devpriv->mmio + Filter_Interval); + writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); ret = request_irq(dev->irq, ni_65xx_interrupt, IRQF_SHARED, "ni_65xx", dev); @@ -706,7 +731,7 @@ static void ni_65xx_detach(struct comedi_device *dev) struct ni_65xx_private *devpriv = dev->private; if (devpriv && devpriv->mmio) { - writeb(0x00, devpriv->mmio + Master_Interrupt_Control); + writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); iounmap(devpriv->mmio); } if (dev->irq) -- cgit From 632b9ad38a215e47c1348948a32c7221cba8b41b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:53 -0700 Subject: staging: comedi: ni_65xx: cleanup recurring register map Convert the inline functions used to calculate the offsets to the recurring port registers and rename them to remove the CamelCase. Define all the recurring registers. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 88 ++++++++++++++------------------ 1 file changed, 37 insertions(+), 51 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 42d2c2409c0d..83e414401538 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -96,34 +96,22 @@ except maybe the 6514. #define NI_65XX_WDOG_STATUS_EXP (1 << 0) #define NI_65XX_WDOG_INTERVAL_REG 0x18 /* 32-bit */ +/* Recurring port registers (8-bit) */ +#define NI_65XX_PORT(x) ((x) * 0x10) +#define NI_65XX_IO_DATA_REG(x) (0x40 + NI_65XX_PORT(x)) +#define NI_65XX_IO_SEL_REG(x) (0x41 + NI_65XX_PORT(x)) +#define NI_65XX_IO_SEL_OUTPUT (0 << 0) +#define NI_65XX_IO_SEL_INPUT (1 << 0) +#define NI_65XX_RISE_EDGE_ENA_REG(x) (0x42 + NI_65XX_PORT(x)) +#define NI_65XX_FALL_EDGE_ENA_REG(x) (0x43 + NI_65XX_PORT(x)) +#define NI_65XX_FILTER_ENA(x) (0x44 + NI_65XX_PORT(x)) +#define NI_65XX_WDOG_HIZ_REG(x) (0x46 + NI_65XX_PORT(x)) +#define NI_65XX_WDOG_ENA(x) (0x47 + NI_65XX_PORT(x)) +#define NI_65XX_WDOG_HI_LO_REG(x) (0x48 + NI_65XX_PORT(x)) +#define NI_65XX_RTSI_ENA(x) (0x49 + NI_65XX_PORT(x)) + #define NI_65XX_MAX_NUM_PORTS 12 static const unsigned ni_65xx_channels_per_port = 8; -static const unsigned ni_65xx_port_offset = 0x10; - -static inline unsigned Port_Data(unsigned port) -{ - return 0x40 + port * ni_65xx_port_offset; -} - -static inline unsigned Port_Select(unsigned port) -{ - return 0x41 + port * ni_65xx_port_offset; -} - -static inline unsigned Rising_Edge_Detection_Enable(unsigned port) -{ - return 0x42 + port * ni_65xx_port_offset; -} - -static inline unsigned Falling_Edge_Detection_Enable(unsigned port) -{ - return 0x43 + port * ni_65xx_port_offset; -} - -static inline unsigned Filter_Enable(unsigned port) -{ - return 0x44 + port * ni_65xx_port_offset; -} enum ni_65xx_boardid { BOARD_PCI6509, @@ -333,7 +321,7 @@ static int ni_65xx_config_filter(struct comedi_device *dev, } writeb(devpriv->filter_enable[port], - devpriv->mmio + Filter_Enable(port)); + devpriv->mmio + NI_65XX_FILTER_ENA(port)); return 2; } @@ -357,14 +345,16 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, if (s->type != COMEDI_SUBD_DIO) return -EINVAL; devpriv->dio_direction[port] = COMEDI_OUTPUT; - writeb(0, devpriv->mmio + Port_Select(port)); + writeb(NI_65XX_IO_SEL_OUTPUT, + devpriv->mmio + NI_65XX_IO_SEL_REG(port)); return 1; break; case INSN_CONFIG_DIO_INPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; devpriv->dio_direction[port] = COMEDI_INPUT; - writeb(1, devpriv->mmio + Port_Select(port)); + writeb(NI_65XX_IO_SEL_INPUT, + devpriv->mmio + NI_65XX_IO_SEL_REG(port)); return 1; break; case INSN_CONFIG_DIO_QUERY: @@ -419,9 +409,10 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, bits = devpriv->output_bits[port]; if (board->invert_outputs) bits = ~bits; - writeb(bits, devpriv->mmio + Port_Data(port)); + writeb(bits, devpriv->mmio + NI_65XX_IO_DATA_REG(port)); } - port_read_bits = readb(devpriv->mmio + Port_Data(port)); + port_read_bits = readb(devpriv->mmio + + NI_65XX_IO_DATA_REG(port)); if (s->type == COMEDI_SUBD_DO && board->invert_outputs) { /* Outputs inverted, so invert value read back from * DO subdevice. (Does not apply to boards with DIO @@ -547,21 +538,15 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, if (data[0] != INSN_CONFIG_CHANGE_NOTIFY) return -EINVAL; - writeb(data[1], devpriv->mmio + Rising_Edge_Detection_Enable(0)); - writeb(data[1] >> 8, - devpriv->mmio + Rising_Edge_Detection_Enable(0x10)); - writeb(data[1] >> 16, - devpriv->mmio + Rising_Edge_Detection_Enable(0x20)); - writeb(data[1] >> 24, - devpriv->mmio + Rising_Edge_Detection_Enable(0x30)); - - writeb(data[2], devpriv->mmio + Falling_Edge_Detection_Enable(0)); - writeb(data[2] >> 8, - devpriv->mmio + Falling_Edge_Detection_Enable(0x10)); - writeb(data[2] >> 16, - devpriv->mmio + Falling_Edge_Detection_Enable(0x20)); - writeb(data[2] >> 24, - devpriv->mmio + Falling_Edge_Detection_Enable(0x30)); + writeb(data[1], devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0)); + writeb(data[1] >> 8, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x10)); + writeb(data[1] >> 16, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x20)); + writeb(data[1] >> 24, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x30)); + + writeb(data[2], devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0)); + writeb(data[2] >> 8, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x10)); + writeb(data[2] >> 16, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x20)); + writeb(data[2] >> 24, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x30)); return 2; } @@ -680,9 +665,10 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (!spriv) return -ENOMEM; spriv->base_port = 0; + /* configure all ports for input */ for (i = 0; i < board->num_dio_ports; ++i) { - /* configure all ports for input */ - writeb(0x1, devpriv->mmio + Port_Select(i)); + writeb(NI_65XX_IO_SEL_INPUT, + devpriv->mmio + NI_65XX_IO_SEL_REG(i)); } } else { s->type = COMEDI_SUBD_UNUSED; @@ -703,11 +689,11 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->insn_config = ni_65xx_intr_insn_config; for (i = 0; i < ni_65xx_total_num_ports(board); ++i) { - writeb(0x00, devpriv->mmio + Filter_Enable(i)); + writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); if (board->invert_outputs) - writeb(0x01, devpriv->mmio + Port_Data(i)); + writeb(0x01, devpriv->mmio + NI_65XX_IO_DATA_REG(i)); else - writeb(0x00, devpriv->mmio + Port_Data(i)); + writeb(0x00, devpriv->mmio + NI_65XX_IO_DATA_REG(i)); } writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, devpriv->mmio + NI_65XX_CLR_REG); -- cgit From 8405e40e841bda3aa4a261fbb278bb2fb031358c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:54 -0700 Subject: staging: comedi: ni_65xx: cleanup INSN_CONFIG_FILTER handling The INSN_CONFIG_FILTER instruction is used to set the deglitch filter interval used to debounce the input channels. Absorb the helper function into the (*insn_config) function and refactor the code to not require the 'filter_interval' and 'filter_enable' members in the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 82 +++++++++++++------------------- 1 file changed, 33 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 83e414401538..c8cd0e1dcc66 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -271,8 +271,6 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board struct ni_65xx_private { void __iomem *mmio; - unsigned int filter_interval; - unsigned short filter_enable[NI_65XX_MAX_NUM_PORTS]; unsigned short output_bits[NI_65XX_MAX_NUM_PORTS]; unsigned short dio_direction[NI_65XX_MAX_NUM_PORTS]; }; @@ -287,60 +285,46 @@ static inline struct ni_65xx_subdevice_private *sprivate(struct comedi_subdevice return subdev->private; } -static int ni_65xx_config_filter(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) -{ - struct ni_65xx_private *devpriv = dev->private; - const unsigned chan = CR_CHAN(insn->chanspec); - const unsigned port = - sprivate(s)->base_port + ni_65xx_port_by_channel(chan); - - if (data[0] != INSN_CONFIG_FILTER) - return -EINVAL; - if (data[1]) { - static const unsigned filter_resolution_ns = 200; - static const unsigned max_filter_interval = 0xfffff; - unsigned interval = - (data[1] + - (filter_resolution_ns / 2)) / filter_resolution_ns; - if (interval > max_filter_interval) - interval = max_filter_interval; - data[1] = interval * filter_resolution_ns; - - if (interval != devpriv->filter_interval) { - writel(interval, devpriv->mmio + NI_65XX_FILTER_REG); - devpriv->filter_interval = interval; - } - - devpriv->filter_enable[port] |= - 1 << (chan % ni_65xx_channels_per_port); - } else { - devpriv->filter_enable[port] &= - ~(1 << (chan % ni_65xx_channels_per_port)); - } - - writeb(devpriv->filter_enable[port], - devpriv->mmio + NI_65XX_FILTER_ENA(port)); - - return 2; -} - static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct ni_65xx_private *devpriv = dev->private; - unsigned port; + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int chan_mask = 1 << (chan % ni_65xx_channels_per_port); + unsigned port = sprivate(s)->base_port + ni_65xx_port_by_channel(chan); + unsigned int interval; + unsigned int val; - if (insn->n < 1) - return -EINVAL; - port = sprivate(s)->base_port + - ni_65xx_port_by_channel(CR_CHAN(insn->chanspec)); switch (data[0]) { case INSN_CONFIG_FILTER: - return ni_65xx_config_filter(dev, s, insn, data); - break; + /* + * The deglitch filter interval is specified in nanoseconds. + * The hardware supports intervals in 200ns increments. Round + * the user values up and return the actual interval. + */ + interval = (data[1] + 100) / 200; + if (interval > 0xfffff) + interval = 0xfffff; + data[1] = interval * 200; + + /* + * Enable/disable the channel for deglitch filtering. Note + * that the filter interval is never set to '0'. This is done + * because other channels might still be enabled for filtering. + */ + val = readb(devpriv->mmio + NI_65XX_FILTER_ENA(port)); + if (interval) { + writel(interval, devpriv->mmio + NI_65XX_FILTER_REG); + val |= chan_mask; + } else { + val &= ~chan_mask; + } + writeb(val, devpriv->mmio + NI_65XX_FILTER_ENA(port)); + + return insn->n; + case INSN_CONFIG_DIO_OUTPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; -- cgit From 11d892cc8c71f540fc50552a250a2975ac968611 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:55 -0700 Subject: staging: comedi: ni_65xx: remove 'dio_direction' from private data The IO Select registers are readable. Remove the need for the 'dio_direction' member in the private data by just checking the register value for the INSN_CONFIG_DIO_QUERY instruction. Also, refactor the switch statement to return -EINVAL for unhandled instructions and have the (*insn_config) return insn->n normally. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index c8cd0e1dcc66..4b3f504ee495 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -272,7 +272,6 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board struct ni_65xx_private { void __iomem *mmio; unsigned short output_bits[NI_65XX_MAX_NUM_PORTS]; - unsigned short dio_direction[NI_65XX_MAX_NUM_PORTS]; }; struct ni_65xx_subdevice_private { @@ -322,35 +321,35 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, val &= ~chan_mask; } writeb(val, devpriv->mmio + NI_65XX_FILTER_ENA(port)); - - return insn->n; + break; case INSN_CONFIG_DIO_OUTPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; - devpriv->dio_direction[port] = COMEDI_OUTPUT; writeb(NI_65XX_IO_SEL_OUTPUT, devpriv->mmio + NI_65XX_IO_SEL_REG(port)); - return 1; break; + case INSN_CONFIG_DIO_INPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; - devpriv->dio_direction[port] = COMEDI_INPUT; writeb(NI_65XX_IO_SEL_INPUT, devpriv->mmio + NI_65XX_IO_SEL_REG(port)); - return 1; break; + case INSN_CONFIG_DIO_QUERY: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; - data[1] = devpriv->dio_direction[port]; - return insn->n; + val = readb(devpriv->mmio + NI_65XX_IO_SEL_REG(port)); + data[1] = (val == NI_65XX_IO_SEL_INPUT) ? COMEDI_INPUT + : COMEDI_OUTPUT; break; + default: - break; + return -EINVAL; } - return -EINVAL; + + return insn->n; } static int ni_65xx_dio_insn_bits(struct comedi_device *dev, -- cgit From 98e9f679dd6ecb73084831bf08f5fadb62b0a079 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:56 -0700 Subject: staging: comedi: ni_65xx: remove the need for the subdevice private data There is only one member in the subdevice private data, an unsigned value that is the 'base_port' that the subdevice uses to access the port registers. Just cast the appropriate value into s->private instead of allocating the private data for each subdevice. The casts are a bit of a nusance but it removes the unnecessary allocations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 39 ++++++++++++-------------------- 1 file changed, 14 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 4b3f504ee495..7e562f1cffc8 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -274,25 +274,16 @@ struct ni_65xx_private { unsigned short output_bits[NI_65XX_MAX_NUM_PORTS]; }; -struct ni_65xx_subdevice_private { - unsigned base_port; -}; - -static inline struct ni_65xx_subdevice_private *sprivate(struct comedi_subdevice - *subdev) -{ - return subdev->private; -} - static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { struct ni_65xx_private *devpriv = dev->private; + unsigned long base_port = (unsigned long)s->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int chan_mask = 1 << (chan % ni_65xx_channels_per_port); - unsigned port = sprivate(s)->base_port + ni_65xx_port_by_channel(chan); + unsigned port = base_port + ni_65xx_port_by_channel(chan); unsigned int interval; unsigned int val; @@ -357,6 +348,7 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { const struct ni_65xx_board *board = comedi_board(dev); + unsigned long base_port = (unsigned long)s->private; struct ni_65xx_private *devpriv = dev->private; int base_bitfield_channel; unsigned read_bits = 0; @@ -366,7 +358,7 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, base_bitfield_channel = CR_CHAN(insn->chanspec); for (port_offset = ni_65xx_port_by_channel(base_bitfield_channel); port_offset <= last_port_offset; port_offset++) { - unsigned port = sprivate(s)->base_port + port_offset; + unsigned port = base_port + port_offset; int base_port_channel = port_offset * ni_65xx_channels_per_port; unsigned port_mask, port_data, port_read_bits; int bitshift = base_port_channel - base_bitfield_channel; @@ -563,7 +555,6 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct ni_65xx_board *board = NULL; struct ni_65xx_private *devpriv; - struct ni_65xx_subdevice_private *spriv; struct comedi_subdevice *s; unsigned i; int ret; @@ -609,10 +600,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->maxdata = 1; s->insn_config = ni_65xx_dio_insn_config; s->insn_bits = ni_65xx_dio_insn_bits; - spriv = comedi_alloc_spriv(s, sizeof(*spriv)); - if (!spriv) - return -ENOMEM; - spriv->base_port = 0; + + /* the input ports always start at port 0 */ + s->private = (void *)0; } else { s->type = COMEDI_SUBD_UNUSED; } @@ -626,10 +616,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->range_table = &range_digital; s->maxdata = 1; s->insn_bits = ni_65xx_dio_insn_bits; - spriv = comedi_alloc_spriv(s, sizeof(*spriv)); - if (!spriv) - return -ENOMEM; - spriv->base_port = board->num_di_ports; + + /* the output ports always start after the input ports */ + s->private = (void *)(unsigned long)board->num_di_ports; } else { s->type = COMEDI_SUBD_UNUSED; } @@ -644,10 +633,10 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->maxdata = 1; s->insn_config = ni_65xx_dio_insn_config; s->insn_bits = ni_65xx_dio_insn_bits; - spriv = comedi_alloc_spriv(s, sizeof(*spriv)); - if (!spriv) - return -ENOMEM; - spriv->base_port = 0; + + /* the input/output ports always start at port 0 */ + s->private = (void *)0; + /* configure all ports for input */ for (i = 0; i < board->num_dio_ports; ++i) { writeb(NI_65XX_IO_SEL_INPUT, -- cgit From 33998d67d5269430f8a52c719817f9e47fef47b0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:57 -0700 Subject: staging: comedi: ni_65xx: hook up command support only if irq is available Subdevice 3 is used in this driver to provide edge detection of the input channels. Move the reset/disable of the interrupts and the request_irq() so that when subdevice 3 is setup we can conditionally hookup the async command support only if the irq is available. Also, remove the noise when the irq is not available. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 49 +++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 7e562f1cffc8..517dbc6f7395 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -582,7 +582,17 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (!devpriv->mmio) return -ENOMEM; - dev->irq = pcidev->irq; + writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, + devpriv->mmio + NI_65XX_CLR_REG); + writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); + + if (pcidev->irq) { + ret = request_irq(pcidev->irq, ni_65xx_interrupt, IRQF_SHARED, + dev->board_name, dev); + if (ret == 0) + dev->irq = pcidev->irq; + } + dev_info(dev->class_dev, "board: %s, ID=0x%02x", dev->board_name, readb(devpriv->mmio + NI_65XX_ID_REG)); @@ -647,18 +657,21 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, } s = &dev->subdevices[3]; - dev->read_subdev = s; - s->type = COMEDI_SUBD_DI; - s->subdev_flags = SDF_READABLE | SDF_CMD_READ; - s->n_chan = 1; - s->range_table = &range_unknown; - s->maxdata = 1; - s->len_chanlist = 1; - s->do_cmdtest = ni_65xx_intr_cmdtest; - s->do_cmd = ni_65xx_intr_cmd; - s->cancel = ni_65xx_intr_cancel; - s->insn_bits = ni_65xx_intr_insn_bits; - s->insn_config = ni_65xx_intr_insn_config; + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE; + s->n_chan = 1; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = ni_65xx_intr_insn_bits; + if (dev->irq) { + dev->read_subdev = s; + s->subdev_flags |= SDF_CMD_READ; + s->len_chanlist = 1; + s->insn_config = ni_65xx_intr_insn_config; + s->do_cmdtest = ni_65xx_intr_cmdtest; + s->do_cmd = ni_65xx_intr_cmd; + s->cancel = ni_65xx_intr_cancel; + } for (i = 0; i < ni_65xx_total_num_ports(board); ++i) { writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); @@ -667,20 +680,10 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, else writeb(0x00, devpriv->mmio + NI_65XX_IO_DATA_REG(i)); } - writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, - devpriv->mmio + NI_65XX_CLR_REG); - writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); /* Set filter interval to 0 (32bit reg) */ writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); - ret = request_irq(dev->irq, ni_65xx_interrupt, IRQF_SHARED, - "ni_65xx", dev); - if (ret < 0) { - dev->irq = 0; - dev_warn(dev->class_dev, "irq not available\n"); - } - return 0; } -- cgit From b3e33cd3f83fcb4415a1014a1c8b11c621900ae8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:58 -0700 Subject: staging: comedi: ni_65xx: fix ni_65xx_intr_insn_config() Refactor this function to follow the standard (*insn_config) form. Add a sanity check of the number of data parameters (insn->n). Currently the core does not check INSN_CONFIG_CHANGE_NOTIFY. Fix the writes to the rise/fall edge enable registers. The macro expects a "port" value not the port offset value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 45 +++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 517dbc6f7395..742d3cdcd898 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -508,22 +508,41 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, { struct ni_65xx_private *devpriv = dev->private; - if (insn->n < 1) - return -EINVAL; - if (data[0] != INSN_CONFIG_CHANGE_NOTIFY) - return -EINVAL; + switch (data[0]) { + case INSN_CONFIG_CHANGE_NOTIFY: + /* add instruction to check_insn_config_length() */ + if (insn->n != 3) + return -EINVAL; - writeb(data[1], devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0)); - writeb(data[1] >> 8, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x10)); - writeb(data[1] >> 16, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x20)); - writeb(data[1] >> 24, devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0x30)); + /* + * This only works for the first 4 ports (32 channels)! + */ - writeb(data[2], devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0)); - writeb(data[2] >> 8, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x10)); - writeb(data[2] >> 16, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x20)); - writeb(data[2] >> 24, devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0x30)); + /* set the channels to monitor for rising edges */ + writeb(data[1] & 0xff, + devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0)); + writeb((data[1] >> 8) & 0xff, + devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(1)); + writeb((data[1] >> 16) & 0xff, + devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(2)); + writeb((data[1] >> 24) & 0xff, + devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(3)); + + /* set the channels to monitor for falling edges */ + writeb(data[2] & 0xff, + devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0)); + writeb((data[2] >> 8) & 0xff, + devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(1)); + writeb((data[2] >> 16) & 0xff, + devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(2)); + writeb((data[2] >> 24) & 0xff, + devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(3)); + break; + default: + return -EINVAL; + } - return 2; + return insn->n; } /* ripped from mite.h and mite_setup2() to avoid mite dependancy */ -- cgit From 1b094a424d64e3e320a2786a2914539471cc408b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:06:59 -0700 Subject: staging: comedi: ni_65xx: tidy up the port<->chan conversions Introduce some convienence macros to handle the port to channel, channel to port, and channel mask calculations based on the 8 channels per port of the hardware. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 40 ++++++++++++++------------------ 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 742d3cdcd898..5218e67fb21b 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -110,8 +110,10 @@ except maybe the 6514. #define NI_65XX_WDOG_HI_LO_REG(x) (0x48 + NI_65XX_PORT(x)) #define NI_65XX_RTSI_ENA(x) (0x49 + NI_65XX_PORT(x)) -#define NI_65XX_MAX_NUM_PORTS 12 -static const unsigned ni_65xx_channels_per_port = 8; +#define NI_65XX_MAX_NUM_PORTS 12 +#define NI_65XX_PORT_TO_CHAN(x) ((x) * 8) +#define NI_65XX_CHAN_TO_PORT(x) ((x) / 8) +#define NI_65XX_CHAN_TO_MASK(x) (1 << ((x) % 8)) enum ni_65xx_boardid { BOARD_PCI6509, @@ -258,11 +260,6 @@ static const struct ni_65xx_board ni_65xx_boards[] = { }, }; -static inline unsigned ni_65xx_port_by_channel(unsigned channel) -{ - return channel / ni_65xx_channels_per_port; -} - static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board *board) { @@ -282,8 +279,8 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct ni_65xx_private *devpriv = dev->private; unsigned long base_port = (unsigned long)s->private; unsigned int chan = CR_CHAN(insn->chanspec); - unsigned int chan_mask = 1 << (chan % ni_65xx_channels_per_port); - unsigned port = base_port + ni_65xx_port_by_channel(chan); + unsigned int chan_mask = NI_65XX_CHAN_TO_MASK(chan); + unsigned port = base_port + NI_65XX_CHAN_TO_PORT(chan); unsigned int interval; unsigned int val; @@ -345,23 +342,23 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, static int ni_65xx_dio_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { const struct ni_65xx_board *board = comedi_board(dev); - unsigned long base_port = (unsigned long)s->private; struct ni_65xx_private *devpriv = dev->private; - int base_bitfield_channel; + unsigned long base_port = (unsigned long)s->private; + unsigned int base_chan = CR_CHAN(insn->chanspec); + int last_port_offset = NI_65XX_CHAN_TO_PORT(s->n_chan - 1); unsigned read_bits = 0; - int last_port_offset = ni_65xx_port_by_channel(s->n_chan - 1); int port_offset; - base_bitfield_channel = CR_CHAN(insn->chanspec); - for (port_offset = ni_65xx_port_by_channel(base_bitfield_channel); + for (port_offset = NI_65XX_CHAN_TO_PORT(base_chan); port_offset <= last_port_offset; port_offset++) { unsigned port = base_port + port_offset; - int base_port_channel = port_offset * ni_65xx_channels_per_port; + int base_port_channel = NI_65XX_PORT_TO_CHAN(port_offset); unsigned port_mask, port_data, port_read_bits; - int bitshift = base_port_channel - base_bitfield_channel; + int bitshift = base_port_channel - base_chan; if (bitshift >= 32) break; @@ -623,8 +620,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (board->num_di_ports) { s->type = COMEDI_SUBD_DI; s->subdev_flags = SDF_READABLE; - s->n_chan = - board->num_di_ports * ni_65xx_channels_per_port; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_di_ports); s->range_table = &range_digital; s->maxdata = 1; s->insn_config = ni_65xx_dio_insn_config; @@ -640,8 +636,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (board->num_do_ports) { s->type = COMEDI_SUBD_DO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = - board->num_do_ports * ni_65xx_channels_per_port; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_do_ports); s->range_table = &range_digital; s->maxdata = 1; s->insn_bits = ni_65xx_dio_insn_bits; @@ -656,8 +651,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (board->num_dio_ports) { s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = - board->num_dio_ports * ni_65xx_channels_per_port; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_dio_ports); s->range_table = &range_digital; s->maxdata = 1; s->insn_config = ni_65xx_dio_insn_config; -- cgit From feb919dc83f1525af62fadec19a7131b67a8a864 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:00 -0700 Subject: staging: comedi: ni_65xx: tidy up the subdevice initialization For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 46 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 5218e67fb21b..07d59493ed7b 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -618,44 +618,44 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s = &dev->subdevices[0]; if (board->num_di_ports) { - s->type = COMEDI_SUBD_DI; - s->subdev_flags = SDF_READABLE; - s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_di_ports); - s->range_table = &range_digital; - s->maxdata = 1; - s->insn_config = ni_65xx_dio_insn_config; - s->insn_bits = ni_65xx_dio_insn_bits; + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_di_ports); + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = ni_65xx_dio_insn_bits; + s->insn_config = ni_65xx_dio_insn_config; /* the input ports always start at port 0 */ s->private = (void *)0; } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } s = &dev->subdevices[1]; if (board->num_do_ports) { - s->type = COMEDI_SUBD_DO; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_do_ports); - s->range_table = &range_digital; - s->maxdata = 1; - s->insn_bits = ni_65xx_dio_insn_bits; + s->type = COMEDI_SUBD_DO; + s->subdev_flags = SDF_WRITABLE; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_do_ports); + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = ni_65xx_dio_insn_bits; /* the output ports always start after the input ports */ s->private = (void *)(unsigned long)board->num_di_ports; } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } s = &dev->subdevices[2]; if (board->num_dio_ports) { - s->type = COMEDI_SUBD_DIO; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_dio_ports); - s->range_table = &range_digital; - s->maxdata = 1; - s->insn_config = ni_65xx_dio_insn_config; - s->insn_bits = ni_65xx_dio_insn_bits; + s->type = COMEDI_SUBD_DIO; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE; + s->n_chan = NI_65XX_PORT_TO_CHAN(board->num_dio_ports); + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = ni_65xx_dio_insn_bits; + s->insn_config = ni_65xx_dio_insn_config; /* the input/output ports always start at port 0 */ s->private = (void *)0; @@ -666,7 +666,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, devpriv->mmio + NI_65XX_IO_SEL_REG(i)); } } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } s = &dev->subdevices[3]; -- cgit From f5b6ebd6f10548b5f35683b382072100b23d2f76 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:01 -0700 Subject: staging: comedi: ni_65xx: tidy up the comedi_driver declaration For aesthetics, add some whitespace to the comedi_driver declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 07d59493ed7b..6c194fcdcad0 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -714,10 +714,10 @@ static void ni_65xx_detach(struct comedi_device *dev) } static struct comedi_driver ni_65xx_driver = { - .driver_name = "ni_65xx", - .module = THIS_MODULE, - .auto_attach = ni_65xx_auto_attach, - .detach = ni_65xx_detach, + .driver_name = "ni_65xx", + .module = THIS_MODULE, + .auto_attach = ni_65xx_auto_attach, + .detach = ni_65xx_detach, }; static int ni_65xx_pci_probe(struct pci_dev *dev, -- cgit From 96470b68654a8e2a515f320f869142fbf358c8bc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:02 -0700 Subject: staging: comedi: ni_65xx: clean up multi-line comments Clean up the multi-line comments at the beginning of the file so they follow the kernel CodingStyle. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 95 +++++++++++++++++++------------- 1 file changed, 57 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 6c194fcdcad0..3b563591debf 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -1,46 +1,65 @@ /* - comedi/drivers/ni_6514.c - driver for National Instruments PCI-6514 - - Copyright (C) 2006 Jon Grierson - Copyright (C) 2006 Frank Mori Hess - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 1999,2002,2003 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. + * ni_65xx.c + * Comedi driver for National Instruments PCI-65xx static dio boards + * + * Copyright (C) 2006 Jon Grierson + * Copyright (C) 2006 Frank Mori Hess + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 1999,2002,2003 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. + */ - 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. -*/ /* -Driver: ni_65xx -Description: National Instruments 65xx static dio boards -Author: Jon Grierson , - Frank Mori Hess -Status: testing -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 -Updated: Wed Oct 18 08:59:11 EDT 2006 - -Based on the PCI-6527 driver by ds. -The interrupt subdevice (subdevice 3) is probably broken for all boards -except maybe the 6514. - -*/ + * Driver: ni_65xx + * Description: National Instruments 65xx static dio boards + * Author: Jon Grierson , + * Frank Mori Hess + * Status: testing + * Devices: (National Instruments) PCI-6509 [ni_65xx] + * (National Instruments) PXI-6509 [ni_65xx] + * (National Instruments) PCI-6510 [ni_65xx] + * (National Instruments) PCI-6511 [ni_65xx] + * (National Instruments) PXI-6511 [ni_65xx] + * (National Instruments) PCI-6512 [ni_65xx] + * (National Instruments) PXI-6512 [ni_65xx] + * (National Instruments) PCI-6513 [ni_65xx] + * (National Instruments) PXI-6513 [ni_65xx] + * (National Instruments) PCI-6514 [ni_65xx] + * (National Instruments) PXI-6514 [ni_65xx] + * (National Instruments) PCI-6515 [ni_65xx] + * (National Instruments) PXI-6515 [ni_65xx] + * (National Instruments) PCI-6516 [ni_65xx] + * (National Instruments) PCI-6517 [ni_65xx] + * (National Instruments) PCI-6518 [ni_65xx] + * (National Instruments) PCI-6519 [ni_65xx] + * (National Instruments) PCI-6520 [ni_65xx] + * (National Instruments) PCI-6521 [ni_65xx] + * (National Instruments) PXI-6521 [ni_65xx] + * (National Instruments) PCI-6528 [ni_65xx] + * (National Instruments) PXI-6528 [ni_65xx] + * Updated: Wed Oct 18 08:59:11 EDT 2006 + * + * Configuration Options: not applicable, uses PCI auto config + * + * Based on the PCI-6527 driver by ds. + * The interrupt subdevice (subdevice 3) is probably broken for all + * boards except maybe the 6514. + */ /* - Manuals (available from ftp://ftp.natinst.com/support/manuals) - - 370106b.pdf 6514 Register Level Programmer Manual - + * Manuals (available from ftp://ftp.natinst.com/support/manuals) + * + * 370106b.pdf 6514 Register Level Programmer Manual */ #include -- cgit From 68864aab3d70a0bb02e8326370fd150160cc66dc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:03 -0700 Subject: staging: comedi: ni_65xx: update the MODULE_DESCRIPTION Update the MODULE_DESCRIPTION to better describe the driver. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 3b563591debf..e547c2f80726 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -781,5 +781,5 @@ static struct pci_driver ni_65xx_pci_driver = { module_comedi_pci_driver(ni_65xx_driver, ni_65xx_pci_driver); MODULE_AUTHOR("Comedi http://www.comedi.org"); -MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_DESCRIPTION("Comedi driver for NI PCI-65xx static dio boards"); MODULE_LICENSE("GPL"); -- cgit From b44ce32ded8d5f57434f6ee9296c73b3875bd23c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:04 -0700 Subject: staging: comedi: ni_65xx: tidy ni_65xx_intr_insn_bits() declaration For aesthetics, tidy up the whitespace of this function declarations to follow the form in the rest of the driver. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index e547c2f80726..46d4ebcac55f 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -511,7 +511,8 @@ static int ni_65xx_intr_cancel(struct comedi_device *dev, static int ni_65xx_intr_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { data[1] = 0; return insn->n; -- cgit From 5c70b5360b539f9b177bd02e0b3b88345116ee52 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:05 -0700 Subject: staging: comedi: ni_65xx: remove 'output_bits' from private data Remove the need for the 'output_bits' in the private data by just reading the current state of the data port when updating the output channels in the (*insn_bits) function. Add a local variable to handle the inverting of the hardware values when the boardinfo indicates that the outputs are inverted. Rename the local variable 'port_read_bits' to 'bits' so that we can use it for updating the output channels and reading back the actual state to return to the user. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 41 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 46d4ebcac55f..a6d5fde428d6 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -129,7 +129,6 @@ #define NI_65XX_WDOG_HI_LO_REG(x) (0x48 + NI_65XX_PORT(x)) #define NI_65XX_RTSI_ENA(x) (0x49 + NI_65XX_PORT(x)) -#define NI_65XX_MAX_NUM_PORTS 12 #define NI_65XX_PORT_TO_CHAN(x) ((x) * 8) #define NI_65XX_CHAN_TO_PORT(x) ((x) / 8) #define NI_65XX_CHAN_TO_MASK(x) (1 << ((x) % 8)) @@ -287,7 +286,6 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board struct ni_65xx_private { void __iomem *mmio; - unsigned short output_bits[NI_65XX_MAX_NUM_PORTS]; }; static int ni_65xx_dio_insn_config(struct comedi_device *dev, @@ -369,14 +367,19 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, unsigned long base_port = (unsigned long)s->private; unsigned int base_chan = CR_CHAN(insn->chanspec); int last_port_offset = NI_65XX_CHAN_TO_PORT(s->n_chan - 1); + unsigned invert = 0x00; unsigned read_bits = 0; int port_offset; + /* handle inverted outputs if necessary */ + if (s->type == COMEDI_SUBD_DO && board->invert_outputs) + invert = 0xff; + for (port_offset = NI_65XX_CHAN_TO_PORT(base_chan); port_offset <= last_port_offset; port_offset++) { unsigned port = base_port + port_offset; int base_port_channel = NI_65XX_PORT_TO_CHAN(port_offset); - unsigned port_mask, port_data, port_read_bits; + unsigned port_mask, port_data, bits; int bitshift = base_port_channel - base_chan; if (bitshift >= 32) @@ -392,30 +395,26 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, } port_mask &= 0xff; port_data &= 0xff; + + /* update the outputs */ if (port_mask) { - unsigned bits; - devpriv->output_bits[port] &= ~port_mask; - devpriv->output_bits[port] |= - port_data & port_mask; - bits = devpriv->output_bits[port]; - if (board->invert_outputs) - bits = ~bits; + bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); + bits ^= invert; + bits &= ~port_mask; + bits |= (port_data & port_mask); + bits ^= invert; writeb(bits, devpriv->mmio + NI_65XX_IO_DATA_REG(port)); } - port_read_bits = readb(devpriv->mmio + - NI_65XX_IO_DATA_REG(port)); - if (s->type == COMEDI_SUBD_DO && board->invert_outputs) { - /* Outputs inverted, so invert value read back from - * DO subdevice. (Does not apply to boards with DIO - * subdevice.) */ - port_read_bits ^= 0xFF; - } + + /* read back the actual state */ + bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); + bits ^= invert; if (bitshift > 0) - port_read_bits <<= bitshift; + bits <<= bitshift; else - port_read_bits >>= -bitshift; + bits >>= -bitshift; - read_bits |= port_read_bits; + read_bits |= bits; } data[1] = read_bits; return insn->n; -- cgit From 800453dc5cabcc0f1bb2a185ca2df9bcf01fa142 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:06 -0700 Subject: staging: comedi: ni_65xx: use the subdevice 'io_bits' to handle the 'invert_outputs' Some of the boards supported by this driver have output ports that are inverted from the comedi view of the output state. For these boards the read values from the output ports needs to be inverted before being modified and inverted again before being written back in the (*insn_bits) operation. Currently the subdevice type and the boardinfo is checked in the (*insn_bits) to determine if the inverted outputs need to be handled. Since thise driver does not use the subdevice 'io_bits', simplify the driver a bit by initializing the 'io_bits' during the attach to handle the inversion. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index a6d5fde428d6..3e25e4e67c7f 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -362,19 +362,13 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - const struct ni_65xx_board *board = comedi_board(dev); struct ni_65xx_private *devpriv = dev->private; unsigned long base_port = (unsigned long)s->private; unsigned int base_chan = CR_CHAN(insn->chanspec); int last_port_offset = NI_65XX_CHAN_TO_PORT(s->n_chan - 1); - unsigned invert = 0x00; unsigned read_bits = 0; int port_offset; - /* handle inverted outputs if necessary */ - if (s->type == COMEDI_SUBD_DO && board->invert_outputs) - invert = 0xff; - for (port_offset = NI_65XX_CHAN_TO_PORT(base_chan); port_offset <= last_port_offset; port_offset++) { unsigned port = base_port + port_offset; @@ -399,16 +393,16 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, /* update the outputs */ if (port_mask) { bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); - bits ^= invert; + bits ^= s->io_bits; /* invert if necessary */ bits &= ~port_mask; bits |= (port_data & port_mask); - bits ^= invert; + bits ^= s->io_bits; /* invert back */ writeb(bits, devpriv->mmio + NI_65XX_IO_DATA_REG(port)); } /* read back the actual state */ bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); - bits ^= invert; + bits ^= s->io_bits; /* invert if necessary */ if (bitshift > 0) bits <<= bitshift; else @@ -662,6 +656,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, /* the output ports always start after the input ports */ s->private = (void *)(unsigned long)board->num_di_ports; + + /* use the io_bits to handle the inverted outputs */ + s->io_bits = (board->invert_outputs) ? 0xff : 0x00; } else { s->type = COMEDI_SUBD_UNUSED; } -- cgit From dd2694734212286e19c82cab5934aaf42649dc2a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:07 -0700 Subject: staging: comedi: ni_65xx: fix digital output reset during attach During the attach of this driver, the digital output ports are all initialized to a known state. Some of the boards supported by this driver have output ports that are inverted from the comedi view of the output state. For these boards the values written to the ports needs to be inverted. Currently, only bit 0 of each port is inverted when the boardinfo indicates that the outputs are inverted. This results in channels 0, 8, 16, etc. being set to '0' and all other channels being set to '1'. If the boardinfo does not indicate that the outputs are inverted, all the channels are set to '0'. This initialization is unnecessary for the input only ports. The input/output ports also do not need to be initialized since they are configured as inputs during the attach. Move the output port initialization so it occurs when the digital output subdevice is setup. Use the 's->io_bits' value to initialize the ports so that the correct inverted/non-inverted state is used for the comedi '0' value. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 3e25e4e67c7f..a0deb0159c3b 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -659,6 +659,13 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, /* use the io_bits to handle the inverted outputs */ s->io_bits = (board->invert_outputs) ? 0xff : 0x00; + + /* reset all output ports to comedi '0' */ + for (i = 0; i < board->num_do_ports; ++i) { + writeb(s->io_bits, /* inverted if necessary */ + devpriv->mmio + + NI_65XX_IO_DATA_REG(board->num_di_ports + i)); + } } else { s->type = COMEDI_SUBD_UNUSED; } @@ -702,13 +709,8 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->cancel = ni_65xx_intr_cancel; } - for (i = 0; i < ni_65xx_total_num_ports(board); ++i) { + for (i = 0; i < ni_65xx_total_num_ports(board); ++i) writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); - if (board->invert_outputs) - writeb(0x01, devpriv->mmio + NI_65XX_IO_DATA_REG(i)); - else - writeb(0x00, devpriv->mmio + NI_65XX_IO_DATA_REG(i)); - } /* Set filter interval to 0 (32bit reg) */ writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); -- cgit From 9233c8db355e70550298f493ec7c30b3e6425868 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:07:08 -0700 Subject: staging: comedi: ni_65xx: factor input filter disable out of (*auto_attach) For aesthetics, factor the code that disables the input filters out of ni_65xx_auto_attach(). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index a0deb0159c3b..cad2c2890a27 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -278,16 +278,29 @@ static const struct ni_65xx_board ni_65xx_boards[] = { }, }; -static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board - *board) -{ - return board->num_dio_ports + board->num_di_ports + board->num_do_ports; -} - struct ni_65xx_private { void __iomem *mmio; }; +static void ni_65xx_disable_input_filters(struct comedi_device *dev) +{ + const struct ni_65xx_board *board = comedi_board(dev); + struct ni_65xx_private *devpriv = dev->private; + unsigned num_ports; + int i; + + num_ports = board->num_dio_ports + + board->num_di_ports + + board->num_do_ports; + + /* disable input filtering on all ports */ + for (i = 0; i < num_ports; ++i) + writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); + + /* set filter interval to 0 (32bit reg) */ + writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); +} + static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -709,11 +722,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, s->cancel = ni_65xx_intr_cancel; } - for (i = 0; i < ni_65xx_total_num_ports(board); ++i) - writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); - - /* Set filter interval to 0 (32bit reg) */ - writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); + ni_65xx_disable_input_filters(dev); return 0; } -- cgit From ba9a1e3f07fc43df5f1b8bd8b0c72d0c3bbf5e16 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:38 -0700 Subject: staging: comedi: mite.h: tidy up the mite channel register offsets Convert the inline MITE_* functions, used to calculate the mite channel register offsets, into simple macros. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.h | 106 ++++++---------------------------- 1 file changed, 18 insertions(+), 88 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index a4852cbd5b31..33d87a239532 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -107,11 +107,6 @@ void mite_prep_dma(struct mite_channel *mite_chan, int mite_buf_change(struct mite_dma_descriptor_ring *ring, struct comedi_subdevice *s); -static inline int CHAN_OFFSET(int channel) -{ - return 0x500 + 0x100 * channel; -}; - enum mite_registers { /* The bits 0x90180700 in MITE_UNKNOWN_DMA_BURST_REG can be written and read back. The bits 0x1f always read as 1. @@ -123,90 +118,25 @@ enum mite_registers { MITE_PCI_CONFIG_OFFSET = 0x300, MITE_CSIGR = 0x460 /* chip signature */ }; -static inline int MITE_CHOR(int channel) -{ /* channel operation */ - return CHAN_OFFSET(channel) + 0x0; -}; - -static inline int MITE_CHCR(int channel) -{ /* channel control */ - return CHAN_OFFSET(channel) + 0x4; -}; - -static inline int MITE_TCR(int channel) -{ /* transfer count */ - return CHAN_OFFSET(channel) + 0x8; -}; - -static inline int MITE_MCR(int channel) -{ /* memory configuration */ - return CHAN_OFFSET(channel) + 0xc; -}; - -static inline int MITE_MAR(int channel) -{ /* memory address */ - return CHAN_OFFSET(channel) + 0x10; -}; - -static inline int MITE_DCR(int channel) -{ /* device configuration */ - return CHAN_OFFSET(channel) + 0x14; -}; - -static inline int MITE_DAR(int channel) -{ /* device address */ - return CHAN_OFFSET(channel) + 0x18; -}; - -static inline int MITE_LKCR(int channel) -{ /* link configuration */ - return CHAN_OFFSET(channel) + 0x1c; -}; -static inline int MITE_LKAR(int channel) -{ /* link address */ - return CHAN_OFFSET(channel) + 0x20; -}; - -static inline int MITE_LLKAR(int channel) -{ /* see mite section of tnt5002 manual */ - return CHAN_OFFSET(channel) + 0x24; -}; - -static inline int MITE_BAR(int channel) -{ /* base address */ - return CHAN_OFFSET(channel) + 0x28; -}; - -static inline int MITE_BCR(int channel) -{ /* base count */ - return CHAN_OFFSET(channel) + 0x2c; -}; - -static inline int MITE_SAR(int channel) -{ /* ? address */ - return CHAN_OFFSET(channel) + 0x30; -}; - -static inline int MITE_WSCR(int channel) -{ /* ? */ - return CHAN_OFFSET(channel) + 0x34; -}; - -static inline int MITE_WSER(int channel) -{ /* ? */ - return CHAN_OFFSET(channel) + 0x38; -}; - -static inline int MITE_CHSR(int channel) -{ /* channel status */ - return CHAN_OFFSET(channel) + 0x3c; -}; - -static inline int MITE_FCR(int channel) -{ /* fifo count */ - return CHAN_OFFSET(channel) + 0x40; -}; +#define MITE_CHAN(x) (0x500 + 0x100 * (x)) +#define MITE_CHOR(x) (0x00 + MITE_CHAN(x)) /* channel operation */ +#define MITE_CHCR(x) (0x04 + MITE_CHAN(x)) /* channel control */ +#define MITE_TCR(x) (0x08 + MITE_CHAN(x)) /* transfer count */ +#define MITE_MCR(x) (0x0c + MITE_CHAN(x)) /* memory configuration */ +#define MITE_MAR(x) (0x10 + MITE_CHAN(x)) /* memory address */ +#define MITE_DCR(x) (0x14 + MITE_CHAN(x)) /* device configuration */ +#define MITE_DAR(x) (0x18 + MITE_CHAN(x)) /* device address */ +#define MITE_LKCR(x) (0x1c + MITE_CHAN(x)) /* link configuration */ +#define MITE_LKAR(x) (0x20 + MITE_CHAN(x)) /* link address */ +#define MITE_LLKAR(x) (0x24 + MITE_CHAN(x)) /* see tnt5002 manual */ +#define MITE_BAR(x) (0x28 + MITE_CHAN(x)) /* base address */ +#define MITE_BCR(x) (0x2c + MITE_CHAN(x)) /* base count */ +#define MITE_SAR(x) (0x30 + MITE_CHAN(x)) /* ? address */ +#define MITE_WSCR(x) (0x34 + MITE_CHAN(x)) /* ? */ +#define MITE_WSER(x) (0x38 + MITE_CHAN(x)) /* ? */ +#define MITE_CHSR(x) (0x3c + MITE_CHAN(x)) /* channel status */ +#define MITE_FCR(x) (0x40 + MITE_CHAN(x)) /* fifo count */ enum MITE_IODWBSR_bits { WENAB = 0x80, /* window enable */ -- cgit From a8b677cb534c78e0aaa3c999891df07073e25566 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:39 -0700 Subject: staging: comedi: comedidev.h: introduce some 'range_is_external' helpers The comedi_krange includes a flags member that currently identifies the 'units' of the range (RF_UNIT) and if the range is from an internal or external source (RF_EXTERNAL). Introduce some helper functions to check if a given range is from an external source. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedidev.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 01679458ab63..a7f24a9f0a23 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -363,6 +363,12 @@ static inline bool comedi_range_is_unipolar(struct comedi_subdevice *s, return s->range_table->range[range].min >= 0; } +static inline bool comedi_range_is_external(struct comedi_subdevice *s, + unsigned int range) +{ + return !!(s->range_table->range[range].flags & RF_EXTERNAL); +} + static inline bool comedi_chan_range_is_bipolar(struct comedi_subdevice *s, unsigned int chan, unsigned int range) @@ -377,6 +383,13 @@ static inline bool comedi_chan_range_is_unipolar(struct comedi_subdevice *s, return s->range_table_list[chan]->range[range].min >= 0; } +static inline bool comedi_chan_range_is_external(struct comedi_subdevice *s, + unsigned int chan, + unsigned int range) +{ + return !!(s->range_table_list[chan]->range[range].flags & RF_EXTERNAL); +} + /* munge between offset binary and two's complement values */ static inline unsigned int comedi_offset_munge(struct comedi_subdevice *s, unsigned int val) -- cgit From fed3c23b5e3c56e358e751418d7310b9c8e926cc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:40 -0700 Subject: staging: comedi: ni_stc.h: remove 'ao_unipolar' flag from ni_board_struct This member of the boardinfo for the NI MIO drivers is used to indicate if the ranges for the analog output subdevice (ao_range_table in the boardinfo) includes any unipolar ranges. If it's not set, the ao_range_table only has bipolar ranges. The 'ao_unipolar' flag is checked when munging the ao data values from the user so that the values for bipolar ranges are converted to 2's complement values before they are written to the hardware. The flag is also used when programming the analog output configuration on non-M series boards for bipolar/unipolar and external reference operation. Simplify the driver a bit by removing this boardinfo flag and just using the comedi_range_is_bipolar() and comedi_range_is_external() helpers to check the range directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 6 ------ drivers/staging/comedi/drivers/ni_mio_common.c | 18 +++++++----------- drivers/staging/comedi/drivers/ni_pcimio.c | 16 ---------------- drivers/staging/comedi/drivers/ni_stc.h | 1 - 4 files changed, 7 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index d7ee6bde44cd..0f4dc5afd493 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -116,7 +116,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { mb88341 }, @@ -133,7 +132,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { mb88341 }, @@ -149,7 +147,6 @@ static const struct ni_board_struct ni_boards[] = { .n_aochan = 2, .aobits = 12, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -165,7 +162,6 @@ static const struct ni_board_struct ni_boards[] = { .n_aochan = 2, .aobits = 12, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -183,7 +179,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -217,7 +212,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 16, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index ff881a7afdd3..471d7af59e99 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2925,7 +2925,8 @@ static void ni_ao_munge(struct comedi_device *dev, struct comedi_subdevice *s, for (i = 0; i < length; i++) { range = CR_RANGE(cmd->chanlist[chan_index]); - if (board->ao_unipolar == 0 || (range & 1) == 0) + + if (comedi_range_is_bipolar(s, range)) array[i] -= offset; #ifdef PCIDMA array[i] = cpu_to_le16(array[i]); @@ -3028,19 +3029,14 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, range = CR_RANGE(chanspec[i]); conf = AO_Channel(chan); - if (board->ao_unipolar) { - if ((range & 1) == 0) { - conf |= AO_Bipolar; - invert = (1 << (board->aobits - 1)); - } else { - invert = 0; - } - if (range & 2) - conf |= AO_Ext_Ref; - } else { + if (comedi_range_is_bipolar(s, range)) { conf |= AO_Bipolar; invert = (1 << (board->aobits - 1)); + } else { + invert = 0; } + if (comedi_range_is_external(s, range)) + conf |= AO_Ext_Ref; /* not all boards can deglitch, but this shouldn't hurt */ if (chanspec[i] & CR_DEGLITCH) diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 20c839b45752..f7e73a77a2dd 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -235,7 +235,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 16, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, @@ -267,7 +266,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 16, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, @@ -283,7 +281,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { mb88341 }, @@ -303,7 +300,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* doc says mb88341 */ @@ -319,7 +315,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { mb88341 }, @@ -336,7 +331,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 16, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, @@ -375,7 +369,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -429,7 +422,6 @@ static const struct ni_board_struct ni_boards[] = { .n_aochan = 2, .aobits = 12, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 100000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* manual is wrong */ @@ -471,7 +463,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_speed = 3000, .n_aochan = 2, .aobits = 16, - .ao_unipolar = 1, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, @@ -653,7 +644,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -670,7 +660,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 12, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 1000, .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, @@ -685,7 +674,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_speed = 3000, .n_aochan = 2, .aobits = 16, - .ao_unipolar = 1, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, @@ -704,7 +692,6 @@ static const struct ni_board_struct ni_boards[] = { .aobits = 16, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, - .ao_unipolar = 1, .ao_speed = 10000, .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, @@ -963,7 +950,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, - .ao_unipolar = 1, .ao_speed = 350, .num_p0_dio_channels = 8, .caldac = { caldac_none }, @@ -980,7 +966,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, - .ao_unipolar = 1, .ao_speed = 350, .num_p0_dio_channels = 8, .caldac = { caldac_none }, @@ -1008,7 +993,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, - .ao_unipolar = 1, .ao_speed = 350, .num_p0_dio_channels = 32, .caldac = { caldac_none }, diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 02a7fa3233e1..b3799f3bad28 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1409,7 +1409,6 @@ struct ni_board_struct { unsigned num_p0_dio_channels; int reg_type; - unsigned int ao_unipolar:1; unsigned int has_8255:1; unsigned int has_analog_trig:1; -- cgit From 093b6968857eb47493b955989ae62bb857648117 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:41 -0700 Subject: staging: comedi: ni_mio_common: fix ni_ao_insn_write_671x() Comedi (*insn_write) functions are expected to write insn->n values to the hardware. Fix this function to work like the core expects. Also, use the comedi_offset_munge() helper to convert the comedi unsigned values into the two's complement values that the hardware needs. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 471d7af59e99..b52dd2fdf88d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3101,22 +3101,32 @@ static int ni_ao_insn_write(struct comedi_device *dev, static int ni_ao_insn_write_671x(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); - unsigned int invert; + int i; ao_win_out(1 << chan, AO_Immediate_671x); - invert = 1 << (board->aobits - 1); ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); - devpriv->ao[chan] = data[0]; - ao_win_out(data[0] ^ invert, DACx_Direct_Data_671x(chan)); + for (i = 0; i < insn->n; i++) { + unsigned int val = data[i]; - return 1; + devpriv->ao[chan] = val; + + /* + * 671x boards have +/-10V outputs + * munge the unsigned comedi values to 2's complement + */ + val = comedi_offset_munge(s, val); + + ao_win_out(val, DACx_Direct_Data_671x(chan)); + } + + return insn->n; } static int ni_ao_insn_config(struct comedi_device *dev, -- cgit From 87b4fe5c877b178949c71e017e4a129e29aae37e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:42 -0700 Subject: staging: comedi: ni_mio_common: remove ao_win_out() macro This marco relies on a local variable having a specific name. Remove the macro and just use ni_ao_win_outw() directly. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index b52dd2fdf88d..d937eb87cf40 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -994,7 +994,6 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) } } -#define ao_win_out(data, addr) ni_ao_win_outw(dev, data, addr) static inline void ni_ao_win_outw(struct comedi_device *dev, uint16_t data, int addr) { @@ -3108,7 +3107,7 @@ static int ni_ao_insn_write_671x(struct comedi_device *dev, unsigned int chan = CR_CHAN(insn->chanspec); int i; - ao_win_out(1 << chan, AO_Immediate_671x); + ni_ao_win_outw(dev, 1 << chan, AO_Immediate_671x); ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); @@ -3123,7 +3122,7 @@ static int ni_ao_insn_write_671x(struct comedi_device *dev, */ val = comedi_offset_munge(s, val); - ao_win_out(val, DACx_Direct_Data_671x(chan)); + ni_ao_win_outw(dev, val, DACx_Direct_Data_671x(chan)); } return insn->n; @@ -3253,7 +3252,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) ni_stc_writew(dev, AO_Disarm, AO_Command_1_Register); if (board->reg_type & ni_reg_6xxx_mask) { - ao_win_out(CLEAR_WG, AO_Misc_611x); + ni_ao_win_outw(dev, CLEAR_WG, AO_Misc_611x); bits = 0; for (i = 0; i < cmd->chanlist_len; i++) { @@ -3261,9 +3260,9 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) chan = CR_CHAN(cmd->chanlist[i]); bits |= 1 << chan; - ao_win_out(chan, AO_Waveform_Generation_611x); + ni_ao_win_outw(dev, chan, AO_Waveform_Generation_611x); } - ao_win_out(bits, AO_Timed_611x); + ni_ao_win_outw(dev, bits, AO_Timed_611x); } ni_ao_config_chanlist(dev, s, cmd->chanlist, cmd->chanlist_len, 1); @@ -3557,8 +3556,8 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) unsigned i; for (i = 0; i < s->n_chan; ++i) immediate_bits |= 1 << i; - ao_win_out(immediate_bits, AO_Immediate_671x); - ao_win_out(CLEAR_WG, AO_Misc_611x); + ni_ao_win_outw(dev, immediate_bits, AO_Immediate_671x); + ni_ao_win_outw(dev, CLEAR_WG, AO_Misc_611x); } ni_stc_writew(dev, AO_Configuration_End, Joint_Reset_Register); @@ -4051,7 +4050,7 @@ static void init_ao_67xx(struct comedi_device *dev, struct comedi_subdevice *s) ni_ao_win_outw(dev, AO_Channel(i) | 0x0, AO_Configuration_2_67xx); } - ao_win_out(0x0, AO_Later_Single_Point_Updates); + ni_ao_win_outw(dev, 0x0, AO_Later_Single_Point_Updates); } static unsigned ni_gpct_to_stc_register(enum ni_gpct_register reg) -- cgit From bfb0c28ba03a46740c80848ba7b93fafb91de033 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:43 -0700 Subject: staging: comedi: ni_mio_common: fix ni_ao_insn_write() Comedi (*insn_write) functions are expected to write insn->n values to the hardware. Fix this function to work like the core expects. Also, don't rely on the return value of ni_ao_comfig_chanlist() to determine if the values need converted to two's complement before writing to the hardware. Use the comedi_range_is_bipolar() and comedi_offset_munge() helpers to clarify the code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 40 +++++++++++++++++++------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index d937eb87cf40..c08b9b63a770 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3079,23 +3079,43 @@ static int ni_ao_insn_read(struct comedi_device *dev, static int ni_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct ni_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); - unsigned int invert; + unsigned int range = CR_RANGE(insn->chanspec); + int reg; + int i; - invert = ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); + if (devpriv->is_m_series) + reg = M_Offset_DAC_Direct_Data(chan); + else + reg = (chan) ? DAC1_Direct_Data : DAC0_Direct_Data; - devpriv->ao[chan] = data[0]; + ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); - if (devpriv->is_m_series) { - ni_writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); - } else - ni_writew(dev, data[0] ^ invert, - (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); + for (i = 0; i < insn->n; i++) { + unsigned int val = data[i]; - return 1; + devpriv->ao[chan] = val; + + if (devpriv->is_m_series) { + /* M-series board always use offset binary values */ + ni_writew(dev, val, reg); + } else { + /* + * Non-M series boards need two's complement values + * for bipolar ranges. + */ + if (comedi_range_is_bipolar(s, range)) + val = comedi_offset_munge(s, val); + + ni_writew(dev, val, reg); + } + } + + return insn->n; } static int ni_ao_insn_write_671x(struct comedi_device *dev, -- cgit From a52b53e4a743988667e5db7cd0de1cdb0732b4f9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:44 -0700 Subject: staging: comedi: ni_stc.h: add some 'is_{board type}' flags to private data The board->reg_type if checked quite often in the ni_mio_common.c code to handle differences in the PCI devices supported by the ni_pcimio driver. Simplify the code a bit by adding some 'is_{board type}' bit-field flags to the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 147 ++++++++++--------------- drivers/staging/comedi/drivers/ni_pcimio.c | 20 +++- drivers/staging/comedi/drivers/ni_stc.h | 10 ++ 3 files changed, 90 insertions(+), 87 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index c08b9b63a770..b5b4a7b7db20 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -958,11 +958,11 @@ static void ni_e_series_enable_second_irq(struct comedi_device *dev, static void ni_clear_ai_fifo(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; static const int timeout = 10000; int i; - if (board->reg_type == ni_reg_6143) { + if (devpriv->is_6143) { /* Flush the 6143 data FIFO */ ni_writel(dev, 0x10, AIFIFO_Control_6143); ni_writel(dev, 0x00, AIFIFO_Control_6143); @@ -977,7 +977,7 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) } } else { ni_stc_writew(dev, 1, ADC_FIFO_Clear); - if (board->reg_type == ni_reg_625x) { + if (devpriv->is_625x) { ni_writeb(dev, 0, M_Offset_Static_AI_Control(0)); ni_writeb(dev, 1, M_Offset_Static_AI_Control(0)); #if 0 @@ -1140,7 +1140,7 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) static void ni_ao_fifo_load(struct comedi_device *dev, struct comedi_subdevice *s, int n) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; int chan; @@ -1158,10 +1158,10 @@ static void ni_ao_fifo_load(struct comedi_device *dev, range = CR_RANGE(cmd->chanlist[chan]); - if (board->reg_type & ni_reg_6xxx_mask) { + if (devpriv->is_6xxx) { packed_data = d & 0xffff; /* 6711 only has 16 bit wide ao fifo */ - if (board->reg_type != ni_reg_6711) { + if (!devpriv->is_6711) { err &= comedi_buf_get(s, &d); if (err == 0) break; @@ -1224,11 +1224,12 @@ static int ni_ao_prep_fifo(struct comedi_device *dev, struct comedi_subdevice *s) { const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; int n; /* reset fifo */ ni_stc_writew(dev, 1, DAC_FIFO_Clear); - if (board->reg_type & ni_reg_6xxx_mask) + if (devpriv->is_6xxx) ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); /* load some data */ @@ -1248,12 +1249,11 @@ static int ni_ao_prep_fifo(struct comedi_device *dev, static void ni_ai_fifo_read(struct comedi_device *dev, struct comedi_subdevice *s, int n) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_async *async = s->async; int i; - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { unsigned short data[2]; u32 dl; @@ -1270,7 +1270,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, data[0] = dl & 0xffff; cfc_write_to_buffer(s, data[0]); } - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { unsigned short data[2]; u32 dl; @@ -1324,7 +1324,6 @@ static void ni_handle_fifo_half_full(struct comedi_device *dev) */ static void ni_handle_fifo_dregs(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data[2]; @@ -1332,7 +1331,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) unsigned short fifo_empty; int i; - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { while ((ni_stc_readw(dev, AI_Status_1_Register) & AI_FIFO_Empty_St) == 0) { dl = ni_readl(dev, ADC_FIFO_Data_611x); @@ -1342,7 +1341,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) data[1] = (dl & 0xffff); cfc_write_array_to_buffer(s, data, sizeof(data)); } - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { i = 0; while (ni_readl(dev, AIFIFO_Status_6143) & 0x04) { dl = ni_readl(dev, AIFIFO_Data_6143); @@ -1388,12 +1387,12 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) static void get_last_sample_611x(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; - if (board->reg_type != ni_reg_611x) + if (!devpriv->is_611x) return; /* Check if there's a single sample stuck in the FIFO */ @@ -1406,12 +1405,12 @@ static void get_last_sample_611x(struct comedi_device *dev) static void get_last_sample_6143(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned short data; u32 dl; - if (board->reg_type != ni_reg_6143) + if (!devpriv->is_6143) return; /* Check if there's a single sample stuck in the FIFO */ @@ -1685,7 +1684,6 @@ static void ni_ai_munge(struct comedi_device *dev, struct comedi_subdevice *s, static int ni_ai_setup_MITE_dma(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; int retval; @@ -1705,18 +1703,13 @@ static int ni_ai_setup_MITE_dma(struct comedi_device *dev) return -EIO; } - switch (board->reg_type) { - case ni_reg_611x: - case ni_reg_6143: + if (devpriv->is_611x || devpriv->is_6143) mite_prep_dma(devpriv->ai_mite_chan, 32, 16); - break; - case ni_reg_628x: + else if (devpriv->is_628x) mite_prep_dma(devpriv->ai_mite_chan, 32, 32); - break; - default: + else mite_prep_dma(devpriv->ai_mite_chan, 16, 16); - break; - } + /*start the MITE */ mite_dma_arm(devpriv->ai_mite_chan); spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); @@ -1726,7 +1719,6 @@ static int ni_ai_setup_MITE_dma(struct comedi_device *dev) static int ni_ao_setup_MITE_dma(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->write_subdev; int retval; @@ -1741,7 +1733,7 @@ static int ni_ao_setup_MITE_dma(struct comedi_device *dev) spin_lock_irqsave(&devpriv->mite_channel_lock, flags); if (devpriv->ao_mite_chan) { - if (board->reg_type & (ni_reg_611x | ni_reg_6713)) { + if (devpriv->is_611x || devpriv->is_6713) { mite_prep_dma(devpriv->ao_mite_chan, 32, 32); } else { /* doing 32 instead of 16 bit wide transfers from memory @@ -1766,7 +1758,7 @@ static int ni_ao_setup_MITE_dma(struct comedi_device *dev) static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) { - const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; ni_release_ai_mite_channel(dev); /* ai configuration */ @@ -1781,7 +1773,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_clear_ai_fifo(dev); - if (board->reg_type != ni_reg_6143) + if (!devpriv->is_6143) ni_writeb(dev, 0, Misc_Command); ni_stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ @@ -1791,7 +1783,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) ni_stc_writew(dev, 0x0000, AI_Mode_2_Register); /* generate FIFO interrupts on non-empty */ ni_stc_writew(dev, (0 << 6) | 0x0000, AI_Mode_3_Register); - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { ni_stc_writew(dev, AI_SHIFTIN_Pulse_Width | AI_SOC_Polarity | @@ -1805,7 +1797,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) AI_CONVERT_Output_Select (AI_CONVERT_Output_Enable_High), AI_Output_Control_Register); - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { ni_stc_writew(dev, AI_SHIFTIN_Pulse_Width | AI_SOC_Polarity | AI_LOCALMUX_CLK_Pulse_Width, @@ -1831,7 +1823,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) AI_EXTMUX_CLK_Output_Select(0) | AI_LOCALMUX_CLK_Output_Select(2) | AI_SC_TC_Output_Select(3); - if (board->reg_type == ni_reg_622x) + if (devpriv->is_622x) ai_output_control_bits |= AI_CONVERT_Output_Select (AI_CONVERT_Output_Enable_High); @@ -2022,8 +2014,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, ni_m_series_load_channelgain_list(dev, n_chan, list); return; } - if (n_chan == 1 && (board->reg_type != ni_reg_611x) - && (board->reg_type != ni_reg_6143)) { + if (n_chan == 1 && !devpriv->is_611x && !devpriv->is_6143) { if (devpriv->changain_state && devpriv->changain_spec == list[0]) { /* ready to go. */ @@ -2038,7 +2029,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, ni_stc_writew(dev, 1, Configuration_Memory_Clear); /* Set up Calibration mode if required */ - if (board->reg_type == ni_reg_6143) { + if (devpriv->is_6143) { if ((list[0] & CR_ALT_SOURCE) && !devpriv->ai_calib_source_enabled) { /* Strobe Relay enable bit */ @@ -2064,8 +2055,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, offset = 1 << (board->adbits - 1); for (i = 0; i < n_chan; i++) { - if ((board->reg_type != ni_reg_6143) - && (list[i] & CR_ALT_SOURCE)) { + if (!devpriv->is_6143 && (list[i] & CR_ALT_SOURCE)) { chan = devpriv->ai_calib_source; } else { chan = CR_CHAN(list[i]); @@ -2076,20 +2066,20 @@ static void ni_load_channelgain_list(struct comedi_device *dev, /* fix the external/internal range differences */ range = ni_gainlkup[board->gainlkup][range]; - if (board->reg_type == ni_reg_611x) + if (devpriv->is_611x) devpriv->ai_offset[i] = offset; else devpriv->ai_offset[i] = (range & 0x100) ? 0 : offset; hi = 0; if ((list[i] & CR_ALT_SOURCE)) { - if (board->reg_type == ni_reg_611x) + if (devpriv->is_611x) ni_writew(dev, CR_CHAN(list[i]) & 0x0003, Calibration_Channel_Select_611x); } else { - if (board->reg_type == ni_reg_611x) + if (devpriv->is_611x) aref = AREF_DIFF; - else if (board->reg_type == ni_reg_6143) + else if (devpriv->is_6143) aref = AREF_OTHER; switch (aref) { case AREF_DIFF: @@ -2109,7 +2099,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, ni_writew(dev, hi, Configuration_Memory_High); - if (board->reg_type != ni_reg_6143) { + if (!devpriv->is_6143) { lo = range; if (i == n_chan - 1) lo |= AI_LAST_CHANNEL; @@ -2121,10 +2111,8 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } /* prime the channel/gain list */ - if ((board->reg_type != ni_reg_611x) - && (board->reg_type != ni_reg_6143)) { + if (!devpriv->is_611x && !devpriv->is_6143) ni_prime_channelgain_list(dev); - } } static int ni_ai_insn_read(struct comedi_device *dev, @@ -2145,7 +2133,7 @@ static int ni_ai_insn_read(struct comedi_device *dev, ni_clear_ai_fifo(dev); signbits = devpriv->ai_offset[0]; - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { for (n = 0; n < num_adc_stages_611x; n++) { ni_stc_writew(dev, AI_CONVERT_Pulse, AI_Command_1_Register); @@ -2178,7 +2166,7 @@ static int ni_ai_insn_read(struct comedi_device *dev, d += signbits; data[n] = d; } - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { for (n = 0; n < insn->n; n++) { ni_stc_writew(dev, AI_CONVERT_Pulse, AI_Command_1_Register); @@ -2261,17 +2249,13 @@ static unsigned ni_min_ai_scan_period_ns(struct comedi_device *dev, unsigned num_channels) { const struct ni_board_struct *board = comedi_board(dev); + struct ni_private *devpriv = dev->private; - switch (board->reg_type) { - case ni_reg_611x: - case ni_reg_6143: - /* simultaneously-sampled inputs */ + /* simultaneously-sampled inputs */ + if (devpriv->is_611x || devpriv->is_6143) return board->ai_speed; - break; - default: - /* multiplexed inputs */ - break; - } + + /* multiplexed inputs */ return board->ai_speed * num_channels; } @@ -2295,8 +2279,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, TRIG_TIMER | TRIG_EXT); sources = TRIG_TIMER | TRIG_EXT; - if (board->reg_type == ni_reg_611x || - board->reg_type == ni_reg_6143) + if (devpriv->is_611x || devpriv->is_6143) sources |= TRIG_NOW; err |= cfc_check_trigger_src(&cmd->convert_src, sources); @@ -2353,8 +2336,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, } if (cmd->convert_src == TRIG_TIMER) { - if ((board->reg_type == ni_reg_611x) - || (board->reg_type == ni_reg_6143)) { + if (devpriv->is_611x || devpriv->is_6143) { err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0); } else { err |= cfc_check_trigger_arg_min(&cmd->convert_arg, @@ -2379,7 +2361,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, if (cmd->stop_src == TRIG_COUNT) { unsigned int max_count = 0x01000000; - if (board->reg_type == ni_reg_611x) + if (devpriv->is_611x) max_count -= num_adc_stages_611x; err |= cfc_check_trigger_arg_max(&cmd->stop_arg, max_count); err |= cfc_check_trigger_arg_min(&cmd->stop_arg, 1); @@ -2405,8 +2387,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, err++; } if (cmd->convert_src == TRIG_TIMER) { - if ((board->reg_type != ni_reg_611x) - && (board->reg_type != ni_reg_6143)) { + if (!devpriv->is_611x && !devpriv->is_6143) { tmp = cmd->convert_arg; cmd->convert_arg = ni_timer_to_ns(dev, ni_ns_to_timer(dev, @@ -2451,7 +2432,6 @@ static int ni_ai_inttrig(struct comedi_device *dev, static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; const struct comedi_cmd *cmd = &s->async->cmd; int timer; @@ -2507,8 +2487,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) mode2 &= ~AI_SC_Reload_Mode; ni_stc_writew(dev, mode2, AI_Mode_2_Register); - if (cmd->chanlist_len == 1 || (board->reg_type == ni_reg_611x) - || (board->reg_type == ni_reg_6143)) { + if (cmd->chanlist_len == 1 || devpriv->is_611x || devpriv->is_6143) { start_stop_select |= AI_STOP_Polarity; start_stop_select |= AI_STOP_Select(31); /* logic low */ start_stop_select |= AI_STOP_Sync; @@ -2522,7 +2501,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) case TRIG_COUNT: stop_count = cmd->stop_arg - 1; - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { /* have to take 3 stage adc pipeline into account */ stop_count += num_adc_stages_611x; } @@ -2857,7 +2836,6 @@ static int ni_ai_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; if (insn->n < 1) @@ -2875,7 +2853,7 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; } devpriv->ai_calib_source = data[1]; - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { unsigned int calib_source; calib_source = data[1] & 0xf; @@ -2895,7 +2873,7 @@ static int ni_ai_insn_config(struct comedi_device *dev, if (calib_source >= 8) return -EINVAL; devpriv->ai_calib_source = calib_source; - if (board->reg_type == ni_reg_611x) { + if (devpriv->is_611x) { ni_writeb(dev, calib_source_adjust, Cal_Gain_Select_611x); } @@ -3182,7 +3160,6 @@ static int ni_ao_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trig_num) { - const struct ni_board_struct *board __maybe_unused = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_cmd *cmd = &s->async->cmd; int ret; @@ -3203,7 +3180,7 @@ static int ni_ao_inttrig(struct comedi_device *dev, interrupt_b_bits = AO_Error_Interrupt_Enable; #ifdef PCIDMA ni_stc_writew(dev, 1, DAC_FIFO_Clear); - if (board->reg_type & ni_reg_6xxx_mask) + if (devpriv->is_6xxx) ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x); ret = ni_ao_setup_MITE_dma(dev); if (ret) @@ -3271,7 +3248,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) ni_stc_writew(dev, AO_Disarm, AO_Command_1_Register); - if (board->reg_type & ni_reg_6xxx_mask) { + if (devpriv->is_6xxx) { ni_ao_win_outw(dev, CLEAR_WG, AO_Misc_611x); bits = 0; @@ -3397,8 +3374,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned bits; devpriv->ao_mode1 &= ~AO_Multiple_Channels; bits = AO_UPDATE_Output_Select(AO_Update_Output_High_Z); - if (devpriv->is_m_series || - board->reg_type & ni_reg_6xxx_mask) { + if (devpriv->is_m_series || devpriv->is_6xxx) { bits |= AO_Number_Of_Channels(0); } else { bits |= @@ -3541,7 +3517,6 @@ static int ni_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; ni_release_ao_mite_channel(dev); @@ -3571,7 +3546,7 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ao_trigger_select = 0; ni_stc_writew(dev, devpriv->ao_trigger_select, AO_Trigger_Select_Register); - if (board->reg_type & ni_reg_6xxx_mask) { + if (devpriv->is_6xxx) { unsigned immediate_bits = 0; unsigned i; for (i = 0; i < s->n_chan; ++i) @@ -5656,7 +5631,7 @@ static int ni_E_init(struct comedi_device *dev, s->type = COMEDI_SUBD_AI; s->subdev_flags = SDF_READABLE | SDF_DIFF | SDF_DITHER | SDF_CMD_READ; - if (board->reg_type != ni_reg_611x) + if (!devpriv->is_611x) s->subdev_flags |= SDF_GROUND | SDF_COMMON | SDF_OTHER; if (board->adbits > 16) s->subdev_flags |= SDF_LSAMPL; @@ -5692,7 +5667,7 @@ static int ni_E_init(struct comedi_device *dev, s->maxdata = (1 << board->aobits) - 1; s->range_table = board->ao_range_table; s->insn_read = &ni_ao_insn_read; - if (board->reg_type & ni_reg_6xxx_mask) + if (devpriv->is_6xxx) s->insn_write = &ni_ao_insn_write_671x; else s->insn_write = &ni_ao_insn_write; @@ -5715,7 +5690,7 @@ static int ni_E_init(struct comedi_device *dev, } else { s->type = COMEDI_SUBD_UNUSED; } - if ((board->reg_type & ni_reg_67xx_mask)) + if (devpriv->is_67xx) init_ao_67xx(dev, s); /* digital i/o subdevice */ @@ -5773,7 +5748,7 @@ static int ni_E_init(struct comedi_device *dev, s->n_chan = 1; s->maxdata = 0; ni_writel(dev, 0x0, M_Offset_Cal_PWM); - } else if (board->reg_type == ni_reg_6143) { + } else if (devpriv->is_6143) { /* internal PWM analog output used for AI nonlinearity calibration */ s->subdev_flags = SDF_INTERNAL; s->insn_config = &ni_6143_pwm_config; @@ -5822,7 +5797,7 @@ static int ni_E_init(struct comedi_device *dev, /* cs5529 calibration adc */ s = &dev->subdevices[NI_CS5529_CALIBRATION_SUBDEV]; - if (board->reg_type & ni_reg_67xx_mask) { + if (devpriv->is_67xx) { s->type = COMEDI_SUBD_AI; s->subdev_flags = SDF_READABLE | SDF_DIFF | SDF_INTERNAL; /* one channel for each analog output channel */ @@ -5909,7 +5884,7 @@ static int ni_E_init(struct comedi_device *dev, /* ai configuration */ s = &dev->subdevices[NI_AI_SUBDEV]; ni_ai_reset(dev, s); - if ((board->reg_type & ni_reg_6xxx_mask) == 0) { + if (!devpriv->is_6xxx) { /* BEAM is this needed for PCI-6143 ?? */ devpriv->clock_and_fout = Slow_Internal_Time_Divide_By_2 | @@ -5943,7 +5918,7 @@ static int ni_E_init(struct comedi_device *dev, ni_writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); ni_writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); - if (board->reg_type & ni_reg_6xxx_mask) { + if (devpriv->is_6xxx) { ni_writeb(dev, 0, Magic_611x); } else if (devpriv->is_m_series) { int channel; diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index f7e73a77a2dd..1095f3f32c92 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1209,6 +1209,24 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (board->reg_type & ni_reg_m_series_mask) devpriv->is_m_series = 1; + if (board->reg_type & ni_reg_6xxx_mask) + devpriv->is_6xxx = 1; + if (board->reg_type == ni_reg_611x) + devpriv->is_611x = 1; + if (board->reg_type == ni_reg_6143) + devpriv->is_6143 = 1; + if (board->reg_type == ni_reg_622x) + devpriv->is_622x = 1; + if (board->reg_type == ni_reg_625x) + devpriv->is_625x = 1; + if (board->reg_type == ni_reg_628x) + devpriv->is_628x = 1; + if (board->reg_type & ni_reg_67xx_mask) + devpriv->is_67xx = 1; + if (board->reg_type == ni_reg_6711) + devpriv->is_6711 = 1; + if (board->reg_type == ni_reg_6713) + devpriv->is_6713 = 1; ret = mite_setup(devpriv->mite); if (ret < 0) { @@ -1234,7 +1252,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (devpriv->is_m_series) m_series_init_eeprom_buffer(dev); - if (board->reg_type == ni_reg_6143) + if (devpriv->is_6143) init_6143(dev); irq = pcidev->irq; diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index b3799f3bad28..bcb3835b23c9 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1491,7 +1491,17 @@ struct ni_private { struct mite_dma_descriptor_ring *cdo_mite_ring; struct mite_dma_descriptor_ring *gpct_mite_ring[NUM_GPCT]; + /* ni_pcimio board type flags (based on the boardinfo reg_type) */ unsigned int is_m_series:1; + unsigned int is_6xxx:1; + unsigned int is_611x:1; + unsigned int is_6143:1; + unsigned int is_622x:1; + unsigned int is_625x:1; + unsigned int is_628x:1; + unsigned int is_67xx:1; + unsigned int is_6711:1; + unsigned int is_6713:1; }; #endif /* _COMEDI_NI_STC_H */ -- cgit From a10817d67f34546401f6733badd427c9decf88e8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:45 -0700 Subject: staging: comedi: ni_mio_common: tidy up ni_ao_munge() Use the bytes_per_sample() helper instead of 'sizeof(short)' to clarify the length calculation. Use comedi_offset_munge() to handle the unsigned to two's complement munge of the data for bipolar ranges. Tidy up the local variables. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index b5b4a7b7db20..13270b348f82 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2886,28 +2886,30 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; } -/* munge data from unsigned to 2's complement for analog output bipolar modes */ static void ni_ao_munge(struct comedi_device *dev, struct comedi_subdevice *s, void *data, unsigned int num_bytes, unsigned int chan_index) { - const struct ni_board_struct *board = comedi_board(dev); - struct comedi_async *async = s->async; - struct comedi_cmd *cmd = &async->cmd; - unsigned int length = num_bytes / sizeof(short); - unsigned int offset = 1 << (board->aobits - 1); + struct comedi_cmd *cmd = &s->async->cmd; + unsigned int length = num_bytes / bytes_per_sample(s); unsigned short *array = data; - unsigned int range; unsigned int i; for (i = 0; i < length; i++) { - range = CR_RANGE(cmd->chanlist[chan_index]); + unsigned int range = CR_RANGE(cmd->chanlist[chan_index]); + unsigned short val = array[i]; + /* + * Munge data from unsigned to two's complement for + * bipolar ranges. + */ if (comedi_range_is_bipolar(s, range)) - array[i] -= offset; + val = comedi_offset_munge(s, val); #ifdef PCIDMA - array[i] = cpu_to_le16(array[i]); + val = cpu_to_le16(val); #endif + array[i] = val; + chan_index++; chan_index %= cmd->chanlist_len; } -- cgit From ab15dce7e963c115cc063643cd6f50c55b606268 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:46 -0700 Subject: staging: comedi: ni_mio_common: remove INSN_CONFIG_ANALOG_TRIG support code None of the boardinfo that uses this code sets the 'has_analog_trig' flag so ni_ai_config_analog_trig() always returns -EINVAL. Also, the private data 'atrig_low', 'atrig_high', and 'atrig_mode' values that are set by ni_ai_config_analog_trig() are never used. Remove the incomplete INSN_CONFIG_ANALOG_TRIG support along with the unused boardinfo and private data members. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 102 ------------------------- drivers/staging/comedi/drivers/ni_stc.h | 5 -- 2 files changed, 107 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 13270b348f82..8854f18eaa16 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2732,106 +2732,6 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int ni_ai_config_analog_trig(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - const struct ni_board_struct *board = comedi_board(dev); - struct ni_private *devpriv = dev->private; - unsigned int a, b, modebits; - int err = 0; - - /* data[1] is flags - * data[2] is analog line - * data[3] is set level - * data[4] is reset level */ - if (!board->has_analog_trig) - return -EINVAL; - if ((data[1] & 0xffff0000) != COMEDI_EV_SCAN_BEGIN) { - data[1] &= (COMEDI_EV_SCAN_BEGIN | 0xffff); - err++; - } - if (data[2] >= board->n_adchan) { - data[2] = board->n_adchan - 1; - err++; - } - if (data[3] > 255) { /* a */ - data[3] = 255; - err++; - } - if (data[4] > 255) { /* b */ - data[4] = 255; - err++; - } - /* - * 00 ignore - * 01 set - * 10 reset - * - * modes: - * 1 level: +b- +a- - * high mode 00 00 01 10 - * low mode 00 00 10 01 - * 2 level: (a> 4); - } - devpriv->atrig_low = a; - devpriv->atrig_high = b; - switch (modebits) { - case 0x81: /* low hysteresis mode */ - devpriv->atrig_mode = 6; - break; - case 0x42: /* high hysteresis mode */ - devpriv->atrig_mode = 3; - break; - case 0x96: /* middle window mode */ - devpriv->atrig_mode = 2; - break; - default: - data[1] &= ~0xff; - err++; - } - } else { - /* one level mode */ - if (b != 0) { - data[4] = 0; - err++; - } - switch (modebits) { - case 0x06: /* high window mode */ - devpriv->atrig_high = a; - devpriv->atrig_mode = 0; - break; - case 0x09: /* low window mode */ - devpriv->atrig_low = a; - devpriv->atrig_mode = 1; - break; - default: - data[1] &= ~0xff; - err++; - } - } - if (err) - return -EAGAIN; - return 5; -} - static int ni_ai_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) @@ -2842,8 +2742,6 @@ static int ni_ai_insn_config(struct comedi_device *dev, return -EINVAL; switch (data[0]) { - case INSN_CONFIG_ANALOG_TRIG: - return ni_ai_config_analog_trig(dev, s, insn, data); case INSN_CONFIG_ALT_SOURCE: if (devpriv->is_m_series) { if (data[1] & ~(MSeries_AI_Bypass_Cal_Sel_Pos_Mask | diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index bcb3835b23c9..2b937d37ae9b 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1410,7 +1410,6 @@ struct ni_board_struct { int reg_type; unsigned int has_8255:1; - unsigned int has_analog_trig:1; enum caldac_enum caldac[3]; }; @@ -1471,10 +1470,6 @@ struct ni_private { unsigned clock_ns; unsigned clock_source; - unsigned short atrig_mode; - unsigned short atrig_high; - unsigned short atrig_low; - unsigned short pwm_up_count; unsigned short pwm_down_count; -- cgit From 47277365195c9722534e1ff3d4c10d36a77858e4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:47 -0700 Subject: staging: comedi: ni_mio_common: remove some unnecessary boardinfo access Currently ni_m_series_ao_config_chanlist() gets the boardinfo pointer in order to get the number of analog output channels. Get this from the comedi_subdevice instead. The ni_old_ao_config_chanlist() function also gets the boardinfo pointer to get the analog output resolution, 'aobits', in order to calculate the value needed to convert samples from unsigned to two's complement for bipolar ranges. Use the comedi_subdevice 'maxdata' instead. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 8854f18eaa16..6e79bcf3ce87 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2818,7 +2818,6 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, unsigned int chanspec[], unsigned int n_chans, int timed) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned int range; unsigned int chan; @@ -2827,7 +2826,7 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, int invert = 0; if (timed) { - for (i = 0; i < board->n_aochan; ++i) { + for (i = 0; i < s->n_chan; ++i) { devpriv->ao_conf[i] &= ~MSeries_AO_Update_Timed_Bit; ni_writeb(dev, devpriv->ao_conf[i], M_Offset_AO_Config_Bank(i)); @@ -2893,7 +2892,6 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, unsigned int chanspec[], unsigned int n_chans) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; unsigned int range; unsigned int chan; @@ -2908,7 +2906,7 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, if (comedi_range_is_bipolar(s, range)) { conf |= AO_Bipolar; - invert = (1 << (board->aobits - 1)); + invert = (s->maxdata + 1) >> 1; } else { invert = 0; } -- cgit From 79816da17302910f70a85b4d269aedb067688926 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:48 -0700 Subject: staging: comedi: ni_mio_common: merge analog output (*insn_write) functions Currently the PCI6xxx boards use a different (*insn_write) function for the analog output subdevice. Most of the code is identical to the (*insn_write) used by all the other board types. For aesthetics, merge the two (*insn_write) functions and handle the 'is_6xxx' differences in the common code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 59 +++++++++----------------- 1 file changed, 21 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 6e79bcf3ce87..9bcf8351129d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2964,10 +2964,15 @@ static int ni_ao_insn_write(struct comedi_device *dev, int reg; int i; - if (devpriv->is_m_series) + if (devpriv->is_6xxx) { + ni_ao_win_outw(dev, 1 << chan, AO_Immediate_671x); + + reg = DACx_Direct_Data_671x(chan); + } else if (devpriv->is_m_series) { reg = M_Offset_DAC_Direct_Data(chan); - else + } else { reg = (chan) ? DAC1_Direct_Data : DAC0_Direct_Data; + } ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); @@ -2976,8 +2981,19 @@ static int ni_ao_insn_write(struct comedi_device *dev, devpriv->ao[chan] = val; - if (devpriv->is_m_series) { - /* M-series board always use offset binary values */ + if (devpriv->is_6xxx) { + /* + * 6xxx boards have bipolar outputs, munge the + * unsigned comedi values to 2's complement + */ + val = comedi_offset_munge(s, val); + + ni_ao_win_outw(dev, val, reg); + } else if (devpriv->is_m_series) { + /* + * M-series boards use offset binary values for + * bipolar and uinpolar outputs + */ ni_writew(dev, val, reg); } else { /* @@ -2994,36 +3010,6 @@ static int ni_ao_insn_write(struct comedi_device *dev, return insn->n; } -static int ni_ao_insn_write_671x(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - struct ni_private *devpriv = dev->private; - unsigned int chan = CR_CHAN(insn->chanspec); - int i; - - ni_ao_win_outw(dev, 1 << chan, AO_Immediate_671x); - - ni_ao_config_chanlist(dev, s, &insn->chanspec, 1, 0); - - for (i = 0; i < insn->n; i++) { - unsigned int val = data[i]; - - devpriv->ao[chan] = val; - - /* - * 671x boards have +/-10V outputs - * munge the unsigned comedi values to 2's complement - */ - val = comedi_offset_munge(s, val); - - ni_ao_win_outw(dev, val, DACx_Direct_Data_671x(chan)); - } - - return insn->n; -} - static int ni_ao_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) @@ -5565,10 +5551,7 @@ static int ni_E_init(struct comedi_device *dev, s->maxdata = (1 << board->aobits) - 1; s->range_table = board->ao_range_table; s->insn_read = &ni_ao_insn_read; - if (devpriv->is_6xxx) - s->insn_write = &ni_ao_insn_write_671x; - else - s->insn_write = &ni_ao_insn_write; + s->insn_write = &ni_ao_insn_write; s->insn_config = &ni_ao_insn_config; #ifdef PCIDMA if (board->n_aochan) { -- cgit From 93fac790668ca6e0151b590385a48360cf521c31 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:49 -0700 Subject: staging: comedi: ni_mio_common: remove ai_continuous from private data This member of the private data can be determined by checking the cmd->stop_src. Do that instead and remove the member. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 8 ++------ drivers/staging/comedi/drivers/ni_stc.h | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 9bcf8351129d..1718382a7e7c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -1499,8 +1499,8 @@ static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status) static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, unsigned ai_mite_status) { - struct ni_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; + struct comedi_cmd *cmd = &s->async->cmd; /* 67xx boards don't have ai subdevice, but their gpct0 might generate an a interrupt */ if (s->type == COMEDI_SUBD_UNUSED) @@ -1551,7 +1551,7 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, return; } if (status & AI_SC_TC_St) { - if (!devpriv->ai_continuous) + if (cmd->stop_src == TRIG_COUNT) shutdown_ai_command(dev); } } @@ -2513,7 +2513,6 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* load SC (Scan Count) */ ni_stc_writew(dev, AI_SC_Load, AI_Command_1_Register); - devpriv->ai_continuous = 0; if (stop_count == 0) { devpriv->ai_cmd2 |= AI_End_On_End_Of_Scan; interrupt_a_enable |= AI_STOP_Interrupt_Enable; @@ -2532,9 +2531,6 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* load SC (Scan Count) */ ni_stc_writew(dev, AI_SC_Load, AI_Command_1_Register); - - devpriv->ai_continuous = 1; - break; } diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 2b937d37ae9b..6f9c4811e231 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1422,7 +1422,6 @@ struct ni_private { unsigned short dio_output; unsigned short dio_control; int aimode; - int ai_continuous; unsigned int ai_calib_source; unsigned int ai_calib_source_enabled; spinlock_t window_lock; -- cgit From 47ef2541fefbff61d54b8bbb47ccc9cd736bb49e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:50 -0700 Subject: staging: comedi: ni_mio_common: fix ni_ao_insn_read() The comedi core expects (*insn_read) functions to return insn->n data smaples. Fix this function to work like the core expects. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 1718382a7e7c..f4125c059d08 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2939,14 +2939,18 @@ static int ni_ao_config_chanlist(struct comedi_device *dev, } static int ni_ao_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, + struct comedi_subdevice *s, + struct comedi_insn *insn, unsigned int *data) { struct ni_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); + int i; - data[0] = devpriv->ao[CR_CHAN(insn->chanspec)]; + for (i = 0; i < insn->n; i++) + data[i] = devpriv->ao[chan]; - return 1; + return insn->n; } static int ni_ao_insn_write(struct comedi_device *dev, -- cgit From 817144ae7fda855dc120b3497246b7eea17bb561 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:51 -0700 Subject: staging: comedi: ni_mio_common: remove unnecessary use of 'board->adbits' For aesthetics, use the subdevice 'maxdata' instead of the board 'adbits'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index f4125c059d08..05f51bc1f2df 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -1899,13 +1899,11 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, struct ni_private *devpriv = dev->private; unsigned int chan, range, aref; unsigned int i; - unsigned offset; unsigned int dither; unsigned range_code; ni_stc_writew(dev, 1, Configuration_Memory_Clear); -/* offset = 1 << (board->adbits - 1); */ if ((list[0] & CR_ALT_SOURCE)) { unsigned bypass_bits; chan = CR_CHAN(list[0]); @@ -1929,7 +1927,6 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, } else { ni_writel(dev, 0, M_Offset_AI_Config_FIFO_Bypass); } - offset = 0; for (i = 0; i < n_chan; i++) { unsigned config_bits = 0; chan = CR_CHAN(list[i]); @@ -1938,7 +1935,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, dither = ((list[i] & CR_ALT_FILTER) != 0); range_code = ni_gainlkup[board->gainlkup][range]; - devpriv->ai_offset[i] = offset; + devpriv->ai_offset[i] = 0; switch (aref) { case AREF_DIFF: config_bits |= @@ -2000,14 +1997,15 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, * valid channels are 0-3 */ static void ni_load_channelgain_list(struct comedi_device *dev, + struct comedi_subdevice *s, unsigned int n_chan, unsigned int *list) { const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; + unsigned int offset = (s->maxdata + 1) >> 1; unsigned int chan, range, aref; unsigned int i; unsigned int hi, lo; - unsigned offset; unsigned int dither; if (devpriv->is_m_series) { @@ -2053,7 +2051,6 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } } - offset = 1 << (board->adbits - 1); for (i = 0; i < n_chan; i++) { if (!devpriv->is_6143 && (list[i] & CR_ALT_SOURCE)) { chan = devpriv->ai_calib_source; @@ -2120,15 +2117,14 @@ static int ni_ai_insn_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; + unsigned int mask = (s->maxdata + 1) >> 1; int i, n; - const unsigned int mask = (1 << board->adbits) - 1; unsigned signbits; unsigned short d; unsigned long dl; - ni_load_channelgain_list(dev, 1, &insn->chanspec); + ni_load_channelgain_list(dev, s, 1, &insn->chanspec); ni_clear_ai_fifo(dev); @@ -2447,7 +2443,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } ni_clear_ai_fifo(dev); - ni_load_channelgain_list(dev, cmd->chanlist_len, cmd->chanlist); + ni_load_channelgain_list(dev, s, cmd->chanlist_len, cmd->chanlist); /* start configuration */ ni_stc_writew(dev, AI_Configuration_Start, Joint_Reset_Register); -- cgit From db2255f5a0394fc5bc295a4b3e96667c46a7b9ef Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:52 -0700 Subject: staging: comedi: ni_stc.h: refactor 'adbits' boardinfo For aesthetics, change the 'adbits' in the boardinfo to 'ai_maxdata' to remove the need for the calculation of the subdevice 'maxdata'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 16 ++--- drivers/staging/comedi/drivers/ni_mio_common.c | 4 +- drivers/staging/comedi/drivers/ni_mio_cs.c | 10 +-- drivers/staging/comedi/drivers/ni_pcimio.c | 98 +++++++++++++------------- drivers/staging/comedi/drivers/ni_stc.h | 2 +- 5 files changed, 65 insertions(+), 65 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 0f4dc5afd493..160e703541cc 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -108,7 +108,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 44, .isapnp_id = 0x0000, /* XXX unknown */ .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .gainlkup = ai_gain_16, .ai_speed = 800, @@ -124,7 +124,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 25, .isapnp_id = 0x1900, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 2048, .gainlkup = ai_gain_16, .ai_speed = 2000, @@ -140,7 +140,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 36, .isapnp_id = 0x2400, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_16, .ai_speed = 10000, @@ -155,7 +155,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 37, .isapnp_id = 0x2500, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_16, .ai_speed = 10000, @@ -171,7 +171,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 38, .isapnp_id = 0x2600, .n_adchan = 64, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 2048, .gainlkup = ai_gain_16, .ai_speed = 2000, @@ -187,7 +187,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 39, .isapnp_id = 0x2700, .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_8, @@ -203,7 +203,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 50, .isapnp_id = 0x0000, /* XXX unknown */ .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -220,7 +220,7 @@ static const struct ni_board_struct ni_boards[] = { .device_id = 51, .isapnp_id = 0x0000, /* XXX unknown */ .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, /* unknown */ .gainlkup = ai_gain_14, diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 05f51bc1f2df..4c451b5b4a09 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5513,13 +5513,13 @@ static int ni_E_init(struct comedi_device *dev, SDF_READABLE | SDF_DIFF | SDF_DITHER | SDF_CMD_READ; if (!devpriv->is_611x) s->subdev_flags |= SDF_GROUND | SDF_COMMON | SDF_OTHER; - if (board->adbits > 16) + if (board->ai_maxdata > 0xffff) s->subdev_flags |= SDF_LSAMPL; if (devpriv->is_m_series) s->subdev_flags |= SDF_SOFT_CALIBRATED; s->n_chan = board->n_adchan; s->len_chanlist = 512; - s->maxdata = (1 << board->adbits) - 1; + s->maxdata = board->ai_maxdata; s->range_table = ni_range_lkup[board->gainlkup]; s->insn_read = &ni_ai_insn_read; s->insn_config = &ni_ai_insn_config; diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index 815cb2b65c05..bba709d45702 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -56,7 +56,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-ai-16xe-50", .device_id = 0x010d, .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 1024, .gainlkup = ai_gain_8, .ai_speed = 5000, @@ -66,7 +66,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-ai-16e-4", .device_id = 0x010c, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 1024, .gainlkup = ai_gain_16, .ai_speed = 4000, @@ -76,7 +76,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-6062E", .device_id = 0x02c4, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .gainlkup = ai_gain_16, .ai_speed = 2000, @@ -92,7 +92,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-6024E", .device_id = 0x075e, .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 1024, .gainlkup = ai_gain_4, .ai_speed = 5000, @@ -107,7 +107,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-6036E", .device_id = 0x0245, .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 1024, .alwaysdither = 1, .gainlkup = ai_gain_4, diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 1095f3f32c92..394fd2bb76ca 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -211,7 +211,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIMIO_16XE_50] = { .name = "pci-mio-16xe-50", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 2048, .alwaysdither = 1, .gainlkup = ai_gain_8, @@ -226,7 +226,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIMIO_16XE_10] = { .name = "pci-mio-16xe-10", /* aka pci-6030E */ .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -242,7 +242,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6014] = { .name = "pci-6014", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_4, @@ -257,7 +257,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6030E] = { .name = "pxi-6030e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -273,7 +273,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIMIO_16E_1] = { .name = "pci-mio-16e-1", /* aka pci-6070e */ .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_16, .ai_speed = 800, @@ -288,7 +288,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIMIO_16E_4] = { .name = "pci-mio-16e-4", /* aka pci-6040e */ .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_16, /* @@ -307,7 +307,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6040E] = { .name = "pxi-6040e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_16, .ai_speed = 2000, @@ -322,7 +322,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6031E] = { .name = "pci-6031e", .n_adchan = 64, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -338,7 +338,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6032E] = { .name = "pci-6032e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -349,7 +349,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6033E] = { .name = "pci-6033e", .n_adchan = 64, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -360,7 +360,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6071E] = { .name = "pci-6071e", .n_adchan = 64, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_16, @@ -376,7 +376,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6023E] = { .name = "pci-6023e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_4, .ai_speed = 5000, @@ -386,7 +386,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6024E] = { .name = "pci-6024e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_4, .ai_speed = 5000, @@ -400,7 +400,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6025E] = { .name = "pci-6025e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_4, .ai_speed = 5000, @@ -415,7 +415,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6025E] = { .name = "pxi-6025e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .gainlkup = ai_gain_4, .ai_speed = 5000, @@ -430,7 +430,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6034E] = { .name = "pci-6034e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_4, @@ -441,7 +441,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6035E] = { .name = "pci-6035e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_4, @@ -456,7 +456,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6052E] = { .name = "pci-6052e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_16, @@ -473,7 +473,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6110] = { .name = "pci-6110", .n_adchan = 4, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .alwaysdither = 0, .gainlkup = ai_gain_611x, @@ -490,7 +490,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6111] = { .name = "pci-6111", .n_adchan = 2, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .gainlkup = ai_gain_611x, .ai_speed = 200, @@ -508,7 +508,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6115] = { /* .device_id = 0x2ed0, */ .name = "pci-6115", .n_adchan = 4, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .gainlkup = ai_gain_611x, .ai_speed = 100, @@ -527,7 +527,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6115] = { /* .device_id = ????, */ .name = "pxi-6115", .n_adchan = 4, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 8192, .gainlkup = ai_gain_611x, .ai_speed = 100, @@ -635,7 +635,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6071E] = { .name = "pxi-6071e", .n_adchan = 64, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_16, @@ -651,7 +651,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6070E] = { .name = "pxi-6070e", .n_adchan = 16, - .adbits = 12, + .ai_maxdata = 0x0fff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_16, @@ -667,7 +667,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6052E] = { .name = "pxi-6052e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_16, @@ -683,7 +683,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6031E] = { .name = "pxi-6031e", .n_adchan = 64, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_14, @@ -699,7 +699,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6036E] = { .name = "pci-6036e", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, .alwaysdither = 1, .gainlkup = ai_gain_4, @@ -714,7 +714,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6220] = { .name = "pci-6220", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 512, /* FIXME: guess */ .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -725,7 +725,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6221] = { .name = "pci-6221", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -741,7 +741,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6221_37PIN] = { .name = "pci-6221_37pin", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -757,7 +757,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6224] = { .name = "pci-6224", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -768,7 +768,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6224] = { .name = "pxi-6224", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -779,7 +779,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6225] = { .name = "pci-6225", .n_adchan = 80, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -795,7 +795,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6225] = { .name = "pxi-6225", .n_adchan = 80, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -811,7 +811,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6229] = { .name = "pci-6229", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_622x, .ai_speed = 4000, @@ -827,7 +827,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6250] = { .name = "pci-6250", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -838,7 +838,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6251] = { .name = "pci-6251", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -854,7 +854,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIE6251] = { .name = "pcie-6251", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -870,7 +870,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXIE6251] = { .name = "pxie-6251", .n_adchan = 16, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -886,7 +886,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6254] = { .name = "pci-6254", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -897,7 +897,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6259] = { .name = "pci-6259", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -913,7 +913,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCIE6259] = { .name = "pcie-6259", .n_adchan = 32, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 4095, .gainlkup = ai_gain_628x, .ai_speed = 800, @@ -929,7 +929,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6280] = { .name = "pci-6280", .n_adchan = 16, - .adbits = 18, + .ai_maxdata = 0x3ffff, .ai_fifo_depth = 2047, .gainlkup = ai_gain_628x, .ai_speed = 1600, @@ -941,7 +941,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6281] = { .name = "pci-6281", .n_adchan = 16, - .adbits = 18, + .ai_maxdata = 0x3ffff, .ai_fifo_depth = 2047, .gainlkup = ai_gain_628x, .ai_speed = 1600, @@ -957,7 +957,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6281] = { .name = "pxi-6281", .n_adchan = 16, - .adbits = 18, + .ai_maxdata = 0x3ffff, .ai_fifo_depth = 2047, .gainlkup = ai_gain_628x, .ai_speed = 1600, @@ -973,7 +973,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6284] = { .name = "pci-6284", .n_adchan = 32, - .adbits = 18, + .ai_maxdata = 0x3ffff, .ai_fifo_depth = 2047, .gainlkup = ai_gain_628x, .ai_speed = 1600, @@ -984,7 +984,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6289] = { .name = "pci-6289", .n_adchan = 32, - .adbits = 18, + .ai_maxdata = 0x3ffff, .ai_fifo_depth = 2047, .gainlkup = ai_gain_628x, .ai_speed = 1600, @@ -1000,7 +1000,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6143] = { .name = "pci-6143", .n_adchan = 8, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 1024, .gainlkup = ai_gain_6143, .ai_speed = 4000, @@ -1011,7 +1011,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6143] = { .name = "pxi-6143", .n_adchan = 8, - .adbits = 16, + .ai_maxdata = 0xffff, .ai_fifo_depth = 1024, .gainlkup = ai_gain_6143, .ai_speed = 4000, diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 6f9c4811e231..ceae7e18c274 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1393,7 +1393,7 @@ struct ni_board_struct { int isapnp_id; int n_adchan; - int adbits; + unsigned int ai_maxdata; int ai_fifo_depth; unsigned int alwaysdither:1; -- cgit From c5f26499998476edf599b599cd88163305dee5b2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:53 -0700 Subject: staging: comedi: ni_stc.h: refactor 'aobits' boardinfo For aesthetics, change the 'aobits' in the boardinfo to 'ao_maxdata' to remove the need for the calculation of the subdevice 'maxdata'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 14 ++-- drivers/staging/comedi/drivers/ni_mio_common.c | 2 +- drivers/staging/comedi/drivers/ni_mio_cs.c | 8 +-- drivers/staging/comedi/drivers/ni_pcimio.c | 88 +++++++++++++------------- drivers/staging/comedi/drivers/ni_stc.h | 2 +- 5 files changed, 57 insertions(+), 57 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 160e703541cc..38580619d841 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -113,7 +113,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -129,7 +129,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -145,7 +145,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 10000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, .num_p0_dio_channels = 8, @@ -160,7 +160,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 10000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, .num_p0_dio_channels = 8, @@ -176,7 +176,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -193,7 +193,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_8, .ai_speed = 50000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 50000, .num_p0_dio_channels = 8, @@ -209,7 +209,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_14, .ai_speed = 10000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 4c451b5b4a09..8303d66220a0 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5544,7 +5544,7 @@ static int ni_E_init(struct comedi_device *dev, if (devpriv->is_m_series) s->subdev_flags |= SDF_SOFT_CALIBRATED; s->n_chan = board->n_aochan; - s->maxdata = (1 << board->aobits) - 1; + s->maxdata = board->ao_maxdata; s->range_table = board->ao_range_table; s->insn_read = &ni_ao_insn_read; s->insn_write = &ni_ao_insn_write; diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index bba709d45702..bb414ec33dce 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -81,7 +81,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_bipolar10, .ao_speed = 1176, @@ -97,7 +97,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 1000000, .num_p0_dio_channels = 8, @@ -113,7 +113,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 1000000, .num_p0_dio_channels = 8, @@ -124,7 +124,7 @@ static const struct ni_board_struct ni_boards[] = { .name = "DAQCard-6715", .device_id = 0x0000, /* unknown */ .n_aochan = 8, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_671x = 8192, .num_p0_dio_channels = 8, .caldac = { mb88341, mb88341 }, diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 394fd2bb76ca..8261cf75640c 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -217,7 +217,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_8, .ai_speed = 50000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 50000, .num_p0_dio_channels = 8, @@ -232,7 +232,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_14, .ai_speed = 10000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, @@ -248,7 +248,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -263,7 +263,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_14, .ai_speed = 10000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, @@ -278,7 +278,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -297,7 +297,7 @@ static const struct ni_board_struct ni_boards[] = { */ .ai_speed = 2000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -312,7 +312,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 2000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -328,7 +328,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_14, .ai_speed = 10000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, @@ -366,7 +366,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -391,7 +391,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -405,7 +405,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -420,7 +420,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -447,7 +447,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -462,7 +462,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 3000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, @@ -479,7 +479,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_611x, .ai_speed = 200, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .reg_type = ni_reg_611x, .ao_range_table = &range_bipolar10, .ao_fifo_depth = 2048, @@ -495,7 +495,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_611x, .ai_speed = 200, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .reg_type = ni_reg_611x, .ao_range_table = &range_bipolar10, .ao_fifo_depth = 2048, @@ -513,7 +513,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_611x, .ai_speed = 100, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_671x = 1, .ao_fifo_depth = 2048, .ao_speed = 250, @@ -532,7 +532,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_611x, .ai_speed = 100, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_671x = 1, .ao_fifo_depth = 2048, .ao_speed = 250, @@ -545,7 +545,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6711] = { .name = "pci-6711", .n_aochan = 4, - .aobits = 12, + .ao_maxdata = 0x0fff, /* data sheet says 8192, but fifo really holds 16384 samples */ .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, @@ -557,7 +557,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6711] = { .name = "pxi-6711", .n_aochan = 4, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -568,7 +568,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6713] = { .name = "pci-6713", .n_aochan = 8, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -579,7 +579,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6713] = { .name = "pxi-6713", .n_aochan = 8, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -590,7 +590,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6731] = { .name = "pci-6731", .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8192, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -602,7 +602,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6731] = { /* .device_id = ????, */ .name = "pxi-6731", .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8192, .ao_range_table = &range_bipolar10, .num_p0_dio_channels = 8, @@ -613,7 +613,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PCI6733] = { .name = "pci-6733", .n_aochan = 8, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -624,7 +624,7 @@ static const struct ni_board_struct ni_boards[] = { [BOARD_PXI6733] = { .name = "pxi-6733", .n_aochan = 8, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, @@ -641,7 +641,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -657,7 +657,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 800, .n_aochan = 2, - .aobits = 12, + .ao_maxdata = 0x0fff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, @@ -673,7 +673,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_16, .ai_speed = 3000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, @@ -689,7 +689,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_14, .ai_speed = 10000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, @@ -705,7 +705,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_4, .ai_speed = 5000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, .num_p0_dio_channels = 8, @@ -730,7 +730,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, @@ -746,7 +746,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, @@ -784,7 +784,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, @@ -800,7 +800,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, @@ -816,7 +816,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, @@ -843,7 +843,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, @@ -859,7 +859,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, @@ -875,7 +875,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, @@ -902,7 +902,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, @@ -918,7 +918,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, @@ -946,7 +946,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 1600, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, @@ -962,7 +962,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 1600, .n_aochan = 2, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, @@ -989,7 +989,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 1600, .n_aochan = 4, - .aobits = 16, + .ao_maxdata = 0xffff, .ao_fifo_depth = 8191, .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index ceae7e18c274..b3faed5135fd 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1401,7 +1401,7 @@ struct ni_board_struct { int ai_speed; int n_aochan; - int aobits; + unsigned int ao_maxdata; int ao_fifo_depth; const struct comedi_lrange *ao_range_table; unsigned ao_speed; -- cgit From daabc8a63154adef43df5eddadb8d0371a5cc06d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:54 -0700 Subject: staging: comedi: ni_mio_common: (*cancel) only works with async cmd support The comedi subdevice (*cancel) function can only be called by the core if the subdevice supports async commands. Move the initialization of this callback to it is only set if async commands are enabled. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 8303d66220a0..2ab267b04a96 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5559,11 +5559,11 @@ static int ni_E_init(struct comedi_device *dev, s->subdev_flags |= SDF_CMD_WRITE; s->do_cmd = &ni_ao_cmd; s->do_cmdtest = &ni_ao_cmdtest; + s->cancel = &ni_ao_reset; s->len_chanlist = board->n_aochan; if (!devpriv->is_m_series) s->munge = ni_ao_munge; } - s->cancel = &ni_ao_reset; } else { s->type = COMEDI_SUBD_UNUSED; } -- cgit From a06500b4adf2c8adb1ca1b44c77850d76f8c839b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:55 -0700 Subject: staging: comedi: ni_mio_common: tidy up the Analog Input subdevice init For aesthetics, add some whitespace to the Analog Input subdevice init. The callers of ni_E_init() do the request_irq() and set dev->irq if the interrupt is available. Only hook up the async command support if we have the irq. Also, remove the '#ifdef PCIDMA' here. The ni_pcimio driver is the only place PCIDMA is defined. That driver is also the only user of ni_mio_common that allocates devpriv->mite. Use that test instead to determine if the subdevice async_dma_dir member needs to be initialized. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 49 +++++++++++++------------- 1 file changed, 25 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 2ab267b04a96..800f4e3af77b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5503,36 +5503,37 @@ static int ni_E_init(struct comedi_device *dev, if (ret) return ret; - /* analog input subdevice */ - + /* Analog Input subdevice */ s = &dev->subdevices[NI_AI_SUBDEV]; - dev->read_subdev = s; if (board->n_adchan) { - s->type = COMEDI_SUBD_AI; - s->subdev_flags = - SDF_READABLE | SDF_DIFF | SDF_DITHER | SDF_CMD_READ; + s->type = COMEDI_SUBD_AI; + s->subdev_flags = SDF_READABLE | SDF_DIFF | SDF_DITHER; if (!devpriv->is_611x) - s->subdev_flags |= SDF_GROUND | SDF_COMMON | SDF_OTHER; + s->subdev_flags |= SDF_GROUND | SDF_COMMON | SDF_OTHER; if (board->ai_maxdata > 0xffff) - s->subdev_flags |= SDF_LSAMPL; + s->subdev_flags |= SDF_LSAMPL; if (devpriv->is_m_series) - s->subdev_flags |= SDF_SOFT_CALIBRATED; - s->n_chan = board->n_adchan; - s->len_chanlist = 512; - s->maxdata = board->ai_maxdata; - s->range_table = ni_range_lkup[board->gainlkup]; - s->insn_read = &ni_ai_insn_read; - s->insn_config = &ni_ai_insn_config; - s->do_cmdtest = &ni_ai_cmdtest; - s->do_cmd = &ni_ai_cmd; - s->cancel = &ni_ai_reset; - s->poll = &ni_ai_poll; - s->munge = &ni_ai_munge; -#ifdef PCIDMA - s->async_dma_dir = DMA_FROM_DEVICE; -#endif + s->subdev_flags |= SDF_SOFT_CALIBRATED; + s->n_chan = board->n_adchan; + s->maxdata = board->ai_maxdata; + s->range_table = ni_range_lkup[board->gainlkup]; + s->insn_read = ni_ai_insn_read; + s->insn_config = ni_ai_insn_config; + if (dev->irq) { + dev->read_subdev = s; + s->subdev_flags |= SDF_CMD_READ; + s->len_chanlist = 512; + s->do_cmdtest = ni_ai_cmdtest; + s->do_cmd = ni_ai_cmd; + s->cancel = ni_ai_reset; + s->poll = ni_ai_poll; + s->munge = ni_ai_munge; + + if (devpriv->mite) + s->async_dma_dir = DMA_FROM_DEVICE; + } } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } /* analog output subdevice */ -- cgit From 80a94e405bf7bdc23f92a1d0f2ace85f6681b116 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:56 -0700 Subject: staging: comedi: ni_mio_common: tidy up the Analog Output subdevice init For aesthetics, add some whitespace to the Analog Output subdevice init. Also, remove the '#ifdef PCIDMA' here and only hook up the async command support if we have an irq and the board either has a fifo or DMA is supported. The ni_pcimio driver is the only place PCIDMA is defined. That driver is also the only user of ni_mio_common that allocates devpriv->mite. Use that test instead to determine if dma is supported. Move 'is_67xx' check and init_ao_67xx() call into the Analog Output subdevice init. The 67xx boards all have analog outputs and this check does not need to be done for the boards that do not have analog outputs. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 55 ++++++++++++++------------ 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 800f4e3af77b..91b3fb4d12c2 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5536,40 +5536,43 @@ static int ni_E_init(struct comedi_device *dev, s->type = COMEDI_SUBD_UNUSED; } - /* analog output subdevice */ - + /* Analog Output subdevice */ s = &dev->subdevices[NI_AO_SUBDEV]; if (board->n_aochan) { - s->type = COMEDI_SUBD_AO; - s->subdev_flags = SDF_WRITABLE | SDF_DEGLITCH | SDF_GROUND; + s->type = COMEDI_SUBD_AO; + s->subdev_flags = SDF_WRITABLE | SDF_DEGLITCH | SDF_GROUND; if (devpriv->is_m_series) - s->subdev_flags |= SDF_SOFT_CALIBRATED; - s->n_chan = board->n_aochan; - s->maxdata = board->ao_maxdata; - s->range_table = board->ao_range_table; - s->insn_read = &ni_ao_insn_read; - s->insn_write = &ni_ao_insn_write; - s->insn_config = &ni_ao_insn_config; -#ifdef PCIDMA - if (board->n_aochan) { - s->async_dma_dir = DMA_TO_DEVICE; -#else - if (board->ao_fifo_depth) { -#endif + s->subdev_flags |= SDF_SOFT_CALIBRATED; + s->n_chan = board->n_aochan; + s->maxdata = board->ao_maxdata; + s->range_table = board->ao_range_table; + s->insn_read = ni_ao_insn_read; + s->insn_write = ni_ao_insn_write; + s->insn_config = ni_ao_insn_config; + + /* + * Along with the IRQ we need either a FIFO or DMA for + * async command support. + */ + if (dev->irq && (board->ao_fifo_depth || devpriv->mite)) { dev->write_subdev = s; - s->subdev_flags |= SDF_CMD_WRITE; - s->do_cmd = &ni_ao_cmd; - s->do_cmdtest = &ni_ao_cmdtest; - s->cancel = &ni_ao_reset; - s->len_chanlist = board->n_aochan; + s->subdev_flags |= SDF_CMD_WRITE; + s->len_chanlist = s->n_chan; + s->do_cmdtest = ni_ao_cmdtest; + s->do_cmd = ni_ao_cmd; + s->cancel = ni_ao_reset; if (!devpriv->is_m_series) - s->munge = ni_ao_munge; + s->munge = ni_ao_munge; + + if (devpriv->mite) + s->async_dma_dir = DMA_TO_DEVICE; } + + if (devpriv->is_67xx) + init_ao_67xx(dev, s); } else { - s->type = COMEDI_SUBD_UNUSED; + s->type = COMEDI_SUBD_UNUSED; } - if (devpriv->is_67xx) - init_ao_67xx(dev, s); /* digital i/o subdevice */ -- cgit From 0615c162f659fb96cbb97dfb2a0a315eecb7861f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:57 -0700 Subject: staging: comedi: ni_mio_common: refactor 'num_p0_dio_channels' boardinfo All of the board supported by this driver have at least 8 Digital I/O channels. A couple of the PCI boards in ni_pcimio have 32 channels. For aesthetics, change this member of the boardinfo into a bit-field flag, 'has_32dio_chan', and use that when initializing the DIO subdevice to set the number of channels to 32 or 8. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 8 --- drivers/staging/comedi/drivers/ni_mio_common.c | 2 +- drivers/staging/comedi/drivers/ni_mio_cs.c | 6 --- drivers/staging/comedi/drivers/ni_pcimio.c | 67 ++++---------------------- drivers/staging/comedi/drivers/ni_stc.h | 3 +- 5 files changed, 12 insertions(+), 74 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 38580619d841..c61342342db4 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -117,7 +117,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, { .name = "at-mio-16e-2", @@ -133,7 +132,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, { .name = "at-mio-16e-10", @@ -148,7 +146,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, { .name = "at-mio-16de-10", @@ -163,7 +160,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, .has_8255 = 1, }, { @@ -180,7 +176,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, { .name = "at-mio-16xe-50", @@ -196,7 +191,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 50000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043 }, }, { .name = "at-mio-16xe-10", @@ -213,7 +207,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, { .name = "at-ai-16xe-10", @@ -225,7 +218,6 @@ static const struct ni_board_struct ni_boards[] = { .alwaysdither = 1, /* unknown */ .gainlkup = ai_gain_14, .ai_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, }; diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 91b3fb4d12c2..7146f21a619c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5582,7 +5582,7 @@ static int ni_E_init(struct comedi_device *dev, s->maxdata = 1; s->io_bits = 0; /* all bits input */ s->range_table = &range_digital; - s->n_chan = board->num_p0_dio_channels; + s->n_chan = board->has_32dio_chan ? 32 : 8; if (devpriv->is_m_series) { s->subdev_flags |= SDF_LSAMPL | SDF_CMD_WRITE /* | SDF_CMD_READ */; diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index bb414ec33dce..9b201e48233e 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -60,7 +60,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_fifo_depth = 1024, .gainlkup = ai_gain_8, .ai_speed = 5000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043 }, }, { .name = "DAQCard-ai-16e-4", @@ -70,7 +69,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_fifo_depth = 1024, .gainlkup = ai_gain_16, .ai_speed = 4000, - .num_p0_dio_channels = 8, .caldac = { mb88341 }, /* verified */ }, { .name = "DAQCard-6062E", @@ -85,7 +83,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_bipolar10, .ao_speed = 1176, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* verified */ }, { /* specs incorrect! */ @@ -100,7 +97,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 1000000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, { /* specs incorrect! */ @@ -116,7 +112,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 1000000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, #if 0 @@ -126,7 +121,6 @@ static const struct ni_board_struct ni_boards[] = { .n_aochan = 8, .ao_maxdata = 0x0fff, .ao_671x = 8192, - .num_p0_dio_channels = 8, .caldac = { mb88341, mb88341 }, }, #endif diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 8261cf75640c..1532fac7638e 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -220,7 +220,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 50000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043 }, }, [BOARD_PCIMIO_16XE_10] = { @@ -236,7 +235,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCI6014] = { @@ -251,7 +249,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PXI6030E] = { @@ -267,7 +264,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCIMIO_16E_1] = { @@ -282,7 +278,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, [BOARD_PCIMIO_16E_4] = { @@ -301,7 +296,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* doc says mb88341 */ }, [BOARD_PXI6040E] = { @@ -316,7 +310,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 512, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { mb88341 }, }, [BOARD_PCI6031E] = { @@ -332,7 +325,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCI6032E] = { @@ -343,7 +335,6 @@ static const struct ni_board_struct ni_boards[] = { .alwaysdither = 1, .gainlkup = ai_gain_14, .ai_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCI6033E] = { @@ -354,7 +345,6 @@ static const struct ni_board_struct ni_boards[] = { .alwaysdither = 1, .gainlkup = ai_gain_14, .ai_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCI6071E] = { @@ -370,7 +360,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PCI6023E] = { @@ -380,7 +369,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_fifo_depth = 512, .gainlkup = ai_gain_4, .ai_speed = 5000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* manual is wrong */ }, [BOARD_PCI6024E] = { @@ -394,7 +382,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* manual is wrong */ }, [BOARD_PCI6025E] = { @@ -408,7 +395,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* manual is wrong */ .has_8255 = 1, }, @@ -423,7 +409,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, /* manual is wrong */ .has_8255 = 1, }, @@ -435,7 +420,6 @@ static const struct ni_board_struct ni_boards[] = { .alwaysdither = 1, .gainlkup = ai_gain_4, .ai_speed = 5000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PCI6035E] = { @@ -450,7 +434,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0x0fff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PCI6052E] = { @@ -466,7 +449,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, - .num_p0_dio_channels = 8, /* manual is wrong */ .caldac = { ad8804_debug, ad8804_debug, ad8522 }, }, @@ -484,7 +466,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .ao_fifo_depth = 2048, .ao_speed = 250, - .num_p0_dio_channels = 8, .caldac = { ad8804, ad8804 }, }, [BOARD_PCI6111] = { @@ -500,7 +481,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .ao_fifo_depth = 2048, .ao_speed = 250, - .num_p0_dio_channels = 8, .caldac = { ad8804, ad8804 }, }, #if 0 @@ -517,7 +497,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_671x = 1, .ao_fifo_depth = 2048, .ao_speed = 250, - .num_p0_dio_channels = 8, .reg_611x = 1, /* XXX */ .caldac = { ad8804_debug, ad8804_debug, ad8804_debug }, @@ -537,7 +516,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_speed = 250, .reg_611x = 1, - .num_p0_dio_channels = 8, /* XXX */ .caldac = { ad8804_debug, ad8804_debug, ad8804_debug }, }, @@ -550,7 +528,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6711, .caldac = { ad8804_debug }, }, @@ -561,7 +538,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6711, .caldac = { ad8804_debug }, }, @@ -572,7 +548,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6713, .caldac = { ad8804_debug, ad8804_debug }, }, @@ -583,7 +558,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6713, .caldac = { ad8804_debug, ad8804_debug }, }, @@ -594,7 +568,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 8192, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6711, .caldac = { ad8804_debug }, }, @@ -605,7 +578,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0xffff, .ao_fifo_depth = 8192, .ao_range_table = &range_bipolar10, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6711, .caldac = { ad8804_debug }, }, @@ -617,7 +589,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6713, .caldac = { ad8804_debug, ad8804_debug }, }, @@ -628,7 +599,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 16384, .ao_range_table = &range_bipolar10, .ao_speed = 1000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_6713, .caldac = { ad8804_debug, ad8804_debug }, }, @@ -645,7 +615,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PXI6070E] = { @@ -661,7 +630,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 1000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PXI6052E] = { @@ -677,7 +645,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 3000, - .num_p0_dio_channels = 8, .caldac = { mb88341, mb88341, ad8522 }, }, [BOARD_PXI6031E] = { @@ -693,7 +660,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_fifo_depth = 2048, .ao_range_table = &range_ni_E_ao_ext, .ao_speed = 10000, - .num_p0_dio_channels = 8, .caldac = { dac8800, dac8043, ad8522 }, }, [BOARD_PCI6036E] = { @@ -708,7 +674,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_maxdata = 0xffff, .ao_range_table = &range_bipolar10, .ao_speed = 100000, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug }, }, [BOARD_PCI6220] = { @@ -718,7 +683,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_fifo_depth = 512, /* FIXME: guess */ .gainlkup = ai_gain_622x, .ai_speed = 4000, - .num_p0_dio_channels = 8, .reg_type = ni_reg_622x, .caldac = { caldac_none }, }, @@ -735,7 +699,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, .ao_speed = 1200, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6221_37PIN] = { @@ -751,7 +714,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, .ao_speed = 1200, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6224] = { @@ -762,7 +724,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .reg_type = ni_reg_622x, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PXI6224] = { @@ -773,7 +735,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_622x, .ai_speed = 4000, .reg_type = ni_reg_622x, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6225] = { @@ -789,7 +751,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, .ao_speed = 1200, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PXI6225] = { @@ -805,7 +767,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, .ao_speed = 1200, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6229] = { @@ -821,7 +783,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_bipolar10, .reg_type = ni_reg_622x, .ao_speed = 1200, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6250] = { @@ -832,7 +794,6 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .reg_type = ni_reg_625x, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6251] = { @@ -848,7 +809,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, .ao_speed = 350, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCIE6251] = { @@ -864,7 +824,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, .ao_speed = 350, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PXIE6251] = { @@ -880,7 +839,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, .ao_speed = 350, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6254] = { @@ -891,7 +849,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 800, .reg_type = ni_reg_625x, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6259] = { @@ -907,7 +865,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, .ao_speed = 350, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCIE6259] = { @@ -923,7 +881,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_625x_ao, .reg_type = ni_reg_625x, .ao_speed = 350, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6280] = { @@ -935,7 +893,6 @@ static const struct ni_board_struct ni_boards[] = { .ai_speed = 1600, .ao_fifo_depth = 8191, .reg_type = ni_reg_628x, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6281] = { @@ -951,7 +908,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, .ao_speed = 350, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PXI6281] = { @@ -967,7 +923,6 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, .ao_speed = 350, - .num_p0_dio_channels = 8, .caldac = { caldac_none }, }, [BOARD_PCI6284] = { @@ -978,7 +933,7 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_628x, .ai_speed = 1600, .reg_type = ni_reg_628x, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6289] = { @@ -994,7 +949,7 @@ static const struct ni_board_struct ni_boards[] = { .ao_range_table = &range_ni_M_628x_ao, .reg_type = ni_reg_628x, .ao_speed = 350, - .num_p0_dio_channels = 32, + .has_32dio_chan = 1, .caldac = { caldac_none }, }, [BOARD_PCI6143] = { @@ -1005,7 +960,6 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_6143, .ai_speed = 4000, .reg_type = ni_reg_6143, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug, ad8804_debug }, }, [BOARD_PXI6143] = { @@ -1016,7 +970,6 @@ static const struct ni_board_struct ni_boards[] = { .gainlkup = ai_gain_6143, .ai_speed = 4000, .reg_type = ni_reg_6143, - .num_p0_dio_channels = 8, .caldac = { ad8804_debug, ad8804_debug }, }, }; diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index b3faed5135fd..caad9d86be8e 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1406,10 +1406,9 @@ struct ni_board_struct { const struct comedi_lrange *ao_range_table; unsigned ao_speed; - unsigned num_p0_dio_channels; - int reg_type; unsigned int has_8255:1; + unsigned int has_32dio_chan:1; enum caldac_enum caldac[3]; }; -- cgit From 2d4ecc38b9e5491c0a655ac549ee52c586955231 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:58 -0700 Subject: staging: comedi: ni_mio_common: tidy up the Digital I/O subdevice init For aesthetics, add some whitespace to the Digital I/O subdevice init. Only hook up the async command support if we have an irq. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 43 ++++++++++++++------------ 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 7146f21a619c..dc5f927d32ff 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5574,32 +5574,37 @@ static int ni_E_init(struct comedi_device *dev, s->type = COMEDI_SUBD_UNUSED; } - /* digital i/o subdevice */ - + /* Digital I/O subdevice */ s = &dev->subdevices[NI_DIO_SUBDEV]; - s->type = COMEDI_SUBD_DIO; - s->subdev_flags = SDF_WRITABLE | SDF_READABLE; - s->maxdata = 1; - s->io_bits = 0; /* all bits input */ - s->range_table = &range_digital; - s->n_chan = board->has_32dio_chan ? 32 : 8; + s->type = COMEDI_SUBD_DIO; + s->subdev_flags = SDF_WRITABLE | SDF_READABLE; + s->n_chan = board->has_32dio_chan ? 32 : 8; + s->maxdata = 1; + s->range_table = &range_digital; if (devpriv->is_m_series) { - s->subdev_flags |= - SDF_LSAMPL | SDF_CMD_WRITE /* | SDF_CMD_READ */; - s->insn_bits = &ni_m_series_dio_insn_bits; - s->insn_config = &ni_m_series_dio_insn_config; - s->do_cmd = &ni_cdio_cmd; - s->do_cmdtest = &ni_cdio_cmdtest; - s->cancel = &ni_cdio_cancel; - s->async_dma_dir = DMA_BIDIRECTIONAL; - s->len_chanlist = s->n_chan; + s->subdev_flags |= SDF_LSAMPL; + s->insn_bits = ni_m_series_dio_insn_bits; + s->insn_config = ni_m_series_dio_insn_config; + if (dev->irq) { + s->subdev_flags |= SDF_CMD_WRITE /* | SDF_CMD_READ */; + s->len_chanlist = s->n_chan; + s->do_cmdtest = ni_cdio_cmdtest; + s->do_cmd = ni_cdio_cmd; + s->cancel = ni_cdio_cancel; + + /* M-series boards use DMA */ + s->async_dma_dir = DMA_BIDIRECTIONAL; + } + /* reset DIO and set all channels to inputs */ ni_writel(dev, CDO_Reset_Bit | CDI_Reset_Bit, M_Offset_CDIO_Command); ni_writel(dev, s->io_bits, M_Offset_DIO_Direction); } else { - s->insn_bits = &ni_dio_insn_bits; - s->insn_config = &ni_dio_insn_config; + s->insn_bits = ni_dio_insn_bits; + s->insn_config = ni_dio_insn_config; + + /* set all channels to inputs */ devpriv->dio_control = DIO_Pins_Dir(s->io_bits); ni_writew(dev, devpriv->dio_control, DIO_Control_Register); } -- cgit From caedecfa3a0aea7dc588fd9bb8a0453e74d381c9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:23:59 -0700 Subject: staging: comedi: ni_mio_common: init clock dividers early in ni_E_init() The init/reset of the hardware is a bit scattered in this function. For aesthetics, move the init of the clock dividers so it happens early and tidy up the code a bit. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 27 ++++++++++++-------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index dc5f927d32ff..6d1754f98c2e 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5499,6 +5499,18 @@ static int ni_E_init(struct comedi_device *dev, return -EINVAL; } + /* initialize clock dividers */ + devpriv->clock_and_fout = Slow_Internal_Time_Divide_By_2 | + Slow_Internal_Timebase | + Clock_To_Board_Divide_By_2 | + Clock_To_Board; + if (!devpriv->is_6xxx) { + /* BEAM is this needed for PCI-6143 ?? */ + devpriv->clock_and_fout |= (AI_Output_Divide_By_2 | + AO_Output_Divide_By_2); + } + ni_stc_writew(dev, devpriv->clock_and_fout, Clock_and_FOUT_Register); + ret = comedi_alloc_subdevices(dev, NI_NUM_SUBDEVICES); if (ret) return ret; @@ -5770,21 +5782,6 @@ static int ni_E_init(struct comedi_device *dev, /* ai configuration */ s = &dev->subdevices[NI_AI_SUBDEV]; ni_ai_reset(dev, s); - if (!devpriv->is_6xxx) { - /* BEAM is this needed for PCI-6143 ?? */ - devpriv->clock_and_fout = - Slow_Internal_Time_Divide_By_2 | - Slow_Internal_Timebase | - Clock_To_Board_Divide_By_2 | - Clock_To_Board | - AI_Output_Divide_By_2 | AO_Output_Divide_By_2; - } else { - devpriv->clock_and_fout = - Slow_Internal_Time_Divide_By_2 | - Slow_Internal_Timebase | - Clock_To_Board_Divide_By_2 | Clock_To_Board; - } - ni_stc_writew(dev, devpriv->clock_and_fout, Clock_and_FOUT_Register); /* analog output configuration */ s = &dev->subdevices[NI_AO_SUBDEV]; -- cgit From eeca0caa84169dcff5e67da6dee74b785f12a4f4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:00 -0700 Subject: staging: comedi: ni_mio_common: only reset the ai/ao subdevices if they exist So of the boards supported by this driver do not have analog inputs and some don't have analog outputs. Move the calls that reset these subdevices during the (*attach) by ni_E_init() so they only happen if the subdevices are present. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 6d1754f98c2e..e60b9e696233 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5544,6 +5544,9 @@ static int ni_E_init(struct comedi_device *dev, if (devpriv->mite) s->async_dma_dir = DMA_FROM_DEVICE; } + + /* reset the analog input configuration */ + ni_ai_reset(dev, s); } else { s->type = COMEDI_SUBD_UNUSED; } @@ -5582,6 +5585,9 @@ static int ni_E_init(struct comedi_device *dev, if (devpriv->is_67xx) init_ao_67xx(dev, s); + + /* reset the analog output configuration */ + ni_ao_reset(dev, s); } else { s->type = COMEDI_SUBD_UNUSED; } @@ -5779,14 +5785,6 @@ static int ni_E_init(struct comedi_device *dev, s->insn_write = &ni_freq_out_insn_write; s->insn_config = &ni_freq_out_insn_config; - /* ai configuration */ - s = &dev->subdevices[NI_AI_SUBDEV]; - ni_ai_reset(dev, s); - - /* analog output configuration */ - s = &dev->subdevices[NI_AO_SUBDEV]; - ni_ao_reset(dev, s); - if (dev->irq) { ni_stc_writew(dev, (irq_polarity ? Interrupt_Output_Polarity : 0) | -- cgit From cb429506155b3c6c64ee7c06e3961b76fbffb173 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:01 -0700 Subject: staging: comedi: ni_mio_common: tidy up the calibration subdevice init For aesthetics, add some whitespace to the subdevice init. Refactor the code so that the common parts of the subdevice are initialized in one place. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index e60b9e696233..49c22d61fb90 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5642,26 +5642,26 @@ static int ni_E_init(struct comedi_device *dev, s = &dev->subdevices[NI_UNUSED_SUBDEV]; s->type = COMEDI_SUBD_UNUSED; - /* calibration subdevice -- ai and ao */ + /* Calibration subdevice */ s = &dev->subdevices[NI_CALIBRATION_SUBDEV]; - s->type = COMEDI_SUBD_CALIB; + s->type = COMEDI_SUBD_CALIB; + s->subdev_flags = SDF_INTERNAL; + s->n_chan = 1; + s->maxdata = 0; if (devpriv->is_m_series) { - /* internal PWM analog output used for AI nonlinearity calibration */ - s->subdev_flags = SDF_INTERNAL; - s->insn_config = &ni_m_series_pwm_config; - s->n_chan = 1; - s->maxdata = 0; + /* internal PWM output used for AI nonlinearity calibration */ + s->insn_config = ni_m_series_pwm_config; + ni_writel(dev, 0x0, M_Offset_Cal_PWM); } else if (devpriv->is_6143) { - /* internal PWM analog output used for AI nonlinearity calibration */ - s->subdev_flags = SDF_INTERNAL; - s->insn_config = &ni_6143_pwm_config; - s->n_chan = 1; - s->maxdata = 0; + /* internal PWM output used for AI nonlinearity calibration */ + s->insn_config = ni_6143_pwm_config; } else { - s->subdev_flags = SDF_WRITABLE | SDF_INTERNAL; - s->insn_read = &ni_calib_insn_read; - s->insn_write = &ni_calib_insn_write; + s->subdev_flags |= SDF_WRITABLE; + s->insn_read = ni_calib_insn_read; + s->insn_write = ni_calib_insn_write; + + /* setup the caldacs and find the real n_chan and maxdata */ caldac_setup(dev, s); } -- cgit From 433c79f92edc52ec754a52acae65fcde4661c8d9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:02 -0700 Subject: staging: comedi: ni_mio_common: tidy up the EEPROM subdevice init For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 49c22d61fb90..8f7edcdc1f1d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5665,17 +5665,17 @@ static int ni_E_init(struct comedi_device *dev, caldac_setup(dev, s); } - /* EEPROM */ + /* EEPROM subdevice */ s = &dev->subdevices[NI_EEPROM_SUBDEV]; - s->type = COMEDI_SUBD_MEMORY; - s->subdev_flags = SDF_READABLE | SDF_INTERNAL; - s->maxdata = 0xff; + s->type = COMEDI_SUBD_MEMORY; + s->subdev_flags = SDF_READABLE | SDF_INTERNAL; + s->maxdata = 0xff; if (devpriv->is_m_series) { - s->n_chan = M_SERIES_EEPROM_SIZE; - s->insn_read = &ni_m_series_eeprom_insn_read; + s->n_chan = M_SERIES_EEPROM_SIZE; + s->insn_read = ni_m_series_eeprom_insn_read; } else { - s->n_chan = 512; - s->insn_read = &ni_eeprom_insn_read; + s->n_chan = 512; + s->insn_read = ni_eeprom_insn_read; } /* PFI */ -- cgit From 43f2c8b7defd4e54167773d6de0c23ad55de1686 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:03 -0700 Subject: staging: comedi: ni_mio_common: tidy up the PFI subdevice init For aesthetics, add some whitespace to the subdevice init and tidy it up a bit. Remove the need for the extra local variable. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 8f7edcdc1f1d..4932b4db83ad 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5490,9 +5490,9 @@ static int ni_E_init(struct comedi_device *dev, const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_subdevice *s; - unsigned j; enum ni_gpct_variant counter_variant; int ret; + int i; if (board->n_aochan > MAX_N_AO_CHAN) { printk("bug! n_aochan > MAX_N_AO_CHAN\n"); @@ -5678,25 +5678,25 @@ static int ni_E_init(struct comedi_device *dev, s->insn_read = ni_eeprom_insn_read; } - /* PFI */ + /* Digital I/O (PFI) subdevice */ s = &dev->subdevices[NI_PFI_DIO_SUBDEV]; - s->type = COMEDI_SUBD_DIO; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_INTERNAL; + s->type = COMEDI_SUBD_DIO; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_INTERNAL; + s->maxdata = 1; if (devpriv->is_m_series) { - unsigned i; - s->n_chan = 16; + s->n_chan = 16; + s->insn_bits = ni_pfi_insn_bits; + ni_writew(dev, s->state, M_Offset_PFI_DO); for (i = 0; i < NUM_PFI_OUTPUT_SELECT_REGS; ++i) { ni_writew(dev, devpriv->pfi_output_select_reg[i], M_Offset_PFI_Output_Select(i + 1)); } } else { - s->n_chan = 10; + s->n_chan = 10; } - s->maxdata = 1; - if (devpriv->is_m_series) - s->insn_bits = &ni_pfi_insn_bits; - s->insn_config = &ni_pfi_insn_config; + s->insn_config = ni_pfi_insn_config; + ni_set_bits(dev, IO_Bidirection_Pin_Register, ~0, 0); /* cs5529 calibration adc */ @@ -5748,8 +5748,8 @@ static int ni_E_init(struct comedi_device *dev, return -ENOMEM; /* General purpose counters */ - for (j = 0; j < NUM_GPCT; ++j) { - s = &dev->subdevices[NI_GPCT_SUBDEV(j)]; + for (i = 0; i < NUM_GPCT; ++i) { + s = &dev->subdevices[NI_GPCT_SUBDEV(i)]; s->type = COMEDI_SUBD_COUNTER; s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_LSAMPL; s->n_chan = 3; @@ -5768,11 +5768,11 @@ static int ni_E_init(struct comedi_device *dev, s->cancel = &ni_gpct_cancel; s->async_dma_dir = DMA_BIDIRECTIONAL; #endif - s->private = &devpriv->counter_dev->counters[j]; + s->private = &devpriv->counter_dev->counters[i]; - devpriv->counter_dev->counters[j].chip_index = 0; - devpriv->counter_dev->counters[j].counter_index = j; - ni_tio_init_counter(&devpriv->counter_dev->counters[j]); + devpriv->counter_dev->counters[i].chip_index = 0; + devpriv->counter_dev->counters[i].counter_index = i; + ni_tio_init_counter(&devpriv->counter_dev->counters[i]); } /* Frequency output */ -- cgit From c607b3317e562bfe322c98c38e0c9e7852366b35 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:04 -0700 Subject: staging: comedi: ni_mio_common: tidy up the gpct counter subdevice init For aesthetics, add some whitespace to the subdevice init and tidy it up a bit. Unfortunately we can't get rid of the '#ifdef PCIDMA' here yet due to other ifdefery in this file. For now just add the correct test so that the async command support is not hooked up unless we have an IRQ and DMA. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 64 +++++++++++++------------- 1 file changed, 33 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 4932b4db83ad..6545f11fe669 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5490,7 +5490,6 @@ static int ni_E_init(struct comedi_device *dev, const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; struct comedi_subdevice *s; - enum ni_gpct_variant counter_variant; int ret; int i; @@ -5735,44 +5734,47 @@ static int ni_E_init(struct comedi_device *dev, s->insn_config = ni_rtsi_insn_config; ni_rtsi_init(dev); - if (devpriv->is_m_series) - counter_variant = ni_gpct_variant_m_series; - else - counter_variant = ni_gpct_variant_e_series; + /* allocate and initialize the gpct counter device */ devpriv->counter_dev = ni_gpct_device_construct(dev, - &ni_gpct_write_register, - &ni_gpct_read_register, - counter_variant, - NUM_GPCT); + ni_gpct_write_register, + ni_gpct_read_register, + (devpriv->is_m_series) + ? ni_gpct_variant_m_series + : ni_gpct_variant_e_series, + NUM_GPCT); if (!devpriv->counter_dev) return -ENOMEM; - /* General purpose counters */ + /* Counter (gpct) subdevices */ for (i = 0; i < NUM_GPCT; ++i) { + struct ni_gpct *gpct = &devpriv->counter_dev->counters[i]; + + /* setup and initialize the counter */ + gpct->chip_index = 0; + gpct->counter_index = i; + ni_tio_init_counter(gpct); + s = &dev->subdevices[NI_GPCT_SUBDEV(i)]; - s->type = COMEDI_SUBD_COUNTER; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_LSAMPL; - s->n_chan = 3; - if (devpriv->is_m_series) - s->maxdata = 0xffffffff; - else - s->maxdata = 0xffffff; - s->insn_read = ni_tio_insn_read; - s->insn_write = ni_tio_insn_read; - s->insn_config = ni_tio_insn_config; + s->type = COMEDI_SUBD_COUNTER; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_LSAMPL; + s->n_chan = 3; + s->maxdata = (devpriv->is_m_series) ? 0xffffffff + : 0x00ffffff; + s->insn_read = ni_tio_insn_read; + s->insn_write = ni_tio_insn_read; + s->insn_config = ni_tio_insn_config; #ifdef PCIDMA - s->subdev_flags |= SDF_CMD_READ /* | SDF_CMD_WRITE */; - s->do_cmd = &ni_gpct_cmd; - s->len_chanlist = 1; - s->do_cmdtest = ni_tio_cmdtest; - s->cancel = &ni_gpct_cancel; - s->async_dma_dir = DMA_BIDIRECTIONAL; -#endif - s->private = &devpriv->counter_dev->counters[i]; + if (dev->irq && devpriv->mite) { + s->subdev_flags |= SDF_CMD_READ /* | SDF_CMD_WRITE */; + s->len_chanlist = 1; + s->do_cmdtest = ni_tio_cmdtest; + s->do_cmd = ni_gpct_cmd; + s->cancel = ni_gpct_cancel; - devpriv->counter_dev->counters[i].chip_index = 0; - devpriv->counter_dev->counters[i].counter_index = i; - ni_tio_init_counter(&devpriv->counter_dev->counters[i]); + s->async_dma_dir = DMA_BIDIRECTIONAL; + } +#endif + s->private = gpct; } /* Frequency output */ -- cgit From 4168ac9db7ee98634e7fa15c58ec2165ab80e1a0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 14 Jul 2014 12:24:05 -0700 Subject: staging: comedi: ni_mio_common: tidy up the frequency output subdevice init For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 6545f11fe669..01b29d5ec392 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5777,15 +5777,15 @@ static int ni_E_init(struct comedi_device *dev, s->private = gpct; } - /* Frequency output */ + /* Frequency output subdevice */ s = &dev->subdevices[NI_FREQ_OUT_SUBDEV]; - s->type = COMEDI_SUBD_COUNTER; - s->subdev_flags = SDF_READABLE | SDF_WRITABLE; - s->n_chan = 1; - s->maxdata = 0xf; - s->insn_read = &ni_freq_out_insn_read; - s->insn_write = &ni_freq_out_insn_write; - s->insn_config = &ni_freq_out_insn_config; + s->type = COMEDI_SUBD_COUNTER; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE; + s->n_chan = 1; + s->maxdata = 0xf; + s->insn_read = ni_freq_out_insn_read; + s->insn_write = ni_freq_out_insn_write; + s->insn_config = ni_freq_out_insn_config; if (dev->irq) { ni_stc_writew(dev, -- cgit From 91d421945b02c8ac611481c3ec1008d30ecb9b5f Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Wed, 16 Jul 2014 15:19:42 +0200 Subject: staging: xillybus: fix some coding style errors This includes: - keep "else" on the same line as the closing brace - don't use "else" after "return" - don't issue a message for an out-of-memory error - blank line after a declaration Signed-off-by: Vincent Bernat Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus_core.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index ab6502caa72c..2d59734744e5 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -138,7 +138,6 @@ irqreturn_t xillybus_isr(int irq, void *data) * guaranteed no interrupt will occur, but in theory, the cache * lines may not be updated. So a memory barrier is issued. */ - smp_rmb(); buf = ep->msgbuf_addr; @@ -546,8 +545,7 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, channel->rd_buffers = buffers; rc = xilly_get_dma_buffers(ep, &rd_alloc, buffers, bufnum, bytebufsize); - } - else if (channelnum > 0) { + } else if (channelnum > 0) { channel->num_wr_buffers = bufnum; channel->seekable = seekable; @@ -610,8 +608,8 @@ static void xilly_scan_idt(struct xilly_endpoint *endpoint, "IDT device name list overflow. Aborting.\n"); idt_handle->chandesc = NULL; return; - } else - idt_handle->chandesc = scan; + } + idt_handle->chandesc = scan; len = endpoint->idtlen - (3 + ((int) (scan - idt))); @@ -722,6 +720,7 @@ static ssize_t xillybus_read(struct file *filp, char __user *userbuf, while (1) { /* Note that we may drop mutex within this loop */ int bytes_to_do = count - bytes_done; + spin_lock_irqsave(&channel->wr_spinlock, flags); empty = channel->wr_empty; @@ -1963,10 +1962,8 @@ struct xilly_endpoint *xillybus_init_endpoint(struct pci_dev *pdev, struct xilly_endpoint *endpoint; endpoint = devm_kzalloc(dev, sizeof(*endpoint), GFP_KERNEL); - if (!endpoint) { - dev_err(dev, "Failed to allocate memory. Aborting.\n"); + if (!endpoint) return NULL; - } endpoint->pdev = pdev; endpoint->dev = dev; -- cgit From 879be45aeaa433daa5b848e5c3bc66f85ed6bf4a Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Wed, 16 Jul 2014 18:13:43 +0200 Subject: staging: vt6556: Remove typedefs This patch removes uneeded typedefs reported by chackpatch and removes one enum that is not in use. As checkpatch complained about the typedef and the enum is not being used, this patch removes both typedef and enum. The removed enum from card.h: typedef enum _CARD_PHY_TYPE { PHY_TYPE_AUTO = 0, PHY_TYPE_11B, PHY_TYPE_11G, PHY_TYPE_11A } CARD_PHY_TYPE, *PCARD_PHY_TYPE; The following typedefs were removed, but enums were kept at device.h: typedef enum __device_msg_level typedef enum __DEVICE_NDIS_STATUS Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.h | 7 ------- drivers/staging/vt6656/device.h | 17 ++++++++--------- 2 files changed, 8 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 80fcd531207c..03fc1678896b 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -32,13 +32,6 @@ /* init card type */ -typedef enum _CARD_PHY_TYPE { - PHY_TYPE_AUTO = 0, - PHY_TYPE_11B, - PHY_TYPE_11G, - PHY_TYPE_11A -} CARD_PHY_TYPE, *PCARD_PHY_TYPE; - #define CB_MAX_CHANNEL_24G 14 #define CB_MAX_CHANNEL_5G 42 /* add channel9(5045MHz), 41==>42 */ #define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G + CB_MAX_CHANNEL_5G) diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index b23d8444dfff..dbd58103accc 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -187,13 +187,13 @@ #define DBG_PRT(l, p, args...) { if (l <= msglevel) printk(p, ##args); } -typedef enum __device_msg_level { +enum { MSG_LEVEL_ERR = 0, /* Errors causing abnormal operation */ MSG_LEVEL_NOTICE = 1, /* Errors needing user notification */ MSG_LEVEL_INFO = 2, /* Normal message. */ MSG_LEVEL_VERBOSE = 3, /* Will report all trival errors. */ MSG_LEVEL_DEBUG = 4 /* Only for debug purpose. */ -} DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL; +}; #define DEVICE_INIT_COLD 0x0 /* cold init */ #define DEVICE_INIT_RESET 0x1 /* reset init or Dx to D0 power remain */ @@ -268,13 +268,12 @@ struct vnt_interrupt_buffer { /*++ NDIS related */ -typedef enum __DEVICE_NDIS_STATUS { - STATUS_SUCCESS = 0, - STATUS_FAILURE, - STATUS_RESOURCES, - STATUS_PENDING, -} DEVICE_NDIS_STATUS, *PDEVICE_NDIS_STATUS; - +enum { + STATUS_SUCCESS = 0, + STATUS_FAILURE, + STATUS_RESOURCES, + STATUS_PENDING, +}; /* flags for options */ #define DEVICE_FLAGS_UNPLUG 0x00000001UL -- cgit From d9cf2f9e151f2842931ba118423a639bef523cd1 Mon Sep 17 00:00:00 2001 From: Peter Senna Tschudin Date: Wed, 16 Jul 2014 18:08:02 +0200 Subject: staging: vt6556: Replace printk by dev_warn This patch fixes a checkpatch warning by replacing printk by dev_warn. Tested by compilation only. Signed-off-by: Peter Senna Tschudin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a3057dac12e9..c595a158caf4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -534,7 +534,8 @@ static void usb_device_reset(struct vnt_private *pDevice) status = usb_reset_device(pDevice->usb); if (status) - printk("usb_device_reset fail status=%d\n",status); + dev_warn(&pDevice->usb->dev, + "usb_device_reset fail status=%d\n", status); return ; } -- cgit From f9dc1a8a70aac02711f74626175fc7b3b5b3416c Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Wed, 16 Jul 2014 10:45:30 +0300 Subject: Staging: vt6655: fix missing blank line after variable declaration Checkpatch fix - Add missing blank line after variable declaration Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index e21abd8ea787..0b2ca2f5dbff 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -351,6 +351,7 @@ s_vSetRSPINF(PSDevice pDevice, CARD_PHY_TYPE ePHYType, void *pvSupportRateIEs, v bool CARDbIsShortPreamble(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; + if (pDevice->byPreambleType == 0) return false; @@ -372,6 +373,7 @@ bool CARDbIsShortPreamble(void *pDeviceHandler) bool CARDbIsShorSlotTime(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; + return pDevice->bShortSlotTime; } @@ -929,6 +931,7 @@ bool CARDbRadioPowerOn(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; bool bResult = true; + printk("chester power on\n"); if (pDevice->bRadioControlOff == true) { if (pDevice->bHWRadioOff == true) printk("chester bHWRadioOff\n"); -- cgit From b86bc99054560d49d27816349550d0e1b96addc4 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Wed, 16 Jul 2014 18:22:59 +0300 Subject: Staging: comedi: adl_pci9118: a style issue fixed 'quoted string split across lines' warning in checkpatching fixed by group whole string in one line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 59a65cbc6db9..b2d25f585438 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -412,8 +412,7 @@ static int check_channel_list(struct comedi_device *dev, if ((CR_AREF(chanlist[i]) == AREF_DIFF) != (differencial)) { comedi_error(dev, - "Differencial and single ended " - "inputs can't be mixtured!"); + "Differencial and single ended inputs can't be mixtured!"); return 0; } if ((CR_RANGE(chanlist[i]) < PCI9118_BIPOLAR_RANGES) != -- cgit From 08aa75496ff15450666b99700e449727036870a1 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Wed, 16 Jul 2014 18:23:00 +0300 Subject: Staging: comedi: adl_pci9118: fractured spelling fixed a fractured spelling in previous style issue fix mended. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index b2d25f585438..f2a2d042f1c3 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -412,7 +412,7 @@ static int check_channel_list(struct comedi_device *dev, if ((CR_AREF(chanlist[i]) == AREF_DIFF) != (differencial)) { comedi_error(dev, - "Differencial and single ended inputs can't be mixtured!"); + "Differential and single ended inputs can't be mixtured!"); return 0; } if ((CR_RANGE(chanlist[i]) < PCI9118_BIPOLAR_RANGES) != -- cgit From c2c99c7fdc99ef8177a3a230b224c7771c4caaf9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:15 -0700 Subject: staging: comedi: 8255_pci: checkpatch.pl cleanup (else after return) Fix the checkpatch.pl warning in this file: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8255_pci.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index be4c95ee9eb1..e4cec932aef9 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -201,9 +201,8 @@ static int pci_8255_mmio(int dir, int port, int data, unsigned long iobase) if (dir) { writeb(data, mmio_base + port); return 0; - } else { - return readb(mmio_base + port); } + return readb(mmio_base + port); } static int pci_8255_auto_attach(struct comedi_device *dev, -- cgit From 8ed43d77b3e63705dfbea921bc6ac78bf8a7f1a7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:16 -0700 Subject: staging: comedi: 8255: checkpatch.pl cleanup (else after return) Fix the checkpatch.pl warning in this file: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8255.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index 46113a374133..a33a19622745 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -102,9 +102,8 @@ static int subdev_8255_io(int dir, int port, int data, unsigned long iobase) if (dir) { outb(data, iobase + port); return 0; - } else { - return inb(iobase + port); } + return inb(iobase + port); } void subdev_8255_interrupt(struct comedi_device *dev, -- cgit From 9ed221faae72ab1ad16e5f51d9f290e77af2c795 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:17 -0700 Subject: staging: comedi: addi_apci_3xxx: checkpatch.pl cleanup (else after return) Fix the checkpatch.pl warning in this file: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_3xxx.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_3xxx.c b/drivers/staging/comedi/drivers/addi_apci_3xxx.c index 0532b6cc40e3..12096ee584ec 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3xxx.c +++ b/drivers/staging/comedi/drivers/addi_apci_3xxx.c @@ -389,9 +389,8 @@ static int apci3xxx_ai_started(struct comedi_device *dev) if ((readl(devpriv->mmio + 8) & 0x80000) == 0x80000) return 1; - else - return 0; + return 0; } static int apci3xxx_ai_setup(struct comedi_device *dev, unsigned int chanspec) @@ -696,10 +695,9 @@ static int apci3xxx_dio_insn_config(struct comedi_device *dev, /* ignore all other instructions for ports 0 and 1 */ if (chan < 16) return -EINVAL; - else - /* changing any channel in port 2 */ - /* changes the entire port */ - mask = 0xff0000; + + /* changing any channel in port 2 changes the entire port */ + mask = 0xff0000; } ret = comedi_dio_insn_config(dev, s, insn, data, mask); -- cgit From 18a8e8c538332a7d652f4894925330c131b2ee8c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:18 -0700 Subject: staging: comedi: amplc_dio200_common: checkpatch.pl cleanup (else after return) Fix these checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_common.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 3edaa4028da2..2996b1ad3f87 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -156,8 +156,8 @@ static unsigned char dio200_read8(struct comedi_device *dev, offset <<= thisboard->mainshift; if (devpriv->io.regtype == io_regtype) return inb(devpriv->io.u.iobase + offset); - else - return readb(devpriv->io.u.membase + offset); + + return readb(devpriv->io.u.membase + offset); } /* @@ -188,8 +188,8 @@ static unsigned int dio200_read32(struct comedi_device *dev, offset <<= thisboard->mainshift; if (devpriv->io.regtype == io_regtype) return inl(devpriv->io.u.iobase + offset); - else - return readl(devpriv->io.u.membase + offset); + + return readl(devpriv->io.u.membase + offset); } /* -- cgit From c3ba2678d01e983ab47b970bc80ea8e5b3444c54 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:19 -0700 Subject: staging: comedi: amplc_pc236: checkpatch.pl cleanup (else after return) Fix these checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index c9a96ad00559..373739a0041a 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -460,11 +460,11 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!pci_dev) return -EIO; return pc236_pci_common_attach(dev, pci_dev); - } else { - dev_err(dev->class_dev, PC236_DRIVER_NAME - ": BUG! cannot determine board type!\n"); - return -EINVAL; } + + dev_err(dev->class_dev, PC236_DRIVER_NAME + ": BUG! cannot determine board type!\n"); + return -EINVAL; } /* -- cgit From 34880ec79918879bd6d81f2301b14bf7243f39cf Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:20 -0700 Subject: staging: comedi: amplc_pci224: checkpatch.pl cleanup (else after return) Fix this checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci224.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c index 339c47c1eb97..55f69c5981c4 100644 --- a/drivers/staging/comedi/drivers/amplc_pci224.c +++ b/drivers/staging/comedi/drivers/amplc_pci224.c @@ -1255,9 +1255,8 @@ static int pci224_attach_common(struct comedi_device *dev, dev_err(dev->class_dev, "error! unable to allocate irq %u\n", irq); return ret; - } else { - dev->irq = irq; } + dev->irq = irq; } return 0; -- cgit From 4ffeead33263faf598fdf965a42f873a3587f4c6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:21 -0700 Subject: staging: comedi: cb_pcidas64: checkpatch.pl cleanup (else after return) Fix these checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Also, remove an unnecessary trailing ';' at the end of a function. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 035c3a176005..bf4c1b2eb399 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -636,8 +636,8 @@ static inline unsigned int ai_dma_ring_count(const struct pcidas64_board *board) { if (board->layout == LAYOUT_4020) return MAX_AI_DMA_RING_COUNT; - else - return MIN_AI_DMA_RING_COUNT; + + return MIN_AI_DMA_RING_COUNT; } static const int bytes_in_sample = 2; @@ -1045,9 +1045,9 @@ static inline unsigned short se_diff_bit_6xxx(struct comedi_device *dev, if ((thisboard->layout == LAYOUT_64XX && !use_differential) || (thisboard->layout == LAYOUT_60XX && use_differential)) return ADC_SE_DIFF_BIT; - else - return 0; -}; + + return 0; +} struct ext_clock_info { /* master clock divisor to use for scans with external master clock */ @@ -2162,8 +2162,8 @@ static int use_hw_sample_counter(struct comedi_cmd *cmd) if (cmd->stop_src == TRIG_COUNT && cmd->stop_arg <= max_counter_value) return 1; - else - return 0; + + return 0; } static void setup_sample_counters(struct comedi_device *dev, @@ -3384,9 +3384,8 @@ static int dio_callback(int dir, int port, int data, unsigned long arg) if (dir) { writeb(data, iobase + port); return 0; - } else { - return readb(iobase + port); } + return readb(iobase + port); } static int dio_callback_4020(int dir, int port, int data, unsigned long arg) @@ -3395,9 +3394,8 @@ static int dio_callback_4020(int dir, int port, int data, unsigned long arg) if (dir) { writew(data, iobase + 2 * port); return 0; - } else { - return readw(iobase + 2 * port); } + return readw(iobase + 2 * port); } static int di_rbits(struct comedi_device *dev, struct comedi_subdevice *s, -- cgit From 02efdb3bb0a679c0867e611bb190634cf343e6e6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:22 -0700 Subject: staging: comedi: daqboard2000: checkpatch.pl cleanup (else after return) Fix these checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/daqboard2000.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/daqboard2000.c b/drivers/staging/comedi/drivers/daqboard2000.c index a8f6036ad82b..b63b8181e6e6 100644 --- a/drivers/staging/comedi/drivers/daqboard2000.c +++ b/drivers/staging/comedi/drivers/daqboard2000.c @@ -673,9 +673,8 @@ static int daqboard2000_8255_cb(int dir, int port, int data, if (dir) { writew(data, mmio_base + port * 2); return 0; - } else { - return readw(mmio_base + port * 2); } + return readw(mmio_base + port * 2); } static const void *daqboard2000_find_boardinfo(struct comedi_device *dev, -- cgit From aa2998450bcd44979b44ed8d4f226e3f486b3bb4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:23 -0700 Subject: staging: comedi: dt282x: checkpatch.pl cleanup (else after return) Fix checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index 27a8bb18bcd5..cacb4f40bbba 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -1079,11 +1079,11 @@ static const struct comedi_lrange *opt_ai_range_lkup(int ispgl, int x) if (x < 0 || x >= 2) x = 0; return ai_range_pgl_table[x]; - } else { - if (x < 0 || x >= 4) - x = 0; - return ai_range_table[x]; } + + if (x < 0 || x >= 4) + x = 0; + return ai_range_table[x]; } static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) -- cgit From eeb3b4f9ad9a19f9a7bc07b2963b2ca6cf127060 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:24 -0700 Subject: staging: comedi: pcl724: checkpatch.pl cleanup (else after return) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl724.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl724.c b/drivers/staging/comedi/drivers/pcl724.c index 655bac42f6f0..c7f8eb1cf8de 100644 --- a/drivers/staging/comedi/drivers/pcl724.c +++ b/drivers/staging/comedi/drivers/pcl724.c @@ -88,14 +88,12 @@ static int pcl724_8255mapped_io(int dir, int port, int data, iobase &= 0x0fff; + outb(port + movport, iobase); if (dir) { - outb(port + movport, iobase); outb(data, iobase + 1); return 0; - } else { - outb(port + movport, iobase); - return inb(iobase + 1); } + return inb(iobase + 1); } static int pcl724_attach(struct comedi_device *dev, -- cgit From f8d17129540d08751e8b530a276c91cca711172b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:25 -0700 Subject: staging: comedi: das1800: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warnings: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index b2f8391d5de1..d89512ef7484 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -1301,7 +1301,6 @@ static int das1800_init_dma(struct comedi_device *dev, unsigned int dma0, dev_err(dev->class_dev, "dma 5,6 / 6,7 / or 7,5\n"); return -EINVAL; - break; } if (request_dma(dma0, dev->driver->driver_name)) { dev_err(dev->class_dev, @@ -1360,7 +1359,6 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1800st-da series\n"); return das1801st; - break; case 0x4: if (board == das1802hr_da || board == das1702hr_da) { dev_dbg(dev->class_dev, "Board model: %s\n", @@ -1370,7 +1368,6 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1802hr-da\n"); return das1802hr; - break; case 0x5: if (board == das1801ao || board == das1802ao || board == das1701ao || board == das1702ao) { @@ -1381,7 +1378,6 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1800ao series\n"); return das1801ao; - break; case 0x6: if (board == das1802hr || board == das1702hr) { dev_dbg(dev->class_dev, "Board model: %s\n", @@ -1391,7 +1387,6 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1802hr\n"); return das1802hr; - break; case 0x7: if (board == das1801st || board == das1802st || board == das1701st || board == das1702st) { @@ -1402,7 +1397,6 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1800st series\n"); return das1801st; - break; case 0x8: if (board == das1801hc || board == das1802hc) { dev_dbg(dev->class_dev, "Board model: %s\n", @@ -1412,13 +1406,11 @@ static int das1800_probe(struct comedi_device *dev) printk (" Board model (probed, not recommended): das-1800hc series\n"); return das1801hc; - break; default: printk (" Board model: probe returned 0x%x (unknown, please report)\n", id); return board; - break; } return -1; } -- cgit From 1c404be2b3a6d90141b20d7433e65bc2a5fc4b3e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:26 -0700 Subject: staging: comedi: ni_at_a2150: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_at_a2150.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index 5bd19494dbf6..a862dc33444b 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -681,7 +681,6 @@ static int a2150_set_chanlist(struct comedi_device *dev, break; default: return -1; - break; } return 0; -- cgit From ee99bcc75d3bfe260338de6cf632853bc7c1b936 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:27 -0700 Subject: staging: comedi: s526: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s526.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s526.c b/drivers/staging/comedi/drivers/s526.c index 85d2b7a3c125..208567d2cb21 100644 --- a/drivers/staging/comedi/drivers/s526.c +++ b/drivers/staging/comedi/drivers/s526.c @@ -345,7 +345,6 @@ static int s526_gpct_insn_config(struct comedi_device *dev, default: return -EINVAL; - break; } return insn->n; -- cgit From f10516768140984d66ee120060a5cf8bf04f8f71 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:28 -0700 Subject: staging: comedi: cb_pcidas64: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warnings: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index bf4c1b2eb399..f296cbc41094 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1874,7 +1874,6 @@ static int ai_config_master_clock_4020(struct comedi_device *dev, break; default: return -EINVAL; - break; } data[4] = divisor; @@ -1890,10 +1889,8 @@ static int ai_config_master_clock(struct comedi_device *dev, unsigned int *data) switch (thisboard->layout) { case LAYOUT_4020: return ai_config_master_clock_4020(dev, data); - break; default: return -EINVAL; - break; } return -EINVAL; @@ -1907,16 +1904,12 @@ static int ai_config_insn(struct comedi_device *dev, struct comedi_subdevice *s, switch (id) { case INSN_CONFIG_ALT_SOURCE: return ai_config_calibration_source(dev, data); - break; case INSN_CONFIG_BLOCK_SIZE: return ai_config_block_size(dev, data); - break; case INSN_CONFIG_TIMER_1: return ai_config_master_clock(dev, data); - break; default: return -EINVAL; - break; } return -EINVAL; } @@ -2224,7 +2217,6 @@ static uint32_t ai_scan_counter_6xxx(struct comedi_device *dev, break; default: return 0; - break; } return count - 3; } @@ -3568,7 +3560,6 @@ static int caldac_i2c_write(struct comedi_device *dev, default: comedi_error(dev, "invalid caldac channel\n"); return -1; - break; } serial_bytes[1] = NOT_CLEAR_REGISTERS | ((value >> 8) & 0xf); serial_bytes[2] = value & 0xff; -- cgit From 57ec1abf4d59c7a2490ed113b41e3b0b147f0e12 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:29 -0700 Subject: staging: comedi: cb_pcidas: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warnings: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c index 7377da1aff7c..9badd1938b5d 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas.c +++ b/drivers/staging/comedi/drivers/cb_pcidas.c @@ -461,7 +461,6 @@ static int ai_config_insn(struct comedi_device *dev, struct comedi_subdevice *s, break; default: return -EINVAL; - break; } return insn->n; } @@ -776,7 +775,6 @@ static int cb_pcidas_trimpot_write(struct comedi_device *dev, default: comedi_error(dev, "driver bug?"); return -1; - break; } return 1; @@ -1253,7 +1251,6 @@ static int cb_pcidas_ao_cmd(struct comedi_device *dev, spin_unlock_irqrestore(&dev->spinlock, flags); comedi_error(dev, "error setting dac pacer source"); return -1; - break; } spin_unlock_irqrestore(&dev->spinlock, flags); -- cgit From eb8051d73ccd0c3b3dfbd03ca764e6b1c7fb9a6b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:30 -0700 Subject: staging: comedi: ni_660x: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warnings: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 27d435f2565b..d09b8667cd42 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -619,10 +619,8 @@ static inline unsigned ni_660x_read_register(struct comedi_device *dev, switch (registerData[reg].size) { case DATA_2B: return readw(read_address); - break; case DATA_4B: return readl(read_address); - break; default: BUG(); break; -- cgit From f9558b49dc2acabb95fb40b7486b7b41d317215e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:31 -0700 Subject: staging: comedi: ni_660x: checkpatch.pl cleanup (else not useful) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index d09b8667cd42..72805e9a2798 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -310,10 +310,7 @@ enum clock_config_register_bits { /* ioconfigreg */ static inline unsigned ioconfig_bitshift(unsigned pfi_channel) { - if (pfi_channel % 2) - return 0; - else - return 8; + return (pfi_channel % 2) ? 0 : 8; } static inline unsigned pfi_output_select_mask(unsigned pfi_channel) -- cgit From 193725ba3f99ea1d2d8870769be231bf2c3be74a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:32 -0700 Subject: staging: comedi: s626: checkpatch.pl cleanup (else not useful) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 9da68225469e..b276ce485c5f 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -836,10 +836,8 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev, static uint16_t s626_get_mode(struct comedi_device *dev, unsigned int chan) { - if (chan < 3) - return s626_get_mode_a(dev, chan); - else - return s626_get_mode_b(dev, chan); + return (chan < 3) ? s626_get_mode_a(dev, chan) + : s626_get_mode_b(dev, chan); } #endif @@ -1047,10 +1045,8 @@ static uint16_t s626_get_enable(struct comedi_device *dev, { uint16_t crb = s626_debi_read(dev, S626_LP_CRB(chan)); - if (chan < 3) - return S626_GET_CRB_CLKENAB_A(crb); - else - return S626_GET_CRB_CLKENAB_B(crb); + return (chan < 3) ? S626_GET_CRB_CLKENAB_A(crb) + : S626_GET_CRB_CLKENAB_B(crb); } #endif -- cgit From 959409613df8368d394033c1d5ab2eab827d2c51 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:33 -0700 Subject: staging: comedi: ni_mio_common: checkpatch.pl cleanup (break not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 41 +------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 01b29d5ec392..fe88a1cc0b16 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -223,10 +223,8 @@ static inline unsigned NI_GPCT_SUBDEV(unsigned counter_index) switch (counter_index) { case 0: return NI_GPCT0_SUBDEV; - break; case 1: return NI_GPCT1_SUBDEV; - break; default: break; } @@ -3026,7 +3024,6 @@ static int ni_ao_insn_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } return 0; default: @@ -4015,7 +4012,6 @@ static unsigned ni_gpct_to_stc_register(enum ni_gpct_register reg) __func__, reg); BUG(); return 0; - break; } return stc_register; } @@ -4113,7 +4109,6 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, default: stc_register = ni_gpct_to_stc_register(reg); return ni_stc_readw(dev, stc_register); - break; } return 0; } @@ -4240,7 +4235,6 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } switch (data[3]) { case TRIG_ROUND_NEAREST: @@ -4258,7 +4252,6 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } if (up_count * devpriv->clock_ns != data[2] || down_count * devpriv->clock_ns != data[4]) { @@ -4272,13 +4265,10 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, devpriv->pwm_up_count = up_count; devpriv->pwm_down_count = down_count; return 5; - break; case INSN_CONFIG_GET_PWM_OUTPUT: return ni_get_pwm_config(dev, data); - break; default: return -EINVAL; - break; } return 0; } @@ -4309,7 +4299,6 @@ static int ni_6143_pwm_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } switch (data[3]) { case TRIG_ROUND_NEAREST: @@ -4327,7 +4316,6 @@ static int ni_6143_pwm_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } if (up_count * devpriv->clock_ns != data[2] || down_count * devpriv->clock_ns != data[4]) { @@ -4340,12 +4328,10 @@ static int ni_6143_pwm_config(struct comedi_device *dev, ni_writel(dev, down_count, Calibration_LowTime_6143); devpriv->pwm_down_count = down_count; return 5; - break; case INSN_CONFIG_GET_PWM_OUTPUT: return ni_get_pwm_config(dev, data); default: return -EINVAL; - break; } return 0; } @@ -4581,34 +4567,24 @@ static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, switch (chan) { case 0: return NI_PFI_OUTPUT_AI_START1; - break; case 1: return NI_PFI_OUTPUT_AI_START2; - break; case 2: return NI_PFI_OUTPUT_AI_CONVERT; - break; case 3: return NI_PFI_OUTPUT_G_SRC1; - break; case 4: return NI_PFI_OUTPUT_G_GATE1; - break; case 5: return NI_PFI_OUTPUT_AO_UPDATE_N; - break; case 6: return NI_PFI_OUTPUT_AO_START1; - break; case 7: return NI_PFI_OUTPUT_AI_START_PULSE; - break; case 8: return NI_PFI_OUTPUT_G_SRC0; - break; case 9: return NI_PFI_OUTPUT_G_GATE0; - break; default: printk("%s: bug, unhandled case in switch.\n", __func__); break; @@ -4718,16 +4694,13 @@ static int ni_pfi_insn_config(struct comedi_device *dev, (devpriv->io_bidirection_pin_reg & (1 << chan)) ? COMEDI_OUTPUT : COMEDI_INPUT; return 0; - break; case INSN_CONFIG_SET_ROUTING: return ni_set_pfi_routing(dev, chan, data[1]); - break; case INSN_CONFIG_GET_ROUTING: data[1] = ni_get_pfi_routing(dev, chan); break; case INSN_CONFIG_FILTER: return ni_config_filter(dev, chan, data[1]); - break; default: return -EINVAL; } @@ -5122,16 +5095,10 @@ static int ni_valid_rtsi_output_source(struct comedi_device *dev, case NI_RTSI_OUTPUT_RGOUT0: case NI_RTSI_OUTPUT_RTSI_BRD_0: return 1; - break; case NI_RTSI_OUTPUT_RTSI_OSC: - if (devpriv->is_m_series) - return 1; - else - return 0; - break; + return (devpriv->is_m_series) ? 1 : 0; default: return 0; - break; } } @@ -5221,25 +5188,19 @@ static int ni_rtsi_insn_config(struct comedi_device *dev, ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; } return 2; - break; case INSN_CONFIG_SET_CLOCK_SRC: return ni_set_master_clock(dev, data[1], data[2]); - break; case INSN_CONFIG_GET_CLOCK_SRC: data[1] = devpriv->clock_source; data[2] = devpriv->clock_ns; return 3; - break; case INSN_CONFIG_SET_ROUTING: return ni_set_rtsi_routing(dev, chan, data[1]); - break; case INSN_CONFIG_GET_ROUTING: data[1] = ni_get_rtsi_routing(dev, chan); return 2; - break; default: return -EINVAL; - break; } return 1; } -- cgit From 0953ee4acca08f4bfa9857d4156f4282d30f1a10 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:34 -0700 Subject: staging: comedi: ni_mio_common: checkpatch.pl cleanup (else not useful) Fix the checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 60 +++++++++++--------------- 1 file changed, 26 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index fe88a1cc0b16..b630c66dda4b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -250,8 +250,8 @@ static void ni_writel(struct comedi_device *dev, uint32_t data, int reg) if (devpriv->mite) writel(data, devpriv->mite->daq_io_addr + reg); - else - outl(data, dev->iobase + reg); + + outl(data, dev->iobase + reg); } static void ni_writew(struct comedi_device *dev, uint16_t data, int reg) @@ -260,8 +260,8 @@ static void ni_writew(struct comedi_device *dev, uint16_t data, int reg) if (devpriv->mite) writew(data, devpriv->mite->daq_io_addr + reg); - else - outw(data, dev->iobase + reg); + + outw(data, dev->iobase + reg); } static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg) @@ -270,8 +270,8 @@ static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg) if (devpriv->mite) writeb(data, devpriv->mite->daq_io_addr + reg); - else - outb(data, dev->iobase + reg); + + outb(data, dev->iobase + reg); } static uint32_t ni_readl(struct comedi_device *dev, int reg) @@ -280,8 +280,8 @@ static uint32_t ni_readl(struct comedi_device *dev, int reg) if (devpriv->mite) return readl(devpriv->mite->daq_io_addr + reg); - else - return inl(dev->iobase + reg); + + return inl(dev->iobase + reg); } static uint16_t ni_readw(struct comedi_device *dev, int reg) @@ -290,8 +290,8 @@ static uint16_t ni_readw(struct comedi_device *dev, int reg) if (devpriv->mite) return readw(devpriv->mite->daq_io_addr + reg); - else - return inw(dev->iobase + reg); + + return inw(dev->iobase + reg); } static uint8_t ni_readb(struct comedi_device *dev, int reg) @@ -300,8 +300,8 @@ static uint8_t ni_readb(struct comedi_device *dev, int reg) if (devpriv->mite) return readb(devpriv->mite->daq_io_addr + reg); - else - return inb(dev->iobase + reg); + + return inb(dev->iobase + reg); } /* @@ -4195,9 +4195,9 @@ static int ni_8255_callback(int dir, int port, int data, unsigned long arg) if (dir) { ni_writeb(dev, data, Port_A + 2 * port); return 0; - } else { - return ni_readb(dev, Port_A + 2 * port); } + + return ni_readb(dev, Port_A + 2 * port); } static int ni_get_pwm_config(struct comedi_device *dev, unsigned int *data) @@ -4635,10 +4635,9 @@ static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan) { struct ni_private *devpriv = dev->private; - if (devpriv->is_m_series) - return ni_m_series_get_pfi_routing(dev, chan); - else - return ni_old_get_pfi_routing(dev, chan); + return (devpriv->is_m_series) + ? ni_m_series_get_pfi_routing(dev, chan) + : ni_old_get_pfi_routing(dev, chan); } static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan, @@ -4646,10 +4645,9 @@ static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan, { struct ni_private *devpriv = dev->private; - if (devpriv->is_m_series) - return ni_m_series_set_pfi_routing(dev, chan, source); - else - return ni_old_set_pfi_routing(dev, chan, source); + return (devpriv->is_m_series) + ? ni_m_series_set_pfi_routing(dev, chan, source) + : ni_old_set_pfi_routing(dev, chan, source); } static int ni_config_filter(struct comedi_device *dev, @@ -5045,9 +5043,8 @@ static int ni_set_master_clock(struct comedi_device *dev, ("%s: we don't handle an unspecified clock period correctly yet, returning error.\n", __func__); return -EINVAL; - } else { - devpriv->clock_ns = period_ns; } + devpriv->clock_ns = period_ns; devpriv->clock_source = source; } else return -EINVAL; @@ -5060,10 +5057,7 @@ static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) { struct ni_private *devpriv = dev->private; - if (devpriv->is_m_series) - return 8; - else - return 7; + return (devpriv->is_m_series) ? 8 : 7; } static int ni_valid_rtsi_output_source(struct comedi_device *dev, @@ -5075,12 +5069,10 @@ static int ni_valid_rtsi_output_source(struct comedi_device *dev, if (chan == old_RTSI_clock_channel) { if (source == NI_RTSI_OUTPUT_RTSI_OSC) return 1; - else { - printk - ("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", - __func__, chan, old_RTSI_clock_channel); - return 0; - } + + printk("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", + __func__, chan, old_RTSI_clock_channel); + return 0; } return 0; } -- cgit From ce1d67ac3f0ccfb7e3f740310b45871e5af38e18 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:35 -0700 Subject: staging: comedi: usbdux: checkpatch.pl cleanup (else not useful) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/usbdux.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index 5f65e4213c6e..053bc5090530 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c @@ -1327,13 +1327,13 @@ static int usbdux_pwm_period(struct comedi_device *dev, struct usbdux_private *devpriv = dev->private; int fx2delay = 255; - if (period < MIN_PWM_PERIOD) { + if (period < MIN_PWM_PERIOD) return -EAGAIN; - } else { - fx2delay = (period / (6 * 512 * 1000 / 33)) - 6; - if (fx2delay > 255) - return -EAGAIN; - } + + fx2delay = (period / (6 * 512 * 1000 / 33)) - 6; + if (fx2delay > 255) + return -EAGAIN; + devpriv->pwm_delay = fx2delay; devpriv->pwm_period = period; -- cgit From 182157e1e5c66e6e647a4f1be99a6c674008e20b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:36 -0700 Subject: staging: comedi: usbduxsigma: checkpatch.pl cleanup (else not useful) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/usbduxsigma.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c index e869af4784c6..94a09c16de8b 100644 --- a/drivers/staging/comedi/drivers/usbduxsigma.c +++ b/drivers/staging/comedi/drivers/usbduxsigma.c @@ -1176,13 +1176,13 @@ static int usbduxsigma_pwm_period(struct comedi_device *dev, struct usbduxsigma_private *devpriv = dev->private; int fx2delay = 255; - if (period < MIN_PWM_PERIOD) { + if (period < MIN_PWM_PERIOD) return -EAGAIN; - } else { - fx2delay = (period / (6 * 512 * 1000 / 33)) - 6; - if (fx2delay > 255) - return -EAGAIN; - } + + fx2delay = (period / (6 * 512 * 1000 / 33)) - 6; + if (fx2delay > 255) + return -EAGAIN; + devpriv->pwm_delay = fx2delay; devpriv->pwm_period = period; return 0; -- cgit From 9bad91337cacc7dcc857a9604e498025d4cc19e9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:37 -0700 Subject: staging: comedi: ni_tio: checkpatch.pl cleanup (break is not useful) Fix the checkpatch.pl warnings: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 67 --------------------------------- 1 file changed, 67 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 92691b491c24..a25e2f5d83ab 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -60,13 +60,10 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Alternate_Sync_Bit(enum switch (variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: return Gi_M_Series_Alternate_Sync_Bit; - break; case ni_gpct_variant_660x: return Gi_660x_Alternate_Sync_Bit; - break; default: BUG(); break; @@ -81,13 +78,10 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X2_Bit(enum switch (variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: return Gi_M_Series_Prescale_X2_Bit; - break; case ni_gpct_variant_660x: return Gi_660x_Prescale_X2_Bit; - break; default: BUG(); break; @@ -102,13 +96,10 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X8_Bit(enum switch (variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: return Gi_M_Series_Prescale_X8_Bit; - break; case ni_gpct_variant_660x: return Gi_660x_Prescale_X8_Bit; - break; default: BUG(); break; @@ -123,13 +114,10 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_HW_Arm_Select_Mask(enum switch (variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: return Gi_M_Series_HW_Arm_Select_Mask; - break; case ni_gpct_variant_660x: return Gi_660x_HW_Arm_Select_Mask; - break; default: BUG(); break; @@ -331,11 +319,9 @@ static int ni_tio_second_gate_registers_present(const struct ni_gpct_device switch (counter_dev->variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: case ni_gpct_variant_660x: return 1; - break; default: BUG(); break; @@ -704,7 +690,6 @@ static void ni_tio_set_source_subselect(struct ni_gpct *counter, /* Gi_Source_Subselect doesn't matter */ default: return; - break; } write_register(counter, counter_dev->regs[second_gate_reg], second_gate_reg); @@ -757,7 +742,6 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, break; default: return -EINVAL; - break; } ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), Gi_Prescale_X2_Bit(counter_dev->variant) | @@ -915,10 +899,8 @@ static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter) case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: return ni_m_series_clock_src_select(counter); - break; case ni_gpct_variant_660x: return ni_660x_clock_src_select(counter); - break; default: BUG(); break; @@ -947,7 +929,6 @@ static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, default: /* clock period is specified by user with prescaling already taken into account. */ return counter->clock_period_ps; - break; } switch (generic_clock_source & NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK) { @@ -1035,7 +1016,6 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, if (i <= ni_660x_max_gate_pin) break; return -EINVAL; - break; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), Gi_Gate_Select_Mask, @@ -1084,7 +1064,6 @@ static int ni_m_series_set_first_gate(struct ni_gpct *counter, if (i <= ni_m_series_max_pfi_channel) break; return -EINVAL; - break; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), Gi_Gate_Select_Mask, @@ -1140,7 +1119,6 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, if (i <= ni_660x_max_up_down_pin) break; return -EINVAL; - break; } counter_dev->regs[second_gate_reg] |= Gi_Second_Gate_Mode_Bit; counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Select_Mask; @@ -1199,10 +1177,8 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: return ni_m_series_set_first_gate(counter, gate_source); - break; case ni_gpct_variant_660x: return ni_660x_set_first_gate(counter, gate_source); - break; default: BUG(); break; @@ -1230,10 +1206,8 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, case ni_gpct_variant_m_series: return ni_m_series_set_second_gate(counter, gate_source); - break; case ni_gpct_variant_660x: return ni_660x_set_second_gate(counter, gate_source); - break; default: BUG(); break; @@ -1241,7 +1215,6 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, break; default: return -EINVAL; - break; } return 0; } @@ -1269,7 +1242,6 @@ static int ni_tio_set_other_src(struct ni_gpct *counter, unsigned index, break; default: return -EINVAL; - break; } mask = 0x1f << shift; if (source > 0x1f) { @@ -1292,24 +1264,18 @@ static unsigned ni_660x_first_gate_to_generic_gate_source(unsigned switch (ni_660x_gate_select) { case NI_660x_Source_Pin_i_Gate_Select: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; - break; case NI_660x_Gate_Pin_i_Gate_Select: return NI_GPCT_GATE_PIN_i_GATE_SELECT; - break; case NI_660x_Next_SRC_Gate_Select: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - break; case NI_660x_Next_Out_Gate_Select: return NI_GPCT_NEXT_OUT_GATE_SELECT; - break; case NI_660x_Logic_Low_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; - break; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { if (ni_660x_gate_select == NI_660x_RTSI_Gate_Select(i)) { return NI_GPCT_RTSI_GATE_SELECT(i); - break; } } if (i <= ni_660x_max_rtsi_channel) @@ -1318,7 +1284,6 @@ static unsigned ni_660x_first_gate_to_generic_gate_source(unsigned if (ni_660x_gate_select == NI_660x_Gate_Pin_Gate_Select(i)) { return NI_GPCT_GATE_PIN_GATE_SELECT(i); - break; } } if (i <= ni_660x_max_gate_pin) @@ -1337,34 +1302,25 @@ static unsigned ni_m_series_first_gate_to_generic_gate_source(unsigned switch (ni_m_series_gate_select) { case NI_M_Series_Timestamp_Mux_Gate_Select: return NI_GPCT_TIMESTAMP_MUX_GATE_SELECT; - break; case NI_M_Series_AI_START2_Gate_Select: return NI_GPCT_AI_START2_GATE_SELECT; - break; case NI_M_Series_PXI_Star_Trigger_Gate_Select: return NI_GPCT_PXI_STAR_TRIGGER_GATE_SELECT; - break; case NI_M_Series_Next_Out_Gate_Select: return NI_GPCT_NEXT_OUT_GATE_SELECT; - break; case NI_M_Series_AI_START1_Gate_Select: return NI_GPCT_AI_START1_GATE_SELECT; - break; case NI_M_Series_Next_SRC_Gate_Select: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - break; case NI_M_Series_Analog_Trigger_Out_Gate_Select: return NI_GPCT_ANALOG_TRIGGER_OUT_GATE_SELECT; - break; case NI_M_Series_Logic_Low_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; - break; default: for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { if (ni_m_series_gate_select == NI_M_Series_RTSI_Gate_Select(i)) { return NI_GPCT_RTSI_GATE_SELECT(i); - break; } } if (i <= ni_m_series_max_rtsi_channel) @@ -1373,7 +1329,6 @@ static unsigned ni_m_series_first_gate_to_generic_gate_source(unsigned if (ni_m_series_gate_select == NI_M_Series_PFI_Gate_Select(i)) { return NI_GPCT_PFI_GATE_SELECT(i); - break; } } if (i <= ni_m_series_max_pfi_channel) @@ -1392,28 +1347,21 @@ static unsigned ni_660x_second_gate_to_generic_gate_source(unsigned switch (ni_660x_gate_select) { case NI_660x_Source_Pin_i_Second_Gate_Select: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; - break; case NI_660x_Up_Down_Pin_i_Second_Gate_Select: return NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT; - break; case NI_660x_Next_SRC_Second_Gate_Select: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - break; case NI_660x_Next_Out_Second_Gate_Select: return NI_GPCT_NEXT_OUT_GATE_SELECT; - break; case NI_660x_Selected_Gate_Second_Gate_Select: return NI_GPCT_SELECTED_GATE_GATE_SELECT; - break; case NI_660x_Logic_Low_Second_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; - break; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { if (ni_660x_gate_select == NI_660x_RTSI_Second_Gate_Select(i)) { return NI_GPCT_RTSI_GATE_SELECT(i); - break; } } if (i <= ni_660x_max_rtsi_channel) @@ -1422,7 +1370,6 @@ static unsigned ni_660x_second_gate_to_generic_gate_source(unsigned if (ni_660x_gate_select == NI_660x_Up_Down_Pin_Second_Gate_Select(i)) { return NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i); - break; } } if (i <= ni_660x_max_up_down_pin) @@ -1441,7 +1388,6 @@ static unsigned ni_m_series_second_gate_to_generic_gate_source(unsigned switch (ni_m_series_gate_select) { default: return ni_m_series_gate_select; - break; } return 0; }; @@ -1528,7 +1474,6 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, break; default: return -EINVAL; - break; } return 0; } @@ -1543,39 +1488,29 @@ int ni_tio_insn_config(struct comedi_device *dev, switch (data[0]) { case INSN_CONFIG_SET_COUNTER_MODE: return ni_tio_set_counter_mode(counter, data[1]); - break; case INSN_CONFIG_ARM: return ni_tio_arm(counter, 1, data[1]); - break; case INSN_CONFIG_DISARM: ni_tio_arm(counter, 0, 0); return 0; - break; case INSN_CONFIG_GET_COUNTER_STATUS: data[1] = ni_tio_counter_status(counter); data[2] = counter_status_mask; return 0; - break; case INSN_CONFIG_SET_CLOCK_SRC: return ni_tio_set_clock_src(counter, data[1], data[2]); - break; case INSN_CONFIG_GET_CLOCK_SRC: ni_tio_get_clock_src(counter, &data[1], &data[2]); return 0; - break; case INSN_CONFIG_SET_GATE_SRC: return ni_tio_set_gate_src(counter, data[1], data[2]); - break; case INSN_CONFIG_GET_GATE_SRC: return ni_tio_get_gate_src(counter, data[1], &data[2]); - break; case INSN_CONFIG_SET_OTHER_SRC: return ni_tio_set_other_src(counter, data[1], data[2]); - break; case INSN_CONFIG_RESET: ni_tio_reset_count_and_disarm(counter); return 0; - break; default: break; } @@ -1618,7 +1553,6 @@ int ni_tio_insn_read(struct comedi_device *dev, correct_read = first_read; data[0] = correct_read; return 0; - break; case 1: data[0] = counter_dev->regs[NITIO_LOADA_REG(cidx)]; break; @@ -1676,7 +1610,6 @@ int ni_tio_insn_write(struct comedi_device *dev, break; default: return -EINVAL; - break; } return 0; } -- cgit From 89660697cbbb976e471f71232b6ebcec79d95f06 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:38 -0700 Subject: staging: comedi: ni_tio: checkpatch.pl cleanup (else is not useful) Fix the checkpatch.pl warnings: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 38 ++++++++++++++------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index a25e2f5d83ab..1a5bb2353de3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -165,20 +165,16 @@ static const unsigned ni_m_series_max_pfi_channel = 15; static inline unsigned NI_M_Series_PFI_Clock(unsigned n) { BUG_ON(n > ni_m_series_max_pfi_channel); - if (n < 10) - return 1 + n; - else - return 0xb + n; + + return (n < 10) ? (1 + n) : (0xb + n); } static const unsigned ni_m_series_max_rtsi_channel = 7; static inline unsigned NI_M_Series_RTSI_Clock(unsigned n) { BUG_ON(n > ni_m_series_max_rtsi_channel); - if (n == 7) - return 0x1b; - else - return 0xb + n; + + return (n == 7) ? 0x1b : (0xb + n); } enum ni_660x_gate_select { @@ -1408,12 +1404,12 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, Gi_Gating_Disabled_Bits) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; - } else { - gate_select_bits = - (ni_tio_get_soft_copy(counter, - NITIO_INPUT_SEL_REG(cidx)) & - Gi_Gate_Select_Mask) >> Gi_Gate_Select_Shift; } + + gate_select_bits = + (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & + Gi_Gate_Select_Mask) >> Gi_Gate_Select_Shift; + switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: @@ -1442,12 +1438,11 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, == 0) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; - } else { - gate_select_bits = - (counter_dev->regs[second_gate_reg] & - Gi_Second_Gate_Select_Mask) >> - Gi_Second_Gate_Select_Shift; } + + gate_select_bits = (counter_dev->regs[second_gate_reg] & + Gi_Second_Gate_Select_Mask) >> + Gi_Second_Gate_Select_Shift; switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: @@ -1570,10 +1565,9 @@ static unsigned ni_tio_next_load_register(struct ni_gpct *counter) const unsigned bits = read_register(counter, NITIO_SHARED_STATUS_REG(cidx)); - if (bits & Gi_Next_Load_Source_Bit(cidx)) - return NITIO_LOADB_REG(cidx); - else - return NITIO_LOADA_REG(cidx); + return (bits & Gi_Next_Load_Source_Bit(cidx)) + ? NITIO_LOADB_REG(cidx) + : NITIO_LOADA_REG(cidx); } int ni_tio_insn_write(struct comedi_device *dev, -- cgit From 1c6820bc167a06e4b28c586a990b8bf6a173d64b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:39 -0700 Subject: staging: comedi: ni_tiocmd: checkpatch.pl cleanup (break is not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tiocmd.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 2557ab48cb6c..f66b504811bf 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -342,7 +342,6 @@ static int should_ack_gate(struct ni_gpct *counter) in register-level manual) */ case ni_gpct_variant_660x: return 1; - break; case ni_gpct_variant_e_series: spin_lock_irqsave(&counter->lock, flags); { -- cgit From d88e3da90f5210f859b19a11a00fa4d539eb7dbd Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:40 -0700 Subject: staging: comedi: ni_labpc: checkpatch.pl cleanup (else is not useful) Fix the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 3e3f940fa57c..34ffa2e43657 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1051,9 +1051,9 @@ static int labpc_8255_mmio(int dir, int port, int data, unsigned long iobase) if (dir) { writeb(data, (void __iomem *)(iobase + port)); return 0; - } else { - return readb((void __iomem *)(iobase + port)); } + + return readb((void __iomem *)(iobase + port)); } /* lowlevel write to eeprom/dac */ -- cgit From a8b6c4f5a86ccf4f94a7d179e10d0c78976743c3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:41 -0700 Subject: staging: comedi: das08: checkpatch.pl cleanup (break is not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das08.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index c5e352fb5555..6e55ba5787b7 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -452,7 +452,6 @@ static int das08_counter_config(struct comedi_device *dev, break; default: return -EINVAL; - break; } return 2; } -- cgit From 1ba7577469e1b26704f7cdab17195a2147ee774d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:42 -0700 Subject: staging: comedi: ni_tio_internal.c: checkpatch.pl cleanup (break is not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 15b81b8fc5c4..3c53958bbbbf 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -334,11 +334,9 @@ static inline int ni_tio_counting_mode_registers_present(const struct switch (counter_dev->variant) { case ni_gpct_variant_e_series: return 0; - break; case ni_gpct_variant_m_series: case ni_gpct_variant_660x: return 1; - break; default: BUG(); break; -- cgit From 3176b5e95edf9790dfa1b4759b21b41725666a73 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 10:43:43 -0700 Subject: staging: comedi: mite.h: tidy up mite_csigr_wpdep() Refactor this inline function to fix the checkpatch.pl warnings: WARNING: Missing a blank line after declarations WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index 33d87a239532..ef7172af7031 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -184,11 +184,9 @@ static inline int mite_csigr_dmac(u32 csigr_bits) static inline int mite_csigr_wpdep(u32 csigr_bits) { /* write post fifo depth */ unsigned int wpdep_bits = (csigr_bits >> 20) & 0x7; - if (wpdep_bits == 0) - return 0; - else - return 1 << (wpdep_bits - 1); -}; + + return (wpdep_bits) ? (1 << (wpdep_bits - 1)) : 0; +} static inline int mite_csigr_wins(u32 csigr_bits) { -- cgit From 2cbc7a3fbac49836bf67bd02b7ca036076470e7c Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Wed, 16 Jul 2014 23:23:56 +0300 Subject: Staging: adl_pci9118: a language issue fixed For better use of English, 'mixtured' which is not right, replaced by 'mixed'. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index f2a2d042f1c3..93bd9ee42da1 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -412,7 +412,7 @@ static int check_channel_list(struct comedi_device *dev, if ((CR_AREF(chanlist[i]) == AREF_DIFF) != (differencial)) { comedi_error(dev, - "Differential and single ended inputs can't be mixtured!"); + "Differential and single ended inputs can't be mixed!"); return 0; } if ((CR_RANGE(chanlist[i]) < PCI9118_BIPOLAR_RANGES) != -- cgit From 214c043fc77d97f1b1e2fe8ebe2de4c8559d1e4f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:49 -0700 Subject: staging: comedi: 8253.h: checkpatch.pl cleanup (void function return) Fix the checkpatch.pl warning in this file: WARNING: void function return statements are not generally useful Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8253.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8253.h b/drivers/staging/comedi/drivers/8253.h index 5829b46b757b..035b3e30efc1 100644 --- a/drivers/staging/comedi/drivers/8253.h +++ b/drivers/staging/comedi/drivers/8253.h @@ -118,7 +118,6 @@ static inline void i8253_cascade_ns_to_timer(int i8253_osc_base, /* masking is done since counter maps zero to 0x10000 */ *d1 = div1 & 0xffff; *d2 = div2 & 0xffff; - return; } #ifndef CMDTEST -- cgit From c6d94c74a3548ee688283bca38ebe32969e0c1e0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:50 -0700 Subject: staging: comedi: adv_pci1723: checkpatch.pl cleanup (missing blank line) Fix this checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1723.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1723.c b/drivers/staging/comedi/drivers/adv_pci1723.c index 07b107d1ab33..1881df459dae 100644 --- a/drivers/staging/comedi/drivers/adv_pci1723.c +++ b/drivers/staging/comedi/drivers/adv_pci1723.c @@ -161,11 +161,10 @@ static int pci1723_ao_write_winsn(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { struct pci1723_private *devpriv = dev->private; - int n, chan; - chan = CR_CHAN(insn->chanspec); + unsigned int chan = CR_CHAN(insn->chanspec); + int n; for (n = 0; n < insn->n; n++) { - devpriv->ao_data[chan] = data[n]; outw(data[n], dev->iobase + PCI1723_DA(chan)); } -- cgit From ec05d98cec4825ddede62943734d828efa530892 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:51 -0700 Subject: staging: comedi: amplc_pc236: checkpatch.pl cleanup (missing blank line) Fix this checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 373739a0041a..2a1006835dec 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -515,6 +515,7 @@ static void pc236_detach(struct comedi_device *dev) comedi_legacy_detach(dev); } else if (is_pci_board(thisboard)) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); + if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); -- cgit From 0a9e58d6e68f1656be234e92a4eeae8f98dd4dd1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:52 -0700 Subject: staging: comedi: amplc_pci230: checkpatch.pl cleanup (void function return) Fix the checkpatch.pl warning in this file: WARNING: void function return statements are not generally useful Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 3895bc7cb3e3..f00344902216 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -758,7 +758,6 @@ static void pci230_ns_to_single_timer(unsigned int *ns, unsigned int round) clk_src = pci230_choose_clk_count(*ns, &count, round); *ns = count * pci230_timebase[clk_src]; - return; } static void pci230_ct_setup_ns_mode(struct comedi_device *dev, unsigned int ct, -- cgit From 43358ed094deec0f13fbd873674ebc5eedc32ca1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:53 -0700 Subject: staging: comedi: cb_pcidas64: checkpatch.pl cleanup (missing blank line) Fix this checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index f296cbc41094..171342a9197f 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1769,6 +1769,7 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, * as it is very slow */ if (old_cal_range_bits != devpriv->i2c_cal_range_bits) { uint8_t i2c_data = devpriv->i2c_cal_range_bits; + i2c_write(dev, RANGE_CAL_I2C_ADDR, &i2c_data, sizeof(i2c_data)); } @@ -2446,6 +2447,7 @@ static int setup_channel_queue(struct comedi_device *dev, * as it is very slow */ if (old_cal_range_bits != devpriv->i2c_cal_range_bits) { uint8_t i2c_data = devpriv->i2c_cal_range_bits; + i2c_write(dev, RANGE_CAL_I2C_ADDR, &i2c_data, sizeof(i2c_data)); } @@ -3373,6 +3375,7 @@ 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) { void __iomem *iobase = (void __iomem *)arg; + if (dir) { writeb(data, iobase + port); return 0; @@ -3383,6 +3386,7 @@ 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) { void __iomem *iobase = (void __iomem *)arg; + if (dir) { writew(data, iobase + 2 * port); return 0; -- cgit From a8fa9200a5e594e2c46ef6138aeab46aac68483e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:54 -0700 Subject: staging: comedi: cd_pcidas64: checkpatch.pl cleanup (void function return) Fix the checkpatch.pl warning: WARNING: void function return statements are not generally useful Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 171342a9197f..046336f059aa 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1985,8 +1985,6 @@ static void check_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd) scan_divisor = min_scan_divisor; cmd->scan_begin_arg = scan_divisor * TIMER_BASE; } - - return; } static int cb_pcidas64_ai_check_chanlist(struct comedi_device *dev, -- cgit From d7e31e5661aa9b6f945f2cf3aa57442a92d2f5d9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:55 -0700 Subject: staging: comedi: das16: checkpatch.pl cleanup (missing blank line) Fix thess checkpatch.pl warnings: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das16.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das16.c b/drivers/staging/comedi/drivers/das16.c index 2feecf199f27..d92cc181112d 100644 --- a/drivers/staging/comedi/drivers/das16.c +++ b/drivers/staging/comedi/drivers/das16.c @@ -506,18 +506,18 @@ static void das16_ai_disable(struct comedi_device *dev) static int disable_dma_on_even(struct comedi_device *dev) { struct das16_private_struct *devpriv = dev->private; - int residue; - int i; static const int disable_limit = 100; static const int enable_timeout = 100; + int residue; + int new_residue; + int i; + int j; disable_dma(devpriv->dma_chan); residue = get_dma_residue(devpriv->dma_chan); for (i = 0; i < disable_limit && (residue % 2); ++i) { - int j; enable_dma(devpriv->dma_chan); for (j = 0; j < enable_timeout; ++j) { - int new_residue; udelay(2); new_residue = get_dma_residue(devpriv->dma_chan); if (new_residue != residue) -- cgit From bb905ab1f8731c387c427370737ca60c4ce19ba4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:56 -0700 Subject: staging: comedi: das1800: checkpatch.pl cleanup (void function return) Fix the checkpatch.pl warning: WARNING: void function return statements are not generally useful Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index d89512ef7484..c3561ff8ae2b 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -492,7 +492,6 @@ static void das1800_handle_fifo_half_full(struct comedi_device *dev, numPoints * sizeof(devpriv->ai_buf0[0])); if (cmd->stop_src == TRIG_COUNT) devpriv->count -= numPoints; - return; } static void das1800_handle_fifo_not_empty(struct comedi_device *dev, @@ -517,8 +516,6 @@ static void das1800_handle_fifo_not_empty(struct comedi_device *dev, if (cmd->stop_src == TRIG_COUNT) devpriv->count--; } - - return; } /* Utility function used by das1800_flush_dma() and das1800_handle_dma(). @@ -549,8 +546,6 @@ static void das1800_flush_dma_channel(struct comedi_device *dev, cfc_write_array_to_buffer(s, buffer, num_bytes); if (cmd->stop_src == TRIG_COUNT) devpriv->count -= num_samples; - - return; } /* flushes remaining data from board when external trigger has stopped acquisition @@ -583,8 +578,6 @@ static void das1800_flush_dma(struct comedi_device *dev, /* get any remaining samples in fifo */ das1800_handle_fifo_not_empty(dev, s); - - return; } static void das1800_handle_dma(struct comedi_device *dev, @@ -619,8 +612,6 @@ static void das1800_handle_dma(struct comedi_device *dev, } } } - - return; } static int das1800_cancel(struct comedi_device *dev, struct comedi_subdevice *s) @@ -1060,8 +1051,6 @@ static void setup_dma(struct comedi_device *dev, const struct comedi_cmd *cmd) enable_dma(devpriv->dma1); } release_dma_lock(lock_flags); - - return; } /* programs channel/gain list into card */ @@ -1088,8 +1077,6 @@ static void program_chanlist(struct comedi_device *dev, } outb(n - 1, dev->iobase + DAS1800_QRAM_ADDRESS); /*finish write to QRAM */ spin_unlock_irqrestore(&dev->spinlock, irq_flags); - - return; } /* analog input do_cmd */ -- cgit From f61b57a40d8f2520f9a5f1eb359f9c765fa41102 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:57 -0700 Subject: staging: comedi: dt2815: checkpatch.pl cleanup (missing blank line) Fix checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt2815.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt2815.c b/drivers/staging/comedi/drivers/dt2815.c index b9ac4ed8babb..1f321db740a4 100644 --- a/drivers/staging/comedi/drivers/dt2815.c +++ b/drivers/staging/comedi/drivers/dt2815.c @@ -195,6 +195,7 @@ static int dt2815_attach(struct comedi_device *dev, struct comedi_devconfig *it) status = inb(dev->iobase + DT2815_STATUS); if (status == 4) { unsigned int program; + program = (it->options[4] & 0x3) << 3 | 0x7; outb(program, dev->iobase + DT2815_DATA); dev_dbg(dev->class_dev, "program: 0x%x (@t=%d)\n", -- cgit From 98039f8ac2a138cc687e06e04b42bc57d09702d4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:58 -0700 Subject: staging: comedi: dt9812: checkpatch.pl cleanup (missing blank line) Fix checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt9812.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt9812.c b/drivers/staging/comedi/drivers/dt9812.c index b3aeb6fb2ad0..bd2ca2b371e6 100644 --- a/drivers/staging/comedi/drivers/dt9812.c +++ b/drivers/staging/comedi/drivers/dt9812.c @@ -653,6 +653,7 @@ static int dt9812_find_endpoints(struct comedi_device *dev) for (i = 0; i < host->desc.bNumEndpoints; ++i) { int dir = -1; + ep = &host->endpoint[i].desc; switch (i) { case 0: -- cgit From cd9da6178a755dcadfd0103c6340169d65bd5bd7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:01:59 -0700 Subject: staging: comedi: jr3_pci: checkpatch.pl cleanup (missing blank line) Fix checkpatch.pl warnings: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/jr3_pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/jr3_pci.c b/drivers/staging/comedi/drivers/jr3_pci.c index a8db9d86aadc..7b20e19ecbf7 100644 --- a/drivers/staging/comedi/drivers/jr3_pci.c +++ b/drivers/staging/comedi/drivers/jr3_pci.c @@ -196,6 +196,7 @@ static struct six_axis_t get_min_full_scales(struct jr3_channel __iomem *channel) { struct six_axis_t result; + result.fx = get_s16(&channel->min_full_scale.fx); result.fy = get_s16(&channel->min_full_scale.fy); result.fz = get_s16(&channel->min_full_scale.fz); @@ -209,6 +210,7 @@ static struct six_axis_t get_max_full_scales(struct jr3_channel __iomem *channel) { struct six_axis_t result; + result.fx = get_s16(&channel->max_full_scale.fx); result.fy = get_s16(&channel->max_full_scale.fy); result.fz = get_s16(&channel->max_full_scale.fz); @@ -319,6 +321,8 @@ static int read_idm_word(const u8 *data, size_t size, int *pos, unsigned int *val) { int result = 0; + int value; + if (pos && val) { /* Skip over non hex */ for (; *pos < size && !isxdigit(data[*pos]); (*pos)++) @@ -326,7 +330,6 @@ static int read_idm_word(const u8 *data, size_t size, int *pos, /* Collect value */ *val = 0; for (; *pos < size; (*pos)++) { - int value; value = hex_to_bin(data[*pos]); if (value >= 0) { result = 1; -- cgit From f06d145f8b7bf234d9b6f6e619929c2ff3f267ae Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:00 -0700 Subject: staging: comedi: comedi_test: checkpatch.pl cleanup (break is not useful) Fix the checkpatch.pl warning: WARNING: break is not useful after a goto or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/comedi_test.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/comedi_test.c b/drivers/staging/comedi/drivers/comedi_test.c index 67a09aa6b721..1e2fb91b78fe 100644 --- a/drivers/staging/comedi/drivers/comedi_test.c +++ b/drivers/staging/comedi/drivers/comedi_test.c @@ -146,10 +146,8 @@ static unsigned short fake_waveform(struct comedi_device *dev, switch (channel) { case SAWTOOTH_CHAN: return fake_sawtooth(dev, range, current_time); - break; case SQUARE_CHAN: return fake_squarewave(dev, range, current_time); - break; default: break; } -- cgit From 96afd186f01863ae4a8e39b50055a545610f2c26 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:01 -0700 Subject: staging: comedi: serial2000: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/serial2002.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/serial2002.c b/drivers/staging/comedi/drivers/serial2002.c index 441813ffb175..162cfafcf875 100644 --- a/drivers/staging/comedi/drivers/serial2002.c +++ b/drivers/staging/comedi/drivers/serial2002.c @@ -174,6 +174,7 @@ static int serial2002_tty_read(struct file *f, int timeout) } else { /* Device does not support poll, busy wait */ int retries = 0; + while (1) { retries++; if (retries >= timeout) @@ -311,6 +312,7 @@ static void serial2002_write(struct file *f, struct serial_data data) } else { unsigned char ch[6]; int i = 0; + if (data.value >= (1L << 30)) { ch[i] = 0x80 | ((data.value >> 30) & 0x03); i++; -- cgit From 624e6446da03c985fd53af73cd4546d45d44e908 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:02 -0700 Subject: staging: comedi: serial2000: reduce indent level of serial2002_setup_subdevs() Tidy up this function a bit to reduce the indent level. This also fixex the checkpatch.pl warning: WARNING: else is not generally useful after a break or return Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/serial2002.c | 102 ++++++++++++++-------------- 1 file changed, 50 insertions(+), 52 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/serial2002.c b/drivers/staging/comedi/drivers/serial2002.c index 162cfafcf875..e1fae7475b09 100644 --- a/drivers/staging/comedi/drivers/serial2002.c +++ b/drivers/staging/comedi/drivers/serial2002.c @@ -422,67 +422,65 @@ static int serial2002_setup_subdevs(struct comedi_device *dev) serial2002_tty_setspeed(devpriv->tty, devpriv->speed); serial2002_poll_channel(devpriv->tty, 31); while (1) { - struct serial_data data; + struct serial_data data = serial2002_read(devpriv->tty, 1000); + int kind = S2002_CFG_KIND(data.value); + int channel = S2002_CFG_CHAN(data.value); + int range = S2002_CFG_BASE(data.value); + int cmd = S2002_CFG_CMD(data.value); - data = serial2002_read(devpriv->tty, 1000); if (data.kind != is_channel || data.index != 31 || - S2002_CFG_KIND(data.value) == S2002_CFG_KIND_INVALID) { + kind == S2002_CFG_KIND_INVALID) break; - } else { - int channel = S2002_CFG_CHAN(data.value); - int range = S2002_CFG_BASE(data.value); - switch (S2002_CFG_KIND(data.value)) { - case S2002_CFG_KIND_DIGITAL_IN: - cfg = di_cfg; - break; - case S2002_CFG_KIND_DIGITAL_OUT: - cfg = do_cfg; - break; - case S2002_CFG_KIND_ANALOG_IN: - cfg = ai_cfg; - break; - case S2002_CFG_KIND_ANALOG_OUT: - cfg = ao_cfg; - break; - case S2002_CFG_KIND_ENCODER_IN: - cfg = ai_cfg; - break; - default: - cfg = NULL; - break; - } - if (!cfg) - continue; /* unknown kind, skip it */ + switch (kind) { + case S2002_CFG_KIND_DIGITAL_IN: + cfg = di_cfg; + break; + case S2002_CFG_KIND_DIGITAL_OUT: + cfg = do_cfg; + break; + case S2002_CFG_KIND_ANALOG_IN: + cfg = ai_cfg; + break; + case S2002_CFG_KIND_ANALOG_OUT: + cfg = ao_cfg; + break; + case S2002_CFG_KIND_ENCODER_IN: + cfg = ai_cfg; + break; + default: + cfg = NULL; + break; + } + if (!cfg) + continue; /* unknown kind, skip it */ - cfg[channel].kind = S2002_CFG_KIND(data.value); + cfg[channel].kind = kind; - switch (S2002_CFG_CMD(data.value)) { - case S2002_CFG_CMD_BITS: - cfg[channel].bits = S2002_CFG_BITS(data.value); + switch (cmd) { + case S2002_CFG_CMD_BITS: + cfg[channel].bits = S2002_CFG_BITS(data.value); + break; + case S2002_CFG_CMD_MIN: + case S2002_CFG_CMD_MAX: + switch (S2002_CFG_UNITS(data.value)) { + case 0: + range *= 1000000; break; - case S2002_CFG_CMD_MIN: - case S2002_CFG_CMD_MAX: - switch (S2002_CFG_UNITS(data.value)) { - case 0: - range *= 1000000; - break; - case 1: - range *= 1000; - break; - case 2: - range *= 1; - break; - } - if (S2002_CFG_SIGN(data.value)) - range = -range; - if (S2002_CFG_CMD(data.value) == - S2002_CFG_CMD_MIN) - cfg[channel].min = range; - else - cfg[channel].max = range; + case 1: + range *= 1000; + break; + case 2: + range *= 1; break; } + if (S2002_CFG_SIGN(data.value)) + range = -range; + if (cmd == S2002_CFG_CMD_MIN) + cfg[channel].min = range; + else + cfg[channel].max = range; + break; } } -- cgit From a95b7ccf594feddbd47500d1d713ff8d883edcb7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:03 -0700 Subject: staging: comedi: ni_at_a2150: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_at_a2150.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index a862dc33444b..465c729ee685 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -690,6 +690,7 @@ static int a2150_set_chanlist(struct comedi_device *dev, static int a2150_probe(struct comedi_device *dev) { int status = inw(dev->iobase + STATUS_REG); + return ID_BITS(status); } -- cgit From c1f946a24042fceae52a879166e7c314a8a3415e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:04 -0700 Subject: staging: comedi: pcmuio: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcmuio.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcmuio.c b/drivers/staging/comedi/drivers/pcmuio.c index 62914bb342d2..1bca3fba0950 100644 --- a/drivers/staging/comedi/drivers/pcmuio.c +++ b/drivers/staging/comedi/drivers/pcmuio.c @@ -333,6 +333,7 @@ static void pcmuio_handle_intr_subdev(struct comedi_device *dev, for (i = 0; i < cmd->chanlist_len; i++) { unsigned int chan = CR_CHAN(cmd->chanlist[i]); + if (triggered & (1 << chan)) val |= (1 << i); } -- cgit From 385aea358fcf1dd1b2460c2e6d55ef1d7b4a18b6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:05 -0700 Subject: staging: comedi: multiq3: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/multiq3.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/multiq3.c b/drivers/staging/comedi/drivers/multiq3.c index b74b9e9bfd4a..60bda9c47cf1 100644 --- a/drivers/staging/comedi/drivers/multiq3.c +++ b/drivers/staging/comedi/drivers/multiq3.c @@ -189,12 +189,12 @@ static int multiq3_encoder_insn_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - int n; int chan = CR_CHAN(insn->chanspec); int control = MULTIQ3_CONTROL_MUST | MULTIQ3_AD_MUX_EN | (chan << 3); + int value; + int n; for (n = 0; n < insn->n; n++) { - int value; outw(control, dev->iobase + MULTIQ3_CONTROL); outb(MULTIQ3_BP_RESET, dev->iobase + MULTIQ3_ENC_CONTROL); outb(MULTIQ3_TRSFRCNTR_OL, dev->iobase + MULTIQ3_ENC_CONTROL); -- cgit From c4c2c67a7af2a25545e060c8d386d1f0d9f06e15 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:06 -0700 Subject: staging: comedi: ni_660x: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 72805e9a2798..7755f119744d 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -161,6 +161,7 @@ enum ni_660x_register { static inline unsigned IOConfigReg(unsigned pfi_channel) { unsigned reg = NI660X_IO_CFG_0_1 + pfi_channel / 2; + BUG_ON(reg > NI660X_IO_CFG_38_39); return reg; } -- cgit From fd28703c76977d7a5937d56865dc73ab49b8b405 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:07 -0700 Subject: staging: comedi: ni_pcidio: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcidio.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 4d6b2ed9ac7b..ac800daa291a 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -711,6 +711,7 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { int retval = setup_mite_dma(dev, s); + if (retval) return retval; } @@ -853,6 +854,7 @@ static int pci_6534_load_fpga(struct comedi_device *dev, } for (j = 0; j + 1 < data_len;) { unsigned int value = data[j++]; + value |= data[j++] << 8; writew(value, devpriv->mite->daq_io_addr + Firmware_Data_Register); -- cgit From f740197959bb7faab0ed1782b0b203d5b5aa8316 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:08 -0700 Subject: staging: comedi: ni_mio_common: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warnings: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index b630c66dda4b..af5ee50ef80d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -1115,6 +1115,7 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) { static const int timeout = 10000; int i; + for (i = 0; i < timeout; i++) { unsigned short b_status; @@ -1810,6 +1811,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) AI_Output_Control_Register); } else { unsigned ai_output_control_bits; + ni_stc_writew(dev, AI_SHIFTIN_Pulse_Width | AI_SOC_Polarity | @@ -1904,6 +1906,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, if ((list[0] & CR_ALT_SOURCE)) { unsigned bypass_bits; + chan = CR_CHAN(list[0]); range = CR_RANGE(list[0]); range_code = ni_gainlkup[board->gainlkup][range]; @@ -1927,6 +1930,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, } for (i = 0; i < n_chan; i++) { unsigned config_bits = 0; + chan = CR_CHAN(list[i]); aref = CR_AREF(list[i]); range = CR_RANGE(list[i]); @@ -2703,6 +2707,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) #ifdef PCIDMA { int retval = ni_ai_setup_MITE_dma(dev); + if (retval) return retval; } @@ -2825,6 +2830,7 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, } for (i = 0; i < n_chans; i++) { const struct comedi_krange *krange; + chan = CR_CHAN(chanspec[i]); range = CR_RANGE(chanspec[i]); krange = s->range_table->range + range; @@ -3249,6 +3255,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) AO_Output_Control_Register); } else { unsigned bits; + devpriv->ao_mode1 &= ~AO_Multiple_Channels; bits = AO_UPDATE_Output_Select(AO_Update_Output_High_Z); if (devpriv->is_m_series || devpriv->is_6xxx) { @@ -3426,6 +3433,7 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->is_6xxx) { unsigned immediate_bits = 0; unsigned i; + for (i = 0; i < s->n_chan; ++i) immediate_bits |= 1 << i; ni_ao_win_outw(dev, immediate_bits, AO_Immediate_671x); @@ -3928,6 +3936,7 @@ static void init_ao_67xx(struct comedi_device *dev, struct comedi_subdevice *s) static unsigned ni_gpct_to_stc_register(enum ni_gpct_register reg) { unsigned stc_register; + switch (reg) { case NITIO_G0_AUTO_INC: stc_register = G_Autoincrement_Register(0); @@ -4882,6 +4891,7 @@ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, static const unsigned target_picosec = 12500; static const unsigned fudge_factor_80_to_20Mhz = 4; int best_period_picosec = 0; + for (div = 1; div <= max_div; ++div) { for (mult = 1; mult <= max_mult; ++mult) { unsigned new_period_ps = @@ -4961,6 +4971,7 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, { unsigned rtsi_channel; static const unsigned max_rtsi_channel = 7; + for (rtsi_channel = 0; rtsi_channel <= max_rtsi_channel; ++rtsi_channel) { if (source == @@ -5758,6 +5769,7 @@ static int ni_E_init(struct comedi_device *dev, ni_writeb(dev, 0, Magic_611x); } else if (devpriv->is_m_series) { int channel; + for (channel = 0; channel < board->n_aochan; ++channel) { ni_writeb(dev, 0xf, M_Offset_AO_Waveform_Order(channel)); -- cgit From 9a7c5693cafdec31c836cf35bba0a1bfde0f50bb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:09 -0700 Subject: staging: comedi: mite: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warnings: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index 52d154886c4f..4658dfdf1ca8 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -90,6 +90,7 @@ static unsigned mite_fifo_size(struct mite_struct *mite, unsigned channel) unsigned fcr_bits = readl(mite->mite_io_addr + MITE_FCR(channel)); unsigned empty_count = (fcr_bits >> 16) & 0xff; unsigned full_count = fcr_bits & 0xff; + return empty_count + full_count; } @@ -444,12 +445,14 @@ EXPORT_SYMBOL_GPL(mite_prep_dma); static u32 mite_device_bytes_transferred(struct mite_channel *mite_chan) { struct mite_struct *mite = mite_chan->mite; + return readl(mite->mite_io_addr + MITE_DAR(mite_chan->channel)); } u32 mite_bytes_in_transit(struct mite_channel *mite_chan) { struct mite_struct *mite = mite_chan->mite; + return readl(mite->mite_io_addr + MITE_FCR(mite_chan->channel)) & 0x000000FF; } -- cgit From 4318d1d3cd285a4eefeb65a29b62c0d715d5f114 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:02:10 -0700 Subject: staging: comedi: ni_tio: checkpatch.pl cleanup (missing blank line) Fix the checkpatch.pl warnings: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 1a5bb2353de3..0ac9fbf170f5 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -463,6 +463,7 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) if (ni_tio_counting_mode_registers_present(counter_dev)) { unsigned counting_mode_bits = 0; + counting_mode_bits |= (mode >> NI_GPCT_COUNTING_MODE_SHIFT) & Gi_Counting_Mode_Mask; -- cgit From 11828ce9aa0704cec8b183a70ab8a992b2e1b70b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:43 -0700 Subject: staging: comedi: adv_pci_dio: checkpatch.pl cleanup (missing blank line) Fix this checkpatch.pl warning: WARNING: Missing a blank line after declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci_dio.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index 2d966a87f2e8..08f42334b5c6 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -616,6 +616,7 @@ static int pci1760_mbxrequest(struct comedi_device *dev, } if (inb(dev->iobase + IMB2) == omb[2]) { int retval; + retval = pci1760_clear_imb2(dev); if (retval < 0) return retval; -- cgit From de33276b5911ec929f40a49a52b20ddf2d55dfe8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:44 -0700 Subject: staging: comedi: adv_pci_dio: checkpatch.pl cleanup (fallthrough) Fix these checkpatch.pl warnings: WARNING: Possible switch case/default not preceeded by break or fallthrough comment Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci_dio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index 08f42334b5c6..f3742cc47b53 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -827,7 +827,7 @@ static int pci_dio_reset(struct comedi_device *dev) outb(0, dev->iobase + PCI1730_DO + 1); outb(0, dev->iobase + PCI1730_IDO); outb(0, dev->iobase + PCI1730_IDO + 1); - /* NO break there! */ + /* fallthrough */ case TYPE_PCI1733: /* disable interrupts */ outb(0, dev->iobase + PCI1730_3_INT_EN); @@ -887,7 +887,7 @@ static int pci_dio_reset(struct comedi_device *dev) outb(0x80, dev->iobase + PCI1753E_ICR1); outb(0x80, dev->iobase + PCI1753E_ICR2); outb(0x80, dev->iobase + PCI1753E_ICR3); - /* NO break there! */ + /* fallthrough */ case TYPE_PCI1753: outb(0x88, dev->iobase + PCI1753_ICR0); /* disable & clear * interrupts */ -- cgit From 931a9c732520873954145a2a5440d2ae9decd988 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:45 -0700 Subject: staging: comedi: amcc_s5933.h: checkpatch.pl cleanup (space prohibited) Fix this checkpatch.pl warning: WARNING: space prohibited between function name and open parenthesis '(' Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amcc_s5933.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amcc_s5933.h b/drivers/staging/comedi/drivers/amcc_s5933.h index 2ba736444610..96b71f9400da 100644 --- a/drivers/staging/comedi/drivers/amcc_s5933.h +++ b/drivers/staging/comedi/drivers/amcc_s5933.h @@ -41,7 +41,7 @@ #define AMCC_OP_REG_MCSR_NVCMD (AMCC_OP_REG_MCSR + 3) /* Command in byte 3 */ #define AMCC_FIFO_DEPTH_DWORD 8 -#define AMCC_FIFO_DEPTH_BYTES (8 * sizeof (u32)) +#define AMCC_FIFO_DEPTH_BYTES (8 * sizeof(u32)) /****************************************************************************/ /* AMCC - PCI Interrupt Control/Status Register */ -- cgit From 0f99981a6da832cf3d2ddbd2ae7c7f51e8f6b1ab Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:46 -0700 Subject: staging: comedi: cb_pcidas64: remove 'volatile' from private data As indicated by checkpatch.pl, "WARNING: Use of volatile is usually wrong: ...". The variables in the private data that are marked volatile don't need to be. Remove the volatile. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 046336f059aa..781412e11da9 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1069,7 +1069,7 @@ struct pcidas64_private { uint32_t local0_iobase; uint32_t local1_iobase; /* number of analog input samples remaining */ - volatile unsigned int ai_count; + unsigned int ai_count; /* dma buffers for analog input */ uint16_t *ai_buffer[MAX_AI_DMA_RING_COUNT]; /* physical addresses of ai dma buffers */ @@ -1081,7 +1081,7 @@ struct pcidas64_private { dma_addr_t ai_dma_desc_bus_addr; /* index of the ai dma descriptor/buffer * that is currently being used */ - volatile unsigned int ai_dma_index; + unsigned int ai_dma_index; /* dma buffers for analog output */ uint16_t *ao_buffer[AO_DMA_RING_COUNT]; /* physical addresses of ao dma buffers */ @@ -1089,35 +1089,35 @@ struct pcidas64_private { struct plx_dma_desc *ao_dma_desc; dma_addr_t ao_dma_desc_bus_addr; /* keeps track of buffer where the next ao sample should go */ - volatile unsigned int ao_dma_index; + unsigned int ao_dma_index; /* number of analog output samples remaining */ - volatile unsigned long ao_count; + unsigned long ao_count; /* remember what the analog outputs are set to, to allow readback */ - volatile unsigned int ao_value[2]; + unsigned int ao_value[2]; unsigned int hw_revision; /* stc chip hardware revision number */ /* last bits sent to INTR_ENABLE_REG register */ - volatile unsigned int intr_enable_bits; + unsigned int intr_enable_bits; /* last bits sent to ADC_CONTROL1_REG register */ - volatile uint16_t adc_control1_bits; + uint16_t adc_control1_bits; /* last bits sent to FIFO_SIZE_REG register */ - volatile uint16_t fifo_size_bits; + uint16_t fifo_size_bits; /* last bits sent to HW_CONFIG_REG register */ - volatile uint16_t hw_config_bits; - volatile uint16_t dac_control1_bits; + uint16_t hw_config_bits; + uint16_t dac_control1_bits; /* last bits written to plx9080 control register */ - volatile uint32_t plx_control_bits; + uint32_t plx_control_bits; /* last bits written to plx interrupt control and status register */ - volatile uint32_t plx_intcsr_bits; + uint32_t plx_intcsr_bits; /* index of calibration source readable through ai ch0 */ - volatile int calibration_source; + int calibration_source; /* bits written to i2c calibration/range register */ - volatile uint8_t i2c_cal_range_bits; + uint8_t i2c_cal_range_bits; /* configure digital triggers to trigger on falling edge */ - volatile unsigned int ext_trig_falling; + unsigned int ext_trig_falling; /* states of various devices stored to enable read-back */ unsigned int ad8402_state[2]; unsigned int caldac_state[8]; - volatile short ai_cmd_running; + short ai_cmd_running; unsigned int ai_fifo_segment_length; struct ext_clock_info ext_clock; unsigned short ao_bounce_buffer[DAC_FIFO_SIZE]; -- cgit From 350a327641f891fde438ba7e1591f8a858e524f6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:47 -0700 Subject: staging: comedi: cb_pcidas64: remove 'volatile' from set_dac_range_bits() param As indicated by checkpatch.pl, "WARNING: Use of volatile is usually wrong: ...". The 'bits' parameter to this function does not need to be volatile. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 781412e11da9..0fd73e7f34c3 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1180,7 +1180,7 @@ static unsigned int hw_revision(const struct comedi_device *dev, } static void set_dac_range_bits(struct comedi_device *dev, - volatile uint16_t *bits, unsigned int channel, + uint16_t *bits, unsigned int channel, unsigned int range) { const struct pcidas64_board *thisboard = comedi_board(dev); -- cgit From 6691844c6f9e788d90fa1253b2ab5a5952fb9fe4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:48 -0700 Subject: staging: comedi: daqboard2000: checkpatch.pl cleanup (space before tab) Fix these checkpatch.pl warnings: WARNING: please, no space before tabs Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/daqboard2000.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/daqboard2000.c b/drivers/staging/comedi/drivers/daqboard2000.c index b63b8181e6e6..ceab88b62a20 100644 --- a/drivers/staging/comedi/drivers/daqboard2000.c +++ b/drivers/staging/comedi/drivers/daqboard2000.c @@ -113,8 +113,8 @@ Configuration options: not applicable, uses PCI auto config #define DAQBOARD2000_FIRMWARE "daqboard2000_firmware.bin" -#define DAQBOARD2000_SUBSYSTEM_IDS2 0x0002 /* Daqboard/2000 - 2 Dacs */ -#define DAQBOARD2000_SUBSYSTEM_IDS4 0x0004 /* Daqboard/2000 - 4 Dacs */ +#define DAQBOARD2000_SUBSYSTEM_IDS2 0x0002 /* Daqboard/2000 - 2 Dacs */ +#define DAQBOARD2000_SUBSYSTEM_IDS4 0x0004 /* Daqboard/2000 - 4 Dacs */ /* Initialization bits for the Serial EEPROM Control Register */ #define DAQBOARD2000_SECRProgPinHi 0x8001767e @@ -128,8 +128,8 @@ Configuration options: not applicable, uses PCI auto config #define DAQBOARD2000_EEPROM_PRESENT 0x10000000 /* CPLD status bits */ -#define DAQBOARD2000_CPLD_INIT 0x0002 -#define DAQBOARD2000_CPLD_DONE 0x0004 +#define DAQBOARD2000_CPLD_INIT 0x0002 +#define DAQBOARD2000_CPLD_DONE 0x0004 static const struct comedi_lrange range_daqboard2000_ai = { 13, { -- cgit From e3ebc55f5e55d9298b70c7752bb295ed6d0f6d2a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:49 -0700 Subject: staging: comedi: das16m1: remove 'volatile' from private data As indicated by checkpatch.pl, "WARNING: Use of volatile is usually wrong: ...". The variables in the private data that are marked volatile don't need to be. Remove the volatile. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das16m1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c index c252ad22b1b4..40365b024b9e 100644 --- a/drivers/staging/comedi/drivers/das16m1.c +++ b/drivers/staging/comedi/drivers/das16m1.c @@ -126,7 +126,7 @@ static const struct comedi_lrange range_das16m1 = { struct das16m1_private_struct { unsigned int control_state; - volatile unsigned int adc_count; /* number of samples completed */ + unsigned int adc_count; /* number of samples completed */ /* initial value in lower half of hardware conversion counter, * needed to keep track of whether new count has been loaded into * counter yet (loaded by first sample conversion) */ -- cgit From 04a4da61a14f4652c28d62216359347851f67523 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:50 -0700 Subject: staging: comedi: das1800: remove 'volatile' from private data As indicated by checkpatch.pl, "WARNING: Use of volatile is usually wrong: ...". The variables in the private data that are marked volatile don't need to be. Remove the volatile. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index c3561ff8ae2b..e9c24d050a26 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -421,7 +421,7 @@ static const struct das1800_board das1800_boards[] = { }; struct das1800_private { - volatile unsigned int count; /* number of data points left to be taken */ + unsigned int count; /* number of data points left to be taken */ unsigned int divisor1; /* value to load into board's counter 1 for timed conversions */ unsigned int divisor2; /* value to load into board's counter 2 for timed conversions */ int irq_dma_bits; /* bits for control register b */ @@ -430,7 +430,7 @@ struct das1800_private { int dma_bits; unsigned int dma0; /* dma channels used */ unsigned int dma1; - volatile unsigned int dma_current; /* dma channel currently in use */ + unsigned int dma_current; /* dma channel currently in use */ uint16_t *ai_buf0; /* pointers to dma buffers */ uint16_t *ai_buf1; uint16_t *dma_current_buf; /* pointer to dma buffer currently being used */ -- cgit From e685d726c6e923c60ce326332eecacf59826a548 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:51 -0700 Subject: staging: comedi: me4000: checkpatch.pl cleanup (complex macro) Fix the checkpatch.pl error: ERROR: Macros with complex values should be enclosed in parenthesis This define is not used in the driver. Just remove it. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/me4000.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/me4000.c b/drivers/staging/comedi/drivers/me4000.c index 25ce2f78db81..9a5c535451a1 100644 --- a/drivers/staging/comedi/drivers/me4000.c +++ b/drivers/staging/comedi/drivers/me4000.c @@ -170,7 +170,6 @@ broken. #define ME4000_AI_MIN_TICKS 66 #define ME4000_AI_MIN_SAMPLE_TIME 2000 -#define ME4000_AI_BASE_FREQUENCY (unsigned int) 33E6 #define ME4000_AI_CHANNEL_LIST_COUNT 1024 -- cgit From 205781b74639890e6b0654e7b96dc20aeef9b78f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:52 -0700 Subject: staging: comedi: serial2000: checkpatch.pl cleanup (kmalloc_array) Fix the checkpatch.pl warning: WARNING: Prefer kmalloc_array over kmalloc with multiply Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/serial2002.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/serial2002.c b/drivers/staging/comedi/drivers/serial2002.c index e1fae7475b09..167f82418cb4 100644 --- a/drivers/staging/comedi/drivers/serial2002.c +++ b/drivers/staging/comedi/drivers/serial2002.c @@ -361,7 +361,8 @@ static int serial2002_setup_subdevice(struct comedi_subdevice *s, s->n_chan = chan; s->maxdata = 0; kfree(s->maxdata_list); - maxdata_list = kmalloc(sizeof(unsigned int) * s->n_chan, GFP_KERNEL); + maxdata_list = kmalloc_array(s->n_chan, sizeof(unsigned int), + GFP_KERNEL); if (!maxdata_list) return -ENOMEM; s->maxdata_list = maxdata_list; @@ -371,9 +372,8 @@ static int serial2002_setup_subdevice(struct comedi_subdevice *s, if (kind == 1 || kind == 2) { s->range_table = &range_digital; } else if (range) { - range_table_list = - kmalloc(sizeof(struct serial2002_range_table_t) * - s->n_chan, GFP_KERNEL); + range_table_list = kmalloc_array(s->n_chan, sizeof(*range), + GFP_KERNEL); if (!range_table_list) return -ENOMEM; s->range_table_list = range_table_list; -- cgit From f14b622633b3d3203d57cdd6f5424f0bfb621952 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:53 -0700 Subject: staging: comedi: pcl724: checkpatch.pl cleanup (foo*/foo *) Fix the checkpatch.pl error: ERROR: "(foo*)" should be "(foo *)" Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl730.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl730.c b/drivers/staging/comedi/drivers/pcl730.c index 4eef4b46cf6b..bdce24c42940 100644 --- a/drivers/staging/comedi/drivers/pcl730.c +++ b/drivers/staging/comedi/drivers/pcl730.c @@ -310,7 +310,7 @@ static int pcl730_attach(struct comedi_device *dev, s->maxdata = 1; s->range_table = &range_digital; s->insn_bits = pcl730_di_insn_bits; - s->private = board->is_ir104 ? (void*)4 : + s->private = board->is_ir104 ? (void *)4 : board->is_acl7225b ? (void *)2 : board->is_pcl725 ? (void *)1 : (void *)0; } -- cgit From c8c8ff887cafb03c8660f81671f11c1d62dcc857 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:54 -0700 Subject: staging: comedi: ni_660x: checkpatch.pl cleanup (trailing whitespace) Fix the checkpatch.pl error: ERROR: trailing whitespace Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 7755f119744d..3e01978f822b 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -28,7 +28,7 @@ * * Encoders work. PulseGeneration (both single pulse and pulse train) * works. Buffered commands work for input but not output. - * + * * References: * DAQ 660x Register-Level Programmer Manual (NI 370505A-01) * DAQ 6601/6602 User Manual (NI 322137B-01) -- cgit From 56e9bef541aef1a15f9c84310641e6fe100a28e4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:55 -0700 Subject: staging: comedi: ni_660x: checkpatch.pl cleanup (space prohibited) Fix the checkpatch.pl warning: WARNING: space prohibited before semicolon Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 3e01978f822b..673fa52c5cf3 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -1122,9 +1122,8 @@ static int ni_660x_auto_attach(struct comedi_device *dev, s = &dev->subdevices[NI_660X_GPCT_SUBDEV(i)]; if (i < ni_660x_num_counters(dev)) { s->type = COMEDI_SUBD_COUNTER; - s->subdev_flags = - SDF_READABLE | SDF_WRITABLE | SDF_LSAMPL | - SDF_CMD_READ /* | SDF_CMD_WRITE */ ; + s->subdev_flags = SDF_READABLE | SDF_WRITABLE | + SDF_LSAMPL | SDF_CMD_READ; s->n_chan = 3; s->maxdata = 0xffffffff; s->insn_read = ni_tio_insn_read; -- cgit From a62669775f4710d5dc72a1ef1b9ea6fe5ce4a73d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:56 -0700 Subject: staging: comedi: ni_mio_common: checkpatch.pl cleanup (braces not necessary) Fix the checkpatch.pl warnings: WARNING: braces {} are not necessary for single statement blocks WARNING: braces {} are not necessary for any arm of this statement Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index af5ee50ef80d..f00290a93412 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -970,9 +970,8 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) break; udelay(1); } - if (i == timeout) { + if (i == timeout) comedi_error(dev, "FIFO flush timeout."); - } } else { ni_stc_writew(dev, 1, ADC_FIFO_Clear); if (devpriv->is_625x) { @@ -2054,11 +2053,10 @@ static void ni_load_channelgain_list(struct comedi_device *dev, } for (i = 0; i < n_chan; i++) { - if (!devpriv->is_6143 && (list[i] & CR_ALT_SOURCE)) { + if (!devpriv->is_6143 && (list[i] & CR_ALT_SOURCE)) chan = devpriv->ai_calib_source; - } else { + else chan = CR_CHAN(list[i]); - } aref = CR_AREF(list[i]); range = CR_RANGE(list[i]); dither = ((list[i] & CR_ALT_FILTER) != 0); -- cgit From 2b28a540dec5cb39499f79b93787c1655cc650e4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:57 -0700 Subject: staging: comedi: ni_tio: checkpatch.pl cleanup (braces not necessary) Fix the checkpatch.pl warnings: WARNING: braces {} are not necessary for single statement blocks Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 0ac9fbf170f5..694bd5142cc5 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1271,17 +1271,15 @@ static unsigned ni_660x_first_gate_to_generic_gate_source(unsigned return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (ni_660x_gate_select == NI_660x_RTSI_Gate_Select(i)) { + if (ni_660x_gate_select == NI_660x_RTSI_Gate_Select(i)) return NI_GPCT_RTSI_GATE_SELECT(i); - } } if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_gate_pin; ++i) { if (ni_660x_gate_select == - NI_660x_Gate_Pin_Gate_Select(i)) { + NI_660x_Gate_Pin_Gate_Select(i)) return NI_GPCT_GATE_PIN_GATE_SELECT(i); - } } if (i <= ni_660x_max_gate_pin) break; -- cgit From 736221ef1f414d1534ccbeb3ce5df187981ebb62 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 16 Jul 2014 11:22:58 -0700 Subject: staging: comedi: ni_labpc.h: checkpatch.pl cleanup (unnecessary space) Fix the checkpatch.pl warning: WARNING: Unnecessary space before function pointer arguments Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.h b/drivers/staging/comedi/drivers/ni_labpc.h index 0fb431137c76..b159b4ba4877 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.h +++ b/drivers/staging/comedi/drivers/ni_labpc.h @@ -79,8 +79,8 @@ struct labpc_private { * function pointers so we can use inb/outb or readb/writeb as * appropriate */ - unsigned int (*read_byte) (unsigned long address); - void (*write_byte) (unsigned int byte, unsigned long address); + unsigned int (*read_byte)(unsigned long address); + void (*write_byte)(unsigned int byte, unsigned long address); }; int labpc_common_attach(struct comedi_device *dev, -- cgit From 84590b1aa93824f1de9dc28f8e294be5d29329ba Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Thu, 17 Jul 2014 17:53:19 +0300 Subject: staging: xillybus: Fix if-else coding style errors According to Documentation/CodingStyle, when one branch of an if-else statement has multiple statements, both branches should be enclosed in curly brackets. Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus_core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index 2d59734744e5..0214009f7513 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -158,10 +158,10 @@ irqreturn_t xillybus_isr(int irq, void *data) ep->msg_counter, i/2); - if (++ep->failed_messages > 10) + if (++ep->failed_messages > 10) { dev_err(ep->dev, "Lost sync with interrupt messages. Stopping.\n"); - else { + } else { ep->ephw->hw_sync_sgl_for_device( ep, ep->msgbuf_dma_addr, @@ -532,8 +532,9 @@ static int xilly_setupchannels(struct xilly_endpoint *ep, if (!buffers) goto memfail; - } else + } else { bytebufsize = bufsize << 2; + } if (!is_writebuf) { channel->num_rd_buffers = bufnum; -- cgit From 44909e658ed3dccf6f86905b4521e9439d5955ab Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Thu, 17 Jul 2014 17:53:20 +0300 Subject: staging: xillybus: Removed outdated part in README The dedicated memory management routines have been replaced with devres API, so the related part is removed from the doc. Signed-off-by: Eli Billauer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/README | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/xillybus/README b/drivers/staging/xillybus/README index d2d848ae3169..81d111b4dc28 100644 --- a/drivers/staging/xillybus/README +++ b/drivers/staging/xillybus/README @@ -26,7 +26,6 @@ Contents: -- Data granularity -- Probing -- Buffer allocation - -- Memory management -- The "nonempty" message (supporting poll) @@ -365,28 +364,6 @@ Or, if there already is a partially used page at hand, the buffer is packed into that page. It can be shown that all pages requested from the kernel (except possibly for the last) are 100% utilized this way. -Memory management ------------------ - -The tricky part about the buffer allocation procedure described above is -freeing and unmapping the buffers, in particular if something goes wrong in -the middle, and the allocations need to be rolled back. The three-stage -probing procedure makes this even more crucial, since temporary buffers are -set up and mapped in the first of its two stages. - -To keep the code clean from complicated and bug-prone memory release routines, -there are special routines for allocating memory. For example, instead of -calling kzalloc, there's - -void *xilly_malloc(struct xilly_cleanup *mem, size_t size) - -which effectively allocates a zeroed buffer of size "size". Its first -argument, "mem", is where this allocation is enlisted, so that it's released -when xillybus_do_cleanup() is called with the same "mem" structure. - -Two other functions enlist allocations in this structure: xilly_pagealloc() -for page allocations and xilly_map_single_*() for DMA mapping. - The "nonempty" message (supporting poll) --------------------------------------- -- cgit From ee225f0f19b88909b53c8d612e7195379b0553e7 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:45 +0200 Subject: staging: rtl8723au: Eliminate Set_MSR() wrapper call Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 2 +- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 18 +++++++++--------- drivers/staging/rtl8723au/core/rtw_sreset.c | 2 +- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 5 ----- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 2 -- 5 files changed, 11 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index ab9a66ecb217..1ee8747b129f 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -688,7 +688,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) } /* set MSR to AP_Mode */ - Set_MSR23a(padapter, _HW_STATE_AP_); + rtl8723a_set_media_status(padapter, _HW_STATE_AP_); /* Set BSSID REG */ hw_var_set_bssid(padapter, pnetwork->MacAddress); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 3655ee5e8347..44f3cd930cd1 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -4102,7 +4102,7 @@ static void rtw_site_survey(struct rtw_adapter *padapter) /* val8 = 0; */ /* config MSR */ - Set_MSR23a(padapter, (pmlmeinfo->state & 0x3)); + rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3); /* restore RX GAIN */ rtl8723a_set_initial_gain(padapter, 0xff); @@ -4339,7 +4339,7 @@ static void start_create_ibss(struct rtw_adapter* padapter) /* set msr to WIFI_FW_ADHOC_STATE */ pmlmeinfo->state = WIFI_FW_ADHOC_STATE; - Set_MSR23a(padapter, (pmlmeinfo->state & 0x3)); + rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3); /* issue beacon */ if (send_beacon23a(padapter) == _FAIL) @@ -4387,7 +4387,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) /* switch channel */ set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); - Set_MSR23a(padapter, WIFI_FW_STATION_STATE); + rtl8723a_set_media_status(padapter, WIFI_FW_STATION_STATE); val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) ? 0xcc: 0xcf; @@ -4405,7 +4405,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) msecs_to_jiffies((REAUTH_TO * REAUTH_LIMIT) + (REASSOC_TO*REASSOC_LIMIT) + beacon_timeout)); pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE; } else if (caps & WLAN_CAPABILITY_IBSS) { /* adhoc client */ - Set_MSR23a(padapter, WIFI_FW_ADHOC_STATE); + rtl8723a_set_media_status(padapter, WIFI_FW_ADHOC_STATE); rtl8723a_set_sec_cfg(padapter, 0xcf); @@ -5185,7 +5185,7 @@ void mlmeext_sta_del_event_callback23a(struct rtw_adapter *padapter) pmlmeinfo->state = WIFI_FW_NULL_STATE; /* set MSR to no link state -> infra. mode */ - Set_MSR23a(padapter, _HW_STATE_STATION_); + rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); del_timer_sync(&pmlmeext->link_timer); } @@ -5584,8 +5584,8 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) del_timer_sync(&pmlmeext->link_timer); /* set MSR to nolink -> infra. mode */ - /* Set_MSR23a(padapter, _HW_STATE_NOLINK_); */ - Set_MSR23a(padapter, _HW_STATE_STATION_); + /* rtl8723a_set_media_status(padapter, _HW_STATE_NOLINK_); */ + rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); hw_var_set_mlme_disconnect(padapter); } @@ -5704,7 +5704,7 @@ int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) rtl8723a_set_bcn_func(padapter, 0); /* Stop BCN */ /* set MSR to no link state -> infra. mode */ - Set_MSR23a(padapter, _HW_STATE_STATION_); + rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); pmlmeinfo->state = WIFI_FW_NULL_STATE; @@ -5865,7 +5865,7 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) rtl8723a_set_initial_gain(padapter, initialgain); /* set MSR to no link state */ - Set_MSR23a(padapter, _HW_STATE_NOLINK_); + rtl8723a_set_media_status(padapter, _HW_STATE_NOLINK_); rtl8723a_mlme_sitesurvey(padapter, 1); diff --git a/drivers/staging/rtl8723au/core/rtw_sreset.c b/drivers/staging/rtl8723au/core/rtw_sreset.c index c152aefb59ea..9a79e11f7ffc 100644 --- a/drivers/staging/rtl8723au/core/rtw_sreset.c +++ b/drivers/staging/rtl8723au/core/rtw_sreset.c @@ -103,7 +103,7 @@ static void sreset_restore_network_station(struct rtw_adapter *padapter) hw_var_set_bssid(padapter, pmlmeinfo->network.MacAddress); hw_var_set_mlme_join(padapter, 0); - Set_MSR23a(padapter, (pmlmeinfo->state & 0x3)); + rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3); mlmeext_joinbss_event_callback23a(padapter, 1); /* restore Sequence No. */ diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 25dae51fa979..59cf5f14b658 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -293,11 +293,6 @@ void Update23aTblForSoftAP(u8 *bssrateset, u32 bssratelen) } } -void Set_MSR23a(struct rtw_adapter *padapter, u8 type) -{ - rtl8723a_set_media_status(padapter, type); -} - inline u8 rtw_get_oper_ch23a(struct rtw_adapter *adapter) { return adapter_to_dvobj(adapter)->oper_channel; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index 7fd249f573b5..87803e096d00 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -471,8 +471,6 @@ void get_rate_set23a(struct rtw_adapter *padapter, unsigned char *pbssrate, void UpdateBrateTbl23a(struct rtw_adapter *padapter,u8 *mBratesOS); void Update23aTblForSoftAP(u8 *bssrateset, u32 bssratelen); -void Set_MSR23a(struct rtw_adapter *padapter, u8 type); - u8 rtw_get_oper_ch23a(struct rtw_adapter *adapter); void rtw_set_oper_ch23a(struct rtw_adapter *adapter, u8 ch); u8 rtw_get_oper_bw23a(struct rtw_adapter *adapter); -- cgit From 6ec262733ecbb4578c2bd7d9d586f40fd587f636 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:46 +0200 Subject: staging: rtl8723au: Reduce number of duplicate defines for link state We use the MSR bits to define link state anyway, so no point having an additional two sets of defines for the same thing. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 8 +- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 112 +++++++++++----------- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 5 +- drivers/staging/rtl8723au/hal/hal_com.c | 4 +- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 4 +- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 14 +-- drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 10 -- 7 files changed, 72 insertions(+), 85 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 1ee8747b129f..14c8d4eef630 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -52,7 +52,7 @@ void free_mlme_ap_info23a(struct rtw_adapter *padapter) rtw_sta_flush23a(padapter); - pmlmeinfo->state = _HW_STATE_NOLINK_; + pmlmeinfo->state = MSR_NOLINK; /* free_assoc_sta_resources */ rtw_free_all_stainfo23a(padapter); @@ -688,7 +688,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) } /* set MSR to AP_Mode */ - rtl8723a_set_media_status(padapter, _HW_STATE_AP_); + rtl8723a_set_media_status(padapter, MSR_AP); /* Set BSSID REG */ hw_var_set_bssid(padapter, pnetwork->MacAddress); @@ -1703,7 +1703,7 @@ int rtw_ap_inform_ch_switch23a (struct rtw_adapter *padapter, u8 new_ch, u8 ch_o struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) != MSR_AP) return ret; DBG_8723A("%s(%s): with ch:%u, offset:%u\n", __func__, @@ -1740,7 +1740,7 @@ int rtw_sta_flush23a(struct rtw_adapter *padapter) DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name); - if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) != MSR_AP) return ret; spin_lock_bh(&pstapriv->asoc_list_lock); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 44f3cd930cd1..18e4d24878bb 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -393,7 +393,7 @@ static void init_mlme_ext_priv23a_value(struct rtw_adapter* padapter) pmlmeext->sitesurvey_res.bss_cnt = 0; pmlmeext->scan_abort = false; - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; pmlmeinfo->reauth_count = 0; pmlmeinfo->reassoc_count = 0; pmlmeinfo->link_count = 0; @@ -849,7 +849,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) return _SUCCESS; } - if (((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) && + if (((pmlmeinfo->state & 0x03) == MSR_AP) && (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) { psta = rtw_get_stainfo23a(pstapriv, mgmt->sa); if (psta) { @@ -869,7 +869,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) pkt_len, psta); } } - } else if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) { + } else if ((pmlmeinfo->state&0x03) == MSR_ADHOC) { psta = rtw_get_stainfo23a(pstapriv, mgmt->sa); if (psta) { /* update WMM, ERP in the beacon */ @@ -925,7 +925,7 @@ OnAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) u16 auth_mode, seq, algorithm; int status, len = skb->len; - if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state & 0x03) != MSR_AP) return _FAIL; DBG_8723A("+OnAuth23a\n"); @@ -1344,7 +1344,7 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) uint pkt_len = skb->len; int r; - if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state & 0x03) != MSR_AP) return _FAIL; left = pkt_len - sizeof(struct ieee80211_hdr_3addr); @@ -1801,7 +1801,7 @@ OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame) status = le16_to_cpu(pmgmt->u.assoc_resp.status_code); if (status > 0) { DBG_8723A("assoc reject, status code: %d\n", status); - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; res = -4; goto report_assoc_result; } @@ -2033,7 +2033,7 @@ static int OnAction23a_back23a(struct rtw_adapter *padapter, DBG_8723A("%s\n", __func__); - if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) != MSR_AP) if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) return _SUCCESS; @@ -2416,7 +2416,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pframe = mgmt->u.beacon.variable; pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable); - if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { + if ((pmlmeinfo->state & 0x03) == MSR_AP) { u8 *iebuf; int buflen; /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ @@ -2461,7 +2461,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms) pframe = rtw_set_ie23a(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *) &cur_network->DSConfig, &pattrib->pktlen); - /* if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) */ + /* if ((pmlmeinfo->state&0x03) == MSR_ADHOC) */ { u8 erpinfo = 0; u32 ATIMWindow; @@ -2578,7 +2578,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, /* below for ad-hoc mode */ #ifdef CONFIG_8723AU_AP_MODE - if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { + if ((pmlmeinfo->state & 0x03) == MSR_AP) { pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPS, cur_network->IEs, @@ -2639,7 +2639,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da, (unsigned char *)&cur_network->DSConfig, &pattrib->pktlen); - if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) { + if ((pmlmeinfo->state & 0x03) == MSR_ADHOC) { u8 erpinfo = 0; u32 ATIMWindow; /* IBSS Parameter Set... */ @@ -3391,9 +3391,9 @@ static int _issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); - if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) == MSR_AP) pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - else if ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) + else if ((pmlmeinfo->state&0x03) == MSR_INFRA) pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_TODS); if (power_mode) @@ -3513,9 +3513,9 @@ static int _issue_qos_nulldata23a(struct rtw_adapter *padapter, pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC); - if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) == MSR_AP) pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - else if ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) + else if ((pmlmeinfo->state&0x03) == MSR_INFRA) pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_TODS); if (pattrib->mdata) @@ -3950,7 +3950,7 @@ int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; u16 tid; - if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) + if ((pmlmeinfo->state&0x03) != MSR_AP) if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) return _SUCCESS; @@ -4337,20 +4337,17 @@ static void start_create_ibss(struct rtw_adapter* padapter) rtl8723a_SetBeaconRelatedRegisters(padapter); - /* set msr to WIFI_FW_ADHOC_STATE */ - pmlmeinfo->state = WIFI_FW_ADHOC_STATE; + /* set msr to MSR_ADHOC */ + pmlmeinfo->state = MSR_ADHOC; rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3); /* issue beacon */ - if (send_beacon23a(padapter) == _FAIL) - { + if (send_beacon23a(padapter) == _FAIL) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("issuing beacon frame fail....\n")); report_join_res23a(padapter, -1); - pmlmeinfo->state = WIFI_FW_NULL_STATE; - } - else - { + pmlmeinfo->state = MSR_NOLINK; + } else { hw_var_set_bssid(padapter, padapter->registrypriv.dev_network.MacAddress); hw_var_set_mlme_join(padapter, 0); @@ -4387,7 +4384,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) /* switch channel */ set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); - rtl8723a_set_media_status(padapter, WIFI_FW_STATION_STATE); + rtl8723a_set_media_status(padapter, MSR_INFRA); val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) ? 0xcc: 0xcf; @@ -4403,9 +4400,9 @@ static void start_clnt_join(struct rtw_adapter* padapter) set_link_timer(pmlmeext, beacon_timeout); mod_timer(&padapter->mlmepriv.assoc_timer, jiffies + msecs_to_jiffies((REAUTH_TO * REAUTH_LIMIT) + (REASSOC_TO*REASSOC_LIMIT) + beacon_timeout)); - pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE; + pmlmeinfo->state = WIFI_FW_AUTH_NULL | MSR_INFRA; } else if (caps & WLAN_CAPABILITY_IBSS) { /* adhoc client */ - rtl8723a_set_media_status(padapter, WIFI_FW_ADHOC_STATE); + rtl8723a_set_media_status(padapter, MSR_ADHOC); rtl8723a_set_sec_cfg(padapter, 0xcf); @@ -4414,7 +4411,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) rtl8723a_SetBeaconRelatedRegisters(padapter); - pmlmeinfo->state = WIFI_FW_ADHOC_STATE; + pmlmeinfo->state = MSR_ADHOC; report_join_res23a(padapter, 1); } @@ -4483,17 +4480,17 @@ int receive_disconnect23a(struct rtw_adapter *padapter, DBG_8723A("%s\n", __func__); - if ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) + if ((pmlmeinfo->state&0x03) == MSR_INFRA) { if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) { - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; report_del_sta_event23a(padapter, MacAddr, reason); } else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE) { - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; report_join_res23a(padapter, -2); } } @@ -5053,7 +5050,7 @@ void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, goto exit_mlmeext_joinbss_event_callback23a; } - if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) + if ((pmlmeinfo->state&0x03) == MSR_ADHOC) { /* for bc/mc */ psta_bmc = rtw_get_bcmc_stainfo23a(padapter); @@ -5103,7 +5100,7 @@ void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, hw_var_set_mlme_join(padapter, 2); - if ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) { + if ((pmlmeinfo->state&0x03) == MSR_INFRA) { /* correcting TSF */ rtw_correct_TSF(padapter); @@ -5124,7 +5121,7 @@ void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, DBG_8723A("%s\n", __func__); - if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) { + if ((pmlmeinfo->state & 0x03) == MSR_ADHOC) { /* adhoc master or sta_count>1 */ if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) { @@ -5137,7 +5134,7 @@ void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, if (send_beacon23a(padapter) != _SUCCESS) { pmlmeinfo->FW_sta_info[psta->mac_id].status = 0; - pmlmeinfo->state ^= WIFI_FW_ADHOC_STATE; + pmlmeinfo->state ^= MSR_ADHOC; return; } @@ -5182,10 +5179,10 @@ void mlmeext_sta_del_event_callback23a(struct rtw_adapter *padapter) flush_all_cam_entry23a(padapter); - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; /* set MSR to no link state -> infra. mode */ - rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); + rtl8723a_set_media_status(padapter, MSR_INFRA); del_timer_sync(&pmlmeext->link_timer); } @@ -5393,7 +5390,7 @@ static void link_timer_hdl(unsigned long data) if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) { DBG_8723A("link_timer_hdl:no beacon while connecting\n"); - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; report_join_res23a(padapter, -3); } else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE) { /* re-auth timer */ @@ -5418,7 +5415,7 @@ static void link_timer_hdl(unsigned long data) } else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE) { /* re-assoc timer */ if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT) { - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; report_join_res23a(padapter, -2); return; } @@ -5479,22 +5476,22 @@ int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) switch (psetop->mode) { case NL80211_IFTYPE_P2P_GO: case NL80211_IFTYPE_AP: - pmlmeinfo->state = WIFI_FW_AP_STATE; - type = _HW_STATE_AP_; + pmlmeinfo->state = MSR_AP; + type = MSR_AP; break; case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_STATION: /* clear state */ pmlmeinfo->state &= ~(BIT(0)|BIT(1)); /* set to STATION_STATE */ - pmlmeinfo->state |= WIFI_FW_STATION_STATE; - type = _HW_STATE_STATION_; + pmlmeinfo->state |= MSR_INFRA; + type = MSR_INFRA; break; case NL80211_IFTYPE_ADHOC: - type = _HW_STATE_ADHOC_; + type = MSR_ADHOC; break; default: - type = _HW_STATE_NOLINK_; + type = MSR_NOLINK; break; } @@ -5515,7 +5512,7 @@ int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) if (pparm->ifmode == NL80211_IFTYPE_AP || pparm->ifmode == NL80211_IFTYPE_P2P_GO) { #ifdef CONFIG_8723AU_AP_MODE - if (pmlmeinfo->state == WIFI_FW_AP_STATE) { + if (pmlmeinfo->state == MSR_AP) { /* todo: */ return H2C_SUCCESS; } @@ -5572,11 +5569,11 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) /* check already connecting to AP or not */ if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) { - if (pmlmeinfo->state & WIFI_FW_STATION_STATE) + if (pmlmeinfo->state & MSR_INFRA) issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100); - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; /* clear CAM */ flush_all_cam_entry23a(padapter); @@ -5584,8 +5581,7 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) del_timer_sync(&pmlmeext->link_timer); /* set MSR to nolink -> infra. mode */ - /* rtl8723a_set_media_status(padapter, _HW_STATE_NOLINK_); */ - rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); + rtl8723a_set_media_status(padapter, MSR_INFRA); hw_var_set_mlme_disconnect(padapter); } @@ -5691,7 +5687,7 @@ int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) /* set_opmode_cmd(padapter, infra_client_with_mlme); */ - /* pmlmeinfo->state = WIFI_FW_NULL_STATE; */ + /* pmlmeinfo->state = MSR_NOLINK; */ hw_var_set_mlme_disconnect(padapter); hw_var_set_bssid(padapter, null_addr); @@ -5699,14 +5695,14 @@ int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) /* restore to initial setting. */ update_tx_basic_rate23a(padapter, padapter->registrypriv.wireless_mode); - if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE || - (pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) + if ((pmlmeinfo->state & 0x03) == MSR_ADHOC || + (pmlmeinfo->state & 0x03) == MSR_AP) rtl8723a_set_bcn_func(padapter, 0); /* Stop BCN */ /* set MSR to no link state -> infra. mode */ - rtl8723a_set_media_status(padapter, _HW_STATE_STATION_); + rtl8723a_set_media_status(padapter, MSR_INFRA); - pmlmeinfo->state = WIFI_FW_NULL_STATE; + pmlmeinfo->state = MSR_NOLINK; /* switch to the 20M Hz mode after disconnect */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20; @@ -5865,7 +5861,7 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) rtl8723a_set_initial_gain(padapter, initialgain); /* set MSR to no link state */ - rtl8723a_set_media_status(padapter, _HW_STATE_NOLINK_); + rtl8723a_set_media_status(padapter, MSR_NOLINK); rtl8723a_mlme_sitesurvey(padapter, 1); @@ -5941,7 +5937,7 @@ int set_stakey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) DBG_8723A_LEVEL(_drv_always_, "set pairwise key to hw: alg:%d(WEP40-1 " "WEP104-5 TKIP-2 AES-4) camid:%d\n", pparm->algorithm, cam_id); - if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { + if ((pmlmeinfo->state & 0x03) == MSR_AP) { struct sta_info *psta; struct sta_priv *pstapriv = &padapter->stapriv; @@ -6015,7 +6011,7 @@ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && pmlmeinfo->HT_enable) || - (pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) { + (pmlmeinfo->state & 0x03) == MSR_AP) { issue_action_BA23a(padapter, pparm->addr, WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid); mod_timer(&psta->addba_retry_timer, diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 59cf5f14b658..3228c593f9b3 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -18,6 +18,7 @@ #include #include #include +#include static unsigned char ARTHEROS_OUI1[] = {0x00, 0x03, 0x7f}; static unsigned char ARTHEROS_OUI2[] = {0x00, 0x13, 0x74}; @@ -402,7 +403,7 @@ bool is_client_associated_to_ap23a(struct rtw_adapter *padapter) pmlmeinfo = &pmlmeext->mlmext_info; if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS && - (pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) + (pmlmeinfo->state & 0x03) == MSR_INFRA) return true; else return false; @@ -414,7 +415,7 @@ bool is_client_associated_to_ibss23a(struct rtw_adapter *padapter) struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS && - (pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) + (pmlmeinfo->state & 0x03) == MSR_ADHOC) return true; else return false; diff --git a/drivers/staging/rtl8723au/hal/hal_com.c b/drivers/staging/rtl8723au/hal/hal_com.c index 9fba04945152..44fc37b0fdaf 100644 --- a/drivers/staging/rtl8723au/hal/hal_com.c +++ b/drivers/staging/rtl8723au/hal/hal_com.c @@ -567,8 +567,8 @@ void rtl8723a_mlme_sitesurvey(struct rtw_adapter *padapter, u8 flag) pmlmeinfo = &pmlmeext->mlmext_info; if ((is_client_associated_to_ap23a(padapter) == true) || - ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) || - ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) { + ((pmlmeinfo->state & 0x03) == MSR_ADHOC) || + ((pmlmeinfo->state & 0x03) == MSR_AP)) { /* enable to rx data frame */ rtl8723au_write16(padapter, REG_RXFLTMAP2, 0xFFFF); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index 66ece4942c02..7dd62b3dec8c 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -235,7 +235,7 @@ ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) pframe = mgmt->u.beacon.variable; pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable); - if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) { + if ((pmlmeinfo->state&0x03) == MSR_AP) { /* DBG_8723A("ie len =%d\n", cur_network->IELength); */ pktlen += cur_network->IELength; memcpy(pframe, cur_network->IEs, pktlen); @@ -259,7 +259,7 @@ ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength) pframe = rtw_set_ie23a(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *) &cur_network->DSConfig, &pktlen); - if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) { + if ((pmlmeinfo->state&0x03) == MSR_ADHOC) { u32 ATIMWindow; /* IBSS Parameter Set... */ /* ATIMWindow = cur->ATIMWindow; */ diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index 2bc830f9e51b..bc9e88026e81 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -2300,18 +2300,18 @@ void hw_var_set_opmode(struct rtw_adapter *padapter, u8 mode) { u8 val8; - if ((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_)) { + if (mode == MSR_INFRA || mode == MSR_NOLINK) { StopTxBeacon(padapter); /* disable atim wnd */ val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_ATIM; SetBcnCtrlReg23a(padapter, val8, ~val8); - } else if ((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_) */) { + } else if (mode == MSR_ADHOC) { ResumeTxBeacon(padapter); val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_BCNQ_SUB; SetBcnCtrlReg23a(padapter, val8, ~val8); - } else if (mode == _HW_STATE_AP_) { + } else if (mode == MSR_AP) { /* add NULL Data and BT NULL Data Packets to FW RSVD Page */ rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(padapter); @@ -2393,8 +2393,8 @@ void hw_var_set_correct_tsf(struct rtw_adapter *padapter) do_div(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval * 1024)) - 1024; /* us */ - if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) || - ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) { + if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) || + ((pmlmeinfo->state & 0x03) == MSR_AP)) { /* pHalData->RegTxPause |= STOP_BCNQ;BIT(6) */ /* rtl8723au_write8(padapter, REG_TXPAUSE, (rtl8723au_read8(Adapter, REG_TXPAUSE)|BIT(6))); */ @@ -2412,8 +2412,8 @@ void hw_var_set_correct_tsf(struct rtw_adapter *padapter) /* enable related TSF function */ SetBcnCtrlReg23a(padapter, EN_BCN_FUNCTION, 0); - if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) || - ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) + if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) || + ((pmlmeinfo->state & 0x03) == MSR_AP)) ResumeTxBeacon(padapter); } diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h index 87803e096d00..2e32c832fd21 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h @@ -282,16 +282,6 @@ struct ss_res struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT]; }; -/* define AP_MODE 0x0C */ -/* define STATION_MODE 0x08 */ -/* define AD_HOC_MODE 0x04 */ -/* define NO_LINK_MODE 0x00 */ - -#define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_ -#define WIFI_FW_STATION_STATE _HW_STATE_STATION_ -#define WIFI_FW_AP_STATE _HW_STATE_AP_ -#define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_ - #define WIFI_FW_AUTH_NULL 0x00000100 #define WIFI_FW_AUTH_STATE 0x00000200 #define WIFI_FW_AUTH_SUCCESS 0x00000400 -- cgit From df72ac93ee22daf1595e93b45de9e6804af0afde Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:47 +0200 Subject: staging: rtl8723au: Use rtl8723au_set_media_status() to replace _InitNetworkType() Reduce yet another duplicate implementation of set_media_status() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 13 +------------ drivers/staging/rtl8723au/include/rtl8723a_spec.h | 8 -------- 2 files changed, 1 insertion(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 8a7e644525e2..d8f9f27e09ac 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -338,17 +338,6 @@ static void _InitQueuePriority(struct rtw_adapter *Adapter) _InitNormalChipQueuePriority(Adapter); } -static void _InitNetworkType(struct rtw_adapter *Adapter) -{ - u32 value32; - - value32 = rtl8723au_read32(Adapter, REG_CR); - - /* TODO: use the other function to set network type */ - value32 = (value32 & ~MASK_NETTYPE) | _NETTYPE(NT_LINK_AP); - rtl8723au_write32(Adapter, REG_CR, value32); -} - static void _InitTransferPageSize(struct rtw_adapter *Adapter) { /* Tx page size is always 128. */ @@ -756,7 +745,7 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) _InitInterrupt(Adapter); hw_var_set_macaddr(Adapter, Adapter->eeprompriv.mac_addr); - _InitNetworkType(Adapter);/* set msr */ + rtl8723a_set_media_status(Adapter, MSR_INFRA); _InitWMACSetting(Adapter); _InitAdaptiveCtrl(Adapter); _InitEDCA(Adapter); diff --git a/drivers/staging/rtl8723au/include/rtl8723a_spec.h b/drivers/staging/rtl8723au/include/rtl8723a_spec.h index b5d7123f7873..8d19b2833f03 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_spec.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_spec.h @@ -1323,14 +1323,6 @@ Current IOREG MAP #define ENSWBCN BIT(8) #define ENSEC BIT(9) -/* Network type */ -#define _NETTYPE(x) (((x) & 0x3) << 16) -#define MASK_NETTYPE 0x30000 -#define NT_NO_LINK 0x0 -#define NT_LINK_AD_HOC 0x1 -#define NT_LINK_AP 0x2 -#define NT_AS_AP 0x3 - #define _LBMODE(x) (((x) & 0xF) << 24) #define MASK_LBMODE 0xF000000 #define LOOPBACK_NORMAL 0x0 -- cgit From 1d69fe84f33e92e2097e83a99200716ea4bfc873 Mon Sep 17 00:00:00 2001 From: Raphael Silva Date: Thu, 17 Jul 2014 22:59:48 +0200 Subject: staging: rtl8723au: Corrections in the coding style Some corrections were made to the code in order to conform to the Kernel Coding Style. Jes: Fix build problem Signed-off-by: Raphael Silva Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_sta_mgt.c | 42 ++++++++++++++++++---------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c index 8db844bb7983..d17998da8600 100644 --- a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c @@ -26,7 +26,7 @@ static const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static void _rtw_init_stainfo(struct sta_info *psta) { - memset((u8 *)psta, 0, sizeof (struct sta_info)); + memset((u8 *)psta, 0, sizeof(struct sta_info)); spin_lock_init(&psta->lock); INIT_LIST_HEAD(&psta->list); INIT_LIST_HEAD(&psta->hash_list); @@ -71,8 +71,10 @@ int _rtw_init_sta_priv23a(struct sta_priv *pstapriv) pstapriv->auth_list_cnt = 0; pstapriv->auth_to = 3; /* 3*2 = 6 sec */ pstapriv->assoc_to = 3; - /* pstapriv->expire_to = 900; 900*2 = 1800 sec = 30 min, expire after no any traffic. */ - /* pstapriv->expire_to = 30; 30*2 = 60 sec = 1 min, expire after no any traffic. */ + /* pstapriv->expire_to = 900; 900*2 = 1800 sec = 30 min, + expire after no any traffic. */ + /* pstapriv->expire_to = 30; 30*2 = 60 sec = 1 min, + expire after no any traffic. */ pstapriv->expire_to = 3; /* 3*2 = 6 sec */ pstapriv->max_num_sta = NUM_STA; #endif @@ -94,6 +96,7 @@ int _rtw_free_sta_priv23a(struct sta_priv *pstapriv) list_for_each_safe(plist, ptmp, phead) { int i; + psta = container_of(plist, struct sta_info, hash_list); for (i = 0; i < 16 ; i++) { @@ -144,14 +147,17 @@ rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp) list_add_tail(&psta->hash_list, phash_list); - pstapriv->asoc_sta_count ++ ; + pstapriv->asoc_sta_count++; -/* For the SMC router, the sequence number of first packet of WPS handshake will be 0. */ -/* In this case, this packet will be dropped by recv_decache function if we use the 0x00 as the default value for tid_rxseq variable. */ +/* For the SMC router, the sequence number of first packet of WPS + handshake will be 0. */ +/* In this case, this packet will be dropped by recv_decache function + if we use the 0x00 as the default value for tid_rxseq variable. */ /* So, we initialize the tid_rxseq variable as the 0xffff. */ for (i = 0; i < 16; i++) - memcpy(&psta->sta_recvpriv.rxcache.tid_rxseq[i], &wRxSeqInitialValue, 2); + memcpy(&psta->sta_recvpriv.rxcache.tid_rxseq[i], + &wRxSeqInitialValue, 2); RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_info_, ("alloc number_%d stainfo with hwaddr = %pM\n", @@ -242,8 +248,12 @@ int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta) spin_unlock_bh(&pxmitpriv->lock); list_del_init(&psta->hash_list); - RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_, ("\n free number_%d stainfo with hwaddr = 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n", pstapriv->asoc_sta_count, psta->hwaddr[0], psta->hwaddr[1], psta->hwaddr[2], psta->hwaddr[3], psta->hwaddr[4], psta->hwaddr[5])); - pstapriv->asoc_sta_count --; + RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_, + ("\n free number_%d stainfo with hwaddr = 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n", + pstapriv->asoc_sta_count, psta->hwaddr[0], + psta->hwaddr[1], psta->hwaddr[2], psta->hwaddr[3], + psta->hwaddr[4], psta->hwaddr[5])); + pstapriv->asoc_sta_count--; /* re-init sta_info; 20061114 will be init in alloc_stainfo */ /* _rtw_init_sta_xmit_priv23a(&psta->sta_xmitpriv); */ @@ -251,7 +261,8 @@ int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta) del_timer_sync(&psta->addba_retry_timer); - /* for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer */ + /* for A-MPDU Rx reordering buffer control, + cancel reordering_ctrl_timer */ for (i = 0; i < 16; i++) { struct list_head *phead, *plist; struct recv_frame *prframe; @@ -261,7 +272,8 @@ int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta) del_timer_sync(&preorder_ctrl->reordering_ctrl_timer); - ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue; + ppending_recvframe_queue = + &preorder_ctrl->pending_recvframe_queue; spin_lock_bh(&ppending_recvframe_queue->lock); phead = get_list_head(ppending_recvframe_queue); @@ -301,7 +313,7 @@ int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta) pstapriv->sta_dz_bitmap &= ~CHKBIT(psta->aid); pstapriv->tim_bitmap &= ~CHKBIT(psta->aid); - if ((psta->aid >0) && (pstapriv->sta_aid[psta->aid - 1] == psta)) { + if ((psta->aid > 0) && (pstapriv->sta_aid[psta->aid - 1] == psta)) { pstapriv->sta_aid[psta->aid - 1] = NULL; psta->aid = 0; } @@ -318,7 +330,7 @@ void rtw_free_all_stainfo23a(struct rtw_adapter *padapter) struct list_head *plist, *phead, *ptmp; struct sta_info *psta; struct sta_priv *pstapriv = &padapter->stapriv; - struct sta_info* pbcmc_stainfo = rtw_get_bcmc_stainfo23a(padapter); + struct sta_info *pbcmc_stainfo = rtw_get_bcmc_stainfo23a(padapter); s32 index; if (pstapriv->asoc_sta_count == 1) @@ -332,7 +344,7 @@ void rtw_free_all_stainfo23a(struct rtw_adapter *padapter) list_for_each_safe(plist, ptmp, phead) { psta = container_of(plist, struct sta_info, hash_list); - if (pbcmc_stainfo!= psta) + if (pbcmc_stainfo != psta) rtw_free_stainfo23a(padapter, psta); } } @@ -374,7 +386,7 @@ struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr) return psta; } -int rtw_init_bcmc_stainfo23a(struct rtw_adapter* padapter) +int rtw_init_bcmc_stainfo23a(struct rtw_adapter *padapter) { struct sta_priv *pstapriv = &padapter->stapriv; struct sta_info *psta; -- cgit From ef03600cae2dec4e5225b18e9ffbcdd5bc56d73c Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:49 +0200 Subject: staging: rtl8723au: Remove write-only variable UsbRxHighSpeedMode Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 3 --- drivers/staging/rtl8723au/include/rtl8723a_hal.h | 3 --- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index d8f9f27e09ac..227a3637ea46 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -520,9 +520,6 @@ static void InitUsbAggregationSetting(struct rtw_adapter *Adapter) /* Rx aggregation setting */ usb_AggSettingRxUpdate(Adapter); - - /* 201/12/10 MH Add for USB agg mode dynamic switch. */ - pHalData->UsbRxHighSpeedMode = false; } static void _InitOperationMode(struct rtw_adapter *Adapter) diff --git a/drivers/staging/rtl8723au/include/rtl8723a_hal.h b/drivers/staging/rtl8723au/include/rtl8723a_hal.h index 344b7085f877..066dc9c5eb0f 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_hal.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_hal.h @@ -384,9 +384,6 @@ struct hal_data_8723a { u8 OutEpQueueSel; u8 OutEpNumber; - /* 2010/12/10 MH Add for USB aggreation mode dynamic shceme. */ - bool UsbRxHighSpeedMode; - /* 2010/11/22 MH Add for slim combo debug mode selective. */ /* This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock. */ bool SlimComboDbg; -- cgit From 120036acecd1610b88a6445252377c0b8ba73442 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:50 +0200 Subject: staging: rtl8723au: Remove no-op usb_AggSetting*() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 50 ----------------------------- 1 file changed, 50 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 227a3637ea46..4161409b4041 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -473,55 +473,6 @@ static void _InitRetryFunction(struct rtw_adapter *Adapter) rtl8723au_write8(Adapter, REG_ACKTO, 0x40); } -/*----------------------------------------------------------------------------- - * Function: usb_AggSettingTxUpdate() - * - * Overview: Seperate TX/RX parameters update independent for TP - * detection and dynamic TX/RX aggreagtion parameters update. - * - * Input: struct rtw_adapter * - * - * Output/Return: NONE - * - * Revised History: - * When Who Remark - * 12/10/2010 MHC Seperate to smaller function. - * - *---------------------------------------------------------------------------*/ -static void usb_AggSettingTxUpdate(struct rtw_adapter *Adapter) -{ -} /* usb_AggSettingTxUpdate */ - -/*----------------------------------------------------------------------------- - * Function: usb_AggSettingRxUpdate() - * - * Overview: Seperate TX/RX parameters update independent for TP - * detection and dynamic TX/RX aggreagtion parameters update. - * - * Input: struct rtw_adapter * - * - * Output/Return: NONE - * - * Revised History: - * When Who Remark - * 12/10/2010 MHC Seperate to smaller function. - * - *---------------------------------------------------------------------------*/ -static void usb_AggSettingRxUpdate(struct rtw_adapter *Adapter) -{ -} /* usb_AggSettingRxUpdate */ - -static void InitUsbAggregationSetting(struct rtw_adapter *Adapter) -{ - struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); - - /* Tx aggregation setting */ - usb_AggSettingTxUpdate(Adapter); - - /* Rx aggregation setting */ - usb_AggSettingRxUpdate(Adapter); -} - static void _InitOperationMode(struct rtw_adapter *Adapter) { } @@ -748,7 +699,6 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) _InitEDCA(Adapter); _InitRateFallback(Adapter); _InitRetryFunction(Adapter); - InitUsbAggregationSetting(Adapter); _InitOperationMode(Adapter);/* todo */ rtl8723a_InitBeaconParameters(Adapter); -- cgit From a2c379ce26a054b4154effddd61601ef0acffb59 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:51 +0200 Subject: staging: rtl8723au: Remove no-op _InitOperation_mode() function Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 4161409b4041..0c760e513a82 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -473,10 +473,6 @@ static void _InitRetryFunction(struct rtw_adapter *Adapter) rtl8723au_write8(Adapter, REG_ACKTO, 0x40); } -static void _InitOperationMode(struct rtw_adapter *Adapter) -{ -} - static void _InitRFType(struct rtw_adapter *Adapter) { struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); @@ -699,7 +695,6 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) _InitEDCA(Adapter); _InitRateFallback(Adapter); _InitRetryFunction(Adapter); - _InitOperationMode(Adapter);/* todo */ rtl8723a_InitBeaconParameters(Adapter); _InitHWLed(Adapter); -- cgit From e4d480b012f371c12a5c317494a5e068ad27216f Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:52 +0200 Subject: staging: rtl8723au: Remove RegBcnCtrlVal The value saved in RegBcnCtrlVal was never used. In addition the code was highly endian broken, declaring it as a u32, then accessing it via a u8 * later. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 18 +++++------------- drivers/staging/rtl8723au/include/rtl8723a_hal.h | 1 - 2 files changed, 5 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index bc9e88026e81..5c4751cc482f 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -882,20 +882,13 @@ void rtl8723a_read_chip_version(struct rtw_adapter *padapter) /* */ void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits) { - struct hal_data_8723a *pHalData; - u32 addr; - u8 *pRegBcnCtrlVal; - - pHalData = GET_HAL_DATA(padapter); - pRegBcnCtrlVal = (u8 *)&pHalData->RegBcnCtrlVal; - - addr = REG_BCN_CTRL; + u8 val8; - *pRegBcnCtrlVal = rtl8723au_read8(padapter, addr); - *pRegBcnCtrlVal |= SetBits; - *pRegBcnCtrlVal &= ~ClearBits; + val8 = rtl8723au_read8(padapter, REG_BCN_CTRL); + val8 |= SetBits; + val8 &= ~ClearBits; - rtl8723au_write8(padapter, addr, *pRegBcnCtrlVal); + rtl8723au_write8(padapter, REG_BCN_CTRL, val8); } void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter) @@ -903,7 +896,6 @@ void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter) struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); rtl8723au_write16(padapter, REG_BCN_CTRL, 0x1010); - pHalData->RegBcnCtrlVal = 0x1010; /* TODO: Remove these magic number */ rtl8723au_write16(padapter, REG_TBTT_PROHIBIT, 0x6404); /* ms */ diff --git a/drivers/staging/rtl8723au/include/rtl8723a_hal.h b/drivers/staging/rtl8723au/include/rtl8723a_hal.h index 066dc9c5eb0f..1f63eb1df57b 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_hal.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_hal.h @@ -356,7 +356,6 @@ struct hal_data_8723a { u8 fw_ractrl; u8 RegTxPause; /* Beacon function related global variable. */ - u32 RegBcnCtrlVal; u8 RegFwHwTxQCtrl; u8 RegReg542; -- cgit From 2a3bc8aa4fb2466ac478180dd9b21339b689ff5e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:53 +0200 Subject: staging: rtl8723au: Use proper name REG_CAMCMD and remove wrapper invalidate_cam_all23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_wlan_util.c | 7 +------ drivers/staging/rtl8723au/hal/hal_com.c | 8 ++++---- drivers/staging/rtl8723au/hal/usb_halinit.c | 2 +- drivers/staging/rtl8723au/include/hal_com.h | 2 +- drivers/staging/rtl8723au/include/rtl8723a_spec.h | 2 -- 5 files changed, 7 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c index 3228c593f9b3..32f360301c77 100644 --- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c @@ -445,11 +445,6 @@ unsigned int decide_wait_for_beacon_timeout23a(unsigned int bcn_interval) return bcn_interval << 2; } -void invalidate_cam_all23a(struct rtw_adapter *padapter) -{ - rtl8723a_cam_invalid_all(padapter); -} - void clear_cam_entry23a(struct rtw_adapter *padapter, u8 entry) { unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -483,7 +478,7 @@ void flush_all_cam_entry23a(struct rtw_adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - rtl8723a_cam_invalid_all(padapter); + rtl8723a_cam_invalidate_all(padapter); memset(pmlmeinfo->FW_sta_info, 0, sizeof(pmlmeinfo->FW_sta_info)); } diff --git a/drivers/staging/rtl8723au/hal/hal_com.c b/drivers/staging/rtl8723au/hal/hal_com.c index 44fc37b0fdaf..8718151d127b 100644 --- a/drivers/staging/rtl8723au/hal/hal_com.c +++ b/drivers/staging/rtl8723au/hal/hal_com.c @@ -669,16 +669,16 @@ void rtl8723a_cam_empty_entry(struct rtw_adapter *padapter, u8 ucIndex) ("rtl8723a_cam_empty_entry(): WRITE A4: %lx \n", ulContent));*/ /* delay_ms(40); */ - rtl8723au_write32(padapter, RWCAM, ulCommand); + rtl8723au_write32(padapter, REG_CAMCMD, ulCommand); /* RT_TRACE(COMP_SEC, DBG_LOUD, ("rtl8723a_cam_empty_entry(): WRITE A0: %lx \n", ulCommand));*/ } } -void rtl8723a_cam_invalid_all(struct rtw_adapter *padapter) +void rtl8723a_cam_invalidate_all(struct rtw_adapter *padapter) { - rtl8723au_write32(padapter, RWCAM, BIT(31) | BIT(30)); + rtl8723au_write32(padapter, REG_CAMCMD, CAM_POLLINIG | BIT(30)); } void rtl8723a_cam_write(struct rtw_adapter *padapter, @@ -708,7 +708,7 @@ void rtl8723a_cam_write(struct rtw_adapter *padapter, rtl8723au_write32(padapter, WCAMI, val); cmd = CAM_POLLINIG | CAM_WRITE | (addr + j); - rtl8723au_write32(padapter, RWCAM, cmd); + rtl8723au_write32(padapter, REG_CAMCMD, cmd); /* DBG_8723A("%s => cam write: %x, %x\n", __func__, cmd, val);*/ } diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 0c760e513a82..e09329bb1f8d 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -702,7 +702,7 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) _BBTurnOnBlock(Adapter); /* NicIFSetMacAddress(padapter, padapter->PermanentAddress); */ - invalidate_cam_all23a(Adapter); + rtl8723a_cam_invalidate_all(Adapter); /* 2010/12/17 MH We need to set TX power according to EFUSE content at first. */ PHY_SetTxPowerLevel8723A(Adapter, pHalData->CurrentChannel); diff --git a/drivers/staging/rtl8723au/include/hal_com.h b/drivers/staging/rtl8723au/include/hal_com.h index 4a161e26c8dc..6c2ca4fedf68 100644 --- a/drivers/staging/rtl8723au/include/hal_com.h +++ b/drivers/staging/rtl8723au/include/hal_com.h @@ -182,7 +182,7 @@ void rtl8723a_set_slot_time(struct rtw_adapter *padapter, u8 slottime); void rtl8723a_ack_preamble(struct rtw_adapter *padapter, u8 bShortPreamble); void rtl8723a_set_sec_cfg(struct rtw_adapter *padapter, u8 sec); void rtl8723a_cam_empty_entry(struct rtw_adapter *padapter, u8 ucIndex); -void rtl8723a_cam_invalid_all(struct rtw_adapter *padapter); +void rtl8723a_cam_invalidate_all(struct rtw_adapter *padapter); void rtl8723a_cam_write(struct rtw_adapter *padapter, u8 entry, u16 ctrl, const u8 *mac, const u8 *key); void rtl8723a_fifo_cleanup(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/include/rtl8723a_spec.h b/drivers/staging/rtl8723au/include/rtl8723a_spec.h index 8d19b2833f03..59b545b642b4 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_spec.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_spec.h @@ -454,8 +454,6 @@ /* */ /* 9. Security Control Registers (Offset: ) */ /* */ - /* IN 8190 Data Sheet is called CAMcmd */ -#define RWCAM REG_CAMCMD /* Software write CAM input content */ #define WCAMI REG_CAMWRITE /* Software read/write CAM config */ -- cgit From b3ee999e0b4e8a3e42bf186dae0ccf4f2692a8a5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:54 +0200 Subject: staging: rtl8723au: rtl8723a_InitBeaconParameters(): Remove unused variable Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c index 5c4751cc482f..8523908d5e5f 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c @@ -893,8 +893,6 @@ void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits) void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter) { - struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - rtl8723au_write16(padapter, REG_BCN_CTRL, 0x1010); /* TODO: Remove these magic number */ -- cgit From 344af82c94311c4b11af968503c8b97cedb2fa91 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:55 +0200 Subject: staging: rtl8723au: ODM_IC_11N_SERIES is always true for SupportICType Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 142 +++++++++++----------- drivers/staging/rtl8723au/include/odm.h | 4 - drivers/staging/rtl8723au/include/odm_interface.h | 11 +- 3 files changed, 75 insertions(+), 82 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index e15ebfe1881b..f21861e74390 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -274,18 +274,16 @@ void ODM23a_DMInit(struct dm_odm_t *pDM_Odm) odm_DIG23aInit(pDM_Odm); odm_RateAdaptiveMaskInit23a(pDM_Odm); - if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) { - odm23a_DynBBPSInit(pDM_Odm); - odm_DynamicTxPower23aInit(pDM_Odm); - odm_TXPowerTrackingInit23a(pDM_Odm); - ODM_EdcaTurboInit23a(pDM_Odm); - if ((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)) - odm_InitHybridAntDiv23a(pDM_Odm); - else if (pDM_Odm->AntDivType == CGCS_RX_SW_ANTDIV) - odm_SwAntDivInit(pDM_Odm); - } + odm23a_DynBBPSInit(pDM_Odm); + odm_DynamicTxPower23aInit(pDM_Odm); + odm_TXPowerTrackingInit23a(pDM_Odm); + ODM_EdcaTurboInit23a(pDM_Odm); + if ((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV) || + (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV) || + (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)) + odm_InitHybridAntDiv23a(pDM_Odm); + else if (pDM_Odm->AntDivType == CGCS_RX_SW_ANTDIV) + odm_SwAntDivInit(pDM_Odm); } /* 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */ @@ -304,7 +302,7 @@ void ODM_DMWatchdog23a(struct dm_odm_t *pDM_Odm) /* NeilChen--2012--08--24-- */ /* Fix Leave LPS issue */ if ((pDM_Odm->Adapter->pwrctrlpriv.pwr_mode != PS_MODE_ACTIVE) &&/* in LPS mode */ - (pDM_Odm->SupportICType & (ODM_RTL8723A))) { + (pDM_Odm->SupportICType & ODM_RTL8723A)) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("----Step1: odm_DIG23a is in LPS mode\n")); ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("---Step2: 8723AS is in LPS mode\n")); odm_DIG23abyRSSI_LPS(pDM_Odm); @@ -327,10 +325,8 @@ void ODM_DMWatchdog23a(struct dm_odm_t *pDM_Odm) else if (pDM_Odm->AntDivType == CGCS_RX_SW_ANTDIV) odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_PEAK); - if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) { - ODM_TXPowerTrackingCheck23a(pDM_Odm); - odm_EdcaTurboCheck23a(pDM_Odm); - } + ODM_TXPowerTrackingCheck23a(pDM_Odm); + odm_EdcaTurboCheck23a(pDM_Odm); odm_dtc(pDM_Odm); } @@ -551,7 +547,7 @@ void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm { pDM_Odm->bCckHighPower = (bool) ODM_GetBBReg(pDM_Odm, 0x824, BIT(9)); pDM_Odm->RFPathRxEnable = (u8) ODM_GetBBReg(pDM_Odm, 0xc04, 0x0F); - if (pDM_Odm->SupportICType & (ODM_RTL8723A)) + if (pDM_Odm->SupportICType & ODM_RTL8723A) pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV; ODM_InitDebugSetting23a(pDM_Odm); @@ -655,7 +651,7 @@ void odm_DIG23abyRSSI_LPS(struct dm_odm_t *pDM_Odm) u8 bFwCurrentInPSMode = false; u8 CurrentIGI = pDM_Odm->RSSI_Min; - if (!(pDM_Odm->SupportICType & (ODM_RTL8723A))) + if (!(pDM_Odm->SupportICType & ODM_RTL8723A)) return; CurrentIGI = CurrentIGI+RSSI_OFFSET_DIG; @@ -764,7 +760,7 @@ void odm_DIG23a(struct dm_odm_t *pDM_Odm) FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0); /* 1 Boundary Decision */ - if ((pDM_Odm->SupportICType & (ODM_RTL8723A)) && + if ((pDM_Odm->SupportICType & ODM_RTL8723A) && ((pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) || pDM_Odm->ExtLNA)) { dm_dig_max = DM_DIG_MAX_NIC_HP; dm_dig_min = DM_DIG_MIN_NIC_HP; @@ -777,7 +773,7 @@ void odm_DIG23a(struct dm_odm_t *pDM_Odm) if (pDM_Odm->bLinked) { /* 2 8723A Series, offset need to be 10 */ - if (pDM_Odm->SupportICType == (ODM_RTL8723A)) { + if (pDM_Odm->SupportICType == ODM_RTL8723A) { /* 2 Upper Bound */ if ((pDM_Odm->RSSI_Min + 10) > DM_DIG_MAX_NIC) pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC; @@ -925,32 +921,36 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm) if (!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT)) return; - if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES) { - /* hold ofdm counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1); /* hold page C counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 1); /* hold page D counter */ - - ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE1_11N, bMaskDWord); - FalseAlmCnt->Cnt_Fast_Fsync = (ret_value&0xffff); - FalseAlmCnt->Cnt_SB_Search_fail = ((ret_value&0xffff0000)>>16); - ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE2_11N, bMaskDWord); - FalseAlmCnt->Cnt_OFDM_CCA = (ret_value&0xffff); - FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16); - ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE3_11N, bMaskDWord); - FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff); - FalseAlmCnt->Cnt_Crc8_fail = ((ret_value&0xffff0000)>>16); - ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE4_11N, bMaskDWord); - FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff); - - FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail + - FalseAlmCnt->Cnt_Rate_Illegal + - FalseAlmCnt->Cnt_Crc8_fail + - FalseAlmCnt->Cnt_Mcs_fail + - FalseAlmCnt->Cnt_Fast_Fsync + - FalseAlmCnt->Cnt_SB_Search_fail; - /* hold cck counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT(12), 1); - ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT(14), 1); + /* hold ofdm counter */ + /* hold page C counter */ + ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1); + /* hold page D counter */ + ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 1); + ret_value = + ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE1_11N, bMaskDWord); + FalseAlmCnt->Cnt_Fast_Fsync = (ret_value&0xffff); + FalseAlmCnt->Cnt_SB_Search_fail = ((ret_value&0xffff0000)>>16); + ret_value = + ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE2_11N, bMaskDWord); + FalseAlmCnt->Cnt_OFDM_CCA = (ret_value&0xffff); + FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16); + ret_value = + ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE3_11N, bMaskDWord); + FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff); + FalseAlmCnt->Cnt_Crc8_fail = ((ret_value&0xffff0000)>>16); + ret_value = + ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_TYPE4_11N, bMaskDWord); + FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff); + + FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail + + FalseAlmCnt->Cnt_Rate_Illegal + + FalseAlmCnt->Cnt_Crc8_fail + + FalseAlmCnt->Cnt_Mcs_fail + + FalseAlmCnt->Cnt_Fast_Fsync + + FalseAlmCnt->Cnt_SB_Search_fail; + /* hold cck counter */ + ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT(12), 1); + ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, BIT(14), 1); ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_FA_LSB_11N, bMaskByte0); FalseAlmCnt->Cnt_Cck_fail = ret_value; @@ -958,7 +958,8 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm) FalseAlmCnt->Cnt_Cck_fail += (ret_value & 0xff) << 8; ret_value = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_CCA_CNT_11N, bMaskDWord); - FalseAlmCnt->Cnt_CCK_CCA = ((ret_value&0xFF)<<8) | ((ret_value&0xFF00)>>8); + FalseAlmCnt->Cnt_CCK_CCA = + ((ret_value&0xFF)<<8) | ((ret_value&0xFF00)>>8); FalseAlmCnt->Cnt_all = (FalseAlmCnt->Cnt_Fast_Fsync + FalseAlmCnt->Cnt_SB_Search_fail + @@ -968,7 +969,8 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm) FalseAlmCnt->Cnt_Mcs_fail + FalseAlmCnt->Cnt_Cck_fail); - FalseAlmCnt->Cnt_CCA_all = FalseAlmCnt->Cnt_OFDM_CCA + FalseAlmCnt->Cnt_CCK_CCA; + FalseAlmCnt->Cnt_CCA_all = + FalseAlmCnt->Cnt_OFDM_CCA + FalseAlmCnt->Cnt_CCK_CCA; if (pDM_Odm->SupportICType >= ODM_RTL8723A) { /* reset false alarm counter registers */ @@ -977,8 +979,10 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm) ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(27), 1); ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(27), 0); /* update ofdm counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 0); /* update page C counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 0); /* update page D counter */ + /* update page C counter */ + ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 0); + /* update page D counter */ + ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 0); /* reset CCK CCA counter */ ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11N, @@ -992,26 +996,20 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm) BIT(15) | BIT(14), 2); } - ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Enter odm_FalseAlarmCounterStatistics23a\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Fast_Fsync =%d, Cnt_SB_Search_fail =%d\n", - FalseAlmCnt->Cnt_Fast_Fsync, FalseAlmCnt->Cnt_SB_Search_fail)); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Parity_Fail =%d, Cnt_Rate_Illegal =%d\n", - FalseAlmCnt->Cnt_Parity_Fail, FalseAlmCnt->Cnt_Rate_Illegal)); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Crc8_fail =%d, Cnt_Mcs_fail =%d\n", - FalseAlmCnt->Cnt_Crc8_fail, FalseAlmCnt->Cnt_Mcs_fail)); - } else { /* FOR ODM_IC_11AC_SERIES */ - /* read OFDM FA counter */ - FalseAlmCnt->Cnt_Ofdm_fail = ODM_GetBBReg(pDM_Odm, ODM_REG_OFDM_FA_11AC, bMaskLWord); - FalseAlmCnt->Cnt_Cck_fail = ODM_GetBBReg(pDM_Odm, ODM_REG_CCK_FA_11AC, bMaskLWord); - FalseAlmCnt->Cnt_all = FalseAlmCnt->Cnt_Ofdm_fail + FalseAlmCnt->Cnt_Cck_fail; - - /* reset OFDM FA coutner */ - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RST_11AC, BIT(17), 1); - ODM_SetBBReg(pDM_Odm, ODM_REG_OFDM_FA_RST_11AC, BIT(17), 0); - /* reset CCK FA counter */ - ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11AC, BIT(15), 0); - ODM_SetBBReg(pDM_Odm, ODM_REG_CCK_FA_RST_11AC, BIT(15), 1); - } + ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, + ("Enter odm_FalseAlarmCounterStatistics23a\n")); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, + ("Cnt_Fast_Fsync =%d, Cnt_SB_Search_fail =%d\n", + FalseAlmCnt->Cnt_Fast_Fsync, + FalseAlmCnt->Cnt_SB_Search_fail)); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, + ("Cnt_Parity_Fail =%d, Cnt_Rate_Illegal =%d\n", + FalseAlmCnt->Cnt_Parity_Fail, + FalseAlmCnt->Cnt_Rate_Illegal)); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, + ("Cnt_Crc8_fail =%d, Cnt_Mcs_fail =%d\n", + FalseAlmCnt->Cnt_Crc8_fail, FalseAlmCnt->Cnt_Mcs_fail)); + ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Cck_fail =%d\n", FalseAlmCnt->Cnt_Cck_fail)); ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Cnt_Ofdm_fail =%d\n", FalseAlmCnt->Cnt_Ofdm_fail)); ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD, ("Total False Alarm =%d\n", FalseAlmCnt->Cnt_all)); @@ -1836,7 +1834,7 @@ bool ODM_SingleDualAntennaDetection(struct dm_odm_t *pDM_Odm, u8 mode) rSleep, rPMPD_ANAEN, rFPGA0_XCD_SwitchControl, rBlue_Tooth}; - if (!(pDM_Odm->SupportICType & (ODM_RTL8723A))) + if (!(pDM_Odm->SupportICType & ODM_RTL8723A)) return bResult; if (!(pDM_Odm->SupportAbility&ODM_BB_ANT_DIV)) diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 08c6f7297d6d..b466a81b3364 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -415,10 +415,6 @@ enum odm_ic_type_def { ODM_RTL8821 = BIT(6), }; -#define ODM_IC_11N_SERIES \ - (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E) -#define ODM_IC_11AC_SERIES (ODM_RTL8812) - /* ODM_CMNINFO_CUT_VER */ enum odm_cut_version { ODM_CUT_A = 1, diff --git a/drivers/staging/rtl8723au/include/odm_interface.h b/drivers/staging/rtl8723au/include/odm_interface.h index c260d6bd8ff5..ea35070b744f 100644 --- a/drivers/staging/rtl8723au/include/odm_interface.h +++ b/drivers/staging/rtl8723au/include/odm_interface.h @@ -33,17 +33,16 @@ ODM_REG(DIG,_pDM_Odm) #define _bit_11N(_name) ODM_BIT_##_name##_11N #define _bit_11AC(_name) ODM_BIT_##_name##_11AC -#define _cat(_name, _ic_type, _func) \ - ( \ - ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \ - _func##_11AC(_name) \ +#define _cat(_name, _func) \ + ( \ + _func##_11N(_name) \ ) /* _name: name of register or bit. */ /* Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" */ /* gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType. */ -#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg) -#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit) +#define ODM_REG(_name, _pDM_Odm) _cat(_name, _reg) +#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _bit) /* */ /* 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem. */ -- cgit From bc919b0e599eb7a7c04b57001320bbd95eddadb1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:56 +0200 Subject: staging: rtl8723au: Remove unused odm_RegDefine11AC.h Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- .../staging/rtl8723au/include/odm_RegDefine11AC.h | 49 ---------------------- drivers/staging/rtl8723au/include/odm_precomp.h | 1 - 2 files changed, 50 deletions(-) delete mode 100644 drivers/staging/rtl8723au/include/odm_RegDefine11AC.h (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/odm_RegDefine11AC.h b/drivers/staging/rtl8723au/include/odm_RegDefine11AC.h deleted file mode 100644 index 77b7acec5ea8..000000000000 --- a/drivers/staging/rtl8723au/include/odm_RegDefine11AC.h +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek 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. - * - ******************************************************************************/ - -#ifndef __ODM_REGDEFINE11AC_H__ -#define __ODM_REGDEFINE11AC_H__ - -/* 2 RF REG LIST */ - - - -/* 2 BB REG LIST */ -/* PAGE 8 */ -/* PAGE 9 */ -#define ODM_REG_OFDM_FA_RST_11AC 0x9A4 -/* PAGE A */ -#define ODM_REG_CCK_CCA_11AC 0xA0A -#define ODM_REG_CCK_FA_RST_11AC 0xA2C -#define ODM_REG_CCK_FA_11AC 0xA5C -/* PAGE C */ -#define ODM_REG_IGI_A_11AC 0xC50 -/* PAGE E */ -#define ODM_REG_IGI_B_11AC 0xE50 -/* PAGE F */ -#define ODM_REG_OFDM_FA_11AC 0xF48 - - -/* 2 MAC REG LIST */ - - - - -/* DIG Related */ -#define ODM_BIT_IGI_11AC 0xFFFFFFFF - - - -#endif diff --git a/drivers/staging/rtl8723au/include/odm_precomp.h b/drivers/staging/rtl8723au/include/odm_precomp.h index 69de888d884c..fb793c8ba7f8 100644 --- a/drivers/staging/rtl8723au/include/odm_precomp.h +++ b/drivers/staging/rtl8723au/include/odm_precomp.h @@ -32,7 +32,6 @@ #include "odm.h" #include "odm_HWConfig.h" #include "odm_debug.h" -#include "odm_RegDefine11AC.h" #include "odm_RegDefine11N.h" #include "HalDMOutSrc8723A.h" /* for IQK,LCK,Power-tracking */ -- cgit From 2e8d47e039ec09959800ce559ed6396c4a29351d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 17 Jul 2014 22:59:57 +0200 Subject: staging: rtl8723au: Remove pointless IS_STA_VALID() macro Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 ++++---- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 2 +- drivers/staging/rtl8723au/include/odm.h | 4 ---- 3 files changed, 5 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index f21861e74390..ce192de04758 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -570,7 +570,7 @@ void odm_CommonInfoSelfUpdate23a(struct dm_odm_t *pDM_Odm) for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) { pEntry = pDM_Odm->pODM_StaInfo[i]; - if (IS_STA_VALID(pEntry)) + if (pEntry) EntryCnt++; } if (EntryCnt == 1) @@ -1216,7 +1216,7 @@ u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, /* u8 WirelessMode =*(pDM_Odm->pWirelessMode); */ pEntry = pDM_Odm->pODM_StaInfo[macid]; - if (!IS_STA_VALID(pEntry)) + if (!pEntry) return ra_mask; WirelessMode = pEntry->wireless_mode; @@ -1338,7 +1338,7 @@ void odm_RefreshRateAdaptiveMask23aCE23a(struct dm_odm_t *pDM_Odm) for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) { struct sta_info *pstat = pDM_Odm->pODM_StaInfo[i]; - if (IS_STA_VALID(pstat)) { + if (pstat) { if (ODM_RAStateCheck23a(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, false, &pstat->rssi_level)) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", @@ -1480,7 +1480,7 @@ void odm_RSSIMonitorCheck23aCE(struct dm_odm_t *pDM_Odm) for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) { psta = pDM_Odm->pODM_StaInfo[i]; - if (IS_STA_VALID(psta)) { + if (psta) { if (psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB) tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB; diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 26fbf6c38b99..ab820a888c0f 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -291,7 +291,7 @@ static void odm_Process_RSSIForDM(struct dm_odm_t *pDM_Odm, return; pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID]; - if (!IS_STA_VALID(pEntry)) + if (!pEntry) return; if ((!pPktinfo->bPacketMatchBSSID)) return; diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index b466a81b3364..b2f661e4e176 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -1001,10 +1001,6 @@ extern u8 CCKSwingTable_Ch1423A [CCK_TABLE_SIZE][8]; -/* */ -/* check Sta pointer valid or not */ -/* */ -#define IS_STA_VALID(pSta) (pSta) /* 20100514 Joseph: Add definition for antenna switching test after link. */ /* This indicates two different the steps. */ /* In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. */ -- cgit From bda230cf25a008aa083fc79f277116da2bfd5e4e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 10:02:02 -0700 Subject: staging: comedi: ni_670x: fix compile on ARCH=arm The kbuild test robot reported a build error on ARCH=arm about implicit declaration of the functions 'kmalloc' and 'kfree'. On ARCH=x86 the slab.h header is indirectly included by pci.h, this does not occur on ARCH=arm. Include slab.h directly instead of relying on some other header to include it. Signed-off-by: H Hartley Sweeten Cc: kbuild test robot Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_670x.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c index 709119c9e089..a054bd51ed21 100644 --- a/drivers/staging/comedi/drivers/ni_670x.c +++ b/drivers/staging/comedi/drivers/ni_670x.c @@ -39,6 +39,7 @@ Commands are not supported. #include #include #include +#include #include "../comedidev.h" -- cgit From cefe93362efa05937eeefa165008863145e0194e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:28 -0700 Subject: staging: comedi: s626: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index b276ce485c5f..b7c5d8168e98 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -174,8 +174,8 @@ static void s626_debi_transfer(struct comedi_device *dev) udelay(1); } if (i == timeout) - comedi_error(dev, - "Timeout while uploading to DEBI control register."); + dev_err(dev->class_dev, + "Timeout while uploading to DEBI control register\n"); /* Wait until DEBI transfer is done */ for (i = 0; i < timeout; i++) { @@ -184,7 +184,7 @@ static void s626_debi_transfer(struct comedi_device *dev) udelay(1); } if (i == timeout) - comedi_error(dev, "DEBI transfer timeout."); + dev_err(dev->class_dev, "DEBI transfer timeout\n"); } /* @@ -427,7 +427,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) ret = comedi_timeout(dev, NULL, NULL, s626_send_dac_eoc, s626_send_dac_wait_not_mc1_a2out); if (ret) { - comedi_error(dev, "DMA transfer timeout."); + dev_err(dev->class_dev, "DMA transfer timeout\n"); return ret; } @@ -452,7 +452,8 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) ret = comedi_timeout(dev, NULL, NULL, s626_send_dac_eoc, s626_send_dac_wait_ssr_af2_out); if (ret) { - comedi_error(dev, "TSL timeout waiting for slot 1 to execute."); + dev_err(dev->class_dev, + "TSL timeout waiting for slot 1 to execute\n"); return ret; } @@ -497,8 +498,8 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) ret = comedi_timeout(dev, NULL, NULL, s626_send_dac_eoc, s626_send_dac_wait_fb_buffer2_msb_00); if (ret) { - comedi_error(dev, - "TSL timeout waiting for slot 0 to execute."); + dev_err(dev->class_dev, + "TSL timeout waiting for slot 0 to execute\n"); return ret; } } @@ -522,7 +523,8 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) ret = comedi_timeout(dev, NULL, NULL, s626_send_dac_eoc, s626_send_dac_wait_fb_buffer2_msb_ff); if (ret) { - comedi_error(dev, "TSL timeout waiting for slot 0 to execute."); + dev_err(dev->class_dev, + "TSL timeout waiting for slot 0 to execute\n"); return ret; } return 0; -- cgit From f25a9ba271676469ecb9c0c7559e52af2f3f32fe Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:29 -0700 Subject: staging: comedi: pcl818: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl818.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl818.c b/drivers/staging/comedi/drivers/pcl818.c index 7d00ae639d38..000dbf841e45 100644 --- a/drivers/staging/comedi/drivers/pcl818.c +++ b/drivers/staging/comedi/drivers/pcl818.c @@ -551,7 +551,7 @@ static void pcl818_handle_eoc(struct comedi_device *dev, unsigned int val; if (pcl818_ai_eoc(dev, s, NULL, 0)) { - comedi_error(dev, "A/D mode1/3 IRQ without DRDY!"); + dev_err(dev->class_dev, "A/D mode1/3 IRQ without DRDY!\n"); s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; return; } @@ -608,13 +608,14 @@ static void pcl818_handle_fifo(struct comedi_device *dev, status = inb(dev->iobase + PCL818_FI_STATUS); if (status & 4) { - comedi_error(dev, "A/D mode1/3 FIFO overflow!"); + dev_err(dev->class_dev, "A/D mode1/3 FIFO overflow!\n"); s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; return; } if (status & 1) { - comedi_error(dev, "A/D mode1/3 FIFO interrupt without data!"); + dev_err(dev->class_dev, + "A/D mode1/3 FIFO interrupt without data!\n"); s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; return; } @@ -682,7 +683,7 @@ static int check_channel_list(struct comedi_device *dev, /* correct channel and range number check itself comedi/range.c */ if (n_chan < 1) { - comedi_error(dev, "range/channel list is empty!"); + dev_err(dev->class_dev, "range/channel list is empty!\n"); return 0; } -- cgit From d656a35652c76bd68dc5f6a94d96f6a9d436fb0a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:30 -0700 Subject: staging: comedi: pcl816: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl816.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl816.c b/drivers/staging/comedi/drivers/pcl816.c index eda9986d9cf8..7cd54359af64 100644 --- a/drivers/staging/comedi/drivers/pcl816.c +++ b/drivers/staging/comedi/drivers/pcl816.c @@ -552,7 +552,7 @@ check_channel_list(struct comedi_device *dev, /* correct channel and range number check itself comedi/range.c */ if (chanlen < 1) { - comedi_error(dev, "range/channel list is empty!"); + dev_err(dev->class_dev, "range/channel list is empty!\n"); return 0; } -- cgit From 73e7d412b5abd0cfd734425975e26570ce2ccfbd Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:31 -0700 Subject: staging: comedi: pcl711: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl711.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl711.c b/drivers/staging/comedi/drivers/pcl711.c index c38d97a9a899..40f9136f0bb6 100644 --- a/drivers/staging/comedi/drivers/pcl711.c +++ b/drivers/staging/comedi/drivers/pcl711.c @@ -206,7 +206,7 @@ static irqreturn_t pcl711_interrupt(int irq, void *d) unsigned int data; if (!dev->attached) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); return IRQ_HANDLED; } -- cgit From 74e9607b978e836d2b6d99cc3ecaa9ca968e0dc5 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:32 -0700 Subject: staging: comedi: ni_pcidio: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcidio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index ac800daa291a..7bc4b9f127f3 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -319,7 +319,7 @@ static int ni_pcidio_request_di_mite_channel(struct comedi_device *dev) devpriv->di_mite_ring, 1, 2); if (devpriv->di_mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, "failed to reserve mite dma channel."); + dev_err(dev->class_dev, "failed to reserve mite dma channel\n"); return -EBUSY; } devpriv->di_mite_chan->dir = COMEDI_INPUT; -- cgit From 5ac1d82bb41942245f6605771a7defb8e931e317 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:33 -0700 Subject: staging: comedi: ni_mio_common: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 56 ++++++++++++++------------ 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index f00290a93412..751a1f418a9c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -771,8 +771,8 @@ static int ni_request_ai_mite_channel(struct comedi_device *dev) mite_request_channel(devpriv->mite, devpriv->ai_mite_ring); if (devpriv->ai_mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, - "failed to reserve mite dma channel for analog input."); + dev_err(dev->class_dev, + "failed to reserve mite dma channel for analog input\n"); return -EBUSY; } devpriv->ai_mite_chan->dir = COMEDI_INPUT; @@ -792,8 +792,8 @@ static int ni_request_ao_mite_channel(struct comedi_device *dev) mite_request_channel(devpriv->mite, devpriv->ao_mite_ring); if (devpriv->ao_mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, - "failed to reserve mite dma channel for analog outut."); + dev_err(dev->class_dev, + "failed to reserve mite dma channel for analog outut\n"); return -EBUSY; } devpriv->ao_mite_chan->dir = COMEDI_OUTPUT; @@ -818,8 +818,8 @@ static int ni_request_gpct_mite_channel(struct comedi_device *dev, devpriv->gpct_mite_ring[gpct_index]); if (mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, - "failed to reserve mite dma channel for counter."); + dev_err(dev->class_dev, + "failed to reserve mite dma channel for counter\n"); return -EBUSY; } mite_chan->dir = direction; @@ -844,8 +844,8 @@ static int ni_request_cdo_mite_channel(struct comedi_device *dev) mite_request_channel(devpriv->mite, devpriv->cdo_mite_ring); if (devpriv->cdo_mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, - "failed to reserve mite dma channel for correlated digital outut."); + dev_err(dev->class_dev, + "failed to reserve mite dma channel for correlated digital output\n"); return -EBUSY; } devpriv->cdo_mite_chan->dir = COMEDI_OUTPUT; @@ -971,7 +971,7 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) udelay(1); } if (i == timeout) - comedi_error(dev, "FIFO flush timeout."); + dev_err(dev->class_dev, "FIFO flush timeout\n"); } else { ni_stc_writew(dev, 1, ADC_FIFO_Clear); if (devpriv->is_625x) { @@ -1126,7 +1126,7 @@ static int ni_ao_wait_for_dma_load(struct comedi_device *dev) udelay(10); } if (i == timeout) { - comedi_error(dev, "timed out waiting for dma load"); + dev_err(dev->class_dev, "timed out waiting for dma load\n"); return -EPIPE; } return 0; @@ -1291,7 +1291,8 @@ static void ni_ai_fifo_read(struct comedi_device *dev, } else { if (n > sizeof(devpriv->ai_fifo_buffer) / sizeof(devpriv->ai_fifo_buffer[0])) { - comedi_error(dev, "bug! ai_fifo_buffer too small"); + dev_err(dev->class_dev, + "bug! ai_fifo_buffer too small\n"); async->events |= COMEDI_CB_ERROR; return; } @@ -2438,7 +2439,7 @@ static int ni_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) int interrupt_a_enable = 0; if (dev->irq == 0) { - comedi_error(dev, "cannot run command without an irq"); + dev_err(dev->class_dev, "cannot run command without an irq\n"); return -EIO; } ni_clear_ai_fifo(dev); @@ -3088,8 +3089,8 @@ static int ni_ao_inttrig(struct comedi_device *dev, break; } if (i == timeout) { - comedi_error(dev, - "timed out waiting for AO_TMRDACWRs_In_Progress_St to clear"); + dev_err(dev->class_dev, + "timed out waiting for AO_TMRDACWRs_In_Progress_St to clear\n"); return -EIO; } /* @@ -3121,7 +3122,7 @@ static int ni_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned trigvar; if (dev->irq == 0) { - comedi_error(dev, "cannot run command without an irq"); + dev_err(dev->class_dev, "cannot run command without an irq\n"); return -EIO; } @@ -3611,7 +3612,7 @@ static int ni_cdo_inttrig(struct comedi_device *dev, mite_prep_dma(devpriv->cdo_mite_chan, 32, 32); mite_dma_arm(devpriv->cdo_mite_chan); } else { - comedi_error(dev, "BUG: no cdo mite channel?"); + dev_err(dev->class_dev, "BUG: no cdo mite channel?\n"); retval = -EIO; } spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); @@ -3629,7 +3630,7 @@ static int ni_cdo_inttrig(struct comedi_device *dev, udelay(10); } if (i == timeout) { - comedi_error(dev, "dma failed to fill cdo fifo!"); + dev_err(dev->class_dev, "dma failed to fill cdo fifo!\n"); s->cancel(dev, s); return -EIO; } @@ -3664,8 +3665,8 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) ni_writel(dev, CDO_SW_Update_Bit, M_Offset_CDIO_Command); ni_writel(dev, s->io_bits, M_Offset_CDO_Mask_Enable); } else { - comedi_error(dev, - "attempted to run digital output command with no lines configured as outputs"); + dev_err(dev->class_dev, + "attempted to run digital output command with no lines configured as outputs\n"); return -EIO; } retval = ni_request_cdo_mite_channel(dev); @@ -4769,7 +4770,8 @@ static void cs5529_command(struct comedi_device *dev, unsigned short value) } /* printk("looped %i times writing command to cs5529\n", i); */ if (i == timeout) - comedi_error(dev, "possible problem - never saw adc go busy?"); + dev_err(dev->class_dev, + "possible problem - never saw adc go busy?\n"); } static int cs5529_do_conversion(struct comedi_device *dev, @@ -4781,8 +4783,8 @@ static int cs5529_do_conversion(struct comedi_device *dev, cs5529_command(dev, CSCMD_COMMAND | CSCMD_SINGLE_CONVERSION); retval = cs5529_wait_for_idle(dev); if (retval) { - comedi_error(dev, - "timeout or signal in cs5529_do_conversion()"); + dev_err(dev->class_dev, + "timeout or signal in cs5529_do_conversion()\n"); return -ETIME; } status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); @@ -4841,7 +4843,8 @@ static void cs5529_config_write(struct comedi_device *dev, unsigned int value, reg_select_bits &= CSCMD_REGISTER_SELECT_MASK; cs5529_command(dev, CSCMD_COMMAND | reg_select_bits); if (cs5529_wait_for_idle(dev)) - comedi_error(dev, "time or signal in cs5529_config_write()"); + dev_err(dev->class_dev, + "timeout or signal in %s\n", __func__); } static int init_cs5529(struct comedi_device *dev) @@ -4861,7 +4864,8 @@ static int init_cs5529(struct comedi_device *dev) cs5529_config_write(dev, config_bits | CSCFG_SELF_CAL_OFFSET, CSCMD_CONFIG_REGISTER); if (cs5529_wait_for_idle(dev)) - comedi_error(dev, "timeout or signal in init_cs5529()\n"); + dev_err(dev->class_dev, + "timeout or signal in %s\n", __func__); #endif return 0; } @@ -5264,8 +5268,8 @@ static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) retval = ni_request_gpct_mite_channel(dev, counter->counter_index, COMEDI_INPUT); if (retval) { - comedi_error(dev, - "no dma channel available for use by counter"); + dev_err(dev->class_dev, + "no dma channel available for use by counter\n"); return retval; } ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); -- cgit From b3780f1da1b1d4e0af32b0f71b590b2bfd9c3e63 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:34 -0700 Subject: staging: comedi: ni_labpc: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 34ffa2e43657..6fb405eb0933 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -895,7 +895,7 @@ static int labpc_drain_fifo(struct comedi_device *dev) devpriv->stat1 = devpriv->read_byte(dev->iobase + STAT1_REG); } if (i == timeout) { - comedi_error(dev, "ai timeout, fifo never empties"); + dev_err(dev->class_dev, "ai timeout, fifo never empties\n"); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; return -1; } @@ -926,7 +926,7 @@ static irqreturn_t labpc_interrupt(int irq, void *d) struct comedi_cmd *cmd; if (!dev->attached) { - comedi_error(dev, "premature interrupt"); + dev_err(dev->class_dev, "premature interrupt\n"); return IRQ_HANDLED; } @@ -950,7 +950,7 @@ static irqreturn_t labpc_interrupt(int irq, void *d) devpriv->write_byte(0x1, dev->iobase + ADC_FIFO_CLEAR_REG); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); - comedi_error(dev, "overrun"); + dev_err(dev->class_dev, "overrun\n"); return IRQ_HANDLED; } @@ -960,7 +960,7 @@ static irqreturn_t labpc_interrupt(int irq, void *d) labpc_drain_fifo(dev); if (devpriv->stat1 & STAT1_CNTINT) { - comedi_error(dev, "handled timer interrupt?"); + dev_err(dev->class_dev, "handled timer interrupt?\n"); /* clear it */ devpriv->write_byte(0x1, dev->iobase + TIMER_CLEAR_REG); } @@ -970,7 +970,7 @@ static irqreturn_t labpc_interrupt(int irq, void *d) devpriv->write_byte(0x1, dev->iobase + ADC_FIFO_CLEAR_REG); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); - comedi_error(dev, "overflow"); + dev_err(dev->class_dev, "overflow\n"); return IRQ_HANDLED; } /* handle external stop trigger */ @@ -1186,7 +1186,7 @@ static int labpc_eeprom_write(struct comedi_device *dev, break; } if (i == timeout) { - comedi_error(dev, "eeprom write timed out"); + dev_err(dev->class_dev, "eeprom write timed out\n"); return -ETIME; } /* update software copy of eeprom */ -- cgit From 770bc73dc5d030d26e5179b819bdcf021ff5d6e3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:35 -0700 Subject: staging: comedi: ni_at_a2150: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_at_a2150.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index 465c729ee685..86c05e382d09 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -179,7 +179,7 @@ static irqreturn_t a2150_interrupt(int irq, void *d) static const int sample_size = sizeof(devpriv->dma_buffer[0]); if (!dev->attached) { - comedi_error(dev, "premature interrupt"); + dev_err(dev->class_dev, "premature interrupt\n"); return IRQ_HANDLED; } /* initialize async here to make sure s is not NULL */ @@ -189,18 +189,19 @@ static irqreturn_t a2150_interrupt(int irq, void *d) status = inw(dev->iobase + STATUS_REG); if ((status & INTR_BIT) == 0) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); return IRQ_NONE; } if (status & OVFL_BIT) { - comedi_error(dev, "fifo overflow"); + dev_err(dev->class_dev, "fifo overflow\n"); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); } if ((status & DMA_TC_BIT) == 0) { - comedi_error(dev, "caught non-dma interrupt? Aborting."); + dev_err(dev->class_dev, + "caught non-dma interrupt? Aborting.\n"); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); return IRQ_HANDLED; @@ -408,8 +409,8 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned int trigger_bits; if (cmd->flags & TRIG_RT) { - comedi_error(dev, - " dma incompatible with hard real-time interrupt (TRIG_RT), aborting"); + dev_err(dev->class_dev, + "dma incompatible with hard real-time interrupt (TRIG_RT), aborting\n"); return -1; } /* clear fifo and reset triggering circuitry */ @@ -490,7 +491,7 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) trigger_bits |= HW_TRIG_EN; } else if (cmd->start_src == TRIG_OTHER) { /* XXX add support for level/slope start trigger using TRIG_OTHER */ - comedi_error(dev, "you shouldn't see this?"); + dev_err(dev->class_dev, "you shouldn't see this?\n"); } /* send trigger config bits */ outw(trigger_bits, dev->iobase + TRIGGER_REG); -- cgit From 22bc059eb4bf9c416c97e69251258a261454d0ce Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:36 -0700 Subject: staging: comedi: ni_660x: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 673fa52c5cf3..f0580568d53a 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -710,8 +710,8 @@ static int ni_660x_request_mite_channel(struct comedi_device *dev, mite_ring(devpriv, counter)); if (mite_chan == NULL) { spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - comedi_error(dev, - "failed to reserve mite dma channel for counter."); + dev_err(dev->class_dev, + "failed to reserve mite dma channel for counter\n"); return -EBUSY; } mite_chan->dir = direction; @@ -745,8 +745,8 @@ static int ni_660x_cmd(struct comedi_device *dev, struct comedi_subdevice *s) retval = ni_660x_request_mite_channel(dev, counter, COMEDI_INPUT); if (retval) { - comedi_error(dev, - "no dma channel available for use by counter"); + dev_err(dev->class_dev, + "no dma channel available for use by counter\n"); return retval; } ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); -- cgit From e176d78c5cda47ff2e43fe3202eee2dc91a209f0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:37 -0700 Subject: staging: comedi: cb_pcidas64: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 33 +++++++++++++++------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 0fd73e7f34c3..1e69c82e2315 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1160,7 +1160,7 @@ static unsigned int ai_range_bits_6xxx(const struct comedi_device *dev, bits = 0x700; break; default: - comedi_error(dev, "bug! in ai_range_bits_6xxx"); + dev_err(dev->class_dev, "bug! in %s\n", __func__); break; } if (range->min == 0) @@ -1187,9 +1187,9 @@ static void set_dac_range_bits(struct comedi_device *dev, unsigned int code = thisboard->ao_range_code[range]; if (channel > 1) - comedi_error(dev, "bug! bad channel?"); + dev_err(dev->class_dev, "bug! bad channel?\n"); if (code & ~0x3) - comedi_error(dev, "bug! bad range code?"); + dev_err(dev->class_dev, "bug! bad range code?\n"); *bits &= ~(0x3 << (2 * channel)); *bits |= code << (2 * channel); @@ -1531,10 +1531,10 @@ static int alloc_and_init_dma_members(struct comedi_device *dev) static inline void warn_external_queue(struct comedi_device *dev) { - comedi_error(dev, - "AO command and AI external channel queue cannot be used simultaneously."); - comedi_error(dev, - "Use internal AI channel queue (channels must be consecutive and use same range/aref)"); + dev_err(dev->class_dev, + "AO command and AI external channel queue cannot be used simultaneously\n"); + dev_err(dev->class_dev, + "Use internal AI channel queue (channels must be consecutive and use same range/aref)\n"); } /* Their i2c requires a huge delay on setting clock or data high for some reason */ @@ -1648,7 +1648,8 @@ static void i2c_write(struct comedi_device *dev, unsigned int address, /* get acknowledge */ if (i2c_read_ack(dev) != 0) { - comedi_error(dev, "i2c write failed: no acknowledge"); + dev_err(dev->class_dev, "%s failed: no acknowledge\n", + __func__); i2c_stop(dev); return; } @@ -1656,7 +1657,8 @@ static void i2c_write(struct comedi_device *dev, unsigned int address, for (i = 0; i < length; i++) { i2c_write_byte(dev, data[i]); if (i2c_read_ack(dev) != 0) { - comedi_error(dev, "i2c write failed: no acknowledge"); + dev_err(dev->class_dev, "%s failed: no acknowledge\n", + __func__); i2c_stop(dev); return; } @@ -2234,7 +2236,7 @@ static uint32_t ai_convert_counter_4020(struct comedi_device *dev, divisor = devpriv->ext_clock.divisor; break; default: /* should never happen */ - comedi_error(dev, "bug! failed to set ai pacing!"); + dev_err(dev->class_dev, "bug! failed to set ai pacing!\n"); divisor = 1000; break; } @@ -2767,7 +2769,7 @@ static void handle_ai_interrupt(struct comedi_device *dev, /* check for fifo overrun */ if (status & ADC_OVERRUN_BIT) { - comedi_error(dev, "fifo overrun"); + dev_err(dev->class_dev, "fifo overrun\n"); async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; } /* spin lock makes sure no one else changes plx dma control reg */ @@ -3130,7 +3132,8 @@ static void set_dac_select_reg(struct comedi_device *dev, first_channel = CR_CHAN(cmd->chanlist[0]); last_channel = CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1]); if (last_channel < first_channel) - comedi_error(dev, "bug! last ao channel < first ao channel"); + dev_err(dev->class_dev, + "bug! last ao channel < first ao channel\n"); bits = (first_channel & 0x7) | (last_channel & 0x7) << 3; @@ -3153,7 +3156,7 @@ static void set_dac_interval_regs(struct comedi_device *dev, divisor = get_ao_divisor(cmd->scan_begin_arg, cmd->flags); if (divisor > max_counter_value) { - comedi_error(dev, "bug! ao divisor too big"); + dev_err(dev->class_dev, "bug! ao divisor too big\n"); divisor = max_counter_value; } writew(divisor & 0xffff, @@ -3488,7 +3491,7 @@ static int caldac_8800_write(struct comedi_device *dev, unsigned int address, static const int caldac_8800_udelay = 1; if (address >= num_caldac_channels) { - comedi_error(dev, "illegal caldac channel"); + dev_err(dev->class_dev, "illegal caldac channel\n"); return -1; } for (bit = 1 << (bitstream_length - 1); bit; bit >>= 1) { @@ -3560,7 +3563,7 @@ static int caldac_i2c_write(struct comedi_device *dev, serial_bytes[0] = GAIN_1_3; break; default: - comedi_error(dev, "invalid caldac channel\n"); + dev_err(dev->class_dev, "invalid caldac channel\n"); return -1; } serial_bytes[1] = NOT_CLEAR_REGISTERS | ((value >> 8) & 0xf); -- cgit From 3df73e07d552051dfaf98c07f9bb818bbff08268 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:38 -0700 Subject: staging: comedi: icp_multi: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/icp_multi.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/icp_multi.c b/drivers/staging/comedi/drivers/icp_multi.c index 0b8b2162b76b..acc80e22311c 100644 --- a/drivers/staging/comedi/drivers/icp_multi.c +++ b/drivers/staging/comedi/drivers/icp_multi.c @@ -420,7 +420,7 @@ static int check_channel_list(struct comedi_device *dev, /* Check that we at least have one channel to check */ if (n_chan < 1) { - comedi_error(dev, "range/channel list is empty!"); + dev_err(dev->class_dev, "range/channel list is empty!\n"); return 0; } /* Check all channels */ @@ -428,14 +428,14 @@ static int check_channel_list(struct comedi_device *dev, /* Check that channel number is < maximum */ if (CR_AREF(chanlist[i]) == AREF_DIFF) { if (CR_CHAN(chanlist[i]) > (s->nchan / 2)) { - comedi_error(dev, - "Incorrect differential ai ch-nr"); + dev_err(dev->class_dev, + "Incorrect differential ai ch-nr\n"); return 0; } } else { if (CR_CHAN(chanlist[i]) > s->n_chan) { - comedi_error(dev, - "Incorrect ai channel number"); + dev_err(dev->class_dev, + "Incorrect ai channel number\n"); return 0; } } -- cgit From 5a96ffbe795d71347fbebac9cf29772543d22961 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:39 -0700 Subject: staging: comedi: dt282x: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt282x.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index cacb4f40bbba..5de26745783a 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -438,7 +438,8 @@ static void dt282x_munge(struct comedi_device *dev, int i; if (nbytes % 2) - comedi_error(dev, "bug! odd number of bytes from dma xfer"); + dev_err(dev->class_dev, + "bug! odd number of bytes from dma xfer\n"); for (i = 0; i < nbytes / 2; i++) { val = buf[i]; @@ -528,7 +529,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) int handled = 0; if (!dev->attached) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); return IRQ_HANDLED; } @@ -544,13 +545,13 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) } if (adcsr & DT2821_ADCSR_ADERR) { if (devpriv->nread != 0) { - comedi_error(dev, "A/D error"); + dev_err(dev->class_dev, "A/D error\n"); s->async->events |= COMEDI_CB_ERROR; } handled = 1; } if (dacsr & DT2821_DACSR_DAERR) { - comedi_error(dev, "D/A error"); + dev_err(dev->class_dev, "D/A error\n"); s_ao->async->events |= COMEDI_CB_ERROR; handled = 1; } -- cgit From dffe87cd683b51bda103255a163bbeb5e46f9e36 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:40 -0700 Subject: staging: comedi: dt2814: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt2814.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt2814.c b/drivers/staging/comedi/drivers/dt2814.c index 904c9f0e4afb..4d5325345302 100644 --- a/drivers/staging/comedi/drivers/dt2814.c +++ b/drivers/staging/comedi/drivers/dt2814.c @@ -209,7 +209,7 @@ static irqreturn_t dt2814_interrupt(int irq, void *d) int data; if (!dev->attached) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); return IRQ_HANDLED; } -- cgit From 2d60dd4a75bf1ddd60629c4d3fc5279205e701e2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:41 -0700 Subject: staging: comedi: dmm32at: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dmm32at.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dmm32at.c b/drivers/staging/comedi/drivers/dmm32at.c index ad7a5d53b97b..181c34462a4d 100644 --- a/drivers/staging/comedi/drivers/dmm32at.c +++ b/drivers/staging/comedi/drivers/dmm32at.c @@ -491,7 +491,7 @@ static irqreturn_t dmm32at_isr(int irq, void *d) int i; if (!dev->attached) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); return IRQ_HANDLED; } -- cgit From 6d65caa5214718cb21a154cdc5bbe0cf72873ef0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:42 -0700 Subject: staging: comedi: das1800: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index e9c24d050a26..e4234292b1f7 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -654,7 +654,7 @@ static void das1800_ai_handler(struct comedi_device *dev) if (status & OVF) { /* clear OVF interrupt bit */ outb(CLEAR_INTR_MASK & ~OVF, dev->iobase + DAS1800_STATUS); - comedi_error(dev, "DAS1800 FIFO overflow"); + dev_err(dev->class_dev, "FIFO overflow\n"); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); return; @@ -696,7 +696,7 @@ static irqreturn_t das1800_interrupt(int irq, void *d) unsigned int status; if (!dev->attached) { - comedi_error(dev, "premature interrupt"); + dev_err(dev->class_dev, "premature interrupt\n"); return IRQ_HANDLED; } @@ -1179,7 +1179,7 @@ static int das1800_ai_rinsn(struct comedi_device *dev, break; } if (i == timeout) { - comedi_error(dev, "timeout"); + dev_err(dev->class_dev, "timeout\n"); n = -ETIME; goto exit; } -- cgit From b07262b0896b67b505a4ce5d25e764d8b0417e88 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:43 -0700 Subject: staging: comedi: das16m1: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das16m1.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c index 40365b024b9e..2e9cbec404f8 100644 --- a/drivers/staging/comedi/drivers/das16m1.c +++ b/drivers/staging/comedi/drivers/das16m1.c @@ -460,7 +460,7 @@ static void das16m1_handler(struct comedi_device *dev, unsigned int status) * overrun interrupts, but we might as well try */ if (status & OVRUN) { async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; - comedi_error(dev, "fifo overflow"); + dev_err(dev->class_dev, "fifo overflow\n"); } cfc_handle_events(dev, s); @@ -486,7 +486,7 @@ static irqreturn_t das16m1_interrupt(int irq, void *d) struct comedi_device *dev = d; if (!dev->attached) { - comedi_error(dev, "premature interrupt"); + dev_err(dev->class_dev, "premature interrupt\n"); return IRQ_HANDLED; } /* prevent race with comedi_poll() */ @@ -495,7 +495,7 @@ static irqreturn_t das16m1_interrupt(int irq, void *d) status = inb(dev->iobase + DAS16M1_CS); if ((status & (IRQDATA | OVRUN)) == 0) { - comedi_error(dev, "spurious interrupt"); + dev_err(dev->class_dev, "spurious interrupt\n"); spin_unlock(&dev->spinlock); return IRQ_NONE; } -- cgit From 85f3f14e823ffaf78335fbc32febdbb0e6ce8d9f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:44 -0700 Subject: staging: comedi: das08: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das08.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index 6e55ba5787b7..fcf916a80c8d 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -273,7 +273,7 @@ static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, else data[n] = (1 << 15) - (lsb | (msb & 0x7f) << 8); } else { - comedi_error(dev, "bug! unknown ai encoding"); + dev_err(dev->class_dev, "bug! unknown ai encoding\n"); return -1; } } -- cgit From b8de3cc4489be16ef22db2577ffd5824360601d3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:45 -0700 Subject: staging: comedi: comedi_test: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/comedi_test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/comedi_test.c b/drivers/staging/comedi/drivers/comedi_test.c index 1e2fb91b78fe..845a67905ca6 100644 --- a/drivers/staging/comedi/drivers/comedi_test.c +++ b/drivers/staging/comedi/drivers/comedi_test.c @@ -303,8 +303,8 @@ static int waveform_ai_cmd(struct comedi_device *dev, struct comedi_cmd *cmd = &s->async->cmd; if (cmd->flags & TRIG_RT) { - comedi_error(dev, - "commands at RT priority not supported in this driver"); + dev_err(dev->class_dev, + "commands at RT priority not supported in this driver\n"); return -1; } -- cgit From 7ef2890428165abd1936173360f672fda16dda8e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:46 -0700 Subject: staging: comedi: cb_pcidas: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c index 9badd1938b5d..8e82383d2fb8 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas.c +++ b/drivers/staging/comedi/drivers/cb_pcidas.c @@ -621,7 +621,7 @@ static int caldac_8800_write(struct comedi_device *dev, unsigned int address, static const int caldac_8800_udelay = 1; if (address >= num_caldac_channels) { - comedi_error(dev, "illegal caldac channel"); + dev_err(dev->class_dev, "illegal caldac channel\n"); return -1; } @@ -773,7 +773,7 @@ static int cb_pcidas_trimpot_write(struct comedi_device *dev, trimpot_8402_write(dev, channel, value); break; default: - comedi_error(dev, "driver bug?"); + dev_err(dev->class_dev, "driver bug?\n"); return -1; } @@ -1249,7 +1249,7 @@ static int cb_pcidas_ao_cmd(struct comedi_device *dev, break; default: spin_unlock_irqrestore(&dev->spinlock, flags); - comedi_error(dev, "error setting dac pacer source"); + dev_err(dev->class_dev, "error setting dac pacer source\n"); return -1; } spin_unlock_irqrestore(&dev->spinlock, flags); @@ -1300,7 +1300,7 @@ static void handle_ao_interrupt(struct comedi_device *dev, unsigned int status) if (cmd->stop_src == TRIG_NONE || (cmd->stop_src == TRIG_COUNT && devpriv->ao_count)) { - comedi_error(dev, "dac fifo underflow"); + dev_err(dev->class_dev, "dac fifo underflow\n"); async->events |= COMEDI_CB_ERROR; } async->events |= COMEDI_CB_EOA; @@ -1411,8 +1411,8 @@ static irqreturn_t cb_pcidas_interrupt(int irq, void *d) devpriv->control_status + INT_ADCFIFO); spin_unlock_irqrestore(&dev->spinlock, flags); } else if (status & EOAI) { - comedi_error(dev, - "bug! encountered end of acquisition interrupt?"); + dev_err(dev->class_dev, + "bug! encountered end of acquisition interrupt?\n"); /* clear EOA interrupt latch */ spin_lock_irqsave(&dev->spinlock, flags); outw(devpriv->adc_fifo_bits | EOAI, @@ -1421,7 +1421,7 @@ static irqreturn_t cb_pcidas_interrupt(int irq, void *d) } /* check for fifo overflow */ if (status & LADFUL) { - comedi_error(dev, "fifo overflow"); + dev_err(dev->class_dev, "fifo overflow\n"); /* clear overflow interrupt latch */ spin_lock_irqsave(&dev->spinlock, flags); outw(devpriv->adc_fifo_bits | LADFUL, -- cgit From 8f35f91838189c0be82d61d1bfafdb3e7af46d53 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:47 -0700 Subject: staging: comedi: amplc_pci230: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index f00344902216..2c318fc721e9 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -1167,7 +1167,7 @@ static void pci230_handle_ao_nofifo(struct comedi_device *dev, if (ret == 0) { s->async->events |= COMEDI_CB_OVERFLOW; pci230_ao_stop(dev, s); - comedi_error(dev, "AO buffer underrun"); + dev_err(dev->class_dev, "AO buffer underrun\n"); return; } /* Write value to DAC. */ @@ -1215,7 +1215,7 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, if (events == 0) { /* Check for FIFO underrun. */ if ((dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) != 0) { - comedi_error(dev, "AO FIFO underrun"); + dev_err(dev->class_dev, "AO FIFO underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } /* Check for buffer underrun if FIFO less than half full @@ -1223,7 +1223,7 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, * interrupts). */ if ((num_scans == 0) && ((dacstat & PCI230P2_DAC_FIFO_HALF) == 0)) { - comedi_error(dev, "AO buffer underrun"); + dev_err(dev->class_dev, "AO buffer underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } } @@ -1270,7 +1270,7 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, /* Check if FIFO underrun occurred while writing to FIFO. */ dacstat = inw(dev->iobase + PCI230_DACCON); if ((dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) != 0) { - comedi_error(dev, "AO FIFO underrun"); + dev_err(dev->class_dev, "AO FIFO underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } } @@ -2181,7 +2181,7 @@ static void pci230_handle_ai(struct comedi_device *dev, if ((status_fifo & PCI230_ADC_FIFO_FULL_LATCHED) != 0) { /* Report error otherwise FIFO overruns will go * unnoticed by the caller. */ - comedi_error(dev, "AI FIFO overrun"); + dev_err(dev->class_dev, "AI FIFO overrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; break; } else if ((status_fifo & PCI230_ADC_FIFO_EMPTY) != 0) { @@ -2208,7 +2208,7 @@ static void pci230_handle_ai(struct comedi_device *dev, /* Read sample and store in Comedi's circular buffer. */ if (comedi_buf_put(s, pci230_ai_read(dev)) == 0) { events |= COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW; - comedi_error(dev, "AI buffer overflow"); + dev_err(dev->class_dev, "AI buffer overflow\n"); break; } fifoamount--; -- cgit From 12c2791bb124ee198a0f7c7783a86af2975cac71 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:48 -0700 Subject: staging: comedi: amplc_dio_common: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 2996b1ad3f87..78700e8185ed 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -327,7 +327,7 @@ static void dio200_read_scan_intr(struct comedi_device *dev, /* Error! Stop acquisition. */ dio200_stop_intr(dev, s); s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW; - comedi_error(dev, "buffer overflow"); + dev_err(dev->class_dev, "buffer overflow\n"); } /* Check for end of acquisition. */ -- cgit From d1fe2cfb5d2dba9371f3748d12512eb10926873d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:49 -0700 Subject: staging: comedi: adv_pci_dio: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci_dio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index f3742cc47b53..b8c7d9145a54 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -592,7 +592,7 @@ static int pci1760_unchecked_mbxrequest(struct comedi_device *dev, return 0; } - comedi_error(dev, "PCI-1760 mailbox request timeout!"); + dev_err(dev->class_dev, "PCI-1760 mailbox request timeout!\n"); return -ETIME; } @@ -610,8 +610,8 @@ static int pci1760_mbxrequest(struct comedi_device *dev, unsigned char *omb, unsigned char *imb) { if (omb[2] == CMD_ClearIMB2) { - comedi_error(dev, - "bug! this function should not be used for CMD_ClearIMB2 command"); + dev_err(dev->class_dev, + "bug! this function should not be used for CMD_ClearIMB2 command\n"); return -EINVAL; } if (inb(dev->iobase + IMB2) == omb[2]) { -- cgit From 3c08712f0e88180bd17bb58ef08d94c48fe532fb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:50 -0700 Subject: staging: comedi: adv_pci1724: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1724.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1724.c b/drivers/staging/comedi/drivers/adv_pci1724.c index af670acb03d8..bc3c34916768 100644 --- a/drivers/staging/comedi/drivers/adv_pci1724.c +++ b/drivers/staging/comedi/drivers/adv_pci1724.c @@ -143,7 +143,8 @@ static int wait_for_dac_idle(struct comedi_device *dev) udelay(1); } if (i == timeout) { - comedi_error(dev, "Timed out waiting for dac to become idle."); + dev_err(dev->class_dev, + "Timed out waiting for dac to become idle\n"); return -EIO; } return 0; @@ -195,8 +196,8 @@ static int ao_readback_insn(struct comedi_device *dev, int i; if (devpriv->ao_value[channel] < 0) { - comedi_error(dev, - "Cannot read back channels which have not yet been written to."); + dev_err(dev->class_dev, + "Cannot read back channels which have not yet been written to\n"); return -EIO; } for (i = 0; i < insn->n; i++) @@ -236,8 +237,8 @@ static int offset_read_insn(struct comedi_device *dev, int i; if (devpriv->offset_value[channel] < 0) { - comedi_error(dev, - "Cannot read back channels which have not yet been written to."); + dev_err(dev->class_dev, + "Cannot read back channels which have not yet been written to\n"); return -EIO; } for (i = 0; i < insn->n; i++) @@ -277,8 +278,8 @@ static int gain_read_insn(struct comedi_device *dev, int i; if (devpriv->gain_value[channel] < 0) { - comedi_error(dev, - "Cannot read back channels which have not yet been written to."); + dev_err(dev->class_dev, + "Cannot read back channels which have not yet been written to\n"); return -EIO; } for (i = 0; i < insn->n; i++) -- cgit From 027a8ccf2c42ffdb472a2001d965a938d48261c3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:51 -0700 Subject: staging: comedi: adl_pci9118: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 49 +++++++++++++--------------- 1 file changed, 23 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 93bd9ee42da1..7cb93791155b 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -394,12 +394,12 @@ static int check_channel_list(struct comedi_device *dev, /* correct channel and range number check itself comedi/range.c */ if (n_chan < 1) { - comedi_error(dev, "range/channel list is empty!"); + dev_err(dev->class_dev, "range/channel list is empty!\n"); return 0; } if ((frontadd + n_chan + backadd) > s->len_chanlist) { - comedi_error(dev, - "range/channel list is too long for actual configuration!\n"); + dev_err(dev->class_dev, + "range/channel list is too long for actual configuration!\n"); return 0; } @@ -411,22 +411,20 @@ static int check_channel_list(struct comedi_device *dev, for (i = 1; i < n_chan; i++) { /* check S.E/diff */ if ((CR_AREF(chanlist[i]) == AREF_DIFF) != (differencial)) { - comedi_error(dev, - "Differential and single ended inputs can't be mixed!"); + dev_err(dev->class_dev, + "Differential and single ended inputs can't be mixed!\n"); return 0; } if ((CR_RANGE(chanlist[i]) < PCI9118_BIPOLAR_RANGES) != (bipolar)) { - comedi_error(dev, - "Bipolar and unipolar ranges " - "can't be mixtured!"); + dev_err(dev->class_dev, + "Bipolar and unipolar ranges can't be mixed!\n"); 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!"); + dev_err(dev->class_dev, + "AREF_DIFF is only available for the first 8 channels!\n"); return 0; } } @@ -863,20 +861,21 @@ static char pci9118_decode_error_status(struct comedi_device *dev, struct pci9118_private *devpriv = dev->private; if (m & 0x100) { - comedi_error(dev, "A/D FIFO Full status (Fatal Error!)"); + dev_err(dev->class_dev, + "A/D FIFO Full status (Fatal Error!)\n"); devpriv->ai_maskerr &= ~0x100L; } if (m & 0x008) { - comedi_error(dev, - "A/D Burst Mode Overrun Status (Fatal Error!)"); + dev_err(dev->class_dev, + "A/D Burst Mode Overrun Status (Fatal Error!)\n"); devpriv->ai_maskerr &= ~0x008L; } if (m & 0x004) { - comedi_error(dev, "A/D Over Speed Status (Warning!)"); + dev_err(dev->class_dev, "A/D Over Speed Status (Warning!)\n"); devpriv->ai_maskerr &= ~0x004L; } if (m & 0x002) { - comedi_error(dev, "A/D Overrun Status (Fatal Error!)"); + dev_err(dev->class_dev, "A/D Overrun Status (Fatal Error!)\n"); devpriv->ai_maskerr &= ~0x002L; } if (m & devpriv->ai_maskharderr) { @@ -965,14 +964,14 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev, unsigned int next_dma_buf, samplesinbuf, sampls, m; if (int_amcc & MASTER_ABORT_INT) { - comedi_error(dev, "AMCC IRQ - MASTER DMA ABORT!"); + dev_err(dev->class_dev, "AMCC IRQ - MASTER DMA ABORT!\n"); s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); return; } if (int_amcc & TARGET_ABORT_INT) { - comedi_error(dev, "AMCC IRQ - TARGET DMA ABORT!"); + dev_err(dev->class_dev, "AMCC IRQ - TARGET DMA ABORT!\n"); s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); return; @@ -1426,17 +1425,16 @@ static int pci9118_ai_docmd_sampl(struct comedi_device *dev, devpriv->AdControlReg |= AdControl_TmrTr; break; case 2: - comedi_error(dev, "pci9118_ai_docmd_sampl() mode 2 bug!\n"); + dev_err(dev->class_dev, "%s mode 2 bug!\n", __func__); return -EIO; case 3: devpriv->AdControlReg |= AdControl_ExtM; break; case 4: - comedi_error(dev, "pci9118_ai_docmd_sampl() mode 4 bug!\n"); + dev_err(dev->class_dev, "%s mode 4 bug!\n", __func__); return -EIO; default: - comedi_error(dev, - "pci9118_ai_docmd_sampl() mode number bug!\n"); + dev_err(dev->class_dev, "%s mode number bug!\n", __func__); return -EIO; } @@ -1508,7 +1506,7 @@ static int pci9118_ai_docmd_dma(struct comedi_device *dev, devpriv->AdFunctionReg |= AdFunction_Start; break; default: - comedi_error(dev, "pci9118_ai_docmd_dma() mode number bug!\n"); + dev_err(dev->class_dev, "%s mode number bug!\n", __func__); return -EIO; } @@ -1676,9 +1674,8 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) (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!"); + dev_err(dev->class_dev, + "cmd->scan_begin_src=TRIG_TIMER works only with bus mastering!\n"); return -EIO; } -- cgit From 61768da12ae5f50b4dc3a8e2ca1c066cf827be93 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:52 -0700 Subject: staging: comedi: addi_apci_3501: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_3501.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_3501.c b/drivers/staging/comedi/drivers/addi_apci_3501.c index 49bf1fb840f6..d9594f48d00f 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3501.c +++ b/drivers/staging/comedi/drivers/addi_apci_3501.c @@ -274,7 +274,7 @@ static irqreturn_t apci3501_interrupt(int irq, void *d) ui_Timer_AOWatchdog = inl(dev->iobase + APCI3501_TIMER_IRQ_REG) & 0x1; if ((!ui_Timer_AOWatchdog)) { - comedi_error(dev, "IRQ from unknown source"); + dev_err(dev->class_dev, "IRQ from unknown source\n"); return IRQ_NONE; } -- cgit From 2c856780b39af4d1f96ca33811dab6ccf6ff545f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:53 -0700 Subject: staging: comedi: hwdrv_apci3120: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci3120.c | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c index bfa154d3fea6..6e6122630ec1 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c @@ -318,7 +318,8 @@ static int apci3120_setup_chan_list(struct comedi_device *dev, /* correct channel and range number check itself comedi/range.c */ if (n_chan < 1) { if (!check) - comedi_error(dev, "range/channel list is empty!"); + dev_err(dev->class_dev, + "range/channel list is empty!\n"); return 0; } /* All is ok, so we can setup channel/range list */ @@ -1373,10 +1374,10 @@ static void apci3120_interrupt_dma(int irq, void *d) if (samplesinbuf < devpriv->ui_DmaBufferUsesize[devpriv->ui_DmaActualBuffer]) { - comedi_error(dev, "Interrupted DMA transfer!"); + dev_err(dev->class_dev, "Interrupted DMA transfer!\n"); } if (samplesinbuf & 1) { - comedi_error(dev, "Odd count of bytes in DMA ring!"); + dev_err(dev->class_dev, "Odd count of bytes in DMA ring!\n"); apci3120_cancel(dev, s); return; } @@ -1548,7 +1549,7 @@ static void apci3120_interrupt(int irq, void *d) int_amcc = inl(devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); /* get AMCC int register */ if ((!int_daq) && (!(int_amcc & ANY_S593X_INT))) { - comedi_error(dev, "IRQ from unknown source"); + dev_err(dev->class_dev, "IRQ from unknown source\n"); return; } @@ -1565,9 +1566,9 @@ static void apci3120_interrupt(int irq, void *d) inb(devpriv->i_IobaseAmcc + APCI3120_TIMER_STATUS_REGISTER); if (int_amcc & MASTER_ABORT_INT) - comedi_error(dev, "AMCC IRQ - MASTER DMA ABORT!"); + dev_err(dev->class_dev, "AMCC IRQ - MASTER DMA ABORT!\n"); if (int_amcc & TARGET_ABORT_INT) - comedi_error(dev, "AMCC IRQ - TARGET DMA ABORT!"); + dev_err(dev->class_dev, "AMCC IRQ - TARGET DMA ABORT!\n"); /* Ckeck if EOC interrupt */ if (((int_daq & 0x8) == 0) @@ -1740,7 +1741,7 @@ static int apci3120_config_insn_timer(struct comedi_device *dev, unsigned char b_Tmp; if (!data[1]) - comedi_error(dev, "config:No timer constant !"); + dev_err(dev->class_dev, "No timer constant!\n"); devpriv->b_Timer2Interrupt = (unsigned char) data[2]; /* save info whether to enable or disable interrupt */ @@ -1886,14 +1887,14 @@ static int apci3120_write_insn_timer(struct comedi_device *dev, if ((devpriv->b_Timer2Mode != APCI3120_WATCHDOG) && (devpriv->b_Timer2Mode != APCI3120_TIMER)) { - comedi_error(dev, "\nwrite:timer2 not configured "); + dev_err(dev->class_dev, "timer2 not configured\n"); return -EINVAL; } if (data[0] == 2) { /* write new value */ if (devpriv->b_Timer2Mode != APCI3120_TIMER) { - comedi_error(dev, - "write :timer2 not configured in TIMER MODE"); + dev_err(dev->class_dev, + "timer2 not configured in TIMER MODE\n"); return -EINVAL; } @@ -1991,8 +1992,8 @@ static int apci3120_write_insn_timer(struct comedi_device *dev, case 2: /* write new value to Timer */ if (devpriv->b_Timer2Mode != APCI3120_TIMER) { - comedi_error(dev, - "write :timer2 not configured in TIMER MODE"); + dev_err(dev->class_dev, + "timer2 not configured in TIMER MODE\n"); return -EINVAL; } /* ui_Timervalue2=data[1]; // passed as argument */ @@ -2056,7 +2057,7 @@ static int apci3120_read_insn_timer(struct comedi_device *dev, if ((devpriv->b_Timer2Mode != APCI3120_WATCHDOG) && (devpriv->b_Timer2Mode != APCI3120_TIMER)) { - comedi_error(dev, "\nread:timer2 not configured "); + dev_err(dev->class_dev, "timer2 not configured\n"); } /* this_board->timer_read(dev,data); */ -- cgit From c37aedfbc55dd7a71d5aa2c86b06745c021056bb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:54 -0700 Subject: staging: comedi: hwdrv_apci1564: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 7326f3aff901..a1730e9e7135 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -102,8 +102,7 @@ static int apci1564_do_config(struct comedi_device *dev, unsigned int ul_Command = 0; if ((data[0] != 0) && (data[0] != 1)) { - comedi_error(dev, - "Not a valid Data !!! ,Data should be 1 or 0\n"); + dev_err(dev->class_dev, "Data should be 1 or 0\n"); return -EINVAL; } -- cgit From 1c0cb9ace5f16242838549cb2ffea2be72b7c707 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:55 -0700 Subject: staging: comedi: hwdrv_apci1500: remove use of comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. The addition of the driver_name is just added noise and some of the users of comedi_error() add unnecessary additional new-line characters. Use dev_err() directly instead of comedi_error() to avoid any confusion and so that all the comedi generated kernel messages have the same format. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c index a633957890d7..1e2fe66818e4 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c @@ -872,7 +872,8 @@ static int apci1500_do_write(struct comedi_device *dev, break; default: - comedi_error(dev, " chan spec wrong"); + dev_err(dev->class_dev, + "chan spec wrong\n"); return -EINVAL; /* "sorry channel spec wrong " */ } /* switch(ui_NoOfChannels) */ @@ -950,8 +951,8 @@ static int apci1500_do_write(struct comedi_device *dev, break; default: - comedi_error(dev, - " chan spec wrong"); + dev_err(dev->class_dev, + "chan spec wrong\n"); return -EINVAL; /* "sorry channel spec wrong " */ } /* switch(ui_NoOfChannels) */ -- cgit From 6b362f5bea0dfbb648656041a92f6a00b298f558 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 11:57:56 -0700 Subject: staging: comedi: remove comedi_error() The comedi_error() function is just a wrapper around dev_err() that adds the dev->driver->driver_name prefix to the message and a terminating new-line character. All of the users of this function have been converted to use dev_err() directly. Remove the now unused function. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 6 ------ drivers/staging/comedi/comedidev.h | 1 - drivers/staging/comedi/drivers.c | 2 -- 3 files changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 36862965051b..630ef1fbb360 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2401,12 +2401,6 @@ static const struct file_operations comedi_fops = { .llseek = noop_llseek, }; -void comedi_error(const struct comedi_device *dev, const char *s) -{ - dev_err(dev->class_dev, "%s: %s\n", dev->driver->driver_name, s); -} -EXPORT_SYMBOL_GPL(comedi_error); - void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) { struct comedi_async *async = s->async; diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index a7f24a9f0a23..67cc8827a792 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -280,7 +280,6 @@ static inline const void *comedi_board(const struct comedi_device *dev) */ void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s); -void comedi_error(const struct comedi_device *dev, const char *s); /* we can expand the number of bits used to encode devices/subdevices into the minor number soon, after more distros support > 8 bit minor numbers diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 299726f39e26..9bfd05b361ea 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -591,8 +591,6 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) ret = -ENOSYS; goto out; } - /* initialize dev->driver here so - * comedi_error() can be called from attach */ dev->driver = driv; dev->board_name = dev->board_ptr ? *(const char **)dev->board_ptr : dev->driver->driver_name; -- cgit From 42f4acdf30121bc0f649875d55876eea9187100a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 12:27:28 -0700 Subject: staging: comedi: usbduxfast: convert pr_err() to dev_err() Use dev_err() to output the error message and remove the unnecessary pr_fmt() macro. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/usbduxfast.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 85f9dcf59403..2490e88e7f32 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -33,8 +33,6 @@ * udev coldplug problem */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - #include #include #include @@ -275,8 +273,9 @@ static void usbduxfast_ai_interrupt(struct urb *urb) return; default: - pr_err("non-zero urb status received in ai intr context: %d\n", - urb->status); + dev_err(dev->class_dev, + "non-zero urb status received in ai intr context: %d\n", + urb->status); async->events |= COMEDI_CB_EOA; async->events |= COMEDI_CB_ERROR; comedi_event(dev, s); -- cgit From 2a5cd0a5f1a86f9c5841218eaec2b81f993b3d74 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 12:27:29 -0700 Subject: staging: comedi: usbduxfast: convert pr_warn() to dev_warn() Use dev_warn() to output the warning message. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcimio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 1532fac7638e..a902a3891351 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1183,7 +1183,7 @@ static int pcimio_auto_attach(struct comedi_device *dev, ret = mite_setup(devpriv->mite); if (ret < 0) { - pr_warn("error setting up mite\n"); + dev_warn(dev->class_dev, "error setting up mite\n"); return ret; } -- cgit From c72f57377c4168a1aed68b4250a109a2505bdd62 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 12:27:30 -0700 Subject: staging: comedi: cb_pcidas64: remove unused pr_fmt() macro This macro is not used. Remove it. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 1e69c82e2315..4012d8cba121 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -80,8 +80,6 @@ TODO: make ao fifo size adjustable like ai fifo */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - #include #include #include -- cgit From 2042088cd67d0064d18c52c13c69af2499907bb1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 12:27:31 -0700 Subject: staging: comedi: ni_labpc: tidy up labpc_ai_scan_mode() This function checks the cmd->chanlist to determine the scan mode used to sample the analog inputs. All possible modes are checked so the final pr_err() and return 0 can never be reached. Tidy up the function a bit and remove the unreachable code. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 6fb405eb0933..8b41813ebf65 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -531,24 +531,26 @@ static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd, static enum scan_mode labpc_ai_scan_mode(const struct comedi_cmd *cmd) { + unsigned int chan0; + unsigned int chan1; + if (cmd->chanlist_len == 1) return MODE_SINGLE_CHAN; - /* chanlist may be NULL during cmdtest. */ + /* chanlist may be NULL during cmdtest */ if (cmd->chanlist == NULL) return MODE_MULT_CHAN_UP; - if (CR_CHAN(cmd->chanlist[0]) == CR_CHAN(cmd->chanlist[1])) - return MODE_SINGLE_CHAN_INTERVAL; + chan0 = CR_CHAN(cmd->chanlist[0]); + chan1 = CR_CHAN(cmd->chanlist[1]); - if (CR_CHAN(cmd->chanlist[0]) < CR_CHAN(cmd->chanlist[1])) + if (chan0 < chan1) return MODE_MULT_CHAN_UP; - if (CR_CHAN(cmd->chanlist[0]) > CR_CHAN(cmd->chanlist[1])) + if (chan0 > chan1) return MODE_MULT_CHAN_DOWN; - pr_err("ni_labpc: bug! cannot determine AI scan mode\n"); - return 0; + return MODE_SINGLE_CHAN_INTERVAL; } static int labpc_ai_check_chanlist(struct comedi_device *dev, -- cgit From c2ad078b504c85e83fb9a223136f29349888fe7a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 17 Jul 2014 12:27:32 -0700 Subject: staging: comedi: comedi_fops: use pr_fmt() There are a number of pr_{level} messages in this file that are used to print kernel messages when the device pointer is not available for a dev_{level} message. Use pr_fmt() to ensure all of these messages have the module prefix. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 630ef1fbb360..9670b244fc69 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -16,6 +16,8 @@ GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include "comedi_compat32.h" #include @@ -1073,11 +1075,10 @@ 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: - pr_warn("comedi: No check for data length of config insn id %i is implemented.\n", + pr_warn("No check for data length of config insn id %i is implemented\n", data[0]); - pr_warn("comedi: Add a check to %s in %s.\n", - __func__, __FILE__); - pr_warn("comedi: Assuming n=%i is correct.\n", insn->n); + pr_warn("Add a check to %s in %s\n", __func__, __FILE__); + pr_warn("Assuming n=%i is correct\n", insn->n); return 0; } return -EINVAL; @@ -2463,7 +2464,7 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device) mutex_unlock(&dev->mutex); comedi_device_cleanup(dev); comedi_dev_put(dev); - pr_err("comedi: error: ran out of minor numbers for board device files.\n"); + pr_err("ran out of minor numbers for board device files\n"); return ERR_PTR(-EBUSY); } dev->minor = i; @@ -2516,7 +2517,7 @@ int comedi_alloc_subdevice_minor(struct comedi_subdevice *s) } mutex_unlock(&comedi_subdevice_minor_table_lock); if (i == COMEDI_NUM_SUBDEVICE_MINORS) { - pr_err("comedi: error: ran out of minor numbers for subdevice files.\n"); + pr_err("ran out of minor numbers for subdevice files\n"); return -EBUSY; } i += COMEDI_NUM_BOARD_MINORS; @@ -2566,11 +2567,11 @@ static int __init comedi_init(void) int i; int retval; - pr_info("comedi: version " COMEDI_RELEASE " - http://www.comedi.org\n"); + pr_info("version " COMEDI_RELEASE " - http://www.comedi.org\n"); if (comedi_num_legacy_minors < 0 || comedi_num_legacy_minors > COMEDI_NUM_BOARD_MINORS) { - pr_err("comedi: error: invalid value for module parameter \"comedi_num_legacy_minors\". Valid values are 0 through %i.\n", + pr_err("invalid value for module parameter \"comedi_num_legacy_minors\". Valid values are 0 through %i.\n", COMEDI_NUM_BOARD_MINORS); return -EINVAL; } @@ -2596,7 +2597,7 @@ static int __init comedi_init(void) } comedi_class = class_create(THIS_MODULE, "comedi"); if (IS_ERR(comedi_class)) { - pr_err("comedi: failed to create class\n"); + pr_err("failed to create class\n"); cdev_del(&comedi_cdev); unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0), COMEDI_NUM_MINORS); -- cgit From 231c6f13935710bcd1f6715b1bfcf140f78d6824 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:51 +0100 Subject: staging: vt6656: baseband.c rename awcFrameTime to vnt_frame_time Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 040b2321585a..e56defa47bd7 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -123,7 +123,7 @@ static u8 vnt_vt3184_vt3226d0[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */ }; -static const u16 awcFrameTime[MAX_RATE] = { +static const u16 vnt_frame_time[MAX_RATE] = { 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216 }; @@ -152,7 +152,7 @@ unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type, if (tx_rate > RATE_54M) return 0; - rate = (unsigned int)awcFrameTime[tx_rate]; + rate = (unsigned int)vnt_frame_time[tx_rate]; if (tx_rate <= 3) { if (preamble_type == 1) -- cgit From 41868bf4b56d9177cce46eb8eca3f7895f065493 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:52 +0100 Subject: staging: vt6656: rename BBvSetAntennaMode to vnt_set_antenna_mode Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/wcmd.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index e56defa47bd7..65866141d40d 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -345,7 +345,7 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length, * Return Value: none * */ -void BBvSetAntennaMode(struct vnt_private *priv, u8 antenna_mode) +void vnt_set_antenna_mode(struct vnt_private *priv, u8 antenna_mode) { switch (antenna_mode) { case ANT_TXA: diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index c73244b11bf9..a6126907a19f 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -95,7 +95,7 @@ void vnt_get_phy_field(struct vnt_private *, u32 frame_length, void BBvSetShortSlotTime(struct vnt_private *); void BBvSetVGAGainOffset(struct vnt_private *, u8 byData); -void BBvSetAntennaMode(struct vnt_private *, u8 byAntennaMode); +void vnt_set_antenna_mode(struct vnt_private *, u8); int BBbVT3184Init(struct vnt_private *); void BBvSetDeepSleep(struct vnt_private *); void BBvExitDeepSleep(struct vnt_private *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index c595a158caf4..7cd4c2b0a710 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -371,7 +371,7 @@ static int device_init_registers(struct vnt_private *pDevice) } /* Set initial antenna mode */ - BBvSetAntennaMode(pDevice, pDevice->byRxAntennaMode); + vnt_set_antenna_mode(pDevice, pDevice->byRxAntennaMode); /* get Auto Fall Back type */ pDevice->byAutoFBCtrl = AUTO_FB_0; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index bf41e673e9bb..c56b7b3c90de 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -151,15 +151,15 @@ void vnt_run_command(struct work_struct *work) if (priv->dwRxAntennaSel == 0) { priv->dwRxAntennaSel = 1; if (priv->bTxRxAntInv == true) - BBvSetAntennaMode(priv, ANT_RXA); + vnt_set_antenna_mode(priv, ANT_RXA); else - BBvSetAntennaMode(priv, ANT_RXB); + vnt_set_antenna_mode(priv, ANT_RXB); } else { priv->dwRxAntennaSel = 0; if (priv->bTxRxAntInv == true) - BBvSetAntennaMode(priv, ANT_RXB); + vnt_set_antenna_mode(priv, ANT_RXB); else - BBvSetAntennaMode(priv, ANT_RXA); + vnt_set_antenna_mode(priv, ANT_RXA); } break; -- cgit From 7534180cf97d97826bf734f5e4f9bbdc96d29c97 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:53 +0100 Subject: staging: vt6656: rename BBbVT3184Init to vnt_vt3184_init Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 65866141d40d..44068d004a63 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -29,7 +29,7 @@ * vnt_get_frame_time - Calculate data frame transmitting time * vnt_get_phy_field - Calculate PhyLength, PhyService and Phy * Signal parameter for baseband Tx - * BBbVT3184Init - VIA VT3184 baseband chip init code + * vnt_vt3184_init - VIA VT3184 baseband chip init code * * Revision History: * @@ -378,7 +378,7 @@ void vnt_set_antenna_mode(struct vnt_private *priv, u8 antenna_mode) * */ -int BBbVT3184Init(struct vnt_private *priv) +int vnt_vt3184_init(struct vnt_private *priv) { int status; u16 length; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index a6126907a19f..f102ec009aae 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -96,7 +96,7 @@ void vnt_get_phy_field(struct vnt_private *, u32 frame_length, void BBvSetShortSlotTime(struct vnt_private *); void BBvSetVGAGainOffset(struct vnt_private *, u8 byData); void vnt_set_antenna_mode(struct vnt_private *, u8); -int BBbVT3184Init(struct vnt_private *); +int vnt_vt3184_init(struct vnt_private *); void BBvSetDeepSleep(struct vnt_private *); void BBvExitDeepSleep(struct vnt_private *); void BBvUpdatePreEDThreshold(struct vnt_private *, int scanning); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 7cd4c2b0a710..caafb93174e7 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -247,8 +247,8 @@ static int device_init_registers(struct vnt_private *pDevice) } } - if (!BBbVT3184Init(pDevice)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" BBbVT3184Init fail\n"); + if (!vnt_vt3184_init(pDevice)) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" vnt_vt3184_init fail\n"); return false; } -- cgit From 3c956cc025cedf28ec97646439854d3c3a370883 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:54 +0100 Subject: staging: vt6656: rename BBvSetShortSlotTime to vnt_set_short_slot_time Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 44068d004a63..3138826b7767 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -526,7 +526,7 @@ int vnt_vt3184_init(struct vnt_private *priv) * Return Value: none * */ -void BBvSetShortSlotTime(struct vnt_private *priv) +void vnt_set_short_slot_time(struct vnt_private *priv) { u8 bb_vga = 0; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index f102ec009aae..1a36e1376494 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -93,7 +93,7 @@ unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type, void vnt_get_phy_field(struct vnt_private *, u32 frame_length, u16 tx_rate, u8 pkt_type, struct vnt_phy_field *); -void BBvSetShortSlotTime(struct vnt_private *); +void vnt_set_short_slot_time(struct vnt_private *); void BBvSetVGAGainOffset(struct vnt_private *, u8 byData); void vnt_set_antenna_mode(struct vnt_private *, u8); int vnt_vt3184_init(struct vnt_private *); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index caafb93174e7..a418d1d3e2a9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -441,7 +441,7 @@ static int device_init_registers(struct vnt_private *pDevice) else pDevice->bShortSlotTime = false; - BBvSetShortSlotTime(pDevice); + vnt_set_short_slot_time(pDevice); pDevice->byRadioCtl = pDevice->abyEEPROM[EEP_OFS_RADIOCTL]; pDevice->bHWRadioOff = false; @@ -880,7 +880,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, else priv->bShortSlotTime = false; - BBvSetShortSlotTime(priv); + vnt_set_short_slot_time(priv); BBvSetVGAGainOffset(priv, priv->abyBBVGA[0]); BBvUpdatePreEDThreshold(priv, false); } -- cgit From de8690a2e38a6f3a4131b8fa4c01ecb1a99b3dcc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:55 +0100 Subject: staging: vt6656: rename BBvSetVGAGainOffset to vnt_set_vga_gain_offset Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 3138826b7767..184f416157f6 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -543,7 +543,7 @@ void vnt_set_short_slot_time(struct vnt_private *priv) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->byBBRxConf); } -void BBvSetVGAGainOffset(struct vnt_private *priv, u8 data) +void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) { vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xE7, data); diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 1a36e1376494..a3aff07aec6a 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -94,7 +94,7 @@ void vnt_get_phy_field(struct vnt_private *, u32 frame_length, u16 tx_rate, u8 pkt_type, struct vnt_phy_field *); void vnt_set_short_slot_time(struct vnt_private *); -void BBvSetVGAGainOffset(struct vnt_private *, u8 byData); +void vnt_set_vga_gain_offset(struct vnt_private *, u8); void vnt_set_antenna_mode(struct vnt_private *, u8); int vnt_vt3184_init(struct vnt_private *); void BBvSetDeepSleep(struct vnt_private *); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 37cd96bbbfc6..1cbdfee2888f 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -836,5 +836,5 @@ void vnt_set_bss_mode(struct vnt_private *priv) priv->abyBBVGA[3] = 0x0; } - BBvSetVGAGainOffset(priv, priv->abyBBVGA[0]); + vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); } diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a418d1d3e2a9..695c5416f676 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -881,7 +881,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, priv->bShortSlotTime = false; vnt_set_short_slot_time(priv); - BBvSetVGAGainOffset(priv, priv->abyBBVGA[0]); + vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); BBvUpdatePreEDThreshold(priv, false); } -- cgit From e8e072da885e7d9edd56e28e7e2accce9b050ac8 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:56 +0100 Subject: staging: vt6656: rename BBvSetDeepSleep to vnt_set_deep_sleep Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/card.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 184f416157f6..2a6c6eac7fbc 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -558,7 +558,7 @@ void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) } /* - * Description: BBvSetDeepSleep + * Description: vnt_set_deep_sleep * * Parameters: * In: @@ -569,7 +569,7 @@ void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) * Return Value: none * */ -void BBvSetDeepSleep(struct vnt_private *priv) +void vnt_set_deep_sleep(struct vnt_private *priv) { vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);/* CR12 */ vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0xB9);/* CR13 */ diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index a3aff07aec6a..f24670081229 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -97,7 +97,7 @@ void vnt_set_short_slot_time(struct vnt_private *); void vnt_set_vga_gain_offset(struct vnt_private *, u8); void vnt_set_antenna_mode(struct vnt_private *, u8); int vnt_vt3184_init(struct vnt_private *); -void BBvSetDeepSleep(struct vnt_private *); +void vnt_set_deep_sleep(struct vnt_private *); void BBvExitDeepSleep(struct vnt_private *); void BBvUpdatePreEDThreshold(struct vnt_private *, int scanning); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 1cbdfee2888f..fd6f6e23d47c 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -750,7 +750,7 @@ int vnt_radio_power_off(struct vnt_private *priv) vnt_mac_reg_bits_off(priv, MAC_REG_HOSTCR, HOSTCR_RXON); - BBvSetDeepSleep(priv); + vnt_set_deep_sleep(priv); return ret; } -- cgit From 0e951753dc41096b795f10f3dfa7bc72ba76fc78 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:57 +0100 Subject: staging: vt6656: rename BBvExitDeepSleep to vnt_exit_deep_sleep Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/card.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 2a6c6eac7fbc..39e2629731a9 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -575,7 +575,7 @@ void vnt_set_deep_sleep(struct vnt_private *priv) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0xB9);/* CR13 */ } -void BBvExitDeepSleep(struct vnt_private *priv) +void vnt_exit_deep_sleep(struct vnt_private *priv) { vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0c, 0x00);/* CR12 */ vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0x01);/* CR13 */ diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index f24670081229..aee51a159885 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -98,7 +98,7 @@ void vnt_set_vga_gain_offset(struct vnt_private *, u8); void vnt_set_antenna_mode(struct vnt_private *, u8); int vnt_vt3184_init(struct vnt_private *); void vnt_set_deep_sleep(struct vnt_private *); -void BBvExitDeepSleep(struct vnt_private *); +void vnt_exit_deep_sleep(struct vnt_private *); void BBvUpdatePreEDThreshold(struct vnt_private *, int scanning); #endif /* __BASEBAND_H__ */ diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index fd6f6e23d47c..34ca2a6799bd 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -776,7 +776,7 @@ int vnt_radio_power_on(struct vnt_private *priv) priv->bRadioOff = false; - BBvExitDeepSleep(priv); + vnt_exit_deep_sleep(priv); vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON); -- cgit From 80dcc0aeb92d37cb67eb2553de74d826983085a1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:58 +0100 Subject: staging: vt6656: rename BBvUpdatePreEDThreshold to vnt_update_pre_ed_threshold Dropping BB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/baseband.h | 2 +- drivers/staging/vt6656/main_usb.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 39e2629731a9..91c24a3bf1b7 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -581,7 +581,7 @@ void vnt_exit_deep_sleep(struct vnt_private *priv) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0x01);/* CR13 */ } -void BBvUpdatePreEDThreshold(struct vnt_private *priv, int scanning) +void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) { u8 cr_201 = 0x0, cr_206 = 0x0; u8 ed_inx = priv->byBBPreEDIndex; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index aee51a159885..771ea4054174 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -99,6 +99,6 @@ void vnt_set_antenna_mode(struct vnt_private *, u8); int vnt_vt3184_init(struct vnt_private *); void vnt_set_deep_sleep(struct vnt_private *); void vnt_exit_deep_sleep(struct vnt_private *); -void BBvUpdatePreEDThreshold(struct vnt_private *, int scanning); +void vnt_update_pre_ed_threshold(struct vnt_private *, int scanning); #endif /* __BASEBAND_H__ */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 695c5416f676..e822572f4a15 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -882,7 +882,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, vnt_set_short_slot_time(priv); vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); - BBvUpdatePreEDThreshold(priv, false); + vnt_update_pre_ed_threshold(priv, false); } if (changed & BSS_CHANGED_TXPOWER) @@ -1003,7 +1003,7 @@ static void vnt_sw_scan_start(struct ieee80211_hw *hw) vnt_set_bss_mode(priv); /* Set max sensitivity*/ - BBvUpdatePreEDThreshold(priv, true); + vnt_update_pre_ed_threshold(priv, true); } static void vnt_sw_scan_complete(struct ieee80211_hw *hw) @@ -1011,7 +1011,7 @@ static void vnt_sw_scan_complete(struct ieee80211_hw *hw) struct vnt_private *priv = hw->priv; /* Return sensitivity to channel level*/ - BBvUpdatePreEDThreshold(priv, false); + vnt_update_pre_ed_threshold(priv, false); } static int vnt_get_stats(struct ieee80211_hw *hw, -- cgit From 28e067f4fff71eb0d10391107d39a86c31f8e582 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:21:59 +0100 Subject: staging: vt6656: device_set_options fix opening function bracket Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e822572f4a15..40594a184b28 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -203,8 +203,8 @@ static bool device_alloc_bufs(struct vnt_private *pDevice); static void usb_device_reset(struct vnt_private *pDevice); -static void -device_set_options(struct vnt_private *pDevice) { +static void device_set_options(struct vnt_private *pDevice) +{ pDevice->cbTD = TX_DESC_DEF0; pDevice->cbRD = RX_DESC_DEF0; pDevice->byShortRetryLimit = SHORT_RETRY_DEF; -- cgit From da3b67b3438ae7df8d329eff69bf1dc5fe8f8151 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:00 +0100 Subject: staging: vt6656: device_set_options remove camel case Camel case changes pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 40594a184b28..37541f0956b4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -203,18 +203,18 @@ static bool device_alloc_bufs(struct vnt_private *pDevice); static void usb_device_reset(struct vnt_private *pDevice); -static void device_set_options(struct vnt_private *pDevice) +static void device_set_options(struct vnt_private *priv) { - pDevice->cbTD = TX_DESC_DEF0; - pDevice->cbRD = RX_DESC_DEF0; - pDevice->byShortRetryLimit = SHORT_RETRY_DEF; - pDevice->byLongRetryLimit = LONG_RETRY_DEF; - pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; - pDevice->byBBType = BBP_TYPE_DEF; - pDevice->byPacketType = pDevice->byBBType; - pDevice->byAutoFBCtrl = AUTO_FB_0; - pDevice->byPreambleType = 0; - pDevice->bExistSWNetAddr = false; + priv->cbTD = TX_DESC_DEF0; + priv->cbRD = RX_DESC_DEF0; + priv->byShortRetryLimit = SHORT_RETRY_DEF; + priv->byLongRetryLimit = LONG_RETRY_DEF; + priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; + priv->byBBType = BBP_TYPE_DEF; + priv->byPacketType = priv->byBBType; + priv->byAutoFBCtrl = AUTO_FB_0; + priv->byPreambleType = 0; + priv->bExistSWNetAddr = false; } /* -- cgit From 3ce54934dfb23024a8e111450b6a224ee3546a2d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:01 +0100 Subject: staging: vt6656: device_init_registers remove camel case camel case changes pDevice -> priv byAntenna -> antenna ntStatus -> status byTmp-> tmp byCalibTXIQ -> calib_tx_iq byCalibTXDC -> calib_tx_dc byCalibRXIQ -> calib_rx_iq Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 234 +++++++++++++++++++------------------- 1 file changed, 117 insertions(+), 117 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 37541f0956b4..12f93c7c8c91 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -220,22 +220,22 @@ static void device_set_options(struct vnt_private *priv) /* * initialization of MAC & BBP registers */ -static int device_init_registers(struct vnt_private *pDevice) +static int device_init_registers(struct vnt_private *priv) { - struct vnt_cmd_card_init *init_cmd = &pDevice->init_command; - struct vnt_rsp_card_init *init_rsp = &pDevice->init_response; - u8 byAntenna; + struct vnt_cmd_card_init *init_cmd = &priv->init_command; + struct vnt_rsp_card_init *init_rsp = &priv->init_response; + u8 antenna; int ii; - int ntStatus = STATUS_SUCCESS; - u8 byTmp; - u8 byCalibTXIQ = 0, byCalibTXDC = 0, byCalibRXIQ = 0; + int status = STATUS_SUCCESS; + u8 tmp; + u8 calib_tx_iq = 0, calib_tx_dc = 0, calib_rx_iq = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---->INIbInitAdapter. [%d][%d]\n", - DEVICE_INIT_COLD, pDevice->byPacketType); + DEVICE_INIT_COLD, priv->byPacketType); - if (!vnt_check_firmware_version(pDevice)) { - if (vnt_download_firmware(pDevice) == true) { - if (vnt_firmware_branch_to_sram(pDevice) == false) { + if (!vnt_check_firmware_version(priv)) { + if (vnt_download_firmware(priv) == true) { + if (vnt_firmware_branch_to_sram(priv) == false) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " vnt_firmware_branch_to_sram fail\n"); return false; @@ -247,63 +247,63 @@ static int device_init_registers(struct vnt_private *pDevice) } } - if (!vnt_vt3184_init(pDevice)) { + if (!vnt_vt3184_init(priv)) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" vnt_vt3184_init fail\n"); return false; } init_cmd->init_class = DEVICE_INIT_COLD; - init_cmd->exist_sw_net_addr = (u8) pDevice->bExistSWNetAddr; + init_cmd->exist_sw_net_addr = (u8) priv->bExistSWNetAddr; for (ii = 0; ii < 6; ii++) - init_cmd->sw_net_addr[ii] = pDevice->abyCurrentNetAddr[ii]; - init_cmd->short_retry_limit = pDevice->byShortRetryLimit; - init_cmd->long_retry_limit = pDevice->byLongRetryLimit; + init_cmd->sw_net_addr[ii] = priv->abyCurrentNetAddr[ii]; + init_cmd->short_retry_limit = priv->byShortRetryLimit; + init_cmd->long_retry_limit = priv->byLongRetryLimit; /* issue card_init command to device */ - ntStatus = vnt_control_out(pDevice, + status = vnt_control_out(priv, MESSAGE_TYPE_CARDINIT, 0, 0, sizeof(struct vnt_cmd_card_init), (u8 *)init_cmd); - if (ntStatus != STATUS_SUCCESS) { + if (status != STATUS_SUCCESS) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Issue Card init fail\n"); return false; } - ntStatus = vnt_control_in(pDevice, MESSAGE_TYPE_INIT_RSP, 0, 0, + status = vnt_control_in(priv, MESSAGE_TYPE_INIT_RSP, 0, 0, sizeof(struct vnt_rsp_card_init), (u8 *)init_rsp); - if (ntStatus != STATUS_SUCCESS) { + if (status != STATUS_SUCCESS) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Cardinit request in status fail!\n"); return false; } /* local ID for AES functions */ - ntStatus = vnt_control_in(pDevice, MESSAGE_TYPE_READ, + status = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_LOCALID, MESSAGE_REQUEST_MACREG, 1, - &pDevice->byLocalID); - if (ntStatus != STATUS_SUCCESS) + &priv->byLocalID); + if (status != STATUS_SUCCESS) return false; /* do MACbSoftwareReset in MACvInitialize */ - pDevice->byTopOFDMBasicRate = RATE_24M; - pDevice->byTopCCKBasicRate = RATE_1M; + priv->byTopOFDMBasicRate = RATE_24M; + priv->byTopCCKBasicRate = RATE_1M; /* target to IF pin while programming to RF chip */ - pDevice->byCurPwr = 0xFF; + priv->byCurPwr = 0xFF; - pDevice->byCCKPwr = pDevice->abyEEPROM[EEP_OFS_PWR_CCK]; - pDevice->byOFDMPwrG = pDevice->abyEEPROM[EEP_OFS_PWR_OFDMG]; + priv->byCCKPwr = priv->abyEEPROM[EEP_OFS_PWR_CCK]; + priv->byOFDMPwrG = priv->abyEEPROM[EEP_OFS_PWR_OFDMG]; /* load power table */ for (ii = 0; ii < 14; ii++) { - pDevice->abyCCKPwrTbl[ii] = - pDevice->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; - - if (pDevice->abyCCKPwrTbl[ii] == 0) - pDevice->abyCCKPwrTbl[ii] = pDevice->byCCKPwr; - pDevice->abyOFDMPwrTbl[ii] = - pDevice->abyEEPROM[ii + EEP_OFS_OFDM_PWR_TBL]; - if (pDevice->abyOFDMPwrTbl[ii] == 0) - pDevice->abyOFDMPwrTbl[ii] = pDevice->byOFDMPwrG; + priv->abyCCKPwrTbl[ii] = + priv->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; + + if (priv->abyCCKPwrTbl[ii] == 0) + priv->abyCCKPwrTbl[ii] = priv->byCCKPwr; + priv->abyOFDMPwrTbl[ii] = + priv->abyEEPROM[ii + EEP_OFS_OFDM_PWR_TBL]; + if (priv->abyOFDMPwrTbl[ii] == 0) + priv->abyOFDMPwrTbl[ii] = priv->byOFDMPwrG; } /* @@ -311,111 +311,111 @@ static int device_init_registers(struct vnt_private *pDevice) * then need to recover 12, 13, 14 channels with 11 channel */ for (ii = 11; ii < 14; ii++) { - pDevice->abyCCKPwrTbl[ii] = pDevice->abyCCKPwrTbl[10]; - pDevice->abyOFDMPwrTbl[ii] = pDevice->abyOFDMPwrTbl[10]; + priv->abyCCKPwrTbl[ii] = priv->abyCCKPwrTbl[10]; + priv->abyOFDMPwrTbl[ii] = priv->abyOFDMPwrTbl[10]; } - pDevice->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ + priv->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ /* load OFDM A power table */ for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { - pDevice->abyOFDMAPwrTbl[ii] = - pDevice->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; + priv->abyOFDMAPwrTbl[ii] = + priv->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; - if (pDevice->abyOFDMAPwrTbl[ii] == 0) - pDevice->abyOFDMAPwrTbl[ii] = pDevice->byOFDMPwrA; + if (priv->abyOFDMAPwrTbl[ii] == 0) + priv->abyOFDMAPwrTbl[ii] = priv->byOFDMPwrA; } - byAntenna = pDevice->abyEEPROM[EEP_OFS_ANTENNA]; + antenna = priv->abyEEPROM[EEP_OFS_ANTENNA]; - if (byAntenna & EEP_ANTINV) - pDevice->bTxRxAntInv = true; + if (antenna & EEP_ANTINV) + priv->bTxRxAntInv = true; else - pDevice->bTxRxAntInv = false; + priv->bTxRxAntInv = false; - byAntenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); + antenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); - if (byAntenna == 0) /* if not set default is both */ - byAntenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); + if (antenna == 0) /* if not set default is both */ + antenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); - if (byAntenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { - pDevice->byAntennaCount = 2; - pDevice->byTxAntennaMode = ANT_B; - pDevice->dwTxAntennaSel = 1; - pDevice->dwRxAntennaSel = 1; + if (antenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { + priv->byAntennaCount = 2; + priv->byTxAntennaMode = ANT_B; + priv->dwTxAntennaSel = 1; + priv->dwRxAntennaSel = 1; - if (pDevice->bTxRxAntInv == true) - pDevice->byRxAntennaMode = ANT_A; + if (priv->bTxRxAntInv == true) + priv->byRxAntennaMode = ANT_A; else - pDevice->byRxAntennaMode = ANT_B; + priv->byRxAntennaMode = ANT_B; } else { - pDevice->byAntennaCount = 1; - pDevice->dwTxAntennaSel = 0; - pDevice->dwRxAntennaSel = 0; + priv->byAntennaCount = 1; + priv->dwTxAntennaSel = 0; + priv->dwRxAntennaSel = 0; - if (byAntenna & EEP_ANTENNA_AUX) { - pDevice->byTxAntennaMode = ANT_A; + if (antenna & EEP_ANTENNA_AUX) { + priv->byTxAntennaMode = ANT_A; - if (pDevice->bTxRxAntInv == true) - pDevice->byRxAntennaMode = ANT_B; + if (priv->bTxRxAntInv == true) + priv->byRxAntennaMode = ANT_B; else - pDevice->byRxAntennaMode = ANT_A; + priv->byRxAntennaMode = ANT_A; } else { - pDevice->byTxAntennaMode = ANT_B; + priv->byTxAntennaMode = ANT_B; - if (pDevice->bTxRxAntInv == true) - pDevice->byRxAntennaMode = ANT_A; + if (priv->bTxRxAntInv == true) + priv->byRxAntennaMode = ANT_A; else - pDevice->byRxAntennaMode = ANT_B; + priv->byRxAntennaMode = ANT_B; } } /* Set initial antenna mode */ - vnt_set_antenna_mode(pDevice, pDevice->byRxAntennaMode); + vnt_set_antenna_mode(priv, priv->byRxAntennaMode); /* get Auto Fall Back type */ - pDevice->byAutoFBCtrl = AUTO_FB_0; + priv->byAutoFBCtrl = AUTO_FB_0; /* default Auto Mode */ - pDevice->byBBType = BB_TYPE_11G; + priv->byBBType = BB_TYPE_11G; /* get RFType */ - pDevice->byRFType = init_rsp->rf_type; + priv->byRFType = init_rsp->rf_type; /* load vt3266 calibration parameters in EEPROM */ - if (pDevice->byRFType == RF_VT3226D0) { - if ((pDevice->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && - (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { - - byCalibTXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_IQ]; - byCalibTXDC = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_DC]; - byCalibRXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; - if (byCalibTXIQ || byCalibTXDC || byCalibRXIQ) { + if (priv->byRFType == RF_VT3226D0) { + if ((priv->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && + (priv->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { + + calib_tx_iq = priv->abyEEPROM[EEP_OFS_CALIB_TX_IQ]; + calib_tx_dc = priv->abyEEPROM[EEP_OFS_CALIB_TX_DC]; + calib_rx_iq = priv->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; + if (calib_tx_iq || calib_tx_dc || calib_rx_iq) { /* CR255, enable TX/RX IQ and DC compensation mode */ - vnt_control_out_u8(pDevice, + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xff, 0x03); /* CR251, TX I/Q Imbalance Calibration */ - vnt_control_out_u8(pDevice, + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xfb, - byCalibTXIQ); + calib_tx_iq); /* CR252, TX DC-Offset Calibration */ - vnt_control_out_u8(pDevice, + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xfC, - byCalibTXDC); + calib_tx_dc); /* CR253, RX I/Q Imbalance Calibration */ - vnt_control_out_u8(pDevice, + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xfd, - byCalibRXIQ); + calib_rx_iq); } else { /* CR255, turn off BB Calibration compensation */ - vnt_control_out_u8(pDevice, + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xff, 0x0); @@ -424,58 +424,58 @@ static int device_init_registers(struct vnt_private *pDevice) } /* get permanent network address */ - memcpy(pDevice->abyPermanentNetAddr, init_rsp->net_addr, 6); - memcpy(pDevice->abyCurrentNetAddr, - pDevice->abyPermanentNetAddr, ETH_ALEN); + memcpy(priv->abyPermanentNetAddr, init_rsp->net_addr, 6); + memcpy(priv->abyCurrentNetAddr, + priv->abyPermanentNetAddr, ETH_ALEN); /* if exist SW network address, use it */ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Network address = %pM\n", - pDevice->abyCurrentNetAddr); + priv->abyCurrentNetAddr); /* * set BB and packet type at the same time * set Short Slot Time, xIFS, and RSPINF */ - if (pDevice->byBBType == BB_TYPE_11A) - pDevice->bShortSlotTime = true; + if (priv->byBBType == BB_TYPE_11A) + priv->bShortSlotTime = true; else - pDevice->bShortSlotTime = false; + priv->bShortSlotTime = false; - vnt_set_short_slot_time(pDevice); + vnt_set_short_slot_time(priv); - pDevice->byRadioCtl = pDevice->abyEEPROM[EEP_OFS_RADIOCTL]; - pDevice->bHWRadioOff = false; + priv->byRadioCtl = priv->abyEEPROM[EEP_OFS_RADIOCTL]; + priv->bHWRadioOff = false; - if ((pDevice->byRadioCtl & EEP_RADIOCTL_ENABLE) != 0) { - ntStatus = vnt_control_in(pDevice, MESSAGE_TYPE_READ, - MAC_REG_GPIOCTL1, MESSAGE_REQUEST_MACREG, 1, &byTmp); + if ((priv->byRadioCtl & EEP_RADIOCTL_ENABLE) != 0) { + status = vnt_control_in(priv, MESSAGE_TYPE_READ, + MAC_REG_GPIOCTL1, MESSAGE_REQUEST_MACREG, 1, &tmp); - if (ntStatus != STATUS_SUCCESS) + if (status != STATUS_SUCCESS) return false; - if ((byTmp & GPIO3_DATA) == 0) { - pDevice->bHWRadioOff = true; - vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL1, + if ((tmp & GPIO3_DATA) == 0) { + priv->bHWRadioOff = true; + vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); } else { - vnt_mac_reg_bits_off(pDevice, MAC_REG_GPIOCTL1, + vnt_mac_reg_bits_off(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); - pDevice->bHWRadioOff = false; + priv->bHWRadioOff = false; } } - vnt_mac_set_led(pDevice, LEDSTS_TMLEN, 0x38); + vnt_mac_set_led(priv, LEDSTS_TMLEN, 0x38); - vnt_mac_set_led(pDevice, LEDSTS_STS, LEDSTS_SLOW); + vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_SLOW); - vnt_mac_reg_bits_on(pDevice, MAC_REG_GPIOCTL0, 0x01); + vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL0, 0x01); - if ((pDevice->bHWRadioOff == true) || - (pDevice->bRadioControlOff == true)) { - vnt_radio_power_off(pDevice); + if ((priv->bHWRadioOff == true) || + (priv->bRadioControlOff == true)) { + vnt_radio_power_off(priv); } else { - vnt_radio_power_on(pDevice); + vnt_radio_power_on(priv); } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----INIbInitAdapter Exit\n"); -- cgit From 4e62dcc900d3c470677b5e548af8e000fef8234f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:02 +0100 Subject: staging: vt6656: main_usb replace DBG_PRT debug messages replace with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 12f93c7c8c91..021e8928db50 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -230,25 +230,24 @@ static int device_init_registers(struct vnt_private *priv) u8 tmp; u8 calib_tx_iq = 0, calib_tx_dc = 0, calib_rx_iq = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---->INIbInitAdapter. [%d][%d]\n", + dev_dbg(&priv->usb->dev, "---->INIbInitAdapter. [%d][%d]\n", DEVICE_INIT_COLD, priv->byPacketType); if (!vnt_check_firmware_version(priv)) { if (vnt_download_firmware(priv) == true) { if (vnt_firmware_branch_to_sram(priv) == false) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + dev_dbg(&priv->usb->dev, " vnt_firmware_branch_to_sram fail\n"); return false; } } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO - " FIRMWAREbDownload fail\n"); + dev_dbg(&priv->usb->dev, "FIRMWAREbDownload fail\n"); return false; } } if (!vnt_vt3184_init(priv)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" vnt_vt3184_init fail\n"); + dev_dbg(&priv->usb->dev, "vnt_vt3184_init fail\n"); return false; } @@ -264,14 +263,14 @@ static int device_init_registers(struct vnt_private *priv) MESSAGE_TYPE_CARDINIT, 0, 0, sizeof(struct vnt_cmd_card_init), (u8 *)init_cmd); if (status != STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Issue Card init fail\n"); + dev_dbg(&priv->usb->dev, "Issue Card init fail\n"); return false; } status = vnt_control_in(priv, MESSAGE_TYPE_INIT_RSP, 0, 0, sizeof(struct vnt_rsp_card_init), (u8 *)init_rsp); if (status != STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + dev_dbg(&priv->usb->dev, "Cardinit request in status fail!\n"); return false; } @@ -429,7 +428,7 @@ static int device_init_registers(struct vnt_private *priv) priv->abyPermanentNetAddr, ETH_ALEN); /* if exist SW network address, use it */ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Network address = %pM\n", + dev_dbg(&priv->usb->dev, "Network address = %pM\n", priv->abyCurrentNetAddr); /* @@ -478,7 +477,7 @@ static int device_init_registers(struct vnt_private *priv) vnt_radio_power_on(priv); } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----INIbInitAdapter Exit\n"); + dev_dbg(&priv->usb->dev, "<----INIbInitAdapter Exit\n"); return true; } -- cgit From b4ae135e7cd9274494aa57e912d1cf7b836e7ec4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:03 +0100 Subject: staging: vt6656: replace DBG_PRT error messages replace with dev_err Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 021e8928db50..ed56b603bb39 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -61,9 +61,6 @@ #include "channel.h" #include "int.h" -/* static int msglevel = MSG_LEVEL_DEBUG; */ -static int msglevel = MSG_LEVEL_INFO; - /* * define module options */ @@ -567,8 +564,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) /* allocate URBs */ tx_context->urb = usb_alloc_urb(0, GFP_ATOMIC); if (!tx_context->urb) { - DBG_PRT(MSG_LEVEL_ERR, - KERN_ERR "alloc tx urb failed\n"); + dev_err(&priv->usb->dev, "alloc tx urb failed\n"); goto free_tx; } @@ -590,15 +586,13 @@ static bool device_alloc_bufs(struct vnt_private *priv) /* allocate URBs */ rcb->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (rcb->pUrb == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR - " Failed to alloc rx urb\n"); + dev_err(&priv->usb->dev, "Failed to alloc rx urb\n"); goto free_rx_tx; } rcb->skb = dev_alloc_skb(priv->rx_buf_sz); if (rcb->skb == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR - " Failed to alloc rx skb\n"); + dev_err(&priv->usb->dev, "Failed to alloc rx skb\n"); goto free_rx_tx; } @@ -611,13 +605,13 @@ static bool device_alloc_bufs(struct vnt_private *priv) priv->pInterruptURB = usb_alloc_urb(0, GFP_ATOMIC); if (priv->pInterruptURB == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR"Failed to alloc int urb\n"); + dev_err(&priv->usb->dev, "Failed to alloc int urb\n"); goto free_rx_tx; } priv->int_buf.data_buf = kmalloc(MAX_INTERRUPT_SIZE, GFP_KERNEL); if (priv->int_buf.data_buf == NULL) { - DBG_PRT(MSG_LEVEL_ERR, KERN_ERR"Failed to alloc int buf\n"); + dev_err(&priv->usb->dev, "Failed to alloc int buf\n"); usb_free_urb(priv->pInterruptURB); goto free_rx_tx; } -- cgit From 752b7dafdb41ea2ed725f15cae821cf07d0c6662 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:04 +0100 Subject: staging: vt6656: power.c replace DBG_PRT debug messages Replace with dev_dbg Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index dbda3034d1e6..0ffbaed5d774 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -42,8 +42,6 @@ #include "card.h" #include "usbpipe.h" -static int msglevel = MSG_LEVEL_INFO; - /* * * Routine Description: @@ -93,7 +91,7 @@ void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable...\n"); + dev_dbg(&priv->usb->dev, "PS:Power Saving Mode Enable...\n"); } /* -- cgit From bccf11404690235491515c2a19ef945604e71ec0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:05 +0100 Subject: staging: vt6656: remove DBG_PRT kernel messages macro and enums All dead code and nolonger used by driver. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index dbd58103accc..f08f7dee3a53 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -185,16 +185,6 @@ /* USB registers */ #define USB_REG4 0x604 -#define DBG_PRT(l, p, args...) { if (l <= msglevel) printk(p, ##args); } - -enum { - MSG_LEVEL_ERR = 0, /* Errors causing abnormal operation */ - MSG_LEVEL_NOTICE = 1, /* Errors needing user notification */ - MSG_LEVEL_INFO = 2, /* Normal message. */ - MSG_LEVEL_VERBOSE = 3, /* Will report all trival errors. */ - MSG_LEVEL_DEBUG = 4 /* Only for debug purpose. */ -}; - #define DEVICE_INIT_COLD 0x0 /* cold init */ #define DEVICE_INIT_RESET 0x1 /* reset init or Dx to D0 power remain */ #define DEVICE_INIT_DXPL 0x2 /* Dx to D0 power lost init */ -- cgit From 2f020ebcda486855da4f462b5d52feca1d3f1f77 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:06 +0100 Subject: staging: vt6656: main_usb.c Replace DEVICE_PARAM RxDescriptors0 Replace with vnt_rx_buffers using module_param_named and MODULE_PARM_DESC Check user doe not set rx_buffer beyond the define limits of driver Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ed56b603bb39..6e79c4c012fc 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -78,7 +78,9 @@ MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); MODULE_PARM_DESC(N, D) #define RX_DESC_DEF0 64 -DEVICE_PARAM(RxDescriptors0, "Number of receive usb desc buffer"); +static int vnt_rx_buffers = RX_DESC_DEF0; +module_param_named(rx_buffers, vnt_rx_buffers, int, 0644); +MODULE_PARM_DESC(rx_buffers, "Number of receive usb rx buffers"); #define TX_DESC_DEF0 64 DEVICE_PARAM(TxDescriptors0, "Number of transmit usb desc buffer"); @@ -203,7 +205,13 @@ static void usb_device_reset(struct vnt_private *pDevice); static void device_set_options(struct vnt_private *priv) { priv->cbTD = TX_DESC_DEF0; - priv->cbRD = RX_DESC_DEF0; + + /* Set number of RX buffers */ + if (vnt_rx_buffers < CB_MIN_RX_DESC || vnt_rx_buffers > CB_MAX_RX_DESC) + priv->cbRD = RX_DESC_DEF0; + else + priv->cbRD = vnt_rx_buffers; + priv->byShortRetryLimit = SHORT_RETRY_DEF; priv->byLongRetryLimit = LONG_RETRY_DEF; priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; -- cgit From 3220e3a43de9111b1425f64260db6f8aaa817f27 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:07 +0100 Subject: staging: vt6656: main_usb.c Replace DEVICE_PARAM TxDescriptors0 Replace with vnt_tx_buffers using module_param_named and MODULE_PARM_DESC Check user doe not set tx_buffer beyond the define limits of driver Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 6e79c4c012fc..46f84910accb 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -83,7 +83,10 @@ module_param_named(rx_buffers, vnt_rx_buffers, int, 0644); MODULE_PARM_DESC(rx_buffers, "Number of receive usb rx buffers"); #define TX_DESC_DEF0 64 -DEVICE_PARAM(TxDescriptors0, "Number of transmit usb desc buffer"); +static int vnt_tx_buffers = TX_DESC_DEF0; +module_param_named(tx_buffers, vnt_rx_buffers, int, 0644); +MODULE_PARM_DESC(tx_buffers, "Number of receive usb tx buffers"); + #define CHANNEL_DEF 6 DEVICE_PARAM(Channel, "Channel number"); @@ -204,7 +207,11 @@ static void usb_device_reset(struct vnt_private *pDevice); static void device_set_options(struct vnt_private *priv) { - priv->cbTD = TX_DESC_DEF0; + /* Set number of TX buffers */ + if (vnt_tx_buffers < CB_MIN_TX_DESC || vnt_tx_buffers > CB_MAX_TX_DESC) + priv->cbTD = TX_DESC_DEF0; + else + priv->cbTD = vnt_tx_buffers; /* Set number of RX buffers */ if (vnt_rx_buffers < CB_MIN_RX_DESC || vnt_rx_buffers > CB_MAX_RX_DESC) -- cgit From eb734a6aaa3f47d20db272d73d918e8d4f80f494 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:08 +0100 Subject: staging: vt6656: remove dead code DEVICE_PARAM All these module parameters are dead Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 46f84910accb..0e65795ef4d8 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -72,11 +72,6 @@ MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); -#define DEVICE_PARAM(N, D) \ - static int N[MAX_UINTS] = OPTION_DEFAULT; \ - module_param_array(N, int, NULL, 0); \ - MODULE_PARM_DESC(N, D) - #define RX_DESC_DEF0 64 static int vnt_rx_buffers = RX_DESC_DEF0; module_param_named(rx_buffers, vnt_rx_buffers, int, 0644); @@ -89,7 +84,6 @@ MODULE_PARM_DESC(tx_buffers, "Number of receive usb tx buffers"); #define CHANNEL_DEF 6 -DEVICE_PARAM(Channel, "Channel number"); /* PreambleType[] is the preamble length used for transmit. 0: indicate allows long preamble type @@ -97,15 +91,8 @@ DEVICE_PARAM(Channel, "Channel number"); */ #define PREAMBLE_TYPE_DEF 1 - -DEVICE_PARAM(PreambleType, "Preamble Type"); - #define RTS_THRESH_DEF 2347 -DEVICE_PARAM(RTSThreshold, "RTS threshold"); - #define FRAG_THRESH_DEF 2346 -DEVICE_PARAM(FragThreshold, "Fragmentation threshold"); - #define DATA_RATE_DEF 13 /* datarate[] index 0: indicate 1 Mbps 0x02 @@ -123,11 +110,7 @@ DEVICE_PARAM(FragThreshold, "Fragmentation threshold"); 12: indicate 72 Mbps 0x90 13: indicate auto rate */ - -DEVICE_PARAM(ConnectionRate, "Connection data rate"); - #define OP_MODE_DEF 0 -DEVICE_PARAM(OPMode, "Infrastruct, adhoc, AP mode "); /* OpMode[] is used for transmit. 0: indicate infrastruct mode used @@ -141,13 +124,10 @@ DEVICE_PARAM(OPMode, "Infrastruct, adhoc, AP mode "); */ #define PS_MODE_DEF 0 -DEVICE_PARAM(PSMode, "Power saving mode"); #define SHORT_RETRY_DEF 8 -DEVICE_PARAM(ShortRetryLimit, "Short frame retry limits"); #define LONG_RETRY_DEF 4 -DEVICE_PARAM(LongRetryLimit, "long frame retry limits"); /* BasebandType[] baseband type selected 0: indicate 802.11a type @@ -156,7 +136,6 @@ DEVICE_PARAM(LongRetryLimit, "long frame retry limits"); */ #define BBP_TYPE_DEF 2 -DEVICE_PARAM(BasebandType, "baseband type"); /* 80211hEnable[] 0: indicate disable 802.11h @@ -165,8 +144,6 @@ DEVICE_PARAM(BasebandType, "baseband type"); #define X80211h_MODE_DEF 0 -DEVICE_PARAM(b80211hEnable, "802.11h mode"); - /* * Static vars definitions */ -- cgit From 71503b3ed6606c94668eb923df2aeaa49e8e6ac8 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:09 +0100 Subject: staging: vt6656: main_usb remove dead module params macros All these macros relate to module parameters already removed Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 49 --------------------------------------- 1 file changed, 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0e65795ef4d8..4bcdf8e70127 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -82,51 +82,9 @@ static int vnt_tx_buffers = TX_DESC_DEF0; module_param_named(tx_buffers, vnt_rx_buffers, int, 0644); MODULE_PARM_DESC(tx_buffers, "Number of receive usb tx buffers"); - -#define CHANNEL_DEF 6 - -/* PreambleType[] is the preamble length used for transmit. - 0: indicate allows long preamble type - 1: indicate allows short preamble type -*/ - -#define PREAMBLE_TYPE_DEF 1 #define RTS_THRESH_DEF 2347 #define FRAG_THRESH_DEF 2346 -#define DATA_RATE_DEF 13 -/* datarate[] index - 0: indicate 1 Mbps 0x02 - 1: indicate 2 Mbps 0x04 - 2: indicate 5.5 Mbps 0x0B - 3: indicate 11 Mbps 0x16 - 4: indicate 6 Mbps 0x0c - 5: indicate 9 Mbps 0x12 - 6: indicate 12 Mbps 0x18 - 7: indicate 18 Mbps 0x24 - 8: indicate 24 Mbps 0x30 - 9: indicate 36 Mbps 0x48 - 10: indicate 48 Mbps 0x60 - 11: indicate 54 Mbps 0x6c - 12: indicate 72 Mbps 0x90 - 13: indicate auto rate -*/ -#define OP_MODE_DEF 0 - -/* OpMode[] is used for transmit. - 0: indicate infrastruct mode used - 1: indicate adhoc mode used - 2: indicate AP mode used -*/ - -/* PSMode[] - 0: indicate disable power saving mode - 1: indicate enable power saving mode -*/ - -#define PS_MODE_DEF 0 - #define SHORT_RETRY_DEF 8 - #define LONG_RETRY_DEF 4 /* BasebandType[] baseband type selected @@ -137,13 +95,6 @@ MODULE_PARM_DESC(tx_buffers, "Number of receive usb tx buffers"); #define BBP_TYPE_DEF 2 -/* 80211hEnable[] - 0: indicate disable 802.11h - 1: indicate enable 802.11h -*/ - -#define X80211h_MODE_DEF 0 - /* * Static vars definitions */ -- cgit From 968a9225f73c06d04efb1cdd765131cf4ae0be39 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:10 +0100 Subject: staging: vt6656: main_usb remove static function declarations. All these functions are in visibility order. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4bcdf8e70127..932382f078a9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -115,24 +115,6 @@ static const long frequency_list[] = { }; */ -static int vt6656_probe(struct usb_interface *intf, - const struct usb_device_id *id); -static void vt6656_disconnect(struct usb_interface *intf); - -#ifdef CONFIG_PM /* Minimal support for suspend and resume */ -static int vt6656_suspend(struct usb_interface *intf, pm_message_t message); -static int vt6656_resume(struct usb_interface *intf); -#endif /* CONFIG_PM */ - -static int device_init_registers(struct vnt_private *pDevice); - -static void device_free_tx_bufs(struct vnt_private *pDevice); -static void device_free_rx_bufs(struct vnt_private *pDevice); -static void device_free_int_bufs(struct vnt_private *pDevice); -static bool device_alloc_bufs(struct vnt_private *pDevice); - -static void usb_device_reset(struct vnt_private *pDevice); - static void device_set_options(struct vnt_private *priv) { /* Set number of TX buffers */ -- cgit From b5726cb8b273c1500cd1cf743124f5a5b782a1f4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Wed, 16 Jul 2014 22:22:11 +0100 Subject: staging: vt6656: Remove commented out long frequency_list These frequencies are already defined in new tables channel.c Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 932382f078a9..6a462034fd56 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -104,17 +104,6 @@ static struct usb_device_id vt6656_table[] = { {} }; -/* frequency list (map channels to frequencies) */ -/* -static const long frequency_list[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, - 2472, 2484, 4915, 4920, 4925, 4935, 4940, 4945, 4960, 4980, 5035, 5040, - 5045, 5055, 5060, 5080, 5170, 5180, 5190, 5200, 5210, 5220, 5230, 5240, - 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 5620, 5640, - 5660, 5680, 5700, 5745, 5765, 5785, 5805, 5825 -}; -*/ - static void device_set_options(struct vnt_private *priv) { /* Set number of TX buffers */ -- cgit From 7da8d6a015cbb36e5966d207ad5a2e8d42ce8480 Mon Sep 17 00:00:00 2001 From: Larry Finger Date: Wed, 16 Jul 2014 22:03:09 -0500 Subject: staging: rtl8192ee: Fix setting highest n rate Commit 4fb6a37c3f94c1cb4b828bfcc4347771e1628f88 by Andrey Utkin and entitled "staging: rtl8192ee: "Correct bitmask in comparsion" fixed what appeared to be a typo. After consultation with the Realtek engineers, merely testing for a 2T2R device is sufficient to ensure that the TX MCS map will equal 0x0c, thus the second test can be ignored. Signed-off-by: Larry Finger Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192ee/base.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192ee/base.c b/drivers/staging/rtl8192ee/base.c index 71ed12e9deb3..f7c3c8bf71a5 100644 --- a/drivers/staging/rtl8192ee/base.c +++ b/drivers/staging/rtl8192ee/base.c @@ -826,8 +826,7 @@ static u8 _rtl_get_vht_highest_n_rate(struct ieee80211_hw *hw, u8 hw_rate; u16 map = le16_to_cpu(sta->vht_cap.vht_mcs.tx_mcs_map); - if ((get_rf_type(rtlphy) == RF_2T2R) && - (map & 0x000c) != 0x000c) { + if (get_rf_type(rtlphy) == RF_2T2R) { if ((map & 0x000c) >> 2 == IEEE80211_VHT_MCS_SUPPORT_0_7) hw_rate = rtlpriv->cfg->maps[RTL_RC_VHT_RATE_2SS_MCS7]; -- cgit From f4ef08f0c109d66fbe18e9d269438c11a01db787 Mon Sep 17 00:00:00 2001 From: Kiran Padwal Date: Thu, 17 Jul 2014 09:35:18 +0530 Subject: Staging: gdm724x: gdm_tty.c: fix missing blank line after variable declaration Checkpatch fix - Add missing blank line after variable declaration Signed-off-by: Kiran Padwal Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/gdm_tty.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/gdm_tty.c b/drivers/staging/gdm724x/gdm_tty.c index fe47cd3eb2ed..001348ccacf9 100644 --- a/drivers/staging/gdm724x/gdm_tty.c +++ b/drivers/staging/gdm724x/gdm_tty.c @@ -111,24 +111,28 @@ static int gdm_tty_install(struct tty_driver *driver, struct tty_struct *tty) static int gdm_tty_open(struct tty_struct *tty, struct file *filp) { struct gdm *gdm = tty->driver_data; + return tty_port_open(&gdm->port, tty, filp); } static void gdm_tty_cleanup(struct tty_struct *tty) { struct gdm *gdm = tty->driver_data; + tty_port_put(&gdm->port); } static void gdm_tty_hangup(struct tty_struct *tty) { struct gdm *gdm = tty->driver_data; + tty_port_hangup(&gdm->port); } static void gdm_tty_close(struct tty_struct *tty, struct file *filp) { struct gdm *gdm = tty->driver_data; + tty_port_close(&gdm->port, tty, filp); } @@ -139,6 +143,7 @@ static int gdm_tty_recv_complete(void *data, int complete) { struct gdm *gdm = tty_dev->gdm[index]; + if (!GDM_TTY_READY(gdm)) { if (complete == RECV_PACKET_PROCESS_COMPLETE) gdm_tty_recv(gdm, gdm_tty_recv_complete); -- cgit From 657b8dbc49bce60cc3f58c5667b731d77fa8e734 Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Thu, 17 Jul 2014 11:17:15 +0530 Subject: staging: ion: Remove left over comment Commit 2bb9f5034ec7 ("gpu: ion: Remove heapmask from client") removed the heap_type_mask parameter. Remove the associated kernel-doc comment too. Signed-off-by: Sachin Kamat Cc: Rebecca Schultz Zavin Cc: John Stultz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h index dcd2a0cdb192..d305bb7e9a74 100644 --- a/drivers/staging/android/ion/ion.h +++ b/drivers/staging/android/ion/ion.h @@ -84,7 +84,6 @@ void ion_reserve(struct ion_platform_data *data); /** * ion_client_create() - allocate a client and returns it * @dev: the global ion device - * @heap_type_mask: mask of heaps this client can allocate from * @name: used for debugging */ struct ion_client *ion_client_create(struct ion_device *dev, -- cgit From a01a56bdb3b31dd38b515cc6b208061d39d41458 Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Thu, 17 Jul 2014 17:09:38 +0100 Subject: staging: gdm72xx: remove debug code Removed dump_eth_packet() and helper functions called upon packet tx/rx. Signed-off-by: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_wimax.c | 106 ------------------------------------ 1 file changed, 106 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c index 726c943efac2..6754463e0fbe 100644 --- a/drivers/staging/gdm72xx/gdm_wimax.c +++ b/drivers/staging/gdm72xx/gdm_wimax.c @@ -52,108 +52,6 @@ static struct { static u8 gdm_wimax_macaddr[6] = {0x00, 0x0a, 0x3b, 0xf0, 0x01, 0x30}; -static const char *get_protocol_name(u16 protocol) -{ - static char buf[32]; - const char *name = "-"; - - switch (protocol) { - case ETH_P_ARP: - name = "ARP"; - break; - case ETH_P_IP: - name = "IP"; - break; - case ETH_P_IPV6: - name = "IPv6"; - break; - } - - sprintf(buf, "0x%04x(%s)", protocol, name); - return buf; -} - -static const char *get_ip_protocol_name(u8 ip_protocol) -{ - static char buf[32]; - const char *name = "-"; - - switch (ip_protocol) { - case IPPROTO_TCP: - name = "TCP"; - break; - case IPPROTO_UDP: - name = "UDP"; - break; - case IPPROTO_ICMP: - name = "ICMP"; - break; - } - - sprintf(buf, "%u(%s)", ip_protocol, name); - return buf; -} - -static const char *get_port_name(u16 port) -{ - static char buf[32]; - const char *name = "-"; - - switch (port) { - case 67: - name = "DHCP-Server"; - break; - case 68: - name = "DHCP-Client"; - break; - case 69: - name = "TFTP"; - break; - } - - sprintf(buf, "%u(%s)", port, name); - return buf; -} - -static void dump_eth_packet(struct net_device *dev, const char *title, - u8 *data, int len) -{ - struct iphdr *ih = NULL; - struct udphdr *uh = NULL; - u16 protocol = 0; - u8 ip_protocol = 0; - u16 port = 0; - - protocol = (data[12]<<8) | data[13]; - ih = (struct iphdr *)(data+ETH_HLEN); - - if (protocol == ETH_P_IP) { - uh = (struct udphdr *)((char *)ih + sizeof(struct iphdr)); - ip_protocol = ih->protocol; - port = ntohs(uh->dest); - } else if (protocol == ETH_P_IPV6) { - struct ipv6hdr *i6h = (struct ipv6hdr *)data; - - uh = (struct udphdr *)((char *)i6h + sizeof(struct ipv6hdr)); - ip_protocol = i6h->nexthdr; - port = ntohs(uh->dest); - } - - netdev_dbg(dev, "[%s] len=%d, %s, %s, %s\n", title, len, - get_protocol_name(protocol), - get_ip_protocol_name(ip_protocol), - get_port_name(port)); - - if (!(data[0] == 0xff && data[1] == 0xff)) { - if (protocol == ETH_P_IP) - netdev_dbg(dev, " src=%pI4\n", &ih->saddr); - else if (protocol == ETH_P_IPV6) - netdev_dbg(dev, " src=%pI6\n", &ih->saddr); - } - - print_hex_dump_debug("", DUMP_PREFIX_NONE, 16, 1, data, len, false); -} - static inline int gdm_wimax_header(struct sk_buff **pskb) { u16 buf[HCI_HEADER_SIZE / sizeof(u16)]; @@ -361,8 +259,6 @@ static int gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev) { int ret = 0; - dump_eth_packet(dev, "TX", skb->data, skb->len); - ret = gdm_wimax_header(&skb); if (ret < 0) { skb_pull(skb, HCI_HEADER_SIZE); @@ -708,8 +604,6 @@ static void gdm_wimax_netif_rx(struct net_device *dev, char *buf, int len) struct sk_buff *skb; int ret; - dump_eth_packet(dev, "RX", buf, len); - skb = dev_alloc_skb(len + 2); if (!skb) { netdev_err(dev, "%s: dev_alloc_skb failed!\n", __func__); -- cgit From f5439c612edcb6519e4c4ef266f51f1d09cc099e Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Thu, 17 Jul 2014 17:09:39 +0100 Subject: staging: gdm72xx: replace print_hex_dump_debug() with dev_dbg() Signed-off-by: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_sdio.c | 15 +++++++-------- drivers/staging/gdm72xx/gdm_usb.c | 10 ++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index 6a23bef33e0a..a741c31c6875 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -278,9 +278,8 @@ static void send_sdu(struct sdio_func *func, struct tx_cxt *tx) spin_unlock_irqrestore(&tx->lock, flags); - print_hex_dump_debug("sdio_send: ", DUMP_PREFIX_NONE, 16, 1, - tx->sdu_buf + TYPE_A_HEADER_SIZE, - aggr_len - TYPE_A_HEADER_SIZE, false); + dev_dbg(func->dev, "sdio_send: %*ph\n", aggr_len - TYPE_A_HEADER_SIZE, + tx->sdu_buf + TYPE_A_HEADER_SIZE); for (pos = TYPE_A_HEADER_SIZE; pos < aggr_len; pos += TX_CHUNK_SIZE) { len = aggr_len - pos; @@ -315,9 +314,9 @@ static void send_hci(struct sdio_func *func, struct tx_cxt *tx, { unsigned long flags; - print_hex_dump_debug("sdio_send: ", DUMP_PREFIX_NONE, 16, 1, - t->buf + TYPE_A_HEADER_SIZE, - t->len - TYPE_A_HEADER_SIZE, false); + dev_dbg(func->dev, "sdio_send: %*ph\n", t->len - TYPE_A_HEADER_SIZE, + t->buf + TYPE_A_HEADER_SIZE); + send_sdio_pkt(func, t->buf, t->len); spin_lock_irqsave(&tx->lock, flags); @@ -549,8 +548,8 @@ static void gdm_sdio_irq(struct sdio_func *func) } end_io: - print_hex_dump_debug("sdio_receive: ", DUMP_PREFIX_NONE, 16, 1, - rx->rx_buf, len, false); + dev_dbg(func->dev, "sdio_receive: %*ph\n", len, rx->rx_buf); + len = control_sdu_tx_flow(sdev, rx->rx_buf, len); spin_lock_irqsave(&rx->lock, flags); diff --git a/drivers/staging/gdm72xx/gdm_usb.c b/drivers/staging/gdm72xx/gdm_usb.c index 45b3dda9cbd6..eac2f3478bb9 100644 --- a/drivers/staging/gdm72xx/gdm_usb.c +++ b/drivers/staging/gdm72xx/gdm_usb.c @@ -341,8 +341,8 @@ static int gdm_usb_send(void *priv_dev, void *data, int len, usb_fill_bulk_urb(t->urb, usbdev, usb_sndbulkpipe(usbdev, 1), t->buf, len + padding, gdm_usb_send_complete, t); - print_hex_dump_debug("usb_send: ", DUMP_PREFIX_NONE, 16, 1, t->buf, - len + padding, false); + dev_dbg(&usbdev->dev, "usb_send: %*ph\n", len + padding, t->buf); + #ifdef CONFIG_WIMAX_GDM72XX_USB_PM if (usbdev->state & USB_STATE_SUSPENDED) { list_add_tail(&t->p_list, &tx->pending_list); @@ -420,8 +420,10 @@ static void gdm_usb_rcv_complete(struct urb *urb) if (!urb->status) { cmd_evt = (r->buf[0] << 8) | (r->buf[1]); - print_hex_dump_debug("usb_receive: ", DUMP_PREFIX_NONE, 16, 1, - r->buf, urb->actual_length, false); + + dev_dbg(&dev->dev, "usb_receive: %*ph\n", urb->actual_length, + r->buf); + if (cmd_evt == WIMAX_SDU_TX_FLOW) { if (r->buf[4] == 0) { dev_dbg(&dev->dev, "WIMAX ==> STOP SDU TX\n"); -- cgit From ea702e76af7a4b99babb54ad3285531e55466548 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Thu, 17 Jul 2014 19:28:21 +0300 Subject: drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c: drop incorrect checks Dropped some "< 0" and ">= 0" checks on unsigned int values. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=80501 Reported-by: David Binderman Signed-off-by: Andrey Utkin Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci3200.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c index a3026a229e85..3a215ac68b6f 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c @@ -1750,34 +1750,34 @@ static int apci3200_ai_config(struct comedi_device *dev, /* END JK 06.07.04: Management of sevrals boards */ if (data[5] == 0) { - if (ui_ChannelNo < 0 || ui_ChannelNo > 15) { + if (ui_ChannelNo > 15) { printk("\nThe Selection of the channel is in error\n"); i_err++; - } /* if(ui_ChannelNo<0 || ui_ChannelNo>15) */ + } /* if(ui_ChannelNo>15) */ } /* if(data[5]==0) */ else { if (data[14] == 2) { - if (ui_ChannelNo < 0 || ui_ChannelNo > 3) { + if (ui_ChannelNo > 3) { printk("\nThe Selection of the channel is in error\n"); i_err++; - } /* if(ui_ChannelNo<0 || ui_ChannelNo>3) */ + } /* if(ui_ChannelNo>3) */ } /* if(data[14]==2) */ else { - if (ui_ChannelNo < 0 || ui_ChannelNo > 7) { + if (ui_ChannelNo > 7) { printk("\nThe Selection of the channel is in error\n"); i_err++; - } /* if(ui_ChannelNo<0 || ui_ChannelNo>7) */ + } /* if(ui_ChannelNo>7) */ } /* elseif(data[14]==2) */ } /* elseif(data[5]==0) */ if (data[12] == 0 || data[12] == 1) { switch (data[5]) { case 0: - if (ui_ChannelNo >= 0 && ui_ChannelNo <= 3) { + if (ui_ChannelNo <= 3) { /* BEGIN JK 06.07.04: Management of sevrals boards */ /* i_Offset=0; */ s_BoardInfos[dev->minor].i_Offset = 0; /* END JK 06.07.04: Management of sevrals boards */ - } /* if(ui_ChannelNo >=0 && ui_ChannelNo <=3) */ + } /* if(ui_ChannelNo <=3) */ if (ui_ChannelNo >= 4 && ui_ChannelNo <= 7) { /* BEGIN JK 06.07.04: Management of sevrals boards */ /* i_Offset=64; */ @@ -1831,12 +1831,12 @@ static int apci3200_ai_config(struct comedi_device *dev, ui_ChannelNo = 0; break; } /* if(data[14]==2) */ - if (ui_ChannelNo >= 0 && ui_ChannelNo <= 1) { + if (ui_ChannelNo <= 1) { /* BEGIN JK 06.07.04: Management of sevrals boards */ /* i_Offset=0; */ s_BoardInfos[dev->minor].i_Offset = 0; /* END JK 06.07.04: Management of sevrals boards */ - } /* if(ui_ChannelNo >=0 && ui_ChannelNo <=1) */ + } /* if(ui_ChannelNo <=1) */ if (ui_ChannelNo >= 2 && ui_ChannelNo <= 3) { /* BEGIN JK 06.07.04: Management of sevrals boards */ /* i_ChannelNo=i_ChannelNo-2; */ -- cgit From 524b0b63a185f951a903e3ebc67574d962dbfd98 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 17 Jul 2014 12:39:57 -0400 Subject: staging: unisys: simplify controlvm channel address function There is no reason to have controlvm_get_channel_address() defined in a separate file. Move it to visorchipset_main.c, remove the no-op functions controlvm_init() and controlvm_deinit() from visorchipset_main.c, and remove the controlvm.h and controlvm_direct.c files from the module. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/visorchipset/Makefile | 3 +- drivers/staging/unisys/visorchipset/controlvm.h | 27 ---------- .../staging/unisys/visorchipset/controlvm_direct.c | 62 ---------------------- .../unisys/visorchipset/visorchipset_main.c | 17 ++++-- 4 files changed, 15 insertions(+), 94 deletions(-) delete mode 100644 drivers/staging/unisys/visorchipset/controlvm.h delete mode 100644 drivers/staging/unisys/visorchipset/controlvm_direct.c (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/Makefile b/drivers/staging/unisys/visorchipset/Makefile index 5071878e57da..12686906bef3 100644 --- a/drivers/staging/unisys/visorchipset/Makefile +++ b/drivers/staging/unisys/visorchipset/Makefile @@ -4,8 +4,7 @@ obj-$(CONFIG_UNISYS_VISORCHIPSET) += visorchipset.o -visorchipset-y := visorchipset_main.o controlvm_direct.o file.o \ - parser.o +visorchipset-y := visorchipset_main.o file.o parser.o ccflags-y += -Idrivers/staging/unisys/include ccflags-y += -Idrivers/staging/unisys/uislib diff --git a/drivers/staging/unisys/visorchipset/controlvm.h b/drivers/staging/unisys/visorchipset/controlvm.h deleted file mode 100644 index 012891c3f21d..000000000000 --- a/drivers/staging/unisys/visorchipset/controlvm.h +++ /dev/null @@ -1,27 +0,0 @@ -/* controlvm.h - * - * Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * 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, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __CONTROLVM_H__ -#define __CONTROLVM_H__ - -#include "timskmod.h" - -int controlvm_init(void); -void controlvm_deinit(void); -HOSTADDRESS controlvm_get_channel_address(void); - -#endif diff --git a/drivers/staging/unisys/visorchipset/controlvm_direct.c b/drivers/staging/unisys/visorchipset/controlvm_direct.c deleted file mode 100644 index cd10e3a2a07f..000000000000 --- a/drivers/staging/unisys/visorchipset/controlvm_direct.c +++ /dev/null @@ -1,62 +0,0 @@ -/* controlvm_direct.c - * - * Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * 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, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* This is a controlvm-related code that is dependent upon firmware running - * on a virtual partition. - */ - -#include "globals.h" -#include "uisutils.h" -#include "controlvm.h" -#define CURRENT_FILE_PC VISOR_CHIPSET_PC_controlvm_direct_c - - -/* We can fill in this code when we learn how to make vmcalls... */ - - - -int controlvm_init(void) -{ - return 0; -} - - - -void controlvm_deinit(void) -{ -} - - - -HOSTADDRESS controlvm_get_channel_address(void) -{ - static BOOL warned = FALSE; - U64 addr = 0; - - U32 size = 0; - - if (!VMCALL_SUCCESSFUL(Issue_VMCALL_IO_CONTROLVM_ADDR(&addr, &size))) { - if (!warned) { - ERRDRV("%s - vmcall to determine controlvm channel addr failed", - __func__); - warned = TRUE; - } - return 0; - } - INFODRV("controlvm addr=%Lx", addr); - return addr; -} diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index ecbeaec0e8d2..ea0fb647a0d9 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -16,7 +16,6 @@ */ #include "globals.h" -#include "controlvm.h" #include "visorchipset.h" #include "procobjecttree.h" #include "visorchannel.h" @@ -1837,6 +1836,20 @@ handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) return TRUE; } +HOSTADDRESS controlvm_get_channel_address(void) +{ + U64 addr = 0; + U32 size = 0; + + if (!VMCALL_SUCCESSFUL(Issue_VMCALL_IO_CONTROLVM_ADDR(&addr, &size))) { + ERRDRV("%s - vmcall to determine controlvm channel addr failed", + __func__); + return 0; + } + INFODRV("controlvm addr=%Lx", addr); + return addr; +} + static void controlvm_periodic_work(struct work_struct *work) { @@ -2633,7 +2646,6 @@ visorchipset_init(void) goto Away; } - controlvm_init(); MajorDev = MKDEV(visorchipset_major, 0); rc = visorchipset_file_init(MajorDev, &ControlVm_channel); if (rc < 0) { @@ -2789,7 +2801,6 @@ visorchipset_exit(void) visorchannel_destroy(ControlVm_channel); ControlVm_channel = NULL; } - controlvm_deinit(); visorchipset_file_cleanup(); POSTCODE_LINUX_2(DRIVER_EXIT_PC, POSTCODE_SEVERITY_INFO); LOGINF("chipset driver unloaded"); -- cgit From 8a1182eb34dcb0d5d627e2852f3e76931a653264 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 17 Jul 2014 12:39:58 -0400 Subject: staging: unisys: detect controlvm channel on module load The controlvm channel is not removable from a guest after the guest starts, so it makes no sense to constantly check for it. Move the channel address discovery to visorchipset_init(), and remove all of the checks for the channel address from the rest of the module, as the module will not load if the channel pointer is not valid. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 186 +++++++-------------- 1 file changed, 65 insertions(+), 121 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index ea0fb647a0d9..a16d67ec9cef 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -576,8 +576,6 @@ static void controlvm_respond(CONTROLVM_MESSAGE_HEADER *msgHdr, int response) { CONTROLVM_MESSAGE outmsg; - if (!ControlVm_channel) - return; controlvm_init_response(&outmsg, msgHdr, response); /* For DiagPool channel DEVICE_CHANGESTATE, we need to send * back the deviceChangeState structure in the packet. */ @@ -604,8 +602,6 @@ controlvm_respond_chipset_init(CONTROLVM_MESSAGE_HEADER *msgHdr, int response, ULTRA_CHIPSET_FEATURE features) { CONTROLVM_MESSAGE outmsg; - if (!ControlVm_channel) - return; controlvm_init_response(&outmsg, msgHdr, response); outmsg.cmd.initChipset.features = features; if (!visorchannel_signalinsert(ControlVm_channel, @@ -620,8 +616,6 @@ controlvm_respond_physdev_changestate(CONTROLVM_MESSAGE_HEADER *msgHdr, int response, ULTRA_SEGMENT_STATE state) { CONTROLVM_MESSAGE outmsg; - if (!ControlVm_channel) - return; controlvm_init_response(&outmsg, msgHdr, response); outmsg.cmd.deviceChangeState.state = state; outmsg.cmd.deviceChangeState.flags.physicalDevice = 1; @@ -739,9 +733,6 @@ device_changestate_responder(CONTROLVM_ID cmdId, VISORCHIPSET_DEVICE_INFO *p = NULL; CONTROLVM_MESSAGE outmsg; - if (!ControlVm_channel) - return; - p = finddevice(&DevInfoList, busNo, devNo); if (!p) { LOGERR("internal error; busNo=%lu, devNo=%lu", busNo, devNo); @@ -1855,7 +1846,6 @@ controlvm_periodic_work(struct work_struct *work) { VISORCHIPSET_CHANNEL_INFO chanInfo; CONTROLVM_MESSAGE inmsg; - char s[99]; BOOL gotACommand = FALSE; BOOL handle_command_failed = FALSE; static U64 Poll_Count; @@ -1870,32 +1860,9 @@ controlvm_periodic_work(struct work_struct *work) goto Away; memset(&chanInfo, 0, sizeof(VISORCHIPSET_CHANNEL_INFO)); - if (!ControlVm_channel) { - HOSTADDRESS addr = controlvm_get_channel_address(); - if (addr != 0) { - ControlVm_channel = - visorchannel_create_with_lock - (addr, - sizeof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL), - UltraControlvmChannelProtocolGuid); - if (ControlVm_channel == NULL) - LOGERR("failed to create controlvm channel"); - else if (ULTRA_CONTROLVM_CHANNEL_OK_CLIENT - (visorchannel_get_header(ControlVm_channel), - NULL)) { - LOGINF("Channel %s (ControlVm) discovered", - visorchannel_id(ControlVm_channel, s)); - initialize_controlvm_payload(); - } else { - LOGERR("controlvm channel is invalid"); - visorchannel_destroy(ControlVm_channel); - ControlVm_channel = NULL; - } - } - } Poll_Count++; - if ((ControlVm_channel != NULL) || (Poll_Count >= 250)) + if (Poll_Count >= 250) ; /* keep going */ else goto Away; @@ -1914,54 +1881,46 @@ controlvm_periodic_work(struct work_struct *work) } } - if (ControlVm_channel) { - while (visorchannel_signalremove(ControlVm_channel, - CONTROLVM_QUEUE_RESPONSE, - &inmsg)) { - if (inmsg.hdr.PayloadMaxBytes != 0) { - LOGERR("Payload of size %lu returned @%lu with unexpected message id %d.", - (ulong) inmsg.hdr.PayloadMaxBytes, - (ulong) inmsg.hdr.PayloadVmOffset, - inmsg.hdr.Id); - } - } - if (!gotACommand) { - if (ControlVm_Pending_Msg_Valid) { - /* we throttled processing of a prior - * msg, so try to process it again - * rather than reading a new one - */ - inmsg = ControlVm_Pending_Msg; - ControlVm_Pending_Msg_Valid = FALSE; - gotACommand = TRUE; - } else - gotACommand = read_controlvm_event(&inmsg); + while (visorchannel_signalremove(ControlVm_channel, + CONTROLVM_QUEUE_RESPONSE, + &inmsg)) { + if (inmsg.hdr.PayloadMaxBytes != 0) { + LOGERR("Payload of size %lu returned @%lu with unexpected message id %d.", + (ulong) inmsg.hdr.PayloadMaxBytes, + (ulong) inmsg.hdr.PayloadVmOffset, + inmsg.hdr.Id); } } + if (!gotACommand) { + if (ControlVm_Pending_Msg_Valid) { + /* we throttled processing of a prior + * msg, so try to process it again + * rather than reading a new one + */ + inmsg = ControlVm_Pending_Msg; + ControlVm_Pending_Msg_Valid = FALSE; + gotACommand = TRUE; + } else + gotACommand = read_controlvm_event(&inmsg); + } handle_command_failed = FALSE; while (gotACommand && (!handle_command_failed)) { Most_recent_message_jiffies = jiffies; - if (ControlVm_channel) { - if (handle_command(inmsg, - visorchannel_get_physaddr - (ControlVm_channel))) - gotACommand = read_controlvm_event(&inmsg); - else { - /* this is a scenario where throttling - * is required, but probably NOT an - * error...; we stash the current - * controlvm msg so we will attempt to - * reprocess it on our next loop - */ - handle_command_failed = TRUE; - ControlVm_Pending_Msg = inmsg; - ControlVm_Pending_Msg_Valid = TRUE; - } - - } else { - handle_command(inmsg, 0); - gotACommand = FALSE; + if (handle_command(inmsg, + visorchannel_get_physaddr + (ControlVm_channel))) + gotACommand = read_controlvm_event(&inmsg); + else { + /* this is a scenario where throttling + * is required, but probably NOT an + * error...; we stash the current + * controlvm msg so we will attempt to + * reprocess it on our next loop + */ + handle_command_failed = TRUE; + ControlVm_Pending_Msg = inmsg; + ControlVm_Pending_Msg_Valid = TRUE; } } @@ -1998,7 +1957,6 @@ setup_crash_devices_work_queue(struct work_struct *work) CONTROLVM_MESSAGE localCrashCreateBusMsg; CONTROLVM_MESSAGE localCrashCreateDevMsg; CONTROLVM_MESSAGE msg; - HOSTADDRESS host_addr; U32 localSavedCrashMsgOffset; U16 localSavedCrashMsgCount; @@ -2021,26 +1979,6 @@ setup_crash_devices_work_queue(struct work_struct *work) chipset_init(&msg); - host_addr = controlvm_get_channel_address(); - if (!host_addr) { - LOGERR("Huh? Host address is NULL"); - POSTCODE_LINUX_2(CRASH_DEV_HADDR_NULL, POSTCODE_SEVERITY_ERR); - return; - } - - ControlVm_channel = - visorchannel_create_with_lock - (host_addr, - sizeof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL), - UltraControlvmChannelProtocolGuid); - - if (ControlVm_channel == NULL) { - LOGERR("failed to create controlvm channel"); - POSTCODE_LINUX_2(CRASH_DEV_CONTROLVM_NULL, - POSTCODE_SEVERITY_ERR); - return; - } - /* get saved message count */ if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, @@ -2331,9 +2269,6 @@ proc_read_installer(struct file *file, char __user *buf, char *vbuf; loff_t pos = *offset; - if (!ControlVm_channel) - return -ENODEV; - if (pos < 0) return -EINVAL; @@ -2383,9 +2318,6 @@ proc_write_installer(struct file *file, U16 remainingSteps; U32 error, textId; - if (!ControlVm_channel) - return -ENODEV; - /* Check to make sure there is no buffer overflow */ if (count > (sizeof(buf) - 1)) return -EINVAL; @@ -2447,9 +2379,6 @@ proc_read_toolaction(struct file *file, char __user *buf, char *vbuf; loff_t pos = *offset; - if (!ControlVm_channel) - return -ENODEV; - if (pos < 0) return -EINVAL; @@ -2488,9 +2417,6 @@ proc_write_toolaction(struct file *file, char buf[3]; U8 toolAction; - if (!ControlVm_channel) - return -ENODEV; - /* Check to make sure there is no buffer overflow */ if (count > (sizeof(buf) - 1)) return -EINVAL; @@ -2530,9 +2456,6 @@ proc_read_bootToTool(struct file *file, char __user *buf, char *vbuf; loff_t pos = *offset; - if (!ControlVm_channel) - return -ENODEV; - if (pos < 0) return -EINVAL; @@ -2571,9 +2494,6 @@ proc_write_bootToTool(struct file *file, int inputVal; ULTRA_EFI_SPAR_INDICATION efiSparIndication; - if (!ControlVm_channel) - return -ENODEV; - /* Check to make sure there is no buffer overflow */ if (count > (sizeof(buf) - 1)) return -EINVAL; @@ -2612,9 +2532,11 @@ static int __init visorchipset_init(void) { int rc = 0, x = 0; + char s[64]; struct proc_dir_entry *installer_file; struct proc_dir_entry *toolaction_file; struct proc_dir_entry *bootToTool_file; + HOSTADDRESS addr; if (!unisys_spar_platform) return -ENODEV; @@ -2646,6 +2568,30 @@ visorchipset_init(void) goto Away; } + addr = controlvm_get_channel_address(); + if (addr != 0) { + ControlVm_channel = + visorchannel_create_with_lock + (addr, + sizeof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL), + UltraControlvmChannelProtocolGuid); + if (ULTRA_CONTROLVM_CHANNEL_OK_CLIENT + (visorchannel_get_header(ControlVm_channel), + NULL)) { + LOGINF("Channel %s (ControlVm) discovered", + visorchannel_id(ControlVm_channel, s)); + initialize_controlvm_payload(); + } else { + LOGERR("controlvm channel is invalid"); + visorchannel_destroy(ControlVm_channel); + ControlVm_channel = NULL; + return -ENODEV; + } + } else { + LOGERR("no controlvm channel discovered"); + return -ENODEV; + } + MajorDev = MKDEV(visorchipset_major, 0); rc = visorchipset_file_init(MajorDev, &ControlVm_channel); if (rc < 0) { @@ -2795,12 +2741,10 @@ visorchipset_exit(void) memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); proc_DeInit(); - if (ControlVm_channel != NULL) { - LOGINF("Channel %s (ControlVm) disconnected", - visorchannel_id(ControlVm_channel, s)); - visorchannel_destroy(ControlVm_channel); - ControlVm_channel = NULL; - } + LOGINF("Channel %s (ControlVm) disconnected", + visorchannel_id(ControlVm_channel, s)); + visorchannel_destroy(ControlVm_channel); + visorchipset_file_cleanup(); POSTCODE_LINUX_2(DRIVER_EXIT_PC, POSTCODE_SEVERITY_INFO); LOGINF("chipset driver unloaded"); -- cgit From 871379dc0fd9748892bdf10536f2664751a7819c Mon Sep 17 00:00:00 2001 From: Josep Puigdemont Date: Thu, 17 Jul 2014 01:03:39 +0200 Subject: staging: lustre: plain interger was used as NULL pointer This patch fixes the following warnings found when running sparse: .../lproc_echo.c:43:11: warning: Using plain integer as NULL pointer .../lproc_echo.c:49:11: warning: Using plain integer as NULL pointer Signed-off-by: Josep Puigdemont Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdecho/lproc_echo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c index 487c4f3be20f..1d3bf6c93129 100644 --- a/drivers/staging/lustre/lustre/obdecho/lproc_echo.c +++ b/drivers/staging/lustre/lustre/obdecho/lproc_echo.c @@ -40,13 +40,13 @@ LPROC_SEQ_FOPS_RO_TYPE(echo, uuid); static struct lprocfs_vars lprocfs_echo_obd_vars[] = { { "uuid", &echo_uuid_fops, NULL, 0 }, - { 0 } + { NULL } }; LPROC_SEQ_FOPS_RO_TYPE(echo, numrefs); static struct lprocfs_vars lprocfs_echo_module_vars[] = { { "num_refs", &echo_numrefs_fops, NULL, 0 }, - { 0 } + { NULL } }; void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) -- cgit From 75533a038632fbbd180c9f6621783aabfeeccf5c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 17 Jul 2014 18:33:02 -0700 Subject: staging: gdm72xx: fix build errors This fixes the build errors in the dev_dbg() fixes in a previous patch. Reported-by: kbuild test robot To: Michalis Pappas Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm72xx/gdm_sdio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm72xx/gdm_sdio.c b/drivers/staging/gdm72xx/gdm_sdio.c index a741c31c6875..7a0a0f221418 100644 --- a/drivers/staging/gdm72xx/gdm_sdio.c +++ b/drivers/staging/gdm72xx/gdm_sdio.c @@ -278,7 +278,7 @@ static void send_sdu(struct sdio_func *func, struct tx_cxt *tx) spin_unlock_irqrestore(&tx->lock, flags); - dev_dbg(func->dev, "sdio_send: %*ph\n", aggr_len - TYPE_A_HEADER_SIZE, + dev_dbg(&func->dev, "sdio_send: %*ph\n", aggr_len - TYPE_A_HEADER_SIZE, tx->sdu_buf + TYPE_A_HEADER_SIZE); for (pos = TYPE_A_HEADER_SIZE; pos < aggr_len; pos += TX_CHUNK_SIZE) { @@ -314,7 +314,7 @@ static void send_hci(struct sdio_func *func, struct tx_cxt *tx, { unsigned long flags; - dev_dbg(func->dev, "sdio_send: %*ph\n", t->len - TYPE_A_HEADER_SIZE, + dev_dbg(&func->dev, "sdio_send: %*ph\n", t->len - TYPE_A_HEADER_SIZE, t->buf + TYPE_A_HEADER_SIZE); send_sdio_pkt(func, t->buf, t->len); @@ -548,7 +548,7 @@ static void gdm_sdio_irq(struct sdio_func *func) } end_io: - dev_dbg(func->dev, "sdio_receive: %*ph\n", len, rx->rx_buf); + dev_dbg(&func->dev, "sdio_receive: %*ph\n", len, rx->rx_buf); len = control_sdu_tx_flow(sdev, rx->rx_buf, len); -- cgit From 9d1e0d094bd22e32594d99c847c6f917b280df00 Mon Sep 17 00:00:00 2001 From: Khoa Mai Date: Fri, 18 Jul 2014 04:45:04 +0300 Subject: staging: bcm: Qos.c: Fix coding style Fix C99 comment Signed-off-by: Khoa Mai Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index c5213b3485e1..e3cbcb1c8379 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -322,8 +322,8 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) spin_lock_bh(&Adapter->PackInfo[iIndex].SFQueueLock); while (1) { -// while((UINT)Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost > -// SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { + /* while((UINT)Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost > */ + /* SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "uiCurrentBytesOnHost:%x uiMaxBucketSize :%x", Adapter->PackInfo[iIndex].uiCurrentBytesOnHost, @@ -379,7 +379,7 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "=====>"); -// down(&Adapter->data_packet_queue_lock); + /* down(&Adapter->data_packet_queue_lock); */ for (iQIndex = LowPriority; iQIndex < HiPriority; iQIndex++) { struct net_device_stats *netstats = &Adapter->dev->stats; @@ -413,7 +413,7 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) } spin_unlock_bh(&Adapter->PackInfo[iQIndex].SFQueueLock); } -// up(&Adapter->data_packet_queue_lock); + /* up(&Adapter->data_packet_queue_lock); */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "<====="); } @@ -765,7 +765,7 @@ static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload /* 802.1Q VLAN Header */ pstEthCsPktInfo->eNwpktEthFrameType = eEth802QVLANFrame; u16Etype = ((struct bcm_eth_q_frame *)pvEthPayload)->EthType; - //((ETH_CS_802_Q_FRAME*)pvEthPayload)->UserPriority + /* ((ETH_CS_802_Q_FRAME*)pvEthPayload)->UserPriority */ } else { pstEthCsPktInfo->eNwpktEthFrameType = eEthOtherFrame; u16Etype = ntohs(u16Etype); -- cgit From dfcd909227307e6581ba19cfaba2ca7b7ed63a80 Mon Sep 17 00:00:00 2001 From: Khoa Mai Date: Fri, 18 Jul 2014 04:45:05 +0300 Subject: staging: bcm: Qos.c: Fix coding style Switch and case should be in same indent level Signed-off-by: Khoa Mai Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index e3cbcb1c8379..0eb78a8010fe 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -438,26 +438,26 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) EThCSGetPktInfo(Adapter, pvEThPayload, &stEthCsPktInfo); switch (stEthCsPktInfo.eNwpktEthFrameType) { - case eEth802LLCFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLCFrame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_frame); - break; - case eEth802LLCSNAPFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLC SNAP Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_snap_frame); - break; - case eEth802QVLANFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802.1Q VLANFrame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_q_frame); - break; - case eEthOtherFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : ETH Other Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); - break; - default: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Unrecognized ETH Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); - break; + case eEth802LLCFrame: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLCFrame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_frame); + break; + case eEth802LLCSNAPFrame: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLC SNAP Frame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_snap_frame); + break; + case eEth802QVLANFrame: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802.1Q VLANFrame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_eth_q_frame); + break; + case eEthOtherFrame: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : ETH Other Frame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); + break; + default: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Unrecognized ETH Frame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); + break; } if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) { -- cgit From 76d382fc8088385ef85547945d223b171b94ac54 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:08 +0100 Subject: staging: vt6656: usb_device_reset remove camel case Camel case change pDevice -> priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 6a462034fd56..436523f63f1c 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -438,13 +438,13 @@ static void device_free_rx_bufs(struct vnt_private *priv) return; } -static void usb_device_reset(struct vnt_private *pDevice) +static void usb_device_reset(struct vnt_private *priv) { int status; - status = usb_reset_device(pDevice->usb); + status = usb_reset_device(priv->usb); if (status) - dev_warn(&pDevice->usb->dev, + dev_warn(&priv->usb->dev, "usb_device_reset fail status=%d\n", status); return ; } -- cgit From 1b6953dde4b3b9a88f76437cd994196113af9be2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:09 +0100 Subject: staging: vt6656: fix module_param_named tx_buffers variable Should point to vnt_tx_buffers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 436523f63f1c..06e4861123e2 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -79,7 +79,7 @@ MODULE_PARM_DESC(rx_buffers, "Number of receive usb rx buffers"); #define TX_DESC_DEF0 64 static int vnt_tx_buffers = TX_DESC_DEF0; -module_param_named(tx_buffers, vnt_rx_buffers, int, 0644); +module_param_named(tx_buffers, vnt_tx_buffers, int, 0644); MODULE_PARM_DESC(tx_buffers, "Number of receive usb tx buffers"); #define RTS_THRESH_DEF 2347 -- cgit From 23dbf877b10b62a143fefc95e85ee949ea0a667c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:10 +0100 Subject: staging: vt6656: struct vnt_rcb remove unused members Remove Next and Ref Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/usbpipe.c | 1 - 2 files changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index f08f7dee3a53..ad43c6f931c2 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -219,8 +219,6 @@ enum { /* RCB (Receive Control Block) */ struct vnt_rcb { - void *Next; - signed long Ref; void *pDevice; struct urb *pUrb; struct sk_buff *skb; diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 59e508c648ab..d994b1b093ab 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -207,7 +207,6 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) return STATUS_FAILURE ; } - rcb->Ref = 1; rcb->bBoolInUse = true; return status; -- cgit From 325de98424fd5f6bf7e12f598dc1c54b4595a760 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:11 +0100 Subject: staging: vt6656: struct vnt_rcb remove camel case Camel case changes pDevice -> priv pUrb -> urb bBoolInUse -> in_use Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 6 +++--- drivers/staging/vt6656/main_usb.c | 14 +++++++------- drivers/staging/vt6656/usbpipe.c | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index ad43c6f931c2..8f318a9d8ba7 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -219,10 +219,10 @@ enum { /* RCB (Receive Control Block) */ struct vnt_rcb { - void *pDevice; - struct urb *pUrb; + void *priv; + struct urb *urb; struct sk_buff *skb; - int bBoolInUse; + int in_use; }; /* used to track bulk out irps */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 06e4861123e2..be498bca13d6 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -423,9 +423,9 @@ static void device_free_rx_bufs(struct vnt_private *priv) continue; /* deallocate URBs */ - if (rcb->pUrb) { - usb_kill_urb(rcb->pUrb); - usb_free_urb(rcb->pUrb); + if (rcb->urb) { + usb_kill_urb(rcb->urb); + usb_free_urb(rcb->urb); } /* deallocate skb */ @@ -495,11 +495,11 @@ static bool device_alloc_bufs(struct vnt_private *priv) rcb = priv->apRCB[ii]; - rcb->pDevice = priv; + rcb->priv = priv; /* allocate URBs */ - rcb->pUrb = usb_alloc_urb(0, GFP_ATOMIC); - if (rcb->pUrb == NULL) { + rcb->urb = usb_alloc_urb(0, GFP_ATOMIC); + if (rcb->urb == NULL) { dev_err(&priv->usb->dev, "Failed to alloc rx urb\n"); goto free_rx_tx; } @@ -510,7 +510,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) goto free_rx_tx; } - rcb->bBoolInUse = false; + rcb->in_use = false; /* submit rx urb */ if (vnt_submit_rx_urb(priv, rcb)) diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index d994b1b093ab..126294d1f1bb 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -187,7 +187,7 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) int status = 0; struct urb *urb; - urb = rcb->pUrb; + urb = rcb->urb; if (rcb->skb == NULL) { dev_dbg(&priv->usb->dev, "rcb->skb is null\n"); return status; @@ -207,7 +207,7 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) return STATUS_FAILURE ; } - rcb->bBoolInUse = true; + rcb->in_use = true; return status; } @@ -215,7 +215,7 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) static void vnt_submit_rx_urb_complete(struct urb *urb) { struct vnt_rcb *rcb = urb->context; - struct vnt_private *priv = rcb->pDevice; + struct vnt_private *priv = rcb->priv; unsigned long flags; switch (urb->status) { @@ -240,7 +240,7 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) dev_dbg(&priv->usb->dev, "Failed to re-alloc rx skb\n"); - rcb->bBoolInUse = false; + rcb->in_use = false; spin_unlock_irqrestore(&priv->lock, flags); return; } @@ -258,7 +258,7 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) if (usb_submit_urb(urb, GFP_ATOMIC)) { dev_dbg(&priv->usb->dev, "Failed to re submit rx skb\n"); - rcb->bBoolInUse = false; + rcb->in_use = false; } return; -- cgit From 7b6914c84f45a936e36385484ef7a0eb0fa489a4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:12 +0100 Subject: staging: vt6656: remove dead structure struct vnt_tx_pkt_info Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 8f318a9d8ba7..f3ff6f542dd3 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -240,12 +240,6 @@ struct vnt_usb_send_context { unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; }; -/* tx packet info for rxtx */ -struct vnt_tx_pkt_info { - u16 fifo_ctl; - u8 dest_addr[ETH_ALEN]; -}; - /* * Structure to keep track of USB interrupt packets */ @@ -300,7 +294,6 @@ struct vnt_private { /* Variables to track resources for the BULK Out Pipe */ struct vnt_usb_send_context *apTD[CB_MAX_TX_DESC]; u32 cbTD; - struct vnt_tx_pkt_info pkt_info[16]; /* Variables to track resources for the Interrupt In Pipe */ struct vnt_interrupt_buffer int_buf; -- cgit From 421ce4e58e98fbd9eacc5ad95fc2fb3b2b92858a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:13 +0100 Subject: staging: vt6656: struct vnt_private remove dead variables Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index f3ff6f542dd3..8257a641f474 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -381,8 +381,6 @@ struct vnt_private { enum vnt_cmd command; - int bStopDataPkt; - /* 802.11 counter */ enum vnt_cmd cmd_queue[CMD_Q_SIZE]; @@ -396,22 +394,15 @@ struct vnt_private { u8 byAutoFBCtrl; /* For Update BaseBand VGA Gain Offset */ - u32 uBBVGADiffCount; - u8 byBBVGANew; - u8 byBBVGACurrent; u8 abyBBVGA[BB_VGA_LEVEL]; signed long ldBmThreshold[BB_VGA_LEVEL]; u8 byBBPreEDRSSI; u8 byBBPreEDIndex; - int bRadioCmd; - /* command timer */ struct delayed_work run_command_work; - u8 tx_data_time_out; - int bChannelSwitch; u8 byNewChannel; u8 byChannelSwitchCount; -- cgit From 3d582487beb83d650fbd25cb65688b0fbedc97f1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:14 +0100 Subject: staging: vt6656: struct vnt_private pInterruptURB rename to interrupt_urb Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 14 +++++++------- drivers/staging/vt6656/usbpipe.c | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 8257a641f474..22554af3ae36 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -284,7 +284,7 @@ struct vnt_private { unsigned long Flags; /* USB */ - struct urb *pInterruptURB; + struct urb *interrupt_urb; u32 int_interval; /* Variables to track resources for the BULK In Pipe */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index be498bca13d6..fe2f0bcd4c06 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -517,8 +517,8 @@ static bool device_alloc_bufs(struct vnt_private *priv) goto free_rx_tx; } - priv->pInterruptURB = usb_alloc_urb(0, GFP_ATOMIC); - if (priv->pInterruptURB == NULL) { + priv->interrupt_urb = usb_alloc_urb(0, GFP_ATOMIC); + if (priv->interrupt_urb == NULL) { dev_err(&priv->usb->dev, "Failed to alloc int urb\n"); goto free_rx_tx; } @@ -526,7 +526,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) priv->int_buf.data_buf = kmalloc(MAX_INTERRUPT_SIZE, GFP_KERNEL); if (priv->int_buf.data_buf == NULL) { dev_err(&priv->usb->dev, "Failed to alloc int buf\n"); - usb_free_urb(priv->pInterruptURB); + usb_free_urb(priv->interrupt_urb); goto free_rx_tx; } @@ -590,8 +590,8 @@ free_all: device_free_tx_bufs(priv); device_free_int_bufs(priv); - usb_kill_urb(priv->pInterruptURB); - usb_free_urb(priv->pInterruptURB); + usb_kill_urb(priv->interrupt_urb); + usb_free_urb(priv->interrupt_urb); return -ENOMEM; } @@ -629,8 +629,8 @@ static void vnt_stop(struct ieee80211_hw *hw) device_free_rx_bufs(priv); device_free_int_bufs(priv); - usb_kill_urb(priv->pInterruptURB); - usb_free_urb(priv->pInterruptURB); + usb_kill_urb(priv->interrupt_urb); + usb_free_urb(priv->interrupt_urb); return; } diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 126294d1f1bb..9a8874917f8d 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -126,7 +126,7 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) priv->int_buf.in_use = true; - usb_fill_int_urb(priv->pInterruptURB, + usb_fill_int_urb(priv->interrupt_urb, priv->usb, usb_rcvintpipe(priv->usb, 1), priv->int_buf.data_buf, @@ -135,7 +135,7 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) priv, priv->int_interval); - status = usb_submit_urb(priv->pInterruptURB, GFP_ATOMIC); + status = usb_submit_urb(priv->interrupt_urb, GFP_ATOMIC); if (status) { dev_dbg(&priv->usb->dev, "Submit int URB failed %d\n", status); priv->int_buf.in_use = false; @@ -172,7 +172,7 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb) vnt_int_process_data(priv); } - status = usb_submit_urb(priv->pInterruptURB, GFP_ATOMIC); + status = usb_submit_urb(priv->interrupt_urb, GFP_ATOMIC); if (status) { dev_dbg(&priv->usb->dev, "Submit int URB failed %d\n", status); } else { -- cgit From 8577011c7a97df032e2a08f3b00296c4a7f3a12e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:15 +0100 Subject: staging: vt6656: struct vnt_private rename apRCB to rcb Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 22554af3ae36..a5a6c3949ea4 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -288,7 +288,7 @@ struct vnt_private { u32 int_interval; /* Variables to track resources for the BULK In Pipe */ - struct vnt_rcb *apRCB[CB_MAX_RX_DESC]; + struct vnt_rcb *rcb[CB_MAX_RX_DESC]; u32 cbRD; /* Variables to track resources for the BULK Out Pipe */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fe2f0bcd4c06..5c8ff9871535 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -418,7 +418,7 @@ static void device_free_rx_bufs(struct vnt_private *priv) int ii; for (ii = 0; ii < priv->cbRD; ii++) { - rcb = priv->apRCB[ii]; + rcb = priv->rcb[ii]; if (!rcb) continue; @@ -486,14 +486,14 @@ static bool device_alloc_bufs(struct vnt_private *priv) } for (ii = 0; ii < priv->cbRD; ii++) { - priv->apRCB[ii] = kzalloc(sizeof(struct vnt_rcb), GFP_KERNEL); - if (!priv->apRCB[ii]) { + priv->rcb[ii] = kzalloc(sizeof(struct vnt_rcb), GFP_KERNEL); + if (!priv->rcb[ii]) { dev_err(&priv->usb->dev, "failed to allocate rcb no %d\n", ii); goto free_rx_tx; } - rcb = priv->apRCB[ii]; + rcb = priv->rcb[ii]; rcb->priv = priv; -- cgit From f7e4a8f45c133f4deefef9656e93222c0431caa1 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 06:36:16 +0100 Subject: staging: vt6656: struct vnt_private rename apTD to tx_context Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- drivers/staging/vt6656/rxtx.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index a5a6c3949ea4..757d500deef1 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -292,7 +292,7 @@ struct vnt_private { u32 cbRD; /* Variables to track resources for the BULK Out Pipe */ - struct vnt_usb_send_context *apTD[CB_MAX_TX_DESC]; + struct vnt_usb_send_context *tx_context[CB_MAX_TX_DESC]; u32 cbTD; /* Variables to track resources for the Interrupt In Pipe */ diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 87ac6a17f75c..e404d9e6a0e7 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -78,7 +78,7 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) if (pkt_no >= priv->cbTD) return -EINVAL; - context = priv->apTD[pkt_no]; + context = priv->tx_context[pkt_no]; if (!context->skb) return -EINVAL; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 5c8ff9871535..ff4e18d2e8f7 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -399,7 +399,7 @@ static void device_free_tx_bufs(struct vnt_private *priv) int ii; for (ii = 0; ii < priv->cbTD; ii++) { - tx_context = priv->apTD[ii]; + tx_context = priv->tx_context[ii]; /* deallocate URBs */ if (tx_context->urb) { usb_kill_urb(tx_context->urb); @@ -471,7 +471,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) goto free_tx; } - priv->apTD[ii] = tx_context; + priv->tx_context[ii] = tx_context; tx_context->priv = priv; tx_context->pkt_no = ii; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 76b7f173f4fa..f3bbfba1b138 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -82,10 +82,10 @@ static struct vnt_usb_send_context dev_dbg(&priv->usb->dev, "%s\n", __func__); for (ii = 0; ii < priv->cbTD; ii++) { - if (!priv->apTD[ii]) + if (!priv->tx_context[ii]) return NULL; - context = priv->apTD[ii]; + context = priv->tx_context[ii]; if (context->in_use == false) { context->in_use = true; memset(context->data, 0, -- cgit From 89c4695efd4b7d107a9ddbcf5c58b21051939d98 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:52 -0700 Subject: staging: comedi: ni_mio_common: convert printk messages to dev_err Where possible, convert the printk() messages in this file to dev_err(). Remove a couple commented out printk() messages. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 137 ++++++++++++------------- 1 file changed, 64 insertions(+), 73 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 751a1f418a9c..efe62affdba1 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -682,8 +682,8 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, ni_writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); break; default: - printk("Warning %s() called with invalid register\n", __func__); - printk("reg is %d\n", reg); + dev_err(dev->class_dev, + "%s called with invalid register %d\n", __func__, reg); break; } mmiowb(); @@ -1082,11 +1082,11 @@ static int ni_ai_drain_dma(struct comedi_device *dev) udelay(5); } if (i == timeout) { - printk("ni_mio_common: wait for dma drain timed out\n"); - printk - ("mite_bytes_in_transit=%i, AI_Status1_Register=0x%x\n", - mite_bytes_in_transit(devpriv->ai_mite_chan), - ni_stc_readw(dev, AI_Status_1_Register)); + dev_err(dev->class_dev, "%s timed out\n", __func__); + dev_err(dev->class_dev, + "mite_bytes_in_transit=%i, AI_Status1_Register=0x%x\n", + mite_bytes_in_transit(devpriv->ai_mite_chan), + ni_stc_readw(dev, AI_Status_1_Register)); retval = -1; } } @@ -1512,9 +1512,9 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, if (ai_mite_status & ~(CHSR_INT | CHSR_LINKC | CHSR_DONE | CHSR_MRDY | CHSR_DRDY | CHSR_DRQ1 | CHSR_DRQ0 | CHSR_ERROR | CHSR_SABORT | CHSR_XFERR | CHSR_LxERR_mask)) { - printk - ("unknown mite interrupt, ack! (ai_mite_status=%08x)\n", - ai_mite_status); + dev_err(dev->class_dev, + "unknown mite interrupt (ai_mite_status=%08x)\n", + ai_mite_status); s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; /* disable_irq(dev->irq); */ } @@ -1524,8 +1524,7 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, if (status & (AI_Overrun_St | AI_Overflow_St | AI_SC_TC_Error_St | AI_SC_TC_St | AI_START1_St)) { if (status == 0xffff) { - printk - ("ni_mio_common: a_status=0xffff. Card removed?\n"); + dev_err(dev->class_dev, "Card removed?\n"); /* we probably aren't even running a command now, * so it's a good idea to be careful. */ if (comedi_is_subdevice_running(s)) { @@ -1537,8 +1536,8 @@ static void handle_a_interrupt(struct comedi_device *dev, unsigned short status, } if (status & (AI_Overrun_St | AI_Overflow_St | AI_SC_TC_Error_St)) { - printk("ni_mio_common: ai error a_status=%04x\n", - status); + dev_err(dev->class_dev, "ai error a_status=%04x\n", + status); shutdown_ai_command(dev); @@ -1614,9 +1613,9 @@ static void handle_b_interrupt(struct comedi_device *dev, if (ao_mite_status & ~(CHSR_INT | CHSR_LINKC | CHSR_DONE | CHSR_MRDY | CHSR_DRDY | CHSR_DRQ1 | CHSR_DRQ0 | CHSR_ERROR | CHSR_SABORT | CHSR_XFERR | CHSR_LxERR_mask)) { - printk - ("unknown mite interrupt, ack! (ao_mite_status=%08x)\n", - ao_mite_status); + dev_err(dev->class_dev, + "unknown mite interrupt (ao_mite_status=%08x)\n", + ao_mite_status); s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; } #endif @@ -1624,9 +1623,9 @@ static void handle_b_interrupt(struct comedi_device *dev, if (b_status == 0xffff) return; if (b_status & AO_Overrun_St) { - printk - ("ni_mio_common: AO FIFO underrun status=0x%04x status2=0x%04x\n", - b_status, ni_stc_readw(dev, AO_Status_2_Register)); + dev_err(dev->class_dev, + "AO FIFO underrun status=0x%04x status2=0x%04x\n", + b_status, ni_stc_readw(dev, AO_Status_2_Register)); s->async->events |= COMEDI_CB_OVERFLOW; } @@ -1639,7 +1638,7 @@ static void handle_b_interrupt(struct comedi_device *dev, ret = ni_ao_fifo_half_empty(dev, s); if (!ret) { - printk("ni_mio_common: AO buffer underrun\n"); + dev_err(dev->class_dev, "AO buffer underrun\n"); ni_set_bits(dev, Interrupt_B_Enable_Register, AO_FIFO_Interrupt_Enable | AO_Error_Interrupt_Enable, 0); @@ -1691,7 +1690,6 @@ static int ni_ai_setup_MITE_dma(struct comedi_device *dev) retval = ni_request_ai_mite_channel(dev); if (retval) return retval; -/* printk("comedi_debug: using mite channel %i for ai.\n", devpriv->ai_mite_chan->channel); */ /* write alloc the entire buffer */ comedi_buf_write_alloc(s, s->async->prealloc_bufsz); @@ -1888,7 +1886,7 @@ static void ni_prime_channelgain_list(struct comedi_device *dev) } udelay(1); } - printk("ni_mio_common: timeout loading channel/gain list\n"); + dev_err(dev->class_dev, "timeout loading channel/gain list\n"); } static void ni_m_series_load_channelgain_list(struct comedi_device *dev, @@ -2156,8 +2154,8 @@ static int ni_ai_insn_read(struct comedi_device *dev, } } if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in 611x ni_ai_insn_read\n"); + dev_err(dev->class_dev, "%s timeout\n", + __func__); return -ETIME; } d += signbits; @@ -2180,8 +2178,8 @@ static int ni_ai_insn_read(struct comedi_device *dev, } } if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in 6143 ni_ai_insn_read\n"); + dev_err(dev->class_dev, "%s timeout\n", + __func__); return -ETIME; } data[n] = (((dl >> 16) & 0xFFFF) + signbits) & 0xFFFF; @@ -2196,8 +2194,8 @@ static int ni_ai_insn_read(struct comedi_device *dev, break; } if (i == NI_TIMEOUT) { - printk - ("ni_mio_common: timeout in ni_ai_insn_read\n"); + dev_err(dev->class_dev, "%s timeout\n", + __func__); return -ETIME; } if (devpriv->is_m_series) { @@ -2857,8 +2855,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, M_Offset_AO_Reference_Attenuation(chan)); break; default: - printk("%s: bug! unhandled ao reference voltage\n", - __func__); + dev_err(dev->class_dev, + "%s: bug! unhandled ao reference voltage\n", + __func__); break; } switch (krange->max + krange->min) { @@ -2869,8 +2868,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, conf |= MSeries_AO_DAC_Offset_5V_Bits; break; default: - printk("%s: bug! unhandled ao offset voltage\n", - __func__); + dev_err(dev->class_dev, + "%s: bug! unhandled ao offset voltage\n", + __func__); break; } if (timed) @@ -3721,14 +3721,12 @@ static void handle_cdio_interrupt(struct comedi_device *dev) cdio_status = ni_readl(dev, M_Offset_CDIO_Status); if (cdio_status & (CDO_Overrun_Bit | CDO_Underflow_Bit)) { - /* printk("cdio error: statux=0x%x\n", cdio_status); */ /* XXX just guessing this is needed and does something useful */ ni_writel(dev, CDO_Error_Interrupt_Confirm_Bit, M_Offset_CDIO_Command); s->async->events |= COMEDI_CB_OVERFLOW; } if (cdio_status & CDO_FIFO_Empty_Bit) { - /* printk("cdio fifo empty\n"); */ ni_writel(dev, CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, M_Offset_CDIO_Command); /* s->async->events |= COMEDI_CB_EOA; */ @@ -3765,8 +3763,9 @@ static int ni_serial_hw_readwrite8(struct comedi_device *dev, /* Delay one bit per loop */ udelay((devpriv->serial_interval_ns + 999) / 1000); if (--count < 0) { - printk - ("ni_serial_hw_readwrite8: SPI serial I/O didn't finish in time!\n"); + dev_err(dev->class_dev, + "%s: SPI serial I/O didn't finish in time!\n", + __func__); err = -ETIME; goto Error; } @@ -3818,10 +3817,8 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, udelay((devpriv->serial_interval_ns + 999) / 2000); /* Input current bit */ - if (ni_stc_readw(dev, DIO_Parallel_Input_Register) & DIO_SDIN) { - /* printk("DIO_P_I_R: 0x%x\n", ni_stc_readw(dev, DIO_Parallel_Input_Register)); */ + if (ni_stc_readw(dev, DIO_Parallel_Input_Register) & DIO_SDIN) input |= mask; - } } if (data_in) @@ -3906,7 +3903,8 @@ static int ni_serial_insn_config(struct comedi_device *dev, err = ni_serial_sw_readwrite8(dev, s, byte_out, &byte_in); } else { - printk("ni_serial_insn_config: serial disabled!\n"); + dev_err(dev->class_dev, "%s: serial disabled!\n", + __func__); return -EINVAL; } if (err < 0) @@ -4416,7 +4414,6 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) int i; int type; - /* printk("ni_write_caldac: chan=%d val=%d\n",addr,val); */ if (devpriv->caldacs[addr] == val) return; devpriv->caldacs[addr] = val; @@ -4428,7 +4425,6 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) if (addr < caldacs[type].n_chans) { bits = caldacs[type].packbits(addr, val, &bitstring); loadbit = SerDacLd(i); - /* printk("caldac: using i=%d addr=%d %x\n",i,addr,bitstring); */ break; } addr -= caldacs[type].n_chans; @@ -4499,7 +4495,8 @@ static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) unsigned int *maxdata_list; if (n_chans > MAX_N_CALDACS) - printk("BUG! MAX_N_CALDACS too small\n"); + dev_err(dev->class_dev, + "BUG! MAX_N_CALDACS too small\n"); s->maxdata_list = maxdata_list = devpriv->caldac_maxdata_list; chan = 0; for (i = 0; i < n_dacs; i++) { @@ -4594,7 +4591,8 @@ static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, case 9: return NI_PFI_OUTPUT_G_GATE0; default: - printk("%s: bug, unhandled case in switch.\n", __func__); + dev_err(dev->class_dev, + "%s: bug, unhandled case in switch.\n", __func__); break; } return 0; @@ -4745,9 +4743,8 @@ static int cs5529_wait_for_idle(struct comedi_device *dev) if (schedule_timeout(1)) return -EIO; } -/* printk("looped %i times waiting for idle\n", i); */ if (i == timeout) { - printk("%s: %s: timeout\n", __FILE__, __func__); + dev_err(dev->class_dev, "%s timeout\n", __func__); return -ETIME; } return 0; @@ -4768,7 +4765,6 @@ static void cs5529_command(struct comedi_device *dev, unsigned short value) break; udelay(1); } -/* printk("looped %i times writing command to cs5529\n", i); */ if (i == timeout) dev_err(dev->class_dev, "possible problem - never saw adc go busy?\n"); @@ -4789,13 +4785,13 @@ static int cs5529_do_conversion(struct comedi_device *dev, } status = ni_ao_win_inw(dev, CAL_ADC_Status_67xx); if (status & CSS_OSC_DETECT) { - printk - ("ni_mio_common: cs5529 conversion error, status CSS_OSC_DETECT\n"); + dev_err(dev->class_dev, + "cs5529 conversion error, status CSS_OSC_DETECT\n"); return -EIO; } if (status & CSS_OVERRANGE) { - printk - ("ni_mio_common: cs5529 conversion error, overrange (ignoring)\n"); + dev_err(dev->class_dev, + "cs5529 conversion error, overrange (ignoring)\n"); } if (data) { *data = ni_ao_win_inw(dev, CAL_ADC_Data_67xx); @@ -4935,10 +4931,9 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, period_ns = 100; /* these limits are somewhat arbitrary, but NI advertises 1 to 20MHz range so we'll use that */ if (period_ns < min_period_ns || period_ns > max_period_ns) { - printk - ("%s: you must specify an input clock frequency between %i and %i nanosec " - "for the phased-lock loop.\n", __func__, - min_period_ns, max_period_ns); + dev_err(dev->class_dev, + "%s: you must specify an input clock frequency between %i and %i nanosec for the phased-lock loop\n", + __func__, min_period_ns, max_period_ns); return -EINVAL; } devpriv->rtsi_trig_direction_reg &= ~Use_RTSI_Clock_Bit; @@ -5001,9 +4996,6 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, MSeries_PLL_Divisor_Bits(freq_divider) | MSeries_PLL_Multiplier_Bits(freq_multiplier); - /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", - * freq_divider, freq_multiplier, pll_control_bits); */ - /* printk("clock_ns=%d\n", devpriv->clock_ns); */ ni_writew(dev, pll_control_bits, M_Offset_PLL_Control); devpriv->clock_source = source; /* it seems to typically take a few hundred microseconds for PLL to lock */ @@ -5013,9 +5005,9 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, udelay(1); } if (i == timeout) { - printk - ("%s: timed out waiting for PLL to lock to reference clock source %i with period %i ns.\n", - __func__, source, period_ns); + dev_err(dev->class_dev, + "%s: timed out waiting for PLL to lock to reference clock source %i with period %i ns\n", + __func__, source, period_ns); return -ETIMEDOUT; } return 3; @@ -5052,9 +5044,9 @@ static int ni_set_master_clock(struct comedi_device *dev, devpriv->rtsi_trig_direction_reg, RTSI_Trig_Direction_Register); if (period_ns == 0) { - printk - ("%s: we don't handle an unspecified clock period correctly yet, returning error.\n", - __func__); + dev_err(dev->class_dev, + "%s: we don't handle an unspecified clock period correctly yet, returning error\n", + __func__); return -EINVAL; } devpriv->clock_ns = period_ns; @@ -5083,8 +5075,9 @@ static int ni_valid_rtsi_output_source(struct comedi_device *dev, if (source == NI_RTSI_OUTPUT_RTSI_OSC) return 1; - printk("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", - __func__, chan, old_RTSI_clock_channel); + dev_err(dev->class_dev, + "%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards\n", + __func__, chan, old_RTSI_clock_channel); return 0; } return 0; @@ -5143,7 +5136,8 @@ static unsigned ni_get_rtsi_routing(struct comedi_device *dev, unsigned chan) } else { if (chan == old_RTSI_clock_channel) return NI_RTSI_OUTPUT_RTSI_OSC; - printk("%s: bug! should never get here?\n", __func__); + dev_err(dev->class_dev, "%s: bug! should never get here?\n", + __func__); return 0; } } @@ -5229,7 +5223,7 @@ static void ni_rtsi_init(struct comedi_device *dev) /* Set clock mode to internal */ devpriv->clock_and_fout2 = MSeries_RTSI_10MHz_Bit; if (ni_set_master_clock(dev, NI_MIO_INTERNAL_CLOCK, 0) < 0) - printk("ni_set_master_clock failed, bug?"); + dev_err(dev->class_dev, "ni_set_master_clock failed, bug?\n"); /* default internal lines routing to RTSI bus lines */ devpriv->rtsi_trig_a_output_reg = RTSI_Trig_Output_Bits(0, @@ -5321,7 +5315,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) { int temp_ack_reg = 0; - /* printk("GPCT_Reset..."); */ devpriv->gpct_cur_operation[chan] = GPCT_RESET; switch (chan) { @@ -5370,8 +5363,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan) ni_stc_writew(dev, devpriv->gpct_input_select[chan], G_Input_Select_Register(chan)); ni_stc_writew(dev, 0, G_Autoincrement_Register(chan)); - - /* printk("exit GPCT_Reset\n"); */ } #endif @@ -5460,7 +5451,7 @@ static int ni_E_init(struct comedi_device *dev, int i; if (board->n_aochan > MAX_N_AO_CHAN) { - printk("bug! n_aochan > MAX_N_AO_CHAN\n"); + dev_err(dev->class_dev, "bug! n_aochan > MAX_N_AO_CHAN\n"); return -EINVAL; } -- cgit From 07e6b2e2a89ae6c0b61c270099fa23c06ca08ce6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:53 -0700 Subject: staging: comedi: ni_mio_common: consolidate call to ni_mseries_get_pll_parameters() All cases of the switch call ni_mseries_get_pll_parameters() with the same parameters. Move the call out of the switch. Also, move the printk from ni_mseries_get_pll_parameters() so that it can be converted into a dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_mio_common.c | 32 ++++++++++---------------- 1 file changed, 12 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index efe62affdba1..551a150685a9 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -4902,10 +4902,9 @@ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, } } } - if (best_period_picosec == 0) { - printk("%s: bug, failed to find pll parameters\n", __func__); + if (best_period_picosec == 0) return -EIO; - } + *freq_divider = best_div; *freq_multiplier = best_mult; *actual_period_ns = @@ -4948,21 +4947,11 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, case NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK: devpriv->clock_and_fout2 |= MSeries_PLL_In_Source_Select_Star_Trigger_Bits; - retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, - &freq_multiplier, - &devpriv->clock_ns); - if (retval < 0) - return retval; break; case NI_MIO_PLL_PXI10_CLOCK: /* pxi clock is 10MHz */ devpriv->clock_and_fout2 |= MSeries_PLL_In_Source_Select_PXI_Clock10; - retval = ni_mseries_get_pll_parameters(period_ns, &freq_divider, - &freq_multiplier, - &devpriv->clock_ns); - if (retval < 0) - return retval; break; default: { @@ -4981,16 +4970,19 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, } if (rtsi_channel > max_rtsi_channel) return -EINVAL; - retval = ni_mseries_get_pll_parameters(period_ns, - &freq_divider, - &freq_multiplier, - &devpriv-> - clock_ns); - if (retval < 0) - return retval; } break; } + retval = ni_mseries_get_pll_parameters(period_ns, + &freq_divider, + &freq_multiplier, + &devpriv->clock_ns); + if (retval < 0) { + dev_err(dev->class_dev, + "%s: bug, failed to find pll parameters\n", __func__); + return retval; + } + ni_writew(dev, devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); pll_control_bits |= MSeries_PLL_Divisor_Bits(freq_divider) | -- cgit From 221fa08c53261f7694b07c22e91d43fdbef09b62 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:54 -0700 Subject: staging: comedi: ni_atmio: remove board attach noise Remove the printk messages in the (*attach) of this driver. These are just added noise. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index c61342342db4..8af5a0f19d72 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -338,25 +338,18 @@ static int ni_atmio_attach(struct comedi_device *dev, dev->board_ptr = ni_boards + board; boardtype = comedi_board(dev); - - printk(" %s", boardtype->name); dev->board_name = boardtype->name; /* irq stuff */ if (irq != 0) { - if (irq > 15 || ni_irqpin[irq] == -1) { - printk(" invalid irq %u\n", irq); + if (irq > 15 || ni_irqpin[irq] == -1) return -EINVAL; - } - printk(" ( irq = %u )", irq); ret = request_irq(irq, ni_E_interrupt, 0, "ni_atmio", dev); - if (ret < 0) { - printk(" irq not available\n"); + if (ret < 0) return -EINVAL; - } dev->irq = irq; } -- cgit From b252ebfccf61ccd6bbb04cdfd3ec1c33ea65b5db Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:55 -0700 Subject: staging: comedi: ni_atmio: convert printk to dev_err in ni_getboardtype() Convert these printk() messages to dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 8af5a0f19d72..9ca8a8262b7e 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -288,11 +288,13 @@ static int ni_getboardtype(struct comedi_device *dev) } if (device_id == 255) - printk(" can't find board\n"); + dev_err(dev->class_dev, "can't find board\n"); else if (device_id == 0) - printk(" EEPROM read error (?) or device not found\n"); + dev_err(dev->class_dev, + "EEPROM read error (?) or device not found\n"); else - printk(" unknown device ID %d -- contact author\n", device_id); + dev_err(dev->class_dev, + "unknown device ID %d -- contact author\n", device_id); return -1; } -- cgit From bc0640a7957cd5928e93d350cd49009f4774b2fd Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:56 -0700 Subject: staging: comedi: ni_at_a2150: convert printk to dev_err Convert the printk() message to dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_at_a2150.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index 86c05e382d09..c0ac8fd6ecab 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -785,8 +785,8 @@ static int a2150_attach(struct comedi_device *dev, struct comedi_devconfig *it) udelay(1000); } if (i == timeout) { - printk - (" timed out waiting for offset calibration to complete\n"); + dev_err(dev->class_dev, + "timed out waiting for offset calibration to complete\n"); return -ETIME; } devpriv->config_bits |= ENABLE0_BIT | ENABLE1_BIT; -- cgit From bbedf943f2380e4d0d5c00b196791ddc484f3b6c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:57 -0700 Subject: staging: comedi: das1800: tidy up das1800_probe() The (*attach) of driver calls this function to probe the 'id' of the hardware to verify that a valid boardinfo has been selected by the user. The dev_dbg() messages when the boardinfo is valid is just added noise. The printk messages when the id does not match the boardinfo does have some value. Refactor the function to remove the noise and use a common message for the "(probed, not recommended)" message. Convert the printk() messages to dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 101 +++++++++++++------------------ 1 file changed, 42 insertions(+), 59 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index e4234292b1f7..0cfca33965f6 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -1329,77 +1329,60 @@ static int das1800_init_dma(struct comedi_device *dev, unsigned int dma0, static int das1800_probe(struct comedi_device *dev) { + const struct das1800_board *board = comedi_board(dev); + int index; int id; - int board; - id = (inb(dev->iobase + DAS1800_DIGITAL) >> 4) & 0xf; /* get id bits */ - board = ((struct das1800_board *)dev->board_ptr) - das1800_boards; + /* calc the offset to the boardinfo that was found by the core */ + index = board - das1800_boards; + /* verify that the board id matches the boardinfo */ + id = (inb(dev->iobase + DAS1800_DIGITAL) >> 4) & 0xf; switch (id) { case 0x3: - if (board == das1801st_da || board == das1802st_da || - board == das1701st_da || board == das1702st_da) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1800st-da series\n"); - return das1801st; + if (index == das1801st_da || index == das1802st_da || + index == das1701st_da || index == das1702st_da) + return index; + index = das1801st; + break; case 0x4: - if (board == das1802hr_da || board == das1702hr_da) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1802hr-da\n"); - return das1802hr; + if (index == das1802hr_da || index == das1702hr_da) + return index; + index = das1802hr; + break; case 0x5: - if (board == das1801ao || board == das1802ao || - board == das1701ao || board == das1702ao) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1800ao series\n"); - return das1801ao; + if (index == das1801ao || index == das1802ao || + index == das1701ao || index == das1702ao) + return index; + index = das1801ao; + break; case 0x6: - if (board == das1802hr || board == das1702hr) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1802hr\n"); - return das1802hr; + if (index == das1802hr || index == das1702hr) + return index; + index = das1802hr; + break; case 0x7: - if (board == das1801st || board == das1802st || - board == das1701st || board == das1702st) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1800st series\n"); - return das1801st; + if (index == das1801st || index == das1802st || + index == das1701st || index == das1702st) + return index; + index = das1801st; + break; case 0x8: - if (board == das1801hc || board == das1802hc) { - dev_dbg(dev->class_dev, "Board model: %s\n", - das1800_boards[board].name); - return board; - } - printk - (" Board model (probed, not recommended): das-1800hc series\n"); - return das1801hc; + if (index == das1801hc || index == das1802hc) + return index; + index = das1801hc; + break; default: - printk - (" Board model: probe returned 0x%x (unknown, please report)\n", - id); - return board; + dev_err(dev->class_dev, + "Board model: probe returned 0x%x (unknown, please report)\n", + id); + break; } - return -1; + dev_err(dev->class_dev, + "Board model (probed, not recommended): %s series\n", + das1800_boards[index].name); + + return index; } static int das1800_attach(struct comedi_device *dev, -- cgit From 5ee226306cdc46c68bbbacdbb76120e18a5ae239 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:58 -0700 Subject: staging: comedi: comedi_fops: remove commented out debug messages Remove the commented out printk() debug. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 9670b244fc69..175003125784 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2222,10 +2222,8 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, n = nbytes; m = comedi_buf_read_n_available(s); - /* printk("%d available\n",m); */ if (async->buf_read_ptr + m > async->prealloc_bufsz) m = async->prealloc_bufsz - async->buf_read_ptr; - /* printk("%d contiguous\n",m); */ if (m < n) n = m; -- cgit From 9d3e5ab5e8063fd515b743d282d64f0a05202e94 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:29:59 -0700 Subject: staging: comedi: hwdrv_apci3200: remove disabled PRINT_INFO debug Remove all the PRINT_INFO debug. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci3200.c | 85 ---------------------- 1 file changed, 85 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c index 3a215ac68b6f..f95fd6848db0 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c @@ -47,8 +47,6 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY +----------+-----------+------------------------------------------------+ */ -/* #define PRINT_INFO */ - /* Card Specific information */ /* #define APCI3200_ADDRESS_RANGE 264 */ @@ -455,12 +453,6 @@ static void v_GetAPCI3200EepromCalibrationValue(unsigned int dw_PCIBoardEepromAd BoardInformations->s_Module[w_ModulCounter]. w_GainValue[w_GainIndex] = w_GainValue; -# ifdef PRINT_INFO - printk("\n Gain value = %d", - BoardInformations->s_Module[w_ModulCounter]. - w_GainValue[w_GainIndex]); -# endif - /*************************************/ /** Read gain factor for the module **/ /*************************************/ @@ -472,12 +464,6 @@ static void v_GetAPCI3200EepromCalibrationValue(unsigned int dw_PCIBoardEepromAd ul_GainFactor[w_GainIndex] = (w_GainFactorValue[1] << 16) + w_GainFactorValue[0]; - -# ifdef PRINT_INFO - printk("\n w_GainFactorValue [%d] = %lu", w_GainIndex, - BoardInformations->s_Module[w_ModulCounter]. - ul_GainFactor[w_GainIndex]); -# endif } /***************************************************************/ @@ -499,12 +485,6 @@ static void v_GetAPCI3200EepromCalibrationValue(unsigned int dw_PCIBoardEepromAd ul_CurrentSource[w_Input] = (w_CurrentSources[0] + ((w_CurrentSources[1] & 0xFFF) << 16)); - -# ifdef PRINT_INFO - printk("\n Current sources [%d] = %lu", w_Input, - BoardInformations->s_Module[w_ModulCounter]. - ul_CurrentSource[w_Input]); -# endif } /***************************************/ @@ -522,12 +502,6 @@ static void v_GetAPCI3200EepromCalibrationValue(unsigned int dw_PCIBoardEepromAd ul_CurrentSourceCJC = (w_CurrentSources[0] + ((w_CurrentSources[1] & 0xFFF) << 16)); - -# ifdef PRINT_INFO - printk("\n Current sources CJC = %lu", - BoardInformations->s_Module[w_ModulCounter]. - ul_CurrentSourceCJC); -# endif } } @@ -540,10 +514,6 @@ static int i_APCI3200_GetChannelCalibrationValue(struct comedi_device *dev, int i_DiffChannel = 0; int i_Module = 0; -#ifdef PRINT_INFO - printk("\n Channel = %u", ui_Channel_num); -#endif - /* Test if single or differential mode */ if (s_BoardInfos[dev->minor].i_ConnectionType == 1) { /* if diff */ @@ -580,16 +550,10 @@ static int i_APCI3200_GetChannelCalibrationValue(struct comedi_device *dev, /* Test if thermocouple or RTD mode */ *CJCCurrentSource = s_BoardInfos[dev->minor].s_Module[i_Module].ul_CurrentSourceCJC; -#ifdef PRINT_INFO - printk("\n CJCCurrentSource = %lu", *CJCCurrentSource); -#endif *ChannelCurrentSource = s_BoardInfos[dev->minor].s_Module[i_Module]. ul_CurrentSource[i_DiffChannel]; -#ifdef PRINT_INFO - printk("\n ChannelCurrentSource = %lu", *ChannelCurrentSource); -#endif /* } */ /* } */ @@ -597,9 +561,6 @@ static int i_APCI3200_GetChannelCalibrationValue(struct comedi_device *dev, *ChannelGainFactor = s_BoardInfos[dev->minor].s_Module[i_Module]. ul_GainFactor[s_BoardInfos[dev->minor].i_ADDIDATAGain]; -#ifdef PRINT_INFO - printk("\n ChannelGainFactor = %lu", *ChannelGainFactor); -#endif /* End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ return 0; @@ -1279,10 +1240,6 @@ static int apci3200_ai_read(struct comedi_device *dev, return -EINVAL; } /* if(i_Initialised==0); */ -#ifdef PRINT_INFO - printk("\n insn->unused[0] = %i", insn->unused[0]); -#endif - switch (insn->unused[0]) { case 0: @@ -1307,15 +1264,6 @@ static int apci3200_ai_read(struct comedi_device *dev, &s_BoardInfos[dev->minor]. ui_InterruptChannelValue[s_BoardInfos[dev->minor]. i_Count + 8]); - -#ifdef PRINT_INFO - printk("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+6] = %lu", s_BoardInfos[dev->minor].ui_InterruptChannelValue[s_BoardInfos[dev->minor].i_Count + 6]); - - printk("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+7] = %lu", s_BoardInfos[dev->minor].ui_InterruptChannelValue[s_BoardInfos[dev->minor].i_Count + 7]); - - printk("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+8] = %lu", s_BoardInfos[dev->minor].ui_InterruptChannelValue[s_BoardInfos[dev->minor].i_Count + 8]); -#endif - /* End JK 25.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ /* BEGIN JK 06.07.04: Management of sevrals boards */ @@ -1471,9 +1419,6 @@ static int apci3200_ai_read(struct comedi_device *dev, data[4]= ui_InterruptChannelValue[4]; data[5]= ui_InterruptChannelValue[5]; */ -#ifdef PRINT_INFO - printk("\n data[0]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[0];"); -#endif data[0] = s_BoardInfos[dev->minor]. ui_InterruptChannelValue[0]; @@ -1576,13 +1521,6 @@ static int apci3200_ai_config(struct comedi_device *dev, unsigned int ui_Dummy = 0; int i_err = 0; - /* Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ - -#ifdef PRINT_INFO - int i = 0, i2 = 0; -#endif - /* End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ - /* BEGIN JK 06.07.04: Management of sevrals boards */ /* Initialize the structure */ if (s_BoardInfos[dev->minor].b_StructInitialized != 1) { @@ -1608,29 +1546,6 @@ static int apci3200_ai_config(struct comedi_device *dev, v_GetAPCI3200EepromCalibrationValue(devpriv->i_IobaseAmcc, &s_BoardInfos[dev->minor]); - -#ifdef PRINT_INFO - for (i = 0; i < MAX_MODULE; i++) { - printk("\n s_Module[%i].ul_CurrentSourceCJC = %lu", i, - s_BoardInfos[dev->minor].s_Module[i]. - ul_CurrentSourceCJC); - - for (i2 = 0; i2 < 5; i2++) { - printk("\n s_Module[%i].ul_CurrentSource [%i] = %lu", i, i2, s_BoardInfos[dev->minor].s_Module[i].ul_CurrentSource[i2]); - } - - for (i2 = 0; i2 < 8; i2++) { - printk("\n s_Module[%i].ul_GainFactor [%i] = %lu", i, i2, s_BoardInfos[dev->minor].s_Module[i].ul_GainFactor[i2]); - } - - for (i2 = 0; i2 < 8; i2++) { - printk("\n s_Module[%i].w_GainValue [%i] = %u", - i, i2, - s_BoardInfos[dev->minor].s_Module[i]. - w_GainValue[i2]); - } - } -#endif /* End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ } -- cgit From ee68d168cbfe0d8cdee8ea4b1d21a64dc24a621b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:30:00 -0700 Subject: staging: comedi: ni_atmio: remove printk noise in ni_isapnp_find_board() The printk() messages in this function a just added noise. Remove them. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_atmio.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 9ca8a8262b7e..c1292db643c2 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -253,20 +253,17 @@ static int ni_isapnp_find_board(struct pnp_dev **dev) if (isapnp_dev == NULL || isapnp_dev->card == NULL) continue; - if (pnp_device_attach(isapnp_dev) < 0) { - printk - ("ni_atmio: %s found but already active, skipping.\n", - ni_boards[i].name); + if (pnp_device_attach(isapnp_dev) < 0) continue; - } + if (pnp_activate_dev(isapnp_dev) < 0) { pnp_device_detach(isapnp_dev); return -EAGAIN; } - if (!pnp_port_valid(isapnp_dev, 0) - || !pnp_irq_valid(isapnp_dev, 0)) { + + if (!pnp_port_valid(isapnp_dev, 0) || + !pnp_irq_valid(isapnp_dev, 0)) { pnp_device_detach(isapnp_dev); - printk("ni_atmio: pnp invalid port or irq, aborting\n"); return -ENOMEM; } break; -- cgit From 9ae300cd402361838b6ceb8cd0c3916575e88c43 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:30:01 -0700 Subject: staging: comedi: hwdrv_apci3200: remove commented out printk messages The commented out printk() messages all apear to be development noise. Just remove them. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c index f95fd6848db0..5e321f91172f 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.c @@ -1439,7 +1439,6 @@ static int apci3200_ai_read(struct comedi_device *dev, ui_InterruptChannelValue[5]; /* Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ - /* printk("\n 0 - i_APCI3200_GetChannelCalibrationValue data [6] = %lu, data [7] = %lu, data [8] = %lu", data [6], data [7], data [8]); */ i_APCI3200_GetChannelCalibrationValue(dev, s_BoardInfos[dev->minor].ui_Channel_num, &data[6], &data[7], &data[8]); @@ -2050,7 +2049,6 @@ static int apci3200_ai_bits_test(struct comedi_device *dev, } /* i_InterruptFlag=i_Temp ; */ s_BoardInfos[dev->minor].i_InterruptFlag = i_Temp; - /* printk("\ni_InterruptFlag=%d\n",i_InterruptFlag); */ return insn->n; } @@ -2322,8 +2320,6 @@ static int apci3200_ai_cmd(struct comedi_device *dev, ui_DelayTimeBase = cmd->scan_begin_arg >> 16; ui_DelayMode = 1; } /* else if(cmd->scan_begin_src==TRIG_FOLLOW) */ - /* printk("\nui_DelayTime=%u\n",ui_DelayTime); */ - /* printk("\nui_DelayTimeBase=%u\n",ui_DelayTimeBase); */ if (cmd->convert_src == TRIG_TIMER) { ui_ConvertTime = cmd->convert_arg & 0xFFFF; ui_ConvertTimeBase = cmd->convert_arg >> 16; @@ -2351,13 +2347,6 @@ static int apci3200_ai_cmd(struct comedi_device *dev, devpriv->iobase + s_BoardInfos[dev->minor].i_Offset + 12); /* } */ ui_Configuration = 0; - /* printk("\nfirstchannel=%u\n",i_FirstChannel); */ - /* printk("\nlastchannel=%u\n",i_LastChannel); */ - /* printk("\nui_Trigger=%u\n",ui_Trigger); */ - /* printk("\nui_TriggerEdge=%u\n",ui_TriggerEdge); */ - /* printk("\nui_Triggermode=%u\n",ui_Triggermode); */ - /* printk("\nui_DelayMode=%u\n",ui_DelayMode); */ - /* printk("\nui_ScanMode=%u\n",ui_ScanMode); */ /* ui_Configuration = i_FirstChannel |(i_LastChannel << 8)| 0x00100000 | */ ui_Configuration = @@ -2609,8 +2598,6 @@ static void apci3200_interrupt(int irq, void *d) int i_ReturnValue = 0; /* END JK TEST */ - /* printk ("\n i_ScanType = %i i_ADDIDATAType = %i", s_BoardInfos [dev->minor].i_ScanType, s_BoardInfos [dev->minor].i_ADDIDATAType); */ - /* switch(i_ScanType) */ switch (s_BoardInfos[dev->minor].i_ScanType) { case 0: @@ -2661,7 +2648,6 @@ static void apci3200_interrupt(int irq, void *d) /* Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ /* - printk("\n 1 - i_APCI3200_GetChannelCalibrationValue (dev, s_BoardInfos %i", ui_ChannelNumber); i_APCI3200_GetChannelCalibrationValue (dev, s_BoardInfos [dev->minor].ui_Channel_num, &s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 6], &s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 7], -- cgit From 747172ac55e6251d91b210455ff45124b51ff95f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 13:30:02 -0700 Subject: staging: comedi: hwdrv_apci3120: cleanup printk messages Remove the printk messages that are just driver development debug noise and convert the rest to dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- .../staging/comedi/drivers/addi-data/hwdrv_apci3120.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c index 6e6122630ec1..77cee876a374 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c @@ -270,7 +270,7 @@ static int apci3120_ai_insn_config(struct comedi_device *dev, if (CR_CHAN(data[4 + i]) >= this_board->i_NbrAiChannel) { - printk("bad channel list\n"); + dev_err(dev->class_dev, "bad channel list\n"); return -2; } } @@ -345,11 +345,6 @@ static int apci3120_setup_chan_list(struct comedi_device *dev, us_TmpValue |= ((gain & 0x03) << 4); /* <<4 for G0 and G1 bit in RAM */ us_TmpValue |= i << 8; /* To select the RAM LOCATION.... */ outw(us_TmpValue, dev->iobase + APCI3120_SEQ_RAM_ADDRESS); - - printk("\n Gain = %i", - (((unsigned char)CR_RANGE(chanlist[i]) & 0x03) << 2)); - printk("\n Channel = %i", CR_CHAN(chanlist[i])); - printk("\n Polarity = %i", us_TmpValue & APCI3120_UNIPOLAR); } return 1; /* we can serve this with scan logic */ } @@ -370,10 +365,9 @@ static int apci3120_ai_insn_read(struct comedi_device *dev, unsigned char b_Tmp; /* fix conversion time to 10 us */ - if (!devpriv->ui_EocEosConversionTime) { - printk("No timer0 Value using 10 us\n"); + if (!devpriv->ui_EocEosConversionTime) us_ConvertTiming = 10; - } else + else us_ConvertTiming = (unsigned short) (devpriv->ui_EocEosConversionTime / 1000); /* nano to useconds */ /* this_board->ai_read(dev,us_ConvertTiming,insn->n,&insn->chanspec,data,insn->unused[0]); */ @@ -594,7 +588,7 @@ static int apci3120_ai_insn_read(struct comedi_device *dev, break; default: - printk("inputs wrong\n"); + dev_err(dev->class_dev, "inputs wrong\n"); } devpriv->ui_EocEosConversionTime = 0; /* re initializing the variable; */ @@ -2162,10 +2156,6 @@ static int apci3120_ao_insn_write(struct comedi_device *dev, } -/* - * out put n values at the given channel. printk("\nwaiting for - * DA_READY BIT"); - */ do { /* Waiting of DA_READY BIT */ us_TmpValue = ((unsigned short) inw(devpriv->iobase + -- cgit From 1d746c69eb7d3814a5cd7b999d5c44ea524f7395 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:10 -0700 Subject: staging: comedi: comedi_compat32: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: Logical continuations should be on the previous line Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_compat32.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_compat32.c b/drivers/staging/comedi/comedi_compat32.c index 1e9da405d833..9b6f96f1591c 100644 --- a/drivers/staging/comedi/comedi_compat32.c +++ b/drivers/staging/comedi/comedi_compat32.c @@ -107,10 +107,10 @@ static int compat_chaninfo(struct file *file, unsigned long arg) chaninfo = compat_alloc_user_space(sizeof(*chaninfo)); /* Copy chaninfo structure. Ignore unused members. */ - if (!access_ok(VERIFY_READ, chaninfo32, sizeof(*chaninfo32)) - || !access_ok(VERIFY_WRITE, chaninfo, sizeof(*chaninfo))) { + if (!access_ok(VERIFY_READ, chaninfo32, sizeof(*chaninfo32)) || + !access_ok(VERIFY_WRITE, chaninfo, sizeof(*chaninfo))) return -EFAULT; - } + err = 0; err |= __get_user(temp.uint, &chaninfo32->subdev); err |= __put_user(temp.uint, &chaninfo->subdev); @@ -141,10 +141,10 @@ static int compat_rangeinfo(struct file *file, unsigned long arg) rangeinfo = compat_alloc_user_space(sizeof(*rangeinfo)); /* Copy rangeinfo structure. */ - if (!access_ok(VERIFY_READ, rangeinfo32, sizeof(*rangeinfo32)) - || !access_ok(VERIFY_WRITE, rangeinfo, sizeof(*rangeinfo))) { + if (!access_ok(VERIFY_READ, rangeinfo32, sizeof(*rangeinfo32)) || + !access_ok(VERIFY_WRITE, rangeinfo, sizeof(*rangeinfo))) return -EFAULT; - } + err = 0; err |= __get_user(temp.uint, &rangeinfo32->range_type); err |= __put_user(temp.uint, &rangeinfo->range_type); @@ -168,10 +168,10 @@ static int get_compat_cmd(struct comedi_cmd __user *cmd, } temp; /* Copy cmd structure. */ - if (!access_ok(VERIFY_READ, cmd32, sizeof(*cmd32)) - || !access_ok(VERIFY_WRITE, cmd, sizeof(*cmd))) { + if (!access_ok(VERIFY_READ, cmd32, sizeof(*cmd32)) || + !access_ok(VERIFY_WRITE, cmd, sizeof(*cmd))) return -EFAULT; - } + err = 0; err |= __get_user(temp.uint, &cmd32->subdev); err |= __put_user(temp.uint, &cmd->subdev); @@ -219,10 +219,10 @@ static int put_compat_cmd(struct comedi32_cmd_struct __user *cmd32, /* Assume the pointer values are already valid. */ /* (Could use ptr_to_compat() to set them, but that wasn't implemented * until kernel version 2.6.11.) */ - if (!access_ok(VERIFY_READ, cmd, sizeof(*cmd)) - || !access_ok(VERIFY_WRITE, cmd32, sizeof(*cmd32))) { + if (!access_ok(VERIFY_READ, cmd, sizeof(*cmd)) || + !access_ok(VERIFY_WRITE, cmd32, sizeof(*cmd32))) return -EFAULT; - } + err = 0; err |= __get_user(temp, &cmd->subdev); err |= __put_user(temp, &cmd32->subdev); @@ -311,8 +311,8 @@ static int get_compat_insn(struct comedi_insn __user *insn, /* Copy insn structure. Ignore the unused members. */ err = 0; - if (!access_ok(VERIFY_READ, insn32, sizeof(*insn32)) - || !access_ok(VERIFY_WRITE, insn, sizeof(*insn))) + if (!access_ok(VERIFY_READ, insn32, sizeof(*insn32)) || + !access_ok(VERIFY_WRITE, insn, sizeof(*insn))) return -EFAULT; err |= __get_user(temp.uint, &insn32->insn); -- cgit From 3df9f21af9d52fd4fd85e874ebba5e9cc4905e7d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:11 -0700 Subject: staging: comedi: drivers.c: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: DEFINE_MUTEX definition without comment CHECK: braces {} should be used on all arms of this statement Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 9bfd05b361ea..6ec4a4176e73 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -38,6 +38,7 @@ #include "comedi_internal.h" struct comedi_driver *comedi_drivers; +/* protects access to comedi_drivers */ DEFINE_MUTEX(comedi_drivers_list_lock); int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev) @@ -566,8 +567,9 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) dev->board_ptr = comedi_recognize(driv, it->board_name); if (dev->board_ptr) break; - } else if (strcmp(driv->driver_name, it->board_name) == 0) + } else if (strcmp(driv->driver_name, it->board_name) == 0) { break; + } module_put(driv->module); } if (driv == NULL) { -- cgit From 663dfc05053d826c2b319bda6c6864a1c005608d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:12 -0700 Subject: staging: comedi: comedi_internal.h: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: Please use a blank line after function/struct/union/enum declarations Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_internal.h | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_internal.h b/drivers/staging/comedi/comedi_internal.h index e978c223f5b5..d57817c19aea 100644 --- a/drivers/staging/comedi/comedi_internal.h +++ b/drivers/staging/comedi/comedi_internal.h @@ -48,6 +48,7 @@ void comedi_proc_cleanup(void); static inline void comedi_proc_init(void) { } + static inline void comedi_proc_cleanup(void) { } -- cgit From 40af57a27b93be97e0e53344c697a56eae38cda0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:13 -0700 Subject: staging: comedi: comedi.h: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: Please use a blank line after function/struct/union/enum declarations For aesthetics, convert the inline functions into simple macros. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi.h | 116 +++++++++++----------------------------- 1 file changed, 31 insertions(+), 85 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 552a5e2a1077..217baf812f87 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -551,21 +551,8 @@ enum i8254_mode { I8254_BINARY = 0 }; -static inline unsigned NI_USUAL_PFI_SELECT(unsigned pfi_channel) -{ - if (pfi_channel < 10) - return 0x1 + pfi_channel; - - return 0xb + pfi_channel; -} - -static inline unsigned NI_USUAL_RTSI_SELECT(unsigned rtsi_channel) -{ - if (rtsi_channel < 7) - return 0xb + rtsi_channel; - - return 0x1b; -} +#define NI_USUAL_PFI_SELECT(x) (((x) < 10) ? (0x1 + (x)) : (0xb + (x))) +#define NI_USUAL_RTSI_SELECT(x) (((x) < 7) ? (0xb + (x)) : 0x1b) /* mode bits for NI general-purpose counters, set with * INSN_CONFIG_SET_COUNTER_MODE */ @@ -659,20 +646,14 @@ enum ni_gpct_clock_source_bits { 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) -{ - /* NI 660x-specific */ - return 0x10 + 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) -{ - /* no pfi on NI 660x */ - return 0x20 + n; -} + +/* NI 660x-specific */ +#define NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(x) (0x10 + (x)) + +#define NI_GPCT_RTSI_CLOCK_SRC_BITS(x) (0x18 + (x)) + +/* no pfi on NI 660x */ +#define NI_GPCT_PFI_CLOCK_SRC_BITS(x) (0x20 + (x)) /* Possibilities for setting a gate source with INSN_CONFIG_SET_GATE_SRC when using NI general-purpose counters. @@ -698,22 +679,11 @@ enum ni_gpct_gate_select { * known. */ NI_GPCT_DISABLED_GATE_SELECT = 0x8000, }; -static inline unsigned NI_GPCT_GATE_PIN_GATE_SELECT(unsigned n) -{ - return 0x102 + 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) -{ - return NI_USUAL_PFI_SELECT(n); -} -static inline unsigned NI_GPCT_UP_DOWN_PIN_GATE_SELECT(unsigned n) -{ - return 0x202 + n; -} + +#define NI_GPCT_GATE_PIN_GATE_SELECT(x) (0x102 + (x)) +#define NI_GPCT_RTSI_GATE_SELECT(x) NI_USUAL_RTSI_SELECT(x) +#define NI_GPCT_PFI_GATE_SELECT(x) NI_USUAL_PFI_SELECT(x) +#define NI_GPCT_UP_DOWN_PIN_GATE_SELECT(x) (0x202 + (x)) /* Possibilities for setting a source with INSN_CONFIG_SET_OTHER_SRC when using NI general-purpose counters. */ @@ -722,15 +692,14 @@ enum ni_gpct_other_index { NI_GPCT_SOURCE_ENCODER_B, NI_GPCT_SOURCE_ENCODER_Z }; + enum ni_gpct_other_select { /* m-series gates */ /* 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) -{ - return NI_USUAL_PFI_SELECT(n); -} + +#define NI_GPCT_PFI_OTHER_SELECT(x) NI_USUAL_PFI_SELECT(x) /* start sources for ni general-purpose counters for use with INSN_CONFIG_ARM */ @@ -777,10 +746,8 @@ enum ni_mio_clock_source { NI_MIO_PLL_PXI10_CLOCK = 3, NI_MIO_PLL_RTSI0_CLOCK = 4 }; -static inline unsigned NI_MIO_PLL_RTSI_CLOCK(unsigned rtsi_channel) -{ - return NI_MIO_PLL_RTSI0_CLOCK + rtsi_channel; -} + +#define NI_MIO_PLL_RTSI_CLOCK(x) (NI_MIO_PLL_RTSI0_CLOCK + (x)) /* Signals which can be routed to an NI RTSI pin with INSN_CONFIG_SET_ROUTING. The numbers assigned are not arbitrary, they correspond to the bits required @@ -798,10 +765,8 @@ enum ni_rtsi_routing { 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) -{ - return NI_RTSI_OUTPUT_RTSI_BRD_0 + n; -} + +#define NI_RTSI_OUTPUT_RTSI_BRD(x) (NI_RTSI_OUTPUT_RTSI_BRD_0 + (x)) /* Signals which can be routed to an NI PFI pin on an m-series board with * INSN_CONFIG_SET_ROUTING. These numbers are also returned by @@ -834,10 +799,8 @@ enum ni_pfi_routing { NI_PFI_OUTPUT_CDI_SAMPLE = 29, NI_PFI_OUTPUT_CDO_UPDATE = 30 }; -static inline unsigned NI_PFI_OUTPUT_RTSI(unsigned rtsi_channel) -{ - return NI_PFI_OUTPUT_RTSI0 + rtsi_channel; -} + +#define NI_PFI_OUTPUT_RTSI(x) (NI_PFI_OUTPUT_RTSI0 + (x)) /* Signals which can be routed to output on a NI PFI pin on a 660x board with INSN_CONFIG_SET_ROUTING. The numbers assigned are @@ -853,14 +816,8 @@ enum ni_660x_pfi_routing { /* 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) -{ - return NI_USUAL_PFI_SELECT(pfi_channel) - 1; -} -static inline unsigned NI_EXT_RTSI(unsigned rtsi_channel) -{ - return NI_USUAL_RTSI_SELECT(rtsi_channel) - 1; -} +#define NI_EXT_PFI(x) (NI_USUAL_PFI_SELECT(x) - 1) +#define NI_EXT_RTSI(x) (NI_USUAL_RTSI_SELECT(x) - 1) /* status bits for INSN_CONFIG_GET_COUNTER_STATUS */ enum comedi_counter_status_flags { @@ -884,26 +841,15 @@ enum ni_m_series_cdio_scan_begin_src { 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) -{ - return NI_USUAL_PFI_SELECT(pfi_channel); -} -static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) -{ - return NI_USUAL_RTSI_SELECT(rtsi_channel); -} + +#define NI_CDIO_SCAN_BEGIN_SRC_PFI(x) NI_USUAL_PFI_SELECT(x) +#define NI_CDIO_SCAN_BEGIN_SRC_RTSI(x) NI_USUAL_RTSI_SELECT(x) /* 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) -{ - return NI_USUAL_PFI_SELECT(pfi_channel); -} -static inline unsigned NI_AO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) -{ - return NI_USUAL_RTSI_SELECT(rtsi_channel); -} +#define NI_AO_SCAN_BEGIN_SRC_PFI(x) NI_USUAL_PFI_SELECT(x) +#define NI_AO_SCAN_BEGIN_SRC_RTSI(x) NI_USUAL_RTSI_SELECT(x) /* Bits for setting a clock source with * INSN_CONFIG_SET_CLOCK_SRC when using NI frequency output subdevice. */ -- cgit From 36efbacdcb25427fda00d9af5c22a4f3a8867632 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:14 -0700 Subject: staging: comedi: comedi_fops: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: braces {} should be used on all arms of this statement CHECK: Alignment should match open parenthesis CHECK: Prefer kzalloc(sizeof(*dev)...) over kzalloc(sizeof(struct comedi_device)...) Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 175003125784..01fb31d7f3cd 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -1227,10 +1227,9 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, /* Most drivers ignore the base channel in * insn->chanspec. Fix this here if * the subdevice has <= 32 channels. */ - unsigned int shift; - unsigned int orig_mask; + unsigned int orig_mask = data[0]; + unsigned int shift = 0; - orig_mask = data[0]; if (s->n_chan <= 32) { shift = CR_CHAN(insn->chanspec); if (shift > 0) { @@ -1238,8 +1237,7 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, data[0] <<= shift; data[1] <<= shift; } - } else - shift = 0; + } ret = s->insn_bits(dev, s, insn, data); data[0] = orig_mask; if (shift > 0) @@ -2178,7 +2176,7 @@ out: } static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, - loff_t *offset) + loff_t *offset) { struct comedi_subdevice *s; struct comedi_async *async; @@ -2443,7 +2441,7 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device) struct device *csdev; unsigned i; - dev = kzalloc(sizeof(struct comedi_device), GFP_KERNEL); + dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (dev == NULL) return ERR_PTR(-ENOMEM); comedi_device_init(dev); -- cgit From 710a182b34e092184f051a8d6b08bdae0a18c16b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:15 -0700 Subject: staging: comedi: comedidev.h: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: Please use a blank line after function/struct/union/enum declarations CHECK: Alignment should match open parenthesis Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedidev.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 67cc8827a792..ec2be3570d6c 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -288,6 +288,7 @@ enum comedi_minor_bits { COMEDI_DEVICE_MINOR_MASK = 0xf, COMEDI_SUBDEVICE_MINOR_MASK = 0xf0 }; + static const unsigned COMEDI_SUBDEVICE_MINOR_SHIFT = 4; static const unsigned COMEDI_SUBDEVICE_MINOR_OFFSET = 1; @@ -568,9 +569,9 @@ int comedi_pcmcia_auto_config(struct pcmcia_device *, struct comedi_driver *); void comedi_pcmcia_auto_unconfig(struct pcmcia_device *); int comedi_pcmcia_driver_register(struct comedi_driver *, - struct pcmcia_driver *); + struct pcmcia_driver *); void comedi_pcmcia_driver_unregister(struct comedi_driver *, - struct pcmcia_driver *); + struct pcmcia_driver *); /** * module_comedi_pcmcia_driver() - Helper macro for registering a comedi PCMCIA driver -- cgit From 46fc601e6719b8637ef6d17b0bb263c3baf6b9f3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 14:28:16 -0700 Subject: staging: comedi: comedi_compat32.h: checkpatch.pl --strict cleanup Fix the checkpatch.pl --strict issues: CHECK: extern prototypes should be avoided in .h files Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_compat32.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_compat32.h b/drivers/staging/comedi/comedi_compat32.h index 28e3c3059037..2d0a6fcf60f3 100644 --- a/drivers/staging/comedi/comedi_compat32.h +++ b/drivers/staging/comedi/comedi_compat32.h @@ -25,8 +25,7 @@ #ifdef CONFIG_COMPAT struct file; -extern long comedi_compat_ioctl(struct file *file, unsigned int cmd, - unsigned long arg); +long comedi_compat_ioctl(struct file *, unsigned int cmd, unsigned long arg); #else /* CONFIG_COMPAT */ -- cgit From dc5cfd9be6aaaaea524a09a59e8d1b6509cc0ca9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 23:00:52 +0100 Subject: staging: vt6656: struct vnt_private remove unused variable bRadioControlOff This variable is never set. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/main_usb.c | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 34ca2a6799bd..ddf738511869 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -771,7 +771,7 @@ int vnt_radio_power_on(struct vnt_private *priv) { int ret = true; - if (priv->bHWRadioOff == true || priv->bRadioControlOff == true) + if (priv->bHWRadioOff == true) return false; priv->bRadioOff = false; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 757d500deef1..358c6208db82 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -368,7 +368,6 @@ struct vnt_private { int bShortSlotTime; int bBarkerPreambleMd; - int bRadioControlOff; int bRadioOff; /* Power save */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ff4e18d2e8f7..68367414080f 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -381,8 +381,7 @@ static int device_init_registers(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL0, 0x01); - if ((priv->bHWRadioOff == true) || - (priv->bRadioControlOff == true)) { + if (priv->bHWRadioOff == true) { vnt_radio_power_off(priv); } else { vnt_radio_power_on(priv); -- cgit From 409bc044a4d9ace33650f6785780b0a0d542325a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 23:00:53 +0100 Subject: staging: vt6656: struct vnt_private remove unused variable bRadioOff The variable flips from true to false but does nothing Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ---- drivers/staging/vt6656/device.h | 2 -- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index ddf738511869..ca77a1911283 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -734,8 +734,6 @@ int vnt_radio_power_off(struct vnt_private *priv) { int ret = true; - priv->bRadioOff = true; - switch (priv->byRFType) { case RF_AL2230: case RF_AL2230S: @@ -774,8 +772,6 @@ int vnt_radio_power_on(struct vnt_private *priv) if (priv->bHWRadioOff == true) return false; - priv->bRadioOff = false; - vnt_exit_deep_sleep(priv); vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 358c6208db82..69cac959a964 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -368,8 +368,6 @@ struct vnt_private { int bShortSlotTime; int bBarkerPreambleMd; - int bRadioOff; - /* Power save */ u16 current_aid; -- cgit From d7f2d8f61ec7e3f8aa6f6cd2eb28c47b38f33486 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 23:00:54 +0100 Subject: staging: vt6656: put radio power off and on into correct state every time. When radio is off bit GPIO3_INTMD should be on and off when radio is on. Add these to the tail of vnt_radio_power_off and vnt_radio_power_on and remove variable bHWRadioOff. In device_init_registers just check GPIO3_DATA are in correct state and always power on. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 7 ++++--- drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/main_usb.c | 15 +++------------ 3 files changed, 7 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index ca77a1911283..19a7931105a8 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -750,6 +750,8 @@ int vnt_radio_power_off(struct vnt_private *priv) vnt_set_deep_sleep(priv); + vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); + return ret; } @@ -769,9 +771,6 @@ int vnt_radio_power_on(struct vnt_private *priv) { int ret = true; - if (priv->bHWRadioOff == true) - return false; - vnt_exit_deep_sleep(priv); vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON); @@ -788,6 +787,8 @@ int vnt_radio_power_on(struct vnt_private *priv) break; } + vnt_mac_reg_bits_off(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); + return ret; } diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 69cac959a964..ffcbaca8622a 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -326,7 +326,6 @@ struct vnt_private { u8 byRxAntennaMode; u8 byTxAntennaMode; u8 byRadioCtl; - u8 bHWRadioOff; /* IFS & Cw */ u32 uSIFS; /* Current SIFS */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 68367414080f..0802ecdf7480 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -354,7 +354,6 @@ static int device_init_registers(struct vnt_private *priv) vnt_set_short_slot_time(priv); priv->byRadioCtl = priv->abyEEPROM[EEP_OFS_RADIOCTL]; - priv->bHWRadioOff = false; if ((priv->byRadioCtl & EEP_RADIOCTL_ENABLE) != 0) { status = vnt_control_in(priv, MESSAGE_TYPE_READ, @@ -363,16 +362,12 @@ static int device_init_registers(struct vnt_private *priv) if (status != STATUS_SUCCESS) return false; - if ((tmp & GPIO3_DATA) == 0) { - priv->bHWRadioOff = true; + if ((tmp & GPIO3_DATA) == 0) vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); - } else { + else vnt_mac_reg_bits_off(priv, MAC_REG_GPIOCTL1, GPIO3_INTMD); - priv->bHWRadioOff = false; - } - } vnt_mac_set_led(priv, LEDSTS_TMLEN, 0x38); @@ -381,11 +376,7 @@ static int device_init_registers(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_GPIOCTL0, 0x01); - if (priv->bHWRadioOff == true) { - vnt_radio_power_off(priv); - } else { - vnt_radio_power_on(priv); - } + vnt_radio_power_on(priv); dev_dbg(&priv->usb->dev, "<----INIbInitAdapter Exit\n"); -- cgit From f752c2e37d203169e94f86db311ebc744087c93e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 23:00:55 +0100 Subject: staging: vt6656: mac.h clean up macros White space and comment clean up Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.h | 671 ++++++++++++++++++++----------------------- 1 file changed, 316 insertions(+), 355 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 3e1745753a27..92bf4284bbf4 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -36,362 +36,323 @@ #include "device.h" -#define REV_ID_VT3253_A0 0x00 -#define REV_ID_VT3253_A1 0x01 -#define REV_ID_VT3253_B0 0x08 -#define REV_ID_VT3253_B1 0x09 - -// -// Registers in the MAC -// -#define MAC_REG_BISTCMD 0x04 -#define MAC_REG_BISTSR0 0x05 -#define MAC_REG_BISTSR1 0x06 -#define MAC_REG_BISTSR2 0x07 -#define MAC_REG_I2MCSR 0x08 -#define MAC_REG_I2MTGID 0x09 -#define MAC_REG_I2MTGAD 0x0A -#define MAC_REG_I2MCFG 0x0B -#define MAC_REG_I2MDIPT 0x0C -#define MAC_REG_I2MDOPT 0x0E -#define MAC_REG_USBSUS 0x0F - -#define MAC_REG_LOCALID 0x14 -#define MAC_REG_TESTCFG 0x15 -#define MAC_REG_JUMPER0 0x16 -#define MAC_REG_JUMPER1 0x17 -#define MAC_REG_TMCTL 0x18 -#define MAC_REG_TMDATA0 0x1C -#define MAC_REG_TMDATA1 0x1D -#define MAC_REG_TMDATA2 0x1E -#define MAC_REG_TMDATA3 0x1F - -// MAC Parameter related -#define MAC_REG_LRT 0x20 // -#define MAC_REG_SRT 0x21 // -#define MAC_REG_SIFS 0x22 // -#define MAC_REG_DIFS 0x23 // -#define MAC_REG_EIFS 0x24 // -#define MAC_REG_SLOT 0x25 // -#define MAC_REG_BI 0x26 // -#define MAC_REG_CWMAXMIN0 0x28 // -#define MAC_REG_LINKOFFTOTM 0x2A -#define MAC_REG_SWTMOT 0x2B -#define MAC_REG_RTSOKCNT 0x2C -#define MAC_REG_RTSFAILCNT 0x2D -#define MAC_REG_ACKFAILCNT 0x2E -#define MAC_REG_FCSERRCNT 0x2F -// TSF Related -#define MAC_REG_TSFCNTR 0x30 // -#define MAC_REG_NEXTTBTT 0x38 // -#define MAC_REG_TSFOFST 0x40 // -#define MAC_REG_TFTCTL 0x48 // -// WMAC Control/Status Related -#define MAC_REG_ENCFG0 0x4C // -#define MAC_REG_ENCFG1 0x4D // -#define MAC_REG_ENCFG2 0x4E // - -#define MAC_REG_CFG 0x50 // -#define MAC_REG_TEST 0x52 // -#define MAC_REG_HOSTCR 0x54 // -#define MAC_REG_MACCR 0x55 // -#define MAC_REG_RCR 0x56 // -#define MAC_REG_TCR 0x57 // -#define MAC_REG_IMR 0x58 // -#define MAC_REG_ISR 0x5C -#define MAC_REG_ISR1 0x5D -// Power Saving Related -#define MAC_REG_PSCFG 0x60 // -#define MAC_REG_PSCTL 0x61 // -#define MAC_REG_PSPWRSIG 0x62 // -#define MAC_REG_BBCR13 0x63 -#define MAC_REG_AIDATIM 0x64 -#define MAC_REG_PWBT 0x66 -#define MAC_REG_WAKEOKTMR 0x68 -#define MAC_REG_CALTMR 0x69 -#define MAC_REG_SYNSPACCNT 0x6A -#define MAC_REG_WAKSYNOPT 0x6B -// Baseband/IF Control Group -#define MAC_REG_BBREGCTL 0x6C // -#define MAC_REG_CHANNEL 0x6D -#define MAC_REG_BBREGADR 0x6E -#define MAC_REG_BBREGDATA 0x6F -#define MAC_REG_IFREGCTL 0x70 // -#define MAC_REG_IFDATA 0x71 // -#define MAC_REG_ITRTMSET 0x74 // -#define MAC_REG_PAPEDELAY 0x77 -#define MAC_REG_SOFTPWRCTL 0x78 // -#define MAC_REG_SOFTPWRCTL2 0x79 // -#define MAC_REG_GPIOCTL0 0x7A // -#define MAC_REG_GPIOCTL1 0x7B // - -// MiscFF PIO related -#define MAC_REG_MISCFFNDEX 0xBC -#define MAC_REG_MISCFFCTL 0xBE -#define MAC_REG_MISCFFDATA 0xC0 - -// MAC Configuration Group -#define MAC_REG_PAR0 0xC4 -#define MAC_REG_PAR4 0xC8 -#define MAC_REG_BSSID0 0xCC -#define MAC_REG_BSSID4 0xD0 -#define MAC_REG_MAR0 0xD4 -#define MAC_REG_MAR4 0xD8 -// MAC RSPPKT INFO Group -#define MAC_REG_RSPINF_B_1 0xDC -#define MAC_REG_RSPINF_B_2 0xE0 -#define MAC_REG_RSPINF_B_5 0xE4 -#define MAC_REG_RSPINF_B_11 0xE8 -#define MAC_REG_RSPINF_A_6 0xEC -#define MAC_REG_RSPINF_A_9 0xEE -#define MAC_REG_RSPINF_A_12 0xF0 -#define MAC_REG_RSPINF_A_18 0xF2 -#define MAC_REG_RSPINF_A_24 0xF4 -#define MAC_REG_RSPINF_A_36 0xF6 -#define MAC_REG_RSPINF_A_48 0xF8 -#define MAC_REG_RSPINF_A_54 0xFA -#define MAC_REG_RSPINF_A_72 0xFC - -// -// Bits in the I2MCFG EEPROM register -// -#define I2MCFG_BOUNDCTL 0x80 -#define I2MCFG_WAITCTL 0x20 -#define I2MCFG_SCLOECTL 0x10 -#define I2MCFG_WBUSYCTL 0x08 -#define I2MCFG_NORETRY 0x04 -#define I2MCFG_I2MLDSEQ 0x02 -#define I2MCFG_I2CMFAST 0x01 - -// -// Bits in the I2MCSR EEPROM register -// -#define I2MCSR_EEMW 0x80 -#define I2MCSR_EEMR 0x40 -#define I2MCSR_AUTOLD 0x08 -#define I2MCSR_NACK 0x02 -#define I2MCSR_DONE 0x01 - -// -// Bits in the TMCTL register -// -#define TMCTL_TSUSP 0x04 -#define TMCTL_TMD 0x02 -#define TMCTL_TE 0x01 - -// -// Bits in the TFTCTL register -// -#define TFTCTL_HWUTSF 0x80 // -#define TFTCTL_TBTTSYNC 0x40 -#define TFTCTL_HWUTSFEN 0x20 -#define TFTCTL_TSFCNTRRD 0x10 // -#define TFTCTL_TBTTSYNCEN 0x08 // -#define TFTCTL_TSFSYNCEN 0x04 // -#define TFTCTL_TSFCNTRST 0x02 // -#define TFTCTL_TSFCNTREN 0x01 // - -// -// Bits in the EnhanceCFG_0 register -// -#define EnCFG_BBType_a 0x00 -#define EnCFG_BBType_b 0x01 -#define EnCFG_BBType_g 0x02 -#define EnCFG_BBType_MASK 0x03 -#define EnCFG_ProtectMd 0x20 - -// -// Bits in the EnhanceCFG_1 register -// -#define EnCFG_BcnSusInd 0x01 -#define EnCFG_BcnSusClr 0x02 - -// -// Bits in the EnhanceCFG_2 register -// -#define EnCFG_NXTBTTCFPSTR 0x01 -#define EnCFG_BarkerPream 0x02 -#define EnCFG_PktBurstMode 0x04 - -// -// Bits in the CFG register -// -#define CFG_TKIPOPT 0x80 -#define CFG_RXDMAOPT 0x40 -#define CFG_TMOT_SW 0x20 -#define CFG_TMOT_HWLONG 0x10 -#define CFG_TMOT_HW 0x00 -#define CFG_CFPENDOPT 0x08 -#define CFG_BCNSUSEN 0x04 -#define CFG_NOTXTIMEOUT 0x02 -#define CFG_NOBUFOPT 0x01 - -// -// Bits in the TEST register -// -#define TEST_LBEXT 0x80 // -#define TEST_LBINT 0x40 // -#define TEST_LBNONE 0x00 // -#define TEST_SOFTINT 0x20 // -#define TEST_CONTTX 0x10 // -#define TEST_TXPE 0x08 // -#define TEST_NAVDIS 0x04 // -#define TEST_NOCTS 0x02 // -#define TEST_NOACK 0x01 // - -// -// Bits in the HOSTCR register -// -#define HOSTCR_TXONST 0x80 // -#define HOSTCR_RXONST 0x40 // -#define HOSTCR_ADHOC 0x20 // Network Type 1 = Ad-hoc -#define HOSTCR_AP 0x10 // Port Type 1 = AP -#define HOSTCR_TXON 0x08 //0000 1000 -#define HOSTCR_RXON 0x04 //0000 0100 -#define HOSTCR_MACEN 0x02 //0000 0010 -#define HOSTCR_SOFTRST 0x01 //0000 0001 - -// -// Bits in the MACCR register -// -#define MACCR_SYNCFLUSHOK 0x04 // -#define MACCR_SYNCFLUSH 0x02 // -#define MACCR_CLRNAV 0x01 // - -// -// Bits in the RCR register -// -#define RCR_SSID 0x80 -#define RCR_RXALLTYPE 0x40 // -#define RCR_UNICAST 0x20 // -#define RCR_BROADCAST 0x10 // -#define RCR_MULTICAST 0x08 // -#define RCR_WPAERR 0x04 // -#define RCR_ERRCRC 0x02 // -#define RCR_BSSID 0x01 // - -// -// Bits in the TCR register -// -#define TCR_SYNCDCFOPT 0x02 // -#define TCR_AUTOBCNTX 0x01 // Beacon automatically transmit enable - -//ISR1 -#define ISR_GPIO3 0x40 -#define ISR_RXNOBUF 0x08 -#define ISR_MIBNEARFULL 0x04 -#define ISR_SOFTINT 0x02 -#define ISR_FETALERR 0x01 - -#define LEDSTS_STS 0x06 -#define LEDSTS_TMLEN 0x78 -#define LEDSTS_OFF 0x00 -#define LEDSTS_ON 0x02 -#define LEDSTS_SLOW 0x04 -#define LEDSTS_INTER 0x06 - -//ISR0 -#define ISR_WATCHDOG 0x80 -#define ISR_SOFTTIMER 0x40 -#define ISR_GPIO0 0x20 -#define ISR_TBTT 0x10 -#define ISR_RXDMA0 0x08 -#define ISR_BNTX 0x04 -#define ISR_ACTX 0x01 - -// -// Bits in the PSCFG register -// -#define PSCFG_PHILIPMD 0x40 // -#define PSCFG_WAKECALEN 0x20 // -#define PSCFG_WAKETMREN 0x10 // -#define PSCFG_BBPSPROG 0x08 // -#define PSCFG_WAKESYN 0x04 // -#define PSCFG_SLEEPSYN 0x02 // -#define PSCFG_AUTOSLEEP 0x01 // - -// -// Bits in the PSCTL register -// -#define PSCTL_WAKEDONE 0x20 // -#define PSCTL_PS 0x10 // -#define PSCTL_GO2DOZE 0x08 // -#define PSCTL_LNBCN 0x04 // -#define PSCTL_ALBCN 0x02 // -#define PSCTL_PSEN 0x01 // - -// -// Bits in the PSPWSIG register -// -#define PSSIG_WPE3 0x80 // -#define PSSIG_WPE2 0x40 // -#define PSSIG_WPE1 0x20 // -#define PSSIG_WRADIOPE 0x10 // -#define PSSIG_SPE3 0x08 // -#define PSSIG_SPE2 0x04 // -#define PSSIG_SPE1 0x02 // -#define PSSIG_SRADIOPE 0x01 // - -// -// Bits in the BBREGCTL register -// -#define BBREGCTL_DONE 0x04 // -#define BBREGCTL_REGR 0x02 // -#define BBREGCTL_REGW 0x01 // - -// -// Bits in the IFREGCTL register -// -#define IFREGCTL_DONE 0x04 // -#define IFREGCTL_IFRF 0x02 // -#define IFREGCTL_REGW 0x01 // - -// -// Bits in the SOFTPWRCTL register -// -#define SOFTPWRCTL_RFLEOPT 0x08 // -#define SOFTPWRCTL_TXPEINV 0x02 // -#define SOFTPWRCTL_SWPECTI 0x01 // -#define SOFTPWRCTL_SWPAPE 0x20 // -#define SOFTPWRCTL_SWCALEN 0x10 // -#define SOFTPWRCTL_SWRADIO_PE 0x08 // -#define SOFTPWRCTL_SWPE2 0x04 // -#define SOFTPWRCTL_SWPE1 0x02 // -#define SOFTPWRCTL_SWPE3 0x01 // - -// -// Bits in the GPIOCTL1 register -// -#define GPIO3_MD 0x20 // -#define GPIO3_DATA 0x40 // -#define GPIO3_INTMD 0x80 // - -// -// Bits in the MISCFFCTL register -// -#define MISCFFCTL_WRITE 0x0001 // - -// Loopback mode -#define MAC_LB_EXT 0x02 // -#define MAC_LB_INTERNAL 0x01 // -#define MAC_LB_NONE 0x00 // - -// Ethernet address filter type -#define PKT_TYPE_NONE 0x00 // turn off receiver -#define PKT_TYPE_ALL_MULTICAST 0x80 -#define PKT_TYPE_PROMISCUOUS 0x40 -#define PKT_TYPE_DIRECTED 0x20 // obselete, directed address is always accepted -#define PKT_TYPE_BROADCAST 0x10 -#define PKT_TYPE_MULTICAST 0x08 -#define PKT_TYPE_ERROR_WPA 0x04 -#define PKT_TYPE_ERROR_CRC 0x02 -#define PKT_TYPE_BSSID 0x01 +#define REV_ID_VT3253_A0 0x00 +#define REV_ID_VT3253_A1 0x01 +#define REV_ID_VT3253_B0 0x08 +#define REV_ID_VT3253_B1 0x09 + +/* Registers in the MAC */ +#define MAC_REG_BISTCMD 0x04 +#define MAC_REG_BISTSR0 0x05 +#define MAC_REG_BISTSR1 0x06 +#define MAC_REG_BISTSR2 0x07 +#define MAC_REG_I2MCSR 0x08 +#define MAC_REG_I2MTGID 0x09 +#define MAC_REG_I2MTGAD 0x0a +#define MAC_REG_I2MCFG 0x0b +#define MAC_REG_I2MDIPT 0x0c +#define MAC_REG_I2MDOPT 0x0e +#define MAC_REG_USBSUS 0x0f + +#define MAC_REG_LOCALID 0x14 +#define MAC_REG_TESTCFG 0x15 +#define MAC_REG_JUMPER0 0x16 +#define MAC_REG_JUMPER1 0x17 +#define MAC_REG_TMCTL 0x18 +#define MAC_REG_TMDATA0 0x1c +#define MAC_REG_TMDATA1 0x1d +#define MAC_REG_TMDATA2 0x1e +#define MAC_REG_TMDATA3 0x1f + +/* MAC Parameter related */ +#define MAC_REG_LRT 0x20 +#define MAC_REG_SRT 0x21 +#define MAC_REG_SIFS 0x22 +#define MAC_REG_DIFS 0x23 +#define MAC_REG_EIFS 0x24 +#define MAC_REG_SLOT 0x25 +#define MAC_REG_BI 0x26 +#define MAC_REG_CWMAXMIN0 0x28 +#define MAC_REG_LINKOFFTOTM 0x2a +#define MAC_REG_SWTMOT 0x2b +#define MAC_REG_RTSOKCNT 0x2c +#define MAC_REG_RTSFAILCNT 0x2d +#define MAC_REG_ACKFAILCNT 0x2e +#define MAC_REG_FCSERRCNT 0x2f + +/* TSF Related */ +#define MAC_REG_TSFCNTR 0x30 +#define MAC_REG_NEXTTBTT 0x38 +#define MAC_REG_TSFOFST 0x40 +#define MAC_REG_TFTCTL 0x48 + +/* WMAC Control/Status Related */ +#define MAC_REG_ENCFG0 0x4c +#define MAC_REG_ENCFG1 0x4d +#define MAC_REG_ENCFG2 0x4e + +#define MAC_REG_CFG 0x50 +#define MAC_REG_TEST 0x52 +#define MAC_REG_HOSTCR 0x54 +#define MAC_REG_MACCR 0x55 +#define MAC_REG_RCR 0x56 +#define MAC_REG_TCR 0x57 +#define MAC_REG_IMR 0x58 +#define MAC_REG_ISR 0x5c +#define MAC_REG_ISR1 0x5d + +/* Power Saving Related */ +#define MAC_REG_PSCFG 0x60 +#define MAC_REG_PSCTL 0x61 +#define MAC_REG_PSPWRSIG 0x62 +#define MAC_REG_BBCR13 0x63 +#define MAC_REG_AIDATIM 0x64 +#define MAC_REG_PWBT 0x66 +#define MAC_REG_WAKEOKTMR 0x68 +#define MAC_REG_CALTMR 0x69 +#define MAC_REG_SYNSPACCNT 0x6a +#define MAC_REG_WAKSYNOPT 0x6b + +/* Baseband/IF Control Group */ +#define MAC_REG_BBREGCTL 0x6c +#define MAC_REG_CHANNEL 0x6d +#define MAC_REG_BBREGADR 0x6e +#define MAC_REG_BBREGDATA 0x6f +#define MAC_REG_IFREGCTL 0x70 +#define MAC_REG_IFDATA 0x71 +#define MAC_REG_ITRTMSET 0x74 +#define MAC_REG_PAPEDELAY 0x77 +#define MAC_REG_SOFTPWRCTL 0x78 +#define MAC_REG_SOFTPWRCTL2 0x79 +#define MAC_REG_GPIOCTL0 0x7a +#define MAC_REG_GPIOCTL1 0x7b + +/* MiscFF PIO related */ +#define MAC_REG_MISCFFNDEX 0xbc +#define MAC_REG_MISCFFCTL 0xbe +#define MAC_REG_MISCFFDATA 0xc0 + +/* MAC Configuration Group */ +#define MAC_REG_PAR0 0xc4 +#define MAC_REG_PAR4 0xc8 +#define MAC_REG_BSSID0 0xcc +#define MAC_REG_BSSID4 0xd0 +#define MAC_REG_MAR0 0xd4 +#define MAC_REG_MAR4 0xd8 + +/* MAC RSPPKT INFO Group */ +#define MAC_REG_RSPINF_B_1 0xdC +#define MAC_REG_RSPINF_B_2 0xe0 +#define MAC_REG_RSPINF_B_5 0xe4 +#define MAC_REG_RSPINF_B_11 0xe8 +#define MAC_REG_RSPINF_A_6 0xec +#define MAC_REG_RSPINF_A_9 0xee +#define MAC_REG_RSPINF_A_12 0xf0 +#define MAC_REG_RSPINF_A_18 0xf2 +#define MAC_REG_RSPINF_A_24 0xf4 +#define MAC_REG_RSPINF_A_36 0xf6 +#define MAC_REG_RSPINF_A_48 0xf8 +#define MAC_REG_RSPINF_A_54 0xfa +#define MAC_REG_RSPINF_A_72 0xfc + +/* Bits in the I2MCFG EEPROM register */ +#define I2MCFG_BOUNDCTL 0x80 +#define I2MCFG_WAITCTL 0x20 +#define I2MCFG_SCLOECTL 0x10 +#define I2MCFG_WBUSYCTL 0x08 +#define I2MCFG_NORETRY 0x04 +#define I2MCFG_I2MLDSEQ 0x02 +#define I2MCFG_I2CMFAST 0x01 + +/* Bits in the I2MCSR EEPROM register */ +#define I2MCSR_EEMW 0x80 +#define I2MCSR_EEMR 0x40 +#define I2MCSR_AUTOLD 0x08 +#define I2MCSR_NACK 0x02 +#define I2MCSR_DONE 0x01 + +/* Bits in the TMCTL register */ +#define TMCTL_TSUSP 0x04 +#define TMCTL_TMD 0x02 +#define TMCTL_TE 0x01 + +/* Bits in the TFTCTL register */ +#define TFTCTL_HWUTSF 0x80 +#define TFTCTL_TBTTSYNC 0x40 +#define TFTCTL_HWUTSFEN 0x20 +#define TFTCTL_TSFCNTRRD 0x10 +#define TFTCTL_TBTTSYNCEN 0x08 +#define TFTCTL_TSFSYNCEN 0x04 +#define TFTCTL_TSFCNTRST 0x02 +#define TFTCTL_TSFCNTREN 0x01 + +/* Bits in the EnhanceCFG_0 register */ +#define EnCFG_BBType_a 0x00 +#define EnCFG_BBType_b 0x01 +#define EnCFG_BBType_g 0x02 +#define EnCFG_BBType_MASK 0x03 +#define EnCFG_ProtectMd 0x20 + +/* Bits in the EnhanceCFG_1 register */ +#define EnCFG_BcnSusInd 0x01 +#define EnCFG_BcnSusClr 0x02 + +/* Bits in the EnhanceCFG_2 register */ +#define EnCFG_NXTBTTCFPSTR 0x01 +#define EnCFG_BarkerPream 0x02 +#define EnCFG_PktBurstMode 0x04 + +/* Bits in the CFG register */ +#define CFG_TKIPOPT 0x80 +#define CFG_RXDMAOPT 0x40 +#define CFG_TMOT_SW 0x20 +#define CFG_TMOT_HWLONG 0x10 +#define CFG_TMOT_HW 0x00 +#define CFG_CFPENDOPT 0x08 +#define CFG_BCNSUSEN 0x04 +#define CFG_NOTXTIMEOUT 0x02 +#define CFG_NOBUFOPT 0x01 + +/* Bits in the TEST register */ +#define TEST_LBEXT 0x80 +#define TEST_LBINT 0x40 +#define TEST_LBNONE 0x00 +#define TEST_SOFTINT 0x20 +#define TEST_CONTTX 0x10 +#define TEST_TXPE 0x08 +#define TEST_NAVDIS 0x04 +#define TEST_NOCTS 0x02 +#define TEST_NOACK 0x01 + +/* Bits in the HOSTCR register */ +#define HOSTCR_TXONST 0x80 +#define HOSTCR_RXONST 0x40 +#define HOSTCR_ADHOC 0x20 +#define HOSTCR_AP 0x10 +#define HOSTCR_TXON 0x08 +#define HOSTCR_RXON 0x04 +#define HOSTCR_MACEN 0x02 +#define HOSTCR_SOFTRST 0x01 + +/* Bits in the MACCR register */ +#define MACCR_SYNCFLUSHOK 0x04 +#define MACCR_SYNCFLUSH 0x02 +#define MACCR_CLRNAV 0x01 + +/* Bits in the RCR register */ +#define RCR_SSID 0x80 +#define RCR_RXALLTYPE 0x40 +#define RCR_UNICAST 0x20 +#define RCR_BROADCAST 0x10 +#define RCR_MULTICAST 0x08 +#define RCR_WPAERR 0x04 +#define RCR_ERRCRC 0x02 +#define RCR_BSSID 0x01 + +/* Bits in the TCR register */ +#define TCR_SYNCDCFOPT 0x02 +#define TCR_AUTOBCNTX 0x01 + +/* ISR1 */ +#define ISR_GPIO3 0x40 +#define ISR_RXNOBUF 0x08 +#define ISR_MIBNEARFULL 0x04 +#define ISR_SOFTINT 0x02 +#define ISR_FETALERR 0x01 + +#define LEDSTS_STS 0x06 +#define LEDSTS_TMLEN 0x78 +#define LEDSTS_OFF 0x00 +#define LEDSTS_ON 0x02 +#define LEDSTS_SLOW 0x04 +#define LEDSTS_INTER 0x06 + +/* ISR0 */ +#define ISR_WATCHDOG 0x80 +#define ISR_SOFTTIMER 0x40 +#define ISR_GPIO0 0x20 +#define ISR_TBTT 0x10 +#define ISR_RXDMA0 0x08 +#define ISR_BNTX 0x04 +#define ISR_ACTX 0x01 + +/* Bits in the PSCFG register */ +#define PSCFG_PHILIPMD 0x40 +#define PSCFG_WAKECALEN 0x20 +#define PSCFG_WAKETMREN 0x10 +#define PSCFG_BBPSPROG 0x08 +#define PSCFG_WAKESYN 0x04 +#define PSCFG_SLEEPSYN 0x02 +#define PSCFG_AUTOSLEEP 0x01 + +/* Bits in the PSCTL register */ +#define PSCTL_WAKEDONE 0x20 +#define PSCTL_PS 0x10 +#define PSCTL_GO2DOZE 0x08 +#define PSCTL_LNBCN 0x04 +#define PSCTL_ALBCN 0x02 +#define PSCTL_PSEN 0x01 + +/* Bits in the PSPWSIG register */ +#define PSSIG_WPE3 0x80 +#define PSSIG_WPE2 0x40 +#define PSSIG_WPE1 0x20 +#define PSSIG_WRADIOPE 0x10 +#define PSSIG_SPE3 0x08 +#define PSSIG_SPE2 0x04 +#define PSSIG_SPE1 0x02 +#define PSSIG_SRADIOPE 0x01 + +/* Bits in the BBREGCTL register */ +#define BBREGCTL_DONE 0x04 +#define BBREGCTL_REGR 0x02 +#define BBREGCTL_REGW 0x01 + +/* Bits in the IFREGCTL register */ +#define IFREGCTL_DONE 0x04 +#define IFREGCTL_IFRF 0x02 +#define IFREGCTL_REGW 0x01 + +/* Bits in the SOFTPWRCTL register */ +#define SOFTPWRCTL_RFLEOPT 0x08 +#define SOFTPWRCTL_TXPEINV 0x02 +#define SOFTPWRCTL_SWPECTI 0x01 +#define SOFTPWRCTL_SWPAPE 0x20 +#define SOFTPWRCTL_SWCALEN 0x10 +#define SOFTPWRCTL_SWRADIO_PE 0x08 +#define SOFTPWRCTL_SWPE2 0x04 +#define SOFTPWRCTL_SWPE1 0x02 +#define SOFTPWRCTL_SWPE3 0x01 + +/* Bits in the GPIOCTL1 register */ +#define GPIO3_MD 0x20 +#define GPIO3_DATA 0x40 +#define GPIO3_INTMD 0x80 + +/* Bits in the MISCFFCTL register */ +#define MISCFFCTL_WRITE 0x0001 + +/* Loopback mode */ +#define MAC_LB_EXT 0x02 +#define MAC_LB_INTERNAL 0x01 +#define MAC_LB_NONE 0x00 + +/* Ethernet address filter type */ +#define PKT_TYPE_NONE 0x00 /* turn off receiver */ +#define PKT_TYPE_ALL_MULTICAST 0x80 +#define PKT_TYPE_PROMISCUOUS 0x40 +#define PKT_TYPE_DIRECTED 0x20 /* obselete */ +#define PKT_TYPE_BROADCAST 0x10 +#define PKT_TYPE_MULTICAST 0x08 +#define PKT_TYPE_ERROR_WPA 0x04 +#define PKT_TYPE_ERROR_CRC 0x02 +#define PKT_TYPE_BSSID 0x01 #define Default_BI 0x200 -// MiscFIFO Offset -#define MISCFIFO_KEYETRY0 32 -#define MISCFIFO_KEYENTRYSIZE 22 +/* MiscFIFO Offset */ +#define MISCFIFO_KEYETRY0 32 +#define MISCFIFO_KEYENTRYSIZE 22 // max time out delay time #define W_MAX_TIMEOUT 0xFFF0U // @@ -399,8 +360,8 @@ // wait time within loop #define CB_DELAY_LOOP_WAIT 10 // 10ms -#define MAC_REVISION_A0 0x00 -#define MAC_REVISION_A1 0x01 +#define MAC_REVISION_A0 0x00 +#define MAC_REVISION_A1 0x01 struct vnt_mac_set_key { union { -- cgit From 387983b49f8d601ee2aea2d596e174c518637b32 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 18 Jul 2014 23:00:56 +0100 Subject: staging: vt6656: remove unused macros Remove macros start are unlikely to be reused Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/mac.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 92bf4284bbf4..d53fcef87b4a 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -354,12 +354,6 @@ #define MISCFIFO_KEYETRY0 32 #define MISCFIFO_KEYENTRYSIZE 22 -// max time out delay time -#define W_MAX_TIMEOUT 0xFFF0U // - -// wait time within loop -#define CB_DELAY_LOOP_WAIT 10 // 10ms - #define MAC_REVISION_A0 0x00 #define MAC_REVISION_A1 0x01 -- cgit From bb6268692e872f4e47d7c1d9ea843e968027721a Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Sat, 19 Jul 2014 00:33:56 +0900 Subject: staging: vme: Fix typo in vme_pio2_gpio.c This patch fix spelling typo in printk message. Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vme/devices/vme_pio2_gpio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vme/devices/vme_pio2_gpio.c b/drivers/staging/vme/devices/vme_pio2_gpio.c index 2a2d920d980b..55c009c06760 100644 --- a/drivers/staging/vme/devices/vme_pio2_gpio.c +++ b/drivers/staging/vme/devices/vme_pio2_gpio.c @@ -108,7 +108,7 @@ static int pio2_gpio_dir_in(struct gpio_chip *chip, unsigned offset) if ((card->bank[PIO2_CHANNEL_BANK[offset]].config == OUTPUT) | (card->bank[PIO2_CHANNEL_BANK[offset]].config == NOFIT)) { dev_err(&card->vdev->dev, - "Channel directionality not configurable at runtine\n"); + "Channel directionality not configurable at runtime\n"); data = -EINVAL; } else { @@ -127,7 +127,7 @@ static int pio2_gpio_dir_out(struct gpio_chip *chip, unsigned offset, int value) if ((card->bank[PIO2_CHANNEL_BANK[offset]].config == INPUT) | (card->bank[PIO2_CHANNEL_BANK[offset]].config == NOFIT)) { dev_err(&card->vdev->dev, - "Channel directionality not configurable at runtine\n"); + "Channel directionality not configurable at runtime\n"); data = -EINVAL; } else { -- cgit From 115eed84af481f4c63edb6f211c5730b9f54559d Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Sat, 19 Jul 2014 00:33:57 +0900 Subject: staging: vme: Add missing CR in error message This patch adds missing CR in dev_err message. Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vme/devices/vme_pio2_gpio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vme/devices/vme_pio2_gpio.c b/drivers/staging/vme/devices/vme_pio2_gpio.c index 55c009c06760..f00af0786af3 100644 --- a/drivers/staging/vme/devices/vme_pio2_gpio.c +++ b/drivers/staging/vme/devices/vme_pio2_gpio.c @@ -222,7 +222,7 @@ void pio2_gpio_exit(struct pio2_card *card) const char *label = card->gc.label; if (gpiochip_remove(&(card->gc))) - dev_err(&card->vdev->dev, "Failed to remove GPIO"); + dev_err(&card->vdev->dev, "Failed to remove GPIO\n"); kfree(label); } -- cgit From fbeca3ca16f3c362de55ec016f95f9e644064f91 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Sat, 19 Jul 2014 00:33:58 +0900 Subject: staging: vme: Add missing CR in printk messages in vme_pio2_core.c This patch add missing CR in messages within vme_pio2_core.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vme/devices/vme_pio2_core.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vme/devices/vme_pio2_core.c b/drivers/staging/vme/devices/vme_pio2_core.c index fd19c257f533..84c5a07e8f6a 100644 --- a/drivers/staging/vme/devices/vme_pio2_core.c +++ b/drivers/staging/vme/devices/vme_pio2_core.c @@ -182,30 +182,30 @@ static int pio2_match(struct vme_dev *vdev) if (vdev->num >= bus_num) { dev_err(&vdev->dev, - "The enumeration of the VMEbus to which the board is connected must be specified"); + "The enumeration of the VMEbus to which the board is connected must be specified\n"); return 0; } if (vdev->num >= base_num) { dev_err(&vdev->dev, - "The VME address for the cards registers must be specified"); + "The VME address for the cards registers must be specified\n"); return 0; } if (vdev->num >= vector_num) { dev_err(&vdev->dev, - "The IRQ vector used by the card must be specified"); + "The IRQ vector used by the card must be specified\n"); return 0; } if (vdev->num >= level_num) { dev_err(&vdev->dev, - "The IRQ level used by the card must be specified"); + "The IRQ level used by the card must be specified\n"); return 0; } if (vdev->num >= variant_num) { - dev_err(&vdev->dev, "The variant of the card must be specified"); + dev_err(&vdev->dev, "The variant of the card must be specified\n"); return 0; } @@ -324,7 +324,7 @@ static int pio2_probe(struct vme_dev *vdev) retval = pio2_reset_card(card); if (retval) { dev_err(&card->vdev->dev, - "Failed to reset card, is location valid?"); + "Failed to reset card, is location valid?\n"); retval = -ENODEV; goto err_reset; } -- cgit From c11da2df834c2d93133f9890afbfcab7b0e38ded Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Fri, 18 Jul 2014 23:13:08 +0300 Subject: Staging: comedi: adl_pci9118: line over 80 fixed A 'line over 80 characters' issue fixed. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 7cb93791155b..da3fecd93275 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -346,7 +346,7 @@ struct pci9118_private { * on external start */ unsigned short ao_data[2]; /* data output buffer */ - char dma_doublebuf; /* we can use double buffering */ + char dma_doublebuf; /* use double buffering */ unsigned int dma_actbuf; /* which buffer is used now */ unsigned short *dmabuf_virt[2]; /* * pointers to begin of -- cgit From b1beb91b0e20568a767b8ab50e131074316b66b7 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 18 Jul 2014 15:39:19 +1000 Subject: staging/lustre: fix misuse of current->parent. current->parent is used by ptrace to redirect some signal delivery to the ptracer. It should only be used by 'ptrace' or 'signal' code. All other users should use current->real_parent, which is the real parent. Signed-off-by: NeilBrown Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/lproc_llite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index e48f323c0d71..13586c55b570 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -910,7 +910,7 @@ void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) sbi->ll_stats_track_id == current->pid) lprocfs_counter_add(sbi->ll_stats, op, count); else if (sbi->ll_stats_track_type == STATS_TRACK_PPID && - sbi->ll_stats_track_id == current->parent->pid) + sbi->ll_stats_track_id == current->real_parent->pid) lprocfs_counter_add(sbi->ll_stats, op, count); else if (sbi->ll_stats_track_type == STATS_TRACK_GID && sbi->ll_stats_track_id == -- cgit From e6a152efae0576fb1dd91c3abcbd95e2c7196e58 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 17 Jul 2014 23:34:58 +0200 Subject: Update speakup mailing list address The speakup mailing list only works on the linux-speakup.org domain now. Signed-off-by: Samuel Thibault Signed-off-by: Greg Kroah-Hartman --- drivers/staging/speakup/TODO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/speakup/TODO b/drivers/staging/speakup/TODO index c3612e4b8ac8..3094799cf6a0 100644 --- a/drivers/staging/speakup/TODO +++ b/drivers/staging/speakup/TODO @@ -1,6 +1,6 @@ Speakup project home: http://www.linux-speakup.org -Mailing List: speakup@braille.uwo.ca +Mailing List: speakup@linux-speakup.org Speakup is a kernel based screen review package for the linux operating system. It allows blind users to interact with applications on the -- cgit From 9ea3b82630d9f0e8839df87772af3342473121d5 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:41 +0200 Subject: staging: rtl8723au: Fold odm_EdcaTurboCheck23aCE23a() into odm_EdcaTurboCheck23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index ce192de04758..3292b5f3e491 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -241,8 +241,6 @@ void odm_TXPowerTrackingCheckCE23a(struct dm_odm_t *pDM_Odm); void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm); void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm); -void odm_EdcaTurboCheck23aCE23a(struct dm_odm_t *pDM_Odm); - #define RxDefaultAnt1 0x65a9 #define RxDefaultAnt2 0x569a @@ -1628,38 +1626,29 @@ void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm) void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm) { + struct rtw_adapter *Adapter = pDM_Odm->Adapter; + struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); + struct xmit_priv *pxmitpriv = &Adapter->xmitpriv; + struct recv_priv *precvpriv = &Adapter->recvpriv; + struct registry_priv *pregpriv = &Adapter->registrypriv; + struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; + u32 trafficIndex; + u32 edca_param; + u64 cur_tx_bytes = 0; + u64 cur_rx_bytes = 0; + u8 bbtchange = false; + /* For AP/ADSL use struct rtl8723a_priv * */ /* For CE/NIC use struct rtw_adapter * */ /* 2011/09/29 MH In HW integration first stage, we provide 4 different handle to operate */ /* at the same time. In the stage2/3, we need to prive universal interface and merge all */ /* HW dynamic mechanism. */ - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("odm_EdcaTurboCheck23a ========================>\n")); if (!(pDM_Odm->SupportAbility & ODM_MAC_EDCA_TURBO)) return; - odm_EdcaTurboCheck23aCE23a(pDM_Odm); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD, ("<======================== odm_EdcaTurboCheck23a\n")); - -} /* odm_CheckEdcaTurbo */ - -void odm_EdcaTurboCheck23aCE23a(struct dm_odm_t *pDM_Odm) -{ - struct rtw_adapter *Adapter = pDM_Odm->Adapter; - - u32 trafficIndex; - u32 edca_param; - u64 cur_tx_bytes = 0; - u64 cur_rx_bytes = 0; - u8 bbtchange = false; - struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); - struct xmit_priv *pxmitpriv = &Adapter->xmitpriv; - struct recv_priv *precvpriv = &Adapter->recvpriv; - struct registry_priv *pregpriv = &Adapter->registrypriv; - struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - if ((pregpriv->wifi_spec == 1))/* (pmlmeinfo->HT_enable == 0)) */ goto dm_CheckEdcaTurbo_EXIT; -- cgit From 4d1def6b5cd9294c6484145e1965899a0a5029dc Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:42 +0200 Subject: staging: rtl8723au: Declare odm_EdcaTurbo*() functions static Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 3292b5f3e491..dd0258532935 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -238,8 +238,8 @@ void odm_TXPowerTrackingCheckMP(struct dm_odm_t *pDM_Odm); void odm_TXPowerTrackingCheckCE23a(struct dm_odm_t *pDM_Odm); -void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm); -void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm); +static void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm); +static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm); #define RxDefaultAnt1 0x65a9 #define RxDefaultAnt2 0x569a @@ -1609,7 +1609,7 @@ void odm_HwAntDiv23a(struct dm_odm_t *pDM_Odm) } /* EDCA Turbo */ -void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm) +static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm) { struct rtw_adapter *Adapter = pDM_Odm->Adapter; @@ -1624,7 +1624,7 @@ void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm) } /* ODM_InitEdcaTurbo */ -void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm) +static void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm) { struct rtw_adapter *Adapter = pDM_Odm->Adapter; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); -- cgit From 3f22aed843c7f7984e61f64394dc6b00000e2d18 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:43 +0200 Subject: staging: rtl8723au: bDMInitialGainEnable is always true Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 10 ---------- drivers/staging/rtl8723au/include/odm.h | 1 - 2 files changed, 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index dd0258532935..ed6d3af809a2 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -717,10 +717,6 @@ void odm_DIG23aInit(struct dm_odm_t *pDM_Odm) pDM_DigTable->DIG_Dynamic_MIN_1 = DM_DIG_MIN_NIC; pDM_DigTable->bMediaConnect_0 = false; pDM_DigTable->bMediaConnect_1 = false; - - /* To Initialize pDM_Odm->bDMInitialGainEnable == false to avoid DIG error */ - pDM_Odm->bDMInitialGainEnable = true; - } void odm_DIG23a(struct dm_odm_t *pDM_Odm) @@ -747,12 +743,6 @@ void odm_DIG23a(struct dm_odm_t *pDM_Odm) return; } - /* add by Neil Chen to avoid PSD is processing */ - if (!pDM_Odm->bDMInitialGainEnable) { - ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a() Return: PSD is Processing \n")); - return; - } - DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0; FirstConnect = (pDM_Odm->bLinked) && (!pDM_DigTable->bMediaConnect_0); FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0); diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index b2f661e4e176..9c8e7d8256d4 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -818,7 +818,6 @@ struct dm_odm_t { bool bUserAssignLevel; u8 RSSI_BT; /* come from BT */ bool bPSDinProcess; - bool bDMInitialGainEnable; /* for rate adaptive, in fact, 88c/92c fw will handle this */ u8 bUseRAMask; -- cgit From 22965e3937ff1d8417aef5612d398a3eff793d3b Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:44 +0200 Subject: staging: rtl8723au: Remove unused DefaultInitialGain array Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/rtl8723a_hal.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/rtl8723a_hal.h b/drivers/staging/rtl8723au/include/rtl8723a_hal.h index 1f63eb1df57b..3b0b06d6e41e 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_hal.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_hal.h @@ -315,7 +315,6 @@ struct hal_data_8723a { u8 framesync; u32 framesyncC34; u8 framesyncMonitor; - u8 DefaultInitialGain[4]; u8 pwrGroupCnt; u32 MCSTxPowerLevelOriginalOffset[7][16]; u32 CCKTxPowerLevelOriginalOffset; -- cgit From c7abd8749308bbdf6c83e8232a5c94d84a9bee27 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:45 +0200 Subject: staging: rtl8723au: Remove some redundant check for hw_init_completed Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index ac47a9711086..bf1db907643c 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -211,6 +211,7 @@ rtl8723a_HalDmWatchDog( { bool bFwCurrentInPSMode = false; bool bFwPSAwake = true; + u8 bLinked = false; u8 hw_init_completed = false; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; @@ -223,7 +224,7 @@ rtl8723a_HalDmWatchDog( bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode; bFwPSAwake = rtl8723a_get_fwlps_rf_on(Adapter); - if ((hw_init_completed) && ((!bFwCurrentInPSMode) && bFwPSAwake)) { + if (!bFwCurrentInPSMode && bFwPSAwake) { /* Calculate Tx/Rx statistics. */ dm_CheckStatistics(Adapter); @@ -238,16 +239,11 @@ rtl8723a_HalDmWatchDog( } /* ODM */ - if (hw_init_completed == true) { - u8 bLinked = false; + if (rtw_linked_check(Adapter)) + bLinked = true; - if (rtw_linked_check(Adapter)) - bLinked = true; - - ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_LINK, - bLinked); - ODM_DMWatchdog23a(&pHalData->odmpriv); - } + ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked); + ODM_DMWatchdog23a(&pHalData->odmpriv); skip_dm: -- cgit From 71cd6f54dcf6e9fd858c55b109f8efd1f9539808 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:46 +0200 Subject: staging: rtl8723au: Remove no-op rtl8723a_deinit_dm_priv() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 4 ---- drivers/staging/rtl8723au/include/rtl8723a_dm.h | 1 - drivers/staging/rtl8723au/os_dep/os_intfs.c | 2 -- 3 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index bf1db907643c..4a3d2e16599c 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -260,7 +260,3 @@ void rtl8723a_init_dm_priv(struct rtw_adapter *Adapter) memset(pdmpriv, 0, sizeof(struct dm_priv)); Init_ODM_ComInfo_8723a(Adapter); } - -void rtl8723a_deinit_dm_priv(struct rtw_adapter *Adapter) -{ -} diff --git a/drivers/staging/rtl8723au/include/rtl8723a_dm.h b/drivers/staging/rtl8723au/include/rtl8723a_dm.h index ccac672c9c04..57be34728544 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_dm.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_dm.h @@ -134,7 +134,6 @@ struct dm_priv /* */ void rtl8723a_init_dm_priv(struct rtw_adapter *padapter); -void rtl8723a_deinit_dm_priv(struct rtw_adapter *padapter); void rtl8723a_InitHalDm(struct rtw_adapter *padapter); void rtl8723a_HalDmWatchDog(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index d72305dc800f..a081e7ab97ae 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -557,8 +557,6 @@ void rtw_cancel_all_timer23a(struct rtw_adapter *padapter) ("%s:cancel set_scan_deny_timer!\n", __func__)); del_timer_sync(&padapter->recvpriv.signal_stat_timer); - /* cancel dm timer */ - rtl8723a_deinit_dm_priv(padapter); } int rtw_free_drv_sw23a(struct rtw_adapter *padapter) -- cgit From 45555706d2361088c9e1209638b6ade0bb4bdd41 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:47 +0200 Subject: staging: rtl8723au: Remove no-op function dm_CheckStatistics() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 4a3d2e16599c..3fb54fc10acf 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -34,10 +34,6 @@ /* Global var */ /* */ -static void dm_CheckStatistics(struct rtw_adapter *Adapter) -{ -} - static void dm_CheckPbcGPIO(struct rtw_adapter *padapter) { u8 tmp1byte; @@ -225,9 +221,6 @@ rtl8723a_HalDmWatchDog( bFwPSAwake = rtl8723a_get_fwlps_rf_on(Adapter); if (!bFwCurrentInPSMode && bFwPSAwake) { - /* Calculate Tx/Rx statistics. */ - dm_CheckStatistics(Adapter); - /* Read REG_INIDATA_RATE_SEL value for TXDESC. */ if (check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE)) { pdmpriv->INIDATA_RATE[0] = rtl8723au_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f; -- cgit From a0a88236a3c0d4696c141c09522d87e221cc537a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:48 +0200 Subject: staging: rtl8723au: Remove write-only struct dm_priv->DM_Type variable Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 1 - drivers/staging/rtl8723au/include/rtl8723a_dm.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 3fb54fc10acf..b7ed764423b8 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -185,7 +185,6 @@ void rtl8723a_InitHalDm(struct rtw_adapter *Adapter) struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; u8 i; - pdmpriv->DM_Type = DM_Type_ByDriver; pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE; #ifdef CONFIG_8723AU_BT_COEXIST diff --git a/drivers/staging/rtl8723au/include/rtl8723a_dm.h b/drivers/staging/rtl8723au/include/rtl8723a_dm.h index 57be34728544..5ee3af4ca2db 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_dm.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_dm.h @@ -39,7 +39,6 @@ enum{ /* duplicate code,will move to ODM ######### */ struct dm_priv { - u8 DM_Type; u8 DMFlag; u8 InitDMFlag; u32 InitODMFlag; -- cgit From 353cb50dc7d42a062f0cd96c20543384fbf630eb Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:49 +0200 Subject: staging: rtl8723au: Remove write-only variables struct dm_priv->{Init,}DMFlag Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/hal_com.c | 6 ++---- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 7 ------- drivers/staging/rtl8723au/include/rtl8723a_dm.h | 2 -- 3 files changed, 2 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/hal_com.c b/drivers/staging/rtl8723au/hal/hal_com.c index 8718151d127b..4a66ed52d22f 100644 --- a/drivers/staging/rtl8723au/hal/hal_com.c +++ b/drivers/staging/rtl8723au/hal/hal_com.c @@ -867,12 +867,10 @@ void rtl8723a_odm_support_ability_set(struct rtw_adapter *padapter, u32 val) { struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); - if (val == DYNAMIC_ALL_FUNC_ENABLE) { - pHalData->dmpriv.DMFlag = pHalData->dmpriv.InitDMFlag; + if (val == DYNAMIC_ALL_FUNC_ENABLE) pHalData->odmpriv.SupportAbility = pHalData->dmpriv.InitODMFlag; - } else { + else pHalData->odmpriv.SupportAbility |= val; - } } void rtl8723a_odm_support_ability_clr(struct rtw_adapter *padapter, u32 val) diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index b7ed764423b8..479ce7ae7939 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -185,13 +185,6 @@ void rtl8723a_InitHalDm(struct rtw_adapter *Adapter) struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; u8 i; - pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE; - -#ifdef CONFIG_8723AU_BT_COEXIST - pdmpriv->DMFlag |= DYNAMIC_FUNC_BT; -#endif - pdmpriv->InitDMFlag = pdmpriv->DMFlag; - Update_ODM_ComInfo_8723a(Adapter); ODM23a_DMInit(pDM_Odm); /* Save REG_INIDATA_RATE_SEL value for TXDESC. */ diff --git a/drivers/staging/rtl8723au/include/rtl8723a_dm.h b/drivers/staging/rtl8723au/include/rtl8723a_dm.h index 5ee3af4ca2db..18112225e53f 100644 --- a/drivers/staging/rtl8723au/include/rtl8723a_dm.h +++ b/drivers/staging/rtl8723au/include/rtl8723a_dm.h @@ -39,8 +39,6 @@ enum{ /* duplicate code,will move to ODM ######### */ struct dm_priv { - u8 DMFlag; - u8 InitDMFlag; u32 InitODMFlag; /* Upper and Lower Signal threshold for Rate Adaptive*/ -- cgit From 65064399c2a85a2ab76e0089f2c20f766a962bc7 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:50 +0200 Subject: staging: rtl8723au: Remove ODM_CMNINFO_[RT]X_UNI and related code Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 -------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 4 ---- drivers/staging/rtl8723au/include/odm.h | 6 ------ 3 files changed, 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index ed6d3af809a2..4f25606ffcda 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -421,12 +421,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, case ODM_CMNINFO_MAC_PHY_MODE: pDM_Odm->pMacPhyMode = (u8 *)pValue; break; - case ODM_CMNINFO_TX_UNI: - pDM_Odm->pNumTxBytesUnicast = (u64 *)pValue; - break; - case ODM_CMNINFO_RX_UNI: - pDM_Odm->pNumRxBytesUnicast = (u64 *)pValue; - break; case ODM_CMNINFO_WM_MODE: pDM_Odm->pWirelessMode = (u8 *)pValue; break; @@ -600,8 +594,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pNumTxBytesUnicast =%llu\n", *(pDM_Odm->pNumTxBytesUnicast))); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pNumRxBytesUnicast =%llu\n", *(pDM_Odm->pNumRxBytesUnicast))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pWirelessMode = 0x%x\n", *(pDM_Odm->pWirelessMode))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecChOffset =%d\n", *(pDM_Odm->pSecChOffset))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecurity =%d\n", *(pDM_Odm->pSecurity))); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 479ce7ae7939..37a11c346353 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -154,10 +154,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) ODM_CmnInfoUpdate23a(pDM_Odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_UNI, - &Adapter->xmitpriv.tx_bytes); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_UNI, - &Adapter->recvpriv.rx_bytes); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_WM_MODE, &pmlmeext->cur_wireless_mode); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 9c8e7d8256d4..d549b7fbacf5 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -321,8 +321,6 @@ enum odm_cmninfo { /* Dynamic value: */ /* */ ODM_CMNINFO_MAC_PHY_MODE, /* enum odm_mac_phy_mode */ - ODM_CMNINFO_TX_UNI, - ODM_CMNINFO_RX_UNI, ODM_CMNINFO_WM_MODE, /* enum odm_wireless_mode */ ODM_CMNINFO_BAND, /* enum odm_band_type */ ODM_CMNINFO_SEC_CHNL_OFFSET, /* enum odm_sec_chnl_offset */ @@ -715,10 +713,6 @@ struct dm_odm_t { /* MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 */ u8 *pMacPhyMode; - /* TX Unicast byte count */ - u64 *pNumTxBytesUnicast; - /* RX Unicast byte count */ - u64 *pNumRxBytesUnicast; /* Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 */ u8 *pWirelessMode; /* enum odm_wireless_mode */ /* Frequence band 2.4G/5G = 0/1 */ -- cgit From c17a42655644c06598bb0efbb7fdb24393fb66f8 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:51 +0200 Subject: staging: rtl8723au: Remove useless ODM_CMNINFO_{WM_MODE, BAND} related code Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 -------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 -- drivers/staging/rtl8723au/include/odm.h | 6 ------ 3 files changed, 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 4f25606ffcda..d9311694d25e 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -421,12 +421,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, case ODM_CMNINFO_MAC_PHY_MODE: pDM_Odm->pMacPhyMode = (u8 *)pValue; break; - case ODM_CMNINFO_WM_MODE: - pDM_Odm->pWirelessMode = (u8 *)pValue; - break; - case ODM_CMNINFO_BAND: - pDM_Odm->pBandType = (u8 *)pValue; - break; case ODM_CMNINFO_SEC_CHNL_OFFSET: pDM_Odm->pSecChOffset = (u8 *)pValue; break; @@ -594,7 +588,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pWirelessMode = 0x%x\n", *(pDM_Odm->pWirelessMode))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecChOffset =%d\n", *(pDM_Odm->pSecChOffset))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecurity =%d\n", *(pDM_Odm->pSecurity))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandWidth =%d\n", *(pDM_Odm->pBandWidth))); @@ -1193,7 +1186,6 @@ u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, struct sta_info *pEntry; u32 rate_bitmap = 0x0fffffff; u8 WirelessMode; - /* u8 WirelessMode =*(pDM_Odm->pWirelessMode); */ pEntry = pDM_Odm->pODM_StaInfo[macid]; if (!pEntry) diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 37a11c346353..fe4754fdc62e 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -154,8 +154,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) ODM_CmnInfoUpdate23a(pDM_Odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_WM_MODE, - &pmlmeext->cur_wireless_mode); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &pHalData->nCur40MhzPrimeSC); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_MODE, diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index d549b7fbacf5..6fa7de6a01eb 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -321,8 +321,6 @@ enum odm_cmninfo { /* Dynamic value: */ /* */ ODM_CMNINFO_MAC_PHY_MODE, /* enum odm_mac_phy_mode */ - ODM_CMNINFO_WM_MODE, /* enum odm_wireless_mode */ - ODM_CMNINFO_BAND, /* enum odm_band_type */ ODM_CMNINFO_SEC_CHNL_OFFSET, /* enum odm_sec_chnl_offset */ ODM_CMNINFO_SEC_MODE, /* enum odm_security */ ODM_CMNINFO_BW, /* enum odm_band_width */ @@ -713,10 +711,6 @@ struct dm_odm_t { /* MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 */ u8 *pMacPhyMode; - /* Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 */ - u8 *pWirelessMode; /* enum odm_wireless_mode */ - /* Frequence band 2.4G/5G = 0/1 */ - u8 *pBandType; /* Secondary channel offset don't_care/below/above = 0/1/2 */ u8 *pSecChOffset; /* Security mode Open/WEP/AES/TKIP = 0/1/2/3 */ -- cgit From c5f3dc2fef61458efd8ef08c3f9bd7b15c143cfd Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:52 +0200 Subject: staging: rtl8723au: Remove another pile of useless ODM variables Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 16 ---------------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 5 +---- drivers/staging/rtl8723au/include/odm.h | 16 +--------------- 3 files changed, 2 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index d9311694d25e..0c4756c6f402 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -418,30 +418,15 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_MAC_PHY_MODE: - pDM_Odm->pMacPhyMode = (u8 *)pValue; - break; case ODM_CMNINFO_SEC_CHNL_OFFSET: pDM_Odm->pSecChOffset = (u8 *)pValue; break; - case ODM_CMNINFO_SEC_MODE: - pDM_Odm->pSecurity = (u8 *)pValue; - break; case ODM_CMNINFO_BW: pDM_Odm->pBandWidth = (u8 *)pValue; break; case ODM_CMNINFO_CHNL: pDM_Odm->pChannel = (u8 *)pValue; break; - case ODM_CMNINFO_DMSP_GET_VALUE: - pDM_Odm->pbGetValueFromOtherMac = (bool *)pValue; - break; - case ODM_CMNINFO_BUDDY_ADAPTOR: - pDM_Odm->pBuddyAdapter = (struct rtw_adapter **)pValue; - break; - case ODM_CMNINFO_DMSP_IS_MASTER: - pDM_Odm->pbMasterOfDMSP = (bool *)pValue; - break; case ODM_CMNINFO_SCAN: pDM_Odm->pbScanInProcess = (bool *)pValue; break; @@ -589,7 +574,6 @@ void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecChOffset =%d\n", *(pDM_Odm->pSecChOffset))); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecurity =%d\n", *(pDM_Odm->pSecurity))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandWidth =%d\n", *(pDM_Odm->pBandWidth))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pChannel =%d\n", *(pDM_Odm->pChannel))); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index fe4754fdc62e..06b149637cff 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -133,8 +133,7 @@ static void Init_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) { - struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; - struct mlme_priv *pmlmepriv = &Adapter->mlmepriv; + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv; struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; @@ -156,8 +155,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &pHalData->nCur40MhzPrimeSC); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_MODE, - &Adapter->securitypriv.dot11PrivacyAlgrthm); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, &pHalData->CurrentChannelBW); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 6fa7de6a01eb..eaee9667ff83 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -320,15 +320,10 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_MAC_PHY_MODE, /* enum odm_mac_phy_mode */ ODM_CMNINFO_SEC_CHNL_OFFSET, /* enum odm_sec_chnl_offset */ - ODM_CMNINFO_SEC_MODE, /* enum odm_security */ - ODM_CMNINFO_BW, /* enum odm_band_width */ + ODM_CMNINFO_BW, /* enum odm_band_width */ ODM_CMNINFO_CHNL, - ODM_CMNINFO_DMSP_GET_VALUE, - ODM_CMNINFO_BUDDY_ADAPTOR, - ODM_CMNINFO_DMSP_IS_MASTER, ODM_CMNINFO_SCAN, ODM_CMNINFO_POWER_SAVING, ODM_CMNINFO_ONE_PATH_CCA, /* enum odm_cca_path */ @@ -709,21 +704,12 @@ struct dm_odm_t { bool bool_temp; struct rtw_adapter *PADAPTER_temp; - /* MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 */ - u8 *pMacPhyMode; /* Secondary channel offset don't_care/below/above = 0/1/2 */ u8 *pSecChOffset; - /* Security mode Open/WEP/AES/TKIP = 0/1/2/3 */ - u8 *pSecurity; /* BW info 20M/40M/80M = 0/1/2 */ u8 *pBandWidth; /* Central channel location Ch1/Ch2/.... */ u8 *pChannel; /* central channel number */ - /* Common info for 92D DMSP */ - - bool *pbGetValueFromOtherMac; - struct rtw_adapter **pBuddyAdapter; - bool *pbMasterOfDMSP; /* MAC0: master, MAC1: slave */ /* Common info for Status */ bool *pbScanInProcess; bool *pbPowerSaving; -- cgit From 42f9f19ef59926c5d881ffce9fd61e0b9b708678 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:53 +0200 Subject: staging: rtl8723au: Remove another pile of awful unused ODM variables Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 18 ------------------ drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 -- drivers/staging/rtl8723au/include/odm.h | 16 ---------------- 3 files changed, 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 0c4756c6f402..491ba9c9afc8 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -433,24 +433,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, case ODM_CMNINFO_POWER_SAVING: pDM_Odm->pbPowerSaving = (bool *)pValue; break; - case ODM_CMNINFO_ONE_PATH_CCA: - pDM_Odm->pOnePathCCA = (u8 *)pValue; - break; - case ODM_CMNINFO_DRV_STOP: - pDM_Odm->pbDriverStopped = (bool *)pValue; - break; - case ODM_CMNINFO_PNP_IN: - pDM_Odm->pbDriverIsGoingToPnpSetPowerSleep = (bool *)pValue; - break; - case ODM_CMNINFO_INIT_ON: - pDM_Odm->pinit_adpt_in_progress = (bool *)pValue; - break; - case ODM_CMNINFO_ANT_TEST: - pDM_Odm->pAntennaTest = (u8 *)pValue; - break; - case ODM_CMNINFO_NET_CLOSED: - pDM_Odm->pbNet_closed = (bool *)pValue; - break; /* To remove the compiler warning, must add an empty default statement to handle the other values. */ default: /* do nothing */ diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 06b149637cff..4383c4346cff 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -159,8 +159,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) &pHalData->CurrentChannelBW); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, &pHalData->CurrentChannel); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, &Adapter->net_closed); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &pmlmepriv->bScanInProcess); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &pwrctrlpriv->bpower_saving); diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index eaee9667ff83..7598e61e0848 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -326,12 +326,6 @@ enum odm_cmninfo { ODM_CMNINFO_SCAN, ODM_CMNINFO_POWER_SAVING, - ODM_CMNINFO_ONE_PATH_CCA, /* enum odm_cca_path */ - ODM_CMNINFO_DRV_STOP, - ODM_CMNINFO_PNP_IN, - ODM_CMNINFO_INIT_ON, - ODM_CMNINFO_ANT_TEST, - ODM_CMNINFO_NET_CLOSED, ODM_CMNINFO_MP_MODE, ODM_CMNINFO_WIFI_DIRECT, @@ -713,11 +707,6 @@ struct dm_odm_t { /* Common info for Status */ bool *pbScanInProcess; bool *pbPowerSaving; - /* CCA Path 2-path/path-A/path-B = 0/1/2; using enum odm_cca_path. */ - u8 *pOnePathCCA; - /* pMgntInfo->AntennaTest */ - u8 *pAntennaTest; - bool *pbNet_closed; /* POINTER REFERENCE----------- */ /* */ /* CALL BY VALUE------------- */ @@ -783,11 +772,6 @@ struct dm_odm_t { /* ================================================== */ /* */ - /* common */ - bool *pbDriverStopped; - bool *pbDriverIsGoingToPnpSetPowerSleep; - bool *pinit_adpt_in_progress; - /* PSD */ bool bUserAssignLevel; u8 RSSI_BT; /* come from BT */ -- cgit From 09b052a90976393c371cd411475b88b3778071ee Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:54 +0200 Subject: staging: rtl8723au: We don't need two APIs to set pHalData->odmpriv.SupportAbility Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 6 ------ drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 3 +-- drivers/staging/rtl8723au/include/odm.h | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 491ba9c9afc8..c239b5204f49 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -344,9 +344,6 @@ void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, /* */ switch (CmnInfo) { /* Fixed ODM value. */ - case ODM_CMNINFO_ABILITY: - pDM_Odm->SupportAbility = (u32)Value; - break; case ODM_CMNINFO_PLATFORM: break; case ODM_CMNINFO_INTERFACE: @@ -461,9 +458,6 @@ void ODM_CmnInfoUpdate23a(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value) { /* This init variable may be changed in run time. */ switch (CmnInfo) { - case ODM_CMNINFO_ABILITY: - pDM_Odm->SupportAbility = (u32)Value; - break; case ODM_CMNINFO_RF_TYPE: pDM_Odm->RFType = (u8)Value; break; diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 4383c4346cff..204b4adf006c 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -150,8 +150,7 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) ODM_RF_TX_PWR_TRACK | ODM_RF_CALIBRATION; /* Pointer reference */ - - ODM_CmnInfoUpdate23a(pDM_Odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag); + rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &pHalData->nCur40MhzPrimeSC); diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 7598e61e0848..546cbb5920b2 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -300,7 +300,6 @@ enum odm_cmninfo { /* */ ODM_CMNINFO_PLATFORM = 0, - ODM_CMNINFO_ABILITY, /* enum odm_ability */ ODM_CMNINFO_INTERFACE, /* enum odm_interface_def */ ODM_CMNINFO_MP_TEST_CHIP, ODM_CMNINFO_IC_TYPE, /* enum odm_ic_type_def */ -- cgit From ec8884fb20912e866d5f4ce34cdb509c146dbde1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:55 +0200 Subject: staging: rtl8723au: ODM_DMWatchdog23a(): Take a struct hal_data_8723a * This will allow us to access variables in the hal_data struct directly, and get rid of the horrendous ODM_CMNINFO spaghetti API. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 4 +++- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 +- drivers/staging/rtl8723au/include/odm.h | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index c239b5204f49..e4a922519125 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -287,8 +287,10 @@ void ODM23a_DMInit(struct dm_odm_t *pDM_Odm) /* 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */ /* You can not add any dummy function here, be care, you can only use DM structure */ /* to perform any new ODM_DM. */ -void ODM_DMWatchdog23a(struct dm_odm_t *pDM_Odm) +void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData) { + struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; + /* 2012.05.03 Luke: For all IC series */ odm_CmnInfoHook_Debug23a(pDM_Odm); odm_CmnInfoUpdate_Debug23a(pDM_Odm); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 204b4adf006c..272c1e7ed756 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -216,7 +216,7 @@ rtl8723a_HalDmWatchDog( bLinked = true; ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked); - ODM_DMWatchdog23a(&pHalData->odmpriv); + ODM_DMWatchdog23a(pHalData); skip_dm: diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 546cbb5920b2..b2d89836e685 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -999,7 +999,8 @@ u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, u32 macid, u32 ra_mask, u8 void ODM23a_DMInit(struct dm_odm_t *pDM_Odm); -void ODM_DMWatchdog23a(struct dm_odm_t *pDM_Odm); /* For common use in the future */ +struct hal_data_8723a; +void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData); void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u32 Value); -- cgit From 91a2916a82f326c9836bc2d3e2dad5f3b5405836 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:56 +0200 Subject: staging: rtl8723au: Eliminate ugly ODM_CMNINFO_SEC_CHNL_OFFSET usage Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 17 +++++++---------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 -- drivers/staging/rtl8723au/include/odm.h | 3 --- 3 files changed, 7 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index e4a922519125..aa310a32987b 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -166,7 +166,7 @@ u8 CCKSwingTable_Ch1423A[CCK_TABLE_SIZE][8] = { /* START------------COMMON INFO RELATED--------------- */ void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm); -void odm_CommonInfoSelfUpdate23a(struct dm_odm_t *pDM_Odm); +static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData); void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm); @@ -294,7 +294,7 @@ void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData) /* 2012.05.03 Luke: For all IC series */ odm_CmnInfoHook_Debug23a(pDM_Odm); odm_CmnInfoUpdate_Debug23a(pDM_Odm); - odm_CommonInfoSelfUpdate23a(pDM_Odm); + odm_CommonInfoSelfUpdate(pHalData); odm_FalseAlarmCounterStatistics23a(pDM_Odm); odm_RSSIMonitorCheck23a(pDM_Odm); @@ -417,9 +417,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_SEC_CHNL_OFFSET: - pDM_Odm->pSecChOffset = (u8 *)pValue; - break; case ODM_CMNINFO_BW: pDM_Odm->pBandWidth = (u8 *)pValue; break; @@ -502,16 +499,17 @@ void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm ODM_InitDebugSetting23a(pDM_Odm); } -void odm_CommonInfoSelfUpdate23a(struct dm_odm_t *pDM_Odm) +static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData) { + struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; + struct sta_info *pEntry; u8 EntryCnt = 0; u8 i; - struct sta_info *pEntry; if (*(pDM_Odm->pBandWidth) == ODM_BW40M) { - if (*(pDM_Odm->pSecChOffset) == 1) + if (pHalData->nCur40MhzPrimeSC == 1) pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2; - else if (*(pDM_Odm->pSecChOffset) == 2) + else if (pHalData->nCur40MhzPrimeSC == 2) pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2; } else { pDM_Odm->ControlChannel = *(pDM_Odm->pChannel); @@ -551,7 +549,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pSecChOffset =%d\n", *(pDM_Odm->pSecChOffset))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandWidth =%d\n", *(pDM_Odm->pBandWidth))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pChannel =%d\n", *(pDM_Odm->pChannel))); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 272c1e7ed756..89ae2f27f2c2 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -152,8 +152,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) /* Pointer reference */ rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, - &pHalData->nCur40MhzPrimeSC); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, &pHalData->CurrentChannelBW); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index b2d89836e685..e361c45e2b8f 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -319,7 +319,6 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_SEC_CHNL_OFFSET, /* enum odm_sec_chnl_offset */ ODM_CMNINFO_BW, /* enum odm_band_width */ ODM_CMNINFO_CHNL, @@ -697,8 +696,6 @@ struct dm_odm_t { bool bool_temp; struct rtw_adapter *PADAPTER_temp; - /* Secondary channel offset don't_care/below/above = 0/1/2 */ - u8 *pSecChOffset; /* BW info 20M/40M/80M = 0/1/2 */ u8 *pBandWidth; /* Central channel location Ch1/Ch2/.... */ -- cgit From 301fc630ef3ea2f1e855d409cf6be34924f67ac9 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:57 +0200 Subject: staging: rtl8723au: Eliminate ODM_CMNINFO_BW usage Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 19 ++++++++----------- drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 3 ++- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 -- drivers/staging/rtl8723au/hal/usb_halinit.c | 4 ++-- drivers/staging/rtl8723au/include/odm.h | 17 +++-------------- 5 files changed, 15 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index aa310a32987b..a15a8cba489d 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -417,9 +417,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_BW: - pDM_Odm->pBandWidth = (u8 *)pValue; - break; case ODM_CMNINFO_CHNL: pDM_Odm->pChannel = (u8 *)pValue; break; @@ -506,7 +503,7 @@ static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData) u8 EntryCnt = 0; u8 i; - if (*(pDM_Odm->pBandWidth) == ODM_BW40M) { + if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40) { if (pHalData->nCur40MhzPrimeSC == 1) pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2; else if (pHalData->nCur40MhzPrimeSC == 2) @@ -549,7 +546,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pBandWidth =%d\n", *(pDM_Odm->pBandWidth))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pChannel =%d\n", *(pDM_Odm->pChannel))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbScanInProcess =%d\n", *(pDM_Odm->pbScanInProcess))); @@ -1137,11 +1133,10 @@ void odm_RateAdaptiveMaskInit23a(struct dm_odm_t *pDM_Odm) pOdmRA->LowRSSIThresh = 20; } -u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, - u32 macid, - u32 ra_mask, - u8 rssi_level) +u32 ODM_Get_Rate_Bitmap23a(struct hal_data_8723a *pHalData, u32 macid, + u32 ra_mask, u8 rssi_level) { + struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; struct sta_info *pEntry; u32 rate_bitmap = 0x0fffffff; u8 WirelessMode; @@ -1181,7 +1176,8 @@ u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, } else if (rssi_level == DM_RATR_STA_MIDDLE) { rate_bitmap = 0x000ff000; } else { - if (*(pDM_Odm->pBandWidth) == ODM_BW40M) + if (pHalData->CurrentChannelBW == + HT_CHANNEL_WIDTH_40) rate_bitmap = 0x000ff015; else rate_bitmap = 0x000ff005; @@ -1192,7 +1188,8 @@ u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, } else if (rssi_level == DM_RATR_STA_MIDDLE) { rate_bitmap = 0x0f8ff000; } else { - if (*(pDM_Odm->pBandWidth) == ODM_BW40M) + if (pHalData->CurrentChannelBW == + HT_CHANNEL_WIDTH_40) rate_bitmap = 0x0f8ff015; else rate_bitmap = 0x0f8ff005; diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c index 7dd62b3dec8c..271c33d6ca5a 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c @@ -151,7 +151,8 @@ void rtl8723a_add_rateatid(struct rtw_adapter *pAdapter, u32 bitmap, u8 arg, u8 bitmap &= 0x0fffffff; if (rssi_level != DM_RATR_STA_INIT) - bitmap = ODM_Get_Rate_Bitmap23a(&pHalData->odmpriv, macid, bitmap, rssi_level); + bitmap = ODM_Get_Rate_Bitmap23a(pHalData, macid, bitmap, + rssi_level); bitmap |= ((raid<<28)&0xf0000000); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 89ae2f27f2c2..dfed57e0786d 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -152,8 +152,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) /* Pointer reference */ rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, - &pHalData->CurrentChannelBW); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, &pHalData->CurrentChannel); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &pmlmepriv->bScanInProcess); diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index e09329bb1f8d..b51762a10d78 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -1500,8 +1500,8 @@ void rtl8723a_update_ramask(struct rtw_adapter *padapter, /* mask &= 0x0fffffff; */ rate_bitmap = 0x0fffffff; - rate_bitmap = ODM_Get_Rate_Bitmap23a(&pHalData->odmpriv, - mac_id, mask, rssi_level); + rate_bitmap = ODM_Get_Rate_Bitmap23a(pHalData, mac_id, mask, + rssi_level); DBG_8723A("%s => mac_id:%d, networkType:0x%02x, " "mask:0x%08x\n\t ==> rssi_level:%d, rate_bitmap:0x%08x\n", __func__, mac_id, networkType, mask, rssi_level, rate_bitmap); diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index e361c45e2b8f..be0b84f6220c 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -319,7 +319,6 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_BW, /* enum odm_band_width */ ODM_CMNINFO_CHNL, ODM_CMNINFO_SCAN, @@ -495,15 +494,6 @@ enum odm_sec_chnl_offset { ODM_ABOVE = 2 }; -/* ODM_CMNINFO_BW */ -enum odm_band_width { - ODM_BW20M = 0, - ODM_BW40M = 1, - ODM_BW80M = 2, - ODM_BW160M = 3, - ODM_BW10M = 4, -}; - /* ODM_CMNINFO_CHNL */ /* ODM_CMNINFO_BOARD_TYPE */ @@ -696,8 +686,6 @@ struct dm_odm_t { bool bool_temp; struct rtw_adapter *PADAPTER_temp; - /* BW info 20M/40M/80M = 0/1/2 */ - u8 *pBandWidth; /* Central channel location Ch1/Ch2/.... */ u8 *pChannel; /* central channel number */ /* Common info for Status */ @@ -962,6 +950,8 @@ extern u8 CCKSwingTable_Ch1423A [CCK_TABLE_SIZE][8]; #define SWAW_STEP_PEAK 0 #define SWAW_STEP_DETERMINE 1 +struct hal_data_8723a; + void ODM_Write_DIG23a(struct dm_odm_t *pDM_Odm, u8 CurrentIGI); void ODM_Write_CCK_CCA_Thres23a(struct dm_odm_t *pDM_Odm, u8 CurCCK_CCAThres); @@ -991,12 +981,11 @@ u32 GetPSDData(struct dm_odm_t *pDM_Odm, unsigned int point, u8 initial_gain_psd void odm_DIG23abyRSSI_LPS(struct dm_odm_t *pDM_Odm); -u32 ODM_Get_Rate_Bitmap23a(struct dm_odm_t *pDM_Odm, u32 macid, u32 ra_mask, u8 rssi_level); +u32 ODM_Get_Rate_Bitmap23a(struct hal_data_8723a *pHalData, u32 macid, u32 ra_mask, u8 rssi_level); void ODM23a_DMInit(struct dm_odm_t *pDM_Odm); -struct hal_data_8723a; void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData); void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u32 Value); -- cgit From ac6c69d31128cb479b1b99dcd019aa2c41b9ecfd Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:58 +0200 Subject: staging: rtl8723au: Eliminate ODM_CMNINFO_CHNL usage Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 10 +++------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 2 -- drivers/staging/rtl8723au/include/odm.h | 4 ---- 3 files changed, 3 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index a15a8cba489d..ac9be2190bb2 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -417,9 +417,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_CHNL: - pDM_Odm->pChannel = (u8 *)pValue; - break; case ODM_CMNINFO_SCAN: pDM_Odm->pbScanInProcess = (bool *)pValue; break; @@ -505,11 +502,11 @@ static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData) if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40) { if (pHalData->nCur40MhzPrimeSC == 1) - pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2; + pDM_Odm->ControlChannel = pHalData->CurrentChannel - 2; else if (pHalData->nCur40MhzPrimeSC == 2) - pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2; + pDM_Odm->ControlChannel = pHalData->CurrentChannel + 2; } else { - pDM_Odm->ControlChannel = *(pDM_Odm->pChannel); + pDM_Odm->ControlChannel = pHalData->CurrentChannel; } for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) { @@ -546,7 +543,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pChannel =%d\n", *(pDM_Odm->pChannel))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbScanInProcess =%d\n", *(pDM_Odm->pbScanInProcess))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbPowerSaving =%d\n", *(pDM_Odm->pbPowerSaving))); diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index dfed57e0786d..d1e423192309 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -152,8 +152,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) /* Pointer reference */ rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, - &pHalData->CurrentChannel); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &pmlmepriv->bScanInProcess); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &pwrctrlpriv->bpower_saving); diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index be0b84f6220c..022387b23006 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -319,8 +319,6 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_CHNL, - ODM_CMNINFO_SCAN, ODM_CMNINFO_POWER_SAVING, ODM_CMNINFO_MP_MODE, @@ -686,8 +684,6 @@ struct dm_odm_t { bool bool_temp; struct rtw_adapter *PADAPTER_temp; - /* Central channel location Ch1/Ch2/.... */ - u8 *pChannel; /* central channel number */ /* Common info for Status */ bool *pbScanInProcess; bool *pbPowerSaving; -- cgit From 1a573d2bbeb379aa1fb3cd20be839a23a43d8a3e Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:24:59 +0200 Subject: staging: rtl8723au: Eliminate ODM_CMNINFO_SCAN related code Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 18 ++++++++---------- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 4 +--- drivers/staging/rtl8723au/include/odm.h | 4 +--- 3 files changed, 10 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index ac9be2190bb2..eadf2ed8023c 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -179,7 +179,7 @@ void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm); void odm_DIG23aInit(struct dm_odm_t *pDM_Odm); -void odm_DIG23a(struct dm_odm_t *pDM_Odm); +void odm_DIG23a(struct rtw_adapter *adapter); void odm_CCKPacketDetectionThresh23a(struct dm_odm_t *pDM_Odm); /* END---------------DIG--------------------------- */ @@ -287,8 +287,9 @@ void ODM23a_DMInit(struct dm_odm_t *pDM_Odm) /* 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */ /* You can not add any dummy function here, be care, you can only use DM structure */ /* to perform any new ODM_DM. */ -void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData) +void ODM_DMWatchdog23a(struct rtw_adapter *adapter) { + struct hal_data_8723a *pHalData = GET_HAL_DATA(adapter); struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; /* 2012.05.03 Luke: For all IC series */ @@ -307,7 +308,7 @@ void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData) ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("---Step2: 8723AS is in LPS mode\n")); odm_DIG23abyRSSI_LPS(pDM_Odm); } else { - odm_DIG23a(pDM_Odm); + odm_DIG23a(adapter); } odm_CCKPacketDetectionThresh23a(pDM_Odm); @@ -417,9 +418,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_SCAN: - pDM_Odm->pbScanInProcess = (bool *)pValue; - break; case ODM_CMNINFO_POWER_SAVING: pDM_Odm->pbPowerSaving = (bool *)pValue; break; @@ -544,7 +542,6 @@ void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbScanInProcess =%d\n", *(pDM_Odm->pbScanInProcess))); ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbPowerSaving =%d\n", *(pDM_Odm->pbPowerSaving))); } @@ -655,9 +652,10 @@ void odm_DIG23aInit(struct dm_odm_t *pDM_Odm) pDM_DigTable->bMediaConnect_1 = false; } -void odm_DIG23a(struct dm_odm_t *pDM_Odm) +void odm_DIG23a(struct rtw_adapter *adapter) { - + struct hal_data_8723a *pHalData = GET_HAL_DATA(adapter); + struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable; struct false_alarm_stats *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt; u8 DIG_Dynamic_MIN; @@ -674,7 +672,7 @@ void odm_DIG23a(struct dm_odm_t *pDM_Odm) return; } - if (*(pDM_Odm->pbScanInProcess)) { + if (adapter->mlmepriv.bScanInProcess) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a() Return: In Scan Progress \n")); return; } diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index d1e423192309..22dec5ccffe8 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -133,7 +133,6 @@ static void Init_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) { - struct mlme_priv *pmlmepriv = &Adapter->mlmepriv; struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; @@ -152,7 +151,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) /* Pointer reference */ rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &pmlmepriv->bScanInProcess); ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &pwrctrlpriv->bpower_saving); @@ -210,7 +208,7 @@ rtl8723a_HalDmWatchDog( bLinked = true; ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked); - ODM_DMWatchdog23a(pHalData); + ODM_DMWatchdog23a(Adapter); skip_dm: diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 022387b23006..300f8fbd446f 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -319,7 +319,6 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_SCAN, ODM_CMNINFO_POWER_SAVING, ODM_CMNINFO_MP_MODE, @@ -685,7 +684,6 @@ struct dm_odm_t { struct rtw_adapter *PADAPTER_temp; /* Common info for Status */ - bool *pbScanInProcess; bool *pbPowerSaving; /* POINTER REFERENCE----------- */ /* */ @@ -982,7 +980,7 @@ u32 ODM_Get_Rate_Bitmap23a(struct hal_data_8723a *pHalData, u32 macid, u32 ra_ma void ODM23a_DMInit(struct dm_odm_t *pDM_Odm); -void ODM_DMWatchdog23a(struct hal_data_8723a *pHalData); +void ODM_DMWatchdog23a(struct rtw_adapter *adapter); void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u32 Value); -- cgit From 638847c94b37fb173048129370029d3594e7de6d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:00 +0200 Subject: staging: rtl8723au: Eliminate ODM_CMNINFO_POWER_SAVING usage Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 ++------ drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 4 ---- drivers/staging/rtl8723au/include/odm.h | 3 --- 3 files changed, 2 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index eadf2ed8023c..754b8165a14c 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -291,6 +291,7 @@ void ODM_DMWatchdog23a(struct rtw_adapter *adapter) { struct hal_data_8723a *pHalData = GET_HAL_DATA(adapter); struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; + struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv; /* 2012.05.03 Luke: For all IC series */ odm_CmnInfoHook_Debug23a(pDM_Odm); @@ -313,7 +314,7 @@ void ODM_DMWatchdog23a(struct rtw_adapter *adapter) odm_CCKPacketDetectionThresh23a(pDM_Odm); - if (*(pDM_Odm->pbPowerSaving)) + if (pwrctrlpriv->bpower_saving) return; odm_RefreshRateAdaptiveMask23a(pDM_Odm); @@ -418,9 +419,6 @@ void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, /* Hook call by reference pointer. */ switch (CmnInfo) { /* Dynamic call by reference pointer. */ - case ODM_CMNINFO_POWER_SAVING: - pDM_Odm->pbPowerSaving = (bool *)pValue; - break; /* To remove the compiler warning, must add an empty default statement to handle the other values. */ default: /* do nothing */ @@ -541,8 +539,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); - - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("pbPowerSaving =%d\n", *(pDM_Odm->pbPowerSaving))); } void odm_CmnInfoUpdate_Debug23a(struct dm_odm_t *pDM_Odm) diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index 22dec5ccffe8..fa3e5aafd51d 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -133,7 +133,6 @@ static void Init_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) { - struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv; struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; struct dm_priv *pdmpriv = &pHalData->dmpriv; @@ -151,9 +150,6 @@ static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) /* Pointer reference */ rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE); - ODM23a_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, - &pwrctrlpriv->bpower_saving); - for (i = 0; i < NUM_STA; i++) ODM_CmnInfoPtrArrayHook23a(pDM_Odm, ODM_CMNINFO_STA_STATUS, i, NULL); } diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 300f8fbd446f..58875f481978 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -319,7 +319,6 @@ enum odm_cmninfo { /* */ /* Dynamic value: */ /* */ - ODM_CMNINFO_POWER_SAVING, ODM_CMNINFO_MP_MODE, ODM_CMNINFO_WIFI_DIRECT, @@ -683,8 +682,6 @@ struct dm_odm_t { bool bool_temp; struct rtw_adapter *PADAPTER_temp; - /* Common info for Status */ - bool *pbPowerSaving; /* POINTER REFERENCE----------- */ /* */ /* CALL BY VALUE------------- */ -- cgit From 555f1ca7bcf062b4f9c85f71f1738096877053dd Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:01 +0200 Subject: staging: rtl8723au: Eliminate obsolete odm_CmnInfoHook_Debug23a() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 754b8165a14c..d420f332d15d 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -170,8 +170,6 @@ static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData); void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm); -void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm); - void odm_CmnInfoUpdate_Debug23a(struct dm_odm_t *pDM_Odm); /* START---------------DIG--------------------------- */ @@ -294,7 +292,6 @@ void ODM_DMWatchdog23a(struct rtw_adapter *adapter) struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv; /* 2012.05.03 Luke: For all IC series */ - odm_CmnInfoHook_Debug23a(pDM_Odm); odm_CmnInfoUpdate_Debug23a(pDM_Odm); odm_CommonInfoSelfUpdate(pHalData); odm_FalseAlarmCounterStatistics23a(pDM_Odm); @@ -536,11 +533,6 @@ void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm) } -void odm_CmnInfoHook_Debug23a(struct dm_odm_t *pDM_Odm) -{ - ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoHook_Debug23a ==>\n")); -} - void odm_CmnInfoUpdate_Debug23a(struct dm_odm_t *pDM_Odm) { ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoUpdate_Debug23a ==>\n")); -- cgit From bd9bda22d8cf1667f3389418f0a9daad6e6c2ee4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:02 +0200 Subject: staging: rtl8723au: Remove obsolete ODM23a_CmnInfoHook() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 15 --------------- drivers/staging/rtl8723au/include/odm.h | 2 -- 2 files changed, 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index d420f332d15d..1b39cbeaf3d8 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -408,21 +408,6 @@ void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, } -void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, - enum odm_cmninfo CmnInfo, - void *pValue - ) -{ - /* Hook call by reference pointer. */ - switch (CmnInfo) { - /* Dynamic call by reference pointer. */ - /* To remove the compiler warning, must add an empty default statement to handle the other values. */ - default: - /* do nothing */ - break; - } -} - void ODM_CmnInfoPtrArrayHook23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u16 Index, void *pValue) { diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 58875f481978..80aa215c32e0 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -981,8 +981,6 @@ void ODM_DMWatchdog23a(struct rtw_adapter *adapter); void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u32 Value); -void ODM23a_CmnInfoHook(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, void *pValue); - void ODM_CmnInfoPtrArrayHook23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo, u16 Index, void *pValue); void ODM_CmnInfoUpdate23a(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value); -- cgit From 62b0d72b3cf0307a2fc2693f39b290d6657f49a9 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:03 +0200 Subject: staging: rtl8723au: Merge Init_ODM_ComInfo_8723a() into rtl8723a_init_dm_priv() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/rtl8723a_dm.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c index fa3e5aafd51d..fa826b068d11 100644 --- a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c +++ b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c @@ -82,16 +82,15 @@ static void dm_CheckPbcGPIO(struct rtw_adapter *padapter) /* Initialize GPIO setting registers */ /* functions */ -static void Init_ODM_ComInfo_8723a(struct rtw_adapter *Adapter) -{ +void rtl8723a_init_dm_priv(struct rtw_adapter *Adapter) +{ struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); + struct dm_priv *pdmpriv = &pHalData->dmpriv; struct dm_odm_t *pDM_Odm = &pHalData->odmpriv; - u8 cut_ver, fab_ver; + u8 cut_ver, fab_ver; - /* */ - /* Init Value */ - /* */ + memset(pdmpriv, 0, sizeof(struct dm_priv)); memset(pDM_Odm, 0, sizeof(*pDM_Odm)); pDM_Odm->Adapter = Adapter; @@ -212,12 +211,3 @@ skip_dm: /* Check Hardware Radio ON/OFF or not */ dm_CheckPbcGPIO(Adapter); } - -void rtl8723a_init_dm_priv(struct rtw_adapter *Adapter) -{ - struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); - struct dm_priv *pdmpriv = &pHalData->dmpriv; - - memset(pdmpriv, 0, sizeof(struct dm_priv)); - Init_ODM_ComInfo_8723a(Adapter); -} -- cgit From 36cf7c75af1bdc2a4f5eeea2711690e47e8cc129 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:04 +0200 Subject: staging: rtl8723au: odm_CommonInfoSelfInit23a(): Use proper register defines Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 1b39cbeaf3d8..4e7a1981936a 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -463,8 +463,10 @@ void ODM_CmnInfoUpdate23a(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value) void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm ) { - pDM_Odm->bCckHighPower = (bool) ODM_GetBBReg(pDM_Odm, 0x824, BIT(9)); - pDM_Odm->RFPathRxEnable = (u8) ODM_GetBBReg(pDM_Odm, 0xc04, 0x0F); + pDM_Odm->bCckHighPower = + (bool) ODM_GetBBReg(pDM_Odm, rFPGA0_XA_HSSIParameter2, BIT(9)); + pDM_Odm->RFPathRxEnable = + (u8) ODM_GetBBReg(pDM_Odm, rOFDM0_TRxPathEnable, 0x0F); if (pDM_Odm->SupportICType & ODM_RTL8723A) pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV; -- cgit From 62900ebf471556f30a2a9208985e1d73c902b8fd Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:05 +0200 Subject: staging: rtl8723au: Remove a pile of fluff for calling into a bunch of no-op functions The whole antenna diversity selection was completely pointless as all the end functions called were no-ops. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm.c | 77 ---------------------------- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 2 - drivers/staging/rtl8723au/include/odm.h | 9 ---- 3 files changed, 88 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c index 4e7a1981936a..1c0f106d5996 100644 --- a/drivers/staging/rtl8723au/hal/odm.c +++ b/drivers/staging/rtl8723au/hal/odm.c @@ -208,18 +208,6 @@ void odm_RSSIMonitorCheck23aAP(struct dm_odm_t *pDM_Odm); void odm_RSSIMonitorCheck23a(struct dm_odm_t *pDM_Odm); void odm_DynamicTxPower23a(struct dm_odm_t *pDM_Odm); -void odm_SwAntDivInit(struct dm_odm_t *pDM_Odm); - -void odm_SwAntDivInit_NIC(struct dm_odm_t *pDM_Odm); - -void odm_SwAntDivChkAntSwitch(struct dm_odm_t *pDM_Odm, u8 Step); - -void odm_SwAntDivChkAntSwitchNIC(struct dm_odm_t *pDM_Odm, - u8 Step - ); - -void odm_SwAntDivChkAntSwitchCallback23a(unsigned long data); - void odm_RefreshRateAdaptiveMask23a(struct dm_odm_t *pDM_Odm); void ODM_TXPowerTrackingCheck23a(struct dm_odm_t *pDM_Odm); @@ -242,8 +230,6 @@ static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm); #define RxDefaultAnt1 0x65a9 #define RxDefaultAnt2 0x569a -void odm_InitHybridAntDiv23a(struct dm_odm_t *pDM_Odm); - bool odm_StaDefAntSel(struct dm_odm_t *pDM_Odm, u32 OFDM_Ant1_Cnt, u32 OFDM_Ant2_Cnt, @@ -257,8 +243,6 @@ void odm_SetRxIdleAnt(struct dm_odm_t *pDM_Odm, bool bDualPath ); -void odm_HwAntDiv23a(struct dm_odm_t *pDM_Odm); - /* 3 Export Interface */ /* 2011/09/21 MH Add to describe different team necessary resource allocate?? */ @@ -274,12 +258,6 @@ void ODM23a_DMInit(struct dm_odm_t *pDM_Odm) odm_DynamicTxPower23aInit(pDM_Odm); odm_TXPowerTrackingInit23a(pDM_Odm); ODM_EdcaTurboInit23a(pDM_Odm); - if ((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)) - odm_InitHybridAntDiv23a(pDM_Odm); - else if (pDM_Odm->AntDivType == CGCS_RX_SW_ANTDIV) - odm_SwAntDivInit(pDM_Odm); } /* 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */ @@ -317,12 +295,6 @@ void ODM_DMWatchdog23a(struct rtw_adapter *adapter) odm_RefreshRateAdaptiveMask23a(pDM_Odm); odm_DynamicBBPowerSaving23a(pDM_Odm); - if ((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV) || - (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)) - odm_HwAntDiv23a(pDM_Odm); - else if (pDM_Odm->AntDivType == CGCS_RX_SW_ANTDIV) - odm_SwAntDivChkAntSwitch(pDM_Odm, SWAW_STEP_PEAK); ODM_TXPowerTrackingCheck23a(pDM_Odm); odm_EdcaTurboCheck23a(pDM_Odm); @@ -365,9 +337,6 @@ void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, case ODM_CMNINFO_RF_TYPE: pDM_Odm->RFType = (u8)Value; break; - case ODM_CMNINFO_RF_ANTENNA_TYPE: - pDM_Odm->AntDivType = (u8)Value; - break; case ODM_CMNINFO_BOARD_TYPE: pDM_Odm->BoardType = (u8)Value; break; @@ -467,8 +436,6 @@ void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm (bool) ODM_GetBBReg(pDM_Odm, rFPGA0_XA_HSSIParameter2, BIT(9)); pDM_Odm->RFPathRxEnable = (u8) ODM_GetBBReg(pDM_Odm, rOFDM0_TRxPathEnable, 0x0F); - if (pDM_Odm->SupportICType & ODM_RTL8723A) - pDM_Odm->AntDivType = CGCS_RX_SW_ANTDIV; ODM_InitDebugSetting23a(pDM_Odm); } @@ -1463,50 +1430,6 @@ void odm_TXPowerTrackingCheckAP(struct dm_odm_t *pDM_Odm) { } -/* antenna mapping info */ -/* 1: right-side antenna */ -/* 2/0: left-side antenna */ -/* PpDM_SWAT_Table->CCK_Ant1_Cnt /OFDM_Ant1_Cnt: for right-side antenna: Ant:1 RxDefaultAnt1 */ -/* PpDM_SWAT_Table->CCK_Ant2_Cnt /OFDM_Ant2_Cnt: for left-side antenna: Ant:0 RxDefaultAnt2 */ -/* We select left antenna as default antenna in initial process, modify it as needed */ -/* */ - -/* 3 ============================================================ */ -/* 3 SW Antenna Diversity */ -/* 3 ============================================================ */ -void odm_SwAntDivInit(struct dm_odm_t *pDM_Odm) -{ -} - -void ODM_SwAntDivChkPerPktRssi(struct dm_odm_t *pDM_Odm, u8 StationID, - struct phy_info *pPhyInfo) -{ -} - -void odm_SwAntDivChkAntSwitch(struct dm_odm_t *pDM_Odm, u8 Step) -{ -} - -void ODM_SwAntDivRestAfterLink(struct dm_odm_t *pDM_Odm) -{ -} - -void odm_SwAntDivChkAntSwitchCallback23a(unsigned long data) -{ -} - -/* 3 ============================================================ */ -/* 3 SW Antenna Diversity */ -/* 3 ============================================================ */ - -void odm_InitHybridAntDiv23a(struct dm_odm_t *pDM_Odm) -{ -} - -void odm_HwAntDiv23a(struct dm_odm_t *pDM_Odm) -{ -} - /* EDCA Turbo */ static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm) { diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index ab820a888c0f..409fde4ac420 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -401,8 +401,6 @@ static void ODM_PhyStatusQuery23a_92CSeries(struct dm_odm_t *pDM_Odm, pPhyStatus, pPktinfo); if (pDM_Odm->RSSI_test) { /* Select the packets to do RSSI checking for antenna switching. */ - if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) - ODM_SwAntDivChkPerPktRssi(pDM_Odm, pPktinfo->StationID, pPhyInfo); } else { odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo); } diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 80aa215c32e0..41dba628b113 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -125,7 +125,6 @@ struct dig_t { bool bMediaConnect_0; bool bMediaConnect_1; - u32 AntDiv_RSSI_max; u32 RSSI_max; }; @@ -670,7 +669,6 @@ struct dm_odm_t { bool bDualMacSmartConcurrent; u32 BK_SupportAbility; - u8 AntDivType; /* HOOK BEFORE REG INIT----------- */ /* */ @@ -952,9 +950,6 @@ void ODM_SetAntenna(struct dm_odm_t *pDM_Odm, u8 Antenna); #define dm_RF_Saving ODM_RF_Saving23a void ODM_RF_Saving23a(struct dm_odm_t *pDM_Odm, u8 bForceInNormal); -#define SwAntDivRestAfterLink ODM_SwAntDivRestAfterLink -void ODM_SwAntDivRestAfterLink(struct dm_odm_t *pDM_Odm); - #define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck23a void ODM_TXPowerTrackingCheck23a(struct dm_odm_t *pDM_Odm); @@ -962,10 +957,6 @@ bool ODM_RAStateCheck23a(struct dm_odm_t *pDM_Odm, s32 RSSI, bool bForceUpdate, u8 *pRATRState); -#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi -void ODM_SwAntDivChkPerPktRssi(struct dm_odm_t *pDM_Odm, u8 StationID, - struct phy_info *pPhyInfo); - u32 ConvertTo_dB23a(u32 Value); u32 GetPSDData(struct dm_odm_t *pDM_Odm, unsigned int point, u8 initial_gain_psd); -- cgit From d0b39f87427c806b984c57d52148200af9c57bf2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:06 +0200 Subject: staging: rtl8723au: Fold rtl8723a_set_nav_upper() into rtl8723au_hal_init() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/hal_com.c | 18 ------------------ drivers/staging/rtl8723au/hal/usb_halinit.c | 4 +++- drivers/staging/rtl8723au/include/hal_com.h | 1 - 3 files changed, 3 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/hal_com.c b/drivers/staging/rtl8723au/hal/hal_com.c index 4a66ed52d22f..8f299ec89bb9 100644 --- a/drivers/staging/rtl8723au/hal/hal_com.c +++ b/drivers/staging/rtl8723au/hal/hal_com.c @@ -818,24 +818,6 @@ void rtl8723a_set_rxdma_agg_pg_th(struct rtw_adapter *padapter, u8 val) rtl8723au_write8(padapter, REG_RXDMA_AGG_PG_TH, val); } -void rtl8723a_set_nav_upper(struct rtw_adapter *padapter, u32 usNavUpper) -{ - if (usNavUpper > HAL_8723A_NAV_UPPER_UNIT * 0xFF) { - RT_TRACE(_module_hal_init_c_, _drv_notice_, - ("The setting value (0x%08X us) of NAV_UPPER " - "is larger than (%d * 0xFF)!!!\n", - usNavUpper, HAL_8723A_NAV_UPPER_UNIT)); - return; - } - - /* The value of ((usNavUpper + HAL_8723A_NAV_UPPER_UNIT - 1) / - HAL_8723A_NAV_UPPER_UNIT) */ - /* is getting the upper integer. */ - usNavUpper = (usNavUpper + HAL_8723A_NAV_UPPER_UNIT - 1) / - HAL_8723A_NAV_UPPER_UNIT; - rtl8723au_write8(padapter, REG_NAV_UPPER, (u8) usNavUpper); -} - void rtl8723a_set_initial_gain(struct rtw_adapter *padapter, u32 rx_gain) { struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index b51762a10d78..d896d06c627d 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -780,7 +780,9 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) rtl8723a_InitHalDm(Adapter); - rtl8723a_set_nav_upper(Adapter, WiFiNavUpperUs); + val8 = ((WiFiNavUpperUs + HAL_8723A_NAV_UPPER_UNIT - 1) / + HAL_8723A_NAV_UPPER_UNIT); + rtl8723au_write8(Adapter, REG_NAV_UPPER, val8); /* 2011/03/09 MH debug only, UMC-B cut pass 2500 S5 test, but we need to fin root cause. */ if (((rtl8723au_read32(Adapter, rFPGA0_RFMOD) & 0xFF000000) != diff --git a/drivers/staging/rtl8723au/include/hal_com.h b/drivers/staging/rtl8723au/include/hal_com.h index 6c2ca4fedf68..7c31865e9865 100644 --- a/drivers/staging/rtl8723au/include/hal_com.h +++ b/drivers/staging/rtl8723au/include/hal_com.h @@ -197,7 +197,6 @@ void rtl8723a_set_ac_param_vi(struct rtw_adapter *padapter, u32 vi); void rtl8723a_set_ac_param_be(struct rtw_adapter *padapter, u32 be); void rtl8723a_set_ac_param_bk(struct rtw_adapter *padapter, u32 bk); void rtl8723a_set_rxdma_agg_pg_th(struct rtw_adapter *padapter, u8 val); -void rtl8723a_set_nav_upper(struct rtw_adapter *padapter, u32 usNavUpper); void rtl8723a_set_initial_gain(struct rtw_adapter *padapter, u32 rx_gain); void rtl8723a_odm_support_ability_write(struct rtw_adapter *padapter, u32 val); -- cgit From dc20d1da78a631b1c823b6cebbf8f659d0faac1d Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:07 +0200 Subject: staging: rtl8723au: Reduce wrapper layers around hal_{de, }init() calls Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 52 +++++++--------------------- drivers/staging/rtl8723au/include/hal_intf.h | 4 +-- drivers/staging/rtl8723au/os_dep/os_intfs.c | 6 ++-- drivers/staging/rtl8723au/os_dep/usb_intf.c | 2 +- 4 files changed, 19 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index d896d06c627d..681810ea657b 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -534,7 +534,7 @@ enum rt_rf_power_state RfOnOffDetect23a(struct rtw_adapter *pAdapter) void _ps_open_RF23a(struct rtw_adapter *padapter); -static int rtl8723au_hal_init(struct rtw_adapter *Adapter) +int rtl8723au_hal_init(struct rtw_adapter *Adapter) { u8 val8 = 0; u32 boundary; @@ -545,6 +545,8 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) unsigned long init_start_time = jiffies; + Adapter->hw_init_completed = false; + if (Adapter->pwrctrlpriv.bkeepfwalive) { _ps_open_RF23a(Adapter); @@ -796,6 +798,13 @@ static int rtl8723au_hal_init(struct rtw_adapter *Adapter) rtl8723au_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12)); exit: + if (status == _SUCCESS) { + Adapter->hw_init_completed = true; + + if (Adapter->registrypriv.notch_filter == 1) + rtl8723a_notch_filter(Adapter, 1); + } + DBG_8723A("%s in %dms\n", __func__, jiffies_to_msecs(jiffies - init_start_time)); return status; @@ -1105,7 +1114,7 @@ static void CardDisableRTL8723U(struct rtw_adapter *Adapter) rtl8723au_write8(Adapter, REG_RSV_CTRL, 0x0e); } -static int rtl8723au_hal_deinit(struct rtw_adapter *padapter) +int rtl8723au_hal_deinit(struct rtw_adapter *padapter) { DBG_8723A("==> %s\n", __func__); @@ -1118,6 +1127,8 @@ static int rtl8723au_hal_deinit(struct rtw_adapter *padapter) /* IC. Accord to johnny's opinion, only RU need the support. */ CardDisableRTL8723U(padapter); + padapter->hw_init_completed = false; + return _SUCCESS; } @@ -1543,40 +1554,3 @@ void rtl8723a_update_ramask(struct rtw_adapter *padapter, /* set correct initial date rate for each mac_id */ pdmpriv->INIDATA_RATE[mac_id] = init_rate; } - -int rtw_hal_init23a(struct rtw_adapter *padapter) -{ - int status; - - padapter->hw_init_completed = false; - - status = rtl8723au_hal_init(padapter); - - if (status == _SUCCESS) { - padapter->hw_init_completed = true; - - if (padapter->registrypriv.notch_filter == 1) - rtl8723a_notch_filter(padapter, 1); - } else { - padapter->hw_init_completed = false; - DBG_8723A("rtw_hal_init23a: hal__init fail\n"); - } - - RT_TRACE(_module_hal_init_c_, _drv_err_, - ("-rtl871x_hal_init:status = 0x%x\n", status)); - - return status; -} - -int rtw_hal_deinit23a(struct rtw_adapter *padapter) -{ - int status; - - status = rtl8723au_hal_deinit(padapter); - - if (status == _SUCCESS) - padapter->hw_init_completed = false; - else - DBG_8723A("\n rtw_hal_deinit23a: hal_init fail\n"); - return status; -} diff --git a/drivers/staging/rtl8723au/include/hal_intf.h b/drivers/staging/rtl8723au/include/hal_intf.h index 04223b5c047d..396decb44edc 100644 --- a/drivers/staging/rtl8723au/include/hal_intf.h +++ b/drivers/staging/rtl8723au/include/hal_intf.h @@ -103,8 +103,8 @@ void rtw_hal_def_value_init23a(struct rtw_adapter *padapter); int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal); int rtw_resume_process23a(struct rtw_adapter *padapter); -int rtw_hal_init23a(struct rtw_adapter *padapter); -int rtw_hal_deinit23a(struct rtw_adapter *padapter); +int rtl8723au_hal_init(struct rtw_adapter *padapter); +int rtl8723au_hal_deinit(struct rtw_adapter *padapter); void rtw_hal_stop(struct rtw_adapter *padapter); void rtw_hal_update_ra_mask23a(struct sta_info *psta, u8 rssi_level); diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c index a081e7ab97ae..b34eaec9dd48 100644 --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c @@ -666,7 +666,7 @@ int netdev_open23a(struct net_device *pnetdev) padapter->bSurpriseRemoved = false; padapter->bCardDisableWOHSM = false; - status = rtw_hal_init23a(padapter); + status = rtl8723au_hal_init(padapter); if (status == _FAIL) { RT_TRACE(_module_os_intfs_c_, _drv_err_, ("rtl871x_hal_init(): Can't init h/w!\n")); @@ -735,7 +735,7 @@ static int ips_netdrv_open(struct rtw_adapter *padapter) padapter->bSurpriseRemoved = false; padapter->bCardDisableWOHSM = false; - status = rtw_hal_init23a(padapter); + status = rtl8723au_hal_init(padapter); if (status == _FAIL) { RT_TRACE(_module_os_intfs_c_, _drv_err_, ("ips_netdrv_open(): Can't init h/w!\n")); @@ -800,7 +800,7 @@ void rtw_ips_dev_unload23a(struct rtw_adapter *padapter) /* s5. */ if (!padapter->bSurpriseRemoved) - rtw_hal_deinit23a(padapter); + rtl8723au_hal_deinit(padapter); } int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal) diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index ec9021601b3e..aeaedcdbb422 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -303,7 +303,7 @@ static void rtw_dev_unload(struct rtw_adapter *padapter) /* s5. */ if (!padapter->bSurpriseRemoved) { - rtw_hal_deinit23a(padapter); + rtl8723au_hal_deinit(padapter); padapter->bSurpriseRemoved = true; } padapter->bup = false; -- cgit From 30c588e04c2ba3d2cc1ff06c2d0bc7ef9d3d9cf0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:08 +0200 Subject: staging: rtl8723au: Fold rtw_resume_process23a() into rtw_resume() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/include/hal_intf.h | 1 - drivers/staging/rtl8723au/os_dep/usb_intf.c | 9 --------- 2 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/include/hal_intf.h b/drivers/staging/rtl8723au/include/hal_intf.h index 396decb44edc..404acb52352d 100644 --- a/drivers/staging/rtl8723au/include/hal_intf.h +++ b/drivers/staging/rtl8723au/include/hal_intf.h @@ -101,7 +101,6 @@ enum hardware_type { void rtw_hal_def_value_init23a(struct rtw_adapter *padapter); int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal); -int rtw_resume_process23a(struct rtw_adapter *padapter); int rtl8723au_hal_init(struct rtw_adapter *padapter); int rtl8723au_hal_deinit(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index aeaedcdbb422..c75427f510c8 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -488,15 +488,6 @@ static int rtw_resume(struct usb_interface *pusb_intf) { struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf); struct rtw_adapter *padapter = dvobj->if1; - int ret; - - ret = rtw_resume_process23a(padapter); - - return ret; -} - -int rtw_resume_process23a(struct rtw_adapter *padapter) -{ struct net_device *pnetdev; struct pwrctrl_priv *pwrpriv = NULL; int ret = -1; -- cgit From d71c77b1160ce5cc32ab959a86dbd25f42108f9a Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 21 Jul 2014 11:25:09 +0200 Subject: staging: rtl8723au: rtw_resume(): release semaphore before exit on error Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/usb_intf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index c75427f510c8..06c885f7856e 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -505,8 +505,10 @@ static int rtw_resume(struct usb_interface *pusb_intf) pwrpriv->bkeepfwalive = false; DBG_8723A("bkeepfwalive(%x)\n", pwrpriv->bkeepfwalive); - if (pm_netdev_open23a(pnetdev, true) != 0) + if (pm_netdev_open23a(pnetdev, true) != 0) { + up(&pwrpriv->lock); goto exit; + } netif_device_attach(pnetdev); netif_carrier_on(pnetdev); -- cgit From 6da4738f068cbf826104ef5e8971c255d6d6d437 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:03 +0100 Subject: staging: vt6656: struct vnt_private rename cbRD to num_rcb Number of rcb Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index ffcbaca8622a..6b8c97f7ceeb 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -289,7 +289,7 @@ struct vnt_private { /* Variables to track resources for the BULK In Pipe */ struct vnt_rcb *rcb[CB_MAX_RX_DESC]; - u32 cbRD; + u32 num_rcb; /* Variables to track resources for the BULK Out Pipe */ struct vnt_usb_send_context *tx_context[CB_MAX_TX_DESC]; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0802ecdf7480..a612b153fff0 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -114,9 +114,9 @@ static void device_set_options(struct vnt_private *priv) /* Set number of RX buffers */ if (vnt_rx_buffers < CB_MIN_RX_DESC || vnt_rx_buffers > CB_MAX_RX_DESC) - priv->cbRD = RX_DESC_DEF0; + priv->num_rcb = RX_DESC_DEF0; else - priv->cbRD = vnt_rx_buffers; + priv->num_rcb = vnt_rx_buffers; priv->byShortRetryLimit = SHORT_RETRY_DEF; priv->byLongRetryLimit = LONG_RETRY_DEF; @@ -407,7 +407,7 @@ static void device_free_rx_bufs(struct vnt_private *priv) struct vnt_rcb *rcb; int ii; - for (ii = 0; ii < priv->cbRD; ii++) { + for (ii = 0; ii < priv->num_rcb; ii++) { rcb = priv->rcb[ii]; if (!rcb) continue; @@ -475,7 +475,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) tx_context->in_use = false; } - for (ii = 0; ii < priv->cbRD; ii++) { + for (ii = 0; ii < priv->num_rcb; ii++) { priv->rcb[ii] = kzalloc(sizeof(struct vnt_rcb), GFP_KERNEL); if (!priv->rcb[ii]) { dev_err(&priv->usb->dev, -- cgit From 03b7e3548c2a327c287e0fcb1908e4f7b013ab13 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:04 +0100 Subject: staging: vt6656: struct vnt_private rename cdTD to num_tx_context number of tx_context Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/main_usb.c | 8 ++++---- drivers/staging/vt6656/rxtx.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 6b8c97f7ceeb..416a55d06355 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -293,7 +293,7 @@ struct vnt_private { /* Variables to track resources for the BULK Out Pipe */ struct vnt_usb_send_context *tx_context[CB_MAX_TX_DESC]; - u32 cbTD; + u32 num_tx_context; /* Variables to track resources for the Interrupt In Pipe */ struct vnt_interrupt_buffer int_buf; diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index e404d9e6a0e7..1ea24330b650 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -75,7 +75,7 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) u8 tx_retry = (tsr & 0xf0) >> 4; s8 idx; - if (pkt_no >= priv->cbTD) + if (pkt_no >= priv->num_tx_context) return -EINVAL; context = priv->tx_context[pkt_no]; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a612b153fff0..ba2467c95781 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -108,9 +108,9 @@ static void device_set_options(struct vnt_private *priv) { /* Set number of TX buffers */ if (vnt_tx_buffers < CB_MIN_TX_DESC || vnt_tx_buffers > CB_MAX_TX_DESC) - priv->cbTD = TX_DESC_DEF0; + priv->num_tx_context = TX_DESC_DEF0; else - priv->cbTD = vnt_tx_buffers; + priv->num_tx_context = vnt_tx_buffers; /* Set number of RX buffers */ if (vnt_rx_buffers < CB_MIN_RX_DESC || vnt_rx_buffers > CB_MAX_RX_DESC) @@ -388,7 +388,7 @@ static void device_free_tx_bufs(struct vnt_private *priv) struct vnt_usb_send_context *tx_context; int ii; - for (ii = 0; ii < priv->cbTD; ii++) { + for (ii = 0; ii < priv->num_tx_context; ii++) { tx_context = priv->tx_context[ii]; /* deallocate URBs */ if (tx_context->urb) { @@ -452,7 +452,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) struct vnt_rcb *rcb; int ii; - for (ii = 0; ii < priv->cbTD; ii++) { + for (ii = 0; ii < priv->num_tx_context; ii++) { tx_context = kmalloc(sizeof(struct vnt_usb_send_context), GFP_KERNEL); if (tx_context == NULL) { diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index f3bbfba1b138..c4b9ca2fcd42 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -81,7 +81,7 @@ static struct vnt_usb_send_context dev_dbg(&priv->usb->dev, "%s\n", __func__); - for (ii = 0; ii < priv->cbTD; ii++) { + for (ii = 0; ii < priv->num_tx_context; ii++) { if (!priv->tx_context[ii]) return NULL; @@ -97,7 +97,7 @@ static struct vnt_usb_send_context } } - if (ii == priv->cbTD) + if (ii == priv->num_tx_context) dev_dbg(&priv->usb->dev, "%s No Free Tx Context\n", __func__); return NULL; -- cgit From 8a73f9da4803721fd96d99d686430ee303486d49 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:05 +0100 Subject: staging: vt6656: struct vnt_private rename wFirmwareVersion to firmware_version Removing camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/firmware.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 416a55d06355..b9f48416d4d1 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -299,7 +299,7 @@ struct vnt_private { struct vnt_interrupt_buffer int_buf; /* Version control */ - u16 wFirmwareVersion; + u16 firmware_version; u8 byLocalID; u8 byRFType; u8 byBBRxConf; diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index f2250ee81ffa..eae4f32d9b66 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -118,24 +118,24 @@ int vnt_check_firmware_version(struct vnt_private *priv) 0, MESSAGE_REQUEST_VERSION, 2, - (u8 *) &(priv->wFirmwareVersion)); + (u8 *)&priv->firmware_version); dev_dbg(&priv->usb->dev, "Firmware Version [%04x]\n", - priv->wFirmwareVersion); + priv->firmware_version); if (status != STATUS_SUCCESS) { dev_dbg(&priv->usb->dev, "Firmware Invalid.\n"); return false; } - if (priv->wFirmwareVersion == 0xFFFF) { + if (priv->firmware_version == 0xFFFF) { dev_dbg(&priv->usb->dev, "In Loader.\n"); return false; } dev_dbg(&priv->usb->dev, "Firmware Version [%04x]\n", - priv->wFirmwareVersion); + priv->firmware_version); - if (priv->wFirmwareVersion < FIRMWARE_VERSION) { + if (priv->firmware_version < FIRMWARE_VERSION) { /* branch to loader for download new firmware */ vnt_firmware_branch_to_sram(priv); return false; -- cgit From f1945a15d6ace5420a55d14ba60a2bcdc3653b50 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:06 +0100 Subject: staging: vt6656: struct vnt_private rename byLocalID to local_id Removing camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/dpc.c | 2 +- drivers/staging/vt6656/key.c | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index b9f48416d4d1..c1d0551d103a 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -300,7 +300,7 @@ struct vnt_private { /* Version control */ u16 firmware_version; - u8 byLocalID; + u8 local_id; u8 byRFType; u8 byBBRxConf; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index f3da0db77c04..5d4c2c1e6716 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -175,7 +175,7 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, rx_status.rate_idx = rate_idx; if (ieee80211_has_protected(fc)) { - if (priv->byLocalID > REV_ID_VT3253_A1) { + if (priv->local_id > REV_ID_VT3253_A1) { rx_status.flag |= RX_FLAG_DECRYPTED; /* Drop packet */ diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index b76ee3106d5f..22f2961d2225 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -158,7 +158,7 @@ int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta, break; case WLAN_CIPHER_SUITE_CCMP: - if (priv->byLocalID <= MAC_REVISION_A1) + if (priv->local_id <= MAC_REVISION_A1) return -EINVAL; key_dec_mode = KEY_CTL_CCMP; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ba2467c95781..9974bab468c4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -189,7 +189,7 @@ static int device_init_registers(struct vnt_private *priv) /* local ID for AES functions */ status = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_LOCALID, MESSAGE_REQUEST_MACREG, 1, - &priv->byLocalID); + &priv->local_id); if (status != STATUS_SUCCESS) return false; -- cgit From 6242ecaeb6e3b6e3a864e9e6878817e3f5c0cb84 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:07 +0100 Subject: staging: vt6656: struct vnt_private replace byRFType with rf_type Remove camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 24 ++++++++++++------------ drivers/staging/vt6656/card.c | 12 ++++++------ drivers/staging/vt6656/channel.c | 2 +- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- drivers/staging/vt6656/rf.c | 10 +++++----- 6 files changed, 27 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 91c24a3bf1b7..b08d1ea8bd8e 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -396,14 +396,14 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->byZoneType = priv->abyEEPROM[EEP_OFS_ZONETYPE]; - priv->byRFType = priv->abyEEPROM[EEP_OFS_RFTYPE]; + priv->rf_type = priv->abyEEPROM[EEP_OFS_RFTYPE]; dev_dbg(&priv->usb->dev, "Zone Type %x\n", priv->byZoneType); - dev_dbg(&priv->usb->dev, "RF Type %d\n", priv->byRFType); + dev_dbg(&priv->usb->dev, "RF Type %d\n", priv->rf_type); - if ((priv->byRFType == RF_AL2230) || - (priv->byRFType == RF_AL2230S)) { + if ((priv->rf_type == RF_AL2230) || + (priv->rf_type == RF_AL2230S)) { priv->byBBRxConf = vnt_vt3184_al2230[10]; length = sizeof(vnt_vt3184_al2230); addr = vnt_vt3184_al2230; @@ -418,7 +418,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; - } else if (priv->byRFType == RF_AIROHA7230) { + } else if (priv->rf_type == RF_AIROHA7230) { priv->byBBRxConf = vnt_vt3184_al2230[10]; length = sizeof(vnt_vt3184_al2230); addr = vnt_vt3184_al2230; @@ -435,8 +435,8 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; - } else if ((priv->byRFType == RF_VT3226) || - (priv->byRFType == RF_VT3226D0)) { + } else if ((priv->rf_type == RF_VT3226) || + (priv->rf_type == RF_VT3226D0)) { priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; length = sizeof(vnt_vt3184_vt3226d0); addr = vnt_vt3184_vt3226d0; @@ -454,7 +454,7 @@ int vnt_vt3184_init(struct vnt_private *priv) /* Fix VT3226 DFC system timing issue */ vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); - } else if (priv->byRFType == RF_VT3342A0) { + } else if (priv->rf_type == RF_VT3342A0) { priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; length = sizeof(vnt_vt3184_vt3226d0); addr = vnt_vt3184_vt3226d0; @@ -486,12 +486,12 @@ int vnt_vt3184_init(struct vnt_private *priv) vnt_control_out(priv, MESSAGE_TYPE_WRITE, 0, MESSAGE_REQUEST_BBAGC, length_agc, array); - if ((priv->byRFType == RF_VT3226) || - (priv->byRFType == RF_VT3342A0)) { + if ((priv->rf_type == RF_VT3226) || + (priv->rf_type == RF_VT3342A0)) { vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_ITRTMSET, 0x23); vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01); - } else if (priv->byRFType == RF_VT3226D0) { + } else if (priv->rf_type == RF_VT3226D0) { vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_ITRTMSET, 0x11); vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01); @@ -586,7 +586,7 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) u8 cr_201 = 0x0, cr_206 = 0x0; u8 ed_inx = priv->byBBPreEDIndex; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: case RF_AL2230S: case RF_AIROHA7230: diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 19a7931105a8..3b49ee99c8ea 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -409,7 +409,7 @@ void vnt_update_ifs(struct vnt_private *priv) priv->uCwMax = C_CWMAX; priv->uEIFS = C_EIFS; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_VT3226D0: if (priv->byBBType != BB_TYPE_11B) { priv->uSIFS -= 1; @@ -734,7 +734,7 @@ int vnt_radio_power_off(struct vnt_private *priv) { int ret = true; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: case RF_AL2230S: case RF_AIROHA7230: @@ -775,7 +775,7 @@ int vnt_radio_power_on(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON); - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: case RF_AL2230S: case RF_AIROHA7230: @@ -794,7 +794,7 @@ int vnt_radio_power_on(struct vnt_private *priv) void vnt_set_bss_mode(struct vnt_private *priv) { - if (priv->byRFType == RF_AIROHA7230 && priv->byBBType == BB_TYPE_11A) + if (priv->rf_type == RF_AIROHA7230 && priv->byBBType == BB_TYPE_11A) vnt_mac_set_bb_type(priv, BB_TYPE_11G); else vnt_mac_set_bb_type(priv, priv->byBBType); @@ -812,7 +812,7 @@ void vnt_set_bss_mode(struct vnt_private *priv) vnt_set_rspinf(priv, (u8)priv->byBBType); if (priv->byBBType == BB_TYPE_11A) { - if (priv->byRFType == RF_AIROHA7230) { + if (priv->rf_type == RF_AIROHA7230) { priv->abyBBVGA[0] = 0x20; vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, @@ -822,7 +822,7 @@ void vnt_set_bss_mode(struct vnt_private *priv) priv->abyBBVGA[2] = 0x10; priv->abyBBVGA[3] = 0x10; } else { - if (priv->byRFType == RF_AIROHA7230) { + if (priv->rf_type == RF_AIROHA7230) { priv->abyBBVGA[0] = 0x1c; vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 4a53f1a734b3..8412d0532fb2 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -146,7 +146,7 @@ void vnt_init_bands(struct vnt_private *priv) struct ieee80211_channel *ch; int i; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AIROHA7230: case RF_VT3342A0: default: diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index c1d0551d103a..8b5793be9c0b 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -301,7 +301,7 @@ struct vnt_private { /* Version control */ u16 firmware_version; u8 local_id; - u8 byRFType; + u8 rf_type; u8 byBBRxConf; u8 byZoneType; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 9974bab468c4..c8b491400854 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -290,10 +290,10 @@ static int device_init_registers(struct vnt_private *priv) priv->byBBType = BB_TYPE_11G; /* get RFType */ - priv->byRFType = init_rsp->rf_type; + priv->rf_type = init_rsp->rf_type; /* load vt3266 calibration parameters in EEPROM */ - if (priv->byRFType == RF_VT3226D0) { + if (priv->rf_type == RF_VT3226D0) { if ((priv->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && (priv->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 28e64b43c000..c98cf60daa2f 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -665,7 +665,7 @@ static u8 vnt_rf_addpower(struct vnt_private *priv) if (!rssi) return 7; - if (priv->byRFType == RF_VT3226D0) { + if (priv->rf_type == RF_VT3226D0) { if (rssi < -70) return 9; else if (rssi < -65) @@ -699,7 +699,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) priv->byCurPwr = power; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: if (power >= AL2230_PWR_IDX_LEN) return false; @@ -811,7 +811,7 @@ void vnt_rf_rssi_to_dbm(struct vnt_private *priv, u8 rssi, long *dbm) long a = 0; u8 airoharf[4] = {0, 18, 0, 40}; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: case RF_AL2230S: case RF_AIROHA7230: @@ -834,7 +834,7 @@ void vnt_rf_table_download(struct vnt_private *priv) u16 length, value; u8 array[256]; - switch (priv->byRFType) { + switch (priv->rf_type) { case RF_AL2230: case RF_AL2230S: length1 = CB_AL2230_INIT_SEQ * 3; @@ -920,7 +920,7 @@ void vnt_rf_table_download(struct vnt_private *priv) addr3 += length; } - if (priv->byRFType == RF_AIROHA7230) { + if (priv->rf_type == RF_AIROHA7230) { length1 = CB_AL7230_INIT_SEQ * 3; length2 = CB_MAX_CHANNEL * 3; addr1 = &(al7230_init_table_amode[0][0]); -- cgit From cd5856aee597892073a95fbd7ae4d2709ace043c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:08 +0100 Subject: staging: vt6656: struct vnt_private rename byBBRxConf to bb_rx_conf Remove camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 28 ++++++++++++++-------------- drivers/staging/vt6656/device.h | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index b08d1ea8bd8e..71226c75835a 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -352,11 +352,11 @@ void vnt_set_antenna_mode(struct vnt_private *priv, u8 antenna_mode) case ANT_TXB: break; case ANT_RXA: - priv->byBBRxConf &= 0xFC; + priv->bb_rx_conf &= 0xFC; break; case ANT_RXB: - priv->byBBRxConf &= 0xFE; - priv->byBBRxConf |= 0x02; + priv->bb_rx_conf &= 0xFE; + priv->bb_rx_conf |= 0x02; break; } @@ -404,7 +404,7 @@ int vnt_vt3184_init(struct vnt_private *priv) if ((priv->rf_type == RF_AL2230) || (priv->rf_type == RF_AL2230S)) { - priv->byBBRxConf = vnt_vt3184_al2230[10]; + priv->bb_rx_conf = vnt_vt3184_al2230[10]; length = sizeof(vnt_vt3184_al2230); addr = vnt_vt3184_al2230; agc = vnt_vt3184_agc; @@ -419,7 +419,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->ldBmThreshold[2] = 0; priv->ldBmThreshold[3] = 0; } else if (priv->rf_type == RF_AIROHA7230) { - priv->byBBRxConf = vnt_vt3184_al2230[10]; + priv->bb_rx_conf = vnt_vt3184_al2230[10]; length = sizeof(vnt_vt3184_al2230); addr = vnt_vt3184_al2230; agc = vnt_vt3184_agc; @@ -437,7 +437,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->ldBmThreshold[3] = 0; } else if ((priv->rf_type == RF_VT3226) || (priv->rf_type == RF_VT3226D0)) { - priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; + priv->bb_rx_conf = vnt_vt3184_vt3226d0[10]; length = sizeof(vnt_vt3184_vt3226d0); addr = vnt_vt3184_vt3226d0; agc = vnt_vt3184_agc; @@ -455,7 +455,7 @@ int vnt_vt3184_init(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); } else if (priv->rf_type == RF_VT3342A0) { - priv->byBBRxConf = vnt_vt3184_vt3226d0[10]; + priv->bb_rx_conf = vnt_vt3184_vt3226d0[10]; length = sizeof(vnt_vt3184_vt3226d0); addr = vnt_vt3184_vt3226d0; agc = vnt_vt3184_agc; @@ -531,16 +531,16 @@ void vnt_set_short_slot_time(struct vnt_private *priv) u8 bb_vga = 0; if (priv->bShortSlotTime) - priv->byBBRxConf &= 0xdf; + priv->bb_rx_conf &= 0xdf; else - priv->byBBRxConf |= 0x20; + priv->bb_rx_conf |= 0x20; vnt_control_in_u8(priv, MESSAGE_REQUEST_BBREG, 0xe7, &bb_vga); if (bb_vga == priv->abyBBVGA[0]) - priv->byBBRxConf |= 0x20; + priv->bb_rx_conf |= 0x20; - vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->byBBRxConf); + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->bb_rx_conf); } void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) @@ -550,11 +550,11 @@ void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) /* patch for 3253B0 Baseband with Cardbus module */ if (priv->bShortSlotTime) - priv->byBBRxConf &= 0xdf; /* 1101 1111 */ + priv->bb_rx_conf &= 0xdf; /* 1101 1111 */ else - priv->byBBRxConf |= 0x20; /* 0010 0000 */ + priv->bb_rx_conf |= 0x20; /* 0010 0000 */ - vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->byBBRxConf); + vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->bb_rx_conf); } /* diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 8b5793be9c0b..3152f9324807 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -302,7 +302,7 @@ struct vnt_private { u16 firmware_version; u8 local_id; u8 rf_type; - u8 byBBRxConf; + u8 bb_rx_conf; u8 byZoneType; -- cgit From 09440e546433cce913d8253b78c84d631fe33a47 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:09 +0100 Subject: staging: vt6656: remove variable byZoneType Zone types are nolonger handled by driver. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ---- drivers/staging/vt6656/device.h | 2 -- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 71226c75835a..6af9fcbd90bd 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -394,12 +394,8 @@ int vnt_vt3184_init(struct vnt_private *priv) if (status != STATUS_SUCCESS) return false; - priv->byZoneType = priv->abyEEPROM[EEP_OFS_ZONETYPE]; - priv->rf_type = priv->abyEEPROM[EEP_OFS_RFTYPE]; - dev_dbg(&priv->usb->dev, "Zone Type %x\n", priv->byZoneType); - dev_dbg(&priv->usb->dev, "RF Type %d\n", priv->rf_type); if ((priv->rf_type == RF_AL2230) || diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 3152f9324807..183d9c9f6430 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -304,8 +304,6 @@ struct vnt_private { u8 rf_type; u8 bb_rx_conf; - u8 byZoneType; - struct vnt_cmd_card_init init_command; struct vnt_rsp_card_init init_response; u8 abyCurrentNetAddr[ETH_ALEN]; -- cgit From ebf9b312389a01763ae7388ff3e8f37e82261a92 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:10 +0100 Subject: staging: vt6656: remame abyCurrentNetAddr to current_net_addr Removing prefix and camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 6 +++--- drivers/staging/vt6656/rxtx.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 183d9c9f6430..928794861d39 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -306,7 +306,7 @@ struct vnt_private { struct vnt_cmd_card_init init_command; struct vnt_rsp_card_init init_response; - u8 abyCurrentNetAddr[ETH_ALEN]; + u8 current_net_addr[ETH_ALEN]; u8 abyPermanentNetAddr[ETH_ALEN]; int bExistSWNetAddr; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index c8b491400854..e8e4de5b18ac 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -165,7 +165,7 @@ static int device_init_registers(struct vnt_private *priv) init_cmd->init_class = DEVICE_INIT_COLD; init_cmd->exist_sw_net_addr = (u8) priv->bExistSWNetAddr; for (ii = 0; ii < 6; ii++) - init_cmd->sw_net_addr[ii] = priv->abyCurrentNetAddr[ii]; + init_cmd->sw_net_addr[ii] = priv->current_net_addr[ii]; init_cmd->short_retry_limit = priv->byShortRetryLimit; init_cmd->long_retry_limit = priv->byLongRetryLimit; @@ -335,12 +335,12 @@ static int device_init_registers(struct vnt_private *priv) /* get permanent network address */ memcpy(priv->abyPermanentNetAddr, init_rsp->net_addr, 6); - memcpy(priv->abyCurrentNetAddr, + memcpy(priv->current_net_addr, priv->abyPermanentNetAddr, ETH_ALEN); /* if exist SW network address, use it */ dev_dbg(&priv->usb->dev, "Network address = %pM\n", - priv->abyCurrentNetAddr); + priv->current_net_addr); /* * set BB and packet type at the same time diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index c4b9ca2fcd42..25a87b0b9c73 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -517,7 +517,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, buf->data.frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); - memcpy(buf->data.ra, priv->abyCurrentNetAddr, ETH_ALEN); + memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, @@ -536,7 +536,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, buf->data.frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); - memcpy(buf->data.ra, priv->abyCurrentNetAddr, ETH_ALEN); + memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); -- cgit From 41e8321a6d3b775a05e94fecd4ea5b4711e12729 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:11 +0100 Subject: staging: vt6656: rename abyPermanentNetAddr to permanent_net_addr Removing prefix and camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 928794861d39..0c18e26a38e6 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -307,7 +307,7 @@ struct vnt_private { struct vnt_cmd_card_init init_command; struct vnt_rsp_card_init init_response; u8 current_net_addr[ETH_ALEN]; - u8 abyPermanentNetAddr[ETH_ALEN]; + u8 permanent_net_addr[ETH_ALEN]; int bExistSWNetAddr; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e8e4de5b18ac..0bf207cac050 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -334,9 +334,8 @@ static int device_init_registers(struct vnt_private *priv) } /* get permanent network address */ - memcpy(priv->abyPermanentNetAddr, init_rsp->net_addr, 6); - memcpy(priv->current_net_addr, - priv->abyPermanentNetAddr, ETH_ALEN); + memcpy(priv->permanent_net_addr, init_rsp->net_addr, 6); + memcpy(priv->current_net_addr, priv->permanent_net_addr, ETH_ALEN); /* if exist SW network address, use it */ dev_dbg(&priv->usb->dev, "Network address = %pM\n", @@ -970,7 +969,7 @@ int vnt_init(struct vnt_private *priv) if (!(device_init_registers(priv))) return -EAGAIN; - SET_IEEE80211_PERM_ADDR(priv->hw, priv->abyPermanentNetAddr); + SET_IEEE80211_PERM_ADDR(priv->hw, priv->permanent_net_addr); vnt_init_bands(priv); -- cgit From 35cc8f94e6e4841c6dd2e8d8fd8d49ebddd56859 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:12 +0100 Subject: staging: vt6656: replace bExistSWNetAddr with exist_sw_net_addr Always needed as u8 type. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 0c18e26a38e6..9f1216df6dad 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -309,7 +309,7 @@ struct vnt_private { u8 current_net_addr[ETH_ALEN]; u8 permanent_net_addr[ETH_ALEN]; - int bExistSWNetAddr; + u8 exist_sw_net_addr; u64 qwCurrTSF; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 0bf207cac050..9aaa81631f80 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -125,7 +125,7 @@ static void device_set_options(struct vnt_private *priv) priv->byPacketType = priv->byBBType; priv->byAutoFBCtrl = AUTO_FB_0; priv->byPreambleType = 0; - priv->bExistSWNetAddr = false; + priv->exist_sw_net_addr = false; } /* @@ -163,7 +163,7 @@ static int device_init_registers(struct vnt_private *priv) } init_cmd->init_class = DEVICE_INIT_COLD; - init_cmd->exist_sw_net_addr = (u8) priv->bExistSWNetAddr; + init_cmd->exist_sw_net_addr = priv->exist_sw_net_addr; for (ii = 0; ii < 6; ii++) init_cmd->sw_net_addr[ii] = priv->current_net_addr[ii]; init_cmd->short_retry_limit = priv->byShortRetryLimit; -- cgit From 113f0b915b387debd0bf797f1d527da467984eba Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:13 +0100 Subject: staging: vt6656: struct vnt_private rename qwCurrTSF to current_tsf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ++-- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/int.c | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 3b49ee99c8ea..8820871821b4 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -583,7 +583,7 @@ void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate, bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf) { - *current_tsf = priv->qwCurrTSF; + *current_tsf = priv->current_tsf; return true; } @@ -604,7 +604,7 @@ bool vnt_clear_current_tsf(struct vnt_private *priv) vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); - priv->qwCurrTSF = 0; + priv->current_tsf = 0; return true; } diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 9f1216df6dad..7697a73bcc56 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -311,7 +311,7 @@ struct vnt_private { u8 exist_sw_net_addr; - u64 qwCurrTSF; + u64 current_tsf; /* 802.11 MAC specific */ u32 uCurrRSSI; diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 1ea24330b650..9c5fefc6ab72 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -162,7 +162,7 @@ void vnt_int_process_data(struct vnt_private *priv) } #endif } - priv->qwCurrTSF = le64_to_cpu(int_data->tsf); + priv->current_tsf = le64_to_cpu(int_data->tsf); low_stats->dot11RTSSuccessCount += int_data->rts_success; low_stats->dot11RTSFailureCount += int_data->rts_fail; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 9aaa81631f80..c0951bf33e4d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -924,7 +924,7 @@ static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) { struct vnt_private *priv = hw->priv; - return priv->qwCurrTSF; + return priv->current_tsf; } static void vnt_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif, -- cgit From 125cfc634403f7715e9fcd0780995d395ab266c5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:14 +0100 Subject: staging: vt6656: struct vnt_private rename uCurrRSSI to current_rssi Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/dpc.c | 2 +- drivers/staging/vt6656/rf.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 7697a73bcc56..7c8110586da2 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -314,7 +314,7 @@ struct vnt_private { u64 current_tsf; /* 802.11 MAC specific */ - u32 uCurrRSSI; + u32 current_rssi; /* Antenna Diversity */ int bTxRxAntInv; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 5d4c2c1e6716..f8410ce152d6 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -153,7 +153,7 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, vnt_rf_rssi_to_dbm(priv, *rssi, &rx_dbm); priv->byBBPreEDRSSI = (u8)rx_dbm + 1; - priv->uCurrRSSI = priv->byBBPreEDRSSI; + priv->current_rssi = priv->byBBPreEDRSSI; frame = skb_data + 8; diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index c98cf60daa2f..3815db92c0ce 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -660,7 +660,7 @@ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) static u8 vnt_rf_addpower(struct vnt_private *priv) { - s32 rssi = -priv->uCurrRSSI; + s32 rssi = -priv->current_rssi; if (!rssi) return 7; -- cgit From 9ad354609e17593ce493c247f0080d90ea55541c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:15 +0100 Subject: staging: vt6656: antenna modes remove unused variables dwTxAntennaSel is always the same as dwRxAntennaSel byAntennaCount is never used. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/main_usb.c | 4 ---- 2 files changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 7c8110586da2..ecf8da02cd94 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -319,8 +319,6 @@ struct vnt_private { /* Antenna Diversity */ int bTxRxAntInv; u32 dwRxAntennaSel; - u32 dwTxAntennaSel; - u8 byAntennaCount; u8 byRxAntennaMode; u8 byTxAntennaMode; u8 byRadioCtl; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index c0951bf33e4d..4ca6639fb2ab 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -249,9 +249,7 @@ static int device_init_registers(struct vnt_private *priv) antenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (antenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { - priv->byAntennaCount = 2; priv->byTxAntennaMode = ANT_B; - priv->dwTxAntennaSel = 1; priv->dwRxAntennaSel = 1; if (priv->bTxRxAntInv == true) @@ -259,8 +257,6 @@ static int device_init_registers(struct vnt_private *priv) else priv->byRxAntennaMode = ANT_B; } else { - priv->byAntennaCount = 1; - priv->dwTxAntennaSel = 0; priv->dwRxAntennaSel = 0; if (antenna & EEP_ANTENNA_AUX) { -- cgit From 2044dbdb0b337ab7ddc36c45fc792b76913b57e8 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:16 +0100 Subject: staging: vt6656: struct vnt_private remove camel case antenna variables Camel case changes bTxRxAntInv -> tx_rx_ant_inv dwRxAntennaSel -> rx_antenna_sel byRxAntennaMode -> rx_antenna_mode byTxAntennaMode -> tx_antenna_mode byRadioCtl -> radio_ctl Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 10 +++++----- drivers/staging/vt6656/main_usb.c | 38 +++++++++++++++++++------------------- drivers/staging/vt6656/wcmd.c | 12 ++++++------ 3 files changed, 30 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index ecf8da02cd94..c4e83b51a66f 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -317,11 +317,11 @@ struct vnt_private { u32 current_rssi; /* Antenna Diversity */ - int bTxRxAntInv; - u32 dwRxAntennaSel; - u8 byRxAntennaMode; - u8 byTxAntennaMode; - u8 byRadioCtl; + int tx_rx_ant_inv; + u32 rx_antenna_sel; + u8 rx_antenna_mode; + u8 tx_antenna_mode; + u8 radio_ctl; /* IFS & Cw */ u32 uSIFS; /* Current SIFS */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4ca6639fb2ab..1137a190ec0e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -239,9 +239,9 @@ static int device_init_registers(struct vnt_private *priv) antenna = priv->abyEEPROM[EEP_OFS_ANTENNA]; if (antenna & EEP_ANTINV) - priv->bTxRxAntInv = true; + priv->tx_rx_ant_inv = true; else - priv->bTxRxAntInv = false; + priv->tx_rx_ant_inv = false; antenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); @@ -249,35 +249,35 @@ static int device_init_registers(struct vnt_private *priv) antenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (antenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { - priv->byTxAntennaMode = ANT_B; - priv->dwRxAntennaSel = 1; + priv->tx_antenna_mode = ANT_B; + priv->rx_antenna_sel = 1; - if (priv->bTxRxAntInv == true) - priv->byRxAntennaMode = ANT_A; + if (priv->tx_rx_ant_inv == true) + priv->rx_antenna_mode = ANT_A; else - priv->byRxAntennaMode = ANT_B; + priv->rx_antenna_mode = ANT_B; } else { - priv->dwRxAntennaSel = 0; + priv->rx_antenna_sel = 0; if (antenna & EEP_ANTENNA_AUX) { - priv->byTxAntennaMode = ANT_A; + priv->tx_antenna_mode = ANT_A; - if (priv->bTxRxAntInv == true) - priv->byRxAntennaMode = ANT_B; + if (priv->tx_rx_ant_inv == true) + priv->rx_antenna_mode = ANT_B; else - priv->byRxAntennaMode = ANT_A; + priv->rx_antenna_mode = ANT_A; } else { - priv->byTxAntennaMode = ANT_B; + priv->tx_antenna_mode = ANT_B; - if (priv->bTxRxAntInv == true) - priv->byRxAntennaMode = ANT_A; + if (priv->tx_rx_ant_inv == true) + priv->rx_antenna_mode = ANT_A; else - priv->byRxAntennaMode = ANT_B; + priv->rx_antenna_mode = ANT_B; } } /* Set initial antenna mode */ - vnt_set_antenna_mode(priv, priv->byRxAntennaMode); + vnt_set_antenna_mode(priv, priv->rx_antenna_mode); /* get Auto Fall Back type */ priv->byAutoFBCtrl = AUTO_FB_0; @@ -348,9 +348,9 @@ static int device_init_registers(struct vnt_private *priv) vnt_set_short_slot_time(priv); - priv->byRadioCtl = priv->abyEEPROM[EEP_OFS_RADIOCTL]; + priv->radio_ctl = priv->abyEEPROM[EEP_OFS_RADIOCTL]; - if ((priv->byRadioCtl & EEP_RADIOCTL_ENABLE) != 0) { + if ((priv->radio_ctl & EEP_RADIOCTL_ENABLE) != 0) { status = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_GPIOCTL1, MESSAGE_REQUEST_MACREG, 1, &tmp); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index c56b7b3c90de..304f6d67ccae 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -146,17 +146,17 @@ void vnt_run_command(struct work_struct *work) case WLAN_CMD_CHANGE_ANTENNA_START: dev_dbg(&priv->usb->dev, "Change from Antenna%d to", - priv->dwRxAntennaSel); + priv->rx_antenna_sel); - if (priv->dwRxAntennaSel == 0) { - priv->dwRxAntennaSel = 1; - if (priv->bTxRxAntInv == true) + if (priv->rx_antenna_sel == 0) { + priv->rx_antenna_sel = 1; + if (priv->tx_rx_ant_inv == true) vnt_set_antenna_mode(priv, ANT_RXA); else vnt_set_antenna_mode(priv, ANT_RXB); } else { - priv->dwRxAntennaSel = 0; - if (priv->bTxRxAntInv == true) + priv->rx_antenna_sel = 0; + if (priv->tx_rx_ant_inv == true) vnt_set_antenna_mode(priv, ANT_RXB); else vnt_set_antenna_mode(priv, ANT_RXA); -- cgit From 995c91e0c25437329d3ed34148eb709cac1ac5b9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:17 +0100 Subject: staging: vt6656: struct vnt_private remove uCwMin/uCwMax Although set these variables are not used. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 10 ++-------- drivers/staging/vt6656/device.h | 2 -- 2 files changed, 2 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 8820871821b4..f3fd7d6bc9e9 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -369,13 +369,11 @@ void vnt_update_ifs(struct vnt_private *priv) priv->uSlot = C_SLOT_SHORT; priv->uSIFS = C_SIFS_A; priv->uDIFS = C_SIFS_A + 2 * C_SLOT_SHORT; - priv->uCwMin = C_CWMIN_A; max_min = 4; } else if (priv->byPacketType == PK_TYPE_11B) { priv->uSlot = C_SLOT_LONG; priv->uSIFS = C_SIFS_BG; priv->uDIFS = C_SIFS_BG + 2 * C_SLOT_LONG; - priv->uCwMin = C_CWMIN_B; max_min = 5; } else {/* PK_TYPE_11GA & PK_TYPE_11GB */ bool ofdm_rate = false; @@ -397,16 +395,12 @@ void vnt_update_ifs(struct vnt_private *priv) } } - if (ofdm_rate == true) { - priv->uCwMin = C_CWMIN_A; + if (ofdm_rate == true) max_min = 4; - } else { - priv->uCwMin = C_CWMIN_B; + else max_min = 5; - } } - priv->uCwMax = C_CWMAX; priv->uEIFS = C_EIFS; switch (priv->rf_type) { diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index c4e83b51a66f..f67173b2d2b3 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -328,8 +328,6 @@ struct vnt_private { u32 uDIFS; /* Current DIFS */ u32 uEIFS; /* Current EIFS */ u32 uSlot; /* Current SlotTime */ - u32 uCwMin; /* Current CwMin */ - u32 uCwMax; /* CwMax is fixed on 1023 */ /* Rate */ u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ -- cgit From ff5fee22294da7d60ebb8c7b0b3f24aeb1307a7b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 19 Jul 2014 12:30:18 +0100 Subject: staging: vt6656: struct vnt_private remove camel case IFS names Camel case changes uSIFS -> sifs uDIFS -> difs uEIFS -> eifs uSlot -> slot Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 46 ++++++++++++++++++++--------------------- drivers/staging/vt6656/device.h | 8 +++---- drivers/staging/vt6656/rxtx.c | 14 ++++++------- 3 files changed, 34 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index f3fd7d6bc9e9..5ce26fabdb7a 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -366,27 +366,27 @@ void vnt_update_ifs(struct vnt_private *priv) u8 data[4]; if (priv->byPacketType == PK_TYPE_11A) { - priv->uSlot = C_SLOT_SHORT; - priv->uSIFS = C_SIFS_A; - priv->uDIFS = C_SIFS_A + 2 * C_SLOT_SHORT; + priv->slot = C_SLOT_SHORT; + priv->sifs = C_SIFS_A; + priv->difs = C_SIFS_A + 2 * C_SLOT_SHORT; max_min = 4; } else if (priv->byPacketType == PK_TYPE_11B) { - priv->uSlot = C_SLOT_LONG; - priv->uSIFS = C_SIFS_BG; - priv->uDIFS = C_SIFS_BG + 2 * C_SLOT_LONG; + priv->slot = C_SLOT_LONG; + priv->sifs = C_SIFS_BG; + priv->difs = C_SIFS_BG + 2 * C_SLOT_LONG; max_min = 5; } else {/* PK_TYPE_11GA & PK_TYPE_11GB */ bool ofdm_rate = false; unsigned int ii = 0; - priv->uSIFS = C_SIFS_BG; + priv->sifs = C_SIFS_BG; if (priv->bShortSlotTime) - priv->uSlot = C_SLOT_SHORT; + priv->slot = C_SLOT_SHORT; else - priv->uSlot = C_SLOT_LONG; + priv->slot = C_SLOT_LONG; - priv->uDIFS = C_SIFS_BG + 2 * priv->uSlot; + priv->difs = C_SIFS_BG + 2 * priv->slot; for (ii = RATE_54M; ii >= RATE_6M; ii--) { if (priv->wBasicRate & ((u32)(0x1 << ii))) { @@ -401,13 +401,13 @@ void vnt_update_ifs(struct vnt_private *priv) max_min = 5; } - priv->uEIFS = C_EIFS; + priv->eifs = C_EIFS; switch (priv->rf_type) { case RF_VT3226D0: if (priv->byBBType != BB_TYPE_11B) { - priv->uSIFS -= 1; - priv->uDIFS -= 1; + priv->sifs -= 1; + priv->difs -= 1; break; } case RF_AIROHA7230: @@ -418,25 +418,25 @@ void vnt_update_ifs(struct vnt_private *priv) case RF_RFMD2959: case RF_VT3226: case RF_VT3342A0: - priv->uSIFS -= 3; - priv->uDIFS -= 3; + priv->sifs -= 3; + priv->difs -= 3; break; case RF_MAXIM2829: if (priv->byBBType == BB_TYPE_11A) { - priv->uSIFS -= 5; - priv->uDIFS -= 5; + priv->sifs -= 5; + priv->difs -= 5; } else { - priv->uSIFS -= 2; - priv->uDIFS -= 2; + priv->sifs -= 2; + priv->difs -= 2; } break; } - data[0] = (u8)priv->uSIFS; - data[1] = (u8)priv->uDIFS; - data[2] = (u8)priv->uEIFS; - data[3] = (u8)priv->uSlot; + data[0] = (u8)priv->sifs; + data[1] = (u8)priv->difs; + data[2] = (u8)priv->eifs; + data[3] = (u8)priv->slot; vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_SIFS, MESSAGE_REQUEST_MACREG, 4, &data[0]); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index f67173b2d2b3..b9753c12a683 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -324,10 +324,10 @@ struct vnt_private { u8 radio_ctl; /* IFS & Cw */ - u32 uSIFS; /* Current SIFS */ - u32 uDIFS; /* Current DIFS */ - u32 uEIFS; /* Current EIFS */ - u32 uSlot; /* Current SlotTime */ + u32 sifs; /* Current SIFS */ + u32 difs; /* Current DIFS */ + u32 eifs; /* Current EIFS */ + u32 slot; /* Current SlotTime */ /* Rate */ u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 25a87b0b9c73..aa382e7c1b99 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -125,7 +125,7 @@ static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, 14, (u16)priv->byTopOFDMBasicRate); if (need_ack) - return data_time + priv->uSIFS + ack_time; + return data_time + priv->sifs + ack_time; return data_time; } @@ -170,12 +170,12 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); - rrv_time = cts_time + ack_time + data_time + 2 * priv->uSIFS; + rrv_time = cts_time + ack_time + data_time + 2 * priv->sifs; return cpu_to_le16((u16)rrv_time); } - rrv_time = rts_time + cts_time + ack_time + data_time + 3 * priv->uSIFS; + rrv_time = rts_time + cts_time + ack_time + data_time + 3 * priv->sifs; return cpu_to_le16((u16)rrv_time); } @@ -193,7 +193,7 @@ static __le16 vnt_get_duration_le(struct vnt_private *piv, ack_time = vnt_get_frame_time(piv->byPreambleType, pkt_type, 14, piv->byTopOFDMBasicRate); - return cpu_to_le16((u16)(piv->uSIFS + ack_time)); + return cpu_to_le16((u16)(piv->sifs + ack_time)); } return 0; @@ -211,7 +211,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_BA_F1: cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); - dur_time = cts_time + 2 * priv->uSIFS + + dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; @@ -221,7 +221,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_AA_F1: cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopOFDMBasicRate); - dur_time = cts_time + 2 * priv->uSIFS + + dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; @@ -229,7 +229,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case CTSDUR_BA: case CTSDUR_BA_F0: case CTSDUR_BA_F1: - dur_time = priv->uSIFS + vnt_get_rsvtime(priv, + dur_time = priv->sifs + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); break; -- cgit From 65df77e2ca31a77db13cc37d3c3d34886aeaa607 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:11 +0100 Subject: staging: vt6656: struct vnt_private replace byBBType with bb_type Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 24 ++++++++++++------------ drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/dpc.c | 2 +- drivers/staging/vt6656/main_usb.c | 14 +++++++------- drivers/staging/vt6656/rxtx.c | 2 +- 5 files changed, 22 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 5ce26fabdb7a..94b933f6332b 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -405,7 +405,7 @@ void vnt_update_ifs(struct vnt_private *priv) switch (priv->rf_type) { case RF_VT3226D0: - if (priv->byBBType != BB_TYPE_11B) { + if (priv->bb_type != BB_TYPE_11B) { priv->sifs -= 1; priv->difs -= 1; break; @@ -413,7 +413,7 @@ void vnt_update_ifs(struct vnt_private *priv) case RF_AIROHA7230: case RF_AL2230: case RF_AL2230S: - if (priv->byBBType != BB_TYPE_11B) + if (priv->bb_type != BB_TYPE_11B) break; case RF_RFMD2959: case RF_VT3226: @@ -422,7 +422,7 @@ void vnt_update_ifs(struct vnt_private *priv) priv->difs -= 3; break; case RF_MAXIM2829: - if (priv->byBBType == BB_TYPE_11A) { + if (priv->bb_type == BB_TYPE_11A) { priv->sifs -= 5; priv->difs -= 5; } else { @@ -489,8 +489,8 @@ int vnt_ofdm_min_rate(struct vnt_private *priv) u8 vnt_get_pkt_type(struct vnt_private *priv) { - if (priv->byBBType == BB_TYPE_11A || priv->byBBType == BB_TYPE_11B) - return (u8)priv->byBBType; + if (priv->bb_type == BB_TYPE_11A || priv->bb_type == BB_TYPE_11B) + return (u8)priv->bb_type; else if (vnt_ofdm_min_rate(priv)) return PK_TYPE_11GA; else @@ -788,24 +788,24 @@ int vnt_radio_power_on(struct vnt_private *priv) void vnt_set_bss_mode(struct vnt_private *priv) { - if (priv->rf_type == RF_AIROHA7230 && priv->byBBType == BB_TYPE_11A) + if (priv->rf_type == RF_AIROHA7230 && priv->bb_type == BB_TYPE_11A) vnt_mac_set_bb_type(priv, BB_TYPE_11G); else - vnt_mac_set_bb_type(priv, priv->byBBType); + vnt_mac_set_bb_type(priv, priv->bb_type); priv->byPacketType = vnt_get_pkt_type(priv); - if (priv->byBBType == BB_TYPE_11A) + if (priv->bb_type == BB_TYPE_11A) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x03); - else if (priv->byBBType == BB_TYPE_11B) + else if (priv->bb_type == BB_TYPE_11B) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x02); - else if (priv->byBBType == BB_TYPE_11G) + else if (priv->bb_type == BB_TYPE_11G) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x08); vnt_update_ifs(priv); - vnt_set_rspinf(priv, (u8)priv->byBBType); + vnt_set_rspinf(priv, (u8)priv->bb_type); - if (priv->byBBType == BB_TYPE_11A) { + if (priv->bb_type == BB_TYPE_11A) { if (priv->rf_type == RF_AIROHA7230) { priv->abyBBVGA[0] = 0x20; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index b9753c12a683..7b5779a7bb22 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -330,7 +330,7 @@ struct vnt_private { u32 slot; /* Current SlotTime */ /* Rate */ - u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ + u8 bb_type; /* 0: 11A, 1:11B, 2:11G */ u8 byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ u32 wBasicRate; u8 byTopOFDMBasicRate; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index f8410ce152d6..3bf27820789d 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -133,7 +133,7 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, priv->tsf_time = le64_to_cpu(*tsf_time); - if (priv->byBBType == BB_TYPE_11G) { + if (priv->bb_type == BB_TYPE_11G) { sq_3 = skb_data + 8 + pay_load_with_padding + 12; sq = sq_3; } else { diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 1137a190ec0e..5ca28c2138a5 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -121,8 +121,8 @@ static void device_set_options(struct vnt_private *priv) priv->byShortRetryLimit = SHORT_RETRY_DEF; priv->byLongRetryLimit = LONG_RETRY_DEF; priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; - priv->byBBType = BBP_TYPE_DEF; - priv->byPacketType = priv->byBBType; + priv->bb_type = BBP_TYPE_DEF; + priv->byPacketType = priv->bb_type; priv->byAutoFBCtrl = AUTO_FB_0; priv->byPreambleType = 0; priv->exist_sw_net_addr = false; @@ -283,7 +283,7 @@ static int device_init_registers(struct vnt_private *priv) priv->byAutoFBCtrl = AUTO_FB_0; /* default Auto Mode */ - priv->byBBType = BB_TYPE_11G; + priv->bb_type = BB_TYPE_11G; /* get RFType */ priv->rf_type = init_rsp->rf_type; @@ -341,7 +341,7 @@ static int device_init_registers(struct vnt_private *priv) * set BB and packet type at the same time * set Short Slot Time, xIFS, and RSPINF */ - if (priv->byBBType == BB_TYPE_11A) + if (priv->bb_type == BB_TYPE_11A) priv->bShortSlotTime = true; else priv->bShortSlotTime = false; @@ -709,15 +709,15 @@ static int vnt_config(struct ieee80211_hw *hw, u32 changed) else bb_type = BB_TYPE_11G; - if (priv->byBBType != bb_type) { - priv->byBBType = bb_type; + if (priv->bb_type != bb_type) { + priv->bb_type = bb_type; vnt_set_bss_mode(priv); } } if (changed & IEEE80211_CONF_CHANGE_POWER) { - if (priv->byBBType == BB_TYPE_11B) + if (priv->bb_type == BB_TYPE_11B) priv->wCurrentRate = RATE_1M; else priv->wCurrentRate = RATE_54M; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index aa382e7c1b99..3347a72bf0e7 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -966,7 +966,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, beacon_buffer = (struct vnt_beacon_buffer *)&context->data[0]; short_head = &beacon_buffer->short_head; - if (priv->byBBType == BB_TYPE_11A) { + if (priv->bb_type == BB_TYPE_11A) { current_rate = RATE_6M; /* Get SignalField,ServiceField,Length */ -- cgit From e12471db917981a3f7dd115203697201d3a2adcf Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:12 +0100 Subject: staging: vt6656: struct vnt_private replace byPacketType with packet_type Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 +++--- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- drivers/staging/vt6656/rxtx.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 94b933f6332b..80b2ff88737b 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -365,12 +365,12 @@ void vnt_update_ifs(struct vnt_private *priv) u8 max_min = 0; u8 data[4]; - if (priv->byPacketType == PK_TYPE_11A) { + if (priv->packet_type == PK_TYPE_11A) { priv->slot = C_SLOT_SHORT; priv->sifs = C_SIFS_A; priv->difs = C_SIFS_A + 2 * C_SLOT_SHORT; max_min = 4; - } else if (priv->byPacketType == PK_TYPE_11B) { + } else if (priv->packet_type == PK_TYPE_11B) { priv->slot = C_SLOT_LONG; priv->sifs = C_SIFS_BG; priv->difs = C_SIFS_BG + 2 * C_SLOT_LONG; @@ -793,7 +793,7 @@ void vnt_set_bss_mode(struct vnt_private *priv) else vnt_mac_set_bb_type(priv, priv->bb_type); - priv->byPacketType = vnt_get_pkt_type(priv); + priv->packet_type = vnt_get_pkt_type(priv); if (priv->bb_type == BB_TYPE_11A) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x88, 0x03); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 7b5779a7bb22..1f9ea51a1947 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -331,7 +331,7 @@ struct vnt_private { /* Rate */ u8 bb_type; /* 0: 11A, 1:11B, 2:11G */ - u8 byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ + u8 packet_type; /* 0:11a 1:11b 2:11gb 3:11ga */ u32 wBasicRate; u8 byTopOFDMBasicRate; u8 byTopCCKBasicRate; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 5ca28c2138a5..85142b717d15 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -122,7 +122,7 @@ static void device_set_options(struct vnt_private *priv) priv->byLongRetryLimit = LONG_RETRY_DEF; priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; priv->bb_type = BBP_TYPE_DEF; - priv->byPacketType = priv->bb_type; + priv->packet_type = priv->bb_type; priv->byAutoFBCtrl = AUTO_FB_0; priv->byPreambleType = 0; priv->exist_sw_net_addr = false; @@ -142,7 +142,7 @@ static int device_init_registers(struct vnt_private *priv) u8 calib_tx_iq = 0, calib_tx_dc = 0, calib_rx_iq = 0; dev_dbg(&priv->usb->dev, "---->INIbInitAdapter. [%d][%d]\n", - DEVICE_INIT_COLD, priv->byPacketType); + DEVICE_INIT_COLD, priv->packet_type); if (!vnt_check_firmware_version(priv)) { if (vnt_download_firmware(priv) == true) { diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 3347a72bf0e7..03f299daaf72 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -771,7 +771,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) } if (current_rate > RATE_11M) - pkt_type = priv->byPacketType; + pkt_type = priv->packet_type; else pkt_type = PK_TYPE_11B; -- cgit From 93a7355883f87ee16481ae79d7b471752ffb0347 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:13 +0100 Subject: staging: vt6656: struct vnt_private replace wBasicRate with basic_rates The same name as in struct ieee80211_bss_conf Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 14 +++++++------- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 80b2ff88737b..80b67320f626 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -109,7 +109,7 @@ static u16 vnt_get_cck_rate(struct vnt_private *priv, u16 rate_idx) u16 ui = rate_idx; while (ui > RATE_1M) { - if (priv->wBasicRate & (1 << ui)) + if (priv->basic_rates & (1 << ui)) return ui; ui--; } @@ -135,7 +135,7 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx) u16 ui = rate_idx; dev_dbg(&priv->usb->dev, "%s basic rate: %d\n", - __func__, priv->wBasicRate); + __func__, priv->basic_rates); if (!vnt_ofdm_min_rate(priv)) { dev_dbg(&priv->usb->dev, "%s (NO OFDM) %d\n", @@ -146,7 +146,7 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx) } while (ui > RATE_11M) { - if (priv->wBasicRate & (1 << ui)) { + if (priv->basic_rates & (1 << ui)) { dev_dbg(&priv->usb->dev, "%s rate: %d\n", __func__, ui); return ui; @@ -389,7 +389,7 @@ void vnt_update_ifs(struct vnt_private *priv) priv->difs = C_SIFS_BG + 2 * priv->slot; for (ii = RATE_54M; ii >= RATE_6M; ii--) { - if (priv->wBasicRate & ((u32)(0x1 << ii))) { + if (priv->basic_rates & ((u32)(0x1 << ii))) { ofdm_rate = true; break; } @@ -454,7 +454,7 @@ void vnt_update_top_rates(struct vnt_private *priv) /*Determines the highest basic rate.*/ for (i = RATE_54M; i >= RATE_6M; i--) { - if (priv->wBasicRate & (u16)(1 << i)) { + if (priv->basic_rates & (u16)(1 << i)) { top_ofdm = i; break; } @@ -463,7 +463,7 @@ void vnt_update_top_rates(struct vnt_private *priv) priv->byTopOFDMBasicRate = top_ofdm; for (i = RATE_11M;; i--) { - if (priv->wBasicRate & (u16)(1 << i)) { + if (priv->basic_rates & (u16)(1 << i)) { top_cck = i; break; } @@ -479,7 +479,7 @@ int vnt_ofdm_min_rate(struct vnt_private *priv) int ii; for (ii = RATE_54M; ii >= RATE_6M; ii--) { - if ((priv->wBasicRate) & ((u16)(1 << ii))) + if ((priv->basic_rates) & ((u16)(1 << ii))) return true; } diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 1f9ea51a1947..8cc33df0e225 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -332,7 +332,7 @@ struct vnt_private { /* Rate */ u8 bb_type; /* 0: 11A, 1:11B, 2:11G */ u8 packet_type; /* 0:11a 1:11b 2:11gb 3:11ga */ - u32 wBasicRate; + u32 basic_rates; u8 byTopOFDMBasicRate; u8 byTopCCKBasicRate; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 85142b717d15..02898ff75100 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -742,7 +742,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, if (changed & BSS_CHANGED_BASIC_RATES) { - priv->wBasicRate = conf->basic_rates; + priv->basic_rates = conf->basic_rates; vnt_update_top_rates(priv); -- cgit From 3c8a5b25980907d4e096f23a95252bf4018816ba Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:14 +0100 Subject: staging: vt6656: struct vnt_private replace byTopOFDMBasicRate with top_ofdm_basic_rate Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/rxtx.c | 22 +++++++++++----------- 4 files changed, 14 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 80b67320f626..3217f7700d0e 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -460,7 +460,7 @@ void vnt_update_top_rates(struct vnt_private *priv) } } - priv->byTopOFDMBasicRate = top_ofdm; + priv->top_ofdm_basic_rate = top_ofdm; for (i = RATE_11M;; i--) { if (priv->basic_rates & (u16)(1 << i)) { diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 8cc33df0e225..951abc2b1972 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -333,7 +333,7 @@ struct vnt_private { u8 bb_type; /* 0: 11A, 1:11B, 2:11G */ u8 packet_type; /* 0:11a 1:11b 2:11gb 3:11ga */ u32 basic_rates; - u8 byTopOFDMBasicRate; + u8 top_ofdm_basic_rate; u8 byTopCCKBasicRate; u8 abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 02898ff75100..a02a028cdc67 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -195,7 +195,7 @@ static int device_init_registers(struct vnt_private *priv) /* do MACbSoftwareReset in MACvInitialize */ - priv->byTopOFDMBasicRate = RATE_24M; + priv->top_ofdm_basic_rate = RATE_24M; priv->byTopCCKBasicRate = RATE_1M; /* target to IF pin while programming to RF chip */ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 03f299daaf72..ba2d55050501 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -122,7 +122,7 @@ static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, 14, (u16)priv->byTopCCKBasicRate); else ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, (u16)priv->byTopOFDMBasicRate); + 14, (u16)priv->top_ofdm_basic_rate); if (need_ack) return data_time + priv->sifs + ack_time; @@ -158,17 +158,17 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, priv->byTopOFDMBasicRate); + 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 2) { rts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 20, priv->byTopOFDMBasicRate); + 20, priv->top_ofdm_basic_rate); cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 14, priv->byTopOFDMBasicRate); + pkt_type, 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 3) { cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->byTopCCKBasicRate); ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, priv->byTopOFDMBasicRate); + 14, priv->top_ofdm_basic_rate); rrv_time = cts_time + ack_time + data_time + 2 * priv->sifs; @@ -191,7 +191,7 @@ static __le16 vnt_get_duration_le(struct vnt_private *piv, pkt_type, 14, piv->byTopCCKBasicRate); else ack_time = vnt_get_frame_time(piv->byPreambleType, - pkt_type, 14, piv->byTopOFDMBasicRate); + pkt_type, 14, piv->top_ofdm_basic_rate); return cpu_to_le16((u16)(piv->sifs + ack_time)); } @@ -220,7 +220,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_AA_F0: case RTSDUR_AA_F1: cts_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 14, priv->byTopOFDMBasicRate); + pkt_type, 14, priv->top_ofdm_basic_rate); dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); @@ -390,7 +390,7 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, - priv->byTopOFDMBasicRate, pkt_type, &buf->a); + priv->top_ofdm_basic_rate, pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); @@ -415,7 +415,7 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, - priv->byTopOFDMBasicRate, pkt_type, &buf->a); + priv->top_ofdm_basic_rate, pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, @@ -449,7 +449,7 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, u16 rts_frame_len = 20; vnt_get_phy_field(priv, rts_frame_len, - priv->byTopOFDMBasicRate, pkt_type, &buf->ab); + priv->top_ofdm_basic_rate, pkt_type, &buf->ab); buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); @@ -468,7 +468,7 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, u16 rts_frame_len = 20; vnt_get_phy_field(priv, rts_frame_len, - priv->byTopOFDMBasicRate, pkt_type, &buf->a); + priv->top_ofdm_basic_rate, pkt_type, &buf->a); buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); -- cgit From d80bf43c82e75794f640e46b82bc417a7b78829b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:15 +0100 Subject: staging: vt6656: struct vnt_private replace byTopCCKBasicRate with top_cck_basic_rate Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/rxtx.c | 40 +++++++++++++++++++-------------------- 4 files changed, 23 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 3217f7700d0e..8e00377c26ec 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -471,7 +471,7 @@ void vnt_update_top_rates(struct vnt_private *priv) break; } - priv->byTopCCKBasicRate = top_cck; + priv->top_cck_basic_rate = top_cck; } int vnt_ofdm_min_rate(struct vnt_private *priv) diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 951abc2b1972..dcb57dcb7308 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -334,7 +334,7 @@ struct vnt_private { u8 packet_type; /* 0:11a 1:11b 2:11gb 3:11ga */ u32 basic_rates; u8 top_ofdm_basic_rate; - u8 byTopCCKBasicRate; + u8 top_cck_basic_rate; u8 abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a02a028cdc67..f5227eea528d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -196,7 +196,7 @@ static int device_init_registers(struct vnt_private *priv) /* do MACbSoftwareReset in MACvInitialize */ priv->top_ofdm_basic_rate = RATE_24M; - priv->byTopCCKBasicRate = RATE_1M; + priv->top_cck_basic_rate = RATE_1M; /* target to IF pin while programming to RF chip */ priv->byCurPwr = 0xFF; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index ba2d55050501..79ce396c5ba1 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -119,7 +119,7 @@ static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, if (pkt_type == PK_TYPE_11B) ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, (u16)priv->byTopCCKBasicRate); + 14, (u16)priv->top_cck_basic_rate); else ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, (u16)priv->top_ofdm_basic_rate); @@ -149,14 +149,14 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, if (rsv_type == 0) { rts_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 20, priv->byTopCCKBasicRate); + pkt_type, 20, priv->top_cck_basic_rate); cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 14, priv->byTopCCKBasicRate); + pkt_type, 14, priv->top_cck_basic_rate); } else if (rsv_type == 1) { rts_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 20, priv->byTopCCKBasicRate); + pkt_type, 20, priv->top_cck_basic_rate); cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, priv->byTopCCKBasicRate); + 14, priv->top_cck_basic_rate); ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 2) { @@ -166,7 +166,7 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, pkt_type, 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 3) { cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, - 14, priv->byTopCCKBasicRate); + 14, priv->top_cck_basic_rate); ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, 14, priv->top_ofdm_basic_rate); @@ -188,7 +188,7 @@ static __le16 vnt_get_duration_le(struct vnt_private *piv, if (need_ack) { if (pkt_type == PK_TYPE_11B) ack_time = vnt_get_frame_time(piv->byPreambleType, - pkt_type, 14, piv->byTopCCKBasicRate); + pkt_type, 14, piv->top_cck_basic_rate); else ack_time = vnt_get_frame_time(piv->byPreambleType, pkt_type, 14, piv->top_ofdm_basic_rate); @@ -210,7 +210,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_BA_F0: case RTSDUR_BA_F1: cts_time = vnt_get_frame_time(priv->byPreambleType, - pkt_type, 14, priv->byTopCCKBasicRate); + pkt_type, 14, priv->top_cck_basic_rate); dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, frame_length, rate, need_ack); @@ -264,7 +264,7 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); - vnt_get_phy_field(priv, frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ @@ -281,7 +281,7 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); buf->time_stamp_off_b = vnt_time_stamp_off(priv, - priv->byTopCCKBasicRate); + priv->top_cck_basic_rate); tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); @@ -297,7 +297,7 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); - vnt_get_phy_field(priv, frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ @@ -309,7 +309,7 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); buf->time_stamp_off_b = vnt_time_stamp_off(priv, - priv->byTopCCKBasicRate); + priv->top_cck_basic_rate); tx_context->tx_hdr_size = vnt_mac_hdr_pos(tx_context, &buf->hdr); @@ -387,13 +387,13 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, - frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); + frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, @@ -412,14 +412,14 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - vnt_get_phy_field(priv, rts_frame_len, priv->byTopCCKBasicRate, + vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, - frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack); + frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack); buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, @@ -500,7 +500,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, struct vnt_cts_fb *buf = &head->cts_g_fb; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, cts_frame_len, - priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); + priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, frame_len, pkt_type, current_rate, need_ack); @@ -526,7 +526,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, cts_frame_len, - priv->byTopCCKBasicRate, PK_TYPE_11B, &buf->b); + priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get CTSDuration_ba */ buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, frame_len, pkt_type, @@ -563,7 +563,7 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, current_rate, need_ack); buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, - priv->byTopCCKBasicRate, need_ack); + priv->top_cck_basic_rate, need_ack); if (need_mic) head = &tx_head->tx_rts.tx.mic.head; @@ -588,7 +588,7 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, current_rate, need_ack); buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, - frame_size, priv->byTopCCKBasicRate, need_ack); + frame_size, priv->top_cck_basic_rate, need_ack); buf->cts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 3, pkt_type, frame_size, current_rate); -- cgit From bbb112639d492be6e1bf264a782fae75399d0aee Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:16 +0100 Subject: staging: vt6656: struct vnt_private replace abyEEPROM with eeprom Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 24 ++++++++++++------------ 3 files changed, 15 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 6af9fcbd90bd..9598c1991f29 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -390,11 +390,11 @@ int vnt_vt3184_init(struct vnt_private *priv) status = vnt_control_in(priv, MESSAGE_TYPE_READ, 0, MESSAGE_REQUEST_EEPROM, EEP_MAX_CONTEXT_SIZE, - priv->abyEEPROM); + priv->eeprom); if (status != STATUS_SUCCESS) return false; - priv->rf_type = priv->abyEEPROM[EEP_OFS_RFTYPE]; + priv->rf_type = priv->eeprom[EEP_OFS_RFTYPE]; dev_dbg(&priv->usb->dev, "RF Type %d\n", priv->rf_type); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index dcb57dcb7308..07e9d037ca57 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -336,7 +336,7 @@ struct vnt_private { u8 top_ofdm_basic_rate; u8 top_cck_basic_rate; - u8 abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ + u8 eeprom[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ u8 byPreambleType; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f5227eea528d..4054e3682782 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -201,17 +201,17 @@ static int device_init_registers(struct vnt_private *priv) /* target to IF pin while programming to RF chip */ priv->byCurPwr = 0xFF; - priv->byCCKPwr = priv->abyEEPROM[EEP_OFS_PWR_CCK]; - priv->byOFDMPwrG = priv->abyEEPROM[EEP_OFS_PWR_OFDMG]; + priv->byCCKPwr = priv->eeprom[EEP_OFS_PWR_CCK]; + priv->byOFDMPwrG = priv->eeprom[EEP_OFS_PWR_OFDMG]; /* load power table */ for (ii = 0; ii < 14; ii++) { priv->abyCCKPwrTbl[ii] = - priv->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; + priv->eeprom[ii + EEP_OFS_CCK_PWR_TBL]; if (priv->abyCCKPwrTbl[ii] == 0) priv->abyCCKPwrTbl[ii] = priv->byCCKPwr; priv->abyOFDMPwrTbl[ii] = - priv->abyEEPROM[ii + EEP_OFS_OFDM_PWR_TBL]; + priv->eeprom[ii + EEP_OFS_OFDM_PWR_TBL]; if (priv->abyOFDMPwrTbl[ii] == 0) priv->abyOFDMPwrTbl[ii] = priv->byOFDMPwrG; } @@ -230,13 +230,13 @@ static int device_init_registers(struct vnt_private *priv) /* load OFDM A power table */ for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { priv->abyOFDMAPwrTbl[ii] = - priv->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; + priv->eeprom[ii + EEP_OFS_OFDMA_PWR_TBL]; if (priv->abyOFDMAPwrTbl[ii] == 0) priv->abyOFDMAPwrTbl[ii] = priv->byOFDMPwrA; } - antenna = priv->abyEEPROM[EEP_OFS_ANTENNA]; + antenna = priv->eeprom[EEP_OFS_ANTENNA]; if (antenna & EEP_ANTINV) priv->tx_rx_ant_inv = true; @@ -290,12 +290,12 @@ static int device_init_registers(struct vnt_private *priv) /* load vt3266 calibration parameters in EEPROM */ if (priv->rf_type == RF_VT3226D0) { - if ((priv->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && - (priv->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { + if ((priv->eeprom[EEP_OFS_MAJOR_VER] == 0x1) && + (priv->eeprom[EEP_OFS_MINOR_VER] >= 0x4)) { - calib_tx_iq = priv->abyEEPROM[EEP_OFS_CALIB_TX_IQ]; - calib_tx_dc = priv->abyEEPROM[EEP_OFS_CALIB_TX_DC]; - calib_rx_iq = priv->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; + calib_tx_iq = priv->eeprom[EEP_OFS_CALIB_TX_IQ]; + calib_tx_dc = priv->eeprom[EEP_OFS_CALIB_TX_DC]; + calib_rx_iq = priv->eeprom[EEP_OFS_CALIB_RX_IQ]; if (calib_tx_iq || calib_tx_dc || calib_rx_iq) { /* CR255, enable TX/RX IQ and DC compensation mode */ @@ -348,7 +348,7 @@ static int device_init_registers(struct vnt_private *priv) vnt_set_short_slot_time(priv); - priv->radio_ctl = priv->abyEEPROM[EEP_OFS_RADIOCTL]; + priv->radio_ctl = priv->eeprom[EEP_OFS_RADIOCTL]; if ((priv->radio_ctl & EEP_RADIOCTL_ENABLE) != 0) { status = vnt_control_in(priv, MESSAGE_TYPE_READ, -- cgit From 98e93fe5ba0b82c788a9ac038f250e2cc02fa05b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:17 +0100 Subject: staging: vt6656: struct vnt_private replace byPreambleType with preamble_type Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 2 +- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 6 +++--- drivers/staging/vt6656/rxtx.c | 40 +++++++++++++++++++-------------------- 4 files changed, 25 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 9598c1991f29..ab5ce02a34d7 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -207,7 +207,7 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length, u32 count = 0; u32 tmp; int ext_bit; - u8 preamble_type = priv->byPreambleType; + u8 preamble_type = priv->preamble_type; bit_count = frame_length * 8; ext_bit = false; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 07e9d037ca57..466a9843d503 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -338,7 +338,7 @@ struct vnt_private { u8 eeprom[EEP_MAX_CONTEXT_SIZE]; /*u32 alignment */ - u8 byPreambleType; + u8 preamble_type; /* For RF Power table */ u8 byCCKPwr; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 4054e3682782..325daae3b8a1 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -124,7 +124,7 @@ static void device_set_options(struct vnt_private *priv) priv->bb_type = BBP_TYPE_DEF; priv->packet_type = priv->bb_type; priv->byAutoFBCtrl = AUTO_FB_0; - priv->byPreambleType = 0; + priv->preamble_type = 0; priv->exist_sw_net_addr = false; } @@ -752,10 +752,10 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, if (changed & BSS_CHANGED_ERP_PREAMBLE) { if (conf->use_short_preamble) { vnt_mac_enable_barker_preamble_mode(priv); - priv->byPreambleType = true; + priv->preamble_type = true; } else { vnt_mac_disable_barker_preamble_mode(priv); - priv->byPreambleType = false; + priv->preamble_type = false; } } diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 79ce396c5ba1..68e479afd7f9 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -105,7 +105,7 @@ static struct vnt_usb_send_context static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) { - return cpu_to_le16(vnt_time_stampoff[priv->byPreambleType % 2] + return cpu_to_le16(vnt_time_stampoff[priv->preamble_type % 2] [rate % MAX_RATE]); } @@ -114,14 +114,14 @@ static u32 vnt_get_rsvtime(struct vnt_private *priv, u8 pkt_type, { u32 data_time, ack_time; - data_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + data_time = vnt_get_frame_time(priv->preamble_type, pkt_type, frame_length, rate); if (pkt_type == PK_TYPE_11B) - ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, (u16)priv->top_cck_basic_rate); else - ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, (u16)priv->top_ofdm_basic_rate); if (need_ack) @@ -144,30 +144,30 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, rrv_time = rts_time = cts_time = ack_time = data_time = 0; - data_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + data_time = vnt_get_frame_time(priv->preamble_type, pkt_type, frame_length, current_rate); if (rsv_type == 0) { - rts_time = vnt_get_frame_time(priv->byPreambleType, + rts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 20, priv->top_cck_basic_rate); - cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, + cts_time = ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_cck_basic_rate); } else if (rsv_type == 1) { - rts_time = vnt_get_frame_time(priv->byPreambleType, + rts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 20, priv->top_cck_basic_rate); - cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + cts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_cck_basic_rate); - ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 2) { - rts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + rts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 20, priv->top_ofdm_basic_rate); - cts_time = ack_time = vnt_get_frame_time(priv->byPreambleType, + cts_time = ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_ofdm_basic_rate); } else if (rsv_type == 3) { - cts_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + cts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_cck_basic_rate); - ack_time = vnt_get_frame_time(priv->byPreambleType, pkt_type, + ack_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_ofdm_basic_rate); rrv_time = cts_time + ack_time + data_time + 2 * priv->sifs; @@ -187,10 +187,10 @@ static __le16 vnt_get_duration_le(struct vnt_private *piv, if (need_ack) { if (pkt_type == PK_TYPE_11B) - ack_time = vnt_get_frame_time(piv->byPreambleType, + ack_time = vnt_get_frame_time(piv->preamble_type, pkt_type, 14, piv->top_cck_basic_rate); else - ack_time = vnt_get_frame_time(piv->byPreambleType, + ack_time = vnt_get_frame_time(piv->preamble_type, pkt_type, 14, piv->top_ofdm_basic_rate); return cpu_to_le16((u16)(piv->sifs + ack_time)); @@ -209,7 +209,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_BA: case RTSDUR_BA_F0: case RTSDUR_BA_F1: - cts_time = vnt_get_frame_time(priv->byPreambleType, + cts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_cck_basic_rate); dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, @@ -219,7 +219,7 @@ static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, case RTSDUR_AA: case RTSDUR_AA_F0: case RTSDUR_AA_F1: - cts_time = vnt_get_frame_time(priv->byPreambleType, + cts_time = vnt_get_frame_time(priv->preamble_type, pkt_type, 14, priv->top_ofdm_basic_rate); dur_time = cts_time + 2 * priv->sifs + vnt_get_rsvtime(priv, pkt_type, @@ -825,9 +825,9 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_buffer_head->wFIFOCtl |= FIFOCTL_LRETRY; if (tx_rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) - priv->byPreambleType = PREAMBLE_SHORT; + priv->preamble_type = PREAMBLE_SHORT; else - priv->byPreambleType = PREAMBLE_LONG; + priv->preamble_type = PREAMBLE_LONG; if (tx_rate->flags & IEEE80211_TX_RC_USE_RTS_CTS) { need_rts = true; -- cgit From 5a97491c333a523f2f72fe24cec78748a6258550 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:18 +0100 Subject: staging: vt6656: struct vnt_private rf power table remove camel case Camel case changes byCCKPwr -> cck_pwr byOFDMPwrG -> ofdm_pwr_g byOFDMPwrA -> ofdm_pwr_a byCurPwr -> power abyCCKPwrTbl -> cck_pwr_tbl abyOFDMPwrTbl -> ofdm_pwr_tbl abyOFDMAPwrTbl -> ofdm_a_pwr_tbl Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 14 +++++++------- drivers/staging/vt6656/main_usb.c | 30 +++++++++++++++--------------- drivers/staging/vt6656/rf.c | 14 +++++++------- 3 files changed, 29 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 466a9843d503..4424d759c1bc 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -341,13 +341,13 @@ struct vnt_private { u8 preamble_type; /* For RF Power table */ - u8 byCCKPwr; - u8 byOFDMPwrG; - u8 byOFDMPwrA; - u8 byCurPwr; - u8 abyCCKPwrTbl[14]; - u8 abyOFDMPwrTbl[14]; - u8 abyOFDMAPwrTbl[42]; + u8 cck_pwr; + u8 ofdm_pwr_g; + u8 ofdm_pwr_a; + u8 power; + u8 cck_pwr_tbl[14]; + u8 ofdm_pwr_tbl[14]; + u8 ofdm_a_pwr_tbl[42]; u16 wCurrentRate; u16 tx_rate_fb0; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 325daae3b8a1..8fb602aca763 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -199,21 +199,21 @@ static int device_init_registers(struct vnt_private *priv) priv->top_cck_basic_rate = RATE_1M; /* target to IF pin while programming to RF chip */ - priv->byCurPwr = 0xFF; + priv->power = 0xFF; - priv->byCCKPwr = priv->eeprom[EEP_OFS_PWR_CCK]; - priv->byOFDMPwrG = priv->eeprom[EEP_OFS_PWR_OFDMG]; + priv->cck_pwr = priv->eeprom[EEP_OFS_PWR_CCK]; + priv->ofdm_pwr_g = priv->eeprom[EEP_OFS_PWR_OFDMG]; /* load power table */ for (ii = 0; ii < 14; ii++) { - priv->abyCCKPwrTbl[ii] = + priv->cck_pwr_tbl[ii] = priv->eeprom[ii + EEP_OFS_CCK_PWR_TBL]; + if (priv->cck_pwr_tbl[ii] == 0) + priv->cck_pwr_tbl[ii] = priv->cck_pwr; - if (priv->abyCCKPwrTbl[ii] == 0) - priv->abyCCKPwrTbl[ii] = priv->byCCKPwr; - priv->abyOFDMPwrTbl[ii] = + priv->ofdm_pwr_tbl[ii] = priv->eeprom[ii + EEP_OFS_OFDM_PWR_TBL]; - if (priv->abyOFDMPwrTbl[ii] == 0) - priv->abyOFDMPwrTbl[ii] = priv->byOFDMPwrG; + if (priv->ofdm_pwr_tbl[ii] == 0) + priv->ofdm_pwr_tbl[ii] = priv->ofdm_pwr_g; } /* @@ -221,19 +221,19 @@ static int device_init_registers(struct vnt_private *priv) * then need to recover 12, 13, 14 channels with 11 channel */ for (ii = 11; ii < 14; ii++) { - priv->abyCCKPwrTbl[ii] = priv->abyCCKPwrTbl[10]; - priv->abyOFDMPwrTbl[ii] = priv->abyOFDMPwrTbl[10]; + priv->cck_pwr_tbl[ii] = priv->cck_pwr_tbl[10]; + priv->ofdm_pwr_tbl[ii] = priv->ofdm_pwr_tbl[10]; } - priv->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ + priv->ofdm_pwr_a = 0x34; /* same as RFbMA2829SelectChannel */ /* load OFDM A power table */ for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { - priv->abyOFDMAPwrTbl[ii] = + priv->ofdm_a_pwr_tbl[ii] = priv->eeprom[ii + EEP_OFS_OFDMA_PWR_TBL]; - if (priv->abyOFDMAPwrTbl[ii] == 0) - priv->abyOFDMAPwrTbl[ii] = priv->byOFDMPwrA; + if (priv->ofdm_a_pwr_tbl[ii] == 0) + priv->ofdm_a_pwr_tbl[ii] = priv->ofdm_pwr_a; } antenna = priv->eeprom[EEP_OFS_ANTENNA]; diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 3815db92c0ce..c0edcae55e30 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -624,7 +624,7 @@ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data) int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) { int ret = true; - u8 power = priv->byCCKPwr; + u8 power = priv->cck_pwr; if (channel == 0) return -EINVAL; @@ -636,8 +636,8 @@ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) case RATE_11M: channel--; - if (channel < sizeof(priv->abyCCKPwrTbl)) - power = priv->abyCCKPwrTbl[channel]; + if (channel < sizeof(priv->cck_pwr_tbl)) + power = priv->cck_pwr_tbl[channel]; break; case RATE_6M: case RATE_9M: @@ -647,9 +647,9 @@ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel) case RATE_48M: case RATE_54M: if (channel > CB_MAX_CHANNEL_24G) - power = priv->abyOFDMAPwrTbl[channel-15]; + power = priv->ofdm_a_pwr_tbl[channel-15]; else - power = priv->abyOFDMPwrTbl[channel-1]; + power = priv->ofdm_pwr_tbl[channel-1]; break; } @@ -694,10 +694,10 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate) if (power > VNT_RF_MAX_POWER) power = VNT_RF_MAX_POWER; - if (priv->byCurPwr == power) + if (priv->power == power) return true; - priv->byCurPwr = power; + priv->power = power; switch (priv->rf_type) { case RF_AL2230: -- cgit From 8b84c1da02f3de5c362a68fab1951c771192a806 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:19 +0100 Subject: staging: vt6656: struct vnt_private replace wCurrentRate with current_rate Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 8 ++++---- drivers/staging/vt6656/rxtx.c | 4 ++-- drivers/staging/vt6656/wcmd.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 4424d759c1bc..9e095ebb44f0 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -349,7 +349,7 @@ struct vnt_private { u8 ofdm_pwr_tbl[14]; u8 ofdm_a_pwr_tbl[42]; - u16 wCurrentRate; + u16 current_rate; u16 tx_rate_fb0; u16 tx_rate_fb1; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 8fb602aca763..5939f9a3da57 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -718,11 +718,11 @@ static int vnt_config(struct ieee80211_hw *hw, u32 changed) if (changed & IEEE80211_CONF_CHANGE_POWER) { if (priv->bb_type == BB_TYPE_11B) - priv->wCurrentRate = RATE_1M; + priv->current_rate = RATE_1M; else - priv->wCurrentRate = RATE_54M; + priv->current_rate = RATE_54M; - vnt_rf_setpower(priv, priv->wCurrentRate, + vnt_rf_setpower(priv, priv->current_rate, conf->chandef.chan->hw_value); } @@ -778,7 +778,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, } if (changed & BSS_CHANGED_TXPOWER) - vnt_rf_setpower(priv, priv->wCurrentRate, + vnt_rf_setpower(priv, priv->current_rate, conf->chandef.chan->hw_value); if (changed & BSS_CHANGED_BEACON_ENABLED) { diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 68e479afd7f9..0e4b77339fd8 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -764,9 +764,9 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) rate = ieee80211_get_tx_rate(priv->hw, info); current_rate = rate->hw_value; - if (priv->wCurrentRate != current_rate && + if (priv->current_rate != current_rate && !(priv->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) { - priv->wCurrentRate = current_rate; + priv->current_rate = current_rate; vnt_schedule_command(priv, WLAN_CMD_SETPOWER); } diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 304f6d67ccae..a63d0fd28423 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -139,7 +139,7 @@ void vnt_run_command(struct work_struct *work) case WLAN_CMD_SETPOWER_START: - vnt_rf_setpower(priv, priv->wCurrentRate, + vnt_rf_setpower(priv, priv->current_rate, priv->hw->conf.chandef.chan->hw_value); break; -- cgit From 388e5cb8ddcf48a3831b5b3ed52e1080aa160357 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:20 +0100 Subject: staging: vt6656: struct vnt_private remove camel case retry limit camel case changes byShortRetryLimit -> short_retry_limit byLongRetryLimit -> long_retry_limit Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 4 ++-- drivers/staging/vt6656/main_usb.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 9e095ebb44f0..fd230b3c8c78 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -353,8 +353,8 @@ struct vnt_private { u16 tx_rate_fb0; u16 tx_rate_fb1; - u8 byShortRetryLimit; - u8 byLongRetryLimit; + u8 short_retry_limit; + u8 long_retry_limit; enum nl80211_iftype op_mode; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 5939f9a3da57..e8ce52dbaa8d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -118,8 +118,8 @@ static void device_set_options(struct vnt_private *priv) else priv->num_rcb = vnt_rx_buffers; - priv->byShortRetryLimit = SHORT_RETRY_DEF; - priv->byLongRetryLimit = LONG_RETRY_DEF; + priv->short_retry_limit = SHORT_RETRY_DEF; + priv->long_retry_limit = LONG_RETRY_DEF; priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; priv->bb_type = BBP_TYPE_DEF; priv->packet_type = priv->bb_type; @@ -166,8 +166,8 @@ static int device_init_registers(struct vnt_private *priv) init_cmd->exist_sw_net_addr = priv->exist_sw_net_addr; for (ii = 0; ii < 6; ii++) init_cmd->sw_net_addr[ii] = priv->current_net_addr[ii]; - init_cmd->short_retry_limit = priv->byShortRetryLimit; - init_cmd->long_retry_limit = priv->byLongRetryLimit; + init_cmd->short_retry_limit = priv->short_retry_limit; + init_cmd->long_retry_limit = priv->long_retry_limit; /* issue card_init command to device */ status = vnt_control_out(priv, -- cgit From a641c9ec886a1fd2cb3419959c8014f14983d379 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:21 +0100 Subject: staging: vt6656: struct vnt_private replace bShortSlotTime with short_slot_time Removing type prefix and camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 4 ++-- drivers/staging/vt6656/card.c | 2 +- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index ab5ce02a34d7..8b2b2e7d2cd4 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -526,7 +526,7 @@ void vnt_set_short_slot_time(struct vnt_private *priv) { u8 bb_vga = 0; - if (priv->bShortSlotTime) + if (priv->short_slot_time) priv->bb_rx_conf &= 0xdf; else priv->bb_rx_conf |= 0x20; @@ -545,7 +545,7 @@ void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xE7, data); /* patch for 3253B0 Baseband with Cardbus module */ - if (priv->bShortSlotTime) + if (priv->short_slot_time) priv->bb_rx_conf &= 0xdf; /* 1101 1111 */ else priv->bb_rx_conf |= 0x20; /* 0010 0000 */ diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 8e00377c26ec..75b586b10276 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -381,7 +381,7 @@ void vnt_update_ifs(struct vnt_private *priv) priv->sifs = C_SIFS_BG; - if (priv->bShortSlotTime) + if (priv->short_slot_time) priv->slot = C_SLOT_SHORT; else priv->slot = C_SLOT_LONG; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index fd230b3c8c78..35bc8c62d213 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -358,7 +358,7 @@ struct vnt_private { enum nl80211_iftype op_mode; - int bShortSlotTime; + int short_slot_time; int bBarkerPreambleMd; /* Power save */ diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e8ce52dbaa8d..f7f4dccfafc7 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -342,9 +342,9 @@ static int device_init_registers(struct vnt_private *priv) * set Short Slot Time, xIFS, and RSPINF */ if (priv->bb_type == BB_TYPE_11A) - priv->bShortSlotTime = true; + priv->short_slot_time = true; else - priv->bShortSlotTime = false; + priv->short_slot_time = false; vnt_set_short_slot_time(priv); @@ -768,9 +768,9 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, if (changed & BSS_CHANGED_ERP_SLOT) { if (conf->use_short_slot) - priv->bShortSlotTime = true; + priv->short_slot_time = true; else - priv->bShortSlotTime = false; + priv->short_slot_time = false; vnt_set_short_slot_time(priv); vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); -- cgit From ba06e38c24b655a9f0f2d92c7ec1c2a9101216f4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:22 +0100 Subject: staging: vt6656: struct vnt_private remove dead variable bBarkerPreambleMd Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 35bc8c62d213..905e90b3bc87 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -359,7 +359,6 @@ struct vnt_private { enum nl80211_iftype op_mode; int short_slot_time; - int bBarkerPreambleMd; /* Power save */ u16 current_aid; -- cgit From 1b2bc0aa8df1fcdb0dd52f7ea54c0029e8cc0f70 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:23 +0100 Subject: staging: vt6656: struct vnt_private replace wSeqCounter with seq_counter Removing type prefix and camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/rxtx.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 905e90b3bc87..6647b2bff7da 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -364,7 +364,7 @@ struct vnt_private { u16 current_aid; /* Beacon releated */ - u16 wSeqCounter; + u16 seq_counter; enum vnt_cmd_state command_state; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 0e4b77339fd8..8d745afbdedd 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -914,7 +914,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_key, skb, tx_body_size, mic_hdr); } - priv->wSeqCounter = (le16_to_cpu(hdr->seq_ctrl) & + priv->seq_counter = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; tx_buffer->tx_byte_count = cpu_to_le16(tx_bytes); @@ -1004,12 +1004,12 @@ static int vnt_beacon_xmit(struct vnt_private *priv, if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)mgmt_hdr; hdr->duration_id = 0; - hdr->seq_ctrl = cpu_to_le16(priv->wSeqCounter << 4); + hdr->seq_ctrl = cpu_to_le16(priv->seq_counter << 4); } - priv->wSeqCounter++; - if (priv->wSeqCounter > 0x0fff) - priv->wSeqCounter = 0; + priv->seq_counter++; + if (priv->seq_counter > 0x0fff) + priv->seq_counter = 0; count = sizeof(struct vnt_tx_short_buf_head) + skb->len; -- cgit From a6177aef3c2ba01b038981ddb3195761d5ffe682 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:24 +0100 Subject: staging: vt6656: struct vnt_private replace byAutoFBCtrl with auto_fb_ctrl Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 4 ++-- drivers/staging/vt6656/rxtx.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 6647b2bff7da..ef9b505789b7 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -380,7 +380,7 @@ struct vnt_private { unsigned long key_entry_inuse; - u8 byAutoFBCtrl; + u8 auto_fb_ctrl; /* For Update BaseBand VGA Gain Offset */ u8 abyBBVGA[BB_VGA_LEVEL]; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f7f4dccfafc7..fac13b14ac8a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -123,7 +123,7 @@ static void device_set_options(struct vnt_private *priv) priv->op_mode = NL80211_IFTYPE_UNSPECIFIED; priv->bb_type = BBP_TYPE_DEF; priv->packet_type = priv->bb_type; - priv->byAutoFBCtrl = AUTO_FB_0; + priv->auto_fb_ctrl = AUTO_FB_0; priv->preamble_type = 0; priv->exist_sw_net_addr = false; } @@ -280,7 +280,7 @@ static int device_init_registers(struct vnt_private *priv) vnt_set_antenna_mode(priv, priv->rx_antenna_mode); /* get Auto Fall Back type */ - priv->byAutoFBCtrl = AUTO_FB_0; + priv->auto_fb_ctrl = AUTO_FB_0; /* default Auto Mode */ priv->bb_type = BB_TYPE_11G; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 8d745afbdedd..0febd03d38da 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -866,7 +866,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) /* legacy rates TODO use ieee80211_tx_rate */ if (current_rate >= RATE_18M && ieee80211_is_data(hdr->frame_control)) { - if (priv->byAutoFBCtrl == AUTO_FB_0) { + if (priv->auto_fb_ctrl == AUTO_FB_0) { tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_0; priv->tx_rate_fb0 = @@ -875,7 +875,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) vnt_fb_opt0[FB_RATE1][current_rate - RATE_18M]; fb_option = AUTO_FB_0; - } else if (priv->byAutoFBCtrl == AUTO_FB_1) { + } else if (priv->auto_fb_ctrl == AUTO_FB_1) { tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_1; priv->tx_rate_fb0 = -- cgit From c37cbd3706bda2dd440a6fd036569412774a9f6c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:25 +0100 Subject: staging: vt6656: struct vnt_private replace abyBBVGA with bb_vga Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 34 +++++++++++++++++----------------- drivers/staging/vt6656/card.c | 18 +++++++++--------- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/main_usb.c | 2 +- 4 files changed, 28 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 8b2b2e7d2cd4..11c098ca2928 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -406,10 +406,10 @@ int vnt_vt3184_init(struct vnt_private *priv) agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); - priv->abyBBVGA[0] = 0x1C; - priv->abyBBVGA[1] = 0x10; - priv->abyBBVGA[2] = 0x0; - priv->abyBBVGA[3] = 0x0; + priv->bb_vga[0] = 0x1C; + priv->bb_vga[1] = 0x10; + priv->bb_vga[2] = 0x0; + priv->bb_vga[3] = 0x0; priv->ldBmThreshold[0] = -70; priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; @@ -423,10 +423,10 @@ int vnt_vt3184_init(struct vnt_private *priv) addr[0xd7] = 0x06; - priv->abyBBVGA[0] = 0x1c; - priv->abyBBVGA[1] = 0x10; - priv->abyBBVGA[2] = 0x0; - priv->abyBBVGA[3] = 0x0; + priv->bb_vga[0] = 0x1c; + priv->bb_vga[1] = 0x10; + priv->bb_vga[2] = 0x0; + priv->bb_vga[3] = 0x0; priv->ldBmThreshold[0] = -70; priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; @@ -439,10 +439,10 @@ int vnt_vt3184_init(struct vnt_private *priv) agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); - priv->abyBBVGA[0] = 0x20; - priv->abyBBVGA[1] = 0x10; - priv->abyBBVGA[2] = 0x0; - priv->abyBBVGA[3] = 0x0; + priv->bb_vga[0] = 0x20; + priv->bb_vga[1] = 0x10; + priv->bb_vga[2] = 0x0; + priv->bb_vga[3] = 0x0; priv->ldBmThreshold[0] = -70; priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; @@ -457,10 +457,10 @@ int vnt_vt3184_init(struct vnt_private *priv) agc = vnt_vt3184_agc; length_agc = sizeof(vnt_vt3184_agc); - priv->abyBBVGA[0] = 0x20; - priv->abyBBVGA[1] = 0x10; - priv->abyBBVGA[2] = 0x0; - priv->abyBBVGA[3] = 0x0; + priv->bb_vga[0] = 0x20; + priv->bb_vga[1] = 0x10; + priv->bb_vga[2] = 0x0; + priv->bb_vga[3] = 0x0; priv->ldBmThreshold[0] = -70; priv->ldBmThreshold[1] = -48; priv->ldBmThreshold[2] = 0; @@ -533,7 +533,7 @@ void vnt_set_short_slot_time(struct vnt_private *priv) vnt_control_in_u8(priv, MESSAGE_REQUEST_BBREG, 0xe7, &bb_vga); - if (bb_vga == priv->abyBBVGA[0]) + if (bb_vga == priv->bb_vga[0]) priv->bb_rx_conf |= 0x20; vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->bb_rx_conf); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 75b586b10276..c06dd9d59817 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -807,25 +807,25 @@ void vnt_set_bss_mode(struct vnt_private *priv) if (priv->bb_type == BB_TYPE_11A) { if (priv->rf_type == RF_AIROHA7230) { - priv->abyBBVGA[0] = 0x20; + priv->bb_vga[0] = 0x20; vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, - 0xe7, priv->abyBBVGA[0]); + 0xe7, priv->bb_vga[0]); } - priv->abyBBVGA[2] = 0x10; - priv->abyBBVGA[3] = 0x10; + priv->bb_vga[2] = 0x10; + priv->bb_vga[3] = 0x10; } else { if (priv->rf_type == RF_AIROHA7230) { - priv->abyBBVGA[0] = 0x1c; + priv->bb_vga[0] = 0x1c; vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, - 0xe7, priv->abyBBVGA[0]); + 0xe7, priv->bb_vga[0]); } - priv->abyBBVGA[2] = 0x0; - priv->abyBBVGA[3] = 0x0; + priv->bb_vga[2] = 0x0; + priv->bb_vga[3] = 0x0; } - vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); + vnt_set_vga_gain_offset(priv, priv->bb_vga[0]); } diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index ef9b505789b7..e3c250928963 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -383,7 +383,7 @@ struct vnt_private { u8 auto_fb_ctrl; /* For Update BaseBand VGA Gain Offset */ - u8 abyBBVGA[BB_VGA_LEVEL]; + u8 bb_vga[BB_VGA_LEVEL]; signed long ldBmThreshold[BB_VGA_LEVEL]; u8 byBBPreEDRSSI; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fac13b14ac8a..b99def77c44a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -773,7 +773,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, priv->short_slot_time = false; vnt_set_short_slot_time(priv); - vnt_set_vga_gain_offset(priv, priv->abyBBVGA[0]); + vnt_set_vga_gain_offset(priv, priv->bb_vga[0]); vnt_update_pre_ed_threshold(priv, false); } -- cgit From 975c89f323f598268b957dcf6f46408b1b52e71a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:26 +0100 Subject: staging: vt6656: struct vnt_private remove dead code ldBmThreshold ldBmThreshold was used in old function s_vCheckSensitivity which had been disabled in orginal vendors code. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 20 ++++---------------- drivers/staging/vt6656/device.h | 1 - 2 files changed, 4 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 11c098ca2928..dd449a34e685 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -410,10 +410,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->bb_vga[1] = 0x10; priv->bb_vga[2] = 0x0; priv->bb_vga[3] = 0x0; - priv->ldBmThreshold[0] = -70; - priv->ldBmThreshold[1] = -48; - priv->ldBmThreshold[2] = 0; - priv->ldBmThreshold[3] = 0; + } else if (priv->rf_type == RF_AIROHA7230) { priv->bb_rx_conf = vnt_vt3184_al2230[10]; length = sizeof(vnt_vt3184_al2230); @@ -427,10 +424,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->bb_vga[1] = 0x10; priv->bb_vga[2] = 0x0; priv->bb_vga[3] = 0x0; - priv->ldBmThreshold[0] = -70; - priv->ldBmThreshold[1] = -48; - priv->ldBmThreshold[2] = 0; - priv->ldBmThreshold[3] = 0; + } else if ((priv->rf_type == RF_VT3226) || (priv->rf_type == RF_VT3226D0)) { priv->bb_rx_conf = vnt_vt3184_vt3226d0[10]; @@ -443,10 +437,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->bb_vga[1] = 0x10; priv->bb_vga[2] = 0x0; priv->bb_vga[3] = 0x0; - priv->ldBmThreshold[0] = -70; - priv->ldBmThreshold[1] = -48; - priv->ldBmThreshold[2] = 0; - priv->ldBmThreshold[3] = 0; + /* Fix VT3226 DFC system timing issue */ vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); @@ -461,10 +452,7 @@ int vnt_vt3184_init(struct vnt_private *priv) priv->bb_vga[1] = 0x10; priv->bb_vga[2] = 0x0; priv->bb_vga[3] = 0x0; - priv->ldBmThreshold[0] = -70; - priv->ldBmThreshold[1] = -48; - priv->ldBmThreshold[2] = 0; - priv->ldBmThreshold[3] = 0; + /* Fix VT3226 DFC system timing issue */ vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index e3c250928963..24ebbd06b951 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -384,7 +384,6 @@ struct vnt_private { /* For Update BaseBand VGA Gain Offset */ u8 bb_vga[BB_VGA_LEVEL]; - signed long ldBmThreshold[BB_VGA_LEVEL]; u8 byBBPreEDRSSI; u8 byBBPreEDIndex; -- cgit From 12687222c96438bc64b76705813f45da26183d53 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:27 +0100 Subject: staging: vt6656: struct vnt_private replace byBBPreEDRSSI with bb_pre_ed_rssi Remove type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 128 +++++++++++++++++++------------------- drivers/staging/vt6656/device.h | 2 +- drivers/staging/vt6656/dpc.c | 4 +- 3 files changed, 67 insertions(+), 67 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index dd449a34e685..e15e84284522 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -580,69 +580,69 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) break; } - if (priv->byBBPreEDRSSI <= 45) { + if (priv->bb_pre_ed_rssi <= 45) { ed_inx = 20; cr_201 = 0xff; - } else if (priv->byBBPreEDRSSI <= 46) { + } else if (priv->bb_pre_ed_rssi <= 46) { ed_inx = 19; cr_201 = 0x1a; - } else if (priv->byBBPreEDRSSI <= 47) { + } else if (priv->bb_pre_ed_rssi <= 47) { ed_inx = 18; cr_201 = 0x15; - } else if (priv->byBBPreEDRSSI <= 49) { + } else if (priv->bb_pre_ed_rssi <= 49) { ed_inx = 17; cr_201 = 0xe; - } else if (priv->byBBPreEDRSSI <= 51) { + } else if (priv->bb_pre_ed_rssi <= 51) { ed_inx = 16; cr_201 = 0x9; - } else if (priv->byBBPreEDRSSI <= 53) { + } else if (priv->bb_pre_ed_rssi <= 53) { ed_inx = 15; cr_201 = 0x6; - } else if (priv->byBBPreEDRSSI <= 55) { + } else if (priv->bb_pre_ed_rssi <= 55) { ed_inx = 14; cr_201 = 0x3; - } else if (priv->byBBPreEDRSSI <= 56) { + } else if (priv->bb_pre_ed_rssi <= 56) { ed_inx = 13; cr_201 = 0x2; cr_206 = 0xa0; - } else if (priv->byBBPreEDRSSI <= 57) { + } else if (priv->bb_pre_ed_rssi <= 57) { ed_inx = 12; cr_201 = 0x2; cr_206 = 0x20; - } else if (priv->byBBPreEDRSSI <= 58) { + } else if (priv->bb_pre_ed_rssi <= 58) { ed_inx = 11; cr_201 = 0x1; cr_206 = 0xa0; - } else if (priv->byBBPreEDRSSI <= 59) { + } else if (priv->bb_pre_ed_rssi <= 59) { ed_inx = 10; cr_201 = 0x1; cr_206 = 0x54; - } else if (priv->byBBPreEDRSSI <= 60) { + } else if (priv->bb_pre_ed_rssi <= 60) { ed_inx = 9; cr_201 = 0x1; cr_206 = 0x18; - } else if (priv->byBBPreEDRSSI <= 61) { + } else if (priv->bb_pre_ed_rssi <= 61) { ed_inx = 8; cr_206 = 0xe3; - } else if (priv->byBBPreEDRSSI <= 62) { + } else if (priv->bb_pre_ed_rssi <= 62) { ed_inx = 7; cr_206 = 0xb9; - } else if (priv->byBBPreEDRSSI <= 63) { + } else if (priv->bb_pre_ed_rssi <= 63) { ed_inx = 6; cr_206 = 0x93; - } else if (priv->byBBPreEDRSSI <= 64) { + } else if (priv->bb_pre_ed_rssi <= 64) { ed_inx = 5; cr_206 = 0x79; - } else if (priv->byBBPreEDRSSI <= 65) { + } else if (priv->bb_pre_ed_rssi <= 65) { ed_inx = 4; cr_206 = 0x62; - } else if (priv->byBBPreEDRSSI <= 66) { + } else if (priv->bb_pre_ed_rssi <= 66) { ed_inx = 3; cr_206 = 0x51; - } else if (priv->byBBPreEDRSSI <= 67) { + } else if (priv->bb_pre_ed_rssi <= 67) { ed_inx = 2; cr_206 = 0x43; - } else if (priv->byBBPreEDRSSI <= 68) { + } else if (priv->bb_pre_ed_rssi <= 68) { ed_inx = 1; cr_206 = 0x36; } else { @@ -659,75 +659,75 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) break; } - if (priv->byBBPreEDRSSI <= 41) { + if (priv->bb_pre_ed_rssi <= 41) { ed_inx = 22; cr_201 = 0xff; - } else if (priv->byBBPreEDRSSI <= 42) { + } else if (priv->bb_pre_ed_rssi <= 42) { ed_inx = 21; cr_201 = 0x36; - } else if (priv->byBBPreEDRSSI <= 43) { + } else if (priv->bb_pre_ed_rssi <= 43) { ed_inx = 20; cr_201 = 0x26; - } else if (priv->byBBPreEDRSSI <= 45) { + } else if (priv->bb_pre_ed_rssi <= 45) { ed_inx = 19; cr_201 = 0x18; - } else if (priv->byBBPreEDRSSI <= 47) { + } else if (priv->bb_pre_ed_rssi <= 47) { ed_inx = 18; cr_201 = 0x11; - } else if (priv->byBBPreEDRSSI <= 49) { + } else if (priv->bb_pre_ed_rssi <= 49) { ed_inx = 17; cr_201 = 0xa; - } else if (priv->byBBPreEDRSSI <= 51) { + } else if (priv->bb_pre_ed_rssi <= 51) { ed_inx = 16; cr_201 = 0x7; - } else if (priv->byBBPreEDRSSI <= 53) { + } else if (priv->bb_pre_ed_rssi <= 53) { ed_inx = 15; cr_201 = 0x4; - } else if (priv->byBBPreEDRSSI <= 55) { + } else if (priv->bb_pre_ed_rssi <= 55) { ed_inx = 14; cr_201 = 0x2; cr_206 = 0xc0; - } else if (priv->byBBPreEDRSSI <= 56) { + } else if (priv->bb_pre_ed_rssi <= 56) { ed_inx = 13; cr_201 = 0x2; cr_206 = 0x30; - } else if (priv->byBBPreEDRSSI <= 57) { + } else if (priv->bb_pre_ed_rssi <= 57) { ed_inx = 12; cr_201 = 0x1; cr_206 = 0xb0; - } else if (priv->byBBPreEDRSSI <= 58) { + } else if (priv->bb_pre_ed_rssi <= 58) { ed_inx = 11; cr_201 = 0x1; cr_206 = 0x70; - } else if (priv->byBBPreEDRSSI <= 59) { + } else if (priv->bb_pre_ed_rssi <= 59) { ed_inx = 10; cr_201 = 0x1; cr_206 = 0x30; - } else if (priv->byBBPreEDRSSI <= 60) { + } else if (priv->bb_pre_ed_rssi <= 60) { ed_inx = 9; cr_206 = 0xea; - } else if (priv->byBBPreEDRSSI <= 61) { + } else if (priv->bb_pre_ed_rssi <= 61) { ed_inx = 8; cr_206 = 0xc0; - } else if (priv->byBBPreEDRSSI <= 62) { + } else if (priv->bb_pre_ed_rssi <= 62) { ed_inx = 7; cr_206 = 0x9c; - } else if (priv->byBBPreEDRSSI <= 63) { + } else if (priv->bb_pre_ed_rssi <= 63) { ed_inx = 6; cr_206 = 0x80; - } else if (priv->byBBPreEDRSSI <= 64) { + } else if (priv->bb_pre_ed_rssi <= 64) { ed_inx = 5; cr_206 = 0x68; - } else if (priv->byBBPreEDRSSI <= 65) { + } else if (priv->bb_pre_ed_rssi <= 65) { ed_inx = 4; cr_206 = 0x52; - } else if (priv->byBBPreEDRSSI <= 66) { + } else if (priv->bb_pre_ed_rssi <= 66) { ed_inx = 3; cr_206 = 0x43; - } else if (priv->byBBPreEDRSSI <= 67) { + } else if (priv->bb_pre_ed_rssi <= 67) { ed_inx = 2; cr_206 = 0x36; - } else if (priv->byBBPreEDRSSI <= 68) { + } else if (priv->bb_pre_ed_rssi <= 68) { ed_inx = 1; cr_206 = 0x2d; } else { @@ -743,69 +743,69 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) break; } - if (priv->byBBPreEDRSSI <= 41) { + if (priv->bb_pre_ed_rssi <= 41) { ed_inx = 20; cr_201 = 0xff; - } else if (priv->byBBPreEDRSSI <= 42) { + } else if (priv->bb_pre_ed_rssi <= 42) { ed_inx = 19; cr_201 = 0x36; - } else if (priv->byBBPreEDRSSI <= 43) { + } else if (priv->bb_pre_ed_rssi <= 43) { ed_inx = 18; cr_201 = 0x26; - } else if (priv->byBBPreEDRSSI <= 45) { + } else if (priv->bb_pre_ed_rssi <= 45) { ed_inx = 17; cr_201 = 0x18; - } else if (priv->byBBPreEDRSSI <= 47) { + } else if (priv->bb_pre_ed_rssi <= 47) { ed_inx = 16; cr_201 = 0x11; - } else if (priv->byBBPreEDRSSI <= 49) { + } else if (priv->bb_pre_ed_rssi <= 49) { ed_inx = 15; cr_201 = 0xa; - } else if (priv->byBBPreEDRSSI <= 51) { + } else if (priv->bb_pre_ed_rssi <= 51) { ed_inx = 14; cr_201 = 0x7; - } else if (priv->byBBPreEDRSSI <= 53) { + } else if (priv->bb_pre_ed_rssi <= 53) { ed_inx = 13; cr_201 = 0x4; - } else if (priv->byBBPreEDRSSI <= 55) { + } else if (priv->bb_pre_ed_rssi <= 55) { ed_inx = 12; cr_201 = 0x2; cr_206 = 0xc0; - } else if (priv->byBBPreEDRSSI <= 56) { + } else if (priv->bb_pre_ed_rssi <= 56) { ed_inx = 11; cr_201 = 0x2; cr_206 = 0x30; - } else if (priv->byBBPreEDRSSI <= 57) { + } else if (priv->bb_pre_ed_rssi <= 57) { ed_inx = 10; cr_201 = 0x1; cr_206 = 0xb0; - } else if (priv->byBBPreEDRSSI <= 58) { + } else if (priv->bb_pre_ed_rssi <= 58) { ed_inx = 9; cr_201 = 0x1; cr_206 = 0x70; - } else if (priv->byBBPreEDRSSI <= 59) { + } else if (priv->bb_pre_ed_rssi <= 59) { ed_inx = 8; cr_201 = 0x1; cr_206 = 0x30; - } else if (priv->byBBPreEDRSSI <= 60) { + } else if (priv->bb_pre_ed_rssi <= 60) { ed_inx = 7; cr_206 = 0xea; - } else if (priv->byBBPreEDRSSI <= 61) { + } else if (priv->bb_pre_ed_rssi <= 61) { ed_inx = 6; cr_206 = 0xc0; - } else if (priv->byBBPreEDRSSI <= 62) { + } else if (priv->bb_pre_ed_rssi <= 62) { ed_inx = 5; cr_206 = 0x9c; - } else if (priv->byBBPreEDRSSI <= 63) { + } else if (priv->bb_pre_ed_rssi <= 63) { ed_inx = 4; cr_206 = 0x80; - } else if (priv->byBBPreEDRSSI <= 64) { + } else if (priv->bb_pre_ed_rssi <= 64) { ed_inx = 3; cr_206 = 0x68; - } else if (priv->byBBPreEDRSSI <= 65) { + } else if (priv->bb_pre_ed_rssi <= 65) { ed_inx = 2; cr_206 = 0x52; - } else if (priv->byBBPreEDRSSI <= 66) { + } else if (priv->bb_pre_ed_rssi <= 66) { ed_inx = 1; cr_206 = 0x43; } else { @@ -821,8 +821,8 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) priv->byBBPreEDIndex = ed_inx; - dev_dbg(&priv->usb->dev, "%s byBBPreEDRSSI %d\n", - __func__, priv->byBBPreEDRSSI); + dev_dbg(&priv->usb->dev, "%s bb_pre_ed_rssi %d\n", + __func__, priv->bb_pre_ed_rssi); if (!cr_201 && !cr_206) return; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 24ebbd06b951..e97283be539b 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -385,7 +385,7 @@ struct vnt_private { /* For Update BaseBand VGA Gain Offset */ u8 bb_vga[BB_VGA_LEVEL]; - u8 byBBPreEDRSSI; + u8 bb_pre_ed_rssi; u8 byBBPreEDIndex; /* command timer */ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 3bf27820789d..f5fbb5ff401d 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -152,8 +152,8 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, vnt_rf_rssi_to_dbm(priv, *rssi, &rx_dbm); - priv->byBBPreEDRSSI = (u8)rx_dbm + 1; - priv->current_rssi = priv->byBBPreEDRSSI; + priv->bb_pre_ed_rssi = (u8)rx_dbm + 1; + priv->current_rssi = priv->bb_pre_ed_rssi; frame = skb_data + 8; -- cgit From 43fd1924be1ca94290af7d27ab4d9d7e4f9f3bc6 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:28 +0100 Subject: staging: vt6656: struct vnt_private rename byBBPreEDIndex with bb_pre_ed_index Removing type prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/baseband.c | 6 +++--- drivers/staging/vt6656/device.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index e15e84284522..e6c7b604ede9 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -568,7 +568,7 @@ void vnt_exit_deep_sleep(struct vnt_private *priv) void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) { u8 cr_201 = 0x0, cr_206 = 0x0; - u8 ed_inx = priv->byBBPreEDIndex; + u8 ed_inx = priv->bb_pre_ed_index; switch (priv->rf_type) { case RF_AL2230: @@ -816,10 +816,10 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) } - if (ed_inx == priv->byBBPreEDIndex && !scanning) + if (ed_inx == priv->bb_pre_ed_index && !scanning) return; - priv->byBBPreEDIndex = ed_inx; + priv->bb_pre_ed_index = ed_inx; dev_dbg(&priv->usb->dev, "%s bb_pre_ed_rssi %d\n", __func__, priv->bb_pre_ed_rssi); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index e97283be539b..101d0ca8bf1e 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -386,7 +386,7 @@ struct vnt_private { u8 bb_vga[BB_VGA_LEVEL]; u8 bb_pre_ed_rssi; - u8 byBBPreEDIndex; + u8 bb_pre_ed_index; /* command timer */ struct delayed_work run_command_work; -- cgit From bab97c05510fbaa28655bd5592dc0b559e677c1c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:29 +0100 Subject: staging: vt6656: dead code remove channel switch. The driver needs to do anything special for channel switch. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 4 ---- drivers/staging/vt6656/int.c | 8 -------- drivers/staging/vt6656/wcmd.c | 8 -------- drivers/staging/vt6656/wcmd.h | 4 +--- 4 files changed, 1 insertion(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 101d0ca8bf1e..120d3250626d 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -391,10 +391,6 @@ struct vnt_private { /* command timer */ struct delayed_work run_command_work; - int bChannelSwitch; - u8 byNewChannel; - u8 byChannelSwitchCount; - struct ieee80211_low_level_stats low_stats; }; diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 9c5fefc6ab72..2ef70e4701f6 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -153,14 +153,6 @@ void vnt_int_process_data(struct vnt_private *priv) if (priv->hw->conf.flags & IEEE80211_CONF_PS) vnt_schedule_command(priv, WLAN_CMD_TBTT_WAKEUP); -#if 0 /* TODO channel switch */ - if (priv->bChannelSwitch) { - priv->byChannelSwitchCount--; - if (priv->byChannelSwitchCount == 0) - vnt_schedule_command(priv, - WLAN_CMD_11H_CHSW); - } -#endif } priv->current_tsf = le64_to_cpu(int_data->tsf); diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index a63d0fd28423..e4a5e2bead70 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -83,10 +83,6 @@ static int vnt_cmd_complete(struct vnt_private *priv) priv->command_state = WLAN_CMD_CHANGE_ANTENNA_START; break; - case WLAN_CMD_11H_CHSW: - priv->command_state = WLAN_CMD_11H_CHSW_START; - break; - default: break; } @@ -163,10 +159,6 @@ void vnt_run_command(struct work_struct *work) } break; - case WLAN_CMD_11H_CHSW_START: - vnt_set_channel(priv, priv->hw->conf.chandef.chan->hw_value); - break; - default: break; } diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 0fc2c402fef3..79df04a6afae 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -40,8 +40,7 @@ enum vnt_cmd { WLAN_CMD_SETPOWER, WLAN_CMD_TBTT_WAKEUP, WLAN_CMD_BECON_SEND, - WLAN_CMD_CHANGE_ANTENNA, - WLAN_CMD_11H_CHSW, + WLAN_CMD_CHANGE_ANTENNA }; #define CMD_Q_SIZE 32 @@ -53,7 +52,6 @@ enum vnt_cmd_state { WLAN_CMD_TBTT_WAKEUP_START, WLAN_CMD_BECON_SEND_START, WLAN_CMD_CHANGE_ANTENNA_START, - WLAN_CMD_11H_CHSW_START, WLAN_CMD_IDLE }; -- cgit From 0871dc692655b4781b36918f52617149f45d6ffc Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:30 +0100 Subject: staging: vt6656: vnt_get_duration_le fix typo piv to priv Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 0febd03d38da..5d2072fa3afe 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -180,20 +180,20 @@ static __le16 vnt_get_rtscts_rsvtime_le(struct vnt_private *priv, return cpu_to_le16((u16)rrv_time); } -static __le16 vnt_get_duration_le(struct vnt_private *piv, +static __le16 vnt_get_duration_le(struct vnt_private *priv, u8 pkt_type, int need_ack) { u32 ack_time = 0; if (need_ack) { if (pkt_type == PK_TYPE_11B) - ack_time = vnt_get_frame_time(piv->preamble_type, - pkt_type, 14, piv->top_cck_basic_rate); + ack_time = vnt_get_frame_time(priv->preamble_type, + pkt_type, 14, priv->top_cck_basic_rate); else - ack_time = vnt_get_frame_time(piv->preamble_type, - pkt_type, 14, piv->top_ofdm_basic_rate); + ack_time = vnt_get_frame_time(priv->preamble_type, + pkt_type, 14, priv->top_ofdm_basic_rate); - return cpu_to_le16((u16)(piv->sifs + ack_time)); + return cpu_to_le16((u16)(priv->sifs + ack_time)); } return 0; -- cgit From e8c9875c77e59fe6af7c24949c4900a0f069b130 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:31 +0100 Subject: staging: vt6656: rxtx move pkt_type into vnt_usb_send_context Removing pkt_type from functions Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/rxtx.c | 208 +++++++++++++++++++++------------------- 2 files changed, 109 insertions(+), 100 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 120d3250626d..0d5ecd645e54 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -235,6 +235,7 @@ struct vnt_usb_send_context { u16 tx_hdr_size; u8 type; u8 pkt_no; + u8 pkt_type; u8 fb_option; bool in_use; unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 5d2072fa3afe..790625196f20 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -254,7 +254,7 @@ static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, - u8 pkt_type, u16 rate, struct vnt_tx_datahead_g *buf, + u16 rate, struct vnt_tx_datahead_g *buf, u32 frame_len, int need_ack) { @@ -263,7 +263,7 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, (struct ieee80211_hdr *)tx_context->skb->data; /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, frame_len, rate, tx_context->pkt_type, &buf->a); vnt_get_phy_field(priv, frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); @@ -274,7 +274,8 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, buf->duration_a = dur; buf->duration_b = dur; } else { - buf->duration_a = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_a = vnt_get_duration_le(priv, + tx_context->pkt_type, need_ack); buf->duration_b = vnt_get_duration_le(priv, PK_TYPE_11B, need_ack); } @@ -289,23 +290,26 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, - u8 pkt_type, u16 rate, struct vnt_tx_datahead_g_fb *buf, + u16 rate, struct vnt_tx_datahead_g_fb *buf, u32 frame_len, int need_ack) { struct vnt_private *priv = tx_context->priv; /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, frame_len, rate, tx_context->pkt_type, &buf->a); vnt_get_phy_field(priv, frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ - buf->duration_a = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_a = vnt_get_duration_le(priv, tx_context->pkt_type, + need_ack); buf->duration_b = vnt_get_duration_le(priv, PK_TYPE_11B, need_ack); - buf->duration_a_f0 = vnt_get_duration_le(priv, pkt_type, need_ack); - buf->duration_a_f1 = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration_a_f0 = vnt_get_duration_le(priv, tx_context->pkt_type, + need_ack); + buf->duration_a_f1 = vnt_get_duration_le(priv, tx_context->pkt_type, + need_ack); buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); buf->time_stamp_off_b = vnt_time_stamp_off(priv, @@ -317,10 +321,11 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, - u8 pkt_type, u16 rate, struct vnt_tx_datahead_a_fb *buf, + u16 rate, struct vnt_tx_datahead_a_fb *buf, u32 frame_len, int need_ack) { struct vnt_private *priv = tx_context->priv; + u8 pkt_type = tx_context->pkt_type; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); @@ -338,7 +343,7 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, - u8 pkt_type, u16 rate, struct vnt_tx_datahead_ab *buf, + u16 rate, struct vnt_tx_datahead_ab *buf, u32 frame_len, int need_ack) { struct vnt_private *priv = tx_context->priv; @@ -346,7 +351,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, (struct ieee80211_hdr *)tx_context->skb->data; /* Get SignalField,ServiceField,Length */ - vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->ab); + vnt_get_phy_field(priv, frame_len, rate, + tx_context->pkt_type, &buf->ab); /* Get Duration and TimeStampOff */ if (ieee80211_is_pspoll(hdr->frame_control)) { @@ -354,7 +360,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, buf->duration = dur; } else { - buf->duration = vnt_get_duration_le(priv, pkt_type, need_ack); + buf->duration = vnt_get_duration_le(priv, tx_context->pkt_type, + need_ack); } buf->time_stamp_off = vnt_time_stamp_off(priv, rate); @@ -381,112 +388,109 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate) + struct vnt_rts_g *buf, u32 frame_len, int need_ack, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); - vnt_get_phy_field(priv, rts_frame_len, - priv->top_ofdm_basic_rate, pkt_type, &buf->a); + vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, + tx_context->pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, - frame_len, pkt_type, current_rate, need_ack); + frame_len, tx_context->pkt_type, current_rate, need_ack); buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, - frame_len, pkt_type, current_rate, need_ack); + frame_len, tx_context->pkt_type, current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, - &buf->data_head, frame_len, need_ack); + return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head, + frame_len, need_ack); } static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate) + struct vnt_rts_g_fb *buf, u32 frame_len, int need_ack, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); - vnt_get_phy_field(priv, rts_frame_len, - priv->top_ofdm_basic_rate, pkt_type, &buf->a); - + vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, + tx_context->pkt_type, &buf->a); buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, - frame_len, pkt_type, current_rate, need_ack); + frame_len, tx_context->pkt_type, current_rate, need_ack); buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, - frame_len, pkt_type, current_rate, need_ack); - + frame_len, tx_context->pkt_type, current_rate, need_ack); buf->rts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_aa_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); buf->rts_duration_aa_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, current_rate, - &buf->data_head, frame_len, need_ack); + return vnt_rxtx_datahead_g_fb(tx_context, current_rate, &buf->data_head, + frame_len, need_ack); } static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_ab *buf, u8 pkt_type, u32 frame_len, int need_ack, + struct vnt_rts_ab *buf, u32 frame_len, int need_ack, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; - vnt_get_phy_field(priv, rts_frame_len, - priv->top_ofdm_basic_rate, pkt_type, &buf->ab); + vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, + tx_context->pkt_type, &buf->ab); buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack); + tx_context->pkt_type, + current_rate, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); - return vnt_rxtx_datahead_ab(tx_context, pkt_type, current_rate, - &buf->data_head, frame_len, need_ack); + return vnt_rxtx_datahead_ab(tx_context, current_rate, + &buf->data_head, frame_len, need_ack); } static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_a_fb *buf, u8 pkt_type, u32 frame_len, int need_ack, - u16 current_rate) + struct vnt_rts_a_fb *buf, u32 frame_len, int need_ack, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; vnt_get_phy_field(priv, rts_frame_len, - priv->top_ofdm_basic_rate, pkt_type, &buf->a); + priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, - pkt_type, current_rate, need_ack); + tx_context->pkt_type, + current_rate, need_ack); buf->rts_duration_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, - frame_len, pkt_type, priv->tx_rate_fb0, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); buf->rts_duration_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, - frame_len, pkt_type, priv->tx_rate_fb1, need_ack); + frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); - return vnt_rxtx_datahead_a_fb(tx_context, pkt_type, current_rate, - &buf->data_head, frame_len, need_ack); + return vnt_rxtx_datahead_a_fb(tx_context, current_rate, &buf->data_head, + frame_len, need_ack); } static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, - u8 pkt_type, union vnt_tx_data_head *head, u32 frame_len, + union vnt_tx_data_head *head, u32 frame_len, int need_ack, u16 current_rate) { struct vnt_private *priv = tx_context->priv; @@ -502,15 +506,15 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, cts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, - frame_len, pkt_type, + frame_len, tx_context->pkt_type, current_rate, need_ack); /* Get CTSDuration_ba_f0 */ buf->cts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA_F0, frame_len, pkt_type, + CTSDUR_BA_F0, frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); /* Get CTSDuration_ba_f1 */ buf->cts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA_F1, frame_len, pkt_type, + CTSDUR_BA_F1, frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); /* Get CTS Frame body */ buf->data.duration = buf->duration_ba; @@ -519,9 +523,9 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); - return vnt_rxtx_datahead_g_fb(tx_context, pkt_type, - current_rate, &buf->data_head, frame_len, - need_ack); + return vnt_rxtx_datahead_g_fb(tx_context, current_rate, + &buf->data_head, frame_len, + need_ack); } else { struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ @@ -529,7 +533,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get CTSDuration_ba */ buf->duration_ba = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA, frame_len, pkt_type, + CTSDUR_BA, frame_len, tx_context->pkt_type, current_rate, need_ack); /*Get CTS Frame body*/ buf->data.duration = buf->duration_ba; @@ -538,7 +542,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); - return vnt_rxtx_datahead_g(tx_context, pkt_type, current_rate, + return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head, frame_len, need_ack); } @@ -546,22 +550,23 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, - int need_ack, u16 current_rate, bool need_mic) + union vnt_tx_head *tx_head, u32 frame_size, int need_ack, + u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; buf->rts_rrv_time_aa = vnt_get_rtscts_rsvtime_le(priv, 2, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); buf->rts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 1, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); buf->rts_rrv_time_bb = vnt_get_rtscts_rsvtime_le(priv, 0, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); - buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, frame_size, - current_rate, need_ack); + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, + frame_size, current_rate, + need_ack); buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, priv->top_cck_basic_rate, need_ack); @@ -570,106 +575,108 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, if (tx_context->fb_option) return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, - pkt_type, frame_size, need_ack, current_rate); + frame_size, need_ack, current_rate); - return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, - pkt_type, frame_size, need_ack, current_rate); + return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, frame_size, + need_ack, current_rate); } static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, - int need_ack, u16 current_rate, bool need_mic) + union vnt_tx_head *tx_head, u32 frame_size, int need_ack, + u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; union vnt_tx_data_head *head = &tx_head->tx_cts.tx.head; - - buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, pkt_type, + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, frame_size, current_rate, need_ack); buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, priv->top_cck_basic_rate, need_ack); buf->cts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 3, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); if (need_mic) head = &tx_head->tx_cts.tx.mic.head; /* Fill CTS */ - return vnt_fill_cts_head(tx_context, pkt_type, head, frame_size, - need_ack, current_rate); + return vnt_fill_cts_head(tx_context, + head, frame_size, need_ack, current_rate); } static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u8 pkt_type, u32 frame_size, + union vnt_tx_head *tx_head, u32 frame_size, int need_ack, u16 current_rate, bool need_rts, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; union vnt_tx_data_head *head = &tx_head->tx_ab.tx.head; - buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, pkt_type, + buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, frame_size, current_rate, need_ack); if (need_mic) head = &tx_head->tx_ab.tx.mic.head; if (need_rts) { - if (pkt_type == PK_TYPE_11B) + if (tx_context->pkt_type == PK_TYPE_11B) buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 0, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); else /* PK_TYPE_11A */ buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 2, - pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_size, current_rate); - if (tx_context->fb_option && pkt_type == PK_TYPE_11A) + if (tx_context->fb_option && + tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_rts_a_fb_head(tx_context, - &head->rts_a_fb, pkt_type, frame_size, - need_ack, current_rate); + &head->rts_a_fb, + frame_size, need_ack, + current_rate); return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - pkt_type, frame_size, need_ack, current_rate); + frame_size, need_ack, current_rate); } - if (pkt_type == PK_TYPE_11A) - return vnt_rxtx_datahead_a_fb(tx_context, pkt_type, - current_rate, &head->data_head_a_fb, - frame_size, need_ack); + if (tx_context->pkt_type == PK_TYPE_11A) + return vnt_rxtx_datahead_a_fb(tx_context, current_rate, + &head->data_head_a_fb, + frame_size, need_ack); - return vnt_rxtx_datahead_ab(tx_context, pkt_type, current_rate, - &head->data_head_ab, frame_size, need_ack); + return vnt_rxtx_datahead_ab(tx_context, current_rate, + &head->data_head_ab, frame_size, need_ack); } static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, - u8 pkt_type, u16 current_rate, struct vnt_tx_buffer *tx_buffer, + u16 current_rate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, int need_ack, bool need_rts) { - if (pkt_type == PK_TYPE_11GB || pkt_type == PK_TYPE_11GA) { + if (tx_context->pkt_type == PK_TYPE_11GB || + tx_context->pkt_type == PK_TYPE_11GA) { if (need_rts) { if (need_mic) *mic_hdr = &tx_buffer-> tx_head.tx_rts.tx.mic.hdr; return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - pkt_type, frame_size, need_ack, - current_rate, need_mic); + frame_size, need_ack, current_rate, + need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; - return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, pkt_type, - frame_size, need_ack, current_rate, need_mic); + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, frame_size, + need_ack, current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, pkt_type, - frame_size, need_ack, current_rate, need_rts, need_mic); + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, frame_size, + need_ack, current_rate, need_rts, need_mic); } static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, @@ -785,6 +792,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) } tx_context->skb = skb; + tx_context->pkt_type = pkt_type; spin_unlock_irqrestore(&priv->lock, flags); @@ -889,9 +897,9 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->fb_option = fb_option; - duration_id = vnt_generate_tx_parameter(tx_context, pkt_type, - current_rate, tx_buffer, &mic_hdr, need_mic, frame_size, - need_ack, need_rts); + duration_id = vnt_generate_tx_parameter(tx_context, current_rate, + tx_buffer, &mic_hdr, need_mic, + frame_size, need_ack, need_rts); tx_header_size = tx_context->tx_hdr_size; if (!tx_header_size) { -- cgit From 2eca8dbb4cfb571a179f691f514ef35073d926ba Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:32 +0100 Subject: staging: vt6656: move need_ack into into vnt_usb_send_context Fixing need_ack to u8 and removing from function declarations. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/rxtx.c | 89 +++++++++++++++++++++++------------------ 2 files changed, 52 insertions(+), 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 0d5ecd645e54..9d4287773355 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -236,6 +236,7 @@ struct vnt_usb_send_context { u8 type; u8 pkt_no; u8 pkt_type; + u8 need_ack; u8 fb_option; bool in_use; unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 790625196f20..81086abf8dd2 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -255,12 +255,13 @@ static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, u16 rate, struct vnt_tx_datahead_g *buf, - u32 frame_len, int need_ack) + u32 frame_len) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; + u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, tx_context->pkt_type, &buf->a); @@ -291,9 +292,10 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, u16 rate, struct vnt_tx_datahead_g_fb *buf, - u32 frame_len, int need_ack) + u32 frame_len) { struct vnt_private *priv = tx_context->priv; + u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, tx_context->pkt_type, &buf->a); @@ -322,10 +324,11 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, u16 rate, struct vnt_tx_datahead_a_fb *buf, - u32 frame_len, int need_ack) + u32 frame_len) { struct vnt_private *priv = tx_context->priv; u8 pkt_type = tx_context->pkt_type; + u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); @@ -344,11 +347,12 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, u16 rate, struct vnt_tx_datahead_ab *buf, - u32 frame_len, int need_ack) + u32 frame_len) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; + u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, @@ -388,10 +392,12 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g *buf, u32 frame_len, int need_ack, u16 current_rate) + struct vnt_rts_g *buf, u32 frame_len, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; + u8 need_ack = tx_context->need_ack; + vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); @@ -408,14 +414,16 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head, - frame_len, need_ack); + frame_len); } static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g_fb *buf, u32 frame_len, int need_ack, u16 current_rate) + struct vnt_rts_g_fb *buf, u32 frame_len, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; + u8 need_ack = tx_context->need_ack; + vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); @@ -441,15 +449,16 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); return vnt_rxtx_datahead_g_fb(tx_context, current_rate, &buf->data_head, - frame_len, need_ack); + frame_len); } static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_ab *buf, u32 frame_len, int need_ack, - u16 current_rate) + struct vnt_rts_ab *buf, u32 frame_len, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; + u8 need_ack = tx_context->need_ack; + vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->ab); @@ -461,14 +470,16 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); return vnt_rxtx_datahead_ab(tx_context, current_rate, - &buf->data_head, frame_len, need_ack); + &buf->data_head, frame_len); } static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_a_fb *buf, u32 frame_len, int need_ack, u16 current_rate) + struct vnt_rts_a_fb *buf, u32 frame_len, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u16 rts_frame_len = 20; + u8 need_ack = tx_context->need_ack; + vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); @@ -486,15 +497,16 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); return vnt_rxtx_datahead_a_fb(tx_context, current_rate, &buf->data_head, - frame_len, need_ack); + frame_len); } static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, - union vnt_tx_data_head *head, u32 frame_len, - int need_ack, u16 current_rate) + union vnt_tx_data_head *head, u32 frame_len, u16 current_rate) { struct vnt_private *priv = tx_context->priv; u32 cts_frame_len = 14; + u8 need_ack = tx_context->need_ack; + if (!head) return 0; @@ -524,8 +536,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g_fb(tx_context, current_rate, - &buf->data_head, frame_len, - need_ack); + &buf->data_head, frame_len); } else { struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ @@ -543,19 +554,20 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g(tx_context, current_rate, - &buf->data_head, frame_len, need_ack); + &buf->data_head, frame_len); } return 0; } static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u32 frame_size, int need_ack, + union vnt_tx_head *tx_head, u32 frame_size, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; + u8 need_ack = tx_context->need_ack; buf->rts_rrv_time_aa = vnt_get_rtscts_rsvtime_le(priv, 2, tx_context->pkt_type, frame_size, current_rate); @@ -575,19 +587,21 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, if (tx_context->fb_option) return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, - frame_size, need_ack, current_rate); + frame_size, current_rate); return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, frame_size, - need_ack, current_rate); + current_rate); } static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u32 frame_size, int need_ack, + union vnt_tx_head *tx_head, u32 frame_size, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; union vnt_tx_data_head *head = &tx_head->tx_cts.tx.head; + u8 need_ack = tx_context->need_ack; + buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, frame_size, current_rate, need_ack); @@ -601,17 +615,17 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, head = &tx_head->tx_cts.tx.mic.head; /* Fill CTS */ - return vnt_fill_cts_head(tx_context, - head, frame_size, need_ack, current_rate); + return vnt_fill_cts_head(tx_context, head, frame_size, current_rate); } static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, union vnt_tx_head *tx_head, u32 frame_size, - int need_ack, u16 current_rate, bool need_rts, bool need_mic) + u16 current_rate, bool need_rts, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; union vnt_tx_data_head *head = &tx_head->tx_ab.tx.head; + u8 need_ack = tx_context->need_ack; buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, frame_size, current_rate, need_ack); @@ -631,26 +645,25 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_rts_a_fb_head(tx_context, &head->rts_a_fb, - frame_size, need_ack, - current_rate); + frame_size, current_rate); return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - frame_size, need_ack, current_rate); + frame_size, current_rate); } if (tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_datahead_a_fb(tx_context, current_rate, &head->data_head_a_fb, - frame_size, need_ack); + frame_size); return vnt_rxtx_datahead_ab(tx_context, current_rate, - &head->data_head_ab, frame_size, need_ack); + &head->data_head_ab, frame_size); } static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, u16 current_rate, struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, - int need_ack, bool need_rts) + bool need_rts) { if (tx_context->pkt_type == PK_TYPE_11GB || @@ -661,22 +674,21 @@ static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, tx_head.tx_rts.tx.mic.hdr; return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - frame_size, need_ack, current_rate, - need_mic); + frame_size, current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, frame_size, - need_ack, current_rate, need_mic); + current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, frame_size, - need_ack, current_rate, need_rts, need_mic); + current_rate, need_rts, need_mic); } static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, @@ -763,7 +775,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) u32 frame_size = 0; u16 tx_bytes, tx_header_size, tx_body_size, current_rate, duration_id; u8 pkt_type, fb_option = AUTO_FB_NONE; - bool need_rts = false, need_ack = false, is_pspoll = false; + bool need_rts = false, is_pspoll = false; bool need_mic = false; hdr = (struct ieee80211_hdr *)(skb->data); @@ -793,6 +805,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->skb = skb; tx_context->pkt_type = pkt_type; + tx_context->need_ack = false; spin_unlock_irqrestore(&priv->lock, flags); @@ -826,7 +839,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { tx_buffer_head->wFIFOCtl |= FIFOCTL_NEEDACK; - need_ack = true; + tx_context->need_ack = true; } if (ieee80211_has_retry(hdr->frame_control)) @@ -899,7 +912,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) duration_id = vnt_generate_tx_parameter(tx_context, current_rate, tx_buffer, &mic_hdr, need_mic, - frame_size, need_ack, need_rts); + frame_size, need_rts); tx_header_size = tx_context->tx_hdr_size; if (!tx_header_size) { -- cgit From 0f5567cb2f0d71e89badd1b090b3e0693b71d860 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:33 +0100 Subject: staging: vt6656: rxtx move frame_len/size into vnt_usb_send_context as frame_len Removing frame_len and frame_size from function declarations Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/rxtx.c | 115 ++++++++++++++++++++-------------------- 2 files changed, 58 insertions(+), 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 9d4287773355..d3c36af30186 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -232,6 +232,7 @@ struct vnt_usb_send_context { struct urb *urb; struct ieee80211_hdr *hdr; unsigned int buf_len; + u32 frame_len; u16 tx_hdr_size; u8 type; u8 pkt_no; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 81086abf8dd2..163bb1a55165 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -254,13 +254,13 @@ static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_g *buf, - u32 frame_len) + u16 rate, struct vnt_tx_datahead_g *buf) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -291,10 +291,10 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_g_fb *buf, - u32 frame_len) + u16 rate, struct vnt_tx_datahead_g_fb *buf) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -323,12 +323,12 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_a_fb *buf, - u32 frame_len) + u16 rate, struct vnt_tx_datahead_a_fb *buf) { struct vnt_private *priv = tx_context->priv; u8 pkt_type = tx_context->pkt_type; u8 need_ack = tx_context->need_ack; + u32 frame_len = tx_context->frame_len; /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_len, rate, pkt_type, &buf->a); @@ -346,12 +346,12 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_ab *buf, - u32 frame_len) + u16 rate, struct vnt_tx_datahead_ab *buf) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -392,13 +392,13 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g *buf, u32 frame_len, u16 current_rate) + struct vnt_rts_g *buf, u16 current_rate) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; - vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, @@ -413,14 +413,14 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head, - frame_len); + return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head); } static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g_fb *buf, u32 frame_len, u16 current_rate) + struct vnt_rts_g_fb *buf, u16 current_rate) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; @@ -448,14 +448,15 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g_fb(tx_context, current_rate, &buf->data_head, - frame_len); + return vnt_rxtx_datahead_g_fb(tx_context, + current_rate, &buf->data_head); } static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_ab *buf, u32 frame_len, u16 current_rate) + struct vnt_rts_ab *buf, u16 current_rate) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; @@ -470,13 +471,14 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); return vnt_rxtx_datahead_ab(tx_context, current_rate, - &buf->data_head, frame_len); + &buf->data_head); } static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_a_fb *buf, u32 frame_len, u16 current_rate) + struct vnt_rts_a_fb *buf, u16 current_rate) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; @@ -496,18 +498,18 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); - return vnt_rxtx_datahead_a_fb(tx_context, current_rate, &buf->data_head, - frame_len); + return vnt_rxtx_datahead_a_fb(tx_context, + current_rate, &buf->data_head); } static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, - union vnt_tx_data_head *head, u32 frame_len, u16 current_rate) + union vnt_tx_data_head *head, u16 current_rate) { struct vnt_private *priv = tx_context->priv; + u32 frame_len = tx_context->frame_len; u32 cts_frame_len = 14; u8 need_ack = tx_context->need_ack; - if (!head) return 0; @@ -536,7 +538,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g_fb(tx_context, current_rate, - &buf->data_head, frame_len); + &buf->data_head); } else { struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ @@ -554,32 +556,33 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); return vnt_rxtx_datahead_g(tx_context, current_rate, - &buf->data_head, frame_len); + &buf->data_head); } return 0; } static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u32 frame_size, + union vnt_tx_head *tx_head, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; buf->rts_rrv_time_aa = vnt_get_rtscts_rsvtime_le(priv, 2, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); buf->rts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 1, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); buf->rts_rrv_time_bb = vnt_get_rtscts_rsvtime_le(priv, 0, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, - frame_size, current_rate, + frame_len, current_rate, need_ack); - buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_size, + buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, frame_len, priv->top_cck_basic_rate, need_ack); if (need_mic) @@ -587,48 +590,47 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, if (tx_context->fb_option) return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, - frame_size, current_rate); + current_rate); - return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, frame_size, - current_rate); + return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, current_rate); } static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u32 frame_size, - u16 current_rate, bool need_mic) + union vnt_tx_head *tx_head, u16 current_rate, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; union vnt_tx_data_head *head = &tx_head->tx_cts.tx.head; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; - buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, - frame_size, current_rate, need_ack); + frame_len, current_rate, need_ack); buf->rrv_time_b = vnt_rxtx_rsvtime_le16(priv, PK_TYPE_11B, - frame_size, priv->top_cck_basic_rate, need_ack); + frame_len, priv->top_cck_basic_rate, need_ack); buf->cts_rrv_time_ba = vnt_get_rtscts_rsvtime_le(priv, 3, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); if (need_mic) head = &tx_head->tx_cts.tx.mic.head; /* Fill CTS */ - return vnt_fill_cts_head(tx_context, head, frame_size, current_rate); + return vnt_fill_cts_head(tx_context, head, current_rate); } static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u32 frame_size, + union vnt_tx_head *tx_head, u16 current_rate, bool need_rts, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; union vnt_tx_data_head *head = &tx_head->tx_ab.tx.head; + u32 frame_len = tx_context->frame_len; u8 need_ack = tx_context->need_ack; buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, - frame_size, current_rate, need_ack); + frame_len, current_rate, need_ack); if (need_mic) head = &tx_head->tx_ab.tx.mic.head; @@ -636,33 +638,32 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, if (need_rts) { if (tx_context->pkt_type == PK_TYPE_11B) buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 0, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); else /* PK_TYPE_11A */ buf->rts_rrv_time = vnt_get_rtscts_rsvtime_le(priv, 2, - tx_context->pkt_type, frame_size, current_rate); + tx_context->pkt_type, frame_len, current_rate); if (tx_context->fb_option && tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_rts_a_fb_head(tx_context, &head->rts_a_fb, - frame_size, current_rate); + current_rate); return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - frame_size, current_rate); + current_rate); } if (tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_datahead_a_fb(tx_context, current_rate, - &head->data_head_a_fb, - frame_size); + &head->data_head_a_fb); return vnt_rxtx_datahead_ab(tx_context, current_rate, - &head->data_head_ab, frame_size); + &head->data_head_ab); } static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, u16 current_rate, struct vnt_tx_buffer *tx_buffer, - struct vnt_mic_hdr **mic_hdr, u32 need_mic, u32 frame_size, + struct vnt_mic_hdr **mic_hdr, u32 need_mic, bool need_rts) { @@ -674,20 +675,20 @@ static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, tx_head.tx_rts.tx.mic.hdr; return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - frame_size, current_rate, need_mic); + current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; - return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, frame_size, + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, current_rate, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, frame_size, + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, current_rate, need_rts, need_mic); } @@ -772,7 +773,6 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) struct vnt_tx_fifo_head *tx_buffer_head; struct vnt_usb_send_context *tx_context; unsigned long flags; - u32 frame_size = 0; u16 tx_bytes, tx_header_size, tx_body_size, current_rate, duration_id; u8 pkt_type, fb_option = AUTO_FB_NONE; bool need_rts = false, is_pspoll = false; @@ -806,6 +806,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->skb = skb; tx_context->pkt_type = pkt_type; tx_context->need_ack = false; + tx_context->frame_len = skb->len + 4; spin_unlock_irqrestore(&priv->lock, flags); @@ -813,8 +814,6 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_buffer_head = &tx_buffer->fifo_head; tx_body_size = skb->len; - frame_size = tx_body_size + 4; - /*Set fifo controls */ if (pkt_type == PK_TYPE_11A) tx_buffer_head->wFIFOCtl = 0; @@ -880,7 +879,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) default: break; } - frame_size += tx_key->icv_len; + tx_context->frame_len += tx_key->icv_len; } tx_buffer_head->current_rate = cpu_to_le16(current_rate); @@ -912,7 +911,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) duration_id = vnt_generate_tx_parameter(tx_context, current_rate, tx_buffer, &mic_hdr, need_mic, - frame_size, need_rts); + need_rts); tx_header_size = tx_context->tx_hdr_size; if (!tx_header_size) { -- cgit From 798f06011f17c47ec8b5d11a5d37d2ab1eed8c05 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:34 +0100 Subject: staging; vt6656: rxtx add current_rate into vnt_usb_send_context as tx_rate Create u8 tx_rate and remove current_rate from function declarations Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 + drivers/staging/vt6656/rxtx.c | 91 ++++++++++++++++++++--------------------- 2 files changed, 45 insertions(+), 47 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index d3c36af30186..6b7bb8c99b1e 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -234,6 +234,7 @@ struct vnt_usb_send_context { unsigned int buf_len; u32 frame_len; u16 tx_hdr_size; + u16 tx_rate; u8 type; u8 pkt_no; u8 pkt_type; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 163bb1a55165..7c92d1b9917c 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -254,13 +254,14 @@ static u16 vnt_mac_hdr_pos(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_g *buf) + struct vnt_tx_datahead_g *buf) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; u32 frame_len = tx_context->frame_len; + u16 rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -291,10 +292,11 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_g_fb *buf) + struct vnt_tx_datahead_g_fb *buf) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; + u16 rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -323,9 +325,10 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_a_fb *buf) + struct vnt_tx_datahead_a_fb *buf) { struct vnt_private *priv = tx_context->priv; + u16 rate = tx_context->tx_rate; u8 pkt_type = tx_context->pkt_type; u8 need_ack = tx_context->need_ack; u32 frame_len = tx_context->frame_len; @@ -346,12 +349,13 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, - u16 rate, struct vnt_tx_datahead_ab *buf) + struct vnt_tx_datahead_ab *buf) { struct vnt_private *priv = tx_context->priv; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_context->skb->data; u32 frame_len = tx_context->frame_len; + u16 rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; /* Get SignalField,ServiceField,Length */ @@ -392,11 +396,12 @@ static int vnt_fill_ieee80211_rts(struct vnt_usb_send_context *tx_context, } static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g *buf, u16 current_rate) + struct vnt_rts_g *buf) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; + u16 current_rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, @@ -413,18 +418,18 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g(tx_context, current_rate, &buf->data_head); + return vnt_rxtx_datahead_g(tx_context, &buf->data_head); } static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_g_fb *buf, u16 current_rate) + struct vnt_rts_g_fb *buf) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; - vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, @@ -448,15 +453,15 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); - return vnt_rxtx_datahead_g_fb(tx_context, - current_rate, &buf->data_head); + return vnt_rxtx_datahead_g_fb(tx_context, &buf->data_head); } static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_ab *buf, u16 current_rate) + struct vnt_rts_ab *buf) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; @@ -470,19 +475,18 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); - return vnt_rxtx_datahead_ab(tx_context, current_rate, - &buf->data_head); + return vnt_rxtx_datahead_ab(tx_context, &buf->data_head); } static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, - struct vnt_rts_a_fb *buf, u16 current_rate) + struct vnt_rts_a_fb *buf) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; u8 need_ack = tx_context->need_ack; - vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); @@ -498,16 +502,16 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); - return vnt_rxtx_datahead_a_fb(tx_context, - current_rate, &buf->data_head); + return vnt_rxtx_datahead_a_fb(tx_context, &buf->data_head); } static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, - union vnt_tx_data_head *head, u16 current_rate) + union vnt_tx_data_head *head) { struct vnt_private *priv = tx_context->priv; u32 frame_len = tx_context->frame_len; u32 cts_frame_len = 14; + u16 current_rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; if (!head) @@ -537,8 +541,7 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); - return vnt_rxtx_datahead_g_fb(tx_context, current_rate, - &buf->data_head); + return vnt_rxtx_datahead_g_fb(tx_context, &buf->data_head); } else { struct vnt_cts *buf = &head->cts_g; /* Get SignalField,ServiceField,Length */ @@ -555,21 +558,20 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, memcpy(buf->data.ra, priv->current_net_addr, ETH_ALEN); - return vnt_rxtx_datahead_g(tx_context, current_rate, - &buf->data_head); + return vnt_rxtx_datahead_g(tx_context, &buf->data_head); } return 0; } static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, - u16 current_rate, bool need_mic) + union vnt_tx_head *tx_head, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_rts *buf = &tx_head->tx_rts.rts; union vnt_tx_data_head *head = &tx_head->tx_rts.tx.head; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; buf->rts_rrv_time_aa = vnt_get_rtscts_rsvtime_le(priv, 2, @@ -589,19 +591,19 @@ static u16 vnt_rxtx_rts(struct vnt_usb_send_context *tx_context, head = &tx_head->tx_rts.tx.mic.head; if (tx_context->fb_option) - return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb, - current_rate); + return vnt_rxtx_rts_g_fb_head(tx_context, &head->rts_g_fb); - return vnt_rxtx_rts_g_head(tx_context, &head->rts_g, current_rate); + return vnt_rxtx_rts_g_head(tx_context, &head->rts_g); } static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, u16 current_rate, bool need_mic) + union vnt_tx_head *tx_head, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_cts *buf = &tx_head->tx_cts.cts; union vnt_tx_data_head *head = &tx_head->tx_cts.tx.head; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; buf->rrv_time_a = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, @@ -616,17 +618,17 @@ static u16 vnt_rxtx_cts(struct vnt_usb_send_context *tx_context, head = &tx_head->tx_cts.tx.mic.head; /* Fill CTS */ - return vnt_fill_cts_head(tx_context, head, current_rate); + return vnt_fill_cts_head(tx_context, head); } static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, - union vnt_tx_head *tx_head, - u16 current_rate, bool need_rts, bool need_mic) + union vnt_tx_head *tx_head, bool need_rts, bool need_mic) { struct vnt_private *priv = tx_context->priv; struct vnt_rrv_time_ab *buf = &tx_head->tx_ab.ab; union vnt_tx_data_head *head = &tx_head->tx_ab.tx.head; u32 frame_len = tx_context->frame_len; + u16 current_rate = tx_context->tx_rate; u8 need_ack = tx_context->need_ack; buf->rrv_time = vnt_rxtx_rsvtime_le16(priv, tx_context->pkt_type, @@ -646,23 +648,20 @@ static u16 vnt_rxtx_ab(struct vnt_usb_send_context *tx_context, if (tx_context->fb_option && tx_context->pkt_type == PK_TYPE_11A) return vnt_rxtx_rts_a_fb_head(tx_context, - &head->rts_a_fb, - current_rate); + &head->rts_a_fb); - return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab, - current_rate); + return vnt_rxtx_rts_ab_head(tx_context, &head->rts_ab); } if (tx_context->pkt_type == PK_TYPE_11A) - return vnt_rxtx_datahead_a_fb(tx_context, current_rate, + return vnt_rxtx_datahead_a_fb(tx_context, &head->data_head_a_fb); - return vnt_rxtx_datahead_ab(tx_context, current_rate, - &head->data_head_ab); + return vnt_rxtx_datahead_ab(tx_context, &head->data_head_ab); } static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, - u16 current_rate, struct vnt_tx_buffer *tx_buffer, + struct vnt_tx_buffer *tx_buffer, struct vnt_mic_hdr **mic_hdr, u32 need_mic, bool need_rts) { @@ -675,21 +674,19 @@ static u16 vnt_generate_tx_parameter(struct vnt_usb_send_context *tx_context, tx_head.tx_rts.tx.mic.hdr; return vnt_rxtx_rts(tx_context, &tx_buffer->tx_head, - current_rate, need_mic); + need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_cts.tx.mic.hdr; - return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, - current_rate, need_mic); + return vnt_rxtx_cts(tx_context, &tx_buffer->tx_head, need_mic); } if (need_mic) *mic_hdr = &tx_buffer->tx_head.tx_ab.tx.mic.hdr; - return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, - current_rate, need_rts, need_mic); + return vnt_rxtx_ab(tx_context, &tx_buffer->tx_head, need_rts, need_mic); } static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, @@ -807,6 +804,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->pkt_type = pkt_type; tx_context->need_ack = false; tx_context->frame_len = skb->len + 4; + tx_context->tx_rate = current_rate; spin_unlock_irqrestore(&priv->lock, flags); @@ -909,9 +907,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_context->fb_option = fb_option; - duration_id = vnt_generate_tx_parameter(tx_context, current_rate, - tx_buffer, &mic_hdr, need_mic, - need_rts); + duration_id = vnt_generate_tx_parameter(tx_context, tx_buffer, &mic_hdr, + need_mic, need_rts); tx_header_size = tx_context->tx_hdr_size; if (!tx_header_size) { -- cgit From cca48e3ce4ab73a05a53a862b091dccdc41e35dd Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sun, 20 Jul 2014 15:33:35 +0100 Subject: staging: vt6656: struct vnt_usb_send_context context into vnt_get_duration_le Removing priv, frame_length and need_ack Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 122 +++++++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 54 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7c92d1b9917c..4fc93f0b39dc 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -199,10 +199,13 @@ static __le16 vnt_get_duration_le(struct vnt_private *priv, return 0; } -static __le16 vnt_get_rtscts_duration_le(struct vnt_private *priv, u8 dur_type, - u32 frame_length, u8 pkt_type, u16 rate, int need_ack) +static __le16 vnt_get_rtscts_duration_le(struct vnt_usb_send_context *context, + u8 dur_type, u8 pkt_type, u16 rate) { + struct vnt_private *priv = context->priv; u32 cts_time = 0, dur_time = 0; + u32 frame_length = context->frame_len; + u8 need_ack = context->need_ack; switch (dur_type) { case RTSDUR_BB: @@ -399,22 +402,23 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g *buf) { struct vnt_private *priv = tx_context->priv; - u32 frame_len = tx_context->frame_len; u16 rts_frame_len = 20; u16 current_rate = tx_context->tx_rate; - u8 need_ack = tx_context->need_ack; vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); - buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, - frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); - buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, - frame_len, tx_context->pkt_type, current_rate, need_ack); - buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, - frame_len, tx_context->pkt_type, current_rate, need_ack); + buf->duration_bb = vnt_get_rtscts_duration_le(tx_context, RTSDUR_BB, + PK_TYPE_11B, + priv->top_cck_basic_rate); + buf->duration_aa = vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA, + tx_context->pkt_type, + current_rate); + buf->duration_ba = vnt_get_rtscts_duration_le(tx_context, RTSDUR_BA, + tx_context->pkt_type, + current_rate); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -425,31 +429,40 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_g_fb *buf) { struct vnt_private *priv = tx_context->priv; - u32 frame_len = tx_context->frame_len; u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; - u8 need_ack = tx_context->need_ack; vnt_get_phy_field(priv, rts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); - buf->duration_bb = vnt_get_rtscts_duration_le(priv, RTSDUR_BB, - frame_len, PK_TYPE_11B, priv->top_cck_basic_rate, need_ack); - buf->duration_aa = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, - frame_len, tx_context->pkt_type, current_rate, need_ack); - buf->duration_ba = vnt_get_rtscts_duration_le(priv, RTSDUR_BA, - frame_len, tx_context->pkt_type, current_rate, need_ack); - - buf->rts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F0, - frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); - buf->rts_duration_aa_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, - frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); - buf->rts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_BA_F1, - frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); - buf->rts_duration_aa_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, - frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); + buf->duration_bb = vnt_get_rtscts_duration_le(tx_context, RTSDUR_BB, + PK_TYPE_11B, + priv->top_cck_basic_rate); + buf->duration_aa = vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA, + tx_context->pkt_type, + current_rate); + buf->duration_ba = vnt_get_rtscts_duration_le(tx_context, RTSDUR_BA, + tx_context->pkt_type, + current_rate); + + buf->rts_duration_ba_f0 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_BA_F0, + tx_context->pkt_type, + priv->tx_rate_fb0); + buf->rts_duration_aa_f0 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA_F0, + tx_context->pkt_type, + priv->tx_rate_fb0); + buf->rts_duration_ba_f1 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_BA_F1, + tx_context->pkt_type, + priv->tx_rate_fb1); + buf->rts_duration_aa_f1 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA_F1, + tx_context->pkt_type, + priv->tx_rate_fb1); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration_aa); @@ -460,18 +473,15 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_ab *buf) { struct vnt_private *priv = tx_context->priv; - u32 frame_len = tx_context->frame_len; u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; - u8 need_ack = tx_context->need_ack; - vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->ab); - buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, + buf->duration = vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA, tx_context->pkt_type, - current_rate, need_ack); + current_rate); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -482,23 +492,25 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_usb_send_context *tx_context, struct vnt_rts_a_fb *buf) { struct vnt_private *priv = tx_context->priv; - u32 frame_len = tx_context->frame_len; u16 current_rate = tx_context->tx_rate; u16 rts_frame_len = 20; - u8 need_ack = tx_context->need_ack; vnt_get_phy_field(priv, rts_frame_len, priv->top_ofdm_basic_rate, tx_context->pkt_type, &buf->a); - buf->duration = vnt_get_rtscts_duration_le(priv, RTSDUR_AA, frame_len, + buf->duration = vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA, tx_context->pkt_type, - current_rate, need_ack); + current_rate); - buf->rts_duration_f0 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F0, - frame_len, tx_context->pkt_type, priv->tx_rate_fb0, need_ack); + buf->rts_duration_f0 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA_F0, + tx_context->pkt_type, + priv->tx_rate_fb0); - buf->rts_duration_f1 = vnt_get_rtscts_duration_le(priv, RTSDUR_AA_F1, - frame_len, tx_context->pkt_type, priv->tx_rate_fb1, need_ack); + buf->rts_duration_f1 = + vnt_get_rtscts_duration_le(tx_context, RTSDUR_AA_F1, + tx_context->pkt_type, + priv->tx_rate_fb1); vnt_fill_ieee80211_rts(tx_context, &buf->data, buf->duration); @@ -509,10 +521,8 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, union vnt_tx_data_head *head) { struct vnt_private *priv = tx_context->priv; - u32 frame_len = tx_context->frame_len; u32 cts_frame_len = 14; u16 current_rate = tx_context->tx_rate; - u8 need_ack = tx_context->need_ack; if (!head) return 0; @@ -523,17 +533,20 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, cts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); - buf->duration_ba = vnt_get_rtscts_duration_le(priv, CTSDUR_BA, - frame_len, tx_context->pkt_type, - current_rate, need_ack); + buf->duration_ba = + vnt_get_rtscts_duration_le(tx_context, CTSDUR_BA, + tx_context->pkt_type, + current_rate); /* Get CTSDuration_ba_f0 */ - buf->cts_duration_ba_f0 = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA_F0, frame_len, tx_context->pkt_type, - priv->tx_rate_fb0, need_ack); + buf->cts_duration_ba_f0 = + vnt_get_rtscts_duration_le(tx_context, CTSDUR_BA_F0, + tx_context->pkt_type, + priv->tx_rate_fb0); /* Get CTSDuration_ba_f1 */ - buf->cts_duration_ba_f1 = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA_F1, frame_len, tx_context->pkt_type, - priv->tx_rate_fb1, need_ack); + buf->cts_duration_ba_f1 = + vnt_get_rtscts_duration_le(tx_context, CTSDUR_BA_F1, + tx_context->pkt_type, + priv->tx_rate_fb1); /* Get CTS Frame body */ buf->data.duration = buf->duration_ba; buf->data.frame_control = @@ -548,9 +561,10 @@ static u16 vnt_fill_cts_head(struct vnt_usb_send_context *tx_context, vnt_get_phy_field(priv, cts_frame_len, priv->top_cck_basic_rate, PK_TYPE_11B, &buf->b); /* Get CTSDuration_ba */ - buf->duration_ba = vnt_get_rtscts_duration_le(priv, - CTSDUR_BA, frame_len, tx_context->pkt_type, - current_rate, need_ack); + buf->duration_ba = + vnt_get_rtscts_duration_le(tx_context, CTSDUR_BA, + tx_context->pkt_type, + current_rate); /*Get CTS Frame body*/ buf->data.duration = buf->duration_ba; buf->data.frame_control = -- cgit From ba5a40d66422fbf9689a98c08a205200a1b47ac3 Mon Sep 17 00:00:00 2001 From: LABBE Corentin Date: Sat, 19 Jul 2014 19:34:40 +0200 Subject: staging: sep: No else is necessary after a break (reported by checkpatch) Signed-off-by: LABBE Corentin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/sep/sep_main.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/sep/sep_main.c b/drivers/staging/sep/sep_main.c index 75ca15e86a27..5188897e9267 100644 --- a/drivers/staging/sep/sep_main.c +++ b/drivers/staging/sep/sep_main.c @@ -2880,12 +2880,11 @@ static int sep_free_dma_tables_and_dcb(struct sep_device *sep, bool isapplet, if (is_kva) { error = -ENODEV; break; - } else { - error_temp = copy_to_user( + } + error_temp = copy_to_user( (void __user *)tail_pt, dcb_table_ptr->tail_data, dcb_table_ptr->tail_data_size); - } if (error_temp) { /* Release the DMA resource */ error = -EFAULT; -- cgit From f0949457ca0d69f7ce7b5a8313801b92169a84e0 Mon Sep 17 00:00:00 2001 From: LABBE Corentin Date: Sat, 19 Jul 2014 19:34:41 +0200 Subject: staging: sep: Fix misceanellous problems reported by checkpatch Signed-off-by: LABBE Corentin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/sep/sep_main.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/sep/sep_main.c b/drivers/staging/sep/sep_main.c index 5188897e9267..d24acfd5be6d 100644 --- a/drivers/staging/sep/sep_main.c +++ b/drivers/staging/sep/sep_main.c @@ -130,7 +130,6 @@ void sep_queue_status_remove(struct sep_device *sep, dev_dbg(&sep->pdev->dev, "[PID%d] sep_queue_status_remove return\n", current->pid); - return; } /** @@ -1736,7 +1735,7 @@ static void sep_debug_print_lli_tables(struct sep_device *sep, return; } - while ((unsigned long) lli_table_ptr->bus_address != 0xffffffff) { + while ((unsigned long)lli_table_ptr->bus_address != 0xffffffff) { dev_dbg(&sep->pdev->dev, "[PID%d] lli table %08lx, table_data_size is (hex) %lx\n", current->pid, table_count, table_data_size); @@ -1751,7 +1750,7 @@ static void sep_debug_print_lli_tables(struct sep_device *sep, dev_dbg(&sep->pdev->dev, "[PID%d] lli_table_ptr address is %08lx\n", current->pid, - (unsigned long) lli_table_ptr); + (unsigned long)lli_table_ptr); dev_dbg(&sep->pdev->dev, "[PID%d] phys address is %08lx block size is (hex) %x\n", -- cgit From bc0c9da55b25bc79363535da9ec20b1a144fe1c8 Mon Sep 17 00:00:00 2001 From: LABBE Corentin Date: Sat, 19 Jul 2014 19:34:42 +0200 Subject: staging: sep: Fix blank lines issue reported by checkpatch Signed-off-by: LABBE Corentin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/sep/sep_main.c | 47 ++++-------------------------------------- 1 file changed, 4 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/sep/sep_main.c b/drivers/staging/sep/sep_main.c index d24acfd5be6d..85fea5fc5e59 100644 --- a/drivers/staging/sep/sep_main.c +++ b/drivers/staging/sep/sep_main.c @@ -492,7 +492,6 @@ int sep_free_dma_table_data_handler(struct sep_device *sep, * memory is not available to the o/s at all. */ if (!(*dma_ctx)->secure_dma && dma->out_map_array) { - for (count = 0; count < dma->out_num_pages; count++) { dma_unmap_page(&sep->pdev->dev, dma->out_map_array[count].dma_addr, @@ -513,7 +512,6 @@ int sep_free_dma_table_data_handler(struct sep_device *sep, /* Again, we do this only for non secure dma */ if (!(*dma_ctx)->secure_dma && dma->out_page_array) { - for (count = 0; count < dma->out_num_pages; count++) { if (!PageReserved(dma->out_page_array[count])) @@ -633,7 +631,6 @@ static int sep_end_transaction_handler(struct sep_device *sep, return 0; } - /** * sep_release - close a SEP device * @inode: inode of SEP device @@ -766,7 +763,6 @@ static unsigned int sep_poll(struct file *filp, poll_table *wait) goto end_function; } - /* Add the event to the polling wait table */ dev_dbg(&sep->pdev->dev, "[PID%d] poll: calling wait sep_event\n", current->pid); @@ -856,7 +852,6 @@ static unsigned long sep_set_time(struct sep_device *sep) struct timeval time; u32 *time_addr; /* Address of time as seen by the kernel */ - do_gettimeofday(&time); /* Set value in the SYSTEM MEMORY offset */ @@ -905,7 +900,6 @@ int sep_send_command_handler(struct sep_device *sep) msg_pool += 1; if ((*msg_pool < 2) || (*msg_pool > SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES)) { - dev_warn(&sep->pdev->dev, "invalid message size\n"); error = -EPROTO; goto end_function; @@ -1023,7 +1017,6 @@ static int sep_crypto_dma( *dma_maps = sep_dma; return count_mapped; - } /** @@ -1053,7 +1046,6 @@ static int sep_crypto_lli( u32 data_size, enum dma_data_direction direction) { - int ct1; struct sep_lli_entry *sep_lli; struct sep_dma_map *sep_map; @@ -1317,7 +1309,6 @@ static int sep_lock_user_pages(struct sep_device *sep, (unsigned long)lli_array[0].bus_address, lli_array[0].block_size); - /* Check the size of the last page */ if (num_pages > 1) { lli_array[num_pages - 1].block_size = @@ -1662,7 +1653,6 @@ static void sep_build_lli_table(struct sep_device *sep, /* Set the output parameter */ *num_processed_entries_ptr += array_counter; - } /** @@ -1746,7 +1736,6 @@ static void sep_debug_print_lli_tables(struct sep_device *sep, /* Print entries of the table (without info entry) */ for (entries_count = 0; entries_count < num_table_entries; entries_count++, lli_table_ptr++) { - dev_dbg(&sep->pdev->dev, "[PID%d] lli_table_ptr address is %08lx\n", current->pid, @@ -1772,7 +1761,6 @@ static void sep_debug_print_lli_tables(struct sep_device *sep, current->pid, (unsigned long)lli_table_ptr->bus_address); - table_data_size = lli_table_ptr->block_size & 0xffffff; num_table_entries = (lli_table_ptr->block_size >> 24) & 0xff; @@ -1795,7 +1783,6 @@ static void sep_debug_print_lli_tables(struct sep_device *sep, #endif } - /** * sep_prepare_empty_lli_table - create a blank LLI table * @sep: pointer to struct sep_device @@ -1971,7 +1958,6 @@ static int sep_prepare_input_dma_table(struct sep_device *sep, /* Loop till all the entries in in array are processed */ while (current_entry < sep_lli_entries) { - /* Set the new input and output tables */ in_lli_table_ptr = (struct sep_lli_entry *)lli_table_alloc_addr; @@ -1987,10 +1973,8 @@ static int sep_prepare_input_dma_table(struct sep_device *sep, ((void *)sep->shared_addr + SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES)) { - error = -ENOMEM; goto end_function_error; - } /* Update the number of created tables */ @@ -2021,7 +2005,6 @@ static int sep_prepare_input_dma_table(struct sep_device *sep, ¤t_entry, &num_entries_in_table, table_data_size); if (info_entry_ptr == NULL) { - /* Set the output parameters to physical addresses */ *lli_table_ptr = sep_shared_area_virt_to_bus(sep, dma_in_lli_table_ptr); @@ -2070,7 +2053,6 @@ end_function_error: end_function: return error; - } /** @@ -2192,7 +2174,6 @@ static int sep_construct_dma_tables_from_lli( ((void *)sep->shared_addr + SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES)) { - dev_warn(&sep->pdev->dev, "dma table limit overrun\n"); return -ENOMEM; } @@ -2449,10 +2430,7 @@ static int sep_prepare_input_output_dma_table(struct sep_device *sep, goto end_function_free_lli_in; } - - } - - else { + } else { dev_dbg(&sep->pdev->dev, "[PID%d] Locking user input pages\n", current->pid); error = sep_lock_user_pages(sep, app_virt_in_addr, @@ -2553,7 +2531,6 @@ end_function_with_error: dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = NULL; kfree(lli_out_array); - end_function_free_lli_in: kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array); dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array = NULL; @@ -2562,9 +2539,7 @@ end_function_free_lli_in: kfree(lli_in_array); end_function: - return error; - } /** @@ -2702,7 +2677,6 @@ int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, dcb_table_ptr->out_vr_tail_pt = 0; if (isapplet) { - /* Check if there is enough data for DMA operation */ if (data_in_size < SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) { if (is_kva) { @@ -2828,10 +2802,8 @@ end_function_error: end_function: return error; - } - /** * sep_free_dma_tables_and_dcb - free DMA tables and DCBs * @sep: pointer to struct sep_device @@ -2962,7 +2934,6 @@ static int sep_prepare_dcb_handler(struct sep_device *sep, unsigned long arg, end_function: return error; - } /** @@ -3166,7 +3137,6 @@ static irqreturn_t sep_inthandler(int irq, void *dev_id) dev_dbg(&sep->pdev->dev, "sep int: IRR REG val: %x\n", reg_val); if (reg_val & (0x1 << 13)) { - /* Lock and update the counter of reply messages */ spin_lock_irqsave(&sep->snd_rply_lck, lock_irq_flag); sep->reply_ct++; @@ -3243,8 +3213,9 @@ static int sep_reconfig_shared_area(struct sep_device *sep) dev_warn(&sep->pdev->dev, "could not reconfig shared area\n"); dev_warn(&sep->pdev->dev, "result was %x\n", ret_val); ret_val = -ENOMEM; - } else + } else { ret_val = 0; + } dev_dbg(&sep->pdev->dev, "reconfig shared area end\n"); @@ -3431,7 +3402,6 @@ static ssize_t sep_create_dcb_dmatables_context(struct sep_device *sep, end_function: kfree(dcb_args); return error; - } /** @@ -3510,7 +3480,6 @@ int sep_create_dcb_dmatables_context_kernel(struct sep_device *sep, end_function: return error; - } /** @@ -3589,7 +3558,6 @@ end_function: return error; } - /** * sep_read - Returns results of an operation for fastcall interface * @filp: File pointer @@ -3637,7 +3605,6 @@ static ssize_t sep_read(struct file *filp, goto end_function_error; } - /* Wait for SEP to finish */ wait_event(sep->event_interrupt, test_bit(SEP_WORKING_LOCK_BIT, @@ -3710,7 +3677,6 @@ static inline ssize_t sep_fastcall_args_get(struct sep_device *sep, goto end_function; } - if (copy_from_user(args, buf_user, sizeof(struct sep_fastcall_hdr))) { error = -EFAULT; goto end_function; @@ -3812,7 +3778,6 @@ static ssize_t sep_write(struct file *filp, goto end_function_error; } - /* * Prepare contents of the shared area regions for * the operation into temporary buffers @@ -3922,6 +3887,7 @@ end_function: return error; } + /** * sep_seek - Handler for seek system call * @filp: File pointer @@ -3936,8 +3902,6 @@ static loff_t sep_seek(struct file *filp, loff_t offset, int origin) return -ENOSYS; } - - /** * sep_file_operations - file operation on sep device * @sep_ioctl: ioctl handler from user space call @@ -3990,7 +3954,6 @@ sep_sysfs_read(struct file *filp, struct kobject *kobj, if (queue_num > SEP_DOUBLEBUF_USERS_LIMIT) queue_num = SEP_DOUBLEBUF_USERS_LIMIT; - if (count < sizeof(queue_num) + (queue_num * sizeof(struct sep_queue_data))) { spin_unlock_irqrestore(&sep->sep_queue_lock, lck_flags); @@ -4060,7 +4023,6 @@ static int sep_register_driver_with_fs(struct sep_device *sep) return ret_val; } - /** *sep_probe - probe a matching PCI device *@pdev: pci_device @@ -4351,7 +4313,6 @@ static int sep_pci_suspend(struct device *dev) */ static int sep_pm_runtime_resume(struct device *dev) { - u32 retval2; u32 delay_count; struct sep_device *sep = sep_dev; -- cgit From f0ca3e87cc132b67c40ba1161cd02c8a2985ac4c Mon Sep 17 00:00:00 2001 From: Phong Tran Date: Sun, 20 Jul 2014 11:10:55 +0700 Subject: staging: android: ion: ion_cma_heap.c: Fix checkpatch warning This patch fix coding style: - Remove "fail memory allocation" waring - Remove return of void function Tested by compilation only Signed-off-by: Phong Tran Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/ion_cma_heap.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c index ce68ecfed31f..f8cabcbc39e5 100644 --- a/drivers/staging/android/ion/ion_cma_heap.c +++ b/drivers/staging/android/ion/ion_cma_heap.c @@ -76,10 +76,8 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer, return -EINVAL; info = kzalloc(sizeof(struct ion_cma_buffer_info), GFP_KERNEL); - if (!info) { - dev_err(dev, "Can't allocate buffer info\n"); + if (!info) return ION_CMA_ALLOCATE_FAILED; - } info->cpu_addr = dma_alloc_coherent(dev, len, &(info->handle), GFP_HIGHUSER | __GFP_ZERO); @@ -90,10 +88,8 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer, } info->table = kmalloc(sizeof(struct sg_table), GFP_KERNEL); - if (!info->table) { - dev_err(dev, "Fail to allocate sg table\n"); + if (!info->table) goto free_mem; - } if (ion_cma_get_sgtable (dev, info->table, info->cpu_addr, info->handle, len)) @@ -155,7 +151,6 @@ static struct sg_table *ion_cma_heap_map_dma(struct ion_heap *heap, static void ion_cma_heap_unmap_dma(struct ion_heap *heap, struct ion_buffer *buffer) { - return; } static int ion_cma_mmap(struct ion_heap *mapper, struct ion_buffer *buffer, -- cgit From bd9cb12febe86124998314c4c2f08a0e6e1f80c3 Mon Sep 17 00:00:00 2001 From: Riccardo Lucchese Date: Mon, 21 Jul 2014 12:15:55 +0200 Subject: staging: lustre: lov: Cleanup lov_check_set() in lov_request.c Make the code clearer by introducing a local variable and removing the unnecessary 'if' statement. Signed-off-by: Riccardo Lucchese Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lov/lov_request.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index ce830e45948d..da424de5e8e0 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -140,14 +140,14 @@ void lov_set_add_req(struct lov_request *req, struct lov_request_set *set) static int lov_check_set(struct lov_obd *lov, int idx) { - int rc = 0; + int rc; + struct lov_tgt_desc *tgt; mutex_lock(&lov->lov_lock); - if (lov->lov_tgts[idx] == NULL || - lov->lov_tgts[idx]->ltd_active || - (lov->lov_tgts[idx]->ltd_exp != NULL && - class_exp2cliimp(lov->lov_tgts[idx]->ltd_exp)->imp_connect_tried)) - rc = 1; + tgt = lov->lov_tgts[idx]; + rc = !tgt || tgt->ltd_active || + (tgt->ltd_exp && + class_exp2cliimp(tgt->ltd_exp)->imp_connect_tried); mutex_unlock(&lov->lov_lock); return rc; -- cgit From 5c816ad7647f70fa11b744fc999738f61d73892c Mon Sep 17 00:00:00 2001 From: Riccardo Lucchese Date: Mon, 21 Jul 2014 12:15:56 +0200 Subject: staging: lustre: lov: Add a blank line after declarations in lov_request.c Fix the following checkpatch.pl issue in lov_request.c: WARNING: Missing a blank line after declarations Signed-off-by: Riccardo Lucchese Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lov/lov_request.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index da424de5e8e0..887b4b08e6a5 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -142,14 +142,14 @@ static int lov_check_set(struct lov_obd *lov, int idx) { int rc; struct lov_tgt_desc *tgt; - mutex_lock(&lov->lov_lock); + mutex_lock(&lov->lov_lock); tgt = lov->lov_tgts[idx]; rc = !tgt || tgt->ltd_active || (tgt->ltd_exp && class_exp2cliimp(tgt->ltd_exp)->imp_connect_tried); - mutex_unlock(&lov->lov_lock); + return rc; } @@ -836,6 +836,7 @@ static int cb_getattr_update(void *cookie, int rc) { struct obd_info *oinfo = cookie; struct lov_request *lovreq; + lovreq = container_of(oinfo, struct lov_request, rq_oi); return lov_update_common_set(lovreq->rq_rqset, lovreq, rc); } @@ -1018,6 +1019,7 @@ static int cb_setattr_update(void *cookie, int rc) { struct obd_info *oinfo = cookie; struct lov_request *lovreq; + lovreq = container_of(oinfo, struct lov_request, rq_oi); return lov_update_setattr_set(lovreq->rq_rqset, lovreq, rc); } @@ -1141,6 +1143,7 @@ static int cb_update_punch(void *cookie, int rc) { struct obd_info *oinfo = cookie; struct lov_request *lovreq; + lovreq = container_of(oinfo, struct lov_request, rq_oi); return lov_update_punch_set(lovreq->rq_rqset, lovreq, rc); } -- cgit From e010f2af4b3dabad347c67a0baf3835d8da91cd3 Mon Sep 17 00:00:00 2001 From: Riccardo Lucchese Date: Mon, 21 Jul 2014 12:19:05 +0200 Subject: staging: lustre: lov: Add a space before open braces '{' in lov_request.c Fix the following checkpatch.pl issue in lov_request.c: ERROR: space required before the open brace '{' Signed-off-by: Riccardo Lucchese Acked-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lov/lov_request.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index 887b4b08e6a5..e4bb02a54b0d 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -478,7 +478,7 @@ int lov_prep_match_set(struct obd_export *exp, struct obd_info *oinfo, GOTO(out_set, rc = -ENOMEM); lockh->cookie = set->set_lockh->llh_handle.h_cookie; - for (i = 0; i < lsm->lsm_stripe_count; i++){ + for (i = 0; i < lsm->lsm_stripe_count; i++) { struct lov_oinfo *loi; struct lov_request *req; obd_off start, end; @@ -566,7 +566,7 @@ int lov_prep_cancel_set(struct obd_export *exp, struct obd_info *oinfo, } lockh->cookie = set->set_lockh->llh_handle.h_cookie; - for (i = 0; i < lsm->lsm_stripe_count; i++){ + for (i = 0; i < lsm->lsm_stripe_count; i++) { struct lov_request *req; struct lustre_handle *lov_lockhp; struct lov_oinfo *loi = lsm->lsm_oinfo[i]; @@ -734,7 +734,7 @@ int lov_prep_brw_set(struct obd_export *exp, struct obd_info *oinfo, /* alloc and initialize lov request */ shift = 0; - for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++){ + for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++) { struct lov_oinfo *loi = NULL; struct lov_request *req; -- cgit From 3ccc0fd52484f8967d696a1f23e1bf9b26e01902 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 20 Jul 2014 15:14:09 +0200 Subject: Staging: bcm: nvm.c: Shortened lines Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 64 +++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 8ce4d416baf8..76c86ebbeea8 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -2,35 +2,52 @@ #define DWORD unsigned int -static int BcmDoChipSelect(struct bcm_mini_adapter *Adapter, unsigned int offset); +static int BcmDoChipSelect(struct bcm_mini_adapter *Adapter, + unsigned int offset); static int BcmGetActiveDSD(struct bcm_mini_adapter *Adapter); static int BcmGetActiveISO(struct bcm_mini_adapter *Adapter); static unsigned int BcmGetEEPROMSize(struct bcm_mini_adapter *Adapter); static int BcmGetFlashCSInfo(struct bcm_mini_adapter *Adapter); -static unsigned int BcmGetFlashSectorSize(struct bcm_mini_adapter *Adapter, unsigned int FlashSectorSizeSig, unsigned int FlashSectorSize); +static unsigned int BcmGetFlashSectorSize(struct bcm_mini_adapter *Adapter, + unsigned int FlashSectorSizeSig, + unsigned int FlashSectorSize); static VOID BcmValidateNvmType(struct bcm_mini_adapter *Adapter); static int BcmGetNvmSize(struct bcm_mini_adapter *Adapter); static unsigned int BcmGetFlashSize(struct bcm_mini_adapter *Adapter); static enum bcm_nvm_type BcmGetNvmType(struct bcm_mini_adapter *Adapter); -static int BcmGetSectionValEndOffset(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val eFlash2xSectionVal); - -static B_UINT8 IsOffsetWritable(struct bcm_mini_adapter *Adapter, unsigned int uiOffset); -static int IsSectionWritable(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val Section); -static int IsSectionExistInVendorInfo(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val section); - -static int ReadDSDPriority(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val dsd); -static int ReadDSDSignature(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val dsd); -static int ReadISOPriority(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val iso); -static int ReadISOSignature(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val iso); - -static int CorruptDSDSig(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val eFlash2xSectionVal); -static int CorruptISOSig(struct bcm_mini_adapter *Adapter, enum bcm_flash2x_section_val eFlash2xSectionVal); -static int SaveHeaderIfPresent(struct bcm_mini_adapter *Adapter, PUCHAR pBuff, unsigned int uiSectAlignAddr); -static int WriteToFlashWithoutSectorErase(struct bcm_mini_adapter *Adapter, PUINT pBuff, - enum bcm_flash2x_section_val eFlash2xSectionVal, - unsigned int uiOffset, unsigned int uiNumBytes); +static int BcmGetSectionValEndOffset(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val eFlash2xSectionVal); + +static B_UINT8 IsOffsetWritable(struct bcm_mini_adapter *Adapter, + unsigned int uiOffset); +static int IsSectionWritable(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val Section); +static int IsSectionExistInVendorInfo(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val section); + +static int ReadDSDPriority(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val dsd); +static int ReadDSDSignature(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val dsd); +static int ReadISOPriority(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val iso); +static int ReadISOSignature(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val iso); + +static int CorruptDSDSig(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val eFlash2xSectionVal); +static int CorruptISOSig(struct bcm_mini_adapter *Adapter, + enum bcm_flash2x_section_val eFlash2xSectionVal); +static int SaveHeaderIfPresent(struct bcm_mini_adapter *Adapter, + PUCHAR pBuff, + unsigned int uiSectAlignAddr); +static int WriteToFlashWithoutSectorErase(struct bcm_mini_adapter *Adapter, + PUINT pBuff, + enum bcm_flash2x_section_val eFlash2xSectionVal, + unsigned int uiOffset, + unsigned int uiNumBytes); static enum bcm_flash2x_section_val getHighestPriDSD(struct bcm_mini_adapter *Adapter); static enum bcm_flash2x_section_val getHighestPriISO(struct bcm_mini_adapter *Adapter); @@ -3492,11 +3509,10 @@ int BcmCopyISO(struct bcm_mini_adapter *Adapter, struct bcm_flash2x_copy_section return STATUS_FAILURE; } - Status = BcmFlash2xBulkRead(Adapter, - &ISOLength, - sCopySectStrut.SrcSection, - 0 + FIELD_OFFSET_IN_HEADER(struct bcm_iso_header *, ISOImageSize), - 4); + Status = BcmFlash2xBulkRead(Adapter, &ISOLength, + sCopySectStrut.SrcSection, + 0 + FIELD_OFFSET_IN_HEADER(struct bcm_iso_header *, ISOImageSize), + 4); if (Status) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0, "Read failed while copying ISO\n"); return Status; -- cgit From 093300f44452a909e6bd02524c98b57fd6101eb8 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 20 Jul 2014 15:14:10 +0200 Subject: Staging: bcm: nvm.c: Outsourced chunk of code into function This patch outsources a chunk of code into an own function. It also refactors the variable names which are used within this function. The function name may be not appropriate. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 70 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 76c86ebbeea8..4aa195c791e9 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1033,6 +1033,44 @@ static ULONG BcmFlashUnProtectBlock(struct bcm_mini_adapter *Adapter, unsigned i return ulStatus; } +static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, + UCHAR read_bk[], + PCHAR tmpbuff, + unsigned int offset, + unsigned int partoff, + unsigned int i) +{ + unsigned int j; + int bulk_read_stat; + + for (i = 0; i < ad->uiSectorSize; i += MAX_RW_SIZE) { + bulk_read_stat = BeceemFlashBulkRead(ad, + (PUINT)read_bk, + offset + i, + MAX_RW_SIZE); + + if (bulk_read_stat == STATUS_SUCCESS) { + if (ad->ulFlashWriteSize == 1) { + for (j = 0; j < 16; j++) { + if (read_bk[j] != tmpbuff[i+j]) { + if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j])) { + return STATUS_FAILURE; + } + } + } + } else { + if (memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) { + if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])) { + return STATUS_FAILURE; + } + } + } + } + } + + return STATUS_SUCCESS; +} + /* * Procedure: BeceemFlashBulkWrite * @@ -1169,29 +1207,17 @@ static int BeceemFlashBulkWrite(struct bcm_mini_adapter *Adapter, /* do_gettimeofday(&tw); * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0, "Total time taken in Write to Flash :%ld ms\n", (tw.tv_sec *1000 + tw.tv_usec/1000) - (te.tv_sec *1000 + te.tv_usec/1000)); */ - for (uiIndex = 0; uiIndex < Adapter->uiSectorSize; uiIndex += MAX_RW_SIZE) { - if (STATUS_SUCCESS == BeceemFlashBulkRead(Adapter, (PUINT)ucReadBk, uiOffsetFromSectStart + uiIndex, MAX_RW_SIZE)) { - if (Adapter->ulFlashWriteSize == 1) { - unsigned int uiReadIndex = 0; - - for (uiReadIndex = 0; uiReadIndex < 16; uiReadIndex++) { - if (ucReadBk[uiReadIndex] != pTempBuff[uiIndex + uiReadIndex]) { - if (STATUS_SUCCESS != (*Adapter->fpFlashWriteWithStatusCheck)(Adapter, uiPartOffset + uiIndex + uiReadIndex, &pTempBuff[uiIndex+uiReadIndex])) { - Status = STATUS_FAILURE; - goto BeceemFlashBulkWrite_EXIT; - } - } - } - } else { - if (memcmp(ucReadBk, &pTempBuff[uiIndex], MAX_RW_SIZE)) { - if (STATUS_SUCCESS != (*Adapter->fpFlashWriteWithStatusCheck)(Adapter, uiPartOffset + uiIndex, &pTempBuff[uiIndex])) { - Status = STATUS_FAILURE; - goto BeceemFlashBulkWrite_EXIT; - } - } - } - } + + if (STATUS_FAILURE == bulk_read_complete_sector(Adapter, + ucReadBk, + pTempBuff, + uiOffsetFromSectStart, + uiPartOffset, + uiIndex)) { + Status = STATUS_FAILURE; + goto BeceemFlashBulkWrite_EXIT; } + /* do_gettimeofday(&twv); * BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0, "Total time taken in Write to Flash verification :%ld ms\n", (twv.tv_sec *1000 + twv.tv_usec/1000) - (tw.tv_sec *1000 + tw.tv_usec/1000)); */ -- cgit From f3ebe23705515c6a032bb8386de19b4ee7863a50 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 20 Jul 2014 15:14:11 +0200 Subject: Staging: bcm: nvm.c: Removed indentation level by using continue statement Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 4aa195c791e9..edbd0f9b6f97 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1049,22 +1049,23 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, offset + i, MAX_RW_SIZE); - if (bulk_read_stat == STATUS_SUCCESS) { - if (ad->ulFlashWriteSize == 1) { - for (j = 0; j < 16; j++) { - if (read_bk[j] != tmpbuff[i+j]) { - if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j])) { - return STATUS_FAILURE; - } - } - } - } else { - if (memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) { - if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])) { + if (bulk_read_stat != STATUS_SUCCESS) + continue; + + if (ad->ulFlashWriteSize == 1) { + for (j = 0; j < 16; j++) { + if (read_bk[j] != tmpbuff[i+j]) { + if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j])) { return STATUS_FAILURE; } } } + } else { + if (memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) { + if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])) { + return STATUS_FAILURE; + } + } } } -- cgit From aabaf67f6f7417da74aa3b25edf3c647a12f3b9d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 20 Jul 2014 15:14:12 +0200 Subject: Staging: bcm: nvm.c: Removed indentation level by concatenating nested if statements Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index edbd0f9b6f97..c38c80347c19 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1054,17 +1054,15 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, if (ad->ulFlashWriteSize == 1) { for (j = 0; j < 16; j++) { - if (read_bk[j] != tmpbuff[i+j]) { - if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j])) { - return STATUS_FAILURE; - } + if ((read_bk[j] != tmpbuff[i+j]) && + (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j]))) { + return STATUS_FAILURE; } } } else { - if (memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) { - if (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])) { - return STATUS_FAILURE; - } + if ((memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) && + ((STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])))) { + return STATUS_FAILURE; } } } -- cgit From ae5ad41993eb5b7a40b077fc1b4762481fcd3a3e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 20 Jul 2014 15:14:13 +0200 Subject: Staging: bcm: nvm.c: replaced member accessing with variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index c38c80347c19..0d197c0855db 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1042,6 +1042,8 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, { unsigned int j; int bulk_read_stat; + FP_FLASH_WRITE_STATUS writef = + ad->fpFlashWriteWithStatusCheck; for (i = 0; i < ad->uiSectorSize; i += MAX_RW_SIZE) { bulk_read_stat = BeceemFlashBulkRead(ad, @@ -1054,14 +1056,14 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, if (ad->ulFlashWriteSize == 1) { for (j = 0; j < 16; j++) { - if ((read_bk[j] != tmpbuff[i+j]) && - (STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i + j, &tmpbuff[i+j]))) { + if ((read_bk[j] != tmpbuff[i + j]) && + (STATUS_SUCCESS != (*writef)(ad, partoff + i + j, &tmpbuff[i + j]))) { return STATUS_FAILURE; } } } else { if ((memcmp(read_bk, &tmpbuff[i], MAX_RW_SIZE)) && - ((STATUS_SUCCESS != (*ad->fpFlashWriteWithStatusCheck)(ad, partoff + i, &tmpbuff[i])))) { + (STATUS_SUCCESS != (*writef)(ad, partoff + i, &tmpbuff[i]))) { return STATUS_FAILURE; } } -- cgit From 4025ef18c8919f080c620f497f89032a56e476e6 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Sun, 20 Jul 2014 12:34:00 +0300 Subject: Staging: vt6655: Remove redundant comments in wcmd.h Removed redundant comments in the header file wcmd.h Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/wcmd.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/wcmd.h b/drivers/staging/vt6655/wcmd.h index 2844476d5dc9..126b61c48791 100644 --- a/drivers/staging/vt6655/wcmd.h +++ b/drivers/staging/vt6655/wcmd.h @@ -33,12 +33,9 @@ #include "80211hdr.h" #include "80211mgr.h" -/*--------------------- Export Definitions -------------------------*/ +#define AUTHENTICATE_TIMEOUT 1000 +#define ASSOCIATE_TIMEOUT 1000 -#define AUTHENTICATE_TIMEOUT 1000 //ms -#define ASSOCIATE_TIMEOUT 1000 //ms - -// Command code typedef enum tagCMD_CODE { WLAN_CMD_BSSID_SCAN, WLAN_CMD_SSID, @@ -76,7 +73,6 @@ typedef struct tagCMD_ITEM { bool bForceSCAN; } CMD_ITEM, *PCMD_ITEM; -// Command state typedef enum tagCMD_STATE { WLAN_CMD_SCAN_START, WLAN_CMD_SCAN_END, @@ -92,13 +88,6 @@ typedef enum tagCMD_STATE { WLAN_CMD_IDLE } CMD_STATE, *PCMD_STATE; -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ void vResetCommandTimer( void *hDeviceContext -- cgit From 7354a17509376fc1e0a7b82518426d4249e933ea Mon Sep 17 00:00:00 2001 From: Petar Dimitrijevic Date: Sun, 20 Jul 2014 09:34:55 +0200 Subject: staging: vt6655: Fixed checkpatch errors This patch fixes the errors report by the checkpatch script. Most of them are use of C99 comments. The checkpatch doesn't report any errors after the clean up. However, please not that there are still ton of warnings left. Signed-off-by: Petar Dimitrijevic Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/datarate.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index f8420d65cd94..83ad74cf6841 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -47,11 +47,12 @@ /*--------------------- Static Classes ----------------------------*/ -extern unsigned short TxRate_iwconfig; //2008-5-8 by chester +extern unsigned short TxRate_iwconfig; /* 2008-5-8 by chester */ /*--------------------- Static Variables --------------------------*/ static int msglevel = MSG_LEVEL_INFO; -static const unsigned char acbyIERate[MAX_RATE] = -{0x02, 0x04, 0x0B, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; +static const unsigned char acbyIERate[MAX_RATE] = { +0x02, 0x04, 0x0B, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C +}; #define AUTORATE_TXOK_CNT 0x0400 #define AUTORATE_TXFAIL_CNT 0x0064 @@ -70,7 +71,7 @@ s_vResetCounter( { unsigned char ii; - // clear statistic counter for auto_rate + /* clear statistic counter for auto_rate */ for (ii = 0; ii <= MAX_RATE; ii++) { psNodeDBTable->uTxOk[ii] = 0; psNodeDBTable->uTxFail[ii] = 0; @@ -102,8 +103,8 @@ DATARATEbyGetRateIdx( { unsigned char ii; - //Erase basicRate flag. - byRate = byRate & 0x7F;//0111 1111 + /* Erase basicRate flag. */ + byRate = byRate & 0x7F;/* 0111 1111 */ for (ii = 0; ii < MAX_RATE; ii++) { if (acbyIERate[ii] == byRate) @@ -151,13 +152,14 @@ wGetRateIdx( { unsigned short ii; - //Erase basicRate flag. - byRate = byRate & 0x7F;//0111 1111 + /* Erase basicRate flag. */ + byRate = byRate & 0x7F;/* 0111 1111 */ for (ii = 0; ii < MAX_RATE; ii++) { if (acbyIERate[ii] == byRate) return ii; } + return 0; } @@ -218,7 +220,7 @@ RATEvParseMaxRate( for (ii = 0; ii < uRateLen; ii++) { byRate = (unsigned char)(pItemRates->abyRates[ii]); if (WLAN_MGMT_IS_BASICRATE(byRate) && bUpdateBasicRate) { - // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate + /* Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate */ CARDbAddBasicRate((void *)pDevice, wGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ParseMaxRate AddBasicRate: %d\n", wGetRateIdx(byRate)); } @@ -238,9 +240,9 @@ RATEvParseMaxRate( for (ii = 0; ii < uExtRateLen; ii++) { byRate = (unsigned char)(pItemExtRates->abyRates[ii]); - // select highest basic rate + /* select highest basic rate */ if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) { - // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate + /* Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate */ CARDbAddBasicRate((void *)pDevice, wGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ParseMaxRate AddBasicRate: %d\n", wGetRateIdx(byRate)); } @@ -302,10 +304,9 @@ RATEvTxRateFallBack( unsigned short wIdxUpRate = 0; unsigned long dwTxDiff = 0; - if (pDevice->pMgmt->eScanState != WMAC_NO_SCANNING) { - // Don't do Fallback when scanning Channel + if (pDevice->pMgmt->eScanState != WMAC_NO_SCANNING) + /* Don't do Fallback when scanning Channel */ return; - } psNodeDBTable->uTimeCount++; @@ -357,11 +358,13 @@ RATEvTxRateFallBack( (psNodeDBTable->uTxFail[MAX_RATE] * 4)) { psNodeDBTable->wTxDataRate = wIdxUpRate; } - } else { // adhoc, if uTxOk =0 & uTxFail = 0 + } else { + /* adhoc, if uTxOk =0 & uTxFail = 0 */ if (psNodeDBTable->uTxFail[MAX_RATE] == 0) psNodeDBTable->wTxDataRate = wIdxUpRate; } -//2008-5-8 by chester + + /* 2008-5-8 by chester */ TxRate_iwconfig = psNodeDBTable->wTxDataRate; s_vResetCounter(psNodeDBTable); -- cgit From 5d30566f7383f7f33a1c8ece38f5306bcd12890e Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Mon, 21 Jul 2014 13:54:41 +0200 Subject: staging/nvec: Remove double const qualifier The SIMPLE_DEV_PM_OPS macro already uses the const qualifier, so there's no need to repeat it. Signed-off-by: Thierry Reding Acked-by: Marc Dietrich Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index d32504844896..0a5c84ad3f41 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -960,7 +960,7 @@ static int nvec_resume(struct device *dev) } #endif -static const SIMPLE_DEV_PM_OPS(nvec_pm_ops, nvec_suspend, nvec_resume); +static SIMPLE_DEV_PM_OPS(nvec_pm_ops, nvec_suspend, nvec_resume); /* Match table for of_platform binding */ static const struct of_device_id nvidia_nvec_of_match[] = { -- cgit From 29a2600ce4d1aa178b07a6993fe8ab46828a86cf Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Mon, 21 Jul 2014 14:47:42 -0400 Subject: staging: unisys: remove virthba proc files This patch removes all proc entries, directories, and functions Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virthba/virthba.c | 206 ------------------------------- 1 file changed, 206 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 4d1347ad6527..b9cbcf2f569a 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -50,7 +50,6 @@ #include #include #include -#include #include #include "virthba.h" @@ -106,15 +105,6 @@ static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state); static void doDiskAddRemove(struct work_struct *work); static void virthba_serverdown_complete(struct work_struct *work); -static ssize_t info_proc_read(struct file *file, char __user *buf, - size_t len, loff_t *offset); -static ssize_t rqwu_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos); -static ssize_t enable_ints_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos); -static ssize_t enable_ints_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos); - /*****************************************************/ /* Globals */ /*****************************************************/ @@ -208,7 +198,6 @@ struct diskaddremove { static DEVICE_ATTRIBUTE *virthba_shost_attrs[]; static struct scsi_host_template virthba_driver_template = { .name = "Unisys Virtual HBA", - .proc_name = "uisvirthba", .info = virthba_get_info, .ioctl = virthba_ioctl, .queuecommand = virthba_queue_command, @@ -232,31 +221,9 @@ struct virthba_devices_open { struct virthba_info *virthbainfo; }; -static const struct file_operations proc_info_fops = { - .read = info_proc_read, -}; - -static const struct file_operations proc_rqwu_fops = { - .write = rqwu_proc_write, -}; - -static const struct file_operations proc_enable_ints_fops = { - .read = enable_ints_read, - .write = enable_ints_write, -}; - - #define VIRTHBASOPENMAX 1 /* array of open devices maintained by open() and close(); */ static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX]; -static struct proc_dir_entry *virthba_proc_dir; -static struct proc_dir_entry *info_proc_entry; -static struct proc_dir_entry *rqwaitus_proc_entry; -static struct proc_dir_entry *enable_ints_proc_entry; -#define INFO_PROC_ENTRY_FN "info" -#define ENABLE_INTS_ENTRY_FN "enable_ints" -#define RQWU_PROC_ENTRY_FN "rqwait_usecs" -#define DIR_PROC_ENTRY "virthba" /*****************************************************/ /* Local Functions */ @@ -1375,156 +1342,6 @@ process_incoming_rsps(void *v) complete_and_exit(&dc->threadinfo.has_stopped, 0); } -/*****************************************************/ -/* proc filesystem functions */ -/*****************************************************/ - -static ssize_t -info_proc_read(struct file *file, char __user *buf, size_t len, loff_t *offset) -{ - int length = 0; - U64 phys_flags_addr; - int i; - struct virthba_info *virthbainfo; - char *vbuf; - loff_t pos = *offset; - - if (pos < 0) - return -EINVAL; - - if (pos > 0 || !len) - return 0; - - vbuf = kzalloc(len, GFP_KERNEL); - if (!vbuf) - return -ENOMEM; - - for (i = 0; i < VIRTHBASOPENMAX; i++) { - if (VirtHbasOpen[i].virthbainfo == NULL) - continue; - - virthbainfo = VirtHbasOpen[i].virthbainfo; - length += sprintf(vbuf + length, "CHANSOCK is not defined.\n"); - - length += sprintf(vbuf + length, "MaxBuffLen:%u\n", MaxBuffLen); - - length += sprintf(vbuf + length, "\nvirthba result queue poll wait:%d usecs.\n", - rsltq_wait_usecs); - - length += sprintf(vbuf + length, "\ninterrupts_rcvd = %llu, interrupts_disabled = %llu\n", - virthbainfo->interrupts_rcvd, - virthbainfo->interrupts_disabled); - length += sprintf(vbuf + length, "\ninterrupts_notme = %llu,\n", - virthbainfo->interrupts_notme); - phys_flags_addr = virt_to_phys((__force void *) - virthbainfo->flags_addr); - length += sprintf(vbuf + length, "flags_addr = %p, phys_flags_addr=0x%016llx, FeatureFlags=%llu\n", - virthbainfo->flags_addr, phys_flags_addr, - (__le64)readq(virthbainfo->flags_addr)); - length += sprintf(vbuf + length, "acquire_failed_cnt:%llu\n", - virthbainfo->acquire_failed_cnt); - length += sprintf(vbuf + length, "\n"); - } - if (copy_to_user(buf, vbuf, length)) { - kfree(vbuf); - return -EFAULT; - } - - kfree(vbuf); - *offset += length; - return length; -} - -static ssize_t -enable_ints_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos) -{ - return 0; -} - -static ssize_t -enable_ints_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char buf[4]; - int i, new_value; - struct virthba_info *virthbainfo; - U64 __iomem *Features_addr; - U64 mask; - - if (count >= ARRAY_SIZE(buf)) - return -EINVAL; - - buf[count] = '\0'; - if (copy_from_user(buf, buffer, count)) { - LOGERR("copy_from_user failed. buf<<%.*s>> count<<%lu>>\n", - (int) count, buf, count); - return -EFAULT; - } - - i = sscanf(buf, "%d", &new_value); - - if (i < 1) { - LOGERR("Failed to scan value for enable_ints, buf<<%.*s>>", - (int) count, buf); - return -EFAULT; - } - - /* set all counts to new_value usually 0 */ - for (i = 0; i < VIRTHBASOPENMAX; i++) { - if (VirtHbasOpen[i].virthbainfo != NULL) { - virthbainfo = VirtHbasOpen[i].virthbainfo; - Features_addr = - &virthbainfo->chinfo.queueinfo->chan->Features; - if (new_value == 1) { - mask = ~(ULTRA_IO_CHANNEL_IS_POLLING | - ULTRA_IO_DRIVER_DISABLES_INTS); - uisqueue_InterlockedAnd(Features_addr, mask); - mask = ULTRA_IO_DRIVER_ENABLES_INTS; - uisqueue_InterlockedOr(Features_addr, mask); - rsltq_wait_usecs = 4000000; - } else { - mask = ~(ULTRA_IO_DRIVER_ENABLES_INTS | - ULTRA_IO_DRIVER_DISABLES_INTS); - uisqueue_InterlockedAnd(Features_addr, mask); - mask = ULTRA_IO_CHANNEL_IS_POLLING; - uisqueue_InterlockedOr(Features_addr, mask); - rsltq_wait_usecs = 4000; - } - } - } - return count; -} - -static ssize_t -rqwu_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char buf[16]; - int i, usecs; - - if (count >= ARRAY_SIZE(buf)) - return -EINVAL; - - if (copy_from_user(buf, buffer, count)) { - LOGERR("copy_from_user failed. buf<<%.*s>> count<<%lu>>\n", - (int) count, buf, count); - return -EFAULT; - } - - i = sscanf(buf, "%d", &usecs); - - if (i < 1) { - LOGERR("Failed to scan value for rqwait_usecs buf<<%.*s>>", - (int) count, buf); - return -EFAULT; - } - - /* set global wait time */ - rsltq_wait_usecs = usecs; - return count; -} - /* As per VirtpciFunc returns 1 for success and 0 for failure */ static int virthba_serverup(struct virtpci_dev *virtpcidev) @@ -1708,17 +1525,6 @@ virthba_mod_init(void) POSTCODE_LINUX_3(VHBA_CREATE_FAILURE_PC, error, POSTCODE_SEVERITY_ERR); } else { - /* create the proc directories */ - virthba_proc_dir = proc_mkdir(DIR_PROC_ENTRY, NULL); - info_proc_entry = proc_create(INFO_PROC_ENTRY_FN, 0, - virthba_proc_dir, - &proc_info_fops); - rqwaitus_proc_entry = proc_create(RQWU_PROC_ENTRY_FN, 0, - virthba_proc_dir, - &proc_rqwu_fops); - enable_ints_proc_entry = proc_create(ENABLE_INTS_ENTRY_FN, 0, - virthba_proc_dir, - &proc_enable_ints_fops); /* Initialize DARWorkQ */ INIT_WORK(&DARWorkQ, doDiskAddRemove); @@ -1799,18 +1605,6 @@ virthba_mod_exit(void) virthba_serverdown_workqueue = NULL; } - if (info_proc_entry) - remove_proc_entry(INFO_PROC_ENTRY_FN, virthba_proc_dir); - - if (rqwaitus_proc_entry) - remove_proc_entry(RQWU_PROC_ENTRY_FN, NULL); - - if (enable_ints_proc_entry) - remove_proc_entry(ENABLE_INTS_ENTRY_FN, NULL); - - if (virthba_proc_dir) - remove_proc_entry(DIR_PROC_ENTRY, NULL); - LOGINF("Leaving virthba_mod_exit\n"); } -- cgit From d9c5607e51a08214864487c44decbf4858546caa Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Mon, 21 Jul 2014 14:47:43 -0400 Subject: staging: unisys: added virthba debugfs dir and info entry This patch adds virthba debugfs directory and info entry Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virthba/virthba.c | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index b9cbcf2f569a..121cc05d7727 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include "virthba.h" @@ -66,6 +67,11 @@ /* NOTE: L1_CACHE_BYTES >=128 */ #define DEVICE_ATTRIBUTE struct device_attribute + /* MAX_BUF = 6 lines x 10 MAXVHBA x 80 characters + * = 4800 bytes ~ 2^13 = 8192 bytes + */ +#define MAX_BUF 8192 + /*****************************************************/ /* Forward declarations */ /*****************************************************/ @@ -104,6 +110,8 @@ static int virthba_serverup(struct virtpci_dev *virtpcidev); static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state); static void doDiskAddRemove(struct work_struct *work); static void virthba_serverdown_complete(struct work_struct *work); +static ssize_t info_debugfs_read(struct file *file, char __user *buf, + size_t len, loff_t *offset); /*****************************************************/ /* Globals */ @@ -221,9 +229,18 @@ struct virthba_devices_open { struct virthba_info *virthbainfo; }; +static const struct file_operations debugfs_info_fops = { + .read = info_debugfs_read, +}; + +/*****************************************************/ +/* Structs */ +/*****************************************************/ + #define VIRTHBASOPENMAX 1 /* array of open devices maintained by open() and close(); */ static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX]; +static struct dentry *virthba_debugfs_dir; /*****************************************************/ /* Local Functions */ @@ -1342,6 +1359,62 @@ process_incoming_rsps(void *v) complete_and_exit(&dc->threadinfo.has_stopped, 0); } +/*****************************************************/ +/* Debugfs filesystem functions */ +/*****************************************************/ + +static ssize_t info_debugfs_read(struct file *file, + char __user *buf, size_t len, loff_t *offset) +{ + ssize_t bytes_read = 0; + int str_pos = 0; + U64 phys_flags_addr; + int i; + struct virthba_info *virthbainfo; + char *vbuf; + + if (len > MAX_BUF) + len = MAX_BUF; + vbuf = kzalloc(len, GFP_KERNEL); + if (!vbuf) + return -ENOMEM; + + for (i = 0; i < VIRTHBASOPENMAX; i++) { + if (VirtHbasOpen[i].virthbainfo == NULL) + continue; + + virthbainfo = VirtHbasOpen[i].virthbainfo; + + str_pos += scnprintf(vbuf + str_pos, + len - str_pos, "MaxBuffLen:%u\n", MaxBuffLen); + + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "\nvirthba result queue poll wait:%d usecs.\n", + rsltq_wait_usecs); + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "\ninterrupts_rcvd = %llu, interrupts_disabled = %llu\n", + virthbainfo->interrupts_rcvd, + virthbainfo->interrupts_disabled); + str_pos += scnprintf(vbuf + str_pos, + len - str_pos, "\ninterrupts_notme = %llu,\n", + virthbainfo->interrupts_notme); + phys_flags_addr = virt_to_phys((__force void *) + virthbainfo->flags_addr); + str_pos += scnprintf(vbuf + str_pos, len - str_pos, + "flags_addr = %p, phys_flags_addr=0x%016llx, FeatureFlags=%llu\n", + virthbainfo->flags_addr, phys_flags_addr, + (__le64)readq(virthbainfo->flags_addr)); + str_pos += scnprintf(vbuf + str_pos, + len - str_pos, "acquire_failed_cnt:%llu\n", + virthbainfo->acquire_failed_cnt); + str_pos += scnprintf(vbuf + str_pos, len - str_pos, "\n"); + } + + bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos); + kfree(vbuf); + return bytes_read; +} + /* As per VirtpciFunc returns 1 for success and 0 for failure */ static int virthba_serverup(struct virtpci_dev *virtpcidev) @@ -1526,6 +1599,10 @@ virthba_mod_init(void) POSTCODE_SEVERITY_ERR); } else { + /* create the debugfs directories and entries */ + virthba_debugfs_dir = debugfs_create_dir("virthba", NULL); + debugfs_create_file("info", S_IRUSR, virthba_debugfs_dir, + NULL, &debugfs_info_fops); /* Initialize DARWorkQ */ INIT_WORK(&DARWorkQ, doDiskAddRemove); spin_lock_init(&DARWorkQLock); @@ -1605,6 +1682,8 @@ virthba_mod_exit(void) virthba_serverdown_workqueue = NULL; } + /* remove debugfs directory and files. */ + debugfs_remove_recursive(virthba_debugfs_dir); LOGINF("Leaving virthba_mod_exit\n"); } -- cgit From 5d1501913b5234254ba1e5ab6168b55a3ad1e5f7 Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Mon, 21 Jul 2014 14:47:44 -0400 Subject: staging: unisys: added virthba rqwait entry This patch adds the rqwait entry into the virthba debugfs directory Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virthba/virthba.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 121cc05d7727..857de1108b74 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -1603,6 +1603,8 @@ virthba_mod_init(void) virthba_debugfs_dir = debugfs_create_dir("virthba", NULL); debugfs_create_file("info", S_IRUSR, virthba_debugfs_dir, NULL, &debugfs_info_fops); + debugfs_create_u32("rqwait_usecs", S_IRUSR | S_IWUSR, + virthba_debugfs_dir, &rsltq_wait_usecs); /* Initialize DARWorkQ */ INIT_WORK(&DARWorkQ, doDiskAddRemove); spin_lock_init(&DARWorkQLock); -- cgit From 79014eb1f25e145ea0dc70c628d1ad24106afba3 Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Mon, 21 Jul 2014 14:47:45 -0400 Subject: staging: unisys: added virthba enable_ints entry This patch adds enable_ints entry to virthba directory Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virthba/virthba.c | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 857de1108b74..65a75c8e8b06 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -112,6 +112,8 @@ static void doDiskAddRemove(struct work_struct *work); static void virthba_serverdown_complete(struct work_struct *work); static ssize_t info_debugfs_read(struct file *file, char __user *buf, size_t len, loff_t *offset); +static ssize_t enable_ints_write(struct file *file, + const char __user *buffer, size_t count, loff_t *ppos); /*****************************************************/ /* Globals */ @@ -233,6 +235,10 @@ static const struct file_operations debugfs_info_fops = { .read = info_debugfs_read, }; +static const struct file_operations debugfs_enable_ints_fops = { + .write = enable_ints_write, +}; + /*****************************************************/ /* Structs */ /*****************************************************/ @@ -1415,6 +1421,60 @@ static ssize_t info_debugfs_read(struct file *file, return bytes_read; } +static ssize_t enable_ints_write(struct file *file, + const char __user *buffer, size_t count, loff_t *ppos) +{ + char buf[4]; + int i, new_value; + struct virthba_info *virthbainfo; + + U64 __iomem *Features_addr; + U64 mask; + + if (count >= ARRAY_SIZE(buf)) + return -EINVAL; + + buf[count] = '\0'; + if (copy_from_user(buf, buffer, count)) { + LOGERR("copy_from_user failed. buf<<%.*s>> count<<%lu>>\n", + (int) count, buf, count); + return -EFAULT; + } + + i = kstrtoint(buf, 10 , &new_value); + + if (i != 0) { + LOGERR("Failed to scan value for enable_ints, buf<<%.*s>>", + (int) count, buf); + return -EFAULT; + } + + /*set all counts to new_value usually 0*/ + for (i = 0; i < VIRTHBASOPENMAX; i++) { + if (VirtHbasOpen[i].virthbainfo != NULL) { + virthbainfo = VirtHbasOpen[i].virthbainfo; + Features_addr = + &virthbainfo->chinfo.queueinfo->chan->Features; + if (new_value == 1) { + mask = ~(ULTRA_IO_CHANNEL_IS_POLLING | + ULTRA_IO_DRIVER_DISABLES_INTS); + uisqueue_InterlockedAnd(Features_addr, mask); + mask = ULTRA_IO_DRIVER_ENABLES_INTS; + uisqueue_InterlockedOr(Features_addr, mask); + rsltq_wait_usecs = 4000000; + } else { + mask = ~(ULTRA_IO_DRIVER_ENABLES_INTS | + ULTRA_IO_DRIVER_DISABLES_INTS); + uisqueue_InterlockedAnd(Features_addr, mask); + mask = ULTRA_IO_CHANNEL_IS_POLLING; + uisqueue_InterlockedOr(Features_addr, mask); + rsltq_wait_usecs = 4000; + } + } + } + return count; +} + /* As per VirtpciFunc returns 1 for success and 0 for failure */ static int virthba_serverup(struct virtpci_dev *virtpcidev) @@ -1605,6 +1665,9 @@ virthba_mod_init(void) NULL, &debugfs_info_fops); debugfs_create_u32("rqwait_usecs", S_IRUSR | S_IWUSR, virthba_debugfs_dir, &rsltq_wait_usecs); + debugfs_create_file("enable_ints", S_IWUSR, + virthba_debugfs_dir, NULL, + &debugfs_enable_ints_fops); /* Initialize DARWorkQ */ INIT_WORK(&DARWorkQ, doDiskAddRemove); spin_lock_init(&DARWorkQLock); -- cgit From a207c12f62e8b53e1e1600ca384b13a39a9feed2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:16 -0700 Subject: staging: comedi: drivers: cleanup cmd->flags use Most of the comedi drivers that support async commands have some sort of timer to control the acquisition timing. For these drivers, Step 4 of the (*do_cmdtest) operations calls a ns_to_timer() function that converts the desired ns time of the command into a value used to set the timer. These ns_to_timer() functions also typically pass the cmd->flags in order to determine the desired rounding mode. Some of the drivers mask the cmd->flags with TRIG_ROUND_MASK when calling the ns_to_timer() functions. Move all the masking into the ns_to_timer() functions and just pass the cmd->flags directly. The cmd->flags member is an unsigned int, change the parameter type in the the ns_to_timer() functions to match. For aesthetics, rename the parameter in all the ns_to_timer() functions to 'flags'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8253.h | 5 ++-- drivers/staging/comedi/drivers/addi_apci_3xxx.c | 6 ++--- drivers/staging/comedi/drivers/amplc_pci230.c | 34 ++++++++++-------------- drivers/staging/comedi/drivers/das16.c | 8 +++--- drivers/staging/comedi/drivers/dmm32at.c | 6 ++--- drivers/staging/comedi/drivers/dt2814.c | 6 ++--- drivers/staging/comedi/drivers/dt3000.c | 13 +++++---- drivers/staging/comedi/drivers/ni_at_a2150.c | 7 +++-- drivers/staging/comedi/drivers/ni_mio_common.c | 16 ++++------- drivers/staging/comedi/drivers/ni_pcidio.c | 8 +++--- drivers/staging/comedi/drivers/quatech_daqp_cs.c | 12 ++++----- drivers/staging/comedi/drivers/rtd520.c | 12 ++++----- drivers/staging/comedi/drivers/s626.c | 14 +++++----- drivers/staging/comedi/drivers/skel.c | 6 ++--- 14 files changed, 65 insertions(+), 88 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8253.h b/drivers/staging/comedi/drivers/8253.h index 035b3e30efc1..f8e1ebad304d 100644 --- a/drivers/staging/comedi/drivers/8253.h +++ b/drivers/staging/comedi/drivers/8253.h @@ -34,7 +34,7 @@ static inline void i8253_cascade_ns_to_timer(int i8253_osc_base, unsigned int *d1, unsigned int *d2, unsigned int *nanosec, - int round_mode) + unsigned int flags) { unsigned int divider; unsigned int div1, div2; @@ -90,8 +90,7 @@ static inline void i8253_cascade_ns_to_timer(int i8253_osc_base, } } - round_mode &= TRIG_ROUND_MASK; - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: ns_high = div1_lub * div2_lub * i8253_osc_base; diff --git a/drivers/staging/comedi/drivers/addi_apci_3xxx.c b/drivers/staging/comedi/drivers/addi_apci_3xxx.c index 12096ee584ec..1b7cbf400c10 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3xxx.c +++ b/drivers/staging/comedi/drivers/addi_apci_3xxx.c @@ -477,7 +477,7 @@ static int apci3xxx_ai_insn_read(struct comedi_device *dev, } static int apci3xxx_ai_ns_to_timer(struct comedi_device *dev, - unsigned int *ns, int round_mode) + unsigned int *ns, unsigned int flags) { const struct apci3xxx_boardinfo *board = comedi_board(dev); struct apci3xxx_private *devpriv = dev->private; @@ -503,7 +503,7 @@ static int apci3xxx_ai_ns_to_timer(struct comedi_device *dev, break; } - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: timer = (*ns + base / 2) / base; @@ -573,7 +573,7 @@ static int apci3xxx_ai_cmdtest(struct comedi_device *dev, /* step 4: fix up any arguments */ arg = cmd->convert_arg; - err |= apci3xxx_ai_ns_to_timer(dev, &arg, cmd->flags & TRIG_ROUND_MASK); + err |= apci3xxx_ai_ns_to_timer(dev, &arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (err) diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 2c318fc721e9..eca16a6b09d7 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -712,15 +712,14 @@ static inline void put_all_resources(struct comedi_device *dev, } static unsigned int divide_ns(uint64_t ns, unsigned int timebase, - unsigned int round_mode) + unsigned int flags) { uint64_t div; unsigned int rem; div = ns; rem = do_div(div, timebase); - round_mode &= TRIG_ROUND_MASK; - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { default: case TRIG_ROUND_NEAREST: div += (rem + (timebase / 2)) / timebase; @@ -737,12 +736,12 @@ static unsigned int divide_ns(uint64_t ns, unsigned int timebase, /* Given desired period in ns, returns the required internal clock source * and gets the initial count. */ static unsigned int pci230_choose_clk_count(uint64_t ns, unsigned int *count, - unsigned int round_mode) + unsigned int flags) { unsigned int clk_src, cnt; for (clk_src = CLK_10MHZ;; clk_src++) { - cnt = divide_ns(ns, pci230_timebase[clk_src], round_mode); + cnt = divide_ns(ns, pci230_timebase[clk_src], flags); if ((cnt <= 65536) || (clk_src == CLK_1KHZ)) break; @@ -751,18 +750,18 @@ static unsigned int pci230_choose_clk_count(uint64_t ns, unsigned int *count, return clk_src; } -static void pci230_ns_to_single_timer(unsigned int *ns, unsigned int round) +static void pci230_ns_to_single_timer(unsigned int *ns, unsigned int flags) { unsigned int count; unsigned int clk_src; - clk_src = pci230_choose_clk_count(*ns, &count, round); + clk_src = pci230_choose_clk_count(*ns, &count, flags); *ns = count * pci230_timebase[clk_src]; } static void pci230_ct_setup_ns_mode(struct comedi_device *dev, unsigned int ct, unsigned int mode, uint64_t ns, - unsigned int round) + unsigned int flags) { struct pci230_private *devpriv = dev->private; unsigned int clk_src; @@ -771,7 +770,7 @@ static void pci230_ct_setup_ns_mode(struct comedi_device *dev, unsigned int ct, /* Set mode. */ i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, ct, mode); /* Determine clock source and count. */ - clk_src = pci230_choose_clk_count(ns, &count, round); + clk_src = pci230_choose_clk_count(ns, &count, flags); /* Program clock source. */ outb(CLK_CONFIG(ct, clk_src), devpriv->iobase1 + PCI230_ZCLK_SCE); /* Set initial count. */ @@ -1079,8 +1078,7 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { tmp = cmd->scan_begin_arg; - pci230_ns_to_single_timer(&cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + pci230_ns_to_single_timer(&cmd->scan_begin_arg, cmd->flags); if (tmp != cmd->scan_begin_arg) err++; } @@ -1492,7 +1490,7 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->iobase1 + PCI230_ZGAT_SCE); pci230_ct_setup_ns_mode(dev, 1, I8254_MODE3, cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + cmd->flags); } /* N.B. cmd->start_src == TRIG_INT */ @@ -1799,8 +1797,7 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, if (cmd->convert_src == TRIG_TIMER) { tmp = cmd->convert_arg; - pci230_ns_to_single_timer(&cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + pci230_ns_to_single_timer(&cmd->convert_arg, cmd->flags); if (tmp != cmd->convert_arg) err++; } @@ -1808,8 +1805,7 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { /* N.B. cmd->convert_arg is also TRIG_TIMER */ tmp = cmd->scan_begin_arg; - pci230_ns_to_single_timer(&cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + pci230_ns_to_single_timer(&cmd->scan_begin_arg, cmd->flags); if (!pci230_ai_check_scan_period(cmd)) { /* Was below minimum required. Round up. */ pci230_ns_to_single_timer(&cmd->scan_begin_arg, @@ -2380,7 +2376,7 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); /* Set counter/timer 2 to the specified conversion period. */ pci230_ct_setup_ns_mode(dev, 2, I8254_MODE3, cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + cmd->flags); if (cmd->scan_begin_src != TRIG_FOLLOW) { /* * Set up monostable on CT0 output for scan timing. A @@ -2411,9 +2407,7 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); pci230_ct_setup_ns_mode(dev, 1, I8254_MODE3, cmd->scan_begin_arg, - cmd-> - flags & - TRIG_ROUND_MASK); + cmd->flags); } } } diff --git a/drivers/staging/comedi/drivers/das16.c b/drivers/staging/comedi/drivers/das16.c index d92cc181112d..057bc16f8ddc 100644 --- a/drivers/staging/comedi/drivers/das16.c +++ b/drivers/staging/comedi/drivers/das16.c @@ -729,14 +729,14 @@ static int das16_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, } static unsigned int das16_set_pacer(struct comedi_device *dev, unsigned int ns, - int rounding_flags) + unsigned int flags) { struct das16_private_struct *devpriv = dev->private; unsigned long timer_base = dev->iobase + DAS16_TIMER_BASE_REG; i8253_cascade_ns_to_timer(devpriv->clockbase, &devpriv->divisor1, &devpriv->divisor2, - &ns, rounding_flags); + &ns, flags); i8254_set_mode(timer_base, 0, 1, I8254_MODE2 | I8254_BINARY); i8254_set_mode(timer_base, 0, 2, I8254_MODE2 | I8254_BINARY); @@ -782,9 +782,7 @@ static int das16_cmd_exec(struct comedi_device *dev, struct comedi_subdevice *s) } /* set counter mode and counts */ - cmd->convert_arg = - das16_set_pacer(dev, cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + cmd->convert_arg = das16_set_pacer(dev, cmd->convert_arg, cmd->flags); /* enable counters */ byte = 0; diff --git a/drivers/staging/comedi/drivers/dmm32at.c b/drivers/staging/comedi/drivers/dmm32at.c index 181c34462a4d..35a8f84867aa 100644 --- a/drivers/staging/comedi/drivers/dmm32at.c +++ b/drivers/staging/comedi/drivers/dmm32at.c @@ -237,7 +237,7 @@ static int dmm32at_ai_rinsn(struct comedi_device *dev, return n; } -static int dmm32at_ns_to_timer(unsigned int *ns, int round) +static int dmm32at_ns_to_timer(unsigned int *ns, unsigned int flags) { /* trivial timer */ return *ns; @@ -352,12 +352,12 @@ static int dmm32at_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - dmm32at_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + dmm32at_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - dmm32at_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + dmm32at_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (cmd->scan_begin_src == TRIG_TIMER) { diff --git a/drivers/staging/comedi/drivers/dt2814.c b/drivers/staging/comedi/drivers/dt2814.c index 4d5325345302..4c4b1f9c86a6 100644 --- a/drivers/staging/comedi/drivers/dt2814.c +++ b/drivers/staging/comedi/drivers/dt2814.c @@ -171,7 +171,7 @@ static int dt2814_ai_cmdtest(struct comedi_device *dev, /* step 4: fix up any arguments */ arg = cmd->scan_begin_arg; - dt2814_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + dt2814_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); if (err) @@ -187,9 +187,7 @@ static int dt2814_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) int chan; int trigvar; - trigvar = - dt2814_ns_to_timer(&cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + trigvar = dt2814_ns_to_timer(&cmd->scan_begin_arg, cmd->flags); chan = CR_CHAN(cmd->chanlist[0]); diff --git a/drivers/staging/comedi/drivers/dt3000.c b/drivers/staging/comedi/drivers/dt3000.c index 4ab4de005924..bf5a05c64fe2 100644 --- a/drivers/staging/comedi/drivers/dt3000.c +++ b/drivers/staging/comedi/drivers/dt3000.c @@ -377,7 +377,7 @@ static irqreturn_t dt3k_interrupt(int irq, void *d) } static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, - unsigned int round_mode) + unsigned int flags) { int divider, base, prescale; @@ -386,7 +386,7 @@ static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, for (prescale = 0; prescale < 16; prescale++) { base = timer_base * (prescale + 1); - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: divider = (*nanosec + base / 2) / base; @@ -467,13 +467,13 @@ static int dt3k_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - dt3k_ns_to_timer(100, &arg, cmd->flags & TRIG_ROUND_MASK); + dt3k_ns_to_timer(100, &arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - dt3k_ns_to_timer(50, &arg, cmd->flags & TRIG_ROUND_MASK); + dt3k_ns_to_timer(50, &arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (cmd->scan_begin_src == TRIG_TIMER) { @@ -511,15 +511,14 @@ static int dt3k_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) writew(cmd->scan_end_arg, devpriv->io_addr + DPR_Params(0)); if (cmd->convert_src == TRIG_TIMER) { - divider = dt3k_ns_to_timer(50, &cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + divider = dt3k_ns_to_timer(50, &cmd->convert_arg, cmd->flags); writew((divider >> 16), devpriv->io_addr + DPR_Params(1)); writew((divider & 0xffff), devpriv->io_addr + DPR_Params(2)); } if (cmd->scan_begin_src == TRIG_TIMER) { tscandiv = dt3k_ns_to_timer(100, &cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + cmd->flags); writew((tscandiv >> 16), devpriv->io_addr + DPR_Params(3)); writew((tscandiv & 0xffff), devpriv->io_addr + DPR_Params(4)); } diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index c0ac8fd6ecab..0638c1ac8cbf 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -159,7 +159,7 @@ struct a2150_private { static int a2150_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, - int flags); + unsigned int flags); static int a2150_set_chanlist(struct comedi_device *dev, unsigned int start_channel, unsigned int num_channels); @@ -580,7 +580,7 @@ static int a2150_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, * period, adjusts requested period to actual timing. */ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, - int flags) + unsigned int flags) { const struct a2150_board *thisboard = comedi_board(dev); struct a2150_private *devpriv = dev->private; @@ -621,8 +621,7 @@ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, } } } - flags &= TRIG_ROUND_MASK; - switch (flags) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: /* if least upper bound is better approximation */ diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 551a150685a9..4285f0718012 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -2213,12 +2213,12 @@ static int ni_ai_insn_read(struct comedi_device *dev, } static int ni_ns_to_timer(const struct comedi_device *dev, unsigned nanosec, - int round_mode) + unsigned int flags) { struct ni_private *devpriv = dev->private; int divider; - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: divider = (nanosec + devpriv->clock_ns / 2) / devpriv->clock_ns; @@ -2375,9 +2375,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, cmd->scan_begin_arg = ni_timer_to_ns(dev, ni_ns_to_timer(dev, cmd->scan_begin_arg, - cmd-> - flags & - TRIG_ROUND_MASK)); + cmd->flags)); if (tmp != cmd->scan_begin_arg) err++; } @@ -2387,9 +2385,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, cmd->convert_arg = ni_timer_to_ns(dev, ni_ns_to_timer(dev, cmd->convert_arg, - cmd-> - flags & - TRIG_ROUND_MASK)); + cmd->flags)); if (tmp != cmd->convert_arg) err++; if (cmd->scan_begin_src == TRIG_TIMER && @@ -3386,9 +3382,7 @@ static int ni_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, cmd->scan_begin_arg = ni_timer_to_ns(dev, ni_ns_to_timer(dev, cmd->scan_begin_arg, - cmd-> - flags & - TRIG_ROUND_MASK)); + cmd->flags)); if (tmp != cmd->scan_begin_arg) err++; } diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 7bc4b9f127f3..cb161d815444 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -303,7 +303,7 @@ static int ni_pcidio_cmdtest(struct comedi_device *dev, static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s); static int ni_pcidio_inttrig(struct comedi_device *dev, struct comedi_subdevice *s, unsigned int trignum); -static int ni_pcidio_ns_to_timer(int *nanosec, int round_mode); +static int ni_pcidio_ns_to_timer(int *nanosec, unsigned int flags); static int setup_mite_dma(struct comedi_device *dev, struct comedi_subdevice *s); @@ -596,7 +596,7 @@ static int ni_pcidio_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - ni_pcidio_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + ni_pcidio_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } @@ -606,13 +606,13 @@ static int ni_pcidio_cmdtest(struct comedi_device *dev, return 0; } -static int ni_pcidio_ns_to_timer(int *nanosec, int round_mode) +static int ni_pcidio_ns_to_timer(int *nanosec, unsigned int flags) { int divider, base; base = TIMER_BASE; - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: divider = (*nanosec + base / 2) / base; diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index b3bbec0a0d23..b1db61d9d834 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -351,7 +351,7 @@ static int daqp_ai_insn_read(struct comedi_device *dev, * time that the device will use. */ -static int daqp_ns_to_timer(unsigned int *ns, int round) +static int daqp_ns_to_timer(unsigned int *ns, unsigned int flags) { int timer; @@ -436,13 +436,13 @@ static int daqp_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - daqp_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + daqp_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - daqp_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + daqp_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); } @@ -488,15 +488,13 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) */ if (cmd->convert_src == TRIG_TIMER) { - counter = daqp_ns_to_timer(&cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + counter = daqp_ns_to_timer(&cmd->convert_arg, cmd->flags); 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 { - counter = daqp_ns_to_timer(&cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + counter = daqp_ns_to_timer(&cmd->scan_begin_arg, cmd->flags); 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); diff --git a/drivers/staging/comedi/drivers/rtd520.c b/drivers/staging/comedi/drivers/rtd520.c index d55c5893203b..69dc73705513 100644 --- a/drivers/staging/comedi/drivers/rtd520.c +++ b/drivers/staging/comedi/drivers/rtd520.c @@ -397,11 +397,11 @@ struct rtd_private { Note: you have to check if the value is larger than the counter range! */ static int rtd_ns_to_timer_base(unsigned int *nanosec, - int round_mode, int base) + unsigned int flags, int base) { int divider; - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: divider = (*nanosec + base / 2) / base; @@ -428,9 +428,9 @@ static int rtd_ns_to_timer_base(unsigned int *nanosec, return the proper counter value (divider-1) for the internal clock. Sets the original period to be the true value. */ -static int rtd_ns_to_timer(unsigned int *ns, int round_mode) +static int rtd_ns_to_timer(unsigned int *ns, unsigned int flags) { - return rtd_ns_to_timer_base(ns, round_mode, RTD_CLOCK_BASE); + return rtd_ns_to_timer_base(ns, flags, RTD_CLOCK_BASE); } /* @@ -895,13 +895,13 @@ static int rtd_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - rtd_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + rtd_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - rtd_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + rtd_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (cmd->scan_begin_src == TRIG_TIMER) { diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index b7c5d8168e98..0b18d24ddb69 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -1981,13 +1981,13 @@ static int s626_ai_inttrig(struct comedi_device *dev, * Also, it should adjust ns so that it cooresponds to the actual time * that the device will use. */ -static int s626_ns_to_timer(unsigned int *nanosec, int round_mode) +static int s626_ns_to_timer(unsigned int *nanosec, unsigned int flags) { int divider, base; base = 500; /* 2MHz internal clock */ - switch (round_mode) { + switch (flags & TRIG_ROUND_MASK) { case TRIG_ROUND_NEAREST: default: divider = (*nanosec + base / 2) / base; @@ -2087,8 +2087,7 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * set a counter to generate adc trigger at scan_begin_arg * interval */ - tick = s626_ns_to_timer(&cmd->scan_begin_arg, - cmd->flags & TRIG_ROUND_MASK); + tick = s626_ns_to_timer(&cmd->scan_begin_arg, cmd->flags); /* load timer value and enable interrupt */ s626_timer_load(dev, 5, tick); @@ -2109,8 +2108,7 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * set a counter to generate adc trigger at convert_arg * interval */ - tick = s626_ns_to_timer(&cmd->convert_arg, - cmd->flags & TRIG_ROUND_MASK); + tick = s626_ns_to_timer(&cmd->convert_arg, cmd->flags); /* load timer value and enable interrupt */ s626_timer_load(dev, 4, tick); @@ -2252,13 +2250,13 @@ static int s626_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - s626_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + s626_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - s626_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + s626_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (cmd->scan_begin_src == TRIG_TIMER) { diff --git a/drivers/staging/comedi/drivers/skel.c b/drivers/staging/comedi/drivers/skel.c index 3bfa221faf4d..7661f2b0a183 100644 --- a/drivers/staging/comedi/drivers/skel.c +++ b/drivers/staging/comedi/drivers/skel.c @@ -129,7 +129,7 @@ struct skel_private { * convert ns nanoseconds to a counter value suitable for programming * the device. Also, it should adjust ns so that it cooresponds to * the actual time that the device will use. */ -static int skel_ns_to_timer(unsigned int *ns, int round) +static int skel_ns_to_timer(unsigned int *ns, unsigned int flags) { /* trivial timer */ /* if your timing is done through two cascaded timers, the @@ -287,12 +287,12 @@ static int skel_ai_cmdtest(struct comedi_device *dev, if (cmd->scan_begin_src == TRIG_TIMER) { arg = cmd->scan_begin_arg; - skel_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + skel_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, arg); } if (cmd->convert_src == TRIG_TIMER) { arg = cmd->convert_arg; - skel_ns_to_timer(&arg, cmd->flags & TRIG_ROUND_MASK); + skel_ns_to_timer(&arg, cmd->flags); err |= cfc_check_trigger_arg_is(&cmd->convert_arg, arg); if (cmd->scan_begin_src == TRIG_TIMER) { -- cgit From c9bef032de05fb93ded8c20a0c66eae70e2b83d7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:17 -0700 Subject: staging: comedi: ni_at_a2150: remove forward declarations Move some of the functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_at_a2150.c | 229 +++++++++++++-------------- 1 file changed, 111 insertions(+), 118 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index 0638c1ac8cbf..76fed317403e 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -156,13 +156,6 @@ struct a2150_private { int config_bits; /* config register bits */ }; -static int a2150_cancel(struct comedi_device *dev, struct comedi_subdevice *s); - -static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, - unsigned int flags); -static int a2150_set_chanlist(struct comedi_device *dev, - unsigned int start_channel, - unsigned int num_channels); /* interrupt service routine */ static irqreturn_t a2150_interrupt(int irq, void *d) { @@ -288,6 +281,117 @@ static int a2150_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } +/* + * sets bits in devpriv->clock_bits to nearest approximation of requested + * period, adjusts requested period to actual timing. + */ +static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, + unsigned int flags) +{ + const struct a2150_board *thisboard = comedi_board(dev); + struct a2150_private *devpriv = dev->private; + int lub, glb, temp; + int lub_divisor_shift, lub_index, glb_divisor_shift, glb_index; + int i, j; + + /* initialize greatest lower and least upper bounds */ + lub_divisor_shift = 3; + lub_index = 0; + lub = thisboard->clock[lub_index] * (1 << lub_divisor_shift); + glb_divisor_shift = 0; + glb_index = thisboard->num_clocks - 1; + glb = thisboard->clock[glb_index] * (1 << glb_divisor_shift); + + /* make sure period is in available range */ + if (*period < glb) + *period = glb; + if (*period > lub) + *period = lub; + + /* we can multiply period by 1, 2, 4, or 8, using (1 << i) */ + for (i = 0; i < 4; i++) { + /* there are a maximum of 4 master clocks */ + for (j = 0; j < thisboard->num_clocks; j++) { + /* temp is the period in nanosec we are evaluating */ + temp = thisboard->clock[j] * (1 << i); + /* if it is the best match yet */ + if (temp < lub && temp >= *period) { + lub_divisor_shift = i; + lub_index = j; + lub = temp; + } + if (temp > glb && temp <= *period) { + glb_divisor_shift = i; + glb_index = j; + glb = temp; + } + } + } + switch (flags & TRIG_ROUND_MASK) { + case TRIG_ROUND_NEAREST: + default: + /* if least upper bound is better approximation */ + if (lub - *period < *period - glb) + *period = lub; + else + *period = glb; + break; + case TRIG_ROUND_UP: + *period = lub; + break; + case TRIG_ROUND_DOWN: + *period = glb; + break; + } + + /* set clock bits for config register appropriately */ + devpriv->config_bits &= ~CLOCK_MASK; + if (*period == lub) { + devpriv->config_bits |= + CLOCK_SELECT_BITS(lub_index) | + CLOCK_DIVISOR_BITS(lub_divisor_shift); + } else { + devpriv->config_bits |= + CLOCK_SELECT_BITS(glb_index) | + CLOCK_DIVISOR_BITS(glb_divisor_shift); + } + + return 0; +} + +static int a2150_set_chanlist(struct comedi_device *dev, + unsigned int start_channel, + unsigned int num_channels) +{ + struct a2150_private *devpriv = dev->private; + + if (start_channel + num_channels > 4) + return -1; + + devpriv->config_bits &= ~CHANNEL_MASK; + + switch (num_channels) { + case 1: + devpriv->config_bits |= CHANNEL_BITS(0x4 | start_channel); + break; + case 2: + if (start_channel == 0) + devpriv->config_bits |= CHANNEL_BITS(0x2); + else if (start_channel == 2) + devpriv->config_bits |= CHANNEL_BITS(0x3); + else + return -1; + break; + case 4: + devpriv->config_bits |= CHANNEL_BITS(0x1); + break; + default: + return -1; + } + + return 0; +} + static int a2150_ai_check_chanlist(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd) @@ -575,117 +679,6 @@ static int a2150_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, return n; } -/* - * sets bits in devpriv->clock_bits to nearest approximation of requested - * period, adjusts requested period to actual timing. - */ -static int a2150_get_timing(struct comedi_device *dev, unsigned int *period, - unsigned int flags) -{ - const struct a2150_board *thisboard = comedi_board(dev); - struct a2150_private *devpriv = dev->private; - int lub, glb, temp; - int lub_divisor_shift, lub_index, glb_divisor_shift, glb_index; - int i, j; - - /* initialize greatest lower and least upper bounds */ - lub_divisor_shift = 3; - lub_index = 0; - lub = thisboard->clock[lub_index] * (1 << lub_divisor_shift); - glb_divisor_shift = 0; - glb_index = thisboard->num_clocks - 1; - glb = thisboard->clock[glb_index] * (1 << glb_divisor_shift); - - /* make sure period is in available range */ - if (*period < glb) - *period = glb; - if (*period > lub) - *period = lub; - - /* we can multiply period by 1, 2, 4, or 8, using (1 << i) */ - for (i = 0; i < 4; i++) { - /* there are a maximum of 4 master clocks */ - for (j = 0; j < thisboard->num_clocks; j++) { - /* temp is the period in nanosec we are evaluating */ - temp = thisboard->clock[j] * (1 << i); - /* if it is the best match yet */ - if (temp < lub && temp >= *period) { - lub_divisor_shift = i; - lub_index = j; - lub = temp; - } - if (temp > glb && temp <= *period) { - glb_divisor_shift = i; - glb_index = j; - glb = temp; - } - } - } - switch (flags & TRIG_ROUND_MASK) { - case TRIG_ROUND_NEAREST: - default: - /* if least upper bound is better approximation */ - if (lub - *period < *period - glb) - *period = lub; - else - *period = glb; - break; - case TRIG_ROUND_UP: - *period = lub; - break; - case TRIG_ROUND_DOWN: - *period = glb; - break; - } - - /* set clock bits for config register appropriately */ - devpriv->config_bits &= ~CLOCK_MASK; - if (*period == lub) { - devpriv->config_bits |= - CLOCK_SELECT_BITS(lub_index) | - CLOCK_DIVISOR_BITS(lub_divisor_shift); - } else { - devpriv->config_bits |= - CLOCK_SELECT_BITS(glb_index) | - CLOCK_DIVISOR_BITS(glb_divisor_shift); - } - - return 0; -} - -static int a2150_set_chanlist(struct comedi_device *dev, - unsigned int start_channel, - unsigned int num_channels) -{ - struct a2150_private *devpriv = dev->private; - - if (start_channel + num_channels > 4) - return -1; - - devpriv->config_bits &= ~CHANNEL_MASK; - - switch (num_channels) { - case 1: - devpriv->config_bits |= CHANNEL_BITS(0x4 | start_channel); - break; - case 2: - if (start_channel == 0) - devpriv->config_bits |= CHANNEL_BITS(0x2); - else if (start_channel == 2) - devpriv->config_bits |= CHANNEL_BITS(0x3); - else - return -1; - break; - case 4: - devpriv->config_bits |= CHANNEL_BITS(0x1); - break; - default: - return -1; - } - - return 0; -} - /* probes board type, returns offset */ static int a2150_probe(struct comedi_device *dev) { -- cgit From 5d6e2298b29113e6b71f1c30bfcfc70051abdcec Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:18 -0700 Subject: staging: comedi: ni_pcidio: remove forward declarations Move some of the functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_pcidio.c | 124 +++++++++++++---------------- 1 file changed, 57 insertions(+), 67 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index cb161d815444..0a24b216c226 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -297,16 +297,6 @@ struct nidio96_private { spinlock_t mite_channel_lock; }; -static int ni_pcidio_cmdtest(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_cmd *cmd); -static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s); -static int ni_pcidio_inttrig(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned int trignum); -static int ni_pcidio_ns_to_timer(int *nanosec, unsigned int flags); -static int setup_mite_dma(struct comedi_device *dev, - struct comedi_subdevice *s); - static int ni_pcidio_request_di_mite_channel(struct comedi_device *dev) { struct nidio96_private *devpriv = dev->private; @@ -350,6 +340,30 @@ static void ni_pcidio_release_di_mite_channel(struct comedi_device *dev) spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); } +static int setup_mite_dma(struct comedi_device *dev, struct comedi_subdevice *s) +{ + struct nidio96_private *devpriv = dev->private; + int retval; + unsigned long flags; + + retval = ni_pcidio_request_di_mite_channel(dev); + if (retval) + return retval; + + /* write alloc the entire buffer */ + comedi_buf_write_alloc(s, s->async->prealloc_bufsz); + + spin_lock_irqsave(&devpriv->mite_channel_lock, flags); + if (devpriv->di_mite_chan) { + mite_prep_dma(devpriv->di_mite_chan, 32, 32); + mite_dma_arm(devpriv->di_mite_chan); + } else + retval = -EIO; + spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); + + return retval; +} + static int ni_pcidio_poll(struct comedi_device *dev, struct comedi_subdevice *s) { struct nidio96_private *devpriv = dev->private; @@ -532,6 +546,29 @@ static int ni_pcidio_insn_bits(struct comedi_device *dev, return insn->n; } +static int ni_pcidio_ns_to_timer(int *nanosec, unsigned int flags) +{ + int divider, base; + + base = TIMER_BASE; + + switch (flags & TRIG_ROUND_MASK) { + case TRIG_ROUND_NEAREST: + default: + divider = (*nanosec + base / 2) / base; + break; + case TRIG_ROUND_DOWN: + divider = (*nanosec) / base; + break; + case TRIG_ROUND_UP: + divider = (*nanosec + base - 1) / base; + break; + } + + *nanosec = base * divider; + return divider; +} + static int ni_pcidio_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd) { @@ -606,27 +643,20 @@ static int ni_pcidio_cmdtest(struct comedi_device *dev, return 0; } -static int ni_pcidio_ns_to_timer(int *nanosec, unsigned int flags) +static int ni_pcidio_inttrig(struct comedi_device *dev, + struct comedi_subdevice *s, + unsigned int trig_num) { - int divider, base; + struct nidio96_private *devpriv = dev->private; + struct comedi_cmd *cmd = &s->async->cmd; - base = TIMER_BASE; + if (trig_num != cmd->start_arg) + return -EINVAL; - switch (flags & TRIG_ROUND_MASK) { - case TRIG_ROUND_NEAREST: - default: - divider = (*nanosec + base / 2) / base; - break; - case TRIG_ROUND_DOWN: - divider = (*nanosec) / base; - break; - case TRIG_ROUND_UP: - divider = (*nanosec + base - 1) / base; - break; - } + writeb(devpriv->OpModeBits, devpriv->mite->daq_io_addr + OpMode); + s->async->inttrig = NULL; - *nanosec = base * divider; - return divider; + return 1; } static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) @@ -747,46 +777,6 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int setup_mite_dma(struct comedi_device *dev, struct comedi_subdevice *s) -{ - struct nidio96_private *devpriv = dev->private; - int retval; - unsigned long flags; - - retval = ni_pcidio_request_di_mite_channel(dev); - if (retval) - return retval; - - /* write alloc the entire buffer */ - comedi_buf_write_alloc(s, s->async->prealloc_bufsz); - - spin_lock_irqsave(&devpriv->mite_channel_lock, flags); - if (devpriv->di_mite_chan) { - mite_prep_dma(devpriv->di_mite_chan, 32, 32); - mite_dma_arm(devpriv->di_mite_chan); - } else - retval = -EIO; - spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); - - return retval; -} - -static int ni_pcidio_inttrig(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int trig_num) -{ - struct nidio96_private *devpriv = dev->private; - struct comedi_cmd *cmd = &s->async->cmd; - - if (trig_num != cmd->start_arg) - return -EINVAL; - - writeb(devpriv->OpModeBits, devpriv->mite->daq_io_addr + OpMode); - s->async->inttrig = NULL; - - return 1; -} - static int ni_pcidio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { -- cgit From 75c04c2834eefe0ab4fb16051af62a399d633ebe Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:19 -0700 Subject: staging: comedi: pcm3724: use default (*io) callback from 8255 module The private (*io) callback used by this driver is identical to the default one provided by the 8255 module. Use the default one instead. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcm3724.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcm3724.c b/drivers/staging/comedi/drivers/pcm3724.c index 53e73737a906..e88a5edce051 100644 --- a/drivers/staging/comedi/drivers/pcm3724.c +++ b/drivers/staging/comedi/drivers/pcm3724.c @@ -66,19 +66,6 @@ struct priv_pcm3724 { int dio_2; }; -static int subdev_8255_cb(int dir, int port, int data, unsigned long arg) -{ - unsigned long iobase = arg; - unsigned char inbres; - if (dir) { - outb(data, iobase + port); - return 0; - } else { - inbres = inb(iobase + port); - return inbres; - } -} - static int compute_buffer(int config, int devno, struct comedi_subdevice *s) { /* 1 in io_bits indicates output */ @@ -225,7 +212,7 @@ static int pcm3724_attach(struct comedi_device *dev, for (i = 0; i < dev->n_subdevices; i++) { s = &dev->subdevices[i]; - ret = subdev_8255_init(dev, s, subdev_8255_cb, + ret = subdev_8255_init(dev, s, NULL, dev->iobase + SIZE_8255 * i); if (ret) return ret; -- cgit From bb3bd743b8394452f8415be099aa512a5bfeb03a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:20 -0700 Subject: staging: comedi: pcl816: remove forward declaration Move check_channel_list() to remove the need for the forward declaration. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcl816.c | 116 +++++++++++++++----------------- 1 file changed, 56 insertions(+), 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/pcl816.c b/drivers/staging/comedi/drivers/pcl816.c index 7cd54359af64..54732c5cab97 100644 --- a/drivers/staging/comedi/drivers/pcl816.c +++ b/drivers/staging/comedi/drivers/pcl816.c @@ -130,10 +130,6 @@ struct pcl816_private { unsigned int ai_cmd_canceled:1; }; -static int check_channel_list(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int *chanlist, unsigned int chanlen); - static void pcl816_start_pacer(struct comedi_device *dev, bool load_counters) { struct pcl816_private *devpriv = dev->private; @@ -363,6 +359,62 @@ static irqreturn_t pcl816_interrupt(int irq, void *d) return IRQ_HANDLED; } +static int check_channel_list(struct comedi_device *dev, + struct comedi_subdevice *s, + unsigned int *chanlist, + unsigned int chanlen) +{ + unsigned int chansegment[16]; + unsigned int i, nowmustbechan, seglen, segpos; + + /* correct channel and range number check itself comedi/range.c */ + if (chanlen < 1) { + dev_err(dev->class_dev, "range/channel list is empty!\n"); + return 0; + } + + if (chanlen > 1) { + /* first channel is every time ok */ + chansegment[0] = chanlist[0]; + for (i = 1, seglen = 1; i < chanlen; i++, seglen++) { + /* we detect loop, this must by finish */ + if (chanlist[0] == chanlist[i]) + break; + nowmustbechan = + (CR_CHAN(chansegment[i - 1]) + 1) % chanlen; + if (nowmustbechan != CR_CHAN(chanlist[i])) { + /* channel list isn't continuous :-( */ + dev_dbg(dev->class_dev, + "channel list must be continuous! chanlist[%i]=%d but must be %d or %d!\n", + i, CR_CHAN(chanlist[i]), nowmustbechan, + CR_CHAN(chanlist[0])); + return 0; + } + /* well, this is next correct channel in list */ + chansegment[i] = chanlist[i]; + } + + /* check whole chanlist */ + for (i = 0, segpos = 0; i < chanlen; i++) { + if (chanlist[i] != chansegment[i % seglen]) { + dev_dbg(dev->class_dev, + "bad channel or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n", + i, CR_CHAN(chansegment[i]), + CR_RANGE(chansegment[i]), + CR_AREF(chansegment[i]), + CR_CHAN(chanlist[i % seglen]), + CR_RANGE(chanlist[i % seglen]), + CR_AREF(chansegment[i % seglen])); + return 0; /* chan/gain list is strange */ + } + } + } else { + seglen = 1; + } + + return seglen; /* we can serve this with MUX logic */ +} + static int pcl816_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd) { @@ -542,62 +594,6 @@ static int pcl816_ai_cancel(struct comedi_device *dev, return 0; } -static int -check_channel_list(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned int *chanlist, - unsigned int chanlen) -{ - unsigned int chansegment[16]; - unsigned int i, nowmustbechan, seglen, segpos; - - /* correct channel and range number check itself comedi/range.c */ - if (chanlen < 1) { - dev_err(dev->class_dev, "range/channel list is empty!\n"); - return 0; - } - - if (chanlen > 1) { - /* first channel is every time ok */ - chansegment[0] = chanlist[0]; - for (i = 1, seglen = 1; i < chanlen; i++, seglen++) { - /* we detect loop, this must by finish */ - if (chanlist[0] == chanlist[i]) - break; - nowmustbechan = - (CR_CHAN(chansegment[i - 1]) + 1) % chanlen; - if (nowmustbechan != CR_CHAN(chanlist[i])) { - /* channel list isn't continuous :-( */ - dev_dbg(dev->class_dev, - "channel list must be continuous! chanlist[%i]=%d but must be %d or %d!\n", - i, CR_CHAN(chanlist[i]), nowmustbechan, - CR_CHAN(chanlist[0])); - return 0; - } - /* well, this is next correct channel in list */ - chansegment[i] = chanlist[i]; - } - - /* check whole chanlist */ - for (i = 0, segpos = 0; i < chanlen; i++) { - if (chanlist[i] != chansegment[i % seglen]) { - dev_dbg(dev->class_dev, - "bad channel or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n", - i, CR_CHAN(chansegment[i]), - CR_RANGE(chansegment[i]), - CR_AREF(chansegment[i]), - CR_CHAN(chanlist[i % seglen]), - CR_RANGE(chanlist[i % seglen]), - CR_AREF(chansegment[i % seglen])); - return 0; /* chan/gain list is strange */ - } - } - } else { - seglen = 1; - } - - return seglen; /* we can serve this with MUX logic */ -} - static int pcl816_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, -- cgit From 472cd3db7b47a0720678e4c7cc1a472d2c06c218 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:21 -0700 Subject: staging: comedi: drivers: remove unnecessary PCI_DEVICE_ID_* defines These defines are only used once in the pci_device_id tables. Remove them and just open code the values. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_pci.c | 28 ++++------------------- drivers/staging/comedi/drivers/amplc_pci263.c | 5 +--- drivers/staging/comedi/drivers/contec_pci_dio.c | 4 +--- drivers/staging/comedi/drivers/das08_pci.c | 4 +--- drivers/staging/comedi/drivers/icp_multi.c | 4 +--- 5 files changed, 9 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_pci.c b/drivers/staging/comedi/drivers/amplc_dio200_pci.c index e0367380b37a..3cec0e020adb 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_pci.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_pci.c @@ -228,13 +228,6 @@ #include "amplc_dio200.h" -/* PCI IDs */ -#define PCI_DEVICE_ID_AMPLICON_PCI272 0x000a -#define PCI_DEVICE_ID_AMPLICON_PCI215 0x000b -#define PCI_DEVICE_ID_AMPLICON_PCIE236 0x0011 -#define PCI_DEVICE_ID_AMPLICON_PCIE215 0x0012 -#define PCI_DEVICE_ID_AMPLICON_PCIE296 0x0014 - /* * Board descriptions. */ @@ -440,22 +433,11 @@ static struct comedi_driver dio200_pci_comedi_driver = { }; static const struct pci_device_id dio200_pci_table[] = { - { - PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_AMPLICON_PCI215), - pci215_model - }, { - PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_AMPLICON_PCI272), - pci272_model - }, { - PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_AMPLICON_PCIE236), - pcie236_model - }, { - PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_AMPLICON_PCIE215), - pcie215_model - }, { - PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_AMPLICON_PCIE296), - pcie296_model - }, + { PCI_VDEVICE(AMPLICON, 0x000b), pci215_model }, + { PCI_VDEVICE(AMPLICON, 0x000a), pci272_model }, + { PCI_VDEVICE(AMPLICON, 0x0011), pcie236_model }, + { PCI_VDEVICE(AMPLICON, 0x0012), pcie215_model }, + { PCI_VDEVICE(AMPLICON, 0x0014), pcie296_model }, {0} }; diff --git a/drivers/staging/comedi/drivers/amplc_pci263.c b/drivers/staging/comedi/drivers/amplc_pci263.c index 93ed03ee416a..8137325004c0 100644 --- a/drivers/staging/comedi/drivers/amplc_pci263.c +++ b/drivers/staging/comedi/drivers/amplc_pci263.c @@ -39,9 +39,6 @@ The state of the outputs can be read. #define PCI263_DRIVER_NAME "amplc_pci263" -/* PCI263 PCI configuration register information */ -#define PCI_DEVICE_ID_AMPLICON_PCI263 0x000c - static int pci263_do_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -95,7 +92,7 @@ static struct comedi_driver amplc_pci263_driver = { }; static const struct pci_device_id pci263_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, PCI_DEVICE_ID_AMPLICON_PCI263) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x000c) }, {0} }; MODULE_DEVICE_TABLE(pci, pci263_pci_table); diff --git a/drivers/staging/comedi/drivers/contec_pci_dio.c b/drivers/staging/comedi/drivers/contec_pci_dio.c index 0a9c32e9db4a..f066fb06dc1d 100644 --- a/drivers/staging/comedi/drivers/contec_pci_dio.c +++ b/drivers/staging/comedi/drivers/contec_pci_dio.c @@ -30,8 +30,6 @@ Configuration Options: not applicable, uses comedi PCI auto config #include "../comedidev.h" -#define PCI_DEVICE_ID_PIO1616L 0x8172 - /* * Register map */ @@ -110,7 +108,7 @@ static int contec_pci_dio_pci_probe(struct pci_dev *dev, } static const struct pci_device_id contec_pci_dio_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CONTEC, PCI_DEVICE_ID_PIO1616L) }, + { PCI_DEVICE(PCI_VENDOR_ID_CONTEC, 0x8172) }, { 0 } }; MODULE_DEVICE_TABLE(pci, contec_pci_dio_pci_table); diff --git a/drivers/staging/comedi/drivers/das08_pci.c b/drivers/staging/comedi/drivers/das08_pci.c index d94af09151b0..4ce3eb0a64cc 100644 --- a/drivers/staging/comedi/drivers/das08_pci.c +++ b/drivers/staging/comedi/drivers/das08_pci.c @@ -38,8 +38,6 @@ #include "das08.h" -#define PCI_DEVICE_ID_PCIDAS08 0x0029 - static const struct das08_board_struct das08_pci_boards[] = { { .name = "pci-das08", @@ -90,7 +88,7 @@ static int das08_pci_probe(struct pci_dev *dev, } static const struct pci_device_id das08_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_DEVICE_ID_PCIDAS08) }, + { PCI_DEVICE(PCI_VENDOR_ID_CB, 0x0029) }, { 0 } }; MODULE_DEVICE_TABLE(pci, das08_pci_table); diff --git a/drivers/staging/comedi/drivers/icp_multi.c b/drivers/staging/comedi/drivers/icp_multi.c index acc80e22311c..e646958980f3 100644 --- a/drivers/staging/comedi/drivers/icp_multi.c +++ b/drivers/staging/comedi/drivers/icp_multi.c @@ -49,8 +49,6 @@ Configuration options: not applicable, uses PCI auto config #include "../comedidev.h" -#define PCI_DEVICE_ID_ICP_MULTI 0x8000 - #define ICP_MULTI_ADC_CSR 0 /* R/W: ADC command/status register */ #define ICP_MULTI_AI 2 /* R: Analogue input data */ #define ICP_MULTI_DAC_CSR 4 /* R/W: DAC command/status register */ @@ -594,7 +592,7 @@ static int icp_multi_pci_probe(struct pci_dev *dev, } static const struct pci_device_id icp_multi_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ICP, PCI_DEVICE_ID_ICP_MULTI) }, + { PCI_DEVICE(PCI_VENDOR_ID_ICP, 0x8000) }, { 0 } }; MODULE_DEVICE_TABLE(pci, icp_multi_pci_table); -- cgit From 862755ec07572036b0c69d738b88f89b6beede99 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:22 -0700 Subject: staging: comedi: drivers: remove unnecessary *_SIZE defines Some of the legacy comedi drivers have a *_SIZE define that is only passed to comedi_request_region() to specify the size of the region. Some of the pnp drivers (pci, etc.) also have a *_SIZE define which is unused. For aesthetics, remove these defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/aio_iiro_16.c | 3 +-- drivers/staging/comedi/drivers/amplc_pc236.c | 5 +---- drivers/staging/comedi/drivers/amplc_pc263.c | 3 +-- drivers/staging/comedi/drivers/amplc_pci224.c | 2 -- drivers/staging/comedi/drivers/amplc_pci230.c | 3 --- drivers/staging/comedi/drivers/cb_das16_cs.c | 2 -- drivers/staging/comedi/drivers/cb_pcimdas.c | 3 --- drivers/staging/comedi/drivers/das16m1.c | 3 +-- drivers/staging/comedi/drivers/das800.c | 3 +-- drivers/staging/comedi/drivers/dt2811.c | 4 +--- drivers/staging/comedi/drivers/dt2814.c | 4 +--- drivers/staging/comedi/drivers/dt2815.c | 4 +--- drivers/staging/comedi/drivers/dt2817.c | 4 +--- drivers/staging/comedi/drivers/mpc624.c | 5 +---- drivers/staging/comedi/drivers/multiq3.c | 4 +--- drivers/staging/comedi/drivers/ni_at_a2150.c | 3 +-- drivers/staging/comedi/drivers/ni_atmio16d.c | 4 +--- drivers/staging/comedi/drivers/ni_labpc.c | 4 +--- drivers/staging/comedi/drivers/ni_pcidio.c | 3 --- drivers/staging/comedi/drivers/pcm3724.c | 3 +-- drivers/staging/comedi/drivers/s526.c | 5 +---- drivers/staging/comedi/drivers/skel.c | 3 --- 22 files changed, 16 insertions(+), 61 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/aio_iiro_16.c b/drivers/staging/comedi/drivers/aio_iiro_16.c index 781104aa533e..7b5ed439c164 100644 --- a/drivers/staging/comedi/drivers/aio_iiro_16.c +++ b/drivers/staging/comedi/drivers/aio_iiro_16.c @@ -33,7 +33,6 @@ Configuration Options: #include #include "../comedidev.h" -#define AIO_IIRO_16_SIZE 0x08 #define AIO_IIRO_16_RELAY_0_7 0x00 #define AIO_IIRO_16_INPUT_0_7 0x01 #define AIO_IIRO_16_IRQ 0x02 @@ -74,7 +73,7 @@ static int aio_iiro_16_attach(struct comedi_device *dev, struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], AIO_IIRO_16_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x8); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 2a1006835dec..6089341d2135 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -68,9 +68,6 @@ unused. /* PC36AT / PCI236 registers */ -#define PC236_IO_SIZE 4 -#define PC236_LCR_IO_SIZE 128 - /* Disable, and clear, interrupts */ #define PCI236_INTR_DISABLE (PLX9052_INTCSR_LI1POL | \ PLX9052_INTCSR_LI2POL | \ @@ -448,7 +445,7 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* Process options according to bus type. */ if (is_isa_board(thisboard)) { - ret = comedi_request_region(dev, it->options[0], PC236_IO_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x4); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/amplc_pc263.c b/drivers/staging/comedi/drivers/amplc_pc263.c index 7c10d28d2784..c0a20dccd88a 100644 --- a/drivers/staging/comedi/drivers/amplc_pc263.c +++ b/drivers/staging/comedi/drivers/amplc_pc263.c @@ -39,7 +39,6 @@ The state of the outputs can be read. #define PC263_DRIVER_NAME "amplc_pc263" /* PC263 registers */ -#define PC263_IO_SIZE 2 /* * Board descriptions for Amplicon PC263. @@ -75,7 +74,7 @@ static int pc263_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], PC263_IO_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x2); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c index 55f69c5981c4..64a961a5643a 100644 --- a/drivers/staging/comedi/drivers/amplc_pci224.c +++ b/drivers/staging/comedi/drivers/amplc_pci224.c @@ -120,7 +120,6 @@ Caveats: /* * PCI224/234 i/o space 1 (PCIBAR2) registers. */ -#define PCI224_IO1_SIZE 0x20 /* Size of i/o space 1 (8-bit registers) */ #define PCI224_Z2_CT0 0x14 /* 82C54 counter/timer 0 */ #define PCI224_Z2_CT1 0x15 /* 82C54 counter/timer 1 */ #define PCI224_Z2_CT2 0x16 /* 82C54 counter/timer 2 */ @@ -133,7 +132,6 @@ Caveats: /* * PCI224/234 i/o space 2 (PCIBAR3) 16-bit registers. */ -#define PCI224_IO2_SIZE 0x10 /* Size of i/o space 2 (16-bit registers). */ #define PCI224_DACDATA 0x00 /* (w-o) DAC FIFO data. */ #define PCI224_SOFTTRIG 0x00 /* (r-o) DAC software scan trigger. */ #define PCI224_DACCON 0x02 /* (r/w) DAC status/configuration. */ diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index eca16a6b09d7..a61d9904d970 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -200,9 +200,6 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI_DEVICE_ID_PCI260 0x0006 #define PCI_DEVICE_ID_INVALID 0xffff -#define PCI230_IO1_SIZE 32 /* Size of I/O space 1 */ -#define PCI230_IO2_SIZE 16 /* Size of I/O space 2 */ - /* PCI230 i/o space 1 registers. */ #define PCI230_PPI_X_BASE 0x00 /* User PPI (82C55) base */ #define PCI230_PPI_X_A 0x00 /* User PPI (82C55) port A */ diff --git a/drivers/staging/comedi/drivers/cb_das16_cs.c b/drivers/staging/comedi/drivers/cb_das16_cs.c index eb1b92d72e87..853733e28845 100644 --- a/drivers/staging/comedi/drivers/cb_das16_cs.c +++ b/drivers/staging/comedi/drivers/cb_das16_cs.c @@ -46,8 +46,6 @@ Status: experimental #include "comedi_fc.h" #include "8253.h" -#define DAS16CS_SIZE 18 - #define DAS16CS_ADC_DATA 0 #define DAS16CS_DIO_MUX 2 #define DAS16CS_MISC1 4 diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c index 50e522e6e690..ccb9c72bc0c3 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdas.c +++ b/drivers/staging/comedi/drivers/cb_pcimdas.c @@ -47,9 +47,6 @@ See http://www.mccdaq.com/PDFs/Manuals/pcim-das1602-16.pdf for more details. /* Registers for the PCIM-DAS1602/16 */ -/* sizes of io regions (bytes) */ -#define BADR3_SIZE 16 - /* DAC Offsets */ #define ADC_TRIG 0 #define DAC0_OFFSET 2 diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c index 2e9cbec404f8..5b6998b54060 100644 --- a/drivers/staging/comedi/drivers/das16m1.c +++ b/drivers/staging/comedi/drivers/das16m1.c @@ -60,7 +60,6 @@ irq can be omitted, although the cmd interface will not work without it. #include "8253.h" #include "comedi_fc.h" -#define DAS16M1_SIZE 16 #define DAS16M1_SIZE2 8 #define FIFO_SIZE 1024 /* 1024 sample fifo */ @@ -549,7 +548,7 @@ static int das16m1_attach(struct comedi_device *dev, if (!devpriv) return -ENOMEM; - ret = comedi_request_region(dev, it->options[0], DAS16M1_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; /* Request an additional region for the 8255 */ diff --git a/drivers/staging/comedi/drivers/das800.c b/drivers/staging/comedi/drivers/das800.c index 6f7f8d531dd5..cbbb29797b83 100644 --- a/drivers/staging/comedi/drivers/das800.c +++ b/drivers/staging/comedi/drivers/das800.c @@ -65,7 +65,6 @@ cmd triggers supported: #include "8253.h" #include "comedi_fc.h" -#define DAS800_SIZE 8 #define N_CHAN_AI 8 /* number of analog input channels */ /* Registers for the das800 */ @@ -686,7 +685,7 @@ static int das800_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!devpriv) return -ENOMEM; - ret = comedi_request_region(dev, it->options[0], DAS800_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x8); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/dt2811.c b/drivers/staging/comedi/drivers/dt2811.c index ba7c2ba618e6..a2e9caf3256f 100644 --- a/drivers/staging/comedi/drivers/dt2811.c +++ b/drivers/staging/comedi/drivers/dt2811.c @@ -169,8 +169,6 @@ static const struct comedi_lrange range_dt2811_pgl_ai_5_bipolar = { #define TIMEOUT 10000 -#define DT2811_SIZE 8 - #define DT2811_ADCSR 0 #define DT2811_ADGCR 1 #define DT2811_ADDATLO 2 @@ -344,7 +342,7 @@ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it) int ret; struct comedi_subdevice *s; - ret = comedi_request_region(dev, it->options[0], DT2811_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x8); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/dt2814.c b/drivers/staging/comedi/drivers/dt2814.c index 4c4b1f9c86a6..9216c35c414e 100644 --- a/drivers/staging/comedi/drivers/dt2814.c +++ b/drivers/staging/comedi/drivers/dt2814.c @@ -42,8 +42,6 @@ addition, the clock does not seem to be very accurate. #include "comedi_fc.h" -#define DT2814_SIZE 2 - #define DT2814_CSR 0 #define DT2814_DATA 1 @@ -243,7 +241,7 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) int ret; int i; - ret = comedi_request_region(dev, it->options[0], DT2814_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x2); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/dt2815.c b/drivers/staging/comedi/drivers/dt2815.c index 1f321db740a4..a98fb66fdd53 100644 --- a/drivers/staging/comedi/drivers/dt2815.c +++ b/drivers/staging/comedi/drivers/dt2815.c @@ -56,8 +56,6 @@ Configuration options: #include -#define DT2815_SIZE 2 - #define DT2815_DATA 0 #define DT2815_STATUS 1 @@ -154,7 +152,7 @@ static int dt2815_attach(struct comedi_device *dev, struct comedi_devconfig *it) const struct comedi_lrange *current_range_type, *voltage_range_type; int ret; - ret = comedi_request_region(dev, it->options[0], DT2815_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x2); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/dt2817.c b/drivers/staging/comedi/drivers/dt2817.c index bf589936e546..5131deebf66f 100644 --- a/drivers/staging/comedi/drivers/dt2817.c +++ b/drivers/staging/comedi/drivers/dt2817.c @@ -36,8 +36,6 @@ Configuration options: #include #include "../comedidev.h" -#define DT2817_SIZE 5 - #define DT2817_CR 0 #define DT2817_DATA 1 @@ -114,7 +112,7 @@ static int dt2817_attach(struct comedi_device *dev, struct comedi_devconfig *it) int ret; struct comedi_subdevice *s; - ret = comedi_request_region(dev, it->options[0], DT2817_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x5); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/mpc624.c b/drivers/staging/comedi/drivers/mpc624.c index f770400a0e81..1241f9987cab 100644 --- a/drivers/staging/comedi/drivers/mpc624.c +++ b/drivers/staging/comedi/drivers/mpc624.c @@ -56,9 +56,6 @@ Configuration Options: #include -/* Consecutive I/O port addresses */ -#define MPC624_SIZE 16 - /* Offsets of different ports */ #define MPC624_MASTER_CONTROL 0 /* not used */ #define MPC624_GNMUXCH 1 /* Gain, Mux, Channel of ADC */ @@ -279,7 +276,7 @@ static int mpc624_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], MPC624_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/multiq3.c b/drivers/staging/comedi/drivers/multiq3.c index 60bda9c47cf1..e841a5a3ec4f 100644 --- a/drivers/staging/comedi/drivers/multiq3.c +++ b/drivers/staging/comedi/drivers/multiq3.c @@ -28,8 +28,6 @@ Devices: [Quanser Consulting] MultiQ-3 (multiq3) #include #include "../comedidev.h" -#define MULTIQ3_SIZE 16 - /* * MULTIQ-3 port offsets */ @@ -233,7 +231,7 @@ static int multiq3_attach(struct comedi_device *dev, struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], MULTIQ3_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/ni_at_a2150.c b/drivers/staging/comedi/drivers/ni_at_a2150.c index 76fed317403e..de67161f6185 100644 --- a/drivers/staging/comedi/drivers/ni_at_a2150.c +++ b/drivers/staging/comedi/drivers/ni_at_a2150.c @@ -71,7 +71,6 @@ TRIG_WAKE_EOS #include "8253.h" #include "comedi_fc.h" -#define A2150_SIZE 28 #define A2150_DMA_BUFFER_SIZE 0xff00 /* size in bytes of dma buffer */ /* Registers and bits */ @@ -702,7 +701,7 @@ static int a2150_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!devpriv) return -ENOMEM; - ret = comedi_request_region(dev, it->options[0], A2150_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x1c); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/ni_atmio16d.c b/drivers/staging/comedi/drivers/ni_atmio16d.c index b1b4744bc42e..9c08da9508f4 100644 --- a/drivers/staging/comedi/drivers/ni_atmio16d.c +++ b/drivers/staging/comedi/drivers/ni_atmio16d.c @@ -94,8 +94,6 @@ Devices: [National Instruments] AT-MIO-16 (atmio16), AT-MIO-16D (atmio16d) #define CLOCK_10_KHZ 0x8D25 #define CLOCK_1_KHZ 0x8E25 #define CLOCK_100_HZ 0x8F25 -/* Other miscellaneous defines */ -#define ATMIO16D_SIZE 32 /* bus address range */ struct atmio16_board_t { @@ -624,7 +622,7 @@ static int atmio16d_attach(struct comedi_device *dev, struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], ATMIO16D_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x20); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 8b41813ebf65..51a6d4e78c04 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -72,8 +72,6 @@ #include "ni_labpc_regs.h" #include "ni_labpc_isadma.h" -#define LABPC_SIZE 0x20 /* size of ISA io region */ - enum scan_mode { MODE_SINGLE_CHAN, MODE_SINGLE_CHAN_INTERVAL, @@ -1465,7 +1463,7 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!devpriv) return -ENOMEM; - ret = comedi_request_region(dev, it->options[0], LABPC_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x20); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 0a24b216c226..2bf86911cb6b 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -58,9 +58,6 @@ comedi_nonfree_firmware tarball available from http://www.comedi.org #include "comedi_fc.h" #include "mite.h" -#define PCI_DIO_SIZE 4096 -#define PCI_MITE_SIZE 4096 - /* defines for the PCI-DIO-32HS */ #define Window_Address 4 /* W */ diff --git a/drivers/staging/comedi/drivers/pcm3724.c b/drivers/staging/comedi/drivers/pcm3724.c index e88a5edce051..6e0d78f6095b 100644 --- a/drivers/staging/comedi/drivers/pcm3724.c +++ b/drivers/staging/comedi/drivers/pcm3724.c @@ -33,7 +33,6 @@ Copy/pasted/hacked from pcm724.c #include "8255.h" -#define PCM3724_SIZE 16 #define SIZE_8255 4 #define BUF_C0 0x1 @@ -202,7 +201,7 @@ static int pcm3724_attach(struct comedi_device *dev, if (!priv) return -ENOMEM; - ret = comedi_request_region(dev, it->options[0], PCM3724_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/s526.c b/drivers/staging/comedi/drivers/s526.c index 208567d2cb21..83f7433c2452 100644 --- a/drivers/staging/comedi/drivers/s526.c +++ b/drivers/staging/comedi/drivers/s526.c @@ -40,13 +40,10 @@ comedi_config /dev/comedi0 s526 0x2C0,0x3 #include "../comedidev.h" #include -#define S526_SIZE 64 - #define S526_START_AI_CONV 0 #define S526_AI_READ 0 /* Ports */ -#define S526_IOSIZE 0x40 #define S526_NUM_PORTS 27 /* registers */ @@ -556,7 +553,7 @@ static int s526_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], S526_IOSIZE); + ret = comedi_request_region(dev, it->options[0], 0x40); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/skel.c b/drivers/staging/comedi/drivers/skel.c index 7661f2b0a183..a118678c24a1 100644 --- a/drivers/staging/comedi/drivers/skel.c +++ b/drivers/staging/comedi/drivers/skel.c @@ -75,9 +75,6 @@ Configuration Options: #include "comedi_fc.h" /* Imaginary registers for the imaginary board */ - -#define SKEL_SIZE 0 - #define SKEL_START_AI_CONV 0 #define SKEL_AI_READ 0 -- cgit From 3d03cfcaf6cde186f439ca1a318423007570760a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:23 -0700 Subject: staging: comedi: drivers: remove unnecessary DRIVER_NAME defines These defines are usually only used to initialize the driver_name member of the comedi_driver struct. Some of the drivers also use the define as part of dev_{level}() messages and/or when doing a request_irq(). The addition of the DRIVER_NAME to the messages is just added noise and the dev->board_name is typically used in the request_irq(). Just remove all the DRIVER_NAME defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 16 ++++++---------- drivers/staging/comedi/drivers/amplc_pc263.c | 4 +--- drivers/staging/comedi/drivers/amplc_pci224.c | 21 +++++++++------------ drivers/staging/comedi/drivers/amplc_pci263.c | 6 ++---- drivers/staging/comedi/drivers/unioxx5.c | 3 +-- 5 files changed, 19 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 6089341d2135..243b0f4d0312 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -57,8 +57,6 @@ unused. #include "8255.h" #include "plx9052.h" -#define PC236_DRIVER_NAME "amplc_pc236" - #define DO_ISA IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_ISA) #define DO_PCI IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) @@ -111,7 +109,7 @@ static const struct pc236_board pc236_boards[] = { .model = pci236_model, }, { - .name = PC236_DRIVER_NAME, + .name = "amplc_pc236", .devid = PCI_DEVICE_ID_INVALID, .bustype = pci_bustype, .model = anypci_model, /* wildcard */ @@ -391,7 +389,7 @@ static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, pc236_intr_disable(dev); if (irq) { if (request_irq(irq, pc236_interrupt, req_irq_flags, - PC236_DRIVER_NAME, dev) >= 0) { + dev->board_name, dev) >= 0) { dev->irq = irq; s->type = COMEDI_SUBD_DI; s->subdev_flags = SDF_READABLE | SDF_CMD_READ; @@ -459,8 +457,7 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) return pc236_pci_common_attach(dev, pci_dev); } - dev_err(dev->class_dev, PC236_DRIVER_NAME - ": BUG! cannot determine board type!\n"); + dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); return -EINVAL; } @@ -478,8 +475,7 @@ static int pc236_auto_attach(struct comedi_device *dev, if (!DO_PCI) return -EINVAL; - dev_info(dev->class_dev, PC236_DRIVER_NAME ": attach pci %s\n", - pci_name(pci_dev)); + dev_info(dev->class_dev, "attach pci %s\n", pci_name(pci_dev)); devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) @@ -528,7 +524,7 @@ static void pc236_detach(struct comedi_device *dev) * the device code. */ static struct comedi_driver amplc_pc236_driver = { - .driver_name = PC236_DRIVER_NAME, + .driver_name = "amplc_pc236", .module = THIS_MODULE, .attach = pc236_attach, .auto_attach = pc236_auto_attach, @@ -554,7 +550,7 @@ static int amplc_pc236_pci_probe(struct pci_dev *dev, } static struct pci_driver amplc_pc236_pci_driver = { - .name = PC236_DRIVER_NAME, + .name = "amplc_pc236", .id_table = pc236_pci_table, .probe = &lc_pc236_pci_probe, .remove = comedi_pci_auto_unconfig, diff --git a/drivers/staging/comedi/drivers/amplc_pc263.c b/drivers/staging/comedi/drivers/amplc_pc263.c index c0a20dccd88a..f8e551d8fd9e 100644 --- a/drivers/staging/comedi/drivers/amplc_pc263.c +++ b/drivers/staging/comedi/drivers/amplc_pc263.c @@ -36,8 +36,6 @@ The state of the outputs can be read. #include #include "../comedidev.h" -#define PC263_DRIVER_NAME "amplc_pc263" - /* PC263 registers */ /* @@ -97,7 +95,7 @@ static int pc263_attach(struct comedi_device *dev, struct comedi_devconfig *it) } static struct comedi_driver amplc_pc263_driver = { - .driver_name = PC263_DRIVER_NAME, + .driver_name = "amplc_pc263", .module = THIS_MODULE, .attach = pc263_attach, .detach = comedi_legacy_detach, diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c index 64a961a5643a..45aba1f950fc 100644 --- a/drivers/staging/comedi/drivers/amplc_pci224.c +++ b/drivers/staging/comedi/drivers/amplc_pci224.c @@ -108,8 +108,6 @@ Caveats: #include "comedi_fc.h" #include "8253.h" -#define DRIVER_NAME "amplc_pci224" - /* * PCI IDs. */ @@ -352,7 +350,7 @@ static const struct pci224_board pci224_boards[] = { .ao_bits = 16, }, { - .name = DRIVER_NAME, + .name = "amplc_pci224", .devid = PCI_DEVICE_ID_INVALID, .model = any_model, /* wildcard */ }, @@ -1204,8 +1202,8 @@ static int pci224_attach_common(struct comedi_device *dev, if (options) { for (n = 2; n < 3 + s->n_chan; n++) { if (options[n] < 0 || options[n] > 1) { - dev_warn(dev->class_dev, DRIVER_NAME - ": warning! bad options[%u]=%d\n", + dev_warn(dev->class_dev, + "warning! bad options[%u]=%d\n", n, options[n]); } } @@ -1235,8 +1233,8 @@ static int pci224_attach_common(struct comedi_device *dev, devpriv->hwrange = hwrange_pci224_external; } else { if (options && options[2] != 0) { - dev_warn(dev->class_dev, DRIVER_NAME - ": warning! bad options[2]=%d\n", + dev_warn(dev->class_dev, + "warning! bad options[2]=%d\n", options[2]); } s->range_table = &range_pci224_internal; @@ -1248,7 +1246,7 @@ static int pci224_attach_common(struct comedi_device *dev, if (irq) { ret = request_irq(irq, pci224_interrupt, IRQF_SHARED, - DRIVER_NAME, dev); + dev->board_name, dev); if (ret < 0) { dev_err(dev->class_dev, "error! unable to allocate irq %u\n", irq); @@ -1265,7 +1263,7 @@ static int pci224_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct pci224_private *devpriv; struct pci_dev *pci_dev; - dev_info(dev->class_dev, DRIVER_NAME ": attach\n"); + dev_info(dev->class_dev, "attach\n"); devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) @@ -1284,8 +1282,7 @@ pci224_auto_attach(struct comedi_device *dev, unsigned long context_unused) struct pci_dev *pci_dev = comedi_to_pci_dev(dev); struct pci224_private *devpriv; - dev_info(dev->class_dev, DRIVER_NAME ": attach pci %s\n", - pci_name(pci_dev)); + dev_info(dev->class_dev, "attach pci %s\n", pci_name(pci_dev)); devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) @@ -1294,7 +1291,7 @@ pci224_auto_attach(struct comedi_device *dev, unsigned long context_unused) dev->board_ptr = pci224_find_pci_board(pci_dev); if (dev->board_ptr == NULL) { dev_err(dev->class_dev, - DRIVER_NAME ": BUG! cannot determine board type!\n"); + "BUG! cannot determine board type!\n"); return -EINVAL; } /* diff --git a/drivers/staging/comedi/drivers/amplc_pci263.c b/drivers/staging/comedi/drivers/amplc_pci263.c index 8137325004c0..748a6b108f32 100644 --- a/drivers/staging/comedi/drivers/amplc_pci263.c +++ b/drivers/staging/comedi/drivers/amplc_pci263.c @@ -37,8 +37,6 @@ The state of the outputs can be read. #include "../comedidev.h" -#define PCI263_DRIVER_NAME "amplc_pci263" - static int pci263_do_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -85,7 +83,7 @@ static int pci263_auto_attach(struct comedi_device *dev, } static struct comedi_driver amplc_pci263_driver = { - .driver_name = PCI263_DRIVER_NAME, + .driver_name = "amplc_pci263", .module = THIS_MODULE, .auto_attach = pci263_auto_attach, .detach = comedi_pci_disable, @@ -105,7 +103,7 @@ static int amplc_pci263_pci_probe(struct pci_dev *dev, } static struct pci_driver amplc_pci263_pci_driver = { - .name = PCI263_DRIVER_NAME, + .name = "amplc_pci263", .id_table = pci263_pci_table, .probe = &lc_pci263_pci_probe, .remove = comedi_pci_auto_unconfig, diff --git a/drivers/staging/comedi/drivers/unioxx5.c b/drivers/staging/comedi/drivers/unioxx5.c index adf7cb7086cc..7c2276a086ac 100644 --- a/drivers/staging/comedi/drivers/unioxx5.c +++ b/drivers/staging/comedi/drivers/unioxx5.c @@ -43,7 +43,6 @@ Devices: [Fastwel] UNIOxx-5 (unioxx5), #include #include "../comedidev.h" -#define DRIVER_NAME "unioxx5" #define UNIOXX5_SIZE 0x10 #define UNIOXX5_SUBDEV_BASE 0xA000 /* base addr of first subdev */ #define UNIOXX5_SUBDEV_ODDS 0x400 @@ -496,7 +495,7 @@ static void unioxx5_detach(struct comedi_device *dev) } static struct comedi_driver unioxx5_driver = { - .driver_name = DRIVER_NAME, + .driver_name = "unioxx5", .module = THIS_MODULE, .attach = unioxx5_attach, .detach = unioxx5_detach, -- cgit From 71e068743a5e4061a7a3c42cc3ac6dbda7a7f76e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:01:24 -0700 Subject: staging: comedi: drivers: use dev->board_name in request_irq() Most of the comedi drivers use the dev->board_name for the id string passed to request_irq(). Fix the couple that still pass something else. Also, propogate the errno from request_irq(). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas.c | 7 ++++--- drivers/staging/comedi/drivers/cb_pcidas64.c | 9 +++++---- drivers/staging/comedi/drivers/ni_660x.c | 4 ++-- drivers/staging/comedi/drivers/ni_atmio.c | 3 +-- 4 files changed, 12 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c index 8e82383d2fb8..4a7bd4e5dd72 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas.c +++ b/drivers/staging/comedi/drivers/cb_pcidas.c @@ -1471,11 +1471,12 @@ static int cb_pcidas_auto_attach(struct comedi_device *dev, outl(INTCSR_INBOX_INTR_STATUS, devpriv->s5933_config + AMCC_OP_REG_INTCSR); - if (request_irq(pcidev->irq, cb_pcidas_interrupt, - IRQF_SHARED, dev->driver->driver_name, dev)) { + ret = request_irq(pcidev->irq, cb_pcidas_interrupt, IRQF_SHARED, + dev->board_name, dev); + if (ret) { dev_dbg(dev->class_dev, "unable to allocate irq %d\n", pcidev->irq); - return -EINVAL; + return ret; } dev->irq = pcidev->irq; diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 4012d8cba121..4b332ddec022 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -3989,12 +3989,13 @@ static int auto_attach(struct comedi_device *dev, devpriv->hw_revision); init_plx9080(dev); init_stc_registers(dev); - /* get irq */ - if (request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, - "cb_pcidas64", dev)) { + + retval = request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, + dev->board_name, dev); + if (retval) { dev_dbg(dev->class_dev, "unable to allocate irq %u\n", pcidev->irq); - return -EINVAL; + return retval; } dev->irq = pcidev->irq; dev_dbg(dev->class_dev, "irq %u\n", dev->irq); diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index f0580568d53a..6b8c702f2008 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -1165,8 +1165,8 @@ static int ni_660x_auto_attach(struct comedi_device *dev, for (i = 0; i < board->n_chips; ++i) set_tio_counterswap(dev, i); - ret = request_irq(pcidev->irq, ni_660x_interrupt, - IRQF_SHARED, "ni_660x", dev); + ret = request_irq(pcidev->irq, ni_660x_interrupt, IRQF_SHARED, + dev->board_name, dev); if (ret < 0) { dev_warn(dev->class_dev, " irq not available\n"); return ret; diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index c1292db643c2..2bd9f692a7ae 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c @@ -345,8 +345,7 @@ static int ni_atmio_attach(struct comedi_device *dev, if (irq > 15 || ni_irqpin[irq] == -1) return -EINVAL; ret = request_irq(irq, ni_E_interrupt, 0, - "ni_atmio", dev); - + dev->board_name, dev); if (ret < 0) return -EINVAL; dev->irq = irq; -- cgit From 88634cd820850241aafb9c1ecc822c5a4c361c0c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 18 Jul 2014 17:23:36 -0700 Subject: staging: comedi: drivers: remove unnecessary *_{IO, MEM}SIZE defines Some of the legacy comedi drivers have a *_{IO,MEM}SIZE define that is only passed to comedi_request_region() to specify the size of the region. For aesthetics, remove these defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dmm32at.c | 5 +---- drivers/staging/comedi/drivers/dt2801.c | 5 +---- drivers/staging/comedi/drivers/rti800.c | 4 +--- 3 files changed, 3 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dmm32at.c b/drivers/staging/comedi/drivers/dmm32at.c index 35a8f84867aa..e9cd2517ad81 100644 --- a/drivers/staging/comedi/drivers/dmm32at.c +++ b/drivers/staging/comedi/drivers/dmm32at.c @@ -40,9 +40,6 @@ Configuration Options: #include "comedi_fc.h" /* Board register addresses */ - -#define DMM32AT_MEMSIZE 0x10 - #define DMM32AT_CONV 0x00 #define DMM32AT_AILSB 0x00 #define DMM32AT_AUXDOUT 0x01 @@ -684,7 +681,7 @@ static int dmm32at_attach(struct comedi_device *dev, struct comedi_subdevice *s; unsigned char aihi, ailo, fifostat, aistat, intstat, airback; - ret = comedi_request_region(dev, it->options[0], DMM32AT_MEMSIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/dt2801.c b/drivers/staging/comedi/drivers/dt2801.c index 4263014426f8..ad8ba0be4878 100644 --- a/drivers/staging/comedi/drivers/dt2801.c +++ b/drivers/staging/comedi/drivers/dt2801.c @@ -40,9 +40,6 @@ Configuration options: #define DT2801_MAX_DMA_SIZE (64 * 1024) -/* Ports */ -#define DT2801_IOSIZE 2 - /* define's */ /* ====================== */ @@ -552,7 +549,7 @@ static int dt2801_attach(struct comedi_device *dev, struct comedi_devconfig *it) int ret = 0; int n_ai_chans; - ret = comedi_request_region(dev, it->options[0], DT2801_IOSIZE); + ret = comedi_request_region(dev, it->options[0], 0x2); if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/rti800.c b/drivers/staging/comedi/drivers/rti800.c index bd447b2add7b..2b1db9783bd6 100644 --- a/drivers/staging/comedi/drivers/rti800.c +++ b/drivers/staging/comedi/drivers/rti800.c @@ -81,8 +81,6 @@ #define RTI800_9513A_CNTRL 0x0d #define RTI800_9513A_STATUS 0x0d -#define RTI800_IOSIZE 0x10 - static const struct comedi_lrange range_rti800_ai_10_bipolar = { 4, { BIP_RANGE(10), @@ -281,7 +279,7 @@ static int rti800_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], RTI800_IOSIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; -- cgit From c8ea69c4a8c76a59aea1738d41781590389cdc02 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sat, 19 Jul 2014 14:53:03 +0300 Subject: Staging: comedi: adl_paci9118: organized entry comments Introductory comments organized according to Linux's comment coding style. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 109 ++++++++++++++------------- 1 file changed, 55 insertions(+), 54 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index da3fecd93275..f30b84e1987b 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -7,61 +7,62 @@ * * Author: Michal Dobes * -*/ + */ + /* -Driver: adl_pci9118 -Description: Adlink PCI-9118DG, PCI-9118HG, PCI-9118HR -Author: Michal Dobes -Devices: [ADLink] PCI-9118DG (pci9118dg), PCI-9118HG (pci9118hg), - PCI-9118HR (pci9118hr) -Status: works - -This driver supports AI, AO, DI and DO subdevices. -AI subdevice supports cmd and insn interface, -other subdevices support only insn interface. -For AI: -- If cmd->scan_begin_src=TRIG_EXT then trigger input is TGIN (pin 46). -- If cmd->convert_src=TRIG_EXT then trigger input is EXTTRG (pin 44). -- If cmd->start_src/stop_src=TRIG_EXT then trigger input is TGIN (pin 46). -- It is not necessary to have cmd.scan_end_arg=cmd.chanlist_len but - cmd.scan_end_arg modulo cmd.chanlist_len must by 0. -- If return value of cmdtest is 5 then you've bad channel list - (it isn't possible mixture S.E. and DIFF inputs or bipolar and unipolar - ranges). - -There are some hardware limitations: -a) You cann't use mixture of unipolar/bipoar ranges or differencial/single - ended inputs. -b) DMA transfers must have the length aligned to two samples (32 bit), - so there is some problems if cmd->chanlist_len is odd. This driver tries - bypass this with adding one sample to the end of the every scan and discard - it on output but this cann't be used if cmd->scan_begin_src=TRIG_FOLLOW - and is used flag TRIG_WAKE_EOS, then driver switch to interrupt driven mode - with interrupt after every sample. -c) If isn't used DMA then you can use only mode where - cmd->scan_begin_src=TRIG_FOLLOW. - -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. - [2] - 0= standard 8 DIFF/16 SE channels configuration - 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 - [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) - [5] - 0=stop measure on all hardware errors - 2 | = ignore ADOR - A/D Overrun status - 8|=ignore Bover - A/D Burst Mode Overrun status - 256|=ignore nFull - A/D FIFO Full status - -*/ + * Driver: adl_pci9118 + * Description: Adlink PCI-9118DG, PCI-9118HG, PCI-9118HR + * Author: Michal Dobes + * Devices: [ADLink] PCI-9118DG (pci9118dg), PCI-9118HG (pci9118hg), + * PCI-9118HR (pci9118hr) + * Status: works + * + * This driver supports AI, AO, DI and DO subdevices. + * AI subdevice supports cmd and insn interface, + * other subdevices support only insn interface. + * For AI: + * - If cmd->scan_begin_src=TRIG_EXT then trigger input is TGIN (pin 46). + * - If cmd->convert_src=TRIG_EXT then trigger input is EXTTRG (pin 44). + * - If cmd->start_src/stop_src=TRIG_EXT then trigger input is TGIN (pin 46). + * - It is not necessary to have cmd.scan_end_arg=cmd.chanlist_len but + * cmd.scan_end_arg modulo cmd.chanlist_len must by 0. + * - If return value of cmdtest is 5 then you've bad channel list + * (it isn't possible mixture S.E. and DIFF inputs or bipolar and unipolar + * ranges). + * + * There are some hardware limitations: + * a) You cann't use mixture of unipolar/bipoar ranges or differencial/single + * ended inputs. + * b) DMA transfers must have the length aligned to two samples (32 bit), + * so there is some problems if cmd->chanlist_len is odd. This driver tries + * bypass this with adding one sample to the end of the every scan and discard + * it on output but this cann't be used if cmd->scan_begin_src=TRIG_FOLLOW + * and is used flag TRIG_WAKE_EOS, then driver switch to interrupt driven mode + * with interrupt after every sample. + * c) If isn't used DMA then you can use only mode where + * cmd->scan_begin_src=TRIG_FOLLOW. + * + * 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. + * [2] - 0= standard 8 DIFF/16 SE channels configuration + * 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 + * [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) + * [5] - 0=stop measure on all hardware errors + * 2 | = ignore ADOR - A/D Overrun status + * 8|=ignore Bover - A/D Burst Mode Overrun status + * 256|=ignore nFull - A/D FIFO Full status + * + */ /* * FIXME -- cgit From bf7e4b0c964350cff3ab64b3212765645cacedc9 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:18 +0300 Subject: Staging: comedi: adv_pci1710: a line over 80 fixed A 'line over 80' issue fixed, by removing comment to previous line. And also, by this, 'a blank line' isssue resolved. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 602b7a1e40e6..a15a552645b7 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -722,8 +722,8 @@ static int pci171x_ai_cancel(struct comedi_device *dev, default: devpriv->CntrlReg &= Control_CNT0; devpriv->CntrlReg |= Control_SW; - - outw(devpriv->CntrlReg, dev->iobase + PCI171x_CONTROL); /* reset any operations */ + /* reset any operations */ + outw(devpriv->CntrlReg, dev->iobase + PCI171x_CONTROL); pci171x_start_pacer(dev, false); outb(0, dev->iobase + PCI171x_CLRFIFO); outb(0, dev->iobase + PCI171x_CLRINT); -- cgit From 2d323be9e617d5db851ab36af33a68b74784034a Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:19 +0300 Subject: Staging: comedi: adv_pci1710: a line over 80 issue fixed By removing a comment to previous line, 'line over 80' issue fixed. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index a15a552645b7..b4b8f85576bb 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1049,7 +1049,8 @@ static int pci171x_reset(struct comedi_device *dev) struct pci1710_private *devpriv = dev->private; outw(0x30, dev->iobase + PCI171x_CNTCTRL); - devpriv->CntrlReg = Control_SW | Control_CNT0; /* Software trigger, CNT0=external */ + /* Software trigger, CNT0=external */ + devpriv->CntrlReg = Control_SW | Control_CNT0; outw(devpriv->CntrlReg, dev->iobase + PCI171x_CONTROL); /* reset any operations */ outb(0, dev->iobase + PCI171x_CLRFIFO); /* clear FIFO */ outb(0, dev->iobase + PCI171x_CLRINT); /* clear INT request */ -- cgit From 9ab6c61b6faeb7bfe4a802f039f2bcb01a7b0400 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:20 +0300 Subject: Staging: comedi: adv_pci1710: A line style issue fixed A 'line over 80 characters' fixed by removing over-lined comment to previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index b4b8f85576bb..887aa7e22e3f 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1051,7 +1051,8 @@ static int pci171x_reset(struct comedi_device *dev) outw(0x30, dev->iobase + PCI171x_CNTCTRL); /* Software trigger, CNT0=external */ devpriv->CntrlReg = Control_SW | Control_CNT0; - outw(devpriv->CntrlReg, dev->iobase + PCI171x_CONTROL); /* reset any operations */ + /* reset any operations */ + outw(devpriv->CntrlReg, dev->iobase + PCI171x_CONTROL); outb(0, dev->iobase + PCI171x_CLRFIFO); /* clear FIFO */ outb(0, dev->iobase + PCI171x_CLRINT); /* clear INT request */ pci171x_start_pacer(dev, false); -- cgit From 1d0117ff330696092ad8949d9b7736774fe191be Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:21 +0300 Subject: Staging: comedi: adv_pci1710: a line over 80 characters fixed An issue in 'line over 80 characters' fixed and over-lined comment removed to the previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 887aa7e22e3f..bc73141284dc 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1058,7 +1058,8 @@ static int pci171x_reset(struct comedi_device *dev) pci171x_start_pacer(dev, false); devpriv->da_ranges = 0; if (this_board->n_aochan) { - outb(devpriv->da_ranges, dev->iobase + PCI171x_DAREF); /* set DACs to 0..5V */ + /* set DACs to 0..5V */ + outb(devpriv->da_ranges, dev->iobase + PCI171x_DAREF); outw(0, dev->iobase + PCI171x_DA1); /* set DA outputs to 0V */ devpriv->ao_data[0] = 0x0000; if (this_board->n_aochan > 1) { -- cgit From 40e0ccc94462d6831c81490a668af19bab30f886 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:22 +0300 Subject: Staging: comedi: adv_pci1710: a line over 80 characters resolved An issue in 'line over 80 characters' fixed by taking back over-lined comment a few characters. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index bc73141284dc..7ccd41bb1a56 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1060,7 +1060,7 @@ static int pci171x_reset(struct comedi_device *dev) if (this_board->n_aochan) { /* set DACs to 0..5V */ outb(devpriv->da_ranges, dev->iobase + PCI171x_DAREF); - outw(0, dev->iobase + PCI171x_DA1); /* set DA outputs to 0V */ + outw(0, dev->iobase + PCI171x_DA1); /* set DA outputs to 0V */ devpriv->ao_data[0] = 0x0000; if (this_board->n_aochan > 1) { outw(0, dev->iobase + PCI171x_DA2); -- cgit From 9cf7aa620189843b7a542244b6f68b1944f167be Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:23 +0300 Subject: Staging: comedi: adv_pci1710: an issue in line over 80 fixed An issue in 'line over 80 characters' fixed by removing over-lined comment to the previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 7ccd41bb1a56..6bd50159fbdc 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1080,8 +1080,8 @@ static int pci171x_reset(struct comedi_device *dev) static int pci1720_reset(struct comedi_device *dev) { struct pci1710_private *devpriv = dev->private; - - outb(Syncont_SC0, dev->iobase + PCI1720_SYNCONT); /* set synchronous output mode */ + /* set synchronous output mode */ + outb(Syncont_SC0, dev->iobase + PCI1720_SYNCONT); devpriv->da_ranges = 0xAA; outb(devpriv->da_ranges, dev->iobase + PCI1720_RANGE); /* set all ranges to +/-5V */ outw(0x0800, dev->iobase + PCI1720_DA0); /* set outputs to 0V */ -- cgit From 260f67cbe9108f593fb41700c090b7cb01f59c70 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Sun, 20 Jul 2014 17:06:24 +0300 Subject: Staging: comedi: adv_pci1710: an issue in code style fixed An issue in 'line over 80 characters' fixed by removing over-lined comment to the previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adv_pci1710.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 6bd50159fbdc..e19ab958791b 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -1083,7 +1083,8 @@ static int pci1720_reset(struct comedi_device *dev) /* set synchronous output mode */ outb(Syncont_SC0, dev->iobase + PCI1720_SYNCONT); devpriv->da_ranges = 0xAA; - outb(devpriv->da_ranges, dev->iobase + PCI1720_RANGE); /* set all ranges to +/-5V */ + /* set all ranges to +/-5V */ + outb(devpriv->da_ranges, dev->iobase + PCI1720_RANGE); outw(0x0800, dev->iobase + PCI1720_DA0); /* set outputs to 0V */ outw(0x0800, dev->iobase + PCI1720_DA1); outw(0x0800, dev->iobase + PCI1720_DA2); -- cgit From eaa567925288a0908cc9265451b01f76e4a05ab5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:42 +0100 Subject: staging: vt6656: Remove static declaration vnt_start_interrupt_urb_complete Moving vnt_start_interrupt_urb in visibility of vnt_start_interrupt_urb_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 55 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 9a8874917f8d..8bd776ec84df 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -57,7 +57,6 @@ #define URB_ASYNC_UNLINK 0 #endif -static void vnt_start_interrupt_urb_complete(struct urb *urb); static void vnt_submit_rx_urb_complete(struct urb *urb); static void vnt_tx_context_complete(struct urb *urb); @@ -117,33 +116,6 @@ void vnt_control_in_u8(struct vnt_private *priv, u8 reg, u8 reg_off, u8 *data) reg_off, reg, sizeof(u8), data); } -int vnt_start_interrupt_urb(struct vnt_private *priv) -{ - int status = STATUS_FAILURE; - - if (priv->int_buf.in_use == true) - return STATUS_FAILURE; - - priv->int_buf.in_use = true; - - usb_fill_int_urb(priv->interrupt_urb, - priv->usb, - usb_rcvintpipe(priv->usb, 1), - priv->int_buf.data_buf, - MAX_INTERRUPT_SIZE, - vnt_start_interrupt_urb_complete, - priv, - priv->int_interval); - - status = usb_submit_urb(priv->interrupt_urb, GFP_ATOMIC); - if (status) { - dev_dbg(&priv->usb->dev, "Submit int URB failed %d\n", status); - priv->int_buf.in_use = false; - } - - return status; -} - static void vnt_start_interrupt_urb_complete(struct urb *urb) { struct vnt_private *priv = urb->context; @@ -182,6 +154,33 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb) return; } +int vnt_start_interrupt_urb(struct vnt_private *priv) +{ + int status = STATUS_FAILURE; + + if (priv->int_buf.in_use == true) + return STATUS_FAILURE; + + priv->int_buf.in_use = true; + + usb_fill_int_urb(priv->interrupt_urb, + priv->usb, + usb_rcvintpipe(priv->usb, 1), + priv->int_buf.data_buf, + MAX_INTERRUPT_SIZE, + vnt_start_interrupt_urb_complete, + priv, + priv->int_interval); + + status = usb_submit_urb(priv->interrupt_urb, GFP_ATOMIC); + if (status) { + dev_dbg(&priv->usb->dev, "Submit int URB failed %d\n", status); + priv->int_buf.in_use = false; + } + + return status; +} + int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) { int status = 0; -- cgit From 93eac3b1c1e5554410d34d80160bc228462eaa77 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:43 +0100 Subject: staging: vt6656: Remove static declaration vnt_submit_rx_urb_complete Moving vnt_submit_rx_urb in visibility of vnt_submit_rx_urb_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 62 ++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 8bd776ec84df..7444bba896ba 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -57,7 +57,6 @@ #define URB_ASYNC_UNLINK 0 #endif -static void vnt_submit_rx_urb_complete(struct urb *urb); static void vnt_tx_context_complete(struct urb *urb); int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, @@ -181,36 +180,6 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) return status; } -int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) -{ - int status = 0; - struct urb *urb; - - urb = rcb->urb; - if (rcb->skb == NULL) { - dev_dbg(&priv->usb->dev, "rcb->skb is null\n"); - return status; - } - - usb_fill_bulk_urb(urb, - priv->usb, - usb_rcvbulkpipe(priv->usb, 2), - skb_put(rcb->skb, skb_tailroom(rcb->skb)), - MAX_TOTAL_SIZE_WITH_ALL_HEADERS, - vnt_submit_rx_urb_complete, - rcb); - - status = usb_submit_urb(urb, GFP_ATOMIC); - if (status != 0) { - dev_dbg(&priv->usb->dev, "Submit Rx URB failed %d\n", status); - return STATUS_FAILURE ; - } - - rcb->in_use = true; - - return status; -} - static void vnt_submit_rx_urb_complete(struct urb *urb) { struct vnt_rcb *rcb = urb->context; @@ -263,6 +232,37 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) return; } +int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) +{ + int status = 0; + struct urb *urb; + + urb = rcb->urb; + if (rcb->skb == NULL) { + dev_dbg(&priv->usb->dev, "rcb->skb is null\n"); + return status; + } + + usb_fill_bulk_urb(urb, + priv->usb, + usb_rcvbulkpipe(priv->usb, 2), + skb_put(rcb->skb, skb_tailroom(rcb->skb)), + MAX_TOTAL_SIZE_WITH_ALL_HEADERS, + vnt_submit_rx_urb_complete, + rcb); + + status = usb_submit_urb(urb, GFP_ATOMIC); + if (status != 0) { + dev_dbg(&priv->usb->dev, "Submit Rx URB failed %d\n", status); + return STATUS_FAILURE; + } + + rcb->in_use = true; + + return status; +} + + int vnt_tx_context(struct vnt_private *priv, struct vnt_usb_send_context *context) { -- cgit From 664b044b91c42129a8c5392993a421369d3be955 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:44 +0100 Subject: staging: vt6656: remove static declaration vnt_tx_context_complete Moving vnt_tx_context in visibility of vnt_tx_context_complete Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 67 +++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 7444bba896ba..acb06086318b 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -57,8 +57,6 @@ #define URB_ASYNC_UNLINK 0 #endif -static void vnt_tx_context_complete(struct urb *urb); - int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, u16 index, u16 length, u8 *buffer) { @@ -262,39 +260,6 @@ int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) return status; } - -int vnt_tx_context(struct vnt_private *priv, - struct vnt_usb_send_context *context) -{ - int status; - struct urb *urb; - - if (!(MP_IS_READY(priv) && priv->Flags & fMP_POST_WRITES)) { - context->in_use = false; - return STATUS_RESOURCES; - } - - urb = context->urb; - - usb_fill_bulk_urb(urb, - priv->usb, - usb_sndbulkpipe(priv->usb, 3), - context->data, - context->buf_len, - vnt_tx_context_complete, - context); - - status = usb_submit_urb(urb, GFP_ATOMIC); - if (status != 0) { - dev_dbg(&priv->usb->dev, "Submit Tx URB failed %d\n", status); - - context->in_use = false; - return STATUS_FAILURE; - } - - return STATUS_PENDING; -} - static void vnt_tx_context_complete(struct urb *urb) { struct vnt_usb_send_context *context = urb->context; @@ -327,3 +292,35 @@ static void vnt_tx_context_complete(struct urb *urb) return; } + +int vnt_tx_context(struct vnt_private *priv, + struct vnt_usb_send_context *context) +{ + int status; + struct urb *urb; + + if (!(MP_IS_READY(priv) && priv->Flags & fMP_POST_WRITES)) { + context->in_use = false; + return STATUS_RESOURCES; + } + + urb = context->urb; + + usb_fill_bulk_urb(urb, + priv->usb, + usb_sndbulkpipe(priv->usb, 3), + context->data, + context->buf_len, + vnt_tx_context_complete, + context); + + status = usb_submit_urb(urb, GFP_ATOMIC); + if (status != 0) { + dev_dbg(&priv->usb->dev, "Submit Tx URB failed %d\n", status); + + context->in_use = false; + return STATUS_FAILURE; + } + + return STATUS_PENDING; +} -- cgit From 4060f53cf1ad954e03a8f6a07fdb7afb54b02db8 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:45 +0100 Subject: staging: vt6656: Remove ununsed macro URB_ASYNC_UNLINK Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index acb06086318b..addaa65ea100 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -53,10 +53,6 @@ #define USB_CTL_WAIT 500 //ms -#ifndef URB_ASYNC_UNLINK -#define URB_ASYNC_UNLINK 0 -#endif - int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, u16 index, u16 length, u8 *buffer) { -- cgit From 0acece05ba31a63246e0228418940e5e4352a3d5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:46 +0100 Subject: staging: vt6656: usbpipe remove unneeded comments We know what the endpoints are Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index addaa65ea100..aeef7ae72f81 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -45,12 +45,6 @@ #include "device.h" #include "usbpipe.h" -//endpoint def -//endpoint 0: control -//endpoint 1: interrupt -//endpoint 2: read bulk -//endpoint 3: write bulk - #define USB_CTL_WAIT 500 //ms int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, -- cgit From b24351791c763600433e72a2e98677a572bdd05b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 21 Jul 2014 22:40:47 +0100 Subject: staging: vt6656: usbpipe.c clean up USB_CTL_WAIT Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/usbpipe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index aeef7ae72f81..7b050ba92504 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -45,7 +45,7 @@ #include "device.h" #include "usbpipe.h" -#define USB_CTL_WAIT 500 //ms +#define USB_CTL_WAIT 500 /* ms */ int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, u16 index, u16 length, u8 *buffer) -- cgit From 137edbaa94c89132152ef3715542beff4af8e51d Mon Sep 17 00:00:00 2001 From: Guillaume Morin Date: Tue, 22 Jul 2014 04:22:26 +0200 Subject: staging: lustre: llite: rw.c: remove gfp_mask sparse reported that gfp_mask was of the wrong type to store gfp flags. The variable is not used so it can be removed. Signed-off-by: Guillaume Morin Suggested-by: gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/llite/rw.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/llite/rw.c b/drivers/staging/lustre/lustre/llite/rw.c index cd8402ef0fd5..ecd7a229cf9b 100644 --- a/drivers/staging/lustre/lustre/llite/rw.c +++ b/drivers/staging/lustre/lustre/llite/rw.c @@ -496,14 +496,9 @@ static int ll_read_ahead_page(const struct lu_env *env, struct cl_io *io, struct cl_object *clob = ll_i2info(mapping->host)->lli_clob; struct cl_page *page; enum ra_stat which = _NR_RA_STAT; /* keep gcc happy */ - unsigned int gfp_mask; int rc = 0; const char *msg = NULL; - gfp_mask = GFP_HIGHUSER & ~__GFP_WAIT; -#ifdef __GFP_NOWARN - gfp_mask |= __GFP_NOWARN; -#endif vmpage = grab_cache_page_nowait(mapping, index); if (vmpage != NULL) { /* Check if vmpage was truncated or reclaimed */ -- cgit From c49d4b96ab6175fdcc3f858b0ef620f20ae16437 Mon Sep 17 00:00:00 2001 From: Matt Kurz Date: Wed, 23 Jul 2014 06:10:33 +1000 Subject: staging: lustre: Fix sparse warnings Declare several functions and variables as static in order to address the following sparse warnings drivers/staging/lustre/lnet/lnet/acceptor.c:49:3: warning: symbol 'lnet_acceptor_state' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/acceptor.c:79:1: warning: symbol 'lnet_acceptor_get_tunables' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/acceptor.c:211:1: warning: symbol 'lnet_accept' was not declared. Should it be static? drivers/staging/lustre/lnet/lnet/acceptor.c:333:1: warning: symbol 'lnet_acceptor' was not declared. Should it be static? Tested by compilation only. Signed-off-by: Matt Kurz Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/lnet/acceptor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 001c4b7ed0ce..5dfb887a03ae 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -42,7 +42,7 @@ static int accept_port = 988; static int accept_backlog = 127; static int accept_timeout = 5; -struct { +static struct { int pta_shutdown; struct socket *pta_sock; struct completion pta_signal; @@ -75,7 +75,7 @@ MODULE_PARM_DESC(accept_timeout, "Acceptor's timeout (seconds)"); static char *accept_type; -int +static int lnet_acceptor_get_tunables(void) { /* Userland acceptor uses 'accept_type' instead of 'accept', due to @@ -207,7 +207,7 @@ EXPORT_SYMBOL(lnet_connect); /* Below is the code common for both kernel and MT user-space */ -int +static int lnet_accept(struct socket *sock, __u32 magic) { lnet_acceptor_connreq_t cr; @@ -329,7 +329,7 @@ lnet_accept(struct socket *sock, __u32 magic) return rc; } -int +static int lnet_acceptor(void *arg) { struct socket *newsock; -- cgit From 1683440595ea33cc019fb8524b04319cf82bc6ac Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Tue, 22 Jul 2014 22:08:26 +0200 Subject: staging: vt6655: change type of PortOffset to void __iomem * PortOffset was an unsigned long, but used as an pointer to io memory. Sometimes it was not properly cast before use, which caused many warning by sparse. By updating its type to void __iomem *, and reflecting the changes where it is needed, this removes most of those warnings. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/baseband.c | 30 +++++----- drivers/staging/vt6655/baseband.h | 24 ++++---- drivers/staging/vt6655/card.c | 8 +-- drivers/staging/vt6655/card.h | 8 +-- drivers/staging/vt6655/device.h | 2 +- drivers/staging/vt6655/device_main.c | 6 +- drivers/staging/vt6655/key.c | 18 +++--- drivers/staging/vt6655/key.h | 16 +++--- drivers/staging/vt6655/mac.c | 104 +++++++++++++++++----------------- drivers/staging/vt6655/mac.h | 106 +++++++++++++++++------------------ drivers/staging/vt6655/rf.c | 16 +++--- drivers/staging/vt6655/rf.h | 8 +-- drivers/staging/vt6655/srom.c | 24 ++++---- drivers/staging/vt6655/srom.h | 24 ++++---- drivers/staging/vt6655/upc.h | 18 ++---- 15 files changed, 203 insertions(+), 209 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 490ca966b017..0985563d3e19 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -1987,7 +1987,7 @@ BBvCalculateParameter( * Return Value: true if succeeded; false if failed. * */ -bool BBbReadEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char *pbyData) +bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData) { unsigned short ww; unsigned char byValue; @@ -2029,7 +2029,7 @@ bool BBbReadEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned ch * Return Value: true if succeeded; false if failed. * */ -bool BBbWriteEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byData) +bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData) { unsigned short ww; unsigned char byValue; @@ -2070,7 +2070,7 @@ bool BBbWriteEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned c * Return Value: true if all TestBits are set; false otherwise. * */ -bool BBbIsRegBitsOn(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) +bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) { unsigned char byOrgData; @@ -2092,7 +2092,7 @@ bool BBbIsRegBitsOn(unsigned long dwIoBase, unsigned char byBBAddr, unsigned cha * Return Value: true if all TestBits are clear; false otherwise. * */ -bool BBbIsRegBitsOff(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) +bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits) { unsigned char byOrgData; @@ -2119,7 +2119,7 @@ bool BBbVT3253Init(PSDevice pDevice) { bool bResult = true; int ii; - unsigned long dwIoBase = pDevice->PortOffset; + void __iomem *dwIoBase = pDevice->PortOffset; unsigned char byRFType = pDevice->byRFType; unsigned char byLocalID = pDevice->byLocalID; @@ -2285,7 +2285,7 @@ bool BBbVT3253Init(PSDevice pDevice) * Return Value: none * */ -void BBvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyBBRegs) +void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs) { int ii; unsigned char byBase = 1; @@ -2312,7 +2312,7 @@ void BBvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyBBRegs) void BBvLoopbackOn(PSDevice pDevice) { unsigned char byData; - unsigned long dwIoBase = pDevice->PortOffset; + void __iomem *dwIoBase = pDevice->PortOffset; /* CR C9 = 0x00 */ BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */ @@ -2365,7 +2365,7 @@ void BBvLoopbackOn(PSDevice pDevice) void BBvLoopbackOff(PSDevice pDevice) { unsigned char byData; - unsigned long dwIoBase = pDevice->PortOffset; + void __iomem *dwIoBase = pDevice->PortOffset; BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */ BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */ @@ -2448,7 +2448,7 @@ void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData) * */ void -BBvSoftwareReset(unsigned long dwIoBase) +BBvSoftwareReset(void __iomem *dwIoBase) { BBbWriteEmbedded(dwIoBase, 0x50, 0x40); BBbWriteEmbedded(dwIoBase, 0x50, 0); @@ -2469,7 +2469,7 @@ BBvSoftwareReset(unsigned long dwIoBase) * */ void -BBvPowerSaveModeON(unsigned long dwIoBase) +BBvPowerSaveModeON(void __iomem *dwIoBase) { unsigned char byOrgData; @@ -2491,7 +2491,7 @@ BBvPowerSaveModeON(unsigned long dwIoBase) * */ void -BBvPowerSaveModeOFF(unsigned long dwIoBase) +BBvPowerSaveModeOFF(void __iomem *dwIoBase) { unsigned char byOrgData; @@ -2515,7 +2515,7 @@ BBvPowerSaveModeOFF(unsigned long dwIoBase) */ void -BBvSetTxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) +BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) { unsigned char byBBTxConf; @@ -2548,7 +2548,7 @@ BBvSetTxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) */ void -BBvSetRxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) +BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode) { unsigned char byBBRxConf; @@ -2578,14 +2578,14 @@ BBvSetRxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode) * */ void -BBvSetDeepSleep(unsigned long dwIoBase, unsigned char byLocalID) +BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID) { BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */ BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */ } void -BBvExitDeepSleep(unsigned long dwIoBase, unsigned char byLocalID) +BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID) { BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */ BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */ diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index e31bb7600673..2466e2f839b6 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -99,26 +99,26 @@ BBvCalculateParameter( unsigned char *pbyPhySgn ); -bool BBbReadEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char *pbyData); -bool BBbWriteEmbedded(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byData); +bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData); +bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData); -void BBvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyBBRegs); +void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs); void BBvLoopbackOn(PSDevice pDevice); void BBvLoopbackOff(PSDevice pDevice); void BBvSetShortSlotTime(PSDevice pDevice); -bool BBbIsRegBitsOn(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byTestBits); -bool BBbIsRegBitsOff(unsigned long dwIoBase, unsigned char byBBAddr, unsigned char byTestBits); +bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits); +bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits); void BBvSetVGAGainOffset(PSDevice pDevice, unsigned char byData); // VT3253 Baseband bool BBbVT3253Init(PSDevice pDevice); -void BBvSoftwareReset(unsigned long dwIoBase); -void BBvPowerSaveModeON(unsigned long dwIoBase); -void BBvPowerSaveModeOFF(unsigned long dwIoBase); -void BBvSetTxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode); -void BBvSetRxAntennaMode(unsigned long dwIoBase, unsigned char byAntennaMode); -void BBvSetDeepSleep(unsigned long dwIoBase, unsigned char byLocalID); -void BBvExitDeepSleep(unsigned long dwIoBase, unsigned char byLocalID); +void BBvSoftwareReset(void __iomem *dwIoBase); +void BBvPowerSaveModeON(void __iomem *dwIoBase); +void BBvPowerSaveModeOFF(void __iomem *dwIoBase); +void BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode); +void BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode); +void BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID); +void BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID); // timer for antenna diversity diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 0b2ca2f5dbff..988858b47ea3 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -1891,7 +1891,7 @@ unsigned char CARDbyGetPktType(void *pDeviceHandler) * Return Value: none * */ -void CARDvSetLoopbackMode(unsigned long dwIoBase, unsigned short wLoopbackMode) +void CARDvSetLoopbackMode(void __iomem *dwIoBase, unsigned short wLoopbackMode) { switch (wLoopbackMode) { case CARD_LB_NONE: @@ -1980,7 +1980,7 @@ QWORD CARDqGetTSFOffset(unsigned char byRxRate, QWORD qwTSF1, QWORD qwTSF2) * Return Value: true if success; otherwise false * */ -bool CARDbGetCurrentTSF(unsigned long dwIoBase, PQWORD pqwCurrTSF) +bool CARDbGetCurrentTSF(void __iomem *dwIoBase, PQWORD pqwCurrTSF) { unsigned short ww; unsigned char byData; @@ -2053,7 +2053,7 @@ QWORD CARDqGetNextTBTT(QWORD qwTSF, unsigned short wBeaconInterval) * Return Value: none * */ -void CARDvSetFirstNextTBTT(unsigned long dwIoBase, unsigned short wBeaconInterval) +void CARDvSetFirstNextTBTT(void __iomem *dwIoBase, unsigned short wBeaconInterval) { QWORD qwNextTBTT; @@ -2084,7 +2084,7 @@ void CARDvSetFirstNextTBTT(unsigned long dwIoBase, unsigned short wBeaconInterva * Return Value: none * */ -void CARDvUpdateNextTBTT(unsigned long dwIoBase, QWORD qwTSF, unsigned short wBeaconInterval) +void CARDvUpdateNextTBTT(void __iomem *dwIoBase, QWORD qwTSF, unsigned short wBeaconInterval) { qwTSF = CARDqGetNextTBTT(qwTSF, wBeaconInterval); // Set NextTBTT diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 829be92838b0..2ab46f368030 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -89,11 +89,11 @@ void vUpdateIFS(void *pDeviceHandler); void CARDvUpdateBasicTopRate(void *pDeviceHandler); bool CARDbAddBasicRate(void *pDeviceHandler, unsigned short wRateIdx); bool CARDbIsOFDMinBasicRate(void *pDeviceHandler); -void CARDvSetLoopbackMode(unsigned long dwIoBase, unsigned short wLoopbackMode); +void CARDvSetLoopbackMode(void __iomem *dwIoBase, unsigned short wLoopbackMode); bool CARDbSoftwareReset(void *pDeviceHandler); -void CARDvSetFirstNextTBTT(unsigned long dwIoBase, unsigned short wBeaconInterval); -void CARDvUpdateNextTBTT(unsigned long dwIoBase, QWORD qwTSF, unsigned short wBeaconInterval); -bool CARDbGetCurrentTSF(unsigned long dwIoBase, PQWORD pqwCurrTSF); +void CARDvSetFirstNextTBTT(void __iomem *dwIoBase, unsigned short wBeaconInterval); +void CARDvUpdateNextTBTT(void __iomem *dwIoBase, QWORD qwTSF, unsigned short wBeaconInterval); +bool CARDbGetCurrentTSF(void __iomem *dwIoBase, PQWORD pqwCurrTSF); QWORD CARDqGetNextTBTT(QWORD qwTSF, unsigned short wBeaconInterval); QWORD CARDqGetTSFOffset(unsigned char byRxRate, QWORD qwTSF1, QWORD qwTSF2); bool CARDbSetTxPower(void *pDeviceHandler, unsigned long ulTxPower); diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index aab63ca25774..647e36fe083a 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -391,7 +391,7 @@ typedef struct __device_info { CHIP_TYPE chip_id; - unsigned long PortOffset; + void __iomem *PortOffset; unsigned long dwIsr; u32 memaddr; u32 ioaddr; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 23273863696b..29ac1e96669f 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -891,9 +891,9 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) #endif - pDevice->PortOffset = (unsigned long)ioremap(pDevice->memaddr & PCI_BASE_ADDRESS_MEM_MASK, pDevice->io_size); + pDevice->PortOffset = ioremap(pDevice->memaddr & PCI_BASE_ADDRESS_MEM_MASK, pDevice->io_size); - if (pDevice->PortOffset == 0) { + if (pDevice->PortOffset == NULL) { printk(KERN_ERR DEVICE_NAME ": Failed to IO remapping ..\n"); device_free_info(pDevice); return -ENODEV; @@ -1079,7 +1079,7 @@ static void device_free_info(PSDevice pDevice) { unregister_netdev(dev); if (pDevice->PortOffset) - iounmap((void *)pDevice->PortOffset); + iounmap(pDevice->PortOffset); if (pDevice->pcid) pci_release_regions(pDevice->pcid); diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index 09a8bf50527b..f5bc4a2f6375 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -58,7 +58,7 @@ static int msglevel = MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ static void -s_vCheckKeyTableValid(PSKeyManagement pTable, unsigned long dwIoBase) +s_vCheckKeyTableValid(PSKeyManagement pTable, void __iomem *dwIoBase) { int i; @@ -91,7 +91,7 @@ s_vCheckKeyTableValid(PSKeyManagement pTable, unsigned long dwIoBase) * Return Value: none * */ -void KeyvInitTable(PSKeyManagement pTable, unsigned long dwIoBase) +void KeyvInitTable(PSKeyManagement pTable, void __iomem *dwIoBase) { int i; int jj; @@ -187,7 +187,7 @@ bool KeybSetKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ) { @@ -351,7 +351,7 @@ bool KeybRemoveKey( PSKeyManagement pTable, unsigned char *pbyBSSID, unsigned long dwKeyIndex, - unsigned long dwIoBase + void __iomem *dwIoBase ) { int i; @@ -418,7 +418,7 @@ bool KeybRemoveKey( bool KeybRemoveAllKey( PSKeyManagement pTable, unsigned char *pbyBSSID, - unsigned long dwIoBase + void __iomem *dwIoBase ) { int i, u; @@ -453,7 +453,7 @@ bool KeybRemoveAllKey( void KeyvRemoveWEPKey( PSKeyManagement pTable, unsigned long dwKeyIndex, - unsigned long dwIoBase + void __iomem *dwIoBase ) { if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) { @@ -473,7 +473,7 @@ void KeyvRemoveWEPKey( void KeyvRemoveAllWEPKey( PSKeyManagement pTable, - unsigned long dwIoBase + void __iomem *dwIoBase ) { int i; @@ -610,7 +610,7 @@ bool KeybSetDefaultKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ) { @@ -716,7 +716,7 @@ bool KeybSetAllGroupKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ) { diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index 4b8b4b6bd6cd..4eee19277312 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -97,7 +97,7 @@ typedef struct tagSKeyManagement /*--------------------- Export Functions --------------------------*/ -void KeyvInitTable(PSKeyManagement pTable, unsigned long dwIoBase); +void KeyvInitTable(PSKeyManagement pTable, void __iomem *dwIoBase); bool KeybGetKey( PSKeyManagement pTable, @@ -114,7 +114,7 @@ bool KeybSetKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ); @@ -125,7 +125,7 @@ bool KeybSetDefaultKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ); @@ -133,7 +133,7 @@ bool KeybRemoveKey( PSKeyManagement pTable, unsigned char *pbyBSSID, unsigned long dwKeyIndex, - unsigned long dwIoBase + void __iomem *dwIoBase ); bool KeybGetTransmitKey( @@ -151,18 +151,18 @@ bool KeybCheckPairewiseKey( bool KeybRemoveAllKey( PSKeyManagement pTable, unsigned char *pbyBSSID, - unsigned long dwIoBase + void __iomem *dwIoBase ); void KeyvRemoveWEPKey( PSKeyManagement pTable, unsigned long dwKeyIndex, - unsigned long dwIoBase + void __iomem *dwIoBase ); void KeyvRemoveAllWEPKey( PSKeyManagement pTable, - unsigned long dwIoBase + void __iomem *dwIoBase ); bool KeybSetAllGroupKey( @@ -172,7 +172,7 @@ bool KeybSetAllGroupKey( PQWORD pKeyRSC, unsigned char *pbyKey, unsigned char byKeyDecMode, - unsigned long dwIoBase, + void __iomem *dwIoBase, unsigned char byLocalID ); diff --git a/drivers/staging/vt6655/mac.c b/drivers/staging/vt6655/mac.c index af6876a01ee8..9bbc873de702 100644 --- a/drivers/staging/vt6655/mac.c +++ b/drivers/staging/vt6655/mac.c @@ -98,7 +98,7 @@ static int msglevel = MSG_LEVEL_INFO; * Return Value: none * */ -void MACvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyMacRegs) +void MACvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyMacRegs) { int ii; @@ -134,7 +134,7 @@ void MACvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyMacRegs) * Return Value: true if all test bits On; otherwise false * */ -bool MACbIsRegBitsOn(unsigned long dwIoBase, unsigned char byRegOfs, unsigned char byTestBits) +bool MACbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byRegOfs, unsigned char byTestBits) { unsigned char byData; @@ -157,7 +157,7 @@ bool MACbIsRegBitsOn(unsigned long dwIoBase, unsigned char byRegOfs, unsigned ch * Return Value: true if all test bits Off; otherwise false * */ -bool MACbIsRegBitsOff(unsigned long dwIoBase, unsigned char byRegOfs, unsigned char byTestBits) +bool MACbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byRegOfs, unsigned char byTestBits) { unsigned char byData; @@ -178,7 +178,7 @@ bool MACbIsRegBitsOff(unsigned long dwIoBase, unsigned char byRegOfs, unsigned c * Return Value: true if interrupt is disable; otherwise false * */ -bool MACbIsIntDisable(unsigned long dwIoBase) +bool MACbIsIntDisable(void __iomem *dwIoBase) { unsigned long dwData; @@ -203,7 +203,7 @@ bool MACbIsIntDisable(unsigned long dwIoBase) * Return Value: Mask Value read * */ -unsigned char MACbyReadMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx) +unsigned char MACbyReadMultiAddr(void __iomem *dwIoBase, unsigned int uByteIdx) { unsigned char byData; @@ -228,7 +228,7 @@ unsigned char MACbyReadMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx) * Return Value: none * */ -void MACvWriteMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx, unsigned char byData) +void MACvWriteMultiAddr(void __iomem *dwIoBase, unsigned int uByteIdx, unsigned char byData) { MACvSelectPage1(dwIoBase); VNSvOutPortB(dwIoBase + MAC_REG_MAR0 + uByteIdx, byData); @@ -249,7 +249,7 @@ void MACvWriteMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx, unsigned * Return Value: none * */ -void MACvSetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx) +void MACvSetMultiAddrByHash(void __iomem *dwIoBase, unsigned char byHashIdx) { unsigned int uByteIdx; unsigned char byBitMask; @@ -280,7 +280,7 @@ void MACvSetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx) * Return Value: none * */ -void MACvResetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx) +void MACvResetMultiAddrByHash(void __iomem *dwIoBase, unsigned char byHashIdx) { unsigned int uByteIdx; unsigned char byBitMask; @@ -311,7 +311,7 @@ void MACvResetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx) * Return Value: none * */ -void MACvSetRxThreshold(unsigned long dwIoBase, unsigned char byThreshold) +void MACvSetRxThreshold(void __iomem *dwIoBase, unsigned char byThreshold) { unsigned char byOrgValue; @@ -336,7 +336,7 @@ void MACvSetRxThreshold(unsigned long dwIoBase, unsigned char byThreshold) * Return Value: none * */ -void MACvGetRxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold) +void MACvGetRxThreshold(void __iomem *dwIoBase, unsigned char *pbyThreshold) { // get FCR0 VNSvInPortB(dwIoBase + MAC_REG_FCR0, pbyThreshold); @@ -357,7 +357,7 @@ void MACvGetRxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold) * Return Value: none * */ -void MACvSetTxThreshold(unsigned long dwIoBase, unsigned char byThreshold) +void MACvSetTxThreshold(void __iomem *dwIoBase, unsigned char byThreshold) { unsigned char byOrgValue; @@ -382,7 +382,7 @@ void MACvSetTxThreshold(unsigned long dwIoBase, unsigned char byThreshold) * Return Value: none * */ -void MACvGetTxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold) +void MACvGetTxThreshold(void __iomem *dwIoBase, unsigned char *pbyThreshold) { // get FCR0 VNSvInPortB(dwIoBase + MAC_REG_FCR0, pbyThreshold); @@ -403,7 +403,7 @@ void MACvGetTxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold) * Return Value: none * */ -void MACvSetDmaLength(unsigned long dwIoBase, unsigned char byDmaLength) +void MACvSetDmaLength(void __iomem *dwIoBase, unsigned char byDmaLength) { unsigned char byOrgValue; @@ -428,7 +428,7 @@ void MACvSetDmaLength(unsigned long dwIoBase, unsigned char byDmaLength) * Return Value: none * */ -void MACvGetDmaLength(unsigned long dwIoBase, unsigned char *pbyDmaLength) +void MACvGetDmaLength(void __iomem *dwIoBase, unsigned char *pbyDmaLength) { // get FCR0 VNSvInPortB(dwIoBase + MAC_REG_FCR0, pbyDmaLength); @@ -449,7 +449,7 @@ void MACvGetDmaLength(unsigned long dwIoBase, unsigned char *pbyDmaLength) * Return Value: none * */ -void MACvSetShortRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit) +void MACvSetShortRetryLimit(void __iomem *dwIoBase, unsigned char byRetryLimit) { // set SRT VNSvOutPortB(dwIoBase + MAC_REG_SRT, byRetryLimit); @@ -468,7 +468,7 @@ void MACvSetShortRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit) * Return Value: none * */ -void MACvGetShortRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit) +void MACvGetShortRetryLimit(void __iomem *dwIoBase, unsigned char *pbyRetryLimit) { // get SRT VNSvInPortB(dwIoBase + MAC_REG_SRT, pbyRetryLimit); @@ -488,7 +488,7 @@ void MACvGetShortRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit * Return Value: none * */ -void MACvSetLongRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit) +void MACvSetLongRetryLimit(void __iomem *dwIoBase, unsigned char byRetryLimit) { // set LRT VNSvOutPortB(dwIoBase + MAC_REG_LRT, byRetryLimit); @@ -507,7 +507,7 @@ void MACvSetLongRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit) * Return Value: none * */ -void MACvGetLongRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit) +void MACvGetLongRetryLimit(void __iomem *dwIoBase, unsigned char *pbyRetryLimit) { // get LRT VNSvInPortB(dwIoBase + MAC_REG_LRT, pbyRetryLimit); @@ -527,7 +527,7 @@ void MACvGetLongRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit) * Return Value: none * */ -void MACvSetLoopbackMode(unsigned long dwIoBase, unsigned char byLoopbackMode) +void MACvSetLoopbackMode(void __iomem *dwIoBase, unsigned char byLoopbackMode) { unsigned char byOrgValue; @@ -553,7 +553,7 @@ void MACvSetLoopbackMode(unsigned long dwIoBase, unsigned char byLoopbackMode) * Return Value: true if in Loopback mode; otherwise false * */ -bool MACbIsInLoopbackMode(unsigned long dwIoBase) +bool MACbIsInLoopbackMode(void __iomem *dwIoBase) { unsigned char byOrgValue; @@ -577,7 +577,7 @@ bool MACbIsInLoopbackMode(unsigned long dwIoBase) * Return Value: none * */ -void MACvSetPacketFilter(unsigned long dwIoBase, unsigned short wFilterType) +void MACvSetPacketFilter(void __iomem *dwIoBase, unsigned short wFilterType) { unsigned char byOldRCR; unsigned char byNewRCR = 0; @@ -636,7 +636,7 @@ void MACvSetPacketFilter(unsigned long dwIoBase, unsigned short wFilterType) * Return Value: none * */ -void MACvSaveContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) +void MACvSaveContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf) { int ii; @@ -667,7 +667,7 @@ void MACvSaveContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) * Return Value: none * */ -void MACvRestoreContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) +void MACvRestoreContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf) { int ii; @@ -716,7 +716,7 @@ void MACvRestoreContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) * Return Value: true if all values are the same; otherwise false * */ -bool MACbCompareContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) +bool MACbCompareContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf) { unsigned long dwData; @@ -756,7 +756,7 @@ bool MACbCompareContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf) * Return Value: true if Reset Success; otherwise false * */ -bool MACbSoftwareReset(unsigned long dwIoBase) +bool MACbSoftwareReset(void __iomem *dwIoBase) { unsigned char byData; unsigned short ww; @@ -787,7 +787,7 @@ bool MACbSoftwareReset(unsigned long dwIoBase) * Return Value: true if success; otherwise false * */ -bool MACbSafeSoftwareReset(unsigned long dwIoBase) +bool MACbSafeSoftwareReset(void __iomem *dwIoBase) { unsigned char abyTmpRegData[MAC_MAX_CONTEXT_SIZE_PAGE0+MAC_MAX_CONTEXT_SIZE_PAGE1]; bool bRetVal; @@ -819,7 +819,7 @@ bool MACbSafeSoftwareReset(unsigned long dwIoBase) * Return Value: true if success; otherwise false * */ -bool MACbSafeRxOff(unsigned long dwIoBase) +bool MACbSafeRxOff(void __iomem *dwIoBase) { unsigned short ww; unsigned long dwData; @@ -880,7 +880,7 @@ bool MACbSafeRxOff(unsigned long dwIoBase) * Return Value: true if success; otherwise false * */ -bool MACbSafeTxOff(unsigned long dwIoBase) +bool MACbSafeTxOff(void __iomem *dwIoBase) { unsigned short ww; unsigned long dwData; @@ -943,7 +943,7 @@ bool MACbSafeTxOff(unsigned long dwIoBase) * Return Value: true if success; otherwise false * */ -bool MACbSafeStop(unsigned long dwIoBase) +bool MACbSafeStop(void __iomem *dwIoBase) { MACvRegBitsOff(dwIoBase, MAC_REG_TCR, TCR_AUTOBCNTX); @@ -978,7 +978,7 @@ bool MACbSafeStop(unsigned long dwIoBase) * Return Value: true if success; otherwise false * */ -bool MACbShutdown(unsigned long dwIoBase) +bool MACbShutdown(void __iomem *dwIoBase) { // disable MAC IMR MACvIntDisable(dwIoBase); @@ -1005,7 +1005,7 @@ bool MACbShutdown(unsigned long dwIoBase) * Return Value: none * */ -void MACvInitialize(unsigned long dwIoBase) +void MACvInitialize(void __iomem *dwIoBase) { // clear sticky bits MACvClearStckDS(dwIoBase); @@ -1041,7 +1041,7 @@ void MACvInitialize(unsigned long dwIoBase) * Return Value: none * */ -void MACvSetCurrRx0DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr) +void MACvSetCurrRx0DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr) { unsigned short ww; unsigned char byData; @@ -1079,7 +1079,7 @@ void MACvSetCurrRx0DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr * Return Value: none * */ -void MACvSetCurrRx1DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr) +void MACvSetCurrRx1DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr) { unsigned short ww; unsigned char byData; @@ -1117,7 +1117,7 @@ void MACvSetCurrRx1DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr * Return Value: none * */ -void MACvSetCurrTx0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr) +void MACvSetCurrTx0DescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr) { unsigned short ww; unsigned char byData; @@ -1155,7 +1155,7 @@ void MACvSetCurrTx0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAd * */ //TxDMA1 = AC0DMA -void MACvSetCurrAC0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr) +void MACvSetCurrAC0DescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr) { unsigned short ww; unsigned char byData; @@ -1179,7 +1179,7 @@ void MACvSetCurrAC0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAd VNSvOutPortB(dwIoBase + MAC_REG_AC0DMACTL, DMACTL_RUN); } -void MACvSetCurrTXDescAddr(int iTxType, unsigned long dwIoBase, unsigned long dwCurrDescAddr) +void MACvSetCurrTXDescAddr(int iTxType, void __iomem *dwIoBase, unsigned long dwCurrDescAddr) { if (iTxType == TYPE_AC0DMA) MACvSetCurrAC0DescAddrEx(dwIoBase, dwCurrDescAddr); @@ -1201,7 +1201,7 @@ void MACvSetCurrTXDescAddr(int iTxType, unsigned long dwIoBase, unsigned long dw * Return Value: none * */ -void MACvTimer0MicroSDelay(unsigned long dwIoBase, unsigned int uDelay) +void MACvTimer0MicroSDelay(void __iomem *dwIoBase, unsigned int uDelay) { unsigned char byValue; unsigned int uu, ii; @@ -1236,7 +1236,7 @@ void MACvTimer0MicroSDelay(unsigned long dwIoBase, unsigned int uDelay) * Return Value: none * */ -void MACvOneShotTimer0MicroSec(unsigned long dwIoBase, unsigned int uDelayTime) +void MACvOneShotTimer0MicroSec(void __iomem *dwIoBase, unsigned int uDelayTime) { VNSvOutPortB(dwIoBase + MAC_REG_TMCTL0, 0); VNSvOutPortD(dwIoBase + MAC_REG_TMDATA0, uDelayTime); @@ -1257,14 +1257,14 @@ void MACvOneShotTimer0MicroSec(unsigned long dwIoBase, unsigned int uDelayTime) * Return Value: none * */ -void MACvOneShotTimer1MicroSec(unsigned long dwIoBase, unsigned int uDelayTime) +void MACvOneShotTimer1MicroSec(void __iomem *dwIoBase, unsigned int uDelayTime) { VNSvOutPortB(dwIoBase + MAC_REG_TMCTL1, 0); VNSvOutPortD(dwIoBase + MAC_REG_TMDATA1, uDelayTime); VNSvOutPortB(dwIoBase + MAC_REG_TMCTL1, (TMCTL_TMD | TMCTL_TE)); } -void MACvSetMISCFifo(unsigned long dwIoBase, unsigned short wOffset, unsigned long dwData) +void MACvSetMISCFifo(void __iomem *dwIoBase, unsigned short wOffset, unsigned long dwData) { if (wOffset > 273) return; @@ -1273,7 +1273,7 @@ void MACvSetMISCFifo(unsigned long dwIoBase, unsigned short wOffset, unsigned lo VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE); } -bool MACbTxDMAOff(unsigned long dwIoBase, unsigned int idx) +bool MACbTxDMAOff(void __iomem *dwIoBase, unsigned int idx) { unsigned char byData; unsigned int ww = 0; @@ -1301,7 +1301,7 @@ bool MACbTxDMAOff(unsigned long dwIoBase, unsigned int idx) return true; } -void MACvClearBusSusInd(unsigned long dwIoBase) +void MACvClearBusSusInd(void __iomem *dwIoBase) { unsigned long dwOrgValue; unsigned int ww; @@ -1323,7 +1323,7 @@ void MACvClearBusSusInd(unsigned long dwIoBase) } } -void MACvEnableBusSusEn(unsigned long dwIoBase) +void MACvEnableBusSusEn(void __iomem *dwIoBase) { unsigned char byOrgValue; unsigned long dwOrgValue; @@ -1345,7 +1345,7 @@ void MACvEnableBusSusEn(unsigned long dwIoBase) } } -bool MACbFlushSYNCFifo(unsigned long dwIoBase) +bool MACbFlushSYNCFifo(void __iomem *dwIoBase) { unsigned char byOrgValue; unsigned int ww; @@ -1369,7 +1369,7 @@ bool MACbFlushSYNCFifo(unsigned long dwIoBase) return true; } -bool MACbPSWakeup(unsigned long dwIoBase) +bool MACbPSWakeup(void __iomem *dwIoBase) { unsigned char byOrgValue; unsigned int ww; @@ -1409,7 +1409,7 @@ bool MACbPSWakeup(unsigned long dwIoBase) * */ -void MACvSetKeyEntry(unsigned long dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, +void MACvSetKeyEntry(void __iomem *dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned int uKeyIdx, unsigned char *pbyAddr, u32 *pdwKey, unsigned char byLocalID) { unsigned short wOffset; @@ -1473,7 +1473,7 @@ void MACvSetKeyEntry(unsigned long dwIoBase, unsigned short wKeyCtl, unsigned in * Return Value: none * */ -void MACvDisableKeyEntry(unsigned long dwIoBase, unsigned int uEntryIdx) +void MACvDisableKeyEntry(void __iomem *dwIoBase, unsigned int uEntryIdx) { unsigned short wOffset; @@ -1500,7 +1500,7 @@ void MACvDisableKeyEntry(unsigned long dwIoBase, unsigned int uEntryIdx) * */ -void MACvSetDefaultKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, +void MACvSetDefaultKeyEntry(void __iomem *dwIoBase, unsigned int uKeyLen, unsigned int uKeyIdx, unsigned long *pdwKey, unsigned char byLocalID) { unsigned short wOffset; @@ -1549,7 +1549,7 @@ void MACvSetDefaultKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, * */ /* - void MACvEnableDefaultKey(unsigned long dwIoBase, unsigned char byLocalID) + void MACvEnableDefaultKey(void __iomem *dwIoBase, unsigned char byLocalID) { unsigned short wOffset; unsigned long dwData; @@ -1583,7 +1583,7 @@ void MACvSetDefaultKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, * Return Value: none * */ -void MACvDisableDefaultKey(unsigned long dwIoBase) +void MACvDisableDefaultKey(void __iomem *dwIoBase) { unsigned short wOffset; unsigned long dwData; @@ -1612,7 +1612,7 @@ void MACvDisableDefaultKey(unsigned long dwIoBase) * Return Value: none * */ -void MACvSetDefaultTKIPKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, +void MACvSetDefaultTKIPKeyEntry(void __iomem *dwIoBase, unsigned int uKeyLen, unsigned int uKeyIdx, unsigned long *pdwKey, unsigned char byLocalID) { unsigned short wOffset; @@ -1665,7 +1665,7 @@ void MACvSetDefaultTKIPKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, * */ -void MACvSetDefaultKeyCtl(unsigned long dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned char byLocalID) +void MACvSetDefaultKeyCtl(void __iomem *dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned char byLocalID) { unsigned short wOffset; unsigned long dwData; diff --git a/drivers/staging/vt6655/mac.h b/drivers/staging/vt6655/mac.h index 7333b8b526f4..98ade83d0c0d 100644 --- a/drivers/staging/vt6655/mac.h +++ b/drivers/staging/vt6655/mac.h @@ -973,78 +973,78 @@ do { \ /*--------------------- Export Functions --------------------------*/ extern unsigned short TxRate_iwconfig;//2008-5-8 by chester -void MACvReadAllRegs(unsigned long dwIoBase, unsigned char *pbyMacRegs); +void MACvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyMacRegs); -bool MACbIsRegBitsOn(unsigned long dwIoBase, unsigned char byRegOfs, unsigned char byTestBits); -bool MACbIsRegBitsOff(unsigned long dwIoBase, unsigned char byRegOfs, unsigned char byTestBits); +bool MACbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byRegOfs, unsigned char byTestBits); +bool MACbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byRegOfs, unsigned char byTestBits); -bool MACbIsIntDisable(unsigned long dwIoBase); +bool MACbIsIntDisable(void __iomem *dwIoBase); -unsigned char MACbyReadMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx); -void MACvWriteMultiAddr(unsigned long dwIoBase, unsigned int uByteIdx, unsigned char byData); -void MACvSetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx); -void MACvResetMultiAddrByHash(unsigned long dwIoBase, unsigned char byHashIdx); +unsigned char MACbyReadMultiAddr(void __iomem *dwIoBase, unsigned int uByteIdx); +void MACvWriteMultiAddr(void __iomem *dwIoBase, unsigned int uByteIdx, unsigned char byData); +void MACvSetMultiAddrByHash(void __iomem *dwIoBase, unsigned char byHashIdx); +void MACvResetMultiAddrByHash(void __iomem *dwIoBase, unsigned char byHashIdx); -void MACvSetRxThreshold(unsigned long dwIoBase, unsigned char byThreshold); -void MACvGetRxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold); +void MACvSetRxThreshold(void __iomem *dwIoBase, unsigned char byThreshold); +void MACvGetRxThreshold(void __iomem *dwIoBase, unsigned char *pbyThreshold); -void MACvSetTxThreshold(unsigned long dwIoBase, unsigned char byThreshold); -void MACvGetTxThreshold(unsigned long dwIoBase, unsigned char *pbyThreshold); +void MACvSetTxThreshold(void __iomem *dwIoBase, unsigned char byThreshold); +void MACvGetTxThreshold(void __iomem *dwIoBase, unsigned char *pbyThreshold); -void MACvSetDmaLength(unsigned long dwIoBase, unsigned char byDmaLength); -void MACvGetDmaLength(unsigned long dwIoBase, unsigned char *pbyDmaLength); +void MACvSetDmaLength(void __iomem *dwIoBase, unsigned char byDmaLength); +void MACvGetDmaLength(void __iomem *dwIoBase, unsigned char *pbyDmaLength); -void MACvSetShortRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit); -void MACvGetShortRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit); +void MACvSetShortRetryLimit(void __iomem *dwIoBase, unsigned char byRetryLimit); +void MACvGetShortRetryLimit(void __iomem *dwIoBase, unsigned char *pbyRetryLimit); -void MACvSetLongRetryLimit(unsigned long dwIoBase, unsigned char byRetryLimit); -void MACvGetLongRetryLimit(unsigned long dwIoBase, unsigned char *pbyRetryLimit); +void MACvSetLongRetryLimit(void __iomem *dwIoBase, unsigned char byRetryLimit); +void MACvGetLongRetryLimit(void __iomem *dwIoBase, unsigned char *pbyRetryLimit); -void MACvSetLoopbackMode(unsigned long dwIoBase, unsigned char byLoopbackMode); -bool MACbIsInLoopbackMode(unsigned long dwIoBase); +void MACvSetLoopbackMode(void __iomem *dwIoBase, unsigned char byLoopbackMode); +bool MACbIsInLoopbackMode(void __iomem *dwIoBase); -void MACvSetPacketFilter(unsigned long dwIoBase, unsigned short wFilterType); +void MACvSetPacketFilter(void __iomem *dwIoBase, unsigned short wFilterType); -void MACvSaveContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf); -void MACvRestoreContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf); -bool MACbCompareContext(unsigned long dwIoBase, unsigned char *pbyCxtBuf); +void MACvSaveContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf); +void MACvRestoreContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf); +bool MACbCompareContext(void __iomem *dwIoBase, unsigned char *pbyCxtBuf); -bool MACbSoftwareReset(unsigned long dwIoBase); -bool MACbSafeSoftwareReset(unsigned long dwIoBase); -bool MACbSafeRxOff(unsigned long dwIoBase); -bool MACbSafeTxOff(unsigned long dwIoBase); -bool MACbSafeStop(unsigned long dwIoBase); -bool MACbShutdown(unsigned long dwIoBase); -void MACvInitialize(unsigned long dwIoBase); -void MACvSetCurrRx0DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrRx1DescAddr(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrTXDescAddr(int iTxType, unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrTx0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrAC0DescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrSyncDescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvSetCurrATIMDescAddrEx(unsigned long dwIoBase, unsigned long dwCurrDescAddr); -void MACvTimer0MicroSDelay(unsigned long dwIoBase, unsigned int uDelay); -void MACvOneShotTimer0MicroSec(unsigned long dwIoBase, unsigned int uDelayTime); -void MACvOneShotTimer1MicroSec(unsigned long dwIoBase, unsigned int uDelayTime); +bool MACbSoftwareReset(void __iomem *dwIoBase); +bool MACbSafeSoftwareReset(void __iomem *dwIoBase); +bool MACbSafeRxOff(void __iomem *dwIoBase); +bool MACbSafeTxOff(void __iomem *dwIoBase); +bool MACbSafeStop(void __iomem *dwIoBase); +bool MACbShutdown(void __iomem *dwIoBase); +void MACvInitialize(void __iomem *dwIoBase); +void MACvSetCurrRx0DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrRx1DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrTXDescAddr(int iTxType, void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrTx0DescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrAC0DescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrSyncDescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvSetCurrATIMDescAddrEx(void __iomem *dwIoBase, unsigned long dwCurrDescAddr); +void MACvTimer0MicroSDelay(void __iomem *dwIoBase, unsigned int uDelay); +void MACvOneShotTimer0MicroSec(void __iomem *dwIoBase, unsigned int uDelayTime); +void MACvOneShotTimer1MicroSec(void __iomem *dwIoBase, unsigned int uDelayTime); -void MACvSetMISCFifo(unsigned long dwIoBase, unsigned short wOffset, unsigned long dwData); +void MACvSetMISCFifo(void __iomem *dwIoBase, unsigned short wOffset, unsigned long dwData); -bool MACbTxDMAOff(unsigned long dwIoBase, unsigned int idx); +bool MACbTxDMAOff(void __iomem *dwIoBase, unsigned int idx); -void MACvClearBusSusInd(unsigned long dwIoBase); -void MACvEnableBusSusEn(unsigned long dwIoBase); +void MACvClearBusSusInd(void __iomem *dwIoBase); +void MACvEnableBusSusEn(void __iomem *dwIoBase); -bool MACbFlushSYNCFifo(unsigned long dwIoBase); -bool MACbPSWakeup(unsigned long dwIoBase); +bool MACbFlushSYNCFifo(void __iomem *dwIoBase); +bool MACbPSWakeup(void __iomem *dwIoBase); -void MACvSetKeyEntry(unsigned long dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, +void MACvSetKeyEntry(void __iomem *dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned int uKeyIdx, unsigned char *pbyAddr, u32 *pdwKey, unsigned char byLocalID); -void MACvDisableKeyEntry(unsigned long dwIoBase, unsigned int uEntryIdx); -void MACvSetDefaultKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, +void MACvDisableKeyEntry(void __iomem *dwIoBase, unsigned int uEntryIdx); +void MACvSetDefaultKeyEntry(void __iomem *dwIoBase, unsigned int uKeyLen, unsigned int uKeyIdx, unsigned long *pdwKey, unsigned char byLocalID); -void MACvDisableDefaultKey(unsigned long dwIoBase); -void MACvSetDefaultTKIPKeyEntry(unsigned long dwIoBase, unsigned int uKeyLen, +void MACvDisableDefaultKey(void __iomem *dwIoBase); +void MACvSetDefaultTKIPKeyEntry(void __iomem *dwIoBase, unsigned int uKeyLen, unsigned int uKeyIdx, unsigned long *pdwKey, unsigned char byLocalID); -void MACvSetDefaultKeyCtl(unsigned long dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned char byLocalID); +void MACvSetDefaultKeyCtl(void __iomem *dwIoBase, unsigned short wKeyCtl, unsigned int uEntryIdx, unsigned char byLocalID); #endif // __MAC_H__ diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c index 99c89a14d89b..33913e5b1cc1 100644 --- a/drivers/staging/vt6655/rf.c +++ b/drivers/staging/vt6655/rf.c @@ -424,7 +424,7 @@ static const unsigned long dwAL7230ChannelTable2[CB_MAX_CHANNEL] = { * Return Value: true if succeeded; false if failed. * */ -static bool s_bAL7230Init(unsigned long dwIoBase) +static bool s_bAL7230Init(void __iomem *dwIoBase) { int ii; bool bResult; @@ -467,7 +467,7 @@ static bool s_bAL7230Init(unsigned long dwIoBase) } // Need to Pull PLLON low when writing channel registers through 3-wire interface -static bool s_bAL7230SelectChannel(unsigned long dwIoBase, unsigned char byChannel) +static bool s_bAL7230SelectChannel(void __iomem *dwIoBase, unsigned char byChannel) { bool bResult; @@ -567,7 +567,7 @@ static bool s_bAL7230SelectChannel(unsigned long dwIoBase, unsigned char byChann * Return Value: true if succeeded; false if failed. * */ -bool IFRFbWriteEmbedded(unsigned long dwIoBase, unsigned long dwData) +bool IFRFbWriteEmbedded(void __iomem *dwIoBase, unsigned long dwData) { unsigned short ww; unsigned long dwValue; @@ -626,7 +626,7 @@ bool IFRFbWriteEmbedded(unsigned long dwIoBase, unsigned long dwData) * Return Value: true if succeeded; false if failed. * */ -static bool RFbAL2230Init(unsigned long dwIoBase) +static bool RFbAL2230Init(void __iomem *dwIoBase) { int ii; bool bResult; @@ -673,7 +673,7 @@ static bool RFbAL2230Init(unsigned long dwIoBase) return bResult; } -static bool RFbAL2230SelectChannel(unsigned long dwIoBase, unsigned char byChannel) +static bool RFbAL2230SelectChannel(void __iomem *dwIoBase, unsigned char byChannel) { bool bResult; @@ -783,7 +783,7 @@ bool RFbInit( * Return Value: true if succeeded; false if failed. * */ -bool RFbSelectChannel(unsigned long dwIoBase, unsigned char byRFType, unsigned char byChannel) +bool RFbSelectChannel(void __iomem *dwIoBase, unsigned char byRFType, unsigned char byChannel) { bool bResult = true; switch (byRFType) { @@ -818,7 +818,7 @@ bool RFbSelectChannel(unsigned long dwIoBase, unsigned char byRFType, unsigned c * Return Value: None. * */ -bool RFvWriteWakeProgSyn(unsigned long dwIoBase, unsigned char byRFType, unsigned int uChannel) +bool RFvWriteWakeProgSyn(void __iomem *dwIoBase, unsigned char byRFType, unsigned int uChannel) { int ii; unsigned char byInitCount = 0; @@ -1070,7 +1070,7 @@ RFvRSSITodBm( // Post processing for the 11b/g and 11a. // for save time on changing Reg2,3,5,7,10,12,15 -bool RFbAL7230SelectChannelPostProcess(unsigned long dwIoBase, unsigned char byOldChannel, unsigned char byNewChannel) +bool RFbAL7230SelectChannelPostProcess(void __iomem *dwIoBase, unsigned char byOldChannel, unsigned char byNewChannel) { bool bResult; diff --git a/drivers/staging/vt6655/rf.h b/drivers/staging/vt6655/rf.h index ef3c6de09fec..ba55561c45d2 100644 --- a/drivers/staging/vt6655/rf.h +++ b/drivers/staging/vt6655/rf.h @@ -74,12 +74,12 @@ /*--------------------- Export Functions --------------------------*/ -bool IFRFbWriteEmbedded(unsigned long dwIoBase, unsigned long dwData); -bool RFbSelectChannel(unsigned long dwIoBase, unsigned char byRFType, unsigned char byChannel); +bool IFRFbWriteEmbedded(void __iomem *dwIoBase, unsigned long dwData); +bool RFbSelectChannel(void __iomem *dwIoBase, unsigned char byRFType, unsigned char byChannel); bool RFbInit( PSDevice pDevice ); -bool RFvWriteWakeProgSyn(unsigned long dwIoBase, unsigned char byRFType, unsigned int uChannel); +bool RFvWriteWakeProgSyn(void __iomem *dwIoBase, unsigned char byRFType, unsigned int uChannel); bool RFbSetPower(PSDevice pDevice, unsigned int uRATE, unsigned int uCH); bool RFbRawSetPower( PSDevice pDevice, @@ -95,7 +95,7 @@ RFvRSSITodBm( ); //{{ RobertYu: 20050104 -bool RFbAL7230SelectChannelPostProcess(unsigned long dwIoBase, unsigned char byOldChannel, unsigned char byNewChannel); +bool RFbAL7230SelectChannelPostProcess(void __iomem *dwIoBase, unsigned char byOldChannel, unsigned char byNewChannel); //}} RobertYu #endif // __RF_H__ diff --git a/drivers/staging/vt6655/srom.c b/drivers/staging/vt6655/srom.c index eaddc33c9d2d..5396e5832c22 100644 --- a/drivers/staging/vt6655/srom.c +++ b/drivers/staging/vt6655/srom.c @@ -73,7 +73,7 @@ * Return Value: data read * */ -unsigned char SROMbyReadEmbedded(unsigned long dwIoBase, unsigned char byContntOffset) +unsigned char SROMbyReadEmbedded(void __iomem *dwIoBase, unsigned char byContntOffset) { unsigned short wDelay, wNoACK; unsigned char byWait; @@ -121,7 +121,7 @@ unsigned char SROMbyReadEmbedded(unsigned long dwIoBase, unsigned char byContntO * Return Value: true if succeeded; false if failed. * */ -bool SROMbWriteEmbedded(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byData) +bool SROMbWriteEmbedded(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byData) { unsigned short wDelay, wNoACK; unsigned char byWait; @@ -173,7 +173,7 @@ bool SROMbWriteEmbedded(unsigned long dwIoBase, unsigned char byContntOffset, un * Return Value: none * */ -void SROMvRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byBits) +void SROMvRegBitsOn(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byBits) { unsigned char byOrgData; @@ -193,7 +193,7 @@ void SROMvRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsign * none * */ -void SROMvRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byBits) +void SROMvRegBitsOff(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byBits) { unsigned char byOrgData; @@ -215,7 +215,7 @@ void SROMvRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, unsig * Return Value: true if all test bits on; otherwise false * */ -bool SROMbIsRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byTestBits) +bool SROMbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byTestBits) { unsigned char byOrgData; @@ -237,7 +237,7 @@ bool SROMbIsRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsi * Return Value: true if all test bits off; otherwise false * */ -bool SROMbIsRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byTestBits) +bool SROMbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byTestBits) { unsigned char byOrgData; @@ -257,7 +257,7 @@ bool SROMbIsRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, uns * Return Value: none * */ -void SROMvReadAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs) +void SROMvReadAllContents(void __iomem *dwIoBase, unsigned char *pbyEepromRegs) { int ii; @@ -281,7 +281,7 @@ void SROMvReadAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs) * Return Value: none * */ -void SROMvWriteAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs) +void SROMvWriteAllContents(void __iomem *dwIoBase, unsigned char *pbyEepromRegs) { int ii; @@ -304,7 +304,7 @@ void SROMvWriteAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs) * Return Value: none * */ -void SROMvReadEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddress) +void SROMvReadEtherAddress(void __iomem *dwIoBase, unsigned char *pbyEtherAddress) { unsigned char ii; @@ -328,7 +328,7 @@ void SROMvReadEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddres * Return Value: none * */ -void SROMvWriteEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddress) +void SROMvWriteEtherAddress(void __iomem *dwIoBase, unsigned char *pbyEtherAddress) { unsigned char ii; @@ -351,7 +351,7 @@ void SROMvWriteEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddre * Return Value: none * */ -void SROMvReadSubSysVenId(unsigned long dwIoBase, unsigned long *pdwSubSysVenId) +void SROMvReadSubSysVenId(void __iomem *dwIoBase, unsigned long *pdwSubSysVenId) { unsigned char *pbyData; @@ -376,7 +376,7 @@ void SROMvReadSubSysVenId(unsigned long dwIoBase, unsigned long *pdwSubSysVenId) * Return Value: true if success; otherwise false * */ -bool SROMbAutoLoad(unsigned long dwIoBase) +bool SROMbAutoLoad(void __iomem *dwIoBase) { unsigned char byWait; int ii; diff --git a/drivers/staging/vt6655/srom.h b/drivers/staging/vt6655/srom.h index 1df58c516ddc..3128e535bbd8 100644 --- a/drivers/staging/vt6655/srom.h +++ b/drivers/staging/vt6655/srom.h @@ -133,23 +133,23 @@ typedef struct tagSSromReg { /*--------------------- Export Functions --------------------------*/ -unsigned char SROMbyReadEmbedded(unsigned long dwIoBase, unsigned char byContntOffset); -bool SROMbWriteEmbedded(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byData); +unsigned char SROMbyReadEmbedded(void __iomem *dwIoBase, unsigned char byContntOffset); +bool SROMbWriteEmbedded(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byData); -void SROMvRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byBits); -void SROMvRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byBits); +void SROMvRegBitsOn(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byBits); +void SROMvRegBitsOff(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byBits); -bool SROMbIsRegBitsOn(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byTestBits); -bool SROMbIsRegBitsOff(unsigned long dwIoBase, unsigned char byContntOffset, unsigned char byTestBits); +bool SROMbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byTestBits); +bool SROMbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byContntOffset, unsigned char byTestBits); -void SROMvReadAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs); -void SROMvWriteAllContents(unsigned long dwIoBase, unsigned char *pbyEepromRegs); +void SROMvReadAllContents(void __iomem *dwIoBase, unsigned char *pbyEepromRegs); +void SROMvWriteAllContents(void __iomem *dwIoBase, unsigned char *pbyEepromRegs); -void SROMvReadEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddress); -void SROMvWriteEtherAddress(unsigned long dwIoBase, unsigned char *pbyEtherAddress); +void SROMvReadEtherAddress(void __iomem *dwIoBase, unsigned char *pbyEtherAddress); +void SROMvWriteEtherAddress(void __iomem *dwIoBase, unsigned char *pbyEtherAddress); -void SROMvReadSubSysVenId(unsigned long dwIoBase, unsigned long *pdwSubSysVenId); +void SROMvReadSubSysVenId(void __iomem *dwIoBase, unsigned long *pdwSubSysVenId); -bool SROMbAutoLoad(unsigned long dwIoBase); +bool SROMbAutoLoad(void __iomem *dwIoBase); #endif // __EEPROM_H__ diff --git a/drivers/staging/vt6655/upc.h b/drivers/staging/vt6655/upc.h index 155e66439073..af12a86cd086 100644 --- a/drivers/staging/vt6655/upc.h +++ b/drivers/staging/vt6655/upc.h @@ -72,38 +72,32 @@ do { \ #define VNSvInPortB(dwIOAddress, pbyData) \ do { \ - volatile unsigned char *pbyAddr = (unsigned char *)(dwIOAddress); \ - *(pbyData) = readb(pbyAddr); \ + *(pbyData) = readb(dwIOAddress); \ } while (0) #define VNSvInPortW(dwIOAddress, pwData) \ do { \ - volatile unsigned short *pwAddr = (unsigned short *)(dwIOAddress); \ - *(pwData) = readw(pwAddr); \ + *(pwData) = readw(dwIOAddress); \ } while (0) #define VNSvInPortD(dwIOAddress, pdwData) \ do { \ - volatile unsigned long *pdwAddr = (unsigned long *)(dwIOAddress); \ - *(pdwData) = readl(pdwAddr); \ + *(pdwData) = readl(dwIOAddress); \ } while (0) #define VNSvOutPortB(dwIOAddress, byData) \ do { \ - volatile unsigned char *pbyAddr = (unsigned char *)(dwIOAddress); \ - writeb((unsigned char)byData, pbyAddr); \ + writeb((unsigned char)byData, dwIOAddress); \ } while (0) #define VNSvOutPortW(dwIOAddress, wData) \ do { \ - volatile unsigned short *pwAddr = ((unsigned short *)(dwIOAddress)); \ - writew((unsigned short)wData, pwAddr); \ + writew((unsigned short)wData, dwIOAddress); \ } while (0) #define VNSvOutPortD(dwIOAddress, dwData) \ do { \ - volatile unsigned long *pdwAddr = (unsigned long *)(dwIOAddress); \ - writel((unsigned long)dwData, pdwAddr); \ + writel((unsigned long)dwData, dwIOAddress); \ } while (0) #endif -- cgit From e7a3cd595abc8735da1d82faf4cb9eef9b80887a Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Tue, 22 Jul 2014 22:08:27 +0200 Subject: staging: vt6655:fix warning for unexported non-static functions There is one function in aes_ccmp.c which is exported, but sparse sees it unexported because it doesn't include the header that exports it. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/aes_ccmp.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/aes_ccmp.c b/drivers/staging/vt6655/aes_ccmp.c index 4ccfe06481fc..a25e6cf844ed 100644 --- a/drivers/staging/vt6655/aes_ccmp.c +++ b/drivers/staging/vt6655/aes_ccmp.c @@ -35,6 +35,7 @@ #include "device.h" #include "80211hdr.h" +#include "aes_ccmp.h" /*--------------------- Static Definitions -------------------------*/ -- cgit From 9e4c5c2837a4bf059590ad75fa3fe0c2af93e65a Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Tue, 22 Jul 2014 22:08:28 +0200 Subject: staging: vt6655: statify some variables Some variables are used only in the context of their .c file, which gives warnings with sparse. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/baseband.c | 14 +++++++------- drivers/staging/vt6655/bssdb.c | 4 ++-- drivers/staging/vt6655/card.c | 6 +++--- drivers/staging/vt6655/device_main.c | 4 ++-- drivers/staging/vt6655/wcmd.c | 2 +- drivers/staging/vt6655/wmgr.c | 10 +++++----- 6 files changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 0985563d3e19..67bc3b49b8cc 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -75,7 +75,7 @@ static int msglevel = MSG_LEVEL_INFO; /*--------------------- Static Variables --------------------------*/ #define CB_VT3253_INIT_FOR_RFMD 446 -unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = { +static unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = { {0x00, 0x30}, {0x01, 0x00}, {0x02, 0x00}, @@ -525,7 +525,7 @@ unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = { }; #define CB_VT3253B0_INIT_FOR_RFMD 256 -unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = { +static unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = { {0x00, 0x31}, {0x01, 0x00}, {0x02, 0x00}, @@ -786,7 +786,7 @@ unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = { #define CB_VT3253B0_AGC_FOR_RFMD2959 195 /* For RFMD2959 */ -unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = { +static unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = { {0xF0, 0x00}, {0xF1, 0x3E}, {0xF0, 0x80}, @@ -986,7 +986,7 @@ unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = { #define CB_VT3253B0_INIT_FOR_AIROHA2230 256 /* For AIROHA */ -unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { +static unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { {0x00, 0x31}, {0x01, 0x00}, {0x02, 0x00}, @@ -1247,7 +1247,7 @@ unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = { #define CB_VT3253B0_INIT_FOR_UW2451 256 /* For UW2451 */ -unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { +static unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { {0x00, 0x31}, {0x01, 0x00}, {0x02, 0x00}, @@ -1508,7 +1508,7 @@ unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = { #define CB_VT3253B0_AGC 193 /* For AIROHA */ -unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = { +static unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = { {0xF0, 0x00}, {0xF1, 0x00}, {0xF0, 0x80}, @@ -1704,7 +1704,7 @@ unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = { {0xF0, 0x00}, }; -const unsigned short awcFrameTime[MAX_RATE] = +static const unsigned short awcFrameTime[MAX_RATE] = {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216}; /*--------------------- Static Functions --------------------------*/ diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index 59679cd46816..eb3474da9349 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -65,14 +65,14 @@ /*--------------------- Static Variables --------------------------*/ static int msglevel = MSG_LEVEL_INFO; -const unsigned short awHWRetry0[5][5] = { +static const unsigned short awHWRetry0[5][5] = { {RATE_18M, RATE_18M, RATE_12M, RATE_12M, RATE_12M}, {RATE_24M, RATE_24M, RATE_18M, RATE_12M, RATE_12M}, {RATE_36M, RATE_36M, RATE_24M, RATE_18M, RATE_18M}, {RATE_48M, RATE_48M, RATE_36M, RATE_24M, RATE_24M}, {RATE_54M, RATE_54M, RATE_48M, RATE_36M, RATE_36M} }; -const unsigned short awHWRetry1[5][5] = { +static const unsigned short awHWRetry1[5][5] = { {RATE_18M, RATE_18M, RATE_12M, RATE_6M, RATE_6M}, {RATE_24M, RATE_24M, RATE_18M, RATE_6M, RATE_6M}, {RATE_36M, RATE_36M, RATE_24M, RATE_12M, RATE_12M}, diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 988858b47ea3..e29dcd85f5d1 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -87,7 +87,7 @@ static unsigned char abyDefaultSuppRatesB[] = {WLAN_EID_SUPP_RATES, 4, 0x02, 0x0 /*--------------------- Static Variables --------------------------*/ -const unsigned short cwRXBCNTSFOff[MAX_RATE] = +static const unsigned short cwRXBCNTSFOff[MAX_RATE] = {17, 17, 17, 17, 34, 23, 17, 11, 8, 5, 4, 3}; /*--------------------- Static Functions --------------------------*/ @@ -1576,7 +1576,7 @@ CARDvSafeResetRx( * Return Value: response Control frame rate * */ -unsigned short CARDwGetCCKControlRate(void *pDeviceHandler, unsigned short wRateIdx) +static unsigned short CARDwGetCCKControlRate(void *pDeviceHandler, unsigned short wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; unsigned int ui = (unsigned int) wRateIdx; @@ -1603,7 +1603,7 @@ unsigned short CARDwGetCCKControlRate(void *pDeviceHandler, unsigned short wRate * Return Value: response Control frame rate * */ -unsigned short CARDwGetOFDMControlRate(void *pDeviceHandler, unsigned short wRateIdx) +static unsigned short CARDwGetOFDMControlRate(void *pDeviceHandler, unsigned short wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; unsigned int ui = (unsigned int) wRateIdx; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 29ac1e96669f..52f10cacb425 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -260,7 +260,7 @@ static CHIP_INFO chip_info_table[] = { {0, NULL} }; -const struct pci_device_id vt6655_pci_id_table[] = { +static const struct pci_device_id vt6655_pci_id_table[] = { { PCI_VDEVICE(VIA, 0x3253), (kernel_ulong_t)chip_info_table}, { 0, } }; @@ -285,7 +285,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); static int device_notify_reboot(struct notifier_block *, unsigned long event, void *ptr); static int viawget_suspend(struct pci_dev *pcid, pm_message_t state); static int viawget_resume(struct pci_dev *pcid); -struct notifier_block device_notifier = { +static struct notifier_block device_notifier = { .notifier_call = device_notify_reboot, .next = NULL, .priority = 0, diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index a689645fa012..a379cecbb080 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -234,7 +234,7 @@ s_vProbeChannel( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeProbeRequest( PSDevice pDevice, PSMgmtObject pMgmt, diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index cc4f5b9e0581..9853a8f4027f 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -3144,7 +3144,7 @@ s_MgrMakeBeacon( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeProbeResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -3326,7 +3326,7 @@ s_MgrMakeProbeResponse( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -3586,7 +3586,7 @@ s_MgrMakeAssocRequest( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeReAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -3831,7 +3831,7 @@ s_MgrMakeReAssocRequest( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeAssocResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -3902,7 +3902,7 @@ s_MgrMakeAssocResponse( * -*/ -PSTxMgmtPacket +static PSTxMgmtPacket s_MgrMakeReAssocResponse( PSDevice pDevice, PSMgmtObject pMgmt, -- cgit From 2b3f41c723752b8ee6383256246b090f5b9f212c Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Tue, 22 Jul 2014 22:08:29 +0200 Subject: staging: vt6655: remove unused functions The IEEE11hbMgrRxAction is not exported and never used. Deleting it allows to delete other functions that were only used by IEEE11hbMgrRxAction. This allows to fix several warnings reported by sparse. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/IEEE11h.c | 175 --------------------------------------- 1 file changed, 175 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/IEEE11h.c b/drivers/staging/vt6655/IEEE11h.c index 6cfad1c04026..180a27cc74d7 100644 --- a/drivers/staging/vt6655/IEEE11h.c +++ b/drivers/staging/vt6655/IEEE11h.c @@ -41,7 +41,6 @@ #include "channel.h" /*--------------------- Static Definitions -------------------------*/ -static int msglevel = MSG_LEVEL_INFO; #pragma pack(1) @@ -98,185 +97,11 @@ typedef struct _WLAN_FRAME_TPCREP { /*--------------------- Static Variables --------------------------*/ /*--------------------- Static Functions --------------------------*/ -static bool s_bRxMSRReq(PSMgmtObject pMgmt, PWLAN_FRAME_MSRREQ pMSRReq, - unsigned int uLength) -{ - size_t uNumOfEIDs = 0; - bool bResult = true; - - if (uLength <= WLAN_A3FR_MAXLEN) - memcpy(pMgmt->abyCurrentMSRReq, pMSRReq, uLength); - uNumOfEIDs = ((uLength - offsetof(WLAN_FRAME_MSRREQ, - sMSRReqEIDs))/ - (sizeof(WLAN_IE_MEASURE_REQ))); - pMgmt->pCurrMeasureEIDRep = &(((PWLAN_FRAME_MSRREP) - (pMgmt->abyCurrentMSRRep))->sMSRRepEIDs[0]); - pMgmt->uLengthOfRepEIDs = 0; - bResult = CARDbStartMeasure(pMgmt->pAdapter, - ((PWLAN_FRAME_MSRREQ) - (pMgmt->abyCurrentMSRReq))->sMSRReqEIDs, - uNumOfEIDs -); - return bResult; -} - -static bool s_bRxTPCReq(PSMgmtObject pMgmt, - PWLAN_FRAME_TPCREQ pTPCReq, - unsigned char byRate, - unsigned char byRSSI) -{ - PWLAN_FRAME_TPCREP pFrame; - PSTxMgmtPacket pTxPacket = NULL; - - pTxPacket = (PSTxMgmtPacket)pMgmt->pbyMgmtPacketPool; - memset(pTxPacket, 0, sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN); - pTxPacket->p80211Header = (PUWLAN_80211HDR)((unsigned char *)pTxPacket + - sizeof(STxMgmtPacket)); - - pFrame = (PWLAN_FRAME_TPCREP)((unsigned char *)pTxPacket + - sizeof(STxMgmtPacket)); - - pFrame->Header.wFrameCtl = (WLAN_SET_FC_FTYPE(WLAN_FTYPE_MGMT) | - WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_ACTION) -); - - memcpy(pFrame->Header.abyAddr1, - pTPCReq->Header.abyAddr2, - WLAN_ADDR_LEN); - memcpy(pFrame->Header.abyAddr2, - CARDpGetCurrentAddress(pMgmt->pAdapter), - WLAN_ADDR_LEN); - memcpy(pFrame->Header.abyAddr3, - pMgmt->abyCurrBSSID, - WLAN_BSSID_LEN); - - pFrame->byCategory = 0; - pFrame->byAction = 3; - pFrame->byDialogToken = ((PWLAN_FRAME_MSRREQ) - (pMgmt->abyCurrentMSRReq))->byDialogToken; - - pFrame->sTPCRepEIDs.byElementID = WLAN_EID_TPC_REP; - pFrame->sTPCRepEIDs.len = 2; - pFrame->sTPCRepEIDs.byTxPower = CARDbyGetTransmitPower(pMgmt->pAdapter); - switch (byRate) { - case RATE_54M: - pFrame->sTPCRepEIDs.byLinkMargin = 65 - byRSSI; - break; - case RATE_48M: - pFrame->sTPCRepEIDs.byLinkMargin = 66 - byRSSI; - break; - case RATE_36M: - pFrame->sTPCRepEIDs.byLinkMargin = 70 - byRSSI; - break; - case RATE_24M: - pFrame->sTPCRepEIDs.byLinkMargin = 74 - byRSSI; - break; - case RATE_18M: - pFrame->sTPCRepEIDs.byLinkMargin = 77 - byRSSI; - break; - case RATE_12M: - pFrame->sTPCRepEIDs.byLinkMargin = 79 - byRSSI; - break; - case RATE_9M: - pFrame->sTPCRepEIDs.byLinkMargin = 81 - byRSSI; - break; - case RATE_6M: - default: - pFrame->sTPCRepEIDs.byLinkMargin = 82 - byRSSI; - break; - } - - pTxPacket->cbMPDULen = sizeof(WLAN_FRAME_TPCREP); - pTxPacket->cbPayloadLen = sizeof(WLAN_FRAME_TPCREP) - - WLAN_HDR_ADDR3_LEN; - if (csMgmt_xmit(pMgmt->pAdapter, pTxPacket) != CMD_STATUS_PENDING) - return false; - return true; -} /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Functions --------------------------*/ -/*+ - * - * Description: - * Handles action management frames. - * - * Parameters: - * In: - * pMgmt - Management Object structure - * pRxPacket - Received packet - * Out: - * none - * - * Return Value: None. - * - -*/ -bool -IEEE11hbMgrRxAction(void *pMgmtHandle, void *pRxPacket) -{ - PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; - PWLAN_FRAME_ACTION pAction = NULL; - unsigned int uLength = 0; - PWLAN_IE_CH_SW pChannelSwitch = NULL; - - /* decode the frame */ - uLength = ((PSRxMgmtPacket)pRxPacket)->cbMPDULen; - if (uLength > WLAN_A3FR_MAXLEN) - return false; - - pAction = (PWLAN_FRAME_ACTION) - (((PSRxMgmtPacket)pRxPacket)->p80211Header); - - if (pAction->byCategory == 0) { - switch (pAction->byAction) { - case ACTION_MSRREQ: - return s_bRxMSRReq(pMgmt, - (PWLAN_FRAME_MSRREQ) - pAction, - uLength); - break; - case ACTION_MSRREP: - break; - case ACTION_TPCREQ: - return s_bRxTPCReq(pMgmt, - (PWLAN_FRAME_TPCREQ) pAction, - ((PSRxMgmtPacket)pRxPacket)->byRxRate, - (unsigned char) - ((PSRxMgmtPacket)pRxPacket)->uRSSI); - break; - case ACTION_TPCREP: - break; - case ACTION_CHSW: - pChannelSwitch = (PWLAN_IE_CH_SW) (pAction->abyVars); - if ((pChannelSwitch->byElementID == WLAN_EID_CH_SWITCH) - && (pChannelSwitch->len == 3)) { - /* valid element id */ - CARDbChannelSwitch(pMgmt->pAdapter, - pChannelSwitch->byMode, - get_channel_mapping(pMgmt->pAdapter, - pChannelSwitch->byChannel, - pMgmt->eCurrentPHYMode), - pChannelSwitch->byCount); - } - break; - default: - DBG_PRT(MSG_LEVEL_DEBUG, - KERN_INFO "Unknown Action = %d\n", - pAction->byAction); - break; - } - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unknown Category = %d\n", - pAction->byCategory); - pAction->byCategory |= 0x80; - - return true; - } - return true; -} - bool IEEE11hbMSRRepTx(void *pMgmtHandle) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; -- cgit From 8e3bec324e59aeedbef749ba2a3a2c00db1c75cf Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Tue, 22 Jul 2014 22:08:30 +0200 Subject: staging: vt6655: Fix unused function warning Sparse reports that MimeThread is not used. Actually, it can be used if THREAD is defined. By enclosing the MimeThread function into the same #ifdef as the caller of MimeThread, this fixes the sparse warnings. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 52f10cacb425..5eeb19edc633 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -98,7 +98,9 @@ MODULE_AUTHOR("VIA Networking Technologies, Inc., "); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("VIA Networking Solomon-A/B/G Wireless LAN Adapter Driver"); +#ifdef THREAD static int mlme_kill; +#endif #define DEVICE_PARAM(N, D) @@ -1612,7 +1614,8 @@ void InitRxManagementQueue(PSDevice pDevice) //PLICE_DEBUG<- //PLICE_DEBUG -> -int MlmeThread( +#ifdef THREAD +static int MlmeThread( void *Context) { PSDevice pDevice = (PSDevice) Context; @@ -1635,6 +1638,7 @@ int MlmeThread( return 0; } +#endif static int device_open(struct net_device *dev) { PSDevice pDevice = (PSDevice)netdev_priv(dev); -- cgit From 5a0232aeb10e38501b11ffe322889b45984a8643 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Tue, 22 Jul 2014 15:40:05 +0300 Subject: Staging: vt6655: removed redundant comments from aes_ccmp.h Removed redundant comments from aes_ccmp.h header file Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/aes_ccmp.h | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/aes_ccmp.h b/drivers/staging/vt6655/aes_ccmp.h index cc02e645aa56..fe0c506205d5 100644 --- a/drivers/staging/vt6655/aes_ccmp.h +++ b/drivers/staging/vt6655/aes_ccmp.h @@ -32,15 +32,6 @@ #include "ttype.h" -/*--------------------- Export Definitions -------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ bool AESbGenCCMP(unsigned char *pbyRxKey, unsigned char *pbyFrame, unsigned short wFrameSize); #endif /* __AES_H__ */ -- cgit From 221cf98ca2ca2bd2605299b10c45b398e546a61b Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Tue, 22 Jul 2014 15:36:10 +0300 Subject: Staging: vt6655: Removed redundant comments and newlines Removed redundant comments and newlines from 80211mgr.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/80211mgr.h | 38 -------------------------------------- 1 file changed, 38 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/80211mgr.h b/drivers/staging/vt6655/80211mgr.h index 065238beb4f4..8b126bbd9fa5 100644 --- a/drivers/staging/vt6655/80211mgr.h +++ b/drivers/staging/vt6655/80211mgr.h @@ -34,8 +34,6 @@ #include "ttype.h" #include "80211hdr.h" -/*--------------------- Export Definitions -------------------------*/ - #define WLAN_MIN_ARRAY 1 /* Information Element ID value */ @@ -202,12 +200,6 @@ #define MEASURE_MODE_INCAPABLE 0x02 #define MEASURE_MODE_REFUSED 0x04 -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - /* Information Element Types */ #pragma pack(1) @@ -472,14 +464,11 @@ typedef struct tagWLAN_FR_BEACON { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /* fixed fields */ PQWORD pqwTimestamp; unsigned short *pwBeaconInterval; unsigned short *pwCapInfo; - /*-- info elements ----------*/ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; -/* PWLAN_IE_FH_PARMS pFHParms; */ PWLAN_IE_DS_PARMS pDSParms; PWLAN_IE_CF_PARMS pCFParms; PWLAN_IE_TIM pTIM; @@ -501,10 +490,6 @@ typedef struct tagWLAN_FR_IBSSATIM { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - - /* fixed fields */ - /* info elements */ - /* this frame type has a null body */ } WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM; /* Disassociation */ @@ -513,9 +498,7 @@ typedef struct tagWLAN_FR_DISASSOC { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwReason; - /*-- info elements ----------*/ } WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC; /* Association Request */ @@ -524,10 +507,8 @@ typedef struct tagWLAN_FR_ASSOCREQ { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwCapInfo; unsigned short *pwListenInterval; - /*-- info elements ----------*/ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_RSN pRSN; @@ -543,11 +524,9 @@ typedef struct tagWLAN_FR_ASSOCRESP { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwCapInfo; unsigned short *pwStatus; unsigned short *pwAid; - /*-- info elements ----------*/ PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; } WLAN_FR_ASSOCRESP, *PWLAN_FR_ASSOCRESP; @@ -558,13 +537,9 @@ typedef struct tagWLAN_FR_REASSOCREQ { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - - /*-- fixed fields -----------*/ unsigned short *pwCapInfo; unsigned short *pwListenInterval; PIEEE_ADDR pAddrCurrAP; - - /*-- info elements ----------*/ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_RSN pRSN; @@ -578,11 +553,9 @@ typedef struct tagWLAN_FR_REASSOCRESP { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwCapInfo; unsigned short *pwStatus; unsigned short *pwAid; - /*-- info elements ----------*/ PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; } WLAN_FR_REASSOCRESP, *PWLAN_FR_REASSOCRESP; @@ -593,8 +566,6 @@ typedef struct tagWLAN_FR_PROBEREQ { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ - /*-- info elements ----------*/ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; @@ -606,11 +577,9 @@ typedef struct tagWLAN_FR_PROBERESP { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ PQWORD pqwTimestamp; unsigned short *pwBeaconInterval; unsigned short *pwCapInfo; - /*-- info elements ----------*/ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_DS_PARMS pDSParms; @@ -633,11 +602,9 @@ typedef struct tagWLAN_FR_AUTHEN { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwAuthAlgorithm; unsigned short *pwAuthSequence; unsigned short *pwStatus; - /*-- info elements ----------*/ PWLAN_IE_CHALLENGE pChallenge; } WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN; @@ -647,14 +614,9 @@ typedef struct tagWLAN_FR_DEAUTHEN { unsigned int len; unsigned char *pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ unsigned short *pwReason; - - /*-- info elements ----------*/ } WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN; -/*--------------------- Export Functions --------------------------*/ - void vMgrEncodeBeacon( PWLAN_FR_BEACON pFrame -- cgit From 7a43ba4221aba096aedda5bf136c4b767d335c9b Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Tue, 22 Jul 2014 15:25:18 +0300 Subject: Staging: vt6655: remove redundant comments from 80211hdr.h Removed redundant comments from 80211hdr.h header file Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/80211hdr.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/80211hdr.h b/drivers/staging/vt6655/80211hdr.h index ba155cdded2f..e05d13544ea2 100644 --- a/drivers/staging/vt6655/80211hdr.h +++ b/drivers/staging/vt6655/80211hdr.h @@ -33,7 +33,6 @@ #include "ttype.h" -/*--------------------- Export Definitions -------------------------*/ /* bit type */ #define BIT0 0x00000001 #define BIT1 0x00000002 @@ -315,10 +314,4 @@ typedef union tagUWLAN_80211HDR { WLAN_80211HDR_A4 sA4; } UWLAN_80211HDR, *PUWLAN_80211HDR; -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - #endif /* __80211HDR_H__ */ -- cgit From 90ac0764e01f310588e578d26f554cb0008b5091 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 21 Jul 2014 11:01:26 -0700 Subject: staging: comedi: comedi_fops: remove disabled subdevice lock/unlock callback According to Ian Abbott, this code was added in comedi-0.7.6 back in June 1999 and has always been disabled. The 'lock_f' and 'unlock' members don't even exist in the comedi_subdevice. Just remove the disabled code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 01fb31d7f3cd..84a1e429f24c 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -1660,14 +1660,6 @@ static int do_lock_ioctl(struct comedi_device *dev, unsigned int arg, s->lock = file; spin_unlock_irqrestore(&s->spin_lock, flags); -#if 0 - if (ret < 0) - return ret; - - if (s->lock_f) - ret = s->lock_f(dev, s); -#endif - return ret; } @@ -1702,14 +1694,8 @@ static int do_unlock_ioctl(struct comedi_device *dev, unsigned int arg, if (s->lock && s->lock != file) return -EACCES; - if (s->lock == file) { -#if 0 - if (s->unlock) - s->unlock(dev, s); -#endif - + if (s->lock == file) s->lock = NULL; - } return 0; } -- cgit From 57a4f4cf409261b0330df909ad6fdb85cb096467 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 21 Jul 2014 11:01:27 -0700 Subject: staging: comedi: comedidev.h: remove unused callbacks from comedi_subdevice The 'do_lock' and 'do_unlock' callbacks are not used be any of the comedi drivers or the comedi core. Just remove them. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedidev.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index ec2be3570d6c..6bf5616beedb 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -75,9 +75,6 @@ struct comedi_subdevice { struct comedi_cmd *); int (*poll)(struct comedi_device *, struct comedi_subdevice *); int (*cancel)(struct comedi_device *, struct comedi_subdevice *); - /* int (*do_lock)(struct comedi_device *, struct comedi_subdevice *); */ - /* int (*do_unlock)(struct comedi_device *, \ - struct comedi_subdevice *); */ /* called when the buffer changes */ int (*buf_change)(struct comedi_device *dev, -- cgit From d546b8966e66b114809d4af14e2d837adeeec2fc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 21 Jul 2014 11:48:32 -0700 Subject: staging: comedi: comedidev.h: remove 'new_size' param from subdevice (*buf_change) This parameter is never used by any of the comedi drivers that provide a (*buf_change) callback. If the 'new_size' is needed in the callback it can be found from the 's->async->prealloc_bufsz' as done in the ni_pcidio driver. Remove the unused parameter. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedi_fops.c | 2 +- drivers/staging/comedi/comedidev.h | 3 +-- drivers/staging/comedi/drivers.c | 2 +- drivers/staging/comedi/drivers/ni_660x.c | 3 +-- drivers/staging/comedi/drivers/ni_pcidio.c | 2 +- drivers/staging/comedi/drivers/ni_pcimio.c | 15 +++++---------- 6 files changed, 10 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 84a1e429f24c..2182c7463cdb 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -268,7 +268,7 @@ static int resize_async_buffer(struct comedi_device *dev, return retval; if (s->buf_change) { - retval = s->buf_change(dev, s, new_size); + retval = s->buf_change(dev, s); if (retval < 0) return retval; } diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 6bf5616beedb..f3999f5e8091 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -77,8 +77,7 @@ struct comedi_subdevice { int (*cancel)(struct comedi_device *, struct comedi_subdevice *); /* called when the buffer changes */ - int (*buf_change)(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size); + int (*buf_change)(struct comedi_device *, struct comedi_subdevice *); void (*munge)(struct comedi_device *dev, struct comedi_subdevice *s, void *data, unsigned int num_bytes, diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 6ec4a4176e73..42ddf1332ce8 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -320,7 +320,7 @@ static int __comedi_device_postconfig_async(struct comedi_device *dev, return -ENOMEM; } if (s->buf_change) { - ret = s->buf_change(dev, s, buf_size); + ret = s->buf_change(dev, s); if (ret < 0) return ret; } diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 6b8c702f2008..20fe692fd8f0 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -825,8 +825,7 @@ static int ni_660x_input_poll(struct comedi_device *dev, } static int ni_660x_buf_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_660x_private *devpriv = dev->private; struct ni_gpct *counter = s->private; diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 2bf86911cb6b..352c60fa58b6 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -787,7 +787,7 @@ static int ni_pcidio_cancel(struct comedi_device *dev, } static int ni_pcidio_change(struct comedi_device *dev, - struct comedi_subdevice *s, unsigned long new_size) + struct comedi_subdevice *s) { struct nidio96_private *devpriv = dev->private; int ret; diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index a902a3891351..22c0e95dc174 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -977,8 +977,7 @@ static const struct ni_board_struct ni_boards[] = { #include "ni_mio_common.c" static int pcimio_ai_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; int ret; @@ -991,8 +990,7 @@ static int pcimio_ai_change(struct comedi_device *dev, } static int pcimio_ao_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; int ret; @@ -1005,8 +1003,7 @@ static int pcimio_ao_change(struct comedi_device *dev, } static int pcimio_gpct0_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; int ret; @@ -1019,8 +1016,7 @@ static int pcimio_gpct0_change(struct comedi_device *dev, } static int pcimio_gpct1_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; int ret; @@ -1033,8 +1029,7 @@ static int pcimio_gpct1_change(struct comedi_device *dev, } static int pcimio_dio_change(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned long new_size) + struct comedi_subdevice *s) { struct ni_private *devpriv = dev->private; int ret; -- cgit From 8f901437cd377bc6908e1b2c046f3537ef928265 Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Tue, 22 Jul 2014 05:51:22 +0300 Subject: Staging: comedi: amcc_s5933: a line over 80 fixed A 'line over 80 characters' fixed by removing comment to previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amcc_s5933.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amcc_s5933.h b/drivers/staging/comedi/drivers/amcc_s5933.h index 96b71f9400da..b8cc8ee95256 100644 --- a/drivers/staging/comedi/drivers/amcc_s5933.h +++ b/drivers/staging/comedi/drivers/amcc_s5933.h @@ -52,7 +52,8 @@ #define INTCSR_INBOX_BYTE(x) (((x) & 0x3) << 8) #define INTCSR_INBOX_SELECT(x) (((x) & 0x3) << 10) #define INTCSR_INBOX_FULL_INT 0x1000 /* enable inbox full interrupt */ -#define INTCSR_INBOX_INTR_STATUS 0x20000 /* read, or write clear inbox full interrupt */ +/* read, or write clear inbox full interrupt */ +#define INTCSR_INBOX_INTR_STATUS 0x20000 #define INTCSR_INTR_ASSERTED 0x800000 /* read only, interrupt asserted */ /****************************************************************************/ -- cgit From 011cdca0025f1b85ae6cebb9b1a60c47f25c671e Mon Sep 17 00:00:00 2001 From: Sam Asadi Date: Tue, 22 Jul 2014 05:51:23 +0300 Subject: Staging: comedi: amcc_s5933: a style issue fixed A 'line over 80 characters' fixed by removing comment to the previous line. Signed-off-by: Sam Asadi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amcc_s5933.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amcc_s5933.h b/drivers/staging/comedi/drivers/amcc_s5933.h index b8cc8ee95256..cf6a497b092c 100644 --- a/drivers/staging/comedi/drivers/amcc_s5933.h +++ b/drivers/staging/comedi/drivers/amcc_s5933.h @@ -54,7 +54,8 @@ #define INTCSR_INBOX_FULL_INT 0x1000 /* enable inbox full interrupt */ /* read, or write clear inbox full interrupt */ #define INTCSR_INBOX_INTR_STATUS 0x20000 -#define INTCSR_INTR_ASSERTED 0x800000 /* read only, interrupt asserted */ +/* read only, interrupt asserted */ +#define INTCSR_INTR_ASSERTED 0x800000 /****************************************************************************/ /* AMCC - PCI non-volatile ram command register (byte 3 of master control/status register) */ -- cgit From aa92015987f03fcc2a82f3cfad24108a48019d2c Mon Sep 17 00:00:00 2001 From: Kiran Padwal Date: Tue, 22 Jul 2014 12:38:25 +0530 Subject: Staging: gdm724x: gdm_usb.c: fix missing blank line after variable declaration Checkpatch fix - Add missing blank line after variable declaration Signed-off-by: Kiran Padwal Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/gdm_usb.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/gdm_usb.c b/drivers/staging/gdm724x/gdm_usb.c index ea89d530ff3f..0c1b2de2b57d 100644 --- a/drivers/staging/gdm724x/gdm_usb.c +++ b/drivers/staging/gdm724x/gdm_usb.c @@ -896,6 +896,7 @@ static void gdm_usb_disconnect(struct usb_interface *intf) struct lte_udev *udev; u16 idVendor, idProduct; struct usb_device *usbdev; + usbdev = interface_to_usbdev(intf); idVendor = __le16_to_cpu(usbdev->descriptor.idVendor); -- cgit From fae062ad57def6abf344ba1765a90c83f1a2d143 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 22 Jul 2014 23:42:13 +0900 Subject: staging: rtl8723au: Fix typo in rtw_mlme_ext.c This patch fix spelling typo in comments within rtw_mlme_ext.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c index 18e4d24878bb..c5fdcb89dacd 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -2213,7 +2213,7 @@ exit: /**************************************************************************** -Following are some TX fuctions for WiFi MLME +Following are some TX functions for WiFi MLME *****************************************************************************/ @@ -3352,7 +3352,7 @@ exit: return; } -/* when wait_ack is ture, this function shoule be called at process context */ +/* when wait_ack is true, this function should be called at process context */ static int _issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack) { @@ -3423,7 +3423,7 @@ exit: return ret; } -/* when wait_ms >0 , this function shoule be called at process context */ +/* when wait_ms >0 , this function should be called at process context */ /* da == NULL for station mode */ int issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms) @@ -3434,7 +3434,7 @@ int issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - /* da == NULL, assum it's null data for sta to ap*/ + /* da == NULL, assume it's null data for sta to ap*/ if (da == NULL) da = get_my_bssid23a(&pmlmeinfo->network); @@ -3476,7 +3476,7 @@ exit: return ret; } -/* when wait_ack is ture, this function shoule be called at process context */ +/* when wait_ack is true, this function should be called at process context */ static int _issue_qos_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, u16 tid, int wait_ack) { @@ -3551,7 +3551,7 @@ exit: return ret; } -/* when wait_ms >0 , this function shoule be called at process context */ +/* when wait_ms >0 , this function should be called at process context */ /* da == NULL for station mode */ int issue_qos_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms) @@ -3562,7 +3562,7 @@ int issue_qos_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; - /* da == NULL, assum it's null data for sta to ap*/ + /* da == NULL, assume it's null data for sta to ap*/ if (da == NULL) da = get_my_bssid23a(&pmlmeinfo->network); @@ -4023,7 +4023,7 @@ int send_beacon23a(struct rtw_adapter *padapter) /**************************************************************************** -Following are some utitity fuctions for WiFi MLME +Following are some utitity functions for WiFi MLME *****************************************************************************/ @@ -4303,7 +4303,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter, } - /* mark bss info receving from nearby channel as SignalQuality 101 */ + /* mark bss info receiving from nearby channel as SignalQuality 101 */ if (bssid->DSConfig != rtw_get_oper_ch23a(padapter)) bssid->PhyInfo.SignalQuality = 101; @@ -4325,7 +4325,7 @@ static void start_create_ibss(struct rtw_adapter* padapter) /* update wireless mode */ update_wireless_mode23a(padapter); - /* udpate capability */ + /* update capability */ caps = pnetwork->capability; update_capinfo23a(padapter, caps); if (caps & WLAN_CAPABILITY_IBSS) { /* adhoc master */ @@ -4377,7 +4377,7 @@ static void start_clnt_join(struct rtw_adapter* padapter) /* update wireless mode */ update_wireless_mode23a(padapter); - /* udpate capability */ + /* update capability */ caps = pnetwork->capability; update_capinfo23a(padapter, caps); if (caps & WLAN_CAPABILITY_ESS) { @@ -5073,7 +5073,7 @@ void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, /* BCN interval */ rtl8723a_set_beacon_interval(padapter, pmlmeinfo->bcn_interval); - /* udpate capability */ + /* update capability */ update_capinfo23a(padapter, pmlmeinfo->capability); /* WMM, Update EDCA param */ @@ -5851,7 +5851,7 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf) rtl8723a_odm_support_ability_clr(padapter, DYNAMIC_FUNC_DISABLE); - /* config the initial gain under scaning, need to + /* config the initial gain under scanning, need to write the BB registers */ if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == true) initialgain = 0x30; -- cgit From d484e33728f13ce1f0a0014d6b4068d053ed69b3 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 21 Jul 2014 14:53:31 +0100 Subject: staging: comedi: ni_65xx: don't invert outputs by default This driver currently inverts the outputs for the DO (digital output) subdevice for some of the boards it supports, indicated by the `invert_outputs` member in the board-specific data being initialized to 1. It seems this driver shouldn't really be inverting outputs for these boards at all, but has done so since the driver was first written back in October 2006. I've had confirmation that for the PCI-6515 at least, the output voltage levels are opposite to the values set by the user program. The driver by Jon Grierson originally supported only PCI-6514 and PXI-6514 (and was originally called "ni_6514"). The driver was based on "ni_6527", which is where the inversion of outputs appears to have come from. Over a period of a few days, the driver was enhanced by Frank Mori Hess to support other boards. Some of these plainly didn't require inverted outputs and some guesswork was used to decide which boards should have inverted outputs. Some of the boards in question are described in the manual as having "Sink Outputs" and others are described as having "Source Outputs", but this does not correspond in any way with which boards are marked as having inverted outputs, so the criterion that Frank used is a bit of a mystery! Change the driver so it doesn't invert the outputs of these by boards by default, but add a module parameter, "legacy_invert_outputs", that can be set to 'true' to restore the old behaviour. Also rename the `invert_outputs` member of `struct ni_65xx_board` to `legacy_invert`. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 47 ++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index cad2c2890a27..aba6fbbe340a 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -47,13 +47,21 @@ * (National Instruments) PXI-6521 [ni_65xx] * (National Instruments) PCI-6528 [ni_65xx] * (National Instruments) PXI-6528 [ni_65xx] - * Updated: Wed Oct 18 08:59:11 EDT 2006 + * Updated: Mon, 21 Jul 2014 12:49:58 +0000 * * Configuration Options: not applicable, uses PCI auto config * * Based on the PCI-6527 driver by ds. * The interrupt subdevice (subdevice 3) is probably broken for all * boards except maybe the 6514. + * + * This driver previously inverted the outputs on PCI-6513 through to + * PCI-6519 and on PXI-6513 through to PXI-6515. It no longer inverts + * outputs on those cards by default as it didn't make much sense. If + * you require the outputs to be inverted on those cards for legacy + * reasons, set the module parameter "legacy_invert_outputs=true" when + * loading the module, or set "ni_65xx.legacy_invert_outputs=true" on + * the kernel command line if the driver is built in to the kernel. */ /* @@ -163,7 +171,7 @@ struct ni_65xx_board { unsigned num_dio_ports; unsigned num_di_ports; unsigned num_do_ports; - unsigned invert_outputs:1; + unsigned legacy_invert:1; }; static const struct ni_65xx_board ni_65xx_boards[] = { @@ -198,58 +206,58 @@ static const struct ni_65xx_board ni_65xx_boards[] = { [BOARD_PCI6513] = { .name = "pci-6513", .num_do_ports = 8, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PXI6513] = { .name = "pxi-6513", .num_do_ports = 8, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6514] = { .name = "pci-6514", .num_di_ports = 4, .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PXI6514] = { .name = "pxi-6514", .num_di_ports = 4, .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6515] = { .name = "pci-6515", .num_di_ports = 4, .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PXI6515] = { .name = "pxi-6515", .num_di_ports = 4, .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6516] = { .name = "pci-6516", .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6517] = { .name = "pci-6517", .num_do_ports = 4, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6518] = { .name = "pci-6518", .num_di_ports = 2, .num_do_ports = 2, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6519] = { .name = "pci-6519", .num_di_ports = 2, .num_do_ports = 2, - .invert_outputs = 1, + .legacy_invert = 1, }, [BOARD_PCI6520] = { .name = "pci-6520", @@ -278,6 +286,12 @@ static const struct ni_65xx_board ni_65xx_boards[] = { }, }; +static bool ni_65xx_legacy_invert_outputs; +module_param_named(legacy_invert_outputs, ni_65xx_legacy_invert_outputs, + bool, 0444); +MODULE_PARM_DESC(legacy_invert_outputs, + "invert outputs of PCI/PXI-6513/6514/6515/6516/6517/6518/6519 for compatibility with old user code"); + struct ni_65xx_private { void __iomem *mmio; }; @@ -670,8 +684,13 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, /* the output ports always start after the input ports */ s->private = (void *)(unsigned long)board->num_di_ports; - /* use the io_bits to handle the inverted outputs */ - s->io_bits = (board->invert_outputs) ? 0xff : 0x00; + /* + * Use the io_bits to handle the inverted outputs. Inverted + * outputs are only supported if the "legacy_invert_outputs" + * module parameter is set to "true". + */ + if (ni_65xx_legacy_invert_outputs && board->legacy_invert) + s->io_bits = 0xff; /* reset all output ports to comedi '0' */ for (i = 0; i < board->num_do_ports; ++i) { -- cgit From 110f9e687c1a8490383612817ac03f4b29861da1 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 21 Jul 2014 17:29:05 +0100 Subject: staging: comedi: ni_6527: support INSN_CONFIG_DIGITAL_TRIG The "edge detection interrupt" subdevice supports the `INSN_CONFIG_CHANGE_NOTIFY` comedi instruction which is only supported by one other driver. The `INSN_CONFIG_DIGITAL_TRIG` comedi instruction is more flexible as it supports both edge and level detection, but is not currently supported by this driver. Add partial support for `INSN_CONFIG_DIGITAL_TRIG`, but only for edge detection. Make use of the `ni6527_set_edge_detection()` used for `INSN_CONFIG_CHANGE_NOTIFY`, but add a parameter holding a mask of the rising and falling edges to be updated and preserve the unmasked edges when updating. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_6527.c | 72 +++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c index c8b1fa793a37..57d8d4c30459 100644 --- a/drivers/staging/comedi/drivers/ni_6527.c +++ b/drivers/staging/comedi/drivers/ni_6527.c @@ -299,21 +299,38 @@ static int ni6527_intr_insn_bits(struct comedi_device *dev, } static void ni6527_set_edge_detection(struct comedi_device *dev, + unsigned int mask, unsigned int rising, unsigned int falling) { struct ni6527_private *devpriv = dev->private; void __iomem *mmio = devpriv->mmio_base; - - /* enable rising-edge detection channels */ - writeb(rising & 0xff, mmio + NI6527_RISING_EDGE_REG(0)); - writeb((rising >> 8) & 0xff, mmio + NI6527_RISING_EDGE_REG(1)); - writeb((rising >> 16) & 0xff, mmio + NI6527_RISING_EDGE_REG(2)); - - /* enable falling-edge detection channels */ - writeb(falling & 0xff, mmio + NI6527_FALLING_EDGE_REG(0)); - writeb((falling >> 8) & 0xff, mmio + NI6527_FALLING_EDGE_REG(1)); - writeb((falling >> 16) & 0xff, mmio + NI6527_FALLING_EDGE_REG(2)); + unsigned int i; + + rising &= mask; + falling &= mask; + for (i = 0; i < 2; i++) { + if (mask & 0xff) { + if (~mask & 0xff) { + /* preserve rising-edge detection channels */ + rising |= readb(mmio + + NI6527_RISING_EDGE_REG(i)) & + (~mask & 0xff); + /* preserve falling-edge detection channels */ + falling |= readb(mmio + + NI6527_FALLING_EDGE_REG(i)) & + (~mask & 0xff); + } + /* update rising-edge detection channels */ + writeb(rising & 0xff, mmio + NI6527_RISING_EDGE_REG(i)); + /* update falling-edge detection channels */ + writeb(falling & 0xff, + mmio + NI6527_FALLING_EDGE_REG(i)); + } + rising >>= 8; + falling >>= 8; + mask >>= 8; + } } static int ni6527_intr_insn_config(struct comedi_device *dev, @@ -321,12 +338,45 @@ static int ni6527_intr_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { + unsigned int mask = 0xffffffff; + unsigned int rising, falling, shift; + switch (data[0]) { case INSN_CONFIG_CHANGE_NOTIFY: /* check_insn_config_length() does not check this instruction */ if (insn->n != 3) return -EINVAL; - ni6527_set_edge_detection(dev, data[1], data[2]); + rising = data[1]; + falling = data[2]; + ni6527_set_edge_detection(dev, mask, rising, falling); + break; + case INSN_CONFIG_DIGITAL_TRIG: + /* check trigger number */ + if (data[1] != 0) + return -EINVAL; + /* check digital trigger operation */ + switch (data[2]) { + case COMEDI_DIGITAL_TRIG_DISABLE: + rising = 0; + falling = 0; + break; + case COMEDI_DIGITAL_TRIG_ENABLE_EDGES: + /* check shift amount */ + shift = data[3]; + if (shift >= s->n_chan) { + mask = 0; + rising = 0; + falling = 0; + } else { + mask <<= shift; + rising = data[4] << shift; + falling = data[5] << shift; + } + break; + default: + return -EINVAL; + } + ni6527_set_edge_detection(dev, mask, rising, falling); break; default: return -EINVAL; -- cgit From e44c53920fc7feafc412e547e0a8d62530b1a28d Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 21 Jul 2014 17:29:06 +0100 Subject: staging: comedi: ni_6527: reset edge detection registers `ni6527_reset()` is called to reset various registers when the device is being initialized or deinitialized. The edge detection interrupt is disabled by this function, but the rising and falling edge detection registers are currently left alone. Call `ni6527_set_edge_detection()` to set them to a known, disabled state. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_6527.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c index 57d8d4c30459..8ea93b584526 100644 --- a/drivers/staging/comedi/drivers/ni_6527.c +++ b/drivers/staging/comedi/drivers/ni_6527.c @@ -393,6 +393,9 @@ static void ni6527_reset(struct comedi_device *dev) /* disable deglitch filters on all channels */ ni6527_set_filter_enable(dev, 0); + /* disable edge detection */ + ni6527_set_edge_detection(dev, 0xffffffff, 0, 0); + writeb(NI6527_CLR_IRQS | NI6527_CLR_RESET_FILT, mmio + NI6527_CLR_REG); writeb(NI6527_CTRL_DISABLE_IRQS, mmio + NI6527_CTRL_REG); -- cgit From 5813104211a7db9277794d71814ceb04341b7f3f Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Wed, 23 Jul 2014 00:21:57 +0900 Subject: staging: dgnc: Remove all C99 comments This patch fixes the following checkpatch error: ERROR: do not use C99 // comments CC: Lidza Louina Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_driver.h | 10 +++++----- drivers/staging/dgnc/digi.h | 36 ++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_driver.h b/drivers/staging/dgnc/dgnc_driver.h index 3519b803e753..fe5ea903bbe2 100644 --- a/drivers/staging/dgnc/dgnc_driver.h +++ b/drivers/staging/dgnc/dgnc_driver.h @@ -98,7 +98,7 @@ /* Choose one: */ # define TRC_ON_OVERFLOW_WRAP_AROUND # undef TRC_ON_OVERFLOW_SHIFT_BUFFER -# endif //TRC_TO_KMEM +# endif /* TRC_TO_KMEM */ # define TRC_MAXMSG 1024 # define TRC_OVERFLOW "(OVERFLOW)" @@ -106,13 +106,13 @@ #if defined TRC_TO_CONSOLE #define PRINTF_TO_CONSOLE(args) { printk(DRVSTR": "); printk args; } -#else //!defined TRACE_TO_CONSOLE +#else /* !defined TRACE_TO_CONSOLE */ #define PRINTF_TO_CONSOLE(args) #endif #if defined TRC_TO_KMEM #define PRINTF_TO_KMEM(args) dgnc_tracef args -#else //!defined TRC_TO_KMEM +#else /* !defined TRC_TO_KMEM */ #define PRINTF_TO_KMEM(args) #endif @@ -140,7 +140,7 @@ # define P(X) dgnc_tracef(#X "=%p\n", X) # define X(X) dgnc_tracef(#X "=%x\n", X) -#else//!defined DGNC_TRACER +#else/* !defined DGNC_TRACER */ #define PRINTF_TO_KMEM(args) # define TRC(ARGS) @@ -164,7 +164,7 @@ # define DPR(args) -#endif//DGNC_TRACER +#endif/* DGNC_TRACER */ /* Number of boards we support at once. */ #define MAXBOARDS 20 diff --git a/drivers/staging/dgnc/digi.h b/drivers/staging/dgnc/digi.h index 6a9adf6591eb..282908f6f388 100644 --- a/drivers/staging/dgnc/digi.h +++ b/drivers/staging/dgnc/digi.h @@ -394,23 +394,23 @@ struct digi_getcounter { #define DIGI_REALPORT_GETCOUNTERS ('e'<<8 ) | 110 #define DIGI_REALPORT_GETEVENTS ('e'<<8 ) | 111 -#define EV_OPU 0x0001 //! Date: Tue, 22 Jul 2014 23:42:28 +0530 Subject: staging: gdm724x: Use NLMSG_HDRLEN Replace use of NLMSG_SPACE(0) with NLMSG_HDRLEN as they are equivalent and NLMSG_SPACE seems to be deprecated. Signed-off-by: Himangi Saraogi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/netlink_k.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/netlink_k.c b/drivers/staging/gdm724x/netlink_k.c index 5ddd36948a2f..59a18304ef4a 100644 --- a/drivers/staging/gdm724x/netlink_k.c +++ b/drivers/staging/gdm724x/netlink_k.c @@ -54,7 +54,7 @@ static void netlink_rcv_cb(struct sk_buff *skb) return; } - if (skb->len < NLMSG_SPACE(0)) { + if (skb->len < NLMSG_HDRLEN) { pr_err("nl cb - invalid skb length\n"); return; } -- cgit From 7c17d2d9b4cec3d5a78f9fbf5c1081d8a653fa80 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 22 Jul 2014 23:42:24 +0900 Subject: staging: rtl8723au: Fix typo in rtw_mlme.c This patch fix spelling typo in comments within rtw_mlme.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_mlme.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 4827280c3572..c475b79bbf1d 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -134,7 +134,7 @@ static void _rtw_free_network23a(struct mlme_priv *pmlmepriv, /* return the wlan_network with the matching addr - Shall be calle under atomic context... to avoid possible racing condition... + Shall be called under atomic context... to avoid possible racing condition... */ struct wlan_network * rtw_find_network23a(struct rtw_queue *scanned_queue, u8 *addr) @@ -395,7 +395,7 @@ void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src, (u32)dst->PhyInfo.SignalQuality * 4) / 5; rssi_final = src->Rssi+dst->Rssi * 4 / 5; } else { - /* bss info not receving from the right channel, use + /* bss info not receiving from the right channel, use the original RX signal infos */ ss_final = dst->PhyInfo.SignalStrength; sq_final = dst->PhyInfo.SignalQuality; @@ -490,7 +490,7 @@ static void rtw_update_scanned_network(struct rtw_adapter *adapter, pnetwork->aid = 0; pnetwork->join_res = 0; - /* bss info not receving from the right channel */ + /* bss info not receiving from the right channel */ if (pnetwork->network.PhyInfo.SignalQuality == 101) pnetwork->network.PhyInfo.SignalQuality = 0; } else { @@ -956,7 +956,7 @@ rtw_joinbss_update_stainfo(struct rtw_adapter *padapter, /* Commented by Albert 2012/07/21 */ /* When doing the WPS, the wps_ie_len won't equal to 0 */ /* And the Wi-Fi driver shouldn't allow the data packet - to be tramsmitted. */ + to be transmitted. */ if (padapter->securitypriv.wps_ie_len != 0) { psta->ieee8021x_blocked = true; padapter->securitypriv.wps_ie_len = 0; @@ -964,7 +964,7 @@ rtw_joinbss_update_stainfo(struct rtw_adapter *padapter, /* for A-MPDU Rx reordering buffer control for bmc_sta & * sta_info */ - /* if A-MPDU Rx is enabled, reseting + /* if A-MPDU Rx is enabled, resetting rx_ordering_ctrl wstart_b(indicate_seq) to default value = 0xffff */ /* todo: check if AP can send A-MPDU packets */ @@ -1073,7 +1073,7 @@ rtw_joinbss_update_network23a(struct rtw_adapter *padapter, /* * Notes: - * the fucntion could be > passive_level (the same context as Rx tasklet) + * the function could be > passive_level (the same context as Rx tasklet) * pnetwork : returns from rtw23a_joinbss_event_cb * ptarget_wlan: found from scanned_queue * if join_res > 0, for (fw_state==WIFI_STATION_STATE), @@ -1419,7 +1419,7 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) } /* -* rtw23a_join_to_handler - Timeout/faliure handler for CMD JoinBss +* rtw23a_join_to_handler - Timeout/failure handler for CMD JoinBss * @adapter: pointer to _adapter structure */ void rtw23a_join_to_handler (unsigned long data) @@ -1470,7 +1470,7 @@ void rtw23a_join_to_handler (unsigned long data) } /* -* rtw_scan_timeout_handler23a - Timeout/Faliure handler for CMD SiteSurvey +* rtw_scan_timeout_handler23a - Timeout/Failure handler for CMD SiteSurvey * @data: pointer to _adapter structure */ void rtw_scan_timeout_handler23a(unsigned long data) @@ -2102,7 +2102,7 @@ void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter) /* pdev_network->IELength = cpu_to_le32(sz); */ } -/* the fucntion is at passive_level */ +/* the function is at passive_level */ void rtw_joinbss_reset23a(struct rtw_adapter *padapter) { u8 threshold; @@ -2131,7 +2131,7 @@ void rtw_joinbss_reset23a(struct rtw_adapter *padapter) rtl8723a_set_rxdma_agg_pg_th(padapter, threshold); } -/* the fucntion is >= passive_level */ +/* the function is >= passive_level */ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len) { @@ -2203,7 +2203,7 @@ bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie, return phtpriv->ht_option; } -/* the fucntion is > passive_level (in critical_section) */ +/* the function is > passive_level (in critical_section) */ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) { u8 max_ampdu_sz; @@ -2271,7 +2271,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len) pmlmeinfo->ht_cap.mcs.rx_mask[i] &= MCS_rate_2R23A[i]; } - /* switch to the 40M Hz mode accoring to the AP */ + /* switch to the 40M Hz mode according to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; switch (pmlmeinfo->HT_info.ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { -- cgit From c582db4cb82e69f92ca5111b5043129438d5fae9 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 22 Jul 2014 23:42:37 +0900 Subject: staging: rtl8723au: Fix typo in rtw_xmit.c This patch fix spelling typo in comments within rtw_xmit.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_xmit.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_xmit.c b/drivers/staging/rtl8723au/core/rtw_xmit.c index b917526f570a..d83af877ad6f 100644 --- a/drivers/staging/rtl8723au/core/rtw_xmit.c +++ b/drivers/staging/rtl8723au/core/rtw_xmit.c @@ -1197,7 +1197,7 @@ int rtw_xmitframe_coalesce23a(struct rtw_adapter *padapter, struct sk_buff *skb, mpdu_len -= pattrib->icv_len; if (bmcst) - /* don't do fragment to broadcat/multicast packets */ + /* don't do fragment to broadcast/multicast packets */ mem_sz = min_t(s32, data_len, pattrib->pktlen); else mem_sz = min_t(s32, data_len, mpdu_len); @@ -2011,7 +2011,7 @@ int xmitframe_enqueue_for_sleeping_sta23a(struct rtw_adapter *padapter, struct x /* DBG_8723A("enqueue, sq_len =%d, tim =%x\n", psta->sleepq_len, pstapriv->tim_bitmap); */ - /* tx bc/mc packets after upate bcn */ + /* tx bc/mc packets after update bcn */ update_beacon23a(padapter, WLAN_EID_TIM, NULL, false); /* spin_unlock_bh(&psta->sleep_q.lock); */ @@ -2068,7 +2068,7 @@ int xmitframe_enqueue_for_sleeping_sta23a(struct rtw_adapter *padapter, struct x pstapriv->tim_bitmap |= CHKBIT(psta->aid); if (psta->sleepq_len == 1) { - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ update_beacon23a(padapter, WLAN_EID_TIM, NULL, false); } @@ -2227,7 +2227,7 @@ void wakeup_sta_to_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta) if (psta->sleepq_len == 0) { pstapriv->tim_bitmap &= ~CHKBIT(psta->aid); - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ update_mask = BIT(0); if (psta->state&WIFI_SLEEP_STATE) @@ -2274,7 +2274,7 @@ void wakeup_sta_to_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta) pstapriv->tim_bitmap &= ~BIT(0); pstapriv->sta_dz_bitmap &= ~BIT(0); - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ /* update_BCNTIM(padapter); */ update_mask |= BIT(1); } @@ -2348,7 +2348,7 @@ void xmit_delivery_enabled_frames23a(struct rtw_adapter *padapter, (wmmps_ac)) { pstapriv->tim_bitmap &= ~CHKBIT(psta->aid); - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ update_beacon23a(padapter, WLAN_EID_TIM, NULL, false); } } -- cgit From 96b0a5baa99b225ff7a3af5a60584cb96f8cec85 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 22 Jul 2014 23:42:45 +0900 Subject: staging: rtl8723au: Fix typo in rtw_ap.c This patch fix spelling typo in comments within rtw_ap.c Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_ap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c index 14c8d4eef630..4d2880abf4ee 100644 --- a/drivers/staging/rtl8723au/core/rtw_ap.c +++ b/drivers/staging/rtl8723au/core/rtw_ap.c @@ -93,7 +93,7 @@ static void update_BCNTIM(struct rtw_adapter *padapter) } else { tim_ielen = 0; - /* calulate head_len */ + /* calculate head_len */ offset = 0; /* get ssid_ie len */ @@ -135,7 +135,7 @@ static void update_BCNTIM(struct rtw_adapter *padapter) *dst_ie++= tim_ielen; *dst_ie++= 0;/* DTIM count */ - *dst_ie++= 1;/* DTIM peroid */ + *dst_ie++= 1;/* DTIM period */ if (pstapriv->tim_bitmap & BIT(0))/* for bc/mc frames */ *dst_ie++ = BIT(0);/* bitmap ctrl */ @@ -243,7 +243,7 @@ void expire_timeout_chk23a(struct rtw_adapter *padapter) if (psta->state & WIFI_SLEEP_STATE) { if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) { - /* to check if alive by another methods if staion is at ps mode. */ + /* to check if alive by another methods if station is at ps mode. */ psta->expire_to = pstapriv->expire_to; psta->state |= WIFI_STA_ALIVE_CHK_STATE; @@ -764,7 +764,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf) /* update cur_wireless_mode */ update_wireless_mode23a(padapter); - /* udpate capability after cur_wireless_mode updated */ + /* update capability after cur_wireless_mode updated */ update_capinfo23a(padapter, pnetwork->capability); /* let pnetwork_mlmeext == pnetwork_mlme. */ @@ -844,7 +844,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, pbss_network->Ssid.ssid_len = ie_len; } - /* chnnel */ + /* channel */ channel = 0; p = rtw_get_ie23a(ie, WLAN_EID_DS_PARAMS, &ie_len, pbss_network->IELength); @@ -1305,7 +1305,7 @@ void update_beacon23a(struct rtw_adapter *padapter, u8 ie_id, u8 *oui, u8 tx) /* op_mode -Set to 0 (HT pure) under the followign conditions +Set to 0 (HT pure) under the following conditions - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or - all STAs in the BSS are 20 MHz HT in 20 MHz BSS Set to 1 (HT non-member protection) if there may be non-HT STAs @@ -1387,7 +1387,7 @@ static int rtw_ht_operation_update(struct rtw_adapter *padapter) void associated_clients_update23a(struct rtw_adapter *padapter, u8 updated) { - /* update associcated stations cap. */ + /* update associated stations cap. */ if (updated == true) { struct list_head *phead, *plist, *ptmp; @@ -1572,7 +1572,7 @@ void bss_cap_update_on_sta_join23a(struct rtw_adapter *padapter, struct sta_info update_beacon23a(padapter, WLAN_EID_HT_OPERATION, NULL, true); } - /* update associcated stations cap. */ + /* update associated stations cap. */ associated_clients_update23a(padapter, beacon_updated); DBG_8723A("%s, updated =%d\n", __func__, beacon_updated); @@ -1641,7 +1641,7 @@ u8 bss_cap_update_on_sta_leave23a(struct rtw_adapter *padapter, struct sta_info update_beacon23a(padapter, WLAN_EID_HT_OPERATION, NULL, true); } - /* update associcated stations cap. */ + /* update associated stations cap. */ DBG_8723A("%s, updated =%d\n", __func__, beacon_updated); -- cgit From 808bcb4e78f7cd79feb89d53d54ea569cbba7386 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Tue, 22 Jul 2014 23:42:53 +0900 Subject: staging: rtl8723au: Fix typo in rtl8723au/core This patch fix spelling typo in comments within rtl8723au/core. Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_cmd.c | 4 ++-- drivers/staging/rtl8723au/core/rtw_efuse.c | 6 +++--- drivers/staging/rtl8723au/core/rtw_ieee80211.c | 2 +- drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 2 +- drivers/staging/rtl8723au/core/rtw_recv.c | 8 ++++---- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c index df1ffb375afe..25d65b27e3e9 100644 --- a/drivers/staging/rtl8723au/core/rtw_cmd.c +++ b/drivers/staging/rtl8723au/core/rtw_cmd.c @@ -322,7 +322,7 @@ post_process: pcmd_callback, pcmd->cmdcode)); rtw_free_cmd_obj23a(pcmd); } else { - /* need conider that free cmd_obj in + /* need consider that free cmd_obj in rtw_cmd_callback */ pcmd_callback(pcmd->padapter, pcmd); } @@ -736,7 +736,7 @@ int rtw_setstakey_cmd23a(struct rtw_adapter *padapter, u8 *psta, u8 unicast_key) &psecuritypriv->dot118021XGrpKey[idx].skey, 16); } - /* jeff: set this becasue at least sw key is ready */ + /* jeff: set this because at least sw key is ready */ padapter->securitypriv.busetkipkey = 1; res = rtw_enqueue_cmd23a(pcmdpriv, ph2c); diff --git a/drivers/staging/rtl8723au/core/rtw_efuse.c b/drivers/staging/rtl8723au/core/rtw_efuse.c index cc063cbc49bb..345bff847352 100644 --- a/drivers/staging/rtl8723au/core/rtw_efuse.c +++ b/drivers/staging/rtl8723au/core/rtw_efuse.c @@ -59,7 +59,7 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter, rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); /* 1.2V Power: From VDDON with Power - Cut(0x0000h[15]), defualt valid */ + Cut(0x0000h[15]), default valid */ tmpV16 = rtl8723au_read16(padapter, REG_SYS_ISO_CTRL); if (!(tmpV16 & PWC_EV12V)) { tmpV16 |= PWC_EV12V; @@ -144,7 +144,7 @@ Efuse_CalculateWordCnts23a(u8 word_en) /* */ /* Description: */ /* Execute E-Fuse read byte operation. */ -/* Refered from SD1 Richard. */ +/* Referred from SD1 Richard. */ /* */ /* Assumption: */ /* 1. Boot from E-Fuse and successfully auto-load. */ @@ -521,7 +521,7 @@ static int efuse_write8(struct rtw_adapter *padapter, u16 address, u8 *value) } /* - * read/wirte raw efuse data + * read/write raw efuse data */ int rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bWrite, u16 start_addr, u16 cnts, u8 *data) diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c index 78a7b27ab69f..23e666244f4e 100644 --- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c @@ -250,7 +250,7 @@ u8 *rtw_get_ie23a_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, * rtw_ies_remove_ie23a - Find matching IEs and remove * @ies: Address of IEs to search * @ies_len: Pointer of length of ies, will update to new length - * @offset: The offset to start scarch + * @offset: The offset to start search * @eid: Element ID to match * @oui: OUI to match * @oui_len: OUI length diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c index ad06335575e3..7fbbdafcc331 100644 --- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c @@ -498,7 +498,7 @@ inline void rtw_set_ips_deny23a(struct rtw_adapter *padapter, u32 ms) /* * rtw_pwr_wakeup - Wake the NIC up from: 1)IPS. 2)USB autosuspend * @adapter: pointer to _adapter structure -* @ips_deffer_ms: the ms wiil prevent from falling into IPS after wakeup +* @ips_deffer_ms: the ms will prevent from falling into IPS after wakeup * Return _SUCCESS or _FAIL */ diff --git a/drivers/staging/rtl8723au/core/rtw_recv.c b/drivers/staging/rtl8723au/core/rtw_recv.c index 690970efc22f..a9f8183349ab 100644 --- a/drivers/staging/rtl8723au/core/rtw_recv.c +++ b/drivers/staging/rtl8723au/core/rtw_recv.c @@ -1185,7 +1185,7 @@ static int validate_recv_ctrl_frame(struct rtw_adapter *padapter, /* DBG_8723A("after handling ps-poll, tim =%x\n", pstapriv->tim_bitmap); */ - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ /* update_BCNTIM(padapter); */ update_beacon23a(padapter, WLAN_EID_TIM, NULL, false); @@ -1217,7 +1217,7 @@ static int validate_recv_ctrl_frame(struct rtw_adapter *padapter, pstapriv->tim_bitmap &= ~CHKBIT(psta->aid); - /* upate BCN for TIM IE */ + /* update BCN for TIM IE */ /* update_BCNTIM(padapter); */ update_beacon23a(padapter, WLAN_EID_TIM, NULL, false); @@ -2363,7 +2363,7 @@ void rtw_signal_stat_timer_hdl23a(unsigned long data) recvpriv->signal_strength_data.avg_val; num_signal_strength = recvpriv->signal_strength_data.total_num; - /* after avg_vals are accquired, we can re-stat */ + /* after avg_vals are acquired, we can re-stat */ /* the signal values */ recvpriv->signal_strength_data.update_req = 1; } @@ -2372,7 +2372,7 @@ void rtw_signal_stat_timer_hdl23a(unsigned long data) /* update_req is clear, means we got rx */ avg_signal_qual = recvpriv->signal_qual_data.avg_val; num_signal_qual = recvpriv->signal_qual_data.total_num; - /* after avg_vals are accquired, we can re-stat */ + /* after avg_vals are acquired, we can re-stat */ /*the signal values */ recvpriv->signal_qual_data.update_req = 1; } -- cgit From 19f6634f41ff515082c26ba51280fbcb156de920 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 22 Jul 2014 09:56:25 -0400 Subject: staging: unisys: add toolaction to sysfs Move the proc entry for controlling the toolaction field to sysfs. The field appears in /sys/devices/platform/visorchipset/install/toolaction. This field is used to tell s-Par which type of recovery tool action to perform on the next guest boot-up. The meaning of the value is dependent on the type of installation software used to commission the guest. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 142 ++++++++------------- 1 file changed, 51 insertions(+), 91 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index a16d67ec9cef..a0d34ebdf823 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -149,11 +149,6 @@ static ssize_t proc_read_installer(struct file *file, char __user *buf, static ssize_t proc_write_installer(struct file *file, const char __user *buffer, size_t count, loff_t *ppos); -static ssize_t proc_read_toolaction(struct file *file, char __user *buf, - size_t len, loff_t *offset); -static ssize_t proc_write_toolaction(struct file *file, - const char __user *buffer, - size_t count, loff_t *ppos); static ssize_t proc_read_bootToTool(struct file *file, char __user *buf, size_t len, loff_t *offset); static ssize_t proc_write_bootToTool(struct file *file, @@ -164,11 +159,6 @@ static const struct file_operations proc_installer_fops = { .write = proc_write_installer, }; -static const struct file_operations proc_toolaction_fops = { - .read = proc_read_toolaction, - .write = proc_write_toolaction, -}; - static const struct file_operations proc_bootToTool_fops = { .read = proc_read_bootToTool, .write = proc_write_bootToTool, @@ -321,10 +311,33 @@ static VISORCHIPSET_BUSDEV_RESPONDERS BusDev_Responders = { /* info for /dev/visorchipset */ static dev_t MajorDev = -1; /**< indicates major num for device */ +/* prototypes for attributes */ +static ssize_t toolaction_show(struct device *dev, + struct device_attribute *attr, char *buf); +static ssize_t toolaction_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_RW(toolaction); + +static struct attribute *visorchipset_install_attrs[] = { + &dev_attr_toolaction.attr, + NULL +}; + +static struct attribute_group visorchipset_install_group = { + .name = "install", + .attrs = visorchipset_install_attrs +}; + +static const struct attribute_group *visorchipset_dev_groups[] = { + &visorchipset_install_group, + NULL +}; + /* /sys/devices/platform/visorchipset */ static struct platform_device Visorchipset_platform_device = { .name = "visorchipset", .id = -1, + .dev.groups = visorchipset_dev_groups, }; /* Function prototypes */ @@ -336,6 +349,34 @@ static void controlvm_respond_physdev_changestate(CONTROLVM_MESSAGE_HEADER * msgHdr, int response, ULTRA_SEGMENT_STATE state); +ssize_t toolaction_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + U8 toolAction; + + visorchannel_read(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + ToolAction), &toolAction, sizeof(U8)); + return scnprintf(buf, PAGE_SIZE, "%u\n", toolAction); +} + +ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + U8 toolAction; + + if (sscanf(buf, "%hhu\n", &toolAction) == 1) { + if (visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + ToolAction), + &toolAction, sizeof(U8)) < 0) + return -EFAULT; + else + return count; + } else + return -EIO; +} + static void show_partition_property(struct seq_file *f, void *ctx, int property) { @@ -2367,83 +2408,6 @@ proc_write_installer(struct file *file, return count; } -/** - * Reads the ToolAction field of ControlVMChannel. - */ -static ssize_t -proc_read_toolaction(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - int length = 0; - U8 toolAction; - char *vbuf; - loff_t pos = *offset; - - if (pos < 0) - return -EINVAL; - - if (pos > 0 || !len) - return 0; - - vbuf = kzalloc(len, GFP_KERNEL); - if (!vbuf) - return -ENOMEM; - - visorchannel_read(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - ToolAction), &toolAction, sizeof(U8)); - - length = sprintf(vbuf, "%u\n", toolAction); - if (copy_to_user(buf, vbuf, length)) { - kfree(vbuf); - return -EFAULT; - } - - kfree(vbuf); - *offset += length; - return length; -} - -/** - * Writes to the ToolAction field of ControlVMChannel. - * Input: ToolAction - * Limit 3 characters input - */ -#define UINT8_MAX (255U) -static ssize_t -proc_write_toolaction(struct file *file, - const char __user *buffer, size_t count, loff_t *ppos) -{ - char buf[3]; - U8 toolAction; - - /* Check to make sure there is no buffer overflow */ - if (count > (sizeof(buf) - 1)) - return -EINVAL; - - if (copy_from_user(buf, buffer, count)) { - WARN(1, "Error copying from user space\n"); - return -EFAULT; - } - - if (sscanf(buf, "%hhd", &toolAction) != 1) - toolAction = UINT8_MAX; - - if (toolAction != UINT8_MAX) { - if (visorchannel_write - (ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, ToolAction), - &toolAction, sizeof(U8)) < 0) - WARN(1, "Installation ToolAction Write Failed - ToolAction = %d\n", - toolAction); - } - - /* So this function isn't called multiple times, must return - * size of buffer - */ - return count; -} - /** * Reads the EfiSparIndication.BootToTool field of ControlVMChannel. */ @@ -2534,7 +2498,6 @@ visorchipset_init(void) int rc = 0, x = 0; char s[64]; struct proc_dir_entry *installer_file; - struct proc_dir_entry *toolaction_file; struct proc_dir_entry *bootToTool_file; HOSTADDRESS addr; @@ -2612,9 +2575,6 @@ visorchipset_init(void) /* Setup Installation fields */ installer_file = proc_create("installer", 0644, ProcDir, &proc_installer_fops); - /* Setup the ToolAction field */ - toolaction_file = proc_create("toolaction", 0644, ProcDir, - &proc_toolaction_fops); /* Setup the BootToTool field */ bootToTool_file = proc_create("boottotool", 0644, ProcDir, &proc_bootToTool_fops); -- cgit From 54b312290077f56a1c2dfb15237e1b315667d225 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 22 Jul 2014 09:56:26 -0400 Subject: staging: unisys: move boottotool out of proc to sysfs Move the proc entry controlling the boottotool flag to procfs. The field appears in /sys/devices/platform/visorchipset/install/boottotool. The boottotool flag controls s-Par behavior on the next boot of this guest. Setting the flag will cause the guest to boot from the utility and installation image, which will use the value in the toolaction field to determine what operation is being requested. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 132 +++++++-------------- 1 file changed, 40 insertions(+), 92 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index a0d34ebdf823..48db6eec257d 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -149,21 +149,12 @@ static ssize_t proc_read_installer(struct file *file, char __user *buf, static ssize_t proc_write_installer(struct file *file, const char __user *buffer, size_t count, loff_t *ppos); -static ssize_t proc_read_bootToTool(struct file *file, char __user *buf, - size_t len, loff_t *offset); -static ssize_t proc_write_bootToTool(struct file *file, - const char __user *buffer, - size_t count, loff_t *ppos); + static const struct file_operations proc_installer_fops = { .read = proc_read_installer, .write = proc_write_installer, }; -static const struct file_operations proc_bootToTool_fops = { - .read = proc_read_bootToTool, - .write = proc_write_bootToTool, -}; - typedef struct { U8 __iomem *ptr; /* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm @@ -318,8 +309,15 @@ static ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static DEVICE_ATTR_RW(toolaction); +static ssize_t boottotool_show(struct device *dev, + struct device_attribute *attr, char *buf); +static ssize_t boottotool_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_RW(boottotool); + static struct attribute *visorchipset_install_attrs[] = { &dev_attr_toolaction.attr, + &dev_attr_boottotool.attr, NULL }; @@ -377,6 +375,38 @@ ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, return -EIO; } +ssize_t boottotool_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + ULTRA_EFI_SPAR_INDICATION efiSparIndication; + + visorchannel_read(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + EfiSparIndication), &efiSparIndication, + sizeof(ULTRA_EFI_SPAR_INDICATION)); + return scnprintf(buf, PAGE_SIZE, "%u\n", + efiSparIndication.BootToTool); +} + +ssize_t boottotool_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + int val; + ULTRA_EFI_SPAR_INDICATION efiSparIndication; + + if (sscanf(buf, "%u\n", &val) == 1) { + efiSparIndication.BootToTool = val; + if (visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + EfiSparIndication), + &(efiSparIndication), + sizeof(ULTRA_EFI_SPAR_INDICATION)) < 0) + return -EFAULT; + else + return count; + } else + return -EIO; +} static void show_partition_property(struct seq_file *f, void *ctx, int property) { @@ -2408,84 +2438,6 @@ proc_write_installer(struct file *file, return count; } -/** - * Reads the EfiSparIndication.BootToTool field of ControlVMChannel. - */ -static ssize_t -proc_read_bootToTool(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - int length = 0; - ULTRA_EFI_SPAR_INDICATION efiSparIndication; - char *vbuf; - loff_t pos = *offset; - - if (pos < 0) - return -EINVAL; - - if (pos > 0 || !len) - return 0; - - vbuf = kzalloc(len, GFP_KERNEL); - if (!vbuf) - return -ENOMEM; - - visorchannel_read(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - EfiSparIndication), &efiSparIndication, - sizeof(ULTRA_EFI_SPAR_INDICATION)); - - length = sprintf(vbuf, "%d\n", (int) efiSparIndication.BootToTool); - if (copy_to_user(buf, vbuf, length)) { - kfree(vbuf); - return -EFAULT; - } - - kfree(vbuf); - *offset += length; - return length; -} - -/** - * Writes to the EfiSparIndication.BootToTool field of ControlVMChannel. - * Input: 1 or 0 (1 being on, 0 being off) - */ -static ssize_t -proc_write_bootToTool(struct file *file, - const char __user *buffer, size_t count, loff_t *ppos) -{ - char buf[3]; - int inputVal; - ULTRA_EFI_SPAR_INDICATION efiSparIndication; - - /* Check to make sure there is no buffer overflow */ - if (count > (sizeof(buf) - 1)) - return -EINVAL; - - if (copy_from_user(buf, buffer, count)) { - WARN(1, "Error copying from user space\n"); - return -EFAULT; - } - - if (sscanf(buf, "%i", &inputVal) != 1) - inputVal = 0; - - efiSparIndication.BootToTool = (inputVal == 1 ? 1 : 0); - - if (visorchannel_write - (ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, EfiSparIndication), - &efiSparIndication, sizeof(ULTRA_EFI_SPAR_INDICATION)) < 0) - printk - ("Installation BootToTool Write Failed - BootToTool = %d\n", - (int) efiSparIndication.BootToTool); - - /* So this function isn't called multiple times, must return - * size of buffer - */ - return count; -} - static const struct file_operations chipset_proc_fops = { .owner = THIS_MODULE, .read = visorchipset_proc_read_writeonly, @@ -2498,7 +2450,6 @@ visorchipset_init(void) int rc = 0, x = 0; char s[64]; struct proc_dir_entry *installer_file; - struct proc_dir_entry *bootToTool_file; HOSTADDRESS addr; if (!unisys_spar_platform) @@ -2575,9 +2526,6 @@ visorchipset_init(void) /* Setup Installation fields */ installer_file = proc_create("installer", 0644, ProcDir, &proc_installer_fops); - /* Setup the BootToTool field */ - bootToTool_file = proc_create("boottotool", 0644, ProcDir, - &proc_bootToTool_fops); memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); -- cgit From cfe4571f72270b6b31fbf38000f5b3d6299a22d5 Mon Sep 17 00:00:00 2001 From: Erik Arfvidson Date: Tue, 22 Jul 2014 10:50:23 -0400 Subject: staging: unisys: fix and remove virthba comments This patch fixes formatting and cleans up unneeded comments Signed-off-by: Erik Arfvidson Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/virthba/virthba.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 65a75c8e8b06..ef7242ee7ad3 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -1449,7 +1449,7 @@ static ssize_t enable_ints_write(struct file *file, return -EFAULT; } - /*set all counts to new_value usually 0*/ + /* set all counts to new_value usually 0 */ for (i = 0; i < VIRTHBASOPENMAX; i++) { if (VirtHbasOpen[i].virthbainfo != NULL) { virthbainfo = VirtHbasOpen[i].virthbainfo; @@ -1747,7 +1747,6 @@ virthba_mod_exit(void) virthba_serverdown_workqueue = NULL; } - /* remove debugfs directory and files. */ debugfs_remove_recursive(virthba_debugfs_dir); LOGINF("Leaving virthba_mod_exit\n"); -- cgit From f0ff3fde52bb70c3130c34e530d5462a240ae52c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:43 +0100 Subject: staging: vt6656: vnt_tx_fifo_head rename wFIFOCtl to fifo_ctl Removing prefix and camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 24 ++++++++++++------------ drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 4fc93f0b39dc..7a7b6cbf40de 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -828,18 +828,18 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) /*Set fifo controls */ if (pkt_type == PK_TYPE_11A) - tx_buffer_head->wFIFOCtl = 0; + tx_buffer_head->fifo_ctl = 0; else if (pkt_type == PK_TYPE_11B) - tx_buffer_head->wFIFOCtl = FIFOCTL_11B; + tx_buffer_head->fifo_ctl = FIFOCTL_11B; else if (pkt_type == PK_TYPE_11GB) - tx_buffer_head->wFIFOCtl = FIFOCTL_11GB; + tx_buffer_head->fifo_ctl = FIFOCTL_11GB; else if (pkt_type == PK_TYPE_11GA) - tx_buffer_head->wFIFOCtl = FIFOCTL_11GA; + tx_buffer_head->fifo_ctl = FIFOCTL_11GA; if (!ieee80211_is_data(hdr->frame_control)) { - tx_buffer_head->wFIFOCtl |= (FIFOCTL_GENINT | + tx_buffer_head->fifo_ctl |= (FIFOCTL_GENINT | FIFOCTL_ISDMA0); - tx_buffer_head->wFIFOCtl |= FIFOCTL_TMOEN; + tx_buffer_head->fifo_ctl |= FIFOCTL_TMOEN; tx_buffer_head->time_stamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); @@ -849,12 +849,12 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) } if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { - tx_buffer_head->wFIFOCtl |= FIFOCTL_NEEDACK; + tx_buffer_head->fifo_ctl |= FIFOCTL_NEEDACK; tx_context->need_ack = true; } if (ieee80211_has_retry(hdr->frame_control)) - tx_buffer_head->wFIFOCtl |= FIFOCTL_LRETRY; + tx_buffer_head->fifo_ctl |= FIFOCTL_LRETRY; if (tx_rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) priv->preamble_type = PREAMBLE_SHORT; @@ -863,11 +863,11 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (tx_rate->flags & IEEE80211_TX_RC_USE_RTS_CTS) { need_rts = true; - tx_buffer_head->wFIFOCtl |= FIFOCTL_RTS; + tx_buffer_head->fifo_ctl |= FIFOCTL_RTS; } if (ieee80211_has_a4(hdr->frame_control)) - tx_buffer_head->wFIFOCtl |= FIFOCTL_LHEAD; + tx_buffer_head->fifo_ctl |= FIFOCTL_LHEAD; if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) is_pspoll = true; @@ -899,7 +899,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) /* legacy rates TODO use ieee80211_tx_rate */ if (current_rate >= RATE_18M && ieee80211_is_data(hdr->frame_control)) { if (priv->auto_fb_ctrl == AUTO_FB_0) { - tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_0; + tx_buffer_head->fifo_ctl |= FIFOCTL_AUTO_FB_0; priv->tx_rate_fb0 = vnt_fb_opt0[FB_RATE0][current_rate - RATE_18M]; @@ -908,7 +908,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) fb_option = AUTO_FB_0; } else if (priv->auto_fb_ctrl == AUTO_FB_1) { - tx_buffer_head->wFIFOCtl |= FIFOCTL_AUTO_FB_1; + tx_buffer_head->fifo_ctl |= FIFOCTL_AUTO_FB_1; priv->tx_rate_fb0 = vnt_fb_opt1[FB_RATE0][current_rate - RATE_18M]; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 1cfa5aeddad4..62a9ed38f058 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -222,7 +222,7 @@ union vnt_tx_head { struct vnt_tx_fifo_head { u8 tx_key[WLAN_KEY_LEN_CCMP]; - u16 wFIFOCtl; + u16 fifo_ctl; __le16 time_stamp; __le16 frag_ctl; __le16 current_rate; -- cgit From d0335a036365173dae5198c6909caf35e178a9a2 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:44 +0100 Subject: staging: vt6656: struct vnt_tx_buffer replace byPKTNO with pkt_no Replacing camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7a7b6cbf40de..7834128f9b21 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -949,7 +949,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) IEEE80211_SCTL_SEQ) >> 4; tx_buffer->tx_byte_count = cpu_to_le16(tx_bytes); - tx_buffer->byPKTNO = tx_context->pkt_no; + tx_buffer->pkt_no = tx_context->pkt_no; tx_buffer->byType = 0x00; tx_bytes += 4; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 62a9ed38f058..dee2bdf05471 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -230,7 +230,7 @@ struct vnt_tx_fifo_head { struct vnt_tx_buffer { u8 byType; - u8 byPKTNO; + u8 pkt_no; __le16 tx_byte_count; struct vnt_tx_fifo_head fifo_head; union vnt_tx_head tx_head; -- cgit From af90ab396cc96d850a4cfab4c86363ac7882552b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:45 +0100 Subject: staging: vt6656: struct vnt_beacon_buffer replace byPKTNO with pkt_no removing camel case. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 7834128f9b21..8e33e406dfe8 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -1045,7 +1045,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, count = sizeof(struct vnt_tx_short_buf_head) + skb->len; beacon_buffer->tx_byte_count = cpu_to_le16(count); - beacon_buffer->byPKTNO = context->pkt_no; + beacon_buffer->pkt_no = context->pkt_no; beacon_buffer->byType = 0x01; context->type = CONTEXT_BEACON_PACKET; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index dee2bdf05471..5439ed096864 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -246,7 +246,7 @@ struct vnt_tx_short_buf_head { struct vnt_beacon_buffer { u8 byType; - u8 byPKTNO; + u8 pkt_no; __le16 tx_byte_count; struct vnt_tx_short_buf_head short_head; struct ieee80211_mgmt mgmt_hdr; -- cgit From c8a3a4c0a214a586f337b02ee5765f51071a213e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:46 +0100 Subject: staging: vt6656: vnt_tx_buffer replace byType with type Removing camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 8e33e406dfe8..5a7114dd6d1c 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -950,7 +950,7 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) tx_buffer->tx_byte_count = cpu_to_le16(tx_bytes); tx_buffer->pkt_no = tx_context->pkt_no; - tx_buffer->byType = 0x00; + tx_buffer->type = 0x00; tx_bytes += 4; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 5439ed096864..808058f29686 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -229,7 +229,7 @@ struct vnt_tx_fifo_head { } __packed; struct vnt_tx_buffer { - u8 byType; + u8 type; u8 pkt_no; __le16 tx_byte_count; struct vnt_tx_fifo_head fifo_head; -- cgit From 1e00b449fa522820b4708f45a9027117b47e43b3 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:47 +0100 Subject: staging: vt6656: struct vnt_beacon_buffer replace byType with type Removing camel case Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 5a7114dd6d1c..2dc7a17ff216 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -1046,7 +1046,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, beacon_buffer->tx_byte_count = cpu_to_le16(count); beacon_buffer->pkt_no = context->pkt_no; - beacon_buffer->byType = 0x01; + beacon_buffer->type = 0x01; context->type = CONTEXT_BEACON_PACKET; context->buf_len = count + 4; /* USB header */ diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 808058f29686..d5769c18b692 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -245,7 +245,7 @@ struct vnt_tx_short_buf_head { } __packed; struct vnt_beacon_buffer { - u8 byType; + u8 type; u8 pkt_no; __le16 tx_byte_count; struct vnt_tx_short_buf_head short_head; -- cgit From 47e0889452dc5f5fa7bef6cca065d402dc1bf69a Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:48 +0100 Subject: staging: vt6656: struct vnt_tx_fifo_head fifo_ctl change base type to __le16 Endian is always little add correction in vnt_tx_packet. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 26 ++++++++++++++------------ drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 2dc7a17ff216..64ec206b3c7d 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -830,16 +830,16 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (pkt_type == PK_TYPE_11A) tx_buffer_head->fifo_ctl = 0; else if (pkt_type == PK_TYPE_11B) - tx_buffer_head->fifo_ctl = FIFOCTL_11B; + tx_buffer_head->fifo_ctl = cpu_to_le16(FIFOCTL_11B); else if (pkt_type == PK_TYPE_11GB) - tx_buffer_head->fifo_ctl = FIFOCTL_11GB; + tx_buffer_head->fifo_ctl = cpu_to_le16(FIFOCTL_11GB); else if (pkt_type == PK_TYPE_11GA) - tx_buffer_head->fifo_ctl = FIFOCTL_11GA; + tx_buffer_head->fifo_ctl = cpu_to_le16(FIFOCTL_11GA); if (!ieee80211_is_data(hdr->frame_control)) { - tx_buffer_head->fifo_ctl |= (FIFOCTL_GENINT | - FIFOCTL_ISDMA0); - tx_buffer_head->fifo_ctl |= FIFOCTL_TMOEN; + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_GENINT | + FIFOCTL_ISDMA0); + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_TMOEN); tx_buffer_head->time_stamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us); @@ -849,12 +849,12 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) } if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) { - tx_buffer_head->fifo_ctl |= FIFOCTL_NEEDACK; + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_NEEDACK); tx_context->need_ack = true; } if (ieee80211_has_retry(hdr->frame_control)) - tx_buffer_head->fifo_ctl |= FIFOCTL_LRETRY; + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_LRETRY); if (tx_rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) priv->preamble_type = PREAMBLE_SHORT; @@ -863,11 +863,11 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) if (tx_rate->flags & IEEE80211_TX_RC_USE_RTS_CTS) { need_rts = true; - tx_buffer_head->fifo_ctl |= FIFOCTL_RTS; + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_RTS); } if (ieee80211_has_a4(hdr->frame_control)) - tx_buffer_head->fifo_ctl |= FIFOCTL_LHEAD; + tx_buffer_head->fifo_ctl |= cpu_to_le16(FIFOCTL_LHEAD); if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) is_pspoll = true; @@ -899,7 +899,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) /* legacy rates TODO use ieee80211_tx_rate */ if (current_rate >= RATE_18M && ieee80211_is_data(hdr->frame_control)) { if (priv->auto_fb_ctrl == AUTO_FB_0) { - tx_buffer_head->fifo_ctl |= FIFOCTL_AUTO_FB_0; + tx_buffer_head->fifo_ctl |= + cpu_to_le16(FIFOCTL_AUTO_FB_0); priv->tx_rate_fb0 = vnt_fb_opt0[FB_RATE0][current_rate - RATE_18M]; @@ -908,7 +909,8 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) fb_option = AUTO_FB_0; } else if (priv->auto_fb_ctrl == AUTO_FB_1) { - tx_buffer_head->fifo_ctl |= FIFOCTL_AUTO_FB_1; + tx_buffer_head->fifo_ctl |= + cpu_to_le16(FIFOCTL_AUTO_FB_1); priv->tx_rate_fb0 = vnt_fb_opt1[FB_RATE0][current_rate - RATE_18M]; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index d5769c18b692..3f0ff7abceee 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -222,7 +222,7 @@ union vnt_tx_head { struct vnt_tx_fifo_head { u8 tx_key[WLAN_KEY_LEN_CCMP]; - u16 fifo_ctl; + __le16 fifo_ctl; __le16 time_stamp; __le16 frag_ctl; __le16 current_rate; -- cgit From 14fb6ce8de3c2d9c393debe86fb69a521de840e4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Tue, 22 Jul 2014 22:49:49 +0100 Subject: staging: vt6656: struct vnt_tx_short_buf_head change base type of fifo_ctl to __le16 Base type is always little endian. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rxtx.c | 2 +- drivers/staging/vt6656/rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 64ec206b3c7d..2d1ef88808ff 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -1013,7 +1013,7 @@ static int vnt_beacon_xmit(struct vnt_private *priv, vnt_time_stamp_off(priv, current_rate); } else { current_rate = RATE_1M; - short_head->fifo_ctl |= FIFOCTL_11B; + short_head->fifo_ctl |= cpu_to_le16(FIFOCTL_11B); /* Get SignalField,ServiceField,Length */ vnt_get_phy_field(priv, frame_size, current_rate, diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 3f0ff7abceee..90b34ab2f6ce 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -237,7 +237,7 @@ struct vnt_tx_buffer { } __packed; struct vnt_tx_short_buf_head { - u16 fifo_ctl; + __le16 fifo_ctl; u16 time_stamp; struct vnt_phy_field ab; __le16 duration; -- cgit From f326a525061150bf1ca85517eda422bde2245f26 Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 22 Jul 2014 16:00:00 +0100 Subject: staging:iio:hmc5843: Added regmap support This patch changes hmc5843.c to use regmap. This provides transparent caching to the code as well as abstraction necessary to add support for SPI-based hmc5983. Signed-off-by: Josef Gajdusek Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/Kconfig | 1 + drivers/staging/iio/magnetometer/hmc5843.c | 140 +++++++++++++++++++---------- 2 files changed, 96 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/Kconfig b/drivers/staging/iio/magnetometer/Kconfig index 34634da1f9f7..ad88d615b642 100644 --- a/drivers/staging/iio/magnetometer/Kconfig +++ b/drivers/staging/iio/magnetometer/Kconfig @@ -8,6 +8,7 @@ config SENSORS_HMC5843 depends on I2C select IIO_BUFFER select IIO_TRIGGERED_BUFFER + select REGMAP_I2C help Say Y here to add support for the Honeywell HMC5843, HMC5883 and HMC5883L 3-Axis Magnetometer (digital compass). diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c index f595fdcc79b0..6f06f98a5260 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ b/drivers/staging/iio/magnetometer/hmc5843.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -34,6 +35,7 @@ #define HMC5843_DATA_OUT_MSB_REGS 0x03 #define HMC5843_STATUS_REG 0x09 #define HMC5843_ID_REG 0x0a +#define HMC5843_ID_END 0x0c enum hmc5843_ids { HMC5843_ID, @@ -49,6 +51,7 @@ enum hmc5843_ids { #define HMC5843_RANGE_GAIN_OFFSET 0x05 #define HMC5843_RANGE_GAIN_DEFAULT 0x01 #define HMC5843_RANGE_GAINS 8 +#define HMC5843_RANGE_GAIN_MASK 0xe0 /* Device status */ #define HMC5843_DATA_READY 0x01 @@ -68,6 +71,7 @@ enum hmc5843_ids { #define HMC5843_RATE_OFFSET 0x02 #define HMC5843_RATE_DEFAULT 0x04 #define HMC5843_RATES 7 +#define HMC5843_RATE_MASK 0x1c /* Device measurement configuration */ #define HMC5843_MEAS_CONF_NORMAL 0x00 @@ -121,10 +125,7 @@ struct hmc5843_chip_info { struct hmc5843_data { struct i2c_client *client; struct mutex lock; - u8 rate; - u8 meas_conf; - u8 operating_mode; - u8 range; + struct regmap *regmap; const struct hmc5843_chip_info *variant; __be16 buffer[8]; /* 3x 16-bit channels + padding + 64-bit timestamp */ }; @@ -135,10 +136,8 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 operating_mode) int ret; mutex_lock(&data->lock); - ret = i2c_smbus_write_byte_data(data->client, HMC5843_MODE_REG, - operating_mode & HMC5843_MODE_MASK); - if (ret >= 0) - data->operating_mode = operating_mode; + ret = regmap_update_bits(data->regmap, HMC5843_MODE_REG, + HMC5843_MODE_MASK, operating_mode); mutex_unlock(&data->lock); return ret; @@ -146,15 +145,15 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 operating_mode) static int hmc5843_wait_measurement(struct hmc5843_data *data) { - s32 result; int tries = 150; + int val; + int ret; while (tries-- > 0) { - result = i2c_smbus_read_byte_data(data->client, - HMC5843_STATUS_REG); - if (result < 0) - return result; - if (result & HMC5843_DATA_READY) + ret = regmap_read(data->regmap, HMC5843_STATUS_REG, &val); + if (ret < 0) + return ret; + if (val & HMC5843_DATA_READY) break; msleep(20); } @@ -171,20 +170,20 @@ static int hmc5843_wait_measurement(struct hmc5843_data *data) static int hmc5843_read_measurement(struct hmc5843_data *data, int idx, int *val) { - s32 result; __be16 values[3]; + int ret; mutex_lock(&data->lock); - result = hmc5843_wait_measurement(data); - if (result < 0) { + ret = hmc5843_wait_measurement(data); + if (ret < 0) { mutex_unlock(&data->lock); - return result; + return ret; } - result = i2c_smbus_read_i2c_block_data(data->client, - HMC5843_DATA_OUT_MSB_REGS, sizeof(values), (u8 *) values); + ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, + values, sizeof(values)); mutex_unlock(&data->lock); - if (result < 0) - return -EINVAL; + if (ret < 0) + return ret; *val = sign_extend32(be16_to_cpu(values[idx]), 15); return IIO_VAL_INT; @@ -208,16 +207,13 @@ static int hmc5843_read_measurement(struct hmc5843_data *data, * and BN. * */ -static s32 hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf) +static int hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf) { int ret; mutex_lock(&data->lock); - ret = i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A, - (meas_conf & HMC5843_MEAS_CONF_MASK) | - (data->rate << HMC5843_RATE_OFFSET)); - if (ret >= 0) - data->meas_conf = meas_conf; + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, + HMC5843_MEAS_CONF_MASK, meas_conf); mutex_unlock(&data->lock); return ret; @@ -228,7 +224,15 @@ static ssize_t hmc5843_show_measurement_configuration(struct device *dev, char *buf) { struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); - return sprintf(buf, "%d\n", data->meas_conf); + int val; + int ret; + + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &val); + if (ret) + return ret; + val &= HMC5843_MEAS_CONF_MASK; + + return sprintf(buf, "%d\n", val); } static ssize_t hmc5843_set_measurement_configuration(struct device *dev, @@ -282,10 +286,8 @@ static int hmc5843_set_samp_freq(struct hmc5843_data *data, u8 rate) int ret; mutex_lock(&data->lock); - ret = i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A, - data->meas_conf | (rate << HMC5843_RATE_OFFSET)); - if (ret >= 0) - data->rate = rate; + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, + HMC5843_RATE_MASK, rate << HMC5843_RATE_OFFSET); mutex_unlock(&data->lock); return ret; @@ -309,10 +311,9 @@ static int hmc5843_set_range_gain(struct hmc5843_data *data, u8 range) int ret; mutex_lock(&data->lock); - ret = i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_B, - range << HMC5843_RANGE_GAIN_OFFSET); - if (ret >= 0) - data->range = range; + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_B, + HMC5843_RANGE_GAIN_MASK, + range << HMC5843_RANGE_GAIN_OFFSET); mutex_unlock(&data->lock); return ret; @@ -358,17 +359,27 @@ static int hmc5843_read_raw(struct iio_dev *indio_dev, int *val, int *val2, long mask) { struct hmc5843_data *data = iio_priv(indio_dev); + int rval; + int ret; switch (mask) { case IIO_CHAN_INFO_RAW: return hmc5843_read_measurement(data, chan->scan_index, val); case IIO_CHAN_INFO_SCALE: + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval); + if (ret < 0) + return ret; + rval >>= HMC5843_RANGE_GAIN_OFFSET; *val = 0; - *val2 = data->variant->regval_to_nanoscale[data->range]; + *val2 = data->variant->regval_to_nanoscale[rval]; return IIO_VAL_INT_PLUS_NANO; case IIO_CHAN_INFO_SAMP_FREQ: - *val = data->variant->regval_to_samp_freq[data->rate][0]; - *val2 = data->variant->regval_to_samp_freq[data->rate][1]; + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval); + if (ret < 0) + return ret; + rval >>= HMC5843_RATE_OFFSET; + *val = data->variant->regval_to_samp_freq[rval][0]; + *val2 = data->variant->regval_to_samp_freq[rval][1]; return IIO_VAL_INT_PLUS_MICRO; } return -EINVAL; @@ -426,9 +437,9 @@ static irqreturn_t hmc5843_trigger_handler(int irq, void *p) goto done; } - ret = i2c_smbus_read_i2c_block_data(data->client, - HMC5843_DATA_OUT_MSB_REGS, 3 * sizeof(__be16), - (u8 *) data->buffer); + ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, + data->buffer, 3 * sizeof(__be16)); + mutex_unlock(&data->lock); if (ret < 0) goto done; @@ -508,8 +519,8 @@ static int hmc5843_init(struct hmc5843_data *data) int ret; u8 id[3]; - ret = i2c_smbus_read_i2c_block_data(data->client, HMC5843_ID_REG, - sizeof(id), id); + ret = regmap_bulk_read(data->regmap, HMC5843_ID_REG, + id, ARRAY_SIZE(id)); if (ret < 0) return ret; if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { @@ -539,6 +550,44 @@ static const struct iio_info hmc5843_info = { static const unsigned long hmc5843_scan_masks[] = {0x7, 0}; +static const struct regmap_range hmc5843_readable_ranges[] = { + regmap_reg_range(0, HMC5843_ID_END), +}; + +static struct regmap_access_table hmc5843_readable_table = { + .yes_ranges = hmc5843_readable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), +}; + +static const struct regmap_range hmc5843_writable_ranges[] = { + regmap_reg_range(0, HMC5843_MODE_REG), +}; + +static struct regmap_access_table hmc5843_writable_table = { + .yes_ranges = hmc5843_writable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), +}; + +static const struct regmap_range hmc5843_volatile_ranges[] = { + regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), +}; + +static struct regmap_access_table hmc5843_volatile_table = { + .yes_ranges = hmc5843_volatile_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), +}; + +static struct regmap_config hmc5843_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + + .rd_table = &hmc5843_readable_table, + .wr_table = &hmc5843_writable_table, + .volatile_table = &hmc5843_volatile_table, + + .cache_type = REGCACHE_RBTREE, +}; + static int hmc5843_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -554,6 +603,7 @@ static int hmc5843_probe(struct i2c_client *client, data = iio_priv(indio_dev); data->client = client; data->variant = &hmc5843_chip_info_tbl[id->driver_data]; + data->regmap = devm_regmap_init_i2c(client, &hmc5843_regmap_config); mutex_init(&data->lock); i2c_set_clientdata(client, indio_dev); -- cgit From fc35a91b2e348d7aa2de177812e2e78c5276b338 Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 22 Jul 2014 16:01:00 +0100 Subject: staging:iio:hmc5843: Split hmc5843.c to multiple files This patch splits hmc5843.c to multiple files - the interface-agnostic hmc5843_core.c, i2c specific hmc5843_i2c.c and header file hmc5843.h. This is another step to add support of SPI-enabled hmc5983. Signed-off-by: Josef Gajdusek Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/Kconfig | 14 +- drivers/staging/iio/magnetometer/Makefile | 3 +- drivers/staging/iio/magnetometer/hmc5843.c | 704 ------------------------ drivers/staging/iio/magnetometer/hmc5843.h | 58 ++ drivers/staging/iio/magnetometer/hmc5843_core.c | 612 ++++++++++++++++++++ drivers/staging/iio/magnetometer/hmc5843_i2c.c | 102 ++++ 6 files changed, 784 insertions(+), 709 deletions(-) delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/Kconfig b/drivers/staging/iio/magnetometer/Kconfig index ad88d615b642..0a27f987c201 100644 --- a/drivers/staging/iio/magnetometer/Kconfig +++ b/drivers/staging/iio/magnetometer/Kconfig @@ -4,16 +4,22 @@ menu "Magnetometer sensors" config SENSORS_HMC5843 - tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer" - depends on I2C + tristate select IIO_BUFFER select IIO_TRIGGERED_BUFFER + +config SENSORS_HMC5843_I2C + tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer (I2C)" + depends on I2C + select SENSORS_HMC5843 select REGMAP_I2C help Say Y here to add support for the Honeywell HMC5843, HMC5883 and HMC5883L 3-Axis Magnetometer (digital compass). - To compile this driver as a module, choose M here: the module - will be called hmc5843. + This driver can also be compiled as a set of modules. + If so, these modules will be created: + - hmc5843_core (core functions) + - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L) endmenu diff --git a/drivers/staging/iio/magnetometer/Makefile b/drivers/staging/iio/magnetometer/Makefile index f9bfb2e11d7d..65baf1c4da42 100644 --- a/drivers/staging/iio/magnetometer/Makefile +++ b/drivers/staging/iio/magnetometer/Makefile @@ -2,4 +2,5 @@ # Makefile for industrial I/O Magnetometer sensors # -obj-$(CONFIG_SENSORS_HMC5843) += hmc5843.o +obj-$(CONFIG_SENSORS_HMC5843) += hmc5843_core.o +obj-$(CONFIG_SENSORS_HMC5843_I2C) += hmc5843_i2c.o diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c deleted file mode 100644 index 6f06f98a5260..000000000000 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ /dev/null @@ -1,704 +0,0 @@ -/* Copyright (C) 2010 Texas Instruments - Author: Shubhrajyoti Datta - Acknowledgement: Jonathan Cameron for valuable inputs. - - Support for HMC5883 and HMC5883L by Peter Meerwald . - - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#define HMC5843_CONFIG_REG_A 0x00 -#define HMC5843_CONFIG_REG_B 0x01 -#define HMC5843_MODE_REG 0x02 -#define HMC5843_DATA_OUT_MSB_REGS 0x03 -#define HMC5843_STATUS_REG 0x09 -#define HMC5843_ID_REG 0x0a -#define HMC5843_ID_END 0x0c - -enum hmc5843_ids { - HMC5843_ID, - HMC5883_ID, - HMC5883L_ID, -}; - -/* - * Range gain settings in (+-)Ga - * Beware: HMC5843 and HMC5883 have different recommended sensor field - * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively - */ -#define HMC5843_RANGE_GAIN_OFFSET 0x05 -#define HMC5843_RANGE_GAIN_DEFAULT 0x01 -#define HMC5843_RANGE_GAINS 8 -#define HMC5843_RANGE_GAIN_MASK 0xe0 - -/* Device status */ -#define HMC5843_DATA_READY 0x01 -#define HMC5843_DATA_OUTPUT_LOCK 0x02 - -/* Mode register configuration */ -#define HMC5843_MODE_CONVERSION_CONTINUOUS 0x00 -#define HMC5843_MODE_CONVERSION_SINGLE 0x01 -#define HMC5843_MODE_IDLE 0x02 -#define HMC5843_MODE_SLEEP 0x03 -#define HMC5843_MODE_MASK 0x03 - -/* - * HMC5843: Minimum data output rate - * HMC5883: Typical data output rate - */ -#define HMC5843_RATE_OFFSET 0x02 -#define HMC5843_RATE_DEFAULT 0x04 -#define HMC5843_RATES 7 -#define HMC5843_RATE_MASK 0x1c - -/* Device measurement configuration */ -#define HMC5843_MEAS_CONF_NORMAL 0x00 -#define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01 -#define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02 -#define HMC5843_MEAS_CONF_MASK 0x03 - -/* Scaling factors: 10000000/Gain */ -static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { - 6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714 -}; - -static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { - 7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662 -}; - -static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { - 7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478 -}; - -/* - * From the datasheet: - * Value | HMC5843 | HMC5883/HMC5883L - * | Data output rate (Hz) | Data output rate (Hz) - * 0 | 0.5 | 0.75 - * 1 | 1 | 1.5 - * 2 | 2 | 3 - * 3 | 5 | 7.5 - * 4 | 10 (default) | 15 - * 5 | 20 | 30 - * 6 | 50 | 75 - * 7 | Not used | Not used - */ -static const int hmc5843_regval_to_samp_freq[7][2] = { - {0, 500000}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0} -}; - -static const int hmc5883_regval_to_samp_freq[7][2] = { - {0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0}, - {75, 0} -}; - -/* Describe chip variants */ -struct hmc5843_chip_info { - const struct iio_chan_spec *channels; - const int (*regval_to_samp_freq)[2]; - const int *regval_to_nanoscale; -}; - -/* Each client has this additional data */ -struct hmc5843_data { - struct i2c_client *client; - struct mutex lock; - struct regmap *regmap; - const struct hmc5843_chip_info *variant; - __be16 buffer[8]; /* 3x 16-bit channels + padding + 64-bit timestamp */ -}; - -/* The lower two bits contain the current conversion mode */ -static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 operating_mode) -{ - int ret; - - mutex_lock(&data->lock); - ret = regmap_update_bits(data->regmap, HMC5843_MODE_REG, - HMC5843_MODE_MASK, operating_mode); - mutex_unlock(&data->lock); - - return ret; -} - -static int hmc5843_wait_measurement(struct hmc5843_data *data) -{ - int tries = 150; - int val; - int ret; - - while (tries-- > 0) { - ret = regmap_read(data->regmap, HMC5843_STATUS_REG, &val); - if (ret < 0) - return ret; - if (val & HMC5843_DATA_READY) - break; - msleep(20); - } - - if (tries < 0) { - dev_err(&data->client->dev, "data not ready\n"); - return -EIO; - } - - return 0; -} - -/* Return the measurement value from the specified channel */ -static int hmc5843_read_measurement(struct hmc5843_data *data, - int idx, int *val) -{ - __be16 values[3]; - int ret; - - mutex_lock(&data->lock); - ret = hmc5843_wait_measurement(data); - if (ret < 0) { - mutex_unlock(&data->lock); - return ret; - } - ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, - values, sizeof(values)); - mutex_unlock(&data->lock); - if (ret < 0) - return ret; - - *val = sign_extend32(be16_to_cpu(values[idx]), 15); - return IIO_VAL_INT; -} - -/* - * API for setting the measurement configuration to - * Normal, Positive bias and Negative bias - * - * From the datasheet: - * 0 - Normal measurement configuration (default): In normal measurement - * configuration the device follows normal measurement flow. Pins BP - * and BN are left floating and high impedance. - * - * 1 - Positive bias configuration: In positive bias configuration, a - * positive current is forced across the resistive load on pins BP - * and BN. - * - * 2 - Negative bias configuration. In negative bias configuration, a - * negative current is forced across the resistive load on pins BP - * and BN. - * - */ -static int hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf) -{ - int ret; - - mutex_lock(&data->lock); - ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, - HMC5843_MEAS_CONF_MASK, meas_conf); - mutex_unlock(&data->lock); - - return ret; -} - -static ssize_t hmc5843_show_measurement_configuration(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); - int val; - int ret; - - ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &val); - if (ret) - return ret; - val &= HMC5843_MEAS_CONF_MASK; - - return sprintf(buf, "%d\n", val); -} - -static ssize_t hmc5843_set_measurement_configuration(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t count) -{ - struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); - unsigned long meas_conf = 0; - int ret; - - ret = kstrtoul(buf, 10, &meas_conf); - if (ret) - return ret; - if (meas_conf >= HMC5843_MEAS_CONF_MASK) - return -EINVAL; - - ret = hmc5843_set_meas_conf(data, meas_conf); - - return (ret < 0) ? ret : count; -} - -static IIO_DEVICE_ATTR(meas_conf, - S_IWUSR | S_IRUGO, - hmc5843_show_measurement_configuration, - hmc5843_set_measurement_configuration, - 0); - -static ssize_t hmc5843_show_samp_freq_avail(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); - size_t len = 0; - int i; - - for (i = 0; i < HMC5843_RATES; i++) - len += scnprintf(buf + len, PAGE_SIZE - len, - "%d.%d ", data->variant->regval_to_samp_freq[i][0], - data->variant->regval_to_samp_freq[i][1]); - - /* replace trailing space by newline */ - buf[len - 1] = '\n'; - - return len; -} - -static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(hmc5843_show_samp_freq_avail); - -static int hmc5843_set_samp_freq(struct hmc5843_data *data, u8 rate) -{ - int ret; - - mutex_lock(&data->lock); - ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, - HMC5843_RATE_MASK, rate << HMC5843_RATE_OFFSET); - mutex_unlock(&data->lock); - - return ret; -} - -static int hmc5843_get_samp_freq_index(struct hmc5843_data *data, - int val, int val2) -{ - int i; - - for (i = 0; i < HMC5843_RATES; i++) - if (val == data->variant->regval_to_samp_freq[i][0] && - val2 == data->variant->regval_to_samp_freq[i][1]) - return i; - - return -EINVAL; -} - -static int hmc5843_set_range_gain(struct hmc5843_data *data, u8 range) -{ - int ret; - - mutex_lock(&data->lock); - ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_B, - HMC5843_RANGE_GAIN_MASK, - range << HMC5843_RANGE_GAIN_OFFSET); - mutex_unlock(&data->lock); - - return ret; -} - -static ssize_t hmc5843_show_scale_avail(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); - - size_t len = 0; - int i; - - for (i = 0; i < HMC5843_RANGE_GAINS; i++) - len += scnprintf(buf + len, PAGE_SIZE - len, - "0.%09d ", data->variant->regval_to_nanoscale[i]); - - /* replace trailing space by newline */ - buf[len - 1] = '\n'; - - return len; -} - -static IIO_DEVICE_ATTR(scale_available, S_IRUGO, - hmc5843_show_scale_avail, NULL, 0); - -static int hmc5843_get_scale_index(struct hmc5843_data *data, int val, int val2) -{ - int i; - - if (val != 0) - return -EINVAL; - - for (i = 0; i < HMC5843_RANGE_GAINS; i++) - if (val2 == data->variant->regval_to_nanoscale[i]) - return i; - - return -EINVAL; -} - -static int hmc5843_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, long mask) -{ - struct hmc5843_data *data = iio_priv(indio_dev); - int rval; - int ret; - - switch (mask) { - case IIO_CHAN_INFO_RAW: - return hmc5843_read_measurement(data, chan->scan_index, val); - case IIO_CHAN_INFO_SCALE: - ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval); - if (ret < 0) - return ret; - rval >>= HMC5843_RANGE_GAIN_OFFSET; - *val = 0; - *val2 = data->variant->regval_to_nanoscale[rval]; - return IIO_VAL_INT_PLUS_NANO; - case IIO_CHAN_INFO_SAMP_FREQ: - ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval); - if (ret < 0) - return ret; - rval >>= HMC5843_RATE_OFFSET; - *val = data->variant->regval_to_samp_freq[rval][0]; - *val2 = data->variant->regval_to_samp_freq[rval][1]; - return IIO_VAL_INT_PLUS_MICRO; - } - return -EINVAL; -} - -static int hmc5843_write_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int val, int val2, long mask) -{ - struct hmc5843_data *data = iio_priv(indio_dev); - int rate, range; - - switch (mask) { - case IIO_CHAN_INFO_SAMP_FREQ: - rate = hmc5843_get_samp_freq_index(data, val, val2); - if (rate < 0) - return -EINVAL; - - return hmc5843_set_samp_freq(data, rate); - case IIO_CHAN_INFO_SCALE: - range = hmc5843_get_scale_index(data, val, val2); - if (range < 0) - return -EINVAL; - - return hmc5843_set_range_gain(data, range); - default: - return -EINVAL; - } -} - -static int hmc5843_write_raw_get_fmt(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, long mask) -{ - switch (mask) { - case IIO_CHAN_INFO_SAMP_FREQ: - return IIO_VAL_INT_PLUS_MICRO; - case IIO_CHAN_INFO_SCALE: - return IIO_VAL_INT_PLUS_NANO; - default: - return -EINVAL; - } -} - -static irqreturn_t hmc5843_trigger_handler(int irq, void *p) -{ - struct iio_poll_func *pf = p; - struct iio_dev *indio_dev = pf->indio_dev; - struct hmc5843_data *data = iio_priv(indio_dev); - int ret; - - mutex_lock(&data->lock); - ret = hmc5843_wait_measurement(data); - if (ret < 0) { - mutex_unlock(&data->lock); - goto done; - } - - ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, - data->buffer, 3 * sizeof(__be16)); - - mutex_unlock(&data->lock); - if (ret < 0) - goto done; - - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, - iio_get_time_ns()); - -done: - iio_trigger_notify_done(indio_dev->trig); - - return IRQ_HANDLED; -} - -#define HMC5843_CHANNEL(axis, idx) \ - { \ - .type = IIO_MAGN, \ - .modified = 1, \ - .channel2 = IIO_MOD_##axis, \ - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ - BIT(IIO_CHAN_INFO_SAMP_FREQ), \ - .scan_index = idx, \ - .scan_type = { \ - .sign = 's', \ - .realbits = 16, \ - .storagebits = 16, \ - .endianness = IIO_BE, \ - }, \ - } - -static const struct iio_chan_spec hmc5843_channels[] = { - HMC5843_CHANNEL(X, 0), - HMC5843_CHANNEL(Y, 1), - HMC5843_CHANNEL(Z, 2), - IIO_CHAN_SOFT_TIMESTAMP(3), -}; - -/* Beware: Y and Z are exchanged on HMC5883 */ -static const struct iio_chan_spec hmc5883_channels[] = { - HMC5843_CHANNEL(X, 0), - HMC5843_CHANNEL(Z, 1), - HMC5843_CHANNEL(Y, 2), - IIO_CHAN_SOFT_TIMESTAMP(3), -}; - -static struct attribute *hmc5843_attributes[] = { - &iio_dev_attr_meas_conf.dev_attr.attr, - &iio_dev_attr_scale_available.dev_attr.attr, - &iio_dev_attr_sampling_frequency_available.dev_attr.attr, - NULL -}; - -static const struct attribute_group hmc5843_group = { - .attrs = hmc5843_attributes, -}; - -static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { - [HMC5843_ID] = { - .channels = hmc5843_channels, - .regval_to_samp_freq = hmc5843_regval_to_samp_freq, - .regval_to_nanoscale = hmc5843_regval_to_nanoscale, - }, - [HMC5883_ID] = { - .channels = hmc5883_channels, - .regval_to_samp_freq = hmc5883_regval_to_samp_freq, - .regval_to_nanoscale = hmc5883_regval_to_nanoscale, - }, - [HMC5883L_ID] = { - .channels = hmc5883_channels, - .regval_to_samp_freq = hmc5883_regval_to_samp_freq, - .regval_to_nanoscale = hmc5883l_regval_to_nanoscale, - }, -}; - -static int hmc5843_init(struct hmc5843_data *data) -{ - int ret; - u8 id[3]; - - ret = regmap_bulk_read(data->regmap, HMC5843_ID_REG, - id, ARRAY_SIZE(id)); - if (ret < 0) - return ret; - if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { - dev_err(&data->client->dev, "no HMC5843/5883/5883L sensor\n"); - return -ENODEV; - } - - ret = hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL); - if (ret < 0) - return ret; - ret = hmc5843_set_samp_freq(data, HMC5843_RATE_DEFAULT); - if (ret < 0) - return ret; - ret = hmc5843_set_range_gain(data, HMC5843_RANGE_GAIN_DEFAULT); - if (ret < 0) - return ret; - return hmc5843_set_mode(data, HMC5843_MODE_CONVERSION_CONTINUOUS); -} - -static const struct iio_info hmc5843_info = { - .attrs = &hmc5843_group, - .read_raw = &hmc5843_read_raw, - .write_raw = &hmc5843_write_raw, - .write_raw_get_fmt = &hmc5843_write_raw_get_fmt, - .driver_module = THIS_MODULE, -}; - -static const unsigned long hmc5843_scan_masks[] = {0x7, 0}; - -static const struct regmap_range hmc5843_readable_ranges[] = { - regmap_reg_range(0, HMC5843_ID_END), -}; - -static struct regmap_access_table hmc5843_readable_table = { - .yes_ranges = hmc5843_readable_ranges, - .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), -}; - -static const struct regmap_range hmc5843_writable_ranges[] = { - regmap_reg_range(0, HMC5843_MODE_REG), -}; - -static struct regmap_access_table hmc5843_writable_table = { - .yes_ranges = hmc5843_writable_ranges, - .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), -}; - -static const struct regmap_range hmc5843_volatile_ranges[] = { - regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), -}; - -static struct regmap_access_table hmc5843_volatile_table = { - .yes_ranges = hmc5843_volatile_ranges, - .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), -}; - -static struct regmap_config hmc5843_regmap_config = { - .reg_bits = 8, - .val_bits = 8, - - .rd_table = &hmc5843_readable_table, - .wr_table = &hmc5843_writable_table, - .volatile_table = &hmc5843_volatile_table, - - .cache_type = REGCACHE_RBTREE, -}; - -static int hmc5843_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct hmc5843_data *data; - struct iio_dev *indio_dev; - int ret; - - indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); - if (indio_dev == NULL) - return -ENOMEM; - - /* default settings at probe */ - data = iio_priv(indio_dev); - data->client = client; - data->variant = &hmc5843_chip_info_tbl[id->driver_data]; - data->regmap = devm_regmap_init_i2c(client, &hmc5843_regmap_config); - mutex_init(&data->lock); - - i2c_set_clientdata(client, indio_dev); - indio_dev->info = &hmc5843_info; - indio_dev->name = id->name; - indio_dev->dev.parent = &client->dev; - indio_dev->modes = INDIO_DIRECT_MODE; - indio_dev->channels = data->variant->channels; - indio_dev->num_channels = 4; - indio_dev->available_scan_masks = hmc5843_scan_masks; - - ret = hmc5843_init(data); - if (ret < 0) - return ret; - - ret = iio_triggered_buffer_setup(indio_dev, NULL, - hmc5843_trigger_handler, NULL); - if (ret < 0) - return ret; - - ret = iio_device_register(indio_dev); - if (ret < 0) - goto buffer_cleanup; - - return 0; - -buffer_cleanup: - iio_triggered_buffer_cleanup(indio_dev); - return ret; -} - -static int hmc5843_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(client); - - iio_device_unregister(indio_dev); - iio_triggered_buffer_cleanup(indio_dev); - - /* sleep mode to save power */ - hmc5843_set_mode(iio_priv(indio_dev), HMC5843_MODE_SLEEP); - - return 0; -} - -#ifdef CONFIG_PM_SLEEP -static int hmc5843_suspend(struct device *dev) -{ - struct hmc5843_data *data = iio_priv(i2c_get_clientdata( - to_i2c_client(dev))); - - return hmc5843_set_mode(data, HMC5843_MODE_SLEEP); -} - -static int hmc5843_resume(struct device *dev) -{ - struct hmc5843_data *data = iio_priv(i2c_get_clientdata( - to_i2c_client(dev))); - - return hmc5843_set_mode(data, HMC5843_MODE_CONVERSION_CONTINUOUS); -} - -static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops, hmc5843_suspend, hmc5843_resume); -#define HMC5843_PM_OPS (&hmc5843_pm_ops) -#else -#define HMC5843_PM_OPS NULL -#endif - -static const struct i2c_device_id hmc5843_id[] = { - { "hmc5843", HMC5843_ID }, - { "hmc5883", HMC5883_ID }, - { "hmc5883l", HMC5883L_ID }, - { } -}; -MODULE_DEVICE_TABLE(i2c, hmc5843_id); - -static const struct of_device_id hmc5843_of_match[] = { - { .compatible = "honeywell,hmc5843", .data = (void *)HMC5843_ID }, - { .compatible = "honeywell,hmc5883", .data = (void *)HMC5883_ID }, - { .compatible = "honeywell,hmc5883l", .data = (void *)HMC5883L_ID }, - {} -}; -MODULE_DEVICE_TABLE(of, hmc5843_of_match); - -static struct i2c_driver hmc5843_driver = { - .driver = { - .name = "hmc5843", - .pm = HMC5843_PM_OPS, - .of_match_table = hmc5843_of_match, - }, - .id_table = hmc5843_id, - .probe = hmc5843_probe, - .remove = hmc5843_remove, -}; -module_i2c_driver(hmc5843_driver); - -MODULE_AUTHOR("Shubhrajyoti Datta "); -MODULE_DESCRIPTION("HMC5843/5883/5883L driver"); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/iio/magnetometer/hmc5843.h b/drivers/staging/iio/magnetometer/hmc5843.h new file mode 100644 index 000000000000..06b2712a67fd --- /dev/null +++ b/drivers/staging/iio/magnetometer/hmc5843.h @@ -0,0 +1,58 @@ +/* + * Header file for hmc5843 driver + * + * Split from hmc5843.c + * Copyright (C) Josef Gajdusek + * + * 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 HMC5843_CORE_H +#define HMC5843_CORE_H + +#include +#include + +#define HMC5843_CONFIG_REG_A 0x00 +#define HMC5843_CONFIG_REG_B 0x01 +#define HMC5843_MODE_REG 0x02 +#define HMC5843_DATA_OUT_MSB_REGS 0x03 +#define HMC5843_STATUS_REG 0x09 +#define HMC5843_ID_REG 0x0a +#define HMC5843_ID_END 0x0c + +enum hmc5843_ids { + HMC5843_ID, + HMC5883_ID, + HMC5883L_ID, +}; + +struct hmc5843_data { + struct device *dev; + struct mutex lock; + struct regmap *regmap; + const struct hmc5843_chip_info *variant; + __be16 buffer[8]; /* 3x 16-bit channels + padding + 64-bit timestamp */ +}; + +int hmc5843_common_probe(struct device *dev, struct regmap *regmap, + enum hmc5843_ids id); +int hmc5843_common_remove(struct device *dev); + +int hmc5843_common_suspend(struct device *dev); +int hmc5843_common_resume(struct device *dev); + +#ifdef CONFIG_PM_SLEEP +static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops, + hmc5843_common_suspend, + hmc5843_common_resume); +#define HMC5843_PM_OPS (&hmc5843_pm_ops) +#else +#define HMC5843_PM_OPS NULL +#endif + +#endif /* HMC5843_CORE_H */ diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c b/drivers/staging/iio/magnetometer/hmc5843_core.c new file mode 100644 index 000000000000..bdeaf431db12 --- /dev/null +++ b/drivers/staging/iio/magnetometer/hmc5843_core.c @@ -0,0 +1,612 @@ +/* Copyright (C) 2010 Texas Instruments + Author: Shubhrajyoti Datta + Acknowledgement: Jonathan Cameron for valuable inputs. + + Support for HMC5883 and HMC5883L by Peter Meerwald . + + Split to multiple files by Josef Gajdusek - 2014 + + 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 +#include +#include +#include +#include +#include +#include +#include + +#include "hmc5843.h" + +/* + * Range gain settings in (+-)Ga + * Beware: HMC5843 and HMC5883 have different recommended sensor field + * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively + */ +#define HMC5843_RANGE_GAIN_OFFSET 0x05 +#define HMC5843_RANGE_GAIN_DEFAULT 0x01 +#define HMC5843_RANGE_GAINS 8 +#define HMC5843_RANGE_GAIN_MASK 0xe0 + +/* Device status */ +#define HMC5843_DATA_READY 0x01 +#define HMC5843_DATA_OUTPUT_LOCK 0x02 + +/* Mode register configuration */ +#define HMC5843_MODE_CONVERSION_CONTINUOUS 0x00 +#define HMC5843_MODE_CONVERSION_SINGLE 0x01 +#define HMC5843_MODE_IDLE 0x02 +#define HMC5843_MODE_SLEEP 0x03 +#define HMC5843_MODE_MASK 0x03 + +/* + * HMC5843: Minimum data output rate + * HMC5883: Typical data output rate + */ +#define HMC5843_RATE_OFFSET 0x02 +#define HMC5843_RATE_DEFAULT 0x04 +#define HMC5843_RATES 7 +#define HMC5843_RATE_MASK 0x1c + +/* Device measurement configuration */ +#define HMC5843_MEAS_CONF_NORMAL 0x00 +#define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01 +#define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02 +#define HMC5843_MEAS_CONF_MASK 0x03 + +/* Scaling factors: 10000000/Gain */ +static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { + 6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714 +}; + +static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { + 7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662 +}; + +static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { + 7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478 +}; + +/* + * From the datasheet: + * Value | HMC5843 | HMC5883/HMC5883L + * | Data output rate (Hz) | Data output rate (Hz) + * 0 | 0.5 | 0.75 + * 1 | 1 | 1.5 + * 2 | 2 | 3 + * 3 | 5 | 7.5 + * 4 | 10 (default) | 15 + * 5 | 20 | 30 + * 6 | 50 | 75 + * 7 | Not used | Not used + */ +static const int hmc5843_regval_to_samp_freq[7][2] = { + {0, 500000}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0} +}; + +static const int hmc5883_regval_to_samp_freq[7][2] = { + {0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0}, + {75, 0} +}; + +/* Describe chip variants */ +struct hmc5843_chip_info { + const struct iio_chan_spec *channels; + const int (*regval_to_samp_freq)[2]; + const int *regval_to_nanoscale; +}; + +/* The lower two bits contain the current conversion mode */ +static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 operating_mode) +{ + int ret; + + mutex_lock(&data->lock); + ret = regmap_update_bits(data->regmap, HMC5843_MODE_REG, + HMC5843_MODE_MASK, operating_mode); + mutex_unlock(&data->lock); + + return ret; +} + +static int hmc5843_wait_measurement(struct hmc5843_data *data) +{ + int tries = 150; + int val; + int ret; + + while (tries-- > 0) { + ret = regmap_read(data->regmap, HMC5843_STATUS_REG, &val); + if (ret < 0) + return ret; + if (val & HMC5843_DATA_READY) + break; + msleep(20); + } + + if (tries < 0) { + dev_err(data->dev, "data not ready\n"); + return -EIO; + } + + return 0; +} + +/* Return the measurement value from the specified channel */ +static int hmc5843_read_measurement(struct hmc5843_data *data, + int idx, int *val) +{ + __be16 values[3]; + int ret; + + mutex_lock(&data->lock); + ret = hmc5843_wait_measurement(data); + if (ret < 0) { + mutex_unlock(&data->lock); + return ret; + } + ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, + values, sizeof(values)); + mutex_unlock(&data->lock); + if (ret < 0) + return ret; + + *val = sign_extend32(be16_to_cpu(values[idx]), 15); + return IIO_VAL_INT; +} + +/* + * API for setting the measurement configuration to + * Normal, Positive bias and Negative bias + * + * From the datasheet: + * 0 - Normal measurement configuration (default): In normal measurement + * configuration the device follows normal measurement flow. Pins BP + * and BN are left floating and high impedance. + * + * 1 - Positive bias configuration: In positive bias configuration, a + * positive current is forced across the resistive load on pins BP + * and BN. + * + * 2 - Negative bias configuration. In negative bias configuration, a + * negative current is forced across the resistive load on pins BP + * and BN. + * + */ +static int hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf) +{ + int ret; + + mutex_lock(&data->lock); + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, + HMC5843_MEAS_CONF_MASK, meas_conf); + mutex_unlock(&data->lock); + + return ret; +} + +static ssize_t hmc5843_show_measurement_configuration(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); + int val; + int ret; + + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &val); + if (ret) + return ret; + val &= HMC5843_MEAS_CONF_MASK; + + return sprintf(buf, "%d\n", val); +} + +static ssize_t hmc5843_set_measurement_configuration(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) +{ + struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); + unsigned long meas_conf = 0; + int ret; + + ret = kstrtoul(buf, 10, &meas_conf); + if (ret) + return ret; + if (meas_conf >= HMC5843_MEAS_CONF_MASK) + return -EINVAL; + + ret = hmc5843_set_meas_conf(data, meas_conf); + + return (ret < 0) ? ret : count; +} + +static IIO_DEVICE_ATTR(meas_conf, + S_IWUSR | S_IRUGO, + hmc5843_show_measurement_configuration, + hmc5843_set_measurement_configuration, + 0); + +static ssize_t hmc5843_show_samp_freq_avail(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); + size_t len = 0; + int i; + + for (i = 0; i < HMC5843_RATES; i++) + len += scnprintf(buf + len, PAGE_SIZE - len, + "%d.%d ", data->variant->regval_to_samp_freq[i][0], + data->variant->regval_to_samp_freq[i][1]); + + /* replace trailing space by newline */ + buf[len - 1] = '\n'; + + return len; +} + +static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(hmc5843_show_samp_freq_avail); + +static int hmc5843_set_samp_freq(struct hmc5843_data *data, u8 rate) +{ + int ret; + + mutex_lock(&data->lock); + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_A, + HMC5843_RATE_MASK, rate << HMC5843_RATE_OFFSET); + mutex_unlock(&data->lock); + + return ret; +} + +static int hmc5843_get_samp_freq_index(struct hmc5843_data *data, + int val, int val2) +{ + int i; + + for (i = 0; i < HMC5843_RATES; i++) + if (val == data->variant->regval_to_samp_freq[i][0] && + val2 == data->variant->regval_to_samp_freq[i][1]) + return i; + + return -EINVAL; +} + +static int hmc5843_set_range_gain(struct hmc5843_data *data, u8 range) +{ + int ret; + + mutex_lock(&data->lock); + ret = regmap_update_bits(data->regmap, HMC5843_CONFIG_REG_B, + HMC5843_RANGE_GAIN_MASK, + range << HMC5843_RANGE_GAIN_OFFSET); + mutex_unlock(&data->lock); + + return ret; +} + +static ssize_t hmc5843_show_scale_avail(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev)); + + size_t len = 0; + int i; + + for (i = 0; i < HMC5843_RANGE_GAINS; i++) + len += scnprintf(buf + len, PAGE_SIZE - len, + "0.%09d ", data->variant->regval_to_nanoscale[i]); + + /* replace trailing space by newline */ + buf[len - 1] = '\n'; + + return len; +} + +static IIO_DEVICE_ATTR(scale_available, S_IRUGO, + hmc5843_show_scale_avail, NULL, 0); + +static int hmc5843_get_scale_index(struct hmc5843_data *data, int val, int val2) +{ + int i; + + if (val != 0) + return -EINVAL; + + for (i = 0; i < HMC5843_RANGE_GAINS; i++) + if (val2 == data->variant->regval_to_nanoscale[i]) + return i; + + return -EINVAL; +} + +static int hmc5843_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct hmc5843_data *data = iio_priv(indio_dev); + int rval; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + return hmc5843_read_measurement(data, chan->scan_index, val); + case IIO_CHAN_INFO_SCALE: + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval); + if (ret < 0) + return ret; + rval >>= HMC5843_RANGE_GAIN_OFFSET; + *val = 0; + *val2 = data->variant->regval_to_nanoscale[rval]; + return IIO_VAL_INT_PLUS_NANO; + case IIO_CHAN_INFO_SAMP_FREQ: + ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval); + if (ret < 0) + return ret; + rval >>= HMC5843_RATE_OFFSET; + *val = data->variant->regval_to_samp_freq[rval][0]; + *val2 = data->variant->regval_to_samp_freq[rval][1]; + return IIO_VAL_INT_PLUS_MICRO; + } + return -EINVAL; +} + +static int hmc5843_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int val, int val2, long mask) +{ + struct hmc5843_data *data = iio_priv(indio_dev); + int rate, range; + + switch (mask) { + case IIO_CHAN_INFO_SAMP_FREQ: + rate = hmc5843_get_samp_freq_index(data, val, val2); + if (rate < 0) + return -EINVAL; + + return hmc5843_set_samp_freq(data, rate); + case IIO_CHAN_INFO_SCALE: + range = hmc5843_get_scale_index(data, val, val2); + if (range < 0) + return -EINVAL; + + return hmc5843_set_range_gain(data, range); + default: + return -EINVAL; + } +} + +static int hmc5843_write_raw_get_fmt(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, long mask) +{ + switch (mask) { + case IIO_CHAN_INFO_SAMP_FREQ: + return IIO_VAL_INT_PLUS_MICRO; + case IIO_CHAN_INFO_SCALE: + return IIO_VAL_INT_PLUS_NANO; + default: + return -EINVAL; + } +} + +static irqreturn_t hmc5843_trigger_handler(int irq, void *p) +{ + struct iio_poll_func *pf = p; + struct iio_dev *indio_dev = pf->indio_dev; + struct hmc5843_data *data = iio_priv(indio_dev); + int ret; + + mutex_lock(&data->lock); + ret = hmc5843_wait_measurement(data); + if (ret < 0) { + mutex_unlock(&data->lock); + goto done; + } + + ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS, + data->buffer, 3 * sizeof(__be16)); + + mutex_unlock(&data->lock); + if (ret < 0) + goto done; + + iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, + iio_get_time_ns()); + +done: + iio_trigger_notify_done(indio_dev->trig); + + return IRQ_HANDLED; +} + +#define HMC5843_CHANNEL(axis, idx) \ + { \ + .type = IIO_MAGN, \ + .modified = 1, \ + .channel2 = IIO_MOD_##axis, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ + BIT(IIO_CHAN_INFO_SAMP_FREQ), \ + .scan_index = idx, \ + .scan_type = { \ + .sign = 's', \ + .realbits = 16, \ + .storagebits = 16, \ + .endianness = IIO_BE, \ + }, \ + } + +static const struct iio_chan_spec hmc5843_channels[] = { + HMC5843_CHANNEL(X, 0), + HMC5843_CHANNEL(Y, 1), + HMC5843_CHANNEL(Z, 2), + IIO_CHAN_SOFT_TIMESTAMP(3), +}; + +/* Beware: Y and Z are exchanged on HMC5883 */ +static const struct iio_chan_spec hmc5883_channels[] = { + HMC5843_CHANNEL(X, 0), + HMC5843_CHANNEL(Z, 1), + HMC5843_CHANNEL(Y, 2), + IIO_CHAN_SOFT_TIMESTAMP(3), +}; + +static struct attribute *hmc5843_attributes[] = { + &iio_dev_attr_meas_conf.dev_attr.attr, + &iio_dev_attr_scale_available.dev_attr.attr, + &iio_dev_attr_sampling_frequency_available.dev_attr.attr, + NULL +}; + +static const struct attribute_group hmc5843_group = { + .attrs = hmc5843_attributes, +}; + +static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { + [HMC5843_ID] = { + .channels = hmc5843_channels, + .regval_to_samp_freq = hmc5843_regval_to_samp_freq, + .regval_to_nanoscale = hmc5843_regval_to_nanoscale, + }, + [HMC5883_ID] = { + .channels = hmc5883_channels, + .regval_to_samp_freq = hmc5883_regval_to_samp_freq, + .regval_to_nanoscale = hmc5883_regval_to_nanoscale, + }, + [HMC5883L_ID] = { + .channels = hmc5883_channels, + .regval_to_samp_freq = hmc5883_regval_to_samp_freq, + .regval_to_nanoscale = hmc5883l_regval_to_nanoscale, + }, +}; + +static int hmc5843_init(struct hmc5843_data *data) +{ + int ret; + u8 id[3]; + + ret = regmap_bulk_read(data->regmap, HMC5843_ID_REG, + id, ARRAY_SIZE(id)); + if (ret < 0) + return ret; + if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { + dev_err(data->dev, "no HMC5843/5883/5883L sensor\n"); + return -ENODEV; + } + + ret = hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL); + if (ret < 0) + return ret; + ret = hmc5843_set_samp_freq(data, HMC5843_RATE_DEFAULT); + if (ret < 0) + return ret; + ret = hmc5843_set_range_gain(data, HMC5843_RANGE_GAIN_DEFAULT); + if (ret < 0) + return ret; + return hmc5843_set_mode(data, HMC5843_MODE_CONVERSION_CONTINUOUS); +} + +static const struct iio_info hmc5843_info = { + .attrs = &hmc5843_group, + .read_raw = &hmc5843_read_raw, + .write_raw = &hmc5843_write_raw, + .write_raw_get_fmt = &hmc5843_write_raw_get_fmt, + .driver_module = THIS_MODULE, +}; + +static const unsigned long hmc5843_scan_masks[] = {0x7, 0}; + + +int hmc5843_common_suspend(struct device *dev) +{ + return hmc5843_set_mode(iio_priv(dev_get_drvdata(dev)), + HMC5843_MODE_CONVERSION_CONTINUOUS); +} +EXPORT_SYMBOL(hmc5843_common_suspend); + +int hmc5843_common_resume(struct device *dev) +{ + return hmc5843_set_mode(iio_priv(dev_get_drvdata(dev)), + HMC5843_MODE_SLEEP); +} +EXPORT_SYMBOL(hmc5843_common_resume); + +int hmc5843_common_probe(struct device *dev, struct regmap *regmap, + enum hmc5843_ids id) +{ + struct hmc5843_data *data; + struct iio_dev *indio_dev; + int ret; + + indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); + if (indio_dev == NULL) + return -ENOMEM; + + dev_set_drvdata(dev, indio_dev); + + /* default settings at probe */ + data = iio_priv(indio_dev); + data->dev = dev; + data->regmap = regmap; + data->variant = &hmc5843_chip_info_tbl[id]; + mutex_init(&data->lock); + + indio_dev->dev.parent = dev; + indio_dev->info = &hmc5843_info; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = data->variant->channels; + indio_dev->num_channels = 4; + indio_dev->available_scan_masks = hmc5843_scan_masks; + + ret = hmc5843_init(data); + if (ret < 0) + return ret; + + ret = iio_triggered_buffer_setup(indio_dev, NULL, + hmc5843_trigger_handler, NULL); + if (ret < 0) + return ret; + + ret = iio_device_register(indio_dev); + if (ret < 0) + goto buffer_cleanup; + + return 0; + +buffer_cleanup: + iio_triggered_buffer_cleanup(indio_dev); + return ret; +} +EXPORT_SYMBOL(hmc5843_common_probe); + +int hmc5843_common_remove(struct device *dev) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + + iio_device_unregister(indio_dev); + iio_triggered_buffer_cleanup(indio_dev); + + /* sleep mode to save power */ + hmc5843_set_mode(iio_priv(indio_dev), HMC5843_MODE_SLEEP); + + return 0; +} +EXPORT_SYMBOL(hmc5843_common_remove); + +MODULE_AUTHOR("Shubhrajyoti Datta "); +MODULE_DESCRIPTION("HMC5843/5883/5883L core driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/iio/magnetometer/hmc5843_i2c.c b/drivers/staging/iio/magnetometer/hmc5843_i2c.c new file mode 100644 index 000000000000..5593a7d93a1b --- /dev/null +++ b/drivers/staging/iio/magnetometer/hmc5843_i2c.c @@ -0,0 +1,102 @@ +/* + * i2c driver for hmc5843/5843/5883/5883l + * + * Split from hmc5843.c + * Copyright (C) Josef Gajdusek + * + * 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 "hmc5843.h" + +static const struct regmap_range hmc5843_readable_ranges[] = { + regmap_reg_range(0, HMC5843_ID_END), +}; + +static struct regmap_access_table hmc5843_readable_table = { + .yes_ranges = hmc5843_readable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), +}; + +static const struct regmap_range hmc5843_writable_ranges[] = { + regmap_reg_range(0, HMC5843_MODE_REG), +}; + +static struct regmap_access_table hmc5843_writable_table = { + .yes_ranges = hmc5843_writable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), +}; + +static const struct regmap_range hmc5843_volatile_ranges[] = { + regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), +}; + +static struct regmap_access_table hmc5843_volatile_table = { + .yes_ranges = hmc5843_volatile_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), +}; + +static struct regmap_config hmc5843_i2c_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + + .rd_table = &hmc5843_readable_table, + .wr_table = &hmc5843_writable_table, + .volatile_table = &hmc5843_volatile_table, + + .cache_type = REGCACHE_RBTREE, +}; + +static int hmc5843_i2c_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + return hmc5843_common_probe(&client->dev, + devm_regmap_init_i2c(client, &hmc5843_i2c_regmap_config), + id->driver_data); +} + +static int hmc5843_i2c_remove(struct i2c_client *client) +{ + return hmc5843_common_remove(&client->dev); +} + +static const struct i2c_device_id hmc5843_id[] = { + { "hmc5843", HMC5843_ID }, + { "hmc5883", HMC5883_ID }, + { "hmc5883l", HMC5883L_ID }, + { } +}; +MODULE_DEVICE_TABLE(i2c, hmc5843_id); + +static const struct of_device_id hmc5843_of_match[] = { + { .compatible = "honeywell,hmc5843", .data = (void *)HMC5843_ID }, + { .compatible = "honeywell,hmc5883", .data = (void *)HMC5883_ID }, + { .compatible = "honeywell,hmc5883l", .data = (void *)HMC5883L_ID }, + {} +}; +MODULE_DEVICE_TABLE(of, hmc5843_of_match); + +static struct i2c_driver hmc5843_driver = { + .driver = { + .name = "hmc5843", + .pm = HMC5843_PM_OPS, + .of_match_table = hmc5843_of_match, + }, + .id_table = hmc5843_id, + .probe = hmc5843_i2c_probe, + .remove = hmc5843_i2c_remove, +}; +module_i2c_driver(hmc5843_driver); + +MODULE_AUTHOR("Josef Gajdusek "); +MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver"); +MODULE_LICENSE("GPL"); -- cgit From 585f7ce2a93296e634cb50deab418029fdffb23f Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 22 Jul 2014 16:02:00 +0100 Subject: staging:iio:hmc5843: register <-> value arrays now can have different lengths Changed structure of struct hmc5843_chip_info to include length of translation arrays. Code previously using #defined constant has been changed accordingly. This allows to integrate devices which do have different amounts of available rates/scales. Signed-off-by: Josef Gajdusek Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/hmc5843_core.c | 34 +++++++++++++++++-------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c b/drivers/staging/iio/magnetometer/hmc5843_core.c index bdeaf431db12..08fb0be100ff 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_core.c +++ b/drivers/staging/iio/magnetometer/hmc5843_core.c @@ -39,7 +39,6 @@ */ #define HMC5843_RANGE_GAIN_OFFSET 0x05 #define HMC5843_RANGE_GAIN_DEFAULT 0x01 -#define HMC5843_RANGE_GAINS 8 #define HMC5843_RANGE_GAIN_MASK 0xe0 /* Device status */ @@ -59,7 +58,6 @@ */ #define HMC5843_RATE_OFFSET 0x02 #define HMC5843_RATE_DEFAULT 0x04 -#define HMC5843_RATES 7 #define HMC5843_RATE_MASK 0x1c /* Device measurement configuration */ @@ -69,15 +67,15 @@ #define HMC5843_MEAS_CONF_MASK 0x03 /* Scaling factors: 10000000/Gain */ -static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { +static const int hmc5843_regval_to_nanoscale[] = { 6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714 }; -static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { +static const int hmc5883_regval_to_nanoscale[] = { 7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662 }; -static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { +static const int hmc5883l_regval_to_nanoscale[] = { 7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478 }; @@ -94,11 +92,11 @@ static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = { * 6 | 50 | 75 * 7 | Not used | Not used */ -static const int hmc5843_regval_to_samp_freq[7][2] = { +static const int hmc5843_regval_to_samp_freq[][2] = { {0, 500000}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0} }; -static const int hmc5883_regval_to_samp_freq[7][2] = { +static const int hmc5883_regval_to_samp_freq[][2] = { {0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0}, {75, 0} }; @@ -107,7 +105,9 @@ static const int hmc5883_regval_to_samp_freq[7][2] = { struct hmc5843_chip_info { const struct iio_chan_spec *channels; const int (*regval_to_samp_freq)[2]; + const int n_regval_to_samp_freq; const int *regval_to_nanoscale; + const int n_regval_to_nanoscale; }; /* The lower two bits contain the current conversion mode */ @@ -248,7 +248,7 @@ static ssize_t hmc5843_show_samp_freq_avail(struct device *dev, size_t len = 0; int i; - for (i = 0; i < HMC5843_RATES; i++) + for (i = 0; i < data->variant->n_regval_to_samp_freq; i++) len += scnprintf(buf + len, PAGE_SIZE - len, "%d.%d ", data->variant->regval_to_samp_freq[i][0], data->variant->regval_to_samp_freq[i][1]); @@ -278,7 +278,7 @@ static int hmc5843_get_samp_freq_index(struct hmc5843_data *data, { int i; - for (i = 0; i < HMC5843_RATES; i++) + for (i = 0; i < data->variant->n_regval_to_samp_freq; i++) if (val == data->variant->regval_to_samp_freq[i][0] && val2 == data->variant->regval_to_samp_freq[i][1]) return i; @@ -307,7 +307,7 @@ static ssize_t hmc5843_show_scale_avail(struct device *dev, size_t len = 0; int i; - for (i = 0; i < HMC5843_RANGE_GAINS; i++) + for (i = 0; i < data->variant->n_regval_to_nanoscale; i++) len += scnprintf(buf + len, PAGE_SIZE - len, "0.%09d ", data->variant->regval_to_nanoscale[i]); @@ -327,7 +327,7 @@ static int hmc5843_get_scale_index(struct hmc5843_data *data, int val, int val2) if (val != 0) return -EINVAL; - for (i = 0; i < HMC5843_RANGE_GAINS; i++) + for (i = 0; i < data->variant->n_regval_to_nanoscale; i++) if (val2 == data->variant->regval_to_nanoscale[i]) return i; @@ -480,17 +480,29 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { [HMC5843_ID] = { .channels = hmc5843_channels, .regval_to_samp_freq = hmc5843_regval_to_samp_freq, + .n_regval_to_samp_freq = + ARRAY_SIZE(hmc5843_regval_to_samp_freq), .regval_to_nanoscale = hmc5843_regval_to_nanoscale, + .n_regval_to_nanoscale = + ARRAY_SIZE(hmc5843_regval_to_nanoscale), }, [HMC5883_ID] = { .channels = hmc5883_channels, .regval_to_samp_freq = hmc5883_regval_to_samp_freq, + .n_regval_to_samp_freq = + ARRAY_SIZE(hmc5883_regval_to_samp_freq), .regval_to_nanoscale = hmc5883_regval_to_nanoscale, + .n_regval_to_nanoscale = + ARRAY_SIZE(hmc5883_regval_to_nanoscale), }, [HMC5883L_ID] = { .channels = hmc5883_channels, .regval_to_samp_freq = hmc5883_regval_to_samp_freq, + .n_regval_to_samp_freq = + ARRAY_SIZE(hmc5883_regval_to_samp_freq), .regval_to_nanoscale = hmc5883l_regval_to_nanoscale, + .n_regval_to_nanoscale = + ARRAY_SIZE(hmc5883l_regval_to_nanoscale), }, }; -- cgit From 5a059bd268a79376ebf9ea539c5bb645c5a854d5 Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 22 Jul 2014 16:02:00 +0100 Subject: staging:iio:hmc5843: Add support for i2c hmc5983 This patch adds support for the hmc5983 i2c interface. This chip is almost identical to the hmc5883. The difference being added temperature compensation, additional available sample rate (220Hz) and an SPI interface. Signed-off-by: Josef Gajdusek Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/Kconfig | 2 +- drivers/staging/iio/magnetometer/hmc5843.h | 1 + drivers/staging/iio/magnetometer/hmc5843_core.c | 20 +++++++++++++++++--- drivers/staging/iio/magnetometer/hmc5843_i2c.c | 6 ++++-- 4 files changed, 23 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/Kconfig b/drivers/staging/iio/magnetometer/Kconfig index 0a27f987c201..c086f33b6311 100644 --- a/drivers/staging/iio/magnetometer/Kconfig +++ b/drivers/staging/iio/magnetometer/Kconfig @@ -20,6 +20,6 @@ config SENSORS_HMC5843_I2C This driver can also be compiled as a set of modules. If so, these modules will be created: - hmc5843_core (core functions) - - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L) + - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983) endmenu diff --git a/drivers/staging/iio/magnetometer/hmc5843.h b/drivers/staging/iio/magnetometer/hmc5843.h index 06b2712a67fd..b784e3eb4591 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.h +++ b/drivers/staging/iio/magnetometer/hmc5843.h @@ -29,6 +29,7 @@ enum hmc5843_ids { HMC5843_ID, HMC5883_ID, HMC5883L_ID, + HMC5983_ID, }; struct hmc5843_data { diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c b/drivers/staging/iio/magnetometer/hmc5843_core.c index 08fb0be100ff..914ae1acd31d 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_core.c +++ b/drivers/staging/iio/magnetometer/hmc5843_core.c @@ -101,6 +101,11 @@ static const int hmc5883_regval_to_samp_freq[][2] = { {75, 0} }; +static const int hmc5983_regval_to_samp_freq[][2] = { + {0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0}, + {75, 0}, {220, 0} +}; + /* Describe chip variants */ struct hmc5843_chip_info { const struct iio_chan_spec *channels; @@ -457,7 +462,7 @@ static const struct iio_chan_spec hmc5843_channels[] = { IIO_CHAN_SOFT_TIMESTAMP(3), }; -/* Beware: Y and Z are exchanged on HMC5883 */ +/* Beware: Y and Z are exchanged on HMC5883 and 5983 */ static const struct iio_chan_spec hmc5883_channels[] = { HMC5843_CHANNEL(X, 0), HMC5843_CHANNEL(Z, 1), @@ -504,6 +509,15 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { .n_regval_to_nanoscale = ARRAY_SIZE(hmc5883l_regval_to_nanoscale), }, + [HMC5983_ID] = { + .channels = hmc5883_channels, + .regval_to_samp_freq = hmc5983_regval_to_samp_freq, + .n_regval_to_samp_freq = + ARRAY_SIZE(hmc5983_regval_to_samp_freq), + .regval_to_nanoscale = hmc5883l_regval_to_nanoscale, + .n_regval_to_nanoscale = + ARRAY_SIZE(hmc5883l_regval_to_nanoscale), + } }; static int hmc5843_init(struct hmc5843_data *data) @@ -516,7 +530,7 @@ static int hmc5843_init(struct hmc5843_data *data) if (ret < 0) return ret; if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { - dev_err(data->dev, "no HMC5843/5883/5883L sensor\n"); + dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n"); return -ENODEV; } @@ -620,5 +634,5 @@ int hmc5843_common_remove(struct device *dev) EXPORT_SYMBOL(hmc5843_common_remove); MODULE_AUTHOR("Shubhrajyoti Datta "); -MODULE_DESCRIPTION("HMC5843/5883/5883L core driver"); +MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 core driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/staging/iio/magnetometer/hmc5843_i2c.c b/drivers/staging/iio/magnetometer/hmc5843_i2c.c index 5593a7d93a1b..6acd614cdbc6 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_i2c.c +++ b/drivers/staging/iio/magnetometer/hmc5843_i2c.c @@ -1,5 +1,5 @@ /* - * i2c driver for hmc5843/5843/5883/5883l + * i2c driver for hmc5843/5843/5883/5883l/5983 * * Split from hmc5843.c * Copyright (C) Josef Gajdusek @@ -73,6 +73,7 @@ static const struct i2c_device_id hmc5843_id[] = { { "hmc5843", HMC5843_ID }, { "hmc5883", HMC5883_ID }, { "hmc5883l", HMC5883L_ID }, + { "hmc5983", HMC5983_ID }, { } }; MODULE_DEVICE_TABLE(i2c, hmc5843_id); @@ -81,6 +82,7 @@ static const struct of_device_id hmc5843_of_match[] = { { .compatible = "honeywell,hmc5843", .data = (void *)HMC5843_ID }, { .compatible = "honeywell,hmc5883", .data = (void *)HMC5883_ID }, { .compatible = "honeywell,hmc5883l", .data = (void *)HMC5883L_ID }, + { .compatible = "honeywell,hmc5983", .data = (void *)HMC5983_ID }, {} }; MODULE_DEVICE_TABLE(of, hmc5843_of_match); @@ -98,5 +100,5 @@ static struct i2c_driver hmc5843_driver = { module_i2c_driver(hmc5843_driver); MODULE_AUTHOR("Josef Gajdusek "); -MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver"); +MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 i2c driver"); MODULE_LICENSE("GPL"); -- cgit From d3f1621960223799b19bca9b503c333a3833d7f7 Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 22 Jul 2014 16:03:00 +0100 Subject: staging:iio:hmc5843: Add support for spi hmc5983 This patch adds support for the hmc5983 spi interface. This chip is almost identical to the hmc5883. The difference being added temperature compensation, additional available sample rate (220Hz) and an SPI interface. Signed-off-by: Josef Gajdusek Signed-off-by: Jonathan Cameron --- drivers/staging/iio/magnetometer/Kconfig | 15 ++++ drivers/staging/iio/magnetometer/Makefile | 1 + drivers/staging/iio/magnetometer/hmc5843_spi.c | 100 +++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c (limited to 'drivers/staging') diff --git a/drivers/staging/iio/magnetometer/Kconfig b/drivers/staging/iio/magnetometer/Kconfig index c086f33b6311..dec814a7a073 100644 --- a/drivers/staging/iio/magnetometer/Kconfig +++ b/drivers/staging/iio/magnetometer/Kconfig @@ -22,4 +22,19 @@ config SENSORS_HMC5843_I2C - hmc5843_core (core functions) - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983) +config SENSORS_HMC5843_SPI + tristate "Honeywell HMC5983 3-Axis Magnetometer (SPI)" + depends on SPI_MASTER + select SENSORS_HMC5843 + select REGMAP_SPI + help + Say Y here to add support for the Honeywell HMC5983 3-Axis Magnetometer + (digital compass). + + This driver can also be compiled as a set of modules. + If so, these modules will be created: + - hmc5843_core (core functions) + - hmc5843_spi (support for HMC5983) + + endmenu diff --git a/drivers/staging/iio/magnetometer/Makefile b/drivers/staging/iio/magnetometer/Makefile index 65baf1c4da42..33761a19a956 100644 --- a/drivers/staging/iio/magnetometer/Makefile +++ b/drivers/staging/iio/magnetometer/Makefile @@ -4,3 +4,4 @@ obj-$(CONFIG_SENSORS_HMC5843) += hmc5843_core.o obj-$(CONFIG_SENSORS_HMC5843_I2C) += hmc5843_i2c.o +obj-$(CONFIG_SENSORS_HMC5843_SPI) += hmc5843_spi.o diff --git a/drivers/staging/iio/magnetometer/hmc5843_spi.c b/drivers/staging/iio/magnetometer/hmc5843_spi.c new file mode 100644 index 000000000000..98c4b57101c9 --- /dev/null +++ b/drivers/staging/iio/magnetometer/hmc5843_spi.c @@ -0,0 +1,100 @@ +/* + * SPI driver for hmc5983 + * + * Copyright (C) Josef Gajdusek + * + * 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 "hmc5843.h" + +static const struct regmap_range hmc5843_readable_ranges[] = { + regmap_reg_range(0, HMC5843_ID_END), +}; + +static struct regmap_access_table hmc5843_readable_table = { + .yes_ranges = hmc5843_readable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), +}; + +static const struct regmap_range hmc5843_writable_ranges[] = { + regmap_reg_range(0, HMC5843_MODE_REG), +}; + +static struct regmap_access_table hmc5843_writable_table = { + .yes_ranges = hmc5843_writable_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), +}; + +static const struct regmap_range hmc5843_volatile_ranges[] = { + regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), +}; + +static struct regmap_access_table hmc5843_volatile_table = { + .yes_ranges = hmc5843_volatile_ranges, + .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), +}; + +static struct regmap_config hmc5843_spi_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + + .rd_table = &hmc5843_readable_table, + .wr_table = &hmc5843_writable_table, + .volatile_table = &hmc5843_volatile_table, + + /* Autoincrement address pointer */ + .read_flag_mask = 0xc0, + + .cache_type = REGCACHE_RBTREE, +}; + +static int hmc5843_spi_probe(struct spi_device *spi) +{ + int ret; + + spi->mode = SPI_MODE_3; + spi->max_speed_hz = 8000000; + spi->bits_per_word = 8; + ret = spi_setup(spi); + if (ret) + return ret; + + return hmc5843_common_probe(&spi->dev, + devm_regmap_init_spi(spi, &hmc5843_spi_regmap_config), + HMC5983_ID); +} + +static int hmc5843_spi_remove(struct spi_device *spi) +{ + return hmc5843_common_remove(&spi->dev); +} + +static const struct spi_device_id hmc5843_id[] = { + { "hmc5983", HMC5983_ID }, + { } +}; + +static struct spi_driver hmc5843_driver = { + .driver = { + .name = "hmc5843", + .pm = HMC5843_PM_OPS, + .owner = THIS_MODULE, + }, + .id_table = hmc5843_id, + .probe = hmc5843_spi_probe, + .remove = hmc5843_spi_remove, +}; + +module_spi_driver(hmc5843_driver); + +MODULE_AUTHOR("Josef Gajdusek "); +MODULE_DESCRIPTION("HMC5983 SPI driver"); +MODULE_LICENSE("GPL"); -- cgit From 22d3970de02cd759df634da9566570c558f1fffa Mon Sep 17 00:00:00 2001 From: Robin Schroer Date: Wed, 23 Jul 2014 08:16:39 +0200 Subject: staging/goldfish/goldfish_audio: fix a sparse warning Fix a pointer check to use NULL instead of 0 Warning: drivers/staging/goldfish/goldfish_audio.c:300:34: warning: Using plain integer as NULL pointer Signed-off-by: Robin Schroer Acked-by: Alan Cox Signed-off-by: Greg Kroah-Hartman --- drivers/staging/goldfish/goldfish_audio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/goldfish/goldfish_audio.c b/drivers/staging/goldfish/goldfish_audio.c index 9df4ad88772b..c89d0b87a446 100644 --- a/drivers/staging/goldfish/goldfish_audio.c +++ b/drivers/staging/goldfish/goldfish_audio.c @@ -297,7 +297,7 @@ static int goldfish_audio_probe(struct platform_device *pdev) } data->buffer_virt = dmam_alloc_coherent(&pdev->dev, COMBINED_BUFFER_SIZE, &buf_addr, GFP_KERNEL); - if (data->buffer_virt == 0) { + if (data->buffer_virt == NULL) { dev_err(&pdev->dev, "allocate buffer failed\n"); return -ENOMEM; } -- cgit From 6b866095276690ea5018d9d604ecba1cd04c2023 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Wed, 23 Jul 2014 13:47:33 +0300 Subject: drivers/staging/bcm/Misc.c: fix a check The issue was reported by static analysis. The value holding flags was &-ed with 0x02, being compared to 0x01 (TRUE) after that. Such comparsion is always false. Resolution: drop the comparsion to TRUE in the condition. &-ing with 0x02 is right, according to result variable name (reporting_mode) and description in drivers/staging/bcm/target_params.h ("bit 1 = 1: CINR reporting in Idlemode Msg"). Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=80801 Reported-by: David Binderman Signed-off-by: Andrey Utkin Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Misc.c b/drivers/staging/bcm/Misc.c index a1c833c47cdf..883f7394dee6 100644 --- a/drivers/staging/bcm/Misc.c +++ b/drivers/staging/bcm/Misc.c @@ -1154,7 +1154,7 @@ static void doPowerAutoCorrection(struct bcm_mini_adapter *psAdapter) reporting_mode = ntohl(psAdapter->pstargetparams->m_u32PowerSavingModeOptions) & 0x02; psAdapter->bIsAutoCorrectEnabled = !((char)(psAdapter->ulPowerSaveMode >> 3) & 0x1); - if (reporting_mode == TRUE) { + if (reporting_mode) { BCM_DEBUG_PRINT(psAdapter, DBG_TYPE_INITEXIT, MP_INIT, DBG_LVL_ALL, "can't do suspen/resume as reporting mode is enable"); psAdapter->bDoSuspend = false; } -- cgit From e20487e52be0cd26aefe3681362b4d3c4c3deb5a Mon Sep 17 00:00:00 2001 From: Tom Jorquera Date: Wed, 23 Jul 2014 18:17:58 +0200 Subject: staging: vme: removed useless breaks in vme_user.c vme_user.c contained unnecessary breaks after gotos, which increased code size and caused code style warning. This is now fixed. Signed-off-by: Tom Jorquera Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vme/devices/vme_user.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c index 2d8497277aae..920e50addd3e 100644 --- a/drivers/staging/vme/devices/vme_user.c +++ b/drivers/staging/vme/devices/vme_user.c @@ -433,7 +433,6 @@ static loff_t vme_user_llseek(struct file *file, loff_t off, int whence) default: mutex_unlock(&image[minor].mutex); return -EINVAL; - break; } if ((absolute < 0) || (absolute >= image_size)) { @@ -511,7 +510,6 @@ static int vme_user_ioctl(struct inode *inode, struct file *file, } return retval; - break; case VME_SET_MASTER: @@ -552,7 +550,6 @@ static int vme_user_ioctl(struct inode *inode, struct file *file, } return retval; - break; case VME_SET_SLAVE: @@ -806,7 +803,6 @@ static int vme_user_probe(struct vme_dev *vdev) default: err = -EINVAL; goto err_sysfs; - break; } num = (type[i] == SLAVE_MINOR) ? i - (MASTER_MAX + 1) : i; -- cgit From c837c549ab71475f76a7d7d1cf5b7da2ae0aa4a1 Mon Sep 17 00:00:00 2001 From: Sudip Mukherjee Date: Wed, 23 Jul 2014 20:19:12 +0530 Subject: staging:bcm:Transmit.c:coding style:line over 80 char Signed-off-by: Sudip Mukherjee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Transmit.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c index 05fae925cffb..622a482e9826 100644 --- a/drivers/staging/bcm/Transmit.c +++ b/drivers/staging/bcm/Transmit.c @@ -89,7 +89,8 @@ int SendControlPacket(struct bcm_mini_adapter *Adapter, char *pControlPacket) * to the target via the host h/w interface. * @return zero(success) or -ve value(failure) */ -int SetupNextSend(struct bcm_mini_adapter *Adapter, struct sk_buff *Packet, USHORT Vcid) +int SetupNextSend(struct bcm_mini_adapter *Adapter, + struct sk_buff *Packet, USHORT Vcid) { int status = 0; bool bHeaderSupressionEnabled = false; @@ -205,7 +206,9 @@ int tx_pkt_handler(struct bcm_mini_adapter *Adapter) int status = 0; while (!kthread_should_stop()) { - /* FIXME - the timeout looks like workaround for racey usage of TxPktAvail */ + /* FIXME - the timeout looks like workaround + * for racey usage of TxPktAvail + */ if (Adapter->LinkUpStatus) wait_event_timeout(Adapter->tx_packet_wait_queue, tx_pending(Adapter), @@ -229,7 +232,8 @@ int tx_pkt_handler(struct bcm_mini_adapter *Adapter) if (Adapter->bEndPointHalted == TRUE) { Bcm_clear_halt_of_endpoints(Adapter); Adapter->bEndPointHalted = false; - StartInterruptUrb((struct bcm_interface_adapter *)(Adapter->pvInterfaceAdapter)); + StartInterruptUrb((struct bcm_interface_adapter *) + (Adapter->pvInterfaceAdapter)); } if (Adapter->LinkUpStatus && !Adapter->IdleMode) { -- cgit From 897a88d9467a35d4091a3f3f4fc56df9ee74a79d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 23 Jul 2014 13:30:59 +0200 Subject: Staging: bcm: nvm.c: Fixed variable type The variable type of the local variable 'j' should be 'int' instead of 'unsigned int'. Suggested-by: Dan Carpenter Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index 0d197c0855db..ccf874521121 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1040,7 +1040,7 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, unsigned int partoff, unsigned int i) { - unsigned int j; + int j; int bulk_read_stat; FP_FLASH_WRITE_STATUS writef = ad->fpFlashWriteWithStatusCheck; -- cgit From 64f488fb1c536e95414296112cb76cbb72089754 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 23 Jul 2014 13:31:00 +0200 Subject: Staging: bcm: nvm.c: Don't pass the index The variable 'i' does not need to be passed, as we set it to 0 (zero) anyways when starting the iteration here. Suggested-by: Dan Carpenter Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/nvm.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/nvm.c b/drivers/staging/bcm/nvm.c index ccf874521121..ce09473fbb1f 100644 --- a/drivers/staging/bcm/nvm.c +++ b/drivers/staging/bcm/nvm.c @@ -1037,9 +1037,9 @@ static int bulk_read_complete_sector(struct bcm_mini_adapter *ad, UCHAR read_bk[], PCHAR tmpbuff, unsigned int offset, - unsigned int partoff, - unsigned int i) + unsigned int partoff) { + unsigned int i; int j; int bulk_read_stat; FP_FLASH_WRITE_STATUS writef = @@ -1213,8 +1213,7 @@ static int BeceemFlashBulkWrite(struct bcm_mini_adapter *Adapter, ucReadBk, pTempBuff, uiOffsetFromSectStart, - uiPartOffset, - uiIndex)) { + uiPartOffset)) { Status = STATUS_FAILURE; goto BeceemFlashBulkWrite_EXIT; } -- cgit From 53b903093b5e63c45a7ad46385794a59a1d69a8b Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Thu, 24 Jul 2014 00:38:01 +0300 Subject: staging: ced1401: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The state of the driver hasn't improved much since it was added to staging, and no one with the hardware is currently working on it, so remove it. This commit can be reverted if someone wants to clean the driver up and move it to its proper place in the kernel. Signed-off-by: Kristina MartÅ¡enko Cc: Greg Smith Cc: Alois Schlögl Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/ced1401/Kconfig | 6 - drivers/staging/ced1401/Makefile | 3 - drivers/staging/ced1401/TODO | 10 - drivers/staging/ced1401/ced_ioc.c | 1613 -------------- drivers/staging/ced1401/ced_ioctl.h | 336 --- drivers/staging/ced1401/machine.h | 119 -- drivers/staging/ced1401/usb1401.c | 1767 ---------------- drivers/staging/ced1401/usb1401.h | 260 --- drivers/staging/ced1401/use1401.h | 288 --- drivers/staging/ced1401/use14_ioc.h | 299 --- drivers/staging/ced1401/userspace/use1401.c | 3030 --------------------------- 13 files changed, 7734 deletions(-) delete mode 100644 drivers/staging/ced1401/Kconfig delete mode 100644 drivers/staging/ced1401/Makefile delete mode 100644 drivers/staging/ced1401/TODO delete mode 100644 drivers/staging/ced1401/ced_ioc.c delete mode 100644 drivers/staging/ced1401/ced_ioctl.h delete mode 100644 drivers/staging/ced1401/machine.h delete mode 100644 drivers/staging/ced1401/usb1401.c delete mode 100644 drivers/staging/ced1401/usb1401.h delete mode 100644 drivers/staging/ced1401/use1401.h delete mode 100644 drivers/staging/ced1401/use14_ioc.h delete mode 100644 drivers/staging/ced1401/userspace/use1401.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 12b092ce0d0f..0a92dc6ab77c 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -106,8 +106,6 @@ source "drivers/staging/gdm724x/Kconfig" source "drivers/staging/silicom/Kconfig" -source "drivers/staging/ced1401/Kconfig" - source "drivers/staging/imx-drm/Kconfig" source "drivers/staging/fwserial/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 29fa5df5b969..fe5e76cd4cde 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -46,7 +46,6 @@ obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/ obj-$(CONFIG_WIMAX_GDM72XX) += gdm72xx/ obj-$(CONFIG_LTE_GDM724X) += gdm724x/ obj-$(CONFIG_NET_VENDOR_SILICOM) += silicom/ -obj-$(CONFIG_CED1401) += ced1401/ obj-$(CONFIG_DRM_IMX) += imx-drm/ obj-$(CONFIG_FIREWIRE_SERIAL) += fwserial/ obj-$(CONFIG_GOLDFISH) += goldfish/ diff --git a/drivers/staging/ced1401/Kconfig b/drivers/staging/ced1401/Kconfig deleted file mode 100644 index ae36d1b2ba99..000000000000 --- a/drivers/staging/ced1401/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ -config CED1401 - tristate "Cambridge Electronic Design 1401 USB support" - depends on USB - help - This driver supports the Cambridge Electronic Design 1401 USB device - (whatever that is.) diff --git a/drivers/staging/ced1401/Makefile b/drivers/staging/ced1401/Makefile deleted file mode 100644 index f0c114b2b4b9..000000000000 --- a/drivers/staging/ced1401/Makefile +++ /dev/null @@ -1,3 +0,0 @@ - -obj-$(CONFIG_CED1401) := cedusb.o -cedusb-objs := usb1401.o ced_ioc.o diff --git a/drivers/staging/ced1401/TODO b/drivers/staging/ced1401/TODO deleted file mode 100644 index 9fd5630bdf4d..000000000000 --- a/drivers/staging/ced1401/TODO +++ /dev/null @@ -1,10 +0,0 @@ -TODO: - - coding syle fixes - - build warning fixups - - ioctl auditing - - usb api auditing - - proper USB minor number (it's stomping on an existing one right now.) - -Please send patches to Greg Kroah-Hartman and Cc: -Alois Schlögl - diff --git a/drivers/staging/ced1401/ced_ioc.c b/drivers/staging/ced1401/ced_ioc.c deleted file mode 100644 index 8cb6ea951adf..000000000000 --- a/drivers/staging/ced1401/ced_ioc.c +++ /dev/null @@ -1,1613 +0,0 @@ -/* ced_ioc.c - ioctl part of the 1401 usb device driver for linux. - Copyright (C) 2010 Cambridge Electronic Design Ltd - Author Greg P Smith (greg@ced.co.uk) - - 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "usb1401.h" - -/**************************************************************************** -** ced_flush_out_buff -** -** Empties the Output buffer and sets int lines. Used from user level only -****************************************************************************/ -static void ced_flush_out_buff(struct ced_data *ced) -{ - dev_dbg(&ced->interface->dev, "%s: current_state=%d\n", - __func__, ced->current_state); - - /* Do nothing if hardware in trouble */ - if (ced->current_state == U14ERR_TIME) - return; - /* Kill off any pending I/O */ - /* CharSend_Cancel(ced); */ - spin_lock_irq(&ced->char_out_lock); - ced->num_output = 0; - ced->out_buff_get = 0; - ced->out_buff_put = 0; - spin_unlock_irq(&ced->char_out_lock); -} - -/**************************************************************************** -** -** ced_flush_in_buff -** -** Empties the input buffer and sets int lines -****************************************************************************/ -static void ced_flush_in_buff(struct ced_data *ced) -{ - dev_dbg(&ced->interface->dev, "%s: current_state=%d\n", - __func__, ced->current_state); - - if (ced->current_state == U14ERR_TIME) - return; /* Do nothing if hardware in trouble */ - - /* Kill off any pending I/O */ - /* CharRead_Cancel(pDevObject); */ - spin_lock_irq(&ced->char_in_lock); - ced->num_input = 0; - ced->in_buff_get = 0; - ced->in_buff_put = 0; - spin_unlock_irq(&ced->char_in_lock); -} - -/**************************************************************************** -** ced_put_chars -** -** Utility routine to copy chars into the output buffer and fire them off. -** called from user mode, holds char_out_lock. -****************************************************************************/ -static int ced_put_chars(struct ced_data *ced, const char *ch, - unsigned int count) -{ - int ret; - - spin_lock_irq(&ced->char_out_lock); /* get the output spin lock */ - if ((OUTBUF_SZ - ced->num_output) >= count) { - unsigned int u; - - for (u = 0; u < count; u++) { - ced->output_buffer[ced->out_buff_put++] = ch[u]; - if (ced->out_buff_put >= OUTBUF_SZ) - ced->out_buff_put = 0; - } - ced->num_output += count; - spin_unlock_irq(&ced->char_out_lock); - - /* ...give a chance to transmit data */ - ret = ced_send_chars(ced); - } else { - ret = U14ERR_NOOUT; /* no room at the out (ha-ha) */ - spin_unlock_irq(&ced->char_out_lock); - } - return ret; -} - -/***************************************************************************** -** Add the data in "data" local pointer of length n to the output buffer, and -** trigger an output transfer if this is appropriate. User mode. -** Holds the io_mutex -*****************************************************************************/ -int ced_send_string(struct ced_data *ced, const char __user *data, - unsigned int n) -{ - int ret = U14ERR_NOERROR; /* assume all will be well */ - char buffer[OUTBUF_SZ + 1]; /* space in our address space */ - /* for characters */ - if (n > OUTBUF_SZ) /* check space in local buffer... */ - return U14ERR_NOOUT; /* ...too many characters */ - if (copy_from_user(buffer, data, n)) - return -EFAULT; - buffer[n] = 0; /* terminate for debug purposes */ - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - if (n > 0) { /* do nothing if nowt to do! */ - dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", - __func__, n, buffer); - ret = ced_put_chars(ced, buffer, n); - } - - ced_allowi(ced); /* make sure we have input int */ - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_send_char -** -** Sends a single character to the 1401. User mode, holds io_mutex. -****************************************************************************/ -int ced_send_char(struct ced_data *ced, char c) -{ - int ret; - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - ret = ced_put_chars(ced, &c, 1); - dev_dbg(&ced->interface->dev, "ced_send_char >%c< (0x%02x)\n", c, c); - ced_allowi(ced); /* Make sure char reads are running */ - mutex_unlock(&ced->io_mutex); - return ret; -} - -/*************************************************************************** -** -** ced_get_state -** -** Retrieves state information from the 1401, adjusts the 1401 state held -** in the device extension to indicate the current 1401 type. -** -** *state is updated with information about the 1401 state as returned by the -** 1401. The low byte is a code for what 1401 is doing: -** -** 0 normal 1401 operation -** 1 sending chars to host -** 2 sending block data to host -** 3 reading block data from host -** 4 sending an escape sequence to the host -** 0x80 1401 is executing self-test, in which case the upper word -** is the last error code seen (or zero for no new error). -** -** *error is updated with error information if a self-test error code -** is returned in the upper word of state. -** -** both state and error are set to -1 if there are comms problems, and -** to zero if there is a simple failure. -** -** return error code (U14ERR_NOERROR for OK) -*/ -int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error) -{ - int got; - - dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); - - *state = 0xFFFFFFFF; /* Start off with invalid state */ - got = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), - GET_STATUS, (D_TO_H | VENDOR | DEVREQ), 0, 0, - ced->stat_buf, sizeof(ced->stat_buf), HZ); - if (got != sizeof(ced->stat_buf)) { - dev_err(&ced->interface->dev, - "%s: FAILED, return code %d\n", __func__, got); - /* Indicate that things are very wrong indeed */ - ced->current_state = U14ERR_TIME; - *state = 0; /* Force status values to a known state */ - *error = 0; - } else { - int device; - - dev_dbg(&ced->interface->dev, - "%s: Success, state: 0x%x, 0x%x\n", - __func__, ced->stat_buf[0], ced->stat_buf[1]); - - /* Return the state values to the calling code */ - *state = ced->stat_buf[0]; - - *error = ced->stat_buf[1]; - - /* 1401 type code value */ - device = ced->udev->descriptor.bcdDevice >> 8; - switch (device) { /* so we can clean up current state */ - case 0: - ced->current_state = U14ERR_U1401; - break; - - default: /* allow lots of device codes for future 1401s */ - if ((device >= 1) && (device <= 23)) - ced->current_state = (short)(device + 6); - else - ced->current_state = U14ERR_ILL; - break; - } - } - - return ced->current_state >= 0 ? U14ERR_NOERROR : ced->current_state; -} - -/**************************************************************************** -** ced_read_write_cancel -** -** Kills off staged read\write request from the USB if one is pending. -****************************************************************************/ -int ced_read_write_cancel(struct ced_data *ced) -{ - dev_dbg(&ced->interface->dev, "%s: entry %d\n", - __func__, ced->staged_urb_pending); -#ifdef NOT_WRITTEN_YET - int ntStatus = STATUS_SUCCESS; - bool bResult = false; - unsigned int i; - - /* We can fill this in when we know how we will implement the staged */ - /* transfer stuff */ - spin_lock_irq(&ced->staged_lock); - - if (ced->staged_urb_pending) {/* anything to be cancelled? */ - /* May need more... */ - dev_info(&ced->interface - dev, - "ced_read_write_cancel about to cancel Urb\n"); - /* Clear the staging done flag */ - /* KeClearEvent(&ced->StagingDoneEvent); */ - USB_ASSERT(ced->pStagedIrp != NULL); - - /* Release the spinlock first otherwise the completion */ - /* routine may hang on the spinlock while this function */ - /* hands waiting for the event. */ - spin_unlock_irq(&ced->staged_lock); - - /* Actually do the cancel */ - bResult = IoCancelIrp(ced->pStagedIrp); - if (bResult) { - LARGE_INTEGER timeout; - - /* Use a timeout of 1 second */ - timeout.QuadPart = -10000000; - dev_info(&ced->interface - dev, - "%s: about to wait till done\n", __func__); - ntStatus = - KeWaitForSingleObject(&ced->StagingDoneEvent, - Executive, KernelMode, FALSE, - &timeout); - } else { - dev_info(&ced->interface - dev, - "%s: cancellation failed\n", __func__); - ntStatus = U14ERR_FAIL; - } - USB_KdPrint(DBGLVL_DEFAULT, - ("ced_read_write_cancel ntStatus = 0x%x decimal %d\n", - ntStatus, ntStatus)); - } else - spin_unlock_irq(&ced->staged_lock); - - dev_info(&ced->interface - dev, "%s: done\n", __func__); - return ntStatus; -#else - return U14ERR_NOERROR; -#endif - -} - -/*************************************************************************** -** ced_in_self_test - utility to check in self test. Return 1 for ST, 0 for not -** or a -ve error code if we failed for some reason. -***************************************************************************/ -static int ced_in_self_test(struct ced_data *ced, unsigned int *stat) -{ - unsigned int state, error; - int ret = ced_get_state(ced, &state, &error); /* see if in self-test */ - - if (ret == U14ERR_NOERROR) /* if all still OK */ - ret = (state == (unsigned int)-1) || /* TX problem or... */ - ((state & 0xff) == 0x80); /* ...self test */ - *stat = state; /* return actual state */ - return ret; -} - -/*************************************************************************** -** ced_is_1401 - ALWAYS CALLED HOLDING THE io_mutex -** -** Tests for the current state of the 1401. Sets current_state: -** -** U14ERR_NOIF 1401 i/f card not installed (not done here) -** U14ERR_OFF 1401 apparently not switched on -** U14ERR_NC 1401 appears to be not connected -** U14ERR_ILL 1401 if it is there its not very well at all -** U14ERR_TIME 1401 appears OK, but doesn't communicate - very bad -** U14ERR_STD 1401 OK and ready for use -** U14ERR_PLUS 1401+ OK and ready for use -** U14ERR_U1401 Micro1401 OK and ready for use -** U14ERR_POWER Power1401 OK and ready for use -** U14ERR_U14012 Micro1401 mkII OK and ready for use -** -** Returns TRUE if a 1401 detected and OK, else FALSE -****************************************************************************/ -static bool ced_is_1401(struct ced_data *ced) -{ - int ret; - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ - ced_flush_in_buff(ced); /* Clear out input buffer & pipe */ - ced_flush_out_buff(ced); /* Clear output buffer & pipe */ - - /* The next call returns 0 if OK, but has returned 1 in the past, */ - /* meaning that usb_unlock_device() is needed... now it always is */ - ret = usb_lock_device_for_reset(ced->udev, ced->interface); - - /* release the io_mutex because if we don't, we will deadlock due to */ - /* system calls back into the driver. */ - mutex_unlock(&ced->io_mutex); /* locked, so we will not get */ - /* system calls */ - if (ret >= 0) { /* if we failed */ - ret = usb_reset_device(ced->udev); /* try to do the reset */ - usb_unlock_device(ced->udev); /* undo the lock */ - } - - mutex_lock(&ced->io_mutex); /* hold stuff off while we wait */ - ced->dma_flag = MODE_CHAR; /* Clear DMA mode flag regardless! */ - if (ret == 0) { /* if all is OK still */ - unsigned int state; - - ret = ced_in_self_test(ced, &state); /* see if likely in */ - /* self test */ - if (ret > 0) { /* do we need to wait for self-test? */ - /* when to give up */ - unsigned long timeout = jiffies + 30 * HZ; - - while ((ret > 0) && time_before(jiffies, timeout)) { - schedule(); /* let other stuff run */ - - /* see if done yet */ - ret = ced_in_self_test(ced, &state); - } - } - - if (ret == 0) /* if all is OK... */ - /* then success is that the state is 0 */ - ret = state == 0; - } else - ret = 0; /* we failed */ - ced->force_reset = false; /* Clear forced reset flag now */ - - return ret > 0; -} - -/**************************************************************************** -** ced_quick_check - ALWAYS CALLED HOLDING THE io_mutex -** This is used to test for a 1401. It will try to do a quick check if all is -** OK, that is the 1401 was OK the last time it was asked, and there is no DMA -** in progress, and if the bTestBuff flag is set, the character buffers must be -** empty too. If the quick check shows that the state is still the same, then -** all is OK. -** -** If any of the above conditions are not met, or if the state or type of the -** 1401 has changed since the previous test, the full ced_is_1401 test is done, -** but only if can_reset is also TRUE. -** -** The return value is TRUE if a useable 1401 is found, FALSE if not -*/ -static bool ced_quick_check(struct ced_data *ced, bool test_buff, - bool can_reset) -{ - bool ret = false; /* assume it will fail and we will reset */ - bool short_test; - - short_test = ((ced->dma_flag == MODE_CHAR) && /* no DMA running */ - (!ced->force_reset) && /* Not had a real reset forced */ - /* No 1401 errors stored */ - (ced->current_state >= U14ERR_STD)); - - dev_dbg(&ced->interface->dev, - "%s: DMAFlag:%d, state:%d, force:%d, testBuff:%d, short:%d\n", - __func__, ced->dma_flag, ced->current_state, ced->force_reset, - test_buff, short_test); - - if ((test_buff) && /* Buffer check requested, and... */ - (ced->num_input || ced->num_output)) {/* ...characters were in */ - /* the buffer? */ - short_test = false; /* Then do the full test */ - dev_dbg(&ced->interface->dev, - "%s: will reset as buffers not empty\n", __func__); - } - - if (short_test || !can_reset) { /* Still OK to try the short test? */ - /* Always test if no reset - we */ - /* want state update */ - unsigned int state, error; - - dev_dbg(&ced->interface->dev, "%s: ced_get_state\n", __func__); - - /* Check on the 1401 state */ - if (ced_get_state(ced, &state, &error) == U14ERR_NOERROR) { - /* If call worked, check the status value */ - if ((state & 0xFF) == 0) - ret = true; /* If that was zero, all is OK, */ - /* no reset needed */ - } - } - - if (!ret && can_reset) { /* If all not OK, then */ - dev_info(&ced->interface->dev, "%s: ced_is_1401 %d %d %d %d\n", - __func__, short_test, ced->current_state, test_buff, - ced->force_reset); - ret = ced_is_1401(ced); /* do full test */ - } - - return ret; -} - -/**************************************************************************** -** ced_reset -** -** Resets the 1401 and empties the i/o buffers -*****************************************************************************/ -int ced_reset(struct ced_data *ced) -{ - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - dev_dbg(&ced->interface->dev, "%s: About to call ced_quick_check\n", - __func__); - ced_quick_check(ced, true, true); /* Check 1401, reset if not OK */ - mutex_unlock(&ced->io_mutex); - return U14ERR_NOERROR; -} - -/**************************************************************************** -** ced_get_char -** -** Gets a single character from the 1401 -****************************************************************************/ -int ced_get_char(struct ced_data *ced) -{ - int ret = U14ERR_NOIN; /* assume we will get nothing */ - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - ced_allowi(ced); /* Make sure char reads are running */ - ced_send_chars(ced); /* and send any buffered chars */ - - spin_lock_irq(&ced->char_in_lock); - if (ced->num_input > 0) { /* worth looking */ - ret = ced->input_buffer[ced->in_buff_get++]; - if (ced->in_buff_get >= INBUF_SZ) - ced->in_buff_get = 0; - ced->num_input--; - } else - ret = U14ERR_NOIN; /* no input data to read */ - spin_unlock_irq(&ced->char_in_lock); - - ced_allowi(ced); /* Make sure char reads are running */ - - mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return ret; -} - -/**************************************************************************** -** ced_get_string -** -** Gets a string from the 1401. Returns chars up to the next CR or when -** there are no more to read or nowhere to put them. CR is translated to -** 0 and counted as a character. If the string does not end in a 0, we will -** add one, if there is room, but it is not counted as a character. -** -** returns the count of characters (including the terminator, or 0 if none -** or a negative error code. -****************************************************************************/ -int ced_get_string(struct ced_data *ced, char __user *user, int n) -{ - int available; /* character in the buffer */ - int ret = U14ERR_NOIN; - - if (n <= 0) - return -ENOMEM; - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(ced); /* Make sure char reads are running */ - ced_send_chars(ced); /* and send any buffered chars */ - - spin_lock_irq(&ced->char_in_lock); - available = ced->num_input; /* characters available now */ - if (available > n) /* read max of space in user... */ - available = n; /* ...or input characters */ - - if (available > 0) { /* worth looking? */ - char buffer[INBUF_SZ + 1]; /* space for a linear copy of data */ - int got = 0; - int n_copy_to_user; /* number to copy to user */ - char data; - - do { - data = ced->input_buffer[ced->in_buff_get++]; - if (data == CR_CHAR) /* replace CR with zero */ - data = (char)0; - - if (ced->in_buff_get >= INBUF_SZ) - ced->in_buff_get = 0; /* wrap buffer pointer */ - - buffer[got++] = data; /* save the output */ - } while ((got < available) && data); - - n_copy_to_user = got; /* what to copy... */ - if (data) { /* do we need null */ - buffer[got] = (char)0; /* make it tidy */ - if (got < n) /* if space in user buffer... */ - ++n_copy_to_user; /* ...copy the 0 as well. */ - } - - ced->num_input -= got; - spin_unlock_irq(&ced->char_in_lock); - - dev_dbg(&ced->interface->dev, "%s: read %d characters >%s<\n", - __func__, got, buffer); - if (copy_to_user(user, buffer, n_copy_to_user)) - ret = -EFAULT; - else - ret = got; /* report characters read */ - } else - spin_unlock_irq(&ced->char_in_lock); - - ced_allowi(ced); /* Make sure char reads are running */ - mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - - return ret; -} - -/******************************************************************************* -** Get count of characters in the inout buffer. -*******************************************************************************/ -int ced_stat_1401(struct ced_data *ced) -{ - int ret; - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(ced); /* make sure we allow pending chars */ - ced_send_chars(ced); /* in both directions */ - ret = ced->num_input; /* no lock as single read */ - mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return ret; -} - -/**************************************************************************** -** ced_line_count -** -** Returns the number of newline chars in the buffer. There is no need for -** any fancy interlocks as we only read the interrupt routine data, and the -** system is arranged so nothing can be destroyed. -****************************************************************************/ -int ced_line_count(struct ced_data *ced) -{ - int ret = 0; /* will be count of line ends */ - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - ced_allowi(ced); /* Make sure char reads are running */ - ced_send_chars(ced); /* and send any buffered chars */ - spin_lock_irq(&ced->char_in_lock); /* Get protection */ - - if (ced->num_input > 0) { /* worth looking? */ - /* start at first available */ - unsigned int index = ced->in_buff_get; - /* Position for search end */ - unsigned int end = ced->in_buff_put; - - do { - if (ced->input_buffer[index++] == CR_CHAR) - ++ret; /* inc count if CR */ - - if (index >= INBUF_SZ) /* see if we fall off buff */ - index = 0; - } while (index != end); /* go to last available */ - } - - spin_unlock_irq(&ced->char_in_lock); - dev_dbg(&ced->interface->dev, "%s: returned %d\n", __func__, ret); - mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return ret; -} - -/**************************************************************************** -** ced_get_out_buf_space -** -** Gets the space in the output buffer. Called from user code. -*****************************************************************************/ -int ced_get_out_buf_space(struct ced_data *ced) -{ - int ret; - - mutex_lock(&ced->io_mutex); /* Protect disconnect from new i/o */ - - ced_send_chars(ced); /* send any buffered chars */ - - /* no lock needed for single read */ - ret = (int)(OUTBUF_SZ - ced->num_output); - - dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, ret); - - mutex_unlock(&ced->io_mutex); /* Protect disconnect from new i/o */ - return ret; -} - -/**************************************************************************** -** -** ced_clear_area -** -** Clears up a transfer area. This is always called in the context of a user -** request, never from a call-back. -****************************************************************************/ -int ced_clear_area(struct ced_data *ced, int area) -{ - int ret = U14ERR_NOERROR; - - if ((area < 0) || (area >= MAX_TRANSAREAS)) { - ret = U14ERR_BADAREA; - dev_err(&ced->interface->dev, "%s: Attempt to clear area %d\n", - __func__, area); - } else { - /* to save typing */ - struct transarea *ta = &ced->trans_def[area]; - - if (!ta->used) /* if not used... */ - ret = U14ERR_NOTSET; /* ...nothing to be done */ - else { - /* We must save the memory we return as we shouldn't */ - /* mess with memory while holding a spin lock. */ - struct page **pages = NULL; /*save page address list*/ - int n_pages = 0; /* and number of pages */ - int np; - - dev_dbg(&ced->interface->dev, "%s: area %d\n", - __func__, area); - spin_lock_irq(&ced->staged_lock); - if ((ced->staged_id == area) - && (ced->dma_flag > MODE_CHAR)) { - /* cannot delete as in use */ - ret = U14ERR_UNLOCKFAIL; - dev_err(&ced->interface->dev, - "%s: call on area %d while active\n", - __func__, area); - } else { - pages = ta->pages; /* save page address list */ - n_pages = ta->n_pages; /* and page count */ - if (ta->event_sz)/* if events flagging in use */ - /* release anything that was waiting */ - wake_up_interruptible(&ta->event); - - if (ced->xfer_waiting - && (ced->dma_info.ident == area)) - /* Cannot have pending xfer if */ - /* area cleared */ - ced->xfer_waiting = false; - - /* Clean out the struct transarea except for */ - /* the wait queue, which is at the end. This */ - /* sets used to false and event_sz to 0 to */ - /* say area not used and no events. */ - memset(ta, 0, - sizeof(struct transarea) - - sizeof(wait_queue_head_t)); - } - spin_unlock_irq(&ced->staged_lock); - - if (pages) { /* if we decided to release the memory */ - /* Now we must undo the pinning down of the */ - /* pages. We will assume the worst and mark */ - /* all the pages as dirty. Don't be tempted */ - /* to move this up above as you must not be */ - /* holding a spin lock to do this stuff as */ - /* it is not atomic. */ - dev_dbg(&ced->interface->dev, - "%s: n_pages=%d\n", - __func__, n_pages); - - for (np = 0; np < n_pages; ++np) { - if (pages[np]) { - SetPageDirty(pages[np]); - page_cache_release(pages[np]); - } - } - - kfree(pages); - dev_dbg(&ced->interface->dev, - "%s: kfree(pages) done\n", __func__); - } - } - } - - return ret; -} - -/**************************************************************************** -** ced_set_area -** -** Sets up a transfer area - the functional part. Called by both -** ced_set_transfer and ced_set_circular. -****************************************************************************/ -static int ced_set_area(struct ced_data *ced, int area, char __user *buf, - unsigned int length, bool circular, bool circ_to_host) -{ - /* Start by working out the page aligned start of the area and the */ - /* size of the area in pages, allowing for the start not being */ - /* aligned and the end needing to be rounded up to a page boundary. */ - unsigned long start = ((unsigned long)buf) & PAGE_MASK; - unsigned int offset = ((unsigned long)buf) & (PAGE_SIZE - 1); - int len = (length + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; - - struct transarea *ta = &ced->trans_def[area]; /* to save typing */ - struct page **pages = NULL; /* space for page tables */ - int n_pages = 0; /* and number of pages */ - - int ret = ced_clear_area(ced, area); /* see if OK to use this area */ - - if ((ret != U14ERR_NOTSET) && /* if not area unused and... */ - (ret != U14ERR_NOERROR)) /* ...not all OK, then... */ - return ret; /* ...we cannot use this area */ - - /* if we cannot access the memory... */ - if (!access_ok(VERIFY_WRITE, buf, length)) - return -EFAULT; /* ...then we are done */ - - /* Now allocate space to hold the page pointer and */ - /* virtual address pointer tables */ - pages = kmalloc(len * sizeof(struct page *), GFP_KERNEL); - if (!pages) { - ret = U14ERR_NOMEMORY; - goto error; - } - dev_dbg(&ced->interface->dev, "%s: %p, length=%06x, circular %d\n", - __func__, buf, length, circular); - - /* To pin down user pages we must first */ - /* acquire the mapping semaphore. */ - n_pages = get_user_pages_fast(start, len, 1, pages); - dev_dbg(&ced->interface->dev, "%s: n_pages = %d\n", __func__, n_pages); - - if (n_pages > 0) { /* if we succeeded */ - /* If you are tempted to use page_address (form LDD3), forget */ - /* it. You MUST use kmap() or kmap_atomic() to get a virtual */ - /* address. page_address will give you (null) or at least it */ - /* does in this context with an x86 machine. */ - spin_lock_irq(&ced->staged_lock); - ta->buff = buf; /* keep start of region (user address) */ - ta->base_offset = offset; /* save offset in first page */ - /* to start of xfer */ - ta->length = length; /* Size if the region in bytes */ - ta->pages = pages; /* list of pages that are used by buffer */ - ta->n_pages = n_pages; /* number of pages */ - - ta->circular = circular; - ta->circ_to_host = circ_to_host; - - ta->blocks[0].offset = 0; - ta->blocks[0].size = 0; - ta->blocks[1].offset = 0; - ta->blocks[1].size = 0; - ta->used = true; /* This is now a used block */ - - spin_unlock_irq(&ced->staged_lock); - ret = U14ERR_NOERROR; /* say all was well */ - } else { - ret = U14ERR_LOCKFAIL; - goto error; - } - - return ret; - -error: - kfree(pages); - return ret; -} - -/**************************************************************************** -** ced_set_transfer -** -** Sets up a transfer area record. If the area is already set, we attempt to -** unset it. Unsetting will fail if the area is booked, and a transfer to that -** area is in progress. Otherwise, we will release the area and re-assign it. -****************************************************************************/ -int ced_set_transfer(struct ced_data *ced, - struct transfer_area_desc __user *utd) -{ - int ret; - struct transfer_area_desc td; - - if (copy_from_user(&td, utd, sizeof(td))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", - __func__, td.wAreaNum, td.dwLength); - /* The strange cast is done so that we don't get warnings in 32-bit */ - /* linux about the size of the pointer. The pointer is always passed */ - /* as a 64-bit object so that we don't have problems using a 32-bit */ - /* program on a 64-bit system. unsigned long is 64-bits on a 64-bit */ - /* system. */ - ret = - ced_set_area(ced, td.wAreaNum, - (char __user *)((unsigned long)td.lpvBuff), td.dwLength, - false, false); - mutex_unlock(&ced->io_mutex); - return ret; -} - -/**************************************************************************** -** ced_unset_transfer -** Erases a transfer area record -****************************************************************************/ -int ced_unset_transfer(struct ced_data *ced, int area) -{ - int ret; - - mutex_lock(&ced->io_mutex); - ret = ced_clear_area(ced, area); - mutex_unlock(&ced->io_mutex); - return ret; -} - -/**************************************************************************** -** ced_set_event -** Creates an event that we can test for based on a transfer to/from an area. -** The area must be setup for a transfer. We attempt to simulate the Windows -** driver behavior for events (as we don't actually use them), which is to -** pretend that whatever the user asked for was achieved, so we return 1 if -** try to create one, and 0 if they ask to remove (assuming all else was OK). -****************************************************************************/ -int ced_set_event(struct ced_data *ced, struct transfer_event __user *ute) -{ - int ret = U14ERR_NOERROR; - struct transfer_event te; - struct transarea *ta; - - /* get a local copy of the data */ - if (copy_from_user(&te, ute, sizeof(te))) - return -EFAULT; - - if (te.wAreaNum >= MAX_TRANSAREAS) /* the area must exist */ - return U14ERR_BADAREA; - - ta = &ced->trans_def[te.wAreaNum]; - - /* make sure we have no competitor */ - mutex_lock(&ced->io_mutex); - spin_lock_irq(&ced->staged_lock); - - if (ta->used) { /* area must be in use */ - ta->event_st = te.dwStart; /* set area regions */ - - /* set size (0 cancels it) */ - ta->event_sz = te.dwLength; - - /* set the direction */ - ta->event_to_host = te.wFlags & 1; - ta->wake_up = 0; /* zero the wake up count */ - } else - ret = U14ERR_NOTSET; - - spin_unlock_irq(&ced->staged_lock); - mutex_unlock(&ced->io_mutex); - - return ret == - U14ERR_NOERROR ? (te.iSetEvent ? 1 : U14ERR_NOERROR) : ret; -} - -/**************************************************************************** -** ced_wait_event -** Sleep the process with a timeout waiting for an event. Returns the number -** of times that a block met the event condition since we last cleared it or -** 0 if timed out, or -ve error (bad area or not set, or signal). -****************************************************************************/ -int ced_wait_event(struct ced_data *ced, int area, int time_out) -{ - int ret; - int wait; - struct transarea *ta; - - if ((unsigned)area >= MAX_TRANSAREAS) - return U14ERR_BADAREA; - - ta = &ced->trans_def[area]; - - /* convert timeout to jiffies */ - time_out = (time_out * HZ + 999) / 1000; - - /* We cannot wait holding the mutex, but we check the flags */ - /* while holding it. This may well be pointless as another */ - /* thread could get in between releasing it and the wait */ - /* call. However, this would have to clear the wake_up flag. */ - /* However, the !ta->used may help us in this case. */ - - /* make sure we have no competitor */ - mutex_lock(&ced->io_mutex); - if (!ta->used || !ta->event_sz) /* check something to */ - /* wait for... */ - return U14ERR_NOTSET; /* ...else we do nothing */ - mutex_unlock(&ced->io_mutex); - - if (time_out) - wait = wait_event_interruptible_timeout(ta->event, - ta->wake_up || - !ta->used, - time_out); - else - wait = wait_event_interruptible(ta->event, - ta->wake_up || - !ta->used); - - if (wait) - ret = -ERESTARTSYS; /* oops - we have had a SIGNAL */ - else - ret = ta->wake_up; /* else the wakeup count */ - - spin_lock_irq(&ced->staged_lock); - ta->wake_up = 0; /* clear the flag */ - spin_unlock_irq(&ced->staged_lock); - - return ret; -} - -/**************************************************************************** -** ced_test_event -** Test the event to see if a ced_wait_event would return immediately. Returns -** the number of times a block completed since the last call, or 0 if none or a -** negative error. -****************************************************************************/ -int ced_test_event(struct ced_data *ced, int area) -{ - int ret; - - if ((unsigned)area >= MAX_TRANSAREAS) - ret = U14ERR_BADAREA; - else { - struct transarea *ta = &ced->trans_def[area]; - - /* make sure we have no competitor */ - mutex_lock(&ced->io_mutex); - spin_lock_irq(&ced->staged_lock); - ret = ta->wake_up; /* get wakeup count since last call */ - ta->wake_up = 0; /* clear the count */ - spin_unlock_irq(&ced->staged_lock); - mutex_unlock(&ced->io_mutex); - } - return ret; -} - -/**************************************************************************** -** ced_get_transferInfo -** Puts the current state of the 1401 in a TGET_TX_BLOCK. -*****************************************************************************/ -int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *utx) -{ - int ret = U14ERR_NOERROR; - unsigned int dwIdent; - - mutex_lock(&ced->io_mutex); - dwIdent = ced->staged_id; /* area ident for last xfer */ - if (dwIdent >= MAX_TRANSAREAS) - ret = U14ERR_BADAREA; - else { - /* Return the best information we have - we */ - /* don't have physical addresses */ - TGET_TX_BLOCK *tx; - - tx = kzalloc(sizeof(*tx), GFP_KERNEL); - if (!tx) { - mutex_unlock(&ced->io_mutex); - return -ENOMEM; - } - tx->size = ced->trans_def[dwIdent].length; - tx->linear = (long long)((long)ced->trans_def[dwIdent].buff); - /* how many blocks we could return */ - tx->avail = GET_TX_MAXENTRIES; - tx->used = 1; /* number we actually return */ - tx->entries[0].physical = - (long long)(tx->linear + ced->staged_offset); - tx->entries[0].size = tx->size; - - if (copy_to_user(utx, tx, sizeof(*tx))) - ret = -EFAULT; - kfree(tx); - } - mutex_unlock(&ced->io_mutex); - return ret; -} - -/**************************************************************************** -** ced_kill_io -** -** Empties the host i/o buffers -****************************************************************************/ -int ced_kill_io(struct ced_data *ced) -{ - dev_dbg(&ced->interface->dev, "%s\n", __func__); - mutex_lock(&ced->io_mutex); - ced_flush_out_buff(ced); - ced_flush_in_buff(ced); - mutex_unlock(&ced->io_mutex); - return U14ERR_NOERROR; -} - -/**************************************************************************** -** ced_state_of_1401 -** -** Puts the current state of the 1401 in the Irp return buffer. -*****************************************************************************/ -int ced_state_of_1401(struct ced_data *ced) -{ - int ret; - - mutex_lock(&ced->io_mutex); - - ced_quick_check(ced, false, false); /* get state up to date, no reset */ - ret = ced->current_state; - - mutex_unlock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: %d\n", __func__, ret); - - return ret; -} - -/**************************************************************************** -** ced_start_self_test -** -** Initiates a self-test cycle. The assumption is that we have no interrupts -** active, so we should make sure that this is the case. -*****************************************************************************/ -int ced_start_self_test(struct ced_data *ced) -{ - int got; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - ced_draw_down(ced); /* wait for, then kill outstanding Urbs */ - ced_flush_in_buff(ced); /* Clear out input buffer & pipe */ - ced_flush_out_buff(ced); /* Clear output buffer & pipe */ - /* so things stay tidy */ - /* ced_read_write_cancel(pDeviceObject); */ - ced->dma_flag = MODE_CHAR; /* Clear DMA mode flags here */ - - got = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), - DB_SELFTEST, (H_TO_D | VENDOR | DEVREQ), - 0, 0, NULL, 0, HZ); /* allow 1 second timeout */ - ced->self_test_time = jiffies + HZ * 30; /* 30 seconds into the */ - /* future */ - - mutex_unlock(&ced->io_mutex); - if (got < 0) - dev_err(&ced->interface->dev, "%s: err=%d\n", __func__, got); - return got < 0 ? U14ERR_FAIL : U14ERR_NOERROR; -} - -/**************************************************************************** -** ced_check_self_test -** -** Check progress of a self-test cycle -****************************************************************************/ -int ced_check_self_test(struct ced_data *ced, TGET_SELFTEST __user *ugst) -{ - unsigned int state, error; - int ret; - TGET_SELFTEST gst; /* local work space */ - - memset(&gst, 0, sizeof(gst)); /* clear out the space (sets code 0) */ - - mutex_lock(&ced->io_mutex); - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - ret = ced_get_state(ced, &state, &error); - if (ret == U14ERR_NOERROR) /* Only accept zero if it happens twice */ - ret = ced_get_state(ced, &state, &error); - - if (ret != U14ERR_NOERROR) { /* Self-test can cause comms errors */ - /* so we assume still testing */ - dev_err(&ced->interface->dev, - "%s: ced_get_state=%d, assuming still testing\n", - __func__, ret); - state = 0x80; /* Force still-testing, no error */ - error = 0; - ret = U14ERR_NOERROR; - } - - if ((state == -1) && (error == -1)) {/* If ced_get_state had problems */ - dev_err(&ced->interface->dev, - "%s: ced_get_state failed, assuming still testing\n", - __func__); - state = 0x80; /* Force still-testing, no error */ - error = 0; - } - - if ((state & 0xFF) == 0x80) { /* If we are still in self-test */ - if (state & 0x00FF0000) { /* Have we got an error? */ - /* read the error code */ - gst.code = (state & 0x00FF0000) >> 16; - gst.x = error & 0x0000FFFF; /* Error data X */ - gst.y = (error & 0xFFFF0000) >> 16; /* and data Y */ - dev_dbg(&ced->interface->dev, - "Self-test error code %d\n", gst.code); - } else { /* No error, check for timeout */ - unsigned long now = jiffies; /* get current time */ - - if (time_after(now, ced->self_test_time)) { - gst.code = -2; /* Flag the timeout */ - dev_dbg(&ced->interface->dev, - "Self-test timed-out\n"); - } else - dev_dbg(&ced->interface->dev, - "Self-test on-going\n"); - } - } else { - gst.code = -1; /* Flag the test is done */ - dev_dbg(&ced->interface->dev, "Self-test done\n"); - } - - if (gst.code < 0) { /* If we have a problem or finished */ - /* If using the 2890 we should reset properly */ - if ((ced->n_pipes == 4) && (ced->type <= TYPEPOWER)) - ced_is_1401(ced); /* Get 1401 reset and OK */ - else - /* Otherwise check without reset unless problems */ - ced_quick_check(ced, true, true); - } - mutex_unlock(&ced->io_mutex); - - if (copy_to_user(ugst, &gst, sizeof(gst))) - return -EFAULT; - - return ret; -} - -/**************************************************************************** -** ced_type_of_1401 -** -** Returns code for standard, plus, micro1401, power1401 or none -****************************************************************************/ -int ced_type_of_1401(struct ced_data *ced) -{ - int ret = TYPEUNKNOWN; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - switch (ced->type) { - case TYPE1401: - ret = U14ERR_STD; - break; /* Handle these types directly */ - case TYPEPLUS: - ret = U14ERR_PLUS; - break; - case TYPEU1401: - ret = U14ERR_U1401; - break; - default: - if ((ced->type >= TYPEPOWER) && (ced->type <= 25)) - ret = ced->type + 4; /* We can calculate types */ - else /* for up-coming 1401 designs */ - ret = TYPEUNKNOWN; /* Don't know or not there */ - } - dev_dbg(&ced->interface->dev, "%s %d\n", __func__, ret); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_transfer_flags -** -** Returns flags on block transfer abilities -****************************************************************************/ -int ced_transfer_flags(struct ced_data *ced) -{ - /* we always have multiple DMA area diagnostics, notify and circular */ - int ret = U14TF_MULTIA | U14TF_DIAG | - U14TF_NOTIFY | U14TF_CIRCTH; - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - mutex_lock(&ced->io_mutex); - if (ced->is_usb2) /* Set flag for USB2 if appropriate */ - ret |= U14TF_USB2; - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/*************************************************************************** -** ced_dbg_cmd -** Issues a debug\diagnostic command to the 1401 along with a 32-bit datum -** This is a utility command used for dbg operations. -*/ -static int ced_dbg_cmd(struct ced_data *ced, unsigned char cmd, - unsigned int data) -{ - int ret; - - dev_dbg(&ced->interface->dev, "%s: entry\n", __func__); - ret = usb_control_msg(ced->udev, usb_sndctrlpipe(ced->udev, 0), cmd, - (H_TO_D | VENDOR | DEVREQ), - (unsigned short)data, - (unsigned short)(data >> 16), NULL, 0, HZ); - /* allow 1 second timeout */ - if (ret < 0) - dev_err(&ced->interface->dev, "%s: fail code=%d\n", - __func__, ret); - - return ret; -} - -/**************************************************************************** -** ced_dbg_peek -** -** Execute the diagnostic peek operation. Uses address, width and repeats. -****************************************************************************/ -int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb) -{ - int ret; - TDBGBLOCK db; - - if (copy_from_user(&db, udb, sizeof(db))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - - ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_PEEK, 0); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_dbg_poke -** -** Execute the diagnostic poke operation. Parameters are in the CSBLOCK struct -** in order address, size, repeats and value to poke. -****************************************************************************/ -int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb) -{ - int ret; - TDBGBLOCK db; - - if (copy_from_user(&db, udb, sizeof(db))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - - ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_POKE, db.iData); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_dbg_ramp_data -** -** Execute the diagnostic ramp data operation. Parameters are in the CSBLOCK -** struct in order address, default, enable mask, size and repeats. -****************************************************************************/ -int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb) -{ - int ret; - TDBGBLOCK db; - - if (copy_from_user(&db, udb, sizeof(db))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: @ %08x\n", __func__, db.iAddr); - - ret = ced_dbg_cmd(ced, DB_SETADD, db.iAddr); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_RAMPD, 0); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_dbg_ramp_addr -** -** Execute the diagnostic ramp address operation -****************************************************************************/ -int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb) -{ - int ret; - TDBGBLOCK db; - - if (copy_from_user(&db, udb, sizeof(db))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - ret = ced_dbg_cmd(ced, DB_SETDEF, db.iDefault); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_SETMASK, db.iMask); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_WIDTH, db.iWidth); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_REPEATS, db.iRepeats); - if (ret == U14ERR_NOERROR) - ret = ced_dbg_cmd(ced, DB_RAMPA, 0); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_dbg_get_data -** -** Retrieve the data resulting from the last debug Peek operation -****************************************************************************/ -int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb) -{ - int ret; - TDBGBLOCK db; - - memset(&db, 0, sizeof(db)); /* fill returned block with 0s */ - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - /* Read back the last peeked value from the 1401. */ - ret = usb_control_msg(ced->udev, usb_rcvctrlpipe(ced->udev, 0), - DB_DATA, (D_TO_H | VENDOR | DEVREQ), 0, 0, - &db.iData, sizeof(db.iData), HZ); - if (ret == sizeof(db.iData)) { - if (copy_to_user(udb, &db, sizeof(db))) - ret = -EFAULT; - else - ret = U14ERR_NOERROR; - } else - dev_err(&ced->interface->dev, "%s: failed, code %d\n", - __func__, ret); - - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_dbg_stop_loop -** -** Stop any never-ending debug loop, we just call ced_get_state for USB -** -****************************************************************************/ -int ced_dbg_stop_loop(struct ced_data *ced) -{ - int ret; - unsigned int uState, uErr; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s\n", __func__); - ret = ced_get_state(ced, &uState, &uErr); - mutex_unlock(&ced->io_mutex); - - return ret; -} - -/**************************************************************************** -** ced_set_circular -** -** Sets up a transfer area record for circular transfers. If the area is -** already set, we attempt to unset it. Unsetting will fail if the area is -** booked and a transfer to that area is in progress. Otherwise, we will -** release the area and re-assign it. -****************************************************************************/ -int ced_set_circular(struct ced_data *ced, - struct transfer_area_desc __user *utd) -{ - int ret; - bool to_host; - struct transfer_area_desc td; - - if (copy_from_user(&td, utd, sizeof(td))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: area:%d, size:%08x\n", - __func__, td.wAreaNum, td.dwLength); - to_host = td.eSize != 0; /* this is used as the tohost flag */ - - /* The strange cast is done so that we don't get warnings in 32-bit */ - /* linux about the size of the pointer. The pointer is always passed */ - /* as a 64-bit object so that we don't have problems using a 32-bit */ - /* program on a 64-bit system. unsigned long is 64-bits on a 64-bit */ - /* system. */ - ret = - ced_set_area(ced, td.wAreaNum, - (char __user *)((unsigned long)td.lpvBuff), td.dwLength, - true, to_host); - mutex_unlock(&ced->io_mutex); - return ret; -} - -/**************************************************************************** -** ced_get_circ_block -** -** Return the next available block of circularly-transferred data. -****************************************************************************/ -int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) -{ - int ret = U14ERR_NOERROR; - unsigned int area; - TCIRCBLOCK cb; - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - if (copy_from_user(&cb, ucb, sizeof(cb))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - - area = cb.nArea; /* Retrieve parameters first */ - cb.dwOffset = 0; /* set default result (nothing) */ - cb.dwSize = 0; - - if (area < MAX_TRANSAREAS) { /* The area number must be OK */ - /* Pointer to relevant info */ - struct transarea *ta = &ced->trans_def[area]; - - spin_lock_irq(&ced->staged_lock); /* Lock others out */ - - if ((ta->used) && (ta->circular) && /* Must be circular area */ - (ta->circ_to_host)) { /* For now at least must be to host */ - if (ta->blocks[0].size > 0) { /* Got anything? */ - cb.dwOffset = ta->blocks[0].offset; - cb.dwSize = ta->blocks[0].size; - dev_dbg(&ced->interface->dev, - "%s: return block 0: %d bytes at %d\n", - __func__, cb.dwSize, cb.dwOffset); - } - } else - ret = U14ERR_NOTSET; - - spin_unlock_irq(&ced->staged_lock); - } else - ret = U14ERR_BADAREA; - - if (copy_to_user(ucb, &cb, sizeof(cb))) - ret = -EFAULT; - - mutex_unlock(&ced->io_mutex); - return ret; -} - -/**************************************************************************** -** ced_free_circ_block -** -** Frees a block of circularly-transferred data and returns the next one. -****************************************************************************/ -int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb) -{ - int ret = U14ERR_NOERROR; - unsigned int area, start, size; - TCIRCBLOCK cb; - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - if (copy_from_user(&cb, ucb, sizeof(cb))) - return -EFAULT; - - mutex_lock(&ced->io_mutex); - - area = cb.nArea; /* Retrieve parameters first */ - start = cb.dwOffset; - size = cb.dwSize; - cb.dwOffset = 0; /* then set default result (nothing) */ - cb.dwSize = 0; - - if (area < MAX_TRANSAREAS) { /* The area number must be OK */ - /* Pointer to relevant info */ - struct transarea *ta = &ced->trans_def[area]; - - spin_lock_irq(&ced->staged_lock); /* Lock others out */ - - if ((ta->used) && (ta->circular) && /* Must be circular area */ - (ta->circ_to_host)) { /* For now at least must be to host */ - bool waiting = false; - - if ((ta->blocks[0].size >= size) && /* Got anything? */ - /* Must be legal data */ - (ta->blocks[0].offset == start)) { - ta->blocks[0].size -= size; - ta->blocks[0].offset += size; - - /* Have we emptied this block? */ - if (ta->blocks[0].size == 0) { - /* Is there a second block? */ - if (ta->blocks[1].size) { - /* Copy down block 2 data */ - ta->blocks[0] = ta->blocks[1]; - /* and mark the second */ - /* block as unused */ - ta->blocks[1].size = 0; - ta->blocks[1].offset = 0; - } else - ta->blocks[0].offset = 0; - } - - dev_dbg(&ced->interface->dev, - "%s: free %d bytes at %d, " - "return %d bytes at %d, wait=%d\n", - __func__, size, start, - ta->blocks[0].size, - ta->blocks[0].offset, - ced->xfer_waiting); - - /* Return the next available block of */ - /* memory as well */ - if (ta->blocks[0].size > 0) {/* Got anything? */ - cb.dwOffset = - ta->blocks[0].offset; - cb.dwSize = ta->blocks[0].size; - } - - waiting = ced->xfer_waiting; - if (waiting && ced->staged_urb_pending) { - dev_err(&ced->interface->dev, - "%s: ERROR: waiting xfer and " - "staged Urb pending!\n", - __func__); - waiting = false; - } - } else { - dev_err(&ced->interface->dev, - "%s: ERROR: freeing %d bytes at %d, " - "block 0 is %d bytes at %d\n", - __func__, size, start, - ta->blocks[0].size, - ta->blocks[0].offset); - ret = U14ERR_NOMEMORY; - } - - /* If we have one, kick off pending transfer */ - if (waiting) { /* Got a block xfer waiting? */ - int RWMStat = - ced_read_write_mem(ced, - !ced->dma_info.outward, - ced->dma_info.ident, - ced->dma_info.offset, - ced->dma_info.size); - if (RWMStat != U14ERR_NOERROR) - dev_err(&ced->interface->dev, - "%s: rw setup failed %d\n", - __func__, RWMStat); - } - } else - ret = U14ERR_NOTSET; - - spin_unlock_irq(&ced->staged_lock); - } else - ret = U14ERR_BADAREA; - - if (copy_to_user(ucb, &cb, sizeof(cb))) - ret = -EFAULT; - - mutex_unlock(&ced->io_mutex); - return ret; -} diff --git a/drivers/staging/ced1401/ced_ioctl.h b/drivers/staging/ced1401/ced_ioctl.h deleted file mode 100644 index 4b6c9dedb21e..000000000000 --- a/drivers/staging/ced1401/ced_ioctl.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * IOCTL calls for the CED1401 driver - * Copyright (C) 2010 Cambridge Electronic Design Ltd - * Author Greg P Smith (greg@ced.co.uk) - * - * 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. - */ -#ifndef __CED_IOCTL_H__ -#define __CED_IOCTL_H__ - -#include - -/* dma modes, only MODE_CHAR and MODE_LINEAR are used in this driver */ -#define MODE_CHAR 0 -#define MODE_LINEAR 1 - -/**************************************************************************** -** TypeDefs -*****************************************************************************/ - -struct transfer_area_desc { - long long lpvBuff; /* address of transfer area (for 64 or 32 bit) */ - unsigned int dwLength; /* length of the area */ - unsigned short wAreaNum; /* number of transfer area to set up */ - short eSize; /* element size - is tohost flag for circular */ -}; - - -struct transfer_event { - unsigned int dwStart; /* offset into the area */ - unsigned int dwLength; /* length of the region */ - unsigned short wAreaNum; /* the area number */ - unsigned short wFlags; /* bit 0 set for toHost */ - int iSetEvent; /* could be dummy in LINUX */ -}; - -#define MAX_TRANSFER_SIZE 0x4000 /* Maximum data bytes per IRP */ -#define MAX_AREA_LENGTH 0x100000 /* Maximum size of transfer area */ -#define MAX_TRANSAREAS 8 /* definitions for dma set up */ - -typedef struct TGetSelfTest { - int code; /* self-test error code */ - int x, y; /* additional information */ -} TGET_SELFTEST; - -/* Debug block used for several commands. Not all fields are used for all commands. */ -typedef struct TDbgBlock { - int iAddr; /* the address in the 1401 */ - int iRepeats; /* number of repeats */ - int iWidth; /* width in bytes 1, 2, 4 */ - int iDefault; /* default value */ - int iMask; /* mask to apply */ - int iData; /* data for poke, result for peek */ -} TDBGBLOCK; - -/* Used to collect information about a circular block from the device driver */ -typedef struct TCircBlock { - unsigned int nArea; /* the area to collect information from */ - unsigned int dwOffset; /* offset into the area to the available block */ - unsigned int dwSize; /* size of the area */ -} TCIRCBLOCK; - -/* Used to clollect the 1401 status */ -typedef struct TCSBlock { - unsigned int uiState; - unsigned int uiError; -} TCSBLOCK; - -/* - * As seen by the user, an ioctl call looks like: int ioctl(int fd, unsigned - * long cmd, char* argp); We will then have all sorts of variants on this that - * can be used to pass stuff to our driver. We will generate macros for each - * type of call so as to provide some sort of type safety in the calling: - */ -#define CED_MAGIC_IOC 0xce - -#define IOCTL_CED_SENDSTRING(n) _IOC(_IOC_WRITE, CED_MAGIC_IOC, 2, n) - -#define IOCTL_CED_RESET1401 _IO(CED_MAGIC_IOC, 3) -#define IOCTL_CED_GETCHAR _IO(CED_MAGIC_IOC, 4) -#define IOCTL_CED_SENDCHAR _IO(CED_MAGIC_IOC, 5) -#define IOCTL_CED_STAT1401 _IO(CED_MAGIC_IOC, 6) -#define IOCTL_CED_LINECOUNT _IO(CED_MAGIC_IOC, 7) -#define IOCTL_CED_GETSTRING(nMax) _IOC(_IOC_READ, CED_MAGIC_IOC, 8, nMax) - -#define IOCTL_CED_SETTRANSFER _IOW(CED_MAGIC_IOC, 11, struct transfer_area_desc) -#define IOCTL_CED_UNSETTRANSFER _IO(CED_MAGIC_IOC, 12) -#define IOCTL_CED_SETEVENT _IOW(CED_MAGIC_IOC, 13, struct transfer_event) -#define IOCTL_CED_GETOUTBUFSPACE _IO(CED_MAGIC_IOC, 14) -#define IOCTL_CED_GETBASEADDRESS _IO(CED_MAGIC_IOC, 15) -#define IOCTL_CED_GETDRIVERREVISION _IO(CED_MAGIC_IOC, 16) - -#define IOCTL_CED_GETTRANSFER _IOR(CED_MAGIC_IOC, 17, TGET_TX_BLOCK) -#define IOCTL_CED_KILLIO1401 _IO(CED_MAGIC_IOC, 18) -#define IOCTL_CED_BLKTRANSSTATE _IO(CED_MAGIC_IOC, 19) - -#define IOCTL_CED_STATEOF1401 _IO(CED_MAGIC_IOC, 23) -#define IOCTL_CED_GRAB1401 _IO(CED_MAGIC_IOC, 25) -#define IOCTL_CED_FREE1401 _IO(CED_MAGIC_IOC, 26) -#define IOCTL_CED_STARTSELFTEST _IO(CED_MAGIC_IOC, 31) -#define IOCTL_CED_CHECKSELFTEST _IOR(CED_MAGIC_IOC, 32, TGET_SELFTEST) -#define IOCTL_CED_TYPEOF1401 _IO(CED_MAGIC_IOC, 33) -#define IOCTL_CED_TRANSFERFLAGS _IO(CED_MAGIC_IOC, 34) - -#define IOCTL_CED_DBGPEEK _IOW(CED_MAGIC_IOC, 35, TDBGBLOCK) -#define IOCTL_CED_DBGPOKE _IOW(CED_MAGIC_IOC, 36, TDBGBLOCK) -#define IOCTL_CED_DBGRAMPDATA _IOW(CED_MAGIC_IOC, 37, TDBGBLOCK) -#define IOCTL_CED_DBGRAMPADDR _IOW(CED_MAGIC_IOC, 38, TDBGBLOCK) -#define IOCTL_CED_DBGGETDATA _IOR(CED_MAGIC_IOC, 39, TDBGBLOCK) -#define IOCTL_CED_DBGSTOPLOOP _IO(CED_MAGIC_IOC, 40) -#define IOCTL_CED_FULLRESET _IO(CED_MAGIC_IOC, 41) -#define IOCTL_CED_SETCIRCULAR _IOW(CED_MAGIC_IOC, 42, struct transfer_area_desc) -#define IOCTL_CED_GETCIRCBLOCK _IOWR(CED_MAGIC_IOC, 43, TCIRCBLOCK) -#define IOCTL_CED_FREECIRCBLOCK _IOWR(CED_MAGIC_IOC, 44, TCIRCBLOCK) -#define IOCTL_CED_WAITEVENT _IO(CED_MAGIC_IOC, 45) -#define IOCTL_CED_TESTEVENT _IO(CED_MAGIC_IOC, 46) - -#ifndef __KERNEL__ -/* - * If nothing said about return value, it is a U14ERR_... error code - * (U14ERR_NOERROR for none) - */ -inline int CED_SendString(int fh, const char *szText, int n) -{ - return ioctl(fh, IOCTL_CED_SENDSTRING(n), szText); -} - -inline int CED_Reset1401(int fh) -{ - return ioctl(fh, IOCTL_CED_RESET1401); -} - -/* Return the singe character or a -ve error code. */ -inline int CED_GetChar(int fh) -{ - return ioctl(fh, IOCTL_CED_GETCHAR); -} - -/* Return character count in input buffer */ -inline int CED_Stat1401(int fh) -{ - return ioctl(fh, IOCTL_CED_STAT1401); -} - -inline int CED_SendChar(int fh, char c) -{ - return ioctl(fh, IOCTL_CED_SENDCHAR, c); -} - -inline int CED_LineCount(int fh) -{ - return ioctl(fh, IOCTL_CED_LINECOUNT); -} - -/* - * return the count of characters returned. If the string was terminated by CR - * or 0, then the 0 is part of the count. Otherwise, we will add a zero if - * there is room, but it is not included in the count. The return value is 0 - * if there was nothing to read. - */ -inline int CED_GetString(int fh, char *szText, int nMax) -{ - return ioctl(fh, IOCTL_CED_GETSTRING(nMax), szText); -} - -/* returns space in the output buffer. */ -inline int CED_GetOutBufSpace(int fh) -{ - return ioctl(fh, IOCTL_CED_GETOUTBUFSPACE); -} - -/* This always returns -1 as not implemented. */ -inline int CED_GetBaseAddress(int fh) -{ - return ioctl(fh, IOCTL_CED_GETBASEADDRESS); -} - -/* returns the major revision <<16 | minor revision. */ -inline int CED_GetDriverRevision(int fh) -{ - return ioctl(fh, IOCTL_CED_GETDRIVERREVISION); -} - -inline int CED_SetTransfer(int fh, struct transfer_area_desc *pTD) -{ - return ioctl(fh, IOCTL_CED_SETTRANSFER, pTD); -} - -inline int CED_UnsetTransfer(int fh, int nArea) -{ - return ioctl(fh, IOCTL_CED_UNSETTRANSFER, nArea); -} - -inline int CED_SetEvent(int fh, struct transfer_event *pTE) -{ - return ioctl(fh, IOCTL_CED_SETEVENT, pTE); -} - -inline int CED_GetTransfer(int fh, TGET_TX_BLOCK *pTX) -{ - return ioctl(fh, IOCTL_CED_GETTRANSFER, pTX); -} - -inline int CED_KillIO1401(int fh) -{ - return ioctl(fh, IOCTL_CED_KILLIO1401); -} - -/* returns 0 if no active DMA, 1 if active */ -inline int CED_BlkTransState(int fh) -{ - return ioctl(fh, IOCTL_CED_BLKTRANSSTATE); -} - -inline int CED_StateOf1401(int fh) -{ - return ioctl(fh, IOCTL_CED_STATEOF1401); -} - -inline int CED_Grab1401(int fh) -{ - return ioctl(fh, IOCTL_CED_GRAB1401); -} - -inline int CED_Free1401(int fh) -{ - return ioctl(fh, IOCTL_CED_FREE1401); -} - -inline int CED_StartSelfTest(int fh) -{ - return ioctl(fh, IOCTL_CED_STARTSELFTEST); -} - -inline int CED_CheckSelfTest(int fh, TGET_SELFTEST *pGST) -{ - return ioctl(fh, IOCTL_CED_CHECKSELFTEST, pGST); -} - -inline int CED_TypeOf1401(int fh) -{ - return ioctl(fh, IOCTL_CED_TYPEOF1401); -} - -inline int CED_TransferFlags(int fh) -{ - return ioctl(fh, IOCTL_CED_TRANSFERFLAGS); -} - -inline int CED_DbgPeek(int fh, TDBGBLOCK *pDB) -{ - return ioctl(fh, IOCTL_CED_DBGPEEK, pDB); -} - -inline int CED_DbgPoke(int fh, TDBGBLOCK *pDB) -{ - return ioctl(fh, IOCTL_CED_DBGPOKE, pDB); -} - -inline int CED_DbgRampData(int fh, TDBGBLOCK *pDB) -{ - return ioctl(fh, IOCTL_CED_DBGRAMPDATA, pDB); -} - -inline int CED_DbgRampAddr(int fh, TDBGBLOCK *pDB) -{ - return ioctl(fh, IOCTL_CED_DBGRAMPADDR, pDB); -} - -inline int CED_DbgGetData(int fh, TDBGBLOCK *pDB) -{ - return ioctl(fh, IOCTL_CED_DBGGETDATA, pDB); -} - -inline int CED_DbgStopLoop(int fh) -{ - return ioctl(fh, IOCTL_CED_DBGSTOPLOOP); -} - -inline int CED_FullReset(int fh) -{ - return ioctl(fh, IOCTL_CED_FULLRESET); -} - -inline int CED_SetCircular(int fh, struct transfer_area_desc *pTD) -{ - return ioctl(fh, IOCTL_CED_SETCIRCULAR, pTD); -} - -inline int CED_GetCircBlock(int fh, TCIRCBLOCK *pCB) -{ - return ioctl(fh, IOCTL_CED_GETCIRCBLOCK, pCB); -} - -inline int CED_FreeCircBlock(int fh, TCIRCBLOCK *pCB) -{ - return ioctl(fh, IOCTL_CED_FREECIRCBLOCK, pCB); -} - -inline int CED_WaitEvent(int fh, int nArea, int msTimeOut) -{ - return ioctl(fh, IOCTL_CED_WAITEVENT, (nArea & 0xff)|(msTimeOut << 8)); -} - -inline int CED_TestEvent(int fh, int nArea) -{ - return ioctl(fh, IOCTL_CED_TESTEVENT, nArea); -} -#endif - -#ifdef NOTWANTEDYET -#define IOCTL_CED_REGCALLBACK _IO(CED_MAGIC_IOC, 9) /* Not used */ -#define IOCTL_CED_GETMONITORBUF _IO(CED_MAGIC_IOC, 10) /* Not used */ - -#define IOCTL_CED_BYTECOUNT _IO(CED_MAGIC_IOC, 20) /* Not used */ -#define IOCTL_CED_ZEROBLOCKCOUNT _IO(CED_MAGIC_IOC, 21) /* Not used */ -#define IOCTL_CED_STOPCIRCULAR _IO(CED_MAGIC_IOC, 22) /* Not used */ - -#define IOCTL_CED_REGISTERS1401 _IO(CED_MAGIC_IOC, 24) /* Not used */ -#define IOCTL_CED_STEP1401 _IO(CED_MAGIC_IOC, 27) /* Not used */ -#define IOCTL_CED_SET1401REGISTERS _IO(CED_MAGIC_IOC, 28) /* Not used */ -#define IOCTL_CED_STEPTILL1401 _IO(CED_MAGIC_IOC, 29) /* Not used */ -#define IOCTL_CED_SETORIN _IO(CED_MAGIC_IOC, 30) /* Not used */ - -#endif - -/* __CED_IOCTL_H__ */ -#endif diff --git a/drivers/staging/ced1401/machine.h b/drivers/staging/ced1401/machine.h deleted file mode 100644 index dbd4036d9bdd..000000000000 --- a/drivers/staging/ced1401/machine.h +++ /dev/null @@ -1,119 +0,0 @@ -/***************************************************************************** -** -** machine.h -** -** Copyright (c) Cambridge Electronic Design Limited 1991,1992,2010 -** -** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -** -** Contact CED: Cambridge Electronic Design Limited, Science Park, Milton Road -** Cambridge, CB6 0FE. -** www.ced.co.uk -** greg@ced.co.uk -** -** This file is included at the start of 'C' or 'C++' source file to define -** things for cross-platform/compiler interoperability. This used to deal with -** MSDOS/16-bit stuff, but this was all removed in Decemeber 2010. There are -** three things to consider: Windows, LINUX, mac OSX (BSD Unix) and 32 vs 64 -** bit. At the time of writing (DEC 2010) there is a consensus on the following -** and their unsigned equivalents: -** -** type bits -** char 8 -** short 16 -** int 32 -** long long 64 -** -** long is a problem as it is always 64 bits on linux/unix and is always 32 bits -** on windows. -** On windows, we define _IS_WINDOWS_ and one of WIN32 or WIN64. -** On linux we define LINUX -** On Max OSX we define MACOSX -** -*/ - -#ifndef __MACHINE_H__ -#define __MACHINE_H__ -#ifndef __KERNEL__ -#include -#include -#endif - -/* -** The initial section is to identify the operating system -*/ -#if (defined(__linux__) || defined(_linux) || defined(__linux)) && !defined(LINUX) -#define LINUX 1 -#endif - -#if (defined(__WIN32__) || defined(_WIN32)) && !defined(WIN32) -#define WIN32 1 -#endif - -#if defined(__APPLE__) -#define MACOSX -#endif - -#if defined(_WIN64) -#undef WIN32 -#undef WIN64 -#define WIN64 1 -#endif - -#if defined(WIN32) || defined(WIN64) -#define _IS_WINDOWS_ 1 -#endif - -#if defined(LINUX) || defined(MAXOSX) - #define FAR - - typedef int BOOL; /* To match Windows */ - typedef unsigned char BYTE; - #define __packed __attribute__((packed)) - #define HIWORD(x) (unsigned short)(((x)>>16) & 0xffff) - #define LOWORD(x) (unsigned short)((x) & 0xffff) -#endif - -#ifdef _IS_WINDOWS_ -#include -#define __packed -#endif - -/* -** Sort out the DllExport and DllImport macros. The GCC compiler has its own -** syntax for this, though it also supports the MS specific __declspec() as -** a synonym. -*/ -#ifdef GNUC - #define DllExport __attribute__((dllexport)) - #define DllImport __attribute__((dllimport)) -#endif - -#ifndef DllExport -#ifdef _IS_WINDOWS_ - #define DllExport __declspec(dllexport) - #define DllImport __declspec(dllimport) -#else - #define DllExport - #define DllImport -#endif -#endif /* _IS_WINDOWS_ */ - -#ifndef TRUE - #define TRUE 1 - #define FALSE 0 -#endif - -#endif diff --git a/drivers/staging/ced1401/usb1401.c b/drivers/staging/ced1401/usb1401.c deleted file mode 100644 index 99886778966b..000000000000 --- a/drivers/staging/ced1401/usb1401.c +++ /dev/null @@ -1,1767 +0,0 @@ -/******************************************************************************* - CED1401 usb driver. This basic loading is based on the usb-skeleton.c code that - is: - Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) - Copyright (C) 2012 Alois Schloegl - There is not a great deal of the skeleton left. - - All the remainder dealing specifically with the CED1401 is based on drivers - written by CED for other systems (mainly Windows) and is: - Copyright (C) 2010 Cambridge Electronic Design Ltd - Author Greg P Smith (greg@ced.co.uk) - - 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Endpoints -********* -There are 4 endpoints plus the control endpoint in the standard interface -provided by most 1401s. The control endpoint is used for standard USB requests, -plus various CED-specific transactions such as start self test, debug and get -the 1401 status. The other endpoints are: - - 1 Characters to the 1401 - 2 Characters from the 1401 - 3 Block data to the 1401 - 4 Block data to the host. - -inside the driver these are indexed as an array from 0 to 3, transactions -over the control endpoint are carried out using a separate mechanism. The -use of the endpoints is mostly straightforward, with the driver issuing -IO request packets (IRPs) as required to transfer data to and from the 1401. -The handling of endpoint 2 is different because it is used for characters -from the 1401, which can appear spontaneously and without any other driver -activity - for example to repeatedly request DMA transfers in Spike2. The -desired effect is achieved by using an interrupt endpoint which can be -polled to see if it has data available, and writing the driver so that it -always maintains a pending read IRP from that endpoint which will read the -character data and terminate as soon as the 1401 makes data available. This -works very well, some care is taken with when you kick off this character -read IRP to avoid it being active when it is not wanted but generally it -is running all the time. - -In the 2270, there are only three endpoints plus the control endpoint. In -addition to the transactions mentioned above, the control endpoint is used -to transfer character data to the 1401. The other endpoints are used as: - - 1 Characters from the 1401 - 2 Block data to the 1401 - 3 Block data to the host. - -The type of interface available is specified by the interface subclass field -in the interface descriptor provided by the 1401. See the USB_INT_ constants -for the values that this field can hold. - -**************************************************************************** -Linux implementation - -Although Linux Device Drivers (3rd Edition) was a major source of information, -it is very out of date. A lot of information was gleaned from the latest -usb_skeleton.c code (you need to download the kernel sources to get this). - -To match the Windows version, everything is done using ioctl calls. All the -device state is held in the struct ced_data. -Block transfers are done by using get_user_pages() to pin down a list of -pages that we hold a pointer to in the device driver. We also allocate a -coherent transfer buffer of size STAGED_SZ (this must be a multiple of the -bulk endpoint size so that the 1401 does not realise that we break large -transfers down into smaller pieces). We use kmap_atomic() to get a kernel -va for each page, as it is required, for copying; see ced_copy_user_space(). - -All character and data transfers are done using asynchronous IO. All Urbs are -tracked by anchoring them. Status and debug ioctls are implemented with the -synchronous non-Urb based transfers. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "usb1401.h" - -/* Define these values to match your devices */ -#define USB_CED_VENDOR_ID 0x0525 -#define USB_CED_PRODUCT_ID 0xa0f0 - -/* table of devices that work with this driver */ -static const struct usb_device_id ced_table[] = { - {USB_DEVICE(USB_CED_VENDOR_ID, USB_CED_PRODUCT_ID)}, - {} /* Terminating entry */ -}; - -MODULE_DEVICE_TABLE(usb, ced_table); - -/* Get a minor range for your devices from the usb maintainer */ -#define USB_CED_MINOR_BASE 192 - -/* our private defines. if this grows any larger, use your own .h file */ -#define MAX_TRANSFER (PAGE_SIZE - 512) -/* MAX_TRANSFER is chosen so that the VM is not stressed by - allocations > PAGE_SIZE and the number of packets in a page - is an integer 512 is the largest possible packet on EHCI */ -#define WRITES_IN_FLIGHT 8 -/* arbitrarily chosen */ - -static struct usb_driver ced_driver; - -static void ced_delete(struct kref *kref) -{ - struct ced_data *ced = to_ced_data(kref); - - /* Free up the output buffer, then free the output urb. Note that the */ - /* interface member of ced will probably be NULL, so cannot be used */ - /* to get to dev. */ - usb_free_coherent(ced->udev, OUTBUF_SZ, ced->coher_char_out, - ced->urb_char_out->transfer_dma); - usb_free_urb(ced->urb_char_out); - - /* Do the same for chan input */ - usb_free_coherent(ced->udev, INBUF_SZ, ced->coher_char_in, - ced->urb_char_in->transfer_dma); - usb_free_urb(ced->urb_char_in); - - /* Do the same for the block transfers */ - usb_free_coherent(ced->udev, STAGED_SZ, ced->coher_staged_io, - ced->staged_urb->transfer_dma); - usb_free_urb(ced->staged_urb); - - usb_put_dev(ced->udev); - kfree(ced); -} - -/* This is the driver end of the open() call from user space. */ -static int ced_open(struct inode *inode, struct file *file) -{ - struct ced_data *ced; - int retval = 0; - int subminor = iminor(inode); - struct usb_interface *interface = - usb_find_interface(&ced_driver, subminor); - if (!interface) { - pr_err("%s - error, can't find device for minor %d", __func__, - subminor); - retval = -ENODEV; - goto exit; - } - - ced = usb_get_intfdata(interface); - if (!ced) { - retval = -ENODEV; - goto exit; - } - - dev_dbg(&interface->dev, "%s: got ced\n", __func__); - - /* increment our usage count for the device */ - kref_get(&ced->kref); - - /* lock the device to allow correctly handling errors - * in resumption */ - mutex_lock(&ced->io_mutex); - - if (!ced->open_count++) { - retval = usb_autopm_get_interface(interface); - if (retval) { - ced->open_count--; - mutex_unlock(&ced->io_mutex); - kref_put(&ced->kref, ced_delete); - goto exit; - } - } else { /* uncomment this block if you want exclusive open */ - dev_err(&interface->dev, "%s: fail: already open\n", __func__); - retval = -EBUSY; - ced->open_count--; - mutex_unlock(&ced->io_mutex); - kref_put(&ced->kref, ced_delete); - goto exit; - } - /* prevent the device from being autosuspended */ - - /* save our object in the file's private structure */ - file->private_data = ced; - mutex_unlock(&ced->io_mutex); - -exit: - return retval; -} - -static int ced_release(struct inode *inode, struct file *file) -{ - struct ced_data *ced = file->private_data; - - if (ced == NULL) - return -ENODEV; - - dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - mutex_lock(&ced->io_mutex); - if (!--ced->open_count && ced->interface) /* Allow autosuspend */ - usb_autopm_put_interface(ced->interface); - mutex_unlock(&ced->io_mutex); - - /* decrement the count on our device */ - kref_put(&ced->kref, ced_delete); - return 0; -} - -static int ced_flush(struct file *file, fl_owner_t id) -{ - int res; - struct ced_data *ced = file->private_data; - - if (ced == NULL) - return -ENODEV; - - dev_dbg(&ced->interface->dev, "%s: char in pend=%d\n", - __func__, ced->read_chars_pending); - - /* wait for io to stop */ - mutex_lock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: got io_mutex\n", __func__); - ced_draw_down(ced); - - /* read out errors, leave subsequent opens a clean slate */ - spin_lock_irq(&ced->err_lock); - res = ced->errors ? (ced->errors == -EPIPE ? -EPIPE : -EIO) : 0; - ced->errors = 0; - spin_unlock_irq(&ced->err_lock); - - mutex_unlock(&ced->io_mutex); - dev_dbg(&ced->interface->dev, "%s: exit reached\n", __func__); - - return res; -} - -/*************************************************************************** -** can_accept_io_requests -** If the device is removed, interface is set NULL. We also clear our pointer -** from the interface, so we should make sure that ced is not NULL. This will -** not help with a device extension held by a file. -** return true if can accept new io requests, else false -*/ -static bool can_accept_io_requests(struct ced_data *ced) -{ - return ced && ced->interface; /* Can we accept IO requests */ -} - -/**************************************************************************** -** Callback routine to complete writes. This may need to fire off another -** urb to complete the transfer. -****************************************************************************/ -static void ced_writechar_callback(struct urb *urb) -{ - struct ced_data *ced = urb->context; - int got = urb->actual_length; /* what we transferred */ - - if (urb->status) { /* sync/async unlink faults aren't errors */ - if (! - (urb->status == -ENOENT || urb->status == -ECONNRESET - || urb->status == -ESHUTDOWN)) { - dev_err(&ced->interface->dev, - "%s: nonzero write bulk status received: %d\n", - __func__, urb->status); - } - - spin_lock(&ced->err_lock); - ced->errors = urb->status; - spin_unlock(&ced->err_lock); - got = 0; /* and tidy up again if so */ - - spin_lock(&ced->char_out_lock); /* already at irq level */ - ced->out_buff_get = 0; /* Reset the output buffer */ - ced->out_buff_put = 0; - ced->num_output = 0; /* Clear the char count */ - ced->pipe_error[0] = 1; /* Flag an error for later */ - ced->send_chars_pending = false; /* Allow other threads again */ - spin_unlock(&ced->char_out_lock); /* already at irq level */ - dev_dbg(&ced->interface->dev, - "%s: char out done, 0 chars sent\n", __func__); - } else { - dev_dbg(&ced->interface->dev, - "%s: char out done, %d chars sent\n", __func__, got); - spin_lock(&ced->char_out_lock); /* already at irq level */ - ced->num_output -= got; /* Now adjust the char send buffer */ - ced->out_buff_get += got; /* to match what we did */ - - /* Can't do this any earlier as data could be overwritten */ - if (ced->out_buff_get >= OUTBUF_SZ) - ced->out_buff_get = 0; - - if (ced->num_output > 0) { /* if more to be done... */ - int pipe = 0; /* The pipe number to use */ - int ret; - char *pDat = &ced->output_buffer[ced->out_buff_get]; - /* maximum to send */ - unsigned int count = ced->num_output; - - /* does it cross buffer end? */ - if ((ced->out_buff_get + count) > OUTBUF_SZ) - count = OUTBUF_SZ - ced->out_buff_get; - - /* we are done with stuff that changes */ - spin_unlock(&ced->char_out_lock); - - /* copy output data to the buffer */ - memcpy(ced->coher_char_out, pDat, count); - usb_fill_bulk_urb(ced->urb_char_out, ced->udev, - usb_sndbulkpipe(ced->udev, - ced->ep_addr[0]), - ced->coher_char_out, count, - ced_writechar_callback, ced); - ced->urb_char_out->transfer_flags |= - URB_NO_TRANSFER_DMA_MAP; - - /* in case we need to kill it */ - usb_anchor_urb(ced->urb_char_out, &ced->submitted); - ret = usb_submit_urb(ced->urb_char_out, GFP_ATOMIC); - dev_dbg(&ced->interface->dev, "%s: n=%d>%s<\n", - __func__, count, pDat); - - /* grab lock for errors */ - spin_lock(&ced->char_out_lock); - - if (ret) { - /* Flag an error to be handled later */ - ced->pipe_error[pipe] = 1; - /* Allow other threads again */ - ced->send_chars_pending = false; - usb_unanchor_urb(ced->urb_char_out); - dev_err(&ced->interface->dev, - "%s: usb_submit_urb() returned %d\n", - __func__, ret); - } - } else - /* Allow other threads again */ - ced->send_chars_pending = false; - - spin_unlock(&ced->char_out_lock); /* already at irq level */ - } -} - -/**************************************************************************** -** ced_send_chars -** Transmit the characters in the output buffer to the 1401. This may need -** breaking down into multiple transfers. -****************************************************************************/ -int ced_send_chars(struct ced_data *ced) -{ - int retval = U14ERR_NOERROR; - - spin_lock_irq(&ced->char_out_lock); /* Protect ourselves */ - - if ((!ced->send_chars_pending) && /* Not currently sending */ - (ced->num_output > 0) && /* has characters to output */ - (can_accept_io_requests(ced))) { /* and current activity is OK */ - unsigned int count = ced->num_output; /* Get a copy of the */ - /* character count */ - - /* Set flag to lock out other threads */ - ced->send_chars_pending = true; - - dev_dbg(&ced->interface->dev, - "Send %d chars to 1401, EP0 flag %d\n", - count, ced->n_pipes == 3); - /* If we have only 3 end points we must send the characters */ - /* to the 1401 using EP0. */ - if (ced->n_pipes == 3) { - /* For EP0 character transmissions to the 1401, we */ - /* have to hang about until they are gone, as */ - /* otherwise without more character IO activity */ - /* they will never go. */ - unsigned int i = count; /* Local char counter */ - unsigned int index = 0; /* The index into the */ - /* char buffer */ - - /* Free spinlock as we call USBD */ - spin_unlock_irq(&ced->char_out_lock); - - while ((i > 0) && (retval == U14ERR_NOERROR)) { - /* We have to break the transfer up into 64-byte chunks because of a 2270 problem */ - int n = i > 64 ? 64 : i; /* Chars for this xfer, max of 64 */ - int sent = usb_control_msg(ced->udev, - usb_sndctrlpipe(ced->udev, 0), /* use end point 0 */ - DB_CHARS, /* bRequest */ - (H_TO_D | VENDOR | DEVREQ), /* to the device, vendor request to the device */ - 0, 0, /* value and index are both 0 */ - &ced->output_buffer[index], /* where to send from */ - n, /* how much to send */ - 1000); /* timeout in jiffies */ - if (sent <= 0) { - /* if 0 chars says we timed out */ - retval = sent ? sent : -ETIMEDOUT; - dev_err(&ced->interface->dev, - "Send %d chars by EP0 failed: %d\n", - n, retval); - } else { - dev_dbg(&ced->interface->dev, - "Sent %d chars by EP0\n", n); - i -= sent; - index += sent; - } - } - - /* Protect ced changes, released by general code */ - spin_lock_irq(&ced->char_out_lock); - ced->out_buff_get = 0; /* so reset the output buffer */ - ced->out_buff_put = 0; - ced->num_output = 0; /* and clear the buffer count */ - /* Allow other threads again */ - ced->send_chars_pending = false; - } else { /* Here for sending chars normally - we hold the */ - /* spin lock */ - int pipe = 0; /* The pipe number to use */ - char *pDat = &ced->output_buffer[ced->out_buff_get]; - - /* does it cross buffer end? */ - if ((ced->out_buff_get + count) > OUTBUF_SZ) - count = OUTBUF_SZ - ced->out_buff_get; - /* we are done with stuff that changes */ - spin_unlock_irq(&ced->char_out_lock); - /* copy output data to the buffer */ - memcpy(ced->coher_char_out, pDat, count); - usb_fill_bulk_urb(ced->urb_char_out, ced->udev, - usb_sndbulkpipe(ced->udev, - ced->ep_addr[0]), - ced->coher_char_out, count, - ced_writechar_callback, ced); - ced->urb_char_out->transfer_flags |= - URB_NO_TRANSFER_DMA_MAP; - usb_anchor_urb(ced->urb_char_out, &ced->submitted); - retval = usb_submit_urb(ced->urb_char_out, GFP_KERNEL); - - /* grab lock for errors */ - spin_lock_irq(&ced->char_out_lock); - - if (retval) { - /* Flag an error to be handled later */ - ced->pipe_error[pipe] = 1; - /* Allow other threads again */ - ced->send_chars_pending = false; - /* remove from list of active urbs */ - usb_unanchor_urb(ced->urb_char_out); - } - } - } else if (ced->send_chars_pending && (ced->num_output > 0)) - dev_dbg(&ced->interface->dev, - "%s: send_chars_pending:true\n", __func__); - - dev_dbg(&ced->interface->dev, "%s: exit code: %d\n", __func__, retval); - spin_unlock_irq(&ced->char_out_lock); /* Now let go of the spinlock */ - return retval; -} - -/*************************************************************************** -** ced_copy_user_space -** This moves memory between pinned down user space and the coher_staged_io -** memory buffer we use for transfers. Copy n bytes in the directions that -** is defined by ced->staged_read. The user space is determined by the area -** in ced->staged_id and the offset in ced->staged_done. The user -** area may well not start on a page boundary, so allow for that. -** -** We have a table of physical pages that describe the area, so we can use -** this to get a virtual address that the kernel can use. -** -** ced Is our device extension which holds all we know about the transfer. -** n The number of bytes to move one way or the other. -***************************************************************************/ -static void ced_copy_user_space(struct ced_data *ced, int n) -{ - unsigned int area = ced->staged_id; - - if (area < MAX_TRANSAREAS) { - /* area to be used */ - struct transarea *ta = &ced->trans_def[area]; - unsigned int offset = - ced->staged_done + ced->staged_offset + ta->base_offset; - char *coher_buf = ced->coher_staged_io; /* coherent buffer */ - - if (!ta->used) { - dev_err(&ced->interface->dev, "%s: area %d unused\n", - __func__, area); - return; - } - - while (n) { - /* page number in table */ - int page = offset >> PAGE_SHIFT; - - if (page < ta->n_pages) { - char *address = - (char *)kmap_atomic(ta->pages[page]); - if (address) { - /* offset into the page */ - unsigned int page_off = - offset & (PAGE_SIZE - 1); - /* max to transfer on this page */ - size_t xfer = PAGE_SIZE - page_off; - - /* limit byte count if too much */ - /* for the page */ - if (xfer > n) - xfer = n; - if (ced->staged_read) - memcpy(address + page_off, - coher_buf, xfer); - else - memcpy(coher_buf, - address + page_off, - xfer); - kunmap_atomic(address); - offset += xfer; - coher_buf += xfer; - n -= xfer; - } else { - dev_err(&ced->interface->dev, - "%s: did not map page %d\n", - __func__, page); - return; - } - - } else { - dev_err(&ced->interface->dev, - "%s: exceeded pages %d\n", - __func__, page); - return; - } - } - } else - dev_err(&ced->interface->dev, "%s: bad area %d\n", - __func__, area); -} - -/* Forward declarations for stuff used circularly */ -static int ced_stage_chunk(struct ced_data *ced); - -/*************************************************************************** -** ReadWrite_Complete -** -** Completion routine for our staged read/write Irps -*/ -static void staged_callback(struct urb *urb) -{ - struct ced_data *ced = urb->context; - unsigned int got = urb->actual_length; /* what we transferred */ - bool cancel = false; - bool restart_char_input; /* used at the end */ - - spin_lock(&ced->staged_lock); /* stop ced_read_write_mem() action */ - /* while this routine is running */ - - /* clear the flag for staged IRP pending */ - ced->staged_urb_pending = false; - - if (urb->status) { /* sync/async unlink faults aren't errors */ - if (! - (urb->status == -ENOENT || urb->status == -ECONNRESET - || urb->status == -ESHUTDOWN)) { - dev_err(&ced->interface->dev, - "%s: nonzero write bulk status received: %d\n", - __func__, urb->status); - } else - dev_info(&ced->interface->dev, - "%s: staged xfer cancelled\n", __func__); - - spin_lock(&ced->err_lock); - ced->errors = urb->status; - spin_unlock(&ced->err_lock); - got = 0; /* and tidy up again if so */ - cancel = true; - } else { - dev_dbg(&ced->interface->dev, "%s: %d chars xferred\n", - __func__, got); - if (ced->staged_read) /* if reading, save to user space */ - /* copy from buffer to user */ - ced_copy_user_space(ced, got); - if (got == 0) - dev_dbg(&ced->interface->dev, "%s: ZLP\n", __func__); - } - - /* Update the transfer length based on the TransferBufferLength value */ - /* in the URB */ - ced->staged_done += got; - - dev_dbg(&ced->interface->dev, "%s: done %d bytes of %d\n", - __func__, ced->staged_done, ced->staged_length); - - if ((ced->staged_done == ced->staged_length) || /* If no more to do */ - (cancel)) { /* or this IRP was cancelled */ - /* Transfer area info */ - struct transarea *ta = &ced->trans_def[ced->staged_id]; - - dev_dbg(&ced->interface->dev, - "%s: transfer done, bytes %d, cancel %d\n", - __func__, ced->staged_done, cancel); - - /* Here is where we sort out what to do with this transfer if */ - /* using a circular buffer. We have a completed transfer that */ - /* can be assumed to fit into the transfer area. We should be */ - /* able to add this to the end of a growing block or to use */ - /* it to start a new block unless the code that calculates */ - /* the offset to use (in ced_read_write_mem) is totally duff. */ - if ((ta->circular) && - (ta->circ_to_host) && - (!cancel) && /* Time to sort out circular buffer info? */ - (ced->staged_read)) {/* Only for tohost transfers for now */ - /* If block 1 is in use we must append to it */ - if (ta->blocks[1].size > 0) { - if (ced->staged_offset == - (ta->blocks[1].offset + - ta->blocks[1].size)) { - ta->blocks[1].size += - ced->staged_length; - dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 1 now %d bytes at %d\n", - ta->blocks[1].size, - ta->blocks[1].offset); - } else { - /* Here things have gone very, very */ - /* wrong, but I cannot see how this */ - /* can actually be achieved */ - ta->blocks[1].offset = - ced->staged_offset; - ta->blocks[1].size = - ced->staged_length; - dev_err(&ced->interface->dev, - "%s: ERROR, circ block 1 re-started %d bytes at %d\n", - __func__, - ta->blocks[1].size, - ta->blocks[1].offset); - } - } else { /* If block 1 is not used, we try to add */ - /*to block 0 */ - - /* Got stored block 0 information? */ - if (ta->blocks[0].size > 0) { - /* Must append onto the */ - /*existing block 0 */ - if (ced->staged_offset == - (ta->blocks[0].offset + - ta->blocks[0].size)) { - /* Just add this transfer in */ - ta->blocks[0].size += - ced->staged_length; - dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 0 now %d bytes at %d\n", - ta->blocks[0].size, - ta->blocks[0].offset); - - } else { /* If it doesn't append, put */ - /* into new block 1 */ - ta->blocks[1].offset = - ced->staged_offset; - ta->blocks[1].size = - ced->staged_length; - dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 1 started %d bytes at %d\n", - ta->blocks[1].size, - ta->blocks[1].offset); - } - } else { /* No info stored yet, just save */ - /* in block 0 */ - ta->blocks[0].offset = - ced->staged_offset; - ta->blocks[0].size = - ced->staged_length; - dev_dbg(&ced->interface->dev, - "RWM_Complete, circ block 0 started %d bytes at %d\n", - ta->blocks[0].size, - ta->blocks[0].offset); - } - } - } - - if (!cancel) { /* Don't generate an event if cancelled */ - dev_dbg(&ced->interface->dev, - "RWM_Complete, bCircular %d, bToHost %d, eStart %d, eSize %d\n", - ta->circular, ta->event_to_host, - ta->event_st, ta->event_sz); - /* Set a user-mode event... */ - /* ...on transfers in this direction? */ - if ((ta->event_sz) && - (ced->staged_read == ta->event_to_host)) { - int wakeup = 0; /* assume */ - - /* If we have completed the right sort of DMA */ - /* transfer then set the event to notify the */ - /* user code to wake up anyone that is */ - /* waiting. */ - if ((ta->circular) && /* Circular areas use a - simpler test */ - (ta->circ_to_host)) { /* only in supported - direction */ - /* Is total data waiting up */ - /* to size limit? */ - unsigned int dwTotal = - ta->blocks[0].size + - ta->blocks[1].size; - wakeup = (dwTotal >= ta->event_sz); - } else { - unsigned int transEnd = - ced->staged_offset + - ced->staged_length; - unsigned int eventEnd = - ta->event_st + ta->event_sz; - wakeup = (ced->staged_offset < eventEnd) - && (transEnd > ta->event_st); - } - - if (wakeup) { - dev_dbg(&ced->interface->dev, - "About to set event to notify app\n"); - - /* wake up waiting processes */ - wake_up_interruptible(&ta->event); - /* increment wakeup count */ - ++ta->wake_up; - } - } - } - - /* Switch back to char mode before ced_read_write_mem call */ - ced->dma_flag = MODE_CHAR; - - /* Don't look for waiting transfer if cancelled */ - if (!cancel) { - /* If we have a transfer waiting, kick it off */ - if (ced->xfer_waiting) {/* Got a block xfer waiting? */ - int retval; - - dev_info(&ced->interface->dev, - "*** RWM_Complete *** pending transfer will now be set up!!!\n"); - retval = - ced_read_write_mem(ced, - !ced->dma_info.outward, - ced->dma_info.ident, - ced->dma_info.offset, - ced->dma_info.size); - - if (retval) - dev_err(&ced->interface->dev, - "RWM_Complete rw setup failed %d\n", - retval); - } - } - - } else /* Here for more to do */ - ced_stage_chunk(ced); /* fire off the next bit */ - - /* While we hold the staged_lock, see if we should reallow character */ - /* input ints */ - /* Don't allow if cancelled, or if a new block has started or if */ - /* there is a waiting block. */ - /* This feels wrong as we should ask which spin lock protects */ - /* dma_flag. */ - restart_char_input = !cancel && (ced->dma_flag == MODE_CHAR) && - !ced->xfer_waiting; - - spin_unlock(&ced->staged_lock); /* Finally release the lock again */ - - /* This is not correct as dma_flag is protected by the staged lock, */ - /* but it is treated in ced_allowi as if it were protected by the */ - /* char lock. In any case, most systems will not be upset by char */ - /* input during DMA... sigh. Needs sorting out. */ - if (restart_char_input) /* may be out of date, but... */ - ced_allowi(ced); /* ...ced_allowi tests a lock too. */ - dev_dbg(&ced->interface->dev, "%s: done\n", __func__); -} - -/**************************************************************************** -** ced_stage_chunk -** -** Generates the next chunk of data making up a staged transfer. -** -** The calling code must have acquired the staging spinlock before calling -** this function, and is responsible for releasing it. We are at callback level. -****************************************************************************/ -static int ced_stage_chunk(struct ced_data *ced) -{ - int retval = U14ERR_NOERROR; - unsigned int chunk_size; - int pipe = ced->staged_read ? 3 : 2; /* The pipe number to use for */ - /* reads or writes */ - - if (ced->n_pipes == 3) - pipe--; /* Adjust for the 3-pipe case */ - - if (pipe < 0) /* and trap case that should never happen */ - return U14ERR_FAIL; - - if (!can_accept_io_requests(ced)) { /* got sudden remove? */ - dev_info(&ced->interface->dev, "%s: sudden remove, giving up\n", - __func__); - return U14ERR_FAIL; /* could do with a better error */ - } - - /* transfer length remaining */ - chunk_size = (ced->staged_length - ced->staged_done); - if (chunk_size > STAGED_SZ) /* make sure to keep legal */ - chunk_size = STAGED_SZ; /* limit to max allowed */ - - if (!ced->staged_read) /* if writing... */ - /* ...copy data into the buffer */ - ced_copy_user_space(ced, chunk_size); - - usb_fill_bulk_urb(ced->staged_urb, ced->udev, - ced->staged_read ? usb_rcvbulkpipe(ced->udev, - ced-> - ep_addr[pipe]) : - usb_sndbulkpipe(ced->udev, ced->ep_addr[pipe]), - ced->coher_staged_io, chunk_size, - staged_callback, ced); - ced->staged_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - /* in case we need to kill it */ - usb_anchor_urb(ced->staged_urb, &ced->submitted); - retval = usb_submit_urb(ced->staged_urb, GFP_ATOMIC); - if (retval) { - usb_unanchor_urb(ced->staged_urb); /* kill it */ - ced->pipe_error[pipe] = 1; /* Flag an error to be */ - /* handled later */ - dev_err(&ced->interface->dev, - "%s: submit urb failed, code %d\n", - __func__, retval); - } else - /* Set the flag for staged URB pending */ - ced->staged_urb_pending = true; - dev_dbg(&ced->interface->dev, "%s: done so far:%d, this size:%d\n", - __func__, ced->staged_done, chunk_size); - - return retval; -} - -/*************************************************************************** -** ced_read_write_mem -** -** This routine is used generally for block read and write operations. -** Breaks up a read or write in to specified sized chunks, as specified by pipe -** information on maximum transfer size. -** -** Any code that calls this must be holding the staged_lock -** -** Arguments: -** DeviceObject - pointer to our FDO (Functional Device Object) -** read - TRUE for read, FALSE for write. This is from POV of the driver -** ident - the transfer area number - defines memory area and more. -** offs - the start offset within the transfer area of the start of this -** transfer. -** len - the number of bytes to transfer. -*/ -int ced_read_write_mem(struct ced_data *ced, bool read, unsigned short ident, - unsigned int offs, unsigned int len) -{ - /* Transfer area info */ - struct transarea *ta = &ced->trans_def[ident]; - - /* Are we in a state to accept new requests? */ - if (!can_accept_io_requests(ced)) { - dev_err(&ced->interface->dev, "%s: can't accept requests\n", - __func__); - return U14ERR_FAIL; - } - - dev_dbg(&ced->interface->dev, - "%s: xfer %d bytes to %s, offset %d, area %d\n", - __func__, len, read ? "host" : "1401", offs, ident); - - /* Amazingly, we can get an escape sequence back before the current */ - /* staged Urb is done, so we have to check for this situation and, if */ - /* so, wait until all is OK. */ - if (ced->staged_urb_pending) { - ced->xfer_waiting = true; /* Flag we are waiting */ - dev_info(&ced->interface->dev, - "%s: xfer is waiting, as previous staged pending\n", - __func__); - return U14ERR_NOERROR; - } - - if (len == 0) { /* allow 0-len read or write; just return success */ - dev_dbg(&ced->interface->dev, - "%s: OK; zero-len read/write request\n", __func__); - return U14ERR_NOERROR; - } - - if ((ta->circular) && /* Circular transfer? */ - (ta->circ_to_host) && (read)) { /* In a supported direction */ - /* If so, we sort out offset ourself */ - bool bWait = false; /* Flag for transfer having to wait */ - - dev_dbg(&ced->interface->dev, - "Circular buffers are %d at %d and %d at %d\n", - ta->blocks[0].size, ta->blocks[0].offset, - ta->blocks[1].size, ta->blocks[1].offset); - - /* Using the second block already? */ - if (ta->blocks[1].size > 0) { - /* take offset from that */ - offs = ta->blocks[1].offset + ta->blocks[1].size; - /* Wait if will overwrite block 0? */ - bWait = (offs + len) > ta->blocks[0].offset; - /* or if it overflows the buffer */ - bWait |= (offs + len) > ta->length; - } else { /* Area 1 not in use, try to use area 0 */ - /* Reset block 0 if not in use */ - if (ta->blocks[0].size == 0) - ta->blocks[0].offset = 0; - offs = - ta->blocks[0].offset + - ta->blocks[0].size; - /* Off the end of the buffer? */ - if ((offs + len) > ta->length) { - /* Set up to use second block */ - ta->blocks[1].offset = 0; - offs = 0; - /* Wait if will overwrite block 0? */ - bWait = (offs + len) > ta->blocks[0].offset; - /* or if it overflows the buffer */ - bWait |= (offs + len) > ta->length; - } - } - - if (bWait) { /* This transfer will have to wait? */ - ced->xfer_waiting = true; /* Flag we are waiting */ - dev_dbg(&ced->interface->dev, - "%s: xfer waiting for circular buffer space\n", - __func__); - return U14ERR_NOERROR; - } - - dev_dbg(&ced->interface->dev, - "%s: circular xfer, %d bytes starting at %d\n", - __func__, len, offs); - } - /* Save the parameters for the read\write transfer */ - ced->staged_read = read; /* Save the parameters for this read */ - ced->staged_id = ident; /* ID allows us to get transfer area info */ - ced->staged_offset = offs; /* The area within the transfer area */ - ced->staged_length = len; - ced->staged_done = 0; /* Initialise the byte count */ - ced->dma_flag = MODE_LINEAR; /* Set DMA mode flag at this point */ - ced->xfer_waiting = false; /* Clearly not a transfer waiting now */ - -/* KeClearEvent(&ced->StagingDoneEvent); // Clear the transfer done event */ - ced_stage_chunk(ced); /* fire off the first chunk */ - - return U14ERR_NOERROR; -} - -/**************************************************************************** -** -** ced_read_char -** -** Reads a character a buffer. If there is no more -** data we return FALSE. Used as part of decoding a DMA request. -** -****************************************************************************/ -static bool ced_read_char(unsigned char *character, char *buf, - unsigned int *n_done, unsigned int got) -{ - bool read = false; - unsigned int done = *n_done; - - if (done < got) { /* If there is more data */ - /* Extract the next char */ - *character = (unsigned char)buf[done]; - done++; /* Increment the done count */ - *n_done = done; - read = true; /* and flag success */ - } - - return read; -} - -#ifdef NOTUSED -/**************************************************************************** -** -** ced_read_word -** -** Reads a word from the 1401, just uses ced_read_char twice; -** passes on any error -** -*****************************************************************************/ -static bool ced_read_word(unsigned short *word, char *buf, unsigned int *n_done, - unsigned int got) -{ - if (ced_read_char((unsigned char *)word, buf, n_done, got)) - return ced_read_char(((unsigned char *)word) + 1, buf, n_done, - got); - else - return false; -} -#endif - -/**************************************************************************** -** ced_read_huff -** -** Reads a coded number in and returns it, Code is: -** If data is in range 0..127 we receive 1 byte. If data in range 128-16383 -** we receive two bytes, top bit of first indicates another on its way. If -** data in range 16384-4194303 we get three bytes, top two bits of first set -** to indicate three byte total. -** -*****************************************************************************/ -static bool ced_read_huff(volatile unsigned int *word, char *buf, - unsigned int *n_done, unsigned int got) -{ - unsigned char c; /* for each read to ced_read_char */ - bool retval = true; /* assume we will succeed */ - unsigned int data = 0; /* Accumulator for the data */ - - if (ced_read_char(&c, buf, n_done, got)) { - data = c; /* copy the data */ - if ((data & 0x00000080) != 0) { /* Bit set for more data ? */ - data &= 0x0000007F; /* Clear the relevant bit */ - if (ced_read_char(&c, buf, n_done, got)) { - data = (data << 8) | c; - - /* three byte sequence ? */ - if ((data & 0x00004000) != 0) { - /* Clear the relevant bit */ - data &= 0x00003FFF; - if (ced_read_char - (&c, buf, n_done, got)) - data = (data << 8) | c; - else - retval = false; - } - } else - retval = false; /* couldn't read data */ - } - } else - retval = false; - - *word = data; /* return the data */ - return retval; -} - -/*************************************************************************** -** -** ced_read_dma_info -** -** Tries to read info about the dma request from the 1401 and decode it into -** the dma descriptor block. We have at this point had the escape character -** from the 1401 and now we must read in the rest of the information about -** the transfer request. Returns FALSE if 1401 fails to respond or obselete -** code from 1401 or bad parameters. -** -** The buf char pointer does not include the initial escape character, so -** we start handling the data at offset zero. -** -*****************************************************************************/ -static bool ced_read_dma_info(volatile struct dmadesc *dma_desc, - struct ced_data *ced, - char *buf, unsigned int count) -{ - bool retval = false; /* assume we won't succeed */ - unsigned char c; - unsigned int n_done = 0; /* We haven't parsed anything so far */ - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - if (ced_read_char(&c, buf, &n_done, count)) { - /* get code for transfer type */ - unsigned char trans_code = (c & 0x0F); - /* and area identifier */ - unsigned short ident = ((c >> 4) & 0x07); - - /* fill in the structure we were given */ - dma_desc->trans_type = trans_code; /* type of transfer */ - dma_desc->ident = ident; /* area to use */ - dma_desc->size = 0; /* initialise other bits */ - dma_desc->offset = 0; - - dev_dbg(&ced->interface->dev, "%s: type: %d ident: %d\n", - __func__, dma_desc->trans_type, dma_desc->ident); - - /* set transfer direction */ - dma_desc->outward = (trans_code != TM_EXTTOHOST); - - switch (trans_code) { - - /* Extended linear transfer modes (the only ones!) */ - case TM_EXTTOHOST: - case TM_EXTTO1401: - { - retval = - ced_read_huff(&(dma_desc->offset), buf, - &n_done, count) - && ced_read_huff(&(dma_desc->size), buf, - &n_done, count); - if (retval) { - dev_dbg(&ced->interface->dev, - "%s: xfer offset & size %d %d\n", - __func__, dma_desc->offset, - dma_desc->size); - - if ((ident >= MAX_TRANSAREAS) || /* Illegal area number, or... */ - (!ced->trans_def[ident].used) || /* area not set up, or... */ - (dma_desc->offset > ced->trans_def[ident].length) || /* range/size */ - ((dma_desc->offset + - dma_desc->size) > - (ced->trans_def[ident].length))) { - /* bad parameter(s) */ - retval = false; - dev_dbg(&ced->interface->dev, - "%s: bad param - id %d, bUsed %d, offset %d, size %d, area length %d\n", - __func__, ident, - ced->trans_def[ident]. - used, - dma_desc->offset, - dma_desc->size, - ced->trans_def[ident]. - length); - } - } - break; - } - default: - break; - } - } else - retval = false; - - if (!retval) /* now check parameters for validity */ - dev_err(&ced->interface->dev, - "%s: error reading Esc sequence\n", - __func__); - - return retval; -} - -/**************************************************************************** -** -** ced_handle_esc -** -** Deals with an escape sequence coming from the 1401. This can either be -** a DMA transfer request of various types or a response to an escape sequence -** sent to the 1401. This is called from a callback. -** -** Parameters are -** -** count - the number of characters in the device extension char in buffer, -** this is known to be at least 2 or we will not be called. -** -****************************************************************************/ -static int ced_handle_esc(struct ced_data *ced, char *ch, - unsigned int count) -{ - int retval = U14ERR_FAIL; - - /* I have no idea what this next test is about. '?' is 0x3f, which is */ - /* area 3, code 15. At the moment, this is not used, so it does no */ - /* harm, but unless someone can tell me what this is for, it should */ - /* be removed from this and the Windows driver. */ - if (ch[0] == '?') { /* Is this an information response */ - /* Parse and save the information */ - } else { - spin_lock(&ced->staged_lock); /* Lock others out */ - - /* Get DMA parameters */ - if (ced_read_dma_info(&ced->dma_info, ced, ch, count)) { - /* check transfer type */ - unsigned short trans_type = ced->dma_info.trans_type; - - dev_dbg(&ced->interface->dev, - "%s: xfer to %s, offset %d, length %d\n", - __func__, - ced->dma_info.outward ? "1401" : "host", - ced->dma_info.offset, ced->dma_info.size); - - /* Check here for badly out of kilter... */ - if (ced->xfer_waiting) { - /* This can never happen, really */ - dev_err(&ced->interface->dev, - "ERROR: DMA setup while transfer still waiting\n"); - } else { - if ((trans_type == TM_EXTTOHOST) - || (trans_type == TM_EXTTO1401)) { - retval = - ced_read_write_mem(ced, - !ced->dma_info.outward, - ced->dma_info.ident, - ced->dma_info.offset, - ced->dma_info.size); - if (retval != U14ERR_NOERROR) - dev_err(&ced->interface->dev, - "%s: ced_read_write_mem() failed %d\n", - __func__, retval); - } else /* This covers non-linear - transfer setup */ - dev_err(&ced->interface->dev, - "%s: Unknown block xfer type %d\n", - __func__, trans_type); - } - } else /* Failed to read parameters */ - dev_err(&ced->interface->dev, "%s: ced_read_dma_info() fail\n", - __func__); - - spin_unlock(&ced->staged_lock); /* OK here */ - } - - dev_dbg(&ced->interface->dev, "%s: returns %d\n", __func__, retval); - - return retval; -} - -/**************************************************************************** -** Callback for the character read complete or error -****************************************************************************/ -static void ced_readchar_callback(struct urb *urb) -{ - struct ced_data *ced = urb->context; - int got = urb->actual_length; /* what we transferred */ - - if (urb->status) { /* Do we have a problem to handle? */ - /* The pipe number to use for error */ - int pipe = ced->n_pipes == 4 ? 1 : 0; - /* sync/async unlink faults aren't errors... */ - /* just saying device removed or stopped */ - if (! - (urb->status == -ENOENT || urb->status == -ECONNRESET - || urb->status == -ESHUTDOWN)) { - dev_err(&ced->interface->dev, - "%s: nonzero write bulk status received: %d\n", - __func__, urb->status); - } else - dev_dbg(&ced->interface->dev, - "%s: 0 chars urb->status=%d (shutdown?)\n", - __func__, urb->status); - - spin_lock(&ced->err_lock); - ced->errors = urb->status; - spin_unlock(&ced->err_lock); - got = 0; /* and tidy up again if so */ - - spin_lock(&ced->char_in_lock); /* already at irq level */ - ced->pipe_error[pipe] = 1; /* Flag an error for later */ - } else { - /* Esc sequence? */ - if ((got > 1) && ((ced->coher_char_in[0] & 0x7f) == 0x1b)) { - /* handle it */ - ced_handle_esc(ced, &ced->coher_char_in[1], got - 1); - - /* already at irq level */ - spin_lock(&ced->char_in_lock); - } else { - /* already at irq level */ - spin_lock(&ced->char_in_lock); - - if (got > 0) { - unsigned int i; - - if (got < INBUF_SZ) { - /* tidy the string */ - ced->coher_char_in[got] = 0; - dev_dbg(&ced->interface->dev, - "%s: got %d chars >%s<\n", - __func__, got, - ced->coher_char_in); - } - /* We know that whatever we read must fit */ - /* in the input buffer */ - for (i = 0; i < got; i++) { - ced->input_buffer[ced->in_buff_put++] = - ced->coher_char_in[i] & 0x7F; - if (ced->in_buff_put >= INBUF_SZ) - ced->in_buff_put = 0; - } - - if ((ced->num_input + got) <= INBUF_SZ) - /* Adjust the buffer count */ - /* accordingly */ - ced->num_input += got; - } else - dev_dbg(&ced->interface->dev, "%s: read ZLP\n", - __func__); - } - } - - ced->read_chars_pending = false; /* No longer have a pending read */ - spin_unlock(&ced->char_in_lock); /* already at irq level */ - - ced_allowi(ced); /* see if we can do the next one */ -} - -/**************************************************************************** -** ced_allowi -** -** This is used to make sure that there is always a pending input transfer so -** we can pick up any inward transfers. This can be called in multiple contexts -** so we use the irqsave version of the spinlock. -****************************************************************************/ -int ced_allowi(struct ced_data *ced) -{ - int retval = U14ERR_NOERROR; - unsigned long flags; - - /* can be called in multiple contexts */ - spin_lock_irqsave(&ced->char_in_lock, flags); - - /* We don't want char input running while DMA is in progress as we */ - /* know that this can cause sequencing problems for the 2270. So */ - /* don't. It will also allow the ERR response to get back to the host */ - /* code too early on some PCs, even if there is no actual driver */ - /* failure, so we don't allow this at all. */ - if (!ced->in_draw_down && /* stop input if */ - !ced->read_chars_pending && /* If no read request outstanding */ - (ced->num_input < (INBUF_SZ / 2)) && /* and there is some space */ - (ced->dma_flag == MODE_CHAR) && /* not doing any DMA */ - (!ced->xfer_waiting) && /* no xfer waiting to start */ - (can_accept_io_requests(ced))) { /* and activity is generally OK */ - /* then off we go */ - /* max we could read */ - unsigned int max = INBUF_SZ - ced->num_input; - /* The pipe number to use */ - int pipe = ced->n_pipes == 4 ? 1 : 0; - - dev_dbg(&ced->interface->dev, "%s: %d chars in input buffer\n", - __func__, ced->num_input); - - usb_fill_int_urb(ced->urb_char_in, ced->udev, - usb_rcvintpipe(ced->udev, ced->ep_addr[pipe]), - ced->coher_char_in, max, ced_readchar_callback, - ced, ced->interval); - - /* short xfers are OK by default */ - ced->urb_char_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - - /* in case we need to kill it */ - usb_anchor_urb(ced->urb_char_in, &ced->submitted); - - retval = usb_submit_urb(ced->urb_char_in, GFP_ATOMIC); - if (retval) { - /* remove from list of active Urbs */ - usb_unanchor_urb(ced->urb_char_in); - /* Flag an error to be handled later */ - ced->pipe_error[pipe] = 1; - dev_err(&ced->interface->dev, - "%s: submit urb failed: %d\n", - __func__, retval); - } else - /* Flag that we are active here */ - ced->read_chars_pending = true; - } - - spin_unlock_irqrestore(&ced->char_in_lock, flags); - - return retval; -} - -/***************************************************************************** -** The ioctl entry point to the driver that is used by us to talk to it. -** inode The device node (no longer in 3.0.0 kernels) -** file The file that is open, which holds our ced pointer -** arg The argument passed in. Note that long is 64-bits in 64-bit system, -** i.e. it is big enough for a 64-bit pointer. -*****************************************************************************/ -static long ced_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -{ - int err = 0; - struct ced_data *ced = file->private_data; - - if (!can_accept_io_requests(ced)) /* check we still exist */ - return -ENODEV; - - /* Check that access is allowed, where is is needed. Anything that */ - /* would have an indeterminate size will be checked by the */ - /* specific command. */ - if (_IOC_DIR(cmd) & _IOC_READ) /* read from point of view of user... */ - /* is kernel write */ - err = !access_ok(VERIFY_WRITE, - (void __user *)arg, _IOC_SIZE(cmd)); - else if (_IOC_DIR(cmd) & _IOC_WRITE) /* and write from point of */ - /* view of user... */ - /* is kernel read */ - err = !access_ok(VERIFY_READ, - (void __user *)arg, _IOC_SIZE(cmd)); - if (err) - return -EFAULT; - - switch (_IOC_NR(cmd)) { - case _IOC_NR(IOCTL_CED_SENDSTRING(0)): - return ced_send_string(ced, (const char __user *)arg, - _IOC_SIZE(cmd)); - - case _IOC_NR(IOCTL_CED_RESET1401): - return ced_reset(ced); - - case _IOC_NR(IOCTL_CED_GETCHAR): - return ced_get_char(ced); - - case _IOC_NR(IOCTL_CED_SENDCHAR): - return ced_send_char(ced, (char)arg); - - case _IOC_NR(IOCTL_CED_STAT1401): - return ced_stat_1401(ced); - - case _IOC_NR(IOCTL_CED_LINECOUNT): - return ced_line_count(ced); - - case _IOC_NR(IOCTL_CED_GETSTRING(0)): - return ced_get_string(ced, (char __user *)arg, _IOC_SIZE(cmd)); - - case _IOC_NR(IOCTL_CED_SETTRANSFER): - return ced_set_transfer(ced, - (struct transfer_area_desc __user *) arg); - - case _IOC_NR(IOCTL_CED_UNSETTRANSFER): - return ced_unset_transfer(ced, (int)arg); - - case _IOC_NR(IOCTL_CED_SETEVENT): - return ced_set_event(ced, - (struct transfer_event __user *) arg); - - case _IOC_NR(IOCTL_CED_GETOUTBUFSPACE): - return ced_get_out_buf_space(ced); - - case _IOC_NR(IOCTL_CED_GETBASEADDRESS): - return -1; - - case _IOC_NR(IOCTL_CED_GETDRIVERREVISION): - /* USB | MAJOR | MINOR */ - return (2 << 24) | (DRIVERMAJREV << 16) | DRIVERMINREV; - - case _IOC_NR(IOCTL_CED_GETTRANSFER): - return ced_get_transfer(ced, (TGET_TX_BLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_KILLIO1401): - return ced_kill_io(ced); - - case _IOC_NR(IOCTL_CED_STATEOF1401): - return ced_state_of_1401(ced); - - case _IOC_NR(IOCTL_CED_GRAB1401): - case _IOC_NR(IOCTL_CED_FREE1401): - return U14ERR_NOERROR; - - case _IOC_NR(IOCTL_CED_STARTSELFTEST): - return ced_start_self_test(ced); - - case _IOC_NR(IOCTL_CED_CHECKSELFTEST): - return ced_check_self_test(ced, (TGET_SELFTEST __user *) arg); - - case _IOC_NR(IOCTL_CED_TYPEOF1401): - return ced_type_of_1401(ced); - - case _IOC_NR(IOCTL_CED_TRANSFERFLAGS): - return ced_transfer_flags(ced); - - case _IOC_NR(IOCTL_CED_DBGPEEK): - return ced_dbg_peek(ced, (TDBGBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_DBGPOKE): - return ced_dbg_poke(ced, (TDBGBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_DBGRAMPDATA): - return ced_dbg_ramp_data(ced, (TDBGBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_DBGRAMPADDR): - return ced_dbg_ramp_addr(ced, (TDBGBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_DBGGETDATA): - return ced_dbg_get_data(ced, (TDBGBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_DBGSTOPLOOP): - return ced_dbg_stop_loop(ced); - - case _IOC_NR(IOCTL_CED_FULLRESET): - ced->force_reset = true; /* Set a flag for a full reset */ - break; - - case _IOC_NR(IOCTL_CED_SETCIRCULAR): - return ced_set_circular(ced, - (struct transfer_area_desc __user *) arg); - - case _IOC_NR(IOCTL_CED_GETCIRCBLOCK): - return ced_get_circ_block(ced, (TCIRCBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_FREECIRCBLOCK): - return ced_free_circ_block(ced, (TCIRCBLOCK __user *) arg); - - case _IOC_NR(IOCTL_CED_WAITEVENT): - return ced_wait_event(ced, (int)(arg & 0xff), (int)(arg >> 8)); - - case _IOC_NR(IOCTL_CED_TESTEVENT): - return ced_test_event(ced, (int)arg); - - default: - return U14ERR_NO_SUCH_FN; - } - return U14ERR_NOERROR; -} - -static const struct file_operations ced_fops = { - .owner = THIS_MODULE, - .open = ced_open, - .release = ced_release, - .flush = ced_flush, - .llseek = noop_llseek, - .unlocked_ioctl = ced_ioctl, -}; - -/* - * usb class driver info in order to get a minor number from the usb core, - * and to have the device registered with the driver core - */ -static struct usb_class_driver ced_class = { - .name = "cedusb%d", - .fops = &ced_fops, - .minor_base = USB_CED_MINOR_BASE, -}; - -/* Check that the device that matches a 1401 vendor and product ID is OK to */ -/* use and initialise our struct ced_data. */ -static int ced_probe(struct usb_interface *interface, - const struct usb_device_id *id) -{ - struct ced_data *ced; - struct usb_host_interface *iface_desc; - struct usb_endpoint_descriptor *endpoint; - int i, bcdDevice; - int retval = -ENOMEM; - - /* allocate memory for our device extension and initialize it */ - ced = kzalloc(sizeof(*ced), GFP_KERNEL); - if (!ced) - goto error; - - for (i = 0; i < MAX_TRANSAREAS; ++i) { /* Initialise the wait queues */ - init_waitqueue_head(&ced->trans_def[i].event); - } - - /* Put initialises for our stuff here. Note that all of *ced is - * zero, so no need to explicitly zero it. */ - spin_lock_init(&ced->char_out_lock); - spin_lock_init(&ced->char_in_lock); - spin_lock_init(&ced->staged_lock); - - /* Initialises from the skeleton stuff */ - kref_init(&ced->kref); - mutex_init(&ced->io_mutex); - spin_lock_init(&ced->err_lock); - init_usb_anchor(&ced->submitted); - - ced->udev = usb_get_dev(interface_to_usbdev(interface)); - ced->interface = interface; - - /* Attempt to identify the device */ - bcdDevice = ced->udev->descriptor.bcdDevice; - i = (bcdDevice >> 8); - if (i == 0) - ced->type = TYPEU1401; - else if ((i >= 1) && (i <= 23)) - ced->type = i + 2; - else { - dev_err(&interface->dev, "%s: Unknown device. bcdDevice = %d\n", - __func__, bcdDevice); - goto error; - } - /* set up the endpoint information. We only care about the number of */ - /* EP as we know that we are dealing with a 1401 device. */ - iface_desc = interface->cur_altsetting; - ced->n_pipes = iface_desc->desc.bNumEndpoints; - dev_info(&interface->dev, "1401Type=%d with %d End Points\n", - ced->type, ced->n_pipes); - if ((ced->n_pipes < 3) || (ced->n_pipes > 4)) - goto error; - - /* Allocate the URBs we hold for performing transfers */ - ced->urb_char_out = usb_alloc_urb(0, GFP_KERNEL);/* character output - URB */ - ced->urb_char_in = usb_alloc_urb(0, GFP_KERNEL); /* character input - URB */ - ced->staged_urb = usb_alloc_urb(0, GFP_KERNEL); /* block transfer URB */ - if (!ced->urb_char_out || !ced->urb_char_in || !ced->staged_urb) { - dev_err(&interface->dev, "%s: URB alloc failed\n", __func__); - goto error; - } - - ced->coher_staged_io = - usb_alloc_coherent(ced->udev, STAGED_SZ, GFP_KERNEL, - &ced->staged_urb->transfer_dma); - ced->coher_char_out = - usb_alloc_coherent(ced->udev, OUTBUF_SZ, GFP_KERNEL, - &ced->urb_char_out->transfer_dma); - ced->coher_char_in = - usb_alloc_coherent(ced->udev, INBUF_SZ, GFP_KERNEL, - &ced->urb_char_in->transfer_dma); - if (!ced->coher_char_out || !ced->coher_char_in || - !ced->coher_staged_io) { - dev_err(&interface->dev, "%s: Coherent buffer alloc failed\n", - __func__); - goto error; - } - - for (i = 0; i < ced->n_pipes; ++i) { - endpoint = &iface_desc->endpoint[i].desc; - ced->ep_addr[i] = endpoint->bEndpointAddress; - dev_info(&interface->dev, "Pipe %d, ep address %02x\n", - i, ced->ep_addr[i]); - - /* if char input end point */ - if (((ced->n_pipes == 3) && (i == 0)) || - ((ced->n_pipes == 4) && (i == 1))) { - /* save the endpoint interrupt interval */ - ced->interval = endpoint->bInterval; - dev_info(&interface->dev, "Pipe %d, interval = %d\n", - i, ced->interval); - } - /* Detect USB2 by checking last ep size (64 if USB1) */ - if (i == ced->n_pipes - 1) { /* if this is the last ep (bulk) */ - ced->is_usb2 = - le16_to_cpu(endpoint->wMaxPacketSize) > 64; - dev_info(&ced->interface->dev, "USB%d\n", - ced->is_usb2 + 1); - } - } - - /* save our data pointer in this interface device */ - usb_set_intfdata(interface, ced); - - /* we can register the device now, as it is ready */ - retval = usb_register_dev(interface, &ced_class); - if (retval) { - /* something prevented us from registering this driver */ - dev_err(&interface->dev, - "Not able to get a minor for this device\n"); - usb_set_intfdata(interface, NULL); - goto error; - } - - /* let the user know what node this device is now attached to */ - dev_info(&interface->dev, - "USB CEDUSB device now attached to cedusb #%d\n", - interface->minor); - return 0; - -error: - if (ced) - kref_put(&ced->kref, ced_delete); /* frees allocated memory */ - return retval; -} - -static void ced_disconnect(struct usb_interface *interface) -{ - struct ced_data *ced = usb_get_intfdata(interface); - int minor = interface->minor; - int i; - - /* remove the ced from the interface */ - usb_set_intfdata(interface, NULL); - /* give back our minor device number */ - usb_deregister_dev(interface, &ced_class); - - mutex_lock(&ced->io_mutex); /* stop more I/O starting while... */ - ced_draw_down(ced); /* ...wait for then kill any io */ - for (i = 0; i < MAX_TRANSAREAS; ++i) { - /* ...release any used memory */ - int err = ced_clear_area(ced, i); - - if (err == U14ERR_UNLOCKFAIL) - dev_err(&ced->interface->dev, - "%s: Area %d was in used\n", - __func__, i); - } - ced->interface = NULL; /* ...we kill off link to interface */ - mutex_unlock(&ced->io_mutex); - - usb_kill_anchored_urbs(&ced->submitted); - - kref_put(&ced->kref, ced_delete); /* decrement our usage count */ - - dev_info(&interface->dev, "USB cedusb #%d now disconnected\n", minor); -} - -/* Wait for all the urbs we know of to be done with, then kill off any that */ -/* are left. NBNB we will need to have a mechanism to stop circular xfers */ -/* from trying to fire off more urbs. We will wait up to 3 seconds for Urbs */ -/* to be done. */ -void ced_draw_down(struct ced_data *ced) -{ - int time; - - dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - - ced->in_draw_down = true; - time = usb_wait_anchor_empty_timeout(&ced->submitted, 3000); - if (!time) { /* if we timed out we kill the urbs */ - usb_kill_anchored_urbs(&ced->submitted); - dev_err(&ced->interface->dev, "%s: timed out\n", __func__); - } - ced->in_draw_down = false; -} - -static int ced_suspend(struct usb_interface *intf, pm_message_t message) -{ - struct ced_data *ced = usb_get_intfdata(intf); - - if (!ced) - return 0; - ced_draw_down(ced); - - dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - return 0; -} - -static int ced_resume(struct usb_interface *intf) -{ - struct ced_data *ced = usb_get_intfdata(intf); - - if (!ced) - return 0; - dev_dbg(&ced->interface->dev, "%s: called\n", __func__); - return 0; -} - -static int ced_pre_reset(struct usb_interface *intf) -{ - struct ced_data *ced = usb_get_intfdata(intf); - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - mutex_lock(&ced->io_mutex); - ced_draw_down(ced); - return 0; -} - -static int ced_post_reset(struct usb_interface *intf) -{ - struct ced_data *ced = usb_get_intfdata(intf); - - dev_dbg(&ced->interface->dev, "%s\n", __func__); - - /* we are sure no URBs are active - no locking needed */ - ced->errors = -EPIPE; - mutex_unlock(&ced->io_mutex); - - return 0; -} - -static struct usb_driver ced_driver = { - .name = "cedusb", - .probe = ced_probe, - .disconnect = ced_disconnect, - .suspend = ced_suspend, - .resume = ced_resume, - .pre_reset = ced_pre_reset, - .post_reset = ced_post_reset, - .id_table = ced_table, - .supports_autosuspend = 1, -}; - -module_usb_driver(ced_driver); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/ced1401/usb1401.h b/drivers/staging/ced1401/usb1401.h deleted file mode 100644 index da4d90cd49a0..000000000000 --- a/drivers/staging/ced1401/usb1401.h +++ /dev/null @@ -1,260 +0,0 @@ -/* usb1401.h - Header file for the CED 1401 USB device driver for Linux - Copyright (C) 2010 Cambridge Electronic Design Ltd - Author Greg P Smith (greg@ced.co.uk) - - 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -#ifndef __USB1401_H__ -#define __USB1401_H__ -#include "use1401.h" -#include "ced_ioctl.h" - -#ifndef UINT -#define UINT unsigned int -#endif - -/** Device type codes, but these don't need to be extended - a succession is assumed -** These are set for usb from the bcdDevice field (suitably mangled). Future devices -** will be added in order of device creation to the list, so the names here are just -** to help use remember which device is which. The U14ERR_... values follow the same -** pattern for modern devices.a -**/ -#define TYPEUNKNOWN -1 /* dont know */ -#define TYPE1401 0 /* standard 1401 */ -#define TYPEPLUS 1 /* 1401 plus */ -#define TYPEU1401 2 /* u1401 */ -#define TYPEPOWER 3 /* Power1401 */ -#define TYPEU14012 4 /* u1401 mkII */ -#define TYPEPOWER2 5 /* Power1401 mk II */ -#define TYPEMICRO3 6 /* Micro1401-3 */ -#define TYPEPOWER3 7 /* Power1401-3 */ - -/* Some useful defines of constants. DONT FORGET to change the version in the */ -/* resources whenever you change it here!. */ -#define DRIVERMAJREV 2 /* driver revision level major (match windows) */ -#define DRIVERMINREV 0 /* driver revision level minor */ - -/* Definitions of the various block transfer command codes */ -#define TM_EXTTOHOST 8 /* extended tohost */ -#define TM_EXTTO1401 9 /* extended to1401 */ - -/* Definitions of values in usbReqtype. Used in sorting out setup actions */ -#define H_TO_D 0x00 -#define D_TO_H 0x80 -#define VENDOR 0x40 -#define DEVREQ 0x00 -#define INTREQ 0x01 -#define ENDREQ 0x02 - -/* Definition of values in usbRequest, again used to sort out setup */ -#define GET_STATUS 0x00 -#define CLEAR_FEATURE 0x01 -#define SET_FEATURE 0x03 -#define SET_ADDRESS 0x05 -#define GET_DESC 0x06 -#define SET_DESC 0x07 -#define GET_CONF 0x08 -#define SET_CONF 0x09 -#define GET_INTERFACE 0x0a -#define SET_INTERFACE 0x0b -#define SYNCH_FRAME 0x0c - -/* Definitions of the various debug command codes understood by the 1401. These */ -/* are used in various vendor-specific commands to achieve the desired effect */ -#define DB_GRAB 0x50 /* Grab is a NOP for USB */ -#define DB_FREE 0x51 /* Free is a NOP for the USB */ -#define DB_SETADD 0x52 /* Set debug address (double) */ -#define DB_SELFTEST 0x53 /* Start self test */ -#define DB_SETMASK 0x54 /* Set enable mask (double) */ -#define DB_SETDEF 0x55 /* Set default mask (double) */ -#define DB_PEEK 0x56 /* Peek address, save result */ -#define DB_POKE 0x57 /* Poke address with data (double) */ -#define DB_RAMPD 0x58 /* Ramp data at debug address */ -#define DB_RAMPA 0x59 /* Ramp address bus */ -#define DB_REPEATS 0x5A /* Set repeats for operations (double) */ -#define DB_WIDTH 0x5B /* Set width for operations (byte) */ -#define DB_DATA 0x5C /* Get 4-byte data read by PEEK */ -#define DB_CHARS 0x5D /* Send chars via EP0 control write */ - -#define CR_CHAR 0x0D /* The carriage return character */ -#define CR_CHAR_80 0x8d /* and with bit 7 set */ - -/* A structure holding information about a block */ -/* of memory for use in circular transfers */ -struct circ_blk { - volatile UINT offset; /* Offset within area of block start */ - volatile UINT size; /* Size of the block, in bytes (0 = unused) */ -}; - -/* A structure holding all of the information about a transfer area - an area */ -/* of memory set up for use either as a source or destination in DMA */ -/* transfers. */ -struct transarea { - /* User address of xfer area saved for completeness */ - void __user *buff; - - /* offset to start of xfer area in first page */ - UINT base_offset; - - UINT length; /* Length of xfer area, in bytes */ - struct page **pages; /* Points at array of locked down pages */ - int n_pages; /* number of pages that are locked down */ - bool used; /* Is this structure in use? */ - bool circular; /* Is this area for circular transfers? */ - bool circ_to_host; /* Flag for direction of circular transfer */ - bool event_to_host; /* Set event on transfer to host? */ - int wake_up; /* Set 1 on event, cleared by TestEvent() */ - UINT event_st; /* Defines section within xfer area for... */ - UINT event_sz; /* notification by the event SZ is 0 if unset */ - struct circ_blk blocks[2]; /* Info on a pair of circular blocks */ - - wait_queue_head_t event; /* The wait queue for events in this */ - /* area MUST BE LAST */ -}; - -/* The dmadesc structure is used to hold information on the transfer in */ -/* progress. It is set up by ReadDMAInfo, using information sent by the 1401 */ -/* in an escape sequence. */ -struct dmadesc { - unsigned short trans_type; /* transfer type as TM_xxx above */ - unsigned short ident; /* identifier word */ - unsigned int size; /* bytes to transfer */ - unsigned int offset; /* offset into transfer area for trans */ - bool outward; /* true when data is going TO 1401 */ -}; - -#define INBUF_SZ 256 /* input buffer size */ -#define OUTBUF_SZ 256 /* output buffer size */ -#define STAGED_SZ 0x10000 /* size of coherent buffer for staged transfers */ - -/* Structure to hold all of our device specific stuff. We are making this as */ -/* similar as we can to the Windows driver to help in our understanding of */ -/* what is going on. */ -struct ced_data { - char input_buffer[INBUF_SZ]; /* The two buffers */ - char output_buffer[OUTBUF_SZ]; /* accessed by the host functions */ - volatile unsigned int num_input; /* num of chars in input buffer */ - volatile unsigned int in_buff_get; /* where to get from input buffer */ - volatile unsigned int in_buff_put; /* where to put into input buffer */ - volatile unsigned int num_output; /* num of chars in output buffer */ - volatile unsigned int out_buff_get; /* where to get from output buffer*/ - volatile unsigned int out_buff_put; /* where to put into output buffer*/ - - volatile bool send_chars_pending; /* Flag to indicate sendchar active */ - volatile bool read_chars_pending; /* Flag to indicate a read is primed*/ - char *coher_char_out; /* special aligned buffer for chars to 1401 */ - struct urb *urb_char_out; /* urb used for chars to 1401 */ - char *coher_char_in; /* special aligned buffer for chars to host */ - struct urb *urb_char_in; /* urb used for chars to host */ - - spinlock_t char_out_lock; /* protect the output_buffer and outputting */ - spinlock_t char_in_lock; /* protect the input_buffer and char reads */ - __u8 interval; /* Interrupt end point interval */ - - volatile unsigned int dma_flag; /* state of DMA */ - struct transarea trans_def[MAX_TRANSAREAS]; /* transfer area info */ - volatile struct dmadesc dma_info; /* info on current DMA transfer */ - volatile bool xfer_waiting; /* Flag set if DMA transfer stalled */ - volatile bool in_draw_down; /* Flag that we want to halt transfers */ - - /* Parameters relating to a block read\write that is in progress. Some of these values */ - /* are equivalent to values in dma_info. The values here are those in use, while those */ - /* in dma_info are those received from the 1401 via an escape sequence. If another */ - /* escape sequence arrives before the previous xfer ends, dma_info values are updated while these */ - /* are used to finish off the current transfer. */ - volatile short staged_id; /* The transfer area id for this transfer */ - volatile bool staged_read; /* Flag TRUE for read from 1401, FALSE for write */ - volatile unsigned int staged_length; /* Total length of this transfer */ - volatile unsigned int staged_offset; /* Offset within memory area for transfer start */ - volatile unsigned int staged_done; /* Bytes transferred so far */ - volatile bool staged_urb_pending; /* Flag to indicate active */ - char *coher_staged_io; /* buffer used for block transfers */ - struct urb *staged_urb; /* The URB to use */ - spinlock_t staged_lock; /* protects ReadWriteMem() and */ - /* circular buffer stuff */ - - short type; /* type of 1401 attached */ - short current_state; /* current error state */ - bool is_usb2; /* type of the interface we connect to */ - bool force_reset; /* Flag to make sure we get a real reset */ - __u32 stat_buf[2]; /* buffer for 1401 state info */ - - unsigned long self_test_time; /* used to timeout self test */ - - int n_pipes; /* Should be 3 or 4 depending on 1401 usb chip */ - int pipe_error[4]; /* set non-zero if an error on one of the pipe */ - __u8 ep_addr[4]; /* addresses of the 3/4 end points */ - - struct usb_device *udev; /* the usb device for this device */ - struct usb_interface *interface; /* the interface for this device, NULL if removed */ - struct usb_anchor submitted; /* in case we need to retract our submissions */ - struct mutex io_mutex; /* synchronize I/O with disconnect, one user-mode caller at a time */ - - int errors; /* the last request tanked */ - int open_count; /* count the number of openers */ - spinlock_t err_lock; /* lock for errors */ - struct kref kref; -}; - -#define to_ced_data(d) container_of(d, struct ced_data, kref) - -/* Definitions of routimes used between compilation object files */ -/* in usb1401.c */ -extern int ced_allowi(struct ced_data *ced); -extern int ced_send_chars(struct ced_data *ced); -extern void ced_draw_down(struct ced_data *ced); -extern int ced_read_write_mem(struct ced_data *ced, bool read, - unsigned short ident, unsigned int offs, - unsigned int len); - -/* in ced_ioc.c */ -extern int ced_clear_area(struct ced_data *ced, int area); -extern int ced_send_string(struct ced_data *ced, const char __user *data, unsigned int n); -extern int ced_send_char(struct ced_data *ced, char c); -extern int ced_get_state(struct ced_data *ced, __u32 *state, __u32 *error); -extern int ced_read_write_cancel(struct ced_data *ced); -extern int ced_reset(struct ced_data *ced); -extern int ced_get_char(struct ced_data *ced); -extern int ced_get_string(struct ced_data *ced, char __user *user, int n); -extern int ced_set_transfer(struct ced_data *ced, - struct transfer_area_desc __user *utd); -extern int ced_unset_transfer(struct ced_data *ced, int area); -extern int ced_set_event(struct ced_data *ced, - struct transfer_event __user *ute); -extern int ced_stat_1401(struct ced_data *ced); -extern int ced_line_count(struct ced_data *ced); -extern int ced_get_out_buf_space(struct ced_data *ced); -extern int ced_get_transfer(struct ced_data *ced, TGET_TX_BLOCK __user *utx); -extern int ced_kill_io(struct ced_data *ced); -extern int ced_state_of_1401(struct ced_data *ced); -extern int ced_start_self_test(struct ced_data *ced); -extern int ced_check_self_test(struct ced_data *ced, - TGET_SELFTEST __user *ugst); -extern int ced_type_of_1401(struct ced_data *ced); -extern int ced_transfer_flags(struct ced_data *ced); -extern int ced_dbg_peek(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_poke(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_ramp_data(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_ramp_addr(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_get_data(struct ced_data *ced, TDBGBLOCK __user *udb); -extern int ced_dbg_stop_loop(struct ced_data *ced); -extern int ced_set_circular(struct ced_data *ced, - struct transfer_area_desc __user *utd); -extern int ced_get_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb); -extern int ced_free_circ_block(struct ced_data *ced, TCIRCBLOCK __user *ucb); -extern int ced_wait_event(struct ced_data *ced, int area, int time_out); -extern int ced_test_event(struct ced_data *ced, int area); -#endif diff --git a/drivers/staging/ced1401/use1401.h b/drivers/staging/ced1401/use1401.h deleted file mode 100644 index b7997c9835c2..000000000000 --- a/drivers/staging/ced1401/use1401.h +++ /dev/null @@ -1,288 +0,0 @@ -/**************************************************************************** -** use1401.h -** Copyright (C) Cambridge Electronic Design Ltd, 1992-2010 -** Authors: Paul Cox, Tim Bergel, Greg Smith -** See CVS for revisions. -** -** Because the size of a long is different between 32-bit and 64-bit on some -** systems, we avoid this in this interface. -****************************************************************************/ -#ifndef __USE1401_H__ -#define __USE1401_H__ -#include "machine.h" - -/* Some definitions to make things compatible. If you want to use Use1401 directly */ -/* from a Windows program you should define U14_NOT_DLL, in which case you also */ -/* MUST make sure that your application startup code calls U14InitLib(). */ -/* DLL_USE1401 is defined when you are building the Use1401 dll, not otherwise. */ -#ifdef _IS_WINDOWS_ -#ifndef U14_NOT_DLL -#ifdef DLL_USE1401 -#define U14API(retType) (retType DllExport __stdcall) -#else -#define U14API(retType) (retType DllImport __stdcall) -#endif -#endif - -#define U14ERRBASE -500 -#define U14LONG long -#endif - -#ifdef LINUX -#define U14ERRBASE -1000 -#define U14LONG int -#endif - -#ifdef _QT -#ifndef U14_NOT_DLL -#undef U14API -#define U14API(retType) (retType __declspec(dllimport) __stdcall) -#endif -#undef U14LONG -#define U14LONG int -#endif - -#ifndef U14API -#define U14API(retType) retType -#endif - -#ifndef U14LONG -#define U14LONG long -#endif - -/* Error codes: We need them here as user space can see them. */ -#define U14ERR_NOERROR 0 /* no problems */ - -/* Device error codes, but these don't need to be extended - a succession is assumed */ -#define U14ERR_STD 4 /* standard 1401 connected */ -#define U14ERR_U1401 5 /* u1401 connected */ -#define U14ERR_PLUS 6 /* 1401 plus connected */ -#define U14ERR_POWER 7 /* Power1401 connected */ -#define U14ERR_U14012 8 /* u1401 mkII connected */ -#define U14ERR_POWER2 9 -#define U14ERR_U14013 10 -#define U14ERR_POWER3 11 - -/* NBNB Error numbers need shifting as some linux error codes start at 512 */ -#define U14ERR(n) (n+U14ERRBASE) -#define U14ERR_OFF U14ERR(0) /* 1401 there but switched off */ -#define U14ERR_NC U14ERR(-1) /* 1401 not connected */ -#define U14ERR_ILL U14ERR(-2) /* if present it is ill */ -#define U14ERR_NOIF U14ERR(-3) /* I/F card missing */ -#define U14ERR_TIME U14ERR(-4) /* 1401 failed to come ready */ -#define U14ERR_BADSW U14ERR(-5) /* I/F card bad switches */ -#define U14ERR_PTIME U14ERR(-6) /* 1401plus failed to come ready */ -#define U14ERR_NOINT U14ERR(-7) /* couldn't grab the int vector */ -#define U14ERR_INUSE U14ERR(-8) /* 1401 is already in use */ -#define U14ERR_NODMA U14ERR(-9) /* couldn't get DMA channel */ -#define U14ERR_BADHAND U14ERR(-10) /* handle provided was bad */ -#define U14ERR_BAD1401NUM U14ERR(-11) /* 1401 number provided was bad */ - -#define U14ERR_NO_SUCH_FN U14ERR(-20) /* no such function */ -#define U14ERR_NO_SUCH_SUBFN U14ERR(-21) /* no such sub function */ -#define U14ERR_NOOUT U14ERR(-22) /* no room in output buffer */ -#define U14ERR_NOIN U14ERR(-23) /* no input in buffer */ -#define U14ERR_STRLEN U14ERR(-24) /* string longer than buffer */ -#define U14ERR_ERR_STRLEN U14ERR(-24) /* string longer than buffer */ -#define U14ERR_LOCKFAIL U14ERR(-25) /* failed to lock memory */ -#define U14ERR_UNLOCKFAIL U14ERR(-26) /* failed to unlock memory */ -#define U14ERR_ALREADYSET U14ERR(-27) /* area already set up */ -#define U14ERR_NOTSET U14ERR(-28) /* area not set up */ -#define U14ERR_BADAREA U14ERR(-29) /* illegal area number */ -#define U14ERR_FAIL U14ERR(-30) /* we failed for some other reason*/ - -#define U14ERR_NOFILE U14ERR(-40) /* command file not found */ -#define U14ERR_READERR U14ERR(-41) /* error reading command file */ -#define U14ERR_UNKNOWN U14ERR(-42) /* unknown command */ -#define U14ERR_HOSTSPACE U14ERR(-43) /* not enough host space to load */ -#define U14ERR_LOCKERR U14ERR(-44) /* could not lock resource/command*/ -#define U14ERR_CLOADERR U14ERR(-45) /* CLOAD command failed */ - -#define U14ERR_TOXXXERR U14ERR(-60) /* tohost/1401 failed */ -#define U14ERR_NO386ENH U14ERR(-80) /* not 386 enhanced mode */ -#define U14ERR_NO1401DRIV U14ERR(-81) /* no device driver */ -#define U14ERR_DRIVTOOOLD U14ERR(-82) /* device driver too old */ - -#define U14ERR_TIMEOUT U14ERR(-90) /* timeout occurred */ - -#define U14ERR_BUFF_SMALL U14ERR(-100) /* buffer for getstring too small */ -#define U14ERR_CBALREADY U14ERR(-101) /* there is already a callback */ -#define U14ERR_BADDEREG U14ERR(-102) /* bad parameter to deregcallback */ -#define U14ERR_NOMEMORY U14ERR(-103) /* no memory for allocation */ - -#define U14ERR_DRIVCOMMS U14ERR(-110) /* failed talking to driver */ -#define U14ERR_OUTOFMEMORY U14ERR(-111) /* needed memory and couldnt get it*/ - -/* / 1401 type codes. */ -#define U14TYPE1401 0 /* standard 1401 */ -#define U14TYPEPLUS 1 /* 1401 plus */ -#define U14TYPEU1401 2 /* u1401 */ -#define U14TYPEPOWER 3 /* power1401 */ -#define U14TYPEU14012 4 /* u1401 mk II */ -#define U14TYPEPOWER2 5 /* power1401 mk II */ -#define U14TYPEU14013 6 /* u1401-3 */ -#define U14TYPEPOWER3 7 /* power1401-3 */ -#define U14TYPEUNKNOWN -1 /* dont know */ - -/* Transfer flags to allow driver capabilities to be interrogated */ - -/* Constants for transfer flags */ -#define U14TF_USEDMA 1 /* Transfer flag for use DMA */ -#define U14TF_MULTIA 2 /* Transfer flag for multi areas */ -#define U14TF_FIFO 4 /* for FIFO interface card */ -#define U14TF_USB2 8 /* for USB2 interface and 1401 */ -#define U14TF_NOTIFY 16 /* for event notifications */ -#define U14TF_SHORT 32 /* for PCI can short cycle */ -#define U14TF_PCI2 64 /* for new PCI card 1401-70 */ -#define U14TF_CIRCTH 128 /* Circular-mode to host */ -#define U14TF_DIAG 256 /* Diagnostics/debug functions */ -#define U14TF_CIRC14 512 /* Circular-mode to 1401 */ - -/* Definitions of element sizes for DMA transfers - to allow byte-swapping */ -#define ESZBYTES 0 /* BYTE element size value */ -#define ESZWORDS 1 /* unsigned short element size value */ -#define ESZLONGS 2 /* long element size value */ -#define ESZUNKNOWN 0 /* unknown element size value */ - -/* These define required access types for the debug/diagnostics function */ -#define BYTE_SIZE 1 /* 8-bit access */ -#define WORD_SIZE 2 /* 16-bit access */ -#define LONG_SIZE 3 /* 32-bit access */ - -/* Stuff used by U14_GetTransfer */ -#define GET_TX_MAXENTRIES 257 /* (max length / page size + 1) */ - -#ifdef _IS_WINDOWS_ -#pragma pack(1) - -typedef struct /* used for U14_GetTransfer results */ -{ /* Info on a single mapped block */ - U14LONG physical; - U14LONG size; -} TXENTRY; - -typedef struct TGetTxBlock /* used for U14_GetTransfer results */ -{ /* matches structure in VXD */ - U14LONG size; - U14LONG linear; - short seg; - short reserved; - short avail; /* number of available entries */ - short used; /* number of used entries */ - TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */ -} TGET_TX_BLOCK; - -typedef TGET_TX_BLOCK *LPGET_TX_BLOCK; - -#pragma pack() -#endif - -#ifdef LINUX -typedef struct /* used for U14_GetTransfer results */ -{ /* Info on a single mapped block */ - long long physical; - long size; -} TXENTRY; - -typedef struct TGetTxBlock /* used for U14_GetTransfer results */ -{ /* matches structure in VXD */ - long long linear; /* linear address */ - long size; /* total size of the mapped area, holds id when called */ - short seg; /* segment of the address for Win16 */ - short reserved; - short avail; /* number of available entries */ - short used; /* number of used entries */ - TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */ -} TGET_TX_BLOCK; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -U14API(int) U14WhenToTimeOut(short hand); /* when to timeout in ms */ -U14API(short) U14PassedTime(int iTime); /* non-zero if iTime passed */ - -U14API(short) U14LastErrCode(short hand); - -U14API(short) U14Open1401(short n1401); -U14API(short) U14Close1401(short hand); -U14API(short) U14Reset1401(short hand); -U14API(short) U14ForceReset(short hand); -U14API(short) U14TypeOf1401(short hand); -U14API(short) U14NameOf1401(short hand, char *pBuf, unsigned short wMax); - -U14API(short) U14Stat1401(short hand); -U14API(short) U14CharCount(short hand); -U14API(short) U14LineCount(short hand); - -U14API(short) U14SendString(short hand, const char *pString); -U14API(short) U14GetString(short hand, char *pBuffer, unsigned short wMaxLen); -U14API(short) U14SendChar(short hand, char cChar); -U14API(short) U14GetChar(short hand, char *pcChar); - -U14API(short) U14LdCmd(short hand, const char *command); -U14API(unsigned int) U14Ld(short hand, const char *vl, const char *str); - -U14API(short) U14SetTransArea(short hand, unsigned short wArea, void *pvBuff, - unsigned int dwLength, short eSz); -U14API(short) U14UnSetTransfer(short hand, unsigned short wArea); -U14API(short) U14SetTransferEvent(short hand, unsigned short wArea, BOOL bEvent, - BOOL bToHost, unsigned int dwStart, unsigned int dwLength); -U14API(int) U14TestTransferEvent(short hand, unsigned short wArea); -U14API(int) U14WaitTransferEvent(short hand, unsigned short wArea, int msTimeOut); -U14API(short) U14GetTransfer(short hand, TGET_TX_BLOCK *pTransBlock); - -U14API(short) U14ToHost(short hand, char *pAddrHost, unsigned int dwSize, unsigned int dw1401, - short eSz); -U14API(short) U14To1401(short hand, const char *pAddrHost, unsigned int dwSize, unsigned int dw1401, - short eSz); - -U14API(short) U14SetCircular(short hand, unsigned short wArea, BOOL bToHost, void *pvBuff, - unsigned int dwLength); - -U14API(int) U14GetCircBlk(short hand, unsigned short wArea, unsigned int *pdwOffs); -U14API(int) U14FreeCircBlk(short hand, unsigned short wArea, unsigned int dwOffs, unsigned int dwSize, - unsigned int *pdwOffs); - -U14API(short) U14StrToLongs(const char *pszBuff, U14LONG *palNums, short sMaxLongs); -U14API(short) U14LongsFrom1401(short hand, U14LONG *palBuff, short sMaxLongs); - -U14API(void) U14SetTimeout(short hand, int lTimeout); -U14API(int) U14GetTimeout(short hand); -U14API(short) U14OutBufSpace(short hand); -U14API(int) U14BaseAddr1401(short hand); -U14API(int) U14DriverVersion(short hand); -U14API(int) U14DriverType(short hand); -U14API(short) U14DriverName(short hand, char *pBuf, unsigned short wMax); -U14API(short) U14GetUserMemorySize(short hand, unsigned int *pMemorySize); -U14API(short) U14KillIO1401(short hand); - -U14API(short) U14BlkTransState(short hand); -U14API(short) U14StateOf1401(short hand); - -U14API(short) U14Grab1401(short hand); -U14API(short) U14Free1401(short hand); -U14API(short) U14Peek1401(short hand, unsigned int dwAddr, int nSize, int nRepeats); -U14API(short) U14Poke1401(short hand, unsigned int dwAddr, unsigned int dwValue, int nSize, int nRepeats); -U14API(short) U14Ramp1401(short hand, unsigned int dwAddr, unsigned int dwDef, unsigned int dwEnable, int nSize, int nRepeats); -U14API(short) U14RampAddr(short hand, unsigned int dwDef, unsigned int dwEnable, int nSize, int nRepeats); -U14API(short) U14StopDebugLoop(short hand); -U14API(short) U14GetDebugData(short hand, U14LONG *plValue); - -U14API(short) U14StartSelfTest(short hand); -U14API(short) U14CheckSelfTest(short hand, U14LONG *pData); -U14API(short) U14TransferFlags(short hand); -U14API(void) U14GetErrorString(short nErr, char *pStr, unsigned short wMax); -U14API(int) U14MonitorRev(short hand); -U14API(void) U14CloseAll(void); - -U14API(short) U14WorkingSet(unsigned int dwMinKb, unsigned int dwMaxKb); -U14API(int) U14InitLib(void); - -#ifdef __cplusplus -} -#endif - -#endif /* End of ifndef __USE1401_H__ */ - diff --git a/drivers/staging/ced1401/use14_ioc.h b/drivers/staging/ced1401/use14_ioc.h deleted file mode 100644 index 42d2e4e6e9a9..000000000000 --- a/drivers/staging/ced1401/use14_ioc.h +++ /dev/null @@ -1,299 +0,0 @@ -/* use14_ioc.h -** definitions of use1401 module stuff that is shared between use1401 and the driver. -** Copyright (C) Cambridge Electronic Design Limited 2010 -** Author Greg P Smith -************************************************************************************/ -#ifndef __USE14_IOC_H__ -#define __USE14_IOC_H__ - -#define MAX_TRANSAREAS 8 /* The number of transfer areas supported by driver */ - -#define i386 -#include "winioctl.h" /* needed so we can access driver */ - -/* -** Defines for IOCTL functions to ask driver to perform. These must be matched -** in both use1401 and in the driver. The IOCTL code contains a command -** identifier, plus other information about the device, the type of access -** with which the file must have been opened, and the type of buffering. -** The IOCTL function codes from 0x80 to 0xFF are for developer use. -*/ -#define FILE_DEVICE_CED1401 0x8001 - FNNUMBASE 0x800 - -#define U14_OPEN1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_CLOSE1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+1, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SENDSTRING CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+2, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_RESET1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+3, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETCHAR CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+4, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SENDCHAR CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+5, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STAT1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+6, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_LINECOUNT CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+7, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETSTRING CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+8, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_REGCALLBACK CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+9, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETMONITORBUF CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+10, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SETTRANSFER CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+11, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_UNSETTRANSFER CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+12, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SETTRANSEVENT CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+13, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETOUTBUFSPACE CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+14, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETBASEADDRESS CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+15, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETDRIVERREVISION CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+16, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETTRANSFER CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+17, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_KILLIO1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+18, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_BLKTRANSSTATE CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+19, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_BYTECOUNT CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+20, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_ZEROBLOCKCOUNT CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+21, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STOPCIRCULAR CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+22, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STATEOF1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+23, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_REGISTERS1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+24, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GRAB1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+25, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_FREE1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+26, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STEP1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+27, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SET1401REGISTERS CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+28, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STEPTILL1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+29, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SETORIN CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+30, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_STARTSELFTEST CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+31, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_CHECKSELFTEST CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+32, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_TYPEOF1401 CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+33, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_TRANSFERFLAGS CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+34, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGPEEK CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+35, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGPOKE CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+36, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGRAMPDATA CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+37, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGRAMPADDR CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+38, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGGETDATA CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+39, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_DBGSTOPLOOP CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+40, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_FULLRESET CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+41, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_SETCIRCULAR CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+42, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_GETCIRCBLK CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+43, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -#define U14_FREECIRCBLK CTL_CODE(FILE_DEVICE_CED1401, \ - FNNUMBASE+44, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) - -/*--------------- Structures that are shared with the driver ------------- */ -#pragma pack(1) - -typedef struct /* used for get/set standard 1401 registers */ -{ - short sPC; - char A; - char X; - char Y; - char stat; - char rubbish; -} T1401REGISTERS; - -typedef union /* to communicate with 1401 driver status & control funcs */ -{ - char chrs[22]; - short ints[11]; - long longs[5]; - T1401REGISTERS registers; -} TCSBLOCK; - -typedef TCSBLOCK* LPTCSBLOCK; - -typedef struct paramBlk { - short sState; - TCSBLOCK csBlock; -} PARAMBLK; - -typedef PARAMBLK* PPARAMBLK; - -struct transfer_area_desc /* Structure and type for SetTransArea */ -{ - unsigned short wArea; /* number of transfer area to set up */ - void FAR *lpvBuff; /* address of transfer area */ - unsigned int dwLength; /* length of area to set up */ - short eSize; /* size to move (for swapping on MAC) */ -}; - - -/* This is the structure used to set up a transfer area */ -typedef struct VXTransferDesc /* use1401.c and use1432x.x use only */ -{ - unsigned short wArea; /* number of transfer area to set up */ - unsigned short wAddrSel; /* 16 bit selector for area */ - unsigned int dwAddrOfs; /* 32 bit offset for area start */ - unsigned int dwLength; /* length of area to set up */ -} VXTRANSFERDESC; - -#pragma pack() - -#endif diff --git a/drivers/staging/ced1401/userspace/use1401.c b/drivers/staging/ced1401/userspace/use1401.c deleted file mode 100644 index d589311f1528..000000000000 --- a/drivers/staging/ced1401/userspace/use1401.c +++ /dev/null @@ -1,3030 +0,0 @@ -/**************************************************************************** -** use1401.c -** Copyright (C) Cambridge Electronic Design Ltd, 1992-2010 -** -** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -** -** Contact CED: Cambridge Electronic Design Limited, Science Park, Milton Road -** Cambridge, CB6 0FE. -** www.ced.co.uk -** greg@ced.co.uk -** -** Title: USE1401.C -** Version: 4.00 -** Author: Paul Cox, Tim Bergel, Greg Smith -** -** The code was vigorously pruned in DEC 2010 to remove the macintosh options -** and to get rid of the 16-bit support. It has also been aligned with the -** Linux version. See CVS for revisions. This will work for Win 9x onwards. -**************************************************************************** -** -** Notes on Windows interface to driver -** ************************************ -** -** Under Windows 9x and NT, Use1401 uses DeviceIoControl to get access to -** the 1401 driver. This has parameters for the device handle, the function -** code, an input pointer and byte count, an output pointer and byte count -** and a pointer to a unsigned int to hold the output byte count. Note that input -** and output are from the point-of-view of the driver, so the output stuff -** is used to read values from the 1401, not send to the 1401. The use of -** these parameters varies with the function in use and the operating -** system; there are five separate DIOC calls SendString, GetString and -** SetTransferArea all have their own specialised calls, the rest use the -** Status1401 or Control1401 functions. -** -** There are two basic styles of DIOC call used, one for Win9x VxD drivers -** and one for NT Kernel-mode and WDM drivers (see below for tables showing -** the different parameters used. The array bUseNTDIOC[] selects between -** these two calling styles. -** -** Function codes -** In Win3.x, simple function codes from 0 to 40 were used, shifted left 8 -** bits with a sub-function code in the lower 8 bits. These were also used -** in the Windows 95 driver, though we had to add 1 to the code value to -** avoid problems (Open from CreateFile is zero), and the sub-function code -** is now unused. We found that this gave some problems with Windows 98 -** as the function code values are reserved by microsoft, so we switched to -** using the NT function codes instead. The NT codes are generated using the -** CTL_CODE macro, essentially this gives 0x80012000 | (func << 2), where -** func is the original 0 to 34 value. The driver will handle both types of -** code and Use1432 only uses the NT codes if it knows the driver is new -** enough. The array bUseNTCodes[] holds flags on the type of codes required. -** GPS/TDB Dec 2010: we removed the bUseNTCodes array as this is always true -** as we no longer support ancient versions. -** -** The CreateFile and CloseFile function calls are also handled -** by DIOC, using the special function codes 0 and -1 respectively. -** -** Input pointer and buffer size -** These are intended for data sent to the device driver. In nearly all cases -** they are unused in calls to the Win95 driver, the NT driver uses them -** for all information sent to the driver. The table below shows the pointer -** and byte count used for the various calls: -** -** Win 95 Win NT -** SendString NULL, 0 pStr, nStr -** GetString NULL, 0 NULL, 0 -** SetTransferArea pBuf, nBuf (unused?) pDesc, nDesc -** GetTransfer NULL, 0 NULL, 0 -** Status1401 NULL, 0 NULL, 0 -** Control1401 NULL, 0 pBlk, nBlk -** -** pStr and nStr are pointers to a char buffer and the buffer length for -** string I/O, note that these are temporary buffers owned by the DLL, not -** application memory, pBuf and nBuf are the transfer area buffer (I think -** these are unused), pDesc and nDesc are the TRANSFERDESC structure, pBlk -** and nBlk are the TCSBLOCK structure. -** -** -** Output pointer and buffer size -** These are intended for data read from the device driver. These are used -** for almost all information sent to the Win95 driver, the NT driver uses -** them for information read from the driver, chiefly the error code. The -** table below shows the pointer and byte count used for the various calls: -** -** Win 95 Win NT -** SendString pStr, nStr pPar, nPar -** GetString pStr, nStr+2 pStr, nStr+2 -** SetTransferArea pDesc, nDesc pPar, nPar -** GetTransfer pGet, nGet pGet, nGet -** Status1401 pBlk, nBlk pPar, nPar -** Control1401 pBlk, nBlk pPar, nPar -** -** pStr and nStr are pointers to a char buffer and the buffer length for -** string I/O, the +2 for GetString refers to two spare bytes at the start -** used to hold the string length and returning an error code for NT. Note -** again that these are (and must be) DLL-owned temporary buffers. pPar -** and nPar are a PARAM structure used in NT (it holds an error code and a -** TCSBLOCK structure). pDesc and nDesc are the VXTRANSFERDESC structure, -** pBlk and nBlk are the TCSBLOCK structure. pGet and nGet indicate the -** TGET_TX_BLOCK structure used for GetTransfer. -** -** -** The output byte count -** Both drivers return the output buffer size here, regardless of the actual -** bytes output. This is used to check that we did get through to the driver. -** -** Multiple 1401s -** ************** -** -** We have code that tries to support the use of multiple 1401s, but there -** are problems: The lDriverVersion and lDriverType variables are global, not -** per-1401 (a particular problem as the U14 functions that use them don't -** have a hand parameter). In addition, the mechansim for finding a free -** 1401 depends upon the 1401 device driver open operation failing if it's -** already in use, which doesn't always happen, particularly with the VxDs. -** The code in TryToOpen tries to fix this by relying on TYPEOF1401 to detect -** the 1401-in-use state - the VxDs contain special code to help this. This is -** working OK but multiple 1401 support works better with the Win2000 drivers. -** -** USB driver -** ********** -** -** The USB driver, which runs on both Win98 and NT2000, uses the NT-style -** calling convention, both for the DIOC codes and the DIOC parameters. The -** TryToOpen function has been altered to look for an NT driver first in -** the appropriate circumstances, and to set the driver DIOC flags up in -** the correct state. -** -** Adding a new 1401 type - now almost nothing to do -** ************************************************* -** -** The 1401 types are defined by a set of U14TYPExxxx codes in USE1401.H. -** You should add a new one of these to keep things tidy for applications. -** -** DRIVERET_MAX (below) specifies the maximum allowed type code from the -** 1401 driver; I have set this high to accommodate as yet undesigned 1401 -** types. Similarly, as long as the command file names follow the ARM, -** ARN, ARO sequence, these are calculated by the ExtForType function, so -** you don't need to do anything here either. -** -** Version number -** ************** -** The new U14InitLib() function returns 0 if the OS is incapable of use, -** otherwise is returns the version of the USE1401 library. This is done -** in three parts: Major(31-24).Minor(23-16).Revision.(15-0) (brackets are -** the bits used). The Major number starts at 2 for the first revision with -** the U14InitLib() function. Changes to the Major version means that we -** have broken backwards compatibility. Minor number changes mean that we -** have added new functionality that does not break backwards compatibility. -** we starts at 0. Revision changes mean we have fixed something. Each index -** returns to 0 when a higher one changes. -*/ -#define U14LIB_MAJOR 4 -#define U14LIB_MINOR 0 -#define U14LIB_REVISION 0 -#define U14LIB_VERSION ((U14LIB_MAJOR<<24) | (U14LIB_MINOR<<16) | U14LIB_REVISION) - -#include -#include -#include - -#include "USE1401.H" - -#ifdef _IS_WINDOWS_ -#include -#include -#pragma warning(disable: 4100) /* Disable "Unused formal parameter" warning */ -#include -#include "process.h" - - -#define sprintf wsprintf -#define PATHSEP '\\' -#define PATHSEPSTR "\\" -#define DEFCMDPATH "\\1401\\" // default command path if all else fails -#define MINDRIVERMAJREV 1 // minimum driver revision level we need -#define __packed // does nothing in Windows - -#include "use14_ioc.h" // links to device driver stuff -#endif - -#ifdef LINUX -#include -#include -#include -#include -#include -#include -#include -#define PATHSEP '/' -#define PATHSEPSTR "/" -#define DEFCMDPATH "/var/1401/" // default command path if all else fails -#define MINDRIVERMAJREV 2 // minimum driver revision level we need - -#include "ced_ioctl.h" // links to device driver stuff -#endif - -#define MAX1401 8 // The number of 1401s that can be supported - -/* -** These are the 1401 type codes returned by the driver, they are a slightly -** odd sequence & start for reasons of compatibility with the DOS driver. -** The maximum code value is the upper limit of 1401 device types. -*/ -#define DRIVRET_STD 4 // Codes for 1401 types matching driver values -#define DRIVRET_U1401 5 // This table does not need extending, as -#define DRIVRET_PLUS 6 // we can calculate values now. -#define DRIVRET_POWER 7 // but we need all of these values still -#define DRIVRET_MAX 26 // Maximum tolerated code - future designs - -/* -** These variables store data that will be used to generate the last -** error string. For now, a string will hold the 1401 command file name. -*/ -static char szLastName[20]; // additional text information - -/* -** Information stored per handle. NBNB, driverType and DriverVersion used to be -** only stored once for all handles... i.e. nonsensical. This change means that -** three U14...() calls now include handles that were previously void. We have -** set a constructor and a destructor call for the library (see the end) to -** initialise important structures, or call use1401_load(). -*/ -static short asDriverType[MAX1401] = {0}; -static int lLastDriverVersion = U14ERR_NO1401DRIV; -static int lLastDriverType = U14TYPEUNKNOWN; -static int alDriverVersion[MAX1401]; // version/type of each driver -static int alTimeOutPeriod[MAX1401]; // timeout time in milliseconds -static short asLastRetCode[MAX1401]; // last code from a fn call -static short asType1401[MAX1401] = {0}; // The type of the 1401 -static BOOL abGrabbed[MAX1401] = {0}; // Flag for grabbed, set true by grab1401 -static int iAttached = 0; // counts process attaches so can let go - -#ifdef _IS_WINDOWS_ -/**************************************************************************** -** Windows NT Specific Variables and internal types -****************************************************************************/ -static HANDLE aHand1401[MAX1401] = {0}; // handles for 1401s -static HANDLE aXferEvent[MAX1401] = {0}; // transfer events for the 1401s -static LPVOID apAreas[MAX1401][MAX_TRANSAREAS]; // Locked areas -static unsigned int auAreas[MAX1401][MAX_TRANSAREAS]; // Size of locked areas -static BOOL bWindows9x = FALSE; // if we are Windows 95 or better -#ifdef _WIN64 -#define USE_NT_DIOC(ind) TRUE -#else -static BOOL abUseNTDIOC[MAX1401]; // Use NT-style DIOC parameters */ -#define USE_NT_DIOC(ind) abUseNTDIOC[ind] -#endif - -#endif - -#ifdef LINUX -static int aHand1401[MAX1401] = {0}; // handles for 1401s -#define INVALID_HANDLE_VALUE 0 // to avoid code differences -#endif - - -/* -** The CmdHead relates to backwards compatibility with ancient Microsoft (and Sperry!) -** versions of BASIC, where this header was needed so we could load a command into -** memory. -*/ -#pragma pack(1) // pack our structure -typedef struct CmdHead // defines header block on command -{ // for PC commands - char acBasic[5]; // BASIC information - needed to align things - unsigned short wBasicSz; // size as seen by BASIC - unsigned short wCmdSize; // size of the following info -} __packed CMDHEAD; -#pragma pack() // back to normal - -/* -** The rest of the header looks like this... -** int iRelPnt; relocation pointer... actual start -** char acName[8]; string holding the command name -** BYTE bMonRev; monitor revision level -** BYTE bCmdRev; command revision level -*/ - -typedef CMDHEAD *LPCMDHEAD; // pointer to a command header - -#define MAXSTRLEN 255 // maximum string length we use -#define TOHOST FALSE -#define TO1401 TRUE - -static short CheckHandle(short h) -{ - if ((h < 0) || (h >= MAX1401)) // must be legal range... - return U14ERR_BADHAND; - if (aHand1401[h] <= 0) // must be open - return U14ERR_BADHAND; - return U14ERR_NOERROR; -} - -#ifdef _IS_WINDOWS_ -/**************************************************************************** -** U14Status1401 Used for functions which do not pass any data in but -** get data back -****************************************************************************/ -static short U14Status1401(short sHand, LONG lCode, TCSBLOCK* pBlk) -{ - unsigned int dwBytes = 0; - - if ((sHand < 0) || (sHand >= MAX1401)) /* Check parameters */ - return U14ERR_BADHAND; -#ifndef _WIN64 - if (!USE_NT_DIOC(sHand)) - { /* Windows 9x DIOC methods? */ - if (DeviceIoControl(aHand1401[sHand], lCode, NULL, 0, pBlk,sizeof(TCSBLOCK),&dwBytes,NULL)) - return (short)((dwBytes>=sizeof(TCSBLOCK)) ? U14ERR_NOERROR : U14ERR_DRIVCOMMS); - else - return (short)GetLastError(); - } - else -#endif - { /* Windows NT or USB driver */ - PARAMBLK rWork; - rWork.sState = U14ERR_DRIVCOMMS; - if (DeviceIoControl(aHand1401[sHand], lCode, NULL, 0, &rWork,sizeof(PARAMBLK),&dwBytes,NULL) && - (dwBytes >= sizeof(PARAMBLK))) - { - *pBlk = rWork.csBlock; - return rWork.sState; - } - } - - return U14ERR_DRIVCOMMS; -} - -/**************************************************************************** -** U14Control1401 Used for functions which pass data in and only expect -** an error code back -****************************************************************************/ -static short U14Control1401(short sHand, LONG lCode, TCSBLOCK* pBlk) -{ - unsigned int dwBytes = 0; - - if ((sHand < 0) || (sHand >= MAX1401)) /* Check parameters */ - return U14ERR_BADHAND; - -#ifndef _WIN64 - if (!USE_NT_DIOC(sHand)) - { /* Windows 9x DIOC methods */ - if (DeviceIoControl(aHand1401[sHand], lCode, NULL, 0, pBlk, sizeof(TCSBLOCK), &dwBytes, NULL)) - return (short)(dwBytes >= sizeof(TCSBLOCK) ? U14ERR_NOERROR : U14ERR_DRIVCOMMS); - else - return (short)GetLastError(); - } - else -#endif - { /* Windows NT or later */ - PARAMBLK rWork; - rWork.sState = U14ERR_DRIVCOMMS; - if (DeviceIoControl(aHand1401[sHand], lCode, pBlk, sizeof(TCSBLOCK), &rWork, sizeof(PARAMBLK), &dwBytes, NULL) && - (dwBytes >= sizeof(PARAMBLK))) - return rWork.sState; - } - - return U14ERR_DRIVCOMMS; -} -#endif - -/**************************************************************************** -** SafeTickCount -** Gets time in approximately units of a millisecond. -*****************************************************************************/ -static long SafeTickCount(void) -{ -#ifdef _IS_WINDOWS_ - return GetTickCount(); -#endif -#ifdef LINUX - struct timeval tv; - gettimeofday(&tv, NULL); - return (tv.tv_sec*1000 + tv.tv_usec/1000); -#endif -} - -/**************************************************************************** -** A utility routine to get the command file extension for a given type -** of 1401. We assume the type code is vaguely legal. -****************************************************************************/ -static int ExtForType(short sType, char* szExt) -{ - szExt[0] = 0; /* Default return is a blank string */ - switch (sType) - { - case U14TYPE1401: strcpy(szExt, ".CMD"); break; // Standard 1401 - case U14TYPEPLUS: strcpy(szExt, ".GXC"); break; // 1401 plus - default: // All others are in a predictable sequence - strcpy(szExt, ".ARM"); - szExt[3] = (char)('M' + sType - U14TYPEU1401); - if (szExt[3] > 'Z') // Wrap round to ARA after ARZ - szExt[3] = (char)(szExt[3] - 26); - } - return 0; -} - -/**************************************************************************** -** U14WhenToTimeOut -** Returns the time to time out in time units suitable for the machine -** we are running on ie millsecs for pc/linux, or Mac/ -****************************************************************************/ -U14API(int) U14WhenToTimeOut(short hand) -{ - int iNow = SafeTickCount(); - if ((hand >= 0) && (hand < MAX1401)) - iNow += alTimeOutPeriod[hand]; - return iNow; -} - -/**************************************************************************** -** U14PassedTime -** Returns non zero if the timed passed in has been passed 0 if not -****************************************************************************/ -U14API(short) U14PassedTime(int lCheckTime) -{ - return (short)((SafeTickCount()-lCheckTime) > 0); -} - -/**************************************************************************** -** TranslateString -** Tidies up string that U14GetString returns. Converts all the commas in a -** string to spaces. Removes terminating CR character. May do more in future. -****************************************************************************/ -static void TranslateString(char* pStr) -{ - int i = 0; - while (pStr[i]) - { - if (pStr[i] == ',') - pStr[i] = ' '; /* convert comma to space */ - ++i; - } - - if ((i > 0) && (pStr[i-1] == '\n')) /* kill terminating LF */ - pStr[i-1] = (char)0; -} - -/**************************************************************************** -** U14StrToLongs -** Converts a string to an array of longs and returns the number of values -****************************************************************************/ -U14API(short) U14StrToLongs(const char* pszBuff, U14LONG *palNums, short sMaxLongs) -{ - unsigned short wChInd = 0; // index into source - short sLgInd = 0; // index into result longs - - while (pszBuff[wChInd] && // until we get to end of string... - (sLgInd < sMaxLongs)) // ...or filled the buffer - { - // Why not use a C Library converter? - switch (pszBuff[wChInd]) - { - case '-': - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - { - BOOL bDone = FALSE; // true at end of number - int iSign = 1; // sign of number - long lValue = 0; - - while ((!bDone) && pszBuff[wChInd]) - { - switch (pszBuff[wChInd]) - { - case '-': - iSign = -1; // swap sign - break; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - lValue *= 10; // move to next digit base 10 - lValue += ((int)pszBuff[wChInd]-(int)'0'); - break; - - default: // end of number - bDone = TRUE; - break; - } - wChInd++; // move onto next character - } - palNums[sLgInd] = lValue * iSign; - sLgInd++; - } - break; - - default: - wChInd++; // look at next char - break; - } - } - return (sLgInd); -} - - -/**************************************************************************** -** U14LongsFrom1401 -** Gets the next waiting line from the 1401 and converts it longs -** Returns the number of numbers read or an error. -****************************************************************************/ -U14API(short) U14LongsFrom1401(short hand, U14LONG *palBuff, short sMaxLongs) -{ - char szWork[MAXSTRLEN]; - short sResult = U14GetString(hand, szWork, MAXSTRLEN);/* get reply from 1401 */ - if (sResult == U14ERR_NOERROR) /* if no error convert */ - sResult = U14StrToLongs(szWork, palBuff, sMaxLongs); - return sResult; -} - -/**************************************************************************** -** U14CheckErr -** Sends the ERR command to the 1401 and gets the result. Returns 0, a -** negative error code, or the first error value. -****************************************************************************/ -U14API(short) U14CheckErr(short hand) -{ - short sResult = U14SendString(hand, ";ERR;"); - if (sResult == U14ERR_NOERROR) - { - U14LONG er[3]; - sResult = U14LongsFrom1401(hand, er, 3); - if (sResult > 0) - { - sResult = (short)er[0]; /* Either zero or an error value */ -#ifdef _DEBUG - if (er[0] != 0) - { - char szMsg[50]; - sprintf(szMsg, "U14CheckErr returned %d,%d\n", er[0], er[1]); - OutputDebugString(szMsg); - } -#endif - } - else - { - if (sResult == 0) - sResult = U14ERR_TIMEOUT; /* No numbers equals timeout */ - } - } - - return sResult; -} - -/**************************************************************************** -** U14LastErrCode -** Returns the last code from the driver. This is for Windows where all calls -** go through the Control and Status routines, so we can save any error. -****************************************************************************/ -U14API(short) U14LastErrCode(short hand) -{ - if ((hand < 0) || (hand >= MAX1401)) - return U14ERR_BADHAND; - return asLastRetCode[hand]; -} - -/**************************************************************************** -** U14SetTimeout -** Set the timeout period for 1401 comms in milliseconds -****************************************************************************/ -U14API(void) U14SetTimeout(short hand, int lTimeOut) -{ - if ((hand < 0) || (hand >= MAX1401)) - return; - alTimeOutPeriod[hand] = lTimeOut; -} - -/**************************************************************************** -** U14GetTimeout -** Get the timeout period for 1401 comms in milliseconds -****************************************************************************/ -U14API(int) U14GetTimeout(short hand) -{ - if ((hand < 0) || (hand >= MAX1401)) - return U14ERR_BADHAND; - return alTimeOutPeriod[hand]; -} - -/**************************************************************************** -** U14OutBufSpace -** Return the space in the output buffer, or an error. -****************************************************************************/ -U14API(short) U14OutBufSpace(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_GETOUTBUFSPACE,&csBlock); - if (sErr == U14ERR_NOERROR) - sErr = csBlock.ints[0]; - return sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_GetOutBufSpace(aHand1401[hand]) : sErr; -#endif -} - - -/**************************************************************************** -** U14BaseAddr1401 -** Returns the 1401 base address or an error code. Meaningless nowadays -****************************************************************************/ -U14API(int) U14BaseAddr1401(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - int iError = U14Status1401(hand, U14_GETBASEADDRESS,&csBlock); - if (iError == U14ERR_NOERROR) - iError = csBlock.longs[0]; - return iError; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_GetBaseAddress(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** U14StateOf1401 -** Return error state, either NOERROR or a negative code. -****************************************************************************/ -U14API(short) U14StateOf1401(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_STATEOF1401, &csBlock); - if (sErr == U14ERR_NOERROR) - { - sErr = csBlock.ints[0]; // returned 1401 state - if ((sErr >= DRIVRET_STD) && (sErr <= DRIVRET_MAX)) - sErr = U14ERR_NOERROR; - } -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - sErr = (short)CED_StateOf1401(aHand1401[hand]); - if ((sErr >= DRIVRET_STD) && (sErr <= DRIVRET_MAX)) - sErr = U14ERR_NOERROR; - } -#endif - return sErr; -} - -/**************************************************************************** -** U14DriverVersion -** Returns the driver version. Hi word is major revision, low word is minor. -** If you pass in a silly handle (like -1), we return the version of the last -** driver we know of (to cope with PCI and no 1401 attached). -****************************************************************************/ -U14API(int) U14DriverVersion(short hand) -{ - return CheckHandle(hand) != U14ERR_NOERROR ? lLastDriverVersion : alDriverVersion[hand]; -} - -/**************************************************************************** -** U14DriverType -** Returns the driver type. The type, 0=ISA/NU-Bus, 1=PCI, 2=USB, 3=HSS -** If you pass in a silly handle (like -1), we return the type of the last -** driver we know of (to cope with PCI and no 1401 attached). -****************************************************************************/ -U14API(int) U14DriverType(short hand) -{ - return CheckHandle(hand) != U14ERR_NOERROR ? lLastDriverType : asDriverType[hand]; -} - -/**************************************************************************** -** U14DriverName -** Returns the driver type as 3 character (ISA, PCI, USB or HSS)) -****************************************************************************/ -U14API(short) U14DriverName(short hand, char* pBuf, unsigned short wMax) -{ - char* pName; - *pBuf = 0; // Start off with a blank string - switch (U14DriverType(hand)) // Results according to type - { - case 0: pName = "ISA"; break; - case 1: pName = "PCI"; break; - case 2: pName = "USB"; break; - case 3: pName = "HSS"; break; - default: pName = "???"; break; - } - strncpy(pBuf, pName, wMax); // Copy the correct name to return - - return U14ERR_NOERROR; -} - -/**************************************************************************** -** U14BlkTransState -** Returns 0 no transfer in progress, 1 transfer in progress or an error code -****************************************************************************/ -U14API(short) U14BlkTransState(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_BLKTRANSSTATE, &csBlock); - if (sErr == U14ERR_NOERROR) - sErr = csBlock.ints[0]; - return sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_BlkTransState(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** U14Grab1401 -** Take control of the 1401 for diagnostics purposes. USB does nothing. -****************************************************************************/ -U14API(short) U14Grab1401(short hand) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { -#ifdef _IS_WINDOWS_ - if (abGrabbed[hand]) // 1401 should not have been grabbed - sErr = U14ERR_ALREADYSET; // Error code defined for this - else - { - TCSBLOCK csBlock; - sErr = U14Control1401(hand, U14_GRAB1401, &csBlock); - } -#endif -#ifdef LINUX - // 1401 should not have been grabbed - sErr = abGrabbed[hand] ? U14ERR_ALREADYSET : CED_Grab1401(aHand1401[hand]); -#endif - if (sErr == U14ERR_NOERROR) - abGrabbed[hand] = TRUE; - } - return sErr; -} - -/**************************************************************************** -** U14Free1401 -****************************************************************************/ -U14API(short) U14Free1401(short hand) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { -#ifdef _IS_WINDOWS_ - if (abGrabbed[hand]) // 1401 should have been grabbed - { - TCSBLOCK csBlock; - sErr = U14Control1401(hand, U14_FREE1401, &csBlock); - } - else - sErr = U14ERR_NOTSET; -#endif -#ifdef LINUX - // 1401 should not have been grabbed - sErr = abGrabbed[hand] ? CED_Free1401(aHand1401[hand]) : U14ERR_NOTSET; -#endif - if (sErr == U14ERR_NOERROR) - abGrabbed[hand] = FALSE; - } - return sErr; -} - -/**************************************************************************** -** U14Peek1401 -** DESCRIPTION Cause the 1401 to do one or more peek operations. -** If lRepeats is zero, the loop will continue until U14StopDebugLoop -** is called. After the peek is done, use U14GetDebugData to retrieve -** the results of the peek. -****************************************************************************/ -U14API(short) U14Peek1401(short hand, unsigned int dwAddr, int nSize, int nRepeats) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - csBlock.longs[0] = (long)dwAddr; - csBlock.longs[1] = nSize; - csBlock.longs[2] = nRepeats; - sErr = U14Control1401(hand, U14_DBGPEEK, &csBlock); -#endif -#ifdef LINUX - TDBGBLOCK dbb; - dbb.iAddr = (int)dwAddr; - dbb.iWidth = nSize; - dbb.iRepeats = nRepeats; - sErr = CED_DbgPeek(aHand1401[hand], &dbb); -#endif - } - else - sErr = U14ERR_NOTSET; - } - return sErr; -} - -/**************************************************************************** -** U14Poke1401 -** DESCRIPTION Cause the 1401 to do one or more poke operations. -** If lRepeats is zero, the loop will continue until U14StopDebugLoop -** is called. -****************************************************************************/ -U14API(short) U14Poke1401(short hand, unsigned int dwAddr, unsigned int dwValue, - int nSize, int nRepeats) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - csBlock.longs[0] = (long)dwAddr; - csBlock.longs[1] = nSize; - csBlock.longs[2] = nRepeats; - csBlock.longs[3] = (long)dwValue; - sErr = U14Control1401(hand, U14_DBGPOKE, &csBlock); -#endif -#ifdef LINUX - TDBGBLOCK dbb; - dbb.iAddr = (int)dwAddr; - dbb.iWidth = nSize; - dbb.iRepeats= nRepeats; - dbb.iData = (int)dwValue; - sErr = CED_DbgPoke(aHand1401[hand], &dbb); -#endif - } - else - sErr = U14ERR_NOTSET; - } - return sErr; -} - -/**************************************************************************** -** U14Ramp1401 -** DESCRIPTION Cause the 1401 to loop, writing a ramp to a location. -** If lRepeats is zero, the loop will continue until U14StopDebugLoop. -****************************************************************************/ -U14API(short) U14Ramp1401(short hand, unsigned int dwAddr, unsigned int dwDef, unsigned int dwEnable, - int nSize, int nRepeats) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - csBlock.longs[0] = (long)dwAddr; - csBlock.longs[1] = (long)dwDef; - csBlock.longs[2] = (long)dwEnable; - csBlock.longs[3] = nSize; - csBlock.longs[4] = nRepeats; - sErr = U14Control1401(hand, U14_DBGRAMPDATA, &csBlock); -#endif -#ifdef LINUX - TDBGBLOCK dbb; - dbb.iAddr = (int)dwAddr; - dbb.iDefault = (int)dwDef; - dbb.iMask = (int)dwEnable; - dbb.iWidth = nSize; - dbb.iRepeats = nRepeats; - sErr = CED_DbgRampAddr(aHand1401[hand], &dbb); -#endif - } - else - sErr = U14ERR_NOTSET; - } - return sErr; -} - -/**************************************************************************** -** U14RampAddr -** DESCRIPTION Cause the 1401 to loop, reading from a ramping location. -** If lRepeats is zero, the loop will continue until U14StopDebugLoop -****************************************************************************/ -U14API(short) U14RampAddr(short hand, unsigned int dwDef, unsigned int dwEnable, - int nSize, int nRepeats) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - csBlock.longs[0] = (long)dwDef; - csBlock.longs[1] = (long)dwEnable; - csBlock.longs[2] = nSize; - csBlock.longs[3] = nRepeats; - sErr = U14Control1401(hand, U14_DBGRAMPADDR, &csBlock); -#endif -#ifdef LINUX - TDBGBLOCK dbb; - dbb.iDefault = (int)dwDef; - dbb.iMask = (int)dwEnable; - dbb.iWidth = nSize; - dbb.iRepeats = nRepeats; - sErr = CED_DbgRampAddr(aHand1401[hand], &dbb); -#endif - } - else - sErr = U14ERR_NOTSET; - } - return sErr; -} - -/**************************************************************************** -** U14StopDebugLoop -** DESCRIPTION Stops a peek\poke\ramp that, with repeats set to zero, -** will otherwise continue forever. -****************************************************************************/ -U14API(short) U14StopDebugLoop(short hand) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) -#ifdef _IS_WINDOWS_ - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { - TCSBLOCK csBlock; - sErr = U14Control1401(hand, U14_DBGSTOPLOOP, &csBlock); - } - else - sErr = U14ERR_NOTSET; - } -#endif -#ifdef LINUX - sErr = abGrabbed[hand] ? CED_DbgStopLoop(aHand1401[hand]) : U14ERR_NOTSET; -#endif - return sErr; -} - -/**************************************************************************** -** U14GetDebugData -** DESCRIPTION Returns the result from a previous peek operation. -****************************************************************************/ -U14API(short) U14GetDebugData(short hand, U14LONG* plValue) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - if (abGrabbed[hand]) // 1401 should have been grabbed - { -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - sErr = U14Status1401(hand, U14_DBGGETDATA, &csBlock); - if (sErr == U14ERR_NOERROR) - *plValue = csBlock.longs[0]; // Return the data -#endif -#ifdef LINUX - TDBGBLOCK dbb; - sErr = CED_DbgGetData(aHand1401[hand], &dbb); - if (sErr == U14ERR_NOERROR) - *plValue = dbb.iData; /* Return the data */ -#endif - } - else - sErr = U14ERR_NOTSET; - } - return sErr; -} - -/**************************************************************************** -** U14StartSelfTest -****************************************************************************/ -U14API(short) U14StartSelfTest(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - return U14Control1401(hand, U14_STARTSELFTEST, &csBlock); -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_StartSelfTest(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** U14CheckSelfTest -****************************************************************************/ -U14API(short) U14CheckSelfTest(short hand, U14LONG *pData) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_CHECKSELFTEST, &csBlock); - if (sErr == U14ERR_NOERROR) - { - pData[0] = csBlock.longs[0]; /* Return the results to user */ - pData[1] = csBlock.longs[1]; - pData[2] = csBlock.longs[2]; - } -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) /* Check parameters */ - { - TGET_SELFTEST gst; - sErr = CED_CheckSelfTest(aHand1401[hand], &gst); - if (sErr == U14ERR_NOERROR) - { - pData[0] = gst.code; /* Return the results to user */ - pData[1] = gst.x; - pData[2] = gst.y; - } - } -#endif - return sErr; -} - -/**************************************************************************** -** U14GetUserMemorySize -****************************************************************************/ -U14API(short) U14GetUserMemorySize(short hand, unsigned int *pMemorySize) -{ - // The original 1401 used a different command for getting the size - short sErr = U14SendString(hand, (asType1401[hand] == U14TYPE1401) ? "MEMTOP;" : "MEMTOP,?;"); - *pMemorySize = 0; /* if we get error then leave size set at 0 */ - if (sErr == U14ERR_NOERROR) - { - U14LONG alLimits[4]; - sErr = U14LongsFrom1401(hand, alLimits, 4); - if (sErr > 0) /* +ve sErr is the number of values read */ - { - sErr = U14ERR_NOERROR; /* All OK, flag success */ - if (asType1401[hand] == U14TYPE1401) /* result for standard */ - *pMemorySize = alLimits[0] - alLimits[1]; /* memtop-membot */ - else - *pMemorySize = alLimits[0]; /* result for plus or u1401 */ - } - } - return sErr; -} - -/**************************************************************************** -** U14TypeOf1401 -** Returns the type of the 1401, maybe unknown -****************************************************************************/ -U14API(short) U14TypeOf1401(short hand) -{ - if ((hand < 0) || (hand >= MAX1401)) /* Check parameters */ - return U14ERR_BADHAND; - else - return asType1401[hand]; -} - -/**************************************************************************** -** U14NameOf1401 -** Returns the type of the 1401 as a string, blank if unknown -****************************************************************************/ -U14API(short) U14NameOf1401(short hand, char* pBuf, unsigned short wMax) -{ - short sErr = CheckHandle(hand); - if (sErr == U14ERR_NOERROR) - { - char* pName; - switch (asType1401[hand]) // Results according to type - { - case U14TYPE1401: pName = "Std 1401"; break; - case U14TYPEPLUS: pName = "1401plus"; break; - case U14TYPEU1401: pName = "micro1401"; break; - case U14TYPEPOWER: pName = "Power1401"; break; - case U14TYPEU14012:pName = "Micro1401 mk II"; break; - case U14TYPEPOWER2:pName = "Power1401 mk II"; break; - case U14TYPEU14013:pName = "Micro1401-3"; break; - case U14TYPEPOWER3:pName = "Power1401-3"; break; - default: pName = "Unknown"; - } - strncpy(pBuf, pName, wMax); - } - return sErr; -} - -/**************************************************************************** -** U14TransferFlags -** Returns the driver block transfer flags. -** Bits can be set - see U14TF_ constants in use1401.h -*****************************************************************************/ -U14API(short) U14TransferFlags(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_TRANSFERFLAGS, &csBlock); - return (sErr == U14ERR_NOERROR) ? (short)csBlock.ints[0] : sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_TransferFlags(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** GetDriverVersion -** Actually reads driver version from the device driver. -** Hi word is major revision, low word is minor revision. -** Assumes that hand has been checked. Also codes driver type in bits 24 up. -*****************************************************************************/ -static int GetDriverVersion(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - int iErr = U14Status1401(hand, U14_GETDRIVERREVISION, &csBlock); - if (iErr == U14ERR_NOERROR) - iErr = csBlock.longs[0]; - return iErr; -#endif -#ifdef LINUX - return CED_GetDriverRevision(aHand1401[hand]); -#endif -} - -/**************************************************************************** -** U14MonitorRev -** Returns the 1401 monitor revision number. -** The number returned is the minor revision - the part after the -** decimal point - plus the major revision times 1000. -*****************************************************************************/ -U14API(int) U14MonitorRev(short hand) -{ - int iRev = 0; - int iErr = CheckHandle(hand); - if (iErr != U14ERR_NOERROR) // Check open and in use - return iErr; - - if (asType1401[hand] >= U14TYPEPOWER2) // The Power2 onwards can give us the monitor - { // revision directly for all versions - iErr = U14SendString(hand, "INFO,S,28;"); - if (iErr == U14ERR_NOERROR) - { - U14LONG lVals[2]; // Read a single number being the revision - iErr = U14LongsFrom1401(hand, lVals, 1); - if (iErr > 0) - { - iErr = U14ERR_NOERROR; - iRev = lVals[0]; // This is the minor part of the revision - iRev += asType1401[hand] * 10000; - } - } - } - else - { /* Do it the hard way for older hardware */ - iErr = U14SendString(hand, ";CLIST;"); /* ask for command levels */ - if (iErr == U14ERR_NOERROR) - { - while (iErr == U14ERR_NOERROR) - { - char wstr[50]; - iErr = U14GetString(hand, wstr, 45); - if (iErr == U14ERR_NOERROR) - { - char *pstr = strstr(wstr,"RESET"); /* Is this the RESET command? */ - if ((pstr == wstr) && (wstr[5] == ' ')) - { - char *pstr2; - size_t l; - pstr += 6; /* Move past RESET and followinmg char */ - l = strlen(pstr); /* The length of text remaining */ - while (((pstr[l-1] == ' ') || (pstr[l-1] == 13)) && (l > 0)) - { - pstr[l-1] = 0; /* Tidy up string at the end */ - l--; /* by removing spaces and CRs */ - } - pstr2 = strchr(pstr, '.'); /* Find the decimal point */ - if (pstr2 != NULL) /* If we found the DP */ - { - *pstr2 = 0; /* End pstr string at DP */ - pstr2++; /* Now past the decimal point */ - iRev = atoi(pstr2); /* Get the number after point */ - } - iRev += (atoi(pstr) * 1000); /* Add first bit * 1000 */ - } - if ((strlen(wstr) < 3) && (wstr[0] == ' ')) - break; /* Spot the last line of results */ - } - } - } - } - if (iErr == U14ERR_NOERROR) /* Return revision if no error */ - iErr = iRev; - - return iErr; -} - -/**************************************************************************** -** U14TryToOpen Tries to open the 1401 number passed -** Note : This will succeed with NT driver even if no I/F card or -** 1401 switched off, so we check state and close the driver -** if the state is unsatisfactory in U14Open1401. -****************************************************************************/ -#ifdef _IS_WINDOWS_ -#define U14NAMEOLD "\\\\.\\CED_140%d" -#define U14NAMENEW "\\\\.\\CED%d" -static short U14TryToOpen(int n1401, long* plRetVal, short* psHandle) -{ - short sErr = U14ERR_NOERROR; - HANDLE hDevice = INVALID_HANDLE_VALUE; - unsigned int dwErr = 0; - int nFirst, nLast, nDev = 0; /* Used for the search for a 1401 */ - BOOL bOldName = FALSE; /* start by looking for a modern driver */ - - if (n1401 == 0) /* If we need to look for a 1401 */ - { - nFirst = 1; /* Set the search range */ - nLast = MAX1401; /* through all the possible 1401s */ - } - else - nFirst = nLast = n1401; /* Otherwise just one 1401 */ - - while (hDevice == INVALID_HANDLE_VALUE) /* Loop to try for a 1401 */ - { - for (nDev = nFirst; nDev <= nLast; nDev++) - { - char szDevName[40]; /* name of the device to open */ - sprintf(szDevName, bOldName ? U14NAMEOLD : U14NAMENEW, nDev); - hDevice = CreateFile(szDevName, GENERIC_WRITE | GENERIC_READ, - 0, 0, /* Unshared mode does nothing as this is a device */ - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - if (hDevice != INVALID_HANDLE_VALUE)/* Check 1401 if opened */ - { - TCSBLOCK csBlock; - assert(aHand1401[nDev-1] == INVALID_HANDLE_VALUE); // assert if already open - aHand1401[nDev-1] = hDevice; /* Save handle for now */ - -#ifndef _WIN64 - // Use DIOC method if not windows 9x or if using new device name - abUseNTDIOC[nDev-1] = (BOOL)(!bWindows9x || !bOldName); -#endif - sErr = U14Status1401((short)(nDev-1), U14_TYPEOF1401, &csBlock); - if (sErr == U14ERR_NOERROR) - { - *plRetVal = csBlock.ints[0]; - if (csBlock.ints[0] == U14ERR_INUSE)/* Prevent multi opens */ - { - CloseHandle(hDevice); /* treat as open failure */ - hDevice = INVALID_HANDLE_VALUE; - aHand1401[nDev-1] = INVALID_HANDLE_VALUE; - sErr = U14ERR_INUSE; - } - else - break; /* Exit from for loop on success */ - } - else - { - CloseHandle(hDevice); /* Give up if func fails */ - hDevice = INVALID_HANDLE_VALUE; - aHand1401[nDev-1] = INVALID_HANDLE_VALUE; - } - } - else - { - unsigned int dwe = GetLastError(); /* Get error code otherwise */ - if ((dwe != ERROR_FILE_NOT_FOUND) || (dwErr == 0)) - dwErr = dwe; /* Ignore repeats of 'not found' */ - } - } - - if ((hDevice == INVALID_HANDLE_VALUE) &&/* No device found, and... */ - (bWindows9x) && /* ...old names are allowed, and... */ - (bOldName == FALSE)) /* ...not tried old names yet */ - bOldName = TRUE; /* Set flag and go round again */ - else - break; /* otherwise that's all folks */ - } - - if (hDevice != INVALID_HANDLE_VALUE) /* If we got our device open */ - *psHandle = (short)(nDev-1); /* return 1401 number opened */ - else - { - if (dwErr == ERROR_FILE_NOT_FOUND) /* Sort out the error codes */ - sErr = U14ERR_NO1401DRIV; /* if file not found */ - else if (dwErr == ERROR_NOT_SUPPORTED) - sErr = U14ERR_DRIVTOOOLD; /* if DIOC not supported */ - else if (dwErr == ERROR_ACCESS_DENIED) - sErr = U14ERR_INUSE; - else - sErr = U14ERR_DRIVCOMMS; /* otherwise assume comms problem */ - } - return sErr; -} -#endif -#ifdef LINUX -static short U14TryToOpen(int n1401, long* plRetVal, short* psHandle) -{ - short sErr = U14ERR_NOERROR; - int fh = 0; // will be 1401 handle - int iErr = 0; - int nFirst, nLast, nDev = 0; // Used for the search for a 1401 - - if (n1401 == 0) // If we need to look for a 1401 - { - nFirst = 1; /* Set the search range */ - nLast = MAX1401; /* through all the possible 1401s */ - } - else - nFirst = nLast = n1401; /* Otherwise just one 1401 */ - - for (nDev = nFirst; nDev <= nLast; nDev++) - { - char szDevName[40]; // name of the device to open - sprintf(szDevName,"/dev/cedusb/%d", nDev-1); - fh = open(szDevName, O_RDWR); // can only be opened once at a time - if (fh > 0) // Check 1401 if opened - { - int iType1401 = CED_TypeOf1401(fh); // get 1401 type - aHand1401[nDev-1] = fh; // Save handle for now - if (iType1401 >= 0) - { - *plRetVal = iType1401; - break; // Exit from for loop on success - } - else - { - close(fh); // Give up if func fails - fh = 0; - aHand1401[nDev-1] = 0; - } - } - else - { - if (((errno != ENODEV) && (errno != ENOENT)) || (iErr == 0)) - iErr = errno; // Ignore repeats of 'not found' - } - } - - - if (fh) // If we got our device open - *psHandle = (short)(nDev-1); // return 1401 number opened - else - { - if ((iErr == ENODEV) || (iErr == ENOENT)) // Sort out the error codes - sErr = U14ERR_NO1401DRIV; // if file not found - else if (iErr == EBUSY) - sErr = U14ERR_INUSE; - else - sErr = U14ERR_DRIVCOMMS; // otherwise assume comms problem - } - - return sErr; -} -#endif -/**************************************************************************** -** U14Open1401 -** Tries to get the 1401 for use by this application -*****************************************************************************/ -U14API(short) U14Open1401(short n1401) -{ - long lRetVal = -1; - short sErr; - short hand = 0; - - if ((n1401 < 0) || (n1401 > MAX1401)) // must check the 1401 number - return U14ERR_BAD1401NUM; - - szLastName[0] = 0; /* initialise the error info string */ - - sErr = U14TryToOpen(n1401, &lRetVal, &hand); - if (sErr == U14ERR_NOERROR) - { - long lDriverVersion = GetDriverVersion(hand); /* get driver revision */ - long lDriverRev = -1; - if (lDriverVersion >= 0) /* can use it if all OK */ - { - lLastDriverType = (lDriverVersion >> 24) & 0x000000FF; - asDriverType[hand] = (short)lLastDriverType; /* Drv type */ - lLastDriverVersion = lDriverVersion & 0x00FFFFFF; - alDriverVersion[hand] = lLastDriverVersion; /* Actual version */ - lDriverRev = ((lDriverVersion>>16) & 0x00FF); /* use hi word */ - } - else - { - U14Close1401(hand); /* If there is a problem we should close */ - return (short)lDriverVersion; /* and return the error code */ - } - - if (lDriverRev < MINDRIVERMAJREV) /* late enough version? */ - { - U14Close1401(hand); /* If there is a problem we should close */ - return U14ERR_DRIVTOOOLD; /* too old */ - } - - asLastRetCode[hand] = U14ERR_NOERROR; /* Initialise this 1401s info */ - abGrabbed[hand] = FALSE; /* we are not in single step mode */ - U14SetTimeout(hand, 3000); /* set 3 seconds as default timeout */ - - switch (lRetVal) - { - case DRIVRET_STD: asType1401[hand] = U14TYPE1401; break; /* Some we do by hand */ - case DRIVRET_U1401:asType1401[hand] = U14TYPEU1401; break; - case DRIVRET_PLUS: asType1401[hand] = U14TYPEPLUS; break; - default: // For the power upwards, we can calculate the codes - if ((lRetVal >= DRIVRET_POWER) && (lRetVal <= DRIVRET_MAX)) - asType1401[hand] = (short)(lRetVal - (DRIVRET_POWER - U14TYPEPOWER)); - else - asType1401[hand] = U14TYPEUNKNOWN; - break; - } - U14KillIO1401(hand); /* resets the 1401 buffers */ - - if (asType1401[hand] != U14TYPEUNKNOWN) /* If all seems OK so far */ - { - sErr = U14CheckErr(hand); /* we can check 1401 comms now */ - if (sErr != 0) /* If this failed to go OK */ - U14Reset1401(hand); /* Reset the 1401 to try to sort it out */ - } - - sErr = U14StateOf1401(hand);/* Get the state of the 1401 for return */ - if (sErr == U14ERR_NOERROR) - sErr = hand; /* return the handle if no problem */ - else - U14Close1401(hand); /* If there is a problem we should close */ - } - - return sErr; -} - - -/**************************************************************************** -** U14Close1401 -** Closes the 1401 so someone else can use it. -****************************************************************************/ -U14API(short) U14Close1401(short hand) -{ - int j; - int iAreaMask = 0; // Mask for active areas - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) // Check open and in use - return sErr; - - for (j = 0; j MAXSTRLEN) - return U14ERR_STRLEN; // String too long - -#ifdef _IS_WINDOWS_ - // To get here we must wait for the buffer to have some space - lTimeOutTicks = U14WhenToTimeOut(hand); - do - { - bSpaceToSend = (BOOL)((long)U14OutBufSpace(hand) >= nChars); - } - while (!bSpaceToSend && !U14PassedTime(lTimeOutTicks)); - - if (!bSpaceToSend) /* Last-ditch attempt to avoid timeout */ - { /* This can happen with anti-virus or network activity! */ - int i; - for (i = 0; (i < 4) && (!bSpaceToSend); ++i) - { - Sleep(25); /* Give other threads a chance for a while */ - bSpaceToSend = (BOOL)((long)U14OutBufSpace(hand) >= nChars); - } - } - - if (asLastRetCode[hand] == U14ERR_NOERROR) /* no errors? */ - { - if (bSpaceToSend) - { - PARAMBLK rData; - unsigned int dwBytes; - char tstr[MAXSTRLEN+5]; /* Buffer for chars */ - - if ((hand < 0) || (hand >= MAX1401)) - sErr = U14ERR_BADHAND; - else - { - strcpy(tstr, pString); /* Into local buf */ -#ifndef _WIN64 - if (!USE_NT_DIOC(hand)) /* Using WIN 95 driver access? */ - { - int iOK = DeviceIoControl(aHand1401[hand], (unsigned int)U14_SENDSTRING, - NULL, 0, tstr, nChars, - &dwBytes, NULL); - if (iOK) - sErr = (dwBytes >= (unsigned int)nChars) ? U14ERR_NOERROR : U14ERR_DRIVCOMMS; - else - sErr = (short)GetLastError(); - } - else -#endif - { - int iOK = DeviceIoControl(aHand1401[hand],(unsigned int)U14_SENDSTRING, - tstr, nChars, - &rData,sizeof(PARAMBLK),&dwBytes,NULL); - if (iOK && (dwBytes >= sizeof(PARAMBLK))) - sErr = rData.sState; - else - sErr = U14ERR_DRIVCOMMS; - } - - if (sErr != U14ERR_NOERROR) // If we have had a comms error - U14ForceReset(hand); // make sure we get real reset - } - - return sErr; - - } - else - { - U14ForceReset(hand); // make sure we get real reset - return U14ERR_TIMEOUT; - } - } - else - return asLastRetCode[hand]; -#endif -#ifdef LINUX - // Just try to send it and see what happens! - sErr = CED_SendString(aHand1401[hand], pString, nChars); - if (sErr != U14ERR_NOOUT) // if any result except "no room in output"... - { - if (sErr != U14ERR_NOERROR) // if a problem... - U14ForceReset(hand); // ...make sure we get real reset next time - return sErr; // ... we are done as nothing we can do - } - - // To get here we must wait for the buffer to have some space - lTimeOutTicks = U14WhenToTimeOut(hand); - do - { - bSpaceToSend = (BOOL)((long)U14OutBufSpace(hand) >= nChars); - if (!bSpaceToSend) - sched_yield(); // let others have fun while we wait - } - while (!bSpaceToSend && !U14PassedTime(lTimeOutTicks)); - - if (asLastRetCode[hand] == U14ERR_NOERROR) /* no errors? */ - { - if (bSpaceToSend) - { - sErr = CED_SendString(aHand1401[hand], pString, nChars); - if (sErr != U14ERR_NOERROR) // If we have had a comms error - U14ForceReset(hand); // make sure we get real reset - return sErr; - } - else - { - U14ForceReset(hand); // make sure we get real reset - return U14ERR_TIMEOUT; - } - } - else - return asLastRetCode[hand]; -#endif -} - -/**************************************************************************** -** U14SendChar -** Send character to the 1401 -*****************************************************************************/ -U14API(short) U14SendChar(short hand, char cChar) -{ -#ifdef _IS_WINDOWS_ - char sz[2]=" "; // convert to a string and send - sz[0] = cChar; - sz[1] = 0; - return(U14SendString(hand, sz)); // String routines are better -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_SendChar(aHand1401[hand], cChar) : sErr; -#endif -} - -/**************************************************************************** -** U14GetString -** Get a string from the 1401. Returns a null terminated string. -** The string is all the characters up to the next CR in the buffer -** or the end of the buffer if that comes first. This only returns text -** if there is a CR in the buffer. The terminating CR character is removed. -** wMaxLen Is the size of the buffer and must be at least 2 or an error. -** Returns U14ERR_NOERR if OK with the result in the string or a negative -** error code. Any error from the device causes us to set up for -** a full reset. -****************************************************************************/ -U14API(short) U14GetString(short hand, char* pBuffer, unsigned short wMaxLen) -{ - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) // If an error... - return sErr; // ...bail out! - -#ifdef _IS_WINDOWS_ - if (wMaxLen>1) // we need space for terminating 0 - { - BOOL bLineToGet; // true when a line to get - long lTimeOutTicks = U14WhenToTimeOut(hand); - do - bLineToGet = (BOOL)(U14LineCount(hand) != 0); - while (!bLineToGet && !U14PassedTime(lTimeOutTicks)); - - if (!bLineToGet) /* Last-ditch attempt to avoid timeout */ - { /* This can happen with anti-virus or network activity! */ - int i; - for (i = 0; (i < 4) && (!bLineToGet); ++i) - { - Sleep(25); /* Give other threads a chance for a while */ - bLineToGet = (BOOL)(U14LineCount(hand) != 0); - } - } - - if (bLineToGet) - { - if (asLastRetCode[hand] == U14ERR_NOERROR) /* all ok so far */ - { - unsigned int dwBytes = 0; - *((unsigned short *)pBuffer) = wMaxLen; /* set up length */ -#ifndef _WIN64 - if (!USE_NT_DIOC(hand)) /* Win 95 DIOC here ? */ - { - char tstr[MAXSTRLEN+5]; /* Buffer for Win95 chars */ - int iOK; - - if (wMaxLen > MAXSTRLEN) /* Truncate length */ - wMaxLen = MAXSTRLEN; - - *((unsigned short *)tstr) = wMaxLen; /* set len */ - - iOK = DeviceIoControl(aHand1401[hand],(unsigned int)U14_GETSTRING, - NULL, 0, tstr, wMaxLen+sizeof(short), - &dwBytes, NULL); - if (iOK) /* Device IO control OK ? */ - { - strcpy(pBuffer, tstr); - sErr = U14ERR_NOERROR; - } - else - { - sErr = (short)GetLastError(); - if (sErr > 0) /* Errors are -ve */ - sErr = (short)-sErr; - } - } - else -#endif - { /* Here for NT, the DLL must own the buffer */ - HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE,wMaxLen+sizeof(short)); - if (hMem) - { - char* pMem = (char*)GlobalLock(hMem); - if (pMem) - { - int iOK = DeviceIoControl(aHand1401[hand],(unsigned int)U14_GETSTRING, - NULL, 0, pMem, wMaxLen+sizeof(short), - &dwBytes, NULL); - if (iOK) /* Device IO control OK ? */ - { - if (dwBytes >= wMaxLen) - { - strcpy(pBuffer, pMem+sizeof(short)); - sErr = *((SHORT*)pMem); - } - else - sErr = U14ERR_DRIVCOMMS; - } - else - sErr = U14ERR_DRIVCOMMS; - - GlobalUnlock(hMem); - } - else - sErr = U14ERR_OUTOFMEMORY; - - GlobalFree(hMem); - } - else - sErr = U14ERR_OUTOFMEMORY; - } - - if (sErr == U14ERR_NOERROR) // If all OK... - TranslateString(pBuffer); // ...convert any commas to spaces - else // If we have had a comms error... - U14ForceReset(hand); // ...make sure we get real reset - - } - else - sErr = asLastRetCode[hand]; - } - else - { - sErr = U14ERR_TIMEOUT; - U14ForceReset(hand); // make sure we get real reset - } - } - else - sErr = U14ERR_BUFF_SMALL; - return sErr; -#endif -#ifdef LINUX - if (wMaxLen>1) // we need space for terminating 0 - { - BOOL bLineToGet; // true when a line to get - long lTimeOutTicks = U14WhenToTimeOut(hand); - do - { - bLineToGet = (BOOL)(U14LineCount(hand) != 0); - if (!bLineToGet) - sched_yield(); - - } - while (!bLineToGet && !U14PassedTime(lTimeOutTicks)); - - if (bLineToGet) - { - sErr = CED_GetString(aHand1401[hand], pBuffer, wMaxLen-1); // space for terminator - if (sErr >=0) // if we were OK... - { - if (sErr >= wMaxLen) // this should NOT happen unless - sErr = U14ERR_DRIVCOMMS; // ...driver Comms are very bad - else - { - pBuffer[sErr] = 0; // OK, so terminate the string... - TranslateString(pBuffer); // ...and convert commas to spaces. - } - } - - if (sErr < U14ERR_NOERROR) // If we have had a comms error - U14ForceReset(hand); // make sure we get real reset - } - else - { - sErr = U14ERR_TIMEOUT; - U14ForceReset(hand); // make sure we get real reset - } - } - else - sErr = U14ERR_BUFF_SMALL; - - return sErr >= U14ERR_NOERROR ? U14ERR_NOERROR : sErr; -#endif -} - -/**************************************************************************** -** U14GetChar -** Get a character from the 1401. CR returned as CR. -*****************************************************************************/ -U14API(short) U14GetChar(short hand, char* pcChar) -{ -#ifdef _IS_WINDOWS_ - char sz[2]; // read a very short string - short sErr = U14GetString(hand, sz, 2); // read one char and nul terminate it - *pcChar = sz[0]; // copy to result, NB char translate done by GetString - if (sErr == U14ERR_NOERROR) - { // undo translate of CR to zero - if (*pcChar == '\0') // by converting back - *pcChar = '\n'; // What a nasty thing to have to do - } - return sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) // Check parameters - return sErr; - sErr = CED_GetChar(aHand1401[hand]); // get one char, if available - if (sErr >= 0) - { - *pcChar = (char)sErr; // return if it we have one - return U14ERR_NOERROR; // say all OK - } - else - return sErr; -#endif -} - -/**************************************************************************** -** U14Stat1401 -** Returns 0 for no lines or error or non zero for something waiting -****************************************************************************/ -U14API(short) U14Stat1401(short hand) -{ - return ((short)(U14LineCount(hand) > 0)); -} - -/**************************************************************************** -** U14CharCount -** Returns the number of characters in the input buffer -*****************************************************************************/ -U14API(short) U14CharCount(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_STAT1401, &csBlock); - if (sErr == U14ERR_NOERROR) - sErr = csBlock.ints[0]; - return sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_Stat1401(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** U14LineCount -** Returns the number of CR characters in the input buffer -*****************************************************************************/ -U14API(short) U14LineCount(short hand) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14Status1401(hand, U14_LINECOUNT, &csBlock); - if (sErr == U14ERR_NOERROR) - sErr = csBlock.ints[0]; - return sErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_LineCount(aHand1401[hand]) : sErr; -#endif -} - -/**************************************************************************** -** U14GetErrorString -** Converts error code supplied to a decent descriptive string. -** NOTE: This function may use some extra information stored -** internally in the DLL. This information is stored on a -** per-process basis, but it might be altered if you call -** other functions after getting an error and before using -** this function. -****************************************************************************/ -U14API(void) U14GetErrorString(short nErr, char* pStr, unsigned short wMax) -{ - char wstr[150]; - - switch (nErr) /* Basically, we do this with a switch block */ - { - case U14ERR_OFF: - sprintf(wstr, "The 1401 is apparently switched off (code %d)", nErr); - break; - - case U14ERR_NC: - sprintf(wstr, "The 1401 is not connected to the interface card (code %d)", nErr); - break; - - case U14ERR_ILL: - sprintf(wstr, "The 1401 is not working correctly (code %d)", nErr); - break; - - case U14ERR_NOIF: - sprintf(wstr, "The 1401 interface card was not detected (code %d)", nErr); - break; - - case U14ERR_TIME: - sprintf(wstr, "The 1401 fails to become ready for use (code %d)", nErr); - break; - - case U14ERR_BADSW: - sprintf(wstr, "The 1401 interface card jumpers are incorrect (code %d)", nErr); - break; - - case U14ERR_NOINT: - sprintf(wstr, "The 1401 interrupt is not available for use (code %d)", nErr); - break; - - case U14ERR_INUSE: - sprintf(wstr, "The 1401 is already in use by another program (code %d)", nErr); - break; - - case U14ERR_NODMA: - sprintf(wstr, "The 1401 DMA channel is not available for use (code %d)", nErr); - break; - - case U14ERR_BADHAND: - sprintf(wstr, "The application supplied an incorrect 1401 handle (code %d)", nErr); - break; - - case U14ERR_BAD1401NUM: - sprintf(wstr, "The application used an incorrect 1401 number (code %d)", nErr); - break; - - case U14ERR_NO_SUCH_FN: - sprintf(wstr, "The code passed to the 1401 driver is invalid (code %d)", nErr); - break; - - case U14ERR_NO_SUCH_SUBFN: - sprintf(wstr, "The sub-code passed to the 1401 driver is invalid (code %d)", nErr); - break; - - case U14ERR_NOOUT: - sprintf(wstr, "No room in buffer for characters for the 1401 (code %d)", nErr); - break; - - case U14ERR_NOIN: - sprintf(wstr, "No characters from the 1401 are available (code %d)", nErr); - break; - - case U14ERR_STRLEN: - sprintf(wstr, "A string sent to or read from the 1401 was too long (code %d)", nErr); - break; - - case U14ERR_LOCKFAIL: - sprintf(wstr, "Failed to lock host memory for data transfer (code %d)", nErr); - break; - - case U14ERR_UNLOCKFAIL: - sprintf(wstr, "Failed to unlock host memory after data transfer (code %d)", nErr); - break; - - case U14ERR_ALREADYSET: - sprintf(wstr, "The transfer area used is already set up (code %d)", nErr); - break; - - case U14ERR_NOTSET: - sprintf(wstr, "The transfer area used has not been set up (code %d)", nErr); - break; - - case U14ERR_BADAREA: - sprintf(wstr, "The transfer area number is incorrect (code %d)", nErr); - break; - - case U14ERR_NOFILE: - sprintf(wstr, "The command file %s could not be opened (code %d)", szLastName, nErr); - break; - - case U14ERR_READERR: - sprintf(wstr, "The command file %s could not be read (code %d)", szLastName, nErr); - break; - - case U14ERR_UNKNOWN: - sprintf(wstr, "The %s command resource could not be found (code %d)", szLastName, nErr); - break; - - case U14ERR_HOSTSPACE: - sprintf(wstr, "Unable to allocate memory for loading command %s (code %d)", szLastName, nErr); - break; - - case U14ERR_LOCKERR: - sprintf(wstr, "Unable to lock memory for loading command %s (code %d)", szLastName, nErr); - break; - - case U14ERR_CLOADERR: - sprintf(wstr, "Error in loading command %s, bad command format (code %d)", szLastName, nErr); - break; - - case U14ERR_TOXXXERR: - sprintf(wstr, "Error detected after data transfer to or from the 1401 (code %d)", nErr); - break; - - case U14ERR_NO386ENH: - sprintf(wstr, "Windows 3.1 is not running in 386 enhanced mode (code %d)", nErr); - break; - - case U14ERR_NO1401DRIV: - sprintf(wstr, "The 1401 device driver cannot be found (code %d)\nUSB: check plugged in and powered\nOther: not installed?", nErr); - break; - - case U14ERR_DRIVTOOOLD: - sprintf(wstr, "The 1401 device driver is too old for use (code %d)", nErr); - break; - - case U14ERR_TIMEOUT: - sprintf(wstr, "Character transmissions to the 1401 timed-out (code %d)", nErr); - break; - - case U14ERR_BUFF_SMALL: - sprintf(wstr, "Buffer for text from the 1401 was too small (code %d)", nErr); - break; - - case U14ERR_CBALREADY: - sprintf(wstr, "1401 monitor callback already set up (code %d)", nErr); - break; - - case U14ERR_BADDEREG: - sprintf(wstr, "1401 monitor callback deregister invalid (code %d)", nErr); - break; - - case U14ERR_DRIVCOMMS: - sprintf(wstr, "1401 device driver communications failed (code %d)", nErr); - break; - - case U14ERR_OUTOFMEMORY: - sprintf(wstr, "Failed to allocate or lock memory for text from the 1401 (code %d)", nErr); - break; - - default: - sprintf(wstr, "1401 error code %d returned; this code is unknown", nErr); - break; - - } - if ((unsigned short)strlen(wstr) >= wMax-1) /* Check for string being too long */ - wstr[wMax-1] = 0; /* and truncate it if so */ - strcpy(pStr, wstr); /* Return the error string */ -} - -/*************************************************************************** -** U14GetTransfer -** Get a TGET_TX_BLOCK describing a transfer area (held in the block) -***************************************************************************/ -U14API(short) U14GetTransfer(short hand, TGET_TX_BLOCK *pTransBlock) -{ - short sErr = CheckHandle(hand); -#ifdef _IS_WINDOWS_ - if (sErr == U14ERR_NOERROR) - { - unsigned int dwBytes = 0; - BOOL bOK = DeviceIoControl(aHand1401[hand], (unsigned int)U14_GETTRANSFER, NULL, 0, pTransBlock, - sizeof(TGET_TX_BLOCK), &dwBytes, NULL); - - if (bOK && (dwBytes >= sizeof(TGET_TX_BLOCK))) - sErr = U14ERR_NOERROR; - else - sErr = U14ERR_DRIVCOMMS; - } - return sErr; -#endif -#ifdef LINUX - return (sErr == U14ERR_NOERROR) ? CED_GetTransfer(aHand1401[hand], pTransBlock) : sErr; -#endif -} -///////////////////////////////////////////////////////////////////////////// -// U14WorkingSet -// For Win32 only, adjusts process working set so that minimum is at least -// dwMinKb and maximum is at least dwMaxKb. -// Return value is zero if all went OK, or a code from 1 to 3 indicating the -// cause of the failure: -// -// 1 unable to access process (insufficient rights?) -// 2 unable to read process working set -// 3 unable to set process working set - bad parameters? -U14API(short) U14WorkingSet(unsigned int dwMinKb, unsigned int dwMaxKb) -{ -#ifdef _IS_WINDOWS_ - short sRetVal = 0; // 0 means all is OK - HANDLE hProcess; - unsigned int dwVer = GetVersion(); - if (dwVer & 0x80000000) // is this not NT? - return 0; // then give up right now - - // Now attempt to get information on working set size - hProcess = OpenProcess(STANDARD_RIGHTS_REQUIRED | - PROCESS_QUERY_INFORMATION | - PROCESS_SET_QUOTA, - FALSE, _getpid()); - if (hProcess) - { - SIZE_T dwMinSize,dwMaxSize; - if (GetProcessWorkingSetSize(hProcess, &dwMinSize, &dwMaxSize)) - { - unsigned int dwMin = dwMinKb << 10; // convert from kb to bytes - unsigned int dwMax = dwMaxKb << 10; - - // if we get here, we have managed to read the current size - if (dwMin > dwMinSize) // need to change sizes? - dwMinSize = dwMin; - - if (dwMax > dwMaxSize) - dwMaxSize = dwMax; - - if (!SetProcessWorkingSetSize(hProcess, dwMinSize, dwMaxSize)) - sRetVal = 3; // failed to change size - } - else - sRetVal = 2; // failed to read original size - - CloseHandle(hProcess); - } - else - sRetVal = 1; // failed to get handle - - return sRetVal; -#endif -#ifdef LINUX - if (dwMinKb | dwMaxKb) - { - // to stop compiler moaning - } - return U14ERR_NOERROR; -#endif -} - -/**************************************************************************** -** U14UnSetTransfer Cancels a transfer area -** wArea The index of a block previously used in by SetTransfer -*****************************************************************************/ -U14API(short) U14UnSetTransfer(short hand, unsigned short wArea) -{ - short sErr = CheckHandle(hand); -#ifdef _IS_WINDOWS_ - if (sErr == U14ERR_NOERROR) - { - TCSBLOCK csBlock; - csBlock.ints[0] = (short)wArea; /* Area number into control block */ - sErr = U14Control1401(hand, U14_UNSETTRANSFER, &csBlock); /* Free area */ - - VirtualUnlock(apAreas[hand][wArea], auAreas[hand][wArea]);/* Unlock */ - apAreas[hand][wArea] = NULL; /* Clear locations */ - auAreas[hand][wArea] = 0; - } - return sErr; -#endif -#ifdef LINUX - return (sErr == U14ERR_NOERROR) ? CED_UnsetTransfer(aHand1401[hand], wArea) : sErr; -#endif -} - -/**************************************************************************** -** U14SetTransArea Sets an area up to be used for transfers -** unsigned short wArea The area number to set up -** void *pvBuff The address of the buffer for the data. -** unsigned int dwLength The length of the buffer for the data -** short eSz The element size (used for byte swapping on the Mac) -****************************************************************************/ -U14API(short) U14SetTransArea(short hand, unsigned short wArea, void *pvBuff, - unsigned int dwLength, short eSz) -{ - struct transfer_area_desc td; - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) - return sErr; - if (wArea >= MAX_TRANSAREAS) // Is this a valid area number - return U14ERR_BADAREA; - -#ifdef _IS_WINDOWS_ - assert(apAreas[hand][wArea] == NULL); - assert(auAreas[hand][wArea] == 0); - - apAreas[hand][wArea] = pvBuff; /* Save data for later */ - auAreas[hand][wArea] = dwLength; - - if (!VirtualLock(pvBuff, dwLength)) /* Lock using WIN32 calls */ - { - apAreas[hand][wArea] = NULL; /* Clear locations */ - auAreas[hand][wArea] = 0; - return U14ERR_LOCKERR; /* VirtualLock failed */ - } -#ifndef _WIN64 - if (!USE_NT_DIOC(hand)) /* Use Win 9x DIOC? */ - { - unsigned int dwBytes; - VXTRANSFERDESC vxDesc; /* Structure to pass to VXD */ - vxDesc.wArea = wArea; /* Copy across simple params */ - vxDesc.dwLength = dwLength; - - // Check we are not asking an old driver for more than area 0 - if ((wArea != 0) && (U14DriverVersion(hand) < 0x00010002L)) - sErr = U14ERR_DRIVTOOOLD; - else - { - vxDesc.dwAddrOfs = (unsigned int)pvBuff; /* 32 bit offset */ - vxDesc.wAddrSel = 0; - - if (DeviceIoControl(aHand1401[hand], (unsigned int)U14_SETTRANSFER, - pvBuff,dwLength, /* Will translate pointer */ - &vxDesc,sizeof(VXTRANSFERDESC), - &dwBytes,NULL)) - { - if (dwBytes >= sizeof(VXTRANSFERDESC)) /* Driver OK ? */ - sErr = U14ERR_NOERROR; - else - sErr = U14ERR_DRIVCOMMS; /* Else never got there */ - } - else - sErr = (short)GetLastError(); - } - } - else -#endif - { - PARAMBLK rWork; - unsigned int dwBytes; - td.wArea = wArea; /* Pure NT - put data into struct */ - td.lpvBuff = pvBuff; - td.dwLength = dwLength; - td.eSize = 0; // Dummy element size - - if (DeviceIoControl(aHand1401[hand],(unsigned int)U14_SETTRANSFER, - &td,sizeof(struct transfer_area_desc), - &rWork,sizeof(PARAMBLK),&dwBytes,NULL)) - { - if (dwBytes >= sizeof(PARAMBLK)) // maybe error from driver? - sErr = rWork.sState; // will report any error - else - sErr = U14ERR_DRIVCOMMS; // Else never got there - } - else - sErr = U14ERR_DRIVCOMMS; - } - - if (sErr != U14ERR_NOERROR) - { - if (sErr != U14ERR_LOCKERR) // unless lock failed... - VirtualUnlock(pvBuff, dwLength); // ...release the lock - apAreas[hand][wArea] = NULL; // Clear locations - auAreas[hand][wArea] = 0; - } - - return sErr; -#endif -#ifdef LINUX - // The strange cast is so that it works in 64 and 32-bit linux as long is 64-bits - // in the 64 bit version. - td.lpvBuff = (long long)((unsigned long)pvBuff); - td.wAreaNum = wArea; - td.dwLength = dwLength; - td.eSize = eSz; // Dummy element size - return CED_SetTransfer(aHand1401[hand], &td); -#endif -} - -/**************************************************************************** -** U14SetTransferEvent Sets an event for notification of application -** wArea The transfer area index, from 0 to MAXAREAS-1 -** bEvent True to create an event, false to remove it -** bToHost Set 0 for notification on to1401 tranfers, 1 for -** notification of transfers to the host PC -** dwStart The offset of the sub-area of interest -** dwLength The size of the sub-area of interest -** -** The device driver will set the event supplied to the signalled state -** whenever a DMA transfer to/from the specified area is completed. The -** transfer has to be in the direction specified by bToHost, and overlap -** that part of the whole transfer area specified by dwStart and dwLength. -** It is important that this function is called with bEvent false to release -** the event once 1401 activity is finished. -** -** Returns 1 if an event handle exists, 0 if all OK and no event handle or -** a negative code for an error. -****************************************************************************/ -U14API(short) U14SetTransferEvent(short hand, unsigned short wArea, BOOL bEvent, - BOOL bToHost, unsigned int dwStart, unsigned int dwLength) -{ -#ifdef _IS_WINDOWS_ - TCSBLOCK csBlock; - short sErr = U14TransferFlags(hand); // see if we can handle events - if (sErr >= U14ERR_NOERROR) // check handle is OK - { - bEvent = bEvent && ((sErr & U14TF_NOTIFY) != 0); // remove request if we cannot do events - if (wArea >= MAX_TRANSAREAS) // Check a valid area... - return U14ERR_BADAREA; // ...and bail of not - - // We can hold an event for each area, so see if we need to change the - // state of the event. - if ((bEvent != 0) != (aXferEvent[hand] != 0)) // change of event state? - { - if (bEvent) // want one and none present - aXferEvent[hand] = CreateEvent(NULL, FALSE, FALSE, NULL); - else - { - CloseHandle(aXferEvent[hand]); // clear the existing event - aXferEvent[hand] = NULL; // and clear handle - } - } - - // We have to store the parameters differently for 64-bit operations - // because a handle is 64 bits long. The drivers know of this and - // handle the information appropriately. -#ifdef _WIN64 - csBlock.longs[0] = wArea; // Pass paramaters into the driver... - if (bToHost != 0) // The direction flag is held in the - csBlock.longs[0] |= 0x10000; // upper word of the transfer area value - *((HANDLE*)&csBlock.longs[1]) = aXferEvent[hand]; // The event handle is 64-bits - csBlock.longs[3] = dwStart; // Thankfully these two remain - csBlock.longs[4] = dwLength; // as unsigned 32-bit values -#else - csBlock.longs[0] = wArea; // pass paramaters into the driver... - csBlock.longs[1] = (long)aXferEvent[hand]; // ...especially the event handle - csBlock.longs[2] = bToHost; - csBlock.longs[3] = dwStart; - csBlock.longs[4] = dwLength; -#endif - sErr = U14Control1401(hand, U14_SETTRANSEVENT, &csBlock); - if (sErr == U14ERR_NOERROR) - sErr = (short)(aXferEvent[hand] != NULL); // report if we have a flag - } - - return sErr; -#endif -#ifdef LINUX - TRANSFEREVENT te; - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) - return sErr; - - if (wArea >= MAX_TRANSAREAS) // Is this a valid area number - return U14ERR_BADAREA; - - te.wAreaNum = wArea; // copy parameters to the control block - te.wFlags = bToHost ? 1 : 0; // bit 0 sets the direction - te.dwStart = dwStart; // start offset of the event area - te.dwLength = dwLength; // size of the event area - te.iSetEvent = bEvent; // in Windows, this creates/destroys the event - return CED_SetEvent(aHand1401[hand], &te); -#endif -} - -/**************************************************************************** -** U14TestTransferEvent -** Would a U14WaitTransferEvent() call return immediately? return 1 if so, -** 0 if not or a negative code if a problem. -****************************************************************************/ -U14API(int) U14TestTransferEvent(short hand, unsigned short wArea) -{ -#ifdef _IS_WINDOWS_ - int iErr = CheckHandle(hand); - if (iErr == U14ERR_NOERROR) - { - if (aXferEvent[hand]) // if a handle is set... - iErr = WaitForSingleObject(aXferEvent[hand], 0) == WAIT_OBJECT_0; - } - return iErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_TestEvent(aHand1401[hand], wArea) : sErr; -#endif -} - -/**************************************************************************** -** U14WaitTransferEvent -** Wait for a transfer event with a timeout. -** msTimeOut is 0 for an infinite wait, else it is the maximum time to wait -** in milliseconds in range 0-0x00ffffff. -** Returns If no event handle then return immediately. Else return 1 if -** timed out or 0=event, and a negative code if a problem. -****************************************************************************/ -U14API(int) U14WaitTransferEvent(short hand, unsigned short wArea, int msTimeOut) -{ -#ifdef _IS_WINDOWS_ - int iErr = CheckHandle(hand); - if (iErr == U14ERR_NOERROR) - { - if (aXferEvent[hand]) - { - if (msTimeOut == 0) - msTimeOut = INFINITE; - iErr = WaitForSingleObject(aXferEvent[hand], msTimeOut) != WAIT_OBJECT_0; - } - else - iErr = TRUE; // say we timed out if no event - } - return iErr; -#endif -#ifdef LINUX - short sErr = CheckHandle(hand); - return (sErr == U14ERR_NOERROR) ? CED_WaitEvent(aHand1401[hand], wArea, msTimeOut) : sErr; -#endif -} - -/**************************************************************************** -** U14SetCircular Sets an area up for circular DMA transfers -** unsigned short wArea The area number to set up -** BOOL bToHost Sets the direction of data transfer -** void *pvBuff The address of the buffer for the data -** unsigned int dwLength The length of the buffer for the data -****************************************************************************/ -U14API(short) U14SetCircular(short hand, unsigned short wArea, BOOL bToHost, - void *pvBuff, unsigned int dwLength) -{ - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) - return sErr; - - if (wArea >= MAX_TRANSAREAS) /* Is this a valid area number */ - return U14ERR_BADAREA; - - if (!bToHost) /* For now, support tohost transfers only */ - return U14ERR_BADAREA; /* best error code I can find */ -#ifdef _IS_WINDOWS_ - assert(apAreas[hand][wArea] == NULL); - assert(auAreas[hand][wArea] == 0); - - apAreas[hand][wArea] = pvBuff; /* Save data for later */ - auAreas[hand][wArea] = dwLength; - - if (!VirtualLock(pvBuff, dwLength)) /* Lock using WIN32 calls */ - sErr = U14ERR_LOCKERR; /* VirtualLock failed */ - else - { - PARAMBLK rWork; - unsigned int dwBytes; - struct transfer_area_desc txDesc; - txDesc.wArea = wArea; /* Pure NT - put data into struct */ - txDesc.lpvBuff = pvBuff; - txDesc.dwLength = dwLength; - txDesc.eSize = (short)bToHost; /* Use this for direction flag */ - - if (DeviceIoControl(aHand1401[hand],(unsigned int)U14_SETCIRCULAR, - &txDesc, sizeof(struct transfer_area_desc), - &rWork, sizeof(PARAMBLK),&dwBytes,NULL)) - { - if (dwBytes >= sizeof(PARAMBLK)) /* error from driver? */ - sErr = rWork.sState; /* No, just return driver data */ - else - sErr = U14ERR_DRIVCOMMS; /* Else never got there */ - } - else - sErr = U14ERR_DRIVCOMMS; - } - - if (sErr != U14ERR_NOERROR) - { - if (sErr != U14ERR_LOCKERR) - VirtualUnlock(pvBuff, dwLength); /* Release NT lock */ - apAreas[hand][wArea] = NULL; /* Clear locations */ - auAreas[hand][wArea] = 0; - } - - return sErr; -#endif -#ifdef LINUX - else - { - struct transfer_area_desc td; - td.lpvBuff = (long long)((unsigned long)pvBuff); - td.wAreaNum = wArea; - td.dwLength = dwLength; - td.eSize = (short)bToHost; /* Use this for direction flag */ - return CED_SetCircular(aHand1401[hand], &td); - } -#endif -} - -/**************************************************************************** -** Function GetCircBlk returns the size (& start offset) of the next -** available block of circular data. -****************************************************************************/ -U14API(int) U14GetCircBlk(short hand, unsigned short wArea, unsigned int *pdwOffs) -{ - int lErr = CheckHandle(hand); - if (lErr != U14ERR_NOERROR) - return lErr; - - if (wArea >= MAX_TRANSAREAS) // Is this a valid area number? - return U14ERR_BADAREA; - else - { -#ifdef _IS_WINDOWS_ - PARAMBLK rWork; - TCSBLOCK csBlock; - unsigned int dwBytes; - csBlock.longs[0] = wArea; // Area number into control block - rWork.sState = U14ERR_DRIVCOMMS; - if (DeviceIoControl(aHand1401[hand], (unsigned int)U14_GETCIRCBLK, &csBlock, sizeof(TCSBLOCK), &rWork, sizeof(PARAMBLK), &dwBytes, NULL) && - (dwBytes >= sizeof(PARAMBLK))) - lErr = rWork.sState; - else - lErr = U14ERR_DRIVCOMMS; - - if (lErr == U14ERR_NOERROR) // Did everything go OK? - { // Yes, we can pass the results back - lErr = rWork.csBlock.longs[1]; // Return the block information - *pdwOffs = rWork.csBlock.longs[0]; // Offset is first in array - } -#endif -#ifdef LINUX - TCIRCBLOCK cb; - cb.nArea = wArea; // Area number into control block - cb.dwOffset = 0; - cb.dwSize = 0; - lErr = CED_GetCircBlock(aHand1401[hand], &cb); - if (lErr == U14ERR_NOERROR) // Did everything go OK? - { // Yes, we can pass the results back - lErr = cb.dwSize; // return the size - *pdwOffs = cb.dwOffset; // and the offset - } -#endif - } - return lErr; -} - -/**************************************************************************** -** Function FreeCircBlk marks the specified area of memory as free for -** resuse for circular transfers and returns the size (& start -** offset) of the next available block of circular data. -****************************************************************************/ -U14API(int) U14FreeCircBlk(short hand, unsigned short wArea, unsigned int dwOffs, unsigned int dwSize, - unsigned int *pdwOffs) -{ - int lErr = CheckHandle(hand); - if (lErr != U14ERR_NOERROR) - return lErr; - - if (wArea < MAX_TRANSAREAS) // Is this a valid area number - { -#ifdef _IS_WINDOWS_ - PARAMBLK rWork; - TCSBLOCK csBlock; - unsigned int dwBytes; - csBlock.longs[0] = wArea; // Area number into control block - csBlock.longs[1] = dwOffs; - csBlock.longs[2] = dwSize; - rWork.sState = U14ERR_DRIVCOMMS; - if (DeviceIoControl(aHand1401[hand], (unsigned int)U14_FREECIRCBLK, &csBlock, sizeof(TCSBLOCK), - &rWork, sizeof(PARAMBLK), &dwBytes, NULL) && - (dwBytes >= sizeof(PARAMBLK))) - lErr = rWork.sState; - else - lErr = U14ERR_DRIVCOMMS; - if (lErr == U14ERR_NOERROR) // Did everything work OK? - { // Yes, we can pass the results back - lErr = rWork.csBlock.longs[1]; // Return the block information - *pdwOffs = rWork.csBlock.longs[0]; // Offset is first in array - } -#endif -#ifdef LINUX - TCIRCBLOCK cb; - cb.nArea = wArea; // Area number into control block - cb.dwOffset = dwOffs; - cb.dwSize = dwSize; - - lErr = CED_FreeCircBlock(aHand1401[hand], &cb); - if (lErr == U14ERR_NOERROR) // Did everything work OK? - { // Yes, we can pass the results back - lErr = cb.dwSize; // Return the block information - *pdwOffs = cb.dwOffset; // Offset is first in array - } -#endif - } - else - lErr = U14ERR_BADAREA; - - return lErr; -} - -/**************************************************************************** -** Transfer -** Transfer moves data to 1401 or to host -** Assumes memory is allocated and locked, -** which it should be to get a pointer -*****************************************************************************/ -static short Transfer(short hand, BOOL bTo1401, char* pData, - unsigned int dwSize, unsigned int dw1401, short eSz) -{ - char strcopy[MAXSTRLEN+1]; // to hold copy of work string - short sResult = U14SetTransArea(hand, 0, (void *)pData, dwSize, eSz); - if (sResult == U14ERR_NOERROR) // no error - { - sprintf(strcopy, // data offset is always 0 - "TO%s,$%X,$%X,0;", bTo1401 ? "1401" : "HOST", dw1401, dwSize); - - U14SendString(hand, strcopy); // send transfer string - - sResult = U14CheckErr(hand); // Use ERR command to check for done - if (sResult > 0) - sResult = U14ERR_TOXXXERR; // If a 1401 error, use this code - - U14UnSetTransfer(hand, 0); - } - return sResult; -} - -/**************************************************************************** -** Function ToHost transfers data into the host from the 1401 -****************************************************************************/ -U14API(short) U14ToHost(short hand, char* pAddrHost, unsigned int dwSize, - unsigned int dw1401, short eSz) -{ - short sErr = CheckHandle(hand); - if ((sErr == U14ERR_NOERROR) && dwSize) // TOHOST is a constant - sErr = Transfer(hand, TOHOST, pAddrHost, dwSize, dw1401, eSz); - return sErr; -} - -/**************************************************************************** -** Function To1401 transfers data into the 1401 from the host -****************************************************************************/ -U14API(short) U14To1401(short hand, const char* pAddrHost,unsigned int dwSize, - unsigned int dw1401, short eSz) -{ - short sErr = CheckHandle(hand); - if ((sErr == U14ERR_NOERROR) && dwSize) // TO1401 is a constant - sErr = Transfer(hand, TO1401, (char*)pAddrHost, dwSize, dw1401, eSz); - return sErr; -} - -/**************************************************************************** -** Function LdCmd Loads a command from a full path or just a file -*****************************************************************************/ -#ifdef _IS_WINDOWS_ -#define file_exist(name) (_access(name, 0) != -1) -#define file_open(name) _lopen(name, OF_READ) -#define file_close(h) _lclose(h) -#define file_seek(h, pos) _llseek(h, pos, FILE_BEGIN) -#define file_read(h, buffer, size) (_lread(h, buffer, size) == size) -#endif -#ifdef LINUX -#define file_exist(name) (access(name, F_OK) != -1) -#define file_open(name) open(name, O_RDONLY) -#define file_close(h) close(h) -#define file_seek(h, pos) lseek(h, pos, SEEK_SET) -#define file_read(h, buffer, size) (read(h, buffer, size) == (ssize_t)size) -static unsigned int GetModuleFileName(void* dummy, char* buffer, int max) -{ - // The following works for Linux systems with a /proc file system. - char szProcPath[32]; - sprintf(szProcPath, "/proc/%d/exe", getpid()); // attempt to read link - if (readlink(szProcPath, buffer, max) != -1) - { - dirname (buffer); - strcat (buffer, "/"); - return strlen(buffer); - } - return 0; -} -#endif - -U14API(short) U14LdCmd(short hand, const char* command) -{ - char strcopy[MAXSTRLEN+1]; // to hold copy of work string - BOOL bGotIt = FALSE; // have we found the command file? - int iFHandle; // file handle of command -#define FNSZ 260 - char filnam[FNSZ]; // space to build name in - char szCmd[25]; // just the command name with extension - - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) - return sErr; - - if (strchr(command, '.') != NULL) // see if we have full name - { - if (file_exist(command)) // If the file exists - { - strcpy(filnam, command); // use name as is - bGotIt = TRUE; // Flag no more searching - } - else // not found, get file name for search - { - char* pStr = strrchr(command, PATHSEP); // Point to last separator - if (pStr != NULL) // Check we got it - { - pStr++; // move past the backslash - strcpy(szCmd, pStr); // copy file name as is - } - else - strcpy(szCmd, command); // use as is - } - } - else // File extension not supplied, so build the command file name - { - char szExt[8]; - strcpy(szCmd, command); // Build command file name - ExtForType(asType1401[hand], szExt);// File extension string - strcat(szCmd, szExt); // add it to the end - } - - // Next place to look is in the 1401 folder in the same place as the - // application was run from. - if (!bGotIt) // Still not got it? - { - unsigned int dwLen = GetModuleFileName(NULL, filnam, FNSZ); // Get app path - if (dwLen > 0) // and use it as path if found - { - char* pStr = strrchr(filnam, PATHSEP); // Point to last separator - if (pStr != NULL) - { - *(++pStr) = 0; // Terminate string there - if (strlen(filnam) < FNSZ-6) // make sure we have space - { - strcat(filnam, "1401" PATHSEPSTR); // add in 1401 subdir - strcat(filnam,szCmd); - bGotIt = (BOOL)file_exist(filnam); // See if file exists - } - } - } - } - - // Next place to look is in whatever path is set by the 1401DIR environment - // variable, if it exists. - if (!bGotIt) // Need to do more searches?/ - { - char* pStr = getenv("1401DIR"); // Try to find environment var - if (pStr != NULL) // and use it as path if found - { - strcpy(filnam, pStr); // Use path in environment - if (filnam[strlen(filnam)-1] != PATHSEP)// We need separator - strcat(filnam, PATHSEPSTR); - strcat(filnam, szCmd); - bGotIt = (BOOL)file_exist(filnam); // Got this one? - } - } - - // Last place to look is the default location. - if (!bGotIt) // Need to do more searches? - { - strcpy(filnam, DEFCMDPATH); // Use default path - strcat(filnam, szCmd); - bGotIt = file_exist(filnam); // Got this one? - } - - iFHandle = file_open(filnam); - if (iFHandle == -1) - sErr = U14ERR_NOFILE; - else - { // first read in the header block - CMDHEAD rCmdHead; // to hold the command header - if (file_read(iFHandle, &rCmdHead, sizeof(CMDHEAD))) - { - size_t nComSize = rCmdHead.wCmdSize; - char* pMem = malloc(nComSize); - if (pMem != NULL) - { - file_seek(iFHandle, sizeof(CMDHEAD)); - if (file_read(iFHandle, pMem, (UINT)nComSize)) - { - sErr = U14SetTransArea(hand, 0, (void *)pMem, (unsigned int)nComSize, ESZBYTES); - if (sErr == U14ERR_NOERROR) - { - sprintf(strcopy, "CLOAD,0,$%X;", (int)nComSize); - sErr = U14SendString(hand, strcopy); - if (sErr == U14ERR_NOERROR) - { - sErr = U14CheckErr(hand); // Use ERR to check for done - if (sErr > 0) - sErr = U14ERR_CLOADERR; // If an error, this code - } - U14UnSetTransfer(hand, 0); // release transfer area - } - } - else - sErr = U14ERR_READERR; - free(pMem); - } - else - sErr = U14ERR_HOSTSPACE; // memory allocate failed - } - else - sErr = U14ERR_READERR; - - file_close(iFHandle); // close the file - } - - return sErr; -} - - -/**************************************************************************** -** Ld -** Loads a command into the 1401 -** Returns NOERROR code or a long with error in lo word and index of -** command that failed in high word -****************************************************************************/ -U14API(unsigned int) U14Ld(short hand, const char* vl, const char* str) -{ - unsigned int dwIndex = 0; // index to current command - long lErr = U14ERR_NOERROR; // what the error was that went wrong - char strcopy[MAXSTRLEN+1]; // stores unmodified str parameter - char szFExt[8]; // The command file extension - short sErr = CheckHandle(hand); - if (sErr != U14ERR_NOERROR) - return sErr; - - ExtForType(asType1401[hand], szFExt); // File extension string - strcpy(strcopy, str); // to avoid changing original - - // now break out one command at a time and see if loaded - if (*str) // if anything there - { - BOOL bDone = FALSE; // true when finished all commands - int iLoop1 = 0; // Point at start of string for command name - int iLoop2 = 0; // and at start of str parameter - do // repeat until end of str - { - char filnam[MAXSTRLEN+1]; // filename to use - char szFName[MAXSTRLEN+1]; // filename work string - - if (!strcopy[iLoop1]) // at the end of the string? - bDone = TRUE; // set the finish flag - - if (bDone || (strcopy[iLoop1] == ',')) // end of cmd? - { - U14LONG er[5]; // Used to read back error results - ++dwIndex; // Keep count of command number, first is 1 - szFName[iLoop2]=(char)0; // null terminate name of command - - strncpy(szLastName, szFName, sizeof(szLastName)); // Save for error info - szLastName[sizeof(szLastName)-1] = 0; - strncat(szLastName, szFExt, sizeof(szLastName)); // with extension included - szLastName[sizeof(szLastName)-1] = 0; - - U14SendString(hand, szFName); // ask if loaded - U14SendString(hand, ";ERR;"); // add err return - - lErr = U14LongsFrom1401(hand, er, 5); - if (lErr > 0) - { - lErr = U14ERR_NOERROR; - if (er[0] == 255) // if command not loaded at all - { - if (vl && *vl) // if we have a path name - { - strcpy(filnam, vl); - if (strchr("\\/:", filnam[strlen(filnam)-1]) == NULL) - strcat(filnam, PATHSEPSTR); // add separator if none found - strcat(filnam, szFName); // add the file name - strcat(filnam, szFExt); // and extension - } - else - strcpy(filnam, szFName); // simple name - - lErr = U14LdCmd(hand, filnam); // load cmd - if (lErr != U14ERR_NOERROR) // spot any errors - bDone = TRUE; // give up if an error - } - } - else - bDone = TRUE; // give up if an error - - iLoop2 = 0; // Reset pointer to command name string - ++iLoop1; // and move on through str parameter - } - else - szFName[iLoop2++] = strcopy[iLoop1++]; // no command end, so copy 1 char - } - while (!bDone); - } - - if (lErr == U14ERR_NOERROR) - { - szLastName[0] = 0; // No error, so clean out command name here - return lErr; - } - else - return ((dwIndex<<16) | ((unsigned int)lErr & 0x0000FFFF)); -} - -// Initialise the library (if not initialised) and return the library version -U14API(int) U14InitLib(void) -{ - int iRetVal = U14LIB_VERSION; - if (iAttached == 0) // only do this the first time please - { - int i; -#ifdef _IS_WINDOWS_ - int j; - unsigned int dwVersion = GetVersion(); - bWindows9x = FALSE; // Assume not Win9x - - if (dwVersion & 0x80000000) // if not windows NT - { - if ((LOBYTE(LOWORD(dwVersion)) < 4) && // if Win32s or... - (HIBYTE(LOWORD(dwVersion)) < 95)) // ...below Windows 95 - iRetVal = 0; // We do not support this - else - bWindows9x = TRUE; // Flag we have Win9x - } -#endif - - for (i = 0; i < MAX1401; i++) // initialise the device area - { - aHand1401[i] = INVALID_HANDLE_VALUE; // Clear handle values - asType1401[i] = U14TYPEUNKNOWN; // and 1401 type codes - alTimeOutPeriod[i] = 3000; // 3 second timeouts -#ifdef _IS_WINDOWS_ -#ifndef _WIN64 - abUseNTDIOC[i] = (BOOL)!bWindows9x; -#endif - aXferEvent[i] = NULL; // there are no Xfer events - for (j = 0; j < MAX_TRANSAREAS; j++) // Clear out locked area info - { - apAreas[i][j] = NULL; - auAreas[i][j] = 0; - } -#endif - } - } - return iRetVal; -} - -///-------------------------------------------------------------------------------- -/// Functions called when the library is loaded and unloaded to give us a chance to -/// setup the library. - - -#ifdef _IS_WINDOWS_ -#ifndef U14_NOT_DLL -/**************************************************************************** -** FUNCTION: DllMain(HANDLE, unsigned int, LPVOID) -** LibMain is called by Windows when the DLL is initialized, Thread Attached, -** and other times. Refer to SDK documentation, as to the different ways this -** may be called. -****************************************************************************/ -INT APIENTRY DllMain(HANDLE hInst, unsigned int ul_reason_being_called, LPVOID lpReserved) -{ - int iRetVal = 1; - - switch (ul_reason_being_called) - { - case DLL_PROCESS_ATTACH: - iRetVal = U14InitLib() > 0; // does nothing if iAttached != 0 - ++iAttached; // count times attached - break; - - case DLL_PROCESS_DETACH: - if (--iAttached == 0) // last man out? - U14CloseAll(); // release all open handles - break; - } - return iRetVal; - - UNREFERENCED_PARAMETER(lpReserved); -} -#endif -#endif -#ifdef LINUX -void __attribute__((constructor)) use1401_load(void) -{ - U14InitLib(); - ++iAttached; -} - -void __attribute__((destructor)) use1401_unload(void) -{ - if (--iAttached == 0) // last man out? - U14CloseAll(); // release all open handles -} -#endif -- cgit From 0d317b91d6d8f0ddb24623228e921e40f3d42265 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Thu, 24 Jul 2014 01:35:00 +0300 Subject: staging: frontier: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been cleaned up and it doesn't look like anyone is working on it anymore (including the original author). So remove the driver from the kernel. If someone wants to work on cleaning it up and moving it out of staging, this commit can be reverted. Signed-off-by: Kristina MartÅ¡enko Cc: David Täht Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/frontier/Kconfig | 5 - drivers/staging/frontier/Makefile | 2 - drivers/staging/frontier/README | 47 -- drivers/staging/frontier/TODO | 9 - drivers/staging/frontier/alphatrack.c | 849 ----------------------------- drivers/staging/frontier/alphatrack.h | 78 --- drivers/staging/frontier/tranzport.c | 973 ---------------------------------- 9 files changed, 1966 deletions(-) delete mode 100644 drivers/staging/frontier/Kconfig delete mode 100644 drivers/staging/frontier/Makefile delete mode 100644 drivers/staging/frontier/README delete mode 100644 drivers/staging/frontier/TODO delete mode 100644 drivers/staging/frontier/alphatrack.c delete mode 100644 drivers/staging/frontier/alphatrack.h delete mode 100644 drivers/staging/frontier/tranzport.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 0a92dc6ab77c..d6a10c013a7f 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -54,8 +54,6 @@ source "drivers/staging/rtl8821ae/Kconfig" source "drivers/staging/rts5208/Kconfig" -source "drivers/staging/frontier/Kconfig" - source "drivers/staging/phison/Kconfig" source "drivers/staging/line6/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index fe5e76cd4cde..4a708e95d307 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -19,7 +19,6 @@ obj-$(CONFIG_R8192EE) += rtl8192ee/ obj-$(CONFIG_R8723AU) += rtl8723au/ obj-$(CONFIG_R8821AE) += rtl8821ae/ obj-$(CONFIG_RTS5208) += rts5208/ -obj-$(CONFIG_TRANZPORT) += frontier/ obj-$(CONFIG_IDE_PHISON) += phison/ obj-$(CONFIG_LINE6_USB) += line6/ obj-$(CONFIG_NETLOGIC_XLR_NET) += netlogic/ diff --git a/drivers/staging/frontier/Kconfig b/drivers/staging/frontier/Kconfig deleted file mode 100644 index 4da290b2f5bd..000000000000 --- a/drivers/staging/frontier/Kconfig +++ /dev/null @@ -1,5 +0,0 @@ -config TRANZPORT - tristate "Frontier Tranzport and Alphatrack support" - depends on USB - ---help--- - Enable support for the Frontier Tranzport and Alphatrack devices. diff --git a/drivers/staging/frontier/Makefile b/drivers/staging/frontier/Makefile deleted file mode 100644 index 2d2ac97492dd..000000000000 --- a/drivers/staging/frontier/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -obj-$(CONFIG_TRANZPORT) += tranzport.o -obj-$(CONFIG_TRANZPORT) += alphatrack.o diff --git a/drivers/staging/frontier/README b/drivers/staging/frontier/README deleted file mode 100644 index cd07af22406a..000000000000 --- a/drivers/staging/frontier/README +++ /dev/null @@ -1,47 +0,0 @@ -This directory contains the Linux USB Tranzport and Alphatrack Kernel drivers. - -See http://www.frontierdesign.com for details on these devices. - -Userspace test code is available from - -git://toutatis.isc.org/home/d/src/git/frontier.git - -At present the tranzport does reads/writes of 8 byte cmds to -/dev/tranzport0 to control the lights, screen, and wheel. - -At present the alphatrack accepts reads/writes of 12 byte cmds to -/dev/tranzport0 to control the lights, screen, fader and touchpad. - -The tranzport driver provides a rudimentary sysfs interface for the status of -the device and a writable parameter for turning wheel compression on and off. - -The API is nothing more than the USB commands issued to the device. Why? - -The control wheel/fader can generate events far too quickly for -a typical userspace application to keep up with them via libusb. Input -needs to be 100% accurate and fast in order for the alphatrack or tranzport -to be useful. - -UIO would be useful except that usb disconnect events need -to be handled correctly. - -A sysfs interface is perfect for simple userspace apps to do fun things with -the lights and screen. But it's fairly lousy for handling input events and -very lousy for watching the state of the shuttle wheel. - -A linux input events interface is great for the input events and shuttle wheel. -* It's theoretically OK on LEDs. -* A fader can be mapped to an absolute mouse device. -* But there is no LCD support at all, or fader feedback support in that API - -So, thus, these stubby drivers exist. - -In the end this could be driven by a midi layer, which handles all those -cases via a well defined API, but - among other things - is slow, doesn't do -flow control, and is a LOT of extra work, none of which is required at -the kernel level (probably). Frankly, I'd like to keep the -core driver simple because the only realtime work really required is -the bottom half interrupt handler and the output overlapping. - -Exposing some sort of clean api to userspace would be perfect. What that -API looks like? Gah. beats me. diff --git a/drivers/staging/frontier/TODO b/drivers/staging/frontier/TODO deleted file mode 100644 index 3620ad2df3ee..000000000000 --- a/drivers/staging/frontier/TODO +++ /dev/null @@ -1,9 +0,0 @@ -TODO: - - checkpatch.pl clean - - sparse clean - - fix userspace interface to be sane - - possibly just port to userspace with libusb - - review by the USB developer community - -Please send any patches for this driver to Greg Kroah-Hartman -and David Taht . diff --git a/drivers/staging/frontier/alphatrack.c b/drivers/staging/frontier/alphatrack.c deleted file mode 100644 index 226b23163109..000000000000 --- a/drivers/staging/frontier/alphatrack.c +++ /dev/null @@ -1,849 +0,0 @@ -/* - * Frontier Designs Alphatrack driver - * - * Copyright (C) 2007 Michael Taht (m@taht.net) - * - * Based on the usbled driver and ldusb drivers by - * - * Copyright (C) 2004 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (C) 2005 Michael Hund - * - * The ldusb driver was, in turn, derived from Lego USB Tower driver - * Copyright (C) 2003 David Glance - * 2001-2004 Juergen Stuber - * - * 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, version 2. - * - */ - -/** - * This driver uses a ring buffer for time critical reading of - * interrupt in reports and provides read and write methods for - * raw interrupt reports. - */ - -/* - * Note: this currently uses a dumb ringbuffer for reads and writes. - * A more optimal driver would cache and kill off outstanding urbs that are - * now invalid, and ignore ones that already were in the queue but valid - * as we only have 30 commands for the alphatrack. In particular this is - * key for getting lights to flash in time as otherwise many commands - * can be buffered up before the light change makes it to the interface. - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "alphatrack.h" - -#define VENDOR_ID 0x165b -#define PRODUCT_ID 0xfad1 - -#ifdef CONFIG_USB_DYNAMIC_MINORS -#define USB_ALPHATRACK_MINOR_BASE 0 -#else -/* FIXME 176 - is another driver's minor - apply for that */ -#define USB_ALPHATRACK_MINOR_BASE 176 -#endif - -/* table of devices that work with this driver */ -static const struct usb_device_id usb_alphatrack_table[] = { - {USB_DEVICE(VENDOR_ID, PRODUCT_ID)}, - {} /* Terminating entry */ -}; - -MODULE_DEVICE_TABLE(usb, usb_alphatrack_table); -MODULE_VERSION("0.41"); -MODULE_AUTHOR("Mike Taht "); -MODULE_DESCRIPTION("Alphatrack USB Driver"); -MODULE_LICENSE("GPL"); -MODULE_SUPPORTED_DEVICE("Frontier Designs Alphatrack Control Surface"); - -/* These aren't done yet */ - -#define SUPPRESS_EXTRA_ONLINE_EVENTS 0 -#define BUFFERED_WRITES 0 -#define SUPPRESS_EXTRA_OFFLINE_EVENTS 0 -#define COMPRESS_FADER_EVENTS 0 - -#define BUFFERED_READS 1 -#define RING_BUFFER_SIZE 512 -#define WRITE_BUFFER_SIZE 34 -#define ALPHATRACK_USB_TIMEOUT 10 -#define OUTPUT_CMD_SIZE 8 -#define INPUT_CMD_SIZE 12 -#define ALPHATRACK_DEBUG 0 - -static int debug = ALPHATRACK_DEBUG; - -/* Use our own dbg macro */ -#define dbg_info(dev, format, arg...) do \ - { if (debug) dev_info(dev , format , ## arg); } while (0) - -#define alphatrack_ocmd_info(dev, cmd, format, arg...) - -#define alphatrack_icmd_info(dev, cmd, format, arg...) - -/* Module parameters */ - -module_param(debug, int, S_IRUGO | S_IWUSR); -MODULE_PARM_DESC(debug, "Debug enabled or not"); - -/* - * All interrupt in transfers are collected in a ring buffer to - * avoid racing conditions and get better performance of the driver. - */ - -static int ring_buffer_size = RING_BUFFER_SIZE; - -module_param(ring_buffer_size, int, S_IRUGO); -MODULE_PARM_DESC(ring_buffer_size, "Read ring buffer size"); - -/* The write_buffer can one day contain more than one interrupt out transfer.*/ - -static int write_buffer_size = WRITE_BUFFER_SIZE; -module_param(write_buffer_size, int, S_IRUGO); -MODULE_PARM_DESC(write_buffer_size, "Write buffer size"); - -/* - * Increase the interval for debugging purposes. - * or set to 1 to use the standard interval from the endpoint descriptors. - */ - -static int min_interrupt_in_interval = ALPHATRACK_USB_TIMEOUT; -module_param(min_interrupt_in_interval, int, 0); -MODULE_PARM_DESC(min_interrupt_in_interval, - "Minimum interrupt in interval in ms"); - -static int min_interrupt_out_interval = ALPHATRACK_USB_TIMEOUT; -module_param(min_interrupt_out_interval, int, 0); -MODULE_PARM_DESC(min_interrupt_out_interval, - "Minimum interrupt out interval in ms"); - -/* Structure to hold all of our device specific stuff */ - -struct usb_alphatrack { - 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 */ - - /* make gcc happy */ - struct alphatrack_icmd (*ring_buffer)[RING_BUFFER_SIZE]; - struct alphatrack_ocmd (*write_buffer)[WRITE_BUFFER_SIZE]; - unsigned int ring_head; - unsigned int ring_tail; - - wait_queue_head_t read_wait; - wait_queue_head_t write_wait; - - unsigned char *interrupt_in_buffer; - unsigned char *oldi_buffer; - struct usb_endpoint_descriptor *interrupt_in_endpoint; - struct urb *interrupt_in_urb; - int interrupt_in_interval; - size_t interrupt_in_endpoint_size; - int interrupt_in_running; - int interrupt_in_done; - - char *interrupt_out_buffer; - struct usb_endpoint_descriptor *interrupt_out_endpoint; - struct urb *interrupt_out_urb; - int interrupt_out_interval; - size_t interrupt_out_endpoint_size; - int interrupt_out_busy; - - atomic_t writes_pending; - int event; /* alternate interface to events */ - int fader; /* 10 bits */ - int lights; /* 23 bits */ - unsigned char dump_state; /* 0 if disabled 1 if enabled */ - unsigned char enable; /* 0 if disabled 1 if enabled */ - unsigned char offline; /* if the device is out of range or asleep */ - unsigned char verbose; /* be verbose in error reporting */ - unsigned char last_cmd[OUTPUT_CMD_SIZE]; - unsigned char screen[32]; -}; - -/* prevent races between open() and disconnect() */ -static DEFINE_MUTEX(disconnect_mutex); - -/* forward declaration */ - -static struct usb_driver usb_alphatrack_driver; - -/** - * usb_alphatrack_abort_transfers - * aborts transfers and frees associated data structures - */ -static void usb_alphatrack_abort_transfers(struct usb_alphatrack *dev) -{ - /* shutdown transfer */ - if (dev->interrupt_in_running) { - dev->interrupt_in_running = 0; - if (dev->intf) - usb_kill_urb(dev->interrupt_in_urb); - } - if (dev->interrupt_out_busy) - if (dev->intf) - usb_kill_urb(dev->interrupt_out_urb); -} - -/** usb_alphatrack_delete */ -static void usb_alphatrack_delete(struct usb_alphatrack *dev) -{ - usb_alphatrack_abort_transfers(dev); - usb_free_urb(dev->interrupt_in_urb); - usb_free_urb(dev->interrupt_out_urb); - kfree(dev->ring_buffer); - kfree(dev->interrupt_in_buffer); - kfree(dev->interrupt_out_buffer); - kfree(dev->oldi_buffer); - kfree(dev->write_buffer); - kfree(dev); -} - -/** usb_alphatrack_interrupt_in_callback */ - -static void usb_alphatrack_interrupt_in_callback(struct urb *urb) -{ - struct usb_alphatrack *dev = urb->context; - unsigned int next_ring_head; - int retval = -1; - - if (urb->status) { - if (urb->status == -ENOENT || - urb->status == -ECONNRESET || urb->status == -ESHUTDOWN) { - goto exit; - } else { - dbg_info(&dev->intf->dev, - "%s: nonzero status received: %d\n", __func__, - urb->status); - goto resubmit; /* maybe we can recover */ - } - } - - if (urb->actual_length != INPUT_CMD_SIZE) { - dev_warn(&dev->intf->dev, - "Urb length was %d bytes!! Do something intelligent\n", - urb->actual_length); - } else { - alphatrack_ocmd_info(&dev->intf->dev, - &(*dev->ring_buffer)[dev->ring_tail].cmd, - "%s", "bla"); - if (memcmp - (dev->interrupt_in_buffer, dev->oldi_buffer, - INPUT_CMD_SIZE) == 0) { - goto resubmit; - } - memcpy(dev->oldi_buffer, dev->interrupt_in_buffer, - INPUT_CMD_SIZE); - -#if SUPPRESS_EXTRA_OFFLINE_EVENTS - if (dev->offline == 2 && dev->interrupt_in_buffer[1] == 0xff) - goto resubmit; - if (dev->offline == 1 && dev->interrupt_in_buffer[1] == 0xff) { - dev->offline = 2; - goto resubmit; - } -/* Always pass one offline event up the stack */ - if (dev->offline > 0 && dev->interrupt_in_buffer[1] != 0xff) - dev->offline = 0; - if (dev->offline == 0 && dev->interrupt_in_buffer[1] == 0xff) - dev->offline = 1; -#endif - dbg_info(&dev->intf->dev, "%s: head, tail are %x, %x\n", - __func__, dev->ring_head, dev->ring_tail); - next_ring_head = (dev->ring_head + 1) % ring_buffer_size; - - if (next_ring_head != dev->ring_tail) { - memcpy(&((*dev->ring_buffer)[dev->ring_head]), - dev->interrupt_in_buffer, urb->actual_length); - dev->ring_head = next_ring_head; - retval = 0; - memset(dev->interrupt_in_buffer, 0, urb->actual_length); - } else { - dev_warn(&dev->intf->dev, - "Ring buffer overflow, %d bytes dropped\n", - urb->actual_length); - memset(dev->interrupt_in_buffer, 0, urb->actual_length); - } - } - -resubmit: - /* resubmit if we're still running */ - if (dev->interrupt_in_running && dev->intf) { - retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC); - if (retval) - dev_err(&dev->intf->dev, - "usb_submit_urb failed (%d)\n", retval); - } - -exit: - dev->interrupt_in_done = 1; - wake_up_interruptible(&dev->read_wait); -} - -/** usb_alphatrack_interrupt_out_callback */ -static void usb_alphatrack_interrupt_out_callback(struct urb *urb) -{ - struct usb_alphatrack *dev = urb->context; - - /* sync/async unlink faults aren't errors */ - if (urb->status && !(urb->status == -ENOENT || - urb->status == -ECONNRESET || - urb->status == -ESHUTDOWN)) - dbg_info(&dev->intf->dev, - "%s - nonzero write interrupt status received: %d\n", - __func__, urb->status); - atomic_dec(&dev->writes_pending); - dev->interrupt_out_busy = 0; - wake_up_interruptible(&dev->write_wait); -} - -/** usb_alphatrack_open */ -static int usb_alphatrack_open(struct inode *inode, struct file *file) -{ - struct usb_alphatrack *dev; - int subminor; - int retval = 0; - struct usb_interface *interface; - - nonseekable_open(inode, file); - subminor = iminor(inode); - - mutex_lock(&disconnect_mutex); - - interface = usb_find_interface(&usb_alphatrack_driver, subminor); - - if (!interface) { - pr_err("%s - error, can't find device for minor %d\n", - __func__, subminor); - retval = -ENODEV; - goto unlock_disconnect_exit; - } - - dev = usb_get_intfdata(interface); - - if (!dev) { - retval = -ENODEV; - goto unlock_disconnect_exit; - } - - /* lock this device */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto unlock_disconnect_exit; - } - - /* allow opening only once */ - if (dev->open_count) { - retval = -EBUSY; - goto unlock_exit; - } - dev->open_count = 1; - - /* initialize in direction */ - dev->ring_head = 0; - dev->ring_tail = 0; - usb_fill_int_urb(dev->interrupt_in_urb, - interface_to_usbdev(interface), - usb_rcvintpipe(interface_to_usbdev(interface), - dev->interrupt_in_endpoint-> - bEndpointAddress), - dev->interrupt_in_buffer, - dev->interrupt_in_endpoint_size, - usb_alphatrack_interrupt_in_callback, dev, - dev->interrupt_in_interval); - - dev->interrupt_in_running = 1; - dev->interrupt_in_done = 0; - dev->enable = 1; - dev->offline = 0; - - retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); - if (retval) { - dev_err(&interface->dev, - "Couldn't submit interrupt_in_urb %d\n", retval); - dev->interrupt_in_running = 0; - dev->open_count = 0; - goto unlock_exit; - } - - /* save device in the file's private structure */ - file->private_data = dev; - -unlock_exit: - mutex_unlock(&dev->mtx); - -unlock_disconnect_exit: - mutex_unlock(&disconnect_mutex); - - return retval; -} - -/** usb_alphatrack_release */ -static int usb_alphatrack_release(struct inode *inode, struct file *file) -{ - struct usb_alphatrack *dev; - int retval = 0; - - dev = file->private_data; - - if (dev == NULL) { - retval = -ENODEV; - goto exit; - } - - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - - if (dev->open_count != 1) { - retval = -ENODEV; - goto unlock_exit; - } - - if (dev->intf == NULL) { - /* the device was unplugged before the file was released */ - mutex_unlock(&dev->mtx); - /* unlock here as usb_alphatrack_delete frees dev */ - usb_alphatrack_delete(dev); - retval = -ENODEV; - goto exit; - } - - /* wait until write transfer is finished */ - if (dev->interrupt_out_busy) - wait_event_interruptible_timeout(dev->write_wait, - !dev->interrupt_out_busy, - 2 * HZ); - usb_alphatrack_abort_transfers(dev); - dev->open_count = 0; - -unlock_exit: - mutex_unlock(&dev->mtx); - -exit: - return retval; -} - -/** usb_alphatrack_poll */ -static unsigned int usb_alphatrack_poll(struct file *file, poll_table *wait) -{ - struct usb_alphatrack *dev; - unsigned int mask = 0; - - dev = file->private_data; - - poll_wait(file, &dev->read_wait, wait); - poll_wait(file, &dev->write_wait, wait); - - if (dev->ring_head != dev->ring_tail) - mask |= POLLIN | POLLRDNORM; - if (!dev->interrupt_out_busy) - mask |= POLLOUT | POLLWRNORM; - - return mask; -} - -/** usb_alphatrack_read */ -static ssize_t usb_alphatrack_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos) -{ - struct usb_alphatrack *dev; - int retval = 0; - - int c = 0; - - dev = file->private_data; - - /* verify that we actually have some data to read */ - if (count == 0) - goto exit; - - /* lock this object */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - - /* verify that the device wasn't unplugged */ - if (dev->intf == NULL) { - retval = -ENODEV; - pr_err("%s: No device or device unplugged %d\n", - __func__, retval); - goto unlock_exit; - } - - while (dev->ring_head == dev->ring_tail) { - if (file->f_flags & O_NONBLOCK) { - retval = -EAGAIN; - goto unlock_exit; - } - dev->interrupt_in_done = 0; - retval = - wait_event_interruptible(dev->read_wait, - dev->interrupt_in_done); - if (retval < 0) - goto unlock_exit; - } - - alphatrack_ocmd_info(&dev->intf->dev, - &(*dev->ring_buffer)[dev->ring_tail].cmd, "%s", - ": copying to userspace"); - - c = 0; - while ((c < count) && (dev->ring_tail != dev->ring_head)) { - if (copy_to_user - (&buffer[c], &(*dev->ring_buffer)[dev->ring_tail], - INPUT_CMD_SIZE)) { - retval = -EFAULT; - goto unlock_exit; - } - dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size; - c += INPUT_CMD_SIZE; - dbg_info(&dev->intf->dev, "%s: head, tail are %x, %x\n", - __func__, dev->ring_head, dev->ring_tail); - } - retval = c; - -unlock_exit: - /* unlock the device */ - mutex_unlock(&dev->mtx); - -exit: - return retval; -} - -/** usb_alphatrack_write */ -static ssize_t usb_alphatrack_write(struct file *file, - const char __user *buffer, size_t count, - loff_t *ppos) -{ - struct usb_alphatrack *dev; - size_t bytes_to_write; - int retval = 0; - - dev = file->private_data; - - /* verify that we actually have some data to write */ - if (count == 0) - goto exit; - - /* lock this object */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - - /* verify that the device wasn't unplugged */ - if (dev->intf == NULL) { - retval = -ENODEV; - pr_err("%s: No device or device unplugged %d\n", - __func__, retval); - goto unlock_exit; - } - - /* wait until previous transfer is finished */ - if (dev->interrupt_out_busy) { - if (file->f_flags & O_NONBLOCK) { - retval = -EAGAIN; - goto unlock_exit; - } - retval = - wait_event_interruptible(dev->write_wait, - !dev->interrupt_out_busy); - if (retval < 0) - goto unlock_exit; - } - - /* write the data into interrupt_out_buffer from userspace */ - /* FIXME - if you write more than 12 bytes this breaks */ - bytes_to_write = - min(count, write_buffer_size * dev->interrupt_out_endpoint_size); - if (bytes_to_write < count) - dev_warn(&dev->intf->dev, - "Write buffer overflow, %zd bytes dropped\n", - count - bytes_to_write); - - dbg_info(&dev->intf->dev, "%s: count = %zd, bytes_to_write = %zd\n", - __func__, count, bytes_to_write); - - if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) { - retval = -EFAULT; - goto unlock_exit; - } - - if (dev->interrupt_out_endpoint == NULL) { - dev_err(&dev->intf->dev, "Endpoint should not be null!\n"); - goto unlock_exit; - } - - /* send off the urb */ - usb_fill_int_urb(dev->interrupt_out_urb, - interface_to_usbdev(dev->intf), - usb_sndintpipe(interface_to_usbdev(dev->intf), - dev->interrupt_out_endpoint-> - bEndpointAddress), - dev->interrupt_out_buffer, bytes_to_write, - usb_alphatrack_interrupt_out_callback, dev, - dev->interrupt_out_interval); - dev->interrupt_out_busy = 1; - atomic_inc(&dev->writes_pending); - wmb(); - - retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); - if (retval) { - dev->interrupt_out_busy = 0; - dev_err(&dev->intf->dev, - "Couldn't submit interrupt_out_urb %d\n", retval); - atomic_dec(&dev->writes_pending); - goto unlock_exit; - } - retval = bytes_to_write; - -unlock_exit: - /* unlock the device */ - mutex_unlock(&dev->mtx); - -exit: - return retval; -} - -/* file operations needed when we register this driver */ -static const struct file_operations usb_alphatrack_fops = { - .owner = THIS_MODULE, - .read = usb_alphatrack_read, - .write = usb_alphatrack_write, - .open = usb_alphatrack_open, - .release = usb_alphatrack_release, - .poll = usb_alphatrack_poll, - .llseek = no_llseek, -}; - -/* - * usb class driver info in order to get a minor number from the usb core, - * and to have the device registered with the driver core - */ - -static struct usb_class_driver usb_alphatrack_class = { - .name = "alphatrack%d", - .fops = &usb_alphatrack_fops, - .minor_base = USB_ALPHATRACK_MINOR_BASE, -}; - -/** - * usb_alphatrack_probe - * - * Called by the usb core when a new device is connected that it thinks - * this driver might be interested in. - */ -static int usb_alphatrack_probe(struct usb_interface *intf, - const struct usb_device_id *id) -{ - struct usb_device *udev = interface_to_usbdev(intf); - struct usb_alphatrack *dev = NULL; - struct usb_host_interface *iface_desc; - struct usb_endpoint_descriptor *endpoint; - int i; - int true_size; - int retval = -ENOMEM; - - /* allocate memory for our device state and initialize it */ - - dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (dev == NULL) - goto exit; - - mutex_init(&dev->mtx); - dev->intf = intf; - init_waitqueue_head(&dev->read_wait); - init_waitqueue_head(&dev->write_wait); - - iface_desc = intf->cur_altsetting; - - /* set up the endpoint information */ - for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { - endpoint = &iface_desc->endpoint[i].desc; - - if (usb_endpoint_is_int_in(endpoint)) - dev->interrupt_in_endpoint = endpoint; - - if (usb_endpoint_is_int_out(endpoint)) - dev->interrupt_out_endpoint = endpoint; - } - if (dev->interrupt_in_endpoint == NULL) { - dev_err(&intf->dev, "Interrupt in endpoint not found\n"); - goto error; - } - if (dev->interrupt_out_endpoint == NULL) - dev_warn(&intf->dev, - "Interrupt out endpoint not found (using control endpoint instead)\n"); - - dev->interrupt_in_endpoint_size = - le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize); - - if (dev->interrupt_in_endpoint_size != 64) - dev_warn(&intf->dev, "Interrupt in endpoint size is not 64!\n"); - - if (ring_buffer_size == 0) - ring_buffer_size = RING_BUFFER_SIZE; - - true_size = min(ring_buffer_size, RING_BUFFER_SIZE); - - /* - * FIXME - there are more usb_alloc routines for dma correctness. - * Needed? - */ - dev->ring_buffer = kmalloc_array(true_size, - sizeof(struct alphatrack_icmd), - GFP_KERNEL); - if (!dev->ring_buffer) - goto error; - - dev->interrupt_in_buffer = kmalloc(dev->interrupt_in_endpoint_size, - GFP_KERNEL); - if (!dev->interrupt_in_buffer) - goto error; - - dev->oldi_buffer = kmalloc(dev->interrupt_in_endpoint_size, GFP_KERNEL); - if (!dev->oldi_buffer) - goto error; - - dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!dev->interrupt_in_urb) { - dev_err(&intf->dev, "Couldn't allocate interrupt_in_urb\n"); - goto error; - } - - dev->interrupt_out_endpoint_size = - dev->interrupt_out_endpoint ? le16_to_cpu(dev-> - interrupt_out_endpoint-> - wMaxPacketSize) : udev-> - descriptor.bMaxPacketSize0; - - if (dev->interrupt_out_endpoint_size != 64) - dev_warn(&intf->dev, - "Interrupt out endpoint size is not 64!)\n"); - - if (write_buffer_size == 0) - write_buffer_size = WRITE_BUFFER_SIZE; - true_size = min(write_buffer_size, WRITE_BUFFER_SIZE); - - dev->interrupt_out_buffer = - kmalloc_array(true_size, - dev->interrupt_out_endpoint_size, - GFP_KERNEL); - if (!dev->interrupt_out_buffer) - goto error; - - dev->write_buffer = kmalloc_array(true_size, - sizeof(struct alphatrack_ocmd), - GFP_KERNEL); - if (!dev->write_buffer) - goto error; - - dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!dev->interrupt_out_urb) { - dev_err(&intf->dev, "Couldn't allocate interrupt_out_urb\n"); - goto error; - } - dev->interrupt_in_interval = - min_interrupt_in_interval > - dev->interrupt_in_endpoint-> - bInterval ? min_interrupt_in_interval : dev->interrupt_in_endpoint-> - bInterval; - if (dev->interrupt_out_endpoint) - dev->interrupt_out_interval = - min_interrupt_out_interval > - dev->interrupt_out_endpoint-> - bInterval ? min_interrupt_out_interval : dev-> - interrupt_out_endpoint->bInterval; - - /* we can register the device now, as it is ready */ - usb_set_intfdata(intf, dev); - - atomic_set(&dev->writes_pending, 0); - retval = usb_register_dev(intf, &usb_alphatrack_class); - if (retval) { - /* something prevented us from registering this driver */ - dev_err(&intf->dev, - "Not able to get a minor for this device.\n"); - usb_set_intfdata(intf, NULL); - goto error; - } - - /* let the user know what node this device is now attached to */ - dev_info(&intf->dev, - "Alphatrack Device #%d now attached to major %d minor %d\n", - (intf->minor - USB_ALPHATRACK_MINOR_BASE), USB_MAJOR, - intf->minor); - -exit: - return retval; - -error: - usb_alphatrack_delete(dev); - - return retval; -} - -/** - * usb_alphatrack_disconnect - * - * Called by the usb core when the device is removed from the system. - */ -static void usb_alphatrack_disconnect(struct usb_interface *intf) -{ - struct usb_alphatrack *dev; - int minor; - - mutex_lock(&disconnect_mutex); - - dev = usb_get_intfdata(intf); - usb_set_intfdata(intf, NULL); - - mutex_lock(&dev->mtx); - - minor = intf->minor; - - /* give back our minor */ - usb_deregister_dev(intf, &usb_alphatrack_class); - - /* if the device is not opened, then we clean up right now */ - if (!dev->open_count) { - mutex_unlock(&dev->mtx); - usb_alphatrack_delete(dev); - } else { - atomic_set(&dev->writes_pending, 0); - dev->intf = NULL; - mutex_unlock(&dev->mtx); - } - - mutex_unlock(&disconnect_mutex); - - dev_info(&intf->dev, "Alphatrack Surface #%d now disconnected\n", - (minor - USB_ALPHATRACK_MINOR_BASE)); -} - -/* usb specific object needed to register this driver with the usb subsystem */ -static struct usb_driver usb_alphatrack_driver = { - .name = "alphatrack", - .probe = usb_alphatrack_probe, - .disconnect = usb_alphatrack_disconnect, - .id_table = usb_alphatrack_table, -}; - -module_usb_driver(usb_alphatrack_driver); diff --git a/drivers/staging/frontier/alphatrack.h b/drivers/staging/frontier/alphatrack.h deleted file mode 100644 index 418c6053c027..000000000000 --- a/drivers/staging/frontier/alphatrack.h +++ /dev/null @@ -1,78 +0,0 @@ -struct alphatrack_icmd { - unsigned char cmd[12]; -}; - -struct alphatrack_ocmd { - unsigned char cmd[8]; -}; - -/* - * These are unused by the present driver but provide documentation for the - * userspace API. - */ -enum LightID { - LIGHT_EQ = 0, - LIGHT_OUT, - LIGHT_F2, - LIGHT_SEND, - LIGHT_IN, - LIGHT_F1, - LIGHT_PAN, - LIGHT_UNDEF1, - LIGHT_UNDEF2, - LIGHT_SHIFT, - LIGHT_TRACKMUTE, - LIGHT_TRACKSOLO, - LIGHT_TRACKREC, - LIGHT_READ, - LIGHT_WRITE, - LIGHT_ANYSOLO, - LIGHT_AUTO, - LIGHT_F4, - LIGHT_RECORD, - LIGHT_WINDOW, - LIGHT_PLUGIN, - LIGHT_F3, - LIGHT_LOOP -}; - -#define BUTTONMASK_BATTERY 0x00004000 -#define BUTTONMASK_BACKLIGHT 0x00008000 -#define BUTTONMASK_FASTFORWARD 0x04000000 -#define BUTTONMASK_TRACKMUTE 0x00040000 -#define BUTTONMASK_TRACKSOLO 0x00800000 -#define BUTTONMASK_TRACKLEFT 0x80000000 -#define BUTTONMASK_RECORD 0x02000000 -#define BUTTONMASK_SHIFT 0x20000000 -#define BUTTONMASK_PUNCH 0x00800000 -#define BUTTONMASK_TRACKRIGHT 0x00020000 -#define BUTTONMASK_REWIND 0x01000000 -#define BUTTONMASK_STOP 0x10000000 -#define BUTTONMASK_LOOP 0x00010000 -#define BUTTONMASK_TRACKREC 0x00001000 -#define BUTTONMASK_PLAY 0x08000000 -#define BUTTONMASK_TOUCH1 0x00000008 -#define BUTTONMASK_TOUCH2 0x00000010 -#define BUTTONMASK_TOUCH3 0x00000020 - -#define BUTTONMASK_PRESS1 0x00000009 -#define BUTTONMASK_PRESS2 0x00008010 -#define BUTTONMASK_PRESS3 0x00002020 - -/* - * last 3 bytes are the slider position - * 40 is the actual slider moving, the most sig bits, and 3 lsb - */ - -#define BUTTONMASK_FLIP 0x40000000 -#define BUTTONMASK_F1 0x00100000 -#define BUTTONMASK_F2 0x00400000 -#define BUTTONMASK_F3 0x00200000 -#define BUTTONMASK_F4 0x00080000 -#define BUTTONMASK_PAN 0x00000200 -#define BUTTONMASK_SEND 0x00000800 -#define BUTTONMASK_EQ 0x00004000 -#define BUTTONMASK_PLUGIN 0x00000400 -#define BUTTONMASK_AUTO 0x00000100 - -/* #define BUTTONMASK_FOOTSWITCH FIXME */ diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c deleted file mode 100644 index 2f86163d7013..000000000000 --- a/drivers/staging/frontier/tranzport.c +++ /dev/null @@ -1,973 +0,0 @@ -/* - * Frontier Designs Tranzport driver - * - * Copyright (C) 2007 Michael Taht (m@taht.net) - * - * Based on the usbled driver and ldusb drivers by - * - * Copyright (C) 2004 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (C) 2005 Michael Hund - * - * The ldusb driver was, in turn, derived from Lego USB Tower driver - * Copyright (C) 2003 David Glance - * 2001-2004 Juergen Stuber - * - * 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, version 2. - * - */ - -/* - * This driver uses a ring buffer for time critical reading of - * interrupt in reports and provides read and write methods for - * raw interrupt reports. - */ - -/* Note: this currently uses a dumb ringbuffer for reads and writes. - * A more optimal driver would cache and kill off outstanding urbs that are - * now invalid, and ignore ones that already were in the queue but valid - * as we only have 17 commands for the tranzport. In particular this is - * key for getting lights to flash in time as otherwise many commands - * can be buffered up before the light change makes it to the interface. - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -/* Define these values to match your devices */ -#define VENDOR_ID 0x165b -#define PRODUCT_ID 0x8101 - -#ifdef CONFIG_USB_DYNAMIC_MINORS -#define USB_TRANZPORT_MINOR_BASE 0 -#else /* FIXME 177- is the another driver's minor - apply for a minor soon */ -#define USB_TRANZPORT_MINOR_BASE 177 -#endif - -/* table of devices that work with this driver */ -static const struct usb_device_id usb_tranzport_table[] = { - {USB_DEVICE(VENDOR_ID, PRODUCT_ID)}, - {} /* Terminating entry */ -}; - -MODULE_DEVICE_TABLE(usb, usb_tranzport_table); -MODULE_VERSION("0.35"); -MODULE_AUTHOR("Mike Taht "); -MODULE_DESCRIPTION("Tranzport USB Driver"); -MODULE_LICENSE("GPL"); -MODULE_SUPPORTED_DEVICE("Frontier Designs Tranzport Control Surface"); - -#define SUPPRESS_EXTRA_OFFLINE_EVENTS 1 -#define COMPRESS_WHEEL_EVENTS 1 -#define BUFFERED_READS 1 -#define RING_BUFFER_SIZE 1000 -#define WRITE_BUFFER_SIZE 34 -#define TRANZPORT_USB_TIMEOUT 10 -#define TRANZPORT_DEBUG 0 - -static int debug = TRANZPORT_DEBUG; - -/* Use our own dbg macro */ -#define dbg_info(dev, format, arg...) do \ - { if (debug) dev_info(dev , format , ## arg); } while (0) - -/* Module parameters */ - -module_param(debug, int, S_IRUGO | S_IWUSR); -MODULE_PARM_DESC(debug, "Debug enabled or not"); - -/* - * All interrupt in transfers are collected in a ring buffer to - * avoid racing conditions and get better performance of the driver. - */ - -static int ring_buffer_size = RING_BUFFER_SIZE; - -module_param(ring_buffer_size, int, S_IRUGO); -MODULE_PARM_DESC(ring_buffer_size, "Read ring buffer size in reports"); - -/* - * The write_buffer can one day contain more than one interrupt out transfer. - */ -static int write_buffer_size = WRITE_BUFFER_SIZE; -module_param(write_buffer_size, int, S_IRUGO); -MODULE_PARM_DESC(write_buffer_size, "Write buffer size"); - -/* - * Increase the interval for debugging purposes. - * or set to 1 to use the standard interval from the endpoint descriptors. - */ - -static int min_interrupt_in_interval = TRANZPORT_USB_TIMEOUT; -module_param(min_interrupt_in_interval, int, 0); -MODULE_PARM_DESC(min_interrupt_in_interval, - "Minimum interrupt in interval in ms"); - -static int min_interrupt_out_interval = TRANZPORT_USB_TIMEOUT; -module_param(min_interrupt_out_interval, int, 0); -MODULE_PARM_DESC(min_interrupt_out_interval, - "Minimum interrupt out interval in ms"); - -struct tranzport_cmd { - unsigned char cmd[8]; -}; - -/* Structure to hold all of our device specific stuff */ - -struct usb_tranzport { - 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]; - unsigned int ring_head; - unsigned int ring_tail; - wait_queue_head_t read_wait; - wait_queue_head_t write_wait; - unsigned char *interrupt_in_buffer; - struct usb_endpoint_descriptor *interrupt_in_endpoint; - struct urb *interrupt_in_urb; - int interrupt_in_interval; - size_t interrupt_in_endpoint_size; - int interrupt_in_running; - int interrupt_in_done; - char *interrupt_out_buffer; - struct usb_endpoint_descriptor *interrupt_out_endpoint; - struct urb *interrupt_out_urb; - int interrupt_out_interval; - size_t interrupt_out_endpoint_size; - int interrupt_out_busy; - - /* Sysfs support */ - - unsigned char enable; /* 0 if disabled 1 if enabled */ - unsigned char offline; /* if the device is out of range or asleep */ - unsigned char compress_wheel; /* flag to compress wheel events */ -}; - -/* prevent races between open() and disconnect() */ -static DEFINE_MUTEX(disconnect_mutex); - -static struct usb_driver usb_tranzport_driver; - -/** - * usb_tranzport_abort_transfers - * aborts transfers and frees associated data structures - */ -static void usb_tranzport_abort_transfers(struct usb_tranzport *dev) -{ - /* shutdown transfer */ - if (dev->interrupt_in_running) { - dev->interrupt_in_running = 0; - if (dev->intf) - usb_kill_urb(dev->interrupt_in_urb); - } - if (dev->interrupt_out_busy) - if (dev->intf) - usb_kill_urb(dev->interrupt_out_urb); -} - -#define show_int(value) \ - static ssize_t value##_show(struct device *dev, \ - struct device_attribute *attr, char *buf) \ - { \ - struct usb_interface *intf = to_usb_interface(dev); \ - struct usb_tranzport *t = usb_get_intfdata(intf); \ - return sprintf(buf, "%d\n", t->value); \ - } \ - static DEVICE_ATTR_RO(value) - -#define show_set_int(value) \ - static ssize_t value##_show(struct device *dev, \ - struct device_attribute *attr, char *buf) \ - { \ - struct usb_interface *intf = to_usb_interface(dev); \ - struct usb_tranzport *t = usb_get_intfdata(intf); \ - return sprintf(buf, "%d\n", t->value); \ - } \ - static ssize_t value##_store(struct device *dev, \ - struct device_attribute *attr, \ - const char *buf, size_t count) \ - { \ - struct usb_interface *intf = to_usb_interface(dev); \ - struct usb_tranzport *t = usb_get_intfdata(intf); \ - unsigned long temp; \ - if (kstrtoul(buf, 10, &temp)) \ - return -EINVAL; \ - t->value = temp; \ - return count; \ - } \ - static DEVICE_ATTR_RW(value) - -show_int(enable); -show_int(offline); -show_set_int(compress_wheel); - -/** - * usb_tranzport_delete - */ -static void usb_tranzport_delete(struct usb_tranzport *dev) -{ - usb_tranzport_abort_transfers(dev); - if (dev->intf != NULL) { - device_remove_file(&dev->intf->dev, &dev_attr_enable); - device_remove_file(&dev->intf->dev, &dev_attr_offline); - device_remove_file(&dev->intf->dev, &dev_attr_compress_wheel); - } - - /* free data structures */ - usb_free_urb(dev->interrupt_in_urb); - usb_free_urb(dev->interrupt_out_urb); - kfree(dev->ring_buffer); - kfree(dev->interrupt_in_buffer); - kfree(dev->interrupt_out_buffer); - kfree(dev); -} - -/** - * usb_tranzport_interrupt_in_callback - */ - -static void usb_tranzport_interrupt_in_callback(struct urb *urb) -{ - struct usb_tranzport *dev = urb->context; - unsigned int next_ring_head; - int retval = -1; - - if (urb->status) { - if (urb->status == -ENOENT || - urb->status == -ECONNRESET || - urb->status == -ESHUTDOWN) { - goto exit; - } else { - dbg_info(&dev->intf->dev, - "%s: nonzero status received: %d\n", - __func__, urb->status); - goto resubmit; /* maybe we can recover */ - } - } - - if (urb->actual_length != 8) { - dev_warn(&dev->intf->dev, - "Urb length was %d bytes!! Do something intelligent\n", - urb->actual_length); - } else { - dbg_info(&dev->intf->dev, - "%s: received: %02x%02x%02x%02x%02x%02x%02x%02x\n", - __func__, dev->interrupt_in_buffer[0], - dev->interrupt_in_buffer[1], - dev->interrupt_in_buffer[2], - dev->interrupt_in_buffer[3], - dev->interrupt_in_buffer[4], - dev->interrupt_in_buffer[5], - dev->interrupt_in_buffer[6], - dev->interrupt_in_buffer[7]); -#if SUPPRESS_EXTRA_OFFLINE_EVENTS - if (dev->offline == 2 && dev->interrupt_in_buffer[1] == 0xff) - goto resubmit; - if (dev->offline == 1 && dev->interrupt_in_buffer[1] == 0xff) { - dev->offline = 2; - goto resubmit; - } - - /* Always pass one offline event up the stack */ - if (dev->offline > 0 && dev->interrupt_in_buffer[1] != 0xff) - dev->offline = 0; - if (dev->offline == 0 && dev->interrupt_in_buffer[1] == 0xff) - dev->offline = 1; - -#endif /* SUPPRESS_EXTRA_OFFLINE_EVENTS */ - dbg_info(&dev->intf->dev, "%s: head, tail are %x, %x\n", - __func__, dev->ring_head, dev->ring_tail); - - next_ring_head = (dev->ring_head + 1) % ring_buffer_size; - - if (next_ring_head != dev->ring_tail) { - memcpy(&((*dev->ring_buffer)[dev->ring_head]), - dev->interrupt_in_buffer, urb->actual_length); - dev->ring_head = next_ring_head; - retval = 0; - memset(dev->interrupt_in_buffer, 0, urb->actual_length); - } else { - dev_warn(&dev->intf->dev, - "Ring buffer overflow, %d bytes dropped\n", - urb->actual_length); - memset(dev->interrupt_in_buffer, 0, urb->actual_length); - } - } - -resubmit: -/* resubmit if we're still running */ - if (dev->interrupt_in_running && dev->intf) { - retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC); - if (retval) - dev_err(&dev->intf->dev, - "usb_submit_urb failed (%d)\n", retval); - } - -exit: - dev->interrupt_in_done = 1; - wake_up_interruptible(&dev->read_wait); -} - -/** - * usb_tranzport_interrupt_out_callback - */ -static void usb_tranzport_interrupt_out_callback(struct urb *urb) -{ - struct usb_tranzport *dev = urb->context; - /* sync/async unlink faults aren't errors */ - if (urb->status && !(urb->status == -ENOENT || - urb->status == -ECONNRESET || - urb->status == -ESHUTDOWN)) - dbg_info(&dev->intf->dev, - "%s - nonzero write interrupt status received: %d\n", - __func__, urb->status); - - dev->interrupt_out_busy = 0; - wake_up_interruptible(&dev->write_wait); -} -/** - * usb_tranzport_open - */ -static int usb_tranzport_open(struct inode *inode, struct file *file) -{ - struct usb_tranzport *dev; - int subminor; - int retval = 0; - struct usb_interface *interface; - - nonseekable_open(inode, file); - subminor = iminor(inode); - - mutex_lock(&disconnect_mutex); - - interface = usb_find_interface(&usb_tranzport_driver, subminor); - - if (!interface) { - pr_err("%s - error, can't find device for minor %d\n", - __func__, subminor); - retval = -ENODEV; - goto unlock_disconnect_exit; - } - - dev = usb_get_intfdata(interface); - - if (!dev) { - retval = -ENODEV; - goto unlock_disconnect_exit; - } - - /* lock this device */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto unlock_disconnect_exit; - } - - /* allow opening only once */ - if (dev->open_count) { - retval = -EBUSY; - goto unlock_exit; - } - dev->open_count = 1; - - /* initialize in direction */ - dev->ring_head = 0; - dev->ring_tail = 0; - usb_fill_int_urb(dev->interrupt_in_urb, - interface_to_usbdev(interface), - usb_rcvintpipe(interface_to_usbdev(interface), - dev->interrupt_in_endpoint-> - bEndpointAddress), - dev->interrupt_in_buffer, - dev->interrupt_in_endpoint_size, - usb_tranzport_interrupt_in_callback, dev, - dev->interrupt_in_interval); - - dev->interrupt_in_running = 1; - dev->interrupt_in_done = 0; - dev->enable = 1; - dev->offline = 0; - dev->compress_wheel = 1; - - retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); - if (retval) { - dev_err(&interface->dev, - "Couldn't submit interrupt_in_urb %d\n", retval); - dev->interrupt_in_running = 0; - dev->open_count = 0; - goto unlock_exit; - } - - /* save device in the file's private structure */ - file->private_data = dev; - -unlock_exit: - mutex_unlock(&dev->mtx); - -unlock_disconnect_exit: - mutex_unlock(&disconnect_mutex); - - return retval; -} - -/** - * usb_tranzport_release - */ -static int usb_tranzport_release(struct inode *inode, struct file *file) -{ - struct usb_tranzport *dev; - int retval = 0; - - dev = file->private_data; - - if (dev == NULL) { - retval = -ENODEV; - goto exit; - } - - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - - if (dev->open_count != 1) { - retval = -ENODEV; - goto unlock_exit; - } - - if (dev->intf == NULL) { - /* the device was unplugged before the file was released */ - mutex_unlock(&dev->mtx); - /* unlock here as usb_tranzport_delete frees dev */ - usb_tranzport_delete(dev); - retval = -ENODEV; - goto exit; - } - - /* wait until write transfer is finished */ - if (dev->interrupt_out_busy) - wait_event_interruptible_timeout(dev->write_wait, - !dev->interrupt_out_busy, - 2 * HZ); - usb_tranzport_abort_transfers(dev); - dev->open_count = 0; - -unlock_exit: - mutex_unlock(&dev->mtx); - -exit: - return retval; -} - -/** - * usb_tranzport_poll - */ -static unsigned int usb_tranzport_poll(struct file *file, poll_table *wait) -{ - struct usb_tranzport *dev; - unsigned int mask = 0; - - dev = file->private_data; - poll_wait(file, &dev->read_wait, wait); - poll_wait(file, &dev->write_wait, wait); - if (dev->ring_head != dev->ring_tail) - mask |= POLLIN | POLLRDNORM; - if (!dev->interrupt_out_busy) - mask |= POLLOUT | POLLWRNORM; - return mask; -} -/** - * usb_tranzport_read - */ - -static ssize_t usb_tranzport_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos) -{ - struct usb_tranzport *dev; - int retval = 0; -#if BUFFERED_READS - int c = 0; -#endif -#if COMPRESS_WHEEL_EVENTS - signed char oldwheel; - signed char newwheel; - int cancompress = 1; - int next_tail; -#endif - - /* do I have such a thing as a null event? */ - - dev = file->private_data; - - /* verify that we actually have some data to read */ - if (count == 0) - goto exit; - - /* lock this object */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - - /* verify that the device wasn't unplugged */ - if (dev->intf == NULL) { - retval = -ENODEV; - pr_err("%s: No device or device unplugged %d\n", - __func__, retval); - goto unlock_exit; - } - - while (dev->ring_head == dev->ring_tail) { - - if (file->f_flags & O_NONBLOCK) { - retval = -EAGAIN; - goto unlock_exit; - } - /* tiny race - FIXME: make atomic? */ - /* atomic_cmp_exchange(&dev->interrupt_in_done,0,0); */ - dev->interrupt_in_done = 0; - retval = wait_event_interruptible(dev->read_wait, - dev->interrupt_in_done); - if (retval < 0) - goto unlock_exit; - } - - dbg_info(&dev->intf->dev, - "%s: copying to userspace: %02x%02x%02x%02x%02x%02x%02x%02x\n", - __func__, - (*dev->ring_buffer)[dev->ring_tail].cmd[0], - (*dev->ring_buffer)[dev->ring_tail].cmd[1], - (*dev->ring_buffer)[dev->ring_tail].cmd[2], - (*dev->ring_buffer)[dev->ring_tail].cmd[3], - (*dev->ring_buffer)[dev->ring_tail].cmd[4], - (*dev->ring_buffer)[dev->ring_tail].cmd[5], - (*dev->ring_buffer)[dev->ring_tail].cmd[6], - (*dev->ring_buffer)[dev->ring_tail].cmd[7]); - -#if BUFFERED_READS - c = 0; - while ((c < count) && (dev->ring_tail != dev->ring_head)) { - -#if COMPRESS_WHEEL_EVENTS - next_tail = (dev->ring_tail+1) % ring_buffer_size; - if (dev->compress_wheel) - cancompress = 1; - while (dev->ring_head != next_tail && cancompress == 1) { - newwheel = (*dev->ring_buffer)[next_tail].cmd[6]; - oldwheel = (*dev->ring_buffer)[dev->ring_tail].cmd[6]; - /* if both are wheel events, and - * no buttons have changes (FIXME, do I have to check?), - * and we are the same sign, we can compress +- 7F - */ - dbg_info(&dev->intf->dev, - "%s: trying to compress: %02x%02x%02x%02x%02x%02x%02x%02x\n", - __func__, - (*dev->ring_buffer)[dev->ring_tail].cmd[0], - (*dev->ring_buffer)[dev->ring_tail].cmd[1], - (*dev->ring_buffer)[dev->ring_tail].cmd[2], - (*dev->ring_buffer)[dev->ring_tail].cmd[3], - (*dev->ring_buffer)[dev->ring_tail].cmd[4], - (*dev->ring_buffer)[dev->ring_tail].cmd[5], - (*dev->ring_buffer)[dev->ring_tail].cmd[6], - (*dev->ring_buffer)[dev->ring_tail].cmd[7]); - - if (((*dev->ring_buffer)[dev->ring_tail].cmd[6] != 0 && - (*dev->ring_buffer)[next_tail].cmd[6] != 0) && - ((newwheel > 0 && oldwheel > 0) || - (newwheel < 0 && oldwheel < 0)) && - ((*dev->ring_buffer)[dev->ring_tail].cmd[2] == - (*dev->ring_buffer)[next_tail].cmd[2]) && - ((*dev->ring_buffer)[dev->ring_tail].cmd[3] == - (*dev->ring_buffer)[next_tail].cmd[3]) && - ((*dev->ring_buffer)[dev->ring_tail].cmd[4] == - (*dev->ring_buffer)[next_tail].cmd[4]) && - ((*dev->ring_buffer)[dev->ring_tail].cmd[5] == - (*dev->ring_buffer)[next_tail].cmd[5])) { - dbg_info(&dev->intf->dev, - "%s: should compress: " - "%02x%02x%02x%02x%02x%02x%02x%02x\n", - __func__, - (*dev->ring_buffer)[dev->ring_tail]. - cmd[0], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[1], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[2], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[3], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[4], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[5], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[6], - (*dev->ring_buffer)[dev->ring_tail]. - cmd[7]); - newwheel += oldwheel; - if (oldwheel > 0 && !(newwheel > 0)) { - newwheel = 0x7f; - cancompress = 0; - } - if (oldwheel < 0 && !(newwheel < 0)) { - newwheel = 0x80; - cancompress = 0; - } - - (*dev->ring_buffer)[next_tail].cmd[6] = - newwheel; - dev->ring_tail = next_tail; - next_tail = - (dev->ring_tail + 1) % ring_buffer_size; - } else { - cancompress = 0; - } - } -#endif /* COMPRESS_WHEEL_EVENTS */ - if (copy_to_user( - &buffer[c], - &(*dev->ring_buffer)[dev->ring_tail], 8)) { - retval = -EFAULT; - goto unlock_exit; - } - dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size; - c += 8; - dbg_info(&dev->intf->dev, - "%s: head, tail are %x, %x\n", - __func__, dev->ring_head, dev->ring_tail); - } - retval = c; - -#else -/* if (copy_to_user(buffer, &(*dev->ring_buffer)[dev->ring_tail], 8)) { */ - retval = -EFAULT; - goto unlock_exit; -} - -dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size; -dbg_info(&dev->intf->dev, "%s: head, tail are %x, %x\n", - __func__, dev->ring_head, dev->ring_tail); - -retval = 8; -#endif /* BUFFERED_READS */ - -unlock_exit: -/* unlock the device */ -mutex_unlock(&dev->mtx); - -exit: -return retval; -} - -/** - * usb_tranzport_write - */ -static ssize_t usb_tranzport_write(struct file *file, - const char __user *buffer, size_t count, - loff_t *ppos) -{ - struct usb_tranzport *dev; - size_t bytes_to_write; - int retval = 0; - - dev = file->private_data; - - /* verify that we actually have some data to write */ - if (count == 0) - goto exit; - - /* lock this object */ - if (mutex_lock_interruptible(&dev->mtx)) { - retval = -ERESTARTSYS; - goto exit; - } - /* verify that the device wasn't unplugged */ - if (dev->intf == NULL) { - retval = -ENODEV; - pr_err("%s: No device or device unplugged %d\n", - __func__, retval); - goto unlock_exit; - } - - /* wait until previous transfer is finished */ - if (dev->interrupt_out_busy) { - if (file->f_flags & O_NONBLOCK) { - retval = -EAGAIN; - goto unlock_exit; - } - retval = wait_event_interruptible(dev->write_wait, - !dev->interrupt_out_busy); - if (retval < 0) - goto unlock_exit; - } - - /* write the data into interrupt_out_buffer from userspace */ - bytes_to_write = min(count, - write_buffer_size * - dev->interrupt_out_endpoint_size); - if (bytes_to_write < count) - dev_warn(&dev->intf->dev, - "Write buffer overflow, %zd bytes dropped\n", - count - bytes_to_write); - - dbg_info(&dev->intf->dev, - "%s: count = %zd, bytes_to_write = %zd\n", __func__, - count, bytes_to_write); - - if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) { - retval = -EFAULT; - goto unlock_exit; - } - - if (dev->interrupt_out_endpoint == NULL) { - dev_err(&dev->intf->dev, "Endpoint should not be null!\n"); - goto unlock_exit; - } - - /* send off the urb */ - usb_fill_int_urb(dev->interrupt_out_urb, - interface_to_usbdev(dev->intf), - usb_sndintpipe(interface_to_usbdev(dev->intf), - dev->interrupt_out_endpoint-> - bEndpointAddress), - dev->interrupt_out_buffer, bytes_to_write, - usb_tranzport_interrupt_out_callback, dev, - dev->interrupt_out_interval); - - dev->interrupt_out_busy = 1; - wmb(); - - retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); - if (retval) { - dev->interrupt_out_busy = 0; - dev_err(&dev->intf->dev, - "Couldn't submit interrupt_out_urb %d\n", retval); - goto unlock_exit; - } - retval = bytes_to_write; - -unlock_exit: - /* unlock the device */ - mutex_unlock(&dev->mtx); - -exit: - return retval; -} - -/* file operations needed when we register this driver */ -static const struct file_operations usb_tranzport_fops = { - .owner = THIS_MODULE, - .read = usb_tranzport_read, - .write = usb_tranzport_write, - .open = usb_tranzport_open, - .release = usb_tranzport_release, - .poll = usb_tranzport_poll, - .llseek = no_llseek, -}; - -/* - * usb class driver info in order to get a minor number from the usb core, - * and to have the device registered with the driver core - */ -static struct usb_class_driver usb_tranzport_class = { - .name = "tranzport%d", - .fops = &usb_tranzport_fops, - .minor_base = USB_TRANZPORT_MINOR_BASE, -}; - -/** - * usb_tranzport_probe - * - * Called by the usb core when a new device is connected that it thinks - * this driver might be interested in. - */ -static int usb_tranzport_probe(struct usb_interface *intf, - const struct usb_device_id *id) { - struct usb_device *udev = interface_to_usbdev(intf); - struct usb_tranzport *dev = NULL; - struct usb_host_interface *iface_desc; - struct usb_endpoint_descriptor *endpoint; - int i; - int true_size; - int retval = -ENOMEM; - - /* allocate memory for our device state and initialize it */ - - dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (dev == NULL) - goto exit; - - mutex_init(&dev->mtx); - dev->intf = intf; - init_waitqueue_head(&dev->read_wait); - init_waitqueue_head(&dev->write_wait); - - iface_desc = intf->cur_altsetting; - - /* set up the endpoint information */ - for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { - endpoint = &iface_desc->endpoint[i].desc; - - if (usb_endpoint_is_int_in(endpoint)) - dev->interrupt_in_endpoint = endpoint; - - if (usb_endpoint_is_int_out(endpoint)) - dev->interrupt_out_endpoint = endpoint; - } - if (dev->interrupt_in_endpoint == NULL) { - dev_err(&intf->dev, "Interrupt in endpoint not found\n"); - goto error; - } - if (dev->interrupt_out_endpoint == NULL) - dev_warn(&intf->dev, - "Interrupt out endpoint not found (using control endpoint instead)\n"); - - dev->interrupt_in_endpoint_size = - le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize); - - if (dev->interrupt_in_endpoint_size != 8) - dev_warn(&intf->dev, "Interrupt in endpoint size is not 8!\n"); - - if (ring_buffer_size == 0) - ring_buffer_size = RING_BUFFER_SIZE; - true_size = min(ring_buffer_size, RING_BUFFER_SIZE); - - /* - * FIXME - there are more usb_alloc routines for dma correctness. - * Needed? - */ - - dev->ring_buffer = - kmalloc((true_size * sizeof(struct tranzport_cmd)) + 8, GFP_KERNEL); - if (!dev->ring_buffer) - goto error; - - dev->interrupt_in_buffer = - kmalloc(dev->interrupt_in_endpoint_size, GFP_KERNEL); - if (!dev->interrupt_in_buffer) - goto error; - - dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!dev->interrupt_in_urb) { - dev_err(&intf->dev, "Couldn't allocate interrupt_in_urb\n"); - goto error; - } - dev->interrupt_out_endpoint_size = - dev->interrupt_out_endpoint ? - le16_to_cpu(dev->interrupt_out_endpoint->wMaxPacketSize) : - udev->descriptor.bMaxPacketSize0; - - if (dev->interrupt_out_endpoint_size != 8) - dev_warn(&intf->dev, - "Interrupt out endpoint size is not 8!)\n"); - - dev->interrupt_out_buffer = - kmalloc_array(write_buffer_size, - dev->interrupt_out_endpoint_size, GFP_KERNEL); - if (!dev->interrupt_out_buffer) - goto error; - - dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!dev->interrupt_out_urb) { - dev_err(&intf->dev, "Couldn't allocate interrupt_out_urb\n"); - goto error; - } - dev->interrupt_in_interval = - min_interrupt_in_interval > - dev->interrupt_in_endpoint->bInterval ? min_interrupt_in_interval - : dev->interrupt_in_endpoint->bInterval; - - if (dev->interrupt_out_endpoint) { - dev->interrupt_out_interval = - min_interrupt_out_interval > - dev->interrupt_out_endpoint->bInterval ? - min_interrupt_out_interval : - dev->interrupt_out_endpoint->bInterval; - } - - /* we can register the device now, as it is ready */ - usb_set_intfdata(intf, dev); - - retval = usb_register_dev(intf, &usb_tranzport_class); - if (retval) { - /* something prevented us from registering this driver */ - dev_err(&intf->dev, - "Not able to get a minor for this device.\n"); - usb_set_intfdata(intf, NULL); - goto error; - } - - retval = device_create_file(&intf->dev, &dev_attr_compress_wheel); - if (retval) - goto error; - retval = device_create_file(&intf->dev, &dev_attr_enable); - if (retval) - goto error; - retval = device_create_file(&intf->dev, &dev_attr_offline); - if (retval) - goto error; - - /* let the user know what node this device is now attached to */ - dev_info(&intf->dev, - "Tranzport Device #%d now attached to major %d minor %d\n", - (intf->minor - USB_TRANZPORT_MINOR_BASE), USB_MAJOR, - intf->minor); - -exit: - return retval; - -error: - usb_tranzport_delete(dev); - return retval; -} - -/** - * usb_tranzport_disconnect - * - * Called by the usb core when the device is removed from the system. - */ -static void usb_tranzport_disconnect(struct usb_interface *intf) -{ - struct usb_tranzport *dev; - int minor; - - mutex_lock(&disconnect_mutex); - dev = usb_get_intfdata(intf); - usb_set_intfdata(intf, NULL); - 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) { - mutex_unlock(&dev->mtx); - usb_tranzport_delete(dev); - } else { - dev->intf = NULL; - mutex_unlock(&dev->mtx); - } - - mutex_unlock(&disconnect_mutex); - - dev_info(&intf->dev, "Tranzport Surface #%d now disconnected\n", - (minor - USB_TRANZPORT_MINOR_BASE)); -} - -/* usb specific object needed to register this driver with the usb subsystem */ -static struct usb_driver usb_tranzport_driver = { - .name = "tranzport", - .probe = usb_tranzport_probe, - .disconnect = usb_tranzport_disconnect, - .id_table = usb_tranzport_table, -}; - -module_usb_driver(usb_tranzport_driver); -- cgit From 16fae052074aa44ffa8c15b789719bd9611a1278 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Thu, 24 Jul 2014 04:34:38 +0300 Subject: staging: keucr: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been fully cleaned up and it doesn't look like anyone is working on it anymore (including the original author). So remove the driver and all references to it. If someone wants to finish cleaning the driver up and moving it out of staging, this commit can be reverted. Signed-off-by: Kristina MartÅ¡enko Cc: Cho, Yu-Chen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/keucr/Kconfig | 14 - drivers/staging/keucr/Makefile | 13 - drivers/staging/keucr/TODO | 12 - drivers/staging/keucr/common.h | 7 - drivers/staging/keucr/init.c | 333 --------------- drivers/staging/keucr/init.h | 518 ----------------------- drivers/staging/keucr/scsiglue.c | 467 -------------------- drivers/staging/keucr/scsiglue.h | 10 - drivers/staging/keucr/smcommon.h | 29 -- drivers/staging/keucr/smil.h | 288 ------------- drivers/staging/keucr/smilecc.c | 211 ---------- drivers/staging/keucr/smilmain.c | 760 --------------------------------- drivers/staging/keucr/smilsub.c | 679 ------------------------------ drivers/staging/keucr/smscsi.c | 194 --------- drivers/staging/keucr/transport.c | 865 -------------------------------------- drivers/staging/keucr/transport.h | 73 ---- drivers/staging/keucr/usb.c | 643 ---------------------------- drivers/staging/keucr/usb.h | 240 ----------- 20 files changed, 5359 deletions(-) delete mode 100644 drivers/staging/keucr/Kconfig delete mode 100644 drivers/staging/keucr/Makefile delete mode 100644 drivers/staging/keucr/TODO delete mode 100644 drivers/staging/keucr/common.h delete mode 100644 drivers/staging/keucr/init.c delete mode 100644 drivers/staging/keucr/init.h delete mode 100644 drivers/staging/keucr/scsiglue.c delete mode 100644 drivers/staging/keucr/scsiglue.h delete mode 100644 drivers/staging/keucr/smcommon.h delete mode 100644 drivers/staging/keucr/smil.h delete mode 100644 drivers/staging/keucr/smilecc.c delete mode 100644 drivers/staging/keucr/smilmain.c delete mode 100644 drivers/staging/keucr/smilsub.c delete mode 100644 drivers/staging/keucr/smscsi.c delete mode 100644 drivers/staging/keucr/transport.c delete mode 100644 drivers/staging/keucr/transport.h delete mode 100644 drivers/staging/keucr/usb.c delete mode 100644 drivers/staging/keucr/usb.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index d6a10c013a7f..5b14f0d8d1b8 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -76,8 +76,6 @@ source "drivers/staging/quickstart/Kconfig" source "drivers/staging/emxx_udc/Kconfig" -source "drivers/staging/keucr/Kconfig" - source "drivers/staging/bcm/Kconfig" source "drivers/staging/ft1000/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 4a708e95d307..d4536df8b69b 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -32,7 +32,6 @@ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/ obj-$(CONFIG_USB_EMXX) += emxx_udc/ -obj-$(CONFIG_USB_ENESTORAGE) += keucr/ obj-$(CONFIG_BCM_WIMAX) += bcm/ obj-$(CONFIG_FT1000) += ft1000/ obj-$(CONFIG_SPEAKUP) += speakup/ diff --git a/drivers/staging/keucr/Kconfig b/drivers/staging/keucr/Kconfig deleted file mode 100644 index ba756bf20665..000000000000 --- a/drivers/staging/keucr/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -config USB_ENESTORAGE - tristate "USB ENE SM card reader support" - depends on USB && SCSI && m - ---help--- - Say Y here if you wish to control a ENE SM Card reader. - To use SD/MS card, please build driver/usb/storage/ums-eneub6250.ko - - This option depends on 'SCSI' support being enabled, but you - probably also need 'SCSI device support: SCSI disk support' - (BLK_DEV_SD) for most USB storage devices. - - To compile this driver as a module, choose M here: the - module will be called keucr. - diff --git a/drivers/staging/keucr/Makefile b/drivers/staging/keucr/Makefile deleted file mode 100644 index c180bf4fab93..000000000000 --- a/drivers/staging/keucr/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -ccflags-y := -Idrivers/scsi - -obj-$(CONFIG_USB_ENESTORAGE) += keucr.o - -keucr-y := \ - usb.o \ - scsiglue.o \ - transport.o \ - init.o \ - smscsi.o \ - smilmain.o \ - smilsub.o \ - smilecc.o diff --git a/drivers/staging/keucr/TODO b/drivers/staging/keucr/TODO deleted file mode 100644 index d6da656eee1d..000000000000 --- a/drivers/staging/keucr/TODO +++ /dev/null @@ -1,12 +0,0 @@ -TODO: - - checkpatch.pl clean - - sparse clean - - determine if the driver should not be using a duplicate - version of the usb-storage scsi interface code, but should - be merged into the drivers/usb/storage/ directory and - infrastructure instead. - - review by the USB developer community - - smcommon.h & smilsub.c: use kernel hweight8(), hweight16() - -Please send any patches for this driver to Al Cho and -Greg Kroah-Hartman . diff --git a/drivers/staging/keucr/common.h b/drivers/staging/keucr/common.h deleted file mode 100644 index f0b977616cd5..000000000000 --- a/drivers/staging/keucr/common.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef COMMON_INCD -#define COMMON_INCD - -#define BYTE_MASK 0xff - -#endif - diff --git a/drivers/staging/keucr/init.c b/drivers/staging/keucr/init.c deleted file mode 100644 index 1e7449d6d120..000000000000 --- a/drivers/staging/keucr/init.c +++ /dev/null @@ -1,333 +0,0 @@ -#include -#include -#include - -#include -#include -#include - -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" -#include "smil.h" -#include "init.h" - -/* - * ENE_InitMedia(): - */ -int ENE_InitMedia(struct us_data *us) -{ - int result; - u8 MiscReg03 = 0; - - dev_info(&us->pusb_dev->dev, "--- Init Media ---\n"); - result = ene_read_byte(us, REG_CARD_STATUS, &MiscReg03); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, "Failed to read register\n"); - return USB_STOR_TRANSPORT_ERROR; - } - dev_info(&us->pusb_dev->dev, "MiscReg03 = %x\n", MiscReg03); - - if (MiscReg03 & 0x02) { - if (!us->SM_Status.Ready && !us->MS_Status.Ready) { - result = ENE_SMInit(us); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - } - - } - return result; -} - -/* - * ene_read_byte() : - */ -int ene_read_byte(struct us_data *us, u16 index, void *buf) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x01; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xED; - bcb->CDB[2] = (u8)(index>>8); - bcb->CDB[3] = (u8)index; - - result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); - return result; -} - -/* - *ENE_SMInit() - */ -int ENE_SMInit(struct us_data *us) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u8 buf[0x200]; - - dev_dbg(&us->pusb_dev->dev, "transport --- ENE_SMInit\n"); - - result = ENE_LoadBinCode(us, SM_INIT_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_info(&us->pusb_dev->dev, - "Failed to load SmartMedia init code\n: result= %x\n", - result); - return USB_STOR_TRANSPORT_ERROR; - } - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x01; - - result = ENE_SendScsiCmd(us, FDIR_READ, &buf, 0); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia init code: result = %x\n", - result); - return USB_STOR_TRANSPORT_ERROR; - } - - us->SM_Status = *(struct keucr_sm_status *)&buf[0]; - - us->SM_DeviceID = buf[1]; - us->SM_CardID = buf[2]; - - if (us->SM_Status.Insert && us->SM_Status.Ready) { - dev_info(&us->pusb_dev->dev, "Insert = %x\n", - us->SM_Status.Insert); - dev_info(&us->pusb_dev->dev, "Ready = %x\n", - us->SM_Status.Ready); - dev_info(&us->pusb_dev->dev, "WtP = %x\n", - us->SM_Status.WtP); - dev_info(&us->pusb_dev->dev, "DeviceID = %x\n", - us->SM_DeviceID); - dev_info(&us->pusb_dev->dev, "CardID = %x\n", - us->SM_CardID); - MediaChange = 1; - Check_D_MediaFmt(us); - } else { - dev_err(&us->pusb_dev->dev, - "SmartMedia Card Not Ready --- %x\n", buf[0]); - return USB_STOR_TRANSPORT_ERROR; - } - - return USB_STOR_TRANSPORT_GOOD; -} - -/* - * ENE_LoadBinCode() - */ -int ENE_LoadBinCode(struct us_data *us, u8 flag) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - /* void *buf; */ - u8 *buf; - - /* dev_info(&us->pusb_dev->dev, "transport --- ENE_LoadBinCode\n"); */ - if (us->BIN_FLAG == flag) - return USB_STOR_TRANSPORT_GOOD; - - buf = kmalloc(0x800, GFP_KERNEL); - if (buf == NULL) - return USB_STOR_TRANSPORT_ERROR; - switch (flag) { - /* For SS */ - case SM_INIT_PATTERN: - dev_dbg(&us->pusb_dev->dev, "SM_INIT_PATTERN\n"); - memcpy(buf, SM_Init, 0x800); - break; - case SM_RW_PATTERN: - dev_dbg(&us->pusb_dev->dev, "SM_RW_PATTERN\n"); - memcpy(buf, SM_Rdwr, 0x800); - break; - } - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x800; - bcb->Flags = 0x00; - bcb->CDB[0] = 0xEF; - - result = ENE_SendScsiCmd(us, FDIR_WRITE, buf, 0); - - kfree(buf); - us->BIN_FLAG = flag; - return result; -} - -/* - * ENE_SendScsiCmd(): - */ -int ENE_SendScsiCmd(struct us_data *us, u8 fDir, void *buf, int use_sg) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf; - - int result; - unsigned int transfer_length = bcb->DataTransferLength, - cswlen = 0, partial = 0; - unsigned int residue; - - /* dev_dbg(&us->pusb_dev->dev, "transport --- ENE_SendScsiCmd\n"); */ - /* send cmd to out endpoint */ - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, - bcb, US_BULK_CB_WRAP_LEN, NULL); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "send cmd to out endpoint fail ---\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - if (buf) { - unsigned int pipe = fDir; - - if (fDir == FDIR_READ) - pipe = us->recv_bulk_pipe; - else - pipe = us->send_bulk_pipe; - - /* Bulk */ - if (use_sg) - result = usb_stor_bulk_srb(us, pipe, us->srb); - else - result = usb_stor_bulk_transfer_sg(us, pipe, buf, - transfer_length, 0, &partial); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, "data transfer fail ---\n"); - return USB_STOR_TRANSPORT_ERROR; - } - } - - /* Get CSW for device status */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, &cswlen); - - if (result == USB_STOR_XFER_SHORT && cswlen == 0) { - dev_warn(&us->pusb_dev->dev, - "Received 0-length CSW; retrying...\n"); - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, - bcs, US_BULK_CS_WRAP_LEN, &cswlen); - } - - if (result == USB_STOR_XFER_STALLED) { - /* get the status again */ - dev_warn(&us->pusb_dev->dev, - "Attempting to get CSW (2nd try)...\n"); - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, - bcs, US_BULK_CS_WRAP_LEN, NULL); - } - - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* check bulk status */ - residue = le32_to_cpu(bcs->Residue); - - /* - * try to compute the actual residue, based on how much data - * was really transferred and what the device tells us - */ - if (residue && !(us->fflags & US_FL_IGNORE_RESIDUE)) { - residue = min(residue, transfer_length); - if (us->srb) - scsi_set_resid(us->srb, max(scsi_get_resid(us->srb), - (int) residue)); - } - - if (bcs->Status != US_BULK_STAT_OK) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* - * ENE_Read_Data() - */ -int ENE_Read_Data(struct us_data *us, void *buf, unsigned int length) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf; - int result; - - /* dev_dbg(&us->pusb_dev->dev, "transport --- ENE_Read_Data\n"); */ - /* set up the command wrapper */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = length; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xED; - bcb->CDB[2] = 0xFF; - bcb->CDB[3] = 0x81; - - /* send cmd to out endpoint */ - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcb, - US_BULK_CB_WRAP_LEN, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* R/W data */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, - buf, length, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* Get CSW for device status */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - if (bcs->Status != US_BULK_STAT_OK) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* - * ENE_Write_Data(): - */ -int ENE_Write_Data(struct us_data *us, void *buf, unsigned int length) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf; - int result; - - /* printk("transport --- ENE_Write_Data\n"); */ - /* set up the command wrapper */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = length; - bcb->Flags = 0x00; - bcb->CDB[0] = 0xEE; - bcb->CDB[2] = 0xFF; - bcb->CDB[3] = 0x81; - - /* send cmd to out endpoint */ - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcb, - US_BULK_CB_WRAP_LEN, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* R/W data */ - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, - buf, length, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* Get CSW for device status */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, NULL); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - if (bcs->Status != US_BULK_STAT_OK) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - diff --git a/drivers/staging/keucr/init.h b/drivers/staging/keucr/init.h deleted file mode 100644 index d1367e726ff1..000000000000 --- a/drivers/staging/keucr/init.h +++ /dev/null @@ -1,518 +0,0 @@ -#include "common.h" - -static u8 SM_Init[] = { -0x7B, 0x09, 0x7C, 0xF0, 0x7D, 0x10, 0x7E, 0xE9, -0x7F, 0xCC, 0x12, 0x2F, 0x71, 0x90, 0xE9, 0xCC, -0xE0, 0xB4, 0x07, 0x12, 0x90, 0xFF, 0x09, 0xE0, -0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, -0xF0, 0x12, 0x2F, 0x5C, 0xD3, 0x22, 0x78, 0x00, -0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, 0x0A, -0x20, 0x0A, 0x03, 0x02, 0xE0, 0xD0, 0x7F, 0x00, -0x12, 0x2F, 0xCB, 0x20, 0x01, 0x05, 0xC2, 0x25, -0x02, 0xE0, 0xEB, 0xC3, 0xE8, 0x94, 0x02, 0x40, -0x03, 0x02, 0xE0, 0xD0, 0xC0, 0x00, 0x90, 0xFE, -0x66, 0x74, 0x90, 0xF0, 0x12, 0xE1, 0x40, 0x90, -0xFF, 0x95, 0xE0, 0xC2, 0xE4, 0xF0, 0x90, 0xFF, -0x97, 0x74, 0x01, 0xF0, 0x7E, 0x01, 0x7F, 0x90, -0x12, 0x2F, 0x74, 0x90, 0xFF, 0x97, 0x74, 0x03, -0xF0, 0x90, 0xFE, 0xC5, 0xE4, 0xF0, 0x74, 0x00, -0x90, 0xFE, 0x6A, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -0xA3, 0xF0, 0x7E, 0x23, 0x7F, 0xDC, 0x12, 0x2F, -0x74, 0x12, 0x2F, 0x5C, 0x90, 0xFE, 0x64, 0xE0, -0x54, 0x01, 0x60, 0x04, 0xD2, 0x02, 0x80, 0x02, -0xC2, 0x02, 0x90, 0xFF, 0x95, 0xE0, 0xD2, 0xE4, -0xF0, 0x78, 0x10, 0x79, 0x04, 0x12, 0xE1, 0x71, -0x50, 0x3A, 0x90, 0xE9, 0xC6, 0xE0, 0x90, 0xE9, -0xC3, 0xF0, 0x78, 0x9A, 0x79, 0x04, 0x12, 0xE1, -0x71, 0x50, 0x29, 0x90, 0xE9, 0xC7, 0xE0, 0xB4, -0xB5, 0x22, 0x90, 0xE9, 0xC4, 0xF0, 0xD0, 0x00, -0xD2, 0x00, 0xC2, 0x01, 0xC2, 0x25, 0x80, 0x1B, -0xC2, 0x00, 0xD2, 0x01, 0x74, 0xFF, 0x90, 0xE9, -0xC3, 0xF0, 0xA3, 0xF0, 0x51, 0x01, 0xC2, 0x0A, -0xC2, 0x02, 0x80, 0x07, 0xD0, 0x00, 0x05, 0x00, -0x02, 0xE0, 0x43, 0x90, 0xFF, 0x09, 0xE0, 0x30, -0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, 0xF0, -0x90, 0xFF, 0x09, 0xE0, 0x30, 0xE5, 0xFC, 0xE4, -0xA2, 0x0A, 0x92, 0xE0, 0xA2, 0x00, 0x92, 0xE1, -0xA2, 0x01, 0x92, 0xE2, 0xA2, 0x02, 0x92, 0xE6, -0xA2, 0x25, 0x92, 0xE7, 0x90, 0xF4, 0x00, 0xF0, -0x90, 0xE9, 0xC3, 0xE0, 0x90, 0xF4, 0x01, 0xF0, -0x90, 0xE9, 0xC4, 0xE0, 0x90, 0xF4, 0x02, 0xF0, -0x90, 0xFF, 0x2A, 0x74, 0x02, 0xF0, 0xA3, 0x74, -0x00, 0xF0, 0x75, 0x3C, 0x00, 0x75, 0x3D, 0x00, -0x75, 0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, 0x22, -0x90, 0xFE, 0x71, 0xE4, 0xF0, 0x90, 0xFE, 0x72, -0x74, 0x01, 0xF0, 0x90, 0xFE, 0x64, 0x74, 0x0C, -0xF0, 0x90, 0xFE, 0x64, 0x74, 0x00, 0x45, 0x4E, -0xF0, 0x90, 0xFE, 0x64, 0xE0, 0x54, 0x10, 0x60, -0x08, 0x90, 0xFE, 0x72, 0x74, 0x81, 0xF0, 0xD3, -0x22, 0x90, 0xFE, 0x64, 0x74, 0x08, 0xF0, 0xC3, -0x22, 0x90, 0xFE, 0x6F, 0xE9, 0x14, 0xF0, 0x90, -0xFE, 0x70, 0xE0, 0x54, 0xFC, 0xF0, 0x90, 0xFE, -0x68, 0x74, 0x00, 0xF0, 0xB8, 0x9A, 0x2A, 0x74, -0x15, 0x90, 0xFE, 0x64, 0xF0, 0x74, 0x9A, 0x90, -0xFE, 0x60, 0xF0, 0x74, 0x16, 0x90, 0xFE, 0x64, -0xF0, 0x74, 0x00, 0x90, 0xFE, 0x60, 0xF0, 0x30, -0x0A, 0x5D, 0x90, 0xFE, 0x64, 0xE0, 0x20, 0xE7, -0xF6, 0x74, 0x14, 0x90, 0xFE, 0x64, 0xF0, 0x80, -0x20, 0x90, 0xFE, 0x6E, 0xE8, 0x44, 0x01, 0xF0, -0xC2, 0x09, 0x12, 0xE3, 0x26, 0x20, 0x08, 0x0E, -0x12, 0xE3, 0x32, 0x30, 0x3E, 0xF7, 0x90, 0xFE, -0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x09, 0x20, 0x09, -0x2E, 0x7A, 0xE9, 0x7B, 0xC5, 0x7C, 0xFE, 0x7D, -0x60, 0xB8, 0x10, 0x07, 0x90, 0xFE, 0x69, 0xE0, -0x20, 0xE6, 0xFC, 0x8C, 0x83, 0x8D, 0x82, 0xE0, -0x8A, 0x83, 0x8B, 0x82, 0xF0, 0xA3, 0xAA, 0x83, -0xAB, 0x82, 0xD9, 0xE5, 0xB8, 0x9A, 0x06, 0x74, -0x10, 0x90, 0xFE, 0x64, 0xF0, 0xD3, 0x22, 0xC3, -0x22, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, -0x25, 0x20, 0x25, 0x06, 0xC2, 0x1F, 0xD2, 0x19, -0xC3, 0x22, 0x7F, 0x02, 0x12, 0x2F, 0xCB, 0x20, -0x19, 0x05, 0x30, 0x1F, 0x02, 0xD3, 0x22, 0x90, -0xEA, 0x44, 0x74, 0x80, 0xF0, 0x7F, 0x10, 0x12, -0x2F, 0xC5, 0x90, 0xFE, 0x47, 0xE0, 0x44, 0x80, -0xF0, 0x78, 0x00, 0xE8, 0xC3, 0x94, 0x04, 0x50, -0x0A, 0x7F, 0x88, 0x7E, 0x13, 0x12, 0xE3, 0x4D, -0x08, 0x80, 0xF0, 0x90, 0xFE, 0x45, 0xE0, 0x54, -0xFB, 0xF0, 0x90, 0xFE, 0x47, 0xE0, 0x54, 0xBF, -0xF0, 0x90, 0xFE, 0x45, 0xE0, 0x54, 0xFE, 0xF0, -0x90, 0xFE, 0x45, 0xE0, 0x54, 0x7F, 0xF0, 0x90, -0xFE, 0x46, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0xFE, -0x45, 0xE0, 0x54, 0xC7, 0x44, 0x18, 0xF0, 0x90, -0xFE, 0x47, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0xFE, -0x45, 0xE0, 0x44, 0x40, 0xF0, 0x7F, 0x32, 0x7E, -0x00, 0x12, 0xE3, 0x4D, 0x90, 0xFE, 0x51, 0xE0, -0x54, 0x33, 0xF0, 0x90, 0xFE, 0x44, 0x74, 0x02, -0xF0, 0x30, 0x25, 0x04, 0xE0, 0x20, 0xE1, 0xF9, -0x90, 0xFE, 0x51, 0xE0, 0x54, 0x0F, 0xF0, 0x90, -0xFE, 0x44, 0x74, 0x02, 0xF0, 0x30, 0x25, 0x04, -0xE0, 0x20, 0xE1, 0xF9, 0x90, 0xFE, 0x44, 0x74, -0x04, 0xF0, 0x30, 0x25, 0x04, 0xE0, 0x20, 0xE2, -0xF9, 0x90, 0xFE, 0x4C, 0xE0, 0xF0, 0x90, 0xFE, -0x4D, 0xE0, 0xF0, 0x90, 0xFE, 0x48, 0x74, 0x7F, -0xF0, 0x90, 0xFE, 0x49, 0x74, 0x9F, 0xF0, 0x90, -0xFE, 0x51, 0xE0, 0x54, 0x3C, 0x44, 0x02, 0xF0, -0x90, 0xFE, 0x44, 0x74, 0x02, 0xF0, 0x30, 0x25, -0x04, 0xE0, 0x20, 0xE1, 0xF9, 0x90, 0xFE, 0x46, -0xE0, 0x44, 0x20, 0xF0, 0x79, 0x02, 0x7A, 0x06, -0x7B, 0x00, 0x7C, 0x00, 0x7D, 0x06, 0x7E, 0xEB, -0x7F, 0xC9, 0x12, 0x2F, 0xA7, 0x40, 0x03, 0x02, -0xE3, 0x04, 0xD3, 0x22, 0xE4, 0x90, 0xFE, 0x48, -0xF0, 0x90, 0xFE, 0x49, 0xF0, 0x90, 0xFE, 0x4C, -0xE0, 0xF0, 0x90, 0xFE, 0x4D, 0xE0, 0xF0, 0x90, -0xFE, 0x47, 0xE0, 0x54, 0x7F, 0xF0, 0xC2, 0x25, -0xC2, 0x1F, 0xD2, 0x19, 0xC3, 0x22, 0xC2, 0x3E, -0x75, 0x7C, 0x00, 0x75, 0x7D, 0x00, 0x75, 0x7E, -0x00, 0x22, 0x05, 0x7C, 0xE5, 0x7C, 0x70, 0x14, -0x05, 0x7D, 0xE5, 0x7D, 0x70, 0x04, 0x05, 0x7E, -0x80, 0x0A, 0xB4, 0x17, 0x07, 0xE5, 0x7E, 0xB4, -0x06, 0x02, 0xD2, 0x3E, 0x22, 0x75, 0x8A, 0x00, -0x75, 0x8C, 0xCE, 0xC2, 0x8D, 0x90, 0xEA, 0x65, -0xE4, 0xF0, 0xA3, 0xF0, 0xD2, 0x8C, 0x90, 0xEA, -0x65, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xC3, -0x9E, 0x40, 0xF3, 0x70, 0x05, 0xED, 0xC3, 0x9F, -0x40, 0xEC, 0xC2, 0x8C, 0x22, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x58, 0x44, 0x2D, 0x49, 0x6E, 0x69, 0x74, 0x20, -0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x30, 0x31 }; - -static u8 SM_Rdwr[] = { -0x7B, 0x0C, 0x7C, 0xF0, 0x7D, 0x10, 0x7E, 0xE9, -0x7F, 0xCC, 0x12, 0x2F, 0x71, 0x90, 0xE9, 0xC3, -0xE0, 0xB4, 0x73, 0x04, 0x74, 0x40, 0x80, 0x09, -0xB4, 0x75, 0x04, 0x74, 0x40, 0x80, 0x02, 0x74, -0xC0, 0x90, 0xFE, 0x70, 0xF0, 0x90, 0xFF, 0x09, -0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, -0x80, 0xF0, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, -0x92, 0x0A, 0x40, 0x01, 0x22, 0x90, 0xFE, 0x6A, -0xE4, 0xF0, 0x90, 0xE9, 0xCC, 0xE0, 0xB4, 0x02, -0x05, 0xD2, 0x06, 0x02, 0xE0, 0x78, 0xB4, 0x03, -0x03, 0x02, 0xE3, 0xD0, 0xB4, 0x04, 0x03, 0x02, -0xE1, 0xC6, 0xB4, 0x05, 0x03, 0x02, 0xE5, 0x20, -0xB4, 0x06, 0x03, 0x02, 0xE5, 0xE0, 0xB4, 0x07, -0x05, 0x12, 0x2F, 0x5C, 0xD3, 0x22, 0xB4, 0x08, -0x05, 0xC2, 0x06, 0x02, 0xE6, 0x3B, 0xC3, 0x22, -0xE5, 0x3E, 0xC3, 0x13, 0x90, 0xE9, 0xCA, 0xF0, -0xC0, 0xE0, 0x75, 0xF0, 0x02, 0xC0, 0xF0, 0x12, -0xE0, 0xD8, 0xEF, 0x70, 0x21, 0x20, 0x37, 0x07, -0x20, 0x09, 0x04, 0xD0, 0xF0, 0x80, 0x05, 0xD0, -0xF0, 0xD5, 0xF0, 0xE9, 0xD0, 0xE0, 0x90, 0xFF, -0x28, 0xE0, 0x30, 0xE7, 0xFC, 0x90, 0xFF, 0x28, -0xE0, 0x44, 0x01, 0xF0, 0xC3, 0x22, 0xD0, 0xF0, -0x90, 0xE9, 0xCF, 0xE0, 0x24, 0x01, 0xF0, 0x90, -0xE9, 0xCE, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0xE9, -0xCD, 0xE0, 0x34, 0x00, 0xF0, 0xD0, 0xE0, 0x14, -0x70, 0xB6, 0x75, 0x3C, 0x00, 0x75, 0x3D, 0x00, -0x75, 0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, 0x22, -0xC2, 0x08, 0xC2, 0x36, 0xC2, 0x37, 0xE4, 0x90, -0xEB, 0xC2, 0xF0, 0x90, 0xE9, 0xCD, 0xE0, 0xF8, -0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0x90, 0xFE, 0x6B, -0xF0, 0xA3, 0xE9, 0xF0, 0xA3, 0xE8, 0xF0, 0x90, -0xFE, 0x6F, 0x74, 0x0F, 0xF0, 0x90, 0xFE, 0x70, -0xE0, 0x54, 0xFC, 0x44, 0x02, 0xF0, 0x90, 0xFE, -0xC6, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, -0x90, 0xFE, 0xC0, 0x74, 0xF4, 0xF0, 0x74, 0x00, -0xA3, 0xF0, 0x90, 0xFE, 0x68, 0x74, 0x21, 0xF0, -0x90, 0xFE, 0x64, 0x74, 0x70, 0x45, 0x4E, 0xF0, -0x90, 0xFE, 0x64, 0x74, 0x30, 0x45, 0x4E, 0xF0, -0x30, 0x06, 0x07, 0x90, 0xFF, 0x09, 0xE0, 0x30, -0xE5, 0xFC, 0x90, 0xFE, 0x6E, 0x74, 0x51, 0xF0, -0x90, 0xFE, 0xC4, 0x74, 0x21, 0xF0, 0xC2, 0x09, -0x12, 0xE7, 0xB0, 0x20, 0x08, 0x0E, 0x12, 0xE7, -0xBC, 0x30, 0x3E, 0xF7, 0x90, 0xFE, 0xD8, 0x74, -0x01, 0xF0, 0xD2, 0x09, 0x30, 0x09, 0x03, 0x7F, -0x00, 0x22, 0x12, 0xE7, 0xB0, 0x20, 0x36, 0x11, -0x20, 0x37, 0x0E, 0x12, 0xE7, 0xBC, 0x30, 0x3E, -0xF4, 0x90, 0xFE, 0xD8, 0x74, 0x01, 0xF0, 0xD2, -0x37, 0x30, 0x37, 0x03, 0x7F, 0x00, 0x22, 0x90, -0xFE, 0x64, 0x74, 0x10, 0x45, 0x4E, 0xF0, 0x90, -0xFE, 0x64, 0x74, 0x00, 0x45, 0x4E, 0xF0, 0x12, -0x2F, 0x65, 0x12, 0x2F, 0x68, 0xBF, 0x00, 0x09, -0x74, 0x02, 0x90, 0xEB, 0xC2, 0xF0, 0x7F, 0x00, -0x22, 0x12, 0x2F, 0x6B, 0xBF, 0x00, 0x0F, 0x12, -0x2F, 0x6E, 0xBF, 0x00, 0x09, 0x74, 0x01, 0x90, -0xEB, 0xC2, 0xF0, 0x7F, 0x00, 0x22, 0x30, 0x06, -0x0A, 0x90, 0xFF, 0x2A, 0x74, 0x02, 0xF0, 0xA3, -0x74, 0x00, 0xF0, 0x7F, 0x01, 0x22, 0x12, 0xE3, -0xAA, 0x74, 0x01, 0x90, 0xE9, 0xCB, 0xF0, 0xE5, -0x3E, 0xC3, 0x13, 0x90, 0xE9, 0xCA, 0xF0, 0xC0, -0xE0, 0x75, 0xF0, 0x02, 0xC0, 0xF0, 0x12, 0xE2, -0x2F, 0xEF, 0x70, 0x21, 0x20, 0x37, 0x07, 0x20, -0x09, 0x04, 0xD0, 0xF0, 0x80, 0x05, 0xD0, 0xF0, -0xD5, 0xF0, 0xE9, 0xD0, 0xE0, 0x90, 0xFF, 0x28, -0xE0, 0x30, 0xE7, 0xFC, 0x90, 0xFF, 0x28, 0xE0, -0x44, 0x01, 0xF0, 0xC3, 0x22, 0xD0, 0xF0, 0x90, -0xE9, 0xD2, 0xE0, 0x24, 0x01, 0xF0, 0x90, 0xE9, -0xD1, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0xE9, 0xD0, -0xE0, 0x34, 0x00, 0xF0, 0xD0, 0xE0, 0x14, 0x70, -0xB6, 0x75, 0x3C, 0x00, 0x75, 0x3D, 0x00, 0x75, -0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, 0x22, 0xC2, -0x08, 0xC2, 0x36, 0xC2, 0x37, 0x90, 0xFE, 0x68, -0x74, 0x31, 0xF0, 0x90, 0xE9, 0xD0, 0xE0, 0xF8, -0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0x90, 0xFE, 0x6B, -0xF0, 0xA3, 0xE9, 0xF0, 0xA3, 0xE8, 0xF0, 0x90, -0xFE, 0x6F, 0x74, 0x0F, 0xF0, 0x90, 0xFE, 0x70, -0xE0, 0x54, 0xFC, 0x44, 0x22, 0xF0, 0x90, 0xE9, -0xCB, 0xE0, 0x70, 0x0C, 0x90, 0xFE, 0xC0, 0x74, -0xF4, 0xF0, 0xA3, 0x74, 0x00, 0xF0, 0x80, 0x0A, -0x90, 0xFE, 0xC0, 0x74, 0xF0, 0xF0, 0xA3, 0x74, -0x00, 0xF0, 0x90, 0xFE, 0x64, 0x74, 0xF0, 0x45, -0x4E, 0xF0, 0x90, 0xFE, 0x64, 0x74, 0xB0, 0x45, -0x4E, 0xF0, 0x90, 0xFE, 0x6E, 0x74, 0x81, 0xF0, -0x90, 0xE9, 0xCB, 0xE0, 0x70, 0x0D, 0x90, 0xFE, -0xC6, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, -0x02, 0xE3, 0x56, 0x20, 0x2D, 0x03, 0x02, 0xE2, -0xEF, 0x90, 0xFE, 0xC6, 0x74, 0x01, 0xF0, 0xA3, -0x74, 0xFF, 0xF0, 0x90, 0xFF, 0x09, 0x30, 0x0A, -0x04, 0xE0, 0x30, 0xE1, 0xF9, 0x90, 0xFE, 0xC4, -0x74, 0x23, 0xF0, 0x12, 0xE7, 0xB0, 0x20, 0x36, -0x11, 0x20, 0x37, 0x0E, 0x12, 0xE7, 0xBC, 0x30, -0x3E, 0xF4, 0x90, 0xFE, 0xD8, 0x74, 0x01, 0xF0, -0xD2, 0x37, 0x30, 0x37, 0x02, 0x61, 0xA7, 0x90, -0xFF, 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, -0x23, 0x74, 0x80, 0xF0, 0x02, 0xE3, 0x3F, 0x90, -0xFE, 0xC6, 0xE4, 0xF0, 0xA3, 0x74, 0x3F, 0xF0, -0x78, 0x08, 0xC0, 0x00, 0xC2, 0x36, 0xC2, 0x37, -0x90, 0xFF, 0x09, 0x30, 0x0A, 0x04, 0xE0, 0x30, -0xE1, 0xF9, 0x90, 0xFE, 0xC4, 0x74, 0x23, 0xF0, -0x12, 0xE7, 0xB0, 0x20, 0x36, 0x11, 0x20, 0x37, -0x0E, 0x12, 0xE7, 0xBC, 0x30, 0x3E, 0xF4, 0x90, -0xFE, 0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x37, 0x90, -0xFF, 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, -0x23, 0x74, 0x80, 0xF0, 0x30, 0x37, 0x04, 0xD0, -0x00, 0x80, 0x6C, 0xD0, 0x00, 0xD8, 0xBB, 0xC2, -0x36, 0xC2, 0x37, 0x90, 0xFE, 0xC6, 0xE4, 0xF0, -0xA3, 0x74, 0x0F, 0xF0, 0x90, 0xFE, 0xC0, 0x74, -0xF6, 0xF0, 0xA3, 0x74, 0x00, 0xF0, 0x90, 0xFE, -0xC4, 0x74, 0x23, 0xF0, 0x12, 0xE7, 0xB0, 0x20, -0x36, 0x11, 0x20, 0x37, 0x0E, 0x12, 0xE7, 0xBC, -0x30, 0x3E, 0xF4, 0x90, 0xFE, 0xD8, 0x74, 0x01, -0xF0, 0xD2, 0x37, 0x30, 0x37, 0x02, 0x80, 0x2F, -0xC2, 0x09, 0x12, 0xE7, 0xB0, 0x20, 0x08, 0x0E, -0x12, 0xE7, 0xBC, 0x30, 0x3E, 0xF7, 0x90, 0xFE, -0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x09, 0x30, 0x09, -0x02, 0x80, 0x14, 0x90, 0xFE, 0x64, 0x74, 0x90, -0x45, 0x4E, 0xF0, 0x90, 0xFE, 0x64, 0x74, 0x80, -0x45, 0x4E, 0xF0, 0x12, 0x2F, 0x59, 0x22, 0x7F, -0x00, 0x22, 0x90, 0xF6, 0x00, 0x7F, 0x06, 0x74, -0xFF, 0xF0, 0xA3, 0xDF, 0xFC, 0x7B, 0x02, 0x7C, -0xE9, 0x7D, 0xD3, 0x7E, 0xF6, 0x7F, 0x06, 0x12, -0x2F, 0x71, 0x7B, 0x02, 0x7C, 0xE9, 0x7D, 0xD3, -0x7E, 0xF6, 0x7F, 0x0B, 0x12, 0x2F, 0x71, 0x22, -0x90, 0xFE, 0xC6, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, -0xF0, 0x90, 0xFE, 0x6F, 0xF0, 0x90, 0xFE, 0x70, -0xE0, 0x54, 0xFC, 0xF0, 0x90, 0xFE, 0xC0, 0x74, -0xF6, 0xF0, 0xA3, 0x74, 0x00, 0xF0, 0x90, 0xFE, -0x68, 0x74, 0x21, 0xF0, 0x90, 0xFE, 0x66, 0xE0, -0x54, 0xEF, 0xF0, 0x90, 0xE9, 0xD3, 0xE0, 0xF5, -0x08, 0xA3, 0xE0, 0xF5, 0x09, 0x90, 0xFF, 0x09, -0xE0, 0x30, 0xE5, 0xFC, 0xE4, 0xF5, 0x10, 0x7E, -0xF4, 0x7F, 0x00, 0xC0, 0x06, 0xC0, 0x07, 0xC2, -0x36, 0xC2, 0x37, 0xC2, 0x09, 0x90, 0xE9, 0xCD, -0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0x90, -0xFE, 0x6B, 0xF0, 0xA3, 0xE9, 0xF0, 0xA3, 0xE8, -0xF0, 0x90, 0xFE, 0x6E, 0x74, 0x71, 0xF0, 0x90, -0xFE, 0xC4, 0x74, 0x21, 0xF0, 0x90, 0xFE, 0x65, -0x12, 0xE7, 0xB0, 0xE0, 0x20, 0xE4, 0x11, 0x12, -0xE7, 0xBC, 0x30, 0x3E, 0xF6, 0x90, 0xFE, 0xD8, -0x74, 0x01, 0xF0, 0xD2, 0x09, 0x02, 0xE4, 0x72, -0x74, 0x10, 0xF0, 0x12, 0xE7, 0xB0, 0x20, 0x36, -0x11, 0x20, 0x37, 0x0E, 0x12, 0xE7, 0xBC, 0x30, -0x3E, 0xF4, 0x90, 0xFE, 0xD8, 0x74, 0x01, 0xF0, -0xD2, 0x37, 0x20, 0x09, 0x05, 0x20, 0x37, 0x02, -0x80, 0x10, 0x90, 0xFE, 0x66, 0xE0, 0x44, 0x10, -0xF0, 0x12, 0x2F, 0x5C, 0xD0, 0x07, 0xD0, 0x06, -0xC3, 0x22, 0xD0, 0x07, 0xD0, 0x06, 0x7B, 0x10, -0x7C, 0xF6, 0x7D, 0x00, 0x12, 0x2F, 0x71, 0x05, -0x10, 0xC3, 0xE5, 0x09, 0x94, 0x01, 0xF5, 0x09, -0xE5, 0x08, 0x94, 0x00, 0xF5, 0x08, 0x45, 0x09, -0x70, 0x03, 0x02, 0xE4, 0xEF, 0x90, 0xE9, 0xCF, -0xE0, 0x24, 0x20, 0xF0, 0x90, 0xE9, 0xCE, 0xE0, -0x34, 0x00, 0xF0, 0x90, 0xE9, 0xCD, 0xE0, 0x34, -0x00, 0xF0, 0xC3, 0xEF, 0x24, 0x10, 0xFF, 0xEE, -0x34, 0x00, 0xFE, 0xE5, 0x10, 0x64, 0x20, 0x60, -0x03, 0x02, 0xE4, 0x13, 0x90, 0xFF, 0x2A, 0x74, -0x02, 0xF0, 0xA3, 0x74, 0x00, 0xF0, 0x75, 0x10, -0x00, 0x7E, 0xF4, 0x7F, 0x00, 0x90, 0xFF, 0x09, -0xE0, 0x30, 0xE5, 0xFC, 0x02, 0xE4, 0x13, 0xE5, -0x10, 0x60, 0x17, 0x7E, 0x00, 0x7F, 0x00, 0x78, -0x04, 0xC3, 0x33, 0xFF, 0xEE, 0x33, 0xFE, 0xEF, -0xD8, 0xF8, 0x90, 0xFF, 0x2A, 0xEE, 0xF0, 0xA3, -0xEF, 0xF0, 0x90, 0xFE, 0x66, 0xE0, 0x44, 0x10, -0xF0, 0x12, 0x2F, 0x5C, 0x78, 0x00, 0x88, 0x3C, -0x88, 0x3D, 0x88, 0x3E, 0x88, 0x3F, 0xD3, 0x22, -0x12, 0x2F, 0x5F, 0x12, 0x2F, 0x62, 0x90, 0xFE, -0xC6, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x90, -0xFE, 0x6F, 0xF0, 0x90, 0xFE, 0x70, 0xE0, 0x54, -0xFC, 0xF0, 0x90, 0xFE, 0xC0, 0x74, 0xF6, 0xF0, -0xA3, 0x74, 0x00, 0xF0, 0x90, 0xFE, 0x68, 0x74, -0x31, 0xF0, 0x90, 0xE9, 0xD3, 0xE0, 0xF8, 0xC0, -0x00, 0xC2, 0x08, 0xC2, 0x36, 0xC2, 0x37, 0x90, -0xE9, 0xD0, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, -0xE0, 0x90, 0xFE, 0x6B, 0xF0, 0xA3, 0xE9, 0xF0, -0xA3, 0xE8, 0xF0, 0x90, 0xFE, 0x6E, 0x74, 0x81, -0xF0, 0x90, 0xFE, 0xC4, 0x74, 0x23, 0xF0, 0x12, -0xE7, 0xB0, 0x20, 0x36, 0x11, 0x20, 0x37, 0x0E, -0x12, 0xE7, 0xBC, 0x30, 0x3E, 0xF4, 0x90, 0xFE, -0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x37, 0x30, 0x37, -0x07, 0xD0, 0x00, 0x12, 0x2F, 0x5C, 0xC3, 0x22, -0xC2, 0x09, 0x12, 0xE7, 0xB0, 0x20, 0x08, 0x0E, -0x12, 0xE7, 0xBC, 0x30, 0x3E, 0xF7, 0x90, 0xFE, -0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x09, 0x20, 0x09, -0xE0, 0x90, 0xE9, 0xD2, 0xE0, 0x24, 0x01, 0xF0, -0x90, 0xE9, 0xD1, 0xE0, 0x34, 0x00, 0xF0, 0x90, -0xE9, 0xD0, 0xE0, 0x34, 0x00, 0xF0, 0xD0, 0x00, -0x18, 0xE8, 0x60, 0x03, 0x02, 0xE5, 0x4F, 0x12, -0x2F, 0x5C, 0x75, 0x3C, 0x00, 0x75, 0x3D, 0x00, -0x75, 0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, 0x22, -0x90, 0xE9, 0xD0, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, -0xA3, 0xE0, 0x90, 0xFE, 0x6B, 0xF0, 0xA3, 0xE9, -0xF0, 0xA3, 0xE8, 0xF0, 0x90, 0xFE, 0x68, 0x74, -0x00, 0xF0, 0xC2, 0x08, 0x90, 0xFE, 0x6E, 0x74, -0xB1, 0xF0, 0xC2, 0x09, 0x12, 0xE7, 0xB0, 0x20, -0x08, 0x0E, 0x12, 0xE7, 0xBC, 0x30, 0x3E, 0xF7, -0x90, 0xFE, 0xD8, 0x74, 0x01, 0xF0, 0xD2, 0x09, -0x20, 0x09, 0x1E, 0x90, 0xFE, 0x70, 0xE0, 0x44, -0x10, 0xF0, 0x54, 0xEF, 0xF0, 0x12, 0x2F, 0x59, -0xEF, 0x60, 0x0E, 0x75, 0x3C, 0x00, 0x75, 0x3D, -0x00, 0x75, 0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, -0x22, 0xC3, 0x22, 0x7B, 0x03, 0x7C, 0xE9, 0x7D, -0xCD, 0x7E, 0xE9, 0x7F, 0xD7, 0x12, 0x2F, 0x71, -0x12, 0xE3, 0xAA, 0x90, 0xE9, 0xD5, 0xE0, 0x60, -0x12, 0xF9, 0x12, 0xE7, 0x17, 0x40, 0x01, 0x22, -0x90, 0xF6, 0x00, 0x78, 0x06, 0x74, 0xFF, 0xF0, -0xA3, 0xD8, 0xFC, 0x74, 0x01, 0x90, 0xE9, 0xCB, -0xF0, 0xE5, 0x3E, 0xC3, 0x13, 0x90, 0xE9, 0xCA, -0xF0, 0xC0, 0xE0, 0x75, 0xF0, 0x02, 0xC0, 0xF0, -0x12, 0xE2, 0x2F, 0xEF, 0x70, 0x21, 0x20, 0x37, -0x07, 0x20, 0x09, 0x04, 0xD0, 0xF0, 0x80, 0x05, -0xD0, 0xF0, 0xD5, 0xF0, 0xE9, 0xD0, 0xE0, 0x90, -0xFF, 0x28, 0xE0, 0x30, 0xE7, 0xFC, 0x90, 0xFF, -0x28, 0xE0, 0x44, 0x01, 0xF0, 0xC3, 0x22, 0xD0, -0xF0, 0x90, 0xE9, 0xD2, 0xE0, 0x24, 0x01, 0xF0, -0x90, 0xE9, 0xD1, 0xE0, 0x34, 0x00, 0xF0, 0x90, -0xE9, 0xD0, 0xE0, 0x34, 0x00, 0xF0, 0xD0, 0xE0, -0x14, 0x70, 0xB6, 0x90, 0xE9, 0xD5, 0xE0, 0xF8, -0x90, 0xE9, 0xCA, 0xE0, 0x28, 0xF5, 0xF0, 0xC3, -0x74, 0x20, 0x95, 0xF0, 0x60, 0x22, 0xF9, 0x90, -0xE9, 0xCA, 0xE0, 0xF5, 0xF0, 0x90, 0xE9, 0xCF, -0xE0, 0x25, 0xF0, 0xF0, 0x90, 0xE9, 0xCE, 0xE0, -0x34, 0x00, 0xF0, 0x90, 0xE9, 0xCD, 0xE0, 0x34, -0x00, 0xF0, 0x12, 0xE7, 0x17, 0x40, 0x01, 0x22, -0x90, 0xE9, 0xD6, 0xE0, 0x70, 0x13, 0x7B, 0x03, -0x7C, 0xE9, 0x7D, 0xD7, 0x7E, 0xE9, 0x7F, 0xD0, -0x12, 0x2F, 0x71, 0x12, 0xE5, 0xE0, 0x40, 0x01, -0x22, 0x75, 0x3C, 0x00, 0x75, 0x3D, 0x00, 0x75, -0x3E, 0x00, 0x75, 0x3F, 0x00, 0xD3, 0x22, 0x90, -0xE9, 0xD6, 0xE0, 0x60, 0x18, 0x74, 0xFF, 0x90, -0xF4, 0x00, 0x78, 0xFF, 0xF0, 0xA3, 0x18, 0xB8, -0x00, 0xFA, 0x78, 0xFF, 0xF0, 0xA3, 0x18, 0xB8, -0x00, 0xFA, 0xF0, 0xA3, 0xF0, 0xC0, 0x01, 0x12, -0xE7, 0x70, 0x40, 0x04, 0xD0, 0x01, 0xC3, 0x22, -0x90, 0xE9, 0xCF, 0xE0, 0x24, 0x01, 0xF0, 0x90, -0xE9, 0xCE, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0xE9, -0xCD, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0xE9, 0xD2, -0xE0, 0x24, 0x01, 0xF0, 0x90, 0xE9, 0xD1, 0xE0, -0x34, 0x00, 0xF0, 0x90, 0xE9, 0xD0, 0xE0, 0x34, -0x00, 0xF0, 0xD0, 0x01, 0xD9, 0xC7, 0xD3, 0x22, -0xC2, 0x06, 0x90, 0xE9, 0xD6, 0xE0, 0x70, 0x28, -0x12, 0xE0, 0xD8, 0xEF, 0x60, 0x03, 0x02, 0xE7, -0xA0, 0x90, 0xEB, 0xC2, 0xE0, 0x60, 0x17, 0x64, -0x02, 0x60, 0x15, 0x90, 0xF6, 0x00, 0x78, 0x06, -0x74, 0xFF, 0xF0, 0xA3, 0xD8, 0xFC, 0x74, 0xF0, -0x90, 0xF6, 0x04, 0xF0, 0x80, 0x02, 0xC3, 0x22, -0xE4, 0x90, 0xE9, 0xCB, 0xF0, 0x12, 0xE2, 0x2F, -0xEF, 0x70, 0x03, 0x02, 0xE7, 0x81, 0xD3, 0x22, -0xC2, 0x3E, 0x75, 0x7C, 0x00, 0x75, 0x7D, 0x00, -0x75, 0x7E, 0x00, 0x22, 0x05, 0x7C, 0xE5, 0x7C, -0x70, 0x14, 0x05, 0x7D, 0xE5, 0x7D, 0x70, 0x04, -0x05, 0x7E, 0x80, 0x0A, 0xB4, 0x17, 0x07, 0xE5, -0x7E, 0xB4, 0x06, 0x02, 0xD2, 0x3E, 0x22, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x58, 0x44, 0x2D, 0x52, 0x57, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30 }; - diff --git a/drivers/staging/keucr/scsiglue.c b/drivers/staging/keucr/scsiglue.c deleted file mode 100644 index 7d8d444910c1..000000000000 --- a/drivers/staging/keucr/scsiglue.c +++ /dev/null @@ -1,467 +0,0 @@ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" - -/* Host functions */ -/* - * host_info() - */ -static const char *host_info(struct Scsi_Host *host) -{ - /* pr_info("scsiglue --- host_info\n"); */ - return "SCSI emulation for USB Mass Storage devices"; -} - -/* - * slave_alloc() - */ -static int slave_alloc(struct scsi_device *sdev) -{ - struct us_data *us = host_to_us(sdev->host); - - /* pr_info("scsiglue --- slave_alloc\n"); */ - sdev->inquiry_len = 36; - - blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); - - if (us->subclass == USB_SC_UFI) - sdev->sdev_target->pdt_1f_for_no_lun = 1; - - return 0; -} - -/* - * slave_configure() - */ -static int slave_configure(struct scsi_device *sdev) -{ - struct us_data *us = host_to_us(sdev->host); - - /* pr_info("scsiglue --- slave_configure\n"); */ - if (us->fflags & (US_FL_MAX_SECTORS_64 | US_FL_MAX_SECTORS_MIN)) { - unsigned int max_sectors = 64; - - if (us->fflags & US_FL_MAX_SECTORS_MIN) - max_sectors = PAGE_CACHE_SIZE >> 9; - if (queue_max_sectors(sdev->request_queue) > max_sectors) - blk_queue_max_hw_sectors(sdev->request_queue, - max_sectors); - } - - if (sdev->type == TYPE_DISK) { - if (us->subclass != USB_SC_SCSI && - us->subclass != USB_SC_CYP_ATACB) - sdev->use_10_for_ms = 1; - sdev->use_192_bytes_for_3f = 1; - if (us->fflags & US_FL_NO_WP_DETECT) - sdev->skip_ms_page_3f = 1; - sdev->skip_ms_page_8 = 1; - if (us->fflags & US_FL_FIX_CAPACITY) - sdev->fix_capacity = 1; - if (us->fflags & US_FL_CAPACITY_HEURISTICS) - sdev->guess_capacity = 1; - if (sdev->scsi_level > SCSI_2) - sdev->sdev_target->scsi_level = sdev->scsi_level - = SCSI_2; - sdev->retry_hwerror = 1; - sdev->allow_restart = 1; - sdev->last_sector_bug = 1; - } else { - sdev->use_10_for_ms = 1; - } - - if ((us->protocol == USB_PR_CB || us->protocol == USB_PR_CBI) && - sdev->scsi_level == SCSI_UNKNOWN) - us->max_lun = 0; - - if (us->fflags & US_FL_NOT_LOCKABLE) - sdev->lockable = 0; - - return 0; -} - -/* This is always called with scsi_lock(host) held */ -/* - * queuecommand() - */ -static int queuecommand_lck(struct scsi_cmnd *srb, - void (*done)(struct scsi_cmnd *)) -{ - struct us_data *us = host_to_us(srb->device->host); - - /* pr_info("scsiglue --- queuecommand\n"); */ - - /* check for state-transition errors */ - if (us->srb != NULL) { - /* pr_info("Error in %s: us->srb = %p\n" - __func__, us->srb); */ - return SCSI_MLQUEUE_HOST_BUSY; - } - - /* fail the command if we are disconnecting */ - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { - pr_info("Fail command during disconnect\n"); - srb->result = DID_NO_CONNECT << 16; - done(srb); - return 0; - } - - /* enqueue the command and wake up the control thread */ - srb->scsi_done = done; - us->srb = srb; - complete(&us->cmnd_ready); - - return 0; -} - -static DEF_SCSI_QCMD(queuecommand) - -/*********************************************************************** - * Error handling functions - ***********************************************************************/ - -/* Command timeout and abort */ -/* - * command_abort() - */ -static int command_abort(struct scsi_cmnd *srb) -{ - struct us_data *us = host_to_us(srb->device->host); - - /* pr_info("scsiglue --- command_abort\n"); */ - - scsi_lock(us_to_host(us)); - if (us->srb != srb) { - scsi_unlock(us_to_host(us)); - dev_info(&us->pusb_dev->dev, "-- nothing to abort\n"); - return FAILED; - } - - set_bit(US_FLIDX_TIMED_OUT, &us->dflags); - if (!test_bit(US_FLIDX_RESETTING, &us->dflags)) { - set_bit(US_FLIDX_ABORTING, &us->dflags); - usb_stor_stop_transport(us); - } - scsi_unlock(us_to_host(us)); - - /* Wait for the aborted command to finish */ - wait_for_completion(&us->notify); - return SUCCESS; -} - -/* This invokes the transport reset mechanism to reset the state of the - * device. - */ -/* - * device_reset() - */ -static int device_reset(struct scsi_cmnd *srb) -{ - struct us_data *us = host_to_us(srb->device->host); - int result; - - /* pr_info("scsiglue --- device_reset\n"); */ - - /* lock the device pointers and do the reset */ - mutex_lock(&(us->dev_mutex)); - result = us->transport_reset(us); - mutex_unlock(&us->dev_mutex); - - return result < 0 ? FAILED : SUCCESS; -} - -/* - * bus_reset() - */ -static int bus_reset(struct scsi_cmnd *srb) -{ - struct us_data *us = host_to_us(srb->device->host); - int result; - - /* pr_info("scsiglue --- bus_reset\n"); */ - result = usb_stor_port_reset(us); - return result < 0 ? FAILED : SUCCESS; -} - -/* - * usb_stor_report_device_reset() - */ -void usb_stor_report_device_reset(struct us_data *us) -{ - int i; - struct Scsi_Host *host = us_to_host(us); - - /* pr_info("scsiglue --- usb_stor_report_device_reset\n"); */ - scsi_report_device_reset(host, 0, 0); - if (us->fflags & US_FL_SCM_MULT_TARG) { - for (i = 1; i < host->max_id; ++i) - scsi_report_device_reset(host, 0, i); - } -} - -/* - * usb_stor_report_bus_reset() - */ -void usb_stor_report_bus_reset(struct us_data *us) -{ - struct Scsi_Host *host = us_to_host(us); - - /* pr_info("scsiglue --- usb_stor_report_bus_reset\n"); */ - scsi_lock(host); - scsi_report_bus_reset(host, 0); - scsi_unlock(host); -} - -/*********************************************************************** - * /proc/scsi/ functions - ***********************************************************************/ - -/* we use this macro to help us write into the buffer */ -#undef SPRINTF -#define SPRINTF(args...) seq_printf(m, ##args) - -static int write_info(struct Scsi_Host *host, char *buffer, int length) -{ - return length; -} - -static int show_info(struct seq_file *m, struct Scsi_Host *host) -{ - struct us_data *us = host_to_us(host); - const char *string; - - /* print the controller name */ - SPRINTF(" Host scsi%d: usb-storage\n", host->host_no); - - /* print product, vendor, and serial number strings */ - if (us->pusb_dev->manufacturer) - string = us->pusb_dev->manufacturer; - else if (us->unusual_dev->vendorName) - string = us->unusual_dev->vendorName; - else - string = "Unknown"; - SPRINTF(" Vendor: %s\n", string); - if (us->pusb_dev->product) - string = us->pusb_dev->product; - else if (us->unusual_dev->productName) - string = us->unusual_dev->productName; - else - string = "Unknown"; - SPRINTF(" Product: %s\n", string); - if (us->pusb_dev->serial) - string = us->pusb_dev->serial; - else - string = "None"; - SPRINTF("Serial Number: %s\n", string); - - /* show the protocol and transport */ - SPRINTF(" Protocol: %s\n", us->protocol_name); - SPRINTF(" Transport: %s\n", us->transport_name); - - /* show the device flags */ - SPRINTF(" Quirks:"); - -#define US_FLAG(name, value) \ - do { \ - if (us->fflags & value) \ - SPRINTF(" " #name); \ - } while (0); -US_DO_ALL_FLAGS -#undef US_FLAG - seq_putc(m, '\n'); - return 0; -} - -/*********************************************************************** - * Sysfs interface - ***********************************************************************/ - -/* Output routine for the sysfs max_sectors file */ -static ssize_t max_sectors_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct scsi_device *sdev = to_scsi_device(dev); - - /* pr_info("scsiglue --- ssize_t show_max_sectors\n"); */ - return sprintf(buf, "%u\n", queue_max_sectors(sdev->request_queue)); -} - -/* Input routine for the sysfs max_sectors file */ -static ssize_t max_sectors_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct scsi_device *sdev = to_scsi_device(dev); - unsigned short ms; - - /* pr_info("scsiglue --- ssize_t store_max_sectors\n"); */ - if (sscanf(buf, "%hu", &ms) > 0 && ms <= SCSI_DEFAULT_MAX_SECTORS) { - blk_queue_max_hw_sectors(sdev->request_queue, ms); - return strlen(buf); - } - return -EINVAL; -} -static DEVICE_ATTR_RW(max_sectors); - -static struct device_attribute *sysfs_device_attr_list[] = { - &dev_attr_max_sectors, NULL, -}; - -/* this defines our host template, with which we'll allocate hosts */ - -/* - * usb_stor_host_template() - */ -struct scsi_host_template usb_stor_host_template = { - /* basic userland interface stuff */ - .name = "eucr-storage", - .proc_name = "eucr-storage", - .write_info = write_info, - .show_info = show_info, - .info = host_info, - - /* command interface -- queued only */ - .queuecommand = queuecommand, - - /* error and abort handlers */ - .eh_abort_handler = command_abort, - .eh_device_reset_handler = device_reset, - .eh_bus_reset_handler = bus_reset, - - /* queue commands only, only one command per LUN */ - .can_queue = 1, - .cmd_per_lun = 1, - - /* unknown initiator id */ - .this_id = -1, - - .slave_alloc = slave_alloc, - .slave_configure = slave_configure, - - /* lots of sg segments can be handled */ - .sg_tablesize = SG_ALL, - - /* limit the total size of a transfer to 120 KB */ - .max_sectors = 240, - - /* merge commands... this seems to help performance, but - * periodically someone should test to see which setting is more - * optimal. - */ - .use_clustering = 1, - - /* emulated HBA */ - .emulated = 1, - - /* we do our own delay after a device or bus reset */ - .skip_settle_delay = 1, - - /* sysfs device attributes */ - .sdev_attrs = sysfs_device_attr_list, - - /* module management */ - .module = THIS_MODULE -}; - -/* To Report "Illegal Request: Invalid Field in CDB */ -unsigned char usb_stor_sense_invalidCDB[18] = { - [0] = 0x70, /* current error */ - [2] = ILLEGAL_REQUEST, /* Illegal Request = 0x05 */ - [7] = 0x0a, /* additional length */ - [12] = 0x24 /* Invalid Field in CDB */ -}; - -/*********************************************************************** - * Scatter-gather transfer buffer access routines - ***********************************************************************/ - -/* - * usb_stor_access_xfer_buf() - */ -unsigned int usb_stor_access_xfer_buf(struct us_data *us, - unsigned char *buffer, unsigned int buflen, - struct scsi_cmnd *srb, struct scatterlist **sgptr, - unsigned int *offset, enum xfer_buf_dir dir) -{ - unsigned int cnt; - - /* pr_info("transport --- usb_stor_access_xfer_buf\n"); */ - struct scatterlist *sg = *sgptr; - - if (!sg) - sg = scsi_sglist(srb); - - cnt = 0; - while (cnt < buflen && sg) { - struct page *page = sg_page(sg) + - ((sg->offset + *offset) >> PAGE_SHIFT); - unsigned int poff = (sg->offset + *offset) & (PAGE_SIZE-1); - unsigned int sglen = sg->length - *offset; - - if (sglen > buflen - cnt) { - /* Transfer ends within this s-g entry */ - sglen = buflen - cnt; - *offset += sglen; - } else { - /* Transfer continues to next s-g entry */ - *offset = 0; - sg = sg_next(sg); - } - - while (sglen > 0) { - unsigned int plen = min(sglen, - (unsigned int)PAGE_SIZE - poff); - unsigned char *ptr = kmap(page); - - if (dir == TO_XFER_BUF) - memcpy(ptr + poff, buffer + cnt, plen); - else - memcpy(buffer + cnt, ptr + poff, plen); - kunmap(page); - - /* Start at the beginning of the next page */ - poff = 0; - ++page; - cnt += plen; - sglen -= plen; - } - } - *sgptr = sg; - - /* Return the amount actually transferred */ - return cnt; -} - -/* - * Store the contents of buffer into srb's transfer - * buffer and set the SCSI residue. - */ -/* - * usb_stor_set_xfer_buf() - */ -void usb_stor_set_xfer_buf(struct us_data *us, unsigned char *buffer, - unsigned int buflen, struct scsi_cmnd *srb, unsigned int dir) -{ - unsigned int offset = 0; - struct scatterlist *sg = NULL; - - /* pr_info("transport --- usb_stor_set_xfer_buf\n"); */ - /* TO_XFER_BUF = 0, FROM_XFER_BUF = 1 */ - buflen = min(buflen, scsi_bufflen(srb)); - buflen = usb_stor_access_xfer_buf(us, buffer, buflen, srb, - &sg, &offset, dir); - if (buflen < scsi_bufflen(srb)) - scsi_set_resid(srb, scsi_bufflen(srb) - buflen); -} diff --git a/drivers/staging/keucr/scsiglue.h b/drivers/staging/keucr/scsiglue.h deleted file mode 100644 index c7e59f0f9cd6..000000000000 --- a/drivers/staging/keucr/scsiglue.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _SCSIGLUE_H_ -#define _SCSIGLUE_H_ - -extern void usb_stor_report_device_reset(struct us_data *us); -extern void usb_stor_report_bus_reset(struct us_data *us); - -extern unsigned char usb_stor_sense_invalidCDB[18]; -extern struct scsi_host_template usb_stor_host_template; - -#endif diff --git a/drivers/staging/keucr/smcommon.h b/drivers/staging/keucr/smcommon.h deleted file mode 100644 index 1d2752a1d5c4..000000000000 --- a/drivers/staging/keucr/smcommon.h +++ /dev/null @@ -1,29 +0,0 @@ -/*----- < SMCommon.h> --------------------------------------------------*/ -#ifndef SMCOMMON_INCD -#define SMCOMMON_INCD - - -/*************************************************************************** -Define Definition -***************************************************************************/ -#define SMSUCCESS 0x0000 /* SUCCESS */ -#define ERROR 0xFFFF /* ERROR */ -#define CORRECT 0x0001 /* CORRECTABLE */ - -/***************************************************************************/ -#define NO_ERROR 0x0000 /* NO ERROR */ -#define ERR_WriteFault 0x0003 /* Peripheral Device Write Fault */ -#define ERR_HwError 0x0004 /* Hardware Error */ -#define ERR_DataStatus 0x0010 /* DataStatus Error */ -#define ERR_EccReadErr 0x0011 /* Unrecovered Read Error */ -#define ERR_CorReadErr 0x0018 /* Recovered Read Data with ECC */ -#define ERR_OutOfLBA 0x0021 /* Illegal Logical Block Address */ -#define ERR_WrtProtect 0x0027 /* Write Protected */ -#define ERR_ChangedMedia 0x0028 /* Medium Changed */ -#define ERR_UnknownMedia 0x0030 /* Incompatible Medium Installed */ -#define ERR_IllegalFmt 0x0031 /* Medium Format Corrupted */ -#define ERR_NoSmartMedia 0x003A /* Medium Not Present */ - -/***************************************************************************/ - -#endif diff --git a/drivers/staging/keucr/smil.h b/drivers/staging/keucr/smil.h deleted file mode 100644 index f938759337e6..000000000000 --- a/drivers/staging/keucr/smil.h +++ /dev/null @@ -1,288 +0,0 @@ -/*----- < smil.h> ----------------------------------------------------*/ -#ifndef SMIL_INCD -#define SMIL_INCD - -/*************************************************************************** -Define Definition -***************************************************************************/ -#define K_BYTE 1024 /* Kilo Byte */ -#define SECTSIZE 512 /* Sector buffer size */ -#define REDTSIZE 16 /* Redundant buffer size */ - -/***************************************************************************/ -#define DUMMY_DATA 0xFF /* No Assign Sector Read Data */ - -/*************************************************************************** -Max Zone/Block/Sectors Data Definition -***************************************************************************/ -#define MAX_ZONENUM 128 /* Max Zone Numbers in a SmartMedia */ -#define MAX_BLOCKNUM 0x0400 /* Max Block Numbers in a Zone */ -#define MAX_SECTNUM 0x20 /* Max Sector Numbers in a Block */ -#define MAX_LOGBLOCK 1000 /* Max Logical Block Numbers in a Zone */ - -/***************************************************************************/ -#define CIS_SEARCH_SECT 0x08 /* Max CIS Search Sector Number */ - -/*************************************************************************** -Logical to Physical Block Table Data Definition -***************************************************************************/ -#define NO_ASSIGN 0xFFFF /* No Assign Logical Block Address */ - -/*************************************************************************** -'SectCopyMode' Data -***************************************************************************/ -#define COMPLETED 0 /* Sector Copy Completed */ -#define REQ_ERASE 1 /* Request Read Block Erase */ -#define REQ_FAIL 2 /* Request Read Block Failed */ - -/*************************************************************************** -Retry Counter Definition -***************************************************************************/ -#define RDERR_REASSIGN 1 /* Reassign with Read Error */ -#define L2P_ERR_ERASE 1 /* BlockErase for Contradicted L2P Table */ - -/*************************************************************************** -Hardware ECC Definition -***************************************************************************/ -#define HW_ECC_SUPPORTED 1 /* Hardware ECC Supported */ -/* No definition for Software ECC */ - -/*************************************************************************** -SmartMedia Command & Status Definition -***************************************************************************/ -/* SmartMedia Command */ -#define WRDATA 0x80 -/* #define READ 0x00 */ -#define READ_REDT 0x50 -/* #define WRITE 0x10 */ -#define RDSTATUS 0x70 - -#define READ1 0x00 /* NO */ -#define READ2 0x01 /* NO */ -#define READ3 0x50 /* NO */ -#define RST_CHIP 0xFF -#define ERASE1 0x60 -#define ERASE2 0xD0 -#define READ_ID_1 0x90 -#define READ_ID_2 0x91 -#define READ_ID_3 0x9A - -/* 712 SmartMedia Command */ -#define SM_CMD_RESET 0x00 /* 0xFF */ -#define SM_CMD_READ_ID_1 0x10 /* 0x90 */ -#define SM_CMD_READ_ID_2 0x20 /* 0x91 */ -#define SM_CMD_READ_STAT 0x30 /* 0x70 */ -#define SM_CMD_RDMULTPL_STAT 0x40 /* 0x71 */ -#define SM_CMD_READ_1 0x50 /* 0x00 */ -#define SM_CMD_READ_2 0x60 /* 0x01 */ -#define SM_CMD_READ_3 0x70 /* 0x50 */ -#define SM_CMD_PAGPRGM_TRUE 0x80 /* {0x80, 0x10} */ -#define SM_CMD_PAGPRGM_DUMY 0x90 /* {0x80, 0x11} */ -#define SM_CMD_PAGPRGM_MBLK 0xA0 /* {0x80, 0x15} */ -#define SM_CMD_BLKERASE 0xB0 /* {0x60, 0xD0} */ -#define SM_CMD_BLKERASE_MULTPL 0xC0 /* {0x60-0x60, 0xD0} */ - -#define SM_CRADDTCT_DEBNCETIMER_EN 0x02 -#define SM_CMD_START_BIT 0x01 - -#define SM_WaitCmdDone { while (!SM_CmdDone); } -#define SM_WaitDmaDone { while (!SM_DmaDone); } - -/* SmartMedia Status */ -#define WR_FAIL 0x01 /* 0:Pass, 1:Fail */ -#define SUSPENDED 0x20 /* 0:Not Suspended, 1:Suspended */ -#define READY 0x40 /* 0:Busy, 1:Ready */ -#define WR_PRTCT 0x80 /* 0:Protect, 1:Not Protect */ - -/* SmartMedia Busy Time (1bit:0.1ms) */ -#define BUSY_PROG 200 /* tPROG : 20ms ----- Program Time old : 200 */ -#define BUSY_ERASE 4000 /* tBERASE : 400ms ----- Block Erase Time old : 4000 */ - -/*for 712 Test */ -/* #define BUSY_READ 1 *//* tR : 100us ----- Data transfer Time old : 1 */ -/* #define BUSY_READ 10 *//* tR : 100us ----- Data transfer Time old : 1 */ - -#define BUSY_READ 200 /* tR : 20ms ----- Data transfer Time old : 1 */ - -/* #define BUSY_RESET 60 *//* tRST : 6ms ----- Device Resetting Time old : 60 */ - -#define BUSY_RESET 600 /* tRST : 60ms ----- Device Resetting Time old : 60 */ - -/* Hardware Timer (1bit:0.1ms) */ -#define TIME_PON 3000 /* 300ms ------ Power On Wait Time */ -#define TIME_CDCHK 200 /* 20ms ------ Card Check Interval Timer */ -#define TIME_WPCHK 50 /* 5ms ------ WP Check Interval Timer */ -#define TIME_5VCHK 10 /* 1ms ------ 5V Check Interval Timer */ - -/*************************************************************************** -Redundant Data -***************************************************************************/ -#define REDT_DATA 0x04 -#define REDT_BLOCK 0x05 -#define REDT_ADDR1H 0x06 -#define REDT_ADDR1L 0x07 -#define REDT_ADDR2H 0x0B -#define REDT_ADDR2L 0x0C -#define REDT_ECC10 0x0D -#define REDT_ECC11 0x0E -#define REDT_ECC12 0x0F -#define REDT_ECC20 0x08 -#define REDT_ECC21 0x09 -#define REDT_ECC22 0x0A - -/*************************************************************************** -SmartMedia Model & Attribute -***************************************************************************/ -/* SmartMedia Attribute */ -#define NOWP 0x00 /* 0... .... No Write Protect */ -#define WP 0x80 /* 1... .... Write Protected */ -#define MASK 0x00 /* .00. .... NAND MASK ROM Model */ -#define FLASH 0x20 /* .01. .... NAND Flash ROM Model */ -#define AD3CYC 0x00 /* ...0 .... Address 3-cycle */ -#define AD4CYC 0x10 /* ...1 .... Address 4-cycle */ -#define BS16 0x00 /* .... 00.. 16page/block */ -#define BS32 0x04 /* .... 01.. 32page/block */ -#define PS256 0x00 /* .... ..00 256byte/page */ -#define PS512 0x01 /* .... ..01 512byte/page */ -#define MWP 0x80 /* WriteProtect mask */ -#define MFLASH 0x60 /* Flash Rom mask */ -#define MADC 0x10 /* Address Cycle */ -#define MBS 0x0C /* BlockSize mask */ -#define MPS 0x03 /* PageSize mask */ - -/* SmartMedia Model */ -#define NOSSFDC 0x00 /* NO SmartMedia */ -#define SSFDC1MB 0x01 /* 1MB SmartMedia */ -#define SSFDC2MB 0x02 /* 2MB SmartMedia */ -#define SSFDC4MB 0x03 /* 4MB SmartMedia */ -#define SSFDC8MB 0x04 /* 8MB SmartMedia */ -#define SSFDC16MB 0x05 /* 16MB SmartMedia */ -#define SSFDC32MB 0x06 /* 32MB SmartMedia */ -#define SSFDC64MB 0x07 /* 64MB SmartMedia */ -#define SSFDC128MB 0x08 /*128MB SmartMedia */ -#define SSFDC256MB 0x09 -#define SSFDC512MB 0x0A -#define SSFDC1GB 0x0B -#define SSFDC2GB 0x0C - -/*************************************************************************** -Struct Definition -***************************************************************************/ -struct keucr_media_info { - u8 Model; - u8 Attribute; - u8 MaxZones; - u8 MaxSectors; - u16 MaxBlocks; - u16 MaxLogBlocks; -}; - -struct keucr_media_address { - u8 Zone; /* Zone Number */ - u8 Sector; /* Sector(512byte) Number on Block */ - u16 PhyBlock; /* Physical Block Number on Zone */ - u16 LogBlock; /* Logical Block Number of Zone */ -}; - -struct keucr_media_area { - u8 Sector; /* Sector(512byte) Number on Block */ - u16 PhyBlock; /* Physical Block Number on Zone 0 */ -}; - -extern u16 ReadBlock; -extern u16 WriteBlock; -extern u32 MediaChange; - -extern struct keucr_media_info Ssfdc; -extern struct keucr_media_address Media; -extern struct keucr_media_area CisArea; - -/* - * SMILMain.c - */ -/******************************************/ -int Init_D_SmartMedia(void); -int Pwoff_D_SmartMedia(void); -int Check_D_SmartMedia(void); -int Check_D_MediaFmt(struct us_data *); -int Check_D_Parameter(struct us_data *, u16 *, u8 *, u8 *); -int Media_D_ReadSector(struct us_data *, u32, u16, u8 *); -int Media_D_WriteSector(struct us_data *, u32, u16, u8 *); -int Media_D_CopySector(struct us_data *, u32, u16, u8 *); -int Media_D_EraseBlock(struct us_data *, u32, u16); -int Media_D_EraseAll(struct us_data *); -/******************************************/ -int Media_D_OneSectWriteStart(struct us_data *, u32, u8 *); -int Media_D_OneSectWriteNext(struct us_data *, u8 *); -int Media_D_OneSectWriteFlush(struct us_data *); - -/******************************************/ -extern int SM_FreeMem(void); /* ENE SM function */ -void SM_EnableLED(struct us_data *, bool); -void Led_D_TernOn(void); -void Led_D_TernOff(void); - -int Media_D_EraseAllRedtData(u32 Index, bool CheckBlock); -/*DWORD Media_D_GetMediaInfo(struct us_data * fdoExt, - PIOCTL_MEDIA_INFO_IN pParamIn, PIOCTL_MEDIA_INFO_OUT pParamOut); */ - -/* - * SMILSub.c - */ -/******************************************/ -int Check_D_DataBlank(u8 *); -int Check_D_FailBlock(u8 *); -int Check_D_DataStatus(u8 *); -int Load_D_LogBlockAddr(u8 *); -void Clr_D_RedundantData(u8 *); -void Set_D_LogBlockAddr(u8 *); -void Set_D_FailBlock(u8 *); -void Set_D_DataStaus(u8 *); - -/******************************************/ -void Ssfdc_D_Reset(struct us_data *); -int Ssfdc_D_ReadCisSect(struct us_data *, u8 *, u8 *); -void Ssfdc_D_WriteRedtMode(void); -void Ssfdc_D_ReadID(u8 *, u8); -int Ssfdc_D_ReadSect(struct us_data *, u8 *, u8 *); -int Ssfdc_D_ReadBlock(struct us_data *, u16, u8 *, u8 *); -int Ssfdc_D_WriteSect(struct us_data *, u8 *, u8 *); -int Ssfdc_D_WriteBlock(struct us_data *, u16, u8 *, u8 *); -int Ssfdc_D_CopyBlock(struct us_data *, u16, u8 *, u8 *); -int Ssfdc_D_WriteSectForCopy(struct us_data *, u8 *, u8 *); -int Ssfdc_D_EraseBlock(struct us_data *); -int Ssfdc_D_ReadRedtData(struct us_data *, u8 *); -int Ssfdc_D_WriteRedtData(struct us_data *, u8 *); -int Ssfdc_D_CheckStatus(void); -int Set_D_SsfdcModel(u8); -void Cnt_D_Reset(void); -int Cnt_D_PowerOn(void); -void Cnt_D_PowerOff(void); -void Cnt_D_LedOn(void); -void Cnt_D_LedOff(void); -int Check_D_CntPower(void); -int Check_D_CardExist(void); -int Check_D_CardStsChg(void); -int Check_D_SsfdcWP(void); -int SM_ReadBlock(struct us_data *, u8 *, u8 *); - -int Ssfdc_D_ReadSect_DMA(struct us_data *, u8 *, u8 *); -int Ssfdc_D_ReadSect_PIO(struct us_data *, u8 *, u8 *); -int Ssfdc_D_WriteSect_DMA(struct us_data *, u8 *, u8 *); -int Ssfdc_D_WriteSect_PIO(struct us_data *, u8 *, u8 *); - -/******************************************/ -int Check_D_ReadError(u8 *); -int Check_D_Correct(u8 *, u8 *); -int Check_D_CISdata(u8 *, u8 *); -void Set_D_RightECC(u8 *); - -/* - * SMILECC.c - */ -void calculate_ecc(u8 *, u8 *, u8 *, u8 *, u8 *); -u8 correct_data(u8 *, u8 *, u8, u8, u8); -int _Correct_D_SwECC(u8 *, u8 *, u8 *); -void _Calculate_D_SwECC(u8 *, u8 *); - -#endif /* already included */ diff --git a/drivers/staging/keucr/smilecc.c b/drivers/staging/keucr/smilecc.c deleted file mode 100644 index ffe6030f5e4d..000000000000 --- a/drivers/staging/keucr/smilecc.c +++ /dev/null @@ -1,211 +0,0 @@ -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" -/* #include "stdlib.h" */ -/* #include "EUCR6SK.h" */ -#include "smcommon.h" -#include "smil.h" - -/* #include */ -/* #include */ -/* #include */ -/* #include */ -/* #include "EMCRIOS.h" */ - -/* CP0-CP5 code table */ -static u8 ecctable[256] = { -0x00, 0x55, 0x56, 0x03, 0x59, 0x0C, 0x0F, 0x5A, 0x5A, 0x0F, 0x0C, 0x59, 0x03, -0x56, 0x55, 0x00, 0x65, 0x30, 0x33, 0x66, 0x3C, 0x69, 0x6A, 0x3F, 0x3F, 0x6A, -0x69, 0x3C, 0x66, 0x33, 0x30, 0x65, 0x66, 0x33, 0x30, 0x65, 0x3F, 0x6A, 0x69, -0x3C, 0x3C, 0x69, 0x6A, 0x3F, 0x65, 0x30, 0x33, 0x66, 0x03, 0x56, 0x55, 0x00, -0x5A, 0x0F, 0x0C, 0x59, 0x59, 0x0C, 0x0F, 0x5A, 0x00, 0x55, 0x56, 0x03, 0x69, -0x3C, 0x3F, 0x6A, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6A, 0x3F, -0x3C, 0x69, 0x0C, 0x59, 0x5A, 0x0F, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, -0x55, 0x0F, 0x5A, 0x59, 0x0C, 0x0F, 0x5A, 0x59, 0x0C, 0x56, 0x03, 0x00, 0x55, -0x55, 0x00, 0x03, 0x56, 0x0C, 0x59, 0x5A, 0x0F, 0x6A, 0x3F, 0x3C, 0x69, 0x33, -0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3C, 0x3F, 0x6A, 0x6A, 0x3F, -0x3C, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3C, 0x3F, -0x6A, 0x0F, 0x5A, 0x59, 0x0C, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, -0x0C, 0x59, 0x5A, 0x0F, 0x0C, 0x59, 0x5A, 0x0F, 0x55, 0x00, 0x03, 0x56, 0x56, -0x03, 0x00, 0x55, 0x0F, 0x5A, 0x59, 0x0C, 0x69, 0x3C, 0x3F, 0x6A, 0x30, 0x65, -0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6A, 0x3F, 0x3C, 0x69, 0x03, 0x56, 0x55, -0x00, 0x5A, 0x0F, 0x0C, 0x59, 0x59, 0x0C, 0x0F, 0x5A, 0x00, 0x55, 0x56, 0x03, -0x66, 0x33, 0x30, 0x65, 0x3F, 0x6A, 0x69, 0x3C, 0x3C, 0x69, 0x6A, 0x3F, 0x65, -0x30, 0x33, 0x66, 0x65, 0x30, 0x33, 0x66, 0x3C, 0x69, 0x6A, 0x3F, 0x3F, 0x6A, -0x69, 0x3C, 0x66, 0x33, 0x30, 0x65, 0x00, 0x55, 0x56, 0x03, 0x59, 0x0C, 0x0F, -0x5A, 0x5A, 0x0F, 0x0C, 0x59, 0x03, 0x56, 0x55, 0x00 -}; - -static void trans_result(u8, u8, u8 *, u8 *); - -#define BIT7 0x80 -#define BIT6 0x40 -#define BIT5 0x20 -#define BIT4 0x10 -#define BIT3 0x08 -#define BIT2 0x04 -#define BIT1 0x02 -#define BIT0 0x01 -#define BIT1BIT0 0x03 -#define BIT23 0x00800000L -#define MASK_CPS 0x3f -#define CORRECTABLE 0x00555554L - -/* - * reg2; * LP14,LP12,LP10,... - * reg3; * LP15,LP13,LP11,... - * *ecc1; * LP15,LP14,LP13,... - * *ecc2; * LP07,LP06,LP05,... - */ -static void trans_result(u8 reg2, u8 reg3, u8 *ecc1, u8 *ecc2) -{ - u8 a; /* Working for reg2,reg3 */ - u8 b; /* Working for ecc1,ecc2 */ - u8 i; /* For counting */ - - a = BIT7; b = BIT7; /* 80h=10000000b */ - *ecc1 = *ecc2 = 0; /* Clear ecc1,ecc2 */ - for (i = 0; i < 4; ++i) { - if ((reg3&a) != 0) - *ecc1 |= b; /* LP15,13,11,9 -> ecc1 */ - b = b>>1; /* Right shift */ - if ((reg2&a) != 0) - *ecc1 |= b; /* LP14,12,10,8 -> ecc1 */ - b = b>>1; /* Right shift */ - a = a>>1; /* Right shift */ - } - - b = BIT7; /* 80h=10000000b */ - for (i = 0; i < 4; ++i) { - if ((reg3&a) != 0) - *ecc2 |= b; /* LP7,5,3,1 -> ecc2 */ - b = b>>1; /* Right shift */ - if ((reg2&a) != 0) - *ecc2 |= b; /* LP6,4,2,0 -> ecc2 */ - b = b>>1; /* Right shift */ - a = a>>1; /* Right shift */ - } -} - -/*static void calculate_ecc(table,data,ecc1,ecc2,ecc3) */ -/* - * *table; * CP0-CP5 code table - * *data; * DATA - * *ecc1; * LP15,LP14,LP13,... - * *ecc2; * LP07,LP06,LP05,... - * *ecc3; * CP5,CP4,CP3,...,"1","1" - */ -void calculate_ecc(u8 *table, u8 *data, u8 *ecc1, u8 *ecc2, u8 *ecc3) -{ - u32 i; /* For counting */ - u8 a; /* Working for table */ - u8 reg1; /* D-all,CP5,CP4,CP3,... */ - u8 reg2; /* LP14,LP12,L10,... */ - u8 reg3; /* LP15,LP13,L11,... */ - - reg1 = reg2 = reg3 = 0; /* Clear parameter */ - for (i = 0; i < 256; ++i) { - a = table[data[i]]; /* Get CP0-CP5 code from table */ - reg1 ^= (a&MASK_CPS); /* XOR with a */ - if ((a&BIT6) != 0) { /* If D_all(all bit XOR) = 1 */ - reg3 ^= (u8)i; /* XOR with counter */ - reg2 ^= ~((u8)i); /* XOR with inv. of counter */ - } - } - - /* Trans LP14,12,10,... & LP15,13,11,... -> - LP15,14,13,... & LP7,6,5,.. */ - trans_result(reg2, reg3, ecc1, ecc2); - *ecc1 = ~(*ecc1); *ecc2 = ~(*ecc2); /* Inv. ecc2 & ecc3 */ - *ecc3 = ((~reg1)<<2)|BIT1BIT0; /* Make TEL format */ -} - -/* - * *data; * DATA - * *eccdata; * ECC DATA - * ecc1; * LP15,LP14,LP13,... - * ecc2; * LP07,LP06,LP05,... - * ecc3; * CP5,CP4,CP3,...,"1","1" - */ -u8 correct_data(u8 *data, u8 *eccdata, u8 ecc1, u8 ecc2, u8 ecc3) -{ - u32 l; /* Working to check d */ - u32 d; /* Result of comparison */ - u32 i; /* For counting */ - u8 d1, d2, d3; /* Result of comparison */ - u8 a; /* Working for add */ - u8 add; /* Byte address of cor. DATA */ - u8 b; /* Working for bit */ - u8 bit; /* Bit address of cor. DATA */ - - d1 = ecc1^eccdata[1]; d2 = ecc2^eccdata[0]; /* Compare LP's */ - d3 = ecc3^eccdata[2]; /* Compare CP's */ - d = ((u32)d1<<16) /* Result of comparison */ - +((u32)d2<<8) - +(u32)d3; - - if (d == 0) - return 0; /* If No error, return */ - - if (((d^(d>>1))&CORRECTABLE) == CORRECTABLE) { /* If correctable */ - l = BIT23; - add = 0; /* Clear parameter */ - a = BIT7; - - for (i = 0; i < 8; ++i) { /* Checking 8 bit */ - if ((d&l) != 0) - add |= a; /* Make byte address from LP's */ - l >>= 2; a >>= 1; /* Right Shift */ - } - - bit = 0; /* Clear parameter */ - b = BIT2; - for (i = 0; i < 3; ++i) { /* Checking 3 bit */ - if ((d&l) != 0) - bit |= b; /* Make bit address from CP's */ - l >>= 2; b >>= 1; /* Right shift */ - } - - b = BIT0; - data[add] ^= (b<>= 1; /* Right shift */ - } - - if (i == 1) { /* If ECC error */ - eccdata[1] = ecc1; eccdata[0] = ecc2; /* Put right ECC code */ - eccdata[2] = ecc3; - return 2; - } - return 3; /* Uncorrectable error */ -} - -int _Correct_D_SwECC(u8 *buf, u8 *redundant_ecc, u8 *calculate_ecc) -{ - u32 err; - - err = correct_data(buf, redundant_ecc, *(calculate_ecc + 1), - *(calculate_ecc), *(calculate_ecc + 2)); - if (err == 1) - memcpy(calculate_ecc, redundant_ecc, 3); - - if (err == 0 || err == 1 || err == 2) - return 0; - - return -1; -} - -void _Calculate_D_SwECC(u8 *buf, u8 *ecc) -{ - calculate_ecc(ecctable, buf, ecc+1, ecc+0, ecc+2); -} - - diff --git a/drivers/staging/keucr/smilmain.c b/drivers/staging/keucr/smilmain.c deleted file mode 100644 index 42ec8a669ad3..000000000000 --- a/drivers/staging/keucr/smilmain.c +++ /dev/null @@ -1,760 +0,0 @@ -#include -#include "usb.h" -#include "scsiglue.h" -#include "smcommon.h" -#include "smil.h" - -static int Conv_D_MediaAddr(struct us_data *, u32); -static int Inc_D_MediaAddr(struct us_data *); -static int Media_D_ReadOneSect(struct us_data *, u16, u8 *); - -static int Copy_D_BlockAll(struct us_data *, u32); - -static int Assign_D_WriteBlock(void); -static int Release_D_ReadBlock(struct us_data *); -static int Release_D_WriteBlock(struct us_data *); -static int Release_D_CopySector(struct us_data *); - -static int Copy_D_PhyOneSect(struct us_data *); -static int Read_D_PhyOneSect(struct us_data *, u16, u8 *); -static int Erase_D_PhyOneBlock(struct us_data *); - -static int Set_D_PhyFmtValue(struct us_data *); -static int Search_D_CIS(struct us_data *); -static int Make_D_LogTable(struct us_data *); - -static int MarkFail_D_PhyOneBlock(struct us_data *); - -static u32 ErrCode; -static u8 WorkBuf[SECTSIZE]; -static u8 Redundant[REDTSIZE]; -static u8 WorkRedund[REDTSIZE]; -/* 128 x 1000, Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK]; */ -static u16 *Log2Phy[MAX_ZONENUM]; -static u8 Assign[MAX_ZONENUM][MAX_BLOCKNUM / 8]; -static u16 AssignStart[MAX_ZONENUM]; -u16 ReadBlock; -u16 WriteBlock; -u32 MediaChange; -static u32 SectCopyMode; - -/* BIT Control Macro */ -static u8 BitData[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; -#define Set_D_Bit(a, b) (a[(u8)((b) / 8)] |= BitData[(b) % 8]) -#define Clr_D_Bit(a, b) (a[(u8)((b) / 8)] &= ~BitData[(b) % 8]) -#define Chk_D_Bit(a, b) (a[(u8)((b) / 8)] & BitData[(b) % 8]) - -/* ----- SM_FreeMem() ------------------------------------------------- */ -int SM_FreeMem(void) -{ - int i; - - pr_info("SM_FreeMem start\n"); - for (i = 0; i < MAX_ZONENUM; i++) { - if (Log2Phy[i] != NULL) { - pr_info("Free Zone = %x, Addr = %p\n", i, Log2Phy[i]); - kfree(Log2Phy[i]); - Log2Phy[i] = NULL; - } - } - return NO_ERROR; -} - -/* SmartMedia Read/Write/Erase Function */ -/* ----- Media_D_ReadSector() ------------------------------------------- */ -int Media_D_ReadSector(struct us_data *us, u32 start, u16 count, u8 *buf) -{ - u16 len, bn; - - if (Conv_D_MediaAddr(us, start)) - return ErrCode; - - while (1) { - len = Ssfdc.MaxSectors - Media.Sector; - if (count > len) - bn = len; - else - bn = count; - - if (Media_D_ReadOneSect(us, bn, buf)) { - ErrCode = ERR_EccReadErr; - return ErrCode; - } - - Media.Sector += bn; - count -= bn; - - if (count <= 0) - break; - - buf += bn * SECTSIZE; - - if (Inc_D_MediaAddr(us)) - return ErrCode; - } - - return NO_ERROR; -} -/* here */ -/* ----- Media_D_CopySector() ------------------------------------------ */ -int Media_D_CopySector(struct us_data *us, u32 start, u16 count, u8 *buf) -{ - u16 len, bn; - - /* pr_info("Media_D_CopySector !!!\n"); */ - if (Conv_D_MediaAddr(us, start)) - return ErrCode; - - while (1) { - if (Assign_D_WriteBlock()) - return ERROR; - - len = Ssfdc.MaxSectors - Media.Sector; - if (count > len) - bn = len; - else - bn = count; - - if (Ssfdc_D_CopyBlock(us, bn, buf, Redundant)) { - ErrCode = ERR_WriteFault; - return ErrCode; - } - - Media.Sector = 0x1F; - if (Release_D_CopySector(us)) { - if (ErrCode == ERR_HwError) { - ErrCode = ERR_WriteFault; - return ErrCode; - } - } - count -= bn; - - if (count <= 0) - break; - - buf += bn * SECTSIZE; - - if (Inc_D_MediaAddr(us)) - return ErrCode; - - } - return NO_ERROR; -} - -/* SmartMedia Physical Format Test Subroutine */ -/* ----- Check_D_MediaFmt() --------------------------------------------- */ -int Check_D_MediaFmt(struct us_data *us) -{ - pr_info("Check_D_MediaFmt\n"); - - if (!MediaChange) - return SMSUCCESS; - - MediaChange = ERROR; - SectCopyMode = COMPLETED; - - if (Set_D_PhyFmtValue(us)) { - ErrCode = ERR_UnknownMedia; - return ERROR; - } - - if (Search_D_CIS(us)) { - ErrCode = ERR_IllegalFmt; - return ERROR; - } - - MediaChange = SMSUCCESS; - return SMSUCCESS; -} - -/* ----- Release_D_CopySector() ------------------------------------------ */ -static int Release_D_CopySector(struct us_data *us) -{ - Log2Phy[Media.Zone][Media.LogBlock] = WriteBlock; - Media.PhyBlock = ReadBlock; - - if (Media.PhyBlock == NO_ASSIGN) { - Media.PhyBlock = WriteBlock; - return SMSUCCESS; - } - - Clr_D_Bit(Assign[Media.Zone], Media.PhyBlock); - Media.PhyBlock = WriteBlock; - - return SMSUCCESS; -} - -/* SmartMedia Physical Address Control Subroutine */ -/* ----- Conv_D_MediaAddr() --------------------------------------------- */ -static int Conv_D_MediaAddr(struct us_data *us, u32 addr) -{ - u32 temp; - - temp = addr / Ssfdc.MaxSectors; - Media.Zone = (u8) (temp / Ssfdc.MaxLogBlocks); - - if (Log2Phy[Media.Zone] == NULL) { - if (Make_D_LogTable(us)) { - ErrCode = ERR_IllegalFmt; - return ERROR; - } - } - - Media.Sector = (u8) (addr % Ssfdc.MaxSectors); - Media.LogBlock = (u16) (temp % Ssfdc.MaxLogBlocks); - - if (Media.Zone < Ssfdc.MaxZones) { - Clr_D_RedundantData(Redundant); - Set_D_LogBlockAddr(Redundant); - Media.PhyBlock = Log2Phy[Media.Zone][Media.LogBlock]; - return SMSUCCESS; - } - - ErrCode = ERR_OutOfLBA; - return ERROR; -} - -/* ----- Inc_D_MediaAddr() ---------------------------------------------- */ -static int Inc_D_MediaAddr(struct us_data *us) -{ - u16 LogBlock = Media.LogBlock; - - if (++Media.Sector < Ssfdc.MaxSectors) - return SMSUCCESS; - - if (Log2Phy[Media.Zone] == NULL) { - if (Make_D_LogTable(us)) { - ErrCode = ERR_IllegalFmt; - return ERROR; - } - } - - Media.Sector = 0; - Media.LogBlock = LogBlock; - - if (++Media.LogBlock < Ssfdc.MaxLogBlocks) { - Clr_D_RedundantData(Redundant); - Set_D_LogBlockAddr(Redundant); - Media.PhyBlock = Log2Phy[Media.Zone][Media.LogBlock]; - return SMSUCCESS; - } - - Media.LogBlock = 0; - - if (++Media.Zone < Ssfdc.MaxZones) { - if (Log2Phy[Media.Zone] == NULL) { - if (Make_D_LogTable(us)) { - ErrCode = ERR_IllegalFmt; - return ERROR; - } - } - - Media.LogBlock = 0; - - Clr_D_RedundantData(Redundant); - Set_D_LogBlockAddr(Redundant); - Media.PhyBlock = Log2Phy[Media.Zone][Media.LogBlock]; - return SMSUCCESS; - } - - Media.Zone = 0; - ErrCode = ERR_OutOfLBA; - - return ERROR; -} - -/* SmartMedia Read/Write Subroutine with Retry */ -/* ----- Media_D_ReadOneSect() ------------------------------------------ */ -static int Media_D_ReadOneSect(struct us_data *us, u16 count, u8 *buf) -{ - u32 err, retry; - - if (!Read_D_PhyOneSect(us, count, buf)) - return SMSUCCESS; - if (ErrCode == ERR_HwError) - return ERROR; - if (ErrCode == ERR_DataStatus) - return ERROR; - -#ifdef RDERR_REASSIGN - if (Ssfdc.Attribute & MWP) { - if (ErrCode == ERR_CorReadErr) - return SMSUCCESS; - return ERROR; - } - - err = ErrCode; - for (retry = 0; retry < 2; retry++) { - if (Copy_D_BlockAll(us, - (err == ERR_EccReadErr) ? REQ_FAIL : REQ_ERASE)) { - if (ErrCode == ERR_HwError) - return ERROR; - continue; - } - - ErrCode = err; - if (ErrCode == ERR_CorReadErr) - return SMSUCCESS; - return ERROR; - } - - MediaChange = ERROR; -#else - if (ErrCode == ERR_CorReadErr) - return SMSUCCESS; -#endif - - return ERROR; -} - -/* SmartMedia Physical Sector Data Copy Subroutine */ -/* ----- Copy_D_BlockAll() ---------------------------------------------- */ -static int Copy_D_BlockAll(struct us_data *us, u32 mode) -{ - u8 sect; - - sect = Media.Sector; - - if (Assign_D_WriteBlock()) - return ERROR; - if (mode == REQ_FAIL) - SectCopyMode = REQ_FAIL; - - for (Media.Sector = 0; Media.Sector < Ssfdc.MaxSectors; - Media.Sector++) { - if (Copy_D_PhyOneSect(us)) { - if (ErrCode == ERR_HwError) - return ERROR; - if (Release_D_WriteBlock(us)) - return ERROR; - - ErrCode = ERR_WriteFault; - Media.PhyBlock = ReadBlock; - Media.Sector = sect; - - return ERROR; - } - } - - if (Release_D_ReadBlock(us)) - return ERROR; - - Media.PhyBlock = WriteBlock; - Media.Sector = sect; - return SMSUCCESS; -} - -/* SmartMedia Physical Block Assign/Release Subroutine */ -/* ----- Assign_D_WriteBlock() ------------------------------------------ */ -static int Assign_D_WriteBlock(void) -{ - ReadBlock = Media.PhyBlock; - - for (WriteBlock = AssignStart[Media.Zone]; - WriteBlock < Ssfdc.MaxBlocks; WriteBlock++) { - if (!Chk_D_Bit(Assign[Media.Zone], WriteBlock)) { - Set_D_Bit(Assign[Media.Zone], WriteBlock); - AssignStart[Media.Zone] = WriteBlock + 1; - Media.PhyBlock = WriteBlock; - SectCopyMode = REQ_ERASE; - return SMSUCCESS; - } - } - - for (WriteBlock = 0; - WriteBlock < AssignStart[Media.Zone]; WriteBlock++) { - if (!Chk_D_Bit(Assign[Media.Zone], WriteBlock)) { - Set_D_Bit(Assign[Media.Zone], WriteBlock); - AssignStart[Media.Zone] = WriteBlock + 1; - Media.PhyBlock = WriteBlock; - SectCopyMode = REQ_ERASE; - return SMSUCCESS; - } - } - - WriteBlock = NO_ASSIGN; - ErrCode = ERR_WriteFault; - - return ERROR; -} - -/* ----- Release_D_ReadBlock() ------------------------------------------ */ -static int Release_D_ReadBlock(struct us_data *us) -{ - u32 mode; - - mode = SectCopyMode; - SectCopyMode = COMPLETED; - - if (mode == COMPLETED) - return SMSUCCESS; - - Log2Phy[Media.Zone][Media.LogBlock] = WriteBlock; - Media.PhyBlock = ReadBlock; - - if (Media.PhyBlock == NO_ASSIGN) { - Media.PhyBlock = WriteBlock; - return SMSUCCESS; - } - - if (mode == REQ_ERASE) { - if (Erase_D_PhyOneBlock(us)) { - if (ErrCode == ERR_HwError) - return ERROR; - if (MarkFail_D_PhyOneBlock(us)) - return ERROR; - } else - Clr_D_Bit(Assign[Media.Zone], Media.PhyBlock); - } else if (MarkFail_D_PhyOneBlock(us)) - return ERROR; - - Media.PhyBlock = WriteBlock; - return SMSUCCESS; -} - -/* ----- Release_D_WriteBlock() ----------------------------------------- */ -static int Release_D_WriteBlock(struct us_data *us) -{ - SectCopyMode = COMPLETED; - Media.PhyBlock = WriteBlock; - - if (MarkFail_D_PhyOneBlock(us)) - return ERROR; - - Media.PhyBlock = ReadBlock; - return SMSUCCESS; -} - -/* SmartMedia Physical Sector Data Copy Subroutine */ -/* ----- Copy_D_PhyOneSect() -------------------------------------------- */ -static int Copy_D_PhyOneSect(struct us_data *us) -{ - int i; - u32 err, retry; - - /* pr_info("Copy_D_PhyOneSect --- Sector = %x\n", Media.Sector); */ - if (ReadBlock != NO_ASSIGN) { - Media.PhyBlock = ReadBlock; - for (retry = 0; retry < 2; retry++) { - if (retry != 0) { - Ssfdc_D_Reset(us); - if (Ssfdc_D_ReadCisSect(us, WorkBuf, - WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - - if (Check_D_CISdata(WorkBuf, WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - } - - if (Ssfdc_D_ReadSect(us, WorkBuf, WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - if (Check_D_DataStatus(WorkRedund)) { - err = ERROR; - break; - } - if (!Check_D_ReadError(WorkRedund)) { - err = SMSUCCESS; - break; - } - if (!Check_D_Correct(WorkBuf, WorkRedund)) { - err = SMSUCCESS; - break; - } - - err = ERROR; - SectCopyMode = REQ_FAIL; - } - } else { - err = SMSUCCESS; - for (i = 0; i < SECTSIZE; i++) - WorkBuf[i] = DUMMY_DATA; - Clr_D_RedundantData(WorkRedund); - } - - Set_D_LogBlockAddr(WorkRedund); - if (err == ERROR) { - Set_D_RightECC(WorkRedund); - Set_D_DataStaus(WorkRedund); - } - - Media.PhyBlock = WriteBlock; - - if (Ssfdc_D_WriteSectForCopy(us, WorkBuf, WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - if (Ssfdc_D_CheckStatus()) { - ErrCode = ERR_WriteFault; - return ERROR; - } - - Media.PhyBlock = ReadBlock; - return SMSUCCESS; -} - -/* SmartMedia Physical Sector Read/Write/Erase Subroutine */ -/* ----- Read_D_PhyOneSect() -------------------------------------------- */ -static int Read_D_PhyOneSect(struct us_data *us, u16 count, u8 *buf) -{ - int i; - u32 retry; - - if (Media.PhyBlock == NO_ASSIGN) { - for (i = 0; i < SECTSIZE; i++) - *buf++ = DUMMY_DATA; - return SMSUCCESS; - } - - for (retry = 0; retry < 2; retry++) { - if (retry != 0) { - Ssfdc_D_Reset(us); - - if (Ssfdc_D_ReadCisSect(us, WorkBuf, WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - if (Check_D_CISdata(WorkBuf, WorkRedund)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - } - - if (Ssfdc_D_ReadBlock(us, count, buf, Redundant)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - if (Check_D_DataStatus(Redundant)) { - ErrCode = ERR_DataStatus; - return ERROR; - } - - if (!Check_D_ReadError(Redundant)) - return SMSUCCESS; - - if (!Check_D_Correct(buf, Redundant)) { - ErrCode = ERR_CorReadErr; - return ERROR; - } - } - - ErrCode = ERR_EccReadErr; - return ERROR; -} - -/* ----- Erase_D_PhyOneBlock() ------------------------------------------ */ -static int Erase_D_PhyOneBlock(struct us_data *us) -{ - if (Ssfdc_D_EraseBlock(us)) { - ErrCode = ERR_HwError; - MediaChange = ERROR; - return ERROR; - } - if (Ssfdc_D_CheckStatus()) { - ErrCode = ERR_WriteFault; - return ERROR; - } - - return SMSUCCESS; -} - -/* SmartMedia Physical Format Check Local Subroutine */ -/* ----- Set_D_PhyFmtValue() -------------------------------------------- */ -static int Set_D_PhyFmtValue(struct us_data *us) -{ - if (Set_D_SsfdcModel(us->SM_DeviceID)) - return ERROR; - - return SMSUCCESS; -} - -/* ----- Search_D_CIS() ------------------------------------------------- */ -static int Search_D_CIS(struct us_data *us) -{ - Media.Zone = 0; - Media.Sector = 0; - - for (Media.PhyBlock = 0; - Media.PhyBlock < (Ssfdc.MaxBlocks - Ssfdc.MaxLogBlocks - 1); - Media.PhyBlock++) { - if (Ssfdc_D_ReadRedtData(us, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - if (!Check_D_FailBlock(Redundant)) - break; - } - - if (Media.PhyBlock == (Ssfdc.MaxBlocks - Ssfdc.MaxLogBlocks - 1)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - while (Media.Sector < CIS_SEARCH_SECT) { - if (Media.Sector) { - if (Ssfdc_D_ReadRedtData(us, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - } - if (!Check_D_DataStatus(Redundant)) { - if (Ssfdc_D_ReadSect(us, WorkBuf, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - if (Check_D_CISdata(WorkBuf, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - CisArea.PhyBlock = Media.PhyBlock; - CisArea.Sector = Media.Sector; - Ssfdc_D_Reset(us); - return SMSUCCESS; - } - - Media.Sector++; - } - - Ssfdc_D_Reset(us); - return ERROR; -} - -/* ----- Make_D_LogTable() ---------------------------------------------- */ -static int Make_D_LogTable(struct us_data *us) -{ - u16 phyblock, logblock; - - if (Log2Phy[Media.Zone] == NULL) { - Log2Phy[Media.Zone] = kmalloc(MAX_LOGBLOCK * sizeof(u16), - GFP_KERNEL); - /* pr_info("ExAllocatePool Zone = %x, Addr = %x\n", - Media.Zone, Log2Phy[Media.Zone]); */ - if (Log2Phy[Media.Zone] == NULL) - return ERROR; - } - - Media.Sector = 0; - - /* pr_info("Make_D_LogTable --- MediaZone = 0x%x\n", - Media.Zone); */ - for (Media.LogBlock = 0; Media.LogBlock < Ssfdc.MaxLogBlocks; - Media.LogBlock++) - Log2Phy[Media.Zone][Media.LogBlock] = NO_ASSIGN; - - for (Media.PhyBlock = 0; Media.PhyBlock < (MAX_BLOCKNUM / 8); - Media.PhyBlock++) - Assign[Media.Zone][Media.PhyBlock] = 0x00; - - for (Media.PhyBlock = 0; Media.PhyBlock < Ssfdc.MaxBlocks; - Media.PhyBlock++) { - if ((!Media.Zone) && (Media.PhyBlock <= CisArea.PhyBlock)) { - Set_D_Bit(Assign[Media.Zone], Media.PhyBlock); - continue; - } - - if (Ssfdc_D_ReadRedtData(us, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - if (!Check_D_DataBlank(Redundant)) - continue; - - Set_D_Bit(Assign[Media.Zone], Media.PhyBlock); - - if (Check_D_FailBlock(Redundant)) - continue; - - if (Load_D_LogBlockAddr(Redundant)) - continue; - - if (Media.LogBlock >= Ssfdc.MaxLogBlocks) - continue; - - if (Log2Phy[Media.Zone][Media.LogBlock] == NO_ASSIGN) { - Log2Phy[Media.Zone][Media.LogBlock] = Media.PhyBlock; - continue; - } - - phyblock = Media.PhyBlock; - logblock = Media.LogBlock; - Media.Sector = (u8)(Ssfdc.MaxSectors - 1); - - if (Ssfdc_D_ReadRedtData(us, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - if (!Load_D_LogBlockAddr(Redundant) && - (Media.LogBlock == logblock)) { - Media.PhyBlock = Log2Phy[Media.Zone][logblock]; - - if (Ssfdc_D_ReadRedtData(us, Redundant)) { - Ssfdc_D_Reset(us); - return ERROR; - } - - Media.PhyBlock = phyblock; - - if (!Load_D_LogBlockAddr(Redundant)) { - if (Media.LogBlock != logblock) { - Media.PhyBlock = - Log2Phy[Media.Zone][logblock]; - Log2Phy[Media.Zone][logblock] = - phyblock; - } - } else { - Media.PhyBlock = Log2Phy[Media.Zone][logblock]; - Log2Phy[Media.Zone][logblock] = phyblock; - } - } - - Media.Sector = 0; - Media.PhyBlock = phyblock; - - AssignStart[Media.Zone] = 0; - - } /* End for (Media.Zone -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" - -#include "smcommon.h" -#include "smil.h" - -static u8 _Check_D_DevCode(u8); -static u32 ErrXDCode; -static u8 IsSSFDCCompliance; -static u8 IsXDCompliance; - -struct keucr_media_info Ssfdc; -struct keucr_media_address Media; -struct keucr_media_area CisArea; - -static u8 EccBuf[6]; - -#define EVEN 0 /* Even Page for 256byte/page */ -#define ODD 1 /* Odd Page for 256byte/page */ - - -/* SmartMedia Redundant buffer data Control Subroutine - *----- Check_D_DataBlank() -------------------------------------------- - */ -int Check_D_DataBlank(u8 *redundant) -{ - char i; - - for (i = 0; i < REDTSIZE; i++) - if (*redundant++ != 0xFF) - return ERROR; - - return SMSUCCESS; -} - -/* ----- Check_D_FailBlock() -------------------------------------------- */ -int Check_D_FailBlock(u8 *redundant) -{ - redundant += REDT_BLOCK; - - if (*redundant == 0xFF) - return SMSUCCESS; - if (!*redundant) - return ERROR; - if (hweight8(*redundant) < 7) - return ERROR; - - return SMSUCCESS; -} - -/* ----- Check_D_DataStatus() ------------------------------------------- */ -int Check_D_DataStatus(u8 *redundant) -{ - redundant += REDT_DATA; - - if (*redundant == 0xFF) - return SMSUCCESS; - if (!*redundant) { - ErrXDCode = ERR_DataStatus; - return ERROR; - } else - ErrXDCode = NO_ERROR; - - if (hweight8(*redundant) < 5) - return ERROR; - - return SMSUCCESS; -} - -/* ----- Load_D_LogBlockAddr() ------------------------------------------ */ -int Load_D_LogBlockAddr(u8 *redundant) -{ - u16 addr1, addr2; - - addr1 = (u16)*(redundant + REDT_ADDR1H)*0x0100 + - (u16)*(redundant + REDT_ADDR1L); - addr2 = (u16)*(redundant + REDT_ADDR2H)*0x0100 + - (u16)*(redundant + REDT_ADDR2L); - - if (addr1 == addr2) - if ((addr1 & 0xF000) == 0x1000) { - Media.LogBlock = (addr1 & 0x0FFF) / 2; - return SMSUCCESS; - } - - if (hweight16((u16)(addr1^addr2)) != 0x01) - return ERROR; - - if ((addr1 & 0xF000) == 0x1000) - if (!(hweight16(addr1) & 0x01)) { - Media.LogBlock = (addr1 & 0x0FFF) / 2; - return SMSUCCESS; - } - - if ((addr2 & 0xF000) == 0x1000) - if (!(hweight16(addr2) & 0x01)) { - Media.LogBlock = (addr2 & 0x0FFF) / 2; - return SMSUCCESS; - } - - return ERROR; -} - -/* ----- Clr_D_RedundantData() ------------------------------------------ */ -void Clr_D_RedundantData(u8 *redundant) -{ - char i; - - for (i = 0; i < REDTSIZE; i++) - *(redundant + i) = 0xFF; -} - -/* ----- Set_D_LogBlockAddr() ------------------------------------------- */ -void Set_D_LogBlockAddr(u8 *redundant) -{ - u16 addr; - - *(redundant + REDT_BLOCK) = 0xFF; - *(redundant + REDT_DATA) = 0xFF; - addr = Media.LogBlock*2 + 0x1000; - - if ((hweight16(addr) % 2)) - addr++; - - *(redundant + REDT_ADDR1H) = *(redundant + REDT_ADDR2H) = - (u8)(addr / 0x0100); - *(redundant + REDT_ADDR1L) = *(redundant + REDT_ADDR2L) = (u8)addr; -} - -/*----- Set_D_FailBlock() ---------------------------------------------- */ -void Set_D_FailBlock(u8 *redundant) -{ - char i; - - for (i = 0; i < REDTSIZE; i++) - *redundant++ = (u8)((i == REDT_BLOCK) ? 0xF0 : 0xFF); -} - -/* ----- Set_D_DataStaus() ---------------------------------------------- */ -void Set_D_DataStaus(u8 *redundant) -{ - redundant += REDT_DATA; - *redundant = 0x00; -} - -/* SmartMedia Function Command Subroutine - * 6250 CMD 6 - */ -/* ----- Ssfdc_D_Reset() ------------------------------------------------ */ -void Ssfdc_D_Reset(struct us_data *us) -{ - return; -} - -/* ----- Ssfdc_D_ReadCisSect() ------------------------------------------ */ -int Ssfdc_D_ReadCisSect(struct us_data *us, u8 *buf, u8 *redundant) -{ - u8 zone, sector; - u16 block; - - zone = Media.Zone; block = Media.PhyBlock; sector = Media.Sector; - Media.Zone = 0; - Media.PhyBlock = CisArea.PhyBlock; - Media.Sector = CisArea.Sector; - - if (Ssfdc_D_ReadSect(us, buf, redundant)) { - Media.Zone = zone; - Media.PhyBlock = block; - Media.Sector = sector; - return ERROR; - } - - Media.Zone = zone; Media.PhyBlock = block; Media.Sector = sector; - return SMSUCCESS; -} - -/* 6250 CMD 1 */ -/* ----- Ssfdc_D_ReadSect() --------------------------------------------- */ -int Ssfdc_D_ReadSect(struct us_data *us, u8 *buf, u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; - - /* Read sect data */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x02; - bcb->CDB[4] = (u8)addr; - bcb->CDB[3] = (u8)(addr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - - result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* Read redundant */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x10; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x03; - bcb->CDB[4] = (u8)addr; - bcb->CDB[3] = (u8)(addr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - bcb->CDB[8] = 0; - bcb->CDB[9] = 1; - - result = ENE_SendScsiCmd(us, FDIR_READ, redundant, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- Ssfdc_D_ReadBlock() --------------------------------------------- */ -int Ssfdc_D_ReadBlock(struct us_data *us, u16 count, u8 *buf, - u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; - - /* Read sect data */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200*count; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x02; - bcb->CDB[4] = (u8)addr; - bcb->CDB[3] = (u8)(addr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - - result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* Read redundant */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x10; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x03; - bcb->CDB[4] = (u8)addr; - bcb->CDB[3] = (u8)(addr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - bcb->CDB[8] = 0; - bcb->CDB[9] = 1; - - result = ENE_SendScsiCmd(us, FDIR_READ, redundant, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - - -/* ----- Ssfdc_D_CopyBlock() -------------------------------------------- */ -int Ssfdc_D_CopyBlock(struct us_data *us, u16 count, u8 *buf, - u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 ReadAddr, WriteAddr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - ReadAddr = (u16)Media.Zone*Ssfdc.MaxBlocks + ReadBlock; - ReadAddr = ReadAddr*(u16)Ssfdc.MaxSectors; - WriteAddr = (u16)Media.Zone*Ssfdc.MaxBlocks + WriteBlock; - WriteAddr = WriteAddr*(u16)Ssfdc.MaxSectors; - - /* Write sect data */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200*count; - bcb->Flags = 0x00; - bcb->CDB[0] = 0xF0; - bcb->CDB[1] = 0x08; - bcb->CDB[7] = (u8)WriteAddr; - bcb->CDB[6] = (u8)(WriteAddr / 0x0100); - bcb->CDB[5] = Media.Zone / 2; - bcb->CDB[8] = *(redundant + REDT_ADDR1H); - bcb->CDB[9] = *(redundant + REDT_ADDR1L); - bcb->CDB[10] = Media.Sector; - - if (ReadBlock != NO_ASSIGN) { - bcb->CDB[4] = (u8)ReadAddr; - bcb->CDB[3] = (u8)(ReadAddr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - } else - bcb->CDB[11] = 1; - - result = ENE_SendScsiCmd(us, FDIR_WRITE, buf, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- Ssfdc_D_WriteSectForCopy() ------------------------------------- */ -int Ssfdc_D_WriteSectForCopy(struct us_data *us, u8 *buf, u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; - - /* Write sect data */ - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200; - bcb->Flags = 0x00; - bcb->CDB[0] = 0xF0; - bcb->CDB[1] = 0x04; - bcb->CDB[7] = (u8)addr; - bcb->CDB[6] = (u8)(addr / 0x0100); - bcb->CDB[5] = Media.Zone / 2; - bcb->CDB[8] = *(redundant + REDT_ADDR1H); - bcb->CDB[9] = *(redundant + REDT_ADDR1L); - - result = ENE_SendScsiCmd(us, FDIR_WRITE, buf, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* 6250 CMD 5 */ -/* ----- Ssfdc_D_EraseBlock() ------------------------------------------- */ -int Ssfdc_D_EraseBlock(struct us_data *us) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors; - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x200; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF2; - bcb->CDB[1] = 0x06; - bcb->CDB[7] = (u8)addr; - bcb->CDB[6] = (u8)(addr / 0x0100); - bcb->CDB[5] = Media.Zone / 2; - - result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* 6250 CMD 2 */ -/*----- Ssfdc_D_ReadRedtData() ----------------------------------------- */ -int Ssfdc_D_ReadRedtData(struct us_data *us, u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - u8 *buf; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x10; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF1; - bcb->CDB[1] = 0x03; - bcb->CDB[4] = (u8)addr; - bcb->CDB[3] = (u8)(addr / 0x0100); - bcb->CDB[2] = Media.Zone / 2; - bcb->CDB[8] = 0; - bcb->CDB[9] = 1; - - buf = kmalloc(0x10, GFP_KERNEL); - result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); - memcpy(redundant, buf, 0x10); - kfree(buf); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* 6250 CMD 4 */ -/* ----- Ssfdc_D_WriteRedtData() ---------------------------------------- */ -int Ssfdc_D_WriteRedtData(struct us_data *us, u8 *redundant) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - int result; - u16 addr; - - result = ENE_LoadBinCode(us, SM_RW_PATTERN); - if (result != USB_STOR_XFER_GOOD) { - dev_err(&us->pusb_dev->dev, - "Failed to load SmartMedia read/write code\n"); - return USB_STOR_TRANSPORT_ERROR; - } - - addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; - - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = 0x10; - bcb->Flags = 0x80; - bcb->CDB[0] = 0xF2; - bcb->CDB[1] = 0x05; - bcb->CDB[7] = (u8)addr; - bcb->CDB[6] = (u8)(addr / 0x0100); - bcb->CDB[5] = Media.Zone / 2; - bcb->CDB[8] = *(redundant + REDT_ADDR1H); - bcb->CDB[9] = *(redundant + REDT_ADDR1L); - - result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- Ssfdc_D_CheckStatus() ------------------------------------------ */ -int Ssfdc_D_CheckStatus(void) -{ - return SMSUCCESS; -} - - - -/* SmartMedia ID Code Check & Mode Set Subroutine - * ----- Set_D_SsfdcModel() --------------------------------------------- - */ -int Set_D_SsfdcModel(u8 dcode) -{ - switch (_Check_D_DevCode(dcode)) { - case SSFDC1MB: - Ssfdc.Model = SSFDC1MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS16 | PS256; - Ssfdc.MaxZones = 1; - Ssfdc.MaxBlocks = 256; - Ssfdc.MaxLogBlocks = 250; - Ssfdc.MaxSectors = 8; - break; - case SSFDC2MB: - Ssfdc.Model = SSFDC2MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS16 | PS256; - Ssfdc.MaxZones = 1; - Ssfdc.MaxBlocks = 512; - Ssfdc.MaxLogBlocks = 500; - Ssfdc.MaxSectors = 8; - break; - case SSFDC4MB: - Ssfdc.Model = SSFDC4MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS16 | PS512; - Ssfdc.MaxZones = 1; - Ssfdc.MaxBlocks = 512; - Ssfdc.MaxLogBlocks = 500; - Ssfdc.MaxSectors = 16; - break; - case SSFDC8MB: - Ssfdc.Model = SSFDC8MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS16 | PS512; - Ssfdc.MaxZones = 1; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 16; - break; - case SSFDC16MB: - Ssfdc.Model = SSFDC16MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS32 | PS512; - Ssfdc.MaxZones = 1; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC32MB: - Ssfdc.Model = SSFDC32MB; - Ssfdc.Attribute = FLASH | AD3CYC | BS32 | PS512; - Ssfdc.MaxZones = 2; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC64MB: - Ssfdc.Model = SSFDC64MB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 4; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC128MB: - Ssfdc.Model = SSFDC128MB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 8; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC256MB: - Ssfdc.Model = SSFDC256MB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 16; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC512MB: - Ssfdc.Model = SSFDC512MB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 32; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC1GB: - Ssfdc.Model = SSFDC1GB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 64; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - case SSFDC2GB: - Ssfdc.Model = SSFDC2GB; - Ssfdc.Attribute = FLASH | AD4CYC | BS32 | PS512; - Ssfdc.MaxZones = 128; - Ssfdc.MaxBlocks = 1024; - Ssfdc.MaxLogBlocks = 1000; - Ssfdc.MaxSectors = 32; - break; - default: - Ssfdc.Model = NOSSFDC; - return ERROR; - } - - return SMSUCCESS; -} - -/* ----- _Check_D_DevCode() --------------------------------------------- */ -static u8 _Check_D_DevCode(u8 dcode) -{ - switch (dcode) { - case 0x6E: - case 0xE8: - case 0xEC: return SSFDC1MB; /* 8Mbit (1M) NAND */ - case 0x64: - case 0xEA: return SSFDC2MB; /* 16Mbit (2M) NAND */ - case 0x6B: - case 0xE3: - case 0xE5: return SSFDC4MB; /* 32Mbit (4M) NAND */ - case 0xE6: return SSFDC8MB; /* 64Mbit (8M) NAND */ - case 0x73: return SSFDC16MB; /* 128Mbit (16M)NAND */ - case 0x75: return SSFDC32MB; /* 256Mbit (32M)NAND */ - case 0x76: return SSFDC64MB; /* 512Mbit (64M)NAND */ - case 0x79: return SSFDC128MB; /* 1Gbit(128M)NAND */ - case 0x71: return SSFDC256MB; - case 0xDC: return SSFDC512MB; - case 0xD3: return SSFDC1GB; - case 0xD5: return SSFDC2GB; - default: return NOSSFDC; - } -} - - - - -/* SmartMedia ECC Control Subroutine - * ----- Check_D_ReadError() ---------------------------------------------- - */ -int Check_D_ReadError(u8 *redundant) -{ - return SMSUCCESS; -} - -/* ----- Check_D_Correct() ---------------------------------------------- */ -int Check_D_Correct(u8 *buf, u8 *redundant) -{ - return SMSUCCESS; -} - -/* ----- Check_D_CISdata() ---------------------------------------------- */ -int Check_D_CISdata(u8 *buf, u8 *redundant) -{ - u8 cis[] = {0x01, 0x03, 0xD9, 0x01, 0xFF, 0x18, 0x02, - 0xDF, 0x01, 0x20}; - - int cis_len = sizeof(cis); - - if (!IsSSFDCCompliance && !IsXDCompliance) - return SMSUCCESS; - - if (!memcmp(redundant + 0x0D, EccBuf, 3)) - return memcmp(buf, cis, cis_len); - - if (!_Correct_D_SwECC(buf, redundant + 0x0D, EccBuf)) - return memcmp(buf, cis, cis_len); - - buf += 0x100; - if (!memcmp(redundant + 0x08, EccBuf + 0x03, 3)) - return memcmp(buf, cis, cis_len); - - if (!_Correct_D_SwECC(buf, redundant + 0x08, EccBuf + 0x03)) - return memcmp(buf, cis, cis_len); - - return ERROR; -} - -/* ----- Set_D_RightECC() ---------------------------------------------- */ -void Set_D_RightECC(u8 *redundant) -{ - /* Driver ECC Check */ - return; -} - - diff --git a/drivers/staging/keucr/smscsi.c b/drivers/staging/keucr/smscsi.c deleted file mode 100644 index 20858f6777c8..000000000000 --- a/drivers/staging/keucr/smscsi.c +++ /dev/null @@ -1,194 +0,0 @@ -#include -#include -#include - -#include -#include -#include - -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" -#include "smil.h" - -static int SM_SCSI_Test_Unit_Ready(struct us_data *us, struct scsi_cmnd *srb); -static int SM_SCSI_Inquiry(struct us_data *us, struct scsi_cmnd *srb); -static int SM_SCSI_Mode_Sense(struct us_data *us, struct scsi_cmnd *srb); -static int SM_SCSI_Read_Capacity(struct us_data *us, struct scsi_cmnd *srb); -static int SM_SCSI_Read(struct us_data *us, struct scsi_cmnd *srb); -static int SM_SCSI_Write(struct us_data *us, struct scsi_cmnd *srb); - -/* ----- SM_SCSIIrp() -------------------------------------------------- */ -int SM_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb) -{ - int result; - - us->SrbStatus = SS_SUCCESS; - switch (srb->cmnd[0]) { - case TEST_UNIT_READY: - result = SM_SCSI_Test_Unit_Ready(us, srb); - break; /* 0x00 */ - case INQUIRY: - result = SM_SCSI_Inquiry(us, srb); - break; /* 0x12 */ - case MODE_SENSE: - result = SM_SCSI_Mode_Sense(us, srb); - break; /* 0x1A */ - case READ_CAPACITY: - result = SM_SCSI_Read_Capacity(us, srb); - break; /* 0x25 */ - case READ_10: - result = SM_SCSI_Read(us, srb); - break; /* 0x28 */ - case WRITE_10: - result = SM_SCSI_Write(us, srb); - break; /* 0x2A */ - - default: - us->SrbStatus = SS_ILLEGAL_REQUEST; - result = USB_STOR_TRANSPORT_FAILED; - break; - } - return result; -} - -/* ----- SM_SCSI_Test_Unit_Ready() ------------------------------------- */ -static int SM_SCSI_Test_Unit_Ready(struct us_data *us, struct scsi_cmnd *srb) -{ - if (us->SM_Status.Insert && us->SM_Status.Ready) - return USB_STOR_TRANSPORT_GOOD; - else { - ENE_SMInit(us); - return USB_STOR_TRANSPORT_GOOD; - } - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- SM_SCSI_Inquiry() --------------------------------------------- */ -static int SM_SCSI_Inquiry(struct us_data *us, struct scsi_cmnd *srb) -{ - u8 data_ptr[36] = {0x00, 0x80, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x55, 0x53, 0x42, 0x32, 0x2E, 0x30, 0x20, - 0x20, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x31, 0x30, 0x30}; - - usb_stor_set_xfer_buf(us, data_ptr, 36, srb, TO_XFER_BUF); - return USB_STOR_TRANSPORT_GOOD; -} - - -/* ----- SM_SCSI_Mode_Sense() ------------------------------------------ */ -static int SM_SCSI_Mode_Sense(struct us_data *us, struct scsi_cmnd *srb) -{ - u8 mediaNoWP[12] = {0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00}; - u8 mediaWP[12] = {0x0b, 0x00, 0x80, 0x08, 0x00, 0x00, - 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00}; - - if (us->SM_Status.WtP) - usb_stor_set_xfer_buf(us, mediaWP, 12, srb, TO_XFER_BUF); - else - usb_stor_set_xfer_buf(us, mediaNoWP, 12, srb, TO_XFER_BUF); - - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- SM_SCSI_Read_Capacity() --------------------------------------- */ -static int SM_SCSI_Read_Capacity(struct us_data *us, struct scsi_cmnd *srb) -{ - unsigned int offset = 0; - struct scatterlist *sg = NULL; - u32 bl_num; - u16 bl_len; - u8 buf[8]; - - dev_dbg(&us->pusb_dev->dev, "SM_SCSI_Read_Capacity\n"); - - bl_len = 0x200; - bl_num = Ssfdc.MaxLogBlocks * Ssfdc.MaxSectors * Ssfdc.MaxZones - 1; - - us->bl_num = bl_num; - dev_dbg(&us->pusb_dev->dev, "bl_len = %x\n", bl_len); - dev_dbg(&us->pusb_dev->dev, "bl_num = %x\n", bl_num); - - buf[0] = (bl_num >> 24) & 0xff; - buf[1] = (bl_num >> 16) & 0xff; - buf[2] = (bl_num >> 8) & 0xff; - buf[3] = (bl_num >> 0) & 0xff; - buf[4] = (bl_len >> 24) & 0xff; - buf[5] = (bl_len >> 16) & 0xff; - buf[6] = (bl_len >> 8) & 0xff; - buf[7] = (bl_len >> 0) & 0xff; - - usb_stor_access_xfer_buf(us, buf, 8, srb, &sg, &offset, TO_XFER_BUF); - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- SM_SCSI_Read() -------------------------------------------------- */ -static int SM_SCSI_Read(struct us_data *us, struct scsi_cmnd *srb) -{ - int result = 0; - u8 *Cdb = srb->cmnd; - u32 bn = ((Cdb[2] << 24) & 0xff000000) | - ((Cdb[3] << 16) & 0x00ff0000) | - ((Cdb[4] << 8) & 0x0000ff00) | - ((Cdb[5] << 0) & 0x000000ff); - u16 blen = ((Cdb[7] << 8) & 0xff00) | ((Cdb[8] << 0) & 0x00ff); - u32 blenByte = blen * 0x200; - void *buf; - - - if (bn > us->bl_num) - return USB_STOR_TRANSPORT_ERROR; - - buf = kmalloc(blenByte, GFP_KERNEL); - if (buf == NULL) - return USB_STOR_TRANSPORT_ERROR; - result = Media_D_ReadSector(us, bn, blen, buf); - usb_stor_set_xfer_buf(us, buf, blenByte, srb, TO_XFER_BUF); - kfree(buf); - - if (!result) - return USB_STOR_TRANSPORT_GOOD; - else - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - -/* ----- SM_SCSI_Write() -------------------------------------------------- */ -static int SM_SCSI_Write(struct us_data *us, struct scsi_cmnd *srb) -{ - int result = 0; - u8 *Cdb = srb->cmnd; - u32 bn = ((Cdb[2] << 24) & 0xff000000) | - ((Cdb[3] << 16) & 0x00ff0000) | - ((Cdb[4] << 8) & 0x0000ff00) | - ((Cdb[5] << 0) & 0x000000ff); - u16 blen = ((Cdb[7] << 8) & 0xff00) | ((Cdb[8] << 0) & 0x00ff); - u32 blenByte = blen * 0x200; - void *buf; - - - if (bn > us->bl_num) - return USB_STOR_TRANSPORT_ERROR; - - buf = kmalloc(blenByte, GFP_KERNEL); - if (buf == NULL) - return USB_STOR_TRANSPORT_ERROR; - usb_stor_set_xfer_buf(us, buf, blenByte, srb, FROM_XFER_BUF); - result = Media_D_CopySector(us, bn, blen, buf); - kfree(buf); - - if (!result) - return USB_STOR_TRANSPORT_GOOD; - else - return USB_STOR_TRANSPORT_ERROR; - - return USB_STOR_TRANSPORT_GOOD; -} - diff --git a/drivers/staging/keucr/transport.c b/drivers/staging/keucr/transport.c deleted file mode 100644 index 5e59525271f8..000000000000 --- a/drivers/staging/keucr/transport.c +++ /dev/null @@ -1,865 +0,0 @@ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include - -#include -#include -#include - -#include "usb.h" -#include "scsiglue.h" -#include "transport.h" - -/*********************************************************************** - * Data transfer routines - ***********************************************************************/ -/* - * usb_stor_blocking_completion() - */ -static void usb_stor_blocking_completion(struct urb *urb) -{ - struct completion *urb_done_ptr = urb->context; - - /* pr_info("transport --- usb_stor_blocking_completion\n"); */ - complete(urb_done_ptr); -} - -/* - * usb_stor_msg_common() - */ -static int usb_stor_msg_common(struct us_data *us, int timeout) -{ - struct completion urb_done; - long timeleft; - int status; - - /* pr_info("transport --- usb_stor_msg_common\n"); */ - if (test_bit(US_FLIDX_ABORTING, &us->dflags)) - return -EIO; - - init_completion(&urb_done); - - us->current_urb->context = &urb_done; - us->current_urb->actual_length = 0; - us->current_urb->error_count = 0; - us->current_urb->status = 0; - - us->current_urb->transfer_flags = 0; - if (us->current_urb->transfer_buffer == us->iobuf) - us->current_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - us->current_urb->transfer_dma = us->iobuf_dma; - us->current_urb->setup_dma = us->cr_dma; - - status = usb_submit_urb(us->current_urb, GFP_NOIO); - if (status) - return status; - - set_bit(US_FLIDX_URB_ACTIVE, &us->dflags); - - if (test_bit(US_FLIDX_ABORTING, &us->dflags)) { - if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags)) { - /* pr_info("-- cancelling URB\n"); */ - usb_unlink_urb(us->current_urb); - } - } - - timeleft = wait_for_completion_interruptible_timeout(&urb_done, - timeout ? : MAX_SCHEDULE_TIMEOUT); - clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags); - - if (timeleft <= 0) { - /* pr_info("%s -- cancelling URB\n", - timeleft == 0 ? "Timeout" : "Signal"); */ - usb_kill_urb(us->current_urb); - } - - return us->current_urb->status; -} - -/* - * usb_stor_print_cmd(): - */ -static void usb_stor_print_cmd(struct us_data *us, struct scsi_cmnd *srb) -{ - u8 *Cdb = srb->cmnd; - u32 cmd = Cdb[0]; - - switch (cmd) { - case TEST_UNIT_READY: - break; - case INQUIRY: - dev_dbg(&us->pusb_dev->dev, - "scsi cmd %X --- SCSIOP_INQUIRY\n", cmd); - break; - case MODE_SENSE: - dev_dbg(&us->pusb_dev->dev, - "scsi cmd %X --- SCSIOP_MODE_SENSE\n", cmd); - break; - case START_STOP: - dev_dbg(&us->pusb_dev->dev, - "scsi cmd %X --- SCSIOP_START_STOP\n", cmd); - break; - case READ_CAPACITY: - dev_dbg(&us->pusb_dev->dev, - "scsi cmd %X --- SCSIOP_READ_CAPACITY\n", cmd); - break; - case READ_10: - break; - case WRITE_10: - break; - case ALLOW_MEDIUM_REMOVAL: - dev_dbg(&us->pusb_dev->dev, - "scsi cmd %X --- SCSIOP_ALLOW_MEDIUM_REMOVAL\n", cmd); - break; - default: - dev_dbg(&us->pusb_dev->dev, "scsi cmd %X --- Other cmd\n", cmd); - break; - } -} - -/* - * usb_stor_control_msg() - */ -int usb_stor_control_msg(struct us_data *us, unsigned int pipe, - u8 request, u8 requesttype, u16 value, u16 index, - void *data, u16 size, int timeout) -{ - int status; - - /* pr_info("transport --- usb_stor_control_msg\n"); */ - - /* fill in the devrequest structure */ - us->cr->bRequestType = requesttype; - us->cr->bRequest = request; - us->cr->wValue = cpu_to_le16(value); - us->cr->wIndex = cpu_to_le16(index); - us->cr->wLength = cpu_to_le16(size); - - /* fill and submit the URB */ - usb_fill_control_urb(us->current_urb, us->pusb_dev, pipe, - (unsigned char *) us->cr, data, size, - usb_stor_blocking_completion, NULL); - status = usb_stor_msg_common(us, timeout); - - /* return the actual length of the data transferred if no error */ - if (status == 0) - status = us->current_urb->actual_length; - return status; -} - -/* - * usb_stor_clear_halt() - */ -int usb_stor_clear_halt(struct us_data *us, unsigned int pipe) -{ - int result; - int endp = usb_pipeendpoint(pipe); - - /* pr_info("transport --- usb_stor_clear_halt\n"); */ - if (usb_pipein(pipe)) - endp |= USB_DIR_IN; - - result = usb_stor_control_msg(us, us->send_ctrl_pipe, - USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, - USB_ENDPOINT_HALT, endp, - NULL, 0, 3*HZ); - - /* reset the endpoint toggle */ - if (result >= 0) - /* usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), - usb_pipeout(pipe), 0); */ - usb_reset_endpoint(us->pusb_dev, endp); - - return result; -} - -/* - * interpret_urb_result() - */ -static int interpret_urb_result(struct us_data *us, unsigned int pipe, - unsigned int length, int result, unsigned int partial) -{ - /* pr_info("transport --- interpret_urb_result\n"); */ - switch (result) { - /* no error code; did we send all the data? */ - case 0: - if (partial != length) { - /* pr_info("-- short transfer\n"); */ - return USB_STOR_XFER_SHORT; - } - /* pr_info("-- transfer complete\n"); */ - return USB_STOR_XFER_GOOD; - case -EPIPE: - if (usb_pipecontrol(pipe)) { - /* pr_info("-- stall on control pipe\n"); */ - return USB_STOR_XFER_STALLED; - } - /* pr_info("clearing endpoint halt for pipe 0x%x\n", pipe); */ - if (usb_stor_clear_halt(us, pipe) < 0) - return USB_STOR_XFER_ERROR; - return USB_STOR_XFER_STALLED; - case -EOVERFLOW: - /* pr_info("-- babble\n"); */ - return USB_STOR_XFER_LONG; - case -ECONNRESET: - /* pr_info("-- transfer cancelled\n"); */ - return USB_STOR_XFER_ERROR; - case -EREMOTEIO: - /* pr_info("-- short read transfer\n"); */ - return USB_STOR_XFER_SHORT; - case -EIO: - /* pr_info("-- abort or disconnect in progress\n"); */ - return USB_STOR_XFER_ERROR; - default: - /* pr_info("-- unknown error\n"); */ - return USB_STOR_XFER_ERROR; - } -} - -/* - * usb_stor_bulk_transfer_buf() - */ -int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, - void *buf, unsigned int length, unsigned int *act_len) -{ - int result; - - /* pr_info("transport --- usb_stor_bulk_transfer_buf\n"); */ - - /* fill and submit the URB */ - usb_fill_bulk_urb(us->current_urb, us->pusb_dev, pipe, buf, - length, usb_stor_blocking_completion, NULL); - result = usb_stor_msg_common(us, 0); - - /* store the actual length of the data transferred */ - if (act_len) - *act_len = us->current_urb->actual_length; - - return interpret_urb_result(us, pipe, length, result, - us->current_urb->actual_length); -} - -/* - * usb_stor_bulk_transfer_sglist() - */ -static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe, - struct scatterlist *sg, int num_sg, unsigned int length, - unsigned int *act_len) -{ - int result; - - /* pr_info("transport --- usb_stor_bulk_transfer_sglist\n"); */ - if (test_bit(US_FLIDX_ABORTING, &us->dflags)) - return USB_STOR_XFER_ERROR; - - /* initialize the scatter-gather request block */ - result = usb_sg_init(&us->current_sg, us->pusb_dev, pipe, 0, - sg, num_sg, length, GFP_NOIO); - if (result) { - /* pr_info("usb_sg_init returned %d\n", result); */ - return USB_STOR_XFER_ERROR; - } - - /* since the block has been initialized successfully, - it's now okay to cancel it */ - set_bit(US_FLIDX_SG_ACTIVE, &us->dflags); - - /* did an abort/disconnect occur during the submission? */ - if (test_bit(US_FLIDX_ABORTING, &us->dflags)) { - /* cancel the request, if it hasn't been cancelled already */ - if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags)) { - /* pr_info("-- cancelling sg request\n"); */ - usb_sg_cancel(&us->current_sg); - } - } - - /* wait for the completion of the transfer */ - usb_sg_wait(&us->current_sg); - clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags); - - result = us->current_sg.status; - if (act_len) - *act_len = us->current_sg.bytes; - - return interpret_urb_result(us, pipe, length, - result, us->current_sg.bytes); -} - -/* - * usb_stor_bulk_srb() - */ -int usb_stor_bulk_srb(struct us_data *us, unsigned int pipe, - struct scsi_cmnd *srb) -{ - unsigned int partial; - int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb), - scsi_sg_count(srb), scsi_bufflen(srb), - &partial); - - scsi_set_resid(srb, scsi_bufflen(srb) - partial); - return result; -} - -/* - * usb_stor_bulk_transfer_sg() - */ -int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe, - void *buf, unsigned int length_left, int use_sg, int *residual) -{ - int result; - unsigned int partial; - - /* pr_info("transport --- usb_stor_bulk_transfer_sg\n"); */ - /* are we scatter-gathering? */ - if (use_sg) { - /* use the usb core scatter-gather primitives */ - result = usb_stor_bulk_transfer_sglist(us, pipe, - (struct scatterlist *) buf, use_sg, - length_left, &partial); - length_left -= partial; - } else { - /* no scatter-gather, just make the request */ - result = usb_stor_bulk_transfer_buf(us, pipe, buf, - length_left, &partial); - length_left -= partial; - } - - /* store the residual and return the error code */ - if (residual) - *residual = length_left; - return result; -} - -/*********************************************************************** - * Transport routines - ***********************************************************************/ -/* - * usb_stor_invoke_transport() - */ -void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) -{ - int need_auto_sense; - int result; - - /* pr_info("transport --- usb_stor_invoke_transport\n"); */ - usb_stor_print_cmd(us, srb); - /* send the command to the transport layer */ - scsi_set_resid(srb, 0); - result = us->transport(srb, us); /* usb_stor_Bulk_transport; */ - - /* if the command gets aborted by the higher layers, - we need to short-circuit all other processing */ - if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { - /* pr_info("-- command was aborted\n"); */ - srb->result = DID_ABORT << 16; - goto Handle_Errors; - } - - /* if there is a transport error, reset and don't auto-sense */ - if (result == USB_STOR_TRANSPORT_ERROR) { - /* pr_info("-- transport indicates error, resetting\n"); */ - srb->result = DID_ERROR << 16; - goto Handle_Errors; - } - - /* if the transport provided its own sense data, don't auto-sense */ - if (result == USB_STOR_TRANSPORT_NO_SENSE) { - srb->result = SAM_STAT_CHECK_CONDITION; - return; - } - - srb->result = SAM_STAT_GOOD; - - /* Determine if we need to auto-sense */ - need_auto_sense = 0; - - if ((us->protocol == USB_PR_CB || us->protocol == USB_PR_DPCM_USB) && - srb->sc_data_direction != DMA_FROM_DEVICE) { - /* pr_info("-- CB transport device requiring auto-sense\n"); */ - need_auto_sense = 1; - } - - if (result == USB_STOR_TRANSPORT_FAILED) { - /* pr_info("-- transport indicates command failure\n"); */ - need_auto_sense = 1; - } - - /* Now, if we need to do the auto-sense, let's do it */ - if (need_auto_sense) { - int temp_result; - struct scsi_eh_save ses; - - pr_info("Issuing auto-REQUEST_SENSE\n"); - - scsi_eh_prep_cmnd(srb, &ses, NULL, 0, US_SENSE_SIZE); - - /* we must do the protocol translation here */ - if (us->subclass == USB_SC_RBC || - us->subclass == USB_SC_SCSI || - us->subclass == USB_SC_CYP_ATACB) { - srb->cmd_len = 6; - } else { - srb->cmd_len = 12; - } - /* issue the auto-sense command */ - scsi_set_resid(srb, 0); - temp_result = us->transport(us->srb, us); - - /* let's clean up right away */ - scsi_eh_restore_cmnd(srb, &ses); - - if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { - /* pr_info("-- auto-sense aborted\n"); */ - srb->result = DID_ABORT << 16; - goto Handle_Errors; - } - if (temp_result != USB_STOR_TRANSPORT_GOOD) { - /* pr_info("-- auto-sense failure\n"); */ - srb->result = DID_ERROR << 16; - if (!(us->fflags & US_FL_SCM_MULT_TARG)) - goto Handle_Errors; - return; - } - - /* set the result so the higher layers expect this data */ - srb->result = SAM_STAT_CHECK_CONDITION; - - if (result == USB_STOR_TRANSPORT_GOOD && - (srb->sense_buffer[2] & 0xaf) == 0 && - srb->sense_buffer[12] == 0 && - srb->sense_buffer[13] == 0) { - srb->result = SAM_STAT_GOOD; - srb->sense_buffer[0] = 0x0; - } - } - - /* Did we transfer less than the minimum amount required? */ - if (srb->result == SAM_STAT_GOOD && scsi_bufflen(srb) - - scsi_get_resid(srb) < srb->underflow) - srb->result = (DID_ERROR << 16); - /* v02 | (SUGGEST_RETRY << 24); */ - - return; - -Handle_Errors: - scsi_lock(us_to_host(us)); - set_bit(US_FLIDX_RESETTING, &us->dflags); - clear_bit(US_FLIDX_ABORTING, &us->dflags); - scsi_unlock(us_to_host(us)); - - mutex_unlock(&us->dev_mutex); - result = usb_stor_port_reset(us); - mutex_lock(&us->dev_mutex); - - if (result < 0) { - scsi_lock(us_to_host(us)); - usb_stor_report_device_reset(us); - scsi_unlock(us_to_host(us)); - us->transport_reset(us); - } - clear_bit(US_FLIDX_RESETTING, &us->dflags); -} - -/* - * ENE_stor_invoke_transport() - */ -void ENE_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) -{ - int result = 0; - - /* pr_info("transport --- ENE_stor_invoke_transport\n"); */ - usb_stor_print_cmd(us, srb); - /* send the command to the transport layer */ - scsi_set_resid(srb, 0); - if (!(us->SM_Status.Ready)) - result = ENE_InitMedia(us); - - if (us->Power_IsResum == true) { - result = ENE_InitMedia(us); - us->Power_IsResum = false; - } - - if (us->SM_Status.Ready) - result = SM_SCSIIrp(us, srb); - - /* if the command gets aborted by the higher layers, - we need to short-circuit all other processing */ - if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { - /* pr_info("-- command was aborted\n"); */ - srb->result = DID_ABORT << 16; - goto Handle_Errors; - } - - /* if there is a transport error, reset and don't auto-sense */ - if (result == USB_STOR_TRANSPORT_ERROR) { - /* pr_info("-- transport indicates error, resetting\n"); */ - srb->result = DID_ERROR << 16; - goto Handle_Errors; - } - - /* if the transport provided its own sense data, don't auto-sense */ - if (result == USB_STOR_TRANSPORT_NO_SENSE) { - srb->result = SAM_STAT_CHECK_CONDITION; - return; - } - - srb->result = SAM_STAT_GOOD; - if (result == USB_STOR_TRANSPORT_FAILED) { - /* pr_info("-- transport indicates command failure\n"); */ - /* need_auto_sense = 1; */ - BuildSenseBuffer(srb, us->SrbStatus); - srb->result = SAM_STAT_CHECK_CONDITION; - } - - /* Did we transfer less than the minimum amount required? */ - if (srb->result == SAM_STAT_GOOD && scsi_bufflen(srb) - - scsi_get_resid(srb) < srb->underflow) - srb->result = (DID_ERROR << 16); - /* v02 | (SUGGEST_RETRY << 24); */ - - return; - -Handle_Errors: - scsi_lock(us_to_host(us)); - set_bit(US_FLIDX_RESETTING, &us->dflags); - clear_bit(US_FLIDX_ABORTING, &us->dflags); - scsi_unlock(us_to_host(us)); - - mutex_unlock(&us->dev_mutex); - result = usb_stor_port_reset(us); - mutex_lock(&us->dev_mutex); - - if (result < 0) { - scsi_lock(us_to_host(us)); - usb_stor_report_device_reset(us); - scsi_unlock(us_to_host(us)); - us->transport_reset(us); - } - clear_bit(US_FLIDX_RESETTING, &us->dflags); -} - -/* - * BuildSenseBuffer() - */ -void BuildSenseBuffer(struct scsi_cmnd *srb, int SrbStatus) -{ - u8 *buf = srb->sense_buffer; - u8 asc; - - pr_info("transport --- BuildSenseBuffer\n"); - switch (SrbStatus) { - case SS_NOT_READY: - asc = 0x3a; - break; /* sense key = 0x02 */ - case SS_MEDIUM_ERR: - asc = 0x0c; - break; /* sense key = 0x03 */ - case SS_ILLEGAL_REQUEST: - asc = 0x20; - break; /* sense key = 0x05 */ - default: - asc = 0x00; - break; /* ?? */ - } - - memset(buf, 0, 18); - buf[0x00] = 0xf0; - buf[0x02] = SrbStatus; - buf[0x07] = 0x0b; - buf[0x0c] = asc; -} - -/* - * usb_stor_stop_transport() - */ -void usb_stor_stop_transport(struct us_data *us) -{ - /* pr_info("transport --- usb_stor_stop_transport\n"); */ - - if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags)) { - /* pr_info("-- cancelling URB\n"); */ - usb_unlink_urb(us->current_urb); - } - - if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags)) { - /* pr_info("-- cancelling sg request\n"); */ - usb_sg_cancel(&us->current_sg); - } -} - -/* - * usb_stor_Bulk_max_lun() - */ -int usb_stor_Bulk_max_lun(struct us_data *us) -{ - int result; - - /* pr_info("transport --- usb_stor_Bulk_max_lun\n"); */ - /* issue the command */ - us->iobuf[0] = 0; - result = usb_stor_control_msg(us, us->recv_ctrl_pipe, - US_BULK_GET_MAX_LUN, - USB_DIR_IN | USB_TYPE_CLASS | - USB_RECIP_INTERFACE, - 0, us->ifnum, us->iobuf, 1, HZ); - - /* pr_info("GetMaxLUN command result is %d, data is %d\n", - result, us->iobuf[0]); */ - - /* if we have a successful request, return the result */ - if (result > 0) - return us->iobuf[0]; - - return 0; -} - -/* - * usb_stor_Bulk_transport() - */ -int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us) -{ - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; - struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf; - unsigned int transfer_length = scsi_bufflen(srb); - unsigned int residue; - int result; - int fake_sense = 0; - unsigned int cswlen; - unsigned int cbwlen = US_BULK_CB_WRAP_LEN; - - /* pr_info("transport --- usb_stor_Bulk_transport\n"); */ - /* Take care of BULK32 devices; set extra byte to 0 */ - if (unlikely(us->fflags & US_FL_BULK32)) { - cbwlen = 32; - us->iobuf[31] = 0; - } - - /* set up the command wrapper */ - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcb->DataTransferLength = cpu_to_le32(transfer_length); - bcb->Flags = srb->sc_data_direction == DMA_FROM_DEVICE ? 1 << 7 : 0; - bcb->Tag = ++us->tag; - bcb->Lun = srb->device->lun; - if (us->fflags & US_FL_SCM_MULT_TARG) - bcb->Lun |= srb->device->id << 4; - bcb->Length = srb->cmd_len; - - /* copy the command payload */ - memset(bcb->CDB, 0, sizeof(bcb->CDB)); - memcpy(bcb->CDB, srb->cmnd, bcb->Length); - - /* send command */ - /* send it to out endpoint */ - /* pr_info("Bulk Command S 0x%x T 0x%x L %d F %d Trg %d LUN %d CL %d\n", - le32_to_cpu(bcb->Signature), bcb->Tag, - le32_to_cpu(bcb->DataTransferLength), bcb->Flags, - (bcb->Lun >> 4), (bcb->Lun & 0x0F), - bcb->Length); */ - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, - bcb, cbwlen, NULL); - /* pr_info("Bulk command transfer result=%d\n", result); */ - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - if (unlikely(us->fflags & US_FL_GO_SLOW)) - udelay(125); - - /* R/W data */ - if (transfer_length) { - unsigned int pipe; - - if (srb->sc_data_direction == DMA_FROM_DEVICE) - pipe = us->recv_bulk_pipe; - else - pipe = us->send_bulk_pipe; - - result = usb_stor_bulk_srb(us, pipe, srb); - /* pr_info("Bulk data transfer result 0x%x\n", result); */ - if (result == USB_STOR_XFER_ERROR) - return USB_STOR_TRANSPORT_ERROR; - - if (result == USB_STOR_XFER_LONG) - fake_sense = 1; - } - - /* get CSW for device status */ - /* pr_info("Attempting to get CSW...\n"); */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, &cswlen); - - if (result == USB_STOR_XFER_SHORT && cswlen == 0) { - /* pr_info("Received 0-length CSW; retrying...\n"); */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, &cswlen); - } - - /* did the attempt to read the CSW fail? */ - if (result == USB_STOR_XFER_STALLED) { - /* get the status again */ - /* pr_info("Attempting to get CSW (2nd try)...\n"); */ - result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs, - US_BULK_CS_WRAP_LEN, NULL); - } - - /* if we still have a failure at this point, we're in trouble */ - /* pr_info("Bulk status result = %d\n", result); */ - if (result != USB_STOR_XFER_GOOD) - return USB_STOR_TRANSPORT_ERROR; - - /* check bulk status */ - residue = le32_to_cpu(bcs->Residue); - /* pr_info("Bulk Status S 0x%x T 0x%x R %u Stat 0x%x\n", - le32_to_cpu(bcs->Signature), - bcs->Tag, residue, bcs->Status); */ - if (!(bcs->Tag == us->tag || - (us->fflags & US_FL_BULK_IGNORE_TAG)) || - bcs->Status > US_BULK_STAT_PHASE) { - /* pr_info("Bulk logical error\n"); */ - return USB_STOR_TRANSPORT_ERROR; - } - - if (!us->bcs_signature) { - us->bcs_signature = bcs->Signature; - /* if (us->bcs_signature != cpu_to_le32(US_BULK_CS_SIGN)) */ - /* pr_info("Learnt BCS signature 0x%08X\n", - le32_to_cpu(us->bcs_signature)); */ - } else if (bcs->Signature != us->bcs_signature) { - /* pr_info("Signature mismatch: got %08X, expecting %08X\n", - le32_to_cpu(bcs->Signature), - le32_to_cpu(us->bcs_signature)); */ - return USB_STOR_TRANSPORT_ERROR; - } - - /* try to compute the actual residue, based on how much data - * was really transferred and what the device tells us */ - if (residue && !(us->fflags & US_FL_IGNORE_RESIDUE)) { - - /* Heuristically detect devices that generate bogus residues - * by seeing what happens with INQUIRY and READ CAPACITY - * commands. - */ - if (bcs->Status == US_BULK_STAT_OK && - scsi_get_resid(srb) == 0 && - ((srb->cmnd[0] == INQUIRY && - transfer_length == 36) || - (srb->cmnd[0] == READ_CAPACITY && - transfer_length == 8))) { - us->fflags |= US_FL_IGNORE_RESIDUE; - - } else { - residue = min(residue, transfer_length); - scsi_set_resid(srb, max_t(int, scsi_get_resid(srb), - residue)); - } - } - - /* based on the status code, we report good or bad */ - switch (bcs->Status) { - case US_BULK_STAT_OK: - if (fake_sense) { - memcpy(srb->sense_buffer, usb_stor_sense_invalidCDB, - sizeof(usb_stor_sense_invalidCDB)); - return USB_STOR_TRANSPORT_NO_SENSE; - } - return USB_STOR_TRANSPORT_GOOD; - - case US_BULK_STAT_FAIL: - return USB_STOR_TRANSPORT_FAILED; - - case US_BULK_STAT_PHASE: - return USB_STOR_TRANSPORT_ERROR; - } - return USB_STOR_TRANSPORT_ERROR; -} - -/*********************************************************************** - * Reset routines - ***********************************************************************/ -/* - * usb_stor_reset_common() - */ -static int usb_stor_reset_common(struct us_data *us, - u8 request, u8 requesttype, - u16 value, u16 index, void *data, u16 size) -{ - int result; - int result2; - - /* pr_info("transport --- usb_stor_reset_common\n"); */ - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { - /* pr_info("No reset during disconnect\n"); */ - return -EIO; - } - - result = usb_stor_control_msg(us, us->send_ctrl_pipe, - request, requesttype, value, index, data, size, 5*HZ); - - if (result < 0) { - /* pr_info("Soft reset failed: %d\n", result); */ - return result; - } - - wait_event_interruptible_timeout(us->delay_wait, - test_bit(US_FLIDX_DISCONNECTING, &us->dflags), HZ*6); - - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { - /* pr_info("Reset interrupted by disconnect\n"); */ - return -EIO; - } - - /* pr_info("Soft reset: clearing bulk-in endpoint halt\n"); */ - result = usb_stor_clear_halt(us, us->recv_bulk_pipe); - - /* pr_info("Soft reset: clearing bulk-out endpoint halt\n"); */ - result2 = usb_stor_clear_halt(us, us->send_bulk_pipe); - - /* return a result code based on the result of the clear-halts */ - if (result >= 0) - result = result2; - /* if (result < 0) */ - /* pr_info("Soft reset failed\n"); */ - /* else */ - /* pr_info("Soft reset done\n"); */ - return result; -} - -/* - * usb_stor_Bulk_reset() - */ -int usb_stor_Bulk_reset(struct us_data *us) -{ - /* pr_info("transport --- usb_stor_Bulk_reset\n"); */ - return usb_stor_reset_common(us, US_BULK_RESET_REQUEST, - USB_TYPE_CLASS | USB_RECIP_INTERFACE, - 0, us->ifnum, NULL, 0); -} - -/* - * usb_stor_port_reset() - */ -int usb_stor_port_reset(struct us_data *us) -{ - int result; - - /* pr_info("transport --- usb_stor_port_reset\n"); */ - result = usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf); - if (result < 0) - pr_info("unable to lock device for reset: %d\n", result); - else { - /* Were we disconnected while waiting for the lock? */ - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { - result = -EIO; - /* pr_info("No reset during disconnect\n"); */ - } else { - result = usb_reset_device(us->pusb_dev); - /* pr_info("usb_reset_composite_device returns %d\n", - result); */ - } - usb_unlock_device(us->pusb_dev); - } - return result; -} - - diff --git a/drivers/staging/keucr/transport.h b/drivers/staging/keucr/transport.h deleted file mode 100644 index abd8e5a3dd6e..000000000000 --- a/drivers/staging/keucr/transport.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef _TRANSPORT_H_ -#define _TRANSPORT_H_ - -#include - -/* usb_stor_bulk_transfer_xxx() return codes, in order of severity */ -#define USB_STOR_XFER_GOOD 0 /* good transfer */ -#define USB_STOR_XFER_SHORT 1 /* transferred less than expected */ -#define USB_STOR_XFER_STALLED 2 /* endpoint stalled */ -#define USB_STOR_XFER_LONG 3 /* device tried to send too much */ -#define USB_STOR_XFER_ERROR 4 /* transfer died in the middle */ - -/* Transport return codes */ -#define USB_STOR_TRANSPORT_GOOD 0 /* Transport good, command good */ -#define USB_STOR_TRANSPORT_FAILED 1 /* Transport good, command failed */ -#define USB_STOR_TRANSPORT_NO_SENSE 2 /* Command failed, no auto-sense */ -#define USB_STOR_TRANSPORT_ERROR 3 /* Transport bad (i.e. device dead) */ - -/* - * We used to have USB_STOR_XFER_ABORTED and USB_STOR_TRANSPORT_ABORTED - * return codes. But now the transport and low-level transfer routines - * treat an abort as just another error (-ENOENT for a cancelled URB). - * It is up to the invoke_transport() function to test for aborts and - * distinguish them from genuine communication errors. - */ - -/* CBI accept device specific command */ -#define US_CBI_ADSC 0 -extern int usb_stor_Bulk_transport(struct scsi_cmnd *, struct us_data*); -extern int usb_stor_Bulk_max_lun(struct us_data *); -extern int usb_stor_Bulk_reset(struct us_data *); -extern void usb_stor_invoke_transport(struct scsi_cmnd *, struct us_data*); -extern void usb_stor_stop_transport(struct us_data *); -extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe, - u8 request, u8 requesttype, u16 value, u16 index, - void *data, u16 size, int timeout); -extern int usb_stor_clear_halt(struct us_data *us, unsigned int pipe); -extern int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, - void *buf, unsigned int length, unsigned int *act_len); -extern int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe, - void *buf, unsigned int length, int use_sg, int *residual); -extern int usb_stor_bulk_srb(struct us_data *us, unsigned int pipe, - struct scsi_cmnd *srb); -extern int usb_stor_port_reset(struct us_data *us); - -/* Protocol handling routines */ -enum xfer_buf_dir {TO_XFER_BUF, FROM_XFER_BUF}; -extern unsigned int usb_stor_access_xfer_buf(struct us_data*, - unsigned char *buffer, unsigned int buflen, struct scsi_cmnd *srb, - struct scatterlist **, unsigned int *offset, enum xfer_buf_dir dir); -extern void usb_stor_set_xfer_buf(struct us_data*, unsigned char *buffer, - unsigned int buflen, struct scsi_cmnd *srb, - unsigned int dir); - -/* - * ENE scsi function - */ -extern void ENE_stor_invoke_transport(struct scsi_cmnd *, struct us_data *); -extern int ENE_InitMedia(struct us_data *); -extern int ENE_SMInit(struct us_data *); -extern int ENE_SendScsiCmd(struct us_data*, u8, void*, int); -extern int ENE_LoadBinCode(struct us_data*, u8); -extern int ene_read_byte(struct us_data*, u16 index, void *buf); -extern int ENE_Read_Data(struct us_data*, void *buf, unsigned int length); -extern int ENE_Write_Data(struct us_data*, void *buf, unsigned int length); -extern void BuildSenseBuffer(struct scsi_cmnd *, int); - -/* - * ENE scsi function - */ -extern int SM_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb); - -#endif diff --git a/drivers/staging/keucr/usb.c b/drivers/staging/keucr/usb.c deleted file mode 100644 index 1e2073b28f0f..000000000000 --- a/drivers/staging/keucr/usb.c +++ /dev/null @@ -1,643 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "usb.h" -#include "scsiglue.h" -#include "smil.h" -#include "transport.h" - -/* Some informational data */ -MODULE_AUTHOR("Domao"); -MODULE_DESCRIPTION("ENE USB Mass Storage driver for Linux"); -MODULE_LICENSE("GPL"); - -static unsigned int delay_use = 1; - -static struct usb_device_id eucr_usb_ids[] = { - { USB_DEVICE(0x058f, 0x6366) }, - { USB_DEVICE(0x0cf2, 0x6230) }, - { USB_DEVICE(0x0cf2, 0x6250) }, - { } /* Terminating entry */ -}; -MODULE_DEVICE_TABLE(usb, eucr_usb_ids); - - -#ifdef CONFIG_PM - -static int eucr_suspend(struct usb_interface *iface, pm_message_t message) -{ - struct us_data *us = usb_get_intfdata(iface); - - pr_info("--- eucr_suspend ---\n"); - /* Wait until no command is running */ - mutex_lock(&us->dev_mutex); - - if (us->suspend_resume_hook) - (us->suspend_resume_hook)(us, US_SUSPEND); - - mutex_unlock(&us->dev_mutex); - return 0; -} - -static int eucr_resume(struct usb_interface *iface) -{ - u8 tmp = 0; - struct us_data *us = usb_get_intfdata(iface); - - pr_info("--- eucr_resume---\n"); - mutex_lock(&us->dev_mutex); - - if (us->suspend_resume_hook) - (us->suspend_resume_hook)(us, US_RESUME); - - - mutex_unlock(&us->dev_mutex); - - us->Power_IsResum = true; - - us->SM_Status = *(struct keucr_sm_status *)&tmp; - - return 0; -} - -static int eucr_reset_resume(struct usb_interface *iface) -{ - u8 tmp = 0; - struct us_data *us = usb_get_intfdata(iface); - - pr_info("--- eucr_reset_resume---\n"); - - /* Report the reset to the SCSI core */ - usb_stor_report_bus_reset(us); - - /* - * FIXME: Notify the subdrivers that they need to reinitialize - * the device - */ - - us->Power_IsResum = true; - - us->SM_Status = *(struct keucr_sm_status *)&tmp; - - return 0; -} - -#else - -#define eucr_suspend NULL -#define eucr_resume NULL -#define eucr_reset_resume NULL - -#endif - -static int eucr_pre_reset(struct usb_interface *iface) -{ - struct us_data *us = usb_get_intfdata(iface); - - pr_info("usb --- eucr_pre_reset\n"); - - /* Make sure no command runs during the reset */ - mutex_lock(&us->dev_mutex); - return 0; -} - -static int eucr_post_reset(struct usb_interface *iface) -{ - struct us_data *us = usb_get_intfdata(iface); - - pr_info("usb --- eucr_post_reset\n"); - - /* Report the reset to the SCSI core */ - usb_stor_report_bus_reset(us); - - mutex_unlock(&us->dev_mutex); - return 0; -} - -void fill_inquiry_response(struct us_data *us, unsigned char *data, - unsigned int data_len) -{ - pr_info("usb --- fill_inquiry_response\n"); - if (data_len < 36) /* You lose. */ - return; - - if (data[0]&0x20) { - memset(data+8, 0, 28); - } else { - u16 bcdDevice = - le16_to_cpu(us->pusb_dev->descriptor.bcdDevice); - memcpy(data+8, us->unusual_dev->vendorName, - strlen(us->unusual_dev->vendorName) > 8 ? 8 : - strlen(us->unusual_dev->vendorName)); - memcpy(data+16, us->unusual_dev->productName, - strlen(us->unusual_dev->productName) > 16 ? 16 : - strlen(us->unusual_dev->productName)); - data[32] = 0x30 + ((bcdDevice>>12) & 0x0F); - data[33] = 0x30 + ((bcdDevice>>8) & 0x0F); - data[34] = 0x30 + ((bcdDevice>>4) & 0x0F); - data[35] = 0x30 + ((bcdDevice) & 0x0F); - } - usb_stor_set_xfer_buf(us, data, data_len, us->srb, TO_XFER_BUF); -} - -static int usb_stor_control_thread(void *__us) -{ - struct us_data *us = (struct us_data *)__us; - struct Scsi_Host *host = us_to_host(us); - - pr_info("usb --- usb_stor_control_thread\n"); - for (;;) { - if (wait_for_completion_interruptible(&us->cmnd_ready)) - break; - - /* lock the device pointers */ - mutex_lock(&(us->dev_mutex)); - - /* if the device has disconnected, we are free to exit */ - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { - mutex_unlock(&us->dev_mutex); - break; - } - - /* lock access to the state */ - scsi_lock(host); - - /* When we are called with no command pending, we're done */ - if (us->srb == NULL) { - scsi_unlock(host); - mutex_unlock(&us->dev_mutex); - break; - } - - /* has the command timed out *already* ? */ - if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { - us->srb->result = DID_ABORT << 16; - goto SkipForAbort; - } - - scsi_unlock(host); - - if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) { - us->srb->result = DID_ERROR << 16; - } else if (us->srb->device->id - && !(us->fflags & US_FL_SCM_MULT_TARG)) { - us->srb->result = DID_BAD_TARGET << 16; - } else if (us->srb->device->lun > us->max_lun) { - us->srb->result = DID_BAD_TARGET << 16; - } else if ((us->srb->cmnd[0] == INQUIRY) - && (us->fflags & US_FL_FIX_INQUIRY)) { - unsigned char data_ptr[36] = {0x00, 0x80, 0x02, 0x02, - 0x1F, 0x00, 0x00, 0x00}; - - fill_inquiry_response(us, data_ptr, 36); - us->srb->result = SAM_STAT_GOOD; - } else { - us->proto_handler(us->srb, us); - } - - /* lock access to the state */ - scsi_lock(host); - - /* indicate that the command is done */ - if (us->srb->result != DID_ABORT << 16) { - us->srb->scsi_done(us->srb); - } else { -SkipForAbort: - pr_info("scsi command aborted\n"); - } - - if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { - complete(&(us->notify)); - - /* Allow USB transfers to resume */ - clear_bit(US_FLIDX_ABORTING, &us->dflags); - clear_bit(US_FLIDX_TIMED_OUT, &us->dflags); - } - - /* finished working on this command */ - us->srb = NULL; - scsi_unlock(host); - - /* unlock the device pointers */ - mutex_unlock(&us->dev_mutex); - } /* for (;;) */ - - /* Wait until we are told to stop */ - for (;;) { - set_current_state(TASK_INTERRUPTIBLE); - if (kthread_should_stop()) - break; - schedule(); - } - __set_current_state(TASK_RUNNING); - return 0; -} - -static int associate_dev(struct us_data *us, struct usb_interface *intf) -{ - pr_info("usb --- associate_dev\n"); - - /* Fill in the device-related fields */ - us->pusb_dev = interface_to_usbdev(intf); - us->pusb_intf = intf; - us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber; - - /* Store our private data in the interface */ - usb_set_intfdata(intf, us); - - /* Allocate the device-related DMA-mapped buffers */ - us->cr = usb_alloc_coherent(us->pusb_dev, sizeof(*us->cr), GFP_KERNEL, - &us->cr_dma); - if (!us->cr) { - pr_info("usb_ctrlrequest allocation failed\n"); - return -ENOMEM; - } - - us->iobuf = usb_alloc_coherent(us->pusb_dev, US_IOBUF_SIZE, GFP_KERNEL, - &us->iobuf_dma); - if (!us->iobuf) { - pr_info("I/O buffer allocation failed\n"); - return -ENOMEM; - } - - us->sensebuf = kmalloc(US_SENSE_SIZE, GFP_KERNEL); - if (!us->sensebuf) - return -ENOMEM; - - return 0; -} - -static int get_device_info(struct us_data *us, const struct usb_device_id *id) -{ - struct usb_device *dev = us->pusb_dev; - struct usb_interface_descriptor *idesc = - &us->pusb_intf->cur_altsetting->desc; - - pr_info("usb --- get_device_info\n"); - - us->subclass = idesc->bInterfaceSubClass; - us->protocol = idesc->bInterfaceProtocol; - us->fflags = id->driver_info; - us->Power_IsResum = false; - - if (us->fflags & US_FL_IGNORE_DEVICE) { - pr_info("device ignored\n"); - return -ENODEV; - } - - if (dev->speed != USB_SPEED_HIGH) - us->fflags &= ~US_FL_GO_SLOW; - - return 0; -} - -static int get_transport(struct us_data *us) -{ - pr_info("usb --- get_transport\n"); - switch (us->protocol) { - case USB_PR_BULK: - us->transport_name = "Bulk"; - us->transport = usb_stor_Bulk_transport; - us->transport_reset = usb_stor_Bulk_reset; - break; - - default: - return -EIO; - } - - /* fix for single-lun devices */ - if (us->fflags & US_FL_SINGLE_LUN) - us->max_lun = 0; - return 0; -} - -static int get_protocol(struct us_data *us) -{ - pr_info("usb --- get_protocol\n"); - pr_info("us->pusb_dev->descriptor.idVendor = %x\n", - us->pusb_dev->descriptor.idVendor); - pr_info("us->pusb_dev->descriptor.idProduct = %x\n", - us->pusb_dev->descriptor.idProduct); - switch (us->subclass) { - case USB_SC_SCSI: - us->protocol_name = "Transparent SCSI"; - if ((us->pusb_dev->descriptor.idVendor == 0x0CF2) - && (us->pusb_dev->descriptor.idProduct == 0x6250)) - us->proto_handler = ENE_stor_invoke_transport; - else - us->proto_handler = usb_stor_invoke_transport; - break; - - default: - return -EIO; - } - return 0; -} - -static int get_pipes(struct us_data *us) -{ - struct usb_host_interface *altsetting = us->pusb_intf->cur_altsetting; - int i; - struct usb_endpoint_descriptor *ep; - struct usb_endpoint_descriptor *ep_in = NULL; - struct usb_endpoint_descriptor *ep_out = NULL; - struct usb_endpoint_descriptor *ep_int = NULL; - - pr_info("usb --- get_pipes\n"); - - for (i = 0; i < altsetting->desc.bNumEndpoints; i++) { - ep = &altsetting->endpoint[i].desc; - - if (usb_endpoint_xfer_bulk(ep)) { - if (usb_endpoint_dir_in(ep)) { - if (!ep_in) - ep_in = ep; - } else { - if (!ep_out) - ep_out = ep; - } - } else if (usb_endpoint_is_int_in(ep)) { - if (!ep_int) - ep_int = ep; - } - } - - if (!ep_in || !ep_out || (us->protocol == USB_PR_CBI && !ep_int)) { - pr_info("Endpoint sanity check failed! Rejecting dev.\n"); - return -EIO; - } - - /* Calculate and store the pipe values */ - us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0); - us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0); - us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev, - ep_out->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); - us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev, - ep_in->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); - if (ep_int) { - us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev, - ep_int->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); - us->ep_bInterval = ep_int->bInterval; - } - return 0; -} - -static int usb_stor_acquire_resources(struct us_data *us) -{ - struct task_struct *th; - - pr_info("usb --- usb_stor_acquire_resources\n"); - us->current_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!us->current_urb) { - pr_info("URB allocation failed\n"); - return -ENOMEM; - } - - /* Start up our control thread */ - th = kthread_run(usb_stor_control_thread, us, "eucr-storage"); - if (IS_ERR(th)) { - pr_info("Unable to start control thread\n"); - return PTR_ERR(th); - } - us->ctl_thread = th; - - return 0; -} - -static void usb_stor_release_resources(struct us_data *us) -{ - pr_info("usb --- usb_stor_release_resources\n"); - - SM_FreeMem(); - - complete(&us->cmnd_ready); - if (us->ctl_thread) - kthread_stop(us->ctl_thread); - - /* Call the destructor routine, if it exists */ - if (us->extra_destructor) { - pr_info("-- calling extra_destructor()\n"); - us->extra_destructor(us->extra); - } - - /* Free the extra data and the URB */ - kfree(us->extra); - usb_free_urb(us->current_urb); -} - -static void dissociate_dev(struct us_data *us) -{ - pr_info("usb --- dissociate_dev\n"); - - kfree(us->sensebuf); - - /* Free the device-related DMA-mapped buffers */ - usb_free_coherent(us->pusb_dev, sizeof(*us->cr), us->cr, us->cr_dma); - usb_free_coherent(us->pusb_dev, US_IOBUF_SIZE, us->iobuf, - us->iobuf_dma); - - /* Remove our private data from the interface */ - usb_set_intfdata(us->pusb_intf, NULL); -} - -static void quiesce_and_remove_host(struct us_data *us) -{ - struct Scsi_Host *host = us_to_host(us); - - pr_info("usb --- quiesce_and_remove_host\n"); - - /* If the device is really gone, cut short reset delays */ - if (us->pusb_dev->state == USB_STATE_NOTATTACHED) - set_bit(US_FLIDX_DISCONNECTING, &us->dflags); - - /* - * Prevent SCSI-scanning (if it hasn't started yet) - * and wait for the SCSI-scanning thread to stop. - */ - set_bit(US_FLIDX_DONT_SCAN, &us->dflags); - wake_up(&us->delay_wait); - wait_for_completion(&us->scanning_done); - - /* - * Removing the host will perform an orderly shutdown: caches - * synchronized, disks spun down, etc. - */ - scsi_remove_host(host); - - /* - * Prevent any new commands from being accepted and cut short - * reset delays. - */ - scsi_lock(host); - set_bit(US_FLIDX_DISCONNECTING, &us->dflags); - scsi_unlock(host); - wake_up(&us->delay_wait); -} - -static void release_everything(struct us_data *us) -{ - pr_info("usb --- release_everything\n"); - - usb_stor_release_resources(us); - dissociate_dev(us); - scsi_host_put(us_to_host(us)); -} - -static int usb_stor_scan_thread(void *__us) -{ - struct us_data *us = (struct us_data *)__us; - - pr_info("usb --- usb_stor_scan_thread\n"); - pr_info("EUCR : device found at %d\n", us->pusb_dev->devnum); - - set_freezable(); - /* Wait for the timeout to expire or for a disconnect */ - if (delay_use > 0) { - wait_event_freezable_timeout(us->delay_wait, - test_bit(US_FLIDX_DONT_SCAN, &us->dflags), - delay_use * HZ); - } - - /* If the device is still connected, perform the scanning */ - if (!test_bit(US_FLIDX_DONT_SCAN, &us->dflags)) { - /* For bulk-only devices, determine the max LUN value */ - if (us->protocol == USB_PR_BULK - && !(us->fflags & US_FL_SINGLE_LUN)) { - mutex_lock(&us->dev_mutex); - us->max_lun = usb_stor_Bulk_max_lun(us); - mutex_unlock(&us->dev_mutex); - } - scsi_scan_host(us_to_host(us)); - pr_info("EUCR : device scan complete\n"); - } - complete_and_exit(&us->scanning_done, 0); -} - -static int eucr_probe(struct usb_interface *intf, - const struct usb_device_id *id) -{ - struct Scsi_Host *host; - struct us_data *us; - int result; - u8 MiscReg03 = 0; - struct task_struct *th; - - pr_info("usb --- eucr_probe\n"); - - host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us)); - if (!host) { - pr_info("Unable to allocate the scsi host\n"); - return -ENOMEM; - } - - /* Allow 16-byte CDBs and thus > 2TB */ - host->max_cmd_len = 16; - us = host_to_us(host); - memset(us, 0, sizeof(struct us_data)); - mutex_init(&(us->dev_mutex)); - init_completion(&us->cmnd_ready); - init_completion(&(us->notify)); - init_waitqueue_head(&us->delay_wait); - init_completion(&us->scanning_done); - - /* Associate the us_data structure with the USB device */ - result = associate_dev(us, intf); - if (result) - goto BadDevice; - - /* Get Device info */ - result = get_device_info(us, id); - if (result) - goto BadDevice; - - /* Get the transport, protocol, and pipe settings */ - result = get_transport(us); - if (result) - goto BadDevice; - result = get_protocol(us); - if (result) - goto BadDevice; - result = get_pipes(us); - if (result) - goto BadDevice; - - /* Acquire all the other resources and add the host */ - result = usb_stor_acquire_resources(us); - if (result) - goto BadDevice; - - result = scsi_add_host(host, &intf->dev); - if (result) { - pr_info("Unable to add the scsi host\n"); - goto BadDevice; - } - - /* Start up the thread for delayed SCSI-device scanning */ - th = kthread_create(usb_stor_scan_thread, us, "eucr-stor-scan"); - if (IS_ERR(th)) { - pr_info("Unable to start the device-scanning thread\n"); - complete(&us->scanning_done); - quiesce_and_remove_host(us); - result = PTR_ERR(th); - goto BadDevice; - } - wake_up_process(th); - - /* probe card type */ - result = ene_read_byte(us, REG_CARD_STATUS, &MiscReg03); - if (result != USB_STOR_XFER_GOOD) { - result = USB_STOR_TRANSPORT_ERROR; - quiesce_and_remove_host(us); - goto BadDevice; - } - - if (!(MiscReg03 & 0x02)) { - result = -ENODEV; - quiesce_and_remove_host(us); - pr_info("keucr: The driver only supports SM/MS card. To use SD card, please build driver/usb/storage/ums-eneub6250.ko\n"); - goto BadDevice; - } - - return 0; - - /* We come here if there are any problems */ -BadDevice: - pr_info("usb --- eucr_probe failed\n"); - release_everything(us); - return result; -} - -static void eucr_disconnect(struct usb_interface *intf) -{ - struct us_data *us = usb_get_intfdata(intf); - - pr_info("usb --- eucr_disconnect\n"); - quiesce_and_remove_host(us); - release_everything(us); -} - -/* Initialization and registration */ -static struct usb_driver usb_storage_driver = { - .name = "eucr", - .probe = eucr_probe, - .suspend = eucr_suspend, - .resume = eucr_resume, - .reset_resume = eucr_reset_resume, - .disconnect = eucr_disconnect, - .pre_reset = eucr_pre_reset, - .post_reset = eucr_post_reset, - .id_table = eucr_usb_ids, - .soft_unbind = 1, -}; - -module_usb_driver(usb_storage_driver); diff --git a/drivers/staging/keucr/usb.h b/drivers/staging/keucr/usb.h deleted file mode 100644 index e894f840c708..000000000000 --- a/drivers/staging/keucr/usb.h +++ /dev/null @@ -1,240 +0,0 @@ -/* Driver for USB Mass Storage compliant devices */ - -#ifndef _USB_H_ -#define _USB_H_ - -#include -#include -#include -#include -#include -#include -#include "common.h" - -struct us_data; -struct scsi_cmnd; - -/* - * Unusual device list definitions - */ - -struct us_unusual_dev { - const char *vendorName; - const char *productName; - __u8 useProtocol; - __u8 useTransport; - int (*initFunction)(struct us_data *); -}; - -/* EnE HW Register */ -#define REG_CARD_STATUS 0xFF83 -#define REG_HW_TRAP1 0xFF89 - -/* SRB Status. Refers /usr/include/wine/wine/wnaspi32.h & SCSI sense key */ -#define SS_SUCCESS 0x00 /* No Sense */ -#define SS_NOT_READY 0x02 -#define SS_MEDIUM_ERR 0x03 -#define SS_HW_ERR 0x04 -#define SS_ILLEGAL_REQUEST 0x05 -#define SS_UNIT_ATTENTION 0x06 - -/* ENE Load FW Pattern */ -#define SD_INIT1_PATTERN 1 -#define SD_INIT2_PATTERN 2 -#define SD_RW_PATTERN 3 -#define MS_INIT_PATTERN 4 -#define MSP_RW_PATTERN 5 -#define MS_RW_PATTERN 6 -#define SM_INIT_PATTERN 7 -#define SM_RW_PATTERN 8 - -#define FDIR_WRITE 0 -#define FDIR_READ 1 - -struct keucr_sd_status { - u8 Insert:1; - u8 Ready:1; - u8 MediaChange:1; - u8 IsMMC:1; - u8 HiCapacity:1; - u8 HiSpeed:1; - u8 WtP:1; - u8 Reserved:1; -}; - -struct keucr_ms_status { - u8 Insert:1; - u8 Ready:1; - u8 MediaChange:1; - u8 IsMSPro:1; - u8 IsMSPHG:1; - u8 Reserved1:1; - u8 WtP:1; - u8 Reserved2:1; -}; - -struct keucr_sm_status { - u8 Insert:1; - u8 Ready:1; - u8 MediaChange:1; - u8 Reserved:3; - u8 WtP:1; - u8 IsMS:1; -}; - -/* SD Block Length */ -#define SD_BLOCK_LEN 9 /* 2^9 = 512 Bytes, - The HW maximum read/write data length */ - -/* Dynamic bitflag definitions (us->dflags): used in set_bit() etc. */ -#define US_FLIDX_URB_ACTIVE 0 /* current_urb is in use */ -#define US_FLIDX_SG_ACTIVE 1 /* current_sg is in use */ -#define US_FLIDX_ABORTING 2 /* abort is in progress */ -#define US_FLIDX_DISCONNECTING 3 /* disconnect in progress */ -#define US_FLIDX_RESETTING 4 /* device reset in progress */ -#define US_FLIDX_TIMED_OUT 5 /* SCSI midlayer timed out */ -#define US_FLIDX_DONT_SCAN 6 /* don't scan (disconnect) */ - - -#define USB_STOR_STRING_LEN 32 - -/* - * We provide a DMA-mapped I/O buffer for use with small USB transfers. - * It turns out that CB[I] needs a 12-byte buffer and Bulk-only needs a - * 31-byte buffer. But Freecom needs a 64-byte buffer, so that's the - * size we'll allocate. - */ - -#define US_IOBUF_SIZE 64 /* Size of the DMA-mapped I/O buffer */ -#define US_SENSE_SIZE 18 /* Size of the autosense data buffer */ - -typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *); -typedef int (*trans_reset)(struct us_data *); -typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *); -typedef void (*extra_data_destructor)(void *); /* extra data destructor */ -typedef void (*pm_hook)(struct us_data *, int); /* power management hook */ - -#define US_SUSPEND 0 -#define US_RESUME 1 - -/* we allocate one of these for every device that we remember */ -struct us_data { - /* The device we're working with - * It's important to note: - * (o) you must hold dev_mutex to change pusb_dev - */ - struct mutex dev_mutex; /* protect pusb_dev */ - struct usb_device *pusb_dev; /* this usb_device */ - struct usb_interface *pusb_intf; /* this interface */ - struct us_unusual_dev *unusual_dev; /* device-filter entry */ - unsigned long fflags; /* fixed flags from filter */ - unsigned long dflags; /* dynamic atomic bitflags */ - unsigned int send_bulk_pipe; /* cached pipe values */ - unsigned int recv_bulk_pipe; - unsigned int send_ctrl_pipe; - unsigned int recv_ctrl_pipe; - unsigned int recv_intr_pipe; - - /* information about the device */ - char *transport_name; - char *protocol_name; - __le32 bcs_signature; - u8 subclass; - u8 protocol; - u8 max_lun; - - u8 ifnum; /* interface number */ - u8 ep_bInterval; /* interrupt interval */ - - /* function pointers for this device */ - trans_cmnd transport; /* transport function */ - trans_reset transport_reset; /* transport device reset */ - proto_cmnd proto_handler; /* protocol handler */ - - /* SCSI interfaces */ - struct scsi_cmnd *srb; /* current srb */ - unsigned int tag; /* current dCBWTag */ - - /* control and bulk communications data */ - struct urb *current_urb; /* USB requests */ - struct usb_ctrlrequest *cr; /* control requests */ - struct usb_sg_request current_sg; /* scatter-gather req. */ - unsigned char *iobuf; /* I/O buffer */ - unsigned char *sensebuf; /* sense data buffer */ - dma_addr_t cr_dma; /* buffer DMA addresses */ - dma_addr_t iobuf_dma; - struct task_struct *ctl_thread; /* the control thread */ - - /* mutual exclusion and synchronization structures */ - struct completion cmnd_ready; /* to sleep thread on */ - struct completion notify; /* thread begin/end */ - wait_queue_head_t delay_wait; /* wait during scan, reset */ - struct completion scanning_done; /* wait for scan thread */ - - /* subdriver information */ - void *extra; /* Any extra data */ - extra_data_destructor extra_destructor;/* extra data destructor */ -#ifdef CONFIG_PM - pm_hook suspend_resume_hook; -#endif - /* for 6250 code */ - struct keucr_sd_status SD_Status; - struct keucr_ms_status MS_Status; - struct keucr_sm_status SM_Status; - - /* ----- SD Control Data ---------------- */ - /* SD_REGISTER SD_Regs; */ - u16 SD_Block_Mult; - u8 SD_READ_BL_LEN; - u16 SD_C_SIZE; - u8 SD_C_SIZE_MULT; - - /* SD/MMC New spec. */ - u8 SD_SPEC_VER; - u8 SD_CSD_VER; - u8 SD20_HIGH_CAPACITY; - u32 HC_C_SIZE; - u8 MMC_SPEC_VER; - u8 MMC_BusWidth; - u8 MMC_HIGH_CAPACITY; - - /* ----- MS Control Data ---------------- */ - bool MS_SWWP; - u32 MSP_TotalBlock; - /* MS_LibControl MS_Lib; */ - bool MS_IsRWPage; - u16 MS_Model; - - /* ----- SM Control Data ---------------- */ - u8 SM_DeviceID; - u8 SM_CardID; - - u8 *testbuf; - u8 BIN_FLAG; - u32 bl_num; - int SrbStatus; - - /* ------Power Managerment --------------- */ - bool Power_IsResum; -}; - -/* Convert between us_data and the corresponding Scsi_Host */ -static inline struct Scsi_Host *us_to_host(struct us_data *us) -{ - return container_of((void *) us, struct Scsi_Host, hostdata); -} -static inline struct us_data *host_to_us(struct Scsi_Host *host) -{ - return (struct us_data *) host->hostdata; -} - -/* Function to fill an inquiry response. See usb.c for details */ -extern void fill_inquiry_response(struct us_data *us, - unsigned char *data, unsigned int data_len); - -/* The scsi_lock() and scsi_unlock() macros protect the sm_state and the - * single queue element srb for write access */ -#define scsi_unlock(host) spin_unlock_irq(host->host_lock) -#define scsi_lock(host) spin_lock_irq(host->host_lock) - -#endif -- cgit From 21ad9f74c6ee00eeae8084c82c4aa22ef7c3574b Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Thu, 24 Jul 2014 20:52:57 +0300 Subject: staging: phison: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been cleaned up and it doesn't look like anyone is working on it anymore (including the original author). So remove the driver from the kernel. If someone wants to work on cleaning it up and moving it out of staging, this commit can be reverted. Signed-off-by: Kristina MartÅ¡enko Cc: Evan Ko Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/phison/Kconfig | 5 --- drivers/staging/phison/Makefile | 1 - drivers/staging/phison/phison.c | 94 ----------------------------------------- 5 files changed, 103 deletions(-) delete mode 100644 drivers/staging/phison/Kconfig delete mode 100644 drivers/staging/phison/Makefile delete mode 100644 drivers/staging/phison/phison.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 5b14f0d8d1b8..be3f91c64f78 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -54,8 +54,6 @@ source "drivers/staging/rtl8821ae/Kconfig" source "drivers/staging/rts5208/Kconfig" -source "drivers/staging/phison/Kconfig" - source "drivers/staging/line6/Kconfig" source "drivers/staging/octeon/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index d4536df8b69b..a4408a8db812 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -19,7 +19,6 @@ obj-$(CONFIG_R8192EE) += rtl8192ee/ obj-$(CONFIG_R8723AU) += rtl8723au/ obj-$(CONFIG_R8821AE) += rtl8821ae/ obj-$(CONFIG_RTS5208) += rts5208/ -obj-$(CONFIG_IDE_PHISON) += phison/ obj-$(CONFIG_LINE6_USB) += line6/ obj-$(CONFIG_NETLOGIC_XLR_NET) += netlogic/ obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ diff --git a/drivers/staging/phison/Kconfig b/drivers/staging/phison/Kconfig deleted file mode 100644 index 1b56119a7657..000000000000 --- a/drivers/staging/phison/Kconfig +++ /dev/null @@ -1,5 +0,0 @@ -config IDE_PHISON - tristate "PCIE ATA PS5000 IDE support" - depends on PCI && ATA && ATA_SFF && ATA_BMDMA - ---help--- - This is an experimental driver for PS5000 IDE driver. diff --git a/drivers/staging/phison/Makefile b/drivers/staging/phison/Makefile deleted file mode 100644 index 7642a2190e91..000000000000 --- a/drivers/staging/phison/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_IDE_PHISON) += phison.o diff --git a/drivers/staging/phison/phison.c b/drivers/staging/phison/phison.c deleted file mode 100644 index 3826561e7742..000000000000 --- a/drivers/staging/phison/phison.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2006 Red Hat - * - * May be copied or modified under the terms of the GNU General Public License - * - * [Modify History] - * #0001, Evan, 2008.10.22, V0.00, New release. - * #0002, Evan, 2008.11.01, V0.90, Test Work In Ubuntu Linux 8.04. - * #0003, Evan, 2008.01.08, V0.91, Change Name "PCIE-SSD" to "E-BOX". - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define PHISON_DEBUG - -#define DRV_NAME "phison_e-box" /* #0003 */ -#define DRV_VERSION "0.91" /* #0003 */ - -#define PCI_VENDOR_ID_PHISON 0x1987 -#define PCI_DEVICE_ID_PS5000 0x5000 - -static int phison_pre_reset(struct ata_link *link, unsigned long deadline) -{ - int ret; - struct ata_port *ap = link->ap; - - ap->cbl = ATA_CBL_NONE; - ret = ata_std_prereset(link, deadline); - dev_dbg(ap->dev, "phison_pre_reset(), ret = %x\n", ret); - return ret; -} - -static struct scsi_host_template phison_sht = { - ATA_BMDMA_SHT(DRV_NAME), -}; - -static struct ata_port_operations phison_ops = { - .inherits = &ata_bmdma_port_ops, - .prereset = phison_pre_reset, -}; - -static int phison_init_one(struct pci_dev *pdev, const struct pci_device_id *id) -{ - int ret; - struct ata_port_info info = { - .flags = ATA_FLAG_NO_ATAPI, - - .pio_mask = 0x1f, - .mwdma_mask = 0x07, - .udma_mask = ATA_UDMA5, - - .port_ops = &phison_ops, - }; - const struct ata_port_info *ppi[] = { &info, NULL }; - - ret = ata_pci_bmdma_init_one(pdev, ppi, &phison_sht, NULL, 0); - - dev_dbg(&pdev->dev, "phison_init_one(), ret = %x\n", ret); - - return ret; -} - -static const struct pci_device_id phison_pci_tbl[] = { - { PCI_DEVICE(PCI_VENDOR_ID_PHISON, PCI_DEVICE_ID_PS5000), - PCI_CLASS_STORAGE_IDE << 8, 0xffff00, 0 }, - { 0, }, -}; -MODULE_DEVICE_TABLE(pci, phison_pci_tbl); - -static struct pci_driver phison_pci_driver = { - .name = DRV_NAME, - .id_table = phison_pci_tbl, - .probe = phison_init_one, - .remove = ata_pci_remove_one, -#ifdef CONFIG_PM /* haven't tested it. */ - .suspend = ata_pci_device_suspend, - .resume = ata_pci_device_resume, -#endif -}; - -module_pci_driver(phison_pci_driver); - -MODULE_AUTHOR("Evan Ko"); -MODULE_DESCRIPTION("PCIE driver module for PHISON PS5000 E-BOX"); -MODULE_LICENSE("GPL"); -MODULE_VERSION(DRV_VERSION); -- cgit From 0be013e3dc2ee79ffab8a438bbb4e216837e3d52 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Thu, 24 Jul 2014 21:58:46 +0300 Subject: staging: quickstart: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been cleaned up and it doesn't look like anyone is working on it anymore (including the original author). So remove the driver from the kernel. If someone wants to work on cleaning it up and moving it out of staging, this commit can be reverted. Signed-off-by: Kristina MartÅ¡enko Cc: Angelo Arrifano Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/quickstart/Kconfig | 10 - drivers/staging/quickstart/Makefile | 1 - drivers/staging/quickstart/quickstart.c | 458 -------------------------------- 5 files changed, 472 deletions(-) delete mode 100644 drivers/staging/quickstart/Kconfig delete mode 100644 drivers/staging/quickstart/Makefile delete mode 100644 drivers/staging/quickstart/quickstart.c (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index be3f91c64f78..b08394cd9604 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -70,8 +70,6 @@ source "drivers/staging/iio/Kconfig" source "drivers/staging/xgifb/Kconfig" -source "drivers/staging/quickstart/Kconfig" - source "drivers/staging/emxx_udc/Kconfig" source "drivers/staging/bcm/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index a4408a8db812..962330817fa4 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -29,7 +29,6 @@ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_FB_XGI) += xgifb/ -obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/ obj-$(CONFIG_USB_EMXX) += emxx_udc/ obj-$(CONFIG_BCM_WIMAX) += bcm/ obj-$(CONFIG_FT1000) += ft1000/ diff --git a/drivers/staging/quickstart/Kconfig b/drivers/staging/quickstart/Kconfig deleted file mode 100644 index 5bea4875d373..000000000000 --- a/drivers/staging/quickstart/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ -config ACPI_QUICKSTART - tristate "ACPI Quickstart key driver" - depends on ACPI && INPUT - help - Say Y here if you have a platform that supports the ACPI - quickstart key protocol. - - To compile this driver as a module, choose M here: the module will be - called quickstart. - diff --git a/drivers/staging/quickstart/Makefile b/drivers/staging/quickstart/Makefile deleted file mode 100644 index 290e0e476797..000000000000 --- a/drivers/staging/quickstart/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_ACPI_QUICKSTART) += quickstart.o diff --git a/drivers/staging/quickstart/quickstart.c b/drivers/staging/quickstart/quickstart.c deleted file mode 100644 index a85c3d68c462..000000000000 --- a/drivers/staging/quickstart/quickstart.c +++ /dev/null @@ -1,458 +0,0 @@ -/* - * quickstart.c - ACPI Direct App Launch driver - * - * - * Copyright (C) 2007-2010 Angelo Arrifano - * - * Information gathered from disassembled dsdt and from here: - * - * - * 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 - * - */ - -#define QUICKSTART_VERSION "1.04" - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include - -MODULE_AUTHOR("Angelo Arrifano"); -MODULE_DESCRIPTION("ACPI Direct App Launch driver"); -MODULE_LICENSE("GPL"); - -#define QUICKSTART_ACPI_DEVICE_NAME "quickstart" -#define QUICKSTART_ACPI_CLASS "quickstart" -#define QUICKSTART_ACPI_HID "PNP0C32" - -#define QUICKSTART_PF_DRIVER_NAME "quickstart" -#define QUICKSTART_PF_DEVICE_NAME "quickstart" - -/* - * There will be two events: - * 0x02 - A hot button was pressed while device was off/sleeping. - * 0x80 - A hot button was pressed while device was up. - */ -#define QUICKSTART_EVENT_WAKE 0x02 -#define QUICKSTART_EVENT_RUNTIME 0x80 - -struct quickstart_button { - char *name; - unsigned int id; - struct list_head list; -}; - -struct quickstart_acpi { - struct acpi_device *device; - struct quickstart_button *button; -}; - -static LIST_HEAD(buttons); -static struct quickstart_button *pressed; - -static struct input_dev *quickstart_input; - -/* Platform driver functions */ -static ssize_t buttons_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - int count = 0; - struct quickstart_button *b; - - if (list_empty(&buttons)) - return snprintf(buf, PAGE_SIZE, "none"); - - list_for_each_entry(b, &buttons, list) { - count += snprintf(buf + count, PAGE_SIZE - count, "%u\t%s\n", - b->id, b->name); - - if (count >= PAGE_SIZE) { - count = PAGE_SIZE; - break; - } - } - - return count; -} - -static ssize_t pressed_button_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - return scnprintf(buf, PAGE_SIZE, "%s\n", - (pressed ? pressed->name : "none")); -} - - -static ssize_t pressed_button_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - if (count < 2) - return -EINVAL; - - if (strncasecmp(buf, "none", 4) != 0) - return -EINVAL; - - pressed = NULL; - return count; -} - -/* Helper functions */ -static struct quickstart_button *quickstart_buttons_add(void) -{ - struct quickstart_button *b; - - b = kzalloc(sizeof(*b), GFP_KERNEL); - if (!b) - return NULL; - - list_add_tail(&b->list, &buttons); - - return b; -} - -static void quickstart_button_del(struct quickstart_button *data) -{ - if (!data) - return; - - list_del(&data->list); - kfree(data->name); - kfree(data); -} - -static void quickstart_buttons_free(void) -{ - struct quickstart_button *b, *n; - - list_for_each_entry_safe(b, n, &buttons, list) - quickstart_button_del(b); -} - -/* ACPI Driver functions */ -static void quickstart_acpi_notify(acpi_handle handle, u32 event, void *data) -{ - struct quickstart_acpi *quickstart = data; - - if (!quickstart) - return; - - switch (event) { - case QUICKSTART_EVENT_WAKE: - pressed = quickstart->button; - break; - case QUICKSTART_EVENT_RUNTIME: - input_report_key(quickstart_input, quickstart->button->id, 1); - input_sync(quickstart_input); - input_report_key(quickstart_input, quickstart->button->id, 0); - input_sync(quickstart_input); - break; - default: - pr_err("Unexpected ACPI event notify (%u)\n", event); - break; - } -} - -static int quickstart_acpi_ghid(struct quickstart_acpi *quickstart) -{ - acpi_status status; - struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; - int ret = 0; - - /* - * This returns a buffer telling the button usage ID, - * and triggers pending notify events (The ones before booting). - */ - status = acpi_evaluate_object(quickstart->device->handle, "GHID", NULL, - &buffer); - if (ACPI_FAILURE(status)) { - pr_err("%s GHID method failed\n", quickstart->button->name); - return -EINVAL; - } - - /* - * <> - */ - switch (buffer.length) { - case 1: - quickstart->button->id = *(uint8_t *)buffer.pointer; - break; - case 2: - quickstart->button->id = *(uint16_t *)buffer.pointer; - break; - case 4: - quickstart->button->id = *(uint32_t *)buffer.pointer; - break; - case 8: - quickstart->button->id = *(uint64_t *)buffer.pointer; - break; - default: - pr_err("%s GHID method returned buffer of unexpected length %lu\n", - quickstart->button->name, - (unsigned long)buffer.length); - ret = -EINVAL; - break; - } - - kfree(buffer.pointer); - - return ret; -} - -static int quickstart_acpi_config(struct quickstart_acpi *quickstart) -{ - char *bid = acpi_device_bid(quickstart->device); - char *name; - - name = kmalloc(strlen(bid) + 1, GFP_KERNEL); - if (!name) - return -ENOMEM; - - /* Add new button to list */ - quickstart->button = quickstart_buttons_add(); - if (!quickstart->button) { - kfree(name); - return -ENOMEM; - } - - quickstart->button->name = name; - strcpy(quickstart->button->name, bid); - - return 0; -} - -static int quickstart_acpi_add(struct acpi_device *device) -{ - int ret; - acpi_status status; - struct quickstart_acpi *quickstart; - - if (!device) - return -EINVAL; - - quickstart = kzalloc(sizeof(*quickstart), GFP_KERNEL); - if (!quickstart) - return -ENOMEM; - - quickstart->device = device; - - strcpy(acpi_device_name(device), QUICKSTART_ACPI_DEVICE_NAME); - strcpy(acpi_device_class(device), QUICKSTART_ACPI_CLASS); - device->driver_data = quickstart; - - /* Add button to list and initialize some stuff */ - ret = quickstart_acpi_config(quickstart); - if (ret < 0) - goto fail_config; - - status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY, - quickstart_acpi_notify, - quickstart); - if (ACPI_FAILURE(status)) { - pr_err("Notify handler install error\n"); - ret = -ENODEV; - goto fail_installnotify; - } - - ret = quickstart_acpi_ghid(quickstart); - if (ret < 0) - goto fail_ghid; - - return 0; - -fail_ghid: - acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, - quickstart_acpi_notify); - -fail_installnotify: - quickstart_button_del(quickstart->button); - -fail_config: - - kfree(quickstart); - - return ret; -} - -static int quickstart_acpi_remove(struct acpi_device *device) -{ - acpi_status status; - struct quickstart_acpi *quickstart; - - if (!device) - return -EINVAL; - - quickstart = acpi_driver_data(device); - if (!quickstart) - return -EINVAL; - - status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, - quickstart_acpi_notify); - if (ACPI_FAILURE(status)) - pr_err("Error removing notify handler\n"); - - kfree(quickstart); - - return 0; -} - -/* Platform driver structs */ -static DEVICE_ATTR_RW(pressed_button); -static DEVICE_ATTR_RO(buttons); -static struct platform_device *pf_device; -static struct platform_driver pf_driver = { - .driver = { - .name = QUICKSTART_PF_DRIVER_NAME, - .owner = THIS_MODULE, - } -}; - -static const struct acpi_device_id quickstart_device_ids[] = { - {QUICKSTART_ACPI_HID, 0}, - {"", 0}, -}; - -static struct acpi_driver quickstart_acpi_driver = { - .name = "quickstart", - .class = QUICKSTART_ACPI_CLASS, - .ids = quickstart_device_ids, - .ops = { - .add = quickstart_acpi_add, - .remove = quickstart_acpi_remove, - }, -}; - -/* Module functions */ -static void quickstart_exit(void) -{ - input_unregister_device(quickstart_input); - - device_remove_file(&pf_device->dev, &dev_attr_pressed_button); - device_remove_file(&pf_device->dev, &dev_attr_buttons); - - platform_device_unregister(pf_device); - - platform_driver_unregister(&pf_driver); - - acpi_bus_unregister_driver(&quickstart_acpi_driver); - - quickstart_buttons_free(); -} - -static int __init quickstart_init_input(void) -{ - struct quickstart_button *b; - int ret; - - quickstart_input = input_allocate_device(); - - if (!quickstart_input) - return -ENOMEM; - - quickstart_input->name = "Quickstart ACPI Buttons"; - quickstart_input->id.bustype = BUS_HOST; - - list_for_each_entry(b, &buttons, list) { - set_bit(EV_KEY, quickstart_input->evbit); - set_bit(b->id, quickstart_input->keybit); - } - - ret = input_register_device(quickstart_input); - if (ret) { - input_free_device(quickstart_input); - return ret; - } - - return 0; -} - -static int __init quickstart_init(void) -{ - int ret; - - /* ACPI driver register */ - ret = acpi_bus_register_driver(&quickstart_acpi_driver); - if (ret) - return ret; - - /* If existing bus with no devices */ - if (list_empty(&buttons)) { - ret = -ENODEV; - goto fail_pfdrv_reg; - } - - /* Platform driver register */ - ret = platform_driver_register(&pf_driver); - if (ret) - goto fail_pfdrv_reg; - - /* Platform device register */ - pf_device = platform_device_alloc(QUICKSTART_PF_DEVICE_NAME, -1); - if (!pf_device) { - ret = -ENOMEM; - goto fail_pfdev_alloc; - } - ret = platform_device_add(pf_device); - if (ret) - goto fail_pfdev_add; - - /* Create device sysfs file */ - ret = device_create_file(&pf_device->dev, &dev_attr_pressed_button); - if (ret) - goto fail_dev_file; - - ret = device_create_file(&pf_device->dev, &dev_attr_buttons); - if (ret) - goto fail_dev_file2; - - /* Input device */ - ret = quickstart_init_input(); - if (ret) - goto fail_input; - - pr_info("ACPI Direct App Launch ver %s\n", QUICKSTART_VERSION); - - return 0; -fail_input: - device_remove_file(&pf_device->dev, &dev_attr_buttons); - -fail_dev_file2: - device_remove_file(&pf_device->dev, &dev_attr_pressed_button); - -fail_dev_file: - platform_device_del(pf_device); - -fail_pfdev_add: - platform_device_put(pf_device); - -fail_pfdev_alloc: - platform_driver_unregister(&pf_driver); - -fail_pfdrv_reg: - acpi_bus_unregister_driver(&quickstart_acpi_driver); - - return ret; -} - -module_init(quickstart_init); -module_exit(quickstart_exit); -- cgit From de35c94178d6315f6def773a2137bc82a840f3d8 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 23 Jul 2014 10:41:18 +0100 Subject: staging: comedi: ni_65xx: add ni_65xx_num_ports() Add a function to return the total number of digital I/O, digital input, and digital output ports on the board. Each port has 8 channels (bits). Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index aba6fbbe340a..0f9185ebda66 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -296,17 +296,19 @@ struct ni_65xx_private { void __iomem *mmio; }; -static void ni_65xx_disable_input_filters(struct comedi_device *dev) +static unsigned int ni_65xx_num_ports(struct comedi_device *dev) { const struct ni_65xx_board *board = comedi_board(dev); + + return board->num_dio_ports + board->num_di_ports + board->num_do_ports; +} + +static void ni_65xx_disable_input_filters(struct comedi_device *dev) +{ struct ni_65xx_private *devpriv = dev->private; - unsigned num_ports; + unsigned int num_ports = ni_65xx_num_ports(dev); int i; - num_ports = board->num_dio_ports + - board->num_di_ports + - board->num_do_ports; - /* disable input filtering on all ports */ for (i = 0; i < num_ports; ++i) writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); -- cgit From a5e7d93da17715aacbad64951a49aadb06071a4d Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 23 Jul 2014 10:41:19 +0100 Subject: staging: comedi: ni_65xx: refactor edge detection configuration Refactor the code that updates the rising and falling edge detection registers into new function `ni_65xx_update_edge_detection()`. This updates the rising and falling edge detection registers for up to 32 channels starting at an arbitrary channel. Call it from the code that handles the `INSN_CONFIG_CHANGE_NOTIFY` instruction, which is limited to the first 32 channels. (For the purposes of edge detection, the channels are in the natural port order of the board, 8 channels per port. In practice, this is all the digital I/O channels (if any), followed by all the digital input channels (if any), followed by all the digital output channels (if any). Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 71 ++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 0f9185ebda66..f7566fe461b4 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -317,6 +317,54 @@ static void ni_65xx_disable_input_filters(struct comedi_device *dev) writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); } +/* updates edge detection for base_chan to base_chan+31 */ +static void ni_65xx_update_edge_detection(struct comedi_device *dev, + unsigned int base_chan, + unsigned int rising, + unsigned int falling) +{ + struct ni_65xx_private *devpriv = dev->private; + unsigned int num_ports = ni_65xx_num_ports(dev); + unsigned int port; + + if (base_chan >= NI_65XX_PORT_TO_CHAN(num_ports)) + return; + + for (port = NI_65XX_CHAN_TO_PORT(base_chan); port < num_ports; port++) { + int bitshift = (int)(NI_65XX_PORT_TO_CHAN(port) - base_chan); + unsigned int port_mask, port_rising, port_falling; + + if (bitshift >= 32) + break; + + if (bitshift >= 0) { + port_mask = ~0U >> bitshift; + port_rising = rising >> bitshift; + port_falling = falling >> bitshift; + } else { + port_mask = ~0U << -bitshift; + port_rising = rising << -bitshift; + port_falling = falling << -bitshift; + } + if (port_mask & 0xff) { + if (~port_mask & 0xff) { + port_rising |= + readb(devpriv->mmio + + NI_65XX_RISE_EDGE_ENA_REG(port)) & + ~port_mask; + port_falling |= + readb(devpriv->mmio + + NI_65XX_FALL_EDGE_ENA_REG(port)) & + ~port_mask; + } + writeb(port_rising & 0xff, + devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(port)); + writeb(port_falling & 0xff, + devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(port)); + } + } +} + static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -545,8 +593,6 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_65xx_private *devpriv = dev->private; - switch (data[0]) { case INSN_CONFIG_CHANGE_NOTIFY: /* add instruction to check_insn_config_length() */ @@ -556,26 +602,7 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, /* * This only works for the first 4 ports (32 channels)! */ - - /* set the channels to monitor for rising edges */ - writeb(data[1] & 0xff, - devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(0)); - writeb((data[1] >> 8) & 0xff, - devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(1)); - writeb((data[1] >> 16) & 0xff, - devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(2)); - writeb((data[1] >> 24) & 0xff, - devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(3)); - - /* set the channels to monitor for falling edges */ - writeb(data[2] & 0xff, - devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(0)); - writeb((data[2] >> 8) & 0xff, - devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(1)); - writeb((data[2] >> 16) & 0xff, - devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(2)); - writeb((data[2] >> 24) & 0xff, - devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(3)); + ni_65xx_update_edge_detection(dev, 0, data[1], data[2]); break; default: return -EINVAL; -- cgit From 3443d1c6d1b0914447b253e6ae0194cc9e2cf137 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 23 Jul 2014 10:41:20 +0100 Subject: staging: comedi: ni_65xx: support INSN_CONFIG_DIGITAL_TRIG The "edge detection interrupt" subdevice supports the `INSN_CONFIG_CHANGE_NOTIFY` comedi instruction which is only supported by one other driver. It is limited to the first 32 channels, but boards supported by this driver support edge detection on all digital I/O, digital input and digital output channels. The `INSN_CONFIG_DIGITAL_TRIG` comedi instruction is more flexible as it supports more than 32 channels (with multiple instructions). It can also support level detection, but the hardware does not support that. Add partial support for the `INSN_CONFIG_DIGITAL_TRIG` instruction, but only for edge detection. Since `INSN_CONFIG_CHANGE_NOTIFY` can only deal with 32 channels, make it disable edge detection for any remaining channels. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 39 +++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index f7566fe461b4..ddf9135d605c 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -365,6 +365,16 @@ static void ni_65xx_update_edge_detection(struct comedi_device *dev, } } +static void ni_65xx_disable_edge_detection(struct comedi_device *dev) +{ + /* clear edge detection for channels 0 to 31 */ + ni_65xx_update_edge_detection(dev, 0, 0, 0); + /* clear edge detection for channels 32 to 63 */ + ni_65xx_update_edge_detection(dev, 32, 0, 0); + /* clear edge detection for channels 64 to 95 */ + ni_65xx_update_edge_detection(dev, 64, 0, 0); +} + static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -599,10 +609,33 @@ static int ni_65xx_intr_insn_config(struct comedi_device *dev, if (insn->n != 3) return -EINVAL; - /* - * This only works for the first 4 ports (32 channels)! - */ + /* update edge detection for channels 0 to 31 */ ni_65xx_update_edge_detection(dev, 0, data[1], data[2]); + /* clear edge detection for channels 32 to 63 */ + ni_65xx_update_edge_detection(dev, 32, 0, 0); + /* clear edge detection for channels 64 to 95 */ + ni_65xx_update_edge_detection(dev, 64, 0, 0); + break; + case INSN_CONFIG_DIGITAL_TRIG: + /* check trigger number */ + if (data[1] != 0) + return -EINVAL; + /* check digital trigger operation */ + switch (data[2]) { + case COMEDI_DIGITAL_TRIG_DISABLE: + ni_65xx_disable_edge_detection(dev); + break; + case COMEDI_DIGITAL_TRIG_ENABLE_EDGES: + /* + * update edge detection for channels data[3] + * to (data[3] + 31) + */ + ni_65xx_update_edge_detection(dev, data[3], + data[4], data[5]); + break; + default: + return -EINVAL; + } break; default: return -EINVAL; -- cgit From 31adc05f747d1b0669a1a3f7b6db89d592e9e653 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 23 Jul 2014 10:41:21 +0100 Subject: staging: comedi: ni_65xx: disable edge detection on initialization When the hardware is being initialized, the edge detection interrupts are cleared and disabled. Also disable edge detection for all channels at this time so they start off in a known state. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index ddf9135d605c..1b8a397ea31e 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -804,6 +804,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, } ni_65xx_disable_input_filters(dev); + ni_65xx_disable_edge_detection(dev); return 0; } -- cgit From 71b1fd9ceadbc17dc1e5a1587959d158c0580773 Mon Sep 17 00:00:00 2001 From: Andrey Skvortsov Date: Thu, 24 Jul 2014 11:52:43 +0400 Subject: staging: lustre: obdclass: fix sparse warnings about static declaration Signed-off-by: Andrey Skvortsov Signed-off-by: Greg Kroah-Hartman --- .../lustre/lustre/obdclass/linux/linux-sysctl.c | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index a4cd46b182d9..38a9b319355e 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -52,7 +52,7 @@ #include "../../include/lprocfs_status.h" #ifdef CONFIG_SYSCTL -struct ctl_table_header *obd_table_header = NULL; +static struct ctl_table_header *obd_table_header; #endif @@ -79,8 +79,8 @@ enum { }; -int proc_set_timeout(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) +static int proc_set_timeout(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc; @@ -90,8 +90,8 @@ int proc_set_timeout(struct ctl_table *table, int write, void __user *buffer, return rc; } -int proc_memory_alloc(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) +static int proc_memory_alloc(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -114,8 +114,8 @@ int proc_memory_alloc(struct ctl_table *table, int write, void __user *buffer, return 0; } -int proc_pages_alloc(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) +static int proc_pages_alloc(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -138,7 +138,7 @@ int proc_pages_alloc(struct ctl_table *table, int write, void __user *buffer, return 0; } -int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, +static int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { char buf[22]; @@ -162,8 +162,8 @@ int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, return 0; } -int proc_pages_max(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) +static int proc_pages_max(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { char buf[22]; int len; @@ -186,7 +186,7 @@ int proc_pages_max(struct ctl_table *table, int write, void __user *buffer, return 0; } -int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, +static int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; @@ -228,7 +228,7 @@ int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, return rc; } -int proc_alloc_fail_rate(struct ctl_table *table, int write, +static int proc_alloc_fail_rate(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; -- cgit From fc1cfd3a5444c989fe9f5f6dbb5eaf4e24d982e0 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Fri, 25 Jul 2014 00:26:53 +0900 Subject: staging: dgnc: Fix space required after that ',' This patch fixes checkpatch errors: "space required after that ','" Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_driver.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_driver.h b/drivers/staging/dgnc/dgnc_driver.h index fe5ea903bbe2..b40ee2c9f61c 100644 --- a/drivers/staging/dgnc/dgnc_driver.h +++ b/drivers/staging/dgnc/dgnc_driver.h @@ -219,8 +219,8 @@ * Makes spotting lock/unlock locations easier. */ # define DGNC_SPINLOCK_INIT(x) spin_lock_init(&(x)) -# define DGNC_LOCK(x,y) spin_lock_irqsave(&(x), y) -# define DGNC_UNLOCK(x,y) spin_unlock_irqrestore(&(x), y) +# define DGNC_LOCK(x, y) spin_lock_irqsave(&(x), y) +# define DGNC_UNLOCK(x, y) spin_unlock_irqrestore(&(x), y) /* * All the possible states the driver can be while being loaded. -- cgit From 99284f252bb1f9df82dbf6a01bef2b34c19b5083 Mon Sep 17 00:00:00 2001 From: Bernd Porr Date: Thu, 24 Jul 2014 14:34:32 +0100 Subject: staging: comedi: usbduxfast: adding missing break in case statement Added a missing "break" which forced the board to acquire 16 channels even when only 3 had been requested. Thanks for Hartley Sweeten to spot this bug. Signed-off-by: Bernd Porr Reported-by: H Hartley Sweeten Reviewed-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/usbduxfast.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 2490e88e7f32..f85818dd5e11 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -745,6 +745,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, 0x00, (0xff - 0x02) & rngmask, 0x00); usbduxfast_cmd_data(dev, 6, 0x01, 0x00, rngmask, 0x00); + break; case 16: if (CR_RANGE(cmd->chanlist[0]) > 0) -- cgit From 868bf4421d995ec289261f76f572f8abacd00412 Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Thu, 24 Jul 2014 19:46:51 +0900 Subject: staging: et131x: Fix typo in et131x This patch fix spelling typos in comments and printk within et131x. Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/et131x/et131x.c | 8 ++++---- drivers/staging/et131x/et131x.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/et131x/et131x.c b/drivers/staging/et131x/et131x.c index ada02430eacd..8bf1eb485163 100644 --- a/drivers/staging/et131x/et131x.c +++ b/drivers/staging/et131x/et131x.c @@ -285,7 +285,7 @@ struct fbr_lookup { dma_addr_t buffsize; }; -/* struct rx_ring is the sructure representing the adaptor's local +/* struct rx_ring is the structure representing the adaptor's local * reference(s) to the rings */ struct rx_ring { @@ -1941,7 +1941,7 @@ static void et131x_disable_interrupts(struct et131x_adapter *adapter) /* et131x_tx_dma_disable - Stop of Tx_DMA on the ET1310 */ static void et131x_tx_dma_disable(struct et131x_adapter *adapter) { - /* Setup the tramsmit dma configuration register */ + /* Setup the transmit dma configuration register */ writel(ET_TXDMA_CSR_HALT | ET_TXDMA_SNGL_EPKT, &adapter->regs->txdma.csr); } @@ -4023,7 +4023,7 @@ static void et131x_isr_handler(struct work_struct *work) if (status & ET_INTR_RXDMA_STAT_LOW) { /* Same idea as with the two Free Buffer Rings. Packets going * from the network to the host each consume a free buffer - * resource and a packet status resource. These resoures are + * resource and a packet status resource. These resources are * passed to the OS. When the OS is done with the resources, * they need to be returned to the ET1310. This is one method * of returning the resources. @@ -4631,7 +4631,7 @@ static int et131x_pci_setup(struct pci_dev *pdev, /* Allocate DMA memory */ rc = et131x_adapter_memory_alloc(adapter); if (rc < 0) { - dev_err(&pdev->dev, "Could not alloc adapater memory (DMA)\n"); + dev_err(&pdev->dev, "Could not alloc adapter memory (DMA)\n"); goto err_iounmap; } diff --git a/drivers/staging/et131x/et131x.h b/drivers/staging/et131x/et131x.h index 2ac6e9980117..3c0c4974fbdb 100644 --- a/drivers/staging/et131x/et131x.h +++ b/drivers/staging/et131x/et131x.h @@ -755,7 +755,7 @@ struct txmac_regs { /* Location: */ */ /* - * structure for Unicast Paket Filter Address 1 reg in rxmac address map + * structure for Unicast Packet Filter Address 1 reg in rxmac address map * located at address 0x4068 * * 31-24: addr1_3 @@ -769,7 +769,7 @@ struct txmac_regs { /* Location: */ #define ET_RX_UNI_PF_ADDR1_5_SHIFT 8 /* - * structure for Unicast Paket Filter Address 2 reg in rxmac address map + * structure for Unicast Packet Filter Address 2 reg in rxmac address map * located at address 0x406C * * 31-24: addr2_3 @@ -783,7 +783,7 @@ struct txmac_regs { /* Location: */ #define ET_RX_UNI_PF_ADDR2_5_SHIFT 8 /* - * structure for Unicast Paket Filter Address 1 & 2 reg in rxmac address map + * structure for Unicast Packet Filter Address 1 & 2 reg in rxmac address map * located at address 0x4070 * * 31-24: addr2_1 -- cgit From a34157d08e4befcbb5025cb7072966b8423babfd Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Thu, 24 Jul 2014 19:46:52 +0900 Subject: staging: et131x: Remove trailing semicolon from macros in et131x.h This patch removes trailing semicolon from macros within et131x.h Signed-off-by: Masanari Iida Signed-off-by: Greg Kroah-Hartman --- drivers/staging/et131x/et131x.h | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/et131x/et131x.h b/drivers/staging/et131x/et131x.h index 3c0c4974fbdb..1318439db13e 100644 --- a/drivers/staging/et131x/et131x.h +++ b/drivers/staging/et131x/et131x.h @@ -145,7 +145,7 @@ *31: selfclr_disable */ -#define ET_RESET_ALL 0x007F; +#define ET_RESET_ALL 0x007F /* * SLV Timer reg at address 0x002C (low 24 bits) @@ -394,7 +394,7 @@ struct txdma_regs { /* Location: */ * 11-0: psr ndes */ -#define ET_RXDMA_PSR_NUM_DES_MASK 0xFFF; +#define ET_RXDMA_PSR_NUM_DES_MASK 0xFFF /* * structure for packet status ring available offset reg in rxdma address map @@ -815,11 +815,11 @@ struct txmac_regs { /* Location: */ * 0: filter_broad_en */ -#define ET_RX_PFCTRL_MIN_PKT_SZ_SHIFT 16; -#define ET_RX_PFCTRL_FRAG_FILTER_ENABLE 0x0008; -#define ET_RX_PFCTRL_UNICST_FILTER_ENABLE 0x0004; -#define ET_RX_PFCTRL_MLTCST_FILTER_ENABLE 0x0002; -#define ET_RX_PFCTRL_BRDCST_FILTER_ENABLE 0x0001; +#define ET_RX_PFCTRL_MIN_PKT_SZ_SHIFT 16 +#define ET_RX_PFCTRL_FRAG_FILTER_ENABLE 0x0008 +#define ET_RX_PFCTRL_UNICST_FILTER_ENABLE 0x0004 +#define ET_RX_PFCTRL_MLTCST_FILTER_ENABLE 0x0002 +#define ET_RX_PFCTRL_BRDCST_FILTER_ENABLE 0x0001 /* * structure for Memory Controller Interface Control Max Segment reg in rxmac @@ -831,9 +831,9 @@ struct txmac_regs { /* Location: */ * 0: seg_en */ -#define ET_RX_MCIF_CTRL_MAX_SEG_SIZE_SHIFT 2; -#define ET_RX_MCIF_CTRL_MAX_SEG_FC_ENABLE 0x0002; -#define ET_RX_MCIF_CTRL_MAX_SEG_ENABLE 0x0001; +#define ET_RX_MCIF_CTRL_MAX_SEG_SIZE_SHIFT 2 +#define ET_RX_MCIF_CTRL_MAX_SEG_FC_ENABLE 0x0002 +#define ET_RX_MCIF_CTRL_MAX_SEG_ENABLE 0x0001 /* * structure for Memory Controller Interface Water Mark reg in rxmac address @@ -987,15 +987,15 @@ struct rxmac_regs { /* Location: */ * 0: full duplex */ -#define ET_MAC_CFG2_PREAMBLE_SHIFT 12; -#define ET_MAC_CFG2_IFMODE_MASK 0x0300; -#define ET_MAC_CFG2_IFMODE_1000 0x0200; -#define ET_MAC_CFG2_IFMODE_100 0x0100; -#define ET_MAC_CFG2_IFMODE_HUGE_FRAME 0x0020; -#define ET_MAC_CFG2_IFMODE_LEN_CHECK 0x0010; -#define ET_MAC_CFG2_IFMODE_PAD_CRC 0x0004; -#define ET_MAC_CFG2_IFMODE_CRC_ENABLE 0x0002; -#define ET_MAC_CFG2_IFMODE_FULL_DPLX 0x0001; +#define ET_MAC_CFG2_PREAMBLE_SHIFT 12 +#define ET_MAC_CFG2_IFMODE_MASK 0x0300 +#define ET_MAC_CFG2_IFMODE_1000 0x0200 +#define ET_MAC_CFG2_IFMODE_100 0x0100 +#define ET_MAC_CFG2_IFMODE_HUGE_FRAME 0x0020 +#define ET_MAC_CFG2_IFMODE_LEN_CHECK 0x0010 +#define ET_MAC_CFG2_IFMODE_PAD_CRC 0x0004 +#define ET_MAC_CFG2_IFMODE_CRC_ENABLE 0x0002 +#define ET_MAC_CFG2_IFMODE_FULL_DPLX 0x0001 /* * structure for Interpacket gap reg in mac address map. @@ -1084,7 +1084,7 @@ struct rxmac_regs { /* Location: */ * 15-0: phy control */ -#define ET_MAC_MIIMGMT_STAT_PHYCRTL_MASK 0xFFFF; +#define ET_MAC_MIIMGMT_STAT_PHYCRTL_MASK 0xFFFF /* * structure for MII Management Indicators reg in mac address map. -- cgit From 422af17c67b8ea2bcf39b6f6db7341f5b62c1b12 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 24 Jul 2014 14:08:42 -0400 Subject: staging: unisys: move installer to sysfs and split fields The installer entry in /proc/visorchipset/installer was composed of three separate fields as one entry. This patch removes the proc entry and associated functions, and creates new fields with distinct entries under sysfs in the visorchipset/install directory. The fields are: textid: used to send the ID of a string that should be displayed on s-Par's automatic installation progress screen. Setting this field when not in installation mode (boottotool was set on the previous guest boot) has no effect. remaining_steps: used to set the value of the progress bar on the s-Par automatic installation progress screen. This field has no effect if not in installation mode. error: used to send the ID of a string that should be displayed on s-Par's automatic installation progress screen when an error is encountered during installation. This field has no effect if not in installation mode. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 233 ++++++++++----------- 1 file changed, 106 insertions(+), 127 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 48db6eec257d..14eb0ab93b71 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -144,16 +144,6 @@ static VISORCHANNEL *ControlVm_channel; static ssize_t visorchipset_proc_read_writeonly(struct file *file, char __user *buf, size_t len, loff_t *offset); -static ssize_t proc_read_installer(struct file *file, char __user *buf, - size_t len, loff_t *offset); -static ssize_t proc_write_installer(struct file *file, - const char __user *buffer, - size_t count, loff_t *ppos); - -static const struct file_operations proc_installer_fops = { - .read = proc_read_installer, - .write = proc_write_installer, -}; typedef struct { U8 __iomem *ptr; /* pointer to base address of payload pool */ @@ -315,9 +305,30 @@ static ssize_t boottotool_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static DEVICE_ATTR_RW(boottotool); +static ssize_t error_show(struct device *dev, struct device_attribute *attr, + char *buf); +static ssize_t error_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count); +static DEVICE_ATTR_RW(error); + +static ssize_t textid_show(struct device *dev, struct device_attribute *attr, + char *buf); +static ssize_t textid_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count); +static DEVICE_ATTR_RW(textid); + +static ssize_t remaining_steps_show(struct device *dev, + struct device_attribute *attr, char *buf); +static ssize_t remaining_steps_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_RW(remaining_steps); + static struct attribute *visorchipset_install_attrs[] = { &dev_attr_toolaction.attr, &dev_attr_boottotool.attr, + &dev_attr_error.attr, + &dev_attr_textid.attr, + &dev_attr_remaining_steps.attr, NULL }; @@ -407,6 +418,91 @@ ssize_t boottotool_store(struct device *dev, struct device_attribute *attr, } else return -EIO; } + +static ssize_t error_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + u32 error; + + visorchannel_read(ControlVm_channel, offsetof( + ULTRA_CONTROLVM_CHANNEL_PROTOCOL, InstallationError), + &error, sizeof(u32)); + return scnprintf(buf, PAGE_SIZE, "%i\n", error); +} + +static ssize_t error_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + u32 error; + + if (sscanf(buf, "%i\n", &error) == 1) { + if (visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + InstallationError), + &error, sizeof(u32)) == 1) { + return count; + } + } + return -EIO; +} + +static ssize_t textid_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + u32 textId; + + visorchannel_read(ControlVm_channel, offsetof( + ULTRA_CONTROLVM_CHANNEL_PROTOCOL, InstallationTextId), + &textId, sizeof(u32)); + return scnprintf(buf, PAGE_SIZE, "%i\n", textId); +} + +static ssize_t textid_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + u32 textId; + + if (sscanf(buf, "%i\n", &textId) == 1) { + if (visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + InstallationTextId), + &textId, sizeof(u32)) == 1) { + return count; + } + } + return -EIO; +} + + +static ssize_t remaining_steps_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + u16 remainingSteps; + + visorchannel_read(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + InstallationRemainingSteps), + &remainingSteps, + sizeof(u16)); + return scnprintf(buf, PAGE_SIZE, "%hu\n", remainingSteps); +} + +static ssize_t remaining_steps_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + u16 remainingSteps; + + if (sscanf(buf, "%hu\n", &remainingSteps) == 1) { + if (visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, + InstallationRemainingSteps), + &remainingSteps, sizeof(u16)) == 1) { + return count; + } + } + return -EIO; +} + static void show_partition_property(struct seq_file *f, void *ctx, int property) { @@ -2326,118 +2422,6 @@ visorchipset_proc_read_writeonly(struct file *file, char __user *buf, return 0; } -/** - * Reads the InstallationError, InstallationTextId, - * InstallationRemainingSteps fields of ControlVMChannel. - */ -static ssize_t -proc_read_installer(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - int length = 0; - U16 remainingSteps; - U32 error, textId; - char *vbuf; - loff_t pos = *offset; - - if (pos < 0) - return -EINVAL; - - if (pos > 0 || !len) - return 0; - - vbuf = kzalloc(len, GFP_KERNEL); - if (!vbuf) - return -ENOMEM; - - visorchannel_read(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationRemainingSteps), &remainingSteps, - sizeof(U16)); - visorchannel_read(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationError), &error, sizeof(U32)); - visorchannel_read(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationTextId), &textId, sizeof(U32)); - - length = sprintf(vbuf, "%u %u %u\n", remainingSteps, error, textId); - if (copy_to_user(buf, vbuf, length)) { - kfree(vbuf); - return -EFAULT; - } - - kfree(vbuf); - *offset += length; - return length; -} - -/** - * Writes to the InstallationError, InstallationTextId, - * InstallationRemainingSteps fields of - * ControlVMChannel. - * Input: RemainingSteps Error TextId - * Limit 32 characters input - */ -#define UINT16_MAX (65535U) -#define UINT32_MAX (4294967295U) -static ssize_t -proc_write_installer(struct file *file, - const char __user *buffer, size_t count, loff_t *ppos) -{ - char buf[32]; - U16 remainingSteps; - U32 error, textId; - - /* Check to make sure there is no buffer overflow */ - if (count > (sizeof(buf) - 1)) - return -EINVAL; - - if (copy_from_user(buf, buffer, count)) { - WARN(1, "Error copying from user space\n"); - return -EFAULT; - } - - if (sscanf(buf, "%hu %i %i", &remainingSteps, &error, &textId) != 3) { - remainingSteps = UINT16_MAX; - error = UINT32_MAX; - textId = UINT32_MAX; - } - - if (remainingSteps != UINT16_MAX) { - if (visorchannel_write - (ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationRemainingSteps), &remainingSteps, - sizeof(U16)) < 0) - WARN(1, "Installation Status Write Failed - Write function error - RemainingSteps = %d\n", - remainingSteps); - } - - if (error != UINT32_MAX) { - if (visorchannel_write - (ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationError), &error, sizeof(U32)) < 0) - WARN(1, "Installation Status Write Failed - Write function error - Error = %d\n", - error); - } - - if (textId != UINT32_MAX) { - if (visorchannel_write - (ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - InstallationTextId), &textId, sizeof(U32)) < 0) - WARN(1, "Installation Status Write Failed - Write function error - TextId = %d\n", - textId); - } - - /* So this function isn't called multiple times, must return - * size of buffer - */ - return count; -} - static const struct file_operations chipset_proc_fops = { .owner = THIS_MODULE, .read = visorchipset_proc_read_writeonly, @@ -2449,7 +2433,6 @@ visorchipset_init(void) { int rc = 0, x = 0; char s[64]; - struct proc_dir_entry *installer_file; HOSTADDRESS addr; if (!unisys_spar_platform) @@ -2523,10 +2506,6 @@ visorchipset_init(void) PartitionPropertyNames, &show_partition_property); - /* Setup Installation fields */ - installer_file = proc_create("installer", 0644, ProcDir, - &proc_installer_fops); - memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); chipset_proc_dir = proc_create(VISORCHIPSET_CHIPSET_PROC_ENTRY_FN, -- cgit From 18b87ed1d041e7b1162481e38e2dc5a87b9a1689 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 24 Jul 2014 14:08:43 -0400 Subject: staging: unisys: move chipsetready to sysfs Move the chipsetready proc entry to sysfs under a new directory guest. This entry is used by Unisys application software on the guest to acknowledge completion of specific events for integration purposes, but these acknowledgements are not required for the guest to operate correctly. The store function is simplified as well, to use scanf() instead of copying the buffer and using strsep(). Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 76 +++++++--------------- 1 file changed, 24 insertions(+), 52 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 14eb0ab93b71..4211731c5dd3 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -129,9 +129,6 @@ static MYPROCTYPE *PartitionType; #define VISORCHIPSET_DIAG_PROC_ENTRY_FN "diagdump" static struct proc_dir_entry *diag_proc_dir; -#define VISORCHIPSET_CHIPSET_PROC_ENTRY_FN "chipsetready" -static struct proc_dir_entry *chipset_proc_dir; - #define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN "parahotplug" static struct proc_dir_entry *parahotplug_proc_dir; @@ -323,6 +320,10 @@ static ssize_t remaining_steps_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static DEVICE_ATTR_RW(remaining_steps); +static ssize_t chipsetready_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_WO(chipsetready); + static struct attribute *visorchipset_install_attrs[] = { &dev_attr_toolaction.attr, &dev_attr_boottotool.attr, @@ -337,8 +338,19 @@ static struct attribute_group visorchipset_install_group = { .attrs = visorchipset_install_attrs }; +static struct attribute *visorchipset_guest_attrs[] = { + &dev_attr_chipsetready.attr, + NULL +}; + +static struct attribute_group visorchipset_guest_group = { + .name = "guest", + .attrs = visorchipset_guest_attrs +}; + static const struct attribute_group *visorchipset_dev_groups[] = { &visorchipset_install_group, + &visorchipset_guest_group, NULL }; @@ -2369,49 +2381,21 @@ visorchipset_cache_free(struct kmem_cache *pool, void *p, char *fn, int ln) kmem_cache_free(pool, p); } -#define gettoken(bufp) strsep(bufp, " -\t\n") - -static ssize_t -chipset_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) +static ssize_t chipsetready_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) { - char buf[512]; - char *token, *p; + char msgtype[64]; - if (count > sizeof(buf) - 1) { - LOGERR("chipset_proc_write: count (%d) exceeds size of buffer (%d)", - (int) count, (int) sizeof(buffer)); - return -EINVAL; - } - if (copy_from_user(buf, buffer, count)) { - LOGERR("chipset_proc_write: copy_from_user failed"); - return -EFAULT; - } - buf[count] = '\0'; - - p = buf; - token = gettoken(&p); - - if (strcmp(token, "CALLHOMEDISK_MOUNTED") == 0) { - token = gettoken(&p); - /* The Call Home Disk has been mounted */ - if (strcmp(token, "0") == 0) + if (sscanf(buf, "%63s", msgtype) == 1) { + if (strcmp(msgtype, "CALLHOMEDISK_MOUNTED") == 0) chipset_events[0] = 1; - } else if (strcmp(token, "MODULES_LOADED") == 0) { - token = gettoken(&p); - /* All modules for the partition have been loaded */ - if (strcmp(token, "0") == 0) + else if (strcmp(msgtype, "MODULES_LOADED") == 0) chipset_events[1] = 1; - } else if (token == NULL) { - /* No event specified */ - LOGERR("No event was specified to send CHIPSET_READY response"); - return -1; + else + return -EINVAL; } else { - /* Unsupported event specified */ - LOGERR("%s is an invalid event for sending CHIPSET_READY response", token); - return -1; + return -EINVAL; } - return count; } @@ -2422,12 +2406,6 @@ visorchipset_proc_read_writeonly(struct file *file, char __user *buf, return 0; } -static const struct file_operations chipset_proc_fops = { - .owner = THIS_MODULE, - .read = visorchipset_proc_read_writeonly, - .write = chipset_proc_write, -}; - static int __init visorchipset_init(void) { @@ -2508,8 +2486,6 @@ visorchipset_init(void) memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - chipset_proc_dir = proc_create(VISORCHIPSET_CHIPSET_PROC_ENTRY_FN, - 0644, ProcDir, &chipset_proc_fops); memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); parahotplug_proc_dir = @@ -2613,10 +2589,6 @@ visorchipset_exit(void) } memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - if (chipset_proc_dir) { - remove_proc_entry(VISORCHIPSET_CHIPSET_PROC_ENTRY_FN, ProcDir); - chipset_proc_dir = NULL; - } memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); if (parahotplug_proc_dir) { -- cgit From bec684638cdb42a132bf0d7634881dc83e643f07 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 24 Jul 2014 14:08:44 -0400 Subject: staging: unisys: clean up diagdump proc entry code Remove remnant code left over from the diagdump proc entry. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/visorchipset/visorchipset_main.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 4211731c5dd3..58a441dd602e 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -126,9 +126,6 @@ InitPartitionProperties(void) static MYPROCTYPE *PartitionType; -#define VISORCHIPSET_DIAG_PROC_ENTRY_FN "diagdump" -static struct proc_dir_entry *diag_proc_dir; - #define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN "parahotplug" static struct proc_dir_entry *parahotplug_proc_dir; @@ -2583,10 +2580,7 @@ visorchipset_exit(void) visor_proc_DestroyType(PartitionType); PartitionType = NULL; } - if (diag_proc_dir) { - remove_proc_entry(VISORCHIPSET_DIAG_PROC_ENTRY_FN, ProcDir); - diag_proc_dir = NULL; - } + memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); -- cgit From 1ddb8a0626ae97a061da73f450b87371a332a203 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 24 Jul 2014 14:11:47 -0400 Subject: staging: unisys: ABI documentation for new sysfs entries This patch adds a documentation file for all of the interfaces that were moved to sysfs by the other patches in this set. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../Documentation/ABI/sysfs-platform-visorchipset | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 drivers/staging/unisys/Documentation/ABI/sysfs-platform-visorchipset (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/Documentation/ABI/sysfs-platform-visorchipset b/drivers/staging/unisys/Documentation/ABI/sysfs-platform-visorchipset new file mode 100644 index 000000000000..28f8f1233fc6 --- /dev/null +++ b/drivers/staging/unisys/Documentation/ABI/sysfs-platform-visorchipset @@ -0,0 +1,101 @@ +What: install/error +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: used to send the ID of a string that should be displayed on + s-Par's automatic installation progress screen when an error + is encountered during installation. This field has no effect + if not in installation mode. +Users: sparmaintainer@unisys.com + +What: install/remainingsteps +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: used to set the value of the progress bar on the s-Par automatic + installation progress screen. This field has no effect if not in + installation mode. +Users: sparmaintainer@unisys.com + +What: install/textid +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: used to send the ID of a string that should be displayed on + s-Par's automatic installation progress screen. Setting this + field when not in installation mode (boottotool was set on + the previous guest boot) has no effect. +Users: sparmaintainer@unisys.com + +What: install/boottotool +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: The boottotool flag controls s-Par behavior on the next boot of + this guest. Setting the flag will cause the guest to boot from + the utility and installation image, which will use the value in + the toolaction field to determine what operation is being + requested. +Users: sparmaintainer@unisys.com + +What: install/toolaction +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: This field is used to tell s-Par which type of recovery tool + action to perform on the next guest boot-up. The meaning of the + value is dependent on the type of installation software used to + commission the guest. +Users: sparmaintainer@unisys.com + +What: guest/chipsetready +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: This entry is used by Unisys application software on the guest + to acknowledge completion of specific events for integration + purposes, but these acknowledgements are not required for the + guest to operate correctly. The interface accepts one of two + strings: MODULES_LOADED to indicate that the s-Par driver + modules have been loaded successfully, or CALLHOMEDISK_MOUNTED, + which indicates that the disk used to support call home services + has been successfully mounted. +Users: sparmaintainer@unisys.com + +What: parahotplug/deviceenabled +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: This entry is used by a Unisys support script installed on the + guest, and triggered by a udev event. The support script is + responsible for enabling and disabling SR-IOV devices when the + PF device is being recovered in another guest. + + Some SR-IOV devices have problems when the PF is reset without + first disabling all VFs attached to that PF. s-Par handles this + situation by sending a message to guests using these VFs, and + the script will disable the device. When the PF is recovered, + another message is sent to the guests to re-enable the VFs. + + The parahotplug/deviceenabled interface is used to acknowledge + the recovery message. +Users: sparmaintainer@unisys.com + +What: parahotplug/devicedisabled +Date: 7/18/2014 +KernelVersion: TBD +Contact: sparmaintainer@unisys.com +Description: This entry is used by a Unisys support script installed on the + guest, and triggered by a udev event. The support script is + responsible for enabling and disabling SR-IOV devices when the + PF device is being recovered in another guest. + + Some SR-IOV devices have problems when the PF is reset without + first disabling all VFs attached to that PF. s-Par handles this + situation by sending a message to guests using these VFs, and + the script will disable the device. When the PF is recovered, + another message is sent to the guests to re-enable the VFs. + + The parahotplug/devicedisaabled interface is used to acknowledge + the initial recovery message. +Users: sparmaintainer@unisys.com -- cgit From b9334c9f9a7f4094a9de788a2fba2533b61c6767 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Thu, 24 Jul 2014 21:39:08 +0300 Subject: Staging: vt6655: remove redundant comments from baseband.h Removed redundant comments in baseband.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/baseband.h | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index 2466e2f839b6..fcf1f9373672 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -34,8 +34,6 @@ #include "tether.h" #include "device.h" -/*--------------------- Export Definitions -------------------------*/ - // // Registers in the BASEBAND // @@ -64,22 +62,12 @@ #define TOP_RATE_2M 0x00200000 #define TOP_RATE_1M 0x00100000 -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Macros ------------------------------*/ - #define BBvClearFOE(dwIoBase) \ BBbWriteEmbedded(dwIoBase, 0xB1, 0) #define BBvSetFOE(dwIoBase) \ BBbWriteEmbedded(dwIoBase, 0xB1, 0x0C) -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - unsigned int BBuGetFrameTime( unsigned char byPreambleType, -- cgit From d83ba4a1f39595ca216c2587e0909eff751c55eb Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Thu, 24 Jul 2014 21:45:03 +0300 Subject: Staging: vt6655: remove redundant comments from bssdb.h Removed redundant comments from bssdb.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/bssdb.h | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index a0938b7dd082..9337afe51028 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -35,8 +35,6 @@ #include "80211mgr.h" #include "card.h" -/*--------------------- Export Definitions -------------------------*/ - #define MAX_NODE_NUM 64 #define MAX_BSS_NUM 42 #define LOST_BEACON_COUNT 10 // 10 sec, XP defined @@ -67,12 +65,6 @@ #define MAX_WPA_IE_LEN 64 -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - // // IEEE 802.11 Structures and definitions // @@ -99,7 +91,6 @@ typedef struct tagSRSNCapObject { // BSS info(AP) #pragma pack(1) typedef struct tagKnownBSS { - // BSS info bool bActive; unsigned char abyBSSID[WLAN_BSSID_LEN]; unsigned int uChannel; @@ -116,10 +107,8 @@ typedef struct tagKnownBSS { long ldBmMAX; long ldBmAverage[RSSI_STAT_COUNT]; long ldBmAverRange; - //For any BSSID selection improvment bool bSelected; - //++ WPA informations bool bWPAValid; unsigned char byGKType; unsigned char abyPKType[4]; @@ -128,9 +117,7 @@ typedef struct tagKnownBSS { unsigned short wAuthCount; unsigned char byDefaultK_as_PK; unsigned char byReplayIdx; - //-- - //++ WPA2 informations bool bWPA2Valid; unsigned char byCSSGK; unsigned short wCSSPKCount; @@ -138,28 +125,24 @@ typedef struct tagKnownBSS { unsigned short wAKMSSAuthCount; unsigned char abyAKMSSAuthType[4]; - //++ wpactl unsigned char byWPAIE[MAX_WPA_IE_LEN]; unsigned char byRSNIE[MAX_WPA_IE_LEN]; unsigned short wWPALen; unsigned short wRSNLen; - // Clear count unsigned int uClearCount; unsigned int uIELength; QWORD qwBSSTimestamp; - QWORD qwLocalTSF; // local TSF timer + QWORD qwLocalTSF; -// NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; CARD_PHY_TYPE eNetworkTypeInUse; ERPObject sERP; SRSNCapObject sRSNCapObj; - unsigned char abyIEs[1024]; // don't move this field !! + unsigned char abyIEs[1024]; } __attribute__ ((__packed__)) KnownBSS , *PKnownBSS; -//2006-1116-01, by NomadZhao #pragma pack() typedef enum tagNODE_STATE { @@ -172,7 +155,6 @@ typedef enum tagNODE_STATE { // STA node info typedef struct tagKnownNodeDB { - // STA info bool bActive; unsigned char abyMACAddr[WLAN_ADDR_LEN]; unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; @@ -211,7 +193,6 @@ typedef struct tagKnownNodeDB { unsigned short wTSC15_0; unsigned int uWepKeyLength; unsigned char abyWepKey[WLAN_WEPMAX_KEYLEN]; - // // Auto rate fallback vars bool bIsInFallback; unsigned int uAverageRSSI; @@ -228,8 +209,6 @@ typedef struct tagKnownNodeDB { unsigned int uTimeCount; } KnownNodeDB, *PKnownNodeDB; -/*--------------------- Export Functions --------------------------*/ - PKnownBSS BSSpSearchBSSList( void *hDeviceContext, -- cgit From b679ad2fdb4b306009c60712c9ac0dff8e149ecb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:13 +0100 Subject: staging: vt6656: Remove flags fMP_POST_READS and fMP_POST_WRITES MP_IS_READY(fMP_DISCONNECTED) is used to block thread in vnt_tx_context Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/main_usb.c | 4 ---- drivers/staging/vt6656/usbpipe.c | 2 +- 3 files changed, 1 insertion(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 6b7bb8c99b1e..273c6634ea98 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -406,8 +406,6 @@ struct vnt_private { } #define fMP_DISCONNECTED 0x00000002 -#define fMP_POST_READS 0x00000100 -#define fMP_POST_WRITES 0x00000200 #define MP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) #define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index b99def77c44a..f887bc07f82a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -552,8 +552,6 @@ static int vnt_start(struct ieee80211_hw *hw) } MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); - MP_SET_FLAG(priv, fMP_POST_READS); - MP_SET_FLAG(priv, fMP_POST_WRITES); if (device_init_registers(priv) == false) { dev_dbg(&priv->usb->dev, " init register fail\n"); @@ -601,8 +599,6 @@ static void vnt_stop(struct ieee80211_hw *hw) ieee80211_stop_queues(hw); MP_SET_FLAG(priv, fMP_DISCONNECTED); - MP_CLEAR_FLAG(priv, fMP_POST_WRITES); - MP_CLEAR_FLAG(priv, fMP_POST_READS); cancel_delayed_work_sync(&priv->run_command_work); diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 7b050ba92504..c23a509ca1b0 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -289,7 +289,7 @@ int vnt_tx_context(struct vnt_private *priv, int status; struct urb *urb; - if (!(MP_IS_READY(priv) && priv->Flags & fMP_POST_WRITES)) { + if (!(MP_IS_READY(priv))) { context->in_use = false; return STATUS_RESOURCES; } -- cgit From f370872f7260073c9067d9b3e490bec0ba2af111 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:14 +0100 Subject: staging: vt6656: remove macro MP_IS_READY Just test FLag and remove not. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- drivers/staging/vt6656/usbpipe.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 273c6634ea98..58fbaabb8ec2 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -411,8 +411,6 @@ struct vnt_private { #define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) #define MP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) -#define MP_IS_READY(_M) (((_M)->Flags & fMP_DISCONNECTED) == 0) - int vnt_init(struct vnt_private *priv); #endif diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index c23a509ca1b0..ab95a07ee15e 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -289,7 +289,7 @@ int vnt_tx_context(struct vnt_private *priv, int status; struct urb *urb; - if (!(MP_IS_READY(priv))) { + if (priv->Flags & fMP_DISCONNECTED) { context->in_use = false; return STATUS_RESOURCES; } -- cgit From 23e7c47dfce777435a083d4152954df02b4c347d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:15 +0100 Subject: staging: vt6656: Remove unsed macro DEVICE_FLAGS_OPENED Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 3 --- drivers/staging/vt6656/main_usb.c | 4 ---- 2 files changed, 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 58fbaabb8ec2..ac4c7485463d 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -264,9 +264,6 @@ enum { /* flags for options */ #define DEVICE_FLAGS_UNPLUG 0x00000001UL -/* flags for driver status */ -#define DEVICE_FLAGS_OPENED 0x00010000UL - struct vnt_private { /* mac80211 */ struct ieee80211_hw *hw; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f887bc07f82a..3cfbd31f94d1 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -562,8 +562,6 @@ static int vnt_start(struct ieee80211_hw *hw) vnt_int_start_interrupt(priv); - priv->flags |= DEVICE_FLAGS_OPENED; - ieee80211_wake_queues(hw); return 0; @@ -604,8 +602,6 @@ static void vnt_stop(struct ieee80211_hw *hw) priv->cmd_running = false; - priv->flags &= ~DEVICE_FLAGS_OPENED; - device_free_tx_bufs(priv); device_free_rx_bufs(priv); device_free_int_bufs(priv); -- cgit From 2746321ef4779608e4c0696c41b442936959ef47 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:16 +0100 Subject: staging: vt6656: struct vnt_private merge flag and macros merge u32 flag into unsigned long Flags Replacing fMP_DISCONNECTED with DEVICE_FLAGS_DISCONNECTED Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 14 ++++++-------- drivers/staging/vt6656/main_usb.c | 6 +++--- drivers/staging/vt6656/usbpipe.c | 6 +++--- drivers/staging/vt6656/wcmd.c | 2 +- 4 files changed, 13 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index ac4c7485463d..fd7105ea1f66 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -262,7 +262,8 @@ enum { }; /* flags for options */ -#define DEVICE_FLAGS_UNPLUG 0x00000001UL +#define DEVICE_FLAGS_UNPLUG BIT(0) +#define DEVICE_FLAGS_DISCONNECTED BIT(1) struct vnt_private { /* mac80211 */ @@ -281,8 +282,7 @@ struct vnt_private { spinlock_t lock; struct mutex usb_lock; - u32 flags; - unsigned long Flags; + unsigned long flags; /* USB */ struct urb *interrupt_urb; @@ -402,11 +402,9 @@ struct vnt_private { (uVar)++; \ } -#define fMP_DISCONNECTED 0x00000002 - -#define MP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) -#define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) -#define MP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) +#define MP_SET_FLAG(_M, _F) ((_M)->flags |= (_F)) +#define MP_CLEAR_FLAG(_M, _F) ((_M)->flags &= ~(_F)) +#define MP_TEST_FLAGS(_M, _F) (((_M)->flags & (_F)) == (_F)) int vnt_init(struct vnt_private *priv); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 3cfbd31f94d1..87feba52d240 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -551,7 +551,7 @@ static int vnt_start(struct ieee80211_hw *hw) return -ENOMEM; } - MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); + MP_CLEAR_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); if (device_init_registers(priv) == false) { dev_dbg(&priv->usb->dev, " init register fail\n"); @@ -596,7 +596,7 @@ static void vnt_stop(struct ieee80211_hw *hw) ieee80211_stop_queues(hw); - MP_SET_FLAG(priv, fMP_DISCONNECTED); + MP_SET_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); cancel_delayed_work_sync(&priv->run_command_work); @@ -1025,7 +1025,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) usb_device_reset(priv); - MP_CLEAR_FLAG(priv, fMP_DISCONNECTED); + MP_CLEAR_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); vnt_reset_command_timer(priv); vnt_schedule_command(priv, WLAN_CMD_INIT_MAC80211); diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index ab95a07ee15e..b2722b9ac906 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -52,7 +52,7 @@ int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, { int status = 0; - if (priv->Flags & fMP_DISCONNECTED) + if (priv->flags & DEVICE_FLAGS_DISCONNECTED) return STATUS_FAILURE; mutex_lock(&priv->usb_lock); @@ -80,7 +80,7 @@ int vnt_control_in(struct vnt_private *priv, u8 request, u16 value, { int status; - if (priv->Flags & fMP_DISCONNECTED) + if (priv->flags & DEVICE_FLAGS_DISCONNECTED) return STATUS_FAILURE; mutex_lock(&priv->usb_lock); @@ -289,7 +289,7 @@ int vnt_tx_context(struct vnt_private *priv, int status; struct urb *urb; - if (priv->Flags & fMP_DISCONNECTED) { + if (priv->flags & DEVICE_FLAGS_DISCONNECTED) { context->in_use = false; return STATUS_RESOURCES; } diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index e4a5e2bead70..e5330e3ce407 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -97,7 +97,7 @@ void vnt_run_command(struct work_struct *work) struct vnt_private *priv = container_of(work, struct vnt_private, run_command_work.work); - if (priv->Flags & fMP_DISCONNECTED) + if (priv->flags & DEVICE_FLAGS_DISCONNECTED) return; if (priv->cmd_running != true) -- cgit From 4c3b0d457222e5a8d41241a19a2a74ad9b3dd8b0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:17 +0100 Subject: staging: vt6656: use set_bit to set flags Replacing MP_SET_FLAG Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/main_usb.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index fd7105ea1f66..5ac80d8df471 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -402,7 +402,6 @@ struct vnt_private { (uVar)++; \ } -#define MP_SET_FLAG(_M, _F) ((_M)->flags |= (_F)) #define MP_CLEAR_FLAG(_M, _F) ((_M)->flags &= ~(_F)) #define MP_TEST_FLAGS(_M, _F) (((_M)->flags & (_F)) == (_F)) diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 87feba52d240..7798221c9ba5 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -596,7 +596,7 @@ static void vnt_stop(struct ieee80211_hw *hw) ieee80211_stop_queues(hw); - MP_SET_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); + set_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags); cancel_delayed_work_sync(&priv->run_command_work); @@ -1051,7 +1051,7 @@ static void vt6656_disconnect(struct usb_interface *intf) usb_set_intfdata(intf, NULL); usb_put_dev(interface_to_usbdev(intf)); - priv->flags |= DEVICE_FLAGS_UNPLUG; + set_bit(DEVICE_FLAGS_UNPLUG, &priv->flags); ieee80211_free_hw(priv->hw); } -- cgit From 2ab3d46dd3029946233e425fa4f4e3d50c79ee9d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:18 +0100 Subject: staging: vt6656: use clear_bit to remove device flag Replacing MP_CLEAR_FLAG Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 1 - drivers/staging/vt6656/main_usb.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 5ac80d8df471..21f810eb162f 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -402,7 +402,6 @@ struct vnt_private { (uVar)++; \ } -#define MP_CLEAR_FLAG(_M, _F) ((_M)->flags &= ~(_F)) #define MP_TEST_FLAGS(_M, _F) (((_M)->flags & (_F)) == (_F)) int vnt_init(struct vnt_private *priv); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 7798221c9ba5..d729d949ce27 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -551,7 +551,7 @@ static int vnt_start(struct ieee80211_hw *hw) return -ENOMEM; } - MP_CLEAR_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); + clear_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags); if (device_init_registers(priv) == false) { dev_dbg(&priv->usb->dev, " init register fail\n"); @@ -1025,7 +1025,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) usb_device_reset(priv); - MP_CLEAR_FLAG(priv, DEVICE_FLAGS_DISCONNECTED); + clear_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags); vnt_reset_command_timer(priv); vnt_schedule_command(priv, WLAN_CMD_INIT_MAC80211); -- cgit From fa4b5c74ea6cb47bdebf9696b8f8118c3fbd813b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:19 +0100 Subject: staging: vt6656: Remove unused macro MP_TEST_FLAGS Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 21f810eb162f..2ec086c221ec 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -402,8 +402,6 @@ struct vnt_private { (uVar)++; \ } -#define MP_TEST_FLAGS(_M, _F) (((_M)->flags & (_F)) == (_F)) - int vnt_init(struct vnt_private *priv); #endif -- cgit From cbcc9a365a8a5a673f4b15bfcc4e1b18b9f69db4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 21:13:20 +0100 Subject: staging: vt6656: use test_bit to check flags status Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 2 +- drivers/staging/vt6656/usbpipe.c | 6 +++--- drivers/staging/vt6656/wcmd.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d729d949ce27..fdc5c7bc419a 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -591,7 +591,7 @@ static void vnt_stop(struct ieee80211_hw *hw) /* clear all keys */ priv->key_entry_inuse = 0; - if ((priv->flags & DEVICE_FLAGS_UNPLUG) == false) + if (!test_bit(DEVICE_FLAGS_UNPLUG, &priv->flags)) vnt_mac_shutdown(priv); ieee80211_stop_queues(hw); diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index b2722b9ac906..f1969fea7f5c 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -52,7 +52,7 @@ int vnt_control_out(struct vnt_private *priv, u8 request, u16 value, { int status = 0; - if (priv->flags & DEVICE_FLAGS_DISCONNECTED) + if (test_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags)) return STATUS_FAILURE; mutex_lock(&priv->usb_lock); @@ -80,7 +80,7 @@ int vnt_control_in(struct vnt_private *priv, u8 request, u16 value, { int status; - if (priv->flags & DEVICE_FLAGS_DISCONNECTED) + if (test_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags)) return STATUS_FAILURE; mutex_lock(&priv->usb_lock); @@ -289,7 +289,7 @@ int vnt_tx_context(struct vnt_private *priv, int status; struct urb *urb; - if (priv->flags & DEVICE_FLAGS_DISCONNECTED) { + if (test_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags)) { context->in_use = false; return STATUS_RESOURCES; } diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index e5330e3ce407..8f6417bcaed2 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -97,7 +97,7 @@ void vnt_run_command(struct work_struct *work) struct vnt_private *priv = container_of(work, struct vnt_private, run_command_work.work); - if (priv->flags & DEVICE_FLAGS_DISCONNECTED) + if (test_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags)) return; if (priv->cmd_running != true) -- cgit From 45c2fc821d7c0b0b5e69ab6c9417b587f5b1bd50 Mon Sep 17 00:00:00 2001 From: Jeff Oczek Date: Thu, 24 Jul 2014 20:19:43 -0400 Subject: staging: rtl8188eu: Fix static symbol sparse warnings Fix sparse warnings: drivers/staging/rtl8188eu/core/rtw_cmd.c:52:5: warning: symbol '_rtw_enqueue_cmd' was not declared. Should it be static? drivers/staging/rtl8188eu/core/rtw_wlan_util.c:1225:5: warning: symbol 'wifirate2_ratetbl_inx' was not declared. Should it be static? drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c:25:4: warning: symbol 'ODM_GetRightChnlPlaceforIQK' was not declared. Should it be static? drivers/staging/rtl8188eu/os_dep/ioctl_linux.c:3109:5: warning: symbol 'rtw_ioctl' was not declared. Should it be static? Signed-off-by: Jeff Oczek Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_cmd.c | 2 +- drivers/staging/rtl8188eu/core/rtw_wlan_util.c | 2 +- drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c | 2 +- drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index 08c325eceee7..104b01fa0fad 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -49,7 +49,7 @@ ISR/Call-Back functions can't call this sub-function. */ -int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj) +static int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj) { unsigned long irqL; diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c index 83e706fa5b1d..33ccbbbd8ed6 100644 --- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c @@ -1222,7 +1222,7 @@ unsigned int is_ap_in_wep(struct adapter *padapter) } } -int wifirate2_ratetbl_inx(unsigned char rate) +static int wifirate2_ratetbl_inx(unsigned char rate) { int inx = 0; rate = rate & 0x7f; diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 7fa744b5027d..d2bcc1640522 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -22,7 +22,7 @@ #define ODM_TXPWRTRACK_MAX_IDX_88E 6 -u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) +static u8 ODM_GetRightChnlPlaceforIQK(u8 chnl) { u8 channel_all[ODM_TARGET_CHNL_NUM_2G_5G] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index d9cee8cec66f..d598fec4abbf 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -32,6 +32,7 @@ #include #include +#include "osdep_intf.h" #define RTL_IOCTL_WPA_SUPPLICANT (SIOCIWFIRSTPRIV + 30) -- cgit From e010a2a04c3179c342e370e93ffb7d13eaf90dc4 Mon Sep 17 00:00:00 2001 From: Cihangir Akturk Date: Sun, 27 Jul 2014 03:21:15 +0300 Subject: staging: gdm724x: fix misplaced open braces This patch fixes the following checkpatch.pl issues in gdm_usb.c: ERROR: that open brace { should be on the previous line Signed-off-by: Cihangir Akturk Signed-off-by: Greg Kroah-Hartman --- drivers/staging/gdm724x/gdm_usb.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/gdm724x/gdm_usb.c b/drivers/staging/gdm724x/gdm_usb.c index 0c1b2de2b57d..483185bb4ecf 100644 --- a/drivers/staging/gdm724x/gdm_usb.c +++ b/drivers/staging/gdm724x/gdm_usb.c @@ -264,28 +264,25 @@ static void release_usb(struct lte_udev *udev) unsigned long flags; spin_lock_irqsave(&tx->lock, flags); - list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->sdu_list, list) - { + list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->sdu_list, list) { list_del(&t_sdu->list); free_tx_sdu_struct(t_sdu); } - list_for_each_entry_safe(t, t_next, &tx->hci_list, list) - { + list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { list_del(&t->list); free_tx_struct(t); } - list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->free_list, list) - { + list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->free_list, list) { list_del(&t_sdu->list); free_tx_sdu_struct(t_sdu); } spin_unlock_irqrestore(&tx->lock, flags); spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, + rx_submit_list) { spin_unlock_irqrestore(&rx->submit_lock, flags); usb_kill_urb(r->urb); spin_lock_irqsave(&rx->submit_lock, flags); @@ -293,16 +290,14 @@ static void release_usb(struct lte_udev *udev) spin_unlock_irqrestore(&rx->submit_lock, flags); spin_lock_irqsave(&rx->rx_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->free_list, free_list) - { + list_for_each_entry_safe(r, r_next, &rx->free_list, free_list) { list_del(&r->free_list); free_rx_struct(r); } spin_unlock_irqrestore(&rx->rx_lock, flags); spin_lock_irqsave(&rx->to_host_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->to_host_list, to_host_list) - { + list_for_each_entry_safe(r, r_next, &rx->to_host_list, to_host_list) { if (r->index == (void *)udev) { list_del(&r->to_host_list); free_rx_struct(r); @@ -458,9 +453,8 @@ static void remove_rx_submit_list(struct usb_rx *r, struct rx_cxt *rx) struct usb_rx *r_remove, *r_remove_next; spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r_remove, - r_remove_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r_remove, r_remove_next, + &rx->rx_submit_list, rx_submit_list) { if (r == r_remove) { list_del(&r->rx_submit_list); break; @@ -938,8 +932,8 @@ static int gdm_usb_suspend(struct usb_interface *intf, pm_message_t pm_msg) udev->usb_state = PM_SUSPEND; spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, + rx_submit_list) { spin_unlock_irqrestore(&rx->submit_lock, flags); usb_kill_urb(r->urb); spin_lock_irqsave(&rx->submit_lock, flags); -- cgit From 66e24b76865c431361feba2972f5e3e1cff6bf75 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Fri, 25 Jul 2014 13:55:10 -0400 Subject: staging: unisys: fix visorchipset sysfs attribute functions This patch cleans up the style, error handling, and string handling in the sysfs functions recently added to visorchipset: - Use of sscanf() was changed to type-appropriate kstrto*() functions - error handling was simplified - the error return value of visorchannel_write() was corrected - switch use of driver-specific types to kernel types Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 123 ++++++++++++--------- .../staging/unisys/visorutil/memregion_direct.c | 2 +- 2 files changed, 69 insertions(+), 56 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 58a441dd602e..6f87e274197c 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -370,29 +370,31 @@ static void controlvm_respond_physdev_changestate(CONTROLVM_MESSAGE_HEADER * ssize_t toolaction_show(struct device *dev, struct device_attribute *attr, char *buf) { - U8 toolAction; + u8 toolAction; visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - ToolAction), &toolAction, sizeof(U8)); + ToolAction), &toolAction, sizeof(u8)); return scnprintf(buf, PAGE_SIZE, "%u\n", toolAction); } ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { - U8 toolAction; + u8 toolAction; + int ret; - if (sscanf(buf, "%hhu\n", &toolAction) == 1) { - if (visorchannel_write(ControlVm_channel, - offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - ToolAction), - &toolAction, sizeof(U8)) < 0) - return -EFAULT; - else - return count; - } else - return -EIO; + if (kstrtou8(buf, 10, &toolAction) != 0) + return -EINVAL; + + ret = visorchannel_write(ControlVm_channel, + offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, ToolAction), + &toolAction, sizeof(u8)); + + if (ret) + return ret; + else + return count; } ssize_t boottotool_show(struct device *dev, struct device_attribute *attr, @@ -411,21 +413,23 @@ ssize_t boottotool_show(struct device *dev, struct device_attribute *attr, ssize_t boottotool_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { - int val; + int val, ret; ULTRA_EFI_SPAR_INDICATION efiSparIndication; - if (sscanf(buf, "%u\n", &val) == 1) { - efiSparIndication.BootToTool = val; - if (visorchannel_write(ControlVm_channel, + if (kstrtoint(buf, 10, &val) != 0) + return -EINVAL; + + efiSparIndication.BootToTool = val; + ret = visorchannel_write(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, - EfiSparIndication), + EfiSparIndication), &(efiSparIndication), - sizeof(ULTRA_EFI_SPAR_INDICATION)) < 0) - return -EFAULT; - else - return count; - } else - return -EIO; + sizeof(ULTRA_EFI_SPAR_INDICATION)); + + if (ret) + return ret; + else + return count; } static ssize_t error_show(struct device *dev, struct device_attribute *attr, @@ -443,16 +447,19 @@ static ssize_t error_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u32 error; + int ret; - if (sscanf(buf, "%i\n", &error) == 1) { - if (visorchannel_write(ControlVm_channel, + if (kstrtou32(buf, 10, &error) != 0) + return -EINVAL; + + ret = visorchannel_write(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, InstallationError), - &error, sizeof(u32)) == 1) { - return count; - } - } - return -EIO; + &error, sizeof(u32)); + if (ret) + return ret; + else + return count; } static ssize_t textid_show(struct device *dev, struct device_attribute *attr, @@ -470,16 +477,19 @@ static ssize_t textid_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u32 textId; + int ret; - if (sscanf(buf, "%i\n", &textId) == 1) { - if (visorchannel_write(ControlVm_channel, + if (kstrtou32(buf, 10, &textId) != 0) + return -EINVAL; + + ret = visorchannel_write(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, InstallationTextId), - &textId, sizeof(u32)) == 1) { - return count; - } - } - return -EIO; + &textId, sizeof(u32)); + if (ret) + return ret; + else + return count; } @@ -500,16 +510,19 @@ static ssize_t remaining_steps_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u16 remainingSteps; + int ret; - if (sscanf(buf, "%hu\n", &remainingSteps) == 1) { - if (visorchannel_write(ControlVm_channel, + if (kstrtou16(buf, 10, &remainingSteps) != 0) + return -EINVAL; + + ret = visorchannel_write(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, InstallationRemainingSteps), - &remainingSteps, sizeof(u16)) == 1) { - return count; - } - } - return -EIO; + &remainingSteps, sizeof(u16)); + if (ret) + return ret; + else + return count; } static void @@ -2383,17 +2396,17 @@ static ssize_t chipsetready_store(struct device *dev, { char msgtype[64]; - if (sscanf(buf, "%63s", msgtype) == 1) { - if (strcmp(msgtype, "CALLHOMEDISK_MOUNTED") == 0) - chipset_events[0] = 1; - else if (strcmp(msgtype, "MODULES_LOADED") == 0) - chipset_events[1] = 1; - else - return -EINVAL; - } else { + if (sscanf(buf, "%63s", msgtype) != 1) + return -EINVAL; + + if (strcmp(msgtype, "CALLHOMEDISK_MOUNTED") == 0) { + chipset_events[0] = 1; + return count; + } else if (strcmp(msgtype, "MODULES_LOADED") == 0) { + chipset_events[1] = 1; + return count; + } else return -EINVAL; - } - return count; } static ssize_t diff --git a/drivers/staging/unisys/visorutil/memregion_direct.c b/drivers/staging/unisys/visorutil/memregion_direct.c index 28dfba0490f2..65bc07b947db 100644 --- a/drivers/staging/unisys/visorutil/memregion_direct.c +++ b/drivers/staging/unisys/visorutil/memregion_direct.c @@ -184,7 +184,7 @@ memregion_readwrite(BOOL is_write, { if (offset + nbytes > memregion->nbytes) { ERRDRV("memregion_readwrite offset out of range!!"); - return -EFAULT; + return -EIO; } if (is_write) memcpy_toio(memregion->mapped + offset, local, nbytes); -- cgit From d54313cf00ecfbfad975ca6e2dbeecd6c1b4322e Mon Sep 17 00:00:00 2001 From: Mostyn Bramley-Moore Date: Sat, 26 Jul 2014 14:49:58 +0200 Subject: staging: netlogic: coding style fixup Remove unnecessary return at end of a void function. Part of the eudyptula challenge: http://eudyptula-challenge.org/ Signed-off-by: Mostyn Bramley-Moore Signed-off-by: Greg Kroah-Hartman --- drivers/staging/netlogic/xlr_net.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/netlogic/xlr_net.c b/drivers/staging/netlogic/xlr_net.c index e320d6bae913..9bf407d6241a 100644 --- a/drivers/staging/netlogic/xlr_net.c +++ b/drivers/staging/netlogic/xlr_net.c @@ -185,7 +185,6 @@ static void xlr_net_fmn_handler(int bkt, int src_stnid, int size, if (skb_new) send_to_rfr_fifo(priv, skb_new->data); } - return; } /* Ethtool operation */ -- cgit From ad45776bda44239c72af209a15f4cfa364e1e345 Mon Sep 17 00:00:00 2001 From: Zahari Doychev Date: Sun, 27 Jul 2014 10:26:40 +0200 Subject: bcm: fix code style this patch fixes some errors and warnings reported by checkpatch.pl Signed-off-by: Zahari Doychev Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/PHSModule.h | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/PHSModule.h b/drivers/staging/bcm/PHSModule.h index d697f9c860cf..d84d60ba48f9 100644 --- a/drivers/staging/bcm/PHSModule.h +++ b/drivers/staging/bcm/PHSModule.h @@ -20,28 +20,37 @@ int PHSReceive(struct bcm_mini_adapter *Adapter, void DumpDataPacketHeader(PUCHAR pPkt); -void DumpFullPacket(UCHAR *pBuf,UINT nPktLen); +void DumpFullPacket(UCHAR *pBuf, UINT nPktLen); void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension); -int phs_init(struct bcm_phs_extension *pPhsdeviceExtension,struct bcm_mini_adapter *Adapter); +int phs_init(struct bcm_phs_extension *pPhsdeviceExtension, + struct bcm_mini_adapter *Adapter); int PhsCleanup(struct bcm_phs_extension *pPHSDeviceExt); -//Utility Functions -ULONG PhsUpdateClassifierRule(void* pvContext,B_UINT16 uiVcid,B_UINT16 uiClsId, struct bcm_phs_rule *psPhsRule,B_UINT8 u8AssociatedPHSI ); +/* Utility Functions */ +ULONG PhsUpdateClassifierRule(void *pvContext, + B_UINT16 uiVcid, + B_UINT16 uiClsId, + struct bcm_phs_rule *psPhsRule, + B_UINT8 u8AssociatedPHSI); -ULONG PhsDeletePHSRule(void* pvContext,B_UINT16 uiVcid,B_UINT8 u8PHSI); +ULONG PhsDeletePHSRule(void *pvContext, B_UINT16 uiVcid, B_UINT8 u8PHSI); -ULONG PhsDeleteClassifierRule(void* pvContext, B_UINT16 uiVcid ,B_UINT16 uiClsId); +ULONG PhsDeleteClassifierRule(void *pvContext, + B_UINT16 uiVcid, + B_UINT16 uiClsId); -ULONG PhsDeleteSFRules(void* pvContext,B_UINT16 uiVcid) ; +ULONG PhsDeleteSFRules(void *pvContext, B_UINT16 uiVcid); bool ValidatePHSRule(struct bcm_phs_rule *psPhsRule); -UINT GetServiceFlowEntry(struct bcm_phs_table *psServiceFlowTable,B_UINT16 uiVcid, struct bcm_phs_entry **ppstServiceFlowEntry); +UINT GetServiceFlowEntry(struct bcm_phs_table *psServiceFlowTable, + B_UINT16 uiVcid, + struct bcm_phs_entry **ppstServiceFlowEntry); void DumpPhsRules(struct bcm_phs_extension *pDeviceExtension); -- cgit From 7665cf21e882fcca1db5cbaa52675e5975d6c64f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:45 +0100 Subject: staging: vt6656: rename device_set_options to vnt_set_options changing device to vnt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fdc5c7bc419a..7e8551f419b3 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -104,7 +104,7 @@ static struct usb_device_id vt6656_table[] = { {} }; -static void device_set_options(struct vnt_private *priv) +static void vnt_set_options(struct vnt_private *priv) { /* Set number of TX buffers */ if (vnt_tx_buffers < CB_MIN_TX_DESC || vnt_tx_buffers > CB_MAX_TX_DESC) @@ -997,7 +997,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) priv->hw = hw; priv->usb = udev; - device_set_options(priv); + vnt_set_options(priv); spin_lock_init(&priv->lock); mutex_init(&priv->usb_lock); -- cgit From 500e1fb322677eaac96420238dec9d723034e6b0 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:46 +0100 Subject: staging: vt6656: rename device_init_registers to vnt_init_registers changing device to vnt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 7e8551f419b3..51fad26e0352 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -37,7 +37,7 @@ * device_free_tx_bufs - free tx buffer function * device_dma0_tx_80211- tx 802.11 frame via dma0 * device_dma0_xmit- tx PS buffered frame via dma0 - * device_init_registers- initial MAC & BBP & RF internal registers. + * vnt_init_registers- initial MAC & BBP & RF internal registers. * device_init_rings- initial tx/rx ring buffer * device_init_defrag_cb- initial & allocate de-fragement buffer. * device_tx_srv- tx interrupt service function @@ -131,7 +131,7 @@ static void vnt_set_options(struct vnt_private *priv) /* * initialization of MAC & BBP registers */ -static int device_init_registers(struct vnt_private *priv) +static int vnt_init_registers(struct vnt_private *priv) { struct vnt_cmd_card_init *init_cmd = &priv->init_command; struct vnt_rsp_card_init *init_rsp = &priv->init_response; @@ -553,7 +553,7 @@ static int vnt_start(struct ieee80211_hw *hw) clear_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags); - if (device_init_registers(priv) == false) { + if (vnt_init_registers(priv) == false) { dev_dbg(&priv->usb->dev, " init register fail\n"); goto free_all; } @@ -954,7 +954,7 @@ static const struct ieee80211_ops vnt_mac_ops = { int vnt_init(struct vnt_private *priv) { - if (!(device_init_registers(priv))) + if (!(vnt_init_registers(priv))) return -EAGAIN; SET_IEEE80211_PERM_ADDR(priv->hw, priv->permanent_net_addr); -- cgit From afc7ef64a696feb7b48600887683398890fe9bf5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:47 +0100 Subject: staging: vt6656: rename device_free_tx_bufs to vnt_free_tx_bufs changing device to vnt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 51fad26e0352..88484c8a9803 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -34,7 +34,7 @@ * device_ioctl - ioctl entry * device_close - shutdown mac/bbp & free dma/descriptor resource * device_alloc_frag_buf - rx fragement pre-allocated function - * device_free_tx_bufs - free tx buffer function + * vnt_free_tx_bufs - free tx buffer function * device_dma0_tx_80211- tx 802.11 frame via dma0 * device_dma0_xmit- tx PS buffered frame via dma0 * vnt_init_registers- initial MAC & BBP & RF internal registers. @@ -378,7 +378,7 @@ static int vnt_init_registers(struct vnt_private *priv) return true; } -static void device_free_tx_bufs(struct vnt_private *priv) +static void vnt_free_tx_bufs(struct vnt_private *priv) { struct vnt_usb_send_context *tx_context; int ii; @@ -521,7 +521,7 @@ free_rx_tx: device_free_rx_bufs(priv); free_tx: - device_free_tx_bufs(priv); + vnt_free_tx_bufs(priv); return false; } @@ -568,7 +568,7 @@ static int vnt_start(struct ieee80211_hw *hw) free_all: device_free_rx_bufs(priv); - device_free_tx_bufs(priv); + vnt_free_tx_bufs(priv); device_free_int_bufs(priv); usb_kill_urb(priv->interrupt_urb); @@ -602,7 +602,7 @@ static void vnt_stop(struct ieee80211_hw *hw) priv->cmd_running = false; - device_free_tx_bufs(priv); + vnt_free_tx_bufs(priv); device_free_rx_bufs(priv); device_free_int_bufs(priv); -- cgit From 0dd6e68a54726ad49a1b9888032ca5b5f6e2d889 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:48 +0100 Subject: staging: vt6656: rename device_free_rx_bufs to vnt_free_rx_bufs changing vnt to device Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 88484c8a9803..76678c8fce0e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -397,7 +397,7 @@ static void vnt_free_tx_bufs(struct vnt_private *priv) return; } -static void device_free_rx_bufs(struct vnt_private *priv) +static void vnt_free_rx_bufs(struct vnt_private *priv) { struct vnt_rcb *rcb; int ii; @@ -518,7 +518,7 @@ static bool device_alloc_bufs(struct vnt_private *priv) return true; free_rx_tx: - device_free_rx_bufs(priv); + vnt_free_rx_bufs(priv); free_tx: vnt_free_tx_bufs(priv); @@ -567,7 +567,7 @@ static int vnt_start(struct ieee80211_hw *hw) return 0; free_all: - device_free_rx_bufs(priv); + vnt_free_rx_bufs(priv); vnt_free_tx_bufs(priv); device_free_int_bufs(priv); @@ -603,7 +603,7 @@ static void vnt_stop(struct ieee80211_hw *hw) priv->cmd_running = false; vnt_free_tx_bufs(priv); - device_free_rx_bufs(priv); + vnt_free_rx_bufs(priv); device_free_int_bufs(priv); usb_kill_urb(priv->interrupt_urb); -- cgit From 1c2fd56bee347f37017a58a95084414d4ce4f50e Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:49 +0100 Subject: staging: vt6656: rename device_free_int_bufs to vnt_free_int_bufs changing device to vnt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 76678c8fce0e..50955d24c797 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -434,7 +434,7 @@ static void usb_device_reset(struct vnt_private *priv) return ; } -static void device_free_int_bufs(struct vnt_private *priv) +static void vnt_free_int_bufs(struct vnt_private *priv) { kfree(priv->int_buf.data_buf); @@ -569,7 +569,7 @@ static int vnt_start(struct ieee80211_hw *hw) free_all: vnt_free_rx_bufs(priv); vnt_free_tx_bufs(priv); - device_free_int_bufs(priv); + vnt_free_int_bufs(priv); usb_kill_urb(priv->interrupt_urb); usb_free_urb(priv->interrupt_urb); @@ -604,7 +604,7 @@ static void vnt_stop(struct ieee80211_hw *hw) vnt_free_tx_bufs(priv); vnt_free_rx_bufs(priv); - device_free_int_bufs(priv); + vnt_free_int_bufs(priv); usb_kill_urb(priv->interrupt_urb); usb_free_urb(priv->interrupt_urb); -- cgit From ef484423f5d4775db09ef61f1bab98862a70656d Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:50 +0100 Subject: staging: vt6656: rename device_alloc_bufs to vnt_alloc_bufs changing device to vnt Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 50955d24c797..fa0128f513ec 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -441,7 +441,7 @@ static void vnt_free_int_bufs(struct vnt_private *priv) return; } -static bool device_alloc_bufs(struct vnt_private *priv) +static bool vnt_alloc_bufs(struct vnt_private *priv) { struct vnt_usb_send_context *tx_context; struct vnt_rcb *rcb; @@ -546,8 +546,8 @@ static int vnt_start(struct ieee80211_hw *hw) priv->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS; - if (device_alloc_bufs(priv) == false) { - dev_dbg(&priv->usb->dev, "device_alloc_bufs fail...\n"); + if (vnt_alloc_bufs(priv) == false) { + dev_dbg(&priv->usb->dev, "vnt_alloc_bufs fail...\n"); return -ENOMEM; } -- cgit From ffc0e3733d01be33246ecc0e9453faba6115a428 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:51 +0100 Subject: staging: vt6656: main_usb.c remove comments to functions nolonger present. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index fa0128f513ec..87e89d7161ec 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -27,20 +27,8 @@ * Functions: * * vt6656_probe - module initial (insmod) driver entry - * device_remove1 - module remove entry - * device_open - allocate dma/descripter resource & initial mac/bbp function - * device_xmit - asynchronous data tx function - * device_set_multi - set mac filter - * device_ioctl - ioctl entry - * device_close - shutdown mac/bbp & free dma/descriptor resource - * device_alloc_frag_buf - rx fragement pre-allocated function * vnt_free_tx_bufs - free tx buffer function - * device_dma0_tx_80211- tx 802.11 frame via dma0 - * device_dma0_xmit- tx PS buffered frame via dma0 * vnt_init_registers- initial MAC & BBP & RF internal registers. - * device_init_rings- initial tx/rx ring buffer - * device_init_defrag_cb- initial & allocate de-fragement buffer. - * device_tx_srv- tx interrupt service function * * Revision History: */ -- cgit From feab48107651c411dcf4b1aa3c9d7f496f467e13 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:52 +0100 Subject: staging: vt6656: change driver version to mac80211 Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/device.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 2ec086c221ec..5a7ca527106e 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -81,7 +81,7 @@ #define DEVICE_NAME "vt6656" #define DEVICE_FULL_DRV_NAM "VIA Networking Wireless LAN USB Driver" -#define DEVICE_VERSION "1.19_12" +#define DEVICE_VERSION "mac80211" #define CONFIG_PATH "/etc/vntconfiguration.dat" -- cgit From 1beace3c8d0339e128573c28d9032eaf80723346 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:53 +0100 Subject: staging: vt6656: main_usb.c remove return from void functions Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/main_usb.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 87e89d7161ec..422fcbabafac 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -381,8 +381,6 @@ static void vnt_free_tx_bufs(struct vnt_private *priv) kfree(tx_context); } - - return; } static void vnt_free_rx_bufs(struct vnt_private *priv) @@ -407,8 +405,6 @@ static void vnt_free_rx_bufs(struct vnt_private *priv) kfree(rcb); } - - return; } static void usb_device_reset(struct vnt_private *priv) @@ -419,14 +415,11 @@ static void usb_device_reset(struct vnt_private *priv) if (status) dev_warn(&priv->usb->dev, "usb_device_reset fail status=%d\n", status); - return ; } static void vnt_free_int_bufs(struct vnt_private *priv) { kfree(priv->int_buf.data_buf); - - return; } static bool vnt_alloc_bufs(struct vnt_private *priv) @@ -596,8 +589,6 @@ static void vnt_stop(struct ieee80211_hw *hw) usb_kill_urb(priv->interrupt_urb); usb_free_urb(priv->interrupt_urb); - - return; } static int vnt_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) @@ -663,8 +654,6 @@ static void vnt_remove_interface(struct ieee80211_hw *hw, /* LED slow blink */ vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_SLOW); - - return; } static int vnt_config(struct ieee80211_hw *hw, u32 changed) @@ -844,8 +833,6 @@ static void vnt_configure(struct ieee80211_hw *hw, vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_RCR, rx_mode); dev_dbg(&priv->usb->dev, "rx mode out= %x\n", rx_mode); - - return; } static int vnt_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, -- cgit From d78551b945f9bc48f5576c0da72786f0ac4e512f Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:54 +0100 Subject: staging: vt6656: remove return from all void functions Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 4 ---- drivers/staging/vt6656/mac.c | 2 -- drivers/staging/vt6656/usbpipe.c | 6 ------ drivers/staging/vt6656/wcmd.c | 2 -- 4 files changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index c06dd9d59817..8c0b8fa3e77e 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -669,8 +669,6 @@ void vnt_reset_next_tbtt(struct vnt_private *priv, u16 beacon_interval) vnt_control_out(priv, MESSAGE_TYPE_SET_TSFTBTT, MESSAGE_REQUEST_TBTT, 0, 8, data); - - return; } /* @@ -708,8 +706,6 @@ void vnt_update_next_tbtt(struct vnt_private *priv, u64 tsf, MESSAGE_REQUEST_TBTT, 0, 8, data); dev_dbg(&priv->usb->dev, "%s TBTT: %8llx\n", __func__, tsf); - - return; } /* diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 641d77baa2ab..bb37e33b9ffa 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -243,6 +243,4 @@ void vnt_mac_set_led(struct vnt_private *priv, u8 state, u8 led) vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, MAC_REG_PAPEDELAY, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); - - return; } diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index f1969fea7f5c..df31ae6f76ef 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -137,8 +137,6 @@ static void vnt_start_interrupt_urb_complete(struct urb *urb) } else { priv->int_buf.in_use = true; } - - return; } int vnt_start_interrupt_urb(struct vnt_private *priv) @@ -216,8 +214,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) rcb->in_use = false; } - - return; } int vnt_submit_rx_urb(struct vnt_private *priv, struct vnt_rcb *rcb) @@ -279,8 +275,6 @@ static void vnt_tx_context_complete(struct urb *urb) context->in_use = false; } - - return; } int vnt_tx_context(struct vnt_private *priv, diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 8f6417bcaed2..3cbf4791bac1 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -164,8 +164,6 @@ void vnt_run_command(struct work_struct *work) } vnt_cmd_complete(priv); - - return; } int vnt_schedule_command(struct vnt_private *priv, enum vnt_cmd command) -- cgit From a8492a0baf2ef514b76f624b524a0d33d05adc69 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:55 +0100 Subject: staging: vt6656: remove comments of old functions nolonger present. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/card.c | 6 ------ drivers/staging/vt6656/dpc.c | 5 ----- drivers/staging/vt6656/usbpipe.c | 1 - 3 files changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 8c0b8fa3e77e..98567a7dc5b9 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -19,15 +19,11 @@ * File: card.c * Purpose: Provide functions to setup NIC operation mode * Functions: - * s_vSafeResetTx - Rest Tx * vnt_set_rspinf - Set RSPINF * vnt_update_ifs - Update slotTime,SIFS,DIFS, and EIFS * vnt_update_top_rates - Update BasicTopRate * vnt_add_basic_rate - Add to BasicRateSet - * CARDbSetBasicRate - Set Basic Tx Rate * vnt_ofdm_min_rate - Check if any OFDM rate is in BasicRateSet - * CARDvSetLoopbackMode - Set Loopback mode - * CARDbSoftwareReset - Sortware reset NIC * vnt_get_tsf_offset - Calculate TSFOffset * vnt_get_current_tsf - Read Current NIC TSF counter * vnt_get_next_tbtt - Calculate Next Beacon TSF counter @@ -35,8 +31,6 @@ * vnt_update_next_tbtt - Sync. NIC Beacon time * vnt_radio_power_off - Turn Off NIC Radio Power * vnt_radio_power_on - Turn On NIC Radio Power - * CARDbSetWEPMode - Set NIC Wep mode - * CARDbSetTxPower - Set NIC tx power * * Revision History: * 06-10-2003 Bryan YC Fan: Re-write codes to support VT3253 spec. diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index f5fbb5ff401d..5edb5b664d4f 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -25,11 +25,6 @@ * Date: May 20, 2003 * * Functions: - * device_receive_frame - Rcv 802.11 frame function - * s_bHandleRxEncryption- Rcv decrypted data via on-fly - * s_byGetRateIdx- get rate index - * s_vGetDASA- get data offset - * s_vProcessRxMACHeader- Rcv 802.11 and translate to 802.3 * * Revision History: * diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index df31ae6f76ef..cba653292996 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -30,7 +30,6 @@ * vnt_control_in - Read variable length bytes from MEM/BB/MAC/EEPROM * vnt_control_out_u8 - Write one byte to MEM/BB/MAC/EEPROM * vnt_control_in_u8 - 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 * * Revision History: * 04-05-2004 Jerry Chen: Initial release -- cgit From e96caf368c043353e6c30d2877677a88c0b25c85 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Fri, 25 Jul 2014 20:51:56 +0100 Subject: staging: vt6656: rf.h clean up comments Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/rf.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index 8cebb6ae839d..3acdc65b1e56 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -32,9 +32,7 @@ #include "device.h" -// -// Baseband RF pair definition in eeprom (Bits 6..0) -// +/* Baseband RF pair definition in eeprom (Bits 6..0) */ #define RF_RFMD2959 0x01 #define RF_MAXIMAG 0x02 #define RF_AL2230 0x03 @@ -46,8 +44,8 @@ #define RF_VT3226 0x09 #define RF_AIROHA7230 0x0a #define RF_UW2453 0x0b -#define RF_VT3226D0 0x0c //RobertYu:20051114 -#define RF_VT3342A0 0x0d //RobertYu:20060609 +#define RF_VT3226D0 0x0c /* RobertYu:20051114 */ +#define RF_VT3342A0 0x0d /* RobertYu:20060609 */ #define RF_AL2230S 0x0e #define RF_EMU 0x80 -- cgit From 27c4d23cb070fd83f5705aabfad8d277fed9e022 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:26 -0700 Subject: staging: comedi: ni_tio: fix ni_tio_insn_read() The comedi core expects the (*insn_read) operations to read insn->n values and return the number of values read. Fix this function to work line the core expects. For aesthetics, factor out the code that reads the SM_Save_Reg. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 80 +++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 694bd5142cc5..da6602392fb3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1512,6 +1512,38 @@ int ni_tio_insn_config(struct comedi_device *dev, } EXPORT_SYMBOL_GPL(ni_tio_insn_config); +static unsigned int ni_tio_read_sw_save_reg(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + struct ni_gpct *counter = s->private; + unsigned cidx = counter->counter_index; + unsigned int first_read; + unsigned int second_read; + unsigned int correct_read; + + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), Gi_Save_Trace_Bit, 0); + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), + Gi_Save_Trace_Bit, Gi_Save_Trace_Bit); + + /* + * The count doesn't get latched until the next clock edge, so it is + * possible the count may change (once) while we are reading. Since + * the read of the SW_Save_Reg isn't atomic (apparently even when it's + * a 32 bit register according to 660x docs), we need to read twice + * and make sure the reading hasn't changed. If it has, a third read + * will be correct since the count value will definitely have latched + * by then. + */ + first_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); + second_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); + if (first_read != second_read) + correct_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); + else + correct_read = first_read; + + return correct_read; +} + int ni_tio_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -1519,42 +1551,24 @@ int ni_tio_insn_read(struct comedi_device *dev, { struct ni_gpct *counter = s->private; struct ni_gpct_device *counter_dev = counter->counter_dev; - const unsigned channel = CR_CHAN(insn->chanspec); + unsigned int channel = CR_CHAN(insn->chanspec); unsigned cidx = counter->counter_index; - unsigned first_read; - unsigned second_read; - unsigned correct_read; + int i; - if (insn->n < 1) - return 0; - switch (channel) { - case 0: - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - Gi_Save_Trace_Bit, 0); - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - Gi_Save_Trace_Bit, Gi_Save_Trace_Bit); - /* The count doesn't get latched until the next clock edge, so it is possible the count - may change (once) while we are reading. Since the read of the SW_Save_Reg isn't - atomic (apparently even when it's a 32 bit register according to 660x docs), - we need to read twice and make sure the reading hasn't changed. If it has, - a third read will be correct since the count value will definitely have latched by then. */ - first_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); - second_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); - if (first_read != second_read) - correct_read = - read_register(counter, NITIO_SW_SAVE_REG(cidx)); - else - correct_read = first_read; - data[0] = correct_read; - return 0; - case 1: - data[0] = counter_dev->regs[NITIO_LOADA_REG(cidx)]; - break; - case 2: - data[0] = counter_dev->regs[NITIO_LOADB_REG(cidx)]; - break; + for (i = 0; i < insn->n; i++) { + switch (channel) { + case 0: + data[i] = ni_tio_read_sw_save_reg(dev, s); + break; + case 1: + data[i] = counter_dev->regs[NITIO_LOADA_REG(cidx)]; + break; + case 2: + data[i] = counter_dev->regs[NITIO_LOADB_REG(cidx)]; + break; + } } - return 0; + return insn->n; } EXPORT_SYMBOL_GPL(ni_tio_insn_read); -- cgit From 14f194a9359acd606f43c861559b71ea91cf3224 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:27 -0700 Subject: staging: comedi: ni_tio: fix > 80 char comments Tidy up some of the comments to fix some fo the the checkpatch.pl warnings: WARNING: line over 80 characters Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 44 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index da6602392fb3..8b56397173a3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -413,9 +413,11 @@ static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) default: break; } - /* It's not clear what we should do if clock_period is unknown, so we are not - using the alt sync bit in that case, but allow the caller to decide by using the - force_alt_sync parameter. */ + /* + * It's not clear what we should do if clock_period is unknown, so we + * are not using the alt sync bit in that case, but allow the caller + * to decide by using the force_alt_sync parameter. + */ if (force_alt_sync || (clock_period_ps && clock_period_ps < min_normal_sync_period_ps)) { ni_tio_set_bits(counter, counting_mode_reg, @@ -520,7 +522,11 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) break; default: if (start_trigger & NI_GPCT_ARM_UNKNOWN) { - /* pass-through the least significant bits so we can figure out what select later */ + /* + * pass-through the least significant + * bits so we can figure out what + * select later + */ unsigned hw_arm_select_bits = (start_trigger << Gi_HW_Arm_Select_Shift) & @@ -924,7 +930,10 @@ static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, clock_period_ps = 100000; break; default: - /* clock period is specified by user with prescaling already taken into account. */ + /* + * clock period is specified by user with prescaling + * already taken into account. + */ return counter->clock_period_ps; } @@ -1137,8 +1146,10 @@ static int ni_m_series_set_second_gate(struct ni_gpct *counter, static const unsigned selected_second_gate_mask = 0x1f; unsigned ni_m_series_second_gate_select; - /* FIXME: We don't know what the m-series second gate codes are, so we'll just pass - the bits through for now. */ + /* + * FIXME: We don't know what the m-series second gate codes are, + * so we'll just pass the bits through for now. + */ switch (selected_second_gate) { default: ni_m_series_second_gate_select = @@ -1378,8 +1389,10 @@ static unsigned ni_660x_second_gate_to_generic_gate_source(unsigned static unsigned ni_m_series_second_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) { - /*FIXME: the second gate sources for the m series are undocumented, so we just return - * the raw bits for now. */ + /* + * FIXME: the second gate sources for the m series are undocumented, + * so we just return the raw bits for now. + */ switch (ni_m_series_gate_select) { default: return ni_m_series_gate_select; @@ -1598,13 +1611,20 @@ int ni_tio_insn_write(struct comedi_device *dev, return 0; switch (channel) { case 0: - /* Unsafe if counter is armed. Should probably check status and return -EBUSY if armed. */ - /* Don't disturb load source select, just use whichever load register is already selected. */ + /* + * Unsafe if counter is armed. + * Should probably check status and return -EBUSY if armed. + */ + + /* + * Don't disturb load source select, just use whichever + * load register is already selected. + */ load_reg = ni_tio_next_load_register(counter); write_register(counter, data[0], load_reg); ni_tio_set_bits_transient(counter, NITIO_CMD_REG(cidx), 0, 0, Gi_Load_Bit); - /* restore state of load reg to whatever the user set last set it to */ + /* restore load reg */ write_register(counter, counter_dev->regs[load_reg], load_reg); break; case 1: -- cgit From 347208efa7928cafc8ff54be3d25f0dc695ed91d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:28 -0700 Subject: staging: comedi: ni_tio: tidy up some function declarations Fix the whitespace in some of the function declarations to avoid the ugly line breaks and fix a couple checkpatch.pl issues: WARNING: line over 80 characters WARNING: Unnecessary space before function pointer arguments Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 64 ++++++++++++++------------------- 1 file changed, 27 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 8b56397173a3..49ffb508de00 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -53,9 +53,8 @@ static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, unsigned generic_clock_source); static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter); -static inline enum Gi_Counting_Mode_Reg_Bits Gi_Alternate_Sync_Bit(enum - ni_gpct_variant - variant) +static inline enum Gi_Counting_Mode_Reg_Bits +Gi_Alternate_Sync_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: @@ -71,9 +70,8 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Alternate_Sync_Bit(enum return 0; } -static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X2_Bit(enum - ni_gpct_variant - variant) +static inline enum Gi_Counting_Mode_Reg_Bits +Gi_Prescale_X2_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: @@ -89,9 +87,8 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X2_Bit(enum return 0; } -static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X8_Bit(enum - ni_gpct_variant - variant) +static inline enum Gi_Counting_Mode_Reg_Bits +Gi_Prescale_X8_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: @@ -107,9 +104,8 @@ static inline enum Gi_Counting_Mode_Reg_Bits Gi_Prescale_X8_Bit(enum return 0; } -static inline enum Gi_Counting_Mode_Reg_Bits Gi_HW_Arm_Select_Mask(enum - ni_gpct_variant - variant) +static inline enum Gi_Counting_Mode_Reg_Bits +Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: @@ -257,21 +253,15 @@ static inline unsigned NI_660x_RTSI_Second_Gate_Select(unsigned n) static const unsigned int counter_status_mask = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; -struct ni_gpct_device *ni_gpct_device_construct(struct comedi_device *dev, - void (*write_register) (struct - ni_gpct - * - counter, - unsigned - bits, - enum - ni_gpct_register - reg), - unsigned (*read_register) - (struct ni_gpct *counter, - enum ni_gpct_register reg), - enum ni_gpct_variant variant, - unsigned num_counters) +struct ni_gpct_device * +ni_gpct_device_construct(struct comedi_device *dev, + void (*write_register)(struct ni_gpct *counter, + unsigned bits, + enum ni_gpct_register reg), + unsigned (*read_register)(struct ni_gpct *counter, + enum ni_gpct_register reg), + enum ni_gpct_variant variant, + unsigned num_counters) { unsigned i; @@ -309,8 +299,8 @@ void ni_gpct_device_destroy(struct ni_gpct_device *counter_dev) } EXPORT_SYMBOL_GPL(ni_gpct_device_destroy); -static int ni_tio_second_gate_registers_present(const struct ni_gpct_device - *counter_dev) +static int +ni_tio_second_gate_registers_present(const struct ni_gpct_device *counter_dev) { switch (counter_dev->variant) { case ni_gpct_variant_e_series: @@ -1264,8 +1254,8 @@ static int ni_tio_set_other_src(struct ni_gpct *counter, unsigned index, return -EINVAL; } -static unsigned ni_660x_first_gate_to_generic_gate_source(unsigned - ni_660x_gate_select) +static unsigned +ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) { unsigned i; @@ -1300,8 +1290,8 @@ static unsigned ni_660x_first_gate_to_generic_gate_source(unsigned return 0; }; -static unsigned ni_m_series_first_gate_to_generic_gate_source(unsigned - ni_m_series_gate_select) +static unsigned +ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) { unsigned i; @@ -1345,8 +1335,8 @@ static unsigned ni_m_series_first_gate_to_generic_gate_source(unsigned return 0; }; -static unsigned ni_660x_second_gate_to_generic_gate_source(unsigned - ni_660x_gate_select) +static unsigned +ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) { unsigned i; @@ -1386,8 +1376,8 @@ static unsigned ni_660x_second_gate_to_generic_gate_source(unsigned return 0; }; -static unsigned ni_m_series_second_gate_to_generic_gate_source(unsigned - ni_m_series_gate_select) +static unsigned +ni_m_series_second_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) { /* * FIXME: the second gate sources for the m series are undocumented, -- cgit From 856031614ef3e848f5c60b5c098d365e200d0d20 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:29 -0700 Subject: staging: comedi: ni_tio: remove unnecessary ni_gpct_variant BUG() cases The enum ni_gpct_variant is used to handle hardware variations in the gpct timers handled by this driver. This enum is defined as: enum ni_gpct_variant { ni_gpct_variant_e_series, ni_gpct_variant_m_series, ni_gpct_variant_660x }; For all the switch statements where all three enum values are handled, remove the unreachable BUG(). Move the default case so it is handled the same as ni_gpct_variant_e_series. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 46 +++++++-------------------------- 1 file changed, 10 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 49ffb508de00..c876273a80f4 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -58,16 +58,13 @@ Gi_Alternate_Sync_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: + default: return 0; case ni_gpct_variant_m_series: return Gi_M_Series_Alternate_Sync_Bit; case ni_gpct_variant_660x: return Gi_660x_Alternate_Sync_Bit; - default: - BUG(); - break; } - return 0; } static inline enum Gi_Counting_Mode_Reg_Bits @@ -75,16 +72,13 @@ Gi_Prescale_X2_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: + default: return 0; case ni_gpct_variant_m_series: return Gi_M_Series_Prescale_X2_Bit; case ni_gpct_variant_660x: return Gi_660x_Prescale_X2_Bit; - default: - BUG(); - break; } - return 0; } static inline enum Gi_Counting_Mode_Reg_Bits @@ -92,16 +86,13 @@ Gi_Prescale_X8_Bit(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: + default: return 0; case ni_gpct_variant_m_series: return Gi_M_Series_Prescale_X8_Bit; case ni_gpct_variant_660x: return Gi_660x_Prescale_X8_Bit; - default: - BUG(); - break; } - return 0; } static inline enum Gi_Counting_Mode_Reg_Bits @@ -109,16 +100,13 @@ Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: + default: return 0; case ni_gpct_variant_m_series: return Gi_M_Series_HW_Arm_Select_Mask; case ni_gpct_variant_660x: return Gi_660x_HW_Arm_Select_Mask; - default: - BUG(); - break; } - return 0; } /* clock sources for ni_660x boards, get bits with Gi_Source_Select_Bits() */ @@ -304,15 +292,12 @@ ni_tio_second_gate_registers_present(const struct ni_gpct_device *counter_dev) { switch (counter_dev->variant) { case ni_gpct_variant_e_series: + default: return 0; case ni_gpct_variant_m_series: case ni_gpct_variant_660x: return 1; - default: - BUG(); - break; } - return 0; } static void ni_tio_reset_count_and_disarm(struct ni_gpct *counter) @@ -704,12 +689,10 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, break; case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: + default: input_select_bits |= ni_m_series_source_select_bits(clock_source); break; - default: - BUG(); - break; } if (clock_source & NI_GPCT_INVERT_CLOCK_SRC_BIT) input_select_bits |= Gi_Source_Polarity_Bit; @@ -891,14 +874,11 @@ static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter) switch (counter->counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: + default: return ni_m_series_clock_src_select(counter); case ni_gpct_variant_660x: return ni_660x_clock_src_select(counter); - default: - BUG(); - break; } - return 0; } static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, @@ -1174,12 +1154,10 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: + default: return ni_m_series_set_first_gate(counter, gate_source); case ni_gpct_variant_660x: return ni_660x_set_first_gate(counter, gate_source); - default: - BUG(); - break; } break; case 1: @@ -1415,6 +1393,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: + default: *gate_source = ni_m_series_first_gate_to_generic_gate_source (gate_select_bits); @@ -1424,9 +1403,6 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, ni_660x_first_gate_to_generic_gate_source (gate_select_bits); break; - default: - BUG(); - break; } if (mode_bits & Gi_Gate_Polarity_Bit) *gate_source |= CR_INVERT; @@ -1448,6 +1424,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: + default: *gate_source = ni_m_series_second_gate_to_generic_gate_source (gate_select_bits); @@ -1457,9 +1434,6 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, ni_660x_second_gate_to_generic_gate_source (gate_select_bits); break; - default: - BUG(); - break; } if (counter_dev->regs[second_gate_reg] & Gi_Second_Gate_Polarity_Bit) { -- cgit From 552050532721c17d729abc4a9a655e9ac37b9338 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:30 -0700 Subject: staging: comedi: ni_tio: tidy up ni_660x_set_second_gate() Rename some of the local vars and tidy up this function to fix to fix a couple > 80 char line issues. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 39 ++++++++++++--------------------- 1 file changed, 14 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index c876273a80f4..d610902e1e1c 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1052,43 +1052,34 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); - const unsigned selected_second_gate = CR_CHAN(gate_source); - /* bits of second_gate that may be meaningful to second gate register */ - static const unsigned selected_second_gate_mask = 0x1f; - unsigned ni_660x_second_gate_select; + unsigned int chan = CR_CHAN(gate_source); + unsigned gate2_reg = NITIO_GATE2_REG(cidx); + unsigned gate2_sel; unsigned i; - switch (selected_second_gate) { + switch (chan) { case NI_GPCT_SOURCE_PIN_i_GATE_SELECT: case NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT: case NI_GPCT_SELECTED_GATE_GATE_SELECT: case NI_GPCT_NEXT_OUT_GATE_SELECT: case NI_GPCT_LOGIC_LOW_GATE_SELECT: - ni_660x_second_gate_select = - selected_second_gate & selected_second_gate_mask; + gate2_sel = chan & 0x1f; break; case NI_GPCT_NEXT_SOURCE_GATE_SELECT: - ni_660x_second_gate_select = - NI_660x_Next_SRC_Second_Gate_Select; + gate2_sel = NI_660x_Next_SRC_Second_Gate_Select; break; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (selected_second_gate == NI_GPCT_RTSI_GATE_SELECT(i)) { - ni_660x_second_gate_select = - selected_second_gate & - selected_second_gate_mask; + if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { + gate2_sel = chan & 0x1f; break; } } if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_up_down_pin; ++i) { - if (selected_second_gate == - NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i)) { - ni_660x_second_gate_select = - selected_second_gate & - selected_second_gate_mask; + if (chan == NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i)) { + gate2_sel = chan & 0x1f; break; } } @@ -1096,12 +1087,10 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, break; return -EINVAL; } - counter_dev->regs[second_gate_reg] |= Gi_Second_Gate_Mode_Bit; - counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Select_Mask; - counter_dev->regs[second_gate_reg] |= - Gi_Second_Gate_Select_Bits(ni_660x_second_gate_select); - write_register(counter, counter_dev->regs[second_gate_reg], - second_gate_reg); + counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Mode_Bit; + counter_dev->regs[gate2_reg] &= ~Gi_Second_Gate_Select_Mask; + counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Select_Bits(gate2_sel); + write_register(counter, counter_dev->regs[gate2_reg], gate2_reg); return 0; } -- cgit From 7d2a6e548e7137d456d742d3a0df0228861818ec Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:31 -0700 Subject: staging: comedi: ni_tio: tidy up ni_m_series_set_first_gate() Rename some of the local vars and tidy up this function to fix to fix a couple > 80 char line issues. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index d610902e1e1c..fa1ca451d28b 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1002,14 +1002,12 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, static int ni_m_series_set_first_gate(struct ni_gpct *counter, unsigned int gate_source) { - const unsigned selected_gate = CR_CHAN(gate_source); + unsigned int chan = CR_CHAN(gate_source); unsigned cidx = counter->counter_index; - /* bits of selected_gate that may be meaningful to input select register */ - const unsigned selected_gate_mask = 0x1f; - unsigned ni_m_series_gate_select; + unsigned gate_sel; unsigned i; - switch (selected_gate) { + switch (chan) { case NI_GPCT_TIMESTAMP_MUX_GATE_SELECT: case NI_GPCT_AI_START2_GATE_SELECT: case NI_GPCT_PXI_STAR_TRIGGER_GATE_SELECT: @@ -1018,22 +1016,20 @@ static int ni_m_series_set_first_gate(struct ni_gpct *counter, case NI_GPCT_NEXT_SOURCE_GATE_SELECT: case NI_GPCT_ANALOG_TRIGGER_OUT_GATE_SELECT: case NI_GPCT_LOGIC_LOW_GATE_SELECT: - ni_m_series_gate_select = selected_gate & selected_gate_mask; + gate_sel = chan & 0x1f; break; default: for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { - if (selected_gate == NI_GPCT_RTSI_GATE_SELECT(i)) { - ni_m_series_gate_select = - selected_gate & selected_gate_mask; + if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { + gate_sel = chan & 0x1f; break; } } if (i <= ni_m_series_max_rtsi_channel) break; for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { - if (selected_gate == NI_GPCT_PFI_GATE_SELECT(i)) { - ni_m_series_gate_select = - selected_gate & selected_gate_mask; + if (chan == NI_GPCT_PFI_GATE_SELECT(i)) { + gate_sel = chan & 0x1f; break; } } @@ -1042,8 +1038,7 @@ static int ni_m_series_set_first_gate(struct ni_gpct *counter, return -EINVAL; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Gate_Select_Mask, - Gi_Gate_Select_Bits(ni_m_series_gate_select)); + Gi_Gate_Select_Mask, Gi_Gate_Select_Bits(gate_sel)); return 0; } -- cgit From e09dd2c3c5c9454c0fe93a0165421d2d2027c3dc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:32 -0700 Subject: staging: comedi: ni_tio: tidy up ni_660x_set_first_gate() Rename some of the local vars and tidy up this function to fix to fix a couple > 80 char line issues. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index fa1ca451d28b..e613353c6f53 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -955,37 +955,33 @@ static void ni_tio_set_first_gate_modifiers(struct ni_gpct *counter, static int ni_660x_set_first_gate(struct ni_gpct *counter, unsigned int gate_source) { - const unsigned selected_gate = CR_CHAN(gate_source); + unsigned int chan = CR_CHAN(gate_source); unsigned cidx = counter->counter_index; - /* bits of selected_gate that may be meaningful to input select register */ - const unsigned selected_gate_mask = 0x1f; - unsigned ni_660x_gate_select; + unsigned gate_sel; unsigned i; - switch (selected_gate) { + switch (chan) { case NI_GPCT_NEXT_SOURCE_GATE_SELECT: - ni_660x_gate_select = NI_660x_Next_SRC_Gate_Select; + gate_sel = NI_660x_Next_SRC_Gate_Select; break; case NI_GPCT_NEXT_OUT_GATE_SELECT: case NI_GPCT_LOGIC_LOW_GATE_SELECT: case NI_GPCT_SOURCE_PIN_i_GATE_SELECT: case NI_GPCT_GATE_PIN_i_GATE_SELECT: - ni_660x_gate_select = selected_gate & selected_gate_mask; + gate_sel = chan & 0x1f; break; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (selected_gate == NI_GPCT_RTSI_GATE_SELECT(i)) { - ni_660x_gate_select = - selected_gate & selected_gate_mask; + if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { + gate_sel = chan & 0x1f; break; } } if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_gate_pin; ++i) { - if (selected_gate == NI_GPCT_GATE_PIN_GATE_SELECT(i)) { - ni_660x_gate_select = - selected_gate & selected_gate_mask; + if (chan == NI_GPCT_GATE_PIN_GATE_SELECT(i)) { + gate_sel = chan & 0x1f; break; } } @@ -994,8 +990,7 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, return -EINVAL; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Gate_Select_Mask, - Gi_Gate_Select_Bits(ni_660x_gate_select)); + Gi_Gate_Select_Mask, Gi_Gate_Select_Bits(gate_sel)); return 0; } -- cgit From 9f9d6446b3e962ba65243a869eb2d60baa464344 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:33 -0700 Subject: staging: comedi: ni_tio: convert NI_M_Series_RTSI_Clock() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index e613353c6f53..e1d7d4edb976 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -154,12 +154,7 @@ static inline unsigned NI_M_Series_PFI_Clock(unsigned n) } static const unsigned ni_m_series_max_rtsi_channel = 7; -static inline unsigned NI_M_Series_RTSI_Clock(unsigned n) -{ - BUG_ON(n > ni_m_series_max_rtsi_channel); - - return (n == 7) ? 0x1b : (0xb + n); -} +#define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) enum ni_660x_gate_select { NI_660x_Source_Pin_i_Gate_Select = 0x0, @@ -622,7 +617,7 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) default: for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { - ni_m_series_clock = NI_M_Series_RTSI_Clock(i); + ni_m_series_clock = NI_M_RTSI_CLK(i); break; } } @@ -791,7 +786,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) break; default: for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { - if (input_select == NI_M_Series_RTSI_Clock(i)) { + if (input_select == NI_M_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } -- cgit From 1649d56d92ff85b56c7af9b385fa729487277e94 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:34 -0700 Subject: staging: comedi: ni_tio: convert NI_M_Series_PFI_Clock() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index e1d7d4edb976..e6b813489116 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -146,12 +146,7 @@ enum ni_m_series_clock_source { NI_M_Series_Logic_Low_Clock = 0x1f, }; static const unsigned ni_m_series_max_pfi_channel = 15; -static inline unsigned NI_M_Series_PFI_Clock(unsigned n) -{ - BUG_ON(n > ni_m_series_max_pfi_channel); - - return (n < 10) ? (1 + n) : (0xb + n); -} +#define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) static const unsigned ni_m_series_max_rtsi_channel = 7; #define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) @@ -625,7 +620,7 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) break; for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { if (clock_select_bits == NI_GPCT_PFI_CLOCK_SRC_BITS(i)) { - ni_m_series_clock = NI_M_Series_PFI_Clock(i); + ni_m_series_clock = NI_M_PFI_CLK(i); break; } } @@ -794,7 +789,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) if (i <= ni_m_series_max_rtsi_channel) break; for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { - if (input_select == NI_M_Series_PFI_Clock(i)) { + if (input_select == NI_M_PFI_CLK(i)) { clock_source = NI_GPCT_PFI_CLOCK_SRC_BITS(i); break; } -- cgit From 72f4202f1ff20edfcc34368488d5bd760fac57b6 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:35 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_Gate_Pin_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index e6b813489116..818519a72f76 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -159,11 +159,7 @@ enum ni_660x_gate_select { NI_660x_Logic_Low_Gate_Select = 0x1f, }; static const unsigned ni_660x_max_gate_pin = 7; -static inline unsigned NI_660x_Gate_Pin_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_660x_max_gate_pin); - return 0x2 + n; -} +#define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) static inline unsigned NI_660x_RTSI_Gate_Select(unsigned n) { @@ -1225,8 +1221,7 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_gate_pin; ++i) { - if (ni_660x_gate_select == - NI_660x_Gate_Pin_Gate_Select(i)) + if (ni_660x_gate_select == NI_660X_PIN_GATE_SEL(i)) return NI_GPCT_GATE_PIN_GATE_SELECT(i); } if (i <= ni_660x_max_gate_pin) -- cgit From 5f8c74429a5f328ab541ddce31d578807e5bcf9c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:36 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_RTSI_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 818519a72f76..1fb9a5c26a32 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -160,12 +160,7 @@ enum ni_660x_gate_select { }; static const unsigned ni_660x_max_gate_pin = 7; #define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) - -static inline unsigned NI_660x_RTSI_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_660x_max_rtsi_channel); - return 0xb + n; -} +#define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) enum ni_m_series_gate_select { NI_M_Series_Timestamp_Mux_Gate_Select = 0x0, @@ -1215,7 +1210,7 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (ni_660x_gate_select == NI_660x_RTSI_Gate_Select(i)) + if (ni_660x_gate_select == NI_660X_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } if (i <= ni_660x_max_rtsi_channel) -- cgit From cfd5fed2004c4c48247ae7766f8705ec2438a2ce Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:37 -0700 Subject: staging: comedi: ni_tio: convert NI_M_Series_RTSI_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 1fb9a5c26a32..60ec33fe100a 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -172,13 +172,7 @@ enum ni_m_series_gate_select { NI_M_Series_Analog_Trigger_Out_Gate_Select = 0x1e, NI_M_Series_Logic_Low_Gate_Select = 0x1f, }; -static inline unsigned NI_M_Series_RTSI_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_m_series_max_rtsi_channel); - if (n == 7) - return 0x1b; - return 0xb + n; -} +#define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) static inline unsigned NI_M_Series_PFI_Gate_Select(unsigned n) { @@ -1251,10 +1245,8 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { - if (ni_m_series_gate_select == - NI_M_Series_RTSI_Gate_Select(i)) { + if (ni_m_series_gate_select == NI_M_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); - } } if (i <= ni_m_series_max_rtsi_channel) break; -- cgit From 03c7867123e012d99ffedef885db41579eab1c48 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:38 -0700 Subject: staging: comedi: ni_tio: convert NI_M_Series_PFI_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 60ec33fe100a..ee9c8534fe79 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -173,14 +173,7 @@ enum ni_m_series_gate_select { NI_M_Series_Logic_Low_Gate_Select = 0x1f, }; #define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) - -static inline unsigned NI_M_Series_PFI_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_m_series_max_pfi_channel); - if (n < 10) - return 1 + n; - return 0xb + n; -} +#define NI_M_PFI_GATE_SEL(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) static inline unsigned Gi_Source_Select_Bits(unsigned source) { @@ -1251,10 +1244,8 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) if (i <= ni_m_series_max_rtsi_channel) break; for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { - if (ni_m_series_gate_select == - NI_M_Series_PFI_Gate_Select(i)) { + if (ni_m_series_gate_select == NI_M_PFI_GATE_SEL(i)) return NI_GPCT_PFI_GATE_SELECT(i); - } } if (i <= ni_m_series_max_pfi_channel) break; -- cgit From cdf4fce4211be5af3915a10f2ea9a28d2696c2cb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:39 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_Source_Pin_Clock() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index ee9c8534fe79..a7cd59b7e8de 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -127,11 +127,7 @@ static inline unsigned NI_660x_RTSI_Clock(unsigned n) } static const unsigned ni_660x_max_source_pin = 7; -static inline unsigned NI_660x_Source_Pin_Clock(unsigned n) -{ - BUG_ON(n > ni_660x_max_source_pin); - return 0x2 + n; -} +#define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) /* clock sources for ni e and m series boards, get bits with Gi_Source_Select_Bits() */ enum ni_m_series_clock_source { @@ -540,7 +536,7 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) for (i = 0; i <= ni_660x_max_source_pin; ++i) { if (clock_select_bits == NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i)) { - ni_660x_clock = NI_660x_Source_Pin_Clock(i); + ni_660x_clock = NI_660X_SRC_PIN_CLK(i); break; } } @@ -822,7 +818,7 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_source_pin; ++i) { - if (input_select == NI_660x_Source_Pin_Clock(i)) { + if (input_select == NI_660X_SRC_PIN_CLK(i)) { clock_source = NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i); break; -- cgit From 288cb1a87c63ab4df05936c8842474c9b5530af4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:40 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_RTSI_Clock() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index a7cd59b7e8de..422052ffda7d 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -120,11 +120,7 @@ enum ni_660x_clock_source { NI_660x_Logic_Low_Clock = 0x1f, }; static const unsigned ni_660x_max_rtsi_channel = 6; -static inline unsigned NI_660x_RTSI_Clock(unsigned n) -{ - BUG_ON(n > ni_660x_max_rtsi_channel); - return 0xb + n; -} +#define NI_660X_RTSI_CLK(x) (0xb + (x)) static const unsigned ni_660x_max_source_pin = 7; #define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) @@ -527,7 +523,7 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { - ni_660x_clock = NI_660x_RTSI_Clock(i); + ni_660x_clock = NI_660X_RTSI_CLK(i); break; } } @@ -810,7 +806,7 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) break; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (input_select == NI_660x_RTSI_Clock(i)) { + if (input_select == NI_660X_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } -- cgit From ff9a9861154e5f8cebeb981b86ee194cfef00ede Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:41 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_RTSI_Second_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 422052ffda7d..234761225081 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -192,11 +192,7 @@ static inline unsigned NI_660x_Up_Down_Pin_Second_Gate_Select(unsigned n) return 0x2 + n; } -static inline unsigned NI_660x_RTSI_Second_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_660x_max_rtsi_channel); - return 0xb + n; -} +#define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) static const unsigned int counter_status_mask = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; @@ -1267,10 +1263,8 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { - if (ni_660x_gate_select == - NI_660x_RTSI_Second_Gate_Select(i)) { + if (ni_660x_gate_select == NI_660X_RTSI_GATE2_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); - } } if (i <= ni_660x_max_rtsi_channel) break; -- cgit From e04460a650e10afb891b941c0a58545b1f2f5963 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:42 -0700 Subject: staging: comedi: ni_tio: convert NI_660x_Up_Down_Pin_Second_Gate_Select() to a macro The BUG_ON() in this function can never happen. For aesthetics, rename this CamelCase inline function and convert it into a simple macro. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 234761225081..247e3daadadb 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -186,12 +186,7 @@ enum ni_660x_second_gate_select { NI_660x_Logic_Low_Second_Gate_Select = 0x1f, }; static const unsigned ni_660x_max_up_down_pin = 7; -static inline unsigned NI_660x_Up_Down_Pin_Second_Gate_Select(unsigned n) -{ - BUG_ON(n > ni_660x_max_up_down_pin); - return 0x2 + n; -} - +#define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) #define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) static const unsigned int counter_status_mask = @@ -1269,10 +1264,8 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) if (i <= ni_660x_max_rtsi_channel) break; for (i = 0; i <= ni_660x_max_up_down_pin; ++i) { - if (ni_660x_gate_select == - NI_660x_Up_Down_Pin_Second_Gate_Select(i)) { + if (ni_660x_gate_select == NI_660X_UD_PIN_GATE2_SEL(i)) return NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i); - } } if (i <= ni_660x_max_up_down_pin) break; -- cgit From eca7d87201eea47ec2b1d5705533c8cdef312e54 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:43 -0700 Subject: staging: comedi: ni_tio: convert global static const variables to defines For aesthetics, convert the global static const varaibles into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 92 ++++++++++++++++----------------- 1 file changed, 46 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 247e3daadadb..9b5ab0bf5bfe 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -119,10 +119,10 @@ enum ni_660x_clock_source { NI_660x_Timebase_3_Clock = 0x1e, /* 80MHz */ NI_660x_Logic_Low_Clock = 0x1f, }; -static const unsigned ni_660x_max_rtsi_channel = 6; +#define NI_660X_MAX_RTSI_CHAN 6 #define NI_660X_RTSI_CLK(x) (0xb + (x)) -static const unsigned ni_660x_max_source_pin = 7; +#define NI_660X_MAX_SRC_PIN 7 #define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) /* clock sources for ni e and m series boards, get bits with Gi_Source_Select_Bits() */ @@ -137,10 +137,10 @@ enum ni_m_series_clock_source { NI_M_Series_Analog_Trigger_Out_Clock = 0x1e, /* when Gi_Src_SubSelect = 1 */ NI_M_Series_Logic_Low_Clock = 0x1f, }; -static const unsigned ni_m_series_max_pfi_channel = 15; +#define NI_M_MAX_PFI_CHAN 15 #define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) -static const unsigned ni_m_series_max_rtsi_channel = 7; +#define NI_M_MAX_RTSI_CHAN 7 #define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) enum ni_660x_gate_select { @@ -150,7 +150,7 @@ enum ni_660x_gate_select { NI_660x_Next_Out_Gate_Select = 0x14, NI_660x_Logic_Low_Gate_Select = 0x1f, }; -static const unsigned ni_660x_max_gate_pin = 7; +#define NI_660X_MAX_GATE_PIN 7 #define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) #define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) @@ -185,7 +185,7 @@ enum ni_660x_second_gate_select { NI_660x_Selected_Gate_Second_Gate_Select = 0x1e, NI_660x_Logic_Low_Second_Gate_Select = 0x1f, }; -static const unsigned ni_660x_max_up_down_pin = 7; +#define NI_660X_MAX_UP_DOWN_PIN 7 #define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) #define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) @@ -512,22 +512,22 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) ni_660x_clock = NI_660x_Next_TC_Clock; break; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { ni_660x_clock = NI_660X_RTSI_CLK(i); break; } } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_source_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { if (clock_select_bits == NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i)) { ni_660x_clock = NI_660X_SRC_PIN_CLK(i); break; } } - if (i <= ni_660x_max_source_pin) + if (i <= NI_660X_MAX_SRC_PIN) break; ni_660x_clock = 0; BUG(); @@ -571,21 +571,21 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) ni_m_series_clock = NI_M_Series_Analog_Trigger_Out_Clock; break; default: - for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { ni_m_series_clock = NI_M_RTSI_CLK(i); break; } } - if (i <= ni_m_series_max_rtsi_channel) + if (i <= NI_M_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { if (clock_select_bits == NI_GPCT_PFI_CLOCK_SRC_BITS(i)) { ni_m_series_clock = NI_M_PFI_CLK(i); break; } } - if (i <= ni_m_series_max_pfi_channel) + if (i <= NI_M_MAX_PFI_CHAN) break; printk(KERN_ERR "invalid clock source 0x%lx\n", (unsigned long)clock_source); @@ -741,21 +741,21 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; break; default: - for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { if (input_select == NI_M_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } } - if (i <= ni_m_series_max_rtsi_channel) + if (i <= NI_M_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { if (input_select == NI_M_PFI_CLK(i)) { clock_source = NI_GPCT_PFI_CLOCK_SRC_BITS(i); break; } } - if (i <= ni_m_series_max_pfi_channel) + if (i <= NI_M_MAX_PFI_CHAN) break; BUG(); break; @@ -796,22 +796,22 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; break; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (input_select == NI_660X_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_source_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { if (input_select == NI_660X_SRC_PIN_CLK(i)) { clock_source = NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i); break; } } - if (i <= ni_660x_max_source_pin) + if (i <= NI_660X_MAX_SRC_PIN) break; BUG(); break; @@ -922,21 +922,21 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, gate_sel = chan & 0x1f; break; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { gate_sel = chan & 0x1f; break; } } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_gate_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_GATE_PIN; ++i) { if (chan == NI_GPCT_GATE_PIN_GATE_SELECT(i)) { gate_sel = chan & 0x1f; break; } } - if (i <= ni_660x_max_gate_pin) + if (i <= NI_660X_MAX_GATE_PIN) break; return -EINVAL; } @@ -965,21 +965,21 @@ static int ni_m_series_set_first_gate(struct ni_gpct *counter, gate_sel = chan & 0x1f; break; default: - for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { gate_sel = chan & 0x1f; break; } } - if (i <= ni_m_series_max_rtsi_channel) + if (i <= NI_M_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { if (chan == NI_GPCT_PFI_GATE_SELECT(i)) { gate_sel = chan & 0x1f; break; } } - if (i <= ni_m_series_max_pfi_channel) + if (i <= NI_M_MAX_PFI_CHAN) break; return -EINVAL; } @@ -1010,21 +1010,21 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, gate2_sel = NI_660x_Next_SRC_Second_Gate_Select; break; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (chan == NI_GPCT_RTSI_GATE_SELECT(i)) { gate2_sel = chan & 0x1f; break; } } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_up_down_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_UP_DOWN_PIN; ++i) { if (chan == NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i)) { gate2_sel = chan & 0x1f; break; } } - if (i <= ni_660x_max_up_down_pin) + if (i <= NI_660X_MAX_UP_DOWN_PIN) break; return -EINVAL; } @@ -1179,17 +1179,17 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) case NI_660x_Logic_Low_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (ni_660x_gate_select == NI_660X_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_gate_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_GATE_PIN; ++i) { if (ni_660x_gate_select == NI_660X_PIN_GATE_SEL(i)) return NI_GPCT_GATE_PIN_GATE_SELECT(i); } - if (i <= ni_660x_max_gate_pin) + if (i <= NI_660X_MAX_GATE_PIN) break; BUG(); break; @@ -1220,17 +1220,17 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) case NI_M_Series_Logic_Low_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: - for (i = 0; i <= ni_m_series_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { if (ni_m_series_gate_select == NI_M_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= ni_m_series_max_rtsi_channel) + if (i <= NI_M_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_m_series_max_pfi_channel; ++i) { + for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { if (ni_m_series_gate_select == NI_M_PFI_GATE_SEL(i)) return NI_GPCT_PFI_GATE_SELECT(i); } - if (i <= ni_m_series_max_pfi_channel) + if (i <= NI_M_MAX_PFI_CHAN) break; BUG(); break; @@ -1257,17 +1257,17 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) case NI_660x_Logic_Low_Second_Gate_Select: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: - for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) { + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { if (ni_660x_gate_select == NI_660X_RTSI_GATE2_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= ni_660x_max_rtsi_channel) + if (i <= NI_660X_MAX_RTSI_CHAN) break; - for (i = 0; i <= ni_660x_max_up_down_pin; ++i) { + for (i = 0; i <= NI_660X_MAX_UP_DOWN_PIN; ++i) { if (ni_660x_gate_select == NI_660X_UD_PIN_GATE2_SEL(i)) return NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i); } - if (i <= ni_660x_max_up_down_pin) + if (i <= NI_660X_MAX_UP_DOWN_PIN) break; BUG(); break; -- cgit From 01ca8f978b2e6633fb0dbabf8b18355a460712df Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:44 -0700 Subject: staging: comedi: ni_tio: remove counter_status_mask For aesthetics, remove this global static const varaible. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 9b5ab0bf5bfe..6da4ab588385 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -189,9 +189,6 @@ enum ni_660x_second_gate_select { #define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) #define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) -static const unsigned int counter_status_mask = - COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; - struct ni_gpct_device * ni_gpct_device_construct(struct comedi_device *dev, void (*write_register)(struct ni_gpct *counter, @@ -1387,7 +1384,7 @@ int ni_tio_insn_config(struct comedi_device *dev, return 0; case INSN_CONFIG_GET_COUNTER_STATUS: data[1] = ni_tio_counter_status(counter); - data[2] = counter_status_mask; + data[2] = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; return 0; case INSN_CONFIG_SET_CLOCK_SRC: return ni_tio_set_clock_src(counter, data[1], data[2]); -- cgit From 7e3e7591631290617ca0a5bc9bd05aabf547d87d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:45 -0700 Subject: staging: comedi: ni_tio: tidy up enum ni_660x_second_gate_select These values are not used as an enum. For aesthetics, rename the CamelCase values and convert them into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 6da4ab588385..6ef64a6efea7 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -177,17 +177,16 @@ static inline unsigned Gi_Gate_Select_Bits(unsigned gate_select) return (gate_select << Gi_Gate_Select_Shift) & Gi_Gate_Select_Mask; } -enum ni_660x_second_gate_select { - NI_660x_Source_Pin_i_Second_Gate_Select = 0x0, - NI_660x_Up_Down_Pin_i_Second_Gate_Select = 0x1, - NI_660x_Next_SRC_Second_Gate_Select = 0xa, - NI_660x_Next_Out_Second_Gate_Select = 0x14, - NI_660x_Selected_Gate_Second_Gate_Select = 0x1e, - NI_660x_Logic_Low_Second_Gate_Select = 0x1f, -}; -#define NI_660X_MAX_UP_DOWN_PIN 7 +/* NI660X second gate select */ +#define NI_660X_SRC_PIN_I_GATE2_SEL 0x0 +#define NI_660X_UD_PIN_I_GATE2_SEL 0x1 #define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) +#define NI_660X_NEXT_SRC_GATE2_SEL 0xa #define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) +#define NI_660X_NEXT_OUT_GATE2_SEL 0x14 +#define NI_660X_SELECTED_GATE2_SEL 0x1e +#define NI_660X_LOGIC_LOW_GATE2_SEL 0x1f +#define NI_660X_MAX_UP_DOWN_PIN 7 struct ni_gpct_device * ni_gpct_device_construct(struct comedi_device *dev, @@ -1004,7 +1003,7 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, gate2_sel = chan & 0x1f; break; case NI_GPCT_NEXT_SOURCE_GATE_SELECT: - gate2_sel = NI_660x_Next_SRC_Second_Gate_Select; + gate2_sel = NI_660X_NEXT_SRC_GATE2_SEL; break; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { @@ -1241,17 +1240,17 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) unsigned i; switch (ni_660x_gate_select) { - case NI_660x_Source_Pin_i_Second_Gate_Select: + case NI_660X_SRC_PIN_I_GATE2_SEL: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; - case NI_660x_Up_Down_Pin_i_Second_Gate_Select: + case NI_660X_UD_PIN_I_GATE2_SEL: return NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT; - case NI_660x_Next_SRC_Second_Gate_Select: + case NI_660X_NEXT_SRC_GATE2_SEL: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - case NI_660x_Next_Out_Second_Gate_Select: + case NI_660X_NEXT_OUT_GATE2_SEL: return NI_GPCT_NEXT_OUT_GATE_SELECT; - case NI_660x_Selected_Gate_Second_Gate_Select: + case NI_660X_SELECTED_GATE2_SEL: return NI_GPCT_SELECTED_GATE_GATE_SELECT; - case NI_660x_Logic_Low_Second_Gate_Select: + case NI_660X_LOGIC_LOW_GATE2_SEL: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { -- cgit From 390db7a30e4105db0a87a91918e08e060f1398a2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:46 -0700 Subject: staging: comedi: ni_tio: tidy up enum ni_m_series_gate_select These values are not used as an enum. For aesthetics, rename the CamelCase values and convert them into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 37 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 6ef64a6efea7..62a5cab53970 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -154,18 +154,17 @@ enum ni_660x_gate_select { #define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) #define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) -enum ni_m_series_gate_select { - NI_M_Series_Timestamp_Mux_Gate_Select = 0x0, - NI_M_Series_AI_START2_Gate_Select = 0x12, - NI_M_Series_PXI_Star_Trigger_Gate_Select = 0x13, - NI_M_Series_Next_Out_Gate_Select = 0x14, - NI_M_Series_AI_START1_Gate_Select = 0x1c, - NI_M_Series_Next_SRC_Gate_Select = 0x1d, - NI_M_Series_Analog_Trigger_Out_Gate_Select = 0x1e, - NI_M_Series_Logic_Low_Gate_Select = 0x1f, -}; -#define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) +/* NI M SERIES gate_select */ +#define NI_M_TIMESTAMP_MUX_GATE_SEL 0x0 #define NI_M_PFI_GATE_SEL(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) +#define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) +#define NI_M_AI_START2_GATE_SEL 0x12 +#define NI_M_PXI_STAR_TRIGGER_GATE_SEL 0x13 +#define NI_M_NEXT_OUT_GATE_SEL 0x14 +#define NI_M_AI_START1_GATE_SEL 0x1c +#define NI_M_NEXT_SRC_GATE_SEL 0x1d +#define NI_M_ANALOG_TRIG_OUT_GATE_SEL 0x1e +#define NI_M_LOGIC_LOW_GATE_SEL 0x1f static inline unsigned Gi_Source_Select_Bits(unsigned source) { @@ -1199,21 +1198,21 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) unsigned i; switch (ni_m_series_gate_select) { - case NI_M_Series_Timestamp_Mux_Gate_Select: + case NI_M_TIMESTAMP_MUX_GATE_SEL: return NI_GPCT_TIMESTAMP_MUX_GATE_SELECT; - case NI_M_Series_AI_START2_Gate_Select: + case NI_M_AI_START2_GATE_SEL: return NI_GPCT_AI_START2_GATE_SELECT; - case NI_M_Series_PXI_Star_Trigger_Gate_Select: + case NI_M_PXI_STAR_TRIGGER_GATE_SEL: return NI_GPCT_PXI_STAR_TRIGGER_GATE_SELECT; - case NI_M_Series_Next_Out_Gate_Select: + case NI_M_NEXT_OUT_GATE_SEL: return NI_GPCT_NEXT_OUT_GATE_SELECT; - case NI_M_Series_AI_START1_Gate_Select: + case NI_M_AI_START1_GATE_SEL: return NI_GPCT_AI_START1_GATE_SELECT; - case NI_M_Series_Next_SRC_Gate_Select: + case NI_M_NEXT_SRC_GATE_SEL: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - case NI_M_Series_Analog_Trigger_Out_Gate_Select: + case NI_M_ANALOG_TRIG_OUT_GATE_SEL: return NI_GPCT_ANALOG_TRIGGER_OUT_GATE_SELECT; - case NI_M_Series_Logic_Low_Gate_Select: + case NI_M_LOGIC_LOW_GATE_SEL: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { -- cgit From 5a3d1ed8574a505d80d94796e4d2f2efaf9bfed0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:47 -0700 Subject: staging: comedi: ni_tio: tidy up enum ni_660x_gate_select These values are not used as an enum. For aesthetics, rename the CamelCase values and convert them into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 62a5cab53970..39c7f50a49a9 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -143,16 +143,15 @@ enum ni_m_series_clock_source { #define NI_M_MAX_RTSI_CHAN 7 #define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) -enum ni_660x_gate_select { - NI_660x_Source_Pin_i_Gate_Select = 0x0, - NI_660x_Gate_Pin_i_Gate_Select = 0x1, - NI_660x_Next_SRC_Gate_Select = 0xa, - NI_660x_Next_Out_Gate_Select = 0x14, - NI_660x_Logic_Low_Gate_Select = 0x1f, -}; -#define NI_660X_MAX_GATE_PIN 7 +/* NI660X gate select */ +#define NI_660X_SRC_PIN_I_GATE_SEL 0x0 +#define NI_660X_GATE_PIN_I_GATE_SEL 0x1 #define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) +#define NI_660X_NEXT_SRC_GATE_SEL 0xa #define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) +#define NI_660X_NEXT_OUT_GATE_SEL 0x14 +#define NI_660X_LOGIC_LOW_GATE_SEL 0x1f +#define NI_660X_MAX_GATE_PIN 7 /* NI M SERIES gate_select */ #define NI_M_TIMESTAMP_MUX_GATE_SEL 0x0 @@ -908,7 +907,7 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, switch (chan) { case NI_GPCT_NEXT_SOURCE_GATE_SELECT: - gate_sel = NI_660x_Next_SRC_Gate_Select; + gate_sel = NI_660X_NEXT_SRC_GATE_SEL; break; case NI_GPCT_NEXT_OUT_GATE_SELECT: case NI_GPCT_LOGIC_LOW_GATE_SELECT: @@ -1163,15 +1162,15 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) unsigned i; switch (ni_660x_gate_select) { - case NI_660x_Source_Pin_i_Gate_Select: + case NI_660X_SRC_PIN_I_GATE_SEL: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; - case NI_660x_Gate_Pin_i_Gate_Select: + case NI_660X_GATE_PIN_I_GATE_SEL: return NI_GPCT_GATE_PIN_i_GATE_SELECT; - case NI_660x_Next_SRC_Gate_Select: + case NI_660X_NEXT_SRC_GATE_SEL: return NI_GPCT_NEXT_SOURCE_GATE_SELECT; - case NI_660x_Next_Out_Gate_Select: + case NI_660X_NEXT_OUT_GATE_SEL: return NI_GPCT_NEXT_OUT_GATE_SELECT; - case NI_660x_Logic_Low_Gate_Select: + case NI_660X_LOGIC_LOW_GATE_SEL: return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { -- cgit From c93a74068657ef8489765a900d872be1451d5f85 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:48 -0700 Subject: staging: comedi: ni_tio: tidy up enum ni_m_series_clock_source These values are not used as an enum. For aesthetics, rename the CamelCase values and convert them into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 62 ++++++++++++++++----------------- 1 file changed, 31 insertions(+), 31 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 39c7f50a49a9..757a7a58626c 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -125,23 +125,23 @@ enum ni_660x_clock_source { #define NI_660X_MAX_SRC_PIN 7 #define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) -/* clock sources for ni e and m series boards, get bits with Gi_Source_Select_Bits() */ -enum ni_m_series_clock_source { - NI_M_Series_Timebase_1_Clock = 0x0, /* 20MHz */ - NI_M_Series_Timebase_2_Clock = 0x12, /* 100KHz */ - NI_M_Series_Next_TC_Clock = 0x13, - NI_M_Series_Next_Gate_Clock = 0x14, /* when Gi_Src_SubSelect = 0 */ - NI_M_Series_PXI_Star_Trigger_Clock = 0x14, /* when Gi_Src_SubSelect = 1 */ - NI_M_Series_PXI10_Clock = 0x1d, - NI_M_Series_Timebase_3_Clock = 0x1e, /* 80MHz, when Gi_Src_SubSelect = 0 */ - NI_M_Series_Analog_Trigger_Out_Clock = 0x1e, /* when Gi_Src_SubSelect = 1 */ - NI_M_Series_Logic_Low_Clock = 0x1f, -}; -#define NI_M_MAX_PFI_CHAN 15 +/* + * clock sources for ni e and m series boards, + * get bits with Gi_Source_Select_Bits() + */ +#define NI_M_TIMEBASE_1_CLK 0x0 /* 20MHz */ #define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) - -#define NI_M_MAX_RTSI_CHAN 7 #define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) +#define NI_M_TIMEBASE_2_CLK 0x12 /* 100KHz */ +#define NI_M_NEXT_TC_CLK 0x13 +#define NI_M_NEXT_GATE_CLK 0x14 /* Gi_Src_SubSelect=0 */ +#define NI_M_PXI_STAR_TRIGGER_CLK 0x14 /* Gi_Src_SubSelect=1 */ +#define NI_M_PXI10_CLK 0x1d +#define NI_M_TIMEBASE_3_CLK 0x1e /* 80MHz, Gi_Src_SubSelect=0 */ +#define NI_M_ANALOG_TRIGGER_OUT_CLK 0x1e /* Gi_Src_SubSelect=1 */ +#define NI_M_LOGIC_LOW_CLK 0x1f +#define NI_M_MAX_PFI_CHAN 15 +#define NI_M_MAX_RTSI_CHAN 7 /* NI660X gate select */ #define NI_660X_SRC_PIN_I_GATE_SEL 0x0 @@ -538,31 +538,31 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; switch (clock_select_bits) { case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Timebase_1_Clock; + ni_m_series_clock = NI_M_TIMEBASE_1_CLK; break; case NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Timebase_2_Clock; + ni_m_series_clock = NI_M_TIMEBASE_2_CLK; break; case NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Timebase_3_Clock; + ni_m_series_clock = NI_M_TIMEBASE_3_CLK; break; case NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Logic_Low_Clock; + ni_m_series_clock = NI_M_LOGIC_LOW_CLK; break; case NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Next_Gate_Clock; + ni_m_series_clock = NI_M_NEXT_GATE_CLK; break; case NI_GPCT_NEXT_TC_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Next_TC_Clock; + ni_m_series_clock = NI_M_NEXT_TC_CLK; break; case NI_GPCT_PXI10_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_PXI10_Clock; + ni_m_series_clock = NI_M_PXI10_CLK; break; case NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_PXI_Star_Trigger_Clock; + ni_m_series_clock = NI_M_PXI_STAR_TRIGGER_CLK; break; case NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS: - ni_m_series_clock = NI_M_Series_Analog_Trigger_Out_Clock; + ni_m_series_clock = NI_M_ANALOG_TRIGGER_OUT_CLK; break; default: for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { @@ -704,13 +704,13 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; switch (input_select) { - case NI_M_Series_Timebase_1_Clock: + case NI_M_TIMEBASE_1_CLK: clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; break; - case NI_M_Series_Timebase_2_Clock: + case NI_M_TIMEBASE_2_CLK: clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; break; - case NI_M_Series_Timebase_3_Clock: + case NI_M_TIMEBASE_3_CLK: if (counter_dev->regs[second_gate_reg] & Gi_Source_Subselect_Bit) clock_source = @@ -718,20 +718,20 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) else clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; break; - case NI_M_Series_Logic_Low_Clock: + case NI_M_LOGIC_LOW_CLK: clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; break; - case NI_M_Series_Next_Gate_Clock: + case NI_M_NEXT_GATE_CLK: if (counter_dev->regs[second_gate_reg] & Gi_Source_Subselect_Bit) clock_source = NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS; else clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; break; - case NI_M_Series_PXI10_Clock: + case NI_M_PXI10_CLK: clock_source = NI_GPCT_PXI10_CLOCK_SRC_BITS; break; - case NI_M_Series_Next_TC_Clock: + case NI_M_NEXT_TC_CLK: clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; break; default: -- cgit From b8e58af6da5a85d8656b31dcecac2bee1919f602 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:49 -0700 Subject: staging: comedi: ni_tio: tidy up enum ni_660x_clock_source These values are not used as an enum. For aesthetics, rename the CamelCase values and convert them into defines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 49 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 757a7a58626c..c187456596fb 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -110,20 +110,17 @@ Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant) } /* clock sources for ni_660x boards, get bits with Gi_Source_Select_Bits() */ -enum ni_660x_clock_source { - NI_660x_Timebase_1_Clock = 0x0, /* 20MHz */ - NI_660x_Source_Pin_i_Clock = 0x1, - NI_660x_Next_Gate_Clock = 0xa, - NI_660x_Timebase_2_Clock = 0x12, /* 100KHz */ - NI_660x_Next_TC_Clock = 0x13, - NI_660x_Timebase_3_Clock = 0x1e, /* 80MHz */ - NI_660x_Logic_Low_Clock = 0x1f, -}; -#define NI_660X_MAX_RTSI_CHAN 6 +#define NI_660X_TIMEBASE_1_CLK 0x0 /* 20MHz */ +#define NI_660X_SRC_PIN_I_CLK 0x1 +#define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) +#define NI_660X_NEXT_GATE_CLK 0xa #define NI_660X_RTSI_CLK(x) (0xb + (x)) - +#define NI_660X_TIMEBASE_2_CLK 0x12 /* 100KHz */ +#define NI_660X_NEXT_TC_CLK 0x13 +#define NI_660X_TIMEBASE_3_CLK 0x1e /* 80MHz */ +#define NI_660X_LOGIC_LOW_CLK 0x1f #define NI_660X_MAX_SRC_PIN 7 -#define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) +#define NI_660X_MAX_RTSI_CHAN 6 /* * clock sources for ni e and m series boards, @@ -485,25 +482,25 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) switch (clock_select_bits) { case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Timebase_1_Clock; + ni_660x_clock = NI_660X_TIMEBASE_1_CLK; break; case NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Timebase_2_Clock; + ni_660x_clock = NI_660X_TIMEBASE_2_CLK; break; case NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Timebase_3_Clock; + ni_660x_clock = NI_660X_TIMEBASE_3_CLK; break; case NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Logic_Low_Clock; + ni_660x_clock = NI_660X_LOGIC_LOW_CLK; break; case NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Source_Pin_i_Clock; + ni_660x_clock = NI_660X_SRC_PIN_I_CLK; break; case NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Next_Gate_Clock; + ni_660x_clock = NI_660X_NEXT_GATE_CLK; break; case NI_GPCT_NEXT_TC_CLOCK_SRC_BITS: - ni_660x_clock = NI_660x_Next_TC_Clock; + ni_660x_clock = NI_660X_NEXT_TC_CLK; break; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { @@ -768,25 +765,25 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) unsigned i; switch (input_select) { - case NI_660x_Timebase_1_Clock: + case NI_660X_TIMEBASE_1_CLK: clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; break; - case NI_660x_Timebase_2_Clock: + case NI_660X_TIMEBASE_2_CLK: clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; break; - case NI_660x_Timebase_3_Clock: + case NI_660X_TIMEBASE_3_CLK: clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; break; - case NI_660x_Logic_Low_Clock: + case NI_660X_LOGIC_LOW_CLK: clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; break; - case NI_660x_Source_Pin_i_Clock: + case NI_660X_SRC_PIN_I_CLK: clock_source = NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS; break; - case NI_660x_Next_Gate_Clock: + case NI_660X_NEXT_GATE_CLK: clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; break; - case NI_660x_Next_TC_Clock: + case NI_660X_NEXT_TC_CLK: clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; break; default: -- cgit From 9ff506ec11eae62bd0290e903a431552a05e5ac8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:50 -0700 Subject: staging: comedi: ni_tio: move defines to head of file For aesthetics, move all the defines to the head of the file. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 131 ++++++++++++++++---------------- 1 file changed, 67 insertions(+), 64 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index c187456596fb..e49c71c0ba2b 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -49,6 +49,73 @@ TODO: #include "ni_tio_internal.h" +/* + * clock sources for ni e and m series boards, + * get bits with Gi_Source_Select_Bits() + */ +#define NI_M_TIMEBASE_1_CLK 0x0 /* 20MHz */ +#define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) +#define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) +#define NI_M_TIMEBASE_2_CLK 0x12 /* 100KHz */ +#define NI_M_NEXT_TC_CLK 0x13 +#define NI_M_NEXT_GATE_CLK 0x14 /* Gi_Src_SubSelect=0 */ +#define NI_M_PXI_STAR_TRIGGER_CLK 0x14 /* Gi_Src_SubSelect=1 */ +#define NI_M_PXI10_CLK 0x1d +#define NI_M_TIMEBASE_3_CLK 0x1e /* 80MHz, Gi_Src_SubSelect=0 */ +#define NI_M_ANALOG_TRIGGER_OUT_CLK 0x1e /* Gi_Src_SubSelect=1 */ +#define NI_M_LOGIC_LOW_CLK 0x1f +#define NI_M_MAX_PFI_CHAN 15 +#define NI_M_MAX_RTSI_CHAN 7 + +/* + * clock sources for ni_660x boards, + * get bits with Gi_Source_Select_Bits() + */ +#define NI_660X_TIMEBASE_1_CLK 0x0 /* 20MHz */ +#define NI_660X_SRC_PIN_I_CLK 0x1 +#define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) +#define NI_660X_NEXT_GATE_CLK 0xa +#define NI_660X_RTSI_CLK(x) (0xb + (x)) +#define NI_660X_TIMEBASE_2_CLK 0x12 /* 100KHz */ +#define NI_660X_NEXT_TC_CLK 0x13 +#define NI_660X_TIMEBASE_3_CLK 0x1e /* 80MHz */ +#define NI_660X_LOGIC_LOW_CLK 0x1f +#define NI_660X_MAX_SRC_PIN 7 +#define NI_660X_MAX_RTSI_CHAN 6 + +/* ni m series gate_select */ +#define NI_M_TIMESTAMP_MUX_GATE_SEL 0x0 +#define NI_M_PFI_GATE_SEL(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) +#define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) +#define NI_M_AI_START2_GATE_SEL 0x12 +#define NI_M_PXI_STAR_TRIGGER_GATE_SEL 0x13 +#define NI_M_NEXT_OUT_GATE_SEL 0x14 +#define NI_M_AI_START1_GATE_SEL 0x1c +#define NI_M_NEXT_SRC_GATE_SEL 0x1d +#define NI_M_ANALOG_TRIG_OUT_GATE_SEL 0x1e +#define NI_M_LOGIC_LOW_GATE_SEL 0x1f + +/* ni_660x gate select */ +#define NI_660X_SRC_PIN_I_GATE_SEL 0x0 +#define NI_660X_GATE_PIN_I_GATE_SEL 0x1 +#define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) +#define NI_660X_NEXT_SRC_GATE_SEL 0xa +#define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) +#define NI_660X_NEXT_OUT_GATE_SEL 0x14 +#define NI_660X_LOGIC_LOW_GATE_SEL 0x1f +#define NI_660X_MAX_GATE_PIN 7 + +/* ni_660x second gate select */ +#define NI_660X_SRC_PIN_I_GATE2_SEL 0x0 +#define NI_660X_UD_PIN_I_GATE2_SEL 0x1 +#define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) +#define NI_660X_NEXT_SRC_GATE2_SEL 0xa +#define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) +#define NI_660X_NEXT_OUT_GATE2_SEL 0x14 +#define NI_660X_SELECTED_GATE2_SEL 0x1e +#define NI_660X_LOGIC_LOW_GATE2_SEL 0x1f +#define NI_660X_MAX_UP_DOWN_PIN 7 + static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, unsigned generic_clock_source); static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter); @@ -109,59 +176,6 @@ Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant) } } -/* clock sources for ni_660x boards, get bits with Gi_Source_Select_Bits() */ -#define NI_660X_TIMEBASE_1_CLK 0x0 /* 20MHz */ -#define NI_660X_SRC_PIN_I_CLK 0x1 -#define NI_660X_SRC_PIN_CLK(x) (0x2 + (x)) -#define NI_660X_NEXT_GATE_CLK 0xa -#define NI_660X_RTSI_CLK(x) (0xb + (x)) -#define NI_660X_TIMEBASE_2_CLK 0x12 /* 100KHz */ -#define NI_660X_NEXT_TC_CLK 0x13 -#define NI_660X_TIMEBASE_3_CLK 0x1e /* 80MHz */ -#define NI_660X_LOGIC_LOW_CLK 0x1f -#define NI_660X_MAX_SRC_PIN 7 -#define NI_660X_MAX_RTSI_CHAN 6 - -/* - * clock sources for ni e and m series boards, - * get bits with Gi_Source_Select_Bits() - */ -#define NI_M_TIMEBASE_1_CLK 0x0 /* 20MHz */ -#define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) -#define NI_M_RTSI_CLK(x) (((x) == 7) ? 0x1b : (0xb + (x))) -#define NI_M_TIMEBASE_2_CLK 0x12 /* 100KHz */ -#define NI_M_NEXT_TC_CLK 0x13 -#define NI_M_NEXT_GATE_CLK 0x14 /* Gi_Src_SubSelect=0 */ -#define NI_M_PXI_STAR_TRIGGER_CLK 0x14 /* Gi_Src_SubSelect=1 */ -#define NI_M_PXI10_CLK 0x1d -#define NI_M_TIMEBASE_3_CLK 0x1e /* 80MHz, Gi_Src_SubSelect=0 */ -#define NI_M_ANALOG_TRIGGER_OUT_CLK 0x1e /* Gi_Src_SubSelect=1 */ -#define NI_M_LOGIC_LOW_CLK 0x1f -#define NI_M_MAX_PFI_CHAN 15 -#define NI_M_MAX_RTSI_CHAN 7 - -/* NI660X gate select */ -#define NI_660X_SRC_PIN_I_GATE_SEL 0x0 -#define NI_660X_GATE_PIN_I_GATE_SEL 0x1 -#define NI_660X_PIN_GATE_SEL(x) (0x2 + (x)) -#define NI_660X_NEXT_SRC_GATE_SEL 0xa -#define NI_660X_RTSI_GATE_SEL(x) (0xb + (x)) -#define NI_660X_NEXT_OUT_GATE_SEL 0x14 -#define NI_660X_LOGIC_LOW_GATE_SEL 0x1f -#define NI_660X_MAX_GATE_PIN 7 - -/* NI M SERIES gate_select */ -#define NI_M_TIMESTAMP_MUX_GATE_SEL 0x0 -#define NI_M_PFI_GATE_SEL(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) -#define NI_M_RTSI_GATE_SEL(x) (((x) == 7) ? 0x1b : (0xb + (x))) -#define NI_M_AI_START2_GATE_SEL 0x12 -#define NI_M_PXI_STAR_TRIGGER_GATE_SEL 0x13 -#define NI_M_NEXT_OUT_GATE_SEL 0x14 -#define NI_M_AI_START1_GATE_SEL 0x1c -#define NI_M_NEXT_SRC_GATE_SEL 0x1d -#define NI_M_ANALOG_TRIG_OUT_GATE_SEL 0x1e -#define NI_M_LOGIC_LOW_GATE_SEL 0x1f - static inline unsigned Gi_Source_Select_Bits(unsigned source) { return (source << Gi_Source_Select_Shift) & Gi_Source_Select_Mask; @@ -172,17 +186,6 @@ static inline unsigned Gi_Gate_Select_Bits(unsigned gate_select) return (gate_select << Gi_Gate_Select_Shift) & Gi_Gate_Select_Mask; } -/* NI660X second gate select */ -#define NI_660X_SRC_PIN_I_GATE2_SEL 0x0 -#define NI_660X_UD_PIN_I_GATE2_SEL 0x1 -#define NI_660X_UD_PIN_GATE2_SEL(x) (0x2 + (x)) -#define NI_660X_NEXT_SRC_GATE2_SEL 0xa -#define NI_660X_RTSI_GATE2_SEL(x) (0xb + (x)) -#define NI_660X_NEXT_OUT_GATE2_SEL 0x14 -#define NI_660X_SELECTED_GATE2_SEL 0x1e -#define NI_660X_LOGIC_LOW_GATE2_SEL 0x1f -#define NI_660X_MAX_UP_DOWN_PIN 7 - struct ni_gpct_device * ni_gpct_device_construct(struct comedi_device *dev, void (*write_register)(struct ni_gpct *counter, -- cgit From 8477c5d4ba0d7ff04d346c5cb104d06a62adddae Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:51 -0700 Subject: staging: comedi: ni_tio: tidy up ni_gpct_device_{construct,destroy)() For aesthetics, move these exported functions to the end of the file. Tidy up the functions a bit and remove the BUG_ON when (num_counters == 0). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 101 +++++++++++++++++--------------- 1 file changed, 55 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index e49c71c0ba2b..a65b55db9819 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -186,52 +186,6 @@ static inline unsigned Gi_Gate_Select_Bits(unsigned gate_select) return (gate_select << Gi_Gate_Select_Shift) & Gi_Gate_Select_Mask; } -struct ni_gpct_device * -ni_gpct_device_construct(struct comedi_device *dev, - void (*write_register)(struct ni_gpct *counter, - unsigned bits, - enum ni_gpct_register reg), - unsigned (*read_register)(struct ni_gpct *counter, - enum ni_gpct_register reg), - enum ni_gpct_variant variant, - unsigned num_counters) -{ - unsigned i; - - struct ni_gpct_device *counter_dev = - kzalloc(sizeof(struct ni_gpct_device), GFP_KERNEL); - if (counter_dev == NULL) - return NULL; - counter_dev->dev = dev; - counter_dev->write_register = write_register; - counter_dev->read_register = read_register; - counter_dev->variant = variant; - spin_lock_init(&counter_dev->regs_lock); - BUG_ON(num_counters == 0); - counter_dev->counters = - kzalloc(sizeof(struct ni_gpct) * num_counters, GFP_KERNEL); - if (counter_dev->counters == NULL) { - kfree(counter_dev); - return NULL; - } - for (i = 0; i < num_counters; ++i) { - counter_dev->counters[i].counter_dev = counter_dev; - spin_lock_init(&counter_dev->counters[i].lock); - } - counter_dev->num_counters = num_counters; - return counter_dev; -} -EXPORT_SYMBOL_GPL(ni_gpct_device_construct); - -void ni_gpct_device_destroy(struct ni_gpct_device *counter_dev) -{ - if (counter_dev->counters == NULL) - return; - kfree(counter_dev->counters); - kfree(counter_dev); -} -EXPORT_SYMBOL_GPL(ni_gpct_device_destroy); - static int ni_tio_second_gate_registers_present(const struct ni_gpct_device *counter_dev) { @@ -1521,6 +1475,61 @@ int ni_tio_insn_write(struct comedi_device *dev, } EXPORT_SYMBOL_GPL(ni_tio_insn_write); +struct ni_gpct_device * +ni_gpct_device_construct(struct comedi_device *dev, + void (*write_register)(struct ni_gpct *counter, + unsigned bits, + enum ni_gpct_register reg), + unsigned (*read_register)(struct ni_gpct *counter, + enum ni_gpct_register reg), + enum ni_gpct_variant variant, + unsigned num_counters) +{ + struct ni_gpct_device *counter_dev; + struct ni_gpct *counter; + unsigned i; + + if (num_counters == 0) + return NULL; + + counter_dev = kzalloc(sizeof(*counter_dev), GFP_KERNEL); + if (!counter_dev) + return NULL; + + counter_dev->dev = dev; + counter_dev->write_register = write_register; + counter_dev->read_register = read_register; + counter_dev->variant = variant; + + spin_lock_init(&counter_dev->regs_lock); + + counter_dev->counters = kcalloc(num_counters, sizeof(*counter), + GFP_KERNEL); + if (!counter_dev->counters) { + kfree(counter_dev); + return NULL; + } + + for (i = 0; i < num_counters; ++i) { + counter = &counter_dev->counters[i]; + counter->counter_dev = counter_dev; + spin_lock_init(&counter->lock); + } + counter_dev->num_counters = num_counters; + + return counter_dev; +} +EXPORT_SYMBOL_GPL(ni_gpct_device_construct); + +void ni_gpct_device_destroy(struct ni_gpct_device *counter_dev) +{ + if (!counter_dev->counters) + return; + kfree(counter_dev->counters); + kfree(counter_dev); +} +EXPORT_SYMBOL_GPL(ni_gpct_device_destroy); + static int __init ni_tio_init_module(void) { return 0; -- cgit From 25e529b0f45ce88a6d8f82c6bf43503040617c57 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:52 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_init_counter() This function is called to initialize/reset a gpct counter during a comedi drivers (*attach). For aesthetics, move this exported function toward the end of the file. Tidy up the functions a bit by just open coding the '0x0' values used to initialize some of the registers. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 81 ++++++++++++++++----------------- 1 file changed, 38 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index a65b55db9819..0cecc604f480 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -206,49 +206,6 @@ static void ni_tio_reset_count_and_disarm(struct ni_gpct *counter) write_register(counter, Gi_Reset_Bit(cidx), NITIO_RESET_REG(cidx)); } -void ni_tio_init_counter(struct ni_gpct *counter) -{ - struct ni_gpct_device *counter_dev = counter->counter_dev; - unsigned cidx = counter->counter_index; - - ni_tio_reset_count_and_disarm(counter); - - /* initialize counter registers */ - counter_dev->regs[NITIO_AUTO_INC_REG(cidx)] = 0x0; - write_register(counter, counter_dev->regs[NITIO_AUTO_INC_REG(cidx)], - NITIO_AUTO_INC_REG(cidx)); - - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - ~0, Gi_Synchronize_Gate_Bit); - - ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), ~0, 0); - - counter_dev->regs[NITIO_LOADA_REG(cidx)] = 0x0; - write_register(counter, counter_dev->regs[NITIO_LOADA_REG(cidx)], - NITIO_LOADA_REG(cidx)); - - counter_dev->regs[NITIO_LOADB_REG(cidx)] = 0x0; - write_register(counter, counter_dev->regs[NITIO_LOADB_REG(cidx)], - NITIO_LOADB_REG(cidx)); - - ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), ~0, 0); - - if (ni_tio_counting_mode_registers_present(counter_dev)) - ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), ~0, 0); - - if (ni_tio_second_gate_registers_present(counter_dev)) { - counter_dev->regs[NITIO_GATE2_REG(cidx)] = 0x0; - write_register(counter, - counter_dev->regs[NITIO_GATE2_REG(cidx)], - NITIO_GATE2_REG(cidx)); - } - - ni_tio_set_bits(counter, NITIO_DMA_CFG_REG(cidx), ~0, 0x0); - - ni_tio_set_bits(counter, NITIO_INT_ENA_REG(cidx), ~0, 0x0); -} -EXPORT_SYMBOL_GPL(ni_tio_init_counter); - static unsigned int ni_tio_counter_status(struct ni_gpct *counter) { unsigned cidx = counter->counter_index; @@ -1475,6 +1432,44 @@ int ni_tio_insn_write(struct comedi_device *dev, } EXPORT_SYMBOL_GPL(ni_tio_insn_write); +void ni_tio_init_counter(struct ni_gpct *counter) +{ + struct ni_gpct_device *counter_dev = counter->counter_dev; + unsigned cidx = counter->counter_index; + + ni_tio_reset_count_and_disarm(counter); + + /* initialize counter registers */ + counter_dev->regs[NITIO_AUTO_INC_REG(cidx)] = 0x0; + write_register(counter, 0x0, NITIO_AUTO_INC_REG(cidx)); + + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), + ~0, Gi_Synchronize_Gate_Bit); + + ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), ~0, 0); + + counter_dev->regs[NITIO_LOADA_REG(cidx)] = 0x0; + write_register(counter, 0x0, NITIO_LOADA_REG(cidx)); + + counter_dev->regs[NITIO_LOADB_REG(cidx)] = 0x0; + write_register(counter, 0x0, NITIO_LOADB_REG(cidx)); + + ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), ~0, 0); + + if (ni_tio_counting_mode_registers_present(counter_dev)) + ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), ~0, 0); + + if (ni_tio_second_gate_registers_present(counter_dev)) { + counter_dev->regs[NITIO_GATE2_REG(cidx)] = 0x0; + write_register(counter, 0x0, NITIO_GATE2_REG(cidx)); + } + + ni_tio_set_bits(counter, NITIO_DMA_CFG_REG(cidx), ~0, 0x0); + + ni_tio_set_bits(counter, NITIO_INT_ENA_REG(cidx), ~0, 0x0); +} +EXPORT_SYMBOL_GPL(ni_tio_init_counter); + struct ni_gpct_device * ni_gpct_device_construct(struct comedi_device *dev, void (*write_register)(struct ni_gpct *counter, -- cgit From dba0f57f88581687b3790d810ab9d737afe724ee Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:53 -0700 Subject: staging: comedi: ni_tio: rename ni_tio_second_gate_registers_present() For aesthetics, rename this function to shorten some of the long lines. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 0cecc604f480..b2ed3d8d60ee 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -186,8 +186,7 @@ static inline unsigned Gi_Gate_Select_Bits(unsigned gate_select) return (gate_select << Gi_Gate_Select_Shift) & Gi_Gate_Select_Mask; } -static int -ni_tio_second_gate_registers_present(const struct ni_gpct_device *counter_dev) +static int ni_tio_has_gate2_registers(const struct ni_gpct_device *counter_dev) { switch (counter_dev->variant) { case ni_gpct_variant_e_series: @@ -996,8 +995,9 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, } break; case 1: - if (ni_tio_second_gate_registers_present(counter_dev) == 0) + if (!ni_tio_has_gate2_registers(counter_dev)) return -EINVAL; + if (CR_CHAN(gate_source) == NI_GPCT_DISABLED_GATE_SELECT) { counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Mode_Bit; @@ -1459,7 +1459,7 @@ void ni_tio_init_counter(struct ni_gpct *counter) if (ni_tio_counting_mode_registers_present(counter_dev)) ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), ~0, 0); - if (ni_tio_second_gate_registers_present(counter_dev)) { + if (ni_tio_has_gate2_registers(counter_dev)) { counter_dev->regs[NITIO_GATE2_REG(cidx)] = 0x0; write_register(counter, 0x0, NITIO_GATE2_REG(cidx)); } -- cgit From 99065954d1be462644f9b14badd1ead8deffa0b8 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:54 -0700 Subject: staging: comedi: ni_tio: tidy up ni_m_series_source_select_bits() Rename a local variable to fix the > 80 char line issues. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index b2ed3d8d60ee..404a14f380e3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -442,11 +442,11 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) static unsigned ni_m_series_source_select_bits(unsigned int clock_source) { + unsigned clk_src = clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; unsigned ni_m_series_clock; unsigned i; - const unsigned clock_select_bits = - clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; - switch (clock_select_bits) { + + switch (clk_src) { case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: ni_m_series_clock = NI_M_TIMEBASE_1_CLK; break; @@ -476,7 +476,7 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) break; default: for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { - if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { + if (clk_src == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { ni_m_series_clock = NI_M_RTSI_CLK(i); break; } @@ -484,7 +484,7 @@ static unsigned ni_m_series_source_select_bits(unsigned int clock_source) if (i <= NI_M_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { - if (clock_select_bits == NI_GPCT_PFI_CLOCK_SRC_BITS(i)) { + if (clk_src == NI_GPCT_PFI_CLOCK_SRC_BITS(i)) { ni_m_series_clock = NI_M_PFI_CLK(i); break; } -- cgit From 463daa7f187d68de5600a406069ddd4dca72c7b2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:55 -0700 Subject: staging: comedi: ni_tio: tidy up ni_660x_source_select_bits() Rename a local variable to fix the > 80 char line issues. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 404a14f380e3..55485c27198e 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -388,12 +388,11 @@ EXPORT_SYMBOL_GPL(ni_tio_arm); static unsigned ni_660x_source_select_bits(unsigned int clock_source) { + unsigned clk_src = clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; unsigned ni_660x_clock; unsigned i; - const unsigned clock_select_bits = - clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; - switch (clock_select_bits) { + switch (clk_src) { case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: ni_660x_clock = NI_660X_TIMEBASE_1_CLK; break; @@ -417,7 +416,7 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) break; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { - if (clock_select_bits == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { + if (clk_src == NI_GPCT_RTSI_CLOCK_SRC_BITS(i)) { ni_660x_clock = NI_660X_RTSI_CLK(i); break; } @@ -425,8 +424,7 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) if (i <= NI_660X_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { - if (clock_select_bits == - NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i)) { + if (clk_src == NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i)) { ni_660x_clock = NI_660X_SRC_PIN_CLK(i); break; } -- cgit From f6e2278326fd0b845d892614ec5f30ef49ecea85 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:56 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_set_sync_mode() Fix the > 80 char line issues in this function. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 55485c27198e..d099f542b796 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -226,14 +226,13 @@ static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) unsigned cidx = counter->counter_index; const unsigned counting_mode_reg = NITIO_CNT_MODE_REG(cidx); static const uint64_t min_normal_sync_period_ps = 25000; - const uint64_t clock_period_ps = ni_tio_clock_period_ps(counter, - ni_tio_generic_clock_src_select - (counter)); + uint64_t clock_period_ps; if (ni_tio_counting_mode_registers_present(counter_dev) == 0) return; - switch (ni_tio_get_soft_copy(counter, counting_mode_reg) & Gi_Counting_Mode_Mask) { + switch (ni_tio_get_soft_copy(counter, counting_mode_reg) & + Gi_Counting_Mode_Mask) { case Gi_Counting_Mode_QuadratureX1_Bits: case Gi_Counting_Mode_QuadratureX2_Bits: case Gi_Counting_Mode_QuadratureX4_Bits: @@ -243,6 +242,10 @@ static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) default: break; } + + clock_period_ps = ni_tio_clock_period_ps(counter, + ni_tio_generic_clock_src_select(counter)); + /* * It's not clear what we should do if clock_period is unknown, so we * are not using the alt sync bit in that case, but allow the caller -- cgit From 704c6dbaa914c3f1e4493fe6d40e6a30e89a223b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:57 -0700 Subject: staging: comedi: ni_tio: absorb ni_tio_counter_status() This function is only called to handle the INSN_CONFIG_GET_COUNTER_STATUS instruction. For aesthetics, absorb the code into ni_tio_insn_config(). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index d099f542b796..f0578484fba4 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -205,21 +205,6 @@ static void ni_tio_reset_count_and_disarm(struct ni_gpct *counter) write_register(counter, Gi_Reset_Bit(cidx), NITIO_RESET_REG(cidx)); } -static unsigned int ni_tio_counter_status(struct ni_gpct *counter) -{ - unsigned cidx = counter->counter_index; - const unsigned bits = read_register(counter, - NITIO_SHARED_STATUS_REG(cidx)); - unsigned int status = 0; - - if (bits & Gi_Armed_Bit(cidx)) { - status |= COMEDI_COUNTER_ARMED; - if (bits & Gi_Counting_Bit(cidx)) - status |= COMEDI_COUNTER_COUNTING; - } - return status; -} - static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) { struct ni_gpct_device *counter_dev = counter->counter_dev; @@ -1282,6 +1267,8 @@ int ni_tio_insn_config(struct comedi_device *dev, unsigned int *data) { struct ni_gpct *counter = s->private; + unsigned cidx = counter->counter_index; + unsigned status; switch (data[0]) { case INSN_CONFIG_SET_COUNTER_MODE: @@ -1292,7 +1279,13 @@ int ni_tio_insn_config(struct comedi_device *dev, ni_tio_arm(counter, 0, 0); return 0; case INSN_CONFIG_GET_COUNTER_STATUS: - data[1] = ni_tio_counter_status(counter); + data[1] = 0; + status = read_register(counter, NITIO_SHARED_STATUS_REG(cidx)); + if (status & Gi_Armed_Bit(cidx)) { + data[1] |= COMEDI_COUNTER_ARMED; + if (status & Gi_Counting_Bit(cidx)) + data[1] |= COMEDI_COUNTER_COUNTING; + } data[2] = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; return 0; case INSN_CONFIG_SET_CLOCK_SRC: -- cgit From d00193be1febb2a1fe83cd4115c74cab6a6d14ee Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:58 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_get_gate_src() and helpers Do some renaming of local vars, parameters, etc. to tidy up the ugly line breaks to improve the readability of the code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 90 ++++++++++++++------------------- 1 file changed, 37 insertions(+), 53 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index f0578484fba4..a149a73513eb 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1053,12 +1053,11 @@ static int ni_tio_set_other_src(struct ni_gpct *counter, unsigned index, return -EINVAL; } -static unsigned -ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) +static unsigned ni_660x_gate_to_generic_gate(unsigned gate) { unsigned i; - switch (ni_660x_gate_select) { + switch (gate) { case NI_660X_SRC_PIN_I_GATE_SEL: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; case NI_660X_GATE_PIN_I_GATE_SEL: @@ -1071,13 +1070,13 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { - if (ni_660x_gate_select == NI_660X_RTSI_GATE_SEL(i)) + if (gate == NI_660X_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } if (i <= NI_660X_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_660X_MAX_GATE_PIN; ++i) { - if (ni_660x_gate_select == NI_660X_PIN_GATE_SEL(i)) + if (gate == NI_660X_PIN_GATE_SEL(i)) return NI_GPCT_GATE_PIN_GATE_SELECT(i); } if (i <= NI_660X_MAX_GATE_PIN) @@ -1088,12 +1087,11 @@ ni_660x_first_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return 0; }; -static unsigned -ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) +static unsigned ni_m_gate_to_generic_gate(unsigned gate) { unsigned i; - switch (ni_m_series_gate_select) { + switch (gate) { case NI_M_TIMESTAMP_MUX_GATE_SEL: return NI_GPCT_TIMESTAMP_MUX_GATE_SELECT; case NI_M_AI_START2_GATE_SEL: @@ -1112,13 +1110,13 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { - if (ni_m_series_gate_select == NI_M_RTSI_GATE_SEL(i)) + if (gate == NI_M_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } if (i <= NI_M_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { - if (ni_m_series_gate_select == NI_M_PFI_GATE_SEL(i)) + if (gate == NI_M_PFI_GATE_SEL(i)) return NI_GPCT_PFI_GATE_SELECT(i); } if (i <= NI_M_MAX_PFI_CHAN) @@ -1129,12 +1127,11 @@ ni_m_series_first_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) return 0; }; -static unsigned -ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) +static unsigned ni_660x_gate2_to_generic_gate(unsigned gate) { unsigned i; - switch (ni_660x_gate_select) { + switch (gate) { case NI_660X_SRC_PIN_I_GATE2_SEL: return NI_GPCT_SOURCE_PIN_i_GATE_SELECT; case NI_660X_UD_PIN_I_GATE2_SEL: @@ -1149,13 +1146,13 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return NI_GPCT_LOGIC_LOW_GATE_SELECT; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { - if (ni_660x_gate_select == NI_660X_RTSI_GATE2_SEL(i)) + if (gate == NI_660X_RTSI_GATE2_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } if (i <= NI_660X_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_660X_MAX_UP_DOWN_PIN; ++i) { - if (ni_660x_gate_select == NI_660X_UD_PIN_GATE2_SEL(i)) + if (gate == NI_660X_UD_PIN_GATE2_SEL(i)) return NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i); } if (i <= NI_660X_MAX_UP_DOWN_PIN) @@ -1166,16 +1163,15 @@ ni_660x_second_gate_to_generic_gate_source(unsigned ni_660x_gate_select) return 0; }; -static unsigned -ni_m_series_second_gate_to_generic_gate_source(unsigned ni_m_series_gate_select) +static unsigned ni_m_gate2_to_generic_gate(unsigned gate) { /* * FIXME: the second gate sources for the m series are undocumented, * so we just return the raw bits for now. */ - switch (ni_m_series_gate_select) { + switch (gate) { default: - return ni_m_series_gate_select; + return gate; } return 0; }; @@ -1185,74 +1181,62 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - const unsigned mode_bits = - ni_tio_get_soft_copy(counter, NITIO_MODE_REG(cidx)); - const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); - unsigned gate_select_bits; + unsigned mode = ni_tio_get_soft_copy(counter, NITIO_MODE_REG(cidx)); + unsigned gate2_reg = NITIO_GATE2_REG(cidx); + unsigned gate_sel; switch (gate_index) { case 0: - if ((mode_bits & Gi_Gating_Mode_Mask) == - Gi_Gating_Disabled_Bits) { + if ((mode & Gi_Gating_Mode_Mask) == Gi_Gating_Disabled_Bits) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; } - gate_select_bits = - (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Gate_Select_Mask) >> Gi_Gate_Select_Shift; + gate_sel = ni_tio_get_soft_copy(counter, + NITIO_INPUT_SEL_REG(cidx)); + gate_sel &= Gi_Gate_Select_Mask; + gate_sel >>= Gi_Gate_Select_Shift; switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - *gate_source = - ni_m_series_first_gate_to_generic_gate_source - (gate_select_bits); + *gate_source = ni_m_gate_to_generic_gate(gate_sel); break; case ni_gpct_variant_660x: - *gate_source = - ni_660x_first_gate_to_generic_gate_source - (gate_select_bits); + *gate_source = ni_660x_gate_to_generic_gate(gate_sel); break; } - if (mode_bits & Gi_Gate_Polarity_Bit) + if (mode & Gi_Gate_Polarity_Bit) *gate_source |= CR_INVERT; - if ((mode_bits & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) + if ((mode & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) *gate_source |= CR_EDGE; break; case 1: - if ((mode_bits & Gi_Gating_Mode_Mask) == Gi_Gating_Disabled_Bits - || (counter_dev->regs[second_gate_reg] & - Gi_Second_Gate_Mode_Bit) - == 0) { + if ((mode & Gi_Gating_Mode_Mask) == Gi_Gating_Disabled_Bits || + !(counter_dev->regs[gate2_reg] & Gi_Second_Gate_Mode_Bit)) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; } - gate_select_bits = (counter_dev->regs[second_gate_reg] & - Gi_Second_Gate_Select_Mask) >> - Gi_Second_Gate_Select_Shift; + gate_sel = counter_dev->regs[gate2_reg]; + gate_sel &= Gi_Second_Gate_Select_Mask; + gate_sel >>= Gi_Second_Gate_Select_Shift; + switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - *gate_source = - ni_m_series_second_gate_to_generic_gate_source - (gate_select_bits); + *gate_source = ni_m_gate2_to_generic_gate(gate_sel); break; case ni_gpct_variant_660x: - *gate_source = - ni_660x_second_gate_to_generic_gate_source - (gate_select_bits); + *gate_source = ni_660x_gate2_to_generic_gate(gate_sel); break; } - if (counter_dev->regs[second_gate_reg] & - Gi_Second_Gate_Polarity_Bit) { + if (counter_dev->regs[gate2_reg] & Gi_Second_Gate_Polarity_Bit) *gate_source |= CR_INVERT; - } /* second gate can't have edge/level mode set independently */ - if ((mode_bits & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) + if ((mode & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) *gate_source |= CR_EDGE; break; default: -- cgit From bf4ec095b38b108b97ff5e1a37416a5575378e5d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:14:59 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_set_other_src() Invert the counter_dev->variant test to reduce the indent level of this function. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 50 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index a149a73513eb..1982a259a872 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1022,35 +1022,33 @@ static int ni_tio_set_other_src(struct ni_gpct *counter, unsigned index, { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; + unsigned int abz_reg, shift, mask; - if (counter_dev->variant == ni_gpct_variant_m_series) { - unsigned int abz_reg, shift, mask; + if (counter_dev->variant != ni_gpct_variant_m_series) + return -EINVAL; - abz_reg = NITIO_ABZ_REG(cidx); - switch (index) { - case NI_GPCT_SOURCE_ENCODER_A: - shift = 10; - break; - case NI_GPCT_SOURCE_ENCODER_B: - shift = 5; - break; - case NI_GPCT_SOURCE_ENCODER_Z: - shift = 0; - break; - default: - return -EINVAL; - } - mask = 0x1f << shift; - if (source > 0x1f) { - /* Disable gate */ - source = 0x1f; - } - counter_dev->regs[abz_reg] &= ~mask; - counter_dev->regs[abz_reg] |= (source << shift) & mask; - write_register(counter, counter_dev->regs[abz_reg], abz_reg); - return 0; + abz_reg = NITIO_ABZ_REG(cidx); + switch (index) { + case NI_GPCT_SOURCE_ENCODER_A: + shift = 10; + break; + case NI_GPCT_SOURCE_ENCODER_B: + shift = 5; + break; + case NI_GPCT_SOURCE_ENCODER_Z: + shift = 0; + break; + default: + return -EINVAL; } - return -EINVAL; + mask = 0x1f << shift; + if (source > 0x1f) + source = 0x1f; /* Disable gate */ + + counter_dev->regs[abz_reg] &= ~mask; + counter_dev->regs[abz_reg] |= (source << shift) & mask; + write_register(counter, counter_dev->regs[abz_reg], abz_reg); + return 0; } static unsigned ni_660x_gate_to_generic_gate(unsigned gate) -- cgit From d54bb5a7f766bbcee530cd9e241890711eba6c07 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:00 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_set_gate_src() and helpers Do some renaming of local vars, parameters, etc. to tidy up the ugly line breaks to improve the readability of the code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 68 ++++++++++++++------------------- 1 file changed, 29 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 1982a259a872..eb5458240639 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -793,8 +793,7 @@ static void ni_tio_set_first_gate_modifiers(struct ni_gpct *counter, mode_mask, mode_values); } -static int ni_660x_set_first_gate(struct ni_gpct *counter, - unsigned int gate_source) +static int ni_660x_set_gate(struct ni_gpct *counter, unsigned int gate_source) { unsigned int chan = CR_CHAN(gate_source); unsigned cidx = counter->counter_index; @@ -835,8 +834,7 @@ static int ni_660x_set_first_gate(struct ni_gpct *counter, return 0; } -static int ni_m_series_set_first_gate(struct ni_gpct *counter, - unsigned int gate_source) +static int ni_m_set_gate(struct ni_gpct *counter, unsigned int gate_source) { unsigned int chan = CR_CHAN(gate_source); unsigned cidx = counter->counter_index; @@ -878,8 +876,7 @@ static int ni_m_series_set_first_gate(struct ni_gpct *counter, return 0; } -static int ni_660x_set_second_gate(struct ni_gpct *counter, - unsigned int gate_source) +static int ni_660x_set_gate2(struct ni_gpct *counter, unsigned int gate_source) { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; @@ -925,33 +922,27 @@ static int ni_660x_set_second_gate(struct ni_gpct *counter, return 0; } -static int ni_m_series_set_second_gate(struct ni_gpct *counter, - unsigned int gate_source) +static int ni_m_set_gate2(struct ni_gpct *counter, unsigned int gate_source) { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); - const unsigned selected_second_gate = CR_CHAN(gate_source); - /* bits of second_gate that may be meaningful to second gate register */ - static const unsigned selected_second_gate_mask = 0x1f; - unsigned ni_m_series_second_gate_select; + unsigned int chan = CR_CHAN(gate_source); + unsigned gate2_reg = NITIO_GATE2_REG(cidx); + unsigned gate2_sel; /* * FIXME: We don't know what the m-series second gate codes are, * so we'll just pass the bits through for now. */ - switch (selected_second_gate) { + switch (chan) { default: - ni_m_series_second_gate_select = - selected_second_gate & selected_second_gate_mask; + gate2_sel = chan & 0x1f; break; } - counter_dev->regs[second_gate_reg] |= Gi_Second_Gate_Mode_Bit; - counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Select_Mask; - counter_dev->regs[second_gate_reg] |= - Gi_Second_Gate_Select_Bits(ni_m_series_second_gate_select); - write_register(counter, counter_dev->regs[second_gate_reg], - second_gate_reg); + counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Mode_Bit; + counter_dev->regs[gate2_reg] &= ~Gi_Second_Gate_Select_Mask; + counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Select_Bits(gate2_sel); + write_register(counter, counter_dev->regs[gate2_reg], gate2_reg); return 0; } @@ -960,11 +951,12 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); + unsigned int chan = CR_CHAN(gate_source); + unsigned gate2_reg = NITIO_GATE2_REG(cidx); switch (gate_index) { case 0: - if (CR_CHAN(gate_source) == NI_GPCT_DISABLED_GATE_SELECT) { + if (chan == NI_GPCT_DISABLED_GATE_SELECT) { ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), Gi_Gating_Mode_Mask, Gi_Gating_Disabled_Bits); @@ -975,36 +967,34 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - return ni_m_series_set_first_gate(counter, gate_source); + return ni_m_set_gate(counter, gate_source); case ni_gpct_variant_660x: - return ni_660x_set_first_gate(counter, gate_source); + return ni_660x_set_gate(counter, gate_source); } break; case 1: if (!ni_tio_has_gate2_registers(counter_dev)) return -EINVAL; - if (CR_CHAN(gate_source) == NI_GPCT_DISABLED_GATE_SELECT) { - counter_dev->regs[second_gate_reg] &= - ~Gi_Second_Gate_Mode_Bit; - write_register(counter, - counter_dev->regs[second_gate_reg], - second_gate_reg); + if (chan == NI_GPCT_DISABLED_GATE_SELECT) { + counter_dev->regs[gate2_reg] &= + ~Gi_Second_Gate_Mode_Bit; + write_register(counter, counter_dev->regs[gate2_reg], + gate2_reg); return 0; } if (gate_source & CR_INVERT) { - counter_dev->regs[second_gate_reg] |= - Gi_Second_Gate_Polarity_Bit; + counter_dev->regs[gate2_reg] |= + Gi_Second_Gate_Polarity_Bit; } else { - counter_dev->regs[second_gate_reg] &= - ~Gi_Second_Gate_Polarity_Bit; + counter_dev->regs[gate2_reg] &= + ~Gi_Second_Gate_Polarity_Bit; } switch (counter_dev->variant) { case ni_gpct_variant_m_series: - return ni_m_series_set_second_gate(counter, - gate_source); + return ni_m_set_gate2(counter, gate_source); case ni_gpct_variant_660x: - return ni_660x_set_second_gate(counter, gate_source); + return ni_660x_set_gate2(counter, gate_source); default: BUG(); break; -- cgit From 7d9e68d3f4e597c8d8b0cb698d7753720f414820 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:01 -0700 Subject: staging: comedi: ni_tio: absorb ni_tio_set_first_gate_modifiers() This function is only called by ni_tio_set_gate_src(). For aesthetics, absorb the code into that function.. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index eb5458240639..33ffd17cd097 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -776,23 +776,6 @@ static void ni_tio_get_clock_src(struct ni_gpct *counter, *period_ns = temp64; } -static void ni_tio_set_first_gate_modifiers(struct ni_gpct *counter, - unsigned int gate_source) -{ - const unsigned mode_mask = Gi_Gate_Polarity_Bit | Gi_Gating_Mode_Mask; - unsigned cidx = counter->counter_index; - unsigned mode_values = 0; - - if (gate_source & CR_INVERT) - mode_values |= Gi_Gate_Polarity_Bit; - if (gate_source & CR_EDGE) - mode_values |= Gi_Rising_Edge_Gating_Bits; - else - mode_values |= Gi_Level_Gating_Bits; - ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), - mode_mask, mode_values); -} - static int ni_660x_set_gate(struct ni_gpct *counter, unsigned int gate_source) { unsigned int chan = CR_CHAN(gate_source); @@ -953,6 +936,7 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, unsigned cidx = counter->counter_index; unsigned int chan = CR_CHAN(gate_source); unsigned gate2_reg = NITIO_GATE2_REG(cidx); + unsigned mode = 0; switch (gate_index) { case 0: @@ -962,7 +946,15 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, Gi_Gating_Disabled_Bits); return 0; } - ni_tio_set_first_gate_modifiers(counter, gate_source); + if (gate_source & CR_INVERT) + mode |= Gi_Gate_Polarity_Bit; + if (gate_source & CR_EDGE) + mode |= Gi_Rising_Edge_Gating_Bits; + else + mode |= Gi_Level_Gating_Bits; + ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), + Gi_Gate_Polarity_Bit | Gi_Gating_Mode_Mask, + mode); switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: -- cgit From f68d10c428b99b747fed440ac73602bbdafc89a4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:02 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_get_clock_src() Remove the static const local variable and add a blank line after the declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 33ffd17cd097..2f7e8410226c 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -768,11 +768,11 @@ static void ni_tio_get_clock_src(struct ni_gpct *counter, unsigned int *clock_source, unsigned int *period_ns) { - static const unsigned pico_per_nano = 1000; uint64_t temp64; + *clock_source = ni_tio_generic_clock_src_select(counter); temp64 = ni_tio_clock_period_ps(counter, *clock_source); - do_div(temp64, pico_per_nano); + do_div(temp64, 1000); /* ps to ns */ *period_ns = temp64; } -- cgit From 3e90b1c7ebe9abbc7f49abff0bfbb6513f30c00b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:03 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_set_clock_src() and helpers Do some renaming of local vars, etc. to tidy up the ugly line breaks to improve the readability of the code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 38 +++++++++++++-------------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 2f7e8410226c..ebfc7240604b 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -374,7 +374,7 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) } EXPORT_SYMBOL_GPL(ni_tio_arm); -static unsigned ni_660x_source_select_bits(unsigned int clock_source) +static unsigned ni_660x_clk_src(unsigned int clock_source) { unsigned clk_src = clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; unsigned ni_660x_clock; @@ -426,7 +426,7 @@ static unsigned ni_660x_source_select_bits(unsigned int clock_source) return Gi_Source_Select_Bits(ni_660x_clock); } -static unsigned ni_m_series_source_select_bits(unsigned int clock_source) +static unsigned ni_m_clk_src(unsigned int clock_source) { unsigned clk_src = clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK; unsigned ni_m_series_clock; @@ -520,52 +520,44 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - unsigned input_select_bits = 0; - static const uint64_t pico_per_nano = 1000; + unsigned bits = 0; -/*FIXME: validate clock source */ + /* FIXME: validate clock source */ switch (counter_dev->variant) { case ni_gpct_variant_660x: - input_select_bits |= ni_660x_source_select_bits(clock_source); + bits |= ni_660x_clk_src(clock_source); break; case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - input_select_bits |= - ni_m_series_source_select_bits(clock_source); + bits |= ni_m_clk_src(clock_source); break; } if (clock_source & NI_GPCT_INVERT_CLOCK_SRC_BIT) - input_select_bits |= Gi_Source_Polarity_Bit; + bits |= Gi_Source_Polarity_Bit; ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Source_Select_Mask | Gi_Source_Polarity_Bit, - input_select_bits); + Gi_Source_Select_Mask | Gi_Source_Polarity_Bit, bits); ni_tio_set_source_subselect(counter, clock_source); - if (ni_tio_counting_mode_registers_present(counter_dev)) { - const unsigned prescaling_mode = - clock_source & NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK; - unsigned counting_mode_bits = 0; - switch (prescaling_mode) { + if (ni_tio_counting_mode_registers_present(counter_dev)) { + bits = 0; + switch (clock_source & NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK) { case NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS: break; case NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS: - counting_mode_bits |= - Gi_Prescale_X2_Bit(counter_dev->variant); + bits |= Gi_Prescale_X2_Bit(counter_dev->variant); break; case NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS: - counting_mode_bits |= - Gi_Prescale_X8_Bit(counter_dev->variant); + bits |= Gi_Prescale_X8_Bit(counter_dev->variant); break; default: return -EINVAL; } ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), Gi_Prescale_X2_Bit(counter_dev->variant) | - Gi_Prescale_X8_Bit(counter_dev->variant), - counting_mode_bits); + Gi_Prescale_X8_Bit(counter_dev->variant), bits); } - counter->clock_period_ps = pico_per_nano * period_ns; + counter->clock_period_ps = period_ns * 1000; ni_tio_set_sync_mode(counter, 0); return 0; } -- cgit From 099286dc307e6395990d40bf7a87838274c3ea84 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:04 -0700 Subject: staging: comedi: ni_tio: remove forward declarations Move some of the functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 392 ++++++++++++++++---------------- 1 file changed, 194 insertions(+), 198 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index ebfc7240604b..036748299bf6 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -116,10 +116,6 @@ TODO: #define NI_660X_LOGIC_LOW_GATE2_SEL 0x1f #define NI_660X_MAX_UP_DOWN_PIN 7 -static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, - unsigned generic_clock_source); -static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter); - static inline enum Gi_Counting_Mode_Reg_Bits Gi_Alternate_Sync_Bit(enum ni_gpct_variant variant) { @@ -205,6 +201,200 @@ static void ni_tio_reset_count_and_disarm(struct ni_gpct *counter) write_register(counter, Gi_Reset_Bit(cidx), NITIO_RESET_REG(cidx)); } +static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, + unsigned generic_clock_source) +{ + uint64_t clock_period_ps; + + switch (generic_clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK) { + case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: + clock_period_ps = 50000; + break; + case NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS: + clock_period_ps = 10000000; + break; + case NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS: + clock_period_ps = 12500; + break; + case NI_GPCT_PXI10_CLOCK_SRC_BITS: + clock_period_ps = 100000; + break; + default: + /* + * clock period is specified by user with prescaling + * already taken into account. + */ + return counter->clock_period_ps; + } + + switch (generic_clock_source & NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK) { + case NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS: + break; + case NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS: + clock_period_ps *= 2; + break; + case NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS: + clock_period_ps *= 8; + break; + default: + BUG(); + break; + } + return clock_period_ps; +} + +static unsigned ni_tio_clock_src_modifiers(const struct ni_gpct *counter) +{ + struct ni_gpct_device *counter_dev = counter->counter_dev; + unsigned cidx = counter->counter_index; + const unsigned counting_mode_bits = + ni_tio_get_soft_copy(counter, NITIO_CNT_MODE_REG(cidx)); + unsigned bits = 0; + + if (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & + Gi_Source_Polarity_Bit) + bits |= NI_GPCT_INVERT_CLOCK_SRC_BIT; + if (counting_mode_bits & Gi_Prescale_X2_Bit(counter_dev->variant)) + bits |= NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS; + if (counting_mode_bits & Gi_Prescale_X8_Bit(counter_dev->variant)) + bits |= NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS; + return bits; +} + +static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) +{ + struct ni_gpct_device *counter_dev = counter->counter_dev; + unsigned cidx = counter->counter_index; + const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); + unsigned clock_source = 0; + unsigned i; + const unsigned input_select = + (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & + Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; + + switch (input_select) { + case NI_M_TIMEBASE_1_CLK: + clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; + break; + case NI_M_TIMEBASE_2_CLK: + clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; + break; + case NI_M_TIMEBASE_3_CLK: + if (counter_dev->regs[second_gate_reg] & + Gi_Source_Subselect_Bit) + clock_source = + NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS; + else + clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; + break; + case NI_M_LOGIC_LOW_CLK: + clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; + break; + case NI_M_NEXT_GATE_CLK: + if (counter_dev->regs[second_gate_reg] & + Gi_Source_Subselect_Bit) + clock_source = NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS; + else + clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; + break; + case NI_M_PXI10_CLK: + clock_source = NI_GPCT_PXI10_CLOCK_SRC_BITS; + break; + case NI_M_NEXT_TC_CLK: + clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; + break; + default: + for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { + if (input_select == NI_M_RTSI_CLK(i)) { + clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); + break; + } + } + if (i <= NI_M_MAX_RTSI_CHAN) + break; + for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { + if (input_select == NI_M_PFI_CLK(i)) { + clock_source = NI_GPCT_PFI_CLOCK_SRC_BITS(i); + break; + } + } + if (i <= NI_M_MAX_PFI_CHAN) + break; + BUG(); + break; + } + clock_source |= ni_tio_clock_src_modifiers(counter); + return clock_source; +} + +static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) +{ + unsigned clock_source = 0; + unsigned cidx = counter->counter_index; + const unsigned input_select = + (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & + Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; + unsigned i; + + switch (input_select) { + case NI_660X_TIMEBASE_1_CLK: + clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; + break; + case NI_660X_TIMEBASE_2_CLK: + clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; + break; + case NI_660X_TIMEBASE_3_CLK: + clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; + break; + case NI_660X_LOGIC_LOW_CLK: + clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; + break; + case NI_660X_SRC_PIN_I_CLK: + clock_source = NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS; + break; + case NI_660X_NEXT_GATE_CLK: + clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; + break; + case NI_660X_NEXT_TC_CLK: + clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; + break; + default: + for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { + if (input_select == NI_660X_RTSI_CLK(i)) { + clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); + break; + } + } + if (i <= NI_660X_MAX_RTSI_CHAN) + break; + for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { + if (input_select == NI_660X_SRC_PIN_CLK(i)) { + clock_source = + NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i); + break; + } + } + if (i <= NI_660X_MAX_SRC_PIN) + break; + BUG(); + break; + } + clock_source |= ni_tio_clock_src_modifiers(counter); + return clock_source; +} + +static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter) +{ + switch (counter->counter_dev->variant) { + case ni_gpct_variant_e_series: + case ni_gpct_variant_m_series: + default: + return ni_m_series_clock_src_select(counter); + case ni_gpct_variant_660x: + return ni_660x_clock_src_select(counter); + } +} + static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) { struct ni_gpct_device *counter_dev = counter->counter_dev; @@ -562,200 +752,6 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, return 0; } -static unsigned ni_tio_clock_src_modifiers(const struct ni_gpct *counter) -{ - struct ni_gpct_device *counter_dev = counter->counter_dev; - unsigned cidx = counter->counter_index; - const unsigned counting_mode_bits = - ni_tio_get_soft_copy(counter, NITIO_CNT_MODE_REG(cidx)); - unsigned bits = 0; - - if (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Polarity_Bit) - bits |= NI_GPCT_INVERT_CLOCK_SRC_BIT; - if (counting_mode_bits & Gi_Prescale_X2_Bit(counter_dev->variant)) - bits |= NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS; - if (counting_mode_bits & Gi_Prescale_X8_Bit(counter_dev->variant)) - bits |= NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS; - return bits; -} - -static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) -{ - struct ni_gpct_device *counter_dev = counter->counter_dev; - unsigned cidx = counter->counter_index; - const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); - unsigned clock_source = 0; - unsigned i; - const unsigned input_select = - (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; - - switch (input_select) { - case NI_M_TIMEBASE_1_CLK: - clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; - break; - case NI_M_TIMEBASE_2_CLK: - clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; - break; - case NI_M_TIMEBASE_3_CLK: - if (counter_dev->regs[second_gate_reg] & - Gi_Source_Subselect_Bit) - clock_source = - NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS; - else - clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; - break; - case NI_M_LOGIC_LOW_CLK: - clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; - break; - case NI_M_NEXT_GATE_CLK: - if (counter_dev->regs[second_gate_reg] & - Gi_Source_Subselect_Bit) - clock_source = NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS; - else - clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; - break; - case NI_M_PXI10_CLK: - clock_source = NI_GPCT_PXI10_CLOCK_SRC_BITS; - break; - case NI_M_NEXT_TC_CLK: - clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; - break; - default: - for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { - if (input_select == NI_M_RTSI_CLK(i)) { - clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); - break; - } - } - if (i <= NI_M_MAX_RTSI_CHAN) - break; - for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { - if (input_select == NI_M_PFI_CLK(i)) { - clock_source = NI_GPCT_PFI_CLOCK_SRC_BITS(i); - break; - } - } - if (i <= NI_M_MAX_PFI_CHAN) - break; - BUG(); - break; - } - clock_source |= ni_tio_clock_src_modifiers(counter); - return clock_source; -} - -static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) -{ - unsigned clock_source = 0; - unsigned cidx = counter->counter_index; - const unsigned input_select = - (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; - unsigned i; - - switch (input_select) { - case NI_660X_TIMEBASE_1_CLK: - clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; - break; - case NI_660X_TIMEBASE_2_CLK: - clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; - break; - case NI_660X_TIMEBASE_3_CLK: - clock_source = NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS; - break; - case NI_660X_LOGIC_LOW_CLK: - clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; - break; - case NI_660X_SRC_PIN_I_CLK: - clock_source = NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS; - break; - case NI_660X_NEXT_GATE_CLK: - clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; - break; - case NI_660X_NEXT_TC_CLK: - clock_source = NI_GPCT_NEXT_TC_CLOCK_SRC_BITS; - break; - default: - for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { - if (input_select == NI_660X_RTSI_CLK(i)) { - clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); - break; - } - } - if (i <= NI_660X_MAX_RTSI_CHAN) - break; - for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { - if (input_select == NI_660X_SRC_PIN_CLK(i)) { - clock_source = - NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i); - break; - } - } - if (i <= NI_660X_MAX_SRC_PIN) - break; - BUG(); - break; - } - clock_source |= ni_tio_clock_src_modifiers(counter); - return clock_source; -} - -static unsigned ni_tio_generic_clock_src_select(const struct ni_gpct *counter) -{ - switch (counter->counter_dev->variant) { - case ni_gpct_variant_e_series: - case ni_gpct_variant_m_series: - default: - return ni_m_series_clock_src_select(counter); - case ni_gpct_variant_660x: - return ni_660x_clock_src_select(counter); - } -} - -static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, - unsigned generic_clock_source) -{ - uint64_t clock_period_ps; - - switch (generic_clock_source & NI_GPCT_CLOCK_SRC_SELECT_MASK) { - case NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS: - clock_period_ps = 50000; - break; - case NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS: - clock_period_ps = 10000000; - break; - case NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS: - clock_period_ps = 12500; - break; - case NI_GPCT_PXI10_CLOCK_SRC_BITS: - clock_period_ps = 100000; - break; - default: - /* - * clock period is specified by user with prescaling - * already taken into account. - */ - return counter->clock_period_ps; - } - - switch (generic_clock_source & NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK) { - case NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS: - break; - case NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS: - clock_period_ps *= 2; - break; - case NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS: - clock_period_ps *= 8; - break; - default: - BUG(); - break; - } - return clock_period_ps; -} - static void ni_tio_get_clock_src(struct ni_gpct *counter, unsigned int *clock_source, unsigned int *period_ns) -- cgit From 0748e36265f7a8908c91740a2f538e8dffee3bbc Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 24 Jul 2014 10:15:05 -0700 Subject: staging: comedi: ni_tio: convert printk to pr_err Convert the printk(KERN_ERR ...) in ni_m_clk_src() to a pr_err(). Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 036748299bf6..f9f632014511 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -667,7 +667,7 @@ static unsigned ni_m_clk_src(unsigned int clock_source) } if (i <= NI_M_MAX_PFI_CHAN) break; - printk(KERN_ERR "invalid clock source 0x%lx\n", + pr_err("invalid clock source 0x%lx\n", (unsigned long)clock_source); BUG(); ni_m_series_clock = 0; -- cgit From 52e0cdc546fa4b91df68e15c54c775e721e7f8eb Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 23:34:14 +0100 Subject: staging: vt6656: dpc.h remove dead function prototypes Removing RXvWorkItem RXvFreeRCB Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.h | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 1df2ae897988..d538aa3b6b16 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -32,10 +32,6 @@ #include "device.h" #include "wcmd.h" -void RXvWorkItem(struct work_struct *work); - -void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb); - int vnt_rx_data(struct vnt_private *, struct vnt_rcb *, unsigned long bytes_recieved); -- cgit From 23690634a5d8ebcf501e2fa2214c04a2fe767b7c Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 23:34:15 +0100 Subject: staging: vt6656: dpc remove unneeded headers Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/dpc.c | 3 --- drivers/staging/vt6656/dpc.h | 1 - 2 files changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 5edb5b664d4f..e6367ed3b0bb 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -32,12 +32,9 @@ #include "dpc.h" #include "device.h" -#include "rxtx.h" -#include "card.h" #include "mac.h" #include "baseband.h" #include "rf.h" -#include "usbpipe.h" int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb, unsigned long bytes_received) diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index d538aa3b6b16..fab195f8c3f5 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -30,7 +30,6 @@ #define __DPC_H__ #include "device.h" -#include "wcmd.h" int vnt_rx_data(struct vnt_private *, struct vnt_rcb *, unsigned long bytes_recieved); -- cgit From f777203a8c02afd074689ef7b33fd6773ec55245 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 23:34:16 +0100 Subject: staging: vt6656: power.h remove dead macros Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index bd9de776aced..256726ffbaab 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -30,8 +30,6 @@ #define __POWER_H__ #define C_PWBT 1000 // micro sec. power up before TBTT -#define PS_FAST_INTERVAL 1 // Fast power saving listen interval -#define PS_MAX_INTERVAL 4 // MAX power saving listen interval void vnt_disable_power_saving(struct vnt_private *); void vnt_enable_power_saving(struct vnt_private *, u16); -- cgit From 4a36a966200b793ee1f405d7a52931e5fb7788f6 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 23:34:17 +0100 Subject: staging: vt6656: rf.h cleanup C_PWBT comments Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/power.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index 256726ffbaab..7696b714850c 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -29,7 +29,7 @@ #ifndef __POWER_H__ #define __POWER_H__ -#define C_PWBT 1000 // micro sec. power up before TBTT +#define C_PWBT 1000 /* micro sec. power up before TBTT */ void vnt_disable_power_saving(struct vnt_private *); void vnt_enable_power_saving(struct vnt_private *, u16); -- cgit From 7a3391764f7c346c1523852b8ed223ef574afc8b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Thu, 24 Jul 2014 23:34:18 +0100 Subject: staging: vt6656: wcmd.h remove dead macros AUTHENTICATE_TIMEOUT ASSOCIATE_TIMEOUT Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6656/wcmd.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 79df04a6afae..2b0ee285eb0b 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -31,9 +31,6 @@ #include "device.h" -#define AUTHENTICATE_TIMEOUT 1000 //ms -#define ASSOCIATE_TIMEOUT 1000 //ms - /* Command code */ enum vnt_cmd { WLAN_CMD_INIT_MAC80211, -- cgit From fe802546ce748b5af933157e181f1d653ac5ec9c Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:15 +0200 Subject: staging: vt6655: remove useless return statements Many return statements in void function were present at the end of functions, with no effect. They now are removed. This fixes a bunch of checkpatch warnings. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/80211mgr.c | 36 ------------------------------- drivers/staging/vt6655/baseband.c | 3 --- drivers/staging/vt6655/bssdb.c | 8 ------- drivers/staging/vt6655/card.c | 4 ---- drivers/staging/vt6655/datarate.c | 2 -- drivers/staging/vt6655/device_main.c | 2 -- drivers/staging/vt6655/hostap.c | 2 -- drivers/staging/vt6655/key.c | 1 - drivers/staging/vt6655/power.c | 4 ---- drivers/staging/vt6655/rxtx.c | 4 ---- drivers/staging/vt6655/vntwifi.c | 3 --- drivers/staging/vt6655/wcmd.c | 2 -- drivers/staging/vt6655/wmgr.c | 41 ------------------------------------ 13 files changed, 112 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/80211mgr.c b/drivers/staging/vt6655/80211mgr.c index 9aa2e46c4a5d..acdbbbd08bce 100644 --- a/drivers/staging/vt6655/80211mgr.c +++ b/drivers/staging/vt6655/80211mgr.c @@ -102,8 +102,6 @@ vMgrEncodeBeacon( WLAN_BEACON_OFF_CAPINFO); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID; - - return; } /*+ @@ -228,8 +226,6 @@ vMgrDecodeBeacon( } pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len); } - - return; } /*+ @@ -250,8 +246,6 @@ vMgrEncodeIBSSATIM( { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; pFrame->len = WLAN_HDR_ADDR3_LEN; - - return; } /*+ @@ -271,8 +265,6 @@ vMgrDecodeIBSSATIM( ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; - - return; } /*+ @@ -299,8 +291,6 @@ vMgrEncodeDisassociation( WLAN_DISASSOC_OFF_REASON); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON + sizeof(*(pFrame->pwReason)); - - return; } /*+ @@ -325,8 +315,6 @@ vMgrDecodeDisassociation( pFrame->pwReason = (unsigned short *) (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_DISASSOC_OFF_REASON); - - return; } /*+ @@ -355,7 +343,6 @@ vMgrEncodeAssocRequest( WLAN_ASSOCREQ_OFF_LISTEN_INT); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT + sizeof(*(pFrame->pwListenInterval)); - return; } /*+ @@ -426,7 +413,6 @@ vMgrDecodeAssocRequest( } pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len); } - return; } /*+ @@ -459,8 +445,6 @@ vMgrEncodeAssocResponse( WLAN_ASSOCRESP_OFF_AID); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID + sizeof(*(pFrame->pwAid)); - - return; } /*+ @@ -511,7 +495,6 @@ vMgrDecodeAssocResponse( } else { pFrame->pExtSuppRates = NULL; } - return; } /*+ @@ -544,8 +527,6 @@ vMgrEncodeReassocRequest( WLAN_REASSOCREQ_OFF_CURR_AP); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCREQ_OFF_CURR_AP + sizeof(*(pFrame->pAddrCurrAP)); - - return; } /*+ @@ -619,7 +600,6 @@ vMgrDecodeReassocRequest( } pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len); } - return; } /*+ @@ -640,7 +620,6 @@ vMgrEncodeProbeRequest( { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; pFrame->len = WLAN_HDR_ADDR3_LEN; - return; } /*+ @@ -694,7 +673,6 @@ vMgrDecodeProbeRequest( pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len); } - return; } /*+ @@ -728,8 +706,6 @@ vMgrEncodeProbeResponse( pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_PROBERESP_OFF_CAP_INFO + sizeof(*(pFrame->pwCapInfo)); - - return; } /*+ @@ -850,7 +826,6 @@ vMgrDecodeProbeResponse( pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len); } - return; } /*+ @@ -883,8 +858,6 @@ vMgrEncodeAuthen( WLAN_AUTHEN_OFF_STATUS); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_AUTHEN_OFF_STATUS + sizeof(*(pFrame->pwStatus)); - - return; } /*+ @@ -925,8 +898,6 @@ vMgrDecodeAuthen( if (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len) && pItem->byElementID == WLAN_EID_CHALLENGE) pFrame->pChallenge = (PWLAN_IE_CHALLENGE)pItem; - - return; } /*+ @@ -953,8 +924,6 @@ vMgrEncodeDeauthen( WLAN_DEAUTHEN_OFF_REASON); pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DEAUTHEN_OFF_REASON + sizeof(*(pFrame->pwReason)); - - return; } /*+ @@ -979,8 +948,6 @@ vMgrDecodeDeauthen( pFrame->pwReason = (unsigned short *) (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) + WLAN_DEAUTHEN_OFF_REASON); - - return; } /*+ @@ -1014,8 +981,6 @@ vMgrEncodeReassocResponse( pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCRESP_OFF_AID + sizeof(*(pFrame->pwAid)); - - return; } /*+ @@ -1061,5 +1026,4 @@ vMgrDecodeReassocResponse( (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) { pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem; } - return; } diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 67bc3b49b8cc..c96bc7adb5b7 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -2814,7 +2814,6 @@ TimerSQ3CallBack( add_timer(&pDevice->TimerSQ3Tmax2); spin_unlock_irq(&pDevice->lock); - return; } /*+ @@ -2873,6 +2872,4 @@ TimerState1CallBack( pDevice->byAntennaState = 0; BBvClearAntDivSQ3Value(pDevice); spin_unlock_irq(&pDevice->lock); - - return; } diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index eb3474da9349..5f9fd2b20d13 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -262,8 +262,6 @@ BSSvClearBSSList( memset(&pMgmt->sBSSList[ii], 0, sizeof(KnownBSS)); } BSSvClearAnyBSSJoinRecord(pDevice); - - return; } /*+ @@ -1235,7 +1233,6 @@ start: pMgmt->sTimerSecondCallback.expires = RUN_AT(HZ); add_timer(&pMgmt->sTimerSecondCallback); - return; } /*+ @@ -1385,8 +1382,6 @@ BSSvUpdateNodeTxCounter( } } } - - return; } /*+ @@ -1494,7 +1489,6 @@ BSSvClearAnyBSSJoinRecord( for (ii = 0; ii < MAX_BSS_NUM; ii++) pMgmt->sBSSList[ii].bSelected = false; - return; } #ifdef Calcu_LinkQual @@ -1535,7 +1529,6 @@ void s_uCalculateLinkQual( pDevice->scStatistic.TxFailCount = 0; pDevice->scStatistic.TxNoRetryOkCount = 0; pDevice->scStatistic.TxRetryOkCount = 0; - return; } #endif @@ -1553,5 +1546,4 @@ void s_vCheckPreEDThreshold( if (pBSSList != NULL) pDevice->byBBPreEDRSSI = (unsigned char) (~(pBSSList->ldBmAverRange) + 1); } - return; } diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index e29dcd85f5d1..f2674b4fb17b 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -2065,8 +2065,6 @@ void CARDvSetFirstNextTBTT(void __iomem *dwIoBase, unsigned short wBeaconInterva VNSvOutPortD(dwIoBase + MAC_REG_NEXTTBTT, LODWORD(qwNextTBTT)); VNSvOutPortD(dwIoBase + MAC_REG_NEXTTBTT + 4, HIDWORD(qwNextTBTT)); MACvRegBitsOn(dwIoBase, MAC_REG_TFTCTL, TFTCTL_TBTTSYNCEN); - - return; } /* @@ -2093,6 +2091,4 @@ void CARDvUpdateNextTBTT(void __iomem *dwIoBase, QWORD qwTSF, unsigned short wBe MACvRegBitsOn(dwIoBase, MAC_REG_TFTCTL, TFTCTL_TBTTSYNCEN); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Card:Update Next TBTT[%8xh:%8xh] \n", (unsigned int) HIDWORD(qwTSF), (unsigned int) LODWORD(qwTSF)); - - return; } diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index 83ad74cf6841..565028c4ab03 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -367,8 +367,6 @@ RATEvTxRateFallBack( /* 2008-5-8 by chester */ TxRate_iwconfig = psNodeDBTable->wTxDataRate; s_vResetCounter(psNodeDBTable); - - return; } /*+ diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 5eeb19edc633..0f120e6841d6 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -756,8 +756,6 @@ static void device_init_diversity_timer(PSDevice pDevice) { pDevice->TimerSQ3Tmax3.data = (unsigned long) pDevice; pDevice->TimerSQ3Tmax3.function = (TimerFunction)TimerState1CallBack; pDevice->TimerSQ3Tmax3.expires = RUN_AT(HZ); - - return; } static bool device_release_WPADEV(PSDevice pDevice) diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c index 317c2a8ee162..4cf85f3ab2a7 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c @@ -394,8 +394,6 @@ static void hostap_flush_sta(PSDevice pDevice) // reserved node index =0 for multicast node. BSSvClearNodeDBTable(pDevice, 1); pDevice->uAssocCount = 0; - - return; } /* diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index f5bc4a2f6375..27f97bc607e7 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -468,7 +468,6 @@ void KeyvRemoveWEPKey( } s_vCheckKeyTableValid(pTable, dwIoBase); } - return; } void KeyvRemoveAllWEPKey( diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index 5dfa911c6f49..a6e48c7ed4ad 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -114,7 +114,6 @@ PSvEnablePowerSaving( pDevice->bPWBitOn = true; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable... \n"); - return; } /*+ @@ -149,7 +148,6 @@ PSvDisablePowerSaving( PSbSendNullPacket(pDevice); pDevice->bPWBitOn = false; - return; } /*+ @@ -253,8 +251,6 @@ PSvSendPSPOLL( if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send PS-Poll packet failed..\n"); } - - return; } /*+ diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 60fe6dbd8a9e..52455cd6c896 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -1958,8 +1958,6 @@ vGenerateFIFOHeader(PSDevice pDevice, unsigned char byPktType, unsigned char *pb *pcbHeaderSize = s_cbFillTxBufHead(pDevice, byPktType, pbyTxBufferAddr, cbPayloadSize, uDMAIdx, pHeadTD, psEthHeader, pPacket, bNeedEncrypt, pTransmitKey, uNodeIndex, puMACfragNum); - - return; } /*+ @@ -2840,6 +2838,4 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, unsigned char *pbMPDU, un // Poll Transmit the adapter MACvTransmit0(pDevice->PortOffset); - - return; } diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 085878eef4da..8241e6b0a71c 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -500,8 +500,6 @@ VNTWIFIvUpdateNodeTxCounter( pMgmt->sNodeDBTable[uNodeIndex].uTxRetry += pbyTxFailCount[MAX_RATE]; for (ii = 0; ii < MAX_RATE; ii++) pMgmt->sNodeDBTable[uNodeIndex].uTxFail[ii] += pbyTxFailCount[ii]; - - return; } void @@ -569,7 +567,6 @@ VNTWIFIvGetTxRate( *pbyACKRate = byACKRate; *pbyCCKBasicRate = byCCKBasicRate; *pbyOFDMBasicRate = byOFDMBasicRate; - return; } unsigned char diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index a379cecbb080..fc605f22455e 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -295,7 +295,6 @@ vCommandTimerWait( // RUN_AT :1 msec ~= (HZ/1024) pDevice->sTimerCommand.expires = (unsigned int)RUN_AT((MSecond * HZ) >> 10); add_timer(&pDevice->sTimerCommand); - return; } void @@ -796,7 +795,6 @@ vCommandTimer( } //switch spin_unlock_irq(&pDevice->lock); - return; } static diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 9853a8f4027f..0b6f1e9147f1 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -358,8 +358,6 @@ vMgrObjectInit( pMgmt->byCSSGK = KEY_CTL_NONE; pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; BSSvClearBSSList((void *)pDevice, false); - - return; } /*+ @@ -403,8 +401,6 @@ vMgrTimerInit( pDevice->cbFreeCmdQueue = CMD_Q_SIZE; pDevice->uCmdDequeueIdx = 0; pDevice->uCmdEnqueueIdx = 0; - - return; } /*+ @@ -429,8 +425,6 @@ vMgrObjectReset( pMgmt->eCurrState = WMAC_STATE_IDLE; pDevice->bEnablePSMode = false; // TODO: timer - - return; } /*+ @@ -498,8 +492,6 @@ vMgrAssocBeginSta( } else { *pStatus = CMD_STATUS_RESOURCES; } - - return; } /*+ @@ -565,8 +557,6 @@ vMgrReAssocBeginSta( else DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Reassociation tx sending.\n"); } - - return; } /*+ @@ -625,8 +615,6 @@ vMgrDisassocBeginSta( pMgmt->eCurrState = WMAC_STATE_IDLE; *pStatus = CMD_STATUS_SUCCESS; } - - return; } /*+ @@ -771,8 +759,6 @@ s_vMgrRxAssocRequest( else DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Assoc response tx sending..\n"); } - - return; } /*+ @@ -921,7 +907,6 @@ s_vMgrRxReAssocRequest( else DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:ReAssoc response tx sending..\n"); } - return; } /*+ @@ -1070,7 +1055,6 @@ s_vMgrRxAssocResponse( if (pMgmt->eCurrState == WMAC_STATE_ASSOC) timer_expire(pDevice->sTimerCommand, 0); - return; } /*+ @@ -1125,8 +1109,6 @@ vMgrAuthenBeginSta( pMgmt->eCurrState = WMAC_STATE_AUTHPENDING; *pStatus = CMD_STATUS_SUCCESS; } - - return; } /*+ @@ -1178,8 +1160,6 @@ vMgrDeAuthenBeginSta( *pStatus = csMgmt_xmit(pDevice, pTxPacket); if (*pStatus == CMD_STATUS_PENDING) *pStatus = CMD_STATUS_SUCCESS; - - return; } /*+ @@ -1232,7 +1212,6 @@ s_vMgrRxAuthentication( cpu_to_le16((*(sFrame.pwAuthSequence)))); break; } - return; } /*+ @@ -1332,8 +1311,6 @@ s_vMgrRxAuthenSequence_1( DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx.. \n"); if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx failed.\n"); - - return; } /*+ @@ -1418,7 +1395,6 @@ s_vMgrRxAuthenSequence_2( DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt: rx auth.seq = 2 unknown AuthAlgorithm=%d\n", cpu_to_le16((*(pFrame->pwAuthAlgorithm)))); break; } - return; } /*+ @@ -1504,8 +1480,6 @@ reply: if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_4 tx failed.\n"); - - return; } /*+ @@ -1604,8 +1578,6 @@ s_vMgrRxDisassociation( #endif } /* else, ignore it */ - - return; } /*+ @@ -1688,7 +1660,6 @@ s_vMgrRxDeauthentication( /* else, ignore it. TODO: IBSS authentication service would be implemented here */ } - return; } //2008-8-4 by chester @@ -2197,8 +2168,6 @@ if (bUpdateTSF) { CARDbGetCurrentTSF(pDevice->PortOffset, &qwCurrTSF); CARDvUpdateNextTBTT(pDevice->PortOffset, qwTimestamp, pMgmt->wCurrBeaconPeriod); } - - return; } /*+ @@ -2434,8 +2403,6 @@ vMgrCreateOwnIBSS( // Prepare beacon to send if (bMgrPrepareBeaconToSend((void *)pDevice, pMgmt)) *pStatus = CMD_STATUS_SUCCESS; - - return; } /*+ @@ -2656,7 +2623,6 @@ vMgrJoinBSSBegin( pMgmt->eCurrState = WMAC_STATE_IDLE; } } - return; } /*+ @@ -2838,8 +2804,6 @@ static void Encyption_Rebuild( } } } - - return; } /*+ @@ -4079,7 +4043,6 @@ s_vMgrRxProbeResponse( (void *)pRxPacket ); } - return; } /*+ @@ -4153,8 +4116,6 @@ s_vMgrRxProbeRequest( } } } - - return; } /*+ @@ -4297,8 +4258,6 @@ vMgrRxManagePacket( default: DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "rx unknown mgmt\n"); } - - return; } /*+ -- cgit From 6b7112719fd48c29f35333ef152a5a450f01dc83 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:16 +0200 Subject: staging: vt6655: Add missing blank lines after declarations This patch fixes the missing blank lines after declarations in vt6655 reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/80211mgr.c | 1 + drivers/staging/vt6655/baseband.c | 1 + drivers/staging/vt6655/bssdb.c | 7 +++++++ drivers/staging/vt6655/card.c | 1 + drivers/staging/vt6655/device.h | 1 + drivers/staging/vt6655/device_main.c | 11 +++++++++++ drivers/staging/vt6655/dpc.c | 3 +++ drivers/staging/vt6655/iwctl.c | 8 ++++++++ drivers/staging/vt6655/rc4.c | 1 + drivers/staging/vt6655/rf.c | 2 ++ drivers/staging/vt6655/rxtx.c | 8 ++++++++ drivers/staging/vt6655/vntwifi.c | 3 +++ drivers/staging/vt6655/wcmd.c | 1 + drivers/staging/vt6655/wmgr.c | 2 ++ drivers/staging/vt6655/wpa.c | 1 + drivers/staging/vt6655/wpactl.c | 1 + 16 files changed, 52 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/80211mgr.c b/drivers/staging/vt6655/80211mgr.c index acdbbbd08bce..96b0d61623e4 100644 --- a/drivers/staging/vt6655/80211mgr.c +++ b/drivers/staging/vt6655/80211mgr.c @@ -546,6 +546,7 @@ vMgrDecodeReassocRequest( ) { PWLAN_IE pItem; + pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; /* Fixed Fields */ diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index c96bc7adb5b7..f212b88c8cec 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -2289,6 +2289,7 @@ void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs) { int ii; unsigned char byBase = 1; + for (ii = 0; ii < BB_MAX_CONTEXT_SIZE; ii++) { BBbReadEmbedded(dwIoBase, (unsigned char)(ii*byBase), pbyBBRegs); pbyBBRegs += byBase; diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index 5f9fd2b20d13..58f85e8febb9 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -422,6 +422,7 @@ BSSbInsertToBSSList( if (pRSN != NULL) { unsigned int uLen = pRSN->len + 2; + if (uLen <= (uIELength - (unsigned int)((unsigned char *)pRSN - pbyIEs))) { pBSSList->wRSNLen = uLen; memcpy(pBSSList->byRSNIE, pRSN, uLen); @@ -598,6 +599,7 @@ BSSbUpdateToBSSList( if (pRSNWPA != NULL) { unsigned int uLen = pRSNWPA->len + 2; + if (uLen <= (uIELength - (unsigned int)((unsigned char *)pRSNWPA - pbyIEs))) { pBSSList->wWPALen = uLen; memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); @@ -609,6 +611,7 @@ BSSbUpdateToBSSList( if (pRSN != NULL) { unsigned int uLen = pRSN->len + 2; + if (uLen <= (uIELength - (unsigned int)((unsigned char *)pRSN - pbyIEs))) { pBSSList->wRSNLen = uLen; memcpy(pBSSList->byRSNIE, pRSN, uLen); @@ -988,6 +991,7 @@ start: #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT { union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); @@ -1167,6 +1171,7 @@ start: #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT { union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; PRINT_K("wireless_send_event--->SIOCGIWAP(disassociated)\n"); @@ -1267,6 +1272,7 @@ BSSvUpdateNodeTxCounter( unsigned short wFallBackRate = RATE_1M; unsigned char byFallBack; unsigned int ii; + pTxBufHead = (PSTxBufHead) pbyBuffer; if (pTxBufHead->wFIFOCtl & FIFOCTL_AUTO_FB_0) byFallBack = AUTO_FB_0; @@ -1451,6 +1457,7 @@ void s_vCheckSensitivity( /* Update BB Reg if RSSI is too strong */ long LocalldBmAverage = 0; long uNumofdBm = 0; + for (ii = 0; ii < RSSI_STAT_COUNT; ii++) { if (pBSSList->ldBmAverage[ii] != 0) { uNumofdBm++; diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index f2674b4fb17b..fdeb80557769 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -1770,6 +1770,7 @@ void vUpdateIFS(void *pDeviceHandler) PSDevice pDevice = (PSDevice) pDeviceHandler; unsigned char byMaxMin = 0; + if (pDevice->byPacketType == PK_TYPE_11A) {//0000 0000 0000 0000,11a pDevice->uSlot = C_SLOT_SHORT; pDevice->uSIFS = C_SIFS_A; diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index 647e36fe083a..f33ecf065223 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -786,6 +786,7 @@ inline static void EnQueue(PSDevice pDevice, PSRxMgmtPacket pRxMgmtPacket) inline static PSRxMgmtPacket DeQueue(PSDevice pDevice) { PSRxMgmtPacket pRxMgmtPacket; + if (pDevice->rxManeQueue.tail == pDevice->rxManeQueue.head) { printk("Queue is Empty\n"); return NULL; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 0f120e6841d6..56fdb4652175 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -326,6 +326,7 @@ static int Config_FileGetParameter(unsigned char *string, static char *get_chip_name(int chip_id) { int i; + for (i = 0; chip_info_table[i].name != NULL; i++) if (chip_info_table[i].chip_id == chip_id) break; @@ -464,6 +465,7 @@ static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) unsigned char byOFDMPwrdBm = 0; int zonetype = 0; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); + MACbShutdown(pDevice->PortOffset); BBvSoftwareReset(pDevice->PortOffset); @@ -1006,6 +1008,7 @@ static bool device_get_pci_info(PSDevice pDevice, struct pci_dev *pcid) { unsigned char value = 0x00; int ii, j; u16 max_lat = 0x0000; + memset(pci_config, 0x00, 256); #endif @@ -1358,6 +1361,7 @@ static void device_init_td1_ring(PSDevice pDevice) { static void device_free_td0_ring(PSDevice pDevice) { int i; + for (i = 0; i < pDevice->sOpts.nTxDescs[0]; i++) { PSTxDesc pDesc = &(pDevice->apTD0Rings[i]); PDEVICE_TD_INFO pTDInfo = pDesc->pTDInfo; @@ -2278,6 +2282,7 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { unsigned char Descriptor_type; unsigned short Key_info; bool bTxeapol_key = false; + Protocol_Version = skb->data[ETH_HLEN]; Packet_Type = skb->data[ETH_HLEN+1]; Descriptor_type = skb->data[ETH_HLEN+1+1+2]; @@ -2576,6 +2581,7 @@ static inline u32 ether_crc(int length, unsigned char *data) while (--length >= 0) { unsigned char current_octet = *data++; int bit; + for (bit = 0; bit < 8; bit++, current_octet >>= 1) { crc = (crc << 1) ^ ((crc < 0) ^ (current_octet & 1) ? ethernet_polynomial : 0); @@ -2671,6 +2677,7 @@ static void device_set_multi(struct net_device *dev) { memset(mc_filter, 0, sizeof(mc_filter)); netdev_for_each_mc_addr(ha, dev) { int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; + mc_filter[bit_nr >> 5] |= cpu_to_le32(1 << (bit_nr & 31)); } MACvSelectPage1(pDevice->PortOffset); @@ -2734,6 +2741,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { { char essid[IW_ESSID_MAX_SIZE+1]; + if (wrq->u.essid.length > IW_ESSID_MAX_SIZE) { rc = -E2BIG; break; @@ -2753,6 +2761,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { { char essid[IW_ESSID_MAX_SIZE+1]; + if (wrq->u.essid.pointer) rc = iwctl_giwessid(dev, NULL, &(wrq->u.essid), essid); @@ -3115,6 +3124,7 @@ static int ethtool_ioctl(struct net_device *dev, void __user *useraddr) switch (ethcmd) { case ETHTOOL_GDRVINFO: { struct ethtool_drvinfo info = {ETHTOOL_GDRVINFO}; + strncpy(info.driver, DEVICE_NAME, sizeof(info.driver)-1); strncpy(info.version, DEVICE_VERSION, sizeof(info.version)-1); if (copy_to_user(useraddr, &info, sizeof(info))) @@ -3171,6 +3181,7 @@ static int device_notify_reboot(struct notifier_block *nb, unsigned long event, void *p) { struct pci_dev *pdev = NULL; + switch (event) { case SYS_DOWN: case SYS_HALT: diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 696564b44200..5b2ace2755d2 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -604,6 +604,7 @@ device_receive_frame( { unsigned char Protocol_Version; //802.1x Authentication unsigned char Packet_Type; //802.1x Authentication + if (bIsWEP) cbIVOffset = 8; else @@ -761,6 +762,7 @@ device_receive_frame( union iwreq_data wrqu; struct iw_michaelmicfailure ev; int keyidx = pbyFrame[cbHeaderSize+3] >> 6; //top two-bits + memset(&ev, 0, sizeof(ev)); ev.flags = keyidx & IW_MICFAILURE_KEY_ID; if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && @@ -1114,6 +1116,7 @@ static bool s_bHandleRxEncryption( // Software TKIP // 1. 3253 A PS802_11Header pMACHeader = (PS802_11Header)(pbyFrame); + TKIPvMixKey(pKey->abyKey, pMACHeader->abyAddr2, *pwRxTSC15_0, *pdwRxTSC47_16, pDevice->abyPRNG); rc4_init(&pDevice->SBox, pDevice->abyPRNG, TKIP_KEY_LEN); rc4_encrypt(&pDevice->SBox, pbyIV+8, pbyIV+8, PayloadLen); diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 747d72340db3..d449fcb17395 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -139,11 +139,13 @@ static int iwctl_siwscan(struct net_device *dev, struct iw_scan_req *req = (struct iw_scan_req *)extra; unsigned char abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; PWLAN_IE_SSID pItemSSID = NULL; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSCAN \n"); if (pDevice->byReAssocCount > 0) { //reject scan when re-associating! //send scan event to wpa_Supplicant union iwreq_data wrqu; + PRINT_K("wireless_send_event--->SIOCGIWSCAN(scan done)\n"); memset(&wrqu, 0, sizeof(wrqu)); wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL); @@ -255,6 +257,7 @@ static int iwctl_giwscan(struct net_device *dev, //2008-0409-04, by Einsn Liu { int f = (int)pBSS->uChannel - 1; + if (f < 0)f = 0; iwe.u.freq.m = frequency_list[f] * 100000; iwe.u.freq.e = 1; @@ -358,6 +361,7 @@ int iwctl_siwfreq(struct net_device *dev, (wrq->m <= (int) 2.487e8)) { int f = wrq->m / 100000; int c = 0; + while ((c < 14) && (f != frequency_list[c])) c++; wrq->e = 0; @@ -368,6 +372,7 @@ int iwctl_siwfreq(struct net_device *dev, rc = -EOPNOTSUPP; else { int channel = wrq->m; + if ((channel < 1) || (channel > 14)) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: New channel value of %d is invalid!\n", dev->name, wrq->m); rc = -EINVAL; @@ -404,6 +409,7 @@ int iwctl_giwfreq(struct net_device *dev, #else { int f = (int)pMgmt->uCurrChannel - 1; + if (f < 0) f = 0; wrq->m = frequency_list[f] * 100000; @@ -658,6 +664,7 @@ int iwctl_siwap(struct net_device *dev, // then ignore,because you don't known which one to be connect with?? { unsigned int ii, uSameBssidNum = 0; + for (ii = 0; ii < MAX_BSS_NUM; ii++) { if (pMgmt->sBSSList[ii].bActive && ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID, @@ -1059,6 +1066,7 @@ int iwctl_siwrts(struct net_device *dev, { int rthr = wrq->value; + if (wrq->disabled) rthr = 2312; diff --git a/drivers/staging/vt6655/rc4.c b/drivers/staging/vt6655/rc4.c index 343b815c0a9e..b7819bc702de 100644 --- a/drivers/staging/vt6655/rc4.c +++ b/drivers/staging/vt6655/rc4.c @@ -82,6 +82,7 @@ void rc4_encrypt(PRC4Ext pRC4, unsigned char *pbyDest, unsigned char *pbySrc, unsigned int cbData_len) { unsigned int ii; + for (ii = 0; ii < cbData_len; ii++) pbyDest[ii] = (unsigned char)(pbySrc[ii] ^ rc4_byte(pRC4)); } diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c index 33913e5b1cc1..d2d7dff3dce7 100644 --- a/drivers/staging/vt6655/rf.c +++ b/drivers/staging/vt6655/rf.c @@ -750,6 +750,7 @@ bool RFbInit( ) { bool bResult = true; + switch (pDevice->byRFType) { case RF_AIROHA: case RF_AL2230S: @@ -786,6 +787,7 @@ bool RFbInit( bool RFbSelectChannel(void __iomem *dwIoBase, unsigned char byRFType, unsigned char byChannel) { bool bResult = true; + switch (byRFType) { case RF_AIROHA: case RF_AL2230S: diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 52455cd6c896..092b918d0c1d 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -1084,6 +1084,7 @@ s_vGenerateTxParameter( unsigned char byFBOption = AUTO_FB_NONE; PSTxBufHead pFifoHead = (PSTxBufHead)pTxBufHead; + pFifoHead->wReserved = wCurrentRate; wFifoCtl = pFifoHead->wFIFOCtl; @@ -1103,6 +1104,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_gRTS pBuf = (PSRrvTime_gRTS)pvRrvTime; + pBuf->wRTSTxRrvTime_aa = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 2, byPktType, cbFrameSize, wCurrentRate));//2:RTSTxRrvTime_aa, 1:2.4GHz pBuf->wRTSTxRrvTime_ba = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 1, byPktType, cbFrameSize, wCurrentRate));//1:RTSTxRrvTime_ba, 1:2.4GHz pBuf->wRTSTxRrvTime_bb = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 0, byPktType, cbFrameSize, wCurrentRate));//0:RTSTxRrvTime_bb, 1:2.4GHz @@ -1116,6 +1118,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_gCTS pBuf = (PSRrvTime_gCTS)pvRrvTime; + pBuf->wTxRrvTime_a = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK));//2.4G OFDM pBuf->wTxRrvTime_b = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, PK_TYPE_11B, cbFrameSize, pDevice->byTopCCKBasicRate, bNeedACK));//1:CCK pBuf->wCTSTxRrvTime_ba = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 3, byPktType, cbFrameSize, wCurrentRate));//3:CTSTxRrvTime_Ba, 1:2.4GHz @@ -1129,6 +1132,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_ab pBuf = (PSRrvTime_ab)pvRrvTime; + pBuf->wRTSTxRrvTime = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 2, byPktType, cbFrameSize, wCurrentRate));//2:RTSTxRrvTime_aa, 0:5GHz pBuf->wTxRrvTime = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK));//0:OFDM } @@ -1138,6 +1142,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_ab pBuf = (PSRrvTime_ab)pvRrvTime; + pBuf->wTxRrvTime = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, PK_TYPE_11A, cbFrameSize, wCurrentRate, bNeedACK)); //0:OFDM } } @@ -1146,6 +1151,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_ab pBuf = (PSRrvTime_ab)pvRrvTime; + pBuf->wRTSTxRrvTime = cpu_to_le16((unsigned short)s_uGetRTSCTSRsvTime(pDevice, 0, byPktType, cbFrameSize, wCurrentRate));//0:RTSTxRrvTime_bb, 1:2.4GHz pBuf->wTxRrvTime = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, PK_TYPE_11B, cbFrameSize, wCurrentRate, bNeedACK));//1:CCK } @@ -1155,6 +1161,7 @@ s_vGenerateTxParameter( //Fill RsvTime if (pvRrvTime) { PSRrvTime_ab pBuf = (PSRrvTime_ab)pvRrvTime; + pBuf->wTxRrvTime = cpu_to_le16((unsigned short)s_uGetTxRsvTime(pDevice, PK_TYPE_11B, cbFrameSize, wCurrentRate, bNeedACK)); //1:CCK } } @@ -2025,6 +2032,7 @@ vGenerateMACHeader( if (pDevice->bLongHeader) { PWLAN_80211HDR_A4 pMACA4Header = (PWLAN_80211HDR_A4) pbyBufferAddr; + pMACHeader->wFrameCtl |= (FC_TODS | FC_FROMDS); memcpy(pMACA4Header->abyAddr4, pDevice->abyBSSID, WLAN_ADDR_LEN); } diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 8241e6b0a71c..0ee1e8a7c113 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -128,6 +128,7 @@ VNTWIFIpGetCurrentSSID( ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; + return (PWLAN_IE_SSID) pMgmt->abyCurrSSID; } @@ -151,6 +152,7 @@ VNTWIFIpGetCurrentChannel( ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; + if (pMgmtHandle != NULL) return pMgmt->uCurrChannel; @@ -177,6 +179,7 @@ VNTWIFIwGetAssocID( ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; + return pMgmt->wCurrAID; } diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index fc605f22455e..8196321ccd31 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -990,6 +990,7 @@ BSSvSecondTxData( { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); + pDevice->nTxDataTimeCout++; if (pDevice->nTxDataTimeCout < 4) //don't tx data if timer less than 40s diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 0b6f1e9147f1..fa7291517281 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -1649,6 +1649,7 @@ s_vMgrRxDeauthentication( #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT { union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; PRINT_K("wireless_send_event--->SIOCGIWAP(disauthen)\n"); @@ -2541,6 +2542,7 @@ vMgrJoinBSSBegin( // 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((void *)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "bAdd_PMKID_Candidate: 1(%d)\n", bResult); if (!bResult) { vFlush_PMKID_Candidate((void *)pDevice); diff --git a/drivers/staging/vt6655/wpa.c b/drivers/staging/vt6655/wpa.c index 9be59c23d7e6..505c89592057 100644 --- a/drivers/staging/vt6655/wpa.c +++ b/drivers/staging/vt6655/wpa.c @@ -73,6 +73,7 @@ WPA_ClearRSN( ) { int ii; + pBSSList->byGKType = WPA_TKIP; for (ii = 0; ii < 4; ii++) pBSSList->abyPKType[ii] = WPA_TKIP; diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index 8392d4d1d5ed..10b100c08590 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -766,6 +766,7 @@ static int wpa_set_associate(PSDevice pDevice, /*******search if ap_scan=2 ,which is associating request in hidden ssid mode ****/ { PKnownBSS pCurr = NULL; + pCurr = BSSpSearchBSSList(pDevice, pMgmt->abyDesireBSSID, pMgmt->abyDesireSSID, -- cgit From bfd7a2819051fc0ab401609aedbe65df46ed1259 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:17 +0200 Subject: staging: vt6655: Remove spaces before quoted newlines This fixes several spaces added just before a newline in debug strings, reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.c | 2 +- drivers/staging/vt6655/device_main.c | 53 ++++++++++++------------- drivers/staging/vt6655/dpc.c | 13 ++++--- drivers/staging/vt6655/hostap.c | 46 +++++++++++----------- drivers/staging/vt6655/iwctl.c | 75 ++++++++++++++++++------------------ drivers/staging/vt6655/key.c | 14 +++---- drivers/staging/vt6655/power.c | 2 +- drivers/staging/vt6655/rxtx.c | 2 +- drivers/staging/vt6655/wcmd.c | 18 ++++----- drivers/staging/vt6655/wmgr.c | 22 +++++------ 10 files changed, 125 insertions(+), 122 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index fdeb80557769..ac49fbacec9d 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -2090,6 +2090,6 @@ void CARDvUpdateNextTBTT(void __iomem *dwIoBase, QWORD qwTSF, unsigned short wBe VNSvOutPortD(dwIoBase + MAC_REG_NEXTTBTT, LODWORD(qwTSF)); VNSvOutPortD(dwIoBase + MAC_REG_NEXTTBTT + 4, HIDWORD(qwTSF)); MACvRegBitsOn(dwIoBase, MAC_REG_TFTCTL, TFTCTL_TBTTSYNCEN); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Card:Update Next TBTT[%8xh:%8xh] \n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Card:Update Next TBTT[%8xh:%8xh]\n", (unsigned int) HIDWORD(qwTSF), (unsigned int) LODWORD(qwTSF)); } diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 56fdb4652175..d72c42249c7c 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -818,7 +818,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) pDevice = (PSDevice) netdev_priv(dev); if (dev == NULL) { - printk(KERN_ERR DEVICE_NAME ": allocate net device failed \n"); + printk(KERN_ERR DEVICE_NAME ": allocate net device failed\n"); return -ENOMEM; } @@ -967,11 +967,11 @@ static void device_print_info(PSDevice pDevice) DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "%s: MAC=%pM", dev->name, dev->dev_addr); #ifdef IO_MAP DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IO=0x%lx ", (unsigned long)pDevice->ioaddr); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d \n", pDevice->dev->irq); + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d\n", pDevice->dev->irq); #else DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IO=0x%lx Mem=0x%lx ", (unsigned long)pDevice->ioaddr, (unsigned long)pDevice->PortOffset); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d \n", pDevice->dev->irq); + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d\n", pDevice->dev->irq); #endif } @@ -1514,7 +1514,7 @@ static int device_tx_srv(PSDevice pDevice, unsigned int uIdx) { if ((pTD->pTDInfo->byFlags & TD_FLAGS_PRIV_SKB) != 0) { if (pDevice->bEnableHostapd) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "tx call back netif.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "tx call back netif..\n"); skb = pTD->pTDInfo->skb; skb->dev = pDevice->apdev; skb_reset_mac_header(skb); @@ -1736,7 +1736,7 @@ static int device_open(struct net_device *dev) { } pDevice->flags |= DEVICE_FLAGS_OPENED; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_open success.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_open success..\n"); return 0; } @@ -1788,7 +1788,7 @@ static int device_close(struct net_device *dev) { //2008-0714-01by chester device_release_WPADEV(pDevice); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close..\n"); return 0; } @@ -1895,7 +1895,7 @@ bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeI else pDevice->byPreambleType = PREAMBLE_LONG; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dma0: pDevice->wCurrentRate = %d \n", pDevice->wCurrentRate); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dma0: pDevice->wCurrentRate = %d\n", pDevice->wCurrentRate); if (pDevice->wCurrentRate <= RATE_11M) { byPktType = PK_TYPE_11B; @@ -2038,7 +2038,7 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { } if (!bNodeExist) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "Unknown STA not found in node DB \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "Unknown STA not found in node DB\n"); dev_kfree_skb_irq(skb); spin_unlock_irq(&pDevice->lock); return 0; @@ -2076,9 +2076,9 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { } } else if (pDevice->pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { pbyBSSID = pDevice->sTxEthHeader.abyDstAddr; //TO_DS = 0 and FROM_DS = 0 --> 802.11 MAC Address1 - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "IBSS Serach Key: \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "IBSS Serach Key:\n"); for (ii = 0; ii < 6; ii++) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "%x \n", *(pbyBSSID+ii)); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "%x\n", *(pbyBSSID+ii)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_DEBUG "\n"); // get pairwise key @@ -2358,7 +2358,7 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { MACvWriteISR(pDevice->PortOffset, pDevice->dwIsr); if (pDevice->dwIsr & ISR_FETALERR) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " ISR_FETALERR \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " ISR_FETALERR\n"); VNSvOutPortB(pDevice->PortOffset + MAC_REG_SOFTPWRCTL, 0); VNSvOutPortW(pDevice->PortOffset + MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPECTI); device_error(pDevice, pDevice->dwIsr); @@ -2784,13 +2784,13 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { // Set desired station name case SIOCSIWNICKN: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWNICKN \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWNICKN\n"); rc = -EOPNOTSUPP; break; // Get current station name case SIOCGIWNICKN: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWNICKN \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWNICKN\n"); rc = -EOPNOTSUPP; break; @@ -2886,12 +2886,12 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { // Get the current Tx-Power case SIOCGIWTXPOW: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWTXPOW \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWTXPOW\n"); rc = -EOPNOTSUPP; break; case SIOCSIWTXPOW: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWTXPOW \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWTXPOW\n"); rc = -EOPNOTSUPP; break; @@ -2934,7 +2934,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { break; case SIOCSIWSENS: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSENS \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSENS\n"); rc = -EOPNOTSUPP; break; @@ -2958,49 +2958,50 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { // Set the spy list case SIOCSIWSPY: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSPY \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSPY\n"); rc = -EOPNOTSUPP; break; // Get the spy list case SIOCGIWSPY: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSPY \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSPY\n"); rc = -EOPNOTSUPP; break; #endif // WIRELESS_SPY case SIOCGIWPRIV: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPRIV \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPRIV\n"); rc = -EOPNOTSUPP; break; //2008-0409-07, by Einsn Liu #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT case SIOCSIWAUTH: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAUTH \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAUTH\n"); rc = iwctl_siwauth(dev, NULL, &(wrq->u.param), NULL); break; case SIOCGIWAUTH: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAUTH \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAUTH\n"); rc = iwctl_giwauth(dev, NULL, &(wrq->u.param), NULL); break; case SIOCSIWGENIE: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWGENIE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWGENIE\n"); rc = iwctl_siwgenie(dev, NULL, &(wrq->u.data), wrq->u.data.pointer); break; case SIOCGIWGENIE: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWGENIE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWGENIE\n"); rc = iwctl_giwgenie(dev, NULL, &(wrq->u.data), wrq->u.data.pointer); break; case SIOCSIWENCODEEXT: { char extra[sizeof(struct iw_encode_ext)+MAX_KEY_LEN+1]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWENCODEEXT \n"); + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWENCODEEXT\n"); if (wrq->u.encoding.pointer) { memset(extra, 0, sizeof(struct iw_encode_ext)+MAX_KEY_LEN + 1); if (wrq->u.encoding.length > (sizeof(struct iw_encode_ext) + MAX_KEY_LEN)) { @@ -3020,12 +3021,12 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { break; case SIOCGIWENCODEEXT: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWENCODEEXT \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWENCODEEXT\n"); rc = iwctl_giwencodeext(dev, NULL, &(wrq->u.encoding), NULL); break; case SIOCSIWMLME: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMLME \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMLME\n"); rc = iwctl_siwmlme(dev, NULL, &(wrq->u.data), wrq->u.data.pointer); break; diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 5b2ace2755d2..ac588cb8fb22 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -341,7 +341,7 @@ device_receive_frame( // Min (ACK): 10HD +4CRC + 2Padding + 4Len + 8TSF + 4RSR if ((FrameSize > 2364) || (FrameSize <= 32)) { // Frame Size error drop this packet. - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---------- WRONG Length 1 \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---------- WRONG Length 1\n"); return false; } @@ -359,7 +359,7 @@ device_receive_frame( if ((FrameSize > 2346)|(FrameSize < 14)) { // Max: 2312Payload + 30HD +4CRC // Min: 14 bytes ACK - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---------- WRONG Length 2 \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---------- WRONG Length 2\n"); return false; } //PLICE_DEBUG-> @@ -671,7 +671,7 @@ device_receive_frame( wEtherType = (skb->data[cbIVOffset + 4 + 24 + 6] << 8) | skb->data[cbIVOffset + 4 + 24 + 6 + 1]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wEtherType = %04x \n", wEtherType); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wEtherType = %04x\n", wEtherType); if (wEtherType == ETH_P_PAE) { skb->dev = pDevice->apdev; @@ -1179,7 +1179,8 @@ static bool s_bHostWepRxEncryption( if (byDecMode == KEY_CTL_WEP) { // handle WEP - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "byDecMode == KEY_CTL_WEP \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "byDecMode == KEY_CTL_WEP\n"); + if ((pDevice->byLocalID <= REV_ID_VT3253_A1) || (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == true) || !bOnFly) { @@ -1218,7 +1219,7 @@ static bool s_bHostWepRxEncryption( // Software TKIP // 1. 3253 A // 2. NotOnFly - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "soft KEY_CTL_TKIP \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "soft KEY_CTL_TKIP\n"); pMACHeader = (PS802_11Header)(pbyFrame); TKIPvMixKey(pKey->abyKey, pMACHeader->abyAddr2, *pwRxTSC15_0, *pdwRxTSC47_16, pDevice->abyPRNG); rc4_init(&pDevice->SBox, pDevice->abyPRNG, TKIP_KEY_LEN); @@ -1280,7 +1281,7 @@ static bool s_bAPModeRxData( // if any node in PS mode, buffer packet until DTIM. if (skbcpy == NULL) { - DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "relay multicast no skb available \n"); + DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "relay multicast no skb available\n"); } else { skbcpy->dev = pDevice->dev; skbcpy->len = FrameSize; diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c index 4cf85f3ab2a7..f105c2ac091b 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c @@ -256,8 +256,8 @@ static int hostap_add_sta(PSDevice pDevice, pMgmt->sNodeDBTable[uNodeIndex].ulLastRxJiffer = jiffies; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Add STA AID= %d \n", pMgmt->sNodeDBTable[uNodeIndex].wAID); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Add STA AID= %d\n", pMgmt->sNodeDBTable[uNodeIndex].wAID); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", param->sta_addr[0], param->sta_addr[1], param->sta_addr[2], @@ -265,7 +265,7 @@ static int hostap_add_sta(PSDevice pDevice, param->sta_addr[4], param->sta_addr[5] ); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Max Support rate = %d \n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Max Support rate = %d\n", pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate); return 0; @@ -323,7 +323,7 @@ static int hostap_set_flags_sta(PSDevice pDevice, if (BSSDBbIsSTAInNodeDB(pMgmt, 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", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " dwFlags = %x\n", (unsigned int)pMgmt->sNodeDBTable[uNodeIndex].dwFlags); } else { return -ENOENT; @@ -362,7 +362,7 @@ static int hostap_set_generic_element(PSDevice pDevice, // disable wpa if (pMgmt->wWPAIELen == 0) { pMgmt->eAuthenMode = WMAC_AUTH_OPEN; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " No WPAIE, Disable WPA \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " No WPAIE, Disable WPA\n"); } else { // enable wpa if ((pMgmt->abyWPAIE[0] == WLAN_EID_RSN_WPA) || @@ -447,8 +447,8 @@ static int hostap_set_encryption(PSDevice pDevice, return -EINVAL; } } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: sta_index %d \n", iNodeIndex); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: alg %d \n", param->u.crypt.alg); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: sta_index %d\n", iNodeIndex); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: alg %d\n", param->u.crypt.alg); if (param->u.crypt.alg == WPA_ALG_NONE) { if (pMgmt->sNodeDBTable[iNodeIndex].bOnFly) { @@ -456,7 +456,7 @@ static int hostap_set_encryption(PSDevice pDevice, param->sta_addr, pMgmt->sNodeDBTable[iNodeIndex].dwKeyIndex, pDevice->PortOffset)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybRemoveKey fail \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybRemoveKey fail\n"); } pMgmt->sNodeDBTable[iNodeIndex].bOnFly = false; } @@ -601,10 +601,10 @@ static int hostap_set_encryption(PSDevice pDevice, MACvSetDefaultKeyCtl(pDevice->PortOffset, wKeyCtl, MAX_KEY_TABLE-1, pDevice->byLocalID); } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Set key sta_index= %d \n", iNodeIndex); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " tx_index=%d len=%d \n", param->u.crypt.idx, + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Set key sta_index= %d\n", iNodeIndex); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " tx_index=%d len=%d\n", param->u.crypt.idx, param->u.crypt.key_len); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " key=%x-%x-%x-%x-%x-xxxxx \n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " key=%x-%x-%x-%x-%x-xxxxx\n", pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[0], pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[1], pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[2], @@ -696,62 +696,62 @@ int vt6655_hostap_ioctl(PSDevice pDevice, struct iw_point *p) switch (param->cmd) { case VIAWGET_HOSTAPD_SET_ENCRYPTION: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ENCRYPTION \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ENCRYPTION\n"); spin_lock_irq(&pDevice->lock); ret = hostap_set_encryption(pDevice, param, p->length); spin_unlock_irq(&pDevice->lock); break; case VIAWGET_HOSTAPD_GET_ENCRYPTION: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_ENCRYPTION \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_ENCRYPTION\n"); spin_lock_irq(&pDevice->lock); ret = hostap_get_encryption(pDevice, param, p->length); spin_unlock_irq(&pDevice->lock); break; case VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR\n"); ret = -EOPNOTSUPP; goto out; case VIAWGET_HOSTAPD_FLUSH: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_FLUSH \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_FLUSH\n"); spin_lock_irq(&pDevice->lock); hostap_flush_sta(pDevice); spin_unlock_irq(&pDevice->lock); break; case VIAWGET_HOSTAPD_ADD_STA: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_ADD_STA \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_ADD_STA\n"); spin_lock_irq(&pDevice->lock); ret = hostap_add_sta(pDevice, param); spin_unlock_irq(&pDevice->lock); break; case VIAWGET_HOSTAPD_REMOVE_STA: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_REMOVE_STA \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_REMOVE_STA\n"); spin_lock_irq(&pDevice->lock); ret = hostap_remove_sta(pDevice, param); spin_unlock_irq(&pDevice->lock); break; case VIAWGET_HOSTAPD_GET_INFO_STA: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_INFO_STA \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_INFO_STA\n"); ret = hostap_get_info_sta(pDevice, param); ap_ioctl = 1; break; case VIAWGET_HOSTAPD_SET_FLAGS_STA: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_FLAGS_STA \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_FLAGS_STA\n"); ret = hostap_set_flags_sta(pDevice, param); break; case VIAWGET_HOSTAPD_MLME: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_MLME \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_MLME\n"); ret = -EOPNOTSUPP; goto out; case VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT\n"); ret = hostap_set_generic_element(pDevice, param); break; case VIAWGET_HOSTAPD_SCAN_REQ: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SCAN_REQ \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SCAN_REQ\n"); ret = -EOPNOTSUPP; goto out; case VIAWGET_HOSTAPD_STA_CLEAR_STATS: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_STA_CLEAR_STATS \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_STA_CLEAR_STATS\n"); ret = -EOPNOTSUPP; goto out; default: diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index d449fcb17395..06ddb8556210 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -108,7 +108,7 @@ static int iwctl_commit(struct net_device *dev, void *wrq, char *extra) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWCOMMIT \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWCOMMIT\n"); return 0; } @@ -140,7 +140,7 @@ static int iwctl_siwscan(struct net_device *dev, unsigned char abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; PWLAN_IE_SSID pItemSSID = NULL; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSCAN \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSCAN\n"); if (pDevice->byReAssocCount > 0) { //reject scan when re-associating! //send scan event to wpa_Supplicant @@ -210,7 +210,7 @@ static int iwctl_giwscan(struct net_device *dev, long ldBm; char buf[MAX_WPA_IE_LEN * 2 + 30]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSCAN \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSCAN\n"); if (pMgmt->eScanState == WMAC_IS_SCANNING) { // In scanning.. @@ -353,7 +353,7 @@ int iwctl_siwfreq(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); int rc = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFREQ \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFREQ\n"); // If setting by frequency, convert to a channel if ((wrq->e == 1) && @@ -401,7 +401,7 @@ int iwctl_giwfreq(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFREQ \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFREQ\n"); #ifdef WEXT_USECHANNELS wrq->m = (int)pMgmt->uCurrChannel; @@ -433,10 +433,10 @@ int iwctl_siwmode(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); int rc = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMODE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWMODE\n"); if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP && pDevice->bEnableHostapd) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Can't set operation mode, hostapd is running \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Can't set operation mode, hostapd is running\n"); return rc; } @@ -448,7 +448,7 @@ int iwctl_siwmode(struct net_device *dev, pDevice->bCommit = true; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to ad-hoc \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to ad-hoc\n"); break; case IW_MODE_AUTO: case IW_MODE_INFRA: @@ -458,7 +458,7 @@ int iwctl_siwmode(struct net_device *dev, pDevice->bCommit = true; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to infrastructure \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to infrastructure\n"); break; case IW_MODE_MASTER: @@ -472,7 +472,7 @@ int iwctl_siwmode(struct net_device *dev, pDevice->bCommit = true; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to Access Point \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set mode to Access Point\n"); break; case IW_MODE_REPEAT: @@ -498,7 +498,7 @@ int iwctl_giwmode(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWMODE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWMODE\n"); // If not managed, assume it's ad-hoc switch (pMgmt->eConfigMode) { case WMAC_CONFIG_ESS_STA: @@ -533,7 +533,7 @@ int iwctl_giwrange(struct net_device *dev, int i, k; unsigned char abySupportedRates[13] = {0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x90}; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRANGE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRANGE\n"); if (wrq->pointer) { wrq->length = sizeof(struct iw_range); memset(range, 0, sizeof(struct iw_range)); @@ -640,7 +640,7 @@ int iwctl_siwap(struct net_device *dev, int rc = 0; unsigned char ZeroBSSID[WLAN_BSSID_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAP \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAP\n"); if (pMgmt->eScanState == WMAC_IS_SCANNING) { // In scanning.. printk("SIOCSIWAP(??)-->In scanning...\n"); @@ -697,7 +697,7 @@ int iwctl_giwap(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAP \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWAP\n"); memcpy(wrq->sa_data, pMgmt->abyCurrBSSID, 6); //2008-0410, by Einsn Liu @@ -800,7 +800,7 @@ int iwctl_siwessid(struct net_device *dev, //2008-0409-05, by Einsn Liu unsigned char len; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWESSID \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWESSID\n"); pDevice->fWPA_Authened = false; if (pMgmt->eScanState == WMAC_IS_SCANNING) { // In scanning.. @@ -811,7 +811,7 @@ int iwctl_siwessid(struct net_device *dev, // Just send an empty SSID list memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); memset(pMgmt->abyDesireBSSID, 0xFF, 6); - PRINT_K("set essid to 'any' \n"); + PRINT_K("set essid to 'any'\n"); #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT return 0; #endif @@ -827,7 +827,7 @@ int iwctl_siwessid(struct net_device *dev, pItemSSID->len = wrq->length - 1; } else pItemSSID->len = wrq->length; - printk("set essid to %s \n", pItemSSID->abySSID); + printk("set essid to %s\n", pItemSSID->abySSID); //2008-0409-05, by Einsn Liu len = (pItemSSID->len > ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) ? pItemSSID->len : ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len; if ((pDevice->bLinkPass == true) && @@ -885,7 +885,7 @@ int iwctl_siwessid(struct net_device *dev, } #endif - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set essid = %s \n", pItemSSID->abySSID); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "set essid = %s\n", pItemSSID->abySSID); } if (pDevice->flags & DEVICE_FLAGS_OPENED) @@ -907,7 +907,7 @@ int iwctl_giwessid(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PWLAN_IE_SSID pItemSSID; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWESSID \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWESSID\n"); // Note : if wrq->u.data.flags != 0, we should // get the relevant SSID from the SSID list... @@ -939,7 +939,7 @@ int iwctl_siwrate(struct net_device *dev, int i; unsigned char abySupportedRates[13] = {0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x90}; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRATE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRATE\n"); if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) { rc = -EINVAL; return rc; @@ -993,7 +993,7 @@ int iwctl_siwrate(struct net_device *dev, pDevice->uConnectionRate = 3; } else { pDevice->uConnectionRate = brate; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Fixed to Rate %d \n", pDevice->uConnectionRate); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Fixed to Rate %d\n", pDevice->uConnectionRate); } } else { @@ -1019,7 +1019,7 @@ int iwctl_giwrate(struct net_device *dev, //Mark the unnecessary sentences. // PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRATE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRATE\n"); { unsigned char abySupportedRates[13] = {0x02, 0x04, 0x0B, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x90}; int brate = 0; @@ -1062,7 +1062,7 @@ int iwctl_siwrts(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); int rc = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRTS \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRTS\n"); { int rthr = wrq->value; @@ -1090,7 +1090,7 @@ int iwctl_giwrts(struct net_device *dev, { PSDevice pDevice = (PSDevice)netdev_priv(dev); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRTS \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRTS\n"); wrq->value = pDevice->wRTSThreshold; wrq->disabled = (wrq->value >= 2312); wrq->fixed = 1; @@ -1111,7 +1111,7 @@ int iwctl_siwfrag(struct net_device *dev, int rc = 0; int fthr = wrq->value; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFRAG \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWFRAG\n"); if (wrq->disabled) fthr = 2312; @@ -1136,7 +1136,7 @@ int iwctl_giwfrag(struct net_device *dev, { PSDevice pDevice = (PSDevice)netdev_priv(dev); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFRAG \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWFRAG\n"); wrq->value = pDevice->wFragmentationThreshold; wrq->disabled = (wrq->value >= 2312); wrq->fixed = 1; @@ -1155,7 +1155,7 @@ int iwctl_siwretry(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); int rc = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRETRY \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWRETRY\n"); if (wrq->disabled) { rc = -EINVAL; @@ -1188,7 +1188,8 @@ int iwctl_giwretry(struct net_device *dev, char *extra) { PSDevice pDevice = (PSDevice)netdev_priv(dev); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRETRY \n"); + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWRETRY\n"); wrq->disabled = 0; // Can't be disabled // Note : by default, display the min retry number @@ -1233,7 +1234,7 @@ int iwctl_siwencode(struct net_device *dev, PSKeyTable pkeytab; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWENCODE \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWENCODE\n"); if ((wrq->flags & IW_ENCODE_DISABLED) == 0) { //Not disable encryption @@ -1413,7 +1414,7 @@ int iwctl_siwpower(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); int rc = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER\n"); if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) { rc = -EINVAL; @@ -1435,14 +1436,14 @@ int iwctl_siwpower(struct net_device *dev, } switch (wrq->flags & IW_POWER_MODE) { case IW_POWER_UNICAST_R: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_UNICAST_R \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_UNICAST_R\n"); rc = -EINVAL; break; case IW_POWER_ALL_R: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ALL_R \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ALL_R\n"); rc = -EINVAL; case IW_POWER_ON: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ON \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_ON\n"); break; default: rc = -EINVAL; @@ -1463,7 +1464,7 @@ int iwctl_giwpower(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); int mode = pDevice->ePSMode; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPOWER \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPOWER\n"); wrq->disabled = (mode == WMAC_POWER_CAM); if (wrq->disabled) @@ -1492,7 +1493,7 @@ int iwctl_giwsens(struct net_device *dev, PSDevice pDevice = (PSDevice)netdev_priv(dev); long ldBm; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSENS \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSENS\n"); if (pDevice->bLinkPass == true) { RFvRSSITodBm(pDevice, (unsigned char)(pDevice->uCurrRSSI), &ldBm); wrq->value = ldBm; @@ -1519,7 +1520,7 @@ int iwctl_siwauth(struct net_device *dev, static int wpa_version = 0; //must be static to save the last value,einsn liu static int pairwise = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAUTH \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAUTH\n"); switch (wrq->flags & IW_AUTH_INDEX) { case IW_AUTH_WPA_VERSION: wpa_version = wrq->value; @@ -1694,7 +1695,7 @@ int iwctl_siwencodeext(struct net_device *dev, u8 key_array[64]; int ret = 0; - PRINT_K("SIOCSIWENCODEEXT...... \n"); + PRINT_K("SIOCSIWENCODEEXT......\n"); param = kzalloc(sizeof(*param), GFP_KERNEL); if (param == NULL) diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index 27f97bc607e7..9339e2a4073a 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -134,7 +134,7 @@ bool KeybGetKey( { int i; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybGetKey() \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybGetKey()\n"); *pKey = NULL; for (i = 0; i < MAX_KEY_TABLE; i++) { @@ -252,7 +252,7 @@ bool KeybSetKey( pKey->dwTSC47_16 = 0; pKey->wTSC15_0 = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R): \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R):\n"); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->bKeyValid: %d\n ", pKey->bKeyValid); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->abyKey: "); for (ii = 0; ii < pKey->uKeyLength; ii++) @@ -315,7 +315,7 @@ bool KeybSetKey( pKey->dwTSC47_16 = 0; pKey->wTSC15_0 = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(N): \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(N):\n"); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->bKeyValid: %d\n ", pKey->bKeyValid); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->abyKey: "); @@ -617,7 +617,7 @@ bool KeybSetDefaultKey( PSKeyItem pKey; unsigned int uKeyIdx; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enter KeybSetDefaultKey: %1x, %d \n", (int)dwKeyIndex, (int)uKeyLength); + 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; @@ -676,10 +676,10 @@ bool KeybSetDefaultKey( pKey->dwTSC47_16 = 0; pKey->wTSC15_0 = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R): \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R):\n"); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->bKeyValid: %d\n", pKey->bKeyValid); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->uKeyLength: %d\n", (int)pKey->uKeyLength); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->abyKey: \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->abyKey:\n"); for (ii = 0; ii < pKey->uKeyLength; ii++) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%x", pKey->abyKey[ii]); @@ -771,7 +771,7 @@ bool KeybSetAllGroupKey( pKey->dwTSC47_16 = 0; pKey->wTSC15_0 = 0; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R): \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybSetKey(R):\n"); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->bKeyValid: %d\n ", pKey->bKeyValid); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pKey->abyKey: "); diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index a6e48c7ed4ad..e41d3bc51377 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -113,7 +113,7 @@ PSvEnablePowerSaving( PSbSendNullPacket(pDevice); pDevice->bPWBitOn = true; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable... \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable...\n"); } /*+ diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 092b918d0c1d..d94798b9edfe 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -2575,7 +2575,7 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, unsigned char *pbMPDU, un } } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "vDMA0_tx_80211: p80211Header->sA3.wFrameCtl = %x \n", p80211Header->sA3.wFrameCtl); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "vDMA0_tx_80211: p80211Header->sA3.wFrameCtl = %x\n", p80211Header->sA3.wFrameCtl); //Set packet type if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000 diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index 8196321ccd31..049bdab78452 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -216,9 +216,9 @@ s_vProbeChannel( if (pTxPacket != NULL) { for (ii = 0; ii < 2; ii++) { if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request sending fail.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request sending fail..\n"); else - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request is sending.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe request is sending..\n"); } } } @@ -367,7 +367,7 @@ vCommandTimer( } else { //2008-8-4 by chester if (!is_channel_valid(pMgmt->uScanChannel)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Invalid channel pMgmt->uScanChannel = %d \n", pMgmt->uScanChannel); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Invalid channel pMgmt->uScanChannel = %d\n", pMgmt->uScanChannel); s_bCommandComplete(pDevice); spin_unlock_irq(&pDevice->lock); return; @@ -559,7 +559,7 @@ vCommandTimer( // start own IBSS 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); } @@ -571,7 +571,7 @@ vCommandTimer( // start own IBSS 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); if (netif_queue_stopped(pDevice->dev)) @@ -691,7 +691,7 @@ vCommandTimer( vMgrCreateOwnIBSS((void *)pDevice, &Status); if (Status != CMD_STATUS_SUCCESS) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " vMgrCreateOwnIBSS fail ! \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " vMgrCreateOwnIBSS fail !\n"); // alway turn off unicast bit MACvRegBitsOff(pDevice->PortOffset, MAC_REG_RCR, RCR_UNICAST); @@ -718,7 +718,7 @@ vCommandTimer( pDevice->bMoreData = true; } if (!device_dma0_xmit(pDevice, skb, 0)) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Multicast ps tx fail \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Multicast ps tx fail\n"); pMgmt->sNodeDBTable[0].wEnQueueCnt--; } @@ -740,7 +740,7 @@ vCommandTimer( pDevice->bMoreData = true; } if (!device_dma0_xmit(pDevice, skb, ii)) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "sta ps tx fail \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "sta ps tx fail\n"); pMgmt->sNodeDBTable[ii].wEnQueueCnt--; // check if sta ps enabled, and wait next pspoll. @@ -752,7 +752,7 @@ vCommandTimer( // clear tx map pMgmt->abyPSTxMap[pMgmt->sNodeDBTable[ii].wAID >> 3] &= ~byMask[pMgmt->sNodeDBTable[ii].wAID & 7]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Index=%d PS queue clear \n", ii); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Index=%d PS queue clear\n", ii); } pMgmt->sNodeDBTable[ii].bRxPSPoll = false; } diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index fa7291517281..c02b59d088cc 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -720,8 +720,8 @@ s_vMgrRxAssocRequest( if (!pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble) pDevice->bBarkerPreambleMd = true; - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Associate AID= %d \n", wAssocAID); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n", + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Associate AID= %d\n", wAssocAID); + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", sFrame.pHdr->sA3.abyAddr2[0], sFrame.pHdr->sA3.abyAddr2[1], sFrame.pHdr->sA3.abyAddr2[2], @@ -729,7 +729,7 @@ s_vMgrRxAssocRequest( sFrame.pHdr->sA3.abyAddr2[4], sFrame.pHdr->sA3.abyAddr2[5] ); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d \n", + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d\n", pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate); } else { /* TODO: received STA under state1 handle */ @@ -869,8 +869,8 @@ s_vMgrRxReAssocRequest( if (!pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble) pDevice->bBarkerPreambleMd = true; - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Rx ReAssociate AID= %d \n", wAssocAID); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n", + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Rx ReAssociate AID= %d\n", wAssocAID); + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", sFrame.pHdr->sA3.abyAddr2[0], sFrame.pHdr->sA3.abyAddr2[1], sFrame.pHdr->sA3.abyAddr2[2], @@ -878,7 +878,7 @@ s_vMgrRxReAssocRequest( sFrame.pHdr->sA3.abyAddr2[4], sFrame.pHdr->sA3.abyAddr2[5] ); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d \n", + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Max Support rate = %d\n", pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate); } @@ -1308,7 +1308,7 @@ s_vMgrRxAuthenSequence_1( if (pDevice->bEnableHostapd) return; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx.. \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx..\n"); if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Authreq_reply sequence_1 tx failed.\n"); } @@ -1965,7 +1965,7 @@ s_vMgrRxBeacon( } } -// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Beacon 2 \n"); +// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Beacon 2\n"); // check if CF field exists if (WLAN_GET_CAP_INFO_ESS(*sFrame.pwCapInfo)) { if (sFrame.pCFParms->wCFPDurRemaining > 0) { @@ -2116,7 +2116,7 @@ s_vMgrRxBeacon( // if other stations joined, indicate connection to upper layer.. if (pMgmt->eCurrState == WMAC_STATE_STARTED) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Current IBSS State: [Started]........to: [Jointed] \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Current IBSS State: [Started]........to: [Jointed]\n"); pMgmt->eCurrState = WMAC_STATE_JOINTED; pDevice->bLinkPass = true; if (netif_queue_stopped(pDevice->dev)) @@ -3965,13 +3965,13 @@ s_vMgrRxProbeResponse( (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_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe resp:Fail addr:[%p]\n", pRxPacket->p80211Header); DBG_PORT80(0xCC); return; } if (sFrame.pSSID->len == 0) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx Probe resp: SSID len = 0 \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx Probe resp: SSID len = 0\n"); if (sFrame.pDSParms != NULL) { if (byCurrChannel > CB_MAX_CHANNEL_24G) { -- cgit From 84b50762077e914348cc830d7b72bd2ee1030ced Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:18 +0200 Subject: staging: vt6655: fix function braces not on the proper line Function braces should be on a separate line. Reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 90 ++++++++++++++++++++++++------------ drivers/staging/vt6655/rxtx.c | 6 ++- 2 files changed, 64 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index d72c42249c7c..02c6fa9f1589 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -743,7 +743,8 @@ MACvStart(pDevice->PortOffset); netif_stop_queue(pDevice->dev); } -static void device_init_diversity_timer(PSDevice pDevice) { +static void device_init_diversity_timer(PSDevice pDevice) +{ init_timer(&pDevice->TimerSQ3Tmax1); pDevice->TimerSQ3Tmax1.data = (unsigned long) pDevice; pDevice->TimerSQ3Tmax1.function = (TimerFunction)TimerSQ3CallBack; @@ -999,7 +1000,8 @@ static void vt6655_init_info(struct pci_dev *pcid, PSDevice *ppDevice, spin_lock_init(&((*ppDevice)->lock)); } -static bool device_get_pci_info(PSDevice pDevice, struct pci_dev *pcid) { +static bool device_get_pci_info(PSDevice pDevice, struct pci_dev *pcid) +{ u16 pci_cmd; u8 b; unsigned int cis_addr; @@ -1046,7 +1048,8 @@ static bool device_get_pci_info(PSDevice pDevice, struct pci_dev *pcid) { return true; } -static void device_free_info(PSDevice pDevice) { +static void device_free_info(PSDevice pDevice) +{ PSDevice ptr; struct net_device *dev = pDevice->dev; @@ -1090,7 +1093,8 @@ static void device_free_info(PSDevice pDevice) { free_netdev(dev); } -static bool device_init_rings(PSDevice pDevice) { +static bool device_init_rings(PSDevice pDevice) +{ void *vir_pool; /*allocate all RD/TD rings a single pool*/ @@ -1181,7 +1185,8 @@ static bool device_init_rings(PSDevice pDevice) { return true; } -static void device_free_rings(PSDevice pDevice) { +static void device_free_rings(PSDevice pDevice) +{ pci_free_consistent(pDevice->pcid, pDevice->sOpts.nRxDescs0 * sizeof(SRxDesc) + pDevice->sOpts.nRxDescs1 * sizeof(SRxDesc) + @@ -1201,7 +1206,8 @@ static void device_free_rings(PSDevice pDevice) { ); } -static void device_init_rd0_ring(PSDevice pDevice) { +static void device_init_rd0_ring(PSDevice pDevice) +{ int i; dma_addr_t curr = pDevice->rd0_pool_dma; PSRxDesc pDesc; @@ -1225,7 +1231,8 @@ static void device_init_rd0_ring(PSDevice pDevice) { pDevice->pCurrRD[0] = &(pDevice->aRD0Ring[0]); } -static void device_init_rd1_ring(PSDevice pDevice) { +static void device_init_rd1_ring(PSDevice pDevice) +{ int i; dma_addr_t curr = pDevice->rd1_pool_dma; PSRxDesc pDesc; @@ -1249,7 +1256,8 @@ static void device_init_rd1_ring(PSDevice pDevice) { pDevice->pCurrRD[1] = &(pDevice->aRD1Ring[0]); } -static void device_init_defrag_cb(PSDevice pDevice) { +static void device_init_defrag_cb(PSDevice pDevice) +{ int i; PSDeFragControlBlock pDeF; @@ -1265,7 +1273,8 @@ static void device_init_defrag_cb(PSDevice pDevice) { pDevice->cbFreeDFCB = pDevice->cbDFCB; } -static void device_free_rd0_ring(PSDevice pDevice) { +static void device_free_rd0_ring(PSDevice pDevice) +{ int i; for (i = 0; i < pDevice->sOpts.nRxDescs0; i++) { @@ -1281,7 +1290,8 @@ static void device_free_rd0_ring(PSDevice pDevice) { } } -static void device_free_rd1_ring(PSDevice pDevice) { +static void device_free_rd1_ring(PSDevice pDevice) +{ int i; for (i = 0; i < pDevice->sOpts.nRxDescs1; i++) { @@ -1297,7 +1307,8 @@ static void device_free_rd1_ring(PSDevice pDevice) { } } -static void device_free_frag_buf(PSDevice pDevice) { +static void device_free_frag_buf(PSDevice pDevice) +{ PSDeFragControlBlock pDeF; int i; @@ -1310,7 +1321,8 @@ static void device_free_frag_buf(PSDevice pDevice) { } } -static void device_init_td0_ring(PSDevice pDevice) { +static void device_init_td0_ring(PSDevice pDevice) +{ int i; dma_addr_t curr; PSTxDesc pDesc; @@ -1334,7 +1346,8 @@ static void device_init_td0_ring(PSDevice pDevice) { pDevice->apTailTD[0] = pDevice->apCurrTD[0] = &(pDevice->apTD0Rings[0]); } -static void device_init_td1_ring(PSDevice pDevice) { +static void device_init_td1_ring(PSDevice pDevice) +{ int i; dma_addr_t curr; PSTxDesc pDesc; @@ -1359,7 +1372,8 @@ static void device_init_td1_ring(PSDevice pDevice) { pDevice->apTailTD[1] = pDevice->apCurrTD[1] = &(pDevice->apTD1Rings[0]); } -static void device_free_td0_ring(PSDevice pDevice) { +static void device_free_td0_ring(PSDevice pDevice) +{ int i; for (i = 0; i < pDevice->sOpts.nTxDescs[0]; i++) { @@ -1377,7 +1391,8 @@ static void device_free_td0_ring(PSDevice pDevice) { } } -static void device_free_td1_ring(PSDevice pDevice) { +static void device_free_td1_ring(PSDevice pDevice) +{ int i; for (i = 0; i < pDevice->sOpts.nTxDescs[1]; i++) { @@ -1397,7 +1412,8 @@ static void device_free_td1_ring(PSDevice pDevice) { /*-----------------------------------------------------------------*/ -static int device_rx_srv(PSDevice pDevice, unsigned int uIdx) { +static int device_rx_srv(PSDevice pDevice, unsigned int uIdx) +{ PSRxDesc pRD; int works = 0; @@ -1422,7 +1438,8 @@ static int device_rx_srv(PSDevice pDevice, unsigned int uIdx) { return works; } -static bool device_alloc_rx_buf(PSDevice pDevice, PSRxDesc pRD) { +static bool device_alloc_rx_buf(PSDevice pDevice, PSRxDesc pRD) +{ PDEVICE_RD_INFO pRDInfo = pRD->pRDInfo; pRDInfo->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); @@ -1442,7 +1459,8 @@ static bool device_alloc_rx_buf(PSDevice pDevice, PSRxDesc pRD) { return true; } -bool device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF) { +bool device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF) +{ pDeF->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); if (pDeF->skb == NULL) return false; @@ -1452,7 +1470,8 @@ bool device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF) { return true; } -static int device_tx_srv(PSDevice pDevice, unsigned int uIdx) { +static int device_tx_srv(PSDevice pDevice, unsigned int uIdx) +{ PSTxDesc pTD; bool bFull = false; int works = 0; @@ -1575,7 +1594,8 @@ static int device_tx_srv(PSDevice pDevice, unsigned int uIdx) { return works; } -static void device_error(PSDevice pDevice, unsigned short status) { +static void device_error(PSDevice pDevice, unsigned short status) +{ if (status & ISR_FETALERR) { DBG_PRT(MSG_LEVEL_ERR, KERN_ERR "%s: Hardware fatal error.\n", @@ -1589,7 +1609,8 @@ static void device_error(PSDevice pDevice, unsigned short status) { } } -static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc) { +static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc) +{ PDEVICE_TD_INFO pTDInfo = pDesc->pTDInfo; struct sk_buff *skb = pTDInfo->skb; @@ -1642,7 +1663,8 @@ static int MlmeThread( } #endif -static int device_open(struct net_device *dev) { +static int device_open(struct net_device *dev) +{ PSDevice pDevice = (PSDevice)netdev_priv(dev); int i; #ifdef WPA_SM_Transtatus @@ -1740,7 +1762,8 @@ static int device_open(struct net_device *dev) { return 0; } -static int device_close(struct net_device *dev) { +static int device_close(struct net_device *dev) +{ PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = pDevice->pMgmt; //PLICE_DEBUG-> @@ -1792,7 +1815,8 @@ static int device_close(struct net_device *dev) { return 0; } -static int device_dma0_tx_80211(struct sk_buff *skb, struct net_device *dev) { +static int device_dma0_tx_80211(struct sk_buff *skb, struct net_device *dev) +{ PSDevice pDevice = netdev_priv(dev); unsigned char *pbMPDU; unsigned int cbMPDULen = 0; @@ -1823,7 +1847,8 @@ static int device_dma0_tx_80211(struct sk_buff *skb, struct net_device *dev) { return 0; } -bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeIndex) { +bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeIndex) +{ PSMgmtObject pMgmt = pDevice->pMgmt; PSTxDesc pHeadTD, pLastTD; unsigned int cbFrameBodySize; @@ -1962,7 +1987,8 @@ bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeI } //TYPE_AC0DMA data tx -static int device_xmit(struct sk_buff *skb, struct net_device *dev) { +static int device_xmit(struct sk_buff *skb, struct net_device *dev) +{ PSDevice pDevice = netdev_priv(dev); PSMgmtObject pMgmt = pDevice->pMgmt; @@ -2314,7 +2340,8 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { return 0; } -static irqreturn_t device_intr(int irq, void *dev_instance) { +static irqreturn_t device_intr(int irq, void *dev_instance) +{ struct net_device *dev = dev_instance; PSDevice pDevice = (PSDevice)netdev_priv(dev); @@ -2653,7 +2680,8 @@ error1: return result; } -static void device_set_multi(struct net_device *dev) { +static void device_set_multi(struct net_device *dev) +{ PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = pDevice->pMgmt; @@ -2698,13 +2726,15 @@ static void device_set_multi(struct net_device *dev) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode = %x\n", pDevice->byRxMode); } -static struct net_device_stats *device_get_stats(struct net_device *dev) { +static struct net_device_stats *device_get_stats(struct net_device *dev) +{ PSDevice pDevice = (PSDevice)netdev_priv(dev); return &pDevice->stats; } -static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { +static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) +{ PSDevice pDevice = (PSDevice)netdev_priv(dev); struct iwreq *wrq = (struct iwreq *)rq; diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index d94798b9edfe..0d45aa076fed 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -2051,7 +2051,8 @@ vGenerateMACHeader( pMACHeader->wFrameCtl |= FC_MOREFRAG; } -CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { +CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) +{ PSTxDesc pFrstTD; unsigned char byPktType; unsigned char *pbyTxBufferAddr; @@ -2337,7 +2338,8 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { return CMD_STATUS_PENDING; } -CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { +CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) +{ unsigned char byPktType; unsigned char *pbyBuffer = (unsigned char *)pDevice->tx_beacon_bufs; unsigned int cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN; -- cgit From b69ee55b4cdf7a80b416d723d8c347135aabf815 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:19 +0200 Subject: staging: vt6655: fix braces at newline for structs For structs definitions, the braces should be at the end of the line. Reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/bssdb.h | 3 +-- drivers/staging/vt6655/device.h | 15 +++++---------- drivers/staging/vt6655/key.h | 9 +++------ drivers/staging/vt6655/wmgr.h | 12 ++++-------- 4 files changed, 13 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index 9337afe51028..bf299e3b8acf 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -69,8 +69,7 @@ // IEEE 802.11 Structures and definitions // -typedef enum _NDIS_802_11_NETWORK_TYPE -{ +typedef enum _NDIS_802_11_NETWORK_TYPE { Ndis802_11FH, Ndis802_11DS, Ndis802_11OFDM5, diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index f33ecf065223..7c7fec4810c9 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -201,8 +201,7 @@ typedef enum __device_init_type { // PMKID Structures typedef unsigned char NDIS_802_11_PMKID_VALUE[16]; -typedef enum _NDIS_802_11_WEP_STATUS -{ +typedef enum _NDIS_802_11_WEP_STATUS { Ndis802_11WEPEnabled, Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, Ndis802_11WEPDisabled, @@ -218,8 +217,7 @@ typedef enum _NDIS_802_11_WEP_STATUS } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; -typedef enum _NDIS_802_11_STATUS_TYPE -{ +typedef enum _NDIS_802_11_STATUS_TYPE { Ndis802_11StatusType_Authentication, Ndis802_11StatusType_MediaStreamMode, Ndis802_11StatusType_PMKID_CandidateList, @@ -232,8 +230,7 @@ struct pmkid_candidate { unsigned long Flags; }; -typedef struct _BSSID_INFO -{ +typedef struct _BSSID_INFO { NDIS_802_11_MAC_ADDRESS BSSID; NDIS_802_11_PMKID_VALUE PMKID; } BSSID_INFO, *PBSSID_INFO; @@ -293,8 +290,7 @@ typedef struct tagSCache { #define CB_MAX_RX_FRAG 64 // DeFragment Control Block, used for collecting fragments prior to reassembly -typedef struct tagSDeFragControlBlock -{ +typedef struct tagSDeFragControlBlock { unsigned short wSequence; unsigned short wFragNum; unsigned char abyAddr2[ETH_ALEN]; @@ -334,8 +330,7 @@ typedef struct tagSDeFragControlBlock //PLICE_DEBUG-> -typedef struct _RxManagementQueue -{ +typedef struct _RxManagementQueue { int packet_num; int head, tail; PSRxMgmtPacket Q[NUM]; diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index 4eee19277312..3eb881b69a55 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -53,8 +53,7 @@ #define KEY_CTL_CCMP 0x03 #define KEY_CTL_INVALID 0xFF -typedef struct tagSKeyItem -{ +typedef struct tagSKeyItem { bool bKeyValid; unsigned long uKeyLength; unsigned char abyKey[MAX_KEY_LEN]; @@ -67,8 +66,7 @@ typedef struct tagSKeyItem void *pvKeyTable; } SKeyItem, *PSKeyItem; //64 -typedef struct tagSKeyTable -{ +typedef struct tagSKeyTable { unsigned char abyBSSID[ETH_ALEN]; //6 unsigned char byReserved0[2]; //8 SKeyItem PairwiseKey; @@ -82,8 +80,7 @@ typedef struct tagSKeyTable unsigned char byReserved1[6]; } SKeyTable, *PSKeyTable; //348 -typedef struct tagSKeyManagement -{ +typedef struct tagSKeyManagement { SKeyTable KeyTable[MAX_KEY_TABLE]; } SKeyManagement, *PSKeyManagement; diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index 2312d71bac43..a71daed7fa0b 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -83,22 +83,19 @@ typedef void (*TimerFunction)(unsigned long); //+++ NDIS related typedef unsigned char NDIS_802_11_MAC_ADDRESS[6]; -typedef struct _NDIS_802_11_AI_REQFI -{ +typedef struct _NDIS_802_11_AI_REQFI { 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 -{ +typedef struct _NDIS_802_11_AI_RESFI { 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 -{ +typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION { unsigned long Length; unsigned short AvailableRequestFixedIEs; NDIS_802_11_AI_REQFI RequestFixedIEs; @@ -187,8 +184,7 @@ typedef struct tagSRxMgmtPacket { unsigned char byRxChannel; } SRxMgmtPacket, *PSRxMgmtPacket; -typedef struct tagSMgmtObject -{ +typedef struct tagSMgmtObject { void *pAdapter; // MAC address unsigned char abyMACAddr[WLAN_ADDR_LEN]; -- cgit From 5f742c7b98f38fbda19b4e8cc114e6878c7c3fbb Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:20 +0200 Subject: staging: vt6655: fix static position in inline function This should be "static inline", not "inline static". Reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index 7c7fec4810c9..a707984e4516 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -778,7 +778,7 @@ inline static void EnQueue(PSDevice pDevice, PSRxMgmtPacket pRxMgmtPacket) } } -inline static PSRxMgmtPacket DeQueue(PSDevice pDevice) +static inline PSRxMgmtPacket DeQueue(PSDevice pDevice) { PSRxMgmtPacket pRxMgmtPacket; @@ -800,7 +800,7 @@ void InitRxManagementQueue(PSDevice pDevice); //PLICE_DEBUG<- -inline static bool device_get_ip(PSDevice pInfo) { +static inline bool device_get_ip(PSDevice pInfo) { struct in_device *in_dev = (struct in_device *)pInfo->dev->ip_ptr; struct in_ifaddr *ifa; -- cgit From 941ead9adf195395d75eabb0cec15311bf5c5959 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:21 +0200 Subject: staging: vt6655: Use pr_* functions instead of printk Lots of printk are used in vt6655, replace them with the pr_* equivalent. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.c | 12 +++--- drivers/staging/vt6655/device_cfg.h | 2 +- drivers/staging/vt6655/device_main.c | 71 ++++++++++++++++++------------------ drivers/staging/vt6655/ioctl.c | 8 ++-- drivers/staging/vt6655/iwctl.c | 16 ++++---- drivers/staging/vt6655/vntwifi.c | 2 +- drivers/staging/vt6655/wcmd.c | 11 +++--- drivers/staging/vt6655/wmgr.c | 9 +++-- drivers/staging/vt6655/wpactl.c | 4 +- 9 files changed, 69 insertions(+), 66 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index ac49fbacec9d..58d707fc10cb 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -910,7 +910,7 @@ bool CARDbRadioPowerOff(void *pDeviceHandler) pDevice->bRadioOff = true; //2007-0409-03, by chester - printk("chester power off\n"); + pr_debug("chester power off\n"); MACvRegBitsOn(pDevice->PortOffset, MAC_REG_GPIOCTL0, LED_ACTSET); //LED issue return bResult; } @@ -932,14 +932,14 @@ bool CARDbRadioPowerOn(void *pDeviceHandler) PSDevice pDevice = (PSDevice) pDeviceHandler; bool bResult = true; - printk("chester power on\n"); + pr_debug("chester power on\n"); if (pDevice->bRadioControlOff == true) { - if (pDevice->bHWRadioOff == true) printk("chester bHWRadioOff\n"); - if (pDevice->bRadioControlOff == true) printk("chester bRadioControlOff\n"); + if (pDevice->bHWRadioOff == true) pr_debug("chester bHWRadioOff\n"); + if (pDevice->bRadioControlOff == true) pr_debug("chester bRadioControlOff\n"); return false; } if (pDevice->bRadioOff == false) { - printk("chester pbRadioOff\n"); + pr_debug("chester pbRadioOff\n"); return true; } BBvExitDeepSleep(pDevice->PortOffset, pDevice->byLocalID); @@ -963,7 +963,7 @@ bool CARDbRadioPowerOn(void *pDeviceHandler) pDevice->bRadioOff = false; // 2007-0409-03, by chester - printk("chester power on\n"); + pr_debug("chester power on\n"); MACvRegBitsOff(pDevice->PortOffset, MAC_REG_GPIOCTL0, LED_ACTSET); //LED issue return bResult; } diff --git a/drivers/staging/vt6655/device_cfg.h b/drivers/staging/vt6655/device_cfg.h index 1137adede9ee..af2892496d0c 100644 --- a/drivers/staging/vt6655/device_cfg.h +++ b/drivers/staging/vt6655/device_cfg.h @@ -81,7 +81,7 @@ typedef enum _chip_type { #define ASSERT(x) \ do { \ if (!(x)) { \ - printk(KERN_ERR "assertion %s failed: file %s line %d\n", \ + pr_err("assertion %s failed: file %s line %d\n", \ #x, __func__, __LINE__); \ *(int *)0 = 0; \ } \ diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 02c6fa9f1589..12b58efa4c7c 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -579,12 +579,12 @@ static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) else { if (zonetype != pDevice->abyEEPROM[EEP_OFS_ZONETYPE]) - printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n", zonetype, pDevice->abyEEPROM[EEP_OFS_ZONETYPE]); + pr_debug("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n", zonetype, pDevice->abyEEPROM[EEP_OFS_ZONETYPE]); else - printk("Read Zonetype file success,use default zonetype setting[%02x]\n", zonetype); + pr_debug("Read Zonetype file success,use default zonetype setting[%02x]\n", zonetype); } } else - printk("Read Zonetype file fail,use default zonetype setting[%02x]\n", SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ZONETYPE)); + pr_debug("Read Zonetype file fail,use default zonetype setting[%02x]\n", SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ZONETYPE)); // Get RFType pDevice->byRFType = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_RFTYPE); @@ -809,8 +809,9 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) PCHIP_INFO pChip_info = (PCHIP_INFO)ent->driver_data; PSDevice pDevice; int rc; + if (device_nics++ >= MAX_UINTS) { - printk(KERN_NOTICE DEVICE_NAME ": already found %d NICs\n", device_nics); + pr_notice(DEVICE_NAME ": already found %d NICs\n", device_nics); return -ENODEV; } @@ -819,7 +820,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) pDevice = (PSDevice) netdev_priv(dev); if (dev == NULL) { - printk(KERN_ERR DEVICE_NAME ": allocate net device failed\n"); + pr_err(DEVICE_NAME ": allocate net device failed\n"); return -ENOMEM; } @@ -827,8 +828,8 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) SET_NETDEV_DEV(dev, &pcid->dev); if (bFirst) { - printk(KERN_NOTICE "%s Ver. %s\n", DEVICE_FULL_DRV_NAM, DEVICE_VERSION); - printk(KERN_NOTICE "Copyright (c) 2003 VIA Networking Technologies, Inc.\n"); + pr_notice("%s Ver. %s\n", DEVICE_FULL_DRV_NAM, DEVICE_VERSION); + pr_notice("Copyright (c) 2003 VIA Networking Technologies, Inc.\n"); bFirst = false; } @@ -844,10 +845,10 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) dev->irq = pcid->irq; #ifdef DEBUG - printk("Before get pci_info memaddr is %x\n", pDevice->memaddr); + pr_debug("Before get pci_info memaddr is %x\n", pDevice->memaddr); #endif if (!device_get_pci_info(pDevice, pcid)) { - printk(KERN_ERR DEVICE_NAME ": Failed to find PCI device.\n"); + pr_err(DEVICE_NAME ": Failed to find PCI device.\n"); device_free_info(pDevice); return -ENODEV; } @@ -856,7 +857,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) #ifdef DEBUG - printk("after get pci_info memaddr is %x, io addr is %x,io_size is %d\n", pDevice->memaddr, pDevice->ioaddr, pDevice->io_size); + pr_debug("after get pci_info memaddr is %x, io addr is %x,io_size is %d\n", pDevice->memaddr, pDevice->ioaddr, pDevice->io_size); { int i; u32 bar, len; @@ -870,9 +871,9 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) 0}; for (i = 0; address[i]; i++) { pci_read_config_dword(pcid, address[i], &bar); - printk("bar %d is %x\n", i, bar); + pr_debug("bar %d is %x\n", i, bar); if (!bar) { - printk("bar %d not implemented\n", i); + pr_debug("bar %d not implemented\n", i); continue; } if (bar & PCI_BASE_ADDRESS_SPACE_IO) { @@ -881,12 +882,12 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) len = bar & (PCI_BASE_ADDRESS_IO_MASK & 0xFFFF); len = len & ~(len - 1); - printk("IO space: len in IO %x, BAR %d\n", len, i); + pr_debug("IO space: len in IO %x, BAR %d\n", len, i); } else { len = bar & 0xFFFFFFF0; len = ~len + 1; - printk("len in MEM %x, BAR %d\n", len, i); + pr_debug("len in MEM %x, BAR %d\n", len, i); } } } @@ -897,14 +898,14 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) pDevice->PortOffset = ioremap(pDevice->memaddr & PCI_BASE_ADDRESS_MEM_MASK, pDevice->io_size); if (pDevice->PortOffset == NULL) { - printk(KERN_ERR DEVICE_NAME ": Failed to IO remapping ..\n"); + pr_err(DEVICE_NAME ": Failed to IO remapping ..\n"); device_free_info(pDevice); return -ENODEV; } rc = pci_request_regions(pcid, DEVICE_NAME); if (rc) { - printk(KERN_ERR DEVICE_NAME ": Failed to find PCI device\n"); + pr_err(DEVICE_NAME ": Failed to find PCI device\n"); device_free_info(pDevice); return -ENODEV; } @@ -914,10 +915,10 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) unsigned char value; VNSvInPortB(pDevice->PortOffset+0x4F, &value); - printk("Before write: value is %x\n", value); + pr_debug("Before write: value is %x\n", value); VNSvOutPortB(pDevice->PortOffset, value); VNSvInPortB(pDevice->PortOffset+0x4F, &value); - printk("After write: value is %x\n", value); + pr_debug("After write: value is %x\n", value); #endif #ifdef IO_MAP @@ -925,7 +926,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) #endif // do reset if (!MACbSoftwareReset(pDevice->PortOffset)) { - printk(KERN_ERR DEVICE_NAME ": Failed to access MAC hardware..\n"); + pr_err(DEVICE_NAME ": Failed to access MAC hardware..\n"); device_free_info(pDevice); return -ENODEV; } @@ -951,7 +952,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) rc = register_netdev(dev); if (rc) { - printk(KERN_ERR DEVICE_NAME " Failed to register netdev\n"); + pr_err(DEVICE_NAME " Failed to register netdev\n"); device_free_info(pDevice); return -ENODEV; } @@ -1038,10 +1039,10 @@ static bool device_get_pci_info(PSDevice pDevice, struct pci_dev *pcid) } for (ii = 0, j = 1; ii < 0x100; ii++, j++) { if (j % 16 == 0) { - printk("%x:", pci_config[ii]); - printk("\n"); + pr_debug("%x:", pci_config[ii]); + pr_debug("\n"); } else { - printk("%x:", pci_config[ii]); + pr_debug("%x:", pci_config[ii]); } } #endif @@ -1060,7 +1061,7 @@ static void device_free_info(PSDevice pDevice) //2008-07-21-01by MikeLiu //unregister wpadev if (wpa_set_wpadev(pDevice, 0) != 0) - printk("unregister wpadev fail?\n"); + pr_err("unregister wpadev fail?\n"); if (pDevice_Infos == NULL) return; @@ -1710,7 +1711,7 @@ static int device_open(struct net_device *dev) mlme_kill = 0; mlme_task = kthread_run(MlmeThread, (void *)pDevice, "MLME"); if (IS_ERR(mlme_task)) { - printk("thread create fail\n"); + pr_err("thread create fail\n"); return -1; } @@ -2162,7 +2163,7 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) if (pDevice->bFixRate) { #ifdef PLICE_DEBUG - printk("Fix Rate: PhyType is %d,ConnectionRate is %d\n", pDevice->eCurrentPHYType, pDevice->uConnectionRate); + pr_debug("Fix Rate: PhyType is %d,ConnectionRate is %d\n", pDevice->eCurrentPHYType, pDevice->uConnectionRate); #endif if (pDevice->eCurrentPHYType == PHY_TYPE_11B) { @@ -2300,7 +2301,7 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) pDevice->apCurrTD[TYPE_AC0DMA] = pHeadTD; if (pDevice->bFixRate) - printk("FixRate:Rate is %d,TxPower is %d\n", pDevice->wCurrentRate, pDevice->byCurPwr); + pr_debug("FixRate:Rate is %d,TxPower is %d\n", pDevice->wCurrentRate, pDevice->byCurPwr); { unsigned char Protocol_Version; //802.1x Authentication @@ -2322,10 +2323,10 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) (Key_info & BIT8) && (Key_info & BIT9)) { //send 2/2 key pDevice->fWPA_Authened = true; if (Descriptor_type == 254) - printk("WPA "); + pr_debug("WPA "); else - printk("WPA2 "); - printk("Authentication completed!!\n"); + pr_debug("WPA2 "); + pr_debug("Authentication completed!!\n"); } } } @@ -2641,24 +2642,24 @@ int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter) int result=0; if (!buffer) { - printk("allocate mem for file fail?\n"); + pr_err("allocate mem for file fail?\n"); return -1; } file = filp_open(CONFIG_PATH, O_RDONLY, 0); if (IS_ERR(file)) { kfree(buffer); - printk("Config_FileOperation:open file fail?\n"); + pr_err("Config_FileOperation:open file fail?\n"); return -1; } if (kernel_read(file, 0, buffer, 1024) < 0) { - printk("read file error?\n"); + pr_err("read file error?\n"); result = -1; goto error1; } if (Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer)!=true) { - printk("get parameter error?\n"); + pr_err("get parameter error?\n"); result = -1; goto error1; } @@ -2671,7 +2672,7 @@ int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter) result = ZoneType_Europe; } else { result = -1; - printk("Unknown Zonetype[%s]?\n",tmpbuffer); + pr_err("Unknown Zonetype[%s]?\n", tmpbuffer); } error1: diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index 18d11d1f4fa6..65e59336f03b 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -123,13 +123,13 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) /* write zonetype */ if (sZoneTypeCmd.ZoneType == ZoneType_USA) { /* set to USA */ - printk("set_ZoneType:USA\n"); + pr_debug("set_ZoneType:USA\n"); } else if (sZoneTypeCmd.ZoneType == ZoneType_Japan) { /* set to Japan */ - printk("set_ZoneType:Japan\n"); + pr_debug("set_ZoneType:Japan\n"); } else if (sZoneTypeCmd.ZoneType == ZoneType_Europe) { /* set to Europe */ - printk("set_ZoneType:Europe\n"); + pr_debug("set_ZoneType:Europe\n"); } } else { /* read zonetype */ @@ -142,7 +142,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) } else if (zonetype == 0x02) { /* Europe */ sZoneTypeCmd.ZoneType = ZoneType_Europe; } else { /* Unknown ZoneType */ - printk("Error:ZoneType[%x] Unknown ???\n", zonetype); + pr_err("Error:ZoneType[%x] Unknown ???\n", zonetype); result = -EFAULT; break; } diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 06ddb8556210..501cd6477439 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -643,7 +643,7 @@ int iwctl_siwap(struct net_device *dev, DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWAP\n"); if (pMgmt->eScanState == WMAC_IS_SCANNING) { // In scanning.. - printk("SIOCSIWAP(??)-->In scanning...\n"); + pr_debug("SIOCSIWAP(??)-->In scanning..\n"); } if (wrq->sa_family != ARPHRD_ETHER) rc = -EINVAL; @@ -804,7 +804,7 @@ int iwctl_siwessid(struct net_device *dev, pDevice->fWPA_Authened = false; if (pMgmt->eScanState == WMAC_IS_SCANNING) { // In scanning.. - printk("SIOCSIWESSID(??)-->In scanning...\n"); + pr_debug("SIOCSIWESSID(??)-->In scanning..\n"); } // Check if we asked for `any' if (wrq->flags == 0) { @@ -827,7 +827,7 @@ int iwctl_siwessid(struct net_device *dev, pItemSSID->len = wrq->length - 1; } else pItemSSID->len = wrq->length; - printk("set essid to %s\n", pItemSSID->abySSID); + pr_debug("set essid to %s\n", pItemSSID->abySSID); //2008-0409-05, by Einsn Liu len = (pItemSSID->len > ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len) ? pItemSSID->len : ((PWLAN_IE_SSID)pMgmt->abyCurrSSID)->len; if ((pDevice->bLinkPass == true) && @@ -873,7 +873,7 @@ int iwctl_siwessid(struct net_device *dev, } } if (uSameBssidNum >= 2) { //hit: desired AP is in hidden ssid mode!!! - printk("SIOCSIWESSID:hidden ssid directly associate.......\n"); + pr_debug("SIOCSIWESSID:hidden ssid directly associate.......\n"); vResetCommandTimer((void *)pDevice); pMgmt->eScanType = WMAC_SCAN_PASSIVE; //this scan type,you'll submit scan result! bScheduleCommand((void *)pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); @@ -987,7 +987,7 @@ int iwctl_siwrate(struct net_device *dev, if (wrq->fixed != 0) { // Fixed mode // One rate, fixed - printk("Rate Fix\n"); + pr_debug("Rate Fix\n"); pDevice->bFixRate = true; if ((pDevice->byBBType == BB_TYPE_11B) && (brate > 3)) { pDevice->uConnectionRate = 3; @@ -999,7 +999,7 @@ int iwctl_siwrate(struct net_device *dev, } else { pDevice->bFixRate = false; pDevice->uConnectionRate = 13; - printk("auto rate:connection_rate is 13\n"); + pr_debug("auto rate:connection_rate is 13\n"); } return rc; @@ -1775,7 +1775,7 @@ int iwctl_siwencodeext(struct net_device *dev, } if (pDevice->bwextcount == 4) { - printk("SIOCSIWENCODEEXT:Enable WPA WEXT SUPPORT!!!!!\n"); + pr_debug("SIOCSIWENCODEEXT:Enable WPA WEXT SUPPORT!!!!!\n"); pDevice->bwextcount = 0; pDevice->bWPASuppWextEnabled = true; } @@ -1819,7 +1819,7 @@ int iwctl_siwmlme(struct net_device *dev, break; case IW_MLME_DISASSOC: if (pDevice->bLinkPass == true) { - printk("iwctl_siwmlme--->send DISASSOCIATE\n"); + pr_debug("iwctl_siwmlme--->send DISASSOCIATE\n"); //clear related flags memset(pMgmt->abyDesireBSSID, 0xFF, 6); KeyvInitTable(&pDevice->sKey, pDevice->PortOffset); diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 0ee1e8a7c113..160707d0b7a5 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -544,7 +544,7 @@ VNTWIFIvGetTxRate( wTxDataRate = (pMgmt->sNodeDBTable[0].wTxDataRate); #ifdef PLICE_DEBUG - printk(KERN_DEBUG "GetTxRate:AP MAC is %pM,TxRate is %d\n", + pr_debug("GetTxRate:AP MAC is %pM,TxRate is %d\n", pMgmt->sNodeDBTable[0].abyMACAddr, wTxDataRate); #endif diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index 049bdab78452..0c38fcf2a2a2 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -492,7 +492,7 @@ vCommandTimer( spin_unlock_irq(&pDevice->lock); return; } - printk("chester-abyDesireSSID=%s\n", ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySSID); + pr_debug("chester-abyDesireSSID=%s\n", ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySSID); pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID; pItemSSIDCurr = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " cmd: desire ssid = %s\n", pItemSSID->abySSID); @@ -583,9 +583,10 @@ vCommandTimer( #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT { union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; - printk("wireless_send_event--->SIOCGIWAP(disassociated:vMgrJoinBSSBegin Fail !!)\n"); + pr_debug("wireless_send_event--->SIOCGIWAP(disassociated:vMgrJoinBSSBegin Fail !!)\n"); wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); } #endif @@ -613,10 +614,10 @@ vCommandTimer( } else if (pMgmt->eCurrState < WMAC_STATE_AUTHPENDING) { - printk("WLAN_AUTHENTICATE_WAIT:Authen Fail???\n"); + pr_debug("WLAN_AUTHENTICATE_WAIT:Authen Fail???\n"); } else if (pDevice->byLinkWaitCount <= 4) { //mike add:wait another 2 sec if authenticated_frame delay! pDevice->byLinkWaitCount++; - printk("WLAN_AUTHENTICATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); + pr_debug("WLAN_AUTHENTICATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); vCommandTimerWait((void *)pDevice, AUTHENTICATE_TIMEOUT/2); return; @@ -663,7 +664,7 @@ vCommandTimer( printk("WLAN_ASSOCIATE_WAIT:Association Fail???\n"); } else if (pDevice->byLinkWaitCount <= 4) { //mike add:wait another 2 sec if associated_frame delay! pDevice->byLinkWaitCount++; - printk("WLAN_ASSOCIATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); + pr_debug("WLAN_ASSOCIATE_WAIT:wait %d times!!\n", pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); vCommandTimerWait((void *)pDevice, ASSOCIATE_TIMEOUT/2); return; diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index c02b59d088cc..57373c9adece 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -698,7 +698,7 @@ s_vMgrRxAssocRequest( pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; #ifdef PLICE_DEBUG - printk("RxAssocRequest:wTxDataRate is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate); + pr_debug("RxAssocRequest:wTxDataRate is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate); #endif // Todo: check sta preamble, if ap can't support, set status code pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = @@ -846,7 +846,7 @@ s_vMgrRxReAssocRequest( pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; #ifdef PLICE_DEBUG - printk("RxReAssocRequest:TxDataRate is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate); + pr_debug("RxReAssocRequest:TxDataRate is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate); #endif // Todo: check sta preamble, if ap can't support, set status code pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble = @@ -1570,9 +1570,10 @@ s_vMgrRxDisassociation( #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT { union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; - printk("wireless_send_event--->SIOCGIWAP(disassociated)\n"); + pr_debug("wireless_send_event--->SIOCGIWAP(disassociated)\n"); wireless_send_event(pDevice->dev, SIOCGIWAP, &wrqu, NULL); } #endif @@ -2109,7 +2110,7 @@ s_vMgrRxBeacon( pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate = pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate; #ifdef PLICE_DEBUG { - printk("s_vMgrRxBeacon:TxDataRate is %d,Index is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate, uNodeIndex); + pr_debug("s_vMgrRxBeacon:TxDataRate is %d,Index is %d\n", pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate, uNodeIndex); } #endif } diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index 10b100c08590..4c6e33702083 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -556,7 +556,7 @@ static int wpa_get_scan(PSDevice pDevice, ptempBSS = kmalloc(sizeof(KnownBSS), GFP_ATOMIC); if (ptempBSS == NULL) { - printk(KERN_ERR "bubble sort kmalloc memory fail@@@\n"); + pr_err("bubble sort kmalloc memory fail@@@\n"); ret = -ENOMEM; @@ -774,7 +774,7 @@ static int wpa_set_associate(PSDevice pDevice, ); if (pCurr == NULL) { - printk("wpa_set_associate---->hidden mode site survey before associate.......\n"); + pr_debug("wpa_set_associate---->hidden mode site survey before associate.......\n"); bScheduleCommand((void *)pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); } } -- cgit From a1613423cd1da7f5f6fc0e45da5411a0adcac3c5 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:22 +0200 Subject: staging: vt6655: break single line if statements This fixes the "trailing statements should be on next line" checkpatch warning. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.c | 6 ++++-- drivers/staging/vt6655/device_main.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 58d707fc10cb..4ae8d9362edf 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -934,8 +934,10 @@ bool CARDbRadioPowerOn(void *pDeviceHandler) pr_debug("chester power on\n"); if (pDevice->bRadioControlOff == true) { - if (pDevice->bHWRadioOff == true) pr_debug("chester bHWRadioOff\n"); - if (pDevice->bRadioControlOff == true) pr_debug("chester bRadioControlOff\n"); + if (pDevice->bHWRadioOff == true) + pr_debug("chester bHWRadioOff\n"); + if (pDevice->bRadioControlOff == true) + pr_debug("chester bRadioControlOff\n"); return false; } if (pDevice->bRadioOff == false) { diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 12b58efa4c7c..a50d747f326e 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -388,7 +388,8 @@ device_set_options(PSDevice pDevice) { pDevice->b11hEnable = (pDevice->sOpts.flags & DEVICE_FLAGS_80211h_MODE) ? 1 : 0; pDevice->bDiversityRegCtlON = (pDevice->sOpts.flags & DEVICE_FLAGS_DiversityANT) ? 1 : 0; pDevice->uConnectionRate = pDevice->sOpts.data_rate; - if (pDevice->uConnectionRate < RATE_AUTO) pDevice->bFixRate = true; + if (pDevice->uConnectionRate < RATE_AUTO) + pDevice->bFixRate = true; pDevice->byBBType = pDevice->sOpts.bbp_type; pDevice->byPacketType = pDevice->byBBType; @@ -2905,7 +2906,8 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) char abyKey[WLAN_WEP232_KEYLEN]; rc = iwctl_giwencode(dev, NULL, &(wrq->u.encoding), abyKey); - if (rc != 0) break; + if (rc != 0) + break; if (wrq->u.encoding.pointer) { if (copy_to_user(wrq->u.encoding.pointer, abyKey, -- cgit From cef27eae2f8a620d744d8f00074f70032e51ee42 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:23 +0200 Subject: staging: vt6655: Remove unreachable break statements This fixes break "break is not useful after a goto or return" checkpatch warnings. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/rf.c | 2 -- drivers/staging/vt6655/wpa.c | 1 - 2 files changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c index d2d7dff3dce7..42b257f916d3 100644 --- a/drivers/staging/vt6655/rf.c +++ b/drivers/staging/vt6655/rf.c @@ -873,11 +873,9 @@ bool RFvWriteWakeProgSyn(void __iomem *dwIoBase, unsigned char byRFType, unsigne case RF_NOTHING: return true; - break; default: return false; - break; } MACvSetMISCFifo(dwIoBase, MISCFIFO_SYNINFO_IDX, (unsigned long)MAKEWORD(bySleepCount, byInitCount)); diff --git a/drivers/staging/vt6655/wpa.c b/drivers/staging/vt6655/wpa.c index 505c89592057..2bd9e1fc0608 100644 --- a/drivers/staging/vt6655/wpa.c +++ b/drivers/staging/vt6655/wpa.c @@ -262,7 +262,6 @@ WPA_SearchRSN( return false; } return true; - break; default: break; -- cgit From fa13849f58dcecbb14ce9f40a15b8c9b26df004d Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:24 +0200 Subject: staging: vt6655: add missing whitespace Some whitespace were missing, causing checkpatch warnings and altering readability. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index a50d747f326e..4413e4a286c0 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -2635,12 +2635,12 @@ static int Config_FileGetParameter(unsigned char *string, return true; } -int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter) +int Config_FileOperation(PSDevice pDevice, bool fwrite, unsigned char *Parameter) { unsigned char *buffer = kmalloc(1024, GFP_KERNEL); unsigned char tmpbuffer[20]; struct file *file; - int result=0; + int result = 0; if (!buffer) { pr_err("allocate mem for file fail?\n"); @@ -2665,11 +2665,11 @@ int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter) goto error1; } - if (memcmp(tmpbuffer,"USA",3)==0) { + if (memcmp(tmpbuffer, "USA", 3) == 0) { result = ZoneType_USA; - } else if(memcmp(tmpbuffer,"JAPAN",5)==0) { + } else if(memcmp(tmpbuffer, "JAPAN", 5) == 0) { result = ZoneType_Japan; - } else if(memcmp(tmpbuffer,"EUROPE",5)==0) { + } else if(memcmp(tmpbuffer, "EUROPE", 5) == 0) { result = ZoneType_Europe; } else { result = -1; -- cgit From cba60905f19f70858556c081571cdd8fca546851 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:25 +0200 Subject: staging: vt6655: remove braces for single statements if This fixes several "braces {} are not necessary for single statement blocks" checkpatch warnings. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/power.c | 3 +-- drivers/staging/vt6655/vntwifi.c | 3 +-- drivers/staging/vt6655/wmgr.c | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index e41d3bc51377..2a21cbd1c6ac 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -248,9 +248,8 @@ PSvSendPSPOLL( pTxPacket->cbMPDULen = WLAN_HDR_ADDR2_LEN; pTxPacket->cbPayloadLen = 0; // send the frame - if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { + if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send PS-Poll packet failed..\n"); - } } /*+ diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 160707d0b7a5..4d425e0c76d4 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -684,9 +684,8 @@ VNTWIFIbMeasureReport( pMgmt->uLengthOfRepEIDs += (2 + pMgmt->pCurrMeasureEIDRep->len); pMgmt->pCurrMeasureEIDRep = (PWLAN_IE_MEASURE_REP) pbyCurrentEID; } - if (bEndOfReport) { + if (bEndOfReport) IEEE11hbMSRRepTx(pMgmt); - } return true; } diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 57373c9adece..e88e11606db0 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -4114,9 +4114,8 @@ s_vMgrRxProbeRequest( if (pTxPacket != NULL) { /* send the frame */ Status = csMgmt_xmit(pDevice, pTxPacket); - if (Status != CMD_STATUS_PENDING) { + if (Status != CMD_STATUS_PENDING) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:Probe response tx failed\n"); - } } } } -- cgit From 049a8afbaa475e79f0e10cd015474419d161212c Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:26 +0200 Subject: staging: vt6655: fix braces at newline in if statements Braces should not be in a separate line for multi-line if statements. This fixes warnings reported by checkpatch. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/wcmd.c | 5 +++-- drivers/staging/vt6655/wpa.c | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index 0c38fcf2a2a2..f12eef064c45 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -432,9 +432,10 @@ vCommandTimer( vAdHocBeaconRestart(pDevice); //2008-0409-07, by Einsn Liu #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT - if (pMgmt->eScanType == WMAC_SCAN_PASSIVE) - {//send scan event to wpa_Supplicant + if (pMgmt->eScanType == WMAC_SCAN_PASSIVE) { + //send scan event to wpa_Supplicant union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL); } diff --git a/drivers/staging/vt6655/wpa.c b/drivers/staging/vt6655/wpa.c index 2bd9e1fc0608..7b1bab91a9cf 100644 --- a/drivers/staging/vt6655/wpa.c +++ b/drivers/staging/vt6655/wpa.c @@ -123,8 +123,8 @@ WPA_ParseRSN( && (pRSN->wVersion == 1)) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Legal RSN\n"); // update each variable if pRSN is long enough to contain the variable - if (pRSN->len >= 10) //oui1(4)+ver(2)+GKSuite(4) - { + if (pRSN->len >= 10) { + //OUI1(4)+ver(2)+GKSuite(4) if (!memcmp(pRSN->abyMulticast, abyOUI01, 4)) pBSSList->byGKType = WPA_WEP40; else if (!memcmp(pRSN->abyMulticast, abyOUI02, 4)) @@ -142,8 +142,8 @@ WPA_ParseRSN( DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "byGKType: %x\n", pBSSList->byGKType); } - if (pRSN->len >= 12) //oui1(4)+ver(2)+GKS(4)+PKSCnt(2) - { + if (pRSN->len >= 12) { + //oui1(4)+ver(2)+GKS(4)+PKSCnt(2) j = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wPKCount: %d, sizeof(pBSSList->abyPKType): %zu\n", pRSN->wPKCount, sizeof(pBSSList->abyPKType)); for (i = 0; (i < pRSN->wPKCount) && (j < ARRAY_SIZE(pBSSList->abyPKType)); i++) { -- cgit From 1ce87e24095cde26b58cf898cd02e6b27239ae84 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:27 +0200 Subject: staging: vt6655: remove unused macro The MAC_MAX_CONTEXT_SIZE macro was not enclosed into parenthesis, which might have caused hard to debug errors, and caused a sparse warning. Since it is unused, we might as well remove it. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/mac.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/mac.h b/drivers/staging/vt6655/mac.h index 98ade83d0c0d..0bf93759b6af 100644 --- a/drivers/staging/vt6655/mac.h +++ b/drivers/staging/vt6655/mac.h @@ -44,7 +44,6 @@ // #define MAC_MAX_CONTEXT_SIZE_PAGE0 256 #define MAC_MAX_CONTEXT_SIZE_PAGE1 128 -#define MAC_MAX_CONTEXT_SIZE MAC_MAX_CONTEXT_SIZE_PAGE0 + MAC_MAX_CONTEXT_SIZE_PAGE1 // Registers not related to 802.11b #define MAC_REG_BCFG0 0x00 -- cgit From 70ae543b3260a1cb53b30320d650effa575fa174 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 01:06:28 +0200 Subject: staging: vt6655: Remove NULL pointer sparse warning We were using 0 instead of NULL to initialize a pointer, which caused a sparse warning. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 4413e4a286c0..1e1d3b451653 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -1626,7 +1626,7 @@ static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc) dev_kfree_skb_irq(skb); pTDInfo->skb_dma = 0; - pTDInfo->skb = 0; + pTDInfo->skb = NULL; pTDInfo->byFlags = 0; } -- cgit From 8fa6cfc73283b687067687955f459720054bbe90 Mon Sep 17 00:00:00 2001 From: "L. Alberto Giménez" Date: Fri, 25 Jul 2014 00:50:25 +0200 Subject: staging/lustre: Fix sparse error (signature mismatch) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit lprocfs_wr_atomic is defined in drivers/staging/lustre/lustre/obdclass/lprocfs_status.c with its second argument with the __user attribute: int lprocfs_wr_atomic(struct file *file, const char __user *buffer, unsigned long count, void *data) but its declaration in drivers/staging/lustre/lustre/include/lprocfs_status.h does not include the attribute. Make declaration and definition match. Signed-off-by: L. Alberto Giménez Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/include/lprocfs_status.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index 1f235f41e828..16b3d6887ff6 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -604,7 +604,7 @@ extern int lprocfs_obd_seq_create(struct obd_device *dev, const char *name, extern int lprocfs_rd_u64(struct seq_file *m, void *data); extern int lprocfs_rd_atomic(struct seq_file *m, void *data); -extern int lprocfs_wr_atomic(struct file *file, const char *buffer, +extern int lprocfs_wr_atomic(struct file *file, const char __user *buffer, unsigned long count, void *data); extern int lprocfs_rd_uint(struct seq_file *m, void *data); extern int lprocfs_wr_uint(struct file *file, const char *buffer, -- cgit From ad8c12eea0cb02040a2705ed28e020b49bb06a3c Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Fri, 25 Jul 2014 02:30:46 +0300 Subject: staging: silicom: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The driver hasn't been cleaned up and it doesn't look like anyone is working on it anymore (including the original author). So remove it. If someone wants to work on cleaning the driver up and moving it out of staging, this commit can be reverted. In addition, since this removes the CONFIG_NET_VENDOR_SILICOM config symbol, remove the symbol from all defconfig files that reference it. Signed-off-by: Kristina MartÅ¡enko Cc: Daniel Cotey Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/silicom/Kconfig | 45 - drivers/staging/silicom/Makefile | 6 - drivers/staging/silicom/README | 14 - drivers/staging/silicom/TODO | 8 - drivers/staging/silicom/bits.h | 56 - drivers/staging/silicom/bp_ioctl.h | 140 - drivers/staging/silicom/bp_mod.h | 711 --- drivers/staging/silicom/bpctl_mod.c | 7530 -------------------------- drivers/staging/silicom/bypass.h | 202 - drivers/staging/silicom/bypasslib/Makefile | 6 - drivers/staging/silicom/bypasslib/bp_ioctl.h | 198 - drivers/staging/silicom/bypasslib/bplibk.h | 36 - drivers/staging/silicom/bypasslib/bypass.c | 536 -- drivers/staging/silicom/bypasslib/libbp_sd.h | 532 -- drivers/staging/silicom/libbp_sd.h | 550 -- 17 files changed, 10573 deletions(-) delete mode 100644 drivers/staging/silicom/Kconfig delete mode 100644 drivers/staging/silicom/Makefile delete mode 100644 drivers/staging/silicom/README delete mode 100644 drivers/staging/silicom/TODO delete mode 100644 drivers/staging/silicom/bits.h delete mode 100644 drivers/staging/silicom/bp_ioctl.h delete mode 100644 drivers/staging/silicom/bp_mod.h delete mode 100644 drivers/staging/silicom/bpctl_mod.c delete mode 100644 drivers/staging/silicom/bypass.h delete mode 100644 drivers/staging/silicom/bypasslib/Makefile delete mode 100644 drivers/staging/silicom/bypasslib/bp_ioctl.h delete mode 100644 drivers/staging/silicom/bypasslib/bplibk.h delete mode 100644 drivers/staging/silicom/bypasslib/bypass.c delete mode 100644 drivers/staging/silicom/bypasslib/libbp_sd.h delete mode 100644 drivers/staging/silicom/libbp_sd.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index b08394cd9604..90624df0db6f 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -96,8 +96,6 @@ source "drivers/staging/gdm72xx/Kconfig" source "drivers/staging/gdm724x/Kconfig" -source "drivers/staging/silicom/Kconfig" - source "drivers/staging/imx-drm/Kconfig" source "drivers/staging/fwserial/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 962330817fa4..27f44cdde516 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -41,7 +41,6 @@ obj-$(CONFIG_STAGING_BOARD) += board/ obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/ obj-$(CONFIG_WIMAX_GDM72XX) += gdm72xx/ obj-$(CONFIG_LTE_GDM724X) += gdm724x/ -obj-$(CONFIG_NET_VENDOR_SILICOM) += silicom/ obj-$(CONFIG_DRM_IMX) += imx-drm/ obj-$(CONFIG_FIREWIRE_SERIAL) += fwserial/ obj-$(CONFIG_GOLDFISH) += goldfish/ diff --git a/drivers/staging/silicom/Kconfig b/drivers/staging/silicom/Kconfig deleted file mode 100644 index 6651bd819bc8..000000000000 --- a/drivers/staging/silicom/Kconfig +++ /dev/null @@ -1,45 +0,0 @@ -# -# Silicom device configuration -# - -config NET_VENDOR_SILICOM - bool "Silicom devices" - default y - depends on PCI && NETDEVICES - ---help--- - If you have a network card (Ethernet) belonging to this class, - say Y. - - Note that the answer to this question does not directly affect - the kernel: saying N will just case the configurator to skip all - the questions regarding Silicom chipsets. If you say Y, you will be asked - for your specific chipset/driver in the following questions. - -if NET_VENDOR_SILICOM - -config SBYPASS - tristate "Silicom BypassCTL library support" - depends on PCI - depends on m - ---help--- - If you have a network (Ethernet) controller of this type, say Y - - To compile this driver as a module, choose M here. The module - will be called bypass. - -config BPCTL - tristate "Silicom BypassCTL net support" - depends on PCI - depends on m - select SBYPASS - select MII - ---help--- - If you have a network (Ethernet) controller of this type, say Y - or M and read the Ethernet-HOWTO, available from - . - - To compile this driver as a module, choose M here. The module - will be called bpctl_mod. - - -endif # NET_VENDOR_SILICOM diff --git a/drivers/staging/silicom/Makefile b/drivers/staging/silicom/Makefile deleted file mode 100644 index ca8359481c48..000000000000 --- a/drivers/staging/silicom/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for the Bypass network device drivers. -# - -obj-$(CONFIG_BPCTL) += bpctl_mod.o -obj-$(CONFIG_SBYPASS) += bypasslib/ diff --git a/drivers/staging/silicom/README b/drivers/staging/silicom/README deleted file mode 100644 index ae970b37fdc6..000000000000 --- a/drivers/staging/silicom/README +++ /dev/null @@ -1,14 +0,0 @@ - -Theory of Operation: - -The Silicom Bypass Network Interface Cards (NICs) are network cards with paired ports (2 or 4). -The pairs either act as a "wire" allowing the network packets to pass or insert the device in -between the two ports. When paired with the on-board hardware watchdog or other failsafe, -they provide high availability for the network in the face of software outages or maintenance. - -The software requirements are for a kernel level driver that interfaces with the bypass and watchdog, -as well as for control software. User control can be either the provided standalone executable -(/bin/bpctl) or the API exposed by the Silicom library. - - - diff --git a/drivers/staging/silicom/TODO b/drivers/staging/silicom/TODO deleted file mode 100644 index 09d07b0ea9c0..000000000000 --- a/drivers/staging/silicom/TODO +++ /dev/null @@ -1,8 +0,0 @@ -TODO: - - checkpatch.pl cleanups - - locking audit - - single module with all functionality - - userland - - fix monolithic build. - - diff --git a/drivers/staging/silicom/bits.h b/drivers/staging/silicom/bits.h deleted file mode 100644 index 8c411d0d4ecd..000000000000 --- a/drivers/staging/silicom/bits.h +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************/ -/* */ -/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2004 Broadcom */ -/* Corporation. */ -/* All rights reserved. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* History: */ -/* 02/25/00 Hav Khauv Initial version. */ -/******************************************************************************/ - -#ifndef BITS_H -#define BITS_H - -/******************************************************************************/ -/* Bit Mask definitions */ -/******************************************************************************/ - -#define BIT_NONE 0x00 -#define BIT_0 0x01 -#define BIT_1 0x02 -#define BIT_2 0x04 -#define BIT_3 0x08 -#define BIT_4 0x10 -#define BIT_5 0x20 -#define BIT_6 0x40 -#define BIT_7 0x80 -#define BIT_8 0x0100 -#define BIT_9 0x0200 -#define BIT_10 0x0400 -#define BIT_11 0x0800 -#define BIT_12 0x1000 -#define BIT_13 0x2000 -#define BIT_14 0x4000 -#define BIT_15 0x8000 -#define BIT_16 0x010000 -#define BIT_17 0x020000 -#define BIT_18 0x040000 -#define BIT_19 0x080000 -#define BIT_20 0x100000 -#define BIT_21 0x200000 -#define BIT_22 0x400000 -#define BIT_23 0x800000 -#define BIT_24 0x01000000 -#define BIT_25 0x02000000 -#define BIT_26 0x04000000 -#define BIT_27 0x08000000 -#define BIT_28 0x10000000 -#define BIT_29 0x20000000 -#define BIT_30 0x40000000 -#define BIT_31 0x80000000 - -#endif /* BITS_H */ diff --git a/drivers/staging/silicom/bp_ioctl.h b/drivers/staging/silicom/bp_ioctl.h deleted file mode 100644 index 57de34a69e8e..000000000000 --- a/drivers/staging/silicom/bp_ioctl.h +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************/ -/* */ -/* Silicom Bypass Control Utility, Copyright (c) 2005-2007 Silicom */ -/* All rights reserved. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/******************************************************************************/ - -#ifndef BP_IOCTL_H -#define BP_IOCTL_H - -#define BP_CAP 0x01 /* BIT_0 */ -#define BP_STATUS_CAP 0x02 -#define BP_STATUS_CHANGE_CAP 0x04 -#define SW_CTL_CAP 0x08 -#define BP_DIS_CAP 0x10 -#define BP_DIS_STATUS_CAP 0x20 -#define STD_NIC_CAP 0x40 -#define BP_PWOFF_ON_CAP 0x80 -#define BP_PWOFF_OFF_CAP 0x0100 -#define BP_PWOFF_CTL_CAP 0x0200 -#define BP_PWUP_ON_CAP 0x0400 -#define BP_PWUP_OFF_CAP 0x0800 -#define BP_PWUP_CTL_CAP 0x1000 -#define WD_CTL_CAP 0x2000 -#define WD_STATUS_CAP 0x4000 -#define WD_TIMEOUT_CAP 0x8000 -#define TX_CTL_CAP 0x10000 -#define TX_STATUS_CAP 0x20000 -#define TAP_CAP 0x40000 -#define TAP_STATUS_CAP 0x80000 -#define TAP_STATUS_CHANGE_CAP 0x100000 -#define TAP_DIS_CAP 0x200000 -#define TAP_DIS_STATUS_CAP 0x400000 -#define TAP_PWUP_ON_CAP 0x800000 -#define TAP_PWUP_OFF_CAP 0x1000000 -#define TAP_PWUP_CTL_CAP 0x2000000 -#define NIC_CAP_NEG 0x4000000 -#define TPL_CAP 0x8000000 -#define DISC_CAP 0x10000000 -#define DISC_DIS_CAP 0x20000000 -#define DISC_PWUP_CTL_CAP 0x40000000 - -#define TPL2_CAP_EX 0x01 -#define DISC_PORT_CAP_EX 0x02 - -#define WD_MIN_TIME_MASK(val) (val & 0xf) -#define WD_STEP_COUNT_MASK(val) ((val & 0xf) << 5) -#define WDT_STEP_TIME 0x10 /* BIT_4 */ - -#define WD_MIN_TIME_GET(desc) (desc & 0xf) -#define WD_STEP_COUNT_GET(desc) ((desc>>5) & 0xf) - -typedef enum { - IF_SCAN, - GET_DEV_NUM, - IS_BYPASS, - GET_BYPASS_SLAVE, - GET_BYPASS_CAPS, - GET_WD_SET_CAPS, - SET_BYPASS, - GET_BYPASS, - GET_BYPASS_CHANGE, - SET_BYPASS_WD, - GET_BYPASS_WD, - GET_WD_EXPIRE_TIME, - RESET_BYPASS_WD_TIMER, - SET_DIS_BYPASS, - GET_DIS_BYPASS, - SET_BYPASS_PWOFF, - GET_BYPASS_PWOFF, - SET_BYPASS_PWUP, - GET_BYPASS_PWUP, - SET_STD_NIC, - GET_STD_NIC, - SET_TX, - GET_TX, - SET_TAP, - GET_TAP, - GET_TAP_CHANGE, - SET_DIS_TAP, - GET_DIS_TAP, - SET_TAP_PWUP, - GET_TAP_PWUP, - SET_WD_EXP_MODE, - GET_WD_EXP_MODE, - SET_WD_AUTORESET, - GET_WD_AUTORESET, - SET_TPL, - GET_TPL, - SET_DISC, - GET_DISC, - GET_DISC_CHANGE, - SET_DIS_DISC, - GET_DIS_DISC, - SET_DISC_PWUP, - GET_DISC_PWUP, - GET_BYPASS_INFO = 100, - GET_BP_WAIT_AT_PWUP, - SET_BP_WAIT_AT_PWUP, - GET_BP_HW_RESET, - SET_BP_HW_RESET, - SET_DISC_PORT, - GET_DISC_PORT, - SET_DISC_PORT_PWUP, - GET_DISC_PORT_PWUP, - SET_BP_FORCE_LINK, - GET_BP_FORCE_LINK, -#ifdef BP_SELF_TEST - SET_BP_SELF_TEST = 200, - GET_BP_SELF_TEST, -#endif - -} CMND_TYPE_SD; - -/* -* The major device number. We can't rely on dynamic -* registration any more, because ioctls need to know -* it. -*/ - -#define MAGIC_NUM 'J' - -/* for passing single values */ -struct bpctl_cmd { - int status; - int data[8]; - int in_param[8]; - int out_param[8]; -}; - -#define IOCTL_TX_MSG(cmd) _IOWR(MAGIC_NUM, cmd, struct bpctl_cmd) - -#define DEVICE_NAME "bpctl" - -#endif diff --git a/drivers/staging/silicom/bp_mod.h b/drivers/staging/silicom/bp_mod.h deleted file mode 100644 index 82b4963e97b6..000000000000 --- a/drivers/staging/silicom/bp_mod.h +++ /dev/null @@ -1,711 +0,0 @@ -/******************************************************************************/ -/* */ -/* Bypass Control utility, Copyright (c) 2005 Silicom */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/* bp_mod.h */ -/* */ -/******************************************************************************/ - -#ifndef BP_MOD_H -#define BP_MOD_H -#include "bits.h" - -#define usec_delay(x) udelay(x) -#ifndef msec_delay_bp -#define msec_delay_bp(x) \ -do { \ - int i; \ - if (1) { \ - for (i = 0; i < 1000; i++) { \ - udelay(x); \ - } \ - } else { \ - msleep(x); \ - } \ -} while (0) - -#endif - -#include - -#ifndef jiffies_to_msecs -#define jiffies_to_msecs(x) _kc_jiffies_to_msecs(x) -static inline unsigned int jiffies_to_msecs(const unsigned long j) -{ -#if HZ <= 1000 && !(1000 % HZ) - return (1000 / HZ) * j; -#elif HZ > 1000 && !(HZ % 1000) - return (j + (HZ / 1000) - 1) / (HZ / 1000); -#else - return (j * 1000) / HZ; -#endif -} -#endif - -#define SILICOM_VID 0x1374 -#define SILICOM_SVID 0x1374 - -#define SILICOM_PXG2BPFI_SSID 0x0026 -#define SILICOM_PXG2BPFILX_SSID 0x0027 -#define SILICOM_PXGBPI_SSID 0x0028 -#define SILICOM_PXGBPIG_SSID 0x0029 -#define SILICOM_PXG2TBFI_SSID 0x002a -#define SILICOM_PXG4BPI_SSID 0x002c -#define SILICOM_PXG4BPFI_SSID 0x002d -#define SILICOM_PXG4BPFILX_SSID 0x002e -#define SILICOM_PXG2BPFIL_SSID 0x002F -#define SILICOM_PXG2BPFILLX_SSID 0x0030 -#define SILICOM_PEG4BPI_SSID 0x0031 -#define SILICOM_PEG2BPI_SSID 0x0037 -#define SILICOM_PEG4BPIN_SSID 0x0038 -#define SILICOM_PEG2BPFI_SSID 0x0039 -#define SILICOM_PEG2BPFILX_SSID 0x003A -#define SILICOM_PMCXG2BPFI_SSID 0x003B -#define NOKIA_PMCXG2BPFIN_SSID 0x0510 -#define NOKIA_PMCXG2BPIN_SSID 0x0513 -#define NOKIA_PMCXG4BPIN_SSID 0x0514 -#define NOKIA_PMCXG2BPFIN_SVID 0x13B8 -#define NOKIA_PMCXG2BPIN2_SSID 0x0515 -#define NOKIA_PMCXG4BPIN2_SSID 0x0516 -#define SILICOM_PMCX2BPI_SSID 0x041 -#define SILICOM_PMCX4BPI_SSID 0x042 -#define SILICOM_PXG2BISC1_SSID 0x003d -#define SILICOM_PEG2TBFI_SSID 0x003E -#define SILICOM_PXG2TBI_SSID 0x003f -#define SILICOM_PXG4BPFID_SSID 0x0043 -#define SILICOM_PEG4BPFI_SSID 0x0040 -#define SILICOM_PEG4BPIPT_SSID 0x0044 -#define SILICOM_PXG6BPI_SSID 0x0045 -#define SILICOM_PEG4BPIL_SSID 0x0046 -#define SILICOM_PEG2BPI5_SSID 0x0052 -#define SILICOM_PEG6BPI_SSID 0x0053 -#define SILICOM_PEG4BPFI5_SSID 0x0050 -#define SILICOM_PEG4BPFI5LX_SSID 0x0051 -#define SILICOM_PEG2BISC6_SSID 0x54 - -#define SILICOM_PEG6BPIFC_SSID 0x55 - -#define SILICOM_PEG2BPFI5_SSID 0x0056 -#define SILICOM_PEG2BPFI5LX_SSID 0x0057 - -#define SILICOM_PXEG4BPFI_SSID 0x0058 - -#define SILICOM_PEG2BPFID_SSID 0x0047 -#define SILICOM_PEG2BPFIDLX_SSID 0x004C -#define SILICOM_MEG2BPFILN_SSID 0x0048 -#define SILICOM_MEG2BPFINX_SSID 0x0049 -#define SILICOM_PEG4BPFILX_SSID 0x004A -#define SILICOM_MHIO8AD_SSID 0x004F - -#define SILICOM_MEG2BPFILXLN_SSID 0x004b -#define SILICOM_PEG2BPIX1_SSID 0x004d -#define SILICOM_MEG2BPFILXNX_SSID 0x004e - -#define SILICOM_PE10G2BPISR_SSID 0x0102 -#define SILICOM_PE10G2BPILR_SSID 0x0103 -#define SILICOM_PE10G2BPICX4_SSID 0x0101 - -#define SILICOM_XE10G2BPILR_SSID 0x0163 -#define SILICOM_XE10G2BPISR_SSID 0x0162 -#define SILICOM_XE10G2BPICX4_SSID 0x0161 -#define SILICOM_XE10G2BPIT_SSID 0x0160 - -#define SILICOM_PE10GDBISR_SSID 0x0181 -#define SILICOM_PE10GDBILR_SSID 0x0182 - -#define SILICOM_PE210G2DBi9SR_SSID 0x0188 -#define SILICOM_PE210G2DBi9SRRB_SSID 0x0188 -#define SILICOM_PE210G2DBi9LR_SSID 0x0189 -#define SILICOM_PE210G2DBi9LRRB_SSID 0x0189 -#define SILICOM_PE310G4DBi940SR_SSID 0x018C - -#define SILICOM_PE310G4BPi9T_SSID 0x130 -#define SILICOM_PE310G4BPi9SR_SSID 0x132 -#define SILICOM_PE310G4BPi9LR_SSID 0x133 - -#define NOKIA_XE10G2BPIXR_SVID 0x13B8 -#define NOKIA_XE10G2BPIXR_SSID 0x051C - -#define INTEL_PEG4BPII_PID 0x10A0 -#define INTEL_PEG4BPFII_PID 0x10A1 -#define INTEL_PEG4BPII_SSID 0x11A0 -#define INTEL_PEG4BPFII_SSID 0x11A1 - -#define INTEL_PEG4BPIIO_SSID 0x10A0 -#define INTEL_PEG4BPIIO_PID 0x105e - -#define BROADCOM_VID 0x14e4 -#define BROADCOM_PE10G2_PID 0x164e - -#define SILICOM_PE10G2BPTCX4_SSID 0x0141 -#define SILICOM_PE10G2BPTSR_SSID 0x0142 -#define SILICOM_PE10G2BPTLR_SSID 0x0143 -#define SILICOM_PE10G2BPTT_SSID 0x0140 - -#define SILICOM_PEG4BPI6_SSID 0x0320 -#define SILICOM_PEG4BPFI6_SSID 0x0321 -#define SILICOM_PEG4BPFI6LX_SSID 0x0322 -#define SILICOM_PEG4BPFI6ZX_SSID 0x0323 - -#define SILICOM_PEG2BPI6_SSID 0x0300 -#define SILICOM_PEG2BPFI6_SSID 0x0301 -#define SILICOM_PEG2BPFI6LX_SSID 0x0302 -#define SILICOM_PEG2BPFI6ZX_SSID 0x0303 -#define SILICOM_PEG2BPFI6FLXM_SSID 0x0304 - -#define SILICOM_PEG2DBI6_SSID 0x0308 -#define SILICOM_PEG2DBFI6_SSID 0x0309 -#define SILICOM_PEG2DBFI6LX_SSID 0x030A -#define SILICOM_PEG2DBFI6ZX_SSID 0x030B - -#define SILICOM_MEG2BPI6_SSID 0x0310 -#define SILICOM_XEG2BPI6_SSID 0x0318 -#define SILICOM_PEG4BPI6FC_SSID 0x0328 -#define SILICOM_PEG4BPFI6FC_SSID 0x0329 -#define SILICOM_PEG4BPFI6FCLX_SSID 0x032A -#define SILICOM_PEG4BPFI6FCZX_SSID 0x032B - -#define SILICOM_PEG6BPI6_SSID 0x0340 - -#define SILICOM_PEG2BPI6SC6_SSID 0x0360 - -#define SILICOM_MEG2BPI6_SSID 0x0310 -#define SILICOM_XEG2BPI6_SSID 0x0318 -#define SILICOM_MEG4BPI6_SSID 0x0330 - -#define SILICOM_PE2G4BPi80L_SSID 0x0380 - -#define SILICOM_M6E2G8BPi80A_SSID 0x0474 - -#define SILICOM_PE2G4BPi35_SSID 0x03d8 - -#define SILICOM_PE2G4BPFi80_SSID 0x0381 -#define SILICOM_PE2G4BPFi80LX_SSID 0x0382 -#define SILICOM_PE2G4BPFi80ZX_SSID 0x0383 - -#define SILICOM_PE2G4BPi80_SSID 0x0388 - -#define SILICOM_PE2G2BPi80_SSID 0x0390 -#define SILICOM_PE2G2BPFi80_SSID 0x0391 -#define SILICOM_PE2G2BPFi80LX_SSID 0x0392 -#define SILICOM_PE2G2BPFi80ZX_SSID 0x0393 - -#define SILICOM_PE2G4BPi35L_SSID 0x03D0 -#define SILICOM_PE2G4BPFi35_SSID 0x03D1 -#define SILICOM_PE2G4BPFi35LX_SSID 0x03D2 -#define SILICOM_PE2G4BPFi35ZX_SSID 0x03D3 - -#define SILICOM_PE2G2BPi35_SSID 0x03c0 -#define SILICOM_PAC1200BPi35_SSID 0x03cc -#define SILICOM_PE2G2BPFi35_SSID 0x03C1 -#define SILICOM_PE2G2BPFi35LX_SSID 0x03C2 -#define SILICOM_PE2G2BPFi35ZX_SSID 0x03C3 - -#define SILICOM_PE2G6BPi35_SSID 0x03E0 -#define SILICOM_PE2G6BPi35CX_SSID 0x0AA0 - -#define INTEL_PE210G2SPI9_SSID 0x00C - -#define SILICOM_M1EG2BPI6_SSID 0x400 - -#define SILICOM_M1EG2BPFI6_SSID 0x0401 -#define SILICOM_M1EG2BPFI6LX_SSID 0x0402 -#define SILICOM_M1EG2BPFI6ZX_SSID 0x0403 - -#define SILICOM_M1EG4BPI6_SSID 0x0420 - -#define SILICOM_M1EG4BPFI6_SSID 0x0421 -#define SILICOM_M1EG4BPFI6LX_SSID 0x0422 -#define SILICOM_M1EG4BPFI6ZX_SSID 0x0423 - -#define SILICOM_M1EG6BPI6_SSID 0x0440 - -#define SILICOM_M1E2G4BPi80_SSID 0x0460 -#define SILICOM_M1E2G4BPFi80_SSID 0x0461 -#define SILICOM_M1E2G4BPFi80LX_SSID 0x0462 -#define SILICOM_M1E2G4BPFi80ZX_SSID 0x0463 - -#define SILICOM_M6E2G8BPi80_SSID 0x0470 -#define SILICOM_PE210G2BPi40_SSID 0x01a0 - -#define PEG540_IF_SERIES(pid) \ - ((pid == SILICOM_PE210G2BPi40_SSID)) - -#define OLD_IF_SERIES(pid)\ - ((pid == SILICOM_PXG2BPFI_SSID) || \ - (pid == SILICOM_PXG2BPFILX_SSID)) - -#define P2BPFI_IF_SERIES(pid) \ - ((pid == SILICOM_PXG2BPFI_SSID) || \ - (pid == SILICOM_PXG2BPFILX_SSID) || \ - (pid == SILICOM_PEG2BPFI_SSID) || \ - (pid == SILICOM_PEG2BPFID_SSID) || \ - (pid == SILICOM_PEG2BPFIDLX_SSID) || \ - (pid == SILICOM_MEG2BPFILN_SSID) || \ - (pid == SILICOM_MEG2BPFINX_SSID) || \ - (pid == SILICOM_PEG4BPFILX_SSID) || \ - (pid == SILICOM_PEG4BPFI_SSID) || \ - (pid == SILICOM_PXEG4BPFI_SSID) || \ - (pid == SILICOM_PXG4BPFID_SSID) || \ - (pid == SILICOM_PEG2TBFI_SSID) || \ - (pid == SILICOM_PE10G2BPISR_SSID) || \ - (pid == SILICOM_PE10G2BPILR_SSID) || \ - (pid == SILICOM_PEG2BPFILX_SSID) || \ - (pid == SILICOM_PMCXG2BPFI_SSID) || \ - (pid == SILICOM_MHIO8AD_SSID) || \ - (pid == SILICOM_PEG4BPFI5LX_SSID) || \ - (pid == SILICOM_PEG4BPFI5_SSID) || \ - (pid == SILICOM_PEG4BPFI6FC_SSID) || \ - (pid == SILICOM_PEG4BPFI6FCLX_SSID) || \ - (pid == SILICOM_PEG4BPFI6FCZX_SSID) || \ - (pid == NOKIA_PMCXG2BPFIN_SSID) || \ - (pid == SILICOM_MEG2BPFILXLN_SSID) || \ - (pid == SILICOM_MEG2BPFILXNX_SSID) || \ - (pid == SILICOM_XE10G2BPIT_SSID) || \ - (pid == SILICOM_XE10G2BPICX4_SSID) || \ - (pid == SILICOM_XE10G2BPISR_SSID) || \ - (pid == NOKIA_XE10G2BPIXR_SSID) || \ - (pid == SILICOM_PE10GDBISR_SSID) || \ - (pid == SILICOM_PE10GDBILR_SSID) || \ - (pid == SILICOM_XE10G2BPILR_SSID)) - -#define INTEL_IF_SERIES(pid) \ - ((pid == INTEL_PEG4BPII_SSID) || \ - (pid == INTEL_PEG4BPIIO_SSID) || \ - (pid == INTEL_PEG4BPFII_SSID)) - -#define NOKIA_SERIES(pid) \ - ((pid == NOKIA_PMCXG2BPIN_SSID) || \ - (pid == NOKIA_PMCXG4BPIN_SSID) || \ - (pid == SILICOM_PMCX4BPI_SSID) || \ - (pid == NOKIA_PMCXG2BPFIN_SSID) || \ - (pid == SILICOM_PMCXG2BPFI_SSID) || \ - (pid == NOKIA_PMCXG2BPIN2_SSID) || \ - (pid == NOKIA_PMCXG4BPIN2_SSID) || \ - (pid == SILICOM_PMCX2BPI_SSID)) - -#define DISCF_IF_SERIES(pid) \ - (pid == SILICOM_PEG2TBFI_SSID) - -#define PEGF_IF_SERIES(pid) \ - ((pid == SILICOM_PEG2BPFI_SSID) || \ - (pid == SILICOM_PEG2BPFID_SSID) || \ - (pid == SILICOM_PEG2BPFIDLX_SSID) || \ - (pid == SILICOM_PEG2BPFILX_SSID) || \ - (pid == SILICOM_PEG4BPFI_SSID) || \ - (pid == SILICOM_PXEG4BPFI_SSID) || \ - (pid == SILICOM_MEG2BPFILN_SSID) || \ - (pid == SILICOM_MEG2BPFINX_SSID) || \ - (pid == SILICOM_PEG4BPFILX_SSID) || \ - (pid == SILICOM_PEG2TBFI_SSID) || \ - (pid == SILICOM_MEG2BPFILXLN_SSID) || \ - (pid == SILICOM_MEG2BPFILXNX_SSID)) - -#define TPL_IF_SERIES(pid) \ - ((pid == SILICOM_PXG2BPFIL_SSID) || \ - (pid == SILICOM_PXG2BPFILLX_SSID) || \ - (pid == SILICOM_PXG2TBFI_SSID) || \ - (pid == SILICOM_PXG4BPFID_SSID) || \ - (pid == SILICOM_PXG4BPFI_SSID)) - -#define BP10G_IF_SERIES(pid) \ - ((pid == SILICOM_PE10G2BPISR_SSID) || \ - (pid == SILICOM_PE10G2BPICX4_SSID) || \ - (pid == SILICOM_PE10G2BPILR_SSID) || \ - (pid == SILICOM_XE10G2BPIT_SSID) || \ - (pid == SILICOM_XE10G2BPICX4_SSID) || \ - (pid == SILICOM_XE10G2BPISR_SSID) || \ - (pid == NOKIA_XE10G2BPIXR_SSID) || \ - (pid == SILICOM_PE10GDBISR_SSID) || \ - (pid == SILICOM_PE10GDBILR_SSID) || \ - (pid == SILICOM_XE10G2BPILR_SSID)) - -#define BP10GB_IF_SERIES(pid) \ - ((pid == SILICOM_PE10G2BPTCX4_SSID) || \ - (pid == SILICOM_PE10G2BPTSR_SSID) || \ - (pid == SILICOM_PE10G2BPTLR_SSID) || \ - (pid == SILICOM_PE10G2BPTT_SSID)) - -#define BP10G_CX4_SERIES(pid) \ - (pid == SILICOM_PE10G2BPICX4_SSID) - -#define BP10GB_CX4_SERIES(pid) \ - (pid == SILICOM_PE10G2BPTCX4_SSID) - -#define SILICOM_M2EG2BPFI6_SSID 0x0501 -#define SILICOM_M2EG2BPFI6LX_SSID 0x0502 -#define SILICOM_M2EG2BPFI6ZX_SSID 0x0503 -#define SILICOM_M2EG4BPI6_SSID 0x0520 - -#define SILICOM_M2EG4BPFI6_SSID 0x0521 -#define SILICOM_M2EG4BPFI6LX_SSID 0x0522 -#define SILICOM_M2EG4BPFI6ZX_SSID 0x0523 - -#define SILICOM_M2EG6BPI6_SSID 0x0540 - -#define SILICOM_M1E10G2BPI9CX4_SSID 0x481 -#define SILICOM_M1E10G2BPI9SR_SSID 0x482 -#define SILICOM_M1E10G2BPI9LR_SSID 0x483 -#define SILICOM_M1E10G2BPI9T_SSID 0x480 - -#define SILICOM_M2E10G2BPI9CX4_SSID 0x581 -#define SILICOM_M2E10G2BPI9SR_SSID 0x582 -#define SILICOM_M2E10G2BPI9LR_SSID 0x583 -#define SILICOM_M2E10G2BPI9T_SSID 0x580 - -#define SILICOM_PE210G2BPI9CX4_SSID 0x121 -#define SILICOM_PE210G2BPI9SR_SSID 0x122 -#define SILICOM_PE210G2BPI9LR_SSID 0x123 -#define SILICOM_PE210G2BPI9T_SSID 0x120 - -#define DBI_IF_SERIES(pid) \ - ((pid == SILICOM_PE10GDBISR_SSID) || \ - (pid == SILICOM_PE10GDBILR_SSID) || \ - (pid == SILICOM_XE10G2BPILR_SSID) || \ - (pid == SILICOM_PE210G2DBi9LR_SSID)) - -#define PEGF5_IF_SERIES(pid) \ - ((pid == SILICOM_PEG2BPFI5_SSID) || \ - (pid == SILICOM_PEG2BPFI5LX_SSID) || \ - (pid == SILICOM_PEG4BPFI6_SSID) || \ - (pid == SILICOM_PEG4BPFI6LX_SSID) || \ - (pid == SILICOM_PEG4BPFI6ZX_SSID) || \ - (pid == SILICOM_PEG2BPFI6_SSID) || \ - (pid == SILICOM_PEG2BPFI6LX_SSID) || \ - (pid == SILICOM_PEG2BPFI6ZX_SSID) || \ - (pid == SILICOM_PEG2BPFI6FLXM_SSID) || \ - (pid == SILICOM_PEG2DBFI6_SSID) || \ - (pid == SILICOM_PEG2DBFI6LX_SSID) || \ - (pid == SILICOM_PEG2DBFI6ZX_SSID) || \ - (pid == SILICOM_PEG4BPI6FC_SSID) || \ - (pid == SILICOM_PEG4BPFI6FCLX_SSID) || \ - (pid == SILICOM_PEG4BPI6FC_SSID) || \ - (pid == SILICOM_M1EG2BPFI6_SSID) || \ - (pid == SILICOM_M1EG2BPFI6LX_SSID) || \ - (pid == SILICOM_M1EG2BPFI6ZX_SSID) || \ - (pid == SILICOM_M1EG4BPFI6_SSID) || \ - (pid == SILICOM_M1EG4BPFI6LX_SSID) || \ - (pid == SILICOM_M1EG4BPFI6ZX_SSID) || \ - (pid == SILICOM_M2EG2BPFI6_SSID) || \ - (pid == SILICOM_M2EG2BPFI6LX_SSID) || \ - (pid == SILICOM_M2EG2BPFI6ZX_SSID) || \ - (pid == SILICOM_M2EG4BPFI6_SSID) || \ - (pid == SILICOM_M2EG4BPFI6LX_SSID) || \ - (pid == SILICOM_M2EG4BPFI6ZX_SSID) || \ - (pid == SILICOM_PEG4BPFI6FCZX_SSID)) - -#define PEG5_IF_SERIES(pid) \ - ((pid == SILICOM_PEG4BPI6_SSID) || \ - (pid == SILICOM_PEG2BPI6_SSID) || \ - (pid == SILICOM_PEG4BPI6FC_SSID) || \ - (pid == SILICOM_PEG6BPI6_SSID) || \ - (pid == SILICOM_PEG2BPI6SC6_SSID) || \ - (pid == SILICOM_MEG2BPI6_SSID) || \ - (pid == SILICOM_XEG2BPI6_SSID) || \ - (pid == SILICOM_MEG4BPI6_SSID) || \ - (pid == SILICOM_M1EG2BPI6_SSID) || \ - (pid == SILICOM_M1EG4BPI6_SSID) || \ - (pid == SILICOM_M1EG6BPI6_SSID) || \ - (pid == SILICOM_PEG6BPI_SSID) || \ - (pid == SILICOM_PEG4BPIL_SSID) || \ - (pid == SILICOM_PEG2BISC6_SSID) || \ - (pid == SILICOM_PEG2BPI5_SSID)) - -#define PEG80_IF_SERIES(pid) \ - ((pid == SILICOM_M1E2G4BPi80_SSID) || \ - (pid == SILICOM_M6E2G8BPi80_SSID) || \ - (pid == SILICOM_PE2G4BPi80L_SSID) || \ - (pid == SILICOM_M6E2G8BPi80A_SSID) || \ - (pid == SILICOM_PE2G2BPi35_SSID) || \ - (pid == SILICOM_PAC1200BPi35_SSID) || \ - (pid == SILICOM_PE2G4BPi35_SSID) || \ - (pid == SILICOM_PE2G4BPi35L_SSID) || \ - (pid == SILICOM_PE2G6BPi35_SSID) || \ - (pid == SILICOM_PE2G2BPi80_SSID) || \ - (pid == SILICOM_PE2G4BPi80_SSID) || \ - (pid == SILICOM_PE2G4BPFi80_SSID) || \ - (pid == SILICOM_PE2G4BPFi80LX_SSID) || \ - (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G2BPFi80_SSID) || \ - (pid == SILICOM_PE2G2BPFi80LX_SSID) || \ - (pid == SILICOM_PE2G2BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G2BPFi35_SSID) || \ - (pid == SILICOM_PE2G2BPFi35LX_SSID) || \ - (pid == SILICOM_PE2G2BPFi35ZX_SSID) || \ - (pid == SILICOM_PE2G4BPFi35_SSID) || \ - (pid == SILICOM_PE2G4BPFi35LX_SSID) || \ - (pid == SILICOM_PE2G4BPFi35ZX_SSID)) - -#define PEGF80_IF_SERIES(pid) \ - ((pid == SILICOM_PE2G4BPFi80_SSID) || \ - (pid == SILICOM_PE2G4BPFi80LX_SSID) || \ - (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \ - (pid == SILICOM_M1E2G4BPFi80_SSID) || \ - (pid == SILICOM_M1E2G4BPFi80LX_SSID) || \ - (pid == SILICOM_M1E2G4BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G2BPFi80_SSID) || \ - (pid == SILICOM_PE2G2BPFi80LX_SSID) || \ - (pid == SILICOM_PE2G2BPFi80ZX_SSID) || \ - (pid == SILICOM_PE2G2BPFi35_SSID) || \ - (pid == SILICOM_PE2G2BPFi35LX_SSID) || \ - (pid == SILICOM_PE2G2BPFi35ZX_SSID) || \ - (pid == SILICOM_PE2G4BPFi35_SSID) || \ - (pid == SILICOM_PE2G4BPFi35LX_SSID) || \ - (pid == SILICOM_PE2G4BPFi35ZX_SSID)) - -#define BP10G9_IF_SERIES(pid) \ - ((pid == INTEL_PE210G2SPI9_SSID) || \ - (pid == SILICOM_M1E10G2BPI9CX4_SSID) || \ - (pid == SILICOM_M1E10G2BPI9SR_SSID) || \ - (pid == SILICOM_M1E10G2BPI9LR_SSID) || \ - (pid == SILICOM_M1E10G2BPI9T_SSID) || \ - (pid == SILICOM_M2E10G2BPI9CX4_SSID) || \ - (pid == SILICOM_M2E10G2BPI9SR_SSID) || \ - (pid == SILICOM_M2E10G2BPI9LR_SSID) || \ - (pid == SILICOM_M2E10G2BPI9T_SSID) || \ - (pid == SILICOM_PE210G2BPI9CX4_SSID) || \ - (pid == SILICOM_PE210G2BPI9SR_SSID) || \ - (pid == SILICOM_PE210G2BPI9LR_SSID) || \ - (pid == SILICOM_PE210G2DBi9SR_SSID) || \ - (pid == SILICOM_PE210G2DBi9SRRB_SSID) || \ - (pid == SILICOM_PE210G2DBi9LR_SSID) || \ - (pid == SILICOM_PE210G2DBi9LRRB_SSID) || \ - (pid == SILICOM_PE310G4DBi940SR_SSID) || \ - (pid == SILICOM_PEG2BISC6_SSID) || \ - (pid == SILICOM_PE310G4BPi9T_SSID) || \ - (pid == SILICOM_PE310G4BPi9SR_SSID) || \ - (pid == SILICOM_PE310G4BPi9LR_SSID) || \ - (pid == SILICOM_PE210G2BPI9T_SSID)) - -/*******************************************************/ -/* 1G INTERFACE ****************************************/ -/*******************************************************/ - -/* Intel Registers */ -#define BPCTLI_CTRL 0x00000 -#define BPCTLI_CTRL_SWDPIO0 0x00400000 -#define BPCTLI_CTRL_SWDPIN0 0x00040000 - -#define BPCTLI_CTRL_EXT 0x00018 /* Extended Device Control - RW */ -#define BPCTLI_STATUS 0x00008 /* Device Status - RO */ - -/* HW related */ -#define BPCTLI_CTRL_EXT_SDP6_DATA 0x00000040 /* Value of SW - * Defineable Pin 6 - */ -#define BPCTLI_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW - * Defineable Pin 7 - */ -#define BPCTLI_CTRL_SDP0_DATA 0x00040000 /* SWDPIN 0 value */ -#define BPCTLI_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 - * 0=in 1=out - */ -#define BPCTLI_CTRL_EXT_SDP7_DIR 0x00000800 /* Direction of SDP7 - * 0=in 1=out - */ -#define BPCTLI_CTRL_SDP0_DIR 0x00400000 /* SDP0 Input or output */ -#define BPCTLI_CTRL_SWDPIN1 0x00080000 -#define BPCTLI_CTRL_SDP1_DIR 0x00800000 - -#define BPCTLI_STATUS_LU 0x00000002 /* Link up.0=no,1=link */ - -#define BPCTLI_CTRL_SDP0_SHIFT 18 -#define BPCTLI_CTRL_EXT_SDP6_SHIFT 6 - -#define BPCTLI_STATUS_TBIMODE 0x00000020 -#define BPCTLI_CTRL_EXT_LINK_MODE_PCIE_SERDES 0x00C00000 -#define BPCTLI_CTRL_EXT_LINK_MODE_MASK 0x00C00000 - -#define BPCTLI_CTRL_EXT_MCLK_DIR BPCTLI_CTRL_EXT_SDP7_DIR -#define BPCTLI_CTRL_EXT_MCLK_DATA BPCTLI_CTRL_EXT_SDP7_DATA -#define BPCTLI_CTRL_EXT_MDIO_DIR BPCTLI_CTRL_EXT_SDP6_DIR -#define BPCTLI_CTRL_EXT_MDIO_DATA BPCTLI_CTRL_EXT_SDP6_DATA - -#define BPCTLI_CTRL_EXT_MCLK_DIR5 BPCTLI_CTRL_SDP1_DIR -#define BPCTLI_CTRL_EXT_MCLK_DATA5 BPCTLI_CTRL_SWDPIN1 -#define BPCTLI_CTRL_EXT_MCLK_DIR80 BPCTLI_CTRL_EXT_SDP6_DIR -#define BPCTLI_CTRL_EXT_MCLK_DATA80 BPCTLI_CTRL_EXT_SDP6_DATA -#define BPCTLI_CTRL_EXT_MDIO_DIR5 BPCTLI_CTRL_SWDPIO0 -#define BPCTLI_CTRL_EXT_MDIO_DATA5 BPCTLI_CTRL_SWDPIN0 -#define BPCTLI_CTRL_EXT_MDIO_DIR80 BPCTLI_CTRL_SWDPIO0 -#define BPCTLI_CTRL_EXT_MDIO_DATA80 BPCTLI_CTRL_SWDPIN0 - -#define BPCTL_WRITE_REG(a, reg, value) \ - (writel((value), (void *)(((a)->mem_map) + BPCTLI_##reg))) - -#define BPCTL_READ_REG(a, reg) ( \ - readl((void *)((a)->mem_map) + BPCTLI_##reg)) - -#define BPCTL_WRITE_FLUSH(a) BPCTL_READ_REG(a, STATUS) - -#define BPCTL_BP_WRITE_REG(a, reg, value) ({ \ - BPCTL_WRITE_REG(a, reg, value); \ - BPCTL_WRITE_FLUSH(a); }) - -/**************************************************************/ -/************** 82575 Interface********************************/ -/**************************************************************/ - -#define BPCTLI_MII_CR_POWER_DOWN 0x0800 -#define BPCTLI_PHY_CONTROL 0x00 /* Control Register */ -#define BPCTLI_MDIC 0x00020 /* MDI Control - RW */ -#define BPCTLI_IGP01E1000_PHY_PAGE_SELECT 0x1F /* Page Select */ -#define BPCTLI_MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */ - -#define BPCTLI_MDIC_DATA_MASK 0x0000FFFF -#define BPCTLI_MDIC_REG_MASK 0x001F0000 -#define BPCTLI_MDIC_REG_SHIFT 16 -#define BPCTLI_MDIC_PHY_MASK 0x03E00000 -#define BPCTLI_MDIC_PHY_SHIFT 21 -#define BPCTLI_MDIC_OP_WRITE 0x04000000 -#define BPCTLI_MDIC_OP_READ 0x08000000 -#define BPCTLI_MDIC_READY 0x10000000 -#define BPCTLI_MDIC_INT_EN 0x20000000 -#define BPCTLI_MDIC_ERROR 0x40000000 - -#define BPCTLI_SWFW_PHY0_SM 0x02 -#define BPCTLI_SWFW_PHY1_SM 0x04 - -#define BPCTLI_SW_FW_SYNC 0x05B5C /* Software-Firmware - * Synchronization - RW - */ - -#define BPCTLI_SWSM 0x05B50 /* SW Semaphore */ -#define BPCTLI_FWSM 0x05B54 /* FW Semaphore */ - -#define BPCTLI_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ -#define BPCTLI_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ -#define BPCTLI_MAX_PHY_MULTI_PAGE_REG 0xF -#define BPCTLI_GEN_POLL_TIMEOUT 640 - -/********************************************************/ - -/********************************************************/ -/* 10G INTERFACE ****************************************/ -/********************************************************/ - -#define BP10G_I2CCTL 0x28 - -/* I2CCTL Bit Masks */ -#define BP10G_I2C_CLK_IN 0x00000001 -#define BP10G_I2C_CLK_OUT 0x00000002 -#define BP10G_I2C_DATA_IN 0x00000004 -#define BP10G_I2C_DATA_OUT 0x00000008 - -#define BP10G_ESDP 0x20 - -#define BP10G_SDP0_DIR 0x100 -#define BP10G_SDP1_DIR 0x200 -#define BP10G_SDP3_DIR 0x800 -#define BP10G_SDP4_DIR BIT_12 -#define BP10G_SDP5_DIR 0x2000 -#define BP10G_SDP0_DATA 0x001 -#define BP10G_SDP1_DATA 0x002 -#define BP10G_SDP3_DATA 0x008 -#define BP10G_SDP4_DATA 0x010 -#define BP10G_SDP5_DATA 0x020 - -#define BP10G_SDP2_DIR 0x400 -#define BP10G_SDP2_DATA 0x4 - -#define BP10G_EODSDP 0x28 - -#define BP10G_SDP6_DATA_IN 0x001 -#define BP10G_SDP6_DATA_OUT 0x002 - -#define BP10G_SDP7_DATA_IN 0x004 -#define BP10G_SDP7_DATA_OUT 0x008 - -#define BP10G_MCLK_DATA_OUT BP10G_SDP7_DATA_OUT -#define BP10G_MDIO_DATA_OUT BP10G_SDP6_DATA_OUT -#define BP10G_MDIO_DATA_IN BP10G_SDP6_DATA_IN - -#define BP10G_MDIO_DATA /*BP10G_SDP5_DATA*/ BP10G_SDP3_DATA -#define BP10G_MDIO_DIR /*BP10G_SDP5_DIR*/ BP10G_SDP3_DATA - -/*#define BP10G_MCLK_DATA_OUT9 BP10G_I2C_CLK_OUT -#define BP10G_MDIO_DATA_OUT9 BP10G_I2C_DATA_OUT*/ - - /*#define BP10G_MCLK_DATA_OUT9*/ - /*BP10G_I2C_DATA_OUT */ -#define BP10G_MDIO_DATA_OUT9 BP10G_I2C_DATA_OUT /*BP10G_I2C_CLK_OUT */ - -/* VIA EOSDP ! */ -#define BP10G_MCLK_DATA_OUT9 BP10G_SDP4_DATA -#define BP10G_MCLK_DIR_OUT9 BP10G_SDP4_DIR - -/*#define BP10G_MDIO_DATA_IN9 BP10G_I2C_DATA_IN*/ - -#define BP10G_MDIO_DATA_IN9 BP10G_I2C_DATA_IN /*BP10G_I2C_CLK_IN */ - -#define BP540_MDIO_DATA /*BP10G_SDP5_DATA*/ BP10G_SDP0_DATA -#define BP540_MDIO_DIR /*BP10G_SDP5_DIR*/ BP10G_SDP0_DIR -#define BP540_MCLK_DATA BP10G_SDP2_DATA -#define BP540_MCLK_DIR BP10G_SDP2_DIR - -#define BP10G_WRITE_REG(a, reg, value) \ - (writel((value), (void *)(((a)->mem_map) + BP10G_##reg))) - -#define BP10G_READ_REG(a, reg) ( \ - readl((void *)((a)->mem_map) + BP10G_##reg)) - -/*****BROADCOM*******************************************/ - -#define BP10GB_MISC_REG_GPIO 0xa490 -#define BP10GB_GPIO3_P0 BIT_3 -#define BP10GB_GPIO3_P1 BIT_7 - -#define BP10GB_GPIO3_SET_P0 BIT_11 -#define BP10GB_GPIO3_CLR_P0 BIT_19 -#define BP10GB_GPIO3_OE_P0 BIT_27 - -#define BP10GB_GPIO3_SET_P1 BIT_15 -#define BP10GB_GPIO3_CLR_P1 BIT_23 -#define BP10GB_GPIO3_OE_P1 BIT_31 - -#define BP10GB_GPIO0_P1 0x10 -#define BP10GB_GPIO0_P0 0x1 -#define BP10GB_GPIO0_CLR_P0 0x10000 -#define BP10GB_GPIO0_CLR_P1 0x100000 -#define BP10GB_GPIO0_SET_P0 0x100 -#define BP10GB_GPIO0_SET_P1 0x1000 - -#define BP10GB_GPIO0_OE_P1 0x10000000 -#define BP10GB_GPIO0_OE_P0 0x1000000 - -#define BP10GB_MISC_REG_SPIO 0xa4fc -#define BP10GB_GPIO4_OE BIT_28 -#define BP10GB_GPIO5_OE BIT_29 -#define BP10GB_GPIO4_CLR BIT_20 -#define BP10GB_GPIO5_CLR BIT_21 -#define BP10GB_GPIO4_SET BIT_12 -#define BP10GB_GPIO5_SET BIT_13 -#define BP10GB_GPIO4 BIT_4 -#define BP10GB_GPIO5 BIT_5 - -#define BP10GB_MCLK_DIR BP10GB_GPIO5_OE -#define BP10GB_MDIO_DIR BP10GB_GPIO4_OE - -#define BP10GB_MCLK_DATA BP10GB_GPIO5 -#define BP10GB_MDIO_DATA BP10GB_GPIO4 - -#define BP10GB_MCLK_SET BP10GB_GPIO5_SET -#define BP10GB_MDIO_SET BP10GB_GPIO4_SET - -#define BP10GB_MCLK_CLR BP10GB_GPIO5_CLR -#define BP10GB_MDIO_CLR BP10GB_GPIO4_CLR - -#define BP10GB_WRITE_REG(a, reg, value) \ - (writel((value), (void *)(((a)->mem_map) + BP10GB_##reg))) - -#define BP10GB_READ_REG(a, reg) ( \ - readl((void *)((a)->mem_map) + BP10GB_##reg)) - -#endif diff --git a/drivers/staging/silicom/bpctl_mod.c b/drivers/staging/silicom/bpctl_mod.c deleted file mode 100644 index 765fce84d9dd..000000000000 --- a/drivers/staging/silicom/bpctl_mod.c +++ /dev/null @@ -1,7530 +0,0 @@ -/******************************************************************************/ -/* */ -/* Bypass Control utility, Copyright (c) 2005-2011 Silicom */ -/* */ -/* 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, located in the file LICENSE. */ -/* Copyright(c) 2007 - 2009, 2013 Intel Corporation. All rights reserved. */ -/* */ -/* */ -/******************************************************************************/ - -#include /* We're doing kernel work */ -#include /* Specifically, a module */ -#include -#include -#include -#include -#include -#include -#include - -#include /* for get_user and put_user */ -#include -#include -#include - -#include "bp_ioctl.h" -#include "bp_mod.h" -#include "bypass.h" -#include "libbp_sd.h" - -#define SUCCESS 0 -#define BP_MOD_VER "9.0.4" -#define BP_MOD_DESCR "Silicom Bypass-SD Control driver" -#define BP_SYNC_FLAG 1 - -static int major_num; - -MODULE_AUTHOR("Anna Lukin, annal@silicom.co.il"); -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION(BP_MOD_DESCR); -MODULE_VERSION(BP_MOD_VER); -static spinlock_t bpvm_lock; - -#define unlock_bpctl() \ - up(&bpctl_sema); - -/* Media Types */ -enum bp_media_type { - BP_COPPER = 0, - BP_FIBER, - BP_CX4, - BP_NONE, -}; - -struct bypass_pfs_sd { - char dir_name[32]; - struct proc_dir_entry *bypass_entry; -}; - -struct bpctl_dev { - char *name; - char *desc; - struct pci_dev *pdev; /* PCI device */ - struct net_device *ndev; /* net device */ - unsigned long mem_map; - uint8_t bus; - uint8_t slot; - uint8_t func; - u_int32_t device; - u_int32_t vendor; - u_int32_t subvendor; - u_int32_t subdevice; - int ifindex; - uint32_t bp_caps; - uint32_t bp_caps_ex; - uint8_t bp_fw_ver; - int bp_ext_ver; - int wdt_status; - unsigned long bypass_wdt_on_time; - uint32_t bypass_timer_interval; - struct timer_list bp_timer; - uint32_t reset_time; - uint8_t bp_status_un; - atomic_t wdt_busy; - enum bp_media_type media_type; - int bp_tpl_flag; - struct timer_list bp_tpl_timer; - spinlock_t bypass_wr_lock; - int bp_10g; - int bp_10gb; - int bp_fiber5; - int bp_10g9; - int bp_i80; - int bp_540; - int (*hard_start_xmit_save) (struct sk_buff *skb, - struct net_device *dev); - const struct net_device_ops *old_ops; - struct net_device_ops new_ops; - int bp_self_test_flag; - char *bp_tx_data; - struct bypass_pfs_sd bypass_pfs_set; - -}; - -static struct bpctl_dev *bpctl_dev_arr; - -static struct semaphore bpctl_sema; -static int device_num; - -static int get_dev_idx(int ifindex); -static struct bpctl_dev *get_master_port_fn(struct bpctl_dev *pbpctl_dev); -static int disc_status(struct bpctl_dev *pbpctl_dev); -static int bypass_status(struct bpctl_dev *pbpctl_dev); -static int wdt_timer(struct bpctl_dev *pbpctl_dev, int *time_left); -static struct bpctl_dev *get_status_port_fn(struct bpctl_dev *pbpctl_dev); -static void if_scan_init(void); - -static int bypass_proc_create_dev_sd(struct bpctl_dev *pbp_device_block); -static int bypass_proc_remove_dev_sd(struct bpctl_dev *pbp_device_block); - -static int is_bypass_fn(struct bpctl_dev *pbpctl_dev); -static int get_dev_idx_bsf(int bus, int slot, int func); - -static int bp_get_dev_idx_bsf(struct net_device *dev, int *index) -{ - struct ethtool_drvinfo drvinfo = {0}; - char *buf; - int bus, slot, func; - - if (dev->ethtool_ops && dev->ethtool_ops->get_drvinfo) - dev->ethtool_ops->get_drvinfo(dev, &drvinfo); - else - return -EOPNOTSUPP; - - if (!strcmp(drvinfo.bus_info, "N/A")) - return -ENODATA; - - buf = strchr(drvinfo.bus_info, ':'); - if (!buf) - return -EINVAL; - buf++; - if (sscanf(buf, "%x:%x.%x", &bus, &slot, &func) != 3) - return -EINVAL; - - *index = get_dev_idx_bsf(bus, slot, func); - return 0; -} - -static int bp_device_event(struct notifier_block *unused, - unsigned long event, void *ptr) -{ - struct net_device *dev = netdev_notifier_info_to_dev(ptr); - static struct bpctl_dev *pbpctl_dev, *pbpctl_dev_m; - int dev_num = 0, ret = 0, ret_d = 0, time_left = 0; - - /* printk("BP_PROC_SUPPORT event =%d %s %d\n", event,dev->name, dev->ifindex ); */ - /* return NOTIFY_DONE; */ - if (!dev) - return NOTIFY_DONE; - - if (event == NETDEV_REGISTER) { - int idx_dev; - - if (bp_get_dev_idx_bsf(dev, &idx_dev)) - return NOTIFY_DONE; - - if (idx_dev == -1) - return NOTIFY_DONE; - - bpctl_dev_arr[idx_dev].ifindex = dev->ifindex; - bpctl_dev_arr[idx_dev].ndev = dev; - - bypass_proc_remove_dev_sd(&bpctl_dev_arr[idx_dev]); - bypass_proc_create_dev_sd(&bpctl_dev_arr[idx_dev]); - return NOTIFY_DONE; - } - if (event == NETDEV_UNREGISTER) { - int idx_dev = 0; - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if (bpctl_dev_arr[idx_dev].ndev == dev) { - bypass_proc_remove_dev_sd(&bpctl_dev_arr - [idx_dev]); - bpctl_dev_arr[idx_dev].ndev = NULL; - - return NOTIFY_DONE; - - } - - } - return NOTIFY_DONE; - } - if (event == NETDEV_CHANGENAME) { - int idx_dev = 0; - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if (bpctl_dev_arr[idx_dev].ndev == dev) { - bypass_proc_remove_dev_sd(&bpctl_dev_arr - [idx_dev]); - bypass_proc_create_dev_sd(&bpctl_dev_arr - [idx_dev]); - - return NOTIFY_DONE; - - } - - } - return NOTIFY_DONE; - - } - - switch (event) { - - case NETDEV_CHANGE:{ - if (netif_carrier_ok(dev)) - return NOTIFY_DONE; - - dev_num = get_dev_idx(dev->ifindex); - if (dev_num == -1) - return NOTIFY_DONE; - - pbpctl_dev = &bpctl_dev_arr[dev_num]; - if (!pbpctl_dev) - return NOTIFY_DONE; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (!pbpctl_dev_m) - return NOTIFY_DONE; - ret = bypass_status(pbpctl_dev_m); - if (ret == 1) - printk("bpmod: %s is in the Bypass mode now", - dev->name); - ret_d = disc_status(pbpctl_dev_m); - if (ret_d == 1) - printk - ("bpmod: %s is in the Disconnect mode now", - dev->name); - if (ret || ret_d) { - wdt_timer(pbpctl_dev_m, &time_left); - if (time_left == -1) - printk("; WDT has expired"); - printk(".\n"); - - } - return NOTIFY_DONE; - - } - - default: - return NOTIFY_DONE; - - } - return NOTIFY_DONE; - -} - -static struct notifier_block bp_notifier_block = { - .notifier_call = bp_device_event, -}; - -static int is_bypass_fn(struct bpctl_dev *pbpctl_dev); -int wdt_time_left(struct bpctl_dev *pbpctl_dev); - -static void write_pulse(struct bpctl_dev *pbpctl_dev, - unsigned int ctrl_ext, - unsigned char value, unsigned char len) -{ - unsigned char ctrl_val = 0; - unsigned int i = len; - unsigned int ctrl = 0; - struct bpctl_dev *pbpctl_dev_c = NULL; - - if (pbpctl_dev->bp_i80) - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - if (pbpctl_dev->bp_540) - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - - if (pbpctl_dev->bp_10g9) { - pbpctl_dev_c = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_c) - return; - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - } - - while (i--) { - ctrl_val = (value >> i) & 0x1; - if (ctrl_val) { - if (pbpctl_dev->bp_10g9) { - - /* To start management : MCLK 1, MDIO 1, output */ - /* DATA 1 CLK 1 */ - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext|BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9)); */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - ctrl_ext | - BP10G_MDIO_DATA_OUT9); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DATA_OUT9 | - BP10G_MCLK_DIR_OUT9)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, (ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5)); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, (ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80 - | - BPCTLI_CTRL_EXT_MDIO_DATA80)); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, (ctrl | - BPCTLI_CTRL_EXT_MCLK_DIR80 - | - BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, (ctrl | - BP540_MDIO_DIR - | - BP540_MDIO_DATA - | - BP540_MCLK_DIR - | - BP540_MCLK_DATA)); - - } else if (pbpctl_dev->bp_10gb) { - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_SET | - BP10GB_MCLK_SET) & - ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_DIR | - BP10GB_MDIO_CLR | - BP10GB_MCLK_CLR)); - - } else if (!pbpctl_dev->bp_10g) - /* To start management : MCLK 1, MDIO 1, output */ - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR | - BPCTLI_CTRL_EXT_MDIO_DIR | - BPCTLI_CTRL_EXT_MDIO_DATA | - BPCTLI_CTRL_EXT_MCLK_DATA)); - else { - - /* To start management : MCLK 1, MDIO 1, output*/ - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext | BP10G_MCLK_DATA_OUT - | BP10G_MDIO_DATA_OUT)); - - } - - usec_delay(PULSE_TIME); - if (pbpctl_dev->bp_10g9) { - - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, ((ctrl_ext|BP10G_MDIO_DATA_OUT9)&~(BP10G_MCLK_DATA_OUT9))); */ - /* DATA 1 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - ctrl_ext | - BP10G_MDIO_DATA_OUT9); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DIR_OUT9) & - ~BP10G_MCLK_DATA_OUT9); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 | - BPCTLI_CTRL_EXT_MDIO_DIR5 | - BPCTLI_CTRL_EXT_MDIO_DATA5) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, (ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80 - | - BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | - BPCTLI_CTRL_EXT_MCLK_DIR80) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA80))); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (ctrl | BP540_MDIO_DIR | - BP540_MDIO_DATA | - BP540_MCLK_DIR) & - ~(BP540_MCLK_DATA)); - - } else if (pbpctl_dev->bp_10gb) { - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_SET | - BP10GB_MCLK_CLR) & - ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_DIR | - BP10GB_MDIO_CLR | - BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR | - BPCTLI_CTRL_EXT_MDIO_DIR | - BPCTLI_CTRL_EXT_MDIO_DATA) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - ((ctrl_ext | - BP10G_MDIO_DATA_OUT) & - ~(BP10G_MCLK_DATA_OUT))); - } - - usec_delay(PULSE_TIME); - - } else { - if (pbpctl_dev->bp_10g9) { - /* DATA 0 CLK 1 */ - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, ((ctrl_ext|BP10G_MCLK_DATA_OUT9)&~BP10G_MDIO_DATA_OUT9)); */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & - ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DATA_OUT9 | - BP10G_MCLK_DIR_OUT9)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 | - BPCTLI_CTRL_EXT_MDIO_DIR5 | - BPCTLI_CTRL_EXT_MCLK_DATA5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA80))); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl | - BPCTLI_CTRL_EXT_MCLK_DIR80 | - BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP540_MCLK_DIR | - BP540_MCLK_DATA | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | - BP10GB_MCLK_SET) & - ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | - BP10GB_MCLK_CLR)); - - } else if (!pbpctl_dev->bp_10g) - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR | - BPCTLI_CTRL_EXT_MDIO_DIR | - BPCTLI_CTRL_EXT_MCLK_DATA) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - ((ctrl_ext | - BP10G_MCLK_DATA_OUT) & - ~BP10G_MDIO_DATA_OUT)); - - } - usec_delay(PULSE_TIME); - if (pbpctl_dev->bp_10g9) { - /* DATA 0 CLK 0 */ - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & - ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~(BPCTLI_CTRL_EXT_MCLK_DATA5 - | - BPCTLI_CTRL_EXT_MDIO_DATA5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | - BPCTLI_CTRL_EXT_MCLK_DIR80) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA80))); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP540_MCLK_DIR | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - } else if (pbpctl_dev->bp_10gb) { - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | - BP10GB_MCLK_CLR) & - ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | - BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR | - BPCTLI_CTRL_EXT_MDIO_DIR) & - ~(BPCTLI_CTRL_EXT_MCLK_DATA - | - BPCTLI_CTRL_EXT_MDIO_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | - BP10G_MDIO_DATA_OUT))); - } - - usec_delay(PULSE_TIME); - } - - } -} - -static int read_pulse(struct bpctl_dev *pbpctl_dev, unsigned int ctrl_ext, - unsigned char len) -{ - unsigned char ctrl_val = 0; - unsigned int i = len; - unsigned int ctrl = 0; - struct bpctl_dev *pbpctl_dev_c = NULL; - - if (pbpctl_dev->bp_i80) - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - if (pbpctl_dev->bp_540) - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - if (pbpctl_dev->bp_10g9) { - pbpctl_dev_c = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_c) - return -1; - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - } - - - while (i--) { - if (pbpctl_dev->bp_10g9) { - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, ((ctrl_ext|BP10G_MDIO_DATA_OUT9)&~BP10G_MCLK_DATA_OUT9)); */ - /* DATA ? CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl_ext & - ~BPCTLI_CTRL_EXT_MDIO_DIR80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) - & ~(BPCTLI_CTRL_EXT_MCLK_DATA80))); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP540_MCLK_DIR) & - ~(BP540_MDIO_DIR | BP540_MCLK_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_DIR | - BP10GB_MCLK_CLR) & ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_CLR | - BP10GB_MDIO_SET | - BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, ((ctrl_ext | BP10G_MDIO_DATA_OUT) & ~BP10G_MCLK_DATA_OUT)); /* ? */ - /* printk("0x28=0x%x\n",BP10G_READ_REG(pbpctl_dev,EODSDP);); */ - - } - - usec_delay(PULSE_TIME); - if (pbpctl_dev->bp_10g9) { - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext|BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9)); */ - /* DATA ? CLK 1 */ - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DATA_OUT9 | - BP10G_MCLK_DIR_OUT9)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl_ext & - ~(BPCTLI_CTRL_EXT_MDIO_DIR80))); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80 | - BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP540_MCLK_DIR | - BP540_MCLK_DATA) & - ~(BP540_MDIO_DIR))); - - } else if (pbpctl_dev->bp_10gb) { - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_DIR | - BP10GB_MCLK_SET) & ~(BP10GB_MCLK_DIR | - BP10GB_MDIO_CLR | - BP10GB_MDIO_SET | - BP10GB_MCLK_CLR)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MCLK_DATA) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext | BP10G_MCLK_DATA_OUT | - BP10G_MDIO_DATA_OUT)); - - } - - if (pbpctl_dev->bp_10g9) - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - else if ((pbpctl_dev->bp_fiber5) || (pbpctl_dev->bp_i80)) - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - else if (pbpctl_dev->bp_540) - ctrl_ext = BP10G_READ_REG(pbpctl_dev, ESDP); - else if (pbpctl_dev->bp_10gb) - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - else if (!pbpctl_dev->bp_10g) - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - else - ctrl_ext = BP10G_READ_REG(pbpctl_dev, EODSDP); - - usec_delay(PULSE_TIME); - if (pbpctl_dev->bp_10g9) { - if (ctrl_ext & BP10G_MDIO_DATA_IN9) - ctrl_val |= 1 << i; - - } else if (pbpctl_dev->bp_fiber5) { - if (ctrl_ext & BPCTLI_CTRL_EXT_MDIO_DATA5) - ctrl_val |= 1 << i; - } else if (pbpctl_dev->bp_i80) { - if (ctrl_ext & BPCTLI_CTRL_EXT_MDIO_DATA80) - ctrl_val |= 1 << i; - } else if (pbpctl_dev->bp_540) { - if (ctrl_ext & BP540_MDIO_DATA) - ctrl_val |= 1 << i; - } else if (pbpctl_dev->bp_10gb) { - if (ctrl_ext & BP10GB_MDIO_DATA) - ctrl_val |= 1 << i; - - } else if (!pbpctl_dev->bp_10g) { - - if (ctrl_ext & BPCTLI_CTRL_EXT_MDIO_DATA) - ctrl_val |= 1 << i; - } else { - - if (ctrl_ext & BP10G_MDIO_DATA_IN) - ctrl_val |= 1 << i; - } - - } - - return ctrl_val; -} - -static void write_reg(struct bpctl_dev *pbpctl_dev, unsigned char value, - unsigned char addr) -{ - uint32_t ctrl_ext = 0, ctrl = 0; - struct bpctl_dev *pbpctl_dev_c = NULL; - unsigned long flags; - - if (pbpctl_dev->bp_10g9) { - pbpctl_dev_c = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_c) - return; - } - if ((pbpctl_dev->wdt_status == WDT_STATUS_EN) && - (pbpctl_dev->bp_ext_ver < PXG4BPFI_VER)) - wdt_time_left(pbpctl_dev); - -#ifdef BP_SYNC_FLAG - spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 1); -#endif - if (pbpctl_dev->bp_10g9) { - - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - /* DATA 0 CLK 0 */ - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - } else if (pbpctl_dev->bp_i80) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - ctrl = ctrl_ext = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | - BP540_MDIO_DIR | - BP540_MCLK_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) { - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - } else { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - ctrl_ext = BP10G_READ_REG(pbpctl_dev, EODSDP); - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - } - usec_delay(CMND_INTERVAL); - - /*send sync cmd */ - write_pulse(pbpctl_dev, ctrl_ext, SYNC_CMD_VAL, SYNC_CMD_LEN); - /*send wr cmd */ - write_pulse(pbpctl_dev, ctrl_ext, WR_CMD_VAL, WR_CMD_LEN); - write_pulse(pbpctl_dev, ctrl_ext, addr, ADDR_CMD_LEN); - - /*write data */ - write_pulse(pbpctl_dev, ctrl_ext, value, WR_DATA_LEN); - if (pbpctl_dev->bp_10g9) { - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - /* DATA 0 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | - BP540_MDIO_DIR | - BP540_MCLK_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - } else if (pbpctl_dev->bp_10gb) { - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - else { - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - - } - - usec_delay(CMND_INTERVAL * 4); - - if ((pbpctl_dev->wdt_status == WDT_STATUS_EN) && - (pbpctl_dev->bp_ext_ver < PXG4BPFI_VER) && (addr == CMND_REG_ADDR)) - pbpctl_dev->bypass_wdt_on_time = jiffies; -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 0); -#endif - -} - -static void write_data(struct bpctl_dev *pbpctl_dev, unsigned char value) -{ - write_reg(pbpctl_dev, value, CMND_REG_ADDR); -} - -static int read_reg(struct bpctl_dev *pbpctl_dev, unsigned char addr) -{ - uint32_t ctrl_ext = 0, ctrl = 0, ctrl_value = 0; - struct bpctl_dev *pbpctl_dev_c = NULL; - -#ifdef BP_SYNC_FLAG - unsigned long flags; - - spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 1); -#endif - if (pbpctl_dev->bp_10g9) { - pbpctl_dev_c = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_c) - return -1; - } - - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - /* DATA 0 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - } else if (pbpctl_dev->bp_i80) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - } else if (pbpctl_dev->bp_540) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev, ESDP); - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | BP540_MCLK_DIR | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); -#if 0 - - /*BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, (ctrl_ext | BP10GB_MCLK_DIR | BP10GB_MDIO_DIR| - BP10GB_MCLK_CLR|BP10GB_MDIO_CLR)); - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - printk("1reg=%x\n", ctrl_ext); */ - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, ((ctrl_ext | - BP10GB_MCLK_SET | - BP10GB_MDIO_CLR)) - & ~(BP10GB_MCLK_CLR | BP10GB_MDIO_SET | - BP10GB_MCLK_DIR | BP10GB_MDIO_DIR)); - - /* bnx2x_set_spio(pbpctl_dev, 5, MISC_REGISTERS_SPIO_OUTPUT_LOW); - bnx2x_set_spio(pbpctl_dev, 4, MISC_REGISTERS_SPIO_OUTPUT_LOW); - bnx2x_set_spio(pbpctl_dev, 4, MISC_REGISTERS_SPIO_INPUT_HI_Z); */ - - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - - printk("2reg=%x\n", ctrl_ext); - -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 0); -#endif - - return 0; - -#endif - - } else if (!pbpctl_dev->bp_10g) { - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - } else { - - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - ctrl_ext = BP10G_READ_REG(pbpctl_dev, EODSDP); - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - - } - - usec_delay(CMND_INTERVAL); - - /*send sync cmd */ - write_pulse(pbpctl_dev, ctrl_ext, SYNC_CMD_VAL, SYNC_CMD_LEN); - /*send rd cmd */ - write_pulse(pbpctl_dev, ctrl_ext, RD_CMD_VAL, RD_CMD_LEN); - /*send addr */ - write_pulse(pbpctl_dev, ctrl_ext, addr, ADDR_CMD_LEN); - /*read data */ - /* zero */ - if (pbpctl_dev->bp_10g9) { - /* DATA 0 CLK 1 */ - /*BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext|BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9)); */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext | BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DATA_OUT9 | - BP10G_MCLK_DIR_OUT9)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DATA5))); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl_ext & - ~(BPCTLI_CTRL_EXT_MDIO_DATA80 | - BPCTLI_CTRL_EXT_MDIO_DIR80))); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80 | - BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (((ctrl | BP540_MDIO_DIR | BP540_MCLK_DIR | - BP540_MCLK_DATA) & ~BP540_MDIO_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_DIR | BP10GB_MCLK_SET) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_SET | - BP10GB_MDIO_CLR | BP10GB_MCLK_CLR)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MCLK_DATA) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DIR - | - BPCTLI_CTRL_EXT_MDIO_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext | BP10G_MCLK_DATA_OUT | - BP10G_MDIO_DATA_OUT)); - - - } - usec_delay(PULSE_TIME); - - ctrl_value = read_pulse(pbpctl_dev, ctrl_ext, RD_DATA_LEN); - - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - /* DATA 0 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | BP540_MCLK_DIR | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - } else { - - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - ctrl_ext = BP10G_READ_REG(pbpctl_dev, EODSDP); - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - - } - - usec_delay(CMND_INTERVAL * 4); -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 0); -#endif - - return ctrl_value; -} - -static int wdt_pulse(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0, ctrl = 0; - struct bpctl_dev *pbpctl_dev_c = NULL; - -#ifdef BP_SYNC_FLAG - unsigned long flags; - - spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); -#else - - if ((atomic_read(&pbpctl_dev->wdt_busy)) == 1) - return -1; -#endif - if (pbpctl_dev->bp_10g9) { - pbpctl_dev_c = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_c) - return -1; - } - - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); - - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - /* DATA 0 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5))); - } else if (pbpctl_dev->bp_i80) { - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - } else if (pbpctl_dev->bp_540) { - ctrl_ext = ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | BP540_MCLK_DIR | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) { - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA - | - BPCTLI_CTRL_EXT_MCLK_DATA))); - } else { - - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - ctrl_ext = BP10G_READ_REG(pbpctl_dev, EODSDP); - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - - } - if (pbpctl_dev->bp_10g9) { - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, ((ctrl_ext|BP10G_MCLK_DATA_OUT9)&~BP10G_MDIO_DATA_OUT9)); */ - /* DATA 0 CLK 1 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - (ctrl | BP10G_MCLK_DATA_OUT9 | - BP10G_MCLK_DIR_OUT9)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5 - | - BPCTLI_CTRL_EXT_MCLK_DATA5) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA5))); - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80 | - BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | - BP540_MDIO_DIR | - BP540_MCLK_DIR | - BP540_MCLK_DATA) & - ~BP540_MDIO_DATA)); - - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_SET) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_CLR)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR - | - BPCTLI_CTRL_EXT_MCLK_DATA) - & - ~ - (BPCTLI_CTRL_EXT_MDIO_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - ((ctrl_ext | BP10G_MCLK_DATA_OUT) & - ~BP10G_MDIO_DATA_OUT)); - - } - - usec_delay(WDT_INTERVAL); - if (pbpctl_dev->bp_10g9) { - /* BP10G_WRITE_REG(pbpctl_dev, I2CCTL, (ctrl_ext&~(BP10G_MCLK_DATA_OUT9|BP10G_MDIO_DATA_OUT9))); */ - /* DATA 0 CLK 0 */ - BP10G_WRITE_REG(pbpctl_dev, I2CCTL, - (ctrl_ext & ~BP10G_MDIO_DATA_OUT9)); - BP10G_WRITE_REG(pbpctl_dev_c, ESDP, - ((ctrl | BP10G_MCLK_DIR_OUT9) & - ~(BP10G_MCLK_DATA_OUT9))); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR5 - | - BPCTLI_CTRL_EXT_MDIO_DIR5) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA5 - | - BPCTLI_CTRL_EXT_MDIO_DATA5))); - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, ((ctrl_ext | - BPCTLI_CTRL_EXT_MDIO_DIR80) - & - ~BPCTLI_CTRL_EXT_MDIO_DATA80)); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | BPCTLI_CTRL_EXT_MCLK_DIR80) & - ~BPCTLI_CTRL_EXT_MCLK_DATA80)); - - } else if (pbpctl_dev->bp_540) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, ((ctrl | BP540_MCLK_DIR | - BP540_MDIO_DIR) & - ~(BP540_MDIO_DATA | - BP540_MCLK_DATA))); - - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_SPIO, - (ctrl_ext | BP10GB_MDIO_CLR | BP10GB_MCLK_CLR) - & ~(BP10GB_MCLK_DIR | BP10GB_MDIO_DIR | - BP10GB_MDIO_SET | BP10GB_MCLK_SET)); - - } else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR - | - BPCTLI_CTRL_EXT_MDIO_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA - | - BPCTLI_CTRL_EXT_MDIO_DATA))); - else { - - BP10G_WRITE_REG(pbpctl_dev, EODSDP, - (ctrl_ext & - ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); - } - if ((pbpctl_dev->wdt_status == WDT_STATUS_EN)) - /*&& (pbpctl_dev->bp_ext_verbypass_wdt_on_time = jiffies; -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#endif - usec_delay(CMND_INTERVAL * 4); - return 0; -} - -static void data_pulse(struct bpctl_dev *pbpctl_dev, unsigned char value) -{ - - uint32_t ctrl_ext = 0; -#ifdef BP_SYNC_FLAG - unsigned long flags; -#endif - wdt_time_left(pbpctl_dev); -#ifdef BP_SYNC_FLAG - spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 1); -#endif - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP7_DIR) & - ~(BPCTLI_CTRL_EXT_SDP6_DATA | - BPCTLI_CTRL_EXT_SDP7_DATA))); - - usec_delay(INIT_CMND_INTERVAL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP7_DIR | - BPCTLI_CTRL_EXT_SDP6_DATA) & - ~ - (BPCTLI_CTRL_EXT_SDP7_DATA))); - usec_delay(INIT_CMND_INTERVAL); - - while (value) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP7_DIR | - BPCTLI_CTRL_EXT_SDP6_DATA | - BPCTLI_CTRL_EXT_SDP7_DATA); - usec_delay(PULSE_INTERVAL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR - | - BPCTLI_CTRL_EXT_SDP7_DIR - | - BPCTLI_CTRL_EXT_SDP6_DATA) - & - ~BPCTLI_CTRL_EXT_SDP7_DATA)); - usec_delay(PULSE_INTERVAL); - value--; - - } - usec_delay(INIT_CMND_INTERVAL - PULSE_INTERVAL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP7_DIR) & - ~(BPCTLI_CTRL_EXT_SDP6_DATA | - BPCTLI_CTRL_EXT_SDP7_DATA))); - usec_delay(WDT_TIME_CNT); - if (pbpctl_dev->wdt_status == WDT_STATUS_EN) - pbpctl_dev->bypass_wdt_on_time = jiffies; -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#else - atomic_set(&pbpctl_dev->wdt_busy, 0); -#endif - -} - -static int send_wdt_pulse(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - -#ifdef BP_SYNC_FLAG - unsigned long flags; - - spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); -#else - - if ((atomic_read(&pbpctl_dev->wdt_busy)) == 1) - return -1; -#endif - wdt_time_left(pbpctl_dev); - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ctrl_ext | /* 1 */ - BPCTLI_CTRL_EXT_SDP7_DIR | - BPCTLI_CTRL_EXT_SDP7_DATA); - usec_delay(PULSE_INTERVAL); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | /* 0 */ - BPCTLI_CTRL_EXT_SDP7_DIR) & - ~BPCTLI_CTRL_EXT_SDP7_DATA)); - - usec_delay(PULSE_INTERVAL); - if (pbpctl_dev->wdt_status == WDT_STATUS_EN) - pbpctl_dev->bypass_wdt_on_time = jiffies; -#ifdef BP_SYNC_FLAG - spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); -#endif - - return 0; -} - -static void send_bypass_clear_pulse(struct bpctl_dev *pbpctl_dev, - unsigned int value) -{ - uint32_t ctrl_ext = 0; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | /* 0 */ - BPCTLI_CTRL_EXT_SDP6_DIR) & - ~BPCTLI_CTRL_EXT_SDP6_DATA)); - - usec_delay(PULSE_INTERVAL); - while (value) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ctrl_ext | /* 1 */ - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP6_DATA); - usec_delay(PULSE_INTERVAL); - value--; - } - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | /* 0 */ - BPCTLI_CTRL_EXT_SDP6_DIR) & - ~BPCTLI_CTRL_EXT_SDP6_DATA)); - usec_delay(PULSE_INTERVAL); -} - -/* #endif OLD_FW */ -#ifdef BYPASS_DEBUG - -int pulse_set_fn(struct bpctl_dev *pbpctl_dev, unsigned int counter) -{ - uint32_t ctrl_ext = 0; - - if (!pbpctl_dev) - return -1; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - write_pulse_1(pbpctl_dev, ctrl_ext, counter, counter); - - pbpctl_dev->bypass_wdt_status = 0; - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - write_pulse_1(pbpctl_dev, ctrl_ext, counter, counter); - } else { - wdt_time_left(pbpctl_dev); - if (pbpctl_dev->wdt_status == WDT_STATUS_EN) { - pbpctl_dev->wdt_status = 0; - data_pulse(pbpctl_dev, counter); - pbpctl_dev->wdt_status = WDT_STATUS_EN; - pbpctl_dev->bypass_wdt_on_time = jiffies; - - } else - data_pulse(pbpctl_dev, counter); - } - - return 0; -} - -int zero_set_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - printk("zero_set"); - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_MCLK_DIR) - & - ~ - (BPCTLI_CTRL_EXT_MCLK_DATA - | - BPCTLI_CTRL_EXT_MDIO_DIR - | - BPCTLI_CTRL_EXT_MDIO_DATA))); - - } - return 0; -} - -int pulse_get2_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0, ctrl_value = 0; - - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - printk("pulse_get_fn\n"); - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - ctrl_value = read_pulse_2(pbpctl_dev, ctrl_ext); - printk("read:%d\n", ctrl_value); - } - return ctrl_value; -} - -int pulse_get1_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0, ctrl_value = 0; - - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - - printk("pulse_get_fn\n"); - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - ctrl_value = read_pulse_1(pbpctl_dev, ctrl_ext); - printk("read:%d\n", ctrl_value); - } - return ctrl_value; -} - -int gpio6_set_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP6_DATA); - return 0; -} - -int gpio7_set_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ctrl_ext | - BPCTLI_CTRL_EXT_SDP7_DIR | - BPCTLI_CTRL_EXT_SDP7_DATA); - return 0; -} - -int gpio7_clear_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP7_DIR) & - ~BPCTLI_CTRL_EXT_SDP7_DATA)); - return 0; -} - -int gpio6_clear_fn(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, ((ctrl_ext | - BPCTLI_CTRL_EXT_SDP6_DIR) & - ~BPCTLI_CTRL_EXT_SDP6_DATA)); - return 0; -} -#endif /*BYPASS_DEBUG */ - -static struct bpctl_dev *lookup_port(struct bpctl_dev *dev) -{ - struct bpctl_dev *p; - int n; - - for (n = 0, p = bpctl_dev_arr; n < device_num && p->pdev; n++) { - if (p->bus == dev->bus - && p->slot == dev->slot - && p->func == (dev->func ^ 1)) - return p; - } - return NULL; -} - -static struct bpctl_dev *get_status_port_fn(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev) { - if (pbpctl_dev->func == 0 || pbpctl_dev->func == 2) - return lookup_port(pbpctl_dev); - } - return NULL; -} - -static struct bpctl_dev *get_master_port_fn(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev) { - if (pbpctl_dev->func == 1 || pbpctl_dev->func == 3) - return lookup_port(pbpctl_dev); - } - return NULL; -} - -/**************************************/ -/**************INTEL API***************/ -/**************************************/ - -static void write_data_port_int(struct bpctl_dev *pbpctl_dev, - unsigned char ctrl_value) -{ - uint32_t value; - - value = BPCTL_READ_REG(pbpctl_dev, CTRL); -/* Make SDP0 Pin Directonality to Output */ - value |= BPCTLI_CTRL_SDP0_DIR; - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, value); - - value &= ~BPCTLI_CTRL_SDP0_DATA; - value |= ((ctrl_value & 0x1) << BPCTLI_CTRL_SDP0_SHIFT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, value); - - value = (BPCTL_READ_REG(pbpctl_dev, CTRL_EXT)); -/* Make SDP2 Pin Directonality to Output */ - value |= BPCTLI_CTRL_EXT_SDP6_DIR; - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, value); - - value &= ~BPCTLI_CTRL_EXT_SDP6_DATA; - value |= (((ctrl_value & 0x2) >> 1) << BPCTLI_CTRL_EXT_SDP6_SHIFT); - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, value); - -} - -static int write_data_int(struct bpctl_dev *pbpctl_dev, unsigned char value) -{ - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return -1; - atomic_set(&pbpctl_dev->wdt_busy, 1); - write_data_port_int(pbpctl_dev, value & 0x3); - write_data_port_int(pbpctl_dev_b, ((value & 0xc) >> 2)); - atomic_set(&pbpctl_dev->wdt_busy, 0); - - return 0; -} - -static int wdt_pulse_int(struct bpctl_dev *pbpctl_dev) -{ - - if ((atomic_read(&pbpctl_dev->wdt_busy)) == 1) - return -1; - - if ((write_data_int(pbpctl_dev, RESET_WDT_INT)) < 0) - return -1; - msec_delay_bp(CMND_INTERVAL_INT); - if ((write_data_int(pbpctl_dev, CMND_OFF_INT)) < 0) - return -1; - msec_delay_bp(CMND_INTERVAL_INT); - - if (pbpctl_dev->wdt_status == WDT_STATUS_EN) - pbpctl_dev->bypass_wdt_on_time = jiffies; - - return 0; -} - -/*************************************/ -/************* COMMANDS **************/ -/*************************************/ - -/* CMND_ON 0x4 (100)*/ -static int cmnd_on(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - return 0; - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) - write_data(pbpctl_dev, CMND_ON); - else - data_pulse(pbpctl_dev, CMND_ON); - ret = 0; - } - return ret; -} - -/* CMND_OFF 0x2 (10)*/ -static int cmnd_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, CMND_OFF_INT); - msec_delay_bp(CMND_INTERVAL_INT); - } else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) - write_data(pbpctl_dev, CMND_OFF); - else - data_pulse(pbpctl_dev, CMND_OFF); - ret = 0; - } - return ret; -} - -/* BYPASS_ON (0xa)*/ -static int bypass_on(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & BP_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, BYPASS_ON_INT); - msec_delay_bp(BYPASS_DELAY_INT); - pbpctl_dev->bp_status_un = 0; - } else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - write_data(pbpctl_dev, BYPASS_ON); - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - msec_delay_bp(LATCH_DELAY); - } else - data_pulse(pbpctl_dev, BYPASS_ON); - ret = 0; - } - return ret; -} - -/* BYPASS_OFF (0x8 111)*/ -static int bypass_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & BP_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, DIS_BYPASS_CAP_INT); - msec_delay_bp(BYPASS_DELAY_INT); - write_data_int(pbpctl_dev, PWROFF_BYPASS_ON_INT); - msec_delay_bp(BYPASS_DELAY_INT); - pbpctl_dev->bp_status_un = 0; - } else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - write_data(pbpctl_dev, BYPASS_OFF); - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - msec_delay_bp(LATCH_DELAY); - } else - data_pulse(pbpctl_dev, BYPASS_OFF); - ret = 0; - } - return ret; -} - -/* TAP_OFF (0x9)*/ -static int tap_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if ((pbpctl_dev->bp_caps & TAP_CAP) - && (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) { - write_data(pbpctl_dev, TAP_OFF); - msec_delay_bp(LATCH_DELAY); - ret = 0; - } - return ret; -} - -/* TAP_ON (0xb)*/ -static int tap_on(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if ((pbpctl_dev->bp_caps & TAP_CAP) - && (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) { - write_data(pbpctl_dev, TAP_ON); - msec_delay_bp(LATCH_DELAY); - ret = 0; - } - return ret; -} - -/* DISC_OFF (0x9)*/ -static int disc_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if ((pbpctl_dev->bp_caps & DISC_CAP) && (pbpctl_dev->bp_ext_ver >= 0x8)) { - write_data(pbpctl_dev, DISC_OFF); - msec_delay_bp(LATCH_DELAY); - } else - ret = BP_NOT_CAP; - return ret; -} - -/* DISC_ON (0xb)*/ -static int disc_on(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if ((pbpctl_dev->bp_caps & DISC_CAP) && (pbpctl_dev->bp_ext_ver >= 0x8)) { - write_data(pbpctl_dev, /*DISC_ON */ 0x85); - msec_delay_bp(LATCH_DELAY); - } else - ret = BP_NOT_CAP; - return ret; -} - -/*TWO_PORT_LINK_HW_EN (0xe)*/ -static int tpl_hw_on(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0, ctrl = 0; - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - - if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { - cmnd_on(pbpctl_dev); - write_data(pbpctl_dev, TPL2_ON); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - cmnd_off(pbpctl_dev); - return ret; - } - - if (TPL_IF_SERIES(pbpctl_dev->subdevice)) { - ctrl = BPCTL_READ_REG(pbpctl_dev_b, CTRL); - BPCTL_BP_WRITE_REG(pbpctl_dev_b, CTRL, - ((ctrl | BPCTLI_CTRL_SWDPIO0) & - ~BPCTLI_CTRL_SWDPIN0)); - } else - ret = BP_NOT_CAP; - return ret; -} - -/*TWO_PORT_LINK_HW_DIS (0xc)*/ -static int tpl_hw_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0, ctrl = 0; - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { - cmnd_on(pbpctl_dev); - write_data(pbpctl_dev, TPL2_OFF); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - cmnd_off(pbpctl_dev); - return ret; - } - if (TPL_IF_SERIES(pbpctl_dev->subdevice)) { - ctrl = BPCTL_READ_REG(pbpctl_dev_b, CTRL); - BPCTL_BP_WRITE_REG(pbpctl_dev_b, CTRL, - (ctrl | BPCTLI_CTRL_SWDPIO0 | - BPCTLI_CTRL_SWDPIN0)); - } else - ret = BP_NOT_CAP; - return ret; -} - -/* WDT_OFF (0x6 110)*/ -static int wdt_off(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - bypass_off(pbpctl_dev); - else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) - write_data(pbpctl_dev, WDT_OFF); - else - data_pulse(pbpctl_dev, WDT_OFF); - pbpctl_dev->wdt_status = WDT_STATUS_DIS; - ret = 0; - } - return ret; -} - -/* WDT_ON (0x10)*/ - -/***Global***/ -static unsigned int - wdt_val_array[] = { 1000, 1500, 2000, 3000, 4000, 8000, 16000, 32000, 0 }; - -static int wdt_on(struct bpctl_dev *pbpctl_dev, unsigned int timeout) -{ - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - unsigned int pulse = 0, temp_value = 0, temp_cnt = 0; - pbpctl_dev->wdt_status = 0; - - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - for (; wdt_val_array[temp_cnt]; temp_cnt++) - if (timeout <= wdt_val_array[temp_cnt]) - break; - - if (!wdt_val_array[temp_cnt]) - temp_cnt--; - - timeout = wdt_val_array[temp_cnt]; - temp_cnt += 0x7; - - write_data_int(pbpctl_dev, DIS_BYPASS_CAP_INT); - msec_delay_bp(BYPASS_DELAY_INT); - pbpctl_dev->bp_status_un = 0; - write_data_int(pbpctl_dev, temp_cnt); - pbpctl_dev->bypass_wdt_on_time = jiffies; - msec_delay_bp(CMND_INTERVAL_INT); - pbpctl_dev->bypass_timer_interval = timeout; - } else { - timeout = - (timeout < - TIMEOUT_UNIT ? TIMEOUT_UNIT : (timeout > - WDT_TIMEOUT_MAX ? - WDT_TIMEOUT_MAX : - timeout)); - temp_value = timeout / 100; - while ((temp_value >>= 1)) - temp_cnt++; - if (timeout > ((1 << temp_cnt) * 100)) - temp_cnt++; - pbpctl_dev->bypass_wdt_on_time = jiffies; - pulse = (WDT_ON | temp_cnt); - if (pbpctl_dev->bp_ext_ver == OLD_IF_VER) - data_pulse(pbpctl_dev, pulse); - else - write_data(pbpctl_dev, pulse); - pbpctl_dev->bypass_timer_interval = - (1 << temp_cnt) * 100; - } - pbpctl_dev->wdt_status = WDT_STATUS_EN; - return 0; - } - return BP_NOT_CAP; -} - -static void bp75_put_hw_semaphore_generic(struct bpctl_dev *pbpctl_dev) -{ - u32 swsm; - - swsm = BPCTL_READ_REG(pbpctl_dev, SWSM); - - swsm &= ~(BPCTLI_SWSM_SMBI | BPCTLI_SWSM_SWESMBI); - - BPCTL_WRITE_REG(pbpctl_dev, SWSM, swsm); -} - -static s32 bp75_get_hw_semaphore_generic(struct bpctl_dev *pbpctl_dev) -{ - u32 swsm; - s32 ret_val = 0; - s32 timeout = 8192 + 1; - s32 i = 0; - - /* Get the SW semaphore */ - while (i < timeout) { - swsm = BPCTL_READ_REG(pbpctl_dev, SWSM); - if (!(swsm & BPCTLI_SWSM_SMBI)) - break; - - usec_delay(50); - i++; - } - - if (i == timeout) { - printk - ("bpctl_mod: Driver can't access device - SMBI bit is set.\n"); - ret_val = -1; - goto out; - } - - /* Get the FW semaphore. */ - for (i = 0; i < timeout; i++) { - swsm = BPCTL_READ_REG(pbpctl_dev, SWSM); - BPCTL_WRITE_REG(pbpctl_dev, SWSM, swsm | BPCTLI_SWSM_SWESMBI); - - /* Semaphore acquired if bit latched */ - if (BPCTL_READ_REG(pbpctl_dev, SWSM) & BPCTLI_SWSM_SWESMBI) - break; - - usec_delay(50); - } - - if (i == timeout) { - /* Release semaphores */ - bp75_put_hw_semaphore_generic(pbpctl_dev); - printk("bpctl_mod: Driver can't access the NVM\n"); - ret_val = -1; - goto out; - } - - out: - return ret_val; -} - -static void bp75_release_phy(struct bpctl_dev *pbpctl_dev) -{ - u16 mask = BPCTLI_SWFW_PHY0_SM; - u32 swfw_sync; - s32 ret_val; - - if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) - mask = BPCTLI_SWFW_PHY1_SM; - - do - ret_val = bp75_get_hw_semaphore_generic(pbpctl_dev); - while (ret_val != 0); - - swfw_sync = BPCTL_READ_REG(pbpctl_dev, SW_FW_SYNC); - swfw_sync &= ~mask; - BPCTL_WRITE_REG(pbpctl_dev, SW_FW_SYNC, swfw_sync); - - bp75_put_hw_semaphore_generic(pbpctl_dev); -} - -static s32 bp75_acquire_phy(struct bpctl_dev *pbpctl_dev) -{ - u16 mask = BPCTLI_SWFW_PHY0_SM; - u32 swfw_sync; - u32 swmask; - u32 fwmask; - s32 ret_val = 0; - s32 i = 0, timeout = 200; - - if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) - mask = BPCTLI_SWFW_PHY1_SM; - - swmask = mask; - fwmask = mask << 16; - - while (i < timeout) { - if (bp75_get_hw_semaphore_generic(pbpctl_dev)) { - ret_val = -1; - goto out; - } - - swfw_sync = BPCTL_READ_REG(pbpctl_dev, SW_FW_SYNC); - if (!(swfw_sync & (fwmask | swmask))) - break; - - bp75_put_hw_semaphore_generic(pbpctl_dev); - mdelay(5); - i++; - } - - if (i == timeout) { - printk - ("bpctl_mod: Driver can't access resource, SW_FW_SYNC timeout.\n"); - ret_val = -1; - goto out; - } - - swfw_sync |= swmask; - BPCTL_WRITE_REG(pbpctl_dev, SW_FW_SYNC, swfw_sync); - - bp75_put_hw_semaphore_generic(pbpctl_dev); - - out: - return ret_val; -} - -static s32 bp75_read_phy_reg_mdic(struct bpctl_dev *pbpctl_dev, u32 offset, - u16 *data) -{ - u32 i, mdic = 0; - s32 ret_val = 0; - u32 phy_addr = 1; - - mdic = ((offset << BPCTLI_MDIC_REG_SHIFT) | - (phy_addr << BPCTLI_MDIC_PHY_SHIFT) | (BPCTLI_MDIC_OP_READ)); - - BPCTL_WRITE_REG(pbpctl_dev, MDIC, mdic); - - for (i = 0; i < (BPCTLI_GEN_POLL_TIMEOUT * 3); i++) { - usec_delay(50); - mdic = BPCTL_READ_REG(pbpctl_dev, MDIC); - if (mdic & BPCTLI_MDIC_READY) - break; - } - if (!(mdic & BPCTLI_MDIC_READY)) { - printk("bpctl_mod: MDI Read did not complete\n"); - ret_val = -1; - goto out; - } - if (mdic & BPCTLI_MDIC_ERROR) { - printk("bpctl_mod: MDI Error\n"); - ret_val = -1; - goto out; - } - *data = (u16) mdic; - - out: - return ret_val; -} - -static s32 bp75_write_phy_reg_mdic(struct bpctl_dev *pbpctl_dev, u32 offset, - u16 data) -{ - u32 i, mdic = 0; - s32 ret_val = 0; - u32 phy_addr = 1; - - mdic = (((u32) data) | - (offset << BPCTLI_MDIC_REG_SHIFT) | - (phy_addr << BPCTLI_MDIC_PHY_SHIFT) | (BPCTLI_MDIC_OP_WRITE)); - - BPCTL_WRITE_REG(pbpctl_dev, MDIC, mdic); - - for (i = 0; i < (BPCTLI_GEN_POLL_TIMEOUT * 3); i++) { - usec_delay(50); - mdic = BPCTL_READ_REG(pbpctl_dev, MDIC); - if (mdic & BPCTLI_MDIC_READY) - break; - } - if (!(mdic & BPCTLI_MDIC_READY)) { - printk("bpctl_mod: MDI Write did not complete\n"); - ret_val = -1; - goto out; - } - if (mdic & BPCTLI_MDIC_ERROR) { - printk("bpctl_mod: MDI Error\n"); - ret_val = -1; - goto out; - } - - out: - return ret_val; -} - -static s32 bp75_read_phy_reg(struct bpctl_dev *pbpctl_dev, u32 offset, u16 *data) -{ - s32 ret_val = 0; - - ret_val = bp75_acquire_phy(pbpctl_dev); - if (ret_val) - goto out; - - if (offset > BPCTLI_MAX_PHY_MULTI_PAGE_REG) { - ret_val = bp75_write_phy_reg_mdic(pbpctl_dev, - BPCTLI_IGP01E1000_PHY_PAGE_SELECT, - (u16) offset); - if (ret_val) - goto release; - } - - ret_val = - bp75_read_phy_reg_mdic(pbpctl_dev, - BPCTLI_MAX_PHY_REG_ADDRESS & offset, data); - - release: - bp75_release_phy(pbpctl_dev); - out: - return ret_val; -} - -static s32 bp75_write_phy_reg(struct bpctl_dev *pbpctl_dev, u32 offset, u16 data) -{ - s32 ret_val = 0; - - ret_val = bp75_acquire_phy(pbpctl_dev); - if (ret_val) - goto out; - - if (offset > BPCTLI_MAX_PHY_MULTI_PAGE_REG) { - ret_val = bp75_write_phy_reg_mdic(pbpctl_dev, - BPCTLI_IGP01E1000_PHY_PAGE_SELECT, - (u16) offset); - if (ret_val) - goto release; - } - - ret_val = - bp75_write_phy_reg_mdic(pbpctl_dev, - BPCTLI_MAX_PHY_REG_ADDRESS & offset, data); - - release: - bp75_release_phy(pbpctl_dev); - - out: - return ret_val; -} - -/* SET_TX (non-Bypass command :)) */ -static int set_tx(struct bpctl_dev *pbpctl_dev, int tx_state) -{ - int ret = 0, ctrl = 0; - struct bpctl_dev *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); - if (!tx_state) { - if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (ctrl | BP10G_SDP1_DIR | - BP10G_SDP1_DATA)); - - } else { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl | BPCTLI_CTRL_SDP1_DIR - | BPCTLI_CTRL_SWDPIN1)); - } - } else { - if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP10G_SDP1_DIR) & - ~BP10G_SDP1_DATA)); - } else { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl | - BPCTLI_CTRL_SDP1_DIR) & - ~BPCTLI_CTRL_SWDPIN1)); - } - return ret; - - } - } else if (pbpctl_dev->bp_caps & TX_CTL_CAP) { - if (PEG5_IF_SERIES(pbpctl_dev->subdevice)) { - if (tx_state) { - uint16_t mii_reg; - ret = bp75_read_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - &mii_reg); - if (!ret) { - if (mii_reg & BPCTLI_MII_CR_POWER_DOWN) { - ret = - bp75_write_phy_reg - (pbpctl_dev, - BPCTLI_PHY_CONTROL, - mii_reg & - ~BPCTLI_MII_CR_POWER_DOWN); - } - } - } else { - uint16_t mii_reg; - ret = bp75_read_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - &mii_reg); - if (!ret) { - - mii_reg |= BPCTLI_MII_CR_POWER_DOWN; - ret = bp75_write_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - mii_reg); - } - } - - } - if (pbpctl_dev->bp_fiber5) - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - else if (pbpctl_dev->bp_10gb) - ctrl = BP10GB_READ_REG(pbpctl_dev, MISC_REG_GPIO); - else if (!pbpctl_dev->bp_10g) - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); - else - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - - if (!tx_state) - if (pbpctl_dev->bp_10g9) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (ctrl | BP10G_SDP3_DATA | - BP10G_SDP3_DIR)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - (ctrl | - BPCTLI_CTRL_EXT_SDP6_DIR | - BPCTLI_CTRL_EXT_SDP6_DATA)); - - } else if (pbpctl_dev->bp_10gb) { - if ((pbpctl_dev->func == 1) - || (pbpctl_dev->func == 3)) - BP10GB_WRITE_REG(pbpctl_dev, - MISC_REG_GPIO, - (ctrl | - BP10GB_GPIO0_SET_P1) & - ~(BP10GB_GPIO0_CLR_P1 | - BP10GB_GPIO0_OE_P1)); - else - BP10GB_WRITE_REG(pbpctl_dev, - MISC_REG_GPIO, - (ctrl | - BP10GB_GPIO0_OE_P0 | - BP10GB_GPIO0_SET_P0)); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl | BPCTLI_CTRL_SDP1_DIR - | BPCTLI_CTRL_SWDPIN1)); - - } else if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (ctrl | BP10G_SDP1_DIR | - BP10G_SDP1_DATA)); - - } - - else if (!pbpctl_dev->bp_10g) - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl | BPCTLI_CTRL_SWDPIO0 | - BPCTLI_CTRL_SWDPIN0)); - - else - BP10G_WRITE_REG(pbpctl_dev, ESDP, - (ctrl | BP10G_SDP0_DATA | - BP10G_SDP0_DIR)); - - else { - if (pbpctl_dev->bp_10g9) { - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP10G_SDP3_DIR) & - ~BP10G_SDP3_DATA)); - - } else if (pbpctl_dev->bp_fiber5) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL_EXT, - ((ctrl | - BPCTLI_CTRL_EXT_SDP6_DIR) & - ~BPCTLI_CTRL_EXT_SDP6_DATA)); - - } else if (pbpctl_dev->bp_10gb) { - if ((bpctl_dev_arr->func == 1) - || (bpctl_dev_arr->func == 3)) - BP10GB_WRITE_REG(pbpctl_dev, - MISC_REG_GPIO, - (ctrl | - BP10GB_GPIO0_CLR_P1) & - ~(BP10GB_GPIO0_SET_P1 | - BP10GB_GPIO0_OE_P1)); - else - BP10GB_WRITE_REG(pbpctl_dev, - MISC_REG_GPIO, - (ctrl | - BP10GB_GPIO0_OE_P0 | - BP10GB_GPIO0_CLR_P0)); - - } else if (pbpctl_dev->bp_i80) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl | - BPCTLI_CTRL_SDP1_DIR) & - ~BPCTLI_CTRL_SWDPIN1)); - } else if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP10G_SDP1_DIR) & - ~BP10G_SDP1_DATA)); - } - - else if (!pbpctl_dev->bp_10g) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - ((ctrl | BPCTLI_CTRL_SWDPIO0) - & ~BPCTLI_CTRL_SWDPIN0)); - if (!PEGF_IF_SERIES(pbpctl_dev->subdevice)) { - BPCTL_BP_WRITE_REG(pbpctl_dev, CTRL, - (ctrl & - ~ - (BPCTLI_CTRL_SDP0_DATA - | - BPCTLI_CTRL_SDP0_DIR))); - } - } else - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP10G_SDP0_DIR) & - ~BP10G_SDP0_DATA)); - - } - - } else - ret = BP_NOT_CAP; - return ret; - -} - -/* SET_FORCE_LINK (non-Bypass command :)) */ -static int set_bp_force_link(struct bpctl_dev *pbpctl_dev, int tx_state) -{ - int ret = 0, ctrl = 0; - - if (DBI_IF_SERIES(pbpctl_dev->subdevice)) { - - if ((pbpctl_dev->bp_10g) || (pbpctl_dev->bp_10g9)) { - - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); - if (!tx_state) - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ctrl & ~BP10G_SDP1_DIR); - else - BP10G_WRITE_REG(pbpctl_dev, ESDP, - ((ctrl | BP10G_SDP1_DIR) & - ~BP10G_SDP1_DATA)); - return ret; - } - - } - return BP_NOT_CAP; -} - -/*RESET_CONT 0x20 */ -static int reset_cont(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - return BP_NOT_CAP; - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) - write_data(pbpctl_dev, RESET_CONT); - else - data_pulse(pbpctl_dev, RESET_CONT); - ret = 0; - } - return ret; -} - -/*DIS_BYPASS_CAP 0x22 */ -static int dis_bypass_cap(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & BP_DIS_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, DIS_BYPASS_CAP_INT); - msec_delay_bp(BYPASS_DELAY_INT); - } else { - write_data(pbpctl_dev, BYPASS_OFF); - msec_delay_bp(LATCH_DELAY); - write_data(pbpctl_dev, DIS_BYPASS_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - return 0; - } - return BP_NOT_CAP; -} - -/*EN_BYPASS_CAP 0x24 */ -static int en_bypass_cap(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & BP_DIS_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, PWROFF_BYPASS_ON_INT); - msec_delay_bp(BYPASS_DELAY_INT); - } else { - write_data(pbpctl_dev, EN_BYPASS_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - return 0; - } - return BP_NOT_CAP; -} - -/* BYPASS_STATE_PWRON 0x26*/ -static int bypass_state_pwron(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) { - write_data(pbpctl_dev, BYPASS_STATE_PWRON); - if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - msec_delay_bp(DFLT_PWRON_DELAY); - else - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/* NORMAL_STATE_PWRON 0x28*/ -static int normal_state_pwron(struct bpctl_dev *pbpctl_dev) -{ - if ((pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) - || (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP)) { - write_data(pbpctl_dev, NORMAL_STATE_PWRON); - if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - msec_delay_bp(DFLT_PWRON_DELAY); - else - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/* BYPASS_STATE_PWROFF 0x27*/ -static int bypass_state_pwroff(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP) { - write_data(pbpctl_dev, BYPASS_STATE_PWROFF); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/* NORMAL_STATE_PWROFF 0x29*/ -static int normal_state_pwroff(struct bpctl_dev *pbpctl_dev) -{ - if ((pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP)) { - write_data(pbpctl_dev, NORMAL_STATE_PWROFF); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/*TAP_STATE_PWRON 0x2a*/ -static int tap_state_pwron(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { - write_data(pbpctl_dev, TAP_STATE_PWRON); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/*DIS_TAP_CAP 0x2c*/ -static int dis_tap_cap(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { - write_data(pbpctl_dev, DIS_TAP_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/*EN_TAP_CAP 0x2e*/ -static int en_tap_cap(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { - write_data(pbpctl_dev, EN_TAP_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - return 0; - } - return BP_NOT_CAP; -} - -/*DISC_STATE_PWRON 0x2a*/ -static int disc_state_pwron(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & DISC_PWUP_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - write_data(pbpctl_dev, DISC_STATE_PWRON); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - return BP_OK; - } - } - return BP_NOT_CAP; -} - -/*DIS_DISC_CAP 0x2c*/ -static int dis_disc_cap(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & DISC_DIS_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - write_data(pbpctl_dev, DIS_DISC_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - return BP_OK; - } - } - return BP_NOT_CAP; -} - -/*EN_TAP_CAP 0x2e*/ -static int en_disc_cap(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & DISC_DIS_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - write_data(pbpctl_dev, EN_DISC_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - return BP_OK; - } - } - return BP_NOT_CAP; -} - -static int std_nic_on(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & STD_NIC_CAP) { - - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, DIS_BYPASS_CAP_INT); - msec_delay_bp(BYPASS_DELAY_INT); - pbpctl_dev->bp_status_un = 0; - return BP_OK; - } - - if (pbpctl_dev->bp_ext_ver >= 0x8) { - write_data(pbpctl_dev, STD_NIC_ON); - msec_delay_bp(BYPASS_CAP_DELAY); - return BP_OK; - - } - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - wdt_off(pbpctl_dev); - - if (pbpctl_dev->bp_caps & BP_CAP) { - write_data(pbpctl_dev, BYPASS_OFF); - msec_delay_bp(LATCH_DELAY); - } - - if (pbpctl_dev->bp_caps & TAP_CAP) { - write_data(pbpctl_dev, TAP_OFF); - msec_delay_bp(LATCH_DELAY); - } - - write_data(pbpctl_dev, NORMAL_STATE_PWRON); - if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - msec_delay_bp(DFLT_PWRON_DELAY); - else - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - - if (pbpctl_dev->bp_caps & BP_DIS_CAP) { - write_data(pbpctl_dev, DIS_BYPASS_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - - if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { - write_data(pbpctl_dev, DIS_TAP_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - - } - return 0; - } - } - return BP_NOT_CAP; -} - -static int std_nic_off(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & STD_NIC_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - write_data_int(pbpctl_dev, PWROFF_BYPASS_ON_INT); - msec_delay_bp(BYPASS_DELAY_INT); - return BP_OK; - } - if (pbpctl_dev->bp_ext_ver >= 0x8) { - write_data(pbpctl_dev, STD_NIC_OFF); - msec_delay_bp(BYPASS_CAP_DELAY); - return BP_OK; - - } - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - - if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { - write_data(pbpctl_dev, TAP_STATE_PWRON); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - } - - if (pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) { - write_data(pbpctl_dev, BYPASS_STATE_PWRON); - if (pbpctl_dev->bp_ext_ver > PXG2BPI_VER) - msec_delay_bp(LATCH_DELAY + - EEPROM_WR_DELAY); - else - msec_delay_bp(DFLT_PWRON_DELAY); - } - - if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { - write_data(pbpctl_dev, EN_TAP_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - if (pbpctl_dev->bp_caps & DISC_DIS_CAP) { - write_data(pbpctl_dev, EN_DISC_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - - if (pbpctl_dev->bp_caps & BP_DIS_CAP) { - write_data(pbpctl_dev, EN_BYPASS_CAP); - msec_delay_bp(BYPASS_CAP_DELAY); - } - - return 0; - } - } - return BP_NOT_CAP; -} - -int wdt_time_left(struct bpctl_dev *pbpctl_dev) -{ - - /* unsigned long curr_time=((long long)(jiffies*1000))/HZ, delta_time=0,wdt_on_time=((long long)(pbpctl_dev->bypass_wdt_on_time*1000))/HZ; */ - unsigned long curr_time = jiffies, delta_time = 0, wdt_on_time = - pbpctl_dev->bypass_wdt_on_time, delta_time_msec = 0; - int time_left = 0; - - switch (pbpctl_dev->wdt_status) { - case WDT_STATUS_DIS: - time_left = 0; - break; - case WDT_STATUS_EN: - delta_time = - (curr_time >= - wdt_on_time) ? (curr_time - wdt_on_time) : (~wdt_on_time + - curr_time); - delta_time_msec = jiffies_to_msecs(delta_time); - time_left = pbpctl_dev->bypass_timer_interval - delta_time_msec; - if (time_left < 0) { - time_left = -1; - pbpctl_dev->wdt_status = WDT_STATUS_EXP; - } - break; - case WDT_STATUS_EXP: - time_left = -1; - break; - } - - return time_left; -} - -static int wdt_timer(struct bpctl_dev *pbpctl_dev, int *time_left) -{ - int ret = 0; - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - { - if (pbpctl_dev->wdt_status == WDT_STATUS_UNKNOWN) - ret = BP_NOT_CAP; - else - *time_left = wdt_time_left(pbpctl_dev); - } - - } else - ret = BP_NOT_CAP; - return ret; -} - -static int wdt_timer_reload(struct bpctl_dev *pbpctl_dev) -{ - - int ret = 0; - - if ((pbpctl_dev->bp_caps & WD_CTL_CAP) && - (pbpctl_dev->wdt_status != WDT_STATUS_UNKNOWN)) { - if (pbpctl_dev->wdt_status == WDT_STATUS_DIS) - return 0; - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) - ret = wdt_pulse(pbpctl_dev); - else if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - ret = wdt_pulse_int(pbpctl_dev); - else - ret = send_wdt_pulse(pbpctl_dev); - /* if (ret==-1) - mod_timer(&pbpctl_dev->bp_timer, jiffies+1);*/ - return 1; - } - return BP_NOT_CAP; -} - -static void wd_reset_timer(unsigned long param) -{ - struct bpctl_dev *pbpctl_dev = (struct bpctl_dev *) param; -#ifdef BP_SELF_TEST - struct sk_buff *skb_tmp; -#endif - - if ((pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) && - ((atomic_read(&pbpctl_dev->wdt_busy)) == 1)) { - mod_timer(&pbpctl_dev->bp_timer, jiffies + 1); - return; - } -#ifdef BP_SELF_TEST - - if (pbpctl_dev->bp_self_test_flag == 1) { - skb_tmp = dev_alloc_skb(BPTEST_DATA_LEN + 2); - if ((skb_tmp) && (pbpctl_dev->ndev) && (pbpctl_dev->bp_tx_data)) { - memcpy(skb_put(skb_tmp, BPTEST_DATA_LEN), - pbpctl_dev->bp_tx_data, BPTEST_DATA_LEN); - skb_tmp->dev = pbpctl_dev->ndev; - skb_tmp->protocol = - eth_type_trans(skb_tmp, pbpctl_dev->ndev); - skb_tmp->ip_summed = CHECKSUM_UNNECESSARY; - netif_receive_skb(skb_tmp); - goto bp_timer_reload; - return; - } - } -#endif - - wdt_timer_reload(pbpctl_dev); -#ifdef BP_SELF_TEST - bp_timer_reload: -#endif - if (pbpctl_dev->reset_time) { - mod_timer(&pbpctl_dev->bp_timer, - jiffies + (HZ * pbpctl_dev->reset_time) / 1000); - } -} - -/*WAIT_AT_PWRUP 0x80 */ -static int bp_wait_at_pwup_en(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - write_data(pbpctl_dev, BP_WAIT_AT_PWUP_EN); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - - return BP_OK; - } - } - return BP_NOT_CAP; -} - -/*DIS_WAIT_AT_PWRUP 0x81 */ -static int bp_wait_at_pwup_dis(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - write_data(pbpctl_dev, BP_WAIT_AT_PWUP_DIS); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - - return BP_OK; - } - } - return BP_NOT_CAP; -} - -/*EN_HW_RESET 0x82 */ - -static int bp_hw_reset_en(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - write_data(pbpctl_dev, BP_HW_RESET_EN); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - - return BP_OK; - } - } - return BP_NOT_CAP; -} - -/*DIS_HW_RESET 0x83 */ - -static int bp_hw_reset_dis(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - write_data(pbpctl_dev, BP_HW_RESET_DIS); - msec_delay_bp(LATCH_DELAY + EEPROM_WR_DELAY); - - return BP_OK; - } - } - return BP_NOT_CAP; -} - - -static int wdt_exp_mode(struct bpctl_dev *pbpctl_dev, int mode) -{ - uint32_t status_reg = 0, status_reg1 = 0; - - if ((pbpctl_dev->bp_caps & (TAP_STATUS_CAP | DISC_CAP)) && - (pbpctl_dev->bp_caps & BP_CAP)) { - if (pbpctl_dev->bp_ext_ver >= PXE2TBPI_VER) { - - if ((pbpctl_dev->bp_ext_ver >= 0x8) && - (mode == 2) && (pbpctl_dev->bp_caps & DISC_CAP)) { - status_reg1 = - read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR); - if (!(status_reg1 & WDTE_DISC_BPN_MASK)) - write_reg(pbpctl_dev, - status_reg1 | - WDTE_DISC_BPN_MASK, - STATUS_DISC_REG_ADDR); - return BP_OK; - } - } - status_reg = read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR); - - if ((mode == 0) && (pbpctl_dev->bp_caps & BP_CAP)) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - status_reg1 = - read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR); - if (status_reg1 & WDTE_DISC_BPN_MASK) - write_reg(pbpctl_dev, - status_reg1 & - ~WDTE_DISC_BPN_MASK, - STATUS_DISC_REG_ADDR); - } - if (status_reg & WDTE_TAP_BPN_MASK) - write_reg(pbpctl_dev, - status_reg & ~WDTE_TAP_BPN_MASK, - STATUS_TAP_REG_ADDR); - return BP_OK; - - } else if ((mode == 1) && (pbpctl_dev->bp_caps & TAP_CAP)) { - if (!(status_reg & WDTE_TAP_BPN_MASK)) - write_reg(pbpctl_dev, - status_reg | WDTE_TAP_BPN_MASK, - STATUS_TAP_REG_ADDR); - /*else return BP_NOT_CAP; */ - return BP_OK; - } - - } - return BP_NOT_CAP; -} - -static int bypass_fw_ver(struct bpctl_dev *pbpctl_dev) -{ - if (is_bypass_fn(pbpctl_dev)) - return read_reg(pbpctl_dev, VER_REG_ADDR); - else - return BP_NOT_CAP; -} - -static int bypass_sign_check(struct bpctl_dev *pbpctl_dev) -{ - - if (is_bypass_fn(pbpctl_dev)) - return (((read_reg(pbpctl_dev, PIC_SIGN_REG_ADDR)) == - PIC_SIGN_VALUE) ? 1 : 0); - else - return BP_NOT_CAP; -} - -static int tx_status(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl = 0; - struct bpctl_dev *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); - if (pbpctl_dev->bp_i80) - return ((ctrl & BPCTLI_CTRL_SWDPIN1) != 0 ? 0 : 1); - if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - - return ((ctrl & BP10G_SDP1_DATA) != 0 ? 0 : 1); - } - - } - - if (pbpctl_dev->bp_caps & TX_CTL_CAP) { - if (PEG5_IF_SERIES(pbpctl_dev->subdevice)) { - uint16_t mii_reg; - if (! - (bp75_read_phy_reg - (pbpctl_dev, BPCTLI_PHY_CONTROL, &mii_reg))) { - if (mii_reg & BPCTLI_MII_CR_POWER_DOWN) - return 0; - - else - return 1; - } - return -1; - } - - if (pbpctl_dev->bp_10g9) { - return ((BP10G_READ_REG(pbpctl_dev, ESDP) & - BP10G_SDP3_DATA) != 0 ? 0 : 1); - - } else if (pbpctl_dev->bp_fiber5) { - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - if (ctrl & BPCTLI_CTRL_EXT_SDP6_DATA) - return 0; - return 1; - } else if (pbpctl_dev->bp_10gb) { - ctrl = BP10GB_READ_REG(pbpctl_dev, MISC_REG_GPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_GPIO, - (ctrl | BP10GB_GPIO0_OE_P1) & - ~(BP10GB_GPIO0_SET_P1 | - BP10GB_GPIO0_CLR_P1)); - - if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) - return (((BP10GB_READ_REG - (pbpctl_dev, - MISC_REG_GPIO)) & BP10GB_GPIO0_P1) != - 0 ? 0 : 1); - else - return (((BP10GB_READ_REG - (pbpctl_dev, - MISC_REG_GPIO)) & BP10GB_GPIO0_P0) != - 0 ? 0 : 1); - } - - if (!pbpctl_dev->bp_10g) { - - ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); - if (pbpctl_dev->bp_i80) - return ((ctrl & BPCTLI_CTRL_SWDPIN1) != - 0 ? 0 : 1); - if (pbpctl_dev->bp_540) { - ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); - - return ((ctrl & BP10G_SDP1_DATA) != 0 ? 0 : 1); - } - - return ((ctrl & BPCTLI_CTRL_SWDPIN0) != 0 ? 0 : 1); - } else - return ((BP10G_READ_REG(pbpctl_dev, ESDP) & - BP10G_SDP0_DATA) != 0 ? 0 : 1); - - } - return BP_NOT_CAP; -} - -static int bp_force_link_status(struct bpctl_dev *pbpctl_dev) -{ - - if (DBI_IF_SERIES(pbpctl_dev->subdevice)) { - - if ((pbpctl_dev->bp_10g) || (pbpctl_dev->bp_10g9)) { - return ((BP10G_READ_REG(pbpctl_dev, ESDP) & - BP10G_SDP1_DIR) != 0 ? 1 : 0); - - } - } - return BP_NOT_CAP; -} - -static int bypass_from_last_read(struct bpctl_dev *pbpctl_dev) -{ - uint32_t ctrl_ext = 0; - struct bpctl_dev *pbpctl_dev_b = NULL; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - ctrl_ext = BPCTL_READ_REG(pbpctl_dev_b, CTRL_EXT); - BPCTL_BP_WRITE_REG(pbpctl_dev_b, CTRL_EXT, - (ctrl_ext & ~BPCTLI_CTRL_EXT_SDP7_DIR)); - ctrl_ext = BPCTL_READ_REG(pbpctl_dev_b, CTRL_EXT); - if (ctrl_ext & BPCTLI_CTRL_EXT_SDP7_DATA) - return 0; - return 1; - } else - return BP_NOT_CAP; -} - -static int bypass_status_clear(struct bpctl_dev *pbpctl_dev) -{ - struct bpctl_dev *pbpctl_dev_b = NULL; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - send_bypass_clear_pulse(pbpctl_dev_b, 1); - return 0; - } else - return BP_NOT_CAP; -} - -static int bypass_flag_status(struct bpctl_dev *pbpctl_dev) -{ - - if ((pbpctl_dev->bp_caps & BP_CAP)) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - BYPASS_FLAG_MASK) == - BYPASS_FLAG_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -static int bypass_flag_status_clear(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & BP_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - uint32_t status_reg = 0; - status_reg = read_reg(pbpctl_dev, STATUS_REG_ADDR); - write_reg(pbpctl_dev, status_reg & ~BYPASS_FLAG_MASK, - STATUS_REG_ADDR); - return 0; - } - } - return BP_NOT_CAP; -} - -static int bypass_change_status(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & BP_STATUS_CHANGE_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - ret = bypass_flag_status(pbpctl_dev); - bypass_flag_status_clear(pbpctl_dev); - } else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - ret = bypass_flag_status(pbpctl_dev); - bypass_flag_status_clear(pbpctl_dev); - } else { - ret = bypass_from_last_read(pbpctl_dev); - bypass_status_clear(pbpctl_dev); - } - } - return ret; -} - -static int bypass_status(struct bpctl_dev *pbpctl_dev) -{ - u32 ctrl_ext = 0; - - if (pbpctl_dev->bp_caps & BP_CAP) { - - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - - if (!pbpctl_dev->bp_status_un) - return (((BPCTL_READ_REG - (pbpctl_dev_b, - CTRL_EXT)) & - BPCTLI_CTRL_EXT_SDP7_DATA) != - 0 ? 1 : 0); - else - return BP_NOT_CAP; - } - if (pbpctl_dev->bp_ext_ver >= 0x8) { - - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, I2CCTL); - BP10G_WRITE_REG(pbpctl_dev_b, I2CCTL, - (ctrl_ext | BP10G_I2C_CLK_OUT)); - return ((BP10G_READ_REG(pbpctl_dev_b, I2CCTL) & - BP10G_I2C_CLK_IN) != 0 ? 0 : 1); - - } else if (pbpctl_dev->bp_540) { - return (((BP10G_READ_REG(pbpctl_dev_b, ESDP)) & - BP10G_SDP0_DATA) != 0 ? 0 : 1); - } - - else if ((pbpctl_dev->bp_fiber5) - || (pbpctl_dev->bp_i80)) { - return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL)) & - BPCTLI_CTRL_SWDPIN0) != 0 ? 0 : 1); - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = - BP10GB_READ_REG(pbpctl_dev, MISC_REG_GPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_GPIO, - (ctrl_ext | BP10GB_GPIO3_OE_P0) - & ~(BP10GB_GPIO3_SET_P0 | - BP10GB_GPIO3_CLR_P0)); - - return (((BP10GB_READ_REG - (pbpctl_dev, - MISC_REG_GPIO)) & BP10GB_GPIO3_P0) != - 0 ? 0 : 1); - } - - else if (!pbpctl_dev->bp_10g) - return (((BPCTL_READ_REG - (pbpctl_dev_b, - CTRL_EXT)) & - BPCTLI_CTRL_EXT_SDP7_DATA) != - 0 ? 0 : 1); - - else { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, EODSDP); - BP10G_WRITE_REG(pbpctl_dev_b, EODSDP, - (ctrl_ext | - BP10G_SDP7_DATA_OUT)); - return ((BP10G_READ_REG(pbpctl_dev_b, EODSDP) & - BP10G_SDP7_DATA_IN) != 0 ? 0 : 1); - } - - } else if (pbpctl_dev->media_type == BP_COPPER) { - - return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL)) & - BPCTLI_CTRL_SWDPIN1) != 0 ? 1 : 0); - } else { - if ((bypass_status_clear(pbpctl_dev)) >= 0) - return bypass_from_last_read(pbpctl_dev); - } - - } - return BP_NOT_CAP; -} - -static int default_pwron_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg - (pbpctl_dev, - STATUS_REG_ADDR)) & DFLT_PWRON_MASK) - == DFLT_PWRON_MASK) ? 0 : 1); - } - } /*else if ((!pbpctl_dev->bp_caps&BP_DIS_CAP)&& - (pbpctl_dev->bp_caps&BP_PWUP_ON_CAP)) - return 1; */ - } - return BP_NOT_CAP; -} - -static int default_pwroff_status(struct bpctl_dev *pbpctl_dev) -{ - - /*if ((!pbpctl_dev->bp_caps&BP_DIS_CAP)&& - (pbpctl_dev->bp_caps&BP_PWOFF_ON_CAP)) - return 1; */ - if ((pbpctl_dev->bp_caps & SW_CTL_CAP) - && (pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP)) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - DFLT_PWROFF_MASK) == DFLT_PWROFF_MASK) ? 0 : 1); - } - return BP_NOT_CAP; -} - -static int dis_bypass_cap_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & BP_DIS_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - DIS_BYPASS_CAP_MASK) == - DIS_BYPASS_CAP_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -static int wdt_programmed(struct bpctl_dev *pbpctl_dev, int *timeout) -{ - int ret = 0; - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - if ((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - WDT_EN_MASK) { - u8 wdt_val; - wdt_val = read_reg(pbpctl_dev, WDT_REG_ADDR); - *timeout = (1 << wdt_val) * 100; - } else - *timeout = 0; - } else { - int curr_wdt_status = pbpctl_dev->wdt_status; - if (curr_wdt_status == WDT_STATUS_UNKNOWN) - *timeout = -1; - else - *timeout = - curr_wdt_status == - 0 ? 0 : pbpctl_dev->bypass_timer_interval; - } - } else - ret = BP_NOT_CAP; - return ret; -} - -static int normal_support(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - ret = - ((((read_reg(pbpctl_dev, PRODUCT_CAP_REG_ADDR)) & - NORMAL_UNSUPPORT_MASK) == - NORMAL_UNSUPPORT_MASK) ? 0 : 1); - } else - ret = 1; - } - return ret; -} - -static int get_bp_prod_caps(struct bpctl_dev *pbpctl_dev) -{ - if ((pbpctl_dev->bp_caps & SW_CTL_CAP) && - (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) - return read_reg(pbpctl_dev, PRODUCT_CAP_REG_ADDR); - return BP_NOT_CAP; - -} - -static int tap_flag_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & TAP_STATUS_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - TAP_FLAG_MASK) == TAP_FLAG_MASK) ? 1 : 0); - - } - return BP_NOT_CAP; -} - -static int tap_flag_status_clear(struct bpctl_dev *pbpctl_dev) -{ - uint32_t status_reg = 0; - - if (pbpctl_dev->bp_caps & TAP_STATUS_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - status_reg = read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR); - write_reg(pbpctl_dev, status_reg & ~TAP_FLAG_MASK, - STATUS_TAP_REG_ADDR); - return 0; - } - } - return BP_NOT_CAP; -} - -static int tap_change_status(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - if (pbpctl_dev->bp_caps & TAP_CAP) { - if (pbpctl_dev->bp_caps & BP_CAP) { - ret = tap_flag_status(pbpctl_dev); - tap_flag_status_clear(pbpctl_dev); - } else { - ret = bypass_from_last_read(pbpctl_dev); - bypass_status_clear(pbpctl_dev); - } - } - } - return ret; -} - -static int tap_status(struct bpctl_dev *pbpctl_dev) -{ - u32 ctrl_ext = 0; - - if (pbpctl_dev->bp_caps & TAP_CAP) { - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - - if (pbpctl_dev->bp_ext_ver >= 0x8) { - if (!pbpctl_dev->bp_10g) - return (((BPCTL_READ_REG - (pbpctl_dev_b, - CTRL_EXT)) & - BPCTLI_CTRL_EXT_SDP6_DATA) != - 0 ? 0 : 1); - else { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, EODSDP); - BP10G_WRITE_REG(pbpctl_dev_b, EODSDP, - (ctrl_ext | - BP10G_SDP6_DATA_OUT)); - return ((BP10G_READ_REG(pbpctl_dev_b, EODSDP) & - BP10G_SDP6_DATA_IN) != 0 ? 0 : 1); - } - - } else if (pbpctl_dev->media_type == BP_COPPER) - return (((BPCTL_READ_REG(pbpctl_dev, CTRL)) & - BPCTLI_CTRL_SWDPIN0) != 0 ? 1 : 0); - else { - if ((bypass_status_clear(pbpctl_dev)) >= 0) - return bypass_from_last_read(pbpctl_dev); - } - - } - return BP_NOT_CAP; -} - -static int default_pwron_tap_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - DFLT_PWRON_TAP_MASK) == - DFLT_PWRON_TAP_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int dis_tap_cap_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - DIS_TAP_CAP_MASK) == - DIS_TAP_CAP_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int disc_flag_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & DISC_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - DISC_FLAG_MASK) == DISC_FLAG_MASK) ? 1 : 0); - - } - return BP_NOT_CAP; -} - -static int disc_flag_status_clear(struct bpctl_dev *pbpctl_dev) -{ - uint32_t status_reg = 0; - - if (pbpctl_dev->bp_caps & DISC_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - status_reg = read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR); - write_reg(pbpctl_dev, status_reg & ~DISC_FLAG_MASK, - STATUS_DISC_REG_ADDR); - return BP_OK; - } - } - return BP_NOT_CAP; -} - -static int disc_change_status(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (pbpctl_dev->bp_caps & DISC_CAP) { - ret = disc_flag_status(pbpctl_dev); - disc_flag_status_clear(pbpctl_dev); - return ret; - } - return BP_NOT_CAP; -} - -static int disc_off_status(struct bpctl_dev *pbpctl_dev) -{ - struct bpctl_dev *pbpctl_dev_b = NULL; - u32 ctrl_ext = 0; - - if (pbpctl_dev->bp_caps & DISC_CAP) { - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return BP_NOT_CAP; - if (DISCF_IF_SERIES(pbpctl_dev->subdevice)) - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - DISC_OFF_MASK) == DISC_OFF_MASK) ? 1 : 0); - - if (pbpctl_dev->bp_i80) { - return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL_EXT)) & - BPCTLI_CTRL_EXT_SDP6_DATA) != 0 ? 1 : 0); - - } - if (pbpctl_dev->bp_540) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, ESDP); - return ((BP10G_READ_REG(pbpctl_dev_b, ESDP) & - BP10G_SDP2_DATA) != 0 ? 1 : 0); - - } - if (pbpctl_dev->media_type == BP_COPPER) { - -#if 0 - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - DISC_OFF_MASK) == DISC_OFF_MASK) ? 1 : 0); -#endif - if (!pbpctl_dev->bp_10g) - return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL)) & - BPCTLI_CTRL_SWDPIN1) != 0 ? 1 : 0); - else - return ((BP10G_READ_REG(pbpctl_dev_b, ESDP) & - BP10G_SDP1_DATA) != 0 ? 1 : 0); - - } else { - - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, I2CCTL); - BP10G_WRITE_REG(pbpctl_dev_b, I2CCTL, - (ctrl_ext | - BP10G_I2C_DATA_OUT)); - return ((BP10G_READ_REG(pbpctl_dev_b, I2CCTL) & - BP10G_I2C_DATA_IN) != 0 ? 1 : 0); - - } else if (pbpctl_dev->bp_fiber5) { - return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL)) & - BPCTLI_CTRL_SWDPIN1) != 0 ? 1 : 0); - } else if (pbpctl_dev->bp_10gb) { - ctrl_ext = - BP10GB_READ_REG(pbpctl_dev, MISC_REG_GPIO); - BP10GB_WRITE_REG(pbpctl_dev, MISC_REG_GPIO, - (ctrl_ext | BP10GB_GPIO3_OE_P1) - & ~(BP10GB_GPIO3_SET_P1 | - BP10GB_GPIO3_CLR_P1)); - - return (((BP10GB_READ_REG - (pbpctl_dev, - MISC_REG_GPIO)) & BP10GB_GPIO3_P1) != - 0 ? 1 : 0); - } - if (!pbpctl_dev->bp_10g) { - - return (((BPCTL_READ_REG - (pbpctl_dev_b, - CTRL_EXT)) & - BPCTLI_CTRL_EXT_SDP6_DATA) != - 0 ? 1 : 0); - } else { - ctrl_ext = BP10G_READ_REG(pbpctl_dev_b, EODSDP); - BP10G_WRITE_REG(pbpctl_dev_b, EODSDP, - (ctrl_ext | - BP10G_SDP6_DATA_OUT)); - return (((BP10G_READ_REG(pbpctl_dev_b, EODSDP)) - & BP10G_SDP6_DATA_IN) != 0 ? 1 : 0); - } - - } - } - return BP_NOT_CAP; -} - -static int disc_status(struct bpctl_dev *pbpctl_dev) -{ - int ctrl = 0; - - if (pbpctl_dev->bp_caps & DISC_CAP) { - ctrl = disc_off_status(pbpctl_dev); - if (ctrl < 0) - return ctrl; - return ((ctrl == 0) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int default_pwron_disc_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & DISC_PWUP_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - DFLT_PWRON_DISC_MASK) == - DFLT_PWRON_DISC_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int dis_disc_cap_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & DIS_DISC_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - DIS_DISC_CAP_MASK) == - DIS_DISC_CAP_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int wdt_exp_mode_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver <= PXG2BPI_VER) - return 0; /* bypass mode */ - else if (pbpctl_dev->bp_ext_ver == PXG2TBPI_VER) - return 1; /* tap mode */ - else if (pbpctl_dev->bp_ext_ver >= PXE2TBPI_VER) { - if (pbpctl_dev->bp_ext_ver >= 0x8) { - if (((read_reg - (pbpctl_dev, - STATUS_DISC_REG_ADDR)) & - WDTE_DISC_BPN_MASK) == WDTE_DISC_BPN_MASK) - return 2; - } - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - WDTE_TAP_BPN_MASK) == - WDTE_TAP_BPN_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -static int tpl2_flag_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - TPL2_FLAG_MASK) == TPL2_FLAG_MASK) ? 1 : 0); - - } - return BP_NOT_CAP; -} - -static int bp_wait_at_pwup_status(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= 0x8) - return ((((read_reg(pbpctl_dev, CONT_CONFIG_REG_ADDR)) & - WAIT_AT_PWUP_MASK) == - WAIT_AT_PWUP_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -static int bp_hw_reset_status(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - - if (pbpctl_dev->bp_ext_ver >= 0x8) - return ((((read_reg(pbpctl_dev, CONT_CONFIG_REG_ADDR)) & - EN_HW_RESET_MASK) == - EN_HW_RESET_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - - -static int std_nic_status(struct bpctl_dev *pbpctl_dev) -{ - int status_val = 0; - - if (pbpctl_dev->bp_caps & STD_NIC_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - return BP_NOT_CAP; - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & - STD_NIC_ON_MASK) == STD_NIC_ON_MASK) ? 1 : 0); - } - - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - if (pbpctl_dev->bp_caps & BP_CAP) { - status_val = - read_reg(pbpctl_dev, STATUS_REG_ADDR); - if (((!(status_val & WDT_EN_MASK)) - && ((status_val & STD_NIC_MASK) == - STD_NIC_MASK))) - status_val = 1; - else - return 0; - } - if (pbpctl_dev->bp_caps & TAP_CAP) { - status_val = - read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR); - if ((status_val & STD_NIC_TAP_MASK) == - STD_NIC_TAP_MASK) - status_val = 1; - else - return 0; - } - if (pbpctl_dev->bp_caps & TAP_CAP) { - if ((disc_off_status(pbpctl_dev))) - status_val = 1; - else - return 0; - } - - return status_val; - } - } - return BP_NOT_CAP; -} - -/******************************************************/ -/**************SW_INIT*********************************/ -/******************************************************/ -static void bypass_caps_init(struct bpctl_dev *pbpctl_dev) -{ - u_int32_t ctrl_ext = 0; - struct bpctl_dev *pbpctl_dev_m = NULL; - -#ifdef BYPASS_DEBUG - int ret = 0; - - if (!(INTEL_IF_SERIES(adapter->bp_device_block.subdevice))) { - ret = read_reg(pbpctl_dev, VER_REG_ADDR); - printk("VER_REG reg1=%x\n", ret); - ret = read_reg(pbpctl_dev, PRODUCT_CAP_REG_ADDR); - printk("PRODUCT_CAP reg=%x\n", ret); - ret = read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR); - printk("STATUS_TAP reg1=%x\n", ret); - ret = read_reg(pbpctl_dev, 0x7); - printk("SIG_REG reg1=%x\n", ret); - ret = read_reg(pbpctl_dev, STATUS_REG_ADDR); - printk("STATUS_REG_ADDR=%x\n", ret); - ret = read_reg(pbpctl_dev, WDT_REG_ADDR); - printk("WDT_REG_ADDR=%x\n", ret); - ret = read_reg(pbpctl_dev, TMRL_REG_ADDR); - printk("TMRL_REG_ADDR=%x\n", ret); - ret = read_reg(pbpctl_dev, TMRH_REG_ADDR); - printk("TMRH_REG_ADDR=%x\n", ret); - } -#endif - if ((pbpctl_dev->bp_fiber5) || (pbpctl_dev->bp_10g9)) { - pbpctl_dev->media_type = BP_FIBER; - } else if (pbpctl_dev->bp_10gb) { - if (BP10GB_CX4_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->media_type = BP_CX4; - else - pbpctl_dev->media_type = BP_FIBER; - - } - - else if (pbpctl_dev->bp_540) - pbpctl_dev->media_type = BP_NONE; - else if (!pbpctl_dev->bp_10g) { - - ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - if ((ctrl_ext & BPCTLI_CTRL_EXT_LINK_MODE_MASK) == 0x0) - pbpctl_dev->media_type = BP_COPPER; - else - pbpctl_dev->media_type = BP_FIBER; - - } else { - if (BP10G_CX4_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->media_type = BP_CX4; - else - pbpctl_dev->media_type = BP_FIBER; - } - - if (is_bypass_fn(pbpctl_dev)) { - - pbpctl_dev->bp_caps |= BP_PWOFF_ON_CAP; - if (pbpctl_dev->media_type == BP_FIBER) - pbpctl_dev->bp_caps |= - (TX_CTL_CAP | TX_STATUS_CAP | TPL_CAP); - - if (TPL_IF_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->bp_caps |= TPL_CAP; - - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { - pbpctl_dev->bp_caps |= - (BP_CAP | BP_STATUS_CAP | SW_CTL_CAP | - BP_PWUP_ON_CAP | BP_PWUP_OFF_CAP | BP_PWOFF_OFF_CAP - | WD_CTL_CAP | WD_STATUS_CAP | STD_NIC_CAP | - WD_TIMEOUT_CAP); - - pbpctl_dev->bp_ext_ver = OLD_IF_VER; - return; - } - - if ((pbpctl_dev->bp_fw_ver == 0xff) && - OLD_IF_SERIES(pbpctl_dev->subdevice)) { - - pbpctl_dev->bp_caps |= - (BP_CAP | BP_STATUS_CAP | BP_STATUS_CHANGE_CAP | - SW_CTL_CAP | BP_PWUP_ON_CAP | WD_CTL_CAP | - WD_STATUS_CAP | WD_TIMEOUT_CAP); - - pbpctl_dev->bp_ext_ver = OLD_IF_VER; - return; - } - - else { - switch (pbpctl_dev->bp_fw_ver) { - case BP_FW_VER_A0: - case BP_FW_VER_A1:{ - pbpctl_dev->bp_ext_ver = - (pbpctl_dev-> - bp_fw_ver & EXT_VER_MASK); - break; - } - default:{ - if ((bypass_sign_check(pbpctl_dev)) != - 1) { - pbpctl_dev->bp_caps = 0; - return; - } - pbpctl_dev->bp_ext_ver = - (pbpctl_dev-> - bp_fw_ver & EXT_VER_MASK); - } - } - } - - if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - pbpctl_dev->bp_caps |= - (BP_CAP | BP_STATUS_CAP | BP_STATUS_CHANGE_CAP | - SW_CTL_CAP | BP_DIS_CAP | BP_DIS_STATUS_CAP | - BP_PWUP_ON_CAP | BP_PWUP_OFF_CAP | BP_PWUP_CTL_CAP - | WD_CTL_CAP | STD_NIC_CAP | WD_STATUS_CAP | - WD_TIMEOUT_CAP); - else if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - int cap_reg; - - pbpctl_dev->bp_caps |= - (SW_CTL_CAP | WD_CTL_CAP | WD_STATUS_CAP | - WD_TIMEOUT_CAP); - cap_reg = get_bp_prod_caps(pbpctl_dev); - - if ((cap_reg & NORMAL_UNSUPPORT_MASK) == - NORMAL_UNSUPPORT_MASK) - pbpctl_dev->bp_caps |= NIC_CAP_NEG; - else - pbpctl_dev->bp_caps |= STD_NIC_CAP; - - if ((normal_support(pbpctl_dev)) == 1) - - pbpctl_dev->bp_caps |= STD_NIC_CAP; - - else - pbpctl_dev->bp_caps |= NIC_CAP_NEG; - if ((cap_reg & BYPASS_SUPPORT_MASK) == - BYPASS_SUPPORT_MASK) { - pbpctl_dev->bp_caps |= - (BP_CAP | BP_STATUS_CAP | - BP_STATUS_CHANGE_CAP | BP_DIS_CAP | - BP_DIS_STATUS_CAP | BP_PWUP_ON_CAP | - BP_PWUP_OFF_CAP | BP_PWUP_CTL_CAP); - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER7) - pbpctl_dev->bp_caps |= - BP_PWOFF_ON_CAP | BP_PWOFF_OFF_CAP | - BP_PWOFF_CTL_CAP; - } - if ((cap_reg & TAP_SUPPORT_MASK) == TAP_SUPPORT_MASK) { - pbpctl_dev->bp_caps |= - (TAP_CAP | TAP_STATUS_CAP | - TAP_STATUS_CHANGE_CAP | TAP_DIS_CAP | - TAP_DIS_STATUS_CAP | TAP_PWUP_ON_CAP | - TAP_PWUP_OFF_CAP | TAP_PWUP_CTL_CAP); - } - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER8) { - if ((cap_reg & DISC_SUPPORT_MASK) == - DISC_SUPPORT_MASK) - pbpctl_dev->bp_caps |= - (DISC_CAP | DISC_DIS_CAP | - DISC_PWUP_CTL_CAP); - if ((cap_reg & TPL2_SUPPORT_MASK) == - TPL2_SUPPORT_MASK) { - pbpctl_dev->bp_caps_ex |= TPL2_CAP_EX; - pbpctl_dev->bp_caps |= TPL_CAP; - pbpctl_dev->bp_tpl_flag = - tpl2_flag_status(pbpctl_dev); - } - - } - - if (pbpctl_dev->bp_ext_ver >= BP_FW_EXT_VER9) { - if ((cap_reg & DISC_PORT_SUPPORT_MASK) == - DISC_PORT_SUPPORT_MASK) { - pbpctl_dev->bp_caps_ex |= - DISC_PORT_CAP_EX; - pbpctl_dev->bp_caps |= - (TX_CTL_CAP | TX_STATUS_CAP); - } - - } - - } - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - if ((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - WDT_EN_MASK) - pbpctl_dev->wdt_status = WDT_STATUS_EN; - else - pbpctl_dev->wdt_status = WDT_STATUS_DIS; - } - - } else if ((P2BPFI_IF_SERIES(pbpctl_dev->subdevice)) || - (PEGF5_IF_SERIES(pbpctl_dev->subdevice)) || - (PEGF80_IF_SERIES(pbpctl_dev->subdevice)) || - (BP10G9_IF_SERIES(pbpctl_dev->subdevice))) { - pbpctl_dev->bp_caps |= (TX_CTL_CAP | TX_STATUS_CAP); - } - if ((pbpctl_dev->subdevice & 0xa00) == 0xa00) - pbpctl_dev->bp_caps |= (TX_CTL_CAP | TX_STATUS_CAP); - if (PEG5_IF_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->bp_caps |= (TX_CTL_CAP | TX_STATUS_CAP); - - if (BP10GB_IF_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->bp_caps &= ~(TX_CTL_CAP | TX_STATUS_CAP); - - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m != NULL) { - int cap_reg = 0; - if (pbpctl_dev_m->bp_ext_ver >= 0x9) { - cap_reg = get_bp_prod_caps(pbpctl_dev_m); - if ((cap_reg & DISC_PORT_SUPPORT_MASK) == - DISC_PORT_SUPPORT_MASK) - pbpctl_dev->bp_caps |= - (TX_CTL_CAP | TX_STATUS_CAP); - pbpctl_dev->bp_caps_ex |= DISC_PORT_CAP_EX; - } - } -} - -static void remove_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) -{ -#ifdef BP_SELF_TEST - struct bpctl_dev *pbpctl_dev_sl = NULL; -#endif - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - - del_timer_sync(&pbpctl_dev->bp_timer); -#ifdef BP_SELF_TEST - pbpctl_dev_sl = get_status_port_fn(pbpctl_dev); - if (pbpctl_dev_sl && (pbpctl_dev_sl->ndev)) { - if ((pbpctl_dev_sl->ndev->netdev_ops) - && (pbpctl_dev_sl->old_ops)) { - rtnl_lock(); - pbpctl_dev_sl->ndev->netdev_ops = - pbpctl_dev_sl->old_ops; - pbpctl_dev_sl->old_ops = NULL; - - rtnl_unlock(); - - } - - } -#endif - } - -} - -static int init_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - init_timer(&pbpctl_dev->bp_timer); - pbpctl_dev->bp_timer.function = &wd_reset_timer; - pbpctl_dev->bp_timer.data = (unsigned long)pbpctl_dev; - return 1; - } - return BP_NOT_CAP; -} - -#ifdef BP_SELF_TEST -int bp_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct bpctl_dev *pbpctl_dev = NULL, *pbpctl_dev_m = NULL; - int idx_dev = 0; - struct ethhdr *eth = (struct ethhdr *)skb->data; - - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].ndev != NULL) && (idx_dev < device_num)); - idx_dev++) { - if (bpctl_dev_arr[idx_dev].ndev == dev) { - pbpctl_dev = &bpctl_dev_arr[idx_dev]; - break; - } - } - if (!pbpctl_dev) - return 1; - if ((htons(ETH_P_BPTEST) == eth->h_proto)) { - - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m) { - - if (bypass_status(pbpctl_dev_m)) { - cmnd_on(pbpctl_dev_m); - bypass_off(pbpctl_dev_m); - cmnd_off(pbpctl_dev_m); - } - wdt_timer_reload(pbpctl_dev_m); - } - dev_kfree_skb_irq(skb); - return 0; - } - return pbpctl_dev->hard_start_xmit_save(skb, dev); -} -#endif - -static int set_bypass_wd_auto(struct bpctl_dev *pbpctl_dev, unsigned int param) -{ - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (pbpctl_dev->reset_time != param) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->reset_time = - (param < - WDT_AUTO_MIN_INT) ? WDT_AUTO_MIN_INT : - param; - else - pbpctl_dev->reset_time = param; - if (param) - mod_timer(&pbpctl_dev->bp_timer, jiffies); - } - return 0; - } - return BP_NOT_CAP; -} - -static int get_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & WD_CTL_CAP) - return pbpctl_dev->reset_time; - - return BP_NOT_CAP; -} - -#ifdef BP_SELF_TEST - -int set_bp_self_test(struct bpctl_dev *pbpctl_dev, unsigned int param) -{ - struct bpctl_dev *pbpctl_dev_sl = NULL; - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - pbpctl_dev->bp_self_test_flag = param == 0 ? 0 : 1; - pbpctl_dev_sl = get_status_port_fn(pbpctl_dev); - - if ((pbpctl_dev_sl->ndev) && (pbpctl_dev_sl->ndev->netdev_ops)) { - rtnl_lock(); - if (pbpctl_dev->bp_self_test_flag == 1) { - - pbpctl_dev_sl->old_ops = - pbpctl_dev_sl->ndev->netdev_ops; - pbpctl_dev_sl->new_ops = - *pbpctl_dev_sl->old_ops; - pbpctl_dev_sl->new_ops.ndo_start_xmit = - bp_hard_start_xmit; - pbpctl_dev_sl->ndev->netdev_ops = - &pbpctl_dev_sl->new_ops; - - } else if (pbpctl_dev_sl->old_ops) { - pbpctl_dev_sl->ndev->netdev_ops = - pbpctl_dev_sl->old_ops; - pbpctl_dev_sl->old_ops = NULL; - } - rtnl_unlock(); - } - - set_bypass_wd_auto(pbpctl_dev, param); - return 0; - } - return BP_NOT_CAP; -} - -int get_bp_self_test(struct bpctl_dev *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (pbpctl_dev->bp_self_test_flag == 1) - return pbpctl_dev->reset_time; - else - return 0; - } - return BP_NOT_CAP; -} - -#endif - -/**************************************************************/ -/************************* API ********************************/ -/**************************************************************/ - -int is_bypass_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return (((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) ? 1 : 0); -} - -static int set_bypass_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) -{ - int ret = 0; - - if (!(pbpctl_dev->bp_caps & BP_CAP)) - return BP_NOT_CAP; - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (!bypass_mode) - ret = bypass_off(pbpctl_dev); - else - ret = bypass_on(pbpctl_dev); - cmnd_off(pbpctl_dev); - - return ret; -} - -static int get_bypass_fn(struct bpctl_dev *pbpctl_dev) -{ - return bypass_status(pbpctl_dev); -} - -static int get_bypass_change_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return bypass_change_status(pbpctl_dev); -} - -static int set_dis_bypass_fn(struct bpctl_dev *pbpctl_dev, int dis_param) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if (!(pbpctl_dev->bp_caps & BP_DIS_CAP)) - return BP_NOT_CAP; - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (dis_param) - ret = dis_bypass_cap(pbpctl_dev); - else - ret = en_bypass_cap(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; -} - -static int get_dis_bypass_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return dis_bypass_cap_status(pbpctl_dev); -} - -static int set_bypass_pwoff_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if (!(pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP)) - return BP_NOT_CAP; - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (bypass_mode) - ret = bypass_state_pwroff(pbpctl_dev); - else - ret = normal_state_pwroff(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; -} - -static int get_bypass_pwoff_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return default_pwroff_status(pbpctl_dev); -} - -static int set_bypass_pwup_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if (!(pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP)) - return BP_NOT_CAP; - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (bypass_mode) - ret = bypass_state_pwron(pbpctl_dev); - else - ret = normal_state_pwron(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; -} - -static int get_bypass_pwup_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return default_pwron_status(pbpctl_dev); -} - -static int set_bypass_wd_fn(struct bpctl_dev *pbpctl_dev, int timeout) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if (!(pbpctl_dev->bp_caps & WD_CTL_CAP)) - return BP_NOT_CAP; - - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (!timeout) - ret = wdt_off(pbpctl_dev); - else { - wdt_on(pbpctl_dev, timeout); - ret = pbpctl_dev->bypass_timer_interval; - } - cmnd_off(pbpctl_dev); - return ret; -} - -static int get_bypass_wd_fn(struct bpctl_dev *pbpctl_dev, int *timeout) -{ - if (!pbpctl_dev) - return -1; - - return wdt_programmed(pbpctl_dev, timeout); -} - -static int get_wd_expire_time_fn(struct bpctl_dev *pbpctl_dev, int *time_left) -{ - if (!pbpctl_dev) - return -1; - - return wdt_timer(pbpctl_dev, time_left); -} - -static int reset_bypass_wd_timer_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return wdt_timer_reload(pbpctl_dev); -} - -static int get_wd_set_caps_fn(struct bpctl_dev *pbpctl_dev) -{ - int bp_status = 0; - unsigned int step_value = TIMEOUT_MAX_STEP + 1, bit_cnt = 0; - - if (!pbpctl_dev) - return -1; - - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - return BP_NOT_CAP; - - while ((step_value >>= 1)) - bit_cnt++; - - if (is_bypass_fn(pbpctl_dev)) { - bp_status = - WD_STEP_COUNT_MASK(bit_cnt) | WDT_STEP_TIME | - WD_MIN_TIME_MASK(TIMEOUT_UNIT / 100); - } else - return -1; - - return bp_status; -} - -static int set_std_nic_fn(struct bpctl_dev *pbpctl_dev, int nic_mode) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if (!(pbpctl_dev->bp_caps & STD_NIC_CAP)) - return BP_NOT_CAP; - - ret = cmnd_on(pbpctl_dev); - if (ret < 0) - return ret; - if (nic_mode) - ret = std_nic_on(pbpctl_dev); - else - ret = std_nic_off(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; -} - -static int get_std_nic_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return std_nic_status(pbpctl_dev); -} - -static int set_tap_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) -{ - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & TAP_CAP) && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (!tap_mode) - tap_off(pbpctl_dev); - else - tap_on(pbpctl_dev); - cmnd_off(pbpctl_dev); - return 0; - } - return BP_NOT_CAP; -} - -static int get_tap_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return tap_status(pbpctl_dev); -} - -static int set_tap_pwup_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) - && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (tap_mode) - ret = tap_state_pwron(pbpctl_dev); - else - ret = normal_state_pwron(pbpctl_dev); - cmnd_off(pbpctl_dev); - } else - ret = BP_NOT_CAP; - return ret; -} - -static int get_tap_pwup_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - ret = default_pwron_tap_status(pbpctl_dev); - if (ret < 0) - return ret; - return ((ret == 0) ? 1 : 0); -} - -static int get_tap_change_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return tap_change_status(pbpctl_dev); -} - -static int set_dis_tap_fn(struct bpctl_dev *pbpctl_dev, int dis_param) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & TAP_DIS_CAP) && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (dis_param) - ret = dis_tap_cap(pbpctl_dev); - else - ret = en_tap_cap(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; - } else - return BP_NOT_CAP; -} - -static int get_dis_tap_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return dis_tap_cap_status(pbpctl_dev); -} - -static int set_disc_fn(struct bpctl_dev *pbpctl_dev, int disc_mode) -{ - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & DISC_CAP) && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (!disc_mode) - disc_off(pbpctl_dev); - else - disc_on(pbpctl_dev); - cmnd_off(pbpctl_dev); - - return BP_OK; - } - return BP_NOT_CAP; -} - -static int get_disc_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - ret = disc_status(pbpctl_dev); - - return ret; -} - -static int set_disc_pwup_fn(struct bpctl_dev *pbpctl_dev, int disc_mode) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & DISC_PWUP_CTL_CAP) - && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (disc_mode) - ret = disc_state_pwron(pbpctl_dev); - else - ret = normal_state_pwron(pbpctl_dev); - cmnd_off(pbpctl_dev); - } else - ret = BP_NOT_CAP; - return ret; -} - -static int get_disc_pwup_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - ret = default_pwron_disc_status(pbpctl_dev); - return (ret == 0 ? 1 : (ret < 0 ? BP_NOT_CAP : 0)); -} - -static int get_disc_change_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - ret = disc_change_status(pbpctl_dev); - return ret; -} - -static int set_dis_disc_fn(struct bpctl_dev *pbpctl_dev, int dis_param) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & DISC_DIS_CAP) - && ((cmnd_on(pbpctl_dev)) >= 0)) { - if (dis_param) - ret = dis_disc_cap(pbpctl_dev); - else - ret = en_disc_cap(pbpctl_dev); - cmnd_off(pbpctl_dev); - return ret; - } else - return BP_NOT_CAP; -} - -static int get_dis_disc_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - ret = dis_disc_cap_status(pbpctl_dev); - - return ret; -} - -static int get_wd_exp_mode_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return wdt_exp_mode_status(pbpctl_dev); -} - -static int set_wd_exp_mode_fn(struct bpctl_dev *pbpctl_dev, int param) -{ - if (!pbpctl_dev) - return -1; - - return wdt_exp_mode(pbpctl_dev, param); -} - -static int set_tx_fn(struct bpctl_dev *pbpctl_dev, int tx_state) -{ - struct bpctl_dev *pbpctl_dev_b = NULL; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & TPL_CAP) && - (pbpctl_dev->bp_caps & SW_CTL_CAP)) { - if ((pbpctl_dev->bp_tpl_flag)) - return BP_NOT_CAP; - } else { - pbpctl_dev_b = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_b && - (pbpctl_dev_b->bp_caps & TPL_CAP) && - (pbpctl_dev_b->bp_tpl_flag)) - return BP_NOT_CAP; - } - return set_tx(pbpctl_dev, tx_state); -} - -static int set_bp_force_link_fn(int dev_num, int tx_state) -{ - static struct bpctl_dev *bpctl_dev_curr; - - if ((dev_num < 0) || (dev_num > device_num) - || (bpctl_dev_arr[dev_num].pdev == NULL)) - return -1; - bpctl_dev_curr = &bpctl_dev_arr[dev_num]; - - return set_bp_force_link(bpctl_dev_curr, tx_state); -} - -static int set_wd_autoreset_fn(struct bpctl_dev *pbpctl_dev, int param) -{ - if (!pbpctl_dev) - return -1; - - return set_bypass_wd_auto(pbpctl_dev, param); -} - -static int get_wd_autoreset_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return get_bypass_wd_auto(pbpctl_dev); -} - -#ifdef BP_SELF_TEST -int set_bp_self_test_fn(struct bpctl_dev *pbpctl_dev, int param) -{ - if (!pbpctl_dev) - return -1; - - return set_bp_self_test(pbpctl_dev, param); -} - -int get_bp_self_test_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return get_bp_self_test(pbpctl_dev); -} - -#endif - -static int get_bypass_caps_fn(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return pbpctl_dev->bp_caps; - -} - -static int get_bypass_slave_fn(struct bpctl_dev *pbpctl_dev, - struct bpctl_dev **pbpctl_dev_out) -{ - int idx_dev = 0; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) { - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) - && (bpctl_dev_arr[idx_dev].slot == - pbpctl_dev->slot)) { - if ((pbpctl_dev->func == 0) - && (bpctl_dev_arr[idx_dev].func == 1)) { - *pbpctl_dev_out = - &bpctl_dev_arr[idx_dev]; - return 1; - } - if ((pbpctl_dev->func == 2) && - (bpctl_dev_arr[idx_dev].func == 3)) { - *pbpctl_dev_out = - &bpctl_dev_arr[idx_dev]; - return 1; - } - } - } - return -1; - } else - return 0; -} - -static int is_bypass(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) - return 1; - else - return 0; -} - -static int get_tx_fn(struct bpctl_dev *pbpctl_dev) -{ - struct bpctl_dev *pbpctl_dev_b = NULL; - - if (!pbpctl_dev) - return -1; - - if ((pbpctl_dev->bp_caps & TPL_CAP) && - (pbpctl_dev->bp_caps & SW_CTL_CAP)) { - if ((pbpctl_dev->bp_tpl_flag)) - return BP_NOT_CAP; - } else { - pbpctl_dev_b = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_b && - (pbpctl_dev_b->bp_caps & TPL_CAP) && - (pbpctl_dev_b->bp_tpl_flag)) - return BP_NOT_CAP; - } - return tx_status(pbpctl_dev); -} - -static int get_bp_force_link_fn(int dev_num) -{ - static struct bpctl_dev *bpctl_dev_curr; - - if ((dev_num < 0) || (dev_num > device_num) - || (bpctl_dev_arr[dev_num].pdev == NULL)) - return -1; - bpctl_dev_curr = &bpctl_dev_arr[dev_num]; - - return bp_force_link_status(bpctl_dev_curr); -} - -static int get_bypass_link_status(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->media_type == BP_FIBER) - return ((BPCTL_READ_REG(pbpctl_dev, CTRL) & - BPCTLI_CTRL_SWDPIN1)); - else - return ((BPCTL_READ_REG(pbpctl_dev, STATUS) & - BPCTLI_STATUS_LU)); - -} - -static void bp_tpl_timer_fn(unsigned long param) -{ - struct bpctl_dev *pbpctl_dev = (struct bpctl_dev *) param; - uint32_t link1, link2; - struct bpctl_dev *pbpctl_dev_b = NULL; - - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (!pbpctl_dev_b) - return; - - if (!pbpctl_dev->bp_tpl_flag) { - set_tx(pbpctl_dev_b, 1); - set_tx(pbpctl_dev, 1); - return; - } - link1 = get_bypass_link_status(pbpctl_dev); - - link2 = get_bypass_link_status(pbpctl_dev_b); - if ((link1) && (tx_status(pbpctl_dev))) { - if ((!link2) && (tx_status(pbpctl_dev_b))) - set_tx(pbpctl_dev, 0); - else if (!tx_status(pbpctl_dev_b)) - set_tx(pbpctl_dev_b, 1); - } else if ((!link1) && (tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) - set_tx(pbpctl_dev_b, 0); - } else if ((link1) && (!tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) - set_tx(pbpctl_dev, 1); - } else if ((!link1) && (!tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) - set_tx(pbpctl_dev, 1); - } - - mod_timer(&pbpctl_dev->bp_tpl_timer, jiffies + BP_LINK_MON_DELAY * HZ); -} - -static void remove_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev) -{ - struct bpctl_dev *pbpctl_dev_b; - if (!pbpctl_dev) - return; - - if (pbpctl_dev->bp_caps & TPL_CAP) { - del_timer_sync(&pbpctl_dev->bp_tpl_timer); - pbpctl_dev->bp_tpl_flag = 0; - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (pbpctl_dev_b) - set_tx(pbpctl_dev_b, 1); - set_tx(pbpctl_dev, 1); - } - return; -} - -static int init_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - if (pbpctl_dev->bp_caps & TPL_CAP) { - init_timer(&pbpctl_dev->bp_tpl_timer); - pbpctl_dev->bp_tpl_timer.function = &bp_tpl_timer_fn; - pbpctl_dev->bp_tpl_timer.data = (unsigned long)pbpctl_dev; - return BP_OK; - } - return BP_NOT_CAP; -} - -static int set_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev, unsigned int param) -{ - if (!pbpctl_dev) - return -1; - if (pbpctl_dev->bp_caps & TPL_CAP) { - if ((param) && (!pbpctl_dev->bp_tpl_flag)) { - pbpctl_dev->bp_tpl_flag = param; - mod_timer(&pbpctl_dev->bp_tpl_timer, jiffies + 1); - return BP_OK; - } - if ((!param) && (pbpctl_dev->bp_tpl_flag)) - remove_bypass_tpl_auto(pbpctl_dev); - - return BP_OK; - } - return BP_NOT_CAP; -} - -static int set_tpl_fn(struct bpctl_dev *pbpctl_dev, int tpl_mode) -{ - - struct bpctl_dev *pbpctl_dev_b; - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_caps & TPL_CAP) { - if (tpl_mode) { - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (pbpctl_dev_b) - set_tx(pbpctl_dev_b, 1); - set_tx(pbpctl_dev, 1); - } - if ((TPL_IF_SERIES(pbpctl_dev->subdevice)) || - (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX)) { - pbpctl_dev->bp_tpl_flag = tpl_mode; - if (!tpl_mode) - tpl_hw_off(pbpctl_dev); - else - tpl_hw_on(pbpctl_dev); - } else - set_bypass_tpl_auto(pbpctl_dev, tpl_mode); - return 0; - } - return BP_NOT_CAP; -} - -static int get_tpl_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_caps & TPL_CAP) { - if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) - return tpl2_flag_status(pbpctl_dev); - ret = pbpctl_dev->bp_tpl_flag; - } - return ret; -} - -static int set_bp_wait_at_pwup_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) -{ - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - /* bp_lock(pbp_device_block); */ - cmnd_on(pbpctl_dev); - if (!tap_mode) - bp_wait_at_pwup_dis(pbpctl_dev); - else - bp_wait_at_pwup_en(pbpctl_dev); - cmnd_off(pbpctl_dev); - - /* bp_unlock(pbp_device_block); */ - return BP_OK; - } - return BP_NOT_CAP; -} - -static int get_bp_wait_at_pwup_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - /* bp_lock(pbp_device_block); */ - ret = bp_wait_at_pwup_status(pbpctl_dev); - /* bp_unlock(pbp_device_block); */ - - return ret; -} - -static int set_bp_hw_reset_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) -{ - if (!pbpctl_dev) - return -1; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - /* bp_lock(pbp_device_block); */ - cmnd_on(pbpctl_dev); - - if (!tap_mode) - bp_hw_reset_dis(pbpctl_dev); - else - bp_hw_reset_en(pbpctl_dev); - cmnd_off(pbpctl_dev); - /* bp_unlock(pbp_device_block); */ - return BP_OK; - } - return BP_NOT_CAP; -} - -static int get_bp_hw_reset_fn(struct bpctl_dev *pbpctl_dev) -{ - int ret = 0; - - if (!pbpctl_dev) - return -1; - - /* bp_lock(pbp_device_block); */ - ret = bp_hw_reset_status(pbpctl_dev); - - /* bp_unlock(pbp_device_block); */ - - return ret; -} - - -static int get_bypass_info_fn(struct bpctl_dev *pbpctl_dev, char *dev_name, - char *add_param) -{ - if (!pbpctl_dev) - return -1; - if (!is_bypass_fn(pbpctl_dev)) - return -1; - strcpy(dev_name, pbpctl_dev->name); - *add_param = pbpctl_dev->bp_fw_ver; - return 0; -} - -static int get_dev_idx_bsf(int bus, int slot, int func) -{ - int idx_dev = 0; - - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) && (idx_dev < device_num)); - idx_dev++) { - if ((bus == bpctl_dev_arr[idx_dev].bus) - && (slot == bpctl_dev_arr[idx_dev].slot) - && (func == bpctl_dev_arr[idx_dev].func)) - - return idx_dev; - } - return -1; -} - -static int get_dev_idx(int ifindex) -{ - int idx_dev = 0; - - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) && (idx_dev < device_num)); - idx_dev++) { - if (ifindex == bpctl_dev_arr[idx_dev].ifindex) - return idx_dev; - } - - return -1; -} - -static struct bpctl_dev *get_dev_idx_p(int ifindex) -{ - int idx_dev = 0; - - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) && (idx_dev < device_num)); - idx_dev++) { - if (ifindex == bpctl_dev_arr[idx_dev].ifindex) - return &bpctl_dev_arr[idx_dev]; - } - - return NULL; -} - -static void if_scan_init(void) -{ - struct net_device *dev; - - /* rcu_read_lock(); */ - /* rtnl_lock(); */ - /* rcu_read_lock(); */ - - for_each_netdev(&init_net, dev) { - int idx_dev; - - if (bp_get_dev_idx_bsf(dev, &idx_dev)) - continue; - - if (idx_dev == -1) - continue; - - bpctl_dev_arr[idx_dev].ifindex = dev->ifindex; - bpctl_dev_arr[idx_dev].ndev = dev; - } - /* rtnl_unlock(); */ - /* rcu_read_unlock(); */ -} - -static long device_ioctl(struct file *file, /* see include/linux/fs.h */ - unsigned int ioctl_num, /* number and param for ioctl */ - unsigned long ioctl_param) -{ - struct bpctl_cmd bpctl_cmd; - int dev_idx = 0; - struct bpctl_dev *pbpctl_dev_out; - void __user *argp = (void __user *)ioctl_param; - int ret = 0; - unsigned long flags; - - static struct bpctl_dev *pbpctl_dev; - - /* lock_kernel(); */ - if (down_interruptible(&bpctl_sema)) - return -ERESTARTSYS; - /* local_irq_save(flags); */ - /* if(!spin_trylock_irqsave(&bpvm_lock)){ - local_irq_restore(flags); - unlock_bpctl(); - unlock_kernel(); - return -1; - } */ - /* spin_lock_irqsave(&bpvm_lock, flags); */ - -/* -* Switch according to the ioctl called -*/ - if (ioctl_num == IOCTL_TX_MSG(IF_SCAN)) { - if_scan_init(); - ret = SUCCESS; - goto bp_exit; - } - if (copy_from_user(&bpctl_cmd, argp, sizeof(struct bpctl_cmd))) { - - ret = -EFAULT; - goto bp_exit; - } - - if (ioctl_num == IOCTL_TX_MSG(GET_DEV_NUM)) { - bpctl_cmd.out_param[0] = device_num; - if (copy_to_user - (argp, (void *)&bpctl_cmd, sizeof(struct bpctl_cmd))) { - ret = -EFAULT; - goto bp_exit; - } - ret = SUCCESS; - goto bp_exit; - - } - /* lock_bpctl(); */ - /* preempt_disable(); */ - local_irq_save(flags); - if (!spin_trylock(&bpvm_lock)) { - local_irq_restore(flags); - unlock_bpctl(); - return -1; - } - -/* preempt_disable(); - rcu_read_lock(); - spin_lock_irqsave(&bpvm_lock, flags); -*/ - if ((bpctl_cmd.in_param[5]) || - (bpctl_cmd.in_param[6]) || (bpctl_cmd.in_param[7])) - dev_idx = get_dev_idx_bsf(bpctl_cmd.in_param[5], - bpctl_cmd.in_param[6], - bpctl_cmd.in_param[7]); - else if (bpctl_cmd.in_param[1] == 0) - dev_idx = bpctl_cmd.in_param[0]; - else - dev_idx = get_dev_idx(bpctl_cmd.in_param[1]); - - if (dev_idx < 0 || dev_idx > device_num) { - /* unlock_bpctl(); - preempt_enable(); */ - ret = -EOPNOTSUPP; - /* preempt_enable(); - rcu_read_unlock(); */ - spin_unlock_irqrestore(&bpvm_lock, flags); - goto bp_exit; - } - - bpctl_cmd.out_param[0] = bpctl_dev_arr[dev_idx].bus; - bpctl_cmd.out_param[1] = bpctl_dev_arr[dev_idx].slot; - bpctl_cmd.out_param[2] = bpctl_dev_arr[dev_idx].func; - bpctl_cmd.out_param[3] = bpctl_dev_arr[dev_idx].ifindex; - - if ((bpctl_dev_arr[dev_idx].bp_10gb) - && (!(bpctl_dev_arr[dev_idx].ifindex))) { - printk("Please load network driver for %s adapter!\n", - bpctl_dev_arr[dev_idx].name); - bpctl_cmd.status = -1; - ret = SUCCESS; - /* preempt_enable(); */ - /* rcu_read_unlock(); */ - spin_unlock_irqrestore(&bpvm_lock, flags); - goto bp_exit; - - } - if ((bpctl_dev_arr[dev_idx].bp_10gb) && (bpctl_dev_arr[dev_idx].ndev)) { - if (!(bpctl_dev_arr[dev_idx].ndev->flags & IFF_UP)) { - if (!(bpctl_dev_arr[dev_idx].ndev->flags & IFF_UP)) { - printk - ("Please bring up network interfaces for %s adapter!\n", - bpctl_dev_arr[dev_idx].name); - bpctl_cmd.status = -1; - ret = SUCCESS; - /* preempt_enable(); */ - /* rcu_read_unlock(); */ - spin_unlock_irqrestore(&bpvm_lock, flags); - goto bp_exit; - } - - } - } - - if ((dev_idx < 0) || (dev_idx > device_num) - || (bpctl_dev_arr[dev_idx].pdev == NULL)) { - bpctl_cmd.status = -1; - goto bpcmd_exit; - } - - pbpctl_dev = &bpctl_dev_arr[dev_idx]; - - switch (ioctl_num) { - case IOCTL_TX_MSG(SET_BYPASS_PWOFF): - bpctl_cmd.status = - set_bypass_pwoff_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BYPASS_PWOFF): - bpctl_cmd.status = get_bypass_pwoff_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_BYPASS_PWUP): - bpctl_cmd.status = - set_bypass_pwup_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BYPASS_PWUP): - bpctl_cmd.status = get_bypass_pwup_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_BYPASS_WD): - bpctl_cmd.status = - set_bypass_wd_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BYPASS_WD): - bpctl_cmd.status = - get_bypass_wd_fn(pbpctl_dev, (int *)&(bpctl_cmd.data[0])); - break; - - case IOCTL_TX_MSG(GET_WD_EXPIRE_TIME): - bpctl_cmd.status = - get_wd_expire_time_fn(pbpctl_dev, - (int *)&(bpctl_cmd.data[0])); - break; - - case IOCTL_TX_MSG(RESET_BYPASS_WD_TIMER): - bpctl_cmd.status = reset_bypass_wd_timer_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(GET_WD_SET_CAPS): - bpctl_cmd.status = get_wd_set_caps_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_STD_NIC): - bpctl_cmd.status = - set_std_nic_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_STD_NIC): - bpctl_cmd.status = get_std_nic_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_TAP): - bpctl_cmd.status = - set_tap_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_TAP): - bpctl_cmd.status = get_tap_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(GET_TAP_CHANGE): - bpctl_cmd.status = get_tap_change_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_DIS_TAP): - bpctl_cmd.status = - set_dis_tap_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_DIS_TAP): - bpctl_cmd.status = get_dis_tap_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_TAP_PWUP): - bpctl_cmd.status = - set_tap_pwup_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_TAP_PWUP): - bpctl_cmd.status = get_tap_pwup_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_WD_EXP_MODE): - bpctl_cmd.status = - set_wd_exp_mode_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_WD_EXP_MODE): - bpctl_cmd.status = get_wd_exp_mode_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(GET_DIS_BYPASS): - bpctl_cmd.status = get_dis_bypass_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_DIS_BYPASS): - bpctl_cmd.status = - set_dis_bypass_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BYPASS_CHANGE): - bpctl_cmd.status = get_bypass_change_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(GET_BYPASS): - bpctl_cmd.status = get_bypass_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_BYPASS): - bpctl_cmd.status = - set_bypass_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BYPASS_CAPS): - bpctl_cmd.status = get_bypass_caps_fn(pbpctl_dev); - /*preempt_enable(); */ - /*rcu_read_unlock();*/ - spin_unlock_irqrestore(&bpvm_lock, flags); - if (copy_to_user - (argp, (void *)&bpctl_cmd, sizeof(struct bpctl_cmd))) { - /*unlock_bpctl(); */ - /*preempt_enable(); */ - ret = -EFAULT; - goto bp_exit; - } - goto bp_exit; - - case IOCTL_TX_MSG(GET_BYPASS_SLAVE): - bpctl_cmd.status = - get_bypass_slave_fn(pbpctl_dev, &pbpctl_dev_out); - if (bpctl_cmd.status == 1) { - bpctl_cmd.out_param[4] = pbpctl_dev_out->bus; - bpctl_cmd.out_param[5] = pbpctl_dev_out->slot; - bpctl_cmd.out_param[6] = pbpctl_dev_out->func; - bpctl_cmd.out_param[7] = pbpctl_dev_out->ifindex; - } - break; - - case IOCTL_TX_MSG(IS_BYPASS): - bpctl_cmd.status = is_bypass(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_TX): - bpctl_cmd.status = set_tx_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - case IOCTL_TX_MSG(GET_TX): - bpctl_cmd.status = get_tx_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_WD_AUTORESET): - bpctl_cmd.status = - set_wd_autoreset_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - - break; - case IOCTL_TX_MSG(GET_WD_AUTORESET): - - bpctl_cmd.status = get_wd_autoreset_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_DISC): - bpctl_cmd.status = - set_disc_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - case IOCTL_TX_MSG(GET_DISC): - bpctl_cmd.status = get_disc_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(GET_DISC_CHANGE): - bpctl_cmd.status = get_disc_change_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_DIS_DISC): - bpctl_cmd.status = - set_dis_disc_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - case IOCTL_TX_MSG(GET_DIS_DISC): - bpctl_cmd.status = get_dis_disc_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_DISC_PWUP): - bpctl_cmd.status = - set_disc_pwup_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - case IOCTL_TX_MSG(GET_DISC_PWUP): - bpctl_cmd.status = get_disc_pwup_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(GET_BYPASS_INFO): - - bpctl_cmd.status = - get_bypass_info_fn(pbpctl_dev, (char *)&bpctl_cmd.data, - (char *)&bpctl_cmd.out_param[4]); - break; - - case IOCTL_TX_MSG(SET_TPL): - bpctl_cmd.status = - set_tpl_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_TPL): - bpctl_cmd.status = get_tpl_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_BP_WAIT_AT_PWUP): - bpctl_cmd.status = - set_bp_wait_at_pwup_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BP_WAIT_AT_PWUP): - bpctl_cmd.status = get_bp_wait_at_pwup_fn(pbpctl_dev); - break; - case IOCTL_TX_MSG(SET_BP_HW_RESET): - bpctl_cmd.status = - set_bp_hw_reset_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BP_HW_RESET): - bpctl_cmd.status = get_bp_hw_reset_fn(pbpctl_dev); - break; -#ifdef BP_SELF_TEST - case IOCTL_TX_MSG(SET_BP_SELF_TEST): - bpctl_cmd.status = - set_bp_self_test_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - - break; - case IOCTL_TX_MSG(GET_BP_SELF_TEST): - bpctl_cmd.status = get_bp_self_test_fn(pbpctl_dev); - break; - -#endif -#if 0 - case IOCTL_TX_MSG(SET_DISC_PORT): - bpctl_cmd.status = - set_disc_port_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_DISC_PORT): - bpctl_cmd.status = get_disc_port_fn(pbpctl_dev); - break; - - case IOCTL_TX_MSG(SET_DISC_PORT_PWUP): - bpctl_cmd.status = - set_disc_port_pwup_fn(pbpctl_dev, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_DISC_PORT_PWUP): - bpctl_cmd.status = get_disc_port_pwup_fn(pbpctl_dev); - break; -#endif - case IOCTL_TX_MSG(SET_BP_FORCE_LINK): - bpctl_cmd.status = - set_bp_force_link_fn(dev_idx, bpctl_cmd.in_param[2]); - break; - - case IOCTL_TX_MSG(GET_BP_FORCE_LINK): - bpctl_cmd.status = get_bp_force_link_fn(dev_idx); - break; - - default: - /* unlock_bpctl(); */ - - ret = -EOPNOTSUPP; - /* preempt_enable(); */ - /* rcu_read_unlock();*/ - spin_unlock_irqrestore(&bpvm_lock, flags); - goto bp_exit; - } - /* unlock_bpctl(); */ - /* preempt_enable(); */ - bpcmd_exit: - /* rcu_read_unlock(); */ - spin_unlock_irqrestore(&bpvm_lock, flags); - if (copy_to_user(argp, (void *)&bpctl_cmd, sizeof(struct bpctl_cmd))) - ret = -EFAULT; - ret = SUCCESS; - bp_exit: - /* unlock_kernel(); */ - /* spin_unlock_irqrestore(&bpvm_lock, flags); */ - unlock_bpctl(); - /* unlock_kernel(); */ - return ret; -} - -static const struct file_operations Fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = device_ioctl, -}; - -#ifndef PCI_DEVICE -#define PCI_DEVICE(vend, dev) \ - .vendor = (vend), .device = (dev), \ - .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID -#endif - -#define SILICOM_E1000BP_ETHERNET_DEVICE(device_id) {\ - PCI_DEVICE(SILICOM_VID, device_id)} - -enum board_type { - PXG2BPFI, - PXG2BPFIL, - PXG2BPFILX, - PXG2BPFILLX, - PXGBPI, - PXGBPIG, - PXG2TBFI, - PXG4BPI, - PXG4BPFI, - PEG4BPI, - PEG2BPI, - PEG4BPIN, - PEG2BPFI, - PEG2BPFILX, - PMCXG2BPFI, - PMCXG2BPFIN, - PEG4BPII, - PEG4BPFII, - PXG4BPFILX, - PMCXG2BPIN, - PMCXG4BPIN, - PXG2BISC1, - PEG2TBFI, - PXG2TBI, - PXG4BPFID, - PEG4BPFI, - PEG4BPIPT, - PXG6BPI, - PEG4BPIL, - PMCXG2BPIN2, - PMCXG4BPIN2, - PMCX2BPI, - PEG2BPFID, - PEG2BPFIDLX, - PMCX4BPI, - MEG2BPFILN, - MEG2BPFINX, - PEG4BPFILX, - PE10G2BPISR, - PE10G2BPILR, - MHIO8AD, - PE10G2BPICX4, - PEG2BPI5, - PEG6BPI, - PEG4BPFI5, - PEG4BPFI5LX, - MEG2BPFILXLN, - PEG2BPIX1, - MEG2BPFILXNX, - XE10G2BPIT, - XE10G2BPICX4, - XE10G2BPISR, - XE10G2BPILR, - PEG4BPIIO, - XE10G2BPIXR, - PE10GDBISR, - PE10GDBILR, - PEG2BISC6, - PEG6BPIFC, - PE10G2BPTCX4, - PE10G2BPTSR, - PE10G2BPTLR, - PE10G2BPTT, - PEG4BPI6, - PEG4BPFI6, - PEG4BPFI6LX, - PEG4BPFI6ZX, - PEG2BPI6, - PEG2BPFI6, - PEG2BPFI6LX, - PEG2BPFI6ZX, - PEG2BPFI6FLXM, - PEG4BPI6FC, - PEG4BPFI6FC, - PEG4BPFI6FCLX, - PEG4BPFI6FCZX, - PEG6BPI6, - PEG2BPI6SC6, - MEG2BPI6, - XEG2BPI6, - MEG4BPI6, - PEG2BPFI5, - PEG2BPFI5LX, - PXEG4BPFI, - M1EG2BPI6, - M1EG2BPFI6, - M1EG2BPFI6LX, - M1EG2BPFI6ZX, - M1EG4BPI6, - M1EG4BPFI6, - M1EG4BPFI6LX, - M1EG4BPFI6ZX, - M1EG6BPI6, - M1E2G4BPi80, - M1E2G4BPFi80, - M1E2G4BPFi80LX, - M1E2G4BPFi80ZX, - PE210G2SPI9, - M1E10G2BPI9CX4, - M1E10G2BPI9SR, - M1E10G2BPI9LR, - M1E10G2BPI9T, - PE210G2BPI9CX4, - PE210G2BPI9SR, - PE210G2BPI9LR, - PE210G2BPI9T, - M2EG2BPFI6, - M2EG2BPFI6LX, - M2EG2BPFI6ZX, - M2EG4BPI6, - M2EG4BPFI6, - M2EG4BPFI6LX, - M2EG4BPFI6ZX, - M2EG6BPI6, - PEG2DBI6, - PEG2DBFI6, - PEG2DBFI6LX, - PEG2DBFI6ZX, - PE2G4BPi80, - PE2G4BPFi80, - PE2G4BPFi80LX, - PE2G4BPFi80ZX, - PE2G4BPi80L, - M6E2G8BPi80A, - - PE2G2BPi35, - PAC1200BPi35, - PE2G2BPFi35, - PE2G2BPFi35LX, - PE2G2BPFi35ZX, - PE2G4BPi35, - PE2G4BPi35L, - PE2G4BPFi35, - PE2G4BPFi35LX, - PE2G4BPFi35ZX, - - PE2G6BPi35, - PE2G6BPi35CX, - - PE2G2BPi80, - PE2G2BPFi80, - PE2G2BPFi80LX, - PE2G2BPFi80ZX, - M2E10G2BPI9CX4, - M2E10G2BPI9SR, - M2E10G2BPI9LR, - M2E10G2BPI9T, - M6E2G8BPi80, - PE210G2DBi9SR, - PE210G2DBi9SRRB, - PE210G2DBi9LR, - PE210G2DBi9LRRB, - PE310G4DBi940SR, - PE310G4BPi9T, - PE310G4BPi9SR, - PE310G4BPi9LR, - PE210G2BPi40, -}; - -struct bpmod_info { - unsigned int vendor; - unsigned int device; - unsigned int subvendor; - unsigned int subdevice; - unsigned int index; - char *bp_name; - -}; - -struct { - char *name; -} dev_desc[] = { - {"Silicom Bypass PXG2BPFI-SD series adapter"}, - {"Silicom Bypass PXG2BPFIL-SD series adapter"}, - {"Silicom Bypass PXG2BPFILX-SD series adapter"}, - {"Silicom Bypass PXG2BPFILLX-SD series adapter"}, - {"Silicom Bypass PXG2BPI-SD series adapter"}, - {"Silicom Bypass PXG2BPIG-SD series adapter"}, - {"Silicom Bypass PXG2TBFI-SD series adapter"}, - {"Silicom Bypass PXG4BPI-SD series adapter"}, - {"Silicom Bypass PXG4BPFI-SD series adapter"}, - {"Silicom Bypass PEG4BPI-SD series adapter"}, - {"Silicom Bypass PEG2BPI-SD series adapter"}, - {"Silicom Bypass PEG4BPIN-SD series adapter"}, - {"Silicom Bypass PEG2BPFI-SD series adapter"}, - {"Silicom Bypass PEG2BPFI-LX-SD series adapter"}, - {"Silicom Bypass PMCX2BPFI-SD series adapter"}, - {"Silicom Bypass PMCX2BPFI-N series adapter"}, - {"Intel Bypass PEG2BPII series adapter"}, - {"Intel Bypass PEG2BPFII series adapter"}, - {"Silicom Bypass PXG4BPFILX-SD series adapter"}, - {"Silicom Bypass PMCX2BPI-N series adapter"}, - {"Silicom Bypass PMCX4BPI-N series adapter"}, - {"Silicom Bypass PXG2BISC1-SD series adapter"}, - {"Silicom Bypass PEG2TBFI-SD series adapter"}, - {"Silicom Bypass PXG2TBI-SD series adapter"}, - {"Silicom Bypass PXG4BPFID-SD series adapter"}, - {"Silicom Bypass PEG4BPFI-SD series adapter"}, - {"Silicom Bypass PEG4BPIPT-SD series adapter"}, - {"Silicom Bypass PXG6BPI-SD series adapter"}, - {"Silicom Bypass PEG4BPIL-SD series adapter"}, - {"Silicom Bypass PMCX2BPI-N2 series adapter"}, - {"Silicom Bypass PMCX4BPI-N2 series adapter"}, - {"Silicom Bypass PMCX2BPI-SD series adapter"}, - {"Silicom Bypass PEG2BPFID-SD series adapter"}, - {"Silicom Bypass PEG2BPFIDLX-SD series adapter"}, - {"Silicom Bypass PMCX4BPI-SD series adapter"}, - {"Silicom Bypass MEG2BPFILN-SD series adapter"}, - {"Silicom Bypass MEG2BPFINX-SD series adapter"}, - {"Silicom Bypass PEG4BPFILX-SD series adapter"}, - {"Silicom Bypass PE10G2BPISR-SD series adapter"}, - {"Silicom Bypass PE10G2BPILR-SD series adapter"}, - {"Silicom Bypass MHIO8AD-SD series adapter"}, - {"Silicom Bypass PE10G2BPICX4-SD series adapter"}, - {"Silicom Bypass PEG2BPI5-SD series adapter"}, - {"Silicom Bypass PEG6BPI5-SD series adapter"}, - {"Silicom Bypass PEG4BPFI5-SD series adapter"}, - {"Silicom Bypass PEG4BPFI5LX-SD series adapter"}, - {"Silicom Bypass MEG2BPFILXLN-SD series adapter"}, - {"Silicom Bypass PEG2BPIX1-SD series adapter"}, - {"Silicom Bypass MEG2BPFILXNX-SD series adapter"}, - {"Silicom Bypass XE10G2BPIT-SD series adapter"}, - {"Silicom Bypass XE10G2BPICX4-SD series adapter"}, - {"Silicom Bypass XE10G2BPISR-SD series adapter"}, - {"Silicom Bypass XE10G2BPILR-SD series adapter"}, - {"Intel Bypass PEG2BPFII0 series adapter"}, - {"Silicom Bypass XE10G2BPIXR series adapter"}, - {"Silicom Bypass PE10G2DBISR series adapter"}, - {"Silicom Bypass PEG2BI5SC6 series adapter"}, - {"Silicom Bypass PEG6BPI5FC series adapter"}, - - {"Silicom Bypass PE10G2BPTCX4 series adapter"}, - {"Silicom Bypass PE10G2BPTSR series adapter"}, - {"Silicom Bypass PE10G2BPTLR series adapter"}, - {"Silicom Bypass PE10G2BPTT series adapter"}, - {"Silicom Bypass PEG4BPI6 series adapter"}, - {"Silicom Bypass PEG4BPFI6 series adapter"}, - {"Silicom Bypass PEG4BPFI6LX series adapter"}, - {"Silicom Bypass PEG4BPFI6ZX series adapter"}, - {"Silicom Bypass PEG2BPI6 series adapter"}, - {"Silicom Bypass PEG2BPFI6 series adapter"}, - {"Silicom Bypass PEG2BPFI6LX series adapter"}, - {"Silicom Bypass PEG2BPFI6ZX series adapter"}, - {"Silicom Bypass PEG2BPFI6FLXM series adapter"}, - {"Silicom Bypass PEG4BPI6FC series adapter"}, - {"Silicom Bypass PEG4BPFI6FC series adapter"}, - {"Silicom Bypass PEG4BPFI6FCLX series adapter"}, - {"Silicom Bypass PEG4BPFI6FCZX series adapter"}, - {"Silicom Bypass PEG6BPI6 series adapter"}, - {"Silicom Bypass PEG2BPI6SC6 series adapter"}, - {"Silicom Bypass MEG2BPI6 series adapter"}, - {"Silicom Bypass XEG2BPI6 series adapter"}, - {"Silicom Bypass MEG4BPI6 series adapter"}, - {"Silicom Bypass PEG2BPFI5-SD series adapter"}, - {"Silicom Bypass PEG2BPFI5LX-SD series adapter"}, - {"Silicom Bypass PXEG4BPFI-SD series adapter"}, - {"Silicom Bypass MxEG2BPI6 series adapter"}, - {"Silicom Bypass MxEG2BPFI6 series adapter"}, - {"Silicom Bypass MxEG2BPFI6LX series adapter"}, - {"Silicom Bypass MxEG2BPFI6ZX series adapter"}, - {"Silicom Bypass MxEG4BPI6 series adapter"}, - {"Silicom Bypass MxEG4BPFI6 series adapter"}, - {"Silicom Bypass MxEG4BPFI6LX series adapter"}, - {"Silicom Bypass MxEG4BPFI6ZX series adapter"}, - {"Silicom Bypass MxEG6BPI6 series adapter"}, - {"Silicom Bypass MxE2G4BPi80 series adapter"}, - {"Silicom Bypass MxE2G4BPFi80 series adapter"}, - {"Silicom Bypass MxE2G4BPFi80LX series adapter"}, - {"Silicom Bypass MxE2G4BPFi80ZX series adapter"}, - - {"Silicom Bypass PE210G2SPI9 series adapter"}, - - {"Silicom Bypass MxE210G2BPI9CX4 series adapter"}, - {"Silicom Bypass MxE210G2BPI9SR series adapter"}, - {"Silicom Bypass MxE210G2BPI9LR series adapter"}, - {"Silicom Bypass MxE210G2BPI9T series adapter"}, - - {"Silicom Bypass PE210G2BPI9CX4 series adapter"}, - {"Silicom Bypass PE210G2BPI9SR series adapter"}, - {"Silicom Bypass PE210G2BPI9LR series adapter"}, - {"Silicom Bypass PE210G2BPI9T series adapter"}, - - {"Silicom Bypass M2EG2BPFI6 series adapter"}, - {"Silicom Bypass M2EG2BPFI6LX series adapter"}, - {"Silicom Bypass M2EG2BPFI6ZX series adapter"}, - {"Silicom Bypass M2EG4BPI6 series adapter"}, - {"Silicom Bypass M2EG4BPFI6 series adapter"}, - {"Silicom Bypass M2EG4BPFI6LX series adapter"}, - {"Silicom Bypass M2EG4BPFI6ZX series adapter"}, - {"Silicom Bypass M2EG6BPI6 series adapter"}, - - {"Silicom Bypass PEG2DBI6 series adapter"}, - {"Silicom Bypass PEG2DBFI6 series adapter"}, - {"Silicom Bypass PEG2DBFI6LX series adapter"}, - {"Silicom Bypass PEG2DBFI6ZX series adapter"}, - - {"Silicom Bypass PE2G4BPi80 series adapter"}, - {"Silicom Bypass PE2G4BPFi80 series adapter"}, - {"Silicom Bypass PE2G4BPFi80LX series adapter"}, - {"Silicom Bypass PE2G4BPFi80ZX series adapter"}, - - {"Silicom Bypass PE2G4BPi80L series adapter"}, - {"Silicom Bypass MxE2G8BPi80A series adapter"}, - - {"Silicom Bypass PE2G2BPi35 series adapter"}, - {"Silicom Bypass PAC1200BPi35 series adapter"}, - {"Silicom Bypass PE2G2BPFi35 series adapter"}, - {"Silicom Bypass PE2G2BPFi35LX series adapter"}, - {"Silicom Bypass PE2G2BPFi35ZX series adapter"}, - - {"Silicom Bypass PE2G4BPi35 series adapter"}, - {"Silicom Bypass PE2G4BPi35L series adapter"}, - {"Silicom Bypass PE2G4BPFi35 series adapter"}, - {"Silicom Bypass PE2G4BPFi35LX series adapter"}, - {"Silicom Bypass PE2G4BPFi35ZX series adapter"}, - - {"Silicom Bypass PE2G6BPi35 series adapter"}, - {"Silicom Bypass PE2G6BPi35CX series adapter"}, - - {"Silicom Bypass PE2G2BPi80 series adapter"}, - {"Silicom Bypass PE2G2BPFi80 series adapter"}, - {"Silicom Bypass PE2G2BPFi80LX series adapter"}, - {"Silicom Bypass PE2G2BPFi80ZX series adapter"}, - - {"Silicom Bypass M2E10G2BPI9CX4 series adapter"}, - {"Silicom Bypass M2E10G2BPI9SR series adapter"}, - {"Silicom Bypass M2E10G2BPI9LR series adapter"}, - {"Silicom Bypass M2E10G2BPI9T series adapter"}, - {"Silicom Bypass MxE2G8BPi80 series adapter"}, - {"Silicom Bypass PE210G2DBi9SR series adapter"}, - {"Silicom Bypass PE210G2DBi9SRRB series adapter"}, - {"Silicom Bypass PE210G2DBi9LR series adapter"}, - {"Silicom Bypass PE210G2DBi9LRRB series adapter"}, - {"Silicom Bypass PE310G4DBi9-SR series adapter"}, - {"Silicom Bypass PE310G4BPi9T series adapter"}, - {"Silicom Bypass PE310G4BPi9SR series adapter"}, - {"Silicom Bypass PE310G4BPi9LR series adapter"}, - {"Silicom Bypass PE210G2BPi40T series adapter"}, - {0}, -}; - -static struct bpmod_info tx_ctl_pci_tbl[] = { - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFI_SSID, PXG2BPFI, - "PXG2BPFI-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFIL_SSID, PXG2BPFIL, - "PXG2BPFIL-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFILX_SSID, PXG2BPFILX, - "PXG2BPFILX-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFILLX_SSID, PXG2BPFILLX, - "PXG2BPFILLXSD"}, - {0x8086, 0x1010, SILICOM_SVID, SILICOM_PXGBPI_SSID, PXGBPI, - "PXG2BPI-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PXGBPIG_SSID, PXGBPIG, - "PXG2BPIG-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2TBFI_SSID, PXG2TBFI, - "PXG2TBFI-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PXG4BPI_SSID, PXG4BPI, - "PXG4BPI-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG4BPFI_SSID, PXG4BPFI, - "PXG4BPFI-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG4BPFILX_SSID, PXG4BPFILX, - "PXG4BPFILX-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PEG4BPI_SSID, PEG4BPI, - "PEXG4BPI-SD"}, - {0x8086, 0x105e, SILICOM_SVID, SILICOM_PEG2BPI_SSID, PEG2BPI, - "PEG2BPI-SD"}, - {0x8086, 0x105e, SILICOM_SVID, SILICOM_PEG4BPIN_SSID, PEG4BPIN, - "PEG4BPI-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG2BPFI_SSID, PEG2BPFI, - "PEG2BPFI-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG2BPFILX_SSID, PEG2BPFILX, - "PEG2BPFILX-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PMCXG2BPFI_SSID, PMCXG2BPFI, - "PMCX2BPFI-SD"}, - {0x8086, 0x107a, NOKIA_PMCXG2BPFIN_SVID, NOKIA_PMCXG2BPFIN_SSID, - PMCXG2BPFIN, "PMCX2BPFI-N"}, - {0x8086, INTEL_PEG4BPII_PID, 0x8086, INTEL_PEG4BPII_SSID, PEG4BPII, - "PEG4BPII"}, - {0x8086, INTEL_PEG4BPIIO_PID, 0x8086, INTEL_PEG4BPIIO_SSID, PEG4BPIIO, - "PEG4BPII0"}, - {0x8086, INTEL_PEG4BPFII_PID, 0x8086, INTEL_PEG4BPFII_SSID, PEG4BPFII, - "PEG4BPFII"}, - {0x8086, 0x1079, NOKIA_PMCXG2BPFIN_SVID, NOKIA_PMCXG2BPIN_SSID, - PMCXG2BPIN, "PMCX2BPI-N"}, - {0x8086, 0x1079, NOKIA_PMCXG2BPFIN_SVID, NOKIA_PMCXG4BPIN_SSID, - PMCXG4BPIN, "PMCX4BPI-N"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PXG2BISC1_SSID, PXG2BISC1, - "PXG2BISC1-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG2TBFI_SSID, PEG2TBFI, - "PEG2TBFI-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PXG2TBI_SSID, PXG2TBI, - "PXG2TBI-SD"}, - {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG4BPFID_SSID, PXG4BPFID, - "PXG4BPFID-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG4BPFI_SSID, PEG4BPFI, - "PEG4BPFI-SD"}, - {0x8086, 0x105e, SILICOM_SVID, SILICOM_PEG4BPIPT_SSID, PEG4BPIPT, - "PEG4BPIPT-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PXG6BPI_SSID, PXG6BPI, - "PXG6BPI-SD"}, - {0x8086, 0x10a7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPIL_SSID /*PCI_ANY_ID */ , PEG4BPIL, "PEG4BPIL-SD"}, - {0x8086, 0x1079, NOKIA_PMCXG2BPFIN_SVID, NOKIA_PMCXG2BPIN2_SSID, - PMCXG2BPIN2, "PMCX2BPI-N2"}, - {0x8086, 0x1079, NOKIA_PMCXG2BPFIN_SVID, NOKIA_PMCXG4BPIN2_SSID, - PMCXG4BPIN2, "PMCX4BPI-N2"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PMCX2BPI_SSID, PMCX2BPI, - "PMCX2BPI-SD"}, - {0x8086, 0x1079, SILICOM_SVID, SILICOM_PMCX4BPI_SSID, PMCX4BPI, - "PMCX4BPI-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG2BPFID_SSID, PEG2BPFID, - "PEG2BPFID-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG2BPFIDLX_SSID, PEG2BPFIDLX, - "PEG2BPFIDLXSD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_MEG2BPFILN_SSID, MEG2BPFILN, - "MEG2BPFILN-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_MEG2BPFINX_SSID, MEG2BPFINX, - "MEG2BPFINX-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PEG4BPFILX_SSID, PEG4BPFILX, - "PEG4BPFILX-SD"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID, SILICOM_PE10G2BPISR_SSID, - PE10G2BPISR, "PE10G2BPISR"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID, SILICOM_PE10G2BPILR_SSID, - PE10G2BPILR, "PE10G2BPILR"}, - {0x8086, 0x10a9, SILICOM_SVID, SILICOM_MHIO8AD_SSID, MHIO8AD, - "MHIO8AD-SD"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID, SILICOM_PE10G2BPICX4_SSID, - PE10G2BPISR, "PE10G2BPICX4"}, - {0x8086, 0x10a7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPI5_SSID /*PCI_ANY_ID */ , PEG2BPI5, "PEG2BPI5-SD"}, - {0x8086, 0x10a7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG6BPI_SSID /*PCI_ANY_ID */ , PEG6BPI, "PEG6BPI5"}, - {0x8086, 0x10a9, SILICOM_SVID /*PCI_ANY_ID */ , SILICOM_PEG4BPFI5_SSID, - PEG4BPFI5, "PEG4BPFI5"}, - {0x8086, 0x10a9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI5LX_SSID, PEG4BPFI5LX, "PEG4BPFI5LX"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_MEG2BPFILXLN_SSID, MEG2BPFILXLN, - "MEG2BPFILXLN"}, - {0x8086, 0x105e, SILICOM_SVID, SILICOM_PEG2BPIX1_SSID, PEG2BPIX1, - "PEG2BPIX1-SD"}, - {0x8086, 0x105f, SILICOM_SVID, SILICOM_MEG2BPFILXNX_SSID, MEG2BPFILXNX, - "MEG2BPFILXNX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID, SILICOM_XE10G2BPIT_SSID, XE10G2BPIT, - "XE10G2BPIT"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID, SILICOM_XE10G2BPICX4_SSID, - XE10G2BPICX4, "XE10G2BPICX4"}, - {0x8086, 0x10C6, SILICOM_SVID, SILICOM_XE10G2BPISR_SSID, XE10G2BPISR, - "XE10G2BPISR"}, - {0x8086, 0x10C6, SILICOM_SVID, SILICOM_XE10G2BPILR_SSID, XE10G2BPILR, - "XE10G2BPILR"}, - {0x8086, 0x10C6, NOKIA_XE10G2BPIXR_SVID, NOKIA_XE10G2BPIXR_SSID, - XE10G2BPIXR, "XE10G2BPIXR"}, - {0x8086, 0x10C6, SILICOM_SVID, SILICOM_PE10GDBISR_SSID, PE10GDBISR, - "PE10G2DBISR"}, - {0x8086, 0x10C6, SILICOM_SVID, SILICOM_PE10GDBILR_SSID, PE10GDBILR, - "PE10G2DBILR"}, - {0x8086, 0x10a7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BISC6_SSID /*PCI_ANY_ID */ , PEG2BISC6, "PEG2BI5SC6"}, - {0x8086, 0x10a7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG6BPIFC_SSID /*PCI_ANY_ID */ , PEG6BPIFC, "PEG6BPI5FC"}, - - {BROADCOM_VID, BROADCOM_PE10G2_PID, SILICOM_SVID, - SILICOM_PE10G2BPTCX4_SSID, PE10G2BPTCX4, "PE10G2BPTCX4"}, - {BROADCOM_VID, BROADCOM_PE10G2_PID, SILICOM_SVID, - SILICOM_PE10G2BPTSR_SSID, PE10G2BPTSR, "PE10G2BPTSR"}, - {BROADCOM_VID, BROADCOM_PE10G2_PID, SILICOM_SVID, - SILICOM_PE10G2BPTLR_SSID, PE10G2BPTLR, "PE10G2BPTLR"}, - {BROADCOM_VID, BROADCOM_PE10G2_PID, SILICOM_SVID, - SILICOM_PE10G2BPTT_SSID, PE10G2BPTT, "PE10G2BPTT"}, - - /* {BROADCOM_VID, BROADCOM_PE10G2_PID, PCI_ANY_ID, PCI_ANY_ID, PE10G2BPTCX4, "PE10G2BPTCX4"}, */ - - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPI6_SSID /*PCI_ANY_ID */ , PEG4BPI6, "PEG4BPI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6_SSID /*PCI_ANY_ID */ , PEG4BPFI6, "PEG4BPFI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6LX_SSID /*PCI_ANY_ID */ , PEG4BPFI6LX, "PEG4BPFI6LX"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6ZX_SSID /*PCI_ANY_ID */ , PEG4BPFI6ZX, "PEG4BPFI6ZX"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPI6_SSID /*PCI_ANY_ID */ , PEG2BPI6, "PEG2BPI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPFI6_SSID /*PCI_ANY_ID */ , PEG2BPFI6, "PEG2BPFI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPFI6LX_SSID /*PCI_ANY_ID */ , PEG2BPFI6LX, "PEG2BPFI6LX"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPFI6ZX_SSID /*PCI_ANY_ID */ , PEG2BPFI6ZX, "PEG2BPFI6ZX"}, - {0x8086, 0x10e7, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPFI6FLXM_SSID /*PCI_ANY_ID */ , PEG2BPFI6FLXM, - "PEG2BPFI6FLXM"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPI6FC_SSID /*PCI_ANY_ID */ , PEG4BPI6FC, "PEG4BPI6FC"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6FC_SSID /*PCI_ANY_ID */ , PEG4BPFI6FC, "PEG4BPFI6FC"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6FCLX_SSID /*PCI_ANY_ID */ , PEG4BPFI6FCLX, - "PEG4BPFI6FCLX"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG4BPFI6FCZX_SSID /*PCI_ANY_ID */ , PEG4BPFI6FCZX, - "PEG4BPFI6FCZX"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG6BPI6_SSID /*PCI_ANY_ID */ , PEG6BPI6, "PEG6BPI6"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPI6SC6_SSID /*PCI_ANY_ID */ , PEG2BPI6SC6, - "PEG6BPI62SC6"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_MEG2BPI6_SSID /*PCI_ANY_ID */ , MEG2BPI6, "MEG2BPI6"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_XEG2BPI6_SSID /*PCI_ANY_ID */ , XEG2BPI6, "XEG2BPI6"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_MEG4BPI6_SSID /*PCI_ANY_ID */ , MEG4BPI6, "MEG4BPI6"}, - - {0x8086, 0x10a9, SILICOM_SVID /*PCI_ANY_ID */ , SILICOM_PEG2BPFI5_SSID, - PEG2BPFI5, "PEG2BPFI5"}, - {0x8086, 0x10a9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2BPFI5LX_SSID, PEG2BPFI5LX, "PEG2BPFI5LX"}, - - {0x8086, 0x105f, SILICOM_SVID, SILICOM_PXEG4BPFI_SSID, PXEG4BPFI, - "PXEG4BPFI-SD"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG2BPI6_SSID /*PCI_ANY_ID */ , M1EG2BPI6, "MxEG2BPI6"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG2BPFI6_SSID /*PCI_ANY_ID */ , M1EG2BPFI6, "MxEG2BPFI6"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG2BPFI6LX_SSID /*PCI_ANY_ID */ , M1EG2BPFI6LX, - "MxEG2BPFI6LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG2BPFI6ZX_SSID /*PCI_ANY_ID */ , M1EG2BPFI6ZX, - "MxEG2BPFI6ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG4BPI6_SSID /*PCI_ANY_ID */ , M1EG4BPI6, "MxEG4BPI6"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG4BPFI6_SSID /*PCI_ANY_ID */ , M1EG4BPFI6, "MxEG4BPFI6"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG4BPFI6LX_SSID /*PCI_ANY_ID */ , M1EG4BPFI6LX, - "MxEG4BPFI6LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG4BPFI6ZX_SSID /*PCI_ANY_ID */ , M1EG4BPFI6ZX, - "MxEG4BPFI6ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1EG6BPI6_SSID /*PCI_ANY_ID */ , M1EG6BPI6, "MxEG6BPI6"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E2G4BPi80_SSID /*PCI_ANY_ID */ , M1E2G4BPi80, "MxE2G4BPi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E2G4BPFi80_SSID /*PCI_ANY_ID */ , M1E2G4BPFi80, - "MxE2G4BPFi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E2G4BPFi80LX_SSID /*PCI_ANY_ID */ , M1E2G4BPFi80LX, - "MxE2G4BPFi80LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E2G4BPFi80ZX_SSID /*PCI_ANY_ID */ , M1E2G4BPFi80ZX, - "MxE2G4BPFi80ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG2BPFI6_SSID /*PCI_ANY_ID */ , M2EG2BPFI6, "M2EG2BPFI6"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG2BPFI6LX_SSID /*PCI_ANY_ID */ , M2EG2BPFI6LX, - "M2EG2BPFI6LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG2BPFI6ZX_SSID /*PCI_ANY_ID */ , M2EG2BPFI6ZX, - "M2EG2BPFI6ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG4BPI6_SSID /*PCI_ANY_ID */ , M2EG4BPI6, "M2EG4BPI6"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG4BPFI6_SSID /*PCI_ANY_ID */ , M2EG4BPFI6, "M2EG4BPFI6"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG4BPFI6LX_SSID /*PCI_ANY_ID */ , M2EG4BPFI6LX, - "M2EG4BPFI6LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG4BPFI6ZX_SSID /*PCI_ANY_ID */ , M2EG4BPFI6ZX, - "M2EG4BPFI6ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2EG6BPI6_SSID /*PCI_ANY_ID */ , M2EG6BPI6, "M2EG6BPI6"}, - - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2DBI6_SSID /*PCI_ANY_ID */ , PEG2DBI6, "PEG2DBI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2DBFI6_SSID /*PCI_ANY_ID */ , PEG2DBFI6, "PEG2DBFI6"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2DBFI6LX_SSID /*PCI_ANY_ID */ , PEG2DBFI6LX, "PEG2DBFI6LX"}, - {0x8086, 0x10e6, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PEG2DBFI6ZX_SSID /*PCI_ANY_ID */ , PEG2DBFI6ZX, "PEG2DBFI6ZX"}, - - {0x8086, 0x10F9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE210G2DBi9SR_SSID, PE210G2DBi9SR, "PE210G2DBi9SR"}, - {0x8086, 0x10F9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE210G2DBi9LR_SSID, PE210G2DBi9LR, "PE210G2DBi9LR"}, - {0x8086, 0x10F9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE310G4DBi940SR_SSID, PE310G4DBi940SR, "PE310G4DBi9SR"}, - - {0x8086, 0x10Fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE310G4BPi9T_SSID, PE310G4BPi9T, "PE310G4BPi9T"}, - {0x8086, 0x10Fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE310G4BPi9SR_SSID, PE310G4BPi9SR, "PE310G4BPi9SR"}, - {0x8086, 0x10Fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE310G4BPi9LR_SSID, PE310G4BPi9LR, "PE310G4BPi9LR"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPi80_SSID /*PCI_ANY_ID */ , PE2G4BPi80, "PE2G4BPi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi80_SSID /*PCI_ANY_ID */ , PE2G4BPFi80, "PE2G4BPFi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi80LX_SSID /*PCI_ANY_ID */ , PE2G4BPFi80LX, - "PE2G4BPFi80LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi80ZX_SSID /*PCI_ANY_ID */ , PE2G4BPFi80ZX, - "PE2G4BPFi80ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPi80L_SSID /*PCI_ANY_ID */ , PE2G4BPi80L, "PE2G4BPi80L"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M6E2G8BPi80A_SSID /*PCI_ANY_ID */ , M6E2G8BPi80A, - "MxE2G8BPi80A"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPi35_SSID /*PCI_ANY_ID */ , PE2G2BPi35, "PE2G2BPi35"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PAC1200BPi35_SSID /*PCI_ANY_ID */ , PAC1200BPi35, - "PAC1200BPi35"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi35_SSID /*PCI_ANY_ID */ , PE2G2BPFi35, "PE2G2BPFi35"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi35LX_SSID /*PCI_ANY_ID */ , PE2G2BPFi35LX, - "PE2G2BPFi35LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi35ZX_SSID /*PCI_ANY_ID */ , PE2G2BPFi35ZX, - "PE2G2BPFi35ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPi35_SSID /*PCI_ANY_ID */ , PE2G4BPi35, "PE2G4BPi35"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPi35L_SSID /*PCI_ANY_ID */ , PE2G4BPi35L, "PE2G4BPi35L"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi35_SSID /*PCI_ANY_ID */ , PE2G4BPFi35, "PE2G4BPFi35"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi35LX_SSID /*PCI_ANY_ID */ , PE2G4BPFi35LX, - "PE2G4BPFi35LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G4BPFi35ZX_SSID /*PCI_ANY_ID */ , PE2G4BPFi35ZX, - "PE2G4BPFi35ZX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G6BPi35_SSID /*PCI_ANY_ID */ , PE2G6BPi35, "PE2G6BPi35"}, - - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa0, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa1, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa2, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa3, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa4, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa5, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa6, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa7, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa8, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaa9, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaaa, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaab, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaac, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaad, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaae, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaaf, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab0, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab1, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab2, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab3, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab4, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab5, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab6, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab7, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab8, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xab9, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xaba, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xabb, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xabc, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xabd, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xabe, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , 0xabf, PE2G6BPi35CX, - "PE2G6BPi35CX"}, - - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPi80_SSID /*PCI_ANY_ID */ , PE2G2BPi80, "PE2G2BPi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi80_SSID /*PCI_ANY_ID */ , PE2G2BPFi80, "PE2G2BPFi80"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi80LX_SSID /*PCI_ANY_ID */ , PE2G2BPFi80LX, - "PE2G2BPFi80LX"}, - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE2G2BPFi80ZX_SSID /*PCI_ANY_ID */ , PE2G2BPFi80ZX, - "PE2G2BPFi80ZX"}, - - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_MEG2BPI6_SSID /*PCI_ANY_ID */ , MEG2BPI6, "MEG2BPI6"}, - {0x8086, 0x10c9, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_XEG2BPI6_SSID /*PCI_ANY_ID */ , XEG2BPI6, "XEG2BPI6"}, - -#if 0 - {0x8086, 0x10fb, 0x8086, INTEL_PE210G2SPI9_SSID, PE210G2SPI9, - "PE210G2SPI9"}, -#endif - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E10G2BPI9CX4_SSID /*PCI_ANY_ID */ , M1E10G2BPI9CX4, - "MxE210G2BPI9CX4"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E10G2BPI9SR_SSID /*PCI_ANY_ID */ , M1E10G2BPI9SR, - "MxE210G2BPI9SR"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E10G2BPI9LR_SSID /*PCI_ANY_ID */ , M1E10G2BPI9LR, - "MxE210G2BPI9LR"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M1E10G2BPI9T_SSID /*PCI_ANY_ID */ , M1E10G2BPI9T, - "MxE210G2BPI9T"}, - - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2E10G2BPI9CX4_SSID /*PCI_ANY_ID */ , M2E10G2BPI9CX4, - "M2E10G2BPI9CX4"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2E10G2BPI9SR_SSID /*PCI_ANY_ID */ , M2E10G2BPI9SR, - "M2E10G2BPI9SR"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2E10G2BPI9LR_SSID /*PCI_ANY_ID */ , M2E10G2BPI9LR, - "M2E10G2BPI9LR"}, - {0x8086, 0x10fb, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M2E10G2BPI9T_SSID /*PCI_ANY_ID */ , M2E10G2BPI9T, - "M2E10G2BPI9T"}, - - {0x8086, 0x10fb, SILICOM_SVID, SILICOM_PE210G2BPI9CX4_SSID, - PE210G2BPI9CX4, "PE210G2BPI9CX4"}, - {0x8086, 0x10fb, SILICOM_SVID, SILICOM_PE210G2BPI9SR_SSID, - PE210G2BPI9SR, "PE210G2BPI9SR"}, - {0x8086, 0x10fb, SILICOM_SVID, SILICOM_PE210G2BPI9LR_SSID, - PE210G2BPI9LR, "PE210G2BPI9LR"}, - {0x8086, 0x10fb, SILICOM_SVID, SILICOM_PE210G2BPI9T_SSID, PE210G2BPI9T, - "PE210G2BPI9T"}, - -#if 0 - {0x1374, 0x2c, SILICOM_SVID, SILICOM_PXG4BPI_SSID, PXG4BPI, - "PXG4BPI-SD"}, - - {0x1374, 0x2d, SILICOM_SVID, SILICOM_PXG4BPFI_SSID, PXG4BPFI, - "PXG4BPFI-SD"}, - - {0x1374, 0x3f, SILICOM_SVID, SILICOM_PXG2TBI_SSID, PXG2TBI, - "PXG2TBI-SD"}, - - {0x1374, 0x3d, SILICOM_SVID, SILICOM_PXG2BISC1_SSID, PXG2BISC1, - "PXG2BISC1-SD"}, - - {0x1374, 0x40, SILICOM_SVID, SILICOM_PEG4BPFI_SSID, PEG4BPFI, - "PEG4BPFI-SD"}, - -#ifdef BP_SELF_TEST - {0x1374, 0x28, SILICOM_SVID, 0x28, PXGBPI, "PXG2BPI-SD"}, -#endif -#endif - {0x8086, PCI_ANY_ID, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_M6E2G8BPi80_SSID /*PCI_ANY_ID */ , M6E2G8BPi80, "MxE2G8BPi80"}, - {0x8086, 0x1528, SILICOM_SVID /*PCI_ANY_ID */ , - SILICOM_PE210G2BPi40_SSID /*PCI_ANY_ID */ , PE210G2BPi40, - "PE210G2BPi40T"}, - - /* required last entry */ - {0,} -}; - -static void find_fw(struct bpctl_dev *dev) -{ - unsigned long mmio_start, mmio_len; - struct pci_dev *pdev1 = dev->pdev; - - if ((OLD_IF_SERIES(dev->subdevice)) || - (INTEL_IF_SERIES(dev->subdevice))) - dev->bp_fw_ver = 0xff; - else - dev->bp_fw_ver = bypass_fw_ver(dev); - - if (dev->bp_10gb == 1 && dev->bp_fw_ver == 0xff) { - int cnt = 100; - while (cnt--) { - iounmap((void *)dev->mem_map); - mmio_start = pci_resource_start(pdev1, 0); - mmio_len = pci_resource_len(pdev1, 0); - - dev->mem_map = (unsigned long) - ioremap(mmio_start, mmio_len); - - dev->bp_fw_ver = bypass_fw_ver(dev); - if (dev->bp_fw_ver == 0xa8) - break; - } - } - /* dev->bp_fw_ver=0xa8; */ - printk("firmware version: 0x%x\n", dev->bp_fw_ver); -} - -static int init_one(struct bpctl_dev *dev, struct bpmod_info *info, struct pci_dev *pdev1) -{ - unsigned long mmio_start, mmio_len; - - dev->pdev = pdev1; - mmio_start = pci_resource_start(pdev1, 0); - mmio_len = pci_resource_len(pdev1, 0); - - dev->desc = dev_desc[info->index].name; - dev->name = info->bp_name; - dev->device = info->device; - dev->vendor = info->vendor; - dev->subdevice = info->subdevice; - dev->subvendor = info->subvendor; - dev->func = PCI_FUNC(pdev1->devfn); - dev->slot = PCI_SLOT(pdev1->devfn); - dev->bus = pdev1->bus->number; - dev->mem_map = (unsigned long)ioremap(mmio_start, mmio_len); -#ifdef BP_SYNC_FLAG - spin_lock_init(&dev->bypass_wr_lock); -#endif - if (BP10G9_IF_SERIES(dev->subdevice)) - dev->bp_10g9 = 1; - if (BP10G_IF_SERIES(dev->subdevice)) - dev->bp_10g = 1; - if (PEG540_IF_SERIES(dev->subdevice)) - dev->bp_540 = 1; - if (PEGF5_IF_SERIES(dev->subdevice)) - dev->bp_fiber5 = 1; - if (PEG80_IF_SERIES(dev->subdevice)) - dev->bp_i80 = 1; - if (PEGF80_IF_SERIES(dev->subdevice)) - dev->bp_i80 = 1; - if ((dev->subdevice & 0xa00) == 0xa00) - dev->bp_i80 = 1; - if (BP10GB_IF_SERIES(dev->subdevice)) { - if (dev->ifindex == 0) { - unregister_chrdev(major_num, DEVICE_NAME); - printk("Please load network driver for %s adapter!\n", - dev->name); - return -1; - } - - if (dev->ndev && !(dev->ndev->flags & IFF_UP)) { - unregister_chrdev(major_num, DEVICE_NAME); - printk("Please bring up network interfaces for %s adapter!\n", - dev->name); - return -1; - } - dev->bp_10gb = 1; - } - - if (!dev->bp_10g9) { - if (is_bypass_fn(dev)) { - printk(KERN_INFO "%s found, ", - dev->name); - find_fw(dev); - } - dev->wdt_status = WDT_STATUS_UNKNOWN; - dev->reset_time = 0; - atomic_set(&dev->wdt_busy, 0); - dev->bp_status_un = 1; - - bypass_caps_init(dev); - - init_bypass_wd_auto(dev); - init_bypass_tpl_auto(dev); - if (NOKIA_SERIES(dev->subdevice)) - reset_cont(dev); - } -#ifdef BP_SELF_TEST - dev->bp_tx_data = kzalloc(BPTEST_DATA_LEN, GFP_KERNEL); - if (dev->bp_tx_data) { - memset(dev->bp_tx_data, 0xff, 6); - memset(dev->bp_tx_data + 6, 0x0, 1); - memset(dev->bp_tx_data + 7, 0xaa, 5); - *(__be16 *)(dev->bp_tx_data + 12) = htons(ETH_P_BPTEST); - } else - printk("bp_ctl: Memory allocation error!\n"); -#endif - return 0; -} - -/* -* Initialize the module - Register the character device -*/ - -static int __init bypass_init_module(void) -{ - int ret_val, idx, idx_dev = 0; - struct pci_dev *pdev1 = NULL; - struct bpctl_dev *dev; - - printk(BP_MOD_DESCR " v" BP_MOD_VER "\n"); - ret_val = register_chrdev(major_num, DEVICE_NAME, &Fops); - if (ret_val < 0) { - printk("%s failed with %d\n", DEVICE_NAME, ret_val); - return ret_val; - } - major_num = ret_val; /* dynamic */ - for (idx = 0; tx_ctl_pci_tbl[idx].vendor; idx++) { - while ((pdev1 = pci_get_subsys(tx_ctl_pci_tbl[idx].vendor, - tx_ctl_pci_tbl[idx].device, - tx_ctl_pci_tbl[idx].subvendor, - tx_ctl_pci_tbl[idx].subdevice, - pdev1))) { - - device_num++; - } - } - if (!device_num) { - printk("No such device\n"); - unregister_chrdev(major_num, DEVICE_NAME); - return -1; - } - - bpctl_dev_arr = kmalloc((device_num) * sizeof(struct bpctl_dev), GFP_KERNEL); - - if (!bpctl_dev_arr) { - printk("Allocation error\n"); - unregister_chrdev(major_num, DEVICE_NAME); - return -1; - } - memset(bpctl_dev_arr, 0, ((device_num) * sizeof(struct bpctl_dev))); - - pdev1 = NULL; - dev = bpctl_dev_arr; - for (idx = 0; tx_ctl_pci_tbl[idx].vendor; idx++) { - while ((pdev1 = pci_get_subsys(tx_ctl_pci_tbl[idx].vendor, - tx_ctl_pci_tbl[idx].device, - tx_ctl_pci_tbl[idx].subvendor, - tx_ctl_pci_tbl[idx].subdevice, - pdev1))) { - if (init_one(dev, &tx_ctl_pci_tbl[idx], pdev1) < 0) - return -1; - dev++; - } - } - if_scan_init(); - - sema_init(&bpctl_sema, 1); - spin_lock_init(&bpvm_lock); - - for (idx_dev = 0, dev = bpctl_dev_arr; - idx_dev < device_num && dev->pdev; - idx_dev++, dev++) { - if (dev->bp_10g9) { - if (is_bypass_fn(dev)) { - printk(KERN_INFO "%s found, ", dev->name); - dev->bp_fw_ver = bypass_fw_ver(dev); - printk("firmware version: 0x%x\n", - dev->bp_fw_ver); - } - dev->wdt_status = WDT_STATUS_UNKNOWN; - dev->reset_time = 0; - atomic_set(&dev->wdt_busy, 0); - dev->bp_status_un = 1; - - bypass_caps_init(dev); - - init_bypass_wd_auto(dev); - init_bypass_tpl_auto(dev); - } - } - - register_netdevice_notifier(&bp_notifier_block); - return 0; -} - -/* -* Cleanup - unregister the appropriate file from /proc -*/ -static void __exit bypass_cleanup_module(void) -{ - int i; - - unregister_netdevice_notifier(&bp_notifier_block); - - for (i = 0; i < device_num; i++) { - /* unsigned long flags; */ - remove_bypass_wd_auto(&bpctl_dev_arr[i]); - bpctl_dev_arr[i].reset_time = 0; - - remove_bypass_tpl_auto(&bpctl_dev_arr[i]); - } - - /* unmap all devices */ - for (i = 0; i < device_num; i++) { -#ifdef BP_SELF_TEST - kfree(bpctl_dev_arr[i].bp_tx_data); -#endif - iounmap((void *)(bpctl_dev_arr[i].mem_map)); - } - - /* free all devices space */ - kfree(bpctl_dev_arr); - -/* -* Unregister the device -*/ - unregister_chrdev(major_num, DEVICE_NAME); -} - -module_init(bypass_init_module); -module_exit(bypass_cleanup_module); - -int is_bypass_sd(int ifindex) -{ - return is_bypass(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(is_bypass_sd); - -int set_bypass_sd(int ifindex, int bypass_mode) -{ - - return set_bypass_fn(get_dev_idx_p(ifindex), bypass_mode); -} -EXPORT_SYMBOL(set_bypass_sd); - -int get_bypass_sd(int ifindex) -{ - - return get_bypass_fn(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(get_bypass_sd); - -int get_bypass_change_sd(int ifindex) -{ - - return get_bypass_change_fn(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(get_bypass_change_sd); - -int set_dis_bypass_sd(int ifindex, int dis_param) -{ - return set_dis_bypass_fn(get_dev_idx_p(ifindex), dis_param); -} -EXPORT_SYMBOL(set_dis_bypass_sd); - -int get_dis_bypass_sd(int ifindex) -{ - - return get_dis_bypass_fn(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(get_dis_bypass_sd); - -int set_bypass_pwoff_sd(int ifindex, int bypass_mode) -{ - return set_bypass_pwoff_fn(get_dev_idx_p(ifindex), bypass_mode); - -} -EXPORT_SYMBOL(set_bypass_pwoff_sd); - -int get_bypass_pwoff_sd(int ifindex) -{ - return get_bypass_pwoff_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bypass_pwoff_sd); - -int set_bypass_pwup_sd(int ifindex, int bypass_mode) -{ - return set_bypass_pwup_fn(get_dev_idx_p(ifindex), bypass_mode); - -} -EXPORT_SYMBOL(set_bypass_pwup_sd); - -int get_bypass_pwup_sd(int ifindex) -{ - return get_bypass_pwup_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bypass_pwup_sd); - -int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set) -{ - if ((is_bypass(get_dev_idx_p(if_index))) <= 0) - return BP_NOT_CAP; - *ms_timeout_set = set_bypass_wd_fn(get_dev_idx_p(if_index), ms_timeout); - return 0; -} -EXPORT_SYMBOL(set_bypass_wd_sd); - -int get_bypass_wd_sd(int ifindex, int *timeout) -{ - return get_bypass_wd_fn(get_dev_idx_p(ifindex), timeout); - -} -EXPORT_SYMBOL(get_bypass_wd_sd); - -int get_wd_expire_time_sd(int ifindex, int *time_left) -{ - return get_wd_expire_time_fn(get_dev_idx_p(ifindex), time_left); -} -EXPORT_SYMBOL(get_wd_expire_time_sd); - -int reset_bypass_wd_timer_sd(int ifindex) -{ - return reset_bypass_wd_timer_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(reset_bypass_wd_timer_sd); - -int get_wd_set_caps_sd(int ifindex) -{ - return get_wd_set_caps_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_wd_set_caps_sd); - -int set_std_nic_sd(int ifindex, int nic_mode) -{ - return set_std_nic_fn(get_dev_idx_p(ifindex), nic_mode); - -} -EXPORT_SYMBOL(set_std_nic_sd); - -int get_std_nic_sd(int ifindex) -{ - return get_std_nic_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_std_nic_sd); - -int set_tap_sd(int ifindex, int tap_mode) -{ - return set_tap_fn(get_dev_idx_p(ifindex), tap_mode); - -} -EXPORT_SYMBOL(set_tap_sd); - -int get_tap_sd(int ifindex) -{ - return get_tap_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_tap_sd); - -int set_tap_pwup_sd(int ifindex, int tap_mode) -{ - return set_tap_pwup_fn(get_dev_idx_p(ifindex), tap_mode); - -} -EXPORT_SYMBOL(set_tap_pwup_sd); - -int get_tap_pwup_sd(int ifindex) -{ - return get_tap_pwup_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_tap_pwup_sd); - -int get_tap_change_sd(int ifindex) -{ - return get_tap_change_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_tap_change_sd); - -int set_dis_tap_sd(int ifindex, int dis_param) -{ - return set_dis_tap_fn(get_dev_idx_p(ifindex), dis_param); - -} -EXPORT_SYMBOL(set_dis_tap_sd); - -int get_dis_tap_sd(int ifindex) -{ - return get_dis_tap_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_dis_tap_sd); - -int set_bp_disc_sd(int ifindex, int disc_mode) -{ - return set_disc_fn(get_dev_idx_p(ifindex), disc_mode); - -} -EXPORT_SYMBOL(set_bp_disc_sd); - -int get_bp_disc_sd(int ifindex) -{ - return get_disc_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bp_disc_sd); - -int set_bp_disc_pwup_sd(int ifindex, int disc_mode) -{ - return set_disc_pwup_fn(get_dev_idx_p(ifindex), disc_mode); - -} -EXPORT_SYMBOL(set_bp_disc_pwup_sd); - -int get_bp_disc_pwup_sd(int ifindex) -{ - return get_disc_pwup_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bp_disc_pwup_sd); - -int get_bp_disc_change_sd(int ifindex) -{ - return get_disc_change_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bp_disc_change_sd); - -int set_bp_dis_disc_sd(int ifindex, int dis_param) -{ - return set_dis_disc_fn(get_dev_idx_p(ifindex), dis_param); - -} -EXPORT_SYMBOL(set_bp_dis_disc_sd); - -int get_bp_dis_disc_sd(int ifindex) -{ - return get_dis_disc_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bp_dis_disc_sd); - -int get_wd_exp_mode_sd(int ifindex) -{ - return get_wd_exp_mode_fn(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(get_wd_exp_mode_sd); - -int set_wd_exp_mode_sd(int ifindex, int param) -{ - return set_wd_exp_mode_fn(get_dev_idx_p(ifindex), param); - -} -EXPORT_SYMBOL(set_wd_exp_mode_sd); - -int set_tx_sd(int ifindex, int tx_state) -{ - return set_tx_fn(get_dev_idx_p(ifindex), tx_state); - -} -EXPORT_SYMBOL(set_tx_sd); - -int set_tpl_sd(int ifindex, int tpl_state) -{ - return set_tpl_fn(get_dev_idx_p(ifindex), tpl_state); - -} -EXPORT_SYMBOL(set_tpl_sd); - -int set_bp_hw_reset_sd(int ifindex, int status) -{ - return set_bp_hw_reset_fn(get_dev_idx_p(ifindex), status); - -} -EXPORT_SYMBOL(set_bp_hw_reset_sd); - -int set_wd_autoreset_sd(int ifindex, int param) -{ - return set_wd_autoreset_fn(get_dev_idx_p(ifindex), param); - -} -EXPORT_SYMBOL(set_wd_autoreset_sd); - -int get_wd_autoreset_sd(int ifindex) -{ - return get_wd_autoreset_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_wd_autoreset_sd); - -int get_bypass_caps_sd(int ifindex) -{ - return get_bypass_caps_fn(get_dev_idx_p(ifindex)); -} -EXPORT_SYMBOL(get_bypass_caps_sd); - -int get_bypass_slave_sd(int ifindex) -{ - struct bpctl_dev *pbpctl_dev_out; - int ret = get_bypass_slave_fn(get_dev_idx_p(ifindex), &pbpctl_dev_out); - - if (ret == 1) - return pbpctl_dev_out->ifindex; - return -1; - -} -EXPORT_SYMBOL(get_bypass_slave_sd); - -int get_tx_sd(int ifindex) -{ - return get_tx_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_tx_sd); - -int get_tpl_sd(int ifindex) -{ - return get_tpl_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_tpl_sd); - -int get_bp_hw_reset_sd(int ifindex) -{ - return get_bp_hw_reset_fn(get_dev_idx_p(ifindex)); - -} -EXPORT_SYMBOL(get_bp_hw_reset_sd); - -int get_bypass_info_sd(int ifindex, struct bp_info *bp_info) -{ - return get_bypass_info_fn(get_dev_idx_p(ifindex), bp_info->prod_name, &bp_info->fw_ver); -} -EXPORT_SYMBOL(get_bypass_info_sd); - -int bp_if_scan_sd(void) -{ - if_scan_init(); - return 0; -} -EXPORT_SYMBOL(bp_if_scan_sd); - -#define BP_PROC_DIR "bypass" - -static struct proc_dir_entry *bp_procfs_dir; - -static int procfs_add(char *proc_name, const struct file_operations *fops, - struct bpctl_dev *dev) -{ - struct bypass_pfs_sd *pfs = &dev->bypass_pfs_set; - - if (!proc_create_data(proc_name, 0644, pfs->bypass_entry, fops, dev)) - return -1; - return 0; -} - -#define RO_FOPS(name) \ -static int name##_open(struct inode *inode, struct file *file) \ -{ \ - return single_open(file, show_##name, PDE_DATA(inode));\ -} \ -static const struct file_operations name##_ops = { \ - .open = name##_open, \ - .read = seq_read, \ - .llseek = seq_lseek, \ - .release = single_release, \ -}; - -#define RW_FOPS(name) \ -static int name##_open(struct inode *inode, struct file *file) \ -{ \ - return single_open(file, show_##name, PDE_DATA(inode));\ -} \ -static const struct file_operations name##_ops = { \ - .open = name##_open, \ - .read = seq_read, \ - .write = name##_write, \ - .llseek = seq_lseek, \ - .release = single_release, \ -}; - -static int show_bypass_info(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - - seq_printf(m, "Name\t\t\t%s\n", dev->name); - seq_printf(m, "Firmware version\t0x%x\n", dev->bp_fw_ver); - return 0; -} -RO_FOPS(bypass_info) - -static int show_bypass_slave(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - struct bpctl_dev *slave = get_status_port_fn(dev); - - if (!slave) - slave = dev; - if (!slave) - seq_puts(m, "fail\n"); - else if (slave->ndev) - seq_printf(m, "%s\n", slave->ndev->name); - return 0; -} -RO_FOPS(bypass_slave) - -static int show_bypass_caps(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bypass_caps_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "-1\n"); - else - seq_printf(m, "0x%x\n", ret); - return 0; -} -RO_FOPS(bypass_caps) - -static int show_wd_set_caps(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_wd_set_caps_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "-1\n"); - else - seq_printf(m, "0x%x\n", ret); - return 0; -} -RO_FOPS(wd_set_caps) - -static int user_on_off(const void __user *buffer, size_t count) -{ - - char kbuf[256]; - int length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - return 1; - if (strcmp(kbuf, "off") == 0) - return 0; - return 0; -} - -static ssize_t bypass_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int bypass_param = user_on_off(buffer, count); - - if (bypass_param < 0) - return -1; - - set_bypass_fn(PDE_DATA(file_inode(file)), bypass_param); - return count; -} -static int show_bypass(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bypass_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(bypass) - -static ssize_t tap_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -1; - - set_tap_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_tap(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_tap_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(tap) - -static ssize_t disc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -1; - - set_disc_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_disc(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_disc_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(disc) - -static int show_bypass_change(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bypass_change_fn(dev); - - if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "fail\n"); - return 0; -} -RO_FOPS(bypass_change) - -static int show_tap_change(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_tap_change_fn(dev); - - if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "fail\n"); - return 0; -} -RO_FOPS(tap_change) - -static int show_disc_change(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_disc_change_fn(dev); - - if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "fail\n"); - return 0; -} -RO_FOPS(disc_change) - -static ssize_t bypass_wd_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - struct bpctl_dev *dev = PDE_DATA(file_inode(file)); - int timeout; - int ret = kstrtoint_from_user(buffer, count, 10, &timeout); - - if (ret) - return ret; - set_bypass_wd_fn(dev, timeout); - return count; -} -static int show_bypass_wd(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = 0, timeout = 0; - - ret = get_bypass_wd_fn(dev, &timeout); - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (timeout == -1) - seq_puts(m, "unknown\n"); - else if (timeout == 0) - seq_puts(m, "disable\n"); - else - seq_printf(m, "%d\n", timeout); - return 0; -} -RW_FOPS(bypass_wd) - -static int show_wd_expire_time(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = 0, timeout = 0; - - ret = get_wd_expire_time_fn(dev, &timeout); - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (timeout == -1) - seq_puts(m, "expire\n"); - else if (timeout == 0) - seq_puts(m, "disable\n"); - else - seq_printf(m, "%d\n", timeout); - return 0; -} -RO_FOPS(wd_expire_time) - -static ssize_t tpl_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - struct bpctl_dev *dev = PDE_DATA(file_inode(file)); - int tpl_param = user_on_off(buffer, count); - - if (tpl_param < 0) - return -1; - - set_tpl_fn(dev, tpl_param); - return count; -} -static int show_tpl(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_tpl_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(tpl) - -#ifdef PMC_FIX_FLAG -static ssize_t wait_at_pwup_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - struct bpctl_dev *dev = PDE_DATA(file_inode(file)); - int tpl_param = user_on_off(buffer, count); - - if (tpl_param < 0) - return -1; - - set_bp_wait_at_pwup_fn(dev, tpl_param); - return count; -} -static int show_wait_at_pwup(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bp_wait_at_pwup_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(wait_at_pwup) - -static ssize_t hw_reset_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - struct bpctl_dev *dev = PDE_DATA(file_inode(file)); - int tpl_param = user_on_off(buffer, count); - - if (tpl_param < 0) - return -1; - - set_bp_hw_reset_fn(dev, tpl_param); - return count; -} -static int show_hw_reset(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bp_hw_reset_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 1) - seq_puts(m, "on\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - return 0; -} -RW_FOPS(hw_reset) - -#endif /*PMC_WAIT_FLAG */ - -static int show_reset_bypass_wd(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = reset_bypass_wd_timer_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "disable\n"); - else if (ret == 1) - seq_puts(m, "success\n"); - return 0; -} -RO_FOPS(reset_bypass_wd) - -static ssize_t dis_bypass_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int bypass_param = user_on_off(buffer, count); - - if (bypass_param < 0) - return -EINVAL; - - set_dis_bypass_fn(PDE_DATA(file_inode(file)), bypass_param); - return count; -} -static int show_dis_bypass(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_dis_bypass_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(dis_bypass) - -static ssize_t dis_tap_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -EINVAL; - - set_dis_tap_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_dis_tap(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_dis_tap_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(dis_tap) - -static ssize_t dis_disc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -EINVAL; - - set_dis_disc_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_dis_disc(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_dis_disc_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(dis_disc) - -static ssize_t bypass_pwup_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int bypass_param = user_on_off(buffer, count); - - if (bypass_param < 0) - return -EINVAL; - - set_bypass_pwup_fn(PDE_DATA(file_inode(file)), bypass_param); - return count; -} -static int show_bypass_pwup(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bypass_pwup_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(bypass_pwup) - -static ssize_t bypass_pwoff_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int bypass_param = user_on_off(buffer, count); - - if (bypass_param < 0) - return -EINVAL; - - set_bypass_pwoff_fn(PDE_DATA(file_inode(file)), bypass_param); - return count; -} -static int show_bypass_pwoff(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_bypass_pwoff_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(bypass_pwoff) - -static ssize_t tap_pwup_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -EINVAL; - - set_tap_pwup_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_tap_pwup(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_tap_pwup_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(tap_pwup) - -static ssize_t disc_pwup_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int tap_param = user_on_off(buffer, count); - - if (tap_param < 0) - return -EINVAL; - - set_disc_pwup_fn(PDE_DATA(file_inode(file)), tap_param); - return count; -} -static int show_disc_pwup(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_disc_pwup_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(disc_pwup) - -static ssize_t std_nic_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int bypass_param = user_on_off(buffer, count); - - if (bypass_param < 0) - return -EINVAL; - - set_std_nic_fn(PDE_DATA(file_inode(file)), bypass_param); - return count; -} -static int show_std_nic(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_std_nic_fn(dev); - - if (ret == BP_NOT_CAP) - seq_puts(m, "fail\n"); - else if (ret == 0) - seq_puts(m, "off\n"); - else - seq_puts(m, "on\n"); - return 0; -} -RW_FOPS(std_nic) - -static ssize_t wd_exp_mode_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - char kbuf[256]; - int bypass_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "tap") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "bypass") == 0) - bypass_param = 0; - else if (strcmp(kbuf, "disc") == 0) - bypass_param = 2; - - set_wd_exp_mode_fn(PDE_DATA(file_inode(file)), bypass_param); - - return count; -} -static int show_wd_exp_mode(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_wd_exp_mode_fn(dev); - - if (ret == 1) - seq_puts(m, "tap\n"); - else if (ret == 0) - seq_puts(m, "bypass\n"); - else if (ret == 2) - seq_puts(m, "disc\n"); - else - seq_puts(m, "fail\n"); - return 0; -} -RW_FOPS(wd_exp_mode) - -static ssize_t wd_autoreset_write(struct file *file, const char __user *buffer, - size_t count, loff_t *pos) -{ - int timeout; - int ret = kstrtoint_from_user(buffer, count, 10, &timeout); - - if (ret) - return ret; - set_wd_autoreset_fn(PDE_DATA(file_inode(file)), timeout); - return count; -} -static int show_wd_autoreset(struct seq_file *m, void *v) -{ - struct bpctl_dev *dev = m->private; - int ret = get_wd_autoreset_fn(dev); - - if (ret >= 0) - seq_printf(m, "%d\n", ret); - else - seq_puts(m, "fail\n"); - return 0; -} -RW_FOPS(wd_autoreset) - -static int bypass_proc_create_dev_sd(struct bpctl_dev *pbp_device_block) -{ - struct bypass_pfs_sd *current_pfs = &(pbp_device_block->bypass_pfs_set); - static struct proc_dir_entry *procfs_dir; - int ret = 0; - - if (!pbp_device_block->ndev) - return -1; - sprintf(current_pfs->dir_name, "bypass_%s", - pbp_device_block->ndev->name); - - if (!bp_procfs_dir) - return -1; - - /* create device proc dir */ - procfs_dir = proc_mkdir(current_pfs->dir_name, bp_procfs_dir); - if (!procfs_dir) { - printk(KERN_DEBUG "Could not create procfs directory %s\n", - current_pfs->dir_name); - return -1; - } - current_pfs->bypass_entry = procfs_dir; - -#define ENTRY(x) (ret |= procfs_add(#x, &x##_ops, pbp_device_block)) - - ENTRY(bypass_info); - if (pbp_device_block->bp_caps & SW_CTL_CAP) { - /* Create set param proc's */ - ENTRY(bypass_slave); - ENTRY(bypass_caps); - ENTRY(wd_set_caps); - ENTRY(bypass_wd); - ENTRY(wd_expire_time); - ENTRY(reset_bypass_wd); - ENTRY(std_nic); - if (pbp_device_block->bp_caps & BP_CAP) { - ENTRY(bypass); - ENTRY(dis_bypass); - ENTRY(bypass_pwup); - ENTRY(bypass_pwoff); - ENTRY(bypass_change); - } - if (pbp_device_block->bp_caps & TAP_CAP) { - ENTRY(tap); - ENTRY(dis_tap); - ENTRY(tap_pwup); - ENTRY(tap_change); - } - if (pbp_device_block->bp_caps & DISC_CAP) { - ENTRY(disc); - ENTRY(dis_disc); - ENTRY(disc_pwup); - ENTRY(disc_change); - } - - ENTRY(wd_exp_mode); - ENTRY(wd_autoreset); - ENTRY(tpl); -#ifdef PMC_FIX_FLAG - ENTRY(wait_at_pwup); - ENTRY(hw_reset); -#endif - } -#undef ENTRY - if (ret < 0) - printk(KERN_DEBUG "Create proc entry failed\n"); - - return ret; -} - -static int bypass_proc_remove_dev_sd(struct bpctl_dev *pbp_device_block) -{ - struct bypass_pfs_sd *current_pfs = &pbp_device_block->bypass_pfs_set; - - remove_proc_subtree(current_pfs->dir_name, bp_procfs_dir); - current_pfs->bypass_entry = NULL; - return 0; -} diff --git a/drivers/staging/silicom/bypass.h b/drivers/staging/silicom/bypass.h deleted file mode 100644 index 08fa7a0fc8d8..000000000000 --- a/drivers/staging/silicom/bypass.h +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************/ -/* */ -/* Bypass Control utility, Copyright (c) 2005 Silicom */ -/* All rights reserved. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/******************************************************************************/ - -#ifndef BYPASS_H -#define BYPASS_H - -/* Bypass related */ - -#define SYNC_CMD_VAL 2 /* 10b */ -#define SYNC_CMD_LEN 2 - -#define WR_CMD_VAL 2 /* 10b */ -#define WR_CMD_LEN 2 - -#define RD_CMD_VAL 1 /* 10b */ -#define RD_CMD_LEN 2 - -#define ADDR_CMD_LEN 4 - -#define WR_DATA_LEN 8 -#define RD_DATA_LEN 8 - -#define PIC_SIGN_REG_ADDR 0x7 -#define PIC_SIGN_VALUE 0xcd - -#define STATUS_REG_ADDR 0 -#define WDT_EN_MASK 0x01 /* BIT_0 */ -#define CMND_EN_MASK 0x02 /* BIT_1 */ -#define DIS_BYPASS_CAP_MASK 0x04 /* BIT_2 Bypass Cap is disable*/ -#define DFLT_PWRON_MASK 0x08 /* BIT_3 */ -#define BYPASS_OFF_MASK 0x10 /* BIT_4 */ -#define BYPASS_FLAG_MASK 0x20 /* BIT_5 */ -#define STD_NIC_MASK (DIS_BYPASS_CAP_MASK | BYPASS_OFF_MASK | DFLT_PWRON_MASK) -#define WD_EXP_FLAG_MASK 0x40 /* BIT_6 */ -#define DFLT_PWROFF_MASK 0x80 /* BIT_7 */ -#define STD_NIC_PWOFF_MASK (DIS_BYPASS_CAP_MASK | BYPASS_OFF_MASK | DFLT_PWRON_MASK | DFLT_PWROFF_MASK) - -#define PRODUCT_CAP_REG_ADDR 0x5 -#define BYPASS_SUPPORT_MASK 0x01 /* BIT_0 */ -#define TAP_SUPPORT_MASK 0x02 /* BIT_1 */ -#define NORMAL_UNSUPPORT_MASK 0x04 /* BIT_2 */ -#define DISC_SUPPORT_MASK 0x08 /* BIT_3 */ -#define TPL2_SUPPORT_MASK 0x10 /* BIT_4 */ -#define DISC_PORT_SUPPORT_MASK 0x20 /* BIT_5 */ - -#define STATUS_TAP_REG_ADDR 0x6 -#define WDTE_TAP_BPN_MASK 0x01 /* BIT_1 1 when wdt expired -> TAP, 0 - Bypass */ -#define DIS_TAP_CAP_MASK 0x04 /* BIT_2 TAP Cap is disable*/ -#define DFLT_PWRON_TAP_MASK 0x08 /* BIT_3 */ -#define TAP_OFF_MASK 0x10 /* BIT_4 */ -#define TAP_FLAG_MASK 0x20 /* BIT_5 */ -#define TX_DISA_MASK 0x40 -#define TX_DISB_MASK 0x80 - -#define STD_NIC_TAP_MASK (DIS_TAP_CAP_MASK | TAP_OFF_MASK | DFLT_PWRON_TAP_MASK) - -#define STATUS_DISC_REG_ADDR 13 -#define WDTE_DISC_BPN_MASK 0x01 /* BIT_0 1 when wdt expired -> TAP, 0 - Bypass */ -#define STD_NIC_ON_MASK 0x02 /* BIT_1 */ -#define DIS_DISC_CAP_MASK 0x04 /* BIT_2 TAP Cap is disable*/ -#define DFLT_PWRON_DISC_MASK 0x08 /* BIT_3 */ -#define DISC_OFF_MASK 0x10 /* BIT_4 */ -#define DISC_FLAG_MASK 0x20 /* BIT_5 */ -#define TPL2_FLAG_MASK 0x40 /* BIT_6 */ -#define STD_NIC_DISC_MASK DIS_DISC_CAP_MASK - -#define CONT_CONFIG_REG_ADDR 12 -#define EN_HW_RESET_MASK 0x2 /* BIT_1 */ -#define WAIT_AT_PWUP_MASK 0x1 /* BIT_0 */ - -#define VER_REG_ADDR 0x1 -#define BP_FW_VER_A0 0xa0 -#define BP_FW_VER_A1 0xa1 - -#define INT_VER_MASK 0xf0 -#define EXT_VER_MASK 0xf -/* */ -#define PXG2BPI_VER 0x0 -#define PXG2TBPI_VER 0x1 -#define PXE2TBPI_VER 0x2 -#define PXG4BPFI_VER 0x4 -#define BP_FW_EXT_VER7 0x6 -#define BP_FW_EXT_VER8 0x8 -#define BP_FW_EXT_VER9 0x9 - -#define OLD_IF_VER -1 - -#define CMND_REG_ADDR 10 /* 1010b */ -#define WDT_REG_ADDR 4 -#define TMRL_REG_ADDR 2 -#define TMRH_REG_ADDR 3 - -/* NEW_FW */ -#define WDT_INTERVAL 1 /* 5 //8 */ -#define WDT_CMND_INTERVAL 200 /* 50 */ -#define CMND_INTERVAL 200 /* 100 usec */ -#define PULSE_TIME 100 - -/* OLD_FW */ -#define INIT_CMND_INTERVAL 40 -#define PULSE_INTERVAL 5 -#define WDT_TIME_CNT 3 - -/* Intel Commands */ - -#define CMND_OFF_INT 0xf -#define PWROFF_BYPASS_ON_INT 0x5 -#define BYPASS_ON_INT 0x6 -#define DIS_BYPASS_CAP_INT 0x4 -#define RESET_WDT_INT 0x1 - -/* Intel timing */ - -#define BYPASS_DELAY_INT 4 /* msec */ -#define CMND_INTERVAL_INT 2 /* msec */ - -/* Silicom Commands */ -#define CMND_ON 0x4 -#define CMND_OFF 0x2 -#define BYPASS_ON 0xa -#define BYPASS_OFF 0x8 -#define PORT_LINK_EN 0xe -#define PORT_LINK_DIS 0xc -#define WDT_ON 0x10 /* 0x1f (11111) - max */ -#define TIMEOUT_UNIT 100 -#define TIMEOUT_MAX_STEP 15 -#define WDT_TIMEOUT_MIN 100 /* msec */ -#define WDT_TIMEOUT_MAX 3276800 /* msec */ -#define WDT_AUTO_MIN_INT 500 -#define WDT_TIMEOUT_DEF WDT_TIMEOUT_MIN -#define WDT_OFF 0x6 -#define WDT_RELOAD 0x9 -#define RESET_CONT 0x20 -#define DIS_BYPASS_CAP 0x22 -#define EN_BYPASS_CAP 0x24 -#define BYPASS_STATE_PWRON 0x26 -#define NORMAL_STATE_PWRON 0x28 -#define BYPASS_STATE_PWROFF 0x27 -#define NORMAL_STATE_PWROFF 0x29 -#define TAP_ON 0xb -#define TAP_OFF 0x9 -#define TAP_STATE_PWRON 0x2a -#define DIS_TAP_CAP 0x2c -#define EN_TAP_CAP 0x2e -#define STD_NIC_OFF 0x86 -#define STD_NIC_ON 0x84 -#define DISC_ON 0x85 -#define DISC_OFF 0x8a -#define DISC_STATE_PWRON 0x87 -#define DIS_DISC_CAP 0x88 -#define EN_DISC_CAP 0x89 -#define TPL2_ON 0x8c -#define TPL2_OFF 0x8b -#define BP_WAIT_AT_PWUP_EN 0x80 -#define BP_WAIT_AT_PWUP_DIS 0x81 -#define BP_HW_RESET_EN 0x82 -#define BP_HW_RESET_DIS 0x83 - -#define TX_DISA 0x8d -#define TX_DISB 0x8e -#define TX_ENA 0xA0 -#define TX_ENB 0xA1 - -#define TX_DISA_PWRUP 0xA2 -#define TX_DISB_PWRUP 0xA3 -#define TX_ENA_PWRUP 0xA4 -#define TX_ENB_PWRUP 0xA5 - -#define BYPASS_CAP_DELAY 21 /* msec */ -#define DFLT_PWRON_DELAY 10 /* msec */ -#define LATCH_DELAY 13 /* msec */ -#define EEPROM_WR_DELAY 8 /* msec */ - -#define BP_LINK_MON_DELAY 4 /* sec */ - -#define BP_FW_EXT_VER0 0xa0 -#define BP_FW_EXT_VER1 0xa1 -#define BP_FW_EXT_VER2 0xb1 - -#define BP_OK 0 -#define BP_NOT_CAP -1 -#define WDT_STATUS_EXP -2 -#define WDT_STATUS_UNKNOWN -1 -#define WDT_STATUS_EN 1 -#define WDT_STATUS_DIS 0 - -#ifdef BP_SELF_TEST -#define ETH_P_BPTEST 0xabba - -#define BPTEST_DATA_LEN 60 -#endif - -#endif /* BYPASS_H */ diff --git a/drivers/staging/silicom/bypasslib/Makefile b/drivers/staging/silicom/bypasslib/Makefile deleted file mode 100644 index 80e8b9bc9357..000000000000 --- a/drivers/staging/silicom/bypasslib/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for the Bypass network device drivers. -# - -obj-$(CONFIG_SBYPASS) += bypass.o - diff --git a/drivers/staging/silicom/bypasslib/bp_ioctl.h b/drivers/staging/silicom/bypasslib/bp_ioctl.h deleted file mode 100644 index a13932af733b..000000000000 --- a/drivers/staging/silicom/bypasslib/bp_ioctl.h +++ /dev/null @@ -1,198 +0,0 @@ -/******************************************************************************/ -/* */ -/* bypass library, Copyright (c) 2004-2006 Silicom, Ltd */ -/* Corporation. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/* */ -/******************************************************************************/ - -#ifndef BP_IOCTL_H -#define BP_IOCTL_H - -#define BP_CAP 0x01 /* BIT_0 */ -#define BP_STATUS_CAP 0x02 /* BIT_1 */ -#define BP_STATUS_CHANGE_CAP 0x04 /* BIT_2 */ -#define SW_CTL_CAP 0x08 /* BIT_3 */ -#define BP_DIS_CAP 0x10 /* BIT_4 */ -#define BP_DIS_STATUS_CAP 0x20 /* BIT_5 */ -#define STD_NIC_CAP 0x40 /* BIT_6 */ -#define BP_PWOFF_ON_CAP 0x80 /* BIT_7 */ -#define BP_PWOFF_OFF_CAP 0x0100 /* BIT_8 */ -#define BP_PWOFF_CTL_CAP 0x0200 /* BIT_9 */ -#define BP_PWUP_ON_CAP 0x0400 /* BIT_10 */ -#define BP_PWUP_OFF_CAP 0x0800 /* BIT_11 */ -#define BP_PWUP_CTL_CAP 0x1000 /* BIT_12 */ -#define WD_CTL_CAP 0x2000 /* BIT_13 */ -#define WD_STATUS_CAP 0x4000 /* BIT_14 */ -#define WD_TIMEOUT_CAP 0x8000 /* BIT_15 */ -#define TX_CTL_CAP 0x10000 /* BIT_16 */ -#define TX_STATUS_CAP 0x20000 /* BIT_17 */ -#define TAP_CAP 0x40000 /* BIT_18 */ -#define TAP_STATUS_CAP 0x80000 /* BIT_19 */ -#define TAP_STATUS_CHANGE_CAP 0x100000 /* BIT_20 */ -#define TAP_DIS_CAP 0x200000 /* BIT_21 */ -#define TAP_DIS_STATUS_CAP 0x400000 /* BIT_22 */ -#define TAP_PWUP_ON_CAP 0x800000 /* BIT_23 */ -#define TAP_PWUP_OFF_CAP 0x1000000 /* BIT 24 */ -#define TAP_PWUP_CTL_CAP 0x2000000 /* BIT 25 */ -#define NIC_CAP_NEG 0x4000000 /* BIT 26 */ -#define TPL_CAP 0x8000000 /* BIT 27 */ -#define DISC_CAP 0x10000000 /* BIT 28 */ -#define DISC_DIS_CAP 0x20000000 /* BIT 29 */ -#define DISC_PWUP_CTL_CAP 0x40000000 /* BIT 30 */ - -#define WD_MIN_TIME_MASK(val) (val & 0xf) -#define WD_STEP_COUNT_MASK(val) ((val & 0xf) << 5) -#define WDT_STEP_TIME 0x10 /* BIT_4 */ - -#define WD_MIN_TIME_GET(desc) (desc & 0xf) -#define WD_STEP_COUNT_GET(desc) ((desc>>5) & 0xf) - -enum { - IS_BYPASS = 1, - GET_BYPASS_SLAVE, - GET_BYPASS_CAPS, - GET_WD_SET_CAPS, - SET_BYPASS, - GET_BYPASS, - GET_BYPASS_CHANGE, - SET_BYPASS_WD, - GET_BYPASS_WD, - GET_WD_EXPIRE_TIME, - RESET_BYPASS_WD_TIMER, - SET_DIS_BYPASS, - GET_DIS_BYPASS, - SET_BYPASS_PWOFF, - GET_BYPASS_PWOFF, - SET_BYPASS_PWUP, - GET_BYPASS_PWUP, - SET_STD_NIC, - GET_STD_NIC, - SET_TX, - GET_TX, - SET_TAP, - GET_TAP, - GET_TAP_CHANGE, - SET_DIS_TAP, - GET_DIS_TAP, - SET_TAP_PWUP, - GET_TAP_PWUP, - SET_WD_EXP_MODE, - GET_WD_EXP_MODE, - SET_WD_AUTORESET, - GET_WD_AUTORESET, - SET_TPL, - GET_TPL, - SET_DISC, - GET_DISC, - GET_DISC_CHANGE, - SET_DIS_DISC, - GET_DIS_DISC, - SET_DISC_PWUP, - GET_DISC_PWUP, - - GET_BYPASS_INFO = 100, - GET_BP_WAIT_AT_PWUP, - SET_BP_WAIT_AT_PWUP, - GET_BP_HW_RESET, - SET_BP_HW_RESET, -}; - -enum { - IF_SCAN_SD, - GET_DEV_NUM_SD, - IS_BYPASS_SD, - GET_BYPASS_SLAVE_SD, - GET_BYPASS_CAPS_SD, - GET_WD_SET_CAPS_SD, - SET_BYPASS_SD, - GET_BYPASS_SD, - GET_BYPASS_CHANGE_SD, - SET_BYPASS_WD_SD, - GET_BYPASS_WD_SD, - GET_WD_EXPIRE_TIME_SD, - RESET_BYPASS_WD_TIMER_SD, - SET_DIS_BYPASS_SD, - GET_DIS_BYPASS_SD, - SET_BYPASS_PWOFF_SD, - GET_BYPASS_PWOFF_SD, - SET_BYPASS_PWUP_SD, - GET_BYPASS_PWUP_SD, - SET_STD_NIC_SD, - GET_STD_NIC_SD, - SET_TX_SD, - GET_TX_SD, - SET_TAP_SD, - GET_TAP_SD, - GET_TAP_CHANGE_SD, - SET_DIS_TAP_SD, - GET_DIS_TAP_SD, - SET_TAP_PWUP_SD, - GET_TAP_PWUP_SD, - SET_WD_EXP_MODE_SD, - GET_WD_EXP_MODE_SD, - SET_WD_AUTORESET_SD, - GET_WD_AUTORESET_SD, - SET_TPL_SD, - GET_TPL_SD, - SET_DISC_SD, - GET_DISC_SD, - GET_DISC_CHANGE_SD, - SET_DIS_DISC_SD, - GET_DIS_DISC_SD, - SET_DISC_PWUP_SD, - GET_DISC_PWUP_SD, - - GET_BYPASS_INFO_SD = 100, - GET_BP_WAIT_AT_PWUP_SD, - SET_BP_WAIT_AT_PWUP_SD, - GET_BP_HW_RESET_SD, - SET_BP_HW_RESET_SD, - -}; - -#define SIOCGIFBYPASS (SIOCDEVPRIVATE+10) - -struct bp_info { - char prod_name[14]; - unsigned char fw_ver; -}; - -/* for passing single values */ -struct if_bypass { - char if_name[IFNAMSIZ]; - int cmd; - int data; -}; -struct if_bypass_info { - char if_name[IFNAMSIZ]; - char cmd; - struct bp_info bp_info; -}; - -/* -* The major device number. We can't rely on dynamic -* registration any more, because ioctls need to know -* it. -*/ - -#define MAGIC_NUM 'J' - -/* for passing single values */ -struct bpctl_cmd { - int status; - int data[8]; - int in_param[8]; - int out_param[8]; -}; - -#define IOCTL_TX_MSG(cmd) _IOWR(MAGIC_NUM, cmd, struct bpctl_cmd) - -#define DEVICE_NAME "bpctl" - -#endif diff --git a/drivers/staging/silicom/bypasslib/bplibk.h b/drivers/staging/silicom/bypasslib/bplibk.h deleted file mode 100644 index c5c75c4fe055..000000000000 --- a/drivers/staging/silicom/bypasslib/bplibk.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************/ -/* */ -/* bypass library, Copyright (c) 2004 Silicom, Ltd */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/* bplib.h */ -/* */ -/******************************************************************************/ -#ifndef BYPASS_H -#define BYPASS_H - -#include "bp_ioctl.h" -#include "libbp_sd.h" - -#define IF_NAME "eth" -#define SILICOM_VID 0x1374 -#define SILICOM_BP_PID_MIN 0x24 -#define SILICOM_BP_PID_MAX 0x5f -#define INTEL_PEG4BPII_PID 0x10a0 -#define INTEL_PEG4BPFII_PID 0x10a1 - -#define PEGII_IF_SERIES(vid, pid) \ - ((vid == 0x8086) && \ - ((pid == INTEL_PEG4BPII_PID) || \ - (pid == INTEL_PEG4BPFII_PID))) - -#ifdef BP_VENDOR_SUPPORT -char *bp_desc_array[] = { "e1000bp", "e1000bpe", "slcm5700", - "bnx2xbp", "ixgbp", "ixgbpe", NULL }; -#endif - -#endif diff --git a/drivers/staging/silicom/bypasslib/bypass.c b/drivers/staging/silicom/bypasslib/bypass.c deleted file mode 100644 index 8e714a8ea3a0..000000000000 --- a/drivers/staging/silicom/bypasslib/bypass.c +++ /dev/null @@ -1,536 +0,0 @@ -/******************************************************************************/ -/* */ -/* bypass library, Copyright (c) 2004-2007 Silicom, Ltd */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* */ -/* bypass.c */ -/* */ -/******************************************************************************/ - -#if defined(CONFIG_SMP) && !defined(__SMP__) -#define __SMP__ -#endif - -#include -#include -#include - -#include -#include - -#include /* struct device, and other headers */ -#include -#include -#include -#include - -#include - -#include "bplibk.h" - -#define MOD_NAME "bypass" - -#define VERSION "\n"MOD_NAME" version 9.0.4\n" - -MODULE_AUTHOR("www.silicom.co.il"); - -MODULE_LICENSE("GPL"); - -static int do_cmd(struct net_device *dev, struct ifreq *ifr, int cmd, int *data) -{ - int ret = -1; - struct if_bypass *bypass_cb; - - bypass_cb = (struct if_bypass *)ifr; - bypass_cb->cmd = cmd; - bypass_cb->data = *data; - - if (dev->netdev_ops && dev->netdev_ops->ndo_do_ioctl) { - ret = dev->netdev_ops->ndo_do_ioctl(dev, ifr, SIOCGIFBYPASS); - *data = bypass_cb->data; - } - - return ret; -} - -static int doit(int cmd, int if_index, int *data) -{ - struct ifreq ifr; - int ret = -1; - struct net_device *dev; - struct net_device *n; - - for_each_netdev_safe(&init_net, dev, n) { - if (dev->ifindex == if_index) { - ret = do_cmd(dev, &ifr, cmd, data); - if (ret < 0) - ret = -1; - } - } - - return ret; -} - -#define bp_symbol_get(fn_name) symbol_get(fn_name) -#define bp_symbol_put(fn_name) symbol_put(fn_name) - -#define SET_BPLIB_INT_FN(fn_name, arg_type, arg, ret) \ -({ int (*fn_ex)(arg_type) = NULL; \ - fn_ex = bp_symbol_get(fn_name##_sd); \ - if (fn_ex) { \ - ret = fn_ex(arg); \ - bp_symbol_put(fn_name##_sd); \ - } else { \ - ret = -1; \ - } \ -}) - -#define SET_BPLIB_INT_FN2(fn_name, arg_type, arg, arg_type1, arg1, ret)\ -({ int (*fn_ex)(arg_type, arg_type1) = NULL; \ - fn_ex = bp_symbol_get(fn_name##_sd); \ - if (fn_ex) { \ - ret = fn_ex(arg, arg1); \ - bp_symbol_put(fn_name##_sd); \ - } else { \ - ret = -1; \ - } \ -}) - -#define SET_BPLIB_INT_FN3(fn_name, arg_type, arg, arg_type1, arg1, \ - arg_type2, arg2, ret) \ -({ int (*fn_ex)(arg_type, arg_type1, arg_type2) = NULL; \ - fn_ex = bp_symbol_get(fn_name##_sd); \ - if (fn_ex) { \ - ret = fn_ex(arg, arg1, arg2); \ - bp_symbol_put(fn_name##_sd); \ - } else { \ - ret = -1; \ - } \ -}) - -#define DO_BPLIB_GET_ARG_FN(fn_name, ioctl_val, if_index) \ -({ int data, ret = 0; \ - if (is_dev_sd(if_index)) { \ - SET_BPLIB_INT_FN(fn_name, int, if_index, ret); \ - return ret; \ - } \ - return doit(ioctl_val, if_index, &data); \ -}) - -#define DO_BPLIB_SET_ARG_FN(fn_name, ioctl_val, if_index, arg) \ -({ int data, ret = 0; \ - if (is_dev_sd(if_index)) { \ - SET_BPLIB_INT_FN2(fn_name, int, if_index, int, \ - arg, ret); \ - return ret; \ - } \ - data = arg; \ - return doit(ioctl_val, if_index, &data); \ -}) - -static int is_dev_sd(int if_index) -{ - int ret = 0; - - SET_BPLIB_INT_FN(is_bypass, int, if_index, ret); - return ret >= 0 ? 1 : 0; -} - -static int is_bypass_dev(int if_index) -{ - struct pci_dev *pdev = NULL; - struct net_device *dev = NULL; - struct ifreq ifr; - int ret = 0; - int data = 0; - - while ((pdev = pci_get_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev))) { - dev = pci_get_drvdata(pdev); - if ((dev != NULL) && (dev->ifindex == if_index)) { - if ((pdev->vendor == SILICOM_VID) && - (pdev->device >= SILICOM_BP_PID_MIN) && - (pdev->device <= SILICOM_BP_PID_MAX)) { - goto send_cmd; - } -#if defined(BP_VENDOR_SUPPORT) && defined(ETHTOOL_GDRVINFO) - else { - struct ethtool_drvinfo info; - const struct ethtool_ops *ops = - dev->ethtool_ops; - int k = 0; - - if (ops->get_drvinfo) { - memset(&info, 0, sizeof(info)); - info.cmd = ETHTOOL_GDRVINFO; - ops->get_drvinfo(dev, &info); - for (; bp_desc_array[k]; k++) - if (!(strcmp(bp_desc_array[k], - info.driver))) - goto send_cmd; - - } - - } -#endif - return -1; - } - } - send_cmd: - ret = do_cmd(dev, &ifr, IS_BYPASS, &data); - return ret < 0 ? -1 : ret; -} - -static int is_bypass(int if_index) -{ - int ret = 0; - - SET_BPLIB_INT_FN(is_bypass, int, if_index, ret); - - if (ret < 0) - return is_bypass_dev(if_index); - return ret; -} -EXPORT_SYMBOL(is_bypass); - -static int get_bypass_slave(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass_slave, GET_BYPASS_SLAVE, if_index); -} -EXPORT_SYMBOL(get_bypass_slave); - -static int get_bypass_caps(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass_caps, GET_BYPASS_CAPS, if_index); -} -EXPORT_SYMBOL(get_bypass_caps); - -static int get_wd_set_caps(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_wd_set_caps, GET_WD_SET_CAPS, if_index); -} -EXPORT_SYMBOL(get_wd_set_caps); - -static int set_bypass(int if_index, int bypass_mode) -{ - DO_BPLIB_SET_ARG_FN(set_bypass, SET_BYPASS, if_index, bypass_mode); -} -EXPORT_SYMBOL(set_bypass); - -static int get_bypass(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass, GET_BYPASS, if_index); -} -EXPORT_SYMBOL(get_bypass); - -static int get_bypass_change(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass_change, GET_BYPASS_CHANGE, if_index); -} -EXPORT_SYMBOL(get_bypass_change); - -static int set_dis_bypass(int if_index, int dis_bypass) -{ - DO_BPLIB_SET_ARG_FN(set_dis_bypass, SET_DIS_BYPASS, if_index, - dis_bypass); -} -EXPORT_SYMBOL(set_dis_bypass); - -static int get_dis_bypass(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_dis_bypass, GET_DIS_BYPASS, if_index); -} -EXPORT_SYMBOL(get_dis_bypass); - -static int set_bypass_pwoff(int if_index, int bypass_mode) -{ - DO_BPLIB_SET_ARG_FN(set_bypass_pwoff, SET_BYPASS_PWOFF, if_index, - bypass_mode); -} -EXPORT_SYMBOL(set_bypass_pwoff); - -static int get_bypass_pwoff(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass_pwoff, GET_BYPASS_PWOFF, if_index); -} -EXPORT_SYMBOL(get_bypass_pwoff); - -static int set_bypass_pwup(int if_index, int bypass_mode) -{ - DO_BPLIB_SET_ARG_FN(set_bypass_pwup, SET_BYPASS_PWUP, if_index, - bypass_mode); -} -EXPORT_SYMBOL(set_bypass_pwup); - -static int get_bypass_pwup(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bypass_pwup, GET_BYPASS_PWUP, if_index); -} -EXPORT_SYMBOL(get_bypass_pwup); - -static int set_bypass_wd(int if_index, int ms_timeout, int *ms_timeout_set) -{ - int data = ms_timeout; - int ret = 0; - - if (is_dev_sd(if_index)) { - SET_BPLIB_INT_FN3(set_bypass_wd, int, if_index, int, ms_timeout, - int *, ms_timeout_set, ret); - } else { - ret = doit(SET_BYPASS_WD, if_index, &data); - if (ret > 0) { - *ms_timeout_set = ret; - ret = 0; - } - } - return ret; -} -EXPORT_SYMBOL(set_bypass_wd); - -static int get_bypass_wd(int if_index, int *ms_timeout_set) -{ - int *data = ms_timeout_set; - int ret = 0; - - if (is_dev_sd(if_index)) - SET_BPLIB_INT_FN2(get_bypass_wd, int, if_index, int *, - ms_timeout_set, ret); - else - ret = doit(GET_BYPASS_WD, if_index, data); - return ret; -} -EXPORT_SYMBOL(get_bypass_wd); - -static int get_wd_expire_time(int if_index, int *ms_time_left) -{ - int *data = ms_time_left, ret = 0; - - if (is_dev_sd(if_index)) { - SET_BPLIB_INT_FN2(get_wd_expire_time, int, if_index, int *, - ms_time_left, ret); - } else { - ret = doit(GET_WD_EXPIRE_TIME, if_index, data); - if ((ret == 0) && (*data != 0)) - ret = 1; - } - return ret; -} -EXPORT_SYMBOL(get_wd_expire_time); - -static int reset_bypass_wd_timer(int if_index) -{ - DO_BPLIB_GET_ARG_FN(reset_bypass_wd_timer, RESET_BYPASS_WD_TIMER, - if_index); -} -EXPORT_SYMBOL(reset_bypass_wd_timer); - -static int set_std_nic(int if_index, int bypass_mode) -{ - DO_BPLIB_SET_ARG_FN(set_std_nic, SET_STD_NIC, if_index, bypass_mode); -} -EXPORT_SYMBOL(set_std_nic); - -static int get_std_nic(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_std_nic, GET_STD_NIC, if_index); -} -EXPORT_SYMBOL(get_std_nic); - -static int set_tx(int if_index, int tx_state) -{ - DO_BPLIB_SET_ARG_FN(set_tx, SET_TX, if_index, tx_state); -} -EXPORT_SYMBOL(set_tx); - -static int get_tx(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tx, GET_TX, if_index); -} -EXPORT_SYMBOL(get_tx); - -static int set_tap(int if_index, int tap_mode) -{ - DO_BPLIB_SET_ARG_FN(set_tap, SET_TAP, if_index, tap_mode); -} -EXPORT_SYMBOL(set_tap); - -static int get_tap(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tap, GET_TAP, if_index); -} -EXPORT_SYMBOL(get_tap); - -static int get_tap_change(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tap_change, GET_TAP_CHANGE, if_index); -} -EXPORT_SYMBOL(get_tap_change); - -static int set_dis_tap(int if_index, int dis_tap) -{ - DO_BPLIB_SET_ARG_FN(set_dis_tap, SET_DIS_TAP, if_index, dis_tap); -} -EXPORT_SYMBOL(set_dis_tap); - -static int get_dis_tap(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_dis_tap, GET_DIS_TAP, if_index); -} -EXPORT_SYMBOL(get_dis_tap); - -static int set_tap_pwup(int if_index, int tap_mode) -{ - DO_BPLIB_SET_ARG_FN(set_tap_pwup, SET_TAP_PWUP, if_index, tap_mode); -} -EXPORT_SYMBOL(set_tap_pwup); - -static int get_tap_pwup(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tap_pwup, GET_TAP_PWUP, if_index); -} -EXPORT_SYMBOL(get_tap_pwup); - -static int set_bp_disc(int if_index, int disc_mode) -{ - DO_BPLIB_SET_ARG_FN(set_bp_disc, SET_DISC, if_index, disc_mode); -} -EXPORT_SYMBOL(set_bp_disc); - -static int get_bp_disc(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bp_disc, GET_DISC, if_index); -} -EXPORT_SYMBOL(get_bp_disc); - -static int get_bp_disc_change(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bp_disc_change, GET_DISC_CHANGE, if_index); -} -EXPORT_SYMBOL(get_bp_disc_change); - -static int set_bp_dis_disc(int if_index, int dis_disc) -{ - DO_BPLIB_SET_ARG_FN(set_bp_dis_disc, SET_DIS_DISC, if_index, dis_disc); -} -EXPORT_SYMBOL(set_bp_dis_disc); - -static int get_bp_dis_disc(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bp_dis_disc, GET_DIS_DISC, if_index); -} -EXPORT_SYMBOL(get_bp_dis_disc); - -static int set_bp_disc_pwup(int if_index, int disc_mode) -{ - DO_BPLIB_SET_ARG_FN(set_bp_disc_pwup, SET_DISC_PWUP, if_index, - disc_mode); -} -EXPORT_SYMBOL(set_bp_disc_pwup); - -static int get_bp_disc_pwup(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_bp_disc_pwup, GET_DISC_PWUP, if_index); -} -EXPORT_SYMBOL(get_bp_disc_pwup); - -static int set_wd_exp_mode(int if_index, int mode) -{ - DO_BPLIB_SET_ARG_FN(set_wd_exp_mode, SET_WD_EXP_MODE, if_index, mode); -} -EXPORT_SYMBOL(set_wd_exp_mode); - -static int get_wd_exp_mode(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_wd_exp_mode, GET_WD_EXP_MODE, if_index); -} -EXPORT_SYMBOL(get_wd_exp_mode); - -static int set_wd_autoreset(int if_index, int time) -{ - DO_BPLIB_SET_ARG_FN(set_wd_autoreset, SET_WD_AUTORESET, if_index, time); -} -EXPORT_SYMBOL(set_wd_autoreset); - -static int get_wd_autoreset(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_wd_autoreset, GET_WD_AUTORESET, if_index); -} -EXPORT_SYMBOL(get_wd_autoreset); - -static int set_tpl(int if_index, int tpl_mode) -{ - DO_BPLIB_SET_ARG_FN(set_tpl, SET_TPL, if_index, tpl_mode); -} -EXPORT_SYMBOL(set_tpl); - -static int get_tpl(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tpl, GET_TPL, if_index); -} -EXPORT_SYMBOL(get_tpl); - -static int set_bp_hw_reset(int if_index, int mode) -{ - DO_BPLIB_SET_ARG_FN(set_tpl, SET_BP_HW_RESET, if_index, mode); -} -EXPORT_SYMBOL(set_bp_hw_reset); - -static int get_bp_hw_reset(int if_index) -{ - DO_BPLIB_GET_ARG_FN(get_tpl, GET_BP_HW_RESET, if_index); -} -EXPORT_SYMBOL(get_bp_hw_reset); - -static int get_bypass_info(int if_index, struct bp_info *bp_info) -{ - int ret = 0; - - if (is_dev_sd(if_index)) { - SET_BPLIB_INT_FN2(get_bypass_info, int, if_index, - struct bp_info *, bp_info, ret); - } else { - struct net_device *dev; - struct net_device *n; - - for_each_netdev_safe(&init_net, dev, n) { - if (dev->ifindex == if_index) { - struct if_bypass_info *bypass_cb; - struct ifreq ifr; - - memset(&ifr, 0, sizeof(ifr)); - bypass_cb = (struct if_bypass_info *)𝔦 - bypass_cb->cmd = GET_BYPASS_INFO; - - if (dev->netdev_ops && - dev->netdev_ops->ndo_do_ioctl) - ret = dev->netdev_ops->ndo_do_ioctl(dev, - &ifr, SIOCGIFBYPASS); - else - ret = -1; - if (ret == 0) - memcpy(bp_info, &bypass_cb->bp_info, - sizeof(struct bp_info)); - ret = ret < 0 ? -1 : 0; - break; - } - } - } - return ret; -} -EXPORT_SYMBOL(get_bypass_info); - -static int __init init_lib_module(void) -{ - printk(VERSION); - return 0; -} - -static void __exit cleanup_lib_module(void) -{ -} - -module_init(init_lib_module); -module_exit(cleanup_lib_module); diff --git a/drivers/staging/silicom/bypasslib/libbp_sd.h b/drivers/staging/silicom/bypasslib/libbp_sd.h deleted file mode 100644 index cac4b0b2ed78..000000000000 --- a/drivers/staging/silicom/bypasslib/libbp_sd.h +++ /dev/null @@ -1,532 +0,0 @@ -/******************************************************************************/ -/* */ -/* bypass library, Copyright (c) 2004 Silicom, Ltd */ -/* Corporation. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* Ver 1.0.0 */ -/* */ -/* libbypass.h */ -/* */ -/******************************************************************************/ - -/** - * is_bypass - check if device is a Bypass controlling device - * @if_index: network device index - * - * Output: - * 1 - if device is bypass controlling device, - * 0 - if device is bypass slave device - * -1 - device not support Bypass - **/ -int is_bypass_sd(int if_index); - -/** - * get_bypass_slave - get second port participate in the Bypass pair - * @if_index: network device index - * - * Output: - * network device index of the slave device - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_slave_sd(int if_index); - -/** - * get_bypass_caps - get second port participate in the Bypass pair - * @if_index: network device index - * - * Output: - * flags word on success;flag word is a 32-bit mask word with each bit defines - * different capability as described bellow. - * Value of 1 for supporting this feature. 0 for not supporting this feature. - * -1 - on failure (if the device is not capable of the operation or not a - * Bypass device) - * Bit feature description - * - * 0 BP_CAP The interface is Bypass capable in general - * - * 1 BP_STATUS_CAP The interface can report of the current Bypass - * mode - * - * 2 BP_STATUS_CHANGE_CAP The interface can report on a change to bypass - * mode from the last time the mode was defined - * - * 3 SW_CTL_CAP The interface is Software controlled capable for - * bypass/non bypass modes. - * - * 4 BP_DIS_CAP The interface is capable of disabling the Bypass - * mode at all times. This mode will retain its - * mode even during power loss and also after power - * recovery. This will overcome on any bypass - * operation due to watchdog timeout or set bypass - * command. - * - * 5 BP_DIS_STATUS_CAP The interface can report of the current - * DIS_BP_CAP - * - * 6 STD_NIC_CAP The interface is capable to be configured to - * operate as standard, non Bypass, NIC interface - * (have direct connection to interfaces at all - * power modes) - * - * 7 BP_PWOFF_NO_CAP The interface can be in Bypass mode at power off - * state - * - * 8 BP_PWOFF_OFF_CAP The interface can disconnect the Bypass mode at - * power off state without effecting all the other - * states of operation - * - * 9 BP_PWOFF_CTL_CAP The behavior of the Bypass mode at Power-off - * state can be controlled by software without - * effecting any other state - * - *10 BP_PWUP_ON_CAP The interface can be in Bypass mode when power - * is turned on (until the system take control of - * the bypass functionality) - * - *11 BP_PWUP_OFF_CAP The interface can disconnect from Bypass mode - * when power is turned on (until the system take - * control of the bypass functionality) - * - *12 BP_PWUP_CTL_CAP The behavior of the Bypass mode at Power-up can - * be controlled by software - * - *13 WD_CTL_CAP The interface has watchdog capabilities to turn - * to Bypass mode when not reset for defined period - * of time. - * - *14 WD_STATUS_CAP The interface can report on the watchdog status - * (Active/inactive) - * - *15 WD_TIMEOUT_CAP The interface can report the time left till - * watchdog triggers to Bypass mode. - * - *16-31 RESERVED - * - * **/ -int get_bypass_caps_sd(int if_index); - -/** - * get_wd_set_caps - Obtain watchdog timer setting capabilities - * @if_index: network device index - * - * Output: - * - * Set of numbers defining the various parameters of the watchdog capable - * to be set to as described bellow. - * -1 - on failure (device not support Bypass or it's a slave device) - * - * Bit feature description - * - * 0-3 WD_MIN_TIME The interface WD minimal time period in 100mS units - * - * 4 WD_STEP_TIME The steps of the WD timer in - * 0 - for linear steps (WD_MIN_TIME * X) - * 1 - for multiply by 2 from previous step - * (WD_MIN_TIME * 2^X) - * - * 5-8 WD_STEP_COUNT Number of steps the WD timer supports in 2^X - * (X bit available for defining the value) - * - * - * - **/ -int get_wd_set_caps_sd(int if_index); - -/** - * set_bypass - set Bypass state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode (1=on, 0=off) - * Output: - * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int set_bypass_sd(int if_index, int bypass_mode); - -/** - * get_bypass - Get Bypass mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_sd(int if_index); - -/** - * get_bypass_change - Get change of Bypass mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_change_sd(int if_index); - -/** - * set_dis_bypass - Set Disable Bypass mode - * @if_index: network device index of the controlling device - * @dis_bypass: disable bypass(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int set_dis_bypass_sd(int if_index, int dis_bypass); - -/** - * get_dis_bypass - Get Disable Bypass mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal Bypass mode/ Disable bypass) - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int get_dis_bypass_sd(int if_index); - -/** - * set_bypass_pwoff - Set Bypass mode at power-off state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode setting at power off state (1=BP en, 0=BP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int set_bypass_pwoff_sd(int if_index, int bypass_mode); - -/** - * get_bypass_pwoff - Get Bypass mode state at power-off state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable bypass at power off state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int get_bypass_pwoff_sd(int if_index); - -/** - * set_bypass_pwup - Set Bypass mode at power-up state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode setting at power up state (1=BP en, 0=BP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int set_bypass_pwup_sd(int if_index, int bypass_mode); - -/** - * get_bypass_pwup - Get Bypass mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable bypass at power up state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int get_bypass_pwup_sd(int if_index); - -/** - * set_bypass_wd - Set watchdog state - * @if_index: network device index of the controlling device - * @ms_timeout: requested timeout (in ms units), 0 for disabling the watchdog - * timer - * @ms_timeout_set(output): requested timeout (in ms units), that the adapter - * supports and will be used by the watchdog - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set); - -/** - * get_bypass_wd - Get watchdog state - * @if_index: network device index of the controlling device - * @ms_timeout (output): WDT timeout (in ms units), - * -1 for unknown wdt status - * 0 if WDT is disabled - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int get_bypass_wd_sd(int if_index, int *ms_timeout_set); - -/** - * get_wd_expire_time - Get watchdog expire - * @if_index: network device index of the controlling device - * @ms_time_left (output): time left till watchdog time expire, - * -1 if WDT has expired - * 0 if WDT is disabled - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device or unknown wdt status) - **/ -int get_wd_expire_time_sd(int if_index, int *ms_time_left); - -/** - * reset_bypass_wd_timer - Reset watchdog timer - * @if_index: network device index of the controlling device - * - * Output: - * 1 - on success - * 0 - watchdog is not configured - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device or unknown wdt status) - **/ -int reset_bypass_wd_timer_sd(int if_index); - -/** - * set_std_nic - Standard NIC mode of operation - * @if_index: network device index of the controlling device - * @nic_mode: 0/1 (Default Bypass mode / Standard NIC mode) - * - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int set_std_nic_sd(int if_index, int nic_mode); - -/** - * get_std_nic - Get Standard NIC mode setting - * @if_index: network device index of the controlling device - * - * Output: - * 0/1 (Default Bypass mode / Standard NIC mode) on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass or it's a slave device) - **/ -int get_std_nic_sd(int if_index); - -/** - * set_tx - set transmitter enable/disable - * @if_index: network device index of the controlling device - * @tx_state: 0/1 (Transmit Disable / Transmit Enable) - * - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ) - **/ -int set_tx_sd(int if_index, int tx_state); - -/** - * get_std_nic - get transmitter state (disable / enable) - * @if_index: network device index of the controlling device - * - * Output: - * 0/1 (ransmit Disable / Transmit Enable) on success - * -1 - on failure (device is not capable of the operation or device not support - * Bypass) - **/ -int get_tx_sd(int if_index); - -/** - * set_tap - set TAP state - * @if_index: network device index of the controlling device - * @tap_mode: 1 tap mode , 0 normal nic mode - * Output: - * 0 - on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int set_tap_sd(int if_index, int tap_mode); - -/** - * get_tap - Get TAP mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int get_tap_sd(int if_index); - -/** - * get_tap_change - Get change of TAP mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int get_tap_change_sd(int if_index); - -/** - * set_dis_tap - Set Disable TAP mode - * @if_index: network device index of the controlling device - * @dis_tap: disable tap(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not support - * TAP or it's a slave device) - **/ -int set_dis_tap_sd(int if_index, int dis_tap); - -/** - * get_dis_tap - Get Disable TAP mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal TAP mode/ Disable TAP) - * -1 - on failure (device is not capable of the operation or device not support - * TAP or it's a slave device) - **/ -int get_dis_tap_sd(int if_index); - -/** - * set_tap_pwup - Set TAP mode at power-up state - * @if_index: network device index of the controlling device - * @bypass_mode: tap mode setting at power up state (1=TAP en, 0=TAP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not - * support TAP or it's a slave device) - **/ -int set_tap_pwup_sd(int if_index, int tap_mode); - -/** - * get_tap_pwup - Get TAP mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable TAP at power up state / normal TAP mode) - * -1 - on failure (device is not capable of the operation or device not - * support TAP or it's a slave device) - **/ -int get_tap_pwup_sd(int if_index); - -/** - * set_bp_disc - set Disconnect state - * @if_index: network device index of the controlling device - * @tap_mode: 1 disc mode , 0 non-disc mode - * Output: - * 0 - on success - * -1 - on failure (device not support Disconnect or it's a slave device) - **/ -int set_bp_disc_sd(int if_index, int disc_mode); - -/** - * get_bp_disc - Get Disconnect mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Disconnect or it's a slave device) - **/ -int get_bp_disc_sd(int if_index); - -/** - * get_bp_disc_change - Get change of Disconnect mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Disconnect or it's a slave device) - **/ -int get_bp_disc_change_sd(int if_index); - -/** - * set_bp_dis_disc - Set Disable Disconnect mode - * @if_index: network device index of the controlling device - * @dis_tap: disable tap(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable ofthe operation or device not - * support Disconnect or it's a slave device) - **/ -int set_bp_dis_disc_sd(int if_index, int dis_disc); - -/** - * get_dis_tap - Get Disable Disconnect mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal Disconnect mode/ Disable Disconnect) - * -1 - on failure (device is not capable of the operation or device not - * support Disconnect or it's a slave device) - **/ -int get_bp_dis_disc_sd(int if_index); - -/** - * set_bp_disc_pwup - Set Disconnect mode at power-up state - * @if_index: network device index of the controlling device - * @disc_mode: tap mode setting at power up state (1=Disc en, 0=Disc Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation or device not - * support Disconnect or it's a slave device) - **/ -int set_bp_disc_pwup_sd(int if_index, int disc_mode); - -/** - * get_bp_disc_pwup - Get Disconnect mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable Disconnect at power up state / normal Disconnect - * mode) - * -1 - on failure (device is not capable of the operation or device not - * support TAP or it's a slave device) - **/ -int get_bp_disc_pwup_sd(int if_index); - -/** - * set_wd_exp_mode - Set adapter state when WDT expired. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int set_wd_exp_mode_sd(int if_index, int bypass_mode); - -/** - * get_wd_exp_mode - Get adapter state when WDT expired. - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (bypass/tap) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_wd_exp_mode_sd(int if_index); - -/** - * set_wd_autoreset - reset WDT periodically. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 1 - on success - * -1 - on failure (device is not capable of the operation or device not - * support Bypass or it's a slave device or unknown wdt - * status) - **/ -int set_wd_autoreset_sd(int if_index, int time); - -/** - * set_wd_autoreset - reset WDT periodically. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 1 - on success - * -1 - on failure (device is not capable of the operation or device not - * support Bypass or it's a slave device or unknown wdt - * status) - **/ -int get_wd_autoreset_sd(int if_index); - -/** - * set_tpl - set TPL state - * @if_index: network device index of the controlling device - * @tpl_mode: 1 tpl mode , 0 normal nic mode - * Output: - * 0 - on success - * -1 - on failure (device not support TPL) - **/ -int set_tpl_sd(int if_index, int tpl_mode); - -/** - * get_tpl - Get TPL mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support TPL or it's a slave device) - **/ -int get_tpl_sd(int if_index); - -int get_bypass_info_sd(int if_index, struct bp_info *bp_info); -int bp_if_scan_sd(void); -/*int get_dev_num_sd(void);*/ diff --git a/drivers/staging/silicom/libbp_sd.h b/drivers/staging/silicom/libbp_sd.h deleted file mode 100644 index 065277f81c78..000000000000 --- a/drivers/staging/silicom/libbp_sd.h +++ /dev/null @@ -1,550 +0,0 @@ -/******************************************************************************/ -/* */ -/* bypass library, Copyright (c) 2004 Silicom, Ltd */ -/* Corporation. */ -/* */ -/* 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, located in the file LICENSE. */ -/* */ -/* Ver 1.0.0 */ -/* */ -/* libbypass.h */ -/* */ -/******************************************************************************/ - -#define BP_CAP 0x01 /* BIT_0 */ -#define BP_STATUS_CAP 0x02 -#define BP_STATUS_CHANGE_CAP 0x04 -#define SW_CTL_CAP 0x08 -#define BP_DIS_CAP 0x10 -#define BP_DIS_STATUS_CAP 0x20 -#define STD_NIC_CAP 0x40 -#define BP_PWOFF_ON_CAP 0x80 -#define BP_PWOFF_OFF_CAP 0x0100 -#define BP_PWOFF_CTL_CAP 0x0200 -#define BP_PWUP_ON_CAP 0x0400 -#define BP_PWUP_OFF_CAP 0x0800 -#define BP_PWUP_CTL_CAP 0x1000 -#define WD_CTL_CAP 0x2000 -#define WD_STATUS_CAP 0x4000 -#define WD_TIMEOUT_CAP 0x8000 -#define TX_CTL_CAP 0x10000 -#define TX_STATUS_CAP 0x20000 -#define TAP_CAP 0x40000 -#define TAP_STATUS_CAP 0x80000 -#define TAP_STATUS_CHANGE_CAP 0x100000 -#define TAP_DIS_CAP 0x200000 -#define TAP_DIS_STATUS_CAP 0x400000 -#define TAP_PWUP_ON_CAP 0x800000 -#define TAP_PWUP_OFF_CAP 0x1000000 -#define TAP_PWUP_CTL_CAP 0x2000000 -#define NIC_CAP_NEG 0x4000000 /* BIT 26 */ - -#define WD_MIN_TIME_GET(desc) (desc & 0xf) -#define WDT_STEP_TIME 0x10 - -struct bp_info { - char prod_name[14]; - unsigned char fw_ver; -}; - -/** - * is_bypass - check if device is a Bypass controlling device - * @if_index: network device index - * - * Output: - * 1 - if device is bypass controlling device, - * 0 - if device is bypass slave device - * -1 - device not support Bypass - **/ -int is_bypass_sd(int if_index); - -/** - * get_bypass_slave - get second port participate in the Bypass pair - * @if_index: network device index - * - * Output: - * network device index of the slave device - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_slave_sd(int if_index); - -/** - * get_bypass_caps - get second port participate in the Bypass pair - * @if_index: network device index - * - * Output: - * flags word on success;flag word is a 32-bit mask word with each bit defines different - * capability as described bellow. - * Value of 1 for supporting this feature. 0 for not supporting this feature. - * -1 - on failure (if the device is not capable of the operation or not a Bypass device) - * Bit feature description - * - * 0 BP_CAP The interface is Bypass capable in general - * - * 1 BP_STATUS_CAP The interface can report of the current Bypass mode - * - * 2 BP_STATUS_CHANGE_CAP The interface can report on a change to bypass mode from - * the last time the mode was defined - * - * 3 SW_CTL_CAP The interface is Software controlled capable for bypass/non bypass modes. - * - * 4 BP_DIS_CAP The interface is capable of disabling the Bypass mode at all times. - * This mode will retain its mode even during power loss and also after - * power recovery. This will overcome on any bypass operation due to - * watchdog timeout or set bypass command. - * - * 5 BP_DIS_STATUS_CAP The interface can report of the current DIS_BP_CAP - * - * 6 STD_NIC_CAP The interface is capable to be configured to operate as standard, non Bypass, - * NIC interface (have direct connection to interfaces at all power modes) - * - * 7 BP_PWOFF_NO_CAP The interface can be in Bypass mode at power off state - * - * 8 BP_PWOFF_OFF_CAP The interface can disconnect the Bypass mode at power off state without - * effecting all the other states of operation - * - * 9 BP_PWOFF_CTL_CAP The behavior of the Bypass mode at Power-off state can be controlled by - * software without effecting any other state - * - *10 BP_PWUP_ON_CAP The interface can be in Bypass mode when power is turned on - * (until the system take control of the bypass functionality) - * - *11 BP_PWUP_OFF_CAP The interface can disconnect from Bypass mode when power is turned on - * (until the system take control of the bypass functionality) - * - *12 BP_PWUP_CTL_CAP The behavior of the Bypass mode at Power-up can be controlled by software - * - *13 WD_CTL_CAP The interface has watchdog capabilities to turn to Bypass mode when not reset - * for defined period of time. - * - *14 WD_STATUS_CAP The interface can report on the watchdog status (Active/inactive) - * - *15 WD_TIMEOUT_CAP The interface can report the time left till watchdog triggers to Bypass mode. - * - *16-31 RESERVED - * - * **/ -int get_bypass_caps_sd(int if_index); - -/** - * get_wd_set_caps - Obtain watchdog timer setting capabilities - * @if_index: network device index - * - * Output: - * - * Set of numbers defining the various parameters of the watchdog capable - * to be set to as described bellow. - * -1 - on failure (device not support Bypass or it's a slave device) - * - * Bit feature description - * - * 0-3 WD_MIN_TIME The interface WD minimal time period in 100mS units - * - * 4 WD_STEP_TIME The steps of the WD timer in - * 0 - for linear steps (WD_MIN_TIME * X) - * 1 - for multiply by 2 from previous step (WD_MIN_TIME * 2^X) - * - * 5-8 WD_STEP_COUNT Number of steps the WD timer supports in 2^X - * (X bit available for defining the value) - * - * - * - **/ -int get_wd_set_caps_sd(int if_index); - -/** - * set_bypass - set Bypass state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode (1=on, 0=off) - * Output: - * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int set_bypass_sd(int if_index, int bypass_mode); - -/** - * get_bypass - Get Bypass mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_sd(int if_index); - -/** - * get_bypass_change - Get change of Bypass mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_bypass_change_sd(int if_index); - -/** - * set_dis_bypass - Set Disable Bypass mode - * @if_index: network device index of the controlling device - * @dis_bypass: disable bypass(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int set_dis_bypass_sd(int if_index, int dis_bypass); - -/** - * get_dis_bypass - Get Disable Bypass mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal Bypass mode/ Disable bypass) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int get_dis_bypass_sd(int if_index); - -/** - * set_bypass_pwoff - Set Bypass mode at power-off state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode setting at power off state (1=BP en, 0=BP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int set_bypass_pwoff_sd(int if_index, int bypass_mode); - -/** - * get_bypass_pwoff - Get Bypass mode state at power-off state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable bypass at power off state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int get_bypass_pwoff_sd(int if_index); - -/** - * set_bypass_pwup - Set Bypass mode at power-up state - * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode setting at power up state (1=BP en, 0=BP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int set_bypass_pwup_sd(int if_index, int bypass_mode); - -/** - * get_bypass_pwup - Get Bypass mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable bypass at power up state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int get_bypass_pwup_sd(int if_index); - -/** - * set_bypass_wd - Set watchdog state - * @if_index: network device index of the controlling device - * @ms_timeout: requested timeout (in ms units), 0 for disabling the watchdog timer - * @ms_timeout_set(output): requested timeout (in ms units), - * that the adapter supports and will be used by the watchdog - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set); - -/** - * get_bypass_wd - Get watchdog state - * @if_index: network device index of the controlling device - * @ms_timeout (output): WDT timeout (in ms units), - * -1 for unknown wdt status - * 0 if WDT is disabled - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int get_bypass_wd_sd(int if_index, int *ms_timeout_set); - -/** - * get_wd_expire_time - Get watchdog expire - * @if_index: network device index of the controlling device - * @ms_time_left (output): time left till watchdog time expire, - * -1 if WDT has expired - * 0 if WDT is disabled - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) - **/ -int get_wd_expire_time_sd(int if_index, int *ms_time_left); - -/** - * reset_bypass_wd_timer - Reset watchdog timer - * @if_index: network device index of the controlling device - * - * Output: - * 1 - on success - * 0 - watchdog is not configured - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) - **/ -int reset_bypass_wd_timer_sd(int if_index); - -/** - * set_std_nic - Standard NIC mode of operation - * @if_index: network device index of the controlling device - * @nic_mode: 0/1 (Default Bypass mode / Standard NIC mode) - * - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int set_std_nic_sd(int if_index, int nic_mode); - -/** - * get_std_nic - Get Standard NIC mode setting - * @if_index: network device index of the controlling device - * - * Output: - * 0/1 (Default Bypass mode / Standard NIC mode) on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) - **/ -int get_std_nic_sd(int if_index); - -/** - * set_tx - set transmitter enable/disable - * @if_index: network device index of the controlling device - * @tx_state: 0/1 (Transmit Disable / Transmit Enable) - * - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ) - **/ -int set_tx_sd(int if_index, int tx_state); - -/** - * get_tx - get transmitter state (disable / enable) - * @if_index: network device index of the controlling device - * - * Output: - * 0/1 (ransmit Disable / Transmit Enable) on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass) - **/ -int get_tx_sd(int if_index); - -/** - * set_tpl - set TPL enable/disable - * @if_index: network device index of the controlling device - * @tx_state: 0/1 (TPL Disable / TPL Enable) - * - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ) - **/ -int set_tpl_sd(int if_index, int tpl_state); - -/** - * get_tpl - get TPL state (disable / enable) - * @if_index: network device index of the controlling device - * - * Output: - * 0/1 (TPL Disable / TPL Enable) on success - * -1 - on failure (device is not capable of the operation) - **/ -int get_tpl_sd(int if_index); - -int get_bp_hw_reset_sd(int if_index); - -int set_bp_hw_reset_sd(int if_index, int status); - -/** - * set_tap - set TAP state - * @if_index: network device index of the controlling device - * @tap_mode: 1 tap mode , 0 normal nic mode - * Output: - * 0 - on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int set_tap_sd(int if_index, int tap_mode); - -/** - * get_tap - Get TAP mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int get_tap_sd(int if_index); - -/** - * get_tap_change - Get change of TAP mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) - **/ -int get_tap_change_sd(int if_index); - -/** - * set_dis_tap - Set Disable TAP mode - * @if_index: network device index of the controlling device - * @dis_tap: disable tap(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) - **/ -int set_dis_tap_sd(int if_index, int dis_tap); - -/** - * get_dis_tap - Get Disable TAP mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal TAP mode/ Disable TAP) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) - **/ -int get_dis_tap_sd(int if_index); - -/** - * set_tap_pwup - Set TAP mode at power-up state - * @if_index: network device index of the controlling device - * @bypass_mode: tap mode setting at power up state (1=TAP en, 0=TAP Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) - **/ -int set_tap_pwup_sd(int if_index, int tap_mode); - -/** - * get_tap_pwup - Get TAP mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable TAP at power up state / normal TAP mode) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) - **/ -int get_tap_pwup_sd(int if_index); - -/** - * set_wd_exp_mode - Set adapter state when WDT expired. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int set_wd_exp_mode_sd(int if_index, int bypass_mode); - -/** - * get_wd_exp_mode - Get adapter state when WDT expired. - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (bypass/tap) on success - * -1 - on failure (device not support Bypass or it's a slave device) - **/ -int get_wd_exp_mode_sd(int if_index); - -/** - * set_wd_autoreset - reset WDT periodically. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 1 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) - **/ -int set_wd_autoreset_sd(int if_index, int time); - -/** - * set_wd_autoreset - reset WDT periodically. - * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) - * Output: - * 1 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) - **/ -int get_wd_autoreset_sd(int if_index); -/** - * set_disc - set DISC state - * @if_index: network device index of the controlling device - * @tap_mode: 1 DISC mode , 0 normal nic mode - * Output: - * 0 - on success - * -1 - on failure (device not support disconnect or it's a slave device) - **/ -int set_bp_disc_sd(int if_index, int disc_mode); - -/** - * get_disc - Get disc mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support disconnect or it's a slave device) - **/ -int get_bp_disc_sd(int if_index); - -/** - * get_disc_change - Get change of DISC mode state from last status check - * @if_index: network device index of the controlling device - * Output: - * 0/1 - (off/on) on success - * -1 - on failure (device not support disconnect or it's a slave device) - **/ -int get_bp_disc_change_sd(int if_index); - -/** - * set_dis_disc - Set Disable DISC mode - * @if_index: network device index of the controlling device - * @dis_disc: disable disconnect(1=dis, 0=en) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support DISC - * or it's a slave device) - **/ -int set_bp_dis_disc_sd(int if_index, int dis_disc); - -/** - * get_dis_disc - Get Disable DISC mode state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (normal DISC mode/ Disable DISC) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) - **/ -int get_bp_dis_disc_sd(int if_index); - -/** - * set_disc_pwup - Set DISC mode at power-up state - * @if_index: network device index of the controlling device - * @disc_mode: DISC mode setting at power up state (1= en, 0= Dis) - * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support DISC - * or it's a slave device) - **/ -int set_bp_disc_pwup_sd(int if_index, int disc_mode); - -/** - * get_disc_pwup - Get DISC mode state at power-up state - * @if_index: network device index of the controlling device - * Output: - * 0/1 - on success (Disable DISC at power up state / normal DISC mode) - * -1 - on failure (device is not capable of the operation ordevice not support DISC - * or it's a slave device) - **/ -int get_bp_disc_pwup_sd(int if_index); - -int get_bypass_info_sd(int if_index, struct bp_info *bp_info); -int bp_if_scan_sd(void); -/*int get_dev_num_sd(void);*/ -- cgit From 89d1bdc824e3eae87399bdcc6c1caca5d2696976 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 24 Jul 2014 22:55:08 -0400 Subject: staging: unisys: remove partition information from proc Debugging information for the guest's channels was being exposed in proc. Remove the code that creates these entries, which are no longer needed. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 99 ---------------------- 1 file changed, 99 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 6f87e274197c..156a72fdabd9 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -98,34 +98,6 @@ static CONTROLVM_MESSAGE_PACKET g_DeviceChangeStatePacket; #define is_diagpool_channel(channel_type_guid) \ (uuid_le_cmp(channel_type_guid, UltraDiagPoolChannelProtocolGuid) == 0) -typedef enum { - PARTPROP_invalid, - PARTPROP_name, - PARTPROP_description, - PARTPROP_handle, - PARTPROP_busNumber, - /* add new properties above, but don't forget to change - * InitPartitionProperties() and show_partition_property() also... - */ - PARTPROP_last -} PARTITION_property; -static const char *PartitionTypeNames[] = { "partition", NULL }; - -static char *PartitionPropertyNames[PARTPROP_last + 1]; -static void -InitPartitionProperties(void) -{ - char **p = PartitionPropertyNames; - p[PARTPROP_invalid] = ""; - p[PARTPROP_name] = "name"; - p[PARTPROP_description] = "description"; - p[PARTPROP_handle] = "handle"; - p[PARTPROP_busNumber] = "busNumber"; - p[PARTPROP_last] = NULL; -} - -static MYPROCTYPE *PartitionType; - #define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN "parahotplug" static struct proc_dir_entry *parahotplug_proc_dir; @@ -525,52 +497,6 @@ static ssize_t remaining_steps_store(struct device *dev, return count; } -static void -show_partition_property(struct seq_file *f, void *ctx, int property) -{ - VISORCHIPSET_BUS_INFO *info = (VISORCHIPSET_BUS_INFO *) (ctx); - - switch (property) { - case PARTPROP_name: - seq_printf(f, "%s\n", NONULLSTR(info->name)); - break; - case PARTPROP_description: - seq_printf(f, "%s\n", NONULLSTR(info->description)); - break; - case PARTPROP_handle: - seq_printf(f, "0x%-16.16Lx\n", info->partitionHandle); - break; - case PARTPROP_busNumber: - seq_printf(f, "%d\n", info->busNo); - break; - default: - seq_printf(f, "(%d??)\n", property); - break; - } -} - -static void -proc_Init(void) -{ - if (ProcDir == NULL) { - ProcDir = proc_mkdir(MYDRVNAME, NULL); - if (ProcDir == NULL) { - LOGERR("failed to create /proc directory %s", - MYDRVNAME); - POSTCODE_LINUX_2(CHIPSET_INIT_FAILURE_PC, - POSTCODE_SEVERITY_ERR); - } - } -} - -static void -proc_DeInit(void) -{ - if (ProcDir != NULL) - remove_proc_entry(MYDRVNAME, NULL); - ProcDir = NULL; -} - #if 0 static void testUnicode(void) @@ -1273,16 +1199,6 @@ bus_configure(CONTROLVM_MESSAGE *inmsg, PARSER_CONTEXT *parser_ctx) pBusInfo->name = parser_string_get(parser_ctx); visorchannel_uuid_id(&pBusInfo->partitionGuid, s); - pBusInfo->procObject = - visor_proc_CreateObject(PartitionType, s, (void *) (pBusInfo)); - if (pBusInfo->procObject == NULL) { - LOGERR("CONTROLVM_BUS_CONFIGURE Failed: busNo=%lu failed to create /proc entry", - busNo); - POSTCODE_LINUX_3(BUS_CONFIGURE_FAILURE_PC, busNo, - POSTCODE_SEVERITY_ERR); - rc = -CONTROLVM_RESP_ERROR_KMALLOC_FAILED; - goto Away; - } POSTCODE_LINUX_3(BUS_CONFIGURE_EXIT_PC, busNo, POSTCODE_SEVERITY_INFO); Away: bus_epilog(busNo, CONTROLVM_BUS_CONFIGURE, &inmsg->hdr, @@ -2485,15 +2401,6 @@ visorchipset_init(void) goto Away; } - proc_Init(); - memset(PartitionPropertyNames, 0, sizeof(PartitionPropertyNames)); - InitPartitionProperties(); - - PartitionType = visor_proc_CreateType(ProcDir, PartitionTypeNames, - (const char **) - PartitionPropertyNames, - &show_partition_property); - memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); @@ -2589,11 +2496,6 @@ visorchipset_exit(void) cleanup_controlvm_structures(); - if (PartitionType) { - visor_proc_DestroyType(PartitionType); - PartitionType = NULL; - } - memset(&g_DiagMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); @@ -2606,7 +2508,6 @@ visorchipset_exit(void) memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - proc_DeInit(); LOGINF("Channel %s (ControlVm) disconnected", visorchannel_id(ControlVm_channel, s)); visorchannel_destroy(ControlVm_channel); -- cgit From 8485e4f04a5dcb4d51b46f65e984ce3b22599967 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:47 +0100 Subject: staging: comedi: amplc_pc236: reformat header comments Use preferred style for copyright and driver description comments. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 92 ++++++++++++++-------------- 1 file changed, 46 insertions(+), 46 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 243b0f4d0312..9d64e45cfda1 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -1,51 +1,51 @@ /* - comedi/drivers/amplc_pc236.c - Driver for Amplicon PC36AT and PCI236 DIO boards. - - Copyright (C) 2002 MEV Ltd. - - 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. -*/ + * comedi/drivers/amplc_pc236.c + * Driver for Amplicon PC36AT and PCI236 DIO boards. + * + * Copyright (C) 2002 MEV Ltd. + * + * 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. + */ /* -Driver: amplc_pc236 -Description: Amplicon PC36AT, PCI236 -Author: Ian Abbott -Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236 or amplc_pc236) -Updated: Wed, 01 Apr 2009 15:41:25 +0100 -Status: works - -Configuration options - PC36AT: - [0] - I/O port base address - [1] - IRQ (optional) - -Configuration options - PCI236: - [0] - PCI bus of device (optional) - [1] - PCI slot of device (optional) - If bus/slot is not specified, the first available PCI device will be - used. - -The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing -as subdevice 0. - -Subdevice 1 pretends to be a digital input device, but it always returns -0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, -a rising edge on port C bit 3 acts as an external trigger, which can be -used to wake up tasks. This is like the comedi_parport device, but the -only way to physically disable the interrupt on the PC36AT is to remove -the IRQ jumper. If no interrupt is connected, then subdevice 1 is -unused. -*/ + * Driver: amplc_pc236 + * Description: Amplicon PC36AT, PCI236 + * Author: Ian Abbott + * Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236 or amplc_pc236) + * Updated: Wed, 01 Apr 2009 15:41:25 +0100 + * Status: works + * + * Configuration options - PC36AT: + * [0] - I/O port base address + * [1] - IRQ (optional) + * + * Configuration options - PCI236: + * [0] - PCI bus of device (optional) + * [1] - PCI slot of device (optional) + * If bus/slot is not specified, the first available PCI device will be + * used. + * + * The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing + * as subdevice 0. + * + * Subdevice 1 pretends to be a digital input device, but it always returns + * 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, + * a rising edge on port C bit 3 acts as an external trigger, which can be + * used to wake up tasks. This is like the comedi_parport device, but the + * only way to physically disable the interrupt on the PC36AT is to remove + * the IRQ jumper. If no interrupt is connected, then subdevice 1 is + * unused. + */ #include #include -- cgit From 12606fe74b90ae53c4aa03419121cd6bf786a80b Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:48 +0100 Subject: staging: comedi: amplc_pc236: remove some boilerplate comments Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 21 --------------------- 1 file changed, 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 9d64e45cfda1..760031904d94 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -117,10 +117,6 @@ static const struct pc236_board pc236_boards[] = { #endif }; -/* 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. - */ struct pc236_private { unsigned long lcr_iobase; /* PLX PCI9052 config registers in PCIBAR1 */ int enable_irq; @@ -425,12 +421,6 @@ static int pc236_pci_common_attach(struct comedi_device *dev, return pc236_common_attach(dev, iobase, pci_dev->irq, IRQF_SHARED); } -/* - * Attach is called by the Comedi core to configure the driver - * for a particular board. If you specified a board_name array - * in the driver structure, dev->board_ptr contains that - * address. - */ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) { const struct pc236_board *thisboard = comedi_board(dev); @@ -461,11 +451,6 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) return -EINVAL; } -/* - * The auto_attach hook is called at PCI probe time via - * comedi_pci_auto_config(). dev->board_ptr is NULL on entry. - * There should be a board entry matching the supplied PCI device. - */ static int pc236_auto_attach(struct comedi_device *dev, unsigned long context_unused) { @@ -517,12 +502,6 @@ static void pc236_detach(struct comedi_device *dev) } } -/* - * 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. - */ static struct comedi_driver amplc_pc236_driver = { .driver_name = "amplc_pc236", .module = THIS_MODULE, -- cgit From 046874f7fbd1e26f8bc4dccacc40bf1c9956986c Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:49 +0100 Subject: staging: comedi: amplc_pc236: remove manual configuration of PCI boards Remove the code that allows PCI boards to be manually attached by the `COMEDI_DEVCONFIG` ioctl (or the "comedi_config" application). Supported PCI boards (PCI236) will be attached automatically at probe time via `comedi_pci_auto_config()` and the `auto_attach` hook in the `struct comedi_driver`. The "wildcard" entry in `pc236_boards[]` was only used when manually attaching a PCI board using a driver name instead of a board name, so is no longer needed. Remove it. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 72 ++++------------------------ 1 file changed, 9 insertions(+), 63 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 760031904d94..7331ae3cac9c 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -21,19 +21,16 @@ * Driver: amplc_pc236 * Description: Amplicon PC36AT, PCI236 * Author: Ian Abbott - * Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236 or amplc_pc236) - * Updated: Wed, 01 Apr 2009 15:41:25 +0100 + * Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236) + * Updated: Thu, 24 Jul 2014 14:25:26 +0000 * Status: works * * Configuration options - PC36AT: * [0] - I/O port base address * [1] - IRQ (optional) * - * Configuration options - PCI236: - * [0] - PCI bus of device (optional) - * [1] - PCI slot of device (optional) - * If bus/slot is not specified, the first available PCI device will be - * used. + * Manual configuration of PCI board (PCI236) is not supported; it is + * configured automatically. * * The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing * as subdevice 0. @@ -85,7 +82,7 @@ */ enum pc236_bustype { isa_bustype, pci_bustype }; -enum pc236_model { pc36at_model, pci236_model, anypci_model }; +enum pc236_model { pc36at_model, pci236_model }; struct pc236_board { const char *name; @@ -108,12 +105,6 @@ static const struct pc236_board pc236_boards[] = { .bustype = pci_bustype, .model = pci236_model, }, - { - .name = "amplc_pc236", - .devid = PCI_DEVICE_ID_INVALID, - .bustype = pci_bustype, - .model = anypci_model, /* wildcard */ - }, #endif }; @@ -148,49 +139,6 @@ static const struct pc236_board *pc236_find_pci_board(struct pci_dev *pci_dev) return NULL; } -/* - * This function looks for a PCI device matching the requested board name, - * bus and slot. - */ -static struct pci_dev *pc236_find_pci_dev(struct comedi_device *dev, - struct comedi_devconfig *it) -{ - const struct pc236_board *thisboard = comedi_board(dev); - struct pci_dev *pci_dev = NULL; - int bus = it->options[0]; - int slot = it->options[1]; - - for_each_pci_dev(pci_dev) { - if (bus || slot) { - if (bus != pci_dev->bus->number || - slot != PCI_SLOT(pci_dev->devfn)) - continue; - } - if (pci_dev->vendor != PCI_VENDOR_ID_AMPLICON) - continue; - - if (thisboard->model == anypci_model) { - /* Wildcard board matches any supported PCI board. */ - const struct pc236_board *foundboard; - - foundboard = pc236_find_pci_board(pci_dev); - if (foundboard == NULL) - continue; - /* Replace wildcard board_ptr. */ - dev->board_ptr = foundboard; - } else { - /* Match specific model name. */ - if (pci_dev->device != thisboard->devid) - continue; - } - return pci_dev; - } - dev_err(dev->class_dev, - "No supported board found! (req. bus %d, slot %d)\n", - bus, slot); - return NULL; -} - /* * This function is called to mark the interrupt as disabled (no command * configured on subdevice 1) and to physically disable the interrupt @@ -439,12 +387,10 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) return pc236_common_attach(dev, dev->iobase, it->options[1], 0); } else if (is_pci_board(thisboard)) { - struct pci_dev *pci_dev; - - pci_dev = pc236_find_pci_dev(dev, it); - if (!pci_dev) - return -EIO; - return pc236_pci_common_attach(dev, pci_dev); + dev_err(dev->class_dev, + "Manual configuration of PCI board '%s' is not supported\n", + thisboard->name); + return -EIO; } dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); -- cgit From f78660123ff8e35e8098eefb8f8087a916239108 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:50 +0100 Subject: staging: comedi: amplc_pc236: no need to manipulate PCI ref count Now that this driver no longer supports "manual" attachment of PCI devices in its `attach` hook (`pc236_attach()`), it no longer has code that searches for a suitable PCI device and increments its reference count. Since the driver no longer has any reason for incrementing and decrementing the PCI device's reference count, the calls to `pci_dev_get()` and `pci_dev_put()` can be removed. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 7331ae3cac9c..cf45c58a1c46 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -417,13 +417,6 @@ static int pc236_auto_attach(struct comedi_device *dev, dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); return -EINVAL; } - /* - * Need to 'get' the PCI device to match the 'put' in pc236_detach(). - * TODO: Remove the pci_dev_get() and matching pci_dev_put() once - * support for manual attachment of PCI devices via pc236_attach() - * has been removed. - */ - pci_dev_get(pci_dev); return pc236_pci_common_attach(dev, pci_dev); } @@ -438,13 +431,9 @@ static void pc236_detach(struct comedi_device *dev) if (is_isa_board(thisboard)) { comedi_legacy_detach(dev); } else if (is_pci_board(thisboard)) { - struct pci_dev *pcidev = comedi_to_pci_dev(dev); - if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); - if (pcidev) - pci_dev_put(pcidev); } } -- cgit From a06021433074f8b5d197b552c297efd8f2155d5a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:51 +0100 Subject: staging: comedi: amplc_pc236: no need to set hw_dev The call to `comedi_set_hw_dev()` from `pc236_pci_common_attach()` is now unnecessary since `pc236_pci_common_attach()` is now only called from this driver's `auto_attach` hook `pc236_auto_attach()` and the comedi core now calls `comedi_set_hw_dev()` before calling that. Remove the unnecessary call. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index cf45c58a1c46..f99c7f1ab943 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -358,8 +358,6 @@ static int pc236_pci_common_attach(struct comedi_device *dev, unsigned long iobase; int ret; - comedi_set_hw_dev(dev, &pci_dev->dev); - ret = comedi_pci_enable(dev); if (ret) return ret; -- cgit From 350cfc5525bb5e1cd64ba19470a6e471611d117d Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:52 +0100 Subject: staging: comedi: amplc_pc236: absorb pc236_pci_common_attach() Absorb `pc236_pci_common_attach()` into `pc236_auto_attach()` since that's the only place it is called from. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index f99c7f1ab943..22d3b6f08e40 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -351,22 +351,6 @@ static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, return 0; } -static int pc236_pci_common_attach(struct comedi_device *dev, - struct pci_dev *pci_dev) -{ - struct pc236_private *devpriv = dev->private; - unsigned long iobase; - int ret; - - ret = comedi_pci_enable(dev); - if (ret) - return ret; - - devpriv->lcr_iobase = pci_resource_start(pci_dev, 1); - iobase = pci_resource_start(pci_dev, 2); - return pc236_common_attach(dev, iobase, pci_dev->irq, IRQF_SHARED); -} - static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) { const struct pc236_board *thisboard = comedi_board(dev); @@ -400,6 +384,8 @@ static int pc236_auto_attach(struct comedi_device *dev, { struct pci_dev *pci_dev = comedi_to_pci_dev(dev); struct pc236_private *devpriv; + unsigned long iobase; + int ret; if (!DO_PCI) return -EINVAL; @@ -415,7 +401,13 @@ static int pc236_auto_attach(struct comedi_device *dev, dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); return -EINVAL; } - return pc236_pci_common_attach(dev, pci_dev); + ret = comedi_pci_enable(dev); + if (ret) + return ret; + + devpriv->lcr_iobase = pci_resource_start(pci_dev, 1); + iobase = pci_resource_start(pci_dev, 2); + return pc236_common_attach(dev, iobase, pci_dev->irq, IRQF_SHARED); } static void pc236_detach(struct comedi_device *dev) -- cgit From 00afdd43db07e5093b69a5b9cca5f27f416ebfff Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:53 +0100 Subject: staging: comedi: amplc_pc236: remove 'model' member The `model` member of `struct pc236_board` is no longer used since the code to remove manual configuration of PCI devices was removed. Get rid of it. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 22d3b6f08e40..129578f86ccf 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -82,20 +82,17 @@ */ enum pc236_bustype { isa_bustype, pci_bustype }; -enum pc236_model { pc36at_model, pci236_model }; struct pc236_board { const char *name; unsigned short devid; enum pc236_bustype bustype; - enum pc236_model model; }; static const struct pc236_board pc236_boards[] = { #if DO_ISA { .name = "pc36at", .bustype = isa_bustype, - .model = pc36at_model, }, #endif #if DO_PCI @@ -103,7 +100,6 @@ static const struct pc236_board pc236_boards[] = { .name = "pci236", .devid = PCI_DEVICE_ID_AMPLICON_PCI236, .bustype = pci_bustype, - .model = pci236_model, }, #endif }; -- cgit From 22c39196b661c8569d92db50459dfa3a3afd4335 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:54 +0100 Subject: staging: comedi: amplc_pc236: split pc236_boards[] into ISA & PCI Split `pc236_boards[]` into `pc236_isa_boards[]` for ISA cards and `pc236_pci_boards[]` for PCI cards (there is only one of each). Only initialize the board name look-up members of `struct comedi_driver amplc_pc236_driver` if the ISA part of the driver is enabled in the kernel config (`CONFIG_COMEDI_AMPLC_PC236_ISA`) using the array of ISA boards (`pc236_isa_boards[]`). The driver doesn't allow manual configuration of PCI devices, so there is no point having the comedi core match the names of the PCI boards before it calls our driver's legacy attach routine (`pc236_attach()`). Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 129578f86ccf..0a5ba10b4afe 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -88,20 +88,20 @@ struct pc236_board { unsigned short devid; enum pc236_bustype bustype; }; -static const struct pc236_board pc236_boards[] = { -#if DO_ISA + +static const struct pc236_board pc236_isa_boards[] = { { .name = "pc36at", .bustype = isa_bustype, }, -#endif -#if DO_PCI +}; + +static const struct pc236_board pc236_pci_boards[] = { { .name = "pci236", .devid = PCI_DEVICE_ID_AMPLICON_PCI236, .bustype = pci_bustype, }, -#endif }; struct pc236_private { @@ -128,10 +128,10 @@ static const struct pc236_board *pc236_find_pci_board(struct pci_dev *pci_dev) { unsigned int i; - for (i = 0; i < ARRAY_SIZE(pc236_boards); i++) - if (is_pci_board(&pc236_boards[i]) && - pci_dev->device == pc236_boards[i].devid) - return &pc236_boards[i]; + for (i = 0; i < ARRAY_SIZE(pc236_pci_boards); i++) + if (is_pci_board(&pc236_pci_boards[i]) && + pci_dev->device == pc236_pci_boards[i].devid) + return &pc236_pci_boards[i]; return NULL; } @@ -429,9 +429,11 @@ static struct comedi_driver amplc_pc236_driver = { .attach = pc236_attach, .auto_attach = pc236_auto_attach, .detach = pc236_detach, - .board_name = &pc236_boards[0].name, +#if DO_ISA + .board_name = &pc236_isa_boards[0].name, .offset = sizeof(struct pc236_board), - .num_names = ARRAY_SIZE(pc236_boards), + .num_names = ARRAY_SIZE(pc236_isa_boards), +#endif }; #if DO_PCI -- cgit From ffe2d9fd49af6461972201eeaa8012e71fe40c97 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:55 +0100 Subject: staging: comedi: amplc_pc236: don't check bus type in attach Since the legacy attach routine `pc236_attach()` is only called for board names matching an entry in our array of ISA boards `pc236_isa_boards[]`, and it is reasonable to expect all elements of `pc236_isa_boards[]` to have their `bustype` member initialized correctly to `isa_bustype`, don't bother checking the bus type in `pc236_attach()`. Add `if (!DO_ISA) return -EINVAL` to optimize out the remainder of the function if `CONFIG_COMEDI_AMPLC_PC236_ISA` is not defined. Similarly, don't bother checking the bus type in `pc236_find_pci_board()` as it is reasonable to expect all elements of `pc236_pci_boards[]` to have their `bustype` member initialized correctly to `pci_bustype`. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 0a5ba10b4afe..51c22f9a9af1 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -129,8 +129,7 @@ static const struct pc236_board *pc236_find_pci_board(struct pci_dev *pci_dev) unsigned int i; for (i = 0; i < ARRAY_SIZE(pc236_pci_boards); i++) - if (is_pci_board(&pc236_pci_boards[i]) && - pci_dev->device == pc236_pci_boards[i].devid) + if (pci_dev->device == pc236_pci_boards[i].devid) return &pc236_pci_boards[i]; return NULL; } @@ -349,30 +348,21 @@ static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) { - const struct pc236_board *thisboard = comedi_board(dev); struct pc236_private *devpriv; int ret; + if (!DO_ISA) + return -EINVAL; + devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) return -ENOMEM; - /* Process options according to bus type. */ - if (is_isa_board(thisboard)) { - ret = comedi_request_region(dev, it->options[0], 0x4); - if (ret) - return ret; - - return pc236_common_attach(dev, dev->iobase, it->options[1], 0); - } else if (is_pci_board(thisboard)) { - dev_err(dev->class_dev, - "Manual configuration of PCI board '%s' is not supported\n", - thisboard->name); - return -EIO; - } + ret = comedi_request_region(dev, it->options[0], 0x4); + if (ret) + return ret; - dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); - return -EINVAL; + return pc236_common_attach(dev, dev->iobase, it->options[1], 0); } static int pc236_auto_attach(struct comedi_device *dev, -- cgit From b4eafd11351d90a652657cc2a12728c51000d5e3 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:56 +0100 Subject: staging: comedi: amplc_pc236: Simplify PCI board look-up Since only a single PCI board is supported by the driver, there is no need to call `pc236_find_pci_board()` to find the a board entry with matching PCI device ID in `pc236_pci_boards[]`. Just point to the entry directly and remove the look-up function. In fact, there is no reason for `pc236_pci_boards[]` to be an array, so change it to a non-array variable and rename it to `pc236_pci_board`. Also, the `devid` member of `struct pc236_board` is no longer needed as it was only used by the look-up function, so remove it. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 29 ++++------------------------ 1 file changed, 4 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 51c22f9a9af1..1aae066f6160 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -85,7 +85,6 @@ enum pc236_bustype { isa_bustype, pci_bustype }; struct pc236_board { const char *name; - unsigned short devid; enum pc236_bustype bustype; }; @@ -96,12 +95,9 @@ static const struct pc236_board pc236_isa_boards[] = { }, }; -static const struct pc236_board pc236_pci_boards[] = { - { - .name = "pci236", - .devid = PCI_DEVICE_ID_AMPLICON_PCI236, - .bustype = pci_bustype, - }, +static const struct pc236_board pc236_pci_board = { + .name = "pci236", + .bustype = pci_bustype, }; struct pc236_private { @@ -121,19 +117,6 @@ static inline bool is_pci_board(const struct pc236_board *board) return DO_PCI && board->bustype == pci_bustype; } -/* - * This function looks for a board matching the supplied PCI device. - */ -static const struct pc236_board *pc236_find_pci_board(struct pci_dev *pci_dev) -{ - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(pc236_pci_boards); i++) - if (pci_dev->device == pc236_pci_boards[i].devid) - return &pc236_pci_boards[i]; - return NULL; -} - /* * This function is called to mark the interrupt as disabled (no command * configured on subdevice 1) and to physically disable the interrupt @@ -382,11 +365,7 @@ static int pc236_auto_attach(struct comedi_device *dev, if (!devpriv) return -ENOMEM; - dev->board_ptr = pc236_find_pci_board(pci_dev); - if (dev->board_ptr == NULL) { - dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); - return -EINVAL; - } + dev->board_ptr = &pc236_pci_board; ret = comedi_pci_enable(dev); if (ret) return ret; -- cgit From 62b5e46322f1655639ae749f7f1dda1a6a5eb932 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:57 +0100 Subject: staging: comedi: amplc_pc236: remove PCI device ID macros The `PCI_DEVICE_ID_AMPLICON_PCI236` macro is only used once, in the module device table, so remove it and expand the macro in the table. `The `PCI_DEVICE_ID_INVALID` macro is no longer used, so remove it. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 1aae066f6160..1a7fa45d3a7a 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -57,10 +57,6 @@ #define DO_ISA IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_ISA) #define DO_PCI IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) -/* PCI236 PCI configuration register information */ -#define PCI_DEVICE_ID_AMPLICON_PCI236 0x0009 -#define PCI_DEVICE_ID_INVALID 0xffff - /* PC36AT / PCI236 registers */ /* Disable, and clear, interrupts */ @@ -407,8 +403,8 @@ static struct comedi_driver amplc_pc236_driver = { #if DO_PCI static const struct pci_device_id pc236_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, PCI_DEVICE_ID_AMPLICON_PCI236) }, - {0} + { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x0009) }, + { 0 } }; MODULE_DEVICE_TABLE(pci, pc236_pci_table); -- cgit From 982e2bc4873415a6f94e9eab867679b358791a38 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 10:04:58 +0100 Subject: staging: comedi: amplc_pc236: set board_name before common attach For PCI boards, the `auto_attach` handler, `pc236_auto_attach()`, initializes `dev->board_ptr` to point to a `struct pc236_board`, but leaves `dev->board_name` unchanged. The Comedi core will have initialized `dev->board_name` to the `driver_name` string member of `amplc_pc236_driver`. For consistency with ISA boards manually configured by the `COMEDI_DEVCONFIG` ioctl via the legacy `attach` handler, `pc236_attach()`, set `dev->board_name` to the `name` member of the `struct pc236_board` pointed to by `dev->board_ptr`. Both `pc236_attach()` and `pc236_auto_attach()` call `pc236_common_attach()`, which also sets `dev->board_name` to the `name` member of the `struct pc236_board`. Since this assignment no longer changes anything, remove it. A nice side-effect of this change is that the same owner name string is used for requesting I/O regions (before the call the `pc236_common_attach()`) as is used for requesting the IRQ handler (during the call to `pc236_common_attach()`). It was already the same for (manually configured) ISA boards, but is now the same for (automatically configured) PCI boards. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 1a7fa45d3a7a..b92fc6f2850b 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -284,11 +284,9 @@ static irqreturn_t pc236_interrupt(int irq, void *d) static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, unsigned int irq, unsigned long req_irq_flags) { - const struct pc236_board *thisboard = comedi_board(dev); struct comedi_subdevice *s; int ret; - dev->board_name = thisboard->name; dev->iobase = iobase; ret = comedi_alloc_subdevices(dev, 2); @@ -362,6 +360,7 @@ static int pc236_auto_attach(struct comedi_device *dev, return -ENOMEM; dev->board_ptr = &pc236_pci_board; + dev->board_name = pc236_pci_board.name; ret = comedi_pci_enable(dev); if (ret) return ret; -- cgit From 2f3b9d394d748b11763a63fe6e7305c2db76592c Mon Sep 17 00:00:00 2001 From: Sudip Mukherjee Date: Fri, 25 Jul 2014 20:05:37 +0530 Subject: staging: bcm: DDRInit.c: fixed coding style: lines over 80 char Signed-off-by: Sudip Mukherjee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/DDRInit.c | 59 ++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c index 4564f4080e92..4226c931cd45 100644 --- a/drivers/staging/bcm/DDRInit.c +++ b/drivers/staging/bcm/DDRInit.c @@ -7,7 +7,8 @@ /* DDR INIT-133Mhz */ #define T3_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 12 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3_DDRSetting133MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3_DDRSetting133MHz[] = { + /* DPLL Clock Setting */ {0x0F000800, 0x00007212}, {0x0f000820, 0x07F13FFF}, {0x0f000810, 0x00000F95}, @@ -65,7 +66,8 @@ static struct bcm_ddr_setting asT3_DDRSetting133MHz[] = { /* DPLL Clock Setting }; /* 80Mhz */ #define T3_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 10 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3_DDRSetting80MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3_DDRSetting80MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00000F95}, {0x0f000820, 0x07f1ffff}, {0x0f000860, 0x00000000}, @@ -117,7 +119,8 @@ static struct bcm_ddr_setting asT3_DDRSetting80MHz[] = { /* DPLL Clock Setting }; /* 100Mhz */ #define T3_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 13 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3_DDRSetting100MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3_DDRSetting100MHz[] = { + /* DPLL Clock Setting */ {0x0F000800, 0x00007008}, {0x0f000810, 0x00000F95}, {0x0f000820, 0x07F13E3F}, @@ -189,7 +192,8 @@ static struct bcm_ddr_setting asDPLL_266MHZ[] = { }; #define T3B_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 11 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3B_DDRSetting133MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3B_DDRSetting133MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00000F95}, {0x0f000810, 0x00000F95}, {0x0f000810, 0x00000F95}, @@ -247,7 +251,8 @@ static struct bcm_ddr_setting asT3B_DDRSetting133MHz[] = { /* DPLL Clock Settin }; #define T3B_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 9 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3B_DDRSetting80MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3B_DDRSetting80MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00000F95}, {0x0f000820, 0x07F13FFF}, {0x0f000840, 0x0FFF1F00}, @@ -301,7 +306,8 @@ static struct bcm_ddr_setting asT3B_DDRSetting80MHz[] = { /* DPLL Clock Setting /* 100Mhz */ #define T3B_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 9 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3B_DDRSetting100MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3B_DDRSetting100MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00000F95}, {0x0f000820, 0x07F1369B}, {0x0f000840, 0x0FFF0800}, @@ -356,7 +362,8 @@ static struct bcm_ddr_setting asT3B_DDRSetting100MHz[] = { /* DPLL Clock Settin #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 9 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LP_DDRSetting133MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LP_DDRSetting133MHz[] = { + /* DPLL Clock Setting */ {0x0f000820, 0x03F1365B}, {0x0f000810, 0x00002F95}, {0x0f000880, 0x000003DD}, @@ -416,7 +423,8 @@ static struct bcm_ddr_setting asT3LP_DDRSetting133MHz[] = { /* DPLL Clock Setti }; #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 11 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LP_DDRSetting100MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LP_DDRSetting100MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00002F95}, {0x0f000820, 0x03F1369B}, {0x0f000840, 0x0fff0000}, @@ -476,7 +484,8 @@ static struct bcm_ddr_setting asT3LP_DDRSetting100MHz[] = { /* DPLL Clock Setti }; #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 9 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LP_DDRSetting80MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LP_DDRSetting80MHz[] = { + /* DPLL Clock Setting */ {0x0f000820, 0x07F13FFF}, {0x0f000810, 0x00002F95}, {0x0f000860, 0x00000000}, @@ -536,7 +545,8 @@ static struct bcm_ddr_setting asT3LP_DDRSetting80MHz[] = { /* DPLL Clock Settin /* T3 LP-B (UMA-B) */ #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_160MHZ 7 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LPB_DDRSetting160MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LPB_DDRSetting160MHz[] = { + /* DPLL Clock Setting */ {0x0f000820, 0x03F137DB}, {0x0f000810, 0x01842795}, {0x0f000860, 0x00000000}, @@ -544,7 +554,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting160MHz[] = { /* DPLL Clock Sett {0x0f000840, 0x0FFF0400}, {0x0F00a044, 0x1fffffff}, {0x0F00a040, 0x1f000000}, - {0x0f003050, 0x00000021}, /* this is flash/eeprom clock divisor which set the flash clock to 20 MHz */ + {0x0f003050, 0x00000021}, /* this is flash/eeprom clock divisor which + * set the flash clock to 20 MHz */ {0x0F00a084, 0x1Cffffff}, /* Now dump from her in internal memory */ {0x0F00a080, 0x1C000000}, {0x0F00A000, 0x00000016}, @@ -593,7 +604,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting160MHz[] = { /* DPLL Clock Sett #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 7 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LPB_DDRSetting133MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LPB_DDRSetting133MHz[] = { + /* DPLL Clock Setting */ {0x0f000820, 0x03F1365B}, {0x0f000810, 0x00002F95}, {0x0f000880, 0x000003DD}, @@ -602,7 +614,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting133MHz[] = { /* DPLL Clock Sett {0x0f000860, 0x00000000}, {0x0F00a044, 0x1fffffff}, {0x0F00a040, 0x1f000000}, - {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor which set the flash clock to 20 MHz */ + {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor which + * set the flash clock to 20 MHz */ {0x0F00a084, 0x1Cffffff}, /* dump from here in internal memory */ {0x0F00a080, 0x1C000000}, {0x0F00A000, 0x00000016}, @@ -654,7 +667,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting133MHz[] = { /* DPLL Clock Sett }; #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 8 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LPB_DDRSetting100MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LPB_DDRSetting100MHz[] = { + /* DPLL Clock Setting */ {0x0f000810, 0x00002F95}, {0x0f000820, 0x03F1369B}, {0x0f000840, 0x0fff0000}, @@ -664,7 +678,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting100MHz[] = { /* DPLL Clock Sett {0x0f000840, 0x0FFF0000}, {0x0F00a044, 0x1fffffff}, {0x0F00a040, 0x1f000000}, - {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor which set the flash clock to 20 MHz */ + {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor which + * set the flash clock to 20 MHz */ {0x0F00a084, 0x1Cffffff}, /* dump from here in internal memory */ {0x0F00a080, 0x1C000000}, /* Memcontroller Default values */ @@ -715,7 +730,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting100MHz[] = { /* DPLL Clock Sett }; #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 7 /* index for 0x0F007000 */ -static struct bcm_ddr_setting asT3LPB_DDRSetting80MHz[] = { /* DPLL Clock Setting */ +static struct bcm_ddr_setting asT3LPB_DDRSetting80MHz[] = { + /* DPLL Clock Setting */ {0x0f000820, 0x07F13FFF}, {0x0f000810, 0x00002F95}, {0x0f000860, 0x00000000}, @@ -723,7 +739,8 @@ static struct bcm_ddr_setting asT3LPB_DDRSetting80MHz[] = { /* DPLL Clock Setti {0x0f000840, 0x0FFF1F00}, {0x0F00a044, 0x1fffffff}, {0x0F00a040, 0x1f000000}, - {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor which set the flash clock to 20 MHz */ + {0x0f003050, 0x00000021}, /* flash/eeprom clock divisor + * which set the flash clock to 20 MHz */ {0x0F00a084, 0x1Cffffff}, /* dump from here in internal memory */ {0x0F00a080, 0x1C000000}, {0x0F00A000, 0x00000016}, @@ -914,7 +931,8 @@ int ddr_init(struct bcm_mini_adapter *Adapter) break; case DDR_133_MHZ: - if (Adapter->bDPLLConfig == PLL_266_MHZ) { /* 266Mhz PLL selected. */ + /* 266Mhz PLL selected. */ + if (Adapter->bDPLLConfig == PLL_266_MHZ) { memcpy(asT3B_DDRSetting133MHz, asDPLL_266MHZ, sizeof(asDPLL_266MHZ)); psDDRSetting = asT3B_DDRSetting133MHz; @@ -1018,8 +1036,9 @@ int ddr_init(struct bcm_mini_adapter *Adapter) /* DC/DC standby change... * This is to be done only for Hybrid PMU mode. * with the current h/w there is no way to detect this. - * and since we dont have internal PMU lets do it under UMA-B chip id. - * we will change this when we will have internal PMU. + * and since we dont have internal PMU lets do it under + * UMA-B chip id. we will change this when we will have + * internal PMU. */ if (Adapter->PmuMode == HYBRID_MODE_7C) { retval = rdmalt(Adapter, (UINT)0x0f000c00, -- cgit From 7745bd68282e0ff03953836228d866414172ddba Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 18:34:23 +0300 Subject: Staging: vt6655: remove redundant comments from card.h Removed redundant comments from card.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/card.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 2ab46f368030..2f1a05ef44a1 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -32,7 +32,6 @@ #include "ttype.h" #include -/*--------------------- Export Definitions -------------------------*/ // // Loopback mode // @@ -48,7 +47,7 @@ #define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us #define CB_MAX_CHANNEL_24G 14 -#define CB_MAX_CHANNEL_5G 42 //[20050104] add channel9(5045MHz), 41==>42 +#define CB_MAX_CHANNEL_5G 42 #define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G+CB_MAX_CHANNEL_5G) typedef enum _CARD_PHY_TYPE { @@ -78,12 +77,6 @@ typedef enum _CARD_OP_MODE { OP_MODE_UNKNOWN } CARD_OP_MODE, *PCARD_OP_MODE; -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - void CARDvSetRSPINF(void *pDeviceHandler, CARD_PHY_TYPE ePHYType); void vUpdateIFS(void *pDeviceHandler); void CARDvUpdateBasicTopRate(void *pDeviceHandler); @@ -101,7 +94,6 @@ unsigned char CARDbyGetPktType(void *pDeviceHandler); void CARDvSafeResetTx(void *pDeviceHandler); void CARDvSafeResetRx(void *pDeviceHandler); -//xxx bool CARDbRadioPowerOff(void *pDeviceHandler); bool CARDbRadioPowerOn(void *pDeviceHandler); bool CARDbIsShortPreamble(void *pDeviceHandler); -- cgit From 846a7f69ba8908e633ef08db086f87d136985169 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 18:47:53 +0300 Subject: Staging: vt6655: removed redundant comments from datarate.h Removed redundant comments from datarate.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/datarate.h | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/datarate.h b/drivers/staging/vt6655/datarate.h index e4fad05ad859..0509c4fd2a42 100644 --- a/drivers/staging/vt6655/datarate.h +++ b/drivers/staging/vt6655/datarate.h @@ -29,25 +29,15 @@ #ifndef __DATARATE_H__ #define __DATARATE_H__ -/*--------------------- Export Definitions -------------------------*/ - -#define FALLBACK_PKT_COLLECT_TR_H 50 // pkts -#define FALLBACK_PKT_COLLECT_TR_L 10 // pkts -#define FALLBACK_POLL_SECOND 5 // 5 sec -#define FALLBACK_RECOVER_SECOND 30 // 30 sec -#define FALLBACK_THRESHOLD 15 // percent -#define UPGRADE_THRESHOLD 5 // percent -#define UPGRADE_CNT_THRD 3 // times -#define RETRY_TIMES_THRD_H 2 // times -#define RETRY_TIMES_THRD_L 1 // times - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ +#define FALLBACK_PKT_COLLECT_TR_H 50 +#define FALLBACK_PKT_COLLECT_TR_L 10 +#define FALLBACK_POLL_SECOND 5 +#define FALLBACK_RECOVER_SECOND 30 +#define FALLBACK_THRESHOLD 15 +#define UPGRADE_THRESHOLD 5 +#define UPGRADE_CNT_THRD 3 +#define RETRY_TIMES_THRD_H 2 +#define RETRY_TIMES_THRD_L 1 void RATEvParseMaxRate( -- cgit From 17db00af8e33b05f6e23c848b1e89de56323e0bd Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 18:43:22 +0300 Subject: Staging: vt6655: removed redundant comments from country.h Removed redundant comments from country.h header file Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/country.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/country.h b/drivers/staging/vt6655/country.h index 415e7672aa32..2365fb13b033 100644 --- a/drivers/staging/vt6655/country.h +++ b/drivers/staging/vt6655/country.h @@ -32,7 +32,6 @@ #include "ttype.h" -/*--------------------- Export Definitions -------------------------*/ /************************************************************************ * The definition here should be complied with the INF country order * Please check with VNWL.inf/VNWL64.inf/VNWL*.inf -- cgit From 85a97db4fa95fb3814930812442f4bf1cdc63ec7 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 18:39:36 +0300 Subject: Staging: vt6655: removed redundant comments from channel.h Removed redundant comments from channel.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/channel.h | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/channel.h b/drivers/staging/vt6655/channel.h index c9931d7f6653..4f44c8a3d3cf 100644 --- a/drivers/staging/vt6655/channel.h +++ b/drivers/staging/vt6655/channel.h @@ -26,8 +26,6 @@ #include "ttype.h" #include "card.h" -/*--------------------- Export Classes ----------------------------*/ - typedef struct tagSChannelTblElement { unsigned char byChannelNumber; unsigned int uFrequency; @@ -35,8 +33,6 @@ typedef struct tagSChannelTblElement { unsigned char byMAP; } SChannelTblElement, *PSChannelTblElement; -/*--------------------- Export Functions --------------------------*/ - bool is_channel_valid(unsigned int CountryCode); void init_channel_table(void *pDeviceHandler); unsigned char get_channel_mapping(void *pDeviceHandler, unsigned char byChannelNumber, CARD_PHY_TYPE ePhyType); -- cgit From 795a8f9aa5921e92d7ac4d20c066976472c7cef4 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:05:31 +0300 Subject: Staging: vt6655: removed redundant comments from desc.h Removed redundant comments from desc.h header file. Signed-off-by: Igor Bezukh C99 style comments will be fixed in further patches. Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/desc.h | 185 ++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 98 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/desc.h b/drivers/staging/vt6655/desc.h index c620cbfbaadf..05efa4e1b682 100644 --- a/drivers/staging/vt6655/desc.h +++ b/drivers/staging/vt6655/desc.h @@ -36,79 +36,77 @@ #include "ttype.h" #include "tether.h" -/*--------------------- Export Definitions -------------------------*/ - -#define B_OWNED_BY_CHIP 1 // -#define B_OWNED_BY_HOST 0 // +#define B_OWNED_BY_CHIP 1 +#define B_OWNED_BY_HOST 0 // // Bits in the RSR register // -#define RSR_ADDRBROAD 0x80 // 1000 0000 -#define RSR_ADDRMULTI 0x40 // 0100 0000 -#define RSR_ADDRUNI 0x00 // 0000 0000 -#define RSR_IVLDTYP 0x20 // 0010 0000 , invalid packet type -#define RSR_IVLDLEN 0x10 // 0001 0000 , invalid len (> 2312 byte) -#define RSR_BSSIDOK 0x08 // 0000 1000 -#define RSR_CRCOK 0x04 // 0000 0100 -#define RSR_BCNSSIDOK 0x02 // 0000 0010 -#define RSR_ADDROK 0x01 // 0000 0001 +#define RSR_ADDRBROAD 0x80 +#define RSR_ADDRMULTI 0x40 +#define RSR_ADDRUNI 0x00 +#define RSR_IVLDTYP 0x20 +#define RSR_IVLDLEN 0x10 // invalid len (> 2312 byte) +#define RSR_BSSIDOK 0x08 +#define RSR_CRCOK 0x04 +#define RSR_BCNSSIDOK 0x02 +#define RSR_ADDROK 0x01 // // Bits in the new RSR register // -#define NEWRSR_DECRYPTOK 0x10 // 0001 0000 -#define NEWRSR_CFPIND 0x08 // 0000 1000 -#define NEWRSR_HWUTSF 0x04 // 0000 0100 -#define NEWRSR_BCNHITAID 0x02 // 0000 0010 -#define NEWRSR_BCNHITAID0 0x01 // 0000 0001 +#define NEWRSR_DECRYPTOK 0x10 +#define NEWRSR_CFPIND 0x08 +#define NEWRSR_HWUTSF 0x04 +#define NEWRSR_BCNHITAID 0x02 +#define NEWRSR_BCNHITAID0 0x01 // // Bits in the TSR0 register // -#define TSR0_PWRSTS1_2 0xC0 // 1100 0000 -#define TSR0_PWRSTS7 0x20 // 0010 0000 -#define TSR0_NCR 0x1F // 0001 1111 +#define TSR0_PWRSTS1_2 0xC0 +#define TSR0_PWRSTS7 0x20 +#define TSR0_NCR 0x1F // // Bits in the TSR1 register // -#define TSR1_TERR 0x80 // 1000 0000 -#define TSR1_PWRSTS4_6 0x70 // 0111 0000 -#define TSR1_RETRYTMO 0x08 // 0000 1000 -#define TSR1_TMO 0x04 // 0000 0100 -#define TSR1_PWRSTS3 0x02 // 0000 0010 -#define ACK_DATA 0x01 // 0000 0000 +#define TSR1_TERR 0x80 +#define TSR1_PWRSTS4_6 0x70 +#define TSR1_RETRYTMO 0x08 +#define TSR1_TMO 0x04 +#define TSR1_PWRSTS3 0x02 +#define ACK_DATA 0x01 // // Bits in the TCR register // -#define EDMSDU 0x04 // 0000 0100 end of sdu -#define TCR_EDP 0x02 // 0000 0010 end of packet -#define TCR_STP 0x01 // 0000 0001 start of packet +#define EDMSDU 0x04 // end of sdu +#define TCR_EDP 0x02 // end of packet +#define TCR_STP 0x01 // start of packet // max transmit or receive buffer size -#define CB_MAX_BUF_SIZE 2900U // max buffer size +#define CB_MAX_BUF_SIZE 2900U // NOTE: must be multiple of 4 -#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE // max Tx buffer size -#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE // max Rx buffer size when not use Multi-RD +#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE +#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE -#define CB_BEACON_BUF_SIZE 512U // default beacon buffer size +#define CB_BEACON_BUF_SIZE 512U -#define CB_MAX_RX_DESC 128 // max # of descriptor -#define CB_MIN_RX_DESC 16 // min # of rx descriptor -#define CB_MAX_TX_DESC 64 // max # of descriptor -#define CB_MIN_TX_DESC 16 // min # of tx descriptor +#define CB_MAX_RX_DESC 128 +#define CB_MIN_RX_DESC 16 +#define CB_MAX_TX_DESC 64 +#define CB_MIN_TX_DESC 16 -#define CB_MAX_RECEIVED_PACKETS 16 // max # of received packets at one time +#define CB_MAX_RECEIVED_PACKETS 16 // limit our receive routine to indicating // this many at a time for 2 reasons: // 1. driver flow control to protocol layer // 2. limit the time used in ISR routine -#define CB_EXTRA_RD_NUM 32 // default # of Extra RD -#define CB_RD_NUM 32 // default # of RD -#define CB_TD_NUM 32 // default # of TD +#define CB_EXTRA_RD_NUM 32 +#define CB_RD_NUM 32 +#define CB_TD_NUM 32 // max number of physical segments // in a single NDIS packet. Above this threshold, the packet @@ -128,61 +126,61 @@ #ifdef __BIG_ENDIAN // WMAC definition FIFO Control -#define FIFOCTL_AUTO_FB_1 0x0010 // 0001 0000 0000 0000 -#define FIFOCTL_AUTO_FB_0 0x0008 // 0000 1000 0000 0000 -#define FIFOCTL_GRPACK 0x0004 // 0000 0100 0000 0000 -#define FIFOCTL_11GA 0x0003 // 0000 0011 0000 0000 -#define FIFOCTL_11GB 0x0002 // 0000 0010 0000 0000 -#define FIFOCTL_11B 0x0001 // 0000 0001 0000 0000 -#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000 -#define FIFOCTL_RTS 0x8000 // 0000 0000 1000 0000 -#define FIFOCTL_ISDMA0 0x4000 // 0000 0000 0100 0000 -#define FIFOCTL_GENINT 0x2000 // 0000 0000 0010 0000 -#define FIFOCTL_TMOEN 0x1000 // 0000 0000 0001 0000 -#define FIFOCTL_LRETRY 0x0800 // 0000 0000 0000 1000 -#define FIFOCTL_CRCDIS 0x0400 // 0000 0000 0000 0100 -#define FIFOCTL_NEEDACK 0x0200 // 0000 0000 0000 0010 -#define FIFOCTL_LHEAD 0x0100 // 0000 0000 0000 0001 +#define FIFOCTL_AUTO_FB_1 0x0010 +#define FIFOCTL_AUTO_FB_0 0x0008 +#define FIFOCTL_GRPACK 0x0004 +#define FIFOCTL_11GA 0x0003 +#define FIFOCTL_11GB 0x0002 +#define FIFOCTL_11B 0x0001 +#define FIFOCTL_11A 0x0000 +#define FIFOCTL_RTS 0x8000 +#define FIFOCTL_ISDMA0 0x4000 +#define FIFOCTL_GENINT 0x2000 +#define FIFOCTL_TMOEN 0x1000 +#define FIFOCTL_LRETRY 0x0800 +#define FIFOCTL_CRCDIS 0x0400 +#define FIFOCTL_NEEDACK 0x0200 +#define FIFOCTL_LHEAD 0x0100 //WMAC definition Frag Control -#define FRAGCTL_AES 0x0003 // 0000 0011 0000 0000 -#define FRAGCTL_TKIP 0x0002 // 0000 0010 0000 0000 -#define FRAGCTL_LEGACY 0x0001 // 0000 0001 0000 0000 -#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000 -#define FRAGCTL_ENDFRAG 0x0300 // 0000 0000 0000 0011 -#define FRAGCTL_MIDFRAG 0x0200 // 0000 0000 0000 0010 -#define FRAGCTL_STAFRAG 0x0100 // 0000 0000 0000 0001 -#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000 +#define FRAGCTL_AES 0x0003 +#define FRAGCTL_TKIP 0x0002 +#define FRAGCTL_LEGACY 0x0001 +#define FRAGCTL_NONENCRYPT 0x0000 +#define FRAGCTL_ENDFRAG 0x0300 +#define FRAGCTL_MIDFRAG 0x0200 +#define FRAGCTL_STAFRAG 0x0100 +#define FRAGCTL_NONFRAG 0x0000 #else -#define FIFOCTL_AUTO_FB_1 0x1000 // 0001 0000 0000 0000 -#define FIFOCTL_AUTO_FB_0 0x0800 // 0000 1000 0000 0000 -#define FIFOCTL_GRPACK 0x0400 // 0000 0100 0000 0000 -#define FIFOCTL_11GA 0x0300 // 0000 0011 0000 0000 -#define FIFOCTL_11GB 0x0200 // 0000 0010 0000 0000 -#define FIFOCTL_11B 0x0100 // 0000 0001 0000 0000 -#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000 -#define FIFOCTL_RTS 0x0080 // 0000 0000 1000 0000 -#define FIFOCTL_ISDMA0 0x0040 // 0000 0000 0100 0000 -#define FIFOCTL_GENINT 0x0020 // 0000 0000 0010 0000 -#define FIFOCTL_TMOEN 0x0010 // 0000 0000 0001 0000 -#define FIFOCTL_LRETRY 0x0008 // 0000 0000 0000 1000 -#define FIFOCTL_CRCDIS 0x0004 // 0000 0000 0000 0100 -#define FIFOCTL_NEEDACK 0x0002 // 0000 0000 0000 0010 -#define FIFOCTL_LHEAD 0x0001 // 0000 0000 0000 0001 +#define FIFOCTL_AUTO_FB_1 0x1000 +#define FIFOCTL_AUTO_FB_0 0x0800 +#define FIFOCTL_GRPACK 0x0400 +#define FIFOCTL_11GA 0x0300 +#define FIFOCTL_11GB 0x0200 +#define FIFOCTL_11B 0x0100 +#define FIFOCTL_11A 0x0000 +#define FIFOCTL_RTS 0x0080 +#define FIFOCTL_ISDMA0 0x0040 +#define FIFOCTL_GENINT 0x0020 +#define FIFOCTL_TMOEN 0x0010 +#define FIFOCTL_LRETRY 0x0008 +#define FIFOCTL_CRCDIS 0x0004 +#define FIFOCTL_NEEDACK 0x0002 +#define FIFOCTL_LHEAD 0x0001 //WMAC definition Frag Control -#define FRAGCTL_AES 0x0300 // 0000 0011 0000 0000 -#define FRAGCTL_TKIP 0x0200 // 0000 0010 0000 0000 -#define FRAGCTL_LEGACY 0x0100 // 0000 0001 0000 0000 -#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000 -#define FRAGCTL_ENDFRAG 0x0003 // 0000 0000 0000 0011 -#define FRAGCTL_MIDFRAG 0x0002 // 0000 0000 0000 0010 -#define FRAGCTL_STAFRAG 0x0001 // 0000 0000 0000 0001 -#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000 +#define FRAGCTL_AES 0x0300 +#define FRAGCTL_TKIP 0x0200 +#define FRAGCTL_LEGACY 0x0100 +#define FRAGCTL_NONENCRYPT 0x0000 +#define FRAGCTL_ENDFRAG 0x0003 +#define FRAGCTL_MIDFRAG 0x0002 +#define FRAGCTL_STAFRAG 0x0001 +#define FRAGCTL_NONFRAG 0x0000 -#endif // #ifdef __BIG_ENDIAN +#endif #define TYPE_TXDMA0 0 #define TYPE_AC0DMA 1 @@ -201,8 +199,6 @@ #define TD_FLAGS_PRIV_SKB 0x02 // check if called from private skb(hostap) #define TD_FLAGS_PS_RETRY 0x04 // check if PS STA frame re-transmit -/*--------------------- Export Types ------------------------------*/ - // ref_sk_buff is used for mapping the skb structure between pre-built driver-obj & running kernel. // Since different kernel version (2.4x) may change skb structure, i.e. pre-built driver-obj // may link to older skb that leads error. @@ -590,12 +586,5 @@ typedef struct tagSKeyEntry { u32 dwKey4[4]; } __attribute__ ((__packed__)) SKeyEntry; -/*--------------------- Export Macros ------------------------------*/ - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ #endif // __DESC_H__ -- cgit From aee4821c26e001d532d5390c9591ef3cc2c8e26b Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:10:36 +0300 Subject: Staging: vt6655: removed redundant comments from device_cfg.h Removed redundant comments from device_cfg.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_cfg.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_cfg.h b/drivers/staging/vt6655/device_cfg.h index af2892496d0c..8e50e538076f 100644 --- a/drivers/staging/vt6655/device_cfg.h +++ b/drivers/staging/vt6655/device_cfg.h @@ -27,7 +27,6 @@ #ifndef __DEVICE_CONFIG_H #define __DEVICE_CONFIG_H -//#include #include #include "ttype.h" @@ -60,14 +59,12 @@ struct _version { #define DEVICE_VERSION "1.19.12" #endif -//config file #include #include #ifndef CONFIG_PATH #define CONFIG_PATH "/etc/vntconfiguration.dat" #endif -//Max: 2378=2312Payload + 30HD +4CRC + 2Padding + 4Len + 8TSF + 4RSR #define PKT_BUF_SZ 2390 #define MAX_UINTS 8 -- cgit From 1d2a404edb5613ef4cb70b3d4b2263a199ae1722 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:20:50 +0300 Subject: Staging: vt6655: removed redundant comments from dpc.h Removed redundant comments from dpc.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/dpc.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/dpc.h b/drivers/staging/vt6655/dpc.h index 0ce31557d5da..0c7e0e796ce3 100644 --- a/drivers/staging/vt6655/dpc.h +++ b/drivers/staging/vt6655/dpc.h @@ -33,14 +33,6 @@ #include "device.h" #include "wcmd.h" -/*--------------------- Export Definitions -------------------------*/ - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - bool device_receive_frame( PSDevice pDevice, -- cgit From 2c62064105c2a6ddbc8e16f45f2c7e01f2a03ca0 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:22:35 +0300 Subject: Staging: vt6655: removed redundant comments from hostap.h Removed redundant comments from hostap.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/hostap.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/hostap.h b/drivers/staging/vt6655/hostap.h index f1a4f2eff058..6e801a428183 100644 --- a/drivers/staging/vt6655/hostap.h +++ b/drivers/staging/vt6655/hostap.h @@ -31,8 +31,6 @@ #include "device.h" -/*--------------------- Export Definitions -------------------------*/ - #define WLAN_RATE_1M BIT0 #define WLAN_RATE_2M BIT1 #define WLAN_RATE_5M5 BIT2 @@ -46,12 +44,6 @@ #define WLAN_RATE_48M BIT10 #define WLAN_RATE_54M BIT11 -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - #ifndef ETH_P_PAE #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ #endif /* ETH_P_PAE */ -- cgit From e5851cf64ed2219e776bffda233f1c7f38c98e9b Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:26:14 +0300 Subject: Staging: vt6655: removed redundant comments from IEEE11h.h Removed redundant comments from IEEE11h.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/IEEE11h.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/IEEE11h.h b/drivers/staging/vt6655/IEEE11h.h index 8819fa1563b7..551922022b19 100644 --- a/drivers/staging/vt6655/IEEE11h.h +++ b/drivers/staging/vt6655/IEEE11h.h @@ -35,16 +35,6 @@ #include "80211hdr.h" #include "80211mgr.h" -/*--------------------- Export Definitions -------------------------*/ - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - bool IEEE11hbMSRRepTx( void *pMgmtHandle ); -- cgit From d681012df59065fdd64d5938421a2eac7707397b Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:29:28 +0300 Subject: Staging: vt6655: removed redundant comments from iocmd.h Removed redundant comments from iocmd.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iocmd.h | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iocmd.h b/drivers/staging/vt6655/iocmd.h index e499f1b6f531..ae037ec5b366 100644 --- a/drivers/staging/vt6655/iocmd.h +++ b/drivers/staging/vt6655/iocmd.h @@ -31,12 +31,6 @@ #include "ttype.h" -/*--------------------- Export Definitions -------------------------*/ - -//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) @@ -167,10 +161,6 @@ typedef struct tagSBSSIDItem { u32 uChannel; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 1]; - //2006-1116-01, by NomadZhao - //u16 wBeaconInterval; - //u16 wCapInfo; - //u8 byNetType; u8 byNetType; u16 wBeaconInterval; u16 wCapInfo; // for address of byNetType at align 4 @@ -228,9 +218,8 @@ typedef struct tagSStatMIBCount { u32 dwIsrUnrecoverableError; u32 dwIsrSoftInterrupt; u32 dwIsrRxNoBuf; - ///////////////////////////////////// - u32 dwIsrUnknown; // unknown interrupt count + u32 dwIsrUnknown; // RSR status count // @@ -349,7 +338,6 @@ typedef struct tagSCmdValue { // hostapd & viawget ioctl related // -// VIAGWET_IOCTL_HOSTAPD ioctl() cmd: enum { VIAWGET_HOSTAPD_FLUSH = 1, VIAWGET_HOSTAPD_ADD_STA = 2, @@ -415,15 +403,6 @@ struct viawget_hostapd_param { } u; }; -//2006-1116-01, by NomadZhao #pragma pack() -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - #endif //__IOCMD_H__ -- cgit From efcd24445dce841771095c6266d8a74a02c0e2a6 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:31:26 +0300 Subject: Staging: vt6655: removed redundant comments from ioctl.h Removed redundant comments from ioctl.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/ioctl.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/ioctl.h b/drivers/staging/vt6655/ioctl.h index 2f0db920e2cb..187fc915fd12 100644 --- a/drivers/staging/vt6655/ioctl.h +++ b/drivers/staging/vt6655/ioctl.h @@ -31,14 +31,6 @@ #include "device.h" -/*--------------------- Export Definitions -------------------------*/ - -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - int private_ioctl(PSDevice pDevice, struct ifreq *rq); #endif // __IOCTL_H__ -- cgit From 2cb9fa51514290a49078b631846be0d1ed4d60c6 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:33:04 +0300 Subject: Staging: vt6655: removed redundant comments from iowpa.h Removed redundant comments from iowpa.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iowpa.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iowpa.h b/drivers/staging/vt6655/iowpa.h index b7bd1909fa7c..772bc4c2a7b9 100644 --- a/drivers/staging/vt6655/iowpa.h +++ b/drivers/staging/vt6655/iowpa.h @@ -29,8 +29,6 @@ #ifndef __IOWPA_H__ #define __IOWPA_H__ -/*--------------------- Export Definitions -------------------------*/ - #define WPA_IE_LEN 64 //WPA related @@ -127,14 +125,6 @@ struct viawget_scan_result { int maxrate; }; -//2006-1116-01, by NomadZhao #pragma pack() -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ #endif //__IOWPA_H__ -- cgit From b218c00830ec49474b164239ca64d120c4a727a6 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:48:48 +0300 Subject: Staging: vt6655: removed redundant comments from mib.h Removed redundant comments from mib.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/mib.h | 45 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/mib.h b/drivers/staging/vt6655/mib.h index c0a59489184d..732bddaf5b91 100644 --- a/drivers/staging/vt6655/mib.h +++ b/drivers/staging/vt6655/mib.h @@ -33,13 +33,12 @@ #include "tether.h" #include "desc.h" -/*--------------------- Export Definitions -------------------------*/ // // 802.11 counter // typedef struct tagSDot11Counters { - unsigned long Length; // Length of structure + unsigned long Length; unsigned long long TransmittedFragmentCount; unsigned long long MulticastTransmittedFrameCount; unsigned long long FailedCount; @@ -68,8 +67,7 @@ typedef struct tagSDot11Counters { // typedef struct tagSMib2Counter { long ifIndex; - char ifDescr[256]; // max size 255 plus zero ending - // e.g. "interface 1" + char ifDescr[256]; long ifType; long ifMtu; unsigned long ifSpeed; @@ -93,12 +91,12 @@ typedef struct tagSMib2Counter { } SMib2Counter, *PSMib2Counter; // Value in the ifType entry -#define WIRELESSLANIEEE80211b 6 // +#define WIRELESSLANIEEE80211b 6 // Value in the ifAdminStatus/ifOperStatus entry -#define UP 1 // -#define DOWN 2 // -#define TESTING 3 // +#define UP 1 +#define DOWN 2 +#define TESTING 3 // // RMON counter @@ -182,7 +180,7 @@ typedef struct tagSISRCounters { unsigned long dwIsrMIBNearfull; unsigned long dwIsrRxNoBuf; - unsigned long dwIsrUnknown; // unknown interrupt count + unsigned long dwIsrUnknown; unsigned long dwIsrRx1OK; unsigned long dwIsrATIMTxOK; @@ -191,23 +189,18 @@ typedef struct tagSISRCounters { unsigned long dwIsrATIMEnd; unsigned long dwIsrSYNCFlushOK; unsigned long dwIsrSTIMER1Int; - ///////////////////////////////////// } SISRCounters, *PSISRCounters; // Value in the etherStatsStatus entry -#define VALID 1 // -#define CREATE_REQUEST 2 // -#define UNDER_CREATION 3 // -#define INVALID 4 // +#define VALID 1 +#define CREATE_REQUEST 2 +#define UNDER_CREATION 3 +#define INVALID 4 // // statistic counter // typedef struct tagSStatCounter { - // - // ISR status count - // - // RSR status count // unsigned long dwRsrFrmAlgnErr; @@ -306,24 +299,18 @@ typedef struct tagSStatCounter { #ifdef Calcu_LinkQual //Tx count: - unsigned long TxNoRetryOkCount; //success tx no retry ! - unsigned long TxRetryOkCount; //success tx but retry ! - unsigned long TxFailCount; //fail tx ? + unsigned long TxNoRetryOkCount; + unsigned long TxRetryOkCount; + unsigned long TxFailCount; //Rx count: - unsigned long RxOkCnt; //success rx ! - unsigned long RxFcsErrCnt; //fail rx ? + unsigned long RxOkCnt; + unsigned long RxFcsErrCnt; //statistic unsigned long SignalStren; unsigned long LinkQuality; #endif } SStatCounter, *PSStatCounter; -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - void STAvClearAllCounter(PSStatCounter pStatistic); void STAvUpdateIsrStatCounter(PSStatCounter pStatistic, unsigned long dwIsr); -- cgit From 6c324e518b63e89e7ea9fdd96e82de543dbef53f Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:50:25 +0300 Subject: Staging: vt6655: removed redundant comments from michael.h Removed redundant comments from michael.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/michael.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/michael.h b/drivers/staging/vt6655/michael.h index f6c2c15d9cb6..86cb140e3087 100644 --- a/drivers/staging/vt6655/michael.h +++ b/drivers/staging/vt6655/michael.h @@ -33,10 +33,6 @@ #include -/*--------------------- Export Definitions -------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - void MIC_vInit(u32 dwK0, u32 dwK1); void MIC_vUnInit(void); @@ -48,8 +44,6 @@ void MIC_vAppend(unsigned char *src, unsigned int nBytes); /* This also resets the message to empty. */ void MIC_vGetMIC(u32 *pdwL, u32 *pdwR); -/*--------------------- Export Macros ------------------------------*/ - /* Rotation functions on 32 bit values */ #define ROL32(A, n) \ (((A) << (n)) | (((A)>>(32-(n))) & ((1UL << (n)) - 1))) -- cgit From f56f473a3c65958af3a886c9cb757ae2033c7897 Mon Sep 17 00:00:00 2001 From: Igor Bezukh Date: Fri, 25 Jul 2014 19:53:12 +0300 Subject: Staging: vt6655: removed redundant comments from power.h Removed redundant comments from power.h header file. Signed-off-by: Igor Bezukh Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/power.h | 9 --------- 1 file changed, 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/power.h b/drivers/staging/vt6655/power.h index ce56124acf1b..936f171a6b19 100644 --- a/drivers/staging/vt6655/power.h +++ b/drivers/staging/vt6655/power.h @@ -29,19 +29,10 @@ #ifndef __POWER_H__ #define __POWER_H__ -/*--------------------- Export Definitions -------------------------*/ #define C_PWBT 1000 // micro sec. power up before TBTT #define PS_FAST_INTERVAL 1 // Fast power saving listen interval #define PS_MAX_INTERVAL 4 // MAX power saving listen interval -/*--------------------- Export Classes ----------------------------*/ - -/*--------------------- Export Variables --------------------------*/ - -/*--------------------- Export Types ------------------------------*/ - -/*--------------------- Export Functions --------------------------*/ - bool PSbConsiderPowerDown( void *hDeviceContext, -- cgit From 645b0314524b8017978fc43769a884bc95776b5a Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Sat, 26 Jul 2014 01:49:01 +0900 Subject: staging: dgnc: remove commented code This patch removes commented code in dgnc driver. CC: Lidza Louina CC: Mark Hounschell Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_cls.c | 5 +- drivers/staging/dgnc/dgnc_trace.c | 123 -------------------------------------- drivers/staging/dgnc/dgnc_trace.h | 10 ---- drivers/staging/dgnc/dgnc_tty.c | 18 ------ drivers/staging/dgnc/digi.h | 1 - 5 files changed, 1 insertion(+), 156 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_cls.c b/drivers/staging/dgnc/dgnc_cls.c index 8e265c20db59..4b65306b22ac 100644 --- a/drivers/staging/dgnc/dgnc_cls.c +++ b/drivers/staging/dgnc/dgnc_cls.c @@ -1046,10 +1046,7 @@ static void cls_flush_uart_read(struct channel_t *ch) * I believe this is a BUG in this UART. * So for now, we will leave the code #ifdef'ed out... */ -#if 0 - writeb((UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR), - &ch->ch_cls_uart->isr_fcr); -#endif + udelay(10); } diff --git a/drivers/staging/dgnc/dgnc_trace.c b/drivers/staging/dgnc/dgnc_trace.c index 2f62f2a43542..d76415431686 100644 --- a/drivers/staging/dgnc/dgnc_trace.c +++ b/drivers/staging/dgnc/dgnc_trace.c @@ -50,129 +50,6 @@ static int dgnc_trcbufi = 0; /* index of the tilde at the end of */ static DEFINE_SPINLOCK(dgnc_tracef_lock); #endif - -#if 0 - -#if !defined(TRC_TO_KMEM) && !defined(TRC_TO_CONSOLE) - -void dgnc_tracef(const char *fmt, ...) -{ - return; -} - -#else /* !defined(TRC_TO_KMEM) && !defined(TRC_TO_CONSOLE) */ - -void dgnc_tracef(const char *fmt, ...) -{ - va_list ap; - char buf[TRC_MAXMSG+1]; - size_t lenbuf; - int i; - static int failed = FALSE; -# if defined(TRC_TO_KMEM) - unsigned long flags; -#endif - - if (failed) - return; -# if defined(TRC_TO_KMEM) - DGNC_LOCK(dgnc_tracef_lock, flags); -#endif - - /* Format buf using fmt and arguments contained in ap. */ - va_start(ap, fmt); - i = vsprintf(buf, fmt, ap); - va_end(ap); - lenbuf = strlen(buf); - -# if defined(TRC_TO_KMEM) - { - static int initd = 0; - - /* - * Now, in addition to (or instead of) printing this stuff out - * (which is a buffered operation), also tuck it away into a - * corner of memory which can be examined post-crash in kdb. - */ - if (!initd) { - dgnc_trcbuf = (char *) vmalloc(dgnc_trcbuf_size); - if (!dgnc_trcbuf) { - failed = TRUE; - printk("dgnc: tracing init failed!\n"); - return; - } - - memset(dgnc_trcbuf, '\0', dgnc_trcbuf_size); - dgnc_trcbufi = 0; - initd++; - - printk("dgnc: tracing enabled - " TRC_DTRC - " 0x%lx 0x%x\n", - (unsigned long)dgnc_trcbuf, - dgnc_trcbuf_size); - } - -# if defined(TRC_ON_OVERFLOW_WRAP_AROUND) - /* - * This is the less CPU-intensive way to do things. We simply - * wrap around before we fall off the end of the buffer. A - * tilde (~) demarcates the current end of the trace. - * - * This method should be used if you are concerned about race - * conditions as it is less likely to affect the timing of - * things. - */ - - if (dgnc_trcbufi + lenbuf >= dgnc_trcbuf_size) { - /* We are wrapping, so wipe out the last tilde. */ - dgnc_trcbuf[dgnc_trcbufi] = '\0'; - /* put the new string at the beginning of the buffer */ - dgnc_trcbufi = 0; - } - - strcpy(&dgnc_trcbuf[dgnc_trcbufi], buf); - dgnc_trcbufi += lenbuf; - dgnc_trcbuf[dgnc_trcbufi] = '~'; - -# elif defined(TRC_ON_OVERFLOW_SHIFT_BUFFER) - /* - * This is the more CPU-intensive way to do things. If we - * venture into the last 1/8 of the buffer, we shift the - * last 7/8 of the buffer forward, wiping out the first 1/8. - * Advantage: No wrap-around, only truncation from the - * beginning. - * - * This method should not be used if you are concerned about - * timing changes affecting the behaviour of the driver (ie, - * race conditions). - */ - strcpy(&dgnc_trcbuf[dgnc_trcbufi], buf); - dgnc_trcbufi += lenbuf; - dgnc_trcbuf[dgnc_trcbufi] = '~'; - dgnc_trcbuf[dgnc_trcbufi+1] = '\0'; - - /* If we're near the end of the trace buffer... */ - if (dgnc_trcbufi > (dgnc_trcbuf_size/8)*7) { - /* Wipe out the first eighth to make some more room. */ - strcpy(dgnc_trcbuf, &dgnc_trcbuf[dgnc_trcbuf_size/8]); - dgnc_trcbufi = strlen(dgnc_trcbuf)-1; - /* Plop overflow message at the top of the buffer. */ - bcopy(TRC_OVERFLOW, dgnc_trcbuf, strlen(TRC_OVERFLOW)); - } -# else -# error "TRC_ON_OVERFLOW_WRAP_AROUND or TRC_ON_OVERFLOW_SHIFT_BUFFER?" -# endif - } - DGNC_UNLOCK(dgnc_tracef_lock, flags); - -# endif /* defined(TRC_TO_KMEM) */ -} - -#endif /* !defined(TRC_TO_KMEM) && !defined(TRC_TO_CONSOLE) */ - -#endif - - /* * dgnc_tracer_free() * diff --git a/drivers/staging/dgnc/dgnc_trace.h b/drivers/staging/dgnc/dgnc_trace.h index efed88a627dc..4f4e2b9146c6 100644 --- a/drivers/staging/dgnc/dgnc_trace.h +++ b/drivers/staging/dgnc/dgnc_trace.h @@ -28,16 +28,6 @@ #include "dgnc_driver.h" -#if 0 - -# if !defined(TRC_TO_KMEM) && !defined(TRC_TO_CONSOLE) - void dgnc_tracef(const char *fmt, ...); -# else - void dgnc_tracef(const char *fmt, ...); -# endif - -#endif - void dgnc_tracer_free(void); #endif diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index 714a069831a8..453efce75ffd 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -2107,24 +2107,6 @@ static int dgnc_tty_write(struct tty_struct *tty, ch->ch_w_head = head; } -#if 0 - /* - * If this is the print device, and the - * printer is still on, we need to turn it - * off before going idle. - */ - if (count == orig_count) { - if ((un->un_type == DGNC_PRINT) && (ch->ch_flags & CH_PRON)) { - head &= tmask; - ch->ch_w_head = head; - dgnc_wmove(ch, ch->ch_digi.digi_offstr, - (int) ch->ch_digi.digi_offlen); - head = (ch->ch_w_head) & tmask; - ch->ch_flags &= ~CH_PRON; - } - } -#endif - /* Update printer buffer empty time. */ if ((un->un_type == DGNC_PRINT) && (ch->ch_digi.digi_maxcps > 0) && (ch->ch_digi.digi_bufsize > 0)) { diff --git a/drivers/staging/dgnc/digi.h b/drivers/staging/dgnc/digi.h index 282908f6f388..252791835044 100644 --- a/drivers/staging/dgnc/digi.h +++ b/drivers/staging/dgnc/digi.h @@ -402,7 +402,6 @@ struct digi_getcounter { #define EV_IPU 0x0010 /* ! Date: Sat, 26 Jul 2014 16:41:46 +0200 Subject: staging: unisys: include: uisutils.h: Cleaning up missing null-terminate in conjunction with strncpy Replacing strncpy with strlcpy to avoid strings that lacks null terminate. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/uisutils.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h index 70776c93cc50..14d5cbda594a 100644 --- a/drivers/staging/unisys/include/uisutils.h +++ b/drivers/staging/unisys/include/uisutils.h @@ -307,20 +307,20 @@ Issue_VMCALL_CHANNEL_MISMATCH(const char *ChannelName, U64 physaddr; char *last_slash = NULL; - strncpy(params.ChannelName, ChannelName, + strlcpy(params.ChannelName, ChannelName, lengthof(VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS, ChannelName)); - strncpy(params.ItemName, ItemName, + strlcpy(params.ItemName, ItemName, lengthof(VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS, ItemName)); params.SourceLineNumber = SourceLineNumber; last_slash = strrchr(path_n_fn, '/'); if (last_slash != NULL) { last_slash++; - strncpy(params.SourceFileName, last_slash, + strlcpy(params.SourceFileName, last_slash, lengthof(VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS, SourceFileName)); } else - strncpy(params.SourceFileName, + strlcpy(params.SourceFileName, "Cannot determine source filename", lengthof(VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS, SourceFileName)); -- cgit From 96955ed6f0fc4a4bff319bf34ddad8d30a705dfe Mon Sep 17 00:00:00 2001 From: Rickard Strandqvist Date: Sat, 26 Jul 2014 16:43:20 +0200 Subject: staging: usbip: stub_main.c: Cleaning up missing null-terminate in conjunction with strncpy Replacing strncpy with strlcpy to avoid strings that lacks null terminate. Signed-off-by: Rickard Strandqvist Signed-off-by: Greg Kroah-Hartman --- drivers/staging/usbip/stub_main.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/usbip/stub_main.c b/drivers/staging/usbip/stub_main.c index 9c5832abbdf1..44ab43fc4fcc 100644 --- a/drivers/staging/usbip/stub_main.c +++ b/drivers/staging/usbip/stub_main.c @@ -94,7 +94,7 @@ static int add_match_busid(char *busid) for (i = 0; i < MAX_BUSID; i++) if (!busid_table[i].name[0]) { - strncpy(busid_table[i].name, busid, BUSID_SIZE); + strlcpy(busid_table[i].name, busid, BUSID_SIZE); if ((busid_table[i].status != STUB_BUSID_ALLOC) && (busid_table[i].status != STUB_BUSID_REMOV)) busid_table[i].status = STUB_BUSID_ADDED; @@ -158,15 +158,11 @@ static ssize_t store_match_busid(struct device_driver *dev, const char *buf, if (count < 5) return -EINVAL; - /* strnlen() does not include \0 */ - len = strnlen(buf + 4, BUSID_SIZE); - /* busid needs to include \0 termination */ - if (!(len < BUSID_SIZE)) + len = strlcpy(busid, buf + 4, BUSID_SIZE); + if (sizeof(busid) <= len) return -EINVAL; - strncpy(busid, buf + 4, BUSID_SIZE); - if (!strncmp(buf, "add ", 4)) { if (add_match_busid(busid) < 0) return -ENOMEM; -- cgit From b9f288014e398bacbdfbbf0b27f5931be1f56763 Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Sun, 27 Jul 2014 19:35:48 +0200 Subject: staging: rtl8821ae: fixed a space coding style issue Fixed a coding style issue. Signed-off-by: Sylvain Calador Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8821ae/btcoexist/halbtc8192e2ant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8821ae/btcoexist/halbtc8192e2ant.h b/drivers/staging/rtl8821ae/btcoexist/halbtc8192e2ant.h index 416d3ddaed33..f10bf1be69fe 100644 --- a/drivers/staging/rtl8821ae/btcoexist/halbtc8192e2ant.h +++ b/drivers/staging/rtl8821ae/btcoexist/halbtc8192e2ant.h @@ -151,7 +151,7 @@ void ex_halbtc8192e2ant_media_status_notify(struct btc_coexist *btcoexist, void ex_halbtc8192e2ant_special_packet_notify(struct btc_coexist *btcoexist, u8 type); void ex_halbtc8192e2ant_bt_info_notify(struct btc_coexist *btcoexist, - u8 *tmpBuf,u8 length); + u8 *tmpBuf, u8 length); void ex_halbtc8192e2ant_stack_operation_notify(struct btc_coexist *btcoexist, u8 type); void ex_halbtc8192e2ant_halt_notify(struct btc_coexist *btcoexist); -- cgit From e6be8e632c6b5e63643bac03198ce3c13cbe651d Mon Sep 17 00:00:00 2001 From: Marc Fite Date: Sun, 27 Jul 2014 20:31:08 +0200 Subject: staging: lustre: lov: Fix sparse warning using plain integer as NULL pointer This patch fixes the warning generated by sparse: "Using plain integer as NULL pointer" by replacing the offending 0s with NULL. drivers/staging/lustre/lustre/lov/lov_obd.c:902:48: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_obd.c:946:54: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_obd.c:2819:46: warning: Using plain integer as NULL pointer Signed-off-by: Marc Fite Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/lov/lov_obd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index 814dd49f332d..e4f4fe3f71c7 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -899,7 +899,7 @@ static int lov_cleanup(struct obd_device *obd) " deathrow=%d, lovrc=%d\n", i, lov->lov_death_row, atomic_read(&lov->lov_refcount)); - lov_del_target(obd, i, 0, 0); + lov_del_target(obd, i, NULL, 0); } obd_putref(obd); OBD_FREE(lov->lov_tgts, sizeof(*lov->lov_tgts) * @@ -943,7 +943,7 @@ int lov_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg, GOTO(out, rc); } case LCFG_PARAM: { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; struct lov_desc *desc = &(obd->u.lov.desc); if (!desc) @@ -2816,7 +2816,7 @@ struct kmem_cache *lov_oinfo_slab; int __init lov_init(void) { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc; /* print an address of _any_ initialized kernel symbol from this -- cgit From 6b5886f8b2d42de3bfb7764dfafab78fe6777334 Mon Sep 17 00:00:00 2001 From: Nicolas Thery Date: Sun, 27 Jul 2014 20:32:06 +0200 Subject: staging: ft1000: remove procfs entries This patch started as a fix to some checkpatch complaints in ft1000 procfs code but Greg suggested to remove the procfs entries altogether: http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2014-July/055594.html Signed-off-by: Nicolas Thery Signed-off-by: Greg Kroah-Hartman --- drivers/staging/ft1000/ft1000-pcmcia/Makefile | 3 +- drivers/staging/ft1000/ft1000-pcmcia/ft1000.h | 2 - drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c | 4 - drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c | 211 ------------------ drivers/staging/ft1000/ft1000-usb/Makefile | 2 +- drivers/staging/ft1000/ft1000-usb/ft1000_proc.c | 241 --------------------- drivers/staging/ft1000/ft1000-usb/ft1000_usb.c | 8 - drivers/staging/ft1000/ft1000-usb/ft1000_usb.h | 3 - drivers/staging/ft1000/ft1000.h | 2 - 9 files changed, 2 insertions(+), 474 deletions(-) delete mode 100644 drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c delete mode 100644 drivers/staging/ft1000/ft1000-usb/ft1000_proc.c (limited to 'drivers/staging') diff --git a/drivers/staging/ft1000/ft1000-pcmcia/Makefile b/drivers/staging/ft1000/ft1000-pcmcia/Makefile index 660b7a50e891..715de3f00e33 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/Makefile +++ b/drivers/staging/ft1000/ft1000-pcmcia/Makefile @@ -1,3 +1,2 @@ obj-$(CONFIG_FT1000_PCMCIA) = ft1000_pcmcia.o -ft1000_pcmcia-y := ft1000_hw.o ft1000_dnld.o ft1000_proc.o ft1000_cs.o - +ft1000_pcmcia-y := ft1000_hw.o ft1000_dnld.o ft1000_cs.o diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000.h b/drivers/staging/ft1000/ft1000-pcmcia/ft1000.h index 0c21ac680038..1d52738fff49 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000.h +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000.h @@ -47,8 +47,6 @@ extern struct net_device *init_ft1000_card(struct pcmcia_device *link, extern void stop_ft1000_card(struct net_device *dev); extern int card_download(struct net_device *dev, const u8 *pFileStart, size_t FileLength); -extern void ft1000InitProc(struct net_device *dev); -extern void ft1000CleanupProc(struct net_device *dev); extern u16 ft1000_read_dpram(struct net_device *dev, int offset); extern void card_bootload(struct net_device *dev); diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c index a6158bef58e5..21f09fe168e9 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c @@ -19,8 +19,6 @@ #include #include -#include - #include #include #include @@ -2102,7 +2100,6 @@ void stop_ft1000_card(struct net_device *dev) release_region(dev->base_addr,256); release_firmware(fw_entry); flarion_ft1000_cnt--; - ft1000CleanupProc(dev); } @@ -2247,7 +2244,6 @@ struct net_device *init_ft1000_card(struct pcmcia_device *link, ft1000_enable_interrupts(dev); - ft1000InitProc(dev); ft1000_card_present = 1; dev->ethtool_ops = &ops; printk(KERN_INFO "ft1000: %s: addr 0x%04lx irq %d, MAC addr %pM\n", diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c deleted file mode 100644 index 88f6f9ce304a..000000000000 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c +++ /dev/null @@ -1,211 +0,0 @@ -/*--------------------------------------------------------------------------- - FT1000 driver for Flarion Flash OFDM NIC Device - - Copyright (C) 2006 Patrik Ostrihon, All rights reserved. - Copyright (C) 2006 ProWeb Consulting, a.s, All rights reserved. - - 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 "ft1000.h" - -#define FT1000_PROC "ft1000" -#define MAX_FILE_LEN 255 - -#define seq_putx(m, message, size, var) \ - seq_printf(m, message); \ - for (i = 0; i < (size - 1); i++) { \ - seq_printf(m, "%02x:", var[i]); \ - } \ - seq_printf(m, "%02x\n", var[i]) - -#define seq_putd(m, message, size, var) \ - seq_printf(m, message); \ - for (i = 0; i < (size - 1); i++) { \ - seq_printf(m, "%d.", var[i]); \ - } \ - seq_printf(m, "%d\n", var[i]) - -static int ft1000ReadProc(struct seq_file *m, void *v) -{ - static const char *status[] = { - "Idle (Disconnect)", "Searching", "Active (Connected)", - "Waiting for L2", "Sleep", "No Coverage", "", "" - }; - static const char *signal[] = { "", "*", "**", "***", "****" }; - - struct net_device *dev = m->private; - struct ft1000_info *info = netdev_priv(dev); - int i; - int strength; - int quality; - struct timeval tv; - time_t delta; - - if (info->AsicID == ELECTRABUZZ_ID) { - if (info->ProgConStat != 0xFF) { - info->LedStat = - ft1000_read_dpram(dev, FT1000_DSP_LED); - info->ConStat = - ft1000_read_dpram(dev, FT1000_DSP_CON_STATE); - } else { - info->ConStat = 0xf; - } - } else { - if (info->ProgConStat != 0xFF) { - info->LedStat = - ntohs(ft1000_read_dpram_mag_16( - dev, FT1000_MAG_DSP_LED, - FT1000_MAG_DSP_LED_INDX)); - info->ConStat = - ntohs(ft1000_read_dpram_mag_16( - dev, FT1000_MAG_DSP_CON_STATE, - FT1000_MAG_DSP_CON_STATE_INDX)); - } else { - info->ConStat = 0xf; - } - } - - i = (info->LedStat) & 0xf; - switch (i) { - case 0x1: - strength = 1; - break; - case 0x3: - strength = 2; - break; - case 0x7: - strength = 3; - break; - case 0xf: - strength = 4; - break; - default: - strength = 0; - } - - i = (info->LedStat >> 8) & 0xf; - switch (i) { - case 0x1: - quality = 1; - break; - case 0x3: - quality = 2; - break; - case 0x7: - quality = 3; - break; - case 0xf: - quality = 4; - break; - default: - quality = 0; - } - - do_gettimeofday(&tv); - delta = tv.tv_sec - info->ConTm; - seq_printf(m, "Connection Time: %02ld:%02ld:%02ld\n", - ((delta / 3600) % 24), ((delta / 60) % 60), (delta % 60)); - seq_printf(m, "Connection Time[s]: %ld\n", delta); - seq_printf(m, "Asic ID: %s\n", - info->AsicID == - ELECTRABUZZ_ID ? "ELECTRABUZZ ASIC" : "MAGNEMITE ASIC"); - seq_putx(m, "SKU: ", SKUSZ, info->Sku); - seq_putx(m, "EUI64: ", EUISZ, info->eui64); - seq_putd(m, "DSP version number: ", DSPVERSZ, info->DspVer); - seq_putx(m, "Hardware Serial Number: ", HWSERNUMSZ, info->HwSerNum); - seq_putx(m, "Caliberation Version: ", CALVERSZ, info->RfCalVer); - seq_putd(m, "Caliberation Date: ", CALDATESZ, info->RfCalDate); - seq_printf(m, "Media State: %s\n", - (info->mediastate) ? "link" : "no link"); - seq_printf(m, "Connection Status: %s\n", status[info->ConStat & 0x7]); - seq_printf(m, "RX packets: %ld\n", info->stats.rx_packets); - seq_printf(m, "TX packets: %ld\n", info->stats.tx_packets); - seq_printf(m, "RX bytes: %ld\n", info->stats.rx_bytes); - seq_printf(m, "TX bytes: %ld\n", info->stats.tx_bytes); - seq_printf(m, "Signal Strength: %s\n", signal[strength]); - seq_printf(m, "Signal Quality: %s\n", signal[quality]); - return 0; -} - -/* - * seq_file wrappers for procfile show routines. - */ -static int ft1000_proc_open(struct inode *inode, struct file *file) -{ - return single_open(file, ft1000ReadProc, PDE_DATA(inode)); -} - -static const struct file_operations ft1000_proc_fops = { - .open = ft1000_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static int ft1000NotifyProc(struct notifier_block *this, unsigned long event, - void *ptr) -{ - struct net_device *dev = netdev_notifier_info_to_dev(ptr); - struct ft1000_info *info; - - info = netdev_priv(dev); - - switch (event) { - case NETDEV_CHANGENAME: - remove_proc_entry(info->netdevname, info->ft1000_proc_dir); - proc_create_data(dev->name, 0644, info->ft1000_proc_dir, - &ft1000_proc_fops, dev); - snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); - break; - } - return NOTIFY_DONE; -} - -static struct notifier_block ft1000_netdev_notifier = { - .notifier_call = ft1000NotifyProc -}; - -void ft1000InitProc(struct net_device *dev) -{ - struct ft1000_info *info; - - info = netdev_priv(dev); - - info->ft1000_proc_dir = proc_mkdir(FT1000_PROC, init_net.proc_net); - - proc_create_data(dev->name, 0644, info->ft1000_proc_dir, - &ft1000_proc_fops, dev); - - snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); - register_netdevice_notifier(&ft1000_netdev_notifier); -} - -void ft1000CleanupProc(struct net_device *dev) -{ - struct ft1000_info *info; - - info = netdev_priv(dev); - - remove_proc_entry(dev->name, info->ft1000_proc_dir); - remove_proc_entry(FT1000_PROC, init_net.proc_net); - unregister_netdevice_notifier(&ft1000_netdev_notifier); -} diff --git a/drivers/staging/ft1000/ft1000-usb/Makefile b/drivers/staging/ft1000/ft1000-usb/Makefile index f0f524015888..7c4b78456254 100644 --- a/drivers/staging/ft1000/ft1000-usb/Makefile +++ b/drivers/staging/ft1000/ft1000-usb/Makefile @@ -1,3 +1,3 @@ obj-$(CONFIG_FT1000_USB) += ft1000.o -ft1000-y := ft1000_debug.o ft1000_download.o ft1000_hw.o ft1000_proc.o ft1000_usb.o +ft1000-y := ft1000_debug.o ft1000_download.o ft1000_hw.o ft1000_usb.o diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c b/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c deleted file mode 100644 index e89b5d2c8e62..000000000000 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * ft1000_proc.c - ft1000 proc interface - * - * Copyright (C) 2009-2010 Quintec - * (C) 2010 Open-nandra - * - * - * This file is subject to the terms and conditions of the GNU General - * Public License. See the file "COPYING" in the main directory of this - * archive for more details. - * - * 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 "ft1000_usb.h" - -#define FT1000_PROC_DIR "ft1000" - - -#define seq_putx(m, message, size, var) \ - do { \ - seq_printf(m, message); \ - for (i = 0; i < (size - 1); i++) \ - seq_printf(m, "%02x:", var[i]); \ - seq_printf(m, "%02x\n", var[i]); \ - } while (0) - -#define seq_putd(m, message, size, var) \ - do { \ - seq_printf(m, message); \ - for (i = 0; i < (size - 1); i++) \ - seq_printf(m, "%d.", var[i]); \ - seq_printf(m, "%d\n", var[i]); \ - } while (0) - -#define FTNET_PROC init_net.proc_net - - -int ft1000_read_dpram16(struct ft1000_usb *ft1000dev, u16 indx, - u8 *buffer, u8 highlow); - - -static int ft1000ReadProc(struct seq_file *m, void *v) -{ - static const char *status[] = { - "Idle (Disconnect)", - "Searching", - "Active (Connected)", - "Waiting for L2", - "Sleep", - "No Coverage", - "", - "", - }; - static const char *signal[] = { "", "*", "**", "***", "****" }; - - struct net_device *dev = m->private; - struct ft1000_info *info = netdev_priv(dev); - int i; - unsigned short ledStat; - unsigned short conStat; - int strength; - int quality; - struct timeval tv; - time_t delta; - - if (info->ProgConStat != 0xFF) { - ft1000_read_dpram16(info->priv, FT1000_MAG_DSP_LED, - (u8 *)&ledStat, FT1000_MAG_DSP_LED_INDX); - info->LedStat = ntohs(ledStat); - - ft1000_read_dpram16(info->priv, FT1000_MAG_DSP_CON_STATE, - (u8 *)&conStat, FT1000_MAG_DSP_CON_STATE_INDX); - info->ConStat = ntohs(conStat); - do_gettimeofday(&tv); - delta = (tv.tv_sec - info->ConTm); - } else { - info->ConStat = 0xf; - delta = 0; - } - - i = (info->LedStat) & 0xf; - switch (i) { - case 0x1: - strength = 1; - break; - case 0x3: - strength = 2; - break; - case 0x7: - strength = 3; - break; - case 0xf: - strength = 4; - break; - default: - strength = 0; - } - - i = (info->LedStat >> 8) & 0xf; - switch (i) { - case 0x1: - quality = 1; - break; - case 0x3: - quality = 2; - break; - case 0x7: - quality = 3; - break; - case 0xf: - quality = 4; - break; - default: - quality = 0; - } - - seq_printf(m, "Connection Time: %02ld:%02ld:%02ld\n", - ((delta / 3600) % 24), ((delta / 60) % 60), (delta % 60)); - seq_printf(m, "Connection Time[s]: %ld\n", delta); - seq_printf(m, "Asic ID: %s\n", - (info->AsicID) == ELECTRABUZZ_ID ? "ELECTRABUZZ ASIC" : "MAGNEMITE ASIC"); - seq_putx(m, "SKU: ", SKUSZ, info->Sku); - seq_putx(m, "EUI64: ", EUISZ, info->eui64); - seq_putd(m, "DSP version number: ", DSPVERSZ, info->DspVer); - seq_putx(m, "Hardware Serial Number: ", HWSERNUMSZ, info->HwSerNum); - seq_putx(m, "Caliberation Version: ", CALVERSZ, info->RfCalVer); - seq_putd(m, "Caliberation Date: ", CALDATESZ, info->RfCalDate); - seq_printf(m, "Media State: %s\n", (info->mediastate) ? "link" : "no link"); - seq_printf(m, "Connection Status: %s\n", status[info->ConStat & 0x7]); - seq_printf(m, "RX packets: %ld\n", info->stats.rx_packets); - seq_printf(m, "TX packets: %ld\n", info->stats.tx_packets); - seq_printf(m, "RX bytes: %ld\n", info->stats.rx_bytes); - seq_printf(m, "TX bytes: %ld\n", info->stats.tx_bytes); - seq_printf(m, "Signal Strength: %s\n", signal[strength]); - seq_printf(m, "Signal Quality: %s\n", signal[quality]); - return 0; -} - -/* - * seq_file wrappers for procfile show routines. - */ -static int ft1000_proc_open(struct inode *inode, struct file *file) -{ - return single_open(file, ft1000ReadProc, PDE_DATA(inode)); -} - -static const struct file_operations ft1000_proc_fops = { - .open = ft1000_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static int -ft1000NotifyProc(struct notifier_block *this, unsigned long event, void *ptr) -{ - struct net_device *dev = netdev_notifier_info_to_dev(ptr); - struct ft1000_info *info; - struct proc_dir_entry *ft1000_proc_file; - - info = netdev_priv(dev); - - switch (event) { - case NETDEV_CHANGENAME: - remove_proc_entry(info->netdevname, info->ft1000_proc_dir); - ft1000_proc_file = - proc_create_data(dev->name, 0644, info->ft1000_proc_dir, - &ft1000_proc_fops, dev); - snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); - break; - } - - return NOTIFY_DONE; -} - -static struct notifier_block ft1000_netdev_notifier = { - .notifier_call = ft1000NotifyProc, -}; - - -int ft1000_init_proc(struct net_device *dev) -{ - struct ft1000_info *info; - struct proc_dir_entry *ft1000_proc_file; - int ret = -EINVAL; - - info = netdev_priv(dev); - - info->ft1000_proc_dir = proc_mkdir(FT1000_PROC_DIR, FTNET_PROC); - if (info->ft1000_proc_dir == NULL) { - netdev_warn(dev, "Unable to create %s dir.\n", - FT1000_PROC_DIR); - goto fail; - } - - ft1000_proc_file = - proc_create_data(dev->name, 0644, info->ft1000_proc_dir, - &ft1000_proc_fops, dev); - - if (!ft1000_proc_file) { - netdev_warn(dev, "Unable to create /proc entry.\n"); - goto fail_entry; - } - - snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); - - ret = register_netdevice_notifier(&ft1000_netdev_notifier); - if (ret) - goto fail_notif; - - return 0; - -fail_notif: - remove_proc_entry(info->netdevname, info->ft1000_proc_dir); -fail_entry: - remove_proc_entry(FT1000_PROC_DIR, FTNET_PROC); -fail: - return ret; -} - -void ft1000_cleanup_proc(struct ft1000_info *info) -{ - remove_proc_entry(info->netdevname, info->ft1000_proc_dir); - remove_proc_entry(FT1000_PROC_DIR, FTNET_PROC); - unregister_netdevice_notifier(&ft1000_netdev_notifier); -} diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c index 0a2544c78292..cc740c96845d 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c @@ -196,17 +196,10 @@ static int ft1000_probe(struct usb_interface *interface, if (ret) goto err_thread; - ret = ft1000_init_proc(ft1000dev->net); - if (ret) - goto err_proc; - ft1000dev->NetDevRegDone = 1; return 0; -err_proc: - unregister_netdev(ft1000dev->net); - free_netdev(ft1000dev->net); err_thread: kthread_stop(ft1000dev->pPollThread); err_load: @@ -230,7 +223,6 @@ static void ft1000_disconnect(struct usb_interface *interface) if (pft1000info) { ft1000dev = pft1000info->priv; - ft1000_cleanup_proc(pft1000info); if (ft1000dev->pPollThread) kthread_stop(ft1000dev->pPollThread); diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h index 464e5ab583c1..8f7ccae57f31 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h @@ -149,7 +149,4 @@ int reg_ft1000_netdev(struct ft1000_usb *ft1000dev, struct usb_interface *intf); int ft1000_poll(void *dev_id); -int ft1000_init_proc(struct net_device *dev); -void ft1000_cleanup_proc(struct ft1000_info *info); - #endif /* _FT1000_USB_H_ */ diff --git a/drivers/staging/ft1000/ft1000.h b/drivers/staging/ft1000/ft1000.h index db57430f3b94..8a2e4caa532d 100644 --- a/drivers/staging/ft1000/ft1000.h +++ b/drivers/staging/ft1000/ft1000.h @@ -363,6 +363,4 @@ struct ft1000_info { u16 Rec[MAX_DSP_SESS_REC]; u32 MagRec[MAX_DSP_SESS_REC/2]; } DSPSess; - struct proc_dir_entry *ft1000_proc_dir; - char netdevname[IFNAMSIZ]; }; -- cgit From c22487b828adf09a6ffa3cdf47836d7b4407f827 Mon Sep 17 00:00:00 2001 From: Kristina MartÅ¡enko Date: Sun, 27 Jul 2014 22:59:50 +0300 Subject: staging: sep: remove driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Looks like no one's working on the driver anymore, so remove it for now. If someone wants to work on moving it out of staging, this commit can be reverted. Signed-off-by: Kristina MartÅ¡enko Cc: Alan Cox Cc: Mark A. Allyn Cc: Jayant Mangalampalli Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/sep/Kconfig | 11 - drivers/staging/sep/Makefile | 3 - drivers/staging/sep/TODO | 3 - drivers/staging/sep/sep_crypto.c | 3979 --------------------------- drivers/staging/sep/sep_crypto.h | 359 --- drivers/staging/sep/sep_dev.h | 162 -- drivers/staging/sep/sep_driver_api.h | 402 --- drivers/staging/sep/sep_driver_config.h | 298 -- drivers/staging/sep/sep_driver_hw_defs.h | 56 - drivers/staging/sep/sep_main.c | 4411 ------------------------------ drivers/staging/sep/sep_trace_events.h | 193 -- 13 files changed, 9880 deletions(-) delete mode 100644 drivers/staging/sep/Kconfig delete mode 100644 drivers/staging/sep/Makefile delete mode 100644 drivers/staging/sep/TODO delete mode 100644 drivers/staging/sep/sep_crypto.c delete mode 100644 drivers/staging/sep/sep_crypto.h delete mode 100644 drivers/staging/sep/sep_dev.h delete mode 100644 drivers/staging/sep/sep_driver_api.h delete mode 100644 drivers/staging/sep/sep_driver_config.h delete mode 100644 drivers/staging/sep/sep_driver_hw_defs.h delete mode 100644 drivers/staging/sep/sep_main.c delete mode 100644 drivers/staging/sep/sep_trace_events.h (limited to 'drivers/staging') diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 90624df0db6f..2c486ea6236b 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -64,8 +64,6 @@ source "drivers/staging/vt6655/Kconfig" source "drivers/staging/vt6656/Kconfig" -source "drivers/staging/sep/Kconfig" - source "drivers/staging/iio/Kconfig" source "drivers/staging/xgifb/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 27f44cdde516..1e1a3a10faf7 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -26,7 +26,6 @@ obj-$(CONFIG_OCTEON_USB) += octeon-usb/ obj-$(CONFIG_VT6655) += vt6655/ obj-$(CONFIG_VT6656) += vt6656/ obj-$(CONFIG_VME_BUS) += vme/ -obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_FB_XGI) += xgifb/ obj-$(CONFIG_USB_EMXX) += emxx_udc/ diff --git a/drivers/staging/sep/Kconfig b/drivers/staging/sep/Kconfig deleted file mode 100644 index aab945a316ea..000000000000 --- a/drivers/staging/sep/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config DX_SEP - tristate "Discretix SEP driver" - depends on PCI && CRYPTO - help - Discretix SEP driver; used for the security processor subsystem - on board the Intel Mobile Internet Device and adds SEP availability - to the kernel crypto infrastructure - - The driver's name is sep_driver. - - If unsure, select N. diff --git a/drivers/staging/sep/Makefile b/drivers/staging/sep/Makefile deleted file mode 100644 index e48a7959289e..000000000000 --- a/drivers/staging/sep/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ccflags-y += -I$(srctree)/$(src) -obj-$(CONFIG_DX_SEP) += sep_driver.o -sep_driver-objs := sep_crypto.o sep_main.o diff --git a/drivers/staging/sep/TODO b/drivers/staging/sep/TODO deleted file mode 100644 index 3524d0cf84ba..000000000000 --- a/drivers/staging/sep/TODO +++ /dev/null @@ -1,3 +0,0 @@ -Todo's so far (from Alan Cox) -- Clean up unused ioctls -- Clean up unused fields in ioctl structures diff --git a/drivers/staging/sep/sep_crypto.c b/drivers/staging/sep/sep_crypto.c deleted file mode 100644 index 415322867581..000000000000 --- a/drivers/staging/sep/sep_crypto.c +++ /dev/null @@ -1,3979 +0,0 @@ -/* - * - * sep_crypto.c - Crypto interface structures - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2010 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2009.06.26 Initial publish - * 2010.09.14 Upgrade to Medfield - * 2011.02.22 Enable Kernel Crypto - * - */ - -/* #define DEBUG */ -#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 -#include -#include -#include "sep_driver_hw_defs.h" -#include "sep_driver_config.h" -#include "sep_driver_api.h" -#include "sep_dev.h" -#include "sep_crypto.h" - -#if defined(CONFIG_CRYPTO) || defined(CONFIG_CRYPTO_MODULE) - -/* Globals for queuing */ -static spinlock_t queue_lock; -static struct crypto_queue sep_queue; - -/* Declare of dequeuer */ -static void sep_dequeuer(void *data); - -/* TESTING */ -/** - * sep_do_callback - * @work: pointer to work_struct - * This is what is called by the queue; it is generic so that it - * can be used by any type of operation as each different callback - * function can use the data parameter in its own way - */ -static void sep_do_callback(struct work_struct *work) -{ - struct sep_work_struct *sep_work = container_of(work, - struct sep_work_struct, work); - - if (sep_work != NULL) { - (sep_work->callback)(sep_work->data); - kfree(sep_work); - } else { - pr_debug("sep crypto: do callback - NULL container\n"); - } -} - -/** - * sep_submit_work - * @work_queue: pointer to struct_workqueue - * @funct: pointer to function to execute - * @data: pointer to data; function will know - * how to use it - * This is a generic API to submit something to - * the queue. The callback function will depend - * on what operation is to be done - */ -static int sep_submit_work(struct workqueue_struct *work_queue, - void (*funct)(void *), - void *data) -{ - struct sep_work_struct *sep_work; - int result; - - sep_work = kmalloc(sizeof(struct sep_work_struct), GFP_ATOMIC); - - if (sep_work == NULL) { - pr_debug("sep crypto: cant allocate work structure\n"); - return -ENOMEM; - } - - sep_work->callback = funct; - sep_work->data = data; - INIT_WORK(&sep_work->work, sep_do_callback); - result = queue_work(work_queue, &sep_work->work); - if (!result) { - pr_debug("sep_crypto: queue_work failed\n"); - return -EINVAL; - } - return 0; -} - -/** - * sep_alloc_sg_buf - - * @sep: pointer to struct sep_device - * @size: total size of area - * @block_size: minimum size of chunks - * each page is minimum or modulo this size - * @returns: pointer to struct scatterlist for new - * buffer - **/ -static struct scatterlist *sep_alloc_sg_buf( - struct sep_device *sep, - size_t size, - size_t block_size) -{ - u32 nbr_pages; - u32 ct1; - void *buf; - size_t current_size; - size_t real_page_size; - - struct scatterlist *sg, *sg_temp; - - if (size == 0) - return NULL; - - dev_dbg(&sep->pdev->dev, "sep alloc sg buf\n"); - - current_size = 0; - nbr_pages = 0; - real_page_size = PAGE_SIZE - (PAGE_SIZE % block_size); - /** - * The size of each page must be modulo of the operation - * block size; increment by the modified page size until - * the total size is reached, then you have the number of - * pages - */ - while (current_size < size) { - current_size += real_page_size; - nbr_pages += 1; - } - - sg = kmalloc_array(nbr_pages, sizeof(struct scatterlist), GFP_ATOMIC); - if (!sg) - return NULL; - - sg_init_table(sg, nbr_pages); - - current_size = 0; - sg_temp = sg; - for (ct1 = 0; ct1 < nbr_pages; ct1 += 1) { - buf = (void *)get_zeroed_page(GFP_ATOMIC); - if (!buf) { - dev_warn(&sep->pdev->dev, - "Cannot allocate page for new buffer\n"); - kfree(sg); - return NULL; - } - - sg_set_buf(sg_temp, buf, real_page_size); - if ((size - current_size) > real_page_size) { - sg_temp->length = real_page_size; - current_size += real_page_size; - } else { - sg_temp->length = (size - current_size); - current_size = size; - } - sg_temp = sg_next(sg); - } - return sg; -} - -/** - * sep_free_sg_buf - - * @sg: pointer to struct scatterlist; points to area to free - */ -static void sep_free_sg_buf(struct scatterlist *sg) -{ - struct scatterlist *sg_temp = sg; - while (sg_temp) { - free_page((unsigned long)sg_virt(sg_temp)); - sg_temp = sg_next(sg_temp); - } - kfree(sg); -} - -/** - * sep_copy_sg - - * @sep: pointer to struct sep_device - * @sg_src: pointer to struct scatterlist for source - * @sg_dst: pointer to struct scatterlist for destination - * @size: size (in bytes) of data to copy - * - * Copy data from one scatterlist to another; both must - * be the same size - */ -static void sep_copy_sg( - struct sep_device *sep, - struct scatterlist *sg_src, - struct scatterlist *sg_dst, - size_t size) -{ - u32 seg_size; - u32 in_offset, out_offset; - - u32 count = 0; - struct scatterlist *sg_src_tmp = sg_src; - struct scatterlist *sg_dst_tmp = sg_dst; - - in_offset = 0; - out_offset = 0; - - dev_dbg(&sep->pdev->dev, "sep copy sg\n"); - - if ((sg_src == NULL) || (sg_dst == NULL) || (size == 0)) - return; - - dev_dbg(&sep->pdev->dev, "sep copy sg not null\n"); - - while (count < size) { - if ((sg_src_tmp->length - in_offset) > - (sg_dst_tmp->length - out_offset)) - seg_size = sg_dst_tmp->length - out_offset; - else - seg_size = sg_src_tmp->length - in_offset; - - if (seg_size > (size - count)) - seg_size = (size = count); - - memcpy(sg_virt(sg_dst_tmp) + out_offset, - sg_virt(sg_src_tmp) + in_offset, - seg_size); - - in_offset += seg_size; - out_offset += seg_size; - count += seg_size; - - if (in_offset >= sg_src_tmp->length) { - sg_src_tmp = sg_next(sg_src_tmp); - in_offset = 0; - } - - if (out_offset >= sg_dst_tmp->length) { - sg_dst_tmp = sg_next(sg_dst_tmp); - out_offset = 0; - } - } -} - -/** - * sep_oddball_pages - - * @sep: pointer to struct sep_device - * @sg: pointer to struct scatterlist - buffer to check - * @size: total data size - * @blocksize: minimum block size; must be multiples of this size - * @to_copy: 1 means do copy, 0 means do not copy - * @new_sg: pointer to location to put pointer to new sg area - * @returns: 1 if new scatterlist is needed; 0 if not needed; - * error value if operation failed - * - * The SEP device requires all pages to be multiples of the - * minimum block size appropriate for the operation - * This function check all pages; if any are oddball sizes - * (not multiple of block sizes), it creates a new scatterlist. - * If the to_copy parameter is set to 1, then a scatter list - * copy is performed. The pointer to the new scatterlist is - * put into the address supplied by the new_sg parameter; if - * no new scatterlist is needed, then a NULL is put into - * the location at new_sg. - * - */ -static int sep_oddball_pages( - struct sep_device *sep, - struct scatterlist *sg, - size_t data_size, - u32 block_size, - struct scatterlist **new_sg, - u32 do_copy) -{ - struct scatterlist *sg_temp; - u32 flag; - u32 nbr_pages, page_count; - - dev_dbg(&sep->pdev->dev, "sep oddball\n"); - if ((sg == NULL) || (data_size == 0) || (data_size < block_size)) - return 0; - - dev_dbg(&sep->pdev->dev, "sep oddball not null\n"); - flag = 0; - nbr_pages = 0; - page_count = 0; - sg_temp = sg; - - while (sg_temp) { - nbr_pages += 1; - sg_temp = sg_next(sg_temp); - } - - sg_temp = sg; - while ((sg_temp) && (flag == 0)) { - page_count += 1; - if (sg_temp->length % block_size) - flag = 1; - else - sg_temp = sg_next(sg_temp); - } - - /* Do not process if last (or only) page is oddball */ - if (nbr_pages == page_count) - flag = 0; - - if (flag) { - dev_dbg(&sep->pdev->dev, "sep oddball processing\n"); - *new_sg = sep_alloc_sg_buf(sep, data_size, block_size); - if (*new_sg == NULL) { - dev_warn(&sep->pdev->dev, "cannot allocate new sg\n"); - return -ENOMEM; - } - - if (do_copy) - sep_copy_sg(sep, sg, *new_sg, data_size); - - return 1; - } else { - return 0; - } -} - -/** - * sep_copy_offset_sg - - * @sep: pointer to struct sep_device; - * @sg: pointer to struct scatterlist - * @offset: offset into scatterlist memory - * @dst: place to put data - * @len: length of data - * @returns: number of bytes copies - * - * This copies data from scatterlist buffer - * offset from beginning - it is needed for - * handling tail data in hash - */ -static size_t sep_copy_offset_sg( - struct sep_device *sep, - struct scatterlist *sg, - u32 offset, - void *dst, - u32 len) -{ - size_t page_start; - size_t page_end; - size_t offset_within_page; - size_t length_within_page; - size_t length_remaining; - size_t current_offset; - - /* Find which page is beginning of segment */ - page_start = 0; - page_end = sg->length; - while ((sg) && (offset > page_end)) { - page_start += sg->length; - sg = sg_next(sg); - if (sg) - page_end += sg->length; - } - - if (sg == NULL) - return -ENOMEM; - - offset_within_page = offset - page_start; - if ((sg->length - offset_within_page) >= len) { - /* All within this page */ - memcpy(dst, sg_virt(sg) + offset_within_page, len); - return len; - } else { - /* Scattered multiple pages */ - current_offset = 0; - length_remaining = len; - while ((sg) && (current_offset < len)) { - length_within_page = sg->length - offset_within_page; - if (length_within_page >= length_remaining) { - memcpy(dst+current_offset, - sg_virt(sg) + offset_within_page, - length_remaining); - length_remaining = 0; - current_offset = len; - } else { - memcpy(dst+current_offset, - sg_virt(sg) + offset_within_page, - length_within_page); - length_remaining -= length_within_page; - current_offset += length_within_page; - offset_within_page = 0; - sg = sg_next(sg); - } - } - - if (sg == NULL) - return -ENOMEM; - } - return len; -} - -/** - * partial_overlap - - * @src_ptr: source pointer - * @dst_ptr: destination pointer - * @nbytes: number of bytes - * @returns: 0 for success; -1 for failure - * We cannot have any partial overlap. Total overlap - * where src is the same as dst is okay - */ -static int partial_overlap(void *src_ptr, void *dst_ptr, u32 nbytes) -{ - /* Check for partial overlap */ - if (src_ptr != dst_ptr) { - if (src_ptr < dst_ptr) { - if ((src_ptr + nbytes) > dst_ptr) - return -EINVAL; - } else { - if ((dst_ptr + nbytes) > src_ptr) - return -EINVAL; - } - } - - return 0; -} - -/* Debug - prints only if DEBUG is defined */ -static void sep_dump_ivs(struct ablkcipher_request *req, char *reason) - - { - unsigned char *cptr; - struct sep_aes_internal_context *aes_internal; - struct sep_des_internal_context *des_internal; - int ct1; - - struct this_task_ctx *ta_ctx; - struct crypto_ablkcipher *tfm; - struct sep_system_ctx *sctx; - - ta_ctx = ablkcipher_request_ctx(req); - tfm = crypto_ablkcipher_reqtfm(req); - sctx = crypto_ablkcipher_ctx(tfm); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, "IV DUMP - %s\n", reason); - if ((ta_ctx->current_request == DES_CBC) && - (ta_ctx->des_opmode == SEP_DES_CBC)) { - - des_internal = (struct sep_des_internal_context *) - sctx->des_private_ctx.ctx_buf; - /* print vendor */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep - vendor iv for DES\n"); - cptr = (unsigned char *)des_internal->iv_context; - for (ct1 = 0; ct1 < crypto_ablkcipher_ivsize(tfm); ct1 += 1) - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "%02x\n", *(cptr + ct1)); - - /* print walk */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep - walk from kernel crypto iv for DES\n"); - cptr = (unsigned char *)ta_ctx->walk.iv; - for (ct1 = 0; ct1 < crypto_ablkcipher_ivsize(tfm); ct1 += 1) - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "%02x\n", *(cptr + ct1)); - } else if ((ta_ctx->current_request == AES_CBC) && - (ta_ctx->aes_opmode == SEP_AES_CBC)) { - - aes_internal = (struct sep_aes_internal_context *) - sctx->aes_private_ctx.cbuff; - /* print vendor */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep - vendor iv for AES\n"); - cptr = (unsigned char *)aes_internal->aes_ctx_iv; - for (ct1 = 0; ct1 < crypto_ablkcipher_ivsize(tfm); ct1 += 1) - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "%02x\n", *(cptr + ct1)); - - /* print walk */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep - walk from kernel crypto iv for AES\n"); - cptr = (unsigned char *)ta_ctx->walk.iv; - for (ct1 = 0; ct1 < crypto_ablkcipher_ivsize(tfm); ct1 += 1) - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "%02x\n", *(cptr + ct1)); - } -} - -/** - * RFC2451: Weak key check - * Returns: 1 (weak), 0 (not weak) - */ -static int sep_weak_key(const u8 *key, unsigned int keylen) -{ - static const u8 parity[] = { - 8, 1, 0, 8, 0, 8, 8, 0, 0, 8, 8, 0, 8, 0, 2, 8, - 0, 8, 8, 0, 8, 0, 0, 8, 8, - 0, 0, 8, 0, 8, 8, 3, - 0, 8, 8, 0, 8, 0, 0, 8, 8, 0, 0, 8, 0, 8, 8, 0, - 8, 0, 0, 8, 0, 8, 8, 0, 0, - 8, 8, 0, 8, 0, 0, 8, - 0, 8, 8, 0, 8, 0, 0, 8, 8, 0, 0, 8, 0, 8, 8, 0, - 8, 0, 0, 8, 0, 8, 8, 0, 0, - 8, 8, 0, 8, 0, 0, 8, - 8, 0, 0, 8, 0, 8, 8, 0, 0, 8, 8, 0, 8, 0, 0, 8, - 0, 8, 8, 0, 8, 0, 0, 8, 8, - 0, 0, 8, 0, 8, 8, 0, - 0, 8, 8, 0, 8, 0, 0, 8, 8, 0, 0, 8, 0, 8, 8, 0, - 8, 0, 0, 8, 0, 8, 8, 0, 0, - 8, 8, 0, 8, 0, 0, 8, - 8, 0, 0, 8, 0, 8, 8, 0, 0, 8, 8, 0, 8, 0, 0, 8, - 0, 8, 8, 0, 8, 0, 0, 8, 8, - 0, 0, 8, 0, 8, 8, 0, - 8, 0, 0, 8, 0, 8, 8, 0, 0, 8, 8, 0, 8, 0, 0, 8, - 0, 8, 8, 0, 8, 0, 0, 8, 8, - 0, 0, 8, 0, 8, 8, 0, - 4, 8, 8, 0, 8, 0, 0, 8, 8, 0, 0, 8, 0, 8, 8, 0, - 8, 5, 0, 8, 0, 8, 8, 0, 0, - 8, 8, 0, 8, 0, 6, 8, - }; - - u32 n, w; - - n = parity[key[0]]; n <<= 4; - n |= parity[key[1]]; n <<= 4; - n |= parity[key[2]]; n <<= 4; - n |= parity[key[3]]; n <<= 4; - n |= parity[key[4]]; n <<= 4; - n |= parity[key[5]]; n <<= 4; - n |= parity[key[6]]; n <<= 4; - n |= parity[key[7]]; - w = 0x88888888L; - - /* 1 in 10^10 keys passes this test */ - if (!((n - (w >> 3)) & w)) { - if (n < 0x41415151) { - if (n < 0x31312121) { - if (n < 0x14141515) { - /* 01 01 01 01 01 01 01 01 */ - if (n == 0x11111111) - goto weak; - /* 01 1F 01 1F 01 0E 01 0E */ - if (n == 0x13131212) - goto weak; - } else { - /* 01 E0 01 E0 01 F1 01 F1 */ - if (n == 0x14141515) - goto weak; - /* 01 FE 01 FE 01 FE 01 FE */ - if (n == 0x16161616) - goto weak; - } - } else { - if (n < 0x34342525) { - /* 1F 01 1F 01 0E 01 0E 01 */ - if (n == 0x31312121) - goto weak; - /* 1F 1F 1F 1F 0E 0E 0E 0E (?) */ - if (n == 0x33332222) - goto weak; - } else { - /* 1F E0 1F E0 0E F1 0E F1 */ - if (n == 0x34342525) - goto weak; - /* 1F FE 1F FE 0E FE 0E FE */ - if (n == 0x36362626) - goto weak; - } - } - } else { - if (n < 0x61616161) { - if (n < 0x44445555) { - /* E0 01 E0 01 F1 01 F1 01 */ - if (n == 0x41415151) - goto weak; - /* E0 1F E0 1F F1 0E F1 0E */ - if (n == 0x43435252) - goto weak; - } else { - /* E0 E0 E0 E0 F1 F1 F1 F1 (?) */ - if (n == 0x44445555) - goto weak; - /* E0 FE E0 FE F1 FE F1 FE */ - if (n == 0x46465656) - goto weak; - } - } else { - if (n < 0x64646565) { - /* FE 01 FE 01 FE 01 FE 01 */ - if (n == 0x61616161) - goto weak; - /* FE 1F FE 1F FE 0E FE 0E */ - if (n == 0x63636262) - goto weak; - } else { - /* FE E0 FE E0 FE F1 FE F1 */ - if (n == 0x64646565) - goto weak; - /* FE FE FE FE FE FE FE FE */ - if (n == 0x66666666) - goto weak; - } - } - } - } - return 0; -weak: - return 1; -} -/** - * sep_sg_nents - */ -static u32 sep_sg_nents(struct scatterlist *sg) -{ - u32 ct1 = 0; - - while (sg) { - ct1 += 1; - sg = sg_next(sg); - } - - return ct1; -} - -/** - * sep_start_msg - - * @ta_ctx: pointer to struct this_task_ctx - * @returns: offset to place for the next word in the message - * Set up pointer in message pool for new message - */ -static u32 sep_start_msg(struct this_task_ctx *ta_ctx) -{ - u32 *word_ptr; - - ta_ctx->msg_len_words = 2; - ta_ctx->msgptr = ta_ctx->msg; - memset(ta_ctx->msg, 0, SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - ta_ctx->msgptr += sizeof(u32) * 2; - word_ptr = (u32 *)ta_ctx->msgptr; - *word_ptr = SEP_START_MSG_TOKEN; - return sizeof(u32) * 2; -} - -/** - * sep_end_msg - - * @ta_ctx: pointer to struct this_task_ctx - * @messages_offset: current message offset - * Returns: 0 for success; <0 otherwise - * End message; set length and CRC; and - * send interrupt to the SEP - */ -static void sep_end_msg(struct this_task_ctx *ta_ctx, u32 msg_offset) -{ - u32 *word_ptr; - /* Msg size goes into msg after token */ - ta_ctx->msg_len_words = msg_offset / sizeof(u32) + 1; - word_ptr = (u32 *)ta_ctx->msgptr; - word_ptr += 1; - *word_ptr = ta_ctx->msg_len_words; - - /* CRC (currently 0) goes at end of msg */ - word_ptr = (u32 *)(ta_ctx->msgptr + msg_offset); - *word_ptr = 0; -} - -/** - * sep_start_inbound_msg - - * @ta_ctx: pointer to struct this_task_ctx - * @msg_offset: offset to place for the next word in the message - * @returns: 0 for success; error value for failure - * Set up pointer in message pool for inbound message - */ -static u32 sep_start_inbound_msg(struct this_task_ctx *ta_ctx, u32 *msg_offset) -{ - u32 *word_ptr; - u32 token; - u32 error = SEP_OK; - - *msg_offset = sizeof(u32) * 2; - word_ptr = (u32 *)ta_ctx->msgptr; - token = *word_ptr; - ta_ctx->msg_len_words = *(word_ptr + 1); - - if (token != SEP_START_MSG_TOKEN) { - error = SEP_INVALID_START; - goto end_function; - } - -end_function: - - return error; -} - -/** - * sep_write_msg - - * @ta_ctx: pointer to struct this_task_ctx - * @in_addr: pointer to start of parameter - * @size: size of parameter to copy (in bytes) - * @max_size: size to move up offset; SEP mesg is in word sizes - * @msg_offset: pointer to current offset (is updated) - * @byte_array: flag ti indicate whether endian must be changed - * Copies data into the message area from caller - */ -static void sep_write_msg(struct this_task_ctx *ta_ctx, void *in_addr, - u32 size, u32 max_size, u32 *msg_offset, u32 byte_array) -{ - u32 *word_ptr; - void *void_ptr; - - void_ptr = ta_ctx->msgptr + *msg_offset; - word_ptr = (u32 *)void_ptr; - memcpy(void_ptr, in_addr, size); - *msg_offset += max_size; - - /* Do we need to manipulate endian? */ - if (byte_array) { - u32 i; - - for (i = 0; i < ((size + 3) / 4); i += 1) - *(word_ptr + i) = CHG_ENDIAN(*(word_ptr + i)); - } -} - -/** - * sep_make_header - * @ta_ctx: pointer to struct this_task_ctx - * @msg_offset: pointer to current offset (is updated) - * @op_code: op code to put into message - * Puts op code into message and updates offset - */ -static void sep_make_header(struct this_task_ctx *ta_ctx, u32 *msg_offset, - u32 op_code) -{ - u32 *word_ptr; - - *msg_offset = sep_start_msg(ta_ctx); - word_ptr = (u32 *)(ta_ctx->msgptr + *msg_offset); - *word_ptr = op_code; - *msg_offset += sizeof(u32); -} - - - -/** - * sep_read_msg - - * @ta_ctx: pointer to struct this_task_ctx - * @in_addr: pointer to start of parameter - * @size: size of parameter to copy (in bytes) - * @max_size: size to move up offset; SEP mesg is in word sizes - * @msg_offset: pointer to current offset (is updated) - * @byte_array: flag ti indicate whether endian must be changed - * Copies data out of the message area to caller - */ -static void sep_read_msg(struct this_task_ctx *ta_ctx, void *in_addr, - u32 size, u32 max_size, u32 *msg_offset, u32 byte_array) -{ - u32 *word_ptr; - void *void_ptr; - - void_ptr = ta_ctx->msgptr + *msg_offset; - word_ptr = (u32 *)void_ptr; - - /* Do we need to manipulate endian? */ - if (byte_array) { - u32 i; - - for (i = 0; i < ((size + 3) / 4); i += 1) - *(word_ptr + i) = CHG_ENDIAN(*(word_ptr + i)); - } - - memcpy(in_addr, void_ptr, size); - *msg_offset += max_size; -} - -/** - * sep_verify_op - - * @ta_ctx: pointer to struct this_task_ctx - * @op_code: expected op_code - * @msg_offset: pointer to current offset (is updated) - * @returns: 0 for success; error for failure - */ -static u32 sep_verify_op(struct this_task_ctx *ta_ctx, u32 op_code, - u32 *msg_offset) -{ - u32 error; - u32 in_ary[2]; - - struct sep_device *sep = ta_ctx->sep_used; - - dev_dbg(&sep->pdev->dev, "dumping return message\n"); - error = sep_start_inbound_msg(ta_ctx, msg_offset); - if (error) { - dev_warn(&sep->pdev->dev, - "sep_start_inbound_msg error\n"); - return error; - } - - sep_read_msg(ta_ctx, in_ary, sizeof(u32) * 2, sizeof(u32) * 2, - msg_offset, 0); - - if (in_ary[0] != op_code) { - dev_warn(&sep->pdev->dev, - "sep got back wrong opcode\n"); - dev_warn(&sep->pdev->dev, - "got back %x; expected %x\n", - in_ary[0], op_code); - return SEP_WRONG_OPCODE; - } - - if (in_ary[1] != SEP_OK) { - dev_warn(&sep->pdev->dev, - "sep execution error\n"); - dev_warn(&sep->pdev->dev, - "got back %x; expected %x\n", - in_ary[1], SEP_OK); - return in_ary[0]; - } - -return 0; -} - -/** - * sep_read_context - - * @ta_ctx: pointer to struct this_task_ctx - * @msg_offset: point to current place in SEP msg; is updated - * @dst: pointer to place to put the context - * @len: size of the context structure (differs for crypro/hash) - * This function reads the context from the msg area - * There is a special way the vendor needs to have the maximum - * length calculated so that the msg_offset is updated properly; - * it skips over some words in the msg area depending on the size - * of the context - */ -static void sep_read_context(struct this_task_ctx *ta_ctx, u32 *msg_offset, - void *dst, u32 len) -{ - u32 max_length = ((len + 3) / sizeof(u32)) * sizeof(u32); - - sep_read_msg(ta_ctx, dst, len, max_length, msg_offset, 0); -} - -/** - * sep_write_context - - * @ta_ctx: pointer to struct this_task_ctx - * @msg_offset: point to current place in SEP msg; is updated - * @src: pointer to the current context - * @len: size of the context structure (differs for crypro/hash) - * This function writes the context to the msg area - * There is a special way the vendor needs to have the maximum - * length calculated so that the msg_offset is updated properly; - * it skips over some words in the msg area depending on the size - * of the context - */ -static void sep_write_context(struct this_task_ctx *ta_ctx, u32 *msg_offset, - void *src, u32 len) -{ - u32 max_length = ((len + 3) / sizeof(u32)) * sizeof(u32); - - sep_write_msg(ta_ctx, src, len, max_length, msg_offset, 0); -} - -/** - * sep_clear_out - - * @ta_ctx: pointer to struct this_task_ctx - * Clear out crypto related values in sep device structure - * to enable device to be used by anyone; either kernel - * crypto or userspace app via middleware - */ -static void sep_clear_out(struct this_task_ctx *ta_ctx) -{ - if (ta_ctx->src_sg_hold) { - sep_free_sg_buf(ta_ctx->src_sg_hold); - ta_ctx->src_sg_hold = NULL; - } - - if (ta_ctx->dst_sg_hold) { - sep_free_sg_buf(ta_ctx->dst_sg_hold); - ta_ctx->dst_sg_hold = NULL; - } - - ta_ctx->src_sg = NULL; - ta_ctx->dst_sg = NULL; - - sep_free_dma_table_data_handler(ta_ctx->sep_used, &ta_ctx->dma_ctx); - - if (ta_ctx->i_own_sep) { - /** - * The following unlocks the sep and makes it available - * to any other application - * First, null out crypto entries in sep before releasing it - */ - ta_ctx->sep_used->current_hash_req = NULL; - ta_ctx->sep_used->current_cypher_req = NULL; - ta_ctx->sep_used->current_request = 0; - ta_ctx->sep_used->current_hash_stage = 0; - ta_ctx->sep_used->ta_ctx = NULL; - ta_ctx->sep_used->in_kernel = 0; - - ta_ctx->call_status.status = 0; - - /* Remove anything confidential */ - memset(ta_ctx->sep_used->shared_addr, 0, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - sep_queue_status_remove(ta_ctx->sep_used, &ta_ctx->queue_elem); - -#ifdef SEP_ENABLE_RUNTIME_PM - ta_ctx->sep_used->in_use = 0; - pm_runtime_mark_last_busy(&ta_ctx->sep_used->pdev->dev); - pm_runtime_put_autosuspend(&ta_ctx->sep_used->pdev->dev); -#endif - - clear_bit(SEP_WORKING_LOCK_BIT, - &ta_ctx->sep_used->in_use_flags); - ta_ctx->sep_used->pid_doing_transaction = 0; - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "[PID%d] waking up next transaction\n", - current->pid); - - clear_bit(SEP_TRANSACTION_STARTED_LOCK_BIT, - &ta_ctx->sep_used->in_use_flags); - wake_up(&ta_ctx->sep_used->event_transactions); - - ta_ctx->i_own_sep = 0; - } -} - -/** - * Release crypto infrastructure from EINPROGRESS and - * clear sep_dev so that SEP is available to anyone - */ -static void sep_crypto_release(struct sep_system_ctx *sctx, - struct this_task_ctx *ta_ctx, u32 error) -{ - struct ahash_request *hash_req = ta_ctx->current_hash_req; - struct ablkcipher_request *cypher_req = - ta_ctx->current_cypher_req; - struct sep_device *sep = ta_ctx->sep_used; - - sep_clear_out(ta_ctx); - - /** - * This may not yet exist depending when we - * chose to bail out. If it does exist, set - * it to 1 - */ - if (ta_ctx->are_we_done_yet != NULL) - *ta_ctx->are_we_done_yet = 1; - - if (cypher_req != NULL) { - if ((sctx->key_sent == 1) || - ((error != 0) && (error != -EINPROGRESS))) { - if (cypher_req->base.complete == NULL) { - dev_dbg(&sep->pdev->dev, - "release is null for cypher!"); - } else { - cypher_req->base.complete( - &cypher_req->base, error); - } - } - } - - if (hash_req != NULL) { - if (hash_req->base.complete == NULL) { - dev_dbg(&sep->pdev->dev, - "release is null for hash!"); - } else { - hash_req->base.complete( - &hash_req->base, error); - } - } -} - -/** - * This is where we grab the sep itself and tell it to do something. - * It will sleep if the sep is currently busy - * and it will return 0 if sep is now ours; error value if there - * were problems - */ -static int sep_crypto_take_sep(struct this_task_ctx *ta_ctx) -{ - struct sep_device *sep = ta_ctx->sep_used; - int result; - struct sep_msgarea_hdr *my_msg_header; - - my_msg_header = (struct sep_msgarea_hdr *)ta_ctx->msg; - - /* add to status queue */ - ta_ctx->queue_elem = sep_queue_status_add(sep, my_msg_header->opcode, - ta_ctx->nbytes, current->pid, - current->comm, sizeof(current->comm)); - - if (!ta_ctx->queue_elem) { - dev_dbg(&sep->pdev->dev, - "[PID%d] updating queue status error\n", current->pid); - return -EINVAL; - } - - /* get the device; this can sleep */ - result = sep_wait_transaction(sep); - if (result) - return result; - - if (sep_dev->power_save_setup == 1) - pm_runtime_get_sync(&sep_dev->pdev->dev); - - /* Copy in the message */ - memcpy(sep->shared_addr, ta_ctx->msg, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - /* Copy in the dcb information if there is any */ - if (ta_ctx->dcb_region) { - result = sep_activate_dcb_dmatables_context(sep, - &ta_ctx->dcb_region, &ta_ctx->dmatables_region, - ta_ctx->dma_ctx); - if (result) - return result; - } - - /* Mark the device so we know how to finish the job in the tasklet */ - if (ta_ctx->current_hash_req) - sep->current_hash_req = ta_ctx->current_hash_req; - else - sep->current_cypher_req = ta_ctx->current_cypher_req; - - sep->current_request = ta_ctx->current_request; - sep->current_hash_stage = ta_ctx->current_hash_stage; - sep->ta_ctx = ta_ctx; - sep->in_kernel = 1; - ta_ctx->i_own_sep = 1; - - /* need to set bit first to avoid race condition with interrupt */ - set_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, &ta_ctx->call_status.status); - - result = sep_send_command_handler(sep); - - dev_dbg(&sep->pdev->dev, "[PID%d]: sending command to the sep\n", - current->pid); - - if (!result) - dev_dbg(&sep->pdev->dev, "[PID%d]: command sent okay\n", - current->pid); - else { - dev_dbg(&sep->pdev->dev, "[PID%d]: cant send command\n", - current->pid); - clear_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &ta_ctx->call_status.status); - } - - return result; -} - -/** - * This function sets things up for a crypto data block process - * This does all preparation, but does not try to grab the - * sep - * @req: pointer to struct ablkcipher_request - * returns: 0 if all went well, non zero if error - */ -static int sep_crypto_block_data(struct ablkcipher_request *req) -{ - - int int_error; - u32 msg_offset; - static u32 msg[10]; - void *src_ptr; - void *dst_ptr; - - static char small_buf[100]; - ssize_t copy_result; - int result; - - struct scatterlist *new_sg; - struct this_task_ctx *ta_ctx; - struct crypto_ablkcipher *tfm; - struct sep_system_ctx *sctx; - - struct sep_des_internal_context *des_internal; - struct sep_aes_internal_context *aes_internal; - - ta_ctx = ablkcipher_request_ctx(req); - tfm = crypto_ablkcipher_reqtfm(req); - sctx = crypto_ablkcipher_ctx(tfm); - - /* start the walk on scatterlists */ - ablkcipher_walk_init(&ta_ctx->walk, req->src, req->dst, req->nbytes); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "sep crypto block data size of %x\n", - req->nbytes); - - int_error = ablkcipher_walk_phys(req, &ta_ctx->walk); - if (int_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "walk phys error %x\n", - int_error); - return -ENOMEM; - } - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "crypto block: src is %lx dst is %lx\n", - (unsigned long)req->src, (unsigned long)req->dst); - - /* Make sure all pages are even block */ - int_error = sep_oddball_pages(ta_ctx->sep_used, req->src, - req->nbytes, ta_ctx->walk.blocksize, &new_sg, 1); - - if (int_error < 0) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "oddball page error\n"); - return int_error; - } else if (int_error == 1) { - ta_ctx->src_sg = new_sg; - ta_ctx->src_sg_hold = new_sg; - } else { - ta_ctx->src_sg = req->src; - ta_ctx->src_sg_hold = NULL; - } - - int_error = sep_oddball_pages(ta_ctx->sep_used, req->dst, - req->nbytes, ta_ctx->walk.blocksize, &new_sg, 0); - - if (int_error < 0) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "walk phys error %x\n", - int_error); - return int_error; - } else if (int_error == 1) { - ta_ctx->dst_sg = new_sg; - ta_ctx->dst_sg_hold = new_sg; - } else { - ta_ctx->dst_sg = req->dst; - ta_ctx->dst_sg_hold = NULL; - } - - /* set nbytes for queue status */ - ta_ctx->nbytes = req->nbytes; - - /* Key already done; this is for data */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, "sending data\n"); - - /* check for valid data and proper spacing */ - src_ptr = sg_virt(ta_ctx->src_sg); - dst_ptr = sg_virt(ta_ctx->dst_sg); - - if (!src_ptr || !dst_ptr || - (ta_ctx->current_cypher_req->nbytes % - crypto_ablkcipher_blocksize(tfm))) { - - dev_warn(&ta_ctx->sep_used->pdev->dev, - "cipher block size odd\n"); - dev_warn(&ta_ctx->sep_used->pdev->dev, - "cipher block size is %x\n", - crypto_ablkcipher_blocksize(tfm)); - dev_warn(&ta_ctx->sep_used->pdev->dev, - "cipher data size is %x\n", - ta_ctx->current_cypher_req->nbytes); - return -EINVAL; - } - - if (partial_overlap(src_ptr, dst_ptr, - ta_ctx->current_cypher_req->nbytes)) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "block partial overlap\n"); - return -EINVAL; - } - - /* Put together the message */ - sep_make_header(ta_ctx, &msg_offset, ta_ctx->block_opcode); - - /* If des, and size is 1 block, put directly in msg */ - if ((ta_ctx->block_opcode == SEP_DES_BLOCK_OPCODE) && - (req->nbytes == crypto_ablkcipher_blocksize(tfm))) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "writing out one block des\n"); - - copy_result = sg_copy_to_buffer( - ta_ctx->src_sg, sep_sg_nents(ta_ctx->src_sg), - small_buf, crypto_ablkcipher_blocksize(tfm)); - - if (copy_result != crypto_ablkcipher_blocksize(tfm)) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "des block copy failed\n"); - return -ENOMEM; - } - - /* Put data into message */ - sep_write_msg(ta_ctx, small_buf, - crypto_ablkcipher_blocksize(tfm), - crypto_ablkcipher_blocksize(tfm) * 2, - &msg_offset, 1); - - /* Put size into message */ - sep_write_msg(ta_ctx, &req->nbytes, - sizeof(u32), sizeof(u32), &msg_offset, 0); - } else { - /* Otherwise, fill out dma tables */ - ta_ctx->dcb_input_data.app_in_address = src_ptr; - ta_ctx->dcb_input_data.data_in_size = req->nbytes; - ta_ctx->dcb_input_data.app_out_address = dst_ptr; - ta_ctx->dcb_input_data.block_size = - crypto_ablkcipher_blocksize(tfm); - ta_ctx->dcb_input_data.tail_block_size = 0; - ta_ctx->dcb_input_data.is_applet = 0; - ta_ctx->dcb_input_data.src_sg = ta_ctx->src_sg; - ta_ctx->dcb_input_data.dst_sg = ta_ctx->dst_sg; - - result = sep_create_dcb_dmatables_context_kernel( - ta_ctx->sep_used, - &ta_ctx->dcb_region, - &ta_ctx->dmatables_region, - &ta_ctx->dma_ctx, - &ta_ctx->dcb_input_data, - 1); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "crypto dma table create failed\n"); - return -EINVAL; - } - - /* Portion of msg is nulled (no data) */ - msg[0] = (u32)0; - msg[1] = (u32)0; - msg[2] = (u32)0; - msg[3] = (u32)0; - msg[4] = (u32)0; - sep_write_msg(ta_ctx, (void *)msg, sizeof(u32) * 5, - sizeof(u32) * 5, &msg_offset, 0); - } - - /** - * Before we write the message, we need to overwrite the - * vendor's IV with the one from our own ablkcipher walk - * iv because this is needed for dm-crypt - */ - sep_dump_ivs(req, "sending data block to sep\n"); - if ((ta_ctx->current_request == DES_CBC) && - (ta_ctx->des_opmode == SEP_DES_CBC)) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "overwrite vendor iv on DES\n"); - des_internal = (struct sep_des_internal_context *) - sctx->des_private_ctx.ctx_buf; - memcpy((void *)des_internal->iv_context, - ta_ctx->walk.iv, crypto_ablkcipher_ivsize(tfm)); - } else if ((ta_ctx->current_request == AES_CBC) && - (ta_ctx->aes_opmode == SEP_AES_CBC)) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "overwrite vendor iv on AES\n"); - aes_internal = (struct sep_aes_internal_context *) - sctx->aes_private_ctx.cbuff; - memcpy((void *)aes_internal->aes_ctx_iv, - ta_ctx->walk.iv, crypto_ablkcipher_ivsize(tfm)); - } - - /* Write context into message */ - if (ta_ctx->block_opcode == SEP_DES_BLOCK_OPCODE) { - sep_write_context(ta_ctx, &msg_offset, - &sctx->des_private_ctx, - sizeof(struct sep_des_private_context)); - } else { - sep_write_context(ta_ctx, &msg_offset, - &sctx->aes_private_ctx, - sizeof(struct sep_aes_private_context)); - } - - /* conclude message */ - sep_end_msg(ta_ctx, msg_offset); - - /* Parent (caller) is now ready to tell the sep to do ahead */ - return 0; -} - - -/** - * This function sets things up for a crypto key submit process - * This does all preparation, but does not try to grab the - * sep - * @req: pointer to struct ablkcipher_request - * returns: 0 if all went well, non zero if error - */ -static int sep_crypto_send_key(struct ablkcipher_request *req) -{ - - int int_error; - u32 msg_offset; - static u32 msg[10]; - - u32 max_length; - struct this_task_ctx *ta_ctx; - struct crypto_ablkcipher *tfm; - struct sep_system_ctx *sctx; - - ta_ctx = ablkcipher_request_ctx(req); - tfm = crypto_ablkcipher_reqtfm(req); - sctx = crypto_ablkcipher_ctx(tfm); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, "sending key\n"); - - /* start the walk on scatterlists */ - ablkcipher_walk_init(&ta_ctx->walk, req->src, req->dst, req->nbytes); - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep crypto block data size of %x\n", req->nbytes); - - int_error = ablkcipher_walk_phys(req, &ta_ctx->walk); - if (int_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "walk phys error %x\n", - int_error); - return -ENOMEM; - } - - /* check iv */ - if ((ta_ctx->current_request == DES_CBC) && - (ta_ctx->des_opmode == SEP_DES_CBC)) { - if (!ta_ctx->walk.iv) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "no iv found\n"); - return -EINVAL; - } - - memcpy(ta_ctx->iv, ta_ctx->walk.iv, SEP_DES_IV_SIZE_BYTES); - } - - if ((ta_ctx->current_request == AES_CBC) && - (ta_ctx->aes_opmode == SEP_AES_CBC)) { - if (!ta_ctx->walk.iv) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "no iv found\n"); - return -EINVAL; - } - - memcpy(ta_ctx->iv, ta_ctx->walk.iv, SEP_AES_IV_SIZE_BYTES); - } - - /* put together message to SEP */ - /* Start with op code */ - sep_make_header(ta_ctx, &msg_offset, ta_ctx->init_opcode); - - /* now deal with IV */ - if (ta_ctx->init_opcode == SEP_DES_INIT_OPCODE) { - if (ta_ctx->des_opmode == SEP_DES_CBC) { - sep_write_msg(ta_ctx, ta_ctx->iv, - SEP_DES_IV_SIZE_BYTES, sizeof(u32) * 4, - &msg_offset, 1); - } else { - /* Skip if ECB */ - msg_offset += 4 * sizeof(u32); - } - } else { - max_length = ((SEP_AES_IV_SIZE_BYTES + 3) / - sizeof(u32)) * sizeof(u32); - if (ta_ctx->aes_opmode == SEP_AES_CBC) { - sep_write_msg(ta_ctx, ta_ctx->iv, - SEP_AES_IV_SIZE_BYTES, max_length, - &msg_offset, 1); - } else { - /* Skip if ECB */ - msg_offset += max_length; - } - } - - /* load the key */ - if (ta_ctx->init_opcode == SEP_DES_INIT_OPCODE) { - sep_write_msg(ta_ctx, (void *)&sctx->key.des.key1, - sizeof(u32) * 8, sizeof(u32) * 8, - &msg_offset, 1); - - msg[0] = (u32)sctx->des_nbr_keys; - msg[1] = (u32)ta_ctx->des_encmode; - msg[2] = (u32)ta_ctx->des_opmode; - - sep_write_msg(ta_ctx, (void *)msg, - sizeof(u32) * 3, sizeof(u32) * 3, - &msg_offset, 0); - } else { - sep_write_msg(ta_ctx, (void *)&sctx->key.aes, - sctx->keylen, - SEP_AES_MAX_KEY_SIZE_BYTES, - &msg_offset, 1); - - msg[0] = (u32)sctx->aes_key_size; - msg[1] = (u32)ta_ctx->aes_encmode; - msg[2] = (u32)ta_ctx->aes_opmode; - msg[3] = (u32)0; /* Secret key is not used */ - sep_write_msg(ta_ctx, (void *)msg, - sizeof(u32) * 4, sizeof(u32) * 4, - &msg_offset, 0); - } - - /* conclude message */ - sep_end_msg(ta_ctx, msg_offset); - - /* Parent (caller) is now ready to tell the sep to do ahead */ - return 0; -} - - -/* This needs to be run as a work queue as it can be put asleep */ -static void sep_crypto_block(void *data) -{ - unsigned long end_time; - - int result; - - struct ablkcipher_request *req; - struct this_task_ctx *ta_ctx; - struct crypto_ablkcipher *tfm; - struct sep_system_ctx *sctx; - int are_we_done_yet; - - req = (struct ablkcipher_request *)data; - ta_ctx = ablkcipher_request_ctx(req); - tfm = crypto_ablkcipher_reqtfm(req); - sctx = crypto_ablkcipher_ctx(tfm); - - ta_ctx->are_we_done_yet = &are_we_done_yet; - - pr_debug("sep_crypto_block\n"); - pr_debug("tfm is %p sctx is %p ta_ctx is %p\n", - tfm, sctx, ta_ctx); - pr_debug("key_sent is %d\n", sctx->key_sent); - - /* do we need to send the key */ - if (sctx->key_sent == 0) { - are_we_done_yet = 0; - result = sep_crypto_send_key(req); /* prep to send key */ - if (result != 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "could not prep key %x\n", result); - sep_crypto_release(sctx, ta_ctx, result); - return; - } - - result = sep_crypto_take_sep(ta_ctx); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_crypto_take_sep for key send failed\n"); - sep_crypto_release(sctx, ta_ctx, result); - return; - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && - (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "Send key job never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - - /* Set the key sent variable so this can be skipped later */ - sctx->key_sent = 1; - } - - /* Key sent (or maybe not if we did not have to), now send block */ - are_we_done_yet = 0; - - result = sep_crypto_block_data(req); - - if (result != 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "could prep not send block %x\n", result); - sep_crypto_release(sctx, ta_ctx, result); - return; - } - - result = sep_crypto_take_sep(ta_ctx); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_crypto_take_sep for block send failed\n"); - sep_crypto_release(sctx, ta_ctx, result); - return; - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "Send block job never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - - /* That's it; entire thing done, get out of queue */ - - pr_debug("crypto_block leaving\n"); - pr_debug("tfm is %p sctx is %p ta_ctx is %p\n", tfm, sctx, ta_ctx); -} - -/** - * Post operation (after interrupt) for crypto block - */ -static u32 crypto_post_op(struct sep_device *sep) -{ - /* HERE */ - u32 u32_error; - u32 msg_offset; - - ssize_t copy_result; - static char small_buf[100]; - - struct ablkcipher_request *req; - struct this_task_ctx *ta_ctx; - struct sep_system_ctx *sctx; - struct crypto_ablkcipher *tfm; - - struct sep_des_internal_context *des_internal; - struct sep_aes_internal_context *aes_internal; - - if (!sep->current_cypher_req) - return -EINVAL; - - /* hold req since we need to submit work after clearing sep */ - req = sep->current_cypher_req; - - ta_ctx = ablkcipher_request_ctx(sep->current_cypher_req); - tfm = crypto_ablkcipher_reqtfm(sep->current_cypher_req); - sctx = crypto_ablkcipher_ctx(tfm); - - pr_debug("crypto_post op\n"); - pr_debug("key_sent is %d tfm is %p sctx is %p ta_ctx is %p\n", - sctx->key_sent, tfm, sctx, ta_ctx); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, "crypto post_op\n"); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "crypto post_op message dump\n"); - - /* first bring msg from shared area to local area */ - memcpy(ta_ctx->msg, sep->shared_addr, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - /* Is this the result of performing init (key to SEP */ - if (sctx->key_sent == 0) { - - /* Did SEP do it okay */ - u32_error = sep_verify_op(ta_ctx, ta_ctx->init_opcode, - &msg_offset); - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "aes init error %x\n", u32_error); - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* Read Context */ - if (ta_ctx->init_opcode == SEP_DES_INIT_OPCODE) { - sep_read_context(ta_ctx, &msg_offset, - &sctx->des_private_ctx, - sizeof(struct sep_des_private_context)); - } else { - sep_read_context(ta_ctx, &msg_offset, - &sctx->aes_private_ctx, - sizeof(struct sep_aes_private_context)); - } - - sep_dump_ivs(req, "after sending key to sep\n"); - - /* key sent went okay; release sep, and set are_we_done_yet */ - sctx->key_sent = 1; - sep_crypto_release(sctx, ta_ctx, -EINPROGRESS); - - } else { - - /** - * This is the result of a block request - */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "crypto_post_op block response\n"); - - u32_error = sep_verify_op(ta_ctx, ta_ctx->block_opcode, - &msg_offset); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep block error %x\n", u32_error); - sep_crypto_release(sctx, ta_ctx, u32_error); - return -EINVAL; - } - - if (ta_ctx->block_opcode == SEP_DES_BLOCK_OPCODE) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "post op for DES\n"); - - /* special case for 1 block des */ - if (sep->current_cypher_req->nbytes == - crypto_ablkcipher_blocksize(tfm)) { - - sep_read_msg(ta_ctx, small_buf, - crypto_ablkcipher_blocksize(tfm), - crypto_ablkcipher_blocksize(tfm) * 2, - &msg_offset, 1); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "reading in block des\n"); - - copy_result = sg_copy_from_buffer( - ta_ctx->dst_sg, - sep_sg_nents(ta_ctx->dst_sg), - small_buf, - crypto_ablkcipher_blocksize(tfm)); - - if (copy_result != - crypto_ablkcipher_blocksize(tfm)) { - - dev_warn(&ta_ctx->sep_used->pdev->dev, - "des block copy failed\n"); - sep_crypto_release(sctx, ta_ctx, - -ENOMEM); - return -ENOMEM; - } - } - - /* Read Context */ - sep_read_context(ta_ctx, &msg_offset, - &sctx->des_private_ctx, - sizeof(struct sep_des_private_context)); - } else { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "post op for AES\n"); - - /* Skip the MAC Output */ - msg_offset += (sizeof(u32) * 4); - - /* Read Context */ - sep_read_context(ta_ctx, &msg_offset, - &sctx->aes_private_ctx, - sizeof(struct sep_aes_private_context)); - } - - /* Copy to correct sg if this block had oddball pages */ - if (ta_ctx->dst_sg_hold) - sep_copy_sg(ta_ctx->sep_used, - ta_ctx->dst_sg, - ta_ctx->current_cypher_req->dst, - ta_ctx->current_cypher_req->nbytes); - - /** - * Copy the iv's back to the walk.iv - * This is required for dm_crypt - */ - sep_dump_ivs(req, "got data block from sep\n"); - if ((ta_ctx->current_request == DES_CBC) && - (ta_ctx->des_opmode == SEP_DES_CBC)) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "returning result iv to walk on DES\n"); - des_internal = (struct sep_des_internal_context *) - sctx->des_private_ctx.ctx_buf; - memcpy(ta_ctx->walk.iv, - (void *)des_internal->iv_context, - crypto_ablkcipher_ivsize(tfm)); - } else if ((ta_ctx->current_request == AES_CBC) && - (ta_ctx->aes_opmode == SEP_AES_CBC)) { - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "returning result iv to walk on AES\n"); - aes_internal = (struct sep_aes_internal_context *) - sctx->aes_private_ctx.cbuff; - memcpy(ta_ctx->walk.iv, - (void *)aes_internal->aes_ctx_iv, - crypto_ablkcipher_ivsize(tfm)); - } - - /* finished, release everything */ - sep_crypto_release(sctx, ta_ctx, 0); - } - pr_debug("crypto_post_op done\n"); - pr_debug("key_sent is %d tfm is %p sctx is %p ta_ctx is %p\n", - sctx->key_sent, tfm, sctx, ta_ctx); - - return 0; -} - -static u32 hash_init_post_op(struct sep_device *sep) -{ - u32 u32_error; - u32 msg_offset; - struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); - struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); - struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash init post op\n"); - - /* first bring msg from shared area to local area */ - memcpy(ta_ctx->msg, sep->shared_addr, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - u32_error = sep_verify_op(ta_ctx, SEP_HASH_INIT_OPCODE, - &msg_offset); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "hash init error %x\n", - u32_error); - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* Read Context */ - sep_read_context(ta_ctx, &msg_offset, - &sctx->hash_private_ctx, - sizeof(struct sep_hash_private_context)); - - /* Signal to crypto infrastructure and clear out */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash init post op done\n"); - sep_crypto_release(sctx, ta_ctx, 0); - return 0; -} - -static u32 hash_update_post_op(struct sep_device *sep) -{ - u32 u32_error; - u32 msg_offset; - struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); - struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); - struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash update post op\n"); - - /* first bring msg from shared area to local area */ - memcpy(ta_ctx->msg, sep->shared_addr, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - u32_error = sep_verify_op(ta_ctx, SEP_HASH_UPDATE_OPCODE, - &msg_offset); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "hash init error %x\n", - u32_error); - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* Read Context */ - sep_read_context(ta_ctx, &msg_offset, - &sctx->hash_private_ctx, - sizeof(struct sep_hash_private_context)); - - /** - * Following is only for finup; if we just completed the - * data portion of finup, we now need to kick off the - * finish portion of finup. - */ - - if (ta_ctx->sep_used->current_hash_stage == HASH_FINUP_DATA) { - - /* first reset stage to HASH_FINUP_FINISH */ - ta_ctx->sep_used->current_hash_stage = HASH_FINUP_FINISH; - - /* now enqueue the finish operation */ - spin_lock_irq(&queue_lock); - u32_error = crypto_enqueue_request(&sep_queue, - &ta_ctx->sep_used->current_hash_req->base); - spin_unlock_irq(&queue_lock); - - if ((u32_error != 0) && (u32_error != -EINPROGRESS)) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "spe cypher post op cant queue\n"); - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* schedule the data send */ - u32_error = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "cant submit work sep_crypto_block\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return -EINVAL; - } - } - - /* Signal to crypto infrastructure and clear out */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash update post op done\n"); - sep_crypto_release(sctx, ta_ctx, 0); - return 0; -} - -static u32 hash_final_post_op(struct sep_device *sep) -{ - int max_length; - u32 u32_error; - u32 msg_offset; - struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); - struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); - struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash final post op\n"); - - /* first bring msg from shared area to local area */ - memcpy(ta_ctx->msg, sep->shared_addr, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - u32_error = sep_verify_op(ta_ctx, SEP_HASH_FINISH_OPCODE, - &msg_offset); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, "hash finish error %x\n", - u32_error); - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* Grab the result */ - if (ta_ctx->current_hash_req->result == NULL) { - /* Oops, null buffer; error out here */ - dev_warn(&ta_ctx->sep_used->pdev->dev, - "hash finish null buffer\n"); - sep_crypto_release(sctx, ta_ctx, (u32)-ENOMEM); - return -ENOMEM; - } - - max_length = (((SEP_HASH_RESULT_SIZE_WORDS * sizeof(u32)) + 3) / - sizeof(u32)) * sizeof(u32); - - sep_read_msg(ta_ctx, - ta_ctx->current_hash_req->result, - crypto_ahash_digestsize(tfm), max_length, - &msg_offset, 0); - - /* Signal to crypto infrastructure and clear out */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, "hash finish post op done\n"); - sep_crypto_release(sctx, ta_ctx, 0); - return 0; -} - -static u32 hash_digest_post_op(struct sep_device *sep) -{ - int max_length; - u32 u32_error; - u32 msg_offset; - struct crypto_ahash *tfm = crypto_ahash_reqtfm(sep->current_hash_req); - struct sep_system_ctx *sctx = crypto_ahash_ctx(tfm); - struct this_task_ctx *ta_ctx = ahash_request_ctx(sep->current_hash_req); - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash digest post op\n"); - - /* first bring msg from shared area to local area */ - memcpy(ta_ctx->msg, sep->shared_addr, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - u32_error = sep_verify_op(ta_ctx, SEP_HASH_SINGLE_OPCODE, - &msg_offset); - - if (u32_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "hash digest finish error %x\n", u32_error); - - sep_crypto_release(sctx, ta_ctx, u32_error); - return u32_error; - } - - /* Grab the result */ - if (ta_ctx->current_hash_req->result == NULL) { - /* Oops, null buffer; error out here */ - dev_warn(&ta_ctx->sep_used->pdev->dev, - "hash digest finish null buffer\n"); - sep_crypto_release(sctx, ta_ctx, (u32)-ENOMEM); - return -ENOMEM; - } - - max_length = (((SEP_HASH_RESULT_SIZE_WORDS * sizeof(u32)) + 3) / - sizeof(u32)) * sizeof(u32); - - sep_read_msg(ta_ctx, - ta_ctx->current_hash_req->result, - crypto_ahash_digestsize(tfm), max_length, - &msg_offset, 0); - - /* Signal to crypto infrastructure and clear out */ - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash digest finish post op done\n"); - - sep_crypto_release(sctx, ta_ctx, 0); - return 0; -} - -/** - * The sep_finish function is the function that is scheduled (via tasklet) - * by the interrupt service routine when the SEP sends and interrupt - * This is only called by the interrupt handler as a tasklet. - */ -static void sep_finish(unsigned long data) -{ - struct sep_device *sep_dev; - int res; - - res = 0; - - if (data == 0) { - pr_debug("sep_finish called with null data\n"); - return; - } - - sep_dev = (struct sep_device *)data; - if (sep_dev == NULL) { - pr_debug("sep_finish; sep_dev is NULL\n"); - return; - } - - if (sep_dev->in_kernel == (u32)0) { - dev_warn(&sep_dev->pdev->dev, - "sep_finish; not in kernel operation\n"); - return; - } - - /* Did we really do a sep command prior to this? */ - if (0 == test_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &sep_dev->ta_ctx->call_status.status)) { - - dev_warn(&sep_dev->pdev->dev, "[PID%d] sendmsg not called\n", - current->pid); - return; - } - - if (sep_dev->send_ct != sep_dev->reply_ct) { - dev_warn(&sep_dev->pdev->dev, - "[PID%d] poll; no message came back\n", - current->pid); - return; - } - - /* Check for error (In case time ran out) */ - if ((res != 0x0) && (res != 0x8)) { - dev_warn(&sep_dev->pdev->dev, - "[PID%d] poll; poll error GPR3 is %x\n", - current->pid, res); - return; - } - - /* What kind of interrupt from sep was this? */ - res = sep_read_reg(sep_dev, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - - dev_dbg(&sep_dev->pdev->dev, "[PID%d] GPR2 at crypto finish is %x\n", - current->pid, res); - - /* Print request? */ - if ((res >> 30) & 0x1) { - dev_dbg(&sep_dev->pdev->dev, "[PID%d] sep print req\n", - current->pid); - dev_dbg(&sep_dev->pdev->dev, "[PID%d] contents: %s\n", - current->pid, - (char *)(sep_dev->shared_addr + - SEP_DRIVER_PRINTF_OFFSET_IN_BYTES)); - return; - } - - /* Request for daemon (not currently in POR)? */ - if (res >> 31) { - dev_dbg(&sep_dev->pdev->dev, - "[PID%d] sep request; ignoring\n", - current->pid); - return; - } - - /* If we got here, then we have a replay to a sep command */ - - dev_dbg(&sep_dev->pdev->dev, - "[PID%d] sep reply to command; processing request: %x\n", - current->pid, sep_dev->current_request); - - switch (sep_dev->current_request) { - case AES_CBC: - case AES_ECB: - case DES_CBC: - case DES_ECB: - res = crypto_post_op(sep_dev); - break; - case SHA1: - case MD5: - case SHA224: - case SHA256: - switch (sep_dev->current_hash_stage) { - case HASH_INIT: - res = hash_init_post_op(sep_dev); - break; - case HASH_UPDATE: - case HASH_FINUP_DATA: - res = hash_update_post_op(sep_dev); - break; - case HASH_FINUP_FINISH: - case HASH_FINISH: - res = hash_final_post_op(sep_dev); - break; - case HASH_DIGEST: - res = hash_digest_post_op(sep_dev); - break; - default: - pr_debug("sep - invalid stage for hash finish\n"); - } - break; - default: - pr_debug("sep - invalid request for finish\n"); - } - - if (res) - pr_debug("sep - finish returned error %x\n", res); -} - -static int sep_hash_cra_init(struct crypto_tfm *tfm) - { - const char *alg_name = crypto_tfm_alg_name(tfm); - - pr_debug("sep_hash_cra_init name is %s\n", alg_name); - - crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), - sizeof(struct this_task_ctx)); - return 0; - } - -static void sep_hash_cra_exit(struct crypto_tfm *tfm) -{ - pr_debug("sep_hash_cra_exit\n"); -} - -static void sep_hash_init(void *data) -{ - u32 msg_offset; - int result; - struct ahash_request *req; - struct crypto_ahash *tfm; - struct this_task_ctx *ta_ctx; - struct sep_system_ctx *sctx; - unsigned long end_time; - int are_we_done_yet; - - req = (struct ahash_request *)data; - tfm = crypto_ahash_reqtfm(req); - sctx = crypto_ahash_ctx(tfm); - ta_ctx = ahash_request_ctx(req); - ta_ctx->sep_used = sep_dev; - - ta_ctx->are_we_done_yet = &are_we_done_yet; - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep_hash_init\n"); - ta_ctx->current_hash_stage = HASH_INIT; - /* opcode and mode */ - sep_make_header(ta_ctx, &msg_offset, SEP_HASH_INIT_OPCODE); - sep_write_msg(ta_ctx, &ta_ctx->hash_opmode, - sizeof(u32), sizeof(u32), &msg_offset, 0); - sep_end_msg(ta_ctx, msg_offset); - - are_we_done_yet = 0; - result = sep_crypto_take_sep(ta_ctx); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_hash_init take sep failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash init never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - -} - -static void sep_hash_update(void *data) -{ - int int_error; - u32 msg_offset; - u32 len; - struct sep_hash_internal_context *int_ctx; - u32 block_size; - u32 head_len; - u32 tail_len; - int are_we_done_yet; - - static u32 msg[10]; - static char small_buf[100]; - void *src_ptr; - struct scatterlist *new_sg; - ssize_t copy_result; - struct ahash_request *req; - struct crypto_ahash *tfm; - struct this_task_ctx *ta_ctx; - struct sep_system_ctx *sctx; - unsigned long end_time; - - req = (struct ahash_request *)data; - tfm = crypto_ahash_reqtfm(req); - sctx = crypto_ahash_ctx(tfm); - ta_ctx = ahash_request_ctx(req); - ta_ctx->sep_used = sep_dev; - - ta_ctx->are_we_done_yet = &are_we_done_yet; - - /* length for queue status */ - ta_ctx->nbytes = req->nbytes; - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep_hash_update\n"); - ta_ctx->current_hash_stage = HASH_UPDATE; - len = req->nbytes; - - block_size = crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm)); - tail_len = req->nbytes % block_size; - dev_dbg(&ta_ctx->sep_used->pdev->dev, "length is %x\n", len); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "block_size is %x\n", block_size); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "tail len is %x\n", tail_len); - - /* Compute header/tail sizes */ - int_ctx = (struct sep_hash_internal_context *)&sctx-> - hash_private_ctx.internal_context; - head_len = (block_size - int_ctx->prev_update_bytes) % block_size; - tail_len = (req->nbytes - head_len) % block_size; - - /* Make sure all pages are an even block */ - int_error = sep_oddball_pages(ta_ctx->sep_used, req->src, - req->nbytes, - block_size, &new_sg, 1); - - if (int_error < 0) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "oddball pages error in crash update\n"); - sep_crypto_release(sctx, ta_ctx, -ENOMEM); - return; - } else if (int_error == 1) { - ta_ctx->src_sg = new_sg; - ta_ctx->src_sg_hold = new_sg; - } else { - ta_ctx->src_sg = req->src; - ta_ctx->src_sg_hold = NULL; - } - - src_ptr = sg_virt(ta_ctx->src_sg); - - if ((!req->nbytes) || (!ta_ctx->src_sg)) { - /* null data */ - src_ptr = NULL; - } - - ta_ctx->dcb_input_data.app_in_address = src_ptr; - ta_ctx->dcb_input_data.data_in_size = - req->nbytes - (head_len + tail_len); - ta_ctx->dcb_input_data.app_out_address = NULL; - ta_ctx->dcb_input_data.block_size = block_size; - ta_ctx->dcb_input_data.tail_block_size = 0; - ta_ctx->dcb_input_data.is_applet = 0; - ta_ctx->dcb_input_data.src_sg = ta_ctx->src_sg; - ta_ctx->dcb_input_data.dst_sg = NULL; - - int_error = sep_create_dcb_dmatables_context_kernel( - ta_ctx->sep_used, - &ta_ctx->dcb_region, - &ta_ctx->dmatables_region, - &ta_ctx->dma_ctx, - &ta_ctx->dcb_input_data, - 1); - if (int_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "hash update dma table create failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - - /* Construct message to SEP */ - sep_make_header(ta_ctx, &msg_offset, SEP_HASH_UPDATE_OPCODE); - - msg[0] = (u32)0; - msg[1] = (u32)0; - msg[2] = (u32)0; - - sep_write_msg(ta_ctx, msg, sizeof(u32) * 3, sizeof(u32) * 3, - &msg_offset, 0); - - /* Handle remainders */ - - /* Head */ - sep_write_msg(ta_ctx, &head_len, sizeof(u32), - sizeof(u32), &msg_offset, 0); - - if (head_len) { - copy_result = sg_copy_to_buffer( - req->src, - sep_sg_nents(ta_ctx->src_sg), - small_buf, head_len); - - if (copy_result != head_len) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sg head copy failure in hash block\n"); - sep_crypto_release(sctx, ta_ctx, -ENOMEM); - return; - } - - sep_write_msg(ta_ctx, small_buf, head_len, - sizeof(u32) * 32, &msg_offset, 1); - } else { - msg_offset += sizeof(u32) * 32; - } - - /* Tail */ - sep_write_msg(ta_ctx, &tail_len, sizeof(u32), - sizeof(u32), &msg_offset, 0); - - if (tail_len) { - copy_result = sep_copy_offset_sg( - ta_ctx->sep_used, - ta_ctx->src_sg, - req->nbytes - tail_len, - small_buf, tail_len); - - if (copy_result != tail_len) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sg tail copy failure in hash block\n"); - sep_crypto_release(sctx, ta_ctx, -ENOMEM); - return; - } - - sep_write_msg(ta_ctx, small_buf, tail_len, - sizeof(u32) * 32, &msg_offset, 1); - } else { - msg_offset += sizeof(u32) * 32; - } - - /* Context */ - sep_write_context(ta_ctx, &msg_offset, &sctx->hash_private_ctx, - sizeof(struct sep_hash_private_context)); - - sep_end_msg(ta_ctx, msg_offset); - are_we_done_yet = 0; - int_error = sep_crypto_take_sep(ta_ctx); - if (int_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_hash_update take sep failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash update never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - -} - -static void sep_hash_final(void *data) -{ - u32 msg_offset; - struct ahash_request *req; - struct crypto_ahash *tfm; - struct this_task_ctx *ta_ctx; - struct sep_system_ctx *sctx; - int result; - unsigned long end_time; - int are_we_done_yet; - - req = (struct ahash_request *)data; - tfm = crypto_ahash_reqtfm(req); - sctx = crypto_ahash_ctx(tfm); - ta_ctx = ahash_request_ctx(req); - ta_ctx->sep_used = sep_dev; - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep_hash_final\n"); - ta_ctx->current_hash_stage = HASH_FINISH; - - ta_ctx->are_we_done_yet = &are_we_done_yet; - - /* opcode and mode */ - sep_make_header(ta_ctx, &msg_offset, SEP_HASH_FINISH_OPCODE); - - /* Context */ - sep_write_context(ta_ctx, &msg_offset, &sctx->hash_private_ctx, - sizeof(struct sep_hash_private_context)); - - sep_end_msg(ta_ctx, msg_offset); - are_we_done_yet = 0; - result = sep_crypto_take_sep(ta_ctx); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_hash_final take sep failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash final job never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - -} - -static void sep_hash_digest(void *data) -{ - int int_error; - u32 msg_offset; - u32 block_size; - u32 msg[10]; - size_t copy_result; - int result; - int are_we_done_yet; - u32 tail_len; - static char small_buf[100]; - struct scatterlist *new_sg; - void *src_ptr; - - struct ahash_request *req; - struct crypto_ahash *tfm; - struct this_task_ctx *ta_ctx; - struct sep_system_ctx *sctx; - unsigned long end_time; - - req = (struct ahash_request *)data; - tfm = crypto_ahash_reqtfm(req); - sctx = crypto_ahash_ctx(tfm); - ta_ctx = ahash_request_ctx(req); - ta_ctx->sep_used = sep_dev; - - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "sep_hash_digest\n"); - ta_ctx->current_hash_stage = HASH_DIGEST; - - ta_ctx->are_we_done_yet = &are_we_done_yet; - - /* length for queue status */ - ta_ctx->nbytes = req->nbytes; - - block_size = crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm)); - tail_len = req->nbytes % block_size; - dev_dbg(&ta_ctx->sep_used->pdev->dev, "length is %x\n", req->nbytes); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "block_size is %x\n", block_size); - dev_dbg(&ta_ctx->sep_used->pdev->dev, "tail len is %x\n", tail_len); - - /* Make sure all pages are an even block */ - int_error = sep_oddball_pages(ta_ctx->sep_used, req->src, - req->nbytes, - block_size, &new_sg, 1); - - if (int_error < 0) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "oddball pages error in crash update\n"); - sep_crypto_release(sctx, ta_ctx, -ENOMEM); - return; - } else if (int_error == 1) { - ta_ctx->src_sg = new_sg; - ta_ctx->src_sg_hold = new_sg; - } else { - ta_ctx->src_sg = req->src; - ta_ctx->src_sg_hold = NULL; - } - - src_ptr = sg_virt(ta_ctx->src_sg); - - if ((!req->nbytes) || (!ta_ctx->src_sg)) { - /* null data */ - src_ptr = NULL; - } - - ta_ctx->dcb_input_data.app_in_address = src_ptr; - ta_ctx->dcb_input_data.data_in_size = req->nbytes - tail_len; - ta_ctx->dcb_input_data.app_out_address = NULL; - ta_ctx->dcb_input_data.block_size = block_size; - ta_ctx->dcb_input_data.tail_block_size = 0; - ta_ctx->dcb_input_data.is_applet = 0; - ta_ctx->dcb_input_data.src_sg = ta_ctx->src_sg; - ta_ctx->dcb_input_data.dst_sg = NULL; - - int_error = sep_create_dcb_dmatables_context_kernel( - ta_ctx->sep_used, - &ta_ctx->dcb_region, - &ta_ctx->dmatables_region, - &ta_ctx->dma_ctx, - &ta_ctx->dcb_input_data, - 1); - if (int_error) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "hash update dma table create failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - - /* Construct message to SEP */ - sep_make_header(ta_ctx, &msg_offset, SEP_HASH_SINGLE_OPCODE); - sep_write_msg(ta_ctx, &ta_ctx->hash_opmode, - sizeof(u32), sizeof(u32), &msg_offset, 0); - - msg[0] = (u32)0; - msg[1] = (u32)0; - msg[2] = (u32)0; - - sep_write_msg(ta_ctx, msg, sizeof(u32) * 3, sizeof(u32) * 3, - &msg_offset, 0); - - /* Tail */ - sep_write_msg(ta_ctx, &tail_len, sizeof(u32), - sizeof(u32), &msg_offset, 0); - - if (tail_len) { - copy_result = sep_copy_offset_sg( - ta_ctx->sep_used, - ta_ctx->src_sg, - req->nbytes - tail_len, - small_buf, tail_len); - - if (copy_result != tail_len) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sg tail copy failure in hash block\n"); - sep_crypto_release(sctx, ta_ctx, -ENOMEM); - return; - } - - sep_write_msg(ta_ctx, small_buf, tail_len, - sizeof(u32) * 32, &msg_offset, 1); - } else { - msg_offset += sizeof(u32) * 32; - } - - sep_end_msg(ta_ctx, msg_offset); - - are_we_done_yet = 0; - result = sep_crypto_take_sep(ta_ctx); - if (result) { - dev_warn(&ta_ctx->sep_used->pdev->dev, - "sep_hash_digest take sep failed\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - } - - /* now we sit and wait up to a fixed time for completion */ - end_time = jiffies + (WAIT_TIME * HZ); - while ((time_before(jiffies, end_time)) && (are_we_done_yet == 0)) - schedule(); - - /* Done waiting; still not done yet? */ - if (are_we_done_yet == 0) { - dev_dbg(&ta_ctx->sep_used->pdev->dev, - "hash digest job never got done\n"); - sep_crypto_release(sctx, ta_ctx, -EINVAL); - return; - } - -} - -/** - * This is what is called by each of the API's provided - * in the kernel crypto descriptors. It is run in a process - * context using the kernel workqueues. Therefore it can - * be put to sleep. - */ -static void sep_dequeuer(void *data) -{ - struct crypto_queue *this_queue; - struct crypto_async_request *async_req; - struct crypto_async_request *backlog; - struct ablkcipher_request *cypher_req; - struct ahash_request *hash_req; - struct sep_system_ctx *sctx; - struct crypto_ahash *hash_tfm; - struct this_task_ctx *ta_ctx; - - - this_queue = (struct crypto_queue *)data; - - spin_lock_irq(&queue_lock); - backlog = crypto_get_backlog(this_queue); - async_req = crypto_dequeue_request(this_queue); - spin_unlock_irq(&queue_lock); - - if (!async_req) { - pr_debug("sep crypto queue is empty\n"); - return; - } - - if (backlog) { - pr_debug("sep crypto backlog set\n"); - if (backlog->complete) - backlog->complete(backlog, -EINPROGRESS); - backlog = NULL; - } - - if (!async_req->tfm) { - pr_debug("sep crypto queue null tfm\n"); - return; - } - - if (!async_req->tfm->__crt_alg) { - pr_debug("sep crypto queue null __crt_alg\n"); - return; - } - - if (!async_req->tfm->__crt_alg->cra_type) { - pr_debug("sep crypto queue null cra_type\n"); - return; - } - - /* we have stuff in the queue */ - if (async_req->tfm->__crt_alg->cra_type != - &crypto_ahash_type) { - /* This is for a cypher */ - pr_debug("sep crypto queue doing cipher\n"); - cypher_req = container_of(async_req, - struct ablkcipher_request, - base); - if (!cypher_req) { - pr_debug("sep crypto queue null cypher_req\n"); - return; - } - - sep_crypto_block((void *)cypher_req); - return; - } else { - /* This is a hash */ - pr_debug("sep crypto queue doing hash\n"); - /** - * This is a bit more complex than cipher; we - * need to figure out what type of operation - */ - hash_req = ahash_request_cast(async_req); - if (!hash_req) { - pr_debug("sep crypto queue null hash_req\n"); - return; - } - - hash_tfm = crypto_ahash_reqtfm(hash_req); - if (!hash_tfm) { - pr_debug("sep crypto queue null hash_tfm\n"); - return; - } - - - sctx = crypto_ahash_ctx(hash_tfm); - if (!sctx) { - pr_debug("sep crypto queue null sctx\n"); - return; - } - - ta_ctx = ahash_request_ctx(hash_req); - - if (ta_ctx->current_hash_stage == HASH_INIT) { - pr_debug("sep crypto queue hash init\n"); - sep_hash_init((void *)hash_req); - return; - } else if (ta_ctx->current_hash_stage == HASH_UPDATE) { - pr_debug("sep crypto queue hash update\n"); - sep_hash_update((void *)hash_req); - return; - } else if (ta_ctx->current_hash_stage == HASH_FINISH) { - pr_debug("sep crypto queue hash final\n"); - sep_hash_final((void *)hash_req); - return; - } else if (ta_ctx->current_hash_stage == HASH_DIGEST) { - pr_debug("sep crypto queue hash digest\n"); - sep_hash_digest((void *)hash_req); - return; - } else if (ta_ctx->current_hash_stage == HASH_FINUP_DATA) { - pr_debug("sep crypto queue hash digest\n"); - sep_hash_update((void *)hash_req); - return; - } else if (ta_ctx->current_hash_stage == HASH_FINUP_FINISH) { - pr_debug("sep crypto queue hash digest\n"); - sep_hash_final((void *)hash_req); - return; - } else { - pr_debug("sep crypto queue hash oops nothing\n"); - return; - } - } -} - -static int sep_sha1_init(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha1 init\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA1; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA1; - ta_ctx->current_hash_stage = HASH_INIT; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha1_update(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha1 update\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA1; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA1; - ta_ctx->current_hash_stage = HASH_UPDATE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha1_final(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha1 final\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA1; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA1; - ta_ctx->current_hash_stage = HASH_FINISH; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha1_digest(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha1 digest\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA1; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA1; - ta_ctx->current_hash_stage = HASH_DIGEST; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha1_finup(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha1 finup\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA1; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA1; - ta_ctx->current_hash_stage = HASH_FINUP_DATA; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_md5_init(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing md5 init\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = MD5; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_MD5; - ta_ctx->current_hash_stage = HASH_INIT; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_md5_update(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing md5 update\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = MD5; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_MD5; - ta_ctx->current_hash_stage = HASH_UPDATE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_md5_final(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing md5 final\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = MD5; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_MD5; - ta_ctx->current_hash_stage = HASH_FINISH; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_md5_digest(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing md5 digest\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = MD5; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_MD5; - ta_ctx->current_hash_stage = HASH_DIGEST; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_md5_finup(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing md5 finup\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = MD5; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_MD5; - ta_ctx->current_hash_stage = HASH_FINUP_DATA; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha224_init(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha224 init\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA224; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA224; - ta_ctx->current_hash_stage = HASH_INIT; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha224_update(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha224 update\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA224; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA224; - ta_ctx->current_hash_stage = HASH_UPDATE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha224_final(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha224 final\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA224; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA224; - ta_ctx->current_hash_stage = HASH_FINISH; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha224_digest(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha224 digest\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA224; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA224; - ta_ctx->current_hash_stage = HASH_DIGEST; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha224_finup(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha224 finup\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA224; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA224; - ta_ctx->current_hash_stage = HASH_FINUP_DATA; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha256_init(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha256 init\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA256; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA256; - ta_ctx->current_hash_stage = HASH_INIT; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha256_update(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha256 update\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA256; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA256; - ta_ctx->current_hash_stage = HASH_UPDATE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha256_final(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha256 final\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA256; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA256; - ta_ctx->current_hash_stage = HASH_FINISH; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha256_digest(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha256 digest\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA256; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA256; - ta_ctx->current_hash_stage = HASH_DIGEST; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_sha256_finup(struct ahash_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ahash_request_ctx(req); - - pr_debug("sep - doing sha256 finup\n"); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = SHA256; - ta_ctx->current_hash_req = req; - ta_ctx->current_cypher_req = NULL; - ta_ctx->hash_opmode = SEP_HASH_SHA256; - ta_ctx->current_hash_stage = HASH_FINUP_DATA; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_crypto_init(struct crypto_tfm *tfm) -{ - const char *alg_name = crypto_tfm_alg_name(tfm); - - if (alg_name == NULL) - pr_debug("sep_crypto_init alg is NULL\n"); - else - pr_debug("sep_crypto_init alg is %s\n", alg_name); - - tfm->crt_ablkcipher.reqsize = sizeof(struct this_task_ctx); - return 0; -} - -static void sep_crypto_exit(struct crypto_tfm *tfm) -{ - pr_debug("sep_crypto_exit\n"); -} - -static int sep_aes_setkey(struct crypto_ablkcipher *tfm, const u8 *key, - unsigned int keylen) -{ - struct sep_system_ctx *sctx = crypto_ablkcipher_ctx(tfm); - - pr_debug("sep aes setkey\n"); - - pr_debug("tfm is %p sctx is %p\n", tfm, sctx); - switch (keylen) { - case SEP_AES_KEY_128_SIZE: - sctx->aes_key_size = AES_128; - break; - case SEP_AES_KEY_192_SIZE: - sctx->aes_key_size = AES_192; - break; - case SEP_AES_KEY_256_SIZE: - sctx->aes_key_size = AES_256; - break; - case SEP_AES_KEY_512_SIZE: - sctx->aes_key_size = AES_512; - break; - default: - pr_debug("invalid sep aes key size %x\n", - keylen); - return -EINVAL; - } - - memset(&sctx->key.aes, 0, sizeof(u32) * - SEP_AES_MAX_KEY_SIZE_WORDS); - memcpy(&sctx->key.aes, key, keylen); - sctx->keylen = keylen; - /* Indicate to encrypt/decrypt function to send key to SEP */ - sctx->key_sent = 0; - - return 0; -} - -static int sep_aes_ecb_encrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing aes ecb encrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = AES_ECB; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->aes_encmode = SEP_AES_ENCRYPT; - ta_ctx->aes_opmode = SEP_AES_ECB; - ta_ctx->init_opcode = SEP_AES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_AES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_aes_ecb_decrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing aes ecb decrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = AES_ECB; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->aes_encmode = SEP_AES_DECRYPT; - ta_ctx->aes_opmode = SEP_AES_ECB; - ta_ctx->init_opcode = SEP_AES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_AES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_aes_cbc_encrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - struct sep_system_ctx *sctx = crypto_ablkcipher_ctx( - crypto_ablkcipher_reqtfm(req)); - - pr_debug("sep - doing aes cbc encrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - pr_debug("tfm is %p sctx is %p and ta_ctx is %p\n", - crypto_ablkcipher_reqtfm(req), sctx, ta_ctx); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = AES_CBC; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->aes_encmode = SEP_AES_ENCRYPT; - ta_ctx->aes_opmode = SEP_AES_CBC; - ta_ctx->init_opcode = SEP_AES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_AES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_aes_cbc_decrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - struct sep_system_ctx *sctx = crypto_ablkcipher_ctx( - crypto_ablkcipher_reqtfm(req)); - - pr_debug("sep - doing aes cbc decrypt\n"); - - pr_debug("tfm is %p sctx is %p and ta_ctx is %p\n", - crypto_ablkcipher_reqtfm(req), sctx, ta_ctx); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = AES_CBC; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->aes_encmode = SEP_AES_DECRYPT; - ta_ctx->aes_opmode = SEP_AES_CBC; - ta_ctx->init_opcode = SEP_AES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_AES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_des_setkey(struct crypto_ablkcipher *tfm, const u8 *key, - unsigned int keylen) -{ - struct sep_system_ctx *sctx = crypto_ablkcipher_ctx(tfm); - struct crypto_tfm *ctfm = crypto_ablkcipher_tfm(tfm); - u32 *flags = &ctfm->crt_flags; - - pr_debug("sep des setkey\n"); - - switch (keylen) { - case DES_KEY_SIZE: - sctx->des_nbr_keys = DES_KEY_1; - break; - case DES_KEY_SIZE * 2: - sctx->des_nbr_keys = DES_KEY_2; - break; - case DES_KEY_SIZE * 3: - sctx->des_nbr_keys = DES_KEY_3; - break; - default: - pr_debug("invalid key size %x\n", - keylen); - return -EINVAL; - } - - if ((*flags & CRYPTO_TFM_REQ_WEAK_KEY) && - (sep_weak_key(key, keylen))) { - - *flags |= CRYPTO_TFM_RES_WEAK_KEY; - pr_debug("weak key\n"); - return -EINVAL; - } - - memset(&sctx->key.des, 0, sizeof(struct sep_des_key)); - memcpy(&sctx->key.des.key1, key, keylen); - sctx->keylen = keylen; - /* Indicate to encrypt/decrypt function to send key to SEP */ - sctx->key_sent = 0; - - return 0; -} - -static int sep_des_ebc_encrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing des ecb encrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = DES_ECB; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->des_encmode = SEP_DES_ENCRYPT; - ta_ctx->des_opmode = SEP_DES_ECB; - ta_ctx->init_opcode = SEP_DES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_DES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_des_ebc_decrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing des ecb decrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = DES_ECB; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->des_encmode = SEP_DES_DECRYPT; - ta_ctx->des_opmode = SEP_DES_ECB; - ta_ctx->init_opcode = SEP_DES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_DES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_des_cbc_encrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing des cbc encrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = DES_CBC; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->des_encmode = SEP_DES_ENCRYPT; - ta_ctx->des_opmode = SEP_DES_CBC; - ta_ctx->init_opcode = SEP_DES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_DES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static int sep_des_cbc_decrypt(struct ablkcipher_request *req) -{ - int error; - int error1; - struct this_task_ctx *ta_ctx = ablkcipher_request_ctx(req); - - pr_debug("sep - doing des ecb decrypt\n"); - - /* Clear out task context */ - memset(ta_ctx, 0, sizeof(struct this_task_ctx)); - - ta_ctx->sep_used = sep_dev; - ta_ctx->current_request = DES_CBC; - ta_ctx->current_hash_req = NULL; - ta_ctx->current_cypher_req = req; - ta_ctx->des_encmode = SEP_DES_DECRYPT; - ta_ctx->des_opmode = SEP_DES_CBC; - ta_ctx->init_opcode = SEP_DES_INIT_OPCODE; - ta_ctx->block_opcode = SEP_DES_BLOCK_OPCODE; - - /* lock necessary so that only one entity touches the queues */ - spin_lock_irq(&queue_lock); - error = crypto_enqueue_request(&sep_queue, &req->base); - - if ((error != 0) && (error != -EINPROGRESS)) - pr_debug(" sep - crypto enqueue failed: %x\n", - error); - error1 = sep_submit_work(ta_ctx->sep_used->workqueue, - sep_dequeuer, (void *)&sep_queue); - if (error1) - pr_debug(" sep - workqueue submit failed: %x\n", - error1); - spin_unlock_irq(&queue_lock); - /* We return result of crypto enqueue */ - return error; -} - -static struct ahash_alg hash_algs[] = { -{ - .init = sep_sha1_init, - .update = sep_sha1_update, - .final = sep_sha1_final, - .digest = sep_sha1_digest, - .finup = sep_sha1_finup, - .halg = { - .digestsize = SHA1_DIGEST_SIZE, - .base = { - .cra_name = "sha1", - .cra_driver_name = "sha1-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | - CRYPTO_ALG_ASYNC, - .cra_blocksize = SHA1_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_module = THIS_MODULE, - .cra_init = sep_hash_cra_init, - .cra_exit = sep_hash_cra_exit, - } - } -}, -{ - .init = sep_md5_init, - .update = sep_md5_update, - .final = sep_md5_final, - .digest = sep_md5_digest, - .finup = sep_md5_finup, - .halg = { - .digestsize = MD5_DIGEST_SIZE, - .base = { - .cra_name = "md5", - .cra_driver_name = "md5-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | - CRYPTO_ALG_ASYNC, - .cra_blocksize = SHA1_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_module = THIS_MODULE, - .cra_init = sep_hash_cra_init, - .cra_exit = sep_hash_cra_exit, - } - } -}, -{ - .init = sep_sha224_init, - .update = sep_sha224_update, - .final = sep_sha224_final, - .digest = sep_sha224_digest, - .finup = sep_sha224_finup, - .halg = { - .digestsize = SHA224_DIGEST_SIZE, - .base = { - .cra_name = "sha224", - .cra_driver_name = "sha224-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | - CRYPTO_ALG_ASYNC, - .cra_blocksize = SHA224_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_module = THIS_MODULE, - .cra_init = sep_hash_cra_init, - .cra_exit = sep_hash_cra_exit, - } - } -}, -{ - .init = sep_sha256_init, - .update = sep_sha256_update, - .final = sep_sha256_final, - .digest = sep_sha256_digest, - .finup = sep_sha256_finup, - .halg = { - .digestsize = SHA256_DIGEST_SIZE, - .base = { - .cra_name = "sha256", - .cra_driver_name = "sha256-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_AHASH | - CRYPTO_ALG_ASYNC, - .cra_blocksize = SHA256_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_module = THIS_MODULE, - .cra_init = sep_hash_cra_init, - .cra_exit = sep_hash_cra_exit, - } - } -} -}; - -static struct crypto_alg crypto_algs[] = { -{ - .cra_name = "ecb(aes)", - .cra_driver_name = "ecb-aes-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = sep_aes_setkey, - .encrypt = sep_aes_ecb_encrypt, - .decrypt = sep_aes_ecb_decrypt, - } -}, -{ - .cra_name = "cbc(aes)", - .cra_driver_name = "cbc-aes-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = sep_aes_setkey, - .encrypt = sep_aes_cbc_encrypt, - .ivsize = AES_BLOCK_SIZE, - .decrypt = sep_aes_cbc_decrypt, - } -}, -{ - .cra_name = "ebc(des)", - .cra_driver_name = "ebc-des-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = DES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .setkey = sep_des_setkey, - .encrypt = sep_des_ebc_encrypt, - .decrypt = sep_des_ebc_decrypt, - } -}, -{ - .cra_name = "cbc(des)", - .cra_driver_name = "cbc-des-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = DES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .setkey = sep_des_setkey, - .encrypt = sep_des_cbc_encrypt, - .ivsize = DES_BLOCK_SIZE, - .decrypt = sep_des_cbc_decrypt, - } -}, -{ - .cra_name = "ebc(des3-ede)", - .cra_driver_name = "ebc-des3-ede-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = DES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .setkey = sep_des_setkey, - .encrypt = sep_des_ebc_encrypt, - .decrypt = sep_des_ebc_decrypt, - } -}, -{ - .cra_name = "cbc(des3-ede)", - .cra_driver_name = "cbc-des3--ede-sep", - .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, - .cra_blocksize = DES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct sep_system_ctx), - .cra_alignmask = 0, - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_init = sep_crypto_init, - .cra_exit = sep_crypto_exit, - .cra_u.ablkcipher = { - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .setkey = sep_des_setkey, - .encrypt = sep_des_cbc_encrypt, - .decrypt = sep_des_cbc_decrypt, - } -} -}; - -int sep_crypto_setup(void) -{ - int err, i, j, k; - - tasklet_init(&sep_dev->finish_tasklet, sep_finish, - (unsigned long)sep_dev); - - crypto_init_queue(&sep_queue, SEP_QUEUE_LENGTH); - - sep_dev->workqueue = create_singlethread_workqueue( - "sep_crypto_workqueue"); - if (!sep_dev->workqueue) { - dev_warn(&sep_dev->pdev->dev, "cant create workqueue\n"); - return -ENOMEM; - } - - spin_lock_init(&queue_lock); - - err = 0; - for (i = 0; i < ARRAY_SIZE(hash_algs); i++) { - err = crypto_register_ahash(&hash_algs[i]); - if (err) - goto err_algs; - } - - err = 0; - for (j = 0; j < ARRAY_SIZE(crypto_algs); j++) { - err = crypto_register_alg(&crypto_algs[j]); - if (err) - goto err_crypto_algs; - } - - return err; - -err_algs: - for (k = 0; k < i; k++) - crypto_unregister_ahash(&hash_algs[k]); - destroy_workqueue(sep_dev->workqueue); - return err; - -err_crypto_algs: - for (k = 0; k < j; k++) - crypto_unregister_alg(&crypto_algs[k]); - goto err_algs; -} - -void sep_crypto_takedown(void) -{ - - int i; - - for (i = 0; i < ARRAY_SIZE(hash_algs); i++) - crypto_unregister_ahash(&hash_algs[i]); - for (i = 0; i < ARRAY_SIZE(crypto_algs); i++) - crypto_unregister_alg(&crypto_algs[i]); - - destroy_workqueue(sep_dev->workqueue); - tasklet_kill(&sep_dev->finish_tasklet); -} - -#endif diff --git a/drivers/staging/sep/sep_crypto.h b/drivers/staging/sep/sep_crypto.h deleted file mode 100644 index 155c3c9b87c2..000000000000 --- a/drivers/staging/sep/sep_crypto.h +++ /dev/null @@ -1,359 +0,0 @@ -/* - * - * sep_crypto.h - Crypto interface structures - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2010 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2009.06.26 Initial publish - * 2011.02.22 Enable Kernel Crypto - * - */ - -/* Constants for SEP (from vendor) */ -#define SEP_START_MSG_TOKEN 0x02558808 - -#define SEP_DES_IV_SIZE_WORDS 2 -#define SEP_DES_IV_SIZE_BYTES (SEP_DES_IV_SIZE_WORDS * \ - sizeof(u32)) -#define SEP_DES_KEY_SIZE_WORDS 2 -#define SEP_DES_KEY_SIZE_BYTES (SEP_DES_KEY_SIZE_WORDS * \ - sizeof(u32)) -#define SEP_DES_BLOCK_SIZE 8 -#define SEP_DES_DUMMY_SIZE 16 - -#define SEP_DES_INIT_OPCODE 0x10 -#define SEP_DES_BLOCK_OPCODE 0x11 - -#define SEP_AES_BLOCK_SIZE_WORDS 4 -#define SEP_AES_BLOCK_SIZE_BYTES \ - (SEP_AES_BLOCK_SIZE_WORDS * sizeof(u32)) - -#define SEP_AES_DUMMY_BLOCK_SIZE 16 -#define SEP_AES_IV_SIZE_WORDS SEP_AES_BLOCK_SIZE_WORDS -#define SEP_AES_IV_SIZE_BYTES \ - (SEP_AES_IV_SIZE_WORDS * sizeof(u32)) - -#define SEP_AES_KEY_128_SIZE 16 -#define SEP_AES_KEY_192_SIZE 24 -#define SEP_AES_KEY_256_SIZE 32 -#define SEP_AES_KEY_512_SIZE 64 -#define SEP_AES_MAX_KEY_SIZE_WORDS 16 -#define SEP_AES_MAX_KEY_SIZE_BYTES \ - (SEP_AES_MAX_KEY_SIZE_WORDS * sizeof(u32)) - -#define SEP_AES_WRAP_MIN_SIZE 8 -#define SEP_AES_WRAP_MAX_SIZE 0x10000000 - -#define SEP_AES_WRAP_BLOCK_SIZE_WORDS 2 -#define SEP_AES_WRAP_BLOCK_SIZE_BYTES \ - (SEP_AES_WRAP_BLOCK_SIZE_WORDS * sizeof(u32)) - -#define SEP_AES_SECRET_RKEK1 0x1 -#define SEP_AES_SECRET_RKEK2 0x2 - -#define SEP_AES_INIT_OPCODE 0x2 -#define SEP_AES_BLOCK_OPCODE 0x3 -#define SEP_AES_FINISH_OPCODE 0x4 -#define SEP_AES_WRAP_OPCODE 0x6 -#define SEP_AES_UNWRAP_OPCODE 0x7 -#define SEP_AES_XTS_FINISH_OPCODE 0x8 - -#define SEP_HASH_RESULT_SIZE_WORDS 16 -#define SEP_MD5_DIGEST_SIZE_WORDS 4 -#define SEP_MD5_DIGEST_SIZE_BYTES \ - (SEP_MD5_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA1_DIGEST_SIZE_WORDS 5 -#define SEP_SHA1_DIGEST_SIZE_BYTES \ - (SEP_SHA1_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA224_DIGEST_SIZE_WORDS 7 -#define SEP_SHA224_DIGEST_SIZE_BYTES \ - (SEP_SHA224_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA256_DIGEST_SIZE_WORDS 8 -#define SEP_SHA256_DIGEST_SIZE_BYTES \ - (SEP_SHA256_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA384_DIGEST_SIZE_WORDS 12 -#define SEP_SHA384_DIGEST_SIZE_BYTES \ - (SEP_SHA384_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA512_DIGEST_SIZE_WORDS 16 -#define SEP_SHA512_DIGEST_SIZE_BYTES \ - (SEP_SHA512_DIGEST_SIZE_WORDS * sizeof(u32)) -#define SEP_HASH_BLOCK_SIZE_WORDS 16 -#define SEP_HASH_BLOCK_SIZE_BYTES \ - (SEP_HASH_BLOCK_SIZE_WORDS * sizeof(u32)) -#define SEP_SHA2_BLOCK_SIZE_WORDS 32 -#define SEP_SHA2_BLOCK_SIZE_BYTES \ - (SEP_SHA2_BLOCK_SIZE_WORDS * sizeof(u32)) - -#define SEP_HASH_INIT_OPCODE 0x20 -#define SEP_HASH_UPDATE_OPCODE 0x21 -#define SEP_HASH_FINISH_OPCODE 0x22 -#define SEP_HASH_SINGLE_OPCODE 0x23 - -#define SEP_HOST_ERROR 0x0b000000 -#define SEP_OK 0x0 -#define SEP_INVALID_START (SEP_HOST_ERROR + 0x3) -#define SEP_WRONG_OPCODE (SEP_HOST_ERROR + 0x1) - -#define SEP_TRANSACTION_WAIT_TIME 5 - -#define SEP_QUEUE_LENGTH 2 -/* Macros */ -#ifndef __LITTLE_ENDIAN -#define CHG_ENDIAN(val) \ - (((val) >> 24) | \ - (((val) & 0x00FF0000) >> 8) | \ - (((val) & 0x0000FF00) << 8) | \ - (((val) & 0x000000FF) << 24)) -#else -#define CHG_ENDIAN(val) val -#endif -/* Enums for SEP (from vendor) */ -enum des_numkey { - DES_KEY_1 = 1, - DES_KEY_2 = 2, - DES_KEY_3 = 3, - SEP_NUMKEY_OPTIONS, - SEP_NUMKEY_LAST = 0x7fffffff, -}; - -enum des_enc_mode { - SEP_DES_ENCRYPT = 0, - SEP_DES_DECRYPT = 1, - SEP_DES_ENC_OPTIONS, - SEP_DES_ENC_LAST = 0x7fffffff, -}; - -enum des_op_mode { - SEP_DES_ECB = 0, - SEP_DES_CBC = 1, - SEP_OP_OPTIONS, - SEP_OP_LAST = 0x7fffffff, -}; - -enum aes_keysize { - AES_128 = 0, - AES_192 = 1, - AES_256 = 2, - AES_512 = 3, - AES_SIZE_OPTIONS, - AEA_SIZE_LAST = 0x7FFFFFFF, -}; - -enum aes_enc_mode { - SEP_AES_ENCRYPT = 0, - SEP_AES_DECRYPT = 1, - SEP_AES_ENC_OPTIONS, - SEP_AES_ENC_LAST = 0x7FFFFFFF, -}; - -enum aes_op_mode { - SEP_AES_ECB = 0, - SEP_AES_CBC = 1, - SEP_AES_MAC = 2, - SEP_AES_CTR = 3, - SEP_AES_XCBC = 4, - SEP_AES_CMAC = 5, - SEP_AES_XTS = 6, - SEP_AES_OP_OPTIONS, - SEP_AES_OP_LAST = 0x7FFFFFFF, -}; - -enum hash_op_mode { - SEP_HASH_SHA1 = 0, - SEP_HASH_SHA224 = 1, - SEP_HASH_SHA256 = 2, - SEP_HASH_SHA384 = 3, - SEP_HASH_SHA512 = 4, - SEP_HASH_MD5 = 5, - SEP_HASH_OPTIONS, - SEP_HASH_LAST_MODE = 0x7FFFFFFF, -}; - -/* Structures for SEP (from vendor) */ -struct sep_des_internal_key { - u32 key1[SEP_DES_KEY_SIZE_WORDS]; - u32 key2[SEP_DES_KEY_SIZE_WORDS]; - u32 key3[SEP_DES_KEY_SIZE_WORDS]; -}; - -struct sep_des_internal_context { - u32 iv_context[SEP_DES_IV_SIZE_WORDS]; - struct sep_des_internal_key context_key; - enum des_numkey nbr_keys; - enum des_enc_mode encryption; - enum des_op_mode operation; - u8 dummy_block[SEP_DES_DUMMY_SIZE]; -}; - -struct sep_des_private_context { - u32 valid_tag; - u32 iv; - u8 ctx_buf[sizeof(struct sep_des_internal_context)]; -}; - -/* This is the structure passed to SEP via msg area */ -struct sep_des_key { - u32 key1[SEP_DES_KEY_SIZE_WORDS]; - u32 key2[SEP_DES_KEY_SIZE_WORDS]; - u32 key3[SEP_DES_KEY_SIZE_WORDS]; - u32 pad[SEP_DES_KEY_SIZE_WORDS]; -}; - -struct sep_aes_internal_context { - u32 aes_ctx_iv[SEP_AES_IV_SIZE_WORDS]; - u32 aes_ctx_key[SEP_AES_MAX_KEY_SIZE_WORDS / 2]; - enum aes_keysize keysize; - enum aes_enc_mode encmode; - enum aes_op_mode opmode; - u8 secret_key; - u32 no_add_blocks; - u32 last_block_size; - u32 last_block[SEP_AES_BLOCK_SIZE_WORDS]; - u32 prev_iv[SEP_AES_BLOCK_SIZE_WORDS]; - u32 remaining_size; - union { - struct { - u32 dkey1[SEP_AES_BLOCK_SIZE_WORDS]; - u32 dkey2[SEP_AES_BLOCK_SIZE_WORDS]; - u32 dkey3[SEP_AES_BLOCK_SIZE_WORDS]; - } cmac_data; - struct { - u32 xts_key[SEP_AES_MAX_KEY_SIZE_WORDS / 2]; - u32 temp1[SEP_AES_BLOCK_SIZE_WORDS]; - u32 temp2[SEP_AES_BLOCK_SIZE_WORDS]; - } xtx_data; - } s_data; - u8 dummy_block[SEP_AES_DUMMY_BLOCK_SIZE]; -}; - -struct sep_aes_private_context { - u32 valid_tag; - u32 aes_iv; - u32 op_mode; - u8 cbuff[sizeof(struct sep_aes_internal_context)]; -}; - -struct sep_hash_internal_context { - u32 hash_result[SEP_HASH_RESULT_SIZE_WORDS]; - enum hash_op_mode hash_opmode; - u32 previous_data[SEP_SHA2_BLOCK_SIZE_WORDS]; - u16 prev_update_bytes; - u32 total_proc_128bit[4]; - u16 op_mode_block_size; - u8 dummy_aes_block[SEP_AES_DUMMY_BLOCK_SIZE]; -}; - -struct sep_hash_private_context { - u32 valid_tag; - u32 iv; - u8 internal_context[sizeof(struct sep_hash_internal_context)]; -}; - -union key_t { - struct sep_des_key des; - u32 aes[SEP_AES_MAX_KEY_SIZE_WORDS]; -}; - -/* Context structures for crypto API */ -/** - * Structure for this current task context - * This same structure is used for both hash - * and crypt in order to reduce duplicate code - * for stuff that is done for both hash operations - * and crypto operations. We cannot trust that the - * system context is not pulled out from under - * us during operation to operation, so all - * critical stuff such as data pointers must - * be in in a context that is exclusive for this - * particular task at hand. - */ -struct this_task_ctx { - struct sep_device *sep_used; - u32 done; - unsigned char iv[100]; - enum des_enc_mode des_encmode; - enum des_op_mode des_opmode; - enum aes_enc_mode aes_encmode; - enum aes_op_mode aes_opmode; - u32 init_opcode; - u32 block_opcode; - size_t data_length; - size_t ivlen; - struct ablkcipher_walk walk; - int i_own_sep; /* Do I have custody of the sep? */ - struct sep_call_status call_status; - struct build_dcb_struct_kernel dcb_input_data; - struct sep_dma_context *dma_ctx; - void *dmatables_region; - size_t nbytes; - struct sep_dcblock *dcb_region; - struct sep_queue_info *queue_elem; - int msg_len_words; - unsigned char msg[SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES]; - void *msgptr; - struct scatterlist *src_sg; - struct scatterlist *dst_sg; - struct scatterlist *src_sg_hold; - struct scatterlist *dst_sg_hold; - struct ahash_request *current_hash_req; - struct ablkcipher_request *current_cypher_req; - enum type_of_request current_request; - int digest_size_words; - int digest_size_bytes; - int block_size_words; - int block_size_bytes; - enum hash_op_mode hash_opmode; - enum hash_stage current_hash_stage; - /** - * Not that this is a pointer. The are_we_done_yet variable is - * allocated by the task function. This way, even if the kernel - * crypto infrastructure has grabbed the task structure out from - * under us, the task function can still see this variable. - */ - int *are_we_done_yet; - unsigned long end_time; - }; - -struct sep_system_ctx { - union key_t key; - size_t keylen; - int key_sent; - enum des_numkey des_nbr_keys; - enum aes_keysize aes_key_size; - unsigned long end_time; - struct sep_des_private_context des_private_ctx; - struct sep_aes_private_context aes_private_ctx; - struct sep_hash_private_context hash_private_ctx; - }; - -/* work queue structures */ -struct sep_work_struct { - struct work_struct work; - void (*callback)(void *); - void *data; - }; - -/* Functions */ -int sep_crypto_setup(void); -void sep_crypto_takedown(void); diff --git a/drivers/staging/sep/sep_dev.h b/drivers/staging/sep/sep_dev.h deleted file mode 100644 index bf56c06662fd..000000000000 --- a/drivers/staging/sep/sep_dev.h +++ /dev/null @@ -1,162 +0,0 @@ -#ifndef __SEP_DEV_H__ -#define __SEP_DEV_H__ - -/* - * - * sep_dev.h - Security Processor Device Structures - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES - * 2010.09.14 upgrade to Medfield - * 2011.02.22 enable kernel crypto - */ - -struct sep_device { - /* pointer to pci dev */ - struct pci_dev *pdev; - - /* character device file */ - struct cdev sep_cdev; - - /* devices (using misc dev) */ - struct miscdevice miscdev_sep; - - /* major / minor numbers of device */ - dev_t sep_devno; - /* guards command sent counter */ - spinlock_t snd_rply_lck; - /* guards driver memory usage in fastcall if */ - struct semaphore sep_doublebuf; - - /* flags to indicate use and lock status of sep */ - u32 pid_doing_transaction; - unsigned long in_use_flags; - - /* address of the shared memory allocated during init for SEP driver - (coherent alloc) */ - dma_addr_t shared_bus; - size_t shared_size; - void *shared_addr; - - /* start address of the access to the SEP registers from driver */ - dma_addr_t reg_physical_addr; - dma_addr_t reg_physical_end; - void __iomem *reg_addr; - - /* wait queue heads of the driver */ - wait_queue_head_t event_interrupt; - wait_queue_head_t event_transactions; - - struct list_head sep_queue_status; - u32 sep_queue_num; - spinlock_t sep_queue_lock; - - /* Is this in use? */ - u32 in_use; - - /* indicates whether power save is set up */ - u32 power_save_setup; - - /* Power state */ - u32 power_state; - - /* transaction counter that coordinates the - transactions between SEP and HOST */ - unsigned long send_ct; - /* counter for the messages from sep */ - unsigned long reply_ct; - - /* The following are used for kernel crypto client requests */ - u32 in_kernel; /* Set for kernel client request */ - struct tasklet_struct finish_tasklet; - enum type_of_request current_request; - enum hash_stage current_hash_stage; - struct ahash_request *current_hash_req; - struct ablkcipher_request *current_cypher_req; - struct this_task_ctx *ta_ctx; - struct workqueue_struct *workqueue; -}; - -extern struct sep_device *sep_dev; - -/** - * SEP message header for a transaction - * @reserved: reserved memory (two words) - * @token: SEP message token - * @msg_len: message length - * @opcpde: message opcode - */ -struct sep_msgarea_hdr { - u32 reserved[2]; - u32 token; - u32 msg_len; - u32 opcode; -}; - -/** - * sep_queue_data - data to be maintained in status queue for a transaction - * @opcode : transaction opcode - * @size : message size - * @pid: owner process - * @name: owner process name - */ -struct sep_queue_data { - u32 opcode; - u32 size; - s32 pid; - u8 name[TASK_COMM_LEN]; -}; - -/** sep_queue_info - maintains status info of all transactions - * @list: head of list - * @sep_queue_data : data for transaction - */ -struct sep_queue_info { - struct list_head list; - struct sep_queue_data data; -}; - -static inline void sep_write_reg(struct sep_device *dev, int reg, u32 value) -{ - void __iomem *addr = dev->reg_addr + reg; - writel(value, addr); -} - -static inline u32 sep_read_reg(struct sep_device *dev, int reg) -{ - void __iomem *addr = dev->reg_addr + reg; - return readl(addr); -} - -/* wait for SRAM write complete(indirect write */ -static inline void sep_wait_sram_write(struct sep_device *dev) -{ - u32 reg_val; - - do { - reg_val = sep_read_reg(dev, HW_SRAM_DATA_READY_REG_ADDR); - } while (!(reg_val & 1)); -} - - -#endif diff --git a/drivers/staging/sep/sep_driver_api.h b/drivers/staging/sep/sep_driver_api.h deleted file mode 100644 index 7ee1c3bf17d7..000000000000 --- a/drivers/staging/sep/sep_driver_api.h +++ /dev/null @@ -1,402 +0,0 @@ -/* - * - * sep_driver_api.h - Security Processor Driver api definitions - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2010.09.14 Upgrade to Medfield - * 2011.02.22 Enable kernel crypto - * - */ - -#ifndef __SEP_DRIVER_API_H__ -#define __SEP_DRIVER_API_H__ - -/* Type of request from device */ -#define SEP_DRIVER_SRC_REPLY 1 -#define SEP_DRIVER_SRC_REQ 2 -#define SEP_DRIVER_SRC_PRINTF 3 - -/* Power state */ -#define SEP_DRIVER_POWERON 1 -#define SEP_DRIVER_POWEROFF 2 - -/* Following enums are used only for kernel crypto api */ -enum type_of_request { - NO_REQUEST, - AES_CBC, - AES_ECB, - DES_CBC, - DES_ECB, - DES3_ECB, - DES3_CBC, - SHA1, - MD5, - SHA224, - SHA256 - }; - -enum hash_stage { - HASH_INIT, - HASH_UPDATE, - HASH_FINISH, - HASH_DIGEST, - HASH_FINUP_DATA, - HASH_FINUP_FINISH -}; - -/* - structure that represents DCB -*/ -struct sep_dcblock { - /* physical address of the first input mlli */ - u32 input_mlli_address; - /* num of entries in the first input mlli */ - u32 input_mlli_num_entries; - /* size of data in the first input mlli */ - u32 input_mlli_data_size; - /* physical address of the first output mlli */ - u32 output_mlli_address; - /* num of entries in the first output mlli */ - u32 output_mlli_num_entries; - /* size of data in the first output mlli */ - u32 output_mlli_data_size; - /* pointer to the output virtual tail */ - aligned_u64 out_vr_tail_pt; - /* size of tail data */ - u32 tail_data_size; - /* input tail data array */ - u8 tail_data[68]; -}; - -/* - command structure for building dcb block (currently for ext app only) -*/ -struct build_dcb_struct { - /* address value of the data in */ - aligned_u64 app_in_address; - /* size of data in */ - u32 data_in_size; - /* address of the data out */ - aligned_u64 app_out_address; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 block_size; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 tail_block_size; - - /* which application calls the driver DX or applet */ - u32 is_applet; -}; - -/* - command structure for building dcb block for kernel crypto -*/ -struct build_dcb_struct_kernel { - /* address value of the data in */ - void *app_in_address; - /* size of data in */ - ssize_t data_in_size; - /* address of the data out */ - void *app_out_address; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 block_size; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 tail_block_size; - - /* which application calls the driver DX or applet */ - u32 is_applet; - - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - -/** - * @struct sep_dma_map - * - * Structure that contains all information needed for mapping the user pages - * or kernel buffers for dma operations - * - * - */ -struct sep_dma_map { - /* mapped dma address */ - dma_addr_t dma_addr; - /* size of the mapped data */ - size_t size; -}; - -struct sep_dma_resource { - /* array of pointers to the pages that represent - input data for the synchronic DMA action */ - struct page **in_page_array; - - /* array of pointers to the pages that represent out - data for the synchronic DMA action */ - struct page **out_page_array; - - /* number of pages in the sep_in_page_array */ - u32 in_num_pages; - - /* number of pages in the sep_out_page_array */ - u32 out_num_pages; - - /* map array of the input data */ - struct sep_dma_map *in_map_array; - - /* map array of the output data */ - struct sep_dma_map *out_map_array; - - /* number of entries of the input mapp array */ - u32 in_map_num_entries; - - /* number of entries of the output mapp array */ - u32 out_map_num_entries; - - /* Scatter list for kernel operations */ - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - - -/* command struct for translating rar handle to bus address - and setting it at predefined location */ -struct rar_hndl_to_bus_struct { - - /* rar handle */ - aligned_u64 rar_handle; -}; - -/* - structure that represent one entry in the DMA LLI table -*/ -struct sep_lli_entry { - /* physical address */ - u32 bus_address; - - /* block size */ - u32 block_size; -}; - -/* - * header format for each fastcall write operation - */ -struct sep_fastcall_hdr { - u32 magic; - u32 secure_dma; - u32 msg_len; - u32 num_dcbs; -}; - -/* - * structure used in file pointer's private data field - * to track the status of the calls to the various - * driver interface - */ -struct sep_call_status { - unsigned long status; -}; - -/* - * format of dma context buffer used to store all DMA-related - * context information of a particular transaction - */ -struct sep_dma_context { - /* number of data control blocks */ - u32 nr_dcb_creat; - /* number of the lli tables created in the current transaction */ - u32 num_lli_tables_created; - /* size of currently allocated dma tables region */ - u32 dmatables_len; - /* size of input data */ - u32 input_data_len; - /* secure dma use (for imr memory restricted area in output) */ - bool secure_dma; - struct sep_dma_resource dma_res_arr[SEP_MAX_NUM_SYNC_DMA_OPS]; - /* Scatter gather for kernel crypto */ - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - -/* - * format for file pointer's private_data field - */ -struct sep_private_data { - struct sep_queue_info *my_queue_elem; - struct sep_device *device; - struct sep_call_status call_status; - struct sep_dma_context *dma_ctx; -}; - - -/* Functions used by sep_crypto */ - -/** - * sep_queue_status_remove - Removes transaction from status queue - * @sep: SEP device - * @sep_queue_info: pointer to status queue - * - * This function will removes information about transaction from the queue. - */ -void sep_queue_status_remove(struct sep_device *sep, - struct sep_queue_info **queue_elem); -/** - * sep_queue_status_add - Adds transaction to status queue - * @sep: SEP device - * @opcode: transaction opcode - * @size: input data size - * @pid: pid of current process - * @name: current process name - * @name_len: length of name (current process) - * - * This function adds information about about transaction started to the status - * queue. - */ -struct sep_queue_info *sep_queue_status_add( - struct sep_device *sep, - u32 opcode, - u32 size, - u32 pid, - u8 *name, size_t name_len); - -/** - * sep_create_dcb_dmatables_context_kernel - Creates DCB & MLLI/DMA table context - * for kernel crypto - * @sep: SEP device - * @dcb_region: DCB region buf to create for current transaction - * @dmatables_region: MLLI/DMA tables buf to create for current transaction - * @dma_ctx: DMA context buf to create for current transaction - * @user_dcb_args: User arguments for DCB/MLLI creation - * @num_dcbs: Number of DCBs to create - */ -int sep_create_dcb_dmatables_context_kernel(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - const struct build_dcb_struct_kernel *dcb_data, - const u32 num_dcbs); - -/** - * sep_activate_dcb_dmatables_context - Takes DCB & DMA tables - * contexts into use - * @sep: SEP device - * @dcb_region: DCB region copy - * @dmatables_region: MLLI/DMA tables copy - * @dma_ctx: DMA context for current transaction - */ -ssize_t sep_activate_dcb_dmatables_context(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context *dma_ctx); - -/** - * sep_prepare_input_output_dma_table_in_dcb - prepare control blocks - * @app_in_address: unsigned long; for data buffer in (user space) - * @app_out_address: unsigned long; for data buffer out (user space) - * @data_in_size: u32; for size of data - * @block_size: u32; for block size - * @tail_block_size: u32; for size of tail block - * @isapplet: bool; to indicate external app - * @is_kva: bool; kernel buffer; only used for kernel crypto module - * @secure_dma; indicates whether this is secure_dma using IMR - * - * This function prepares the linked DMA tables and puts the - * address for the linked list of tables inta a DCB (data control - * block) the address of which is known by the SEP hardware - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, - unsigned long app_in_address, - unsigned long app_out_address, - u32 data_in_size, - u32 block_size, - u32 tail_block_size, - bool isapplet, - bool is_kva, - bool secure_dma, - struct sep_dcblock *dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - struct scatterlist *src_sg, - struct scatterlist *dst_sg); - -/** - * sep_free_dma_table_data_handler - free DMA table - * @sep: pointer to struct sep_device - * @dma_ctx: dma context - * - * Handles the request to free DMA table for synchronic actions - */ -int sep_free_dma_table_data_handler(struct sep_device *sep, - struct sep_dma_context **dma_ctx); -/** - * sep_send_command_handler - kick off a command - * @sep: SEP being signalled - * - * This function raises interrupt to SEP that signals that is has a new - * command from the host - * - * Note that this function does fall under the ioctl lock - */ -int sep_send_command_handler(struct sep_device *sep); - -/** - * sep_wait_transaction - Used for synchronizing transactions - * @sep: SEP device - */ -int sep_wait_transaction(struct sep_device *sep); - -/** - * IOCTL command defines - */ -/* magic number 1 of the sep IOCTL command */ -#define SEP_IOC_MAGIC_NUMBER 's' - -/* sends interrupt to sep that message is ready */ -#define SEP_IOCSENDSEPCOMMAND \ - _IO(SEP_IOC_MAGIC_NUMBER, 0) - -/* end transaction command */ -#define SEP_IOCENDTRANSACTION \ - _IO(SEP_IOC_MAGIC_NUMBER, 15) - -#define SEP_IOCPREPAREDCB \ - _IOW(SEP_IOC_MAGIC_NUMBER, 35, struct build_dcb_struct) - -#define SEP_IOCFREEDCB \ - _IO(SEP_IOC_MAGIC_NUMBER, 36) - -struct sep_device; - -#define SEP_IOCPREPAREDCB_SECURE_DMA \ - _IOW(SEP_IOC_MAGIC_NUMBER, 38, struct build_dcb_struct) - -#define SEP_IOCFREEDCB_SECURE_DMA \ - _IO(SEP_IOC_MAGIC_NUMBER, 39) - -#endif diff --git a/drivers/staging/sep/sep_driver_config.h b/drivers/staging/sep/sep_driver_config.h deleted file mode 100644 index 4b6e30743634..000000000000 --- a/drivers/staging/sep/sep_driver_config.h +++ /dev/null @@ -1,298 +0,0 @@ -/* - * - * sep_driver_config.h - Security Processor Driver configuration - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2010.06.26 Upgrade to Medfield - * 2011.02.22 Enable kernel crypto - * - */ - -#ifndef __SEP_DRIVER_CONFIG_H__ -#define __SEP_DRIVER_CONFIG_H__ - - -/*-------------------------------------- - DRIVER CONFIGURATION FLAGS - -------------------------------------*/ - -/* if flag is on , then the driver is running in polling and - not interrupt mode */ -#define SEP_DRIVER_POLLING_MODE 0 - -/* flag which defines if the shared area address should be - reconfigured (send to SEP anew) during init of the driver */ -#define SEP_DRIVER_RECONFIG_MESSAGE_AREA 0 - -/* the mode for running on the ARM1172 Evaluation platform (flag is 1) */ -#define SEP_DRIVER_ARM_DEBUG_MODE 0 - -/* Critical message area contents for sanity checking */ -#define SEP_START_MSG_TOKEN 0x02558808 -/*------------------------------------------- - INTERNAL DATA CONFIGURATION - -------------------------------------------*/ - -/* flag for the input array */ -#define SEP_DRIVER_IN_FLAG 0 - -/* flag for output array */ -#define SEP_DRIVER_OUT_FLAG 1 - -/* maximum number of entries in one LLI tables */ -#define SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP 31 - -/* minimum data size of the MLLI table */ -#define SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE 16 - -/* flag that signifies tah the lock is -currently held by the process (struct file) */ -#define SEP_DRIVER_OWN_LOCK_FLAG 1 - -/* flag that signifies tah the lock is currently NOT -held by the process (struct file) */ -#define SEP_DRIVER_DISOWN_LOCK_FLAG 0 - -/* indicates whether driver has mapped/unmapped shared area */ -#define SEP_REQUEST_DAEMON_MAPPED 1 -#define SEP_REQUEST_DAEMON_UNMAPPED 0 - -/*-------------------------------------------------------- - SHARED AREA memory total size is 36K - it is divided is following: - - SHARED_MESSAGE_AREA 8K } - } - STATIC_POOL_AREA 4K } MAPPED AREA ( 24 K) - } - DATA_POOL_AREA 12K } - - SYNCHRONIC_DMA_TABLES_AREA 29K - - placeholder until drver changes - FLOW_DMA_TABLES_AREA 4K - - SYSTEM_MEMORY_AREA 3k - - SYSTEM_MEMORY total size is 3k - it is divided as following: - - TIME_MEMORY_AREA 8B ------------------------------------------------------------*/ - -#define SEP_DEV_NAME "sep_sec_driver" -#define SEP_DEV_SINGLETON "sep_sec_singleton_driver" -#define SEP_DEV_DAEMON "sep_req_daemon_driver" - - -/* - the minimum length of the message - includes 2 reserved fields - at the start, then token, message size and opcode fields. all dwords -*/ -#define SEP_DRIVER_MIN_MESSAGE_SIZE_IN_BYTES (5*sizeof(u32)) - -/* - the maximum length of the message - the rest of the message shared - area will be dedicated to the dma lli tables -*/ -#define SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES (8 * 1024) - -/* the size of the message shared area in pages */ -#define SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES (8 * 1024) - -/* the size of the data pool static area in pages */ -#define SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES (4 * 1024) - -/* the size of the data pool shared area size in pages */ -#define SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES (16 * 1024) - -/* the size of the message shared area in pages */ -#define SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES (1024 * 29) - -/* Placeholder until driver changes */ -#define SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES (1024 * 4) - -/* system data (time, caller id etc') pool */ -#define SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES (1024 * 3) - -/* Offset of the sep printf buffer in the message area */ -#define SEP_DRIVER_PRINTF_OFFSET_IN_BYTES (5888) - -/* the size in bytes of the time memory */ -#define SEP_DRIVER_TIME_MEMORY_SIZE_IN_BYTES 8 - -/* the size in bytes of the RAR parameters memory */ -#define SEP_DRIVER_SYSTEM_RAR_MEMORY_SIZE_IN_BYTES 8 - -/* area size that is mapped - we map the MESSAGE AREA, STATIC POOL and - DATA POOL areas. area must be module 4k */ -#define SEP_DRIVER_MMMAP_AREA_SIZE (1024 * 28) - -/*----------------------------------------------- - offsets of the areas starting from the shared area start address -*/ - -/* message area offset */ -#define SEP_DRIVER_MESSAGE_AREA_OFFSET_IN_BYTES 0 - -/* static pool area offset */ -#define SEP_DRIVER_STATIC_AREA_OFFSET_IN_BYTES \ - (SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES) - -/* data pool area offset */ -#define SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES \ - (SEP_DRIVER_STATIC_AREA_OFFSET_IN_BYTES + \ - SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES) - -/* synchronic dma tables area offset */ -#define SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES \ - (SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES + \ - SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES) - -/* system memory offset in bytes */ -#define SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES \ - (SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + \ - SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES) - -/* offset of the time area */ -#define SEP_DRIVER_SYSTEM_TIME_MEMORY_OFFSET_IN_BYTES \ - (SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES) - -/* offset of the RAR area */ -#define SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES \ - (SEP_DRIVER_SYSTEM_TIME_MEMORY_OFFSET_IN_BYTES + \ - SEP_DRIVER_TIME_MEMORY_SIZE_IN_BYTES) - -/* offset of the caller id area */ -#define SEP_CALLER_ID_OFFSET_BYTES \ - (SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES + \ - SEP_DRIVER_SYSTEM_RAR_MEMORY_SIZE_IN_BYTES) - -/* offset of the DCB area */ -#define SEP_DRIVER_SYSTEM_DCB_MEMORY_OFFSET_IN_BYTES \ - (SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES + \ - 0x400) - -/* offset of the ext cache area */ -#define SEP_DRIVER_SYSTEM_EXT_CACHE_ADDR_OFFSET_IN_BYTES \ - SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES - -/* offset of the allocation data pointer area */ -#define SEP_DRIVER_DATA_POOL_ALLOCATION_OFFSET_IN_BYTES \ - (SEP_CALLER_ID_OFFSET_BYTES + \ - SEP_CALLER_ID_HASH_SIZE_IN_BYTES) - -/* the token that defines the start of time address */ -#define SEP_TIME_VAL_TOKEN 0x12345678 - -#define FAKE_RAR_SIZE (1024*1024) /* used only for mfld */ -/* DEBUG LEVEL MASKS */ - -/* size of the caller id hash (sha2) */ -#define SEP_CALLER_ID_HASH_SIZE_IN_BYTES 32 - -/* size of the caller id hash (sha2) in 32 bit words */ -#define SEP_CALLER_ID_HASH_SIZE_IN_WORDS 8 - -/* maximum number of entries in the caller id table */ -#define SEP_CALLER_ID_TABLE_NUM_ENTRIES 20 - -/* maximum number of symmetric operation (that require DMA resource) - per one message */ -#define SEP_MAX_NUM_SYNC_DMA_OPS 16 - -/* the token that defines the start of time address */ -#define SEP_RAR_VAL_TOKEN 0xABABABAB - -/* ioctl error that should be returned when trying - to realloc the cache/resident second time */ -#define SEP_ALREADY_INITIALIZED_ERR 12 - -/* bit that locks access to the shared area */ -#define SEP_TRANSACTION_STARTED_LOCK_BIT 0 - -/* bit that lock access to the poll - after send_command */ -#define SEP_WORKING_LOCK_BIT 1 - -/* the token that defines the static pool address address */ -#define SEP_STATIC_POOL_VAL_TOKEN 0xABBAABBA - -/* the token that defines the data pool pointers address */ -#define SEP_DATA_POOL_POINTERS_VAL_TOKEN 0xEDDEEDDE - -/* the token that defines the data pool pointers address */ -#define SEP_EXT_CACHE_ADDR_VAL_TOKEN 0xBABABABA - -/* Time limit for SEP to finish */ -#define WAIT_TIME 10 - -/* Delay for pm runtime suspend (reduces pm thrashing with bursty traffic */ -#define SUSPEND_DELAY 10 - -/* Number of delays to wait until scu boots after runtime resume */ -#define SCU_DELAY_MAX 50 - -/* Delay for each iteration (usec) wait for scu boots after runtime resume */ -#define SCU_DELAY_ITERATION 10 - - -/* - * Bits used in struct sep_call_status to check that - * driver's APIs are called in valid order - */ - -/* Bit offset which indicates status of sep_write() */ -#define SEP_FASTCALL_WRITE_DONE_OFFSET 0 - -/* Bit offset which indicates status of sep_mmap() */ -#define SEP_LEGACY_MMAP_DONE_OFFSET 1 - -/* Bit offset which indicates status of the SEP_IOCSENDSEPCOMMAND ioctl */ -#define SEP_LEGACY_SENDMSG_DONE_OFFSET 2 - -/* Bit offset which indicates status of sep_poll() */ -#define SEP_LEGACY_POLL_DONE_OFFSET 3 - -/* Bit offset which indicates status of the SEP_IOCENDTRANSACTION ioctl */ -#define SEP_LEGACY_ENDTRANSACTION_DONE_OFFSET 4 - -/* - * Used to limit number of concurrent processes - * allowed to allocate dynamic buffers in fastcall - * interface. - */ -#define SEP_DOUBLEBUF_USERS_LIMIT 3 - -/* Identifier for valid fastcall header */ -#define SEP_FC_MAGIC 0xFFAACCAA - -/* - * Used for enabling driver runtime power management. - * Useful for enabling/disabling it during performance - * testing - */ -#define SEP_ENABLE_RUNTIME_PM - -#endif /* SEP DRIVER CONFIG */ diff --git a/drivers/staging/sep/sep_driver_hw_defs.h b/drivers/staging/sep/sep_driver_hw_defs.h deleted file mode 100644 index a6a448170382..000000000000 --- a/drivers/staging/sep/sep_driver_hw_defs.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * - * sep_driver_hw_defs.h - Security Processor Driver hardware definitions - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2010.09.20 Upgrade to Medfield - * 2011.02.22 Enable kernel crypto - * - */ - -#ifndef SEP_DRIVER_HW_DEFS__H -#define SEP_DRIVER_HW_DEFS__H - -/*----------------------- */ -/* HW Registers Defines. */ -/* */ -/*---------------------- -*/ - - -/* cf registers */ -#define HW_HOST_IRR_REG_ADDR 0x0A00UL -#define HW_HOST_IMR_REG_ADDR 0x0A04UL -#define HW_HOST_ICR_REG_ADDR 0x0A08UL -#define HW_HOST_SEP_HOST_GPR0_REG_ADDR 0x0B00UL -#define HW_HOST_SEP_HOST_GPR1_REG_ADDR 0x0B04UL -#define HW_HOST_SEP_HOST_GPR2_REG_ADDR 0x0B08UL -#define HW_HOST_SEP_HOST_GPR3_REG_ADDR 0x0B0CUL -#define HW_HOST_HOST_SEP_GPR0_REG_ADDR 0x0B80UL -#define HW_HOST_HOST_SEP_GPR1_REG_ADDR 0x0B84UL -#define HW_HOST_HOST_SEP_GPR2_REG_ADDR 0x0B88UL -#define HW_HOST_HOST_SEP_GPR3_REG_ADDR 0x0B8CUL -#define HW_SRAM_DATA_READY_REG_ADDR 0x0F08UL - -#endif /* ifndef HW_DEFS */ diff --git a/drivers/staging/sep/sep_main.c b/drivers/staging/sep/sep_main.c deleted file mode 100644 index 85fea5fc5e59..000000000000 --- a/drivers/staging/sep/sep_main.c +++ /dev/null @@ -1,4411 +0,0 @@ -/* - * - * sep_main.c - Security Processor Driver main group of functions - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. All rights reserved. - * - * 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; version 2 of the License. - * - * 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. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2009.06.26 Initial publish - * 2010.09.14 Upgrade to Medfield - * 2011.01.21 Move to sep_main.c to allow for sep_crypto.c - * 2011.02.22 Enable kernel crypto operation - * - * Please note that this driver is based on information in the Discretix - * CryptoCell 5.2 Driver Implementation Guide; the Discretix CryptoCell 5.2 - * Integration Intel Medfield appendix; the Discretix CryptoCell 5.2 - * Linux Driver Integration Guide; and the Discretix CryptoCell 5.2 System - * Overview and Integration Guide. - */ -/* #define DEBUG */ -/* #define SEP_PERF_DEBUG */ - -#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 - -#include "sep_driver_hw_defs.h" -#include "sep_driver_config.h" -#include "sep_driver_api.h" -#include "sep_dev.h" -#include "sep_crypto.h" - -#define CREATE_TRACE_POINTS -#include "sep_trace_events.h" - -/* - * Let's not spend cycles iterating over message - * area contents if debugging not enabled - */ -#ifdef DEBUG -#define sep_dump_message(sep) _sep_dump_message(sep) -#else -#define sep_dump_message(sep) -#endif - -/** - * Currently, there is only one SEP device per platform; - * In event platforms in the future have more than one SEP - * device, this will be a linked list - */ - -struct sep_device *sep_dev; - -/** - * sep_queue_status_remove - Removes transaction from status queue - * @sep: SEP device - * @sep_queue_info: pointer to status queue - * - * This function will remove information about transaction from the queue. - */ -void sep_queue_status_remove(struct sep_device *sep, - struct sep_queue_info **queue_elem) -{ - unsigned long lck_flags; - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_queue_status_remove\n", - current->pid); - - if (!queue_elem || !(*queue_elem)) { - dev_dbg(&sep->pdev->dev, "PID%d %s null\n", - current->pid, __func__); - return; - } - - spin_lock_irqsave(&sep->sep_queue_lock, lck_flags); - list_del(&(*queue_elem)->list); - sep->sep_queue_num--; - spin_unlock_irqrestore(&sep->sep_queue_lock, lck_flags); - - kfree(*queue_elem); - *queue_elem = NULL; - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_queue_status_remove return\n", - current->pid); -} - -/** - * sep_queue_status_add - Adds transaction to status queue - * @sep: SEP device - * @opcode: transaction opcode - * @size: input data size - * @pid: pid of current process - * @name: current process name - * @name_len: length of name (current process) - * - * This function adds information about about transaction started to the status - * queue. - */ -struct sep_queue_info *sep_queue_status_add( - struct sep_device *sep, - u32 opcode, - u32 size, - u32 pid, - u8 *name, size_t name_len) -{ - unsigned long lck_flags; - struct sep_queue_info *my_elem = NULL; - - my_elem = kzalloc(sizeof(struct sep_queue_info), GFP_KERNEL); - - if (!my_elem) - return NULL; - - dev_dbg(&sep->pdev->dev, "[PID%d] kzalloc ok\n", current->pid); - - my_elem->data.opcode = opcode; - my_elem->data.size = size; - my_elem->data.pid = pid; - - if (name_len > TASK_COMM_LEN) - name_len = TASK_COMM_LEN; - - memcpy(&my_elem->data.name, name, name_len); - - spin_lock_irqsave(&sep->sep_queue_lock, lck_flags); - - list_add_tail(&my_elem->list, &sep->sep_queue_status); - sep->sep_queue_num++; - - spin_unlock_irqrestore(&sep->sep_queue_lock, lck_flags); - - return my_elem; -} - -/** - * sep_allocate_dmatables_region - Allocates buf for the MLLI/DMA tables - * @sep: SEP device - * @dmatables_region: Destination pointer for the buffer - * @dma_ctx: DMA context for the transaction - * @table_count: Number of MLLI/DMA tables to create - * The buffer created will not work as-is for DMA operations, - * it needs to be copied over to the appropriate place in the - * shared area. - */ -static int sep_allocate_dmatables_region(struct sep_device *sep, - void **dmatables_region, - struct sep_dma_context *dma_ctx, - const u32 table_count) -{ - const size_t new_len = - SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES - 1; - - void *tmp_region = NULL; - - dev_dbg(&sep->pdev->dev, "[PID%d] dma_ctx = 0x%p\n", - current->pid, dma_ctx); - dev_dbg(&sep->pdev->dev, "[PID%d] dmatables_region = 0x%p\n", - current->pid, dmatables_region); - - if (!dma_ctx || !dmatables_region) { - dev_warn(&sep->pdev->dev, - "[PID%d] dma context/region uninitialized\n", - current->pid); - return -EINVAL; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] newlen = 0x%08zX\n", - current->pid, new_len); - dev_dbg(&sep->pdev->dev, "[PID%d] oldlen = 0x%08X\n", current->pid, - dma_ctx->dmatables_len); - tmp_region = kzalloc(new_len + dma_ctx->dmatables_len, GFP_KERNEL); - if (!tmp_region) - return -ENOMEM; - - /* Were there any previous tables that need to be preserved ? */ - if (*dmatables_region) { - memcpy(tmp_region, *dmatables_region, dma_ctx->dmatables_len); - kfree(*dmatables_region); - *dmatables_region = NULL; - } - - *dmatables_region = tmp_region; - - dma_ctx->dmatables_len += new_len; - - return 0; -} - -/** - * sep_wait_transaction - Used for synchronizing transactions - * @sep: SEP device - */ -int sep_wait_transaction(struct sep_device *sep) -{ - int error = 0; - DEFINE_WAIT(wait); - - if (0 == test_and_set_bit(SEP_TRANSACTION_STARTED_LOCK_BIT, - &sep->in_use_flags)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] no transactions, returning\n", - current->pid); - goto end_function_setpid; - } - - /* - * Looping needed even for exclusive waitq entries - * due to process wakeup latencies, previous process - * might have already created another transaction. - */ - for (;;) { - /* - * Exclusive waitq entry, so that only one process is - * woken up from the queue at a time. - */ - prepare_to_wait_exclusive(&sep->event_transactions, - &wait, - TASK_INTERRUPTIBLE); - if (0 == test_and_set_bit(SEP_TRANSACTION_STARTED_LOCK_BIT, - &sep->in_use_flags)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] no transactions, breaking\n", - current->pid); - break; - } - dev_dbg(&sep->pdev->dev, - "[PID%d] transactions ongoing, sleeping\n", - current->pid); - schedule(); - dev_dbg(&sep->pdev->dev, "[PID%d] woken up\n", current->pid); - - if (signal_pending(current)) { - dev_dbg(&sep->pdev->dev, "[PID%d] received signal\n", - current->pid); - error = -EINTR; - goto end_function; - } - } -end_function_setpid: - /* - * The pid_doing_transaction indicates that this process - * now owns the facilities to perform a transaction with - * the SEP. While this process is performing a transaction, - * no other process who has the SEP device open can perform - * any transactions. This method allows more than one process - * to have the device open at any given time, which provides - * finer granularity for device utilization by multiple - * processes. - */ - /* Only one process is able to progress here at a time */ - sep->pid_doing_transaction = current->pid; - -end_function: - finish_wait(&sep->event_transactions, &wait); - - return error; -} - -/** - * sep_check_transaction_owner - Checks if current process owns transaction - * @sep: SEP device - */ -static inline int sep_check_transaction_owner(struct sep_device *sep) -{ - dev_dbg(&sep->pdev->dev, "[PID%d] transaction pid = %d\n", - current->pid, - sep->pid_doing_transaction); - - if ((sep->pid_doing_transaction == 0) || - (current->pid != sep->pid_doing_transaction)) { - return -EACCES; - } - - /* We own the transaction */ - return 0; -} - -#ifdef DEBUG - -/** - * sep_dump_message - dump the message that is pending - * @sep: SEP device - * This will only print dump if DEBUG is set; it does - * follow kernel debug print enabling - */ -static void _sep_dump_message(struct sep_device *sep) -{ - int count; - - u32 *p = sep->shared_addr; - - for (count = 0; count < 10 * 4; count += 4) - dev_dbg(&sep->pdev->dev, - "[PID%d] Word %d of the message is %x\n", - current->pid, count/4, *p++); -} - -#endif - -/** - * sep_map_and_alloc_shared_area -allocate shared block - * @sep: security processor - * @size: size of shared area - */ -static int sep_map_and_alloc_shared_area(struct sep_device *sep) -{ - sep->shared_addr = dma_alloc_coherent(&sep->pdev->dev, - sep->shared_size, - &sep->shared_bus, GFP_KERNEL); - - if (!sep->shared_addr) { - dev_dbg(&sep->pdev->dev, - "[PID%d] shared memory dma_alloc_coherent failed\n", - current->pid); - return -ENOMEM; - } - dev_dbg(&sep->pdev->dev, - "[PID%d] shared_addr %zx bytes @%p (bus %llx)\n", - current->pid, - sep->shared_size, sep->shared_addr, - (unsigned long long)sep->shared_bus); - return 0; -} - -/** - * sep_unmap_and_free_shared_area - free shared block - * @sep: security processor - */ -static void sep_unmap_and_free_shared_area(struct sep_device *sep) -{ - dma_free_coherent(&sep->pdev->dev, sep->shared_size, - sep->shared_addr, sep->shared_bus); -} - -#ifdef DEBUG - -/** - * sep_shared_bus_to_virt - convert bus/virt addresses - * @sep: pointer to struct sep_device - * @bus_address: address to convert - * - * Returns virtual address inside the shared area according - * to the bus address. - */ -static void *sep_shared_bus_to_virt(struct sep_device *sep, - dma_addr_t bus_address) -{ - return sep->shared_addr + (bus_address - sep->shared_bus); -} - -#endif - -/** - * sep_open - device open method - * @inode: inode of SEP device - * @filp: file handle to SEP device - * - * Open method for the SEP device. Called when userspace opens - * the SEP device node. - * - * Returns zero on success otherwise an error code. - */ -static int sep_open(struct inode *inode, struct file *filp) -{ - struct sep_device *sep; - struct sep_private_data *priv; - - dev_dbg(&sep_dev->pdev->dev, "[PID%d] open\n", current->pid); - - if (filp->f_flags & O_NONBLOCK) - return -ENOTSUPP; - - /* - * Get the SEP device structure and use it for the - * private_data field in filp for other methods - */ - - priv = kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - sep = sep_dev; - priv->device = sep; - filp->private_data = priv; - - dev_dbg(&sep_dev->pdev->dev, "[PID%d] priv is 0x%p\n", - current->pid, priv); - - /* Anyone can open; locking takes place at transaction level */ - return 0; -} - -/** - * sep_free_dma_table_data_handler - free DMA table - * @sep: pointer to struct sep_device - * @dma_ctx: dma context - * - * Handles the request to free DMA table for synchronic actions - */ -int sep_free_dma_table_data_handler(struct sep_device *sep, - struct sep_dma_context **dma_ctx) -{ - int count; - int dcb_counter; - /* Pointer to the current dma_resource struct */ - struct sep_dma_resource *dma; - - dev_dbg(&sep->pdev->dev, - "[PID%d] sep_free_dma_table_data_handler\n", - current->pid); - - if (!dma_ctx || !(*dma_ctx)) { - /* No context or context already freed */ - dev_dbg(&sep->pdev->dev, - "[PID%d] no DMA context or context already freed\n", - current->pid); - - return 0; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] (*dma_ctx)->nr_dcb_creat 0x%x\n", - current->pid, - (*dma_ctx)->nr_dcb_creat); - - for (dcb_counter = 0; - dcb_counter < (*dma_ctx)->nr_dcb_creat; dcb_counter++) { - dma = &(*dma_ctx)->dma_res_arr[dcb_counter]; - - /* Unmap and free input map array */ - if (dma->in_map_array) { - for (count = 0; count < dma->in_num_pages; count++) { - dma_unmap_page(&sep->pdev->dev, - dma->in_map_array[count].dma_addr, - dma->in_map_array[count].size, - DMA_TO_DEVICE); - } - kfree(dma->in_map_array); - } - - /** - * Output is handled different. If - * this was a secure dma into restricted memory, - * then we skip this step altogether as restricted - * memory is not available to the o/s at all. - */ - if (!(*dma_ctx)->secure_dma && dma->out_map_array) { - for (count = 0; count < dma->out_num_pages; count++) { - dma_unmap_page(&sep->pdev->dev, - dma->out_map_array[count].dma_addr, - dma->out_map_array[count].size, - DMA_FROM_DEVICE); - } - kfree(dma->out_map_array); - } - - /* Free page cache for output */ - if (dma->in_page_array) { - for (count = 0; count < dma->in_num_pages; count++) { - flush_dcache_page(dma->in_page_array[count]); - page_cache_release(dma->in_page_array[count]); - } - kfree(dma->in_page_array); - } - - /* Again, we do this only for non secure dma */ - if (!(*dma_ctx)->secure_dma && dma->out_page_array) { - for (count = 0; count < dma->out_num_pages; count++) { - if (!PageReserved(dma->out_page_array[count])) - - SetPageDirty(dma-> - out_page_array[count]); - - flush_dcache_page(dma->out_page_array[count]); - page_cache_release(dma->out_page_array[count]); - } - kfree(dma->out_page_array); - } - - /** - * Note that here we use in_map_num_entries because we - * don't have a page array; the page array is generated - * only in the lock_user_pages, which is not called - * for kernel crypto, which is what the sg (scatter gather - * is used for exclusively) - */ - if (dma->src_sg) { - dma_unmap_sg(&sep->pdev->dev, dma->src_sg, - dma->in_map_num_entries, DMA_TO_DEVICE); - dma->src_sg = NULL; - } - - if (dma->dst_sg) { - dma_unmap_sg(&sep->pdev->dev, dma->dst_sg, - dma->in_map_num_entries, DMA_FROM_DEVICE); - dma->dst_sg = NULL; - } - - /* Reset all the values */ - dma->in_page_array = NULL; - dma->out_page_array = NULL; - dma->in_num_pages = 0; - dma->out_num_pages = 0; - dma->in_map_array = NULL; - dma->out_map_array = NULL; - dma->in_map_num_entries = 0; - dma->out_map_num_entries = 0; - } - - (*dma_ctx)->nr_dcb_creat = 0; - (*dma_ctx)->num_lli_tables_created = 0; - - kfree(*dma_ctx); - *dma_ctx = NULL; - - dev_dbg(&sep->pdev->dev, - "[PID%d] sep_free_dma_table_data_handler end\n", - current->pid); - - return 0; -} - -/** - * sep_end_transaction_handler - end transaction - * @sep: pointer to struct sep_device - * @dma_ctx: DMA context - * @call_status: Call status - * - * This API handles the end transaction request. - */ -static int sep_end_transaction_handler(struct sep_device *sep, - struct sep_dma_context **dma_ctx, - struct sep_call_status *call_status, - struct sep_queue_info **my_queue_elem) -{ - dev_dbg(&sep->pdev->dev, "[PID%d] ending transaction\n", current->pid); - - /* - * Extraneous transaction clearing would mess up PM - * device usage counters and SEP would get suspended - * just before we send a command to SEP in the next - * transaction - * */ - if (sep_check_transaction_owner(sep)) { - dev_dbg(&sep->pdev->dev, "[PID%d] not transaction owner\n", - current->pid); - return 0; - } - - /* Update queue status */ - sep_queue_status_remove(sep, my_queue_elem); - - /* Check that all the DMA resources were freed */ - if (dma_ctx) - sep_free_dma_table_data_handler(sep, dma_ctx); - - /* Reset call status for next transaction */ - if (call_status) - call_status->status = 0; - - /* Clear the message area to avoid next transaction reading - * sensitive results from previous transaction */ - memset(sep->shared_addr, 0, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - /* start suspend delay */ -#ifdef SEP_ENABLE_RUNTIME_PM - if (sep->in_use) { - sep->in_use = 0; - pm_runtime_mark_last_busy(&sep->pdev->dev); - pm_runtime_put_autosuspend(&sep->pdev->dev); - } -#endif - - clear_bit(SEP_WORKING_LOCK_BIT, &sep->in_use_flags); - sep->pid_doing_transaction = 0; - - /* Now it's safe for next process to proceed */ - dev_dbg(&sep->pdev->dev, "[PID%d] waking up next transaction\n", - current->pid); - clear_bit(SEP_TRANSACTION_STARTED_LOCK_BIT, &sep->in_use_flags); - wake_up(&sep->event_transactions); - - return 0; -} - -/** - * sep_release - close a SEP device - * @inode: inode of SEP device - * @filp: file handle being closed - * - * Called on the final close of a SEP device. - */ -static int sep_release(struct inode *inode, struct file *filp) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - struct sep_dma_context **dma_ctx = &private_data->dma_ctx; - struct sep_queue_info **my_queue_elem = &private_data->my_queue_elem; - - dev_dbg(&sep->pdev->dev, "[PID%d] release\n", current->pid); - - sep_end_transaction_handler(sep, dma_ctx, call_status, - my_queue_elem); - - kfree(filp->private_data); - - return 0; -} - -/** - * sep_mmap - maps the shared area to user space - * @filp: pointer to struct file - * @vma: pointer to vm_area_struct - * - * Called on an mmap of our space via the normal SEP device - */ -static int sep_mmap(struct file *filp, struct vm_area_struct *vma) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - struct sep_queue_info **my_queue_elem = &private_data->my_queue_elem; - dma_addr_t bus_addr; - unsigned long error = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_mmap\n", current->pid); - - /* Set the transaction busy (own the device) */ - /* - * Problem for multithreaded applications is that here we're - * possibly going to sleep while holding a write lock on - * current->mm->mmap_sem, which will cause deadlock for ongoing - * transaction trying to create DMA tables - */ - error = sep_wait_transaction(sep); - if (error) - /* Interrupted by signal, don't clear transaction */ - goto end_function; - - /* Clear the message area to avoid next transaction reading - * sensitive results from previous transaction */ - memset(sep->shared_addr, 0, - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES); - - /* - * Check that the size of the mapped range is as the size of the message - * shared area - */ - if ((vma->vm_end - vma->vm_start) > SEP_DRIVER_MMMAP_AREA_SIZE) { - error = -EINVAL; - goto end_function_with_error; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] shared_addr is %p\n", - current->pid, sep->shared_addr); - - /* Get bus address */ - bus_addr = sep->shared_bus; - - if (remap_pfn_range(vma, vma->vm_start, bus_addr >> PAGE_SHIFT, - vma->vm_end - vma->vm_start, vma->vm_page_prot)) { - dev_dbg(&sep->pdev->dev, "[PID%d] remap_pfn_range failed\n", - current->pid); - error = -EAGAIN; - goto end_function_with_error; - } - - /* Update call status */ - set_bit(SEP_LEGACY_MMAP_DONE_OFFSET, &call_status->status); - - goto end_function; - -end_function_with_error: - /* Clear our transaction */ - sep_end_transaction_handler(sep, NULL, call_status, - my_queue_elem); - -end_function: - return error; -} - -/** - * sep_poll - poll handler - * @filp: pointer to struct file - * @wait: pointer to poll_table - * - * Called by the OS when the kernel is asked to do a poll on - * a SEP file handle. - */ -static unsigned int sep_poll(struct file *filp, poll_table *wait) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - u32 mask = 0; - u32 retval = 0; - u32 retval2 = 0; - unsigned long lock_irq_flag; - - /* Am I the process that owns the transaction? */ - if (sep_check_transaction_owner(sep)) { - dev_dbg(&sep->pdev->dev, "[PID%d] poll pid not owner\n", - current->pid); - mask = POLLERR; - goto end_function; - } - - /* Check if send command or send_reply were activated previously */ - if (0 == test_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &call_status->status)) { - dev_warn(&sep->pdev->dev, "[PID%d] sendmsg not called\n", - current->pid); - mask = POLLERR; - goto end_function; - } - - /* Add the event to the polling wait table */ - dev_dbg(&sep->pdev->dev, "[PID%d] poll: calling wait sep_event\n", - current->pid); - - poll_wait(filp, &sep->event_interrupt, wait); - - dev_dbg(&sep->pdev->dev, - "[PID%d] poll: send_ct is %lx reply ct is %lx\n", - current->pid, sep->send_ct, sep->reply_ct); - - /* Check if error occurred during poll */ - retval2 = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - if ((retval2 != 0x0) && (retval2 != 0x8)) { - dev_dbg(&sep->pdev->dev, "[PID%d] poll; poll error %x\n", - current->pid, retval2); - mask |= POLLERR; - goto end_function; - } - - spin_lock_irqsave(&sep->snd_rply_lck, lock_irq_flag); - - if (sep->send_ct == sep->reply_ct) { - spin_unlock_irqrestore(&sep->snd_rply_lck, lock_irq_flag); - retval = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - dev_dbg(&sep->pdev->dev, - "[PID%d] poll: data ready check (GPR2) %x\n", - current->pid, retval); - - /* Check if printf request */ - if ((retval >> 30) & 0x1) { - dev_dbg(&sep->pdev->dev, - "[PID%d] poll: SEP printf request\n", - current->pid); - goto end_function; - } - - /* Check if the this is SEP reply or request */ - if (retval >> 31) { - dev_dbg(&sep->pdev->dev, - "[PID%d] poll: SEP request\n", - current->pid); - } else { - dev_dbg(&sep->pdev->dev, - "[PID%d] poll: normal return\n", - current->pid); - sep_dump_message(sep); - dev_dbg(&sep->pdev->dev, - "[PID%d] poll; SEP reply POLLIN|POLLRDNORM\n", - current->pid); - mask |= POLLIN | POLLRDNORM; - } - set_bit(SEP_LEGACY_POLL_DONE_OFFSET, &call_status->status); - } else { - spin_unlock_irqrestore(&sep->snd_rply_lck, lock_irq_flag); - dev_dbg(&sep->pdev->dev, - "[PID%d] poll; no reply; returning mask of 0\n", - current->pid); - mask = 0; - } - -end_function: - return mask; -} - -/** - * sep_time_address - address in SEP memory of time - * @sep: SEP device we want the address from - * - * Return the address of the two dwords in memory used for time - * setting. - */ -static u32 *sep_time_address(struct sep_device *sep) -{ - return sep->shared_addr + - SEP_DRIVER_SYSTEM_TIME_MEMORY_OFFSET_IN_BYTES; -} - -/** - * sep_set_time - set the SEP time - * @sep: the SEP we are setting the time for - * - * Calculates time and sets it at the predefined address. - * Called with the SEP mutex held. - */ -static unsigned long sep_set_time(struct sep_device *sep) -{ - struct timeval time; - u32 *time_addr; /* Address of time as seen by the kernel */ - - do_gettimeofday(&time); - - /* Set value in the SYSTEM MEMORY offset */ - time_addr = sep_time_address(sep); - - time_addr[0] = SEP_TIME_VAL_TOKEN; - time_addr[1] = time.tv_sec; - - dev_dbg(&sep->pdev->dev, "[PID%d] time.tv_sec is %lu\n", - current->pid, time.tv_sec); - dev_dbg(&sep->pdev->dev, "[PID%d] time_addr is %p\n", - current->pid, time_addr); - dev_dbg(&sep->pdev->dev, "[PID%d] sep->shared_addr is %p\n", - current->pid, sep->shared_addr); - - return time.tv_sec; -} - -/** - * sep_send_command_handler - kick off a command - * @sep: SEP being signalled - * - * This function raises interrupt to SEP that signals that is has a new - * command from the host - * - * Note that this function does fall under the ioctl lock - */ -int sep_send_command_handler(struct sep_device *sep) -{ - unsigned long lock_irq_flag; - u32 *msg_pool; - int error = 0; - - /* Basic sanity check; set msg pool to start of shared area */ - msg_pool = (u32 *)sep->shared_addr; - msg_pool += 2; - - /* Look for start msg token */ - if (*msg_pool != SEP_START_MSG_TOKEN) { - dev_warn(&sep->pdev->dev, "start message token not present\n"); - error = -EPROTO; - goto end_function; - } - - /* Do we have a reasonable size? */ - msg_pool += 1; - if ((*msg_pool < 2) || - (*msg_pool > SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES)) { - dev_warn(&sep->pdev->dev, "invalid message size\n"); - error = -EPROTO; - goto end_function; - } - - /* Does the command look reasonable? */ - msg_pool += 1; - if (*msg_pool < 2) { - dev_warn(&sep->pdev->dev, "invalid message opcode\n"); - error = -EPROTO; - goto end_function; - } - -#if defined(CONFIG_PM_RUNTIME) && defined(SEP_ENABLE_RUNTIME_PM) - dev_dbg(&sep->pdev->dev, "[PID%d] before pm sync status 0x%X\n", - current->pid, - sep->pdev->dev.power.runtime_status); - sep->in_use = 1; /* device is about to be used */ - pm_runtime_get_sync(&sep->pdev->dev); -#endif - - if (test_and_set_bit(SEP_WORKING_LOCK_BIT, &sep->in_use_flags)) { - error = -EPROTO; - goto end_function; - } - sep->in_use = 1; /* device is about to be used */ - sep_set_time(sep); - - sep_dump_message(sep); - - /* Update counter */ - spin_lock_irqsave(&sep->snd_rply_lck, lock_irq_flag); - sep->send_ct++; - spin_unlock_irqrestore(&sep->snd_rply_lck, lock_irq_flag); - - dev_dbg(&sep->pdev->dev, - "[PID%d] sep_send_command_handler send_ct %lx reply_ct %lx\n", - current->pid, sep->send_ct, sep->reply_ct); - - /* Send interrupt to SEP */ - sep_write_reg(sep, HW_HOST_HOST_SEP_GPR0_REG_ADDR, 0x2); - -end_function: - return error; -} - -/** - * sep_crypto_dma - - * @sep: pointer to struct sep_device - * @sg: pointer to struct scatterlist - * @direction: - * @dma_maps: pointer to place a pointer to array of dma maps - * This is filled in; anything previous there will be lost - * The structure for dma maps is sep_dma_map - * @returns number of dma maps on success; negative on error - * - * This creates the dma table from the scatterlist - * It is used only for kernel crypto as it works with scatterlists - * representation of data buffers - * - */ -static int sep_crypto_dma( - struct sep_device *sep, - struct scatterlist *sg, - struct sep_dma_map **dma_maps, - enum dma_data_direction direction) -{ - struct scatterlist *temp_sg; - - u32 count_segment; - u32 count_mapped; - struct sep_dma_map *sep_dma; - int ct1; - - if (sg->length == 0) - return 0; - - /* Count the segments */ - temp_sg = sg; - count_segment = 0; - while (temp_sg) { - count_segment += 1; - temp_sg = scatterwalk_sg_next(temp_sg); - } - dev_dbg(&sep->pdev->dev, - "There are (hex) %x segments in sg\n", count_segment); - - /* DMA map segments */ - count_mapped = dma_map_sg(&sep->pdev->dev, sg, - count_segment, direction); - - dev_dbg(&sep->pdev->dev, - "There are (hex) %x maps in sg\n", count_mapped); - - if (count_mapped == 0) { - dev_dbg(&sep->pdev->dev, "Cannot dma_map_sg\n"); - return -ENOMEM; - } - - sep_dma = kmalloc(sizeof(struct sep_dma_map) * - count_mapped, GFP_ATOMIC); - - if (sep_dma == NULL) { - dev_dbg(&sep->pdev->dev, "Cannot allocate dma_maps\n"); - return -ENOMEM; - } - - for_each_sg(sg, temp_sg, count_mapped, ct1) { - sep_dma[ct1].dma_addr = sg_dma_address(temp_sg); - sep_dma[ct1].size = sg_dma_len(temp_sg); - dev_dbg(&sep->pdev->dev, "(all hex) map %x dma %lx len %lx\n", - ct1, (unsigned long)sep_dma[ct1].dma_addr, - (unsigned long)sep_dma[ct1].size); - } - - *dma_maps = sep_dma; - return count_mapped; -} - -/** - * sep_crypto_lli - - * @sep: pointer to struct sep_device - * @sg: pointer to struct scatterlist - * @data_size: total data size - * @direction: - * @dma_maps: pointer to place a pointer to array of dma maps - * This is filled in; anything previous there will be lost - * The structure for dma maps is sep_dma_map - * @lli_maps: pointer to place a pointer to array of lli maps - * This is filled in; anything previous there will be lost - * The structure for dma maps is sep_dma_map - * @returns number of dma maps on success; negative on error - * - * This creates the LLI table from the scatterlist - * It is only used for kernel crypto as it works exclusively - * with scatterlists (struct scatterlist) representation of - * data buffers - */ -static int sep_crypto_lli( - struct sep_device *sep, - struct scatterlist *sg, - struct sep_dma_map **maps, - struct sep_lli_entry **llis, - u32 data_size, - enum dma_data_direction direction) -{ - int ct1; - struct sep_lli_entry *sep_lli; - struct sep_dma_map *sep_map; - - int nbr_ents; - - nbr_ents = sep_crypto_dma(sep, sg, maps, direction); - if (nbr_ents <= 0) { - dev_dbg(&sep->pdev->dev, "crypto_dma failed %x\n", - nbr_ents); - return nbr_ents; - } - - sep_map = *maps; - - sep_lli = kmalloc(sizeof(struct sep_lli_entry) * nbr_ents, GFP_ATOMIC); - - if (sep_lli == NULL) { - dev_dbg(&sep->pdev->dev, "Cannot allocate lli_maps\n"); - - kfree(*maps); - *maps = NULL; - return -ENOMEM; - } - - for (ct1 = 0; ct1 < nbr_ents; ct1 += 1) { - sep_lli[ct1].bus_address = (u32)sep_map[ct1].dma_addr; - - /* Maximum for page is total data size */ - if (sep_map[ct1].size > data_size) - sep_map[ct1].size = data_size; - - sep_lli[ct1].block_size = (u32)sep_map[ct1].size; - } - - *llis = sep_lli; - return nbr_ents; -} - -/** - * sep_lock_kernel_pages - map kernel pages for DMA - * @sep: pointer to struct sep_device - * @kernel_virt_addr: address of data buffer in kernel - * @data_size: size of data - * @lli_array_ptr: lli array - * @in_out_flag: input into device or output from device - * - * This function locks all the physical pages of the kernel virtual buffer - * and construct a basic lli array, where each entry holds the physical - * page address and the size that application data holds in this page - * This function is used only during kernel crypto mod calls from within - * the kernel (when ioctl is not used) - * - * This is used only for kernel crypto. Kernel pages - * are handled differently as they are done via - * scatter gather lists (struct scatterlist) - */ -static int sep_lock_kernel_pages(struct sep_device *sep, - unsigned long kernel_virt_addr, - u32 data_size, - struct sep_lli_entry **lli_array_ptr, - int in_out_flag, - struct sep_dma_context *dma_ctx) - -{ - u32 num_pages; - struct scatterlist *sg; - - /* Array of lli */ - struct sep_lli_entry *lli_array; - /* Map array */ - struct sep_dma_map *map_array; - - enum dma_data_direction direction; - - lli_array = NULL; - map_array = NULL; - - if (in_out_flag == SEP_DRIVER_IN_FLAG) { - direction = DMA_TO_DEVICE; - sg = dma_ctx->src_sg; - } else { - direction = DMA_FROM_DEVICE; - sg = dma_ctx->dst_sg; - } - - num_pages = sep_crypto_lli(sep, sg, &map_array, &lli_array, - data_size, direction); - - if (num_pages <= 0) { - dev_dbg(&sep->pdev->dev, "sep_crypto_lli returned error %x\n", - num_pages); - return -ENOMEM; - } - - /* Put mapped kernel sg into kernel resource array */ - - /* Set output params according to the in_out flag */ - if (in_out_flag == SEP_DRIVER_IN_FLAG) { - *lli_array_ptr = lli_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = - NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array = - map_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_num_entries = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].src_sg = - dma_ctx->src_sg; - } else { - *lli_array_ptr = lli_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_num_pages = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = - NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_array = - map_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat]. - out_map_num_entries = num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].dst_sg = - dma_ctx->dst_sg; - } - - return 0; -} - -/** - * sep_lock_user_pages - lock and map user pages for DMA - * @sep: pointer to struct sep_device - * @app_virt_addr: user memory data buffer - * @data_size: size of data buffer - * @lli_array_ptr: lli array - * @in_out_flag: input or output to device - * - * This function locks all the physical pages of the application - * virtual buffer and construct a basic lli array, where each entry - * holds the physical page address and the size that application - * data holds in this physical pages - */ -static int sep_lock_user_pages(struct sep_device *sep, - u32 app_virt_addr, - u32 data_size, - struct sep_lli_entry **lli_array_ptr, - int in_out_flag, - struct sep_dma_context *dma_ctx) - -{ - int error = 0; - u32 count; - int result; - /* The the page of the end address of the user space buffer */ - u32 end_page; - /* The page of the start address of the user space buffer */ - u32 start_page; - /* The range in pages */ - u32 num_pages; - /* Array of pointers to page */ - struct page **page_array; - /* Array of lli */ - struct sep_lli_entry *lli_array; - /* Map array */ - struct sep_dma_map *map_array; - - /* Set start and end pages and num pages */ - end_page = (app_virt_addr + data_size - 1) >> PAGE_SHIFT; - start_page = app_virt_addr >> PAGE_SHIFT; - num_pages = end_page - start_page + 1; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lock user pages app_virt_addr is %x\n", - current->pid, app_virt_addr); - - dev_dbg(&sep->pdev->dev, "[PID%d] data_size is (hex) %x\n", - current->pid, data_size); - dev_dbg(&sep->pdev->dev, "[PID%d] start_page is (hex) %x\n", - current->pid, start_page); - dev_dbg(&sep->pdev->dev, "[PID%d] end_page is (hex) %x\n", - current->pid, end_page); - dev_dbg(&sep->pdev->dev, "[PID%d] num_pages is (hex) %x\n", - current->pid, num_pages); - - /* Allocate array of pages structure pointers */ - page_array = kmalloc_array(num_pages, sizeof(struct page *), - GFP_ATOMIC); - if (!page_array) { - error = -ENOMEM; - goto end_function; - } - - map_array = kmalloc_array(num_pages, sizeof(struct sep_dma_map), - GFP_ATOMIC); - if (!map_array) { - error = -ENOMEM; - goto end_function_with_error1; - } - - lli_array = kmalloc_array(num_pages, sizeof(struct sep_lli_entry), - GFP_ATOMIC); - if (!lli_array) { - error = -ENOMEM; - goto end_function_with_error2; - } - - /* Convert the application virtual address into a set of physical */ - result = get_user_pages_fast(app_virt_addr, num_pages, - ((in_out_flag == SEP_DRIVER_IN_FLAG) ? 0 : 1), page_array); - - /* Check the number of pages locked - if not all then exit with error */ - if (result != num_pages) { - dev_warn(&sep->pdev->dev, - "[PID%d] not all pages locked by get_user_pages, result 0x%X, num_pages 0x%X\n", - current->pid, result, num_pages); - error = -ENOMEM; - goto end_function_with_error3; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] get_user_pages succeeded\n", - current->pid); - - /* - * Fill the array using page array data and - * map the pages - this action will also flush the cache as needed - */ - for (count = 0; count < num_pages; count++) { - /* Fill the map array */ - map_array[count].dma_addr = - dma_map_page(&sep->pdev->dev, page_array[count], - 0, PAGE_SIZE, DMA_BIDIRECTIONAL); - - map_array[count].size = PAGE_SIZE; - - /* Fill the lli array entry */ - lli_array[count].bus_address = (u32)map_array[count].dma_addr; - lli_array[count].block_size = PAGE_SIZE; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_array[%x].bus_address is %08lx, lli_array[%x].block_size is (hex) %x\n", - current->pid, count, - (unsigned long)lli_array[count].bus_address, - count, lli_array[count].block_size); - } - - /* Check the offset for the first page */ - lli_array[0].bus_address = - lli_array[0].bus_address + (app_virt_addr & (~PAGE_MASK)); - - /* Check that not all the data is in the first page only */ - if ((PAGE_SIZE - (app_virt_addr & (~PAGE_MASK))) >= data_size) - lli_array[0].block_size = data_size; - else - lli_array[0].block_size = - PAGE_SIZE - (app_virt_addr & (~PAGE_MASK)); - - dev_dbg(&sep->pdev->dev, - "[PID%d] After check if page 0 has all data\n", - current->pid); - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_array[0].bus_address is (hex) %08lx, lli_array[0].block_size is (hex) %x\n", - current->pid, - (unsigned long)lli_array[0].bus_address, - lli_array[0].block_size); - - /* Check the size of the last page */ - if (num_pages > 1) { - lli_array[num_pages - 1].block_size = - (app_virt_addr + data_size) & (~PAGE_MASK); - if (lli_array[num_pages - 1].block_size == 0) - lli_array[num_pages - 1].block_size = PAGE_SIZE; - - dev_dbg(&sep->pdev->dev, - "[PID%d] After last page size adjustment\n", - current->pid); - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_array[%x].bus_address is (hex) %08lx, lli_array[%x].block_size is (hex) %x\n", - current->pid, - num_pages - 1, - (unsigned long)lli_array[num_pages - 1].bus_address, - num_pages - 1, - lli_array[num_pages - 1].block_size); - } - - /* Set output params according to the in_out flag */ - if (in_out_flag == SEP_DRIVER_IN_FLAG) { - *lli_array_ptr = lli_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = - page_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array = - map_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_num_entries = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].src_sg = NULL; - } else { - *lli_array_ptr = lli_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_num_pages = - num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = - page_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_array = - map_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat]. - out_map_num_entries = num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].dst_sg = NULL; - } - goto end_function; - -end_function_with_error3: - /* Free lli array */ - kfree(lli_array); - -end_function_with_error2: - kfree(map_array); - -end_function_with_error1: - /* Free page array */ - kfree(page_array); - -end_function: - return error; -} - -/** - * sep_lli_table_secure_dma - get lli array for IMR addresses - * @sep: pointer to struct sep_device - * @app_virt_addr: user memory data buffer - * @data_size: size of data buffer - * @lli_array_ptr: lli array - * @in_out_flag: not used - * @dma_ctx: pointer to struct sep_dma_context - * - * This function creates lli tables for outputting data to - * IMR memory, which is memory that cannot be accessed by the - * the x86 processor. - */ -static int sep_lli_table_secure_dma(struct sep_device *sep, - u32 app_virt_addr, - u32 data_size, - struct sep_lli_entry **lli_array_ptr, - int in_out_flag, - struct sep_dma_context *dma_ctx) - -{ - u32 count; - /* The the page of the end address of the user space buffer */ - u32 end_page; - /* The page of the start address of the user space buffer */ - u32 start_page; - /* The range in pages */ - u32 num_pages; - /* Array of lli */ - struct sep_lli_entry *lli_array; - - /* Set start and end pages and num pages */ - end_page = (app_virt_addr + data_size - 1) >> PAGE_SHIFT; - start_page = app_virt_addr >> PAGE_SHIFT; - num_pages = end_page - start_page + 1; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lock user pages app_virt_addr is %x\n", - current->pid, app_virt_addr); - - dev_dbg(&sep->pdev->dev, "[PID%d] data_size is (hex) %x\n", - current->pid, data_size); - dev_dbg(&sep->pdev->dev, "[PID%d] start_page is (hex) %x\n", - current->pid, start_page); - dev_dbg(&sep->pdev->dev, "[PID%d] end_page is (hex) %x\n", - current->pid, end_page); - dev_dbg(&sep->pdev->dev, "[PID%d] num_pages is (hex) %x\n", - current->pid, num_pages); - - lli_array = kmalloc_array(num_pages, sizeof(struct sep_lli_entry), - GFP_ATOMIC); - if (!lli_array) - return -ENOMEM; - - /* - * Fill the lli_array - */ - start_page = start_page << PAGE_SHIFT; - for (count = 0; count < num_pages; count++) { - /* Fill the lli array entry */ - lli_array[count].bus_address = start_page; - lli_array[count].block_size = PAGE_SIZE; - - start_page += PAGE_SIZE; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_array[%x].bus_address is %08lx, lli_array[%x].block_size is (hex) %x\n", - current->pid, - count, (unsigned long)lli_array[count].bus_address, - count, lli_array[count].block_size); - } - - /* Check the offset for the first page */ - lli_array[0].bus_address = - lli_array[0].bus_address + (app_virt_addr & (~PAGE_MASK)); - - /* Check that not all the data is in the first page only */ - if ((PAGE_SIZE - (app_virt_addr & (~PAGE_MASK))) >= data_size) - lli_array[0].block_size = data_size; - else - lli_array[0].block_size = - PAGE_SIZE - (app_virt_addr & (~PAGE_MASK)); - - dev_dbg(&sep->pdev->dev, - "[PID%d] After check if page 0 has all data\n" - "lli_array[0].bus_address is (hex) %08lx, lli_array[0].block_size is (hex) %x\n", - current->pid, - (unsigned long)lli_array[0].bus_address, - lli_array[0].block_size); - - /* Check the size of the last page */ - if (num_pages > 1) { - lli_array[num_pages - 1].block_size = - (app_virt_addr + data_size) & (~PAGE_MASK); - if (lli_array[num_pages - 1].block_size == 0) - lli_array[num_pages - 1].block_size = PAGE_SIZE; - - dev_dbg(&sep->pdev->dev, - "[PID%d] After last page size adjustment\n" - "lli_array[%x].bus_address is (hex) %08lx, lli_array[%x].block_size is (hex) %x\n", - current->pid, num_pages - 1, - (unsigned long)lli_array[num_pages - 1].bus_address, - num_pages - 1, - lli_array[num_pages - 1].block_size); - } - *lli_array_ptr = lli_array; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_num_pages = num_pages; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_array = NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_num_entries = 0; - - return 0; -} - -/** - * sep_calculate_lli_table_max_size - size the LLI table - * @sep: pointer to struct sep_device - * @lli_in_array_ptr - * @num_array_entries - * @last_table_flag - * - * This function calculates the size of data that can be inserted into - * the lli table from this array, such that either the table is full - * (all entries are entered), or there are no more entries in the - * lli array - */ -static u32 sep_calculate_lli_table_max_size(struct sep_device *sep, - struct sep_lli_entry *lli_in_array_ptr, - u32 num_array_entries, - u32 *last_table_flag) -{ - u32 counter; - /* Table data size */ - u32 table_data_size = 0; - /* Data size for the next table */ - u32 next_table_data_size; - - *last_table_flag = 0; - - /* - * Calculate the data in the out lli table till we fill the whole - * table or till the data has ended - */ - for (counter = 0; - (counter < (SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP - 1)) && - (counter < num_array_entries); counter++) - table_data_size += lli_in_array_ptr[counter].block_size; - - /* - * Check if we reached the last entry, - * meaning this ia the last table to build, - * and no need to check the block alignment - */ - if (counter == num_array_entries) { - /* Set the last table flag */ - *last_table_flag = 1; - goto end_function; - } - - /* - * Calculate the data size of the next table. - * Stop if no entries left or if data size is more the DMA restriction - */ - next_table_data_size = 0; - for (; counter < num_array_entries; counter++) { - next_table_data_size += lli_in_array_ptr[counter].block_size; - if (next_table_data_size >= SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) - break; - } - - /* - * Check if the next table data size is less then DMA rstriction. - * if it is - recalculate the current table size, so that the next - * table data size will be adaquete for DMA - */ - if (next_table_data_size && - next_table_data_size < SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) - - table_data_size -= (SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE - - next_table_data_size); - -end_function: - return table_data_size; -} - -/** - * sep_build_lli_table - build an lli array for the given table - * @sep: pointer to struct sep_device - * @lli_array_ptr: pointer to lli array - * @lli_table_ptr: pointer to lli table - * @num_processed_entries_ptr: pointer to number of entries - * @num_table_entries_ptr: pointer to number of tables - * @table_data_size: total data size - * - * Builds an lli table from the lli_array according to - * the given size of data - */ -static void sep_build_lli_table(struct sep_device *sep, - struct sep_lli_entry *lli_array_ptr, - struct sep_lli_entry *lli_table_ptr, - u32 *num_processed_entries_ptr, - u32 *num_table_entries_ptr, - u32 table_data_size) -{ - /* Current table data size */ - u32 curr_table_data_size; - /* Counter of lli array entry */ - u32 array_counter; - - /* Init current table data size and lli array entry counter */ - curr_table_data_size = 0; - array_counter = 0; - *num_table_entries_ptr = 1; - - dev_dbg(&sep->pdev->dev, - "[PID%d] build lli table table_data_size: (hex) %x\n", - current->pid, table_data_size); - - /* Fill the table till table size reaches the needed amount */ - while (curr_table_data_size < table_data_size) { - /* Update the number of entries in table */ - (*num_table_entries_ptr)++; - - lli_table_ptr->bus_address = - cpu_to_le32(lli_array_ptr[array_counter].bus_address); - - lli_table_ptr->block_size = - cpu_to_le32(lli_array_ptr[array_counter].block_size); - - curr_table_data_size += lli_array_ptr[array_counter].block_size; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr is %p\n", - current->pid, lli_table_ptr); - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr->bus_address: %08lx\n", - current->pid, - (unsigned long)lli_table_ptr->bus_address); - - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr->block_size is (hex) %x\n", - current->pid, lli_table_ptr->block_size); - - /* Check for overflow of the table data */ - if (curr_table_data_size > table_data_size) { - dev_dbg(&sep->pdev->dev, - "[PID%d] curr_table_data_size too large\n", - current->pid); - - /* Update the size of block in the table */ - lli_table_ptr->block_size = - cpu_to_le32(lli_table_ptr->block_size) - - (curr_table_data_size - table_data_size); - - /* Update the physical address in the lli array */ - lli_array_ptr[array_counter].bus_address += - cpu_to_le32(lli_table_ptr->block_size); - - /* Update the block size left in the lli array */ - lli_array_ptr[array_counter].block_size = - (curr_table_data_size - table_data_size); - } else - /* Advance to the next entry in the lli_array */ - array_counter++; - - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr->bus_address is %08lx\n", - current->pid, - (unsigned long)lli_table_ptr->bus_address); - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr->block_size is (hex) %x\n", - current->pid, - lli_table_ptr->block_size); - - /* Move to the next entry in table */ - lli_table_ptr++; - } - - /* Set the info entry to default */ - lli_table_ptr->bus_address = 0xffffffff; - lli_table_ptr->block_size = 0; - - /* Set the output parameter */ - *num_processed_entries_ptr += array_counter; -} - -/** - * sep_shared_area_virt_to_bus - map shared area to bus address - * @sep: pointer to struct sep_device - * @virt_address: virtual address to convert - * - * This functions returns the physical address inside shared area according - * to the virtual address. It can be either on the external RAM device - * (ioremapped), or on the system RAM - * This implementation is for the external RAM - */ -static dma_addr_t sep_shared_area_virt_to_bus(struct sep_device *sep, - void *virt_address) -{ - dev_dbg(&sep->pdev->dev, "[PID%d] sh virt to phys v %p\n", - current->pid, virt_address); - dev_dbg(&sep->pdev->dev, "[PID%d] sh virt to phys p %08lx\n", - current->pid, - (unsigned long) - sep->shared_bus + (virt_address - sep->shared_addr)); - - return sep->shared_bus + (size_t)(virt_address - sep->shared_addr); -} - -/** - * sep_shared_area_bus_to_virt - map shared area bus address to kernel - * @sep: pointer to struct sep_device - * @bus_address: bus address to convert - * - * This functions returns the virtual address inside shared area - * according to the physical address. It can be either on the - * external RAM device (ioremapped), or on the system RAM - * This implementation is for the external RAM - */ -static void *sep_shared_area_bus_to_virt(struct sep_device *sep, - dma_addr_t bus_address) -{ - dev_dbg(&sep->pdev->dev, "[PID%d] shared bus to virt b=%lx v=%lx\n", - current->pid, - (unsigned long)bus_address, (unsigned long)(sep->shared_addr + - (size_t)(bus_address - sep->shared_bus))); - - return sep->shared_addr + (size_t)(bus_address - sep->shared_bus); -} - -/** - * sep_debug_print_lli_tables - dump LLI table - * @sep: pointer to struct sep_device - * @lli_table_ptr: pointer to sep_lli_entry - * @num_table_entries: number of entries - * @table_data_size: total data size - * - * Walk the the list of the print created tables and print all the data - */ -static void sep_debug_print_lli_tables(struct sep_device *sep, - struct sep_lli_entry *lli_table_ptr, - unsigned long num_table_entries, - unsigned long table_data_size) -{ -#ifdef DEBUG - unsigned long table_count = 1; - unsigned long entries_count = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_debug_print_lli_tables start\n", - current->pid); - if (num_table_entries == 0) { - dev_dbg(&sep->pdev->dev, "[PID%d] no table to print\n", - current->pid); - return; - } - - while ((unsigned long)lli_table_ptr->bus_address != 0xffffffff) { - dev_dbg(&sep->pdev->dev, - "[PID%d] lli table %08lx, table_data_size is (hex) %lx\n", - current->pid, table_count, table_data_size); - dev_dbg(&sep->pdev->dev, - "[PID%d] num_table_entries is (hex) %lx\n", - current->pid, num_table_entries); - - /* Print entries of the table (without info entry) */ - for (entries_count = 0; entries_count < num_table_entries; - entries_count++, lli_table_ptr++) { - dev_dbg(&sep->pdev->dev, - "[PID%d] lli_table_ptr address is %08lx\n", - current->pid, - (unsigned long)lli_table_ptr); - - dev_dbg(&sep->pdev->dev, - "[PID%d] phys address is %08lx block size is (hex) %x\n", - current->pid, - (unsigned long)lli_table_ptr->bus_address, - lli_table_ptr->block_size); - } - - /* Point to the info entry */ - lli_table_ptr--; - - dev_dbg(&sep->pdev->dev, - "[PID%d] phys lli_table_ptr->block_size is (hex) %x\n", - current->pid, - lli_table_ptr->block_size); - - dev_dbg(&sep->pdev->dev, - "[PID%d] phys lli_table_ptr->physical_address is %08lx\n", - current->pid, - (unsigned long)lli_table_ptr->bus_address); - - table_data_size = lli_table_ptr->block_size & 0xffffff; - num_table_entries = (lli_table_ptr->block_size >> 24) & 0xff; - - dev_dbg(&sep->pdev->dev, - "[PID%d] phys table_data_size is (hex) %lx num_table_entries is %lx bus_address is%lx\n", - current->pid, - table_data_size, - num_table_entries, - (unsigned long)lli_table_ptr->bus_address); - - if ((unsigned long)lli_table_ptr->bus_address != 0xffffffff) - lli_table_ptr = (struct sep_lli_entry *) - sep_shared_bus_to_virt(sep, - (unsigned long)lli_table_ptr->bus_address); - - table_count++; - } - dev_dbg(&sep->pdev->dev, "[PID%d] sep_debug_print_lli_tables end\n", - current->pid); -#endif -} - -/** - * sep_prepare_empty_lli_table - create a blank LLI table - * @sep: pointer to struct sep_device - * @lli_table_addr_ptr: pointer to lli table - * @num_entries_ptr: pointer to number of entries - * @table_data_size_ptr: point to table data size - * @dmatables_region: Optional buffer for DMA tables - * @dma_ctx: DMA context - * - * This function creates empty lli tables when there is no data - */ -static void sep_prepare_empty_lli_table(struct sep_device *sep, - dma_addr_t *lli_table_addr_ptr, - u32 *num_entries_ptr, - u32 *table_data_size_ptr, - void **dmatables_region, - struct sep_dma_context *dma_ctx) -{ - struct sep_lli_entry *lli_table_ptr; - - /* Find the area for new table */ - lli_table_ptr = - (struct sep_lli_entry *)(sep->shared_addr + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - dma_ctx->num_lli_tables_created * sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP); - - if (dmatables_region && *dmatables_region) - lli_table_ptr = *dmatables_region; - - lli_table_ptr->bus_address = 0; - lli_table_ptr->block_size = 0; - - lli_table_ptr++; - lli_table_ptr->bus_address = 0xFFFFFFFF; - lli_table_ptr->block_size = 0; - - /* Set the output parameter value */ - *lli_table_addr_ptr = sep->shared_bus + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - dma_ctx->num_lli_tables_created * - sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - - /* Set the num of entries and table data size for empty table */ - *num_entries_ptr = 2; - *table_data_size_ptr = 0; - - /* Update the number of created tables */ - dma_ctx->num_lli_tables_created++; -} - -/** - * sep_prepare_input_dma_table - prepare input DMA mappings - * @sep: pointer to struct sep_device - * @data_size: - * @block_size: - * @lli_table_ptr: - * @num_entries_ptr: - * @table_data_size_ptr: - * @is_kva: set for kernel data (kernel crypt io call) - * - * This function prepares only input DMA table for synchronic symmetric - * operations (HASH) - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -static int sep_prepare_input_dma_table(struct sep_device *sep, - unsigned long app_virt_addr, - u32 data_size, - u32 block_size, - dma_addr_t *lli_table_ptr, - u32 *num_entries_ptr, - u32 *table_data_size_ptr, - bool is_kva, - void **dmatables_region, - struct sep_dma_context *dma_ctx -) -{ - int error = 0; - /* Pointer to the info entry of the table - the last entry */ - struct sep_lli_entry *info_entry_ptr; - /* Array of pointers to page */ - struct sep_lli_entry *lli_array_ptr; - /* Points to the first entry to be processed in the lli_in_array */ - u32 current_entry = 0; - /* Num entries in the virtual buffer */ - u32 sep_lli_entries = 0; - /* Lli table pointer */ - struct sep_lli_entry *in_lli_table_ptr; - /* The total data in one table */ - u32 table_data_size = 0; - /* Flag for last table */ - u32 last_table_flag = 0; - /* Number of entries in lli table */ - u32 num_entries_in_table = 0; - /* Next table address */ - void *lli_table_alloc_addr = NULL; - void *dma_lli_table_alloc_addr = NULL; - void *dma_in_lli_table_ptr = NULL; - - dev_dbg(&sep->pdev->dev, - "[PID%d] prepare intput dma tbl data size: (hex) %x\n", - current->pid, data_size); - - dev_dbg(&sep->pdev->dev, "[PID%d] block_size is (hex) %x\n", - current->pid, block_size); - - /* Initialize the pages pointers */ - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages = 0; - - /* Set the kernel address for first table to be allocated */ - lli_table_alloc_addr = (void *)(sep->shared_addr + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - dma_ctx->num_lli_tables_created * sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP); - - if (data_size == 0) { - if (dmatables_region) { - error = sep_allocate_dmatables_region(sep, - dmatables_region, - dma_ctx, - 1); - if (error) - return error; - } - /* Special case - create meptu table - 2 entries, zero data */ - sep_prepare_empty_lli_table(sep, lli_table_ptr, - num_entries_ptr, table_data_size_ptr, - dmatables_region, dma_ctx); - goto update_dcb_counter; - } - - /* Check if the pages are in Kernel Virtual Address layout */ - if (is_kva) - error = sep_lock_kernel_pages(sep, app_virt_addr, - data_size, &lli_array_ptr, SEP_DRIVER_IN_FLAG, - dma_ctx); - else - /* - * Lock the pages of the user buffer - * and translate them to pages - */ - error = sep_lock_user_pages(sep, app_virt_addr, - data_size, &lli_array_ptr, SEP_DRIVER_IN_FLAG, - dma_ctx); - - if (error) - goto end_function; - - dev_dbg(&sep->pdev->dev, - "[PID%d] output sep_in_num_pages is (hex) %x\n", - current->pid, - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages); - - current_entry = 0; - info_entry_ptr = NULL; - - sep_lli_entries = - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages; - - dma_lli_table_alloc_addr = lli_table_alloc_addr; - if (dmatables_region) { - error = sep_allocate_dmatables_region(sep, - dmatables_region, - dma_ctx, - sep_lli_entries); - if (error) - goto end_function_error; - lli_table_alloc_addr = *dmatables_region; - } - - /* Loop till all the entries in in array are processed */ - while (current_entry < sep_lli_entries) { - /* Set the new input and output tables */ - in_lli_table_ptr = - (struct sep_lli_entry *)lli_table_alloc_addr; - dma_in_lli_table_ptr = - (struct sep_lli_entry *)dma_lli_table_alloc_addr; - - lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - dma_lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - - if (dma_lli_table_alloc_addr > - ((void *)sep->shared_addr + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES)) { - error = -ENOMEM; - goto end_function_error; - } - - /* Update the number of created tables */ - dma_ctx->num_lli_tables_created++; - - /* Calculate the maximum size of data for input table */ - table_data_size = sep_calculate_lli_table_max_size(sep, - &lli_array_ptr[current_entry], - (sep_lli_entries - current_entry), - &last_table_flag); - - /* - * If this is not the last table - - * then align it to the block size - */ - if (!last_table_flag) - table_data_size = - (table_data_size / block_size) * block_size; - - dev_dbg(&sep->pdev->dev, - "[PID%d] output table_data_size is (hex) %x\n", - current->pid, - table_data_size); - - /* Construct input lli table */ - sep_build_lli_table(sep, &lli_array_ptr[current_entry], - in_lli_table_ptr, - ¤t_entry, &num_entries_in_table, table_data_size); - - if (info_entry_ptr == NULL) { - /* Set the output parameters to physical addresses */ - *lli_table_ptr = sep_shared_area_virt_to_bus(sep, - dma_in_lli_table_ptr); - *num_entries_ptr = num_entries_in_table; - *table_data_size_ptr = table_data_size; - - dev_dbg(&sep->pdev->dev, - "[PID%d] output lli_table_in_ptr is %08lx\n", - current->pid, - (unsigned long)*lli_table_ptr); - - } else { - /* Update the info entry of the previous in table */ - info_entry_ptr->bus_address = - sep_shared_area_virt_to_bus(sep, - dma_in_lli_table_ptr); - info_entry_ptr->block_size = - ((num_entries_in_table) << 24) | - (table_data_size); - } - /* Save the pointer to the info entry of the current tables */ - info_entry_ptr = in_lli_table_ptr + num_entries_in_table - 1; - } - /* Print input tables */ - if (!dmatables_region) { - sep_debug_print_lli_tables(sep, (struct sep_lli_entry *) - sep_shared_area_bus_to_virt(sep, *lli_table_ptr), - *num_entries_ptr, *table_data_size_ptr); - } - - /* The array of the pages */ - kfree(lli_array_ptr); - -update_dcb_counter: - /* Update DCB counter */ - dma_ctx->nr_dcb_creat++; - goto end_function; - -end_function_error: - /* Free all the allocated resources */ - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array = NULL; - kfree(lli_array_ptr); - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = NULL; - -end_function: - return error; -} - -/** - * sep_construct_dma_tables_from_lli - prepare AES/DES mappings - * @sep: pointer to struct sep_device - * @lli_in_array: - * @sep_in_lli_entries: - * @lli_out_array: - * @sep_out_lli_entries - * @block_size - * @lli_table_in_ptr - * @lli_table_out_ptr - * @in_num_entries_ptr - * @out_num_entries_ptr - * @table_data_size_ptr - * - * This function creates the input and output DMA tables for - * symmetric operations (AES/DES) according to the block - * size from LLI arays - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -static int sep_construct_dma_tables_from_lli( - struct sep_device *sep, - struct sep_lli_entry *lli_in_array, - u32 sep_in_lli_entries, - struct sep_lli_entry *lli_out_array, - u32 sep_out_lli_entries, - u32 block_size, - dma_addr_t *lli_table_in_ptr, - dma_addr_t *lli_table_out_ptr, - u32 *in_num_entries_ptr, - u32 *out_num_entries_ptr, - u32 *table_data_size_ptr, - void **dmatables_region, - struct sep_dma_context *dma_ctx) -{ - /* Points to the area where next lli table can be allocated */ - void *lli_table_alloc_addr = NULL; - /* - * Points to the area in shared region where next lli table - * can be allocated - */ - void *dma_lli_table_alloc_addr = NULL; - /* Input lli table in dmatables_region or shared region */ - struct sep_lli_entry *in_lli_table_ptr = NULL; - /* Input lli table location in the shared region */ - struct sep_lli_entry *dma_in_lli_table_ptr = NULL; - /* Output lli table in dmatables_region or shared region */ - struct sep_lli_entry *out_lli_table_ptr = NULL; - /* Output lli table location in the shared region */ - struct sep_lli_entry *dma_out_lli_table_ptr = NULL; - /* Pointer to the info entry of the table - the last entry */ - struct sep_lli_entry *info_in_entry_ptr = NULL; - /* Pointer to the info entry of the table - the last entry */ - struct sep_lli_entry *info_out_entry_ptr = NULL; - /* Points to the first entry to be processed in the lli_in_array */ - u32 current_in_entry = 0; - /* Points to the first entry to be processed in the lli_out_array */ - u32 current_out_entry = 0; - /* Max size of the input table */ - u32 in_table_data_size = 0; - /* Max size of the output table */ - u32 out_table_data_size = 0; - /* Flag te signifies if this is the last tables build */ - u32 last_table_flag = 0; - /* The data size that should be in table */ - u32 table_data_size = 0; - /* Number of entries in the input table */ - u32 num_entries_in_table = 0; - /* Number of entries in the output table */ - u32 num_entries_out_table = 0; - - if (!dma_ctx) { - dev_warn(&sep->pdev->dev, "DMA context uninitialized\n"); - return -EINVAL; - } - - /* Initiate to point after the message area */ - lli_table_alloc_addr = (void *)(sep->shared_addr + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - (dma_ctx->num_lli_tables_created * - (sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP))); - dma_lli_table_alloc_addr = lli_table_alloc_addr; - - if (dmatables_region) { - /* 2 for both in+out table */ - if (sep_allocate_dmatables_region(sep, - dmatables_region, - dma_ctx, - 2*sep_in_lli_entries)) - return -ENOMEM; - lli_table_alloc_addr = *dmatables_region; - } - - /* Loop till all the entries in in array are not processed */ - while (current_in_entry < sep_in_lli_entries) { - /* Set the new input and output tables */ - in_lli_table_ptr = - (struct sep_lli_entry *)lli_table_alloc_addr; - dma_in_lli_table_ptr = - (struct sep_lli_entry *)dma_lli_table_alloc_addr; - - lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - dma_lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - - /* Set the first output tables */ - out_lli_table_ptr = - (struct sep_lli_entry *)lli_table_alloc_addr; - dma_out_lli_table_ptr = - (struct sep_lli_entry *)dma_lli_table_alloc_addr; - - /* Check if the DMA table area limit was overrun */ - if ((dma_lli_table_alloc_addr + sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP) > - ((void *)sep->shared_addr + - SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + - SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES)) { - dev_warn(&sep->pdev->dev, "dma table limit overrun\n"); - return -ENOMEM; - } - - /* Update the number of the lli tables created */ - dma_ctx->num_lli_tables_created += 2; - - lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - dma_lli_table_alloc_addr += sizeof(struct sep_lli_entry) * - SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP; - - /* Calculate the maximum size of data for input table */ - in_table_data_size = - sep_calculate_lli_table_max_size(sep, - &lli_in_array[current_in_entry], - (sep_in_lli_entries - current_in_entry), - &last_table_flag); - - /* Calculate the maximum size of data for output table */ - out_table_data_size = - sep_calculate_lli_table_max_size(sep, - &lli_out_array[current_out_entry], - (sep_out_lli_entries - current_out_entry), - &last_table_flag); - - if (!last_table_flag) { - in_table_data_size = (in_table_data_size / - block_size) * block_size; - out_table_data_size = (out_table_data_size / - block_size) * block_size; - } - - table_data_size = in_table_data_size; - if (table_data_size > out_table_data_size) - table_data_size = out_table_data_size; - - dev_dbg(&sep->pdev->dev, - "[PID%d] construct tables from lli in_table_data_size is (hex) %x\n", - current->pid, in_table_data_size); - - dev_dbg(&sep->pdev->dev, - "[PID%d] construct tables from lli out_table_data_size is (hex) %x\n", - current->pid, out_table_data_size); - - /* Construct input lli table */ - sep_build_lli_table(sep, &lli_in_array[current_in_entry], - in_lli_table_ptr, - ¤t_in_entry, - &num_entries_in_table, - table_data_size); - - /* Construct output lli table */ - sep_build_lli_table(sep, &lli_out_array[current_out_entry], - out_lli_table_ptr, - ¤t_out_entry, - &num_entries_out_table, - table_data_size); - - /* If info entry is null - this is the first table built */ - if (info_in_entry_ptr == NULL || info_out_entry_ptr == NULL) { - /* Set the output parameters to physical addresses */ - *lli_table_in_ptr = - sep_shared_area_virt_to_bus(sep, dma_in_lli_table_ptr); - - *in_num_entries_ptr = num_entries_in_table; - - *lli_table_out_ptr = - sep_shared_area_virt_to_bus(sep, - dma_out_lli_table_ptr); - - *out_num_entries_ptr = num_entries_out_table; - *table_data_size_ptr = table_data_size; - - dev_dbg(&sep->pdev->dev, - "[PID%d] output lli_table_in_ptr is %08lx\n", - current->pid, - (unsigned long)*lli_table_in_ptr); - dev_dbg(&sep->pdev->dev, - "[PID%d] output lli_table_out_ptr is %08lx\n", - current->pid, - (unsigned long)*lli_table_out_ptr); - } else { - /* Update the info entry of the previous in table */ - info_in_entry_ptr->bus_address = - sep_shared_area_virt_to_bus(sep, - dma_in_lli_table_ptr); - - info_in_entry_ptr->block_size = - ((num_entries_in_table) << 24) | - (table_data_size); - - /* Update the info entry of the previous in table */ - info_out_entry_ptr->bus_address = - sep_shared_area_virt_to_bus(sep, - dma_out_lli_table_ptr); - - info_out_entry_ptr->block_size = - ((num_entries_out_table) << 24) | - (table_data_size); - - dev_dbg(&sep->pdev->dev, - "[PID%d] output lli_table_in_ptr:%08lx %08x\n", - current->pid, - (unsigned long)info_in_entry_ptr->bus_address, - info_in_entry_ptr->block_size); - - dev_dbg(&sep->pdev->dev, - "[PID%d] output lli_table_out_ptr: %08lx %08x\n", - current->pid, - (unsigned long)info_out_entry_ptr->bus_address, - info_out_entry_ptr->block_size); - } - - /* Save the pointer to the info entry of the current tables */ - info_in_entry_ptr = in_lli_table_ptr + - num_entries_in_table - 1; - info_out_entry_ptr = out_lli_table_ptr + - num_entries_out_table - 1; - - dev_dbg(&sep->pdev->dev, - "[PID%d] output num_entries_out_table is %x\n", - current->pid, - (u32)num_entries_out_table); - dev_dbg(&sep->pdev->dev, - "[PID%d] output info_in_entry_ptr is %lx\n", - current->pid, - (unsigned long)info_in_entry_ptr); - dev_dbg(&sep->pdev->dev, - "[PID%d] output info_out_entry_ptr is %lx\n", - current->pid, - (unsigned long)info_out_entry_ptr); - } - - /* Print input tables */ - if (!dmatables_region) { - sep_debug_print_lli_tables( - sep, - (struct sep_lli_entry *) - sep_shared_area_bus_to_virt(sep, *lli_table_in_ptr), - *in_num_entries_ptr, - *table_data_size_ptr); - } - - /* Print output tables */ - if (!dmatables_region) { - sep_debug_print_lli_tables( - sep, - (struct sep_lli_entry *) - sep_shared_area_bus_to_virt(sep, *lli_table_out_ptr), - *out_num_entries_ptr, - *table_data_size_ptr); - } - - return 0; -} - -/** - * sep_prepare_input_output_dma_table - prepare DMA I/O table - * @app_virt_in_addr: - * @app_virt_out_addr: - * @data_size: - * @block_size: - * @lli_table_in_ptr: - * @lli_table_out_ptr: - * @in_num_entries_ptr: - * @out_num_entries_ptr: - * @table_data_size_ptr: - * @is_kva: set for kernel data; used only for kernel crypto module - * - * This function builds input and output DMA tables for synchronic - * symmetric operations (AES, DES, HASH). It also checks that each table - * is of the modular block size - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -static int sep_prepare_input_output_dma_table(struct sep_device *sep, - unsigned long app_virt_in_addr, - unsigned long app_virt_out_addr, - u32 data_size, - u32 block_size, - dma_addr_t *lli_table_in_ptr, - dma_addr_t *lli_table_out_ptr, - u32 *in_num_entries_ptr, - u32 *out_num_entries_ptr, - u32 *table_data_size_ptr, - bool is_kva, - void **dmatables_region, - struct sep_dma_context *dma_ctx) - -{ - int error = 0; - /* Array of pointers of page */ - struct sep_lli_entry *lli_in_array; - /* Array of pointers of page */ - struct sep_lli_entry *lli_out_array; - - if (!dma_ctx) { - error = -EINVAL; - goto end_function; - } - - if (data_size == 0) { - /* Prepare empty table for input and output */ - if (dmatables_region) { - error = sep_allocate_dmatables_region( - sep, - dmatables_region, - dma_ctx, - 2); - if (error) - goto end_function; - } - sep_prepare_empty_lli_table(sep, lli_table_in_ptr, - in_num_entries_ptr, table_data_size_ptr, - dmatables_region, dma_ctx); - - sep_prepare_empty_lli_table(sep, lli_table_out_ptr, - out_num_entries_ptr, table_data_size_ptr, - dmatables_region, dma_ctx); - - goto update_dcb_counter; - } - - /* Initialize the pages pointers */ - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = NULL; - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = NULL; - - /* Lock the pages of the buffer and translate them to pages */ - if (is_kva) { - dev_dbg(&sep->pdev->dev, "[PID%d] Locking kernel input pages\n", - current->pid); - error = sep_lock_kernel_pages(sep, app_virt_in_addr, - data_size, &lli_in_array, SEP_DRIVER_IN_FLAG, - dma_ctx); - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] sep_lock_kernel_pages for input virtual buffer failed\n", - current->pid); - - goto end_function; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] Locking kernel output pages\n", - current->pid); - error = sep_lock_kernel_pages(sep, app_virt_out_addr, - data_size, &lli_out_array, SEP_DRIVER_OUT_FLAG, - dma_ctx); - - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] sep_lock_kernel_pages for output virtual buffer failed\n", - current->pid); - - goto end_function_free_lli_in; - } - } else { - dev_dbg(&sep->pdev->dev, "[PID%d] Locking user input pages\n", - current->pid); - error = sep_lock_user_pages(sep, app_virt_in_addr, - data_size, &lli_in_array, SEP_DRIVER_IN_FLAG, - dma_ctx); - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] sep_lock_user_pages for input virtual buffer failed\n", - current->pid); - - goto end_function; - } - - if (dma_ctx->secure_dma) { - /* secure_dma requires use of non accessible memory */ - dev_dbg(&sep->pdev->dev, "[PID%d] in secure_dma\n", - current->pid); - error = sep_lli_table_secure_dma(sep, - app_virt_out_addr, data_size, &lli_out_array, - SEP_DRIVER_OUT_FLAG, dma_ctx); - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] secure dma table setup for output virtual buffer failed\n", - current->pid); - - goto end_function_free_lli_in; - } - } else { - /* For normal, non-secure dma */ - dev_dbg(&sep->pdev->dev, "[PID%d] not in secure_dma\n", - current->pid); - - dev_dbg(&sep->pdev->dev, - "[PID%d] Locking user output pages\n", - current->pid); - - error = sep_lock_user_pages(sep, app_virt_out_addr, - data_size, &lli_out_array, SEP_DRIVER_OUT_FLAG, - dma_ctx); - - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] sep_lock_user_pages for output virtual buffer failed\n", - current->pid); - - goto end_function_free_lli_in; - } - } - } - - dev_dbg(&sep->pdev->dev, - "[PID%d] After lock; prep input output dma table sep_in_num_pages is (hex) %x\n", - current->pid, - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_num_pages); - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_out_num_pages is (hex) %x\n", - current->pid, - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_num_pages); - - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP is (hex) %x\n", - current->pid, SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP); - - /* Call the function that creates table from the lli arrays */ - dev_dbg(&sep->pdev->dev, "[PID%d] calling create table from lli\n", - current->pid); - error = sep_construct_dma_tables_from_lli( - sep, lli_in_array, - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat]. - in_num_pages, - lli_out_array, - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat]. - out_num_pages, - block_size, lli_table_in_ptr, lli_table_out_ptr, - in_num_entries_ptr, out_num_entries_ptr, - table_data_size_ptr, dmatables_region, dma_ctx); - - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] sep_construct_dma_tables_from_lli failed\n", - current->pid); - goto end_function_with_error; - } - - kfree(lli_out_array); - kfree(lli_in_array); - -update_dcb_counter: - /* Update DCB counter */ - dma_ctx->nr_dcb_creat++; - - goto end_function; - -end_function_with_error: - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_map_array = NULL; - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].out_page_array = NULL; - kfree(lli_out_array); - -end_function_free_lli_in: - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_map_array = NULL; - kfree(dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array); - dma_ctx->dma_res_arr[dma_ctx->nr_dcb_creat].in_page_array = NULL; - kfree(lli_in_array); - -end_function: - return error; -} - -/** - * sep_prepare_input_output_dma_table_in_dcb - prepare control blocks - * @app_in_address: unsigned long; for data buffer in (user space) - * @app_out_address: unsigned long; for data buffer out (user space) - * @data_in_size: u32; for size of data - * @block_size: u32; for block size - * @tail_block_size: u32; for size of tail block - * @isapplet: bool; to indicate external app - * @is_kva: bool; kernel buffer; only used for kernel crypto module - * @secure_dma; indicates whether this is secure_dma using IMR - * - * This function prepares the linked DMA tables and puts the - * address for the linked list of tables inta a DCB (data control - * block) the address of which is known by the SEP hardware - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, - unsigned long app_in_address, - unsigned long app_out_address, - u32 data_in_size, - u32 block_size, - u32 tail_block_size, - bool isapplet, - bool is_kva, - bool secure_dma, - struct sep_dcblock *dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - struct scatterlist *src_sg, - struct scatterlist *dst_sg) -{ - int error = 0; - /* Size of tail */ - u32 tail_size = 0; - /* Address of the created DCB table */ - struct sep_dcblock *dcb_table_ptr = NULL; - /* The physical address of the first input DMA table */ - dma_addr_t in_first_mlli_address = 0; - /* Number of entries in the first input DMA table */ - u32 in_first_num_entries = 0; - /* The physical address of the first output DMA table */ - dma_addr_t out_first_mlli_address = 0; - /* Number of entries in the first output DMA table */ - u32 out_first_num_entries = 0; - /* Data in the first input/output table */ - u32 first_data_size = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] app_in_address %lx\n", - current->pid, app_in_address); - - dev_dbg(&sep->pdev->dev, "[PID%d] app_out_address %lx\n", - current->pid, app_out_address); - - dev_dbg(&sep->pdev->dev, "[PID%d] data_in_size %x\n", - current->pid, data_in_size); - - dev_dbg(&sep->pdev->dev, "[PID%d] block_size %x\n", - current->pid, block_size); - - dev_dbg(&sep->pdev->dev, "[PID%d] tail_block_size %x\n", - current->pid, tail_block_size); - - dev_dbg(&sep->pdev->dev, "[PID%d] isapplet %x\n", - current->pid, isapplet); - - dev_dbg(&sep->pdev->dev, "[PID%d] is_kva %x\n", - current->pid, is_kva); - - dev_dbg(&sep->pdev->dev, "[PID%d] src_sg %p\n", - current->pid, src_sg); - - dev_dbg(&sep->pdev->dev, "[PID%d] dst_sg %p\n", - current->pid, dst_sg); - - if (!dma_ctx) { - dev_warn(&sep->pdev->dev, "[PID%d] no DMA context pointer\n", - current->pid); - error = -EINVAL; - goto end_function; - } - - if (*dma_ctx) { - /* In case there are multiple DCBs for this transaction */ - dev_dbg(&sep->pdev->dev, "[PID%d] DMA context already set\n", - current->pid); - } else { - *dma_ctx = kzalloc(sizeof(**dma_ctx), GFP_KERNEL); - if (!(*dma_ctx)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] Not enough memory for DMA context\n", - current->pid); - error = -ENOMEM; - goto end_function; - } - dev_dbg(&sep->pdev->dev, - "[PID%d] Created DMA context addr at 0x%p\n", - current->pid, *dma_ctx); - } - - (*dma_ctx)->secure_dma = secure_dma; - - /* these are for kernel crypto only */ - (*dma_ctx)->src_sg = src_sg; - (*dma_ctx)->dst_sg = dst_sg; - - if ((*dma_ctx)->nr_dcb_creat == SEP_MAX_NUM_SYNC_DMA_OPS) { - /* No more DCBs to allocate */ - dev_dbg(&sep->pdev->dev, "[PID%d] no more DCBs available\n", - current->pid); - error = -ENOSPC; - goto end_function_error; - } - - /* Allocate new DCB */ - if (dcb_region) { - dcb_table_ptr = dcb_region; - } else { - dcb_table_ptr = (struct sep_dcblock *)(sep->shared_addr + - SEP_DRIVER_SYSTEM_DCB_MEMORY_OFFSET_IN_BYTES + - ((*dma_ctx)->nr_dcb_creat * - sizeof(struct sep_dcblock))); - } - - /* Set the default values in the DCB */ - dcb_table_ptr->input_mlli_address = 0; - dcb_table_ptr->input_mlli_num_entries = 0; - dcb_table_ptr->input_mlli_data_size = 0; - dcb_table_ptr->output_mlli_address = 0; - dcb_table_ptr->output_mlli_num_entries = 0; - dcb_table_ptr->output_mlli_data_size = 0; - dcb_table_ptr->tail_data_size = 0; - dcb_table_ptr->out_vr_tail_pt = 0; - - if (isapplet) { - /* Check if there is enough data for DMA operation */ - if (data_in_size < SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) { - if (is_kva) { - error = -ENODEV; - goto end_function_error; - } else { - if (copy_from_user(dcb_table_ptr->tail_data, - (void __user *)app_in_address, - data_in_size)) { - error = -EFAULT; - goto end_function_error; - } - } - - dcb_table_ptr->tail_data_size = data_in_size; - - /* Set the output user-space address for mem2mem op */ - if (app_out_address) - dcb_table_ptr->out_vr_tail_pt = - (aligned_u64)app_out_address; - - /* - * Update both data length parameters in order to avoid - * second data copy and allow building of empty mlli - * tables - */ - tail_size = 0x0; - data_in_size = 0x0; - - } else { - if (!app_out_address) { - tail_size = data_in_size % block_size; - if (!tail_size) { - if (tail_block_size == block_size) - tail_size = block_size; - } - } else { - tail_size = 0; - } - } - if (tail_size) { - if (tail_size > sizeof(dcb_table_ptr->tail_data)) - return -EINVAL; - if (is_kva) { - error = -ENODEV; - goto end_function_error; - } else { - /* We have tail data - copy it to DCB */ - if (copy_from_user(dcb_table_ptr->tail_data, - (void __user *)(app_in_address + - data_in_size - tail_size), tail_size)) { - error = -EFAULT; - goto end_function_error; - } - } - if (app_out_address) - /* - * Calculate the output address - * according to tail data size - */ - dcb_table_ptr->out_vr_tail_pt = - (aligned_u64)app_out_address + - data_in_size - tail_size; - - /* Save the real tail data size */ - dcb_table_ptr->tail_data_size = tail_size; - /* - * Update the data size without the tail - * data size AKA data for the dma - */ - data_in_size = (data_in_size - tail_size); - } - } - /* Check if we need to build only input table or input/output */ - if (app_out_address) { - /* Prepare input/output tables */ - error = sep_prepare_input_output_dma_table(sep, - app_in_address, - app_out_address, - data_in_size, - block_size, - &in_first_mlli_address, - &out_first_mlli_address, - &in_first_num_entries, - &out_first_num_entries, - &first_data_size, - is_kva, - dmatables_region, - *dma_ctx); - } else { - /* Prepare input tables */ - error = sep_prepare_input_dma_table(sep, - app_in_address, - data_in_size, - block_size, - &in_first_mlli_address, - &in_first_num_entries, - &first_data_size, - is_kva, - dmatables_region, - *dma_ctx); - } - - if (error) { - dev_warn(&sep->pdev->dev, - "prepare DMA table call failed from prepare DCB call\n"); - goto end_function_error; - } - - /* Set the DCB values */ - dcb_table_ptr->input_mlli_address = in_first_mlli_address; - dcb_table_ptr->input_mlli_num_entries = in_first_num_entries; - dcb_table_ptr->input_mlli_data_size = first_data_size; - dcb_table_ptr->output_mlli_address = out_first_mlli_address; - dcb_table_ptr->output_mlli_num_entries = out_first_num_entries; - dcb_table_ptr->output_mlli_data_size = first_data_size; - - goto end_function; - -end_function_error: - kfree(*dma_ctx); - *dma_ctx = NULL; - -end_function: - return error; -} - -/** - * sep_free_dma_tables_and_dcb - free DMA tables and DCBs - * @sep: pointer to struct sep_device - * @isapplet: indicates external application (used for kernel access) - * @is_kva: indicates kernel addresses (only used for kernel crypto) - * - * This function frees the DMA tables and DCB - */ -static int sep_free_dma_tables_and_dcb(struct sep_device *sep, bool isapplet, - bool is_kva, struct sep_dma_context **dma_ctx) -{ - struct sep_dcblock *dcb_table_ptr; - unsigned long pt_hold; - void *tail_pt; - - int i = 0; - int error = 0; - int error_temp = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_free_dma_tables_and_dcb\n", - current->pid); - if (!dma_ctx || !*dma_ctx) /* nothing to be done here*/ - return 0; - - if (!(*dma_ctx)->secure_dma && isapplet) { - dev_dbg(&sep->pdev->dev, "[PID%d] handling applet\n", - current->pid); - - /* Tail stuff is only for non secure_dma */ - /* Set pointer to first DCB table */ - dcb_table_ptr = (struct sep_dcblock *) - (sep->shared_addr + - SEP_DRIVER_SYSTEM_DCB_MEMORY_OFFSET_IN_BYTES); - - /** - * Go over each DCB and see if - * tail pointer must be updated - */ - for (i = 0; i < (*dma_ctx)->nr_dcb_creat; - i++, dcb_table_ptr++) { - if (dcb_table_ptr->out_vr_tail_pt) { - pt_hold = (unsigned long)dcb_table_ptr-> - out_vr_tail_pt; - tail_pt = (void *)pt_hold; - if (is_kva) { - error = -ENODEV; - break; - } - error_temp = copy_to_user( - (void __user *)tail_pt, - dcb_table_ptr->tail_data, - dcb_table_ptr->tail_data_size); - if (error_temp) { - /* Release the DMA resource */ - error = -EFAULT; - break; - } - } - } - } - - /* Free the output pages, if any */ - sep_free_dma_table_data_handler(sep, dma_ctx); - - dev_dbg(&sep->pdev->dev, "[PID%d] sep_free_dma_tables_and_dcb end\n", - current->pid); - - return error; -} - -/** - * sep_prepare_dcb_handler - prepare a control block - * @sep: pointer to struct sep_device - * @arg: pointer to user parameters - * @secure_dma: indicate whether we are using secure_dma on IMR - * - * This function will retrieve the RAR buffer physical addresses, type - * & size corresponding to the RAR handles provided in the buffers vector. - */ -static int sep_prepare_dcb_handler(struct sep_device *sep, unsigned long arg, - bool secure_dma, - struct sep_dma_context **dma_ctx) -{ - int error; - /* Command arguments */ - static struct build_dcb_struct command_args; - - /* Get the command arguments */ - if (copy_from_user(&command_args, (void __user *)arg, - sizeof(struct build_dcb_struct))) { - error = -EFAULT; - goto end_function; - } - - dev_dbg(&sep->pdev->dev, - "[PID%d] prep dcb handler app_in_address is %08llx\n", - current->pid, command_args.app_in_address); - dev_dbg(&sep->pdev->dev, - "[PID%d] app_out_address is %08llx\n", - current->pid, command_args.app_out_address); - dev_dbg(&sep->pdev->dev, - "[PID%d] data_size is %x\n", - current->pid, command_args.data_in_size); - dev_dbg(&sep->pdev->dev, - "[PID%d] block_size is %x\n", - current->pid, command_args.block_size); - dev_dbg(&sep->pdev->dev, - "[PID%d] tail block_size is %x\n", - current->pid, command_args.tail_block_size); - dev_dbg(&sep->pdev->dev, - "[PID%d] is_applet is %x\n", - current->pid, command_args.is_applet); - - if (!command_args.app_in_address) { - dev_warn(&sep->pdev->dev, - "[PID%d] null app_in_address\n", current->pid); - error = -EINVAL; - goto end_function; - } - - error = sep_prepare_input_output_dma_table_in_dcb(sep, - (unsigned long)command_args.app_in_address, - (unsigned long)command_args.app_out_address, - command_args.data_in_size, command_args.block_size, - command_args.tail_block_size, - command_args.is_applet, false, - secure_dma, NULL, NULL, dma_ctx, NULL, NULL); - -end_function: - return error; -} - -/** - * sep_free_dcb_handler - free control block resources - * @sep: pointer to struct sep_device - * - * This function frees the DCB resources and updates the needed - * user-space buffers. - */ -static int sep_free_dcb_handler(struct sep_device *sep, - struct sep_dma_context **dma_ctx) -{ - if (!dma_ctx || !(*dma_ctx)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] no dma context defined, nothing to free\n", - current->pid); - return -EINVAL; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] free dcbs num of DCBs %x\n", - current->pid, - (*dma_ctx)->nr_dcb_creat); - - return sep_free_dma_tables_and_dcb(sep, false, false, dma_ctx); -} - -/** - * sep_ioctl - ioctl handler for sep device - * @filp: pointer to struct file - * @cmd: command - * @arg: pointer to argument structure - * - * Implement the ioctl methods available on the SEP device. - */ -static long sep_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - struct sep_dma_context **dma_ctx = &private_data->dma_ctx; - struct sep_queue_info **my_queue_elem = &private_data->my_queue_elem; - int error = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] ioctl cmd 0x%x\n", - current->pid, cmd); - dev_dbg(&sep->pdev->dev, "[PID%d] dma context addr 0x%p\n", - current->pid, *dma_ctx); - - /* Make sure we own this device */ - error = sep_check_transaction_owner(sep); - if (error) { - dev_dbg(&sep->pdev->dev, "[PID%d] ioctl pid is not owner\n", - current->pid); - goto end_function; - } - - /* Check that sep_mmap has been called before */ - if (0 == test_bit(SEP_LEGACY_MMAP_DONE_OFFSET, - &call_status->status)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] mmap not called\n", current->pid); - error = -EPROTO; - goto end_function; - } - - /* Check that the command is for SEP device */ - if (_IOC_TYPE(cmd) != SEP_IOC_MAGIC_NUMBER) { - error = -ENOTTY; - goto end_function; - } - - switch (cmd) { - case SEP_IOCSENDSEPCOMMAND: - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCSENDSEPCOMMAND start\n", - current->pid); - if (1 == test_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &call_status->status)) { - dev_warn(&sep->pdev->dev, - "[PID%d] send msg already done\n", - current->pid); - error = -EPROTO; - goto end_function; - } - /* Send command to SEP */ - error = sep_send_command_handler(sep); - if (!error) - set_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &call_status->status); - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCSENDSEPCOMMAND end\n", - current->pid); - break; - case SEP_IOCENDTRANSACTION: - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCENDTRANSACTION start\n", - current->pid); - error = sep_end_transaction_handler(sep, dma_ctx, call_status, - my_queue_elem); - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCENDTRANSACTION end\n", - current->pid); - break; - case SEP_IOCPREPAREDCB: - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCPREPAREDCB start\n", - current->pid); - /* fall-through */ - case SEP_IOCPREPAREDCB_SECURE_DMA: - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCPREPAREDCB_SECURE_DMA start\n", - current->pid); - if (1 == test_bit(SEP_LEGACY_SENDMSG_DONE_OFFSET, - &call_status->status)) { - dev_dbg(&sep->pdev->dev, - "[PID%d] dcb prep needed before send msg\n", - current->pid); - error = -EPROTO; - goto end_function; - } - - if (!arg) { - dev_dbg(&sep->pdev->dev, - "[PID%d] dcb null arg\n", current->pid); - error = -EINVAL; - goto end_function; - } - - if (cmd == SEP_IOCPREPAREDCB) { - /* No secure dma */ - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCPREPAREDCB (no secure_dma)\n", - current->pid); - - error = sep_prepare_dcb_handler(sep, arg, false, - dma_ctx); - } else { - /* Secure dma */ - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOC_POC (with secure_dma)\n", - current->pid); - - error = sep_prepare_dcb_handler(sep, arg, true, - dma_ctx); - } - dev_dbg(&sep->pdev->dev, "[PID%d] dcb's end\n", - current->pid); - break; - case SEP_IOCFREEDCB: - dev_dbg(&sep->pdev->dev, "[PID%d] SEP_IOCFREEDCB start\n", - current->pid); - case SEP_IOCFREEDCB_SECURE_DMA: - dev_dbg(&sep->pdev->dev, - "[PID%d] SEP_IOCFREEDCB_SECURE_DMA start\n", - current->pid); - error = sep_free_dcb_handler(sep, dma_ctx); - dev_dbg(&sep->pdev->dev, "[PID%d] SEP_IOCFREEDCB end\n", - current->pid); - break; - default: - error = -ENOTTY; - dev_dbg(&sep->pdev->dev, "[PID%d] default end\n", - current->pid); - break; - } - -end_function: - dev_dbg(&sep->pdev->dev, "[PID%d] ioctl end\n", current->pid); - - return error; -} - -/** - * sep_inthandler - interrupt handler for sep device - * @irq: interrupt - * @dev_id: device id - */ -static irqreturn_t sep_inthandler(int irq, void *dev_id) -{ - unsigned long lock_irq_flag; - u32 reg_val, reg_val2 = 0; - struct sep_device *sep = dev_id; - irqreturn_t int_error = IRQ_HANDLED; - - /* Are we in power save? */ -#if defined(CONFIG_PM_RUNTIME) && defined(SEP_ENABLE_RUNTIME_PM) - if (sep->pdev->dev.power.runtime_status != RPM_ACTIVE) { - dev_dbg(&sep->pdev->dev, "interrupt during pwr save\n"); - return IRQ_NONE; - } -#endif - - if (test_bit(SEP_WORKING_LOCK_BIT, &sep->in_use_flags) == 0) { - dev_dbg(&sep->pdev->dev, "interrupt while nobody using sep\n"); - return IRQ_NONE; - } - - /* Read the IRR register to check if this is SEP interrupt */ - reg_val = sep_read_reg(sep, HW_HOST_IRR_REG_ADDR); - - dev_dbg(&sep->pdev->dev, "sep int: IRR REG val: %x\n", reg_val); - - if (reg_val & (0x1 << 13)) { - /* Lock and update the counter of reply messages */ - spin_lock_irqsave(&sep->snd_rply_lck, lock_irq_flag); - sep->reply_ct++; - spin_unlock_irqrestore(&sep->snd_rply_lck, lock_irq_flag); - - dev_dbg(&sep->pdev->dev, "sep int: send_ct %lx reply_ct %lx\n", - sep->send_ct, sep->reply_ct); - - /* Is this a kernel client request */ - if (sep->in_kernel) { - tasklet_schedule(&sep->finish_tasklet); - goto finished_interrupt; - } - - /* Is this printf or daemon request? */ - reg_val2 = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - dev_dbg(&sep->pdev->dev, - "SEP Interrupt - GPR2 is %08x\n", reg_val2); - - clear_bit(SEP_WORKING_LOCK_BIT, &sep->in_use_flags); - - if ((reg_val2 >> 30) & 0x1) { - dev_dbg(&sep->pdev->dev, "int: printf request\n"); - } else if (reg_val2 >> 31) { - dev_dbg(&sep->pdev->dev, "int: daemon request\n"); - } else { - dev_dbg(&sep->pdev->dev, "int: SEP reply\n"); - wake_up(&sep->event_interrupt); - } - } else { - dev_dbg(&sep->pdev->dev, "int: not SEP interrupt\n"); - int_error = IRQ_NONE; - } - -finished_interrupt: - - if (int_error == IRQ_HANDLED) - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, reg_val); - - return int_error; -} - -/** - * sep_reconfig_shared_area - reconfigure shared area - * @sep: pointer to struct sep_device - * - * Reconfig the shared area between HOST and SEP - needed in case - * the DX_CC_Init function was called before OS loading. - */ -static int sep_reconfig_shared_area(struct sep_device *sep) -{ - int ret_val; - - /* use to limit waiting for SEP */ - unsigned long end_time; - - /* Send the new SHARED MESSAGE AREA to the SEP */ - dev_dbg(&sep->pdev->dev, "reconfig shared; sending %08llx to sep\n", - (unsigned long long)sep->shared_bus); - - sep_write_reg(sep, HW_HOST_HOST_SEP_GPR1_REG_ADDR, sep->shared_bus); - - /* Poll for SEP response */ - ret_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR1_REG_ADDR); - - end_time = jiffies + (WAIT_TIME * HZ); - - while ((time_before(jiffies, end_time)) && (ret_val != 0xffffffff) && - (ret_val != sep->shared_bus)) - ret_val = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR1_REG_ADDR); - - /* Check the return value (register) */ - if (ret_val != sep->shared_bus) { - dev_warn(&sep->pdev->dev, "could not reconfig shared area\n"); - dev_warn(&sep->pdev->dev, "result was %x\n", ret_val); - ret_val = -ENOMEM; - } else { - ret_val = 0; - } - - dev_dbg(&sep->pdev->dev, "reconfig shared area end\n"); - - return ret_val; -} - -/** - * sep_activate_dcb_dmatables_context - Takes DCB & DMA tables - * contexts into use - * @sep: SEP device - * @dcb_region: DCB region copy - * @dmatables_region: MLLI/DMA tables copy - * @dma_ctx: DMA context for current transaction - */ -ssize_t sep_activate_dcb_dmatables_context(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context *dma_ctx) -{ - void *dmaregion_free_start = NULL; - void *dmaregion_free_end = NULL; - void *dcbregion_free_start = NULL; - void *dcbregion_free_end = NULL; - ssize_t error = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] activating dcb/dma region\n", - current->pid); - - if (1 > dma_ctx->nr_dcb_creat) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid number of dcbs to activate 0x%08X\n", - current->pid, dma_ctx->nr_dcb_creat); - error = -EINVAL; - goto end_function; - } - - dmaregion_free_start = sep->shared_addr - + SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES; - dmaregion_free_end = dmaregion_free_start - + SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES - 1; - - if (dmaregion_free_start - + dma_ctx->dmatables_len > dmaregion_free_end) { - error = -ENOMEM; - goto end_function; - } - memcpy(dmaregion_free_start, - *dmatables_region, - dma_ctx->dmatables_len); - /* Free MLLI table copy */ - kfree(*dmatables_region); - *dmatables_region = NULL; - - /* Copy thread's DCB table copy to DCB table region */ - dcbregion_free_start = sep->shared_addr + - SEP_DRIVER_SYSTEM_DCB_MEMORY_OFFSET_IN_BYTES; - dcbregion_free_end = dcbregion_free_start + - (SEP_MAX_NUM_SYNC_DMA_OPS * - sizeof(struct sep_dcblock)) - 1; - - if (dcbregion_free_start - + (dma_ctx->nr_dcb_creat * sizeof(struct sep_dcblock)) - > dcbregion_free_end) { - error = -ENOMEM; - goto end_function; - } - - memcpy(dcbregion_free_start, - *dcb_region, - dma_ctx->nr_dcb_creat * sizeof(struct sep_dcblock)); - - /* Print the tables */ - dev_dbg(&sep->pdev->dev, "activate: input table\n"); - sep_debug_print_lli_tables(sep, - (struct sep_lli_entry *)sep_shared_area_bus_to_virt(sep, - (*dcb_region)->input_mlli_address), - (*dcb_region)->input_mlli_num_entries, - (*dcb_region)->input_mlli_data_size); - - dev_dbg(&sep->pdev->dev, "activate: output table\n"); - sep_debug_print_lli_tables(sep, - (struct sep_lli_entry *)sep_shared_area_bus_to_virt(sep, - (*dcb_region)->output_mlli_address), - (*dcb_region)->output_mlli_num_entries, - (*dcb_region)->output_mlli_data_size); - - dev_dbg(&sep->pdev->dev, - "[PID%d] printing activated tables\n", current->pid); - -end_function: - kfree(*dmatables_region); - *dmatables_region = NULL; - - kfree(*dcb_region); - *dcb_region = NULL; - - return error; -} - -/** - * sep_create_dcb_dmatables_context - Creates DCB & MLLI/DMA table context - * @sep: SEP device - * @dcb_region: DCB region buf to create for current transaction - * @dmatables_region: MLLI/DMA tables buf to create for current transaction - * @dma_ctx: DMA context buf to create for current transaction - * @user_dcb_args: User arguments for DCB/MLLI creation - * @num_dcbs: Number of DCBs to create - * @secure_dma: Indicate use of IMR restricted memory secure dma - */ -static ssize_t sep_create_dcb_dmatables_context(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - const struct build_dcb_struct __user *user_dcb_args, - const u32 num_dcbs, bool secure_dma) -{ - int error = 0; - int i = 0; - struct build_dcb_struct *dcb_args = NULL; - - dev_dbg(&sep->pdev->dev, "[PID%d] creating dcb/dma region\n", - current->pid); - - if (!dcb_region || !dma_ctx || !dmatables_region || !user_dcb_args) { - error = -EINVAL; - goto end_function; - } - - if (SEP_MAX_NUM_SYNC_DMA_OPS < num_dcbs) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid number of dcbs 0x%08X\n", - current->pid, num_dcbs); - error = -EINVAL; - goto end_function; - } - - dcb_args = kcalloc(num_dcbs, sizeof(struct build_dcb_struct), - GFP_KERNEL); - if (!dcb_args) { - error = -ENOMEM; - goto end_function; - } - - if (copy_from_user(dcb_args, - user_dcb_args, - num_dcbs * sizeof(struct build_dcb_struct))) { - error = -EFAULT; - goto end_function; - } - - /* Allocate thread-specific memory for DCB */ - *dcb_region = kzalloc(num_dcbs * sizeof(struct sep_dcblock), - GFP_KERNEL); - if (!(*dcb_region)) { - error = -ENOMEM; - goto end_function; - } - - /* Prepare DCB and MLLI table into the allocated regions */ - for (i = 0; i < num_dcbs; i++) { - error = sep_prepare_input_output_dma_table_in_dcb(sep, - (unsigned long)dcb_args[i].app_in_address, - (unsigned long)dcb_args[i].app_out_address, - dcb_args[i].data_in_size, - dcb_args[i].block_size, - dcb_args[i].tail_block_size, - dcb_args[i].is_applet, - false, secure_dma, - *dcb_region, dmatables_region, - dma_ctx, - NULL, - NULL); - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] dma table creation failed\n", - current->pid); - goto end_function; - } - - if (dcb_args[i].app_in_address != 0) - (*dma_ctx)->input_data_len += dcb_args[i].data_in_size; - } - -end_function: - kfree(dcb_args); - return error; -} - -/** - * sep_create_dcb_dmatables_context_kernel - Creates DCB & MLLI/DMA table context - * for kernel crypto - * @sep: SEP device - * @dcb_region: DCB region buf to create for current transaction - * @dmatables_region: MLLI/DMA tables buf to create for current transaction - * @dma_ctx: DMA context buf to create for current transaction - * @user_dcb_args: User arguments for DCB/MLLI creation - * @num_dcbs: Number of DCBs to create - * This does that same thing as sep_create_dcb_dmatables_context - * except that it is used only for the kernel crypto operation. It is - * separate because there is no user data involved; the dcb data structure - * is specific for kernel crypto (build_dcb_struct_kernel) - */ -int sep_create_dcb_dmatables_context_kernel(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - const struct build_dcb_struct_kernel *dcb_data, - const u32 num_dcbs) -{ - int error = 0; - int i = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] creating dcb/dma region\n", - current->pid); - - if (!dcb_region || !dma_ctx || !dmatables_region || !dcb_data) { - error = -EINVAL; - goto end_function; - } - - if (SEP_MAX_NUM_SYNC_DMA_OPS < num_dcbs) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid number of dcbs 0x%08X\n", - current->pid, num_dcbs); - error = -EINVAL; - goto end_function; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] num_dcbs is %d\n", - current->pid, num_dcbs); - - /* Allocate thread-specific memory for DCB */ - *dcb_region = kzalloc(num_dcbs * sizeof(struct sep_dcblock), - GFP_KERNEL); - if (!(*dcb_region)) { - error = -ENOMEM; - goto end_function; - } - - /* Prepare DCB and MLLI table into the allocated regions */ - for (i = 0; i < num_dcbs; i++) { - error = sep_prepare_input_output_dma_table_in_dcb(sep, - (unsigned long)dcb_data->app_in_address, - (unsigned long)dcb_data->app_out_address, - dcb_data->data_in_size, - dcb_data->block_size, - dcb_data->tail_block_size, - dcb_data->is_applet, - true, - false, - *dcb_region, dmatables_region, - dma_ctx, - dcb_data->src_sg, - dcb_data->dst_sg); - if (error) { - dev_warn(&sep->pdev->dev, - "[PID%d] dma table creation failed\n", - current->pid); - goto end_function; - } - } - -end_function: - return error; -} - -/** - * sep_activate_msgarea_context - Takes the message area context into use - * @sep: SEP device - * @msg_region: Message area context buf - * @msg_len: Message area context buffer size - */ -static ssize_t sep_activate_msgarea_context(struct sep_device *sep, - void **msg_region, - const size_t msg_len) -{ - dev_dbg(&sep->pdev->dev, "[PID%d] activating msg region\n", - current->pid); - - if (!msg_region || !(*msg_region) || - SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES < msg_len) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid act msgarea len 0x%08zX\n", - current->pid, msg_len); - return -EINVAL; - } - - memcpy(sep->shared_addr, *msg_region, msg_len); - - return 0; -} - -/** - * sep_create_msgarea_context - Creates message area context - * @sep: SEP device - * @msg_region: Msg area region buf to create for current transaction - * @msg_user: Content for msg area region from user - * @msg_len: Message area size - */ -static ssize_t sep_create_msgarea_context(struct sep_device *sep, - void **msg_region, - const void __user *msg_user, - const size_t msg_len) -{ - int error = 0; - - dev_dbg(&sep->pdev->dev, "[PID%d] creating msg region\n", - current->pid); - - if (!msg_region || - !msg_user || - SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES < msg_len || - SEP_DRIVER_MIN_MESSAGE_SIZE_IN_BYTES > msg_len) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid creat msgarea len 0x%08zX\n", - current->pid, msg_len); - error = -EINVAL; - goto end_function; - } - - /* Allocate thread-specific memory for message buffer */ - *msg_region = kzalloc(msg_len, GFP_KERNEL); - if (!(*msg_region)) { - error = -ENOMEM; - goto end_function; - } - - /* Copy input data to write() to allocated message buffer */ - if (copy_from_user(*msg_region, msg_user, msg_len)) { - error = -EFAULT; - goto end_function; - } - -end_function: - if (error && msg_region) { - kfree(*msg_region); - *msg_region = NULL; - } - - return error; -} - -/** - * sep_read - Returns results of an operation for fastcall interface - * @filp: File pointer - * @buf_user: User buffer for storing results - * @count_user: User buffer size - * @offset: File offset, not supported - * - * The implementation does not support reading in chunks, all data must be - * consumed during a single read system call. - */ -static ssize_t sep_read(struct file *filp, - char __user *buf_user, size_t count_user, - loff_t *offset) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - struct sep_dma_context **dma_ctx = &private_data->dma_ctx; - struct sep_queue_info **my_queue_elem = &private_data->my_queue_elem; - ssize_t error = 0, error_tmp = 0; - - /* Am I the process that owns the transaction? */ - error = sep_check_transaction_owner(sep); - if (error) { - dev_dbg(&sep->pdev->dev, "[PID%d] read pid is not owner\n", - current->pid); - goto end_function; - } - - /* Checks that user has called necessary apis */ - if (0 == test_bit(SEP_FASTCALL_WRITE_DONE_OFFSET, - &call_status->status)) { - dev_warn(&sep->pdev->dev, - "[PID%d] fastcall write not called\n", - current->pid); - error = -EPROTO; - goto end_function_error; - } - - if (!buf_user) { - dev_warn(&sep->pdev->dev, - "[PID%d] null user buffer\n", - current->pid); - error = -EINVAL; - goto end_function_error; - } - - /* Wait for SEP to finish */ - wait_event(sep->event_interrupt, - test_bit(SEP_WORKING_LOCK_BIT, - &sep->in_use_flags) == 0); - - sep_dump_message(sep); - - dev_dbg(&sep->pdev->dev, "[PID%d] count_user = 0x%08zX\n", - current->pid, count_user); - - /* In case user has allocated bigger buffer */ - if (count_user > SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES) - count_user = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES; - - if (copy_to_user(buf_user, sep->shared_addr, count_user)) { - error = -EFAULT; - goto end_function_error; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] read succeeded\n", current->pid); - error = count_user; - -end_function_error: - /* Copy possible tail data to user and free DCB and MLLIs */ - error_tmp = sep_free_dcb_handler(sep, dma_ctx); - if (error_tmp) - dev_warn(&sep->pdev->dev, "[PID%d] dcb free failed\n", - current->pid); - - /* End the transaction, wakeup pending ones */ - error_tmp = sep_end_transaction_handler(sep, dma_ctx, call_status, - my_queue_elem); - if (error_tmp) - dev_warn(&sep->pdev->dev, - "[PID%d] ending transaction failed\n", - current->pid); - -end_function: - return error; -} - -/** - * sep_fastcall_args_get - Gets fastcall params from user - * sep: SEP device - * @args: Parameters buffer - * @buf_user: User buffer for operation parameters - * @count_user: User buffer size - */ -static inline ssize_t sep_fastcall_args_get(struct sep_device *sep, - struct sep_fastcall_hdr *args, - const char __user *buf_user, - const size_t count_user) -{ - ssize_t error = 0; - size_t actual_count = 0; - - if (!buf_user) { - dev_warn(&sep->pdev->dev, - "[PID%d] null user buffer\n", - current->pid); - error = -EINVAL; - goto end_function; - } - - if (count_user < sizeof(struct sep_fastcall_hdr)) { - dev_warn(&sep->pdev->dev, - "[PID%d] too small message size 0x%08zX\n", - current->pid, count_user); - error = -EINVAL; - goto end_function; - } - - if (copy_from_user(args, buf_user, sizeof(struct sep_fastcall_hdr))) { - error = -EFAULT; - goto end_function; - } - - if (SEP_FC_MAGIC != args->magic) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid fastcall magic 0x%08X\n", - current->pid, args->magic); - error = -EINVAL; - goto end_function; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] fastcall hdr num of DCBs 0x%08X\n", - current->pid, args->num_dcbs); - dev_dbg(&sep->pdev->dev, "[PID%d] fastcall hdr msg len 0x%08X\n", - current->pid, args->msg_len); - - if (SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES < args->msg_len || - SEP_DRIVER_MIN_MESSAGE_SIZE_IN_BYTES > args->msg_len) { - dev_warn(&sep->pdev->dev, - "[PID%d] invalid message length\n", - current->pid); - error = -EINVAL; - goto end_function; - } - - actual_count = sizeof(struct sep_fastcall_hdr) - + args->msg_len - + (args->num_dcbs * sizeof(struct build_dcb_struct)); - - if (actual_count != count_user) { - dev_warn(&sep->pdev->dev, - "[PID%d] inconsistent message sizes 0x%08zX vs 0x%08zX\n", - current->pid, actual_count, count_user); - error = -EMSGSIZE; - goto end_function; - } - -end_function: - return error; -} - -/** - * sep_write - Starts an operation for fastcall interface - * @filp: File pointer - * @buf_user: User buffer for operation parameters - * @count_user: User buffer size - * @offset: File offset, not supported - * - * The implementation does not support writing in chunks, - * all data must be given during a single write system call. - */ -static ssize_t sep_write(struct file *filp, - const char __user *buf_user, size_t count_user, - loff_t *offset) -{ - struct sep_private_data * const private_data = filp->private_data; - struct sep_call_status *call_status = &private_data->call_status; - struct sep_device *sep = private_data->device; - struct sep_dma_context *dma_ctx = NULL; - struct sep_fastcall_hdr call_hdr = {0}; - void *msg_region = NULL; - void *dmatables_region = NULL; - struct sep_dcblock *dcb_region = NULL; - ssize_t error = 0; - struct sep_queue_info *my_queue_elem = NULL; - bool my_secure_dma; /* are we using secure_dma (IMR)? */ - - dev_dbg(&sep->pdev->dev, "[PID%d] sep dev is 0x%p\n", - current->pid, sep); - dev_dbg(&sep->pdev->dev, "[PID%d] private_data is 0x%p\n", - current->pid, private_data); - - error = sep_fastcall_args_get(sep, &call_hdr, buf_user, count_user); - if (error) - goto end_function; - - buf_user += sizeof(struct sep_fastcall_hdr); - - if (call_hdr.secure_dma == 0) - my_secure_dma = false; - else - my_secure_dma = true; - - /* - * Controlling driver memory usage by limiting amount of - * buffers created. Only SEP_DOUBLEBUF_USERS_LIMIT number - * of threads can progress further at a time - */ - dev_dbg(&sep->pdev->dev, - "[PID%d] waiting for double buffering region access\n", - current->pid); - error = down_interruptible(&sep->sep_doublebuf); - dev_dbg(&sep->pdev->dev, "[PID%d] double buffering region start\n", - current->pid); - if (error) { - /* Signal received */ - goto end_function_error; - } - - /* - * Prepare contents of the shared area regions for - * the operation into temporary buffers - */ - if (0 < call_hdr.num_dcbs) { - error = sep_create_dcb_dmatables_context(sep, - &dcb_region, - &dmatables_region, - &dma_ctx, - (const struct build_dcb_struct __user *) - buf_user, - call_hdr.num_dcbs, my_secure_dma); - if (error) - goto end_function_error_doublebuf; - - buf_user += call_hdr.num_dcbs * sizeof(struct build_dcb_struct); - } - - error = sep_create_msgarea_context(sep, - &msg_region, - buf_user, - call_hdr.msg_len); - if (error) - goto end_function_error_doublebuf; - - dev_dbg(&sep->pdev->dev, "[PID%d] updating queue status\n", - current->pid); - my_queue_elem = sep_queue_status_add(sep, - ((struct sep_msgarea_hdr *)msg_region)->opcode, - (dma_ctx) ? dma_ctx->input_data_len : 0, - current->pid, - current->comm, sizeof(current->comm)); - - if (!my_queue_elem) { - dev_dbg(&sep->pdev->dev, - "[PID%d] updating queue status error\n", current->pid); - error = -ENOMEM; - goto end_function_error_doublebuf; - } - - /* Wait until current process gets the transaction */ - error = sep_wait_transaction(sep); - - if (error) { - /* Interrupted by signal, don't clear transaction */ - dev_dbg(&sep->pdev->dev, "[PID%d] interrupted by signal\n", - current->pid); - sep_queue_status_remove(sep, &my_queue_elem); - goto end_function_error_doublebuf; - } - - dev_dbg(&sep->pdev->dev, "[PID%d] saving queue element\n", - current->pid); - private_data->my_queue_elem = my_queue_elem; - - /* Activate shared area regions for the transaction */ - error = sep_activate_msgarea_context(sep, &msg_region, - call_hdr.msg_len); - if (error) - goto end_function_error_clear_transact; - - sep_dump_message(sep); - - if (0 < call_hdr.num_dcbs) { - error = sep_activate_dcb_dmatables_context(sep, - &dcb_region, - &dmatables_region, - dma_ctx); - if (error) - goto end_function_error_clear_transact; - } - - /* Send command to SEP */ - error = sep_send_command_handler(sep); - if (error) - goto end_function_error_clear_transact; - - /* Store DMA context for the transaction */ - private_data->dma_ctx = dma_ctx; - /* Update call status */ - set_bit(SEP_FASTCALL_WRITE_DONE_OFFSET, &call_status->status); - error = count_user; - - up(&sep->sep_doublebuf); - dev_dbg(&sep->pdev->dev, "[PID%d] double buffering region end\n", - current->pid); - - goto end_function; - -end_function_error_clear_transact: - sep_end_transaction_handler(sep, &dma_ctx, call_status, - &private_data->my_queue_elem); - -end_function_error_doublebuf: - up(&sep->sep_doublebuf); - dev_dbg(&sep->pdev->dev, "[PID%d] double buffering region end\n", - current->pid); - -end_function_error: - if (dma_ctx) - sep_free_dma_table_data_handler(sep, &dma_ctx); - -end_function: - kfree(dcb_region); - kfree(dmatables_region); - kfree(msg_region); - - return error; -} - -/** - * sep_seek - Handler for seek system call - * @filp: File pointer - * @offset: File offset - * @origin: Options for offset - * - * Fastcall interface does not support seeking, all reads - * and writes are from/to offset zero - */ -static loff_t sep_seek(struct file *filp, loff_t offset, int origin) -{ - return -ENOSYS; -} - -/** - * sep_file_operations - file operation on sep device - * @sep_ioctl: ioctl handler from user space call - * @sep_poll: poll handler - * @sep_open: handles sep device open request - * @sep_release:handles sep device release request - * @sep_mmap: handles memory mapping requests - * @sep_read: handles read request on sep device - * @sep_write: handles write request on sep device - * @sep_seek: handles seek request on sep device - */ -static const struct file_operations sep_file_operations = { - .owner = THIS_MODULE, - .unlocked_ioctl = sep_ioctl, - .poll = sep_poll, - .open = sep_open, - .release = sep_release, - .mmap = sep_mmap, - .read = sep_read, - .write = sep_write, - .llseek = sep_seek, -}; - -/** - * sep_sysfs_read - read sysfs entry per gives arguments - * @filp: file pointer - * @kobj: kobject pointer - * @attr: binary file attributes - * @buf: read to this buffer - * @pos: offset to read - * @count: amount of data to read - * - * This function is to read sysfs entries for sep driver per given arguments. - */ -static ssize_t -sep_sysfs_read(struct file *filp, struct kobject *kobj, - struct bin_attribute *attr, - char *buf, loff_t pos, size_t count) -{ - unsigned long lck_flags; - size_t nleft = count; - struct sep_device *sep = sep_dev; - struct sep_queue_info *queue_elem = NULL; - u32 queue_num = 0; - u32 i = 1; - - spin_lock_irqsave(&sep->sep_queue_lock, lck_flags); - - queue_num = sep->sep_queue_num; - if (queue_num > SEP_DOUBLEBUF_USERS_LIMIT) - queue_num = SEP_DOUBLEBUF_USERS_LIMIT; - - if (count < sizeof(queue_num) - + (queue_num * sizeof(struct sep_queue_data))) { - spin_unlock_irqrestore(&sep->sep_queue_lock, lck_flags); - return -EINVAL; - } - - memcpy(buf, &queue_num, sizeof(queue_num)); - buf += sizeof(queue_num); - nleft -= sizeof(queue_num); - - list_for_each_entry(queue_elem, &sep->sep_queue_status, list) { - if (i++ > queue_num) - break; - - memcpy(buf, &queue_elem->data, sizeof(queue_elem->data)); - nleft -= sizeof(queue_elem->data); - buf += sizeof(queue_elem->data); - } - spin_unlock_irqrestore(&sep->sep_queue_lock, lck_flags); - - return count - nleft; -} - -/** - * bin_attributes - defines attributes for queue_status - * @attr: attributes (name & permissions) - * @read: function pointer to read this file - * @size: maxinum size of binary attribute - */ -static const struct bin_attribute queue_status = { - .attr = {.name = "queue_status", .mode = 0444}, - .read = sep_sysfs_read, - .size = sizeof(u32) - + (SEP_DOUBLEBUF_USERS_LIMIT * sizeof(struct sep_queue_data)), -}; - -/** - * sep_register_driver_with_fs - register misc devices - * @sep: pointer to struct sep_device - * - * This function registers the driver with the file system - */ -static int sep_register_driver_with_fs(struct sep_device *sep) -{ - int ret_val; - - sep->miscdev_sep.minor = MISC_DYNAMIC_MINOR; - sep->miscdev_sep.name = SEP_DEV_NAME; - sep->miscdev_sep.fops = &sep_file_operations; - - ret_val = misc_register(&sep->miscdev_sep); - if (ret_val) { - dev_warn(&sep->pdev->dev, "misc reg fails for SEP %x\n", - ret_val); - return ret_val; - } - - ret_val = device_create_bin_file(sep->miscdev_sep.this_device, - &queue_status); - if (ret_val) { - dev_warn(&sep->pdev->dev, "sysfs attribute1 fails for SEP %x\n", - ret_val); - misc_deregister(&sep->miscdev_sep); - return ret_val; - } - - return ret_val; -} - -/** - *sep_probe - probe a matching PCI device - *@pdev: pci_device - *@ent: pci_device_id - * - *Attempt to set up and configure a SEP device that has been - *discovered by the PCI layer. Allocates all required resources. - */ -static int sep_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - int error = 0; - struct sep_device *sep = NULL; - - if (sep_dev != NULL) { - dev_dbg(&pdev->dev, "only one SEP supported.\n"); - return -EBUSY; - } - - /* Enable the device */ - error = pci_enable_device(pdev); - if (error) { - dev_warn(&pdev->dev, "error enabling pci device\n"); - goto end_function; - } - - /* Allocate the sep_device structure for this device */ - sep_dev = kzalloc(sizeof(struct sep_device), GFP_ATOMIC); - if (sep_dev == NULL) { - error = -ENOMEM; - goto end_function_disable_device; - } - - /* - * We're going to use another variable for actually - * working with the device; this way, if we have - * multiple devices in the future, it would be easier - * to make appropriate changes - */ - sep = sep_dev; - - sep->pdev = pci_dev_get(pdev); - - init_waitqueue_head(&sep->event_transactions); - init_waitqueue_head(&sep->event_interrupt); - spin_lock_init(&sep->snd_rply_lck); - spin_lock_init(&sep->sep_queue_lock); - sema_init(&sep->sep_doublebuf, SEP_DOUBLEBUF_USERS_LIMIT); - - INIT_LIST_HEAD(&sep->sep_queue_status); - - dev_dbg(&sep->pdev->dev, - "sep probe: PCI obtained, device being prepared\n"); - - /* Set up our register area */ - sep->reg_physical_addr = pci_resource_start(sep->pdev, 0); - if (!sep->reg_physical_addr) { - dev_warn(&sep->pdev->dev, "Error getting register start\n"); - error = -ENODEV; - goto end_function_free_sep_dev; - } - - sep->reg_physical_end = pci_resource_end(sep->pdev, 0); - if (!sep->reg_physical_end) { - dev_warn(&sep->pdev->dev, "Error getting register end\n"); - error = -ENODEV; - goto end_function_free_sep_dev; - } - - sep->reg_addr = ioremap_nocache(sep->reg_physical_addr, - (size_t)(sep->reg_physical_end - sep->reg_physical_addr + 1)); - if (!sep->reg_addr) { - dev_warn(&sep->pdev->dev, "Error getting register virtual\n"); - error = -ENODEV; - goto end_function_free_sep_dev; - } - - dev_dbg(&sep->pdev->dev, - "Register area start %llx end %llx virtual %p\n", - (unsigned long long)sep->reg_physical_addr, - (unsigned long long)sep->reg_physical_end, - sep->reg_addr); - - /* Allocate the shared area */ - sep->shared_size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES + - SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES + - SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + - SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + - SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES; - - if (sep_map_and_alloc_shared_area(sep)) { - error = -ENOMEM; - /* Allocation failed */ - goto end_function_error; - } - - /* Clear ICR register */ - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); - - /* Set the IMR register - open only GPR 2 */ - sep_write_reg(sep, HW_HOST_IMR_REG_ADDR, (~(0x1 << 13))); - - /* Read send/receive counters from SEP */ - sep->reply_ct = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - sep->reply_ct &= 0x3FFFFFFF; - sep->send_ct = sep->reply_ct; - - /* Get the interrupt line */ - error = request_irq(pdev->irq, sep_inthandler, IRQF_SHARED, - "sep_driver", sep); - - if (error) - goto end_function_deallocate_sep_shared_area; - - /* The new chip requires a shared area reconfigure */ - error = sep_reconfig_shared_area(sep); - if (error) - goto end_function_free_irq; - - sep->in_use = 1; - - /* Finally magic up the device nodes */ - /* Register driver with the fs */ - error = sep_register_driver_with_fs(sep); - - if (error) { - dev_err(&sep->pdev->dev, "error registering dev file\n"); - goto end_function_free_irq; - } - - sep->in_use = 0; /* through touching the device */ -#ifdef SEP_ENABLE_RUNTIME_PM - pm_runtime_put_noidle(&sep->pdev->dev); - pm_runtime_allow(&sep->pdev->dev); - pm_runtime_set_autosuspend_delay(&sep->pdev->dev, - SUSPEND_DELAY); - pm_runtime_use_autosuspend(&sep->pdev->dev); - pm_runtime_mark_last_busy(&sep->pdev->dev); - sep->power_save_setup = 1; -#endif - /* register kernel crypto driver */ -#if defined(CONFIG_CRYPTO) || defined(CONFIG_CRYPTO_MODULE) - error = sep_crypto_setup(); - if (error) { - dev_err(&sep->pdev->dev, "crypto setup failed\n"); - goto end_function_free_irq; - } -#endif - goto end_function; - -end_function_free_irq: - free_irq(pdev->irq, sep); - -end_function_deallocate_sep_shared_area: - /* De-allocate shared area */ - sep_unmap_and_free_shared_area(sep); - -end_function_error: - iounmap(sep->reg_addr); - -end_function_free_sep_dev: - pci_dev_put(sep_dev->pdev); - kfree(sep_dev); - sep_dev = NULL; - -end_function_disable_device: - pci_disable_device(pdev); - -end_function: - return error; -} - -/** - * sep_remove - handles removing device from pci subsystem - * @pdev: pointer to pci device - * - * This function will handle removing our sep device from pci subsystem on exit - * or unloading this module. It should free up all used resources, and unmap if - * any memory regions mapped. - */ -static void sep_remove(struct pci_dev *pdev) -{ - struct sep_device *sep = sep_dev; - - /* Unregister from fs */ - misc_deregister(&sep->miscdev_sep); - - /* Unregister from kernel crypto */ -#if defined(CONFIG_CRYPTO) || defined(CONFIG_CRYPTO_MODULE) - sep_crypto_takedown(); -#endif - /* Free the irq */ - free_irq(sep->pdev->irq, sep); - - /* Free the shared area */ - sep_unmap_and_free_shared_area(sep_dev); - iounmap(sep_dev->reg_addr); - -#ifdef SEP_ENABLE_RUNTIME_PM - if (sep->in_use) { - sep->in_use = 0; - pm_runtime_forbid(&sep->pdev->dev); - pm_runtime_get_noresume(&sep->pdev->dev); - } -#endif - pci_dev_put(sep_dev->pdev); - kfree(sep_dev); - sep_dev = NULL; -} - -/* Initialize struct pci_device_id for our driver */ -static const struct pci_device_id sep_pci_id_tbl[] = { - {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0826)}, - {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x08e9)}, - {0} -}; - -/* Export our pci_device_id structure to user space */ -MODULE_DEVICE_TABLE(pci, sep_pci_id_tbl); - -#ifdef SEP_ENABLE_RUNTIME_PM - -/** - * sep_pm_resume - rsume routine while waking up from S3 state - * @dev: pointer to sep device - * - * This function is to be used to wake up sep driver while system awakes from S3 - * state i.e. suspend to ram. The RAM in intact. - * Notes - revisit with more understanding of pm, ICR/IMR & counters. - */ -static int sep_pci_resume(struct device *dev) -{ - struct sep_device *sep = sep_dev; - - dev_dbg(&sep->pdev->dev, "pci resume called\n"); - - if (sep->power_state == SEP_DRIVER_POWERON) - return 0; - - /* Clear ICR register */ - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); - - /* Set the IMR register - open only GPR 2 */ - sep_write_reg(sep, HW_HOST_IMR_REG_ADDR, (~(0x1 << 13))); - - /* Read send/receive counters from SEP */ - sep->reply_ct = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - sep->reply_ct &= 0x3FFFFFFF; - sep->send_ct = sep->reply_ct; - - sep->power_state = SEP_DRIVER_POWERON; - - return 0; -} - -/** - * sep_pm_suspend - suspend routine while going to S3 state - * @dev: pointer to sep device - * - * This function is to be used to suspend sep driver while system goes to S3 - * state i.e. suspend to ram. The RAM in intact and ON during this suspend. - * Notes - revisit with more understanding of pm, ICR/IMR - */ -static int sep_pci_suspend(struct device *dev) -{ - struct sep_device *sep = sep_dev; - - dev_dbg(&sep->pdev->dev, "pci suspend called\n"); - if (sep->in_use == 1) - return -EAGAIN; - - sep->power_state = SEP_DRIVER_POWEROFF; - - /* Clear ICR register */ - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); - - /* Set the IMR to block all */ - sep_write_reg(sep, HW_HOST_IMR_REG_ADDR, 0xFFFFFFFF); - - return 0; -} - -/** - * sep_pm_runtime_resume - runtime resume routine - * @dev: pointer to sep device - * - * Notes - revisit with more understanding of pm, ICR/IMR & counters - */ -static int sep_pm_runtime_resume(struct device *dev) -{ - u32 retval2; - u32 delay_count; - struct sep_device *sep = sep_dev; - - dev_dbg(&sep->pdev->dev, "pm runtime resume called\n"); - - /** - * Wait until the SCU boot is ready - * This is done by iterating SCU_DELAY_ITERATION (10 - * microseconds each) up to SCU_DELAY_MAX (50) times. - * This bit can be set in a random time that is less - * than 500 microseconds after each power resume - */ - retval2 = 0; - delay_count = 0; - while ((!retval2) && (delay_count < SCU_DELAY_MAX)) { - retval2 = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR3_REG_ADDR); - retval2 &= 0x00000008; - if (!retval2) { - udelay(SCU_DELAY_ITERATION); - delay_count += 1; - } - } - - if (!retval2) { - dev_warn(&sep->pdev->dev, "scu boot bit not set at resume\n"); - return -EINVAL; - } - - /* Clear ICR register */ - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); - - /* Set the IMR register - open only GPR 2 */ - sep_write_reg(sep, HW_HOST_IMR_REG_ADDR, (~(0x1 << 13))); - - /* Read send/receive counters from SEP */ - sep->reply_ct = sep_read_reg(sep, HW_HOST_SEP_HOST_GPR2_REG_ADDR); - sep->reply_ct &= 0x3FFFFFFF; - sep->send_ct = sep->reply_ct; - - return 0; -} - -/** - * sep_pm_runtime_suspend - runtime suspend routine - * @dev: pointer to sep device - * - * Notes - revisit with more understanding of pm - */ -static int sep_pm_runtime_suspend(struct device *dev) -{ - struct sep_device *sep = sep_dev; - - dev_dbg(&sep->pdev->dev, "pm runtime suspend called\n"); - - /* Clear ICR register */ - sep_write_reg(sep, HW_HOST_ICR_REG_ADDR, 0xFFFFFFFF); - return 0; -} - -/** - * sep_pm - power management for sep driver - * @sep_pm_runtime_resume: resume- no communication with cpu & main memory - * @sep_pm_runtime_suspend: suspend- no communication with cpu & main memory - * @sep_pci_suspend: suspend - main memory is still ON - * @sep_pci_resume: resume - main memory is still ON - */ -static const struct dev_pm_ops sep_pm = { - .runtime_resume = sep_pm_runtime_resume, - .runtime_suspend = sep_pm_runtime_suspend, - .resume = sep_pci_resume, - .suspend = sep_pci_suspend, -}; -#endif /* SEP_ENABLE_RUNTIME_PM */ - -/** - * sep_pci_driver - registers this device with pci subsystem - * @name: name identifier for this driver - * @sep_pci_id_tbl: pointer to struct pci_device_id table - * @sep_probe: pointer to probe function in PCI driver - * @sep_remove: pointer to remove function in PCI driver - */ -static struct pci_driver sep_pci_driver = { -#ifdef SEP_ENABLE_RUNTIME_PM - .driver = { - .pm = &sep_pm, - }, -#endif - .name = "sep_sec_driver", - .id_table = sep_pci_id_tbl, - .probe = sep_probe, - .remove = sep_remove -}; - -module_pci_driver(sep_pci_driver); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/sep/sep_trace_events.h b/drivers/staging/sep/sep_trace_events.h deleted file mode 100644 index 74f4c9a2b5be..000000000000 --- a/drivers/staging/sep/sep_trace_events.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * If TRACE_SYSTEM is defined, that will be the directory created - * in the ftrace directory under /sys/kernel/debug/tracing/events/ - * - * The define_trace.h below will also look for a file name of - * TRACE_SYSTEM.h where TRACE_SYSTEM is what is defined here. - * In this case, it would look for sample.h - * - * If the header name will be different than the system name - * (as in this case), then you can override the header name that - * define_trace.h will look up by defining TRACE_INCLUDE_FILE - * - * This file is called trace-events-sample.h but we want the system - * to be called "sample". Therefore we must define the name of this - * file: - * - * #define TRACE_INCLUDE_FILE trace-events-sample - * - * As we do an the bottom of this file. - * - * Notice that TRACE_SYSTEM should be defined outside of #if - * protection, just like TRACE_INCLUDE_FILE. - */ -#undef TRACE_SYSTEM -#define TRACE_SYSTEM sep - -/* - * Notice that this file is not protected like a normal header. - * We also must allow for rereading of this file. The - * - * || defined(TRACE_HEADER_MULTI_READ) - * - * serves this purpose. - */ -#if !defined(_TRACE_SEP_EVENTS_H) || defined(TRACE_HEADER_MULTI_READ) -#define _TRACE_SEP_EVENTS_H - -#ifdef SEP_PERF_DEBUG -#define SEP_TRACE_FUNC_IN() trace_sep_func_start(__func__, 0) -#define SEP_TRACE_FUNC_OUT(branch) trace_sep_func_end(__func__, branch) -#define SEP_TRACE_EVENT(branch) trace_sep_misc_event(__func__, branch) -#else -#define SEP_TRACE_FUNC_IN() -#define SEP_TRACE_FUNC_OUT(branch) -#define SEP_TRACE_EVENT(branch) -#endif - - -/* - * All trace headers should include tracepoint.h, until we finally - * make it into a standard header. - */ -#include - -/* - * Since use str*cpy in header file, better to include string.h, directly. - */ -#include - -/* - * The TRACE_EVENT macro is broken up into 5 parts. - * - * name: name of the trace point. This is also how to enable the tracepoint. - * A function called trace_foo_bar() will be created. - * - * proto: the prototype of the function trace_foo_bar() - * Here it is trace_foo_bar(char *foo, int bar). - * - * args: must match the arguments in the prototype. - * Here it is simply "foo, bar". - * - * struct: This defines the way the data will be stored in the ring buffer. - * There are currently two types of elements. __field and __array. - * a __field is broken up into (type, name). Where type can be any - * type but an array. - * For an array. there are three fields. (type, name, size). The - * type of elements in the array, the name of the field and the size - * of the array. - * - * __array( char, foo, 10) is the same as saying char foo[10]. - * - * fast_assign: This is a C like function that is used to store the items - * into the ring buffer. - * - * printk: This is a way to print out the data in pretty print. This is - * useful if the system crashes and you are logging via a serial line, - * the data can be printed to the console using this "printk" method. - * - * Note, that for both the assign and the printk, __entry is the handler - * to the data structure in the ring buffer, and is defined by the - * TP_STRUCT__entry. - */ -TRACE_EVENT(sep_func_start, - - TP_PROTO(const char *name, int branch), - - TP_ARGS(name, branch), - - TP_STRUCT__entry( - __array(char, name, 20) - __field(int, branch) - ), - - TP_fast_assign( - strlcpy(__entry->name, name, 20); - __entry->branch = branch; - ), - - TP_printk("func_start %s %d", __entry->name, __entry->branch) -); - -TRACE_EVENT(sep_func_end, - - TP_PROTO(const char *name, int branch), - - TP_ARGS(name, branch), - - TP_STRUCT__entry( - __array(char, name, 20) - __field(int, branch) - ), - - TP_fast_assign( - strlcpy(__entry->name, name, 20); - __entry->branch = branch; - ), - - TP_printk("func_end %s %d", __entry->name, __entry->branch) -); - -TRACE_EVENT(sep_misc_event, - - TP_PROTO(const char *name, int branch), - - TP_ARGS(name, branch), - - TP_STRUCT__entry( - __array(char, name, 20) - __field(int, branch) - ), - - TP_fast_assign( - strlcpy(__entry->name, name, 20); - __entry->branch = branch; - ), - - TP_printk("misc_event %s %d", __entry->name, __entry->branch) -); - - -#endif - -/***** NOTICE! The #if protection ends here. *****/ - - -/* - * There are several ways I could have done this. If I left out the - * TRACE_INCLUDE_PATH, then it would default to the kernel source - * include/trace/events directory. - * - * I could specify a path from the define_trace.h file back to this - * file. - * - * #define TRACE_INCLUDE_PATH ../../samples/trace_events - * - * But the safest and easiest way to simply make it use the directory - * that the file is in is to add in the Makefile: - * - * CFLAGS_trace-events-sample.o := -I$(src) - * - * This will make sure the current path is part of the include - * structure for our file so that define_trace.h can find it. - * - * I could have made only the top level directory the include: - * - * CFLAGS_trace-events-sample.o := -I$(PWD) - * - * And then let the path to this directory be the TRACE_INCLUDE_PATH: - * - * #define TRACE_INCLUDE_PATH samples/trace_events - * - * But then if something defines "samples" or "trace_events" as a macro - * then we could risk that being converted too, and give us an unexpected - * result. - */ -#undef TRACE_INCLUDE_PATH -#undef TRACE_INCLUDE_FILE -#define TRACE_INCLUDE_PATH . -/* - * TRACE_INCLUDE_FILE is not needed if the filename and TRACE_SYSTEM are equal - */ -#define TRACE_INCLUDE_FILE sep_trace_events -#include -- cgit From 80dd7052089f0ee847ba3dc7c5ad471c0ed18089 Mon Sep 17 00:00:00 2001 From: Fabian Frederick Date: Wed, 23 Jul 2014 21:04:38 +0200 Subject: staging: ion: vm_insert_pfn and zap_page_range rely on CONFIG_MMU Fix following sh-allmodconfig errors reported on kisskb " drivers/built-in.o: In function `ion_vm_fault': ion.c:(.text+0x1f2d8f8): undefined reference to `vm_insert_pfn' drivers/built-in.o: In function `ion_buffer_sync_for_device': ion.c:(.text+0x1f316bc): undefined reference to `zap_page_range' make: *** [vmlinux] Error 1 " Signed-off-by: Fabian Frederick Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ion/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig index 0a6e4d03c78a..345234624492 100644 --- a/drivers/staging/android/ion/Kconfig +++ b/drivers/staging/android/ion/Kconfig @@ -1,6 +1,6 @@ menuconfig ION bool "Ion Memory Manager" - depends on HAVE_MEMBLOCK && HAS_DMA + depends on HAVE_MEMBLOCK && HAS_DMA && MMU select GENERIC_ALLOCATOR select DMA_SHARED_BUFFER ---help--- -- cgit From 53cbe20d0291e0a0828f0d7e1686b95db8621ca7 Mon Sep 17 00:00:00 2001 From: Guillaume Clement Date: Fri, 25 Jul 2014 14:47:23 +0200 Subject: staging: vt6655: fix direct dereferencing of user pointer Sparse reported that the data from tagSCmdRequest is given by userspace, so it should be tagged as such. Later, we were memcomparing and dereferencing it without first copying it, fix that as well. Signed-off-by: Guillaume Clement Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/iocmd.h | 2 +- drivers/staging/vt6655/iwctl.c | 32 ++++++++++++++++++++++---------- drivers/staging/vt6655/iwctl.h | 6 +++--- 3 files changed, 26 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/iocmd.h b/drivers/staging/vt6655/iocmd.h index ae037ec5b366..a665cfd8a482 100644 --- a/drivers/staging/vt6655/iocmd.h +++ b/drivers/staging/vt6655/iocmd.h @@ -94,7 +94,7 @@ typedef enum tagWZONETYPE { #pragma pack(1) typedef struct tagSCmdRequest { u8 name[16]; - void *data; + void __user *data; u16 wResult; u16 wCmdCode; } SCmdRequest, *PSCmdRequest; diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 501cd6477439..7ce23b57e78d 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -1621,17 +1621,24 @@ int iwctl_giwauth(struct net_device *dev, int iwctl_siwgenie(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra) + char __user *extra) { PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); int ret = 0; + char length; if (wrq->length) { - if ((wrq->length < 2) || (extra[1]+2 != wrq->length)) { - ret = -EINVAL; - goto out; - } + if (wrq->length < 2) + return -EINVAL; + + ret = get_user(length, extra + 1); + if (ret) + return ret; + + if (length + 2 != wrq->length) + return -EINVAL; + if (wrq->length > MAX_WPA_IE_LEN) { ret = -ENOMEM; goto out; @@ -1654,7 +1661,7 @@ out://not completely ...not necessary in wpa_supplicant 0.5.8 int iwctl_giwgenie(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra) + char __user *extra) { PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -1801,18 +1808,23 @@ int iwctl_giwencodeext(struct net_device *dev, int iwctl_siwmlme(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra) + char __user *extra) { PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - struct iw_mlme *mlme = (struct iw_mlme *)extra; + struct iw_mlme mime; + int ret = 0; - if (memcmp(pMgmt->abyCurrBSSID, mlme->addr.sa_data, ETH_ALEN)) { + ret = copy_from_user(&mime, extra, sizeof(mime)); + if (ret) + return -EFAULT; + + if (memcmp(pMgmt->abyCurrBSSID, mime.addr.sa_data, ETH_ALEN)) { ret = -EINVAL; return ret; } - switch (mlme->cmd) { + switch (mime.cmd) { case IW_MLME_DEAUTH: //this command seems to be not complete,please test it --einsnliu //bScheduleCommand((void *) pDevice, WLAN_CMD_DEAUTH, (unsigned char *)&reason); diff --git a/drivers/staging/vt6655/iwctl.h b/drivers/staging/vt6655/iwctl.h index de0a337b543a..7dd63102182d 100644 --- a/drivers/staging/vt6655/iwctl.h +++ b/drivers/staging/vt6655/iwctl.h @@ -176,12 +176,12 @@ int iwctl_giwauth(struct net_device *dev, int iwctl_siwgenie(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra); + char __user *extra); int iwctl_giwgenie(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra); + char __user *extra); int iwctl_siwencodeext(struct net_device *dev, struct iw_request_info *info, @@ -196,7 +196,7 @@ int iwctl_giwencodeext(struct net_device *dev, int iwctl_siwmlme(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrq, - char *extra); + char __user *extra); #endif // #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT //End Add -- //2008-0409-07, by Einsn Liu -- cgit From e8cdd70affc2594e06a2a79e1aaaf62df88987df Mon Sep 17 00:00:00 2001 From: Rahul Garg Date: Mon, 28 Jul 2014 07:02:32 +0530 Subject: staging: vt6655: coding style: Fixed commenting style fix coding style: use C89 comments, not C99 Signed-off-by: Rahul Garg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/tcrc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/tcrc.c b/drivers/staging/vt6655/tcrc.c index ed6868a9c16e..ddc5efd040f9 100644 --- a/drivers/staging/vt6655/tcrc.c +++ b/drivers/staging/vt6655/tcrc.c @@ -41,7 +41,7 @@ /*--------------------- Static Variables --------------------------*/ -// 32-bit CRC table +/* 32-bit CRC table */ static const unsigned long s_adwCrc32Table[256] = { 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L, -- cgit From a948318f70b4035983db7d178618b407bcd1fecb Mon Sep 17 00:00:00 2001 From: Max Vozeler Date: Mon, 28 Jul 2014 13:28:10 +0200 Subject: staging: usbip: remove redundant return statements Remove redundant return statements at the end of void functions. This addresses the checkpatch.pl warnings: WARNING: void function return statements are not generally useful Signed-off-by: Max Vozeler Signed-off-by: Greg Kroah-Hartman --- drivers/staging/usbip/stub_rx.c | 1 - drivers/staging/usbip/vhci_hcd.c | 1 - drivers/staging/usbip/vhci_rx.c | 2 -- 3 files changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/usbip/stub_rx.c b/drivers/staging/usbip/stub_rx.c index e0b6d6b42728..00e475c51a12 100644 --- a/drivers/staging/usbip/stub_rx.c +++ b/drivers/staging/usbip/stub_rx.c @@ -529,7 +529,6 @@ static void stub_recv_cmd_submit(struct stub_device *sdev, } usbip_dbg_stub_rx("Leave\n"); - return; } /* recv a pdu */ diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c index e21c1b4d09ed..c02374b6049c 100644 --- a/drivers/staging/usbip/vhci_hcd.c +++ b/drivers/staging/usbip/vhci_hcd.c @@ -1121,7 +1121,6 @@ static struct platform_driver vhci_driver = { */ static void the_pdev_release(struct device *dev) { - return; } static struct platform_device the_pdev = { diff --git a/drivers/staging/usbip/vhci_rx.c b/drivers/staging/usbip/vhci_rx.c index d07fcb5ee93a..00e4a54308e4 100644 --- a/drivers/staging/usbip/vhci_rx.c +++ b/drivers/staging/usbip/vhci_rx.c @@ -111,8 +111,6 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev, usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, urb->status); usbip_dbg_vhci_rx("Leave\n"); - - return; } static struct vhci_unlink *dequeue_pending_unlink(struct vhci_device *vdev, -- cgit From a386149fb2bad23b5c6123894049ce3392bf76b5 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 18:07:07 +0100 Subject: staging: comedi: amplc_dio200_common: prevent extra free_irq() `dio200_detach()` in "amplc_dio200.c" calls `amplc_dio200_common_detach()` in "amplc_dio200_common.c", followed by `comedi_legacy_detach()` in "../drivers.c". Both of those functions call `free_irq()` if `dev->irq` is non-zero. The second call produces a warning message because the handler has already been freed. Prevent that by setting `dev->irq = 0` in `amplc_dio200_common_detach()`. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_common.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 78700e8185ed..3592e58c57d5 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -1202,8 +1202,10 @@ void amplc_dio200_common_detach(struct comedi_device *dev) if (!thisboard || !devpriv) return; - if (dev->irq) + if (dev->irq) { free_irq(dev->irq, dev); + dev->irq = 0; + } } EXPORT_SYMBOL_GPL(amplc_dio200_common_detach); -- cgit From ffe29dc6668b9bf0e102fda8f6f52b239c5b83f4 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 18:07:08 +0100 Subject: staging: comedi: amplc_dio200_common: remove some tests from amplc_dio200_common_detach() `amplc_dio200_common_detach()` doesn't do much apart from freeing the IRQ handler that was requested by `amplc_dio200_common_attach()` if `dev->irq` is non-zero. There is no need to check if the pointer to the constant board data or the pointer to private per-device data exist, so remove those tests. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_common.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 3592e58c57d5..4cf9e9ed71d4 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -1197,11 +1197,6 @@ EXPORT_SYMBOL_GPL(amplc_dio200_common_attach); void amplc_dio200_common_detach(struct comedi_device *dev) { - const struct dio200_board *thisboard = comedi_board(dev); - struct dio200_private *devpriv = dev->private; - - if (!thisboard || !devpriv) - return; if (dev->irq) { free_irq(dev->irq, dev); dev->irq = 0; -- cgit From 5d3d4b26f585e09159d3059a7459ab43eaed39a8 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Fri, 25 Jul 2014 18:07:09 +0100 Subject: staging: comedi: amplc_dio200_pci: no need to test board pointer in dio200_pci_detach() `dio200_pci_detach()` doesn't need to check if the pointer to constant board data (`thisboard`) and the pointer to private per-device data (`devpriv`) are valid before calling `amplc_dio200_common_detach()`. It has no further need to check `thisboard` so remove the variable altogether. Move the test of `devpriv` to the first point it is needs to be valid. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200_pci.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200_pci.c b/drivers/staging/comedi/drivers/amplc_dio200_pci.c index 3cec0e020adb..1954c1bd23db 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_pci.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_pci.c @@ -414,13 +414,10 @@ static int dio200_pci_auto_attach(struct comedi_device *dev, static void dio200_pci_detach(struct comedi_device *dev) { - const struct dio200_board *thisboard = comedi_board(dev); struct dio200_private *devpriv = dev->private; - if (!thisboard || !devpriv) - return; amplc_dio200_common_detach(dev); - if (devpriv->io.regtype == mmio_regtype) + if (devpriv && devpriv->io.regtype == mmio_regtype) iounmap(devpriv->io.u.membase); comedi_pci_disable(dev); } -- cgit From 6f929b4e5a022c3ca806c1675ccb833c42086853 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:29 +0100 Subject: staging: comedi: amplc_pc236: move static board data Move the static board data in `pc236_isa_boards[]` and `pc236_pci_board` closer to where they are used. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index b92fc6f2850b..c96519d89179 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -84,18 +84,6 @@ struct pc236_board { enum pc236_bustype bustype; }; -static const struct pc236_board pc236_isa_boards[] = { - { - .name = "pc36at", - .bustype = isa_bustype, - }, -}; - -static const struct pc236_board pc236_pci_board = { - .name = "pci236", - .bustype = pci_bustype, -}; - struct pc236_private { unsigned long lcr_iobase; /* PLX PCI9052 config registers in PCIBAR1 */ int enable_irq; @@ -342,6 +330,11 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) return pc236_common_attach(dev, dev->iobase, it->options[1], 0); } +static const struct pc236_board pc236_pci_board = { + .name = "pci236", + .bustype = pci_bustype, +}; + static int pc236_auto_attach(struct comedi_device *dev, unsigned long context_unused) { @@ -387,6 +380,13 @@ static void pc236_detach(struct comedi_device *dev) } } +static const struct pc236_board pc236_isa_boards[] = { + { + .name = "pc36at", + .bustype = isa_bustype, + }, +}; + static struct comedi_driver amplc_pc236_driver = { .driver_name = "amplc_pc236", .module = THIS_MODULE, -- cgit From e7637a912911ae4346e19e954d9481f7a5b0e48b Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:30 +0100 Subject: staging: comedi: amplc_pc236: don't disable h/w interrupt on detach() If an asynchronous command was running when the device is being detached, the comedi core would have called the subdevice `cancel` handler (`pc236_intr_cancel()`) before calling the `detach` handler (`pc236_detach()`). Since the cancel handler disables hardware interrupts (at least for the PCI236 board) by calling `pc236_disable_intr()`, there is no need for the detach handler to do so as well. Remove the call to `pc236_disable_intr()` from `pc236_detach()`. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index c96519d89179..32275a5ff169 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -369,8 +369,6 @@ static void pc236_detach(struct comedi_device *dev) if (!thisboard) return; - if (dev->iobase) - pc236_intr_disable(dev); if (is_isa_board(thisboard)) { comedi_legacy_detach(dev); } else if (is_pci_board(thisboard)) { -- cgit From 42b241c04e9b0cb655124fd61f729756afd21cc5 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:31 +0100 Subject: staging: comedi: amplc_pc236: add callback to enable/disable interrupt Add an optional callback function pointer to the board data to be called when interrupts are logically enabled or disabled to update the hardware registers. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 32275a5ff169..7b78d57cd67b 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -82,6 +82,7 @@ enum pc236_bustype { isa_bustype, pci_bustype }; struct pc236_board { const char *name; enum pc236_bustype bustype; + void (*intr_update_cb)(struct comedi_device *dev, bool enable); }; struct pc236_private { @@ -114,8 +115,8 @@ static void pc236_intr_disable(struct comedi_device *dev) spin_lock_irqsave(&dev->spinlock, flags); devpriv->enable_irq = 0; - if (is_pci_board(thisboard)) - outl(PCI236_INTR_DISABLE, devpriv->lcr_iobase + PLX9052_INTCSR); + if (thisboard->intr_update_cb) + thisboard->intr_update_cb(dev, false); spin_unlock_irqrestore(&dev->spinlock, flags); } @@ -132,8 +133,8 @@ static void pc236_intr_enable(struct comedi_device *dev) spin_lock_irqsave(&dev->spinlock, flags); devpriv->enable_irq = 1; - if (is_pci_board(thisboard)) - outl(PCI236_INTR_ENABLE, devpriv->lcr_iobase + PLX9052_INTCSR); + if (thisboard->intr_update_cb) + thisboard->intr_update_cb(dev, true); spin_unlock_irqrestore(&dev->spinlock, flags); } @@ -330,8 +331,17 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) return pc236_common_attach(dev, dev->iobase, it->options[1], 0); } +static void pci236_intr_update_cb(struct comedi_device *dev, bool enable) +{ + struct pc236_private *devpriv = dev->private; + + outl(enable ? PCI236_INTR_ENABLE : PCI236_INTR_DISABLE, + devpriv->lcr_iobase + PLX9052_INTCSR); +} + static const struct pc236_board pc236_pci_board = { .name = "pci236", + .intr_update_cb = pci236_intr_update_cb, .bustype = pci_bustype, }; -- cgit From 7f526aad196da471040a30bec4c788518e450fa2 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:32 +0100 Subject: staging: comedi: amplc_pc236: combine interrupt enable/disable functions `pc236_intr_enable()` and `pc236_intr_disable()` are very similar. Combine them into a single function `pc236_intr_update()` with a parameter to indicate whether interrupts are being enabled or disabled. Change type type of the `enable_irq` member of the private data to `bool` to match the parameter. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 37 ++++++---------------------- 1 file changed, 7 insertions(+), 30 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 7b78d57cd67b..c69aa2d2056f 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -87,7 +87,7 @@ struct pc236_board { struct pc236_private { unsigned long lcr_iobase; /* PLX PCI9052 config registers in PCIBAR1 */ - int enable_irq; + bool enable_irq; }; /* test if ISA supported and this is an ISA board */ @@ -102,39 +102,16 @@ static inline bool is_pci_board(const struct pc236_board *board) return DO_PCI && board->bustype == pci_bustype; } -/* - * This function is called to mark the interrupt as disabled (no command - * configured on subdevice 1) and to physically disable the interrupt - * (not possible on the PC36AT, except by removing the IRQ jumper!). - */ -static void pc236_intr_disable(struct comedi_device *dev) -{ - const struct pc236_board *thisboard = comedi_board(dev); - struct pc236_private *devpriv = dev->private; - unsigned long flags; - - spin_lock_irqsave(&dev->spinlock, flags); - devpriv->enable_irq = 0; - if (thisboard->intr_update_cb) - thisboard->intr_update_cb(dev, false); - spin_unlock_irqrestore(&dev->spinlock, flags); -} - -/* - * This function is called to mark the interrupt as enabled (a command - * configured on subdevice 1) and to physically enable the interrupt - * (not possible on the PC36AT, except by (re)connecting the IRQ jumper!). - */ -static void pc236_intr_enable(struct comedi_device *dev) +static void pc236_intr_update(struct comedi_device *dev, bool enable) { const struct pc236_board *thisboard = comedi_board(dev); struct pc236_private *devpriv = dev->private; unsigned long flags; spin_lock_irqsave(&dev->spinlock, flags); - devpriv->enable_irq = 1; + devpriv->enable_irq = enable; if (thisboard->intr_update_cb) - thisboard->intr_update_cb(dev, true); + thisboard->intr_update_cb(dev, enable); spin_unlock_irqrestore(&dev->spinlock, flags); } @@ -235,7 +212,7 @@ static int pc236_intr_cmdtest(struct comedi_device *dev, */ static int pc236_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - pc236_intr_enable(dev); + pc236_intr_update(dev, true); return 0; } @@ -246,7 +223,7 @@ static int pc236_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) static int pc236_intr_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - pc236_intr_disable(dev); + pc236_intr_update(dev, false); return 0; } @@ -291,7 +268,7 @@ static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, s = &dev->subdevices[1]; dev->read_subdev = s; s->type = COMEDI_SUBD_UNUSED; - pc236_intr_disable(dev); + pc236_intr_update(dev, false); if (irq) { if (request_irq(irq, pc236_interrupt, req_irq_flags, dev->board_name, dev) >= 0) { -- cgit From 55901d15b6f816af5bff9efd55b6400121dbc04a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:33 +0100 Subject: staging: comedi: amplc_pc236: add callback to check and clear interrupt Add an optional callback function pointer to the board data to be called when checking if an interrupt has occurred and to clear it if it has. Since the callback returns `bool`, change a few other `int` values to `bool` to match. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 40 +++++++++++++++++----------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index c69aa2d2056f..677911b0f7c0 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -83,6 +83,7 @@ struct pc236_board { const char *name; enum pc236_bustype bustype; void (*intr_update_cb)(struct comedi_device *dev, bool enable); + bool (*intr_chk_clr_cb)(struct comedi_device *dev); }; struct pc236_private { @@ -120,29 +121,21 @@ static void pc236_intr_update(struct comedi_device *dev, bool enable) * the interrupt has been marked as enabled and was generated by the * board. If so, the function prepares the hardware for the next * interrupt. - * Returns 0 if the interrupt should be ignored. + * Returns false if the interrupt should be ignored. */ -static int pc236_intr_check(struct comedi_device *dev) +static bool pc236_intr_check(struct comedi_device *dev) { const struct pc236_board *thisboard = comedi_board(dev); struct pc236_private *devpriv = dev->private; - int retval = 0; + bool retval = false; unsigned long flags; - unsigned int intcsr; spin_lock_irqsave(&dev->spinlock, flags); if (devpriv->enable_irq) { - retval = 1; - if (is_pci_board(thisboard)) { - intcsr = inl(devpriv->lcr_iobase + PLX9052_INTCSR); - if (!(intcsr & PLX9052_INTCSR_LI1STAT)) { - retval = 0; - } else { - /* Clear interrupt and keep it enabled. */ - outl(PCI236_INTR_ENABLE, - devpriv->lcr_iobase + PLX9052_INTCSR); - } - } + if (thisboard->intr_chk_clr_cb) + retval = thisboard->intr_chk_clr_cb(dev); + else + retval = true; } spin_unlock_irqrestore(&dev->spinlock, flags); @@ -236,7 +229,7 @@ static irqreturn_t pc236_interrupt(int irq, void *d) { struct comedi_device *dev = d; struct comedi_subdevice *s = dev->read_subdev; - int handled; + bool handled; handled = pc236_intr_check(dev); if (dev->attached && handled) { @@ -312,13 +305,28 @@ static void pci236_intr_update_cb(struct comedi_device *dev, bool enable) { struct pc236_private *devpriv = dev->private; + /* this will also clear the "local interrupt 1" latch */ outl(enable ? PCI236_INTR_ENABLE : PCI236_INTR_DISABLE, devpriv->lcr_iobase + PLX9052_INTCSR); } +static bool pci236_intr_chk_clr_cb(struct comedi_device *dev) +{ + struct pc236_private *devpriv = dev->private; + + /* check if interrupt occurred */ + if (!(inl(devpriv->lcr_iobase + PLX9052_INTCSR) & + PLX9052_INTCSR_LI1STAT)) + return false; + /* clear the interrupt */ + pci236_intr_update_cb(dev, devpriv->enable_irq); + return true; +} + static const struct pc236_board pc236_pci_board = { .name = "pci236", .intr_update_cb = pci236_intr_update_cb, + .intr_chk_clr_cb = pci236_intr_chk_clr_cb, .bustype = pci_bustype, }; -- cgit From 4cb60db2eabd275649b3305cc488a9794de8e463 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:34 +0100 Subject: staging: comedi: amplc_pc236: split into ISA, PCI and common module The "amplc_pc236" driver currently handles both ISA and PCI devices and uses a small amount of conditional compilation depending which are enabled. Move most of the functionality into a new module, "amplc_pc236_common", and split off support for PCI devices into a new module, "amplc_pci236". Retain support for ISA devices in the existing module, "amplc_pc236". Since the `detach` handler (`pc236_detach()`) in the existing module "amplc_pc236" now only needs to handle ISA devices and only calls `comedi_legacy_detach()`, just use `comedi_legacy_detach()` directly as the `detach` handler in `struct comedi_driver amplc_pc236_driver`. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/Kconfig | 2 +- drivers/staging/comedi/drivers/Makefile | 4 +- drivers/staging/comedi/drivers/amplc_pc236.c | 363 +-------------------- drivers/staging/comedi/drivers/amplc_pc236.h | 45 +++ .../staging/comedi/drivers/amplc_pc236_common.c | 206 ++++++++++++ drivers/staging/comedi/drivers/amplc_pci236.c | 162 +++++++++ 6 files changed, 429 insertions(+), 353 deletions(-) create mode 100644 drivers/staging/comedi/drivers/amplc_pc236.h create mode 100644 drivers/staging/comedi/drivers/amplc_pc236_common.c create mode 100644 drivers/staging/comedi/drivers/amplc_pci236.c (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 341fc07b2a54..36f2c7159250 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -815,7 +815,7 @@ config COMEDI_AMPLC_PC236_PCI Enable support for Amplicon PCI236 DIO board. To compile this driver as a module, choose M here: the module will be - called amplc_pc236. + called amplc_pci236. config COMEDI_AMPLC_PC263_PCI tristate "Amplicon PCI263 relay board support" diff --git a/drivers/staging/comedi/drivers/Makefile b/drivers/staging/comedi/drivers/Makefile index 0757a82ddcfa..8873d4807a01 100644 --- a/drivers/staging/comedi/drivers/Makefile +++ b/drivers/staging/comedi/drivers/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_COMEDI_SKEL) += skel.o # Comedi ISA drivers obj-$(CONFIG_COMEDI_AMPLC_DIO200_ISA) += amplc_dio200.o +obj-$(CONFIG_COMEDI_AMPLC_PC236_ISA) += amplc_pc236.o obj-$(CONFIG_COMEDI_AMPLC_PC263_ISA) += amplc_pc263.o obj-$(CONFIG_COMEDI_PCL711) += pcl711.o obj-$(CONFIG_COMEDI_PCL724) += pcl724.o @@ -80,7 +81,7 @@ obj-$(CONFIG_COMEDI_ADV_PCI1723) += adv_pci1723.o obj-$(CONFIG_COMEDI_ADV_PCI1724) += adv_pci1724.o obj-$(CONFIG_COMEDI_ADV_PCI_DIO) += adv_pci_dio.o obj-$(CONFIG_COMEDI_AMPLC_DIO200_PCI) += amplc_dio200_pci.o -obj-$(CONFIG_COMEDI_AMPLC_PC236) += amplc_pc236.o +obj-$(CONFIG_COMEDI_AMPLC_PC236_PCI) += amplc_pci236.o obj-$(CONFIG_COMEDI_AMPLC_PC263_PCI) += amplc_pci263.o obj-$(CONFIG_COMEDI_AMPLC_PCI224) += amplc_pci224.o obj-$(CONFIG_COMEDI_AMPLC_PCI230) += amplc_pci230.o @@ -138,5 +139,6 @@ obj-$(CONFIG_COMEDI_NI_LABPC_ISADMA) += ni_labpc_isadma.o obj-$(CONFIG_COMEDI_8255) += 8255.o obj-$(CONFIG_COMEDI_AMPLC_DIO200) += amplc_dio200_common.o +obj-$(CONFIG_COMEDI_AMPLC_PC236) += amplc_pc236_common.o obj-$(CONFIG_COMEDI_DAS08) += das08.o obj-$(CONFIG_COMEDI_FC) += comedi_fc.o diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index 677911b0f7c0..b95b877e5ed3 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -1,6 +1,6 @@ /* * comedi/drivers/amplc_pc236.c - * Driver for Amplicon PC36AT and PCI236 DIO boards. + * Driver for Amplicon PC36AT DIO boards. * * Copyright (C) 2002 MEV Ltd. * @@ -19,21 +19,17 @@ */ /* * Driver: amplc_pc236 - * Description: Amplicon PC36AT, PCI236 + * Description: Amplicon PC36AT * Author: Ian Abbott - * Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236) - * Updated: Thu, 24 Jul 2014 14:25:26 +0000 + * Devices: [Amplicon] PC36AT (pc36at) + * Updated: Fri, 25 Jul 2014 15:32:40 +0000 * Status: works * * Configuration options - PC36AT: * [0] - I/O port base address * [1] - IRQ (optional) * - * Manual configuration of PCI board (PCI236) is not supported; it is - * configured automatically. - * - * The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing - * as subdevice 0. + * The PC36AT board has a single 8255 appearing as subdevice 0. * * Subdevice 1 pretends to be a digital input device, but it always returns * 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, @@ -45,251 +41,16 @@ */ #include -#include -#include #include "../comedidev.h" -#include "comedi_fc.h" -#include "8255.h" -#include "plx9052.h" - -#define DO_ISA IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_ISA) -#define DO_PCI IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) - -/* PC36AT / PCI236 registers */ - -/* Disable, and clear, interrupts */ -#define PCI236_INTR_DISABLE (PLX9052_INTCSR_LI1POL | \ - PLX9052_INTCSR_LI2POL | \ - PLX9052_INTCSR_LI1SEL | \ - PLX9052_INTCSR_LI1CLRINT) - -/* Enable, and clear, interrupts */ -#define PCI236_INTR_ENABLE (PLX9052_INTCSR_LI1ENAB | \ - PLX9052_INTCSR_LI1POL | \ - PLX9052_INTCSR_LI2POL | \ - PLX9052_INTCSR_PCIENAB | \ - PLX9052_INTCSR_LI1SEL | \ - PLX9052_INTCSR_LI1CLRINT) - -/* - * Board descriptions for Amplicon PC36AT and PCI236. - */ - -enum pc236_bustype { isa_bustype, pci_bustype }; - -struct pc236_board { - const char *name; - enum pc236_bustype bustype; - void (*intr_update_cb)(struct comedi_device *dev, bool enable); - bool (*intr_chk_clr_cb)(struct comedi_device *dev); -}; - -struct pc236_private { - unsigned long lcr_iobase; /* PLX PCI9052 config registers in PCIBAR1 */ - bool enable_irq; -}; - -/* test if ISA supported and this is an ISA board */ -static inline bool is_isa_board(const struct pc236_board *board) -{ - return DO_ISA && board->bustype == isa_bustype; -} - -/* test if PCI supported and this is a PCI board */ -static inline bool is_pci_board(const struct pc236_board *board) -{ - return DO_PCI && board->bustype == pci_bustype; -} - -static void pc236_intr_update(struct comedi_device *dev, bool enable) -{ - const struct pc236_board *thisboard = comedi_board(dev); - struct pc236_private *devpriv = dev->private; - unsigned long flags; - - spin_lock_irqsave(&dev->spinlock, flags); - devpriv->enable_irq = enable; - if (thisboard->intr_update_cb) - thisboard->intr_update_cb(dev, enable); - spin_unlock_irqrestore(&dev->spinlock, flags); -} - -/* - * This function is called when an interrupt occurs to check whether - * the interrupt has been marked as enabled and was generated by the - * board. If so, the function prepares the hardware for the next - * interrupt. - * Returns false if the interrupt should be ignored. - */ -static bool pc236_intr_check(struct comedi_device *dev) -{ - const struct pc236_board *thisboard = comedi_board(dev); - struct pc236_private *devpriv = dev->private; - bool retval = false; - unsigned long flags; - - spin_lock_irqsave(&dev->spinlock, flags); - if (devpriv->enable_irq) { - if (thisboard->intr_chk_clr_cb) - retval = thisboard->intr_chk_clr_cb(dev); - else - retval = true; - } - spin_unlock_irqrestore(&dev->spinlock, flags); - - return retval; -} - -/* - * Input from subdevice 1. - * Copied from the comedi_parport driver. - */ -static int pc236_intr_insn(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, - unsigned int *data) -{ - data[1] = 0; - return insn->n; -} - -/* - * Subdevice 1 command test. - * Copied from the comedi_parport driver. - */ -static int pc236_intr_cmdtest(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_cmd *cmd) -{ - int err = 0; - - /* Step 1 : check if triggers are trivially valid */ - - err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW); - err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT); - err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_FOLLOW); - err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT); - err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_NONE); - - if (err) - return 1; - - /* Step 2a : make sure trigger sources are unique */ - /* Step 2b : and mutually compatible */ - - if (err) - return 2; - - /* Step 3: check it arguments are trivially valid */ - - err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0); - err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0); - err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0); - err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len); - err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); - - if (err) - return 3; - - /* step 4: ignored */ - - if (err) - return 4; - - return 0; -} - -/* - * Subdevice 1 command. - */ -static int pc236_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) -{ - pc236_intr_update(dev, true); - - return 0; -} - -/* - * Subdevice 1 cancel command. - */ -static int pc236_intr_cancel(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - pc236_intr_update(dev, false); - - return 0; -} - -/* - * Interrupt service routine. - * Based on the comedi_parport driver. - */ -static irqreturn_t pc236_interrupt(int irq, void *d) -{ - struct comedi_device *dev = d; - struct comedi_subdevice *s = dev->read_subdev; - bool handled; - - handled = pc236_intr_check(dev); - if (dev->attached && handled) { - comedi_buf_put(s, 0); - s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS; - comedi_event(dev, s); - } - return IRQ_RETVAL(handled); -} - -static int pc236_common_attach(struct comedi_device *dev, unsigned long iobase, - unsigned int irq, unsigned long req_irq_flags) -{ - struct comedi_subdevice *s; - int ret; - - dev->iobase = iobase; - - ret = comedi_alloc_subdevices(dev, 2); - if (ret) - return ret; - - s = &dev->subdevices[0]; - /* digital i/o subdevice (8255) */ - ret = subdev_8255_init(dev, s, NULL, iobase); - if (ret) - return ret; - - s = &dev->subdevices[1]; - dev->read_subdev = s; - s->type = COMEDI_SUBD_UNUSED; - pc236_intr_update(dev, false); - if (irq) { - if (request_irq(irq, pc236_interrupt, req_irq_flags, - dev->board_name, dev) >= 0) { - dev->irq = irq; - s->type = COMEDI_SUBD_DI; - s->subdev_flags = SDF_READABLE | SDF_CMD_READ; - s->n_chan = 1; - s->maxdata = 1; - s->range_table = &range_digital; - s->insn_bits = pc236_intr_insn; - s->len_chanlist = 1; - s->do_cmdtest = pc236_intr_cmdtest; - s->do_cmd = pc236_intr_cmd; - s->cancel = pc236_intr_cancel; - } - } - - return 0; -} +#include "amplc_pc236.h" static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct pc236_private *devpriv; int ret; - if (!DO_ISA) - return -EINVAL; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) return -ENOMEM; @@ -298,82 +59,10 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; - return pc236_common_attach(dev, dev->iobase, it->options[1], 0); -} - -static void pci236_intr_update_cb(struct comedi_device *dev, bool enable) -{ - struct pc236_private *devpriv = dev->private; - - /* this will also clear the "local interrupt 1" latch */ - outl(enable ? PCI236_INTR_ENABLE : PCI236_INTR_DISABLE, - devpriv->lcr_iobase + PLX9052_INTCSR); -} - -static bool pci236_intr_chk_clr_cb(struct comedi_device *dev) -{ - struct pc236_private *devpriv = dev->private; - - /* check if interrupt occurred */ - if (!(inl(devpriv->lcr_iobase + PLX9052_INTCSR) & - PLX9052_INTCSR_LI1STAT)) - return false; - /* clear the interrupt */ - pci236_intr_update_cb(dev, devpriv->enable_irq); - return true; -} - -static const struct pc236_board pc236_pci_board = { - .name = "pci236", - .intr_update_cb = pci236_intr_update_cb, - .intr_chk_clr_cb = pci236_intr_chk_clr_cb, - .bustype = pci_bustype, -}; - -static int pc236_auto_attach(struct comedi_device *dev, - unsigned long context_unused) -{ - struct pci_dev *pci_dev = comedi_to_pci_dev(dev); - struct pc236_private *devpriv; - unsigned long iobase; - int ret; - - if (!DO_PCI) - return -EINVAL; - - dev_info(dev->class_dev, "attach pci %s\n", pci_name(pci_dev)); - - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - - dev->board_ptr = &pc236_pci_board; - dev->board_name = pc236_pci_board.name; - ret = comedi_pci_enable(dev); - if (ret) - return ret; - - devpriv->lcr_iobase = pci_resource_start(pci_dev, 1); - iobase = pci_resource_start(pci_dev, 2); - return pc236_common_attach(dev, iobase, pci_dev->irq, IRQF_SHARED); -} - -static void pc236_detach(struct comedi_device *dev) -{ - const struct pc236_board *thisboard = comedi_board(dev); - - if (!thisboard) - return; - if (is_isa_board(thisboard)) { - comedi_legacy_detach(dev); - } else if (is_pci_board(thisboard)) { - if (dev->irq) - free_irq(dev->irq, dev); - comedi_pci_disable(dev); - } + return amplc_pc236_common_attach(dev, dev->iobase, it->options[1], 0); } -static const struct pc236_board pc236_isa_boards[] = { +static const struct pc236_board pc236_boards[] = { { .name = "pc36at", .bustype = isa_bustype, @@ -384,42 +73,14 @@ static struct comedi_driver amplc_pc236_driver = { .driver_name = "amplc_pc236", .module = THIS_MODULE, .attach = pc236_attach, - .auto_attach = pc236_auto_attach, - .detach = pc236_detach, -#if DO_ISA - .board_name = &pc236_isa_boards[0].name, + .detach = comedi_legacy_detach, + .board_name = &pc236_boards[0].name, .offset = sizeof(struct pc236_board), - .num_names = ARRAY_SIZE(pc236_isa_boards), -#endif -}; - -#if DO_PCI -static const struct pci_device_id pc236_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x0009) }, - { 0 } -}; - -MODULE_DEVICE_TABLE(pci, pc236_pci_table); - -static int amplc_pc236_pci_probe(struct pci_dev *dev, - const struct pci_device_id *id) -{ - return comedi_pci_auto_config(dev, &lc_pc236_driver, - id->driver_data); -} - -static struct pci_driver amplc_pc236_pci_driver = { - .name = "amplc_pc236", - .id_table = pc236_pci_table, - .probe = &lc_pc236_pci_probe, - .remove = comedi_pci_auto_unconfig, + .num_names = ARRAY_SIZE(pc236_boards), }; -module_comedi_pci_driver(amplc_pc236_driver, amplc_pc236_pci_driver); -#else module_comedi_driver(amplc_pc236_driver); -#endif MODULE_AUTHOR("Comedi http://www.comedi.org"); -MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_DESCRIPTION("Comedi driver for Amplicon PC36AT DIO boards"); MODULE_LICENSE("GPL"); diff --git a/drivers/staging/comedi/drivers/amplc_pc236.h b/drivers/staging/comedi/drivers/amplc_pc236.h new file mode 100644 index 000000000000..37348f1d986f --- /dev/null +++ b/drivers/staging/comedi/drivers/amplc_pc236.h @@ -0,0 +1,45 @@ +/* + * comedi/drivers/amplc_pc236.h + * Header for "amplc_pc236", "amplc_pci236" and "amplc_pc236_common". + * + * Copyright (C) 2002-2014 MEV Ltd. + * + * 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. + */ + +#ifndef AMPLC_PC236_H_INCLUDED +#define AMPLC_PC236_H_INCLUDED + +#include + +struct comedi_device; + +enum pc236_bustype { isa_bustype, pci_bustype }; + +struct pc236_board { + const char *name; + enum pc236_bustype bustype; + void (*intr_update_cb)(struct comedi_device *dev, bool enable); + bool (*intr_chk_clr_cb)(struct comedi_device *dev); +}; + +struct pc236_private { + unsigned long lcr_iobase; /* PLX PCI9052 config registers in PCIBAR1 */ + bool enable_irq; +}; + +int amplc_pc236_common_attach(struct comedi_device *dev, unsigned long iobase, + unsigned int irq, unsigned long req_irq_flags); + +#endif diff --git a/drivers/staging/comedi/drivers/amplc_pc236_common.c b/drivers/staging/comedi/drivers/amplc_pc236_common.c new file mode 100644 index 000000000000..18e237cca419 --- /dev/null +++ b/drivers/staging/comedi/drivers/amplc_pc236_common.c @@ -0,0 +1,206 @@ +/* + * comedi/drivers/amplc_pc236_common.c + * Common support code for "amplc_pc236" and "amplc_pci236". + * + * Copyright (C) 2002-2014 MEV Ltd. + * + * 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. + */ + +#include +#include + +#include "../comedidev.h" + +#include "amplc_pc236.h" +#include "comedi_fc.h" +#include "8255.h" + +static void pc236_intr_update(struct comedi_device *dev, bool enable) +{ + const struct pc236_board *thisboard = comedi_board(dev); + struct pc236_private *devpriv = dev->private; + unsigned long flags; + + spin_lock_irqsave(&dev->spinlock, flags); + devpriv->enable_irq = enable; + if (thisboard->intr_update_cb) + thisboard->intr_update_cb(dev, enable); + spin_unlock_irqrestore(&dev->spinlock, flags); +} + +/* + * This function is called when an interrupt occurs to check whether + * the interrupt has been marked as enabled and was generated by the + * board. If so, the function prepares the hardware for the next + * interrupt. + * Returns false if the interrupt should be ignored. + */ +static bool pc236_intr_check(struct comedi_device *dev) +{ + const struct pc236_board *thisboard = comedi_board(dev); + struct pc236_private *devpriv = dev->private; + bool retval = false; + unsigned long flags; + + spin_lock_irqsave(&dev->spinlock, flags); + if (devpriv->enable_irq) { + if (thisboard->intr_chk_clr_cb) + retval = thisboard->intr_chk_clr_cb(dev); + else + retval = true; + } + spin_unlock_irqrestore(&dev->spinlock, flags); + + return retval; +} + +static int pc236_intr_insn(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_insn *insn, + unsigned int *data) +{ + data[1] = 0; + return insn->n; +} + +static int pc236_intr_cmdtest(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_cmd *cmd) +{ + int err = 0; + + /* Step 1 : check if triggers are trivially valid */ + + err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW); + err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT); + err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_FOLLOW); + err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT); + err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_NONE); + + if (err) + return 1; + + /* Step 2a : make sure trigger sources are unique */ + /* Step 2b : and mutually compatible */ + + if (err) + return 2; + + /* Step 3: check it arguments are trivially valid */ + + err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0); + err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len); + err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); + + if (err) + return 3; + + /* step 4: ignored */ + + if (err) + return 4; + + return 0; +} + +static int pc236_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) +{ + pc236_intr_update(dev, true); + + return 0; +} + +static int pc236_intr_cancel(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + pc236_intr_update(dev, false); + + return 0; +} + +static irqreturn_t pc236_interrupt(int irq, void *d) +{ + struct comedi_device *dev = d; + struct comedi_subdevice *s = dev->read_subdev; + bool handled; + + handled = pc236_intr_check(dev); + if (dev->attached && handled) { + comedi_buf_put(s, 0); + s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS; + comedi_event(dev, s); + } + return IRQ_RETVAL(handled); +} + +int amplc_pc236_common_attach(struct comedi_device *dev, unsigned long iobase, + unsigned int irq, unsigned long req_irq_flags) +{ + struct comedi_subdevice *s; + int ret; + + dev->iobase = iobase; + + ret = comedi_alloc_subdevices(dev, 2); + if (ret) + return ret; + + s = &dev->subdevices[0]; + /* digital i/o subdevice (8255) */ + ret = subdev_8255_init(dev, s, NULL, iobase); + if (ret) + return ret; + + s = &dev->subdevices[1]; + dev->read_subdev = s; + s->type = COMEDI_SUBD_UNUSED; + pc236_intr_update(dev, false); + if (irq) { + if (request_irq(irq, pc236_interrupt, req_irq_flags, + dev->board_name, dev) >= 0) { + dev->irq = irq; + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE | SDF_CMD_READ; + s->n_chan = 1; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = pc236_intr_insn; + s->len_chanlist = 1; + s->do_cmdtest = pc236_intr_cmdtest; + s->do_cmd = pc236_intr_cmd; + s->cancel = pc236_intr_cancel; + } + } + + return 0; +} +EXPORT_SYMBOL_GPL(amplc_pc236_common_attach); + +static int __init amplc_pc236_common_init(void) +{ + return 0; +} +module_init(amplc_pc236_common_init); + +static void __exit amplc_pc236_common_exit(void) +{ +} +module_exit(amplc_pc236_common_exit); + + +MODULE_AUTHOR("Comedi http://www.comedi.org"); +MODULE_DESCRIPTION("Comedi helper for amplc_pc236 and amplc_pci236"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/comedi/drivers/amplc_pci236.c b/drivers/staging/comedi/drivers/amplc_pci236.c new file mode 100644 index 000000000000..a7e7a6f13394 --- /dev/null +++ b/drivers/staging/comedi/drivers/amplc_pci236.c @@ -0,0 +1,162 @@ +/* + * comedi/drivers/amplc_pci236.c + * Driver for Amplicon PCI236 DIO boards. + * + * Copyright (C) 2002-2014 MEV Ltd. + * + * 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. + */ +/* + * Driver: amplc_pci236 + * Description: Amplicon PCI236 + * Author: Ian Abbott + * Devices: [Amplicon] PCI236 (amplc_pci236) + * Updated: Fri, 25 Jul 2014 15:32:40 +0000 + * Status: works + * + * Configuration options: + * none + * + * Manual configuration of PCI board (PCI236) is not supported; it is + * configured automatically. + * + * The PCI236 board has a single 8255 appearing as subdevice 0. + * + * Subdevice 1 pretends to be a digital input device, but it always + * returns 0 when read. However, if you run a command with + * scan_begin_src=TRIG_EXT, a rising edge on port C bit 3 acts as an + * external trigger, which can be used to wake up tasks. This is like + * the comedi_parport device. If no interrupt is connected, then + * subdevice 1 is unused. + */ + +#include +#include +#include + +#include "../comedidev.h" + +#include "amplc_pc236.h" +#include "plx9052.h" + +/* Disable, and clear, interrupts */ +#define PCI236_INTR_DISABLE (PLX9052_INTCSR_LI1POL | \ + PLX9052_INTCSR_LI2POL | \ + PLX9052_INTCSR_LI1SEL | \ + PLX9052_INTCSR_LI1CLRINT) + +/* Enable, and clear, interrupts */ +#define PCI236_INTR_ENABLE (PLX9052_INTCSR_LI1ENAB | \ + PLX9052_INTCSR_LI1POL | \ + PLX9052_INTCSR_LI2POL | \ + PLX9052_INTCSR_PCIENAB | \ + PLX9052_INTCSR_LI1SEL | \ + PLX9052_INTCSR_LI1CLRINT) + +static void pci236_intr_update_cb(struct comedi_device *dev, bool enable) +{ + struct pc236_private *devpriv = dev->private; + + /* this will also clear the "local interrupt 1" latch */ + outl(enable ? PCI236_INTR_ENABLE : PCI236_INTR_DISABLE, + devpriv->lcr_iobase + PLX9052_INTCSR); +} + +static bool pci236_intr_chk_clr_cb(struct comedi_device *dev) +{ + struct pc236_private *devpriv = dev->private; + + /* check if interrupt occurred */ + if (!(inl(devpriv->lcr_iobase + PLX9052_INTCSR) & + PLX9052_INTCSR_LI1STAT)) + return false; + /* clear the interrupt */ + pci236_intr_update_cb(dev, devpriv->enable_irq); + return true; +} + +static const struct pc236_board pc236_pci_board = { + .name = "pci236", + .intr_update_cb = pci236_intr_update_cb, + .intr_chk_clr_cb = pci236_intr_chk_clr_cb, + .bustype = pci_bustype, +}; + +static int pci236_auto_attach(struct comedi_device *dev, + unsigned long context_unused) +{ + struct pci_dev *pci_dev = comedi_to_pci_dev(dev); + struct pc236_private *devpriv; + unsigned long iobase; + int ret; + + dev_info(dev->class_dev, "amplc_pci236: attach pci %s\n", + pci_name(pci_dev)); + + devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); + if (!devpriv) + return -ENOMEM; + + dev->board_ptr = &pc236_pci_board; + dev->board_name = pc236_pci_board.name; + ret = comedi_pci_enable(dev); + if (ret) + return ret; + + devpriv->lcr_iobase = pci_resource_start(pci_dev, 1); + iobase = pci_resource_start(pci_dev, 2); + return amplc_pc236_common_attach(dev, iobase, pci_dev->irq, + IRQF_SHARED); +} + +static void pci236_detach(struct comedi_device *dev) +{ + if (dev->irq) + free_irq(dev->irq, dev); + comedi_pci_disable(dev); +} + +static struct comedi_driver amplc_pci236_driver = { + .driver_name = "amplc_pci236", + .module = THIS_MODULE, + .auto_attach = pci236_auto_attach, + .detach = pci236_detach, +}; + +static const struct pci_device_id pci236_pci_table[] = { + { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x0009) }, + { 0 } +}; + +MODULE_DEVICE_TABLE(pci, pci236_pci_table); + +static int amplc_pci236_pci_probe(struct pci_dev *dev, + const struct pci_device_id *id) +{ + return comedi_pci_auto_config(dev, &lc_pci236_driver, + id->driver_data); +} + +static struct pci_driver amplc_pci236_pci_driver = { + .name = "amplc_pci236", + .id_table = pci236_pci_table, + .probe = &lc_pci236_pci_probe, + .remove = comedi_pci_auto_unconfig, +}; + +module_comedi_pci_driver(amplc_pci236_driver, amplc_pci236_pci_driver); + +MODULE_AUTHOR("Comedi http://www.comedi.org"); +MODULE_DESCRIPTION("Comedi driver for Amplicon PCI236 DIO boards"); +MODULE_LICENSE("GPL"); -- cgit From f57f5848f9b313889702b018220ea256284dbddf Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Mon, 28 Jul 2014 13:09:35 +0100 Subject: staging: comedi: amplc_pc236, amplc_pci236: get rid of bustype The `bustype` member of `struct pc236_board` variables is initialized, but never used. Remove it along with the enumerated constants associated with it. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pc236.c | 1 - drivers/staging/comedi/drivers/amplc_pc236.h | 3 --- drivers/staging/comedi/drivers/amplc_pci236.c | 1 - 3 files changed, 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index b95b877e5ed3..875cc19cb969 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -65,7 +65,6 @@ static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it) static const struct pc236_board pc236_boards[] = { { .name = "pc36at", - .bustype = isa_bustype, }, }; diff --git a/drivers/staging/comedi/drivers/amplc_pc236.h b/drivers/staging/comedi/drivers/amplc_pc236.h index 37348f1d986f..91d6d9c065b5 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.h +++ b/drivers/staging/comedi/drivers/amplc_pc236.h @@ -25,11 +25,8 @@ struct comedi_device; -enum pc236_bustype { isa_bustype, pci_bustype }; - struct pc236_board { const char *name; - enum pc236_bustype bustype; void (*intr_update_cb)(struct comedi_device *dev, bool enable); bool (*intr_chk_clr_cb)(struct comedi_device *dev); }; diff --git a/drivers/staging/comedi/drivers/amplc_pci236.c b/drivers/staging/comedi/drivers/amplc_pci236.c index a7e7a6f13394..436aebaf7621 100644 --- a/drivers/staging/comedi/drivers/amplc_pci236.c +++ b/drivers/staging/comedi/drivers/amplc_pci236.c @@ -90,7 +90,6 @@ static const struct pc236_board pc236_pci_board = { .name = "pci236", .intr_update_cb = pci236_intr_update_cb, .intr_chk_clr_cb = pci236_intr_chk_clr_cb, - .bustype = pci_bustype, }; static int pci236_auto_attach(struct comedi_device *dev, -- cgit From 56bd1ac7089872e9f282a83ed73d8e8dba48f0b2 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:46 -0700 Subject: staging: comedi: ni_tio: tidy up ni_tio_read_sw_save_reg() Remove the need for some of the local variables. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index f9f632014511..6ed14dfa142a 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1266,9 +1266,7 @@ static unsigned int ni_tio_read_sw_save_reg(struct comedi_device *dev, { struct ni_gpct *counter = s->private; unsigned cidx = counter->counter_index; - unsigned int first_read; - unsigned int second_read; - unsigned int correct_read; + unsigned int val; ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), Gi_Save_Trace_Bit, 0); ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), @@ -1283,14 +1281,11 @@ static unsigned int ni_tio_read_sw_save_reg(struct comedi_device *dev, * will be correct since the count value will definitely have latched * by then. */ - first_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); - second_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); - if (first_read != second_read) - correct_read = read_register(counter, NITIO_SW_SAVE_REG(cidx)); - else - correct_read = first_read; - - return correct_read; + val = read_register(counter, NITIO_SW_SAVE_REG(cidx)); + if (val != read_register(counter, NITIO_SW_SAVE_REG(cidx))) + val = read_register(counter, NITIO_SW_SAVE_REG(cidx)); + + return val; } int ni_tio_insn_read(struct comedi_device *dev, -- cgit From ed40487163dd7cf0e2e9982e8cbb5427be1e1779 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:47 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Counting_Mode_Reg_Bits Convert this enum into defines and rename all the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 99 ++++++++++-------------- drivers/staging/comedi/drivers/ni_tio_internal.h | 56 +++++--------- 2 files changed, 64 insertions(+), 91 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 6ed14dfa142a..1baad07fa44b 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -116,59 +116,55 @@ TODO: #define NI_660X_LOGIC_LOW_GATE2_SEL 0x1f #define NI_660X_MAX_UP_DOWN_PIN 7 -static inline enum Gi_Counting_Mode_Reg_Bits -Gi_Alternate_Sync_Bit(enum ni_gpct_variant variant) +static inline unsigned GI_ALT_SYNC(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: default: return 0; case ni_gpct_variant_m_series: - return Gi_M_Series_Alternate_Sync_Bit; + return GI_M_ALT_SYNC; case ni_gpct_variant_660x: - return Gi_660x_Alternate_Sync_Bit; + return GI_660X_ALT_SYNC; } } -static inline enum Gi_Counting_Mode_Reg_Bits -Gi_Prescale_X2_Bit(enum ni_gpct_variant variant) +static inline unsigned GI_PRESCALE_X2(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: default: return 0; case ni_gpct_variant_m_series: - return Gi_M_Series_Prescale_X2_Bit; + return GI_M_PRESCALE_X2; case ni_gpct_variant_660x: - return Gi_660x_Prescale_X2_Bit; + return GI_660X_PRESCALE_X2; } } -static inline enum Gi_Counting_Mode_Reg_Bits -Gi_Prescale_X8_Bit(enum ni_gpct_variant variant) +static inline unsigned GI_PRESCALE_X8(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: default: return 0; case ni_gpct_variant_m_series: - return Gi_M_Series_Prescale_X8_Bit; + return GI_M_PRESCALE_X8; case ni_gpct_variant_660x: - return Gi_660x_Prescale_X8_Bit; + return GI_660X_PRESCALE_X8; } } -static inline enum Gi_Counting_Mode_Reg_Bits -Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant) +static inline unsigned GI_HW_ARM_SEL_MASK(enum ni_gpct_variant variant) { switch (variant) { case ni_gpct_variant_e_series: default: return 0; case ni_gpct_variant_m_series: - return Gi_M_Series_HW_Arm_Select_Mask; + return GI_M_HW_ARM_SEL_MASK; case ni_gpct_variant_660x: - return Gi_660x_HW_Arm_Select_Mask; + return GI_660X_HW_ARM_SEL_MASK; } } @@ -254,9 +250,9 @@ static unsigned ni_tio_clock_src_modifiers(const struct ni_gpct *counter) if (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & Gi_Source_Polarity_Bit) bits |= NI_GPCT_INVERT_CLOCK_SRC_BIT; - if (counting_mode_bits & Gi_Prescale_X2_Bit(counter_dev->variant)) + if (counting_mode_bits & GI_PRESCALE_X2(counter_dev->variant)) bits |= NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS; - if (counting_mode_bits & Gi_Prescale_X8_Bit(counter_dev->variant)) + if (counting_mode_bits & GI_PRESCALE_X8(counter_dev->variant)) bits |= NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS; return bits; } @@ -401,17 +397,18 @@ static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) unsigned cidx = counter->counter_index; const unsigned counting_mode_reg = NITIO_CNT_MODE_REG(cidx); static const uint64_t min_normal_sync_period_ps = 25000; + unsigned mode; uint64_t clock_period_ps; if (ni_tio_counting_mode_registers_present(counter_dev) == 0) return; - switch (ni_tio_get_soft_copy(counter, counting_mode_reg) & - Gi_Counting_Mode_Mask) { - case Gi_Counting_Mode_QuadratureX1_Bits: - case Gi_Counting_Mode_QuadratureX2_Bits: - case Gi_Counting_Mode_QuadratureX4_Bits: - case Gi_Counting_Mode_Sync_Source_Bits: + mode = ni_tio_get_soft_copy(counter, counting_mode_reg); + switch (mode & GI_CNT_MODE_MASK) { + case GI_CNT_MODE_QUADX1: + case GI_CNT_MODE_QUADX2: + case GI_CNT_MODE_QUADX4: + case GI_CNT_MODE_SYNC_SRC: force_alt_sync = 1; break; default: @@ -429,11 +426,11 @@ static void ni_tio_set_sync_mode(struct ni_gpct *counter, int force_alt_sync) if (force_alt_sync || (clock_period_ps && clock_period_ps < min_normal_sync_period_ps)) { ni_tio_set_bits(counter, counting_mode_reg, - Gi_Alternate_Sync_Bit(counter_dev->variant), - Gi_Alternate_Sync_Bit(counter_dev->variant)); + GI_ALT_SYNC(counter_dev->variant), + GI_ALT_SYNC(counter_dev->variant)); } else { ni_tio_set_bits(counter, counting_mode_reg, - Gi_Alternate_Sync_Bit(counter_dev->variant), + GI_ALT_SYNC(counter_dev->variant), 0x0); } } @@ -472,19 +469,15 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) mode_reg_mask, mode_reg_values); if (ni_tio_counting_mode_registers_present(counter_dev)) { - unsigned counting_mode_bits = 0; - - counting_mode_bits |= - (mode >> NI_GPCT_COUNTING_MODE_SHIFT) & - Gi_Counting_Mode_Mask; - counting_mode_bits |= - ((mode >> NI_GPCT_INDEX_PHASE_BITSHIFT) << - Gi_Index_Phase_Bitshift) & Gi_Index_Phase_Mask; + unsigned bits = 0; + + bits |= GI_CNT_MODE(mode >> NI_GPCT_COUNTING_MODE_SHIFT); + bits |= GI_INDEX_PHASE((mode >> NI_GPCT_INDEX_PHASE_BITSHIFT)); if (mode & NI_GPCT_INDEX_ENABLE_BIT) - counting_mode_bits |= Gi_Index_Mode_Bit; + bits |= GI_INDEX_MODE; ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), - Gi_Counting_Mode_Mask | Gi_Index_Phase_Mask | - Gi_Index_Mode_Bit, counting_mode_bits); + GI_CNT_MODE_MASK | GI_INDEX_PHASE_MASK | + GI_INDEX_MODE, bits); ni_tio_set_sync_mode(counter, 0); } @@ -522,7 +515,10 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) break; } if (ni_tio_counting_mode_registers_present(counter_dev)) { - unsigned counting_mode_bits = 0; + unsigned bits = 0; + unsigned sel_mask; + + sel_mask = GI_HW_ARM_SEL_MASK(counter_dev->variant); switch (start_trigger) { case NI_GPCT_ARM_IMMEDIATE: @@ -535,25 +531,16 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) * bits so we can figure out what * select later */ - unsigned hw_arm_select_bits = - (start_trigger << - Gi_HW_Arm_Select_Shift) & - Gi_HW_Arm_Select_Mask - (counter_dev->variant); - - counting_mode_bits |= - Gi_HW_Arm_Enable_Bit | - hw_arm_select_bits; + bits |= GI_HW_ARM_ENA | + (GI_HW_ARM_SEL(start_trigger) & + sel_mask); } else { return -EINVAL; } break; } ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), - Gi_HW_Arm_Select_Mask - (counter_dev->variant) | - Gi_HW_Arm_Enable_Bit, - counting_mode_bits); + GI_HW_ARM_ENA | sel_mask, bits); } } else { command_transient_bits |= Gi_Disarm_Bit; @@ -735,17 +722,17 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, case NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS: break; case NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS: - bits |= Gi_Prescale_X2_Bit(counter_dev->variant); + bits |= GI_PRESCALE_X2(counter_dev->variant); break; case NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS: - bits |= Gi_Prescale_X8_Bit(counter_dev->variant); + bits |= GI_PRESCALE_X8(counter_dev->variant); break; default: return -EINVAL; } ni_tio_set_bits(counter, NITIO_CNT_MODE_REG(cidx), - Gi_Prescale_X2_Bit(counter_dev->variant) | - Gi_Prescale_X8_Bit(counter_dev->variant), bits); + GI_PRESCALE_X2(counter_dev->variant) | + GI_PRESCALE_X8(counter_dev->variant), bits); } counter->clock_period_ps = period_ns * 1000; ni_tio_set_sync_mode(counter, 0); diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 3c53958bbbbf..03aa8956c29b 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -30,6 +30,27 @@ #define NITIO_LOADB_REG(x) (NITIO_G0_LOADB + (x)) #define NITIO_INPUT_SEL_REG(x) (NITIO_G0_INPUT_SEL + (x)) #define NITIO_CNT_MODE_REG(x) (NITIO_G0_CNT_MODE + (x)) +#define GI_CNT_MODE(x) (((x) & 0x7) << 0) +#define GI_CNT_MODE_NORMAL GI_CNT_MODE(0) +#define GI_CNT_MODE_QUADX1 GI_CNT_MODE(1) +#define GI_CNT_MODE_QUADX2 GI_CNT_MODE(2) +#define GI_CNT_MODE_QUADX4 GI_CNT_MODE(3) +#define GI_CNT_MODE_TWO_PULSE GI_CNT_MODE(4) +#define GI_CNT_MODE_SYNC_SRC GI_CNT_MODE(6) +#define GI_CNT_MODE_MASK (7 << 0) +#define GI_INDEX_MODE (1 << 4) +#define GI_INDEX_PHASE(x) (((x) & 0x3) << 5) +#define GI_INDEX_PHASE_MASK (3 << 5) +#define GI_HW_ARM_ENA (1 << 7) +#define GI_HW_ARM_SEL(x) ((x) << 8) +#define GI_660X_HW_ARM_SEL_MASK (0x7 << 8) +#define GI_M_HW_ARM_SEL_MASK (0x1f << 8) +#define GI_660X_PRESCALE_X8 (1 << 12) +#define GI_M_PRESCALE_X8 (1 << 13) +#define GI_660X_ALT_SYNC (1 << 13) +#define GI_M_ALT_SYNC (1 << 14) +#define GI_660X_PRESCALE_X2 (1 << 14) +#define GI_M_PRESCALE_X2 (1 << 15) #define NITIO_GATE2_REG(x) (NITIO_G0_GATE2 + (x)) #define NITIO_SHARED_STATUS_REG(x) (NITIO_G01_STATUS + ((x) / 2)) #define NITIO_RESET_REG(x) (NITIO_G01_RESET + ((x) / 2)) @@ -68,41 +89,6 @@ enum Gi_Command_Reg_Bits { Gi_Disarm_Copy_Bit = 0x8000 }; -#define Gi_Index_Phase_Bitshift 5 -#define Gi_HW_Arm_Select_Shift 8 -enum Gi_Counting_Mode_Reg_Bits { - Gi_Counting_Mode_Mask = 0x7, - Gi_Counting_Mode_Normal_Bits = 0x0, - Gi_Counting_Mode_QuadratureX1_Bits = 0x1, - Gi_Counting_Mode_QuadratureX2_Bits = 0x2, - Gi_Counting_Mode_QuadratureX4_Bits = 0x3, - Gi_Counting_Mode_Two_Pulse_Bits = 0x4, - Gi_Counting_Mode_Sync_Source_Bits = 0x6, - Gi_Index_Mode_Bit = 0x10, - Gi_Index_Phase_Mask = 0x3 << Gi_Index_Phase_Bitshift, - Gi_Index_Phase_LowA_LowB = 0x0 << Gi_Index_Phase_Bitshift, - Gi_Index_Phase_LowA_HighB = 0x1 << Gi_Index_Phase_Bitshift, - Gi_Index_Phase_HighA_LowB = 0x2 << Gi_Index_Phase_Bitshift, - Gi_Index_Phase_HighA_HighB = 0x3 << Gi_Index_Phase_Bitshift, - /* from m-series example code, not documented in 660x register level - * manual */ - Gi_HW_Arm_Enable_Bit = 0x80, - /* from m-series example code, not documented in 660x register level - * manual */ - Gi_660x_HW_Arm_Select_Mask = 0x7 << Gi_HW_Arm_Select_Shift, - Gi_660x_Prescale_X8_Bit = 0x1000, - Gi_M_Series_Prescale_X8_Bit = 0x2000, - Gi_M_Series_HW_Arm_Select_Mask = 0x1f << Gi_HW_Arm_Select_Shift, - /* must be set for clocks over 40MHz, which includes synchronous - * counting and quadrature modes */ - Gi_660x_Alternate_Sync_Bit = 0x2000, - Gi_M_Series_Alternate_Sync_Bit = 0x4000, - /* from m-series example code, not documented in 660x register level - * manual */ - Gi_660x_Prescale_X2_Bit = 0x4000, - Gi_M_Series_Prescale_X2_Bit = 0x8000, -}; - #define Gi_Source_Select_Shift 2 #define Gi_Gate_Select_Shift 7 enum Gi_Input_Select_Bits { -- cgit From b9a09764eeb75c3b38f99d5d4154fcb68155e65a Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:48 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Command_Reg_Bits Convert this enum into defines and rename all the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 20 ++++++------- drivers/staging/comedi/drivers/ni_tio_internal.h | 37 ++++++++++-------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 2 +- 3 files changed, 25 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 1baad07fa44b..8df8468b4673 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -481,10 +481,8 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) ni_tio_set_sync_mode(counter, 0); } - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - Gi_Up_Down_Mask, - (mode >> NI_GPCT_COUNTING_DIRECTION_SHIFT) << - Gi_Up_Down_Shift); + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), GI_CNT_DIR_MASK, + GI_CNT_DIR(mode >> NI_GPCT_COUNTING_DIRECTION_SHIFT)); if (mode & NI_GPCT_OR_GATE_BIT) input_select_bits |= Gi_Or_Gate_Bit; @@ -506,10 +504,10 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) if (arm) { switch (start_trigger) { case NI_GPCT_ARM_IMMEDIATE: - command_transient_bits |= Gi_Arm_Bit; + command_transient_bits |= GI_ARM; break; case NI_GPCT_ARM_PAIRED_IMMEDIATE: - command_transient_bits |= Gi_Arm_Bit | Gi_Arm_Copy_Bit; + command_transient_bits |= GI_ARM | GI_ARM_COPY; break; default: break; @@ -543,7 +541,7 @@ int ni_tio_arm(struct ni_gpct *counter, int arm, unsigned start_trigger) GI_HW_ARM_ENA | sel_mask, bits); } } else { - command_transient_bits |= Gi_Disarm_Bit; + command_transient_bits |= GI_DISARM; } ni_tio_set_bits_transient(counter, NITIO_CMD_REG(cidx), 0, 0, command_transient_bits); @@ -1255,9 +1253,9 @@ static unsigned int ni_tio_read_sw_save_reg(struct comedi_device *dev, unsigned cidx = counter->counter_index; unsigned int val; - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), Gi_Save_Trace_Bit, 0); + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), GI_SAVE_TRACE, 0); ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - Gi_Save_Trace_Bit, Gi_Save_Trace_Bit); + GI_SAVE_TRACE, GI_SAVE_TRACE); /* * The count doesn't get latched until the next clock edge, so it is @@ -1341,7 +1339,7 @@ int ni_tio_insn_write(struct comedi_device *dev, load_reg = ni_tio_next_load_register(counter); write_register(counter, data[0], load_reg); ni_tio_set_bits_transient(counter, NITIO_CMD_REG(cidx), - 0, 0, Gi_Load_Bit); + 0, 0, GI_LOAD); /* restore load reg */ write_register(counter, counter_dev->regs[load_reg], load_reg); break; @@ -1372,7 +1370,7 @@ void ni_tio_init_counter(struct ni_gpct *counter) write_register(counter, 0x0, NITIO_AUTO_INC_REG(cidx)); ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), - ~0, Gi_Synchronize_Gate_Bit); + ~0, GI_SYNC_GATE); ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), ~0, 0); diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 03aa8956c29b..55f1bfc3cff8 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -23,6 +23,21 @@ #define NITIO_AUTO_INC_REG(x) (NITIO_G0_AUTO_INC + (x)) #define NITIO_CMD_REG(x) (NITIO_G0_CMD + (x)) +#define GI_ARM (1 << 0) +#define GI_SAVE_TRACE (1 << 1) +#define GI_LOAD (1 << 2) +#define GI_DISARM (1 << 4) +#define GI_CNT_DIR(x) (((x) & 0x3) << 5) +#define GI_CNT_DIR_MASK (3 << 5) +#define GI_WRITE_SWITCH (1 << 7) +#define GI_SYNC_GATE (1 << 8) +#define GI_LITTLE_BIG_ENDIAN (1 << 9) +#define GI_BANK_SWITCH_START (1 << 10) +#define GI_BANK_SWITCH_MODE (1 << 11) +#define GI_BANK_SWITCH_ENABLE (1 << 12) +#define GI_ARM_COPY (1 << 13) +#define GI_SAVE_TRACE_COPY (1 << 14) +#define GI_DISARM_COPY (1 << 15) #define NITIO_HW_SAVE_REG(x) (NITIO_G0_HW_SAVE + (x)) #define NITIO_SW_SAVE_REG(x) (NITIO_G0_SW_SAVE + (x)) #define NITIO_MODE_REG(x) (NITIO_G0_MODE + (x)) @@ -67,28 +82,6 @@ enum Gi_Auto_Increment_Reg_Bits { Gi_Auto_Increment_Mask = 0xff }; -#define Gi_Up_Down_Shift 5 -enum Gi_Command_Reg_Bits { - Gi_Arm_Bit = 0x1, - Gi_Save_Trace_Bit = 0x2, - Gi_Load_Bit = 0x4, - Gi_Disarm_Bit = 0x10, - Gi_Up_Down_Mask = 0x3 << Gi_Up_Down_Shift, - Gi_Always_Down_Bits = 0x0 << Gi_Up_Down_Shift, - Gi_Always_Up_Bits = 0x1 << Gi_Up_Down_Shift, - Gi_Up_Down_Hardware_IO_Bits = 0x2 << Gi_Up_Down_Shift, - Gi_Up_Down_Hardware_Gate_Bits = 0x3 << Gi_Up_Down_Shift, - Gi_Write_Switch_Bit = 0x80, - Gi_Synchronize_Gate_Bit = 0x100, - Gi_Little_Big_Endian_Bit = 0x200, - Gi_Bank_Switch_Start_Bit = 0x400, - Gi_Bank_Switch_Mode_Bit = 0x800, - Gi_Bank_Switch_Enable_Bit = 0x1000, - Gi_Arm_Copy_Bit = 0x2000, - Gi_Save_Trace_Copy_Bit = 0x4000, - Gi_Disarm_Copy_Bit = 0x8000 -}; - #define Gi_Source_Select_Shift 2 #define Gi_Gate_Select_Shift 7 enum Gi_Input_Select_Bits { diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index f66b504811bf..8ea0debd58d4 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -139,7 +139,7 @@ static int ni_tio_input_cmd(struct comedi_subdevice *s) BUG(); break; } - ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), Gi_Save_Trace_Bit, 0); + ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), GI_SAVE_TRACE, 0); ni_tio_configure_dma(counter, 1, 1); switch (cmd->start_src) { case TRIG_NOW: -- cgit From 12b19cf523e08155cc188fb5f4385b5225926cfa Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:49 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Auto_Increment_Reg_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 55f1bfc3cff8..4c19149b2701 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -22,6 +22,7 @@ #include "ni_tio.h" #define NITIO_AUTO_INC_REG(x) (NITIO_G0_AUTO_INC + (x)) +#define GI_AUTO_INC_MASK 0xff #define NITIO_CMD_REG(x) (NITIO_G0_CMD + (x)) #define GI_ARM (1 << 0) #define GI_SAVE_TRACE (1 << 1) @@ -78,10 +79,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gi_Auto_Increment_Reg_Bits { - Gi_Auto_Increment_Mask = 0xff -}; - #define Gi_Source_Select_Shift 2 #define Gi_Gate_Select_Shift 7 enum Gi_Input_Select_Bits { -- cgit From c2c6c288f9bfa898b86c9c107af4227e022e18f1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:50 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Input_Select_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 86 +++++++++++------------- drivers/staging/comedi/drivers/ni_tio_internal.h | 25 ++++--- drivers/staging/comedi/drivers/ni_tiocmd.c | 6 +- 3 files changed, 53 insertions(+), 64 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 8df8468b4673..bd6a21ea2ae4 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -51,7 +51,7 @@ TODO: /* * clock sources for ni e and m series boards, - * get bits with Gi_Source_Select_Bits() + * get bits with GI_SRC_SEL() */ #define NI_M_TIMEBASE_1_CLK 0x0 /* 20MHz */ #define NI_M_PFI_CLK(x) (((x) < 10) ? (1 + (x)) : (0xb + (x))) @@ -69,7 +69,7 @@ TODO: /* * clock sources for ni_660x boards, - * get bits with Gi_Source_Select_Bits() + * get bits with GI_SRC_SEL() */ #define NI_660X_TIMEBASE_1_CLK 0x0 /* 20MHz */ #define NI_660X_SRC_PIN_I_CLK 0x1 @@ -168,16 +168,6 @@ static inline unsigned GI_HW_ARM_SEL_MASK(enum ni_gpct_variant variant) } } -static inline unsigned Gi_Source_Select_Bits(unsigned source) -{ - return (source << Gi_Source_Select_Shift) & Gi_Source_Select_Mask; -} - -static inline unsigned Gi_Gate_Select_Bits(unsigned gate_select) -{ - return (gate_select << Gi_Gate_Select_Shift) & Gi_Gate_Select_Mask; -} - static int ni_tio_has_gate2_registers(const struct ni_gpct_device *counter_dev) { switch (counter_dev->variant) { @@ -248,7 +238,7 @@ static unsigned ni_tio_clock_src_modifiers(const struct ni_gpct *counter) unsigned bits = 0; if (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Polarity_Bit) + GI_SRC_POL_INVERT) bits |= NI_GPCT_INVERT_CLOCK_SRC_BIT; if (counting_mode_bits & GI_PRESCALE_X2(counter_dev->variant)) bits |= NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS; @@ -263,12 +253,13 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) unsigned cidx = counter->counter_index; const unsigned second_gate_reg = NITIO_GATE2_REG(cidx); unsigned clock_source = 0; + unsigned src; unsigned i; - const unsigned input_select = - (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; - switch (input_select) { + src = GI_BITS_TO_SRC(ni_tio_get_soft_copy(counter, + NITIO_INPUT_SEL_REG(cidx))); + + switch (src) { case NI_M_TIMEBASE_1_CLK: clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; break; @@ -301,7 +292,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) break; default: for (i = 0; i <= NI_M_MAX_RTSI_CHAN; ++i) { - if (input_select == NI_M_RTSI_CLK(i)) { + if (src == NI_M_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } @@ -309,7 +300,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) if (i <= NI_M_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { - if (input_select == NI_M_PFI_CLK(i)) { + if (src == NI_M_PFI_CLK(i)) { clock_source = NI_GPCT_PFI_CLOCK_SRC_BITS(i); break; } @@ -327,12 +318,13 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) { unsigned clock_source = 0; unsigned cidx = counter->counter_index; - const unsigned input_select = - (ni_tio_get_soft_copy(counter, NITIO_INPUT_SEL_REG(cidx)) & - Gi_Source_Select_Mask) >> Gi_Source_Select_Shift; + unsigned src; unsigned i; - switch (input_select) { + src = GI_BITS_TO_SRC(ni_tio_get_soft_copy(counter, + NITIO_INPUT_SEL_REG(cidx))); + + switch (src) { case NI_660X_TIMEBASE_1_CLK: clock_source = NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS; break; @@ -356,7 +348,7 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) break; default: for (i = 0; i <= NI_660X_MAX_RTSI_CHAN; ++i) { - if (input_select == NI_660X_RTSI_CLK(i)) { + if (src == NI_660X_RTSI_CLK(i)) { clock_source = NI_GPCT_RTSI_CLOCK_SRC_BITS(i); break; } @@ -364,7 +356,7 @@ static unsigned ni_660x_clock_src_select(const struct ni_gpct *counter) if (i <= NI_660X_MAX_RTSI_CHAN) break; for (i = 0; i <= NI_660X_MAX_SRC_PIN; ++i) { - if (input_select == NI_660X_SRC_PIN_CLK(i)) { + if (src == NI_660X_SRC_PIN_CLK(i)) { clock_source = NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(i); break; @@ -458,7 +450,7 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) mode_reg_values |= Gi_Reload_Source_Switching_Bit; break; case NI_GPCT_RELOAD_SOURCE_GATE_SELECT_BITS: - input_select_bits |= Gi_Gate_Select_Load_Source_Bit; + input_select_bits |= GI_GATE_SEL_LOAD_SRC; mode_reg_mask |= Gi_Gating_Mode_Mask; mode_reg_values |= Gi_Level_Gating_Bits; break; @@ -485,12 +477,12 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) GI_CNT_DIR(mode >> NI_GPCT_COUNTING_DIRECTION_SHIFT)); if (mode & NI_GPCT_OR_GATE_BIT) - input_select_bits |= Gi_Or_Gate_Bit; + input_select_bits |= GI_OR_GATE; if (mode & NI_GPCT_INVERT_OUTPUT_BIT) - input_select_bits |= Gi_Output_Polarity_Bit; + input_select_bits |= GI_OUTPUT_POL_INVERT; ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Gate_Select_Load_Source_Bit | Gi_Or_Gate_Bit | - Gi_Output_Polarity_Bit, input_select_bits); + GI_GATE_SEL_LOAD_SRC | GI_OR_GATE | + GI_OUTPUT_POL_INVERT, input_select_bits); return 0; } @@ -598,7 +590,7 @@ static unsigned ni_660x_clk_src(unsigned int clock_source) BUG(); break; } - return Gi_Source_Select_Bits(ni_660x_clock); + return GI_SRC_SEL(ni_660x_clock); } static unsigned ni_m_clk_src(unsigned int clock_source) @@ -658,7 +650,7 @@ static unsigned ni_m_clk_src(unsigned int clock_source) ni_m_series_clock = 0; break; } - return Gi_Source_Select_Bits(ni_m_series_clock); + return GI_SRC_SEL(ni_m_series_clock); }; static void ni_tio_set_source_subselect(struct ni_gpct *counter, @@ -709,9 +701,9 @@ static int ni_tio_set_clock_src(struct ni_gpct *counter, break; } if (clock_source & NI_GPCT_INVERT_CLOCK_SRC_BIT) - bits |= Gi_Source_Polarity_Bit; + bits |= GI_SRC_POL_INVERT; ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Source_Select_Mask | Gi_Source_Polarity_Bit, bits); + GI_SRC_SEL_MASK | GI_SRC_POL_INVERT, bits); ni_tio_set_source_subselect(counter, clock_source); if (ni_tio_counting_mode_registers_present(counter_dev)) { @@ -786,7 +778,7 @@ static int ni_660x_set_gate(struct ni_gpct *counter, unsigned int gate_source) return -EINVAL; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Gate_Select_Mask, Gi_Gate_Select_Bits(gate_sel)); + GI_GATE_SEL_MASK, GI_GATE_SEL(gate_sel)); return 0; } @@ -828,7 +820,7 @@ static int ni_m_set_gate(struct ni_gpct *counter, unsigned int gate_source) return -EINVAL; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Gate_Select_Mask, Gi_Gate_Select_Bits(gate_sel)); + GI_GATE_SEL_MASK, GI_GATE_SEL(gate_sel)); return 0; } @@ -1136,7 +1128,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, unsigned cidx = counter->counter_index; unsigned mode = ni_tio_get_soft_copy(counter, NITIO_MODE_REG(cidx)); unsigned gate2_reg = NITIO_GATE2_REG(cidx); - unsigned gate_sel; + unsigned gate; switch (gate_index) { case 0: @@ -1145,19 +1137,17 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, return 0; } - gate_sel = ni_tio_get_soft_copy(counter, - NITIO_INPUT_SEL_REG(cidx)); - gate_sel &= Gi_Gate_Select_Mask; - gate_sel >>= Gi_Gate_Select_Shift; + gate = GI_BITS_TO_GATE(ni_tio_get_soft_copy(counter, + NITIO_INPUT_SEL_REG(cidx))); switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - *gate_source = ni_m_gate_to_generic_gate(gate_sel); + *gate_source = ni_m_gate_to_generic_gate(gate); break; case ni_gpct_variant_660x: - *gate_source = ni_660x_gate_to_generic_gate(gate_sel); + *gate_source = ni_660x_gate_to_generic_gate(gate); break; } if (mode & Gi_Gate_Polarity_Bit) @@ -1172,18 +1162,18 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, return 0; } - gate_sel = counter_dev->regs[gate2_reg]; - gate_sel &= Gi_Second_Gate_Select_Mask; - gate_sel >>= Gi_Second_Gate_Select_Shift; + gate = counter_dev->regs[gate2_reg]; + gate &= Gi_Second_Gate_Select_Mask; + gate >>= Gi_Second_Gate_Select_Shift; switch (counter_dev->variant) { case ni_gpct_variant_e_series: case ni_gpct_variant_m_series: default: - *gate_source = ni_m_gate2_to_generic_gate(gate_sel); + *gate_source = ni_m_gate2_to_generic_gate(gate); break; case ni_gpct_variant_660x: - *gate_source = ni_660x_gate2_to_generic_gate(gate_sel); + *gate_source = ni_660x_gate2_to_generic_gate(gate); break; } if (counter_dev->regs[gate2_reg] & Gi_Second_Gate_Polarity_Bit) diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 4c19149b2701..d55978386e34 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -45,6 +45,18 @@ #define NITIO_LOADA_REG(x) (NITIO_G0_LOADA + (x)) #define NITIO_LOADB_REG(x) (NITIO_G0_LOADB + (x)) #define NITIO_INPUT_SEL_REG(x) (NITIO_G0_INPUT_SEL + (x)) +#define GI_READ_ACKS_IRQ (1 << 0) +#define GI_WRITE_ACKS_IRQ (1 << 1) +#define GI_BITS_TO_SRC(x) (((x) >> 2) & 0x1f) +#define GI_SRC_SEL(x) (((x) & 0x1f) << 2) +#define GI_SRC_SEL_MASK (0x1f << 2) +#define GI_BITS_TO_GATE(x) (((x) >> 7) & 0x1f) +#define GI_GATE_SEL(x) (((x) & 0x1f) << 7) +#define GI_GATE_SEL_MASK (0x1f << 7) +#define GI_GATE_SEL_LOAD_SRC (1 << 12) +#define GI_OR_GATE (1 << 13) +#define GI_OUTPUT_POL_INVERT (1 << 14) +#define GI_SRC_POL_INVERT (1 << 15) #define NITIO_CNT_MODE_REG(x) (NITIO_G0_CNT_MODE + (x)) #define GI_CNT_MODE(x) (((x) & 0x7) << 0) #define GI_CNT_MODE_NORMAL GI_CNT_MODE(0) @@ -79,19 +91,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -#define Gi_Source_Select_Shift 2 -#define Gi_Gate_Select_Shift 7 -enum Gi_Input_Select_Bits { - Gi_Read_Acknowledges_Irq = 0x1, /* not present on 660x */ - Gi_Write_Acknowledges_Irq = 0x2, /* not present on 660x */ - Gi_Source_Select_Mask = 0x7c, - Gi_Gate_Select_Mask = 0x1f << Gi_Gate_Select_Shift, - Gi_Gate_Select_Load_Source_Bit = 0x1000, - Gi_Or_Gate_Bit = 0x2000, - Gi_Output_Polarity_Bit = 0x4000, /* set to invert */ - Gi_Source_Polarity_Bit = 0x8000 /* set to invert */ -}; - enum Gi_Mode_Bits { Gi_Gating_Mode_Mask = 0x3, Gi_Gating_Disabled_Bits = 0x0, diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 8ea0debd58d4..789d61f2a732 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -58,12 +58,12 @@ static void ni_tio_configure_dma(struct ni_gpct *counter, short enable, if (enable) { if (read_not_write) - input_select_bits |= Gi_Read_Acknowledges_Irq; + input_select_bits |= GI_READ_ACKS_IRQ; else - input_select_bits |= Gi_Write_Acknowledges_Irq; + input_select_bits |= GI_WRITE_ACKS_IRQ; } ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - Gi_Read_Acknowledges_Irq | Gi_Write_Acknowledges_Irq, + GI_READ_ACKS_IRQ | GI_WRITE_ACKS_IRQ, input_select_bits); switch (counter_dev->variant) { case ni_gpct_variant_e_series: -- cgit From 36d80f4a5460cae2e33b15568e572426ff976c70 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:51 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Mode_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 30 ++++++------ drivers/staging/comedi/drivers/ni_tio_internal.h | 62 +++++++++++------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 2 +- 3 files changed, 45 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index bd6a21ea2ae4..7a37d2b4fff3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -441,18 +441,18 @@ static int ni_tio_set_counter_mode(struct ni_gpct *counter, unsigned mode) NI_GPCT_HARDWARE_DISARM_MASK | NI_GPCT_LOADING_ON_TC_BIT | NI_GPCT_LOADING_ON_GATE_BIT | NI_GPCT_LOAD_B_SELECT_BIT; - mode_reg_mask = mode_reg_direct_mask | Gi_Reload_Source_Switching_Bit; + mode_reg_mask = mode_reg_direct_mask | GI_RELOAD_SRC_SWITCHING; mode_reg_values = mode & mode_reg_direct_mask; switch (mode & NI_GPCT_RELOAD_SOURCE_MASK) { case NI_GPCT_RELOAD_SOURCE_FIXED_BITS: break; case NI_GPCT_RELOAD_SOURCE_SWITCHING_BITS: - mode_reg_values |= Gi_Reload_Source_Switching_Bit; + mode_reg_values |= GI_RELOAD_SRC_SWITCHING; break; case NI_GPCT_RELOAD_SOURCE_GATE_SELECT_BITS: input_select_bits |= GI_GATE_SEL_LOAD_SRC; - mode_reg_mask |= Gi_Gating_Mode_Mask; - mode_reg_values |= Gi_Level_Gating_Bits; + mode_reg_mask |= GI_GATING_MODE_MASK; + mode_reg_values |= GI_LEVEL_GATING; break; default: break; @@ -907,18 +907,18 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, case 0: if (chan == NI_GPCT_DISABLED_GATE_SELECT) { ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), - Gi_Gating_Mode_Mask, - Gi_Gating_Disabled_Bits); + GI_GATING_MODE_MASK, + GI_GATING_DISABLED); return 0; } if (gate_source & CR_INVERT) - mode |= Gi_Gate_Polarity_Bit; + mode |= GI_GATE_POL_INVERT; if (gate_source & CR_EDGE) - mode |= Gi_Rising_Edge_Gating_Bits; + mode |= GI_RISING_EDGE_GATING; else - mode |= Gi_Level_Gating_Bits; + mode |= GI_LEVEL_GATING; ni_tio_set_bits(counter, NITIO_MODE_REG(cidx), - Gi_Gate_Polarity_Bit | Gi_Gating_Mode_Mask, + GI_GATE_POL_INVERT | GI_GATING_MODE_MASK, mode); switch (counter_dev->variant) { case ni_gpct_variant_e_series: @@ -1132,7 +1132,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, switch (gate_index) { case 0: - if ((mode & Gi_Gating_Mode_Mask) == Gi_Gating_Disabled_Bits) { + if ((mode & GI_GATING_MODE_MASK) == GI_GATING_DISABLED) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; } @@ -1150,13 +1150,13 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, *gate_source = ni_660x_gate_to_generic_gate(gate); break; } - if (mode & Gi_Gate_Polarity_Bit) + if (mode & GI_GATE_POL_INVERT) *gate_source |= CR_INVERT; - if ((mode & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) + if ((mode & GI_GATING_MODE_MASK) != GI_LEVEL_GATING) *gate_source |= CR_EDGE; break; case 1: - if ((mode & Gi_Gating_Mode_Mask) == Gi_Gating_Disabled_Bits || + if ((mode & GI_GATING_MODE_MASK) == GI_GATING_DISABLED || !(counter_dev->regs[gate2_reg] & Gi_Second_Gate_Mode_Bit)) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; @@ -1179,7 +1179,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, if (counter_dev->regs[gate2_reg] & Gi_Second_Gate_Polarity_Bit) *gate_source |= CR_INVERT; /* second gate can't have edge/level mode set independently */ - if ((mode & Gi_Gating_Mode_Mask) != Gi_Level_Gating_Bits) + if ((mode & GI_GATING_MODE_MASK) != GI_LEVEL_GATING) *gate_source |= CR_EDGE; break; default: diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index d55978386e34..fbbe30c81f46 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -42,6 +42,35 @@ #define NITIO_HW_SAVE_REG(x) (NITIO_G0_HW_SAVE + (x)) #define NITIO_SW_SAVE_REG(x) (NITIO_G0_SW_SAVE + (x)) #define NITIO_MODE_REG(x) (NITIO_G0_MODE + (x)) +#define GI_GATING_DISABLED (0 << 0) +#define GI_LEVEL_GATING (1 << 0) +#define GI_RISING_EDGE_GATING (2 << 0) +#define GI_FALLING_EDGE_GATING (3 << 0) +#define GI_GATING_MODE_MASK (3 << 0) +#define GI_GATE_ON_BOTH_EDGES (1 << 2) +#define GI_EDGE_GATE_STARTS_STOPS (0 << 3) +#define GI_EDGE_GATE_STOPS_STARTS (1 << 3) +#define GI_EDGE_GATE_STARTS (2 << 3) +#define GI_EDGE_GATE_NO_STARTS_OR_STOPS (3 << 3) +#define GI_EDGE_GATE_MODE_MASK (3 << 3) +#define GI_STOP_ON_GATE (0 << 5) +#define GI_STOP_ON_GATE_OR_TC (1 << 5) +#define GI_STOP_ON_GATE_OR_SECOND_TC (2 << 5) +#define GI_STOP_MODE_MASK (3 << 5) +#define GI_LOAD_SRC_SEL (1 << 7) +#define GI_OUTPUT_TC_PULSE (1 << 8) +#define GI_OUTPUT_TC_TOGGLE (2 << 8) +#define GI_OUTPUT_TC_OR_GATE_TOGGLE (3 << 8) +#define GI_OUTPUT_MODE_MASK (3 << 8) +#define GI_NO_HARDWARE_DISARM (0 << 10) +#define GI_DISARM_AT_TC (1 << 10) +#define GI_DISARM_AT_GATE (2 << 10) +#define GI_DISARM_AT_TC_OR_GATE (3 << 10) +#define GI_COUNTING_ONCE_MASK (3 << 10) +#define GI_LOADING_ON_TC (1 << 12) +#define GI_GATE_POL_INVERT (1 << 13) +#define GI_LOADING_ON_GATE (1 << 14) +#define GI_RELOAD_SRC_SWITCHING (1 << 15) #define NITIO_LOADA_REG(x) (NITIO_G0_LOADA + (x)) #define NITIO_LOADB_REG(x) (NITIO_G0_LOADB + (x)) #define NITIO_INPUT_SEL_REG(x) (NITIO_G0_INPUT_SEL + (x)) @@ -91,39 +120,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gi_Mode_Bits { - Gi_Gating_Mode_Mask = 0x3, - Gi_Gating_Disabled_Bits = 0x0, - Gi_Level_Gating_Bits = 0x1, - Gi_Rising_Edge_Gating_Bits = 0x2, - Gi_Falling_Edge_Gating_Bits = 0x3, - Gi_Gate_On_Both_Edges_Bit = 0x4, /* used in conjunction with - * rising edge gating mode */ - Gi_Trigger_Mode_for_Edge_Gate_Mask = 0x18, - Gi_Edge_Gate_Starts_Stops_Bits = 0x0, - Gi_Edge_Gate_Stops_Starts_Bits = 0x8, - Gi_Edge_Gate_Starts_Bits = 0x10, - Gi_Edge_Gate_No_Starts_or_Stops_Bits = 0x18, - Gi_Stop_Mode_Mask = 0x60, - Gi_Stop_on_Gate_Bits = 0x00, - Gi_Stop_on_Gate_or_TC_Bits = 0x20, - Gi_Stop_on_Gate_or_Second_TC_Bits = 0x40, - Gi_Load_Source_Select_Bit = 0x80, - Gi_Output_Mode_Mask = 0x300, - Gi_Output_TC_Pulse_Bits = 0x100, - Gi_Output_TC_Toggle_Bits = 0x200, - Gi_Output_TC_or_Gate_Toggle_Bits = 0x300, - Gi_Counting_Once_Mask = 0xc00, - Gi_No_Hardware_Disarm_Bits = 0x000, - Gi_Disarm_at_TC_Bits = 0x400, - Gi_Disarm_at_Gate_Bits = 0x800, - Gi_Disarm_at_TC_or_Gate_Bits = 0xc00, - Gi_Loading_On_TC_Bit = 0x1000, - Gi_Gate_Polarity_Bit = 0x2000, - Gi_Loading_On_Gate_Bit = 0x4000, - Gi_Reload_Source_Switching_Bit = 0x8000 -}; - #define Gi_Second_Gate_Select_Shift 7 /*FIXME: m-series has a second gate subselect bit */ /*FIXME: m-series second gate sources are undocumented (by NI)*/ diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 789d61f2a732..16dba7fe7797 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -403,7 +403,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, if (ack) write_register(counter, ack, NITIO_INT_ACK_REG(cidx)); if (ni_tio_get_soft_copy(counter, NITIO_MODE_REG(cidx)) & - Gi_Loading_On_Gate_Bit) { + GI_LOADING_ON_GATE) { if (gxx_status & Gi_Stale_Data_Bit(cidx)) { if (stale_data) *stale_data = 1; -- cgit From 4359dcf3564500e37e5da4eba7b4bd7f1847096b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:52 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Second_Gate_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 44 ++++++++++-------------- drivers/staging/comedi/drivers/ni_tio_internal.h | 23 ++++--------- 2 files changed, 25 insertions(+), 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 7a37d2b4fff3..15364128c91f 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -267,8 +267,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) clock_source = NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS; break; case NI_M_TIMEBASE_3_CLK: - if (counter_dev->regs[second_gate_reg] & - Gi_Source_Subselect_Bit) + if (counter_dev->regs[second_gate_reg] & GI_SRC_SUBSEL) clock_source = NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS; else @@ -278,8 +277,7 @@ static unsigned ni_m_series_clock_src_select(const struct ni_gpct *counter) clock_source = NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS; break; case NI_M_NEXT_GATE_CLK: - if (counter_dev->regs[second_gate_reg] & - Gi_Source_Subselect_Bit) + if (counter_dev->regs[second_gate_reg] & GI_SRC_SUBSEL) clock_source = NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS; else clock_source = NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS; @@ -666,12 +664,12 @@ static void ni_tio_set_source_subselect(struct ni_gpct *counter, /* Gi_Source_Subselect is zero */ case NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS: case NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS: - counter_dev->regs[second_gate_reg] &= ~Gi_Source_Subselect_Bit; + counter_dev->regs[second_gate_reg] &= ~GI_SRC_SUBSEL; break; /* Gi_Source_Subselect is one */ case NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS: case NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS: - counter_dev->regs[second_gate_reg] |= Gi_Source_Subselect_Bit; + counter_dev->regs[second_gate_reg] |= GI_SRC_SUBSEL; break; /* Gi_Source_Subselect doesn't matter */ default: @@ -863,9 +861,9 @@ static int ni_660x_set_gate2(struct ni_gpct *counter, unsigned int gate_source) break; return -EINVAL; } - counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Mode_Bit; - counter_dev->regs[gate2_reg] &= ~Gi_Second_Gate_Select_Mask; - counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Select_Bits(gate2_sel); + counter_dev->regs[gate2_reg] |= GI_GATE2_MODE; + counter_dev->regs[gate2_reg] &= ~GI_GATE2_SEL_MASK; + counter_dev->regs[gate2_reg] |= GI_GATE2_SEL(gate2_sel); write_register(counter, counter_dev->regs[gate2_reg], gate2_reg); return 0; } @@ -887,9 +885,9 @@ static int ni_m_set_gate2(struct ni_gpct *counter, unsigned int gate_source) gate2_sel = chan & 0x1f; break; } - counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Mode_Bit; - counter_dev->regs[gate2_reg] &= ~Gi_Second_Gate_Select_Mask; - counter_dev->regs[gate2_reg] |= Gi_Second_Gate_Select_Bits(gate2_sel); + counter_dev->regs[gate2_reg] |= GI_GATE2_MODE; + counter_dev->regs[gate2_reg] &= ~GI_GATE2_SEL_MASK; + counter_dev->regs[gate2_reg] |= GI_GATE2_SEL(gate2_sel); write_register(counter, counter_dev->regs[gate2_reg], gate2_reg); return 0; } @@ -934,19 +932,15 @@ int ni_tio_set_gate_src(struct ni_gpct *counter, unsigned gate_index, return -EINVAL; if (chan == NI_GPCT_DISABLED_GATE_SELECT) { - counter_dev->regs[gate2_reg] &= - ~Gi_Second_Gate_Mode_Bit; + counter_dev->regs[gate2_reg] &= ~GI_GATE2_MODE; write_register(counter, counter_dev->regs[gate2_reg], gate2_reg); return 0; } - if (gate_source & CR_INVERT) { - counter_dev->regs[gate2_reg] |= - Gi_Second_Gate_Polarity_Bit; - } else { - counter_dev->regs[gate2_reg] &= - ~Gi_Second_Gate_Polarity_Bit; - } + if (gate_source & CR_INVERT) + counter_dev->regs[gate2_reg] |= GI_GATE2_POL_INVERT; + else + counter_dev->regs[gate2_reg] &= ~GI_GATE2_POL_INVERT; switch (counter_dev->variant) { case ni_gpct_variant_m_series: return ni_m_set_gate2(counter, gate_source); @@ -1157,14 +1151,12 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, break; case 1: if ((mode & GI_GATING_MODE_MASK) == GI_GATING_DISABLED || - !(counter_dev->regs[gate2_reg] & Gi_Second_Gate_Mode_Bit)) { + !(counter_dev->regs[gate2_reg] & GI_GATE2_MODE)) { *gate_source = NI_GPCT_DISABLED_GATE_SELECT; return 0; } - gate = counter_dev->regs[gate2_reg]; - gate &= Gi_Second_Gate_Select_Mask; - gate >>= Gi_Second_Gate_Select_Shift; + gate = GI_BITS_TO_GATE2(counter_dev->regs[gate2_reg]); switch (counter_dev->variant) { case ni_gpct_variant_e_series: @@ -1176,7 +1168,7 @@ static int ni_tio_get_gate_src(struct ni_gpct *counter, unsigned gate_index, *gate_source = ni_660x_gate2_to_generic_gate(gate); break; } - if (counter_dev->regs[gate2_reg] & Gi_Second_Gate_Polarity_Bit) + if (counter_dev->regs[gate2_reg] & GI_GATE2_POL_INVERT) *gate_source |= CR_INVERT; /* second gate can't have edge/level mode set independently */ if ((mode & GI_GATING_MODE_MASK) != GI_LEVEL_GATING) diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index fbbe30c81f46..889bd3063c27 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -109,6 +109,13 @@ #define GI_660X_PRESCALE_X2 (1 << 14) #define GI_M_PRESCALE_X2 (1 << 15) #define NITIO_GATE2_REG(x) (NITIO_G0_GATE2 + (x)) +#define GI_GATE2_MODE (1 << 0) +#define GI_BITS_TO_GATE2(x) (((x) >> 7) & 0x1f) +#define GI_GATE2_SEL(x) (((x) & 0x1f) << 7) +#define GI_GATE2_SEL_MASK (0x1f << 7) +#define GI_GATE2_POL_INVERT (1 << 13) +#define GI_GATE2_SUBSEL (1 << 14) +#define GI_SRC_SUBSEL (1 << 15) #define NITIO_SHARED_STATUS_REG(x) (NITIO_G01_STATUS + ((x) / 2)) #define NITIO_RESET_REG(x) (NITIO_G01_RESET + ((x) / 2)) #define NITIO_STATUS1_REG(x) (NITIO_G01_STATUS1 + ((x) / 2)) @@ -120,22 +127,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -#define Gi_Second_Gate_Select_Shift 7 -/*FIXME: m-series has a second gate subselect bit */ -/*FIXME: m-series second gate sources are undocumented (by NI)*/ -enum Gi_Second_Gate_Bits { - Gi_Second_Gate_Mode_Bit = 0x1, - Gi_Second_Gate_Select_Mask = 0x1f << Gi_Second_Gate_Select_Shift, - Gi_Second_Gate_Polarity_Bit = 0x2000, - Gi_Second_Gate_Subselect_Bit = 0x4000, /* m-series only */ - Gi_Source_Subselect_Bit = 0x8000 /* m-series only */ -}; -static inline unsigned Gi_Second_Gate_Select_Bits(unsigned second_gate_select) -{ - return (second_gate_select << Gi_Second_Gate_Select_Shift) & - Gi_Second_Gate_Select_Mask; -} - enum Gxx_Status_Bits { G0_Save_Bit = 0x1, G1_Save_Bit = 0x2, -- cgit From 24a675c5130198fcf354325f108b4a62aa7575a5 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:53 -0700 Subject: staging: comedi: ni_tio: tidy up Gxx_Status_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 6 +-- drivers/staging/comedi/drivers/ni_tio_internal.h | 69 +++--------------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 6 +-- 3 files changed, 14 insertions(+), 67 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index 15364128c91f..ccdf96ed6539 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1200,9 +1200,9 @@ int ni_tio_insn_config(struct comedi_device *dev, case INSN_CONFIG_GET_COUNTER_STATUS: data[1] = 0; status = read_register(counter, NITIO_SHARED_STATUS_REG(cidx)); - if (status & Gi_Armed_Bit(cidx)) { + if (status & GI_ARMED(cidx)) { data[1] |= COMEDI_COUNTER_ARMED; - if (status & Gi_Counting_Bit(cidx)) + if (status & GI_COUNTING(cidx)) data[1] |= COMEDI_COUNTER_COUNTING; } data[2] = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; @@ -1289,7 +1289,7 @@ static unsigned ni_tio_next_load_register(struct ni_gpct *counter) const unsigned bits = read_register(counter, NITIO_SHARED_STATUS_REG(cidx)); - return (bits & Gi_Next_Load_Source_Bit(cidx)) + return (bits & GI_NEXT_LOAD_SRC(cidx)) ? NITIO_LOADB_REG(cidx) : NITIO_LOADA_REG(cidx); } diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 889bd3063c27..37fde62b0d6e 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -117,6 +117,14 @@ #define GI_GATE2_SUBSEL (1 << 14) #define GI_SRC_SUBSEL (1 << 15) #define NITIO_SHARED_STATUS_REG(x) (NITIO_G01_STATUS + ((x) / 2)) +#define GI_SAVE(x) (((x) % 2) ? (1 << 1) : (1 << 0)) +#define GI_COUNTING(x) (((x) % 2) ? (1 << 3) : (1 << 2)) +#define GI_NEXT_LOAD_SRC(x) (((x) % 2) ? (1 << 5) : (1 << 4)) +#define GI_STALE_DATA(x) (((x) % 2) ? (1 << 7) : (1 << 6)) +#define GI_ARMED(x) (((x) % 2) ? (1 << 9) : (1 << 8)) +#define GI_NO_LOAD_BETWEEN_GATES(x) (((x) % 2) ? (1 << 11) : (1 << 10)) +#define GI_TC_ERROR(x) (((x) % 2) ? (1 << 13) : (1 << 12)) +#define GI_GATE_ERROR(x) (((x) % 2) ? (1 << 15) : (1 << 14)) #define NITIO_RESET_REG(x) (NITIO_G01_RESET + ((x) / 2)) #define NITIO_STATUS1_REG(x) (NITIO_G01_STATUS1 + ((x) / 2)) #define NITIO_STATUS2_REG(x) (NITIO_G01_STATUS2 + ((x) / 2)) @@ -127,67 +135,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gxx_Status_Bits { - G0_Save_Bit = 0x1, - G1_Save_Bit = 0x2, - G0_Counting_Bit = 0x4, - G1_Counting_Bit = 0x8, - G0_Next_Load_Source_Bit = 0x10, - G1_Next_Load_Source_Bit = 0x20, - G0_Stale_Data_Bit = 0x40, - G1_Stale_Data_Bit = 0x80, - G0_Armed_Bit = 0x100, - G1_Armed_Bit = 0x200, - G0_No_Load_Between_Gates_Bit = 0x400, - G1_No_Load_Between_Gates_Bit = 0x800, - G0_TC_Error_Bit = 0x1000, - G1_TC_Error_Bit = 0x2000, - G0_Gate_Error_Bit = 0x4000, - G1_Gate_Error_Bit = 0x8000 -}; -static inline enum Gxx_Status_Bits Gi_Counting_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_Counting_Bit; - return G0_Counting_Bit; -} - -static inline enum Gxx_Status_Bits Gi_Armed_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_Armed_Bit; - return G0_Armed_Bit; -} - -static inline enum Gxx_Status_Bits Gi_Next_Load_Source_Bit(unsigned - counter_index) -{ - if (counter_index % 2) - return G1_Next_Load_Source_Bit; - return G0_Next_Load_Source_Bit; -} - -static inline enum Gxx_Status_Bits Gi_Stale_Data_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_Stale_Data_Bit; - return G0_Stale_Data_Bit; -} - -static inline enum Gxx_Status_Bits Gi_TC_Error_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_TC_Error_Bit; - return G0_TC_Error_Bit; -} - -static inline enum Gxx_Status_Bits Gi_Gate_Error_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_Gate_Error_Bit; - return G0_Gate_Error_Bit; -} - /* joint reset register bits */ static inline unsigned Gi_Reset_Bit(unsigned counter_index) { diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 16dba7fe7797..d628748ac513 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -377,7 +377,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, if (stale_data) *stale_data = 0; - if (gxx_status & Gi_Gate_Error_Bit(cidx)) { + if (gxx_status & GI_GATE_ERROR(cidx)) { ack |= Gi_Gate_Error_Confirm_Bit(cidx); if (gate_error) { /*660x don't support automatic acknowledgement @@ -389,7 +389,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, } } } - if (gxx_status & Gi_TC_Error_Bit(cidx)) { + if (gxx_status & GI_TC_ERROR(cidx)) { ack |= Gi_TC_Error_Confirm_Bit(cidx); if (tc_error) *tc_error = 1; @@ -404,7 +404,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, write_register(counter, ack, NITIO_INT_ACK_REG(cidx)); if (ni_tio_get_soft_copy(counter, NITIO_MODE_REG(cidx)) & GI_LOADING_ON_GATE) { - if (gxx_status & Gi_Stale_Data_Bit(cidx)) { + if (gxx_status & GI_STALE_DATA(cidx)) { if (stale_data) *stale_data = 1; } -- cgit From dc613766b70db497dd3db22b1b23d19fc753497d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:54 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Reset_Bit Convert this inline CamelCase function into a define. For aesthetics, move the new define so it is associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 2 +- drivers/staging/comedi/drivers/ni_tio_internal.h | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index ccdf96ed6539..fb7b271ac2a3 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -184,7 +184,7 @@ static void ni_tio_reset_count_and_disarm(struct ni_gpct *counter) { unsigned cidx = counter->counter_index; - write_register(counter, Gi_Reset_Bit(cidx), NITIO_RESET_REG(cidx)); + write_register(counter, GI_RESET(cidx), NITIO_RESET_REG(cidx)); } static uint64_t ni_tio_clock_period_ps(const struct ni_gpct *counter, diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 37fde62b0d6e..ea1c9fb269af 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -126,6 +126,7 @@ #define GI_TC_ERROR(x) (((x) % 2) ? (1 << 13) : (1 << 12)) #define GI_GATE_ERROR(x) (((x) % 2) ? (1 << 15) : (1 << 14)) #define NITIO_RESET_REG(x) (NITIO_G01_RESET + ((x) / 2)) +#define GI_RESET(x) (1 << (2 + ((x) % 2))) #define NITIO_STATUS1_REG(x) (NITIO_G01_STATUS1 + ((x) / 2)) #define NITIO_STATUS2_REG(x) (NITIO_G01_STATUS2 + ((x) / 2)) #define NITIO_DMA_CFG_REG(x) (NITIO_G0_DMA_CFG + (x)) @@ -135,12 +136,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -/* joint reset register bits */ -static inline unsigned Gi_Reset_Bit(unsigned counter_index) -{ - return 0x1 << (2 + (counter_index % 2)); -} - enum Gxx_Joint_Status2_Bits { G0_Output_Bit = 0x1, G1_Output_Bit = 0x2, -- cgit From 29c2003d11a57c88d99e892e9dd26b36d29ae454 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:55 -0700 Subject: staging: comedi: ni_tio: tidy up Gxx_Joint_Status2_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 19 +++---------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 2 +- 2 files changed, 4 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index ea1c9fb269af..18a1e16ba0a5 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -129,6 +129,9 @@ #define GI_RESET(x) (1 << (2 + ((x) % 2))) #define NITIO_STATUS1_REG(x) (NITIO_G01_STATUS1 + ((x) / 2)) #define NITIO_STATUS2_REG(x) (NITIO_G01_STATUS2 + ((x) / 2)) +#define GI_OUTPUT(x) (((x) % 2) ? (1 << 1) : (1 << 0)) +#define GI_HW_SAVE(x) (((x) % 2) ? (1 << 13) : (1 << 12)) +#define GI_PERMANENT_STALE(x) (((x) % 2) ? (1 << 15) : (1 << 14)) #define NITIO_DMA_CFG_REG(x) (NITIO_G0_DMA_CFG + (x)) #define NITIO_DMA_STATUS_REG(x) (NITIO_G0_DMA_STATUS + (x)) #define NITIO_ABZ_REG(x) (NITIO_G0_ABZ + (x)) @@ -136,22 +139,6 @@ #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gxx_Joint_Status2_Bits { - G0_Output_Bit = 0x1, - G1_Output_Bit = 0x2, - G0_HW_Save_Bit = 0x1000, - G1_HW_Save_Bit = 0x2000, - G0_Permanent_Stale_Bit = 0x4000, - G1_Permanent_Stale_Bit = 0x8000 -}; -static inline enum Gxx_Joint_Status2_Bits Gi_Permanent_Stale_Bit(unsigned - counter_index) -{ - if (counter_index % 2) - return G1_Permanent_Stale_Bit; - return G0_Permanent_Stale_Bit; -} - enum Gi_DMA_Config_Reg_Bits { Gi_DMA_Enable_Bit = 0x1, Gi_DMA_Write_Bit = 0x2, diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index d628748ac513..9ba40794ac21 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -409,7 +409,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, *stale_data = 1; } if (read_register(counter, NITIO_STATUS2_REG(cidx)) & - Gi_Permanent_Stale_Bit(cidx)) { + GI_PERMANENT_STALE(cidx)) { dev_info(counter->counter_dev->dev->class_dev, "%s: Gi_Permanent_Stale_Data detected.\n", __func__); -- cgit From 150dde701f8cae00ecb0084316a9e60f5046de9c Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:56 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_DMA_Config_Reg_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_stc.h | 8 -------- drivers/staging/comedi/drivers/ni_tio_internal.h | 11 +++++------ drivers/staging/comedi/drivers/ni_tiocmd.c | 10 +++++----- 3 files changed, 10 insertions(+), 19 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index caad9d86be8e..a2841292ddd4 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h @@ -1285,14 +1285,6 @@ static inline unsigned MSeries_PFI_Output_Select_Source(unsigned channel, return (bits >> ((channel % 3) * 5)) & 0x1f; }; -enum MSeries_Gi_DMA_Config_Bits { - Gi_DMA_BankSW_Error_Bit = 0x10, - Gi_DMA_Reset_Bit = 0x8, - Gi_DMA_Int_Enable_Bit = 0x4, - Gi_DMA_Write_Bit = 0x2, - Gi_DMA_Enable_Bit = 0x1, -}; - static inline unsigned MSeries_PFI_Filter_Select_Mask(unsigned channel) { return 0x3 << (channel * 2); diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 18a1e16ba0a5..a74cec40611c 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -133,18 +133,17 @@ #define GI_HW_SAVE(x) (((x) % 2) ? (1 << 13) : (1 << 12)) #define GI_PERMANENT_STALE(x) (((x) % 2) ? (1 << 15) : (1 << 14)) #define NITIO_DMA_CFG_REG(x) (NITIO_G0_DMA_CFG + (x)) +#define GI_DMA_ENABLE (1 << 0) +#define GI_DMA_WRITE (1 << 1) +#define GI_DMA_INT_ENA (1 << 2) +#define GI_DMA_RESET (1 << 3) +#define GI_DMA_BANKSW_ERROR (1 << 4) #define NITIO_DMA_STATUS_REG(x) (NITIO_G0_DMA_STATUS + (x)) #define NITIO_ABZ_REG(x) (NITIO_G0_ABZ + (x)) #define NITIO_INT_ACK_REG(x) (NITIO_G0_INT_ACK + (x)) #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gi_DMA_Config_Reg_Bits { - Gi_DMA_Enable_Bit = 0x1, - Gi_DMA_Write_Bit = 0x2, - Gi_DMA_Int_Bit = 0x4 -}; - enum Gi_DMA_Status_Reg_Bits { Gi_DMA_Readbank_Bit = 0x2000, Gi_DRQ_Error_Bit = 0x4000, diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 9ba40794ac21..d80bb35aed40 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -74,14 +74,14 @@ static void ni_tio_configure_dma(struct ni_gpct *counter, short enable, unsigned gi_dma_config_bits = 0; if (enable) { - gi_dma_config_bits |= Gi_DMA_Enable_Bit; - gi_dma_config_bits |= Gi_DMA_Int_Bit; + gi_dma_config_bits |= GI_DMA_ENABLE; + gi_dma_config_bits |= GI_DMA_INT_ENA; } if (read_not_write == 0) - gi_dma_config_bits |= Gi_DMA_Write_Bit; + gi_dma_config_bits |= GI_DMA_WRITE; ni_tio_set_bits(counter, NITIO_DMA_CFG_REG(cidx), - Gi_DMA_Enable_Bit | Gi_DMA_Int_Bit | - Gi_DMA_Write_Bit, gi_dma_config_bits); + GI_DMA_ENABLE | GI_DMA_INT_ENA | + GI_DMA_WRITE, gi_dma_config_bits); } break; } -- cgit From 923de26e74a5fe944e9a2f0301342a73db05f3b4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:57 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_DMA_Status_Reg_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 9 +++------ drivers/staging/comedi/drivers/ni_tiocmd.c | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index a74cec40611c..db6b56307db9 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -139,17 +139,14 @@ #define GI_DMA_RESET (1 << 3) #define GI_DMA_BANKSW_ERROR (1 << 4) #define NITIO_DMA_STATUS_REG(x) (NITIO_G0_DMA_STATUS + (x)) +#define GI_DMA_READBANK (1 << 13) +#define GI_DRQ_ERROR (1 << 14) +#define GI_DRQ_STATUS (1 << 15) #define NITIO_ABZ_REG(x) (NITIO_G0_ABZ + (x)) #define NITIO_INT_ACK_REG(x) (NITIO_G0_INT_ACK + (x)) #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gi_DMA_Status_Reg_Bits { - Gi_DMA_Readbank_Bit = 0x2000, - Gi_DRQ_Error_Bit = 0x4000, - Gi_DRQ_Status_Bit = 0x8000 -}; - enum G02_Interrupt_Acknowledge_Bits { G0_Gate_Error_Confirm_Bit = 0x20, G0_TC_Error_Confirm_Bit = 0x40 diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index d80bb35aed40..f8019bf57ea5 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -443,7 +443,7 @@ void ni_tio_handle_interrupt(struct ni_gpct *counter, case ni_gpct_variant_m_series: case ni_gpct_variant_660x: if (read_register(counter, NITIO_DMA_STATUS_REG(cidx)) & - Gi_DRQ_Error_Bit) { + GI_DRQ_ERROR) { dev_notice(counter->counter_dev->dev->class_dev, "%s: Gi_DRQ_Error detected.\n", __func__); s->async->events |= COMEDI_CB_OVERFLOW; -- cgit From 4bf9d435b2e82d12f663706de32c286f423a43d4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:58 -0700 Subject: staging: comedi: ni_tio: tidy up Gxx_Interrupt_Acknowledge_Bits Convert this enum and the others related to it into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 32 +++--------------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 8 +++--- 2 files changed, 8 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index db6b56307db9..8d1b254c37aa 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -144,37 +144,13 @@ #define GI_DRQ_STATUS (1 << 15) #define NITIO_ABZ_REG(x) (NITIO_G0_ABZ + (x)) #define NITIO_INT_ACK_REG(x) (NITIO_G0_INT_ACK + (x)) +#define GI_GATE_ERROR_CONFIRM(x) (((x) % 2) ? (1 << 1) : (1 << 5)) +#define GI_TC_ERROR_CONFIRM(x) (((x) % 2) ? (1 << 2) : (1 << 6)) +#define GI_TC_INTERRUPT_ACK (1 << 14) +#define GI_GATE_INTERRUPT_ACK (1 << 15) #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum G02_Interrupt_Acknowledge_Bits { - G0_Gate_Error_Confirm_Bit = 0x20, - G0_TC_Error_Confirm_Bit = 0x40 -}; -enum G13_Interrupt_Acknowledge_Bits { - G1_Gate_Error_Confirm_Bit = 0x2, - G1_TC_Error_Confirm_Bit = 0x4 -}; -static inline unsigned Gi_Gate_Error_Confirm_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_Gate_Error_Confirm_Bit; - return G0_Gate_Error_Confirm_Bit; -} - -static inline unsigned Gi_TC_Error_Confirm_Bit(unsigned counter_index) -{ - if (counter_index % 2) - return G1_TC_Error_Confirm_Bit; - return G0_TC_Error_Confirm_Bit; -} - -/* bits that are the same in G0/G2 and G1/G3 interrupt acknowledge registers */ -enum Gxx_Interrupt_Acknowledge_Bits { - Gi_TC_Interrupt_Ack_Bit = 0x4000, - Gi_Gate_Interrupt_Ack_Bit = 0x8000 -}; - enum Gi_Status_Bits { Gi_Gate_Interrupt_Bit = 0x4, Gi_TC_Bit = 0x8, diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index f8019bf57ea5..43a7bee55052 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -378,7 +378,7 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, *stale_data = 0; if (gxx_status & GI_GATE_ERROR(cidx)) { - ack |= Gi_Gate_Error_Confirm_Bit(cidx); + ack |= GI_GATE_ERROR_CONFIRM(cidx); if (gate_error) { /*660x don't support automatic acknowledgement of gate interrupt via dma read/write @@ -390,15 +390,15 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, } } if (gxx_status & GI_TC_ERROR(cidx)) { - ack |= Gi_TC_Error_Confirm_Bit(cidx); + ack |= GI_TC_ERROR_CONFIRM(cidx); if (tc_error) *tc_error = 1; } if (gi_status & Gi_TC_Bit) - ack |= Gi_TC_Interrupt_Ack_Bit; + ack |= GI_TC_INTERRUPT_ACK; if (gi_status & Gi_Gate_Interrupt_Bit) { if (should_ack_gate(counter)) - ack |= Gi_Gate_Interrupt_Ack_Bit; + ack |= GI_GATE_INTERRUPT_ACK; } if (ack) write_register(counter, ack, NITIO_INT_ACK_REG(cidx)); -- cgit From fcf6560c52f0e29569ed5b2d41e64a1360d955a0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:26:59 -0700 Subject: staging: comedi: ni_tio: tidy up Gi_Status_Bits Convert this enum into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 9 +++------ drivers/staging/comedi/drivers/ni_tiocmd.c | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 8d1b254c37aa..37cdb4960803 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -149,14 +149,11 @@ #define GI_TC_INTERRUPT_ACK (1 << 14) #define GI_GATE_INTERRUPT_ACK (1 << 15) #define NITIO_STATUS_REG(x) (NITIO_G0_STATUS + (x)) +#define GI_GATE_INTERRUPT (1 << 2) +#define GI_TC (1 << 3) +#define GI_INTERRUPT (1 << 15) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) -enum Gi_Status_Bits { - Gi_Gate_Interrupt_Bit = 0x4, - Gi_TC_Bit = 0x8, - Gi_Interrupt_Bit = 0x8000 -}; - enum G02_Interrupt_Enable_Bits { G0_TC_Interrupt_Enable_Bit = 0x40, G0_Gate_Interrupt_Enable_Bit = 0x100 diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 43a7bee55052..3ec8995f0cf4 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -394,9 +394,9 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, if (tc_error) *tc_error = 1; } - if (gi_status & Gi_TC_Bit) + if (gi_status & GI_TC) ack |= GI_TC_INTERRUPT_ACK; - if (gi_status & Gi_Gate_Interrupt_Bit) { + if (gi_status & GI_GATE_INTERRUPT) { if (should_ack_gate(counter)) ack |= GI_GATE_INTERRUPT_ACK; } -- cgit From 613117fbfe02586f4f53b83b668eab06bec6bc5f Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:27:00 -0700 Subject: staging: comedi: ni_tio: tidy up G{02, 12}_Interrupt_Enable_Bits Convert these enums into defines and rename the CamelCase symbols. For aesthetics, move the new defines so they are associated with the register define. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio_internal.h | 21 ++------------------- drivers/staging/comedi/drivers/ni_tiocmd.c | 6 +++--- 2 files changed, 5 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio_internal.h b/drivers/staging/comedi/drivers/ni_tio_internal.h index 37cdb4960803..2bceae493e23 100644 --- a/drivers/staging/comedi/drivers/ni_tio_internal.h +++ b/drivers/staging/comedi/drivers/ni_tio_internal.h @@ -153,25 +153,8 @@ #define GI_TC (1 << 3) #define GI_INTERRUPT (1 << 15) #define NITIO_INT_ENA_REG(x) (NITIO_G0_INT_ENA + (x)) - -enum G02_Interrupt_Enable_Bits { - G0_TC_Interrupt_Enable_Bit = 0x40, - G0_Gate_Interrupt_Enable_Bit = 0x100 -}; -enum G13_Interrupt_Enable_Bits { - G1_TC_Interrupt_Enable_Bit = 0x200, - G1_Gate_Interrupt_Enable_Bit = 0x400 -}; -static inline unsigned Gi_Gate_Interrupt_Enable_Bit(unsigned counter_index) -{ - unsigned bit; - - if (counter_index % 2) - bit = G1_Gate_Interrupt_Enable_Bit; - else - bit = G0_Gate_Interrupt_Enable_Bit; - return bit; -} +#define GI_TC_INTERRUPT_ENABLE(x) (((x) % 2) ? (1 << 9) : (1 << 6)) +#define GI_GATE_INTERRUPT_ENABLE(x) (((x) % 2) ? (1 << 10) : (1 << 8)) static inline void write_register(struct ni_gpct *counter, unsigned bits, enum ni_gpct_register reg) diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 3ec8995f0cf4..8c89786047e1 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -201,8 +201,8 @@ static int ni_tio_cmd_setup(struct comedi_subdevice *s) retval = ni_tio_set_gate_src(counter, 0, gate_source); if (cmd->flags & TRIG_WAKE_EOS) { ni_tio_set_bits(counter, NITIO_INT_ENA_REG(cidx), - Gi_Gate_Interrupt_Enable_Bit(cidx), - Gi_Gate_Interrupt_Enable_Bit(cidx)); + GI_GATE_INTERRUPT_ENABLE(cidx), + GI_GATE_INTERRUPT_ENABLE(cidx)); } return retval; } @@ -322,7 +322,7 @@ int ni_tio_cancel(struct ni_gpct *counter) ni_tio_configure_dma(counter, 0, 0); ni_tio_set_bits(counter, NITIO_INT_ENA_REG(cidx), - Gi_Gate_Interrupt_Enable_Bit(cidx), 0x0); + GI_GATE_INTERRUPT_ENABLE(cidx), 0x0); return 0; } EXPORT_SYMBOL_GPL(ni_tio_cancel); -- cgit From 65dbae525fc1e6b5c2cd09e1fc700a7d80b3577d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:27:01 -0700 Subject: staging: comedi: ni_tiocmd: tidy up ni_tio_configure_dma() The 'enable' and 'read_not_write' parameters are true/false flags. For aesthetics, change their types to bool. Rename the local variable 'input_select_bits' to simply 'bits' and reuse it when enabling the dma on the m series and 660x counter variants. Add a local variable for the 'mask' that is passed to ni_tio_set_bits() to help clarify the code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tiocmd.c | 48 ++++++++++++++---------------- 1 file changed, 23 insertions(+), 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 8c89786047e1..16858fbd215d 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -49,40 +49,38 @@ TODO: #include "ni_tio_internal.h" #include "mite.h" -static void ni_tio_configure_dma(struct ni_gpct *counter, short enable, - short read_not_write) +static void ni_tio_configure_dma(struct ni_gpct *counter, + bool enable, bool read) { struct ni_gpct_device *counter_dev = counter->counter_dev; unsigned cidx = counter->counter_index; - unsigned input_select_bits = 0; + unsigned mask; + unsigned bits; + + mask = GI_READ_ACKS_IRQ | GI_WRITE_ACKS_IRQ; + bits = 0; if (enable) { - if (read_not_write) - input_select_bits |= GI_READ_ACKS_IRQ; + if (read) + bits |= GI_READ_ACKS_IRQ; else - input_select_bits |= GI_WRITE_ACKS_IRQ; + bits |= GI_WRITE_ACKS_IRQ; } - ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), - GI_READ_ACKS_IRQ | GI_WRITE_ACKS_IRQ, - input_select_bits); + ni_tio_set_bits(counter, NITIO_INPUT_SEL_REG(cidx), mask, bits); + switch (counter_dev->variant) { case ni_gpct_variant_e_series: break; case ni_gpct_variant_m_series: case ni_gpct_variant_660x: - { - unsigned gi_dma_config_bits = 0; - - if (enable) { - gi_dma_config_bits |= GI_DMA_ENABLE; - gi_dma_config_bits |= GI_DMA_INT_ENA; - } - if (read_not_write == 0) - gi_dma_config_bits |= GI_DMA_WRITE; - ni_tio_set_bits(counter, NITIO_DMA_CFG_REG(cidx), - GI_DMA_ENABLE | GI_DMA_INT_ENA | - GI_DMA_WRITE, gi_dma_config_bits); - } + mask = GI_DMA_ENABLE | GI_DMA_INT_ENA | GI_DMA_WRITE; + bits = 0; + + if (enable) + bits |= GI_DMA_ENABLE | GI_DMA_INT_ENA; + if (!read) + bits |= GI_DMA_WRITE; + ni_tio_set_bits(counter, NITIO_DMA_CFG_REG(cidx), mask, bits); break; } } @@ -140,7 +138,7 @@ static int ni_tio_input_cmd(struct comedi_subdevice *s) break; } ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), GI_SAVE_TRACE, 0); - ni_tio_configure_dma(counter, 1, 1); + ni_tio_configure_dma(counter, true, true); switch (cmd->start_src) { case TRIG_NOW: async->inttrig = NULL; @@ -176,7 +174,7 @@ static int ni_tio_output_cmd(struct comedi_subdevice *s) counter->mite_chan->dir = COMEDI_OUTPUT; mite_prep_dma(counter->mite_chan, 32, 32); - ni_tio_configure_dma(counter, 1, 0); + ni_tio_configure_dma(counter, true, false); mite_dma_arm(counter->mite_chan); return ni_tio_arm(counter, 1, NI_GPCT_ARM_IMMEDIATE); } @@ -319,7 +317,7 @@ int ni_tio_cancel(struct ni_gpct *counter) if (counter->mite_chan) mite_dma_disarm(counter->mite_chan); spin_unlock_irqrestore(&counter->lock, flags); - ni_tio_configure_dma(counter, 0, 0); + ni_tio_configure_dma(counter, false, false); ni_tio_set_bits(counter, NITIO_INT_ENA_REG(cidx), GI_GATE_INTERRUPT_ENABLE(cidx), 0x0); -- cgit From 78c7a4a6592cde3e2ecba1732727d3ed3866a653 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:27:02 -0700 Subject: staging: comedi: ni_tiocmd: tidy up ni_tio_input_inttrig() Remove the BUG_ON(counter == NULL). If this can never happen and it if did the driver should have died long before this function is called. For aesthetics, rename the local variable 'retval' to simply 'ret'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tiocmd.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 16858fbd215d..334ce3529e08 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -92,9 +92,7 @@ static int ni_tio_input_inttrig(struct comedi_device *dev, struct ni_gpct *counter = s->private; struct comedi_cmd *cmd = &s->async->cmd; unsigned long flags; - int retval = 0; - - BUG_ON(counter == NULL); + int ret = 0; if (trig_num != cmd->start_src) return -EINVAL; @@ -103,14 +101,14 @@ static int ni_tio_input_inttrig(struct comedi_device *dev, if (counter->mite_chan) mite_dma_arm(counter->mite_chan); else - retval = -EIO; + ret = -EIO; spin_unlock_irqrestore(&counter->lock, flags); - if (retval < 0) - return retval; - retval = ni_tio_arm(counter, 1, NI_GPCT_ARM_IMMEDIATE); + if (ret < 0) + return ret; + ret = ni_tio_arm(counter, 1, NI_GPCT_ARM_IMMEDIATE); s->async->inttrig = NULL; - return retval; + return ret; } static int ni_tio_input_cmd(struct comedi_subdevice *s) -- cgit From 4cf2f3a5745f4fbcd9eb80e3bb1406be6d95cf26 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:27:03 -0700 Subject: staging: comedi: ni_tiocmd: tidy up ni_tio_input_cmd() The cmd->start_src is validated in the (*do_cmdtest) before this function is called. All valid trigger sources are handled so the default BUG() case can never occure. For aesthetics, refactor the switch into if/else tests and remove the BUG(). For aesthetics, rename the local variable 'retval' to simply 'ret'. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tiocmd.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index 334ce3529e08..c360667b1ba4 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -118,7 +118,7 @@ static int ni_tio_input_cmd(struct comedi_subdevice *s) unsigned cidx = counter->counter_index; struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; - int retval = 0; + int ret = 0; /* write alloc the entire buffer */ comedi_buf_write_alloc(s, async->prealloc_bufsz); @@ -137,29 +137,19 @@ static int ni_tio_input_cmd(struct comedi_subdevice *s) } ni_tio_set_bits(counter, NITIO_CMD_REG(cidx), GI_SAVE_TRACE, 0); ni_tio_configure_dma(counter, true, true); - switch (cmd->start_src) { - case TRIG_NOW: - async->inttrig = NULL; - mite_dma_arm(counter->mite_chan); - retval = ni_tio_arm(counter, 1, NI_GPCT_ARM_IMMEDIATE); - break; - case TRIG_INT: + + if (cmd->start_src == TRIG_INT) { async->inttrig = &ni_tio_input_inttrig; - break; - case TRIG_EXT: + } else { /* TRIG_NOW || TRIG_EXT || TRIG_OTHER */ async->inttrig = NULL; mite_dma_arm(counter->mite_chan); - retval = ni_tio_arm(counter, 1, cmd->start_arg); - break; - case TRIG_OTHER: - async->inttrig = NULL; - mite_dma_arm(counter->mite_chan); - break; - default: - BUG(); - break; + + if (cmd->start_src == TRIG_NOW) + ret = ni_tio_arm(counter, 1, NI_GPCT_ARM_IMMEDIATE); + else if (cmd->start_src == TRIG_EXT) + ret = ni_tio_arm(counter, 1, cmd->start_arg); } - return retval; + return ret; } static int ni_tio_output_cmd(struct comedi_subdevice *s) -- cgit From f8cfd0eb3c11337844215c5e93937c561858eb13 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Mon, 28 Jul 2014 10:27:04 -0700 Subject: staging: comedi: ni_tiocmd: introduce ni_tio_acknowledge() The external callers of ni_tio_acknowledge_and_confirm() only call this function to ack any pending errors or interrupts before starting a new async command. Only the internal code in ni_tiocmd uses the data that is optionally returned by this function. Remove the export from ni_tio_acknowledge_and_confirm() and introduce a new exported function that handles passing the NULL params. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_660x.c | 2 +- drivers/staging/comedi/drivers/ni_mio_common.c | 2 +- drivers/staging/comedi/drivers/ni_tio.h | 4 +--- drivers/staging/comedi/drivers/ni_tiocmd.c | 15 +++++++++++---- 4 files changed, 14 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 20fe692fd8f0..ef4a8f0fb29c 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -749,7 +749,7 @@ static int ni_660x_cmd(struct comedi_device *dev, struct comedi_subdevice *s) "no dma channel available for use by counter\n"); return retval; } - ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); + ni_tio_acknowledge(counter); return ni_tio_cmd(dev, s); } diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 4285f0718012..888ec8ddf63b 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -5252,7 +5252,7 @@ static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) "no dma channel available for use by counter\n"); return retval; } - ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); + ni_tio_acknowledge(counter); ni_e_series_enable_second_irq(dev, counter->counter_index, 1); return ni_tio_cmd(dev, s); diff --git a/drivers/staging/comedi/drivers/ni_tio.h b/drivers/staging/comedi/drivers/ni_tio.h index 1056bf001e5e..25aedd0e5867 100644 --- a/drivers/staging/comedi/drivers/ni_tio.h +++ b/drivers/staging/comedi/drivers/ni_tio.h @@ -149,8 +149,6 @@ int ni_tio_cmdtest(struct comedi_device *, struct comedi_subdevice *, int ni_tio_cancel(struct ni_gpct *); void ni_tio_handle_interrupt(struct ni_gpct *, struct comedi_subdevice *); void ni_tio_set_mite_channel(struct ni_gpct *, struct mite_channel *); -void ni_tio_acknowledge_and_confirm(struct ni_gpct *, - int *gate_error, int *tc_error, - int *perm_stale_data, int *stale_data); +void ni_tio_acknowledge(struct ni_gpct *); #endif /* _COMEDI_NI_TIO_H */ diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c index c360667b1ba4..299ceddfb233 100644 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c @@ -343,9 +343,11 @@ static int should_ack_gate(struct ni_gpct *counter) return retval; } -void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, - int *tc_error, int *perm_stale_data, - int *stale_data) +static void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, + int *gate_error, + int *tc_error, + int *perm_stale_data, + int *stale_data) { unsigned cidx = counter->counter_index; const unsigned short gxx_status = read_register(counter, @@ -404,7 +406,12 @@ void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter, int *gate_error, } } } -EXPORT_SYMBOL_GPL(ni_tio_acknowledge_and_confirm); + +void ni_tio_acknowledge(struct ni_gpct *counter) +{ + ni_tio_acknowledge_and_confirm(counter, NULL, NULL, NULL, NULL); +} +EXPORT_SYMBOL_GPL(ni_tio_acknowledge); void ni_tio_handle_interrupt(struct ni_gpct *counter, struct comedi_subdevice *s) -- cgit From 0af871dbb77d8530bfd12fa8690af8d71feb212f Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:09 +0100 Subject: staging: comedi: amplc_pci230: reformat a load of comments Reformat a load of comments to fit in with the preferred coding style, including the copyright and driver description comments at the top of the file. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 837 +++++++++++++++----------- 1 file changed, 489 insertions(+), 348 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index a61d9904d970..cb86d04a3173 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -1,188 +1,189 @@ - /* - comedi/drivers/amplc_pci230.c - Driver for Amplicon PCI230 and PCI260 Multifunction I/O boards. - - Copyright (C) 2001 Allan Willcox - - 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. +/* + * comedi/drivers/amplc_pci230.c + * Driver for Amplicon PCI230 and PCI260 Multifunction I/O boards. + * + * Copyright (C) 2001 Allan Willcox + * + * 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. + */ - 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. - */ /* -Driver: amplc_pci230 -Description: Amplicon PCI230, PCI260 Multifunction I/O boards -Author: Allan Willcox , - Steve D Sharples , - Ian Abbott -Updated: Wed, 22 Oct 2008 12:34:49 +0100 -Devices: [Amplicon] PCI230 (pci230 or amplc_pci230), - PCI230+ (pci230+ or amplc_pci230), - PCI260 (pci260 or amplc_pci230), PCI260+ (pci260+ or amplc_pci230) -Status: works - -Configuration options: - [0] - PCI bus of device (optional). - [1] - PCI slot of device (optional). - If bus/slot is not specified, the first available PCI device - will be used. - -Configuring a "amplc_pci230" will match any supported card and it will -choose the best match, picking the "+" models if possible. Configuring -a "pci230" will match a PCI230 or PCI230+ card and it will be treated as -a PCI230. Configuring a "pci260" will match a PCI260 or PCI260+ card -and it will be treated as a PCI260. Configuring a "pci230+" will match -a PCI230+ card. Configuring a "pci260+" will match a PCI260+ card. - -Subdevices: - - PCI230(+) PCI260(+) - --------- --------- - Subdevices 3 1 - 0 AI AI - 1 AO - 2 DIO - -AI Subdevice: - - The AI subdevice has 16 single-ended channels or 8 differential - channels. - - The PCI230 and PCI260 cards have 12-bit resolution. The PCI230+ and - PCI260+ cards have 16-bit resolution. - - For differential mode, use inputs 2N and 2N+1 for channel N (e.g. use - inputs 14 and 15 for channel 7). If the card is physically a PCI230 - or PCI260 then it actually uses a "pseudo-differential" mode where the - inputs are sampled a few microseconds apart. The PCI230+ and PCI260+ - use true differential sampling. Another difference is that if the - card is physically a PCI230 or PCI260, the inverting input is 2N, - whereas for a PCI230+ or PCI260+ the inverting input is 2N+1. So if a - PCI230 is physically replaced by a PCI230+ (or a PCI260 with a - PCI260+) and differential mode is used, the differential inputs need - to be physically swapped on the connector. - - The following input ranges are supported: - - 0 => [-10, +10] V - 1 => [-5, +5] V - 2 => [-2.5, +2.5] V - 3 => [-1.25, +1.25] V - 4 => [0, 10] V - 5 => [0, 5] V - 6 => [0, 2.5] V - -AI Commands: - - +=========+==============+===========+============+==========+ - |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | - +=========+==============+===========+============+==========+ - |TRIG_NOW | TRIG_FOLLOW |TRIG_TIMER | TRIG_COUNT |TRIG_NONE | - |TRIG_INT | |TRIG_EXT(3)| |TRIG_COUNT| - | | |TRIG_INT | | | - | |--------------|-----------| | | - | | TRIG_TIMER(1)|TRIG_TIMER | | | - | | TRIG_EXT(2) | | | | - | | TRIG_INT | | | | - +---------+--------------+-----------+------------+----------+ - - Note 1: If AI command and AO command are used simultaneously, only - one may have scan_begin_src == TRIG_TIMER. - - Note 2: For PCI230 and PCI230+, scan_begin_src == TRIG_EXT uses - DIO channel 16 (pin 49) which will need to be configured as - a digital input. For PCI260+, the EXTTRIG/EXTCONVCLK input - (pin 17) is used instead. For PCI230, scan_begin_src == - TRIG_EXT is not supported. The trigger is a rising edge - on the input. - - Note 3: For convert_src == TRIG_EXT, the EXTTRIG/EXTCONVCLK input - (pin 25 on PCI230(+), pin 17 on PCI260(+)) is used. The - convert_arg value is interpreted as follows: - - convert_arg == (CR_EDGE | 0) => rising edge - convert_arg == (CR_EDGE | CR_INVERT | 0) => falling edge - convert_arg == 0 => falling edge (backwards compatibility) - convert_arg == 1 => rising edge (backwards compatibility) - - All entries in the channel list must use the same analogue reference. - If the analogue reference is not AREF_DIFF (not differential) each - pair of channel numbers (0 and 1, 2 and 3, etc.) must use the same - input range. The input ranges used in the sequence must be all - bipolar (ranges 0 to 3) or all unipolar (ranges 4 to 6). The channel - sequence must consist of 1 or more identical subsequences. Within the - subsequence, channels must be in ascending order with no repeated - channels. For example, the following sequences are valid: 0 1 2 3 - (single valid subsequence), 0 2 3 5 0 2 3 5 (repeated valid - subsequence), 1 1 1 1 (repeated valid subsequence). The following - sequences are invalid: 0 3 2 1 (invalid subsequence), 0 2 3 5 0 2 3 - (incompletely repeated subsequence). Some versions of the PCI230+ and - PCI260+ have a bug that requires a subsequence longer than one entry - long to include channel 0. - -AO Subdevice: - - The AO subdevice has 2 channels with 12-bit resolution. - - The following output ranges are supported: - - 0 => [0, 10] V - 1 => [-10, +10] V - -AO Commands: - - +=========+==============+===========+============+==========+ - |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | - +=========+==============+===========+============+==========+ - |TRIG_INT | TRIG_TIMER(1)| TRIG_NOW | TRIG_COUNT |TRIG_NONE | - | | TRIG_EXT(2) | | |TRIG_COUNT| - | | TRIG_INT | | | | - +---------+--------------+-----------+------------+----------+ - - Note 1: If AI command and AO command are used simultaneously, only - one may have scan_begin_src == TRIG_TIMER. - - Note 2: scan_begin_src == TRIG_EXT is only supported if the card is - configured as a PCI230+ and is only supported on later - versions of the card. As a card configured as a PCI230+ is - not guaranteed to support external triggering, please consider - this support to be a bonus. It uses the EXTTRIG/ EXTCONVCLK - input (PCI230+ pin 25). Triggering will be on the rising edge - unless the CR_INVERT flag is set in scan_begin_arg. - - The channels in the channel sequence must be in ascending order with - no repeats. All entries in the channel sequence must use the same - output range. - -DIO Subdevice: - - The DIO subdevice is a 8255 chip providing 24 DIO channels. The DIO - channels are configurable as inputs or outputs in four groups: - - Port A - channels 0 to 7 - Port B - channels 8 to 15 - Port CL - channels 16 to 19 - Port CH - channels 20 to 23 - - Only mode 0 of the 8255 chip is supported. - - Bit 0 of port C (DIO channel 16) is also used as an external scan - trigger input for AI commands on PCI230 and PCI230+, so would need to - be configured as an input to use it for that purpose. -*/ + * Driver: amplc_pci230 + * Description: Amplicon PCI230, PCI260 Multifunction I/O boards + * Author: Allan Willcox , + * Steve D Sharples , + * Ian Abbott + * Updated: Wed, 22 Oct 2008 12:34:49 +0100 + * Devices: [Amplicon] PCI230 (pci230 or amplc_pci230), + * PCI230+ (pci230+ or amplc_pci230), + * PCI260 (pci260 or amplc_pci230), PCI260+ (pci260+ or amplc_pci230) + * Status: works + * + * Configuration options: + * [0] - PCI bus of device (optional). + * [1] - PCI slot of device (optional). + * If bus/slot is not specified, the first available PCI device + * will be used. + * + * Configuring a "amplc_pci230" will match any supported card and it will + * choose the best match, picking the "+" models if possible. Configuring + * a "pci230" will match a PCI230 or PCI230+ card and it will be treated as + * a PCI230. Configuring a "pci260" will match a PCI260 or PCI260+ card + * and it will be treated as a PCI260. Configuring a "pci230+" will match + * a PCI230+ card. Configuring a "pci260+" will match a PCI260+ card. + * + * Subdevices: + * + * PCI230(+) PCI260(+) + * --------- --------- + * Subdevices 3 1 + * 0 AI AI + * 1 AO + * 2 DIO + * + * AI Subdevice: + * + * The AI subdevice has 16 single-ended channels or 8 differential + * channels. + * + * The PCI230 and PCI260 cards have 12-bit resolution. The PCI230+ and + * PCI260+ cards have 16-bit resolution. + * + * For differential mode, use inputs 2N and 2N+1 for channel N (e.g. use + * inputs 14 and 15 for channel 7). If the card is physically a PCI230 + * or PCI260 then it actually uses a "pseudo-differential" mode where the + * inputs are sampled a few microseconds apart. The PCI230+ and PCI260+ + * use true differential sampling. Another difference is that if the + * card is physically a PCI230 or PCI260, the inverting input is 2N, + * whereas for a PCI230+ or PCI260+ the inverting input is 2N+1. So if a + * PCI230 is physically replaced by a PCI230+ (or a PCI260 with a + * PCI260+) and differential mode is used, the differential inputs need + * to be physically swapped on the connector. + * + * The following input ranges are supported: + * + * 0 => [-10, +10] V + * 1 => [-5, +5] V + * 2 => [-2.5, +2.5] V + * 3 => [-1.25, +1.25] V + * 4 => [0, 10] V + * 5 => [0, 5] V + * 6 => [0, 2.5] V + * + * AI Commands: + * + * +=========+==============+===========+============+==========+ + * |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | + * +=========+==============+===========+============+==========+ + * |TRIG_NOW | TRIG_FOLLOW |TRIG_TIMER | TRIG_COUNT |TRIG_NONE | + * |TRIG_INT | |TRIG_EXT(3)| |TRIG_COUNT| + * | | |TRIG_INT | | | + * | |--------------|-----------| | | + * | | TRIG_TIMER(1)|TRIG_TIMER | | | + * | | TRIG_EXT(2) | | | | + * | | TRIG_INT | | | | + * +---------+--------------+-----------+------------+----------+ + * + * Note 1: If AI command and AO command are used simultaneously, only + * one may have scan_begin_src == TRIG_TIMER. + * + * Note 2: For PCI230 and PCI230+, scan_begin_src == TRIG_EXT uses + * DIO channel 16 (pin 49) which will need to be configured as + * a digital input. For PCI260+, the EXTTRIG/EXTCONVCLK input + * (pin 17) is used instead. For PCI230, scan_begin_src == + * TRIG_EXT is not supported. The trigger is a rising edge + * on the input. + * + * Note 3: For convert_src == TRIG_EXT, the EXTTRIG/EXTCONVCLK input + * (pin 25 on PCI230(+), pin 17 on PCI260(+)) is used. The + * convert_arg value is interpreted as follows: + * + * convert_arg == (CR_EDGE | 0) => rising edge + * convert_arg == (CR_EDGE | CR_INVERT | 0) => falling edge + * convert_arg == 0 => falling edge (backwards compatibility) + * convert_arg == 1 => rising edge (backwards compatibility) + * + * All entries in the channel list must use the same analogue reference. + * If the analogue reference is not AREF_DIFF (not differential) each + * pair of channel numbers (0 and 1, 2 and 3, etc.) must use the same + * input range. The input ranges used in the sequence must be all + * bipolar (ranges 0 to 3) or all unipolar (ranges 4 to 6). The channel + * sequence must consist of 1 or more identical subsequences. Within the + * subsequence, channels must be in ascending order with no repeated + * channels. For example, the following sequences are valid: 0 1 2 3 + * (single valid subsequence), 0 2 3 5 0 2 3 5 (repeated valid + * subsequence), 1 1 1 1 (repeated valid subsequence). The following + * sequences are invalid: 0 3 2 1 (invalid subsequence), 0 2 3 5 0 2 3 + * (incompletely repeated subsequence). Some versions of the PCI230+ and + * PCI260+ have a bug that requires a subsequence longer than one entry + * long to include channel 0. + * + * AO Subdevice: + * + * The AO subdevice has 2 channels with 12-bit resolution. + * The following output ranges are supported: + * 0 => [0, 10] V + * 1 => [-10, +10] V + * + * AO Commands: + * + * +=========+==============+===========+============+==========+ + * |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | + * +=========+==============+===========+============+==========+ + * |TRIG_INT | TRIG_TIMER(1)| TRIG_NOW | TRIG_COUNT |TRIG_NONE | + * | | TRIG_EXT(2) | | |TRIG_COUNT| + * | | TRIG_INT | | | | + * +---------+--------------+-----------+------------+----------+ + * + * Note 1: If AI command and AO command are used simultaneously, only + * one may have scan_begin_src == TRIG_TIMER. + * + * Note 2: scan_begin_src == TRIG_EXT is only supported if the card is + * configured as a PCI230+ and is only supported on later + * versions of the card. As a card configured as a PCI230+ is + * not guaranteed to support external triggering, please consider + * this support to be a bonus. It uses the EXTTRIG/ EXTCONVCLK + * input (PCI230+ pin 25). Triggering will be on the rising edge + * unless the CR_INVERT flag is set in scan_begin_arg. + * + * The channels in the channel sequence must be in ascending order with + * no repeats. All entries in the channel sequence must use the same + * output range. + * + * DIO Subdevice: + * + * The DIO subdevice is a 8255 chip providing 24 DIO channels. The DIO + * channels are configurable as inputs or outputs in four groups: + * + * Port A - channels 0 to 7 + * Port B - channels 8 to 15 + * Port CL - channels 16 to 19 + * Port CH - channels 20 to 23 + * + * Only mode 0 of the 8255 chip is supported. + * + * Bit 0 of port C (DIO channel 16) is also used as an external scan + * trigger input for AI commands on PCI230 and PCI230+, so would need to + * be configured as an input to use it for that purpose. + */ + /* -Extra triggered scan functionality, interrupt bug-fix added by Steve Sharples. -Support for PCI230+/260+, more triggered scan functionality, and workarounds -for (or detection of) various hardware problems added by Ian Abbott. -*/ + * Extra triggered scan functionality, interrupt bug-fix added by Steve + * Sharples. Support for PCI230+/260+, more triggered scan functionality, + * and workarounds for (or detection of) various hardware problems added + * by Ian Abbott. + */ #include #include @@ -195,12 +196,16 @@ for (or detection of) various hardware problems added by Ian Abbott. #include "8253.h" #include "8255.h" -/* PCI230 PCI configuration register information */ +/* + * PCI230 PCI configuration register information + */ #define PCI_DEVICE_ID_PCI230 0x0000 #define PCI_DEVICE_ID_PCI260 0x0006 #define PCI_DEVICE_ID_INVALID 0xffff -/* PCI230 i/o space 1 registers. */ +/* + * PCI230 i/o space 1 registers. + */ #define PCI230_PPI_X_BASE 0x00 /* User PPI (82C55) base */ #define PCI230_PPI_X_A 0x00 /* User PPI (82C55) port A */ #define PCI230_PPI_X_B 0x01 /* User PPI (82C55) port B */ @@ -216,7 +221,9 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI230_INT_SCE 0x1E /* Interrupt source mask (w) */ #define PCI230_INT_STAT 0x1E /* Interrupt status (r) */ -/* PCI230 i/o space 2 registers. */ +/* + * PCI230 i/o space 2 registers. + */ #define PCI230_DACCON 0x00 /* DAC control */ #define PCI230_DACOUT1 0x02 /* DAC channel 0 (w) */ #define PCI230_DACOUT2 0x04 /* DAC channel 1 (w) (not FIFO mode) */ @@ -239,24 +246,34 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI230P2_DACSWTRIG 0x02 /* DAC soft trigger (FIFO mode) (r) */ #define PCI230P2_DACEN 0x06 /* DAC channel enable (FIFO mode) */ -/* Convertor related constants. */ -#define PCI230_DAC_SETTLE 5 /* Analogue output settling time in µs */ - /* (DAC itself is 1µs nominally). */ -#define PCI230_ADC_SETTLE 1 /* Analogue input settling time in µs */ - /* (ADC itself is 1.6µs nominally but we poll - * anyway). */ -#define PCI230_MUX_SETTLE 10 /* ADC MUX settling time in µS */ - /* - 10µs for se, 20µs de. */ +/* + * Convertor related constants. + */ +/* Analogue output settling time in µs (DAC itself is 1µs nominally). */ +#define PCI230_DAC_SETTLE 5 +/* + * Analogue input settling time in µs (ADC itself is 1.6µs nominally but we + * poll anyway). + */ +#define PCI230_ADC_SETTLE 1 +/* ADC MUX settling time in µS - 10µs for se, 20µs de. */ +#define PCI230_MUX_SETTLE 10 -/* DACCON read-write values. */ +/* + * DACCON read-write values. + */ #define PCI230_DAC_OR_UNI (0<<0) /* Output range unipolar */ #define PCI230_DAC_OR_BIP (1<<0) /* Output range bipolar */ #define PCI230_DAC_OR_MASK (1<<0) -/* The following applies only if DAC FIFO support is enabled in the EXTFUNC - * register (and only for PCI230+ hardware version 2 onwards). */ +/* + * The following applies only if DAC FIFO support is enabled in the EXTFUNC + * register (and only for PCI230+ hardware version 2 onwards). + */ #define PCI230P2_DAC_FIFO_EN (1<<8) /* FIFO enable */ -/* The following apply only if the DAC FIFO is enabled (and only for PCI230+ - * hardware version 2 onwards). */ +/* + * The following apply only if the DAC FIFO is enabled (and only for PCI230+ + * hardware version 2 onwards). + */ #define PCI230P2_DAC_TRIG_NONE (0<<2) /* No trigger */ #define PCI230P2_DAC_TRIG_SW (1<<2) /* Software trigger trigger */ #define PCI230P2_DAC_TRIG_EXTP (2<<2) /* EXTTRIG +ve edge trigger */ @@ -274,22 +291,32 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI230P2_DAC_INT_FIFO_FULL (5<<9) #define PCI230P2_DAC_INT_FIFO_MASK (7<<9) -/* DACCON read-only values. */ +/* + * DACCON read-only values. + */ #define PCI230_DAC_BUSY (1<<1) /* DAC busy. */ -/* The following apply only if the DAC FIFO is enabled (and only for PCI230+ - * hardware version 2 onwards). */ +/* + * The following apply only if the DAC FIFO is enabled (and only for PCI230+ + * hardware version 2 onwards). + */ #define PCI230P2_DAC_FIFO_UNDERRUN_LATCHED (1<<5) /* Underrun error */ #define PCI230P2_DAC_FIFO_EMPTY (1<<13) /* FIFO empty */ #define PCI230P2_DAC_FIFO_FULL (1<<14) /* FIFO full */ #define PCI230P2_DAC_FIFO_HALF (1<<15) /* FIFO half full */ -/* DACCON write-only, transient values. */ -/* The following apply only if the DAC FIFO is enabled (and only for PCI230+ - * hardware version 2 onwards). */ +/* + * DACCON write-only, transient values. + */ +/* + * The following apply only if the DAC FIFO is enabled (and only for PCI230+ + * hardware version 2 onwards). + */ #define PCI230P2_DAC_FIFO_UNDERRUN_CLEAR (1<<5) /* Clear underrun */ #define PCI230P2_DAC_FIFO_RESET (1<<12) /* FIFO reset */ -/* PCI230+ hardware version 2 DAC FIFO levels. */ +/* + * PCI230+ hardware version 2 DAC FIFO levels. + */ #define PCI230P2_DAC_FIFOLEVEL_HALF 512 #define PCI230P2_DAC_FIFOLEVEL_FULL 1024 /* Free space in DAC FIFO. */ @@ -299,7 +326,9 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI230P2_DAC_FIFOROOM_HALFTOFULL 1 #define PCI230P2_DAC_FIFOROOM_FULL 0 -/* ADCCON read/write values. */ +/* + * ADCCON read/write values. + */ #define PCI230_ADC_TRIG_NONE (0<<0) /* No trigger */ #define PCI230_ADC_TRIG_SW (1<<0) /* Software trigger trigger */ #define PCI230_ADC_TRIG_EXTP (2<<0) /* EXTTRIG +ve edge trigger */ @@ -324,31 +353,41 @@ for (or detection of) various hardware problems added by Ian Abbott. #define PCI230P_ADC_INT_FIFO_THRESH (7<<9) /* FIFO interrupt threshold */ #define PCI230_ADC_INT_FIFO_MASK (7<<9) -/* ADCCON write-only, transient values. */ +/* + * ADCCON write-only, transient values. + */ #define PCI230_ADC_FIFO_RESET (1<<12) /* FIFO reset */ #define PCI230_ADC_GLOB_RESET (1<<13) /* Global reset */ -/* ADCCON read-only values. */ +/* + * ADCCON read-only values. + */ #define PCI230_ADC_BUSY (1<<15) /* ADC busy */ #define PCI230_ADC_FIFO_EMPTY (1<<12) /* FIFO empty */ #define PCI230_ADC_FIFO_FULL (1<<13) /* FIFO full */ #define PCI230_ADC_FIFO_HALF (1<<14) /* FIFO half full */ #define PCI230_ADC_FIFO_FULL_LATCHED (1<<5) /* Indicates overrun occurred */ -/* PCI230 ADC FIFO levels. */ +/* + * PCI230 ADC FIFO levels. + */ #define PCI230_ADC_FIFOLEVEL_HALFFULL 2049 /* Value for FIFO half full */ #define PCI230_ADC_FIFOLEVEL_FULL 4096 /* FIFO size */ -/* Value to write to ADCSWTRIG to trigger ADC conversion in software trigger - * mode. Can be anything. */ +/* + * Value to write to ADCSWTRIG to trigger ADC conversion in software trigger + * mode. Can be anything. + */ #define PCI230_ADC_CONV 0xffff -/* PCI230+ EXTFUNC values. */ +/* + * PCI230+ EXTFUNC values. + */ +/* Route EXTTRIG pin to external gate inputs. */ #define PCI230P_EXTFUNC_GAT_EXTTRIG (1<<0) - /* Route EXTTRIG pin to external gate inputs. */ /* PCI230+ hardware version 2 values. */ +/* Allow DAC FIFO to be enabled. */ #define PCI230P2_EXTFUNC_DACFIFO (1<<1) - /* Allow DAC FIFO to be enabled. */ /* * Counter/timer clock input configuration sources. @@ -392,7 +431,9 @@ for (or detection of) various hardware problems added by Ian Abbott. * Z2-CT2 Z2-CT1-OUT /Z2-CT0-OUT */ -/* Interrupt enables/status register values. */ +/* + * Interrupt enables/status register values. + */ #define PCI230_INT_DISABLE 0 #define PCI230_INT_PPI_C0 (1<<0) #define PCI230_INT_PPI_C3 (1<<1) @@ -401,10 +442,12 @@ for (or detection of) various hardware problems added by Ian Abbott. /* For PCI230+ hardware version 2 when DAC FIFO enabled. */ #define PCI230P2_INT_DAC (1<<4) +/* Assumes bits numbered with zero offset, ie. 0-15 */ #define PCI230_TEST_BIT(val, n) ((val>>n)&1) - /* Assumes bits numbered with zero offset, ie. 0-15 */ -/* (Potentially) shared resources and their owners */ +/* + * (Potentially) shared resources and their owners + */ enum { RES_Z2CT0, /* Z2-CT0 */ RES_Z2CT1, /* Z2-CT1 */ @@ -491,9 +534,11 @@ static const struct pci230_board pci230_boards[] = { }, }; -/* 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. */ +/* + * 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. + */ struct pci230_private { spinlock_t isr_spinlock; /* Interrupt spin lock */ spinlock_t res_spinlock; /* Shared resources spin lock */ @@ -502,24 +547,24 @@ struct pci230_private { unsigned long state; /* State flags */ unsigned long iobase1; /* PCI230's I/O space 1 */ unsigned int ao_readback[2]; /* Used for AO readback */ - unsigned int ai_scan_count; /* Number of analogue input scans - * remaining. */ - unsigned int ai_scan_pos; /* Current position within analogue - * input scan */ - unsigned int ao_scan_count; /* Number of analogue output scans - * remaining. */ + /* Number of analogue input scans remaining. */ + unsigned int ai_scan_count; + /* Current position within analogue input scan */ + unsigned int ai_scan_pos; + /* Number of analogue output scans remaining. */ + unsigned int ao_scan_count; int intr_cpuid; /* ID of CPU running interrupt routine. */ unsigned short hwver; /* Hardware version (for '+' models). */ unsigned short adccon; /* ADCCON register value. */ unsigned short daccon; /* DACCON register value. */ - unsigned short adcfifothresh; /* ADC FIFO programmable interrupt - * level threshold (PCI230+/260+). */ + /* ADC FIFO programmable interrupt level threshold (PCI230+/260+). */ + unsigned short adcfifothresh; unsigned short adcg; /* ADCG register value. */ unsigned char int_en; /* Interrupt enables bits. */ - unsigned char ai_bipolar; /* Set if bipolar input range so we - * know to mangle it. */ - unsigned char ao_bipolar; /* Set if bipolar output range so we - * know to mangle it. */ + /* Set if bipolar input range so we know to mangle it. */ + unsigned char ai_bipolar; + /* Set if bipolar output range so we know to mangle it. */ + unsigned char ao_bipolar; unsigned char ier; /* Copy of interrupt enables/status register. */ unsigned char intr_running; /* Flag set in interrupt routine. */ unsigned char res_owner[NUM_RESOURCES]; /* Shared resource owners. */ @@ -572,13 +617,16 @@ static unsigned short pci230_ai_read(struct comedi_device *dev) /* Read sample. */ data = inw(dev->iobase + PCI230_ADCDATA); - /* PCI230 is 12 bit - stored in upper bits of 16 bit register (lower - * four bits reserved for expansion). */ - /* PCI230+ is 16 bit AI. */ + /* + * PCI230 is 12 bit - stored in upper bits of 16 bit register + * (lower four bits reserved for expansion). PCI230+ is 16 bit AI. + */ data = data >> (16 - thisboard->ai_bits); - /* If a bipolar range was specified, mangle it (twos - * complement->straight binary). */ + /* + * If a bipolar range was specified, mangle it + * (twos complement->straight binary). + */ if (devpriv->ai_bipolar) data ^= 1 << (thisboard->ai_bits - 1); @@ -591,14 +639,17 @@ static inline unsigned short pci230_ao_mangle_datum(struct comedi_device *dev, const struct pci230_board *thisboard = comedi_board(dev); struct pci230_private *devpriv = dev->private; - /* If a bipolar range was specified, mangle it (straight binary->twos - * complement). */ + /* + * If a bipolar range was specified, mangle it + * (straight binary->twos complement). + */ 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). */ - /* PCI230+ is also 12 bit AO. */ + /* + * PCI230 is 12 bit - stored in upper bits of 16 bit register (lower + * four bits reserved for expansion). PCI230+ is also 12 bit AO. + */ datum <<= (16 - thisboard->ao_bits); return datum; } @@ -730,8 +781,10 @@ static unsigned int divide_ns(uint64_t ns, unsigned int timebase, return div > UINT_MAX ? UINT_MAX : (unsigned int)div; } -/* Given desired period in ns, returns the required internal clock source - * and gets the initial count. */ +/* + * Given desired period in ns, returns the required internal clock source + * and gets the initial count. + */ static unsigned int pci230_choose_clk_count(uint64_t ns, unsigned int *count, unsigned int flags) { @@ -824,7 +877,8 @@ static int pci230_ai_rinsn(struct comedi_device *dev, } } - /* Use Z2-CT2 as a conversion trigger instead of the built-in + /* + * Use Z2-CT2 as a conversion trigger instead of the built-in * software trigger, as otherwise triggering of differential channels * doesn't work properly for some versions of PCI230/260. Also set * FIFO mode because the ADC busy bit only works for software triggers. @@ -837,12 +891,16 @@ static int pci230_ai_rinsn(struct comedi_device *dev, /* Differential. */ gainshift = chan * 2; if (devpriv->hwver == 0) { - /* Original PCI230/260 expects both inputs of the - * differential channel to be enabled. */ + /* + * Original PCI230/260 expects both inputs of the + * differential channel to be enabled. + */ adcen = 3 << gainshift; } else { - /* PCI230+/260+ expects only one input of the - * differential channel to be enabled. */ + /* + * PCI230+/260+ expects only one input of the + * differential channel to be enabled. + */ adcen = 1 << gainshift; } adccon |= PCI230_ADC_IM_DIF; @@ -860,8 +918,10 @@ static int pci230_ai_rinsn(struct comedi_device *dev, adccon |= PCI230_ADC_IR_UNI; - /* Enable only this channel in the scan list - otherwise by default - * we'll get one sample from each channel. */ + /* + * Enable only this channel in the scan list - otherwise by default + * we'll get one sample from each channel. + */ outw(adcen, dev->iobase + PCI230_ADCEN); /* Set gain for channel. */ @@ -873,8 +933,10 @@ static int pci230_ai_rinsn(struct comedi_device *dev, /* Convert n samples */ for (n = 0; n < insn->n; n++) { - /* Trigger conversion by toggling Z2-CT2 output (finish with - * output high). */ + /* + * Trigger conversion by toggling Z2-CT2 output + * (finish with output high). + */ i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, 2, I8254_MODE0); i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, 2, @@ -908,13 +970,17 @@ static int pci230_ao_winsn(struct comedi_device *dev, chan = CR_CHAN(insn->chanspec); range = CR_RANGE(insn->chanspec); - /* Set range - see analogue output range table; 0 => unipolar 10V, - * 1 => bipolar +/-10V range scale */ + /* + * Set range - see analogue output range table; 0 => unipolar 10V, + * 1 => bipolar +/-10V range scale + */ devpriv->ao_bipolar = pci230_ao_bipolar[range]; outw(range, dev->iobase + PCI230_DACCON); - /* Writing a list of values to an AO channel is probably not - * very useful, but that's how the interface is defined. */ + /* + * 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++) { /* Write value to DAC and store it. */ pci230_ao_write_nofifo(dev, data[i], chan); @@ -924,8 +990,10 @@ static int pci230_ao_winsn(struct comedi_device *dev, return i; } -/* AO subdevices should have a read insn as well as a write insn. - * Usually this means copying a value stored in devpriv. */ +/* + * AO subdevices should have a read insn as well as a write insn. + * Usually this means copying a value stored in devpriv. + */ static int pci230_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) @@ -1026,10 +1094,11 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0); #define MAX_SPEED_AO 8000 /* 8000 ns => 125 kHz */ +/* + * Comedi limit due to unsigned int cmd. Driver limit = + * 2^16 (16bit * counter) * 1000000ns (1kHz onboard clock) = 65.536s + */ #define MIN_SPEED_AO 4294967295u /* 4294967295ns = 4.29s */ - /*- Comedi limit due to unsigned int cmd. Driver limit - * = 2^16 (16bit * counter) * 1000000ns (1kHz onboard - * clock) = 65.536s */ switch (cmd->scan_begin_src) { case TRIG_TIMER: @@ -1039,15 +1108,19 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, MIN_SPEED_AO); break; case TRIG_EXT: - /* External trigger - for PCI230+ hardware version 2 onwards. */ + /* + * External trigger - for PCI230+ hardware version 2 onwards. + */ /* Trigger number must be 0. */ if ((cmd->scan_begin_arg & ~CR_FLAGS_MASK) != 0) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, ~CR_FLAGS_MASK); err |= -EINVAL; } - /* The only flags allowed are CR_EDGE and CR_INVERT. The - * CR_EDGE flag is ignored. */ + /* + * The only flags allowed are CR_EDGE and CR_INVERT. + * The CR_EDGE flag is ignored. + */ if ((cmd->scan_begin_arg & (CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT))) != 0) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, @@ -1069,9 +1142,7 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, if (err) return 3; - /* Step 4: fix up any arguments. - * "argument conflict" returned by comedilib to user mode process - * if this fails. */ + /* Step 4: fix up any arguments */ if (cmd->scan_begin_src == TRIG_TIMER) { tmp = cmd->scan_begin_arg; @@ -1120,8 +1191,10 @@ static void pci230_ao_stop(struct comedi_device *dev, /* Using DAC FIFO interrupt. */ intsrc = PCI230P2_INT_DAC; } - /* Disable interrupt and wait for interrupt routine to finish running - * unless we are called from the interrupt routine. */ + /* + * Disable interrupt and wait for interrupt routine to finish running + * unless we are called from the interrupt routine. + */ spin_lock_irqsave(&devpriv->isr_spinlock, irqflags); devpriv->int_en &= ~intsrc; while (devpriv->intr_running && devpriv->intr_cpuid != THISCPU) { @@ -1134,8 +1207,10 @@ static void pci230_ao_stop(struct comedi_device *dev, } spin_unlock_irqrestore(&devpriv->isr_spinlock, irqflags); if (devpriv->hwver >= 2) { - /* Using DAC FIFO. Reset FIFO, clear underrun error, - * disable FIFO. */ + /* + * Using DAC FIFO. Reset FIFO, clear underrun error, + * disable FIFO. + */ devpriv->daccon &= PCI230_DAC_OR_MASK; outw(devpriv->daccon | PCI230P2_DAC_FIFO_RESET | PCI230P2_DAC_FIFO_UNDERRUN_CLEAR, @@ -1213,9 +1288,11 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, dev_err(dev->class_dev, "AO FIFO underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } - /* Check for buffer underrun if FIFO less than half full + /* + * Check for buffer underrun if FIFO less than half full * (otherwise there will be loads of "DAC FIFO not half full" - * interrupts). */ + * interrupts). + */ if ((num_scans == 0) && ((dacstat & PCI230P2_DAC_FIFO_HALF) == 0)) { dev_err(dev->class_dev, "AO buffer underrun\n"); @@ -1251,9 +1328,11 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, if (cmd->stop_src == TRIG_COUNT) { devpriv->ao_scan_count -= num_scans; if (devpriv->ao_scan_count == 0) { - /* All data for the command has been written + /* + * All data for the command has been written * to FIFO. Set FIFO interrupt trigger level - * to 'empty'. */ + * to 'empty'. + */ devpriv->daccon = (devpriv->daccon & ~PCI230P2_DAC_INT_FIFO_MASK) @@ -1444,8 +1523,10 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) else /* TRIG_NONE, user calls cancel */ devpriv->ao_scan_count = 0; - /* Set range - see analogue output range table; 0 => unipolar 10V, - * 1 => bipolar +/-10V range scale */ + /* + * Set range - see analogue output range table; 0 => unipolar 10V, + * 1 => bipolar +/-10V range scale + */ range = CR_RANGE(cmd->chanlist[0]); devpriv->ao_bipolar = pci230_ao_bipolar[range]; daccon = devpriv->ao_bipolar ? PCI230_DAC_OR_BIP : PCI230_DAC_OR_UNI; @@ -1480,9 +1561,11 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) & ~(PCI230P2_DAC_FIFO_RESET | PCI230P2_DAC_FIFO_UNDERRUN_CLEAR); if (cmd->scan_begin_src == TRIG_TIMER) { - /* Set the counter timer 1 to the specified scan frequency. */ - /* cmd->scan_begin_arg is sampling period in ns */ - /* gate it off for now. */ + /* + * Set the counter timer 1 to the specified scan frequency. + * cmd->scan_begin_arg is sampling period in ns. + * Gate it off for now. + */ outb(GAT_CONFIG(1, GAT_GND), devpriv->iobase1 + PCI230_ZGAT_SCE); pci230_ct_setup_ns_mode(dev, 1, I8254_MODE3, @@ -1688,17 +1771,20 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, #define MAX_SPEED_AI_SE 3200 /* PCI230 SE: 3200 ns => 312.5 kHz */ #define MAX_SPEED_AI_DIFF 8000 /* PCI230 DIFF: 8000 ns => 125 kHz */ #define MAX_SPEED_AI_PLUS 4000 /* PCI230+: 4000 ns => 250 kHz */ +/* + * Comedi limit due to unsigned int cmd. Driver limit = + * 2^16 (16bit * counter) * 1000000ns (1kHz onboard clock) = 65.536s + */ #define MIN_SPEED_AI 4294967295u /* 4294967295ns = 4.29s */ - /*- Comedi limit due to unsigned int cmd. Driver limit - * = 2^16 (16bit * counter) * 1000000ns (1kHz onboard - * clock) = 65.536s */ if (cmd->convert_src == TRIG_TIMER) { unsigned int max_speed_ai; if (devpriv->hwver == 0) { - /* PCI230 or PCI260. Max speed depends whether - * single-ended or pseudo-differential. */ + /* + * PCI230 or PCI260. Max speed depends whether + * 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) @@ -1735,8 +1821,10 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, ~CR_FLAGS_MASK); err |= -EINVAL; } - /* The only flags allowed are CR_INVERT and CR_EDGE. - * CR_EDGE is required. */ + /* + * The only flags allowed are CR_INVERT and CR_EDGE. + * CR_EDGE is required. + */ if ((cmd->convert_arg & (CR_FLAGS_MASK & ~CR_INVERT)) != CR_EDGE) { /* Set CR_EDGE, preserve CR_INVERT. */ @@ -1747,9 +1835,11 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, err |= -EINVAL; } } else { - /* Backwards compatibility with previous versions. */ - /* convert_arg == 0 => trigger on -ve edge. */ - /* convert_arg == 1 => trigger on +ve edge. */ + /* + * Backwards compatibility with previous versions: + * convert_arg == 0 => trigger on -ve edge. + * convert_arg == 1 => trigger on +ve edge. + */ err |= cfc_check_trigger_arg_max(&cmd->convert_arg, 1); } } else { @@ -1762,9 +1852,11 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); if (cmd->scan_begin_src == TRIG_EXT) { - /* external "trigger" to begin each scan + /* + * external "trigger" to begin each scan: * scan_begin_arg==0 => use PPC0 input -> gate of CT0 -> gate - * of CT2 (sample convert trigger is CT2) */ + * of CT2 (sample convert trigger is CT2) + */ if ((cmd->scan_begin_arg & ~CR_FLAGS_MASK) != 0) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, ~CR_FLAGS_MASK); @@ -1788,9 +1880,7 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, if (err) return 3; - /* Step 4: fix up any arguments. - * "argument conflict" returned by comedilib to user mode process - * if this fails. */ + /* Step 4: fix up any arguments */ if (cmd->convert_src == TRIG_TIMER) { tmp = cmd->convert_arg; @@ -1884,17 +1974,21 @@ static int pci230_ai_inttrig_convert(struct comedi_device *dev, if (test_bit(AI_CMD_STARTED, &devpriv->state)) { unsigned int delayus; - /* Trigger conversion by toggling Z2-CT2 output. Finish - * with output high. */ + /* + * Trigger conversion by toggling Z2-CT2 output. + * Finish with output high. + */ i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, 2, I8254_MODE0); i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, 2, I8254_MODE1); - /* Delay. Should driver be responsible for this? An + /* + * Delay. Should driver be responsible for this? An * alternative would be to wait until conversion is complete, * but we can't tell when it's complete because the ADC busy * bit has a different meaning when FIFO enabled (and when - * FIFO not enabled, it only works for software triggers). */ + * FIFO not enabled, it only works for software triggers). + */ if (((devpriv->adccon & PCI230_ADC_IM_MASK) == PCI230_ADC_IM_DIF) && (devpriv->hwver == 0)) { @@ -1960,8 +2054,10 @@ static void pci230_ai_stop(struct comedi_device *dev, pci230_cancel_ct(dev, 0); } spin_lock_irqsave(&devpriv->isr_spinlock, irqflags); - /* Disable ADC interrupt and wait for interrupt routine to finish - * running unless we are called from the interrupt routine. */ + /* + * Disable ADC interrupt and wait for interrupt routine to finish + * running unless we are called from the interrupt routine. + */ devpriv->int_en &= ~PCI230_INT_ADC; while (devpriv->intr_running && devpriv->intr_cpuid != THISCPU) { spin_unlock_irqrestore(&devpriv->isr_spinlock, irqflags); @@ -1972,8 +2068,10 @@ static void pci230_ai_stop(struct comedi_device *dev, outb(devpriv->ier, devpriv->iobase1 + PCI230_INT_SCE); } spin_unlock_irqrestore(&devpriv->isr_spinlock, irqflags); - /* Reset FIFO, disable FIFO and set start conversion source to none. - * Keep se/diff and bip/uni settings */ + /* + * Reset FIFO, disable FIFO and set start conversion source to none. + * Keep se/diff and bip/uni settings. + */ devpriv->adccon = (devpriv->adccon & (PCI230_ADC_IR_MASK | PCI230_ADC_IM_MASK)) | PCI230_ADC_TRIG_NONE; @@ -2006,8 +2104,10 @@ static void pci230_ai_start(struct comedi_device *dev, outb(devpriv->ier, devpriv->iobase1 + PCI230_INT_SCE); spin_unlock_irqrestore(&devpriv->isr_spinlock, irqflags); - /* Update conversion trigger source which is currently set - * to CT2 output, which is currently stuck high. */ + /* + * Update conversion trigger source which is currently set + * to CT2 output, which is currently stuck high. + */ switch (cmd->convert_src) { default: conv = PCI230_ADC_TRIG_NONE; @@ -2037,8 +2137,10 @@ static void pci230_ai_start(struct comedi_device *dev, } break; case TRIG_INT: - /* Use CT2 output for software trigger due to problems - * in differential mode on PCI230/260. */ + /* + * Use CT2 output for software trigger due to problems + * in differential mode on PCI230/260. + */ conv = PCI230_ADC_TRIG_Z2CT2; break; } @@ -2048,20 +2150,26 @@ static void pci230_ai_start(struct comedi_device *dev, if (cmd->convert_src == TRIG_INT) async->inttrig = pci230_ai_inttrig_convert; - /* Update FIFO interrupt trigger level, which is currently - * set to "full". */ + /* + * Update FIFO interrupt trigger level, which is currently + * set to "full". + */ pci230_ai_update_fifo_trigger_level(dev, s); if (cmd->convert_src == TRIG_TIMER) { /* Update timer gates. */ unsigned char zgat; if (cmd->scan_begin_src != TRIG_FOLLOW) { - /* Conversion timer CT2 needs to be gated by - * inverted output of monostable CT2. */ + /* + * Conversion timer CT2 needs to be gated by + * inverted output of monostable CT2. + */ zgat = GAT_CONFIG(2, GAT_NOUTNM2); } else { - /* Conversion timer CT2 needs to be gated on - * continuously. */ + /* + * Conversion timer CT2 needs to be gated on + * continuously. + */ zgat = GAT_CONFIG(2, GAT_VCC); } outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); @@ -2103,8 +2211,10 @@ static void pci230_ai_start(struct comedi_device *dev, outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); switch (cmd->scan_begin_src) { case TRIG_TIMER: - /* Scan period timer CT1 needs to be - * gated on to start counting. */ + /* + * Scan period timer CT1 needs to be + * gated on to start counting. + */ zgat = GAT_CONFIG(1, GAT_VCC); outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); @@ -2172,8 +2282,10 @@ static void pci230_handle_ai(struct comedi_device *dev, /* Read FIFO state. */ status_fifo = inw(dev->iobase + PCI230_ADCCON); if ((status_fifo & PCI230_ADC_FIFO_FULL_LATCHED) != 0) { - /* Report error otherwise FIFO overruns will go - * unnoticed by the caller. */ + /* + * Report error otherwise FIFO overruns will go + * unnoticed by the caller. + */ dev_err(dev->class_dev, "AI FIFO overrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; break; @@ -2247,8 +2359,10 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * Determine which shared resources are needed. */ res_mask = 0; - /* Need Z2-CT2 to supply a conversion trigger source at a high - * logic level, even if not doing timed conversions. */ + /* + * Need Z2-CT2 to supply a conversion trigger source at a high + * logic level, even if not doing timed conversions. + */ res_mask |= (1U << RES_Z2CT2); if (cmd->scan_begin_src != TRIG_FOLLOW) { /* Using Z2-CT0 monostable to gate Z2-CT2 conversion timer */ @@ -2270,7 +2384,8 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_scan_count = 0; devpriv->ai_scan_pos = 0; /* Position within scan. */ - /* Steps; + /* + * Steps: * - Set channel scan list. * - Set channel gains. * - Enable and reset FIFO, specify uni/bip, se/diff, and set @@ -2315,12 +2430,16 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (diff) { gainshift = 2 * chan; if (devpriv->hwver == 0) { - /* Original PCI230/260 expects both inputs of - * the differential channel to be enabled. */ + /* + * Original PCI230/260 expects both inputs of + * the differential channel to be enabled. + */ adcen |= 3 << gainshift; } else { - /* PCI230+/260+ expects only one input of the - * differential channel to be enabled. */ + /* + * PCI230+/260+ expects only one input of the + * differential channel to be enabled. + */ adcen |= 1 << gainshift; } } else { @@ -2337,38 +2456,48 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* Set channel gains. */ outw(devpriv->adcg, dev->iobase + PCI230_ADCG); - /* Set counter/timer 2 output high for use as the initial start - * conversion source. */ + /* + * Set counter/timer 2 output high for use as the initial start + * conversion source. + */ i8254_set_mode(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, 2, I8254_MODE1); - /* Temporarily use CT2 output as conversion trigger source and - * temporarily set FIFO interrupt trigger level to 'full'. */ + /* + * Temporarily use CT2 output as conversion trigger source and + * temporarily set FIFO interrupt trigger level to 'full'. + */ adccon |= PCI230_ADC_INT_FIFO_FULL | PCI230_ADC_TRIG_Z2CT2; - /* Enable and reset FIFO, specify FIFO trigger level full, specify + /* + * Enable and reset FIFO, specify FIFO trigger level full, specify * uni/bip, se/diff, and temporarily set the start conversion source * to CT2 output. Note that CT2 output is currently high, and this * will produce a false conversion trigger on some versions of the - * PCI230/260, but that will be dealt with later. */ + * PCI230/260, but that will be dealt with later. + */ devpriv->adccon = adccon; outw(adccon | PCI230_ADC_FIFO_RESET, dev->iobase + PCI230_ADCCON); - /* Delay */ - /* Failure to include this will result in the first few channels'-worth + /* + * Delay - + * Failure to include this will result in the first few channels'-worth * of data being corrupt, normally manifesting itself by large negative * voltages. It seems the board needs time to settle between the first * FIFO reset (above) and the second FIFO reset (below). Setting the * channel gains and scan list _before_ the first FIFO reset also - * helps, though only slightly. */ + * helps, though only slightly. + */ udelay(25); /* Reset FIFO again. */ outw(adccon | PCI230_ADC_FIFO_RESET, dev->iobase + PCI230_ADCCON); if (cmd->convert_src == TRIG_TIMER) { - /* Set up CT2 as conversion timer, but gate it off for now. + /* + * Set up CT2 as conversion timer, but gate it off for now. * Note, counter/timer output 2 can be monitored on the - * connector: PCI230 pin 21, PCI260 pin 18. */ + * connector: PCI230 pin 21, PCI260 pin 18. + */ zgat = GAT_CONFIG(2, GAT_GND); outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); /* Set counter/timer 2 to the specified conversion period. */ @@ -2442,9 +2571,11 @@ static irqreturn_t pci230_interrupt(int irq, void *d) spin_lock_irqsave(&devpriv->isr_spinlock, irqflags); valid_status_int = devpriv->int_en & status_int; - /* Disable triggered interrupts. + /* + * Disable triggered interrupts. * (Only those interrupts that need re-enabling, are, later in the - * handler). */ + * handler). + */ devpriv->ier = devpriv->int_en & ~status_int; outb(devpriv->ier, devpriv->iobase1 + PCI230_INT_SCE); devpriv->intr_running = 1; @@ -2501,8 +2632,10 @@ static bool pci230_match_pci_board(const struct pci230_board *board, /* Looking for a '+' model. First check length of registers. */ if (pci_resource_len(pci_dev, 3) < 32) return false; /* Not a '+' model. */ - /* TODO: temporarily enable PCI device and read the hardware version - * register. For now, assume it's okay. */ + /* + * TODO: temporarily enable PCI device and read the hardware version + * register. For now, assume it's okay. + */ return true; } @@ -2591,8 +2724,10 @@ static int pci230_attach_common(struct comedi_device *dev, if (rc) return rc; - /* Read base addresses of the PCI230's two I/O regions from PCI - * configuration register. */ + /* + * Read base addresses of the PCI230's two I/O regions from PCI + * configuration register. + */ iobase1 = pci_resource_start(pci_dev, 2); iobase2 = pci_resource_start(pci_dev, 3); dev_dbg(dev->class_dev, @@ -2602,8 +2737,10 @@ static int pci230_attach_common(struct comedi_device *dev, dev->iobase = iobase2; /* Read bits of DACCON register - only the output range. */ devpriv->daccon = inw(dev->iobase + PCI230_DACCON) & PCI230_DAC_OR_MASK; - /* Read hardware version register and set extended function register - * if they exist. */ + /* + * Read hardware version register and set extended function register + * if they exist. + */ if (pci_resource_len(pci_dev, 3) >= 32) { unsigned short extfunc = 0; @@ -2617,11 +2754,13 @@ static int pci230_attach_common(struct comedi_device *dev, } if (devpriv->hwver > 0) { if (!thisboard->have_dio) { - /* No DIO ports. Route counters' external gates + /* + * No DIO ports. Route counters' external gates * to the EXTTRIG signal (PCI260+ pin 17). * (Otherwise, they would be routed to DIO * inputs PC0, PC1 and PC2 which don't exist - * on PCI260[+].) */ + * on PCI260[+].) + */ extfunc |= PCI230P_EXTFUNC_GAT_EXTTRIG; } if ((thisboard->ao_chans > 0) @@ -2632,8 +2771,10 @@ static int pci230_attach_common(struct comedi_device *dev, } outw(extfunc, dev->iobase + PCI230P_EXTFUNC); if ((extfunc & PCI230P2_EXTFUNC_DACFIFO) != 0) { - /* Temporarily enable DAC FIFO, reset it and disable - * FIFO wraparound. */ + /* + * Temporarily enable DAC FIFO, reset it and disable + * FIFO wraparound. + */ outw(devpriv->daccon | PCI230P2_DAC_FIFO_EN | PCI230P2_DAC_FIFO_RESET, dev->iobase + PCI230_DACCON); -- cgit From 1446b44bedfd09a11ae97b58932fec7775f4bae1 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:10 +0100 Subject: staging: comedi: amplc_pci230: fix checkpatch line over 80 characters Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index cb86d04a3173..c6c3c4ae2263 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -664,10 +664,8 @@ static inline void pci230_ao_write_nofifo(struct comedi_device *dev, devpriv->ao_readback[chan] = datum; /* Write mangled datum to appropriate DACOUT register. */ - outw(pci230_ao_mangle_datum(dev, datum), dev->iobase + (((chan) == 0) - ? PCI230_DACOUT1 - : - PCI230_DACOUT2)); + outw(pci230_ao_mangle_datum(dev, datum), + dev->iobase + (((chan) == 0) ? PCI230_DACOUT1 : PCI230_DACOUT2)); } static inline void pci230_ao_write_fifo(struct comedi_device *dev, -- cgit From c8e8b7a15517756a6501a636f3cfccbdd17e633a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:11 +0100 Subject: staging: comedi: amplc_pci230: logical continuations should be on the previous line Fix checkpatch issues "CHECK: Logical continuations should be on the previous line". Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 33 +++++++++++++-------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index c6c3c4ae2263..0609e5149405 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -694,8 +694,8 @@ static int get_resources(struct comedi_device *dev, unsigned int res_mask, ok = 1; claimed = 0; spin_lock_irqsave(&devpriv->res_spinlock, irqflags); - for (b = 1, i = 0; (i < NUM_RESOURCES) - && (res_mask != 0); b <<= 1, i++) { + for (b = 1, i = 0; (i < NUM_RESOURCES) && (res_mask != 0); + b <<= 1, i++) { if ((res_mask & b) != 0) { res_mask &= ~b; if (devpriv->res_owner[i] == OWNER_NONE) { @@ -733,8 +733,8 @@ static void put_resources(struct comedi_device *dev, unsigned int res_mask, unsigned long irqflags; spin_lock_irqsave(&devpriv->res_spinlock, irqflags); - for (b = 1, i = 0; (i < NUM_RESOURCES) - && (res_mask != 0); b <<= 1, i++) { + for (b = 1, i = 0; (i < NUM_RESOURCES) && (res_mask != 0); + b <<= 1, i++) { if ((res_mask & b) != 0) { res_mask &= ~b; if (devpriv->res_owner[i] == owner) @@ -1291,8 +1291,8 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, * (otherwise there will be loads of "DAC FIFO not half full" * interrupts). */ - if ((num_scans == 0) - && ((dacstat & PCI230P2_DAC_FIFO_HALF) == 0)) { + if ((num_scans == 0) && + ((dacstat & PCI230P2_DAC_FIFO_HALF) == 0)) { dev_err(dev->class_dev, "AO buffer underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } @@ -1594,8 +1594,8 @@ static int pci230_ai_check_scan_period(struct comedi_cmd *cmd) chanlist_len = 1; min_scan_period = chanlist_len * cmd->convert_arg; - if ((min_scan_period < chanlist_len) - || (min_scan_period < cmd->convert_arg)) { + if ((min_scan_period < chanlist_len) || + (min_scan_period < cmd->convert_arg)) { /* Arithmetic overflow. */ min_scan_period = UINT_MAX; err++; @@ -1755,8 +1755,8 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, * If scan_begin_src is not TRIG_FOLLOW, then a monostable will be * set up to generate a fixed number of timed conversion pulses. */ - if ((cmd->scan_begin_src != TRIG_FOLLOW) - && (cmd->convert_src != TRIG_TIMER)) + if ((cmd->scan_begin_src != TRIG_FOLLOW) && + (cmd->convert_src != TRIG_TIMER)) err |= -EINVAL; if (err) @@ -1987,9 +1987,8 @@ static int pci230_ai_inttrig_convert(struct comedi_device *dev, * bit has a different meaning when FIFO enabled (and when * FIFO not enabled, it only works for software triggers). */ - if (((devpriv->adccon & PCI230_ADC_IM_MASK) - == PCI230_ADC_IM_DIF) - && (devpriv->hwver == 0)) { + if (((devpriv->adccon & PCI230_ADC_IM_MASK) == + PCI230_ADC_IM_DIF) && (devpriv->hwver == 0)) { /* PCI230/260 in differential mode */ delayus = 8; } else { @@ -2263,8 +2262,8 @@ static void pci230_handle_ai(struct comedi_device *dev, todo = PCI230_ADC_FIFOLEVEL_HALFFULL; } else if (devpriv->ai_scan_count == 0) { todo = 0; - } else if ((devpriv->ai_scan_count > PCI230_ADC_FIFOLEVEL_HALFFULL) - || (scanlen > PCI230_ADC_FIFOLEVEL_HALFFULL)) { + } else if ((devpriv->ai_scan_count > PCI230_ADC_FIFOLEVEL_HALFFULL) || + (scanlen > PCI230_ADC_FIFOLEVEL_HALFFULL)) { todo = PCI230_ADC_FIFOLEVEL_HALFFULL; } else { todo = (devpriv->ai_scan_count * scanlen) @@ -2761,8 +2760,8 @@ static int pci230_attach_common(struct comedi_device *dev, */ extfunc |= PCI230P_EXTFUNC_GAT_EXTTRIG; } - if ((thisboard->ao_chans > 0) - && (devpriv->hwver >= 2)) { + if ((thisboard->ao_chans > 0) && + (devpriv->hwver >= 2)) { /* Enable DAC FIFO functionality. */ extfunc |= PCI230P2_EXTFUNC_DACFIFO; } -- cgit From 16de83f53aeb376e65f15bc717d4582068c371f5 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:12 +0100 Subject: staging: comedi: amplc_pci230: blank lines aren't necessary before a close brace '}' Fix checkpatch issues: "CHECK: Blank lines aren't necessary before a close brace '}'". Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 0609e5149405..51f28b6a05d9 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -739,7 +739,6 @@ static void put_resources(struct comedi_device *dev, unsigned int res_mask, res_mask &= ~b; if (devpriv->res_owner[i] == owner) devpriv->res_owner[i] = OWNER_NONE; - } } spin_unlock_irqrestore(&devpriv->res_spinlock, irqflags); @@ -792,7 +791,6 @@ static unsigned int pci230_choose_clk_count(uint64_t ns, unsigned int *count, cnt = divide_ns(ns, pci230_timebase[clk_src], flags); if ((cnt <= 65536) || (clk_src == CLK_1KHZ)) break; - } *count = cnt; return clk_src; @@ -1448,7 +1446,6 @@ static void pci230_ao_start(struct comedi_device *dev, & ~PCI230P2_DAC_TRIG_MASK) | scantrig; outw(devpriv->daccon, dev->iobase + PCI230_DACCON); - } switch (cmd->scan_begin_src) { case TRIG_TIMER: @@ -1512,7 +1509,6 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* Claim Z2-CT1. */ if (!get_one_resource(dev, RES_Z2CT1, OWNER_AOCMD)) return -EBUSY; - } /* Get number of scans required. */ -- cgit From 9fd8fc3fd0f199a0aadda393b13541aec585175b Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:13 +0100 Subject: staging: comedi: amplc_pci230: alignment should match open parenthesis Fix checkpatch issue: "CHECK: Alignment should match open parenthesis". Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 51f28b6a05d9..76c4625991b2 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -2872,7 +2872,7 @@ static int pci230_attach(struct comedi_device *dev, struct comedi_devconfig *it) } static int pci230_auto_attach(struct comedi_device *dev, - unsigned long context_unused) + unsigned long context_unused) { struct pci_dev *pci_dev = comedi_to_pci_dev(dev); int rc; -- cgit From e3f59e1c5f48bf1ba07467ff83bf8d889e273c8a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:14 +0100 Subject: staging: comedi: amplc_pci230: usleep_range is preferred over udelay Fix checkpatch issue: "CHECK: usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt". I picked 100 us as a reasonable upper bound, but it's not that critical. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 76c4625991b2..00d7a2277e85 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -2480,7 +2480,7 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * channel gains and scan list _before_ the first FIFO reset also * helps, though only slightly. */ - udelay(25); + usleep_range(25, 100); /* Reset FIFO again. */ outw(adccon | PCI230_ADC_FIFO_RESET, dev->iobase + PCI230_ADCCON); -- cgit From ad501004d61f542c7cc5fce965e407dc05e2cbda Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:15 +0100 Subject: staging: comedi: amplc_pci230: remove unused settling time constants The macro constants `PCI230_DAC_SETTLE`, `PCI230_ADC_SETTLE` and `PCI230_MUX_SETTLE` are never used. Just remove them. Signed-off-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 00d7a2277e85..7983a0d53928 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -246,19 +246,6 @@ #define PCI230P2_DACSWTRIG 0x02 /* DAC soft trigger (FIFO mode) (r) */ #define PCI230P2_DACEN 0x06 /* DAC channel enable (FIFO mode) */ -/* - * Convertor related constants. - */ -/* Analogue output settling time in µs (DAC itself is 1µs nominally). */ -#define PCI230_DAC_SETTLE 5 -/* - * Analogue input settling time in µs (ADC itself is 1.6µs nominally but we - * poll anyway). - */ -#define PCI230_ADC_SETTLE 1 -/* ADC MUX settling time in µS - 10µs for se, 20µs de. */ -#define PCI230_MUX_SETTLE 10 - /* * DACCON read-write values. */ -- cgit From e58dbebcc79c9ac92c77448eadf294533aa7cf50 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:16 +0100 Subject: staging: comedi: amplc_pci230: remove PCI230_ADC_CONV The macro `PCI230_ADC_CONV` is never used. Just remove it. (At one time, the value was written to the `PCI230_ADCSWTRIG` register to trigger a conversion, but any value would do, and the driver no longer uses that register to trigger conversions anyway.) Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 7983a0d53928..e6744a5e0189 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -361,12 +361,6 @@ #define PCI230_ADC_FIFOLEVEL_HALFFULL 2049 /* Value for FIFO half full */ #define PCI230_ADC_FIFOLEVEL_FULL 4096 /* FIFO size */ -/* - * Value to write to ADCSWTRIG to trigger ADC conversion in software trigger - * mode. Can be anything. - */ -#define PCI230_ADC_CONV 0xffff - /* * PCI230+ EXTFUNC values. */ -- cgit From 5c165423bcb92ecd8aba93af25823ee567fb0280 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:17 +0100 Subject: staging: comedi: amplc_pci230: remove PCI230_TEST_BIT() The `PCI230_TEST_BIT()` macro is never used. Remove it. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index e6744a5e0189..f94b542ca76d 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -423,9 +423,6 @@ /* For PCI230+ hardware version 2 when DAC FIFO enabled. */ #define PCI230P2_INT_DAC (1<<4) -/* Assumes bits numbered with zero offset, ie. 0-15 */ -#define PCI230_TEST_BIT(val, n) ((val>>n)&1) - /* * (Potentially) shared resources and their owners */ -- cgit From 8b39e8e973f91f9b80ba1a42e9be7e24eb040081 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:18 +0100 Subject: staging: comedi: amplc_pci230: add whitespace to register values Several macros are defined for bit-field values within hardware registers. They are defined as left-shifted values. Add some whitespace around the left-shift operator. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 128 +++++++++++++------------- 1 file changed, 64 insertions(+), 64 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index f94b542ca76d..4d3d3cbfe3a2 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -249,47 +249,47 @@ /* * DACCON read-write values. */ -#define PCI230_DAC_OR_UNI (0<<0) /* Output range unipolar */ -#define PCI230_DAC_OR_BIP (1<<0) /* Output range bipolar */ -#define PCI230_DAC_OR_MASK (1<<0) +#define PCI230_DAC_OR_UNI (0 << 0) /* Output range unipolar */ +#define PCI230_DAC_OR_BIP (1 << 0) /* Output range bipolar */ +#define PCI230_DAC_OR_MASK (1 << 0) /* * The following applies only if DAC FIFO support is enabled in the EXTFUNC * register (and only for PCI230+ hardware version 2 onwards). */ -#define PCI230P2_DAC_FIFO_EN (1<<8) /* FIFO enable */ +#define PCI230P2_DAC_FIFO_EN (1 << 8) /* FIFO enable */ /* * The following apply only if the DAC FIFO is enabled (and only for PCI230+ * hardware version 2 onwards). */ -#define PCI230P2_DAC_TRIG_NONE (0<<2) /* No trigger */ -#define PCI230P2_DAC_TRIG_SW (1<<2) /* Software trigger trigger */ -#define PCI230P2_DAC_TRIG_EXTP (2<<2) /* EXTTRIG +ve edge trigger */ -#define PCI230P2_DAC_TRIG_EXTN (3<<2) /* EXTTRIG -ve edge trigger */ -#define PCI230P2_DAC_TRIG_Z2CT0 (4<<2) /* CT0-OUT +ve edge trigger */ -#define PCI230P2_DAC_TRIG_Z2CT1 (5<<2) /* CT1-OUT +ve edge trigger */ -#define PCI230P2_DAC_TRIG_Z2CT2 (6<<2) /* CT2-OUT +ve edge trigger */ -#define PCI230P2_DAC_TRIG_MASK (7<<2) -#define PCI230P2_DAC_FIFO_WRAP (1<<7) /* FIFO wraparound mode */ -#define PCI230P2_DAC_INT_FIFO_EMPTY (0<<9) /* FIFO interrupt empty */ -#define PCI230P2_DAC_INT_FIFO_NEMPTY (1<<9) -#define PCI230P2_DAC_INT_FIFO_NHALF (2<<9) /* FIFO intr not half full */ -#define PCI230P2_DAC_INT_FIFO_HALF (3<<9) -#define PCI230P2_DAC_INT_FIFO_NFULL (4<<9) /* FIFO interrupt not full */ -#define PCI230P2_DAC_INT_FIFO_FULL (5<<9) -#define PCI230P2_DAC_INT_FIFO_MASK (7<<9) +#define PCI230P2_DAC_TRIG_NONE (0 << 2) /* No trigger */ +#define PCI230P2_DAC_TRIG_SW (1 << 2) /* Software trigger trigger */ +#define PCI230P2_DAC_TRIG_EXTP (2 << 2) /* EXTTRIG +ve edge trigger */ +#define PCI230P2_DAC_TRIG_EXTN (3 << 2) /* EXTTRIG -ve edge trigger */ +#define PCI230P2_DAC_TRIG_Z2CT0 (4 << 2) /* CT0-OUT +ve edge trigger */ +#define PCI230P2_DAC_TRIG_Z2CT1 (5 << 2) /* CT1-OUT +ve edge trigger */ +#define PCI230P2_DAC_TRIG_Z2CT2 (6 << 2) /* CT2-OUT +ve edge trigger */ +#define PCI230P2_DAC_TRIG_MASK (7 << 2) +#define PCI230P2_DAC_FIFO_WRAP (1 << 7) /* FIFO wraparound mode */ +#define PCI230P2_DAC_INT_FIFO_EMPTY (0 << 9) /* FIFO interrupt empty */ +#define PCI230P2_DAC_INT_FIFO_NEMPTY (1 << 9) +#define PCI230P2_DAC_INT_FIFO_NHALF (2 << 9) /* FIFO intr not half full */ +#define PCI230P2_DAC_INT_FIFO_HALF (3 << 9) +#define PCI230P2_DAC_INT_FIFO_NFULL (4 << 9) /* FIFO interrupt not full */ +#define PCI230P2_DAC_INT_FIFO_FULL (5 << 9) +#define PCI230P2_DAC_INT_FIFO_MASK (7 << 9) /* * DACCON read-only values. */ -#define PCI230_DAC_BUSY (1<<1) /* DAC busy. */ +#define PCI230_DAC_BUSY (1 << 1) /* DAC busy. */ /* * The following apply only if the DAC FIFO is enabled (and only for PCI230+ * hardware version 2 onwards). */ -#define PCI230P2_DAC_FIFO_UNDERRUN_LATCHED (1<<5) /* Underrun error */ -#define PCI230P2_DAC_FIFO_EMPTY (1<<13) /* FIFO empty */ -#define PCI230P2_DAC_FIFO_FULL (1<<14) /* FIFO full */ -#define PCI230P2_DAC_FIFO_HALF (1<<15) /* FIFO half full */ +#define PCI230P2_DAC_FIFO_UNDERRUN_LATCHED (1 << 5) /* Underrun error */ +#define PCI230P2_DAC_FIFO_EMPTY (1 << 13) /* FIFO empty */ +#define PCI230P2_DAC_FIFO_FULL (1 << 14) /* FIFO full */ +#define PCI230P2_DAC_FIFO_HALF (1 << 15) /* FIFO half full */ /* * DACCON write-only, transient values. @@ -298,8 +298,8 @@ * The following apply only if the DAC FIFO is enabled (and only for PCI230+ * hardware version 2 onwards). */ -#define PCI230P2_DAC_FIFO_UNDERRUN_CLEAR (1<<5) /* Clear underrun */ -#define PCI230P2_DAC_FIFO_RESET (1<<12) /* FIFO reset */ +#define PCI230P2_DAC_FIFO_UNDERRUN_CLEAR (1 << 5) /* Clear underrun */ +#define PCI230P2_DAC_FIFO_RESET (1 << 12) /* FIFO reset */ /* * PCI230+ hardware version 2 DAC FIFO levels. @@ -316,44 +316,44 @@ /* * ADCCON read/write values. */ -#define PCI230_ADC_TRIG_NONE (0<<0) /* No trigger */ -#define PCI230_ADC_TRIG_SW (1<<0) /* Software trigger trigger */ -#define PCI230_ADC_TRIG_EXTP (2<<0) /* EXTTRIG +ve edge trigger */ -#define PCI230_ADC_TRIG_EXTN (3<<0) /* EXTTRIG -ve edge trigger */ -#define PCI230_ADC_TRIG_Z2CT0 (4<<0) /* CT0-OUT +ve edge trigger */ -#define PCI230_ADC_TRIG_Z2CT1 (5<<0) /* CT1-OUT +ve edge trigger */ -#define PCI230_ADC_TRIG_Z2CT2 (6<<0) /* CT2-OUT +ve edge trigger */ -#define PCI230_ADC_TRIG_MASK (7<<0) -#define PCI230_ADC_IR_UNI (0<<3) /* Input range unipolar */ -#define PCI230_ADC_IR_BIP (1<<3) /* Input range bipolar */ -#define PCI230_ADC_IR_MASK (1<<3) -#define PCI230_ADC_IM_SE (0<<4) /* Input mode single ended */ -#define PCI230_ADC_IM_DIF (1<<4) /* Input mode differential */ -#define PCI230_ADC_IM_MASK (1<<4) -#define PCI230_ADC_FIFO_EN (1<<8) /* FIFO enable */ -#define PCI230_ADC_INT_FIFO_EMPTY (0<<9) -#define PCI230_ADC_INT_FIFO_NEMPTY (1<<9) /* FIFO interrupt not empty */ -#define PCI230_ADC_INT_FIFO_NHALF (2<<9) -#define PCI230_ADC_INT_FIFO_HALF (3<<9) /* FIFO interrupt half full */ -#define PCI230_ADC_INT_FIFO_NFULL (4<<9) -#define PCI230_ADC_INT_FIFO_FULL (5<<9) /* FIFO interrupt full */ -#define PCI230P_ADC_INT_FIFO_THRESH (7<<9) /* FIFO interrupt threshold */ -#define PCI230_ADC_INT_FIFO_MASK (7<<9) +#define PCI230_ADC_TRIG_NONE (0 << 0) /* No trigger */ +#define PCI230_ADC_TRIG_SW (1 << 0) /* Software trigger trigger */ +#define PCI230_ADC_TRIG_EXTP (2 << 0) /* EXTTRIG +ve edge trigger */ +#define PCI230_ADC_TRIG_EXTN (3 << 0) /* EXTTRIG -ve edge trigger */ +#define PCI230_ADC_TRIG_Z2CT0 (4 << 0) /* CT0-OUT +ve edge trigger */ +#define PCI230_ADC_TRIG_Z2CT1 (5 << 0) /* CT1-OUT +ve edge trigger */ +#define PCI230_ADC_TRIG_Z2CT2 (6 << 0) /* CT2-OUT +ve edge trigger */ +#define PCI230_ADC_TRIG_MASK (7 << 0) +#define PCI230_ADC_IR_UNI (0 << 3) /* Input range unipolar */ +#define PCI230_ADC_IR_BIP (1 << 3) /* Input range bipolar */ +#define PCI230_ADC_IR_MASK (1 << 3) +#define PCI230_ADC_IM_SE (0 << 4) /* Input mode single ended */ +#define PCI230_ADC_IM_DIF (1 << 4) /* Input mode differential */ +#define PCI230_ADC_IM_MASK (1 << 4) +#define PCI230_ADC_FIFO_EN (1 << 8) /* FIFO enable */ +#define PCI230_ADC_INT_FIFO_EMPTY (0 << 9) +#define PCI230_ADC_INT_FIFO_NEMPTY (1 << 9) /* FIFO interrupt not empty */ +#define PCI230_ADC_INT_FIFO_NHALF (2 << 9) +#define PCI230_ADC_INT_FIFO_HALF (3 << 9) /* FIFO interrupt half full */ +#define PCI230_ADC_INT_FIFO_NFULL (4 << 9) +#define PCI230_ADC_INT_FIFO_FULL (5 << 9) /* FIFO interrupt full */ +#define PCI230P_ADC_INT_FIFO_THRESH (7 << 9) /* FIFO interrupt threshold */ +#define PCI230_ADC_INT_FIFO_MASK (7 << 9) /* * ADCCON write-only, transient values. */ -#define PCI230_ADC_FIFO_RESET (1<<12) /* FIFO reset */ -#define PCI230_ADC_GLOB_RESET (1<<13) /* Global reset */ +#define PCI230_ADC_FIFO_RESET (1 << 12) /* FIFO reset */ +#define PCI230_ADC_GLOB_RESET (1 << 13) /* Global reset */ /* * ADCCON read-only values. */ -#define PCI230_ADC_BUSY (1<<15) /* ADC busy */ -#define PCI230_ADC_FIFO_EMPTY (1<<12) /* FIFO empty */ -#define PCI230_ADC_FIFO_FULL (1<<13) /* FIFO full */ -#define PCI230_ADC_FIFO_HALF (1<<14) /* FIFO half full */ -#define PCI230_ADC_FIFO_FULL_LATCHED (1<<5) /* Indicates overrun occurred */ +#define PCI230_ADC_BUSY (1 << 15) /* ADC busy */ +#define PCI230_ADC_FIFO_EMPTY (1 << 12) /* FIFO empty */ +#define PCI230_ADC_FIFO_FULL (1 << 13) /* FIFO full */ +#define PCI230_ADC_FIFO_HALF (1 << 14) /* FIFO half full */ +#define PCI230_ADC_FIFO_FULL_LATCHED (1 << 5) /* FIFO overrun occurred */ /* * PCI230 ADC FIFO levels. @@ -365,10 +365,10 @@ * PCI230+ EXTFUNC values. */ /* Route EXTTRIG pin to external gate inputs. */ -#define PCI230P_EXTFUNC_GAT_EXTTRIG (1<<0) +#define PCI230P_EXTFUNC_GAT_EXTTRIG (1 << 0) /* PCI230+ hardware version 2 values. */ /* Allow DAC FIFO to be enabled. */ -#define PCI230P2_EXTFUNC_DACFIFO (1<<1) +#define PCI230P2_EXTFUNC_DACFIFO (1 << 1) /* * Counter/timer clock input configuration sources. @@ -416,12 +416,12 @@ * Interrupt enables/status register values. */ #define PCI230_INT_DISABLE 0 -#define PCI230_INT_PPI_C0 (1<<0) -#define PCI230_INT_PPI_C3 (1<<1) -#define PCI230_INT_ADC (1<<2) -#define PCI230_INT_ZCLK_CT1 (1<<5) +#define PCI230_INT_PPI_C0 (1 << 0) +#define PCI230_INT_PPI_C3 (1 << 1) +#define PCI230_INT_ADC (1 << 2) +#define PCI230_INT_ZCLK_CT1 (1 << 5) /* For PCI230+ hardware version 2 when DAC FIFO enabled. */ -#define PCI230P2_INT_DAC (1<<4) +#define PCI230P2_INT_DAC (1 << 4) /* * (Potentially) shared resources and their owners -- cgit From 76cb39e014da351eebfdfa77dc69e4978ebcb6b2 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:19 +0100 Subject: staging: comedi: amplc_pci230: don't begin line with binary operator If an expression involving a binary operator needs to be split across two lines, put the split after the operator. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 86 +++++++++++++-------------- 1 file changed, 43 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 4d3d3cbfe3a2..311c4974439b 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -682,8 +682,8 @@ static int get_resources(struct comedi_device *dev, unsigned int res_mask, } else if (devpriv->res_owner[i] != owner) { for (b = 1, i = 0; claimed != 0; b <<= 1, i++) { if ((claimed & b) != 0) { - devpriv->res_owner[i] - = OWNER_NONE; + devpriv->res_owner[i] = + OWNER_NONE; claimed &= ~b; } } @@ -884,8 +884,8 @@ static int pci230_ai_rinsn(struct comedi_device *dev, gainshift = chan & ~1; adccon |= PCI230_ADC_IM_SE; } - devpriv->adcg = (devpriv->adcg & ~(3 << gainshift)) - | (pci230_ai_gain[range] << gainshift); + devpriv->adcg = (devpriv->adcg & ~(3 << gainshift)) | + (pci230_ai_gain[range] << gainshift); if (devpriv->ai_bipolar) adccon |= PCI230_ADC_IR_BIP; else @@ -1095,8 +1095,8 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, * The only flags allowed are CR_EDGE and CR_INVERT. * The CR_EDGE flag is ignored. */ - if ((cmd->scan_begin_arg - & (CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT))) != 0) { + if ((cmd->scan_begin_arg & + (CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT))) != 0) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT)); @@ -1186,8 +1186,8 @@ static void pci230_ao_stop(struct comedi_device *dev, * disable FIFO. */ devpriv->daccon &= PCI230_DAC_OR_MASK; - outw(devpriv->daccon | PCI230P2_DAC_FIFO_RESET - | PCI230P2_DAC_FIFO_UNDERRUN_CLEAR, + outw(devpriv->daccon | PCI230P2_DAC_FIFO_RESET | + PCI230P2_DAC_FIFO_UNDERRUN_CLEAR, dev->iobase + PCI230_DACCON); } /* Release resources. */ @@ -1307,10 +1307,10 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, * to FIFO. Set FIFO interrupt trigger level * to 'empty'. */ - devpriv->daccon = (devpriv->daccon - & - ~PCI230P2_DAC_INT_FIFO_MASK) - | PCI230P2_DAC_INT_FIFO_EMPTY; + devpriv->daccon = + (devpriv->daccon & + ~PCI230P2_DAC_INT_FIFO_MASK) | + PCI230P2_DAC_INT_FIFO_EMPTY; outw(devpriv->daccon, dev->iobase + PCI230_DACCON); } @@ -1322,8 +1322,8 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } } - if ((events & (COMEDI_CB_EOA | COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW)) - != 0) { + if ((events & + (COMEDI_CB_EOA | COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW)) != 0) { /* Stopping AO due to completion or error. */ pci230_ao_stop(dev, s); running = 0; @@ -1420,8 +1420,8 @@ static void pci230_ao_start(struct comedi_device *dev, scantrig = PCI230P2_DAC_TRIG_NONE; break; } - devpriv->daccon = (devpriv->daccon - & ~PCI230P2_DAC_TRIG_MASK) | + devpriv->daccon = + (devpriv->daccon & ~PCI230P2_DAC_TRIG_MASK) | scantrig; outw(devpriv->daccon, dev->iobase + PCI230_DACCON); } @@ -1521,16 +1521,16 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * * N.B. DAC FIFO interrupts are currently disabled. */ - daccon |= PCI230P2_DAC_FIFO_EN | PCI230P2_DAC_FIFO_RESET - | PCI230P2_DAC_FIFO_UNDERRUN_CLEAR - | PCI230P2_DAC_TRIG_NONE | PCI230P2_DAC_INT_FIFO_NHALF; + daccon |= PCI230P2_DAC_FIFO_EN | PCI230P2_DAC_FIFO_RESET | + PCI230P2_DAC_FIFO_UNDERRUN_CLEAR | + PCI230P2_DAC_TRIG_NONE | PCI230P2_DAC_INT_FIFO_NHALF; } /* Set DACCON. */ outw(daccon, dev->iobase + PCI230_DACCON); /* Preserve most of DACCON apart from write-only, transient bits. */ - devpriv->daccon = daccon - & ~(PCI230P2_DAC_FIFO_RESET | PCI230P2_DAC_FIFO_UNDERRUN_CLEAR); + devpriv->daccon = daccon & ~(PCI230P2_DAC_FIFO_RESET | + PCI230P2_DAC_FIFO_UNDERRUN_CLEAR); if (cmd->scan_begin_src == TRIG_TIMER) { /* @@ -1797,8 +1797,8 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, * The only flags allowed are CR_INVERT and CR_EDGE. * CR_EDGE is required. */ - if ((cmd->convert_arg & (CR_FLAGS_MASK & ~CR_INVERT)) - != CR_EDGE) { + if ((cmd->convert_arg & + (CR_FLAGS_MASK & ~CR_INVERT)) != CR_EDGE) { /* Set CR_EDGE, preserve CR_INVERT. */ cmd->convert_arg = COMBINE(cmd->start_arg, (CR_EDGE | 0), @@ -1907,8 +1907,8 @@ static void pci230_ai_update_fifo_trigger_level(struct comedi_device *dev, scanlen >= PCI230_ADC_FIFOLEVEL_HALFFULL) { wake = PCI230_ADC_FIFOLEVEL_HALFFULL; } else { - wake = (devpriv->ai_scan_count * scanlen) - - devpriv->ai_scan_pos; + wake = (devpriv->ai_scan_count * scanlen) - + devpriv->ai_scan_pos; } } if (wake >= PCI230_ADC_FIFOLEVEL_HALFFULL) { @@ -2043,8 +2043,8 @@ static void pci230_ai_stop(struct comedi_device *dev, * Reset FIFO, disable FIFO and set start conversion source to none. * Keep se/diff and bip/uni settings. */ - devpriv->adccon = (devpriv->adccon & (PCI230_ADC_IR_MASK - | PCI230_ADC_IM_MASK)) | + devpriv->adccon = + (devpriv->adccon & (PCI230_ADC_IR_MASK | PCI230_ADC_IM_MASK)) | PCI230_ADC_TRIG_NONE; outw(devpriv->adccon | PCI230_ADC_FIFO_RESET, dev->iobase + PCI230_ADCCON); @@ -2115,8 +2115,8 @@ static void pci230_ai_start(struct comedi_device *dev, conv = PCI230_ADC_TRIG_Z2CT2; break; } - devpriv->adccon = (devpriv->adccon & ~PCI230_ADC_TRIG_MASK) - | conv; + devpriv->adccon = + (devpriv->adccon & ~PCI230_ADC_TRIG_MASK) | conv; outw(devpriv->adccon, dev->iobase + PCI230_ADCCON); if (cmd->convert_src == TRIG_INT) async->inttrig = pci230_ai_inttrig_convert; @@ -2187,8 +2187,8 @@ static void pci230_ai_start(struct comedi_device *dev, * gated on to start counting. */ zgat = GAT_CONFIG(1, GAT_VCC); - outb(zgat, devpriv->iobase1 - + PCI230_ZGAT_SCE); + outb(zgat, devpriv->iobase1 + + PCI230_ZGAT_SCE); break; case TRIG_INT: async->inttrig = @@ -2240,8 +2240,8 @@ static void pci230_handle_ai(struct comedi_device *dev, (scanlen > PCI230_ADC_FIFOLEVEL_HALFFULL)) { todo = PCI230_ADC_FIFOLEVEL_HALFFULL; } else { - todo = (devpriv->ai_scan_count * scanlen) - - devpriv->ai_scan_pos; + todo = (devpriv->ai_scan_count * scanlen) - + devpriv->ai_scan_pos; if (todo > PCI230_ADC_FIFOLEVEL_HALFFULL) todo = PCI230_ADC_FIFOLEVEL_HALFFULL; } @@ -2270,8 +2270,8 @@ static void pci230_handle_ai(struct comedi_device *dev, /* FIFO not empty. */ if (devpriv->hwver > 0) { /* Read PCI230+/260+ ADC FIFO level. */ - fifoamount = inw(dev->iobase - + PCI230P_ADCFFLEV); + fifoamount = + inw(dev->iobase + PCI230P_ADCFFLEV); if (fifoamount == 0) { /* Shouldn't happen. */ break; @@ -2417,8 +2417,8 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) gainshift = (chan & ~1); adcen |= 1 << chan; } - devpriv->adcg = (devpriv->adcg & ~(3 << gainshift)) - | (pci230_ai_gain[range] << gainshift); + devpriv->adcg = (devpriv->adcg & ~(3 << gainshift)) | + (pci230_ai_gain[range] << gainshift); } /* Set channel scan list. */ @@ -2490,8 +2490,8 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) zgat = GAT_CONFIG(0, GAT_VCC); outb(zgat, devpriv->iobase1 + PCI230_ZGAT_SCE); pci230_ct_setup_ns_mode(dev, 0, I8254_MODE1, - ((uint64_t) cmd->convert_arg - * cmd->scan_end_arg), + ((uint64_t)cmd->convert_arg * + cmd->scan_end_arg), TRIG_ROUND_UP); if (cmd->scan_begin_src == TRIG_TIMER) { /* @@ -2746,8 +2746,8 @@ static int pci230_attach_common(struct comedi_device *dev, * Temporarily enable DAC FIFO, reset it and disable * FIFO wraparound. */ - outw(devpriv->daccon | PCI230P2_DAC_FIFO_EN - | PCI230P2_DAC_FIFO_RESET, + outw(devpriv->daccon | PCI230P2_DAC_FIFO_EN | + PCI230P2_DAC_FIFO_RESET, dev->iobase + PCI230_DACCON); /* Clear DAC FIFO channel enable register. */ outw(0, dev->iobase + PCI230P2_DACEN); @@ -2759,8 +2759,8 @@ static int pci230_attach_common(struct comedi_device *dev, outb(0, devpriv->iobase1 + PCI230_INT_SCE); /* Set ADC to a reasonable state. */ devpriv->adcg = 0; - devpriv->adccon = PCI230_ADC_TRIG_NONE | PCI230_ADC_IM_SE - | PCI230_ADC_IR_BIP; + devpriv->adccon = PCI230_ADC_TRIG_NONE | PCI230_ADC_IM_SE | + PCI230_ADC_IR_BIP; outw(1 << 0, dev->iobase + PCI230_ADCEN); outw(devpriv->adcg, dev->iobase + PCI230_ADCG); outw(devpriv->adccon | PCI230_ADC_FIFO_RESET, -- cgit From a190d26a0d1eee141de3bf690eb3e4ab05203efd Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:20 +0100 Subject: staging: comedi: amplc_pci230: omit '!= 0' from logical expressions Since anything non-zero is logically "true", don't bother doing "not-equal" comparisons with zero. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 75 +++++++++++++-------------- 1 file changed, 36 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 311c4974439b..4222e2852722 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -672,16 +672,15 @@ static int get_resources(struct comedi_device *dev, unsigned int res_mask, ok = 1; claimed = 0; spin_lock_irqsave(&devpriv->res_spinlock, irqflags); - for (b = 1, i = 0; (i < NUM_RESOURCES) && (res_mask != 0); - b <<= 1, i++) { - if ((res_mask & b) != 0) { + for (b = 1, i = 0; (i < NUM_RESOURCES) && res_mask; b <<= 1, i++) { + if (res_mask & b) { res_mask &= ~b; if (devpriv->res_owner[i] == OWNER_NONE) { devpriv->res_owner[i] = owner; claimed |= b; } else if (devpriv->res_owner[i] != owner) { - for (b = 1, i = 0; claimed != 0; b <<= 1, i++) { - if ((claimed & b) != 0) { + for (b = 1, i = 0; claimed; b <<= 1, i++) { + if (claimed & b) { devpriv->res_owner[i] = OWNER_NONE; claimed &= ~b; @@ -711,9 +710,8 @@ static void put_resources(struct comedi_device *dev, unsigned int res_mask, unsigned long irqflags; spin_lock_irqsave(&devpriv->res_spinlock, irqflags); - for (b = 1, i = 0; (i < NUM_RESOURCES) && (res_mask != 0); - b <<= 1, i++) { - if ((res_mask & b) != 0) { + for (b = 1, i = 0; (i < NUM_RESOURCES) && res_mask; b <<= 1, i++) { + if (res_mask & b) { res_mask &= ~b; if (devpriv->res_owner[i] == owner) devpriv->res_owner[i] = OWNER_NONE; @@ -1086,7 +1084,7 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, * External trigger - for PCI230+ hardware version 2 onwards. */ /* Trigger number must be 0. */ - if ((cmd->scan_begin_arg & ~CR_FLAGS_MASK) != 0) { + if (cmd->scan_begin_arg & ~CR_FLAGS_MASK) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, ~CR_FLAGS_MASK); err |= -EINVAL; @@ -1095,8 +1093,8 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, * The only flags allowed are CR_EDGE and CR_INVERT. * The CR_EDGE flag is ignored. */ - if ((cmd->scan_begin_arg & - (CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT))) != 0) { + if (cmd->scan_begin_arg & + (CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT))) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, CR_FLAGS_MASK & ~(CR_EDGE | CR_INVERT)); @@ -1258,7 +1256,7 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, } if (events == 0) { /* Check for FIFO underrun. */ - if ((dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) != 0) { + if (dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) { dev_err(dev->class_dev, "AO FIFO underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } @@ -1275,11 +1273,11 @@ 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) room = PCI230P2_DAC_FIFOROOM_FULL; - else if ((dacstat & PCI230P2_DAC_FIFO_HALF) != 0) + else if (dacstat & PCI230P2_DAC_FIFO_HALF) room = PCI230P2_DAC_FIFOROOM_HALFTOFULL; - else if ((dacstat & PCI230P2_DAC_FIFO_EMPTY) != 0) + else if (dacstat & PCI230P2_DAC_FIFO_EMPTY) room = PCI230P2_DAC_FIFOROOM_EMPTY; else room = PCI230P2_DAC_FIFOROOM_ONETOHALF; @@ -1317,13 +1315,12 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, } /* Check if FIFO underrun occurred while writing to FIFO. */ dacstat = inw(dev->iobase + PCI230_DACCON); - if ((dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) != 0) { + if (dacstat & PCI230P2_DAC_FIFO_UNDERRUN_LATCHED) { dev_err(dev->class_dev, "AO FIFO underrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; } } - if ((events & - (COMEDI_CB_EOA | COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW)) != 0) { + if (events & (COMEDI_CB_EOA | COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW)) { /* Stopping AO due to completion or error. */ pci230_ao_stop(dev, s); running = 0; @@ -1341,7 +1338,7 @@ static int pci230_ao_inttrig_scan_begin(struct comedi_device *dev, struct pci230_private *devpriv = dev->private; unsigned long irqflags; - if (trig_num != 0) + if (trig_num) return -EINVAL; spin_lock_irqsave(&devpriv->ao_stop_spinlock, irqflags); @@ -1656,7 +1653,7 @@ static int pci230_ai_check_chanlist(struct comedi_device *dev, if (subseq_len == 0) subseq_len = cmd->chanlist_len; - if ((cmd->chanlist_len % subseq_len) != 0) { + if (cmd->chanlist_len % subseq_len) { dev_dbg(dev->class_dev, "%s: sequence must repeat exactly\n", __func__); return -EINVAL; @@ -1674,7 +1671,7 @@ static int pci230_ai_check_chanlist(struct comedi_device *dev, * the bug, but the second one does, and we can't tell them apart! */ if (devpriv->hwver > 0 && devpriv->hwver < 4) { - if (subseq_len > 1 && CR_CHAN(cmd->chanlist[0]) != 0) { + if (subseq_len > 1 && CR_CHAN(cmd->chanlist[0])) { dev_info(dev->class_dev, "amplc_pci230: ai_cmdtest: Buggy PCI230+/260+ h/w version %u requires first channel of multi-channel sequence to be 0 (corrected in h/w version 4)\n", devpriv->hwver); @@ -1786,9 +1783,9 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, * convert_arg == (CR_EDGE | CR_INVERT | 0) * => trigger on -ve edge. */ - if ((cmd->convert_arg & CR_FLAGS_MASK) != 0) { + if (cmd->convert_arg & CR_FLAGS_MASK) { /* Trigger number must be 0. */ - if ((cmd->convert_arg & ~CR_FLAGS_MASK) != 0) { + if (cmd->convert_arg & ~CR_FLAGS_MASK) { cmd->convert_arg = COMBINE(cmd->convert_arg, 0, ~CR_FLAGS_MASK); err |= -EINVAL; @@ -1829,13 +1826,13 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, * scan_begin_arg==0 => use PPC0 input -> gate of CT0 -> gate * of CT2 (sample convert trigger is CT2) */ - if ((cmd->scan_begin_arg & ~CR_FLAGS_MASK) != 0) { + if (cmd->scan_begin_arg & ~CR_FLAGS_MASK) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, ~CR_FLAGS_MASK); err |= -EINVAL; } /* The only flag allowed is CR_EDGE, which is ignored. */ - if ((cmd->scan_begin_arg & CR_FLAGS_MASK & ~CR_EDGE) != 0) { + if (cmd->scan_begin_arg & CR_FLAGS_MASK & ~CR_EDGE) { cmd->scan_begin_arg = COMBINE(cmd->scan_begin_arg, 0, CR_FLAGS_MASK & ~CR_EDGE); err |= -EINVAL; @@ -1898,7 +1895,7 @@ static void pci230_ai_update_fifo_trigger_level(struct comedi_device *dev, unsigned short triglev; unsigned short adccon; - if ((cmd->flags & TRIG_WAKE_EOS) != 0) { + if (cmd->flags & TRIG_WAKE_EOS) { /* Wake at end of scan. */ wake = scanlen - devpriv->ai_scan_pos; } else { @@ -1939,7 +1936,7 @@ static int pci230_ai_inttrig_convert(struct comedi_device *dev, struct pci230_private *devpriv = dev->private; unsigned long irqflags; - if (trig_num != 0) + if (trig_num) return -EINVAL; spin_lock_irqsave(&devpriv->ai_stop_spinlock, irqflags); @@ -1986,7 +1983,7 @@ static int pci230_ai_inttrig_scan_begin(struct comedi_device *dev, unsigned long irqflags; unsigned char zgat; - if (trig_num != 0) + if (trig_num) return -EINVAL; spin_lock_irqsave(&devpriv->ai_stop_spinlock, irqflags); @@ -2088,7 +2085,7 @@ static void pci230_ai_start(struct comedi_device *dev, conv = PCI230_ADC_TRIG_Z2CT2; break; case TRIG_EXT: - if ((cmd->convert_arg & CR_EDGE) != 0) { + if (cmd->convert_arg & CR_EDGE) { if ((cmd->convert_arg & CR_INVERT) == 0) { /* Trigger on +ve edge. */ conv = PCI230_ADC_TRIG_EXTP; @@ -2098,7 +2095,7 @@ static void pci230_ai_start(struct comedi_device *dev, } } else { /* Backwards compatibility. */ - if (cmd->convert_arg != 0) { + if (cmd->convert_arg) { /* Trigger on +ve edge. */ conv = PCI230_ADC_TRIG_EXTP; } else { @@ -2252,7 +2249,7 @@ static void pci230_handle_ai(struct comedi_device *dev, if (fifoamount == 0) { /* Read FIFO state. */ status_fifo = inw(dev->iobase + PCI230_ADCCON); - if ((status_fifo & PCI230_ADC_FIFO_FULL_LATCHED) != 0) { + if (status_fifo & PCI230_ADC_FIFO_FULL_LATCHED) { /* * Report error otherwise FIFO overruns will go * unnoticed by the caller. @@ -2260,10 +2257,10 @@ static void pci230_handle_ai(struct comedi_device *dev, dev_err(dev->class_dev, "AI FIFO overrun\n"); events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR; break; - } else if ((status_fifo & PCI230_ADC_FIFO_EMPTY) != 0) { + } else if (status_fifo & PCI230_ADC_FIFO_EMPTY) { /* FIFO empty. */ break; - } else if ((status_fifo & PCI230_ADC_FIFO_HALF) != 0) { + } else if (status_fifo & PCI230_ADC_FIFO_HALF) { /* FIFO half full. */ fifoamount = PCI230_ADC_FIFOLEVEL_HALFFULL; } else { @@ -2304,8 +2301,8 @@ static void pci230_handle_ai(struct comedi_device *dev, events |= COMEDI_CB_BLOCK; } async->events |= events; - if ((async->events & (COMEDI_CB_EOA | COMEDI_CB_ERROR | - COMEDI_CB_OVERFLOW)) != 0) { + if (async->events & (COMEDI_CB_EOA | COMEDI_CB_ERROR | + COMEDI_CB_OVERFLOW)) { /* disable hardware conversions */ pci230_ai_stop(dev, s); } else { @@ -2561,19 +2558,19 @@ static irqreturn_t pci230_interrupt(int irq, void *d) * two. */ - if ((valid_status_int & PCI230_INT_ZCLK_CT1) != 0) { + if (valid_status_int & PCI230_INT_ZCLK_CT1) { s = dev->write_subdev; pci230_handle_ao_nofifo(dev, s); comedi_event(dev, s); } - if ((valid_status_int & PCI230P2_INT_DAC) != 0) { + if (valid_status_int & PCI230P2_INT_DAC) { s = dev->write_subdev; pci230_handle_ao_fifo(dev, s); comedi_event(dev, s); } - if ((valid_status_int & PCI230_INT_ADC) != 0) { + if (valid_status_int & PCI230_INT_ADC) { s = dev->read_subdev; pci230_handle_ai(dev, s); comedi_event(dev, s); @@ -2741,7 +2738,7 @@ static int pci230_attach_common(struct comedi_device *dev, } } outw(extfunc, dev->iobase + PCI230P_EXTFUNC); - if ((extfunc & PCI230P2_EXTFUNC_DACFIFO) != 0) { + if (extfunc & PCI230P2_EXTFUNC_DACFIFO) { /* * Temporarily enable DAC FIFO, reset it and disable * FIFO wraparound. -- cgit From 2ba8906f6f5eb15d4628514e098af1001c244a8a Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:22 +0100 Subject: staging: comedi: amplc_pci230: remove some indentation in pci230_ai_check_chanlist() A few lines in `pci230_ai_check_chanlist()` are indented one level too much, so remove the excess indentation. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 4222e2852722..37e72f6c0254 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -1616,10 +1616,10 @@ static int pci230_ai_check_chanlist(struct comedi_device *dev, if (subseq_len > 0 && cmd->chanlist[i % subseq_len] != chanspec) { - dev_dbg(dev->class_dev, - "%s: channel numbers must increase or sequence must repeat exactly\n", - __func__); - return -EINVAL; + dev_dbg(dev->class_dev, + "%s: channel numbers must increase or sequence must repeat exactly\n", + __func__); + return -EINVAL; } if (aref != prev_aref) { -- cgit From 2503f6fe8945d163bda7dc23bb05952ac84b4257 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:23 +0100 Subject: staging: comedi: amplc_pci230: no need for '&function' Remove the "address-of" operator when the operand is a function. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 37e72f6c0254..47069fd17611 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -2781,13 +2781,13 @@ static int pci230_attach_common(struct comedi_device *dev, s->n_chan = thisboard->ai_chans; s->maxdata = (1 << thisboard->ai_bits) - 1; s->range_table = &pci230_ai_range; - s->insn_read = &pci230_ai_rinsn; + s->insn_read = pci230_ai_rinsn; s->len_chanlist = 256; /* but there are restrictions. */ if (dev->irq) { dev->read_subdev = s; s->subdev_flags |= SDF_CMD_READ; - s->do_cmd = &pci230_ai_cmd; - s->do_cmdtest = &pci230_ai_cmdtest; + s->do_cmd = pci230_ai_cmd; + s->do_cmdtest = pci230_ai_cmdtest; s->cancel = pci230_ai_cancel; } @@ -2799,14 +2799,14 @@ static int pci230_attach_common(struct comedi_device *dev, s->n_chan = thisboard->ao_chans; s->maxdata = (1 << thisboard->ao_bits) - 1; s->range_table = &pci230_ao_range; - s->insn_write = &pci230_ao_winsn; - s->insn_read = &pci230_ao_rinsn; + s->insn_write = pci230_ao_winsn; + s->insn_read = pci230_ao_rinsn; s->len_chanlist = thisboard->ao_chans; if (dev->irq) { dev->write_subdev = s; s->subdev_flags |= SDF_CMD_WRITE; - s->do_cmd = &pci230_ao_cmd; - s->do_cmdtest = &pci230_ao_cmdtest; + s->do_cmd = pci230_ao_cmd; + s->do_cmdtest = pci230_ao_cmdtest; s->cancel = pci230_ao_cancel; } } else { -- cgit From bb4bbac2ff5b7a8e184fb98086e2e5e9bc5394e0 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:24 +0100 Subject: staging: comedi: amplc_pci230: add whitespace to pci230_boards[] Add a bit of whitespace to the initializer of `pci230_boards[]` for aesthetic reasons. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 76 ++++++++++++++------------- 1 file changed, 39 insertions(+), 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 47069fd17611..0bef12ff80ab 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -467,49 +467,51 @@ struct pci230_board { int have_dio; unsigned int min_hwver; /* Minimum hardware version supported. */ }; + static const struct pci230_board pci230_boards[] = { { - .name = "pci230+", - .id = PCI_DEVICE_ID_PCI230, - .ai_chans = 16, - .ai_bits = 16, - .ao_chans = 2, - .ao_bits = 12, - .have_dio = 1, - .min_hwver = 1, - }, + .name = "pci230+", + .id = PCI_DEVICE_ID_PCI230, + .ai_chans = 16, + .ai_bits = 16, + .ao_chans = 2, + .ao_bits = 12, + .have_dio = 1, + .min_hwver = 1, + }, { - .name = "pci260+", - .id = PCI_DEVICE_ID_PCI260, - .ai_chans = 16, - .ai_bits = 16, - .ao_chans = 0, - .ao_bits = 0, - .have_dio = 0, - .min_hwver = 1, - }, + .name = "pci260+", + .id = PCI_DEVICE_ID_PCI260, + .ai_chans = 16, + .ai_bits = 16, + .ao_chans = 0, + .ao_bits = 0, + .have_dio = 0, + .min_hwver = 1, + }, { - .name = "pci230", - .id = PCI_DEVICE_ID_PCI230, - .ai_chans = 16, - .ai_bits = 12, - .ao_chans = 2, - .ao_bits = 12, - .have_dio = 1, - }, + .name = "pci230", + .id = PCI_DEVICE_ID_PCI230, + .ai_chans = 16, + .ai_bits = 12, + .ao_chans = 2, + .ao_bits = 12, + .have_dio = 1, + }, { - .name = "pci260", - .id = PCI_DEVICE_ID_PCI260, - .ai_chans = 16, - .ai_bits = 12, - .ao_chans = 0, - .ao_bits = 0, - .have_dio = 0, - }, + .name = "pci260", + .id = PCI_DEVICE_ID_PCI260, + .ai_chans = 16, + .ai_bits = 12, + .ao_chans = 0, + .ao_bits = 0, + .have_dio = 0, + }, { - .name = "amplc_pci230", /* Wildcard matches any above */ - .id = PCI_DEVICE_ID_INVALID, - }, + /* Wildcard matches any above */ + .name = "amplc_pci230", + .id = PCI_DEVICE_ID_INVALID, + }, }; /* -- cgit From 5565353c36df092402a446c77c0ffccbe6ae04f9 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:25 +0100 Subject: staging: comedi: amplc_pci230: no need to initialize named members to zero The members of the elements of `pci230_boards[]` that are not explicitly named in their initializers will be initialized to 0 automatically, so there is no need to initialize them to 0 explicitly. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 0bef12ff80ab..2d8cdb15780a 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -484,9 +484,6 @@ static const struct pci230_board pci230_boards[] = { .id = PCI_DEVICE_ID_PCI260, .ai_chans = 16, .ai_bits = 16, - .ao_chans = 0, - .ao_bits = 0, - .have_dio = 0, .min_hwver = 1, }, { @@ -503,9 +500,6 @@ static const struct pci230_board pci230_boards[] = { .id = PCI_DEVICE_ID_PCI260, .ai_chans = 16, .ai_bits = 12, - .ao_chans = 0, - .ao_bits = 0, - .have_dio = 0, }, { /* Wildcard matches any above */ -- cgit From ab35426810e855e5cffa8d7cebbfe8d1c53594c3 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Tue, 29 Jul 2014 12:58:26 +0100 Subject: staging: comedi: amplc_pci230: tidy up stuct pci230_private Align the member comments a bit better in the declaration of `struct pci230_private`. Also remove the heading comment as it is just a boilerplate comedi comment. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_pci230.c | 45 ++++++++++----------------- 1 file changed, 17 insertions(+), 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 2d8cdb15780a..684275d76e8c 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -508,40 +508,29 @@ static const struct pci230_board pci230_boards[] = { }, }; -/* - * 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. - */ struct pci230_private { spinlock_t isr_spinlock; /* Interrupt spin lock */ spinlock_t res_spinlock; /* Shared resources spin lock */ spinlock_t ai_stop_spinlock; /* Spin lock for stopping AI command */ spinlock_t ao_stop_spinlock; /* Spin lock for stopping AO command */ - unsigned long state; /* State flags */ - unsigned long iobase1; /* PCI230's I/O space 1 */ + unsigned long state; /* State flags */ + unsigned long iobase1; /* PCI230's I/O space 1 */ unsigned int ao_readback[2]; /* Used for AO readback */ - /* Number of analogue input scans remaining. */ - unsigned int ai_scan_count; - /* Current position within analogue input scan */ - unsigned int ai_scan_pos; - /* Number of analogue output scans remaining. */ - unsigned int ao_scan_count; - int intr_cpuid; /* ID of CPU running interrupt routine. */ - unsigned short hwver; /* Hardware version (for '+' models). */ - unsigned short adccon; /* ADCCON register value. */ - unsigned short daccon; /* DACCON register value. */ - /* ADC FIFO programmable interrupt level threshold (PCI230+/260+). */ - unsigned short adcfifothresh; - unsigned short adcg; /* ADCG register value. */ - unsigned char int_en; /* Interrupt enables bits. */ - /* Set if bipolar input range so we know to mangle it. */ - unsigned char ai_bipolar; - /* Set if bipolar output range so we know to mangle it. */ - unsigned char ao_bipolar; - unsigned char ier; /* Copy of interrupt enables/status register. */ - unsigned char intr_running; /* Flag set in interrupt routine. */ - unsigned char res_owner[NUM_RESOURCES]; /* Shared resource owners. */ + unsigned int ai_scan_count; /* Number of AI scans remaining */ + unsigned int ai_scan_pos; /* Current position within AI scan */ + unsigned int ao_scan_count; /* Number of AO scans remaining. */ + int intr_cpuid; /* ID of CPU running ISR */ + unsigned short hwver; /* Hardware version (for '+' models) */ + unsigned short adccon; /* ADCCON register value */ + unsigned short daccon; /* DACCON register value */ + unsigned short adcfifothresh; /* ADC FIFO threshold (PCI230+/260+) */ + unsigned short adcg; /* ADCG register value */ + unsigned char int_en; /* Interrupt enable bits */ + unsigned char ai_bipolar; /* Flag AI range is bipolar */ + unsigned char ao_bipolar; /* Flag AO range is bipolar */ + unsigned char ier; /* Copy of interrupt enable register */ + unsigned char intr_running; /* Flag set in interrupt routine */ + unsigned char res_owner[NUM_RESOURCES]; /* Shared resource owners */ }; /* PCI230 clock source periods in ns */ -- cgit From d7e6dc1338eebae3b324b9a99e9d03d80c43aaef Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:20 -0700 Subject: staging: comedi: add an 'mmio' member to comedi_device All the comedi drivers that use memory mapped io currently have a void __iomem * member in their private data for the driver. For some of the drivers this is actually the only member in that data. For convienence, add a new member to the comedi_device for this void __iomem *. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/comedidev.h | 1 + drivers/staging/comedi/drivers.c | 1 + 2 files changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index f3999f5e8091..58e58a32e93d 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -253,6 +253,7 @@ struct comedi_device { struct comedi_subdevice *subdevices; /* dumb */ + void __iomem *mmio; unsigned long iobase; unsigned long iolen; unsigned int irq; diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 42ddf1332ce8..9ada130f2a76 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -121,6 +121,7 @@ static void comedi_device_detach_cleanup(struct comedi_device *dev) dev->driver = NULL; dev->board_name = NULL; dev->board_ptr = NULL; + dev->mmio = NULL; dev->iobase = 0; dev->iolen = 0; dev->ioenabled = false; -- cgit From 78b469387d961bd8f6c2bc3a5be1aaf1a2c27087 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:21 -0700 Subject: staging: comedi: 8255_pci: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Since this was the only member in the private data, remove the struct and its allocation. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/8255_pci.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index e4cec932aef9..f21e6567ac2f 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -167,10 +167,6 @@ static const struct pci_8255_boardinfo pci_8255_boards[] = { }, }; -struct pci_8255_private { - void __iomem *mmio_base; -}; - /* ripped from mite.h and mite_setup2() to avoid mite dependancy */ #define MITE_IODWBSR 0xc0 /* IO Device Window Base Size Register */ #define WENAB (1 << 7) /* window enable */ @@ -210,7 +206,6 @@ static int pci_8255_auto_attach(struct comedi_device *dev, { struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct pci_8255_boardinfo *board = NULL; - struct pci_8255_private *devpriv; struct comedi_subdevice *s; bool is_mmio; int ret; @@ -223,10 +218,6 @@ static int pci_8255_auto_attach(struct comedi_device *dev, dev->board_ptr = board; dev->board_name = board->name; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - ret = comedi_pci_enable(dev); if (ret) return ret; @@ -240,8 +231,8 @@ static int pci_8255_auto_attach(struct comedi_device *dev, is_mmio = (pci_resource_flags(pcidev, board->dio_badr) & IORESOURCE_MEM) != 0; if (is_mmio) { - devpriv->mmio_base = pci_ioremap_bar(pcidev, board->dio_badr); - if (!devpriv->mmio_base) + dev->mmio = pci_ioremap_bar(pcidev, board->dio_badr); + if (!dev->mmio) return -ENOMEM; } else { dev->iobase = pci_resource_start(pcidev, board->dio_badr); @@ -261,7 +252,7 @@ static int pci_8255_auto_attach(struct comedi_device *dev, s = &dev->subdevices[i]; if (is_mmio) { - iobase = (unsigned long)(devpriv->mmio_base + (i * 4)); + iobase = (unsigned long)(dev->mmio + (i * 4)); ret = subdev_8255_init(dev, s, pci_8255_mmio, iobase); } else { iobase = dev->iobase + (i * 4); @@ -276,10 +267,8 @@ static int pci_8255_auto_attach(struct comedi_device *dev, static void pci_8255_detach(struct comedi_device *dev) { - struct pci_8255_private *devpriv = dev->private; - - if (devpriv && devpriv->mmio_base) - iounmap(devpriv->mmio_base); + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From f7be5ad9a4c02eed20ac762bb9ed73b99f5ba282 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:22 -0700 Subject: staging: comedi: ni_65xx: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Since this was the only member in the private data, remove the struct and its allocation. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_65xx.c | 80 ++++++++++++-------------------- 1 file changed, 30 insertions(+), 50 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 1b8a397ea31e..873941be56cb 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -292,10 +292,6 @@ module_param_named(legacy_invert_outputs, ni_65xx_legacy_invert_outputs, MODULE_PARM_DESC(legacy_invert_outputs, "invert outputs of PCI/PXI-6513/6514/6515/6516/6517/6518/6519 for compatibility with old user code"); -struct ni_65xx_private { - void __iomem *mmio; -}; - static unsigned int ni_65xx_num_ports(struct comedi_device *dev) { const struct ni_65xx_board *board = comedi_board(dev); @@ -305,16 +301,15 @@ static unsigned int ni_65xx_num_ports(struct comedi_device *dev) static void ni_65xx_disable_input_filters(struct comedi_device *dev) { - struct ni_65xx_private *devpriv = dev->private; unsigned int num_ports = ni_65xx_num_ports(dev); int i; /* disable input filtering on all ports */ for (i = 0; i < num_ports; ++i) - writeb(0x00, devpriv->mmio + NI_65XX_FILTER_ENA(i)); + writeb(0x00, dev->mmio + NI_65XX_FILTER_ENA(i)); /* set filter interval to 0 (32bit reg) */ - writel(0x00000000, devpriv->mmio + NI_65XX_FILTER_REG); + writel(0x00000000, dev->mmio + NI_65XX_FILTER_REG); } /* updates edge detection for base_chan to base_chan+31 */ @@ -323,7 +318,6 @@ static void ni_65xx_update_edge_detection(struct comedi_device *dev, unsigned int rising, unsigned int falling) { - struct ni_65xx_private *devpriv = dev->private; unsigned int num_ports = ni_65xx_num_ports(dev); unsigned int port; @@ -349,18 +343,18 @@ static void ni_65xx_update_edge_detection(struct comedi_device *dev, if (port_mask & 0xff) { if (~port_mask & 0xff) { port_rising |= - readb(devpriv->mmio + + readb(dev->mmio + NI_65XX_RISE_EDGE_ENA_REG(port)) & ~port_mask; port_falling |= - readb(devpriv->mmio + + readb(dev->mmio + NI_65XX_FALL_EDGE_ENA_REG(port)) & ~port_mask; } writeb(port_rising & 0xff, - devpriv->mmio + NI_65XX_RISE_EDGE_ENA_REG(port)); + dev->mmio + NI_65XX_RISE_EDGE_ENA_REG(port)); writeb(port_falling & 0xff, - devpriv->mmio + NI_65XX_FALL_EDGE_ENA_REG(port)); + dev->mmio + NI_65XX_FALL_EDGE_ENA_REG(port)); } } } @@ -380,7 +374,6 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_65xx_private *devpriv = dev->private; unsigned long base_port = (unsigned long)s->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int chan_mask = NI_65XX_CHAN_TO_MASK(chan); @@ -405,34 +398,34 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev, * that the filter interval is never set to '0'. This is done * because other channels might still be enabled for filtering. */ - val = readb(devpriv->mmio + NI_65XX_FILTER_ENA(port)); + val = readb(dev->mmio + NI_65XX_FILTER_ENA(port)); if (interval) { - writel(interval, devpriv->mmio + NI_65XX_FILTER_REG); + writel(interval, dev->mmio + NI_65XX_FILTER_REG); val |= chan_mask; } else { val &= ~chan_mask; } - writeb(val, devpriv->mmio + NI_65XX_FILTER_ENA(port)); + writeb(val, dev->mmio + NI_65XX_FILTER_ENA(port)); break; case INSN_CONFIG_DIO_OUTPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; writeb(NI_65XX_IO_SEL_OUTPUT, - devpriv->mmio + NI_65XX_IO_SEL_REG(port)); + dev->mmio + NI_65XX_IO_SEL_REG(port)); break; case INSN_CONFIG_DIO_INPUT: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; writeb(NI_65XX_IO_SEL_INPUT, - devpriv->mmio + NI_65XX_IO_SEL_REG(port)); + dev->mmio + NI_65XX_IO_SEL_REG(port)); break; case INSN_CONFIG_DIO_QUERY: if (s->type != COMEDI_SUBD_DIO) return -EINVAL; - val = readb(devpriv->mmio + NI_65XX_IO_SEL_REG(port)); + val = readb(dev->mmio + NI_65XX_IO_SEL_REG(port)); data[1] = (val == NI_65XX_IO_SEL_INPUT) ? COMEDI_INPUT : COMEDI_OUTPUT; break; @@ -449,7 +442,6 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_65xx_private *devpriv = dev->private; unsigned long base_port = (unsigned long)s->private; unsigned int base_chan = CR_CHAN(insn->chanspec); int last_port_offset = NI_65XX_CHAN_TO_PORT(s->n_chan - 1); @@ -479,16 +471,16 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, /* update the outputs */ if (port_mask) { - bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); + bits = readb(dev->mmio + NI_65XX_IO_DATA_REG(port)); bits ^= s->io_bits; /* invert if necessary */ bits &= ~port_mask; bits |= (port_data & port_mask); bits ^= s->io_bits; /* invert back */ - writeb(bits, devpriv->mmio + NI_65XX_IO_DATA_REG(port)); + writeb(bits, dev->mmio + NI_65XX_IO_DATA_REG(port)); } /* read back the actual state */ - bits = readb(devpriv->mmio + NI_65XX_IO_DATA_REG(port)); + bits = readb(dev->mmio + NI_65XX_IO_DATA_REG(port)); bits ^= s->io_bits; /* invert if necessary */ if (bitshift > 0) bits <<= bitshift; @@ -504,18 +496,17 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, static irqreturn_t ni_65xx_interrupt(int irq, void *d) { struct comedi_device *dev = d; - struct ni_65xx_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned int status; - status = readb(devpriv->mmio + NI_65XX_STATUS_REG); + status = readb(dev->mmio + NI_65XX_STATUS_REG); if ((status & NI_65XX_STATUS_INT) == 0) return IRQ_NONE; if ((status & NI_65XX_STATUS_EDGE_INT) == 0) return IRQ_NONE; writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, - devpriv->mmio + NI_65XX_CLR_REG); + dev->mmio + NI_65XX_CLR_REG); comedi_buf_put(s, 0); s->async->events |= COMEDI_CB_EOS; @@ -568,13 +559,11 @@ static int ni_65xx_intr_cmdtest(struct comedi_device *dev, static int ni_65xx_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_65xx_private *devpriv = dev->private; - writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, - devpriv->mmio + NI_65XX_CLR_REG); + dev->mmio + NI_65XX_CLR_REG); writeb(NI_65XX_CTRL_FALL_EDGE_ENA | NI_65XX_CTRL_RISE_EDGE_ENA | NI_65XX_CTRL_INT_ENA | NI_65XX_CTRL_EDGE_ENA, - devpriv->mmio + NI_65XX_CTRL_REG); + dev->mmio + NI_65XX_CTRL_REG); return 0; } @@ -582,9 +571,7 @@ static int ni_65xx_intr_cmd(struct comedi_device *dev, static int ni_65xx_intr_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni_65xx_private *devpriv = dev->private; - - writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); + writeb(0x00, dev->mmio + NI_65XX_CTRL_REG); return 0; } @@ -672,7 +659,6 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, { struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct ni_65xx_board *board = NULL; - struct ni_65xx_private *devpriv; struct comedi_subdevice *s; unsigned i; int ret; @@ -688,21 +674,17 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - ret = ni_65xx_mite_init(pcidev); if (ret) return ret; - devpriv->mmio = pci_ioremap_bar(pcidev, 1); - if (!devpriv->mmio) + dev->mmio = pci_ioremap_bar(pcidev, 1); + if (!dev->mmio) return -ENOMEM; writeb(NI_65XX_CLR_EDGE_INT | NI_65XX_CLR_OVERFLOW_INT, - devpriv->mmio + NI_65XX_CLR_REG); - writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); + dev->mmio + NI_65XX_CLR_REG); + writeb(0x00, dev->mmio + NI_65XX_CTRL_REG); if (pcidev->irq) { ret = request_irq(pcidev->irq, ni_65xx_interrupt, IRQF_SHARED, @@ -712,7 +694,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, } dev_info(dev->class_dev, "board: %s, ID=0x%02x", dev->board_name, - readb(devpriv->mmio + NI_65XX_ID_REG)); + readb(dev->mmio + NI_65XX_ID_REG)); ret = comedi_alloc_subdevices(dev, 4); if (ret) @@ -757,7 +739,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, /* reset all output ports to comedi '0' */ for (i = 0; i < board->num_do_ports; ++i) { writeb(s->io_bits, /* inverted if necessary */ - devpriv->mmio + + dev->mmio + NI_65XX_IO_DATA_REG(board->num_di_ports + i)); } } else { @@ -780,7 +762,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, /* configure all ports for input */ for (i = 0; i < board->num_dio_ports; ++i) { writeb(NI_65XX_IO_SEL_INPUT, - devpriv->mmio + NI_65XX_IO_SEL_REG(i)); + dev->mmio + NI_65XX_IO_SEL_REG(i)); } } else { s->type = COMEDI_SUBD_UNUSED; @@ -811,11 +793,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, static void ni_65xx_detach(struct comedi_device *dev) { - struct ni_65xx_private *devpriv = dev->private; - - if (devpriv && devpriv->mmio) { - writeb(0x00, devpriv->mmio + NI_65XX_CTRL_REG); - iounmap(devpriv->mmio); + if (dev->mmio) { + writeb(0x00, dev->mmio + NI_65XX_CTRL_REG); + iounmap(dev->mmio); } if (dev->irq) free_irq(dev->irq, dev); -- cgit From c2dcf85a860da1fccd0f74c01c4517d77131a614 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:23 -0700 Subject: staging: comedi: gsc_hpdi: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 44 ++++++++++++++----------------- 1 file changed, 20 insertions(+), 24 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 22333c1ad88c..91c1e8cf5d24 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -51,7 +51,7 @@ #include "comedi_fc.h" /* - * PCI BAR2 Register map (devpriv->mmio) + * PCI BAR2 Register map (dev->mmio) */ #define FIRMWARE_REV_REG 0x00 #define FEATURES_REG_PRESENT_BIT (1 << 15) @@ -148,7 +148,6 @@ static const struct hpdi_board hpdi_boards[] = { struct hpdi_private { void __iomem *plx9080_mmio; - void __iomem *mmio; uint32_t *dio_buffer[NUM_DMA_BUFFERS]; /* dma buffers */ /* physical addresses of dma buffers */ dma_addr_t dio_buffer_phys_addr[NUM_DMA_BUFFERS]; @@ -227,11 +226,11 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) if ((plx_status & (ICS_DMA0_A | ICS_DMA1_A | ICS_LIA)) == 0) return IRQ_NONE; - hpdi_intr_status = readl(devpriv->mmio + INTERRUPT_STATUS_REG); - hpdi_board_status = readl(devpriv->mmio + BOARD_STATUS_REG); + hpdi_intr_status = readl(dev->mmio + INTERRUPT_STATUS_REG); + hpdi_board_status = readl(dev->mmio + BOARD_STATUS_REG); if (hpdi_intr_status) - writel(hpdi_intr_status, devpriv->mmio + INTERRUPT_STATUS_REG); + writel(hpdi_intr_status, dev->mmio + INTERRUPT_STATUS_REG); /* spin lock makes sure no one else changes plx dma control reg */ spin_lock_irqsave(&dev->spinlock, flags); @@ -294,10 +293,8 @@ static void gsc_hpdi_abort_dma(struct comedi_device *dev, unsigned int channel) static int gsc_hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct hpdi_private *devpriv = dev->private; - - writel(0, devpriv->mmio + BOARD_CONTROL_REG); - writel(0, devpriv->mmio + INTERRUPT_CONTROL_REG); + writel(0, dev->mmio + BOARD_CONTROL_REG); + writel(0, dev->mmio + INTERRUPT_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -316,7 +313,7 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, if (s->io_bits) return -EINVAL; - writel(RX_FIFO_RESET_BIT, devpriv->mmio + BOARD_CONTROL_REG); + writel(RX_FIFO_RESET_BIT, dev->mmio + BOARD_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -349,13 +346,12 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, devpriv->dio_count = 1; /* clear over/under run status flags */ - writel(RX_UNDERRUN_BIT | RX_OVERRUN_BIT, - devpriv->mmio + BOARD_STATUS_REG); + writel(RX_UNDERRUN_BIT | RX_OVERRUN_BIT, dev->mmio + BOARD_STATUS_REG); /* enable interrupts */ - writel(RX_FULL_INTR, devpriv->mmio + INTERRUPT_CONTROL_REG); + writel(RX_FULL_INTR, dev->mmio + INTERRUPT_CONTROL_REG); - writel(RX_ENABLE_BIT, devpriv->mmio + BOARD_CONTROL_REG); + writel(RX_ENABLE_BIT, dev->mmio + BOARD_CONTROL_REG); return 0; } @@ -517,20 +513,20 @@ static int gsc_hpdi_init(struct comedi_device *dev) uint32_t plx_intcsr_bits; /* wait 10usec after reset before accessing fifos */ - writel(BOARD_RESET_BIT, devpriv->mmio + BOARD_CONTROL_REG); + writel(BOARD_RESET_BIT, dev->mmio + BOARD_CONTROL_REG); udelay(10); writel(ALMOST_EMPTY_BITS(32) | ALMOST_FULL_BITS(32), - devpriv->mmio + RX_PROG_ALMOST_REG); + dev->mmio + RX_PROG_ALMOST_REG); writel(ALMOST_EMPTY_BITS(32) | ALMOST_FULL_BITS(32), - devpriv->mmio + TX_PROG_ALMOST_REG); + dev->mmio + TX_PROG_ALMOST_REG); - devpriv->tx_fifo_size = readl(devpriv->mmio + TX_FIFO_SIZE_REG) & + devpriv->tx_fifo_size = readl(dev->mmio + TX_FIFO_SIZE_REG) & FIFO_SIZE_MASK; - devpriv->rx_fifo_size = readl(devpriv->mmio + RX_FIFO_SIZE_REG) & + devpriv->rx_fifo_size = readl(dev->mmio + RX_FIFO_SIZE_REG) & FIFO_SIZE_MASK; - writel(0, devpriv->mmio + INTERRUPT_CONTROL_REG); + writel(0, dev->mmio + INTERRUPT_CONTROL_REG); /* enable interrupts */ plx_intcsr_bits = @@ -621,8 +617,8 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev, pci_set_master(pcidev); devpriv->plx9080_mmio = pci_ioremap_bar(pcidev, 0); - devpriv->mmio = pci_ioremap_bar(pcidev, 2); - if (!devpriv->plx9080_mmio || !devpriv->mmio) { + dev->mmio = pci_ioremap_bar(pcidev, 2); + if (!devpriv->plx9080_mmio || !dev->mmio) { dev_warn(dev->class_dev, "failed to remap io memory\n"); return -ENOMEM; } @@ -696,8 +692,8 @@ static void gsc_hpdi_detach(struct comedi_device *dev) writel(0, devpriv->plx9080_mmio + PLX_INTRCS_REG); iounmap(devpriv->plx9080_mmio); } - if (devpriv->mmio) - iounmap(devpriv->mmio); + if (dev->mmio) + iounmap(dev->mmio); /* free pci dma buffers */ for (i = 0; i < NUM_DMA_BUFFERS; i++) { if (devpriv->dio_buffer[i]) -- cgit From a11f40c83c2e86edefe3b842a93cd4ae70880fa0 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:24 -0700 Subject: staging: comedi: me_daq: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/me_daq.c | 67 +++++++++++++++------------------ 1 file changed, 31 insertions(+), 36 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/me_daq.c b/drivers/staging/comedi/drivers/me_daq.c index 0ff126b1fdfd..37a6fa92c656 100644 --- a/drivers/staging/comedi/drivers/me_daq.c +++ b/drivers/staging/comedi/drivers/me_daq.c @@ -167,7 +167,6 @@ static const struct me_board me_boards[] = { struct me_private_data { void __iomem *plx_regbase; /* PLX configuration base address */ - void __iomem *me_regbase; /* Base address of the Meilhaus card */ unsigned short control_1; /* Mirror of CONTROL_1 register */ unsigned short control_2; /* Mirror of CONTROL_2 register */ @@ -209,7 +208,7 @@ static int me_dio_insn_config(struct comedi_device *dev, else devpriv->control_2 &= ~ENABLE_PORT_B; - writew(devpriv->control_2, devpriv->me_regbase + ME_CONTROL_2); + writew(devpriv->control_2, dev->mmio + ME_CONTROL_2); return insn->n; } @@ -219,9 +218,8 @@ static int me_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct me_private_data *dev_private = dev->private; - void __iomem *mmio_porta = dev_private->me_regbase + ME_DIO_PORT_A; - void __iomem *mmio_portb = dev_private->me_regbase + ME_DIO_PORT_B; + void __iomem *mmio_porta = dev->mmio + ME_DIO_PORT_A; + void __iomem *mmio_portb = dev->mmio + ME_DIO_PORT_B; unsigned int mask; unsigned int val; @@ -253,10 +251,9 @@ static int me_ai_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct me_private_data *dev_private = dev->private; unsigned int status; - status = readw(dev_private->me_regbase + ME_STATUS); + status = readw(dev->mmio + ME_STATUS); if ((status & 0x0004) == 0) return 0; return -EBUSY; @@ -276,32 +273,32 @@ static int me_ai_insn_read(struct comedi_device *dev, /* stop any running conversion */ dev_private->control_1 &= 0xFFFC; - writew(dev_private->control_1, dev_private->me_regbase + ME_CONTROL_1); + writew(dev_private->control_1, dev->mmio + ME_CONTROL_1); /* clear chanlist and ad fifo */ dev_private->control_2 &= ~(ENABLE_ADFIFO | ENABLE_CHANLIST); - writew(dev_private->control_2, dev_private->me_regbase + ME_CONTROL_2); + writew(dev_private->control_2, dev->mmio + ME_CONTROL_2); /* reset any pending interrupt */ - writew(0x00, dev_private->me_regbase + ME_RESET_INTERRUPT); + writew(0x00, dev->mmio + ME_RESET_INTERRUPT); /* enable the chanlist and ADC fifo */ dev_private->control_2 |= (ENABLE_ADFIFO | ENABLE_CHANLIST); - writew(dev_private->control_2, dev_private->me_regbase + ME_CONTROL_2); + writew(dev_private->control_2, dev->mmio + ME_CONTROL_2); /* write to channel list fifo */ val = chan & 0x0f; /* b3:b0 channel */ val |= (rang & 0x03) << 4; /* b5:b4 gain */ val |= (rang & 0x04) << 4; /* b6 polarity */ val |= ((aref & AREF_DIFF) ? 0x80 : 0); /* b7 differential */ - writew(val & 0xff, dev_private->me_regbase + ME_CHANNEL_LIST); + writew(val & 0xff, dev->mmio + ME_CHANNEL_LIST); /* set ADC mode to software trigger */ dev_private->control_1 |= SOFTWARE_TRIGGERED_ADC; - writew(dev_private->control_1, dev_private->me_regbase + ME_CONTROL_1); + writew(dev_private->control_1, dev->mmio + ME_CONTROL_1); /* start conversion by reading from ADC_START */ - readw(dev_private->me_regbase + ME_ADC_START); + readw(dev->mmio + ME_ADC_START); /* wait for ADC fifo not empty flag */ ret = comedi_timeout(dev, s, insn, me_ai_eoc, 0); @@ -309,13 +306,13 @@ static int me_ai_insn_read(struct comedi_device *dev, return ret; /* get value from ADC fifo */ - val = readw(dev_private->me_regbase + ME_READ_AD_FIFO); + val = readw(dev->mmio + ME_READ_AD_FIFO); val = (val ^ 0x800) & 0x0fff; data[0] = val; /* stop any running conversion */ dev_private->control_1 &= 0xFFFC; - writew(dev_private->control_1, dev_private->me_regbase + ME_CONTROL_1); + writew(dev_private->control_1, dev->mmio + ME_CONTROL_1); return 1; } @@ -332,11 +329,11 @@ static int me_ao_insn_write(struct comedi_device *dev, /* Enable all DAC */ dev_private->control_2 |= ENABLE_DAC; - writew(dev_private->control_2, dev_private->me_regbase + ME_CONTROL_2); + writew(dev_private->control_2, dev->mmio + ME_CONTROL_2); /* and set DAC to "buffered" mode */ dev_private->control_2 |= BUFFERED_DAC; - writew(dev_private->control_2, dev_private->me_regbase + ME_CONTROL_2); + writew(dev_private->control_2, dev->mmio + ME_CONTROL_2); /* Set dac-control register */ for (i = 0; i < insn->n; i++) { @@ -349,21 +346,20 @@ static int me_ao_insn_write(struct comedi_device *dev, dev_private->dac_control |= ((DAC_BIPOLAR_A | DAC_GAIN_0_A) >> chan); } - writew(dev_private->dac_control, - dev_private->me_regbase + ME_DAC_CONTROL); + writew(dev_private->dac_control, dev->mmio + ME_DAC_CONTROL); /* Update dac-control register */ - readw(dev_private->me_regbase + ME_DAC_CONTROL_UPDATE); + readw(dev->mmio + ME_DAC_CONTROL_UPDATE); /* Set data register */ for (i = 0; i < insn->n; i++) { writew((data[0] & s->maxdata), - dev_private->me_regbase + ME_DAC_DATA_A + (chan << 1)); + dev->mmio + ME_DAC_DATA_A + (chan << 1)); dev_private->ao_readback[chan] = (data[0] & s->maxdata); } /* Update dac with data registers */ - readw(dev_private->me_regbase + ME_DAC_UPDATE); + readw(dev->mmio + ME_DAC_UPDATE); return insn->n; } @@ -396,13 +392,13 @@ static int me2600_xilinx_download(struct comedi_device *dev, writel(0x00, dev_private->plx_regbase + PLX9052_INTCSR); /* First, make a dummy read to reset xilinx */ - value = readw(dev_private->me_regbase + XILINX_DOWNLOAD_RESET); + value = readw(dev->mmio + XILINX_DOWNLOAD_RESET); /* Wait until reset is over */ sleep(1); /* Write a dummy value to Xilinx */ - writeb(0x00, dev_private->me_regbase + 0x0); + writeb(0x00, dev->mmio + 0x0); sleep(1); /* @@ -426,12 +422,11 @@ static int me2600_xilinx_download(struct comedi_device *dev, * Firmware data start at offset 16 */ for (i = 0; i < file_length; i++) - writeb((data[16 + i] & 0xff), - dev_private->me_regbase + 0x0); + writeb((data[16 + i] & 0xff), dev->mmio + 0x0); /* Write 5 dummy values to xilinx */ for (i = 0; i < 5; i++) - writeb(0x00, dev_private->me_regbase + 0x0); + writeb(0x00, dev->mmio + 0x0); /* Test if there was an error during download -> INTB was thrown */ value = readl(dev_private->plx_regbase + PLX9052_INTCSR); @@ -459,10 +454,10 @@ static int me_reset(struct comedi_device *dev) struct me_private_data *dev_private = dev->private; /* Reset board */ - writew(0x00, dev_private->me_regbase + ME_CONTROL_1); - writew(0x00, dev_private->me_regbase + ME_CONTROL_2); - writew(0x00, dev_private->me_regbase + ME_RESET_INTERRUPT); - writew(0x00, dev_private->me_regbase + ME_DAC_CONTROL); + writew(0x00, dev->mmio + ME_CONTROL_1); + writew(0x00, dev->mmio + ME_CONTROL_2); + writew(0x00, dev->mmio + ME_RESET_INTERRUPT); + writew(0x00, dev->mmio + ME_DAC_CONTROL); /* Save values in the board context */ dev_private->dac_control = 0; @@ -500,8 +495,8 @@ static int me_auto_attach(struct comedi_device *dev, if (!dev_private->plx_regbase) return -ENOMEM; - dev_private->me_regbase = pci_ioremap_bar(pcidev, 2); - if (!dev_private->me_regbase) + dev->mmio = pci_ioremap_bar(pcidev, 2); + if (!dev->mmio) return -ENOMEM; /* Download firmware and reset card */ @@ -559,9 +554,9 @@ static void me_detach(struct comedi_device *dev) struct me_private_data *dev_private = dev->private; if (dev_private) { - if (dev_private->me_regbase) { + if (dev->mmio) { me_reset(dev); - iounmap(dev_private->me_regbase); + iounmap(dev->mmio); } if (dev_private->plx_regbase) iounmap(dev_private->plx_regbase); -- cgit From 565700447a57dc28c3a4b887b50a1d633da6810e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:25 -0700 Subject: staging: comedi: mf6x4: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mf6x4.c | 47 +++++++++++++++------------------- 1 file changed, 21 insertions(+), 26 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mf6x4.c b/drivers/staging/comedi/drivers/mf6x4.c index a4f7d6f138df..464f4b4745c7 100644 --- a/drivers/staging/comedi/drivers/mf6x4.c +++ b/drivers/staging/comedi/drivers/mf6x4.c @@ -93,7 +93,6 @@ struct mf6x4_private { * and MF634 yet we will call them 0, 1, 2 */ void __iomem *bar0_mem; - void __iomem *bar1_mem; void __iomem *bar2_mem; /* @@ -108,25 +107,22 @@ struct mf6x4_private { }; static int mf6x4_di_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { - struct mf6x4_private *devpriv = dev->private; - - data[1] = ioread16(devpriv->bar1_mem + MF6X4_DIN_R) & MF6X4_DIN_M; + data[1] = ioread16(dev->mmio + MF6X4_DIN_R) & MF6X4_DIN_M; return insn->n; } static int mf6x4_do_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { - struct mf6x4_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - iowrite16(s->state & MF6X4_DOUT_M, - devpriv->bar1_mem + MF6X4_DOUT_R); + iowrite16(s->state & MF6X4_DOUT_M, dev->mmio + MF6X4_DOUT_R); data[1] = s->state; @@ -149,40 +145,40 @@ static int mf6x4_ai_eoc(struct comedi_device *dev, static int mf6x4_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct mf6x4_private *devpriv = dev->private; int chan = CR_CHAN(insn->chanspec); int ret; int i; int d; /* Set the ADC channel number in the scan list */ - iowrite16((1 << chan) & MF6X4_ADCTRL_M, - devpriv->bar1_mem + MF6X4_ADCTRL_R); + iowrite16((1 << chan) & MF6X4_ADCTRL_M, dev->mmio + MF6X4_ADCTRL_R); for (i = 0; i < insn->n; i++) { /* Trigger ADC conversion by reading ADSTART */ - ioread16(devpriv->bar1_mem + MF6X4_ADSTART_R); + ioread16(dev->mmio + MF6X4_ADSTART_R); ret = comedi_timeout(dev, s, insn, mf6x4_ai_eoc, 0); if (ret) return ret; /* Read the actual value */ - d = ioread16(devpriv->bar1_mem + MF6X4_ADDATA_R); + d = ioread16(dev->mmio + MF6X4_ADDATA_R); d &= s->maxdata; data[i] = d; } - iowrite16(0x0, devpriv->bar1_mem + MF6X4_ADCTRL_R); + iowrite16(0x0, dev->mmio + MF6X4_ADCTRL_R); return insn->n; } static int mf6x4_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct mf6x4_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); @@ -195,8 +191,7 @@ static int mf6x4_ao_insn_write(struct comedi_device *dev, devpriv->gpioc_R); for (i = 0; i < insn->n; i++) { - iowrite16(data[i] & MF6X4_DA_M, - devpriv->bar1_mem + MF6X4_DAC_R(chan)); + iowrite16(data[i] & MF6X4_DA_M, dev->mmio + MF6X4_DAC_R(chan)); devpriv->ao_readback[chan] = data[i]; } @@ -246,8 +241,8 @@ static int mf6x4_auto_attach(struct comedi_device *dev, unsigned long context) if (!devpriv->bar0_mem) return -ENODEV; - devpriv->bar1_mem = pci_ioremap_bar(pcidev, board->bar_nums[1]); - if (!devpriv->bar1_mem) + dev->mmio = pci_ioremap_bar(pcidev, board->bar_nums[1]); + if (!dev->mmio) return -ENODEV; devpriv->bar2_mem = pci_ioremap_bar(pcidev, board->bar_nums[2]); @@ -310,8 +305,8 @@ static void mf6x4_detach(struct comedi_device *dev) if (devpriv->bar0_mem) iounmap(devpriv->bar0_mem); - if (devpriv->bar1_mem) - iounmap(devpriv->bar1_mem); + if (dev->mmio) + iounmap(dev->mmio); if (devpriv->bar2_mem) iounmap(devpriv->bar2_mem); -- cgit From a3e63288103ccdda45f741a4dad22cb7f12ea105 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:26 -0700 Subject: staging: comedi: icp_multi: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/icp_multi.c | 80 +++++++++++++----------------- 1 file changed, 35 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/icp_multi.c b/drivers/staging/comedi/drivers/icp_multi.c index e646958980f3..a98cef2106a9 100644 --- a/drivers/staging/comedi/drivers/icp_multi.c +++ b/drivers/staging/comedi/drivers/icp_multi.c @@ -108,7 +108,6 @@ static const char range_codes_analog[] = { 0x00, 0x20, 0x10, 0x30 }; struct icp_multi_private { char valid; /* card is usable */ - void __iomem *io_addr; /* Pointer to mapped io address */ unsigned int AdcCmdStatus; /* ADC Command/Status register */ unsigned int DacCmdStatus; /* DAC Command/Status register */ unsigned int IntEnable; /* Interrupt Enable register */ @@ -164,8 +163,7 @@ static void setup_channel_list(struct comedi_device *dev, devpriv->AdcCmdStatus |= range; /* Output channel, range, mode to ICP Multi */ - writew(devpriv->AdcCmdStatus, - devpriv->io_addr + ICP_MULTI_ADC_CSR); + writew(devpriv->AdcCmdStatus, dev->mmio + ICP_MULTI_ADC_CSR); } } @@ -174,10 +172,9 @@ static int icp_multi_ai_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct icp_multi_private *devpriv = dev->private; unsigned int status; - status = readw(devpriv->io_addr + ICP_MULTI_ADC_CSR); + status = readw(dev->mmio + ICP_MULTI_ADC_CSR); if ((status & ADC_BSY) == 0) return 0; return -EBUSY; @@ -185,7 +182,8 @@ static int icp_multi_ai_eoc(struct comedi_device *dev, static int icp_multi_insn_read_ai(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct icp_multi_private *devpriv = dev->private; int ret = 0; @@ -193,11 +191,11 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev, /* Disable A/D conversion ready interrupt */ devpriv->IntEnable &= ~ADC_READY; - writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); + writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN); /* Clear interrupt status */ devpriv->IntStatus |= ADC_READY; - writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); + writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT); /* Set up appropriate channel, mode and range data, for specified ch */ setup_channel_list(dev, s, &insn->chanspec, 1); @@ -205,8 +203,7 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev, for (n = 0; n < insn->n; n++) { /* Set start ADC bit */ devpriv->AdcCmdStatus |= ADC_ST; - writew(devpriv->AdcCmdStatus, - devpriv->io_addr + ICP_MULTI_ADC_CSR); + writew(devpriv->AdcCmdStatus, dev->mmio + ICP_MULTI_ADC_CSR); devpriv->AdcCmdStatus &= ~ADC_ST; udelay(1); @@ -216,17 +213,16 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev, if (ret) break; - data[n] = - (readw(devpriv->io_addr + ICP_MULTI_AI) >> 4) & 0x0fff; + data[n] = (readw(dev->mmio + ICP_MULTI_AI) >> 4) & 0x0fff; } /* Disable interrupt */ devpriv->IntEnable &= ~ADC_READY; - writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); + writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN); /* Clear interrupt status */ devpriv->IntStatus |= ADC_READY; - writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); + writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT); return ret ? ret : n; } @@ -236,10 +232,9 @@ static int icp_multi_ao_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct icp_multi_private *devpriv = dev->private; unsigned int status; - status = readw(devpriv->io_addr + ICP_MULTI_DAC_CSR); + status = readw(dev->mmio + ICP_MULTI_DAC_CSR); if ((status & DAC_BSY) == 0) return 0; return -EBUSY; @@ -247,7 +242,8 @@ static int icp_multi_ao_eoc(struct comedi_device *dev, static int icp_multi_insn_write_ao(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct icp_multi_private *devpriv = dev->private; int n, chan, range; @@ -255,11 +251,11 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev, /* Disable D/A conversion ready interrupt */ devpriv->IntEnable &= ~DAC_READY; - writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); + writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN); /* Clear interrupt status */ devpriv->IntStatus |= DAC_READY; - writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); + writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT); /* Get channel number and range */ chan = CR_CHAN(insn->chanspec); @@ -274,7 +270,7 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev, devpriv->DacCmdStatus |= range_codes_analog[range]; devpriv->DacCmdStatus |= (chan << 8); - writew(devpriv->DacCmdStatus, devpriv->io_addr + ICP_MULTI_DAC_CSR); + writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR); for (n = 0; n < insn->n; n++) { /* Wait for analogue output data register to be @@ -284,12 +280,12 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev, /* Disable interrupt */ devpriv->IntEnable &= ~DAC_READY; writew(devpriv->IntEnable, - devpriv->io_addr + ICP_MULTI_INT_EN); + dev->mmio + ICP_MULTI_INT_EN); /* Clear interrupt status */ devpriv->IntStatus |= DAC_READY; writew(devpriv->IntStatus, - devpriv->io_addr + ICP_MULTI_INT_STAT); + dev->mmio + ICP_MULTI_INT_STAT); /* Clear data received */ devpriv->ao_data[chan] = 0; @@ -298,12 +294,11 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev, } /* Write data to analogue output data register */ - writew(data[n], devpriv->io_addr + ICP_MULTI_AO); + writew(data[n], dev->mmio + ICP_MULTI_AO); /* Set DAC_ST bit to write the data to selected channel */ devpriv->DacCmdStatus |= DAC_ST; - writew(devpriv->DacCmdStatus, - devpriv->io_addr + ICP_MULTI_DAC_CSR); + writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR); devpriv->DacCmdStatus &= ~DAC_ST; /* Save analogue output data */ @@ -332,11 +327,10 @@ static int icp_multi_insn_read_ao(struct comedi_device *dev, static int icp_multi_insn_bits_di(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct icp_multi_private *devpriv = dev->private; - - data[1] = readw(devpriv->io_addr + ICP_MULTI_DI); + data[1] = readw(dev->mmio + ICP_MULTI_DI); return insn->n; } @@ -346,12 +340,10 @@ static int icp_multi_insn_bits_do(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct icp_multi_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - writew(s->state, devpriv->io_addr + ICP_MULTI_DO); + writew(s->state, dev->mmio + ICP_MULTI_DO); - data[1] = readw(devpriv->io_addr + ICP_MULTI_DI); + data[1] = readw(dev->mmio + ICP_MULTI_DI); return insn->n; } @@ -374,11 +366,10 @@ static int icp_multi_insn_write_ctr(struct comedi_device *dev, static irqreturn_t interrupt_service_icp_multi(int irq, void *d) { struct comedi_device *dev = d; - struct icp_multi_private *devpriv = dev->private; int int_no; /* Is this interrupt from our board? */ - int_no = readw(devpriv->io_addr + ICP_MULTI_INT_STAT) & Status_IRQ; + int_no = readw(dev->mmio + ICP_MULTI_INT_STAT) & Status_IRQ; if (!int_no) /* No, exit */ return IRQ_NONE; @@ -448,8 +439,8 @@ static int icp_multi_reset(struct comedi_device *dev) unsigned int i; /* Clear INT enables and requests */ - writew(0, devpriv->io_addr + ICP_MULTI_INT_EN); - writew(0x00ff, devpriv->io_addr + ICP_MULTI_INT_STAT); + writew(0, dev->mmio + ICP_MULTI_INT_EN); + writew(0x00ff, dev->mmio + ICP_MULTI_INT_STAT); /* Set DACs to 0..5V range and 0V output */ for (i = 0; i < 4; i++) { @@ -459,21 +450,20 @@ static int icp_multi_reset(struct comedi_device *dev) devpriv->DacCmdStatus |= (i << 8); /* Output 0V */ - writew(0, devpriv->io_addr + ICP_MULTI_AO); + writew(0, dev->mmio + ICP_MULTI_AO); /* Set start conversion bit */ devpriv->DacCmdStatus |= DAC_ST; /* Output to command / status register */ - writew(devpriv->DacCmdStatus, - devpriv->io_addr + ICP_MULTI_DAC_CSR); + writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR); /* Delay to allow DAC time to recover */ udelay(1); } /* Digital outputs to 0 */ - writew(0, devpriv->io_addr + ICP_MULTI_DO); + writew(0, dev->mmio + ICP_MULTI_DO); return 0; } @@ -494,8 +484,8 @@ static int icp_multi_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv->io_addr = pci_ioremap_bar(pcidev, 2); - if (!devpriv->io_addr) + dev->mmio = pci_ioremap_bar(pcidev, 2); + if (!dev->mmio) return -ENOMEM; ret = comedi_alloc_subdevices(dev, 5); @@ -573,8 +563,8 @@ static void icp_multi_detach(struct comedi_device *dev) icp_multi_reset(dev); if (dev->irq) free_irq(dev->irq, dev); - if (devpriv && devpriv->io_addr) - iounmap(devpriv->io_addr); + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From 24a446127966eb309dbdb9c5b72c5cd59bd6edf9 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:27 -0700 Subject: staging: comedi: addi_apci_3xxx: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_3xxx.c | 68 +++++++++++-------------- 1 file changed, 29 insertions(+), 39 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_3xxx.c b/drivers/staging/comedi/drivers/addi_apci_3xxx.c index 1b7cbf400c10..0f0c7fa5daa3 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3xxx.c +++ b/drivers/staging/comedi/drivers/addi_apci_3xxx.c @@ -353,7 +353,6 @@ static const struct apci3xxx_boardinfo apci3xxx_boardtypes[] = { }; struct apci3xxx_private { - void __iomem *mmio; unsigned int ai_timer; unsigned char ai_time_base; }; @@ -361,18 +360,17 @@ struct apci3xxx_private { static irqreturn_t apci3xxx_irq_handler(int irq, void *d) { struct comedi_device *dev = d; - struct apci3xxx_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned int status; unsigned int val; /* Test if interrupt occur */ - status = readl(devpriv->mmio + 16); + status = readl(dev->mmio + 16); if ((status & 0x2) == 0x2) { /* Reset the interrupt */ - writel(status, devpriv->mmio + 16); + writel(status, dev->mmio + 16); - val = readl(devpriv->mmio + 28); + val = readl(dev->mmio + 28); comedi_buf_put(s, val); s->async->events |= COMEDI_CB_EOA; @@ -385,9 +383,7 @@ static irqreturn_t apci3xxx_irq_handler(int irq, void *d) static int apci3xxx_ai_started(struct comedi_device *dev) { - struct apci3xxx_private *devpriv = dev->private; - - if ((readl(devpriv->mmio + 8) & 0x80000) == 0x80000) + if ((readl(dev->mmio + 8) & 0x80000) == 0x80000) return 1; return 0; @@ -395,7 +391,6 @@ static int apci3xxx_ai_started(struct comedi_device *dev) static int apci3xxx_ai_setup(struct comedi_device *dev, unsigned int chanspec) { - struct apci3xxx_private *devpriv = dev->private; unsigned int chan = CR_CHAN(chanspec); unsigned int range = CR_RANGE(chanspec); unsigned int aref = CR_AREF(chanspec); @@ -406,29 +401,29 @@ static int apci3xxx_ai_setup(struct comedi_device *dev, unsigned int chanspec) return -EBUSY; /* Clear the FIFO */ - writel(0x10000, devpriv->mmio + 12); + writel(0x10000, dev->mmio + 12); /* Get and save the delay mode */ - delay_mode = readl(devpriv->mmio + 4); + delay_mode = readl(dev->mmio + 4); delay_mode &= 0xfffffef0; /* Channel configuration selection */ - writel(delay_mode, devpriv->mmio + 4); + writel(delay_mode, dev->mmio + 4); /* Make the configuration */ val = (range & 3) | ((range >> 2) << 6) | ((aref == AREF_DIFF) << 7); - writel(val, devpriv->mmio + 0); + writel(val, dev->mmio + 0); /* Channel selection */ - writel(delay_mode | 0x100, devpriv->mmio + 4); - writel(chan, devpriv->mmio + 0); + writel(delay_mode | 0x100, dev->mmio + 4); + writel(chan, dev->mmio + 0); /* Restore delay mode */ - writel(delay_mode, devpriv->mmio + 4); + writel(delay_mode, dev->mmio + 4); /* Set the number of sequence to 1 */ - writel(1, devpriv->mmio + 48); + writel(1, dev->mmio + 48); return 0; } @@ -438,10 +433,9 @@ static int apci3xxx_ai_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct apci3xxx_private *devpriv = dev->private; unsigned int status; - status = readl(devpriv->mmio + 20); + status = readl(dev->mmio + 20); if (status & 0x1) return 0; return -EBUSY; @@ -452,7 +446,6 @@ static int apci3xxx_ai_insn_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct apci3xxx_private *devpriv = dev->private; int ret; int i; @@ -462,7 +455,7 @@ static int apci3xxx_ai_insn_read(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { /* Start the conversion */ - writel(0x80000, devpriv->mmio + 8); + writel(0x80000, dev->mmio + 8); /* Wait the EOS */ ret = comedi_timeout(dev, s, insn, apci3xxx_ai_eoc, 0); @@ -470,7 +463,7 @@ static int apci3xxx_ai_insn_read(struct comedi_device *dev, return ret; /* Read the analog value */ - data[i] = readl(devpriv->mmio + 28); + data[i] = readl(dev->mmio + 28); } return insn->n; @@ -594,13 +587,13 @@ static int apci3xxx_ai_cmd(struct comedi_device *dev, return ret; /* Set the convert timing unit */ - writel(devpriv->ai_time_base, devpriv->mmio + 36); + writel(devpriv->ai_time_base, dev->mmio + 36); /* Set the convert timing */ - writel(devpriv->ai_timer, devpriv->mmio + 32); + writel(devpriv->ai_timer, dev->mmio + 32); /* Start the conversion */ - writel(0x180000, devpriv->mmio + 8); + writel(0x180000, dev->mmio + 8); return 0; } @@ -616,10 +609,9 @@ static int apci3xxx_ao_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct apci3xxx_private *devpriv = dev->private; unsigned int status; - status = readl(devpriv->mmio + 96); + status = readl(dev->mmio + 96); if (status & 0x100) return 0; return -EBUSY; @@ -630,7 +622,6 @@ static int apci3xxx_ao_insn_write(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct apci3xxx_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int range = CR_RANGE(insn->chanspec); int ret; @@ -638,10 +629,10 @@ static int apci3xxx_ao_insn_write(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { /* Set the range selection */ - writel(range, devpriv->mmio + 96); + writel(range, dev->mmio + 96); /* Write the analog value to the selected channel */ - writel((data[i] << 8) | chan, devpriv->mmio + 100); + writel((data[i] << 8) | chan, dev->mmio + 100); /* Wait the end of transfer */ ret = comedi_timeout(dev, s, insn, apci3xxx_ao_eoc, 0); @@ -740,7 +731,6 @@ static int apci3xxx_dio_insn_bits(struct comedi_device *dev, static int apci3xxx_reset(struct comedi_device *dev) { - struct apci3xxx_private *devpriv = dev->private; unsigned int val; int i; @@ -748,18 +738,18 @@ static int apci3xxx_reset(struct comedi_device *dev) disable_irq(dev->irq); /* Clear the start command */ - writel(0, devpriv->mmio + 8); + writel(0, dev->mmio + 8); /* Reset the interrupt flags */ - val = readl(devpriv->mmio + 16); - writel(val, devpriv->mmio + 16); + val = readl(dev->mmio + 16); + writel(val, dev->mmio + 16); /* clear the EOS */ - readl(devpriv->mmio + 20); + readl(dev->mmio + 20); /* Clear the FIFO */ for (i = 0; i < 16; i++) - val = readl(devpriv->mmio + 28); + val = readl(dev->mmio + 28); /* Enable the interrupt */ enable_irq(dev->irq); @@ -794,7 +784,7 @@ static int apci3xxx_auto_attach(struct comedi_device *dev, return ret; dev->iobase = pci_resource_start(pcidev, 2); - devpriv->mmio = pci_ioremap_bar(pcidev, 3); + dev->mmio = pci_ioremap_bar(pcidev, 3); if (pcidev->irq > 0) { ret = request_irq(pcidev->irq, apci3xxx_irq_handler, @@ -918,8 +908,8 @@ static void apci3xxx_detach(struct comedi_device *dev) apci3xxx_reset(dev); if (dev->irq) free_irq(dev->irq, dev); - if (devpriv->mmio) - iounmap(devpriv->mmio); + if (dev->mmio) + iounmap(dev->mmio); } comedi_pci_disable(dev); } -- cgit From 1d14999509569b1aef8c839211f690f2b67f60ff Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:28 -0700 Subject: staging: comedi: daqboard2000: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/daqboard2000.c | 76 +++++++++++---------------- 1 file changed, 31 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/daqboard2000.c b/drivers/staging/comedi/drivers/daqboard2000.c index ceab88b62a20..cd369cd40114 100644 --- a/drivers/staging/comedi/drivers/daqboard2000.c +++ b/drivers/staging/comedi/drivers/daqboard2000.c @@ -274,19 +274,16 @@ struct daqboard2000_private { enum { card_daqboard_2000 } card; - void __iomem *daq; void __iomem *plx; unsigned int ao_readback[2]; }; static void writeAcqScanListEntry(struct comedi_device *dev, u16 entry) { - struct daqboard2000_private *devpriv = dev->private; - /* udelay(4); */ - writew(entry & 0x00ff, devpriv->daq + acqScanListFIFO); + writew(entry & 0x00ff, dev->mmio + acqScanListFIFO); /* udelay(4); */ - writew((entry >> 8) & 0x00ff, devpriv->daq + acqScanListFIFO); + writew((entry >> 8) & 0x00ff, dev->mmio + acqScanListFIFO); } static void setup_sampling(struct comedi_device *dev, int chan, int gain) @@ -338,10 +335,9 @@ static int daqboard2000_ai_status(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct daqboard2000_private *devpriv = dev->private; unsigned int status; - status = readw(devpriv->daq + acqControl); + status = readw(dev->mmio + acqControl); if (status & context) return 0; return -EBUSY; @@ -352,22 +348,21 @@ static int daqboard2000_ai_insn_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct daqboard2000_private *devpriv = dev->private; int gain, chan; int ret; int i; writew(DAQBOARD2000_AcqResetScanListFifo | DAQBOARD2000_AcqResetResultsFifo | - DAQBOARD2000_AcqResetConfigPipe, devpriv->daq + acqControl); + DAQBOARD2000_AcqResetConfigPipe, dev->mmio + acqControl); /* * If pacer clock is not set to some high value (> 10 us), we * risk multiple samples to be put into the result FIFO. */ /* 1 second, should be long enough */ - writel(1000000, devpriv->daq + acqPacerClockDivLow); - writew(0, devpriv->daq + acqPacerClockDivHigh); + writel(1000000, dev->mmio + acqPacerClockDivLow); + writew(0, dev->mmio + acqPacerClockDivHigh); gain = CR_RANGE(insn->chanspec); chan = CR_CHAN(insn->chanspec); @@ -379,15 +374,14 @@ static int daqboard2000_ai_insn_read(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { setup_sampling(dev, chan, gain); /* Enable reading from the scanlist FIFO */ - writew(DAQBOARD2000_SeqStartScanList, - devpriv->daq + acqControl); + writew(DAQBOARD2000_SeqStartScanList, dev->mmio + acqControl); ret = comedi_timeout(dev, s, insn, daqboard2000_ai_status, DAQBOARD2000_AcqConfigPipeFull); if (ret) return ret; - writew(DAQBOARD2000_AdcPacerEnable, devpriv->daq + acqControl); + writew(DAQBOARD2000_AdcPacerEnable, dev->mmio + acqControl); ret = comedi_timeout(dev, s, insn, daqboard2000_ai_status, DAQBOARD2000_AcqLogicScanning); @@ -399,9 +393,9 @@ static int daqboard2000_ai_insn_read(struct comedi_device *dev, if (ret) return ret; - data[i] = readw(devpriv->daq + acqResultsFIFO); - writew(DAQBOARD2000_AdcPacerDisable, devpriv->daq + acqControl); - writew(DAQBOARD2000_SeqStopScanList, devpriv->daq + acqControl); + data[i] = readw(dev->mmio + acqResultsFIFO); + writew(DAQBOARD2000_AdcPacerDisable, dev->mmio + acqControl); + writew(DAQBOARD2000_SeqStopScanList, dev->mmio + acqControl); } return i; @@ -427,11 +421,10 @@ static int daqboard2000_ao_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct daqboard2000_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int status; - status = readw(devpriv->daq + dacControl); + status = readw(dev->mmio + dacControl); if ((status & ((chan + 1) * 0x0010)) == 0) return 0; return -EBUSY; @@ -453,11 +446,10 @@ static int daqboard2000_ao_insn_write(struct comedi_device *dev, * OK, since it works OK without enabling the DAC's, * let's keep it as simple as possible... */ - writew((chan + 2) * 0x0010 | 0x0001, - devpriv->daq + dacControl); + writew((chan + 2) * 0x0010 | 0x0001, dev->mmio + dacControl); udelay(1000); #endif - writew(data[i], devpriv->daq + dacSetting(chan)); + writew(data[i], dev->mmio + dacSetting(chan)); ret = comedi_timeout(dev, s, insn, daqboard2000_ao_eoc, 0); if (ret) @@ -469,8 +461,7 @@ static int daqboard2000_ao_insn_write(struct comedi_device *dev, * Since we never enabled the DAC's, we don't need * to disable it... */ - writew((chan + 2) * 0x0010 | 0x0000, - devpriv->daq + dacControl); + writew((chan + 2) * 0x0010 | 0x0000, dev->mmio + dacControl); udelay(1000); #endif } @@ -512,14 +503,13 @@ static void daqboard2000_pulseProgPin(struct comedi_device *dev) static int daqboard2000_pollCPLD(struct comedi_device *dev, int mask) { - struct daqboard2000_private *devpriv = dev->private; int result = 0; int i; int cpld; /* timeout after 50 tries -> 5ms */ for (i = 0; i < 50; i++) { - cpld = readw(devpriv->daq + 0x1000); + cpld = readw(dev->mmio + 0x1000); if ((cpld & mask) == mask) { result = 1; break; @@ -532,12 +522,11 @@ static int daqboard2000_pollCPLD(struct comedi_device *dev, int mask) static int daqboard2000_writeCPLD(struct comedi_device *dev, int data) { - struct daqboard2000_private *devpriv = dev->private; int result = 0; udelay(10); - writew(data, devpriv->daq + 0x1000); - if ((readw(devpriv->daq + 0x1000) & DAQBOARD2000_CPLD_INIT) == + writew(data, dev->mmio + 0x1000); + if ((readw(dev->mmio + 0x1000) & DAQBOARD2000_CPLD_INIT) == DAQBOARD2000_CPLD_INIT) { result = 1; } @@ -593,23 +582,21 @@ static void daqboard2000_adcStopDmaTransfer(struct comedi_device *dev) static void daqboard2000_adcDisarm(struct comedi_device *dev) { - struct daqboard2000_private *devpriv = dev->private; - /* Disable hardware triggers */ udelay(2); writew(DAQBOARD2000_TrigAnalog | DAQBOARD2000_TrigDisable, - devpriv->daq + trigControl); + dev->mmio + trigControl); udelay(2); writew(DAQBOARD2000_TrigTTL | DAQBOARD2000_TrigDisable, - devpriv->daq + trigControl); + dev->mmio + trigControl); /* Stop the scan list FIFO from loading the configuration pipe */ udelay(2); - writew(DAQBOARD2000_SeqStopScanList, devpriv->daq + acqControl); + writew(DAQBOARD2000_SeqStopScanList, dev->mmio + acqControl); /* Stop the pacer clock */ udelay(2); - writew(DAQBOARD2000_AdcPacerDisable, devpriv->daq + acqControl); + writew(DAQBOARD2000_AdcPacerDisable, dev->mmio + acqControl); /* Stop the input dma (abort channel 1) */ daqboard2000_adcStopDmaTransfer(dev); @@ -617,23 +604,22 @@ static void daqboard2000_adcDisarm(struct comedi_device *dev) static void daqboard2000_activateReferenceDacs(struct comedi_device *dev) { - struct daqboard2000_private *devpriv = dev->private; unsigned int val; int timeout; /* Set the + reference dac value in the FPGA */ - writew(0x80 | DAQBOARD2000_PosRefDacSelect, devpriv->daq + refDacs); + writew(0x80 | DAQBOARD2000_PosRefDacSelect, dev->mmio + refDacs); for (timeout = 0; timeout < 20; timeout++) { - val = readw(devpriv->daq + dacControl); + val = readw(dev->mmio + dacControl); if ((val & DAQBOARD2000_RefBusy) == 0) break; udelay(2); } /* Set the - reference dac value in the FPGA */ - writew(0x80 | DAQBOARD2000_NegRefDacSelect, devpriv->daq + refDacs); + writew(0x80 | DAQBOARD2000_NegRefDacSelect, dev->mmio + refDacs); for (timeout = 0; timeout < 20; timeout++) { - val = readw(devpriv->daq + dacControl); + val = readw(dev->mmio + dacControl); if ((val & DAQBOARD2000_RefBusy) == 0) break; udelay(2); @@ -718,8 +704,8 @@ static int daqboard2000_auto_attach(struct comedi_device *dev, return result; devpriv->plx = pci_ioremap_bar(pcidev, 0); - devpriv->daq = pci_ioremap_bar(pcidev, 2); - if (!devpriv->plx || !devpriv->daq) + dev->mmio = pci_ioremap_bar(pcidev, 2); + if (!devpriv->plx || !dev->mmio) return -ENOMEM; result = comedi_alloc_subdevices(dev, 3); @@ -758,7 +744,7 @@ static int daqboard2000_auto_attach(struct comedi_device *dev, s = &dev->subdevices[2]; result = subdev_8255_init(dev, s, daqboard2000_8255_cb, - (unsigned long)(devpriv->daq + dioP2ExpansionIO8Bit)); + (unsigned long)(dev->mmio + dioP2ExpansionIO8Bit)); if (result) return result; @@ -772,8 +758,8 @@ static void daqboard2000_detach(struct comedi_device *dev) if (dev->irq) free_irq(dev->irq, dev); if (devpriv) { - if (devpriv->daq) - iounmap(devpriv->daq); + if (dev->mmio) + iounmap(dev->mmio); if (devpriv->plx) iounmap(devpriv->plx); } -- cgit From fee3b2455c849b8ab60634300bbbd848be943264 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:29 -0700 Subject: staging: comedi: dt3000: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt3000.c | 104 ++++++++++++++------------------ 1 file changed, 44 insertions(+), 60 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/dt3000.c b/drivers/staging/comedi/drivers/dt3000.c index bf5a05c64fe2..56e21cc2dcfe 100644 --- a/drivers/staging/comedi/drivers/dt3000.c +++ b/drivers/staging/comedi/drivers/dt3000.c @@ -244,7 +244,6 @@ static const struct dt3k_boardtype dt3k_boardtypes[] = { #define DT3000_CHANNEL_MODE_DI 1 struct dt3k_private { - void __iomem *io_addr; unsigned int lock; unsigned int ao_readback[2]; unsigned int ai_front; @@ -255,14 +254,13 @@ struct dt3k_private { static void dt3k_send_cmd(struct comedi_device *dev, unsigned int cmd) { - struct dt3k_private *devpriv = dev->private; int i; unsigned int status = 0; - writew(cmd, devpriv->io_addr + DPR_Command_Mbx); + writew(cmd, dev->mmio + DPR_Command_Mbx); for (i = 0; i < TIMEOUT; i++) { - status = readw(devpriv->io_addr + DPR_Command_Mbx); + status = readw(dev->mmio + DPR_Command_Mbx); if ((status & DT3000_COMPLETION_MASK) != DT3000_NOTPROCESSED) break; udelay(1); @@ -277,28 +275,24 @@ static unsigned int dt3k_readsingle(struct comedi_device *dev, unsigned int subsys, unsigned int chan, unsigned int gain) { - struct dt3k_private *devpriv = dev->private; - - writew(subsys, devpriv->io_addr + DPR_SubSys); + writew(subsys, dev->mmio + DPR_SubSys); - writew(chan, devpriv->io_addr + DPR_Params(0)); - writew(gain, devpriv->io_addr + DPR_Params(1)); + writew(chan, dev->mmio + DPR_Params(0)); + writew(gain, dev->mmio + DPR_Params(1)); dt3k_send_cmd(dev, CMD_READSINGLE); - return readw(devpriv->io_addr + DPR_Params(2)); + return readw(dev->mmio + DPR_Params(2)); } static void dt3k_writesingle(struct comedi_device *dev, unsigned int subsys, unsigned int chan, unsigned int data) { - struct dt3k_private *devpriv = dev->private; - - writew(subsys, devpriv->io_addr + DPR_SubSys); + writew(subsys, dev->mmio + DPR_SubSys); - writew(chan, devpriv->io_addr + DPR_Params(0)); - writew(0, devpriv->io_addr + DPR_Params(1)); - writew(data, devpriv->io_addr + DPR_Params(2)); + writew(chan, dev->mmio + DPR_Params(0)); + writew(0, dev->mmio + DPR_Params(1)); + writew(data, dev->mmio + DPR_Params(2)); dt3k_send_cmd(dev, CMD_WRITESINGLE); } @@ -313,7 +307,7 @@ static void dt3k_ai_empty_fifo(struct comedi_device *dev, int i; unsigned short data; - front = readw(devpriv->io_addr + DPR_AD_Buf_Front); + front = readw(dev->mmio + DPR_AD_Buf_Front); count = front - devpriv->ai_front; if (count < 0) count += AI_FIFO_DEPTH; @@ -321,7 +315,7 @@ static void dt3k_ai_empty_fifo(struct comedi_device *dev, rear = devpriv->ai_rear; for (i = 0; i < count; i++) { - data = readw(devpriv->io_addr + DPR_ADC_buffer + rear); + data = readw(dev->mmio + DPR_ADC_buffer + rear); comedi_buf_put(s, data); rear++; if (rear >= AI_FIFO_DEPTH) @@ -329,17 +323,16 @@ static void dt3k_ai_empty_fifo(struct comedi_device *dev, } devpriv->ai_rear = rear; - writew(rear, devpriv->io_addr + DPR_AD_Buf_Rear); + writew(rear, dev->mmio + DPR_AD_Buf_Rear); } -static int dt3k_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) +static int dt3k_ai_cancel(struct comedi_device *dev, + struct comedi_subdevice *s) { - struct dt3k_private *devpriv = dev->private; - - writew(SUBS_AI, devpriv->io_addr + DPR_SubSys); + writew(SUBS_AI, dev->mmio + DPR_SubSys); dt3k_send_cmd(dev, CMD_STOP); - writew(0, devpriv->io_addr + DPR_Int_Mask); + writew(0, dev->mmio + DPR_Int_Mask); return 0; } @@ -351,14 +344,13 @@ static int debug_n_ints; static irqreturn_t dt3k_interrupt(int irq, void *d) { struct comedi_device *dev = d; - struct dt3k_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; unsigned int status; if (!dev->attached) return IRQ_NONE; - status = readw(devpriv->io_addr + DPR_Intr_Flag); + status = readw(dev->mmio + DPR_Intr_Flag); if (status & DT3000_ADFULL) { dt3k_ai_empty_fifo(dev, s); @@ -491,7 +483,6 @@ static int dt3k_ai_cmdtest(struct comedi_device *dev, static int dt3k_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct dt3k_private *devpriv = dev->private; struct comedi_cmd *cmd = &s->async->cmd; int i; unsigned int chan, range, aref; @@ -503,41 +494,40 @@ static int dt3k_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) chan = CR_CHAN(cmd->chanlist[i]); range = CR_RANGE(cmd->chanlist[i]); - writew((range << 6) | chan, - devpriv->io_addr + DPR_ADC_buffer + i); + writew((range << 6) | chan, dev->mmio + DPR_ADC_buffer + i); } aref = CR_AREF(cmd->chanlist[0]); - writew(cmd->scan_end_arg, devpriv->io_addr + DPR_Params(0)); + writew(cmd->scan_end_arg, dev->mmio + DPR_Params(0)); if (cmd->convert_src == TRIG_TIMER) { divider = dt3k_ns_to_timer(50, &cmd->convert_arg, cmd->flags); - writew((divider >> 16), devpriv->io_addr + DPR_Params(1)); - writew((divider & 0xffff), devpriv->io_addr + DPR_Params(2)); + writew((divider >> 16), dev->mmio + DPR_Params(1)); + writew((divider & 0xffff), dev->mmio + DPR_Params(2)); } if (cmd->scan_begin_src == TRIG_TIMER) { tscandiv = dt3k_ns_to_timer(100, &cmd->scan_begin_arg, cmd->flags); - writew((tscandiv >> 16), devpriv->io_addr + DPR_Params(3)); - writew((tscandiv & 0xffff), devpriv->io_addr + DPR_Params(4)); + writew((tscandiv >> 16), dev->mmio + DPR_Params(3)); + writew((tscandiv & 0xffff), dev->mmio + DPR_Params(4)); } mode = DT3000_AD_RETRIG_INTERNAL | 0 | 0; - writew(mode, devpriv->io_addr + DPR_Params(5)); - writew(aref == AREF_DIFF, devpriv->io_addr + DPR_Params(6)); + writew(mode, dev->mmio + DPR_Params(5)); + writew(aref == AREF_DIFF, dev->mmio + DPR_Params(6)); - writew(AI_FIFO_DEPTH / 2, devpriv->io_addr + DPR_Params(7)); + writew(AI_FIFO_DEPTH / 2, dev->mmio + DPR_Params(7)); - writew(SUBS_AI, devpriv->io_addr + DPR_SubSys); + writew(SUBS_AI, dev->mmio + DPR_SubSys); dt3k_send_cmd(dev, CMD_CONFIG); writew(DT3000_ADFULL | DT3000_ADSWERR | DT3000_ADHWERR, - devpriv->io_addr + DPR_Int_Mask); + dev->mmio + DPR_Int_Mask); debug_n_ints = 0; - writew(SUBS_AI, devpriv->io_addr + DPR_SubSys); + writew(SUBS_AI, dev->mmio + DPR_SubSys); dt3k_send_cmd(dev, CMD_START); return 0; @@ -593,16 +583,14 @@ static int dt3k_ao_insn_read(struct comedi_device *dev, static void dt3k_dio_config(struct comedi_device *dev, int bits) { - struct dt3k_private *devpriv = dev->private; - /* XXX */ - writew(SUBS_DOUT, devpriv->io_addr + DPR_SubSys); + writew(SUBS_DOUT, dev->mmio + DPR_SubSys); - writew(bits, devpriv->io_addr + DPR_Params(0)); + writew(bits, dev->mmio + DPR_Params(0)); #if 0 /* don't know */ - writew(0, devpriv->io_addr + DPR_Params(1)); - writew(0, devpriv->io_addr + DPR_Params(2)); + writew(0, dev->mmio + DPR_Params(1)); + writew(0, dev->mmio + DPR_Params(2)); #endif dt3k_send_cmd(dev, CMD_CONFIG); @@ -646,20 +634,20 @@ static int dt3k_dio_insn_bits(struct comedi_device *dev, static int dt3k_mem_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct dt3k_private *devpriv = dev->private; unsigned int addr = CR_CHAN(insn->chanspec); int i; for (i = 0; i < insn->n; i++) { - writew(SUBS_MEM, devpriv->io_addr + DPR_SubSys); - writew(addr, devpriv->io_addr + DPR_Params(0)); - writew(1, devpriv->io_addr + DPR_Params(1)); + writew(SUBS_MEM, dev->mmio + DPR_SubSys); + writew(addr, dev->mmio + DPR_Params(0)); + writew(1, dev->mmio + DPR_Params(1)); dt3k_send_cmd(dev, CMD_READCODE); - data[i] = readw(devpriv->io_addr + DPR_Params(2)); + data[i] = readw(dev->mmio + DPR_Params(2)); } return i; @@ -689,8 +677,8 @@ static int dt3000_auto_attach(struct comedi_device *dev, if (ret < 0) return ret; - devpriv->io_addr = pci_ioremap_bar(pcidev, 0); - if (!devpriv->io_addr) + dev->mmio = pci_ioremap_bar(pcidev, 0); + if (!dev->mmio) return -ENOMEM; if (pcidev->irq) { @@ -764,14 +752,10 @@ static int dt3000_auto_attach(struct comedi_device *dev, static void dt3000_detach(struct comedi_device *dev) { - struct dt3k_private *devpriv = dev->private; - if (dev->irq) free_irq(dev->irq, dev); - if (devpriv) { - if (devpriv->io_addr) - iounmap(devpriv->io_addr); - } + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From 53eeeaa6f7d1e8c4d45cbd7e61204cf4f631ca77 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:30 -0700 Subject: staging: comedi: ni_6527: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_6527.c | 85 +++++++++++++------------------- 1 file changed, 33 insertions(+), 52 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c index 8ea93b584526..6f9ca7ca1245 100644 --- a/drivers/staging/comedi/drivers/ni_6527.c +++ b/drivers/staging/comedi/drivers/ni_6527.c @@ -90,7 +90,6 @@ static const struct ni6527_board ni6527_boards[] = { }; struct ni6527_private { - void __iomem *mmio_base; unsigned int filter_interval; unsigned int filter_enable; }; @@ -99,14 +98,15 @@ static void ni6527_set_filter_interval(struct comedi_device *dev, unsigned int val) { struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; if (val != devpriv->filter_interval) { - writeb(val & 0xff, mmio + NI6527_FILT_INTERVAL_REG(0)); - writeb((val >> 8) & 0xff, mmio + NI6527_FILT_INTERVAL_REG(1)); - writeb((val >> 16) & 0x0f, mmio + NI6527_FILT_INTERVAL_REG(2)); + writeb(val & 0xff, dev->mmio + NI6527_FILT_INTERVAL_REG(0)); + writeb((val >> 8) & 0xff, + dev->mmio + NI6527_FILT_INTERVAL_REG(1)); + writeb((val >> 16) & 0x0f, + dev->mmio + NI6527_FILT_INTERVAL_REG(2)); - writeb(NI6527_CLR_INTERVAL, mmio + NI6527_CLR_REG); + writeb(NI6527_CLR_INTERVAL, dev->mmio + NI6527_CLR_REG); devpriv->filter_interval = val; } @@ -115,12 +115,9 @@ static void ni6527_set_filter_interval(struct comedi_device *dev, static void ni6527_set_filter_enable(struct comedi_device *dev, unsigned int val) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; - - writeb(val & 0xff, mmio + NI6527_FILT_ENA_REG(0)); - writeb((val >> 8) & 0xff, mmio + NI6527_FILT_ENA_REG(1)); - writeb((val >> 16) & 0xff, mmio + NI6527_FILT_ENA_REG(2)); + writeb(val & 0xff, dev->mmio + NI6527_FILT_ENA_REG(0)); + writeb((val >> 8) & 0xff, dev->mmio + NI6527_FILT_ENA_REG(1)); + writeb((val >> 16) & 0xff, dev->mmio + NI6527_FILT_ENA_REG(2)); } static int ni6527_di_insn_config(struct comedi_device *dev, @@ -162,13 +159,11 @@ static int ni6527_di_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; unsigned int val; - val = readb(mmio + NI6527_DI_REG(0)); - val |= (readb(mmio + NI6527_DI_REG(1)) << 8); - val |= (readb(mmio + NI6527_DI_REG(2)) << 16); + val = readb(dev->mmio + NI6527_DI_REG(0)); + val |= (readb(dev->mmio + NI6527_DI_REG(1)) << 8); + val |= (readb(dev->mmio + NI6527_DI_REG(2)) << 16); data[1] = val; @@ -180,8 +175,6 @@ static int ni6527_do_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; unsigned int mask; mask = comedi_dio_update_state(s, data); @@ -190,11 +183,13 @@ static int ni6527_do_insn_bits(struct comedi_device *dev, unsigned int val = s->state ^ 0xffffff; if (mask & 0x0000ff) - writeb(val & 0xff, mmio + NI6527_DO_REG(0)); + writeb(val & 0xff, dev->mmio + NI6527_DO_REG(0)); if (mask & 0x00ff00) - writeb((val >> 8) & 0xff, mmio + NI6527_DO_REG(1)); + writeb((val >> 8) & 0xff, + dev->mmio + NI6527_DO_REG(1)); if (mask & 0xff0000) - writeb((val >> 16) & 0xff, mmio + NI6527_DO_REG(2)); + writeb((val >> 16) & 0xff, + dev->mmio + NI6527_DO_REG(2)); } data[1] = s->state; @@ -205,12 +200,10 @@ static int ni6527_do_insn_bits(struct comedi_device *dev, static irqreturn_t ni6527_interrupt(int irq, void *d) { struct comedi_device *dev = d; - struct ni6527_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; - void __iomem *mmio = devpriv->mmio_base; unsigned int status; - status = readb(mmio + NI6527_STATUS_REG); + status = readb(dev->mmio + NI6527_STATUS_REG); if (!(status & NI6527_STATUS_IRQ)) return IRQ_NONE; @@ -220,7 +213,7 @@ static irqreturn_t ni6527_interrupt(int irq, void *d) comedi_event(dev, s); } - writeb(NI6527_CLR_IRQS, mmio + NI6527_CLR_REG); + writeb(NI6527_CLR_IRQS, dev->mmio + NI6527_CLR_REG); return IRQ_HANDLED; } @@ -270,11 +263,8 @@ static int ni6527_intr_cmdtest(struct comedi_device *dev, static int ni6527_intr_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; - - writeb(NI6527_CLR_IRQS, mmio + NI6527_CLR_REG); - writeb(NI6527_CTRL_ENABLE_IRQS, mmio + NI6527_CTRL_REG); + writeb(NI6527_CLR_IRQS, dev->mmio + NI6527_CLR_REG); + writeb(NI6527_CTRL_ENABLE_IRQS, dev->mmio + NI6527_CTRL_REG); return 0; } @@ -282,10 +272,7 @@ static int ni6527_intr_cmd(struct comedi_device *dev, static int ni6527_intr_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; - - writeb(NI6527_CTRL_DISABLE_IRQS, mmio + NI6527_CTRL_REG); + writeb(NI6527_CTRL_DISABLE_IRQS, dev->mmio + NI6527_CTRL_REG); return 0; } @@ -303,8 +290,6 @@ static void ni6527_set_edge_detection(struct comedi_device *dev, unsigned int rising, unsigned int falling) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; unsigned int i; rising &= mask; @@ -313,19 +298,20 @@ static void ni6527_set_edge_detection(struct comedi_device *dev, if (mask & 0xff) { if (~mask & 0xff) { /* preserve rising-edge detection channels */ - rising |= readb(mmio + + rising |= readb(dev->mmio + NI6527_RISING_EDGE_REG(i)) & (~mask & 0xff); /* preserve falling-edge detection channels */ - falling |= readb(mmio + + falling |= readb(dev->mmio + NI6527_FALLING_EDGE_REG(i)) & (~mask & 0xff); } /* update rising-edge detection channels */ - writeb(rising & 0xff, mmio + NI6527_RISING_EDGE_REG(i)); + writeb(rising & 0xff, + dev->mmio + NI6527_RISING_EDGE_REG(i)); /* update falling-edge detection channels */ writeb(falling & 0xff, - mmio + NI6527_FALLING_EDGE_REG(i)); + dev->mmio + NI6527_FALLING_EDGE_REG(i)); } rising >>= 8; falling >>= 8; @@ -387,9 +373,6 @@ static int ni6527_intr_insn_config(struct comedi_device *dev, static void ni6527_reset(struct comedi_device *dev) { - struct ni6527_private *devpriv = dev->private; - void __iomem *mmio = devpriv->mmio_base; - /* disable deglitch filters on all channels */ ni6527_set_filter_enable(dev, 0); @@ -397,8 +380,8 @@ static void ni6527_reset(struct comedi_device *dev) ni6527_set_edge_detection(dev, 0xffffffff, 0, 0); writeb(NI6527_CLR_IRQS | NI6527_CLR_RESET_FILT, - mmio + NI6527_CLR_REG); - writeb(NI6527_CTRL_DISABLE_IRQS, mmio + NI6527_CTRL_REG); + dev->mmio + NI6527_CLR_REG); + writeb(NI6527_CTRL_DISABLE_IRQS, dev->mmio + NI6527_CTRL_REG); } static int ni6527_auto_attach(struct comedi_device *dev, @@ -425,12 +408,12 @@ static int ni6527_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv->mmio_base = pci_ioremap_bar(pcidev, 1); - if (!devpriv->mmio_base) + dev->mmio = pci_ioremap_bar(pcidev, 1); + if (!dev->mmio) return -ENOMEM; /* make sure this is actually a 6527 device */ - if (readb(devpriv->mmio_base + NI6527_ID_REG) != 0x27) + if (readb(dev->mmio + NI6527_ID_REG) != 0x27) return -ENODEV; ni6527_reset(dev); @@ -487,9 +470,7 @@ static int ni6527_auto_attach(struct comedi_device *dev, static void ni6527_detach(struct comedi_device *dev) { - struct ni6527_private *devpriv = dev->private; - - if (devpriv && devpriv->mmio_base) + if (dev->mmio) ni6527_reset(dev); if (dev->irq) free_irq(dev->irq, dev); -- cgit From c6f71be317de7f97f569bd0928e8a1b9586970cf Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:31 -0700 Subject: staging: comedi: ni_6527: iounmap resource when detached PCI bar 1 is ioremap'ed during the (*auto_attach). This resource needs to be iounmap'ed when the driver is (*detach)ed. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_6527.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c index 6f9ca7ca1245..e84dac2bf3b2 100644 --- a/drivers/staging/comedi/drivers/ni_6527.c +++ b/drivers/staging/comedi/drivers/ni_6527.c @@ -474,6 +474,8 @@ static void ni6527_detach(struct comedi_device *dev) ni6527_reset(dev); if (dev->irq) free_irq(dev->irq, dev); + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From 176db588e2a36d8183e3cd9a373273b36ead35a1 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:32 -0700 Subject: staging: comedi: ni_670x: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_670x.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c index a054bd51ed21..f5caefad0b59 100644 --- a/drivers/staging/comedi/drivers/ni_670x.c +++ b/drivers/staging/comedi/drivers/ni_670x.c @@ -81,7 +81,6 @@ static const struct ni_670x_board ni_670x_boards[] = { }; struct ni_670x_private { - void __iomem *mmio; int boardtype; int dio; unsigned int ao_readback[32]; @@ -109,9 +108,9 @@ static int ni_670x_ao_winsn(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { /* First write in channel register which channel to use */ writel(((chan & 15) << 1) | ((chan & 16) >> 4), - devpriv->mmio + AO_CHAN_OFFSET); + dev->mmio + AO_CHAN_OFFSET); /* write channel value */ - writel(data[i], devpriv->mmio + AO_VALUE_OFFSET); + writel(data[i], dev->mmio + AO_VALUE_OFFSET); devpriv->ao_readback[chan] = data[i]; } @@ -137,13 +136,10 @@ static int ni_670x_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_670x_private *devpriv = dev->private; - void __iomem *io_addr = devpriv->mmio + DIO_PORT0_DATA_OFFSET; - if (comedi_dio_update_state(s, data)) - writel(s->state, io_addr); + writel(s->state, dev->mmio + DIO_PORT0_DATA_OFFSET); - data[1] = readl(io_addr); + data[1] = readl(dev->mmio + DIO_PORT0_DATA_OFFSET); return insn->n; } @@ -153,14 +149,13 @@ static int ni_670x_dio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ni_670x_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); if (ret) return ret; - writel(s->io_bits, devpriv->mmio + DIO_PORT0_DIR_OFFSET); + writel(s->io_bits, dev->mmio + DIO_PORT0_DIR_OFFSET); return insn->n; } @@ -217,8 +212,8 @@ static int ni_670x_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv->mmio = pci_ioremap_bar(pcidev, 1); - if (!devpriv->mmio) + dev->mmio = pci_ioremap_bar(pcidev, 1); + if (!dev->mmio) return -ENOMEM; ret = comedi_alloc_subdevices(dev, 2); @@ -260,16 +255,15 @@ static int ni_670x_auto_attach(struct comedi_device *dev, s->insn_config = ni_670x_dio_insn_config; /* Config of misc registers */ - writel(0x10, devpriv->mmio + MISC_CONTROL_OFFSET); + writel(0x10, dev->mmio + MISC_CONTROL_OFFSET); /* Config of ao registers */ - writel(0x00, devpriv->mmio + AO_CONTROL_OFFSET); + writel(0x00, dev->mmio + AO_CONTROL_OFFSET); return 0; } static void ni_670x_detach(struct comedi_device *dev) { - struct ni_670x_private *devpriv = dev->private; struct comedi_subdevice *s; if (dev->n_subdevices) { @@ -277,8 +271,8 @@ static void ni_670x_detach(struct comedi_device *dev) if (s) kfree(s->range_table_list); } - if (devpriv && devpriv->mmio) - iounmap(devpriv->mmio); + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From 9ebd1028cf79540997cc3cefcd62bfcfc2ed0603 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:33 -0700 Subject: staging: comedi: cb_pcidas64: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address of PCI bar 3. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcidas64.c | 41 ++++++++++------------------ 1 file changed, 14 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 4b332ddec022..fa12614cef2a 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -177,7 +177,7 @@ enum read_write_registers { DAC_FIFO_REG = 0x300, }; -/* devpriv->dio_counter_iobase registers */ +/* dev->mmio registers */ enum dio_counter_registers { DIO_8255_OFFSET = 0x0, DO_REG = 0x20, @@ -1062,7 +1062,6 @@ struct pcidas64_private { /* base addresses (ioremapped) */ 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; @@ -1797,8 +1796,7 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, return ret; if (thisboard->layout == LAYOUT_4020) - data[n] = readl(devpriv->dio_counter_iobase + - ADC_FIFO_REG) & 0xffff; + data[n] = readl(dev->mmio + ADC_FIFO_REG) & 0xffff; else data[n] = readw(devpriv->main_iobase + PIPE1_READ_REG); } @@ -2686,7 +2684,7 @@ static void pio_drain_ai_fifo_32(struct comedi_device *dev) } for (i = 0; read_code != write_code && i < max_transfer;) { - fifo_data = readl(devpriv->dio_counter_iobase + ADC_FIFO_REG); + fifo_data = readl(dev->mmio + ADC_FIFO_REG); cfc_write_to_buffer(s, fifo_data & 0xffff); i++; if (i < max_transfer) { @@ -3396,10 +3394,9 @@ 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) { - struct pcidas64_private *devpriv = dev->private; unsigned int bits; - bits = readb(devpriv->dio_counter_iobase + DI_REG); + bits = readb(dev->mmio + DI_REG); bits &= 0xf; data[1] = bits; data[0] = 0; @@ -3412,10 +3409,8 @@ static int do_wbits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct pcidas64_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - writeb(s->state, devpriv->dio_counter_iobase + DO_REG); + writeb(s->state, dev->mmio + DO_REG); data[1] = s->state; @@ -3427,15 +3422,13 @@ static int dio_60xx_config_insn(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct pcidas64_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); if (ret) return ret; - writeb(s->io_bits, - devpriv->dio_counter_iobase + DIO_DIRECTION_60XX_REG); + writeb(s->io_bits, dev->mmio + DIO_DIRECTION_60XX_REG); return insn->n; } @@ -3445,14 +3438,10 @@ static int dio_60xx_wbits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct pcidas64_private *devpriv = dev->private; - - if (comedi_dio_update_state(s, data)) { - writeb(s->state, - devpriv->dio_counter_iobase + DIO_DATA_60XX_REG); - } + if (comedi_dio_update_state(s, data)) + writeb(s->state, dev->mmio + DIO_DATA_60XX_REG); - data[1] = readb(devpriv->dio_counter_iobase + DIO_DATA_60XX_REG); + data[1] = readb(dev->mmio + DIO_DATA_60XX_REG); return insn->n; } @@ -3855,8 +3844,7 @@ static int setup_subdevices(struct comedi_device *dev) ret = subdev_8255_init(dev, s, dio_callback_4020, (unsigned long)dio_8255_iobase); } else { - dio_8255_iobase = - devpriv->dio_counter_iobase + DIO_8255_OFFSET; + dio_8255_iobase = dev->mmio + DIO_8255_OFFSET; ret = subdev_8255_init(dev, s, dio_callback, (unsigned long)dio_8255_iobase); } @@ -3957,10 +3945,9 @@ static int auto_attach(struct comedi_device *dev, devpriv->plx9080_iobase = pci_ioremap_bar(pcidev, 0); devpriv->main_iobase = pci_ioremap_bar(pcidev, 2); - devpriv->dio_counter_iobase = pci_ioremap_bar(pcidev, 3); + dev->mmio = pci_ioremap_bar(pcidev, 3); - if (!devpriv->plx9080_iobase || !devpriv->main_iobase - || !devpriv->dio_counter_iobase) { + if (!devpriv->plx9080_iobase || !devpriv->main_iobase || !dev->mmio) { dev_warn(dev->class_dev, "failed to remap io memory\n"); return -ENOMEM; } @@ -4024,8 +4011,8 @@ static void detach(struct comedi_device *dev) } if (devpriv->main_iobase) iounmap(devpriv->main_iobase); - if (devpriv->dio_counter_iobase) - iounmap(devpriv->dio_counter_iobase); + if (dev->mmio) + iounmap(dev->mmio); /* free pci dma buffers */ for (i = 0; i < ai_dma_ring_count(thisboard); i++) { if (devpriv->ai_buffer[i]) -- cgit From c5930d66ac156143028fe92793c39baebd34723b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:34 -0700 Subject: staging: comedi: rtd520: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address of PCI bar 2. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rtd520.c | 195 +++++++++++++++----------------- 1 file changed, 91 insertions(+), 104 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/rtd520.c b/drivers/staging/comedi/drivers/rtd520.c index 69dc73705513..6fc4ed33f66c 100644 --- a/drivers/staging/comedi/drivers/rtd520.c +++ b/drivers/staging/comedi/drivers/rtd520.c @@ -373,7 +373,6 @@ static const struct rtd_boardinfo rtd520Boards[] = { struct rtd_private { /* memory mapped board structures */ - void __iomem *las0; void __iomem *las1; void __iomem *lcfg; @@ -490,21 +489,19 @@ static unsigned short rtd_convert_chan_gain(struct comedi_device *dev, static void rtd_load_channelgain_list(struct comedi_device *dev, unsigned int n_chan, unsigned int *list) { - struct rtd_private *devpriv = dev->private; - if (n_chan > 1) { /* setup channel gain table */ int ii; - writel(0, devpriv->las0 + LAS0_CGT_CLEAR); - writel(1, devpriv->las0 + LAS0_CGT_ENABLE); + writel(0, dev->mmio + LAS0_CGT_CLEAR); + writel(1, dev->mmio + LAS0_CGT_ENABLE); for (ii = 0; ii < n_chan; ii++) { writel(rtd_convert_chan_gain(dev, list[ii], ii), - devpriv->las0 + LAS0_CGT_WRITE); + dev->mmio + LAS0_CGT_WRITE); } } else { /* just use the channel gain latch */ - writel(0, devpriv->las0 + LAS0_CGT_ENABLE); + writel(0, dev->mmio + LAS0_CGT_ENABLE); writel(rtd_convert_chan_gain(dev, list[0], 0), - devpriv->las0 + LAS0_CGL_WRITE); + dev->mmio + LAS0_CGL_WRITE); } } @@ -512,23 +509,22 @@ static void rtd_load_channelgain_list(struct comedi_device *dev, empty status flag clears */ static int rtd520_probe_fifo_depth(struct comedi_device *dev) { - struct rtd_private *devpriv = dev->private; unsigned int chanspec = CR_PACK(0, 0, AREF_GROUND); unsigned i; static const unsigned limit = 0x2000; unsigned fifo_size = 0; - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); rtd_load_channelgain_list(dev, 1, &chanspec); /* ADC conversion trigger source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_ADC_CONVERSION); + writel(0, dev->mmio + LAS0_ADC_CONVERSION); /* convert samples */ for (i = 0; i < limit; ++i) { unsigned fifo_status; /* trigger conversion */ - writew(0, devpriv->las0 + LAS0_ADC); + writew(0, dev->mmio + LAS0_ADC); udelay(1); - fifo_status = readl(devpriv->las0 + LAS0_ADC); + fifo_status = readl(dev->mmio + LAS0_ADC); if ((fifo_status & FS_ADC_HEMPTY) == 0) { fifo_size = 2 * i; break; @@ -538,7 +534,7 @@ static int rtd520_probe_fifo_depth(struct comedi_device *dev) dev_info(dev->class_dev, "failed to probe fifo size.\n"); return -EIO; } - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); if (fifo_size != 0x400 && fifo_size != 0x2000) { dev_info(dev->class_dev, "unexpected fifo size of %i, expected 1024 or 8192.\n", @@ -553,10 +549,9 @@ static int rtd_ai_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct rtd_private *devpriv = dev->private; unsigned int status; - status = readl(devpriv->las0 + LAS0_ADC); + status = readl(dev->mmio + LAS0_ADC); if (status & FS_ADC_NOT_EMPTY) return 0; return -EBUSY; @@ -571,19 +566,19 @@ static int rtd_ai_rinsn(struct comedi_device *dev, int n; /* clear any old fifo data */ - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); /* write channel to multiplexer and clear channel gain table */ rtd_load_channelgain_list(dev, 1, &insn->chanspec); /* ADC conversion trigger source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_ADC_CONVERSION); + writel(0, dev->mmio + LAS0_ADC_CONVERSION); /* convert n samples */ for (n = 0; n < insn->n; n++) { unsigned short d; /* trigger conversion */ - writew(0, devpriv->las0 + LAS0_ADC); + writew(0, dev->mmio + LAS0_ADC); ret = comedi_timeout(dev, s, insn, rtd_ai_eoc, 0); if (ret) @@ -645,7 +640,7 @@ static int ai_read_dregs(struct comedi_device *dev, struct comedi_subdevice *s) { struct rtd_private *devpriv = dev->private; - while (readl(devpriv->las0 + LAS0_ADC) & FS_ADC_NOT_EMPTY) { + while (readl(dev->mmio + LAS0_ADC) & FS_ADC_NOT_EMPTY) { unsigned short d = readw(devpriv->las1 + LAS1_ADC_FIFO); if (0 == devpriv->ai_count) { /* done */ @@ -685,12 +680,12 @@ static irqreturn_t rtd_interrupt(int irq, void *d) if (!dev->attached) return IRQ_NONE; - fifo_status = readl(devpriv->las0 + LAS0_ADC); + fifo_status = readl(dev->mmio + LAS0_ADC); /* check for FIFO full, this automatically halts the ADC! */ if (!(fifo_status & FS_ADC_NOT_FULL)) /* 0 -> full */ goto xfer_abort; - status = readw(devpriv->las0 + LAS0_IT); + status = readw(dev->mmio + LAS0_IT); /* if interrupt was not caused by our board, or handled above */ if (0 == status) return IRQ_HANDLED; @@ -725,30 +720,30 @@ static irqreturn_t rtd_interrupt(int irq, void *d) } } - overrun = readl(devpriv->las0 + LAS0_OVERRUN) & 0xffff; + overrun = readl(dev->mmio + LAS0_OVERRUN) & 0xffff; if (overrun) goto xfer_abort; /* clear the interrupt */ - writew(status, devpriv->las0 + LAS0_CLEAR); - readw(devpriv->las0 + LAS0_CLEAR); + writew(status, dev->mmio + LAS0_CLEAR); + readw(dev->mmio + LAS0_CLEAR); return IRQ_HANDLED; xfer_abort: - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); s->async->events |= COMEDI_CB_ERROR; devpriv->ai_count = 0; /* stop and don't transfer any more */ /* fall into xfer_done */ xfer_done: /* pacer stop source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_PACER_STOP); - writel(0, devpriv->las0 + LAS0_PACER); /* stop pacer */ - writel(0, devpriv->las0 + LAS0_ADC_CONVERSION); - writew(0, devpriv->las0 + LAS0_IT); + writel(0, dev->mmio + LAS0_PACER_STOP); + writel(0, dev->mmio + LAS0_PACER); /* stop pacer */ + writel(0, dev->mmio + LAS0_ADC_CONVERSION); + writew(0, dev->mmio + LAS0_IT); if (devpriv->ai_count > 0) { /* there shouldn't be anything left */ - fifo_status = readl(devpriv->las0 + LAS0_ADC); + fifo_status = readl(dev->mmio + LAS0_ADC); ai_read_dregs(dev, s); /* read anything left in FIFO */ } @@ -756,12 +751,12 @@ xfer_done: comedi_event(dev, s); /* clear the interrupt */ - status = readw(devpriv->las0 + LAS0_IT); - writew(status, devpriv->las0 + LAS0_CLEAR); - readw(devpriv->las0 + LAS0_CLEAR); + status = readw(dev->mmio + LAS0_IT); + writew(status, dev->mmio + LAS0_CLEAR); + readw(dev->mmio + LAS0_CLEAR); - fifo_status = readl(devpriv->las0 + LAS0_ADC); - overrun = readl(devpriv->las0 + LAS0_OVERRUN) & 0xffff; + fifo_status = readl(dev->mmio + LAS0_ADC); + overrun = readl(dev->mmio + LAS0_OVERRUN) & 0xffff; return IRQ_HANDLED; } @@ -931,12 +926,12 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* stop anything currently running */ /* pacer stop source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_PACER_STOP); - writel(0, devpriv->las0 + LAS0_PACER); /* stop pacer */ - writel(0, devpriv->las0 + LAS0_ADC_CONVERSION); - writew(0, devpriv->las0 + LAS0_IT); - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); - writel(0, devpriv->las0 + LAS0_OVERRUN); + writel(0, dev->mmio + LAS0_PACER_STOP); + writel(0, dev->mmio + LAS0_PACER); /* stop pacer */ + writel(0, dev->mmio + LAS0_ADC_CONVERSION); + writew(0, dev->mmio + LAS0_IT); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_OVERRUN); /* start configuration */ /* load channel list and reset CGT */ @@ -945,18 +940,18 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* setup the common case and override if needed */ if (cmd->chanlist_len > 1) { /* pacer start source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_PACER_START); + writel(0, dev->mmio + LAS0_PACER_START); /* burst trigger source: PACER */ - writel(1, devpriv->las0 + LAS0_BURST_START); + writel(1, dev->mmio + LAS0_BURST_START); /* ADC conversion trigger source: BURST */ - writel(2, devpriv->las0 + LAS0_ADC_CONVERSION); + writel(2, dev->mmio + LAS0_ADC_CONVERSION); } else { /* single channel */ /* pacer start source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_PACER_START); + writel(0, dev->mmio + LAS0_PACER_START); /* ADC conversion trigger source: PACER */ - writel(1, devpriv->las0 + LAS0_ADC_CONVERSION); + writel(1, dev->mmio + LAS0_ADC_CONVERSION); } - writel((devpriv->fifosz / 2 - 1) & 0xffff, devpriv->las0 + LAS0_ACNT); + writel((devpriv->fifosz / 2 - 1) & 0xffff, dev->mmio + LAS0_ACNT); if (TRIG_TIMER == cmd->scan_begin_src) { /* scan_begin_arg is in nanoseconds */ @@ -993,16 +988,16 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } else { /* interrupt for each transfer */ writel((devpriv->xfer_count - 1) & 0xffff, - devpriv->las0 + LAS0_ACNT); + dev->mmio + LAS0_ACNT); } } else { /* unknown timing, just use 1/2 FIFO */ devpriv->xfer_count = 0; devpriv->flags &= ~SEND_EOS; } /* pacer clock source: INTERNAL 8MHz */ - writel(1, devpriv->las0 + LAS0_PACER_SELECT); + writel(1, dev->mmio + LAS0_PACER_SELECT); /* just interrupt, don't stop */ - writel(1, devpriv->las0 + LAS0_ACNT_STOP_ENABLE); + writel(1, dev->mmio + LAS0_ACNT_STOP_ENABLE); /* BUG??? these look like enumerated values, but they are bit fields */ @@ -1027,13 +1022,13 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) timer = rtd_ns_to_timer(&cmd->scan_begin_arg, TRIG_ROUND_NEAREST); /* set PACER clock */ - writel(timer & 0xffffff, devpriv->las0 + LAS0_PCLK); + writel(timer & 0xffffff, dev->mmio + LAS0_PCLK); break; case TRIG_EXT: /* pacer start source: EXTERNAL */ - writel(1, devpriv->las0 + LAS0_PACER_START); + writel(1, dev->mmio + LAS0_PACER_START); break; } @@ -1045,33 +1040,32 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) timer = rtd_ns_to_timer(&cmd->convert_arg, TRIG_ROUND_NEAREST); /* setup BURST clock */ - writel(timer & 0x3ff, devpriv->las0 + LAS0_BCLK); + writel(timer & 0x3ff, dev->mmio + LAS0_BCLK); } break; case TRIG_EXT: /* external */ /* burst trigger source: EXTERNAL */ - writel(2, devpriv->las0 + LAS0_BURST_START); + writel(2, dev->mmio + LAS0_BURST_START); break; } /* end configuration */ /* This doesn't seem to work. There is no way to clear an interrupt that the priority controller has queued! */ - writew(~0, devpriv->las0 + LAS0_CLEAR); - readw(devpriv->las0 + LAS0_CLEAR); + writew(~0, dev->mmio + LAS0_CLEAR); + readw(dev->mmio + LAS0_CLEAR); /* TODO: allow multiple interrupt sources */ - if (devpriv->xfer_count > 0) { /* transfer every N samples */ - writew(IRQM_ADC_ABOUT_CNT, devpriv->las0 + LAS0_IT); - } else { /* 1/2 FIFO transfers */ - writew(IRQM_ADC_ABOUT_CNT, devpriv->las0 + LAS0_IT); - } + if (devpriv->xfer_count > 0) /* transfer every N samples */ + writew(IRQM_ADC_ABOUT_CNT, dev->mmio + LAS0_IT); + else /* 1/2 FIFO transfers */ + writew(IRQM_ADC_ABOUT_CNT, dev->mmio + LAS0_IT); /* BUG: start_src is ASSUMED to be TRIG_NOW */ /* BUG? it seems like things are running before the "start" */ - readl(devpriv->las0 + LAS0_PACER); /* start pacer */ + readl(dev->mmio + LAS0_PACER); /* start pacer */ return 0; } @@ -1085,13 +1079,13 @@ static int rtd_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) u16 status; /* pacer stop source: SOFTWARE */ - writel(0, devpriv->las0 + LAS0_PACER_STOP); - writel(0, devpriv->las0 + LAS0_PACER); /* stop pacer */ - writel(0, devpriv->las0 + LAS0_ADC_CONVERSION); - writew(0, devpriv->las0 + LAS0_IT); + writel(0, dev->mmio + LAS0_PACER_STOP); + writel(0, dev->mmio + LAS0_PACER); /* stop pacer */ + writel(0, dev->mmio + LAS0_ADC_CONVERSION); + writew(0, dev->mmio + LAS0_IT); devpriv->ai_count = 0; /* stop and don't transfer any more */ - status = readw(devpriv->las0 + LAS0_IT); - overrun = readl(devpriv->las0 + LAS0_OVERRUN) & 0xffff; + status = readw(dev->mmio + LAS0_IT); + overrun = readl(dev->mmio + LAS0_OVERRUN) & 0xffff; return 0; } @@ -1100,12 +1094,11 @@ static int rtd_ao_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct rtd_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); unsigned int bit = (chan == 0) ? FS_DAC1_NOT_EMPTY : FS_DAC2_NOT_EMPTY; unsigned int status; - status = readl(devpriv->las0 + LAS0_ADC); + status = readl(dev->mmio + LAS0_ADC); if (status & bit) return 0; return -EBUSY; @@ -1122,8 +1115,8 @@ static int rtd_ao_winsn(struct comedi_device *dev, int ret; /* Configure the output range (table index matches the range values) */ - writew(range & 7, devpriv->las0 + - ((chan == 0) ? LAS0_DAC1_CTRL : LAS0_DAC2_CTRL)); + writew(range & 7, + dev->mmio + ((chan == 0) ? LAS0_DAC1_CTRL : LAS0_DAC2_CTRL)); /* Writing a list of values to an AO channel is probably not * very useful, but that's how the interface is defined. */ @@ -1143,8 +1136,7 @@ static int rtd_ao_winsn(struct comedi_device *dev, /* a typical programming sequence */ writew(val, devpriv->las1 + ((chan == 0) ? LAS1_DAC1_FIFO : LAS1_DAC2_FIFO)); - writew(0, devpriv->las0 + - ((chan == 0) ? LAS0_DAC1 : LAS0_DAC2)); + writew(0, dev->mmio + ((chan == 0) ? LAS0_DAC1 : LAS0_DAC2)); devpriv->ao_readback[chan] = data[i]; @@ -1179,12 +1171,10 @@ static int rtd_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct rtd_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - writew(s->state & 0xff, devpriv->las0 + LAS0_DIO0); + writew(s->state & 0xff, dev->mmio + LAS0_DIO0); - data[1] = readw(devpriv->las0 + LAS0_DIO0) & 0xff; + data[1] = readw(dev->mmio + LAS0_DIO0) & 0xff; return insn->n; } @@ -1194,7 +1184,6 @@ static int rtd_dio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct rtd_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); @@ -1204,11 +1193,11 @@ static int rtd_dio_insn_config(struct comedi_device *dev, /* TODO support digital match interrupts and strobes */ /* set direction */ - writew(0x01, devpriv->las0 + LAS0_DIO_STATUS); - writew(s->io_bits & 0xff, devpriv->las0 + LAS0_DIO0_CTRL); + writew(0x01, dev->mmio + LAS0_DIO_STATUS); + writew(s->io_bits & 0xff, dev->mmio + LAS0_DIO0_CTRL); /* clear interrupts */ - writew(0x00, devpriv->las0 + LAS0_DIO_STATUS); + writew(0x00, dev->mmio + LAS0_DIO_STATUS); /* port1 can only be all input or all output */ @@ -1221,12 +1210,12 @@ static void rtd_reset(struct comedi_device *dev) { struct rtd_private *devpriv = dev->private; - writel(0, devpriv->las0 + LAS0_BOARD_RESET); + writel(0, dev->mmio + LAS0_BOARD_RESET); udelay(100); /* needed? */ writel(0, devpriv->lcfg + PLX_INTRCS_REG); - writew(0, devpriv->las0 + LAS0_IT); - writew(~0, devpriv->las0 + LAS0_CLEAR); - readw(devpriv->las0 + LAS0_CLEAR); + writew(0, dev->mmio + LAS0_IT); + writew(~0, dev->mmio + LAS0_CLEAR); + readw(dev->mmio + LAS0_CLEAR); } /* @@ -1235,21 +1224,19 @@ static void rtd_reset(struct comedi_device *dev) */ static void rtd_init_board(struct comedi_device *dev) { - struct rtd_private *devpriv = dev->private; - rtd_reset(dev); - writel(0, devpriv->las0 + LAS0_OVERRUN); - writel(0, devpriv->las0 + LAS0_CGT_CLEAR); - writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR); - writel(0, devpriv->las0 + LAS0_DAC1_RESET); - writel(0, devpriv->las0 + LAS0_DAC2_RESET); + writel(0, dev->mmio + LAS0_OVERRUN); + writel(0, dev->mmio + LAS0_CGT_CLEAR); + writel(0, dev->mmio + LAS0_ADC_FIFO_CLEAR); + writel(0, dev->mmio + LAS0_DAC1_RESET); + writel(0, dev->mmio + LAS0_DAC2_RESET); /* clear digital IO fifo */ - writew(0, devpriv->las0 + LAS0_DIO_STATUS); - writeb((0 << 6) | 0x30, devpriv->las0 + LAS0_UTC_CTRL); - writeb((1 << 6) | 0x30, devpriv->las0 + LAS0_UTC_CTRL); - writeb((2 << 6) | 0x30, devpriv->las0 + LAS0_UTC_CTRL); - writeb((3 << 6) | 0x00, devpriv->las0 + LAS0_UTC_CTRL); + writew(0, dev->mmio + LAS0_DIO_STATUS); + writeb((0 << 6) | 0x30, dev->mmio + LAS0_UTC_CTRL); + writeb((1 << 6) | 0x30, dev->mmio + LAS0_UTC_CTRL); + writeb((2 << 6) | 0x30, dev->mmio + LAS0_UTC_CTRL); + writeb((3 << 6) | 0x00, dev->mmio + LAS0_UTC_CTRL); /* TODO: set user out source ??? */ } @@ -1292,10 +1279,10 @@ static int rtd_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv->las0 = pci_ioremap_bar(pcidev, 2); + dev->mmio = pci_ioremap_bar(pcidev, 2); devpriv->las1 = pci_ioremap_bar(pcidev, 3); devpriv->lcfg = pci_ioremap_bar(pcidev, 0); - if (!devpriv->las0 || !devpriv->las1 || !devpriv->lcfg) + if (!dev->mmio || !devpriv->las1 || !devpriv->lcfg) return -ENOMEM; rtd_pci_latency_quirk(dev, pcidev); @@ -1375,7 +1362,7 @@ static void rtd_detach(struct comedi_device *dev) if (devpriv) { /* Shut down any board ops by resetting it */ - if (devpriv->las0 && devpriv->lcfg) + if (dev->mmio && devpriv->lcfg) rtd_reset(dev); if (dev->irq) { writel(readl(devpriv->lcfg + PLX_INTRCS_REG) & @@ -1383,8 +1370,8 @@ static void rtd_detach(struct comedi_device *dev) devpriv->lcfg + PLX_INTRCS_REG); free_irq(dev->irq, dev); } - if (devpriv->las0) - iounmap(devpriv->las0); + if (dev->mmio) + iounmap(dev->mmio); if (devpriv->las1) iounmap(devpriv->las1); if (devpriv->lcfg) -- cgit From de9cd5ca0246e53933c580a893ac0144548e9394 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:35 -0700 Subject: staging: comedi: s626: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/s626.c | 194 +++++++++++++++------------------- 1 file changed, 88 insertions(+), 106 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 0b18d24ddb69..080608a840ac 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -77,7 +77,6 @@ struct s626_buffer_dma { }; struct s626_private { - void __iomem *mmio; uint8_t ai_cmd_running; /* ai_cmd is running */ uint8_t ai_continuous; /* continuous acquisition */ int ai_sample_count; /* number of samples to acquire */ @@ -113,29 +112,25 @@ struct s626_private { static void s626_mc_enable(struct comedi_device *dev, unsigned int cmd, unsigned int reg) { - struct s626_private *devpriv = dev->private; unsigned int val = (cmd << 16) | cmd; mmiowb(); - writel(val, devpriv->mmio + reg); + writel(val, dev->mmio + reg); } static void s626_mc_disable(struct comedi_device *dev, unsigned int cmd, unsigned int reg) { - struct s626_private *devpriv = dev->private; - - writel(cmd << 16 , devpriv->mmio + reg); + writel(cmd << 16 , dev->mmio + reg); mmiowb(); } static bool s626_mc_test(struct comedi_device *dev, unsigned int cmd, unsigned int reg) { - struct s626_private *devpriv = dev->private; unsigned int val; - val = readl(devpriv->mmio + reg); + val = readl(dev->mmio + reg); return (val & cmd) ? true : false; } @@ -157,7 +152,6 @@ static const struct comedi_lrange s626_range_table = { */ static void s626_debi_transfer(struct comedi_device *dev) { - struct s626_private *devpriv = dev->private; static const int timeout = 10000; int i; @@ -179,7 +173,7 @@ static void s626_debi_transfer(struct comedi_device *dev) /* Wait until DEBI transfer is done */ for (i = 0; i < timeout; i++) { - if (!(readl(devpriv->mmio + S626_P_PSR) & S626_PSR_DEBI_S)) + if (!(readl(dev->mmio + S626_P_PSR) & S626_PSR_DEBI_S)) break; udelay(1); } @@ -192,15 +186,13 @@ static void s626_debi_transfer(struct comedi_device *dev) */ static uint16_t s626_debi_read(struct comedi_device *dev, uint16_t addr) { - struct s626_private *devpriv = dev->private; - /* Set up DEBI control register value in shadow RAM */ - writel(S626_DEBI_CMD_RDWORD | addr, devpriv->mmio + S626_P_DEBICMD); + writel(S626_DEBI_CMD_RDWORD | addr, dev->mmio + S626_P_DEBICMD); /* Execute the DEBI transfer. */ s626_debi_transfer(dev); - return readl(devpriv->mmio + S626_P_DEBIAD); + return readl(dev->mmio + S626_P_DEBIAD); } /* @@ -209,11 +201,9 @@ static uint16_t s626_debi_read(struct comedi_device *dev, uint16_t addr) static void s626_debi_write(struct comedi_device *dev, uint16_t addr, uint16_t wdata) { - struct s626_private *devpriv = dev->private; - /* Set up DEBI control register value in shadow RAM */ - writel(S626_DEBI_CMD_WRWORD | addr, devpriv->mmio + S626_P_DEBICMD); - writel(wdata, devpriv->mmio + S626_P_DEBIAD); + writel(S626_DEBI_CMD_WRWORD | addr, dev->mmio + S626_P_DEBICMD); + writel(wdata, dev->mmio + S626_P_DEBIAD); /* Execute the DEBI transfer. */ s626_debi_transfer(dev); @@ -227,18 +217,17 @@ static void s626_debi_write(struct comedi_device *dev, uint16_t addr, static void s626_debi_replace(struct comedi_device *dev, unsigned int addr, unsigned int mask, unsigned int wdata) { - struct s626_private *devpriv = dev->private; unsigned int val; addr &= 0xffff; - writel(S626_DEBI_CMD_RDWORD | addr, devpriv->mmio + S626_P_DEBICMD); + writel(S626_DEBI_CMD_RDWORD | addr, dev->mmio + S626_P_DEBICMD); s626_debi_transfer(dev); - writel(S626_DEBI_CMD_WRWORD | addr, devpriv->mmio + S626_P_DEBICMD); - val = readl(devpriv->mmio + S626_P_DEBIAD); + writel(S626_DEBI_CMD_WRWORD | addr, dev->mmio + S626_P_DEBICMD); + val = readl(dev->mmio + S626_P_DEBIAD); val &= mask; val |= wdata; - writel(val & 0xffff, devpriv->mmio + S626_P_DEBIAD); + writel(val & 0xffff, dev->mmio + S626_P_DEBIAD); s626_debi_transfer(dev); } @@ -259,12 +248,11 @@ static int s626_i2c_handshake_eoc(struct comedi_device *dev, static int s626_i2c_handshake(struct comedi_device *dev, uint32_t val) { - struct s626_private *devpriv = dev->private; unsigned int ctrl; int ret; /* Write I2C command to I2C Transfer Control shadow register */ - writel(val, devpriv->mmio + S626_P_I2CCTRL); + writel(val, dev->mmio + S626_P_I2CCTRL); /* * Upload I2C shadow registers into working registers and @@ -277,7 +265,7 @@ static int s626_i2c_handshake(struct comedi_device *dev, uint32_t val) /* Wait until I2C bus transfer is finished or an error occurs */ do { - ctrl = readl(devpriv->mmio + S626_P_I2CCTRL); + ctrl = readl(dev->mmio + S626_P_I2CCTRL); } while ((ctrl & (S626_I2C_BUSY | S626_I2C_ERR)) == S626_I2C_BUSY); /* Return non-zero if I2C error occurred */ @@ -315,7 +303,7 @@ static uint8_t s626_i2c_read(struct comedi_device *dev, uint8_t addr) /* Abort function and declare error if handshake failed. */ return 0; - return (readl(devpriv->mmio + S626_P_I2CCTRL) >> 16) & 0xff; + return (readl(dev->mmio + S626_P_I2CCTRL) >> 16) & 0xff; } /* *********** DAC FUNCTIONS *********** */ @@ -340,27 +328,26 @@ static int s626_send_dac_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct s626_private *devpriv = dev->private; unsigned int status; switch (context) { case s626_send_dac_wait_not_mc1_a2out: - status = readl(devpriv->mmio + S626_P_MC1); + status = readl(dev->mmio + S626_P_MC1); if (!(status & S626_MC1_A2OUT)) return 0; break; case s626_send_dac_wait_ssr_af2_out: - status = readl(devpriv->mmio + S626_P_SSR); + status = readl(dev->mmio + S626_P_SSR); if (status & S626_SSR_AF2_OUT) return 0; break; case s626_send_dac_wait_fb_buffer2_msb_00: - status = readl(devpriv->mmio + S626_P_FB_BUFFER2); + status = readl(dev->mmio + S626_P_FB_BUFFER2); if (!(status & 0xff000000)) return 0; break; case s626_send_dac_wait_fb_buffer2_msb_ff: - status = readl(devpriv->mmio + S626_P_FB_BUFFER2); + status = readl(dev->mmio + S626_P_FB_BUFFER2); if (status & 0xff000000) return 0; break; @@ -397,7 +384,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) /* TRANSFER OUTPUT DWORD VALUE INTO A2'S OUTPUT FIFO ---------------- */ /* Copy DAC setpoint value to DAC's output DMA buffer. */ - /* writel(val, devpriv->mmio + (uint32_t)devpriv->dac_wbuf); */ + /* writel(val, dev->mmio + (uint32_t)devpriv->dac_wbuf); */ *devpriv->dac_wbuf = val; /* @@ -415,7 +402,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) * other FIFO underflow/overflow flags). When set, this flag * will indicate that we have emerged from slot 0. */ - writel(S626_ISR_AFOU, devpriv->mmio + S626_P_ISR); + writel(S626_ISR_AFOU, dev->mmio + S626_P_ISR); /* * Wait for the DMA transfer to finish so that there will be data @@ -440,7 +427,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) * detection. */ writel(S626_XSD2 | S626_RSD3 | S626_SIB_A2, - devpriv->mmio + S626_VECTPORT(0)); + dev->mmio + S626_VECTPORT(0)); /* * Wait for slot 1 to execute to ensure that the Packet will be @@ -465,7 +452,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) * buffer register. */ writel(S626_XSD2 | S626_XFIFO_2 | S626_RSD2 | S626_SIB_A2 | S626_EOS, - devpriv->mmio + S626_VECTPORT(0)); + dev->mmio + S626_VECTPORT(0)); /* WAIT FOR THE TRANSACTION TO FINISH ----------------------- */ @@ -487,7 +474,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) * we test for the FB_BUFFER2 MSB contents to be equal to 0xFF. If * the TSL has not yet finished executing slot 5 ... */ - if (readl(devpriv->mmio + S626_P_FB_BUFFER2) & 0xff000000) { + if (readl(dev->mmio + S626_P_FB_BUFFER2) & 0xff000000) { /* * The trap was set on time and we are still executing somewhere * in slots 2-5, so we now wait for slot 0 to execute and trap @@ -513,7 +500,7 @@ static int s626_send_dac(struct comedi_device *dev, uint32_t val) * SD3, which is driven only by a pull-up resistor. */ writel(S626_RSD3 | S626_SIB_A2 | S626_EOS, - devpriv->mmio + S626_VECTPORT(0)); + dev->mmio + S626_VECTPORT(0)); /* * Wait for slot 0 to execute, at which time the TSL is setup for @@ -571,16 +558,16 @@ static int s626_set_dac(struct comedi_device *dev, uint16_t chan, ws_image = (chan & 2) ? S626_WS1 : S626_WS2; /* Slot 2: Transmit high data byte to target DAC */ writel(S626_XSD2 | S626_XFIFO_1 | ws_image, - devpriv->mmio + S626_VECTPORT(2)); + dev->mmio + S626_VECTPORT(2)); /* Slot 3: Transmit low data byte to target DAC */ writel(S626_XSD2 | S626_XFIFO_0 | ws_image, - devpriv->mmio + S626_VECTPORT(3)); + dev->mmio + S626_VECTPORT(3)); /* Slot 4: Transmit to non-existent TrimDac channel to keep clock */ writel(S626_XSD2 | S626_XFIFO_3 | S626_WS3, - devpriv->mmio + S626_VECTPORT(4)); + dev->mmio + S626_VECTPORT(4)); /* Slot 5: running after writing target DAC's low data byte */ writel(S626_XSD2 | S626_XFIFO_2 | S626_WS3 | S626_EOS, - devpriv->mmio + S626_VECTPORT(5)); + dev->mmio + S626_VECTPORT(5)); /* * Construct and transmit target DAC's serial packet: @@ -622,16 +609,16 @@ static int s626_write_trim_dac(struct comedi_device *dev, uint8_t logical_chan, /* Slot 2: Send high uint8_t to target TrimDac */ writel(S626_XSD2 | S626_XFIFO_1 | S626_WS3, - devpriv->mmio + S626_VECTPORT(2)); + dev->mmio + S626_VECTPORT(2)); /* Slot 3: Send low uint8_t to target TrimDac */ writel(S626_XSD2 | S626_XFIFO_0 | S626_WS3, - devpriv->mmio + S626_VECTPORT(3)); + dev->mmio + S626_VECTPORT(3)); /* Slot 4: Send NOP high uint8_t to DAC0 to keep clock running */ writel(S626_XSD2 | S626_XFIFO_3 | S626_WS1, - devpriv->mmio + S626_VECTPORT(4)); + dev->mmio + S626_VECTPORT(4)); /* Slot 5: Send NOP low uint8_t to DAC0 */ writel(S626_XSD2 | S626_XFIFO_2 | S626_WS1 | S626_EOS, - devpriv->mmio + S626_VECTPORT(5)); + dev->mmio + S626_VECTPORT(5)); /* * Construct and transmit target DAC's serial packet: @@ -1544,7 +1531,6 @@ static bool s626_handle_eos_interrupt(struct comedi_device *dev) static irqreturn_t s626_irq_handler(int irq, void *d) { struct comedi_device *dev = d; - struct s626_private *devpriv = dev->private; unsigned long flags; uint32_t irqtype, irqstatus; @@ -1554,16 +1540,16 @@ static irqreturn_t s626_irq_handler(int irq, void *d) spin_lock_irqsave(&dev->spinlock, flags); /* save interrupt enable register state */ - irqstatus = readl(devpriv->mmio + S626_P_IER); + irqstatus = readl(dev->mmio + S626_P_IER); /* read interrupt type */ - irqtype = readl(devpriv->mmio + S626_P_ISR); + irqtype = readl(dev->mmio + S626_P_ISR); /* disable master interrupt */ - writel(0, devpriv->mmio + S626_P_IER); + writel(0, dev->mmio + S626_P_IER); /* clear interrupt */ - writel(irqtype, devpriv->mmio + S626_P_ISR); + writel(irqtype, dev->mmio + S626_P_ISR); switch (irqtype) { case S626_IRQ_RPS1: /* end_of_scan occurs */ @@ -1578,7 +1564,7 @@ static irqreturn_t s626_irq_handler(int irq, void *d) } /* enable interrupt */ - writel(irqstatus, devpriv->mmio + S626_P_IER); + writel(irqstatus, dev->mmio + S626_P_IER); spin_unlock_irqrestore(&dev->spinlock, flags); return IRQ_HANDLED; @@ -1606,7 +1592,7 @@ static void s626_reset_adc(struct comedi_device *dev, uint8_t *ppl) /* Initialize RPS instruction pointer */ writel((uint32_t)devpriv->rps_buf.physical_base, - devpriv->mmio + S626_P_RPSADDR1); + dev->mmio + S626_P_RPSADDR1); /* Construct RPS program in rps_buf DMA buffer */ if (cmd != NULL && cmd->scan_begin_src != TRIG_FOLLOW) { @@ -1827,10 +1813,9 @@ static int s626_ai_eoc(struct comedi_device *dev, struct comedi_insn *insn, unsigned long context) { - struct s626_private *devpriv = dev->private; unsigned int status; - status = readl(devpriv->mmio + S626_P_PSR); + status = readl(dev->mmio + S626_P_PSR); if (status & S626_PSR_GPIO2) return 0; return -EBUSY; @@ -1838,9 +1823,9 @@ static int s626_ai_eoc(struct comedi_device *dev, static int s626_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct s626_private *devpriv = dev->private; uint16_t chan = CR_CHAN(insn->chanspec); uint16_t range = CR_RANGE(insn->chanspec); uint16_t adc_spec = 0; @@ -1869,17 +1854,14 @@ static int s626_ai_insn_read(struct comedi_device *dev, udelay(10); /* Start ADC by pulsing GPIO1 low */ - gpio_image = readl(devpriv->mmio + S626_P_GPIO); + gpio_image = readl(dev->mmio + S626_P_GPIO); /* Assert ADC Start command */ - writel(gpio_image & ~S626_GPIO1_HI, - devpriv->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* and stretch it out */ - writel(gpio_image & ~S626_GPIO1_HI, - devpriv->mmio + S626_P_GPIO); - writel(gpio_image & ~S626_GPIO1_HI, - devpriv->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* Negate ADC Start command */ - writel(gpio_image | S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); + writel(gpio_image | S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* * Wait for ADC to complete (GPIO2 is asserted high when @@ -1894,7 +1876,7 @@ static int s626_ai_insn_read(struct comedi_device *dev, /* Fetch ADC data */ if (n != 0) { - tmp = readl(devpriv->mmio + S626_P_FB_BUFFER1); + tmp = readl(dev->mmio + S626_P_FB_BUFFER1); data[n - 1] = s626_ai_reg_to_uint(tmp); } @@ -1914,14 +1896,14 @@ static int s626_ai_insn_read(struct comedi_device *dev, * Start a dummy conversion to cause the data from the * previous conversion to be shifted in. */ - gpio_image = readl(devpriv->mmio + S626_P_GPIO); + gpio_image = readl(dev->mmio + S626_P_GPIO); /* Assert ADC Start command */ - writel(gpio_image & ~S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* and stretch it out */ - writel(gpio_image & ~S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); - writel(gpio_image & ~S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); + writel(gpio_image & ~S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* Negate ADC Start command */ - writel(gpio_image | S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); + writel(gpio_image | S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* Wait for the data to arrive in FB BUFFER 1 register. */ @@ -1934,7 +1916,7 @@ static int s626_ai_insn_read(struct comedi_device *dev, /* Fetch ADC data */ if (n != 0) { - tmp = readl(devpriv->mmio + S626_P_FB_BUFFER1); + tmp = readl(dev->mmio + S626_P_FB_BUFFER1); data[n - 1] = s626_ai_reg_to_uint(tmp); } @@ -2059,10 +2041,10 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return -EBUSY; } /* disable interrupt */ - writel(0, devpriv->mmio + S626_P_IER); + writel(0, dev->mmio + S626_P_IER); /* clear interrupt request */ - writel(S626_IRQ_RPS1 | S626_IRQ_GPIO3, devpriv->mmio + S626_P_ISR); + writel(S626_IRQ_RPS1 | S626_IRQ_GPIO3, dev->mmio + S626_P_ISR); /* clear any pending interrupt */ s626_dio_clear_irq(dev); @@ -2157,7 +2139,7 @@ static int s626_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } /* enable interrupt */ - writel(S626_IRQ_GPIO3 | S626_IRQ_RPS1, devpriv->mmio + S626_P_IER); + writel(S626_IRQ_GPIO3 | S626_IRQ_RPS1, dev->mmio + S626_P_IER); return 0; } @@ -2280,7 +2262,7 @@ static int s626_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) s626_mc_disable(dev, S626_MC1_ERPS1, S626_P_MC1); /* disable master interrupt */ - writel(0, devpriv->mmio + S626_P_IER); + writel(0, dev->mmio + S626_P_IER); devpriv->ai_cmd_running = 0; @@ -2567,13 +2549,13 @@ static int s626_initialize(struct comedi_device *dev) */ writel(S626_DEBI_CFG_SLAVE16 | (S626_DEBI_TOUT << S626_DEBI_CFG_TOUT_BIT) | S626_DEBI_SWAP | - S626_DEBI_CFG_INTEL, devpriv->mmio + S626_P_DEBICFG); + S626_DEBI_CFG_INTEL, dev->mmio + S626_P_DEBICFG); /* Disable MMU paging */ - writel(S626_DEBI_PAGE_DISABLE, devpriv->mmio + S626_P_DEBIPAGE); + writel(S626_DEBI_PAGE_DISABLE, dev->mmio + S626_P_DEBIPAGE); /* Init GPIO so that ADC Start* is negated */ - writel(S626_GPIO_BASE | S626_GPIO1_HI, devpriv->mmio + S626_P_GPIO); + writel(S626_GPIO_BASE | S626_GPIO1_HI, dev->mmio + S626_P_GPIO); /* I2C device address for onboard eeprom (revb) */ devpriv->i2c_adrs = 0xA0; @@ -2583,7 +2565,7 @@ static int s626_initialize(struct comedi_device *dev) * operation in progress and reset BUSY flag. */ writel(S626_I2C_CLKSEL | S626_I2C_ABORT, - devpriv->mmio + S626_P_I2CSTAT); + dev->mmio + S626_P_I2CSTAT); s626_mc_enable(dev, S626_MC2_UPLD_IIC, S626_P_MC2); ret = comedi_timeout(dev, NULL, NULL, s626_i2c_handshake_eoc, 0); if (ret) @@ -2594,7 +2576,7 @@ static int s626_initialize(struct comedi_device *dev) * reg twice to reset all I2C error flags. */ for (i = 0; i < 2; i++) { - writel(S626_I2C_CLKSEL, devpriv->mmio + S626_P_I2CSTAT); + writel(S626_I2C_CLKSEL, dev->mmio + S626_P_I2CSTAT); s626_mc_enable(dev, S626_MC2_UPLD_IIC, S626_P_MC2); ret = comedi_timeout(dev, NULL, NULL, s626_i2c_handshake_eoc, 0); if (ret) @@ -2607,7 +2589,7 @@ static int s626_initialize(struct comedi_device *dev) * DAC data setup times are satisfied, enable DAC serial * clock out. */ - writel(S626_ACON2_INIT, devpriv->mmio + S626_P_ACON2); + writel(S626_ACON2_INIT, dev->mmio + S626_P_ACON2); /* * Set up TSL1 slot list, which is used to control the @@ -2615,12 +2597,12 @@ static int s626_initialize(struct comedi_device *dev) * S626_SIB_A1 = store data uint8_t at next available location * in FB BUFFER1 register. */ - writel(S626_RSD1 | S626_SIB_A1, devpriv->mmio + S626_P_TSL1); + writel(S626_RSD1 | S626_SIB_A1, dev->mmio + S626_P_TSL1); writel(S626_RSD1 | S626_SIB_A1 | S626_EOS, - devpriv->mmio + S626_P_TSL1 + 4); + dev->mmio + S626_P_TSL1 + 4); /* Enable TSL1 slot list so that it executes all the time */ - writel(S626_ACON1_ADCSTART, devpriv->mmio + S626_P_ACON1); + writel(S626_ACON1_ADCSTART, dev->mmio + S626_P_ACON1); /* * Initialize RPS registers used for ADC @@ -2628,11 +2610,11 @@ static int s626_initialize(struct comedi_device *dev) /* Physical start of RPS program */ writel((uint32_t)devpriv->rps_buf.physical_base, - devpriv->mmio + S626_P_RPSADDR1); + dev->mmio + S626_P_RPSADDR1); /* RPS program performs no explicit mem writes */ - writel(0, devpriv->mmio + S626_P_RPSPAGE1); + writel(0, dev->mmio + S626_P_RPSPAGE1); /* Disable RPS timeouts */ - writel(0, devpriv->mmio + S626_P_RPS1_TOUT); + writel(0, dev->mmio + S626_P_RPS1_TOUT); #if 0 /* @@ -2688,7 +2670,7 @@ static int s626_initialize(struct comedi_device *dev) * burst length = 1 DWORD * threshold = 1 DWORD. */ - writel(0, devpriv->mmio + S626_P_PCI_BT_A); + writel(0, dev->mmio + S626_P_PCI_BT_A); /* * Init Audio2's output DMA physical addresses. The protection @@ -2698,9 +2680,9 @@ static int s626_initialize(struct comedi_device *dev) */ phys_buf = devpriv->ana_buf.physical_base + (S626_DAC_WDMABUF_OS * sizeof(uint32_t)); - writel((uint32_t)phys_buf, devpriv->mmio + S626_P_BASEA2_OUT); + writel((uint32_t)phys_buf, dev->mmio + S626_P_BASEA2_OUT); writel((uint32_t)(phys_buf + sizeof(uint32_t)), - devpriv->mmio + S626_P_PROTA2_OUT); + dev->mmio + S626_P_PROTA2_OUT); /* * Cache Audio2's output DMA buffer logical address. This is @@ -2715,7 +2697,7 @@ static int s626_initialize(struct comedi_device *dev) * DMAC will automatically halt and its PCI address pointer * will be reset when the protection address is reached. */ - writel(8, devpriv->mmio + S626_P_PAGEA2_OUT); + writel(8, dev->mmio + S626_P_PAGEA2_OUT); /* * Initialize time slot list 2 (TSL2), which is used to control @@ -2731,7 +2713,7 @@ static int s626_initialize(struct comedi_device *dev) /* Slot 0: Trap TSL execution, shift 0xFF into FB_BUFFER2 */ writel(S626_XSD2 | S626_RSD3 | S626_SIB_A2 | S626_EOS, - devpriv->mmio + S626_VECTPORT(0)); + dev->mmio + S626_VECTPORT(0)); /* * Initialize slot 1, which is constant. Slot 1 causes a @@ -2743,10 +2725,10 @@ static int s626_initialize(struct comedi_device *dev) */ /* Slot 1: Fetch DWORD from Audio2's output FIFO */ - writel(S626_LF_A2, devpriv->mmio + S626_VECTPORT(1)); + writel(S626_LF_A2, dev->mmio + S626_VECTPORT(1)); /* Start DAC's audio interface (TSL2) running */ - writel(S626_ACON1_DACSTART, devpriv->mmio + S626_P_ACON1); + writel(S626_ACON1_DACSTART, dev->mmio + S626_P_ACON1); /* * Init Trim DACs to calibrated values. Do it twice because the @@ -2810,15 +2792,15 @@ static int s626_auto_attach(struct comedi_device *dev, if (ret) return ret; - devpriv->mmio = pci_ioremap_bar(pcidev, 0); - if (!devpriv->mmio) + dev->mmio = pci_ioremap_bar(pcidev, 0); + if (!dev->mmio) return -ENOMEM; /* disable master interrupt */ - writel(0, devpriv->mmio + S626_P_IER); + writel(0, dev->mmio + S626_P_IER); /* soft reset */ - writel(S626_MC1_SOFT_RESET, devpriv->mmio + S626_P_MC1); + writel(S626_MC1_SOFT_RESET, dev->mmio + S626_P_MC1); /* DMA FIXME DMA// */ @@ -2927,20 +2909,20 @@ static void s626_detach(struct comedi_device *dev) /* stop ai_command */ devpriv->ai_cmd_running = 0; - if (devpriv->mmio) { + if (dev->mmio) { /* interrupt mask */ /* Disable master interrupt */ - writel(0, devpriv->mmio + S626_P_IER); + writel(0, dev->mmio + S626_P_IER); /* Clear board's IRQ status flag */ writel(S626_IRQ_GPIO3 | S626_IRQ_RPS1, - devpriv->mmio + S626_P_ISR); + dev->mmio + S626_P_ISR); /* Disable the watchdog timer and battery charger. */ s626_write_misc2(dev, 0); /* Close all interfaces on 7146 device */ - writel(S626_MC1_SHUTDOWN, devpriv->mmio + S626_P_MC1); - writel(S626_ACON1_BASE, devpriv->mmio + S626_P_ACON1); + writel(S626_MC1_SHUTDOWN, dev->mmio + S626_P_MC1); + writel(S626_ACON1_BASE, dev->mmio + S626_P_ACON1); s626_close_dma_b(dev, &devpriv->rps_buf, S626_DMABUF_SIZE); @@ -2950,8 +2932,8 @@ static void s626_detach(struct comedi_device *dev) if (dev->irq) free_irq(dev->irq, dev); - if (devpriv->mmio) - iounmap(devpriv->mmio); + if (dev->mmio) + iounmap(dev->mmio); } comedi_pci_disable(dev); } -- cgit From 7a9e24eb4c40ea3afcd64269353c4f6c8139f0eb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:36 -0700 Subject: staging: comedi: mite: inline mite_setup() This exported function simply calls mite_setup2() with the 'use_iodsbsr_1' parameter set to 0. Inline the simple function and remove the EXPORT_SYMBOL_GPL. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.c | 6 ------ drivers/staging/comedi/drivers/mite.h | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index 4658dfdf1ca8..d90063bf0279 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -168,12 +168,6 @@ int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) } EXPORT_SYMBOL_GPL(mite_setup2); -int mite_setup(struct mite_struct *mite) -{ - return mite_setup2(mite, 0); -} -EXPORT_SYMBOL_GPL(mite_setup); - void mite_detach(struct mite_struct *mite) { if (!mite) diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index ef7172af7031..7c938b0452c5 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -65,8 +65,13 @@ struct mite_struct { struct mite_struct *mite_alloc(struct pci_dev *pcidev); -int mite_setup(struct mite_struct *mite); int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1); + +static inline int mite_setup(struct mite_struct *mite) +{ + return mite_setup2(mite, 0); +} + void mite_detach(struct mite_struct *mite); struct mite_dma_descriptor_ring *mite_alloc_ring(struct mite_struct *mite); void mite_free_ring(struct mite_dma_descriptor_ring *ring); -- cgit From 3bb7c3abe34349a5f3615159d80aaee25c34e2a7 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:37 -0700 Subject: staging: comedi: mite: pass comedi_device to mite_setup() For aesthetics, pass the comedi_device to mite_setup() and mite_setup2() so that the dev->class_dev can be used in the dev_{level} message to make the messages have consistancy with the other comedi drivers. Remove the extra dev_warn() noise in the drivers when mite_setup() fails. Rename the 'use_iodwbsr_1' parameter and change it to a bool. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.c | 15 ++++++++------- drivers/staging/comedi/drivers/mite.h | 7 ++++--- drivers/staging/comedi/drivers/ni_660x.c | 6 ++---- drivers/staging/comedi/drivers/ni_pcidio.c | 6 ++---- drivers/staging/comedi/drivers/ni_pcimio.c | 6 ++---- 5 files changed, 18 insertions(+), 22 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index d90063bf0279..9041fd180381 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -94,7 +94,8 @@ static unsigned mite_fifo_size(struct mite_struct *mite, unsigned channel) return empty_count + full_count; } -int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) +int mite_setup2(struct comedi_device *dev, + struct mite_struct *mite, bool use_win1) { unsigned long length; int i; @@ -105,7 +106,7 @@ int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) mite->mite_io_addr = pci_ioremap_bar(mite->pcidev, 0); if (!mite->mite_io_addr) { - dev_err(&mite->pcidev->dev, + dev_err(dev->class_dev, "Failed to remap mite io memory address\n"); return -ENOMEM; } @@ -113,16 +114,16 @@ int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) mite->daq_io_addr = pci_ioremap_bar(mite->pcidev, 1); if (!mite->daq_io_addr) { - dev_err(&mite->pcidev->dev, + dev_err(dev->class_dev, "Failed to remap daq io memory address\n"); return -ENOMEM; } mite->daq_phys_addr = pci_resource_start(mite->pcidev, 1); length = pci_resource_len(mite->pcidev, 1); - if (use_iodwbsr_1) { + if (use_win1) { writel(0, mite->mite_io_addr + MITE_IODWBSR); - dev_info(&mite->pcidev->dev, + dev_info(dev->class_dev, "using I/O Window Base Size register 1\n"); writel(mite->daq_phys_addr | WENAB | MITE_IODWBSR_1_WSIZE_bits(length), @@ -148,7 +149,7 @@ int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) csigr_bits = readl(mite->mite_io_addr + MITE_CSIGR); mite->num_channels = mite_csigr_dmac(csigr_bits); if (mite->num_channels > MAX_MITE_DMA_CHANNELS) { - dev_warn(&mite->pcidev->dev, + dev_warn(dev->class_dev, "mite: bug? chip claims to have %i dma channels. Setting to %i.\n", mite->num_channels, MAX_MITE_DMA_CHANNELS); mite->num_channels = MAX_MITE_DMA_CHANNELS; @@ -163,7 +164,7 @@ int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1) mite->mite_io_addr + MITE_CHCR(i)); } mite->fifo_size = mite_fifo_size(mite, 0); - dev_info(&mite->pcidev->dev, "fifo size is %i.\n", mite->fifo_size); + dev_info(dev->class_dev, "fifo size is %i.\n", mite->fifo_size); return 0; } EXPORT_SYMBOL_GPL(mite_setup2); diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index 7c938b0452c5..b15c06671e87 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -65,11 +65,12 @@ struct mite_struct { struct mite_struct *mite_alloc(struct pci_dev *pcidev); -int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1); +int mite_setup2(struct comedi_device *, struct mite_struct *, bool use_win1); -static inline int mite_setup(struct mite_struct *mite) +static inline int mite_setup(struct comedi_device *dev, + struct mite_struct *mite) { - return mite_setup2(mite, 0); + return mite_setup2(dev, mite, false); } void mite_detach(struct mite_struct *mite); diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index ef4a8f0fb29c..fa19a8e7627d 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -1078,11 +1078,9 @@ static int ni_660x_auto_attach(struct comedi_device *dev, if (!devpriv->mite) return -ENOMEM; - ret = mite_setup2(devpriv->mite, 1); - if (ret < 0) { - dev_warn(dev->class_dev, "error setting up mite\n"); + ret = mite_setup2(dev, devpriv->mite, true); + if (ret < 0) return ret; - } ret = ni_660x_alloc_mite_rings(dev); if (ret < 0) diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 352c60fa58b6..002d27637135 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -968,11 +968,9 @@ static int nidio_auto_attach(struct comedi_device *dev, if (!devpriv->mite) return -ENOMEM; - ret = mite_setup(devpriv->mite); - if (ret < 0) { - dev_warn(dev->class_dev, "error setting up mite\n"); + ret = mite_setup(dev, devpriv->mite); + if (ret < 0) return ret; - } devpriv->di_mite_ring = mite_alloc_ring(devpriv->mite); if (devpriv->di_mite_ring == NULL) diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 22c0e95dc174..b95019b7205f 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1176,11 +1176,9 @@ static int pcimio_auto_attach(struct comedi_device *dev, if (board->reg_type == ni_reg_6713) devpriv->is_6713 = 1; - ret = mite_setup(devpriv->mite); - if (ret < 0) { - dev_warn(dev->class_dev, "error setting up mite\n"); + ret = mite_setup(dev, devpriv->mite); + if (ret < 0) return ret; - } devpriv->ai_mite_ring = mite_alloc_ring(devpriv->mite); if (devpriv->ai_mite_ring == NULL) -- cgit From 5f8a5f4fa4c2c3fa7e66c7b002039a8046e4d99d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:38 -0700 Subject: staging: comedi: mite: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed 'daq_io_addr'. Move the iounmap of this address from mite_detach() to the drivers that use the mite module. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/mite.c | 6 +- drivers/staging/comedi/drivers/mite.h | 1 - drivers/staging/comedi/drivers/ni_660x.c | 20 +-- drivers/staging/comedi/drivers/ni_mio_common.c | 36 ++-- drivers/staging/comedi/drivers/ni_pcidio.c | 226 ++++++++++--------------- drivers/staging/comedi/drivers/ni_pcimio.c | 2 + 6 files changed, 118 insertions(+), 173 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index 9041fd180381..4f7829010a99 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -112,8 +112,8 @@ int mite_setup2(struct comedi_device *dev, } mite->mite_phys_addr = pci_resource_start(mite->pcidev, 0); - mite->daq_io_addr = pci_ioremap_bar(mite->pcidev, 1); - if (!mite->daq_io_addr) { + dev->mmio = pci_ioremap_bar(mite->pcidev, 1); + if (!dev->mmio) { dev_err(dev->class_dev, "Failed to remap daq io memory address\n"); return -ENOMEM; @@ -176,8 +176,6 @@ void mite_detach(struct mite_struct *mite) if (mite->mite_io_addr) iounmap(mite->mite_io_addr); - if (mite->daq_io_addr) - iounmap(mite->daq_io_addr); kfree(mite); } diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index b15c06671e87..b2b12045b3a5 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -55,7 +55,6 @@ struct mite_struct { resource_size_t mite_phys_addr; void __iomem *mite_io_addr; resource_size_t daq_phys_addr; - void __iomem *daq_io_addr; struct mite_channel channels[MAX_MITE_DMA_CHANNELS]; short channel_allocated[MAX_MITE_DMA_CHANNELS]; int num_channels; diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index fa19a8e7627d..b0b03d4d6081 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -587,17 +587,14 @@ static inline void ni_660x_write_register(struct comedi_device *dev, unsigned chip, unsigned bits, enum ni_660x_register reg) { - struct ni_660x_private *devpriv = dev->private; - void __iomem *write_address = - devpriv->mite->daq_io_addr + GPCT_OFFSET[chip] + - registerData[reg].offset; + unsigned int addr = GPCT_OFFSET[chip] + registerData[reg].offset; switch (registerData[reg].size) { case DATA_2B: - writew(bits, write_address); + writew(bits, dev->mmio + addr); break; case DATA_4B: - writel(bits, write_address); + writel(bits, dev->mmio + addr); break; default: BUG(); @@ -609,16 +606,13 @@ static inline unsigned ni_660x_read_register(struct comedi_device *dev, unsigned chip, enum ni_660x_register reg) { - struct ni_660x_private *devpriv = dev->private; - void __iomem *read_address = - devpriv->mite->daq_io_addr + GPCT_OFFSET[chip] + - registerData[reg].offset; + unsigned int addr = GPCT_OFFSET[chip] + registerData[reg].offset; switch (registerData[reg].size) { case DATA_2B: - return readw(read_address); + return readw(dev->mmio + addr); case DATA_4B: - return readl(read_address); + return readl(dev->mmio + addr); default: BUG(); break; @@ -1190,6 +1184,8 @@ static void ni_660x_detach(struct comedi_device *dev) ni_660x_free_mite_rings(dev); mite_detach(devpriv->mite); } + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 888ec8ddf63b..297c95d2e0a3 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -246,60 +246,48 @@ static const int num_adc_stages_611x = 3; static void ni_writel(struct comedi_device *dev, uint32_t data, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - writel(data, devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + writel(data, dev->mmio + reg); outl(data, dev->iobase + reg); } static void ni_writew(struct comedi_device *dev, uint16_t data, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - writew(data, devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + writew(data, dev->mmio + reg); outw(data, dev->iobase + reg); } static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - writeb(data, devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + writeb(data, dev->mmio + reg); outb(data, dev->iobase + reg); } static uint32_t ni_readl(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - return readl(devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + return readl(dev->mmio + reg); return inl(dev->iobase + reg); } static uint16_t ni_readw(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - return readw(devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + return readw(dev->mmio + reg); return inw(dev->iobase + reg); } static uint8_t ni_readb(struct comedi_device *dev, int reg) { - struct ni_private *devpriv = dev->private; - - if (devpriv->mite) - return readb(devpriv->mite->daq_io_addr + reg); + if (dev->mmio) + return readb(dev->mmio + reg); return inb(dev->iobase + reg); } diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 002d27637135..b5b36af80205 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -312,7 +312,7 @@ static int ni_pcidio_request_di_mite_channel(struct comedi_device *dev) devpriv->di_mite_chan->dir = COMEDI_INPUT; writeb(primary_DMAChannel_bits(devpriv->di_mite_chan->channel) | secondary_DMAChannel_bits(devpriv->di_mite_chan->channel), - devpriv->mite->daq_io_addr + DMA_Line_Control_Group1); + dev->mmio + DMA_Line_Control_Group1); mmiowb(); spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); return 0; @@ -331,7 +331,7 @@ static void ni_pcidio_release_di_mite_channel(struct comedi_device *dev) devpriv->di_mite_chan = NULL; writeb(primary_DMAChannel_bits(0) | secondary_DMAChannel_bits(0), - devpriv->mite->daq_io_addr + DMA_Line_Control_Group1); + dev->mmio + DMA_Line_Control_Group1); mmiowb(); } spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); @@ -403,9 +403,8 @@ static irqreturn_t nidio_interrupt(int irq, void *d) /* Lock to avoid race with comedi_poll */ spin_lock(&dev->spinlock); - status = readb(devpriv->mite->daq_io_addr + - Interrupt_And_Window_Status); - flags = readb(devpriv->mite->daq_io_addr + Group_1_Flags); + status = readb(dev->mmio + Interrupt_And_Window_Status); + flags = readb(dev->mmio + Group_1_Flags); spin_lock(&devpriv->mite_channel_lock); if (devpriv->di_mite_chan) @@ -434,8 +433,7 @@ static irqreturn_t nidio_interrupt(int irq, void *d) if (work > 20) { dev_dbg(dev->class_dev, "too much work in interrupt\n"); writeb(0x00, - devpriv->mite->daq_io_addr + - Master_DMA_And_Interrupt_Control); + dev->mmio + Master_DMA_And_Interrupt_Control); break; } @@ -447,64 +445,50 @@ static irqreturn_t nidio_interrupt(int irq, void *d) if (work > 100) { dev_dbg(dev->class_dev, "too much work in interrupt\n"); - writeb(0x00, - devpriv->mite->daq_io_addr + + writeb(0x00, dev->mmio + Master_DMA_And_Interrupt_Control ); goto out; } - auxdata = - readl(devpriv->mite->daq_io_addr + - Group_1_FIFO); + auxdata = readl(dev->mmio + Group_1_FIFO); data1 = auxdata & 0xffff; data2 = (auxdata & 0xffff0000) >> 16; comedi_buf_put(s, data1); comedi_buf_put(s, data2); - flags = readb(devpriv->mite->daq_io_addr + - Group_1_Flags); + flags = readb(dev->mmio + Group_1_Flags); } async->events |= COMEDI_CB_BLOCK; } if (flags & CountExpired) { - writeb(ClearExpired, - devpriv->mite->daq_io_addr + - Group_1_Second_Clear); + writeb(ClearExpired, dev->mmio + Group_1_Second_Clear); async->events |= COMEDI_CB_EOA; - writeb(0x00, devpriv->mite->daq_io_addr + OpMode); + writeb(0x00, dev->mmio + OpMode); break; } else if (flags & Waited) { - writeb(ClearWaited, - devpriv->mite->daq_io_addr + - Group_1_First_Clear); + writeb(ClearWaited, dev->mmio + Group_1_First_Clear); async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; break; } else if (flags & PrimaryTC) { writeb(ClearPrimaryTC, - devpriv->mite->daq_io_addr + - Group_1_First_Clear); + dev->mmio + Group_1_First_Clear); async->events |= COMEDI_CB_EOA; } else if (flags & SecondaryTC) { writeb(ClearSecondaryTC, - devpriv->mite->daq_io_addr + - Group_1_First_Clear); + dev->mmio + Group_1_First_Clear); async->events |= COMEDI_CB_EOA; } - flags = readb(devpriv->mite->daq_io_addr + Group_1_Flags); - status = readb(devpriv->mite->daq_io_addr + - Interrupt_And_Window_Status); + flags = readb(dev->mmio + Group_1_Flags); + status = readb(dev->mmio + Interrupt_And_Window_Status); } out: cfc_handle_events(dev, s); #if 0 - if (!tag) { - writeb(0x03, - devpriv->mite->daq_io_addr + - Master_DMA_And_Interrupt_Control); - } + if (!tag) + writeb(0x03, dev->mmio + Master_DMA_And_Interrupt_Control); #endif spin_unlock(&dev->spinlock); @@ -516,14 +500,13 @@ static int ni_pcidio_insn_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct nidio96_private *devpriv = dev->private; int ret; ret = comedi_dio_insn_config(dev, s, insn, data, 0); if (ret) return ret; - writel(s->io_bits, devpriv->mite->daq_io_addr + Port_Pin_Directions(0)); + writel(s->io_bits, dev->mmio + Port_Pin_Directions(0)); return insn->n; } @@ -533,12 +516,10 @@ static int ni_pcidio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct nidio96_private *devpriv = dev->private; - if (comedi_dio_update_state(s, data)) - writel(s->state, devpriv->mite->daq_io_addr + Port_IO(0)); + writel(s->state, dev->mmio + Port_IO(0)); - data[1] = readl(devpriv->mite->daq_io_addr + Port_IO(0)); + data[1] = readl(dev->mmio + Port_IO(0)); return insn->n; } @@ -650,7 +631,7 @@ static int ni_pcidio_inttrig(struct comedi_device *dev, if (trig_num != cmd->start_arg) return -EINVAL; - writeb(devpriv->OpModeBits, devpriv->mite->daq_io_addr + OpMode); + writeb(devpriv->OpModeBits, dev->mmio + OpMode); s->async->inttrig = NULL; return 1; @@ -662,79 +643,76 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) struct comedi_cmd *cmd = &s->async->cmd; /* XXX configure ports for input */ - writel(0x0000, devpriv->mite->daq_io_addr + Port_Pin_Directions(0)); + writel(0x0000, dev->mmio + Port_Pin_Directions(0)); if (1) { /* enable fifos A B C D */ - writeb(0x0f, devpriv->mite->daq_io_addr + Data_Path); + writeb(0x0f, dev->mmio + Data_Path); /* set transfer width a 32 bits */ writeb(TransferWidth(0) | TransferLength(0), - devpriv->mite->daq_io_addr + Transfer_Size_Control); + dev->mmio + Transfer_Size_Control); } else { - writeb(0x03, devpriv->mite->daq_io_addr + Data_Path); + writeb(0x03, dev->mmio + Data_Path); writeb(TransferWidth(3) | TransferLength(0), - devpriv->mite->daq_io_addr + Transfer_Size_Control); + dev->mmio + Transfer_Size_Control); } /* protocol configuration */ if (cmd->scan_begin_src == TRIG_TIMER) { /* page 4-5, "input with internal REQs" */ - writeb(0, devpriv->mite->daq_io_addr + OpMode); - writeb(0x00, devpriv->mite->daq_io_addr + ClockReg); - writeb(1, devpriv->mite->daq_io_addr + Sequence); - writeb(0x04, devpriv->mite->daq_io_addr + ReqReg); - writeb(4, devpriv->mite->daq_io_addr + BlockMode); - writeb(3, devpriv->mite->daq_io_addr + LinePolarities); - writeb(0xc0, devpriv->mite->daq_io_addr + AckSer); + writeb(0, dev->mmio + OpMode); + writeb(0x00, dev->mmio + ClockReg); + writeb(1, dev->mmio + Sequence); + writeb(0x04, dev->mmio + ReqReg); + writeb(4, dev->mmio + BlockMode); + writeb(3, dev->mmio + LinePolarities); + writeb(0xc0, dev->mmio + AckSer); writel(ni_pcidio_ns_to_timer(&cmd->scan_begin_arg, TRIG_ROUND_NEAREST), - devpriv->mite->daq_io_addr + StartDelay); - writeb(1, devpriv->mite->daq_io_addr + ReqDelay); - writeb(1, devpriv->mite->daq_io_addr + ReqNotDelay); - writeb(1, devpriv->mite->daq_io_addr + AckDelay); - writeb(0x0b, devpriv->mite->daq_io_addr + AckNotDelay); - writeb(0x01, devpriv->mite->daq_io_addr + Data1Delay); + dev->mmio + StartDelay); + writeb(1, dev->mmio + ReqDelay); + writeb(1, dev->mmio + ReqNotDelay); + writeb(1, dev->mmio + AckDelay); + writeb(0x0b, dev->mmio + AckNotDelay); + writeb(0x01, dev->mmio + Data1Delay); /* manual, page 4-5: ClockSpeed comment is incorrectly listed * on DAQOptions */ - writew(0, devpriv->mite->daq_io_addr + ClockSpeed); - writeb(0, devpriv->mite->daq_io_addr + DAQOptions); + writew(0, dev->mmio + ClockSpeed); + writeb(0, dev->mmio + DAQOptions); } else { /* TRIG_EXT */ /* page 4-5, "input with external REQs" */ - writeb(0, devpriv->mite->daq_io_addr + OpMode); - writeb(0x00, devpriv->mite->daq_io_addr + ClockReg); - writeb(0, devpriv->mite->daq_io_addr + Sequence); - writeb(0x00, devpriv->mite->daq_io_addr + ReqReg); - writeb(4, devpriv->mite->daq_io_addr + BlockMode); - if (!(cmd->scan_begin_arg & CR_INVERT)) { - /* Leading Edge pulse mode */ - writeb(0, devpriv->mite->daq_io_addr + LinePolarities); - } else { - /* Trailing Edge pulse mode */ - writeb(2, devpriv->mite->daq_io_addr + LinePolarities); - } - writeb(0x00, devpriv->mite->daq_io_addr + AckSer); - writel(1, devpriv->mite->daq_io_addr + StartDelay); - writeb(1, devpriv->mite->daq_io_addr + ReqDelay); - writeb(1, devpriv->mite->daq_io_addr + ReqNotDelay); - writeb(1, devpriv->mite->daq_io_addr + AckDelay); - writeb(0x0C, devpriv->mite->daq_io_addr + AckNotDelay); - writeb(0x10, devpriv->mite->daq_io_addr + Data1Delay); - writew(0, devpriv->mite->daq_io_addr + ClockSpeed); - writeb(0x60, devpriv->mite->daq_io_addr + DAQOptions); + writeb(0, dev->mmio + OpMode); + writeb(0x00, dev->mmio + ClockReg); + writeb(0, dev->mmio + Sequence); + writeb(0x00, dev->mmio + ReqReg); + writeb(4, dev->mmio + BlockMode); + if (!(cmd->scan_begin_arg & CR_INVERT)) /* Leading Edge */ + writeb(0, dev->mmio + LinePolarities); + else /* Trailing Edge */ + writeb(2, dev->mmio + LinePolarities); + writeb(0x00, dev->mmio + AckSer); + writel(1, dev->mmio + StartDelay); + writeb(1, dev->mmio + ReqDelay); + writeb(1, dev->mmio + ReqNotDelay); + writeb(1, dev->mmio + AckDelay); + writeb(0x0C, dev->mmio + AckNotDelay); + writeb(0x10, dev->mmio + Data1Delay); + writew(0, dev->mmio + ClockSpeed); + writeb(0x60, dev->mmio + DAQOptions); } if (cmd->stop_src == TRIG_COUNT) { writel(cmd->stop_arg, - devpriv->mite->daq_io_addr + Transfer_Count); + dev->mmio + Transfer_Count); } else { /* XXX */ } #ifdef USE_DMA writeb(ClearPrimaryTC | ClearSecondaryTC, - devpriv->mite->daq_io_addr + Group_1_First_Clear); + dev->mmio + Group_1_First_Clear); { int retval = setup_mite_dma(dev, s); @@ -743,18 +721,16 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return retval; } #else - writeb(0x00, devpriv->mite->daq_io_addr + DMA_Line_Control_Group1); + writeb(0x00, dev->mmio + DMA_Line_Control_Group1); #endif - writeb(0x00, devpriv->mite->daq_io_addr + DMA_Line_Control_Group2); + writeb(0x00, dev->mmio + DMA_Line_Control_Group2); /* clear and enable interrupts */ - writeb(0xff, devpriv->mite->daq_io_addr + Group_1_First_Clear); - /* writeb(ClearExpired, - devpriv->mite->daq_io_addr+Group_1_Second_Clear); */ + writeb(0xff, dev->mmio + Group_1_First_Clear); + /* writeb(ClearExpired, dev->mmio+Group_1_Second_Clear); */ - writeb(IntEn, devpriv->mite->daq_io_addr + Interrupt_Control); - writeb(0x03, - devpriv->mite->daq_io_addr + Master_DMA_And_Interrupt_Control); + writeb(IntEn, dev->mmio + Interrupt_Control); + writeb(0x03, dev->mmio + Master_DMA_And_Interrupt_Control); if (cmd->stop_src == TRIG_NONE) { devpriv->OpModeBits = DataLatching(0) | RunMode(7); @@ -763,8 +739,7 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } if (cmd->start_src == TRIG_NOW) { /* start */ - writeb(devpriv->OpModeBits, - devpriv->mite->daq_io_addr + OpMode); + writeb(devpriv->OpModeBits, dev->mmio + OpMode); s->async->inttrig = NULL; } else { /* TRIG_INT */ @@ -777,10 +752,7 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) static int ni_pcidio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct nidio96_private *devpriv = dev->private; - - writeb(0x00, - devpriv->mite->daq_io_addr + Master_DMA_And_Interrupt_Control); + writeb(0x00, dev->mmio + Master_DMA_And_Interrupt_Control); ni_pcidio_release_di_mite_channel(dev); return 0; @@ -805,19 +777,16 @@ static int pci_6534_load_fpga(struct comedi_device *dev, const u8 *data, size_t data_len, unsigned long context) { - struct nidio96_private *devpriv = dev->private; static const int timeout = 1000; int fpga_index = context; int i; size_t j; - writew(0x80 | fpga_index, - devpriv->mite->daq_io_addr + Firmware_Control_Register); - writew(0xc0 | fpga_index, - devpriv->mite->daq_io_addr + Firmware_Control_Register); + writew(0x80 | fpga_index, dev->mmio + Firmware_Control_Register); + writew(0xc0 | fpga_index, dev->mmio + Firmware_Control_Register); for (i = 0; - (readw(devpriv->mite->daq_io_addr + - Firmware_Status_Register) & 0x2) == 0 && i < timeout; ++i) { + (readw(dev->mmio + Firmware_Status_Register) & 0x2) == 0 && + i < timeout; ++i) { udelay(1); } if (i == timeout) { @@ -826,11 +795,10 @@ static int pci_6534_load_fpga(struct comedi_device *dev, fpga_index); return -EIO; } - writew(0x80 | fpga_index, - devpriv->mite->daq_io_addr + Firmware_Control_Register); + writew(0x80 | fpga_index, dev->mmio + Firmware_Control_Register); for (i = 0; - readw(devpriv->mite->daq_io_addr + Firmware_Status_Register) != - 0x3 && i < timeout; ++i) { + readw(dev->mmio + Firmware_Status_Register) != 0x3 && + i < timeout; ++i) { udelay(1); } if (i == timeout) { @@ -843,11 +811,9 @@ static int pci_6534_load_fpga(struct comedi_device *dev, unsigned int value = data[j++]; value |= data[j++] << 8; - writew(value, - devpriv->mite->daq_io_addr + Firmware_Data_Register); + writew(value, dev->mmio + Firmware_Data_Register); for (i = 0; - (readw(devpriv->mite->daq_io_addr + - Firmware_Status_Register) & 0x2) == 0 + (readw(dev->mmio + Firmware_Status_Register) & 0x2) == 0 && i < timeout; ++i) { udelay(1); } @@ -860,7 +826,7 @@ static int pci_6534_load_fpga(struct comedi_device *dev, if (need_resched()) schedule(); } - writew(0x0, devpriv->mite->daq_io_addr + Firmware_Control_Register); + writew(0x0, dev->mmio + Firmware_Control_Register); return 0; } @@ -871,30 +837,27 @@ static int pci_6534_reset_fpga(struct comedi_device *dev, int fpga_index) static int pci_6534_reset_fpgas(struct comedi_device *dev) { - struct nidio96_private *devpriv = dev->private; int ret; int i; - writew(0x0, devpriv->mite->daq_io_addr + Firmware_Control_Register); + writew(0x0, dev->mmio + Firmware_Control_Register); for (i = 0; i < 3; ++i) { ret = pci_6534_reset_fpga(dev, i); if (ret < 0) break; } - writew(0x0, devpriv->mite->daq_io_addr + Firmware_Mask_Register); + writew(0x0, dev->mmio + Firmware_Mask_Register); return ret; } static void pci_6534_init_main_fpga(struct comedi_device *dev) { - struct nidio96_private *devpriv = dev->private; - - writel(0, devpriv->mite->daq_io_addr + FPGA_Control1_Register); - writel(0, devpriv->mite->daq_io_addr + FPGA_Control2_Register); - writel(0, devpriv->mite->daq_io_addr + FPGA_SCALS_Counter_Register); - writel(0, devpriv->mite->daq_io_addr + FPGA_SCAMS_Counter_Register); - writel(0, devpriv->mite->daq_io_addr + FPGA_SCBLS_Counter_Register); - writel(0, devpriv->mite->daq_io_addr + FPGA_SCBMS_Counter_Register); + writel(0, dev->mmio + FPGA_Control1_Register); + writel(0, dev->mmio + FPGA_Control2_Register); + writel(0, dev->mmio + FPGA_SCALS_Counter_Register); + writel(0, dev->mmio + FPGA_SCAMS_Counter_Register); + writel(0, dev->mmio + FPGA_SCBLS_Counter_Register); + writel(0, dev->mmio + FPGA_SCBMS_Counter_Register); } static int pci_6534_upload_firmware(struct comedi_device *dev) @@ -926,15 +889,12 @@ static int pci_6534_upload_firmware(struct comedi_device *dev) static void nidio_reset_board(struct comedi_device *dev) { - struct nidio96_private *devpriv = dev->private; - void __iomem *daq_mmio = devpriv->mite->daq_io_addr; - - writel(0, daq_mmio + Port_IO(0)); - writel(0, daq_mmio + Port_Pin_Directions(0)); - writel(0, daq_mmio + Port_Pin_Mask(0)); + writel(0, dev->mmio + Port_IO(0)); + writel(0, dev->mmio + Port_Pin_Directions(0)); + writel(0, dev->mmio + Port_Pin_Mask(0)); /* disable interrupts on board */ - writeb(0, daq_mmio + Master_DMA_And_Interrupt_Control); + writeb(0, dev->mmio + Master_DMA_And_Interrupt_Control); } static int nidio_auto_attach(struct comedi_device *dev, @@ -989,7 +949,7 @@ static int nidio_auto_attach(struct comedi_device *dev, return ret; dev_info(dev->class_dev, "%s rev=%d\n", dev->board_name, - readb(devpriv->mite->daq_io_addr + Chip_Version)); + readb(dev->mmio + Chip_Version)); s = &dev->subdevices[0]; @@ -1035,6 +995,8 @@ static void nidio_detach(struct comedi_device *dev) } mite_detach(devpriv->mite); } + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index b95019b7205f..da61fa70decf 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -1123,6 +1123,8 @@ static void pcimio_detach(struct comedi_device *dev) mite_free_ring(devpriv->gpct_mite_ring[1]); mite_detach(devpriv->mite); } + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From ac482be4b6312263ffd5101dc5e560d55c00b571 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:39 -0700 Subject: staging: comedi: ni_labpc: pass comedi_device to the I/O callbacks This driver uses some callbacks in the private data to handle the port mapped or memory mapped I/O used to access the hardware. Pass the comedi_device pointer to the helper functions so that the base address can be found and does not need to be included in each call. Also, remove the inline from the helper functions. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 133 ++++++++++++----------- drivers/staging/comedi/drivers/ni_labpc.h | 5 +- drivers/staging/comedi/drivers/ni_labpc_isadma.c | 2 +- 3 files changed, 73 insertions(+), 67 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 51a6d4e78c04..90ce57f72fc3 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -128,24 +128,30 @@ static const struct comedi_lrange range_labpc_ao = { /* functions that do inb/outb and readb/writeb so we can use * function pointers to decide which to use */ -static inline unsigned int labpc_inb(unsigned long address) +static unsigned int labpc_inb(struct comedi_device *dev, unsigned long reg) { - return inb(address); + return inb(dev->iobase + reg); } -static inline void labpc_outb(unsigned int byte, unsigned long address) +static void labpc_outb(struct comedi_device *dev, + unsigned int byte, unsigned long reg) { - outb(byte, address); + outb(byte, dev->iobase + reg); } -static inline unsigned int labpc_readb(unsigned long address) +static unsigned int labpc_readb(struct comedi_device *dev, unsigned long reg) { - return readb((void __iomem *)address); + void __iomem *mmio = (void __iomem *)dev->iobase; + + return readb(mmio + reg); } -static inline void labpc_writeb(unsigned int byte, unsigned long address) +static void labpc_writeb(struct comedi_device *dev, + unsigned int byte, unsigned long reg) { - writeb(byte, (void __iomem *)address); + void __iomem *mmio = (void __iomem *)dev->iobase; + + writeb(byte, mmio + reg); } #if IS_ENABLED(CONFIG_COMEDI_NI_LABPC_ISA) @@ -211,11 +217,11 @@ static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s) spin_lock_irqsave(&dev->spinlock, flags); devpriv->cmd2 &= ~(CMD2_SWTRIG | CMD2_HWTRIG | CMD2_PRETRIG); - devpriv->write_byte(devpriv->cmd2, dev->iobase + CMD2_REG); + devpriv->write_byte(dev, devpriv->cmd2, CMD2_REG); spin_unlock_irqrestore(&dev->spinlock, flags); devpriv->cmd3 = 0; - devpriv->write_byte(devpriv->cmd3, dev->iobase + CMD3_REG); + devpriv->write_byte(dev, devpriv->cmd3, CMD3_REG); return 0; } @@ -245,7 +251,7 @@ static void labpc_ai_set_chan_and_gain(struct comedi_device *dev, devpriv->cmd1 = CMD1_MA(chan); devpriv->cmd1 |= CMD1_GAIN(range); - devpriv->write_byte(devpriv->cmd1, dev->iobase + CMD1_REG); + devpriv->write_byte(dev, devpriv->cmd1, CMD1_REG); } static void labpc_setup_cmd6_reg(struct comedi_device *dev, @@ -292,14 +298,14 @@ static void labpc_setup_cmd6_reg(struct comedi_device *dev, else devpriv->cmd6 &= ~CMD6_SCANUP; - devpriv->write_byte(devpriv->cmd6, dev->iobase + CMD6_REG); + devpriv->write_byte(dev, devpriv->cmd6, CMD6_REG); } static unsigned int labpc_read_adc_fifo(struct comedi_device *dev) { struct labpc_private *devpriv = dev->private; - unsigned int lsb = devpriv->read_byte(dev->iobase + ADC_FIFO_REG); - unsigned int msb = devpriv->read_byte(dev->iobase + ADC_FIFO_REG); + unsigned int lsb = devpriv->read_byte(dev, ADC_FIFO_REG); + unsigned int msb = devpriv->read_byte(dev, ADC_FIFO_REG); return (msb << 8) | lsb; } @@ -308,7 +314,7 @@ static void labpc_clear_adc_fifo(struct comedi_device *dev) { struct labpc_private *devpriv = dev->private; - devpriv->write_byte(0x1, dev->iobase + ADC_FIFO_CLEAR_REG); + devpriv->write_byte(dev, 0x1, ADC_FIFO_CLEAR_REG); labpc_read_adc_fifo(dev); } @@ -319,7 +325,7 @@ static int labpc_ai_eoc(struct comedi_device *dev, { struct labpc_private *devpriv = dev->private; - devpriv->stat1 = devpriv->read_byte(dev->iobase + STAT1_REG); + devpriv->stat1 = devpriv->read_byte(dev, STAT1_REG); if (devpriv->stat1 & STAT1_DAVAIL) return 0; return -EBUSY; @@ -351,7 +357,7 @@ static int labpc_ai_insn_read(struct comedi_device *dev, /* single-ended/differential */ if (aref == AREF_DIFF) devpriv->cmd4 |= CMD4_SEDIFF; - devpriv->write_byte(devpriv->cmd4, dev->iobase + CMD4_REG); + devpriv->write_byte(dev, devpriv->cmd4, CMD4_REG); /* initialize pacer counter to prevent any problems */ labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG, @@ -361,7 +367,7 @@ static int labpc_ai_insn_read(struct comedi_device *dev, for (i = 0; i < insn->n; i++) { /* trigger conversion */ - devpriv->write_byte(0x1, dev->iobase + ADC_START_CONVERT_REG); + devpriv->write_byte(dev, 0x1, ADC_START_CONVERT_REG); ret = comedi_timeout(dev, s, insn, labpc_ai_eoc, 0); if (ret) @@ -786,13 +792,12 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * list will get screwed when you switch * between scan up to scan down mode - dunno why */ udelay(1); - devpriv->write_byte(devpriv->cmd1, dev->iobase + CMD1_REG); + devpriv->write_byte(dev, devpriv->cmd1, CMD1_REG); } - devpriv->write_byte(cmd->chanlist_len, - dev->iobase + INTERVAL_COUNT_REG); + devpriv->write_byte(dev, cmd->chanlist_len, INTERVAL_COUNT_REG); /* load count */ - devpriv->write_byte(0x1, dev->iobase + INTERVAL_STROBE_REG); + devpriv->write_byte(dev, 0x1, INTERVAL_STROBE_REG); if (cmd->convert_src == TRIG_TIMER || cmd->scan_begin_src == TRIG_TIMER) { @@ -830,7 +835,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* enable fifo not empty interrupt? */ if (xfer == fifo_not_empty_transfer) devpriv->cmd3 |= CMD3_FIFOINTEN; - devpriv->write_byte(devpriv->cmd3, dev->iobase + CMD3_REG); + devpriv->write_byte(dev, devpriv->cmd3, CMD3_REG); /* setup any external triggering/pacing (cmd4 register) */ devpriv->cmd4 = 0; @@ -846,7 +851,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* single-ended/differential */ if (aref == AREF_DIFF) devpriv->cmd4 |= CMD4_SEDIFF; - devpriv->write_byte(devpriv->cmd4, dev->iobase + CMD4_REG); + devpriv->write_byte(dev, devpriv->cmd4, CMD4_REG); /* startup acquisition */ @@ -863,7 +868,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (cmd->stop_src == TRIG_EXT) devpriv->cmd2 |= (CMD2_HWTRIG | CMD2_PRETRIG); - devpriv->write_byte(devpriv->cmd2, dev->iobase + CMD2_REG); + devpriv->write_byte(dev, devpriv->cmd2, CMD2_REG); spin_unlock_irqrestore(&dev->spinlock, flags); @@ -880,7 +885,7 @@ static int labpc_drain_fifo(struct comedi_device *dev) const int timeout = 10000; unsigned int i; - devpriv->stat1 = devpriv->read_byte(dev->iobase + STAT1_REG); + devpriv->stat1 = devpriv->read_byte(dev, STAT1_REG); for (i = 0; (devpriv->stat1 & STAT1_DAVAIL) && i < timeout; i++) { @@ -892,7 +897,7 @@ static int labpc_drain_fifo(struct comedi_device *dev) } data = labpc_read_adc_fifo(dev); cfc_write_to_buffer(dev->read_subdev, data); - devpriv->stat1 = devpriv->read_byte(dev->iobase + STAT1_REG); + devpriv->stat1 = devpriv->read_byte(dev, STAT1_REG); } if (i == timeout) { dev_err(dev->class_dev, "ai timeout, fifo never empties\n"); @@ -934,9 +939,9 @@ static irqreturn_t labpc_interrupt(int irq, void *d) cmd = &async->cmd; /* read board status */ - devpriv->stat1 = devpriv->read_byte(dev->iobase + STAT1_REG); + devpriv->stat1 = devpriv->read_byte(dev, STAT1_REG); if (board->is_labpc1200) - devpriv->stat2 = devpriv->read_byte(dev->iobase + STAT2_REG); + devpriv->stat2 = devpriv->read_byte(dev, STAT2_REG); if ((devpriv->stat1 & (STAT1_GATA0 | STAT1_CNTINT | STAT1_OVERFLOW | STAT1_OVERRUN | STAT1_DAVAIL)) == 0 @@ -947,7 +952,7 @@ static irqreturn_t labpc_interrupt(int irq, void *d) if (devpriv->stat1 & STAT1_OVERRUN) { /* clear error interrupt */ - devpriv->write_byte(0x1, dev->iobase + ADC_FIFO_CLEAR_REG); + devpriv->write_byte(dev, 0x1, ADC_FIFO_CLEAR_REG); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); dev_err(dev->class_dev, "overrun\n"); @@ -962,12 +967,12 @@ static irqreturn_t labpc_interrupt(int irq, void *d) if (devpriv->stat1 & STAT1_CNTINT) { dev_err(dev->class_dev, "handled timer interrupt?\n"); /* clear it */ - devpriv->write_byte(0x1, dev->iobase + TIMER_CLEAR_REG); + devpriv->write_byte(dev, 0x1, TIMER_CLEAR_REG); } if (devpriv->stat1 & STAT1_OVERFLOW) { /* clear error interrupt */ - devpriv->write_byte(0x1, dev->iobase + ADC_FIFO_CLEAR_REG); + devpriv->write_byte(dev, 0x1, ADC_FIFO_CLEAR_REG); async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; cfc_handle_events(dev, s); dev_err(dev->class_dev, "overflow\n"); @@ -1009,7 +1014,7 @@ static int labpc_ao_insn_write(struct comedi_device *dev, * be independently enabled/disabled for its the two channels */ spin_lock_irqsave(&dev->spinlock, flags); devpriv->cmd2 &= ~CMD2_LDAC(channel); - devpriv->write_byte(devpriv->cmd2, dev->iobase + CMD2_REG); + devpriv->write_byte(dev, devpriv->cmd2, CMD2_REG); spin_unlock_irqrestore(&dev->spinlock, flags); /* set range */ @@ -1020,13 +1025,13 @@ static int labpc_ao_insn_write(struct comedi_device *dev, else devpriv->cmd6 &= ~CMD6_DACUNI(channel); /* write to register */ - devpriv->write_byte(devpriv->cmd6, dev->iobase + CMD6_REG); + devpriv->write_byte(dev, devpriv->cmd6, CMD6_REG); } /* send data */ lsb = data[0] & 0xff; msb = (data[0] >> 8) & 0xff; - devpriv->write_byte(lsb, dev->iobase + DAC_LSB_REG(channel)); - devpriv->write_byte(msb, dev->iobase + DAC_MSB_REG(channel)); + devpriv->write_byte(dev, lsb, DAC_LSB_REG(channel)); + devpriv->write_byte(dev, msb, DAC_MSB_REG(channel)); /* remember value for readback */ devpriv->ao_value[channel] = data[0]; @@ -1072,11 +1077,11 @@ static void labpc_serial_out(struct comedi_device *dev, unsigned int value, else devpriv->cmd5 &= ~CMD5_SDATA; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* set clock to load bit */ devpriv->cmd5 |= CMD5_SCLK; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); } } @@ -1092,14 +1097,14 @@ static unsigned int labpc_serial_in(struct comedi_device *dev) /* set serial clock */ devpriv->cmd5 |= CMD5_SCLK; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* clear clock bit */ devpriv->cmd5 &= ~CMD5_SCLK; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* read bits most significant bit first */ udelay(1); - devpriv->stat2 = devpriv->read_byte(dev->iobase + STAT2_REG); + devpriv->stat2 = devpriv->read_byte(dev, STAT2_REG); if (devpriv->stat2 & STAT2_PROMOUT) value |= 1 << (value_width - i); } @@ -1120,10 +1125,10 @@ static unsigned int labpc_eeprom_read(struct comedi_device *dev, /* enable read/write to eeprom */ devpriv->cmd5 &= ~CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); devpriv->cmd5 |= (CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* send read instruction */ labpc_serial_out(dev, read_instruction, write_length); @@ -1135,7 +1140,7 @@ static unsigned int labpc_eeprom_read(struct comedi_device *dev, /* disable read/write to eeprom */ devpriv->cmd5 &= ~(CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); return value; } @@ -1150,10 +1155,10 @@ static unsigned int labpc_eeprom_read_status(struct comedi_device *dev) /* enable read/write to eeprom */ devpriv->cmd5 &= ~CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); devpriv->cmd5 |= (CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* send read status instruction */ labpc_serial_out(dev, read_status_instruction, write_length); @@ -1163,7 +1168,7 @@ static unsigned int labpc_eeprom_read_status(struct comedi_device *dev) /* disable read/write to eeprom */ devpriv->cmd5 &= ~(CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); return value; } @@ -1195,21 +1200,21 @@ static int labpc_eeprom_write(struct comedi_device *dev, /* enable read/write to eeprom */ devpriv->cmd5 &= ~CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); devpriv->cmd5 |= (CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* send write_enable instruction */ labpc_serial_out(dev, write_enable_instruction, write_length); devpriv->cmd5 &= ~CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* send write instruction */ devpriv->cmd5 |= CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); labpc_serial_out(dev, write_instruction, write_length); /* send 8 bit address to write to */ labpc_serial_out(dev, address, write_length); @@ -1217,12 +1222,12 @@ static int labpc_eeprom_write(struct comedi_device *dev, labpc_serial_out(dev, value, write_length); devpriv->cmd5 &= ~CMD5_EEPROMCS; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* disable read/write to eeprom */ devpriv->cmd5 &= ~(CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); return 0; } @@ -1240,7 +1245,7 @@ static void write_caldac(struct comedi_device *dev, unsigned int channel, /* clear caldac load bit and make sure we don't write to eeprom */ devpriv->cmd5 &= ~(CMD5_CALDACLD | CMD5_EEPROMCS | CMD5_WRTPRT); udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); /* write 4 bit channel */ labpc_serial_out(dev, channel, 4); @@ -1250,10 +1255,10 @@ static void write_caldac(struct comedi_device *dev, unsigned int channel, /* set and clear caldac bit to load caldac value */ devpriv->cmd5 |= CMD5_CALDACLD; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); devpriv->cmd5 &= ~CMD5_CALDACLD; udelay(1); - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); } static int labpc_calib_insn_write(struct comedi_device *dev, @@ -1346,13 +1351,13 @@ int labpc_common_attach(struct comedi_device *dev, } /* initialize board's command registers */ - devpriv->write_byte(devpriv->cmd1, dev->iobase + CMD1_REG); - devpriv->write_byte(devpriv->cmd2, dev->iobase + CMD2_REG); - devpriv->write_byte(devpriv->cmd3, dev->iobase + CMD3_REG); - devpriv->write_byte(devpriv->cmd4, dev->iobase + CMD4_REG); + devpriv->write_byte(dev, devpriv->cmd1, CMD1_REG); + devpriv->write_byte(dev, devpriv->cmd2, CMD2_REG); + devpriv->write_byte(dev, devpriv->cmd3, CMD3_REG); + devpriv->write_byte(dev, devpriv->cmd4, CMD4_REG); if (board->is_labpc1200) { - devpriv->write_byte(devpriv->cmd5, dev->iobase + CMD5_REG); - devpriv->write_byte(devpriv->cmd6, dev->iobase + CMD6_REG); + devpriv->write_byte(dev, devpriv->cmd5, CMD5_REG); + devpriv->write_byte(dev, devpriv->cmd6, CMD6_REG); } if (irq) { @@ -1402,8 +1407,8 @@ int labpc_common_attach(struct comedi_device *dev, devpriv->ao_value[i] = s->maxdata / 2; lsb = devpriv->ao_value[i] & 0xff; msb = (devpriv->ao_value[i] >> 8) & 0xff; - devpriv->write_byte(lsb, dev->iobase + DAC_LSB_REG(i)); - devpriv->write_byte(msb, dev->iobase + DAC_MSB_REG(i)); + devpriv->write_byte(dev, lsb, DAC_LSB_REG(i)); + devpriv->write_byte(dev, msb, DAC_MSB_REG(i)); } } else { s->type = COMEDI_SUBD_UNUSED; diff --git a/drivers/staging/comedi/drivers/ni_labpc.h b/drivers/staging/comedi/drivers/ni_labpc.h index b159b4ba4877..848725696f2f 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.h +++ b/drivers/staging/comedi/drivers/ni_labpc.h @@ -79,8 +79,9 @@ struct labpc_private { * function pointers so we can use inb/outb or readb/writeb as * appropriate */ - unsigned int (*read_byte)(unsigned long address); - void (*write_byte)(unsigned int byte, unsigned long address); + unsigned int (*read_byte)(struct comedi_device *, unsigned long reg); + void (*write_byte)(struct comedi_device *, + unsigned int byte, unsigned long reg); }; int labpc_common_attach(struct comedi_device *dev, diff --git a/drivers/staging/comedi/drivers/ni_labpc_isadma.c b/drivers/staging/comedi/drivers/ni_labpc_isadma.c index d9f25fdbb728..cb7d1c952cf2 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_isadma.c +++ b/drivers/staging/comedi/drivers/ni_labpc_isadma.c @@ -147,7 +147,7 @@ static void handle_isa_dma(struct comedi_device *dev) enable_dma(devpriv->dma_chan); /* clear dma tc interrupt */ - devpriv->write_byte(0x1, dev->iobase + DMATC_CLEAR_REG); + devpriv->write_byte(dev, 0x1, DMATC_CLEAR_REG); } void labpc_handle_dma_status(struct comedi_device *dev) -- cgit From 3f1ecb9b429eb909cee4ab35b34cb8de5e0b3f78 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:40 -0700 Subject: staging: comedi: ni_labpc: don't pass dev->iobase to labpc_counter_load() Use the comedi_device parameter that is passed to this function to find the dev->iobase so it does not have to be included in each call. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 90ce57f72fc3..7a8ff2598281 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -176,7 +176,7 @@ static const struct labpc_boardinfo labpc_boards[] = { #endif static void labpc_counter_load(struct comedi_device *dev, - unsigned long base_address, + unsigned long reg, unsigned int counter_number, unsigned int count, unsigned int mode) @@ -184,13 +184,13 @@ static void labpc_counter_load(struct comedi_device *dev, const struct labpc_boardinfo *board = comedi_board(dev); if (board->has_mmio) { - void __iomem *mmio_base = (void __iomem *)base_address; + void __iomem *mmio = (void __iomem *)dev->iobase; - i8254_mm_set_mode(mmio_base, 0, counter_number, mode); - i8254_mm_write(mmio_base, 0, counter_number, count); + i8254_mm_set_mode(mmio + reg, 0, counter_number, mode); + i8254_mm_write(mmio + reg, 0, counter_number, count); } else { - i8254_set_mode(base_address, 0, counter_number, mode); - i8254_write(base_address, 0, counter_number, count); + i8254_set_mode(dev->iobase + reg, 0, counter_number, mode); + i8254_write(dev->iobase + reg, 0, counter_number, count); } } @@ -755,7 +755,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) * load counter a1 with count of 3 * (pc+ manual says this is minimum allowed) using mode 0 */ - labpc_counter_load(dev, dev->iobase + COUNTER_A_BASE_REG, + labpc_counter_load(dev, COUNTER_A_BASE_REG, 1, 3, I8254_MODE0); } else { /* just put counter a1 in mode 0 to set its output low */ @@ -804,13 +804,13 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* set up pacing */ labpc_adc_timing(dev, cmd, mode); /* load counter b0 in mode 3 */ - labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG, + labpc_counter_load(dev, COUNTER_B_BASE_REG, 0, devpriv->divisor_b0, I8254_MODE3); } /* set up conversion pacing */ if (labpc_ai_convert_period(cmd, mode)) { /* load counter a0 in mode 2 */ - labpc_counter_load(dev, dev->iobase + COUNTER_A_BASE_REG, + labpc_counter_load(dev, COUNTER_A_BASE_REG, 0, devpriv->divisor_a0, I8254_MODE2); } else { /* initialize pacer counter to prevent any problems */ @@ -821,7 +821,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* set up scan pacing */ if (labpc_ai_scan_period(cmd, mode)) { /* load counter b1 in mode 2 */ - labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG, + labpc_counter_load(dev, COUNTER_B_BASE_REG, 1, devpriv->divisor_b1, I8254_MODE2); } -- cgit From 7c555f06fb6afc9e83b8b375e8cf131cfe355e95 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:41 -0700 Subject: staging: comedi: ni_labpc: don't pass dev->iobase to labpc_counter_set_mode() Use the comedi_device parameter that is passed to this function to find the dev->iobase so it does not have to be included in each call. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 7a8ff2598281..819eeec9d20d 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -195,18 +195,18 @@ static void labpc_counter_load(struct comedi_device *dev, } static void labpc_counter_set_mode(struct comedi_device *dev, - unsigned long base_address, + unsigned long reg, unsigned int counter_number, unsigned int mode) { const struct labpc_boardinfo *board = comedi_board(dev); if (board->has_mmio) { - void __iomem *mmio_base = (void __iomem *)base_address; + void __iomem *mmio = (void __iomem *)dev->iobase; - i8254_mm_set_mode(mmio_base, 0, counter_number, mode); + i8254_mm_set_mode(mmio + reg, 0, counter_number, mode); } else { - i8254_set_mode(base_address, 0, counter_number, mode); + i8254_set_mode(dev->iobase + reg, 0, counter_number, mode); } } @@ -360,8 +360,7 @@ static int labpc_ai_insn_read(struct comedi_device *dev, devpriv->write_byte(dev, devpriv->cmd4, CMD4_REG); /* initialize pacer counter to prevent any problems */ - labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG, - 0, I8254_MODE2); + labpc_counter_set_mode(dev, COUNTER_A_BASE_REG, 0, I8254_MODE2); labpc_clear_adc_fifo(dev); @@ -759,8 +758,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) 1, 3, I8254_MODE0); } else { /* just put counter a1 in mode 0 to set its output low */ - labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG, - 1, I8254_MODE0); + labpc_counter_set_mode(dev, COUNTER_A_BASE_REG, 1, I8254_MODE0); } /* figure out what method we will use to transfer data */ @@ -814,8 +812,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) 0, devpriv->divisor_a0, I8254_MODE2); } else { /* initialize pacer counter to prevent any problems */ - labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG, - 0, I8254_MODE2); + labpc_counter_set_mode(dev, COUNTER_A_BASE_REG, 0, I8254_MODE2); } /* set up scan pacing */ -- cgit From adcd16a2983c4f29cabd0af3bc2881e97348a4ee Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:42 -0700 Subject: staging: comedi: ni_labpc: refactor labpc_8255_mmio() Refactor the 8255 support code in preperation for using the comedi_device 'mmio' member. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 819eeec9d20d..7f5072bae493 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1048,14 +1048,17 @@ static int labpc_ao_insn_read(struct comedi_device *dev, return 1; } -static int labpc_8255_mmio(int dir, int port, int data, unsigned long iobase) +static int labpc_8255_mmio(int dir, int port, int data, unsigned long arg) { + struct comedi_device *dev = (struct comedi_device *)arg; + void __iomem *mmio = (void __iomem *)dev->iobase + DIO_BASE_REG; + if (dir) { - writeb(data, (void __iomem *)(iobase + port)); + writeb(data, mmio + port); return 0; } - return readb((void __iomem *)(iobase + port)); + return readb(mmio + port); } /* lowlevel write to eeprom/dac */ @@ -1413,9 +1416,13 @@ int labpc_common_attach(struct comedi_device *dev, /* 8255 dio */ s = &dev->subdevices[2]; - ret = subdev_8255_init(dev, s, - (board->has_mmio) ? labpc_8255_mmio : NULL, - dev->iobase + DIO_BASE_REG); + if (board->has_mmio) { + ret = subdev_8255_init(dev, s, labpc_8255_mmio, + (unsigned long)dev); + } else { + ret = subdev_8255_init(dev, s, NULL, + dev->iobase + DIO_BASE_REG); + } if (ret) return ret; -- cgit From 70f72867147b18fc36d2717cda6ddbaf4f71cf77 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:43 -0700 Subject: staging: comedi: ni_labpc: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the ioremap'ed base address. Only the ni_labpc_pci module does the ioremap, its also the only module that sets the 'has_mmio' member in the boardinfo. Remove this member from the boardinfo and use dev->mmio to determine if the I/O is memory mapped. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.c | 38 +++++++++------------------ drivers/staging/comedi/drivers/ni_labpc.h | 1 - drivers/staging/comedi/drivers/ni_labpc_pci.c | 11 +++----- 3 files changed, 16 insertions(+), 34 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 7f5072bae493..126d65cb39f2 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -141,17 +141,13 @@ static void labpc_outb(struct comedi_device *dev, static unsigned int labpc_readb(struct comedi_device *dev, unsigned long reg) { - void __iomem *mmio = (void __iomem *)dev->iobase; - - return readb(mmio + reg); + return readb(dev->mmio + reg); } static void labpc_writeb(struct comedi_device *dev, unsigned int byte, unsigned long reg) { - void __iomem *mmio = (void __iomem *)dev->iobase; - - writeb(byte, mmio + reg); + writeb(byte, dev->mmio + reg); } #if IS_ENABLED(CONFIG_COMEDI_NI_LABPC_ISA) @@ -181,13 +177,9 @@ static void labpc_counter_load(struct comedi_device *dev, unsigned int count, unsigned int mode) { - const struct labpc_boardinfo *board = comedi_board(dev); - - if (board->has_mmio) { - void __iomem *mmio = (void __iomem *)dev->iobase; - - i8254_mm_set_mode(mmio + reg, 0, counter_number, mode); - i8254_mm_write(mmio + reg, 0, counter_number, count); + if (dev->mmio) { + i8254_mm_set_mode(dev->mmio + reg, 0, counter_number, mode); + i8254_mm_write(dev->mmio + reg, 0, counter_number, count); } else { i8254_set_mode(dev->iobase + reg, 0, counter_number, mode); i8254_write(dev->iobase + reg, 0, counter_number, count); @@ -199,15 +191,10 @@ static void labpc_counter_set_mode(struct comedi_device *dev, unsigned int counter_number, unsigned int mode) { - const struct labpc_boardinfo *board = comedi_board(dev); - - if (board->has_mmio) { - void __iomem *mmio = (void __iomem *)dev->iobase; - - i8254_mm_set_mode(mmio + reg, 0, counter_number, mode); - } else { + if (dev->mmio) + i8254_mm_set_mode(dev->mmio + reg, 0, counter_number, mode); + else i8254_set_mode(dev->iobase + reg, 0, counter_number, mode); - } } static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s) @@ -1051,14 +1038,13 @@ static int labpc_ao_insn_read(struct comedi_device *dev, static int labpc_8255_mmio(int dir, int port, int data, unsigned long arg) { struct comedi_device *dev = (struct comedi_device *)arg; - void __iomem *mmio = (void __iomem *)dev->iobase + DIO_BASE_REG; if (dir) { - writeb(data, mmio + port); + writeb(data, dev->mmio + DIO_BASE_REG + port); return 0; } - return readb(mmio + port); + return readb(dev->mmio + DIO_BASE_REG + port); } /* lowlevel write to eeprom/dac */ @@ -1342,7 +1328,7 @@ int labpc_common_attach(struct comedi_device *dev, int ret; int i; - if (board->has_mmio) { + if (dev->mmio) { devpriv->read_byte = labpc_readb; devpriv->write_byte = labpc_writeb; } else { @@ -1416,7 +1402,7 @@ int labpc_common_attach(struct comedi_device *dev, /* 8255 dio */ s = &dev->subdevices[2]; - if (board->has_mmio) { + if (dev->mmio) { ret = subdev_8255_init(dev, s, labpc_8255_mmio, (unsigned long)dev); } else { diff --git a/drivers/staging/comedi/drivers/ni_labpc.h b/drivers/staging/comedi/drivers/ni_labpc.h index 848725696f2f..f6e5cd15a409 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.h +++ b/drivers/staging/comedi/drivers/ni_labpc.h @@ -32,7 +32,6 @@ struct labpc_boardinfo { unsigned ai_scan_up:1; /* can auto scan up in ai channels */ unsigned has_ao:1; /* has analog outputs */ unsigned is_labpc1200:1; /* has extra regs compared to pc+ */ - unsigned has_mmio:1; /* uses memory mapped io */ }; struct labpc_private { diff --git a/drivers/staging/comedi/drivers/ni_labpc_pci.c b/drivers/staging/comedi/drivers/ni_labpc_pci.c index 5b59be3350ad..65984ea0a3ee 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_pci.c +++ b/drivers/staging/comedi/drivers/ni_labpc_pci.c @@ -48,7 +48,6 @@ static const struct labpc_boardinfo labpc_pci_boards[] = { .ai_scan_up = 1, .has_ao = 1, .is_labpc1200 = 1, - .has_mmio = 1, }, }; @@ -81,7 +80,6 @@ static int labpc_pci_auto_attach(struct comedi_device *dev, struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct labpc_boardinfo *board = NULL; struct labpc_private *devpriv; - void __iomem *mmio; int ret; if (context < ARRAY_SIZE(labpc_pci_boards)) @@ -99,10 +97,9 @@ static int labpc_pci_auto_attach(struct comedi_device *dev, if (ret) return ret; - mmio = pci_ioremap_bar(pcidev, 1); - if (!mmio) + dev->mmio = pci_ioremap_bar(pcidev, 1); + if (!dev->mmio) return -ENOMEM; - dev->iobase = (unsigned long)mmio; devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) @@ -113,8 +110,8 @@ static int labpc_pci_auto_attach(struct comedi_device *dev, static void labpc_pci_detach(struct comedi_device *dev) { - if (dev->iobase) - iounmap((void __iomem *)dev->iobase); + if (dev->mmio) + iounmap(dev->mmio); if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); -- cgit From d6e497b92f4296db79577a05d399ba20a58b719b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:44 -0700 Subject: staging: comedi: ii_pci20kc: use the comedi_device 'mmio' member Use the new 'mmio' member in the comedi_device for the __iomem * base address. Since this was the only member in the private data, remove the struct and its allocation. This legacy driver is a bit strange. The base address of the board is passed to the (*attach) using by the user using the comedi_config utiltiy. This base address is currently not ioremap'ed and is simply cast to a void __iomem *. I'm not sure if this is correct. Add a comment so it will be addressed later. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ii_pci20kc.c | 42 +++++++++++------------------ 1 file changed, 15 insertions(+), 27 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ii_pci20kc.c b/drivers/staging/comedi/drivers/ii_pci20kc.c index 2516ce834839..b1f44b31162b 100644 --- a/drivers/staging/comedi/drivers/ii_pci20kc.c +++ b/drivers/staging/comedi/drivers/ii_pci20kc.c @@ -135,16 +135,10 @@ struct ii20k_ao_private { unsigned int last_data[2]; }; -struct ii20k_private { - void __iomem *ioaddr; -}; - static void __iomem *ii20k_module_iobase(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ii20k_private *devpriv = dev->private; - - return devpriv->ioaddr + (s->index + 1) * II20K_MOD_OFFSET; + return dev->mmio + (s->index + 1) * II20K_MOD_OFFSET; } static int ii20k_ao_insn_read(struct comedi_device *dev, @@ -281,7 +275,6 @@ static int ii20k_ai_insn_read(struct comedi_device *dev, static void ii20k_dio_config(struct comedi_device *dev, struct comedi_subdevice *s) { - struct ii20k_private *devpriv = dev->private; unsigned char ctrl01 = 0; unsigned char ctrl23 = 0; unsigned char dir_ena = 0; @@ -338,9 +331,9 @@ static void ii20k_dio_config(struct comedi_device *dev, ctrl23 |= II20K_CTRL23_SET; /* order is important */ - writeb(ctrl01, devpriv->ioaddr + II20K_CTRL01_REG); - writeb(ctrl23, devpriv->ioaddr + II20K_CTRL23_REG); - writeb(dir_ena, devpriv->ioaddr + II20K_DIR_ENA_REG); + writeb(ctrl01, dev->mmio + II20K_CTRL01_REG); + writeb(ctrl23, dev->mmio + II20K_CTRL23_REG); + writeb(dir_ena, dev->mmio + II20K_DIR_ENA_REG); } static int ii20k_dio_insn_config(struct comedi_device *dev, @@ -375,29 +368,28 @@ static int ii20k_dio_insn_bits(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - struct ii20k_private *devpriv = dev->private; unsigned int mask; mask = comedi_dio_update_state(s, data); if (mask) { if (mask & 0x000000ff) writeb((s->state >> 0) & 0xff, - devpriv->ioaddr + II20K_DIO0_REG); + dev->mmio + II20K_DIO0_REG); if (mask & 0x0000ff00) writeb((s->state >> 8) & 0xff, - devpriv->ioaddr + II20K_DIO1_REG); + dev->mmio + II20K_DIO1_REG); if (mask & 0x00ff0000) writeb((s->state >> 16) & 0xff, - devpriv->ioaddr + II20K_DIO2_REG); + dev->mmio + II20K_DIO2_REG); if (mask & 0xff000000) writeb((s->state >> 24) & 0xff, - devpriv->ioaddr + II20K_DIO3_REG); + dev->mmio + II20K_DIO3_REG); } - data[1] = readb(devpriv->ioaddr + II20K_DIO0_REG); - data[1] |= readb(devpriv->ioaddr + II20K_DIO1_REG) << 8; - data[1] |= readb(devpriv->ioaddr + II20K_DIO2_REG) << 16; - data[1] |= readb(devpriv->ioaddr + II20K_DIO3_REG) << 24; + data[1] = readb(dev->mmio + II20K_DIO0_REG); + data[1] |= readb(dev->mmio + II20K_DIO1_REG) << 8; + data[1] |= readb(dev->mmio + II20K_DIO2_REG) << 16; + data[1] |= readb(dev->mmio + II20K_DIO3_REG) << 24; return insn->n; } @@ -446,19 +438,15 @@ static int ii20k_init_module(struct comedi_device *dev, static int ii20k_attach(struct comedi_device *dev, struct comedi_devconfig *it) { - struct ii20k_private *devpriv; struct comedi_subdevice *s; unsigned char id; bool has_dio; int ret; - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - - devpriv->ioaddr = (void __iomem *)(unsigned long)it->options[0]; + /* FIXME: this doesn't seem right, should 'mmio' be ioremap'ed? */ + dev->mmio = (void __iomem *)(unsigned long)it->options[0]; - id = readb(devpriv->ioaddr + II20K_ID_REG); + id = readb(dev->mmio + II20K_ID_REG); switch (id & II20K_ID_MASK) { case II20K_ID_PCI20001C_1A: has_dio = false; -- cgit From 0c3dfdc2d9a913c227a71f8cf728a70316c3abb4 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 29 Jul 2014 15:01:45 -0700 Subject: staging: comedi: amplc_dio200: use the comedi_device 'mmio' member The amplc_dio200_common module currently uses a union in the private data to determine if the hardware uses port or memory mapped I/O. Use the new 'mmio' member in the comedi_device for the ioremap'ed base address and remove all the union code. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/amplc_dio200.c | 3 +-- drivers/staging/comedi/drivers/amplc_dio200.h | 13 ---------- .../staging/comedi/drivers/amplc_dio200_common.c | 30 ++++++++++------------ drivers/staging/comedi/drivers/amplc_dio200_pci.c | 14 ++++------ 4 files changed, 20 insertions(+), 40 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c index dc1dee79fc16..17d2e20663cb 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200.c +++ b/drivers/staging/comedi/drivers/amplc_dio200.c @@ -278,8 +278,7 @@ static int dio200_attach(struct comedi_device *dev, struct comedi_devconfig *it) ret = comedi_request_region(dev, it->options[0], thisboard->mainsize); if (ret) return ret; - devpriv->io.u.iobase = dev->iobase; - devpriv->io.regtype = io_regtype; + return amplc_dio200_common_attach(dev, irq, 0); } diff --git a/drivers/staging/comedi/drivers/amplc_dio200.h b/drivers/staging/comedi/drivers/amplc_dio200.h index 43160b9944bb..e0afe2cee2d6 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200.h +++ b/drivers/staging/comedi/drivers/amplc_dio200.h @@ -27,18 +27,6 @@ #define DIO200_IO_SIZE 0x20 #define DIO200_PCIE_IO_SIZE 0x4000 -/* - * Register region. - */ -enum dio200_regtype { no_regtype = 0, io_regtype, mmio_regtype }; -struct dio200_region { - union { - unsigned long iobase; /* I/O base address */ - unsigned char __iomem *membase; /* mapped MMIO base address */ - } u; - enum dio200_regtype regtype; -}; - /* * Subdevice types. */ @@ -75,7 +63,6 @@ struct dio200_board { * Comedi device private data. */ struct dio200_private { - struct dio200_region io; /* Register region */ int intr_sd; }; diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 4cf9e9ed71d4..f0d709e0dafc 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -151,13 +151,12 @@ static unsigned char dio200_read8(struct comedi_device *dev, unsigned int offset) { const struct dio200_board *thisboard = comedi_board(dev); - struct dio200_private *devpriv = dev->private; offset <<= thisboard->mainshift; - if (devpriv->io.regtype == io_regtype) - return inb(devpriv->io.u.iobase + offset); - return readb(devpriv->io.u.membase + offset); + if (dev->mmio) + return readb(dev->mmio + offset); + return inb(dev->iobase + offset); } /* @@ -167,13 +166,13 @@ static void dio200_write8(struct comedi_device *dev, unsigned int offset, unsigned char val) { const struct dio200_board *thisboard = comedi_board(dev); - struct dio200_private *devpriv = dev->private; offset <<= thisboard->mainshift; - if (devpriv->io.regtype == io_regtype) - outb(val, devpriv->io.u.iobase + offset); + + if (dev->mmio) + writeb(val, dev->mmio + offset); else - writeb(val, devpriv->io.u.membase + offset); + outb(val, dev->iobase + offset); } /* @@ -183,13 +182,12 @@ static unsigned int dio200_read32(struct comedi_device *dev, unsigned int offset) { const struct dio200_board *thisboard = comedi_board(dev); - struct dio200_private *devpriv = dev->private; offset <<= thisboard->mainshift; - if (devpriv->io.regtype == io_regtype) - return inl(devpriv->io.u.iobase + offset); - return readl(devpriv->io.u.membase + offset); + if (dev->mmio) + return readl(dev->mmio + offset); + return inl(dev->iobase + offset); } /* @@ -199,13 +197,13 @@ static void dio200_write32(struct comedi_device *dev, unsigned int offset, unsigned int val) { const struct dio200_board *thisboard = comedi_board(dev); - struct dio200_private *devpriv = dev->private; offset <<= thisboard->mainshift; - if (devpriv->io.regtype == io_regtype) - outl(val, devpriv->io.u.iobase + offset); + + if (dev->mmio) + writel(val, dev->mmio + offset); else - writel(val, devpriv->io.u.membase + offset); + outl(val, dev->iobase + offset); } /* diff --git a/drivers/staging/comedi/drivers/amplc_dio200_pci.c b/drivers/staging/comedi/drivers/amplc_dio200_pci.c index 1954c1bd23db..fbf05687347f 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_pci.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_pci.c @@ -387,16 +387,14 @@ static int dio200_pci_auto_attach(struct comedi_device *dev, return -EINVAL; } if (pci_resource_flags(pci_dev, bar) & IORESOURCE_MEM) { - devpriv->io.u.membase = pci_ioremap_bar(pci_dev, bar); - if (!devpriv->io.u.membase) { + dev->mmio = pci_ioremap_bar(pci_dev, bar); + if (!dev->mmio) { dev_err(dev->class_dev, "error! cannot remap registers\n"); return -ENOMEM; } - devpriv->io.regtype = mmio_regtype; } else { - devpriv->io.u.iobase = pci_resource_start(pci_dev, bar); - devpriv->io.regtype = io_regtype; + dev->iobase = pci_resource_start(pci_dev, bar); } switch (context_model) { case pcie215_model: @@ -414,11 +412,9 @@ static int dio200_pci_auto_attach(struct comedi_device *dev, static void dio200_pci_detach(struct comedi_device *dev) { - struct dio200_private *devpriv = dev->private; - amplc_dio200_common_detach(dev); - if (devpriv && devpriv->io.regtype == mmio_regtype) - iounmap(devpriv->io.u.membase); + if (dev->mmio) + iounmap(dev->mmio); comedi_pci_disable(dev); } -- cgit From fb574144f0bf64a68e1657760a2875e13cd2e83e Mon Sep 17 00:00:00 2001 From: Jessica Yu Date: Mon, 28 Jul 2014 06:33:12 -0700 Subject: Staging: lustre: linux-module: fix pointer style issue Fix pointer code style (foo * bar -> foo *bar) Signed-off-by: Jessica Yu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/linux/linux-module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index ccadf6581cc4..b0c00a94105d 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -99,7 +99,7 @@ int libcfs_ioctl_popdata(void *arg, void *data, int size) extern struct cfs_psdev_ops libcfs_psdev_ops; static int -libcfs_psdev_open(struct inode * inode, struct file * file) +libcfs_psdev_open(struct inode *inode, struct file *file) { struct libcfs_device_userstate **pdu = NULL; int rc = 0; @@ -116,7 +116,7 @@ libcfs_psdev_open(struct inode * inode, struct file * file) /* called when closing /dev/device */ static int -libcfs_psdev_release(struct inode * inode, struct file * file) +libcfs_psdev_release(struct inode *inode, struct file *file) { struct libcfs_device_userstate *pdu; int rc = 0; -- cgit From 91a002c7522fdcbce686c202b59c4d462a25fd1a Mon Sep 17 00:00:00 2001 From: Jessica Yu Date: Mon, 28 Jul 2014 06:33:13 -0700 Subject: Staging: lustre: linux-module: remove unnecessary spaces Remove extraneous space after open paren and before close paren. Signed-off-by: Jessica Yu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/linux/linux-module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index b0c00a94105d..abd7e6f9d8aa 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -140,9 +140,9 @@ static long libcfs_ioctl(struct file *file, if (!capable(CAP_SYS_ADMIN)) return -EACCES; - if ( _IOC_TYPE(cmd) != IOC_LIBCFS_TYPE || + if (_IOC_TYPE(cmd) != IOC_LIBCFS_TYPE || _IOC_NR(cmd) < IOC_LIBCFS_MIN_NR || - _IOC_NR(cmd) > IOC_LIBCFS_MAX_NR ) { + _IOC_NR(cmd) > IOC_LIBCFS_MAX_NR) { CDEBUG(D_IOCTL, "invalid ioctl ( type %d, nr %d, size %d )\n", _IOC_TYPE(cmd), _IOC_NR(cmd), _IOC_SIZE(cmd)); return (-EINVAL); -- cgit From 18e2e99b8c786d1def543bd53063567d5cedd3d1 Mon Sep 17 00:00:00 2001 From: Jessica Yu Date: Mon, 28 Jul 2014 06:33:14 -0700 Subject: Staging: lustre: linux-module: remove extraneous parens Remove unnecessary parens from return statements, return is not a function Signed-off-by: Jessica Yu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/linux/linux-module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index abd7e6f9d8aa..745fe4cd784d 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -154,7 +154,7 @@ static long libcfs_ioctl(struct file *file, if (!capable(CFS_CAP_SYS_BOOT)) return (-EPERM); panic("debugctl-invoked panic"); - return (0); + return 0; case IOC_LIBCFS_MEMHOG: if (!capable(CFS_CAP_SYS_ADMIN)) return -EPERM; @@ -167,7 +167,7 @@ static long libcfs_ioctl(struct file *file, rc = libcfs_psdev_ops.p_ioctl(&pfile, cmd, (void *)arg); else rc = -EPERM; - return (rc); + return rc; } static struct file_operations libcfs_fops = { -- cgit From d81f9f5170058ecd46971cf46d5ad17116c9e5b1 Mon Sep 17 00:00:00 2001 From: Jessica Yu Date: Mon, 28 Jul 2014 06:33:15 -0700 Subject: Staging: lustre: linux-module: add const modifier to file_operations Add the const modifier to the file_operations struct, since it is normally const. Signed-off-by: Jessica Yu Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/libcfs/linux/linux-module.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index 745fe4cd784d..de3c199654a0 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -170,7 +170,7 @@ static long libcfs_ioctl(struct file *file, return rc; } -static struct file_operations libcfs_fops = { +static const struct file_operations libcfs_fops = { .unlocked_ioctl = libcfs_ioctl, .open = libcfs_psdev_open, .release = libcfs_psdev_release, -- cgit From ea7893bb397949c1c3c798ed5d643445f3fa5205 Mon Sep 17 00:00:00 2001 From: Radek Dostal Date: Sun, 27 Jul 2014 23:22:57 +0200 Subject: staging: lustre: fix sparse warnings "Using plain integer as NULL pointer" fixes all sparse warnings "Using plain integer as NULL pointer" in drivers/staging/lustre drivers/staging/lustre/lnet/lnet/api-ni.c:1665:32: warning: Using plain integer as NULL pointer drivers/staging/lustre/lnet/lnet/api-ni.c:1773:35: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/fld/fld_request.c:171:17: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/llite/llite_lib.c:155:30: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/llite/lproc_llite.c:846:11: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_obd.c:902:48: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_obd.c:946:54: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_obd.c:2819:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/lov/lov_dev.c:456:66: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/mdc_request.c:2426:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/mdc_request.c:2569:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/mdc_request.c:2740:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:175:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:176:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:177:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:178:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:179:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:180:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:181:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:182:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:183:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:185:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:186:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:193:66: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:194:63: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:195:56: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:196:51: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:197:50: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:198:48: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:199:57: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:200:11: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:206:48: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mdc/lproc_mdc.c:207:11: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/mgc/mgc_request.c:199:9: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdclass/linux/linux-module.c:331:11: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdclass/obd_config.c:1164:53: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdclass/obd_config.c:1306:71: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdclass/llog_test.c:943:62: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdclass/llog_test.c:944:65: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/obdecho/echo_client.c:3116:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/osc/osc_request.c:3424:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/osc/osc_request.c:3548:46: warning: Using plain integer as NULL pointer drivers/staging/lustre/lustre/osc/osc_request.c:3615:46: warning: Using plain integer as NULL pointer Signed-off-by: Radek Dostal Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lnet/lnet/api-ni.c | 4 +- drivers/staging/lustre/lustre/fld/fld_request.c | 2 +- drivers/staging/lustre/lustre/llite/llite_lib.c | 2 +- drivers/staging/lustre/lustre/llite/lproc_llite.c | 2 +- drivers/staging/lustre/lustre/lov/lov_dev.c | 2 +- drivers/staging/lustre/lustre/mdc/lproc_mdc.c | 44 +++++++++++----------- drivers/staging/lustre/lustre/mdc/mdc_request.c | 6 +-- drivers/staging/lustre/lustre/mgc/mgc_request.c | 2 +- .../lustre/lustre/obdclass/linux/linux-module.c | 2 +- drivers/staging/lustre/lustre/obdclass/llog_test.c | 4 +- .../staging/lustre/lustre/obdclass/obd_config.c | 6 +-- .../staging/lustre/lustre/obdecho/echo_client.c | 2 +- drivers/staging/lustre/lustre/osc/osc_request.c | 6 +-- 13 files changed, 42 insertions(+), 42 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index f4a2c65d3c48..b28734a76fac 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -1662,7 +1662,7 @@ lnet_destroy_ping_info(void) int lnet_ping_target_init(void) { - lnet_md_t md = {0}; + lnet_md_t md = { NULL }; lnet_handle_me_t meh; lnet_process_id_t id; int rc; @@ -1770,7 +1770,7 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i lnet_handle_eq_t eqh; lnet_handle_md_t mdh; lnet_event_t event; - lnet_md_t md = {0}; + lnet_md_t md = { NULL }; int which; int unlinked = 0; int replied = 0; diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 4efded9485f8..8e512f9c3db0 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -168,7 +168,7 @@ struct lu_fld_hash fld_hash[] = { .fh_scan_func = fld_rrb_scan }, { - 0, + NULL, } }; diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index e0d8f15fe4fd..0367f5a2cfe4 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -152,7 +152,7 @@ static void ll_free_sbi(struct super_block *sb) static int client_common_fill_super(struct super_block *sb, char *md, char *dt, struct vfsmount *mnt) { - struct inode *root = 0; + struct inode *root = NULL; struct ll_sb_info *sbi = ll_s2sbi(sb); struct obd_device *obd; struct obd_capa *oc = NULL; diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index 13586c55b570..77f68b507fea 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -843,7 +843,7 @@ static struct lprocfs_vars lprocfs_llite_obd_vars[] = { { "default_cookiesize", &ll_defult_cookiesize_fops, NULL, 0 }, { "sbi_flags", &ll_sbi_flags_fops, NULL, 0 }, { "xattr_cache", &ll_xattr_cache_fops, NULL, 0 }, - { 0 } + { NULL } }; #define MAX_STRING_SIZE 128 diff --git a/drivers/staging/lustre/lustre/lov/lov_dev.c b/drivers/staging/lustre/lustre/lov/lov_dev.c index e6d14135ffe6..796a015d070c 100644 --- a/drivers/staging/lustre/lustre/lov/lov_dev.c +++ b/drivers/staging/lustre/lustre/lov/lov_dev.c @@ -453,7 +453,7 @@ static int lov_process_config(const struct lu_env *env, case LCFG_LOV_ADD_INA: rc = lov_cl_add_target(env, d, index); if (rc != 0) - lov_del_target(d->ld_obd, index, 0, 0); + lov_del_target(d->ld_obd, index, NULL, 0); break; case LCFG_LOV_DEL_OBD: lov_cl_del_target(env, d, index); diff --git a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c index e6af825eabcb..d1d891b91663 100644 --- a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c +++ b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c @@ -172,39 +172,39 @@ LPROC_SEQ_FOPS_RW_TYPE(mdc, import); LPROC_SEQ_FOPS_RW_TYPE(mdc, pinger_recov); static struct lprocfs_vars lprocfs_mdc_obd_vars[] = { - { "uuid", &mdc_uuid_fops, 0, 0 }, - { "ping", &mdc_ping_fops, 0, 0222 }, - { "connect_flags", &mdc_connect_flags_fops, 0, 0 }, - { "blocksize", &mdc_blksize_fops, 0, 0 }, - { "kbytestotal", &mdc_kbytestotal_fops, 0, 0 }, - { "kbytesfree", &mdc_kbytesfree_fops, 0, 0 }, - { "kbytesavail", &mdc_kbytesavail_fops, 0, 0 }, - { "filestotal", &mdc_filestotal_fops, 0, 0 }, - { "filesfree", &mdc_filesfree_fops, 0, 0 }, - /*{ "filegroups", lprocfs_rd_filegroups, 0, 0 },*/ - { "mds_server_uuid", &mdc_server_uuid_fops, 0, 0 }, - { "mds_conn_uuid", &mdc_conn_uuid_fops, 0, 0 }, + { "uuid", &mdc_uuid_fops, NULL, 0 }, + { "ping", &mdc_ping_fops, NULL, 0222 }, + { "connect_flags", &mdc_connect_flags_fops, NULL, 0 }, + { "blocksize", &mdc_blksize_fops, NULL, 0 }, + { "kbytestotal", &mdc_kbytestotal_fops, NULL, 0 }, + { "kbytesfree", &mdc_kbytesfree_fops, NULL, 0 }, + { "kbytesavail", &mdc_kbytesavail_fops, NULL, 0 }, + { "filestotal", &mdc_filestotal_fops, NULL, 0 }, + { "filesfree", &mdc_filesfree_fops, NULL, 0 }, + /*{ "filegroups", lprocfs_rd_filegroups, NULL, 0 },*/ + { "mds_server_uuid", &mdc_server_uuid_fops, NULL, 0 }, + { "mds_conn_uuid", &mdc_conn_uuid_fops, NULL, 0 }, /* * FIXME: below proc entry is provided, but not in used, instead * sbi->sb_md_brw_size is used, the per obd variable should be used * when CMD is enabled, and dir pages are managed in MDC layer. * Remember to enable proc write function. */ - { "max_pages_per_rpc", &mdc_obd_max_pages_per_rpc_fops, 0, 0 }, - { "max_rpcs_in_flight", &mdc_max_rpcs_in_flight_fops, 0, 0 }, - { "timeouts", &mdc_timeouts_fops, 0, 0 }, - { "import", &mdc_import_fops, 0 }, - { "state", &mdc_state_fops, 0, 0 }, - { "hsm_nl", &mdc_kuc_fops, 0, 0200 }, - { "pinger_recov", &mdc_pinger_recov_fops, 0, 0 }, - { 0 } + { "max_pages_per_rpc", &mdc_obd_max_pages_per_rpc_fops, NULL, 0 }, + { "max_rpcs_in_flight", &mdc_max_rpcs_in_flight_fops, NULL, 0 }, + { "timeouts", &mdc_timeouts_fops, NULL, 0 }, + { "import", &mdc_import_fops, NULL, 0 }, + { "state", &mdc_state_fops, NULL, 0 }, + { "hsm_nl", &mdc_kuc_fops, NULL, 0200 }, + { "pinger_recov", &mdc_pinger_recov_fops, NULL, 0 }, + { NULL } }; LPROC_SEQ_FOPS_RO_TYPE(mdc, numrefs); static struct lprocfs_vars lprocfs_mdc_module_vars[] = { - { "num_refs", &mdc_numrefs_fops, 0, 0 }, - { 0 } + { "num_refs", &mdc_numrefs_fops, NULL, 0 }, + { NULL } }; void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars) diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index 185fe66c18a3..4a1cc4eb73d5 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -2423,7 +2423,7 @@ struct ldlm_valblock_ops inode_lvbo = { static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg) { struct client_obd *cli = &obd->u.cli; - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc; OBD_ALLOC(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock)); @@ -2566,7 +2566,7 @@ static int mdc_llog_finish(struct obd_device *obd, int count) static int mdc_process_config(struct obd_device *obd, obd_count len, void *buf) { struct lustre_cfg *lcfg = buf; - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc = 0; lprocfs_mdc_init_vars(&lvars); @@ -2737,7 +2737,7 @@ struct md_ops mdc_md_ops = { int __init mdc_init(void) { int rc; - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; lprocfs_mdc_init_vars(&lvars); rc = class_register_type(&mdc_obd_ops, &mdc_md_ops, lvars.module_vars, diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index 46a7d767e828..f520591d5784 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -197,7 +197,7 @@ struct config_llog_data *do_config_log_add(struct obd_device *obd, int rc; CDEBUG(D_MGC, "do adding config log %s:%p\n", logname, - cfg ? cfg->cfg_instance : 0); + cfg ? cfg->cfg_instance : NULL); OBD_ALLOC(cld, sizeof(*cld) + strlen(logname) + 1); if (!cld) diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c index 1de1c650cf22..9ce3d36c685d 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c @@ -328,7 +328,7 @@ struct lprocfs_vars lprocfs_base[] = { { "jobid_var", &obd_proc_jobid_var_fops }, { .name = "jobid_name", .fops = &obd_proc_jobid_name_fops}, - { 0 } + { NULL } }; static void *obd_device_list_seq_start(struct seq_file *p, loff_t *pos) diff --git a/drivers/staging/lustre/lustre/obdclass/llog_test.c b/drivers/staging/lustre/lustre/obdclass/llog_test.c index 6791d0263b11..ef008abd331c 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_test.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_test.c @@ -940,8 +940,8 @@ cleanup_ctxt: } #if defined (CONFIG_PROC_FS) -static struct lprocfs_vars lprocfs_llog_test_obd_vars[] = { {0} }; -static struct lprocfs_vars lprocfs_llog_test_module_vars[] = { {0} }; +static struct lprocfs_vars lprocfs_llog_test_obd_vars[] = { { NULL } }; +static struct lprocfs_vars lprocfs_llog_test_module_vars[] = { { NULL } }; static void lprocfs_llog_test_init_vars(struct lprocfs_static_vars *lvars) { lvars->module_vars = lprocfs_llog_test_module_vars; diff --git a/drivers/staging/lustre/lustre/obdclass/obd_config.c b/drivers/staging/lustre/lustre/obdclass/obd_config.c index 3acb1a86cfc7..0d81d3232f31 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_config.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_config.c @@ -1161,7 +1161,7 @@ int class_process_config(struct lustre_cfg *lcfg) char *tmp; /* llite has no obd */ if ((class_match_param(lustre_cfg_string(lcfg, 1), - PARAM_LLITE, 0) == 0) && + PARAM_LLITE, NULL) == 0) && client_process_config) { err = (*client_process_config)(lcfg); GOTO(out, err); @@ -1303,8 +1303,8 @@ int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars, /* Search proc entries */ while (lvars[j].name) { var = &lvars[j]; - if (class_match_param(key, (char *)var->name, 0) == 0 && - keylen == strlen(var->name)) { + if (class_match_param(key, (char *)var->name, NULL) == 0 + && keylen == strlen(var->name)) { matched++; rc = -EROFS; if (var->fops && var->fops->write) { diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index b3428d972545..f1847f3f579d 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -3113,7 +3113,7 @@ static struct obd_ops echo_client_obd_ops = { int echo_client_init(void) { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc; lprocfs_echo_init_vars(&lvars); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 5028e77bf8bf..fb0d9fb9cebc 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -3421,7 +3421,7 @@ static int brw_queue_work(const struct lu_env *env, void *data) int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; struct client_obd *cli = &obd->u.cli; void *handler; int rc; @@ -3545,7 +3545,7 @@ int osc_cleanup(struct obd_device *obd) int osc_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg) { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc = 0; lprocfs_osc_init_vars(&lvars); @@ -3612,7 +3612,7 @@ extern struct lock_class_key osc_ast_guard_class; int __init osc_init(void) { - struct lprocfs_static_vars lvars = { 0 }; + struct lprocfs_static_vars lvars = { NULL }; int rc; /* print an address of _any_ initialized kernel symbol from this -- cgit From 89a07bd83a3c39ad12a2e1e3a052b0bcd2042ad4 Mon Sep 17 00:00:00 2001 From: Santiago Torres Date: Sun, 27 Jul 2014 17:02:47 -0400 Subject: staging:rtl8712:mlme_linux.c: Adds blank lines to pass checkpatch.pl Added three newlines after variable declarations to pass checkpatch.pl. Signed-off by: Santiago Torres-Arias Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8712/mlme_linux.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8712/mlme_linux.c b/drivers/staging/rtl8712/mlme_linux.c index 377efb88676f..354bd03e700f 100644 --- a/drivers/staging/rtl8712/mlme_linux.c +++ b/drivers/staging/rtl8712/mlme_linux.c @@ -44,18 +44,21 @@ static void sitesurvey_ctrl_handler(void *FunctionContext) static void join_timeout_handler (void *FunctionContext) { struct _adapter *adapter = (struct _adapter *)FunctionContext; + _r8712_join_timeout_handler(adapter); } static void _scan_timeout_handler (void *FunctionContext) { struct _adapter *adapter = (struct _adapter *)FunctionContext; + r8712_scan_timeout_handler(adapter); } static void dhcp_timeout_handler (void *FunctionContext) { struct _adapter *adapter = (struct _adapter *)FunctionContext; + _r8712_dhcp_timeout_handler(adapter); } -- cgit From 795d644c0a91089182a3fede73bd88404819e61b Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 21:43:27 +0100 Subject: staging: vt6655: remove undefined TASK_LET code Removing all code within and function MngWorkItem. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device.h | 1 - drivers/staging/vt6655/device_main.c | 6 ------ drivers/staging/vt6655/dpc.c | 24 ------------------------ drivers/staging/vt6655/dpc.h | 2 -- 4 files changed, 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index a707984e4516..fccb510fb3f7 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -425,7 +425,6 @@ typedef struct __device_info { spinlock_t lock; //PLICE_DEBUG-> - struct tasklet_struct RxMngWorkItem; RxManagementQueue rxManeQueue; //PLICE_DEBUG<- //PLICE_DEBUG -> diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 1e1d3b451653..c43fc79eb4c6 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -1704,9 +1704,6 @@ static int device_open(struct net_device *dev) vMgrTimerInit(pDevice); //PLICE_DEBUG-> -#ifdef TASK_LET - tasklet_init(&pDevice->RxMngWorkItem, (void *)MngWorkItem, (unsigned long)pDevice); -#endif #ifdef THREAD InitRxManagementQueue(pDevice); mlme_kill = 0; @@ -1789,9 +1786,6 @@ static int device_close(struct net_device *dev) del_timer(&pDevice->TimerSQ3Tmax3); } -#ifdef TASK_LET - tasklet_kill(&pDevice->RxMngWorkItem); -#endif netif_stop_queue(dev); pDevice->bCmdRunning = false; MACbShutdown(pDevice->PortOffset); diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index ac588cb8fb22..31bb2b760498 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -268,23 +268,6 @@ s_vGetDASA(unsigned char *pbyRxBufferAddr, unsigned int *pcbHeaderSize, *pcbHeaderSize = cbHeaderSize; } -//PLICE_DEBUG -> - -void MngWorkItem(void *Context) -{ - PSRxMgmtPacket pRxMgmtPacket; - PSDevice pDevice = (PSDevice) Context; - - spin_lock_irq(&pDevice->lock); - while (pDevice->rxManeQueue.packet_num != 0) { - pRxMgmtPacket = DeQueue(pDevice); - vMgrRxManagePacket(pDevice, pDevice->pMgmt, pRxMgmtPacket); - } - spin_unlock_irq(&pDevice->lock); -} - -//PLICE_DEBUG<- - bool device_receive_frame( PSDevice pDevice, @@ -551,15 +534,8 @@ device_receive_frame( #ifdef THREAD EnQueue(pDevice, pRxPacket); #else - -#ifdef TASK_LET - EnQueue(pDevice, pRxPacket); - tasklet_schedule(&pDevice->RxMngWorkItem); -#else vMgrRxManagePacket((void *)pDevice, pDevice->pMgmt, pRxPacket); #endif - -#endif //PLICE_DEBUG<- // hostap Deamon handle 802.11 management if (pDevice->bEnableHostapd) { diff --git a/drivers/staging/vt6655/dpc.h b/drivers/staging/vt6655/dpc.h index 0c7e0e796ce3..4914890115e4 100644 --- a/drivers/staging/vt6655/dpc.h +++ b/drivers/staging/vt6655/dpc.h @@ -39,6 +39,4 @@ device_receive_frame( PSRxDesc pCurrRD ); -void MngWorkItem(void *Context); - #endif // __RXTX_H__ -- cgit From 9a802f2edc5bfc3d19ccb094182e60fdd36ee6ec Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 21:43:28 +0100 Subject: staging: vt6655: deadcode remove undefined macro THREAD code. Removing _RxManagementQueue, InitRxManagementQueue, MlmeThread, mlme_kill, EnQueue and DeQueue. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device.h | 49 +------------------------------- drivers/staging/vt6655/device_main.c | 55 ------------------------------------ drivers/staging/vt6655/dpc.c | 7 +---- 3 files changed, 2 insertions(+), 109 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index fccb510fb3f7..b36c63197f28 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -328,16 +328,6 @@ typedef struct tagSDeFragControlBlock { //for device_set_media_duplex #define DEVICE_LINK_CHANGE 0x00000001UL -//PLICE_DEBUG-> - -typedef struct _RxManagementQueue { - int packet_num; - int head, tail; - PSRxMgmtPacket Q[NUM]; -} RxManagementQueue, *PSRxManagementQueue; - -//PLICE_DEBUG<- - typedef struct __device_opt { int nRxDescs0; //Number of RX descriptors0 int nRxDescs1; //Number of RX descriptors1 @@ -424,9 +414,7 @@ typedef struct __device_info { unsigned char byRxMode; spinlock_t lock; -//PLICE_DEBUG-> - RxManagementQueue rxManeQueue; -//PLICE_DEBUG<- + //PLICE_DEBUG -> pid_t MLMEThr_pid; struct completion notify; @@ -764,41 +752,6 @@ typedef struct __device_info { bool bCommit; } DEVICE_INFO, *PSDevice; -//PLICE_DEBUG-> - -inline static void EnQueue(PSDevice pDevice, PSRxMgmtPacket pRxMgmtPacket) -{ - if ((pDevice->rxManeQueue.tail+1) % NUM == pDevice->rxManeQueue.head) { - return; - } else { - pDevice->rxManeQueue.tail = (pDevice->rxManeQueue.tail + 1) % NUM; - pDevice->rxManeQueue.Q[pDevice->rxManeQueue.tail] = pRxMgmtPacket; - pDevice->rxManeQueue.packet_num++; - } -} - -static inline PSRxMgmtPacket DeQueue(PSDevice pDevice) -{ - PSRxMgmtPacket pRxMgmtPacket; - - if (pDevice->rxManeQueue.tail == pDevice->rxManeQueue.head) { - printk("Queue is Empty\n"); - return NULL; - } else { - int x; - //x=pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM; - pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM; - x = pDevice->rxManeQueue.head; - pRxMgmtPacket = pDevice->rxManeQueue.Q[x]; - pDevice->rxManeQueue.packet_num--; - return pRxMgmtPacket; - } -} - -void InitRxManagementQueue(PSDevice pDevice); - -//PLICE_DEBUG<- - static inline bool device_get_ip(PSDevice pInfo) { struct in_device *in_dev = (struct in_device *)pInfo->dev->ip_ptr; struct in_ifaddr *ifa; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index c43fc79eb4c6..fe6de98856ae 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -98,10 +98,6 @@ MODULE_AUTHOR("VIA Networking Technologies, Inc., "); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("VIA Networking Solomon-A/B/G Wireless LAN Adapter Driver"); -#ifdef THREAD -static int mlme_kill; -#endif - #define DEVICE_PARAM(N, D) #define RX_DESC_MIN0 16 @@ -1630,41 +1626,6 @@ static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc) pTDInfo->byFlags = 0; } -//PLICE_DEBUG -> -void InitRxManagementQueue(PSDevice pDevice) -{ - pDevice->rxManeQueue.packet_num = 0; - pDevice->rxManeQueue.head = pDevice->rxManeQueue.tail = 0; -} -//PLICE_DEBUG<- - -//PLICE_DEBUG -> -#ifdef THREAD -static int MlmeThread( - void *Context) -{ - PSDevice pDevice = (PSDevice) Context; - PSRxMgmtPacket pRxMgmtPacket; - - while (1) { - spin_lock_irq(&pDevice->lock); - while (pDevice->rxManeQueue.packet_num != 0) { - pRxMgmtPacket = DeQueue(pDevice); - vMgrRxManagePacket(pDevice, pDevice->pMgmt, pRxMgmtPacket); - } - spin_unlock_irq(&pDevice->lock); - if (mlme_kill == 0) - break; - - schedule(); - if (mlme_kill == 0) - break; - } - - return 0; -} -#endif - static int device_open(struct net_device *dev) { PSDevice pDevice = (PSDevice)netdev_priv(dev); @@ -1703,19 +1664,6 @@ static int device_open(struct net_device *dev) vMgrObjectInit(pDevice); vMgrTimerInit(pDevice); -//PLICE_DEBUG-> -#ifdef THREAD - InitRxManagementQueue(pDevice); - mlme_kill = 0; - mlme_task = kthread_run(MlmeThread, (void *)pDevice, "MLME"); - if (IS_ERR(mlme_task)) { - pr_err("thread create fail\n"); - return -1; - } - - mlme_kill = 1; -#endif - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "call device_init_registers\n"); device_init_registers(pDevice, DEVICE_INIT_COLD); MACvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); @@ -1766,9 +1714,6 @@ static int device_close(struct net_device *dev) PSDevice pDevice = (PSDevice)netdev_priv(dev); PSMgmtObject pMgmt = pDevice->pMgmt; //PLICE_DEBUG-> -#ifdef THREAD - mlme_kill = 0; -#endif //PLICE_DEBUG<- //2007-1121-02by EinsnLiu if (pDevice->bLinkPass) { diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 31bb2b760498..0bcf6c7472fe 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -529,14 +529,9 @@ device_receive_frame( } pRxPacket->byRxRate = s_byGetRateIdx(*pbyRxRate); pRxPacket->byRxChannel = (*pbyRxSts) >> 2; -//PLICE_DEBUG-> -#ifdef THREAD - EnQueue(pDevice, pRxPacket); -#else vMgrRxManagePacket((void *)pDevice, pDevice->pMgmt, pRxPacket); -#endif -//PLICE_DEBUG<- + // hostap Deamon handle 802.11 management if (pDevice->bEnableHostapd) { skb->dev = pDevice->apdev; -- cgit From 33c1576ea1feb1817600aad4299537e92b90ebb5 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 21:43:29 +0100 Subject: staging: vt6655: dead code remove undefined macro FOR_LED_ON_NOTEBOOK code. Removing all variables associated with the code. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/bssdb.c | 53 ------------------------------------ drivers/staging/vt6655/device_main.c | 15 ---------- 2 files changed, 68 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index 58f85e8febb9..6367684bd218 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -901,11 +901,6 @@ BSSvAddMulticastNode( * none. * -*/ -/* 2008-4-14 by chester for led issue */ -#ifdef FOR_LED_ON_NOTEBOOK -bool cc = false; -unsigned int status; -#endif void BSSvSecondCallBack( void *hDeviceContext @@ -926,54 +921,6 @@ BSSvSecondCallBack( pDevice->byERPFlag &= ~(WLAN_SET_ERP_BARKER_MODE(1) | WLAN_SET_ERP_NONERP_PRESENT(1)); - /* 2008-4-14 by chester for led issue */ -#ifdef FOR_LED_ON_NOTEBOOK - MACvGPIOIn(pDevice->PortOffset, &pDevice->byGPIO); - if (((!(pDevice->byGPIO & GPIO0_DATA) && (!pDevice->bHWRadioOff)) || - ((pDevice->byGPIO & GPIO0_DATA) && pDevice->bHWRadioOff)) && - (!cc)) { - cc = true; - } else if (cc) { - if (pDevice->bHWRadioOff) { - if (!(pDevice->byGPIO & GPIO0_DATA)) { - if (status == 1) - goto start; - status = 1; - CARDbRadioPowerOff(pDevice); - pMgmt->sNodeDBTable[0].bActive = false; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - pMgmt->eCurrState = WMAC_STATE_IDLE; - pDevice->bLinkPass = false; - - } - if (pDevice->byGPIO & GPIO0_DATA) { - if (status == 2) - goto start; - status = 2; - CARDbRadioPowerOn(pDevice); - } - } else { - if (pDevice->byGPIO & GPIO0_DATA) { - if (status == 3) - goto start; - status = 3; - CARDbRadioPowerOff(pDevice); - pMgmt->sNodeDBTable[0].bActive = false; - pMgmt->eCurrMode = WMAC_MODE_STANDBY; - pMgmt->eCurrState = WMAC_STATE_IDLE; - pDevice->bLinkPass = false; - - } - if (!(pDevice->byGPIO & GPIO0_DATA)) { - if (status == 4) - goto start; - status = 4; - CARDbRadioPowerOn(pDevice); - } - } - } -start: -#endif if (pDevice->wUseProtectCntDown > 0) { pDevice->wUseProtectCntDown--; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index fe6de98856ae..e8584fd565c5 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -691,19 +691,6 @@ static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) // Get GPIO MACvGPIOIn(pDevice->PortOffset, &pDevice->byGPIO); //2008-4-14 by chester for led issue -#ifdef FOR_LED_ON_NOTEBOOK - if (pDevice->byGPIO & GPIO0_DATA) - pDevice->bHWRadioOff = true; - - if (!(pDevice->byGPIO & GPIO0_DATA)) - pDevice->bHWRadioOff = false; - } - - if (pDevice->bRadioControlOff) - CARDbRadioPowerOff(pDevice); - else - CARDbRadioPowerOn(pDevice); -#else if (((pDevice->byGPIO & GPIO0_DATA) && !(pDevice->byRadioCtl & EEP_RADIOCTL_INV)) || (!(pDevice->byGPIO & GPIO0_DATA) && (pDevice->byRadioCtl & EEP_RADIOCTL_INV))) { pDevice->bHWRadioOff = true; @@ -711,8 +698,6 @@ static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) } if (pDevice->bHWRadioOff || pDevice->bRadioControlOff) CARDbRadioPowerOff(pDevice); - -#endif } pMgmt->eScanType = WMAC_SCAN_PASSIVE; // get Permanent network address -- cgit From fbf515b81569585c8f404bc12fbcc59e44fdcd85 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 21:43:30 +0100 Subject: staging: vt6655: dead code remove undefined macro IO_MAP This device is always memory mapped Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 10 +--------- drivers/staging/vt6655/upc.h | 34 ---------------------------------- 2 files changed, 1 insertion(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index e8584fd565c5..926c0d99f549 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -902,10 +902,6 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) VNSvInPortB(pDevice->PortOffset+0x4F, &value); pr_debug("After write: value is %x\n", value); #endif - -#ifdef IO_MAP - pDevice->PortOffset = pDevice->ioaddr; -#endif // do reset if (!MACbSoftwareReset(pDevice->PortOffset)) { pr_err(DEVICE_NAME ": Failed to access MAC hardware..\n"); @@ -949,14 +945,10 @@ static void device_print_info(PSDevice pDevice) DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "%s: %s\n", dev->name, get_chip_name(pDevice->chip_id)); DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "%s: MAC=%pM", dev->name, dev->dev_addr); -#ifdef IO_MAP - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IO=0x%lx ", (unsigned long)pDevice->ioaddr); - DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d\n", pDevice->dev->irq); -#else + DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IO=0x%lx Mem=0x%lx ", (unsigned long)pDevice->ioaddr, (unsigned long)pDevice->PortOffset); DBG_PRT(MSG_LEVEL_INFO, KERN_INFO " IRQ=%d\n", pDevice->dev->irq); -#endif } static void vt6655_init_info(struct pci_dev *pcid, PSDevice *ppDevice, diff --git a/drivers/staging/vt6655/upc.h b/drivers/staging/vt6655/upc.h index af12a86cd086..e262f1b00e66 100644 --- a/drivers/staging/vt6655/upc.h +++ b/drivers/staging/vt6655/upc.h @@ -34,38 +34,6 @@ /*--------------------- Export Definitions -------------------------*/ -// -// For IO mapped -// - -#ifdef IO_MAP - -#define VNSvInPortB(dwIOAddress, pbyData) \ -do { \ - *(pbyData) = inb(dwIOAddress); \ -} while (0) - -#define VNSvInPortW(dwIOAddress, pwData) \ -do { \ - *(pwData) = inw(dwIOAddress); \ -} while (0) - -#define VNSvInPortD(dwIOAddress, pdwData) \ -do { \ - *(pdwData) = inl(dwIOAddress); \ -} while (0) - -#define VNSvOutPortB(dwIOAddress, byData) \ - outb(byData, dwIOAddress) - -#define VNSvOutPortW(dwIOAddress, wData) \ - outw(wData, dwIOAddress) - -#define VNSvOutPortD(dwIOAddress, dwData) \ - outl(dwData, dwIOAddress) - -#else - // // For memory mapped IO // @@ -100,8 +68,6 @@ do { \ writel((unsigned long)dwData, dwIOAddress); \ } while (0) -#endif - // // ALWAYS IO-Mapped IO when in 16-bit/32-bit environment // -- cgit From 9f34de35d57c75b769c8ee48ab88ef8bdb7d1bd4 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 23:26:25 +0100 Subject: staging: vt6655: remove typedef enum __device_init_type The value is either DEVICE_INIT_COLD or DEVICE_INIT_DXPL making no difference to code. Remove typedef and remove if statement in device_init_registers pulling the code in. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device.h | 6 - drivers/staging/vt6655/device_main.c | 412 +++++++++++++++++++---------------- 2 files changed, 225 insertions(+), 193 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index b36c63197f28..9bf0ea9af66e 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -185,12 +185,6 @@ typedef enum __device_msg_level { MSG_LEVEL_DEBUG = 4 //Only for debug purpose. } DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL; -typedef enum __device_init_type { - DEVICE_INIT_COLD = 0, // cold init - DEVICE_INIT_RESET, // reset init or Dx to D0 power remain init - DEVICE_INIT_DXPL // Dx to D0 power lost init -} DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE; - //++ NDIS related #define MAX_BSSIDINFO_4_PMKID 16 diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 926c0d99f549..0ecc99bf8ab4 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -304,7 +304,7 @@ static int ethtool_ioctl(struct net_device *dev, void __user *useraddr); static int device_rx_srv(PSDevice pDevice, unsigned int uIdx); static int device_tx_srv(PSDevice pDevice, unsigned int uIdx); static bool device_alloc_rx_buf(PSDevice pDevice, PSRxDesc pDesc); -static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType); +static void device_init_registers(PSDevice pDevice); static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc); static void device_free_td0_ring(PSDevice pDevice); static void device_free_td1_ring(PSDevice pDevice); @@ -453,7 +453,7 @@ static void s_vCompleteCurrentMeasure(PSDevice pDevice, unsigned char byResult) // Initialisation of MAC & BBP registers // -static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) +static void device_init_registers(PSDevice pDevice) { unsigned int ii; unsigned char byValue; @@ -466,239 +466,276 @@ static void device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) MACbShutdown(pDevice->PortOffset); BBvSoftwareReset(pDevice->PortOffset); - if ((InitType == DEVICE_INIT_COLD) || - (InitType == DEVICE_INIT_DXPL)) { - // Do MACbSoftwareReset in MACvInitialize - MACbSoftwareReset(pDevice->PortOffset); - // force CCK - pDevice->bCCK = true; - pDevice->bAES = false; - pDevice->bProtectMode = false; //Only used in 11g type, sync with ERP IE - pDevice->bNonERPPresent = false; - pDevice->bBarkerPreambleMd = false; - pDevice->wCurrentRate = RATE_1M; - pDevice->byTopOFDMBasicRate = RATE_24M; - pDevice->byTopCCKBasicRate = RATE_1M; + /* Do MACbSoftwareReset in MACvInitialize */ + MACbSoftwareReset(pDevice->PortOffset); - pDevice->byRevId = 0; //Target to IF pin while programming to RF chip. + /* force CCK */ + pDevice->bCCK = true; + pDevice->bAES = false; - // init MAC - MACvInitialize(pDevice->PortOffset); + /* Only used in 11g type, sync with ERP IE */ + pDevice->bProtectMode = false; - // Get Local ID - VNSvInPortB(pDevice->PortOffset + MAC_REG_LOCALID, &(pDevice->byLocalID)); + pDevice->bNonERPPresent = false; + pDevice->bBarkerPreambleMd = false; + pDevice->wCurrentRate = RATE_1M; + pDevice->byTopOFDMBasicRate = RATE_24M; + pDevice->byTopCCKBasicRate = RATE_1M; - spin_lock_irq(&pDevice->lock); - SROMvReadAllContents(pDevice->PortOffset, pDevice->abyEEPROM); + /* Target to IF pin while programming to RF chip. */ + pDevice->byRevId = 0; - spin_unlock_irq(&pDevice->lock); + /* init MAC */ + MACvInitialize(pDevice->PortOffset); + + /* Get Local ID */ + VNSvInPortB(pDevice->PortOffset + MAC_REG_LOCALID, &pDevice->byLocalID); + + spin_lock_irq(&pDevice->lock); - // Get Channel range + SROMvReadAllContents(pDevice->PortOffset, pDevice->abyEEPROM); - pDevice->byMinChannel = 1; - pDevice->byMaxChannel = CB_MAX_CHANNEL; + spin_unlock_irq(&pDevice->lock); + + /* Get Channel range */ + pDevice->byMinChannel = 1; + pDevice->byMaxChannel = CB_MAX_CHANNEL; - // Get Antena - byValue = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ANTENNA); - if (byValue & EEP_ANTINV) - pDevice->bTxRxAntInv = true; + /* Get Antena */ + byValue = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ANTENNA); + if (byValue & EEP_ANTINV) + pDevice->bTxRxAntInv = true; + else + pDevice->bTxRxAntInv = false; + + byValue &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); + /* if not set default is All */ + if (byValue == 0) + byValue = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); + + pDevice->ulDiversityNValue = 100*260; + pDevice->ulDiversityMValue = 100*16; + pDevice->byTMax = 1; + pDevice->byTMax2 = 4; + pDevice->ulSQ3TH = 0; + pDevice->byTMax3 = 64; + + if (byValue == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { + pDevice->byAntennaCount = 2; + pDevice->byTxAntennaMode = ANT_B; + pDevice->dwTxAntennaSel = 1; + pDevice->dwRxAntennaSel = 1; + + if (pDevice->bTxRxAntInv) + pDevice->byRxAntennaMode = ANT_A; else - pDevice->bTxRxAntInv = false; + pDevice->byRxAntennaMode = ANT_B; + + byValue1 = SROMbyReadEmbedded(pDevice->PortOffset, + EEP_OFS_ANTENNA); - byValue &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); - if (byValue == 0) // if not set default is All - byValue = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); + if ((byValue1 & 0x08) == 0) + pDevice->bDiversityEnable = false; + else + pDevice->bDiversityEnable = true; + } else { + pDevice->bDiversityEnable = false; + pDevice->byAntennaCount = 1; + pDevice->dwTxAntennaSel = 0; + pDevice->dwRxAntennaSel = 0; - pDevice->ulDiversityNValue = 100*260; - pDevice->ulDiversityMValue = 100*16; - pDevice->byTMax = 1; - pDevice->byTMax2 = 4; - pDevice->ulSQ3TH = 0; - pDevice->byTMax3 = 64; + if (byValue & EEP_ANTENNA_AUX) { + pDevice->byTxAntennaMode = ANT_A; - if (byValue == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { - pDevice->byAntennaCount = 2; + if (pDevice->bTxRxAntInv) + pDevice->byRxAntennaMode = ANT_B; + else + pDevice->byRxAntennaMode = ANT_A; + } else { pDevice->byTxAntennaMode = ANT_B; - pDevice->dwTxAntennaSel = 1; - pDevice->dwRxAntennaSel = 1; + if (pDevice->bTxRxAntInv) pDevice->byRxAntennaMode = ANT_A; else pDevice->byRxAntennaMode = ANT_B; - // chester for antenna - byValue1 = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ANTENNA); - if ((byValue1 & 0x08) == 0) - pDevice->bDiversityEnable = false; - else - pDevice->bDiversityEnable = true; - } else { - pDevice->bDiversityEnable = false; - pDevice->byAntennaCount = 1; - pDevice->dwTxAntennaSel = 0; - pDevice->dwRxAntennaSel = 0; - if (byValue & EEP_ANTENNA_AUX) { - pDevice->byTxAntennaMode = ANT_A; - if (pDevice->bTxRxAntInv) - pDevice->byRxAntennaMode = ANT_B; - else - pDevice->byRxAntennaMode = ANT_A; - } else { - pDevice->byTxAntennaMode = ANT_B; - if (pDevice->bTxRxAntInv) - pDevice->byRxAntennaMode = ANT_A; - else - pDevice->byRxAntennaMode = ANT_B; - } } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "bDiversityEnable=[%d],NValue=[%d],MValue=[%d],TMax=[%d],TMax2=[%d]\n", - pDevice->bDiversityEnable, (int)pDevice->ulDiversityNValue, (int)pDevice->ulDiversityMValue, pDevice->byTMax, pDevice->byTMax2); - -//2008-8-4 by chester -//zonetype initial - pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE]; - 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; - pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Init Zone Type :USA\n"); - } else if ((zonetype == 1) && - (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] != 0x01)) { //for Japan - pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01; - pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; - } else if ((zonetype == 2) && - (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] != 0x02)) { //for Europe - pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02; - pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Init Zone Type :Europe\n"); - } + } - else { - if (zonetype != pDevice->abyEEPROM[EEP_OFS_ZONETYPE]) - pr_debug("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n", zonetype, pDevice->abyEEPROM[EEP_OFS_ZONETYPE]); - else - pr_debug("Read Zonetype file success,use default zonetype setting[%02x]\n", zonetype); - } - } else - pr_debug("Read Zonetype file fail,use default zonetype setting[%02x]\n", SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ZONETYPE)); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "bDiversityEnable=[%d],NValue=[%d],MValue=[%d],TMax=[%d],TMax2=[%d]\n", + pDevice->bDiversityEnable, (int)pDevice->ulDiversityNValue, + (int)pDevice->ulDiversityMValue, pDevice->byTMax, pDevice->byTMax2); + + /* zonetype initial */ + pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE]; + zonetype = Config_FileOperation(pDevice, false, NULL); + + if (zonetype >= 0) { + if ((zonetype == 0) && + (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] != 0x00)) { + /* for USA */ + pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0; + pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B; + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Init Zone Type :USA\n"); + } else if ((zonetype == 1) && + (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] != 0x01)) { + /* for Japan */ + pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01; + pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; + } else if ((zonetype == 2) && + (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] != 0x02)) { + /* for Europe */ + pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02; + pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D; + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Init Zone Type :Europe\n"); + } else { + if (zonetype != pDevice->abyEEPROM[EEP_OFS_ZONETYPE]) + pr_debug("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n", + zonetype, + pDevice->abyEEPROM[EEP_OFS_ZONETYPE]); + else + pr_debug("Read Zonetype file success,use default zonetype setting[%02x]\n", + zonetype); + } + } else { + pr_debug("Read Zonetype file fail,use default zonetype setting[%02x]\n", + SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ZONETYPE)); + } - // Get RFType - pDevice->byRFType = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_RFTYPE); + /* Get RFType */ + pDevice->byRFType = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_RFTYPE); - if ((pDevice->byRFType & RF_EMU) != 0) { - // force change RevID for VT3253 emu + /* force change RevID for VT3253 emu */ + if ((pDevice->byRFType & RF_EMU) != 0) pDevice->byRevId = 0x80; - } - pDevice->byRFType &= RF_MASK; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRFType = %x\n", pDevice->byRFType); + pDevice->byRFType &= RF_MASK; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRFType = %x\n", pDevice->byRFType); - if (!pDevice->bZoneRegExist) - pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE]; + if (!pDevice->bZoneRegExist) + pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE]; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byZoneType = %x\n", pDevice->byZoneType); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byZoneType = %x\n", pDevice->byZoneType); - //Init RF module - RFbInit(pDevice); + /* Init RF module */ + RFbInit(pDevice); - //Get Desire Power Value - pDevice->byCurPwr = 0xFF; - pDevice->byCCKPwr = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_PWR_CCK); - pDevice->byOFDMPwrG = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_PWR_OFDMG); + /* Get Desire Power Value */ + pDevice->byCurPwr = 0xFF; + pDevice->byCCKPwr = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_PWR_CCK); + pDevice->byOFDMPwrG = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_PWR_OFDMG); - // Load power Table + /* Load power Table */ + for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { + pDevice->abyCCKPwrTbl[ii + 1] = + SROMbyReadEmbedded(pDevice->PortOffset, + (unsigned char)(ii + EEP_OFS_CCK_PWR_TBL)); + if (pDevice->abyCCKPwrTbl[ii + 1] == 0) + pDevice->abyCCKPwrTbl[ii+1] = pDevice->byCCKPwr; - for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) { - pDevice->abyCCKPwrTbl[ii + 1] = SROMbyReadEmbedded(pDevice->PortOffset, (unsigned char)(ii + EEP_OFS_CCK_PWR_TBL)); - if (pDevice->abyCCKPwrTbl[ii + 1] == 0) - pDevice->abyCCKPwrTbl[ii+1] = pDevice->byCCKPwr; + pDevice->abyOFDMPwrTbl[ii + 1] = + SROMbyReadEmbedded(pDevice->PortOffset, + (unsigned char)(ii + EEP_OFS_OFDM_PWR_TBL)); + if (pDevice->abyOFDMPwrTbl[ii + 1] == 0) + pDevice->abyOFDMPwrTbl[ii + 1] = pDevice->byOFDMPwrG; - pDevice->abyOFDMPwrTbl[ii + 1] = SROMbyReadEmbedded(pDevice->PortOffset, (unsigned char)(ii + EEP_OFS_OFDM_PWR_TBL)); - if (pDevice->abyOFDMPwrTbl[ii + 1] == 0) - pDevice->abyOFDMPwrTbl[ii + 1] = pDevice->byOFDMPwrG; + pDevice->abyCCKDefaultPwr[ii + 1] = byCCKPwrdBm; + pDevice->abyOFDMDefaultPwr[ii + 1] = byOFDMPwrdBm; + } - pDevice->abyCCKDefaultPwr[ii + 1] = byCCKPwrdBm; - pDevice->abyOFDMDefaultPwr[ii + 1] = byOFDMPwrdBm; - } - //2008-8-4 by chester - //recover 12,13 ,14channel for EUROPE by 11 channel - if (((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || - (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe)) && - (pDevice->byOriginalZonetype == ZoneType_USA)) { - for (ii = 11; ii < 14; ii++) { - pDevice->abyCCKPwrTbl[ii] = pDevice->abyCCKPwrTbl[10]; - pDevice->abyOFDMPwrTbl[ii] = pDevice->abyOFDMPwrTbl[10]; + /* recover 12,13 ,14channel for EUROPE by 11 channel */ + if (((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || + (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe)) && + (pDevice->byOriginalZonetype == ZoneType_USA)) { + for (ii = 11; ii < 14; ii++) { + pDevice->abyCCKPwrTbl[ii] = pDevice->abyCCKPwrTbl[10]; + pDevice->abyOFDMPwrTbl[ii] = pDevice->abyOFDMPwrTbl[10]; - } } + } - // Load OFDM A Power Table - for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { //RobertYu:20041224, bug using CB_MAX_CHANNEL - pDevice->abyOFDMPwrTbl[ii + CB_MAX_CHANNEL_24G + 1] = SROMbyReadEmbedded(pDevice->PortOffset, (unsigned char)(ii + EEP_OFS_OFDMA_PWR_TBL)); - pDevice->abyOFDMDefaultPwr[ii + CB_MAX_CHANNEL_24G + 1] = SROMbyReadEmbedded(pDevice->PortOffset, (unsigned char)(ii + EEP_OFS_OFDMA_PWR_dBm)); - } - init_channel_table((void *)pDevice); + /* Load OFDM A Power Table */ + for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { + pDevice->abyOFDMPwrTbl[ii + CB_MAX_CHANNEL_24G + 1] = + SROMbyReadEmbedded(pDevice->PortOffset, + (unsigned char)(ii + EEP_OFS_OFDMA_PWR_TBL)); - if (pDevice->byLocalID > REV_ID_VT3253_B1) { - MACvSelectPage1(pDevice->PortOffset); - VNSvOutPortB(pDevice->PortOffset + MAC_REG_MSRCTL + 1, (MSRCTL1_TXPWR | MSRCTL1_CSAPAREN)); - MACvSelectPage0(pDevice->PortOffset); - } + pDevice->abyOFDMDefaultPwr[ii + CB_MAX_CHANNEL_24G + 1] = + SROMbyReadEmbedded(pDevice->PortOffset, + (unsigned char)(ii + EEP_OFS_OFDMA_PWR_dBm)); + } + + init_channel_table((void *)pDevice); + + if (pDevice->byLocalID > REV_ID_VT3253_B1) { + MACvSelectPage1(pDevice->PortOffset); - // use relative tx timeout and 802.11i D4 - MACvWordRegBitsOn(pDevice->PortOffset, MAC_REG_CFG, (CFG_TKIPOPT | CFG_NOTXTIMEOUT)); + VNSvOutPortB(pDevice->PortOffset + MAC_REG_MSRCTL + 1, + (MSRCTL1_TXPWR | MSRCTL1_CSAPAREN)); - // set performance parameter by registry - MACvSetShortRetryLimit(pDevice->PortOffset, pDevice->byShortRetryLimit); - MACvSetLongRetryLimit(pDevice->PortOffset, pDevice->byLongRetryLimit); + MACvSelectPage0(pDevice->PortOffset); + } - // reset TSF counter - VNSvOutPortB(pDevice->PortOffset + MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); - // enable TSF counter - VNSvOutPortB(pDevice->PortOffset + MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); + /* use relative tx timeout and 802.11i D4 */ + MACvWordRegBitsOn(pDevice->PortOffset, + MAC_REG_CFG, (CFG_TKIPOPT | CFG_NOTXTIMEOUT)); - // initialize BBP registers - BBbVT3253Init(pDevice); + /* set performance parameter by registry */ + MACvSetShortRetryLimit(pDevice->PortOffset, pDevice->byShortRetryLimit); + MACvSetLongRetryLimit(pDevice->PortOffset, pDevice->byLongRetryLimit); - if (pDevice->bUpdateBBVGA) { - pDevice->byBBVGACurrent = pDevice->abyBBVGA[0]; - pDevice->byBBVGANew = pDevice->byBBVGACurrent; - BBvSetVGAGainOffset(pDevice, pDevice->abyBBVGA[0]); - } - BBvSetRxAntennaMode(pDevice->PortOffset, pDevice->byRxAntennaMode); - BBvSetTxAntennaMode(pDevice->PortOffset, pDevice->byTxAntennaMode); + /* reset TSF counter */ + VNSvOutPortB(pDevice->PortOffset + MAC_REG_TFTCTL, TFTCTL_TSFCNTRST); + /* enable TSF counter */ + VNSvOutPortB(pDevice->PortOffset + MAC_REG_TFTCTL, TFTCTL_TSFCNTREN); - pDevice->byCurrentCh = 0; + /* initialize BBP registers */ + BBbVT3253Init(pDevice); - // Set BB and packet type at the same time. - // Set Short Slot Time, xIFS, and RSPINF. - if (pDevice->uConnectionRate == RATE_AUTO) - pDevice->wCurrentRate = RATE_54M; - else - pDevice->wCurrentRate = (unsigned short)pDevice->uConnectionRate; + if (pDevice->bUpdateBBVGA) { + pDevice->byBBVGACurrent = pDevice->abyBBVGA[0]; + pDevice->byBBVGANew = pDevice->byBBVGACurrent; + BBvSetVGAGainOffset(pDevice, pDevice->abyBBVGA[0]); + } + + BBvSetRxAntennaMode(pDevice->PortOffset, pDevice->byRxAntennaMode); + BBvSetTxAntennaMode(pDevice->PortOffset, pDevice->byTxAntennaMode); + + pDevice->byCurrentCh = 0; - // default G Mode - VNTWIFIbConfigPhyMode(pDevice->pMgmt, PHY_TYPE_11G); - VNTWIFIbConfigPhyMode(pDevice->pMgmt, PHY_TYPE_AUTO); + /* Set BB and packet type at the same time. */ + /* Set Short Slot Time, xIFS, and RSPINF. */ + if (pDevice->uConnectionRate == RATE_AUTO) + pDevice->wCurrentRate = RATE_54M; + else + pDevice->wCurrentRate = (unsigned short)pDevice->uConnectionRate; + + /* default G Mode */ + VNTWIFIbConfigPhyMode(pDevice->pMgmt, PHY_TYPE_11G); + VNTWIFIbConfigPhyMode(pDevice->pMgmt, PHY_TYPE_AUTO); - pDevice->bRadioOff = false; + pDevice->bRadioOff = false; - pDevice->byRadioCtl = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_RADIOCTL); - pDevice->bHWRadioOff = false; + pDevice->byRadioCtl = SROMbyReadEmbedded(pDevice->PortOffset, + EEP_OFS_RADIOCTL); + pDevice->bHWRadioOff = false; - if (pDevice->byRadioCtl & EEP_RADIOCTL_ENABLE) { - // Get GPIO - MACvGPIOIn(pDevice->PortOffset, &pDevice->byGPIO); -//2008-4-14 by chester for led issue - if (((pDevice->byGPIO & GPIO0_DATA) && !(pDevice->byRadioCtl & EEP_RADIOCTL_INV)) || - (!(pDevice->byGPIO & GPIO0_DATA) && (pDevice->byRadioCtl & EEP_RADIOCTL_INV))) { + if (pDevice->byRadioCtl & EEP_RADIOCTL_ENABLE) { + /* Get GPIO */ + MACvGPIOIn(pDevice->PortOffset, &pDevice->byGPIO); + + if (((pDevice->byGPIO & GPIO0_DATA) && + !(pDevice->byRadioCtl & EEP_RADIOCTL_INV)) || + (!(pDevice->byGPIO & GPIO0_DATA) && + (pDevice->byRadioCtl & EEP_RADIOCTL_INV))) pDevice->bHWRadioOff = true; - } } + if (pDevice->bHWRadioOff || pDevice->bRadioControlOff) CARDbRadioPowerOff(pDevice); -} + pMgmt->eScanType = WMAC_SCAN_PASSIVE; // get Permanent network address SROMvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); @@ -1642,7 +1679,8 @@ static int device_open(struct net_device *dev) vMgrTimerInit(pDevice); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "call device_init_registers\n"); - device_init_registers(pDevice, DEVICE_INIT_COLD); + device_init_registers(pDevice); + MACvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); memcpy(pDevice->pMgmt->abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); device_set_multi(pDevice->dev); @@ -3187,7 +3225,7 @@ viawget_resume(struct pci_dev *pcid) if (netif_running(pDevice->dev)) { spin_lock_irq(&pDevice->lock); MACvRestoreContext(pDevice->PortOffset, pDevice->abyMacContext); - device_init_registers(pDevice, DEVICE_INIT_DXPL); + device_init_registers(pDevice); if (pMgmt->sNodeDBTable[0].bActive) { // Assoc with BSS pMgmt->sNodeDBTable[0].bActive = false; pDevice->bLinkPass = false; -- cgit From 3500a1da81c25f03e4eed159a38e96d280eba6e9 Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Mon, 28 Jul 2014 23:26:26 +0100 Subject: staging: vt6655: clean up the tail of function device_init_registers Aligning the code. Signed-off-by: Malcolm Priestley Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vt6655/device_main.c | 37 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 0ecc99bf8ab4..3f72c34ecddd 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -736,30 +736,31 @@ static void device_init_registers(PSDevice pDevice) if (pDevice->bHWRadioOff || pDevice->bRadioControlOff) CARDbRadioPowerOff(pDevice); -pMgmt->eScanType = WMAC_SCAN_PASSIVE; -// get Permanent network address -SROMvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); -DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Network address = %pM\n", - pDevice->abyCurrentNetAddr); + pMgmt->eScanType = WMAC_SCAN_PASSIVE; -// reset Tx pointer -CARDvSafeResetRx(pDevice); -// reset Rx pointer -CARDvSafeResetTx(pDevice); + /* get Permanent network address */ + SROMvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Network address = %pM\n", + pDevice->abyCurrentNetAddr); -if (pDevice->byLocalID <= REV_ID_VT3253_A1) - MACvRegBitsOn(pDevice->PortOffset, MAC_REG_RCR, RCR_WPAERR); + /* reset Tx pointer */ + CARDvSafeResetRx(pDevice); + /* reset Rx pointer */ + CARDvSafeResetTx(pDevice); -pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; + if (pDevice->byLocalID <= REV_ID_VT3253_A1) + MACvRegBitsOn(pDevice->PortOffset, MAC_REG_RCR, RCR_WPAERR); -// Turn On Rx DMA -MACvReceive0(pDevice->PortOffset); -MACvReceive1(pDevice->PortOffset); + pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; -// start the adapter -MACvStart(pDevice->PortOffset); + /* Turn On Rx DMA */ + MACvReceive0(pDevice->PortOffset); + MACvReceive1(pDevice->PortOffset); -netif_stop_queue(pDevice->dev); + /* start the adapter */ + MACvStart(pDevice->PortOffset); + + netif_stop_queue(pDevice->dev); } static void device_init_diversity_timer(PSDevice pDevice) -- cgit From e721310aacca4a904280b52955b5db153c209fd3 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 29 Jul 2014 11:11:20 -0400 Subject: staging: unisys: remove parahotplug proc entry Remove the parahotplug proc code entirely in preparation for replacement with sysfs entries. Since visorchipset_proc_read_writeonly() is orphaned by the removal, it is removed as well. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 71 ---------------------- 1 file changed, 71 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 156a72fdabd9..34b28d6b7410 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -98,19 +98,11 @@ static CONTROLVM_MESSAGE_PACKET g_DeviceChangeStatePacket; #define is_diagpool_channel(channel_type_guid) \ (uuid_le_cmp(channel_type_guid, UltraDiagPoolChannelProtocolGuid) == 0) -#define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN "parahotplug" -static struct proc_dir_entry *parahotplug_proc_dir; - static LIST_HEAD(BusInfoList); static LIST_HEAD(DevInfoList); -static struct proc_dir_entry *ProcDir; static VISORCHANNEL *ControlVm_channel; -static ssize_t visorchipset_proc_read_writeonly(struct file *file, - char __user *buf, - size_t len, loff_t *offset); - typedef struct { U8 __iomem *ptr; /* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm @@ -1736,53 +1728,6 @@ parahotplug_process_message(CONTROLVM_MESSAGE *inmsg) } } -/* - * Gets called when the udev script writes to - * /proc/visorchipset/parahotplug. Expects input in the form of " - * " where is the identifier passed to the script that - * matches a request on the request list, and is 0 or 1 - * indicating whether the device is now enabled or not. - */ -static ssize_t -parahotplug_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char buf[64]; - uint id; - ushort active; - - if (count > sizeof(buf) - 1) { - LOGERR("parahotplug_proc_write: count (%d) exceeds size of buffer (%d)", - (int) count, (int) sizeof(buf)); - return -EINVAL; - } - if (copy_from_user(buf, buffer, count)) { - LOGERR("parahotplug_proc_write: copy_from_user failed"); - return -EFAULT; - } - buf[count] = '\0'; - - if (sscanf(buf, "%u %hu", &id, &active) != 2) { - id = 0; - active = 0; - } - - if (active != 1 && active != 0) { - LOGERR("parahotplug_proc_write: invalid active field"); - return -EINVAL; - } - - parahotplug_request_complete((int) id, (U16) active); - - return count; -} - -static const struct file_operations parahotplug_proc_fops = { - .owner = THIS_MODULE, - .read = visorchipset_proc_read_writeonly, - .write = parahotplug_proc_write, -}; - /* Process a controlvm message. * Return result: * FALSE - this function will return FALSE only in the case where the @@ -2325,13 +2270,6 @@ static ssize_t chipsetready_store(struct device *dev, return -EINVAL; } -static ssize_t -visorchipset_proc_read_writeonly(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - return 0; -} - static int __init visorchipset_init(void) { @@ -2405,9 +2343,6 @@ visorchipset_init(void) memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - parahotplug_proc_dir = - proc_create(VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN, 0200, - ProcDir, ¶hotplug_proc_fops); memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); Putfile_buffer_list_pool = @@ -2500,12 +2435,6 @@ visorchipset_exit(void) memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - if (parahotplug_proc_dir) { - remove_proc_entry(VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN, - ProcDir); - parahotplug_proc_dir = NULL; - } - memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); LOGINF("Channel %s (ControlVm) disconnected", -- cgit From e56fa7cd3dbc57ba2734ed674b27572d149d64da Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 29 Jul 2014 11:11:21 -0400 Subject: staging: unisys: add sysfs entries for parahotplug support This patch adds new a new directory parahotplug to the visorchipset sysfs directory, and two new attributes, deviceenabled, and devicedisabled, into the new directory, to add s-Par parahotplug support. The parahotplug interface is used to deal with SR-IOV recovery situations on s-Par guest partitions. The command service partition will send a message to a guest when an SR-IOV device that guest is using needs to be temporarily removed. The message triggers a udev event that will cause a recovery script to run. When that script has completed its work, it will write to one of the parahotplug interfaces to send a message back to Command, indicating that the recovery action has completed. When a guest that is sharing an SR-IOV device is restarted, that guest will take down the PF driver on the device, but any guests with VFs will not know that their device needs to be reset as well. The recovery script makes it so the device will be shut down fully and then restarted after the sharing guest comes back up, and ensures that the timing is correct. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 34b28d6b7410..858f5c5c19d0 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -285,6 +285,14 @@ static ssize_t chipsetready_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static DEVICE_ATTR_WO(chipsetready); +static ssize_t devicedisabled_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_WO(devicedisabled); + +static ssize_t deviceenabled_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_WO(deviceenabled); + static struct attribute *visorchipset_install_attrs[] = { &dev_attr_toolaction.attr, &dev_attr_boottotool.attr, @@ -309,9 +317,21 @@ static struct attribute_group visorchipset_guest_group = { .attrs = visorchipset_guest_attrs }; +static struct attribute *visorchipset_parahotplug_attrs[] = { + &dev_attr_devicedisabled.attr, + &dev_attr_deviceenabled.attr, + NULL +}; + +static struct attribute_group visorchipset_parahotplug_group = { + .name = "parahotplug", + .attrs = visorchipset_parahotplug_attrs +}; + static const struct attribute_group *visorchipset_dev_groups[] = { &visorchipset_install_group, &visorchipset_guest_group, + &visorchipset_parahotplug_group, NULL }; @@ -2270,6 +2290,38 @@ static ssize_t chipsetready_store(struct device *dev, return -EINVAL; } +/* The parahotplug/devicedisabled interface gets called by our support script + * when an SR-IOV device has been shut down. The ID is passed to the script + * and then passed back when the device has been removed. + */ +static ssize_t devicedisabled_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + uint id; + + if (kstrtouint(buf, 10, &id) != 0) + return -EINVAL; + + parahotplug_request_complete(id, 0); + return count; +} + +/* The parahotplug/deviceenabled interface gets called by our support script + * when an SR-IOV device has been recovered. The ID is passed to the script + * and then passed back when the device has been brought back up. + */ +static ssize_t deviceenabled_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + uint id; + + if (kstrtouint(buf, 10, &id) != 0) + return -EINVAL; + + parahotplug_request_complete(id, 1); + return count; +} + static int __init visorchipset_init(void) { -- cgit From c242233e5b578ef08362d98171c10519876d0d93 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Tue, 29 Jul 2014 15:09:40 -0400 Subject: staging: unisys: remove U8 type This patch switches all use of the U8 typedef to use the kernel's u8 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/common-spar/include/channels/channel.h | 54 +++++++++--------- .../include/channels/controlframework.h | 4 +- .../include/channels/controlvmchannel.h | 24 ++++---- .../common-spar/include/channels/diagchannel.h | 32 +++++------ .../common-spar/include/channels/iochannel.h | 66 +++++++++++----------- .../common-spar/include/channels/vbuschannel.h | 2 +- .../unisys/common-spar/include/vbusdeviceinfo.h | 8 +-- .../unisys/common-spar/include/vmcallinterface.h | 8 +-- drivers/staging/unisys/include/commontypes.h | 1 - drivers/staging/unisys/include/uisqueue.h | 14 ++--- drivers/staging/unisys/uislib/uisqueue.c | 8 +-- drivers/staging/unisys/virthba/virthba.c | 2 +- drivers/staging/unisys/virtpci/virtpci.c | 6 +- drivers/staging/unisys/visorchannel/visorchannel.h | 2 +- .../unisys/visorchannel/visorchannel_funcs.c | 4 +- drivers/staging/unisys/visorchipset/visorchipset.h | 24 ++++---- .../unisys/visorchipset/visorchipset_main.c | 10 ++-- 17 files changed, 134 insertions(+), 135 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index d19711de1140..8f3aec9b61a8 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -70,26 +70,26 @@ typedef enum { CHANNELCLI_OWNED = 5 /* "no worries" state - client can * access channel anytime */ } CHANNEL_CLIENTSTATE; -static inline const U8 * +static inline const u8 * ULTRA_CHANNELCLI_STRING(U32 v) { switch (v) { case CHANNELCLI_DETACHED: - return (const U8 *) ("DETACHED"); + return (const u8 *) ("DETACHED"); case CHANNELCLI_DISABLED: - return (const U8 *) ("DISABLED"); + return (const u8 *) ("DISABLED"); case CHANNELCLI_ATTACHING: - return (const U8 *) ("ATTACHING"); + return (const u8 *) ("ATTACHING"); case CHANNELCLI_ATTACHED: - return (const U8 *) ("ATTACHED"); + return (const u8 *) ("ATTACHED"); case CHANNELCLI_BUSY: - return (const U8 *) ("BUSY"); + return (const u8 *) ("BUSY"); case CHANNELCLI_OWNED: - return (const U8 *) ("OWNED"); + return (const u8 *) ("OWNED"); default: break; } - return (const U8 *) ("?"); + return (const u8 *) ("?"); } #define ULTRA_CHANNELSRV_IS_READY(x) ((x) == CHANNELSRV_READY) @@ -129,7 +129,7 @@ ULTRA_CHANNELCLI_STRING(U32 v) old, \ ULTRA_CHANNELCLI_STRING(new), \ new, \ - PathName_Last_N_Nodes((U8 *)file, 4), \ + PathName_Last_N_Nodes((u8 *)file, 4), \ line); \ } while (0) @@ -237,15 +237,15 @@ typedef struct _CHANNEL_HEADER { * Windows drivers, see ServerStateUp, * ServerStateDown, etc) */ U32 SrvState; /* CHANNEL_SERVERSTATE */ - U8 CliErrorBoot; /* bits to indicate err states for + u8 CliErrorBoot; /* bits to indicate err states for * boot clients, so err messages can * be throttled */ - U8 CliErrorOS; /* bits to indicate err states for OS + u8 CliErrorOS; /* bits to indicate err states for OS * clients, so err messages can be * throttled */ - U8 Filler[1]; /* Pad out to 128 byte cacheline */ + u8 Filler[1]; /* Pad out to 128 byte cacheline */ /* Please add all new single-byte values below here */ - U8 RecoverChannel; + u8 RecoverChannel; } CHANNEL_HEADER, *pCHANNEL_HEADER, ULTRA_CHANNEL_PROTOCOL; #define ULTRA_CHANNEL_ENABLE_INTS (0x1ULL << 0) @@ -283,7 +283,7 @@ typedef struct _SIGNAL_QUEUE_HEADER { U32 ErrorFlags; /* Error bits set during SignalReinit * to denote trouble with client's * fields */ - U8 Filler[12]; /* Pad out to 64 byte cacheline */ + u8 Filler[12]; /* Pad out to 64 byte cacheline */ } SIGNAL_QUEUE_HEADER, *pSIGNAL_QUEUE_HEADER; #pragma pack(pop) @@ -394,10 +394,10 @@ ULTRA_check_channel_server(uuid_le typeGuid, * NOT more than . Note that if the pathname has less than nodes * in it, the return pointer will be to the beginning of the string. */ -static inline U8 * -PathName_Last_N_Nodes(U8 *s, unsigned int n) +static inline u8 * +PathName_Last_N_Nodes(u8 *s, unsigned int n) { - U8 *p = s; + u8 *p = s; unsigned int node_count = 0; while (*p != '\0') { if ((*p == '/') || (*p == '\\')) @@ -419,7 +419,7 @@ PathName_Last_N_Nodes(U8 *s, unsigned int n) } static inline int -ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, +ULTRA_channel_client_acquire_os(void __iomem *pChannel, u8 *chanId, void *logCtx, char *file, int line, char *func) { CHANNEL_HEADER __iomem *pChan = pChannel; @@ -439,7 +439,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, CHANNELSTATE_DIAG_SUBSYS, func, line, "%s Channel StateTransition INVALID! - acquire failed because OS client DISABLED @%s:%d\n", chanId, PathName_Last_N_Nodes( - (U8 *) file, 4), line); + (u8 *) file, 4), line); } return 0; } @@ -456,7 +456,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, readl(&pChan->CliStateOS), ULTRA_CHANNELCLI_STRING(CHANNELCLI_OWNED), CHANNELCLI_OWNED, - PathName_Last_N_Nodes((U8 *) file, 4), line); + PathName_Last_N_Nodes((u8 *) file, 4), line); writel(CHANNELCLI_OWNED, &pChan->CliStateOS); MEMORYBARRIER; } @@ -469,7 +469,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, CHANNELSTATE_DIAG_SEVERITY, CHANNELSTATE_DIAG_SUBSYS, func, line, "%s Channel OS client acquire now successful @%s:%d\n", - chanId, PathName_Last_N_Nodes((U8 *) file, + chanId, PathName_Last_N_Nodes((u8 *) file, 4), line); writeb(0, &pChan->CliErrorOS); } @@ -496,7 +496,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, ULTRA_CHANNELCLI_STRING( readl(&pChan->CliStateOS)), readl(&pChan->CliStateOS), - PathName_Last_N_Nodes((U8 *) file, 4), + PathName_Last_N_Nodes((u8 *) file, 4), line); } return 0; @@ -516,7 +516,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, CHANNELSTATE_DIAG_SEVERITY, CHANNELSTATE_DIAG_SUBSYS, func, line, "%s Channel StateTransition failed - host OS acquire failed because boot BUSY @%s:%d\n", - chanId, PathName_Last_N_Nodes((U8 *) file, + chanId, PathName_Last_N_Nodes((u8 *) file, 4), line); } /* reset busy */ @@ -530,7 +530,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, CHANNELSTATE_DIAG_SEVERITY, CHANNELSTATE_DIAG_SUBSYS, func, line, "%s Channel OS client acquire now successful @%s:%d\n", - chanId, PathName_Last_N_Nodes((U8 *) file, 4), + chanId, PathName_Last_N_Nodes((u8 *) file, 4), line); writeb(0, &pChan->CliErrorOS); } @@ -538,7 +538,7 @@ ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId, } static inline void -ULTRA_channel_client_release_os(void __iomem *pChannel, U8 *chanId, +ULTRA_channel_client_release_os(void __iomem *pChannel, u8 *chanId, void *logCtx, char *file, int line, char *func) { CHANNEL_HEADER __iomem *pChan = pChannel; @@ -548,7 +548,7 @@ ULTRA_channel_client_release_os(void __iomem *pChannel, U8 *chanId, CHANNELSTATE_DIAG_SEVERITY, CHANNELSTATE_DIAG_SUBSYS, func, line, "%s Channel OS client error state cleared @%s:%d\n", - chanId, PathName_Last_N_Nodes((U8 *) file, 4), + chanId, PathName_Last_N_Nodes((u8 *) file, 4), line); writeb(0, &pChan->CliErrorOS); } @@ -563,7 +563,7 @@ ULTRA_channel_client_release_os(void __iomem *pChannel, U8 *chanId, ULTRA_CHANNELCLI_STRING( readl(&pChan->CliStateOS)), readl(&pChan->CliStateOS), - PathName_Last_N_Nodes((U8 *) file, 4), line); + PathName_Last_N_Nodes((u8 *) file, 4), line); /* return; */ } writel(CHANNELCLI_ATTACHED, &pChan->CliStateOS); /* release busy */ diff --git a/drivers/staging/unisys/common-spar/include/channels/controlframework.h b/drivers/staging/unisys/common-spar/include/channels/controlframework.h index 1a1c5053fcf8..ca1c46eb7460 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlframework.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlframework.h @@ -66,9 +66,9 @@ static const ULTRA_SEGMENT_STATE SegmentStateStandby = { typedef union { U64 Full; struct { - U8 Major; /* will be 1 for the first release and + u8 Major; /* will be 1 for the first release and * increment thereafter */ - U8 Minor; + u8 Minor; U16 Maintenance; U32 Revision; /* Subversion revision */ } Part; diff --git a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h index d8b12a733488..061ff3d4a06a 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h @@ -142,16 +142,16 @@ struct InterruptInfo { /**< specifies if the recvInterrupt is shared. It, interrupt pin * and vector are used to connect to 0 = not shared; 1 = shared. * the corresponding interrupt. Used by IOPart-GP only. */ - U8 recvInterruptShared; - U8 reserved[3]; /* Natural alignment purposes */ + u8 recvInterruptShared; + u8 reserved[3]; /* Natural alignment purposes */ }; struct PciId { U16 Domain; - U8 Bus; - U8 Slot; - U8 Func; - U8 Reserved[3]; /* Natural alignment purposes */ + u8 Bus; + u8 Slot; + u8 Func; + u8 Reserved[3]; /* Natural alignment purposes */ }; struct PciConfigHdr { @@ -389,7 +389,7 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { struct { U32 busNo; ULTRA_SEGMENT_STATE state; - U8 reserved[2]; /* Natural alignment purposes */ + u8 reserved[2]; /* Natural alignment purposes */ } busChangeState; /* for CONTROLVM_BUS_CHANGESTATE */ struct { U32 busNo; @@ -400,13 +400,13 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { * a physical device */ /* remaining bits in this 32-bit word are available */ } flags; - U8 reserved[2]; /* Natural alignment purposes */ + u8 reserved[2]; /* Natural alignment purposes */ } deviceChangeState; /* for CONTROLVM_DEVICE_CHANGESTATE */ struct { U32 busNo; U32 devNo; ULTRA_SEGMENT_STATE state; - U8 reserved[6]; /* Natural alignment purposes */ + u8 reserved[6]; /* Natural alignment purposes */ } deviceChangeStateEvent; /* for CONTROLVM_DEVICE_CHANGESTATE_EVENT */ struct { U32 busCount; /*< indicates the max number of busses */ @@ -532,13 +532,13 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { U32 InstallationTextId; /* Id of string to display */ U16 InstallationRemainingSteps; /* Number of remaining installation * steps (for progress bars) */ - U8 ToolAction; /* ULTRA_TOOL_ACTIONS Installation Action + u8 ToolAction; /* ULTRA_TOOL_ACTIONS Installation Action * field */ - U8 Reserved; /* alignment */ + u8 Reserved; /* alignment */ ULTRA_EFI_SPAR_INDICATION EfiSparIndication; ULTRA_EFI_SPAR_INDICATION EfiSparIndicationSupported; U32 SPReserved; - U8 Reserved2[28]; /* Force signals to begin on 128-byte cache + u8 Reserved2[28]; /* Force signals to begin on 128-byte cache * line */ SIGNAL_QUEUE_HEADER RequestQueue; /* Service or guest partition * uses this queue to send diff --git a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h index 1bea2f720e48..e16f2c04b4e7 100644 --- a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h @@ -107,16 +107,16 @@ static const uuid_le UltraDiagChannelProtocolGuid = * for use in diagnostic event timestamps... */ typedef struct _DIAG_EFI_TIME { U16 Year; /* 1998 - 20XX */ - U8 Month; /* 1 - 12 */ - U8 Day; /* 1 - 31 */ - U8 Hour; /* 0 - 23 */ - U8 Minute; /* 0 - 59 */ - U8 Second; /* 0 - 59 */ - U8 Pad1; + u8 Month; /* 1 - 12 */ + u8 Day; /* 1 - 31 */ + u8 Hour; /* 0 - 23 */ + u8 Minute; /* 0 - 59 */ + u8 Second; /* 0 - 59 */ + u8 Pad1; U32 Nanosecond; /* 0 - 999, 999, 999 */ S16 TimeZone; /* -1440 to 1440 or 2047 */ - U8 Daylight; - U8 Pad2; + u8 Daylight; + u8 Pad2; } DIAG_EFI_TIME; typedef enum { @@ -158,15 +158,15 @@ typedef enum { typedef struct _DIAG_CHANNEL_EVENT { U32 EventId; U32 Severity; - U8 ModuleName[MAX_MODULE_NAME_SIZE]; + u8 ModuleName[MAX_MODULE_NAME_SIZE]; U32 LineNumber; DIAG_EFI_TIME Timestamp; /* Size = 16 bytes */ U32 PartitionNumber; /* Filled in by Diag Switch as pool blocks are * filled */ U16 VirtualProcessorNumber; U16 LogicalProcessorNumber; - U8 ComponentType; /* ULTRA_COMPONENT_TYPES */ - U8 Subsystem; + u8 ComponentType; /* ULTRA_COMPONENT_TYPES */ + u8 Subsystem; U16 Reserved0; /* pad to U64 alignment */ U32 BlockNumber; /* filled in by DiagSwitch as pool blocks are * filled */ @@ -179,8 +179,8 @@ typedef struct _DIAG_CHANNEL_EVENT { * and referenced only by WinDiagDisplay formatting tool as * additional diagnostic information. Other tools including * WinDiagDisplay currently ignore these 'Reserved' bytes. */ - U8 Reserved[8]; - U8 AdditionalInfo[MAX_ADDITIONAL_INFO_SIZE]; + u8 Reserved[8]; + u8 AdditionalInfo[MAX_ADDITIONAL_INFO_SIZE]; /* NOTE: Changesto DIAG_CHANNEL_EVENT generally need to be reflected in * existing copies * @@ -364,9 +364,9 @@ typedef enum { */ typedef struct _DIAG_CHANNEL_PROTOCOL_HEADER { volatile U32 DiagLock; - U8 IsChannelInitialized; - U8 Reserved[3]; - U8 SubsystemSeverityFilter[64]; + u8 IsChannelInitialized; + u8 Reserved[3]; + u8 SubsystemSeverityFilter[64]; } DIAG_CHANNEL_PROTOCOL_HEADER; /* The Diagram for the Diagnostic Channel: */ diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h index 6dcfa6e78375..0f13304566e4 100644 --- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h @@ -213,7 +213,7 @@ typedef enum { NET_RCV_POST = 0, /* submit buffer to hold receiving #endif /* MAX_MACADDR_LEN */ #define ETH_IS_LOCALLY_ADMINISTERED(Address) \ - (((U8 *) (Address))[0] & ((U8) 0x02)) + (((u8 *) (Address))[0] & ((u8) 0x02)) #define NIC_VENDOR_ID 0x0008000B /* various types of scsi task mgmt commands */ @@ -287,7 +287,7 @@ struct vhba_config_max { /* 20 bytes */ struct uiscmdrsp_scsi { void *scsicmd; /* the handle to the cmd that was received - * send it back as is in the rsp packet. */ - U8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */ + u8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */ U32 bufflen; /* length of data to be transferred out or in */ U16 guest_phys_entries; /* Number of entries in scatter-gather (sg) * list */ @@ -302,8 +302,8 @@ struct uiscmdrsp_scsi { * originator */ int linuxstat; /* the original Linux status - for use by linux * vdisk code */ - U8 scsistat; /* the scsi status */ - U8 addlstat; /* non-scsi status - covers cases like timeout + u8 scsistat; /* the scsi status */ + u8 addlstat; /* non-scsi status - covers cases like timeout * needed by windows guests */ #define ADDL_RESET 1 #define ADDL_TIMEOUT 2 @@ -314,7 +314,7 @@ struct uiscmdrsp_scsi { #define ADDL_RETRY 7 /* the following fields are need to determine the result of command */ - U8 sensebuf[MAX_SENSE_SIZE]; /* sense info in case cmd failed; */ + u8 sensebuf[MAX_SENSE_SIZE]; /* sense info in case cmd failed; */ /* it holds the sense_data struct; */ /* see that struct for details. */ void *vdisk; /* contains pointer to the vdisk so that we can clean up @@ -379,13 +379,13 @@ struct uiscmdrsp_scsi { MEMSET(buf, 0, \ MINNUM(len, \ (unsigned int) NO_DISK_INQUIRY_RESULT_LEN)); \ - buf[2] = (U8) SCSI_SPC2_VER; \ + buf[2] = (u8) SCSI_SPC2_VER; \ if (lun == 0) { \ - buf[0] = (U8) lun0notpresent; \ - buf[3] = (U8) DEV_HISUPPORT; \ + buf[0] = (u8) lun0notpresent; \ + buf[3] = (u8) DEV_HISUPPORT; \ } else \ - buf[0] = (U8) notpresent; \ - buf[4] = (U8) ( \ + buf[0] = (u8) notpresent; \ + buf[4] = (u8) ( \ MINNUM(len, \ (unsigned int) NO_DISK_INQUIRY_RESULT_LEN) - 5); \ if (len >= NO_DISK_INQUIRY_RESULT_LEN) { \ @@ -430,21 +430,21 @@ struct uiscmdrsp_scsi { * AdditionalSenseLength contains will be sizeof(sense_data)-8=10. */ struct sense_data { - U8 ErrorCode:7; - U8 Valid:1; - U8 SegmentNumber; - U8 SenseKey:4; - U8 Reserved:1; - U8 IncorrectLength:1; - U8 EndOfMedia:1; - U8 FileMark:1; - U8 Information[4]; - U8 AdditionalSenseLength; - U8 CommandSpecificInformation[4]; - U8 AdditionalSenseCode; - U8 AdditionalSenseCodeQualifier; - U8 FieldReplaceableUnitCode; - U8 SenseKeySpecific[3]; + u8 ErrorCode:7; + u8 Valid:1; + u8 SegmentNumber; + u8 SenseKey:4; + u8 Reserved:1; + u8 IncorrectLength:1; + u8 EndOfMedia:1; + u8 FileMark:1; + u8 Information[4]; + u8 AdditionalSenseLength; + u8 CommandSpecificInformation[4]; + u8 AdditionalSenseCode; + u8 AdditionalSenseCodeQualifier; + u8 FieldReplaceableUnitCode; + u8 SenseKeySpecific[3]; }; /* some SCSI ADSENSE codes */ @@ -487,10 +487,10 @@ struct net_pkt_xmt { struct { /* these are needed for csum at uisnic end */ - U8 valid; /* 1 = rest of this struct is valid - else + u8 valid; /* 1 = rest of this struct is valid - else * ignore */ - U8 hrawoffv; /* 1 = hwrafoff is valid */ - U8 nhrawoffv; /* 1 = nhwrafoff is valid */ + u8 hrawoffv; /* 1 = hwrafoff is valid */ + u8 nhrawoffv; /* 1 = nhwrafoff is valid */ U16 protocol; /* specifies packet protocol */ U32 csum; /* value used to set skb->csum at IOPart */ U32 hrawoff; /* value used to set skb->h.raw at IOPart */ @@ -539,7 +539,7 @@ struct net_pkt_rcv { /* the number of receive buffers that can be chained */ /* is based on max mtu and size of each rcv buf */ U32 rcv_done_len; /* length of received data */ - U8 numrcvbufs; /* number of receive buffers that contain the */ + u8 numrcvbufs; /* number of receive buffers that contain the */ /* incoming data; guest end MUST chain these together. */ void *rcvbuf[MAX_NET_RCV_CHAIN]; /* the list of receive buffers * that must be chained; */ @@ -556,7 +556,7 @@ struct net_pkt_enbdis { struct net_pkt_macaddr { void *context; - U8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ + u8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ }; /* cmd rsp packet used for VNIC network traffic */ @@ -615,7 +615,7 @@ struct uiscmdrsp_scsitaskmgmt { * Guest */ /* Note that the vHba pointer is not used by the Client/Guest side. */ struct uiscmdrsp_disknotify { - U8 add; /* 0-remove, 1-add */ + u8 add; /* 0-remove, 1-add */ void *vHba; /* Pointer to vhba_info for channel info to * route msg */ U32 channel, id, lun; /* SCSI Path of Disk to added or removed */ @@ -695,7 +695,7 @@ typedef struct _ULTRA_IO_CHANNEL_PROTOCOL { struct vhba_config_max max; /* 20 bytes */ } vhba; /* 28 */ struct { - U8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ + u8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ U32 num_rcv_bufs; /* 4 */ U32 mtu; /* 4 */ uuid_le zoneGuid; /* 16 */ @@ -703,7 +703,7 @@ typedef struct _ULTRA_IO_CHANNEL_PROTOCOL { }; #define MAX_CLIENTSTRING_LEN 1024 - U8 clientString[MAX_CLIENTSTRING_LEN]; /* NULL terminated - so holds + u8 clientString[MAX_CLIENTSTRING_LEN]; /* NULL terminated - so holds * max - 1 bytes */ } ULTRA_IO_CHANNEL_PROTOCOL; diff --git a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h index 69de9d944fd3..cd94c8f91780 100644 --- a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h @@ -73,7 +73,7 @@ typedef struct _ULTRA_VBUS_HEADERINFO { /* to the the BusInfo struct (below) */ U32 devInfoByteOffset; /* byte offset from beginning of this struct */ /* to the the DevInfo array (below) */ - U8 reserved[104]; + u8 reserved[104]; } ULTRA_VBUS_HEADERINFO; typedef struct _ULTRA_VBUS_CHANNEL_PROTOCOL { diff --git a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h index 45e311cdf8de..5e0d98cd422e 100644 --- a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h +++ b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h @@ -26,11 +26,11 @@ * and driver from the client's perspective. */ typedef struct _ULTRA_VBUS_DEVICEINFO { - U8 devType[16]; /* short string identifying the device type */ - U8 drvName[16]; /* driver .sys file name */ - U8 infoStrings[96]; /* sequence of tab-delimited id strings: */ + u8 devType[16]; /* short string identifying the device type */ + u8 drvName[16]; /* driver .sys file name */ + u8 infoStrings[96]; /* sequence of tab-delimited id strings: */ /* */ - U8 reserved[128]; /* pad size to 256 bytes */ + u8 reserved[128]; /* pad size to 256 bytes */ } ULTRA_VBUS_DEVICEINFO; #pragma pack(pop) diff --git a/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/drivers/staging/unisys/common-spar/include/vmcallinterface.h index c5c10f3f1eb4..5c790494e621 100644 --- a/drivers/staging/unisys/common-spar/include/vmcallinterface.h +++ b/drivers/staging/unisys/common-spar/include/vmcallinterface.h @@ -120,7 +120,7 @@ typedef struct _VMCALL_IO_CONTROLVM_ADDR_PARAMS { /* the size of the ControlVm channel in bytes This VMCall fills this * in with the appropriate address. */ U32 ChannelBytes; /* contents provided by this VMCALL (OUT) */ - U8 Unused[4]; /* Unused Bytes in the 64-Bit Aligned Struct */ + u8 Unused[4]; /* Unused Bytes in the 64-Bit Aligned Struct */ } VMCALL_IO_CONTROLVM_ADDR_PARAMS; #pragma pack(pop) @@ -155,12 +155,12 @@ typedef struct _VMCALL_IO_VISORSERIAL_ADDR_PARAMS { /* Parameters to VMCALL_CHANNEL_MISMATCH interface */ typedef struct _VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS { - U8 ChannelName[32]; /* Null terminated string giving name of channel + u8 ChannelName[32]; /* Null terminated string giving name of channel * (IN) */ - U8 ItemName[32]; /* Null terminated string giving name of + u8 ItemName[32]; /* Null terminated string giving name of * mismatched item (IN) */ U32 SourceLineNumber; /* line# where invoked. (IN) */ - U8 SourceFileName[36]; /* source code where invoked - Null terminated + u8 SourceFileName[36]; /* source code where invoked - Null terminated * string (IN) */ } VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS; diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 9de6f9dc5fbf..fbcf15bf19bd 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define U8 uint8_t #define U16 uint16_t #define U32 uint32_t #define U64 uint64_t diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h index 2a5bea3b3325..535cf1f3119e 100644 --- a/drivers/staging/unisys/include/uisqueue.h +++ b/drivers/staging/unisys/include/uisqueue.h @@ -94,7 +94,7 @@ int uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo, unsigned char issueInterruptIfEmpty, U64 interruptHandle, char oktowait, - U8 *channelId); + u8 *channelId); /* uisqueue_get_cmdrsp gets the cmdrsp entry at the head of the queue * and copies it to the area pointed by cmdrsp param. @@ -108,7 +108,7 @@ uisqueue_get_cmdrsp(struct uisqueue_info *queueinfo, void *cmdrsp, #define MAX_NAME_SIZE_UISQUEUE 64 struct extport_info { - U8 valid:1; + u8 valid:1; /* if 1, indicates this extport slot is occupied * if 0, indicates that extport slot is unoccupied */ @@ -172,7 +172,7 @@ struct bus_info { char name[25]; char partitionName[99]; struct bus_info *next; - U8 localVnic; /* 1 if local vnic created internally + u8 localVnic; /* 1 if local vnic created internally * by IOVM; 0 otherwise... */ }; @@ -182,7 +182,7 @@ struct bus_info { struct sn_list_entry { struct uisscsi_dest pdest; /* scsi bus, target, lun for * phys disk */ - U8 sernum[MAX_SERIAL_NUM]; /* serial num of physical + u8 sernum[MAX_SERIAL_NUM]; /* serial num of physical * disk.. The length is always * MAX_SERIAL_NUM, padded with * spaces */ @@ -247,9 +247,9 @@ struct add_virt_iopart { * switch to which the vnic is * connected */ - U8 useG2GCopy; /* Used to determine if a virtual HBA + u8 useG2GCopy; /* Used to determine if a virtual HBA * needs to use G2G copy. */ - U8 Filler[7]; + u8 Filler[7]; U32 busNo; U32 devNo; @@ -263,7 +263,7 @@ struct add_vdisk_iopart { int implicit; struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */ struct uisscsi_dest pdest; /* scsi bus, target, lun for phys disk */ - U8 sernum[MAX_SERIAL_NUM]; /* serial num of physical disk */ + u8 sernum[MAX_SERIAL_NUM]; /* serial num of physical disk */ U32 serlen; /* length of serial num */ U32 busNo; U32 devNo; diff --git a/drivers/staging/unisys/uislib/uisqueue.c b/drivers/staging/unisys/uislib/uisqueue.c index d4a6074cfaf0..12edf605f19c 100644 --- a/drivers/staging/unisys/uislib/uisqueue.c +++ b/drivers/staging/unisys/uislib/uisqueue.c @@ -71,19 +71,19 @@ uisqueue_InterlockedAnd(unsigned long long __iomem *Target, } EXPORT_SYMBOL_GPL(uisqueue_InterlockedAnd); -static U8 +static u8 do_locked_client_insert(struct uisqueue_info *queueinfo, unsigned int whichqueue, void *pSignal, spinlock_t *lock, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, U8 *channelId) + U64 interruptHandle, u8 *channelId) { unsigned long flags; unsigned char queueWasEmpty; unsigned int locked = 0; unsigned int acquired = 0; - U8 rc = 0; + u8 rc = 0; spin_lock_irqsave(lock, flags); locked = 1; @@ -125,7 +125,7 @@ uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo, void *insertlock, unsigned char issueInterruptIfEmpty, U64 interruptHandle, - char oktowait, U8 *channelId) + char oktowait, u8 *channelId) { while (!do_locked_client_insert(queueinfo, whichqueue, cmdrsp, (spinlock_t *) insertlock, diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index ef7242ee7ad3..48a03b488c75 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -196,7 +196,7 @@ struct virthba_info { /* Work Data for DARWorkQ */ struct diskaddremove { - U8 add; /* 0-remove, 1-add */ + u8 add; /* 0-remove, 1-add */ struct Scsi_Host *shost; /* Scsi Host for this virthba instance */ U32 channel, id, lun; /* Disk Path */ struct diskaddremove *next; diff --git a/drivers/staging/unisys/virtpci/virtpci.c b/drivers/staging/unisys/virtpci/virtpci.c index a80617fc61c9..d9443a968ddf 100644 --- a/drivers/staging/unisys/virtpci/virtpci.c +++ b/drivers/staging/unisys/virtpci/virtpci.c @@ -196,7 +196,7 @@ static int write_vbus_chpInfo(ULTRA_VBUS_CHANNEL_PROTOCOL *chan, LOGERR("vbus channel not used, because chpInfoByteOffset == 0"); return -1; } - memcpy(((U8 *) (chan)) + off, info, sizeof(*info)); + memcpy(((u8 *) (chan)) + off, info, sizeof(*info)); return 0; } @@ -214,7 +214,7 @@ static int write_vbus_busInfo(ULTRA_VBUS_CHANNEL_PROTOCOL *chan, LOGERR("vbus channel not used, because busInfoByteOffset == 0"); return -1; } - memcpy(((U8 *) (chan)) + off, info, sizeof(*info)); + memcpy(((u8 *) (chan)) + off, info, sizeof(*info)); return 0; } @@ -238,7 +238,7 @@ write_vbus_devInfo(ULTRA_VBUS_CHANNEL_PROTOCOL *chan, LOGERR("vbus channel not used, because devInfoByteOffset == 0"); return -1; } - memcpy(((U8 *) (chan)) + off, info, sizeof(*info)); + memcpy(((u8 *) (chan)) + off, info, sizeof(*info)); return 0; } diff --git a/drivers/staging/unisys/visorchannel/visorchannel.h b/drivers/staging/unisys/visorchannel/visorchannel.h index ecf0d11117e9..9de4f8a5bfce 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel.h +++ b/drivers/staging/unisys/visorchannel/visorchannel.h @@ -55,7 +55,7 @@ int visorchannel_read(VISORCHANNEL *channel, ulong offset, int visorchannel_write(VISORCHANNEL *channel, ulong offset, void *local, ulong nbytes); int visorchannel_clear(VISORCHANNEL *channel, ulong offset, - U8 ch, ulong nbytes); + u8 ch, ulong nbytes); BOOL visorchannel_signalremove(VISORCHANNEL *channel, U32 queue, void *msg); BOOL visorchannel_signalinsert(VISORCHANNEL *channel, U32 queue, void *msg); int visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, U32 queue); diff --git a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c index a44da7c84ae3..8d0964a25352 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c +++ b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c @@ -242,12 +242,12 @@ visorchannel_write(VISORCHANNEL *channel, ulong offset, EXPORT_SYMBOL_GPL(visorchannel_write); int -visorchannel_clear(VISORCHANNEL *channel, ulong offset, U8 ch, ulong nbytes) +visorchannel_clear(VISORCHANNEL *channel, ulong offset, u8 ch, ulong nbytes) { int rc = -1; int bufsize = 65536; int written = 0; - U8 *buf = vmalloc(bufsize); + u8 *buf = vmalloc(bufsize); if (buf == NULL) { ERRDRV("%s failed memory allocation", __func__); diff --git a/drivers/staging/unisys/visorchipset/visorchipset.h b/drivers/staging/unisys/visorchipset/visorchipset.h index e01cc7207bae..ef2bc23c4e88 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset.h +++ b/drivers/staging/unisys/visorchipset/visorchipset.h @@ -129,8 +129,8 @@ typedef struct { VISORCHIPSET_CHANNEL_INFO chanInfo; uuid_le partitionGuid; U64 partitionHandle; - U8 *name; /* UTF8 */ - U8 *description; /* UTF8 */ + u8 *name; /* UTF8 */ + u8 *description; /* UTF8 */ U64 Reserved1; U32 Reserved2; MYPROCOBJECT *procObject; @@ -164,10 +164,10 @@ typedef struct { U32 switchNo; VISORCHIPSET_STATE state; uuid_le switchTypeGuid; - U8 *authService1; - U8 *authService2; - U8 *authService3; - U8 *securityContext; + u8 *authService1; + u8 *authService2; + u8 *authService3; + u8 *securityContext; U64 Reserved; U32 Reserved2; /* CONTROLVM_ID */ struct device dev; @@ -185,12 +185,12 @@ typedef struct { VISORCHIPSET_STATE state; uuid_le networkZoneGuid; int pdPort; - U8 *ip; - U8 *ipNetmask; - U8 *ipBroadcast; - U8 *ipNetwork; - U8 *ipGateway; - U8 *ipDNS; + u8 *ip; + u8 *ipNetmask; + u8 *ipBroadcast; + u8 *ipNetwork; + u8 *ipGateway; + u8 *ipDNS; U64 Reserved1; U32 Reserved2; /* CONTROLVM_ID */ struct device dev; diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 858f5c5c19d0..3afa6e5b10dd 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -66,7 +66,7 @@ static int serverregistered; static int clientregistered; #define MAX_CHIPSET_EVENTS 2 -static U8 chipset_events[MAX_CHIPSET_EVENTS] = { 0, 0 }; +static u8 chipset_events[MAX_CHIPSET_EVENTS] = { 0, 0 }; static struct delayed_work Periodic_controlvm_work; static struct workqueue_struct *Periodic_controlvm_workqueue; @@ -104,7 +104,7 @@ static LIST_HEAD(DevInfoList); static VISORCHANNEL *ControlVm_channel; typedef struct { - U8 __iomem *ptr; /* pointer to base address of payload pool */ + u8 __iomem *ptr; /* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm * channel to beginning of payload * pool */ U32 bytes; /* number of bytes in payload pool */ @@ -565,11 +565,11 @@ devInfo_clear(void *v) memset(p, 0, sizeof(VISORCHIPSET_DEVICE_INFO)); } -static U8 +static u8 check_chipset_events(void) { int i; - U8 send_msg = 1; + u8 send_msg = 1; /* Check events to determine if response should be sent */ for (i = 0; i < MAX_CHIPSET_EVENTS; i++) send_msg &= chipset_events[i]; @@ -1369,7 +1369,7 @@ static int initialize_controlvm_payload_info(HOSTADDRESS phys_addr, U64 offset, U32 bytes, CONTROLVM_PAYLOAD_INFO *info) { - U8 __iomem *payload = NULL; + u8 __iomem *payload = NULL; int rc = CONTROLVM_RESP_SUCCESS; if (info == NULL) { -- cgit From b0162025eb763278a2df8b453bd1518fe5e87b81 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:29 +0200 Subject: Staging: bcm: IPv6Protocol.c: Reindented switch-case This patch removes the unneccessary blocks inside the case statements and fixes the indentation of their content. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 88 +++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 48 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index e013c5ad9660..44021da1dc2b 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -34,12 +34,9 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, switch (*pucNextHeader) { case IPV6HDR_TYPE_HOPBYHOP: - { - - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nIPv6 HopByHop Header"); - usNextHeaderOffset += sizeof(struct bcm_ipv6_options_hdr); - } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, "\nIPv6 HopByHop Header"); + usNextHeaderOffset += sizeof(struct bcm_ipv6_options_hdr); break; case IPV6HDR_TYPE_ROUTING: @@ -48,37 +45,41 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Routing Header"); - pstIpv6RoutingHeader = (struct bcm_ipv6_routing_hdr *)pucPayloadPtr; + pstIpv6RoutingHeader = + (struct bcm_ipv6_routing_hdr *)pucPayloadPtr; usNextHeaderOffset += sizeof(struct bcm_ipv6_routing_hdr); - usNextHeaderOffset += pstIpv6RoutingHeader->ucNumAddresses * IPV6_ADDRESS_SIZEINBYTES; - + usNextHeaderOffset += pstIpv6RoutingHeader->ucNumAddresses * + IPV6_ADDRESS_SIZEINBYTES; } break; - case IPV6HDR_TYPE_FRAGMENTATION: - { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, - "\nIPv6 Fragmentation Header"); - usNextHeaderOffset += sizeof(struct bcm_ipv6_fragment_hdr); - } + case IPV6HDR_TYPE_FRAGMENTATION: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, + "\nIPv6 Fragmentation Header"); + usNextHeaderOffset += sizeof(struct bcm_ipv6_fragment_hdr); break; + case IPV6HDR_TYPE_DESTOPTS: { - struct bcm_ipv6_dest_options_hdr *pstIpv6DestOptsHdr = (struct bcm_ipv6_dest_options_hdr *)pucPayloadPtr; + struct bcm_ipv6_dest_options_hdr *pstIpv6DestOptsHdr = + (struct bcm_ipv6_dest_options_hdr *)pucPayloadPtr; int nTotalOptions = pstIpv6DestOptsHdr->ucHdrExtLen; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 DestOpts Header Header"); usNextHeaderOffset += sizeof(struct bcm_ipv6_dest_options_hdr); - usNextHeaderOffset += nTotalOptions * IPV6_DESTOPTS_HDR_OPTIONSIZE ; - + usNextHeaderOffset += nTotalOptions * + IPV6_DESTOPTS_HDR_OPTIONSIZE ; } break; + + case IPV6HDR_TYPE_AUTHENTICATION: { - struct bcm_ipv6_authentication_hdr *pstIpv6AuthHdr = (struct bcm_ipv6_authentication_hdr *)pucPayloadPtr; + struct bcm_ipv6_authentication_hdr *pstIpv6AuthHdr = + (struct bcm_ipv6_authentication_hdr *)pucPayloadPtr; int nHdrLen = pstIpv6AuthHdr->ucLength; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, @@ -87,44 +88,35 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, usNextHeaderOffset += nHdrLen * 4; } break; - case IPV6HDR_TYPE_ENCRYPTEDSECURITYPAYLOAD: - { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, - "\nIPv6 Encrypted Security Payload Header"); - *bParseDone = TRUE; - } + case IPV6HDR_TYPE_ENCRYPTEDSECURITYPAYLOAD: + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, + "\nIPv6 Encrypted Security Payload Header"); + *bParseDone = TRUE; break; + case IPV6_ICMP_HDR_TYPE: - { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nICMP Header"); - *bParseDone = TRUE; - } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, "\nICMP Header"); + *bParseDone = TRUE; break; + case TCP_HEADER_TYPE: - { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nTCP Header"); - *bParseDone = TRUE; - } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, "\nTCP Header"); + *bParseDone = TRUE; break; + case UDP_HEADER_TYPE: - { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nUDP Header"); - *bParseDone = TRUE; - } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, + DBG_LVL_ALL, "\nUDP Header"); + *bParseDone = TRUE; break; - default: - { - *bParseDone = TRUE; - } + default: + *bParseDone = TRUE; break; - - } if (*bParseDone == false) { -- cgit From a370ad07b77f91111e29ca0304dcda5895b8f291 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:30 +0200 Subject: Staging: bcm: IPv6Protocol.c: Removed unnecessary if-else blocks This patch simplifies if (a) { x = false; } else { if (b) { x = false; } } to if (a || b) { x = false; } Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index 44021da1dc2b..5bcdaf949e97 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -272,12 +272,9 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, INT iMatchedSFQueueIndex = 0; iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); - if (iMatchedSFQueueIndex >= NO_OF_QUEUES) { + if ((iMatchedSFQueueIndex >= NO_OF_QUEUES) || + (Adapter->PackInfo[iMatchedSFQueueIndex].bActive == false)) bClassificationSucceed = false; - } else { - if (Adapter->PackInfo[iMatchedSFQueueIndex].bActive == false) - bClassificationSucceed = false; - } } return bClassificationSucceed; -- cgit From 4d7598370aac5493921412cdc676b3f780067e18 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:31 +0200 Subject: Staging: bcm: IPv6Procotol.c: Replaced member accessing with variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index 5bcdaf949e97..deb67b1d3a53 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -289,6 +289,8 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, UINT uiIpv6AddrNoLongWords = 4; ULONG aulSrcIP[4]; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + union u_ip_address *src_addr = &pstClassifierRule->stSrcIpAddress; + /* * This is the no. of Src Addresses ie Range of IP Addresses contained * in the classifier rule for which we need to match @@ -310,14 +312,14 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, DumpIpv6Address(aulSrcIP); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Mask In Classifier Rule:\n"); - DumpIpv6Address(&pstClassifierRule->stSrcIpAddress.ulIpv6Mask[uiLoopIndex]); + DumpIpv6Address(&src_addr->ulIpv6Mask[uiLoopIndex]); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Address In Classifier Rule :\n"); - DumpIpv6Address(&pstClassifierRule->stSrcIpAddress.ulIpv6Addr[uiLoopIndex]); + DumpIpv6Address(&src_addr->ulIpv6Addr[uiLoopIndex]); for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { - if ((pstClassifierRule->stSrcIpAddress.ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulSrcIP[uiIpv6AddIndex]) - != pstClassifierRule->stSrcIpAddress.ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { + if ((src_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulSrcIP[uiIpv6AddIndex]) + != src_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { /* * Match failed for current Ipv6 Address * Try next Ipv6 Address -- cgit From bb76972441383a562d531536222d0807acf2e251 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:32 +0200 Subject: Staging: bcm: IPv6Protocol.c: Replaced member accessing with variable Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index deb67b1d3a53..8a35c1f68fbb 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -347,6 +347,8 @@ static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, UINT uiIpv6AddrNoLongWords = 4; ULONG aulDestIP[4]; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + union u_ip_address *dest_addr = &pstClassifierRule->stDestIpAddress; + /* * This is the no. of Destination Addresses * ie Range of IP Addresses contained in the classifier rule @@ -369,14 +371,14 @@ static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, DumpIpv6Address(aulDestIP); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Mask In Classifier Rule :\n"); - DumpIpv6Address(&pstClassifierRule->stDestIpAddress.ulIpv6Mask[uiLoopIndex]); + DumpIpv6Address(&dest_addr->ulIpv6Mask[uiLoopIndex]); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Address In Classifier Rule :\n"); - DumpIpv6Address(&pstClassifierRule->stDestIpAddress.ulIpv6Addr[uiLoopIndex]); + DumpIpv6Address(&dest_addr->ulIpv6Addr[uiLoopIndex]); for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { - if ((pstClassifierRule->stDestIpAddress.ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulDestIP[uiIpv6AddIndex]) - != pstClassifierRule->stDestIpAddress.ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { + if ((dest_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulDestIP[uiIpv6AddIndex]) + != dest_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { /* * Match failed for current Ipv6 Address. * Try next Ipv6 Address -- cgit From dca9fe7b2cbbf14a259c7b24e23a0fb88bfde59b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:33 +0200 Subject: Staging: bcm: IPv6Protocol.c: Whitespace cleanup Removes whitespace before semicolons and add blank line after declaration. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index 8a35c1f68fbb..01ad11f866c4 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -11,7 +11,7 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, { UCHAR *pucRetHeaderPtr = NULL; UCHAR *pucPayloadPtr = NULL; - USHORT usNextHeaderOffset = 0 ; + USHORT usNextHeaderOffset = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if ((ppucPayload == NULL) || (*pusPayloadLength == 0) || @@ -71,7 +71,7 @@ static UCHAR *GetNextIPV6ChainedHeader(UCHAR **ppucPayload, "\nIPv6 DestOpts Header Header"); usNextHeaderOffset += sizeof(struct bcm_ipv6_dest_options_hdr); usNextHeaderOffset += nTotalOptions * - IPV6_DESTOPTS_HDR_OPTIONSIZE ; + IPV6_DESTOPTS_HDR_OPTIONSIZE; } break; @@ -282,7 +282,7 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, - struct bcm_ipv6_hdr *pstIpv6Header) + struct bcm_ipv6_hdr *pstIpv6Header) { UINT uiLoopIndex = 0; UINT uiIpv6AddIndex = 0; @@ -340,7 +340,7 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, } static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, - struct bcm_ipv6_hdr *pstIpv6Header) + struct bcm_ipv6_hdr *pstIpv6Header) { UINT uiLoopIndex = 0; UINT uiIpv6AddIndex = 0; @@ -354,8 +354,7 @@ static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, * ie Range of IP Addresses contained in the classifier rule * for which we need to match */ - UINT uiCountIPDestinationAddresses = (UINT)pstClassifierRule->ucIPDestinationAddressLength; - + UINT uiCountIPDestinationAddresses = (UINT)pstClassifierRule->ucIPDestinationAddressLength; if (uiCountIPDestinationAddresses == 0) return TRUE; -- cgit From 506da6a6f138e9702efc8a9075610768b067524c Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 14:48:34 +0200 Subject: Staging: bcm: IPv6Protocol.c: Line length fixes Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/IPv6Protocol.c | 93 ++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 33 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/IPv6Protocol.c b/drivers/staging/bcm/IPv6Protocol.c index 01ad11f866c4..27f3f416f184 100644 --- a/drivers/staging/bcm/IPv6Protocol.c +++ b/drivers/staging/bcm/IPv6Protocol.c @@ -151,7 +151,9 @@ static UCHAR GetIpv6ProtocolPorts(UCHAR *pucPayload, USHORT *pusSrcPort, ucHeaderType = ucNextHeader; while (!bDone) { pucNextHeader = GetNextIPV6ChainedHeader(&pIpv6HdrScanContext, - &ucHeaderType, &bDone, &usPayloadLength); + &ucHeaderType, + &bDone, + &usPayloadLength); if (bDone) { if ((ucHeaderType == TCP_HEADER_TYPE) || (ucHeaderType == UDP_HEADER_TYPE)) { @@ -172,11 +174,12 @@ static UCHAR GetIpv6ProtocolPorts(UCHAR *pucPayload, USHORT *pusSrcPort, /* - * Arg 1 struct bcm_mini_adapter *Adapter is a pointer ot the driver contorl structure + * Arg 1 struct bcm_mini_adapter *Adapter is a pointer ot the driver control + * structure * Arg 2 PVOID pcIpHeader is a pointer to the IP header of the packet */ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, - struct bcm_classifier_rule *pstClassifierRule) + struct bcm_classifier_rule *pstClassifierRule) { USHORT ushDestPort = 0; USHORT ushSrcPort = 0; @@ -195,11 +198,12 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, * Try to get the next higher layer protocol * and the Ports Nos if TCP or UDP */ - ucNextProtocolAboveIP = GetIpv6ProtocolPorts((UCHAR *)(pcIpHeader + sizeof(struct bcm_ipv6_hdr)), - &ushSrcPort, - &ushDestPort, - pstIpv6Header->usPayloadLength, - pstIpv6Header->ucNextHeader); + ucNextProtocolAboveIP = GetIpv6ProtocolPorts((UCHAR *)(pcIpHeader + + sizeof(struct bcm_ipv6_hdr)), + &ushSrcPort, + &ushDestPort, + pstIpv6Header->usPayloadLength, + pstIpv6Header->ucNextHeader); do { if (pstClassifierRule->ucDirection == 0) { @@ -219,12 +223,12 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, } bClassificationSucceed = MatchSrcIpv6Address(pstClassifierRule, - pstIpv6Header); + pstIpv6Header); if (!bClassificationSucceed) break; bClassificationSucceed = MatchDestIpv6Address(pstClassifierRule, - pstIpv6Header); + pstIpv6Header); if (!bClassificationSucceed) break; @@ -234,7 +238,7 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, * Chain of IPv6 prot headers */ bClassificationSucceed = MatchProtocol(pstClassifierRule, - ucNextProtocolAboveIP); + ucNextProtocolAboveIP); if (!bClassificationSucceed) break; @@ -248,7 +252,7 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, DBG_LVL_ALL, "\nIPv6 Source Port:%x\n", ntohs(ushSrcPort)); bClassificationSucceed = MatchSrcPort(pstClassifierRule, - ntohs(ushSrcPort)); + ntohs(ushSrcPort)); if (!bClassificationSucceed) break; @@ -257,21 +261,24 @@ USHORT IpVersion6(struct bcm_mini_adapter *Adapter, PVOID pcIpHeader, /* Match Dest Port */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nIPv6 Destination Port:%x\n", + DBG_LVL_ALL, + "\nIPv6 Destination Port:%x\n", ntohs(ushDestPort)); bClassificationSucceed = MatchDestPort(pstClassifierRule, - ntohs(ushDestPort)); + ntohs(ushDestPort)); if (!bClassificationSucceed) break; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, - DBG_LVL_ALL, "\nIPv6 Dest Port Matched"); + DBG_LVL_ALL, + "\nIPv6 Dest Port Matched"); } } while (0); if (bClassificationSucceed == TRUE) { INT iMatchedSFQueueIndex = 0; - iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); + iMatchedSFQueueIndex = SearchSfid(Adapter, + pstClassifierRule->ulSFID); if ((iMatchedSFQueueIndex >= NO_OF_QUEUES) || (Adapter->PackInfo[iMatchedSFQueueIndex].bActive == false)) bClassificationSucceed = false; @@ -295,7 +302,8 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, * This is the no. of Src Addresses ie Range of IP Addresses contained * in the classifier rule for which we need to match */ - UINT uiCountIPSrcAddresses = (UINT)pstClassifierRule->ucIPSourceAddressLength; + UINT uiCountIPSrcAddresses = + (UINT)pstClassifierRule->ucIPSourceAddressLength; if (uiCountIPSrcAddresses == 0) @@ -303,10 +311,15 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, /* First Convert the Ip Address in the packet to Host Endian order */ - for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) - aulSrcIP[uiIpv6AddIndex] = ntohl(pstIpv6Header->ulSrcIpAddress[uiIpv6AddIndex]); - - for (uiLoopIndex = 0; uiLoopIndex < uiCountIPSrcAddresses; uiLoopIndex += uiIpv6AddrNoLongWords) { + for (uiIpv6AddIndex = 0; + uiIpv6AddIndex < uiIpv6AddrNoLongWords; + uiIpv6AddIndex++) + aulSrcIP[uiIpv6AddIndex] = + ntohl(pstIpv6Header->ulSrcIpAddress[uiIpv6AddIndex]); + + for (uiLoopIndex = 0; + uiLoopIndex < uiCountIPSrcAddresses; + uiLoopIndex += uiIpv6AddrNoLongWords) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Address In Received Packet :\n "); DumpIpv6Address(aulSrcIP); @@ -317,9 +330,12 @@ static bool MatchSrcIpv6Address(struct bcm_classifier_rule *pstClassifierRule, "\n Src Ipv6 Address In Classifier Rule :\n"); DumpIpv6Address(&src_addr->ulIpv6Addr[uiLoopIndex]); - for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { - if ((src_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulSrcIP[uiIpv6AddIndex]) - != src_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { + for (uiIpv6AddIndex = 0; + uiIpv6AddIndex < uiIpv6AddrNoLongWords; + uiIpv6AddIndex++) { + if ((src_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & + aulSrcIP[uiIpv6AddIndex]) != + src_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { /* * Match failed for current Ipv6 Address * Try next Ipv6 Address @@ -354,17 +370,23 @@ static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, * ie Range of IP Addresses contained in the classifier rule * for which we need to match */ - UINT uiCountIPDestinationAddresses = (UINT)pstClassifierRule->ucIPDestinationAddressLength; + UINT uiCountIPDestinationAddresses = + (UINT)pstClassifierRule->ucIPDestinationAddressLength; if (uiCountIPDestinationAddresses == 0) return TRUE; /* First Convert the Ip Address in the packet to Host Endian order */ - for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) - aulDestIP[uiIpv6AddIndex] = ntohl(pstIpv6Header->ulDestIpAddress[uiIpv6AddIndex]); - - for (uiLoopIndex = 0; uiLoopIndex < uiCountIPDestinationAddresses; uiLoopIndex += uiIpv6AddrNoLongWords) { + for (uiIpv6AddIndex = 0; + uiIpv6AddIndex < uiIpv6AddrNoLongWords; + uiIpv6AddIndex++) + aulDestIP[uiIpv6AddIndex] = + ntohl(pstIpv6Header->ulDestIpAddress[uiIpv6AddIndex]); + + for (uiLoopIndex = 0; + uiLoopIndex < uiCountIPDestinationAddresses; + uiLoopIndex += uiIpv6AddrNoLongWords) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Address In Received Packet :\n "); DumpIpv6Address(aulDestIP); @@ -375,9 +397,12 @@ static bool MatchDestIpv6Address(struct bcm_classifier_rule *pstClassifierRule, "\n Destination Ipv6 Address In Classifier Rule :\n"); DumpIpv6Address(&dest_addr->ulIpv6Addr[uiLoopIndex]); - for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { - if ((dest_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulDestIP[uiIpv6AddIndex]) - != dest_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { + for (uiIpv6AddIndex = 0; + uiIpv6AddIndex < uiIpv6AddrNoLongWords; + uiIpv6AddIndex++) { + if ((dest_addr->ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & + aulDestIP[uiIpv6AddIndex]) != + dest_addr->ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) { /* * Match failed for current Ipv6 Address. * Try next Ipv6 Address @@ -404,7 +429,9 @@ VOID DumpIpv6Address(ULONG *puIpv6Address) UINT uiIpv6AddIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) { + for (uiIpv6AddIndex = 0; + uiIpv6AddIndex < uiIpv6AddrNoLongWords; + uiIpv6AddIndex++) { BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, ":%lx", puIpv6Address[uiIpv6AddIndex]); } -- cgit From 7966988088f97b3643adf08f5c781806d55f5799 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:13 +0200 Subject: Staging: bcm: Qos.c: Replaced member accessing with variable in PruneQueue() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 0eb78a8010fe..769adb7b32de 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -31,19 +31,30 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex); * * Returns - TRUE(If address matches) else FAIL . *********************************************************************/ -static bool MatchSrcIpAddress(struct bcm_classifier_rule *pstClassifierRule, ULONG ulSrcIP) +static bool MatchSrcIpAddress(struct bcm_classifier_rule *pstClassifierRule, + ULONG ulSrcIP) { UCHAR ucLoopIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + union u_ip_address *src_addr; ulSrcIP = ntohl(ulSrcIP); if (0 == pstClassifierRule->ucIPSourceAddressLength) return TRUE; for (ucLoopIndex = 0; ucLoopIndex < (pstClassifierRule->ucIPSourceAddressLength); ucLoopIndex++) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Ip Address Mask:0x%x PacketIp:0x%x and Classification:0x%x", (UINT)pstClassifierRule->stSrcIpAddress.ulIpv4Mask[ucLoopIndex], (UINT)ulSrcIP, (UINT)pstClassifierRule->stSrcIpAddress.ulIpv6Addr[ucLoopIndex]); - if ((pstClassifierRule->stSrcIpAddress.ulIpv4Mask[ucLoopIndex] & ulSrcIP) == - (pstClassifierRule->stSrcIpAddress.ulIpv4Addr[ucLoopIndex] & pstClassifierRule->stSrcIpAddress.ulIpv4Mask[ucLoopIndex])) + src_addr = &pstClassifierRule->stSrcIpAddress; + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Src Ip Address Mask:0x%x PacketIp:0x%x and Classification:0x%x", + (UINT)src_addr->ulIpv4Mask[ucLoopIndex], + (UINT)ulSrcIP, + (UINT)src_addr->ulIpv6Addr[ucLoopIndex]); + + if ((src_addr->ulIpv4Mask[ucLoopIndex] & ulSrcIP) == + (src_addr->ulIpv4Addr[ucLoopIndex] & src_addr->ulIpv4Mask[ucLoopIndex])) return TRUE; } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Ip Address Not Matched"); -- cgit From e6afae38544a969b0db3bd746972aa5da18a218c Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:14 +0200 Subject: Staging: bcm: Qos.c: Replaced member accessing with variable in MatchDestIpAddress() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 769adb7b32de..817d1151aaf3 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -77,15 +77,16 @@ static bool MatchDestIpAddress(struct bcm_classifier_rule *pstClassifierRule, UL { UCHAR ucLoopIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); + union u_ip_address *dest_addr = &pstClassifierRule->stDestIpAddress; ulDestIP = ntohl(ulDestIP); if (0 == pstClassifierRule->ucIPDestinationAddressLength) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Ip Address 0x%x 0x%x 0x%x ", (UINT)ulDestIP, (UINT)pstClassifierRule->stDestIpAddress.ulIpv4Mask[ucLoopIndex], (UINT)pstClassifierRule->stDestIpAddress.ulIpv4Addr[ucLoopIndex]); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Ip Address 0x%x 0x%x 0x%x ", (UINT)ulDestIP, (UINT)dest_addr->ulIpv4Mask[ucLoopIndex], (UINT)dest_addr->ulIpv4Addr[ucLoopIndex]); for (ucLoopIndex = 0; ucLoopIndex < (pstClassifierRule->ucIPDestinationAddressLength); ucLoopIndex++) { - if ((pstClassifierRule->stDestIpAddress.ulIpv4Mask[ucLoopIndex] & ulDestIP) == - (pstClassifierRule->stDestIpAddress.ulIpv4Addr[ucLoopIndex] & pstClassifierRule->stDestIpAddress.ulIpv4Mask[ucLoopIndex])) + if ((dest_addr->ulIpv4Mask[ucLoopIndex] & ulDestIP) == + (dest_addr->ulIpv4Addr[ucLoopIndex] & dest_addr->ulIpv4Mask[ucLoopIndex])) return TRUE; } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Ip Address Not Matched"); -- cgit From 6ff4d01016bae45e635c5e646aa6a619ba320ab9 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:15 +0200 Subject: Staging: bcm: Qos.c: Replaced do-while(0) jumps with goto and label, removes one level of indentation Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 115 +++++++++++++++++++++++----------------------- 1 file changed, 57 insertions(+), 58 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 817d1151aaf3..c4a75a8343fa 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -219,67 +219,66 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, xprt_hdr = (struct bcm_transport_header *)((PUCHAR)iphd + sizeof(struct iphdr)); - do { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to see Direction = %d %d", - pstClassifierRule->ucDirection, - pstClassifierRule->usVCID_Value); - - /* Checking classifier validity */ - if (!pstClassifierRule->bUsed || pstClassifierRule->ucDirection == DOWNLINK_DIR) - break; - - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "is IPv6 check!"); - if (pstClassifierRule->bIpv6Protocol) - break; - - /* Checking IP header parameter */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to match Source IP Address"); - if (!MatchSrcIpAddress(pstClassifierRule, iphd->saddr)) - break; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source IP Address Matched"); - - if (!MatchDestIpAddress(pstClassifierRule, iphd->daddr)) - break; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination IP Address Matched"); - - if (!MatchTos(pstClassifierRule, iphd->tos)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Match failed\n"); - break; - } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Matched"); - - if (!MatchProtocol(pstClassifierRule, iphd->protocol)) - break; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol Matched"); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to see Direction = %d %d", + pstClassifierRule->ucDirection, + pstClassifierRule->usVCID_Value); + + /* Checking classifier validity */ + if (!pstClassifierRule->bUsed || pstClassifierRule->ucDirection == DOWNLINK_DIR) + goto out; + + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "is IPv6 check!"); + if (pstClassifierRule->bIpv6Protocol) + goto out; + + /* Checking IP header parameter */ + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to match Source IP Address"); + if (!MatchSrcIpAddress(pstClassifierRule, iphd->saddr)) + goto out; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source IP Address Matched"); + + if (!MatchDestIpAddress(pstClassifierRule, iphd->daddr)) + goto out; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination IP Address Matched"); + + if (!MatchTos(pstClassifierRule, iphd->tos)) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Match failed\n"); + goto out; + } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Matched"); - /* - * if protocol is not TCP or UDP then no - * need of comparing source port and destination port - */ - if (iphd->protocol != TCP && iphd->protocol != UDP) { - bClassificationSucceed = TRUE; - break; - } - /* Checking Transport Layer Header field if present */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source Port %04x", - (iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source); + if (!MatchProtocol(pstClassifierRule, iphd->protocol)) + goto out; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol Matched"); - if (!MatchSrcPort(pstClassifierRule, - ntohs((iphd->protocol == UDP) ? - xprt_hdr->uhdr.source : xprt_hdr->thdr.source))) - break; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Port Matched"); - - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Port %04x", - (iphd->protocol == UDP) ? xprt_hdr->uhdr.dest : - xprt_hdr->thdr.dest); - if (!MatchDestPort(pstClassifierRule, - ntohs((iphd->protocol == UDP) ? - xprt_hdr->uhdr.dest : xprt_hdr->thdr.dest))) - break; + /* + * if protocol is not TCP or UDP then no + * need of comparing source port and destination port + */ + if (iphd->protocol != TCP && iphd->protocol != UDP) { bClassificationSucceed = TRUE; - } while (0); - + goto out; + } + /* Checking Transport Layer Header field if present */ + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source Port %04x", + (iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source); + + if (!MatchSrcPort(pstClassifierRule, + ntohs((iphd->protocol == UDP) ? + xprt_hdr->uhdr.source : xprt_hdr->thdr.source))) + goto out; + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Port Matched"); + + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Port %04x", + (iphd->protocol == UDP) ? xprt_hdr->uhdr.dest : + xprt_hdr->thdr.dest); + if (!MatchDestPort(pstClassifierRule, + ntohs((iphd->protocol == UDP) ? + xprt_hdr->uhdr.dest : xprt_hdr->thdr.dest))) + goto out; + bClassificationSucceed = TRUE; + +out: if (TRUE == bClassificationSucceed) { INT iMatchedSFQueueIndex = 0; -- cgit From a3a741c6518a2fd17b445bcb2dcb4e9d1ac972f0 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:16 +0200 Subject: Staging: bcm: Qos.c: Replaced member accessing with variable in PruneQueue() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index c4a75a8343fa..d01470f28a23 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -318,6 +318,7 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) { struct sk_buff *PacketToDrop = NULL; struct net_device_stats *netstats; + struct bcm_packet_info *curr_pack_info = &Adapter->PackInfo[iIndex]; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "=====> Index %d", iIndex); @@ -330,22 +331,22 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) /* To Store the netdevice statistic */ netstats = &Adapter->dev->stats; - spin_lock_bh(&Adapter->PackInfo[iIndex].SFQueueLock); + spin_lock_bh(&curr_pack_info->SFQueueLock); while (1) { /* while((UINT)Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost > */ /* SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "uiCurrentBytesOnHost:%x uiMaxBucketSize :%x", - Adapter->PackInfo[iIndex].uiCurrentBytesOnHost, - Adapter->PackInfo[iIndex].uiMaxBucketSize); + curr_pack_info->uiCurrentBytesOnHost, + curr_pack_info->uiMaxBucketSize); - PacketToDrop = Adapter->PackInfo[iIndex].FirstTxQueue; + PacketToDrop = curr_pack_info->FirstTxQueue; if (PacketToDrop == NULL) break; - if ((Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost < SF_MAX_ALLOWED_PACKETS_TO_BACKUP) && - ((1000*(jiffies - *((B_UINT32 *)(PacketToDrop->cb)+SKB_CB_LATENCY_OFFSET))/HZ) <= Adapter->PackInfo[iIndex].uiMaxLatency)) + if ((curr_pack_info->uiCurrentPacketsOnHost < SF_MAX_ALLOWED_PACKETS_TO_BACKUP) && + ((1000*(jiffies - *((B_UINT32 *)(PacketToDrop->cb)+SKB_CB_LATENCY_OFFSET))/HZ) <= curr_pack_info->uiMaxLatency)) break; if (PacketToDrop) { @@ -355,27 +356,27 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) netstats->tx_dropped++; - DEQUEUEPACKET(Adapter->PackInfo[iIndex].FirstTxQueue, - Adapter->PackInfo[iIndex].LastTxQueue); + DEQUEUEPACKET(curr_pack_info->FirstTxQueue, + curr_pack_info->LastTxQueue); /* update current bytes and packets count */ - Adapter->PackInfo[iIndex].uiCurrentBytesOnHost -= + curr_pack_info->uiCurrentBytesOnHost -= PacketToDrop->len; - Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost--; + curr_pack_info->uiCurrentPacketsOnHost--; /* update dropped bytes and packets counts */ - Adapter->PackInfo[iIndex].uiDroppedCountBytes += PacketToDrop->len; - Adapter->PackInfo[iIndex].uiDroppedCountPackets++; + curr_pack_info->uiDroppedCountBytes += PacketToDrop->len; + curr_pack_info->uiDroppedCountPackets++; dev_kfree_skb(PacketToDrop); } BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "Dropped Bytes:%x Dropped Packets:%x", - Adapter->PackInfo[iIndex].uiDroppedCountBytes, - Adapter->PackInfo[iIndex].uiDroppedCountPackets); + curr_pack_info->uiDroppedCountBytes, + curr_pack_info->uiDroppedCountPackets); atomic_dec(&Adapter->TotalPacketCount); } - spin_unlock_bh(&Adapter->PackInfo[iIndex].SFQueueLock); + spin_unlock_bh(&curr_pack_info->SFQueueLock); BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "TotalPacketCount:%x", atomic_read(&Adapter->TotalPacketCount)); -- cgit From 81797eaf798ca6e2dd62c636de43739289515917 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:17 +0200 Subject: Staging: bcm: Qos.c: Replaced member accessing by variable in flush_all_queues() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index d01470f28a23..e59abe42cf94 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -388,42 +388,44 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) INT iQIndex; UINT uiTotalPacketLength; struct sk_buff *PacketToDrop = NULL; + struct bcm_packet_info *curr_packet_info; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "=====>"); /* down(&Adapter->data_packet_queue_lock); */ for (iQIndex = LowPriority; iQIndex < HiPriority; iQIndex++) { struct net_device_stats *netstats = &Adapter->dev->stats; + curr_packet_info = &Adapter->PackInfo[iQIndex]; - spin_lock_bh(&Adapter->PackInfo[iQIndex].SFQueueLock); - while (Adapter->PackInfo[iQIndex].FirstTxQueue) { - PacketToDrop = Adapter->PackInfo[iQIndex].FirstTxQueue; + spin_lock_bh(&curr_packet_info->SFQueueLock); + while (curr_packet_info->FirstTxQueue) { + PacketToDrop = curr_packet_info->FirstTxQueue; if (PacketToDrop) { uiTotalPacketLength = PacketToDrop->len; netstats->tx_dropped++; } else uiTotalPacketLength = 0; - DEQUEUEPACKET(Adapter->PackInfo[iQIndex].FirstTxQueue, - Adapter->PackInfo[iQIndex].LastTxQueue); + DEQUEUEPACKET(curr_packet_info->FirstTxQueue, + curr_packet_info->LastTxQueue); /* Free the skb */ dev_kfree_skb(PacketToDrop); /* update current bytes and packets count */ - Adapter->PackInfo[iQIndex].uiCurrentBytesOnHost -= uiTotalPacketLength; - Adapter->PackInfo[iQIndex].uiCurrentPacketsOnHost--; + curr_packet_info->uiCurrentBytesOnHost -= uiTotalPacketLength; + curr_packet_info->uiCurrentPacketsOnHost--; /* update dropped bytes and packets counts */ - Adapter->PackInfo[iQIndex].uiDroppedCountBytes += uiTotalPacketLength; - Adapter->PackInfo[iQIndex].uiDroppedCountPackets++; + curr_packet_info->uiDroppedCountBytes += uiTotalPacketLength; + curr_packet_info->uiDroppedCountPackets++; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "Dropped Bytes:%x Dropped Packets:%x", - Adapter->PackInfo[iQIndex].uiDroppedCountBytes, - Adapter->PackInfo[iQIndex].uiDroppedCountPackets); + curr_packet_info->uiDroppedCountBytes, + curr_packet_info->uiDroppedCountPackets); atomic_dec(&Adapter->TotalPacketCount); } - spin_unlock_bh(&Adapter->PackInfo[iQIndex].SFQueueLock); + spin_unlock_bh(&curr_packet_info->SFQueueLock); } /* up(&Adapter->data_packet_queue_lock); */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "<====="); -- cgit From b8ab70b046a9baf02f5e02412c265578b1b24953 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:18 +0200 Subject: Staging: bcm: Qos.c: Replaced do-while(0) breaks with continue This patch replaces the do-while(0); loop which is used for breaking if a check fails by using the `continue` statement. This saves one indentation level. Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 95 +++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 49 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index e59abe42cf94..2cc87b576415 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -501,70 +501,67 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) * Iterate through all classifiers which are already in order of priority * to classify the packet until match found */ - do { - if (false == Adapter->astClassifierTable[uiLoopIndex].bUsed) { - bClassificationSucceed = false; - break; - } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Adapter->PackInfo[%d].bvalid=True\n", uiLoopIndex); + if (false == Adapter->astClassifierTable[uiLoopIndex].bUsed) { + bClassificationSucceed = false; + continue; + } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Adapter->PackInfo[%d].bvalid=True\n", uiLoopIndex); - if (0 == Adapter->astClassifierTable[uiLoopIndex].ucDirection) { - bClassificationSucceed = false; /* cannot be processed for classification. */ - break; /* it is a down link connection */ - } + if (0 == Adapter->astClassifierTable[uiLoopIndex].ucDirection) { + bClassificationSucceed = false; /* cannot be processed for classification. */ + continue; /* it is a down link connection */ + } - pstClassifierRule = &Adapter->astClassifierTable[uiLoopIndex]; + pstClassifierRule = &Adapter->astClassifierTable[uiLoopIndex]; - uiSfIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); - if (uiSfIndex >= NO_OF_QUEUES) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Queue Not Valid. SearchSfid for this classifier Failed\n"); - break; - } + uiSfIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); + if (uiSfIndex >= NO_OF_QUEUES) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Queue Not Valid. SearchSfid for this classifier Failed\n"); + continue; + } - if (Adapter->PackInfo[uiSfIndex].bEthCSSupport) { + if (Adapter->PackInfo[uiSfIndex].bEthCSSupport) { - if (eEthUnsupportedFrame == stEthCsPktInfo.eNwpktEthFrameType) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a Valid Supported Ethernet Frame\n"); - bClassificationSucceed = false; - break; - } + if (eEthUnsupportedFrame == stEthCsPktInfo.eNwpktEthFrameType) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a Valid Supported Ethernet Frame\n"); + bClassificationSucceed = false; + continue; + } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Performing ETH CS Classification on Classifier Rule ID : %x Service Flow ID : %lx\n", pstClassifierRule->uiClassifierRuleIndex, Adapter->PackInfo[uiSfIndex].ulSFID); - bClassificationSucceed = EThCSClassifyPkt(Adapter, skb, &stEthCsPktInfo, pstClassifierRule, Adapter->PackInfo[uiSfIndex].bEthCSSupport); + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Performing ETH CS Classification on Classifier Rule ID : %x Service Flow ID : %lx\n", pstClassifierRule->uiClassifierRuleIndex, Adapter->PackInfo[uiSfIndex].ulSFID); + bClassificationSucceed = EThCSClassifyPkt(Adapter, skb, &stEthCsPktInfo, pstClassifierRule, Adapter->PackInfo[uiSfIndex].bEthCSSupport); - if (!bClassificationSucceed) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Ethernet CS Classification Failed\n"); - break; - } - } else { /* No ETH Supported on this SF */ - if (eEthOtherFrame != stEthCsPktInfo.eNwpktEthFrameType) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a 802.3 Ethernet Frame... hence not allowed over non-ETH CS SF\n"); - bClassificationSucceed = false; - break; - } + if (!bClassificationSucceed) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Ethernet CS Classification Failed\n"); + continue; } + } else { /* No ETH Supported on this SF */ + if (eEthOtherFrame != stEthCsPktInfo.eNwpktEthFrameType) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a 802.3 Ethernet Frame... hence not allowed over non-ETH CS SF\n"); + bClassificationSucceed = false; + continue; + } + } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Proceeding to IP CS Clasification"); - - if (Adapter->PackInfo[uiSfIndex].bIPCSSupport) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Proceeding to IP CS Clasification"); - if (stEthCsPktInfo.eNwpktIPFrameType == eNonIPPacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet is Not an IP Packet\n"); - bClassificationSucceed = false; - break; - } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Dump IP Header :\n"); - DumpFullPacket((PUCHAR)pIpHeader, 20); + if (Adapter->PackInfo[uiSfIndex].bIPCSSupport) { - if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) - bClassificationSucceed = IpVersion4(Adapter, pIpHeader, pstClassifierRule); - else if (stEthCsPktInfo.eNwpktIPFrameType == eIPv6Packet) - bClassificationSucceed = IpVersion6(Adapter, pIpHeader, pstClassifierRule); + if (stEthCsPktInfo.eNwpktIPFrameType == eNonIPPacket) { + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet is Not an IP Packet\n"); + bClassificationSucceed = false; + continue; } + BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Dump IP Header :\n"); + DumpFullPacket((PUCHAR)pIpHeader, 20); - } while (0); + if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) + bClassificationSucceed = IpVersion4(Adapter, pIpHeader, pstClassifierRule); + else if (stEthCsPktInfo.eNwpktIPFrameType == eIPv6Packet) + bClassificationSucceed = IpVersion6(Adapter, pIpHeader, pstClassifierRule); + } } if (bClassificationSucceed == TRUE) { -- cgit From 1ccbecddbcc3aa44e070221b64316bed14c93025 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:19 +0200 Subject: Staging: bcm: Qos.c: Replaced if-else return with ternary operator Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 2cc87b576415..9455c25e2341 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -605,10 +605,7 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) } - if (bClassificationSucceed) - return usIndex; - else - return INVALID_QUEUE_INDEX; + return (bClassificationSucceed ? usIndex : INVALID_QUEUE_INDEX); } static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRule, PUCHAR Mac) -- cgit From b2e6c772e4cb2db6c4501d2887569e22db22ed32 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:20 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchSrcIpAddress() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 9455c25e2341..f3cef8692529 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -42,7 +42,9 @@ static bool MatchSrcIpAddress(struct bcm_classifier_rule *pstClassifierRule, ulSrcIP = ntohl(ulSrcIP); if (0 == pstClassifierRule->ucIPSourceAddressLength) return TRUE; - for (ucLoopIndex = 0; ucLoopIndex < (pstClassifierRule->ucIPSourceAddressLength); ucLoopIndex++) { + for (ucLoopIndex = 0; + ucLoopIndex < (pstClassifierRule->ucIPSourceAddressLength); + ucLoopIndex++) { src_addr = &pstClassifierRule->stSrcIpAddress; BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, @@ -54,10 +56,15 @@ static bool MatchSrcIpAddress(struct bcm_classifier_rule *pstClassifierRule, (UINT)src_addr->ulIpv6Addr[ucLoopIndex]); if ((src_addr->ulIpv4Mask[ucLoopIndex] & ulSrcIP) == - (src_addr->ulIpv4Addr[ucLoopIndex] & src_addr->ulIpv4Mask[ucLoopIndex])) + (src_addr->ulIpv4Addr[ucLoopIndex] & + src_addr->ulIpv4Mask[ucLoopIndex])) return TRUE; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Ip Address Not Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Src Ip Address Not Matched"); return false; } -- cgit From bacc620b1d064153716b479d57f774a46946bb42 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:21 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchDestIpAddress() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index f3cef8692529..9465817bf0ba 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -89,14 +89,28 @@ static bool MatchDestIpAddress(struct bcm_classifier_rule *pstClassifierRule, UL ulDestIP = ntohl(ulDestIP); if (0 == pstClassifierRule->ucIPDestinationAddressLength) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Ip Address 0x%x 0x%x 0x%x ", (UINT)ulDestIP, (UINT)dest_addr->ulIpv4Mask[ucLoopIndex], (UINT)dest_addr->ulIpv4Addr[ucLoopIndex]); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Destination Ip Address 0x%x 0x%x 0x%x ", + (UINT)ulDestIP, + (UINT)dest_addr->ulIpv4Mask[ucLoopIndex], + (UINT)dest_addr->ulIpv4Addr[ucLoopIndex]); - for (ucLoopIndex = 0; ucLoopIndex < (pstClassifierRule->ucIPDestinationAddressLength); ucLoopIndex++) { + for (ucLoopIndex = 0; + ucLoopIndex < (pstClassifierRule->ucIPDestinationAddressLength); + ucLoopIndex++) { if ((dest_addr->ulIpv4Mask[ucLoopIndex] & ulDestIP) == - (dest_addr->ulIpv4Addr[ucLoopIndex] & dest_addr->ulIpv4Mask[ucLoopIndex])) + (dest_addr->ulIpv4Addr[ucLoopIndex] & + dest_addr->ulIpv4Mask[ucLoopIndex])) return TRUE; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Ip Address Not Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Destination Ip Address Not Matched"); return false; } -- cgit From 0144b84e0c3593f5c62d0dbf29d477b6760f2ab5 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:22 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchTos() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 9465817bf0ba..b24ee8ad2b03 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -125,17 +125,25 @@ static bool MatchDestIpAddress(struct bcm_classifier_rule *pstClassifierRule, UL * * Returns - TRUE(If address matches) else FAIL. **************************************************************************/ -static bool MatchTos(struct bcm_classifier_rule *pstClassifierRule, UCHAR ucTypeOfService) +static bool MatchTos(struct bcm_classifier_rule *pstClassifierRule, + UCHAR ucTypeOfService) { struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (3 != pstClassifierRule->ucIPTypeOfServiceLength) return TRUE; - if (((pstClassifierRule->ucTosMask & ucTypeOfService) <= pstClassifierRule->ucTosHigh) && ((pstClassifierRule->ucTosMask & ucTypeOfService) >= pstClassifierRule->ucTosLow)) + if (((pstClassifierRule->ucTosMask & ucTypeOfService) <= + pstClassifierRule->ucTosHigh) && + ((pstClassifierRule->ucTosMask & ucTypeOfService) >= + pstClassifierRule->ucTosLow)) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Type Of Service Not Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Type Of Service Not Matched"); return false; } -- cgit From fcaa42c71af297c330abaa6a98ee06b84ab93e29 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:23 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchProtocol() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index b24ee8ad2b03..891f6906715c 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -158,19 +158,32 @@ static bool MatchTos(struct bcm_classifier_rule *pstClassifierRule, * * Returns - TRUE(If address matches) else FAIL. ****************************************************************************/ -bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, UCHAR ucProtocol) +bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, + UCHAR ucProtocol) { UCHAR ucLoopIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (0 == pstClassifierRule->ucProtocolLength) return TRUE; - for (ucLoopIndex = 0; ucLoopIndex < pstClassifierRule->ucProtocolLength; ucLoopIndex++) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol:0x%X Classification Protocol:0x%X", ucProtocol, pstClassifierRule->ucProtocol[ucLoopIndex]); + for (ucLoopIndex = 0; + ucLoopIndex < pstClassifierRule->ucProtocolLength; + ucLoopIndex++) { + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Protocol:0x%X Classification Protocol:0x%X", + ucProtocol, + pstClassifierRule->ucProtocol[ucLoopIndex]); if (pstClassifierRule->ucProtocol[ucLoopIndex] == ucProtocol) return TRUE; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol Not Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Protocol Not Matched"); return false; } -- cgit From 66fa6530fa09b8d773286f19ef36469e9a5a8268 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:24 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchSrcPort() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 891f6906715c..0f733f97c756 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -198,7 +198,8 @@ bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, * * Returns - TRUE(If address matches) else FAIL. ***************************************************************************/ -bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushSrcPort) +bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, + USHORT ushSrcPort) { UCHAR ucLoopIndex = 0; @@ -207,12 +208,19 @@ bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushSrcPo if (0 == pstClassifierRule->ucSrcPortRangeLength) return TRUE; - for (ucLoopIndex = 0; ucLoopIndex < pstClassifierRule->ucSrcPortRangeLength; ucLoopIndex++) { + for (ucLoopIndex = 0; + ucLoopIndex < pstClassifierRule->ucSrcPortRangeLength; + ucLoopIndex++) { if (ushSrcPort <= pstClassifierRule->usSrcPortRangeHi[ucLoopIndex] && ushSrcPort >= pstClassifierRule->usSrcPortRangeLo[ucLoopIndex]) return TRUE; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Port: %x Not Matched ", ushSrcPort); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Src Port: %x Not Matched ", + ushSrcPort); return false; } -- cgit From 5fb136700da05f5257a5a7a2941a95b060ca3823 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:25 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in MatchDestPort() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 0f733f97c756..589bd4256b58 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -235,7 +235,8 @@ bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, * * Returns - TRUE(If address matches) else FAIL. ***************************************************************************/ -bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushDestPort) +bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, + USHORT ushDestPort) { UCHAR ucLoopIndex = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); @@ -243,14 +244,28 @@ bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, USHORT ushDest if (0 == pstClassifierRule->ucDestPortRangeLength) return TRUE; - for (ucLoopIndex = 0; ucLoopIndex < pstClassifierRule->ucDestPortRangeLength; ucLoopIndex++) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Matching Port:0x%X 0x%X 0x%X", ushDestPort, pstClassifierRule->usDestPortRangeLo[ucLoopIndex], pstClassifierRule->usDestPortRangeHi[ucLoopIndex]); + for (ucLoopIndex = 0; + ucLoopIndex < pstClassifierRule->ucDestPortRangeLength; + ucLoopIndex++) { + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Matching Port:0x%X 0x%X 0x%X", + ushDestPort, + pstClassifierRule->usDestPortRangeLo[ucLoopIndex], + pstClassifierRule->usDestPortRangeHi[ucLoopIndex]); if (ushDestPort <= pstClassifierRule->usDestPortRangeHi[ucLoopIndex] && ushDestPort >= pstClassifierRule->usDestPortRangeLo[ucLoopIndex]) return TRUE; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Dest Port: %x Not Matched", ushDestPort); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Dest Port: %x Not Matched", + ushDestPort); return false; } /** -- cgit From a21a3fe440f6d61cd341584b50d621b56ca59d52 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:26 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in IpVersion4() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 96 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 21 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 589bd4256b58..747790d84c63 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -280,41 +280,78 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, struct bcm_transport_header *xprt_hdr = NULL; bool bClassificationSucceed = false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "========>"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "========>"); xprt_hdr = (struct bcm_transport_header *)((PUCHAR)iphd + sizeof(struct iphdr)); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to see Direction = %d %d", - pstClassifierRule->ucDirection, - pstClassifierRule->usVCID_Value); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Trying to see Direction = %d %d", + pstClassifierRule->ucDirection, + pstClassifierRule->usVCID_Value); /* Checking classifier validity */ - if (!pstClassifierRule->bUsed || pstClassifierRule->ucDirection == DOWNLINK_DIR) + if (!pstClassifierRule->bUsed || + pstClassifierRule->ucDirection == DOWNLINK_DIR) goto out; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "is IPv6 check!"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "is IPv6 check!"); if (pstClassifierRule->bIpv6Protocol) goto out; /* Checking IP header parameter */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Trying to match Source IP Address"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Trying to match Source IP Address"); if (!MatchSrcIpAddress(pstClassifierRule, iphd->saddr)) goto out; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source IP Address Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Source IP Address Matched"); if (!MatchDestIpAddress(pstClassifierRule, iphd->daddr)) goto out; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination IP Address Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Destination IP Address Matched"); if (!MatchTos(pstClassifierRule, iphd->tos)) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Match failed\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "TOS Match failed\n"); goto out; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "TOS Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "TOS Matched"); if (!MatchProtocol(pstClassifierRule, iphd->protocol)) goto out; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Protocol Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Protocol Matched"); /* * if protocol is not TCP or UDP then no @@ -325,18 +362,31 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, goto out; } /* Checking Transport Layer Header field if present */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Source Port %04x", - (iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Source Port %04x", + (iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source); if (!MatchSrcPort(pstClassifierRule, ntohs((iphd->protocol == UDP) ? xprt_hdr->uhdr.source : xprt_hdr->thdr.source))) goto out; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Src Port Matched"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Src Port Matched"); + + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Destination Port %04x", + (iphd->protocol == UDP) ? xprt_hdr->uhdr.dest : + xprt_hdr->thdr.dest); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Destination Port %04x", - (iphd->protocol == UDP) ? xprt_hdr->uhdr.dest : - xprt_hdr->thdr.dest); if (!MatchDestPort(pstClassifierRule, ntohs((iphd->protocol == UDP) ? xprt_hdr->uhdr.dest : xprt_hdr->thdr.dest))) @@ -346,15 +396,19 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, out: if (TRUE == bClassificationSucceed) { INT iMatchedSFQueueIndex = 0; - - iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); + iMatchedSFQueueIndex = + SearchSfid(Adapter, pstClassifierRule->ulSFID); if (iMatchedSFQueueIndex >= NO_OF_QUEUES) bClassificationSucceed = false; else if (false == Adapter->PackInfo[iMatchedSFQueueIndex].bActive) bClassificationSucceed = false; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "IpVersion4 <=========="); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "IpVersion4 <=========="); return bClassificationSucceed; } -- cgit From 0f1743418705e431cf4409f1efc51320ed433f5d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:27 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in PruneQueue() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 50 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 13 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 747790d84c63..4bba0a9b152c 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -439,7 +439,12 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) struct net_device_stats *netstats; struct bcm_packet_info *curr_pack_info = &Adapter->PackInfo[iIndex]; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "=====> Index %d", iIndex); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + PRUNE_QUEUE, + DBG_LVL_ALL, + "=====> Index %d", + iIndex); if (iIndex == HiPriority) return; @@ -456,16 +461,23 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) /* while((UINT)Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost > */ /* SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "uiCurrentBytesOnHost:%x uiMaxBucketSize :%x", - curr_pack_info->uiCurrentBytesOnHost, - curr_pack_info->uiMaxBucketSize); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + PRUNE_QUEUE, + DBG_LVL_ALL, + "uiCurrentBytesOnHost:%x uiMaxBucketSize :%x", + curr_pack_info->uiCurrentBytesOnHost, + curr_pack_info->uiMaxBucketSize); PacketToDrop = curr_pack_info->FirstTxQueue; if (PacketToDrop == NULL) break; - if ((curr_pack_info->uiCurrentPacketsOnHost < SF_MAX_ALLOWED_PACKETS_TO_BACKUP) && - ((1000*(jiffies - *((B_UINT32 *)(PacketToDrop->cb)+SKB_CB_LATENCY_OFFSET))/HZ) <= curr_pack_info->uiMaxLatency)) + if ((curr_pack_info->uiCurrentPacketsOnHost < + SF_MAX_ALLOWED_PACKETS_TO_BACKUP) && + ((1000*(jiffies - *((B_UINT32 *)(PacketToDrop->cb) + + SKB_CB_LATENCY_OFFSET))/HZ) <= + curr_pack_info->uiMaxLatency)) break; if (PacketToDrop) { @@ -476,7 +488,7 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) netstats->tx_dropped++; DEQUEUEPACKET(curr_pack_info->FirstTxQueue, - curr_pack_info->LastTxQueue); + curr_pack_info->LastTxQueue); /* update current bytes and packets count */ curr_pack_info->uiCurrentBytesOnHost -= PacketToDrop->len; @@ -488,18 +500,30 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "Dropped Bytes:%x Dropped Packets:%x", - curr_pack_info->uiDroppedCountBytes, - curr_pack_info->uiDroppedCountPackets); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + PRUNE_QUEUE, + DBG_LVL_ALL, + "Dropped Bytes:%x Dropped Packets:%x", + curr_pack_info->uiDroppedCountBytes, + curr_pack_info->uiDroppedCountPackets); atomic_dec(&Adapter->TotalPacketCount); } spin_unlock_bh(&curr_pack_info->SFQueueLock); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "TotalPacketCount:%x", - atomic_read(&Adapter->TotalPacketCount)); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, PRUNE_QUEUE, DBG_LVL_ALL, "<====="); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + PRUNE_QUEUE, + DBG_LVL_ALL, + "TotalPacketCount:%x", + atomic_read(&Adapter->TotalPacketCount)); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + PRUNE_QUEUE, + DBG_LVL_ALL, + "<====="); } VOID flush_all_queues(struct bcm_mini_adapter *Adapter) -- cgit From 34cad16c84d2752e4ea298f6db269734e206ca83 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:28 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in flush_all_queues() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 4bba0a9b152c..1608ba4fbb23 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -533,7 +533,11 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) struct sk_buff *PacketToDrop = NULL; struct bcm_packet_info *curr_packet_info; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "=====>"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_OTHERS, + DUMP_INFO, + DBG_LVL_ALL, + "=====>"); /* down(&Adapter->data_packet_queue_lock); */ for (iQIndex = LowPriority; iQIndex < HiPriority; iQIndex++) { @@ -550,7 +554,7 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) uiTotalPacketLength = 0; DEQUEUEPACKET(curr_packet_info->FirstTxQueue, - curr_packet_info->LastTxQueue); + curr_packet_info->LastTxQueue); /* Free the skb */ dev_kfree_skb(PacketToDrop); @@ -563,7 +567,11 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) curr_packet_info->uiDroppedCountBytes += uiTotalPacketLength; curr_packet_info->uiDroppedCountPackets++; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "Dropped Bytes:%x Dropped Packets:%x", + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_OTHERS, + DUMP_INFO, + DBG_LVL_ALL, + "Dropped Bytes:%x Dropped Packets:%x", curr_packet_info->uiDroppedCountBytes, curr_packet_info->uiDroppedCountPackets); atomic_dec(&Adapter->TotalPacketCount); @@ -571,7 +579,11 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) spin_unlock_bh(&curr_packet_info->SFQueueLock); } /* up(&Adapter->data_packet_queue_lock); */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, DUMP_INFO, DBG_LVL_ALL, "<====="); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_OTHERS, + DUMP_INFO, + DBG_LVL_ALL, + "<====="); } USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) -- cgit From 894bd303e3d03ad2381a6240889e5c0a17bf0bf5 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:29 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in ClassifyPacket() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 193 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 148 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 1608ba4fbb23..2176d28ca1d8 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -607,26 +607,51 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) EThCSGetPktInfo(Adapter, pvEThPayload, &stEthCsPktInfo); switch (stEthCsPktInfo.eNwpktEthFrameType) { - case eEth802LLCFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLCFrame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_frame); - break; - case eEth802LLCSNAPFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802LLC SNAP Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_snap_frame); - break; - case eEth802QVLANFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : 802.1Q VLANFrame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_eth_q_frame); - break; - case eEthOtherFrame: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : ETH Other Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); - break; - default: - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Unrecognized ETH Frame\n"); - pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); - break; + case eEth802LLCFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802LLCFrame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_eth_llc_frame); + break; + case eEth802LLCSNAPFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802LLC SNAP Frame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_eth_llc_snap_frame); + break; + case eEth802QVLANFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802.1Q VLANFrame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_eth_q_frame); + break; + case eEthOtherFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : ETH Other Frame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_ethernet2_frame); + break; + default: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : Unrecognized ETH Frame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_ethernet2_frame); + break; } if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) { @@ -636,15 +661,27 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) if (bFragmentedPkt) { /* Fragmented Packet. Get Frag Classifier Entry. */ - pstClassifierRule = GetFragIPClsEntry(Adapter, pIpHeader->id, pIpHeader->saddr); + pstClassifierRule = GetFragIPClsEntry(Adapter, + pIpHeader->id, + pIpHeader->saddr); if (pstClassifierRule) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "It is next Fragmented pkt"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "It is next Fragmented pkt"); bClassificationSucceed = TRUE; } if (!(ntohs(pIpHeader->frag_off) & IP_MF)) { /* Fragmented Last packet . Remove Frag Classifier Entry */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "This is the last fragmented Pkt"); - DelFragIPClsEntry(Adapter, pIpHeader->id, pIpHeader->saddr); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "This is the last fragmented Pkt"); + DelFragIPClsEntry(Adapter, + pIpHeader->id, + pIpHeader->saddr); } } } @@ -660,7 +697,12 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) bClassificationSucceed = false; continue; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Adapter->PackInfo[%d].bvalid=True\n", uiLoopIndex); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Adapter->PackInfo[%d].bvalid=True\n", + uiLoopIndex); if (0 == Adapter->astClassifierTable[uiLoopIndex].ucDirection) { bClassificationSucceed = false; /* cannot be processed for classification. */ @@ -671,71 +713,131 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) uiSfIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); if (uiSfIndex >= NO_OF_QUEUES) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Queue Not Valid. SearchSfid for this classifier Failed\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Queue Not Valid. SearchSfid for this classifier Failed\n"); continue; } if (Adapter->PackInfo[uiSfIndex].bEthCSSupport) { if (eEthUnsupportedFrame == stEthCsPktInfo.eNwpktEthFrameType) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a Valid Supported Ethernet Frame\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + " ClassifyPacket : Packet Not a Valid Supported Ethernet Frame\n"); bClassificationSucceed = false; continue; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Performing ETH CS Classification on Classifier Rule ID : %x Service Flow ID : %lx\n", pstClassifierRule->uiClassifierRuleIndex, Adapter->PackInfo[uiSfIndex].ulSFID); - bClassificationSucceed = EThCSClassifyPkt(Adapter, skb, &stEthCsPktInfo, pstClassifierRule, Adapter->PackInfo[uiSfIndex].bEthCSSupport); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Performing ETH CS Classification on Classifier Rule ID : %x Service Flow ID : %lx\n", + pstClassifierRule->uiClassifierRuleIndex, + Adapter->PackInfo[uiSfIndex].ulSFID); + bClassificationSucceed = EThCSClassifyPkt(Adapter, + skb, + &stEthCsPktInfo, + pstClassifierRule, + Adapter->PackInfo[uiSfIndex].bEthCSSupport); if (!bClassificationSucceed) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ClassifyPacket : Ethernet CS Classification Failed\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : Ethernet CS Classification Failed\n"); continue; } } else { /* No ETH Supported on this SF */ if (eEthOtherFrame != stEthCsPktInfo.eNwpktEthFrameType) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet Not a 802.3 Ethernet Frame... hence not allowed over non-ETH CS SF\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + " ClassifyPacket : Packet Not a 802.3 Ethernet Frame... hence not allowed over non-ETH CS SF\n"); bClassificationSucceed = false; continue; } } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Proceeding to IP CS Clasification"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Proceeding to IP CS Clasification"); if (Adapter->PackInfo[uiSfIndex].bIPCSSupport) { if (stEthCsPktInfo.eNwpktIPFrameType == eNonIPPacket) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, " ClassifyPacket : Packet is Not an IP Packet\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + " ClassifyPacket : Packet is Not an IP Packet\n"); bClassificationSucceed = false; continue; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "Dump IP Header :\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "Dump IP Header :\n"); DumpFullPacket((PUCHAR)pIpHeader, 20); if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) - bClassificationSucceed = IpVersion4(Adapter, pIpHeader, pstClassifierRule); + bClassificationSucceed = IpVersion4(Adapter, + pIpHeader, + pstClassifierRule); else if (stEthCsPktInfo.eNwpktIPFrameType == eIPv6Packet) - bClassificationSucceed = IpVersion6(Adapter, pIpHeader, pstClassifierRule); + bClassificationSucceed = IpVersion6(Adapter, + pIpHeader, + pstClassifierRule); } } if (bClassificationSucceed == TRUE) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "CF id : %d, SF ID is =%lu", pstClassifierRule->uiClassifierRuleIndex, pstClassifierRule->ulSFID); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "CF id : %d, SF ID is =%lu", + pstClassifierRule->uiClassifierRuleIndex, + pstClassifierRule->ulSFID); /* Store The matched Classifier in SKB */ - *((UINT32 *)(skb->cb)+SKB_CB_CLASSIFICATION_OFFSET) = pstClassifierRule->uiClassifierRuleIndex; - if ((TCP == pIpHeader->protocol) && !bFragmentedPkt && (ETH_AND_IP_HEADER_LEN + TCP_HEADER_LEN <= skb->len)) { + *((UINT32 *)(skb->cb)+SKB_CB_CLASSIFICATION_OFFSET) = + pstClassifierRule->uiClassifierRuleIndex; + if ((TCP == pIpHeader->protocol) && !bFragmentedPkt && + (ETH_AND_IP_HEADER_LEN + TCP_HEADER_LEN <= + skb->len)) { IpHeaderLength = pIpHeader->ihl; - pTcpHeader = (struct bcm_tcp_header *)(((PUCHAR)pIpHeader)+(IpHeaderLength*4)); - TcpHeaderLength = GET_TCP_HEADER_LEN(pTcpHeader->HeaderLength); + pTcpHeader = + (struct bcm_tcp_header *)(((PUCHAR)pIpHeader) + + (IpHeaderLength*4)); + TcpHeaderLength = GET_TCP_HEADER_LEN(pTcpHeader->HeaderLength); if ((pTcpHeader->ucFlags & TCP_ACK) && - (ntohs(pIpHeader->tot_len) == (IpHeaderLength*4)+(TcpHeaderLength*4))) - *((UINT32 *) (skb->cb) + SKB_CB_TCPACK_OFFSET) = TCP_ACK; + (ntohs(pIpHeader->tot_len) == + (IpHeaderLength*4)+(TcpHeaderLength*4))) + *((UINT32 *) (skb->cb) + SKB_CB_TCPACK_OFFSET) = + TCP_ACK; } usIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "index is =%d", usIndex); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "index is =%d", + usIndex); /* * If this is the first fragment of a Fragmented pkt, @@ -752,7 +854,8 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) stFragPktInfo.bUsed = TRUE; stFragPktInfo.ulSrcIpAddress = pIpHeader->saddr; stFragPktInfo.usIpIdentification = pIpHeader->id; - stFragPktInfo.pstMatchedClassifierEntry = pstClassifierRule; + stFragPktInfo.pstMatchedClassifierEntry = + pstClassifierRule; stFragPktInfo.bOutOfOrderFragment = false; AddFragIPClsEntry(Adapter, &stFragPktInfo); } -- cgit From 2a69ef5b02c9909cbb22a4f6dbc1cd010d2fbc47 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:30 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EthCSMatchSrcMACAdress() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 2176d28ca1d8..989525215bc8 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -866,18 +866,32 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) return (bClassificationSucceed ? usIndex : INVALID_QUEUE_INDEX); } -static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRule, PUCHAR Mac) +static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRule, + PUCHAR Mac) { UINT i = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (pstClassifierRule->ucEthCSSrcMACLen == 0) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s\n", __func__); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s\n", __func__); for (i = 0; i < MAC_ADDRESS_SIZE; i++) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "SRC MAC[%x] = %x ClassifierRuleSrcMAC = %x Mask : %x\n", i, Mac[i], pstClassifierRule->au8EThCSSrcMAC[i], pstClassifierRule->au8EThCSSrcMACMask[i]); - if ((pstClassifierRule->au8EThCSSrcMAC[i] & pstClassifierRule->au8EThCSSrcMACMask[i]) != - (Mac[i] & pstClassifierRule->au8EThCSSrcMACMask[i])) + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "SRC MAC[%x] = %x ClassifierRuleSrcMAC = %x Mask : %x\n", + i, + Mac[i], + pstClassifierRule->au8EThCSSrcMAC[i], + pstClassifierRule->au8EThCSSrcMACMask[i]); + if ((pstClassifierRule->au8EThCSSrcMAC[i] & + pstClassifierRule->au8EThCSSrcMACMask[i]) != + (Mac[i] & pstClassifierRule->au8EThCSSrcMACMask[i])) return false; } return TRUE; -- cgit From e519545e7606708fcc2873ad97854593f28cb764 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:31 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EthCSMatchDestMACAdress() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 989525215bc8..ee50481aa643 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -897,18 +897,33 @@ static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRul return TRUE; } -static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRule, PUCHAR Mac) +static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRule, + PUCHAR Mac) { UINT i = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); if (pstClassifierRule->ucEthCSDestMACLen == 0) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s\n", __func__); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s\n", + __func__); for (i = 0; i < MAC_ADDRESS_SIZE; i++) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "SRC MAC[%x] = %x ClassifierRuleSrcMAC = %x Mask : %x\n", i, Mac[i], pstClassifierRule->au8EThCSDestMAC[i], pstClassifierRule->au8EThCSDestMACMask[i]); - if ((pstClassifierRule->au8EThCSDestMAC[i] & pstClassifierRule->au8EThCSDestMACMask[i]) != - (Mac[i] & pstClassifierRule->au8EThCSDestMACMask[i])) + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "SRC MAC[%x] = %x ClassifierRuleSrcMAC = %x Mask : %x\n", + i, + Mac[i], + pstClassifierRule->au8EThCSDestMAC[i], + pstClassifierRule->au8EThCSDestMACMask[i]); + if ((pstClassifierRule->au8EThCSDestMAC[i] & + pstClassifierRule->au8EThCSDestMACMask[i]) != + (Mac[i] & pstClassifierRule->au8EThCSDestMACMask[i])) return false; } return TRUE; -- cgit From 3343b2ec4b4c928546955132b5de07a3aff8d475 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:32 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EthCSMatchEThTypeSAP() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index ee50481aa643..f5f85d7d21e6 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -929,7 +929,9 @@ static bool EthCSMatchDestMACAddress(struct bcm_classifier_rule *pstClassifierRu return TRUE; } -static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo) +static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, + struct sk_buff *skb, + struct bcm_eth_packet_info *pstEthCsPktInfo) { struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); @@ -937,11 +939,27 @@ static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, (pstClassifierRule->au8EthCSEtherType[0] == 0)) return TRUE; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s SrcEtherType:%x CLS EtherType[0]:%x\n", __func__, pstEthCsPktInfo->usEtherType, pstClassifierRule->au8EthCSEtherType[0]); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s SrcEtherType:%x CLS EtherType[0]:%x\n", + __func__, + pstEthCsPktInfo->usEtherType, + pstClassifierRule->au8EthCSEtherType[0]); if (pstClassifierRule->au8EthCSEtherType[0] == 1) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s CLS EtherType[1]:%x EtherType[2]:%x\n", __func__, pstClassifierRule->au8EthCSEtherType[1], pstClassifierRule->au8EthCSEtherType[2]); - - if (memcmp(&pstEthCsPktInfo->usEtherType, &pstClassifierRule->au8EthCSEtherType[1], 2) == 0) + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s CLS EtherType[1]:%x EtherType[2]:%x\n", + __func__, + pstClassifierRule->au8EthCSEtherType[1], + pstClassifierRule->au8EthCSEtherType[2]); + + if (memcmp(&pstEthCsPktInfo->usEtherType, + &pstClassifierRule->au8EthCSEtherType[1], + 2) == 0) return TRUE; else return false; @@ -951,8 +969,16 @@ static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, if (eEth802LLCFrame != pstEthCsPktInfo->eNwpktEthFrameType) return false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s EthCS DSAP:%x EtherType[2]:%x\n", __func__, pstEthCsPktInfo->ucDSAP, pstClassifierRule->au8EthCSEtherType[2]); - if (pstEthCsPktInfo->ucDSAP == pstClassifierRule->au8EthCSEtherType[2]) + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s EthCS DSAP:%x EtherType[2]:%x\n", + __func__, + pstEthCsPktInfo->ucDSAP, + pstClassifierRule->au8EthCSEtherType[2]); + if (pstEthCsPktInfo->ucDSAP == + pstClassifierRule->au8EthCSEtherType[2]) return TRUE; else return false; -- cgit From aed831f86bf4d644a83a45a8639186b5b72c5b61 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:33 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EthCSMatchVLANRules() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 53 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index f5f85d7d21e6..3ab287e875db 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -989,43 +989,70 @@ static bool EthCSMatchEThTypeSAP(struct bcm_classifier_rule *pstClassifierRule, } -static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, struct sk_buff *skb, struct bcm_eth_packet_info *pstEthCsPktInfo) +static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, + struct sk_buff *skb, + struct bcm_eth_packet_info *pstEthCsPktInfo) { bool bClassificationSucceed = false; USHORT usVLANID; B_UINT8 uPriority = 0; struct bcm_mini_adapter *Adapter = GET_BCM_ADAPTER(gblpnetdev); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s CLS UserPrio:%x CLS VLANID:%x\n", __func__, ntohs(*((USHORT *)pstClassifierRule->usUserPriority)), pstClassifierRule->usVLANID); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s CLS UserPrio:%x CLS VLANID:%x\n", + __func__, + ntohs(*((USHORT *)pstClassifierRule->usUserPriority)), + pstClassifierRule->usVLANID); /* * In case FW didn't receive the TLV, * the priority field should be ignored */ - if (pstClassifierRule->usValidityBitMap & (1<usValidityBitMap & + (1<eNwpktEthFrameType != eEth802QVLANFrame) return false; - uPriority = (ntohs(*(USHORT *)(skb->data + sizeof(struct bcm_eth_header))) & 0xF000) >> 13; + uPriority = (ntohs(*(USHORT *)(skb->data + + sizeof(struct bcm_eth_header))) & + 0xF000) >> 13; - if ((uPriority >= pstClassifierRule->usUserPriority[0]) && (uPriority <= pstClassifierRule->usUserPriority[1])) - bClassificationSucceed = TRUE; + if ((uPriority >= pstClassifierRule->usUserPriority[0]) && + (uPriority <= + pstClassifierRule->usUserPriority[1])) + bClassificationSucceed = TRUE; if (!bClassificationSucceed) return false; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS 802.1 D User Priority Rule Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS 802.1 D User Priority Rule Matched\n"); bClassificationSucceed = false; - if (pstClassifierRule->usValidityBitMap & (1<usValidityBitMap & + (1<eNwpktEthFrameType != eEth802QVLANFrame) return false; - usVLANID = ntohs(*(USHORT *)(skb->data + sizeof(struct bcm_eth_header))) & 0xFFF; + usVLANID = ntohs(*(USHORT *)(skb->data + + sizeof(struct bcm_eth_header))) & 0xFFF; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "%s Pkt VLANID %x Priority: %d\n", __func__, usVLANID, uPriority); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "%s Pkt VLANID %x Priority: %d\n", + __func__, + usVLANID, + uPriority); if (usVLANID == ((pstClassifierRule->usVLANID & 0xFFF0) >> 4)) bClassificationSucceed = TRUE; @@ -1034,7 +1061,11 @@ static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, s return false; } - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS 802.1 Q VLAN ID Rule Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS 802.1 Q VLAN ID Rule Matched\n"); return TRUE; } -- cgit From a06de46a092036f0818b3119aba8576fe8b713af Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:34 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EThCSClassifyPkt() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 3ab287e875db..b277ae6ae177 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -1071,35 +1071,58 @@ static bool EthCSMatchVLANRules(struct bcm_classifier_rule *pstClassifierRule, } -static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, struct sk_buff *skb, - struct bcm_eth_packet_info *pstEthCsPktInfo, - struct bcm_classifier_rule *pstClassifierRule, - B_UINT8 EthCSCupport) +static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, + struct sk_buff *skb, + struct bcm_eth_packet_info *pstEthCsPktInfo, + struct bcm_classifier_rule *pstClassifierRule, + B_UINT8 EthCSCupport) { bool bClassificationSucceed = false; - bClassificationSucceed = EthCSMatchSrcMACAddress(pstClassifierRule, ((struct bcm_eth_header *)(skb->data))->au8SourceAddress); + bClassificationSucceed = EthCSMatchSrcMACAddress(pstClassifierRule, + ((struct bcm_eth_header *)(skb->data))->au8SourceAddress); if (!bClassificationSucceed) return false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS SrcMAC Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS SrcMAC Matched\n"); - bClassificationSucceed = EthCSMatchDestMACAddress(pstClassifierRule, ((struct bcm_eth_header *)(skb->data))->au8DestinationAddress); + bClassificationSucceed = EthCSMatchDestMACAddress(pstClassifierRule, + ((struct bcm_eth_header *)(skb->data))->au8DestinationAddress); if (!bClassificationSucceed) return false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS DestMAC Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS DestMAC Matched\n"); /* classify on ETHType/802.2SAP TLV */ - bClassificationSucceed = EthCSMatchEThTypeSAP(pstClassifierRule, skb, pstEthCsPktInfo); + bClassificationSucceed = EthCSMatchEThTypeSAP(pstClassifierRule, + skb, + pstEthCsPktInfo); if (!bClassificationSucceed) return false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS EthType/802.2SAP Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS EthType/802.2SAP Matched\n"); /* classify on 802.1VLAN Header Parameters */ - bClassificationSucceed = EthCSMatchVLANRules(pstClassifierRule, skb, pstEthCsPktInfo); + bClassificationSucceed = EthCSMatchVLANRules(pstClassifierRule, + skb, + pstEthCsPktInfo); if (!bClassificationSucceed) return false; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "ETH CS 802.1 VLAN Rules Matched\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ETH CS 802.1 VLAN Rules Matched\n"); return bClassificationSucceed; } -- cgit From 5849169b55e8f7139fde5a5429efcf7942dcdf17 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:35 +0200 Subject: Staging: bcm: Qos.c: Line length / Whitespace cleanup in EThCSGetPktInfo() Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 51 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index b277ae6ae177..f8eb3fe1acbe 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -1127,14 +1127,25 @@ static bool EThCSClassifyPkt(struct bcm_mini_adapter *Adapter, return bClassificationSucceed; } -static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload, +static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, + PVOID pvEthPayload, struct bcm_eth_packet_info *pstEthCsPktInfo) { - USHORT u16Etype = ntohs(((struct bcm_eth_header *)pvEthPayload)->u16Etype); + USHORT u16Etype = ntohs( + ((struct bcm_eth_header *)pvEthPayload)->u16Etype); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCSGetPktInfo : Eth Hdr Type : %X\n", u16Etype); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "EthCSGetPktInfo : Eth Hdr Type : %X\n", + u16Etype); if (u16Etype > 0x5dc) { - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCSGetPktInfo : ETH2 Frame\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "EthCSGetPktInfo : ETH2 Frame\n"); /* ETH2 Frame */ if (u16Etype == ETHERNET_FRAMETYPE_802QVLAN) { /* 802.1Q VLAN Header */ @@ -1147,9 +1158,14 @@ static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload } } else { /* 802.2 LLC */ - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "802.2 LLC Frame\n"); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "802.2 LLC Frame\n"); pstEthCsPktInfo->eNwpktEthFrameType = eEth802LLCFrame; - pstEthCsPktInfo->ucDSAP = ((struct bcm_eth_llc_frame *)pvEthPayload)->DSAP; + pstEthCsPktInfo->ucDSAP = + ((struct bcm_eth_llc_frame *)pvEthPayload)->DSAP; if (pstEthCsPktInfo->ucDSAP == 0xAA && ((struct bcm_eth_llc_frame *)pvEthPayload)->SSAP == 0xAA) { /* SNAP Frame */ pstEthCsPktInfo->eNwpktEthFrameType = eEth802LLCSNAPFrame; @@ -1164,10 +1180,23 @@ static void EThCSGetPktInfo(struct bcm_mini_adapter *Adapter, PVOID pvEthPayload pstEthCsPktInfo->eNwpktIPFrameType = eNonIPPacket; pstEthCsPktInfo->usEtherType = ((struct bcm_eth_header *)pvEthPayload)->u16Etype; - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCsPktInfo->eNwpktIPFrameType : %x\n", pstEthCsPktInfo->eNwpktIPFrameType); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCsPktInfo->eNwpktEthFrameType : %x\n", pstEthCsPktInfo->eNwpktEthFrameType); - BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, IPV4_DBG, DBG_LVL_ALL, "EthCsPktInfo->usEtherType : %x\n", pstEthCsPktInfo->usEtherType); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "EthCsPktInfo->eNwpktIPFrameType : %x\n", + pstEthCsPktInfo->eNwpktIPFrameType); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "EthCsPktInfo->eNwpktEthFrameType : %x\n", + pstEthCsPktInfo->eNwpktEthFrameType); + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "EthCsPktInfo->usEtherType : %x\n", + pstEthCsPktInfo->usEtherType); } - - -- cgit From b7450ca8c73c26df7092fd83a84877ef56e12b8d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:36 +0200 Subject: Staging: bcm: Qos.c: checkpatch.pl fix: Added blank lines after declarations Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index f8eb3fe1acbe..80c5c65b452f 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -396,6 +396,7 @@ static USHORT IpVersion4(struct bcm_mini_adapter *Adapter, out: if (TRUE == bClassificationSucceed) { INT iMatchedSFQueueIndex = 0; + iMatchedSFQueueIndex = SearchSfid(Adapter, pstClassifierRule->ulSFID); if (iMatchedSFQueueIndex >= NO_OF_QUEUES) @@ -542,6 +543,7 @@ VOID flush_all_queues(struct bcm_mini_adapter *Adapter) /* down(&Adapter->data_packet_queue_lock); */ for (iQIndex = LowPriority; iQIndex < HiPriority; iQIndex++) { struct net_device_stats *netstats = &Adapter->dev->stats; + curr_packet_info = &Adapter->PackInfo[iQIndex]; spin_lock_bh(&curr_packet_info->SFQueueLock); -- cgit From 4064bbe3f2b1f37017cfc8e36a8cf8ba6b5a0f45 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:37 +0200 Subject: Staging: bcm: Qos.c: checkpatch.pl fix: Transformed C99-style comments Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 80c5c65b452f..13cfd06929df 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -459,8 +459,8 @@ static VOID PruneQueue(struct bcm_mini_adapter *Adapter, INT iIndex) spin_lock_bh(&curr_pack_info->SFQueueLock); while (1) { - /* while((UINT)Adapter->PackInfo[iIndex].uiCurrentPacketsOnHost > */ - /* SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { */ +/* while((UINT)curr_pack_info->uiCurrentPacketsOnHost > + SF_MAX_ALLOWED_PACKETS_TO_BACKUP) { */ BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, -- cgit From 8613091369ac1c5acb4c2630ff832a024a7903bb Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:38 +0200 Subject: Staging: bcm: Qos.c: checkpatch.pl fix: Removed parentheses from return statement Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index 13cfd06929df..d4c9a09cb3c6 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -865,7 +865,7 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) } - return (bClassificationSucceed ? usIndex : INVALID_QUEUE_INDEX); + return bClassificationSucceed ? usIndex : INVALID_QUEUE_INDEX; } static bool EthCSMatchSrcMACAddress(struct bcm_classifier_rule *pstClassifierRule, -- cgit From 81a208f8a0c257893a3469d4071ac551e166fc30 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 29 Jul 2014 16:52:39 +0200 Subject: Staging: bcm: Qos.c: checkpatch.pl fix: Indentation of case-statements fixed Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/Qos.c | 86 ++++++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/bcm/Qos.c b/drivers/staging/bcm/Qos.c index d4c9a09cb3c6..b3ac614cd35f 100644 --- a/drivers/staging/bcm/Qos.c +++ b/drivers/staging/bcm/Qos.c @@ -609,51 +609,47 @@ USHORT ClassifyPacket(struct bcm_mini_adapter *Adapter, struct sk_buff *skb) EThCSGetPktInfo(Adapter, pvEThPayload, &stEthCsPktInfo); switch (stEthCsPktInfo.eNwpktEthFrameType) { - case eEth802LLCFrame: - BCM_DEBUG_PRINT(Adapter, - DBG_TYPE_TX, - IPV4_DBG, - DBG_LVL_ALL, - "ClassifyPacket : 802LLCFrame\n"); - pIpHeader = pvEThPayload + - sizeof(struct bcm_eth_llc_frame); - break; - case eEth802LLCSNAPFrame: - BCM_DEBUG_PRINT(Adapter, - DBG_TYPE_TX, - IPV4_DBG, - DBG_LVL_ALL, - "ClassifyPacket : 802LLC SNAP Frame\n"); - pIpHeader = pvEThPayload + - sizeof(struct bcm_eth_llc_snap_frame); - break; - case eEth802QVLANFrame: - BCM_DEBUG_PRINT(Adapter, - DBG_TYPE_TX, - IPV4_DBG, - DBG_LVL_ALL, - "ClassifyPacket : 802.1Q VLANFrame\n"); - pIpHeader = pvEThPayload + - sizeof(struct bcm_eth_q_frame); - break; - case eEthOtherFrame: - BCM_DEBUG_PRINT(Adapter, - DBG_TYPE_TX, - IPV4_DBG, - DBG_LVL_ALL, - "ClassifyPacket : ETH Other Frame\n"); - pIpHeader = pvEThPayload + - sizeof(struct bcm_ethernet2_frame); - break; - default: - BCM_DEBUG_PRINT(Adapter, - DBG_TYPE_TX, - IPV4_DBG, - DBG_LVL_ALL, - "ClassifyPacket : Unrecognized ETH Frame\n"); - pIpHeader = pvEThPayload + - sizeof(struct bcm_ethernet2_frame); - break; + case eEth802LLCFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802LLCFrame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_eth_llc_frame); + break; + case eEth802LLCSNAPFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802LLC SNAP Frame\n"); + pIpHeader = pvEThPayload + + sizeof(struct bcm_eth_llc_snap_frame); + break; + case eEth802QVLANFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : 802.1Q VLANFrame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_eth_q_frame); + break; + case eEthOtherFrame: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : ETH Other Frame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); + break; + default: + BCM_DEBUG_PRINT(Adapter, + DBG_TYPE_TX, + IPV4_DBG, + DBG_LVL_ALL, + "ClassifyPacket : Unrecognized ETH Frame\n"); + pIpHeader = pvEThPayload + sizeof(struct bcm_ethernet2_frame); + break; } if (stEthCsPktInfo.eNwpktIPFrameType == eIPv4Packet) { -- cgit From e325f661cbeca23208967a3fad8389a717de1d16 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Mon, 28 Jul 2014 22:51:03 +0900 Subject: staging: dgnc: removes unused if defined code DGNC_TRACER and TRC_TO_KMEM are never defined. This patch removes if defined DGNC_TRACER and TRC_TO_KMEM code. CC: Lidza Louina CC: Mark Hounschell Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_driver.c | 4 --- drivers/staging/dgnc/dgnc_driver.h | 53 -------------------------------------- drivers/staging/dgnc/dgnc_trace.c | 8 ------ 3 files changed, 65 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index 68460af9e169..a5be9111987d 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -388,10 +388,6 @@ void dgnc_cleanup_module(void) dgnc_tty_post_uninit(); -#if defined(DGNC_TRACER) - /* last thing, make sure we release the tracebuffer */ - dgnc_tracer_free(); -#endif if (dgnc_NumBoards) pci_unregister_driver(&dgnc_driver); } diff --git a/drivers/staging/dgnc/dgnc_driver.h b/drivers/staging/dgnc/dgnc_driver.h index b40ee2c9f61c..58b5aa7b68ed 100644 --- a/drivers/staging/dgnc/dgnc_driver.h +++ b/drivers/staging/dgnc/dgnc_driver.h @@ -91,57 +91,6 @@ #define DBG_CARR (dgnc_debug & 0x10000) - -#if defined(DGNC_TRACER) - -# if defined(TRC_TO_KMEM) -/* Choose one: */ -# define TRC_ON_OVERFLOW_WRAP_AROUND -# undef TRC_ON_OVERFLOW_SHIFT_BUFFER -# endif /* TRC_TO_KMEM */ - -# define TRC_MAXMSG 1024 -# define TRC_OVERFLOW "(OVERFLOW)" -# define TRC_DTRC "/usr/bin/dtrc" - -#if defined TRC_TO_CONSOLE -#define PRINTF_TO_CONSOLE(args) { printk(DRVSTR": "); printk args; } -#else /* !defined TRACE_TO_CONSOLE */ -#define PRINTF_TO_CONSOLE(args) -#endif - -#if defined TRC_TO_KMEM -#define PRINTF_TO_KMEM(args) dgnc_tracef args -#else /* !defined TRC_TO_KMEM */ -#define PRINTF_TO_KMEM(args) -#endif - -#define TRC(args) { PRINTF_TO_KMEM(args); PRINTF_TO_CONSOLE(args) } - -# define DPR_INIT(ARGS) if (DBG_INIT) TRC(ARGS) -# define DPR_BASIC(ARGS) if (DBG_BASIC) TRC(ARGS) -# define DPR_CORE(ARGS) if (DBG_CORE) TRC(ARGS) -# define DPR_OPEN(ARGS) if (DBG_OPEN) TRC(ARGS) -# define DPR_CLOSE(ARGS) if (DBG_CLOSE) TRC(ARGS) -# define DPR_READ(ARGS) if (DBG_READ) TRC(ARGS) -# define DPR_WRITE(ARGS) if (DBG_WRITE) TRC(ARGS) -# define DPR_IOCTL(ARGS) if (DBG_IOCTL) TRC(ARGS) -# define DPR_PROC(ARGS) if (DBG_PROC) TRC(ARGS) -# define DPR_PARAM(ARGS) if (DBG_PARAM) TRC(ARGS) -# define DPR_PSCAN(ARGS) if (DBG_PSCAN) TRC(ARGS) -# define DPR_EVENT(ARGS) if (DBG_EVENT) TRC(ARGS) -# define DPR_DRAIN(ARGS) if (DBG_DRAIN) TRC(ARGS) -# define DPR_CARR(ARGS) if (DBG_CARR) TRC(ARGS) -# define DPR_MGMT(ARGS) if (DBG_MGMT) TRC(ARGS) -# define DPR_INTR(ARGS) if (DBG_INTR) TRC(ARGS) -# define DPR_MSIGS(ARGS) if (DBG_MSIGS) TRC(ARGS) - -# define DPR(ARGS) if (dgnc_debug) TRC(ARGS) -# define P(X) dgnc_tracef(#X "=%p\n", X) -# define X(X) dgnc_tracef(#X "=%x\n", X) - -#else/* !defined DGNC_TRACER */ - #define PRINTF_TO_KMEM(args) # define TRC(ARGS) # define DPR_INIT(ARGS) @@ -164,8 +113,6 @@ # define DPR(args) -#endif/* DGNC_TRACER */ - /* Number of boards we support at once. */ #define MAXBOARDS 20 #define MAXPORTS 8 diff --git a/drivers/staging/dgnc/dgnc_trace.c b/drivers/staging/dgnc/dgnc_trace.c index d76415431686..3bb225957ff6 100644 --- a/drivers/staging/dgnc/dgnc_trace.c +++ b/drivers/staging/dgnc/dgnc_trace.c @@ -42,14 +42,6 @@ /* file level globals */ static char *dgnc_trcbuf; /* the ringbuffer */ -#if defined(TRC_TO_KMEM) -static int dgnc_trcbufi = 0; /* index of the tilde at the end of */ -#endif - -#if defined(TRC_TO_KMEM) -static DEFINE_SPINLOCK(dgnc_tracef_lock); -#endif - /* * dgnc_tracer_free() * -- cgit From d53791f7fe8e458036807541da3139b3fa858bf5 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:22 +0530 Subject: staging: rtl8188eu: Remove unused member MultiFunc from struct hal_data_8188e Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c | 1 - drivers/staging/rtl8188eu/include/rtl8188e_hal.h | 1 - 2 files changed, 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 161138f7aeb9..fbf70f6a0151 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -517,7 +517,6 @@ static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter) pHalData->RegulatorMode = ((value32 & TRP_BT_EN) ? RT_LDO_REGULATOR : RT_SWITCHING_REGULATOR); ChipVersion.ROMVer = 0; /* ROM code version. */ - pHalData->MultiFunc = RT_MULTI_FUNC_NONE; dump_chip_info(ChipVersion); diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h index 4b7b06933ff7..fb206538392e 100644 --- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h @@ -240,7 +240,6 @@ enum rt_regulator_mode { struct hal_data_8188e { struct HAL_VERSION VersionID; - enum rt_multi_func MultiFunc; /* For multi-function consideration. */ enum rt_regulator_mode RegulatorMode; /* switching regulator or LDO */ u16 CustomerID; -- cgit From 457c3e90d5ee12139fedbafa4222c94ec34e88ab Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:23 +0530 Subject: staging: rtl8188eu: Remove wrapper function rtw_join_timeout_handler() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 3 ++- drivers/staging/rtl8188eu/include/rtw_mlme.h | 3 +-- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 10 +--------- 3 files changed, 4 insertions(+), 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index c15fab21aecf..f63f1c2d6ea4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1362,8 +1362,9 @@ void rtw_cpwm_event_callback(struct adapter *padapter, u8 *pbuf) * _rtw_join_timeout_handler - Timeout/faliure handler for CMD JoinBss * @adapter: pointer to struct adapter structure */ -void _rtw_join_timeout_handler (struct adapter *adapter) +void _rtw_join_timeout_handler (void *function_context) { + struct adapter *adapter = (struct adapter *)function_context; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; int do_join_r; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 5b1fcd27f447..40b0c4b1dac5 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -436,7 +436,6 @@ void indicate_wx_scan_complete_event(struct adapter *padapter); void rtw_indicate_wx_assoc_event(struct adapter *padapter); void rtw_indicate_wx_disassoc_event(struct adapter *padapter); int event_thread(void *context); -void rtw_join_timeout_handler(void *FunctionContext); void _rtw_scan_timeout_handler(void *FunctionContext); void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall); int rtw_init_mlme_priv(struct adapter *adapter); @@ -553,7 +552,7 @@ void rtw_update_registrypriv_dev_network(struct adapter *adapter); void rtw_get_encrypt_decrypt_from_registrypriv(struct adapter *adapter); -void _rtw_join_timeout_handler(struct adapter *adapter); +void _rtw_join_timeout_handler(void *function_context); void rtw_scan_timeout_handler(struct adapter *adapter); void rtw_dynamic_check_timer_handlder(struct adapter *adapter); diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 737677cf409e..41d24598bf0a 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -25,14 +25,6 @@ #include #include -void rtw_join_timeout_handler (void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - - _rtw_join_timeout_handler(adapter); -} - - void _rtw_scan_timeout_handler (void *FunctionContext) { struct adapter *adapter = (struct adapter *)FunctionContext; @@ -54,7 +46,7 @@ void rtw_init_mlme_timer(struct adapter *padapter) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, rtw_join_timeout_handler, padapter); + _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, _rtw_join_timeout_handler, padapter); _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, _rtw_scan_timeout_handler, padapter); _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, _dynamic_check_timer_handlder, padapter); } -- cgit From 14225ed0f218044ac1b31e2bdbad96fea3071b13 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:24 +0530 Subject: staging: rtl8188eu: Remove wrapper function _rtw_scan_timeout_handler() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 3 ++- drivers/staging/rtl8188eu/include/rtw_mlme.h | 3 +-- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 9 +-------- 3 files changed, 4 insertions(+), 11 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index f63f1c2d6ea4..d5b2f51dc715 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1404,8 +1404,9 @@ void _rtw_join_timeout_handler (void *function_context) * rtw_scan_timeout_handler - Timeout/Faliure handler for CMD SiteSurvey * @adapter: pointer to struct adapter structure */ -void rtw_scan_timeout_handler (struct adapter *adapter) +void rtw_scan_timeout_handler (void *function_context) { + struct adapter *adapter = (struct adapter *)function_context; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; DBG_88E(FUNC_ADPT_FMT" fw_state=%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv)); diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 40b0c4b1dac5..8f5457ba2fdc 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -436,7 +436,6 @@ void indicate_wx_scan_complete_event(struct adapter *padapter); void rtw_indicate_wx_assoc_event(struct adapter *padapter); void rtw_indicate_wx_disassoc_event(struct adapter *padapter); int event_thread(void *context); -void _rtw_scan_timeout_handler(void *FunctionContext); void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall); int rtw_init_mlme_priv(struct adapter *adapter); void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); @@ -553,7 +552,7 @@ void rtw_update_registrypriv_dev_network(struct adapter *adapter); void rtw_get_encrypt_decrypt_from_registrypriv(struct adapter *adapter); void _rtw_join_timeout_handler(void *function_context); -void rtw_scan_timeout_handler(struct adapter *adapter); +void rtw_scan_timeout_handler(void *function_context); void rtw_dynamic_check_timer_handlder(struct adapter *adapter); #define rtw_is_scan_deny(adapter) false diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 41d24598bf0a..0bfaa78adfbc 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -25,13 +25,6 @@ #include #include -void _rtw_scan_timeout_handler (void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - - rtw_scan_timeout_handler(adapter); -} - static void _dynamic_check_timer_handlder(void *FunctionContext) { struct adapter *adapter = (struct adapter *)FunctionContext; @@ -47,7 +40,7 @@ void rtw_init_mlme_timer(struct adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, _rtw_join_timeout_handler, padapter); - _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, _rtw_scan_timeout_handler, padapter); + _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, rtw_scan_timeout_handler, padapter); _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, _dynamic_check_timer_handlder, padapter); } -- cgit From bd29334313386c2c29df1bdd5eadf4e204fa8879 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:25 +0530 Subject: staging: rtl8188eu: Remove wrapper function _dynamic_check_timer_handlder() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme.c | 13 ++++++++----- drivers/staging/rtl8188eu/include/rtw_mlme.h | 2 +- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 12 +----------- 3 files changed, 10 insertions(+), 17 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index d5b2f51dc715..149c271e966d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -1431,24 +1431,27 @@ static void rtw_auto_scan_handler(struct adapter *padapter) } } -void rtw_dynamic_check_timer_handlder(struct adapter *adapter) +void rtw_dynamic_check_timer_handlder(void *function_context) { + struct adapter *adapter = (struct adapter *)function_context; struct registry_priv *pregistrypriv = &adapter->registrypriv; if (!adapter) - return; + goto exit; if (!adapter->hw_init_completed) - return; + goto exit; if ((adapter->bDriverStopped) || (adapter->bSurpriseRemoved)) - return; + goto exit; if (adapter->net_closed) - return; + goto exit; rtw_dynamic_chk_wk_cmd(adapter); if (pregistrypriv->wifi_spec == 1) { /* auto site survey */ rtw_auto_scan_handler(adapter); } +exit: + _set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000); } #define RTW_SCAN_RESULT_EXPIRE 2000 diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 8f5457ba2fdc..8d83f7ceda76 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -554,7 +554,7 @@ void rtw_get_encrypt_decrypt_from_registrypriv(struct adapter *adapter); void _rtw_join_timeout_handler(void *function_context); void rtw_scan_timeout_handler(void *function_context); -void rtw_dynamic_check_timer_handlder(struct adapter *adapter); +void rtw_dynamic_check_timer_handlder(void *function_context); #define rtw_is_scan_deny(adapter) false #define rtw_clear_scan_deny(adapter) do {} while (0) #define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0) diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 0bfaa78adfbc..82b71fa9d148 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -25,23 +25,13 @@ #include #include -static void _dynamic_check_timer_handlder(void *FunctionContext) -{ - struct adapter *adapter = (struct adapter *)FunctionContext; - - if (adapter->registrypriv.mp_mode == 1) - return; - rtw_dynamic_check_timer_handlder(adapter); - _set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000); -} - void rtw_init_mlme_timer(struct adapter *padapter) { struct mlme_priv *pmlmepriv = &padapter->mlmepriv; _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, _rtw_join_timeout_handler, padapter); _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, rtw_scan_timeout_handler, padapter); - _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, _dynamic_check_timer_handlder, padapter); + _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, rtw_dynamic_check_timer_handlder, padapter); } void rtw_os_indicate_connect(struct adapter *adapter) -- cgit From 0120668adcd3c769c9c66dbe2652cda8a0b3e7ee Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:26 +0530 Subject: staging: rtl8188eu: Remove wrapper function _survey_timer_hdl() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 3 ++- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 2 +- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 9 +-------- 3 files changed, 4 insertions(+), 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 41cfd30a1a7e..b113f0b88a17 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -4833,8 +4833,9 @@ void linked_status_chk(struct adapter *padapter) } } -void survey_timer_hdl(struct adapter *padapter) +void survey_timer_hdl(void *function_context) { + struct adapter *padapter = (struct adapter *)function_context; struct cmd_obj *ph2c; struct sitesurvey_parm *psurveyPara; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 654bd365f969..a948d45bc8a9 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -646,7 +646,7 @@ void mlmeext_sta_add_event_callback(struct adapter *padapter, void linked_status_chk(struct adapter *padapter); -void survey_timer_hdl (struct adapter *padapter); +void survey_timer_hdl (void *function_context); void link_timer_hdl (struct adapter *padapter); void addba_timer_hdl(struct sta_info *psta); diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 82b71fa9d148..f59e13097345 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -129,13 +129,6 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) } } -static void _survey_timer_hdl(void *FunctionContext) -{ - struct adapter *padapter = (struct adapter *)FunctionContext; - - survey_timer_hdl(padapter); -} - static void _link_timer_hdl(void *FunctionContext) { struct adapter *padapter = (struct adapter *)FunctionContext; @@ -157,7 +150,7 @@ void init_mlme_ext_timer(struct adapter *padapter) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; - _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, _survey_timer_hdl, padapter); + _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, survey_timer_hdl, padapter); _init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter); } -- cgit From b148cdd7b65440b866100623c28708435d0c8dc9 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:27 +0530 Subject: staging: rtl8188eu: Remove wrapper function _link_timer_hdl() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 3 ++- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 2 +- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 8 +------- 3 files changed, 4 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index b113f0b88a17..f18bb78defcb 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -4873,8 +4873,9 @@ exit_survey_timer_hdl: return; } -void link_timer_hdl(struct adapter *padapter) +void link_timer_hdl(void *function_context) { + struct adapter *padapter = (struct adapter *)function_context; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index a948d45bc8a9..05a010f5aeb3 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -647,7 +647,7 @@ void mlmeext_sta_add_event_callback(struct adapter *padapter, void linked_status_chk(struct adapter *padapter); void survey_timer_hdl (void *function_context); -void link_timer_hdl (struct adapter *padapter); +void link_timer_hdl (void *funtion_context); void addba_timer_hdl(struct sta_info *psta); #define set_survey_timer(mlmeext, ms) \ diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index f59e13097345..4f5fa08ecf9c 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -129,12 +129,6 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) } } -static void _link_timer_hdl(void *FunctionContext) -{ - struct adapter *padapter = (struct adapter *)FunctionContext; - link_timer_hdl(padapter); -} - static void _addba_timer_hdl(void *FunctionContext) { struct sta_info *psta = (struct sta_info *)FunctionContext; @@ -151,7 +145,7 @@ void init_mlme_ext_timer(struct adapter *padapter) struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, survey_timer_hdl, padapter); - _init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter); + _init_timer(&pmlmeext->link_timer, padapter->pnetdev, link_timer_hdl, padapter); } #ifdef CONFIG_88EU_AP_MODE -- cgit From fe8717062d7af92b7b9c8fea7dfc904414d2db19 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:28 +0530 Subject: staging: rtl8188eu: Remove wrapper function _addba_timer_hdl() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 3 ++- drivers/staging/rtl8188eu/include/rtw_mlme_ext.h | 2 +- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 8 +------- 3 files changed, 4 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index f18bb78defcb..5ba5099ec20d 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -4910,8 +4910,9 @@ void link_timer_hdl(void *function_context) return; } -void addba_timer_hdl(struct sta_info *psta) +void addba_timer_hdl(void *function_context) { + struct sta_info *psta = (struct sta_info *)function_context; struct ht_priv *phtpriv; if (!psta) diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index 05a010f5aeb3..d699ca19ef16 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -648,7 +648,7 @@ void linked_status_chk(struct adapter *padapter); void survey_timer_hdl (void *function_context); void link_timer_hdl (void *funtion_context); -void addba_timer_hdl(struct sta_info *psta); +void addba_timer_hdl(void *function_context); #define set_survey_timer(mlmeext, ms) \ do { \ diff --git a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c index 4f5fa08ecf9c..1b892c424cb8 100644 --- a/drivers/staging/rtl8188eu/os_dep/mlme_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/mlme_linux.c @@ -129,15 +129,9 @@ void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) } } -static void _addba_timer_hdl(void *FunctionContext) -{ - struct sta_info *psta = (struct sta_info *)FunctionContext; - addba_timer_hdl(psta); -} - void init_addba_retry_timer(struct adapter *padapter, struct sta_info *psta) { - _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta); + _init_timer(&psta->addba_retry_timer, padapter->pnetdev, addba_timer_hdl, psta); } void init_mlme_ext_timer(struct adapter *padapter) -- cgit From a16d66b8fe4b21aad81b2c88c11fba80d4040621 Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:29 +0530 Subject: staging: rtl8188eu: Remove unused function rtw_os_read_port() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/include/recv_osdep.h | 2 -- drivers/staging/rtl8188eu/os_dep/recv_linux.c | 12 ------------ 2 files changed, 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/include/recv_osdep.h b/drivers/staging/rtl8188eu/include/recv_osdep.h index a52a6960b8e1..5aabd3984e58 100644 --- a/drivers/staging/rtl8188eu/include/recv_osdep.h +++ b/drivers/staging/rtl8188eu/include/recv_osdep.h @@ -43,8 +43,6 @@ int rtw_os_recv_resource_alloc(struct adapter *adapt, int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf); -void rtw_os_read_port(struct adapter *padapter, struct recv_buf *precvbuf); - void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); int _netdev_open(struct net_device *pnetdev); int netdev_open(struct net_device *pnetdev); diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index f8ac996cc8b6..f7d53dd370b7 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -191,18 +191,6 @@ _recv_indicatepkt_drop: return _FAIL; } -void rtw_os_read_port(struct adapter *padapter, struct recv_buf *precvbuf) -{ - struct recv_priv *precvpriv = &padapter->recvpriv; - - /* free skb in recv_buf */ - dev_kfree_skb_any(precvbuf->pskb); - precvbuf->pskb = NULL; - precvbuf->reuse = false; - usb_read_port(padapter, precvpriv->ff_hwaddr, 0, - (unsigned char *)precvbuf); -} - static void _rtw_reordering_ctrl_timeout_handler(void *func_context) { struct recv_reorder_ctrl *preorder_ctrl; -- cgit From 7ebd4cba670a1eb7fb50c131ef6eae83ddb2e73b Mon Sep 17 00:00:00 2001 From: navin patidar Date: Mon, 28 Jul 2014 23:11:30 +0530 Subject: staging: rtl8188eu: Remove wrapper function _rtw_reordering_ctrl_timeout_handler() Signed-off-by: navin patidar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8188eu/os_dep/recv_linux.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index f7d53dd370b7..05427c489b3f 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -191,17 +191,9 @@ _recv_indicatepkt_drop: return _FAIL; } -static void _rtw_reordering_ctrl_timeout_handler(void *func_context) -{ - struct recv_reorder_ctrl *preorder_ctrl; - - preorder_ctrl = (struct recv_reorder_ctrl *)func_context; - rtw_reordering_ctrl_timeout_handler(preorder_ctrl); -} - void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl) { struct adapter *padapter = preorder_ctrl->padapter; - _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, _rtw_reordering_ctrl_timeout_handler, preorder_ctrl); + _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, rtw_reordering_ctrl_timeout_handler, preorder_ctrl); } -- cgit From 6aa2621183ee0142ebbcadff59417f0f1c10ae15 Mon Sep 17 00:00:00 2001 From: Murilo Opsfelder Araujo Date: Mon, 28 Jul 2014 20:45:06 -0300 Subject: Staging: android: timed_output.c: use kstrtoint() instead of sscanf() This patch makes checkpatch.pl happy by fixing the following warning: WARNING: Prefer kstrto to single variable sscanf Signed-off-by: Murilo Opsfelder Araujo Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/timed_output.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/timed_output.c b/drivers/staging/android/timed_output.c index c341ac11c5a3..b41429f379fe 100644 --- a/drivers/staging/android/timed_output.c +++ b/drivers/staging/android/timed_output.c @@ -41,8 +41,10 @@ static ssize_t enable_store(struct device *dev, struct device_attribute *attr, { struct timed_output_dev *tdev = dev_get_drvdata(dev); int value; + int rc; - if (sscanf(buf, "%d", &value) != 1) + rc = kstrtoint(buf, 0, &value); + if (rc != 0) return -EINVAL; tdev->enable(tdev, value); -- cgit From 47e7b05001d8634704b1563ba93863194ac129f0 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Tue, 29 Jul 2014 13:16:14 +0200 Subject: staging/nvec: Do not pass resource to mfd_add_devices() The mfd_add_devices() function takes a struct resource * as fifth argument, but the nvec driver passes in a void __iomem *. The driver gets away with it because none of the subdevices ever directly access the registers. Since subdevices never need to access the registers we can simply pass NULL instead. Signed-off-by: Thierry Reding Acked-by: Marc Dietrich Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index 0a5c84ad3f41..815065837ce7 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -893,7 +893,7 @@ static int tegra_nvec_probe(struct platform_device *pdev) } ret = mfd_add_devices(nvec->dev, -1, nvec_devices, - ARRAY_SIZE(nvec_devices), base, 0, NULL); + ARRAY_SIZE(nvec_devices), NULL, 0, NULL); if (ret) dev_err(nvec->dev, "error adding subdevices\n"); -- cgit From b5b628ba4980762b290bb794d44dce629d0126f2 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Tue, 29 Jul 2014 13:16:15 +0200 Subject: staging/nvec: Use platform_get_irq() As opposed to platform_get_resource(), the platform_get_irq() function has special code to handle driver probe deferral when booting using DT and where an interrupt provider hasn't been registered yet. While this is unlikely to become an issue for nvec, platform_get_irq() is the recommended way to get at interrupts. Signed-off-by: Thierry Reding Acked-by: Marc Dietrich Signed-off-by: Greg Kroah-Hartman --- drivers/staging/nvec/nvec.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index 815065837ce7..a93208adbfcf 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -821,8 +821,8 @@ static int tegra_nvec_probe(struct platform_device *pdev) if (IS_ERR(base)) return PTR_ERR(base); - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { + nvec->irq = platform_get_irq(pdev, 0); + if (nvec->irq < 0) { dev_err(&pdev->dev, "no irq resource?\n"); return -ENODEV; } @@ -840,7 +840,6 @@ static int tegra_nvec_probe(struct platform_device *pdev) } nvec->base = base; - nvec->irq = res->start; nvec->i2c_clk = i2c_clk; nvec->rx = &nvec->msg_pool[0]; -- cgit From 9036b4e976460f8475df3fef4cb9e03b086e30e1 Mon Sep 17 00:00:00 2001 From: Fabio Falzoi Date: Wed, 30 Jul 2014 00:15:52 +0200 Subject: Staging: rts5208: Remove useless debug prints Remove all debug printks used just to mark when we enter a function. Signed-off-by: Fabio Falzoi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rts5208/ms.c | 24 ------------------------ drivers/staging/rts5208/rtsx_scsi.c | 4 ---- 2 files changed, 28 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c index d22916a4b9d8..160d449f4a5f 100644 --- a/drivers/staging/rts5208/ms.c +++ b/drivers/staging/rts5208/ms.c @@ -2473,8 +2473,6 @@ void mspro_stop_seq_mode(struct rtsx_chip *chip) struct ms_info *ms_card = &(chip->ms_card); int retval; - RTSX_DEBUGP("--%s--\n", __func__); - if (ms_card->seq_mode) { retval = ms_switch_clock(chip); if (retval != STATUS_SUCCESS) @@ -2493,8 +2491,6 @@ static inline int ms_auto_tune_clock(struct rtsx_chip *chip) struct ms_info *ms_card = &(chip->ms_card); int retval; - RTSX_DEBUGP("--%s--\n", __func__); - if (chip->asic_code) { if (ms_card->ms_clock > 30) ms_card->ms_clock -= 20; @@ -2783,8 +2779,6 @@ int mspro_format(struct scsi_cmnd *srb, struct rtsx_chip *chip, u8 buf[8], tmp; u16 para; - RTSX_DEBUGP("--%s--\n", __func__); - retval = ms_switch_clock(chip); if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); @@ -3664,8 +3658,6 @@ static int mg_set_tpc_para_sub(struct rtsx_chip *chip, int type, int retval; u8 buf[6]; - RTSX_DEBUGP("--%s--\n", __func__); - if (type == 0) retval = ms_set_rw_reg_addr(chip, 0, 0, Pro_TPCParm, 1); else @@ -3697,8 +3689,6 @@ int mg_set_leaf_id(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 buf1[32], buf2[12]; - RTSX_DEBUGP("--%s--\n", __func__); - if (scsi_bufflen(srb) < 12) { set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); TRACE_RET(chip, STATUS_FAIL); @@ -3743,8 +3733,6 @@ int mg_get_local_EKB(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 *buf = NULL; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -3796,8 +3784,6 @@ int mg_chg(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 buf[32]; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -3872,8 +3858,6 @@ int mg_get_rsp_chg(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 buf1[32], buf2[36]; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -3929,8 +3913,6 @@ int mg_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 buf[32]; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -3977,8 +3959,6 @@ int mg_get_ICV(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 *buf = NULL; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -4032,8 +4012,6 @@ int mg_set_ICV(struct scsi_cmnd *srb, struct rtsx_chip *chip) unsigned int lun = SCSI_LUN(srb); u8 *buf = NULL; - RTSX_DEBUGP("--%s--\n", __func__); - ms_cleanup_work(chip); retval = ms_switch_clock(chip); @@ -4182,8 +4160,6 @@ int release_ms_card(struct rtsx_chip *chip) struct ms_info *ms_card = &(chip->ms_card); int retval; - RTSX_DEBUGP("release_ms_card\n"); - #ifdef MS_DELAY_WRITE ms_card->delay_write.delay_write_flag = 0; #endif diff --git a/drivers/staging/rts5208/rtsx_scsi.c b/drivers/staging/rts5208/rtsx_scsi.c index bbfa665c5c99..72b4c26d6b9a 100644 --- a/drivers/staging/rts5208/rtsx_scsi.c +++ b/drivers/staging/rts5208/rtsx_scsi.c @@ -3030,8 +3030,6 @@ static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) int retval; u8 key_format; - RTSX_DEBUGP("--%s--\n", __func__); - rtsx_disable_aspm(chip); if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { @@ -3131,8 +3129,6 @@ static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) int retval; u8 key_format; - RTSX_DEBUGP("--%s--\n", __func__); - rtsx_disable_aspm(chip); if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { -- cgit From bf6c0d110e0b7a06227f24a86249fad0a252eeea Mon Sep 17 00:00:00 2001 From: Fabio Falzoi Date: Wed, 30 Jul 2014 00:15:53 +0200 Subject: Staging: rts5208: Replace custom macro with dev_dbg Use dev_dbg macro to control tracing verbosity through dynamic debug facility. Signed-off-by: Fabio Falzoi Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rts5208/debug.h | 43 ------- drivers/staging/rts5208/ms.c | 102 +++++++++-------- drivers/staging/rts5208/rtsx.c | 6 +- drivers/staging/rts5208/rtsx.h | 1 - drivers/staging/rts5208/rtsx_card.c | 73 ++++++------ drivers/staging/rts5208/rtsx_card.h | 1 - drivers/staging/rts5208/rtsx_chip.c | 133 +++++++++++----------- drivers/staging/rts5208/rtsx_chip.h | 5 + drivers/staging/rts5208/rtsx_scsi.c | 40 +++---- drivers/staging/rts5208/rtsx_scsi.h | 2 +- drivers/staging/rts5208/rtsx_transport.c | 55 +++++---- drivers/staging/rts5208/sd.c | 185 +++++++++++++++++-------------- drivers/staging/rts5208/spi.c | 7 +- drivers/staging/rts5208/trace.h | 10 +- drivers/staging/rts5208/xd.c | 104 +++++++++-------- 15 files changed, 392 insertions(+), 375 deletions(-) delete mode 100644 drivers/staging/rts5208/debug.h (limited to 'drivers/staging') diff --git a/drivers/staging/rts5208/debug.h b/drivers/staging/rts5208/debug.h deleted file mode 100644 index 5ba8a3a0fbdc..000000000000 --- a/drivers/staging/rts5208/debug.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Driver for Realtek PCI-Express card reader - * Header file - * - * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved. - * - * 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, 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, see . - * - * Author: - * Wei WANG (wei_wang@realsil.com.cn) - * Micky Ching (micky_ching@realsil.com.cn) - */ - -#ifndef __REALTEK_RTSX_DEBUG_H -#define __REALTEK_RTSX_DEBUG_H - -#include - -#define RTSX_STOR "rts5208: " - -#ifdef CONFIG_RTS5208_DEBUG -#define RTSX_DEBUGP(x...) pr_debug(RTSX_STOR x) -#define RTSX_DEBUGPN(x...) pr_debug(x) -#define RTSX_DEBUGPX(x...) printk(x) -#define RTSX_DEBUG(x) x -#else -#define RTSX_DEBUGP(x...) -#define RTSX_DEBUGPN(x...) -#define RTSX_DEBUGPX(x...) -#define RTSX_DEBUG(x) -#endif - -#endif /* __REALTEK_RTSX_DEBUG_H */ diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c index 160d449f4a5f..390b1f83ebc2 100644 --- a/drivers/staging/rts5208/ms.c +++ b/drivers/staging/rts5208/ms.c @@ -57,7 +57,7 @@ static int ms_transfer_tpc(struct rtsx_chip *chip, u8 trans_mode, int retval; u8 *ptr; - RTSX_DEBUGP("ms_transfer_tpc: tpc = 0x%x\n", tpc); + dev_dbg(rtsx_dev(chip), "%s: tpc = 0x%x\n", __func__, tpc); rtsx_init_cmd(chip); @@ -204,7 +204,7 @@ static int ms_write_bytes(struct rtsx_chip *chip, u8 val = 0; rtsx_read_register(chip, MS_TRANS_CFG, &val); - RTSX_DEBUGP("MS_TRANS_CFG: 0x%02x\n", val); + dev_dbg(rtsx_dev(chip), "MS_TRANS_CFG: 0x%02x\n", val); rtsx_clear_ms_error(chip); @@ -304,7 +304,7 @@ static int ms_read_bytes(struct rtsx_chip *chip, data[i] = ptr[i]; if ((tpc == PRO_READ_SHORT_DATA) && (data_len == 8)) { - RTSX_DEBUGP("Read format progress:\n"); + dev_dbg(rtsx_dev(chip), "Read format progress:\n"); RTSX_DUMP(ptr, cnt); } @@ -507,8 +507,8 @@ static int ms_prepare_reset(struct rtsx_chip *chip) oc_mask = SD_OC_NOW | SD_OC_EVER; if (chip->ocp_stat & oc_mask) { - RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", - chip->ocp_stat); + dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", + chip->ocp_stat); TRACE_RET(chip, STATUS_FAIL); } #endif @@ -557,7 +557,7 @@ static int ms_identify_media_type(struct rtsx_chip *chip, int switch_8bit_bus) TRACE_RET(chip, STATUS_FAIL); RTSX_READ_REG(chip, PPBUF_BASE2 + 2, &val); - RTSX_DEBUGP("Type register: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "Type register: 0x%x\n", val); if (val != 0x01) { if (val != 0x02) ms_card->check_ms_flow = 1; @@ -566,14 +566,14 @@ static int ms_identify_media_type(struct rtsx_chip *chip, int switch_8bit_bus) } RTSX_READ_REG(chip, PPBUF_BASE2 + 4, &val); - RTSX_DEBUGP("Category register: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "Category register: 0x%x\n", val); if (val != 0) { ms_card->check_ms_flow = 1; TRACE_RET(chip, STATUS_FAIL); } RTSX_READ_REG(chip, PPBUF_BASE2 + 5, &val); - RTSX_DEBUGP("Class register: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "Class register: 0x%x\n", val); if (val == 0) { RTSX_READ_REG(chip, PPBUF_BASE2, &val); if (val & WRT_PRTCT) @@ -591,7 +591,7 @@ static int ms_identify_media_type(struct rtsx_chip *chip, int switch_8bit_bus) ms_card->ms_type |= TYPE_MSPRO; RTSX_READ_REG(chip, PPBUF_BASE2 + 3, &val); - RTSX_DEBUGP("IF Mode register: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "IF Mode register: 0x%x\n", val); if (val == 0) { ms_card->ms_type &= 0x0F; } else if (val == 7) { @@ -924,7 +924,7 @@ static int ms_read_attribute_info(struct rtsx_chip *chip) ((u32)buf[cur_addr_off + 5] << 16) | ((u32)buf[cur_addr_off + 6] << 8) | buf[cur_addr_off + 7]; - RTSX_DEBUGP("sys_info_addr = 0x%x, sys_info_size = 0x%x\n", + dev_dbg(rtsx_dev(chip), "sys_info_addr = 0x%x, sys_info_size = 0x%x\n", sys_info_addr, sys_info_size); if (sys_info_size != 96) { kfree(buf); @@ -959,7 +959,7 @@ static int ms_read_attribute_info(struct rtsx_chip *chip) ((u32)buf[cur_addr_off + 5] << 16) | ((u32)buf[cur_addr_off + 6] << 8) | buf[cur_addr_off + 7]; - RTSX_DEBUGP("model_name_addr = 0x%x, model_name_size = 0x%x\n", + dev_dbg(rtsx_dev(chip), "model_name_addr = 0x%x, model_name_size = 0x%x\n", model_name_addr, model_name_size); if (model_name_size != 48) { kfree(buf); @@ -1000,24 +1000,25 @@ static int ms_read_attribute_info(struct rtsx_chip *chip) ((u32)buf[sys_info_addr + 33] << 16) | ((u32)buf[sys_info_addr + 34] << 8) | buf[sys_info_addr + 35]; - RTSX_DEBUGP("xc_total_blk = 0x%x, xc_blk_size = 0x%x\n", + dev_dbg(rtsx_dev(chip), "xc_total_blk = 0x%x, xc_blk_size = 0x%x\n", xc_total_blk, xc_blk_size); } else { total_blk = ((u16)buf[sys_info_addr + 6] << 8) | buf[sys_info_addr + 7]; blk_size = ((u16)buf[sys_info_addr + 2] << 8) | buf[sys_info_addr + 3]; - RTSX_DEBUGP("total_blk = 0x%x, blk_size = 0x%x\n", + dev_dbg(rtsx_dev(chip), "total_blk = 0x%x, blk_size = 0x%x\n", total_blk, blk_size); } #else total_blk = ((u16)buf[sys_info_addr + 6] << 8) | buf[sys_info_addr + 7]; blk_size = ((u16)buf[sys_info_addr + 2] << 8) | buf[sys_info_addr + 3]; - RTSX_DEBUGP("total_blk = 0x%x, blk_size = 0x%x\n", total_blk, blk_size); + dev_dbg(rtsx_dev(chip), "total_blk = 0x%x, blk_size = 0x%x\n", + total_blk, blk_size); #endif - RTSX_DEBUGP("class_code = 0x%x, device_type = 0x%x, sub_class = 0x%x\n", - class_code, device_type, sub_class); + dev_dbg(rtsx_dev(chip), "class_code = 0x%x, device_type = 0x%x, sub_class = 0x%x\n", + class_code, device_type, sub_class); memcpy(ms_card->raw_sys_info, buf + sys_info_addr, 96); #ifdef SUPPORT_PCGL_1P18 @@ -1051,7 +1052,7 @@ static int ms_read_attribute_info(struct rtsx_chip *chip) if (sub_class & 0xC0) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("class_code: 0x%x, device_type: 0x%x, sub_class: 0x%x\n", + dev_dbg(rtsx_dev(chip), "class_code: 0x%x, device_type: 0x%x, sub_class: 0x%x\n", class_code, device_type, sub_class); #ifdef SUPPORT_MSXC @@ -1115,8 +1116,10 @@ Retry: if (change_power_class && CHK_MSXC(ms_card)) { u8 power_class_en = chip->ms_power_class_en; - RTSX_DEBUGP("power_class_en = 0x%x\n", power_class_en); - RTSX_DEBUGP("change_power_class = %d\n", change_power_class); + dev_dbg(rtsx_dev(chip), "power_class_en = 0x%x\n", + power_class_en); + dev_dbg(rtsx_dev(chip), "change_power_class = %d\n", + change_power_class); if (change_power_class) power_class_en &= (1 << (change_power_class - 1)); @@ -1126,7 +1129,7 @@ Retry: if (power_class_en) { u8 power_class_mode = (ms_card->raw_sys_info[46] & 0x18) >> 3; - RTSX_DEBUGP("power_class_mode = 0x%x", + dev_dbg(rtsx_dev(chip), "power_class_mode = 0x%x", power_class_mode); if (change_power_class > power_class_mode) change_power_class = power_class_mode; @@ -1559,9 +1562,10 @@ static int ms_copy_page(struct rtsx_chip *chip, u16 old_blk, u16 new_blk, int retval, rty_cnt, uncorrect_flag = 0; u8 extra[MS_EXTRA_SIZE], val, i, j, data[16]; - RTSX_DEBUGP("Copy page from 0x%x to 0x%x, logical block is 0x%x\n", + dev_dbg(rtsx_dev(chip), "Copy page from 0x%x to 0x%x, logical block is 0x%x\n", old_blk, new_blk, log_blk); - RTSX_DEBUGP("start_page = %d, end_page = %d\n", start_page, end_page); + dev_dbg(rtsx_dev(chip), "start_page = %d, end_page = %d\n", + start_page, end_page); retval = ms_read_extra_data(chip, new_blk, 0, extra, MS_EXTRA_SIZE); if (retval != STATUS_SUCCESS) @@ -1638,7 +1642,7 @@ static int ms_copy_page(struct rtsx_chip *chip, u16 old_blk, u16 new_blk, retval = ms_read_status_reg(chip); if (retval != STATUS_SUCCESS) { uncorrect_flag = 1; - RTSX_DEBUGP("Uncorrectable error\n"); + dev_dbg(rtsx_dev(chip), "Uncorrectable error\n"); } else { uncorrect_flag = 0; } @@ -1658,7 +1662,8 @@ static int ms_copy_page(struct rtsx_chip *chip, u16 old_blk, u16 new_blk, ms_write_extra_data(chip, old_blk, i, extra, MS_EXTRA_SIZE); - RTSX_DEBUGP("page %d : extra[0] = 0x%x\n", i, extra[0]); + dev_dbg(rtsx_dev(chip), "page %d : extra[0] = 0x%x\n", + i, extra[0]); MS_SET_BAD_BLOCK_FLG(ms_card); ms_set_page_status(log_blk, setPS_Error, @@ -1853,7 +1858,7 @@ RE_SEARCH: } if (i == (MAX_DEFECTIVE_BLOCK + 2)) { - RTSX_DEBUGP("No boot block found!"); + dev_dbg(rtsx_dev(chip), "No boot block found!"); TRACE_RET(chip, STATUS_FAIL); } @@ -1907,7 +1912,7 @@ RE_SEARCH: ptr = rtsx_get_cmd_data(chip); - RTSX_DEBUGP("Boot block data:\n"); + dev_dbg(rtsx_dev(chip), "Boot block data:\n"); RTSX_DUMP(ptr, 16); /* Block ID error @@ -2009,7 +2014,8 @@ static int ms_init_l2p_tbl(struct rtsx_chip *chip) u8 val1, val2; ms_card->segment_cnt = ms_card->total_block >> 9; - RTSX_DEBUGP("ms_card->segment_cnt = %d\n", ms_card->segment_cnt); + dev_dbg(rtsx_dev(chip), "ms_card->segment_cnt = %d\n", + ms_card->segment_cnt); size = ms_card->segment_cnt * sizeof(struct zone_entry); ms_card->segment = vzalloc(size); @@ -2046,8 +2052,8 @@ static int ms_init_l2p_tbl(struct rtsx_chip *chip) ms_card->segment[i].set_index = 0; ms_card->segment[i].unused_blk_cnt = 0; - RTSX_DEBUGP("defective block count of segment %d is %d\n", - i, ms_card->segment[i].disable_count); + dev_dbg(rtsx_dev(chip), "defective block count of segment %d is %d\n", + i, ms_card->segment[i].disable_count); } return STATUS_SUCCESS; @@ -2184,7 +2190,7 @@ static int ms_build_l2p_tbl(struct rtsx_chip *chip, int seg_no) u16 start, end, phy_blk, log_blk, tmp_blk; u8 extra[MS_EXTRA_SIZE], us1, us2; - RTSX_DEBUGP("ms_build_l2p_tbl: %d\n", seg_no); + dev_dbg(rtsx_dev(chip), "ms_build_l2p_tbl: %d\n", seg_no); if (ms_card->segment == NULL) { retval = ms_init_l2p_tbl(chip); @@ -2193,7 +2199,8 @@ static int ms_build_l2p_tbl(struct rtsx_chip *chip, int seg_no) } if (ms_card->segment[seg_no].build_flag) { - RTSX_DEBUGP("l2p table of segment %d has been built\n", seg_no); + dev_dbg(rtsx_dev(chip), "l2p table of segment %d has been built\n", + seg_no); return STATUS_SUCCESS; } @@ -2244,7 +2251,7 @@ static int ms_build_l2p_tbl(struct rtsx_chip *chip, int seg_no) retval = ms_read_extra_data(chip, phy_blk, 0, extra, MS_EXTRA_SIZE); if (retval != STATUS_SUCCESS) { - RTSX_DEBUGP("read extra data fail\n"); + dev_dbg(rtsx_dev(chip), "read extra data fail\n"); ms_set_bad_block(chip, phy_blk); continue; } @@ -2311,7 +2318,8 @@ static int ms_build_l2p_tbl(struct rtsx_chip *chip, int seg_no) segment->build_flag = 1; - RTSX_DEBUGP("unused block count: %d\n", segment->unused_blk_cnt); + dev_dbg(rtsx_dev(chip), "unused block count: %d\n", + segment->unused_blk_cnt); /* Logical Address Confirmation Process */ if (seg_no == ms_card->segment_cnt - 1) { @@ -2357,7 +2365,7 @@ static int ms_build_l2p_tbl(struct rtsx_chip *chip, int seg_no) for (log_blk = 0; log_blk < 494; log_blk++) { tmp_blk = segment->l2p_table[log_blk]; if (tmp_blk < ms_card->boot_block) { - RTSX_DEBUGP("Boot block is not the first normal block.\n"); + dev_dbg(rtsx_dev(chip), "Boot block is not the first normal block.\n"); if (chip->card_wp & MS_CARD) break; @@ -2435,7 +2443,7 @@ int reset_ms_card(struct rtsx_chip *chip) TRACE_RET(chip, STATUS_FAIL); } - RTSX_DEBUGP("ms_card->ms_type = 0x%x\n", ms_card->ms_type); + dev_dbg(rtsx_dev(chip), "ms_card->ms_type = 0x%x\n", ms_card->ms_type); return STATUS_SUCCESS; } @@ -2614,7 +2622,7 @@ static int mspro_rw_multi_sector(struct scsi_cmnd *srb, if (detect_card_cd(chip, MS_CARD) != STATUS_SUCCESS) { chip->rw_need_retry = 0; - RTSX_DEBUGP("No card exist, exit mspro_rw_multi_sector\n"); + dev_dbg(rtsx_dev(chip), "No card exist, exit mspro_rw_multi_sector\n"); TRACE_RET(chip, STATUS_FAIL); } @@ -2622,7 +2630,7 @@ static int mspro_rw_multi_sector(struct scsi_cmnd *srb, ms_send_cmd(chip, PRO_STOP, WAIT_INT); if (val & (MS_CRC16_ERR | MS_RDY_TIMEOUT)) { - RTSX_DEBUGP("MSPro CRC error, tune clock!\n"); + dev_dbg(rtsx_dev(chip), "MSPro CRC error, tune clock!\n"); chip->rw_need_retry = 1; ms_auto_tune_clock(chip); } @@ -2649,7 +2657,7 @@ static int mspro_read_format_progress(struct rtsx_chip *chip, u8 cnt, tmp; u8 data[8]; - RTSX_DEBUGP("mspro_read_format_progress, short_data_len = %d\n", + dev_dbg(rtsx_dev(chip), "mspro_read_format_progress, short_data_len = %d\n", short_data_len); retval = ms_switch_clock(chip); @@ -2697,8 +2705,8 @@ static int mspro_read_format_progress(struct rtsx_chip *chip, cur_progress = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; - RTSX_DEBUGP("total_progress = %d, cur_progress = %d\n", - total_progress, cur_progress); + dev_dbg(rtsx_dev(chip), "total_progress = %d, cur_progress = %d\n", + total_progress, cur_progress); if (total_progress == 0) { ms_card->progress = 0; @@ -2707,7 +2715,7 @@ static int mspro_read_format_progress(struct rtsx_chip *chip, do_div(ulltmp, total_progress); ms_card->progress = (u16)ulltmp; } - RTSX_DEBUGP("progress = %d\n", ms_card->progress); + dev_dbg(rtsx_dev(chip), "progress = %d\n", ms_card->progress); for (i = 0; i < 5000; i++) { retval = rtsx_read_register(chip, MS_TRANS_CFG, &tmp); @@ -3399,7 +3407,7 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rtsx_chip *chip, } } - RTSX_DEBUGP("seg_no = %d, old_blk = 0x%x, new_blk = 0x%x\n", + dev_dbg(rtsx_dev(chip), "seg_no = %d, old_blk = 0x%x, new_blk = 0x%x\n", seg_no, old_blk, new_blk); while (total_sec_cnt) { @@ -3410,8 +3418,8 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rtsx_chip *chip, page_cnt = end_page - start_page; - RTSX_DEBUGP("start_page = %d, end_page = %d, page_cnt = %d\n", - start_page, end_page, page_cnt); + dev_dbg(rtsx_dev(chip), "start_page = %d, end_page = %d, page_cnt = %d\n", + start_page, end_page, page_cnt); if (srb->sc_data_direction == DMA_FROM_DEVICE) { retval = ms_read_multiple_pages(chip, @@ -3486,7 +3494,7 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rtsx_chip *chip, } } - RTSX_DEBUGP("seg_no = %d, old_blk = 0x%x, new_blk = 0x%x\n", + dev_dbg(rtsx_dev(chip), "seg_no = %d, old_blk = 0x%x, new_blk = 0x%x\n", seg_no, old_blk, new_blk); start_page = 0; @@ -4111,7 +4119,7 @@ void ms_cleanup_work(struct rtsx_chip *chip) if (CHK_MSPRO(ms_card)) { if (ms_card->seq_mode) { - RTSX_DEBUGP("MS Pro: stop transmission\n"); + dev_dbg(rtsx_dev(chip), "MS Pro: stop transmission\n"); mspro_stop_seq_mode(chip); ms_card->cleanup_counter = 0; } @@ -4122,7 +4130,7 @@ void ms_cleanup_work(struct rtsx_chip *chip) } #ifdef MS_DELAY_WRITE else if ((!CHK_MSPRO(ms_card)) && ms_card->delay_write.delay_write_flag) { - RTSX_DEBUGP("MS: delay write\n"); + dev_dbg(rtsx_dev(chip), "MS: delay write\n"); ms_delay_write(chip); ms_card->cleanup_counter = 0; } diff --git a/drivers/staging/rts5208/rtsx.c b/drivers/staging/rts5208/rtsx.c index c0a0e6010372..2029b6f8ec83 100644 --- a/drivers/staging/rts5208/rtsx.c +++ b/drivers/staging/rts5208/rtsx.c @@ -20,8 +20,6 @@ * Micky Ching (micky_ching@realsil.com.cn) */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - #include #include #include @@ -478,7 +476,7 @@ static int rtsx_control_thread(void *__dev) /* we've got a command, let's do it! */ else { - RTSX_DEBUG(scsi_show_command(chip->srb)); + scsi_show_command(chip); rtsx_invoke_transport(chip->srb, chip); } @@ -864,7 +862,7 @@ static int rtsx_probe(struct pci_dev *pci, int err = 0; struct task_struct *th; - RTSX_DEBUGP("Realtek PCI-E card reader detected\n"); + dev_dbg(&pci->dev, "Realtek PCI-E card reader detected\n"); err = pci_enable_device(pci); if (err < 0) { diff --git a/drivers/staging/rts5208/rtsx.h b/drivers/staging/rts5208/rtsx.h index 37eab56ee02e..9e6ecb7457b5 100644 --- a/drivers/staging/rts5208/rtsx.h +++ b/drivers/staging/rts5208/rtsx.h @@ -46,7 +46,6 @@ #include #include -#include "debug.h" #include "trace.h" #include "general.h" diff --git a/drivers/staging/rts5208/rtsx_card.c b/drivers/staging/rts5208/rtsx_card.c index 01aeb01bebe5..b4595ab3f02b 100644 --- a/drivers/staging/rts5208/rtsx_card.c +++ b/drivers/staging/rts5208/rtsx_card.c @@ -102,7 +102,8 @@ void try_to_switch_sdio_ctrl(struct rtsx_chip *chip) rtsx_read_register(chip, 0xFF34, ®1); rtsx_read_register(chip, 0xFF38, ®2); - RTSX_DEBUGP("reg 0xFF34: 0x%x, reg 0xFF38: 0x%x\n", reg1, reg2); + dev_dbg(rtsx_dev(chip), "reg 0xFF34: 0x%x, reg 0xFF38: 0x%x\n", + reg1, reg2); if ((reg1 & 0xC0) && (reg2 & 0xC0)) { chip->sd_int = 1; rtsx_write_register(chip, SDIO_CTRL, 0xFF, @@ -137,14 +138,14 @@ void dynamic_configure_sdio_aspm(struct rtsx_chip *chip) if (chip->sdio_idle) { if (!chip->sdio_aspm) { - RTSX_DEBUGP("SDIO enter ASPM!\n"); + dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n"); rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30 | (chip->aspm_level[1] << 2)); chip->sdio_aspm = 1; } } else { if (chip->sdio_aspm) { - RTSX_DEBUGP("SDIO exit ASPM!\n"); + dev_dbg(rtsx_dev(chip), "SDIO exit ASPM!\n"); rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30); chip->sdio_aspm = 0; } @@ -156,8 +157,8 @@ void do_reset_sd_card(struct rtsx_chip *chip) { int retval; - RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__, - chip->sd_reset_counter, chip->card2lun[SD_CARD]); + dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__, + chip->sd_reset_counter, chip->card2lun[SD_CARD]); if (chip->card2lun[SD_CARD] >= MAX_ALLOWED_LUN_CNT) { clear_bit(SD_NR, &(chip->need_reset)); @@ -210,8 +211,8 @@ void do_reset_xd_card(struct rtsx_chip *chip) { int retval; - RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__, - chip->xd_reset_counter, chip->card2lun[XD_CARD]); + dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__, + chip->xd_reset_counter, chip->card2lun[XD_CARD]); if (chip->card2lun[XD_CARD] >= MAX_ALLOWED_LUN_CNT) { clear_bit(XD_NR, &(chip->need_reset)); @@ -258,8 +259,8 @@ void do_reset_ms_card(struct rtsx_chip *chip) { int retval; - RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__, - chip->ms_reset_counter, chip->card2lun[MS_CARD]); + dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__, + chip->ms_reset_counter, chip->card2lun[MS_CARD]); if (chip->card2lun[MS_CARD] >= MAX_ALLOWED_LUN_CNT) { clear_bit(MS_NR, &(chip->need_reset)); @@ -531,7 +532,7 @@ void card_cd_debounce(struct rtsx_chip *chip, unsigned long *need_reset, void rtsx_init_cards(struct rtsx_chip *chip) { if (RTSX_TST_DELINK(chip) && (rtsx_get_stat(chip) != RTSX_STAT_SS)) { - RTSX_DEBUGP("Reset chip in polling thread!\n"); + dev_dbg(rtsx_dev(chip), "Reset chip in polling thread!\n"); rtsx_reset_chip(chip); RTSX_CLR_DELINK(chip); } @@ -555,8 +556,8 @@ void rtsx_init_cards(struct rtsx_chip *chip) if (!(chip->card_exist & MS_CARD)) clear_bit(MS_NR, &(chip->need_release)); - RTSX_DEBUGP("chip->need_release = 0x%x\n", - (unsigned int)(chip->need_release)); + dev_dbg(rtsx_dev(chip), "chip->need_release = 0x%x\n", + (unsigned int)(chip->need_release)); #ifdef SUPPORT_OCP if (chip->need_release) { @@ -612,22 +613,23 @@ void rtsx_init_cards(struct rtsx_chip *chip) release_ms_card(chip); } - RTSX_DEBUGP("chip->card_exist = 0x%x\n", chip->card_exist); + dev_dbg(rtsx_dev(chip), "chip->card_exist = 0x%x\n", + chip->card_exist); if (!chip->card_exist) turn_off_led(chip, LED_GPIO); } if (chip->need_reset) { - RTSX_DEBUGP("chip->need_reset = 0x%x\n", - (unsigned int)(chip->need_reset)); + dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x\n", + (unsigned int)(chip->need_reset)); rtsx_reset_cards(chip); } if (chip->need_reinit) { - RTSX_DEBUGP("chip->need_reinit = 0x%x\n", - (unsigned int)(chip->need_reinit)); + dev_dbg(rtsx_dev(chip), "chip->need_reinit = 0x%x\n", + (unsigned int)(chip->need_reinit)); rtsx_reinit_cards(chip, 0); } @@ -652,8 +654,8 @@ int switch_ssc_clock(struct rtsx_chip *chip, int clk) max_N = 120; max_div = CLK_DIV_4; - RTSX_DEBUGP("Switch SSC clock to %dMHz (cur_clk = %d)\n", - clk, chip->cur_clk); + dev_dbg(rtsx_dev(chip), "Switch SSC clock to %dMHz (cur_clk = %d)\n", + clk, chip->cur_clk); if ((clk <= 2) || (N > max_N)) TRACE_RET(chip, STATUS_FAIL); @@ -667,7 +669,7 @@ int switch_ssc_clock(struct rtsx_chip *chip, int clk) N = (N + 2) * 2 - 2; div++; } - RTSX_DEBUGP("N = %d, div = %d\n", N, div); + dev_dbg(rtsx_dev(chip), "N = %d, div = %d\n", N, div); if (chip->ssc_en) { ssc_depth = 0x01; @@ -678,7 +680,7 @@ int switch_ssc_clock(struct rtsx_chip *chip, int clk) ssc_depth_mask = 0x03; - RTSX_DEBUGP("ssc_depth = %d\n", ssc_depth); + dev_dbg(rtsx_dev(chip), "ssc_depth = %d\n", ssc_depth); rtsx_init_cmd(chip); rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ); @@ -716,77 +718,78 @@ int switch_normal_clock(struct rtsx_chip *chip, int clk) switch (clk) { case CLK_20: - RTSX_DEBUGP("Switch clock to 20MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 20MHz\n"); sel = SSC_80; div = CLK_DIV_4; mcu_cnt = 7; break; case CLK_30: - RTSX_DEBUGP("Switch clock to 30MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 30MHz\n"); sel = SSC_120; div = CLK_DIV_4; mcu_cnt = 7; break; case CLK_40: - RTSX_DEBUGP("Switch clock to 40MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 40MHz\n"); sel = SSC_80; div = CLK_DIV_2; mcu_cnt = 7; break; case CLK_50: - RTSX_DEBUGP("Switch clock to 50MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 50MHz\n"); sel = SSC_100; div = CLK_DIV_2; mcu_cnt = 6; break; case CLK_60: - RTSX_DEBUGP("Switch clock to 60MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 60MHz\n"); sel = SSC_120; div = CLK_DIV_2; mcu_cnt = 6; break; case CLK_80: - RTSX_DEBUGP("Switch clock to 80MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 80MHz\n"); sel = SSC_80; div = CLK_DIV_1; mcu_cnt = 5; break; case CLK_100: - RTSX_DEBUGP("Switch clock to 100MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 100MHz\n"); sel = SSC_100; div = CLK_DIV_1; mcu_cnt = 5; break; case CLK_120: - RTSX_DEBUGP("Switch clock to 120MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 120MHz\n"); sel = SSC_120; div = CLK_DIV_1; mcu_cnt = 5; break; case CLK_150: - RTSX_DEBUGP("Switch clock to 150MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 150MHz\n"); sel = SSC_150; div = CLK_DIV_1; mcu_cnt = 4; break; case CLK_200: - RTSX_DEBUGP("Switch clock to 200MHz\n"); + dev_dbg(rtsx_dev(chip), "Switch clock to 200MHz\n"); sel = SSC_200; div = CLK_DIV_1; mcu_cnt = 4; break; default: - RTSX_DEBUGP("Try to switch to an illegal clock (%d)\n", clk); + dev_dbg(rtsx_dev(chip), "Try to switch to an illegal clock (%d)\n", + clk); TRACE_RET(chip, STATUS_FAIL); } @@ -946,7 +949,7 @@ int card_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, TRACE_RET(chip, STATUS_FAIL); if (!chip->rw_need_retry) { - RTSX_DEBUGP("RW fail, but no need to retry\n"); + dev_dbg(rtsx_dev(chip), "RW fail, but no need to retry\n"); break; } } else { @@ -954,7 +957,7 @@ int card_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, break; } - RTSX_DEBUGP("Retry RW, (i = %d)\n", i); + dev_dbg(rtsx_dev(chip), "Retry RW, (i = %d)\n", i); } return retval; @@ -1063,7 +1066,7 @@ int detect_card_cd(struct rtsx_chip *chip, int card) } else if (card == XD_CARD) { card_cd = XD_EXIST; } else { - RTSX_DEBUGP("Wrong card type: 0x%x\n", card); + dev_dbg(rtsx_dev(chip), "Wrong card type: 0x%x\n", card); TRACE_RET(chip, STATUS_FAIL); } diff --git a/drivers/staging/rts5208/rtsx_card.h b/drivers/staging/rts5208/rtsx_card.h index 4528b619f6b3..b19239e106f9 100644 --- a/drivers/staging/rts5208/rtsx_card.h +++ b/drivers/staging/rts5208/rtsx_card.h @@ -24,7 +24,6 @@ #ifndef __REALTEK_RTSX_CARD_H #define __REALTEK_RTSX_CARD_H -#include "debug.h" #include "rtsx.h" #include "rtsx_chip.h" #include "rtsx_transport.h" diff --git a/drivers/staging/rts5208/rtsx_chip.c b/drivers/staging/rts5208/rtsx_chip.c index 7907e931a355..fe98309b7de6 100644 --- a/drivers/staging/rts5208/rtsx_chip.c +++ b/drivers/staging/rts5208/rtsx_chip.c @@ -88,7 +88,8 @@ void rtsx_enable_bus_int(struct rtsx_chip *chip) #ifndef DISABLE_CARD_INT for (i = 0; i <= chip->max_lun; i++) { - RTSX_DEBUGP("lun2card[%d] = 0x%02x\n", i, chip->lun2card[i]); + dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n", + i, chip->lun2card[i]); if (chip->lun2card[i] & XD_CARD) reg |= XD_INT_EN; @@ -112,7 +113,7 @@ void rtsx_enable_bus_int(struct rtsx_chip *chip) /* Enable Bus Interrupt */ rtsx_writel(chip, RTSX_BIER, reg); - RTSX_DEBUGP("RTSX_BIER: 0x%08x\n", reg); + dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg); } void rtsx_disable_bus_int(struct rtsx_chip *chip) @@ -168,9 +169,12 @@ static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip) if (chip->sdio_in_charge) sw_bypass_sd = 1; } - RTSX_DEBUGP("chip->sdio_in_charge = %d\n", chip->sdio_in_charge); - RTSX_DEBUGP("chip->driver_first_load = %d\n", chip->driver_first_load); - RTSX_DEBUGP("sw_bypass_sd = %d\n", sw_bypass_sd); + dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n", + chip->sdio_in_charge); + dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n", + chip->driver_first_load); + dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n", + sw_bypass_sd); if (sw_bypass_sd) { u8 cd_toggle_mask = 0; @@ -189,7 +193,7 @@ static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip) chip->need_reset |= SD_CARD; } else { - RTSX_DEBUGP("Chip inserted with SDIO!\n"); + dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n"); if (chip->asic_code) { retval = sd_pull_ctl_enable(chip); @@ -418,7 +422,7 @@ int rtsx_reset_chip(struct rtsx_chip *chip) if (chip->hw_bypass_sd) goto NextCard; - RTSX_DEBUGP("In rtsx_reset_chip, chip->int_reg = 0x%x\n", + dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__, chip->int_reg); if (chip->int_reg & SD_EXIST) { #ifdef HW_AUTO_SWITCH_SD_BUS @@ -427,7 +431,7 @@ int rtsx_reset_chip(struct rtsx_chip *chip) else retval = rtsx_pre_handle_sdio_new(chip); - RTSX_DEBUGP("chip->need_reset = 0x%x (rtsx_reset_chip)\n", + dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (rtsx_reset_chip)\n", (unsigned int)(chip->need_reset)); #else /* HW_AUTO_SWITCH_SD_BUS */ retval = rtsx_pre_handle_sdio_old(chip); @@ -449,7 +453,7 @@ NextCard: if (chip->int_reg & CARD_EXIST) RTSX_WRITE_REG(chip, SSC_CTL1, SSC_RSTB, SSC_RSTB); - RTSX_DEBUGP("In rtsx_init_chip, chip->need_reset = 0x%x\n", + dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__, (unsigned int)(chip->need_reset)); RTSX_WRITE_REG(chip, RCCTL, 0x01, 0x00); @@ -543,7 +547,8 @@ static int rts5208_init(struct rtsx_chip *chip) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("Value of phy register 0x1C is 0x%x\n", reg); + dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n", + reg); chip->ic_version = (reg >> 4) & 0x07; if (reg & PHY_DEBUG_MODE) chip->phy_debug_mode = 1; @@ -557,7 +562,7 @@ static int rts5208_init(struct rtsx_chip *chip) } RTSX_READ_REG(chip, PDINFO, &val); - RTSX_DEBUGP("PDINFO: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val); if (val & AUX_PWR_DETECTED) chip->aux_pwr_exist = 1; else @@ -603,14 +608,14 @@ static int rts5288_init(struct rtsx_chip *chip) chip->phy_debug_mode = 0; RTSX_READ_REG(chip, PDINFO, &val); - RTSX_DEBUGP("PDINFO: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val); if (val & AUX_PWR_DETECTED) chip->aux_pwr_exist = 1; else chip->aux_pwr_exist = 0; RTSX_READ_REG(chip, CARD_SHARE_MODE, &val); - RTSX_DEBUGP("CARD_SHARE_MODE: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val); if (val & 0x04) chip->baro_pkg = QFN; else @@ -627,7 +632,7 @@ static int rts5288_init(struct rtsx_chip *chip) TRACE_RET(chip, STATUS_FAIL); max_func = (u8)((lval >> 29) & 0x07); - RTSX_DEBUGP("Max function number: %d\n", max_func); + dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func); if (max_func == 0x02) SET_SDIO_EXIST(chip); else @@ -658,8 +663,8 @@ int rtsx_init_chip(struct rtsx_chip *chip) int retval; unsigned int i; - RTSX_DEBUGP("Vendor ID: 0x%04x, Product ID: 0x%04x\n", - chip->vendor_id, chip->product_id); + dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n", + chip->vendor_id, chip->product_id); chip->ic_version = 0; @@ -702,12 +707,14 @@ int rtsx_init_chip(struct rtsx_chip *chip) if (!check_sd_speed_prior(chip->sd_speed_prior)) chip->sd_speed_prior = 0x01040203; - RTSX_DEBUGP("sd_speed_prior = 0x%08x\n", chip->sd_speed_prior); + dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n", + chip->sd_speed_prior); if (!check_sd_current_prior(chip->sd_current_prior)) chip->sd_current_prior = 0x00010203; - RTSX_DEBUGP("sd_current_prior = 0x%08x\n", chip->sd_current_prior); + dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n", + chip->sd_current_prior); if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0)) chip->sd_ddr_tx_phase = 0; @@ -718,7 +725,8 @@ int rtsx_init_chip(struct rtsx_chip *chip) RTSX_WRITE_REG(chip, FPDCTL, SSC_POWER_DOWN, 0); wait_timeout(200); RTSX_WRITE_REG(chip, CLK_DIV, 0x07, 0x07); - RTSX_DEBUGP("chip->use_hw_setting = %d\n", chip->use_hw_setting); + dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n", + chip->use_hw_setting); if (CHECK_PID(chip, 0x5208)) { retval = rts5208_init(chip); @@ -735,17 +743,23 @@ int rtsx_init_chip(struct rtsx_chip *chip) if (chip->ss_en == 2) chip->ss_en = 0; - RTSX_DEBUGP("chip->asic_code = %d\n", chip->asic_code); - RTSX_DEBUGP("chip->ic_version = 0x%x\n", chip->ic_version); - RTSX_DEBUGP("chip->phy_debug_mode = %d\n", chip->phy_debug_mode); - RTSX_DEBUGP("chip->aux_pwr_exist = %d\n", chip->aux_pwr_exist); - RTSX_DEBUGP("chip->sdio_func_exist = %d\n", chip->sdio_func_exist); - RTSX_DEBUGP("chip->hw_bypass_sd = %d\n", chip->hw_bypass_sd); - RTSX_DEBUGP("chip->aspm_l0s_l1_en = %d\n", chip->aspm_l0s_l1_en); - RTSX_DEBUGP("chip->lun_mode = %d\n", chip->lun_mode); - RTSX_DEBUGP("chip->auto_delink_en = %d\n", chip->auto_delink_en); - RTSX_DEBUGP("chip->ss_en = %d\n", chip->ss_en); - RTSX_DEBUGP("chip->baro_pkg = %d\n", chip->baro_pkg); + dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code); + dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version); + dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n", + chip->phy_debug_mode); + dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n", + chip->aux_pwr_exist); + dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n", + chip->sdio_func_exist); + dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n", + chip->hw_bypass_sd); + dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n", + chip->aspm_l0s_l1_en); + dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode); + dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n", + chip->auto_delink_en); + dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en); + dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg); if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) { chip->card2lun[SD_CARD] = 0; @@ -832,8 +846,8 @@ static void rtsx_monitor_aspm_config(struct rtsx_chip *chip) if (maybe_support_aspm) chip->aspm_l0s_l1_en = 0x03; - RTSX_DEBUGP("aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n", - chip->aspm_level[0], chip->aspm_level[1]); + dev_dbg(rtsx_dev(chip), "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n", + chip->aspm_level[0], chip->aspm_level[1]); if (chip->aspm_l0s_l1_en) { chip->aspm_enabled = 1; @@ -943,7 +957,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) dynamic_configure_sdio_aspm(chip); } else { if (!chip->sdio_aspm) { - RTSX_DEBUGP("SDIO enter ASPM!\n"); + dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n"); rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30 | (chip->aspm_level[1] << 2)); @@ -958,7 +972,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) chip->idle_counter++; } else { if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) { - RTSX_DEBUGP("Idle state!\n"); + dev_dbg(rtsx_dev(chip), "Idle state!\n"); rtsx_set_stat(chip, RTSX_STAT_IDLE); #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK) @@ -996,12 +1010,10 @@ void rtsx_polling_func(struct rtsx_chip *chip) #ifdef SUPPORT_OCP if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) { -#ifdef CONFIG_RTS5208_DEBUG if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER | MS_OC_NOW | MS_OC_EVER)) - RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", + dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", chip->ocp_stat); -#endif if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) { if (chip->card_exist & SD_CARD) { @@ -1021,7 +1033,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) } } else { if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) { - RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", + dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", chip->ocp_stat); if (chip->card_exist & SD_CARD) { rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, @@ -1060,7 +1072,7 @@ Delink_Stage: rtsx_set_phy_reg_bit(chip, 0x1C, 2); if (chip->card_exist) { - RTSX_DEBUGP("False card inserted, do force delink\n"); + dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n"); if (enter_L1) rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1); @@ -1074,7 +1086,7 @@ Delink_Stage: chip->auto_delink_cnt = delink_stage3_cnt + 1; } else { - RTSX_DEBUGP("No card inserted, do delink\n"); + dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n"); if (enter_L1) rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1); @@ -1088,7 +1100,7 @@ Delink_Stage: } if (chip->auto_delink_cnt == delink_stage2_cnt) { - RTSX_DEBUGP("Try to do force delink\n"); + dev_dbg(rtsx_dev(chip), "Try to do force delink\n"); if (enter_L1) rtsx_exit_L1(chip); @@ -1129,7 +1141,7 @@ void rtsx_stop_cmd(struct rtsx_chip *chip, int card) int addr = RTSX_HCBAR + i * 4; u32 reg; reg = rtsx_readl(chip, addr); - RTSX_DEBUGP("BAR (0x%02x): 0x%08x\n", addr, reg); + dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg); } rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD); rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA); @@ -1138,7 +1150,7 @@ void rtsx_stop_cmd(struct rtsx_chip *chip, int card) u16 addr = 0xFE20 + (u16)i; u8 val; rtsx_read_register(chip, addr, &val); - RTSX_DEBUGP("0x%04X: 0x%02x\n", addr, val); + dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val); } rtsx_write_register(chip, DMACTL, 0x80, 0x80); @@ -1267,8 +1279,6 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, int dw_len, i, j; int retval; - RTSX_DEBUGP("%s\n", __func__); - if (!buf) TRACE_RET(chip, STATUS_NOMEM); @@ -1277,7 +1287,7 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, else dw_len = (len + offset) / 4; - RTSX_DEBUGP("dw_len = %d\n", dw_len); + dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len); data = vzalloc(dw_len * 4); if (!data) @@ -1327,14 +1337,12 @@ int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, int dw_len, i, j; int retval; - RTSX_DEBUGP("%s\n", __func__); - if ((len + offset) % 4) dw_len = (len + offset) / 4 + 1; else dw_len = (len + offset) / 4; - RTSX_DEBUGP("dw_len = %d\n", dw_len); + dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len); data = vmalloc(dw_len * 4); if (!data) @@ -1455,7 +1463,7 @@ int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val) continue; tmp &= (~(u8)(1 << i)); - RTSX_DEBUGP("Write 0x%x to 0x%x\n", tmp, addr); + dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr); RTSX_WRITE_REG(chip, EFUSE_DATA, 0xFF, tmp); RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0xA0|addr); @@ -1520,9 +1528,9 @@ int rtsx_check_link_ready(struct rtsx_chip *chip) RTSX_READ_REG(chip, IRQSTAT0, &val); - RTSX_DEBUGP("IRQSTAT0: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "IRQSTAT0: 0x%x\n", val); if (val & LINK_RDY_INT) { - RTSX_DEBUGP("Delinked!\n"); + dev_dbg(rtsx_dev(chip), "Delinked!\n"); rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT); return STATUS_FAIL; } @@ -1534,7 +1542,8 @@ static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate) { u32 ultmp; - RTSX_DEBUGP("%04x set pm_dstate to %d\n", chip->product_id, dstate); + dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n", + chip->product_id, dstate); if (CHK_SDIO_EXIST(chip)) { u8 func_no; @@ -1545,8 +1554,8 @@ static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate) func_no = 1; rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp); - RTSX_DEBUGP("pm_dstate of function %d: 0x%x\n", (int)func_no, - ultmp); + dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n", + (int)func_no, ultmp); rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate); } @@ -1567,7 +1576,7 @@ void rtsx_exit_L1(struct rtsx_chip *chip) void rtsx_enter_ss(struct rtsx_chip *chip) { - RTSX_DEBUGP("Enter Selective Suspend State!\n"); + dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n"); rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT); @@ -1604,7 +1613,7 @@ void rtsx_enter_ss(struct rtsx_chip *chip) void rtsx_exit_ss(struct rtsx_chip *chip) { - RTSX_DEBUGP("Exit Selective Suspend State!\n"); + dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n"); rtsx_exit_L1(chip); @@ -1719,7 +1728,7 @@ void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat) { int retval; - RTSX_DEBUGP("rtsx_do_before_power_down, pm_stat = %d\n", pm_stat); + dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat); rtsx_set_stat(chip, RTSX_STAT_SUSPEND); @@ -1752,14 +1761,14 @@ void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat) } if (pm_stat == PM_S1) { - RTSX_DEBUGP("Host enter S1\n"); + dev_dbg(rtsx_dev(chip), "Host enter S1\n"); rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, HOST_ENTER_S1); } else if (pm_stat == PM_S3) { if (chip->s3_pwr_off_delay > 0) wait_timeout(chip->s3_pwr_off_delay); - RTSX_DEBUGP("Host enter S3\n"); + dev_dbg(rtsx_dev(chip), "Host enter S3\n"); rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, HOST_ENTER_S3); } @@ -1778,7 +1787,7 @@ void rtsx_enable_aspm(struct rtsx_chip *chip) { if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) { if (!chip->aspm_enabled) { - RTSX_DEBUGP("Try to enable ASPM\n"); + dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n"); chip->aspm_enabled = 1; if (chip->asic_code && CHECK_PID(chip, 0x5208)) @@ -1813,7 +1822,7 @@ void rtsx_disable_aspm(struct rtsx_chip *chip) if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) { if (chip->aspm_enabled) { - RTSX_DEBUGP("Try to disable ASPM\n"); + dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n"); chip->aspm_enabled = 0; if (chip->asic_code && CHECK_PID(chip, 0x5208)) diff --git a/drivers/staging/rts5208/rtsx_chip.h b/drivers/staging/rts5208/rtsx_chip.h index c25efcc3f3aa..feac98661cec 100644 --- a/drivers/staging/rts5208/rtsx_chip.h +++ b/drivers/staging/rts5208/rtsx_chip.h @@ -920,6 +920,11 @@ struct rtsx_chip { u32 sd_ctl; }; +static inline struct device *rtsx_dev(const struct rtsx_chip *chip) +{ + return &chip->rtsx->pci->dev; +} + #define rtsx_set_stat(chip, stat) \ do { \ if ((stat) != RTSX_STAT_IDLE) { \ diff --git a/drivers/staging/rts5208/rtsx_scsi.c b/drivers/staging/rts5208/rtsx_scsi.c index 72b4c26d6b9a..5f5f512714e5 100644 --- a/drivers/staging/rts5208/rtsx_scsi.c +++ b/drivers/staging/rts5208/rtsx_scsi.c @@ -35,8 +35,9 @@ #include "ms.h" #include "spi.h" -void scsi_show_command(struct scsi_cmnd *srb) +void scsi_show_command(struct rtsx_chip *chip) { + struct scsi_cmnd *srb = chip->srb; char *what = NULL; int i, unknown_cmd = 0; @@ -314,13 +315,13 @@ void scsi_show_command(struct scsi_cmnd *srb) } if (srb->cmnd[0] != TEST_UNIT_READY) - RTSX_DEBUGP("Command %s (%d bytes)\n", what, srb->cmd_len); + dev_dbg(rtsx_dev(chip), "Command %s (%d bytes)\n", + what, srb->cmd_len); if (unknown_cmd) { - RTSX_DEBUGP(""); for (i = 0; i < srb->cmd_len && i < 16; i++) - RTSX_DEBUGPN(" %02x", srb->cmnd[i]); - RTSX_DEBUGPN("\n"); + dev_dbg(rtsx_dev(chip), " %02x", srb->cmnd[i]); + dev_dbg(rtsx_dev(chip), "\n"); } } @@ -883,14 +884,14 @@ static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip) /* Accessing to any card is forbidden * until the erase procedure of SD is completed */ - RTSX_DEBUGP("SD card being erased!\n"); + dev_dbg(rtsx_dev(chip), "SD card being erased!\n"); set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN); TRACE_RET(chip, TRANSPORT_FAILED); } if (get_lun_card(chip, lun) == SD_CARD) { if (sd_card->sd_lock_status & SD_LOCKED) { - RTSX_DEBUGP("SD card locked!\n"); + dev_dbg(rtsx_dev(chip), "SD card locked!\n"); set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN); TRACE_RET(chip, TRANSPORT_FAILED); @@ -935,7 +936,7 @@ static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip) } if (chip->rw_fail_cnt[lun] == 3) { - RTSX_DEBUGP("read/write fail three times in succession\n"); + dev_dbg(rtsx_dev(chip), "read/write fail three times in succession\n"); if (srb->sc_data_direction == DMA_FROM_DEVICE) set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); @@ -947,7 +948,7 @@ static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip) if (srb->sc_data_direction == DMA_TO_DEVICE) { if (check_card_wp(chip, lun)) { - RTSX_DEBUGP("Write protected card!\n"); + dev_dbg(rtsx_dev(chip), "Write protected card!\n"); set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT); TRACE_RET(chip, TRANSPORT_FAILED); @@ -1380,7 +1381,7 @@ static int trace_msg_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) *(ptr++) = (u8)(msg_cnt >> 16); *(ptr++) = (u8)(msg_cnt >> 8); *(ptr++) = (u8)msg_cnt; - RTSX_DEBUGP("Trace message count is %d\n", msg_cnt); + dev_dbg(rtsx_dev(chip), "Trace message count is %d\n", msg_cnt); for (i = 1; i <= msg_cnt; i++) { int j, idx; @@ -1432,7 +1433,7 @@ static int read_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip) addr = srb->cmnd[4]; val = rtsx_readl(chip, addr); - RTSX_DEBUGP("Host register (0x%x): 0x%x\n", addr, val); + dev_dbg(rtsx_dev(chip), "Host register (0x%x): 0x%x\n", addr, val); buf[0] = (u8)(val >> 24); buf[1] = (u8)(val >> 16); @@ -1595,9 +1596,9 @@ static int dma_access_ring_buffer(struct scsi_cmnd *srb, struct rtsx_chip *chip) len = min_t(u16, len, scsi_bufflen(srb)); if (srb->sc_data_direction == DMA_FROM_DEVICE) - RTSX_DEBUGP("Read from device\n"); + dev_dbg(rtsx_dev(chip), "Read from device\n"); else - RTSX_DEBUGP("Write to device\n"); + dev_dbg(rtsx_dev(chip), "Write to device\n"); retval = rtsx_transfer_data(chip, 0, scsi_sglist(srb), len, scsi_sg_count(srb), srb->sc_data_direction, 1000); @@ -1731,7 +1732,7 @@ static int get_dev_status(struct scsi_cmnd *srb, struct rtsx_chip *chip) status[0x17] = 0x00; } - RTSX_DEBUGP("status[0x17] = 0x%x\n", status[0x17]); + dev_dbg(rtsx_dev(chip), "status[0x17] = 0x%x\n", status[0x17]); #endif status[0x18] = 0x8A; @@ -2312,8 +2313,8 @@ static int read_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip) addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7]; - RTSX_DEBUGP("%s: func = %d, addr = 0x%x, len = %d\n", __func__, func, - addr, len); + dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x, len = %d\n", + __func__, func, addr, len); if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) func_max = 1; @@ -2366,7 +2367,8 @@ static int write_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip) addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7]; - RTSX_DEBUGP("%s: func = %d, addr = 0x%x\n", __func__, func, addr); + dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x\n", + __func__, func, addr); if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) func_max = 1; @@ -3060,7 +3062,7 @@ static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) } key_format = srb->cmnd[10] & 0x3F; - RTSX_DEBUGP("key_format = 0x%x\n", key_format); + dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format); switch (key_format) { case KF_GET_LOC_EKB: @@ -3163,7 +3165,7 @@ static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) } key_format = srb->cmnd[10] & 0x3F; - RTSX_DEBUGP("key_format = 0x%x\n", key_format); + dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format); switch (key_format) { case KF_SET_LEAF_ID: diff --git a/drivers/staging/rts5208/rtsx_scsi.h b/drivers/staging/rts5208/rtsx_scsi.h index d1750570dd38..03dd76d6c859 100644 --- a/drivers/staging/rts5208/rtsx_scsi.h +++ b/drivers/staging/rts5208/rtsx_scsi.h @@ -133,7 +133,7 @@ #define SENSE_TYPE_MEDIA_READ_FORBIDDEN 0x10 #endif -void scsi_show_command(struct scsi_cmnd *srb); +void scsi_show_command(struct rtsx_chip *chip); void set_sense_type(struct rtsx_chip *chip, unsigned int lun, int sense_type); void set_sense_data(struct rtsx_chip *chip, unsigned int lun, u8 err_code, u8 sense_key, u32 info, u8 asc, u8 ascq, diff --git a/drivers/staging/rts5208/rtsx_transport.c b/drivers/staging/rts5208/rtsx_transport.c index 694d3834962c..0a67dca72dff 100644 --- a/drivers/staging/rts5208/rtsx_transport.c +++ b/drivers/staging/rts5208/rtsx_transport.c @@ -29,7 +29,6 @@ #include "rtsx_transport.h" #include "rtsx_chip.h" #include "rtsx_card.h" -#include "debug.h" /*********************************************************************** * Scatter-gather transfer buffer access routines @@ -170,14 +169,14 @@ void rtsx_invoke_transport(struct scsi_cmnd *srb, struct rtsx_chip *chip) * short-circuit all other processing */ if (rtsx_chk_stat(chip, RTSX_STAT_ABORT)) { - RTSX_DEBUGP("-- command was aborted\n"); + dev_dbg(rtsx_dev(chip), "-- command was aborted\n"); srb->result = DID_ABORT << 16; goto Handle_Errors; } /* if there is a transport error, reset and don't auto-sense */ if (result == TRANSPORT_ERROR) { - RTSX_DEBUGP("-- transport indicates error, resetting\n"); + dev_dbg(rtsx_dev(chip), "-- transport indicates error, resetting\n"); srb->result = DID_ERROR << 16; goto Handle_Errors; } @@ -274,7 +273,8 @@ int rtsx_send_cmd(struct rtsx_chip *chip, u8 card, int timeout) timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; TRACE_GOTO(chip, finish_send_cmd); } @@ -386,9 +386,10 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card, addr = sg_dma_address(sg_ptr); len = sg_dma_len(sg_ptr); - RTSX_DEBUGP("DMA addr: 0x%x, Len: 0x%x\n", - (unsigned int)addr, len); - RTSX_DEBUGP("*index = %d, *offset = %d\n", *index, *offset); + dev_dbg(rtsx_dev(chip), "DMA addr: 0x%x, Len: 0x%x\n", + (unsigned int)addr, len); + dev_dbg(rtsx_dev(chip), "*index = %d, *offset = %d\n", + *index, *offset); addr += *offset; @@ -415,7 +416,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card, sg_ptr = sg_next(sg_ptr); } - RTSX_DEBUGP("SG table count = %d\n", chip->sgi); + dev_dbg(rtsx_dev(chip), "SG table count = %d\n", chip->sgi); val |= (u32)(dir & 0x01) << 29; val |= ADMA_MODE; @@ -432,8 +433,10 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card, timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("Timeout (%s %d)\n", __func__, __LINE__); - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n", + __func__, __LINE__); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; goto out; } @@ -454,8 +457,10 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card, timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("Timeout (%s %d)\n", __func__, __LINE__); - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n", + __func__, __LINE__); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; goto out; } @@ -542,8 +547,8 @@ static int rtsx_transfer_sglist_adma(struct rtsx_chip *chip, u8 card, unsigned int len = sg_dma_len(sg_ptr); u8 option; - RTSX_DEBUGP("DMA addr: 0x%x, Len: 0x%x\n", - (unsigned int)addr, len); + dev_dbg(rtsx_dev(chip), "DMA addr: 0x%x, Len: 0x%x\n", + (unsigned int)addr, len); if (j == (sg_cnt - 1)) option = SG_VALID | SG_END | SG_TRANS_DATA; @@ -555,7 +560,7 @@ static int rtsx_transfer_sglist_adma(struct rtsx_chip *chip, u8 card, sg_ptr = sg_next(sg_ptr); } - RTSX_DEBUGP("SG table count = %d\n", chip->sgi); + dev_dbg(rtsx_dev(chip), "SG table count = %d\n", chip->sgi); val |= (u32)(dir & 0x01) << 29; val |= ADMA_MODE; @@ -572,8 +577,10 @@ static int rtsx_transfer_sglist_adma(struct rtsx_chip *chip, u8 card, timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("Timeout (%s %d)\n", __func__, __LINE__); - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n", + __func__, __LINE__); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; goto out; } @@ -597,8 +604,10 @@ static int rtsx_transfer_sglist_adma(struct rtsx_chip *chip, u8 card, timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("Timeout (%s %d)\n", __func__, __LINE__); - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n", + __func__, __LINE__); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; goto out; } @@ -681,8 +690,10 @@ static int rtsx_transfer_buf(struct rtsx_chip *chip, u8 card, void *buf, timeleft = wait_for_completion_interruptible_timeout( &trans_done, timeout * HZ / 1000); if (timeleft <= 0) { - RTSX_DEBUGP("Timeout (%s %d)\n", __func__, __LINE__); - RTSX_DEBUGP("chip->int_reg = 0x%x\n", chip->int_reg); + dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n", + __func__, __LINE__); + dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n", + chip->int_reg); err = -ETIMEDOUT; goto out; } @@ -742,7 +753,7 @@ int rtsx_transfer_data(struct rtsx_chip *chip, u8 card, void *buf, size_t len, { int err = 0; - RTSX_DEBUGP("use_sg = %d\n", use_sg); + dev_dbg(rtsx_dev(chip), "use_sg = %d\n", use_sg); /* don't transfer data during abort processing */ if (rtsx_chk_stat(chip, RTSX_STAT_ABORT)) diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c index c7c1f5410430..c79bea808698 100644 --- a/drivers/staging/rts5208/sd.c +++ b/drivers/staging/rts5208/sd.c @@ -133,7 +133,7 @@ static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx, sd_clr_err_code(chip); - RTSX_DEBUGP("SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg); if (rsp_type == SD_RSP_TYPE_R1b) timeout = 3000; @@ -177,10 +177,10 @@ RTY_SEND_CMD: u8 val; rtsx_read_register(chip, REG_SD_STAT1, &val); - RTSX_DEBUGP("SD_STAT1: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val); rtsx_read_register(chip, REG_SD_CFG3, &val); - RTSX_DEBUGP("SD_CFG3: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val); if (retval == -ETIMEDOUT) { if (rsp_type & SD_WAIT_BUSY_END) { @@ -241,15 +241,18 @@ RTY_SEND_CMD: if (ptr[1] & 0x7F) #endif { - RTSX_DEBUGP("ptr[1]: 0x%02x\n", ptr[1]); + dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n", + ptr[1]); TRACE_RET(chip, STATUS_FAIL); } if (ptr[2] & 0xFF) { - RTSX_DEBUGP("ptr[2]: 0x%02x\n", ptr[2]); + dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n", + ptr[2]); TRACE_RET(chip, STATUS_FAIL); } if (ptr[3] & 0x80) { - RTSX_DEBUGP("ptr[3]: 0x%02x\n", ptr[3]); + dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n", + ptr[3]); TRACE_RET(chip, STATUS_FAIL); } if (ptr[3] & 0x01) @@ -285,7 +288,7 @@ static int sd_read_data(struct rtsx_chip *chip, rtsx_init_cmd(chip); if (cmd_len) { - RTSX_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40); for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i, 0xFF, cmd[i]); @@ -359,7 +362,7 @@ static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode, rtsx_init_cmd(chip); if (cmd_len) { - RTSX_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40); for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) { rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i, 0xFF, cmd[i]); @@ -423,11 +426,11 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp) memcpy(sd_card->raw_csd, rsp + 1, 15); - RTSX_DEBUGP("CSD Response:\n"); + dev_dbg(rtsx_dev(chip), "CSD Response:\n"); RTSX_DUMP(sd_card->raw_csd, 16); csd_ver = (rsp[1] & 0xc0) >> 6; - RTSX_DEBUGP("csd_ver = %d\n", csd_ver); + dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver); trans_speed = rsp[4]; if ((trans_speed & 0x07) == 0x02) { @@ -494,7 +497,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp) if (rsp[15] & 0x30) chip->card_wp |= SD_CARD; - RTSX_DEBUGP("CSD WP Status: 0x%x\n", rsp[15]); + dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]); } return STATUS_SUCCESS; @@ -654,7 +657,7 @@ static int sd_update_lock_status(struct rtsx_chip *chip) else sd_card->sd_lock_status &= ~SD_LOCKED; - RTSX_DEBUGP("sd_card->sd_lock_status = 0x%x\n", + dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n", sd_card->sd_lock_status); if (rsp[1] & 0x01) @@ -754,7 +757,7 @@ static int sd_voltage_switch(struct rtsx_chip *chip) SD_DAT1_STATUS | SD_DAT0_STATUS)) != (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS | SD_DAT1_STATUS | SD_DAT0_STATUS)) { - RTSX_DEBUGP("SD_BUS_STAT: 0x%x\n", stat); + dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat); rtsx_write_register(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0); rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0); @@ -788,8 +791,8 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) int retval; int ddr_rx = 0; - RTSX_DEBUGP("sd_change_phase (sample_point = %d, tune_dir = %d)\n", - sample_point, tune_dir); + dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n", + sample_point, tune_dir); if (tune_dir == TUNE_RX) { SD_VP_CTL = SD_VPRX_CTL; @@ -811,9 +814,9 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) } else { #ifdef CONFIG_RTS5208_DEBUG rtsx_read_register(chip, SD_VP_CTL, &val); - RTSX_DEBUGP("SD_VP_CTL: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); rtsx_read_register(chip, SD_DCMPS_CTL, &val); - RTSX_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); #endif if (ddr_rx) { @@ -862,11 +865,10 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) Fail: #ifdef CONFIG_RTS5208_DEBUG rtsx_read_register(chip, SD_VP_CTL, &val); - RTSX_DEBUGP("SD_VP_CTL: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); rtsx_read_register(chip, SD_DCMPS_CTL, &val); - RTSX_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val); + dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); #endif - rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0); rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0); wait_timeout(10); @@ -1026,8 +1028,8 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, int retval; u8 cmd[5], buf[64]; - RTSX_DEBUGP("sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n", - mode, func_group, func_to_switch); + dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n", + mode, func_group, func_to_switch); cmd[0] = 0x40 | SWITCH; cmd[1] = mode; @@ -1066,16 +1068,21 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, sd_card->func_group3_mask = buf[0x09]; sd_card->func_group4_mask = buf[0x07]; - RTSX_DEBUGP("func_group1_mask = 0x%02x\n", buf[0x0D]); - RTSX_DEBUGP("func_group2_mask = 0x%02x\n", buf[0x0B]); - RTSX_DEBUGP("func_group3_mask = 0x%02x\n", buf[0x09]); - RTSX_DEBUGP("func_group4_mask = 0x%02x\n", buf[0x07]); + dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n", + buf[0x0D]); + dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n", + buf[0x0B]); + dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n", + buf[0x09]); + dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n", + buf[0x07]); } else { /* Maximum current consumption, check whether current is * acceptable; bit[511:496] = 0x0000 means some error happened. */ u16 cc = ((u16)buf[0] << 8) | buf[1]; - RTSX_DEBUGP("Maximum current consumption: %dmA\n", cc); + dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n", + cc); if ((cc == 0) || (cc > 800)) TRACE_RET(chip, STATUS_FAIL); @@ -1136,7 +1143,7 @@ static int sd_check_switch(struct rtsx_chip *chip, RTSX_READ_REG(chip, SD_STAT1, &stat); if (stat & SD_CRC16_ERR) { - RTSX_DEBUGP("SD CRC16 error when switching mode\n"); + dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n"); TRACE_RET(chip, STATUS_FAIL); } } @@ -1207,14 +1214,15 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width) break; } - RTSX_DEBUGP("SD_FUNC_GROUP_1: func_to_switch = 0x%02x", func_to_switch); + dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x", + func_to_switch); #ifdef SUPPORT_SD_LOCK if ((sd_card->sd_lock_status & SD_SDR_RST) && (DDR50_SUPPORT == func_to_switch) && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) { func_to_switch = SDR50_SUPPORT; - RTSX_DEBUGP("Using SDR50 instead of DDR50 for SD Lock\n"); + dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n"); } #endif @@ -1295,7 +1303,8 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width) break; } - RTSX_DEBUGP("SD_FUNC_GROUP_4: func_to_switch = 0x%02x", func_to_switch); + dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x", + func_to_switch); if (func_to_switch <= CURRENT_LIMIT_800) { retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch, @@ -1304,7 +1313,8 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width) if (sd_check_err_code(chip, SD_NO_CARD)) TRACE_RET(chip, STATUS_FAIL); } - RTSX_DEBUGP("Switch current limit finished! (%d)\n", retval); + dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n", + retval); } if (CHK_SD_DDR50(sd_card)) @@ -1327,7 +1337,7 @@ static int sd_wait_data_idle(struct rtsx_chip *chip) } udelay(100); } - RTSX_DEBUGP("SD_DATA_STATE: 0x%02x\n", val); + dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val); return retval; } @@ -1369,7 +1379,7 @@ static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("sd ddr tuning rx\n"); + dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n"); retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0); @@ -1411,7 +1421,7 @@ static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("mmc ddr tuning rx\n"); + dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n"); cmd[0] = 0x40 | SEND_EXT_CSD; cmd[1] = 0; @@ -1552,7 +1562,7 @@ static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, } if (cont_path_cnt == 0) { - RTSX_DEBUGP("No continuous phase path\n"); + dev_dbg(rtsx_dev(chip), "No continuous phase path\n"); goto Search_Finish; } else { int idx = cont_path_cnt - 1; @@ -1581,11 +1591,12 @@ static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, final_path_idx = i; } - RTSX_DEBUGP("path[%d].start = %d\n", i, path[i].start); - RTSX_DEBUGP("path[%d].end = %d\n", i, path[i].end); - RTSX_DEBUGP("path[%d].len = %d\n", i, path[i].len); - RTSX_DEBUGP("path[%d].mid = %d\n", i, path[i].mid); - RTSX_DEBUGP("\n"); + dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n", + i, path[i].start); + dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end); + dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len); + dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid); + dev_dbg(rtsx_dev(chip), "\n"); } if (tune_dir == TUNE_TX) { @@ -1619,7 +1630,7 @@ static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, } Search_Finish: - RTSX_DEBUGP("Final chosen phase: %d\n", final_phase); + dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase); return final_phase; } @@ -1661,10 +1672,10 @@ static int sd_tuning_rx(struct rtsx_chip *chip) phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2]; for (i = 0; i < 3; i++) - RTSX_DEBUGP("RX raw_phase_map[%d] = 0x%08x\n", i, - raw_phase_map[i]); + dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n", + i, raw_phase_map[i]); - RTSX_DEBUGP("RX phase_map = 0x%08x\n", phase_map); + dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map); final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX); if (final_phase == 0xFF) @@ -1711,7 +1722,8 @@ static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip) RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0); - RTSX_DEBUGP("DDR TX pre tune phase_map = 0x%08x\n", phase_map); + dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n", + phase_map); final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX); if (final_phase == 0xFF) @@ -1721,7 +1733,8 @@ static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("DDR TX pre tune phase: %d\n", (int)final_phase); + dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n", + (int)final_phase); return STATUS_SUCCESS; } @@ -1766,10 +1779,10 @@ static int sd_tuning_tx(struct rtsx_chip *chip) phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2]; for (i = 0; i < 3; i++) - RTSX_DEBUGP("TX raw_phase_map[%d] = 0x%08x\n", + dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n", i, raw_phase_map[i]); - RTSX_DEBUGP("TX phase_map = 0x%08x\n", phase_map); + dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map); final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX); if (final_phase == 0xFF) @@ -2022,7 +2035,7 @@ static int sd_init_power(struct rtsx_chip *chip) #ifdef SUPPORT_OCP if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) { - RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", + dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", chip->ocp_stat); TRACE_RET(chip, STATUS_FAIL); } @@ -2105,11 +2118,11 @@ static int sd_check_wp_state(struct rtsx_chip *chip) TRACE_RET(chip, STATUS_FAIL); } - RTSX_DEBUGP("ACMD13:\n"); + dev_dbg(rtsx_dev(chip), "ACMD13:\n"); RTSX_DUMP(buf, 64); sd_card_type = ((u16)buf[2] << 8) | buf[3]; - RTSX_DEBUGP("sd_card_type = 0x%04x\n", sd_card_type); + dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type); if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) { /* ROM card or OTP */ chip->card_wp |= SD_CARD; @@ -2171,7 +2184,8 @@ Switch_Fail: if (retval == STATUS_SUCCESS) { int func_num = (rsp[1] >> 4) & 0x07; if (func_num) { - RTSX_DEBUGP("SD_IO card (Function number: %d)!\n", func_num); + dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n", + func_num); chip->sd_io = 1; TRACE_RET(chip, STATUS_FAIL); } @@ -2184,7 +2198,7 @@ Switch_Fail: sd_dummy_clock(chip); } - RTSX_DEBUGP("Normal card!\n"); + dev_dbg(rtsx_dev(chip), "Normal card!\n"); } /* Start Initialization Process of SD Card */ @@ -2260,7 +2274,7 @@ RTY_SD_RST: CLR_SD_HCXC(sd_card); support_1v8 = 0; } - RTSX_DEBUGP("support_1v8 = %d\n", support_1v8); + dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8); if (support_1v8) { retval = sd_voltage_switch(chip); @@ -2508,7 +2522,7 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width) if (retval != STATUS_SUCCESS) TRACE_RET(chip, SWITCH_ERR); - RTSX_DEBUGP("SD/MMC CMD %d\n", BUSTEST_R); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R); rtsx_init_cmd(chip); @@ -2547,8 +2561,8 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width) ptr = rtsx_get_cmd_data(chip) + 1; if (width == MMC_8BIT_BUS) { - RTSX_DEBUGP("BUSTEST_R [8bits]: 0x%02x 0x%02x\n", ptr[0], - ptr[1]); + dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n", + ptr[0], ptr[1]); if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) { u8 rsp[5]; u32 arg; @@ -2565,7 +2579,7 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width) return SWITCH_SUCCESS; } } else { - RTSX_DEBUGP("BUSTEST_R [4bits]: 0x%02x\n", ptr[0]); + dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]); if (ptr[0] == 0xA5) { u8 rsp[5]; u32 arg; @@ -2595,7 +2609,7 @@ static int mmc_switch_timing_bus(struct rtsx_chip *chip, int switch_ddr) CLR_MMC_HS(sd_card); - RTSX_DEBUGP("SD/MMC CMD %d\n", SEND_EXT_CSD); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD); rtsx_init_cmd(chip); @@ -2951,7 +2965,7 @@ int reset_sd_card(struct rtsx_chip *chip) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("sd_card->sd_type = 0x%x\n", sd_card->sd_type); + dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type); return STATUS_SUCCESS; } @@ -2999,7 +3013,7 @@ static int reset_mmc_only(struct rtsx_chip *chip) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("In reset_mmc_only, sd_card->sd_type = 0x%x\n", + dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n", sd_card->sd_type); return STATUS_SUCCESS; @@ -3116,11 +3130,13 @@ int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, int retval; if (srb->sc_data_direction == DMA_FROM_DEVICE) { - RTSX_DEBUGP("sd_rw: Read %d %s from 0x%x\n", sector_cnt, - (sector_cnt > 1) ? "sectors" : "sector", start_sector); + dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n", + sector_cnt, (sector_cnt > 1) ? "sectors" : "sector", + start_sector); } else { - RTSX_DEBUGP("sd_rw: Write %d %s to 0x%x\n", sector_cnt, - (sector_cnt > 1) ? "sectors" : "sector", start_sector); + dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n", + sector_cnt, (sector_cnt > 1) ? "sectors" : "sector", + start_sector); } sd_card->cleanup_counter = 0; @@ -3236,7 +3252,8 @@ int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, rtsx_send_cmd_no_wait(chip); } else { if (srb->sc_data_direction == DMA_FROM_DEVICE) { - RTSX_DEBUGP("SD/MMC CMD %d\n", READ_MULTIPLE_BLOCK); + dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", + READ_MULTIPLE_BLOCK); rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | READ_MULTIPLE_BLOCK); rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, @@ -3327,7 +3344,7 @@ int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, rtsx_clear_sd_error(chip); if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { chip->rw_need_retry = 0; - RTSX_DEBUGP("No card exist, exit sd_rw\n"); + dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n"); TRACE_RET(chip, STATUS_FAIL); } @@ -3341,7 +3358,7 @@ int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, } if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) { - RTSX_DEBUGP("SD CRC error, tune clock!\n"); + dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n"); sd_set_err_code(chip, SD_CRC_ERR); TRACE_GOTO(chip, RW_FAIL); } @@ -3365,7 +3382,7 @@ RW_FAIL: if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { chip->rw_need_retry = 0; - RTSX_DEBUGP("No card exist, exit sd_rw\n"); + dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n"); TRACE_RET(chip, STATUS_FAIL); } @@ -3406,7 +3423,7 @@ int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx, int stat_idx = 0; int rty_cnt = 0; - RTSX_DEBUGP("EXT SD/MMC CMD %d\n", cmd_idx); + dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx); if (rsp_type == SD_RSP_TYPE_R1b) timeout = 3000; @@ -3558,8 +3575,8 @@ int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type) memcpy(rsp, rtsx_get_cmd_data(chip), min_len); - RTSX_DEBUGP("min_len = %d\n", min_len); - RTSX_DEBUGP("Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n", + dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len); + dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n", rsp[0], rsp[1], rsp[2], rsp[3]); } @@ -3847,7 +3864,7 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) } else { bus_width = SD_BUS_WIDTH_4; } - RTSX_DEBUGP("bus_width = %d\n", bus_width); + dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width); #else bus_width = SD_BUS_WIDTH_4; #endif @@ -4247,7 +4264,7 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) retval = sd_update_lock_status(chip); if (retval != STATUS_SUCCESS) { - RTSX_DEBUGP("Lock command fail!\n"); + dev_dbg(rtsx_dev(chip), "Lock command fail!\n"); lock_cmd_fail = 1; } } @@ -4298,7 +4315,8 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) #ifdef SUPPORT_SD_LOCK if (cmd_idx == LOCK_UNLOCK) { if (!lock_cmd_fail) { - RTSX_DEBUGP("lock_cmd_type = 0x%x\n", lock_cmd_type); + dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n", + lock_cmd_type); if (lock_cmd_type & SD_CLR_PWD) sd_card->sd_lock_status &= ~SD_PWD_EXIST; @@ -4306,8 +4324,8 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) sd_card->sd_lock_status |= SD_PWD_EXIST; } - RTSX_DEBUGP("sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n", - sd_lock_state, sd_card->sd_lock_status); + dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n", + sd_lock_state, sd_card->sd_lock_status); if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) { sd_card->sd_lock_notify = 1; if (sd_lock_state) { @@ -4382,9 +4400,10 @@ int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip) } rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb); - RTSX_DEBUGP("Response length: %d\n", data_len); - RTSX_DEBUGP("Response: 0x%x 0x%x 0x%x 0x%x\n", sd_card->rsp[0], - sd_card->rsp[1], sd_card->rsp[2], sd_card->rsp[3]); + dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len); + dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n", + sd_card->rsp[0], sd_card->rsp[1], + sd_card->rsp[2], sd_card->rsp[3]); scsi_set_resid(srb, 0); return TRANSPORT_GOOD; @@ -4459,7 +4478,7 @@ void sd_cleanup_work(struct rtsx_chip *chip) struct sd_info *sd_card = &(chip->sd_card); if (sd_card->seq_mode) { - RTSX_DEBUGP("SD: stop transmission\n"); + dev_dbg(rtsx_dev(chip), "SD: stop transmission\n"); sd_stop_seq_mode(chip); sd_card->cleanup_counter = 0; } @@ -4500,8 +4519,6 @@ int release_sd_card(struct rtsx_chip *chip) struct sd_info *sd_card = &(chip->sd_card); int retval; - RTSX_DEBUGP("release_sd_card\n"); - chip->card_ready &= ~SD_CARD; chip->card_fail &= ~SD_CARD; chip->card_wp &= ~SD_CARD; diff --git a/drivers/staging/rts5208/spi.c b/drivers/staging/rts5208/spi.c index 312b9f9c6456..29f4a80844fa 100644 --- a/drivers/staging/rts5208/spi.c +++ b/drivers/staging/rts5208/spi.c @@ -409,7 +409,8 @@ int spi_get_status(struct scsi_cmnd *srb, struct rtsx_chip *chip) { struct spi_info *spi = &(chip->spi); - RTSX_DEBUGP("spi_get_status: err_code = 0x%x\n", spi->err_code); + dev_dbg(rtsx_dev(chip), "spi_get_status: err_code = 0x%x\n", + spi->err_code); rtsx_stor_set_xfer_buf(&(spi->err_code), min_t(int, scsi_bufflen(srb), 1), srb); scsi_set_resid(srb, scsi_bufflen(srb) - 1); @@ -431,8 +432,8 @@ int spi_set_parameter(struct scsi_cmnd *srb, struct rtsx_chip *chip) spi->clk_div = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; spi->write_en = srb->cmnd[6]; - RTSX_DEBUGP("spi_set_parameter: spi_clock = %d, clk_div = %d, write_en = %d\n", - spi->spi_clock, spi->clk_div, spi->write_en); + dev_dbg(rtsx_dev(chip), "spi_set_parameter: spi_clock = %d, clk_div = %d, write_en = %d\n", + spi->spi_clock, spi->clk_div, spi->write_en); return STATUS_SUCCESS; } diff --git a/drivers/staging/rts5208/trace.h b/drivers/staging/rts5208/trace.h index 0f177fbaaf1f..fbb304a54acc 100644 --- a/drivers/staging/rts5208/trace.h +++ b/drivers/staging/rts5208/trace.h @@ -49,7 +49,8 @@ static inline char *filename(char *path) #define TRACE_RET(chip, ret) \ do { \ char *_file = filename(__FILE__); \ - RTSX_DEBUGP("[%s][%s]:[%d]\n", _file, __func__, __LINE__); \ + dev_dbg(rtsx_dev(chip), "[%s][%s]:[%d]\n", _file, \ + __func__, __LINE__); \ (chip)->trace_msg[(chip)->msg_idx].line = (u16)(__LINE__); \ strncpy((chip)->trace_msg[(chip)->msg_idx].func, __func__, MSG_FUNC_LEN-1); \ strncpy((chip)->trace_msg[(chip)->msg_idx].file, _file, MSG_FILE_LEN-1); \ @@ -65,7 +66,8 @@ static inline char *filename(char *path) #define TRACE_GOTO(chip, label) \ do { \ char *_file = filename(__FILE__); \ - RTSX_DEBUGP("[%s][%s]:[%d]\n", _file, __func__, __LINE__); \ + dev_dbg(rtsx_dev(chip), "[%s][%s]:[%d]\n", _file, \ + __func__, __LINE__); \ (chip)->trace_msg[(chip)->msg_idx].line = (u16)(__LINE__); \ strncpy((chip)->trace_msg[(chip)->msg_idx].func, __func__, MSG_FUNC_LEN-1); \ strncpy((chip)->trace_msg[(chip)->msg_idx].file, _file, MSG_FILE_LEN-1); \ @@ -84,8 +86,8 @@ static inline char *filename(char *path) #ifdef CONFIG_RTS5208_DEBUG #define RTSX_DUMP(buf, buf_len) \ - print_hex_dump(KERN_DEBUG, RTSX_STOR, DUMP_PREFIX_NONE, \ - 16, 1, (buf), (buf_len), false) + print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": ", \ + DUMP_PREFIX_NONE, 16, 1, (buf), (buf_len), false) #else #define RTSX_DUMP(buf, buf_len) #endif diff --git a/drivers/staging/rts5208/xd.c b/drivers/staging/rts5208/xd.c index 6aef53d14e31..0d029fe92b40 100644 --- a/drivers/staging/rts5208/xd.c +++ b/drivers/staging/rts5208/xd.c @@ -253,13 +253,13 @@ static int xd_read_cis(struct rtsx_chip *chip, u32 page_addr, u8 *buf, RTSX_READ_REG(chip, XD_ECC_BIT1, &ecc_bit); RTSX_READ_REG(chip, XD_ECC_BYTE1, &ecc_byte); - RTSX_DEBUGP("ECC_BIT1 = 0x%x, ECC_BYTE1 = 0x%x\n", + dev_dbg(rtsx_dev(chip), "ECC_BIT1 = 0x%x, ECC_BYTE1 = 0x%x\n", ecc_bit, ecc_byte); if (ecc_byte < buf_len) { - RTSX_DEBUGP("Before correct: 0x%x\n", + dev_dbg(rtsx_dev(chip), "Before correct: 0x%x\n", buf[ecc_byte]); buf[ecc_byte] ^= (1 << ecc_bit); - RTSX_DEBUGP("After correct: 0x%x\n", + dev_dbg(rtsx_dev(chip), "After correct: 0x%x\n", buf[ecc_byte]); } } @@ -275,13 +275,13 @@ static int xd_read_cis(struct rtsx_chip *chip, u32 page_addr, u8 *buf, RTSX_READ_REG(chip, XD_ECC_BIT2, &ecc_bit); RTSX_READ_REG(chip, XD_ECC_BYTE2, &ecc_byte); - RTSX_DEBUGP("ECC_BIT2 = 0x%x, ECC_BYTE2 = 0x%x\n", + dev_dbg(rtsx_dev(chip), "ECC_BIT2 = 0x%x, ECC_BYTE2 = 0x%x\n", ecc_bit, ecc_byte); if (ecc_byte < buf_len) { - RTSX_DEBUGP("Before correct: 0x%x\n", + dev_dbg(rtsx_dev(chip), "Before correct: 0x%x\n", buf[ecc_byte]); buf[ecc_byte] ^= (1 << ecc_bit); - RTSX_DEBUGP("After correct: 0x%x\n", + dev_dbg(rtsx_dev(chip), "After correct: 0x%x\n", buf[ecc_byte]); } } @@ -449,7 +449,7 @@ static int reset_xd(struct rtsx_chip *chip) #ifdef SUPPORT_OCP wait_timeout(50); if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) { - RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", + dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", chip->ocp_stat); TRACE_RET(chip, STATUS_FAIL); } @@ -507,7 +507,8 @@ static int reset_xd(struct rtsx_chip *chip) ptr = rtsx_get_cmd_data(chip) + 1; - RTSX_DEBUGP("XD_DAT: 0x%x, XD_CTL: 0x%x\n", ptr[0], ptr[1]); + dev_dbg(rtsx_dev(chip), "XD_DAT: 0x%x, XD_CTL: 0x%x\n", + ptr[0], ptr[1]); if (((ptr[0] & READY_FLAG) != READY_STATE) || !(ptr[1] & XD_RDY)) @@ -517,7 +518,7 @@ static int reset_xd(struct rtsx_chip *chip) if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("READ_ID: 0x%x 0x%x 0x%x 0x%x\n", + dev_dbg(rtsx_dev(chip), "READ_ID: 0x%x 0x%x 0x%x 0x%x\n", id_buf[0], id_buf[1], id_buf[2], id_buf[3]); xd_card->device_code = id_buf[1]; @@ -618,8 +619,8 @@ static int reset_xd(struct rtsx_chip *chip) retval = xd_read_id(chip, READ_xD_ID, id_buf, 4); if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); - RTSX_DEBUGP("READ_xD_ID: 0x%x 0x%x 0x%x 0x%x\n", - id_buf[0], id_buf[1], id_buf[2], id_buf[3]); + dev_dbg(rtsx_dev(chip), "READ_xD_ID: 0x%x 0x%x 0x%x 0x%x\n", + id_buf[0], id_buf[1], id_buf[2], id_buf[3]); if (id_buf[2] != XD_ID_CODE) TRACE_RET(chip, STATUS_FAIL); @@ -682,7 +683,7 @@ static int reset_xd(struct rtsx_chip *chip) break; } - RTSX_DEBUGP("CIS block: 0x%x\n", xd_card->cis_block); + dev_dbg(rtsx_dev(chip), "CIS block: 0x%x\n", xd_card->cis_block); if (xd_card->cis_block == 0xFFFF) TRACE_RET(chip, STATUS_FAIL); @@ -735,13 +736,14 @@ static int xd_init_l2p_tbl(struct rtsx_chip *chip) struct xd_info *xd_card = &(chip->xd_card); int size, i; - RTSX_DEBUGP("xd_init_l2p_tbl: zone_cnt = %d\n", xd_card->zone_cnt); + dev_dbg(rtsx_dev(chip), "xd_init_l2p_tbl: zone_cnt = %d\n", + xd_card->zone_cnt); if (xd_card->zone_cnt < 1) TRACE_RET(chip, STATUS_FAIL); size = xd_card->zone_cnt * sizeof(struct zone_entry); - RTSX_DEBUGP("Buffer size for l2p table is %d\n", size); + dev_dbg(rtsx_dev(chip), "Buffer size for l2p table is %d\n", size); xd_card->zone = vmalloc(size); if (!xd_card->zone) @@ -761,8 +763,6 @@ static int xd_init_l2p_tbl(struct rtsx_chip *chip) static inline void free_zone(struct zone_entry *zone) { - RTSX_DEBUGP("free_zone\n"); - if (!zone) return; @@ -788,7 +788,7 @@ static void xd_set_unused_block(struct rtsx_chip *chip, u32 phy_blk) zone_no = (int)phy_blk >> 10; if (zone_no >= xd_card->zone_cnt) { - RTSX_DEBUGP("Set unused block to invalid zone (zone_no = %d, zone_cnt = %d)\n", + dev_dbg(rtsx_dev(chip), "Set unused block to invalid zone (zone_no = %d, zone_cnt = %d)\n", zone_no, xd_card->zone_cnt); return; } @@ -802,11 +802,12 @@ static void xd_set_unused_block(struct rtsx_chip *chip, u32 phy_blk) if ((zone->set_index >= XD_FREE_TABLE_CNT) || (zone->set_index < 0)) { free_zone(zone); - RTSX_DEBUGP("Set unused block fail, invalid set_index\n"); + dev_dbg(rtsx_dev(chip), "Set unused block fail, invalid set_index\n"); return; } - RTSX_DEBUGP("Set unused block to index %d\n", zone->set_index); + dev_dbg(rtsx_dev(chip), "Set unused block to index %d\n", + zone->set_index); zone->free_table[zone->set_index++] = (u16) (phy_blk & 0x3ff); if (zone->set_index >= XD_FREE_TABLE_CNT) @@ -821,7 +822,7 @@ static u32 xd_get_unused_block(struct rtsx_chip *chip, int zone_no) u32 phy_blk; if (zone_no >= xd_card->zone_cnt) { - RTSX_DEBUGP("Get unused block from invalid zone (zone_no = %d, zone_cnt = %d)\n", + dev_dbg(rtsx_dev(chip), "Get unused block from invalid zone (zone_no = %d, zone_cnt = %d)\n", zone_no, xd_card->zone_cnt); return BLK_NOT_FOUND; } @@ -830,16 +831,17 @@ static u32 xd_get_unused_block(struct rtsx_chip *chip, int zone_no) if ((zone->unused_blk_cnt == 0) || (zone->set_index == zone->get_index)) { free_zone(zone); - RTSX_DEBUGP("Get unused block fail, no unused block available\n"); + dev_dbg(rtsx_dev(chip), "Get unused block fail, no unused block available\n"); return BLK_NOT_FOUND; } if ((zone->get_index >= XD_FREE_TABLE_CNT) || (zone->get_index < 0)) { free_zone(zone); - RTSX_DEBUGP("Get unused block fail, invalid get_index\n"); + dev_dbg(rtsx_dev(chip), "Get unused block fail, invalid get_index\n"); return BLK_NOT_FOUND; } - RTSX_DEBUGP("Get unused block from index %d\n", zone->get_index); + dev_dbg(rtsx_dev(chip), "Get unused block from index %d\n", + zone->get_index); phy_blk = zone->free_table[zone->get_index]; zone->free_table[zone->get_index++] = 0xFFFF; @@ -875,20 +877,20 @@ static u32 xd_get_l2p_tbl(struct rtsx_chip *chip, int zone_no, u16 log_off) #ifdef XD_DELAY_WRITE retval = xd_delay_write(chip); if (retval != STATUS_SUCCESS) { - RTSX_DEBUGP("In xd_get_l2p_tbl, delay write fail!\n"); + dev_dbg(rtsx_dev(chip), "In xd_get_l2p_tbl, delay write fail!\n"); return BLK_NOT_FOUND; } #endif if (zone->unused_blk_cnt <= 0) { - RTSX_DEBUGP("No unused block!\n"); + dev_dbg(rtsx_dev(chip), "No unused block!\n"); return BLK_NOT_FOUND; } for (i = 0; i < zone->unused_blk_cnt; i++) { phy_blk = xd_get_unused_block(chip, zone_no); if (phy_blk == BLK_NOT_FOUND) { - RTSX_DEBUGP("No unused block available!\n"); + dev_dbg(rtsx_dev(chip), "No unused block available!\n"); return BLK_NOT_FOUND; } @@ -898,7 +900,7 @@ static u32 xd_get_l2p_tbl(struct rtsx_chip *chip, int zone_no, u16 log_off) break; } if (i >= zone->unused_blk_cnt) { - RTSX_DEBUGP("No good unused block available!\n"); + dev_dbg(rtsx_dev(chip), "No good unused block available!\n"); return BLK_NOT_FOUND; } @@ -946,7 +948,7 @@ static int xd_mark_bad_block(struct rtsx_chip *chip, u32 phy_blk) u32 page_addr; u8 reg = 0; - RTSX_DEBUGP("mark block 0x%x as bad block\n", phy_blk); + dev_dbg(rtsx_dev(chip), "mark block 0x%x as bad block\n", phy_blk); if (phy_blk == BLK_NOT_FOUND) TRACE_RET(chip, STATUS_FAIL); @@ -998,7 +1000,7 @@ static int xd_init_page(struct rtsx_chip *chip, u32 phy_blk, u32 page_addr; u8 reg = 0; - RTSX_DEBUGP("Init block 0x%x\n", phy_blk); + dev_dbg(rtsx_dev(chip), "Init block 0x%x\n", phy_blk); if (start_page > end_page) TRACE_RET(chip, STATUS_FAIL); @@ -1052,7 +1054,7 @@ static int xd_copy_page(struct rtsx_chip *chip, u32 old_blk, u32 new_blk, u8 i, reg = 0; int retval; - RTSX_DEBUGP("Copy page from block 0x%x to block 0x%x\n", + dev_dbg(rtsx_dev(chip), "Copy page from block 0x%x to block 0x%x\n", old_blk, new_blk); if (start_page > end_page) @@ -1112,7 +1114,8 @@ static int xd_copy_page(struct rtsx_chip *chip, u32 old_blk, u32 new_blk, XD_BLOCK_STATUS, 0xFF, XD_GBLK); XD_SET_BAD_OLDBLK(xd_card); - RTSX_DEBUGP("old block 0x%x ecc error\n", old_blk); + dev_dbg(rtsx_dev(chip), "old block 0x%x ecc error\n", + old_blk); } } else { xd_set_err_code(chip, XD_TO_ERROR); @@ -1245,7 +1248,7 @@ static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no) u16 cur_lst_page_logoff, ent_lst_page_logoff; u8 redunt[11]; - RTSX_DEBUGP("xd_build_l2p_tbl: %d\n", zone_no); + dev_dbg(rtsx_dev(chip), "xd_build_l2p_tbl: %d\n", zone_no); if (xd_card->zone == NULL) { retval = xd_init_l2p_tbl(chip); @@ -1254,7 +1257,8 @@ static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no) } if (xd_card->zone[zone_no].build_flag) { - RTSX_DEBUGP("l2p table of zone %d has been built\n", zone_no); + dev_dbg(rtsx_dev(chip), "l2p table of zone %d has been built\n", + zone_no); return STATUS_SUCCESS; } @@ -1292,7 +1296,8 @@ static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no) max_logoff = 999; } - RTSX_DEBUGP("start block 0x%x, end block 0x%x\n", start, end); + dev_dbg(rtsx_dev(chip), "start block 0x%x, end block 0x%x\n", + start, end); zone->set_index = zone->get_index = 0; zone->unused_blk_cnt = 0; @@ -1306,12 +1311,12 @@ static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no) continue; if (redunt[BLOCK_STATUS] != 0xFF) { - RTSX_DEBUGP("bad block\n"); + dev_dbg(rtsx_dev(chip), "bad block\n"); continue; } if (xd_check_data_blank(redunt)) { - RTSX_DEBUGP("blank block\n"); + dev_dbg(rtsx_dev(chip), "blank block\n"); xd_set_unused_block(chip, i); continue; } @@ -1397,8 +1402,10 @@ static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no) i++; } - RTSX_DEBUGP("Block count %d, invalid L2P entry %d\n", end, i); - RTSX_DEBUGP("Total unused block: %d\n", zone->unused_blk_cnt); + dev_dbg(rtsx_dev(chip), "Block count %d, invalid L2P entry %d\n", + end, i); + dev_dbg(rtsx_dev(chip), "Total unused block: %d\n", + zone->unused_blk_cnt); if ((zone->unused_blk_cnt - i) < 1) chip->card_wp |= XD_CARD; @@ -1566,8 +1573,8 @@ static int xd_finish_write(struct rtsx_chip *chip, int retval, zone_no; u16 log_off; - RTSX_DEBUGP("xd_finish_write, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x\n", - old_blk, new_blk, log_blk); + dev_dbg(rtsx_dev(chip), "xd_finish_write, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x\n", + old_blk, new_blk, log_blk); if (page_off > xd_card->page_off) TRACE_RET(chip, STATUS_FAIL); @@ -1621,7 +1628,7 @@ static int xd_prepare_write(struct rtsx_chip *chip, { int retval; - RTSX_DEBUGP("%s, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x, page_off = %d\n", + dev_dbg(rtsx_dev(chip), "%s, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x, page_off = %d\n", __func__, old_blk, new_blk, log_blk, (int)page_off); if (page_off) { @@ -1645,8 +1652,8 @@ static int xd_write_multiple_pages(struct rtsx_chip *chip, u32 old_blk, u16 log_off; u8 page_cnt, reg_val; - RTSX_DEBUGP("%s, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x\n", - __func__, old_blk, new_blk, log_blk); + dev_dbg(rtsx_dev(chip), "%s, old_blk = 0x%x, new_blk = 0x%x, log_blk = 0x%x\n", + __func__, old_blk, new_blk, log_blk); if (start_page > end_page) TRACE_RET(chip, STATUS_FAIL); @@ -1740,7 +1747,7 @@ int xd_delay_write(struct rtsx_chip *chip) int retval; if (delay_write->delay_write_flag) { - RTSX_DEBUGP("xd_delay_write\n"); + dev_dbg(rtsx_dev(chip), "xd_delay_write\n"); retval = xd_switch_clock(chip); if (retval != STATUS_SUCCESS) TRACE_RET(chip, STATUS_FAIL); @@ -1777,7 +1784,8 @@ int xd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, xd_card->cleanup_counter = 0; - RTSX_DEBUGP("xd_rw: scsi_sg_count = %d\n", scsi_sg_count(srb)); + dev_dbg(rtsx_dev(chip), "xd_rw: scsi_sg_count = %d\n", + scsi_sg_count(srb)); ptr = (u8 *)scsi_sglist(srb); @@ -1887,7 +1895,7 @@ int xd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, } } - RTSX_DEBUGP("old_blk = 0x%x\n", old_blk); + dev_dbg(rtsx_dev(chip), "old_blk = 0x%x\n", old_blk); while (total_sec_cnt) { if (detect_card_cd(chip, XD_CARD) != STATUS_SUCCESS) { @@ -2029,7 +2037,7 @@ void xd_cleanup_work(struct rtsx_chip *chip) struct xd_info *xd_card = &(chip->xd_card); if (xd_card->delay_write.delay_write_flag) { - RTSX_DEBUGP("xD: delay write\n"); + dev_dbg(rtsx_dev(chip), "xD: delay write\n"); xd_delay_write(chip); xd_card->cleanup_counter = 0; } @@ -2070,8 +2078,6 @@ int release_xd_card(struct rtsx_chip *chip) struct xd_info *xd_card = &(chip->xd_card); int retval; - RTSX_DEBUGP("release_xd_card\n"); - chip->card_ready &= ~XD_CARD; chip->card_fail &= ~XD_CARD; chip->card_wp &= ~XD_CARD; -- cgit From b06bdf7d5bd4f817b481674d69a63174279e6662 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:49 -0400 Subject: staging: unisys: remove U16 type This patch switches all use of the U16 typedef to use the kernel's u16 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../include/channels/controlframework.h | 18 ++++++++-------- .../include/channels/controlvmchannel.h | 24 +++++++++++----------- .../common-spar/include/channels/diagchannel.h | 8 ++++---- .../common-spar/include/channels/iochannel.h | 22 ++++++++++---------- .../unisys/common-spar/include/vmcallinterface.h | 4 ++-- drivers/staging/unisys/include/commontypes.h | 1 - drivers/staging/unisys/include/uisqueue.h | 2 +- .../unisys/visorchipset/visorchipset_main.c | 10 ++++----- 8 files changed, 44 insertions(+), 45 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/controlframework.h b/drivers/staging/unisys/common-spar/include/channels/controlframework.h index ca1c46eb7460..4e361b20ed89 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlframework.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlframework.h @@ -37,19 +37,19 @@ /* Define Ki scale page to be traditional 4KB page */ #define ULTRA_MEMORY_PAGE_Ki (ULTRA_MEMORY_PAGE_WORD * ULTRA_MEMORY_COUNT_Ki) typedef struct _ULTRA_SEGMENT_STATE { - U16 Enabled:1; /* Bit 0: May enter other states */ - U16 Active:1; /* Bit 1: Assigned to active partition */ - U16 Alive:1; /* Bit 2: Configure message sent to + u16 Enabled:1; /* Bit 0: May enter other states */ + u16 Active:1; /* Bit 1: Assigned to active partition */ + u16 Alive:1; /* Bit 2: Configure message sent to * service/server */ - U16 Revoked:1; /* Bit 3: similar to partition state + u16 Revoked:1; /* Bit 3: similar to partition state * ShuttingDown */ - U16 Allocated:1; /* Bit 4: memory (device/port number) + u16 Allocated:1; /* Bit 4: memory (device/port number) * has been selected by Command */ - U16 Known:1; /* Bit 5: has been introduced to the + u16 Known:1; /* Bit 5: has been introduced to the * service/guest partition */ - U16 Ready:1; /* Bit 6: service/Guest partition has + u16 Ready:1; /* Bit 6: service/Guest partition has * responded to introduction */ - U16 Operating:1; /* Bit 7: resource is configured and + u16 Operating:1; /* Bit 7: resource is configured and * operating */ /* Note: don't use high bit unless we need to switch to ushort * which is non-compliant */ @@ -69,7 +69,7 @@ typedef union { u8 Major; /* will be 1 for the first release and * increment thereafter */ u8 Minor; - U16 Maintenance; + u16 Maintenance; U32 Revision; /* Subversion revision */ } Part; } ULTRA_COMPONENT_VERSION; diff --git a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h index 061ff3d4a06a..051ef358e1c8 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h @@ -147,7 +147,7 @@ struct InterruptInfo { }; struct PciId { - U16 Domain; + u16 Domain; u8 Bus; u8 Slot; u8 Func; @@ -155,10 +155,10 @@ struct PciId { }; struct PciConfigHdr { - U16 VendorId; - U16 SubSysVendor; - U16 DeviceId; - U16 SubSysDevice; + u16 VendorId; + u16 SubSysVendor; + u16 DeviceId; + u16 SubSysDevice; U32 ClassCode; U32 Reserved; /* Natural alignment purposes */ }; @@ -181,10 +181,10 @@ struct virtDiskInfo { U32 externalPortNo; /* 0 for SAS RAID provided (external) * virtual disks, 1 for virtual disk * images, 2 for gold disk images */ - U16 VirtualDiskIndex; /* Index of disk descriptor in the + u16 VirtualDiskIndex; /* Index of disk descriptor in the * VirtualDisk segment associated with * externalPortNo */ - U16 Reserved1; + u16 Reserved1; U32 Reserved2; }; @@ -519,18 +519,18 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { U64 PrototypeControlChannelOffset; GUEST_PHYSICAL_ADDRESS VirtualGuestPartitionHandle; - U16 RestoreAction; /* Restore Action field to restore the guest + u16 RestoreAction; /* Restore Action field to restore the guest * partition */ - U16 DumpAction; /* For Windows guests it shows if the visordisk + u16 DumpAction; /* For Windows guests it shows if the visordisk * is running in dump mode */ - U16 NvramFailCount; - U16 SavedCrashMsgCount; /* = CONTROLVM_CRASHMSG_MAX */ + u16 NvramFailCount; + u16 SavedCrashMsgCount; /* = CONTROLVM_CRASHMSG_MAX */ U32 SavedCrashMsgOffset; /* Offset to request payload area needed * for crash dump */ U32 InstallationError; /* Type of error encountered during * installation */ U32 InstallationTextId; /* Id of string to display */ - U16 InstallationRemainingSteps; /* Number of remaining installation + u16 InstallationRemainingSteps; /* Number of remaining installation * steps (for progress bars) */ u8 ToolAction; /* ULTRA_TOOL_ACTIONS Installation Action * field */ diff --git a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h index e16f2c04b4e7..bac81cf3eee9 100644 --- a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h @@ -106,7 +106,7 @@ static const uuid_le UltraDiagChannelProtocolGuid = * in some of the Supervisor areas, such as Monitor, so it has been "ported" here * for use in diagnostic event timestamps... */ typedef struct _DIAG_EFI_TIME { - U16 Year; /* 1998 - 20XX */ + u16 Year; /* 1998 - 20XX */ u8 Month; /* 1 - 12 */ u8 Day; /* 1 - 31 */ u8 Hour; /* 0 - 23 */ @@ -163,11 +163,11 @@ typedef struct _DIAG_CHANNEL_EVENT { DIAG_EFI_TIME Timestamp; /* Size = 16 bytes */ U32 PartitionNumber; /* Filled in by Diag Switch as pool blocks are * filled */ - U16 VirtualProcessorNumber; - U16 LogicalProcessorNumber; + u16 VirtualProcessorNumber; + u16 LogicalProcessorNumber; u8 ComponentType; /* ULTRA_COMPONENT_TYPES */ u8 Subsystem; - U16 Reserved0; /* pad to U64 alignment */ + u16 Reserved0; /* pad to U64 alignment */ U32 BlockNumber; /* filled in by DiagSwitch as pool blocks are * filled */ U32 BlockNumberHigh; diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h index 0f13304566e4..a95add766fc3 100644 --- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h @@ -289,7 +289,7 @@ struct uiscmdrsp_scsi { * send it back as is in the rsp packet. */ u8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */ U32 bufflen; /* length of data to be transferred out or in */ - U16 guest_phys_entries; /* Number of entries in scatter-gather (sg) + u16 guest_phys_entries; /* Number of entries in scatter-gather (sg) * list */ struct guest_phys_info gpi_list[MAX_PHYS_INFO]; /* physical address * information for each @@ -491,7 +491,7 @@ struct net_pkt_xmt { * ignore */ u8 hrawoffv; /* 1 = hwrafoff is valid */ u8 nhrawoffv; /* 1 = nhwrafoff is valid */ - U16 protocol; /* specifies packet protocol */ + u16 protocol; /* specifies packet protocol */ U32 csum; /* value used to set skb->csum at IOPart */ U32 hrawoff; /* value used to set skb->h.raw at IOPart */ /* hrawoff points to the start of the TRANSPORT LAYER HEADER */ @@ -551,7 +551,7 @@ struct net_pkt_rcv { struct net_pkt_enbdis { void *context; - U16 enable; /* 1 = enable, 0 = disable */ + u16 enable; /* 1 = enable, 0 = disable */ }; struct net_pkt_macaddr { @@ -882,22 +882,22 @@ static inline int ULTRA_VNIC_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, /* returns next non-zero index on success or zero on failure (i.e. out of * room) */ -static INLINE U16 +static INLINE u16 add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used * to add entries */ - U16 inp_off, /* input - specifies the off to be used + u16 inp_off, /* input - specifies the off to be used * to add entries */ U32 inp_len, /* input - specifies the len to be used * to add entries */ - U16 index, /* input - index in array at which new + u16 index, /* input - index in array at which new * entries are added */ - U16 max_pi_arr_entries, /* input - specifies the maximum + u16 max_pi_arr_entries, /* input - specifies the maximum * entries pi_arr can hold */ struct phys_info pi_arr[]) /* input & output - array to * which entries are added */ { U32 len; - U16 i, firstlen; + u16 i, firstlen; firstlen = PI_PAGE_SIZE - inp_off; if (inp_len <= firstlen) { @@ -906,8 +906,8 @@ add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used if (index >= max_pi_arr_entries) return 0; pi_arr[index].pi_pfn = inp_pfn; - pi_arr[index].pi_off = (U16) inp_off; - pi_arr[index].pi_len = (U16) inp_len; + pi_arr[index].pi_off = (u16) inp_off; + pi_arr[index].pi_len = (u16) inp_len; return index + 1; } @@ -925,7 +925,7 @@ add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used else { pi_arr[index + i].pi_off = 0; pi_arr[index + i].pi_len = - (U16) MINNUM(len, (U32) PI_PAGE_SIZE); + (u16) MINNUM(len, (U32) PI_PAGE_SIZE); } } diff --git a/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/drivers/staging/unisys/common-spar/include/vmcallinterface.h index 5c790494e621..a8ecb0b38922 100644 --- a/drivers/staging/unisys/common-spar/include/vmcallinterface.h +++ b/drivers/staging/unisys/common-spar/include/vmcallinterface.h @@ -101,8 +101,8 @@ do { \ #pragma pack(push, 1) struct phys_info { U64 pi_pfn; - U16 pi_off; - U16 pi_len; + u16 pi_off; + u16 pi_len; }; #pragma pack(pop) diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index fbcf15bf19bd..2c49b9d01694 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define U16 uint16_t #define U32 uint32_t #define U64 uint64_t #define S8 int8_t diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h index 535cf1f3119e..6dc473bf76db 100644 --- a/drivers/staging/unisys/include/uisqueue.h +++ b/drivers/staging/unisys/include/uisqueue.h @@ -142,7 +142,7 @@ struct device_info { struct InterruptInfo intr; struct switch_info *swtch; char devid[30]; /* "vbus:dev" */ - U16 polling; + u16 polling; struct semaphore interrupt_callback_lock; U32 busNo; U32 devNo; diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 3afa6e5b10dd..e9e15535e749 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -757,13 +757,13 @@ void visorchipset_save_message(CONTROLVM_MESSAGE *msg, CRASH_OBJ_TYPE type) { U32 localSavedCrashMsgOffset; - U16 localSavedCrashMsgCount; + u16 localSavedCrashMsgCount; /* get saved message count */ if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, SavedCrashMsgCount), - &localSavedCrashMsgCount, sizeof(U16)) < 0) { + &localSavedCrashMsgCount, sizeof(u16)) < 0) { LOGERR("failed to get Saved Message Count"); POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_SEVERITY_ERR); @@ -1672,7 +1672,7 @@ parahotplug_process_list(void) * respond to the CONTROLVM message with success. */ static int -parahotplug_request_complete(int id, U16 active) +parahotplug_request_complete(int id, u16 active) { struct list_head *pos = NULL; struct list_head *tmp = NULL; @@ -2028,7 +2028,7 @@ setup_crash_devices_work_queue(struct work_struct *work) CONTROLVM_MESSAGE localCrashCreateDevMsg; CONTROLVM_MESSAGE msg; U32 localSavedCrashMsgOffset; - U16 localSavedCrashMsgCount; + u16 localSavedCrashMsgCount; /* make sure visorbus server is registered for controlvm callbacks */ if (visorchipset_serverregwait && !serverregistered) @@ -2053,7 +2053,7 @@ setup_crash_devices_work_queue(struct work_struct *work) if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, SavedCrashMsgCount), - &localSavedCrashMsgCount, sizeof(U16)) < 0) { + &localSavedCrashMsgCount, sizeof(u16)) < 0) { LOGERR("failed to get Saved Message Count"); POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_SEVERITY_ERR); -- cgit From b3c55b13a1e458878e813c4fe2cccfa97c75f884 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:50 -0400 Subject: staging: unisys: remove U32 type This patch switches all use of the U32 typedef to use the kernel's u32 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/channels/channel.c | 8 +- drivers/staging/unisys/channels/chanstub.c | 4 +- drivers/staging/unisys/channels/chanstub.h | 4 +- .../unisys/common-spar/include/channels/channel.h | 52 +++---- .../include/channels/controlframework.h | 2 +- .../include/channels/controlvmchannel.h | 158 ++++++++++----------- .../common-spar/include/channels/diagchannel.h | 20 +-- .../common-spar/include/channels/iochannel.h | 58 ++++---- .../common-spar/include/channels/vbuschannel.h | 12 +- .../unisys/common-spar/include/vmcallinterface.h | 6 +- drivers/staging/unisys/include/commontypes.h | 7 +- drivers/staging/unisys/include/uisqueue.h | 52 +++---- drivers/staging/unisys/include/uisutils.h | 48 +++---- drivers/staging/unisys/uislib/uislib.c | 56 ++++---- drivers/staging/unisys/uislib/uisutils.c | 4 +- drivers/staging/unisys/virthba/virthba.c | 6 +- drivers/staging/unisys/virtpci/virtpci.h | 4 +- drivers/staging/unisys/visorchannel/visorchannel.h | 10 +- .../unisys/visorchannel/visorchannel_funcs.c | 30 ++-- drivers/staging/unisys/visorchipset/parser.c | 6 +- drivers/staging/unisys/visorchipset/parser.h | 4 +- drivers/staging/unisys/visorchipset/visorchipset.h | 50 +++---- .../unisys/visorchipset/visorchipset_main.c | 30 ++-- 23 files changed, 315 insertions(+), 316 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/channels/channel.c b/drivers/staging/unisys/channels/channel.c index 7223a14082ba..b9bf8e81677c 100644 --- a/drivers/staging/unisys/channels/channel.c +++ b/drivers/staging/unisys/channels/channel.c @@ -44,7 +44,7 @@ * 1 if the insertion succeeds, 0 if the queue was full. */ unsigned char -visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, U32 Queue, void *pSignal) +visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal) { void __iomem *psignal; unsigned int head, tail, nof; @@ -102,7 +102,7 @@ EXPORT_SYMBOL_GPL(visor_signal_insert); * 1 if the removal succeeds, 0 if the queue was empty. */ unsigned char -visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, U32 Queue, void *pSignal) +visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal) { void __iomem *psource; unsigned int head, tail; @@ -157,7 +157,7 @@ EXPORT_SYMBOL_GPL(visor_signal_remove); * # of signals copied. */ unsigned int -SignalRemoveAll(pCHANNEL_HEADER pChannel, U32 Queue, void *pSignal) +SignalRemoveAll(pCHANNEL_HEADER pChannel, u32 Queue, void *pSignal) { void *psource; unsigned int head, tail, signalCount = 0; @@ -208,7 +208,7 @@ SignalRemoveAll(pCHANNEL_HEADER pChannel, U32 Queue, void *pSignal) * 1 if the signal queue is empty, 0 otherwise. */ unsigned char -visor_signalqueue_empty(CHANNEL_HEADER __iomem *pChannel, U32 Queue) +visor_signalqueue_empty(CHANNEL_HEADER __iomem *pChannel, u32 Queue) { SIGNAL_QUEUE_HEADER __iomem *pqhdr = (SIGNAL_QUEUE_HEADER __iomem *) ((char __iomem *) pChannel + diff --git a/drivers/staging/unisys/channels/chanstub.c b/drivers/staging/unisys/channels/chanstub.c index 1e7d6a78602d..7f36d9adac55 100644 --- a/drivers/staging/unisys/channels/chanstub.c +++ b/drivers/staging/unisys/channels/chanstub.c @@ -42,7 +42,7 @@ channel_mod_exit(void) } unsigned char -SignalInsert_withLock(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +SignalInsert_withLock(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal, spinlock_t *lock) { unsigned char result; @@ -54,7 +54,7 @@ SignalInsert_withLock(CHANNEL_HEADER __iomem *pChannel, U32 Queue, } unsigned char -SignalRemove_withLock(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +SignalRemove_withLock(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal, spinlock_t *lock) { unsigned char result; diff --git a/drivers/staging/unisys/channels/chanstub.h b/drivers/staging/unisys/channels/chanstub.h index bdee5d529f6b..d08e2c69d2ad 100644 --- a/drivers/staging/unisys/channels/chanstub.h +++ b/drivers/staging/unisys/channels/chanstub.h @@ -15,9 +15,9 @@ #ifndef __CHANSTUB_H__ #define __CHANSTUB_H__ -unsigned char SignalInsert_withLock(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +unsigned char SignalInsert_withLock(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal, spinlock_t *lock); -unsigned char SignalRemove_withLock(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +unsigned char SignalRemove_withLock(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal, spinlock_t *lock); #endif diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index 8f3aec9b61a8..f18da904b708 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -71,7 +71,7 @@ typedef enum { * access channel anytime */ } CHANNEL_CLIENTSTATE; static inline const u8 * -ULTRA_CHANNELCLI_STRING(U32 v) +ULTRA_CHANNELCLI_STRING(u32 v) { switch (v) { case CHANNELCLI_DETACHED: @@ -210,33 +210,33 @@ ULTRA_CHANNELCLI_STRING(U32 v) /* Common Channel Header */ typedef struct _CHANNEL_HEADER { U64 Signature; /* Signature */ - U32 LegacyState; /* DEPRECATED - being replaced by */ + u32 LegacyState; /* DEPRECATED - being replaced by */ /* / SrvState, CliStateBoot, and CliStateOS below */ - U32 HeaderSize; /* sizeof(CHANNEL_HEADER) */ + u32 HeaderSize; /* sizeof(CHANNEL_HEADER) */ U64 Size; /* Total size of this channel in bytes */ U64 Features; /* Flags to modify behavior */ uuid_le Type; /* Channel type: data, bus, control, etc. */ U64 PartitionHandle; /* ID of guest partition */ U64 Handle; /* Device number of this channel in client */ U64 oChannelSpace; /* Offset in bytes to channel specific area */ - U32 VersionId; /* CHANNEL_HEADER Version ID */ - U32 PartitionIndex; /* Index of guest partition */ + u32 VersionId; /* CHANNEL_HEADER Version ID */ + u32 PartitionIndex; /* Index of guest partition */ uuid_le ZoneGuid; /* Guid of Channel's zone */ - U32 oClientString; /* offset from channel header to + u32 oClientString; /* offset from channel header to * nul-terminated ClientString (0 if * ClientString not present) */ - U32 CliStateBoot; /* CHANNEL_CLIENTSTATE of pre-boot + u32 CliStateBoot; /* CHANNEL_CLIENTSTATE of pre-boot * EFI client of this channel */ - U32 CmdStateCli; /* CHANNEL_COMMANDSTATE (overloaded in + u32 CmdStateCli; /* CHANNEL_COMMANDSTATE (overloaded in * Windows drivers, see ServerStateUp, * ServerStateDown, etc) */ - U32 CliStateOS; /* CHANNEL_CLIENTSTATE of Guest OS + u32 CliStateOS; /* CHANNEL_CLIENTSTATE of Guest OS * client of this channel */ - U32 ChannelCharacteristics; /* CHANNEL_CHARACTERISTIC_ */ - U32 CmdStateSrv; /* CHANNEL_COMMANDSTATE (overloaded in + u32 ChannelCharacteristics; /* CHANNEL_CHARACTERISTIC_ */ + u32 CmdStateSrv; /* CHANNEL_COMMANDSTATE (overloaded in * Windows drivers, see ServerStateUp, * ServerStateDown, etc) */ - U32 SrvState; /* CHANNEL_SERVERSTATE */ + u32 SrvState; /* CHANNEL_SERVERSTATE */ u8 CliErrorBoot; /* bits to indicate err states for * boot clients, so err messages can * be throttled */ @@ -253,25 +253,25 @@ typedef struct _CHANNEL_HEADER { /* Subheader for the Signal Type variation of the Common Channel */ typedef struct _SIGNAL_QUEUE_HEADER { /* 1st cache line */ - U32 VersionId; /* SIGNAL_QUEUE_HEADER Version ID */ - U32 Type; /* Queue type: storage, network */ + u32 VersionId; /* SIGNAL_QUEUE_HEADER Version ID */ + u32 Type; /* Queue type: storage, network */ U64 Size; /* Total size of this queue in bytes */ U64 oSignalBase; /* Offset to signal queue area */ U64 FeatureFlags; /* Flags to modify behavior */ U64 NumSignalsSent; /* Total # of signals placed in this queue */ U64 NumOverflows; /* Total # of inserts failed due to * full queue */ - U32 SignalSize; /* Total size of a signal for this queue */ - U32 MaxSignalSlots; /* Max # of slots in queue, 1 slot is + u32 SignalSize; /* Total size of a signal for this queue */ + u32 MaxSignalSlots; /* Max # of slots in queue, 1 slot is * always empty */ - U32 MaxSignals; /* Max # of signals in queue + u32 MaxSignals; /* Max # of signals in queue * (MaxSignalSlots-1) */ - U32 Head; /* Queue head signal # */ + u32 Head; /* Queue head signal # */ /* 2nd cache line */ U64 NumSignalsReceived; /* Total # of signals removed from this queue */ - U32 Tail; /* Queue tail signal # (on separate + u32 Tail; /* Queue tail signal # (on separate * cache line) */ - U32 Reserved1; /* Reserved field */ + u32 Reserved1; /* Reserved field */ U64 Reserved2; /* Resrved field */ U64 ClientQueue; U64 NumInterruptsReceived; /* Total # of Interrupts received. This @@ -280,7 +280,7 @@ typedef struct _SIGNAL_QUEUE_HEADER { U64 NumEmptyCnt; /* Number of times that visor_signal_remove * is called and returned Empty * Status. */ - U32 ErrorFlags; /* Error bits set during SignalReinit + u32 ErrorFlags; /* Error bits set during SignalReinit * to denote trouble with client's * fields */ u8 Filler[12]; /* Pad out to 64 byte cacheline */ @@ -312,7 +312,7 @@ ULTRA_check_channel_client(void __iomem *pChannel, uuid_le expectedTypeGuid, char *channelName, U64 expectedMinBytes, - U32 expectedVersionId, + u32 expectedVersionId, U64 expectedSignature, char *fileName, int lineNumber, void *logCtx) { @@ -588,7 +588,7 @@ ULTRA_channel_client_release_os(void __iomem *pChannel, u8 *chanId, * full. */ -unsigned char visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +unsigned char visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal); /* @@ -610,7 +610,7 @@ unsigned char visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, U32 Queue, * empty. */ -unsigned char visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, U32 Queue, +unsigned char visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, u32 Queue, void *pSignal); /* @@ -632,7 +632,7 @@ unsigned char visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, U32 Queue, * Return value: * # of signals copied. */ -unsigned int SignalRemoveAll(pCHANNEL_HEADER pChannel, U32 Queue, +unsigned int SignalRemoveAll(pCHANNEL_HEADER pChannel, u32 Queue, void *pSignal); /* @@ -647,6 +647,6 @@ unsigned int SignalRemoveAll(pCHANNEL_HEADER pChannel, U32 Queue, * 1 if the signal queue is empty, 0 otherwise. */ unsigned char visor_signalqueue_empty(CHANNEL_HEADER __iomem *pChannel, - U32 Queue); + u32 Queue); #endif diff --git a/drivers/staging/unisys/common-spar/include/channels/controlframework.h b/drivers/staging/unisys/common-spar/include/channels/controlframework.h index 4e361b20ed89..a6c1ac2b40aa 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlframework.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlframework.h @@ -70,7 +70,7 @@ typedef union { * increment thereafter */ u8 Minor; u16 Maintenance; - U32 Revision; /* Subversion revision */ + u32 Revision; /* Subversion revision */ } Part; } ULTRA_COMPONENT_VERSION; diff --git a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h index 051ef358e1c8..ba2edd05c861 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h @@ -137,7 +137,7 @@ struct InterruptInfo { /**< specifies interrupt vector. It, interrupt pin, and shared are * used to connect to the corresponding interrupt. Used by * IOPart-GP only. */ - U32 recvInterruptVector; + u32 recvInterruptVector; /**< specifies if the recvInterrupt is shared. It, interrupt pin * and vector are used to connect to 0 = not shared; 1 = shared. @@ -159,33 +159,33 @@ struct PciConfigHdr { u16 SubSysVendor; u16 DeviceId; u16 SubSysDevice; - U32 ClassCode; - U32 Reserved; /* Natural alignment purposes */ + u32 ClassCode; + u32 Reserved; /* Natural alignment purposes */ }; struct ScsiId { - U32 Bus; - U32 Target; - U32 Lun; - U32 Host; /* Command should ignore this for * + u32 Bus; + u32 Target; + u32 Lun; + u32 Host; /* Command should ignore this for * * DiskArrival/RemovalEvents */ }; struct WWID { - U32 wwid1; - U32 wwid2; + u32 wwid1; + u32 wwid2; }; struct virtDiskInfo { - U32 switchNo; /* defined by SWITCH_CREATE */ - U32 externalPortNo; /* 0 for SAS RAID provided (external) + u32 switchNo; /* defined by SWITCH_CREATE */ + u32 externalPortNo; /* 0 for SAS RAID provided (external) * virtual disks, 1 for virtual disk * images, 2 for gold disk images */ u16 VirtualDiskIndex; /* Index of disk descriptor in the * VirtualDisk segment associated with * externalPortNo */ u16 Reserved1; - U32 Reserved2; + u32 Reserved2; }; typedef enum { @@ -237,59 +237,59 @@ typedef enum { * looking at the flags.response field. */ typedef struct _CONTROLVM_MESSAGE_HEADER { - U32 Id; /* See CONTROLVM_ID. */ + u32 Id; /* See CONTROLVM_ID. */ /* For requests, indicates the message type. */ /* For responses, indicates the type of message we are responding to. */ - U32 MessageSize; /* Includes size of this struct + size + u32 MessageSize; /* Includes size of this struct + size * of message */ - U32 SegmentIndex; /* Index of segment containing Vm + u32 SegmentIndex; /* Index of segment containing Vm * message/information */ - U32 CompletionStatus; /* Error status code or result of + u32 CompletionStatus; /* Error status code or result of * message completion */ struct { - U32 failed:1; /**< =1 in a response to * signify + u32 failed:1; /**< =1 in a response to * signify * failure */ - U32 responseExpected:1; /**< =1 in all messages that expect a + u32 responseExpected:1; /**< =1 in all messages that expect a * response (Control ignores this * bit) */ - U32 server:1; /**< =1 in all bus & device-related + u32 server:1; /**< =1 in all bus & device-related * messages where the message * receiver is to act as the bus or * device server */ - U32 testMessage:1; /**< =1 for testing use only + u32 testMessage:1; /**< =1 for testing use only * (Control and Command ignore this * bit) */ - U32 partialCompletion:1; /**< =1 if there are forthcoming + u32 partialCompletion:1; /**< =1 if there are forthcoming * responses/acks associated * with this message */ - U32 preserve:1; /**< =1 this is to let us know to + u32 preserve:1; /**< =1 this is to let us know to * preserve channel contents * (for running guests)*/ - U32 writerInDiag:1; /**< =1 the DiagWriter is active in the + u32 writerInDiag:1; /**< =1 the DiagWriter is active in the * Diagnostic Partition*/ /* remaining bits in this 32-bit word are available */ } Flags; - U32 Reserved; /* Natural alignment */ + u32 Reserved; /* Natural alignment */ U64 MessageHandle; /* Identifies the particular message instance, * and is used to match particular */ /* request instances with the corresponding response instance. */ U64 PayloadVmOffset; /* Offset of payload area from start of this * instance of ControlVm segment */ - U32 PayloadMaxBytes; /* Maximum bytes allocated in payload + u32 PayloadMaxBytes; /* Maximum bytes allocated in payload * area of ControlVm segment */ - U32 PayloadBytes; /* Actual number of bytes of payload + u32 PayloadBytes; /* Actual number of bytes of payload * area to copy between IO/Command; */ /* if non-zero, there is a payload to copy. */ } CONTROLVM_MESSAGE_HEADER; typedef struct _CONTROLVM_PACKET_DEVICE_CREATE { - U32 busNo; /**< bus # (0..n-1) from the msg receiver's + u32 busNo; /**< bus # (0..n-1) from the msg receiver's * perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 devNo; /**< bus-relative (0..n-1) device number */ + u32 devNo; /**< bus-relative (0..n-1) device number */ U64 channelAddr; /**< Guest physical address of the channel, which * can be dereferenced by the receiver * of this ControlVm command */ @@ -300,11 +300,11 @@ typedef struct _CONTROLVM_PACKET_DEVICE_CREATE { } CONTROLVM_PACKET_DEVICE_CREATE; /* for CONTROLVM_DEVICE_CREATE */ typedef struct _CONTROLVM_PACKET_DEVICE_CONFIGURE { - U32 busNo; /**< bus # (0..n-1) from the msg + u32 busNo; /**< bus # (0..n-1) from the msg * receiver's perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 devNo; /**< bus-relative (0..n-1) device number */ + u32 devNo; /**< bus-relative (0..n-1) device number */ } CONTROLVM_PACKET_DEVICE_CONFIGURE; /* for CONTROLVM_DEVICE_CONFIGURE */ typedef struct _CONTROLVM_MESSAGE_DEVICE_CREATE { @@ -323,11 +323,11 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { /* BEGIN Request messages */ struct { - U32 busNo; /*< bus # (0..n-1) from the msg + u32 busNo; /*< bus # (0..n-1) from the msg * receiver's perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 deviceCount; /*< indicates the max number of + u32 deviceCount; /*< indicates the max number of * devices on this bus */ U64 channelAddr; /*< Guest physical address of the * channel, which can be @@ -339,19 +339,19 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { uuid_le busInstGuid; /*< instance guid for the bus */ } createBus; /* for CONTROLVM_BUS_CREATE */ struct { - U32 busNo; /*< bus # (0..n-1) from the msg + u32 busNo; /*< bus # (0..n-1) from the msg * receiver's perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 reserved; /* Natural alignment purposes */ + u32 reserved; /* Natural alignment purposes */ } destroyBus; /* for CONTROLVM_BUS_DESTROY */ struct { - U32 busNo; /*< bus # (0..n-1) from the + u32 busNo; /*< bus # (0..n-1) from the * msg receiver's * perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 reserved1; /* for alignment purposes */ + u32 reserved1; /* for alignment purposes */ U64 guestHandle; /* This is used to convert * guest physical address to real * physical address for DMA, for ex. */ @@ -368,57 +368,57 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { /* for CONTROLVM_DEVICE_CREATE */ CONTROLVM_PACKET_DEVICE_CREATE createDevice; struct { - U32 busNo; /*< bus # (0..n-1) from the msg + u32 busNo; /*< bus # (0..n-1) from the msg * receiver's perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 devNo; /*< bus-relative (0..n-1) device + u32 devNo; /*< bus-relative (0..n-1) device * number */ } destroyDevice; /* for CONTROLVM_DEVICE_DESTROY */ /* for CONTROLVM_DEVICE_CONFIGURE */ CONTROLVM_PACKET_DEVICE_CONFIGURE configureDevice; struct { - U32 busNo; /*< bus # (0..n-1) from the msg + u32 busNo; /*< bus # (0..n-1) from the msg * receiver's perspective */ /* Control uses header SegmentIndex field to access bus number... */ - U32 devNo; /*< bus-relative (0..n-1) device + u32 devNo; /*< bus-relative (0..n-1) device * number */ } reconfigureDevice; /* for CONTROLVM_DEVICE_RECONFIGURE */ struct { - U32 busNo; + u32 busNo; ULTRA_SEGMENT_STATE state; u8 reserved[2]; /* Natural alignment purposes */ } busChangeState; /* for CONTROLVM_BUS_CHANGESTATE */ struct { - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; ULTRA_SEGMENT_STATE state; struct { - U32 physicalDevice:1; /* =1 if message is for + u32 physicalDevice:1; /* =1 if message is for * a physical device */ /* remaining bits in this 32-bit word are available */ } flags; u8 reserved[2]; /* Natural alignment purposes */ } deviceChangeState; /* for CONTROLVM_DEVICE_CHANGESTATE */ struct { - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; ULTRA_SEGMENT_STATE state; u8 reserved[6]; /* Natural alignment purposes */ } deviceChangeStateEvent; /* for CONTROLVM_DEVICE_CHANGESTATE_EVENT */ struct { - U32 busCount; /*< indicates the max number of busses */ - U32 switchCount; /*< indicates the max number of + u32 busCount; /*< indicates the max number of busses */ + u32 switchCount; /*< indicates the max number of * switches (applicable for service * partition only) */ ULTRA_CHIPSET_FEATURE features; - U32 platformNumber; /* Platform Number */ + u32 platformNumber; /* Platform Number */ } initChipset; /* for CONTROLVM_CHIPSET_INIT */ struct { - U32 Options; /*< reserved */ - U32 Test; /*< bit 0 set to run embedded selftest */ + u32 Options; /*< reserved */ + u32 Test; /*< bit 0 set to run embedded selftest */ } chipsetSelftest; /* for CONTROLVM_CHIPSET_SELFTEST */ /* END Request messages */ @@ -452,8 +452,8 @@ typedef struct _CONTROLVM_MESSAGE { typedef struct _DEVICE_MAP { GUEST_PHYSICAL_ADDRESS DeviceChannelAddress; U64 DeviceChannelSize; - U32 CA_Index; - U32 Reserved; /* natural alignment */ + u32 CA_Index; + u32 Reserved; /* natural alignment */ U64 Reserved2; /* Align structure on 32-byte boundary */ } DEVICE_MAP; @@ -463,8 +463,8 @@ typedef struct _GUEST_DEVICES { DEVICE_MAP NetworkChannel; DEVICE_MAP StorageChannel; DEVICE_MAP ConsoleChannel; - U32 PartitionIndex; - U32 Pad; + u32 PartitionIndex; + u32 Pad; } GUEST_DEVICES; typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { @@ -489,13 +489,13 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { * channel */ U64 RequestPayloadOffset; /* Offset to request payload area */ U64 EventPayloadOffset; /* Offset to event payload area */ - U32 RequestPayloadBytes; /* Bytes available in request payload + u32 RequestPayloadBytes; /* Bytes available in request payload * area */ - U32 EventPayloadBytes; /* Bytes available in event payload area */ - U32 ControlChannelBytes; - U32 NvramChannelBytes; /* Bytes in PartitionNvram segment */ - U32 MessageBytes; /* sizeof(CONTROLVM_MESSAGE) */ - U32 MessageCount; /* CONTROLVM_MESSAGE_MAX */ + u32 EventPayloadBytes; /* Bytes available in event payload area */ + u32 ControlChannelBytes; + u32 NvramChannelBytes; /* Bytes in PartitionNvram segment */ + u32 MessageBytes; /* sizeof(CONTROLVM_MESSAGE) */ + u32 MessageCount; /* CONTROLVM_MESSAGE_MAX */ GUEST_PHYSICAL_ADDRESS gpSmbiosTable; /* guest phys addr of SMBIOS * tables */ GUEST_PHYSICAL_ADDRESS gpPhysicalSmbiosTable; /* guest phys addr of @@ -525,11 +525,11 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { * is running in dump mode */ u16 NvramFailCount; u16 SavedCrashMsgCount; /* = CONTROLVM_CRASHMSG_MAX */ - U32 SavedCrashMsgOffset; /* Offset to request payload area needed + u32 SavedCrashMsgOffset; /* Offset to request payload area needed * for crash dump */ - U32 InstallationError; /* Type of error encountered during + u32 InstallationError; /* Type of error encountered during * installation */ - U32 InstallationTextId; /* Id of string to display */ + u32 InstallationTextId; /* Id of string to display */ u16 InstallationRemainingSteps; /* Number of remaining installation * steps (for progress bars) */ u8 ToolAction; /* ULTRA_TOOL_ACTIONS Installation Action @@ -537,7 +537,7 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { u8 Reserved; /* alignment */ ULTRA_EFI_SPAR_INDICATION EfiSparIndication; ULTRA_EFI_SPAR_INDICATION EfiSparIndicationSupported; - U32 SPReserved; + u32 SPReserved; u8 Reserved2[28]; /* Force signals to begin on 128-byte cache * line */ SIGNAL_QUEUE_HEADER RequestQueue; /* Service or guest partition @@ -600,21 +600,21 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { * https://ustr-linux-1.na.uis.unisys.com/spar/index.php/ControlVm_Parameters_Area */ typedef struct _ULTRA_CONTROLVM_PARAMETERS_HEADER { - U32 TotalLength; - U32 HeaderLength; - U32 ConnectionOffset; - U32 ConnectionLength; - U32 InitiatorOffset; - U32 InitiatorLength; - U32 TargetOffset; - U32 TargetLength; - U32 ClientOffset; - U32 ClientLength; - U32 NameOffset; - U32 NameLength; + u32 TotalLength; + u32 HeaderLength; + u32 ConnectionOffset; + u32 ConnectionLength; + u32 InitiatorOffset; + u32 InitiatorLength; + u32 TargetOffset; + u32 TargetLength; + u32 ClientOffset; + u32 ClientLength; + u32 NameOffset; + u32 NameLength; uuid_le Id; - U32 Revision; - U32 Reserved; /* Natural alignment */ + u32 Revision; + u32 Reserved; /* Natural alignment */ } ULTRA_CONTROLVM_PARAMETERS_HEADER; #endif /* __CONTROLVMCHANNEL_H__ */ diff --git a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h index bac81cf3eee9..ccced6dd2956 100644 --- a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h @@ -113,7 +113,7 @@ typedef struct _DIAG_EFI_TIME { u8 Minute; /* 0 - 59 */ u8 Second; /* 0 - 59 */ u8 Pad1; - U32 Nanosecond; /* 0 - 999, 999, 999 */ + u32 Nanosecond; /* 0 - 999, 999, 999 */ S16 TimeZone; /* -1440 to 1440 or 2047 */ u8 Daylight; u8 Pad2; @@ -156,24 +156,24 @@ typedef enum { * AdditionalInfo: Array of characters for additional event info (may be * empty). */ typedef struct _DIAG_CHANNEL_EVENT { - U32 EventId; - U32 Severity; + u32 EventId; + u32 Severity; u8 ModuleName[MAX_MODULE_NAME_SIZE]; - U32 LineNumber; + u32 LineNumber; DIAG_EFI_TIME Timestamp; /* Size = 16 bytes */ - U32 PartitionNumber; /* Filled in by Diag Switch as pool blocks are + u32 PartitionNumber; /* Filled in by Diag Switch as pool blocks are * filled */ u16 VirtualProcessorNumber; u16 LogicalProcessorNumber; u8 ComponentType; /* ULTRA_COMPONENT_TYPES */ u8 Subsystem; u16 Reserved0; /* pad to U64 alignment */ - U32 BlockNumber; /* filled in by DiagSwitch as pool blocks are + u32 BlockNumber; /* filled in by DiagSwitch as pool blocks are * filled */ - U32 BlockNumberHigh; - U32 EventNumber; /* filled in by DiagSwitch as pool blocks are + u32 BlockNumberHigh; + u32 EventNumber; /* filled in by DiagSwitch as pool blocks are * filled */ - U32 EventNumberHigh; + u32 EventNumberHigh; /* The BlockNumber and EventNumber fields are set only by DiagSwitch * and referenced only by WinDiagDisplay formatting tool as @@ -363,7 +363,7 @@ typedef enum { * particular subsystem below this level will be discarded. */ typedef struct _DIAG_CHANNEL_PROTOCOL_HEADER { - volatile U32 DiagLock; + volatile u32 DiagLock; u8 IsChannelInitialized; u8 Reserved[3]; u8 SubsystemSeverityFilter[64]; diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h index a95add766fc3..26457c3c112f 100644 --- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h @@ -257,28 +257,28 @@ struct guest_phys_info { #define GPI_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof(struct guest_phys_info)) struct uisscsi_dest { - U32 channel; /* channel == bus number */ - U32 id; /* id == target number */ - U32 lun; /* lun == logical unit number */ + u32 channel; /* channel == bus number */ + u32 id; /* id == target number */ + u32 lun; /* lun == logical unit number */ }; struct vhba_wwnn { - U32 wwnn1; - U32 wwnn2; + u32 wwnn1; + u32 wwnn2; }; /* WARNING: Values stired in this structure must contain maximum counts (not * maximum values). */ struct vhba_config_max { /* 20 bytes */ - U32 max_channel; /* maximum channel for devices attached to this + u32 max_channel; /* maximum channel for devices attached to this * bus */ - U32 max_id; /* maximum SCSI ID for devices attached to this + u32 max_id; /* maximum SCSI ID for devices attached to this * bus */ - U32 max_lun; /* maximum SCSI LUN for devices attached to this + u32 max_lun; /* maximum SCSI LUN for devices attached to this * bus */ - U32 cmd_per_lun; /* maximum number of outstanding commands per + u32 cmd_per_lun; /* maximum number of outstanding commands per * lun that are allowed at one time */ - U32 max_io_size; /* maximum io size for devices attached to this + u32 max_io_size; /* maximum io size for devices attached to this * bus */ /* max io size is often determined by the resource of the hba. e.g */ /* max scatter gather list length * page size / sector size */ @@ -288,7 +288,7 @@ struct uiscmdrsp_scsi { void *scsicmd; /* the handle to the cmd that was received - * send it back as is in the rsp packet. */ u8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */ - U32 bufflen; /* length of data to be transferred out or in */ + u32 bufflen; /* length of data to be transferred out or in */ u16 guest_phys_entries; /* Number of entries in scatter-gather (sg) * list */ struct guest_phys_info gpi_list[MAX_PHYS_INFO]; /* physical address @@ -492,10 +492,10 @@ struct net_pkt_xmt { u8 hrawoffv; /* 1 = hwrafoff is valid */ u8 nhrawoffv; /* 1 = nhwrafoff is valid */ u16 protocol; /* specifies packet protocol */ - U32 csum; /* value used to set skb->csum at IOPart */ - U32 hrawoff; /* value used to set skb->h.raw at IOPart */ + u32 csum; /* value used to set skb->csum at IOPart */ + u32 hrawoff; /* value used to set skb->h.raw at IOPart */ /* hrawoff points to the start of the TRANSPORT LAYER HEADER */ - U32 nhrawoff; /* value used to set skb->nh.raw at IOPart */ + u32 nhrawoff; /* value used to set skb->nh.raw at IOPart */ /* nhrawoff points to the start of the NETWORK LAYER HEADER */ } lincsum; @@ -508,7 +508,7 @@ struct net_pkt_xmt { }; struct net_pkt_xmtdone { - U32 xmt_done_result; /* result of NET_XMIT */ + u32 xmt_done_result; /* result of NET_XMIT */ #define XMIT_SUCCESS 0 #define XMIT_FAILED 1 }; @@ -538,7 +538,7 @@ struct net_pkt_rcv { /* the number of receive buffers that can be chained */ /* is based on max mtu and size of each rcv buf */ - U32 rcv_done_len; /* length of received data */ + u32 rcv_done_len; /* length of received data */ u8 numrcvbufs; /* number of receive buffers that contain the */ /* incoming data; guest end MUST chain these together. */ void *rcvbuf[MAX_NET_RCV_CHAIN]; /* the list of receive buffers @@ -546,7 +546,7 @@ struct net_pkt_rcv { /* each entry is a receive buffer provided by NET_RCV_POST. */ /* NOTE: first rcvbuf in the chain will also be provided in net.buf. */ U64 UniqueNum; - U32 RcvsDroppedDelta; + u32 RcvsDroppedDelta; }; struct net_pkt_enbdis { @@ -618,7 +618,7 @@ struct uiscmdrsp_disknotify { u8 add; /* 0-remove, 1-add */ void *vHba; /* Pointer to vhba_info for channel info to * route msg */ - U32 channel, id, lun; /* SCSI Path of Disk to added or removed */ + u32 channel, id, lun; /* SCSI Path of Disk to added or removed */ }; /* The following is used by virthba/vSCSI to send the Acquire/Release commands @@ -696,8 +696,8 @@ typedef struct _ULTRA_IO_CHANNEL_PROTOCOL { } vhba; /* 28 */ struct { u8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ - U32 num_rcv_bufs; /* 4 */ - U32 mtu; /* 4 */ + u32 num_rcv_bufs; /* 4 */ + u32 mtu; /* 4 */ uuid_le zoneGuid; /* 16 */ } vnic; /* total 30 */ }; @@ -777,9 +777,9 @@ typedef struct _ULTRA_IO_CHANNEL_PROTOCOL { OFFSETOF(type, clientString); \ MEMCPY(chan->clientString, clientStr, \ MINNUM(clientStrLen, \ - (U32) (MAX_CLIENTSTRING_LEN - 1))); \ + (u32) (MAX_CLIENTSTRING_LEN - 1))); \ chan->clientString[MINNUM(clientStrLen, \ - (U32) (MAX_CLIENTSTRING_LEN \ + (u32) (MAX_CLIENTSTRING_LEN \ - 1))] \ = '\0'; \ } \ @@ -801,7 +801,7 @@ static inline int ULTRA_VHBA_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, struct vhba_wwnn *wwnn, struct vhba_config_max *max, unsigned char *clientStr, - U32 clientStrLen, U64 bytes) { + u32 clientStrLen, U64 bytes) { MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VHBA_CHANNEL_PROTOCOL_VERSIONID; x->ChannelHeader.Signature = ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE; @@ -833,10 +833,10 @@ static inline void ULTRA_VHBA_set_max(ULTRA_IO_CHANNEL_PROTOCOL *x, static inline int ULTRA_VNIC_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, unsigned char *macaddr, - U32 num_rcv_bufs, U32 mtu, + u32 num_rcv_bufs, u32 mtu, uuid_le zoneGuid, unsigned char *clientStr, - U32 clientStrLen, + u32 clientStrLen, U64 bytes) { MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VNIC_CHANNEL_PROTOCOL_VERSIONID; @@ -883,11 +883,11 @@ static inline int ULTRA_VNIC_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, * room) */ static INLINE u16 -add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used +add_physinfo_entries(u32 inp_pfn, /* input - specifies the pfn to be used * to add entries */ u16 inp_off, /* input - specifies the off to be used * to add entries */ - U32 inp_len, /* input - specifies the len to be used + u32 inp_len, /* input - specifies the len to be used * to add entries */ u16 index, /* input - index in array at which new * entries are added */ @@ -896,7 +896,7 @@ add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used struct phys_info pi_arr[]) /* input & output - array to * which entries are added */ { - U32 len; + u32 len; u16 i, firstlen; firstlen = PI_PAGE_SIZE - inp_off; @@ -925,7 +925,7 @@ add_physinfo_entries(U32 inp_pfn, /* input - specifies the pfn to be used else { pi_arr[index + i].pi_off = 0; pi_arr[index + i].pi_len = - (u16) MINNUM(len, (U32) PI_PAGE_SIZE); + (u16) MINNUM(len, (u32) PI_PAGE_SIZE); } } diff --git a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h index cd94c8f91780..8facb51143ae 100644 --- a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h @@ -63,15 +63,15 @@ static const uuid_le UltraVbusChannelProtocolGuid = #pragma pack(push, 1) /* both GCC and VC now allow this pragma */ typedef struct _ULTRA_VBUS_HEADERINFO { - U32 structBytes; /* size of this struct in bytes */ - U32 deviceInfoStructBytes; /* sizeof(ULTRA_VBUS_DEVICEINFO) */ - U32 devInfoCount; /* num of items in DevInfo member */ + u32 structBytes; /* size of this struct in bytes */ + u32 deviceInfoStructBytes; /* sizeof(ULTRA_VBUS_DEVICEINFO) */ + u32 devInfoCount; /* num of items in DevInfo member */ /* (this is the allocated size) */ - U32 chpInfoByteOffset; /* byte offset from beginning of this struct */ + u32 chpInfoByteOffset; /* byte offset from beginning of this struct */ /* to the the ChpInfo struct (below) */ - U32 busInfoByteOffset; /* byte offset from beginning of this struct */ + u32 busInfoByteOffset; /* byte offset from beginning of this struct */ /* to the the BusInfo struct (below) */ - U32 devInfoByteOffset; /* byte offset from beginning of this struct */ + u32 devInfoByteOffset; /* byte offset from beginning of this struct */ /* to the the DevInfo array (below) */ u8 reserved[104]; } ULTRA_VBUS_HEADERINFO; diff --git a/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/drivers/staging/unisys/common-spar/include/vmcallinterface.h index a8ecb0b38922..e98616468173 100644 --- a/drivers/staging/unisys/common-spar/include/vmcallinterface.h +++ b/drivers/staging/unisys/common-spar/include/vmcallinterface.h @@ -88,7 +88,7 @@ typedef enum { /* VMCALL identification tuples */ * not used much */ #define ISSUE_IO_VMCALL_POSTCODE_SEVERITY(postcode, severity) \ do { \ - U32 _tempresult = VMCALL_SUCCESS; \ + u32 _tempresult = VMCALL_SUCCESS; \ ISSUE_IO_EXTENDED_VMCALL(VMCALL_POST_CODE_LOGEVENT, severity, \ MDS_APPOS, postcode, _tempresult); \ } while (0) @@ -119,7 +119,7 @@ typedef struct _VMCALL_IO_CONTROLVM_ADDR_PARAMS { U64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ /* the size of the ControlVm channel in bytes This VMCall fills this * in with the appropriate address. */ - U32 ChannelBytes; /* contents provided by this VMCALL (OUT) */ + u32 ChannelBytes; /* contents provided by this VMCALL (OUT) */ u8 Unused[4]; /* Unused Bytes in the 64-Bit Aligned Struct */ } VMCALL_IO_CONTROLVM_ADDR_PARAMS; @@ -159,7 +159,7 @@ typedef struct _VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS { * (IN) */ u8 ItemName[32]; /* Null terminated string giving name of * mismatched item (IN) */ - U32 SourceLineNumber; /* line# where invoked. (IN) */ + u32 SourceLineNumber; /* line# where invoked. (IN) */ u8 SourceFileName[36]; /* source code where invoked - Null terminated * string (IN) */ } VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS; diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 2c49b9d01694..48da47fcd8d1 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define U32 uint32_t #define U64 uint64_t #define S8 int8_t #define S16 int16_t @@ -40,7 +39,7 @@ #ifdef __KERNEL__ #ifdef CONFIG_X86_32 -#define UINTN U32 +#define UINTN u32 #else #define UINTN U64 #endif @@ -49,7 +48,7 @@ #include #if __WORDSIZE == 32 -#define UINTN U32 +#define UINTN u32 #elif __WORDSIZE == 64 #define UINTN U64 #else @@ -121,7 +120,7 @@ typedef U64 GUEST_PHYSICAL_ADDRESS; fil, lin); \ } while (0) -#define CHANNEL_U32_MISMATCH(chType, chName, field, expected, actual, fil, \ +#define CHANNEL_u32_MISMATCH(chType, chName, field, expected, actual, fil, \ lin, logCtx) \ do { \ syslog(LOG_USER | LOG_ERR, \ diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h index 6dc473bf76db..56cc828858ca 100644 --- a/drivers/staging/unisys/include/uisqueue.h +++ b/drivers/staging/unisys/include/uisqueue.h @@ -112,7 +112,7 @@ struct extport_info { /* if 1, indicates this extport slot is occupied * if 0, indicates that extport slot is unoccupied */ - U32 num_devs_using; + u32 num_devs_using; /* When extport is added, this is set to 0. For exports * located in NETWORK switches: * Each time a VNIC, i.e., intport, is added to the switch this @@ -144,8 +144,8 @@ struct device_info { char devid[30]; /* "vbus:dev" */ u16 polling; struct semaphore interrupt_callback_lock; - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; int (*interrupt)(void *); void *interrupt_context; void *private_data; @@ -161,7 +161,7 @@ typedef enum { } SWITCH_TYPE; struct bus_info { - U32 busNo, deviceCount; + u32 busNo, deviceCount; struct device_info **device; U64 guestHandle, recvBusInterruptHandle; uuid_le busInstGuid; @@ -190,12 +190,12 @@ struct sn_list_entry { }; struct networkPolicy { - U32 promiscuous:1; - U32 macassign:1; - U32 peerforwarding:1; - U32 nonotify:1; - U32 standby:1; - U32 callhome:2; + u32 promiscuous:1; + u32 macassign:1; + u32 peerforwarding:1; + u32 nonotify:1; + u32 standby:1; + u32 callhome:2; char ip_addr[30]; }; @@ -251,8 +251,8 @@ struct add_virt_iopart { * needs to use G2G copy. */ u8 Filler[7]; - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; char *params; ulong params_bytes; @@ -264,22 +264,22 @@ struct add_vdisk_iopart { struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */ struct uisscsi_dest pdest; /* scsi bus, target, lun for phys disk */ u8 sernum[MAX_SERIAL_NUM]; /* serial num of physical disk */ - U32 serlen; /* length of serial num */ - U32 busNo; - U32 devNo; + u32 serlen; /* length of serial num */ + u32 busNo; + u32 devNo; }; struct del_vdisk_iopart { void *chanptr; /* pointer to data channel */ struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */ - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; }; struct del_virt_iopart { void *chanptr; /* pointer to data channel */ - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; }; struct det_virt_iopart { /* detach internal port */ @@ -355,14 +355,14 @@ typedef enum { struct add_vbus_guestpart { void __iomem *chanptr; /* pointer to data channel for bus - * NOT YET USED */ - U32 busNo; /* bus number to be created/deleted */ - U32 deviceCount; /* max num of devices on bus */ + u32 busNo; /* bus number to be created/deleted */ + u32 deviceCount; /* max num of devices on bus */ uuid_le busTypeGuid; /* indicates type of bus */ uuid_le busInstGuid; /* instance guid for device */ }; struct del_vbus_guestpart { - U32 busNo; /* bus number to be deleted */ + u32 busNo; /* bus number to be deleted */ /* once we start using the bus's channel, add can dump busNo * into the channel header and then delete will need only one * parameter, chanptr. */ @@ -370,8 +370,8 @@ struct del_vbus_guestpart { struct add_virt_guestpart { void __iomem *chanptr; /* pointer to data channel */ - U32 busNo; /* bus number for the operation */ - U32 deviceNo; /* number of device on the bus */ + u32 busNo; /* bus number for the operation */ + u32 deviceNo; /* number of device on the bus */ uuid_le devInstGuid; /* instance guid for device */ struct InterruptInfo intr; /* recv/send interrupt info */ /* recvInterruptHandle contains info needed in order to @@ -395,8 +395,8 @@ struct del_virt_guestpart { }; struct init_chipset_guestpart { - U32 busCount; /* indicates the max number of busses */ - U32 switchCount; /* indicates the max number of switches */ + u32 busCount; /* indicates the max number of busses */ + u32 switchCount; /* indicates the max number of switches */ }; struct guest_msgs { diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h index 14d5cbda594a..947f132f1f0e 100644 --- a/drivers/staging/unisys/include/uisutils.h +++ b/drivers/staging/unisys/include/uisutils.h @@ -60,7 +60,7 @@ typedef struct ReqHandlerInfo_struct { unsigned long min_channel_bytes; int (*Server_Channel_Ok)(unsigned long channelBytes); int (*Server_Channel_Init) - (void *x, unsigned char *clientStr, U32 clientStrLen, U64 bytes); + (void *x, unsigned char *clientStr, u32 clientStrLen, U64 bytes); char switch_type_name[99]; struct list_head list_link; /* links into ReqHandlerInfo_list */ } ReqHandlerInfo_t; @@ -73,7 +73,7 @@ ReqHandlerInfo_t *ReqHandlerAdd(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - U32 clientStrLen, U64 bytes)); + u32 clientStrLen, U64 bytes)); ReqHandlerInfo_t *ReqHandlerFind(uuid_le switchTypeGuid); int ReqHandlerDel(uuid_le switchTypeGuid); @@ -121,7 +121,7 @@ int uisctrl_register_req_handler_ex(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - U32 clientStrLen, U64 bytes), + u32 clientStrLen, U64 bytes), ULTRA_VBUS_DEVICEINFO *chipset_DriverInfo); int uisctrl_unregister_req_handler_ex(uuid_le switchTypeGuid); @@ -129,29 +129,29 @@ unsigned char *util_map_virt(struct phys_info *sg); void util_unmap_virt(struct phys_info *sg); unsigned char *util_map_virt_atomic(struct phys_info *sg); void util_unmap_virt_atomic(void *buf); -int uislib_server_inject_add_vnic(U32 switchNo, U32 BusNo, U32 numIntPorts, - U32 numExtPorts, MACARRAY pmac[], +int uislib_server_inject_add_vnic(u32 switchNo, u32 BusNo, u32 numIntPorts, + u32 numExtPorts, MACARRAY pmac[], pCHANNEL_HEADER **chan); -void uislib_server_inject_del_vnic(U32 switchNo, U32 busNo, U32 numIntPorts, - U32 numExtPorts); -int uislib_client_inject_add_bus(U32 busNo, uuid_le instGuid, +void uislib_server_inject_del_vnic(u32 switchNo, u32 busNo, u32 numIntPorts, + u32 numExtPorts); +int uislib_client_inject_add_bus(u32 busNo, uuid_le instGuid, U64 channelAddr, ulong nChannelBytes); -int uislib_client_inject_del_bus(U32 busNo); +int uislib_client_inject_del_bus(u32 busNo); -int uislib_client_inject_add_vhba(U32 busNo, U32 devNo, - U64 phys_chan_addr, U32 chan_bytes, +int uislib_client_inject_add_vhba(u32 busNo, u32 devNo, + U64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr); -int uislib_client_inject_pause_vhba(U32 busNo, U32 devNo); -int uislib_client_inject_resume_vhba(U32 busNo, U32 devNo); -int uislib_client_inject_del_vhba(U32 busNo, U32 devNo); -int uislib_client_inject_add_vnic(U32 busNo, U32 devNo, - U64 phys_chan_addr, U32 chan_bytes, +int uislib_client_inject_pause_vhba(u32 busNo, u32 devNo); +int uislib_client_inject_resume_vhba(u32 busNo, u32 devNo); +int uislib_client_inject_del_vhba(u32 busNo, u32 devNo); +int uislib_client_inject_add_vnic(u32 busNo, u32 devNo, + U64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr); -int uislib_client_inject_pause_vnic(U32 busNo, U32 devNo); -int uislib_client_inject_resume_vnic(U32 busNo, U32 devNo); -int uislib_client_inject_del_vnic(U32 busNo, U32 devNo); +int uislib_client_inject_pause_vnic(u32 busNo, u32 devNo); +int uislib_client_inject_resume_vnic(u32 busNo, u32 devNo); +int uislib_client_inject_del_vnic(u32 busNo, u32 devNo); #ifdef STORAGE_CHANNEL U64 uislib_storage_channel(int client_id); #endif @@ -220,7 +220,7 @@ unsigned int uisutil_copy_fragsinfo_from_skb(unsigned char *calling_ctx, struct phys_info frags[]); static inline unsigned int -Issue_VMCALL_IO_CONTROLVM_ADDR(U64 *ControlAddress, U32 *ControlBytes) +Issue_VMCALL_IO_CONTROLVM_ADDR(U64 *ControlAddress, u32 *ControlBytes) { VMCALL_IO_CONTROLVM_ADDR_PARAMS params; int result = VMCALL_SUCCESS; @@ -300,7 +300,7 @@ static inline int Issue_VMCALL_UPDATE_PHYSICAL_TIME(U64 adjustment) static inline unsigned int Issue_VMCALL_CHANNEL_MISMATCH(const char *ChannelName, const char *ItemName, - U32 SourceLineNumber, const char *path_n_fn) + u32 SourceLineNumber, const char *path_n_fn) { VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS params; int result = VMCALL_SUCCESS; @@ -347,10 +347,10 @@ void uislib_cache_free(struct kmem_cache *cur_pool, void *p, char *fn, int ln); #define UISCACHEFREE(cur_pool, p) \ uislib_cache_free(cur_pool, p, __FILE__, __LINE__) -void uislib_enable_channel_interrupts(U32 busNo, U32 devNo, +void uislib_enable_channel_interrupts(u32 busNo, u32 devNo, int (*interrupt)(void *), void *interrupt_context); -void uislib_disable_channel_interrupts(U32 busNo, U32 devNo); -void uislib_force_channel_interrupt(U32 busNo, U32 devNo); +void uislib_disable_channel_interrupts(u32 busNo, u32 devNo); +void uislib_force_channel_interrupt(u32 busNo, u32 devNo); #endif /* __UISUTILS__H__ */ diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index 5c7bffca005b..4e2777ef405b 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -120,7 +120,7 @@ static const struct file_operations debugfs_info_fops = { }; static void -init_msg_header(CONTROLVM_MESSAGE *msg, U32 id, uint rsp, uint svr) +init_msg_header(CONTROLVM_MESSAGE *msg, u32 id, uint rsp, uint svr) { memset(msg, 0, sizeof(CONTROLVM_MESSAGE)); msg->hdr.Id = id; @@ -129,7 +129,7 @@ init_msg_header(CONTROLVM_MESSAGE *msg, U32 id, uint rsp, uint svr) } static __iomem void * -init_vbus_channel(U64 channelAddr, U32 channelBytes) +init_vbus_channel(U64 channelAddr, u32 channelBytes) { void __iomem *rc = NULL; void __iomem *pChan = uislib_ioremap_cache(channelAddr, channelBytes); @@ -154,7 +154,7 @@ Away: static int create_bus(CONTROLVM_MESSAGE *msg, char *buf) { - U32 busNo, deviceCount; + u32 busNo, deviceCount; struct bus_info *tmp, *bus; size_t size; @@ -273,7 +273,7 @@ destroy_bus(CONTROLVM_MESSAGE *msg, char *buf) { int i; struct bus_info *bus, *prev = NULL; - U32 busNo; + u32 busNo; busNo = msg->cmd.destroyBus.busNo; @@ -341,7 +341,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf) { struct device_info *dev; struct bus_info *bus; - U32 busNo, devNo; + u32 busNo, devNo; int result = CONTROLVM_RESP_SUCCESS; U64 minSize = MIN_IO_CHANNEL_SIZE; ReqHandlerInfo_t *pReqHandler; @@ -535,7 +535,7 @@ Away: static int pause_device(CONTROLVM_MESSAGE *msg) { - U32 busNo, devNo; + u32 busNo, devNo; struct bus_info *bus; struct device_info *dev; struct guest_msgs cmd; @@ -607,7 +607,7 @@ pause_device(CONTROLVM_MESSAGE *msg) static int resume_device(CONTROLVM_MESSAGE *msg) { - U32 busNo, devNo; + u32 busNo, devNo; struct bus_info *bus; struct device_info *dev; struct guest_msgs cmd; @@ -679,7 +679,7 @@ resume_device(CONTROLVM_MESSAGE *msg) static int destroy_device(CONTROLVM_MESSAGE *msg, char *buf) { - U32 busNo, devNo; + u32 busNo, devNo; struct bus_info *bus; struct device_info *dev; struct guest_msgs cmd; @@ -791,7 +791,7 @@ init_chipset(CONTROLVM_MESSAGE *msg, char *buf) } static int -delete_bus_glue(U32 busNo) +delete_bus_glue(u32 busNo) { CONTROLVM_MESSAGE msg; @@ -805,7 +805,7 @@ delete_bus_glue(U32 busNo) } static int -delete_device_glue(U32 busNo, U32 devNo) +delete_device_glue(u32 busNo, u32 devNo) { CONTROLVM_MESSAGE msg; @@ -821,7 +821,7 @@ delete_device_glue(U32 busNo, U32 devNo) } int -uislib_client_inject_add_bus(U32 busNo, uuid_le instGuid, +uislib_client_inject_add_bus(u32 busNo, uuid_le instGuid, U64 channelAddr, ulong nChannelBytes) { CONTROLVM_MESSAGE msg; @@ -872,14 +872,14 @@ EXPORT_SYMBOL_GPL(uislib_client_inject_add_bus); int -uislib_client_inject_del_bus(U32 busNo) +uislib_client_inject_del_bus(u32 busNo) { return delete_bus_glue(busNo); } EXPORT_SYMBOL_GPL(uislib_client_inject_del_bus); int -uislib_client_inject_pause_vhba(U32 busNo, U32 devNo) +uislib_client_inject_pause_vhba(u32 busNo, u32 devNo) { CONTROLVM_MESSAGE msg; int rc; @@ -899,7 +899,7 @@ uislib_client_inject_pause_vhba(U32 busNo, U32 devNo) EXPORT_SYMBOL_GPL(uislib_client_inject_pause_vhba); int -uislib_client_inject_resume_vhba(U32 busNo, U32 devNo) +uislib_client_inject_resume_vhba(u32 busNo, u32 devNo) { CONTROLVM_MESSAGE msg; int rc; @@ -920,8 +920,8 @@ uislib_client_inject_resume_vhba(U32 busNo, U32 devNo) EXPORT_SYMBOL_GPL(uislib_client_inject_resume_vhba); int -uislib_client_inject_add_vhba(U32 busNo, U32 devNo, - U64 phys_chan_addr, U32 chan_bytes, +uislib_client_inject_add_vhba(u32 busNo, u32 devNo, + U64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr) { @@ -972,15 +972,15 @@ uislib_client_inject_add_vhba(U32 busNo, U32 devNo, EXPORT_SYMBOL_GPL(uislib_client_inject_add_vhba); int -uislib_client_inject_del_vhba(U32 busNo, U32 devNo) +uislib_client_inject_del_vhba(u32 busNo, u32 devNo) { return delete_device_glue(busNo, devNo); } EXPORT_SYMBOL_GPL(uislib_client_inject_del_vhba); int -uislib_client_inject_add_vnic(U32 busNo, U32 devNo, - U64 phys_chan_addr, U32 chan_bytes, +uislib_client_inject_add_vnic(u32 busNo, u32 devNo, + U64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr) { @@ -1032,7 +1032,7 @@ uislib_client_inject_add_vnic(U32 busNo, U32 devNo, EXPORT_SYMBOL_GPL(uislib_client_inject_add_vnic); int -uislib_client_inject_pause_vnic(U32 busNo, U32 devNo) +uislib_client_inject_pause_vnic(u32 busNo, u32 devNo) { CONTROLVM_MESSAGE msg; int rc; @@ -1052,7 +1052,7 @@ uislib_client_inject_pause_vnic(U32 busNo, U32 devNo) EXPORT_SYMBOL_GPL(uislib_client_inject_pause_vnic); int -uislib_client_inject_resume_vnic(U32 busNo, U32 devNo) +uislib_client_inject_resume_vnic(u32 busNo, u32 devNo) { CONTROLVM_MESSAGE msg; int rc; @@ -1073,14 +1073,14 @@ uislib_client_inject_resume_vnic(U32 busNo, U32 devNo) EXPORT_SYMBOL_GPL(uislib_client_inject_resume_vnic); int -uislib_client_inject_del_vnic(U32 busNo, U32 devNo) +uislib_client_inject_del_vnic(u32 busNo, u32 devNo) { return delete_device_glue(busNo, devNo); } EXPORT_SYMBOL_GPL(uislib_client_inject_del_vnic); static int -uislib_client_add_vnic(U32 busNo) +uislib_client_add_vnic(u32 busNo) { BOOL busCreated = FALSE; int devNo = 0; /* Default to 0, since only one device @@ -1129,7 +1129,7 @@ AwayCleanup: EXPORT_SYMBOL_GPL(uislib_client_add_vnic); static int -uislib_client_delete_vnic(U32 busNo) +uislib_client_delete_vnic(u32 busNo) { int devNo = 0; /* Default to 0, since only one device * will be created for this bus... */ @@ -1285,7 +1285,7 @@ info_debugfs_read(struct file *file, char __user *buf, } static struct device_info * -find_dev(U32 busNo, U32 devNo) +find_dev(u32 busNo, u32 devNo) { struct bus_info *bus; struct device_info *dev = NULL; @@ -1458,7 +1458,7 @@ Initialize_incoming_thread(void) * function. */ void -uislib_enable_channel_interrupts(U32 busNo, U32 devNo, +uislib_enable_channel_interrupts(u32 busNo, u32 devNo, int (*interrupt)(void *), void *interrupt_context) { @@ -1484,7 +1484,7 @@ EXPORT_SYMBOL_GPL(uislib_enable_channel_interrupts); * Process_Incoming(). */ void -uislib_disable_channel_interrupts(U32 busNo, U32 devNo) +uislib_disable_channel_interrupts(u32 busNo, u32 devNo) { struct device_info *dev; dev = find_dev(busNo, devNo); @@ -1517,7 +1517,7 @@ static DECLARE_WORK(Work_wakeup_polling_device_channels, * your device might have more requests. */ void -uislib_force_channel_interrupt(U32 busNo, U32 devNo) +uislib_force_channel_interrupt(u32 busNo, u32 devNo) { if (en_smart_wakeup == 0) return; diff --git a/drivers/staging/unisys/uislib/uisutils.c b/drivers/staging/unisys/uislib/uisutils.c index 07e5535fc340..c30057b25d13 100644 --- a/drivers/staging/unisys/uislib/uisutils.c +++ b/drivers/staging/unisys/uislib/uisutils.c @@ -112,7 +112,7 @@ uisctrl_register_req_handler_ex(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - U32 clientStrLen, U64 bytes), + u32 clientStrLen, U64 bytes), ULTRA_VBUS_DEVICEINFO *chipset_DriverInfo) { ReqHandlerInfo_t *pReqHandlerInfo; @@ -279,7 +279,7 @@ ReqHandlerAdd(uuid_le switchTypeGuid, unsigned long min_channel_bytes, int (*Server_Channel_Ok)(unsigned long channelBytes), int (*Server_Channel_Init) - (void *x, unsigned char *clientStr, U32 clientStrLen, U64 bytes)) + (void *x, unsigned char *clientStr, u32 clientStrLen, U64 bytes)) { ReqHandlerInfo_t *rc = NULL; diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index 48a03b488c75..b59c1bab9189 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -160,8 +160,8 @@ struct scsipending { #define VIRTHBA_ERROR_COUNT 30 #define IOS_ERROR_THRESHOLD 1000 struct virtdisk_info { - U32 valid; - U32 channel, id, lun; /* Disk Path */ + u32 valid; + u32 channel, id, lun; /* Disk Path */ atomic_t ios_threshold; atomic_t error_count; struct virtdisk_info *next; @@ -198,7 +198,7 @@ struct virthba_info { struct diskaddremove { u8 add; /* 0-remove, 1-add */ struct Scsi_Host *shost; /* Scsi Host for this virthba instance */ - U32 channel, id, lun; /* Disk Path */ + u32 channel, id, lun; /* Disk Path */ struct diskaddremove *next; }; diff --git a/drivers/staging/unisys/virtpci/virtpci.h b/drivers/staging/unisys/virtpci/virtpci.h index 7539fcb30d38..6e26956c79f4 100644 --- a/drivers/staging/unisys/virtpci/virtpci.h +++ b/drivers/staging/unisys/virtpci/virtpci.h @@ -58,8 +58,8 @@ struct virtpci_dev { * this device */ unsigned short vendor; /* vendor id for device */ unsigned short device; /* device id for device */ - U32 busNo; /* number of bus on which device exists */ - U32 deviceNo; /* device's number on the bus */ + u32 busNo; /* number of bus on which device exists */ + u32 deviceNo; /* device's number on the bus */ struct InterruptInfo intr; /* interrupt info */ struct device generic_dev; /* generic device */ union { diff --git a/drivers/staging/unisys/visorchannel/visorchannel.h b/drivers/staging/unisys/visorchannel/visorchannel.h index 9de4f8a5bfce..352bc5458aa2 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel.h +++ b/drivers/staging/unisys/visorchannel/visorchannel.h @@ -56,10 +56,10 @@ int visorchannel_write(VISORCHANNEL *channel, ulong offset, void *local, ulong nbytes); int visorchannel_clear(VISORCHANNEL *channel, ulong offset, u8 ch, ulong nbytes); -BOOL visorchannel_signalremove(VISORCHANNEL *channel, U32 queue, void *msg); -BOOL visorchannel_signalinsert(VISORCHANNEL *channel, U32 queue, void *msg); -int visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, U32 queue); -int visorchannel_signalqueue_max_slots(VISORCHANNEL *channel, U32 queue); +BOOL visorchannel_signalremove(VISORCHANNEL *channel, u32 queue, void *msg); +BOOL visorchannel_signalinsert(VISORCHANNEL *channel, u32 queue, void *msg); +int visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, u32 queue); +int visorchannel_signalqueue_max_slots(VISORCHANNEL *channel, u32 queue); HOSTADDRESS visorchannel_get_physaddr(VISORCHANNEL *channel); ulong visorchannel_get_nbytes(VISORCHANNEL *channel); @@ -70,7 +70,7 @@ uuid_le visorchannel_get_uuid(VISORCHANNEL *channel); MEMREGION *visorchannel_get_memregion(VISORCHANNEL *channel); char *visorchannel_uuid_id(uuid_le *guid, char *s); void visorchannel_debug(VISORCHANNEL *channel, int nQueues, - struct seq_file *seq, U32 off); + struct seq_file *seq, u32 off); void visorchannel_dump_section(VISORCHANNEL *chan, char *s, int off, int len, struct seq_file *seq); void __iomem *visorchannel_get_header(VISORCHANNEL *channel); diff --git a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c index 8d0964a25352..62ec9280cb3a 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c +++ b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c @@ -310,7 +310,7 @@ EXPORT_SYMBOL_GPL(visorchannel_get_header); sizeof((sig_hdr)->FIELD)) >= 0) static BOOL -sig_read_header(VISORCHANNEL *channel, U32 queue, +sig_read_header(VISORCHANNEL *channel, u32 queue, SIGNAL_QUEUE_HEADER *sig_hdr) { BOOL rc = FALSE; @@ -336,8 +336,8 @@ Away: } static BOOL -sig_do_data(VISORCHANNEL *channel, U32 queue, - SIGNAL_QUEUE_HEADER *sig_hdr, U32 slot, void *data, BOOL is_write) +sig_do_data(VISORCHANNEL *channel, u32 queue, + SIGNAL_QUEUE_HEADER *sig_hdr, u32 slot, void *data, BOOL is_write) { BOOL rc = FALSE; int signal_data_offset = SIG_DATA_OFFSET(&channel->chan_hdr, queue, @@ -362,15 +362,15 @@ Away: } static inline BOOL -sig_read_data(VISORCHANNEL *channel, U32 queue, - SIGNAL_QUEUE_HEADER *sig_hdr, U32 slot, void *data) +sig_read_data(VISORCHANNEL *channel, u32 queue, + SIGNAL_QUEUE_HEADER *sig_hdr, u32 slot, void *data) { return sig_do_data(channel, queue, sig_hdr, slot, data, FALSE); } static inline BOOL -sig_write_data(VISORCHANNEL *channel, U32 queue, - SIGNAL_QUEUE_HEADER *sig_hdr, U32 slot, void *data) +sig_write_data(VISORCHANNEL *channel, u32 queue, + SIGNAL_QUEUE_HEADER *sig_hdr, u32 slot, void *data) { return sig_do_data(channel, queue, sig_hdr, slot, data, TRUE); } @@ -378,7 +378,7 @@ sig_write_data(VISORCHANNEL *channel, U32 queue, static inline unsigned char safe_sig_queue_validate(pSIGNAL_QUEUE_HEADER psafe_sqh, pSIGNAL_QUEUE_HEADER punsafe_sqh, - U32 *phead, U32 *ptail) + u32 *phead, u32 *ptail) { if ((*phead >= psafe_sqh->MaxSignalSlots) || (*ptail >= psafe_sqh->MaxSignalSlots)) { @@ -398,7 +398,7 @@ safe_sig_queue_validate(pSIGNAL_QUEUE_HEADER psafe_sqh, } /* end safe_sig_queue_validate */ BOOL -visorchannel_signalremove(VISORCHANNEL *channel, U32 queue, void *msg) +visorchannel_signalremove(VISORCHANNEL *channel, u32 queue, void *msg) { BOOL rc = FALSE; SIGNAL_QUEUE_HEADER sig_hdr; @@ -444,7 +444,7 @@ Away: EXPORT_SYMBOL_GPL(visorchannel_signalremove); BOOL -visorchannel_signalinsert(VISORCHANNEL *channel, U32 queue, void *msg) +visorchannel_signalinsert(VISORCHANNEL *channel, u32 queue, void *msg) { BOOL rc = FALSE; SIGNAL_QUEUE_HEADER sig_hdr; @@ -498,11 +498,11 @@ EXPORT_SYMBOL_GPL(visorchannel_signalinsert); int -visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, U32 queue) +visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, u32 queue) { SIGNAL_QUEUE_HEADER sig_hdr; - U32 slots_avail, slots_used; - U32 head, tail; + u32 slots_avail, slots_used; + u32 head, tail; if (!sig_read_header(channel, queue, &sig_hdr)) return 0; @@ -517,7 +517,7 @@ visorchannel_signalqueue_slots_avail(VISORCHANNEL *channel, U32 queue) EXPORT_SYMBOL_GPL(visorchannel_signalqueue_slots_avail); int -visorchannel_signalqueue_max_slots(VISORCHANNEL *channel, U32 queue) +visorchannel_signalqueue_max_slots(VISORCHANNEL *channel, u32 queue) { SIGNAL_QUEUE_HEADER sig_hdr; if (!sig_read_header(channel, queue, &sig_hdr)) @@ -552,7 +552,7 @@ sigqueue_debug(SIGNAL_QUEUE_HEADER *q, int which, struct seq_file *seq) void visorchannel_debug(VISORCHANNEL *channel, int nQueues, - struct seq_file *seq, U32 off) + struct seq_file *seq, u32 off) { HOSTADDRESS addr = 0; ulong nbytes = 0, nbytes_region = 0; diff --git a/drivers/staging/unisys/visorchipset/parser.c b/drivers/staging/unisys/visorchipset/parser.c index 4274dd2dbbd1..0b1bff7aa017 100644 --- a/drivers/staging/unisys/visorchipset/parser.c +++ b/drivers/staging/unisys/visorchipset/parser.c @@ -41,7 +41,7 @@ struct PARSER_CONTEXT_Tag { }; static PARSER_CONTEXT * -parser_init_guts(U64 addr, U32 bytes, BOOL isLocal, +parser_init_guts(U64 addr, u32 bytes, BOOL isLocal, BOOL hasStandardPayloadHeader, BOOL *tryAgain) { int allocbytes = sizeof(PARSER_CONTEXT) + bytes; @@ -152,7 +152,7 @@ Away: } PARSER_CONTEXT * -parser_init(U64 addr, U32 bytes, BOOL isLocal, BOOL *tryAgain) +parser_init(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) { return parser_init_guts(addr, bytes, isLocal, TRUE, tryAgain); } @@ -163,7 +163,7 @@ parser_init(U64 addr, U32 bytes, BOOL isLocal, BOOL *tryAgain) * parser_byteStream_get() to obtain the data. */ PARSER_CONTEXT * -parser_init_byteStream(U64 addr, U32 bytes, BOOL isLocal, BOOL *tryAgain) +parser_init_byteStream(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) { return parser_init_guts(addr, bytes, isLocal, FALSE, tryAgain); } diff --git a/drivers/staging/unisys/visorchipset/parser.h b/drivers/staging/unisys/visorchipset/parser.h index be85fd68c0c4..30bc9a1df84c 100644 --- a/drivers/staging/unisys/visorchipset/parser.h +++ b/drivers/staging/unisys/visorchipset/parser.h @@ -33,8 +33,8 @@ typedef enum { typedef struct PARSER_CONTEXT_Tag PARSER_CONTEXT; -PARSER_CONTEXT *parser_init(U64 addr, U32 bytes, BOOL isLocal, BOOL *tryAgain); -PARSER_CONTEXT *parser_init_byteStream(U64 addr, U32 bytes, BOOL isLocal, +PARSER_CONTEXT *parser_init(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain); +PARSER_CONTEXT *parser_init_byteStream(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain); void parser_param_start(PARSER_CONTEXT *ctx, PARSER_WHICH_STRING which_string); void *parser_param_get(PARSER_CONTEXT *ctx, char *nam, int namesize); diff --git a/drivers/staging/unisys/visorchipset/visorchipset.h b/drivers/staging/unisys/visorchipset/visorchipset.h index ef2bc23c4e88..954040c95780 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset.h +++ b/drivers/staging/unisys/visorchipset/visorchipset.h @@ -32,10 +32,10 @@ * been received for a bus or device. */ typedef struct { - U32 created:1; - U32 attached:1; - U32 configured:1; - U32 running:1; + u32 created:1; + u32 attached:1; + u32 configured:1; + u32 running:1; /* Add new fields above. */ /* Remaining bits in this 32-bit word are unused. */ } VISORCHIPSET_STATE; @@ -77,15 +77,15 @@ typedef struct { */ typedef struct { struct list_head entry; - U32 busNo; - U32 devNo; + u32 busNo; + u32 devNo; uuid_le devInstGuid; VISORCHIPSET_STATE state; VISORCHIPSET_CHANNEL_INFO chanInfo; - U32 Reserved1; /* CONTROLVM_ID */ + u32 Reserved1; /* CONTROLVM_ID */ U64 Reserved2; - U32 switchNo; /* when devState.attached==1 */ - U32 internalPortNo; /* when devState.attached==1 */ + u32 switchNo; /* when devState.attached==1 */ + u32 internalPortNo; /* when devState.attached==1 */ CONTROLVM_MESSAGE_HEADER pendingMsgHdr; /* CONTROLVM_MESSAGE */ /** For private use by the bus driver */ void *bus_driver_context; @@ -93,7 +93,7 @@ typedef struct { } VISORCHIPSET_DEVICE_INFO; static inline VISORCHIPSET_DEVICE_INFO * -finddevice(struct list_head *list, U32 busNo, U32 devNo) +finddevice(struct list_head *list, u32 busNo, u32 devNo) { VISORCHIPSET_DEVICE_INFO *p; @@ -104,7 +104,7 @@ finddevice(struct list_head *list, U32 busNo, U32 devNo) return NULL; } -static inline void delbusdevices(struct list_head *list, U32 busNo) +static inline void delbusdevices(struct list_head *list, u32 busNo) { VISORCHIPSET_DEVICE_INFO *p, *tmp; @@ -124,7 +124,7 @@ static inline void delbusdevices(struct list_head *list, U32 busNo) */ typedef struct { struct list_head entry; - U32 busNo; + u32 busNo; VISORCHIPSET_STATE state; VISORCHIPSET_CHANNEL_INFO chanInfo; uuid_le partitionGuid; @@ -132,10 +132,10 @@ typedef struct { u8 *name; /* UTF8 */ u8 *description; /* UTF8 */ U64 Reserved1; - U32 Reserved2; + u32 Reserved2; MYPROCOBJECT *procObject; struct { - U32 server:1; + u32 server:1; /* Add new fields above. */ /* Remaining bits in this 32-bit word are unused. */ } flags; @@ -147,7 +147,7 @@ typedef struct { } VISORCHIPSET_BUS_INFO; static inline VISORCHIPSET_BUS_INFO * -findbus(struct list_head *list, U32 busNo) +findbus(struct list_head *list, u32 busNo) { VISORCHIPSET_BUS_INFO *p; @@ -161,7 +161,7 @@ findbus(struct list_head *list, U32 busNo) /** Attributes for a particular Supervisor switch. */ typedef struct { - U32 switchNo; + u32 switchNo; VISORCHIPSET_STATE state; uuid_le switchTypeGuid; u8 *authService1; @@ -169,7 +169,7 @@ typedef struct { u8 *authService3; u8 *securityContext; U64 Reserved; - U32 Reserved2; /* CONTROLVM_ID */ + u32 Reserved2; /* CONTROLVM_ID */ struct device dev; BOOL dev_exists; CONTROLVM_MESSAGE_HEADER pendingMsgHdr; @@ -180,8 +180,8 @@ typedef struct { * to a specific switch. */ typedef struct { - U32 switchNo; - U32 externalPortNo; + u32 switchNo; + u32 externalPortNo; VISORCHIPSET_STATE state; uuid_le networkZoneGuid; int pdPort; @@ -192,7 +192,7 @@ typedef struct { u8 *ipGateway; u8 *ipDNS; U64 Reserved1; - U32 Reserved2; /* CONTROLVM_ID */ + u32 Reserved2; /* CONTROLVM_ID */ struct device dev; BOOL dev_exists; CONTROLVM_MESSAGE_HEADER pendingMsgHdr; @@ -203,13 +203,13 @@ typedef struct { * device connects to a particular switch. */ typedef struct { - U32 switchNo; - U32 internalPortNo; + u32 switchNo; + u32 internalPortNo; VISORCHIPSET_STATE state; - U32 busNo; /* valid only when state.attached == 1 */ - U32 devNo; /* valid only when state.attached == 1 */ + u32 busNo; /* valid only when state.attached == 1 */ + u32 devNo; /* valid only when state.attached == 1 */ U64 Reserved1; - U32 Reserved2; /* CONTROLVM_ID */ + u32 Reserved2; /* CONTROLVM_ID */ CONTROLVM_MESSAGE_HEADER pendingMsgHdr; MYPROCOBJECT *procObject; diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index e9e15535e749..c139f0a03ffc 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -107,7 +107,7 @@ typedef struct { u8 __iomem *ptr; /* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm * channel to beginning of payload * pool */ - U32 bytes; /* number of bytes in payload pool */ + u32 bytes; /* number of bytes in payload pool */ } CONTROLVM_PAYLOAD_INFO; /* Manages the request payload in the controlvm channel */ @@ -695,7 +695,7 @@ controlvm_init_response(CONTROLVM_MESSAGE *msg, msg->hdr.PayloadMaxBytes = 0; if (response < 0) { msg->hdr.Flags.failed = 1; - msg->hdr.CompletionStatus = (U32) (-response); + msg->hdr.CompletionStatus = (u32) (-response); } } @@ -756,7 +756,7 @@ controlvm_respond_physdev_changestate(CONTROLVM_MESSAGE_HEADER *msgHdr, void visorchipset_save_message(CONTROLVM_MESSAGE *msg, CRASH_OBJ_TYPE type) { - U32 localSavedCrashMsgOffset; + u32 localSavedCrashMsgOffset; u16 localSavedCrashMsgCount; /* get saved message count */ @@ -783,7 +783,7 @@ visorchipset_save_message(CONTROLVM_MESSAGE *msg, CRASH_OBJ_TYPE type) if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, SavedCrashMsgOffset), - &localSavedCrashMsgOffset, sizeof(U32)) < 0) { + &localSavedCrashMsgOffset, sizeof(u32)) < 0) { LOGERR("failed to get Saved Message Offset"); POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_SEVERITY_ERR); @@ -840,7 +840,7 @@ bus_responder(CONTROLVM_ID cmdId, ulong busNo, int response) LOGERR("bus_responder no pending msg"); return; /* no controlvm response needed */ } - if (p->pendingMsgHdr.Id != (U32) cmdId) { + if (p->pendingMsgHdr.Id != (u32) cmdId) { LOGERR("expected=%d, found=%d", cmdId, p->pendingMsgHdr.Id); return; } @@ -911,7 +911,7 @@ device_responder(CONTROLVM_ID cmdId, ulong busNo, ulong devNo, int response) LOGERR("device_responder no pending msg"); return; /* no controlvm response needed */ } - if (p->pendingMsgHdr.Id != (U32) cmdId) { + if (p->pendingMsgHdr.Id != (u32) cmdId) { LOGERR("expected=%d, found=%d", cmdId, p->pendingMsgHdr.Id); return; } @@ -922,8 +922,8 @@ device_responder(CONTROLVM_ID cmdId, ulong busNo, ulong devNo, int response) } static void -bus_epilog(U32 busNo, - U32 cmd, CONTROLVM_MESSAGE_HEADER *msgHdr, +bus_epilog(u32 busNo, + u32 cmd, CONTROLVM_MESSAGE_HEADER *msgHdr, int response, BOOL needResponse) { BOOL notified = FALSE; @@ -989,7 +989,7 @@ bus_epilog(U32 busNo, } static void -device_epilog(U32 busNo, U32 devNo, ULTRA_SEGMENT_STATE state, U32 cmd, +device_epilog(u32 busNo, u32 devNo, ULTRA_SEGMENT_STATE state, u32 cmd, CONTROLVM_MESSAGE_HEADER *msgHdr, int response, BOOL needResponse, BOOL for_visorbus) { @@ -1366,7 +1366,7 @@ Away: * for failure. */ static int -initialize_controlvm_payload_info(HOSTADDRESS phys_addr, U64 offset, U32 bytes, +initialize_controlvm_payload_info(HOSTADDRESS phys_addr, U64 offset, u32 bytes, CONTROLVM_PAYLOAD_INFO *info) { u8 __iomem *payload = NULL; @@ -1424,7 +1424,7 @@ initialize_controlvm_payload(void) { HOSTADDRESS phys_addr = visorchannel_get_physaddr(ControlVm_channel); U64 payloadOffset = 0; - U32 payloadBytes = 0; + u32 payloadBytes = 0; if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, RequestPayloadOffset), @@ -1764,7 +1764,7 @@ handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) { CONTROLVM_MESSAGE_PACKET *cmd = &inmsg.cmd; U64 parametersAddr = 0; - U32 parametersBytes = 0; + u32 parametersBytes = 0; PARSER_CONTEXT *parser_ctx = NULL; BOOL isLocalAddr = FALSE; CONTROLVM_MESSAGE ackmsg; @@ -1900,7 +1900,7 @@ handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) HOSTADDRESS controlvm_get_channel_address(void) { U64 addr = 0; - U32 size = 0; + u32 size = 0; if (!VMCALL_SUCCESSFUL(Issue_VMCALL_IO_CONTROLVM_ADDR(&addr, &size))) { ERRDRV("%s - vmcall to determine controlvm channel addr failed", @@ -2027,7 +2027,7 @@ setup_crash_devices_work_queue(struct work_struct *work) CONTROLVM_MESSAGE localCrashCreateBusMsg; CONTROLVM_MESSAGE localCrashCreateDevMsg; CONTROLVM_MESSAGE msg; - U32 localSavedCrashMsgOffset; + u32 localSavedCrashMsgOffset; u16 localSavedCrashMsgCount; /* make sure visorbus server is registered for controlvm callbacks */ @@ -2073,7 +2073,7 @@ setup_crash_devices_work_queue(struct work_struct *work) if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, SavedCrashMsgOffset), - &localSavedCrashMsgOffset, sizeof(U32)) < 0) { + &localSavedCrashMsgOffset, sizeof(u32)) < 0) { LOGERR("failed to get Saved Message Offset"); POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_SEVERITY_ERR); -- cgit From 5fc0229ae5e68b8b20552b3b1944255583476c35 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:51 -0400 Subject: staging: unisys: remove U64 type This patch switches all use of the U64 typedef to use the kernel's u64 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- .../unisys/common-spar/include/channels/channel.h | 42 ++++++++++----------- .../include/channels/controlframework.h | 2 +- .../include/channels/controlvmchannel.h | 44 +++++++++++----------- .../common-spar/include/channels/diagchannel.h | 2 +- .../common-spar/include/channels/iochannel.h | 12 +++--- .../unisys/common-spar/include/vmcallinterface.h | 8 ++-- drivers/staging/unisys/include/commontypes.h | 9 ++--- drivers/staging/unisys/include/guestlinuxdebug.h | 14 +++---- drivers/staging/unisys/include/uisqueue.h | 30 +++++++-------- drivers/staging/unisys/include/uisutils.h | 44 +++++++++++----------- drivers/staging/unisys/uislib/uislib.c | 12 +++--- drivers/staging/unisys/uislib/uisqueue.c | 4 +- drivers/staging/unisys/uislib/uisutils.c | 4 +- drivers/staging/unisys/virthba/virthba.c | 22 +++++------ drivers/staging/unisys/visorchannel/visorchannel.h | 4 +- drivers/staging/unisys/visorchipset/parser.c | 6 +-- drivers/staging/unisys/visorchipset/parser.h | 4 +- drivers/staging/unisys/visorchipset/visorchipset.h | 16 ++++---- .../unisys/visorchipset/visorchipset_main.c | 12 +++--- 19 files changed, 145 insertions(+), 146 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index f18da904b708..99533cfaf3df 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -36,7 +36,7 @@ #define SIGNATURE_32(A, B, C, D) \ (SIGNATURE_16(A, B) | (SIGNATURE_16(C, D) << 16)) #define SIGNATURE_64(A, B, C, D, E, F, G, H) \ - (SIGNATURE_32(A, B, C, D) | ((U64)(SIGNATURE_32(E, F, G, H)) << 32)) + (SIGNATURE_32(A, B, C, D) | ((u64)(SIGNATURE_32(E, F, G, H)) << 32)) #ifndef lengthof #define lengthof(TYPE, MEMBER) (sizeof(((TYPE *)0)->MEMBER)) @@ -209,16 +209,16 @@ ULTRA_CHANNELCLI_STRING(u32 v) #pragma pack(push, 1) /* both GCC and VC now allow this pragma */ /* Common Channel Header */ typedef struct _CHANNEL_HEADER { - U64 Signature; /* Signature */ + u64 Signature; /* Signature */ u32 LegacyState; /* DEPRECATED - being replaced by */ /* / SrvState, CliStateBoot, and CliStateOS below */ u32 HeaderSize; /* sizeof(CHANNEL_HEADER) */ - U64 Size; /* Total size of this channel in bytes */ - U64 Features; /* Flags to modify behavior */ + u64 Size; /* Total size of this channel in bytes */ + u64 Features; /* Flags to modify behavior */ uuid_le Type; /* Channel type: data, bus, control, etc. */ - U64 PartitionHandle; /* ID of guest partition */ - U64 Handle; /* Device number of this channel in client */ - U64 oChannelSpace; /* Offset in bytes to channel specific area */ + u64 PartitionHandle; /* ID of guest partition */ + u64 Handle; /* Device number of this channel in client */ + u64 oChannelSpace; /* Offset in bytes to channel specific area */ u32 VersionId; /* CHANNEL_HEADER Version ID */ u32 PartitionIndex; /* Index of guest partition */ uuid_le ZoneGuid; /* Guid of Channel's zone */ @@ -255,11 +255,11 @@ typedef struct _SIGNAL_QUEUE_HEADER { /* 1st cache line */ u32 VersionId; /* SIGNAL_QUEUE_HEADER Version ID */ u32 Type; /* Queue type: storage, network */ - U64 Size; /* Total size of this queue in bytes */ - U64 oSignalBase; /* Offset to signal queue area */ - U64 FeatureFlags; /* Flags to modify behavior */ - U64 NumSignalsSent; /* Total # of signals placed in this queue */ - U64 NumOverflows; /* Total # of inserts failed due to + u64 Size; /* Total size of this queue in bytes */ + u64 oSignalBase; /* Offset to signal queue area */ + u64 FeatureFlags; /* Flags to modify behavior */ + u64 NumSignalsSent; /* Total # of signals placed in this queue */ + u64 NumOverflows; /* Total # of inserts failed due to * full queue */ u32 SignalSize; /* Total size of a signal for this queue */ u32 MaxSignalSlots; /* Max # of slots in queue, 1 slot is @@ -268,16 +268,16 @@ typedef struct _SIGNAL_QUEUE_HEADER { * (MaxSignalSlots-1) */ u32 Head; /* Queue head signal # */ /* 2nd cache line */ - U64 NumSignalsReceived; /* Total # of signals removed from this queue */ + u64 NumSignalsReceived; /* Total # of signals removed from this queue */ u32 Tail; /* Queue tail signal # (on separate * cache line) */ u32 Reserved1; /* Reserved field */ - U64 Reserved2; /* Resrved field */ - U64 ClientQueue; - U64 NumInterruptsReceived; /* Total # of Interrupts received. This + u64 Reserved2; /* Resrved field */ + u64 ClientQueue; + u64 NumInterruptsReceived; /* Total # of Interrupts received. This * is incremented by the ISR in the * guest windows driver */ - U64 NumEmptyCnt; /* Number of times that visor_signal_remove + u64 NumEmptyCnt; /* Number of times that visor_signal_remove * is called and returned Empty * Status. */ u32 ErrorFlags; /* Error bits set during SignalReinit @@ -311,9 +311,9 @@ static inline int ULTRA_check_channel_client(void __iomem *pChannel, uuid_le expectedTypeGuid, char *channelName, - U64 expectedMinBytes, + u64 expectedMinBytes, u32 expectedVersionId, - U64 expectedSignature, + u64 expectedSignature, char *fileName, int lineNumber, void *logCtx) { if (uuid_le_cmp(expectedTypeGuid, NULL_UUID_LE) != 0) @@ -373,8 +373,8 @@ ULTRA_check_channel_client(void __iomem *pChannel, static inline int ULTRA_check_channel_server(uuid_le typeGuid, char *channelName, - U64 expectedMinBytes, - U64 actualBytes, + u64 expectedMinBytes, + u64 actualBytes, char *fileName, int lineNumber, void *logCtx) { if (expectedMinBytes > 0) /* caller wants us to verify diff --git a/drivers/staging/unisys/common-spar/include/channels/controlframework.h b/drivers/staging/unisys/common-spar/include/channels/controlframework.h index a6c1ac2b40aa..b0a49e0c37a2 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlframework.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlframework.h @@ -64,7 +64,7 @@ static const ULTRA_SEGMENT_STATE SegmentStateStandby = { 1, 1, 0, 0, 1, 1, 1, 0 }; typedef union { - U64 Full; + u64 Full; struct { u8 Major; /* will be 1 for the first release and * increment thereafter */ diff --git a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h index ba2edd05c861..153f57ce908f 100644 --- a/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h @@ -126,13 +126,13 @@ struct InterruptInfo { * interrupt. Currently this is used by IOPart-SP to wake * up GP when Data Channel transitions from empty to * non-empty.*/ - U64 sendInterruptHandle; + u64 sendInterruptHandle; /**< specifies interrupt handle. It is used to retrieve the * corresponding interrupt pin from Monitor; and the * interrupt pin is used to connect to the corresponding * intrrupt. Used by IOPart-GP only. */ - U64 recvInterruptHandle; + u64 recvInterruptHandle; /**< specifies interrupt vector. It, interrupt pin, and shared are * used to connect to the corresponding interrupt. Used by @@ -218,10 +218,10 @@ typedef enum _ULTRA_TOOL_ACTIONS { } ULTRA_TOOL_ACTIONS; typedef struct _ULTRA_EFI_SPAR_INDICATION { - U64 BootToFirmwareUI:1; /* Bit 0: Stop in uefi ui */ - U64 ClearNvram:1; /* Bit 1: Clear NVRAM */ - U64 ClearCmos:1; /* Bit 2: Clear CMOS */ - U64 BootToTool:1; /* Bit 3: Run install tool */ + u64 BootToFirmwareUI:1; /* Bit 0: Stop in uefi ui */ + u64 ClearNvram:1; /* Bit 1: Clear NVRAM */ + u64 ClearCmos:1; /* Bit 2: Clear CMOS */ + u64 BootToTool:1; /* Bit 3: Run install tool */ /* remaining bits are available */ } ULTRA_EFI_SPAR_INDICATION; @@ -272,10 +272,10 @@ typedef struct _CONTROLVM_MESSAGE_HEADER { /* remaining bits in this 32-bit word are available */ } Flags; u32 Reserved; /* Natural alignment */ - U64 MessageHandle; /* Identifies the particular message instance, + u64 MessageHandle; /* Identifies the particular message instance, * and is used to match particular */ /* request instances with the corresponding response instance. */ - U64 PayloadVmOffset; /* Offset of payload area from start of this + u64 PayloadVmOffset; /* Offset of payload area from start of this * instance of ControlVm segment */ u32 PayloadMaxBytes; /* Maximum bytes allocated in payload * area of ControlVm segment */ @@ -290,10 +290,10 @@ typedef struct _CONTROLVM_PACKET_DEVICE_CREATE { /* Control uses header SegmentIndex field to access bus number... */ u32 devNo; /**< bus-relative (0..n-1) device number */ - U64 channelAddr; /**< Guest physical address of the channel, which + u64 channelAddr; /**< Guest physical address of the channel, which * can be dereferenced by the receiver * of this ControlVm command */ - U64 channelBytes; /**< specifies size of the channel in bytes */ + u64 channelBytes; /**< specifies size of the channel in bytes */ uuid_le dataTypeGuid;/**< specifies format of data in channel */ uuid_le devInstGuid; /**< instance guid for the device */ struct InterruptInfo intr; /**< specifies interrupt information */ @@ -329,11 +329,11 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { /* Control uses header SegmentIndex field to access bus number... */ u32 deviceCount; /*< indicates the max number of * devices on this bus */ - U64 channelAddr; /*< Guest physical address of the + u64 channelAddr; /*< Guest physical address of the * channel, which can be * dereferenced by the receiver * of this ControlVm command */ - U64 channelBytes; /*< size of the channel in bytes */ + u64 channelBytes; /*< size of the channel in bytes */ uuid_le busDataTypeGuid;/*< indicates format of data in bus channel */ uuid_le busInstGuid; /*< instance guid for the bus */ @@ -352,10 +352,10 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { /* Control uses header SegmentIndex field to access bus number... */ u32 reserved1; /* for alignment purposes */ - U64 guestHandle; /* This is used to convert + u64 guestHandle; /* This is used to convert * guest physical address to real * physical address for DMA, for ex. */ - U64 recvBusInterruptHandle;/*< specifies interrupt + u64 recvBusInterruptHandle;/*< specifies interrupt * info. It is used by SP to register * to receive interrupts from the CP. * This interrupt is used for bus @@ -434,11 +434,11 @@ typedef struct _CONTROLVM_MESSAGE_PACKET { /* BEGIN Ack messages */ /* END Ack messages */ - U64 addr; /*< a physical address of something, that + u64 addr; /*< a physical address of something, that * can be dereferenced by the receiver of * this ControlVm command (depends on * command id) */ - U64 handle; /*< a handle of something (depends on + u64 handle; /*< a handle of something (depends on * command id) */ }; } CONTROLVM_MESSAGE_PACKET; @@ -451,10 +451,10 @@ typedef struct _CONTROLVM_MESSAGE { typedef struct _DEVICE_MAP { GUEST_PHYSICAL_ADDRESS DeviceChannelAddress; - U64 DeviceChannelSize; + u64 DeviceChannelSize; u32 CA_Index; u32 Reserved; /* natural alignment */ - U64 Reserved2; /* Align structure on 32-byte boundary */ + u64 Reserved2; /* Align structure on 32-byte boundary */ } DEVICE_MAP; typedef struct _GUEST_DEVICES { @@ -487,8 +487,8 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { * ROM disk */ GUEST_PHYSICAL_ADDRESS gpNvram; /* guest phys addr of NVRAM * channel */ - U64 RequestPayloadOffset; /* Offset to request payload area */ - U64 EventPayloadOffset; /* Offset to event payload area */ + u64 RequestPayloadOffset; /* Offset to request payload area */ + u64 EventPayloadOffset; /* Offset to event payload area */ u32 RequestPayloadBytes; /* Bytes available in request payload * area */ u32 EventPayloadBytes; /* Bytes available in event payload area */ @@ -510,13 +510,13 @@ typedef struct _ULTRA_CONTROLVM_CHANNEL_PROTOCOL { GUEST_PHYSICAL_ADDRESS VirtualGuestFirmwareEntryPoint; /* guest EFI firmware image size */ - U64 VirtualGuestFirmwareImageSize; + u64 VirtualGuestFirmwareImageSize; /* GPA = 1MB where EFI firmware image is copied to */ GUEST_PHYSICAL_ADDRESS VirtualGuestFirmwareBootBase; GUEST_PHYSICAL_ADDRESS VirtualGuestImageBase; GUEST_PHYSICAL_ADDRESS VirtualGuestImageSize; - U64 PrototypeControlChannelOffset; + u64 PrototypeControlChannelOffset; GUEST_PHYSICAL_ADDRESS VirtualGuestPartitionHandle; u16 RestoreAction; /* Restore Action field to restore the guest diff --git a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h index ccced6dd2956..eb2f530e2c8e 100644 --- a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h @@ -167,7 +167,7 @@ typedef struct _DIAG_CHANNEL_EVENT { u16 LogicalProcessorNumber; u8 ComponentType; /* ULTRA_COMPONENT_TYPES */ u8 Subsystem; - u16 Reserved0; /* pad to U64 alignment */ + u16 Reserved0; /* pad to u64 alignment */ u32 BlockNumber; /* filled in by DiagSwitch as pool blocks are * filled */ u32 BlockNumberHigh; diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h index 26457c3c112f..9f2e1e1abaee 100644 --- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h @@ -250,8 +250,8 @@ typedef enum { VDISK_MGMT_ACQUIRE = 1, VDISK_MGMT_RELEASE, #pragma pack(push, 1) struct guest_phys_info { - U64 address; - U64 length; + u64 address; + u64 length; }; #define GPI_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof(struct guest_phys_info)) @@ -529,7 +529,7 @@ struct net_pkt_rcvpost { * to be describable */ struct phys_info frag; /* physical page information for the * single fragment 2K rcv buf */ - U64 UniqueNum; /* This is used to make sure that + u64 UniqueNum; /* This is used to make sure that * receive posts are returned to */ /* the Adapter which sent them origonally. */ }; @@ -545,7 +545,7 @@ struct net_pkt_rcv { * that must be chained; */ /* each entry is a receive buffer provided by NET_RCV_POST. */ /* NOTE: first rcvbuf in the chain will also be provided in net.buf. */ - U64 UniqueNum; + u64 UniqueNum; u32 RcvsDroppedDelta; }; @@ -801,7 +801,7 @@ static inline int ULTRA_VHBA_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, struct vhba_wwnn *wwnn, struct vhba_config_max *max, unsigned char *clientStr, - u32 clientStrLen, U64 bytes) { + u32 clientStrLen, u64 bytes) { MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VHBA_CHANNEL_PROTOCOL_VERSIONID; x->ChannelHeader.Signature = ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE; @@ -837,7 +837,7 @@ static inline int ULTRA_VNIC_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, uuid_le zoneGuid, unsigned char *clientStr, u32 clientStrLen, - U64 bytes) { + u64 bytes) { MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VNIC_CHANNEL_PROTOCOL_VERSIONID; x->ChannelHeader.Signature = ULTRA_VNIC_CHANNEL_PROTOCOL_SIGNATURE; diff --git a/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/drivers/staging/unisys/common-spar/include/vmcallinterface.h index e98616468173..0b5b5626af5a 100644 --- a/drivers/staging/unisys/common-spar/include/vmcallinterface.h +++ b/drivers/staging/unisys/common-spar/include/vmcallinterface.h @@ -100,7 +100,7 @@ do { \ /* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ #pragma pack(push, 1) struct phys_info { - U64 pi_pfn; + u64 pi_pfn; u16 pi_off; u16 pi_len; }; @@ -116,7 +116,7 @@ typedef struct phys_info IO_DATA_STRUCTURE; typedef struct _VMCALL_IO_CONTROLVM_ADDR_PARAMS { /* The Guest-relative physical address of the ControlVm channel. * This VMCall fills this in with the appropriate address. */ - U64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ + u64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ /* the size of the ControlVm channel in bytes This VMCall fills this * in with the appropriate address. */ u32 ChannelBytes; /* contents provided by this VMCALL (OUT) */ @@ -133,7 +133,7 @@ typedef struct _VMCALL_IO_CONTROLVM_ADDR_PARAMS { typedef struct _VMCALL_IO_DIAG_ADDR_PARAMS { /* The Guest-relative physical address of the diagnostic channel. * This VMCall fills this in with the appropriate address. */ - U64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ + u64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ } VMCALL_IO_DIAG_ADDR_PARAMS; #pragma pack(pop) @@ -147,7 +147,7 @@ typedef struct _VMCALL_IO_VISORSERIAL_ADDR_PARAMS { /* The Guest-relative physical address of the serial console * channel. This VMCall fills this in with the appropriate * address. */ - U64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ + u64 ChannelAddress; /* contents provided by this VMCALL (OUT) */ } VMCALL_IO_VISORSERIAL_ADDR_PARAMS; #pragma pack(pop) diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 48da47fcd8d1..2369099c56e2 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define U64 uint64_t #define S8 int8_t #define S16 int16_t #define S32 int32_t @@ -41,7 +40,7 @@ #ifdef CONFIG_X86_32 #define UINTN u32 #else -#define UINTN U64 +#define UINTN u64 #endif #else @@ -50,14 +49,14 @@ #if __WORDSIZE == 32 #define UINTN u32 #elif __WORDSIZE == 64 -#define UINTN U64 +#define UINTN u64 #else #error Unsupported __WORDSIZE #endif #endif -typedef U64 GUEST_PHYSICAL_ADDRESS; +typedef u64 GUEST_PHYSICAL_ADDRESS; #define MEMSET(ptr, val, len) memset(ptr, val, len) #define MEMCMP(m1, m2, len) memcmp(m1, m2, len) @@ -120,7 +119,7 @@ typedef U64 GUEST_PHYSICAL_ADDRESS; fil, lin); \ } while (0) -#define CHANNEL_u32_MISMATCH(chType, chName, field, expected, actual, fil, \ +#define CHANNEL_U32_MISMATCH(chType, chName, field, expected, actual, fil, \ lin, logCtx) \ do { \ syslog(LOG_USER | LOG_ERR, \ diff --git a/drivers/staging/unisys/include/guestlinuxdebug.h b/drivers/staging/unisys/include/guestlinuxdebug.h index b4b479496069..8728e4c7bf6b 100644 --- a/drivers/staging/unisys/include/guestlinuxdebug.h +++ b/drivers/staging/unisys/include/guestlinuxdebug.h @@ -150,19 +150,19 @@ typedef enum { /* POSTCODE event identifier tuples */ #define POSTCODE_LINUX_A(DRIVER_PC, EVENT_PC, pc32bit, severity) \ do { \ unsigned long long post_code_temp; \ - post_code_temp = (((U64)DRIVER_PC) << 56) | (((U64)EVENT_PC) << 44) | \ - ((((U64)__LINE__) & 0xFFF) << 32) | \ - (((U64)pc32bit) & 0xFFFFFFFF); \ + post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \ + ((((u64)__LINE__) & 0xFFF) << 32) | \ + (((u64)pc32bit) & 0xFFFFFFFF); \ ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity); \ } while (0) #define POSTCODE_LINUX_B(DRIVER_PC, EVENT_PC, pc16bit1, pc16bit2, severity) \ do { \ unsigned long long post_code_temp; \ - post_code_temp = (((U64)DRIVER_PC) << 56) | (((U64)EVENT_PC) << 44) | \ - ((((U64)__LINE__) & 0xFFF) << 32) | \ - ((((U64)pc16bit1) & 0xFFFF) << 16) | \ - (((U64)pc16bit2) & 0xFFFF); \ + post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \ + ((((u64)__LINE__) & 0xFFF) << 32) | \ + ((((u64)pc16bit1) & 0xFFFF) << 16) | \ + (((u64)pc16bit2) & 0xFFFF); \ ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity); \ } while (0) diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h index 56cc828858ca..a2abfa8c82fd 100644 --- a/drivers/staging/unisys/include/uisqueue.h +++ b/drivers/staging/unisys/include/uisqueue.h @@ -39,13 +39,13 @@ struct uisqueue_info { /* channel containing queues in which scsi commands & * responses are queued */ - U64 packets_sent; - U64 packets_received; - U64 interrupts_sent; - U64 interrupts_received; - U64 max_not_empty_cnt; - U64 total_wakeup_cnt; - U64 non_empty_wakeup_cnt; + u64 packets_sent; + u64 packets_received; + u64 interrupts_sent; + u64 interrupts_received; + u64 max_not_empty_cnt; + u64 total_wakeup_cnt; + u64 non_empty_wakeup_cnt; struct { SIGNAL_QUEUE_HEADER Reserved1; /* */ @@ -54,7 +54,7 @@ struct uisqueue_info { unsigned int (*send_int_if_needed)(struct uisqueue_info *info, unsigned int whichcqueue, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, + u64 interruptHandle, unsigned char io_termination); }; @@ -84,7 +84,7 @@ unsigned long long uisqueue_InterlockedAnd(unsigned long long __iomem *Target, unsigned int uisqueue_send_int_if_needed(struct uisqueue_info *pqueueinfo, unsigned int whichqueue, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, + u64 interruptHandle, unsigned char io_termination); int uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo, @@ -92,7 +92,7 @@ int uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo, unsigned int queue, void *insertlock, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, + u64 interruptHandle, char oktowait, u8 *channelId); @@ -135,8 +135,8 @@ struct extport_info { struct device_info { void __iomem *chanptr; - U64 channelAddr; - U64 channelBytes; + u64 channelAddr; + u64 channelBytes; uuid_le channelTypeGuid; uuid_le devInstGuid; struct InterruptInfo intr; @@ -163,7 +163,7 @@ typedef enum { struct bus_info { u32 busNo, deviceCount; struct device_info **device; - U64 guestHandle, recvBusInterruptHandle; + u64 guestHandle, recvBusInterruptHandle; uuid_le busInstGuid; ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *pBusChannel; int busChannelBytes; @@ -229,10 +229,10 @@ typedef enum { struct add_virt_iopart { void *chanptr; /* pointer to data channel */ - U64 guestHandle; /* used to convert guest physical + u64 guestHandle; /* used to convert guest physical * address to real physical address * for DMA, for ex. */ - U64 recvBusInterruptHandle; /* used to register to receive + u64 recvBusInterruptHandle; /* used to register to receive * bus level interrupts. */ struct InterruptInfo intr; /* contains recv & send * interrupt info */ diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h index 947f132f1f0e..26b69379638d 100644 --- a/drivers/staging/unisys/include/uisutils.h +++ b/drivers/staging/unisys/include/uisutils.h @@ -60,7 +60,7 @@ typedef struct ReqHandlerInfo_struct { unsigned long min_channel_bytes; int (*Server_Channel_Ok)(unsigned long channelBytes); int (*Server_Channel_Init) - (void *x, unsigned char *clientStr, u32 clientStrLen, U64 bytes); + (void *x, unsigned char *clientStr, u32 clientStrLen, u64 bytes); char switch_type_name[99]; struct list_head list_link; /* links into ReqHandlerInfo_list */ } ReqHandlerInfo_t; @@ -73,7 +73,7 @@ ReqHandlerInfo_t *ReqHandlerAdd(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - u32 clientStrLen, U64 bytes)); + u32 clientStrLen, u64 bytes)); ReqHandlerInfo_t *ReqHandlerFind(uuid_le switchTypeGuid); int ReqHandlerDel(uuid_le switchTypeGuid); @@ -81,7 +81,7 @@ int ReqHandlerDel(uuid_le switchTypeGuid); dbg_ioremap_cache(addr, size, __FILE__, __LINE__) static inline void __iomem * -dbg_ioremap_cache(U64 addr, unsigned long size, char *file, int line) +dbg_ioremap_cache(u64 addr, unsigned long size, char *file, int line) { void __iomem *new; new = ioremap_cache(addr, size); @@ -91,7 +91,7 @@ dbg_ioremap_cache(U64 addr, unsigned long size, char *file, int line) #define uislib_ioremap(addr, size) dbg_ioremap(addr, size, __FILE__, __LINE__) static inline void * -dbg_ioremap(U64 addr, unsigned long size, char *file, int line) +dbg_ioremap(u64 addr, unsigned long size, char *file, int line) { void *new; new = ioremap(addr, size); @@ -121,7 +121,7 @@ int uisctrl_register_req_handler_ex(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - u32 clientStrLen, U64 bytes), + u32 clientStrLen, u64 bytes), ULTRA_VBUS_DEVICEINFO *chipset_DriverInfo); int uisctrl_unregister_req_handler_ex(uuid_le switchTypeGuid); @@ -135,25 +135,25 @@ int uislib_server_inject_add_vnic(u32 switchNo, u32 BusNo, u32 numIntPorts, void uislib_server_inject_del_vnic(u32 switchNo, u32 busNo, u32 numIntPorts, u32 numExtPorts); int uislib_client_inject_add_bus(u32 busNo, uuid_le instGuid, - U64 channelAddr, ulong nChannelBytes); + u64 channelAddr, ulong nChannelBytes); int uislib_client_inject_del_bus(u32 busNo); int uislib_client_inject_add_vhba(u32 busNo, u32 devNo, - U64 phys_chan_addr, u32 chan_bytes, + u64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr); int uislib_client_inject_pause_vhba(u32 busNo, u32 devNo); int uislib_client_inject_resume_vhba(u32 busNo, u32 devNo); int uislib_client_inject_del_vhba(u32 busNo, u32 devNo); int uislib_client_inject_add_vnic(u32 busNo, u32 devNo, - U64 phys_chan_addr, u32 chan_bytes, + u64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr); int uislib_client_inject_pause_vnic(u32 busNo, u32 devNo); int uislib_client_inject_resume_vnic(u32 busNo, u32 devNo); int uislib_client_inject_del_vnic(u32 busNo, u32 devNo); #ifdef STORAGE_CHANNEL -U64 uislib_storage_channel(int client_id); +u64 uislib_storage_channel(int client_id); #endif int uislib_get_owned_pdest(struct uisscsi_dest *pdest); @@ -220,11 +220,11 @@ unsigned int uisutil_copy_fragsinfo_from_skb(unsigned char *calling_ctx, struct phys_info frags[]); static inline unsigned int -Issue_VMCALL_IO_CONTROLVM_ADDR(U64 *ControlAddress, u32 *ControlBytes) +Issue_VMCALL_IO_CONTROLVM_ADDR(u64 *ControlAddress, u32 *ControlBytes) { VMCALL_IO_CONTROLVM_ADDR_PARAMS params; int result = VMCALL_SUCCESS; - U64 physaddr; + u64 physaddr; physaddr = virt_to_phys(¶ms); ISSUE_IO_VMCALL(VMCALL_IO_CONTROLVM_ADDR, physaddr, result); @@ -235,11 +235,11 @@ Issue_VMCALL_IO_CONTROLVM_ADDR(U64 *ControlAddress, u32 *ControlBytes) return result; } -static inline unsigned int Issue_VMCALL_IO_DIAG_ADDR(U64 *DiagChannelAddress) +static inline unsigned int Issue_VMCALL_IO_DIAG_ADDR(u64 *DiagChannelAddress) { VMCALL_IO_DIAG_ADDR_PARAMS params; int result = VMCALL_SUCCESS; - U64 physaddr; + u64 physaddr; physaddr = virt_to_phys(¶ms); ISSUE_IO_VMCALL(VMCALL_IO_DIAG_ADDR, physaddr, result); @@ -249,11 +249,11 @@ static inline unsigned int Issue_VMCALL_IO_DIAG_ADDR(U64 *DiagChannelAddress) } static inline unsigned int -Issue_VMCALL_IO_VISORSERIAL_ADDR(U64 *DiagChannelAddress) +Issue_VMCALL_IO_VISORSERIAL_ADDR(u64 *DiagChannelAddress) { VMCALL_IO_VISORSERIAL_ADDR_PARAMS params; int result = VMCALL_SUCCESS; - U64 physaddr; + u64 physaddr; physaddr = virt_to_phys(¶ms); ISSUE_IO_VMCALL(VMCALL_IO_VISORSERIAL_ADDR, physaddr, result); @@ -264,8 +264,8 @@ Issue_VMCALL_IO_VISORSERIAL_ADDR(U64 *DiagChannelAddress) static inline S64 Issue_VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET(void) { - U64 result = VMCALL_SUCCESS; - U64 physaddr = 0; + u64 result = VMCALL_SUCCESS; + u64 physaddr = 0; ISSUE_IO_VMCALL(VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET, physaddr, result); @@ -274,8 +274,8 @@ static inline S64 Issue_VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET(void) static inline S64 Issue_VMCALL_MEASUREMENT_DO_NOTHING(void) { - U64 result = VMCALL_SUCCESS; - U64 physaddr = 0; + u64 result = VMCALL_SUCCESS; + u64 physaddr = 0; ISSUE_IO_VMCALL(VMCALL_MEASUREMENT_DO_NOTHING, physaddr, result); return result; @@ -289,7 +289,7 @@ struct log_info_t { unsigned long long min_delta[64]; }; -static inline int Issue_VMCALL_UPDATE_PHYSICAL_TIME(U64 adjustment) +static inline int Issue_VMCALL_UPDATE_PHYSICAL_TIME(u64 adjustment) { int result = VMCALL_SUCCESS; @@ -304,7 +304,7 @@ Issue_VMCALL_CHANNEL_MISMATCH(const char *ChannelName, { VMCALL_CHANNEL_VERSION_MISMATCH_PARAMS params; int result = VMCALL_SUCCESS; - U64 physaddr; + u64 physaddr; char *last_slash = NULL; strlcpy(params.ChannelName, ChannelName, @@ -333,7 +333,7 @@ Issue_VMCALL_CHANNEL_MISMATCH(const char *ChannelName, static inline unsigned int Issue_VMCALL_FATAL_BYE_BYE(void) { int result = VMCALL_SUCCESS; - U64 physaddr = 0; + u64 physaddr = 0; ISSUE_IO_VMCALL(VMCALL_GENERIC_SURRENDER_QUANTUM_FOREVER, physaddr, result); diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index 4e2777ef405b..63c91cd6fdcc 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -74,7 +74,7 @@ static struct bus_info *BusListHead; static rwlock_t BusListLock; static int BusListCount; /* number of buses in the list */ static int MaxBusCount; /* maximum number of buses expected */ -static U64 PhysicalDataChan; +static u64 PhysicalDataChan; static int PlatformNumber; static struct uisthread_info Incoming_ThreadInfo; @@ -129,7 +129,7 @@ init_msg_header(CONTROLVM_MESSAGE *msg, u32 id, uint rsp, uint svr) } static __iomem void * -init_vbus_channel(U64 channelAddr, u32 channelBytes) +init_vbus_channel(u64 channelAddr, u32 channelBytes) { void __iomem *rc = NULL; void __iomem *pChan = uislib_ioremap_cache(channelAddr, channelBytes); @@ -343,7 +343,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf) struct bus_info *bus; u32 busNo, devNo; int result = CONTROLVM_RESP_SUCCESS; - U64 minSize = MIN_IO_CHANNEL_SIZE; + u64 minSize = MIN_IO_CHANNEL_SIZE; ReqHandlerInfo_t *pReqHandler; busNo = msg->cmd.createDevice.busNo; @@ -822,7 +822,7 @@ delete_device_glue(u32 busNo, u32 devNo) int uislib_client_inject_add_bus(u32 busNo, uuid_le instGuid, - U64 channelAddr, ulong nChannelBytes) + u64 channelAddr, ulong nChannelBytes) { CONTROLVM_MESSAGE msg; @@ -921,7 +921,7 @@ EXPORT_SYMBOL_GPL(uislib_client_inject_resume_vhba); int uislib_client_inject_add_vhba(u32 busNo, u32 devNo, - U64 phys_chan_addr, u32 chan_bytes, + u64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr) { @@ -980,7 +980,7 @@ EXPORT_SYMBOL_GPL(uislib_client_inject_del_vhba); int uislib_client_inject_add_vnic(u32 busNo, u32 devNo, - U64 phys_chan_addr, u32 chan_bytes, + u64 phys_chan_addr, u32 chan_bytes, int is_test_addr, uuid_le instGuid, struct InterruptInfo *intr) { diff --git a/drivers/staging/unisys/uislib/uisqueue.c b/drivers/staging/unisys/uislib/uisqueue.c index 12edf605f19c..84eafca5e45c 100644 --- a/drivers/staging/unisys/uislib/uisqueue.c +++ b/drivers/staging/unisys/uislib/uisqueue.c @@ -77,7 +77,7 @@ do_locked_client_insert(struct uisqueue_info *queueinfo, void *pSignal, spinlock_t *lock, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, u8 *channelId) + u64 interruptHandle, u8 *channelId) { unsigned long flags; unsigned char queueWasEmpty; @@ -124,7 +124,7 @@ uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo, unsigned int whichqueue, void *insertlock, unsigned char issueInterruptIfEmpty, - U64 interruptHandle, + u64 interruptHandle, char oktowait, u8 *channelId) { while (!do_locked_client_insert(queueinfo, whichqueue, cmdrsp, diff --git a/drivers/staging/unisys/uislib/uisutils.c b/drivers/staging/unisys/uislib/uisutils.c index c30057b25d13..ee26e009b400 100644 --- a/drivers/staging/unisys/uislib/uisutils.c +++ b/drivers/staging/unisys/uislib/uisutils.c @@ -112,7 +112,7 @@ uisctrl_register_req_handler_ex(uuid_le switchTypeGuid, channelBytes), int (*Server_Channel_Init) (void *x, unsigned char *clientStr, - u32 clientStrLen, U64 bytes), + u32 clientStrLen, u64 bytes), ULTRA_VBUS_DEVICEINFO *chipset_DriverInfo) { ReqHandlerInfo_t *pReqHandlerInfo; @@ -279,7 +279,7 @@ ReqHandlerAdd(uuid_le switchTypeGuid, unsigned long min_channel_bytes, int (*Server_Channel_Ok)(unsigned long channelBytes), int (*Server_Channel_Init) - (void *x, unsigned char *clientStr, u32 clientStrLen, U64 bytes)) + (void *x, unsigned char *clientStr, u32 clientStrLen, u64 bytes)) { ReqHandlerInfo_t *rc = NULL; diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c index b59c1bab9189..049eeab08bac 100644 --- a/drivers/staging/unisys/virthba/virthba.c +++ b/drivers/staging/unisys/virthba/virthba.c @@ -188,7 +188,7 @@ struct virthba_info { unsigned long long interrupts_notme; unsigned long long interrupts_disabled; struct work_struct serverdown_completion; - U64 __iomem *flags_addr; + u64 __iomem *flags_addr; atomic_t interrupt_rcvd; wait_queue_head_t rsp_queue; struct virtdisk_info head; @@ -422,7 +422,7 @@ virthba_ISR(int irq, void *dev_id) struct virthba_info *virthbainfo = (struct virthba_info *) dev_id; CHANNEL_HEADER __iomem *pChannelHeader; SIGNAL_QUEUE_HEADER __iomem *pqhdr; - U64 mask; + u64 mask; unsigned long long rc1; if (virthbainfo == NULL) @@ -463,7 +463,7 @@ virthba_probe(struct virtpci_dev *virtpcidev, const struct pci_device_id *id) irq_handler_t handler = virthba_ISR; CHANNEL_HEADER __iomem *pChannelHeader; SIGNAL_QUEUE_HEADER __iomem *pqhdr; - U64 mask; + u64 mask; LOGVER("entering virthba_probe...\n"); LOGVER("virtpcidev busNo<<%d>>devNo<<%d>>", virtpcidev->busNo, @@ -621,7 +621,7 @@ virthba_probe(struct virtpci_dev *virtpcidev, const struct pci_device_id *id) virthbainfo->interrupt_vector = -1; POSTCODE_LINUX_2(VHBA_PROBE_FAILURE_PC, POSTCODE_SEVERITY_ERR); } else { - U64 __iomem *Features_addr = + u64 __iomem *Features_addr = &virthbainfo->chinfo.queueinfo->chan->Features; LOGERR("request_irq(%d) uislib_virthba_ISR request succeeded\n", virthbainfo->interrupt_vector); @@ -723,7 +723,7 @@ forward_vdiskmgmt_command(VDISK_MGMT_TYPES vdiskcmdtype, uisqueue_put_cmdrsp_with_lock_client(virthbainfo->chinfo.queueinfo, cmdrsp, IOCHAN_TO_IOPART, &virthbainfo->chinfo.insertlock, - DONT_ISSUE_INTERRUPT, (U64) NULL, + DONT_ISSUE_INTERRUPT, (u64) NULL, OK_TO_WAIT, "vhba"); LOGINF("VdiskMgmt waiting on event notifyevent=0x%p\n", cmdrsp->scsitaskmgmt.notify); @@ -784,7 +784,7 @@ forward_taskmgmt_command(TASK_MGMT_TYPES tasktype, struct scsi_device *scsidev) uisqueue_put_cmdrsp_with_lock_client(virthbainfo->chinfo.queueinfo, cmdrsp, IOCHAN_TO_IOPART, &virthbainfo->chinfo.insertlock, - DONT_ISSUE_INTERRUPT, (U64) NULL, + DONT_ISSUE_INTERRUPT, (u64) NULL, OK_TO_WAIT, "vhba"); LOGINF("TaskMgmt waiting on event notifyevent=0x%p\n", cmdrsp->scsitaskmgmt.notify); @@ -1022,7 +1022,7 @@ virthba_queue_command_lck(struct scsi_cmnd *scsicmd, &virthbainfo->chinfo. insertlock, DONT_ISSUE_INTERRUPT, - (U64) NULL, DONT_WAIT, "vhba"); + (u64) NULL, DONT_WAIT, "vhba"); if (i == 0) { /* queue must be full - and we said don't wait - return busy */ LOGERR("uisqueue_put_cmdrsp_with_lock ****FAILED\n"); @@ -1335,7 +1335,7 @@ process_incoming_rsps(void *v) struct chaninfo *dc = &virthbainfo->chinfo; struct uiscmdrsp *cmdrsp = NULL; const int SZ = sizeof(struct uiscmdrsp); - U64 mask; + u64 mask; unsigned long long rc1; UIS_DAEMONIZE("vhba_incoming"); @@ -1374,7 +1374,7 @@ static ssize_t info_debugfs_read(struct file *file, { ssize_t bytes_read = 0; int str_pos = 0; - U64 phys_flags_addr; + u64 phys_flags_addr; int i; struct virthba_info *virthbainfo; char *vbuf; @@ -1428,8 +1428,8 @@ static ssize_t enable_ints_write(struct file *file, int i, new_value; struct virthba_info *virthbainfo; - U64 __iomem *Features_addr; - U64 mask; + u64 __iomem *Features_addr; + u64 mask; if (count >= ARRAY_SIZE(buf)) return -EINVAL; diff --git a/drivers/staging/unisys/visorchannel/visorchannel.h b/drivers/staging/unisys/visorchannel/visorchannel.h index 352bc5458aa2..aa17a842381b 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel.h +++ b/drivers/staging/unisys/visorchannel/visorchannel.h @@ -24,7 +24,7 @@ #include "memregion.h" #include "channel.h" #ifndef HOSTADDRESS -#define HOSTADDRESS U64 +#define HOSTADDRESS u64 #endif #ifndef BOOL #define BOOL int @@ -65,7 +65,7 @@ HOSTADDRESS visorchannel_get_physaddr(VISORCHANNEL *channel); ulong visorchannel_get_nbytes(VISORCHANNEL *channel); char *visorchannel_id(VISORCHANNEL *channel, char *s); char *visorchannel_zoneid(VISORCHANNEL *channel, char *s); -U64 visorchannel_get_clientpartition(VISORCHANNEL *channel); +u64 visorchannel_get_clientpartition(VISORCHANNEL *channel); uuid_le visorchannel_get_uuid(VISORCHANNEL *channel); MEMREGION *visorchannel_get_memregion(VISORCHANNEL *channel); char *visorchannel_uuid_id(uuid_le *guid, char *s); diff --git a/drivers/staging/unisys/visorchipset/parser.c b/drivers/staging/unisys/visorchipset/parser.c index 0b1bff7aa017..86fa2949dc4e 100644 --- a/drivers/staging/unisys/visorchipset/parser.c +++ b/drivers/staging/unisys/visorchipset/parser.c @@ -41,7 +41,7 @@ struct PARSER_CONTEXT_Tag { }; static PARSER_CONTEXT * -parser_init_guts(U64 addr, u32 bytes, BOOL isLocal, +parser_init_guts(u64 addr, u32 bytes, BOOL isLocal, BOOL hasStandardPayloadHeader, BOOL *tryAgain) { int allocbytes = sizeof(PARSER_CONTEXT) + bytes; @@ -152,7 +152,7 @@ Away: } PARSER_CONTEXT * -parser_init(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) +parser_init(u64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) { return parser_init_guts(addr, bytes, isLocal, TRUE, tryAgain); } @@ -163,7 +163,7 @@ parser_init(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) * parser_byteStream_get() to obtain the data. */ PARSER_CONTEXT * -parser_init_byteStream(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) +parser_init_byteStream(u64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain) { return parser_init_guts(addr, bytes, isLocal, FALSE, tryAgain); } diff --git a/drivers/staging/unisys/visorchipset/parser.h b/drivers/staging/unisys/visorchipset/parser.h index 30bc9a1df84c..9fbe3b5b7cc3 100644 --- a/drivers/staging/unisys/visorchipset/parser.h +++ b/drivers/staging/unisys/visorchipset/parser.h @@ -33,8 +33,8 @@ typedef enum { typedef struct PARSER_CONTEXT_Tag PARSER_CONTEXT; -PARSER_CONTEXT *parser_init(U64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain); -PARSER_CONTEXT *parser_init_byteStream(U64 addr, u32 bytes, BOOL isLocal, +PARSER_CONTEXT *parser_init(u64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain); +PARSER_CONTEXT *parser_init_byteStream(u64 addr, u32 bytes, BOOL isLocal, BOOL *tryAgain); void parser_param_start(PARSER_CONTEXT *ctx, PARSER_WHICH_STRING which_string); void *parser_param_get(PARSER_CONTEXT *ctx, char *nam, int namesize); diff --git a/drivers/staging/unisys/visorchipset/visorchipset.h b/drivers/staging/unisys/visorchipset/visorchipset.h index 954040c95780..2bf2e2f368ef 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset.h +++ b/drivers/staging/unisys/visorchipset/visorchipset.h @@ -64,7 +64,7 @@ typedef struct { VISORCHIPSET_ADDRESSTYPE addrType; HOSTADDRESS channelAddr; struct InterruptInfo intr; - U64 nChannelBytes; + u64 nChannelBytes; uuid_le channelTypeGuid; uuid_le channelInstGuid; @@ -83,7 +83,7 @@ typedef struct { VISORCHIPSET_STATE state; VISORCHIPSET_CHANNEL_INFO chanInfo; u32 Reserved1; /* CONTROLVM_ID */ - U64 Reserved2; + u64 Reserved2; u32 switchNo; /* when devState.attached==1 */ u32 internalPortNo; /* when devState.attached==1 */ CONTROLVM_MESSAGE_HEADER pendingMsgHdr; /* CONTROLVM_MESSAGE */ @@ -128,10 +128,10 @@ typedef struct { VISORCHIPSET_STATE state; VISORCHIPSET_CHANNEL_INFO chanInfo; uuid_le partitionGuid; - U64 partitionHandle; + u64 partitionHandle; u8 *name; /* UTF8 */ u8 *description; /* UTF8 */ - U64 Reserved1; + u64 Reserved1; u32 Reserved2; MYPROCOBJECT *procObject; struct { @@ -142,7 +142,7 @@ typedef struct { CONTROLVM_MESSAGE_HEADER pendingMsgHdr; /* CONTROLVM MsgHdr */ /** For private use by the bus driver */ void *bus_driver_context; - U64 devNo; + u64 devNo; } VISORCHIPSET_BUS_INFO; @@ -168,7 +168,7 @@ typedef struct { u8 *authService2; u8 *authService3; u8 *securityContext; - U64 Reserved; + u64 Reserved; u32 Reserved2; /* CONTROLVM_ID */ struct device dev; BOOL dev_exists; @@ -191,7 +191,7 @@ typedef struct { u8 *ipNetwork; u8 *ipGateway; u8 *ipDNS; - U64 Reserved1; + u64 Reserved1; u32 Reserved2; /* CONTROLVM_ID */ struct device dev; BOOL dev_exists; @@ -208,7 +208,7 @@ typedef struct { VISORCHIPSET_STATE state; u32 busNo; /* valid only when state.attached == 1 */ u32 devNo; /* valid only when state.attached == 1 */ - U64 Reserved1; + u64 Reserved1; u32 Reserved2; /* CONTROLVM_ID */ CONTROLVM_MESSAGE_HEADER pendingMsgHdr; MYPROCOBJECT *procObject; diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index c139f0a03ffc..b21a2b1da233 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -105,7 +105,7 @@ static VISORCHANNEL *ControlVm_channel; typedef struct { u8 __iomem *ptr; /* pointer to base address of payload pool */ - U64 offset; /* offset from beginning of controlvm + u64 offset; /* offset from beginning of controlvm * channel to beginning of payload * pool */ u32 bytes; /* number of bytes in payload pool */ } CONTROLVM_PAYLOAD_INFO; @@ -1366,7 +1366,7 @@ Away: * for failure. */ static int -initialize_controlvm_payload_info(HOSTADDRESS phys_addr, U64 offset, u32 bytes, +initialize_controlvm_payload_info(HOSTADDRESS phys_addr, u64 offset, u32 bytes, CONTROLVM_PAYLOAD_INFO *info) { u8 __iomem *payload = NULL; @@ -1423,7 +1423,7 @@ static void initialize_controlvm_payload(void) { HOSTADDRESS phys_addr = visorchannel_get_physaddr(ControlVm_channel); - U64 payloadOffset = 0; + u64 payloadOffset = 0; u32 payloadBytes = 0; if (visorchannel_read(ControlVm_channel, offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL, @@ -1763,7 +1763,7 @@ static BOOL handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) { CONTROLVM_MESSAGE_PACKET *cmd = &inmsg.cmd; - U64 parametersAddr = 0; + u64 parametersAddr = 0; u32 parametersBytes = 0; PARSER_CONTEXT *parser_ctx = NULL; BOOL isLocalAddr = FALSE; @@ -1899,7 +1899,7 @@ handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) HOSTADDRESS controlvm_get_channel_address(void) { - U64 addr = 0; + u64 addr = 0; u32 size = 0; if (!VMCALL_SUCCESSFUL(Issue_VMCALL_IO_CONTROLVM_ADDR(&addr, &size))) { @@ -1918,7 +1918,7 @@ controlvm_periodic_work(struct work_struct *work) CONTROLVM_MESSAGE inmsg; BOOL gotACommand = FALSE; BOOL handle_command_failed = FALSE; - static U64 Poll_Count; + static u64 Poll_Count; /* make sure visorbus server is registered for controlvm callbacks */ if (visorchipset_serverregwait && !serverregistered) -- cgit From d71772343977ac26a2e996d179dcce1c2931632b Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:52 -0400 Subject: staging: unisys: remove S8 type Delete the S8 type from commontypes.h since it wasn't being used. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/commontypes.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 2369099c56e2..15429f85aaec 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define S8 int8_t #define S16 int16_t #define S32 int32_t #define S64 int64_t -- cgit From 15c564ecf259bfa16370cf514795a442d3e0fb3c Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:53 -0400 Subject: staging: unisys: remove S16 type This patch switches all use of the S16 typedef to use the kernel's s16 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/common-spar/include/channels/diagchannel.h | 2 +- drivers/staging/unisys/include/commontypes.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h index eb2f530e2c8e..c01649a985c7 100644 --- a/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/diagchannel.h @@ -114,7 +114,7 @@ typedef struct _DIAG_EFI_TIME { u8 Second; /* 0 - 59 */ u8 Pad1; u32 Nanosecond; /* 0 - 999, 999, 999 */ - S16 TimeZone; /* -1440 to 1440 or 2047 */ + s16 TimeZone; /* -1440 to 1440 or 2047 */ u8 Daylight; u8 Pad2; } DIAG_EFI_TIME; diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 15429f85aaec..8bfa76012bcc 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define S16 int16_t #define S32 int32_t #define S64 int64_t -- cgit From c14f13ba30fcaa11a1149465dfaa3c8aa633afa7 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:54 -0400 Subject: staging: unisys: remove S32 type Delete the S32 type from commontypes.h since it wasn't being used. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/commontypes.h | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 8bfa76012bcc..4e89cdf8df95 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,7 +30,6 @@ #include #endif -#define S32 int32_t #define S64 int64_t #ifdef __KERNEL__ -- cgit From ec03a7db3213031734c7e50d3841877c409b1b61 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:55 -0400 Subject: staging: unisys: remove S64 type This patch switches all use of the S64 typedef to use the kernel's s64 type instead. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/commontypes.h | 2 -- drivers/staging/unisys/include/uisutils.h | 4 ++-- drivers/staging/unisys/visorchipset/file.c | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 4e89cdf8df95..fee1b21a27c8 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -30,8 +30,6 @@ #include #endif -#define S64 int64_t - #ifdef __KERNEL__ #ifdef CONFIG_X86_32 diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h index 26b69379638d..a1c193c5827e 100644 --- a/drivers/staging/unisys/include/uisutils.h +++ b/drivers/staging/unisys/include/uisutils.h @@ -262,7 +262,7 @@ Issue_VMCALL_IO_VISORSERIAL_ADDR(u64 *DiagChannelAddress) return result; } -static inline S64 Issue_VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET(void) +static inline s64 Issue_VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET(void) { u64 result = VMCALL_SUCCESS; u64 physaddr = 0; @@ -272,7 +272,7 @@ static inline S64 Issue_VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET(void) return result; } -static inline S64 Issue_VMCALL_MEASUREMENT_DO_NOTHING(void) +static inline s64 Issue_VMCALL_MEASUREMENT_DO_NOTHING(void) { u64 result = VMCALL_SUCCESS; u64 physaddr = 0; diff --git a/drivers/staging/unisys/visorchipset/file.c b/drivers/staging/unisys/visorchipset/file.c index fccc4f0c3a49..bf2e546d76bf 100644 --- a/drivers/staging/unisys/visorchipset/file.c +++ b/drivers/staging/unisys/visorchipset/file.c @@ -190,8 +190,8 @@ visorchipset_ioctl(struct inode *inode, struct file *file, #endif { int rc = SUCCESS; - S64 adjustment; - S64 vrtc_offset; + s64 adjustment; + s64 vrtc_offset; DBGINF("entered visorchipset_ioctl, cmd=%d", cmd); switch (cmd) { case VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET: -- cgit From f6f7005abe631dc207089256112099390da00969 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:56 -0400 Subject: staging: unisys: remove non-kernel code from commontypes.h This patch deletes everything in common types that was in the else section of a #ifdef __KERNEL__ block. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/commontypes.h | 62 ---------------------------- 1 file changed, 62 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index fee1b21a27c8..2aac0ddeaffb 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -20,17 +20,10 @@ * similar abbreviated content */ #define _SUPERVISOR_COMMONTYPES_H_ -#ifdef __KERNEL__ #include #include #include #include -#else -#include -#include -#endif - -#ifdef __KERNEL__ #ifdef CONFIG_X86_32 #define UINTN u32 @@ -38,19 +31,6 @@ #define UINTN u64 #endif -#else - -#include -#if __WORDSIZE == 32 -#define UINTN u32 -#elif __WORDSIZE == 64 -#define UINTN u64 -#else -#error Unsupported __WORDSIZE -#endif - -#endif - typedef u64 GUEST_PHYSICAL_ADDRESS; #define MEMSET(ptr, val, len) memset(ptr, val, len) @@ -62,7 +42,6 @@ typedef u64 GUEST_PHYSICAL_ADDRESS; #define INLINE inline #define OFFSETOF offsetof -#ifdef __KERNEL__ #define MEMORYBARRIER mb() #define MEMCPY(dest, src, len) memcpy(dest, src, len) #define MEMCPY_TOIO(dest, src, len) memcpy_toio(dest, src, len) @@ -99,47 +78,6 @@ typedef u64 GUEST_PHYSICAL_ADDRESS; LineNumber, Str, args...) \ pr_info(Str, ## args) -#else -#define MEMCPY(dest, src, len) memcpy(dest, src, len) - -#define MEMORYBARRIER mb() - -#define CHANNEL_GUID_MISMATCH(chType, chName, field, expected, actual, fil, \ - lin, logCtx) \ - do { \ - syslog(LOG_USER | LOG_ERR, \ - "Channel mismatch on channel=%s(%pUL) field=%s expected=%pUL actual=%pUL @%s:%d", \ - chName, &chType, field, \ - &expected, &actual, \ - fil, lin); \ - } while (0) - -#define CHANNEL_U32_MISMATCH(chType, chName, field, expected, actual, fil, \ - lin, logCtx) \ - do { \ - syslog(LOG_USER | LOG_ERR, \ - "Channel mismatch on channel=%s(%pUL) field=%s expected=0x%-8.8lx actual=0x%-8.8lx @%s:%d", \ - chName, chType, field, \ - (unsigned long)expected, (unsigned long)actual, \ - fil, lin); \ - } while (0) - -#define CHANNEL_U64_MISMATCH(chType, chName, field, expected, actual, fil, \ - lin, logCtx) \ - do { \ - syslog(LOG_USER | LOG_ERR, \ - "Channel mismatch on channel=%s(%pUL) field=%s expected=0x%-8.8Lx actual=0x%-8.8Lx @%s:%d", \ - chName, chType, field, \ - (unsigned long long)expected, \ - (unsigned long long)actual, \ - fil, lin); \ - } while (0) - -#define UltraLogEvent(logCtx, EventId, Severity, SubsystemMask, pFunctionName, \ - LineNumber, Str, args...) \ - syslog(LOG_USER | LOG_INFO, Str, ## args) -#endif - #define VolatileBarrier() MEMORYBARRIER #endif -- cgit From 87b7307ae1a3df1f474d4cc7deecc641862d0b87 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:57 -0400 Subject: staging: unisys: remove unused defines from commontypes.h Delete #defines that aren't used anywhere. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/include/commontypes.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 2aac0ddeaffb..b569c348d0f8 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -34,10 +34,7 @@ typedef u64 GUEST_PHYSICAL_ADDRESS; #define MEMSET(ptr, val, len) memset(ptr, val, len) -#define MEMCMP(m1, m2, len) memcmp(m1, m2, len) #define MEMCMP_IO(m1, m2, len) memcmp((void __force *)m1, m2, len) -#define STRLEN(s) ((UINTN)strlen((const char *)s)) -#define STRCPY(d, s) (strcpy((char *)d, (const char *)s)) #define INLINE inline #define OFFSETOF offsetof -- cgit From 90f3b509bf9be3a8ce6cbd22474b188eba998d1e Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:58 -0400 Subject: staging: unisys: remove UINTN type This patch removes UINTN from commontypes.h, using u64 in the one spot this type was used. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/common-spar/include/channels/channel.h | 4 ++-- drivers/staging/unisys/include/commontypes.h | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index 99533cfaf3df..c1ba1de97985 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -295,8 +295,8 @@ typedef struct _SIGNAL_QUEUE_HEADER { chan->QHDRFLD.Type = typ; \ chan->QHDRFLD.Size = sizeof(chan->QDATAFLD); \ chan->QHDRFLD.SignalSize = sizeof(QDATATYPE); \ - chan->QHDRFLD.oSignalBase = (UINTN)(chan->QDATAFLD)- \ - (UINTN)(&chan->QHDRFLD); \ + chan->QHDRFLD.oSignalBase = (u64)(chan->QDATAFLD)- \ + (u64)(&chan->QHDRFLD); \ chan->QHDRFLD.MaxSignalSlots = \ sizeof(chan->QDATAFLD)/sizeof(QDATATYPE); \ chan->QHDRFLD.MaxSignals = chan->QHDRFLD.MaxSignalSlots-1; \ diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index b569c348d0f8..7fdf207297de 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -25,12 +25,6 @@ #include #include -#ifdef CONFIG_X86_32 -#define UINTN u32 -#else -#define UINTN u64 -#endif - typedef u64 GUEST_PHYSICAL_ADDRESS; #define MEMSET(ptr, val, len) memset(ptr, val, len) -- cgit From 30de72dbb54f3ea92fd83f086bc5c00b28277971 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:00:59 -0400 Subject: staging: unisys: remove MEMSET define Remove the redundant MEMSET define in commontypes.h and fix everyplace that uses it. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/common-spar/include/channels/channel.h | 2 +- drivers/staging/unisys/common-spar/include/channels/iochannel.h | 6 +++--- drivers/staging/unisys/include/commontypes.h | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index c1ba1de97985..7c85e4308e89 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -290,7 +290,7 @@ typedef struct _SIGNAL_QUEUE_HEADER { #define SignalInit(chan, QHDRFLD, QDATAFLD, QDATATYPE, ver, typ) \ do { \ - MEMSET(&chan->QHDRFLD, 0, sizeof(chan->QHDRFLD)); \ + memset(&chan->QHDRFLD, 0, sizeof(chan->QHDRFLD)); \ chan->QHDRFLD.VersionId = ver; \ chan->QHDRFLD.Type = typ; \ chan->QHDRFLD.Size = sizeof(chan->QDATAFLD); \ diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h index 9f2e1e1abaee..24e11858e0ee 100644 --- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h @@ -376,7 +376,7 @@ struct uiscmdrsp_scsi { #define SET_NO_DISK_INQUIRY_RESULT(buf, len, lun, lun0notpresent, notpresent) \ do { \ - MEMSET(buf, 0, \ + memset(buf, 0, \ MINNUM(len, \ (unsigned int) NO_DISK_INQUIRY_RESULT_LEN)); \ buf[2] = (u8) SCSI_SPC2_VER; \ @@ -802,7 +802,7 @@ static inline int ULTRA_VHBA_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, struct vhba_config_max *max, unsigned char *clientStr, u32 clientStrLen, u64 bytes) { - MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); + memset(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VHBA_CHANNEL_PROTOCOL_VERSIONID; x->ChannelHeader.Signature = ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE; x->ChannelHeader.SrvState = CHANNELSRV_UNINITIALIZED; @@ -838,7 +838,7 @@ static inline int ULTRA_VNIC_init_channel(ULTRA_IO_CHANNEL_PROTOCOL *x, unsigned char *clientStr, u32 clientStrLen, u64 bytes) { - MEMSET(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); + memset(x, 0, sizeof(ULTRA_IO_CHANNEL_PROTOCOL)); x->ChannelHeader.VersionId = ULTRA_VNIC_CHANNEL_PROTOCOL_VERSIONID; x->ChannelHeader.Signature = ULTRA_VNIC_CHANNEL_PROTOCOL_SIGNATURE; x->ChannelHeader.SrvState = CHANNELSRV_UNINITIALIZED; diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 7fdf207297de..3540976fabc2 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -27,7 +27,6 @@ typedef u64 GUEST_PHYSICAL_ADDRESS; -#define MEMSET(ptr, val, len) memset(ptr, val, len) #define MEMCMP_IO(m1, m2, len) memcmp((void __force *)m1, m2, len) #define INLINE inline -- cgit From 1496125efd6b5852573d0c7ad5ebc7d60599b1b3 Mon Sep 17 00:00:00 2001 From: Benjamin Romer Date: Thu, 31 Jul 2014 12:01:00 -0400 Subject: staging: unisys: remove MEMCMP_IO This patch removes MEMCMP_IO from commontypes.h and fixes the one use of the macro so it calls uuid_cmp_le() instead. The old code was comparing UUIDs directly. Signed-off-by: Benjamin Romer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/common-spar/include/channels/channel.h | 4 ++-- drivers/staging/unisys/include/commontypes.h | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index 7c85e4308e89..15a8d6b35dac 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -318,8 +318,8 @@ ULTRA_check_channel_client(void __iomem *pChannel, { if (uuid_le_cmp(expectedTypeGuid, NULL_UUID_LE) != 0) /* caller wants us to verify type GUID */ - if (MEMCMP_IO(&(((CHANNEL_HEADER __iomem *) (pChannel))->Type), - &expectedTypeGuid, sizeof(uuid_le)) != 0) { + if (uuid_le_cmp((((CHANNEL_HEADER __iomem *)(pChannel))->Type), + expectedTypeGuid) != 0) { CHANNEL_GUID_MISMATCH(expectedTypeGuid, channelName, "type", expectedTypeGuid, ((CHANNEL_HEADER __iomem *) diff --git a/drivers/staging/unisys/include/commontypes.h b/drivers/staging/unisys/include/commontypes.h index 3540976fabc2..4311e9f6200f 100644 --- a/drivers/staging/unisys/include/commontypes.h +++ b/drivers/staging/unisys/include/commontypes.h @@ -27,8 +27,6 @@ typedef u64 GUEST_PHYSICAL_ADDRESS; -#define MEMCMP_IO(m1, m2, len) memcmp((void __force *)m1, m2, len) - #define INLINE inline #define OFFSETOF offsetof -- cgit From d746cb55b036da18f8cdcf76c9604d8e74315827 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Fri, 1 Aug 2014 10:29:30 +0200 Subject: staging: visorchipset: fix sparse warnings about static declaration Some functions were prototyped as static but the actual definition wasn't. While this is valid (the function is static because the two declarations don't conflict and the first one is static), this makes sparse unhappy and cause confusion of normal people too. Signed-off-by: Vincent Bernat Signed-off-by: Greg Kroah-Hartman --- .../unisys/visorchipset/visorchipset_main.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index b21a2b1da233..fe3c0127d255 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -351,8 +351,9 @@ static void controlvm_respond_physdev_changestate(CONTROLVM_MESSAGE_HEADER * msgHdr, int response, ULTRA_SEGMENT_STATE state); -ssize_t toolaction_show(struct device *dev, struct device_attribute *attr, - char *buf) +static ssize_t toolaction_show(struct device *dev, + struct device_attribute *attr, + char *buf) { u8 toolAction; @@ -362,8 +363,9 @@ ssize_t toolaction_show(struct device *dev, struct device_attribute *attr, return scnprintf(buf, PAGE_SIZE, "%u\n", toolAction); } -ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) +static ssize_t toolaction_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) { u8 toolAction; int ret; @@ -381,8 +383,9 @@ ssize_t toolaction_store(struct device *dev, struct device_attribute *attr, return count; } -ssize_t boottotool_show(struct device *dev, struct device_attribute *attr, - char *buf) +static ssize_t boottotool_show(struct device *dev, + struct device_attribute *attr, + char *buf) { ULTRA_EFI_SPAR_INDICATION efiSparIndication; @@ -394,8 +397,9 @@ ssize_t boottotool_show(struct device *dev, struct device_attribute *attr, efiSparIndication.BootToTool); } -ssize_t boottotool_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) +static ssize_t boottotool_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) { int val, ret; ULTRA_EFI_SPAR_INDICATION efiSparIndication; @@ -1897,7 +1901,7 @@ handle_command(CONTROLVM_MESSAGE inmsg, HOSTADDRESS channel_addr) return TRUE; } -HOSTADDRESS controlvm_get_channel_address(void) +static HOSTADDRESS controlvm_get_channel_address(void) { u64 addr = 0; u32 size = 0; -- cgit From 80039faa8809461f8e23892e14277f9f0af45505 Mon Sep 17 00:00:00 2001 From: Murilo Opsfelder Araujo Date: Thu, 31 Jul 2014 08:34:11 -0300 Subject: Staging: android: timed_gpio.c: improved logic of gpio_get_time() This patch improves the logic of gpio_get_time() and, thereafter, makes checkpatch.pl happy. Signed-off-by: Murilo Opsfelder Araujo Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/timed_gpio.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/android/timed_gpio.c b/drivers/staging/android/timed_gpio.c index 180c209a009e..8fa4758517c0 100644 --- a/drivers/staging/android/timed_gpio.c +++ b/drivers/staging/android/timed_gpio.c @@ -45,16 +45,17 @@ static enum hrtimer_restart gpio_timer_func(struct hrtimer *timer) static int gpio_get_time(struct timed_output_dev *dev) { - struct timed_gpio_data *data = - container_of(dev, struct timed_gpio_data, dev); + struct timed_gpio_data *data; + struct timeval t; - if (hrtimer_active(&data->timer)) { - ktime_t r = hrtimer_get_remaining(&data->timer); - struct timeval t = ktime_to_timeval(r); + data = container_of(dev, struct timed_gpio_data, dev); - return t.tv_sec * 1000 + t.tv_usec / 1000; - } else + if (!hrtimer_active(&data->timer)) return 0; + + t = ktime_to_timeval(hrtimer_get_remaining(&data->timer)); + + return t.tv_sec * 1000 + t.tv_usec / 1000; } static void gpio_enable(struct timed_output_dev *dev, int value) -- cgit From f1555465d3f7c0cb98343282d51d216c90cb8e2c Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 31 Jul 2014 11:37:05 +0530 Subject: staging: lustre: ldlm: ldlm_resource.c - fix dereferenceing user space buffer - this fixes sparse warning for directly deferencing user space buffer ./lustre/ldlm/ldlm_resource.c:202:35: warning: incorrect type in argument 2 (different address spaces) ./lustre/ldlm/ldlm_resource.c:202:35: expected void const [noderef] *from ./lustre/ldlm/ldlm_resource.c:202:35: got char const *buffer Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index 91d028b28c2c..efd45e513416 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -189,8 +189,9 @@ static int lprocfs_lru_size_seq_show(struct seq_file *m, void *v) return lprocfs_rd_uint(m, nr); } -static ssize_t lprocfs_lru_size_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off) +static ssize_t lprocfs_lru_size_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off) { struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private; char dummy[MAX_STRING_SIZE + 1]; -- cgit From 29dd4f9be63befafbedeb816f6954148f29592bf Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 31 Jul 2014 13:21:02 +0530 Subject: staging: lustre: ptlrpc: lproc_ptlrpc.c - fix dereferenceing user space buffer - this fixes sparse warning for directly deferencing user space buffer drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c:652:33: warning: incorrect type in argument 2 (different address spaces) drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c:652:33: expected void const [noderef] *from drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c:652:33: got char const *buffer Signed-off-by: Anil Belur Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index 927921541851..bc220308e7d7 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -628,7 +628,8 @@ out: * if the optional token is omitted, the operation is performed on both the * regular and high-priority (if the service has one) NRS head. */ -static ssize_t ptlrpc_lprocfs_nrs_seq_write(struct file *file, const char *buffer, +static ssize_t ptlrpc_lprocfs_nrs_seq_write(struct file *file, + const char __user *buffer, size_t count, loff_t *off) { struct ptlrpc_service *svc = ((struct seq_file *)file->private_data)->private; -- cgit From 2ad99c50357288e60a4ccc3b9bebccb640060107 Mon Sep 17 00:00:00 2001 From: Sanjeev Sharma Date: Thu, 31 Jul 2014 11:13:29 +0530 Subject: staging:r8180: coding style: Fixed commenting style This is a patch to the r8180_93cx6.c file that fixes commenting style warning Signed-off-by: Sanjeev Sharma Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8180_93cx6.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8180_93cx6.c b/drivers/staging/rtl8192u/r8180_93cx6.c index fb8a7a8ac64c..97d9b3f49114 100644 --- a/drivers/staging/rtl8192u/r8180_93cx6.c +++ b/drivers/staging/rtl8192u/r8180_93cx6.c @@ -103,7 +103,7 @@ u32 eprom_read(struct net_device *dev, u32 addr) u32 ret; ret = 0; - //enable EPROM programming + /* enable EPROM programming */ write_nic_byte_E(dev, EPROM_CMD, (EPROM_CMD_PROGRAM< Date: Thu, 31 Jul 2014 11:13:30 +0530 Subject: staging:r8180: coding style: Fixed too long lines This is a patch to the r8180_93cx6.h file that fixes long lines along with some additional warning. Signed-off-by: Sanjeev Sharma Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8180_93cx6.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8180_93cx6.h b/drivers/staging/rtl8192u/r8180_93cx6.h index ee55dbffe32c..b840348eb5e3 100644 --- a/drivers/staging/rtl8192u/r8180_93cx6.h +++ b/drivers/staging/rtl8192u/r8180_93cx6.h @@ -3,11 +3,14 @@ Copyright (C) Andrea Merello 2004-2005 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 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 thank the Authors of such projects and the Ndiswrapper project Authors. + We want to thank the Authors of such projects and the Ndiswrapper + project Authors. */ /*This files contains card eeprom (93c46 or 93c56) programming routines*/ @@ -37,4 +40,4 @@ #define EPROM_TXPW1 0x3d -u32 eprom_read(struct net_device *dev,u32 addr); //reads a 16 bits word +u32 eprom_read(struct net_device *dev, u32 addr); /* reads a 16 bits word */ -- cgit From 104cb5c0dd1494f193021e5d206f09aae668b523 Mon Sep 17 00:00:00 2001 From: Sanjeev Sharma Date: Thu, 31 Jul 2014 11:13:31 +0530 Subject: staging:r8190: coding style: Fixed checkpatch reported Error This is a patch to the r8190_rtl8256.c file that fixes checkpatch reported space & coding style issues. Signed-off-by: Sanjeev Sharma Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192u/r8190_rtl8256.c | 169 +++++++++++++++---------------- 1 file changed, 79 insertions(+), 90 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8192u/r8190_rtl8256.c b/drivers/staging/rtl8192u/r8190_rtl8256.c index 08e1bc90555a..43ed76806c61 100644 --- a/drivers/staging/rtl8192u/r8190_rtl8256.c +++ b/drivers/staging/rtl8192u/r8190_rtl8256.c @@ -23,62 +23,64 @@ * Return: NONE * Note: 8226 support both 20M and 40 MHz *---------------------------------------------------------------------------*/ -void PHY_SetRF8256Bandwidth(struct net_device *dev , HT_CHANNEL_WIDTH Bandwidth) //20M or 40M +void PHY_SetRF8256Bandwidth(struct net_device *dev , HT_CHANNEL_WIDTH Bandwidth) { u8 eRFPath; struct r8192_priv *priv = ieee80211_priv(dev); - //for(eRFPath = RF90_PATH_A; eRFPath NumTotalRFPath; eRFPath++) - for(eRFPath = 0; eRFPath NumTotalRFPath; + * eRFPath++) + */ + for (eRFPath = 0; eRFPath < RF90_PATH_MAX; eRFPath++) { if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) continue; - switch (Bandwidth) - { - case HT_CHANNEL_WIDTH_20: - if(priv->card_8192_version == VERSION_819xU_A || priv->card_8192_version == VERSION_819xU_B)// 8256 D-cut, E-cut, xiong: consider it later! - { - rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x0b, bMask12Bits, 0x100); //phy para:1ba - rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x2c, bMask12Bits, 0x3d7); - rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x0e, bMask12Bits, 0x021); - - //cosa add for sd3's request 01/23/2008 - rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x14, bMask12Bits, 0x5ab); - } - else - { + switch (Bandwidth) { + case HT_CHANNEL_WIDTH_20: + if (priv->card_8192_version == VERSION_819xU_A + || priv->card_8192_version + == VERSION_819xU_B) { /* 8256 D-cut, E-cut, xiong: consider it later! */ + rtl8192_phy_SetRFReg(dev, + (RF90_RADIO_PATH_E)eRFPath, + 0x0b, bMask12Bits, 0x100); /* phy para:1ba */ + rtl8192_phy_SetRFReg(dev, + (RF90_RADIO_PATH_E)eRFPath, + 0x2c, bMask12Bits, 0x3d7); + rtl8192_phy_SetRFReg(dev, + (RF90_RADIO_PATH_E)eRFPath, + 0x0e, bMask12Bits, 0x021); + + /* cosa add for sd3's request 01/23/2008 + */ + rtl8192_phy_SetRFReg(dev, + (RF90_RADIO_PATH_E)eRFPath, + 0x14, bMask12Bits, 0x5ab); + } else { RT_TRACE(COMP_ERR, "PHY_SetRF8256Bandwidth(): unknown hardware version\n"); - } - + } break; - case HT_CHANNEL_WIDTH_20_40: - if(priv->card_8192_version == VERSION_819xU_A ||priv->card_8192_version == VERSION_819xU_B)// 8256 D-cut, E-cut, xiong: consider it later! - { + case HT_CHANNEL_WIDTH_20_40: + if (priv->card_8192_version == VERSION_819xU_A || priv->card_8192_version == VERSION_819xU_B) { /* 8256 D-cut, E-cut, xiong: consider it later! */ rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x0b, bMask12Bits, 0x300); //phy para:3ba rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x2c, bMask12Bits, 0x3df); rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x0e, bMask12Bits, 0x0a1); //cosa add for sd3's request 01/23/2008 - if(priv->chan == 3 || priv->chan == 9) //I need to set priv->chan whenever current channel changes + if (priv->chan == 3 || priv->chan == 9) + //I need to set priv->chan whenever current channel changes rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x14, bMask12Bits, 0x59b); else rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x14, bMask12Bits, 0x5ab); - } - else - { + } else { RT_TRACE(COMP_ERR, "PHY_SetRF8256Bandwidth(): unknown hardware version\n"); - } - - + } break; - default: - RT_TRACE(COMP_ERR, "PHY_SetRF8256Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth); + default: + RT_TRACE(COMP_ERR, "PHY_SetRF8256Bandwidth(): unknown Bandwidth: %#X\n", Bandwidth); break; } } - return; } /*-------------------------------------------------------------------------- * Overview: Interface to config 8256 @@ -95,8 +97,6 @@ void PHY_RF8256_Config(struct net_device *dev) priv->NumTotalRFPath = RTL819X_TOTAL_RF_PATH; // Config BB and RF phy_RF8256_Config_ParaFile(dev); - - return; } /*-------------------------------------------------------------------------- * Overview: Interface to config 8256 @@ -122,8 +122,7 @@ void phy_RF8256_Config_ParaFile(struct net_device *dev) //3//----------------------------------------------------------------- //3// <2> Initialize RF //3//----------------------------------------------------------------- - for(eRFPath = (RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath NumTotalRFPath; eRFPath++) - { + for (eRFPath = (RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath < priv->NumTotalRFPath; eRFPath++) { if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) continue; @@ -133,13 +132,12 @@ void phy_RF8256_Config_ParaFile(struct net_device *dev) // pHalData->RfReg0Value[eRFPath] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rGlobalCtrl, bMaskDWord); /*----Store original RFENV control type----*/ - switch (eRFPath) - { + switch (eRFPath) { case RF90_PATH_A: case RF90_PATH_C: u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV); break; - case RF90_PATH_B : + case RF90_PATH_B: case RF90_PATH_D: u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16); break; @@ -159,8 +157,7 @@ void phy_RF8256_Config_ParaFile(struct net_device *dev) /*----Check RF block (for FPGA platform only)----*/ // TODO: this function should be removed on ASIC , Emily 2007.2.2 - if (rtl8192_phy_checkBBAndRF(dev, HW90_BLOCK_RF, (RF90_RADIO_PATH_E)eRFPath)) - { + if (rtl8192_phy_checkBBAndRF(dev, HW90_BLOCK_RF, (RF90_RADIO_PATH_E)eRFPath)) { RT_TRACE(COMP_ERR, "PHY_RF8256_Config():Check Radio[%d] Fail!!\n", eRFPath); goto phy_RF8256_Config_ParaFile_Fail; } @@ -168,39 +165,34 @@ void phy_RF8256_Config_ParaFile(struct net_device *dev) RetryTimes = ConstRetryTimes; RF3_Final_Value = 0; /*----Initialize RF fom connfiguration file----*/ - switch (eRFPath) - { + switch (eRFPath) { case RF90_PATH_A: - while(RF3_Final_Value!=RegValueToBeCheck && RetryTimes!=0) - { - ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); + while (RF3_Final_Value != RegValueToBeCheck && RetryTimes != 0) { + ret = rtl8192_phy_ConfigRFWithHeaderFile(dev, (RF90_RADIO_PATH_E)eRFPath); RF3_Final_Value = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, RegOffSetToBeCheck, bMask12Bits); RT_TRACE(COMP_RF, "RF %d %d register final value: %x\n", eRFPath, RegOffSetToBeCheck, RF3_Final_Value); RetryTimes--; } break; case RF90_PATH_B: - while(RF3_Final_Value!=RegValueToBeCheck && RetryTimes!=0) - { - ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); + while (RF3_Final_Value != RegValueToBeCheck && RetryTimes != 0) { + ret = rtl8192_phy_ConfigRFWithHeaderFile(dev, (RF90_RADIO_PATH_E)eRFPath); RF3_Final_Value = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, RegOffSetToBeCheck, bMask12Bits); RT_TRACE(COMP_RF, "RF %d %d register final value: %x\n", eRFPath, RegOffSetToBeCheck, RF3_Final_Value); RetryTimes--; } break; case RF90_PATH_C: - while(RF3_Final_Value!=RegValueToBeCheck && RetryTimes!=0) - { - ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); + while (RF3_Final_Value != RegValueToBeCheck && RetryTimes != 0) { + ret = rtl8192_phy_ConfigRFWithHeaderFile(dev, (RF90_RADIO_PATH_E)eRFPath); RF3_Final_Value = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, RegOffSetToBeCheck, bMask12Bits); RT_TRACE(COMP_RF, "RF %d %d register final value: %x\n", eRFPath, RegOffSetToBeCheck, RF3_Final_Value); RetryTimes--; } break; case RF90_PATH_D: - while(RF3_Final_Value!=RegValueToBeCheck && RetryTimes!=0) - { - ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); + while (RF3_Final_Value != RegValueToBeCheck && RetryTimes != 0) { + ret = rtl8192_phy_ConfigRFWithHeaderFile(dev, (RF90_RADIO_PATH_E)eRFPath); RF3_Final_Value = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, RegOffSetToBeCheck, bMask12Bits); RT_TRACE(COMP_RF, "RF %d %d register final value: %x\n", eRFPath, RegOffSetToBeCheck, RF3_Final_Value); RetryTimes--; @@ -209,50 +201,48 @@ void phy_RF8256_Config_ParaFile(struct net_device *dev) } /*----Restore RFENV control type----*/; - switch (eRFPath) - { + switch (eRFPath) { case RF90_PATH_A: case RF90_PATH_C: rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue); break; - case RF90_PATH_B : + case RF90_PATH_B: case RF90_PATH_D: rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue); break; } - if(ret){ + if (ret) { RT_TRACE(COMP_ERR, "phy_RF8256_Config_ParaFile():Radio[%d] Fail!!", eRFPath); goto phy_RF8256_Config_ParaFile_Fail; } } - RT_TRACE(COMP_PHY, "PHY Initialization Success\n") ; - return ; + RT_TRACE(COMP_PHY, "PHY Initialization Success\n"); + return; phy_RF8256_Config_ParaFile_Fail: - RT_TRACE(COMP_ERR, "PHY Initialization failed\n") ; - return ; + RT_TRACE(COMP_ERR, "PHY Initialization failed\n"); } void PHY_SetRF8256CCKTxPower(struct net_device *dev, u8 powerlevel) { - u32 TxAGC=0; + u32 TxAGC = 0; struct r8192_priv *priv = ieee80211_priv(dev); //modified by vivi, 20080109 TxAGC = powerlevel; - if(priv->bDynamicTxLowPower == TRUE) //cosa 05/22/2008 for scan - { - if(priv->CustomerID == RT_CID_819x_Netcore) + if (priv->bDynamicTxLowPower == TRUE) { + //cosa 05/22/2008 for scan + if (priv->CustomerID == RT_CID_819x_Netcore) TxAGC = 0x22; else TxAGC += priv->CckPwEnl; } - if(TxAGC > 0x24) + if (TxAGC > 0x24) TxAGC = 0x24; rtl8192_setBBreg(dev, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC); } @@ -268,43 +258,42 @@ void PHY_SetRF8256OFDMTxPower(struct net_device *dev, u8 powerlevel) u8 byte0, byte1, byte2, byte3; powerBase0 = powerlevel + priv->TxPowerDiff; //OFDM rates - powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0; + powerBase0 = (powerBase0<<24) | (powerBase0<<16) | (powerBase0<<8) | powerBase0; powerBase1 = powerlevel; //MCS rates - powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1; + powerBase1 = (powerBase1<<24) | (powerBase1<<16) | (powerBase1<<8) | powerBase1; - for(index=0; index<6; index++) - { - writeVal = priv->MCSTxPowerLevelOriginalOffset[index] + ((index<2)?powerBase0:powerBase1); + for (index = 0; index < 6; index++) { + writeVal = priv->MCSTxPowerLevelOriginalOffset[index] + ((index < 2)?powerBase0:powerBase1); byte0 = (u8)(writeVal & 0x7f); byte1 = (u8)((writeVal & 0x7f00)>>8); byte2 = (u8)((writeVal & 0x7f0000)>>16); byte3 = (u8)((writeVal & 0x7f000000)>>24); - if(byte0 > 0x24) // Max power index = 0x24 + + if (byte0 > 0x24) + /* Max power index = 0x24 */ byte0 = 0x24; - if(byte1 > 0x24) + if (byte1 > 0x24) byte1 = 0x24; - if(byte2 > 0x24) + if (byte2 > 0x24) byte2 = 0x24; - if(byte3 > 0x24) + if (byte3 > 0x24) byte3 = 0x24; //for tx power track - if(index == 3) - { - writeVal_tmp = (byte3<<24) | (byte2<<16) |(byte1<<8) |byte0; + if (index == 3) { + writeVal_tmp = (byte3<<24) | (byte2<<16) | (byte1<<8) | byte0; priv->Pwr_Track = writeVal_tmp; } - if(priv->bDynamicTxHighPower == TRUE) //Add by Jacken 2008/03/06 - { - // Emily, 20080613. Set low tx power for both MCS and legacy OFDM + if (priv->bDynamicTxHighPower == TRUE) { + /*Add by Jacken 2008/03/06 + *Emily, 20080613. Set low tx power for both MCS and legacy OFDM + */ writeVal = 0x03030303; - } - else - { - writeVal = (byte3<<24) | (byte2<<16) |(byte1<<8) |byte0; - } - rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal); + } else { + writeVal = (byte3<<24) | (byte2<<16) | (byte1<<8) | byte0; + } + rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal); } return; -- cgit From 1a8dcde8d3ecf68924df3a5f6e38379b2b0a5415 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 31 Jul 2014 10:36:41 +0200 Subject: staging: rtl8723au: RSSI_test is never set Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/odm_HWConfig.c | 7 ++----- drivers/staging/rtl8723au/include/odm.h | 1 - 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c index 409fde4ac420..29d844d66cae 100644 --- a/drivers/staging/rtl8723au/hal/odm_HWConfig.c +++ b/drivers/staging/rtl8723au/hal/odm_HWConfig.c @@ -399,11 +399,8 @@ static void ODM_PhyStatusQuery23a_92CSeries(struct dm_odm_t *pDM_Odm, { odm_RxPhyStatus92CSeries_Parsing(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo); - if (pDM_Odm->RSSI_test) { - /* Select the packets to do RSSI checking for antenna switching. */ - } else { - odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo); - } + + odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo); } void ODM_PhyStatusQuery23a(struct dm_odm_t *pDM_Odm, struct phy_info *pPhyInfo, diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h index 41dba628b113..68ff7bbc6ad1 100644 --- a/drivers/staging/rtl8723au/include/odm.h +++ b/drivers/staging/rtl8723au/include/odm.h @@ -736,7 +736,6 @@ struct dm_odm_t { struct false_alarm_stats FalseAlmCnt; struct false_alarm_stats FlaseAlmCntBuddyAdapter; struct sw_ant_sw DM_SWAT_Table; - bool RSSI_test; struct edca_turbo DM_EDCA_Table; u32 WMMEDCA_BE; -- cgit From a48dd468efbb75a47447f82c849b1d43255a6792 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 31 Jul 2014 10:36:42 +0200 Subject: staging: rtl8723au: Remove two never set variables struct registry_priv.usbss_enable and struct pwrctrl_priv.bHWPwrPindetect are never set. Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_cmd.c | 13 ------------- drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 22 ---------------------- drivers/staging/rtl8723au/include/drv_types.h | 1 - drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 1 - 4 files changed, 37 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c index 25d65b27e3e9..7241a5a8731c 100644 --- a/drivers/staging/rtl8723au/core/rtw_cmd.c +++ b/drivers/staging/rtl8723au/core/rtw_cmd.c @@ -203,22 +203,9 @@ void rtw_free_evt_priv23a(struct evt_priv *pevtpriv) static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj) { - struct drvextra_cmd_parm *pdrvextra_cmd_parm; /* set to true to allow enqueuing cmd when hw_init_completed is false */ u8 bAllow = false; - /* To decide allow or not */ - if (pcmdpriv->padapter->pwrctrlpriv.bHWPwrPindetect && - !pcmdpriv->padapter->registrypriv.usbss_enable) { - if (cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra)) { - pdrvextra_cmd_parm = - (struct drvextra_cmd_parm *)cmd_obj->parmbuf; - if (pdrvextra_cmd_parm->ec_id == - POWER_SAVING_CTRL_WK_CID) - bAllow = true; - } - } - if (cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan)) bAllow = true; diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c index 7fbbdafcc331..d5fa26ab38a6 100644 --- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c @@ -150,34 +150,12 @@ void rtw_ps_processor23a(struct rtw_adapter*padapter) { struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - enum rt_rf_power_state rfpwrstate; pwrpriv->ps_processing = true; if (pwrpriv->bips_processing == true) goto exit; - if (padapter->pwrctrlpriv.bHWPwrPindetect) { - rfpwrstate = RfOnOffDetect23a(padapter); - DBG_8723A("@@@@- #2 %s ==> rfstate:%s\n", __func__, - (rfpwrstate == rf_on)?"rf_on":"rf_off"); - - if (rfpwrstate!= pwrpriv->rf_pwrstate) { - if (rfpwrstate == rf_off) { - pwrpriv->change_rfpwrstate = rf_off; - padapter->bCardDisableWOHSM = true; - rtw_hw_suspend23a(padapter); - } else { - pwrpriv->change_rfpwrstate = rf_on; - rtw_hw_resume23a(padapter); - } - DBG_8723A("current rf_pwrstate(%s)\n", - (pwrpriv->rf_pwrstate == rf_off) ? - "rf_off":"rf_on"); - } - pwrpriv->pwr_state_check_cnts ++; - } - if (pwrpriv->ips_mode_req == IPS_NONE) goto exit; diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h index df55e5bbb6f2..9870f87bdc70 100644 --- a/drivers/staging/rtl8723au/include/drv_types.h +++ b/drivers/staging/rtl8723au/include/drv_types.h @@ -111,7 +111,6 @@ struct registry_priv { u8 antdiv_cfg; u8 antdiv_type; - u8 usbss_enable;/* 0:disable,1:enable */ u8 hwpdn_mode;/* 0:disable,1:enable,2:decide by EFUSE config */ u8 hwpwrp_detect;/* 0:disable,1:enable */ diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index 1fa712fbd0a3..be465c2cf2fe 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -199,7 +199,6 @@ struct pwrctrl_priv { enum rt_rf_power_state change_rfpwrstate; u8 bHWPowerdown;/* if support hw power down */ - u8 bHWPwrPindetect; u8 bkeepfwalive; unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT]; }; -- cgit From 06736c291492f90f779fe6127431036b73b0a7b4 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 31 Jul 2014 10:36:43 +0200 Subject: staging: rtl8723au: Remove never set struct pwrctrl_priv.bHWPowerdown Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/hal/usb_halinit.c | 21 ++++++++------------- drivers/staging/rtl8723au/include/rtw_pwrctrl.h | 1 - 2 files changed, 8 insertions(+), 14 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c index 681810ea657b..b49bf33184de 100644 --- a/drivers/staging/rtl8723au/hal/usb_halinit.c +++ b/drivers/staging/rtl8723au/hal/usb_halinit.c @@ -517,20 +517,15 @@ enum rt_rf_power_state RfOnOffDetect23a(struct rtw_adapter *pAdapter) u8 val8; enum rt_rf_power_state rfpowerstate = rf_off; - if (pAdapter->pwrctrlpriv.bHWPowerdown) { - val8 = rtl8723au_read8(pAdapter, REG_HSISR); - DBG_8723A("pwrdown, 0x5c(BIT7) =%02x\n", val8); - rfpowerstate = (val8 & BIT(7)) ? rf_off : rf_on; - } else { /* rf on/off */ - rtl8723au_write8(pAdapter, REG_MAC_PINMUX_CFG, - rtl8723au_read8(pAdapter, REG_MAC_PINMUX_CFG) & - ~BIT(3)); - val8 = rtl8723au_read8(pAdapter, REG_GPIO_IO_SEL); - DBG_8723A("GPIO_IN =%02x\n", val8); - rfpowerstate = (val8 & BIT(3)) ? rf_on : rf_off; - } + rtl8723au_write8(pAdapter, REG_MAC_PINMUX_CFG, + rtl8723au_read8(pAdapter, + REG_MAC_PINMUX_CFG) & ~BIT(3)); + val8 = rtl8723au_read8(pAdapter, REG_GPIO_IO_SEL); + DBG_8723A("GPIO_IN =%02x\n", val8); + rfpowerstate = (val8 & BIT(3)) ? rf_on : rf_off; + return rfpowerstate; -} /* HalDetectPwrDownMode */ +} void _ps_open_RF23a(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h index be465c2cf2fe..599fed9b365d 100644 --- a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h +++ b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h @@ -198,7 +198,6 @@ struct pwrctrl_priv { enum rt_rf_power_state rf_pwrstate;/* cur power state */ enum rt_rf_power_state change_rfpwrstate; - u8 bHWPowerdown;/* if support hw power down */ u8 bkeepfwalive; unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT]; }; -- cgit From c8875b2f1fc830f07cd08b8b5bce99471bfcffd9 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 31 Jul 2014 10:36:44 +0200 Subject: staging: rtl8723au: Do not duplicate kernel provided USB macros Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/usb_intf.c | 45 +++++++---------------------- 1 file changed, 10 insertions(+), 35 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index 06c885f7856e..c5ff1b8e85e8 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -59,44 +59,19 @@ static struct usb_driver rtl8723a_usb_drv = { static struct usb_driver *usb_drv = &rtl8723a_usb_drv; -static inline int RT_usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) -{ - return (epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN; -} - -static inline int RT_usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd) -{ - return (epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT; -} - -static inline int RT_usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd) -{ - return (epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT; -} - -static inline int RT_usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd) -{ - return (epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK; -} - static inline int RT_usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd) { - return RT_usb_endpoint_xfer_bulk(epd) && RT_usb_endpoint_dir_in(epd); + return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); } static inline int RT_usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd) { - return RT_usb_endpoint_xfer_bulk(epd) && RT_usb_endpoint_dir_out(epd); + return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); } static inline int RT_usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd) { - return RT_usb_endpoint_xfer_int(epd) && RT_usb_endpoint_dir_in(epd); -} - -static inline int RT_usb_endpoint_num(const struct usb_endpoint_descriptor *epd) -{ - return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; + return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); } static int rtw_init_intf_priv(struct dvobj_priv *dvobj) @@ -173,25 +148,25 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) if (RT_usb_endpoint_is_bulk_in(pendp_desc)) { DBG_8723A("RT_usb_endpoint_is_bulk_in = %x\n", - RT_usb_endpoint_num(pendp_desc)); + usb_endpoint_num(pendp_desc)); pdvobjpriv->RtInPipe[pdvobjpriv->RtNumInPipes] = - RT_usb_endpoint_num(pendp_desc); + usb_endpoint_num(pendp_desc); pdvobjpriv->RtNumInPipes++; } else if (RT_usb_endpoint_is_int_in(pendp_desc)) { DBG_8723A("RT_usb_endpoint_is_int_in = %x, Interval = %x\n", - RT_usb_endpoint_num(pendp_desc), + usb_endpoint_num(pendp_desc), pendp_desc->bInterval); pdvobjpriv->RtInPipe[pdvobjpriv->RtNumInPipes] = - RT_usb_endpoint_num(pendp_desc); + usb_endpoint_num(pendp_desc); pdvobjpriv->RtNumInPipes++; } else if (RT_usb_endpoint_is_bulk_out(pendp_desc)) { DBG_8723A("RT_usb_endpoint_is_bulk_out = %x\n", - RT_usb_endpoint_num(pendp_desc)); + usb_endpoint_num(pendp_desc)); pdvobjpriv->RtOutPipe[pdvobjpriv->RtNumOutPipes] = - RT_usb_endpoint_num(pendp_desc); + usb_endpoint_num(pendp_desc); pdvobjpriv->RtNumOutPipes++; } - pdvobjpriv->ep_num[i] = RT_usb_endpoint_num(pendp_desc); + pdvobjpriv->ep_num[i] = usb_endpoint_num(pendp_desc); } } DBG_8723A("nr_endpoint =%d, in_num =%d, out_num =%d\n\n", -- cgit From bd2dec915e0aa1280d477fd4d08e28f90df321e0 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 31 Jul 2014 10:36:45 +0200 Subject: staging: rtl8723au: usb_dvobj_init(): Remove unused variable 'pdev_desc' Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/os_dep/usb_intf.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c index c5ff1b8e85e8..865743ecd855 100644 --- a/drivers/staging/rtl8723au/os_dep/usb_intf.c +++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c @@ -91,7 +91,6 @@ static int rtw_deinit_intf_priv(struct dvobj_priv *dvobj) static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) { struct dvobj_priv *pdvobjpriv; - struct usb_device_descriptor *pdev_desc; struct usb_host_config *phost_conf; struct usb_config_descriptor *pconf_desc; struct usb_host_interface *phost_iface; @@ -119,8 +118,6 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) pdvobjpriv->RtNumInPipes = 0; pdvobjpriv->RtNumOutPipes = 0; - pdev_desc = &pusbd->descriptor; - phost_conf = pusbd->actconfig; pconf_desc = &phost_conf->desc; -- cgit From 1a4493c55594842fa75a91ba95c73056a29f25e6 Mon Sep 17 00:00:00 2001 From: Miguel Oliveira Date: Fri, 1 Aug 2014 17:54:39 +0100 Subject: staging: rtl8723au: Fix static symbol sparse warning Fix sparse warning: drivers/staging/rtl8723au/core/rtw_efuse.c:579:5: warning: symbol 'efuse_GetCurrentSize23a' was not declared. Should it be static? by removing efuse_GetCurrentSize23a since its never used Signed-off-by: Miguel Oliveira Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8723au/core/rtw_efuse.c | 25 ------------------------- 1 file changed, 25 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/rtl8723au/core/rtw_efuse.c b/drivers/staging/rtl8723au/core/rtw_efuse.c index 345bff847352..fe092c5defa6 100644 --- a/drivers/staging/rtl8723au/core/rtw_efuse.c +++ b/drivers/staging/rtl8723au/core/rtw_efuse.c @@ -100,22 +100,6 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter, } } -/*----------------------------------------------------------------------------- - * Function: efuse_GetCurrentSize23a - * - * Overview: Get current efuse size!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/16/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ u16 Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType) { @@ -576,15 +560,6 @@ u16 efuse_GetMaxSize23a(struct rtw_adapter *padapter) return max_size; } /* */ -int efuse_GetCurrentSize23a(struct rtw_adapter *padapter, u16 *size) -{ - Efuse_PowerSwitch(padapter, false, true); - *size = Efuse_GetCurrentSize23a(padapter, EFUSE_WIFI); - Efuse_PowerSwitch(padapter, false, false); - - return _SUCCESS; -} -/* */ int rtw_efuse_map_read23a(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data) { -- cgit From 578dc59f20199c854507dd5f04839ffcaf655ce3 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 31 Jul 2014 12:29:18 +0300 Subject: staging: comedi: ni_tio: remove some dead code These conditions can never be true because "i" is always one more than NI_660X_MAX_RTSI_CHAN after the loop. Signed-off-by: Dan Carpenter Reviewed-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_tio.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ni_tio.c b/drivers/staging/comedi/drivers/ni_tio.c index fb7b271ac2a3..0525292c1d8b 100644 --- a/drivers/staging/comedi/drivers/ni_tio.c +++ b/drivers/staging/comedi/drivers/ni_tio.c @@ -1012,14 +1012,10 @@ static unsigned ni_660x_gate_to_generic_gate(unsigned gate) if (gate == NI_660X_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= NI_660X_MAX_RTSI_CHAN) - break; for (i = 0; i <= NI_660X_MAX_GATE_PIN; ++i) { if (gate == NI_660X_PIN_GATE_SEL(i)) return NI_GPCT_GATE_PIN_GATE_SELECT(i); } - if (i <= NI_660X_MAX_GATE_PIN) - break; BUG(); break; } @@ -1052,14 +1048,10 @@ static unsigned ni_m_gate_to_generic_gate(unsigned gate) if (gate == NI_M_RTSI_GATE_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= NI_M_MAX_RTSI_CHAN) - break; for (i = 0; i <= NI_M_MAX_PFI_CHAN; ++i) { if (gate == NI_M_PFI_GATE_SEL(i)) return NI_GPCT_PFI_GATE_SELECT(i); } - if (i <= NI_M_MAX_PFI_CHAN) - break; BUG(); break; } @@ -1088,14 +1080,10 @@ static unsigned ni_660x_gate2_to_generic_gate(unsigned gate) if (gate == NI_660X_RTSI_GATE2_SEL(i)) return NI_GPCT_RTSI_GATE_SELECT(i); } - if (i <= NI_660X_MAX_RTSI_CHAN) - break; for (i = 0; i <= NI_660X_MAX_UP_DOWN_PIN; ++i) { if (gate == NI_660X_UD_PIN_GATE2_SEL(i)) return NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i); } - if (i <= NI_660X_MAX_UP_DOWN_PIN) - break; BUG(); break; } -- cgit From 83f053de12db59d44ab534e7ad86a87a83936826 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Thu, 31 Jul 2014 22:30:32 +0900 Subject: staging: dgnc: rephrase comment Rephrase comment to explain original intention of function. CC: Lidza Louina CC: Mark Hounschell Suggested-by: Tobias Klauser Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/dgnc_cls.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/dgnc_cls.c b/drivers/staging/dgnc/dgnc_cls.c index 4b65306b22ac..5a76a8e2f6cf 100644 --- a/drivers/staging/dgnc/dgnc_cls.c +++ b/drivers/staging/dgnc/dgnc_cls.c @@ -1040,11 +1040,11 @@ static void cls_flush_uart_read(struct channel_t *ch) * For complete POSIX compatibility, we should be purging the * read FIFO in the UART here. * - * However, doing the statement below also incorrectly flushes - * write data as well as just basically trashing the FIFO. + * However, clearing the read FIFO (UART_FCR_CLEAR_RCVR) also + * incorrectly flushes write data as well as just basically trashing the + * FIFO. * - * I believe this is a BUG in this UART. - * So for now, we will leave the code #ifdef'ed out... + * Presumably, this is a bug in this UART. */ udelay(10); -- cgit From dfc2b00152e99e3adc36d7066811cd936b7cd60d Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Thu, 31 Jul 2014 22:31:48 +0900 Subject: staging: dgnc: Remove unneeded dgnc_trace.c and dgnc_trace.h Removes unneeded dgnc_trace.c and dgnc_trace.h CC: Lidza Louina CC: Mark Hounschell Signed-off-by: Seunghun Lee Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgnc/Makefile | 2 +- drivers/staging/dgnc/dgnc_cls.c | 1 - drivers/staging/dgnc/dgnc_driver.c | 1 - drivers/staging/dgnc/dgnc_neo.c | 1 - drivers/staging/dgnc/dgnc_trace.c | 54 -------------------------------------- drivers/staging/dgnc/dgnc_trace.h | 34 ------------------------ drivers/staging/dgnc/dgnc_tty.c | 1 - 7 files changed, 1 insertion(+), 93 deletions(-) delete mode 100644 drivers/staging/dgnc/dgnc_trace.c delete mode 100644 drivers/staging/dgnc/dgnc_trace.h (limited to 'drivers/staging') diff --git a/drivers/staging/dgnc/Makefile b/drivers/staging/dgnc/Makefile index 888c4334236b..733434f63700 100644 --- a/drivers/staging/dgnc/Makefile +++ b/drivers/staging/dgnc/Makefile @@ -4,4 +4,4 @@ obj-$(CONFIG_DGNC) += dgnc.o dgnc-objs := dgnc_cls.o dgnc_driver.o\ dgnc_mgmt.o dgnc_neo.o\ - dgnc_trace.o dgnc_tty.o dgnc_sysfs.o + dgnc_tty.o dgnc_sysfs.o diff --git a/drivers/staging/dgnc/dgnc_cls.c b/drivers/staging/dgnc/dgnc_cls.c index 5a76a8e2f6cf..cfa8384c0077 100644 --- a/drivers/staging/dgnc/dgnc_cls.c +++ b/drivers/staging/dgnc/dgnc_cls.c @@ -41,7 +41,6 @@ #include "dgnc_driver.h" /* Driver main header file */ #include "dgnc_cls.h" #include "dgnc_tty.h" -#include "dgnc_trace.h" static inline void cls_parse_isr(struct dgnc_board *brd, uint port); static inline void cls_clear_break(struct channel_t *ch, int force); diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index a5be9111987d..764613b2f4b4 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -40,7 +40,6 @@ #include "dpacompat.h" #include "dgnc_mgmt.h" #include "dgnc_tty.h" -#include "dgnc_trace.h" #include "dgnc_cls.h" #include "dgnc_neo.h" #include "dgnc_sysfs.h" diff --git a/drivers/staging/dgnc/dgnc_neo.c b/drivers/staging/dgnc/dgnc_neo.c index 9de988cc892b..68ff1161e677 100644 --- a/drivers/staging/dgnc/dgnc_neo.c +++ b/drivers/staging/dgnc/dgnc_neo.c @@ -41,7 +41,6 @@ #include "dgnc_driver.h" /* Driver main header file */ #include "dgnc_neo.h" /* Our header file */ #include "dgnc_tty.h" -#include "dgnc_trace.h" static inline void neo_parse_lsr(struct dgnc_board *brd, uint port); static inline void neo_parse_isr(struct dgnc_board *brd, uint port); diff --git a/drivers/staging/dgnc/dgnc_trace.c b/drivers/staging/dgnc/dgnc_trace.c deleted file mode 100644 index 3bb225957ff6..000000000000 --- a/drivers/staging/dgnc/dgnc_trace.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2003 Digi International (www.digi.com) - * Scott H Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; 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. - * - * - * NOTE TO LINUX KERNEL HACKERS: DO NOT REFORMAT THIS CODE! - * - * This is shared code between Digi's CVS archive and the - * Linux Kernel sources. - * Changing the source just for reformatting needlessly breaks - * our CVS diff history. - * - * Send any bug fixes/changes to: Eng.Linux at digi dot com. - * Thank you. - * - */ - -#include -#include /* For jiffies, task states */ -#include /* For tasklet and interrupt structs/defines */ -#include - -#include "dgnc_driver.h" -#include "dgnc_trace.h" - -#define TRC_TO_CONSOLE 1 - -/* file level globals */ -static char *dgnc_trcbuf; /* the ringbuffer */ - -/* - * dgnc_tracer_free() - * - * - */ -void dgnc_tracer_free(void) -{ - if (dgnc_trcbuf) - vfree(dgnc_trcbuf); -} diff --git a/drivers/staging/dgnc/dgnc_trace.h b/drivers/staging/dgnc/dgnc_trace.h deleted file mode 100644 index 4f4e2b9146c6..000000000000 --- a/drivers/staging/dgnc/dgnc_trace.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2003 Digi International (www.digi.com) - * Scott H Kilau - * - * 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, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; 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. - * - * NOTE: THIS IS A SHARED HEADER. DO NOT CHANGE CODING STYLE!!! - * - ***************************************************************************** - * Header file for dgnc_trace.c - * - */ - -#ifndef __DGNC_TRACE_H -#define __DGNC_TRACE_H - -#include "dgnc_driver.h" - -void dgnc_tracer_free(void); - -#endif - diff --git a/drivers/staging/dgnc/dgnc_tty.c b/drivers/staging/dgnc/dgnc_tty.c index 453efce75ffd..c712b431f969 100644 --- a/drivers/staging/dgnc/dgnc_tty.c +++ b/drivers/staging/dgnc/dgnc_tty.c @@ -53,7 +53,6 @@ #include "dgnc_driver.h" #include "dgnc_tty.h" #include "dgnc_types.h" -#include "dgnc_trace.h" #include "dgnc_neo.h" #include "dgnc_cls.h" #include "dpacompat.h" -- cgit From 96d4b0d5636b1810042eabedf766f35b548f1672 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 31 Jul 2014 18:21:34 +0300 Subject: staging: lustre: bitwise vs logical typo Bitwise AND was intended here obviously. Signed-off-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/lustre/lustre/obdecho/echo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lustre/lustre/obdecho/echo.c b/drivers/staging/lustre/lustre/obdecho/echo.c index f3b7429add02..dae1599af384 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo.c +++ b/drivers/staging/lustre/lustre/obdecho/echo.c @@ -125,7 +125,7 @@ static int echo_create(const struct lu_env *env, struct obd_export *exp, return -EINVAL; } - if (!(oa->o_mode && S_IFMT)) { + if (!(oa->o_mode & S_IFMT)) { CERROR("echo obd: no type!\n"); return -ENOENT; } -- cgit From 27fc26f99e63bcbe42176f08eaf590bff81a2e1c Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Thu, 31 Jul 2014 15:57:27 +0100 Subject: staging: comedi: ii_pci20kc: request and ioremap memory The "ii_pci20kc" module is a comedi driver for Intelligent Instruments PCI-20001C carrier board and modules. Despite the name, this is actually an ISA board and uses 1K of ISA memory space (below 1M) for the main board plus up to three modules. The address is set by hardware jumpers. When the board is attached to Comedi via the `COMEDI_DEVCONFIG` ioctl and the driver's legacy "attach" handler, the base address is passed in. The driver currently uses that address as-is, which is a bad idea. It doesn't even reserve the memory region. Fix that by sanity checking the passed in address, reserving the memory region and ioremapping it. Replace the current "detach" handler `comedi_legacy_detach()` with a new handler `ii20k_detach()` which unmaps the memory and releases the region. Signed-off-by: Ian Abbott Reviewed-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ii_pci20kc.c | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/ii_pci20kc.c b/drivers/staging/comedi/drivers/ii_pci20kc.c index b1f44b31162b..687db433e131 100644 --- a/drivers/staging/comedi/drivers/ii_pci20kc.c +++ b/drivers/staging/comedi/drivers/ii_pci20kc.c @@ -33,6 +33,7 @@ /* * Register I/O map */ +#define II20K_SIZE 0x400 #define II20K_MOD_OFFSET 0x100 #define II20K_ID_REG 0x00 #define II20K_ID_MOD1_EMPTY (1 << 7) @@ -439,12 +440,29 @@ static int ii20k_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct comedi_subdevice *s; + unsigned int membase; unsigned char id; bool has_dio; int ret; - /* FIXME: this doesn't seem right, should 'mmio' be ioremap'ed? */ - dev->mmio = (void __iomem *)(unsigned long)it->options[0]; + membase = it->options[0]; + if (!membase || (membase & ~(0x100000 - II20K_SIZE))) { + dev_warn(dev->class_dev, + "%s: invalid memory address specified\n", + dev->board_name); + return -EINVAL; + } + + if (!request_mem_region(membase, II20K_SIZE, dev->board_name)) { + dev_warn(dev->class_dev, "%s: I/O mem conflict (%#x,%u)\n", + dev->board_name, membase, II20K_SIZE); + return -EIO; + } + dev->iobase = membase; /* actually, a memory address */ + + dev->mmio = ioremap(membase, II20K_SIZE); + if (!dev->mmio) + return -ENOMEM; id = readb(dev->mmio + II20K_ID_REG); switch (id & II20K_ID_MASK) { @@ -509,11 +527,19 @@ static int ii20k_attach(struct comedi_device *dev, return 0; } +static void ii20k_detach(struct comedi_device *dev) +{ + if (dev->mmio) + iounmap(dev->mmio); + if (dev->iobase) /* actually, a memory address */ + release_mem_region(dev->iobase, II20K_SIZE); +} + static struct comedi_driver ii20k_driver = { .driver_name = "ii_pci20kc", .module = THIS_MODULE, .attach = ii20k_attach, - .detach = comedi_legacy_detach, + .detach = ii20k_detach, }; module_comedi_driver(ii20k_driver); -- cgit From 6f8eee65a3bfaa22a1bc902997d7603f9ef20cc0 Mon Sep 17 00:00:00 2001 From: Modestas Stankus Date: Thu, 31 Jul 2014 22:04:32 +0300 Subject: staging: wlan-ng: fixing coding style problems WARNING: Unnecessary space before function pointer arguments + int (*func) (struct mibrec *mib, WARNING: Missing a blank line after declarations + hfa384x_WPAData_t wpa; + if (isget) { Signed-off-by: Modestas Stankus Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/prism2mib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/prism2mib.c b/drivers/staging/wlan-ng/prism2mib.c index bdd3b4c442d2..f4717089a80c 100644 --- a/drivers/staging/wlan-ng/prism2mib.c +++ b/drivers/staging/wlan-ng/prism2mib.c @@ -85,7 +85,7 @@ struct mibrec { u16 parm1; u16 parm2; u16 parm3; - int (*func) (struct mibrec *mib, + int (*func)(struct mibrec *mib, int isget, wlandevice_t *wlandev, hfa384x_t *hw, @@ -722,6 +722,7 @@ static int prism2mib_priv(struct mibrec *mib, switch (mib->did) { case DIDmib_lnx_lnxConfigTable_lnxRSNAIE:{ hfa384x_WPAData_t wpa; + if (isget) { hfa384x_drvr_getconfig(hw, HFA384x_RID_CNFWPADATA, -- cgit From 0e1fc793c7e42308dddad103a195dd261c5bf650 Mon Sep 17 00:00:00 2001 From: Modestas Stankus Date: Thu, 31 Jul 2014 22:33:35 +0300 Subject: staging: wlan-ng: coding style problem fix WARNING: break is not useful after a goto or return 201: FILE: drivers/staging/wlan-ng/p80211conv.c:201: + return 1; + break; Signed-off-by: Modestas Stankus Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wlan-ng/p80211conv.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/wlan-ng/p80211conv.c b/drivers/staging/wlan-ng/p80211conv.c index 913676e1797e..3b5468c64fde 100644 --- a/drivers/staging/wlan-ng/p80211conv.c +++ b/drivers/staging/wlan-ng/p80211conv.c @@ -198,7 +198,6 @@ int skb_ether_to_p80211(wlandevice_t *wlandev, u32 ethconv, netdev_err(wlandev->netdev, "Error: Converting eth to wlan in unknown mode.\n"); return 1; - break; } p80211_wep->data = NULL; -- cgit From 6347fc88ec4453934a5428e21051ff95cad01180 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 31 Jul 2014 20:56:15 -0500 Subject: staging: comedi: addi_apci_1564: add subdevice to check diagnostic status This board provides VCC/CC diagnostic information, and it also supports diagnostic interrupts. However, as per Ian, these interrupts aren't very useful and it is enough to simply provide an interface for accessing the diagnostic status on-demand. This patch adds a 2-channel digital input subdevice with an insn_bits handler to access this information. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/addi_apci_1564.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 190b02663bd0..819255b2d67c 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -157,6 +157,18 @@ static int apci1564_do_insn_bits(struct comedi_device *dev, return insn->n; } +static int apci1564_diag_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + struct apci1564_private *devpriv = dev->private; + + data[1] = inl(devpriv->amcc_iobase + APCI1564_DO_INT_STATUS_REG) & 3; + + return insn->n; +} + /* * Change-Of-State (COS) interrupt configuration * @@ -373,7 +385,7 @@ static int apci1564_auto_attach(struct comedi_device *dev, dev->irq = pcidev->irq; } - ret = comedi_alloc_subdevices(dev, 5); + ret = comedi_alloc_subdevices(dev, 6); if (ret) return ret; @@ -434,6 +446,15 @@ static int apci1564_auto_attach(struct comedi_device *dev, if (ret) return ret; + /* Initialize the diagnostic status subdevice */ + s = &dev->subdevices[5]; + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE; + s->n_chan = 2; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = apci1564_diag_insn_bits; + return 0; } -- cgit From b9aaea39f65e242303103b5283abeaefd8e538a4 Mon Sep 17 00:00:00 2001 From: Chase Southwood Date: Thu, 31 Jul 2014 20:56:47 -0500 Subject: staging: comedi: addi_apci_1564: remove diagnostic interrupt support code As per Ian, at this point in time it is not worth implementing an async command interface for diagnostic interrupts for this board. As this is the case, this patch removes the code which supports such interrupts as it is now unused. This includes removing apci1564_do_read(), which was the insn_read operation for the digital output subdevice, since all it was doing was reading the current diagnostic interrupt type and returning it in 'data'. This doesn't follow the comedi API and this operation can be emulated by the comedi core anyway since the insn_bits operation follows the comedi API. So it is safe to simply remove this function. Signed-off-by: Chase Southwood Reviewed-by: Ian Abbott Cc: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman --- .../staging/comedi/drivers/addi-data/hwdrv_apci1564.c | 14 -------------- drivers/staging/comedi/drivers/addi_apci_1564.c | 18 ------------------ 2 files changed, 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index a1730e9e7135..8a613ae0acba 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -340,17 +340,3 @@ static int apci1564_timer_read(struct comedi_device *dev, } return insn->n; } - -/* - * Reads the interrupt status register - */ -static int apci1564_do_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - struct apci1564_private *devpriv = dev->private; - - *data = devpriv->do_int_type; - return insn->n; -} diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c index 819255b2d67c..543cb074213a 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1564.c +++ b/drivers/staging/comedi/drivers/addi_apci_1564.c @@ -13,7 +13,6 @@ struct apci1564_private { unsigned int mode1; /* riding-edge/high level channels */ unsigned int mode2; /* falling-edge/low level channels */ unsigned int ctrl; /* interrupt mode OR (edge) . AND (level) */ - unsigned int do_int_type; unsigned char timer_select_mode; unsigned char mode_select_register; struct task_struct *tsk_current; @@ -25,8 +24,6 @@ static int apci1564_reset(struct comedi_device *dev) { struct apci1564_private *devpriv = dev->private; - devpriv->do_int_type = 0; - /* Disable the input interrupts and reset status register */ outl(0x0, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); inl(devpriv->amcc_iobase + APCI1564_DI_INT_STATUS_REG); @@ -83,20 +80,6 @@ static irqreturn_t apci1564_interrupt(int irq, void *d) outl(status, devpriv->amcc_iobase + APCI1564_DI_IRQ_REG); } - status = inl(devpriv->amcc_iobase + APCI1564_DO_IRQ_REG); - if (status & 0x01) { - /* Check for Digital Output interrupt Type */ - /* 1: VCC interrupt */ - /* 2: CC interrupt */ - devpriv->do_int_type = inl(devpriv->amcc_iobase + - APCI1564_DO_INT_STATUS_REG) & 0x3; - /* Disable the Interrupt */ - outl(0x0, devpriv->amcc_iobase + APCI1564_DO_INT_CTRL_REG); - - /* Sends signal to user space */ - send_sig(SIGIO, devpriv->tsk_current, 0); - } - status = inl(devpriv->amcc_iobase + APCI1564_TIMER_IRQ_REG); if (status & 0x01) { /* Disable Timer Interrupt */ @@ -407,7 +390,6 @@ static int apci1564_auto_attach(struct comedi_device *dev, s->range_table = &range_digital; s->insn_config = apci1564_do_config; s->insn_bits = apci1564_do_insn_bits; - s->insn_read = apci1564_do_read; /* Change-Of-State (COS) interrupt subdevice */ s = &dev->subdevices[2]; -- cgit